From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2052.outbound.protection.outlook.com [40.107.104.52]) by sourceware.org (Postfix) with ESMTPS id DF2983857C4F for ; Tue, 12 Dec 2023 10:27:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DF2983857C4F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org DF2983857C4F Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.104.52 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1702376867; cv=pass; b=mo9oQBfFRgkB+IinjzFJXNOCeVnlGVqMeYSh08ZF3lrRmIQQz9Zi+GIiDwSXTRgT3HqmWUP6G+kK5boAKmYiopqNFAUI+jo9Dh1MVINyLW5+TJj9zpntEYz3EX8Eji1EvcuevLfjuq78ImmYe/gUlsEH5BSHwkTlREMxCq3jAeg= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1702376867; c=relaxed/simple; bh=geWuEQ8xFU9m6oYR5wst+KYqAuIRUKbUwoKw3eG3/IA=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=KM3LHVu2wBhzjku8QNxoxkHPB01ZRS4UlKkGqVix28zppeMx5+vv1WsGUDaqXYSem7LRTwgcOxYIcSv8s8DglzvEN9OmNJ6c7FhN3tvuAjwQSE5Sx5AgWo+qeuVPzdnHHQvBldDcgFGzD/rxgF5LJWB9pbT8OjdQOmOfEx9DhXA= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=gwrMhGirgYlmEpDXfSeB3SkqyXGAhK8VpSJDIOD1O2nKzs7RsFqBdZxG/ww87J/+tbRNDAygBptwtAzmhurb9SYI8krRJWGQTkYV8eBjPxV8DLv2N9hk5ccmkcg/IdmLp2PZpzM7T39IZIk9EgEfbLXWN1XtwJsaa/ElAOYdYmtyy6bQpYGXm4bSym8eSN9fbUq9rJOZWO4UlkUGfMYYN72tjvpWk1bHhb3YQT1B/neP8UbXMb7+xjDvbpOYH8YXE0xQMTKZvaT0pCB8bH4Vfm7WXmuLx9v6w4u7MBrHksM4ryZsYfzMgCnLVNxJkH8LDy+ctcC1psDmQgyv+K/LsA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=geWuEQ8xFU9m6oYR5wst+KYqAuIRUKbUwoKw3eG3/IA=; b=jGq4ltWJj5Aw3GDfn6FXLk/g6dDpIp3otrKhysUX69oWgnRPbqhJPGOtYoZOSjg1sP57ER+zOsQGHwykwoEZ9l901DSNk5/Pq3x1tzQpfX3srBzygtYevxhpuEv/rZUV5A2a7/6hHrL7hcx3LWxFYhqYQNJlnawOA8j7LjsVp4i8rU/O9PctoQBO86lDg+XWeoP0fTcvf1DHserBFFAxWSjFd1j6gCm1opEq9nlIhnQoqJCUvmoRC7j2fdpwphnc9uovKpDJWGJB4ZupX8t79st8iR9GRktrZpdO8Ug7Ijd9Qe+kaHGDdfdddZRwX7KgJVJDOVsMupe+FThyW9pMXg== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=geWuEQ8xFU9m6oYR5wst+KYqAuIRUKbUwoKw3eG3/IA=; b=cYJ5/f6KDj7URPAfV8hYM439+GnfMNcNmPkZiepJWV++mhwOcoOaCdBXS4j/KZN7s7KbUj3rrLfHdYwBlbR0WSbS0cyIQ/LUlebm45PFyHgGmga8qjhbxMKb4yA3XodbSlzTg2Zxz8IdNgx9gKZZztc2Z6LVUqcFOlfn3QQ1S6Q= Received: from AS9PR06CA0631.eurprd06.prod.outlook.com (2603:10a6:20b:46f::19) by AS4PR08MB7656.eurprd08.prod.outlook.com (2603:10a6:20b:4f2::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.33; Tue, 12 Dec 2023 10:27:40 +0000 Received: from AMS0EPF000001B5.eurprd05.prod.outlook.com (2603:10a6:20b:46f:cafe::e) by AS9PR06CA0631.outlook.office365.com (2603:10a6:20b:46f::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.32 via Frontend Transport; Tue, 12 Dec 2023 10:27:40 +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=armh.onmicrosoft.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 Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AMS0EPF000001B5.mail.protection.outlook.com (10.167.16.169) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7091.26 via Frontend Transport; Tue, 12 Dec 2023 10:27:40 +0000 Received: ("Tessian outbound 8289ea11ec17:v228"); Tue, 12 Dec 2023 10:27:40 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 2b4a2171ab0c8db7 X-CR-MTA-TID: 64aa7808 Received: from e55257f16148.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 027A2C9D-B4E7-4F31-BC3E-AAD570A5EE37.1; Tue, 12 Dec 2023 10:27:29 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e55257f16148.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 12 Dec 2023 10:27:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c0n4OKA1DKtDwwuvJ+6sdDRGu+mLFee7hrslNAAfqT2DY5w6Su19KX/j+gHm+rQIUjxWmJp7TPRl1q9V44hiblgQbj08ci+id1VC5Xq0etoQEqrAAkXEkwXHbtqmiYDeJbkKFNf4M0ujmf/mNOg2SaTbQvpWYS0J831Tk+kYHMo5PO/RiDVtr/odeY9HH9fdM856SYsgtB+qFj5QJwq3anCi8l5no/yLyV018eHLj480qZ3m2lbPxfCK9o50fUsenoi05Lopb4+rtVyPkX8/nMjPDoc5Zk1XFC1RuR+ItU8vQ/DI8MpBVC2dG/nXo1JqnMb9sIPzFEM/yXRb8rNlnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=geWuEQ8xFU9m6oYR5wst+KYqAuIRUKbUwoKw3eG3/IA=; b=iUHv06tGa+B47Q9eYefCa9352y+OPCBzNTZjtmEstr4Ab0dThbLQ2yrGp6H4qAnJvRAcqM0P/894VkobAWEAeHszCid0Ip/h/Nyth0c6CZWCU9jz2bfwI8bzOVRXounN/lCv/XEN2KMyTw8u4mdUlTIc0nWqkxGpGS4myOO3O81gfCr5wzV53lOfUanhRiyBR75Jv4nSnUFMWKi8X7LGwivu+KoV4tsflcwBvjK2/i8rsCIq6lXbZiykxFTaar8BuNdJOi2dvvk7vOy2/f1+vfyNbqpjZ2EzMD4MtgT7lhm4snXYwdoPZfpLeAOBpk+bbZ7tqHglbk9QYojiInAnfA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=geWuEQ8xFU9m6oYR5wst+KYqAuIRUKbUwoKw3eG3/IA=; b=cYJ5/f6KDj7URPAfV8hYM439+GnfMNcNmPkZiepJWV++mhwOcoOaCdBXS4j/KZN7s7KbUj3rrLfHdYwBlbR0WSbS0cyIQ/LUlebm45PFyHgGmga8qjhbxMKb4yA3XodbSlzTg2Zxz8IdNgx9gKZZztc2Z6LVUqcFOlfn3QQ1S6Q= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by PA4PR08MB6254.eurprd08.prod.outlook.com (2603:10a6:102:f3::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.33; Tue, 12 Dec 2023 10:27:26 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::9679:2ab0:99c6:54a3]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::9679:2ab0:99c6:54a3%6]) with mapi id 15.20.7068.033; Tue, 12 Dec 2023 10:27:25 +0000 From: Tamar Christina To: Richard Biener CC: "gcc-patches@gcc.gnu.org" , nd , "jlaw@ventanamicro.com" , Richard Sandiford Subject: RE: [PATCH 9/21]middle-end: implement vectorizable_early_exit for codegen of exit code Thread-Topic: [PATCH 9/21]middle-end: implement vectorizable_early_exit for codegen of exit code Thread-Index: AQHaEIRpInfkk2iMNkKe/ayk/lXCPbCO5tuwgAKOHoCACmF78IAAWBaAgAMYIGCAABrAgIAAAmcwgAA4uQCABEHGgIAAK7mAgADdJdCAAL6RgIAAApoQ Date: Tue, 12 Dec 2023 10:27:25 +0000 Message-ID: References: <85570n66-1540-0r07-7q80-269p3o133585@fhfr.qr> <5r3p7378-q309-ooqo-7o76-q9r567ns1890@fhfr.qr> <3o102so4-34pp-3o01-o002-0q245oo10303@fhfr.qr> In-Reply-To: <3o102so4-34pp-3o01-o002-0q245oo10303@fhfr.qr> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|PA4PR08MB6254:EE_|AMS0EPF000001B5:EE_|AS4PR08MB7656:EE_ X-MS-Office365-Filtering-Correlation-Id: 941d084a-d2a7-4731-7da1-08dbfafcf83e x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: CpDU16GaBGiBzFyBW4aXEW2CTiDn6NfxMujtMypHCIWY3sC6AcdMGTiaQ3t5csTTYWtaVJNwHuBPit6eCXq+Re1PaUcZW/pj1cFoCKRYMh8HB4UA22iFcnzwaqke1f5u/Q3DFlRv7NnXMrXiS3JTrITA+A8X0YchM5tqVgXB771zkuHpSCtLyYu7Pc2IYUlAh3N4MigwJBGmiHe/+PzgzOOCNB7jFPgwmTjcJIwp1w28j0raa/wRHF3eSzProFee1hrOFMNQVME00vcgLempkFQFgS9QQZZaXn/gvwjvShNJ3eypKkCdJDz8FMgbETFwB+n3uXxqlAllMkZ4Q5WdpSkS5wKcUpFhih1k6cAAO2X7XDBulPnNaPuez6xXCTYO6w7D+nxeytGmc0khlOWJUNSMmvpXi99pSTqNbSbKu3A0LfMs9pWoXddf9J4aVg0fe1Yrtpmu2ztDHnIuSLvsmaLMPKjK1vKWj8jrVQ3fb17pBCnnCNwCmeQtqEa4E5zM1QwIdRoOvCn0Fc4nuMMxOD9X8GMKOnHEUiCF6wFWdHbAkKjVY1d78agSH1ZP7kFoLplyVj5PNtbL/E8XnzL70QgUlFL2PpVo5QUixtnNtGU= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR08MB5325.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(376002)(346002)(136003)(39860400002)(396003)(366004)(230922051799003)(451199024)(1800799012)(186009)(64100799003)(41300700001)(122000001)(8676002)(38100700002)(8936002)(76116006)(66556008)(6916009)(66946007)(64756008)(66476007)(33656002)(71200400001)(66446008)(478600001)(86362001)(54906003)(316002)(53546011)(26005)(5660300002)(6506007)(7696005)(30864003)(9686003)(52536014)(2906002)(83380400001)(4326008)(38070700009)(55016003)(84970400001)(559001)(579004);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6254 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: AMS0EPF000001B5.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 75636814-750c-4184-4b3d-08dbfafcef5e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +8uOVGLnTN9OfGlhYr5VUqsIPHY3c9X85RHSceLUaalIflDNuFdDxRgYLTSlWZkmpH/nbApqhYBHy5sFei0LTWHWqJsHqZsl6NebjTv8M4cdk2A6cpOlWgS0EjKTHPgukcw/A3ZQYnfKaLiTVmbJ9B61rw/HP23MTcKVyXL+lgBpKCi1ku5eD4ajjfj7/5Qf0SUm5g+LT5Vul2X2jmWR175j9J9VG384YDo/KOdDgzOeAo73GZjCkGQh1ZP7wWGAr8Z9obMp5jvPqtAox/6jdjuuCr1B5PJZm38J/mumBV2yEVn8glDvkGHmzRe+cClXWWFYhe1SvD4BIQtOy/mrW6PSFGvQBmOIxPG01pKq2mXiszLHTh+F8367IAA8c3jyUouEB1sZG57+ddj2wWruRGtMhSIo7BKcNcGe+GKSpxgGuJ3vklZ18CdsKYxlfUbHZV2IMxaVRqMLBUoeJE0gbVbQMkQNc+NrX5xW9DQh1u8MQyrsESvWTqEXXxLz5C3DCOt+roUTax6Vl3K9xcL1MZh7FgEIKmQwfBElYbVWoPBDmjKRi9lSUaCoOcfp3BFACjJzJSzJevxqyXGS5sW+866vFlwbf+drF+D0r9pmkMAS/Dba8zdv/j7HoLvrm+AjCtrAa5cPzso7eNUduWK/i0OsJkzIMz7dGYH/4ykmnBsQVutNnPOgZt+jDfMlLHNHXbKSvTrmnw8qf7O89ooP6DjHzrKMvZixjU6EIAroaH4= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230031)(4636009)(39860400002)(396003)(136003)(376002)(346002)(230922051799003)(1800799012)(82310400011)(186009)(451199024)(64100799003)(40470700004)(36840700001)(46966006)(55016003)(84970400001)(40480700001)(40460700003)(70586007)(70206006)(54906003)(82740400003)(81166007)(356005)(86362001)(33656002)(36860700001)(47076005)(83380400001)(336012)(26005)(6506007)(9686003)(53546011)(7696005)(2906002)(316002)(478600001)(4326008)(5660300002)(8676002)(8936002)(41300700001)(30864003)(6862004)(52536014);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2023 10:27:40.5823 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 941d084a-d2a7-4731-7da1-08dbfafcf83e 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: AMS0EPF000001B5.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR08MB7656 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,KAM_DMARC_NONE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSaWNoYXJkIEJpZW5lciA8cmd1 ZW50aGVyQHN1c2UuZGU+DQo+IFNlbnQ6IFR1ZXNkYXksIERlY2VtYmVyIDEyLCAyMDIzIDEwOjEw IEFNDQo+IFRvOiBUYW1hciBDaHJpc3RpbmEgPFRhbWFyLkNocmlzdGluYUBhcm0uY29tPg0KPiBD YzogZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmc7IG5kIDxuZEBhcm0uY29tPjsgamxhd0B2ZW50YW5h bWljcm8uY29tOw0KPiBSaWNoYXJkIFNhbmRpZm9yZCA8UmljaGFyZC5TYW5kaWZvcmRAYXJtLmNv bT4NCj4gU3ViamVjdDogUkU6IFtQQVRDSCA5LzIxXW1pZGRsZS1lbmQ6IGltcGxlbWVudCB2ZWN0 b3JpemFibGVfZWFybHlfZXhpdCBmb3INCj4gY29kZWdlbiBvZiBleGl0IGNvZGUNCj4gDQo+IE9u IE1vbiwgMTEgRGVjIDIwMjMsIFRhbWFyIENocmlzdGluYSB3cm90ZToNCj4gDQo+ID4gPiA+ICsJ ICB2ZWN0eXBlID0gdHJ1dGhfdHlwZV9mb3IgKGNvbXBfdHlwZSk7DQo+ID4gPg0KPiA+ID4gc28g dGhpcyBsZWF2ZXMgdGhlIHByb2R1Y2VyIG9mIHRoZSBtYXNrIGluIHRoZSBHSU1QTEVfQ09ORCBh bmQgd2UNCj4gPiA+IHZlY3Rvcml6ZSB0aGUgR0lNUExFX0NPTkQgYXMNCj4gPiA+DQo+ID4gPiAg IG1hc2tfMSA9IC4uLjsNCj4gPiA+ICAgaWYgKG1hc2tfMSAhPSB7LTEsLTEuLi59KQ0KPiA+ID4g ICAgIC4uDQo+ID4gPg0KPiA+ID4gPyAgSW4gcHJpbmNpcGxlIG9ubHkgdGhlIG1hc2sgcHJvZHVj ZXIgbmVlZHMgYSB2ZWN0b3IgdHlwZSBhbmQgdGhhdA0KPiA+ID4gYWRqdXN0ZWQgYnkgYm9vbCBo YW5kbGluZywgdGhlIGJyYW5jaCBpdHNlbGYgZG9lc24ndCBuZWVkIGFueQ0KPiA+ID4gU1RNVF9W SU5GT19WRUNUWVBFLg0KPiA+ID4NCj4gPiA+IEFzIHNhaWQgSSBiZWxpZXZlIGlmIHlvdSByZWNv Z25pemUgYSBHSU1QTEVfQ09ORCBwYXR0ZXJuIGZvciBjb25kcw0KPiA+ID4gdGhhdCBhcmVuJ3Qg Ym9vbCAhPSAwIHByb2R1Y2luZyB0aGUgbWFzayBzdG10IHRoaXMgc2hvdWxkIGJlIHBpY2tlZA0K PiA+ID4gdXAgYnkgYm9vbCBoYW5kbGluZyBjb3JyZWN0bHkgYWxyZWFkeS4NCj4gPiA+DQo+ID4g PiBBbHNvIGFzIHNhaWQgcGlnZ3ktYmFja2luZyBvbiB0aGUgQ09ORF9FWFBSIGhhbmRsaW5nIGlu IHRoaXMgZnVuY3Rpb24NCj4gPiA+IHdoaWNoIGhhcyB0aGUgY29uZGl0aW9uIHNwbGl0IG91dCBp bnRvIGEgc2VwYXJhdGUgc3RtdCghKSBtaWdodCBub3QNCj4gPiA+IGNvbXBsZXRlbHkgaGFuZGxl IHRoaW5ncyBjb3JyZWN0bHkgYW5kIHlvdSBhcmUgbGlrZWx5IG1pc3NpbmcNCj4gPiA+IHRoZSB0 Y2NfY29tcGFyaXNvbiBoYW5kbGluZyBvZiB0aGUgZW1iZWRkZWQgY29tcGFyZS4NCj4gPiA+DQo+ ID4NCj4gPiBPaywgSSd2ZSBzdG9wcGVkIHBpZ2d5LWJhY2tpbmcgb24gdGhlIENPTkRfRVhQUiBo YW5kbGluZyBhbmQgY3JlYXRlZA0KPiA+IHZlY3RfcmVjb2dfZ2NvbmRfcGF0dGVybi4gIEFzIHlv dSBzYWlkIGluIHRoZSBwcmV2aW91cyBlbWFpbCBJJ3ZlIGFsc28NCj4gPiBzdG9wcGVkIHNldHRp bmcgdGhlIHZlY3R5cGUgZm9yIHRoZSBnY29uZCBhbmQgaW5zdGVhZCB1c2UgdGhlIHR5cGUgb2Yg dGhlDQo+ID4gb3BlcmFuZC4NCj4gPg0KPiA+IE5vdGUgdGhhdCBiZWNhdXNlIHRoZSBwYXR0ZXJu IGRvZXNuJ3QgYXBwbHkgaWYgeW91IHdlcmUgYWxyZWFkeSBhbiBORV9FWFBSDQo+ID4gSSBkbyBu ZWVkIHRoZSBleHRyYSB0cnV0aF90eXBlX2ZvciBmb3IgdGhhdCBjYXNlLiAgQmVjYXVzZSBpbiB0 aGUgY2FzZSBvZiBlLmcuDQo+ID4NCj4gPiBhID0gYiA+IDQ7DQo+ID4gSWYgKGEgIT0gMCkNCj4g Pg0KPiA+IFRoZSBwcm9kdWNlciBvZiB0aGUgbWFzayBpcyBhbHJlYWR5IG91dHNpZGUgb2YgdGhl IGNvbmQgYnV0IHdpbGwgbm90IHRyaWdnZXINCj4gPiBCb29sZWFuIHJlY29nbml0aW9uLg0KPiAN Cj4gSXQgc2hvdWxkIHRyaWdnZXIgYmVjYXVzZSB3ZSBoYXZlIGEgbWFzayB1c2Ugb2YgJ2EnLCBJ IGFsd2F5cyBmb3JnZXQNCj4gd2hlcmUgd2UgZG8gdGhhdCAtIGl0IG1pZ2h0IGJlIHdoZXJlIHdl IGNvbXB1dGUgbWFzayBwcmVjaXNpb24gc3R1ZmYNCj4gb3IgaXQgbWlnaHQgYmUgYm9vbCBwYXR0 ZXJuIHJlY29nbml0aW9uIGl0c2VsZiAuLi4NCj4gDQo+IFRoYXQgc2FpZCwgYSBHSU1QTEVfQ09O RCAoYmUgaXQgcGF0dGVybiBvciBub3QpIHNob3VsZCBiZSByZWNvZ25pemVkDQo+IGFzIG1hc2sg dXNlLg0KPiANCj4gPiAgVGhhdCBtZWFucyB0aGF0IHdoaWxlIHRoZSBpbnRlZ3JhbCB0eXBlIGlz IGNvcnJlY3QgaXQNCj4gPiBXb24ndCBiZSBhIEJvb2xlYW4gb25lIGFuZCB2ZWN0b3JhYmxlX2Nv bXBhcmlzb24gZXhwZWN0cyBhIEJvb2xlYW4NCj4gPiB2ZWN0b3IuICBBbHRlcm5hdGl2ZWx5LCB3 ZSBjYW4gcmVtb3ZlIHRoYXQgYXNzZXJ0PyAgQnV0IHRoYXQgc2VlbXMgd29yc2UuDQo+ID4NCj4g PiBBZGRpdGlvbmFsbHkgaW4gdGhlIHByZXZpb3VzIGVtYWlsIHlvdSBtZW50aW9uICJhZGp1c3Rl ZCBCb29sZWFuIHN0YXRlbWVudCIuDQo+ID4NCj4gPiBJJ20gZ3Vlc3NpbmcgeW91IHdlcmUgcmVm ZXJyaW5nIHRvIGdlbmVyYXRpbmcgYSBDT05EX0VYUFIgZnJvbSB0aGUgZ2NvbmQuDQo+ID4gU28g dmVjdF9yZWNvZ19ib29sX3BhdHRlcm4gZGV0ZWN0cyBpdD8gIFRoZSBwcm9ibGVtIHdpdGggdGhh dCB0aGlzIGdldHMgZm9sZGVkDQo+ID4gdG8geCAmIDEgYW5kIGRvZXNuJ3QgdHJpZ2dlci4gIEl0 IGFsc28gdGhlbiBibG9ja3MgdmVjdG9yaXphdGlvbi4gIFNvIGluc3RlYWQgSSd2ZQ0KPiA+IG5v dCBmb3JjZWQgaXQuDQo+IA0KPiBOb3Qgc3VyZSB3aGF0IHlvdSBhcmUgcmVmZXJpbmcgdG8sIGJ1 dCBubyAtIHdlIHNob3Vsbid0IGdlbmVyYXRlIGENCj4gQ09ORF9FWFBSIGZyb20gdGhlIGdjb25k LiAgUGF0dGVybiByZWNvZyBnZW5lcmF0ZXMgQ09ORF9FWFBScyBmb3INCj4gX2RhdGFfIHVzZXMg b2YgbWFza3MgKGlmIHdlIG5lZWQgYSAnYm9vbCcgZGF0YSB0eXBlIGZvciBzdG9yaW5nKS4NCj4g V2UgdGhlbiBnZXQgbWFzayAhPSAwID8gdHJ1ZSA6IGZhbHNlOw0KPiANCg0KVGhvdWdodCBzby4u IGJ1dCB0aGVyZSBoYXBwZW5zIHRvIGJlIGEgZnVuY3Rpb24gY2FsbGVkIGFkanVzdF9ib29sX3N0 bXRzIHdoaWNoDQpJIHRob3VnaHQgeW91IHdhbnRlZCBtZSB0byBjYWxsLiAgVGhpcyBpcyB3aGVy ZSB0aGUgY29uZnVzaW9uIGNhbWUgZnJvbSwgY291bGRuJ3QNCnRlbGwgd2hldGhlciAiYWRqdXN0 ZWQgQm9vbGVhbiBzdGF0ZW1lbnQiIG1lYW50IGp1c3QgdGhlIG5ldyBtb2RpZmllZCBvbmUgb3IN Cm9uZSBmcm9tIGFkanVzdF9ib29sX3N0bXRzLiAgQnV0IHRoYXQgbGFzdCBvbmUgZGlkbid0IG1h a2UgbXVjaCBzZW5zZSBzbyBoZW5jZQ0KdGhlIHF1ZXN0aW9uIGFib3ZlLi4NCg0KPiA+ID4gPiAr ICAvKiBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byByZWR1Y2UgdGhlIGZpbmFsIHZhbHVlLiAgKi8N Cj4gPiA+ID4gKyAgaWYgKHN0bXRzLmxlbmd0aCAoKSA+IDEpDQo+ID4gPiA+ICsgICAgew0KPiA+ ID4gPiArICAgICAgLyogV2UgYnVpbGQgdGhlIHJlZHVjdGlvbnMgaW4gYSB3YXkgdG8gbWFpbnRh aW4gYXMgbXVjaCBwYXJhbGxlbGlzbSBhcw0KPiA+ID4gPiArCSBwb3NzaWJsZS4gICovDQo+ID4g PiA+ICsgICAgICBhdXRvX3ZlYzx0cmVlPiB3b3Jrc2V0IChzdG10cy5sZW5ndGggKCkpOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgICAvKiBNYXNrIHRoZSBzdGF0ZW1lbnRzIGFzIHdlIHF1ZXVl IHRoZW0gdXAuICAqLw0KPiA+ID4gPiArICAgICAgaWYgKG1hc2tlZF9sb29wX3ApDQo+ID4gPiA+ ICsJZm9yIChhdXRvIHN0bXQgOiBzdG10cykNCj4gPiA+ID4gKwkgIHdvcmtzZXQucXVpY2tfcHVz aCAocHJlcGFyZV92ZWNfbWFzayAobG9vcF92aW5mbywgVFJFRV9UWVBFIChtYXNrKSwNCj4gPiA+ ID4gKwkJCQkJCW1hc2ssIHN0bXQsICZjb25kX2dzaSkpOw0KPiA+ID4gPiArICAgICAgZWxzZQ0K PiA+ID4gPiArCXdvcmtzZXQuc3BsaWNlIChzdG10cyk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAg ICAgIHdoaWxlICh3b3Jrc2V0Lmxlbmd0aCAoKSA+IDEpDQo+ID4gPiA+ICsJew0KPiA+ID4gPiAr CSAgbmV3X3RlbXAgPSBtYWtlX3RlbXBfc3NhX25hbWUgKHZlY3R5cGUsIE5VTEwsICJ2ZXhpdF9y ZWR1YyIpOw0KPiA+ID4gPiArCSAgdHJlZSBhcmcwID0gd29ya3NldC5wb3AgKCk7DQo+ID4gPiA+ ICsJICB0cmVlIGFyZzEgPSB3b3Jrc2V0LnBvcCAoKTsNCj4gPiA+ID4gKwkgIG5ld19zdG10ID0g Z2ltcGxlX2J1aWxkX2Fzc2lnbiAobmV3X3RlbXAsIEJJVF9JT1JfRVhQUiwgYXJnMCwgYXJnMSk7 DQo+ID4gPiA+ICsJICB2ZWN0X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24gKGxvb3BfdmluZm8sIHN0 bXRfaW5mbywgbmV3X3N0bXQsDQo+ID4gPiA+ICsJCQkJICAgICAgICZjb25kX2dzaSk7DQo+ID4g PiA+ICsJICB3b3Jrc2V0LnF1aWNrX2luc2VydCAoMCwgbmV3X3RlbXApOw0KPiA+ID4gPiArCX0N Cj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsgIGVsc2UNCj4gPiA+ID4gKyAgICBuZXdfdGVtcCA9 IHN0bXRzWzBdOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGdjY19hc3NlcnQgKG5ld190ZW1wKTsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArICB0cmVlIGNvbmQgPSBuZXdfdGVtcDsNCj4gPiA+ID4gKyAg LyogSWYgd2UgaGF2ZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFmdGVyIHJlZHVjdGlvbiB3ZSBzaG91 bGQgY2hlY2sgYWxsIHRoZQ0KPiA+ID4gPiArICAgICBsYW5lcyBhbmQgdHJlYXQgaXQgYXMgYSBm dWxsIHZlY3Rvci4gICovDQo+ID4gPiA+ICsgIGlmIChtYXNrZWRfbG9vcF9wKQ0KPiA+ID4gPiAr ICAgIGNvbmQgPSBwcmVwYXJlX3ZlY19tYXNrIChsb29wX3ZpbmZvLCBUUkVFX1RZUEUgKG1hc2sp LCBtYXNrLCBjb25kLA0KPiA+ID4gPiArCQkJICAgICAmY29uZF9nc2kpOw0KPiA+ID4NCj4gPiA+ IFlvdSBkaWRuJ3QgZml4IGFueSBvZiB0aGUgY29kZSBhYm92ZSBpdCBzZWVtcywgaXQncyBzdGls bCB3cm9uZy4NCj4gPiA+DQo+ID4NCj4gPiBBcG9sb2dpZXMsIEkgaGFkbid0IHJlYWxpemVkIHRo YXQgdGhlIGxhc3QgYXJndW1lbnQgdG8gZ2V0X2xvb3BfbWFzayB3YXMgdGhlDQo+IGluZGV4Lg0K PiA+DQo+ID4gU2hvdWxkIGJlIGZpeGVkIG5vdy4gSXMgdGhpcyBjbG9zZXIgdG8gd2hhdCB5b3Ug d2FudGVkPw0KPiA+IFRoZSBpbmRpdmlkdWFsIG9wcyBhcmUgbm93IG1hc2tlZCB3aXRoIHNlcGFy YXRlIG1hc2tzLiAoU2VlIHRlc3RjYXNlIHdoZW4NCj4gTj04NjUpLg0KPiA+DQo+ID4gT2sgZm9y IG1hc3Rlcj8NCj4gPg0KPiA+IFRoYW5rcywNCj4gPiBUYW1hcg0KPiA+DQo+ID4gZ2NjL0NoYW5n ZUxvZzoNCj4gPg0KPiA+IAkqIHRyZWUtdmVjdC1wYXR0ZXJucy5jYyAodmVjdF9pbml0X3BhdHRl cm5fc3RtdCk6IFN1cHBvcnQgZ2NvbmRzLg0KPiA+IAkodmVjdF9yZWNvZ19nY29uZF9wYXR0ZXJu KTogTmV3Lg0KPiA+IAkodmVjdF92ZWN0X3JlY29nX2Z1bmNfcHRycyk6IFVzZSBpdC4NCj4gPiAJ KiB0cmVlLXZlY3Qtc3RtdHMuY2MgKHZlY3Rvcml6YWJsZV9jb21wYXJpc29uXzEpOiBTdXBwb3J0 IHN0bXRzIHdpdGhvdXQNCj4gPiAJbGhzLg0KPiA+IAkodmVjdG9yaXphYmxlX2Vhcmx5X2V4aXQp OiBOZXcuDQo+ID4gCSh2ZWN0X2FuYWx5emVfc3RtdCwgdmVjdF90cmFuc2Zvcm1fc3RtdCk6IFVz ZSBpdC4NCj4gPiAJKHZlY3RfaXNfc2ltcGxlX3VzZSwgdmVjdF9nZXRfdmVjdG9yX3R5cGVzX2Zv cl9zdG10KTogU3VwcG9ydCBnY29uZC4NCj4gPg0KPiA+IGdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9n Og0KPiA+DQo+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha184OC5jOiBOZXcgdGVz dC4NCj4gPg0KPiA+IC0tLSBpbmxpbmUgY29weSBvZiBwYXRjaCAtLS0NCj4gPg0KPiA+IGRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfODguYw0K PiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha184OC5jDQo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi5iNjRiZWNkNTg4OTczZjU4NjAxMTkNCj4gNmJmY2IxNWFmYmU0 YmFiNjBmMg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfODguYw0KPiA+IEBAIC0wLDAgKzEsMzYgQEANCj4gPiAr LyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiAr DQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QgLS1wYXJhbSB2ZWN0LXBh cnRpYWwtdmVjdG9yLXVzYWdlPTIiIH0gKi8NCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiArDQo+ID4gKyNpZm5k ZWYgTg0KPiA+ICsjZGVmaW5lIE4gNQ0KPiA+ICsjZW5kaWYNCj4gPiArZmxvYXQgdmVjdF9hW05d ID0geyA1LjFmLCA0LjJmLCA4LjBmLCA0LjI1ZiwgNi41ZiB9Ow0KPiA+ICt1bnNpZ25lZCB2ZWN0 X2JbTl0gPSB7IDAgfTsNCj4gPiArDQo+ID4gK19fYXR0cmlidXRlX18gKChub2lubGluZSwgbm9p cGEpKQ0KPiA+ICt1bnNpZ25lZCB0ZXN0NChkb3VibGUgeCkNCj4gPiArew0KPiA+ICsgdW5zaWdu ZWQgcmV0ID0gMDsNCj4gPiArIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiA+ICsgew0K PiA+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gPiArICAgICBicmVhazsNCj4gPiArICAgdmVj dF9hW2ldID0geDsNCj4gPiArDQo+ID4gKyB9DQo+ID4gKyByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtleHRlcm4gdm9pZCBhYm9ydCAoKTsNCj4gPiArDQo+ID4gK2ludCBtYWluICgp DQo+ID4gK3sNCj4gPiArICBpZiAodGVzdDQgKDcuMCkgIT0gMCkNCj4gPiArICAgIGFib3J0ICgp Ow0KPiA+ICsNCj4gPiArICBpZiAodmVjdF9iWzJdICE9IDAgJiYgdmVjdF9iWzFdID09IDApDQo+ ID4gKyAgICBhYm9ydCAoKTsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0 LXBhdHRlcm5zLmNjIGIvZ2NjL3RyZWUtdmVjdC1wYXR0ZXJucy5jYw0KPiA+IGluZGV4DQo+IDdk ZWJlN2YwNzMxNjczY2QxYmYyNWNkMzlkNTVlMjM5OTBhNzNkMGUuLjM1OWQzMGI1OTkxYTUwNzE3 YzI2OWRmDQo+IDU3N2MwOGFkZmZhNDRlNzFiIDEwMDY0NA0KPiA+IC0tLSBhL2djYy90cmVlLXZl Y3QtcGF0dGVybnMuY2MNCj4gPiArKysgYi9nY2MvdHJlZS12ZWN0LXBhdHRlcm5zLmNjDQo+ID4g QEAgLTEzMiw2ICsxMzIsNyBAQCB2ZWN0X2luaXRfcGF0dGVybl9zdG10ICh2ZWNfaW5mbyAqdmlu Zm8sIGdpbXBsZQ0KPiAqcGF0dGVybl9zdG10LA0KPiA+ICAgIGlmICghU1RNVF9WSU5GT19WRUNU WVBFIChwYXR0ZXJuX3N0bXRfaW5mbykpDQo+ID4gICAgICB7DQo+ID4gICAgICAgIGdjY19hc3Nl cnQgKCF2ZWN0eXBlDQo+ID4gKwkJICB8fCBpc19hIDxnY29uZCAqPiAocGF0dGVybl9zdG10KQ0K PiA+ICAJCSAgfHwgKFZFQ1RPUl9CT09MRUFOX1RZUEVfUCAodmVjdHlwZSkNCj4gPiAgCQkgICAg ICA9PSB2ZWN0X3VzZV9tYXNrX3R5cGVfcCAob3JpZ19zdG10X2luZm8pKSk7DQo+ID4gICAgICAg IFNUTVRfVklORk9fVkVDVFlQRSAocGF0dGVybl9zdG10X2luZm8pID0gdmVjdHlwZTsNCj4gPiBA QCAtNTU1Myw2ICs1NTU0LDgzIEBAIGludGVnZXJfdHlwZV9mb3JfbWFzayAodHJlZSB2YXIsIHZl Y19pbmZvICp2aW5mbykNCj4gPiAgICByZXR1cm4gYnVpbGRfbm9uc3RhbmRhcmRfaW50ZWdlcl90 eXBlIChkZWZfc3RtdF9pbmZvLT5tYXNrX3ByZWNpc2lvbiwgMSk7DQo+ID4gIH0NCj4gPg0KPiA+ ICsvKiBGdW5jdGlvbiB2ZWN0X3JlY29nX2djb25kX3BhdHRlcm4NCj4gPiArDQo+ID4gKyAgIFRy eSB0byBmaW5kIHBhdHRlcm4gbGlrZSBmb2xsb3dpbmc6DQo+ID4gKw0KPiA+ICsgICAgIGlmIChh IG9wIGIpDQo+ID4gKw0KPiA+ICsgICB3aGVyZSBvcGVyYXRvciAnb3AnIGlzIG5vdCAhPSBhbmQg Y29udmVydCBpdCB0byBhbiBhZGp1c3RlZCBib29sZWFuIHBhdHRlcm4NCj4gPiArDQo+ID4gKyAg ICAgbWFzayA9IGEgb3AgYg0KPiA+ICsgICAgIGlmIChtYXNrICE9IDApDQo+ID4gKw0KPiA+ICsg ICBhbmQgc2V0IHRoZSBtYXNrIHR5cGUgb24gTUFTSy4NCj4gPiArDQo+ID4gKyAgIElucHV0Og0K PiA+ICsNCj4gPiArICAgKiBTVE1UX1ZJTkZPOiBUaGUgc3RtdCBhdCB0aGUgZW5kIGZyb20gd2hp Y2ggdGhlIHBhdHRlcm4NCj4gPiArCQkgc2VhcmNoIGJlZ2lucywgaS5lLiBjYXN0IG9mIGEgYm9v bCB0bw0KPiA+ICsJCSBhbiBpbnRlZ2VyIHR5cGUuDQo+ID4gKw0KPiA+ICsgICBPdXRwdXQ6DQo+ ID4gKw0KPiA+ICsgICAqIFRZUEVfT1VUOiBUaGUgdHlwZSBvZiB0aGUgb3V0cHV0IG9mIHRoaXMg cGF0dGVybi4NCj4gPiArDQo+ID4gKyAgICogUmV0dXJuIHZhbHVlOiBBIG5ldyBzdG10IHRoYXQg d2lsbCBiZSB1c2VkIHRvIHJlcGxhY2UgdGhlIHBhdHRlcm4uICAqLw0KPiA+ICsNCj4gPiArc3Rh dGljIGdpbXBsZSAqDQo+ID4gK3ZlY3RfcmVjb2dfZ2NvbmRfcGF0dGVybiAodmVjX2luZm8gKnZp bmZvLA0KPiA+ICsJCQkgc3RtdF92ZWNfaW5mbyBzdG10X3ZpbmZvLCB0cmVlICp0eXBlX291dCkN Cj4gPiArew0KPiA+ICsgIGdpbXBsZSAqbGFzdF9zdG10ID0gU1RNVF9WSU5GT19TVE1UIChzdG10 X3ZpbmZvKTsNCj4gPiArICBnY29uZCogY29uZCA9IE5VTEw7DQo+ID4gKyAgaWYgKCEoY29uZCA9 IGR5bl9jYXN0IDxnY29uZCAqPiAobGFzdF9zdG10KSkpDQo+ID4gKyAgICByZXR1cm4gTlVMTDsN Cj4gPiArDQo+ID4gKyAgYXV0byBsaHMgPSBnaW1wbGVfY29uZF9saHMgKGNvbmQpOw0KPiA+ICsg IGF1dG8gcmhzID0gZ2ltcGxlX2NvbmRfcmhzIChjb25kKTsNCj4gPiArICBhdXRvIGNvZGUgPSBn aW1wbGVfY29uZF9jb2RlIChjb25kKTsNCj4gPiArDQo+ID4gKyAgdHJlZSBzY2FsYXJfdHlwZSA9 IFRSRUVfVFlQRSAobGhzKTsNCj4gPiArICBpZiAoVkVDVE9SX1RZUEVfUCAoc2NhbGFyX3R5cGUp KQ0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsgIGlmIChjb2RlID09IE5FX0VY UFIgJiYgemVyb3AgKHJocykpDQo+IA0KPiBJIHRoaW5rIHlvdSBuZWVkICYmIFZFQ1RfU0NBTEFS X0JPT0xFQU5fVFlQRV9QIChzY2FsYXJfdHlwZSkgaGVyZSwNCj4gYW4gaW50ZWdlciAhPSAwIHdv dWxkIG5vdCBiZSBhbiBhcHByb3ByaWF0ZSBtYXNrLiAgSSBndWVzcyB0d28NCj4gcmVsZXZhbnQg dGVzdGNhc2VzIHdvdWxkIGhhdmUgYW4gZWFybHkgZXhpdCBsaWtlDQo+IA0KPiAgICBpZiAoaGVy ZVtpXSAhPSAwKQ0KPiAgICAgIGJyZWFrOw0KPiANCj4gb25jZSB3aXRoIGEgJ2Jvb2wgaGVyZVtd JyBhbmQgb25jZSB3aXRoIGEgJ2ludCBoZXJlW10nLg0KPiANCj4gPiArICAgIHJldHVybiBOVUxM Ow0KPiA+ICsNCj4gPiArICB0cmVlIHZlY2l0eXBlID0gZ2V0X3ZlY3R5cGVfZm9yX3NjYWxhcl90 eXBlICh2aW5mbywgc2NhbGFyX3R5cGUpOw0KPiA+ICsgIGlmICh2ZWNpdHlwZSA9PSBOVUxMX1RS RUUpDQo+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gKyAgLyogQnVpbGQgYSBzY2Fs YXIgdHlwZSBmb3IgdGhlIGJvb2xlYW4gcmVzdWx0IHRoYXQgd2hlbiB2ZWN0b3JpemVkIG1hdGNo ZXMgdGhlDQo+ID4gKyAgICAgdmVjdG9yIHR5cGUgb2YgdGhlIHJlc3VsdCBpbiBzaXplIGFuZCBu dW1iZXIgb2YgZWxlbWVudHMuICAqLw0KPiA+ICsgIHVuc2lnbmVkIHByZWMNCj4gPiArICAgID0g dmVjdG9yX2VsZW1lbnRfc2l6ZSAodHJlZV90b19wb2x5X3VpbnQ2NCAoVFlQRV9TSVpFICh2ZWNp dHlwZSkpLA0KPiA+ICsJCQkgICBUWVBFX1ZFQ1RPUl9TVUJQQVJUUyAodmVjaXR5cGUpKTsNCj4g PiArDQo+ID4gKyAgc2NhbGFyX3R5cGUNCj4gPiArICAgID0gYnVpbGRfbm9uc3RhbmRhcmRfaW50 ZWdlcl90eXBlIChwcmVjLCBUWVBFX1VOU0lHTkVEIChzY2FsYXJfdHlwZSkpOw0KPiA+ICsNCj4g PiArICB2ZWNpdHlwZSA9IGdldF92ZWN0eXBlX2Zvcl9zY2FsYXJfdHlwZSAodmluZm8sIHNjYWxh cl90eXBlKTsNCj4gPiArICBpZiAodmVjaXR5cGUgPT0gTlVMTF9UUkVFKQ0KPiA+ICsgICAgcmV0 dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsgIHRyZWUgdmVjdHlwZSA9IHRydXRoX3R5cGVfZm9yICh2 ZWNpdHlwZSk7DQo+IA0KPiBUaGF0IGxvb2tzIGF3ZnVsbHkgY29tcGxpY2F0ZWQuICBJIGd1ZXNz IG9uZSBjb21wbGljYXRpb24gaXMgdGhhdA0KPiB3ZSBjb21wdXRlIG1hc2tfcHJlY2lzaW9uICYg ZnJpZW5kcyBiZWZvcmUgdGhpcyBwYXR0ZXJuIGdldHMNCj4gcmVjb2duaXplZC4gIFNlZSB2ZWN0 X2RldGVybWluZV9tYXNrX3ByZWNpc2lvbiBhbmQgaXRzIGhhbmRsaW5nDQo+IG9mIHRjY19jb21w YXJpc29uLCBzZWUgYWxzbyBpbnRlZ2VyX3R5cGVfZm9yX21hc2suICBGb3IgY29tcGFyaXNvbnMN Cj4gcHJvcGVybHkgaGFuZGxlZCBkdXJpbmcgcGF0dGVybiByZWNvZyB0aGUgdmVjdG9yIHR5cGUg aXMgZGV0ZXJtaW5lZA0KPiBpbiB2ZWN0X2dldF92ZWN0b3JfdHlwZXNfZm9yX3N0bXQgdmlhDQo+ IA0KPiAgIGVsc2UgaWYgKHZlY3RfdXNlX21hc2tfdHlwZV9wIChzdG10X2luZm8pKQ0KPiAgICAg ew0KPiAgICAgICB1bnNpZ25lZCBpbnQgcHJlY2lzaW9uID0gc3RtdF9pbmZvLT5tYXNrX3ByZWNp c2lvbjsNCj4gICAgICAgc2NhbGFyX3R5cGUgPSBidWlsZF9ub25zdGFuZGFyZF9pbnRlZ2VyX3R5 cGUgKHByZWNpc2lvbiwgMSk7DQo+ICAgICAgIHZlY3R5cGUgPSBnZXRfbWFza190eXBlX2Zvcl9z Y2FsYXJfdHlwZSAodmluZm8sIHNjYWxhcl90eXBlLA0KPiBncm91cF9zaXplKTsNCj4gICAgICAg aWYgKCF2ZWN0eXBlKQ0KPiAgICAgICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0IChz dG10LCAibm90IHZlY3Rvcml6ZWQ6IHVuc3VwcG9ydGVkIg0KPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiIGRhdGEtdHlwZSAlVFxuIiwgc2NhbGFyX3R5cGUpOw0KPiAN Cj4gUmljaGFyZCwgZG8geW91IGhhdmUgYW55IGFkdmljZSBoZXJlPyAgSSBzdXBwb3NlIHZlY3Rf ZGV0ZXJtaW5lX3ByZWNpc2lvbnMNCj4gbmVlZHMgdG8gaGFuZGxlIHRoZSBnY29uZCBjYXNlIHdp dGggYm9vbCAhPSAwIHNvbWVob3cgYW5kIGZvciB0aGUNCj4gZXh0cmEgbWFzayBwcm9kdWNlciB3 ZSBhZGQgaGVyZSB3ZSBoYXZlIHRvIGVtdWxhdGUgd2hhdCBpdCB3b3VsZCBoYXZlDQo+IGRvbmUs IHJpZ2h0Pw0KPiANCg0KVGhlcmUgc2VlbXMgdG8gYmUgYW4gYXdmdWwgbG90cyBvZiBwbGFjZXMg dGhhdCBkZXRlcm1pbmUgdHlwZXMgYW5kIHByZWNpc2lvbiDwn5iKDQpJdCdzIHF1aXRlIGhhcmQg dG8gZmlndXJlIG91dCB3aGljaCBwYXJ0IGlzIHVzZWQgd2hlcmUuLi4gYW5kIEJvb2xlYW4gaGFu ZGxpbmcNCnNlZW1zIHRvIGJlIGVzcGVjaWFsbHkgY29tcGxpY2F0ZWQuDQoNCj4gPiArICB0cmVl IG5ld19saHMgPSB2ZWN0X3JlY29nX3RlbXBfc3NhX3ZhciAoYm9vbGVhbl90eXBlX25vZGUsIE5V TEwpOw0KPiA+ICsgIGdpbXBsZSAqbmV3X3N0bXQgPSBnaW1wbGVfYnVpbGRfYXNzaWduIChuZXdf bGhzLCBjb2RlLCBsaHMsIHJocyk7DQo+ID4gKyAgYXBwZW5kX3BhdHRlcm5fZGVmX3NlcSAodmlu Zm8sIHN0bXRfdmluZm8sIG5ld19zdG10LCB2ZWN0eXBlLCBzY2FsYXJfdHlwZSk7DQo+ID4gKw0K PiA+ICsgIGdpbXBsZSAqcGF0dGVybl9zdG10DQo+ID4gKyAgICA9IGdpbXBsZV9idWlsZF9jb25k IChORV9FWFBSLCBuZXdfbGhzLA0KPiA+ICsJCQkgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChu ZXdfbGhzKSwgMCksDQo+ID4gKwkJCSBOVUxMX1RSRUUsIE5VTExfVFJFRSk7DQo+ID4gKyAgKnR5 cGVfb3V0ID0gdmVjdHlwZTsNCj4gPiArICB2ZWN0X3BhdHRlcm5fZGV0ZWN0ZWQgKCJ2ZWN0X3Jl Y29nX2djb25kX3BhdHRlcm4iLCBsYXN0X3N0bXQpOw0KPiA+ICsgIHJldHVybiBwYXR0ZXJuX3N0 bXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gIC8qIEZ1bmN0aW9uIHZlY3RfcmVjb2dfYm9vbF9wYXR0 ZXJuDQo+ID4NCj4gPiAgICAgVHJ5IHRvIGZpbmQgcGF0dGVybiBsaWtlIGZvbGxvd2luZzoNCj4g PiBAQCAtNjg2MCw2ICs2OTM4LDcgQEAgc3RhdGljIHZlY3RfcmVjb2dfZnVuYyB2ZWN0X3ZlY3Rf cmVjb2dfZnVuY19wdHJzW10gPQ0KPiB7DQo+ID4gICAgeyB2ZWN0X3JlY29nX2Rpdm1vZF9wYXR0 ZXJuLCAiZGl2bW9kIiB9LA0KPiA+ICAgIHsgdmVjdF9yZWNvZ19tdWx0X3BhdHRlcm4sICJtdWx0 IiB9LA0KPiA+ICAgIHsgdmVjdF9yZWNvZ19taXhlZF9zaXplX2NvbmRfcGF0dGVybiwgIm1peGVk X3NpemVfY29uZCIgfSwNCj4gPiArICB7IHZlY3RfcmVjb2dfZ2NvbmRfcGF0dGVybiwgImdjb25k IiB9LA0KPiA+ICAgIHsgdmVjdF9yZWNvZ19ib29sX3BhdHRlcm4sICJib29sIiB9LA0KPiA+ICAg IC8qIFRoaXMgbXVzdCBjb21lIGJlZm9yZSBtYXNrIGNvbnZlcnNpb24sIGFuZCBpbmNsdWRlcyB0 aGUgcGFydHMNCj4gPiAgICAgICBvZiBtYXNrIGNvbnZlcnNpb24gdGhhdCBhcmUgbmVlZGVkIGZv ciBnYXRoZXIgYW5kIHNjYXR0ZXINCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1zdG10 cy5jYyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MNCj4gPiBpbmRleA0KPiA1ODJjNWU2NzhmYWQ4 MDJkNmU3NjMwMGZlM2M5MzliOWYyOTc4ZjE3Li43YzUwZWUzN2YyYWRlMjRlY2NmN2E3ZDFlYQ0K PiAyZTAwYjQ0NTAwMjNmOSAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvdHJlZS12ZWN0LXN0bXRzLmNj DQo+ID4gKysrIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYw0KPiA+IEBAIC0xMjQ4OSw3ICsxMjQ4 OSw3IEBAIHZlY3Rvcml6YWJsZV9jb21wYXJpc29uXzEgKHZlY19pbmZvICp2aW5mbywgdHJlZQ0K PiB2ZWN0eXBlLA0KPiA+ICAgIHZlYzx0cmVlPiB2ZWNfb3BybmRzMCA9IHZOVUxMOw0KPiA+ICAg IHZlYzx0cmVlPiB2ZWNfb3BybmRzMSA9IHZOVUxMOw0KPiA+ICAgIHRyZWUgbWFza190eXBlOw0K PiA+IC0gIHRyZWUgbWFzazsNCj4gPiArICB0cmVlIG1hc2sgPSBOVUxMX1RSRUU7DQo+ID4NCj4g PiAgICBpZiAoIVNUTVRfVklORk9fUkVMRVZBTlRfUCAoc3RtdF9pbmZvKSAmJiAhYmJfdmluZm8p DQo+ID4gICAgICByZXR1cm4gZmFsc2U7DQo+ID4gQEAgLTEyNjI5LDggKzEyNjI5LDkgQEAgdmVj dG9yaXphYmxlX2NvbXBhcmlzb25fMSAodmVjX2luZm8gKnZpbmZvLCB0cmVlDQo+IHZlY3R5cGUs DQo+ID4gICAgLyogVHJhbnNmb3JtLiAgKi8NCj4gPg0KPiA+ICAgIC8qIEhhbmRsZSBkZWYuICAq Lw0KPiA+IC0gIGxocyA9IGdpbXBsZV9hc3NpZ25fbGhzIChTVE1UX1ZJTkZPX1NUTVQgKHN0bXRf aW5mbykpOw0KPiA+IC0gIG1hc2sgPSB2ZWN0X2NyZWF0ZV9kZXN0aW5hdGlvbl92YXIgKGxocywg bWFza190eXBlKTsNCj4gPiArICBsaHMgPSBnaW1wbGVfZ2V0X2xocyAoU1RNVF9WSU5GT19TVE1U IChzdG10X2luZm8pKTsNCj4gPiArICBpZiAobGhzKQ0KPiA+ICsgICAgbWFzayA9IHZlY3RfY3Jl YXRlX2Rlc3RpbmF0aW9uX3ZhciAobGhzLCBtYXNrX3R5cGUpOw0KPiA+DQo+ID4gICAgdmVjdF9n ZXRfdmVjX2RlZnMgKHZpbmZvLCBzdG10X2luZm8sIHNscF9ub2RlLCBuY29waWVzLA0KPiA+ICAJ CSAgICAgcmhzMSwgJnZlY19vcHJuZHMwLCB2ZWN0eXBlLA0KPiA+IEBAIC0xMjY0NCw3ICsxMjY0 NSwxMCBAQCB2ZWN0b3JpemFibGVfY29tcGFyaXNvbl8xICh2ZWNfaW5mbyAqdmluZm8sIHRyZWUN Cj4gdmVjdHlwZSwNCj4gPiAgICAgICAgZ2ltcGxlICpuZXdfc3RtdDsNCj4gPiAgICAgICAgdmVj X3JoczIgPSB2ZWNfb3BybmRzMVtpXTsNCj4gPg0KPiA+IC0gICAgICBuZXdfdGVtcCA9IG1ha2Vf c3NhX25hbWUgKG1hc2spOw0KPiA+ICsgICAgICBpZiAobGhzKQ0KPiA+ICsJbmV3X3RlbXAgPSBt YWtlX3NzYV9uYW1lIChtYXNrKTsNCj4gPiArICAgICAgZWxzZQ0KPiA+ICsJbmV3X3RlbXAgPSBt YWtlX3RlbXBfc3NhX25hbWUgKG1hc2tfdHlwZSwgTlVMTCwgImNtcCIpOw0KPiA+ICAgICAgICBp ZiAoYml0b3AxID09IE5PUF9FWFBSKQ0KPiA+ICAJew0KPiA+ICAJICBuZXdfc3RtdCA9IGdpbXBs ZV9idWlsZF9hc3NpZ24gKG5ld190ZW1wLCBjb2RlLA0KPiA+IEBAIC0xMjcyMyw2ICsxMjcyNywy MTEgQEAgdmVjdG9yaXphYmxlX2NvbXBhcmlzb24gKHZlY19pbmZvICp2aW5mbywNCj4gPiAgICBy ZXR1cm4gdHJ1ZTsNCj4gPiAgfQ0KPiA+DQo+ID4gKy8qIENoZWNrIHRvIHNlZSBpZiB0aGUgY3Vy cmVudCBlYXJseSBicmVhayBnaXZlbiBpbiBTVE1UX0lORk8gaXMgdmFsaWQgZm9yDQo+ID4gKyAg IHZlY3Rvcml6YXRpb24uICAqLw0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wNCj4gPiArdmVjdG9y aXphYmxlX2Vhcmx5X2V4aXQgKHZlY19pbmZvICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2lu Zm8sDQo+ID4gKwkJCSBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLCBnaW1wbGUgKip2ZWNfc3Rt dCwNCj4gPiArCQkJIHNscF90cmVlIHNscF9ub2RlLCBzdG10X3ZlY3Rvcl9mb3JfY29zdCAqY29z dF92ZWMpDQo+ID4gK3sNCj4gPiArICBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8gPSBkeW5fY2Fz dCA8bG9vcF92ZWNfaW5mbz4gKHZpbmZvKTsNCj4gPiArICBpZiAoIWxvb3BfdmluZm8NCj4gPiAr ICAgICAgfHwgIWlzX2EgPGdjb25kICo+IChTVE1UX1ZJTkZPX1NUTVQgKHN0bXRfaW5mbykpKQ0K PiA+ICsgICAgcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArICBpZiAoU1RNVF9WSU5GT19ERUZf VFlQRSAoc3RtdF9pbmZvKSAhPSB2ZWN0X2NvbmRpdGlvbl9kZWYpDQo+ID4gKyAgICByZXR1cm4g ZmFsc2U7DQo+ID4gKw0KPiA+ICsgIGlmICghU1RNVF9WSU5GT19SRUxFVkFOVF9QIChzdG10X2lu Zm8pKQ0KPiA+ICsgICAgcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArICBEVU1QX1ZFQ1RfU0NP UEUgKCJ2ZWN0b3JpemFibGVfZWFybHlfZXhpdCIpOw0KPiA+ICsNCj4gPiArICBhdXRvIGNvZGUg PSBnaW1wbGVfY29uZF9jb2RlIChTVE1UX1ZJTkZPX1NUTVQgKHN0bXRfaW5mbykpOw0KPiA+ICsN Cj4gPiArICB0cmVlIHZlY3R5cGVfb3AwID0gTlVMTF9UUkVFOw0KPiA+ICsgIHNscF90cmVlIHNs cF9vcDA7DQo+ID4gKyAgdHJlZSBvcDA7DQo+ID4gKyAgZW51bSB2ZWN0X2RlZl90eXBlIGR0MDsN Cj4gPiArICBpZiAoIXZlY3RfaXNfc2ltcGxlX3VzZSAodmluZm8sIHN0bXRfaW5mbywgc2xwX25v ZGUsIDAsICZvcDAsICZzbHBfb3AwLCAmZHQwLA0KPiA+ICsJCQkgICAmdmVjdHlwZV9vcDApKQ0K PiA+ICsgICAgew0KPiA+ICsgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gKwkgIGR1 bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24sDQo+ ID4gKwkJCSAgICJ1c2Ugbm90IHNpbXBsZS5cbiIpOw0KPiA+ICsJcmV0dXJuIGZhbHNlOw0KPiA+ ICsgICAgfQ0KPiA+ICsNCj4gPiArICBzdG10X3ZlY19pbmZvIG9wMF9pbmZvID0gdmluZm8tPmxv b2t1cF9kZWYgKG9wMCk7DQo+ID4gKyAgdHJlZSB2ZWN0eXBlID0gdHJ1dGhfdHlwZV9mb3IgKFNU TVRfVklORk9fVkVDVFlQRSAob3AwX2luZm8pKTsNCj4gPiArICBnY2NfYXNzZXJ0ICh2ZWN0eXBl KTsNCj4gPiArDQo+ID4gKyAgbWFjaGluZV9tb2RlIG1vZGUgPSBUWVBFX01PREUgKHZlY3R5cGUp Ow0KPiA+ICsgIGludCBuY29waWVzOw0KPiA+ICsNCj4gPiArICBpZiAoc2xwX25vZGUpDQo+ID4g KyAgICBuY29waWVzID0gMTsNCj4gPiArICBlbHNlDQo+ID4gKyAgICBuY29waWVzID0gdmVjdF9n ZXRfbnVtX2NvcGllcyAobG9vcF92aW5mbywgdmVjdHlwZSk7DQo+ID4gKw0KPiA+ICsgIHZlY19s b29wX21hc2tzICptYXNrcyA9ICZMT09QX1ZJTkZPX01BU0tTIChsb29wX3ZpbmZvKTsNCj4gPiAr ICBib29sIG1hc2tlZF9sb29wX3AgPSBMT09QX1ZJTkZPX0ZVTExZX01BU0tFRF9QIChsb29wX3Zp bmZvKTsNCj4gPiArDQo+ID4gKyAgLyogQW5hbHl6ZSBvbmx5LiAgKi8NCj4gPiArICBpZiAoIXZl Y19zdG10KQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICBpZiAoZGlyZWN0X29wdGFiX2hhbmRsZXIg KGNicmFuY2hfb3B0YWIsIG1vZGUpID09IENPREVfRk9SX25vdGhpbmcpDQo+ID4gKwl7DQo+ID4g KwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiArCSAgICAgIGR1bXBfcHJpbnRmX2xvYyAo TVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24sDQo+ID4gKwkJCSAgICAgICAi Y2FuJ3QgdmVjdG9yaXplIGVhcmx5IGV4aXQgYmVjYXVzZSB0aGUgIg0KPiA+ICsJCQkgICAgICAg InRhcmdldCBkb2Vzbid0IHN1cHBvcnQgZmxhZyBzZXR0aW5nIHZlY3RvciAiDQo+ID4gKwkJCSAg ICAgICAiY29tcGFyaXNvbnMuXG4iKTsNCj4gPiArCSAgcmV0dXJuIGZhbHNlOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArICAgICAgaWYgKG5jb3BpZXMgPiAxDQo+ID4gKwkgICYmIGRpcmVjdF9vcHRh Yl9oYW5kbGVyIChpb3Jfb3B0YWIsIG1vZGUpID09IENPREVfRk9SX25vdGhpbmcpDQo+ID4gKwl7 DQo+ID4gKwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiArCSAgICAgIGR1bXBfcHJpbnRm X2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24sDQo+ID4gKwkJCSAg ICAgICAiY2FuJ3QgdmVjdG9yaXplIGVhcmx5IGV4aXQgYmVjYXVzZSB0aGUgIg0KPiA+ICsJCQkg ICAgICAgInRhcmdldCBkb2VzIG5vdCBzdXBwb3J0IGJvb2xlYW4gdmVjdG9yIE9SIGZvciAiDQo+ ID4gKwkJCSAgICAgICAidHlwZSAlVC5cbiIsIHZlY3R5cGUpOw0KPiA+ICsJICByZXR1cm4gZmFs c2U7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsgICAgICBpZiAoIXZlY3Rvcml6YWJsZV9jb21wYXJp c29uXzEgKHZpbmZvLCB2ZWN0eXBlLCBzdG10X2luZm8sIGNvZGUsIGdzaSwNCj4gPiArCQkJCSAg ICAgIHZlY19zdG10LCBzbHBfbm9kZSwgY29zdF92ZWMpKQ0KPiA+ICsJcmV0dXJuIGZhbHNlOw0K PiA+ICsNCj4gPiArICAgICAgaWYgKExPT1BfVklORk9fQ0FOX1VTRV9QQVJUSUFMX1ZFQ1RPUlNf UCAobG9vcF92aW5mbykpDQo+ID4gKwl7DQo+ID4gKwkgIGlmIChkaXJlY3RfaW50ZXJuYWxfZm5f c3VwcG9ydGVkX3AgKElGTl9WQ09ORF9NQVNLX0xFTiwgdmVjdHlwZSwNCj4gPiArCQkJCQkgICAg ICBPUFRJTUlaRV9GT1JfU1BFRUQpKQ0KPiA+ICsJICAgIHJldHVybiBmYWxzZTsNCj4gPiArCSAg ZWxzZQ0KPiA+ICsJICAgIHZlY3RfcmVjb3JkX2xvb3BfbWFzayAobG9vcF92aW5mbywgbWFza3Ms IG5jb3BpZXMsIHZlY3R5cGUsIE5VTEwpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArDQo+ID4gKyAg ICAgIHJldHVybiB0cnVlOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAvKiBUcmFuZm9ybS4g ICovDQo+ID4gKw0KPiA+ICsgIHRyZWUgbmV3X3RlbXAgPSBOVUxMX1RSRUU7DQo+ID4gKyAgZ2lt cGxlICpuZXdfc3RtdCA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgIGlmIChkdW1wX2VuYWJsZWRfcCAo KSkNCj4gPiArICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sICJ0 cmFuc2Zvcm0gZWFybHktZXhpdC5cbiIpOw0KPiA+ICsNCj4gPiArICBpZiAoIXZlY3Rvcml6YWJs ZV9jb21wYXJpc29uXzEgKHZpbmZvLCB2ZWN0eXBlLCBzdG10X2luZm8sIGNvZGUsIGdzaSwNCj4g PiArCQkJCSAgdmVjX3N0bXQsIHNscF9ub2RlLCBjb3N0X3ZlYykpDQo+ID4gKyAgICBnY2NfdW5y ZWFjaGFibGUgKCk7DQo+ID4gKw0KPiA+ICsgIGdpbXBsZSAqc3RtdCA9IFNUTVRfVklORk9fU1RN VCAoc3RtdF9pbmZvKTsNCj4gPiArICBiYXNpY19ibG9jayBjb25kX2JiID0gZ2ltcGxlX2JiIChz dG10KTsNCj4gPiArICBnaW1wbGVfc3RtdF9pdGVyYXRvciAgY29uZF9nc2kgPSBnc2lfbGFzdF9i YiAoY29uZF9iYik7DQo+ID4gKw0KPiA+ICsgIGF1dG9fdmVjPHRyZWU+IHN0bXRzOw0KPiA+ICsN Cj4gPiArICB0cmVlIG1hc2sgPSBOVUxMX1RSRUU7DQo+ID4gKyAgaWYgKG1hc2tlZF9sb29wX3Ap DQo+ID4gKyAgICBtYXNrID0gdmVjdF9nZXRfbG9vcF9tYXNrIChsb29wX3ZpbmZvLCBnc2ksIG1h c2tzLCBuY29waWVzLCB2ZWN0eXBlLCAwKTsNCj4gPiArDQo+ID4gKyAgaWYgKHNscF9ub2RlKQ0K PiA+ICsgICAgc3RtdHMuc2FmZV9zcGxpY2UgKFNMUF9UUkVFX1ZFQ19ERUZTIChzbHBfbm9kZSkp Ow0KPiA+ICsgIGVsc2UNCj4gPiArICAgIHsNCj4gPiArICAgICAgYXV0byB2ZWNfc3RtdHMgPSBT VE1UX1ZJTkZPX1ZFQ19TVE1UUyAoc3RtdF9pbmZvKTsNCj4gPiArICAgICAgc3RtdHMucmVzZXJ2 ZV9leGFjdCAodmVjX3N0bXRzLmxlbmd0aCAoKSk7DQo+ID4gKyAgICAgIGZvciAoYXV0byBzdG10 IDogdmVjX3N0bXRzKQ0KPiA+ICsJc3RtdHMucXVpY2tfcHVzaCAoZ2ltcGxlX2Fzc2lnbl9saHMg KHN0bXQpKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgLyogRGV0ZXJtaW5lIGlmIHdlIG5l ZWQgdG8gcmVkdWNlIHRoZSBmaW5hbCB2YWx1ZS4gICovDQo+ID4gKyAgaWYgKHN0bXRzLmxlbmd0 aCAoKSA+IDEpDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIC8qIFdlIGJ1aWxkIHRoZSByZWR1Y3Rp b25zIGluIGEgd2F5IHRvIG1haW50YWluIGFzIG11Y2ggcGFyYWxsZWxpc20gYXMNCj4gPiArCSBw b3NzaWJsZS4gICovDQo+ID4gKyAgICAgIGF1dG9fdmVjPHRyZWU+IHdvcmtzZXQgKHN0bXRzLmxl bmd0aCAoKSk7DQo+ID4gKw0KPiA+ICsgICAgICAvKiBNYXNrIHRoZSBzdGF0ZW1lbnRzIGFzIHdl IHF1ZXVlIHRoZW0gdXAuICBOb3JtYWxseSB3ZSBsb29wIG92ZXINCj4gPiArCSB2ZWNfbnVtLCAg YnV0IHNpbmNlIHdlIGluc3BlY3QgdGhlIGV4YWN0IHJlc3VsdHMgb2YgdmVjdG9yaXphdGlvbg0K PiA+ICsJIHdlIGRvbid0IG5lZWQgdG8gYW5kIGluc3RlYWQgY2FuIGp1c3QgdXNlIHRoZSBzdG10 cyB0aGVtc2VsdmVzLiAgKi8NCj4gPiArICAgICAgaWYgKG1hc2tlZF9sb29wX3ApDQo+ID4gKwlm b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RtdHMubGVuZ3RoICgpOyBpKyspDQo+ID4gKwkgIHsN Cj4gPiArCSAgICB0cmVlIHN0bXRfbWFzaw0KPiA+ICsJICAgICAgPSB2ZWN0X2dldF9sb29wX21h c2sgKGxvb3BfdmluZm8sIGdzaSwgbWFza3MsIG5jb3BpZXMsIHZlY3R5cGUsDQo+ID4gKwkJCQkg ICAgaSk7DQo+ID4gKwkgICAgc3RtdF9tYXNrDQo+ID4gKwkgICAgICA9IHByZXBhcmVfdmVjX21h c2sgKGxvb3BfdmluZm8sIFRSRUVfVFlQRSAoc3RtdF9tYXNrKSwgc3RtdF9tYXNrLA0KPiA+ICsJ CQkJICBzdG10c1tpXSwgJmNvbmRfZ3NpKTsNCj4gPiArCSAgICB3b3Jrc2V0LnF1aWNrX3B1c2gg KHN0bXRfbWFzayk7DQo+ID4gKwkgIH0NCj4gPiArICAgICAgZWxzZQ0KPiA+ICsJd29ya3NldC5z cGxpY2UgKHN0bXRzKTsNCj4gPiArDQo+ID4gKyAgICAgIHdoaWxlICh3b3Jrc2V0Lmxlbmd0aCAo KSA+IDEpDQo+ID4gKwl7DQo+ID4gKwkgIG5ld190ZW1wID0gbWFrZV90ZW1wX3NzYV9uYW1lICh2 ZWN0eXBlLCBOVUxMLCAidmV4aXRfcmVkdWMiKTsNCj4gPiArCSAgdHJlZSBhcmcwID0gd29ya3Nl dC5wb3AgKCk7DQo+ID4gKwkgIHRyZWUgYXJnMSA9IHdvcmtzZXQucG9wICgpOw0KPiA+ICsJICBu ZXdfc3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKG5ld190ZW1wLCBCSVRfSU9SX0VYUFIsIGFy ZzAsIGFyZzEpOw0KPiA+ICsJICB2ZWN0X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24gKGxvb3Bfdmlu Zm8sIHN0bXRfaW5mbywgbmV3X3N0bXQsDQo+ID4gKwkJCQkgICAgICAgJmNvbmRfZ3NpKTsNCj4g PiArCSAgd29ya3NldC5xdWlja19pbnNlcnQgKDAsIG5ld190ZW1wKTsNCj4gPiArCX0NCj4gPiAr ICAgIH0NCj4gPiArICBlbHNlDQo+ID4gKyAgICBuZXdfdGVtcCA9IHN0bXRzWzBdOw0KPiA+ICsN Cj4gPiArICBnY2NfYXNzZXJ0IChuZXdfdGVtcCk7DQo+ID4gKw0KPiA+ICsgIHRyZWUgY29uZCA9 IG5ld190ZW1wOw0KPiA+ICsgIC8qIElmIHdlIGhhdmUgbXVsdGlwbGUgc3RhdGVtZW50cyBhZnRl ciByZWR1Y3Rpb24gd2Ugc2hvdWxkIGNoZWNrIGFsbCB0aGUNCj4gPiArICAgICBsYW5lcyBhbmQg dHJlYXQgaXQgYXMgYSBmdWxsIHZlY3Rvci4gICovDQo+ID4gKyAgaWYgKG1hc2tlZF9sb29wX3Ap DQo+ID4gKyAgICBjb25kID0gcHJlcGFyZV92ZWNfbWFzayAobG9vcF92aW5mbywgVFJFRV9UWVBF IChtYXNrKSwgbWFzaywgY29uZCwNCj4gPiArCQkJICAgICAmY29uZF9nc2kpOw0KPiANCj4gVGhp cyBpcyBzdGlsbCB3cm9uZywgeW91IGFyZSBhcHBseWluZyBtYXNrWzBdIG9uIHRoZSBJT1IgcmVk dWNlZCByZXN1bHQuDQo+IEFzIHN1Z2dlc3RlZCBkbyB0aGF0IGluIHRoZSBlbHNlIHsgbmV3X3Rl bXAgPSBzdG10c1swXSB9IGNsYXVzZSBpbnN0ZWFkDQo+IChvciBzaW1wbHkgZWxpZGUgdGhlIG9w dGltaXphdGlvbiBvZiBhIHNpbmdsZSB2ZWN0b3IpDQoNClBFQktBQy4uIEkgaGFkIGxvb2tlZCBh dCBpdCwgYW5kIHRob3VnaHQsIGl0IGRvZXNuJ3Qgc2VlbSByaWdodCBzaW5jZSB3aHkgd291bGQN Cm1hc2tbMF0gYmUgdXNlZCBmb3IgYm90aCB0aGUgZWxlbWVudHMgYW5kIHRoZSBmaW5hbCwgYnV0 IGxlZnQgaXQg4pi5DQoNCkknbGwgd2FpdCBmb3IgUmljaGFyZCdzIHRob3VnaHRzIG9uIHRoZSBw cmVjaXNpb24gYmVmb3JlIHJlLXNwaW5pbmcuIA0KDQpUaGFua3MsDQpUYW1hcg0KPiANCj4gPiAr ICAvKiBOb3cgYnVpbGQgdGhlIG5ldyBjb25kaXRpb25hbC4gIFBhdHRlcm4gZ2ltcGxlX2NvbmRz IGdldCBkcm9wcGVkIGR1cmluZw0KPiA+ICsgICAgIGNvZGVnZW4gc28gd2UgbXVzdCByZXBsYWNl IHRoZSBvcmlnaW5hbCBpbnNuLiAgKi8NCj4gPiArICBzdG10ID0gU1RNVF9WSU5GT19TVE1UICh2 ZWN0X29yaWdfc3RtdCAoc3RtdF9pbmZvKSk7DQo+ID4gKyAgZ2NvbmQgKmNvbmRfc3RtdCA9IGFz X2EgPGdjb25kICo+KHN0bXQpOw0KPiA+ICsgIC8qIFdoZW4gdmVjdG9yaXppbmcgd2UgYXNzdW1l IHRoYXQgaWYgdGhlIGJyYW5jaCBlZGdlIGlzIHRha2VuIHRoYXQgd2UncmUNCj4gPiArICAgICBl eGl0aW5nIHRoZSBsb29wLiAgVGhpcyBpcyBub3QgaG93ZXZlciBhbHdheXMgdGhlIGNhc2UgYXMg dGhlIGNvbXBpbGVyIHdpbGwNCj4gPiArICAgICByZXdyaXRlIGNvbmRpdGlvbnMgdG8gYWx3YXlz IGJlIGEgY29tcGFyaXNvbiBhZ2FpbnN0IDAuICBUbyBkbyB0aGlzIGl0DQo+ID4gKyAgICAgc29t ZXRpbWVzIGZsaXBzIHRoZSBlZGdlcy4gIFRoaXMgaXMgZmluZSBmb3Igc2NhbGFyLCAgYnV0IGZv ciB2ZWN0b3Igd2UNCj4gPiArICAgICB0aGVuIGhhdmUgdG8gZmxpcCB0aGUgdGVzdCwgYXMgd2Un cmUgc3RpbGwgYXNzdW1pbmcgdGhhdCBpZiB5b3UgdGFrZSB0aGUNCj4gPiArICAgICBicmFuY2gg ZWRnZSB0aGF0IHdlIGZvdW5kIHRoZSBleGl0IGNvbmRpdGlvbi4gICovDQo+ID4gKyAgYXV0byBu ZXdfY29kZSA9IE5FX0VYUFI7DQo+ID4gKyAgdHJlZSBjc3QgPSBidWlsZF96ZXJvX2NzdCAodmVj dHlwZSk7DQo+ID4gKyAgaWYgKGZsb3dfYmJfaW5zaWRlX2xvb3BfcCAoTE9PUF9WSU5GT19MT09Q IChsb29wX3ZpbmZvKSwNCj4gPiArCQkJICAgICBCUkFOQ0hfRURHRSAoZ2ltcGxlX2JiIChjb25k X3N0bXQpKS0+ZGVzdCkpDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIG5ld19jb2RlID0gRVFfRVhQ UjsNCj4gPiArICAgICAgY3N0ID0gYnVpbGRfbWludXNfb25lX2NzdCAodmVjdHlwZSk7DQo+ID4g KyAgICB9DQo+ID4gKw0KPiA+ICsgIGdpbXBsZV9jb25kX3NldF9jb25kaXRpb24gKGNvbmRfc3Rt dCwgbmV3X2NvZGUsIGNvbmQsIGNzdCk7DQo+ID4gKyAgdXBkYXRlX3N0bXQgKHN0bXQpOw0KPiA+ ICsNCj4gPiArICBpZiAoc2xwX25vZGUpDQo+ID4gKyAgICBTTFBfVFJFRV9WRUNfREVGUyAoc2xw X25vZGUpLnRydW5jYXRlICgwKTsNCj4gPiArICAgZWxzZQ0KPiA+ICsgICAgU1RNVF9WSU5GT19W RUNfU1RNVFMgKHN0bXRfaW5mbykudHJ1bmNhdGUgKDApOw0KPiA+ICsNCj4gPiArDQo+ID4gKyAg aWYgKCFzbHBfbm9kZSkNCj4gPiArICAgICp2ZWNfc3RtdCA9IHN0bXQ7DQo+ID4gKw0KPiA+ICsg IHJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAvKiBJZiBTTFBfTk9ERSBpcyBub25u dWxsLCByZXR1cm4gdHJ1ZSBpZiB2ZWN0b3JpemFibGVfbGl2ZV9vcGVyYXRpb24NCj4gPiAgICAg Y2FuIGhhbmRsZSBhbGwgbGl2ZSBzdGF0ZW1lbnRzIGluIHRoZSBub2RlLiAgT3RoZXJ3aXNlIHJl dHVybiB0cnVlDQo+ID4gICAgIGlmIFNUTVRfSU5GTyBpcyBub3QgbGl2ZSBvciBpZiB2ZWN0b3Jp emFibGVfbGl2ZV9vcGVyYXRpb24gY2FuIGhhbmRsZSBpdC4NCj4gPiBAQCAtMTI5NDksNyArMTMx NTgsOSBAQCB2ZWN0X2FuYWx5emVfc3RtdCAodmVjX2luZm8gKnZpbmZvLA0KPiA+ICAJICB8fCB2 ZWN0b3JpemFibGVfbGNfcGhpIChhc19hIDxsb29wX3ZlY19pbmZvPiAodmluZm8pLA0KPiA+ICAJ CQkJICBzdG10X2luZm8sIE5VTEwsIG5vZGUpDQo+ID4gIAkgIHx8IHZlY3Rvcml6YWJsZV9yZWN1 cnIgKGFzX2EgPGxvb3BfdmVjX2luZm8+ICh2aW5mbyksDQo+ID4gLQkJCQkgICBzdG10X2luZm8s IE5VTEwsIG5vZGUsIGNvc3RfdmVjKSk7DQo+ID4gKwkJCQkgICBzdG10X2luZm8sIE5VTEwsIG5v ZGUsIGNvc3RfdmVjKQ0KPiA+ICsJICB8fCB2ZWN0b3JpemFibGVfZWFybHlfZXhpdCAodmluZm8s IHN0bXRfaW5mbywgTlVMTCwgTlVMTCwgbm9kZSwNCj4gPiArCQkJCSAgICAgIGNvc3RfdmVjKSk7 DQo+ID4gICAgZWxzZQ0KPiA+ICAgICAgew0KPiA+ICAgICAgICBpZiAoYmJfdmluZm8pDQo+ID4g QEAgLTEyOTcyLDcgKzEzMTgzLDEwIEBAIHZlY3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5mbyAqdmlu Zm8sDQo+ID4gIAkJCQkJIE5VTEwsIE5VTEwsIG5vZGUsIGNvc3RfdmVjKQ0KPiA+ICAJICAgICAg fHwgdmVjdG9yaXphYmxlX2NvbXBhcmlzb24gKHZpbmZvLCBzdG10X2luZm8sIE5VTEwsIE5VTEws IG5vZGUsDQo+ID4gIAkJCQkJICBjb3N0X3ZlYykNCj4gPiAtCSAgICAgIHx8IHZlY3Rvcml6YWJs ZV9waGkgKHZpbmZvLCBzdG10X2luZm8sIE5VTEwsIG5vZGUsIGNvc3RfdmVjKSk7DQo+ID4gKwkg ICAgICB8fCB2ZWN0b3JpemFibGVfcGhpICh2aW5mbywgc3RtdF9pbmZvLCBOVUxMLCBub2RlLCBj b3N0X3ZlYykNCj4gPiArCSAgICAgIHx8IHZlY3Rvcml6YWJsZV9lYXJseV9leGl0ICh2aW5mbywg c3RtdF9pbmZvLCBOVUxMLCBOVUxMLCBub2RlLA0KPiA+ICsJCQkJCSAgY29zdF92ZWMpKTsNCj4g PiArDQo+ID4gICAgICB9DQo+ID4NCj4gPiAgICBpZiAobm9kZSkNCj4gPiBAQCAtMTMxMzEsNiAr MTMzNDUsMTIgQEAgdmVjdF90cmFuc2Zvcm1fc3RtdCAodmVjX2luZm8gKnZpbmZvLA0KPiA+ICAg ICAgICBnY2NfYXNzZXJ0IChkb25lKTsNCj4gPiAgICAgICAgYnJlYWs7DQo+ID4NCj4gPiArICAg IGNhc2UgbG9vcF9leGl0X2N0cmxfdmVjX2luZm9fdHlwZToNCj4gPiArICAgICAgZG9uZSA9IHZl Y3Rvcml6YWJsZV9lYXJseV9leGl0ICh2aW5mbywgc3RtdF9pbmZvLCBnc2ksICZ2ZWNfc3RtdCwN Cj4gPiArCQkJCSAgICAgIHNscF9ub2RlLCBOVUxMKTsNCj4gPiArICAgICAgZ2NjX2Fzc2VydCAo ZG9uZSk7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsNCj4gPiAgICAgIGRlZmF1bHQ6DQo+ID4g ICAgICAgIGlmICghU1RNVF9WSU5GT19MSVZFX1AgKHN0bXRfaW5mbykpDQo+ID4gIAl7DQo+ID4g QEAgLTE0MzIxLDEwICsxNDU0MSwxOSBAQCB2ZWN0X2dldF92ZWN0b3JfdHlwZXNfZm9yX3N0bXQg KHZlY19pbmZvDQo+ICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sDQo+ID4gICAgICB9 DQo+ID4gICAgZWxzZQ0KPiA+ICAgICAgew0KPiA+ICsgICAgICBnY29uZCAqY29uZCA9IE5VTEw7 DQo+ID4gICAgICAgIGlmIChkYXRhX3JlZmVyZW5jZSAqZHIgPSBTVE1UX1ZJTkZPX0RBVEFfUkVG IChzdG10X2luZm8pKQ0KPiA+ICAJc2NhbGFyX3R5cGUgPSBUUkVFX1RZUEUgKERSX1JFRiAoZHIp KTsNCj4gPiAgICAgICAgZWxzZSBpZiAoZ2ltcGxlX2NhbGxfaW50ZXJuYWxfcCAoc3RtdCwgSUZO X01BU0tfU1RPUkUpKQ0KPiA+ICAJc2NhbGFyX3R5cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9jYWxs X2FyZyAoc3RtdCwgMykpOw0KPiA+ICsgICAgICBlbHNlIGlmICgoY29uZCA9IGR5bl9jYXN0IDxn Y29uZCAqPiAoc3RtdCkpKQ0KPiA+ICsJew0KPiA+ICsJICAvKiBXZSBjYW4ndCBjb252ZXJ0IHRo ZSBzY2FsYXIgdHlwZSB0byBib29sZWFuIHlldCwgc2luY2UgYm9vbGVhbnMgaGF2ZSBhDQo+ID4g KwkgICAgIHNpbmdsZSBiaXQgcHJlY2lzaW9uIGFuZCB3ZSBuZWVkIHRoZSB2ZWN0b3IgYm9vbGVh biB0byBiZSBhDQo+ID4gKwkgICAgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnRlZ2VyIG1hc2su ICBTbyBzZXQgdGhlIGNvcnJlY3QgaW50ZWdlciB0eXBlIGFuZA0KPiA+ICsJICAgICBjb252ZXJ0 IHRvIGJvb2xlYW4gdmVjdG9yIG9uY2Ugd2UgaGF2ZSBhIHZlY3R5cGUuICAqLw0KPiA+ICsJICBz Y2FsYXJfdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2NvbmRfbGhzIChjb25kKSk7DQo+IA0KPiBZ b3Ugc2hvdWxkIGdldCBpbnRvIHRoZSB2ZWN0X3VzZV9tYXNrX3R5cGVfcCAoc3RtdF9pbmZvKSBw YXRoIGZvcg0KPiBlYXJseSBleGl0IGNvbmRpdGlvbnMgKHNlZSBhYm92ZSB3aXRoIHJlZ2FyZCB0 byBtYXNrX3ByZWNpc2lvbikuDQo+IA0KPiA+ICsJfQ0KPiA+ICAgICAgICBlbHNlDQo+ID4gIAlz Y2FsYXJfdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2dldF9saHMgKHN0bXQpKTsNCj4gPg0KPiA+ IEBAIC0xNDMzOSwxMiArMTQ1NjgsMTggQEAgdmVjdF9nZXRfdmVjdG9yX3R5cGVzX2Zvcl9zdG10 ICh2ZWNfaW5mbw0KPiAqdmluZm8sIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLA0KPiA+ICAJCQkg ICAgICJnZXQgdmVjdHlwZSBmb3Igc2NhbGFyIHR5cGU6ICVUXG4iLCBzY2FsYXJfdHlwZSk7DQo+ ID4gIAl9DQo+ID4gICAgICAgIHZlY3R5cGUgPSBnZXRfdmVjdHlwZV9mb3Jfc2NhbGFyX3R5cGUg KHZpbmZvLCBzY2FsYXJfdHlwZSwgZ3JvdXBfc2l6ZSk7DQo+ID4gKw0KPiA+ICAgICAgICBpZiAo IXZlY3R5cGUpDQo+ID4gIAlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAoc3RtdCwNCj4g PiAgCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6Ig0KPiA+ICAJCQkJICAgICAgICIgdW5zdXBw b3J0ZWQgZGF0YS10eXBlICVUXG4iLA0KPiA+ICAJCQkJICAgICAgIHNjYWxhcl90eXBlKTsNCj4g Pg0KPiA+ICsgICAgICAvKiBJZiB3ZSB3ZXJlIGEgZ2NvbmQsIGNvbnZlcnQgdGhlIHJlc3VsdGlu ZyB0eXBlIHRvIGEgdmVjdG9yIGJvb2xlYW4gdHlwZQ0KPiBub3cNCj4gPiArCSB0aGF0IHdlIGhh dmUgdGhlIGNvcnJlY3QgaW50ZWdlciBtYXNrIHR5cGUuICAqLw0KPiA+ICsgICAgICBpZiAoY29u ZCkNCj4gPiArCXZlY3R5cGUgPSB0cnV0aF90eXBlX2ZvciAodmVjdHlwZSk7DQo+ID4gKw0KPiAN Cj4gd2hpY2ggbWFrZXMgdGhpcyBtb290Lg0KPiANCj4gUmljaGFyZC4NCj4gDQo+ID4gICAgICAg IGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiAgCWR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUs IHZlY3RfbG9jYXRpb24sICJ2ZWN0eXBlOiAlVFxuIiwgdmVjdHlwZSk7DQo+ID4gICAgICB9DQo+ ID4NCj4gDQo+IC0tDQo+IFJpY2hhcmQgQmllbmVyIDxyZ3VlbnRoZXJAc3VzZS5kZT4NCj4gU1VT RSBTb2Z0d2FyZSBTb2x1dGlvbnMgR2VybWFueSBHbWJILA0KPiBGcmFua2Vuc3RyYXNzZSAxNDYs IDkwNDYxIE51ZXJuYmVyZywgR2VybWFueTsNCj4gR0Y6IEl2byBUb3RldiwgQW5kcmV3IE1jRG9u YWxkLCBXZXJuZXIgS25vYmxpY2g7IChIUkIgMzY4MDksIEFHIE51ZXJuYmVyZykNCg==