From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail05.groups.io (mail05.groups.io [45.79.224.7]) by spool.mail.gandi.net (Postfix) with ESMTPS id 60887740039 for ; Wed, 29 May 2024 11:36:20 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=hHRwmoa368/DlGD4ahip1uQ3y6tVsgpSkHiTp9mDKrE=; c=relaxed/simple; d=groups.io; h=Received-SPF:From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:user-agent:Authentication-Results-Original:nodisclaimer:MIME-Version:Original-Authentication-Results:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-ID:Content-Transfer-Encoding; s=20240206; t=1716982580; v=1; b=ZWZUUEwZxwvU1p7UWV6ffx8U8JbSN3BQOZSATpq2ckJEgt3QAqiTqkf9QbVph4612GBCMCU/ +zpG6hCJPwGZr6QsfLPZnuAfsJ9yWzVQequLvRxVLHiNusmPsfqkmuPNEUwv731Ud5NykFy/pZK 2C0elJPQsDXb5qPwdIajwKZ+D3Oz3U23e2h1YLHPKbqZeH/8nDTx0ly7UHfCeyRjvIar26CyDrA Ii4dzPM0rfIMLVDiw494HkKf8W0TwOjo+byX7tWTJ0ygBHvye8SBN5awgUli8Qt6cDbhLfVFJXv QpmoWquqzCdpsBvXYvF6Qw3re2+tdWx9CutsZ4KNA6ywg== X-Received: by 127.0.0.2 with SMTP id pMy4YY7687511xqIpWiekHg9; Wed, 29 May 2024 04:36:18 -0700 X-Received: from EUR04-DB3-obe.outbound.protection.outlook.com (EUR04-DB3-obe.outbound.protection.outlook.com [40.107.6.51]) by mx.groups.io with SMTP id smtpd.web10.11595.1716982572595965876 for ; Wed, 29 May 2024 04:36:13 -0700 X-Received: from DU2P250CA0028.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:231::33) by PAXPR08MB6382.eurprd08.prod.outlook.com (2603:10a6:102:15b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7611.27; Wed, 29 May 2024 11:36:08 +0000 X-Received: from DB1PEPF000509FD.eurprd03.prod.outlook.com (2603:10a6:10:231:cafe::28) by DU2P250CA0028.outlook.office365.com (2603:10a6:10:231::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7633.18 via Frontend Transport; Wed, 29 May 2024 11:36:08 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C X-Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB1PEPF000509FD.mail.protection.outlook.com (10.167.242.39) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.7633.15 via Frontend Transport; Wed, 29 May 2024 11:36:06 +0000 X-Received: ("Tessian outbound 57d5075de207:v327"); Wed, 29 May 2024 11:36:06 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: a0fd4fa43ec4492e X-CR-MTA-TID: 64aa7808 X-Received: from 5a7442eb9780.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 32212804-C367-417C-BA30-6FB660253D63.1; Wed, 29 May 2024 11:36:00 +0000 X-Received: from EUR03-DBA-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 5a7442eb9780.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 29 May 2024 11:36:00 +0000 X-Received: from AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) by DB3PR08MB8793.eurprd08.prod.outlook.com (2603:10a6:10:429::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7611.30; Wed, 29 May 2024 11:35:57 +0000 X-Received: from AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::3935:6d9d:93a2:cbf3]) by AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::3935:6d9d:93a2:cbf3%4]) with mapi id 15.20.7611.030; Wed, 29 May 2024 11:35:57 +0000 From: "Sami Mujawar" To: Sahil Kaushal , "devel@edk2.groups.io" CC: Ard Biesheuvel , =?utf-8?B?TGVpZiBMaW5kaG9sbSDCoA==?= , nd Subject: Re: [edk2-devel] [edk2-platforms][PATCH V4 15/17] Platform/ARM: Add CadenceQspiNorFlashDeviceLib for NorFlashDxe Thread-Topic: [edk2-platforms][PATCH V4 15/17] Platform/ARM: Add CadenceQspiNorFlashDeviceLib for NorFlashDxe Thread-Index: AQHasaYRrcG5mCKcxUiJmknbZ3UBS7GuJjQA Date: Wed, 29 May 2024 11:35:56 +0000 Message-ID: References: <20240529085517.1074417-1-Sahil.Kaushal@arm.com> <20240529085517.1074417-16-Sahil.Kaushal@arm.com> In-Reply-To: <20240529085517.1074417-16-Sahil.Kaushal@arm.com> Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/16.85.24051214 Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: AS8PR08MB6806:EE_|DB3PR08MB8793:EE_|DB1PEPF000509FD:EE_|PAXPR08MB6382:EE_ X-MS-Office365-Filtering-Correlation-Id: 41ea0770-e23b-4dfb-bf48-08dc7fd38799 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230031|366007|376005|1800799015|38070700009; X-Microsoft-Antispam-Message-Info-Original: =?utf-8?B?Uk1DUXJMOGErMHlvLzJRMGJ2MUMyTS9ySjRZWDRiVU1pRlJvd0FqRHJCTTli?= =?utf-8?B?M0ZEZmI1SzQ4NGRnOWtXbS9JSFB4UjJTK1dqdVN0U1QraDlMNVdkZW5ZNXJ5?= =?utf-8?B?OURXK2VjZ2F3Y1VxMm5QcUg0ZVl6Q1RFRkd6QklpZmtUWVQ4cUxSZk4rZVV5?= =?utf-8?B?TFU0LzlrT3FRNGs2a1JUeTZwYTJDZ2IwY1cwYXhXTndDc2lmVklPS2ZSeko2?= =?utf-8?B?cW12UG1oNkhHMExGQllQaUUvQ2lWeHFjSHFMd0NBQTVINHBxVlM2Qmx5MzVP?= =?utf-8?B?a1ZTd2pWNG9vM2RGaWs3bC9sQmdtbkt1UEM3QlFYTHJHQzMvNWlCTUZBbXV5?= =?utf-8?B?WjBtd2Q0Z2FIQ216dTdtWWdmNVcxRVRxd005VHZJRW5QK1g2eVdIRkxRdFZT?= =?utf-8?B?ZXo3TjhiWEJUR1FRMGExUzlQNnFOelg1Wlp0OFVPT0NnY2o1SkxIUVYrQ1pp?= =?utf-8?B?Rkt4NTBPOU83RUNicXl2Y2Jzbkt3ZitYb3lWcThnRTZYalMwSHNXdXlIOTBL?= =?utf-8?B?MDZWTlpGZVd3UkNsTlo3ZURobFJPZk9KcktlYUN4clpaQ0l2TjUwMlMwcUhl?= =?utf-8?B?V0RZcTYrN1Y2eGVGSm9ta1hkdWRDK2tQYnBpeTZTcUxYMXRZOXh1ZWJvaGpa?= =?utf-8?B?Q1Nib3VQTi94UFhYaXVoQXc2ckxvbGdMUkM2UEtYMTUxWjk2TVV0MEhTbzhr?= =?utf-8?B?SzMwWnpDc0tmN25nSFptc2NlNFhIbndPUXF5VUZKT1krOFJPNzBTTE5pblZW?= =?utf-8?B?UG1lTnZEVXNqNjdOdTZIMFdZVHpWcDBMMURZSFo0OE1DYkU2ZmFEcWxVTytZ?= =?utf-8?B?cEF4N1hWcTI2clJ4WURjblpzQ1JUZWltZmlwanJwY0YrQmcxQ042bnNCWTZ5?= =?utf-8?B?T1ZWQTRwMm9wL3BranQ1ZlU5MWd1UVJGZ01BbUt2aER0N0VvaFd0R0w3b0Rx?= =?utf-8?B?Mmd3Zm5pUWxZaU5aeWRNODNrQitaSDcvOTdaZ1lYREhhd25HbjljOVl3SWZt?= =?utf-8?B?Rk1PN0dDRGFhbmd1VVgwYjhPQk4xU2pTRTFkQStLRG4xdGpPR1E3cWFJd216?= =?utf-8?B?eTk5S2dkSHBSbUE4c0VwYnJib2tFd2E3L1N2bDRzYlV0NUNrZXB2NExnbTRB?= =?utf-8?B?TGV0Y0hNcUlXUkh5c2FsOUliU2RVQ1A3WE9OS21Bd2xGVngvdkdxUVlhVEJZ?= =?utf-8?B?Y1RBbGtRNTB4TW9IN2h4b3RsWHAzbUNrelBiRXdydTRPV004WXRLa0l0bmRJ?= =?utf-8?B?TUpaSzN1ZS9EejJRRWQrSDYxKzhMNXljOHZ6eWZ6MWNXSXhNdkVIWmpTdktT?= =?utf-8?B?RnNYUzJrcXczZXRVeFZ4c3Y2a0ZwUmhpaDNoVkJ1WWpOM3ltWlFLc2t0Yy9l?= =?utf-8?B?TkJiQWcrY3RqMEpNNndDMG5XaE5NSWFVYitRRGNxc29ON0NCRnl2dWRYWmht?= =?utf-8?B?WWtJZjRaem5jelB3N0tVRW9aSW9tUEIzZlZYNCtXUHh2YVh4K0JZMUhjMUVI?= =?utf-8?B?Z3dMU2xFMXhMQ0s5Q25Ua010L2UzNVJLQ1Y3ZnpwNlRPVG02dHh5TlZrKzZY?= =?utf-8?B?cWtBakoxVHNIb3E0TFRGdWJNSHdVZjhiendhTEhkZlRLOUlXRGFQN1RJNTlu?= =?utf-8?B?NW51Yk16QlIySU1LOFVMSVVGM1pLWFhUNmlITmtBKzk5VHRIdGRIcllSdGdy?= =?utf-8?B?Rm5tV1p0TUxjdzJpNW5EY0QyNG9HMExYWStHVG9OYVR3NmxDQ1dYbTI1V1NB?= =?utf-8?B?MGU1NWNSU2Z2ZURLRmpreXlYeHpjanQ5eDJqTEw0V000dzNuZXBzMEtQRDRD?= =?utf-8?B?MmVqUi9XeWlaT0hFZVZFdz09?= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6806.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366007)(376005)(1800799015)(38070700009);DIR:OUT;SFP:1101; MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR08MB8793 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB1PEPF000509FD.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 465da07e-d863-4f9f-c481-08dc7fd381bc X-Microsoft-Antispam-Message-Info: =?utf-8?B?b01PNzV0QzNpNSt0cWg2MTh5WXYxN2c3dnM2YzEwYXhKNHJmZlhDYWs0M09N?= =?utf-8?B?a3ZQOXd6SzBueGdRbWhXNjVsbTJyMkhsZGVSV1VXR3Jnd2hDSDN2RUYxUWk4?= =?utf-8?B?eWVXMjRTWElXSXVFRy9yYzl3OFMrSDBGRmVzNzFZRC9zV25OUGh1a3VLSStM?= =?utf-8?B?S1FXODU5WWRtVmRNSDF0K1VmaVN6NzlkbENOaWRLVFZSbk85eHk1VkdZMDBv?= =?utf-8?B?VW51bjljWGJnZ2F6Zk9jWU1GNC92cjc0SU5ic2pJVjhXZyt0c0tNUThGcVJ2?= =?utf-8?B?dmVLSjAyNXlVRWNzakkwRm5Ma2VCNWw2MENvUmVLNk5WUEUrL3dkaWdUN216?= =?utf-8?B?UzZZNUtNbmhHSUZ2MHdXNHdrTTg5NlNwNzNISk40WHBBeFpLdU0vcFVndXNp?= =?utf-8?B?MW92MkRvd2FlT1J5WXlnbDM2cXBrR0s5TEQ0WWQ0TDdtaVpWa3QxVkJUbkJ3?= =?utf-8?B?bEJtNGFLQllCZ1cyckhWNDJQaTl5S09SMTRZLy9qUm1zZUZPZGFIa0N0MWFw?= =?utf-8?B?a1BrMjVjcXZtVmJtUVhxdzI1MXI5TXhZb01JaFJVb25RQnRrNjZ1Y2hyTm9C?= =?utf-8?B?cTVpNGp6ZEJmdG92NDdGZjNncjRWWjRSNm8vd2RFTUFLbFdSMjgraS9McEky?= =?utf-8?B?ejg1ZlNEdm14M2Y0Z25DMzVPUkVoeWF3R1J0WDJKNitQaFRhYzlkVnNxWjBR?= =?utf-8?B?S0VJdnZXZlM5ZVhYZXZOOEU1QVZvM0t3ZVA3Mk55Y0dpRzJ6aytzRitWaTV6?= =?utf-8?B?WG4yanFrWnRkam9OcTN5VW81M0FKb1plbC84MDljVXRidEQ0VmR3VmVyY2x1?= =?utf-8?B?OU5nSUxrRHY0VHJyK0ZwNmovRWVPdGFFZE5zdEdING8xekczMjRWR3U5czFR?= =?utf-8?B?WFNqMVJaazFIRTV1TmNqSVR4SkJlTDlRQ2IvbGMzSTgwZVBmWERFZnIwL0tq?= =?utf-8?B?SnpDYkFPb2ZxTnN4MzlGeDlhVGxSTml6YkRoTG5na01iR2JjRWFQN3o2SzRN?= =?utf-8?B?RW9jdGxGK3J1TWh6b3FwdmtDSmZ4Unp2cjhiZ09zRlJuRWFzdENoUkM2TGNI?= =?utf-8?B?MWR5M2J4VEdpdHlUMEE1MzczL0ZBcEt0QjFjQVBBYnhMZFV4a3FtRjl0eEhv?= =?utf-8?B?OGNidjBSWXRWRmwzaGxPU0VUZnRId3ZLV0pqVmhWVlBuYXBuTVRuZ0VZODM4?= =?utf-8?B?TFRXbXJRWlhCdDRuYlF0bGRQUmo1UXlCUmhOU1dTb3R2Q2hKN0JzWFdQdm1N?= =?utf-8?B?VHYrWENhcXNmMU1nUXdsZ1I1WHVjZGxTa1ZaZVI4WUltZEZuMkhaZE91RDhH?= =?utf-8?B?KzU3d3lrVVR6K3k1Z0lCTjdIZG1RVGd3dDFlcmlvcGdEUUJHOHI1NWUvVVJZ?= =?utf-8?B?Ymw1TUVqNVJ2L0VRMGVLRXdaRTRvMXg4d29KVExyN0Fod0p1bWNrS0hKZHJQ?= =?utf-8?B?ODQ3QzJMc3oyckttS0puZ3p0bmFrYURJWk5MMDlxSGoxZmFLUWFhR1dIM1dW?= =?utf-8?B?VVNpU3k2bVZlNVMzSGwyMi91WHRhaHFtUG1Cb0RDWDJJeVVmY2tCZ2NwblB4?= =?utf-8?B?UHNXYStYUitabWlmazBub2w2eUp1dEh6TUUzc2VRcEExc2p2ZFNVLzBOS01z?= =?utf-8?B?c28wbjVucGxiWHhpSXhRcEhFR3JDb0pxYU12by93eU93dEtpS1JiZUVobVFz?= =?utf-8?B?VjlTclk1MU4rbjZESlM1Zk9uZTBvS242UmdxY3RjQ2xidDdoTTNYWURtT0RK?= =?utf-8?B?LzF6c2s3ZXJhaTE1dVpGNGlvaXdURFo5ZTJhRUg2SGFLaEl4OENRTDNXMWcv?= =?utf-8?B?UThhWHd6d3NMQjNNbmRMZk9NNWsvOTVoWlpGd2RHMEE1bERKYmxXWGFrYzA3?= =?utf-8?Q?NOPZUbKuZnQMF?= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2024 11:36:06.9438 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 41ea0770-e23b-4dfb-bf48-08dc7fd38799 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF000509FD.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6382 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Wed, 29 May 2024 04:36:13 -0700 Resent-From: sami.mujawar@arm.com Reply-To: devel@edk2.groups.io,sami.mujawar@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: FiPYyiVZndZukHHhZV7lTiLfx7686176AA= Content-Language: en-GB Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=ZWZUUEwZ; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=arm.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.224.7 as permitted sender) smtp.mailfrom=bounce@groups.io SGkgU2FoaWwsDQoNClBsZWFzZSBmaW5kIG15IGZlZWRiYWNrIGlubGluZSBtYXJrZWQgW1NBTUld Lg0KDQpSZWdhcmRzLA0KDQpTYW1pIE11amF3YXINCg0K77u/T24gMjkvMDUvMjAyNCwgMDk6NTYs ICJTYWhpbCBLYXVzaGFsIiA8U2FoaWwuS2F1c2hhbEBhcm0uY29tIDxtYWlsdG86U2FoaWwuS2F1 c2hhbEBhcm0uY29tPj4gd3JvdGU6DQoNCg0KRnJvbTogc2FoaWwgPHNhaGlsQGFybS5jb20gPG1h aWx0bzpzYWhpbEBhcm0uY29tPj4NCg0KDQpJbiBOMVNkcCBwbGF0Zm9ybSwgdGhlIFNvQyBpcyBj b25uZWN0ZWQgdG8gSU9GUEdBIHdoaWNoIGhhcyBhDQpDYWRlbmNlIFF1YWQgU1BJIChRU1BJKSBj b250cm9sbGVyLiBUaGlzIFFTUEkgY29udHJvbGxlciBtYW5hZ2VzDQp0aGUgZmxhc2ggY2hpcCBk ZXZpY2UgdmlhIFFTUEkgYnVzLg0KDQoNClRoaXMgcGF0Y2ggYWRkcyBDYWRlbmNlUXNwaU5vckZs YXNoRGV2aWNlTGliIHdoaWNoIGlzIHVzZWQgdG8NCm1hbmFnZSBhbmQgYWNjZXNzIHRoZSBhYm92 ZSBjb25maWd1cmF0aW9uLg0KDQoNClNpZ25lZC1vZmYtYnk6IHNhaGlsIDxzYWhpbEBhcm0uY29t IDxtYWlsdG86c2FoaWxAYXJtLmNvbT4+DQotLS0NClBsYXRmb3JtL0FSTS9MaWJyYXJ5L0NhZGVu Y2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi5pbmYg fCAzMiArDQpQbGF0Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGli L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuaCB8IDQ2ICsNClBsYXRmb3JtL0FSTS9MaWJy YXJ5L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmlj ZUxpYi5jIHwgMTAzNCArKysrKysrKysrKysrKysrKysrKw0KMyBmaWxlcyBjaGFuZ2VkLCAxMTEy IGluc2VydGlvbnMoKykNCg0KDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2Fk ZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmlu ZiBiL1BsYXRmb3JtL0FSTS9MaWJyYXJ5L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIvQ2Fk ZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi5pbmYNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwMDAwMDAuLjUwNjg3NmI2MjI4NQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvUGxhdGZv cm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5v ckZsYXNoRGV2aWNlTGliLmluZg0KQEAgLTAsMCArMSwzMiBAQA0KKyMvKiogQGZpbGUNCisjDQor IyBDb21wb25lbnQgZGVzY3JpcHRpb24gZmlsZSBmb3IgQ2FkZW5jZVFzcGlOb3JGbGFzaERldmlj ZUxpYiBMaWJyYXJ5DQorIw0KKyMgQ29weXJpZ2h0IChjKSAyMDI0LCBBcm0gTGltaXRlZC4gQWxs IHJpZ2h0cyByZXNlcnZlZC48QlI+DQorIw0KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT RC0yLUNsYXVzZS1QYXRlbnQNCisjDQorIyoqLw0KKw0KK1tEZWZpbmVzXQ0KKyBJTkZfVkVSU0lP TiA9IDB4MDAwMTAwMDUNCisgQkFTRV9OQU1FID0gQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxp Yg0KKyBGSUxFX0dVSUQgPSBlZDE3MjM2Ni0wNjZiLTQ5OTgtOWI1ZS1jYTdmMzg1YTE3MGINCisg TU9EVUxFX1RZUEUgPSBEWEVfUlVOVElNRV9EUklWRVINCisgVkVSU0lPTl9TVFJJTkcgPSAxLjAN CisgTElCUkFSWV9DTEFTUyA9IE5vckZsYXNoRGV2aWNlTGliDQorDQorW1NvdXJjZXMuY29tbW9u XQ0KKyBDYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmMNCisgQ2FkZW5jZVFzcGlOb3JGbGFz aERldmljZUxpYi5oDQorDQorW1BhY2thZ2VzXQ0KKyBNZGVQa2cvTWRlUGtnLmRlYw0KKyBQbGF0 Zm9ybS9BUk0vQVJNLmRlYw0KKw0KK1tMaWJyYXJ5Q2xhc3Nlc10NCisgQmFzZUxpYg0KKyBCYXNl TWVtb3J5TGliDQorIERlYnVnTGliDQorIElvTGliDQorIFRpbWVyTGliDQpkaWZmIC0tZ2l0IGEv UGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNl UXNwaU5vckZsYXNoRGV2aWNlTGliLmggYi9QbGF0Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNw aU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuaA0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uOTUxYTkzNDgxZGQxDQotLS0gL2Rl di9udWxsDQorKysgYi9QbGF0Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2 aWNlTGliL0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuaA0KQEAgLTAsMCArMSw0NiBAQA0K Ky8qKiBAZmlsZQ0KKw0KKyBDb3B5cmlnaHQgKGMpIDIwMjQsIEFSTSBMaW1pdGVkLiBBbGwgcmln aHRzIHJlc2VydmVkLjxCUj4NCisNCisgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNs YXVzZS1QYXRlbnQNCisNCisqKi8NCisNCisjaWZuZGVmIENBREVOQ0VfUVNQSV9OT1JfRkxBU0hf REVWSUNFX0xJQl9IXw0KKyNkZWZpbmUgQ0FERU5DRV9RU1BJX05PUl9GTEFTSF9ERVZJQ0VfTElC X0hfDQorDQorI2RlZmluZSBOT1JfRkxBU0hfRVJBU0VfUkVUUlkgMTANCisNCisvLyBRU1BJIENv bnRyb2xsZXIgZGVmaW5lcw0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19P RkZTRVQgMHg5MA0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19FWEVDVVRF IDB4MDENCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfQUREUl9FTkFCTEUg MHgwMQ0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19BRERSX0JJVF9QT1Mg MTkNCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfQUREUl9CWVRFX0JJVF9Q T1MgMTYNCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfU1RBVFVTX0JJVCAw eDAyDQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX09QQ09ERV9CSVRfUE9T IDI0DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX1JFQURfRU5BQkxFIDB4 MDENCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfUkVBRF9CWVRFXzNCIDB4 MDINCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfUkVBREVOX0JJVF9QT1Mg MjMNCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfUkVBREJZVEVfQklUX1BP UyAyMA0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19EVU1NWV84QyAweDgN CisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfRFVNTVlfQklUX1BPUyA3DQor I2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX05VTV9EQVRBX0JZVEVTKHgpICgo eCAtIDEpIDw8IENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfUkVBREJZVEVfQklUX1BPUykN CisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfTlVNX0FERFJfQllURVMoeCkg KCh4IC0gMSkgPDwgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19BRERSX0JZVEVfQklUX1BP UykNCisNCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfUkVBRF9EQVRBX1JFR19PRkZTRVQg MHhBMA0KKw0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9BRERSX1JFR19PRkZTRVQgMHg5 NA0KKw0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9TVEFUVVNfUE9MTF9USU1FT1VUX01T IDEwMDB1IC8vIENvbW1hbmQgU3RhdHVzIFJlZ2lzdGVyIHJlYWQgdGltZW91dA0KKw0KKyNkZWZp bmUgU1BJTk9SX1NSX1dJUCBCSVQwIC8vIFdyaXRlIGluIHByb2dyZXNzDQorDQorI2RlZmluZSBT UElOT1JfT1BfV1JFTiAweDA2IC8vIFdyaXRlIGVuYWJsZQ0KKyNkZWZpbmUgU1BJTk9SX09QX0JF XzRLIDB4MjAgLy8gRXJhc2UgNEtpQiBibG9jaw0KKyNkZWZpbmUgU1BJTk9SX09QX1JESUQgMHg5 ZiAvLyBSZWFkIEpFREVDIElEDQorI2RlZmluZSBTUElOT1JfT1BfUkRTUiAweDA1IC8vIFJlYWQg c3RhdHVzIHJlZ2lzdGVyDQorDQorI2RlZmluZSBTUElOT1JfU1JfV0lQX1BPTExfVElNRU9VVF9N UyAxMDAwdSAvLyBTdGF0dXMgUmVnaXN0ZXIgcmVhZCB0aW1lb3V0DQorDQorI2VuZGlmIC8qIENB REVOQ0VfUVNQSV9OT1JfRkxBU0hfREVWSUNFX0xJQl9IXyAqLw0KZGlmZiAtLWdpdCBhL1BsYXRm b3JtL0FSTS9MaWJyYXJ5L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIvQ2FkZW5jZVFzcGlO b3JGbGFzaERldmljZUxpYi5jIGIvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlOb3JG bGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmMNCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmY5N2M4ZDUxZmQ0OA0KLS0tIC9kZXYvbnVs bA0KKysrIGIvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxp Yi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmMNCkBAIC0wLDAgKzEsMTAzNCBAQA0KKy8q KiBAZmlsZQ0KKw0KKyBDb3B5cmlnaHQgKGMpIDIwMjQgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KKw0KKyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNl LVBhdGVudA0KKw0KKyoqLw0KKw0KKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4N CisjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0lvTGli Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KKyNpbmNsdWRl IDxMaWJyYXJ5L05vckZsYXNoRGV2aWNlTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvVGltZXJM aWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQorDQorI2luY2x1ZGUgIkNhZGVu Y2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuaCINCisNCisvKioNCisgQ29udmVydHMgbWlsbGlzZWNv bmRzIGludG8gbnVtYmVyIG9mIHRpY2tzIG9mIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyLg0KKw0K KyBAcGFyYW1baW5dIE1pbGxpc2Vjb25kcyBNaWxsaXNlY29uZHMgdG8gY29udmVydCBpbnRvIHRp Y2tzLg0KKw0KKyBAcmV0dmFsIE1pbGxpc2Vjb25kcyBleHByZXNzZWQgYXMgbnVtYmVyIG9mIHRp Y2tzLg0KKw0KKyoqLw0KK1NUQVRJQw0KK1VJTlQ2NA0KK01pbGxpU2Vjb25kc1RvVGlja3MgKA0K KyBJTiBVSU5UTiBNaWxsaXNlY29uZHMNCisgKQ0KK3sNCisgVUlOVDY0IE5hbm9TZWNvbmRzUGVy VGljazsNCisgVUlOVDY0IE5hbm9TZWNvbmRzOw0KKw0KKyBOYW5vU2Vjb25kc1BlclRpY2sgPSBH ZXRUaW1lSW5OYW5vU2Vjb25kICgxKTsNCisgTmFub1NlY29uZHMgPSBNdWx0VTY0eDMyIChNaWxs aXNlY29uZHMsIDEwMDAwMDApOw0KKw0KKyByZXR1cm4gRGl2VTY0eDY0UmVtYWluZGVyIChOYW5v U2Vjb25kcywgTmFub1NlY29uZHNQZXJUaWNrLCBOVUxMKTsNCit9DQorDQorLyoqDQorIEV4ZWN1 dGUgRmxhc2ggY21kIGN0cmwgYW5kIFJlYWQgU3RhdHVzLg0KKw0KKyBAcGFyYW1baW5dIEluc3Rh bmNlIE5PUiBmbGFzaCBJbnN0YW5jZS4NCisgQHBhcmFtW2luXSBWYWwgVmFsdWUgdG8gYmUgd3Jp dHRlbiB0byBGbGFzaCBjbWQgY3RybCBSZWdpc3Rlci4NCisNCisgQHJldHZhbCBFRklfU1VDQ0VT UyBSZXF1ZXN0IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisgQHJldHZhbCBFRklfVElNRU9V VCBDb21tYW5kIGV4ZWN1dGlvbiB0aW1lZCBvdXQuDQorDQorKiovDQorU1RBVElDDQorRUZJX1NU QVRVUw0KK0NkbnNRc3BpRXhlY3V0ZUNvbW1hbmQgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0Ug Kkluc3RhbmNlLA0KKyBJTiBVSU5UMzIgVmFsDQorICkNCit7DQorIC8vIFNldCB0aGUgY29tbWFu ZA0KKyBNbWlvV3JpdGUzMiAoDQorIEluc3RhbmNlLT5Ib3N0Q29udHJvbGxlckJhc2VBZGRyZXNz ICsgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19PRkZTRVQsDQorIFZhbA0KKyApOw0KKyAv LyBFeGVjdXRlIHRoZSBjb21tYW5kDQorIE1taW9Xcml0ZTMyICgNCisgSW5zdGFuY2UtPkhvc3RD b250cm9sbGVyQmFzZUFkZHJlc3MgKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX09GRlNF VCwNCisgVmFsIHwgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19FWEVDVVRFDQorICk7DQor DQorIENPTlNUIFVJTlQ2NCBUaWNrT3V0ID0NCisgR2V0UGVyZm9ybWFuY2VDb3VudGVyICgpICsN CisgTWlsbGlTZWNvbmRzVG9UaWNrcyAoQ0ROU19RU1BJX0ZMQVNIX0NNRF9TVEFUVVNfUE9MTF9U SU1FT1VUX01TKTsNCisNCisgLy8gV2FpdCB1bnRpbCBjb21tYW5kIGhhcyBiZWVuIGV4ZWN1dGVk DQorIGRvIHsNCisgaWYgKEdldFBlcmZvcm1hbmNlQ291bnRlciAoKSA+IFRpY2tPdXQpIHsNCisg REVCVUcgKCgNCisgREVCVUdfRVJST1IsDQorICJDZG5zUXNwaUV4ZWN1dGVDb21tYW5kOiBUaW1l b3V0IHdhaXRpbmcgZm9yIGNvbW1hbmQgZXhlY3V0aW9uLlxuIg0KKyApKTsNCisgcmV0dXJuIEVG SV9USU1FT1VUOw0KKyB9DQorIH0gd2hpbGUgKChNbWlvUmVhZDMyICgNCisgSW5zdGFuY2UtPkhv c3RDb250cm9sbGVyQmFzZUFkZHJlc3MgKw0KKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVH X09GRlNFVA0KKyApICYNCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19TVEFUVVNfQklU KSA9PQ0KKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX1NUQVRVU19CSVQNCisgKTsNCisN CisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisgUG9sbCBTdGF0dXMgcmVnaXN0 ZXIgZm9yIE5PUiBmbGFzaCBlcmFzZS93cml0ZSBjb21wbGV0aW9uLg0KKw0KKyBAcGFyYW1baW5d IEluc3RhbmNlIE5PUiBmbGFzaCBJbnN0YW5jZS4NCisNCisgQHJldHZhbCBFRklfU1VDQ0VTUyBS ZXF1ZXN0IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCisgQHJldHZhbCBFRklfVElNRU9VVCBP cGVyYXRpb24gdGltZWQgb3V0Lg0KKyBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgQ29udHJvbGxl ciBvcGVyYXRpb24gZmFpbGVkLg0KKw0KKyoqLw0KK1NUQVRJQw0KK0VGSV9TVEFUVVMNCitOb3JG bGFzaFBvbGxTdGF0dXNSZWdpc3RlciAoDQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5zdGFu Y2UNCisgKQ0KK3sNCisgQk9PTEVBTiBTUmVnRG9uZTsNCisgVUlOVDMyIHZhbDsNCisNCisgdmFs ID0gKFNQSU5PUl9PUF9SRFNSIDw8IENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfT1BDT0RF X0JJVF9QT1MpIHwNCisgKENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfUkVBRF9FTkFCTEUg PDwNCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19SRUFERU5fQklUX1BPUykgfA0KKyBD RE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX05VTV9EQVRBX0JZVEVTICgxKSB8DQorIChDRE5T X1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX0RVTU1ZXzhDIDw8DQorIENETlNfUVNQSV9GTEFTSF9D TURfQ1RSTF9SRUdfRFVNTVlfQklUX1BPUyk7DQorDQorIENPTlNUIFVJTlQ2NCBUaWNrT3V0ID0N CisgR2V0UGVyZm9ybWFuY2VDb3VudGVyICgpICsNCisgTWlsbGlTZWNvbmRzVG9UaWNrcyAoU1BJ Tk9SX1NSX1dJUF9QT0xMX1RJTUVPVVRfTVMpOw0KKw0KKyBkbyB7DQorIGlmIChHZXRQZXJmb3Jt YW5jZUNvdW50ZXIgKCkgPiBUaWNrT3V0KSB7DQorIERFQlVHICgoDQorIERFQlVHX0VSUk9SLA0K KyAiTm9yRmxhc2hQb2xsU3RhdHVzUmVnaXN0ZXI6IFRpbWVvdXQgd2FpdGluZyBmb3IgZXJhc2Uv d3JpdGUuXG4iDQorICkpOw0KKyByZXR1cm4gRUZJX1RJTUVPVVQ7DQorIH0NCisNCisgaWYgKEVG SV9FUlJPUiAoQ2Ruc1FzcGlFeGVjdXRlQ29tbWFuZCAoSW5zdGFuY2UsIHZhbCkpKSB7DQorIHJl dHVybiBFRklfREVWSUNFX0VSUk9SOw0KKyB9DQorDQorIFNSZWdEb25lID0NCisgKE1taW9SZWFk OCAoDQorIEluc3RhbmNlLT5Ib3N0Q29udHJvbGxlckJhc2VBZGRyZXNzICsNCisgQ0ROU19RU1BJ X0ZMQVNIX0NNRF9SRUFEX0RBVEFfUkVHX09GRlNFVA0KKyApDQorICYgU1BJTk9SX1NSX1dJUA0K KyApID09IDA7DQorIH0gd2hpbGUgKCFTUmVnRG9uZSk7DQorDQorIHJldHVybiBFRklfU1VDQ0VT UzsNCit9DQorDQorLyoqDQorIENoZWNrIHdoZXRoZXIgTk9SIGZsYXNoIG9wZXJhdGlvbnMgYXJl IExvY2tlZC4NCisNCisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2UuDQor IEBwYXJhbVtpbl0gQmxvY2tBZGRyZXNzIEJsb2NrQWRkcmVzcyBpbiBOT1IgZmxhc2ggZGV2aWNl Lg0KKw0KKyBAcmV0dmFsIEZBTFNFIElmIE5PUiBmbGFzaCBpcyBub3QgbG9ja2VkLg0KKyoqLw0K K1NUQVRJQw0KK0JPT0xFQU4NCitOb3JGbGFzaEJsb2NrSXNMb2NrZWQgKA0KKyBJTiBOT1JfRkxB U0hfSU5TVEFOQ0UgKkluc3RhbmNlLA0KKyBJTiBVSU5UTiBCbG9ja0FkZHJlc3MNCisgKQ0KK3sN CisgcmV0dXJuIEZBTFNFOw0KK30NCisNCisvKioNCisgVW5sb2NrIE5PUiBmbGFzaCBvcGVyYXRp b25zIG9uIGdpdmVuIGJsb2NrLg0KKw0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBp bnN0YW5jZS4NCisgQHBhcmFtW2luXSBCbG9ja0FkZHJlc3MgQmxvY2tBZGRyZXNzIGluIE5PUiBm bGFzaCBkZXZpY2UuDQorDQorIEByZXR2YWwgRUZJX1NVQ0NFU1MgTk9SIGZsYXNoIG9wZXJhdGlv bnMgdW5sb2NrZWQuDQorKiovDQorRUZJX1NUQVRVUw0KK05vckZsYXNoVW5sb2NrU2luZ2xlQmxv Y2sgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLA0KKyBJTiBVSU5UTiBCbG9j a0FkZHJlc3MNCisgKQ0KK3sNCisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisg VW5sb2NrIE5PUiBmbGFzaCBvcGVyYXRpb25zIGlmIGl0IGlzIG5lY2Vzc2FyeS4NCisNCisgQHBh cmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggaW5zdGFuY2UuDQorIEBwYXJhbVtpbl0gQmxvY2tB ZGRyZXNzIEJsb2NrQWRkcmVzcyBpbiBOT1IgZmxhc2ggZGV2aWNlLg0KKw0KKyBAcmV0dmFsIEVG SV9TVUNDRVNTIFJlcXVlc3QgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyoqLw0KK0VGSV9T VEFUVVMNCitOb3JGbGFzaFVubG9ja1NpbmdsZUJsb2NrSWZOZWNlc3NhcnkgKA0KKyBJTiBOT1Jf RkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLA0KKyBJTiBVSU5UTiBCbG9ja0FkZHJlc3MNCisgKQ0K K3sNCisgRUZJX1NUQVRVUyBTdGF0dXM7DQorDQorIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KKw0K KyBpZiAoIU5vckZsYXNoQmxvY2tJc0xvY2tlZCAoSW5zdGFuY2UsIEJsb2NrQWRkcmVzcykpIHsN CisgU3RhdHVzID0gTm9yRmxhc2hVbmxvY2tTaW5nbGVCbG9jayAoSW5zdGFuY2UsIEJsb2NrQWRk cmVzcyk7DQorIH0NCisNCisgcmV0dXJuIFN0YXR1czsNCit9DQorDQorLyoqDQorIEVuYWJsZSB3 cml0ZSB0byBOT1IgZmxhc2ggZGV2aWNlLg0KKw0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBm bGFzaCBpbnN0YW5jZS4NCisNCisgQHJldHZhbCBFRklfU1VDQ0VTUyBSZXF1ZXN0IGlzIGV4ZWN1 dGVkIHN1Y2Nlc3NmdWxseS4NCisgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SIFRoZSBkZXZpY2Ug cmVwb3J0ZWQgYW4gZXJyb3IuDQorKiovDQorU1RBVElDDQorRUZJX1NUQVRVUw0KK05vckZsYXNo RW5hYmxlV3JpdGUgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlDQorICkNCit7 DQorIFVJTlQzMiB2YWw7DQorDQorIERFQlVHICgoREVCVUdfSU5GTywgIk5vckZsYXNoRW5hYmxl V3JpdGUoKVxuIikpOw0KKyB2YWwgPSAoU1BJTk9SX09QX1dSRU4gPDwgQ0ROU19RU1BJX0ZMQVNI X0NNRF9DVFJMX1JFR19PUENPREVfQklUX1BPUyk7DQorIGlmIChFRklfRVJST1IgKENkbnNRc3Bp RXhlY3V0ZUNvbW1hbmQgKEluc3RhbmNlLCB2YWwpKSkgew0KKyByZXR1cm4gRUZJX0RFVklDRV9F UlJPUjsNCisgfQ0KKw0KKyByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0KKy8qKg0KKyBUaGUg Zm9sbG93aW5nIGZ1bmN0aW9uIHByZXN1bWVzIHRoYXQgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJl ZW4gdW5sb2NrZWQuDQorDQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIGluc3RhbmNl Lg0KKyBAcGFyYW1baW5dIEJsb2NrQWRkcmVzcyBCbG9jayBhZGRyZXNzIHdpdGhpbiB0aGUgdmFy aWFibGUgcmVnaW9uLg0KKw0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFJlcXVlc3QgaXMgZXhlY3V0 ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgVGhlIGRldmljZSBy ZXBvcnRlZCBhbiBlcnJvci4NCisgKiovDQorRUZJX1NUQVRVUw0KK05vckZsYXNoRXJhc2VTaW5n bGVCbG9jayAoDQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5zdGFuY2UsDQorIElOIFVJTlRO IEJsb2NrQWRkcmVzcw0KKyApDQorew0KKyBVSU5UMzIgRGV2Q29uZmlnVmFsOw0KKyBVSU5UMzIg RXJhc2VPZmZzZXQ7DQorDQorIEVyYXNlT2Zmc2V0ID0gMHgwOw0KKw0KKyBERUJVRyAoKA0KKyBE RUJVR19JTkZPLA0KKyAiTm9yRmxhc2hFcmFzZVNpbmdsZUJsb2NrKEJsb2NrQWRkcmVzcz0weCUw OHgpXG4iLA0KKyBCbG9ja0FkZHJlc3MNCisgKSk7DQorDQorIGlmIChFRklfRVJST1IgKE5vckZs YXNoRW5hYmxlV3JpdGUgKEluc3RhbmNlKSkpIHsNCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7 DQorIH0NCisNCisgRXJhc2VPZmZzZXQgPSBCbG9ja0FkZHJlc3MgLSBJbnN0YW5jZS0+RGV2aWNl QmFzZUFkZHJlc3M7DQorDQorIE1taW9Xcml0ZTMyICgNCisgSW5zdGFuY2UtPkhvc3RDb250cm9s bGVyQmFzZUFkZHJlc3MgKyBDRE5TX1FTUElfRkxBU0hfQ01EX0FERFJfUkVHX09GRlNFVCwNCisg RXJhc2VPZmZzZXQNCisgKTsNCisNCisgRGV2Q29uZmlnVmFsID0gKFNQSU5PUl9PUF9CRV80SyA8 PCBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX09QQ09ERV9CSVRfUE9TKSB8DQorIChDRE5T X1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX0FERFJfRU5BQkxFIDw8DQorIENETlNfUVNQSV9GTEFT SF9DTURfQ1RSTF9SRUdfQUREUl9CSVRfUE9TKSB8DQorIENETlNfUVNQSV9GTEFTSF9DTURfQ1RS TF9SRUdfTlVNX0FERFJfQllURVMgKDMpOw0KKw0KKyBpZiAoRUZJX0VSUk9SIChDZG5zUXNwaUV4 ZWN1dGVDb21tYW5kIChJbnN0YW5jZSwgRGV2Q29uZmlnVmFsKSkpIHsNCisgcmV0dXJuIEVGSV9E RVZJQ0VfRVJST1I7DQorIH0NCisNCisgaWYgKEVGSV9FUlJPUiAoTm9yRmxhc2hQb2xsU3RhdHVz UmVnaXN0ZXIgKEluc3RhbmNlKSkpIHsNCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQorIH0N CisNCisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisgVGhpcyBmdW5jdGlvbiB1 bmxvY2tzIGFuZCBlcmFzZXMgYW4gZW50aXJlIE5PUiBGbGFzaCBibG9jay4NCisNCisgQHBhcmFt W2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ugb2YgdmFyaWFibGUgc3RvcmUgcmVnaW9u Lg0KKyBAcGFyYW1baW5dIEJsb2NrQWRkcmVzcyBCbG9jayBhZGRyZXNzIHdpdGhpbiB0aGUgdmFy aWFibGUgc3RvcmUgcmVnaW9uLg0KKw0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIEVyYXNlIGFuZCB1 bmxvY2sgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4NCisgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S IFRoZSBkZXZpY2UgcmVwb3J0ZWQgYW4gZXJyb3IuDQorKiovDQorRUZJX1NUQVRVUw0KK05vckZs YXNoVW5sb2NrQW5kRXJhc2VTaW5nbGVCbG9jayAoDQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAq SW5zdGFuY2UsDQorIElOIFVJTlROIEJsb2NrQWRkcmVzcw0KKyApDQorew0KKyBFRklfU1RBVFVT IFN0YXR1czsNCisgVUlOVE4gSW5kZXg7DQorIEVGSV9UUEwgT3JpZ2luYWxUUEw7DQorDQorIE5v ckZsYXNoTG9jayAoJk9yaWdpbmFsVFBMKTsNCisNCisgSW5kZXggPSAwOw0KKyBkbyB7DQorIC8v IFVubG9jayB0aGUgYmxvY2sgaWYgd2UgaGF2ZSB0bw0KKyBTdGF0dXMgPSBOb3JGbGFzaFVubG9j a1NpbmdsZUJsb2NrSWZOZWNlc3NhcnkgKEluc3RhbmNlLCBCbG9ja0FkZHJlc3MpOw0KKyBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQorIGJyZWFrOw0KKyB9DQorDQorIFN0YXR1cyA9IE5vckZs YXNoRXJhc2VTaW5nbGVCbG9jayAoSW5zdGFuY2UsIEJsb2NrQWRkcmVzcyk7DQorIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCisgYnJlYWs7DQorIH0NCisNCisgSW5kZXgrKzsNCisgfSB3aGls ZSAoKEluZGV4IDwgTk9SX0ZMQVNIX0VSQVNFX1JFVFJZKSAmJiAoU3RhdHVzICE9IEVGSV9TVUND RVNTKSk7DQpbU0FNSV0gSSB0aGluayB0aGVyZSBpcyBzb21ldGhpbmcgd3Jvbmcgd2l0aCB0aGUg bG9vcCBjb25kaXRpb24uIA0KSWYgSSBhbSBub3Qgd3JvbmcsIHRoZSBjaGVjayAoU3RhdHVzICE9 IEVGSV9TVUNDRVNTKSBkb2VzIG5vdCBzZWVtIHRvIGhhdmUgYW55IGVmZmVjdCBhcyB0aGUgY29k ZSBpbiB0aGUgd2hpbGUgbG9vcCB3aWxsIGJyZWFrIG91dCBvZiB0aGVyZSBpcyBhbiBlcnJvci4N CkNhbiB5b3UgY2hlY2ssIHBsZWFzZT8NClsvU0FNSV0NCg0KDQorDQorIGlmIChJbmRleCA9PSBO T1JfRkxBU0hfRVJBU0VfUkVUUlkpIHsNCisgREVCVUcgKCgNCisgREVCVUdfRVJST1IsDQorICJF cmFzZVNpbmdsZUJsb2NrKEJsb2NrQWRkcmVzcz0weCUwOHg6IEJsb2NrIExvY2tlZCBFcnJvciAi DQorICIodHJ5IHRvIGVyYXNlICVkIHRpbWVzKVxuIiwNCisgQmxvY2tBZGRyZXNzLA0KKyBJbmRl eA0KKyApKTsNCisgfQ0KKw0KKyBOb3JGbGFzaFVubG9jayAoT3JpZ2luYWxUUEwpOw0KKw0KKyBy ZXR1cm4gU3RhdHVzOw0KK30NCisNCisvKioNCisgV3JpdGUgYSBzaW5nbGUgd29yZCB0byBnaXZl biBsb2NhdGlvbi4NCisNCisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ug b2YgdmFyaWFibGUgc3RvcmUgcmVnaW9uLg0KKyBAcGFyYW1baW5dIFdvcmRBZGRyZXNzIFRoZSBh ZGRyZXNzIGluIE5PUiBmbGFzaCB0byB3cml0ZSBnaXZlbiB3b3JkLg0KKyBAcGFyYW1baW5dIFdy aXRlRGF0YSBUaGUgZGF0YSB0byB3cml0ZSBpbnRvIE5PUiBmbGFzaCBsb2NhdGlvbi4NCisNCisg QHJldHZhbCBFRklfU1VDQ0VTUyBXcml0ZSBpcyBjb21wbGV0ZS4NCisgQHJldHZhbCBFRklfREVW SUNFX0VSUk9SIFRoZSBkZXZpY2UgcmVwb3J0ZWQgYW4gZXJyb3IuDQorKiovDQorRUZJX1NUQVRV Uw0KK05vckZsYXNoV3JpdGVTaW5nbGVXb3JkICgNCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJ bnN0YW5jZSwNCisgSU4gVUlOVE4gV29yZEFkZHJlc3MsDQorIElOIFVJTlQzMiBXcml0ZURhdGEN CisgKQ0KK3sNCisgREVCVUcgKCgNCisgREVCVUdfSU5GTywNCisgIk5vckZsYXNoV3JpdGVTaW5n bGVXb3JkKFdvcmRBZGRyZXNzPTB4JTA4eCwgV3JpdGVEYXRhPTB4JTA4eClcbiIsDQorIFdvcmRB ZGRyZXNzLA0KKyBXcml0ZURhdGENCisgKSk7DQorDQorIGlmIChFRklfRVJST1IgKE5vckZsYXNo RW5hYmxlV3JpdGUgKEluc3RhbmNlKSkpIHsNCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQor IH0NCisNCisgTW1pb1dyaXRlMzIgKFdvcmRBZGRyZXNzLCBXcml0ZURhdGEpOw0KKyBpZiAoRUZJ X0VSUk9SIChOb3JGbGFzaFBvbGxTdGF0dXNSZWdpc3RlciAoSW5zdGFuY2UpKSkgew0KKyByZXR1 cm4gRUZJX0RFVklDRV9FUlJPUjsNCisgfQ0KKw0KKyByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0K Kw0KKy8qKg0KKyBXcml0ZSBhIGZ1bGwgYmxvY2sgdG8gZ2l2ZW4gbG9jYXRpb24uDQorDQorIEBw YXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIEluc3RhbmNlIG9mIHZhcmlhYmxlIHN0b3JlIHJl Z2lvbi4NCisgQHBhcmFtW2luXSBMYmEgVGhlIGxvZ2ljYWwgYmxvY2sgYWRkcmVzcyBpbiBOT1Ig Zmxhc2guDQorIEBwYXJhbVtpbl0gRGF0YUJ1ZmZlciBUaGUgZGF0YSB0byB3cml0ZSBpbnRvIE5P UiBmbGFzaCBsb2NhdGlvbi4NCisgQHBhcmFtW2luXSBCbG9ja1NpemVJbldvcmRzIFRoZSBudW1i ZXIgb2YgYnl0ZXMgdG8gd3JpdGUuDQorDQorIEByZXR2YWwgRUZJX1NVQ0NFU1MgV3JpdGUgaXMg Y29tcGxldGUuDQorIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiBUaGUgZGV2aWNlIHJlcG9ydGVk IGFuIGVycm9yLg0KKyoqLw0KK0VGSV9TVEFUVVMNCitOb3JGbGFzaFdyaXRlRnVsbEJsb2NrICgN CisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSwNCisgSU4gRUZJX0xCQSBMYmEsDQor IElOIFVJTlQzMiAqRGF0YUJ1ZmZlciwNCisgSU4gVUlOVDMyIEJsb2NrU2l6ZUluV29yZHMNCisg KQ0KK3sNCisgRUZJX1NUQVRVUyBTdGF0dXM7DQorIFVJTlROIFdvcmRBZGRyZXNzOw0KKyBVSU5U MzIgV29yZEluZGV4Ow0KKyBVSU5UTiBCbG9ja0FkZHJlc3M7DQorIEVGSV9UUEwgT3JpZ2luYWxU UEw7DQorDQorIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KKw0KKyAvLyBHZXQgdGhlIHBoeXNpY2Fs IGFkZHJlc3Mgb2YgdGhlIGJsb2NrDQorIEJsb2NrQWRkcmVzcyA9IEdFVF9OT1JfQkxPQ0tfQURE UkVTUyAoDQorIEluc3RhbmNlLT5SZWdpb25CYXNlQWRkcmVzcywNCisgTGJhLA0KKyBCbG9ja1Np emVJbldvcmRzICogNA0KKyApOw0KKw0KKyAvLyBTdGFydCB3cml0aW5nIGZyb20gdGhlIGZpcnN0 IGFkZHJlc3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBibG9jaw0KKyBXb3JkQWRkcmVzcyA9IEJsb2Nr QWRkcmVzczsNCisNCisgTm9yRmxhc2hMb2NrICgmT3JpZ2luYWxUUEwpOw0KKw0KKyBTdGF0dXMg PSBOb3JGbGFzaFVubG9ja0FuZEVyYXNlU2luZ2xlQmxvY2sgKEluc3RhbmNlLCBCbG9ja0FkZHJl c3MpOw0KKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorIERFQlVHICgoDQorIERFQlVHX0VS Uk9SLA0KKyAiV3JpdGVTaW5nbGVCbG9jazogRVJST1IgLSBGYWlsZWQgdG8gVW5sb2NrIGFuZCBF cmFzZSB0aGUgc2luZ2xlICINCisgImJsb2NrIGF0IDB4JVhcbiIsDQorIEJsb2NrQWRkcmVzcw0K KyApKTsNCisgZ290byBleGl0X2hhbmRsZXI7DQorIH0NCisNCisgZm9yIChXb3JkSW5kZXggPSAw Ow0KKyBXb3JkSW5kZXggPCBCbG9ja1NpemVJbldvcmRzOw0KKyBXb3JkSW5kZXgrKywgRGF0YUJ1 ZmZlcisrLCBXb3JkQWRkcmVzcyArPSA0KQ0KKyB7DQorIFN0YXR1cyA9IE5vckZsYXNoV3JpdGVT aW5nbGVXb3JkIChJbnN0YW5jZSwgV29yZEFkZHJlc3MsICpEYXRhQnVmZmVyKTsNCisgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KKyBnb3RvIGV4aXRfaGFuZGxlcjsNCisgfQ0KKyB9DQorDQor ZXhpdF9oYW5kbGVyOg0KKyBOb3JGbGFzaFVubG9jayAoT3JpZ2luYWxUUEwpOw0KKw0KKyBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7DQorIERFQlVHICgoDQorIERFQlVHX0VSUk9SLA0KKyAiTk9S IEZMQVNIIFByb2dyYW1taW5nIFtXcml0ZVNpbmdsZUJsb2NrXSBmYWlsZWQgYXQgYWRkcmVzcyAw eCUwOHguICINCisgIkV4aXQgU3RhdHVzID0gJXIuXG4iLA0KKyBXb3JkQWRkcmVzcywNCisgU3Rh dHVzDQorICkpOw0KKyB9DQorDQorIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyBXcml0 ZSBtdWx0aXBsZSBibG9ja3MuDQorDQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIElu c3RhbmNlIG9mIHZhcmlhYmxlIHN0b3JlIHJlZ2lvbi4NCisgQHBhcmFtW2luXSBMYmEgVGhlIHN0 YXJ0aW5nIGxvZ2ljYWwgYmxvY2sgaW5kZXguDQorIEBwYXJhbVtpbl0gQnVmZmVyU2l6ZUluQnl0 ZXMgVGhlIG51bWJlciBvZiBieXRlcyB0byB3cml0ZS4NCisgQHBhcmFtW2luXSBCdWZmZXIgVGhl IHBvaW50ZXIgdG8gYSBjYWxsZXItYWxsb2NhdGVkIGJ1ZmZlciB0aGF0DQorIGNvbnRhaW5zIHRo ZSBzb3VyY2UgZm9yIHRoZSB3cml0ZS4NCisNCisgQHJldHZhbCBFRklfU1VDQ0VTUyBXcml0ZSBp cyBjb21wbGV0ZS4NCisgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgSW52YWxpZCBwYXJh bWV0ZXJzIHBhc3NlZC4NCisgQHJldHZhbCBFRklfQkFEX0JVRkZFUl9TSVpFIEludmFsaWQgYnVm ZmVyIHNpemUgcGFzc2VkLg0KKyoqLw0KK0VGSV9TVEFUVVMNCitOb3JGbGFzaFdyaXRlQmxvY2tz ICgNCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSwNCisgSU4gRUZJX0xCQSBMYmEs DQorIElOIFVJTlROIEJ1ZmZlclNpemVJbkJ5dGVzLA0KKyBJTiBWT0lEICpCdWZmZXINCisgKQ0K K3sNCisgVUlOVDMyICpXcml0ZUJ1ZmZlcjsNCisgRUZJX1NUQVRVUyBTdGF0dXM7DQorIEVGSV9M QkEgQ3VycmVudEJsb2NrOw0KKyBVSU5UMzIgQmxvY2tTaXplSW5Xb3JkczsNCisgVUlOVDMyIE51 bUJsb2NrczsNCisgVUlOVDMyIEJsb2NrQ291bnQ7DQorDQorIFN0YXR1cyA9IEVGSV9TVUNDRVNT Ow0KKyAvLyBUaGUgYnVmZmVyIG11c3QgYmUgdmFsaWQNCisgaWYgKEJ1ZmZlciA9PSBOVUxMKSB7 DQorIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorIH0NCisNCisgLy8gV2UgbXVzdCBo YXZlIHNvbWUgYnl0ZXMgdG8gcmVhZA0KKyBERUJVRyAoKA0KKyBERUJVR19JTkZPLA0KKyAiTm9y Rmxhc2hXcml0ZUJsb2NrczogQnVmZmVyU2l6ZUluQnl0ZXM9MHgleFxuIiwNCisgQnVmZmVyU2l6 ZUluQnl0ZXMNCisgKSk7DQorIGlmIChCdWZmZXJTaXplSW5CeXRlcyA9PSAwKSB7DQorIHJldHVy biBFRklfQkFEX0JVRkZFUl9TSVpFOw0KKyB9DQorDQorIC8vIFRoZSBzaXplIG9mIHRoZSBidWZm ZXIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBibG9jayBzaXplDQorIERFQlVHICgoDQorIERF QlVHX0lORk8sDQorICJOb3JGbGFzaFdyaXRlQmxvY2tzOiBCbG9ja1NpemUgaW4gYnl0ZXMgPTB4 JXhcbiIsDQorIEluc3RhbmNlLT5NZWRpYS5CbG9ja1NpemUNCisgKSk7DQorIGlmICgoQnVmZmVy U2l6ZUluQnl0ZXMgJSBJbnN0YW5jZS0+TWVkaWEuQmxvY2tTaXplKSAhPSAwKSB7DQorIHJldHVy biBFRklfQkFEX0JVRkZFUl9TSVpFOw0KKyB9DQorDQorIC8vIEFsbCBibG9ja3MgbXVzdCBiZSB3 aXRoaW4gdGhlIGRldmljZQ0KKyBOdW1CbG9ja3MgPSAoKFVJTlQzMilCdWZmZXJTaXplSW5CeXRl cykgLyBJbnN0YW5jZS0+TWVkaWEuQmxvY2tTaXplOw0KKw0KKyBERUJVRyAoKA0KKyBERUJVR19J TkZPLA0KKyAiTm9yRmxhc2hXcml0ZUJsb2NrczogTnVtQmxvY2tzPSVkLCBMYXN0QmxvY2s9JWxk LCBMYmE9JWxkLlxuIiwNCisgTnVtQmxvY2tzLA0KKyBJbnN0YW5jZS0+TWVkaWEuTGFzdEJsb2Nr LA0KKyBMYmENCisgKSk7DQorDQorIGlmICgoTGJhICsgTnVtQmxvY2tzKSA+IChJbnN0YW5jZS0+ TWVkaWEuTGFzdEJsb2NrICsgMSkpIHsNCisgREVCVUcgKCgNCisgREVCVUdfRVJST1IsDQorICJO b3JGbGFzaFdyaXRlQmxvY2tzOiBFUlJPUiAtIFdyaXRlIHdpbGwgZXhjZWVkIGxhc3QgYmxvY2su XG4iDQorICkpOw0KKyByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyB9DQorDQorIEJs b2NrU2l6ZUluV29yZHMgPSBJbnN0YW5jZS0+TWVkaWEuQmxvY2tTaXplIC8gNDsNCisNCisgLy8g QmVjYXVzZSB0aGUgdGFyZ2V0ICpCdWZmZXIgaXMgYSBwb2ludGVyIHRvIFZPSUQsIHdlIG11c3Qg cHV0DQorIC8vIGFsbCB0aGUgZGF0YSBpbnRvIGEgcG9pbnRlciB0byBhIHByb3BlciBkYXRhIHR5 cGUsIHNvIHVzZSAqV3JpdGVCdWZmZXINCisgV3JpdGVCdWZmZXIgPSAoVUlOVDMyICopQnVmZmVy Ow0KKw0KKyBDdXJyZW50QmxvY2sgPSBMYmE7DQorIGZvciAoQmxvY2tDb3VudCA9IDA7DQorIEJs b2NrQ291bnQgPCBOdW1CbG9ja3M7DQorIEJsb2NrQ291bnQrKywgQ3VycmVudEJsb2NrKyssIFdy aXRlQnVmZmVyICs9IEJsb2NrU2l6ZUluV29yZHMpDQorIHsNCisgREVCVUcgKCgNCisgREVCVUdf SU5GTywNCisgIk5vckZsYXNoV3JpdGVCbG9ja3M6IFdyaXRpbmcgYmxvY2sgIyVkXG4iLA0KKyAo VUlOVE4pQ3VycmVudEJsb2NrDQorICkpOw0KKw0KKyBTdGF0dXMgPSBOb3JGbGFzaFdyaXRlRnVs bEJsb2NrICgNCisgSW5zdGFuY2UsDQorIEN1cnJlbnRCbG9jaywNCisgV3JpdGVCdWZmZXIsDQor IEJsb2NrU2l6ZUluV29yZHMNCisgKTsNCisNCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K KyBicmVhazsNCisgfQ0KKyB9DQorDQorIERFQlVHICgoREVCVUdfSU5GTywgIk5vckZsYXNoV3Jp dGVCbG9ja3M6IEV4aXQgU3RhdHVzID0gJXIuXG4iLCBTdGF0dXMpKTsNCisgcmV0dXJuIFN0YXR1 czsNCit9DQorDQorLyoqDQorIFJlYWQgbXVsdGlwbGUgYmxvY2tzLg0KKw0KKyBAcGFyYW1baW5d IEluc3RhbmNlIE5PUiBmbGFzaCBJbnN0YW5jZSBvZiB2YXJpYWJsZSBzdG9yZSByZWdpb24uDQor IEBwYXJhbVtpbl0gTGJhIFRoZSBzdGFydGluZyBsb2dpY2FsIGJsb2NrIGluZGV4IHRvIHJlYWQg ZnJvbS4NCisgQHBhcmFtW2luXSBCdWZmZXJTaXplSW5CeXRlcyBUaGUgbnVtYmVyIG9mIGJ5dGVz IHRvIHJlYWQuDQorIEBwYXJhbVtvdXRdIEJ1ZmZlciBUaGUgcG9pbnRlciB0byBhIGNhbGxlci1h bGxvY2F0ZWQgYnVmZmVyIHRoYXQNCisgc2hvdWxkIGJlIGNvcGllZCB3aXRoIHJlYWQgZGF0YS4N CisNCisgQHJldHZhbCBFRklfU1VDQ0VTUyBSZWFkIGlzIGNvbXBsZXRlLg0KKyBAcmV0dmFsIEVG SV9JTlZBTElEX1BBUkFNRVRFUiBJbnZhbGlkIHBhcmFtZXRlcnMgcGFzc2VkLg0KKyBAcmV0dmFs IEVGSV9CQURfQlVGRkVSX1NJWkUgSW52YWxpZCBidWZmZXIgc2l6ZSBwYXNzZWQuDQorKiovDQor RUZJX1NUQVRVUw0KK05vckZsYXNoUmVhZEJsb2NrcyAoDQorIElOIE5PUl9GTEFTSF9JTlNUQU5D RSAqSW5zdGFuY2UsDQorIElOIEVGSV9MQkEgTGJhLA0KKyBJTiBVSU5UTiBCdWZmZXJTaXplSW5C eXRlcywNCisgT1VUIFZPSUQgKkJ1ZmZlcg0KKyApDQorew0KKyBVSU5UMzIgTnVtQmxvY2tzOw0K KyBVSU5UTiBTdGFydEFkZHJlc3M7DQorDQorIERFQlVHICgoDQorIERFQlVHX0lORk8sDQorICJO b3JGbGFzaFJlYWRCbG9ja3M6IEJ1ZmZlclNpemU9MHgleEIgQmxvY2tTaXplPTB4JXhCIExhc3RC bG9jaz0lbGQsICINCisgIkxiYT0lbGQuXG4iLA0KKyBCdWZmZXJTaXplSW5CeXRlcywNCisgSW5z dGFuY2UtPk1lZGlhLkJsb2NrU2l6ZSwNCisgSW5zdGFuY2UtPk1lZGlhLkxhc3RCbG9jaywNCisg TGJhDQorICkpOw0KKw0KKyAvLyBUaGUgYnVmZmVyIG11c3QgYmUgdmFsaWQNCisgaWYgKEJ1ZmZl ciA9PSBOVUxMKSB7DQorIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorIH0NCisNCisg Ly8gUmV0dXJuIGlmIHdlIGRvIG5vdCBoYXZlIGFueSBieXRlIHRvIHJlYWQNCisgaWYgKEJ1ZmZl clNpemVJbkJ5dGVzID09IDApIHsNCisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKyB9DQorDQorIC8v IFRoZSBzaXplIG9mIHRoZSBidWZmZXIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBibG9jayBz aXplDQorIGlmICgoQnVmZmVyU2l6ZUluQnl0ZXMgJSBJbnN0YW5jZS0+TWVkaWEuQmxvY2tTaXpl KSAhPSAwKSB7DQorIHJldHVybiBFRklfQkFEX0JVRkZFUl9TSVpFOw0KKyB9DQorDQorIE51bUJs b2NrcyA9ICgoVUlOVDMyKUJ1ZmZlclNpemVJbkJ5dGVzKSAvIEluc3RhbmNlLT5NZWRpYS5CbG9j a1NpemU7DQorDQorIGlmICgoTGJhICsgTnVtQmxvY2tzKSA+IChJbnN0YW5jZS0+TWVkaWEuTGFz dEJsb2NrICsgMSkpIHsNCisgREVCVUcgKCgNCisgREVCVUdfRVJST1IsDQorICJOb3JGbGFzaFJl YWRCbG9ja3M6IEVSUk9SIC0gUmVhZCB3aWxsIGV4Y2VlZCBsYXN0IGJsb2NrXG4iDQorICkpOw0K KyByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyB9DQorDQorIC8vIEdldCB0aGUgYWRk cmVzcyB0byBzdGFydCByZWFkaW5nIGZyb20NCisgU3RhcnRBZGRyZXNzID0gR0VUX05PUl9CTE9D S19BRERSRVNTICgNCisgSW5zdGFuY2UtPlJlZ2lvbkJhc2VBZGRyZXNzLA0KKyBMYmEsDQorIElu c3RhbmNlLT5NZWRpYS5CbG9ja1NpemUNCisgKTsNCisNCisgLy8gUmVhZG91dCB0aGUgZGF0YQ0K KyBDb3B5TWVtIChCdWZmZXIsIChVSU5UTiAqKVN0YXJ0QWRkcmVzcywgQnVmZmVyU2l6ZUluQnl0 ZXMpOw0KKw0KKyByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KKw0KKy8qKg0KKyBSZWFkIGZyb20g Tk9SIGZsYXNoLg0KKw0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBJbnN0YW5jZSBv ZiB2YXJpYWJsZSBzdG9yZSByZWdpb24uDQorIEBwYXJhbVtpbl0gTGJhIFRoZSBzdGFydGluZyBs b2dpY2FsIGJsb2NrIGluZGV4IHRvIHJlYWQgZnJvbS4NCisgQHBhcmFtW2luXSBPZmZzZXQgT2Zm c2V0IGludG8gdGhlIGJsb2NrIGF0IHdoaWNoIHRvIGJlZ2luIHJlYWRpbmcuDQorIEBwYXJhbVtp bl0gQnVmZmVyU2l6ZUluQnl0ZXMgVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkLg0KKyBAcGFy YW1bb3V0XSBCdWZmZXIgVGhlIHBvaW50ZXIgdG8gYSBjYWxsZXItYWxsb2NhdGVkIGJ1ZmZlciB0 aGF0DQorIHNob3VsZCBiZSBjb3BpZWQgd2l0aCByZWFkIGRhdGEuDQorDQorIEByZXR2YWwgRUZJ X1NVQ0NFU1MgUmVhZCBpcyBjb21wbGV0ZS4NCisgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgSW52YWxpZCBwYXJhbWV0ZXJzIHBhc3NlZC4NCisqKi8NCitFRklfU1RBVFVTDQorTm9yRmxh c2hSZWFkICgNCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSwNCisgSU4gRUZJX0xC QSBMYmEsDQorIElOIFVJTlROIE9mZnNldCwNCisgSU4gVUlOVE4gQnVmZmVyU2l6ZUluQnl0ZXMs DQorIE9VVCBWT0lEICpCdWZmZXINCisgKQ0KK3sNCisgVUlOVE4gU3RhcnRBZGRyZXNzOw0KKw0K KyAvLyBUaGUgYnVmZmVyIG11c3QgYmUgdmFsaWQNCisgaWYgKEJ1ZmZlciA9PSBOVUxMKSB7DQor IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorIH0NCisNCisgLy8gUmV0dXJuIGlmIHdl IGRvIG5vdCBoYXZlIGFueSBieXRlIHRvIHJlYWQNCisgaWYgKEJ1ZmZlclNpemVJbkJ5dGVzID09 IDApIHsNCisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKyB9DQorDQorIGlmICgoKExiYSAqIEluc3Rh bmNlLT5NZWRpYS5CbG9ja1NpemUpICsgT2Zmc2V0ICsgQnVmZmVyU2l6ZUluQnl0ZXMpID4NCisg SW5zdGFuY2UtPlNpemUpDQorIHsNCisgREVCVUcgKCgNCisgREVCVUdfRVJST1IsDQorICJOb3JG bGFzaFJlYWQ6IEVSUk9SIC0gUmVhZCB3aWxsIGV4Y2VlZCBkZXZpY2Ugc2l6ZS5cbiINCisgKSk7 DQorIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorIH0NCisNCisgLy8gR2V0IHRoZSBh ZGRyZXNzIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbQ0KKyBTdGFydEFkZHJlc3MgPSBHRVRfTk9SX0JM T0NLX0FERFJFU1MgKA0KKyBJbnN0YW5jZS0+UmVnaW9uQmFzZUFkZHJlc3MsDQorIExiYSwNCisg SW5zdGFuY2UtPk1lZGlhLkJsb2NrU2l6ZQ0KKyApOw0KKw0KKyAvLyBSZWFkb3V0IHRoZSBkYXRh DQorIENvcHlNZW0gKEJ1ZmZlciwgKFVJTlROICopKFN0YXJ0QWRkcmVzcyArIE9mZnNldCksIEJ1 ZmZlclNpemVJbkJ5dGVzKTsNCisNCisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioN CisgV3JpdGUgYSBmdWxsIG9yIHBvcnRpb24gb2YgYSBibG9jay4NCisNCisgQHBhcmFtW2luXSBJ bnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ugb2YgdmFyaWFibGUgc3RvcmUgcmVnaW9uLg0KKyBA cGFyYW1baW5dIExiYSBUaGUgc3RhcnRpbmcgbG9naWNhbCBibG9jayBpbmRleCB0byB3cml0ZSB0 by4NCisgQHBhcmFtW2luXSBPZmZzZXQgT2Zmc2V0IGludG8gdGhlIGJsb2NrIGF0IHdoaWNoIHRv IGJlZ2luIHdyaXRpbmcuDQorIEBwYXJhbVtpbiwgb3V0XSBOdW1CeXRlcyBUaGUgdG90YWwgc2l6 ZSBvZiB0aGUgYnVmZmVyLg0KKyBAcGFyYW1baW5dIEJ1ZmZlciBUaGUgcG9pbnRlciB0byBhIGNh bGxlci1hbGxvY2F0ZWQgYnVmZmVyIHRoYXQNCisgY29udGFpbnMgdGhlIHNvdXJjZSBmb3IgdGhl IHdyaXRlLg0KKw0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFdyaXRlIGlzIGNvbXBsZXRlLg0KKyBA cmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbnZhbGlkIHBhcmFtZXRlcnMgcGFzc2VkLg0K KyBAcmV0dmFsIEVGSV9CQURfQlVGRkVSX1NJWkUgQnVmZmVyIHNpemUgbm90IGVub3VnaC4NCisg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SIFRoZSBkZXZpY2UgcmVwb3J0ZWQgYW4gZXJyb3IuDQor KiovDQorRUZJX1NUQVRVUw0KK05vckZsYXNoV3JpdGVTaW5nbGVCbG9jayAoDQorIElOIE5PUl9G TEFTSF9JTlNUQU5DRSAqSW5zdGFuY2UsDQorIElOIEVGSV9MQkEgTGJhLA0KKyBJTiBVSU5UTiBP ZmZzZXQsDQorIElOIE9VVCBVSU5UTiAqTnVtQnl0ZXMsDQorIElOIFVJTlQ4ICpCdWZmZXINCisg KQ0KK3sNCisgRUZJX1NUQVRVUyBTdGF0dXM7DQorIFVJTlQzMiBUbXA7DQorIFVJTlQzMiBUbXBC dWY7DQorIFVJTlQzMiBXb3JkVG9Xcml0ZTsNCisgVUlOVDMyIE1hc2s7DQorIEJPT0xFQU4gRG9F cmFzZTsNCisgVUlOVE4gQnl0ZXNUb1dyaXRlOw0KKyBVSU5UTiBDdXJPZmZzZXQ7DQorIFVJTlRO IFdvcmRBZGRyOw0KKyBVSU5UTiBCbG9ja1NpemU7DQorIFVJTlROIEJsb2NrQWRkcmVzczsNCisg VUlOVE4gUHJldkJsb2NrQWRkcmVzczsNCisNCisgaWYgKEJ1ZmZlciA9PSBOVUxMKSB7DQorIERF QlVHICgoDQorIERFQlVHX0VSUk9SLA0KKyAiTm9yRmxhc2hXcml0ZVNpbmdsZUJsb2NrOiBFUlJP UiAtIEJ1ZmZlciBpcyBpbnZhbGlkXG4iDQorICkpOw0KKyByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KKyB9DQorDQorIGlmIChOdW1CeXRlcyA9PSBOVUxMKSB7DQorIERFQlVHICgoDQor IERFQlVHX0VSUk9SLA0KKyAiTm9yRmxhc2hXcml0ZVNpbmdsZUJsb2NrOiBFUlJPUiAtIE51bUJ5 dGVzIGlzIGludmFsaWRcbiINCisgKSk7DQorIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7 DQorIH0NCisNCisgUHJldkJsb2NrQWRkcmVzcyA9IDA7DQorDQorIERFQlVHICgoDQorIERFQlVH X0lORk8sDQorICJOb3JGbGFzaFdyaXRlU2luZ2xlQmxvY2soUGFyYW1ldGVyczogTGJhPSVsZCwg T2Zmc2V0PTB4JXgsICINCisgIipOdW1CeXRlcz0weCV4LCBCdWZmZXIgQCAweCUwOHgpXG4iLA0K KyBMYmEsDQorIE9mZnNldCwNCisgKk51bUJ5dGVzLA0KKyBCdWZmZXINCisgKSk7DQorDQorIC8v IExvY2F0ZSB0aGUgYmxvY2sgc2l6ZSB0byBhdm9pZCBkZS1yZWZlcmVuY2luZyBwb2ludGVycyBh bGwgdGhlIHRpbWUNCisgQmxvY2tTaXplID0gSW5zdGFuY2UtPk1lZGlhLkJsb2NrU2l6ZTsNCisN CisgLy8gVGhlIHdyaXRlIG11c3Qgbm90IHNwYW4gYmxvY2sgYm91bmRhcmllcy4NCisgLy8gV2Ug bmVlZCB0byBjaGVjayBlYWNoIHZhcmlhYmxlIGluZGl2aWR1YWxseSBiZWNhdXNlIGFkZGluZyB0 d28gbGFyZ2UNCisgLy8gdmFsdWVzIHRvZ2V0aGVyIG92ZXJmbG93cy4NCisgaWYgKChPZmZzZXQg Pj0gQmxvY2tTaXplKSB8fA0KKyAoKk51bUJ5dGVzID4gQmxvY2tTaXplKSB8fA0KKyAoKE9mZnNl dCArICpOdW1CeXRlcykgPiBCbG9ja1NpemUpKQ0KKyB7DQorIERFQlVHICgoDQorIERFQlVHX0VS Uk9SLA0KKyAiTm9yRmxhc2hXcml0ZVNpbmdsZUJsb2NrOiBFUlJPUiAtIEVGSV9CQURfQlVGRkVS X1NJWkU6ICINCisgIihPZmZzZXQ9MHgleCArIE51bUJ5dGVzPTB4JXgpID4gQmxvY2tTaXplPTB4 JXhcbiIsDQorIE9mZnNldCwNCisgKk51bUJ5dGVzLA0KKyBCbG9ja1NpemUNCisgKSk7DQorIHJl dHVybiBFRklfQkFEX0JVRkZFUl9TSVpFOw0KKyB9DQorDQorIC8vIFdlIG11c3QgaGF2ZSBzb21l IGJ5dGVzIHRvIHdyaXRlDQorIGlmICgqTnVtQnl0ZXMgPT0gMCkgew0KKyBERUJVRyAoKA0KKyBE RUJVR19FUlJPUiwNCisgIk5vckZsYXNoV3JpdGVTaW5nbGVCbG9jazogRVJST1IgLSBFRklfQkFE X0JVRkZFUl9TSVpFOiAiDQorICIoT2Zmc2V0PTB4JXggKyBOdW1CeXRlcz0weCV4KSA+IEJsb2Nr U2l6ZT0weCV4XG4iLA0KKyBPZmZzZXQsDQorICpOdW1CeXRlcywNCisgQmxvY2tTaXplDQorICkp Ow0KKyByZXR1cm4gRUZJX0JBRF9CVUZGRVJfU0laRTsNCisgfQ0KKw0KKyAvLyBQaWNrIDEyOGJ5 dGVzIGFzIGEgZ29vZCBzdGFydCBmb3Igd29yZCBvcGVyYXRpb25zIGFzIG9wcG9zZWQgdG8gZXJh c2luZyB0aGUNCisgLy8gYmxvY2sgYW5kIHdyaXRpbmcgdGhlIGRhdGEgcmVnYXJkbGVzcyBpZiBh biBlcmFzZSBpcyByZWFsbHkgbmVlZGVkLg0KKyAvLyBJdCBsb29rcyBsaWtlIG1vc3QgaW5kaXZp ZHVhbCBOViB2YXJpYWJsZSB3cml0ZXMgYXJlIHNtYWxsZXIgdGhhbiAxMjhieXRlcy4NCisgaWYg KCpOdW1CeXRlcyA8PSAxMjgpIHsNCisgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZXJh c2UgYmVmb3JlIHByb2dyYW1taW5nIHRoZSBkYXRhIGludG8gTk9SLg0KKyAvLyBJZiB0aGUgZGVz dGluYXRpb24gYml0cyBhcmUgb25seSBjaGFuZ2luZyBmcm9tIDFzIHRvIDBzIHdlIGNhbiBqdXN0 IHdyaXRlLg0KKyAvLyBBZnRlciBhIGJsb2NrIGlzIGVyYXNlZCBhbGwgYml0cyBpbiB0aGUgYmxv Y2sgaXMgc2V0IHRvIDEuDQorIC8vIElmIGFueSBieXRlIHJlcXVpcmVzIHVzIHRvIGVyYXNlIHdl IGp1c3QgZ2l2ZSB1cCBhbmQgcmV3cml0ZSBhbGwgb2YgaXQuDQorIERvRXJhc2UgPSBGQUxTRTsN CisgQnl0ZXNUb1dyaXRlID0gKk51bUJ5dGVzOw0KKyBDdXJPZmZzZXQgPSBPZmZzZXQ7DQorDQor IHdoaWxlIChCeXRlc1RvV3JpdGUgPiAwKSB7DQorIC8vIFJlYWQgZnVsbCB3b3JkIGZyb20gTk9S LCBzcGxpY2UgYXMgcmVxdWlyZWQuIEEgd29yZCBpcyB0aGUgc21hbGxlc3QNCisgLy8gdW5pdCB3 ZSBjYW4gd3JpdGUuDQorIFN0YXR1cyA9IE5vckZsYXNoUmVhZCAoDQorIEluc3RhbmNlLA0KKyBM YmEsDQorIEN1ck9mZnNldCAmIH4oMHgzKSwNCisgc2l6ZW9mIChUbXApLA0KKyAmVG1wDQorICk7 DQorIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7 DQorIH0NCisNCisgLy8gUGh5c2ljYWwgYWRkcmVzcyBvZiB3b3JkIGluIE5PUiB0byB3cml0ZS4N CisgV29yZEFkZHIgPSAoQ3VyT2Zmc2V0ICYgfigweDMpKSArDQorIEdFVF9OT1JfQkxPQ0tfQURE UkVTUyAoDQorIEluc3RhbmNlLT5SZWdpb25CYXNlQWRkcmVzcywNCisgTGJhLA0KKyBCbG9ja1Np emUNCisgKTsNCisNCisgLy8gVGhlIHdvcmQgb2YgZGF0YSB0aGF0IGlzIHRvIGJlIHdyaXR0ZW4u DQorIFRtcEJ1ZiA9IFJlYWRVbmFsaWduZWQzMiAoDQorIChVSU5UMzIgKikoQnVmZmVyICsgKCpO dW1CeXRlcyAtIEJ5dGVzVG9Xcml0ZSkpDQorICk7DQorDQorIC8vIEZpcnN0IGRvIHdvcmQgYWxp Z25lZCBjaHVua3MuDQorIGlmICgoQ3VyT2Zmc2V0ICYgMHgzKSA9PSAwKSB7DQorIGlmIChCeXRl c1RvV3JpdGUgPj0gNCkgew0KKyAvLyBJcyB0aGUgZGVzdGluYXRpb24gc3RpbGwgaW4gJ2VyYXNl ZCcgc3RhdGU/DQorIGlmICh+VG1wICE9IDApIHsNCisgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFy ZSBvbmx5IGNoYW5naW5nIGJpdHMgdG8gemVyby4NCisgaWYgKChUbXAgXiBUbXBCdWYpICYgVG1w QnVmKSB7DQorIERvRXJhc2UgPSBUUlVFOw0KKyBicmVhazsNCisgfQ0KKyB9DQorDQorIC8vIFdy aXRlIHRoaXMgd29yZCB0byBOT1INCisgV29yZFRvV3JpdGUgPSBUbXBCdWY7DQorIEN1ck9mZnNl dCArPSBzaXplb2YgKFRtcEJ1Zik7DQorIEJ5dGVzVG9Xcml0ZSAtPSBzaXplb2YgKFRtcEJ1Zik7 DQorIH0gZWxzZSB7DQorIC8vIEJ5dGVzVG9Xcml0ZSA8IDQuIERvIHNtYWxsIHdyaXRlcyBhbmQg bGVmdC1vdmVycw0KKyBNYXNrID0gfigofjApIDw8IChCeXRlc1RvV3JpdGUgKiA4KSk7DQorIC8v IE1hc2sgb3V0IHRoZSBieXRlcyB3ZSB3YW50Lg0KKyBUbXBCdWYgJj0gTWFzazsNCisgLy8gSXMg dGhlIGRlc3RpbmF0aW9uIHN0aWxsIGluICdlcmFzZWQnIHN0YXRlPw0KKyBpZiAoKFRtcCAmIE1h c2spICE9IE1hc2spIHsNCisgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBvbmx5IGNoYW5naW5n IGJpdHMgdG8gemVyby4NCisgaWYgKChUbXAgXiBUbXBCdWYpICYgVG1wQnVmKSB7DQorIERvRXJh c2UgPSBUUlVFOw0KKyBicmVhazsNCisgfQ0KKyB9DQorDQorIC8vIE1lcmdlIG9sZCBhbmQgbmV3 IGRhdGEuIFdyaXRlIG1lcmdlZCB3b3JkIHRvIE5PUg0KKyBXb3JkVG9Xcml0ZSA9IChUbXAgJiB+ TWFzaykgfCBUbXBCdWY7DQorIEN1ck9mZnNldCArPSBCeXRlc1RvV3JpdGU7DQorIEJ5dGVzVG9X cml0ZSA9IDA7DQorIH0NCisgfSBlbHNlIHsNCisgLy8gRG8gbXVsdGlwbGUgd29yZHMsIGJ1dCBz dGFydGluZyB1bmFsaWduZWQuDQorIGlmIChCeXRlc1RvV3JpdGUgPiAoNCAtIChDdXJPZmZzZXQg JiAweDMpKSkgew0KKyBNYXNrID0gKCh+MCkgPDwgKChDdXJPZmZzZXQgJiAweDMpICogOCkpOw0K KyAvLyBNYXNrIG91dCB0aGUgYnl0ZXMgd2Ugd2FudC4NCisgVG1wQnVmICY9IE1hc2s7DQorIC8v IElzIHRoZSBkZXN0aW5hdGlvbiBzdGlsbCBpbiAnZXJhc2VkJyBzdGF0ZT8NCisgaWYgKChUbXAg JiBNYXNrKSAhPSBNYXNrKSB7DQorIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgb25seSBjaGFu Z2luZyBiaXRzIHRvIHplcm8uDQorIGlmICgoVG1wIF4gVG1wQnVmKSAmIFRtcEJ1Zikgew0KKyBE b0VyYXNlID0gVFJVRTsNCisgYnJlYWs7DQorIH0NCisgfQ0KKw0KKyAvLyBNZXJnZSBvbGQgYW5k IG5ldyBkYXRhLiBXcml0ZSBtZXJnZWQgd29yZCB0byBOT1INCisgV29yZFRvV3JpdGUgPSAoVG1w ICYgfk1hc2spIHwgVG1wQnVmOw0KKyBCeXRlc1RvV3JpdGUgLT0gKDQgLSAoQ3VyT2Zmc2V0ICYg MHgzKSk7DQorIEN1ck9mZnNldCArPSAoNCAtIChDdXJPZmZzZXQgJiAweDMpKTsNCisgfSBlbHNl IHsNCisgLy8gVW5hbGlnbmVkIGFuZCBmaXRzIGluIG9uZSB3b3JkLg0KKyBNYXNrID0gKH4oKH4w KSA8PCAoQnl0ZXNUb1dyaXRlICogOCkpKSA8PCAoKEN1ck9mZnNldCAmIDB4MykgKiA4KTsNCisg Ly8gTWFzayBvdXQgdGhlIGJ5dGVzIHdlIHdhbnQuDQorIFRtcEJ1ZiA9IChUbXBCdWYgPDwgKChD dXJPZmZzZXQgJiAweDMpICogOCkpICYgTWFzazsNCisgLy8gSXMgdGhlIGRlc3RpbmF0aW9uIHN0 aWxsIGluICdlcmFzZWQnIHN0YXRlPw0KKyBpZiAoKFRtcCAmIE1hc2spICE9IE1hc2spIHsNCisg Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBvbmx5IGNoYW5naW5nIGJpdHMgdG8gemVyby4NCisg aWYgKChUbXAgXiBUbXBCdWYpICYgVG1wQnVmKSB7DQorIERvRXJhc2UgPSBUUlVFOw0KKyBicmVh azsNCisgfQ0KKyB9DQorDQorIC8vIE1lcmdlIG9sZCBhbmQgbmV3IGRhdGEuIFdyaXRlIG1lcmdl ZCB3b3JkIHRvIE5PUg0KKyBXb3JkVG9Xcml0ZSA9IChUbXAgJiB+TWFzaykgfCBUbXBCdWY7DQor IEN1ck9mZnNldCArPSBCeXRlc1RvV3JpdGU7DQorIEJ5dGVzVG9Xcml0ZSA9IDA7DQorIH0NCisg fQ0KKw0KKyBCbG9ja0FkZHJlc3MgPSBHRVRfTk9SX0JMT0NLX0FERFJFU1MgKA0KKyBJbnN0YW5j ZS0+UmVnaW9uQmFzZUFkZHJlc3MsDQorIExiYSwNCisgQmxvY2tTaXplDQorICk7DQorIGlmIChC bG9ja0FkZHJlc3MgIT0gUHJldkJsb2NrQWRkcmVzcykgew0KKyBTdGF0dXMgPSBOb3JGbGFzaFVu bG9ja1NpbmdsZUJsb2NrSWZOZWNlc3NhcnkgKEluc3RhbmNlLCBCbG9ja0FkZHJlc3MpOw0KKyBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KKyB9 DQorDQorIFByZXZCbG9ja0FkZHJlc3MgPSBCbG9ja0FkZHJlc3M7DQorIH0NCisNCisgU3RhdHVz ID0gTm9yRmxhc2hXcml0ZVNpbmdsZVdvcmQgKEluc3RhbmNlLCBXb3JkQWRkciwgV29yZFRvV3Jp dGUpOw0KKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQorIHJldHVybiBFRklfREVWSUNFX0VS Uk9SOw0KKyB9DQorIH0NCisNCisgLy8gRXhpdCBpZiB3ZSBnb3QgaGVyZSBhbmQgY291bGQgd3Jp dGUgYWxsIHRoZSBkYXRhLiBPdGhlcndpc2UgZG8gdGhlDQorIC8vIEVyYXNlLVdyaXRlIGN5Y2xl Lg0KKyBpZiAoIURvRXJhc2UpIHsNCisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KKyB9DQorIH0NCisN CisgLy8gQ2hlY2sgd2UgZGlkIGdldCBzb21lIG1lbW9yeS4gQnVmZmVyIGlzIEJsb2NrU2l6ZS4N CisgaWYgKEluc3RhbmNlLT5TaGFkb3dCdWZmZXIgPT0gTlVMTCkgew0KKyBERUJVRyAoKERFQlVH X0VSUk9SLCAiRnZiV3JpdGU6IEVSUk9SIC0gQnVmZmVyIG5vdCByZWFkeVxuIikpOw0KKyByZXR1 cm4gRUZJX0RFVklDRV9FUlJPUjsNCisgfQ0KKw0KKyAvLyBSZWFkIE5PUiBGbGFzaCBkYXRhIGlu dG8gc2hhZG93IGJ1ZmZlcg0KKyBTdGF0dXMgPSBOb3JGbGFzaFJlYWRCbG9ja3MgKA0KKyBJbnN0 YW5jZSwNCisgTGJhLA0KKyBCbG9ja1NpemUsDQorIEluc3RhbmNlLT5TaGFkb3dCdWZmZXINCisg KTsNCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAvLyBSZXR1cm4gb25lIG9mIHRoZSBw cmUtYXBwcm92ZWQgZXJyb3Igc3RhdHVzZXMNCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQor IH0NCisNCisgLy8gUHV0IHRoZSBkYXRhIGF0IHRoZSBhcHByb3ByaWF0ZSBsb2NhdGlvbiBpbnNp ZGUgdGhlIGJ1ZmZlciBhcmVhDQorIENvcHlNZW0gKA0KKyAoVk9JRCAqKSgoVUlOVE4pSW5zdGFu Y2UtPlNoYWRvd0J1ZmZlciArIE9mZnNldCksDQorIEJ1ZmZlciwNCisgKk51bUJ5dGVzDQorICk7 DQorDQorIC8vIFdyaXRlIHRoZSBtb2RpZmllZCBidWZmZXIgYmFjayB0byB0aGUgTm9yRmxhc2gN CisgU3RhdHVzID0gTm9yRmxhc2hXcml0ZUJsb2NrcyAoDQorIEluc3RhbmNlLA0KKyBMYmEsDQor IEJsb2NrU2l6ZSwNCisgSW5zdGFuY2UtPlNoYWRvd0J1ZmZlcg0KKyApOw0KKyBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQorIC8vIFJldHVybiBvbmUgb2YgdGhlIHByZS1hcHByb3ZlZCBlcnJv ciBzdGF0dXNlcw0KKyByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCisgfQ0KKw0KKyByZXR1cm4g RUZJX1NVQ0NFU1M7DQorfQ0KKw0KKy8qKg0KKyBSZWFkIEpFREVDIElEIG9mIE5PUiBmbGFzaCBk ZXZpY2UuDQorDQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIEluc3RhbmNlIG9mIHZh cmlhYmxlIHN0b3JlIHJlZ2lvbi4NCisgQHBhcmFtW291dF0gSmVkZWNJZCBKRURFQyBJRCBvZiBO T1IgZmxhc2ggZGV2aWNlLg0KKyBNYXhpbXVtIGxlbmd0aCBvZiBKZWRlY0lkIGNhbiBiZSB1cHRv IDYgYnl0ZXMNCisNCisgQHJldHZhbCBFRklfU1VDQ0VTUyBUaGUgd3JpdGUgaXMgY29tcGxldGVk Lg0KKyBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgRmFpbGVkIHRvIGZldGNoIEpFREVDIElELg0K KyBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbnZhbGlkIHBhcmFtZXRlcnMgcGFzc2Vk Lg0KKyoqLw0KK0VGSV9TVEFUVVMNCitOb3JGbGFzaFJlYWRJZCAoDQorIElOIE5PUl9GTEFTSF9J TlNUQU5DRSAqSW5zdGFuY2UsDQorIE9VVCBVSU5UOCAqSmVkZWNJZA0KKyApDQorew0KKyBVSU5U MzIgdmFsOw0KKw0KKyBpZiAoKEluc3RhbmNlID09IE5VTEwpIHx8IChKZWRlY0lkID09IE5VTEwp KSB7DQorIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorIH0NCisNCisgdmFsID0gKFNQ SU5PUl9PUF9SRElEIDw8DQorIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfT1BDT0RFX0JJ VF9QT1MpIHwNCisgKENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfUkVBRF9FTkFCTEUgPDwN CisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19SRUFERU5fQklUX1BPUykgfA0KKyBDRE5T X1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX05VTV9EQVRBX0JZVEVTICgzKTsNCisNCisgaWYgKEVG SV9FUlJPUiAoQ2Ruc1FzcGlFeGVjdXRlQ29tbWFuZCAoSW5zdGFuY2UsIHZhbCkpKSB7DQorIHJl dHVybiBFRklfREVWSUNFX0VSUk9SOw0KKyB9DQorDQorIHZhbCA9IE1taW9SZWFkMzIgKA0KKyBJ bnN0YW5jZS0+SG9zdENvbnRyb2xsZXJCYXNlQWRkcmVzcyArIENETlNfUVNQSV9GTEFTSF9DTURf UkVBRF9EQVRBX1JFR19PRkZTRVQNCisgKTsNCisNCisgLy8gTWFudWZhY3R1cmVyIElEIGZpZWxk DQorIEplZGVjSWRbMF0gPSAoVUlOVDgpdmFsOw0KKyAvLyBUeXBlIGZpZWxkDQorIEplZGVjSWRb MV0gPSAoVUlOVDgpKHZhbCA+PiA4KTsNCisgLy8gQ2FwYWNpdHkgZmllbGQNCisgSmVkZWNJZFsy XSA9IChVSU5UOCkodmFsID4+IDE2KTsNCisNCisgREVCVUcgKCgNCisgREVCVUdfSU5GTywNCisg Ik5vciBmbGFzaCBkZXRlY3RlZCwgSmVkZWMgSUQsIE1hbnVmYWN0dXJlciBJZD0leCBUeXBlPSV4 IENhcGFjaXR5PSV4IFxuIiwNCisgSmVkZWNJZFswXSwNCisgSmVkZWNJZFsxXSwNCisgSmVkZWNJ ZFsyXQ0KKyApKTsNCisNCisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisgTk9S IEZsYXNoIFJlc2V0DQorDQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIGluc3RhbmNl Lg0KKw0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFJldHVybiBzdWNjZXNzIG9uIGV2ZXJ5IGNhbGwu DQorKiovDQorRUZJX1NUQVRVUw0KK05vckZsYXNoUmVzZXQgKA0KKyBJTiBOT1JfRkxBU0hfSU5T VEFOQ0UgKkluc3RhbmNlDQorICkNCit7DQorIHJldHVybiBFRklfU1VDQ0VTUzsNCit9DQotLSAN CjIuMjUuMQ0KDQoNCg0KDQoNCg0KCi09LT0tPS09LT0tPS09LT0tPS09LT0tCkdyb3Vwcy5pbyBM aW5rczogWW91IHJlY2VpdmUgYWxsIG1lc3NhZ2VzIHNlbnQgdG8gdGhpcyBncm91cC4KVmlldy9S ZXBseSBPbmxpbmUgKCMxMTkzMzgpOiBodHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvbWVz c2FnZS8xMTkzMzgKTXV0ZSBUaGlzIFRvcGljOiBodHRwczovL2dyb3Vwcy5pby9tdC8xMDYzNjU0 NjYvNzY4NjE3NgpHcm91cCBPd25lcjogZGV2ZWwrb3duZXJAZWRrMi5ncm91cHMuaW8KVW5zdWJz Y3JpYmU6IGh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC91bnN1YiBbcmViZWNjYUBvcGVu ZncuaW9dCi09LT0tPS09LT0tPS09LT0tPS09LT0tCgoNCg==