From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from APC01-PSA-obe.outbound.protection.outlook.com (mail-psaapc01on2059.outbound.protection.outlook.com [40.107.255.59]) by sourceware.org (Postfix) with ESMTPS id E1D583858D38 for ; Tue, 13 Jun 2023 15:52:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E1D583858D38 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=siemens.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=siemens.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TvJyOiHfwLKax4BNElhje1EWqweSzdZRN3yW0CMlc5Jkgv5XGykECLapDgB0rATEtznnvUYVCmrk7HMxZsYRv9nDuZtUMyJgiEvyB5tWGsN5c2QMGq0MG9vKyk7tPpNZM65p0IFvoo5fwAtY1ZMf6OYdlTNjj26lU1PpIQysBDo0noPTPoubRZZCr+eZSo42E8DvVNpjvHMnJnh76G+jl+EFusqroBeEIfUhpk2/o5OHbmTFrB76uADzk6xM2MEKQoUZs2WZLwG32nVNxk9axaOnJUf+0tbIF0sT0i1ATt9UNlJhLhxDHl7lfQIb9vZpPS31ZEYiiTASG7nA5ya9tA== 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=nfdZZw2ydqUh9x4oUG7em2eeTVGU/nCdSd9gXoM3NYg=; b=S2WwzLEGoJwIT0CvHH+B3ZT9hiL/4yg7IBDAPNLFORU00Wq5sy24n2gpGhzajzmiTwkU/weL/XUX1HgUTPKOFfLjbjtnh4vB3f9pAd5SNZTp/41rZWjKYWdmc+QcFf9jdfHTmW34CtdAtOQpSRlc2rWLe+/gzXX0GM5GTdVWsQYgowFbiUVBR66DgHR2HiQxFU9/tiHgkZJoH0hkydf19bXi1N+D4mrQmaIkIjo2Q1sPkVoXgUrE8E3J/ciOSUYPf0HzdLxKkS6fXhyvTs/aeeazTrzhw0Co17ho2ppStcuLK2IrCzgqgEBhlR+FxMjQam9T4YBf5HhAD4Jpr2VL+g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siemens.com; dmarc=pass action=none header.from=siemens.com; dkim=pass header.d=siemens.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=siemens.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nfdZZw2ydqUh9x4oUG7em2eeTVGU/nCdSd9gXoM3NYg=; b=wldcr9aWJorQnsjgI9egenTs11OkRtSXVzXPhACTPPZYO1k/my/zeEY636p7GkkwM6685Z9fY5G8YQdctKfPe19dccjGQQZPowmuxfKwfdzEBIAHjfLI1GlgQUZFCApg43bi7iS3kqSLyc6JOd4Cy2OqrBkvbbS44yQV/jkjSZt7tYjKQB8X9nDmSnUR6s0prXWho8vEBRdFXXg/dtePX/0u/hYGuPhVAXCQIfjBNdvcFqzIIsvgTQy5sGu2SwsC0siidz7YS6xoUy484/pOM40PHdy5sYZcamoKagpKwKEs7Z1MU42twfV1Gnzy6fMWbAXhQ/dTCjw/9eVHWrPopw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=siemens.com; Received: from SG2PR06MB5430.apcprd06.prod.outlook.com (2603:1096:4:1ba::14) by SG2PR06MB5081.apcprd06.prod.outlook.com (2603:1096:4:1c8::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.29; Tue, 13 Jun 2023 15:52:30 +0000 Received: from SG2PR06MB5430.apcprd06.prod.outlook.com ([fe80::d15a:aa6e:dd53:4fc5]) by SG2PR06MB5430.apcprd06.prod.outlook.com ([fe80::d15a:aa6e:dd53:4fc5%3]) with mapi id 15.20.6455.030; Tue, 13 Jun 2023 15:52:29 +0000 Content-Type: multipart/mixed; boundary="------------H6QGrwHKvJIrbuxeY5ZfHosw" Message-ID: Date: Tue, 13 Jun 2023 23:52:25 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.11.2 Reply-To: cltang@codesourcery.com Content-Language: en-US From: Chung-Lin Tang Subject: [PATCH, OpenACC 2.7] Implement self clause for compute constructs To: gcc-patches , Thomas Schwinge , Catherine Moore X-ClientProxiedBy: TYCP286CA0281.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c9::14) To SG2PR06MB5430.apcprd06.prod.outlook.com (2603:1096:4:1ba::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SG2PR06MB5430:EE_|SG2PR06MB5081:EE_ X-MS-Office365-Filtering-Correlation-Id: 1abad398-c258-47c1-6f9e-08db6c263094 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AHgbqdNRmNpfTUnAO7BPV2n3496D2pKK1VnKE2iJGHqe/wBVEOF+KMeQcxwxu8I2P8cYN6QrvCoOCd4i2sldGR6JaECT0Z/0ahzBGnNVjI3b1tLP+qBt+cuN2L59wg4nsC4KKWMdZxcrLhorDZw/h9egBPWuVCP8CvMapKXehyH5wQO78N676w8H+c5AWorGBBwZIFnANlvhNiPfpXPLQMaTf7Os7vdXza5sxL1xc6S8mugHXFazejiXqJea5WHNM3g0QAkiKCRm71uOdpT6ZMLlpZC6tldgZ2qPtRWipXIp9ZqBMoOHZSvSwc0PSfLlvVshkOHulYG10S9c9vYzSFd5O9OQ2dgMVi1bphc/siB0T585KV80tjNJE32edM0vRq4vYMp6e9Lxe4c1MMkwoL98ZEEVFv9USvjqGk+2eoLAVlN1+0ArS6gAAAl5yEjbla/URW4j5sdn+9KkcBlYqS4fu0lVIONNkaapaiFrST0zuvknycuzLUeOOdLk+Zn1VfzCX0yDl43B3RMEO2/z28QVL6jRfGQz1JSGF/JbKFGX5wTcoWKHkyhQ/Jjku3qaV63m5LdVhLh/AEiTWo4cIxP8pk37rdgNXRODxI4cKOHkHQ+rq9D5EEJPHH84rsFXrYNaukx7LwWdyzHw+BstlA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SG2PR06MB5430.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(39860400002)(366004)(346002)(136003)(376002)(396003)(451199021)(66946007)(66476007)(66556008)(478600001)(110136005)(5660300002)(8676002)(8936002)(36756003)(235185007)(6666004)(84970400001)(31686004)(316002)(33964004)(41300700001)(6486002)(38100700002)(82960400001)(186003)(6506007)(86362001)(2906002)(26005)(2616005)(31696002)(6512007)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eDRzU1FlQmYyVlM2REIvYTRVdHpidDhwWkIvVnYzcXVLN2J6dWpzVTkydVZ1?= =?utf-8?B?WmxwVWE4ZW93QzNOY1NFd0NFSVBLazBFTzZJaG5ZZnAzWXlFYTArczVMb01p?= =?utf-8?B?bUo0S3VyM0RIRU1xR2xlanJhSS80VkJzNCtPS2hCZFhXckNRUkd4aGhnWklP?= =?utf-8?B?VVBtKzBid0NuOXl3d29uY0lqT2NqYTBNYk5XWXhYS3pJbzU0V0h1MjdIQkFP?= =?utf-8?B?U3pDb1lrTVgvenpHeVhEOWxCd1BLamJaeFRYSXVBZExnb3FXd1paMlBPZGJU?= =?utf-8?B?UGRSMzBxU1RBbWUzQktLNXVsMEJ4Tzk2ckVlcXNQd1REQ0RFTkpOekJsTnZR?= =?utf-8?B?OTAvUXBFS2lEQ0xhZHZkamQ3MzkrTExmTkhWS2tVQXRIUjUwU0lLMDdnKysw?= =?utf-8?B?bGRrSXJ1b1ExQ3doZEpSdmJLZEVuR0NtVXlkc3FqUHNPcUp1UkhuT2o5aDNY?= =?utf-8?B?UW5YMXJWeDNpN1pnTXZrenBxckpjUTVtSUVXTVN0S01vbWRMalVmTjM1dWxz?= =?utf-8?B?M2VLZXhxSVA0RzBGVGNjTHNPamZCQWZ1NUt0N2s1Z0RsRm5ra3RGaUZiMGZG?= =?utf-8?B?bTJJREpFdTREZG5Fc1FrcFlNbUNYcVFreHhEZkNES2xvNFEvWThsbEFNUXpR?= =?utf-8?B?bkluTVFlWldyRVJIUjUrVXhjcEJPTnJUNm4yRkNacXNUOHpHQ1g2dFZxVGdv?= =?utf-8?B?Z2RnQjlLaHJpTEdDUmVTb3BpdG13NkFmcFZySkJmbTdnYkxtVEFnbUFxU0Jj?= =?utf-8?B?a2RRYWh3cUJadjEwQk9hU2djNFlLczlSM1hOWmZlSm5lZXIwNllEdW9hZ1I2?= =?utf-8?B?RnZJWERJZ2RDWVF6Q1FSSHE5a3YxSXl2ZzNCaENQNkE1dnA5ZDhTVWQ3M0pv?= =?utf-8?B?WFlDNlUvN2xUcnhvYmsrblJ6TmRRTHJOUi9oZWQvTXJmOThpSE42S0NQNUVR?= =?utf-8?B?dk1ST2liUHFaTVpRdGZJTC9wQ2pHQ2JSQ2pKVlpKOWN6VExxR2ZaVERYb29o?= =?utf-8?B?TFNRaTZ3NGNLa1NNdGtzNDNINE1hc3JNRzM1eUoxQTZuVGQ3ejM5OUw3NGlQ?= =?utf-8?B?ZnRkY0djN1cwUFBjYld5N056Z3BsRjY3bFZtdU05c0JxM2lUOWZLSDVaMEJH?= =?utf-8?B?U2p4L3MrOXdNeEM0S041czBjWVN1ZFlhMmlHVzZsNnNkZmNKdGVMb1F4aFc5?= =?utf-8?B?RTRyRHYwRmxtemhYQnlBQ1AyOVNDSzNoM2tSdUJoNXFvTE8vWmN0cHNYMThx?= =?utf-8?B?Zm1mVzh6R0NxYlRyTkN1QzhJV1JCZVE1bzdOTzZZMTN4clZWYkpSOXVlTkRS?= =?utf-8?B?d2Rta3JEV1ZabjVCdFdSb1p6WVhFWWRYUnViOWxXN1BoOHAxcGdQRDFDZ3pB?= =?utf-8?B?elh6OGwyS0xzRHZwckNHRTZMeVB2NlA4dngyWlZIcW9jeGxaVFU2Wm13VGhY?= =?utf-8?B?UkRIcTJDRW1SR1lEYkNLZ1dyWSszQlRYUTZqa0krMkxzV0FrdlowVi95djBk?= =?utf-8?B?T0FsYmFVSis1VEJQUDdSREdxNm1SZG9lTkJTdmdFUit5aHlCVk45d3hUbjgw?= =?utf-8?B?c0IwbktHSkJVb0U5K0J3U2FkenVYMnR2NTZMOFhtbnRoZkJtSEM0UjR6Tmd2?= =?utf-8?B?ZGN1S3VhaDZoQUhrdVZYSjkydUpIejR1K3oxLzFENFBKQ2hoeDFCN1ZQOFJn?= =?utf-8?B?MjdPYjI0eTJtOVl4MjMwUzQ1N1NnTEtXaDBtNXNOWEFBbUVNNjZkWE1IaE5M?= =?utf-8?B?Z1pmL0RlY1lNbFlkcHc3U0gzQi9PamhweFZRYXp0QlU2Y1ZwVVN5ZytMUUhC?= =?utf-8?B?M2FMRUR1Tk9ITThhSjI0dnBWTzVIbjhwbFNxd3VYNlQ0UnRrV1dLVm9IcHRD?= =?utf-8?B?cnlzUFUwNk1UZE9tWVFrY09WYnU0ZEh2ZnJPNDNabkJIVzl3QWVORk1wbG9l?= =?utf-8?B?QVBJdy9UajdiMFQ1RDgvbjcwUTJZOVlmZFFUYTdMQUxZaEI2YnBzNVpBd29s?= =?utf-8?B?emFWODFKK0ExVjFDZmtNbXJNdkpzNFhPSFRzVGNFRTFwVEFpTjkvZXFEcElr?= =?utf-8?B?QjVTb05NQ2dONGhXMi91MzZkZW05bnh3cjF2dndKRVcra2YzMEJrTzBNWXQ3?= =?utf-8?B?WER3U2FIMUxDbDlnejVZNmVubXRlSGYvOU5hMFpxR2tzMnpDY3hkQjBncUZj?= =?utf-8?B?aFE9PQ==?= X-OriginatorOrg: siemens.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1abad398-c258-47c1-6f9e-08db6c263094 X-MS-Exchange-CrossTenant-AuthSource: SG2PR06MB5430.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2023 15:52:28.8232 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 38ae3bcd-9579-4fd4-adda-b42e1495d55a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1+R4SHxaUJ//GjAQetNnIfxai9koO32yPWDR0rbltoKea2+o15/La9O6KeCsxwmcUMhip4qCRTESNrUNyBuwqpLTbg9fLdRLf8r7X5yfM2I= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2PR06MB5081 X-Spam-Status: No, score=-9.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,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 server2.sourceware.org List-Id: --------------H6QGrwHKvJIrbuxeY5ZfHosw Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi Thomas, This patch implements the compiler side for the 'self' clause for compute constructs: parallel, kernels, and serial. As you know, the actual "local device" device type for libgomp is not yet implemented, so the libgomp side is basically just a simple duplicate of what host-fallback is doing, though everything else should be completed by this patch. Tested on powerpc64le-linux/nvptx, x64_64-linux/amdgcn tests pending. Is this okay for trunk? Thanks, Chung-Lin 2023-06-13 Chung-Lin Tang gcc/c/ChangeLog: * c-parser.cc (c_parser_oacc_compute_clause_self): New function. (c_parser_oacc_all_clauses): Add new 'bool compute_p = false' parameter, add parsing of self clause when compute_p is true. (OACC_KERNELS_CLAUSE_MASK): Add PRAGMA_OACC_CLAUSE_SELF. (OACC_PARALLEL_CLAUSE_MASK): Likewise, (OACC_SERIAL_CLAUSE_MASK): Likewise. (c_parser_oacc_compute): Adjust call to c_parser_oacc_all_clauses to set compute_p argument to true. * c-typeck.cc (c_finish_omp_clauses): Add OMP_CLAUSE_SELF case. gcc/cp/ChangeLog: * parser.cc (cp_parser_oacc_compute_clause_self): New function. (cp_parser_oacc_all_clauses): Add new 'bool compute_p = false' parameter, add parsing of self clause when compute_p is true. (OACC_KERNELS_CLAUSE_MASK): Add PRAGMA_OACC_CLAUSE_SELF. (OACC_PARALLEL_CLAUSE_MASK): Likewise, (OACC_SERIAL_CLAUSE_MASK): Likewise. (cp_parser_oacc_compute): Adjust call to c_parser_oacc_all_clauses to set compute_p argument to true. * pt.cc (tsubst_omp_clauses): Add OMP_CLAUSE_SELF case. * c-typeck.cc (c_finish_omp_clauses): Add OMP_CLAUSE_SELF case, merged with OMP_CLAUSE_IF case. gcc/fortran/ChangeLog: * gfortran.h (typedef struct gfc_omp_clauses): Add self_expr field. * openmp.cc (enum omp_mask2): Add OMP_CLAUSE_SELF. (gfc_match_omp_clauses): Add handling for OMP_CLAUSE_SELF. (OACC_PARALLEL_CLAUSES): Add OMP_CLAUSE_SELF. (OACC_KERNELS_CLAUSES): Likewise. (OACC_SERIAL_CLAUSES): Likewise. (resolve_omp_clauses): Add handling for omp_clauses->self_expr. * trans-openmp.cc (gfc_trans_omp_clauses): Add handling of clauses->self_expr and building of OMP_CLAUSE_SELF tree clause. (gfc_split_omp_clauses): Add handling of self_expr field copy. gcc/ChangeLog: * gimplify.cc (gimplify_scan_omp_clauses): Add OMP_CLAUSE_SELF case. (gimplify_adjust_omp_clauses): Likewise. * omp-expand.cc (expand_omp_target): Add OMP_CLAUSE_SELF expansion code, * omp-low.cc (scan_sharing_clauses): Add OMP_CLAUSE_SELF case. * tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_SELF enum. * tree-nested.cc (convert_nonlocal_omp_clauses): Add OMP_CLAUSE_SELF case. (convert_local_omp_clauses): Likewise. * tree-pretty-print.cc (dump_omp_clause): Add OMP_CLAUSE_SELF case. * tree.cc (omp_clause_num_ops): Add OMP_CLAUSE_SELF entry. (omp_clause_code_name): Likewise. * tree.h (OMP_CLAUSE_SELF_EXPR): New macro. gcc/testsuite/ChangeLog: * c-c++-common/goacc/self-clause-1.c: New test. * c-c++-common/goacc/self-clause-2.c: New test. * gfortran.dg/goacc/self.f95: New test. include/ChangeLog: * gomp-constants.h (GOACC_FLAG_LOCAL_DEVICE): New flag bit value. libgomp/ChangeLog: * oacc-parallel.c (GOACC_parallel_keyed): Add code to handle GOACC_FLAG_LOCAL_DEVICE case. * testsuite/libgomp.oacc-c-c++-common/self-1.c: New test. --------------H6QGrwHKvJIrbuxeY5ZfHosw Content-Type: text/plain; charset=UTF-8; name="0001-OpenACC-2.7-Implement-self-clause-for-compute-constr.patch" Content-Disposition: attachment; filename*0="0001-OpenACC-2.7-Implement-self-clause-for-compute-constr.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA0NDk4ODM5ODFjOGUxZjcwN2I0N2ZmOGY4ZGQ3MDA0OWI5ZmZkYTgyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDaHVuZy1MaW4gVGFuZyA8Y2x0YW5nQGNvZGVzb3VyY2VyeS5j b20+CkRhdGU6IFR1ZSwgMTMgSnVuIDIwMjMgMDg6NDQ6MzEgLTA3MDAKU3ViamVjdDogW1BBVENI XSBPcGVuQUNDIDIuNzogSW1wbGVtZW50IHNlbGYgY2xhdXNlIGZvciBjb21wdXRlIGNvbnN0cnVj dHMKClRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUgJ3NlbGYnIGNsYXVzZSBmb3IgY29tcHV0ZSBj b25zdHJ1Y3RzOiBwYXJhbGxlbCwKa2VybmVscywgYW5kIHNlcmlhbC4gVGhpcyBjbGF1c2UgY29u ZGl0aW9uYWxseSB1c2VzIHRoZSBsb2NhbCBkZXZpY2UKKHRoZSBob3N0IG11bHQtY29yZSBDUFUp IGFzIHRoZSBleGVjdXRpbmcgZGV2aWNlIG9mIHRoZSBjb21wdXRlIHJlZ2lvbi4KClRoZSBhY3R1 YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlICJsb2NhbCBkZXZpY2UiIGRldmljZSB0eXBlIGluc2lk ZSBsaWJnb21wCihwcmVzdW1hYmx5IHVzaW5nIHB0aHJlYWRzKSBpcyBzdGlsbCBub3QgeWV0IGNv bXBsZXRlZCwgc28gdGhlIGxpYmdvbXAKc2lkZSBpcyBzdGlsbCBpbXBsZW1lbnRlZCB0aGUgZXhh Y3Qgc2FtZSBhcyBob3N0LWZhbGxiYWNrIG1vZGUuIChzbyBhcyBvZiBub3csCml0IGVzc2VudGlh bGx5IGJlaGF2ZXMgbGlrZSB0aGUgJ2lmJyBjbGF1c2Ugd2l0aCB0aGUgY29uZGl0aW9uIGludmVy dGVkKQoKZ2NjL2MvQ2hhbmdlTG9nOgoKCSogYy1wYXJzZXIuY2MgKGNfcGFyc2VyX29hY2NfY29t cHV0ZV9jbGF1c2Vfc2VsZik6IE5ldyBmdW5jdGlvbi4KCShjX3BhcnNlcl9vYWNjX2FsbF9jbGF1 c2VzKTogQWRkIG5ldyAnYm9vbCBjb21wdXRlX3AgPSBmYWxzZScKCXBhcmFtZXRlciwgYWRkIHBh cnNpbmcgb2Ygc2VsZiBjbGF1c2Ugd2hlbiBjb21wdXRlX3AgaXMgdHJ1ZS4KCShPQUNDX0tFUk5F TFNfQ0xBVVNFX01BU0spOiBBZGQgUFJBR01BX09BQ0NfQ0xBVVNFX1NFTEYuCgkoT0FDQ19QQVJB TExFTF9DTEFVU0VfTUFTSyk6IExpa2V3aXNlLAoJKE9BQ0NfU0VSSUFMX0NMQVVTRV9NQVNLKTog TGlrZXdpc2UuCgkoY19wYXJzZXJfb2FjY19jb21wdXRlKTogQWRqdXN0IGNhbGwgdG8gY19wYXJz ZXJfb2FjY19hbGxfY2xhdXNlcyB0bwoJc2V0IGNvbXB1dGVfcCBhcmd1bWVudCB0byB0cnVlLgoJ KiBjLXR5cGVjay5jYyAoY19maW5pc2hfb21wX2NsYXVzZXMpOiBBZGQgT01QX0NMQVVTRV9TRUxG IGNhc2UuCgpnY2MvY3AvQ2hhbmdlTG9nOgoKCSogcGFyc2VyLmNjIChjcF9wYXJzZXJfb2FjY19j b21wdXRlX2NsYXVzZV9zZWxmKTogTmV3IGZ1bmN0aW9uLgoJKGNwX3BhcnNlcl9vYWNjX2FsbF9j bGF1c2VzKTogQWRkIG5ldyAnYm9vbCBjb21wdXRlX3AgPSBmYWxzZScKCXBhcmFtZXRlciwgYWRk IHBhcnNpbmcgb2Ygc2VsZiBjbGF1c2Ugd2hlbiBjb21wdXRlX3AgaXMgdHJ1ZS4KCShPQUNDX0tF Uk5FTFNfQ0xBVVNFX01BU0spOiBBZGQgUFJBR01BX09BQ0NfQ0xBVVNFX1NFTEYuCgkoT0FDQ19Q QVJBTExFTF9DTEFVU0VfTUFTSyk6IExpa2V3aXNlLAoJKE9BQ0NfU0VSSUFMX0NMQVVTRV9NQVNL KTogTGlrZXdpc2UuCgkoY3BfcGFyc2VyX29hY2NfY29tcHV0ZSk6IEFkanVzdCBjYWxsIHRvIGNf cGFyc2VyX29hY2NfYWxsX2NsYXVzZXMgdG8KCXNldCBjb21wdXRlX3AgYXJndW1lbnQgdG8gdHJ1 ZS4KCSogcHQuY2MgKHRzdWJzdF9vbXBfY2xhdXNlcyk6IEFkZCBPTVBfQ0xBVVNFX1NFTEYgY2Fz ZS4KCSogYy10eXBlY2suY2MgKGNfZmluaXNoX29tcF9jbGF1c2VzKTogQWRkIE9NUF9DTEFVU0Vf U0VMRiBjYXNlLCBtZXJnZWQKCXdpdGggT01QX0NMQVVTRV9JRiBjYXNlLgoKZ2NjL2ZvcnRyYW4v Q2hhbmdlTG9nOgoKCSogZ2ZvcnRyYW4uaCAodHlwZWRlZiBzdHJ1Y3QgZ2ZjX29tcF9jbGF1c2Vz KTogQWRkIHNlbGZfZXhwciBmaWVsZC4KCSogb3Blbm1wLmNjIChlbnVtIG9tcF9tYXNrMik6IEFk ZCBPTVBfQ0xBVVNFX1NFTEYuCgkoZ2ZjX21hdGNoX29tcF9jbGF1c2VzKTogQWRkIGhhbmRsaW5n IGZvciBPTVBfQ0xBVVNFX1NFTEYuCgkoT0FDQ19QQVJBTExFTF9DTEFVU0VTKTogQWRkIE9NUF9D TEFVU0VfU0VMRi4KCShPQUNDX0tFUk5FTFNfQ0xBVVNFUyk6IExpa2V3aXNlLgoJKE9BQ0NfU0VS SUFMX0NMQVVTRVMpOiBMaWtld2lzZS4KCShyZXNvbHZlX29tcF9jbGF1c2VzKTogQWRkIGhhbmRs aW5nIGZvciBvbXBfY2xhdXNlcy0+c2VsZl9leHByLgoJKiB0cmFucy1vcGVubXAuY2MgKGdmY190 cmFuc19vbXBfY2xhdXNlcyk6IEFkZCBoYW5kbGluZyBvZgoJY2xhdXNlcy0+c2VsZl9leHByIGFu ZCBidWlsZGluZyBvZiBPTVBfQ0xBVVNFX1NFTEYgdHJlZSBjbGF1c2UuCgkoZ2ZjX3NwbGl0X29t cF9jbGF1c2VzKTogQWRkIGhhbmRsaW5nIG9mIHNlbGZfZXhwciBmaWVsZCBjb3B5LgoKZ2NjL0No YW5nZUxvZzoKCgkqIGdpbXBsaWZ5LmNjIChnaW1wbGlmeV9zY2FuX29tcF9jbGF1c2VzKTogQWRk IE9NUF9DTEFVU0VfU0VMRiBjYXNlLgoJKGdpbXBsaWZ5X2FkanVzdF9vbXBfY2xhdXNlcyk6IExp a2V3aXNlLgoJKiBvbXAtZXhwYW5kLmNjIChleHBhbmRfb21wX3RhcmdldCk6IEFkZCBPTVBfQ0xB VVNFX1NFTEYgZXhwYW5zaW9uIGNvZGUsCgkqIG9tcC1sb3cuY2MgKHNjYW5fc2hhcmluZ19jbGF1 c2VzKTogQWRkIE9NUF9DTEFVU0VfU0VMRiBjYXNlLgoJKiB0cmVlLWNvcmUuaCAoZW51bSBvbXBf Y2xhdXNlX2NvZGUpOiBBZGQgT01QX0NMQVVTRV9TRUxGIGVudW0uCgkqIHRyZWUtbmVzdGVkLmNj IChjb252ZXJ0X25vbmxvY2FsX29tcF9jbGF1c2VzKTogQWRkIE9NUF9DTEFVU0VfU0VMRgoJY2Fz ZS4KCShjb252ZXJ0X2xvY2FsX29tcF9jbGF1c2VzKTogTGlrZXdpc2UuCgkqIHRyZWUtcHJldHR5 LXByaW50LmNjIChkdW1wX29tcF9jbGF1c2UpOiBBZGQgT01QX0NMQVVTRV9TRUxGIGNhc2UuCgkq IHRyZWUuY2MgKG9tcF9jbGF1c2VfbnVtX29wcyk6IEFkZCBPTVBfQ0xBVVNFX1NFTEYgZW50cnku Cgkob21wX2NsYXVzZV9jb2RlX25hbWUpOiBMaWtld2lzZS4KCSogdHJlZS5oIChPTVBfQ0xBVVNF X1NFTEZfRVhQUik6IE5ldyBtYWNyby4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCSogYy1j KystY29tbW9uL2dvYWNjL3NlbGYtY2xhdXNlLTEuYzogTmV3IHRlc3QuCgkqIGMtYysrLWNvbW1v bi9nb2FjYy9zZWxmLWNsYXVzZS0yLmM6IE5ldyB0ZXN0LgoJKiBnZm9ydHJhbi5kZy9nb2FjYy9z ZWxmLmY5NTogTmV3IHRlc3QuCgppbmNsdWRlL0NoYW5nZUxvZzoKCgkqIGdvbXAtY29uc3RhbnRz LmggKEdPQUNDX0ZMQUdfTE9DQUxfREVWSUNFKTogTmV3IGZsYWcgYml0IHZhbHVlLgoKbGliZ29t cC9DaGFuZ2VMb2c6CgoJKiBvYWNjLXBhcmFsbGVsLmMgKEdPQUNDX3BhcmFsbGVsX2tleWVkKTog QWRkIGNvZGUgdG8gaGFuZGxlCglHT0FDQ19GTEFHX0xPQ0FMX0RFVklDRSBjYXNlLgoJKiB0ZXN0 c3VpdGUvbGliZ29tcC5vYWNjLWMtYysrLWNvbW1vbi9zZWxmLTEuYzogTmV3IHRlc3QuCi0tLQog Z2NjL2MvYy1wYXJzZXIuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYwICstCiBn Y2MvYy9jLXR5cGVjay5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZ2Nj L2NwL3BhcnNlci5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDY0ICstCiBnY2Mv Y3AvcHQuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZ2NjL2Nw L3NlbWFudGljcy5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICstCiBnY2MvZm9y dHJhbi9nZm9ydHJhbi5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZ2NjL2ZvcnRy YW4vb3Blbm1wLmNjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDM5ICstCiBnY2MvZm9ydHJh bi90cmFucy1vcGVubXAuY2MgICAgICAgICAgICAgICAgICAgfCAgMTggKwogZ2NjL2dpbXBsaWZ5 LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGdjYy9vbXAtZXhwYW5k LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0MSArCiBnY2Mvb21wLWxvdy5jYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogLi4uL2MtYysrLWNvbW1vbi9n b2FjYy9zZWxmLWNsYXVzZS0xLmMgICAgICAgIHwgIDIyICsKIC4uLi9jLWMrKy1jb21tb24vZ29h Y2Mvc2VsZi1jbGF1c2UtMi5jICAgICAgICB8ICAxNyArCiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFu LmRnL2dvYWNjL3NlbGYuZjk1ICAgICAgfCAgNTMgKwogZ2NjL3RyZWUtY29yZS5oICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAzICsKIGdjYy90cmVlLW5lc3RlZC5jYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBnY2MvdHJlZS1wcmV0dHktcHJpbnQuY2MgICAg ICAgICAgICAgICAgICAgICAgfCAgIDcgKy0KIGdjYy90cmVlLmNjICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgMiArCiBnY2MvdHJlZS5oICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogaW5jbHVkZS9nb21wLWNvbnN0YW50cy5oICAgICAgICAg ICAgICAgICAgICAgIHwgICAyICsKIGxpYmdvbXAvb2FjYy1wYXJhbGxlbC5jICAgICAgICAgICAg ICAgICAgICAgICB8ICAxMSArCiAuLi4vbGliZ29tcC5vYWNjLWMtYysrLWNvbW1vbi9zZWxmLTEu YyAgICAgICAgfCA5NjIgKysrKysrKysrKysrKysrKysrCiAyMiBmaWxlcyBjaGFuZ2VkLCAxMzA1 IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvYWNjL3NlbGYtY2xhdXNlLTEuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvYWNjL3NlbGYtY2xhdXNlLTIuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2Mvc2VsZi5m OTUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLm9hY2MtYy1j KystY29tbW9uL3NlbGYtMS5jCgpkaWZmIC0tZ2l0IGEvZ2NjL2MvYy1wYXJzZXIuY2MgYi9nY2Mv Yy9jLXBhcnNlci5jYwppbmRleCBlMzg5OWJhZTUwNS4uOGM4NzIyY2NmYmUgMTAwNjQ0Ci0tLSBh L2djYy9jL2MtcGFyc2VyLmNjCisrKyBiL2djYy9jL2MtcGFyc2VyLmNjCkBAIC0xNTQzNyw2ICsx NTQzNyw0MSBAQCBjX3BhcnNlcl9vYWNjX2NsYXVzZV93YWl0IChjX3BhcnNlciAqcGFyc2VyLCB0 cmVlIGxpc3QpCiAgIHJldHVybiBsaXN0OwogfQogCisvKiBPcGVuQUNDIDIuNzoKKyAgIHNlbGYg WyggZXhwcmVzc2lvbiApXSAqLworCitzdGF0aWMgdHJlZQorY19wYXJzZXJfb2FjY19jb21wdXRl X2NsYXVzZV9zZWxmIChjX3BhcnNlciAqcGFyc2VyLCB0cmVlIGxpc3QpCit7CisgIHRyZWUgdDsK KyAgbG9jYXRpb25fdCBsb2NhdGlvbiA9IGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmxv Y2F0aW9uOworICBpZiAoY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKS0+dHlwZSA9PSBDUFBf T1BFTl9QQVJFTikKKyAgICB7CisgICAgICBtYXRjaGluZ19wYXJlbnMgcGFyZW5zOworICAgICAg cGFyZW5zLmNvbnN1bWVfb3BlbiAocGFyc2VyKTsKKworICAgICAgbG9jYXRpb25fdCBsb2MgPSBj X3BhcnNlcl9wZWVrX3Rva2VuIChwYXJzZXIpLT5sb2NhdGlvbjsKKyAgICAgIGNfZXhwciBleHBy ID0gY19wYXJzZXJfZXhwcl9ub19jb21tYXMgKHBhcnNlciwgTlVMTCk7CisgICAgICBleHByID0g Y29udmVydF9sdmFsdWVfdG9fcnZhbHVlIChsb2MsIGV4cHIsIHRydWUsIHRydWUpOworICAgICAg dCA9IGNfb2JqY19jb21tb25fdHJ1dGh2YWx1ZV9jb252ZXJzaW9uIChsb2MsIGV4cHIudmFsdWUp OworICAgICAgdCA9IGNfZnVsbHlfZm9sZCAodCwgZmFsc2UsIE5VTEwpOworICAgICAgcGFyZW5z LnNraXBfdW50aWxfZm91bmRfY2xvc2UgKHBhcnNlcik7CisgICAgfQorICBlbHNlCisgICAgdCA9 IHRydXRodmFsdWVfdHJ1ZV9ub2RlOworCisgIGZvciAodHJlZSBjID0gbGlzdDsgYzsgYyA9IE9N UF9DTEFVU0VfQ0hBSU4gKGMpKQorICAgIGlmIChPTVBfQ0xBVVNFX0NPREUgKGMpID09IE9NUF9D TEFVU0VfU0VMRikKKyAgICAgIHsKKwllcnJvcl9hdCAobG9jYXRpb24sICJ0b28gbWFueSAlPHNl bGYlPiBjbGF1c2VzIik7CisJcmV0dXJuIGxpc3Q7CisgICAgICB9CisKKyAgdHJlZSBjID0gYnVp bGRfb21wX2NsYXVzZSAobG9jYXRpb24sIE9NUF9DTEFVU0VfU0VMRik7CisgIE9NUF9DTEFVU0Vf U0VMRl9FWFBSIChjKSA9IHQ7CisgIE9NUF9DTEFVU0VfQ0hBSU4gKGMpID0gbGlzdDsKKyAgcmV0 dXJuIGM7Cit9CiAKIC8qIE9wZW5NUCA1LjA6CiAgICBvcmRlciAoIGNvbmN1cnJlbnQgKQpAQCAt MTc1NjAsNyArMTc1OTUsOCBAQCBjX3BhcnNlcl9vbXBfY2xhdXNlX2RldGFjaCAoY19wYXJzZXIg KnBhcnNlciwgdHJlZSBsaXN0KQogCiBzdGF0aWMgdHJlZQogY19wYXJzZXJfb2FjY19hbGxfY2xh dXNlcyAoY19wYXJzZXIgKnBhcnNlciwgb21wX2NsYXVzZV9tYXNrIG1hc2ssCi0JCQkgICBjb25z dCBjaGFyICp3aGVyZSwgYm9vbCBmaW5pc2hfcCA9IHRydWUpCisJCQkgICBjb25zdCBjaGFyICp3 aGVyZSwgYm9vbCBmaW5pc2hfcCA9IHRydWUsCisJCQkgICBib29sIGNvbXB1dGVfcCA9IGZhbHNl KQogewogICB0cmVlIGNsYXVzZXMgPSBOVUxMOwogICBib29sIGZpcnN0ID0gdHJ1ZTsKQEAgLTE3 NTc2LDcgKzE3NjEyLDE4IEBAIGNfcGFyc2VyX29hY2NfYWxsX2NsYXVzZXMgKGNfcGFyc2VyICpw YXJzZXIsIG9tcF9jbGF1c2VfbWFzayBtYXNrLAogCWNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBh cnNlcik7CiAKICAgICAgIGhlcmUgPSBjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJzZXIpLT5sb2Nh dGlvbjsKLSAgICAgIGNfa2luZCA9IGNfcGFyc2VyX29tcF9jbGF1c2VfbmFtZSAocGFyc2VyKTsK KworICAgICAgLyogRm9yIE9wZW5BQ0MgY29tcHV0ZSBkaXJlY3RpdmVzICovCisgICAgICBpZiAo Y29tcHV0ZV9wCisJICAmJiBjX3BhcnNlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIsIENQUF9OQU1F KQorCSAgJiYgIXN0cmNtcCAoSURFTlRJRklFUl9QT0lOVEVSIChjX3BhcnNlcl9wZWVrX3Rva2Vu IChwYXJzZXIpLT52YWx1ZSksCisJCSAgICAgICJzZWxmIikpCisJeworCSAgY19raW5kID0gUFJB R01BX09BQ0NfQ0xBVVNFX1NFTEY7CisJICBjX3BhcnNlcl9jb25zdW1lX3Rva2VuIChwYXJzZXIp OworCX0KKyAgICAgIGVsc2UKKwljX2tpbmQgPSBjX3BhcnNlcl9vbXBfY2xhdXNlX25hbWUgKHBh cnNlcik7CiAKICAgICAgIHN3aXRjaCAoY19raW5kKQogCXsKQEAgLTE3NzA4LDYgKzE3NzU1LDEw IEBAIGNfcGFyc2VyX29hY2NfYWxsX2NsYXVzZXMgKGNfcGFyc2VyICpwYXJzZXIsIG9tcF9jbGF1 c2VfbWFzayBtYXNrLAogCQkJCQkgICAgIGZhbHNlLCBjbGF1c2VzKTsKIAkgIGNfbmFtZSA9ICJy ZWR1Y3Rpb24iOwogCSAgYnJlYWs7CisJY2FzZSBQUkFHTUFfT0FDQ19DTEFVU0VfU0VMRjoKKwkg IGNsYXVzZXMgPSBjX3BhcnNlcl9vYWNjX2NvbXB1dGVfY2xhdXNlX3NlbGYgKHBhcnNlciwgY2xh dXNlcyk7CisJICBjX25hbWUgPSAic2VsZiI7CisJICBicmVhazsKIAljYXNlIFBSQUdNQV9PQUND X0NMQVVTRV9TRVE6CiAJICBjbGF1c2VzID0gY19wYXJzZXJfb2FjY19zaW1wbGVfY2xhdXNlICho ZXJlLCBPTVBfQ0xBVVNFX1NFUSwKIAkJCQkJCSBjbGF1c2VzKTsKQEAgLTE4NTQ0LDYgKzE4NTk1 LDcgQEAgY19wYXJzZXJfb2FjY19sb29wIChsb2NhdGlvbl90IGxvYywgY19wYXJzZXIgKnBhcnNl ciwgY2hhciAqcF9uYW1lLAogCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PQUNDX0NM QVVTRV9OVU1fR0FOR1MpCQlcCiAJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09BQ0Nf Q0xBVVNFX05VTV9XT1JLRVJTKQkJXAogCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9P QUNDX0NMQVVTRV9QUkVTRU5UKQkJXAorCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9P QUNDX0NMQVVTRV9TRUxGKQkJXAogCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PQUND X0NMQVVTRV9WRUNUT1JfTEVOR1RIKQlcCiAJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01B X09BQ0NfQ0xBVVNFX1dBSVQpICkKIApAQCAtMTg1NjQsNiArMTg2MTYsNyBAQCBjX3BhcnNlcl9v YWNjX2xvb3AgKGxvY2F0aW9uX3QgbG9jLCBjX3BhcnNlciAqcGFyc2VyLCBjaGFyICpwX25hbWUs CiAJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09BQ0NfQ0xBVVNFX05VTV9XT1JLRVJT KQkJXAogCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PQUNDX0NMQVVTRV9QUkVTRU5U KQkJXAogCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PQUNDX0NMQVVTRV9SRURVQ1RJ T04pCQlcCisJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09BQ0NfQ0xBVVNFX1NFTEYp CQlcCiAJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09BQ0NfQ0xBVVNFX1ZFQ1RPUl9M RU5HVEgpCVwKIAl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT0FDQ19DTEFVU0VfV0FJ VCkgKQogCkBAIC0xODU4Miw2ICsxODYzNSw3IEBAIGNfcGFyc2VyX29hY2NfbG9vcCAobG9jYXRp b25fdCBsb2MsIGNfcGFyc2VyICpwYXJzZXIsIGNoYXIgKnBfbmFtZSwKIAl8IChPTVBfQ0xBVVNF X01BU0tfMSA8PCBQUkFHTUFfT0FDQ19DTEFVU0VfRklSU1RQUklWQVRFKQlcCiAJfCAoT01QX0NM QVVTRV9NQVNLXzEgPDwgUFJBR01BX09BQ0NfQ0xBVVNFX1BSRVNFTlQpCQlcCiAJfCAoT01QX0NM QVVTRV9NQVNLXzEgPDwgUFJBR01BX09BQ0NfQ0xBVVNFX1JFRFVDVElPTikJCVwKKwl8IChPTVBf Q0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT0FDQ19DTEFVU0VfU0VMRikJCVwKIAl8IChPTVBfQ0xB VVNFX01BU0tfMSA8PCBQUkFHTUFfT0FDQ19DTEFVU0VfV0FJVCkgKQogCiBzdGF0aWMgdHJlZQpA QCAtMTg2MjQsNyArMTg2NzgsNyBAQCBjX3BhcnNlcl9vYWNjX2NvbXB1dGUgKGxvY2F0aW9uX3Qg bG9jLCBjX3BhcnNlciAqcGFyc2VyLAogCX0KICAgICB9CiAKLSAgdHJlZSBjbGF1c2VzID0gY19w YXJzZXJfb2FjY19hbGxfY2xhdXNlcyAocGFyc2VyLCBtYXNrLCBwX25hbWUpOworICB0cmVlIGNs YXVzZXMgPSBjX3BhcnNlcl9vYWNjX2FsbF9jbGF1c2VzIChwYXJzZXIsIG1hc2ssIHBfbmFtZSwg dHJ1ZSwgdHJ1ZSk7CiAKICAgdHJlZSBibG9jayA9IGNfYmVnaW5fb21wX3BhcmFsbGVsICgpOwog ICBhZGRfc3RtdCAoY19wYXJzZXJfb21wX3N0cnVjdHVyZWRfYmxvY2sgKHBhcnNlciwgaWZfcCkp OwpkaWZmIC0tZ2l0IGEvZ2NjL2MvYy10eXBlY2suY2MgYi9nY2MvYy9jLXR5cGVjay5jYwppbmRl eCAyMmUyNDBhM2MyYS4uODliZjIyZGYzNzIgMTAwNjQ0Ci0tLSBhL2djYy9jL2MtdHlwZWNrLmNj CisrKyBiL2djYy9jL2MtdHlwZWNrLmNjCkBAIC0xNTgyMSw2ICsxNTgyMSw3IEBAIGNfZmluaXNo X29tcF9jbGF1c2VzICh0cmVlIGNsYXVzZXMsIGVudW0gY19vbXBfcmVnaW9uX3R5cGUgb3J0KQog CSAgY29udGludWU7CiAKIAljYXNlIE9NUF9DTEFVU0VfSUY6CisJY2FzZSBPTVBfQ0xBVVNFX1NF TEY6CiAJY2FzZSBPTVBfQ0xBVVNFX05VTV9USFJFQURTOgogCWNhc2UgT01QX0NMQVVTRV9OVU1f VEVBTVM6CiAJY2FzZSBPTVBfQ0xBVVNFX1RIUkVBRF9MSU1JVDoKZGlmZiAtLWdpdCBhL2djYy9j cC9wYXJzZXIuY2MgYi9nY2MvY3AvcGFyc2VyLmNjCmluZGV4IDIwZGJlMTA4OWVjLi5lZmE4MDVm YjNiMCAxMDA2NDQKLS0tIGEvZ2NjL2NwL3BhcnNlci5jYworKysgYi9nY2MvY3AvcGFyc2VyLmNj CkBAIC00MDk1NiwxMyArNDA5NTYsNTEgQEAgY3BfcGFyc2VyX29hY2NfY2xhdXNlX2FzeW5jIChj cF9wYXJzZXIgKnBhcnNlciwgdHJlZSBsaXN0KQogICByZXR1cm4gbGlzdDsKIH0KIAorLyogT3Bl bkFDQyAyLjc6CisgICBzZWxmIFsoIGV4cHJlc3Npb24gKV0gKi8KKworc3RhdGljIHRyZWUKK2Nw X3BhcnNlcl9vYWNjX2NvbXB1dGVfY2xhdXNlX3NlbGYgKGNwX3BhcnNlciAqcGFyc2VyLCB0cmVl IGxpc3QpCit7CisgIHRyZWUgdDsKKyAgbG9jYXRpb25fdCBsb2NhdGlvbiA9IGNwX2xleGVyX3Bl ZWtfdG9rZW4gKHBhcnNlci0+bGV4ZXIpLT5sb2NhdGlvbjsKKyAgaWYgKGNwX2xleGVyX3BlZWtf dG9rZW4gKHBhcnNlci0+bGV4ZXIpLT50eXBlID09IENQUF9PUEVOX1BBUkVOKQorICAgIHsKKyAg ICAgIG1hdGNoaW5nX3BhcmVucyBwYXJlbnM7CisgICAgICBwYXJlbnMuY29uc3VtZV9vcGVuIChw YXJzZXIpOworICAgICAgdCA9IGNwX3BhcnNlcl9hc3NpZ25tZW50X2V4cHJlc3Npb24gKHBhcnNl cik7CisgICAgICBpZiAodCA9PSBlcnJvcl9tYXJrX25vZGUKKwkgIHx8ICFwYXJlbnMucmVxdWly ZV9jbG9zZSAocGFyc2VyKSkKKwl7CisJICBjcF9wYXJzZXJfc2tpcF90b19jbG9zaW5nX3BhcmVu dGhlc2lzIChwYXJzZXIsIC8qcmVjb3ZlcmluZz0qL3RydWUsCisJCQkJCQkgLypvcl9jb21tYT0q L2ZhbHNlLAorCQkJCQkJIC8qY29uc3VtZV9wYXJlbj0qL3RydWUpOworCSAgcmV0dXJuIGxpc3Q7 CisJfQorICAgIH0KKyAgZWxzZQorICAgIHQgPSB0cnV0aHZhbHVlX3RydWVfbm9kZTsKKworICBm b3IgKHRyZWUgYyA9IGxpc3Q7IGM7IGMgPSBPTVBfQ0xBVVNFX0NIQUlOIChjKSkKKyAgICBpZiAo T01QX0NMQVVTRV9DT0RFIChjKSA9PSBPTVBfQ0xBVVNFX1NFTEYpCisgICAgICB7CisJZXJyb3Jf YXQgKGxvY2F0aW9uLCAidG9vIG1hbnkgJTxzZWxmJT4gY2xhdXNlcyIpOworCXJldHVybiBsaXN0 OworICAgICAgfQorCisgIHRyZWUgYyA9IGJ1aWxkX29tcF9jbGF1c2UgKGxvY2F0aW9uLCBPTVBf Q0xBVVNFX1NFTEYpOworICBPTVBfQ0xBVVNFX1NFTEZfRVhQUiAoYykgPSB0OworICBPTVBfQ0xB VVNFX0NIQUlOIChjKSA9IGxpc3Q7CisgIHJldHVybiBjOworfQorCiAvKiBQYXJzZSBhbGwgT3Bl bkFDQyBjbGF1c2VzLiAgVGhlIHNldCBjbGF1c2VzIGFsbG93ZWQgYnkgdGhlIGRpcmVjdGl2ZQog ICAgaXMgYSBiaXRtYXNrIGluIE1BU0suICBSZXR1cm4gdGhlIGxpc3Qgb2YgY2xhdXNlcyBmb3Vu ZC4gICovCiAKIHN0YXRpYyB0cmVlCiBjcF9wYXJzZXJfb2FjY19hbGxfY2xhdXNlcyAoY3BfcGFy c2VyICpwYXJzZXIsIG9tcF9jbGF1c2VfbWFzayBtYXNrLAogCQkJICAgIGNvbnN0IGNoYXIgKndo ZXJlLCBjcF90b2tlbiAqcHJhZ21hX3RvaywKLQkJCSAgICBib29sIGZpbmlzaF9wID0gdHJ1ZSkK KwkJCSAgICBib29sIGZpbmlzaF9wID0gdHJ1ZSwgYm9vbCBjb21wdXRlX3AgPSBmYWxzZSkKIHsK ICAgdHJlZSBjbGF1c2VzID0gTlVMTDsKICAgYm9vbCBmaXJzdCA9IHRydWU7CkBAIC00MDk4Miw3 ICs0MTAyMCwxOSBAQCBjcF9wYXJzZXJfb2FjY19hbGxfY2xhdXNlcyAoY3BfcGFyc2VyICpwYXJz ZXIsIG9tcF9jbGF1c2VfbWFzayBtYXNrLAogCWNwX2xleGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNl ci0+bGV4ZXIpOwogCiAgICAgICBoZXJlID0gY3BfbGV4ZXJfcGVla190b2tlbiAocGFyc2VyLT5s ZXhlciktPmxvY2F0aW9uOwotICAgICAgY19raW5kID0gY3BfcGFyc2VyX29tcF9jbGF1c2VfbmFt ZSAocGFyc2VyKTsKKworICAgICAgLyogRm9yIE9wZW5BQ0MgY29tcHV0ZSBkaXJlY3RpdmVzICov CisgICAgICBpZiAoY29tcHV0ZV9wCisJICAmJiBjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJz ZXItPmxleGVyLCBDUFBfTkFNRSkKKwkgICYmICFzdHJjbXAgKElERU5USUZJRVJfUE9JTlRFUgor CQkgICAgICAoY3BfbGV4ZXJfcGVla190b2tlbiAocGFyc2VyLT5sZXhlciktPnUudmFsdWUpLAor CQkgICAgICAic2VsZiIpKQorCXsKKwkgIGNfa2luZCA9IFBSQUdNQV9PQUNDX0NMQVVTRV9TRUxG OworCSAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2VyLT5sZXhlcik7CisJfQorICAgICAg ZWxzZQorCWNfa2luZCA9IGNwX3BhcnNlcl9vbXBfY2xhdXNlX25hbWUgKHBhcnNlcik7CiAKICAg ICAgIHN3aXRjaCAoY19raW5kKQogCXsKQEAgLTQxMTE2LDYgKzQxMTY2LDEwIEBAIGNwX3BhcnNl cl9vYWNjX2FsbF9jbGF1c2VzIChjcF9wYXJzZXIgKnBhcnNlciwgb21wX2NsYXVzZV9tYXNrIG1h c2ssCiAJCQkJCSAgICAgIGZhbHNlLCBjbGF1c2VzKTsKIAkgIGNfbmFtZSA9ICJyZWR1Y3Rpb24i OwogCSAgYnJlYWs7CisJY2FzZSBQUkFHTUFfT0FDQ19DTEFVU0VfU0VMRjoKKwkgIGNsYXVzZXMg PSBjcF9wYXJzZXJfb2FjY19jb21wdXRlX2NsYXVzZV9zZWxmIChwYXJzZXIsIGNsYXVzZXMpOwor CSAgY19uYW1lID0gInNlbGYiOworCSAgYnJlYWs7CiAJY2FzZSBQUkFHTUFfT0FDQ19DTEFVU0Vf U0VROgogCSAgY2xhdXNlcyA9IGNwX3BhcnNlcl9vYWNjX3NpbXBsZV9jbGF1c2UgKGhlcmUsIE9N UF9DTEFVU0VfU0VRLAogCQkJCQkJICBjbGF1c2VzKTsKQEAgLTQ2MjI3LDYgKzQ2MjgxLDcgQEAg Y3BfcGFyc2VyX29hY2NfbG9vcCAoY3BfcGFyc2VyICpwYXJzZXIsIGNwX3Rva2VuICpwcmFnbWFf dG9rLCBjaGFyICpwX25hbWUsCiAJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09BQ0Nf Q0xBVVNFX05VTV9HQU5HUykJCVwKIAl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT0FD Q19DTEFVU0VfTlVNX1dPUktFUlMpCQlcCiAJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01B X09BQ0NfQ0xBVVNFX1BSRVNFTlQpCQlcCisJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01B X09BQ0NfQ0xBVVNFX1NFTEYpCQlcCiAJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09B Q0NfQ0xBVVNFX1ZFQ1RPUl9MRU5HVEgpCVwKIAl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFH TUFfT0FDQ19DTEFVU0VfV0FJVCkgKQogCkBAIC00NjI0Nyw2ICs0NjMwMiw3IEBAIGNwX3BhcnNl cl9vYWNjX2xvb3AgKGNwX3BhcnNlciAqcGFyc2VyLCBjcF90b2tlbiAqcHJhZ21hX3RvaywgY2hh ciAqcF9uYW1lLAogCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PQUNDX0NMQVVTRV9Q UkVTRU5UKQkJXAogCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PQUNDX0NMQVVTRV9Q UklWQVRFKQkJXAogCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PQUNDX0NMQVVTRV9S RURVQ1RJT04pCQlcCisJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09BQ0NfQ0xBVVNF X1NFTEYpCQlcCiAJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09BQ0NfQ0xBVVNFX1ZF Q1RPUl9MRU5HVEgpICAgICAgIFwKIAl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT0FD Q19DTEFVU0VfV0FJVCkgKQogCkBAIC00NjI2NSw2ICs0NjMyMSw3IEBAIGNwX3BhcnNlcl9vYWNj X2xvb3AgKGNwX3BhcnNlciAqcGFyc2VyLCBjcF90b2tlbiAqcHJhZ21hX3RvaywgY2hhciAqcF9u YW1lLAogCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PQUNDX0NMQVVTRV9GSVJTVFBS SVZBVEUpCVwKIAl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT0FDQ19DTEFVU0VfUFJF U0VOVCkJCVwKIAl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT0FDQ19DTEFVU0VfUkVE VUNUSU9OKQkJXAorCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PQUNDX0NMQVVTRV9T RUxGKQkJXAogCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PQUNDX0NMQVVTRV9XQUlU KSApCiAKIHN0YXRpYyB0cmVlCkBAIC00NjMxMCw3ICs0NjM2Nyw4IEBAIGNwX3BhcnNlcl9vYWNj X2NvbXB1dGUgKGNwX3BhcnNlciAqcGFyc2VyLCBjcF90b2tlbiAqcHJhZ21hX3RvaywKIAl9CiAg ICAgfQogCi0gIHRyZWUgY2xhdXNlcyA9IGNwX3BhcnNlcl9vYWNjX2FsbF9jbGF1c2VzIChwYXJz ZXIsIG1hc2ssIHBfbmFtZSwgcHJhZ21hX3Rvayk7CisgIHRyZWUgY2xhdXNlcyA9IGNwX3BhcnNl cl9vYWNjX2FsbF9jbGF1c2VzIChwYXJzZXIsIG1hc2ssIHBfbmFtZSwgcHJhZ21hX3RvaywKKwkJ CQkJICAgICB0cnVlLCB0cnVlKTsKIAogICB0cmVlIGJsb2NrID0gYmVnaW5fb21wX3BhcmFsbGVs ICgpOwogICB1bnNpZ25lZCBpbnQgc2F2ZSA9IGNwX3BhcnNlcl9iZWdpbl9vbXBfc3RydWN0dXJl ZF9ibG9jayAocGFyc2VyKTsKZGlmZiAtLWdpdCBhL2djYy9jcC9wdC5jYyBiL2djYy9jcC9wdC5j YwppbmRleCA2YjIwYzU4Y2U2Ni4uZjhkOGZjMzFjNTMgMTAwNjQ0Ci0tLSBhL2djYy9jcC9wdC5j YworKysgYi9nY2MvY3AvcHQuY2MKQEAgLTE4MDM3LDYgKzE4MDM3LDcgQEAgdHN1YnN0X29tcF9j bGF1c2VzICh0cmVlIGNsYXVzZXMsIGVudW0gY19vbXBfcmVnaW9uX3R5cGUgb3J0LAogCSAgLyog RkFMTFRIUlUgKi8KIAljYXNlIE9NUF9DTEFVU0VfVElMRToKIAljYXNlIE9NUF9DTEFVU0VfSUY6 CisJY2FzZSBPTVBfQ0xBVVNFX1NFTEY6CiAJY2FzZSBPTVBfQ0xBVVNFX05VTV9USFJFQURTOgog CWNhc2UgT01QX0NMQVVTRV9TQ0hFRFVMRToKIAljYXNlIE9NUF9DTEFVU0VfQ09MTEFQU0U6CmRp ZmYgLS1naXQgYS9nY2MvY3Avc2VtYW50aWNzLmNjIGIvZ2NjL2NwL3NlbWFudGljcy5jYwppbmRl eCBhMmU3NGE1ZDJjNy4uZGRiOWYxMGI0NWEgMTAwNjQ0Ci0tLSBhL2djYy9jcC9zZW1hbnRpY3Mu Y2MKKysrIGIvZ2NjL2NwL3NlbWFudGljcy5jYwpAQCAtNzM0NCwxMyArNzM0NCwxNCBAQCBmaW5p c2hfb21wX2NsYXVzZXMgKHRyZWUgY2xhdXNlcywgZW51bSBjX29tcF9yZWdpb25fdHlwZSBvcnQp CiAJICBnb3RvIGhhbmRsZV9maWVsZF9kZWNsOwogCiAJY2FzZSBPTVBfQ0xBVVNFX0lGOgotCSAg dCA9IE9NUF9DTEFVU0VfSUZfRVhQUiAoYyk7CisJY2FzZSBPTVBfQ0xBVVNFX1NFTEY6CisJICB0 ID0gT01QX0NMQVVTRV9PUEVSQU5EIChjLCAwKTsKIAkgIHQgPSBtYXliZV9jb252ZXJ0X2NvbmQg KHQpOwogCSAgaWYgKHQgPT0gZXJyb3JfbWFya19ub2RlKQogCSAgICByZW1vdmUgPSB0cnVlOwog CSAgZWxzZSBpZiAoIXByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKIAkgICAgdCA9IGZvbGRfYnVp bGRfY2xlYW51cF9wb2ludF9leHByIChUUkVFX1RZUEUgKHQpLCB0KTsKLQkgIE9NUF9DTEFVU0Vf SUZfRVhQUiAoYykgPSB0OworCSAgT01QX0NMQVVTRV9PUEVSQU5EIChjLCAwKSA9IHQ7CiAJICBi cmVhazsKIAogCWNhc2UgT01QX0NMQVVTRV9GSU5BTDoKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFu L2dmb3J0cmFuLmggYi9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCmluZGV4IGE1OGM2MGU5ODI4Li43 YTIxYTZjYjAwOCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaAorKysgYi9nY2Mv Zm9ydHJhbi9nZm9ydHJhbi5oCkBAIC0xNTQwLDYgKzE1NDAsNyBAQCB0eXBlZGVmIHN0cnVjdCBn ZmNfb21wX2NsYXVzZXMKIHsKICAgZ2ZjX29tcF9uYW1lbGlzdCAqbGlzdHNbT01QX0xJU1RfTlVN XTsKICAgc3RydWN0IGdmY19leHByICppZl9leHByOworICBzdHJ1Y3QgZ2ZjX2V4cHIgKnNlbGZf ZXhwcjsKICAgc3RydWN0IGdmY19leHByICpmaW5hbF9leHByOwogICBzdHJ1Y3QgZ2ZjX2V4cHIg Km51bV90aHJlYWRzOwogICBzdHJ1Y3QgZ2ZjX2V4cHIgKmNodW5rX3NpemU7CmRpZmYgLS1naXQg YS9nY2MvZm9ydHJhbi9vcGVubXAuY2MgYi9nY2MvZm9ydHJhbi9vcGVubXAuY2MKaW5kZXggOTcx NGQ1ZjhmNjEuLjAzODkwN2JhYTQ4IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9vcGVubXAuY2MK KysrIGIvZ2NjL2ZvcnRyYW4vb3Blbm1wLmNjCkBAIC0xMDkxLDYgKzEwOTEsNyBAQCBlbnVtIG9t cF9tYXNrMgogICBPTVBfQ0xBVVNFX0VOVEVSLCAvKiBPcGVuTVAgNS4yICovCiAgIE9NUF9DTEFV U0VfRE9BQ1JPU1MsIC8qIE9wZW5NUCA1LjIgKi8KICAgT01QX0NMQVVTRV9BU1NVTVBUSU9OUywg LyogT3Blbk1QIDUuMS4gKi8KKyAgT01QX0NMQVVTRV9TRUxGLCAvKiBPcGVuQUNDIDIuNyAgKi8K ICAgLyogVGhpcyBtdXN0IGNvbWUgbGFzdC4gICovCiAgIE9NUF9NQVNLMl9MQVNUCiB9OwpAQCAt MzQxMiw2ICszNDEzLDI3IEBAIGdmY19tYXRjaF9vbXBfY2xhdXNlcyAoZ2ZjX29tcF9jbGF1c2Vz ICoqY3AsIGNvbnN0IG9tcF9tYXNrIG1hc2ssCiAJICAgICAgZWxzZQogCQlnZmNfY3VycmVudF9s b2N1cyA9IG9sZF9sb2M7CiAJICAgIH0KKwkgIGlmICgobWFzayAmIE9NUF9DTEFVU0VfU0VMRikK KwkgICAgICAmJiAobSA9IGdmY19tYXRjaF9kdXBsX2NoZWNrICghYy0+c2VsZl9leHByLCAic2Vs ZiIpKQorCSAgICAgICAgICAhPSBNQVRDSF9OTykKKwkgICAgeworCSAgICAgIGdjY19hc3NlcnQg KCEobWFzayAmIE9NUF9DTEFVU0VfSE9TVF9TRUxGKSk7CisJICAgICAgaWYgKG0gPT0gTUFUQ0hf RVJST1IpCisJCWdvdG8gZXJyb3I7CisJICAgICAgbSA9IGdmY19tYXRjaCAoIiAoICVlICkiLCAm Yy0+c2VsZl9leHByKTsKKwkgICAgICBpZiAobSA9PSBNQVRDSF9FUlJPUikKKwkJeworCQkgIGdm Y19jdXJyZW50X2xvY3VzID0gb2xkX2xvYzsKKwkJICBicmVhazsKKwkJfQorCSAgICAgIGVsc2Ug aWYgKG0gPT0gTUFUQ0hfTk8pCisJCXsKKwkJICBjLT5zZWxmX2V4cHIgPSBnZmNfZ2V0X2xvZ2lj YWxfZXhwciAoZ2ZjX2RlZmF1bHRfbG9naWNhbF9raW5kLAorCQkJCQkJICAgICAgIE5VTEwsIHRy dWUpOworCQkgIG5lZWRzX3NwYWNlID0gdHJ1ZTsKKwkJfQorCSAgICAgIGNvbnRpbnVlOworCSAg ICB9CiAJICBpZiAoKG1hc2sgJiBPTVBfQ0xBVVNFX0hPU1RfU0VMRikKIAkgICAgICAmJiBnZmNf bWF0Y2ggKCJzZWxmICggIikgPT0gTUFUQ0hfWUVTCiAJICAgICAgJiYgZ2ZjX21hdGNoX29tcF9t YXBfY2xhdXNlICgmYy0+bGlzdHNbT01QX0xJU1RfTUFQXSwKQEAgLTM2NzcsMTkgKzM2OTksMjIg QEAgZXJyb3I6CiAgICB8IE9NUF9DTEFVU0VfQ09QWSB8IE9NUF9DTEFVU0VfQ09QWUlOIHwgT01Q X0NMQVVTRV9DT1BZT1VUCQkgICAgICBcCiAgICB8IE9NUF9DTEFVU0VfQ1JFQVRFIHwgT01QX0NM QVVTRV9OT19DUkVBVEUgfCBPTVBfQ0xBVVNFX1BSRVNFTlQJICAgICAgXAogICAgfCBPTVBfQ0xB VVNFX0RFVklDRVBUUiB8IE9NUF9DTEFVU0VfUFJJVkFURSB8IE9NUF9DTEFVU0VfRklSU1RQUklW QVRFICAgICAgXAotICAgfCBPTVBfQ0xBVVNFX0RFRkFVTFQgfCBPTVBfQ0xBVVNFX1dBSVQgfCBP TVBfQ0xBVVNFX0FUVEFDSCkKKyAgIHwgT01QX0NMQVVTRV9ERUZBVUxUIHwgT01QX0NMQVVTRV9X QUlUIHwgT01QX0NMQVVTRV9BVFRBQ0gJCSAgICAgIFwKKyAgIHwgT01QX0NMQVVTRV9TRUxGKQog I2RlZmluZSBPQUNDX0tFUk5FTFNfQ0xBVVNFUyBcCiAgIChvbXBfbWFzayAoT01QX0NMQVVTRV9J RikgfCBPTVBfQ0xBVVNFX0FTWU5DIHwgT01QX0NMQVVTRV9OVU1fR0FOR1MJICAgICAgXAogICAg fCBPTVBfQ0xBVVNFX05VTV9XT1JLRVJTIHwgT01QX0NMQVVTRV9WRUNUT1JfTEVOR1RIIHwgT01Q X0NMQVVTRV9ERVZJQ0VQVFIgXAogICAgfCBPTVBfQ0xBVVNFX0NPUFkgfCBPTVBfQ0xBVVNFX0NP UFlJTiB8IE9NUF9DTEFVU0VfQ09QWU9VVAkJICAgICAgXAogICAgfCBPTVBfQ0xBVVNFX0NSRUFU RSB8IE9NUF9DTEFVU0VfTk9fQ1JFQVRFIHwgT01QX0NMQVVTRV9QUkVTRU5UCSAgICAgIFwKLSAg IHwgT01QX0NMQVVTRV9ERUZBVUxUIHwgT01QX0NMQVVTRV9XQUlUIHwgT01QX0NMQVVTRV9BVFRB Q0gpCisgICB8IE9NUF9DTEFVU0VfREVGQVVMVCB8IE9NUF9DTEFVU0VfV0FJVCB8IE9NUF9DTEFV U0VfQVRUQUNICSAgICAgICAgICAgICAgXAorICAgfCBPTVBfQ0xBVVNFX1NFTEYpCiAjZGVmaW5l IE9BQ0NfU0VSSUFMX0NMQVVTRVMgXAogICAob21wX21hc2sgKE9NUF9DTEFVU0VfSUYpIHwgT01Q X0NMQVVTRV9BU1lOQyB8IE9NUF9DTEFVU0VfUkVEVUNUSU9OCSAgICAgIFwKICAgIHwgT01QX0NM QVVTRV9DT1BZIHwgT01QX0NMQVVTRV9DT1BZSU4gfCBPTVBfQ0xBVVNFX0NPUFlPVVQJCSAgICAg IFwKICAgIHwgT01QX0NMQVVTRV9DUkVBVEUgfCBPTVBfQ0xBVVNFX05PX0NSRUFURSB8IE9NUF9D TEFVU0VfUFJFU0VOVAkgICAgICBcCiAgICB8IE9NUF9DTEFVU0VfREVWSUNFUFRSIHwgT01QX0NM QVVTRV9QUklWQVRFIHwgT01QX0NMQVVTRV9GSVJTVFBSSVZBVEUgICAgICBcCi0gICB8IE9NUF9D TEFVU0VfREVGQVVMVCB8IE9NUF9DTEFVU0VfV0FJVCB8IE9NUF9DTEFVU0VfQVRUQUNIKQorICAg fCBPTVBfQ0xBVVNFX0RFRkFVTFQgfCBPTVBfQ0xBVVNFX1dBSVQgfCBPTVBfQ0xBVVNFX0FUVEFD SAkgICAgICAgICAgICAgIFwKKyAgIHwgT01QX0NMQVVTRV9TRUxGKQogI2RlZmluZSBPQUNDX0RB VEFfQ0xBVVNFUyBcCiAgIChvbXBfbWFzayAoT01QX0NMQVVTRV9JRikgfCBPTVBfQ0xBVVNFX0RF VklDRVBUUiAgfCBPTVBfQ0xBVVNFX0NPUFkJICAgICAgXAogICAgfCBPTVBfQ0xBVVNFX0NPUFlJ TiB8IE9NUF9DTEFVU0VfQ09QWU9VVCB8IE9NUF9DTEFVU0VfQ1JFQVRFCQkgICAgICBcCkBAIC03 MjUxLDYgKzcyNzYsMTQgQEAgcmVzb2x2ZV9vbXBfY2xhdXNlcyAoZ2ZjX2NvZGUgKmNvZGUsIGdm Y19vbXBfY2xhdXNlcyAqb21wX2NsYXVzZXMsCiAJCSAgICZleHByLT53aGVyZSk7CiAgICAgICBp Zl93aXRob3V0X21vZCA9IHRydWU7CiAgICAgfQorICBpZiAob21wX2NsYXVzZXMtPnNlbGZfZXhw cikKKyAgICB7CisgICAgICBnZmNfZXhwciAqZXhwciA9IG9tcF9jbGF1c2VzLT5zZWxmX2V4cHI7 CisgICAgICBpZiAoIWdmY19yZXNvbHZlX2V4cHIgKGV4cHIpCisJICB8fCBleHByLT50cy50eXBl ICE9IEJUX0xPR0lDQUwgfHwgZXhwci0+cmFuayAhPSAwKQorCWdmY19lcnJvciAoIlNFTEYgY2xh dXNlIGF0ICVMIHJlcXVpcmVzIGEgc2NhbGFyIExPR0lDQUwgZXhwcmVzc2lvbiIsCisJCSAgICZl eHByLT53aGVyZSk7CisgICAgfQogICBmb3IgKGlmYyA9IDA7IGlmYyA8IE9NUF9JRl9MQVNUOyBp ZmMrKykKICAgICBpZiAob21wX2NsYXVzZXMtPmlmX2V4cHJzW2lmY10pCiAgICAgICB7CmRpZmYg LS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MgYi9nY2MvZm9ydHJhbi90cmFucy1v cGVubXAuY2MKaW5kZXggMzQwZGE4NWNiOTkuLjBmODMyMzkwMWQ3IDEwMDY0NAotLS0gYS9nY2Mv Zm9ydHJhbi90cmFucy1vcGVubXAuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNj CkBAIC0zOTQzLDYgKzM5NDMsMjIgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tf dCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKICAgICAgIE9NUF9DTEFVU0VfSUZf RVhQUiAoYykgPSBpZl92YXI7CiAgICAgICBvbXBfY2xhdXNlcyA9IGdmY190cmFuc19hZGRfY2xh dXNlIChjLCBvbXBfY2xhdXNlcyk7CiAgICAgfQorCisgIGlmIChjbGF1c2VzLT5zZWxmX2V4cHIp CisgICAgeworICAgICAgdHJlZSBzZWxmX3ZhcjsKKworICAgICAgZ2ZjX2luaXRfc2UgKCZzZSwg TlVMTCk7CisgICAgICBnZmNfY29udl9leHByICgmc2UsIGNsYXVzZXMtPnNlbGZfZXhwcik7Cisg ICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChibG9jaywgJnNlLnByZSk7CisgICAgICBzZWxm X3ZhciA9IGdmY19ldmFsdWF0ZV9ub3cgKHNlLmV4cHIsIGJsb2NrKTsKKyAgICAgIGdmY19hZGRf YmxvY2tfdG9fYmxvY2sgKGJsb2NrLCAmc2UucG9zdCk7CisKKyAgICAgIGMgPSBidWlsZF9vbXBf Y2xhdXNlIChnZmNfZ2V0X2xvY2F0aW9uICgmd2hlcmUpLCBPTVBfQ0xBVVNFX1NFTEYpOworICAg ICAgT01QX0NMQVVTRV9TRUxGX0VYUFIgKGMpID0gc2VsZl92YXI7CisgICAgICBvbXBfY2xhdXNl cyA9IGdmY190cmFuc19hZGRfY2xhdXNlIChjLCBvbXBfY2xhdXNlcyk7CisgICAgfQorCiAgIGZv ciAoaWZjID0gMDsgaWZjIDwgT01QX0lGX0xBU1Q7IGlmYysrKQogICAgIGlmIChjbGF1c2VzLT5p Zl9leHByc1tpZmNdKQogICAgICAgewpAQCAtNjU5NSw2ICs2NjExLDggQEAgZ2ZjX3NwbGl0X29t cF9jbGF1c2VzIChnZmNfY29kZSAqY29kZSwKIAkgIC8qIEFuZCB0aGlzIGlzIGNvcGllZCB0byBh bGwuICAqLwogCSAgY2xhdXNlc2FbR0ZDX09NUF9TUExJVF9UQVJHRVRdLmlmX2V4cHIKIAkgICAg PSBjb2RlLT5leHQub21wX2NsYXVzZXMtPmlmX2V4cHI7CisJICBjbGF1c2VzYVtHRkNfT01QX1NQ TElUX1RBUkdFVF0uc2VsZl9leHByCisJICAgID0gY29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5zZWxm X2V4cHI7CiAJICBjbGF1c2VzYVtHRkNfT01QX1NQTElUX1RBUkdFVF0ubm93YWl0CiAJICAgID0g Y29kZS0+ZXh0Lm9tcF9jbGF1c2VzLT5ub3dhaXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBs aWZ5LmNjIGIvZ2NjL2dpbXBsaWZ5LmNjCmluZGV4IDZmMWU5NWJmYmU3Li5kMzA5NDU5YmUxYiAx MDA2NDQKLS0tIGEvZ2NjL2dpbXBsaWZ5LmNjCisrKyBiL2djYy9naW1wbGlmeS5jYwpAQCAtMTE4 NjcsNiArMTE4NjcsNyBAQCBnaW1wbGlmeV9zY2FuX29tcF9jbGF1c2VzICh0cmVlICpsaXN0X3As IGdpbXBsZV9zZXEgKnByZV9wLAogCSAgICB9CiAJICAvKiBGYWxsIHRocm91Z2guICAqLwogCisJ Y2FzZSBPTVBfQ0xBVVNFX1NFTEY6CiAJY2FzZSBPTVBfQ0xBVVNFX0ZJTkFMOgogCSAgT01QX0NM QVVTRV9PUEVSQU5EIChjLCAwKQogCSAgICA9IGdpbXBsZV9ib29saWZ5IChPTVBfQ0xBVVNFX09Q RVJBTkQgKGMsIDApKTsKQEAgLTEzMDkzLDYgKzEzMDk0LDcgQEAgZ2ltcGxpZnlfYWRqdXN0X29t cF9jbGF1c2VzIChnaW1wbGVfc2VxICpwcmVfcCwgZ2ltcGxlX3NlcSBib2R5LCB0cmVlICpsaXN0 X3AsCiAJY2FzZSBPTVBfQ0xBVVNFX0NPUFlJTjoKIAljYXNlIE9NUF9DTEFVU0VfQ09QWVBSSVZB VEU6CiAJY2FzZSBPTVBfQ0xBVVNFX0lGOgorCWNhc2UgT01QX0NMQVVTRV9TRUxGOgogCWNhc2Ug T01QX0NMQVVTRV9OVU1fVEhSRUFEUzoKIAljYXNlIE9NUF9DTEFVU0VfTlVNX1RFQU1TOgogCWNh c2UgT01QX0NMQVVTRV9USFJFQURfTElNSVQ6CmRpZmYgLS1naXQgYS9nY2Mvb21wLWV4cGFuZC5j YyBiL2djYy9vbXAtZXhwYW5kLmNjCmluZGV4IGRiNThiM2NiNDliLi5mN2I3YzY3ZDQ1OSAxMDA2 NDQKLS0tIGEvZ2NjL29tcC1leHBhbmQuY2MKKysrIGIvZ2NjL29tcC1leHBhbmQuY2MKQEAgLTEw MzMxLDYgKzEwMzMxLDQ3IEBAIGV4cGFuZF9vbXBfdGFyZ2V0IChzdHJ1Y3Qgb21wX3JlZ2lvbiAq cmVnaW9uKQogCX0KICAgICB9CiAKKyAgaWYgKChjID0gb21wX2ZpbmRfY2xhdXNlIChjbGF1c2Vz LCBPTVBfQ0xBVVNFX1NFTEYpKSAhPSBOVUxMX1RSRUUpCisgICAgeworICAgICAgZ2NjX2Fzc2Vy dCAoaXNfZ2ltcGxlX29tcF9vYWNjIChlbnRyeV9zdG10KSAmJiBvZmZsb2FkZWQpOworCisgICAg ICBlZGdlIGUgPSBzcGxpdF9ibG9ja19hZnRlcl9sYWJlbHMgKG5ld19iYik7CisgICAgICBiYXNp Y19ibG9jayBjb25kX2JiID0gZS0+c3JjOworICAgICAgbmV3X2JiID0gZS0+ZGVzdDsKKyAgICAg IHJlbW92ZV9lZGdlIChlKTsKKworICAgICAgYmFzaWNfYmxvY2sgdGhlbl9iYiA9IGNyZWF0ZV9l bXB0eV9iYiAoY29uZF9iYik7CisgICAgICBiYXNpY19ibG9jayBlbHNlX2JiID0gY3JlYXRlX2Vt cHR5X2JiICh0aGVuX2JiKTsKKyAgICAgIHNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChDRElfRE9N SU5BVE9SUywgdGhlbl9iYiwgY29uZF9iYik7CisgICAgICBzZXRfaW1tZWRpYXRlX2RvbWluYXRv ciAoQ0RJX0RPTUlOQVRPUlMsIGVsc2VfYmIsIGNvbmRfYmIpOworCisgICAgICB0cmVlIHNlbGZf Y29uZCA9IGdpbXBsZV9ib29saWZ5IChPTVBfQ0xBVVNFX1NFTEZfRVhQUiAoYykpOworICAgICAg c3RtdCA9IGdpbXBsZV9idWlsZF9jb25kX2VtcHR5IChzZWxmX2NvbmQpOworICAgICAgZ3NpID0g Z3NpX2xhc3RfYmIgKGNvbmRfYmIpOworICAgICAgZ3NpX2luc2VydF9hZnRlciAoJmdzaSwgc3Rt dCwgR1NJX0NPTlRJTlVFX0xJTktJTkcpOworCisgICAgICB0cmVlIHRtcF92YXIgPSBjcmVhdGVf dG1wX3ZhciAoVFJFRV9UWVBFIChnb2FjY19mbGFncykpOworICAgICAgc3RtdCA9IGdpbXBsZV9i dWlsZF9hc3NpZ24gKHRtcF92YXIsIEJJVF9JT1JfRVhQUiwgZ29hY2NfZmxhZ3MsCisJCQkJICBi dWlsZF9pbnRfY3N0IChpbnRlZ2VyX3R5cGVfbm9kZSwKKwkJCQkJCSBHT0FDQ19GTEFHX0xPQ0FM X0RFVklDRSkpOworICAgICAgZ3NpID0gZ3NpX3N0YXJ0X2JiICh0aGVuX2JiKTsKKyAgICAgIGdz aV9pbnNlcnRfYWZ0ZXIgKCZnc2ksIHN0bXQsIEdTSV9DT05USU5VRV9MSU5LSU5HKTsKKworICAg ICAgZ3NpID0gZ3NpX3N0YXJ0X2JiIChlbHNlX2JiKTsKKyAgICAgIHN0bXQgPSBnaW1wbGVfYnVp bGRfYXNzaWduICh0bXBfdmFyLCBnb2FjY19mbGFncyk7CisgICAgICBnc2lfaW5zZXJ0X2FmdGVy ICgmZ3NpLCBzdG10LCBHU0lfQ09OVElOVUVfTElOS0lORyk7CisKKyAgICAgIG1ha2VfZWRnZSAo Y29uZF9iYiwgdGhlbl9iYiwgRURHRV9UUlVFX1ZBTFVFKTsKKyAgICAgIG1ha2VfZWRnZSAoY29u ZF9iYiwgZWxzZV9iYiwgRURHRV9GQUxTRV9WQUxVRSk7CisgICAgICBhZGRfYmJfdG9fbG9vcCAo dGhlbl9iYiwgY29uZF9iYi0+bG9vcF9mYXRoZXIpOworICAgICAgYWRkX2JiX3RvX2xvb3AgKGVs c2VfYmIsIGNvbmRfYmItPmxvb3BfZmF0aGVyKTsKKyAgICAgIG1ha2VfZWRnZSAodGhlbl9iYiwg bmV3X2JiLCBFREdFX0ZBTExUSFJVKTsKKyAgICAgIG1ha2VfZWRnZSAoZWxzZV9iYiwgbmV3X2Ji LCBFREdFX0ZBTExUSFJVKTsKKworICAgICAgZ29hY2NfZmxhZ3MgPSB0bXBfdmFyOworICAgICAg Z3NpID0gZ3NpX2xhc3Rfbm9uZGVidWdfYmIgKG5ld19iYik7CisgICAgfQorCiAgIGlmIChuZWVk X2RldmljZV9hZGp1c3RtZW50KQogICAgIHsKICAgICAgIHRyZWUgdW5zID0gZm9sZF9jb252ZXJ0 ICh1bnNpZ25lZF90eXBlX25vZGUsIGRldmljZSk7CmRpZmYgLS1naXQgYS9nY2Mvb21wLWxvdy5j YyBiL2djYy9vbXAtbG93LmNjCmluZGV4IDE4NTdiNWI5NjBmLi5kMmFkZjc3NjkzOSAxMDA2NDQK LS0tIGEvZ2NjL29tcC1sb3cuY2MKKysrIGIvZ2NjL29tcC1sb3cuY2MKQEAgLTE0OTMsNiArMTQ5 Myw3IEBAIHNjYW5fc2hhcmluZ19jbGF1c2VzICh0cmVlIGNsYXVzZXMsIG9tcF9jb250ZXh0ICpj dHgpCiAKIAljYXNlIE9NUF9DTEFVU0VfRklOQUw6CiAJY2FzZSBPTVBfQ0xBVVNFX0lGOgorCWNh c2UgT01QX0NMQVVTRV9TRUxGOgogCWNhc2UgT01QX0NMQVVTRV9OVU1fVEhSRUFEUzoKIAljYXNl IE9NUF9DTEFVU0VfTlVNX1RFQU1TOgogCWNhc2UgT01QX0NMQVVTRV9USFJFQURfTElNSVQ6CkBA IC0xOTIwLDYgKzE5MjEsNyBAQCBzY2FuX3NoYXJpbmdfY2xhdXNlcyAodHJlZSBjbGF1c2VzLCBv bXBfY29udGV4dCAqY3R4KQogCWNhc2UgT01QX0NMQVVTRV9DT1BZSU46CiAJY2FzZSBPTVBfQ0xB VVNFX0RFRkFVTFQ6CiAJY2FzZSBPTVBfQ0xBVVNFX0lGOgorCWNhc2UgT01QX0NMQVVTRV9TRUxG OgogCWNhc2UgT01QX0NMQVVTRV9OVU1fVEhSRUFEUzoKIAljYXNlIE9NUF9DTEFVU0VfTlVNX1RF QU1TOgogCWNhc2UgT01QX0NMQVVTRV9USFJFQURfTElNSVQ6CmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9nb2FjYy9zZWxmLWNsYXVzZS0xLmMgYi9nY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi9nb2FjYy9zZWxmLWNsYXVzZS0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmVkNWQwNzJlODFmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vZ29hY2Mvc2VsZi1jbGF1c2UtMS5jCkBAIC0wLDAgKzEsMjIg QEAKKy8qIHsgZGctc2tpcC1pZiAibm90IHlldCIgeyBjKysgfSB9ICovCisKK3ZvaWQKK2YgKGlu dCBiKQoreworICBzdHJ1Y3QgeyBpbnQgaTsgfSAqcDsKKworI3ByYWdtYSBhY2MgcGFyYWxsZWwg c2VsZiBzZWxmKGIpIC8qIHsgZGctZXJyb3IgInRvbyBtYW55ICdzZWxmJyBjbGF1c2VzIiB9ICov CisgIDsKKyNwcmFnbWEgYWNjIHBhcmFsbGVsIHNlbGYoKnApIC8qIHsgZGctZXJyb3IgInVzZWQg c3RydWN0IHR5cGUgdmFsdWUgd2hlcmUgc2NhbGFyIGlzIHJlcXVpcmVkIiB9ICovCisgIDsKKwor I3ByYWdtYSBhY2Mga2VybmVscyBzZWxmIHNlbGYoYikgLyogeyBkZy1lcnJvciAidG9vIG1hbnkg J3NlbGYnIGNsYXVzZXMiIH0gKi8KKyAgOworI3ByYWdtYSBhY2Mga2VybmVscyBzZWxmKCpwKSAv KiB7IGRnLWVycm9yICJ1c2VkIHN0cnVjdCB0eXBlIHZhbHVlIHdoZXJlIHNjYWxhciBpcyByZXF1 aXJlZCIgfSAqLworICA7CisKKyNwcmFnbWEgYWNjIHNlcmlhbCBzZWxmIHNlbGYoYikgLyogeyBk Zy1lcnJvciAidG9vIG1hbnkgJ3NlbGYnIGNsYXVzZXMiIH0gKi8KKyAgOworI3ByYWdtYSBhY2Mg c2VyaWFsIHNlbGYoKnApIC8qIHsgZGctZXJyb3IgInVzZWQgc3RydWN0IHR5cGUgdmFsdWUgd2hl cmUgc2NhbGFyIGlzIHJlcXVpcmVkIiB9ICovCisgIDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL2dvYWNjL3NlbGYtY2xhdXNlLTIuYyBiL2djYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL2dvYWNjL3NlbGYtY2xhdXNlLTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZDkzMmFjOWE0YTYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9nb2FjYy9zZWxmLWNsYXVzZS0yLmMKQEAgLTAsMCArMSwxNyBA QAorLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1mZHVtcC10cmVlLWdpbXBsZSIgfSAqLwor Cit2b2lkCitmIChzaG9ydCBjKQoreworI3ByYWdtYSBhY2MgcGFyYWxsZWwgc2VsZihjKSBjb3B5 KGMpCisgIC8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyB7KD9uKSNwcmFnbWEg b21wIHRhcmdldCBvYWNjX3BhcmFsbGVsIG1hcFwodG9mcm9tOmMgXFtsZW46IFswLTldK1xdXCkg c2VsZlwoX1swLTldK1wpJH0gMSAiZ2ltcGxlIiB9IH0gKi8KKyAgKytjOworCisjcHJhZ21hIGFj YyBrZXJuZWxzIHNlbGYoYykgY29weShjKQorICAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgeyg/bikjcHJhZ21hIG9tcCB0YXJnZXQgb2FjY19rZXJuZWxzIG1hcFwodG9mcm9t OmMgXFtsZW46IFswLTldK1xdXCkgc2VsZlwoX1swLTldK1wpJH0gMSAiZ2ltcGxlIiB9IH0gKi8K KyAgKytjOworCisjcHJhZ21hIGFjYyBzZXJpYWwgc2VsZihjKSBjb3B5KGMpCisgIC8qIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyB7KD9uKSNwcmFnbWEgb21wIHRhcmdldCBvYWNj X3NlcmlhbCBtYXBcKHRvZnJvbTpjIFxbbGVuOiBbMC05XStcXVwpIHNlbGZcKF9bMC05XStcKSR9 IDEgImdpbXBsZSIgfSB9ICovCisgICsrYzsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2ZvcnRyYW4uZGcvZ29hY2Mvc2VsZi5mOTUgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dv YWNjL3NlbGYuZjk1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ODE3 ZjE2YmU1NgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29h Y2Mvc2VsZi5mOTUKQEAgLTAsMCArMSw1MyBAQAorISB7IGRnLWRvIGNvbXBpbGUgfSAKKworcHJv Z3JhbSB0ZXN0CisgIGltcGxpY2l0IG5vbmUKKworICBsb2dpY2FsIDo6IHgKKyAgaW50ZWdlciA6 OiBpCisKKyAgISRhY2MgcGFyYWxsZWwgc2VsZiAoKSAhIHsgZGctZXJyb3IgIkludmFsaWQgY2hh cmFjdGVyIiB9CisgICEkYWNjIHBhcmFsbGVsIHNlbGYgKGkpICEgeyBkZy1lcnJvciAic2NhbGFy IExPR0lDQUwgZXhwcmVzc2lvbiIgfQorICAhJGFjYyBlbmQgcGFyYWxsZWwgCisgICEkYWNjIHBh cmFsbGVsIHNlbGYgKDEpICEgeyBkZy1lcnJvciAic2NhbGFyIExPR0lDQUwgZXhwcmVzc2lvbiIg fQorICAhJGFjYyBlbmQgcGFyYWxsZWwgCisKKyAgISRhY2Mga2VybmVscyBzZWxmICgpICEgeyBk Zy1lcnJvciAiSW52YWxpZCBjaGFyYWN0ZXIiIH0KKyAgISRhY2Mga2VybmVscyBzZWxmIChpKSAh IHsgZGctZXJyb3IgInNjYWxhciBMT0dJQ0FMIGV4cHJlc3Npb24iIH0KKyAgISRhY2MgZW5kIGtl cm5lbHMgCisgICEkYWNjIGtlcm5lbHMgc2VsZiAoMSkgISB7IGRnLWVycm9yICJzY2FsYXIgTE9H SUNBTCBleHByZXNzaW9uIiB9CisgICEkYWNjIGVuZCBrZXJuZWxzCisKKyAgISRhY2Mgc2VyaWFs IHNlbGYgKCkgISB7IGRnLWVycm9yICJJbnZhbGlkIGNoYXJhY3RlciIgfQorICAhJGFjYyBzZXJp YWwgc2VsZiAoaSkgISB7IGRnLWVycm9yICJzY2FsYXIgTE9HSUNBTCBleHByZXNzaW9uIiB9Cisg ICEkYWNjIGVuZCBzZXJpYWwKKyAgISRhY2Mgc2VyaWFsIHNlbGYgKDEpICEgeyBkZy1lcnJvciAi c2NhbGFyIExPR0lDQUwgZXhwcmVzc2lvbiIgfQorICAhJGFjYyBlbmQgc2VyaWFsCisgIAorICAh IGF0IG1vc3Qgb25lIHNlbGYgY2xhdXNlIG1heSBhcHBlYXIKKyAgISRhY2MgcGFyYWxsZWwgc2Vs ZiAoLmZhbHNlLikgc2VsZiAoLmZhbHNlLikgeyBkZy1lcnJvciAiRHVwbGljYXRlZCAnc2VsZicg Y2xhdXNlIiB9CisgICEkYWNjIGtlcm5lbHMgc2VsZiAoLmZhbHNlLikgc2VsZiAoLmZhbHNlLikg eyBkZy1lcnJvciAiRHVwbGljYXRlZCAnc2VsZicgY2xhdXNlIiB9CisgICEkYWNjIHNlcmlhbCBz ZWxmICguZmFsc2UuKSBzZWxmICguZmFsc2UuKSB7IGRnLWVycm9yICJEdXBsaWNhdGVkICdzZWxm JyBjbGF1c2UiIH0KKworICAhJGFjYyBwYXJhbGxlbCBzZWxmICh4KQorICAhJGFjYyBlbmQgcGFy YWxsZWwKKyAgISRhY2MgcGFyYWxsZWwgc2VsZiAoLnRydWUuKQorICAhJGFjYyBlbmQgcGFyYWxs ZWwKKyAgISRhY2MgcGFyYWxsZWwgc2VsZiAoaS5ndC4xKQorICAhJGFjYyBlbmQgcGFyYWxsZWwK KworICAhJGFjYyBrZXJuZWxzIHNlbGYgKHgpCisgICEkYWNjIGVuZCBrZXJuZWxzCisgICEkYWNj IGtlcm5lbHMgc2VsZiAoLnRydWUuKQorICAhJGFjYyBlbmQga2VybmVscworICAhJGFjYyBrZXJu ZWxzIHNlbGYgKGkuZ3QuMSkKKyAgISRhY2MgZW5kIGtlcm5lbHMKKworICAhJGFjYyBzZXJpYWwg c2VsZiAoeCkKKyAgISRhY2MgZW5kIHNlcmlhbAorICAhJGFjYyBzZXJpYWwgc2VsZiAoLnRydWUu KQorICAhJGFjYyBlbmQgc2VyaWFsCisgICEkYWNjIHNlcmlhbCBzZWxmIChpLmd0LjEpCisgICEk YWNjIGVuZCBzZXJpYWwKKworZW5kIHByb2dyYW0gdGVzdApkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUt Y29yZS5oIGIvZ2NjL3RyZWUtY29yZS5oCmluZGV4IGM0OGExMmIzNzhmLi4zZmQ1YTNkZmY3OCAx MDA2NDQKLS0tIGEvZ2NjL3RyZWUtY29yZS5oCisrKyBiL2djYy90cmVlLWNvcmUuaApAQCAtNTI0 LDYgKzUyNCw5IEBAIGVudW0gb21wX2NsYXVzZV9jb2RlIHsKIAogICAvKiBPcGVuQUNDIGNsYXVz ZTogbm9ob3N0LiAgKi8KICAgT01QX0NMQVVTRV9OT0hPU1QsCisKKyAgLyogT3BlbkFDQyBjbGF1 c2U6IHNlbGYuICAqLworICBPTVBfQ0xBVVNFX1NFTEYsCiB9OwogCiAjdW5kZWYgREVGVFJFRVNU UlVDVApkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtbmVzdGVkLmNjIGIvZ2NjL3RyZWUtbmVzdGVkLmNj CmluZGV4IGFlN2QxZjFmNmE4Li44ZGQ0YzhhY2YyNSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtbmVz dGVkLmNjCisrKyBiL2djYy90cmVlLW5lc3RlZC5jYwpAQCAtMTM2Niw2ICsxMzY2LDcgQEAgY29u dmVydF9ub25sb2NhbF9vbXBfY2xhdXNlcyAodHJlZSAqcGNsYXVzZXMsIHN0cnVjdCB3YWxrX3N0 bXRfaW5mbyAqd2kpCiAJICAvKiBGQUxMVEhSVSAqLwogCWNhc2UgT01QX0NMQVVTRV9GSU5BTDoK IAljYXNlIE9NUF9DTEFVU0VfSUY6CisJY2FzZSBPTVBfQ0xBVVNFX1NFTEY6CiAJY2FzZSBPTVBf Q0xBVVNFX05VTV9USFJFQURTOgogCWNhc2UgT01QX0NMQVVTRV9ERVBFTkQ6CiAJY2FzZSBPTVBf Q0xBVVNFX0RPQUNST1NTOgpAQCAtMjE1Niw2ICsyMTU3LDcgQEAgY29udmVydF9sb2NhbF9vbXBf Y2xhdXNlcyAodHJlZSAqcGNsYXVzZXMsIHN0cnVjdCB3YWxrX3N0bXRfaW5mbyAqd2kpCiAJICAv KiBGQUxMVEhSVSAqLwogCWNhc2UgT01QX0NMQVVTRV9GSU5BTDoKIAljYXNlIE9NUF9DTEFVU0Vf SUY6CisJY2FzZSBPTVBfQ0xBVVNFX1NFTEY6CiAJY2FzZSBPTVBfQ0xBVVNFX05VTV9USFJFQURT OgogCWNhc2UgT01QX0NMQVVTRV9ERVBFTkQ6CiAJY2FzZSBPTVBfQ0xBVVNFX0RPQUNST1NTOgpk aWZmIC0tZ2l0IGEvZ2NjL3RyZWUtcHJldHR5LXByaW50LmNjIGIvZ2NjL3RyZWUtcHJldHR5LXBy aW50LmNjCmluZGV4IDI1ZDE5MWIxMGZkLi5hNzQzZTNjZGZkOCAxMDA2NDQKLS0tIGEvZ2NjL3Ry ZWUtcHJldHR5LXByaW50LmNjCisrKyBiL2djYy90cmVlLXByZXR0eS1wcmludC5jYwpAQCAtMTQ1 MCw3ICsxNDUwLDEyIEBAIGR1bXBfb21wX2NsYXVzZSAocHJldHR5X3ByaW50ZXIgKnBwLCB0cmVl IGNsYXVzZSwgaW50IHNwYywgZHVtcF9mbGFnc190IGZsYWdzKQogCQkJIGZhbHNlKTsKICAgICAg IHBwX3JpZ2h0X3BhcmVuIChwcCk7CiAgICAgICBicmVhazsKLQorICAgIGNhc2UgT01QX0NMQVVT RV9TRUxGOgorICAgICAgcHBfc3RyaW5nIChwcCwgInNlbGYoIik7CisgICAgICBkdW1wX2dlbmVy aWNfbm9kZSAocHAsIE9NUF9DTEFVU0VfU0VMRl9FWFBSIChjbGF1c2UpLAorCQkJIHNwYywgZmxh Z3MsIGZhbHNlKTsKKyAgICAgIHBwX3JpZ2h0X3BhcmVuIChwcCk7CisgICAgICBicmVhazsKICAg ICBkZWZhdWx0OgogICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOwogICAgIH0KZGlmZiAtLWdpdCBh L2djYy90cmVlLmNjIGIvZ2NjL3RyZWUuY2MKaW5kZXggOGUxNDRiYzA5MGUuLjE4YTI3ZDJmYWY5 IDEwMDY0NAotLS0gYS9nY2MvdHJlZS5jYworKysgYi9nY2MvdHJlZS5jYwpAQCAtMzI2LDYgKzMy Niw3IEBAIHVuc2lnbmVkIGNvbnN0IGNoYXIgb21wX2NsYXVzZV9udW1fb3BzW10gPQogICAwLCAv KiBPTVBfQ0xBVVNFX0lGX1BSRVNFTlQgKi8KICAgMCwgLyogT01QX0NMQVVTRV9GSU5BTElaRSAq LwogICAwLCAvKiBPTVBfQ0xBVVNFX05PSE9TVCAqLworICAxLCAvKiBPTVBfQ0xBVVNFX1NFTEYg Ki8KIH07CiAKIGNvbnN0IGNoYXIgKiBjb25zdCBvbXBfY2xhdXNlX2NvZGVfbmFtZVtdID0KQEAg LTQxNyw2ICs0MTgsNyBAQCBjb25zdCBjaGFyICogY29uc3Qgb21wX2NsYXVzZV9jb2RlX25hbWVb XSA9CiAgICJpZl9wcmVzZW50IiwKICAgImZpbmFsaXplIiwKICAgIm5vaG9zdCIsCisgICJzZWxm IiwKIH07CiAKIC8qIFVubGVzcyBzcGVjaWZpYyB0byBPcGVuQUNDLCB3ZSB0ZW5kIHRvIGludGVy bmFsbHkgbWFpbnRhaW4gT3Blbk1QLWNlbnRyaWMKZGlmZiAtLWdpdCBhL2djYy90cmVlLmggYi9n Y2MvdHJlZS5oCmluZGV4IDE4NTRmZTRhN2Q0Li5mMDQ0NTcwMjJhYyAxMDA2NDQKLS0tIGEvZ2Nj L3RyZWUuaAorKysgYi9nY2MvdHJlZS5oCkBAIC0xNzExLDYgKzE3MTEsOCBAQCBjbGFzcyBhdXRv X3N1cHByZXNzX2xvY2F0aW9uX3dyYXBwZXJzCiAgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NM QVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX0hJTlQpLCAwKQogI2RlZmluZSBP TVBfQ0xBVVNFX0ZJTFRFUl9FWFBSKE5PREUpIFwKICAgT01QX0NMQVVTRV9PUEVSQU5EIChPTVBf Q0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfRklMVEVSKSwgMCkKKyNkZWZp bmUgT01QX0NMQVVTRV9TRUxGX0VYUFIoTk9ERSkgXAorICBPTVBfQ0xBVVNFX09QRVJBTkQgKE9N UF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9TRUxGKSwgMCkKIAogI2Rl ZmluZSBPTVBfQ0xBVVNFX0dSQUlOU0laRV9FWFBSKE5PREUpIFwKICAgT01QX0NMQVVTRV9PUEVS QU5EIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfR1JBSU5TSVpF KSwwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9nb21wLWNvbnN0YW50cy5oIGIvaW5jbHVkZS9nb21w LWNvbnN0YW50cy5oCmluZGV4IDQ5YjdkZDg2ZmY1Li44YTM0OWNhNTA0ZiAxMDA2NDQKLS0tIGEv aW5jbHVkZS9nb21wLWNvbnN0YW50cy5oCisrKyBiL2luY2x1ZGUvZ29tcC1jb25zdGFudHMuaApA QCAtMzA1LDYgKzMwNSw4IEBAIGVudW0gZ29tcF9tYXBfa2luZAogCiAvKiBGb3JjZSBob3N0IGZh bGxiYWNrIGV4ZWN1dGlvbi4gICovCiAjZGVmaW5lIEdPQUNDX0ZMQUdfSE9TVF9GQUxMQkFDSwko MSA8PCAwKQorLyogRXhlY3V0ZSBvbiBsb2NhbCBkZXZpY2UgKGkuZS4gaG9zdCBtdWx0aWNvcmUg Q1BVKS4gICovCisjZGVmaW5lIEdPQUNDX0ZMQUdfTE9DQUxfREVWSUNFIAkoMSA8PCAxKQogCiAv KiBGb3IgbGVnYWN5IHJlYXNvbnMsIGluIHRoZSBBQkksIHRoZSBHT0FDQ19GTEFHcyBhcmUgZW5j b2RlZCBhcyBhbiBpbnZlcnRlZAogICAgYml0bWFzay4gICovCmRpZmYgLS1naXQgYS9saWJnb21w L29hY2MtcGFyYWxsZWwuYyBiL2xpYmdvbXAvb2FjYy1wYXJhbGxlbC5jCmluZGV4IDM2M2U2NjU2 OTgyLi5jZjM3YTFiZGQ3ZCAxMDA2NDQKLS0tIGEvbGliZ29tcC9vYWNjLXBhcmFsbGVsLmMKKysr IGIvbGliZ29tcC9vYWNjLXBhcmFsbGVsLmMKQEAgLTE5Myw2ICsxOTMsMTcgQEAgR09BQ0NfcGFy YWxsZWxfa2V5ZWQgKGludCBmbGFnc19tLCB2b2lkICgqZm4pICh2b2lkICopLAogICAgICAgZ29h Y2NfcmVzdG9yZV9iaW5kICgpOwogICAgICAgZ290byBvdXRfcHJvZjsKICAgICB9CisgIGVsc2Ug aWYgKGZsYWdzICYgR09BQ0NfRkxBR19MT0NBTF9ERVZJQ0UpCisgICAgeworICAgICAgLyogVE9E TzogYSBwcm9wZXIgcHRocmVhZHMgYmFzZWQgIm11bHRpLWNvcmUgQ1BVIiBsb2NhbCBkZXZpY2UK KwkgaW1wbGVtZW50YXRpb24uIEN1cnJlbnRseSwgdGhpcyBpcyBzdGlsbCB0aGUgc2FtZSBhcyBo b3N0LWZhbGxiYWNrLiAgKi8KKyAgICAgIHByb2ZfaW5mby5kZXZpY2VfdHlwZSA9IGFjY19kZXZp Y2VfaG9zdDsKKyAgICAgIGFwaV9pbmZvLmRldmljZV90eXBlID0gcHJvZl9pbmZvLmRldmljZV90 eXBlOworICAgICAgZ29hY2Nfc2F2ZV9hbmRfc2V0X2JpbmQgKGFjY19kZXZpY2VfaG9zdCk7Cisg ICAgICBmbiAoaG9zdGFkZHJzKTsKKyAgICAgIGdvYWNjX3Jlc3RvcmVfYmluZCAoKTsKKyAgICAg IGdvdG8gb3V0X3Byb2Y7CisgICAgfQogICBlbHNlIGlmIChhY2NfZGV2aWNlX3R5cGUgKGFjY19k ZXYtPnR5cGUpID09IGFjY19kZXZpY2VfaG9zdCkKICAgICB7CiAgICAgICBmbiAoaG9zdGFkZHJz KTsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAub2FjYy1jLWMrKy1jb21t b24vc2VsZi0xLmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLm9hY2MtYy1jKystY29tbW9u L3NlbGYtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43NTJlMTZl ODU0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAub2FjYy1j LWMrKy1jb21tb24vc2VsZi0xLmMKQEAgLTAsMCArMSw5NjIgQEAKKyNpbmNsdWRlIDxvcGVuYWNj Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjZGVmaW5l IE4gICAzMgorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGZsb2F0 ICphLCAqYiwgKmRfYSwgKmRfYiwgZXhwLCBleHAyOworICAgIGludCBpOworICAgIGNvbnN0IGlu dCBvbmUgPSAxOworICAgIGNvbnN0IGludCB6ZXJvID0gMDsKKyAgICBpbnQgbjsKKworICAgIGEg PSAoZmxvYXQgKikgbWFsbG9jIChOICogc2l6ZW9mIChmbG9hdCkpOworICAgIGIgPSAoZmxvYXQg KikgbWFsbG9jIChOICogc2l6ZW9mIChmbG9hdCkpOworICAgIGRfYSA9IChmbG9hdCAqKSBhY2Nf bWFsbG9jIChOICogc2l6ZW9mIChmbG9hdCkpOworICAgIGRfYiA9IChmbG9hdCAqKSBhY2NfbWFs bG9jIChOICogc2l6ZW9mIChmbG9hdCkpOworCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykK KyAgICAgICAgYVtpXSA9IDQuMDsKKworI3ByYWdtYSBhY2MgcGFyYWxsZWwgY29weWluKGFbMDpO XSkgY29weW91dChiWzA6Tl0pIHNlbGYoMCkKKyAgICB7CisgICAgICAgIGludCBpaTsKKworICAg ICAgICBmb3IgKGlpID0gMDsgaWkgPCBOOyBpaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBp ZiAoYWNjX29uX2RldmljZSAoYWNjX2RldmljZV9ob3N0KSkKKyAgICAgICAgICAgICAgICBiW2lp XSA9IGFbaWldICsgMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiW2lpXSA9 IGFbaWldOworICAgICAgICB9CisgICAgfQorCisjaWYgQUNDX01FTV9TSEFSRUQKKyAgICBleHAg PSA1LjA7CisjZWxzZQorICAgIGV4cCA9IDQuMDsKKyNlbmRpZgorCisgICAgZm9yIChpID0gMDsg aSA8IE47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChiW2ldICE9IGV4cCkKKyAgICAgICAgICAg IGFib3J0KCk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICAgICAg YVtpXSA9IDE2LjA7CisKKyNwcmFnbWEgYWNjIHBhcmFsbGVsIHNlbGYoMSkKKyAgICB7CisgICAg ICAgIGludCBpaTsKKworICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBOOyBpaSsrKQorICAgICAg ICB7CisgICAgICAgICAgICBpZiAoYWNjX29uX2RldmljZSAoYWNjX2RldmljZV9ob3N0KSkKKyAg ICAgICAgICAgICAgICBiW2lpXSA9IGFbaWldICsgMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgICBiW2lpXSA9IGFbaWldOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChp ID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChiW2ldICE9IDE3LjApCisgICAg ICAgICAgICBhYm9ydCgpOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisg ICAgICAgIGFbaV0gPSA4LjA7CisKKyNwcmFnbWEgYWNjIHBhcmFsbGVsIGNvcHlpbihhWzA6Tl0p IGNvcHlvdXQoYlswOk5dKSBzZWxmKCFvbmUpCisgICAgeworICAgICAgICBpbnQgaWk7CisKKyAg ICAgICAgZm9yIChpaSA9IDA7IGlpIDwgTjsgaWkrKykKKyAgICAgICAgeworICAgICAgICAgICAg aWYgKGFjY19vbl9kZXZpY2UgKGFjY19kZXZpY2VfaG9zdCkpCisgICAgICAgICAgICAgICAgYltp aV0gPSBhW2lpXSArIDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYltpaV0g PSBhW2lpXTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIEFDQ19NRU1fU0hBUkVECisgICAgZXhw ID0gOS4wOworI2Vsc2UKKyAgICBleHAgPSA4LjA7CisjZW5kaWYKKworICAgIGZvciAoaSA9IDA7 IGkgPCBOOyBpKyspCisgICAgeworICAgICAgICBpZiAoYltpXSAhPSBleHApCisgICAgICAgICAg ICBhYm9ydCgpOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgICAg IGFbaV0gPSAyMi4wOworCisjcHJhZ21hIGFjYyBwYXJhbGxlbCBzZWxmKCF6ZXJvKQorICAgIHsK KyAgICAgICAgaW50IGlpOworCisgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IE47IGlpKyspCisg ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhY2Nfb25fZGV2aWNlIChhY2NfZGV2aWNlX2hvc3Qp KQorICAgICAgICAgICAgICAgIGJbaWldID0gYVtpaV0gKyAxOworICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgIGJbaWldID0gYVtpaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm b3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGJbaV0gIT0gMjMuMCkK KyAgICAgICAgICAgIGFib3J0KCk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkr KykKKyAgICAgICAgYVtpXSA9IDE2LjA7CisKKyNwcmFnbWEgYWNjIHBhcmFsbGVsIGNvcHlpbihh WzA6Tl0pIGNvcHlvdXQoYlswOk5dKSBzZWxmKGZhbHNlKQorICAgIHsKKyAgICAgICAgaW50IGlp OworCisgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IE47IGlpKyspCisgICAgICAgIHsKKyAgICAg ICAgICAgIGlmIChhY2Nfb25fZGV2aWNlIChhY2NfZGV2aWNlX2hvc3QpKQorICAgICAgICAgICAg ICAgIGJbaWldID0gYVtpaV0gKyAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg IGJbaWldID0gYVtpaV07CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBBQ0NfTUVNX1NIQVJFRAor ICAgIGV4cCA9IDE3LjA7CisjZWxzZQorICAgIGV4cCA9IDE2LjA7CisjZW5kaWYKKworICAgIGZv ciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgeworICAgICAgICBpZiAoYltpXSAhPSBleHApCisg ICAgICAgICAgICBhYm9ydCgpOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKysp CisgICAgICAgIGFbaV0gPSA3Ni4wOworCisjcHJhZ21hIGFjYyBwYXJhbGxlbCBzZWxmKHRydWUp CisgICAgeworICAgICAgICBpbnQgaWk7CisKKyAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgTjsg aWkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFjY19vbl9kZXZpY2UgKGFjY19kZXZp Y2VfaG9zdCkpCisgICAgICAgICAgICAgICAgYltpaV0gPSBhW2lpXSArIDE7CisgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgYltpaV0gPSBhW2lpXTsKKyAgICAgICAgfQorICAgIH0K KworICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgeworICAgICAgICBpZiAoYltpXSAh PSA3Ny4wKQorICAgICAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBp IDwgTjsgaSsrKQorICAgICAgICBhW2ldID0gMjIuMDsKKworICAgIG4gPSAxOworCisjcHJhZ21h IGFjYyBwYXJhbGxlbCBjb3B5aW4oYVswOk5dKSBjb3B5b3V0KGJbMDpOXSkgc2VsZighbikKKyAg ICB7CisgICAgICAgIGludCBpaTsKKworICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBOOyBpaSsr KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYWNjX29uX2RldmljZSAoYWNjX2RldmljZV9o b3N0KSkKKyAgICAgICAgICAgICAgICBiW2lpXSA9IGFbaWldICsgMTsKKyAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICBiW2lpXSA9IGFbaWldOworICAgICAgICB9CisgICAgfQorCisj aWYgQUNDX01FTV9TSEFSRUQKKyAgICBleHAgPSAyMy4wOworI2Vsc2UKKyAgICBleHAgPSAyMi4w OworI2VuZGlmCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgICAg aWYgKGJbaV0gIT0gZXhwKQorICAgICAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgTjsgaSsrKQorICAgICAgICBhW2ldID0gMTguMDsKKworICAgIG4gPSAwOwor CisjcHJhZ21hIGFjYyBwYXJhbGxlbCBzZWxmKCFuKQorICAgIHsKKyAgICAgICAgaW50IGlpOwor CisgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IE47IGlpKyspCisgICAgICAgIHsKKyAgICAgICAg ICAgIGlmIChhY2Nfb25fZGV2aWNlIChhY2NfZGV2aWNlX2hvc3QpKQorICAgICAgICAgICAgICAg IGJbaWldID0gYVtpaV0gKyAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJb aWldID0gYVtpaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsg aSsrKQorICAgIHsKKyAgICAgICAgaWYgKGJbaV0gIT0gMTkuMCkKKyAgICAgICAgICAgIGFib3J0 KCk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICAgICAgYVtpXSA9 IDQ5LjA7CisKKyAgICBuID0gMTsKKworI3ByYWdtYSBhY2MgcGFyYWxsZWwgY29weWluKGFbMDpO XSkgY29weW91dChiWzA6Tl0pIHNlbGYoIShuICsgbikpCisgICAgeworICAgICAgICBpbnQgaWk7 CisKKyAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgTjsgaWkrKykKKyAgICAgICAgeworICAgICAg ICAgICAgaWYgKGFjY19vbl9kZXZpY2UgKGFjY19kZXZpY2VfaG9zdCkpCisgICAgICAgICAgICAg ICAgYltpaV0gPSBhW2lpXSArIDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg YltpaV0gPSBhW2lpXTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIEFDQ19NRU1fU0hBUkVECisg ICAgZXhwID0gNTAuMDsKKyNlbHNlCisgICAgZXhwID0gNDkuMDsKKyNlbmRpZgorCisgICAgZm9y IChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChiW2ldICE9IGV4cCkKKyAg ICAgICAgICAgIGFib3J0KCk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykK KyAgICAgICAgYVtpXSA9IDM4LjA7CisKKyAgICBuID0gMDsKKworI3ByYWdtYSBhY2MgcGFyYWxs ZWwgc2VsZighKG4gKyBuKSkKKyAgICB7CisgICAgICAgIGludCBpaTsKKworICAgICAgICBmb3Ig KGlpID0gMDsgaWkgPCBOOyBpaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYWNjX29u X2RldmljZSAoYWNjX2RldmljZV9ob3N0KSkKKyAgICAgICAgICAgICAgICBiW2lpXSA9IGFbaWld ICsgMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiW2lpXSA9IGFbaWldOwor ICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7Cisg ICAgICAgIGlmIChiW2ldICE9IDM5LjApCisgICAgICAgICAgICBhYm9ydCgpOworICAgIH0KKwor ICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgICAgIGFbaV0gPSA5MS4wOworCisjcHJh Z21hIGFjYyBwYXJhbGxlbCBjb3B5aW4oYVswOk5dKSBjb3B5b3V0KGJbMDpOXSkgc2VsZighKC0y KSkKKyAgICB7CisgICAgICAgIGludCBpaTsKKworICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBO OyBpaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYWNjX29uX2RldmljZSAoYWNjX2Rl dmljZV9ob3N0KSkKKyAgICAgICAgICAgICAgICBiW2lpXSA9IGFbaWldICsgMTsKKyAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiW2lpXSA9IGFbaWldOworICAgICAgICB9CisgICAg fQorCisjaWYgQUNDX01FTV9TSEFSRUQKKyAgICBleHAgPSA5Mi4wOworI2Vsc2UKKyAgICBleHAg PSA5MS4wOworI2VuZGlmCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAg ICAgICAgaWYgKGJbaV0gIT0gZXhwKQorICAgICAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAg ICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgICAgICBhW2ldID0gNDMuMDsKKworI3ByYWdt YSBhY2MgcGFyYWxsZWwgY29weWluKGFbMDpOXSkgY29weW91dChiWzA6Tl0pIHNlbGYob25lICE9 IDEpCisgICAgeworICAgICAgICBpbnQgaWk7CisKKyAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwg TjsgaWkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFjY19vbl9kZXZpY2UgKGFjY19k ZXZpY2VfaG9zdCkpCisgICAgICAgICAgICAgICAgYltpaV0gPSBhW2lpXSArIDE7CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgYltpaV0gPSBhW2lpXTsKKyAgICAgICAgfQorICAg IH0KKworI2lmIEFDQ19NRU1fU0hBUkVECisgICAgZXhwID0gNDQuMDsKKyNlbHNlCisgICAgZXhw ID0gNDMuMDsKKyNlbmRpZgorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7Cisg ICAgICAgIGlmIChiW2ldICE9IGV4cCkKKyAgICAgICAgICAgIGFib3J0KCk7CisgICAgfQorCisg ICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICAgICAgYVtpXSA9IDg3LjA7CisKKyNwcmFn bWEgYWNjIHBhcmFsbGVsIHNlbGYob25lICE9IDApCisgICAgeworICAgICAgICBpbnQgaWk7CisK KyAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgTjsgaWkrKykKKyAgICAgICAgeworICAgICAgICAg ICAgaWYgKGFjY19vbl9kZXZpY2UgKGFjY19kZXZpY2VfaG9zdCkpCisgICAgICAgICAgICAgICAg YltpaV0gPSBhW2lpXSArIDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYltp aV0gPSBhW2lpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBOOyBp KyspCisgICAgeworICAgICAgICBpZiAoYltpXSAhPSA4OC4wKQorICAgICAgICAgICAgYWJvcnQo KTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgICAg YVtpXSA9IDMuMDsKKyAgICAgICAgYltpXSA9IDkuMDsKKyAgICB9CisKKyNpZiBBQ0NfTUVNX1NI QVJFRAorICAgIGV4cCA9IDAuMDsKKyAgICBleHAyID0gMC4wOworI2Vsc2UKKyAgICBhY2NfbWFw X2RhdGEgKGEsIGRfYSwgTiAqIHNpemVvZiAoZmxvYXQpKTsKKyAgICBhY2NfbWFwX2RhdGEgKGIs IGRfYiwgTiAqIHNpemVvZiAoZmxvYXQpKTsKKyAgICBleHAgPSAzLjA7CisgICAgZXhwMiA9IDku MDsKKyNlbmRpZgorCisjcHJhZ21hIGFjYyB1cGRhdGUgZGV2aWNlKGFbMDpOXSwgYlswOk5dKSBp ZigxKQorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICAgIGFbaV0g PSAwLjA7CisgICAgICAgIGJbaV0gPSAwLjA7CisgICAgfQorCisjcHJhZ21hIGFjYyB1cGRhdGUg aG9zdChhWzA6Tl0sIGJbMDpOXSkgaWYoMSkKKworICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKysp CisgICAgeworICAgICAgICBpZiAoYVtpXSAhPSBleHApCisgICAgICAgICAgICBhYm9ydCgpOwor CisgICAgICAgIGlmIChiW2ldICE9IGV4cDIpCisgICAgICAgICAgICBhYm9ydCgpOworICAgIH0K KworICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgeworICAgICAgICBhW2ldID0gNi4w OworICAgICAgICBiW2ldID0gMTIuMDsKKyAgICB9CisKKyNwcmFnbWEgYWNjIHVwZGF0ZSBkZXZp Y2UoYVswOk5dLCBiWzA6Tl0pIGlmKDApCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQor ICAgIHsKKyAgICAgICAgYVtpXSA9IDAuMDsKKyAgICAgICAgYltpXSA9IDAuMDsKKyAgICB9CisK KyNwcmFnbWEgYWNjIHVwZGF0ZSBob3N0KGFbMDpOXSwgYlswOk5dKSBpZigxKQorCisgICAgZm9y IChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhW2ldICE9IGV4cCkKKyAg ICAgICAgICAgIGFib3J0KCk7CisKKyAgICAgICAgaWYgKGJbaV0gIT0gZXhwMikKKyAgICAgICAg ICAgIGFib3J0KCk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7 CisgICAgICAgIGFbaV0gPSAyNi4wOworICAgICAgICBiW2ldID0gMjEuMDsKKyAgICB9CisKKyNw cmFnbWEgYWNjIHVwZGF0ZSBkZXZpY2UoYVswOk5dLCBiWzA6Tl0pIGlmKDEpCisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgICAgYVtpXSA9IDAuMDsKKyAgICAgICAg YltpXSA9IDAuMDsKKyAgICB9CisKKyNwcmFnbWEgYWNjIHVwZGF0ZSBob3N0KGFbMDpOXSwgYlsw Ok5dKSBpZigwKQorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICAg IGlmIChhW2ldICE9IDAuMCkKKyAgICAgICAgICAgIGFib3J0KCk7CisKKyAgICAgICAgaWYgKGJb aV0gIT0gMC4wKQorICAgICAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyNpZiAhQUNDX01FTV9T SEFSRUQKKyAgICBhY2NfdW5tYXBfZGF0YSAoYSk7CisgICAgYWNjX3VubWFwX2RhdGEgKGIpOwor I2VuZGlmCisKKyAgICBhY2NfZnJlZSAoZF9hKTsKKyAgICBhY2NfZnJlZSAoZF9iKTsKKworICAg IGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgeworICAgICAgICBhW2ldID0gNC4wOworICAg ICAgICBiW2ldID0gMC4wOworICAgIH0KKworI3ByYWdtYSBhY2MgZGF0YSBjb3B5aW4oYVswOk5d KSBjb3B5b3V0KGJbMDpOXSkgaWYoMSkKK3sKKyNwcmFnbWEgYWNjIHBhcmFsbGVsIHByZXNlbnQo YVswOk5dKQorICAgIHsKKyAgICAgICAgaW50IGlpOworCisgICAgICAgIGZvciAoaWkgPSAwOyBp aSA8IE47IGlpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGJbaWldID0gYVtpaV07CisgICAg ICAgIH0KKyAgICB9Cit9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAg ICAgICAgaWYgKGJbaV0gIT0gNC4wKQorICAgICAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAg ICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgICAgYVtpXSA9IDguMDsKKyAg ICAgICAgYltpXSA9IDEuMDsKKyAgICB9CisKKyNwcmFnbWEgYWNjIGRhdGEgY29weWluKGFbMDpO XSkgY29weW91dChiWzA6Tl0pIGlmKDApCit7CisjaWYgIUFDQ19NRU1fU0hBUkVECisgICAgaWYg KGFjY19pc19wcmVzZW50IChhLCBOICogc2l6ZW9mIChmbG9hdCkpKQorICAgICAgICBhYm9ydCAo KTsKKyNlbmRpZgorCisjaWYgIUFDQ19NRU1fU0hBUkVECisgICAgaWYgKGFjY19pc19wcmVzZW50 IChiLCBOICogc2l6ZW9mIChmbG9hdCkpKQorICAgICAgICBhYm9ydCAoKTsKKyNlbmRpZgorfQor CisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICAgIGFbaV0gPSAxOC4w OworICAgICAgICBiW2ldID0gMjEuMDsKKyAgICB9CisKKyNwcmFnbWEgYWNjIGRhdGEgY29weWlu KGFbMDpOXSkgaWYoMSkKK3sKKyNpZiAhQUNDX01FTV9TSEFSRUQKKyAgICBpZiAoIWFjY19pc19w cmVzZW50IChhLCBOICogc2l6ZW9mIChmbG9hdCkpKQorICAgICAgICBhYm9ydCAoKTsKKyNlbmRp ZgorCisjcHJhZ21hIGFjYyBkYXRhIGNvcHlvdXQoYlswOk5dKSBpZigwKQorICAgIHsKKyNpZiAh QUNDX01FTV9TSEFSRUQKKyAgICAgICAgaWYgKGFjY19pc19wcmVzZW50IChiLCBOICogc2l6ZW9m IChmbG9hdCkpKQorICAgICAgICAgICAgYWJvcnQgKCk7CisjZW5kaWYKKworI3ByYWdtYSBhY2Mg ZGF0YSBjb3B5b3V0KGJbMDpOXSkgaWYoMSkKKyAgICAgICAgeworI3ByYWdtYSBhY2MgcGFyYWxs ZWwgcHJlc2VudChhWzA6Tl0pIHByZXNlbnQoYlswOk5dKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIGludCBpaTsKKworICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IE47 IGlpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBiW2lpXSA9IGFb aWldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisjaWYg IUFDQ19NRU1fU0hBUkVECisgICAgICAgIGlmIChhY2NfaXNfcHJlc2VudCAoYiwgTiAqIHNpemVv ZiAoZmxvYXQpKSkKKyAgICAgICAgICAgIGFib3J0ICgpOworI2VuZGlmCisgICAgfQorfQorCisg ICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICAgIGlmIChiW2ldICE9IDE4 LjApCisgICAgICAgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyNwcmFnbWEgYWNjIGVudGVyIGRh dGEgY29weWluIChiWzA6Tl0pIGlmICgwKQorCisjaWYgIUFDQ19NRU1fU0hBUkVECisgICAgaWYg KGFjY19pc19wcmVzZW50IChiLCBOICogc2l6ZW9mIChmbG9hdCkpKQorCWFib3J0ICgpOworI2Vu ZGlmCisKKyNwcmFnbWEgYWNjIGV4aXQgZGF0YSBkZWxldGUgKGJbMDpOXSkgaWYgKDApCisKKyNw cmFnbWEgYWNjIGVudGVyIGRhdGEgY29weWluIChiWzA6Tl0pIGlmICgxKQorCisjaWYgIUFDQ19N RU1fU0hBUkVECisgICAgaWYgKCFhY2NfaXNfcHJlc2VudCAoYiwgTiAqIHNpemVvZiAoZmxvYXQp KSkKKwlhYm9ydCAoKTsKKyNlbmRpZgorCisjcHJhZ21hIGFjYyBleGl0IGRhdGEgZGVsZXRlIChi WzA6Tl0pIGlmICgxKQorCisjaWYgIUFDQ19NRU1fU0hBUkVECisgICAgaWYgKGFjY19pc19wcmVz ZW50IChiLCBOICogc2l6ZW9mIChmbG9hdCkpKQorCWFib3J0ICgpOworI2VuZGlmCisKKyNwcmFn bWEgYWNjIGVudGVyIGRhdGEgY29weWluIChiWzA6Tl0pIGlmICh6ZXJvKQorCisjaWYgIUFDQ19N RU1fU0hBUkVECisgICAgaWYgKGFjY19pc19wcmVzZW50IChiLCBOICogc2l6ZW9mIChmbG9hdCkp KQorCWFib3J0ICgpOworI2VuZGlmCisKKyNwcmFnbWEgYWNjIGV4aXQgZGF0YSBkZWxldGUgKGJb MDpOXSkgaWYgKHplcm8pCisKKyNwcmFnbWEgYWNjIGVudGVyIGRhdGEgY29weWluIChiWzA6Tl0p IGlmIChvbmUpCisKKyNpZiAhQUNDX01FTV9TSEFSRUQKKyAgICBpZiAoIWFjY19pc19wcmVzZW50 IChiLCBOICogc2l6ZW9mIChmbG9hdCkpKQorCWFib3J0ICgpOworI2VuZGlmCisKKyNwcmFnbWEg YWNjIGV4aXQgZGF0YSBkZWxldGUgKGJbMDpOXSkgaWYgKG9uZSkKKworI2lmICFBQ0NfTUVNX1NI QVJFRAorICAgIGlmIChhY2NfaXNfcHJlc2VudCAoYiwgTiAqIHNpemVvZiAoZmxvYXQpKSkKKwlh Ym9ydCAoKTsKKyNlbmRpZgorCisjcHJhZ21hIGFjYyBlbnRlciBkYXRhIGNvcHlpbiAoYlswOk5d KSBpZiAob25lID09IDApCisKKyNpZiAhQUNDX01FTV9TSEFSRUQKKyAgICBpZiAoYWNjX2lzX3By ZXNlbnQgKGIsIE4gKiBzaXplb2YgKGZsb2F0KSkpCisJYWJvcnQgKCk7CisjZW5kaWYKKworI3By YWdtYSBhY2MgZXhpdCBkYXRhIGRlbGV0ZSAoYlswOk5dKSBpZiAob25lID09IDApCisKKyNwcmFn bWEgYWNjIGVudGVyIGRhdGEgY29weWluIChiWzA6Tl0pIGlmIChvbmUgPT0gMSkKKworI2lmICFB Q0NfTUVNX1NIQVJFRAorICAgIGlmICghYWNjX2lzX3ByZXNlbnQgKGIsIE4gKiBzaXplb2YgKGZs b2F0KSkpCisJYWJvcnQgKCk7CisjZW5kaWYKKworI3ByYWdtYSBhY2MgZXhpdCBkYXRhIGRlbGV0 ZSAoYlswOk5dKSBpZiAob25lID09IDEpCisKKyNpZiAhQUNDX01FTV9TSEFSRUQKKyAgICBpZiAo YWNjX2lzX3ByZXNlbnQgKGIsIE4gKiBzaXplb2YgKGZsb2F0KSkpCisJYWJvcnQgKCk7CisjZW5k aWYKKworICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgICAgIGFbaV0gPSA0LjA7CisK KyNwcmFnbWEgYWNjIGtlcm5lbHMgY29weWluKGFbMDpOXSkgY29weW91dChiWzA6Tl0pIHNlbGYo MCkKKyAgICB7CisgICAgICAgIGludCBpaTsKKworICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBO OyBpaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYWNjX29uX2RldmljZSAoYWNjX2Rl dmljZV9ob3N0KSkKKyAgICAgICAgICAgICAgICBiW2lpXSA9IGFbaWldICsgMTsKKyAgICAgICAg ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiW2lpXSA9IGFbaWldOworICAgICAgICB9CisgICAg fQorCisjaWYgQUNDX01FTV9TSEFSRUQKKyAgICBleHAgPSA1LjA7CisjZWxzZQorICAgIGV4cCA9 IDQuMDsKKyNlbmRpZgorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAg ICAgIGlmIChiW2ldICE9IGV4cCkKKyAgICAgICAgICAgIGFib3J0KCk7CisgICAgfQorCisgICAg Zm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICAgICAgYVtpXSA9IDE2LjA7CisKKyNwcmFnbWEg YWNjIGtlcm5lbHMgc2VsZigxKQorICAgIHsKKyAgICAgICAgaW50IGlpOworCisgICAgICAgIGZv ciAoaWkgPSAwOyBpaSA8IE47IGlpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhY2Nf b25fZGV2aWNlIChhY2NfZGV2aWNlX2hvc3QpKQorICAgICAgICAgICAgICAgIGJbaWldID0gYVtp aV0gKyAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJbaWldID0gYVtpaV07 CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsK KyAgICAgICAgaWYgKGJbaV0gIT0gMTcuMCkKKyAgICAgICAgICAgIGFib3J0KCk7CisgICAgfQor CisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICAgICAgYVtpXSA9IDguMDsKKworI3By YWdtYSBhY2Mga2VybmVscyBjb3B5aW4oYVswOk5dKSBjb3B5b3V0KGJbMDpOXSkgc2VsZighb25l KQorICAgIHsKKyAgICAgICAgaW50IGlpOworCisgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IE47 IGlpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhY2Nfb25fZGV2aWNlIChhY2NfZGV2 aWNlX2hvc3QpKQorICAgICAgICAgICAgICAgIGJbaWldID0gYVtpaV0gKyAxOworICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgIGJbaWldID0gYVtpaV07CisgICAgICAgIH0KKyAgICB9 CisKKyNpZiBBQ0NfTUVNX1NIQVJFRAorICAgIGV4cCA9IDkuMDsKKyNlbHNlCisgICAgZXhwID0g OC4wOworI2VuZGlmCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAg ICAgaWYgKGJbaV0gIT0gZXhwKQorICAgICAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBm b3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgICAgICBhW2ldID0gMjIuMDsKKworI3ByYWdtYSBh Y2Mga2VybmVscyBzZWxmKCF6ZXJvKQorICAgIHsKKyAgICAgICAgaW50IGlpOworCisgICAgICAg IGZvciAoaWkgPSAwOyBpaSA8IE47IGlpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChh Y2Nfb25fZGV2aWNlIChhY2NfZGV2aWNlX2hvc3QpKQorICAgICAgICAgICAgICAgIGJbaWldID0g YVtpaV0gKyAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJbaWldID0gYVtp aV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAg IHsKKyAgICAgICAgaWYgKGJbaV0gIT0gMjMuMCkKKyAgICAgICAgICAgIGFib3J0KCk7CisgICAg fQorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICAgICAgYVtpXSA9IDE2LjA7CisK KyNwcmFnbWEgYWNjIGtlcm5lbHMgY29weWluKGFbMDpOXSkgY29weW91dChiWzA6Tl0pIHNlbGYo ZmFsc2UpCisgICAgeworICAgICAgICBpbnQgaWk7CisKKyAgICAgICAgZm9yIChpaSA9IDA7IGlp IDwgTjsgaWkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFjY19vbl9kZXZpY2UgKGFj Y19kZXZpY2VfaG9zdCkpCisgICAgICAgICAgICAgICAgYltpaV0gPSBhW2lpXSArIDE7CisgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYltpaV0gPSBhW2lpXTsKKyAgICAgICAgfQor ICAgIH0KKworI2lmIEFDQ19NRU1fU0hBUkVECisgICAgZXhwID0gMTcuMDsKKyNlbHNlCisgICAg ZXhwID0gMTYuMDsKKyNlbmRpZgorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICB7 CisgICAgICAgIGlmIChiW2ldICE9IGV4cCkKKyAgICAgICAgICAgIGFib3J0KCk7CisgICAgfQor CisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICAgICAgYVtpXSA9IDc2LjA7CisKKyNw cmFnbWEgYWNjIGtlcm5lbHMgc2VsZih0cnVlKQorICAgIHsKKyAgICAgICAgaW50IGlpOworCisg ICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IE47IGlpKyspCisgICAgICAgIHsKKyAgICAgICAgICAg IGlmIChhY2Nfb25fZGV2aWNlIChhY2NfZGV2aWNlX2hvc3QpKQorICAgICAgICAgICAgICAgIGJb aWldID0gYVtpaV0gKyAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJbaWld ID0gYVtpaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsr KQorICAgIHsKKyAgICAgICAgaWYgKGJbaV0gIT0gNzcuMCkKKyAgICAgICAgICAgIGFib3J0KCk7 CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKKyAgICAgICAgYVtpXSA9IDIy LjA7CisKKyAgICBuID0gMTsKKworI3ByYWdtYSBhY2Mga2VybmVscyBjb3B5aW4oYVswOk5dKSBj b3B5b3V0KGJbMDpOXSkgc2VsZighbikKKyAgICB7CisgICAgICAgIGludCBpaTsKKworICAgICAg ICBmb3IgKGlpID0gMDsgaWkgPCBOOyBpaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo YWNjX29uX2RldmljZSAoYWNjX2RldmljZV9ob3N0KSkKKyAgICAgICAgICAgICAgICBiW2lpXSA9 IGFbaWldICsgMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiW2lpXSA9IGFb aWldOworICAgICAgICB9CisgICAgfQorCisjaWYgQUNDX01FTV9TSEFSRUQKKyAgICBleHAgPSAy My4wOworI2Vsc2UKKyAgICBleHAgPSAyMi4wOworI2VuZGlmCisKKyAgICBmb3IgKGkgPSAwOyBp IDwgTjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGJbaV0gIT0gZXhwKQorICAgICAgICAgICAg YWJvcnQoKTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgICAgICBh W2ldID0gMTguMDsKKworICAgIG4gPSAwOworCisjcHJhZ21hIGFjYyBrZXJuZWxzIHNlbGYoIW4p CisgICAgeworICAgICAgICBpbnQgaWk7CisKKyAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgTjsg aWkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFjY19vbl9kZXZpY2UgKGFjY19kZXZp Y2VfaG9zdCkpCisgICAgICAgICAgICAgICAgYltpaV0gPSBhW2lpXSArIDE7CisgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgYltpaV0gPSBhW2lpXTsKKyAgICAgICAgfQorICAgIH0K KworICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgeworICAgICAgICBpZiAoYltpXSAh PSAxOS4wKQorICAgICAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBp IDwgTjsgaSsrKQorICAgICAgICBhW2ldID0gNDkuMDsKKworICAgIG4gPSAxOworCisjcHJhZ21h IGFjYyBrZXJuZWxzIGNvcHlpbihhWzA6Tl0pIGNvcHlvdXQoYlswOk5dKSBzZWxmKChuICsgbikg PT0gMCkKKyAgICB7CisgICAgICAgIGludCBpaTsKKworICAgICAgICBmb3IgKGlpID0gMDsgaWkg PCBOOyBpaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYWNjX29uX2RldmljZSAoYWNj X2RldmljZV9ob3N0KSkKKyAgICAgICAgICAgICAgICBiW2lpXSA9IGFbaWldICsgMTsKKyAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiW2lpXSA9IGFbaWldOworICAgICAgICB9Cisg ICAgfQorCisjaWYgQUNDX01FTV9TSEFSRUQKKyAgICBleHAgPSA1MC4wOworI2Vsc2UKKyAgICBl eHAgPSA0OS4wOworI2VuZGlmCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsK KyAgICAgICAgaWYgKGJbaV0gIT0gZXhwKQorICAgICAgICAgICAgYWJvcnQoKTsKKyAgICB9CisK KyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgICAgICBhW2ldID0gMzguMDsKKworICAg IG4gPSAwOworCisjcHJhZ21hIGFjYyBrZXJuZWxzIHNlbGYoIShuICsgbikpCisgICAgeworICAg ICAgICBpbnQgaWk7CisKKyAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgTjsgaWkrKykKKyAgICAg ICAgeworICAgICAgICAgICAgaWYgKGFjY19vbl9kZXZpY2UgKGFjY19kZXZpY2VfaG9zdCkpCisg ICAgICAgICAgICAgICAgYltpaV0gPSBhW2lpXSArIDE7CisgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgYltpaV0gPSBhW2lpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo aSA9IDA7IGkgPCBOOyBpKyspCisgICAgeworICAgICAgICBpZiAoYltpXSAhPSAzOS4wKQorICAg ICAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQor ICAgICAgICBhW2ldID0gOTEuMDsKKworI3ByYWdtYSBhY2Mga2VybmVscyBjb3B5aW4oYVswOk5d KSBjb3B5b3V0KGJbMDpOXSkgc2VsZighKC0yKSkKKyAgICB7CisgICAgICAgIGludCBpaTsKKwor ICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBOOyBpaSsrKQorICAgICAgICB7CisgICAgICAgICAg ICBpZiAoYWNjX29uX2RldmljZSAoYWNjX2RldmljZV9ob3N0KSkKKyAgICAgICAgICAgICAgICBi W2lpXSA9IGFbaWldICsgMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiW2lp XSA9IGFbaWldOworICAgICAgICB9CisgICAgfQorCisjaWYgQUNDX01FTV9TSEFSRUQKKyAgICBl eHAgPSA5Mi4wOworI2Vsc2UKKyAgICBleHAgPSA5MS4wOworI2VuZGlmCisKKyAgICBmb3IgKGkg PSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGJbaV0gIT0gZXhwKQorICAgICAg ICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAg ICAgICBhW2ldID0gNDMuMDsKKworI3ByYWdtYSBhY2Mga2VybmVscyBjb3B5aW4oYVswOk5dKSBj b3B5b3V0KGJbMDpOXSkgc2VsZihvbmUgIT0gMSkKKyAgICB7CisgICAgICAgIGludCBpaTsKKwor ICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBOOyBpaSsrKQorICAgICAgICB7CisgICAgICAgICAg ICBpZiAoYWNjX29uX2RldmljZSAoYWNjX2RldmljZV9ob3N0KSkKKyAgICAgICAgICAgICAgICBi W2lpXSA9IGFbaWldICsgMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiW2lp XSA9IGFbaWldOworICAgICAgICB9CisgICAgfQorCisjaWYgQUNDX01FTV9TSEFSRUQKKyAgICBl eHAgPSA0NC4wOworI2Vsc2UKKyAgICBleHAgPSA0My4wOworI2VuZGlmCisKKyAgICBmb3IgKGkg PSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGJbaV0gIT0gZXhwKQorICAgICAg ICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAg ICAgICBhW2ldID0gODcuMDsKKworI3ByYWdtYSBhY2Mga2VybmVscyBzZWxmKG9uZSAhPSAwKQor ICAgIHsKKyAgICAgICAgaW50IGlpOworCisgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IE47IGlp KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhY2Nfb25fZGV2aWNlIChhY2NfZGV2aWNl X2hvc3QpKQorICAgICAgICAgICAgICAgIGJbaWldID0gYVtpaV0gKyAxOworICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgIGJbaWldID0gYVtpaV07CisgICAgICAgIH0KKyAgICB9CisK KyAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGJbaV0gIT0g ODguMCkKKyAgICAgICAgICAgIGFib3J0KCk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8 IE47IGkrKykKKyAgICB7CisgICAgICAgIGFbaV0gPSAzLjA7CisgICAgICAgIGJbaV0gPSA5LjA7 CisgICAgfQorCisjaWYgQUNDX01FTV9TSEFSRUQKKyAgICBleHAgPSAwLjA7CisgICAgZXhwMiA9 IDAuMDsKKyNlbHNlCisgICAgYWNjX21hcF9kYXRhIChhLCBkX2EsIE4gKiBzaXplb2YgKGZsb2F0 KSk7CisgICAgYWNjX21hcF9kYXRhIChiLCBkX2IsIE4gKiBzaXplb2YgKGZsb2F0KSk7CisgICAg ZXhwID0gMy4wOworICAgIGV4cDIgPSA5LjA7CisjZW5kaWYKKworICAgIHJldHVybiAwOworfQot LSAKMi4yNy4wCgo= --------------H6QGrwHKvJIrbuxeY5ZfHosw--