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 51CC97803CE for ; Wed, 29 May 2024 12:39:27 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=2Obir/tsxp5r8EA6WylZ7Npm7qqtYPxU+12qT8eVdmE=; 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; s=20240206; t=1716986367; v=1; b=otRMnQlDB2WlN1PlQoNTIiv3zPBmnRS6N92saXSqyISi+91k36HyUbA3ZdyIdji1Q6N8Eq0s XOvnb7owr/Ij9RaemvAlfkLnAJsvDDxfn57LdKfcPDLromhhWuKIwyyIN1ZI38AA/8YNiZNiQhr RrjUf4nPbap/MsIpj7QwsIsJ3h8/YyxClN6vPjCOq/IIgHKLWM3EiSud2MEm6LF9QTk7CTeLYj1 TrXNe1F8pLuDdcIuX1TWKsfli86EERJxo5z0HHmk8cDR/e2bW7j1lX2IUFPu6jRlypf3obUs1kD yFqXzPkLJKWQfaza2wjtACm95MAgXPb+wUQH5ixhgbGeQ== X-Received: by 127.0.0.2 with SMTP id WtM5YY7687511x3s1waevFqt; Wed, 29 May 2024 05:39:25 -0700 X-Received: from EUR05-AM6-obe.outbound.protection.outlook.com (EUR05-AM6-obe.outbound.protection.outlook.com [40.107.22.40]) by mx.groups.io with SMTP id smtpd.web11.12923.1716986363945143040 for ; Wed, 29 May 2024 05:39:25 -0700 X-Received: from AM0PR02CA0001.eurprd02.prod.outlook.com (2603:10a6:208:3e::14) by AS8PR08MB9720.eurprd08.prod.outlook.com (2603:10a6:20b:614::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7633.19; Wed, 29 May 2024 12:39:12 +0000 X-Received: from AM4PEPF00027A63.eurprd04.prod.outlook.com (2603:10a6:208:3e:cafe::f5) by AM0PR02CA0001.outlook.office365.com (2603:10a6:208:3e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.55 via Frontend Transport; Wed, 29 May 2024 12:39:12 +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 AM4PEPF00027A63.mail.protection.outlook.com (10.167.16.73) 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 12:39:12 +0000 X-Received: ("Tessian outbound 2fd40f2ccfd7:v327"); Wed, 29 May 2024 12:39:12 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: e931177ef0d2999c X-CR-MTA-TID: 64aa7808 X-Received: from c200ac6ed13b.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 3B17B7E7-96A5-49D7-9C81-27124A8C8385.1; Wed, 29 May 2024 12:39:01 +0000 X-Received: from EUR02-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id c200ac6ed13b.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 29 May 2024 12:39:01 +0000 X-Received: from AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) by AS4PR08MB7630.eurprd08.prod.outlook.com (2603:10a6:20b:4cd::11) 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 12:38:56 +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 12:38:56 +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///znQCAAB39AA== Date: Wed, 29 May 2024 12:38:56 +0000 Message-ID: <43CF5BB1-B4D3-4D34-ABB2-E9F84104FB19@arm.com> References: <20240529085517.1074417-1-Sahil.Kaushal@arm.com> <20240529085517.1074417-16-Sahil.Kaushal@arm.com> In-Reply-To: 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_|AS4PR08MB7630:EE_|AM4PEPF00027A63:EE_|AS8PR08MB9720:EE_ X-MS-Office365-Filtering-Correlation-Id: defe36af-fa99-45c2-9568-08dc7fdc5811 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230031|1800799015|376005|366007|38070700009; X-Microsoft-Antispam-Message-Info-Original: =?us-ascii?Q?07c7o+V9G7wH6aZR3QJ+pns697zaMy9XyPQijGIcM4sXWJDo4JeqEu1VhWoI?= =?us-ascii?Q?IHMEUGA6vMlGKbXG/U8aaQ9IEs9oj2yXXLflSd4p8hMOObJn/SYnWil+JVRx?= =?us-ascii?Q?7ZcGevWiGP8kfpQQfeokDIIaGnDtHkcBFPAVBnawkmJO9BfgNZOgcktn3QIS?= =?us-ascii?Q?/X/ScFXHNALKIqqFaaTecpZr3gD9pTg2IGR3P5oL7xApNrAoD7pIa4N+Gu8I?= =?us-ascii?Q?ngkLpu/ZKEdIvknD5M7Tcis2TnzL4JecidkF/3ycnfK3OaSywD6EteuQFluU?= =?us-ascii?Q?AS+nBhVlrwCQcHOhTJ+XNkvk9ekPbQqZoT/yfaedfEnmvDJHV6Zv9YlBtwPG?= =?us-ascii?Q?1vg/f+Xs3QZZlZU/shmGz4+Dd3ZhJakRGE/cIO/diEGQqlCRpvBtMY5qC6T/?= =?us-ascii?Q?KEgU0P39gt/P/LpOS8cxJuAKWs1i0DNYazBRBSIh5TsSuYWadVv+gtDlmG9r?= =?us-ascii?Q?jJ9lGX5QDDV5AjUCR1Ys4aO2UGwFezqZxQiFjeIaZ0pRjU6/7izOMQpiBR0c?= =?us-ascii?Q?TlhlN90ow79g3BNon5CsFU2YzRi23YNk5IxCfwEoP5vMfzW8dy/ayHDj5OJc?= =?us-ascii?Q?jyKbnXaMHnFmF4UpX85XYRTafI5DFES04QEfBW6G9Z4aI9houn/LO84RiNX8?= =?us-ascii?Q?vOOcOVvFny0YiPQ+VV8y3inLJ/CTR/TSnYHf4G/xAC88+DTPlkR41zA4mHEx?= =?us-ascii?Q?AgDG5zEXPLRn6shHD1h+XqTJmo7l5C9ia/o3vUhC/Wmat4+lL67IXduqT7j3?= =?us-ascii?Q?EVYyXLuZqF8xwhWpiPBeAwoT5uWT/0Z3JtlKG+C/sA5RJmHAETmHe4VAbY9o?= =?us-ascii?Q?2OesBpFui1Dx8Fm0peuvu8qkd8Ff4bQBOqHYvwU6iuAHWcR0prCsTh1oY1yL?= =?us-ascii?Q?BPl9e909WBWIjtc54zNkRbTGljqdLamoQm4kxPaopB96ZQ4+bFDIRcMFcXLL?= =?us-ascii?Q?bb2bKc2yqYXYX5moV5YtpEhWpKozFIQkEU48ly00y3fg8MdYrLc/Z29rsbRF?= =?us-ascii?Q?e5CBGkA7ozX63kJK9LJ5WXwrCEqXNI2oWCgqT1olYs88FE5MH82UMFT0vhEl?= =?us-ascii?Q?6W6mX7iN7eefEvkj3/h1Vc8Wr7TuQKRykun83+/xGsTHb85enKzE01d13aO2?= =?us-ascii?Q?jZbVx9q0z8ukyG79E1r+ibyVVJmCEgxTcKnX/UeytcIwiPUeSW7hsRlXJc9U?= =?us-ascii?Q?023pvPnI3KT7nBnTI0zIV2CtXzK0BymknQfi4XJiyCp6jyswSJY3rU2CdJ1I?= =?us-ascii?Q?CZaycZSdMWeSmMe26Gh/gRK57e8T/baX68TENPmG59XgcdrPwe99eh6SRN5G?= =?us-ascii?Q?h/l/2rQmg2syn+Ypj4E+YLfLLmbRRt6tG/e0JERj6WTjrw=3D=3D?= 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)(1800799015)(376005)(366007)(38070700009);DIR:OUT;SFP:1101; MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR08MB7630 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: AM4PEPF00027A63.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: c20a32ee-6e8e-447f-4e99-08dc7fdc4e94 X-Microsoft-Antispam-Message-Info: =?utf-8?B?bDhsU2hwREdCZjllQXNxL2FuNDViYjRTWGhuVTNYQ0szYzBwZ2dTdG55dmNq?= =?utf-8?B?aE1kZlFjbkNJWXREZk02ZHY0YmJxVC8zNzJTZ1FSeEl5aS83cmVCUk90enF3?= =?utf-8?B?WGttOGpMc2U2Z3FCekkvektHMVlNaWE4MVdpVzRqSEFjM2hpSkNPamV1Vkxp?= =?utf-8?B?bXgyWTN2djZ2QWhwV0pQYVhscVgzQ3VwSS9DUldybTFHeGtQTytmL3AwdTIy?= =?utf-8?B?Y05CdkkyUFZZYjVYQVI2QnVQRW9BcmNVNmtZeVdSMURnRUR0ajRkWUoxZ3JT?= =?utf-8?B?UnJLY0g0R2doRVZvTVlEdkV5MloxNHgvN1BESElkTU42Sm9qTGlpZUM2VFdl?= =?utf-8?B?QXJOMlcwYy9QVHlQZWJBYU5MaDMyejZCUm9FVWxBSS9ibjEyMWFNaElBR3RP?= =?utf-8?B?V2RQSDloNnNrcFFxTUJSeFRzZ0l3a0RQYTdiRllTNEV6ZW16YWljdG9uaUtv?= =?utf-8?B?RnlCQjE0MWIrMjNZN1NKL3NkeUNQMDI1aEROTHppN3hMQ0NIMUtmVEttYnda?= =?utf-8?B?VUVsbVFDR1FocThQVHlGS2xlL3l5aEZDempUOUFtYmNaSWdEUDd4clhXemw2?= =?utf-8?B?WGMyRCtmS0lRMUVSelN5N2tsZDUwNS9QYmJVWVFhTzlCSVB0eHk3VVVjT2h1?= =?utf-8?B?VklER3liS3dMeVRPVFJEbGxtdUN6YUUvcFVIQW1hbFVsMEYybDgzSS9hZUl0?= =?utf-8?B?ZThyYm03WEh0dWdiZXp5cWRjS0NvdDJEVTN6THIzRnk1TUdJRmROWFlpZDU2?= =?utf-8?B?c2J3UU5yU01HODlIMXpvSXZQb0lPRi9xVUcvQ3pBZ2hzMXpSclRLTThJNU5P?= =?utf-8?B?NFkyaEIvUHNjNVBPVld3SjFEQ3Z4bGV0NVNESDZnYkxhanAxN2FSdDkwRzk5?= =?utf-8?B?eU9tTm9lRGhxeUR0NHZod243aFZ2RDVrY0lYQTcwc1NDQ0hULzNFeGdaZXZa?= =?utf-8?B?Z2JhZU1UMytrQjBVTmF3ZHoyQXR5YjcxYXowa0laSTl6ejduMkRKOXdzcGVS?= =?utf-8?B?aUNSNml2Y1ZQSnZFT2duaGZ6QytDRkIwa09ORmtKWTBhdmdHMWZVWGdjaDc4?= =?utf-8?B?ZGx3ZmpScmJUc1lVbk9xS1dmWTlBYTlUOFQwTnptbSsxcHlLS3pHaC9keklo?= =?utf-8?B?dVRtMFFqOG16VnNJTW5HdUFCdXBFNVY2V2pNWHYwaVkrL1FJaVJzemFTNE1F?= =?utf-8?B?UDB2VS9seERQK041YzU0WCtlTFI0eExvT1JwMitiUEJveWdOVnZXajhxakxY?= =?utf-8?B?SmlESm1vVSs4Q051TGxRSHdFNSsrWTJYazZsbmhHclMycDllTmU3cjdEMXkw?= =?utf-8?B?T2ZWLzV3TE1JRGc0dmlMWS9jNnhGOXNCdEZDL1UwTFZXMWlpaEowMXBoQ1NK?= =?utf-8?B?ZzBmcE9tck90djhjMlVUOEppUllJRWYyQkRjRGVYN3Z6NkdrZEVwV0ZCcUFR?= =?utf-8?B?bVFPNm5hVlJITUFTVS9ocHcwMVlCUVVLUURIMklJVjlGc0ltTmd1S0pkTUk4?= =?utf-8?B?YjU3SWp5WFZtNUh0OHUybitIaEtNekJHRDFYOERJU3lnZm50WStiMGtTQUQ4?= =?utf-8?B?Vm1nYzgzT0JSUkdHVWQ1NG1rbUQyRHZPc2xLWU9oa1BwdFExOUtNU01HWnli?= =?utf-8?B?S0NUU2R6OXZ5WDkyaTRwMXhjWkgyQkVWdkhNTWZBL2JqMVBmb3dLNVZBdWI2?= =?utf-8?B?NkxkdjN2cTFjRTVVbGJZbkExdlo4OFNsRWRlOXFhS0R2TE92THAvSEZzZk1t?= =?utf-8?B?Q20xQ244cUMxTm5VbXVTWUY5RGhiNkJTa1BxdHhJT0dnazJDNklpTEpXUUt0?= =?utf-8?B?S25jVmJXazlnNk9MM1ZiRFdEbHlsQjJ5WUErVTlQT0hSd01ia1Z1NzYzWjBD?= =?utf-8?Q?Du54tdhczxV55?= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2024 12:39:12.6066 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: defe36af-fa99-45c2-9568-08dc7fdc5811 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: AM4PEPF00027A63.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9720 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 05:39:25 -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: nTHf7rHQSUhxBAWYXQa57u1Mx7686176AA= Content-Language: en-GB Content-Type: multipart/alternative; boundary="_000_43CF5BB1B4D34D34ABB2E9F84104FB19armcom_" X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=otRMnQlD; 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 --_000_43CF5BB1B4D34D34ABB2E9F84104FB19armcom_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgU2FoaWwsDQoNCkkgd2lsbCBkcm9wIHRoZSBsb29wIGJlZm9yZSBtZXJnaW5nIHRoZSBjaGFu Z2VzLg0KT3RoZXIgdGhhbiB0aGF0IHRoaXMgcGF0Y2ggbG9va3MgZ29vZCB0byBtZS4NCg0KUmV2 aWV3ZWQtYnk6IFNhbWkgTXVqYXdhciA8c2FtaS5tdWphd2FyQGFybS5jb20+DQoNClJlZ2FyZHMs DQoNClNhbWkgTXVqYXdhcg0KDQpGcm9tOiBTYWhpbCBLYXVzaGFsIDxTYWhpbC5LYXVzaGFsQGFy bS5jb20+DQpEYXRlOiBXZWRuZXNkYXkgMjkgTWF5IDIwMjQgYXQgMTI6NTENClRvOiBTYW1pIE11 amF3YXIgPFNhbWkuTXVqYXdhckBhcm0uY29tPiwgImRldmVsQGVkazIuZ3JvdXBzLmlvIiA8ZGV2 ZWxAZWRrMi5ncm91cHMuaW8+DQpDYzogQXJkIEJpZXNoZXV2ZWwgPGFyZGIrdGlhbm9jb3JlQGtl cm5lbC5vcmc+LCBMZWlmIExpbmRob2xtICAgPHF1aWNfbGxpbmRob2xAcXVpY2luYy5jb20+LCBu ZCA8bmRAYXJtLmNvbT4NClN1YmplY3Q6IFJlOiBbZWRrMi1wbGF0Zm9ybXNdW1BBVENIIFY0IDE1 LzE3XSBQbGF0Zm9ybS9BUk06IEFkZCBDYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliIGZvciBO b3JGbGFzaER4ZQ0KDQpIaSBTYW1pLA0KVGhhbmsgeW91IGZvciByZXZpZXdpbmcgdGhlIHBhdGNo Lg0KWW91IGFyZSByaWdodC4gVGhlIGRvLXdoaWxlIGxvb3AgaXMgcmVkdW5kYW50IGFuZCBoZW5j ZSBjYW4gYmUgcmVtb3ZlZC4NClRoYW5rcywNClNhaGlsDQoNCkZyb206IFNhbWkgTXVqYXdhciA8 U2FtaS5NdWphd2FyQGFybS5jb20+DQpEYXRlOiBXZWRuZXNkYXksIDI5IE1heSAyMDI0IGF0IDU6 MDbigK9QTQ0KVG86IFNhaGlsIEthdXNoYWwgPFNhaGlsLkthdXNoYWxAYXJtLmNvbT4sIGRldmVs QGVkazIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbz4NCkNjOiBBcmQgQmllc2hldXZl bCA8YXJkYit0aWFub2NvcmVAa2VybmVsLm9yZz4sIExlaWYgTGluZGhvbG0gICA8cXVpY19sbGlu ZGhvbEBxdWljaW5jLmNvbT4sIG5kIDxuZEBhcm0uY29tPg0KU3ViamVjdDogUmU6IFtlZGsyLXBs YXRmb3Jtc11bUEFUQ0ggVjQgMTUvMTddIFBsYXRmb3JtL0FSTTogQWRkIENhZGVuY2VRc3BpTm9y Rmxhc2hEZXZpY2VMaWIgZm9yIE5vckZsYXNoRHhlDQpIaSBTYWhpbCwNCg0KUGxlYXNlIGZpbmQg bXkgZmVlZGJhY2sgaW5saW5lIG1hcmtlZCBbU0FNSV0uDQoNClJlZ2FyZHMsDQoNClNhbWkgTXVq YXdhcg0KDQpPbiAyOS8wNS8yMDI0LCAwOTo1NiwgIlNhaGlsIEthdXNoYWwiIDxTYWhpbC5LYXVz aGFsQGFybS5jb20gPG1haWx0bzpTYWhpbC5LYXVzaGFsQGFybS5jb20+PiB3cm90ZToNCg0KDQpG cm9tOiBzYWhpbCA8c2FoaWxAYXJtLmNvbSA8bWFpbHRvOnNhaGlsQGFybS5jb20+Pg0KDQoNCklu IE4xU2RwIHBsYXRmb3JtLCB0aGUgU29DIGlzIGNvbm5lY3RlZCB0byBJT0ZQR0Egd2hpY2ggaGFz IGENCkNhZGVuY2UgUXVhZCBTUEkgKFFTUEkpIGNvbnRyb2xsZXIuIFRoaXMgUVNQSSBjb250cm9s bGVyIG1hbmFnZXMNCnRoZSBmbGFzaCBjaGlwIGRldmljZSB2aWEgUVNQSSBidXMuDQoNCg0KVGhp cyBwYXRjaCBhZGRzIENhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIgd2hpY2ggaXMgdXNlZCB0 bw0KbWFuYWdlIGFuZCBhY2Nlc3MgdGhlIGFib3ZlIGNvbmZpZ3VyYXRpb24uDQoNCg0KU2lnbmVk LW9mZi1ieTogc2FoaWwgPHNhaGlsQGFybS5jb20gPG1haWx0bzpzYWhpbEBhcm0uY29tPj4NCi0t LQ0KUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRl bmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmluZiB8IDMyICsNClBsYXRmb3JtL0FSTS9MaWJyYXJ5 L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxp Yi5oIHwgNDYgKw0KUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmlj ZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmMgfCAxMDM0ICsrKysrKysrKysrKysr KysrKysrDQozIGZpbGVzIGNoYW5nZWQsIDExMTIgaW5zZXJ0aW9ucygrKQ0KDQoNCmRpZmYgLS1n aXQgYS9QbGF0Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliL0Nh ZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuaW5mIGIvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2Fk ZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmlu Zg0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uNTA2ODc2YjYyMjg1 DQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNwaU5v ckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuaW5mDQpAQCAtMCww ICsxLDMyIEBADQorIy8qKiBAZmlsZQ0KKyMNCisjIENvbXBvbmVudCBkZXNjcmlwdGlvbiBmaWxl IGZvciBDYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliIExpYnJhcnkNCisjDQorIyBDb3B5cmln aHQgKGMpIDIwMjQsIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCisjDQor IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKyMNCisjKiov DQorDQorW0RlZmluZXNdDQorIElORl9WRVJTSU9OID0gMHgwMDAxMDAwNQ0KKyBCQVNFX05BTUUg PSBDYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliDQorIEZJTEVfR1VJRCA9IGVkMTcyMzY2LTA2 NmItNDk5OC05YjVlLWNhN2YzODVhMTcwYg0KKyBNT0RVTEVfVFlQRSA9IERYRV9SVU5USU1FX0RS SVZFUg0KKyBWRVJTSU9OX1NUUklORyA9IDEuMA0KKyBMSUJSQVJZX0NMQVNTID0gTm9yRmxhc2hE ZXZpY2VMaWINCisNCitbU291cmNlcy5jb21tb25dDQorIENhZGVuY2VRc3BpTm9yRmxhc2hEZXZp Y2VMaWIuYw0KKyBDYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmgNCisNCitbUGFja2FnZXNd DQorIE1kZVBrZy9NZGVQa2cuZGVjDQorIFBsYXRmb3JtL0FSTS9BUk0uZGVjDQorDQorW0xpYnJh cnlDbGFzc2VzXQ0KKyBCYXNlTGliDQorIEJhc2VNZW1vcnlMaWINCisgRGVidWdMaWINCisgSW9M aWINCisgVGltZXJMaWINCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNl UXNwaU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuaCBiL1Bs YXRmb3JtL0FSTS9MaWJyYXJ5L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIvQ2FkZW5jZVFz cGlOb3JGbGFzaERldmljZUxpYi5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MDAwMDAwLi45NTFhOTM0ODFkZDENCi0tLSAvZGV2L251bGwNCisrKyBiL1BsYXRmb3JtL0FSTS9M aWJyYXJ5L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIvQ2FkZW5jZVFzcGlOb3JGbGFzaERl dmljZUxpYi5oDQpAQCAtMCwwICsxLDQ2IEBADQorLyoqIEBmaWxlDQorDQorIENvcHlyaWdodCAo YykgMjAyNCwgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KKw0KKyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KKw0KKyoqLw0KKw0KKyNp Zm5kZWYgQ0FERU5DRV9RU1BJX05PUl9GTEFTSF9ERVZJQ0VfTElCX0hfDQorI2RlZmluZSBDQURF TkNFX1FTUElfTk9SX0ZMQVNIX0RFVklDRV9MSUJfSF8NCisNCisjZGVmaW5lIE5PUl9GTEFTSF9F UkFTRV9SRVRSWSAxMA0KKw0KKy8vIFFTUEkgQ29udHJvbGxlciBkZWZpbmVzDQorI2RlZmluZSBD RE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX09GRlNFVCAweDkwDQorI2RlZmluZSBDRE5TX1FT UElfRkxBU0hfQ01EX0NUUkxfUkVHX0VYRUNVVEUgMHgwMQ0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZM QVNIX0NNRF9DVFJMX1JFR19BRERSX0VOQUJMRSAweDAxDQorI2RlZmluZSBDRE5TX1FTUElfRkxB U0hfQ01EX0NUUkxfUkVHX0FERFJfQklUX1BPUyAxOQ0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNI X0NNRF9DVFJMX1JFR19BRERSX0JZVEVfQklUX1BPUyAxNg0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZM QVNIX0NNRF9DVFJMX1JFR19TVEFUVVNfQklUIDB4MDINCisjZGVmaW5lIENETlNfUVNQSV9GTEFT SF9DTURfQ1RSTF9SRUdfT1BDT0RFX0JJVF9QT1MgMjQNCisjZGVmaW5lIENETlNfUVNQSV9GTEFT SF9DTURfQ1RSTF9SRUdfUkVBRF9FTkFCTEUgMHgwMQ0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNI X0NNRF9DVFJMX1JFR19SRUFEX0JZVEVfM0IgMHgwMg0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNI X0NNRF9DVFJMX1JFR19SRUFERU5fQklUX1BPUyAyMw0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNI X0NNRF9DVFJMX1JFR19SRUFEQllURV9CSVRfUE9TIDIwDQorI2RlZmluZSBDRE5TX1FTUElfRkxB U0hfQ01EX0NUUkxfUkVHX0RVTU1ZXzhDIDB4OA0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NN RF9DVFJMX1JFR19EVU1NWV9CSVRfUE9TIDcNCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURf Q1RSTF9SRUdfTlVNX0RBVEFfQllURVMoeCkgKCh4IC0gMSkgPDwgQ0ROU19RU1BJX0ZMQVNIX0NN RF9DVFJMX1JFR19SRUFEQllURV9CSVRfUE9TKQ0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NN RF9DVFJMX1JFR19OVU1fQUREUl9CWVRFUyh4KSAoKHggLSAxKSA8PCBDRE5TX1FTUElfRkxBU0hf Q01EX0NUUkxfUkVHX0FERFJfQllURV9CSVRfUE9TKQ0KKw0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZM QVNIX0NNRF9SRUFEX0RBVEFfUkVHX09GRlNFVCAweEEwDQorDQorI2RlZmluZSBDRE5TX1FTUElf RkxBU0hfQ01EX0FERFJfUkVHX09GRlNFVCAweDk0DQorDQorI2RlZmluZSBDRE5TX1FTUElfRkxB U0hfQ01EX1NUQVRVU19QT0xMX1RJTUVPVVRfTVMgMTAwMHUgLy8gQ29tbWFuZCBTdGF0dXMgUmVn aXN0ZXIgcmVhZCB0aW1lb3V0DQorDQorI2RlZmluZSBTUElOT1JfU1JfV0lQIEJJVDAgLy8gV3Jp dGUgaW4gcHJvZ3Jlc3MNCisNCisjZGVmaW5lIFNQSU5PUl9PUF9XUkVOIDB4MDYgLy8gV3JpdGUg ZW5hYmxlDQorI2RlZmluZSBTUElOT1JfT1BfQkVfNEsgMHgyMCAvLyBFcmFzZSA0S2lCIGJsb2Nr DQorI2RlZmluZSBTUElOT1JfT1BfUkRJRCAweDlmIC8vIFJlYWQgSkVERUMgSUQNCisjZGVmaW5l IFNQSU5PUl9PUF9SRFNSIDB4MDUgLy8gUmVhZCBzdGF0dXMgcmVnaXN0ZXINCisNCisjZGVmaW5l IFNQSU5PUl9TUl9XSVBfUE9MTF9USU1FT1VUX01TIDEwMDB1IC8vIFN0YXR1cyBSZWdpc3RlciBy ZWFkIHRpbWVvdXQNCisNCisjZW5kaWYgLyogQ0FERU5DRV9RU1BJX05PUl9GTEFTSF9ERVZJQ0Vf TElCX0hfICovDQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlO b3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmMgYi9QbGF0Zm9y bS9BUk0vTGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9y Rmxhc2hEZXZpY2VMaWIuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAw MC4uZjk3YzhkNTFmZDQ4DQotLS0gL2Rldi9udWxsDQorKysgYi9QbGF0Zm9ybS9BUk0vTGlicmFy eS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VM aWIuYw0KQEAgLTAsMCArMSwxMDM0IEBADQorLyoqIEBmaWxlDQorDQorIENvcHlyaWdodCAoYykg MjAyNCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQorDQorIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQorDQorKiovDQorDQorI2luY2x1 ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGli Lmg+DQorI2luY2x1ZGUgPExpYnJhcnkvSW9MaWIuaD4NCisjaW5jbHVkZSA8TGlicmFyeS9NZW1v cnlBbGxvY2F0aW9uTGliLmg+DQorI2luY2x1ZGUgPExpYnJhcnkvTm9yRmxhc2hEZXZpY2VMaWIu aD4NCisjaW5jbHVkZSA8TGlicmFyeS9UaW1lckxpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1Vl ZmlMaWIuaD4NCisNCisjaW5jbHVkZSAiQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi5oIg0K Kw0KKy8qKg0KKyBDb252ZXJ0cyBtaWxsaXNlY29uZHMgaW50byBudW1iZXIgb2YgdGlja3Mgb2Yg dGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIuDQorDQorIEBwYXJhbVtpbl0gTWlsbGlzZWNvbmRzIE1p bGxpc2Vjb25kcyB0byBjb252ZXJ0IGludG8gdGlja3MuDQorDQorIEByZXR2YWwgTWlsbGlzZWNv bmRzIGV4cHJlc3NlZCBhcyBudW1iZXIgb2YgdGlja3MuDQorDQorKiovDQorU1RBVElDDQorVUlO VDY0DQorTWlsbGlTZWNvbmRzVG9UaWNrcyAoDQorIElOIFVJTlROIE1pbGxpc2Vjb25kcw0KKyAp DQorew0KKyBVSU5UNjQgTmFub1NlY29uZHNQZXJUaWNrOw0KKyBVSU5UNjQgTmFub1NlY29uZHM7 DQorDQorIE5hbm9TZWNvbmRzUGVyVGljayA9IEdldFRpbWVJbk5hbm9TZWNvbmQgKDEpOw0KKyBO YW5vU2Vjb25kcyA9IE11bHRVNjR4MzIgKE1pbGxpc2Vjb25kcywgMTAwMDAwMCk7DQorDQorIHJl dHVybiBEaXZVNjR4NjRSZW1haW5kZXIgKE5hbm9TZWNvbmRzLCBOYW5vU2Vjb25kc1BlclRpY2ss IE5VTEwpOw0KK30NCisNCisvKioNCisgRXhlY3V0ZSBGbGFzaCBjbWQgY3RybCBhbmQgUmVhZCBT dGF0dXMuDQorDQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIEluc3RhbmNlLg0KKyBA cGFyYW1baW5dIFZhbCBWYWx1ZSB0byBiZSB3cml0dGVuIHRvIEZsYXNoIGNtZCBjdHJsIFJlZ2lz dGVyLg0KKw0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFJlcXVlc3QgaXMgZXhlY3V0ZWQgc3VjY2Vz c2Z1bGx5Lg0KKyBAcmV0dmFsIEVGSV9USU1FT1VUIENvbW1hbmQgZXhlY3V0aW9uIHRpbWVkIG91 dC4NCisNCisqKi8NCitTVEFUSUMNCitFRklfU1RBVFVTDQorQ2Ruc1FzcGlFeGVjdXRlQ29tbWFu ZCAoDQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5zdGFuY2UsDQorIElOIFVJTlQzMiBWYWwN CisgKQ0KK3sNCisgLy8gU2V0IHRoZSBjb21tYW5kDQorIE1taW9Xcml0ZTMyICgNCisgSW5zdGFu Y2UtPkhvc3RDb250cm9sbGVyQmFzZUFkZHJlc3MgKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxf UkVHX09GRlNFVCwNCisgVmFsDQorICk7DQorIC8vIEV4ZWN1dGUgdGhlIGNvbW1hbmQNCisgTW1p b1dyaXRlMzIgKA0KKyBJbnN0YW5jZS0+SG9zdENvbnRyb2xsZXJCYXNlQWRkcmVzcyArIENETlNf UVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfT0ZGU0VULA0KKyBWYWwgfCBDRE5TX1FTUElfRkxBU0hf Q01EX0NUUkxfUkVHX0VYRUNVVEUNCisgKTsNCisNCisgQ09OU1QgVUlOVDY0IFRpY2tPdXQgPQ0K KyBHZXRQZXJmb3JtYW5jZUNvdW50ZXIgKCkgKw0KKyBNaWxsaVNlY29uZHNUb1RpY2tzIChDRE5T X1FTUElfRkxBU0hfQ01EX1NUQVRVU19QT0xMX1RJTUVPVVRfTVMpOw0KKw0KKyAvLyBXYWl0IHVu dGlsIGNvbW1hbmQgaGFzIGJlZW4gZXhlY3V0ZWQNCisgZG8gew0KKyBpZiAoR2V0UGVyZm9ybWFu Y2VDb3VudGVyICgpID4gVGlja091dCkgew0KKyBERUJVRyAoKA0KKyBERUJVR19FUlJPUiwNCisg IkNkbnNRc3BpRXhlY3V0ZUNvbW1hbmQ6IFRpbWVvdXQgd2FpdGluZyBmb3IgY29tbWFuZCBleGVj dXRpb24uXG4iDQorICkpOw0KKyByZXR1cm4gRUZJX1RJTUVPVVQ7DQorIH0NCisgfSB3aGlsZSAo KE1taW9SZWFkMzIgKA0KKyBJbnN0YW5jZS0+SG9zdENvbnRyb2xsZXJCYXNlQWRkcmVzcyArDQor IENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfT0ZGU0VUDQorICkgJg0KKyBDRE5TX1FTUElf RkxBU0hfQ01EX0NUUkxfUkVHX1NUQVRVU19CSVQpID09DQorIENETlNfUVNQSV9GTEFTSF9DTURf Q1RSTF9SRUdfU1RBVFVTX0JJVA0KKyApOw0KKw0KKyByZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0K Kw0KKy8qKg0KKyBQb2xsIFN0YXR1cyByZWdpc3RlciBmb3IgTk9SIGZsYXNoIGVyYXNlL3dyaXRl IGNvbXBsZXRpb24uDQorDQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIEluc3RhbmNl Lg0KKw0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFJlcXVlc3QgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1 bGx5Lg0KKyBAcmV0dmFsIEVGSV9USU1FT1VUIE9wZXJhdGlvbiB0aW1lZCBvdXQuDQorIEByZXR2 YWwgRUZJX0RFVklDRV9FUlJPUiBDb250cm9sbGVyIG9wZXJhdGlvbiBmYWlsZWQuDQorDQorKiov DQorU1RBVElDDQorRUZJX1NUQVRVUw0KK05vckZsYXNoUG9sbFN0YXR1c1JlZ2lzdGVyICgNCisg SU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZQ0KKyApDQorew0KKyBCT09MRUFOIFNSZWdE b25lOw0KKyBVSU5UMzIgdmFsOw0KKw0KKyB2YWwgPSAoU1BJTk9SX09QX1JEU1IgPDwgQ0ROU19R U1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19PUENPREVfQklUX1BPUykgfA0KKyAoQ0ROU19RU1BJX0ZM QVNIX0NNRF9DVFJMX1JFR19SRUFEX0VOQUJMRSA8PA0KKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NU UkxfUkVHX1JFQURFTl9CSVRfUE9TKSB8DQorIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdf TlVNX0RBVEFfQllURVMgKDEpIHwNCisgKENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfRFVN TVlfOEMgPDwNCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19EVU1NWV9CSVRfUE9TKTsN CisNCisgQ09OU1QgVUlOVDY0IFRpY2tPdXQgPQ0KKyBHZXRQZXJmb3JtYW5jZUNvdW50ZXIgKCkg Kw0KKyBNaWxsaVNlY29uZHNUb1RpY2tzIChTUElOT1JfU1JfV0lQX1BPTExfVElNRU9VVF9NUyk7 DQorDQorIGRvIHsNCisgaWYgKEdldFBlcmZvcm1hbmNlQ291bnRlciAoKSA+IFRpY2tPdXQpIHsN CisgREVCVUcgKCgNCisgREVCVUdfRVJST1IsDQorICJOb3JGbGFzaFBvbGxTdGF0dXNSZWdpc3Rl cjogVGltZW91dCB3YWl0aW5nIGZvciBlcmFzZS93cml0ZS5cbiINCisgKSk7DQorIHJldHVybiBF RklfVElNRU9VVDsNCisgfQ0KKw0KKyBpZiAoRUZJX0VSUk9SIChDZG5zUXNwaUV4ZWN1dGVDb21t YW5kIChJbnN0YW5jZSwgdmFsKSkpIHsNCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQorIH0N CisNCisgU1JlZ0RvbmUgPQ0KKyAoTW1pb1JlYWQ4ICgNCisgSW5zdGFuY2UtPkhvc3RDb250cm9s bGVyQmFzZUFkZHJlc3MgKw0KKyBDRE5TX1FTUElfRkxBU0hfQ01EX1JFQURfREFUQV9SRUdfT0ZG U0VUDQorICkNCisgJiBTUElOT1JfU1JfV0lQDQorICkgPT0gMDsNCisgfSB3aGlsZSAoIVNSZWdE b25lKTsNCisNCisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisgQ2hlY2sgd2hl dGhlciBOT1IgZmxhc2ggb3BlcmF0aW9ucyBhcmUgTG9ja2VkLg0KKw0KKyBAcGFyYW1baW5dIElu c3RhbmNlIE5PUiBmbGFzaCBJbnN0YW5jZS4NCisgQHBhcmFtW2luXSBCbG9ja0FkZHJlc3MgQmxv Y2tBZGRyZXNzIGluIE5PUiBmbGFzaCBkZXZpY2UuDQorDQorIEByZXR2YWwgRkFMU0UgSWYgTk9S IGZsYXNoIGlzIG5vdCBsb2NrZWQuDQorKiovDQorU1RBVElDDQorQk9PTEVBTg0KK05vckZsYXNo QmxvY2tJc0xvY2tlZCAoDQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5zdGFuY2UsDQorIElO IFVJTlROIEJsb2NrQWRkcmVzcw0KKyApDQorew0KKyByZXR1cm4gRkFMU0U7DQorfQ0KKw0KKy8q Kg0KKyBVbmxvY2sgTk9SIGZsYXNoIG9wZXJhdGlvbnMgb24gZ2l2ZW4gYmxvY2suDQorDQorIEBw YXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIGluc3RhbmNlLg0KKyBAcGFyYW1baW5dIEJsb2Nr QWRkcmVzcyBCbG9ja0FkZHJlc3MgaW4gTk9SIGZsYXNoIGRldmljZS4NCisNCisgQHJldHZhbCBF RklfU1VDQ0VTUyBOT1IgZmxhc2ggb3BlcmF0aW9ucyB1bmxvY2tlZC4NCisqKi8NCitFRklfU1RB VFVTDQorTm9yRmxhc2hVbmxvY2tTaW5nbGVCbG9jayAoDQorIElOIE5PUl9GTEFTSF9JTlNUQU5D RSAqSW5zdGFuY2UsDQorIElOIFVJTlROIEJsb2NrQWRkcmVzcw0KKyApDQorew0KKyByZXR1cm4g RUZJX1NVQ0NFU1M7DQorfQ0KKw0KKy8qKg0KKyBVbmxvY2sgTk9SIGZsYXNoIG9wZXJhdGlvbnMg aWYgaXQgaXMgbmVjZXNzYXJ5Lg0KKw0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBp bnN0YW5jZS4NCisgQHBhcmFtW2luXSBCbG9ja0FkZHJlc3MgQmxvY2tBZGRyZXNzIGluIE5PUiBm bGFzaCBkZXZpY2UuDQorDQorIEByZXR2YWwgRUZJX1NVQ0NFU1MgUmVxdWVzdCBpcyBleGVjdXRl ZCBzdWNjZXNzZnVsbHkuDQorKiovDQorRUZJX1NUQVRVUw0KK05vckZsYXNoVW5sb2NrU2luZ2xl QmxvY2tJZk5lY2Vzc2FyeSAoDQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5zdGFuY2UsDQor IElOIFVJTlROIEJsb2NrQWRkcmVzcw0KKyApDQorew0KKyBFRklfU1RBVFVTIFN0YXR1czsNCisN CisgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQorDQorIGlmICghTm9yRmxhc2hCbG9ja0lzTG9ja2Vk IChJbnN0YW5jZSwgQmxvY2tBZGRyZXNzKSkgew0KKyBTdGF0dXMgPSBOb3JGbGFzaFVubG9ja1Np bmdsZUJsb2NrIChJbnN0YW5jZSwgQmxvY2tBZGRyZXNzKTsNCisgfQ0KKw0KKyByZXR1cm4gU3Rh dHVzOw0KK30NCisNCisvKioNCisgRW5hYmxlIHdyaXRlIHRvIE5PUiBmbGFzaCBkZXZpY2UuDQor DQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIGluc3RhbmNlLg0KKw0KKyBAcmV0dmFs IEVGSV9TVUNDRVNTIFJlcXVlc3QgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Lg0KKyBAcmV0dmFs IEVGSV9ERVZJQ0VfRVJST1IgVGhlIGRldmljZSByZXBvcnRlZCBhbiBlcnJvci4NCisqKi8NCitT VEFUSUMNCitFRklfU1RBVFVTDQorTm9yRmxhc2hFbmFibGVXcml0ZSAoDQorIElOIE5PUl9GTEFT SF9JTlNUQU5DRSAqSW5zdGFuY2UNCisgKQ0KK3sNCisgVUlOVDMyIHZhbDsNCisNCisgREVCVUcg KChERUJVR19JTkZPLCAiTm9yRmxhc2hFbmFibGVXcml0ZSgpXG4iKSk7DQorIHZhbCA9IChTUElO T1JfT1BfV1JFTiA8PCBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX09QQ09ERV9CSVRfUE9T KTsNCisgaWYgKEVGSV9FUlJPUiAoQ2Ruc1FzcGlFeGVjdXRlQ29tbWFuZCAoSW5zdGFuY2UsIHZh bCkpKSB7DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KKyB9DQorDQorIHJldHVybiBFRklf U1VDQ0VTUzsNCit9DQorDQorLyoqDQorIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gcHJlc3VtZXMg dGhhdCB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVlbiB1bmxvY2tlZC4NCisNCisgQHBhcmFtW2lu XSBJbnN0YW5jZSBOT1IgZmxhc2ggaW5zdGFuY2UuDQorIEBwYXJhbVtpbl0gQmxvY2tBZGRyZXNz IEJsb2NrIGFkZHJlc3Mgd2l0aGluIHRoZSB2YXJpYWJsZSByZWdpb24uDQorDQorIEByZXR2YWwg RUZJX1NVQ0NFU1MgUmVxdWVzdCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQorIEByZXR2YWwg RUZJX0RFVklDRV9FUlJPUiBUaGUgZGV2aWNlIHJlcG9ydGVkIGFuIGVycm9yLg0KKyAqKi8NCitF RklfU1RBVFVTDQorTm9yRmxhc2hFcmFzZVNpbmdsZUJsb2NrICgNCisgSU4gTk9SX0ZMQVNIX0lO U1RBTkNFICpJbnN0YW5jZSwNCisgSU4gVUlOVE4gQmxvY2tBZGRyZXNzDQorICkNCit7DQorIFVJ TlQzMiBEZXZDb25maWdWYWw7DQorIFVJTlQzMiBFcmFzZU9mZnNldDsNCisNCisgRXJhc2VPZmZz ZXQgPSAweDA7DQorDQorIERFQlVHICgoDQorIERFQlVHX0lORk8sDQorICJOb3JGbGFzaEVyYXNl U2luZ2xlQmxvY2soQmxvY2tBZGRyZXNzPTB4JTA4eClcbiIsDQorIEJsb2NrQWRkcmVzcw0KKyAp KTsNCisNCisgaWYgKEVGSV9FUlJPUiAoTm9yRmxhc2hFbmFibGVXcml0ZSAoSW5zdGFuY2UpKSkg ew0KKyByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCisgfQ0KKw0KKyBFcmFzZU9mZnNldCA9IEJs b2NrQWRkcmVzcyAtIEluc3RhbmNlLT5EZXZpY2VCYXNlQWRkcmVzczsNCisNCisgTW1pb1dyaXRl MzIgKA0KKyBJbnN0YW5jZS0+SG9zdENvbnRyb2xsZXJCYXNlQWRkcmVzcyArIENETlNfUVNQSV9G TEFTSF9DTURfQUREUl9SRUdfT0ZGU0VULA0KKyBFcmFzZU9mZnNldA0KKyApOw0KKw0KKyBEZXZD b25maWdWYWwgPSAoU1BJTk9SX09QX0JFXzRLIDw8IENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9S RUdfT1BDT0RFX0JJVF9QT1MpIHwNCisgKENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfQURE Ul9FTkFCTEUgPDwNCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19BRERSX0JJVF9QT1Mp IHwNCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19OVU1fQUREUl9CWVRFUyAoMyk7DQor DQorIGlmIChFRklfRVJST1IgKENkbnNRc3BpRXhlY3V0ZUNvbW1hbmQgKEluc3RhbmNlLCBEZXZD b25maWdWYWwpKSkgew0KKyByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCisgfQ0KKw0KKyBpZiAo RUZJX0VSUk9SIChOb3JGbGFzaFBvbGxTdGF0dXNSZWdpc3RlciAoSW5zdGFuY2UpKSkgew0KKyBy ZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCisgfQ0KKw0KKyByZXR1cm4gRUZJX1NVQ0NFU1M7DQor fQ0KKw0KKy8qKg0KKyBUaGlzIGZ1bmN0aW9uIHVubG9ja3MgYW5kIGVyYXNlcyBhbiBlbnRpcmUg Tk9SIEZsYXNoIGJsb2NrLg0KKw0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBJbnN0 YW5jZSBvZiB2YXJpYWJsZSBzdG9yZSByZWdpb24uDQorIEBwYXJhbVtpbl0gQmxvY2tBZGRyZXNz IEJsb2NrIGFkZHJlc3Mgd2l0aGluIHRoZSB2YXJpYWJsZSBzdG9yZSByZWdpb24uDQorDQorIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgRXJhc2UgYW5kIHVubG9jayBzdWNjZXNzZnVsbHkgY29tcGxldGVk Lg0KKyBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgVGhlIGRldmljZSByZXBvcnRlZCBhbiBlcnJv ci4NCisqKi8NCitFRklfU1RBVFVTDQorTm9yRmxhc2hVbmxvY2tBbmRFcmFzZVNpbmdsZUJsb2Nr ICgNCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSwNCisgSU4gVUlOVE4gQmxvY2tB ZGRyZXNzDQorICkNCit7DQorIEVGSV9TVEFUVVMgU3RhdHVzOw0KKyBVSU5UTiBJbmRleDsNCisg RUZJX1RQTCBPcmlnaW5hbFRQTDsNCisNCisgTm9yRmxhc2hMb2NrICgmT3JpZ2luYWxUUEwpOw0K Kw0KKyBJbmRleCA9IDA7DQorIGRvIHsNCisgLy8gVW5sb2NrIHRoZSBibG9jayBpZiB3ZSBoYXZl IHRvDQorIFN0YXR1cyA9IE5vckZsYXNoVW5sb2NrU2luZ2xlQmxvY2tJZk5lY2Vzc2FyeSAoSW5z dGFuY2UsIEJsb2NrQWRkcmVzcyk7DQorIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgYnJl YWs7DQorIH0NCisNCisgU3RhdHVzID0gTm9yRmxhc2hFcmFzZVNpbmdsZUJsb2NrIChJbnN0YW5j ZSwgQmxvY2tBZGRyZXNzKTsNCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyBicmVhazsN CisgfQ0KKw0KKyBJbmRleCsrOw0KKyB9IHdoaWxlICgoSW5kZXggPCBOT1JfRkxBU0hfRVJBU0Vf UkVUUlkpICYmIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpKTsNCltTQU1JXSBJIHRoaW5rIHRoZXJl IGlzIHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSBsb29wIGNvbmRpdGlvbi4NCklmIEkgYW0gbm90 IHdyb25nLCB0aGUgY2hlY2sgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykgZG9lcyBub3Qgc2VlbSB0 byBoYXZlIGFueSBlZmZlY3QgYXMgdGhlIGNvZGUgaW4gdGhlIHdoaWxlIGxvb3Agd2lsbCBicmVh ayBvdXQgb2YgdGhlcmUgaXMgYW4gZXJyb3IuDQpDYW4geW91IGNoZWNrLCBwbGVhc2U/DQpbL1NB TUldDQoNCg0KKw0KKyBpZiAoSW5kZXggPT0gTk9SX0ZMQVNIX0VSQVNFX1JFVFJZKSB7DQorIERF QlVHICgoDQorIERFQlVHX0VSUk9SLA0KKyAiRXJhc2VTaW5nbGVCbG9jayhCbG9ja0FkZHJlc3M9 MHglMDh4OiBCbG9jayBMb2NrZWQgRXJyb3IgIg0KKyAiKHRyeSB0byBlcmFzZSAlZCB0aW1lcylc biIsDQorIEJsb2NrQWRkcmVzcywNCisgSW5kZXgNCisgKSk7DQorIH0NCisNCisgTm9yRmxhc2hV bmxvY2sgKE9yaWdpbmFsVFBMKTsNCisNCisgcmV0dXJuIFN0YXR1czsNCit9DQorDQorLyoqDQor IFdyaXRlIGEgc2luZ2xlIHdvcmQgdG8gZ2l2ZW4gbG9jYXRpb24uDQorDQorIEBwYXJhbVtpbl0g SW5zdGFuY2UgTk9SIGZsYXNoIEluc3RhbmNlIG9mIHZhcmlhYmxlIHN0b3JlIHJlZ2lvbi4NCisg QHBhcmFtW2luXSBXb3JkQWRkcmVzcyBUaGUgYWRkcmVzcyBpbiBOT1IgZmxhc2ggdG8gd3JpdGUg Z2l2ZW4gd29yZC4NCisgQHBhcmFtW2luXSBXcml0ZURhdGEgVGhlIGRhdGEgdG8gd3JpdGUgaW50 byBOT1IgZmxhc2ggbG9jYXRpb24uDQorDQorIEByZXR2YWwgRUZJX1NVQ0NFU1MgV3JpdGUgaXMg Y29tcGxldGUuDQorIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiBUaGUgZGV2aWNlIHJlcG9ydGVk IGFuIGVycm9yLg0KKyoqLw0KK0VGSV9TVEFUVVMNCitOb3JGbGFzaFdyaXRlU2luZ2xlV29yZCAo DQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5zdGFuY2UsDQorIElOIFVJTlROIFdvcmRBZGRy ZXNzLA0KKyBJTiBVSU5UMzIgV3JpdGVEYXRhDQorICkNCit7DQorIERFQlVHICgoDQorIERFQlVH X0lORk8sDQorICJOb3JGbGFzaFdyaXRlU2luZ2xlV29yZChXb3JkQWRkcmVzcz0weCUwOHgsIFdy aXRlRGF0YT0weCUwOHgpXG4iLA0KKyBXb3JkQWRkcmVzcywNCisgV3JpdGVEYXRhDQorICkpOw0K Kw0KKyBpZiAoRUZJX0VSUk9SIChOb3JGbGFzaEVuYWJsZVdyaXRlIChJbnN0YW5jZSkpKSB7DQor IHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KKyB9DQorDQorIE1taW9Xcml0ZTMyIChXb3JkQWRk cmVzcywgV3JpdGVEYXRhKTsNCisgaWYgKEVGSV9FUlJPUiAoTm9yRmxhc2hQb2xsU3RhdHVzUmVn aXN0ZXIgKEluc3RhbmNlKSkpIHsNCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQorIH0NCisN CisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisgV3JpdGUgYSBmdWxsIGJsb2Nr IHRvIGdpdmVuIGxvY2F0aW9uLg0KKw0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBJ bnN0YW5jZSBvZiB2YXJpYWJsZSBzdG9yZSByZWdpb24uDQorIEBwYXJhbVtpbl0gTGJhIFRoZSBs b2dpY2FsIGJsb2NrIGFkZHJlc3MgaW4gTk9SIGZsYXNoLg0KKyBAcGFyYW1baW5dIERhdGFCdWZm ZXIgVGhlIGRhdGEgdG8gd3JpdGUgaW50byBOT1IgZmxhc2ggbG9jYXRpb24uDQorIEBwYXJhbVtp bl0gQmxvY2tTaXplSW5Xb3JkcyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlLg0KKw0KKyBA cmV0dmFsIEVGSV9TVUNDRVNTIFdyaXRlIGlzIGNvbXBsZXRlLg0KKyBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgVGhlIGRldmljZSByZXBvcnRlZCBhbiBlcnJvci4NCisqKi8NCitFRklfU1RBVFVT DQorTm9yRmxhc2hXcml0ZUZ1bGxCbG9jayAoDQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5z dGFuY2UsDQorIElOIEVGSV9MQkEgTGJhLA0KKyBJTiBVSU5UMzIgKkRhdGFCdWZmZXIsDQorIElO IFVJTlQzMiBCbG9ja1NpemVJbldvcmRzDQorICkNCit7DQorIEVGSV9TVEFUVVMgU3RhdHVzOw0K KyBVSU5UTiBXb3JkQWRkcmVzczsNCisgVUlOVDMyIFdvcmRJbmRleDsNCisgVUlOVE4gQmxvY2tB ZGRyZXNzOw0KKyBFRklfVFBMIE9yaWdpbmFsVFBMOw0KKw0KKyBTdGF0dXMgPSBFRklfU1VDQ0VT UzsNCisNCisgLy8gR2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBibG9jaw0KKyBCbG9j a0FkZHJlc3MgPSBHRVRfTk9SX0JMT0NLX0FERFJFU1MgKA0KKyBJbnN0YW5jZS0+UmVnaW9uQmFz ZUFkZHJlc3MsDQorIExiYSwNCisgQmxvY2tTaXplSW5Xb3JkcyAqIDQNCisgKTsNCisNCisgLy8g U3RhcnQgd3JpdGluZyBmcm9tIHRoZSBmaXJzdCBhZGRyZXNzIGF0IHRoZSBzdGFydCBvZiB0aGUg YmxvY2sNCisgV29yZEFkZHJlc3MgPSBCbG9ja0FkZHJlc3M7DQorDQorIE5vckZsYXNoTG9jayAo Jk9yaWdpbmFsVFBMKTsNCisNCisgU3RhdHVzID0gTm9yRmxhc2hVbmxvY2tBbmRFcmFzZVNpbmds ZUJsb2NrIChJbnN0YW5jZSwgQmxvY2tBZGRyZXNzKTsNCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KKyBERUJVRyAoKA0KKyBERUJVR19FUlJPUiwNCisgIldyaXRlU2luZ2xlQmxvY2s6IEVS Uk9SIC0gRmFpbGVkIHRvIFVubG9jayBhbmQgRXJhc2UgdGhlIHNpbmdsZSAiDQorICJibG9jayBh dCAweCVYXG4iLA0KKyBCbG9ja0FkZHJlc3MNCisgKSk7DQorIGdvdG8gZXhpdF9oYW5kbGVyOw0K KyB9DQorDQorIGZvciAoV29yZEluZGV4ID0gMDsNCisgV29yZEluZGV4IDwgQmxvY2tTaXplSW5X b3JkczsNCisgV29yZEluZGV4KyssIERhdGFCdWZmZXIrKywgV29yZEFkZHJlc3MgKz0gNCkNCisg ew0KKyBTdGF0dXMgPSBOb3JGbGFzaFdyaXRlU2luZ2xlV29yZCAoSW5zdGFuY2UsIFdvcmRBZGRy ZXNzLCAqRGF0YUJ1ZmZlcik7DQorIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgZ290byBl eGl0X2hhbmRsZXI7DQorIH0NCisgfQ0KKw0KK2V4aXRfaGFuZGxlcjoNCisgTm9yRmxhc2hVbmxv Y2sgKE9yaWdpbmFsVFBMKTsNCisNCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyBERUJV RyAoKA0KKyBERUJVR19FUlJPUiwNCisgIk5PUiBGTEFTSCBQcm9ncmFtbWluZyBbV3JpdGVTaW5n bGVCbG9ja10gZmFpbGVkIGF0IGFkZHJlc3MgMHglMDh4LiAiDQorICJFeGl0IFN0YXR1cyA9ICVy LlxuIiwNCisgV29yZEFkZHJlc3MsDQorIFN0YXR1cw0KKyApKTsNCisgfQ0KKw0KKyByZXR1cm4g U3RhdHVzOw0KK30NCisNCisvKioNCisgV3JpdGUgbXVsdGlwbGUgYmxvY2tzLg0KKw0KKyBAcGFy YW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBJbnN0YW5jZSBvZiB2YXJpYWJsZSBzdG9yZSByZWdp b24uDQorIEBwYXJhbVtpbl0gTGJhIFRoZSBzdGFydGluZyBsb2dpY2FsIGJsb2NrIGluZGV4Lg0K KyBAcGFyYW1baW5dIEJ1ZmZlclNpemVJbkJ5dGVzIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gd3Jp dGUuDQorIEBwYXJhbVtpbl0gQnVmZmVyIFRoZSBwb2ludGVyIHRvIGEgY2FsbGVyLWFsbG9jYXRl ZCBidWZmZXIgdGhhdA0KKyBjb250YWlucyB0aGUgc291cmNlIGZvciB0aGUgd3JpdGUuDQorDQor IEByZXR2YWwgRUZJX1NVQ0NFU1MgV3JpdGUgaXMgY29tcGxldGUuDQorIEByZXR2YWwgRUZJX0lO VkFMSURfUEFSQU1FVEVSIEludmFsaWQgcGFyYW1ldGVycyBwYXNzZWQuDQorIEByZXR2YWwgRUZJ X0JBRF9CVUZGRVJfU0laRSBJbnZhbGlkIGJ1ZmZlciBzaXplIHBhc3NlZC4NCisqKi8NCitFRklf U1RBVFVTDQorTm9yRmxhc2hXcml0ZUJsb2NrcyAoDQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAq SW5zdGFuY2UsDQorIElOIEVGSV9MQkEgTGJhLA0KKyBJTiBVSU5UTiBCdWZmZXJTaXplSW5CeXRl cywNCisgSU4gVk9JRCAqQnVmZmVyDQorICkNCit7DQorIFVJTlQzMiAqV3JpdGVCdWZmZXI7DQor IEVGSV9TVEFUVVMgU3RhdHVzOw0KKyBFRklfTEJBIEN1cnJlbnRCbG9jazsNCisgVUlOVDMyIEJs b2NrU2l6ZUluV29yZHM7DQorIFVJTlQzMiBOdW1CbG9ja3M7DQorIFVJTlQzMiBCbG9ja0NvdW50 Ow0KKw0KKyBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCisgLy8gVGhlIGJ1ZmZlciBtdXN0IGJlIHZh bGlkDQorIGlmIChCdWZmZXIgPT0gTlVMTCkgew0KKyByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KKyB9DQorDQorIC8vIFdlIG11c3QgaGF2ZSBzb21lIGJ5dGVzIHRvIHJlYWQNCisgREVC VUcgKCgNCisgREVCVUdfSU5GTywNCisgIk5vckZsYXNoV3JpdGVCbG9ja3M6IEJ1ZmZlclNpemVJ bkJ5dGVzPTB4JXhcbiIsDQorIEJ1ZmZlclNpemVJbkJ5dGVzDQorICkpOw0KKyBpZiAoQnVmZmVy U2l6ZUluQnl0ZXMgPT0gMCkgew0KKyByZXR1cm4gRUZJX0JBRF9CVUZGRVJfU0laRTsNCisgfQ0K Kw0KKyAvLyBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUg YmxvY2sgc2l6ZQ0KKyBERUJVRyAoKA0KKyBERUJVR19JTkZPLA0KKyAiTm9yRmxhc2hXcml0ZUJs b2NrczogQmxvY2tTaXplIGluIGJ5dGVzID0weCV4XG4iLA0KKyBJbnN0YW5jZS0+TWVkaWEuQmxv Y2tTaXplDQorICkpOw0KKyBpZiAoKEJ1ZmZlclNpemVJbkJ5dGVzICUgSW5zdGFuY2UtPk1lZGlh LkJsb2NrU2l6ZSkgIT0gMCkgew0KKyByZXR1cm4gRUZJX0JBRF9CVUZGRVJfU0laRTsNCisgfQ0K Kw0KKyAvLyBBbGwgYmxvY2tzIG11c3QgYmUgd2l0aGluIHRoZSBkZXZpY2UNCisgTnVtQmxvY2tz ID0gKChVSU5UMzIpQnVmZmVyU2l6ZUluQnl0ZXMpIC8gSW5zdGFuY2UtPk1lZGlhLkJsb2NrU2l6 ZTsNCisNCisgREVCVUcgKCgNCisgREVCVUdfSU5GTywNCisgIk5vckZsYXNoV3JpdGVCbG9ja3M6 IE51bUJsb2Nrcz0lZCwgTGFzdEJsb2NrPSVsZCwgTGJhPSVsZC5cbiIsDQorIE51bUJsb2NrcywN CisgSW5zdGFuY2UtPk1lZGlhLkxhc3RCbG9jaywNCisgTGJhDQorICkpOw0KKw0KKyBpZiAoKExi YSArIE51bUJsb2NrcykgPiAoSW5zdGFuY2UtPk1lZGlhLkxhc3RCbG9jayArIDEpKSB7DQorIERF QlVHICgoDQorIERFQlVHX0VSUk9SLA0KKyAiTm9yRmxhc2hXcml0ZUJsb2NrczogRVJST1IgLSBX cml0ZSB3aWxsIGV4Y2VlZCBsYXN0IGJsb2NrLlxuIg0KKyApKTsNCisgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCisgfQ0KKw0KKyBCbG9ja1NpemVJbldvcmRzID0gSW5zdGFuY2UtPk1l ZGlhLkJsb2NrU2l6ZSAvIDQ7DQorDQorIC8vIEJlY2F1c2UgdGhlIHRhcmdldCAqQnVmZmVyIGlz IGEgcG9pbnRlciB0byBWT0lELCB3ZSBtdXN0IHB1dA0KKyAvLyBhbGwgdGhlIGRhdGEgaW50byBh IHBvaW50ZXIgdG8gYSBwcm9wZXIgZGF0YSB0eXBlLCBzbyB1c2UgKldyaXRlQnVmZmVyDQorIFdy aXRlQnVmZmVyID0gKFVJTlQzMiAqKUJ1ZmZlcjsNCisNCisgQ3VycmVudEJsb2NrID0gTGJhOw0K KyBmb3IgKEJsb2NrQ291bnQgPSAwOw0KKyBCbG9ja0NvdW50IDwgTnVtQmxvY2tzOw0KKyBCbG9j a0NvdW50KyssIEN1cnJlbnRCbG9jaysrLCBXcml0ZUJ1ZmZlciArPSBCbG9ja1NpemVJbldvcmRz KQ0KKyB7DQorIERFQlVHICgoDQorIERFQlVHX0lORk8sDQorICJOb3JGbGFzaFdyaXRlQmxvY2tz OiBXcml0aW5nIGJsb2NrICMlZFxuIiwNCisgKFVJTlROKUN1cnJlbnRCbG9jaw0KKyApKTsNCisN CisgU3RhdHVzID0gTm9yRmxhc2hXcml0ZUZ1bGxCbG9jayAoDQorIEluc3RhbmNlLA0KKyBDdXJy ZW50QmxvY2ssDQorIFdyaXRlQnVmZmVyLA0KKyBCbG9ja1NpemVJbldvcmRzDQorICk7DQorDQor IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCisgYnJlYWs7DQorIH0NCisgfQ0KKw0KKyBERUJV RyAoKERFQlVHX0lORk8sICJOb3JGbGFzaFdyaXRlQmxvY2tzOiBFeGl0IFN0YXR1cyA9ICVyLlxu IiwgU3RhdHVzKSk7DQorIHJldHVybiBTdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyBSZWFkIG11bHRp cGxlIGJsb2Nrcy4NCisNCisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ug b2YgdmFyaWFibGUgc3RvcmUgcmVnaW9uLg0KKyBAcGFyYW1baW5dIExiYSBUaGUgc3RhcnRpbmcg bG9naWNhbCBibG9jayBpbmRleCB0byByZWFkIGZyb20uDQorIEBwYXJhbVtpbl0gQnVmZmVyU2l6 ZUluQnl0ZXMgVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkLg0KKyBAcGFyYW1bb3V0XSBCdWZm ZXIgVGhlIHBvaW50ZXIgdG8gYSBjYWxsZXItYWxsb2NhdGVkIGJ1ZmZlciB0aGF0DQorIHNob3Vs ZCBiZSBjb3BpZWQgd2l0aCByZWFkIGRhdGEuDQorDQorIEByZXR2YWwgRUZJX1NVQ0NFU1MgUmVh ZCBpcyBjb21wbGV0ZS4NCisgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgSW52YWxpZCBw YXJhbWV0ZXJzIHBhc3NlZC4NCisgQHJldHZhbCBFRklfQkFEX0JVRkZFUl9TSVpFIEludmFsaWQg YnVmZmVyIHNpemUgcGFzc2VkLg0KKyoqLw0KK0VGSV9TVEFUVVMNCitOb3JGbGFzaFJlYWRCbG9j a3MgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLA0KKyBJTiBFRklfTEJBIExi YSwNCisgSU4gVUlOVE4gQnVmZmVyU2l6ZUluQnl0ZXMsDQorIE9VVCBWT0lEICpCdWZmZXINCisg KQ0KK3sNCisgVUlOVDMyIE51bUJsb2NrczsNCisgVUlOVE4gU3RhcnRBZGRyZXNzOw0KKw0KKyBE RUJVRyAoKA0KKyBERUJVR19JTkZPLA0KKyAiTm9yRmxhc2hSZWFkQmxvY2tzOiBCdWZmZXJTaXpl PTB4JXhCIEJsb2NrU2l6ZT0weCV4QiBMYXN0QmxvY2s9JWxkLCAiDQorICJMYmE9JWxkLlxuIiwN CisgQnVmZmVyU2l6ZUluQnl0ZXMsDQorIEluc3RhbmNlLT5NZWRpYS5CbG9ja1NpemUsDQorIElu c3RhbmNlLT5NZWRpYS5MYXN0QmxvY2ssDQorIExiYQ0KKyApKTsNCisNCisgLy8gVGhlIGJ1ZmZl ciBtdXN0IGJlIHZhbGlkDQorIGlmIChCdWZmZXIgPT0gTlVMTCkgew0KKyByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KKyB9DQorDQorIC8vIFJldHVybiBpZiB3ZSBkbyBub3QgaGF2ZSBh bnkgYnl0ZSB0byByZWFkDQorIGlmIChCdWZmZXJTaXplSW5CeXRlcyA9PSAwKSB7DQorIHJldHVy biBFRklfU1VDQ0VTUzsNCisgfQ0KKw0KKyAvLyBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIG11c3Qg YmUgYSBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZQ0KKyBpZiAoKEJ1ZmZlclNpemVJbkJ5dGVz ICUgSW5zdGFuY2UtPk1lZGlhLkJsb2NrU2l6ZSkgIT0gMCkgew0KKyByZXR1cm4gRUZJX0JBRF9C VUZGRVJfU0laRTsNCisgfQ0KKw0KKyBOdW1CbG9ja3MgPSAoKFVJTlQzMilCdWZmZXJTaXplSW5C eXRlcykgLyBJbnN0YW5jZS0+TWVkaWEuQmxvY2tTaXplOw0KKw0KKyBpZiAoKExiYSArIE51bUJs b2NrcykgPiAoSW5zdGFuY2UtPk1lZGlhLkxhc3RCbG9jayArIDEpKSB7DQorIERFQlVHICgoDQor IERFQlVHX0VSUk9SLA0KKyAiTm9yRmxhc2hSZWFkQmxvY2tzOiBFUlJPUiAtIFJlYWQgd2lsbCBl eGNlZWQgbGFzdCBibG9ja1xuIg0KKyApKTsNCisgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCisgfQ0KKw0KKyAvLyBHZXQgdGhlIGFkZHJlc3MgdG8gc3RhcnQgcmVhZGluZyBmcm9tDQor IFN0YXJ0QWRkcmVzcyA9IEdFVF9OT1JfQkxPQ0tfQUREUkVTUyAoDQorIEluc3RhbmNlLT5SZWdp b25CYXNlQWRkcmVzcywNCisgTGJhLA0KKyBJbnN0YW5jZS0+TWVkaWEuQmxvY2tTaXplDQorICk7 DQorDQorIC8vIFJlYWRvdXQgdGhlIGRhdGENCisgQ29weU1lbSAoQnVmZmVyLCAoVUlOVE4gKilT dGFydEFkZHJlc3MsIEJ1ZmZlclNpemVJbkJ5dGVzKTsNCisNCisgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KK30NCisNCisvKioNCisgUmVhZCBmcm9tIE5PUiBmbGFzaC4NCisNCisgQHBhcmFtW2luXSBJ bnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ugb2YgdmFyaWFibGUgc3RvcmUgcmVnaW9uLg0KKyBA cGFyYW1baW5dIExiYSBUaGUgc3RhcnRpbmcgbG9naWNhbCBibG9jayBpbmRleCB0byByZWFkIGZy b20uDQorIEBwYXJhbVtpbl0gT2Zmc2V0IE9mZnNldCBpbnRvIHRoZSBibG9jayBhdCB3aGljaCB0 byBiZWdpbiByZWFkaW5nLg0KKyBAcGFyYW1baW5dIEJ1ZmZlclNpemVJbkJ5dGVzIFRoZSBudW1i ZXIgb2YgYnl0ZXMgdG8gcmVhZC4NCisgQHBhcmFtW291dF0gQnVmZmVyIFRoZSBwb2ludGVyIHRv IGEgY2FsbGVyLWFsbG9jYXRlZCBidWZmZXIgdGhhdA0KKyBzaG91bGQgYmUgY29waWVkIHdpdGgg cmVhZCBkYXRhLg0KKw0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFJlYWQgaXMgY29tcGxldGUuDQor IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEludmFsaWQgcGFyYW1ldGVycyBwYXNzZWQu DQorKiovDQorRUZJX1NUQVRVUw0KK05vckZsYXNoUmVhZCAoDQorIElOIE5PUl9GTEFTSF9JTlNU QU5DRSAqSW5zdGFuY2UsDQorIElOIEVGSV9MQkEgTGJhLA0KKyBJTiBVSU5UTiBPZmZzZXQsDQor IElOIFVJTlROIEJ1ZmZlclNpemVJbkJ5dGVzLA0KKyBPVVQgVk9JRCAqQnVmZmVyDQorICkNCit7 DQorIFVJTlROIFN0YXJ0QWRkcmVzczsNCisNCisgLy8gVGhlIGJ1ZmZlciBtdXN0IGJlIHZhbGlk DQorIGlmIChCdWZmZXIgPT0gTlVMTCkgew0KKyByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVS Ow0KKyB9DQorDQorIC8vIFJldHVybiBpZiB3ZSBkbyBub3QgaGF2ZSBhbnkgYnl0ZSB0byByZWFk DQorIGlmIChCdWZmZXJTaXplSW5CeXRlcyA9PSAwKSB7DQorIHJldHVybiBFRklfU1VDQ0VTUzsN CisgfQ0KKw0KKyBpZiAoKChMYmEgKiBJbnN0YW5jZS0+TWVkaWEuQmxvY2tTaXplKSArIE9mZnNl dCArIEJ1ZmZlclNpemVJbkJ5dGVzKSA+DQorIEluc3RhbmNlLT5TaXplKQ0KKyB7DQorIERFQlVH ICgoDQorIERFQlVHX0VSUk9SLA0KKyAiTm9yRmxhc2hSZWFkOiBFUlJPUiAtIFJlYWQgd2lsbCBl eGNlZWQgZGV2aWNlIHNpemUuXG4iDQorICkpOw0KKyByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1F VEVSOw0KKyB9DQorDQorIC8vIEdldCB0aGUgYWRkcmVzcyB0byBzdGFydCByZWFkaW5nIGZyb20N CisgU3RhcnRBZGRyZXNzID0gR0VUX05PUl9CTE9DS19BRERSRVNTICgNCisgSW5zdGFuY2UtPlJl Z2lvbkJhc2VBZGRyZXNzLA0KKyBMYmEsDQorIEluc3RhbmNlLT5NZWRpYS5CbG9ja1NpemUNCisg KTsNCisNCisgLy8gUmVhZG91dCB0aGUgZGF0YQ0KKyBDb3B5TWVtIChCdWZmZXIsIChVSU5UTiAq KShTdGFydEFkZHJlc3MgKyBPZmZzZXQpLCBCdWZmZXJTaXplSW5CeXRlcyk7DQorDQorIHJldHVy biBFRklfU1VDQ0VTUzsNCit9DQorDQorLyoqDQorIFdyaXRlIGEgZnVsbCBvciBwb3J0aW9uIG9m IGEgYmxvY2suDQorDQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIEluc3RhbmNlIG9m IHZhcmlhYmxlIHN0b3JlIHJlZ2lvbi4NCisgQHBhcmFtW2luXSBMYmEgVGhlIHN0YXJ0aW5nIGxv Z2ljYWwgYmxvY2sgaW5kZXggdG8gd3JpdGUgdG8uDQorIEBwYXJhbVtpbl0gT2Zmc2V0IE9mZnNl dCBpbnRvIHRoZSBibG9jayBhdCB3aGljaCB0byBiZWdpbiB3cml0aW5nLg0KKyBAcGFyYW1baW4s IG91dF0gTnVtQnl0ZXMgVGhlIHRvdGFsIHNpemUgb2YgdGhlIGJ1ZmZlci4NCisgQHBhcmFtW2lu XSBCdWZmZXIgVGhlIHBvaW50ZXIgdG8gYSBjYWxsZXItYWxsb2NhdGVkIGJ1ZmZlciB0aGF0DQor IGNvbnRhaW5zIHRoZSBzb3VyY2UgZm9yIHRoZSB3cml0ZS4NCisNCisgQHJldHZhbCBFRklfU1VD Q0VTUyBXcml0ZSBpcyBjb21wbGV0ZS4NCisgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg SW52YWxpZCBwYXJhbWV0ZXJzIHBhc3NlZC4NCisgQHJldHZhbCBFRklfQkFEX0JVRkZFUl9TSVpF IEJ1ZmZlciBzaXplIG5vdCBlbm91Z2guDQorIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiBUaGUg ZGV2aWNlIHJlcG9ydGVkIGFuIGVycm9yLg0KKyoqLw0KK0VGSV9TVEFUVVMNCitOb3JGbGFzaFdy aXRlU2luZ2xlQmxvY2sgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLA0KKyBJ TiBFRklfTEJBIExiYSwNCisgSU4gVUlOVE4gT2Zmc2V0LA0KKyBJTiBPVVQgVUlOVE4gKk51bUJ5 dGVzLA0KKyBJTiBVSU5UOCAqQnVmZmVyDQorICkNCit7DQorIEVGSV9TVEFUVVMgU3RhdHVzOw0K KyBVSU5UMzIgVG1wOw0KKyBVSU5UMzIgVG1wQnVmOw0KKyBVSU5UMzIgV29yZFRvV3JpdGU7DQor IFVJTlQzMiBNYXNrOw0KKyBCT09MRUFOIERvRXJhc2U7DQorIFVJTlROIEJ5dGVzVG9Xcml0ZTsN CisgVUlOVE4gQ3VyT2Zmc2V0Ow0KKyBVSU5UTiBXb3JkQWRkcjsNCisgVUlOVE4gQmxvY2tTaXpl Ow0KKyBVSU5UTiBCbG9ja0FkZHJlc3M7DQorIFVJTlROIFByZXZCbG9ja0FkZHJlc3M7DQorDQor IGlmIChCdWZmZXIgPT0gTlVMTCkgew0KKyBERUJVRyAoKA0KKyBERUJVR19FUlJPUiwNCisgIk5v ckZsYXNoV3JpdGVTaW5nbGVCbG9jazogRVJST1IgLSBCdWZmZXIgaXMgaW52YWxpZFxuIg0KKyAp KTsNCisgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCisgfQ0KKw0KKyBpZiAoTnVtQnl0 ZXMgPT0gTlVMTCkgew0KKyBERUJVRyAoKA0KKyBERUJVR19FUlJPUiwNCisgIk5vckZsYXNoV3Jp dGVTaW5nbGVCbG9jazogRVJST1IgLSBOdW1CeXRlcyBpcyBpbnZhbGlkXG4iDQorICkpOw0KKyBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KKyB9DQorDQorIFByZXZCbG9ja0FkZHJlc3Mg PSAwOw0KKw0KKyBERUJVRyAoKA0KKyBERUJVR19JTkZPLA0KKyAiTm9yRmxhc2hXcml0ZVNpbmds ZUJsb2NrKFBhcmFtZXRlcnM6IExiYT0lbGQsIE9mZnNldD0weCV4LCAiDQorICIqTnVtQnl0ZXM9 MHgleCwgQnVmZmVyIEAgMHglMDh4KVxuIiwNCisgTGJhLA0KKyBPZmZzZXQsDQorICpOdW1CeXRl cywNCisgQnVmZmVyDQorICkpOw0KKw0KKyAvLyBMb2NhdGUgdGhlIGJsb2NrIHNpemUgdG8gYXZv aWQgZGUtcmVmZXJlbmNpbmcgcG9pbnRlcnMgYWxsIHRoZSB0aW1lDQorIEJsb2NrU2l6ZSA9IElu c3RhbmNlLT5NZWRpYS5CbG9ja1NpemU7DQorDQorIC8vIFRoZSB3cml0ZSBtdXN0IG5vdCBzcGFu IGJsb2NrIGJvdW5kYXJpZXMuDQorIC8vIFdlIG5lZWQgdG8gY2hlY2sgZWFjaCB2YXJpYWJsZSBp bmRpdmlkdWFsbHkgYmVjYXVzZSBhZGRpbmcgdHdvIGxhcmdlDQorIC8vIHZhbHVlcyB0b2dldGhl ciBvdmVyZmxvd3MuDQorIGlmICgoT2Zmc2V0ID49IEJsb2NrU2l6ZSkgfHwNCisgKCpOdW1CeXRl cyA+IEJsb2NrU2l6ZSkgfHwNCisgKChPZmZzZXQgKyAqTnVtQnl0ZXMpID4gQmxvY2tTaXplKSkN Cisgew0KKyBERUJVRyAoKA0KKyBERUJVR19FUlJPUiwNCisgIk5vckZsYXNoV3JpdGVTaW5nbGVC bG9jazogRVJST1IgLSBFRklfQkFEX0JVRkZFUl9TSVpFOiAiDQorICIoT2Zmc2V0PTB4JXggKyBO dW1CeXRlcz0weCV4KSA+IEJsb2NrU2l6ZT0weCV4XG4iLA0KKyBPZmZzZXQsDQorICpOdW1CeXRl cywNCisgQmxvY2tTaXplDQorICkpOw0KKyByZXR1cm4gRUZJX0JBRF9CVUZGRVJfU0laRTsNCisg fQ0KKw0KKyAvLyBXZSBtdXN0IGhhdmUgc29tZSBieXRlcyB0byB3cml0ZQ0KKyBpZiAoKk51bUJ5 dGVzID09IDApIHsNCisgREVCVUcgKCgNCisgREVCVUdfRVJST1IsDQorICJOb3JGbGFzaFdyaXRl U2luZ2xlQmxvY2s6IEVSUk9SIC0gRUZJX0JBRF9CVUZGRVJfU0laRTogIg0KKyAiKE9mZnNldD0w eCV4ICsgTnVtQnl0ZXM9MHgleCkgPiBCbG9ja1NpemU9MHgleFxuIiwNCisgT2Zmc2V0LA0KKyAq TnVtQnl0ZXMsDQorIEJsb2NrU2l6ZQ0KKyApKTsNCisgcmV0dXJuIEVGSV9CQURfQlVGRkVSX1NJ WkU7DQorIH0NCisNCisgLy8gUGljayAxMjhieXRlcyBhcyBhIGdvb2Qgc3RhcnQgZm9yIHdvcmQg b3BlcmF0aW9ucyBhcyBvcHBvc2VkIHRvIGVyYXNpbmcgdGhlDQorIC8vIGJsb2NrIGFuZCB3cml0 aW5nIHRoZSBkYXRhIHJlZ2FyZGxlc3MgaWYgYW4gZXJhc2UgaXMgcmVhbGx5IG5lZWRlZC4NCisg Ly8gSXQgbG9va3MgbGlrZSBtb3N0IGluZGl2aWR1YWwgTlYgdmFyaWFibGUgd3JpdGVzIGFyZSBz bWFsbGVyIHRoYW4gMTI4Ynl0ZXMuDQorIGlmICgqTnVtQnl0ZXMgPD0gMTI4KSB7DQorIC8vIENo ZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGVyYXNlIGJlZm9yZSBwcm9ncmFtbWluZyB0aGUgZGF0 YSBpbnRvIE5PUi4NCisgLy8gSWYgdGhlIGRlc3RpbmF0aW9uIGJpdHMgYXJlIG9ubHkgY2hhbmdp bmcgZnJvbSAxcyB0byAwcyB3ZSBjYW4ganVzdCB3cml0ZS4NCisgLy8gQWZ0ZXIgYSBibG9jayBp cyBlcmFzZWQgYWxsIGJpdHMgaW4gdGhlIGJsb2NrIGlzIHNldCB0byAxLg0KKyAvLyBJZiBhbnkg Ynl0ZSByZXF1aXJlcyB1cyB0byBlcmFzZSB3ZSBqdXN0IGdpdmUgdXAgYW5kIHJld3JpdGUgYWxs IG9mIGl0Lg0KKyBEb0VyYXNlID0gRkFMU0U7DQorIEJ5dGVzVG9Xcml0ZSA9ICpOdW1CeXRlczsN CisgQ3VyT2Zmc2V0ID0gT2Zmc2V0Ow0KKw0KKyB3aGlsZSAoQnl0ZXNUb1dyaXRlID4gMCkgew0K KyAvLyBSZWFkIGZ1bGwgd29yZCBmcm9tIE5PUiwgc3BsaWNlIGFzIHJlcXVpcmVkLiBBIHdvcmQg aXMgdGhlIHNtYWxsZXN0DQorIC8vIHVuaXQgd2UgY2FuIHdyaXRlLg0KKyBTdGF0dXMgPSBOb3JG bGFzaFJlYWQgKA0KKyBJbnN0YW5jZSwNCisgTGJhLA0KKyBDdXJPZmZzZXQgJiB+KDB4MyksDQor IHNpemVvZiAoVG1wKSwNCisgJlRtcA0KKyApOw0KKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KKyB9DQorDQorIC8vIFBoeXNpY2FsIGFkZHJl c3Mgb2Ygd29yZCBpbiBOT1IgdG8gd3JpdGUuDQorIFdvcmRBZGRyID0gKEN1ck9mZnNldCAmIH4o MHgzKSkgKw0KKyBHRVRfTk9SX0JMT0NLX0FERFJFU1MgKA0KKyBJbnN0YW5jZS0+UmVnaW9uQmFz ZUFkZHJlc3MsDQorIExiYSwNCisgQmxvY2tTaXplDQorICk7DQorDQorIC8vIFRoZSB3b3JkIG9m IGRhdGEgdGhhdCBpcyB0byBiZSB3cml0dGVuLg0KKyBUbXBCdWYgPSBSZWFkVW5hbGlnbmVkMzIg KA0KKyAoVUlOVDMyICopKEJ1ZmZlciArICgqTnVtQnl0ZXMgLSBCeXRlc1RvV3JpdGUpKQ0KKyAp Ow0KKw0KKyAvLyBGaXJzdCBkbyB3b3JkIGFsaWduZWQgY2h1bmtzLg0KKyBpZiAoKEN1ck9mZnNl dCAmIDB4MykgPT0gMCkgew0KKyBpZiAoQnl0ZXNUb1dyaXRlID49IDQpIHsNCisgLy8gSXMgdGhl IGRlc3RpbmF0aW9uIHN0aWxsIGluICdlcmFzZWQnIHN0YXRlPw0KKyBpZiAoflRtcCAhPSAwKSB7 DQorIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgb25seSBjaGFuZ2luZyBiaXRzIHRvIHplcm8u DQorIGlmICgoVG1wIF4gVG1wQnVmKSAmIFRtcEJ1Zikgew0KKyBEb0VyYXNlID0gVFJVRTsNCisg YnJlYWs7DQorIH0NCisgfQ0KKw0KKyAvLyBXcml0ZSB0aGlzIHdvcmQgdG8gTk9SDQorIFdvcmRU b1dyaXRlID0gVG1wQnVmOw0KKyBDdXJPZmZzZXQgKz0gc2l6ZW9mIChUbXBCdWYpOw0KKyBCeXRl c1RvV3JpdGUgLT0gc2l6ZW9mIChUbXBCdWYpOw0KKyB9IGVsc2Ugew0KKyAvLyBCeXRlc1RvV3Jp dGUgPCA0LiBEbyBzbWFsbCB3cml0ZXMgYW5kIGxlZnQtb3ZlcnMNCisgTWFzayA9IH4oKH4wKSA8 PCAoQnl0ZXNUb1dyaXRlICogOCkpOw0KKyAvLyBNYXNrIG91dCB0aGUgYnl0ZXMgd2Ugd2FudC4N CisgVG1wQnVmICY9IE1hc2s7DQorIC8vIElzIHRoZSBkZXN0aW5hdGlvbiBzdGlsbCBpbiAnZXJh c2VkJyBzdGF0ZT8NCisgaWYgKChUbXAgJiBNYXNrKSAhPSBNYXNrKSB7DQorIC8vIENoZWNrIHRv IHNlZSBpZiB3ZSBhcmUgb25seSBjaGFuZ2luZyBiaXRzIHRvIHplcm8uDQorIGlmICgoVG1wIF4g VG1wQnVmKSAmIFRtcEJ1Zikgew0KKyBEb0VyYXNlID0gVFJVRTsNCisgYnJlYWs7DQorIH0NCisg fQ0KKw0KKyAvLyBNZXJnZSBvbGQgYW5kIG5ldyBkYXRhLiBXcml0ZSBtZXJnZWQgd29yZCB0byBO T1INCisgV29yZFRvV3JpdGUgPSAoVG1wICYgfk1hc2spIHwgVG1wQnVmOw0KKyBDdXJPZmZzZXQg Kz0gQnl0ZXNUb1dyaXRlOw0KKyBCeXRlc1RvV3JpdGUgPSAwOw0KKyB9DQorIH0gZWxzZSB7DQor IC8vIERvIG11bHRpcGxlIHdvcmRzLCBidXQgc3RhcnRpbmcgdW5hbGlnbmVkLg0KKyBpZiAoQnl0 ZXNUb1dyaXRlID4gKDQgLSAoQ3VyT2Zmc2V0ICYgMHgzKSkpIHsNCisgTWFzayA9ICgofjApIDw8 ICgoQ3VyT2Zmc2V0ICYgMHgzKSAqIDgpKTsNCisgLy8gTWFzayBvdXQgdGhlIGJ5dGVzIHdlIHdh bnQuDQorIFRtcEJ1ZiAmPSBNYXNrOw0KKyAvLyBJcyB0aGUgZGVzdGluYXRpb24gc3RpbGwgaW4g J2VyYXNlZCcgc3RhdGU/DQorIGlmICgoVG1wICYgTWFzaykgIT0gTWFzaykgew0KKyAvLyBDaGVj ayB0byBzZWUgaWYgd2UgYXJlIG9ubHkgY2hhbmdpbmcgYml0cyB0byB6ZXJvLg0KKyBpZiAoKFRt cCBeIFRtcEJ1ZikgJiBUbXBCdWYpIHsNCisgRG9FcmFzZSA9IFRSVUU7DQorIGJyZWFrOw0KKyB9 DQorIH0NCisNCisgLy8gTWVyZ2Ugb2xkIGFuZCBuZXcgZGF0YS4gV3JpdGUgbWVyZ2VkIHdvcmQg dG8gTk9SDQorIFdvcmRUb1dyaXRlID0gKFRtcCAmIH5NYXNrKSB8IFRtcEJ1ZjsNCisgQnl0ZXNU b1dyaXRlIC09ICg0IC0gKEN1ck9mZnNldCAmIDB4MykpOw0KKyBDdXJPZmZzZXQgKz0gKDQgLSAo Q3VyT2Zmc2V0ICYgMHgzKSk7DQorIH0gZWxzZSB7DQorIC8vIFVuYWxpZ25lZCBhbmQgZml0cyBp biBvbmUgd29yZC4NCisgTWFzayA9ICh+KCh+MCkgPDwgKEJ5dGVzVG9Xcml0ZSAqIDgpKSkgPDwg KChDdXJPZmZzZXQgJiAweDMpICogOCk7DQorIC8vIE1hc2sgb3V0IHRoZSBieXRlcyB3ZSB3YW50 Lg0KKyBUbXBCdWYgPSAoVG1wQnVmIDw8ICgoQ3VyT2Zmc2V0ICYgMHgzKSAqIDgpKSAmIE1hc2s7 DQorIC8vIElzIHRoZSBkZXN0aW5hdGlvbiBzdGlsbCBpbiAnZXJhc2VkJyBzdGF0ZT8NCisgaWYg KChUbXAgJiBNYXNrKSAhPSBNYXNrKSB7DQorIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgb25s eSBjaGFuZ2luZyBiaXRzIHRvIHplcm8uDQorIGlmICgoVG1wIF4gVG1wQnVmKSAmIFRtcEJ1Zikg ew0KKyBEb0VyYXNlID0gVFJVRTsNCisgYnJlYWs7DQorIH0NCisgfQ0KKw0KKyAvLyBNZXJnZSBv bGQgYW5kIG5ldyBkYXRhLiBXcml0ZSBtZXJnZWQgd29yZCB0byBOT1INCisgV29yZFRvV3JpdGUg PSAoVG1wICYgfk1hc2spIHwgVG1wQnVmOw0KKyBDdXJPZmZzZXQgKz0gQnl0ZXNUb1dyaXRlOw0K KyBCeXRlc1RvV3JpdGUgPSAwOw0KKyB9DQorIH0NCisNCisgQmxvY2tBZGRyZXNzID0gR0VUX05P Ul9CTE9DS19BRERSRVNTICgNCisgSW5zdGFuY2UtPlJlZ2lvbkJhc2VBZGRyZXNzLA0KKyBMYmEs DQorIEJsb2NrU2l6ZQ0KKyApOw0KKyBpZiAoQmxvY2tBZGRyZXNzICE9IFByZXZCbG9ja0FkZHJl c3MpIHsNCisgU3RhdHVzID0gTm9yRmxhc2hVbmxvY2tTaW5nbGVCbG9ja0lmTmVjZXNzYXJ5IChJ bnN0YW5jZSwgQmxvY2tBZGRyZXNzKTsNCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyBy ZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCisgfQ0KKw0KKyBQcmV2QmxvY2tBZGRyZXNzID0gQmxv Y2tBZGRyZXNzOw0KKyB9DQorDQorIFN0YXR1cyA9IE5vckZsYXNoV3JpdGVTaW5nbGVXb3JkIChJ bnN0YW5jZSwgV29yZEFkZHIsIFdvcmRUb1dyaXRlKTsNCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KKyByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCisgfQ0KKyB9DQorDQorIC8vIEV4aXQg aWYgd2UgZ290IGhlcmUgYW5kIGNvdWxkIHdyaXRlIGFsbCB0aGUgZGF0YS4gT3RoZXJ3aXNlIGRv IHRoZQ0KKyAvLyBFcmFzZS1Xcml0ZSBjeWNsZS4NCisgaWYgKCFEb0VyYXNlKSB7DQorIHJldHVy biBFRklfU1VDQ0VTUzsNCisgfQ0KKyB9DQorDQorIC8vIENoZWNrIHdlIGRpZCBnZXQgc29tZSBt ZW1vcnkuIEJ1ZmZlciBpcyBCbG9ja1NpemUuDQorIGlmIChJbnN0YW5jZS0+U2hhZG93QnVmZmVy ID09IE5VTEwpIHsNCisgREVCVUcgKChERUJVR19FUlJPUiwgIkZ2YldyaXRlOiBFUlJPUiAtIEJ1 ZmZlciBub3QgcmVhZHlcbiIpKTsNCisgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQorIH0NCisN CisgLy8gUmVhZCBOT1IgRmxhc2ggZGF0YSBpbnRvIHNoYWRvdyBidWZmZXINCisgU3RhdHVzID0g Tm9yRmxhc2hSZWFkQmxvY2tzICgNCisgSW5zdGFuY2UsDQorIExiYSwNCisgQmxvY2tTaXplLA0K KyBJbnN0YW5jZS0+U2hhZG93QnVmZmVyDQorICk7DQorIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCisgLy8gUmV0dXJuIG9uZSBvZiB0aGUgcHJlLWFwcHJvdmVkIGVycm9yIHN0YXR1c2VzDQor IHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KKyB9DQorDQorIC8vIFB1dCB0aGUgZGF0YSBhdCB0 aGUgYXBwcm9wcmlhdGUgbG9jYXRpb24gaW5zaWRlIHRoZSBidWZmZXIgYXJlYQ0KKyBDb3B5TWVt ICgNCisgKFZPSUQgKikoKFVJTlROKUluc3RhbmNlLT5TaGFkb3dCdWZmZXIgKyBPZmZzZXQpLA0K KyBCdWZmZXIsDQorICpOdW1CeXRlcw0KKyApOw0KKw0KKyAvLyBXcml0ZSB0aGUgbW9kaWZpZWQg YnVmZmVyIGJhY2sgdG8gdGhlIE5vckZsYXNoDQorIFN0YXR1cyA9IE5vckZsYXNoV3JpdGVCbG9j a3MgKA0KKyBJbnN0YW5jZSwNCisgTGJhLA0KKyBCbG9ja1NpemUsDQorIEluc3RhbmNlLT5TaGFk b3dCdWZmZXINCisgKTsNCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KKyAvLyBSZXR1cm4g b25lIG9mIHRoZSBwcmUtYXBwcm92ZWQgZXJyb3Igc3RhdHVzZXMNCisgcmV0dXJuIEVGSV9ERVZJ Q0VfRVJST1I7DQorIH0NCisNCisgcmV0dXJuIEVGSV9TVUNDRVNTOw0KK30NCisNCisvKioNCisg UmVhZCBKRURFQyBJRCBvZiBOT1IgZmxhc2ggZGV2aWNlLg0KKw0KKyBAcGFyYW1baW5dIEluc3Rh bmNlIE5PUiBmbGFzaCBJbnN0YW5jZSBvZiB2YXJpYWJsZSBzdG9yZSByZWdpb24uDQorIEBwYXJh bVtvdXRdIEplZGVjSWQgSkVERUMgSUQgb2YgTk9SIGZsYXNoIGRldmljZS4NCisgTWF4aW11bSBs ZW5ndGggb2YgSmVkZWNJZCBjYW4gYmUgdXB0byA2IGJ5dGVzDQorDQorIEByZXR2YWwgRUZJX1NV Q0NFU1MgVGhlIHdyaXRlIGlzIGNvbXBsZXRlZC4NCisgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S IEZhaWxlZCB0byBmZXRjaCBKRURFQyBJRC4NCisgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgSW52YWxpZCBwYXJhbWV0ZXJzIHBhc3NlZC4NCisqKi8NCitFRklfU1RBVFVTDQorTm9yRmxh c2hSZWFkSWQgKA0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLA0KKyBPVVQgVUlO VDggKkplZGVjSWQNCisgKQ0KK3sNCisgVUlOVDMyIHZhbDsNCisNCisgaWYgKChJbnN0YW5jZSA9 PSBOVUxMKSB8fCAoSmVkZWNJZCA9PSBOVUxMKSkgew0KKyByZXR1cm4gRUZJX0lOVkFMSURfUEFS QU1FVEVSOw0KKyB9DQorDQorIHZhbCA9IChTUElOT1JfT1BfUkRJRCA8PA0KKyBDRE5TX1FTUElf RkxBU0hfQ01EX0NUUkxfUkVHX09QQ09ERV9CSVRfUE9TKSB8DQorIChDRE5TX1FTUElfRkxBU0hf Q01EX0NUUkxfUkVHX1JFQURfRU5BQkxFIDw8DQorIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9S RUdfUkVBREVOX0JJVF9QT1MpIHwNCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19OVU1f REFUQV9CWVRFUyAoMyk7DQorDQorIGlmIChFRklfRVJST1IgKENkbnNRc3BpRXhlY3V0ZUNvbW1h bmQgKEluc3RhbmNlLCB2YWwpKSkgew0KKyByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCisgfQ0K Kw0KKyB2YWwgPSBNbWlvUmVhZDMyICgNCisgSW5zdGFuY2UtPkhvc3RDb250cm9sbGVyQmFzZUFk ZHJlc3MgKyBDRE5TX1FTUElfRkxBU0hfQ01EX1JFQURfREFUQV9SRUdfT0ZGU0VUDQorICk7DQor DQorIC8vIE1hbnVmYWN0dXJlciBJRCBmaWVsZA0KKyBKZWRlY0lkWzBdID0gKFVJTlQ4KXZhbDsN CisgLy8gVHlwZSBmaWVsZA0KKyBKZWRlY0lkWzFdID0gKFVJTlQ4KSh2YWwgPj4gOCk7DQorIC8v IENhcGFjaXR5IGZpZWxkDQorIEplZGVjSWRbMl0gPSAoVUlOVDgpKHZhbCA+PiAxNik7DQorDQor IERFQlVHICgoDQorIERFQlVHX0lORk8sDQorICJOb3IgZmxhc2ggZGV0ZWN0ZWQsIEplZGVjIElE LCBNYW51ZmFjdHVyZXIgSWQ9JXggVHlwZT0leCBDYXBhY2l0eT0leCBcbiIsDQorIEplZGVjSWRb MF0sDQorIEplZGVjSWRbMV0sDQorIEplZGVjSWRbMl0NCisgKSk7DQorDQorIHJldHVybiBFRklf U1VDQ0VTUzsNCit9DQorDQorLyoqDQorIE5PUiBGbGFzaCBSZXNldA0KKw0KKyBAcGFyYW1baW5d IEluc3RhbmNlIE5PUiBmbGFzaCBpbnN0YW5jZS4NCisNCisgQHJldHZhbCBFRklfU1VDQ0VTUyBS ZXR1cm4gc3VjY2VzcyBvbiBldmVyeSBjYWxsLg0KKyoqLw0KK0VGSV9TVEFUVVMNCitOb3JGbGFz aFJlc2V0ICgNCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZQ0KKyApDQorew0KKyBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQorfQ0KLS0NCjIuMjUuMQ0KDQoNCg0KDQoKLT0tPS09LT0tPS09 LT0tPS09LT0tPS0KR3JvdXBzLmlvIExpbmtzOiBZb3UgcmVjZWl2ZSBhbGwgbWVzc2FnZXMgc2Vu dCB0byB0aGlzIGdyb3VwLgpWaWV3L1JlcGx5IE9ubGluZSAoIzExOTM0MSk6IGh0dHBzOi8vZWRr Mi5ncm91cHMuaW8vZy9kZXZlbC9tZXNzYWdlLzExOTM0MQpNdXRlIFRoaXMgVG9waWM6IGh0dHBz Oi8vZ3JvdXBzLmlvL210LzEwNjM2NTQ2Ni83Njg2MTc2Ckdyb3VwIE93bmVyOiBkZXZlbCtvd25l ckBlZGsyLmdyb3Vwcy5pbwpVbnN1YnNjcmliZTogaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2Rl dmVsL3Vuc3ViIFtyZWJlY2NhQG9wZW5mdy5pb10KLT0tPS09LT0tPS09LT0tPS09LT0tPS0KCg0K --_000_43CF5BB1B4D34D34ABB2E9F84104FB19armcom_ Content-Type: text/html; charset="utf-8" Content-ID: <52B5DC03FA71B545B5E70AB97476A813@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 PGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4 bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiB4bWxuczptPSJo dHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiIHhtbG5zPSJo dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVp dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPG1l dGEgbmFtZT0iR2VuZXJhdG9yIiBjb250ZW50PSJNaWNyb3NvZnQgV29yZCAxNSAoZmlsdGVyZWQg bWVkaXVtKSI+DQo8c3R5bGU+PCEtLQ0KLyogRm9udCBEZWZpbml0aW9ucyAqLw0KQGZvbnQtZmFj ZQ0KCXtmb250LWZhbWlseToiQ2FtYnJpYSBNYXRoIjsNCglwYW5vc2UtMToyIDQgNSAzIDUgNCA2 IDMgMiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6Q2FsaWJyaTsNCglwYW5vc2UtMToy IDE1IDUgMiAyIDIgNCAzIDIgNDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OkFwdG9zOw0K CXBhbm9zZS0xOjIgMTEgMCA0IDIgMiAyIDIgMiA0O30NCi8qIFN0eWxlIERlZmluaXRpb25zICov DQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsDQoJe21hcmdpbjowY207 DQoJZm9udC1zaXplOjEyLjBwdDsNCglmb250LWZhbWlseToiQXB0b3MiLHNhbnMtc2VyaWY7fQ0K YTpsaW5rLCBzcGFuLk1zb0h5cGVybGluaw0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29s b3I6Ymx1ZTsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCnNwYW4uRW1haWxTdHlsZTE5 DQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsLXJlcGx5Ow0KCWZvbnQtZmFtaWx5OiJDYWxpYnJp IixzYW5zLXNlcmlmOw0KCWNvbG9yOndpbmRvd3RleHQ7fQ0KLk1zb0NocERlZmF1bHQNCgl7bXNv LXN0eWxlLXR5cGU6ZXhwb3J0LW9ubHk7DQoJZm9udC1zaXplOjEwLjBwdDsNCgltc28tbGlnYXR1 cmVzOm5vbmU7fQ0KQHBhZ2UgV29yZFNlY3Rpb24xDQoJe3NpemU6NjEyLjBwdCA3OTIuMHB0Ow0K CW1hcmdpbjo3Mi4wcHQgNzIuMHB0IDcyLjBwdCA3Mi4wcHQ7fQ0KZGl2LldvcmRTZWN0aW9uMQ0K CXtwYWdlOldvcmRTZWN0aW9uMTt9DQotLT48L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHkgbGFuZz0i RU4tR0IiIGxpbms9ImJsdWUiIHZsaW5rPSJwdXJwbGUiIHN0eWxlPSJ3b3JkLXdyYXA6YnJlYWst d29yZCI+DQo8ZGl2IGNsYXNzPSJXb3JkU2VjdGlvbjEiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZx dW90OyxzYW5zLXNlcmlmO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj5IaSBTYWhpbCw8bzpw PjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9u dC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7 bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQt ZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjttc28tZmFyZWFzdC1sYW5ndWFn ZTpFTi1VUyI+SSB3aWxsIGRyb3AgdGhlIGxvb3AgYmVmb3JlIG1lcmdpbmcgdGhlIGNoYW5nZXMu PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNl cmlmO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj5PdGhlciB0aGFuIHRoYXQgdGhpcyBwYXRj aCBsb29rcyBnb29kIHRvIG1lLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0Nh bGlicmkmcXVvdDssc2Fucy1zZXJpZjttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+PG86cD4m bmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNl cmlmO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj5SZXZpZXdlZC1ieTogU2FtaSBNdWphd2Fy ICZsdDtzYW1pLm11amF3YXJAYXJtLmNvbSZndDs8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWls eTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4t VVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxz cGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVv dDssc2Fucy1zZXJpZjttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+UmVnYXJkcyw8bzpwPjwv bzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1z aXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7bXNv LWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFt aWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjttc28tZmFyZWFzdC1sYW5ndWFnZTpF Ti1VUyI+U2FtaSBNdWphd2FyPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2Fs aWJyaSZxdW90OyxzYW5zLXNlcmlmO21zby1mYXJlYXN0LWxhbmd1YWdlOkVOLVVTIj48bzpwPiZu YnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItdG9w OnNvbGlkICNCNUM0REYgMS4wcHQ7cGFkZGluZzozLjBwdCAwY20gMGNtIDBjbSI+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIj48Yj48c3BhbiBsYW5nPSJFTi1JTiIgc3R5bGU9ImZvbnQtZmFtaWx5OiZx dW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjpibGFjayI+RnJvbToNCjwvc3Bhbj48 L2I+PHNwYW4gbGFuZz0iRU4tSU4iIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1 b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2siPlNhaGlsIEthdXNoYWwgJmx0O1NhaGlsLkthdXNo YWxAYXJtLmNvbSZndDs8YnI+DQo8Yj5EYXRlOiA8L2I+V2VkbmVzZGF5IDI5IE1heSAyMDI0IGF0 IDEyOjUxPGJyPg0KPGI+VG86IDwvYj5TYW1pIE11amF3YXIgJmx0O1NhbWkuTXVqYXdhckBhcm0u Y29tJmd0OywgJnF1b3Q7ZGV2ZWxAZWRrMi5ncm91cHMuaW8mcXVvdDsgJmx0O2RldmVsQGVkazIu Z3JvdXBzLmlvJmd0Ozxicj4NCjxiPkNjOiA8L2I+QXJkIEJpZXNoZXV2ZWwgJmx0O2FyZGIrdGlh bm9jb3JlQGtlcm5lbC5vcmcmZ3Q7LCBMZWlmIExpbmRob2xtICZuYnNwOyAmbHQ7cXVpY19sbGlu ZGhvbEBxdWljaW5jLmNvbSZndDssIG5kICZsdDtuZEBhcm0uY29tJmd0Ozxicj4NCjxiPlN1Ympl Y3Q6IDwvYj5SZTogW2VkazItcGxhdGZvcm1zXVtQQVRDSCBWNCAxNS8xN10gUGxhdGZvcm0vQVJN OiBBZGQgQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYiBmb3IgTm9yRmxhc2hEeGU8bzpwPjwv bzpwPjwvc3Bhbj48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bh biBsYW5nPSJFTi1JTiI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPC9kaXY+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1JTiIgc3R5bGU9ImZvbnQtc2l6ZToxMS4w cHQ7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPkhpIFNhbWksPGJyPg0KVGhhbmsgeW91IGZv ciByZXZpZXdpbmcgdGhlIHBhdGNoLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiPjxzcGFuIGxhbmc9IkVOLUlOIiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDttc28t ZmFyZWFzdC1sYW5ndWFnZTpFTi1VUyI+WW91IGFyZSByaWdodC4gVGhlIGRvLXdoaWxlIGxvb3Ag aXMgcmVkdW5kYW50IGFuZCBoZW5jZSBjYW4gYmUgcmVtb3ZlZC48bzpwPjwvbzpwPjwvc3Bhbj48 L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBsYW5nPSJFTi1JTiIgc3R5bGU9ImZvbnQt c2l6ZToxMS4wcHQ7bXNvLWZhcmVhc3QtbGFuZ3VhZ2U6RU4tVVMiPlRoYW5rcyw8YnI+DQpTYWhp bDxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9 IkVOLUlOIiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDttc28tZmFyZWFzdC1sYW5ndWFnZTpFTi1V UyI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPGRpdiBpZD0ibWFpbC1lZGl0b3ItcmVm ZXJlbmNlLW1lc3NhZ2UtY29udGFpbmVyIj4NCjxkaXY+DQo8ZGl2IHN0eWxlPSJib3JkZXI6bm9u ZTtib3JkZXItdG9wOnNvbGlkICNCNUM0REYgMS4wcHQ7cGFkZGluZzozLjBwdCAwY20gMGNtIDBj bSI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMi4wcHQiPjxi PjxzcGFuIGxhbmc9IkVOLUlOIiBzdHlsZT0iY29sb3I6YmxhY2siPkZyb206DQo8L3NwYW4+PC9i PjxzcGFuIGxhbmc9IkVOLUlOIiBzdHlsZT0iY29sb3I6YmxhY2siPlNhbWkgTXVqYXdhciAmbHQ7 U2FtaS5NdWphd2FyQGFybS5jb20mZ3Q7PGJyPg0KPGI+RGF0ZTogPC9iPldlZG5lc2RheSwgMjkg TWF5IDIwMjQgYXQgNTowNjwvc3Bhbj48c3BhbiBsYW5nPSJFTi1JTiIgc3R5bGU9ImZvbnQtZmFt aWx5OiZxdW90O0FyaWFsJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6YmxhY2siPuKArzwvc3Bhbj48 c3BhbiBsYW5nPSJFTi1JTiIgc3R5bGU9ImNvbG9yOmJsYWNrIj5QTTxicj4NCjxiPlRvOiA8L2I+ U2FoaWwgS2F1c2hhbCAmbHQ7U2FoaWwuS2F1c2hhbEBhcm0uY29tJmd0OywgZGV2ZWxAZWRrMi5n cm91cHMuaW8gJmx0O2RldmVsQGVkazIuZ3JvdXBzLmlvJmd0Ozxicj4NCjxiPkNjOiA8L2I+QXJk IEJpZXNoZXV2ZWwgJmx0O2FyZGIrdGlhbm9jb3JlQGtlcm5lbC5vcmcmZ3Q7LCBMZWlmIExpbmRo b2xtICZuYnNwOyAmbHQ7cXVpY19sbGluZGhvbEBxdWljaW5jLmNvbSZndDssIG5kICZsdDtuZEBh cm0uY29tJmd0Ozxicj4NCjxiPlN1YmplY3Q6IDwvYj5SZTogW2VkazItcGxhdGZvcm1zXVtQQVRD SCBWNCAxNS8xN10gUGxhdGZvcm0vQVJNOiBBZGQgQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxp YiBmb3IgTm9yRmxhc2hEeGU8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMi4wcHQiPjxhIG5hbWU9 IkJNX0JFR0lOIj48L2E+PHNwYW4gbGFuZz0iRU4tSU4iIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 O2ZvbnQtZmFtaWx5OiZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZiI+SGkgU2FoaWws PGJyPg0KPGJyPg0KUGxlYXNlIGZpbmQgbXkgZmVlZGJhY2sgaW5saW5lIG1hcmtlZCBbU0FNSV0u PGJyPg0KPGJyPg0KUmVnYXJkcyw8YnI+DQo8YnI+DQpTYW1pIE11amF3YXI8YnI+DQo8YnI+DQpP biAyOS8wNS8yMDI0LCAwOTo1NiwgJnF1b3Q7U2FoaWwgS2F1c2hhbCZxdW90OyAmbHQ7U2FoaWwu S2F1c2hhbEBhcm0uY29tICZsdDs8YSBocmVmPSJtYWlsdG86U2FoaWwuS2F1c2hhbEBhcm0uY29t Ij5tYWlsdG86U2FoaWwuS2F1c2hhbEBhcm0uY29tPC9hPiZndDsmZ3Q7IHdyb3RlOjxicj4NCjxi cj4NCjxicj4NCkZyb206IHNhaGlsICZsdDtzYWhpbEBhcm0uY29tICZsdDs8YSBocmVmPSJtYWls dG86c2FoaWxAYXJtLmNvbSI+bWFpbHRvOnNhaGlsQGFybS5jb208L2E+Jmd0OyZndDs8YnI+DQo8 YnI+DQo8YnI+DQpJbiBOMVNkcCBwbGF0Zm9ybSwgdGhlIFNvQyBpcyBjb25uZWN0ZWQgdG8gSU9G UEdBIHdoaWNoIGhhcyBhPGJyPg0KQ2FkZW5jZSBRdWFkIFNQSSAoUVNQSSkgY29udHJvbGxlci4g VGhpcyBRU1BJIGNvbnRyb2xsZXIgbWFuYWdlczxicj4NCnRoZSBmbGFzaCBjaGlwIGRldmljZSB2 aWEgUVNQSSBidXMuPGJyPg0KPGJyPg0KPGJyPg0KVGhpcyBwYXRjaCBhZGRzIENhZGVuY2VRc3Bp Tm9yRmxhc2hEZXZpY2VMaWIgd2hpY2ggaXMgdXNlZCB0bzxicj4NCm1hbmFnZSBhbmQgYWNjZXNz IHRoZSBhYm92ZSBjb25maWd1cmF0aW9uLjxicj4NCjxicj4NCjxicj4NClNpZ25lZC1vZmYtYnk6 IHNhaGlsICZsdDtzYWhpbEBhcm0uY29tICZsdDs8YSBocmVmPSJtYWlsdG86c2FoaWxAYXJtLmNv bSI+bWFpbHRvOnNhaGlsQGFybS5jb208L2E+Jmd0OyZndDs8YnI+DQotLS08YnI+DQpQbGF0Zm9y bS9BUk0vTGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9y Rmxhc2hEZXZpY2VMaWIuaW5mIHwgMzIgKzxicj4NClBsYXRmb3JtL0FSTS9MaWJyYXJ5L0NhZGVu Y2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi5oIHwg NDYgKzxicj4NClBsYXRmb3JtL0FSTS9MaWJyYXJ5L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VM aWIvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi5jIHwgMTAzNCArKysrKysrKysrKysrKysr KysrKzxicj4NCjMgZmlsZXMgY2hhbmdlZCwgMTExMiBpbnNlcnRpb25zKCspPGJyPg0KPGJyPg0K PGJyPg0KZGlmZiAtLWdpdCBhL1BsYXRmb3JtL0FSTS9MaWJyYXJ5L0NhZGVuY2VRc3BpTm9yRmxh c2hEZXZpY2VMaWIvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi5pbmYgYi9QbGF0Zm9ybS9B Uk0vTGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9yRmxh c2hEZXZpY2VMaWIuaW5mPGJyPg0KbmV3IGZpbGUgbW9kZSAxMDA2NDQ8YnI+DQppbmRleCAwMDAw MDAwMDAwMDAuLjUwNjg3NmI2MjI4NTxicj4NCi0tLSAvZGV2L251bGw8YnI+DQorKysgYi9QbGF0 Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3Bp Tm9yRmxhc2hEZXZpY2VMaWIuaW5mPGJyPg0KQEAgLTAsMCArMSwzMiBAQDxicj4NCisjLyoqIEBm aWxlPGJyPg0KKyM8YnI+DQorIyBDb21wb25lbnQgZGVzY3JpcHRpb24gZmlsZSBmb3IgQ2FkZW5j ZVFzcGlOb3JGbGFzaERldmljZUxpYiBMaWJyYXJ5PGJyPg0KKyM8YnI+DQorIyBDb3B5cmlnaHQg KGMpIDIwMjQsIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLiZsdDtCUiZndDs8YnI+ DQorIzxicj4NCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50 PGJyPg0KKyM8YnI+DQorIyoqLzxicj4NCis8YnI+DQorW0RlZmluZXNdPGJyPg0KKyBJTkZfVkVS U0lPTiA9IDB4MDAwMTAwMDU8YnI+DQorIEJBU0VfTkFNRSA9IENhZGVuY2VRc3BpTm9yRmxhc2hE ZXZpY2VMaWI8YnI+DQorIEZJTEVfR1VJRCA9IGVkMTcyMzY2LTA2NmItNDk5OC05YjVlLWNhN2Yz ODVhMTcwYjxicj4NCisgTU9EVUxFX1RZUEUgPSBEWEVfUlVOVElNRV9EUklWRVI8YnI+DQorIFZF UlNJT05fU1RSSU5HID0gMS4wPGJyPg0KKyBMSUJSQVJZX0NMQVNTID0gTm9yRmxhc2hEZXZpY2VM aWI8YnI+DQorPGJyPg0KK1tTb3VyY2VzLmNvbW1vbl08YnI+DQorIENhZGVuY2VRc3BpTm9yRmxh c2hEZXZpY2VMaWIuYzxicj4NCisgQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi5oPGJyPg0K Kzxicj4NCitbUGFja2FnZXNdPGJyPg0KKyBNZGVQa2cvTWRlUGtnLmRlYzxicj4NCisgUGxhdGZv cm0vQVJNL0FSTS5kZWM8YnI+DQorPGJyPg0KK1tMaWJyYXJ5Q2xhc3Nlc108YnI+DQorIEJhc2VM aWI8YnI+DQorIEJhc2VNZW1vcnlMaWI8YnI+DQorIERlYnVnTGliPGJyPg0KKyBJb0xpYjxicj4N CisgVGltZXJMaWI8YnI+DQpkaWZmIC0tZ2l0IGEvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5j ZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmggYi9Q bGF0Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VR c3BpTm9yRmxhc2hEZXZpY2VMaWIuaDxicj4NCm5ldyBmaWxlIG1vZGUgMTAwNjQ0PGJyPg0KaW5k ZXggMDAwMDAwMDAwMDAwLi45NTFhOTM0ODFkZDE8YnI+DQotLS0gL2Rldi9udWxsPGJyPg0KKysr IGIvUGxhdGZvcm0vQVJNL0xpYnJhcnkvQ2FkZW5jZVFzcGlOb3JGbGFzaERldmljZUxpYi9DYWRl bmNlUXNwaU5vckZsYXNoRGV2aWNlTGliLmg8YnI+DQpAQCAtMCwwICsxLDQ2IEBAPGJyPg0KKy8q KiBAZmlsZTxicj4NCis8YnI+DQorIENvcHlyaWdodCAoYykgMjAyNCwgQVJNIExpbWl0ZWQuIEFs bCByaWdodHMgcmVzZXJ2ZWQuJmx0O0JSJmd0Ozxicj4NCis8YnI+DQorIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50PGJyPg0KKzxicj4NCisqKi88YnI+DQorPGJy Pg0KKyNpZm5kZWYgQ0FERU5DRV9RU1BJX05PUl9GTEFTSF9ERVZJQ0VfTElCX0hfPGJyPg0KKyNk ZWZpbmUgQ0FERU5DRV9RU1BJX05PUl9GTEFTSF9ERVZJQ0VfTElCX0hfPGJyPg0KKzxicj4NCisj ZGVmaW5lIE5PUl9GTEFTSF9FUkFTRV9SRVRSWSAxMDxicj4NCis8YnI+DQorLy8gUVNQSSBDb250 cm9sbGVyIGRlZmluZXM8YnI+DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVH X09GRlNFVCAweDkwPGJyPg0KKyNkZWZpbmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19F WEVDVVRFIDB4MDE8YnI+DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX0FE RFJfRU5BQkxFIDB4MDE8YnI+DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVH X0FERFJfQklUX1BPUyAxOTxicj4NCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9S RUdfQUREUl9CWVRFX0JJVF9QT1MgMTY8YnI+DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01E X0NUUkxfUkVHX1NUQVRVU19CSVQgMHgwMjxicj4NCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9D TURfQ1RSTF9SRUdfT1BDT0RFX0JJVF9QT1MgMjQ8YnI+DQorI2RlZmluZSBDRE5TX1FTUElfRkxB U0hfQ01EX0NUUkxfUkVHX1JFQURfRU5BQkxFIDB4MDE8YnI+DQorI2RlZmluZSBDRE5TX1FTUElf RkxBU0hfQ01EX0NUUkxfUkVHX1JFQURfQllURV8zQiAweDAyPGJyPg0KKyNkZWZpbmUgQ0ROU19R U1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19SRUFERU5fQklUX1BPUyAyMzxicj4NCisjZGVmaW5lIENE TlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfUkVBREJZVEVfQklUX1BPUyAyMDxicj4NCisjZGVm aW5lIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfRFVNTVlfOEMgMHg4PGJyPg0KKyNkZWZp bmUgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19EVU1NWV9CSVRfUE9TIDc8YnI+DQorI2Rl ZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX05VTV9EQVRBX0JZVEVTKHgpICgoeCAt IDEpICZsdDsmbHQ7IENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfUkVBREJZVEVfQklUX1BP Uyk8YnI+DQorI2RlZmluZSBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX05VTV9BRERSX0JZ VEVTKHgpICgoeCAtIDEpICZsdDsmbHQ7IENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfQURE Ul9CWVRFX0JJVF9QT1MpPGJyPg0KKzxicj4NCisjZGVmaW5lIENETlNfUVNQSV9GTEFTSF9DTURf UkVBRF9EQVRBX1JFR19PRkZTRVQgMHhBMDxicj4NCis8YnI+DQorI2RlZmluZSBDRE5TX1FTUElf RkxBU0hfQ01EX0FERFJfUkVHX09GRlNFVCAweDk0PGJyPg0KKzxicj4NCisjZGVmaW5lIENETlNf UVNQSV9GTEFTSF9DTURfU1RBVFVTX1BPTExfVElNRU9VVF9NUyAxMDAwdSAvLyBDb21tYW5kIFN0 YXR1cyBSZWdpc3RlciByZWFkIHRpbWVvdXQ8YnI+DQorPGJyPg0KKyNkZWZpbmUgU1BJTk9SX1NS X1dJUCBCSVQwIC8vIFdyaXRlIGluIHByb2dyZXNzPGJyPg0KKzxicj4NCisjZGVmaW5lIFNQSU5P Ul9PUF9XUkVOIDB4MDYgLy8gV3JpdGUgZW5hYmxlPGJyPg0KKyNkZWZpbmUgU1BJTk9SX09QX0JF XzRLIDB4MjAgLy8gRXJhc2UgNEtpQiBibG9jazxicj4NCisjZGVmaW5lIFNQSU5PUl9PUF9SRElE IDB4OWYgLy8gUmVhZCBKRURFQyBJRDxicj4NCisjZGVmaW5lIFNQSU5PUl9PUF9SRFNSIDB4MDUg Ly8gUmVhZCBzdGF0dXMgcmVnaXN0ZXI8YnI+DQorPGJyPg0KKyNkZWZpbmUgU1BJTk9SX1NSX1dJ UF9QT0xMX1RJTUVPVVRfTVMgMTAwMHUgLy8gU3RhdHVzIFJlZ2lzdGVyIHJlYWQgdGltZW91dDxi cj4NCis8YnI+DQorI2VuZGlmIC8qIENBREVOQ0VfUVNQSV9OT1JfRkxBU0hfREVWSUNFX0xJQl9I XyAqLzxicj4NCmRpZmYgLS1naXQgYS9QbGF0Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNwaU5v ckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIuYyBiL1BsYXRmb3Jt L0FSTS9MaWJyYXJ5L0NhZGVuY2VRc3BpTm9yRmxhc2hEZXZpY2VMaWIvQ2FkZW5jZVFzcGlOb3JG bGFzaERldmljZUxpYi5jPGJyPg0KbmV3IGZpbGUgbW9kZSAxMDA2NDQ8YnI+DQppbmRleCAwMDAw MDAwMDAwMDAuLmY5N2M4ZDUxZmQ0ODxicj4NCi0tLSAvZGV2L251bGw8YnI+DQorKysgYi9QbGF0 Zm9ybS9BUk0vTGlicmFyeS9DYWRlbmNlUXNwaU5vckZsYXNoRGV2aWNlTGliL0NhZGVuY2VRc3Bp Tm9yRmxhc2hEZXZpY2VMaWIuYzxicj4NCkBAIC0wLDAgKzEsMTAzNCBAQDxicj4NCisvKiogQGZp bGU8YnI+DQorPGJyPg0KKyBDb3B5cmlnaHQgKGMpIDIwMjQgQVJNIExpbWl0ZWQuIEFsbCByaWdo dHMgcmVzZXJ2ZWQuJmx0O0JSJmd0Ozxicj4NCis8YnI+DQorIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50PGJyPg0KKzxicj4NCisqKi88YnI+DQorPGJyPg0KKyNp bmNsdWRlICZsdDtMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaCZndDs8YnI+DQorI2luY2x1ZGUgJmx0 O0xpYnJhcnkvRGVidWdMaWIuaCZndDs8YnI+DQorI2luY2x1ZGUgJmx0O0xpYnJhcnkvSW9MaWIu aCZndDs8YnI+DQorI2luY2x1ZGUgJmx0O0xpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oJmd0 Ozxicj4NCisjaW5jbHVkZSAmbHQ7TGlicmFyeS9Ob3JGbGFzaERldmljZUxpYi5oJmd0Ozxicj4N CisjaW5jbHVkZSAmbHQ7TGlicmFyeS9UaW1lckxpYi5oJmd0Ozxicj4NCisjaW5jbHVkZSAmbHQ7 TGlicmFyeS9VZWZpTGliLmgmZ3Q7PGJyPg0KKzxicj4NCisjaW5jbHVkZSAmcXVvdDtDYWRlbmNl UXNwaU5vckZsYXNoRGV2aWNlTGliLmgmcXVvdDs8YnI+DQorPGJyPg0KKy8qKjxicj4NCisgQ29u dmVydHMgbWlsbGlzZWNvbmRzIGludG8gbnVtYmVyIG9mIHRpY2tzIG9mIHRoZSBwZXJmb3JtYW5j ZSBjb3VudGVyLjxicj4NCis8YnI+DQorIEBwYXJhbVtpbl0gTWlsbGlzZWNvbmRzIE1pbGxpc2Vj b25kcyB0byBjb252ZXJ0IGludG8gdGlja3MuPGJyPg0KKzxicj4NCisgQHJldHZhbCBNaWxsaXNl Y29uZHMgZXhwcmVzc2VkIGFzIG51bWJlciBvZiB0aWNrcy48YnI+DQorPGJyPg0KKyoqLzxicj4N CitTVEFUSUM8YnI+DQorVUlOVDY0PGJyPg0KK01pbGxpU2Vjb25kc1RvVGlja3MgKDxicj4NCisg SU4gVUlOVE4gTWlsbGlzZWNvbmRzPGJyPg0KKyApPGJyPg0KK3s8YnI+DQorIFVJTlQ2NCBOYW5v U2Vjb25kc1BlclRpY2s7PGJyPg0KKyBVSU5UNjQgTmFub1NlY29uZHM7PGJyPg0KKzxicj4NCisg TmFub1NlY29uZHNQZXJUaWNrID0gR2V0VGltZUluTmFub1NlY29uZCAoMSk7PGJyPg0KKyBOYW5v U2Vjb25kcyA9IE11bHRVNjR4MzIgKE1pbGxpc2Vjb25kcywgMTAwMDAwMCk7PGJyPg0KKzxicj4N CisgcmV0dXJuIERpdlU2NHg2NFJlbWFpbmRlciAoTmFub1NlY29uZHMsIE5hbm9TZWNvbmRzUGVy VGljaywgTlVMTCk7PGJyPg0KK308YnI+DQorPGJyPg0KKy8qKjxicj4NCisgRXhlY3V0ZSBGbGFz aCBjbWQgY3RybCBhbmQgUmVhZCBTdGF0dXMuPGJyPg0KKzxicj4NCisgQHBhcmFtW2luXSBJbnN0 YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2UuPGJyPg0KKyBAcGFyYW1baW5dIFZhbCBWYWx1ZSB0byBi ZSB3cml0dGVuIHRvIEZsYXNoIGNtZCBjdHJsIFJlZ2lzdGVyLjxicj4NCis8YnI+DQorIEByZXR2 YWwgRUZJX1NVQ0NFU1MgUmVxdWVzdCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuPGJyPg0KKyBA cmV0dmFsIEVGSV9USU1FT1VUIENvbW1hbmQgZXhlY3V0aW9uIHRpbWVkIG91dC48YnI+DQorPGJy Pg0KKyoqLzxicj4NCitTVEFUSUM8YnI+DQorRUZJX1NUQVRVUzxicj4NCitDZG5zUXNwaUV4ZWN1 dGVDb21tYW5kICg8YnI+DQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5zdGFuY2UsPGJyPg0K KyBJTiBVSU5UMzIgVmFsPGJyPg0KKyApPGJyPg0KK3s8YnI+DQorIC8vIFNldCB0aGUgY29tbWFu ZDxicj4NCisgTW1pb1dyaXRlMzIgKDxicj4NCisgSW5zdGFuY2UtJmd0O0hvc3RDb250cm9sbGVy QmFzZUFkZHJlc3MgKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX09GRlNFVCw8YnI+DQor IFZhbDxicj4NCisgKTs8YnI+DQorIC8vIEV4ZWN1dGUgdGhlIGNvbW1hbmQ8YnI+DQorIE1taW9X cml0ZTMyICg8YnI+DQorIEluc3RhbmNlLSZndDtIb3N0Q29udHJvbGxlckJhc2VBZGRyZXNzICsg Q0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJMX1JFR19PRkZTRVQsPGJyPg0KKyBWYWwgfCBDRE5TX1FT UElfRkxBU0hfQ01EX0NUUkxfUkVHX0VYRUNVVEU8YnI+DQorICk7PGJyPg0KKzxicj4NCisgQ09O U1QgVUlOVDY0IFRpY2tPdXQgPTxicj4NCisgR2V0UGVyZm9ybWFuY2VDb3VudGVyICgpICs8YnI+ DQorIE1pbGxpU2Vjb25kc1RvVGlja3MgKENETlNfUVNQSV9GTEFTSF9DTURfU1RBVFVTX1BPTExf VElNRU9VVF9NUyk7PGJyPg0KKzxicj4NCisgLy8gV2FpdCB1bnRpbCBjb21tYW5kIGhhcyBiZWVu IGV4ZWN1dGVkPGJyPg0KKyBkbyB7PGJyPg0KKyBpZiAoR2V0UGVyZm9ybWFuY2VDb3VudGVyICgp ICZndDsgVGlja091dCkgezxicj4NCisgREVCVUcgKCg8YnI+DQorIERFQlVHX0VSUk9SLDxicj4N CisgJnF1b3Q7Q2Ruc1FzcGlFeGVjdXRlQ29tbWFuZDogVGltZW91dCB3YWl0aW5nIGZvciBjb21t YW5kIGV4ZWN1dGlvbi5cbiZxdW90Ozxicj4NCisgKSk7PGJyPg0KKyByZXR1cm4gRUZJX1RJTUVP VVQ7PGJyPg0KKyB9PGJyPg0KKyB9IHdoaWxlICgoTW1pb1JlYWQzMiAoPGJyPg0KKyBJbnN0YW5j ZS0mZ3Q7SG9zdENvbnRyb2xsZXJCYXNlQWRkcmVzcyArPGJyPg0KKyBDRE5TX1FTUElfRkxBU0hf Q01EX0NUUkxfUkVHX09GRlNFVDxicj4NCisgKSAmYW1wOzxicj4NCisgQ0ROU19RU1BJX0ZMQVNI X0NNRF9DVFJMX1JFR19TVEFUVVNfQklUKSA9PTxicj4NCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9D VFJMX1JFR19TVEFUVVNfQklUPGJyPg0KKyApOzxicj4NCis8YnI+DQorIHJldHVybiBFRklfU1VD Q0VTUzs8YnI+DQorfTxicj4NCis8YnI+DQorLyoqPGJyPg0KKyBQb2xsIFN0YXR1cyByZWdpc3Rl ciBmb3IgTk9SIGZsYXNoIGVyYXNlL3dyaXRlIGNvbXBsZXRpb24uPGJyPg0KKzxicj4NCisgQHBh cmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2UuPGJyPg0KKzxicj4NCisgQHJldHZh bCBFRklfU1VDQ0VTUyBSZXF1ZXN0IGlzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS48YnI+DQorIEBy ZXR2YWwgRUZJX1RJTUVPVVQgT3BlcmF0aW9uIHRpbWVkIG91dC48YnI+DQorIEByZXR2YWwgRUZJ X0RFVklDRV9FUlJPUiBDb250cm9sbGVyIG9wZXJhdGlvbiBmYWlsZWQuPGJyPg0KKzxicj4NCisq Ki88YnI+DQorU1RBVElDPGJyPg0KK0VGSV9TVEFUVVM8YnI+DQorTm9yRmxhc2hQb2xsU3RhdHVz UmVnaXN0ZXIgKDxicj4NCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZTxicj4NCisg KTxicj4NCit7PGJyPg0KKyBCT09MRUFOIFNSZWdEb25lOzxicj4NCisgVUlOVDMyIHZhbDs8YnI+ DQorPGJyPg0KKyB2YWwgPSAoU1BJTk9SX09QX1JEU1IgJmx0OyZsdDsgQ0ROU19RU1BJX0ZMQVNI X0NNRF9DVFJMX1JFR19PUENPREVfQklUX1BPUykgfDxicj4NCisgKENETlNfUVNQSV9GTEFTSF9D TURfQ1RSTF9SRUdfUkVBRF9FTkFCTEUgJmx0OyZsdDs8YnI+DQorIENETlNfUVNQSV9GTEFTSF9D TURfQ1RSTF9SRUdfUkVBREVOX0JJVF9QT1MpIHw8YnI+DQorIENETlNfUVNQSV9GTEFTSF9DTURf Q1RSTF9SRUdfTlVNX0RBVEFfQllURVMgKDEpIHw8YnI+DQorIChDRE5TX1FTUElfRkxBU0hfQ01E X0NUUkxfUkVHX0RVTU1ZXzhDICZsdDsmbHQ7PGJyPg0KKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NU UkxfUkVHX0RVTU1ZX0JJVF9QT1MpOzxicj4NCis8YnI+DQorIENPTlNUIFVJTlQ2NCBUaWNrT3V0 ID08YnI+DQorIEdldFBlcmZvcm1hbmNlQ291bnRlciAoKSArPGJyPg0KKyBNaWxsaVNlY29uZHNU b1RpY2tzIChTUElOT1JfU1JfV0lQX1BPTExfVElNRU9VVF9NUyk7PGJyPg0KKzxicj4NCisgZG8g ezxicj4NCisgaWYgKEdldFBlcmZvcm1hbmNlQ291bnRlciAoKSAmZ3Q7IFRpY2tPdXQpIHs8YnI+ DQorIERFQlVHICgoPGJyPg0KKyBERUJVR19FUlJPUiw8YnI+DQorICZxdW90O05vckZsYXNoUG9s bFN0YXR1c1JlZ2lzdGVyOiBUaW1lb3V0IHdhaXRpbmcgZm9yIGVyYXNlL3dyaXRlLlxuJnF1b3Q7 PGJyPg0KKyApKTs8YnI+DQorIHJldHVybiBFRklfVElNRU9VVDs8YnI+DQorIH08YnI+DQorPGJy Pg0KKyBpZiAoRUZJX0VSUk9SIChDZG5zUXNwaUV4ZWN1dGVDb21tYW5kIChJbnN0YW5jZSwgdmFs KSkpIHs8YnI+DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOzxicj4NCisgfTxicj4NCis8YnI+ DQorIFNSZWdEb25lID08YnI+DQorIChNbWlvUmVhZDggKDxicj4NCisgSW5zdGFuY2UtJmd0O0hv c3RDb250cm9sbGVyQmFzZUFkZHJlc3MgKzxicj4NCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9SRUFE X0RBVEFfUkVHX09GRlNFVDxicj4NCisgKTxicj4NCisgJmFtcDsgU1BJTk9SX1NSX1dJUDxicj4N CisgKSA9PSAwOzxicj4NCisgfSB3aGlsZSAoIVNSZWdEb25lKTs8YnI+DQorPGJyPg0KKyByZXR1 cm4gRUZJX1NVQ0NFU1M7PGJyPg0KK308YnI+DQorPGJyPg0KKy8qKjxicj4NCisgQ2hlY2sgd2hl dGhlciBOT1IgZmxhc2ggb3BlcmF0aW9ucyBhcmUgTG9ja2VkLjxicj4NCis8YnI+DQorIEBwYXJh bVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIEluc3RhbmNlLjxicj4NCisgQHBhcmFtW2luXSBCbG9j a0FkZHJlc3MgQmxvY2tBZGRyZXNzIGluIE5PUiBmbGFzaCBkZXZpY2UuPGJyPg0KKzxicj4NCisg QHJldHZhbCBGQUxTRSBJZiBOT1IgZmxhc2ggaXMgbm90IGxvY2tlZC48YnI+DQorKiovPGJyPg0K K1NUQVRJQzxicj4NCitCT09MRUFOPGJyPg0KK05vckZsYXNoQmxvY2tJc0xvY2tlZCAoPGJyPg0K KyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLDxicj4NCisgSU4gVUlOVE4gQmxvY2tB ZGRyZXNzPGJyPg0KKyApPGJyPg0KK3s8YnI+DQorIHJldHVybiBGQUxTRTs8YnI+DQorfTxicj4N Cis8YnI+DQorLyoqPGJyPg0KKyBVbmxvY2sgTk9SIGZsYXNoIG9wZXJhdGlvbnMgb24gZ2l2ZW4g YmxvY2suPGJyPg0KKzxicj4NCisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggaW5zdGFu Y2UuPGJyPg0KKyBAcGFyYW1baW5dIEJsb2NrQWRkcmVzcyBCbG9ja0FkZHJlc3MgaW4gTk9SIGZs YXNoIGRldmljZS48YnI+DQorPGJyPg0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIE5PUiBmbGFzaCBv cGVyYXRpb25zIHVubG9ja2VkLjxicj4NCisqKi88YnI+DQorRUZJX1NUQVRVUzxicj4NCitOb3JG bGFzaFVubG9ja1NpbmdsZUJsb2NrICg8YnI+DQorIElOIE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5z dGFuY2UsPGJyPg0KKyBJTiBVSU5UTiBCbG9ja0FkZHJlc3M8YnI+DQorICk8YnI+DQorezxicj4N CisgcmV0dXJuIEVGSV9TVUNDRVNTOzxicj4NCit9PGJyPg0KKzxicj4NCisvKio8YnI+DQorIFVu bG9jayBOT1IgZmxhc2ggb3BlcmF0aW9ucyBpZiBpdCBpcyBuZWNlc3NhcnkuPGJyPg0KKzxicj4N CisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggaW5zdGFuY2UuPGJyPg0KKyBAcGFyYW1b aW5dIEJsb2NrQWRkcmVzcyBCbG9ja0FkZHJlc3MgaW4gTk9SIGZsYXNoIGRldmljZS48YnI+DQor PGJyPg0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFJlcXVlc3QgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1 bGx5Ljxicj4NCisqKi88YnI+DQorRUZJX1NUQVRVUzxicj4NCitOb3JGbGFzaFVubG9ja1Npbmds ZUJsb2NrSWZOZWNlc3NhcnkgKDxicj4NCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5j ZSw8YnI+DQorIElOIFVJTlROIEJsb2NrQWRkcmVzczxicj4NCisgKTxicj4NCit7PGJyPg0KKyBF RklfU1RBVFVTIFN0YXR1czs8YnI+DQorPGJyPg0KKyBTdGF0dXMgPSBFRklfU1VDQ0VTUzs8YnI+ DQorPGJyPg0KKyBpZiAoIU5vckZsYXNoQmxvY2tJc0xvY2tlZCAoSW5zdGFuY2UsIEJsb2NrQWRk cmVzcykpIHs8YnI+DQorIFN0YXR1cyA9IE5vckZsYXNoVW5sb2NrU2luZ2xlQmxvY2sgKEluc3Rh bmNlLCBCbG9ja0FkZHJlc3MpOzxicj4NCisgfTxicj4NCis8YnI+DQorIHJldHVybiBTdGF0dXM7 PGJyPg0KK308YnI+DQorPGJyPg0KKy8qKjxicj4NCisgRW5hYmxlIHdyaXRlIHRvIE5PUiBmbGFz aCBkZXZpY2UuPGJyPg0KKzxicj4NCisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggaW5z dGFuY2UuPGJyPg0KKzxicj4NCisgQHJldHZhbCBFRklfU1VDQ0VTUyBSZXF1ZXN0IGlzIGV4ZWN1 dGVkIHN1Y2Nlc3NmdWxseS48YnI+DQorIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiBUaGUgZGV2 aWNlIHJlcG9ydGVkIGFuIGVycm9yLjxicj4NCisqKi88YnI+DQorU1RBVElDPGJyPg0KK0VGSV9T VEFUVVM8YnI+DQorTm9yRmxhc2hFbmFibGVXcml0ZSAoPGJyPg0KKyBJTiBOT1JfRkxBU0hfSU5T VEFOQ0UgKkluc3RhbmNlPGJyPg0KKyApPGJyPg0KK3s8YnI+DQorIFVJTlQzMiB2YWw7PGJyPg0K Kzxicj4NCisgREVCVUcgKChERUJVR19JTkZPLCAmcXVvdDtOb3JGbGFzaEVuYWJsZVdyaXRlKClc biZxdW90OykpOzxicj4NCisgdmFsID0gKFNQSU5PUl9PUF9XUkVOICZsdDsmbHQ7IENETlNfUVNQ SV9GTEFTSF9DTURfQ1RSTF9SRUdfT1BDT0RFX0JJVF9QT1MpOzxicj4NCisgaWYgKEVGSV9FUlJP UiAoQ2Ruc1FzcGlFeGVjdXRlQ29tbWFuZCAoSW5zdGFuY2UsIHZhbCkpKSB7PGJyPg0KKyByZXR1 cm4gRUZJX0RFVklDRV9FUlJPUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyByZXR1cm4gRUZJX1NV Q0NFU1M7PGJyPg0KK308YnI+DQorPGJyPg0KKy8qKjxicj4NCisgVGhlIGZvbGxvd2luZyBmdW5j dGlvbiBwcmVzdW1lcyB0aGF0IHRoZSBibG9jayBoYXMgYWxyZWFkeSBiZWVuIHVubG9ja2VkLjxi cj4NCis8YnI+DQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIGluc3RhbmNlLjxicj4N CisgQHBhcmFtW2luXSBCbG9ja0FkZHJlc3MgQmxvY2sgYWRkcmVzcyB3aXRoaW4gdGhlIHZhcmlh YmxlIHJlZ2lvbi48YnI+DQorPGJyPg0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFJlcXVlc3QgaXMg ZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Ljxicj4NCisgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SIFRo ZSBkZXZpY2UgcmVwb3J0ZWQgYW4gZXJyb3IuPGJyPg0KKyAqKi88YnI+DQorRUZJX1NUQVRVUzxi cj4NCitOb3JGbGFzaEVyYXNlU2luZ2xlQmxvY2sgKDxicj4NCisgSU4gTk9SX0ZMQVNIX0lOU1RB TkNFICpJbnN0YW5jZSw8YnI+DQorIElOIFVJTlROIEJsb2NrQWRkcmVzczxicj4NCisgKTxicj4N Cit7PGJyPg0KKyBVSU5UMzIgRGV2Q29uZmlnVmFsOzxicj4NCisgVUlOVDMyIEVyYXNlT2Zmc2V0 Ozxicj4NCis8YnI+DQorIEVyYXNlT2Zmc2V0ID0gMHgwOzxicj4NCis8YnI+DQorIERFQlVHICgo PGJyPg0KKyBERUJVR19JTkZPLDxicj4NCisgJnF1b3Q7Tm9yRmxhc2hFcmFzZVNpbmdsZUJsb2Nr KEJsb2NrQWRkcmVzcz0weCUwOHgpXG4mcXVvdDssPGJyPg0KKyBCbG9ja0FkZHJlc3M8YnI+DQor ICkpOzxicj4NCis8YnI+DQorIGlmIChFRklfRVJST1IgKE5vckZsYXNoRW5hYmxlV3JpdGUgKElu c3RhbmNlKSkpIHs8YnI+DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOzxicj4NCisgfTxicj4N Cis8YnI+DQorIEVyYXNlT2Zmc2V0ID0gQmxvY2tBZGRyZXNzIC0gSW5zdGFuY2UtJmd0O0Rldmlj ZUJhc2VBZGRyZXNzOzxicj4NCis8YnI+DQorIE1taW9Xcml0ZTMyICg8YnI+DQorIEluc3RhbmNl LSZndDtIb3N0Q29udHJvbGxlckJhc2VBZGRyZXNzICsgQ0ROU19RU1BJX0ZMQVNIX0NNRF9BRERS X1JFR19PRkZTRVQsPGJyPg0KKyBFcmFzZU9mZnNldDxicj4NCisgKTs8YnI+DQorPGJyPg0KKyBE ZXZDb25maWdWYWwgPSAoU1BJTk9SX09QX0JFXzRLICZsdDsmbHQ7IENETlNfUVNQSV9GTEFTSF9D TURfQ1RSTF9SRUdfT1BDT0RFX0JJVF9QT1MpIHw8YnI+DQorIChDRE5TX1FTUElfRkxBU0hfQ01E X0NUUkxfUkVHX0FERFJfRU5BQkxFICZsdDsmbHQ7PGJyPg0KKyBDRE5TX1FTUElfRkxBU0hfQ01E X0NUUkxfUkVHX0FERFJfQklUX1BPUykgfDxicj4NCisgQ0ROU19RU1BJX0ZMQVNIX0NNRF9DVFJM X1JFR19OVU1fQUREUl9CWVRFUyAoMyk7PGJyPg0KKzxicj4NCisgaWYgKEVGSV9FUlJPUiAoQ2Ru c1FzcGlFeGVjdXRlQ29tbWFuZCAoSW5zdGFuY2UsIERldkNvbmZpZ1ZhbCkpKSB7PGJyPg0KKyBy ZXR1cm4gRUZJX0RFVklDRV9FUlJPUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyBpZiAoRUZJX0VS Uk9SIChOb3JGbGFzaFBvbGxTdGF0dXNSZWdpc3RlciAoSW5zdGFuY2UpKSkgezxicj4NCisgcmV0 dXJuIEVGSV9ERVZJQ0VfRVJST1I7PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgcmV0dXJuIEVGSV9T VUNDRVNTOzxicj4NCit9PGJyPg0KKzxicj4NCisvKio8YnI+DQorIFRoaXMgZnVuY3Rpb24gdW5s b2NrcyBhbmQgZXJhc2VzIGFuIGVudGlyZSBOT1IgRmxhc2ggYmxvY2suPGJyPg0KKzxicj4NCisg QHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ugb2YgdmFyaWFibGUgc3RvcmUg cmVnaW9uLjxicj4NCisgQHBhcmFtW2luXSBCbG9ja0FkZHJlc3MgQmxvY2sgYWRkcmVzcyB3aXRo aW4gdGhlIHZhcmlhYmxlIHN0b3JlIHJlZ2lvbi48YnI+DQorPGJyPg0KKyBAcmV0dmFsIEVGSV9T VUNDRVNTIEVyYXNlIGFuZCB1bmxvY2sgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC48YnI+DQorIEBy ZXR2YWwgRUZJX0RFVklDRV9FUlJPUiBUaGUgZGV2aWNlIHJlcG9ydGVkIGFuIGVycm9yLjxicj4N CisqKi88YnI+DQorRUZJX1NUQVRVUzxicj4NCitOb3JGbGFzaFVubG9ja0FuZEVyYXNlU2luZ2xl QmxvY2sgKDxicj4NCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSw8YnI+DQorIElO IFVJTlROIEJsb2NrQWRkcmVzczxicj4NCisgKTxicj4NCit7PGJyPg0KKyBFRklfU1RBVFVTIFN0 YXR1czs8YnI+DQorIFVJTlROIEluZGV4Ozxicj4NCisgRUZJX1RQTCBPcmlnaW5hbFRQTDs8YnI+ DQorPGJyPg0KKyBOb3JGbGFzaExvY2sgKCZhbXA7T3JpZ2luYWxUUEwpOzxicj4NCis8YnI+DQor IEluZGV4ID0gMDs8YnI+DQorIGRvIHs8YnI+DQorIC8vIFVubG9jayB0aGUgYmxvY2sgaWYgd2Ug aGF2ZSB0bzxicj4NCisgU3RhdHVzID0gTm9yRmxhc2hVbmxvY2tTaW5nbGVCbG9ja0lmTmVjZXNz YXJ5IChJbnN0YW5jZSwgQmxvY2tBZGRyZXNzKTs8YnI+DQorIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHs8YnI+DQorIGJyZWFrOzxicj4NCisgfTxicj4NCis8YnI+DQorIFN0YXR1cyA9IE5vckZs YXNoRXJhc2VTaW5nbGVCbG9jayAoSW5zdGFuY2UsIEJsb2NrQWRkcmVzcyk7PGJyPg0KKyBpZiAo RUZJX0VSUk9SIChTdGF0dXMpKSB7PGJyPg0KKyBicmVhazs8YnI+DQorIH08YnI+DQorPGJyPg0K KyBJbmRleCsrOzxicj4NCisgfSB3aGlsZSAoKEluZGV4ICZsdDsgTk9SX0ZMQVNIX0VSQVNFX1JF VFJZKSAmYW1wOyZhbXA7IChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpKTs8YnI+DQpbU0FNSV0gSSB0 aGluayB0aGVyZSBpcyBzb21ldGhpbmcgd3Jvbmcgd2l0aCB0aGUgbG9vcCBjb25kaXRpb24uIDxi cj4NCklmIEkgYW0gbm90IHdyb25nLCB0aGUgY2hlY2sgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykg ZG9lcyBub3Qgc2VlbSB0byBoYXZlIGFueSBlZmZlY3QgYXMgdGhlIGNvZGUgaW4gdGhlIHdoaWxl IGxvb3Agd2lsbCBicmVhayBvdXQgb2YgdGhlcmUgaXMgYW4gZXJyb3IuPGJyPg0KQ2FuIHlvdSBj aGVjaywgcGxlYXNlPzxicj4NClsvU0FNSV08YnI+DQo8YnI+DQo8YnI+DQorPGJyPg0KKyBpZiAo SW5kZXggPT0gTk9SX0ZMQVNIX0VSQVNFX1JFVFJZKSB7PGJyPg0KKyBERUJVRyAoKDxicj4NCisg REVCVUdfRVJST1IsPGJyPg0KKyAmcXVvdDtFcmFzZVNpbmdsZUJsb2NrKEJsb2NrQWRkcmVzcz0w eCUwOHg6IEJsb2NrIExvY2tlZCBFcnJvciAmcXVvdDs8YnI+DQorICZxdW90Oyh0cnkgdG8gZXJh c2UgJWQgdGltZXMpXG4mcXVvdDssPGJyPg0KKyBCbG9ja0FkZHJlc3MsPGJyPg0KKyBJbmRleDxi cj4NCisgKSk7PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgTm9yRmxhc2hVbmxvY2sgKE9yaWdpbmFs VFBMKTs8YnI+DQorPGJyPg0KKyByZXR1cm4gU3RhdHVzOzxicj4NCit9PGJyPg0KKzxicj4NCisv Kio8YnI+DQorIFdyaXRlIGEgc2luZ2xlIHdvcmQgdG8gZ2l2ZW4gbG9jYXRpb24uPGJyPg0KKzxi cj4NCisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ugb2YgdmFyaWFibGUg c3RvcmUgcmVnaW9uLjxicj4NCisgQHBhcmFtW2luXSBXb3JkQWRkcmVzcyBUaGUgYWRkcmVzcyBp biBOT1IgZmxhc2ggdG8gd3JpdGUgZ2l2ZW4gd29yZC48YnI+DQorIEBwYXJhbVtpbl0gV3JpdGVE YXRhIFRoZSBkYXRhIHRvIHdyaXRlIGludG8gTk9SIGZsYXNoIGxvY2F0aW9uLjxicj4NCis8YnI+ DQorIEByZXR2YWwgRUZJX1NVQ0NFU1MgV3JpdGUgaXMgY29tcGxldGUuPGJyPg0KKyBAcmV0dmFs IEVGSV9ERVZJQ0VfRVJST1IgVGhlIGRldmljZSByZXBvcnRlZCBhbiBlcnJvci48YnI+DQorKiov PGJyPg0KK0VGSV9TVEFUVVM8YnI+DQorTm9yRmxhc2hXcml0ZVNpbmdsZVdvcmQgKDxicj4NCisg SU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSw8YnI+DQorIElOIFVJTlROIFdvcmRBZGRy ZXNzLDxicj4NCisgSU4gVUlOVDMyIFdyaXRlRGF0YTxicj4NCisgKTxicj4NCit7PGJyPg0KKyBE RUJVRyAoKDxicj4NCisgREVCVUdfSU5GTyw8YnI+DQorICZxdW90O05vckZsYXNoV3JpdGVTaW5n bGVXb3JkKFdvcmRBZGRyZXNzPTB4JTA4eCwgV3JpdGVEYXRhPTB4JTA4eClcbiZxdW90Oyw8YnI+ DQorIFdvcmRBZGRyZXNzLDxicj4NCisgV3JpdGVEYXRhPGJyPg0KKyApKTs8YnI+DQorPGJyPg0K KyBpZiAoRUZJX0VSUk9SIChOb3JGbGFzaEVuYWJsZVdyaXRlIChJbnN0YW5jZSkpKSB7PGJyPg0K KyByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyBNbWlvV3Jp dGUzMiAoV29yZEFkZHJlc3MsIFdyaXRlRGF0YSk7PGJyPg0KKyBpZiAoRUZJX0VSUk9SIChOb3JG bGFzaFBvbGxTdGF0dXNSZWdpc3RlciAoSW5zdGFuY2UpKSkgezxicj4NCisgcmV0dXJuIEVGSV9E RVZJQ0VfRVJST1I7PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgcmV0dXJuIEVGSV9TVUNDRVNTOzxi cj4NCit9PGJyPg0KKzxicj4NCisvKio8YnI+DQorIFdyaXRlIGEgZnVsbCBibG9jayB0byBnaXZl biBsb2NhdGlvbi48YnI+DQorPGJyPg0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBJ bnN0YW5jZSBvZiB2YXJpYWJsZSBzdG9yZSByZWdpb24uPGJyPg0KKyBAcGFyYW1baW5dIExiYSBU aGUgbG9naWNhbCBibG9jayBhZGRyZXNzIGluIE5PUiBmbGFzaC48YnI+DQorIEBwYXJhbVtpbl0g RGF0YUJ1ZmZlciBUaGUgZGF0YSB0byB3cml0ZSBpbnRvIE5PUiBmbGFzaCBsb2NhdGlvbi48YnI+ DQorIEBwYXJhbVtpbl0gQmxvY2tTaXplSW5Xb3JkcyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHdy aXRlLjxicj4NCis8YnI+DQorIEByZXR2YWwgRUZJX1NVQ0NFU1MgV3JpdGUgaXMgY29tcGxldGUu PGJyPg0KKyBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgVGhlIGRldmljZSByZXBvcnRlZCBhbiBl cnJvci48YnI+DQorKiovPGJyPg0KK0VGSV9TVEFUVVM8YnI+DQorTm9yRmxhc2hXcml0ZUZ1bGxC bG9jayAoPGJyPg0KKyBJTiBOT1JfRkxBU0hfSU5TVEFOQ0UgKkluc3RhbmNlLDxicj4NCisgSU4g RUZJX0xCQSBMYmEsPGJyPg0KKyBJTiBVSU5UMzIgKkRhdGFCdWZmZXIsPGJyPg0KKyBJTiBVSU5U MzIgQmxvY2tTaXplSW5Xb3Jkczxicj4NCisgKTxicj4NCit7PGJyPg0KKyBFRklfU1RBVFVTIFN0 YXR1czs8YnI+DQorIFVJTlROIFdvcmRBZGRyZXNzOzxicj4NCisgVUlOVDMyIFdvcmRJbmRleDs8 YnI+DQorIFVJTlROIEJsb2NrQWRkcmVzczs8YnI+DQorIEVGSV9UUEwgT3JpZ2luYWxUUEw7PGJy Pg0KKzxicj4NCisgU3RhdHVzID0gRUZJX1NVQ0NFU1M7PGJyPg0KKzxicj4NCisgLy8gR2V0IHRo ZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBibG9jazxicj4NCisgQmxvY2tBZGRyZXNzID0gR0VU X05PUl9CTE9DS19BRERSRVNTICg8YnI+DQorIEluc3RhbmNlLSZndDtSZWdpb25CYXNlQWRkcmVz cyw8YnI+DQorIExiYSw8YnI+DQorIEJsb2NrU2l6ZUluV29yZHMgKiA0PGJyPg0KKyApOzxicj4N Cis8YnI+DQorIC8vIFN0YXJ0IHdyaXRpbmcgZnJvbSB0aGUgZmlyc3QgYWRkcmVzcyBhdCB0aGUg c3RhcnQgb2YgdGhlIGJsb2NrPGJyPg0KKyBXb3JkQWRkcmVzcyA9IEJsb2NrQWRkcmVzczs8YnI+ DQorPGJyPg0KKyBOb3JGbGFzaExvY2sgKCZhbXA7T3JpZ2luYWxUUEwpOzxicj4NCis8YnI+DQor IFN0YXR1cyA9IE5vckZsYXNoVW5sb2NrQW5kRXJhc2VTaW5nbGVCbG9jayAoSW5zdGFuY2UsIEJs b2NrQWRkcmVzcyk7PGJyPg0KKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7PGJyPg0KKyBERUJV RyAoKDxicj4NCisgREVCVUdfRVJST1IsPGJyPg0KKyAmcXVvdDtXcml0ZVNpbmdsZUJsb2NrOiBF UlJPUiAtIEZhaWxlZCB0byBVbmxvY2sgYW5kIEVyYXNlIHRoZSBzaW5nbGUgJnF1b3Q7PGJyPg0K KyAmcXVvdDtibG9jayBhdCAweCVYXG4mcXVvdDssPGJyPg0KKyBCbG9ja0FkZHJlc3M8YnI+DQor ICkpOzxicj4NCisgZ290byBleGl0X2hhbmRsZXI7PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgZm9y IChXb3JkSW5kZXggPSAwOzxicj4NCisgV29yZEluZGV4ICZsdDsgQmxvY2tTaXplSW5Xb3Jkczs8 YnI+DQorIFdvcmRJbmRleCsrLCBEYXRhQnVmZmVyKyssIFdvcmRBZGRyZXNzICs9IDQpPGJyPg0K KyB7PGJyPg0KKyBTdGF0dXMgPSBOb3JGbGFzaFdyaXRlU2luZ2xlV29yZCAoSW5zdGFuY2UsIFdv cmRBZGRyZXNzLCAqRGF0YUJ1ZmZlcik7PGJyPg0KKyBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 PGJyPg0KKyBnb3RvIGV4aXRfaGFuZGxlcjs8YnI+DQorIH08YnI+DQorIH08YnI+DQorPGJyPg0K K2V4aXRfaGFuZGxlcjo8YnI+DQorIE5vckZsYXNoVW5sb2NrIChPcmlnaW5hbFRQTCk7PGJyPg0K Kzxicj4NCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgezxicj4NCisgREVCVUcgKCg8YnI+DQor IERFQlVHX0VSUk9SLDxicj4NCisgJnF1b3Q7Tk9SIEZMQVNIIFByb2dyYW1taW5nIFtXcml0ZVNp bmdsZUJsb2NrXSBmYWlsZWQgYXQgYWRkcmVzcyAweCUwOHguICZxdW90Ozxicj4NCisgJnF1b3Q7 RXhpdCBTdGF0dXMgPSAlci5cbiZxdW90Oyw8YnI+DQorIFdvcmRBZGRyZXNzLDxicj4NCisgU3Rh dHVzPGJyPg0KKyApKTs8YnI+DQorIH08YnI+DQorPGJyPg0KKyByZXR1cm4gU3RhdHVzOzxicj4N Cit9PGJyPg0KKzxicj4NCisvKio8YnI+DQorIFdyaXRlIG11bHRpcGxlIGJsb2Nrcy48YnI+DQor PGJyPg0KKyBAcGFyYW1baW5dIEluc3RhbmNlIE5PUiBmbGFzaCBJbnN0YW5jZSBvZiB2YXJpYWJs ZSBzdG9yZSByZWdpb24uPGJyPg0KKyBAcGFyYW1baW5dIExiYSBUaGUgc3RhcnRpbmcgbG9naWNh bCBibG9jayBpbmRleC48YnI+DQorIEBwYXJhbVtpbl0gQnVmZmVyU2l6ZUluQnl0ZXMgVGhlIG51 bWJlciBvZiBieXRlcyB0byB3cml0ZS48YnI+DQorIEBwYXJhbVtpbl0gQnVmZmVyIFRoZSBwb2lu dGVyIHRvIGEgY2FsbGVyLWFsbG9jYXRlZCBidWZmZXIgdGhhdDxicj4NCisgY29udGFpbnMgdGhl IHNvdXJjZSBmb3IgdGhlIHdyaXRlLjxicj4NCis8YnI+DQorIEByZXR2YWwgRUZJX1NVQ0NFU1Mg V3JpdGUgaXMgY29tcGxldGUuPGJyPg0KKyBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJ bnZhbGlkIHBhcmFtZXRlcnMgcGFzc2VkLjxicj4NCisgQHJldHZhbCBFRklfQkFEX0JVRkZFUl9T SVpFIEludmFsaWQgYnVmZmVyIHNpemUgcGFzc2VkLjxicj4NCisqKi88YnI+DQorRUZJX1NUQVRV Uzxicj4NCitOb3JGbGFzaFdyaXRlQmxvY2tzICg8YnI+DQorIElOIE5PUl9GTEFTSF9JTlNUQU5D RSAqSW5zdGFuY2UsPGJyPg0KKyBJTiBFRklfTEJBIExiYSw8YnI+DQorIElOIFVJTlROIEJ1ZmZl clNpemVJbkJ5dGVzLDxicj4NCisgSU4gVk9JRCAqQnVmZmVyPGJyPg0KKyApPGJyPg0KK3s8YnI+ DQorIFVJTlQzMiAqV3JpdGVCdWZmZXI7PGJyPg0KKyBFRklfU1RBVFVTIFN0YXR1czs8YnI+DQor IEVGSV9MQkEgQ3VycmVudEJsb2NrOzxicj4NCisgVUlOVDMyIEJsb2NrU2l6ZUluV29yZHM7PGJy Pg0KKyBVSU5UMzIgTnVtQmxvY2tzOzxicj4NCisgVUlOVDMyIEJsb2NrQ291bnQ7PGJyPg0KKzxi cj4NCisgU3RhdHVzID0gRUZJX1NVQ0NFU1M7PGJyPg0KKyAvLyBUaGUgYnVmZmVyIG11c3QgYmUg dmFsaWQ8YnI+DQorIGlmIChCdWZmZXIgPT0gTlVMTCkgezxicj4NCisgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyAvLyBXZSBtdXN0IGhhdmUgc29t ZSBieXRlcyB0byByZWFkPGJyPg0KKyBERUJVRyAoKDxicj4NCisgREVCVUdfSU5GTyw8YnI+DQor ICZxdW90O05vckZsYXNoV3JpdGVCbG9ja3M6IEJ1ZmZlclNpemVJbkJ5dGVzPTB4JXhcbiZxdW90 Oyw8YnI+DQorIEJ1ZmZlclNpemVJbkJ5dGVzPGJyPg0KKyApKTs8YnI+DQorIGlmIChCdWZmZXJT aXplSW5CeXRlcyA9PSAwKSB7PGJyPg0KKyByZXR1cm4gRUZJX0JBRF9CVUZGRVJfU0laRTs8YnI+ DQorIH08YnI+DQorPGJyPg0KKyAvLyBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIG11c3QgYmUgYSBt dWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZTxicj4NCisgREVCVUcgKCg8YnI+DQorIERFQlVHX0lO Rk8sPGJyPg0KKyAmcXVvdDtOb3JGbGFzaFdyaXRlQmxvY2tzOiBCbG9ja1NpemUgaW4gYnl0ZXMg PTB4JXhcbiZxdW90Oyw8YnI+DQorIEluc3RhbmNlLSZndDtNZWRpYS5CbG9ja1NpemU8YnI+DQor ICkpOzxicj4NCisgaWYgKChCdWZmZXJTaXplSW5CeXRlcyAlIEluc3RhbmNlLSZndDtNZWRpYS5C bG9ja1NpemUpICE9IDApIHs8YnI+DQorIHJldHVybiBFRklfQkFEX0JVRkZFUl9TSVpFOzxicj4N CisgfTxicj4NCis8YnI+DQorIC8vIEFsbCBibG9ja3MgbXVzdCBiZSB3aXRoaW4gdGhlIGRldmlj ZTxicj4NCisgTnVtQmxvY2tzID0gKChVSU5UMzIpQnVmZmVyU2l6ZUluQnl0ZXMpIC8gSW5zdGFu Y2UtJmd0O01lZGlhLkJsb2NrU2l6ZTs8YnI+DQorPGJyPg0KKyBERUJVRyAoKDxicj4NCisgREVC VUdfSU5GTyw8YnI+DQorICZxdW90O05vckZsYXNoV3JpdGVCbG9ja3M6IE51bUJsb2Nrcz0lZCwg TGFzdEJsb2NrPSVsZCwgTGJhPSVsZC5cbiZxdW90Oyw8YnI+DQorIE51bUJsb2Nrcyw8YnI+DQor IEluc3RhbmNlLSZndDtNZWRpYS5MYXN0QmxvY2ssPGJyPg0KKyBMYmE8YnI+DQorICkpOzxicj4N Cis8YnI+DQorIGlmICgoTGJhICsgTnVtQmxvY2tzKSAmZ3Q7IChJbnN0YW5jZS0mZ3Q7TWVkaWEu TGFzdEJsb2NrICsgMSkpIHs8YnI+DQorIERFQlVHICgoPGJyPg0KKyBERUJVR19FUlJPUiw8YnI+ DQorICZxdW90O05vckZsYXNoV3JpdGVCbG9ja3M6IEVSUk9SIC0gV3JpdGUgd2lsbCBleGNlZWQg bGFzdCBibG9jay5cbiZxdW90Ozxicj4NCisgKSk7PGJyPg0KKyByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOzxicj4NCisgfTxicj4NCis8YnI+DQorIEJsb2NrU2l6ZUluV29yZHMgPSBJbnN0 YW5jZS0mZ3Q7TWVkaWEuQmxvY2tTaXplIC8gNDs8YnI+DQorPGJyPg0KKyAvLyBCZWNhdXNlIHRo ZSB0YXJnZXQgKkJ1ZmZlciBpcyBhIHBvaW50ZXIgdG8gVk9JRCwgd2UgbXVzdCBwdXQ8YnI+DQor IC8vIGFsbCB0aGUgZGF0YSBpbnRvIGEgcG9pbnRlciB0byBhIHByb3BlciBkYXRhIHR5cGUsIHNv IHVzZSAqV3JpdGVCdWZmZXI8YnI+DQorIFdyaXRlQnVmZmVyID0gKFVJTlQzMiAqKUJ1ZmZlcjs8 YnI+DQorPGJyPg0KKyBDdXJyZW50QmxvY2sgPSBMYmE7PGJyPg0KKyBmb3IgKEJsb2NrQ291bnQg PSAwOzxicj4NCisgQmxvY2tDb3VudCAmbHQ7IE51bUJsb2Nrczs8YnI+DQorIEJsb2NrQ291bnQr KywgQ3VycmVudEJsb2NrKyssIFdyaXRlQnVmZmVyICs9IEJsb2NrU2l6ZUluV29yZHMpPGJyPg0K KyB7PGJyPg0KKyBERUJVRyAoKDxicj4NCisgREVCVUdfSU5GTyw8YnI+DQorICZxdW90O05vckZs YXNoV3JpdGVCbG9ja3M6IFdyaXRpbmcgYmxvY2sgIyVkXG4mcXVvdDssPGJyPg0KKyAoVUlOVE4p Q3VycmVudEJsb2NrPGJyPg0KKyApKTs8YnI+DQorPGJyPg0KKyBTdGF0dXMgPSBOb3JGbGFzaFdy aXRlRnVsbEJsb2NrICg8YnI+DQorIEluc3RhbmNlLDxicj4NCisgQ3VycmVudEJsb2NrLDxicj4N CisgV3JpdGVCdWZmZXIsPGJyPg0KKyBCbG9ja1NpemVJbldvcmRzPGJyPg0KKyApOzxicj4NCis8 YnI+DQorIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHs8YnI+DQorIGJyZWFrOzxicj4NCisgfTxi cj4NCisgfTxicj4NCis8YnI+DQorIERFQlVHICgoREVCVUdfSU5GTywgJnF1b3Q7Tm9yRmxhc2hX cml0ZUJsb2NrczogRXhpdCBTdGF0dXMgPSAlci5cbiZxdW90OywgU3RhdHVzKSk7PGJyPg0KKyBy ZXR1cm4gU3RhdHVzOzxicj4NCit9PGJyPg0KKzxicj4NCisvKio8YnI+DQorIFJlYWQgbXVsdGlw bGUgYmxvY2tzLjxicj4NCis8YnI+DQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIElu c3RhbmNlIG9mIHZhcmlhYmxlIHN0b3JlIHJlZ2lvbi48YnI+DQorIEBwYXJhbVtpbl0gTGJhIFRo ZSBzdGFydGluZyBsb2dpY2FsIGJsb2NrIGluZGV4IHRvIHJlYWQgZnJvbS48YnI+DQorIEBwYXJh bVtpbl0gQnVmZmVyU2l6ZUluQnl0ZXMgVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkLjxicj4N CisgQHBhcmFtW291dF0gQnVmZmVyIFRoZSBwb2ludGVyIHRvIGEgY2FsbGVyLWFsbG9jYXRlZCBi dWZmZXIgdGhhdDxicj4NCisgc2hvdWxkIGJlIGNvcGllZCB3aXRoIHJlYWQgZGF0YS48YnI+DQor PGJyPg0KKyBAcmV0dmFsIEVGSV9TVUNDRVNTIFJlYWQgaXMgY29tcGxldGUuPGJyPg0KKyBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBJbnZhbGlkIHBhcmFtZXRlcnMgcGFzc2VkLjxicj4N CisgQHJldHZhbCBFRklfQkFEX0JVRkZFUl9TSVpFIEludmFsaWQgYnVmZmVyIHNpemUgcGFzc2Vk Ljxicj4NCisqKi88YnI+DQorRUZJX1NUQVRVUzxicj4NCitOb3JGbGFzaFJlYWRCbG9ja3MgKDxi cj4NCisgSU4gTk9SX0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSw8YnI+DQorIElOIEVGSV9MQkEg TGJhLDxicj4NCisgSU4gVUlOVE4gQnVmZmVyU2l6ZUluQnl0ZXMsPGJyPg0KKyBPVVQgVk9JRCAq QnVmZmVyPGJyPg0KKyApPGJyPg0KK3s8YnI+DQorIFVJTlQzMiBOdW1CbG9ja3M7PGJyPg0KKyBV SU5UTiBTdGFydEFkZHJlc3M7PGJyPg0KKzxicj4NCisgREVCVUcgKCg8YnI+DQorIERFQlVHX0lO Rk8sPGJyPg0KKyAmcXVvdDtOb3JGbGFzaFJlYWRCbG9ja3M6IEJ1ZmZlclNpemU9MHgleEIgQmxv Y2tTaXplPTB4JXhCIExhc3RCbG9jaz0lbGQsICZxdW90Ozxicj4NCisgJnF1b3Q7TGJhPSVsZC5c biZxdW90Oyw8YnI+DQorIEJ1ZmZlclNpemVJbkJ5dGVzLDxicj4NCisgSW5zdGFuY2UtJmd0O01l ZGlhLkJsb2NrU2l6ZSw8YnI+DQorIEluc3RhbmNlLSZndDtNZWRpYS5MYXN0QmxvY2ssPGJyPg0K KyBMYmE8YnI+DQorICkpOzxicj4NCis8YnI+DQorIC8vIFRoZSBidWZmZXIgbXVzdCBiZSB2YWxp ZDxicj4NCisgaWYgKEJ1ZmZlciA9PSBOVUxMKSB7PGJyPg0KKyByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOzxicj4NCisgfTxicj4NCis8YnI+DQorIC8vIFJldHVybiBpZiB3ZSBkbyBub3Qg aGF2ZSBhbnkgYnl0ZSB0byByZWFkPGJyPg0KKyBpZiAoQnVmZmVyU2l6ZUluQnl0ZXMgPT0gMCkg ezxicj4NCisgcmV0dXJuIEVGSV9TVUNDRVNTOzxicj4NCisgfTxicj4NCis8YnI+DQorIC8vIFRo ZSBzaXplIG9mIHRoZSBidWZmZXIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBibG9jayBzaXpl PGJyPg0KKyBpZiAoKEJ1ZmZlclNpemVJbkJ5dGVzICUgSW5zdGFuY2UtJmd0O01lZGlhLkJsb2Nr U2l6ZSkgIT0gMCkgezxicj4NCisgcmV0dXJuIEVGSV9CQURfQlVGRkVSX1NJWkU7PGJyPg0KKyB9 PGJyPg0KKzxicj4NCisgTnVtQmxvY2tzID0gKChVSU5UMzIpQnVmZmVyU2l6ZUluQnl0ZXMpIC8g SW5zdGFuY2UtJmd0O01lZGlhLkJsb2NrU2l6ZTs8YnI+DQorPGJyPg0KKyBpZiAoKExiYSArIE51 bUJsb2NrcykgJmd0OyAoSW5zdGFuY2UtJmd0O01lZGlhLkxhc3RCbG9jayArIDEpKSB7PGJyPg0K KyBERUJVRyAoKDxicj4NCisgREVCVUdfRVJST1IsPGJyPg0KKyAmcXVvdDtOb3JGbGFzaFJlYWRC bG9ja3M6IEVSUk9SIC0gUmVhZCB3aWxsIGV4Y2VlZCBsYXN0IGJsb2NrXG4mcXVvdDs8YnI+DQor ICkpOzxicj4NCisgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjs8YnI+DQorIH08YnI+DQor PGJyPg0KKyAvLyBHZXQgdGhlIGFkZHJlc3MgdG8gc3RhcnQgcmVhZGluZyBmcm9tPGJyPg0KKyBT dGFydEFkZHJlc3MgPSBHRVRfTk9SX0JMT0NLX0FERFJFU1MgKDxicj4NCisgSW5zdGFuY2UtJmd0 O1JlZ2lvbkJhc2VBZGRyZXNzLDxicj4NCisgTGJhLDxicj4NCisgSW5zdGFuY2UtJmd0O01lZGlh LkJsb2NrU2l6ZTxicj4NCisgKTs8YnI+DQorPGJyPg0KKyAvLyBSZWFkb3V0IHRoZSBkYXRhPGJy Pg0KKyBDb3B5TWVtIChCdWZmZXIsIChVSU5UTiAqKVN0YXJ0QWRkcmVzcywgQnVmZmVyU2l6ZUlu Qnl0ZXMpOzxicj4NCis8YnI+DQorIHJldHVybiBFRklfU1VDQ0VTUzs8YnI+DQorfTxicj4NCis8 YnI+DQorLyoqPGJyPg0KKyBSZWFkIGZyb20gTk9SIGZsYXNoLjxicj4NCis8YnI+DQorIEBwYXJh bVtpbl0gSW5zdGFuY2UgTk9SIGZsYXNoIEluc3RhbmNlIG9mIHZhcmlhYmxlIHN0b3JlIHJlZ2lv bi48YnI+DQorIEBwYXJhbVtpbl0gTGJhIFRoZSBzdGFydGluZyBsb2dpY2FsIGJsb2NrIGluZGV4 IHRvIHJlYWQgZnJvbS48YnI+DQorIEBwYXJhbVtpbl0gT2Zmc2V0IE9mZnNldCBpbnRvIHRoZSBi bG9jayBhdCB3aGljaCB0byBiZWdpbiByZWFkaW5nLjxicj4NCisgQHBhcmFtW2luXSBCdWZmZXJT aXplSW5CeXRlcyBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuPGJyPg0KKyBAcGFyYW1bb3V0 XSBCdWZmZXIgVGhlIHBvaW50ZXIgdG8gYSBjYWxsZXItYWxsb2NhdGVkIGJ1ZmZlciB0aGF0PGJy Pg0KKyBzaG91bGQgYmUgY29waWVkIHdpdGggcmVhZCBkYXRhLjxicj4NCis8YnI+DQorIEByZXR2 YWwgRUZJX1NVQ0NFU1MgUmVhZCBpcyBjb21wbGV0ZS48YnI+DQorIEByZXR2YWwgRUZJX0lOVkFM SURfUEFSQU1FVEVSIEludmFsaWQgcGFyYW1ldGVycyBwYXNzZWQuPGJyPg0KKyoqLzxicj4NCitF RklfU1RBVFVTPGJyPg0KK05vckZsYXNoUmVhZCAoPGJyPg0KKyBJTiBOT1JfRkxBU0hfSU5TVEFO Q0UgKkluc3RhbmNlLDxicj4NCisgSU4gRUZJX0xCQSBMYmEsPGJyPg0KKyBJTiBVSU5UTiBPZmZz ZXQsPGJyPg0KKyBJTiBVSU5UTiBCdWZmZXJTaXplSW5CeXRlcyw8YnI+DQorIE9VVCBWT0lEICpC dWZmZXI8YnI+DQorICk8YnI+DQorezxicj4NCisgVUlOVE4gU3RhcnRBZGRyZXNzOzxicj4NCis8 YnI+DQorIC8vIFRoZSBidWZmZXIgbXVzdCBiZSB2YWxpZDxicj4NCisgaWYgKEJ1ZmZlciA9PSBO VUxMKSB7PGJyPg0KKyByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOzxicj4NCisgfTxicj4N Cis8YnI+DQorIC8vIFJldHVybiBpZiB3ZSBkbyBub3QgaGF2ZSBhbnkgYnl0ZSB0byByZWFkPGJy Pg0KKyBpZiAoQnVmZmVyU2l6ZUluQnl0ZXMgPT0gMCkgezxicj4NCisgcmV0dXJuIEVGSV9TVUND RVNTOzxicj4NCisgfTxicj4NCis8YnI+DQorIGlmICgoKExiYSAqIEluc3RhbmNlLSZndDtNZWRp YS5CbG9ja1NpemUpICsgT2Zmc2V0ICsgQnVmZmVyU2l6ZUluQnl0ZXMpICZndDs8YnI+DQorIElu c3RhbmNlLSZndDtTaXplKTxicj4NCisgezxicj4NCisgREVCVUcgKCg8YnI+DQorIERFQlVHX0VS Uk9SLDxicj4NCisgJnF1b3Q7Tm9yRmxhc2hSZWFkOiBFUlJPUiAtIFJlYWQgd2lsbCBleGNlZWQg ZGV2aWNlIHNpemUuXG4mcXVvdDs8YnI+DQorICkpOzxicj4NCisgcmV0dXJuIEVGSV9JTlZBTElE X1BBUkFNRVRFUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyAvLyBHZXQgdGhlIGFkZHJlc3MgdG8g c3RhcnQgcmVhZGluZyBmcm9tPGJyPg0KKyBTdGFydEFkZHJlc3MgPSBHRVRfTk9SX0JMT0NLX0FE RFJFU1MgKDxicj4NCisgSW5zdGFuY2UtJmd0O1JlZ2lvbkJhc2VBZGRyZXNzLDxicj4NCisgTGJh LDxicj4NCisgSW5zdGFuY2UtJmd0O01lZGlhLkJsb2NrU2l6ZTxicj4NCisgKTs8YnI+DQorPGJy Pg0KKyAvLyBSZWFkb3V0IHRoZSBkYXRhPGJyPg0KKyBDb3B5TWVtIChCdWZmZXIsIChVSU5UTiAq KShTdGFydEFkZHJlc3MgKyBPZmZzZXQpLCBCdWZmZXJTaXplSW5CeXRlcyk7PGJyPg0KKzxicj4N CisgcmV0dXJuIEVGSV9TVUNDRVNTOzxicj4NCit9PGJyPg0KKzxicj4NCisvKio8YnI+DQorIFdy aXRlIGEgZnVsbCBvciBwb3J0aW9uIG9mIGEgYmxvY2suPGJyPg0KKzxicj4NCisgQHBhcmFtW2lu XSBJbnN0YW5jZSBOT1IgZmxhc2ggSW5zdGFuY2Ugb2YgdmFyaWFibGUgc3RvcmUgcmVnaW9uLjxi cj4NCisgQHBhcmFtW2luXSBMYmEgVGhlIHN0YXJ0aW5nIGxvZ2ljYWwgYmxvY2sgaW5kZXggdG8g d3JpdGUgdG8uPGJyPg0KKyBAcGFyYW1baW5dIE9mZnNldCBPZmZzZXQgaW50byB0aGUgYmxvY2sg YXQgd2hpY2ggdG8gYmVnaW4gd3JpdGluZy48YnI+DQorIEBwYXJhbVtpbiwgb3V0XSBOdW1CeXRl cyBUaGUgdG90YWwgc2l6ZSBvZiB0aGUgYnVmZmVyLjxicj4NCisgQHBhcmFtW2luXSBCdWZmZXIg VGhlIHBvaW50ZXIgdG8gYSBjYWxsZXItYWxsb2NhdGVkIGJ1ZmZlciB0aGF0PGJyPg0KKyBjb250 YWlucyB0aGUgc291cmNlIGZvciB0aGUgd3JpdGUuPGJyPg0KKzxicj4NCisgQHJldHZhbCBFRklf U1VDQ0VTUyBXcml0ZSBpcyBjb21wbGV0ZS48YnI+DQorIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSIEludmFsaWQgcGFyYW1ldGVycyBwYXNzZWQuPGJyPg0KKyBAcmV0dmFsIEVGSV9CQURf QlVGRkVSX1NJWkUgQnVmZmVyIHNpemUgbm90IGVub3VnaC48YnI+DQorIEByZXR2YWwgRUZJX0RF VklDRV9FUlJPUiBUaGUgZGV2aWNlIHJlcG9ydGVkIGFuIGVycm9yLjxicj4NCisqKi88YnI+DQor RUZJX1NUQVRVUzxicj4NCitOb3JGbGFzaFdyaXRlU2luZ2xlQmxvY2sgKDxicj4NCisgSU4gTk9S X0ZMQVNIX0lOU1RBTkNFICpJbnN0YW5jZSw8YnI+DQorIElOIEVGSV9MQkEgTGJhLDxicj4NCisg SU4gVUlOVE4gT2Zmc2V0LDxicj4NCisgSU4gT1VUIFVJTlROICpOdW1CeXRlcyw8YnI+DQorIElO IFVJTlQ4ICpCdWZmZXI8YnI+DQorICk8YnI+DQorezxicj4NCisgRUZJX1NUQVRVUyBTdGF0dXM7 PGJyPg0KKyBVSU5UMzIgVG1wOzxicj4NCisgVUlOVDMyIFRtcEJ1Zjs8YnI+DQorIFVJTlQzMiBX b3JkVG9Xcml0ZTs8YnI+DQorIFVJTlQzMiBNYXNrOzxicj4NCisgQk9PTEVBTiBEb0VyYXNlOzxi cj4NCisgVUlOVE4gQnl0ZXNUb1dyaXRlOzxicj4NCisgVUlOVE4gQ3VyT2Zmc2V0Ozxicj4NCisg VUlOVE4gV29yZEFkZHI7PGJyPg0KKyBVSU5UTiBCbG9ja1NpemU7PGJyPg0KKyBVSU5UTiBCbG9j a0FkZHJlc3M7PGJyPg0KKyBVSU5UTiBQcmV2QmxvY2tBZGRyZXNzOzxicj4NCis8YnI+DQorIGlm IChCdWZmZXIgPT0gTlVMTCkgezxicj4NCisgREVCVUcgKCg8YnI+DQorIERFQlVHX0VSUk9SLDxi cj4NCisgJnF1b3Q7Tm9yRmxhc2hXcml0ZVNpbmdsZUJsb2NrOiBFUlJPUiAtIEJ1ZmZlciBpcyBp bnZhbGlkXG4mcXVvdDs8YnI+DQorICkpOzxicj4NCisgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyBpZiAoTnVtQnl0ZXMgPT0gTlVMTCkgezxicj4N CisgREVCVUcgKCg8YnI+DQorIERFQlVHX0VSUk9SLDxicj4NCisgJnF1b3Q7Tm9yRmxhc2hXcml0 ZVNpbmdsZUJsb2NrOiBFUlJPUiAtIE51bUJ5dGVzIGlzIGludmFsaWRcbiZxdW90Ozxicj4NCisg KSk7PGJyPg0KKyByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOzxicj4NCisgfTxicj4NCis8 YnI+DQorIFByZXZCbG9ja0FkZHJlc3MgPSAwOzxicj4NCis8YnI+DQorIERFQlVHICgoPGJyPg0K KyBERUJVR19JTkZPLDxicj4NCisgJnF1b3Q7Tm9yRmxhc2hXcml0ZVNpbmdsZUJsb2NrKFBhcmFt ZXRlcnM6IExiYT0lbGQsIE9mZnNldD0weCV4LCAmcXVvdDs8YnI+DQorICZxdW90OypOdW1CeXRl cz0weCV4LCBCdWZmZXIgQCAweCUwOHgpXG4mcXVvdDssPGJyPg0KKyBMYmEsPGJyPg0KKyBPZmZz ZXQsPGJyPg0KKyAqTnVtQnl0ZXMsPGJyPg0KKyBCdWZmZXI8YnI+DQorICkpOzxicj4NCis8YnI+ DQorIC8vIExvY2F0ZSB0aGUgYmxvY2sgc2l6ZSB0byBhdm9pZCBkZS1yZWZlcmVuY2luZyBwb2lu dGVycyBhbGwgdGhlIHRpbWU8YnI+DQorIEJsb2NrU2l6ZSA9IEluc3RhbmNlLSZndDtNZWRpYS5C bG9ja1NpemU7PGJyPg0KKzxicj4NCisgLy8gVGhlIHdyaXRlIG11c3Qgbm90IHNwYW4gYmxvY2sg Ym91bmRhcmllcy48YnI+DQorIC8vIFdlIG5lZWQgdG8gY2hlY2sgZWFjaCB2YXJpYWJsZSBpbmRp dmlkdWFsbHkgYmVjYXVzZSBhZGRpbmcgdHdvIGxhcmdlPGJyPg0KKyAvLyB2YWx1ZXMgdG9nZXRo ZXIgb3ZlcmZsb3dzLjxicj4NCisgaWYgKChPZmZzZXQgJmd0Oz0gQmxvY2tTaXplKSB8fDxicj4N CisgKCpOdW1CeXRlcyAmZ3Q7IEJsb2NrU2l6ZSkgfHw8YnI+DQorICgoT2Zmc2V0ICsgKk51bUJ5 dGVzKSAmZ3Q7IEJsb2NrU2l6ZSkpPGJyPg0KKyB7PGJyPg0KKyBERUJVRyAoKDxicj4NCisgREVC VUdfRVJST1IsPGJyPg0KKyAmcXVvdDtOb3JGbGFzaFdyaXRlU2luZ2xlQmxvY2s6IEVSUk9SIC0g RUZJX0JBRF9CVUZGRVJfU0laRTogJnF1b3Q7PGJyPg0KKyAmcXVvdDsoT2Zmc2V0PTB4JXggKyBO dW1CeXRlcz0weCV4KSAmZ3Q7IEJsb2NrU2l6ZT0weCV4XG4mcXVvdDssPGJyPg0KKyBPZmZzZXQs PGJyPg0KKyAqTnVtQnl0ZXMsPGJyPg0KKyBCbG9ja1NpemU8YnI+DQorICkpOzxicj4NCisgcmV0 dXJuIEVGSV9CQURfQlVGRkVSX1NJWkU7PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgLy8gV2UgbXVz dCBoYXZlIHNvbWUgYnl0ZXMgdG8gd3JpdGU8YnI+DQorIGlmICgqTnVtQnl0ZXMgPT0gMCkgezxi cj4NCisgREVCVUcgKCg8YnI+DQorIERFQlVHX0VSUk9SLDxicj4NCisgJnF1b3Q7Tm9yRmxhc2hX cml0ZVNpbmdsZUJsb2NrOiBFUlJPUiAtIEVGSV9CQURfQlVGRkVSX1NJWkU6ICZxdW90Ozxicj4N CisgJnF1b3Q7KE9mZnNldD0weCV4ICsgTnVtQnl0ZXM9MHgleCkgJmd0OyBCbG9ja1NpemU9MHgl eFxuJnF1b3Q7LDxicj4NCisgT2Zmc2V0LDxicj4NCisgKk51bUJ5dGVzLDxicj4NCisgQmxvY2tT aXplPGJyPg0KKyApKTs8YnI+DQorIHJldHVybiBFRklfQkFEX0JVRkZFUl9TSVpFOzxicj4NCisg fTxicj4NCis8YnI+DQorIC8vIFBpY2sgMTI4Ynl0ZXMgYXMgYSBnb29kIHN0YXJ0IGZvciB3b3Jk IG9wZXJhdGlvbnMgYXMgb3Bwb3NlZCB0byBlcmFzaW5nIHRoZTxicj4NCisgLy8gYmxvY2sgYW5k IHdyaXRpbmcgdGhlIGRhdGEgcmVnYXJkbGVzcyBpZiBhbiBlcmFzZSBpcyByZWFsbHkgbmVlZGVk Ljxicj4NCisgLy8gSXQgbG9va3MgbGlrZSBtb3N0IGluZGl2aWR1YWwgTlYgdmFyaWFibGUgd3Jp dGVzIGFyZSBzbWFsbGVyIHRoYW4gMTI4Ynl0ZXMuPGJyPg0KKyBpZiAoKk51bUJ5dGVzICZsdDs9 IDEyOCkgezxicj4NCisgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZXJhc2UgYmVmb3Jl IHByb2dyYW1taW5nIHRoZSBkYXRhIGludG8gTk9SLjxicj4NCisgLy8gSWYgdGhlIGRlc3RpbmF0 aW9uIGJpdHMgYXJlIG9ubHkgY2hhbmdpbmcgZnJvbSAxcyB0byAwcyB3ZSBjYW4ganVzdCB3cml0 ZS48YnI+DQorIC8vIEFmdGVyIGEgYmxvY2sgaXMgZXJhc2VkIGFsbCBiaXRzIGluIHRoZSBibG9j ayBpcyBzZXQgdG8gMS48YnI+DQorIC8vIElmIGFueSBieXRlIHJlcXVpcmVzIHVzIHRvIGVyYXNl IHdlIGp1c3QgZ2l2ZSB1cCBhbmQgcmV3cml0ZSBhbGwgb2YgaXQuPGJyPg0KKyBEb0VyYXNlID0g RkFMU0U7PGJyPg0KKyBCeXRlc1RvV3JpdGUgPSAqTnVtQnl0ZXM7PGJyPg0KKyBDdXJPZmZzZXQg PSBPZmZzZXQ7PGJyPg0KKzxicj4NCisgd2hpbGUgKEJ5dGVzVG9Xcml0ZSAmZ3Q7IDApIHs8YnI+ DQorIC8vIFJlYWQgZnVsbCB3b3JkIGZyb20gTk9SLCBzcGxpY2UgYXMgcmVxdWlyZWQuIEEgd29y ZCBpcyB0aGUgc21hbGxlc3Q8YnI+DQorIC8vIHVuaXQgd2UgY2FuIHdyaXRlLjxicj4NCisgU3Rh dHVzID0gTm9yRmxhc2hSZWFkICg8YnI+DQorIEluc3RhbmNlLDxicj4NCisgTGJhLDxicj4NCisg Q3VyT2Zmc2V0ICZhbXA7IH4oMHgzKSw8YnI+DQorIHNpemVvZiAoVG1wKSw8YnI+DQorICZhbXA7 VG1wPGJyPg0KKyApOzxicj4NCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgezxicj4NCisgcmV0 dXJuIEVGSV9ERVZJQ0VfRVJST1I7PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgLy8gUGh5c2ljYWwg YWRkcmVzcyBvZiB3b3JkIGluIE5PUiB0byB3cml0ZS48YnI+DQorIFdvcmRBZGRyID0gKEN1ck9m ZnNldCAmYW1wOyB+KDB4MykpICs8YnI+DQorIEdFVF9OT1JfQkxPQ0tfQUREUkVTUyAoPGJyPg0K KyBJbnN0YW5jZS0mZ3Q7UmVnaW9uQmFzZUFkZHJlc3MsPGJyPg0KKyBMYmEsPGJyPg0KKyBCbG9j a1NpemU8YnI+DQorICk7PGJyPg0KKzxicj4NCisgLy8gVGhlIHdvcmQgb2YgZGF0YSB0aGF0IGlz IHRvIGJlIHdyaXR0ZW4uPGJyPg0KKyBUbXBCdWYgPSBSZWFkVW5hbGlnbmVkMzIgKDxicj4NCisg KFVJTlQzMiAqKShCdWZmZXIgKyAoKk51bUJ5dGVzIC0gQnl0ZXNUb1dyaXRlKSk8YnI+DQorICk7 PGJyPg0KKzxicj4NCisgLy8gRmlyc3QgZG8gd29yZCBhbGlnbmVkIGNodW5rcy48YnI+DQorIGlm ICgoQ3VyT2Zmc2V0ICZhbXA7IDB4MykgPT0gMCkgezxicj4NCisgaWYgKEJ5dGVzVG9Xcml0ZSAm Z3Q7PSA0KSB7PGJyPg0KKyAvLyBJcyB0aGUgZGVzdGluYXRpb24gc3RpbGwgaW4gJ2VyYXNlZCcg c3RhdGU/PGJyPg0KKyBpZiAoflRtcCAhPSAwKSB7PGJyPg0KKyAvLyBDaGVjayB0byBzZWUgaWYg d2UgYXJlIG9ubHkgY2hhbmdpbmcgYml0cyB0byB6ZXJvLjxicj4NCisgaWYgKChUbXAgXiBUbXBC dWYpICZhbXA7IFRtcEJ1Zikgezxicj4NCisgRG9FcmFzZSA9IFRSVUU7PGJyPg0KKyBicmVhazs8 YnI+DQorIH08YnI+DQorIH08YnI+DQorPGJyPg0KKyAvLyBXcml0ZSB0aGlzIHdvcmQgdG8gTk9S PGJyPg0KKyBXb3JkVG9Xcml0ZSA9IFRtcEJ1Zjs8YnI+DQorIEN1ck9mZnNldCArPSBzaXplb2Yg KFRtcEJ1Zik7PGJyPg0KKyBCeXRlc1RvV3JpdGUgLT0gc2l6ZW9mIChUbXBCdWYpOzxicj4NCisg fSBlbHNlIHs8YnI+DQorIC8vIEJ5dGVzVG9Xcml0ZSAmbHQ7IDQuIERvIHNtYWxsIHdyaXRlcyBh bmQgbGVmdC1vdmVyczxicj4NCisgTWFzayA9IH4oKH4wKSAmbHQ7Jmx0OyAoQnl0ZXNUb1dyaXRl ICogOCkpOzxicj4NCisgLy8gTWFzayBvdXQgdGhlIGJ5dGVzIHdlIHdhbnQuPGJyPg0KKyBUbXBC dWYgJmFtcDs9IE1hc2s7PGJyPg0KKyAvLyBJcyB0aGUgZGVzdGluYXRpb24gc3RpbGwgaW4gJ2Vy YXNlZCcgc3RhdGU/PGJyPg0KKyBpZiAoKFRtcCAmYW1wOyBNYXNrKSAhPSBNYXNrKSB7PGJyPg0K KyAvLyBDaGVjayB0byBzZWUgaWYgd2UgYXJlIG9ubHkgY2hhbmdpbmcgYml0cyB0byB6ZXJvLjxi cj4NCisgaWYgKChUbXAgXiBUbXBCdWYpICZhbXA7IFRtcEJ1Zikgezxicj4NCisgRG9FcmFzZSA9 IFRSVUU7PGJyPg0KKyBicmVhazs8YnI+DQorIH08YnI+DQorIH08YnI+DQorPGJyPg0KKyAvLyBN ZXJnZSBvbGQgYW5kIG5ldyBkYXRhLiBXcml0ZSBtZXJnZWQgd29yZCB0byBOT1I8YnI+DQorIFdv cmRUb1dyaXRlID0gKFRtcCAmYW1wOyB+TWFzaykgfCBUbXBCdWY7PGJyPg0KKyBDdXJPZmZzZXQg Kz0gQnl0ZXNUb1dyaXRlOzxicj4NCisgQnl0ZXNUb1dyaXRlID0gMDs8YnI+DQorIH08YnI+DQor IH0gZWxzZSB7PGJyPg0KKyAvLyBEbyBtdWx0aXBsZSB3b3JkcywgYnV0IHN0YXJ0aW5nIHVuYWxp Z25lZC48YnI+DQorIGlmIChCeXRlc1RvV3JpdGUgJmd0OyAoNCAtIChDdXJPZmZzZXQgJmFtcDsg MHgzKSkpIHs8YnI+DQorIE1hc2sgPSAoKH4wKSAmbHQ7Jmx0OyAoKEN1ck9mZnNldCAmYW1wOyAw eDMpICogOCkpOzxicj4NCisgLy8gTWFzayBvdXQgdGhlIGJ5dGVzIHdlIHdhbnQuPGJyPg0KKyBU bXBCdWYgJmFtcDs9IE1hc2s7PGJyPg0KKyAvLyBJcyB0aGUgZGVzdGluYXRpb24gc3RpbGwgaW4g J2VyYXNlZCcgc3RhdGU/PGJyPg0KKyBpZiAoKFRtcCAmYW1wOyBNYXNrKSAhPSBNYXNrKSB7PGJy Pg0KKyAvLyBDaGVjayB0byBzZWUgaWYgd2UgYXJlIG9ubHkgY2hhbmdpbmcgYml0cyB0byB6ZXJv Ljxicj4NCisgaWYgKChUbXAgXiBUbXBCdWYpICZhbXA7IFRtcEJ1Zikgezxicj4NCisgRG9FcmFz ZSA9IFRSVUU7PGJyPg0KKyBicmVhazs8YnI+DQorIH08YnI+DQorIH08YnI+DQorPGJyPg0KKyAv LyBNZXJnZSBvbGQgYW5kIG5ldyBkYXRhLiBXcml0ZSBtZXJnZWQgd29yZCB0byBOT1I8YnI+DQor IFdvcmRUb1dyaXRlID0gKFRtcCAmYW1wOyB+TWFzaykgfCBUbXBCdWY7PGJyPg0KKyBCeXRlc1Rv V3JpdGUgLT0gKDQgLSAoQ3VyT2Zmc2V0ICZhbXA7IDB4MykpOzxicj4NCisgQ3VyT2Zmc2V0ICs9 ICg0IC0gKEN1ck9mZnNldCAmYW1wOyAweDMpKTs8YnI+DQorIH0gZWxzZSB7PGJyPg0KKyAvLyBV bmFsaWduZWQgYW5kIGZpdHMgaW4gb25lIHdvcmQuPGJyPg0KKyBNYXNrID0gKH4oKH4wKSAmbHQ7 Jmx0OyAoQnl0ZXNUb1dyaXRlICogOCkpKSAmbHQ7Jmx0OyAoKEN1ck9mZnNldCAmYW1wOyAweDMp ICogOCk7PGJyPg0KKyAvLyBNYXNrIG91dCB0aGUgYnl0ZXMgd2Ugd2FudC48YnI+DQorIFRtcEJ1 ZiA9IChUbXBCdWYgJmx0OyZsdDsgKChDdXJPZmZzZXQgJmFtcDsgMHgzKSAqIDgpKSAmYW1wOyBN YXNrOzxicj4NCisgLy8gSXMgdGhlIGRlc3RpbmF0aW9uIHN0aWxsIGluICdlcmFzZWQnIHN0YXRl Pzxicj4NCisgaWYgKChUbXAgJmFtcDsgTWFzaykgIT0gTWFzaykgezxicj4NCisgLy8gQ2hlY2sg dG8gc2VlIGlmIHdlIGFyZSBvbmx5IGNoYW5naW5nIGJpdHMgdG8gemVyby48YnI+DQorIGlmICgo VG1wIF4gVG1wQnVmKSAmYW1wOyBUbXBCdWYpIHs8YnI+DQorIERvRXJhc2UgPSBUUlVFOzxicj4N CisgYnJlYWs7PGJyPg0KKyB9PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgLy8gTWVyZ2Ugb2xkIGFu ZCBuZXcgZGF0YS4gV3JpdGUgbWVyZ2VkIHdvcmQgdG8gTk9SPGJyPg0KKyBXb3JkVG9Xcml0ZSA9 IChUbXAgJmFtcDsgfk1hc2spIHwgVG1wQnVmOzxicj4NCisgQ3VyT2Zmc2V0ICs9IEJ5dGVzVG9X cml0ZTs8YnI+DQorIEJ5dGVzVG9Xcml0ZSA9IDA7PGJyPg0KKyB9PGJyPg0KKyB9PGJyPg0KKzxi cj4NCisgQmxvY2tBZGRyZXNzID0gR0VUX05PUl9CTE9DS19BRERSRVNTICg8YnI+DQorIEluc3Rh bmNlLSZndDtSZWdpb25CYXNlQWRkcmVzcyw8YnI+DQorIExiYSw8YnI+DQorIEJsb2NrU2l6ZTxi cj4NCisgKTs8YnI+DQorIGlmIChCbG9ja0FkZHJlc3MgIT0gUHJldkJsb2NrQWRkcmVzcykgezxi cj4NCisgU3RhdHVzID0gTm9yRmxhc2hVbmxvY2tTaW5nbGVCbG9ja0lmTmVjZXNzYXJ5IChJbnN0 YW5jZSwgQmxvY2tBZGRyZXNzKTs8YnI+DQorIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHs8YnI+ DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOzxicj4NCisgfTxicj4NCis8YnI+DQorIFByZXZC bG9ja0FkZHJlc3MgPSBCbG9ja0FkZHJlc3M7PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgU3RhdHVz ID0gTm9yRmxhc2hXcml0ZVNpbmdsZVdvcmQgKEluc3RhbmNlLCBXb3JkQWRkciwgV29yZFRvV3Jp dGUpOzxicj4NCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgezxicj4NCisgcmV0dXJuIEVGSV9E RVZJQ0VfRVJST1I7PGJyPg0KKyB9PGJyPg0KKyB9PGJyPg0KKzxicj4NCisgLy8gRXhpdCBpZiB3 ZSBnb3QgaGVyZSBhbmQgY291bGQgd3JpdGUgYWxsIHRoZSBkYXRhLiBPdGhlcndpc2UgZG8gdGhl PGJyPg0KKyAvLyBFcmFzZS1Xcml0ZSBjeWNsZS48YnI+DQorIGlmICghRG9FcmFzZSkgezxicj4N CisgcmV0dXJuIEVGSV9TVUNDRVNTOzxicj4NCisgfTxicj4NCisgfTxicj4NCis8YnI+DQorIC8v IENoZWNrIHdlIGRpZCBnZXQgc29tZSBtZW1vcnkuIEJ1ZmZlciBpcyBCbG9ja1NpemUuPGJyPg0K KyBpZiAoSW5zdGFuY2UtJmd0O1NoYWRvd0J1ZmZlciA9PSBOVUxMKSB7PGJyPg0KKyBERUJVRyAo KERFQlVHX0VSUk9SLCAmcXVvdDtGdmJXcml0ZTogRVJST1IgLSBCdWZmZXIgbm90IHJlYWR5XG4m cXVvdDspKTs8YnI+DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOzxicj4NCisgfTxicj4NCis8 YnI+DQorIC8vIFJlYWQgTk9SIEZsYXNoIGRhdGEgaW50byBzaGFkb3cgYnVmZmVyPGJyPg0KKyBT dGF0dXMgPSBOb3JGbGFzaFJlYWRCbG9ja3MgKDxicj4NCisgSW5zdGFuY2UsPGJyPg0KKyBMYmEs PGJyPg0KKyBCbG9ja1NpemUsPGJyPg0KKyBJbnN0YW5jZS0mZ3Q7U2hhZG93QnVmZmVyPGJyPg0K KyApOzxicj4NCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgezxicj4NCisgLy8gUmV0dXJuIG9u ZSBvZiB0aGUgcHJlLWFwcHJvdmVkIGVycm9yIHN0YXR1c2VzPGJyPg0KKyByZXR1cm4gRUZJX0RF VklDRV9FUlJPUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyAvLyBQdXQgdGhlIGRhdGEgYXQgdGhl IGFwcHJvcHJpYXRlIGxvY2F0aW9uIGluc2lkZSB0aGUgYnVmZmVyIGFyZWE8YnI+DQorIENvcHlN ZW0gKDxicj4NCisgKFZPSUQgKikoKFVJTlROKUluc3RhbmNlLSZndDtTaGFkb3dCdWZmZXIgKyBP ZmZzZXQpLDxicj4NCisgQnVmZmVyLDxicj4NCisgKk51bUJ5dGVzPGJyPg0KKyApOzxicj4NCis8 YnI+DQorIC8vIFdyaXRlIHRoZSBtb2RpZmllZCBidWZmZXIgYmFjayB0byB0aGUgTm9yRmxhc2g8 YnI+DQorIFN0YXR1cyA9IE5vckZsYXNoV3JpdGVCbG9ja3MgKDxicj4NCisgSW5zdGFuY2UsPGJy Pg0KKyBMYmEsPGJyPg0KKyBCbG9ja1NpemUsPGJyPg0KKyBJbnN0YW5jZS0mZ3Q7U2hhZG93QnVm ZmVyPGJyPg0KKyApOzxicj4NCisgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgezxicj4NCisgLy8g UmV0dXJuIG9uZSBvZiB0aGUgcHJlLWFwcHJvdmVkIGVycm9yIHN0YXR1c2VzPGJyPg0KKyByZXR1 cm4gRUZJX0RFVklDRV9FUlJPUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyByZXR1cm4gRUZJX1NV Q0NFU1M7PGJyPg0KK308YnI+DQorPGJyPg0KKy8qKjxicj4NCisgUmVhZCBKRURFQyBJRCBvZiBO T1IgZmxhc2ggZGV2aWNlLjxicj4NCis8YnI+DQorIEBwYXJhbVtpbl0gSW5zdGFuY2UgTk9SIGZs YXNoIEluc3RhbmNlIG9mIHZhcmlhYmxlIHN0b3JlIHJlZ2lvbi48YnI+DQorIEBwYXJhbVtvdXRd IEplZGVjSWQgSkVERUMgSUQgb2YgTk9SIGZsYXNoIGRldmljZS48YnI+DQorIE1heGltdW0gbGVu Z3RoIG9mIEplZGVjSWQgY2FuIGJlIHVwdG8gNiBieXRlczxicj4NCis8YnI+DQorIEByZXR2YWwg RUZJX1NVQ0NFU1MgVGhlIHdyaXRlIGlzIGNvbXBsZXRlZC48YnI+DQorIEByZXR2YWwgRUZJX0RF VklDRV9FUlJPUiBGYWlsZWQgdG8gZmV0Y2ggSkVERUMgSUQuPGJyPg0KKyBAcmV0dmFsIEVGSV9J TlZBTElEX1BBUkFNRVRFUiBJbnZhbGlkIHBhcmFtZXRlcnMgcGFzc2VkLjxicj4NCisqKi88YnI+ DQorRUZJX1NUQVRVUzxicj4NCitOb3JGbGFzaFJlYWRJZCAoPGJyPg0KKyBJTiBOT1JfRkxBU0hf SU5TVEFOQ0UgKkluc3RhbmNlLDxicj4NCisgT1VUIFVJTlQ4ICpKZWRlY0lkPGJyPg0KKyApPGJy Pg0KK3s8YnI+DQorIFVJTlQzMiB2YWw7PGJyPg0KKzxicj4NCisgaWYgKChJbnN0YW5jZSA9PSBO VUxMKSB8fCAoSmVkZWNJZCA9PSBOVUxMKSkgezxicj4NCisgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjs8YnI+DQorIH08YnI+DQorPGJyPg0KKyB2YWwgPSAoU1BJTk9SX09QX1JESUQgJmx0 OyZsdDs8YnI+DQorIENETlNfUVNQSV9GTEFTSF9DTURfQ1RSTF9SRUdfT1BDT0RFX0JJVF9QT1Mp IHw8YnI+DQorIChDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX1JFQURfRU5BQkxFICZsdDsm bHQ7PGJyPg0KKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX1JFQURFTl9CSVRfUE9TKSB8 PGJyPg0KKyBDRE5TX1FTUElfRkxBU0hfQ01EX0NUUkxfUkVHX05VTV9EQVRBX0JZVEVTICgzKTs8 YnI+DQorPGJyPg0KKyBpZiAoRUZJX0VSUk9SIChDZG5zUXNwaUV4ZWN1dGVDb21tYW5kIChJbnN0 YW5jZSwgdmFsKSkpIHs8YnI+DQorIHJldHVybiBFRklfREVWSUNFX0VSUk9SOzxicj4NCisgfTxi cj4NCis8YnI+DQorIHZhbCA9IE1taW9SZWFkMzIgKDxicj4NCisgSW5zdGFuY2UtJmd0O0hvc3RD b250cm9sbGVyQmFzZUFkZHJlc3MgKyBDRE5TX1FTUElfRkxBU0hfQ01EX1JFQURfREFUQV9SRUdf T0ZGU0VUPGJyPg0KKyApOzxicj4NCis8YnI+DQorIC8vIE1hbnVmYWN0dXJlciBJRCBmaWVsZDxi cj4NCisgSmVkZWNJZFswXSA9IChVSU5UOCl2YWw7PGJyPg0KKyAvLyBUeXBlIGZpZWxkPGJyPg0K KyBKZWRlY0lkWzFdID0gKFVJTlQ4KSh2YWwgJmd0OyZndDsgOCk7PGJyPg0KKyAvLyBDYXBhY2l0 eSBmaWVsZDxicj4NCisgSmVkZWNJZFsyXSA9IChVSU5UOCkodmFsICZndDsmZ3Q7IDE2KTs8YnI+ DQorPGJyPg0KKyBERUJVRyAoKDxicj4NCisgREVCVUdfSU5GTyw8YnI+DQorICZxdW90O05vciBm bGFzaCBkZXRlY3RlZCwgSmVkZWMgSUQsIE1hbnVmYWN0dXJlciBJZD0leCBUeXBlPSV4IENhcGFj aXR5PSV4IFxuJnF1b3Q7LDxicj4NCisgSmVkZWNJZFswXSw8YnI+DQorIEplZGVjSWRbMV0sPGJy Pg0KKyBKZWRlY0lkWzJdPGJyPg0KKyApKTs8YnI+DQorPGJyPg0KKyByZXR1cm4gRUZJX1NVQ0NF U1M7PGJyPg0KK308YnI+DQorPGJyPg0KKy8qKjxicj4NCisgTk9SIEZsYXNoIFJlc2V0PGJyPg0K Kzxicj4NCisgQHBhcmFtW2luXSBJbnN0YW5jZSBOT1IgZmxhc2ggaW5zdGFuY2UuPGJyPg0KKzxi cj4NCisgQHJldHZhbCBFRklfU1VDQ0VTUyBSZXR1cm4gc3VjY2VzcyBvbiBldmVyeSBjYWxsLjxi cj4NCisqKi88YnI+DQorRUZJX1NUQVRVUzxicj4NCitOb3JGbGFzaFJlc2V0ICg8YnI+DQorIElO IE5PUl9GTEFTSF9JTlNUQU5DRSAqSW5zdGFuY2U8YnI+DQorICk8YnI+DQorezxicj4NCisgcmV0 dXJuIEVGSV9TVUNDRVNTOzxicj4NCit9PGJyPg0KLS0gPGJyPg0KMi4yNS4xPGJyPg0KPGJyPg0K PGJyPg0KPGJyPg0KPC9zcGFuPjxzcGFuIGxhbmc9IkVOLUlOIiBzdHlsZT0iZm9udC1mYW1pbHk6 JnF1b3Q7VGltZXMgTmV3IFJvbWFuJnF1b3Q7LHNlcmlmIj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+ DQo8L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD4NCg0KCjxk aXYgd2lkdGg9IjEiIHN0eWxlPSJjb2xvcjp3aGl0ZTtjbGVhcjpib3RoIj5fLl8sXy5fLF88L2Rp dj4KPGhyPgoKCkdyb3Vwcy5pbyBMaW5rczo8cD4KCgogIAogICAgWW91IHJlY2VpdmUgYWxsIG1l c3NhZ2VzIHNlbnQgdG8gdGhpcyBncm91cC4KICAKICAKCgo8cD4KPGEgdGFyZ2V0PSJfYmxhbmsi IGhyZWY9Imh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC9tZXNzYWdlLzExOTM0MSI+Vmll dy9SZXBseSBPbmxpbmUgKCMxMTkzNDEpPC9hPiB8CgoKICAKCnwKCiAgPGEgdGFyZ2V0PSJfYmxh bmsiIGhyZWY9Imh0dHBzOi8vZ3JvdXBzLmlvL210LzEwNjM2NTQ2Ni83Njg2MTc2Ij5NdXRlIFRo aXMgVG9waWM8L2E+CgoKfCA8YSBocmVmPSJodHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwv cG9zdCI+TmV3IFRvcGljPC9hPgoKPGJyPgoKCgoKPGEgaHJlZj0iaHR0cHM6Ly9lZGsyLmdyb3Vw cy5pby9nL2RldmVsL2VkaXRzdWIvNzY4NjE3NiI+WW91ciBTdWJzY3JpcHRpb248L2E+IHwKPGEg aHJlZj0ibWFpbHRvOmRldmVsK293bmVyQGVkazIuZ3JvdXBzLmlvIj5Db250YWN0IEdyb3VwIE93 bmVyPC9hPiB8Cgo8YSBocmVmPSJodHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvdW5zdWIi PlVuc3Vic2NyaWJlPC9hPgoKIFtyZWJlY2NhQG9wZW5mdy5pb108YnI+CjxkaXYgd2lkdGg9IjEi IHN0eWxlPSJjb2xvcjp3aGl0ZTtjbGVhcjpib3RoIj5fLl8sXy5fLF88L2Rpdj4KDQo= --_000_43CF5BB1B4D34D34ABB2E9F84104FB19armcom_--