From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2068.outbound.protection.outlook.com [40.107.21.68]) by sourceware.org (Postfix) with ESMTPS id 8E4423858C52 for ; Wed, 4 Oct 2023 15:13:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8E4423858C52 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=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=cmx9hmr5C3n9MqIwjdspIcil/vBmGIvKJQqKoN6yJW0=; b=0Ub3qJXUdsMhMNC10DBBYZ8op1d9sMzZBKCRxg4qMG+mnCCdl0RUi8CYrHGIE8F4KbVtAccsitxgxwOyUhwf9rlsToVC837qRQRuffZ7TvfPtyQ6g84bvKyoQ5TDYElZs50P8Sw5uyDBYw3T7MqtlAj0HNJRZW7B3SAkQ3SgK9M= Received: from AS8PR04CA0163.eurprd04.prod.outlook.com (2603:10a6:20b:331::18) by AM9PR08MB5875.eurprd08.prod.outlook.com (2603:10a6:20b:2dc::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.35; Wed, 4 Oct 2023 15:13:06 +0000 Received: from AM7EUR03FT035.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:331:cafe::8d) by AS8PR04CA0163.outlook.office365.com (2603:10a6:20b:331::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.26 via Frontend Transport; Wed, 4 Oct 2023 15:13:06 +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 AM7EUR03FT035.mail.protection.outlook.com (100.127.141.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.26 via Frontend Transport; Wed, 4 Oct 2023 15:13:06 +0000 Received: ("Tessian outbound fb5c0777b309:v211"); Wed, 04 Oct 2023 15:13:06 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 1df5437309bcc5ad X-CR-MTA-TID: 64aa7808 Received: from 78e88a4511cc.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id BF34D0E2-B5E1-454B-BDF5-45854D408564.1; Wed, 04 Oct 2023 15:12:59 +0000 Received: from EUR02-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 78e88a4511cc.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 04 Oct 2023 15:12:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O2L+1GVkBjVqay2PHYJYeyd24vel/zos0xozTtblT7ETovdtYJdi7IN9X2FoJrmHkFBGQ8wdOhPE8qoZT8UtzgHZFNFVT26hp19D9TtwZ71fa9h+YPX08qXtFhqd2j4Cy3eZZJcVpFj9/imrC4BeDeGgh0bk/KQxrzmPJy8s23rVj0Nyx/jg3wQxV7/evTQj7Nc3kejn+LKGt3/htA7cPKtuQeRo8HIkIOHNeUXWefvObs7M15af4kyb8NJ27Ir1BfVQuf3m462Ewlhza+a12sWhsSMkFo7+1TuYiMM6pxbZosSYroBOPUGpD8hEJ1lJliAddIQTb8DQWXd2MeIEfQ== 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=cmx9hmr5C3n9MqIwjdspIcil/vBmGIvKJQqKoN6yJW0=; b=gzrZyMgcV20agDCVWywWITviEhO+ZoM5jCZwvJhkQ6h7HS0CNhy0cAIxBCuFEaoNNOHwyvKQqkeIBjx9JRbKpVB5YqdJNLXLDB7K2XDV6VDZzVhMtQBDXNjGOU1+aFFo+MDhloqfvkQhbiwAXhfvfppKzMKpF5YERi2PVonL9nDCL94DI3Mfr1N54KX1b6OsQBsw0Y3NH0SyH85800EAVG8CZ7kp0zV+kLGpw4SFmfRFaHbUoegoKm7uNRB8NlLGIXF4qrBycVB0j0F4r9rQMczdUMPg+xGAgy4I42q/V3p1Pfzk+au+s9bSYzwH86xNWgu5kyVHmrOHUfViknDu9g== 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=cmx9hmr5C3n9MqIwjdspIcil/vBmGIvKJQqKoN6yJW0=; b=0Ub3qJXUdsMhMNC10DBBYZ8op1d9sMzZBKCRxg4qMG+mnCCdl0RUi8CYrHGIE8F4KbVtAccsitxgxwOyUhwf9rlsToVC837qRQRuffZ7TvfPtyQ6g84bvKyoQ5TDYElZs50P8Sw5uyDBYw3T7MqtlAj0HNJRZW7B3SAkQ3SgK9M= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by PAVPR08MB9698.eurprd08.prod.outlook.com (2603:10a6:102:31d::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.21; Wed, 4 Oct 2023 15:12:55 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::662f:8e26:1bf8:aaa1]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::662f:8e26:1bf8:aaa1%7]) with mapi id 15.20.6838.033; Wed, 4 Oct 2023 15:12:55 +0000 From: Tamar Christina To: Robin Dapp , gcc-patches , Richard Biener Subject: RE: [PATCH] ifcvt/vect: Emit COND_ADD for conditional scalar reduction. Thread-Topic: [PATCH] ifcvt/vect: Emit COND_ADD for conditional scalar reduction. Thread-Index: AQHZ68mTraLO0OuF1E+ghd6M1r2t27At07uQgAuEloCAAHNxAA== Date: Wed, 4 Oct 2023 15:12:55 +0000 Message-ID: References: <0193b63e-98dc-42bc-cd33-485361ea50bf@gmail.com> <671a575c-02ff-071b-967e-2e93d8986c1a@gmail.com> In-Reply-To: <671a575c-02ff-071b-967e-2e93d8986c1a@gmail.com> 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_|PAVPR08MB9698:EE_|AM7EUR03FT035:EE_|AM9PR08MB5875:EE_ X-MS-Office365-Filtering-Correlation-Id: ca7cb8e0-61e4-410d-f435-08dbc4ec6964 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: oeFiCiWRd2OAnyNB3t1o63Zjol6iyZB7BSHz1ZzNE1w9exG8kttlt79zZ1EN0DOwIf0vgqhGV94BFcXPVmXa5DJOTk0iWDM4MLCjiGfE1CI8TjIwijCKVlR+gBan+kWHaHO+3xqgf5hIGerrOV56rnsxaNzUyeUd41WuQNX/rHsmpgwsCPdNtFBtITY+/E30bCsydg/UJOPiCROAFY3E7WahiAqPkJrGh4CUtacWjlakO7HLM5qQdzRLPjb7wVPyjMzCB6Au3BKDv8FCFisWBqLOu9PLlQWAjFEFV5XD6Lc3FncxtnS4OCEinQvBrCaKd87SANWsm+iD1RWBEPNDndiNa+kt5S9LwIoz4wicXo6CYyqrQkzsZf1uV4OXwH9O4d1SkQpIGIaPy5NBJKL8PTI99T3usj30vqzfdgdSqIM5puGVxtuNxrxmvPVbR7XglfCBl4T8sgj6NVr77DfZmlH06ajVIh2DxKORqvlQ8PJ132RRLo3LqpaHeOzoZvGfIJzehkckWsCOcPxswaw7Dd2FItUNhoF8E1pucvggQOC9SnfRmfAX3/DO05+8bynzmK3TW2bRwkMaK+dv741MR/m+OovDpZYOppGquXh1+PosIn9cZyoR8Xn8qJeJ4D8zgMlRyuPaoXkGfeEcshuolQ== 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)(366004)(136003)(376002)(396003)(346002)(39860400002)(230922051799003)(64100799003)(1800799009)(451199024)(186009)(7696005)(6506007)(53546011)(9686003)(33656002)(66556008)(110136005)(64756008)(66476007)(38100700002)(316002)(122000001)(66446008)(478600001)(86362001)(38070700005)(76116006)(66946007)(71200400001)(5660300002)(83380400001)(41300700001)(52536014)(26005)(2906002)(30864003)(84970400001)(8676002)(55016003)(8936002)(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: PAVPR08MB9698 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: AM7EUR03FT035.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 6bc8f16c-707c-4da0-a129-08dbc4ec62eb X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 70QTq6TQXbpMXOlEpHr0UX+oqvafZgDwxd6ORFGvNU0zCHVtScUVnQY6MxEIqRMEsMzSV7AhS/OzO8ACPxCJ+fYorhkX1JzJOExz5TJRuBJQgkEdLYOn7Yl6Gd9iXXiXKuGzukPeJOAizJCi+OsJu+5Jr1gZlezOFVM9ScsQe/r2m7/P44NRBMpzafvWmo+6Wz9eI6LSROXCaQggt7q3oGBMdtcVrFNM3JeRC54lKvoFZEXLsU4hmNikKOgbcZXidwQ/LiWSRi/IcwA+NTNzJkqHScXCdGpEXkZTY92ipBGlAzuypa4KLiISmBAK42vvXb6BWuNTrBxq7SVdroCKnW1BX1fRXEIqqoxOo9D3Krb9TCbVM7w6Enm7jXhwBwzr9OGoUUOnoBk0fmZypV5ZvqqNdVmxZvSphp5NSwfpIA4yPrPAXQj8mtFLbsk0A7PL9Lu/ELznkO1hh0yX6jL54czwoqHwjmowRmjUMf2B6Xl3paTcYS4bnzIz5+/YSJTnIZ7rkjngN7kV+yTyaFfF7vYxrIarCVvkul+VuWwkE2YitIPDgeo3sn9zYrlt2cKR4k+RZIu+ofzwviBxpaPi+6KmemjoC5ImsKuo+LalLi0tvP6FebJmYDCxk68xXp9YmFmG5HnNMR2K2Mavf2wB5ODVborFg/RywG10Moys1lfUr3jMV3CK5SiRZbXuv6c+/hfIz4dWfbSE6vVwnEu9PEtHNUVbZELXtl6Qjt71rEKNoArdrxh+ocq68IOMXJgJdSFSm8GN+gqJE5zn9wkEjQ== 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)(396003)(39860400002)(376002)(346002)(136003)(230922051799003)(186009)(1800799009)(82310400011)(64100799003)(451199024)(46966006)(36840700001)(40470700004)(40480700001)(36860700001)(55016003)(70586007)(40460700003)(336012)(26005)(83380400001)(110136005)(30864003)(2906002)(70206006)(8676002)(7696005)(52536014)(5660300002)(8936002)(316002)(41300700001)(53546011)(6506007)(9686003)(33656002)(478600001)(86362001)(47076005)(81166007)(356005)(82740400003)(84970400001);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Oct 2023 15:13:06.1825 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ca7cb8e0-61e4-410d-f435-08dbc4ec6964 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: AM7EUR03FT035.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB5875 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,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: SGkgUm9iaW4sDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUm9iaW4g RGFwcCA8cmRhcHAuZ2NjQGdtYWlsLmNvbT4NCj4gU2VudDogV2VkbmVzZGF5LCBPY3RvYmVyIDQs IDIwMjMgODo1NCBBTQ0KPiBUbzogVGFtYXIgQ2hyaXN0aW5hIDxUYW1hci5DaHJpc3RpbmFAYXJt LmNvbT47IGdjYy1wYXRjaGVzIDxnY2MtDQo+IHBhdGNoZXNAZ2NjLmdudS5vcmc+OyBSaWNoYXJk IEJpZW5lciA8cmd1ZW50aGVyQHN1c2UuZGU+DQo+IENjOiByZGFwcC5nY2NAZ21haWwuY29tDQo+ IFN1YmplY3Q6IFJlOiBbUEFUQ0hdIGlmY3Z0L3ZlY3Q6IEVtaXQgQ09ORF9BREQgZm9yIGNvbmRp dGlvbmFsIHNjYWxhcg0KPiByZWR1Y3Rpb24uDQo+IA0KPiBIaSBUYW1hciwNCj4gDQo+ID4gSSBj YW4ndCBhcHByb3ZlIGJ1dCBob3BlIHlvdSBkb24ndCBtaW5kIHRoZSByZXZpZXcsDQo+IA0KPiBO b3QgYXQgYWxsLCBncmVhdGx5IGFwcHJlY2lhdGVkLg0KPiANCj4gSSBpbmNvcnBvcmF0ZWQgYWxs IHlvdXIgcmVtYXJrcyBhcGFydCBmcm9tIHRoaXM6DQo+IA0KPiA+IElzbid0IHZlY19vcG1hc2sg TlVMTCBmb3IgU0xQPyBZb3UgcHJvYmFibHkgbmVlZCB0byByZWFkIGl0IGZyb20NCj4gPiB2ZWNf ZGVmcyBmb3IgdGhlIENPTkRfRVhQUg0KPiANCj4gQWJvdmUgdGhhdCBJIGdjY19hc3NlcnQgKCFz bHBfbm9kZSkgZm9yIHRoZSBJRk5fQ09ORCBjYXNlLiAgSXQgZG9lc24ndCBzZWVtIHRvDQo+IGJl IGhpdCBkdXJpbmcgdGVzdHN1aXRlIHJ1bnMuICBJIGFsc28gZGlkbid0IG1hbmFnZSB0byBjcmVh dGUgYW4gZXhhbXBsZSB0aGF0DQo+IHdvdWxkIHRyaWdnZXIgaXQuICBXaGVuICJjb25kaXRpb25h bGl6aW5nIiBhbiBTTFAgZm9sZC1sZWZ0IHJlZHVjdGlvbiB3ZSBkb24ndA0KPiBzZWVtIHRvIHZl Y3Rvcml6ZSBmb3IgYSBkaWZmZXJlbnQgcmVhc29uLg0KPiBHcmFudGVkLCBJIGRpZG4ndCBsb29r IHZlcnkgY2xvc2VseSBhdCB0aGF0IHJlYXNvbiA6KQ0KDQpZZWFoIGl0IGxvb2tzIGxpa2UgaXQn cyBmYWlsaW5nIGJlY2F1c2UgaXQgY2FuJ3QgaGFuZGxlIHRoZSBQSEkgbm9kZSByZWR1Y3Rpb24g Zm9yDQp0aGUgY29uZGl0aW9uLg0KDQpTbyB0aGF0J3MgZmluZSwgSSB0aGluayB0aGVuIHdlIHNo b3VsZCBleGl0IGZyb20gdmVjdG9yaXplX2ZvbGRfbGVmdF9yZWR1Y3Rpb24NCmluIHRoYXQgY2Fz ZSBzbyB3ZSBhdm9pZCB0aGUgc2VnZmF1bHQgd2hlbiB3ZSBzdGFydCBmb3JjaW5nIHRoaW5ncyB0 aHJvdWdoDQpTTFAgb25seSBzb29uIGFuZCBhZGQgc2luZ2xlIGxhbmUgU0xQIHN1cHBvcnQuDQoN ClNvIGluIHRoZQ0KDQogIGlmIChzbHBfbm9kZSkNCiAgICB7DQoNCkFkZCBzb21ldGhpbmcgbGlr ZToNCg0KSWYgKGlzX2NvbmRfb3ApDQogICAgew0KICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgp KQ0KCWR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRp b24sDQoJCQkgImxlZnQgZm9sZCByZWR1Y3Rpb24gb24gU0xQIG5vdCBzdXBwb3J0ZWQuXG4iKTsN CiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCj4gDQo+IEJvb3RzdHJhcCBhbmQgdGVzdHN1 aXRlIGFyZSBjdXJyZW50bHkgcnVubmluZyB3aXRoIHRoZSBhdHRhY2hlZCB2MiBvbiB4ODYsDQo+ IGFhcmNoNjQgYW5kIHBvd2VycGMuDQo+IA0KPiBCZXNpZGVzLCB3aGVuIHRoaW5raW5nIGFib3V0 IHdoaWNoIENPTkRfT1BzIHdlIGV4cGVjdCBJIHRyaWVkIHRvIGxvb3NlbiB0aGUNCj4gcmVzdHJp Y3Rpb25zIGluIGlmLWNvbnYgYnkgYWxsb3dpbmcgTUFYX0VYUFIgYW5kIE1JTl9FWFBSLiAgVGhl IGVtaXR0ZWQNCj4gY29kZSBvbiByaXNjdiBsb29rcyBjb3JyZWN0IGJ1dCBJIGhpdCBhIGJvb3Rz dHJhcCBJQ0Ugb24geDg2IHNvIG9taXR0ZWQgaXQgZm9yDQo+IG5vdy4NCj4gDQo+IFJlZ2FyZHMN Cj4gIFJvYmluDQo+IA0KPiANCj4gU3ViamVjdDogW1BBVENIIHYyXSBpZmN2dC92ZWN0OiBFbWl0 IENPTkRfQUREIGZvciBjb25kaXRpb25hbCBzY2FsYXINCj4gcmVkdWN0aW9uLg0KPiANCj4gQXMg ZGVzY3JpYmVkIGluIFBSMTExNDAxIHdlIGN1cnJlbnRseSBlbWl0IGEgQ09ORCBhbmQgYSBQTFVT IGV4cHJlc3Npb24NCj4gZm9yIGNvbmRpdGlvbmFsIHJlZHVjdGlvbnMuICBUaGlzIG1ha2VzIGl0 IGRpZmZpY3VsdCB0byBjb21iaW5lIGJvdGggaW50byBhDQo+IG1hc2tlZCByZWR1Y3Rpb24gc3Rh dGVtZW50IGxhdGVyLg0KPiBUaGlzIHBhdGNoIGltcHJvdmVzIHRoYXQgYnkgZGlyZWN0bHkgZW1p dHRpbmcgYSBDT05EX0FERCBkdXJpbmcgaWZjdnQgYW5kDQo+IGFkanVzdGluZyBzb21lIHZlY3Rv cml6ZXIgY29kZSB0byBoYW5kbGUgaXQuDQo+IA0KPiBJdCBhbHNvIG1ha2VzIG5ldXRyYWxfb3Bf Zm9yX3JlZHVjdGlvbiByZXR1cm4gLTAgaWYgSE9OT1JfU0lHTkVEX1pFUk9TIGlzDQo+IHRydWUu DQo+IA0KPiBnY2MvQ2hhbmdlTG9nOg0KPiANCj4gCVBSIG1pZGRsZS1lbmQvMTExNDAxDQo+IAkq IGludGVybmFsLWZuLmNjIChjb25kX2ZuX3ApOiBOZXcgZnVuY3Rpb24uDQo+IAkqIGludGVybmFs LWZuLmggKGNvbmRfZm5fcCk6IERlZmluZS4NCj4gCSogdHJlZS1pZi1jb252LmNjIChjb252ZXJ0 X3NjYWxhcl9jb25kX3JlZHVjdGlvbik6IEVtaXQgQ09ORF9BREQNCj4gCWlmIHN1cHBvcnRlZC4N Cj4gCShwcmVkaWNhdGVfc2NhbGFyX3BoaSk6IEFkZCB3aGl0ZXNwYWNlLg0KPiAJKiB0cmVlLXZl Y3QtbG9vcC5jYyAoZm9sZF9sZWZ0X3JlZHVjdGlvbl9mbik6IEFkZCBJRk5fQ09ORF9BREQuDQo+ IAkobmV1dHJhbF9vcF9mb3JfcmVkdWN0aW9uKTogUmV0dXJuIC0wIGZvciBQTFVTLg0KPiAJKHZl Y3RfaXNfc2ltcGxlX3JlZHVjdGlvbik6IERvbid0IGNvdW50IGVsc2Ugb3BlcmFuZCBpbg0KPiAJ Q09ORF9BREQuDQo+IAkodmVjdG9yaXplX2ZvbGRfbGVmdF9yZWR1Y3Rpb24pOiBBZGQgQ09ORF9B REQgaGFuZGxpbmcuDQo+IAkodmVjdG9yaXphYmxlX3JlZHVjdGlvbik6IERvbid0IGNvdW50IGVs c2Ugb3BlcmFuZCBpbiBDT05EX0FERC4NCj4gCSh2ZWN0X3RyYW5zZm9ybV9yZWR1Y3Rpb24pOiBB ZGQgQ09ORF9BREQgaGFuZGxpbmcuDQo+IAkqIHRyZWUtdmVjdG9yaXplci5oIChuZXV0cmFsX29w X2Zvcl9yZWR1Y3Rpb24pOiBBZGQgZGVmYXVsdA0KPiAJcGFyYW1ldGVyLg0KPiANCj4gZ2NjL3Rl c3RzdWl0ZS9DaGFuZ2VMb2c6DQo+IA0KPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWNvbmQtcmVkdWMt aW4tb3JkZXItMi1zaWduZWQtemVyby5jOiBOZXcgdGVzdC4NCj4gCSogZ2NjLnRhcmdldC9yaXNj di9ydnYvYXV0b3ZlYy9jb25kL3ByMTExNDAxLmM6IE5ldyB0ZXN0Lg0KPiAtLS0NCj4gIGdjYy9p bnRlcm5hbC1mbi5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArKysNCj4gIGdj Yy9pbnRlcm5hbC1mbi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+ICAu Li4vdmVjdC1jb25kLXJlZHVjLWluLW9yZGVyLTItc2lnbmVkLXplcm8uYyAgfCAxNDEgKysrKysr KysrKysrKysrKysrDQo+ICAuLi4vcmlzY3YvcnZ2L2F1dG92ZWMvY29uZC9wcjExMTQwMS5jICAg ICAgICAgfCAxMzkgKysrKysrKysrKysrKysrKysNCj4gIGdjYy90cmVlLWlmLWNvbnYuY2MgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICA2MyArKysrKystLQ0KPiAgZ2NjL3RyZWUtdmVjdC1s b29wLmNjICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTI5ICsrKysrKysrKysrKy0tLS0NCj4g IGdjYy90cmVlLXZlY3Rvcml6ZXIuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQ0K PiAgNyBmaWxlcyBjaGFuZ2VkLCA0NTAgaW5zZXJ0aW9ucygrKSwgNDIgZGVsZXRpb25zKC0pICBj cmVhdGUgbW9kZSAxMDA2NDQNCj4gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWNvbmQt cmVkdWMtaW4tb3JkZXItMi1zaWduZWQtemVyby5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4g Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3J2di9hdXRvdmVjL2NvbmQvcHIxMTE0MDEu Yw0KPiANCj4gZGlmZiAtLWdpdCBhL2djYy9pbnRlcm5hbC1mbi5jYyBiL2djYy9pbnRlcm5hbC1m bi5jYyBpbmRleA0KPiA2MWQ1YTllNDc3Mi4uOWIzOGRjMGNlZjQgMTAwNjQ0DQo+IC0tLSBhL2dj Yy9pbnRlcm5hbC1mbi5jYw0KPiArKysgYi9nY2MvaW50ZXJuYWwtZm4uY2MNCj4gQEAgLTQyNDUs NiArNDI0NSwyMyBAQCBmaXJzdF9jb21tdXRhdGl2ZV9hcmd1bWVudCAoaW50ZXJuYWxfZm4gZm4p DQo+ICAgICAgfQ0KPiAgfQ0KPiANCj4gKy8qIFJldHVybiB0cnVlIGlmIHRoaXMgQ09ERSBkZXNj cmliZXMgYSBjb25kaXRpb25hbCAobWFza2VkKQ0KPiAraW50ZXJuYWxfZm4uICAqLw0KPiArDQo+ ICtib29sDQo+ICtjb25kX2ZuX3AgKGNvZGVfaGVscGVyIGNvZGUpDQo+ICt7DQo+ICsgIGlmICgh Y29kZS5pc19mbl9jb2RlICgpKQ0KPiArICAgIHJldHVybiBmYWxzZTsNCj4gKw0KPiArICBpZiAo IWludGVybmFsX2ZuX3AgKChjb21iaW5lZF9mbikgY29kZSkpDQo+ICsgICAgcmV0dXJuIGZhbHNl Ow0KPiArDQo+ICsgIGludGVybmFsX2ZuIGZuID0gYXNfaW50ZXJuYWxfZm4gKChjb21iaW5lZF9m bikgY29kZSk7DQo+ICsNCj4gKyAgcmV0dXJuIGNvbmRpdGlvbmFsX2ludGVybmFsX2ZuX2NvZGUg KGZuKSAhPSBFUlJPUl9NQVJLOyB9DQo+ICsNCj4gKw0KPiAgLyogUmV0dXJuIHRydWUgaWYgdGhp cyBDT0RFIGRlc2NyaWJlcyBhbiBpbnRlcm5hbF9mbiB0aGF0IHJldHVybnMgYSB2ZWN0b3Igd2l0 aA0KPiAgICAgZWxlbWVudHMgdHdpY2UgYXMgd2lkZSBhcyB0aGUgZWxlbWVudCBzaXplIG9mIHRo ZSBpbnB1dCB2ZWN0b3JzLiAgKi8NCj4gDQoNClRoZSBvbmx5IGNvbW1lbnQgSSBoYXZlIGlzIHdo ZXRoZXIgeW91IGFjdHVhbGx5IG5lZWQgdGhpcyBoZWxwZXIgZnVuY3Rpb24/DQpJdCBsb29rcyBs aWtlIGFsbCB0aGUgdXNlcyBvZiBpdCBhcmUgaW4gY2FzZXMgeW91IGhhdmUsIG9yIHdpbGwgY2Fs bCBjb25kaXRpb25hbF9pbnRlcm5hbF9mbl9jb2RlDQpkaXJlY3RseS4NCg0KZS5nLiBpbiB2ZWN0 X3RyYW5zZm9ybV9yZWR1Y3Rpb24geW91IGNhbiByZXBsYWNlIGl0IGJ5IA0KDQpib29sIGNvbmRf Zm5fcCA9IGNvbmRfZm4gIT0gRVJST1JfTUFSSzsNCg0KYW5kIGluIA0KDQogIGlmIChjb25kX2Zu X3AgKG9yaWdfY29kZSkpDQogICAgICBvcmlnX2NvZGUgPSBjb25kaXRpb25hbF9pbnRlcm5hbF9m bl9jb2RlIChpbnRlcm5hbF9mbihvcmlnX2NvZGUpKTsNCg0KanVzdCANCg0KaW50ZXJuYWxfZm4g bmV3X2ZuID0gY29uZGl0aW9uYWxfaW50ZXJuYWxfZm5fY29kZSAoaW50ZXJuYWxfZm4ob3JpZ19j b2RlKSk7DQppZiAobmV3X2ZuICE9IEVSUk9SX01BUkspDQogIG9yaWdfY29kZSA9IG5ld19mbjsN Cg0Kd2hpY2ggd291bGQgc2F2ZSB0aGUgcmVwZWF0ZWQgdGVzdGluZyBvZiB0aGUgY29uZGl0aW9u Lg0KDQpQYXRjaCBsb29rcyBnb29kIHRvIG1lIHdpdGggdGhvc2UgdHdvIGNoYW5nZXMsIGJ1dCBj YW4ndCBhcHByb3ZlIPCfmIoNCg0KVGhhbmtzIGZvciB3b3JraW5nIG9uIHRoaXMhLA0KVGFtYXIN Cg0KPiBkaWZmIC0tZ2l0IGEvZ2NjL2ludGVybmFsLWZuLmggYi9nY2MvaW50ZXJuYWwtZm4uaCBp bmRleA0KPiA5OWRlMTNhMDE5OS4uZjFjYzlkYjI5YzAgMTAwNjQ0DQo+IC0tLSBhL2djYy9pbnRl cm5hbC1mbi5oDQo+ICsrKyBiL2djYy9pbnRlcm5hbC1mbi5oDQo+IEBAIC0yMTksNiArMjE5LDcg QEAgZXh0ZXJuIGJvb2wgY29tbXV0YXRpdmVfdGVybmFyeV9mbl9wIChpbnRlcm5hbF9mbik7DQo+ IGV4dGVybiBpbnQgZmlyc3RfY29tbXV0YXRpdmVfYXJndW1lbnQgKGludGVybmFsX2ZuKTsgIGV4 dGVybiBib29sDQo+IGFzc29jaWF0aXZlX2JpbmFyeV9mbl9wIChpbnRlcm5hbF9mbik7ICBleHRl cm4gYm9vbCB3aWRlbmluZ19mbl9wDQo+IChjb2RlX2hlbHBlcik7DQo+ICtleHRlcm4gYm9vbCBj b25kX2ZuX3AgKGNvZGVfaGVscGVyIGNvZGUpOw0KPiANCj4gIGV4dGVybiBib29sIHNldF9lZG9t X3N1cHBvcnRlZF9wICh2b2lkKTsNCj4gDQo+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtY29uZC1yZWR1Yy1pbi1vcmRlci0yLXNpZ25lZC0NCj4gemVyby5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWNvbmQtcmVkdWMtaW4tb3JkZXItMi1zaWdu ZWQtemVyby5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwLi43 YjQ2ZTdkOGEyYQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1jb25kLXJlZHVjLWluLW9yZGVyLTItc2lnbmVkLXplcm8uYw0KPiBAQCAtMCww ICsxLDE0MSBAQA0KPiArLyogTWFrZSBzdXJlIGEgLTAgc3RheXMgLTAgd2hlbiB3ZSBwZXJmb3Jt IGEgY29uZGl0aW9uYWwgcmVkdWN0aW9uLiAgKi8NCj4gKy8qIHsgZGctZG8gcnVuIH0gKi8NCj4g Ky8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZG91YmxlIH0gKi8NCj4gKy8q IHsgZGctYWRkLW9wdGlvbnMgaWVlZSB9ICovDQo+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9u cyAiLXN0ZD1nbnU5OSAtZm5vLWZhc3QtbWF0aCIgfSAqLw0KPiArDQo+ICsjaW5jbHVkZSAidHJl ZS12ZWN0LmgiDQo+ICsNCj4gKyNpbmNsdWRlIDxtYXRoLmg+DQo+ICsNCj4gKyNkZWZpbmUgTiAo VkVDVE9SX0JJVFMgKiAxNykNCj4gKw0KPiArZG91YmxlIF9fYXR0cmlidXRlX18gKChub2lubGlu ZSwgbm9jbG9uZSkpIHJlZHVjX3BsdXNfZG91YmxlIChkb3VibGUNCj4gKypyZXN0cmljdCBhLCBk b3VibGUgaW5pdCwgaW50ICpjb25kLCBpbnQgbikgew0KPiArICBkb3VibGUgcmVzID0gaW5pdDsN Cj4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspDQo+ICsgICAgaWYgKGNvbmRbaV0pDQo+ ICsgICAgICByZXMgKz0gYVtpXTsNCj4gKyAgcmV0dXJuIHJlczsNCj4gK30NCj4gKw0KPiArZG91 YmxlIF9fYXR0cmlidXRlX18gKChub2lubGluZSwgbm9jbG9uZSwgb3B0aW1pemUgKCIwIikpKQ0K PiArcmVkdWNfcGx1c19kb3VibGVfcmVmIChkb3VibGUgKnJlc3RyaWN0IGEsIGRvdWJsZSBpbml0 LCBpbnQgKmNvbmQsIGludA0KPiArbikgew0KPiArICBkb3VibGUgcmVzID0gaW5pdDsNCj4gKyAg Zm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspDQo+ICsgICAgaWYgKGNvbmRbaV0pDQo+ICsgICAg ICByZXMgKz0gYVtpXTsNCj4gKyAgcmV0dXJuIHJlczsNCj4gK30NCj4gKw0KPiArZG91YmxlIF9f YXR0cmlidXRlX18gKChub2lubGluZSwgbm9jbG9uZSkpIHJlZHVjX21pbnVzX2RvdWJsZSAoZG91 YmxlDQo+ICsqcmVzdHJpY3QgYSwgZG91YmxlIGluaXQsIGludCAqY29uZCwgaW50IG4pIHsNCj4g KyAgZG91YmxlIHJlcyA9IGluaXQ7DQo+ICsgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQ0K PiArICAgIGlmIChjb25kW2ldKQ0KPiArICAgICAgcmVzIC09IGFbaV07DQo+ICsgIHJldHVybiBy ZXM7DQo+ICt9DQo+ICsNCj4gK2RvdWJsZSBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUsIG5vY2xv bmUsIG9wdGltaXplICgiMCIpKSkNCj4gK3JlZHVjX21pbnVzX2RvdWJsZV9yZWYgKGRvdWJsZSAq cmVzdHJpY3QgYSwgZG91YmxlIGluaXQsIGludCAqY29uZCwgaW50DQo+ICtuKSB7DQo+ICsgIGRv dWJsZSByZXMgPSBpbml0Ow0KPiArICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykNCj4gKyAg ICBpZiAoY29uZFtpXSkNCj4gKyAgICAgIHJlcyAtPSBhW2ldOw0KPiArICByZXR1cm4gcmVzOw0K PiArfQ0KPiArDQo+ICtpbnQgX19hdHRyaWJ1dGVfXyAoKG9wdGltaXplICgxKSkpDQo+ICttYWlu ICgpDQo+ICt7DQo+ICsgIGludCBuID0gMTk7DQo+ICsgIGRvdWJsZSBhW05dOw0KPiArICBpbnQg Y29uZDFbTl0sIGNvbmQyW05dOw0KPiArDQo+ICsgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsr KQ0KPiArICAgIHsNCj4gKyAgICAgIGFbaV0gPSAoaSAqIDAuMSkgKiAoaSAmIDEgPyAxIDogLTEp Ow0KPiArICAgICAgY29uZDFbaV0gPSAwOw0KPiArICAgICAgY29uZDJbaV0gPSBpICYgNCA/IDEg OiAwOw0KPiArICAgICAgYXNtIHZvbGF0aWxlICgiIiA6OjogIm1lbW9yeSIpOw0KPiArICAgIH0N Cj4gKw0KPiArICBkb3VibGUgcmVzMSA9IHJlZHVjX3BsdXNfZG91YmxlIChhLCAtMC4wLCBjb25k MSwgbik7ICBkb3VibGUgcmVmMSA9DQo+ICsgcmVkdWNfcGx1c19kb3VibGVfcmVmIChhLCAtMC4w LCBjb25kMSwgbik7ICBkb3VibGUgcmVzMiA9DQo+ICsgcmVkdWNfbWludXNfZG91YmxlIChhLCAt MC4wLCBjb25kMSwgbik7ICBkb3VibGUgcmVmMiA9DQo+ICsgcmVkdWNfbWludXNfZG91YmxlX3Jl ZiAoYSwgLTAuMCwgY29uZDEsIG4pOyAgZG91YmxlIHJlczMgPQ0KPiArIHJlZHVjX3BsdXNfZG91 YmxlIChhLCAtMC4wLCBjb25kMSwgbik7ICBkb3VibGUgcmVmMyA9DQo+ICsgcmVkdWNfcGx1c19k b3VibGVfcmVmIChhLCAtMC4wLCBjb25kMSwgbik7ICBkb3VibGUgcmVzNCA9DQo+ICsgcmVkdWNf bWludXNfZG91YmxlIChhLCAtMC4wLCBjb25kMSwgbik7ICBkb3VibGUgcmVmNCA9DQo+ICsgcmVk dWNfbWludXNfZG91YmxlX3JlZiAoYSwgLTAuMCwgY29uZDEsIG4pOw0KPiArDQo+ICsgIGlmIChy ZXMxICE9IHJlZjEgfHwgc2lnbmJpdCAocmVzMSkgIT0gc2lnbmJpdCAocmVmMSkpDQo+ICsgICAg X19idWlsdGluX2Fib3J0ICgpOw0KPiArICBpZiAocmVzMiAhPSByZWYyIHx8IHNpZ25iaXQgKHJl czIpICE9IHNpZ25iaXQgKHJlZjIpKQ0KPiArICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsNCj4gKyAg aWYgKHJlczMgIT0gcmVmMyB8fCBzaWduYml0IChyZXMzKSAhPSBzaWduYml0IChyZWYzKSkNCj4g KyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7DQo+ICsgIGlmIChyZXM0ICE9IHJlZjQgfHwgc2lnbmJp dCAocmVzNCkgIT0gc2lnbmJpdCAocmVmNCkpDQo+ICsgICAgX19idWlsdGluX2Fib3J0ICgpOw0K PiArDQo+ICsgIHJlczEgPSByZWR1Y19wbHVzX2RvdWJsZSAoYSwgMC4wLCBjb25kMSwgbik7DQo+ ICsgIHJlZjEgPSByZWR1Y19wbHVzX2RvdWJsZV9yZWYgKGEsIDAuMCwgY29uZDEsIG4pOw0KPiAr ICByZXMyID0gcmVkdWNfbWludXNfZG91YmxlIChhLCAwLjAsIGNvbmQxLCBuKTsNCj4gKyAgcmVm MiA9IHJlZHVjX21pbnVzX2RvdWJsZV9yZWYgKGEsIDAuMCwgY29uZDEsIG4pOw0KPiArICByZXMz ID0gcmVkdWNfcGx1c19kb3VibGUgKGEsIDAuMCwgY29uZDEsIG4pOw0KPiArICByZWYzID0gcmVk dWNfcGx1c19kb3VibGVfcmVmIChhLCAwLjAsIGNvbmQxLCBuKTsNCj4gKyAgcmVzNCA9IHJlZHVj X21pbnVzX2RvdWJsZSAoYSwgMC4wLCBjb25kMSwgbik7DQo+ICsgIHJlZjQgPSByZWR1Y19taW51 c19kb3VibGVfcmVmIChhLCAwLjAsIGNvbmQxLCBuKTsNCj4gKw0KPiArICBpZiAocmVzMSAhPSBy ZWYxIHx8IHNpZ25iaXQgKHJlczEpICE9IHNpZ25iaXQgKHJlZjEpKQ0KPiArICAgIF9fYnVpbHRp bl9hYm9ydCAoKTsNCj4gKyAgaWYgKHJlczIgIT0gcmVmMiB8fCBzaWduYml0IChyZXMyKSAhPSBz aWduYml0IChyZWYyKSkNCj4gKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7DQo+ICsgIGlmIChyZXMz ICE9IHJlZjMgfHwgc2lnbmJpdCAocmVzMykgIT0gc2lnbmJpdCAocmVmMykpDQo+ICsgICAgX19i dWlsdGluX2Fib3J0ICgpOw0KPiArICBpZiAocmVzNCAhPSByZWY0IHx8IHNpZ25iaXQgKHJlczQp ICE9IHNpZ25iaXQgKHJlZjQpKQ0KPiArICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsNCj4gKw0KPiAr ICByZXMxID0gcmVkdWNfcGx1c19kb3VibGUgKGEsIC0wLjAsIGNvbmQyLCBuKTsNCj4gKyAgcmVm MSA9IHJlZHVjX3BsdXNfZG91YmxlX3JlZiAoYSwgLTAuMCwgY29uZDIsIG4pOw0KPiArICByZXMy ID0gcmVkdWNfbWludXNfZG91YmxlIChhLCAtMC4wLCBjb25kMiwgbik7DQo+ICsgIHJlZjIgPSBy ZWR1Y19taW51c19kb3VibGVfcmVmIChhLCAtMC4wLCBjb25kMiwgbik7DQo+ICsgIHJlczMgPSBy ZWR1Y19wbHVzX2RvdWJsZSAoYSwgLTAuMCwgY29uZDIsIG4pOw0KPiArICByZWYzID0gcmVkdWNf cGx1c19kb3VibGVfcmVmIChhLCAtMC4wLCBjb25kMiwgbik7DQo+ICsgIHJlczQgPSByZWR1Y19t aW51c19kb3VibGUgKGEsIC0wLjAsIGNvbmQyLCBuKTsNCj4gKyAgcmVmNCA9IHJlZHVjX21pbnVz X2RvdWJsZV9yZWYgKGEsIC0wLjAsIGNvbmQyLCBuKTsNCj4gKw0KPiArICBpZiAocmVzMSAhPSBy ZWYxIHx8IHNpZ25iaXQgKHJlczEpICE9IHNpZ25iaXQgKHJlZjEpKQ0KPiArICAgIF9fYnVpbHRp bl9hYm9ydCAoKTsNCj4gKyAgaWYgKHJlczIgIT0gcmVmMiB8fCBzaWduYml0IChyZXMyKSAhPSBz aWduYml0IChyZWYyKSkNCj4gKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7DQo+ICsgIGlmIChyZXMz ICE9IHJlZjMgfHwgc2lnbmJpdCAocmVzMykgIT0gc2lnbmJpdCAocmVmMykpDQo+ICsgICAgX19i dWlsdGluX2Fib3J0ICgpOw0KPiArICBpZiAocmVzNCAhPSByZWY0IHx8IHNpZ25iaXQgKHJlczQp ICE9IHNpZ25iaXQgKHJlZjQpKQ0KPiArICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsNCj4gKw0KPiAr ICByZXMxID0gcmVkdWNfcGx1c19kb3VibGUgKGEsIDAuMCwgY29uZDIsIG4pOw0KPiArICByZWYx ID0gcmVkdWNfcGx1c19kb3VibGVfcmVmIChhLCAwLjAsIGNvbmQyLCBuKTsNCj4gKyAgcmVzMiA9 IHJlZHVjX21pbnVzX2RvdWJsZSAoYSwgMC4wLCBjb25kMiwgbik7DQo+ICsgIHJlZjIgPSByZWR1 Y19taW51c19kb3VibGVfcmVmIChhLCAwLjAsIGNvbmQyLCBuKTsNCj4gKyAgcmVzMyA9IHJlZHVj X3BsdXNfZG91YmxlIChhLCAwLjAsIGNvbmQyLCBuKTsNCj4gKyAgcmVmMyA9IHJlZHVjX3BsdXNf ZG91YmxlX3JlZiAoYSwgMC4wLCBjb25kMiwgbik7DQo+ICsgIHJlczQgPSByZWR1Y19taW51c19k b3VibGUgKGEsIDAuMCwgY29uZDIsIG4pOw0KPiArICByZWY0ID0gcmVkdWNfbWludXNfZG91Ymxl X3JlZiAoYSwgMC4wLCBjb25kMiwgbik7DQo+ICsNCj4gKyAgaWYgKHJlczEgIT0gcmVmMSB8fCBz aWduYml0IChyZXMxKSAhPSBzaWduYml0IChyZWYxKSkNCj4gKyAgICBfX2J1aWx0aW5fYWJvcnQg KCk7DQo+ICsgIGlmIChyZXMyICE9IHJlZjIgfHwgc2lnbmJpdCAocmVzMikgIT0gc2lnbmJpdCAo cmVmMikpDQo+ICsgICAgX19idWlsdGluX2Fib3J0ICgpOw0KPiArICBpZiAocmVzMyAhPSByZWYz IHx8IHNpZ25iaXQgKHJlczMpICE9IHNpZ25iaXQgKHJlZjMpKQ0KPiArICAgIF9fYnVpbHRpbl9h Ym9ydCAoKTsNCj4gKyAgaWYgKHJlczQgIT0gcmVmNCB8fCBzaWduYml0IChyZXM0KSAhPSBzaWdu Yml0IChyZWY0KSkNCj4gKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7DQo+ICsNCj4gKyAgcmV0dXJu IDA7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3Yv cnZ2L2F1dG92ZWMvY29uZC9wcjExMTQwMS5jDQo+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L3Jpc2N2L3J2di9hdXRvdmVjL2NvbmQvcHIxMTE0MDEuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleCAwMDAwMDAwMDAwMC4uOGYxY2IwZDY4ZGUNCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3YvcnZ2L2F1dG92ZWMvY29uZC9wcjEx MTQwMS5jDQo+IEBAIC0wLDAgKzEsMTM5IEBADQo+ICsvKiB7IGRnLWRvIHJ1biB7IHRhcmdldCB7 IHJpc2N2X3YgfSB9IH0gKi8NCj4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItbWFyY2g9 cnY2NGdjdiAtbWFiaT1scDY0ZCAtLXBhcmFtDQo+ICtyaXNjdi1hdXRvdmVjLXByZWZlcmVuY2U9 c2NhbGFibGUgLWZkdW1wLXRyZWUtdmVjdC1kZXRhaWxzIiB9ICovDQo+ICsNCj4gK2RvdWJsZQ0K PiArX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkNCj4gK2ZvbzIgKGRvdWJsZSAqX19yZXN0cmljdCBh LCBkb3VibGUgaW5pdCwgaW50ICpfX3Jlc3RyaWN0IGNvbmQsIGludCBuKSB7DQo+ICsgIGZvciAo aW50IGkgPSAwOyBpIDwgbjsgaSsrKQ0KPiArICAgIGlmIChjb25kW2ldKQ0KPiArICAgICAgaW5p dCArPSBhW2ldOw0KPiArICByZXR1cm4gaW5pdDsNCj4gK30NCj4gKw0KPiArZG91YmxlDQo+ICtf X2F0dHJpYnV0ZV9fICgobm9pcGEpKQ0KPiArZm9vMyAoZG91YmxlICpfX3Jlc3RyaWN0IGEsIGRv dWJsZSBpbml0LCBpbnQgKl9fcmVzdHJpY3QgY29uZCwgaW50IG4pIHsNCj4gKyAgZm9yIChpbnQg aSA9IDA7IGkgPCBuOyBpKyspDQo+ICsgICAgaWYgKGNvbmRbaV0pDQo+ICsgICAgICBpbml0IC09 IGFbaV07DQo+ICsgIHJldHVybiBpbml0Ow0KPiArfQ0KPiArDQo+ICtkb3VibGUNCj4gK19fYXR0 cmlidXRlX18gKChub2lwYSkpDQo+ICtmb280IChkb3VibGUgKl9fcmVzdHJpY3QgYSwgZG91Ymxl IGluaXQsIGludCAqX19yZXN0cmljdCBjb25kLCBpbnQgbikgew0KPiArICBmb3IgKGludCBpID0g MDsgaSA8IG47IGkrKykNCj4gKyAgICBpZiAoY29uZFtpXSkNCj4gKyAgICAgIGluaXQgKj0gYVtp XTsNCj4gKyAgcmV0dXJuIGluaXQ7DQo+ICt9DQo+ICsNCj4gK2ludA0KPiArX19hdHRyaWJ1dGVf XyAoKG5vaXBhKSkNCj4gK2ZvbzUgKGludCAqX19yZXN0cmljdCBhLCBpbnQgaW5pdCwgaW50ICpf X3Jlc3RyaWN0IGNvbmQsIGludCBuKSB7DQo+ICsgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsr KQ0KPiArICAgIGlmIChjb25kW2ldKQ0KPiArICAgICAgaW5pdCAmPSBhW2ldOw0KPiArICByZXR1 cm4gaW5pdDsNCj4gK30NCj4gKw0KPiAraW50DQo+ICtfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQ0K PiArZm9vNiAoaW50ICpfX3Jlc3RyaWN0IGEsIGludCBpbml0LCBpbnQgKl9fcmVzdHJpY3QgY29u ZCwgaW50IG4pIHsNCj4gKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspDQo+ICsgICAgaWYg KGNvbmRbaV0pDQo+ICsgICAgICBpbml0IHw9IGFbaV07DQo+ICsgIHJldHVybiBpbml0Ow0KPiAr fQ0KPiArDQo+ICtpbnQNCj4gK19fYXR0cmlidXRlX18gKChub2lwYSkpDQo+ICtmb283IChpbnQg Kl9fcmVzdHJpY3QgYSwgaW50IGluaXQsIGludCAqX19yZXN0cmljdCBjb25kLCBpbnQgbikgew0K PiArICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykNCj4gKyAgICBpZiAoY29uZFtpXSkNCj4g KyAgICAgIGluaXQgXj0gYVtpXTsNCj4gKyAgcmV0dXJuIGluaXQ7DQo+ICt9DQo+ICsNCj4gKyNk ZWZpbmUgU1ogMTI1DQo+ICsNCj4gK2ludA0KPiArbWFpbiAoKQ0KPiArew0KPiArICBkb3VibGUg cmVzMSA9IDAsIHJlczIgPSAwLCByZXMzID0gMDsNCj4gKyAgZG91YmxlIGExW1NaXSwgYTJbU1pd LCBhM1tTWl07DQo+ICsgIGludCBjMVtTWl0sIGMyW1NaXSwgYzNbU1pdOw0KPiArDQo+ICsgIGlu dCBhNFtTWl0sIGE1W1NaXSwgYTZbU1pdLCBhN1tTWl0sIGE4W1NaXTsgIGludCByZXM0ID0gMCwg cmVzNSA9IDAsDQo+ICsgcmVzNiA9IDA7ICBpbnQgYzRbU1pdLCBjNVtTWl0sIGM2W1NaXTsNCj4g Kw0KPiArICBmb3IgKGludCBpID0gMDsgaSA8IFNaOyBpKyspDQo+ICsgICAgew0KPiArICAgICAg YTFbaV0gPSBpICogMyArIChpICYgNCkgLSAoaSAmIDcpOw0KPiArICAgICAgYTJbaV0gPSBpICog MyArIChpICYgNCkgLSAoaSAmIDcpOw0KPiArICAgICAgYTNbaV0gPSBpICogMC4wNSArIChpICYg NCkgLSAoaSAmIDcpOw0KPiArICAgICAgYTRbaV0gPSBpICogMyArIChpICYgNCkgLSAoaSAmIDcp Ow0KPiArICAgICAgYTVbaV0gPSBpICogMyArIChpICYgNCkgLSAoaSAmIDcpOw0KPiArICAgICAg YTZbaV0gPSBpICogMyArIChpICYgNCkgLSAoaSAmIDcpOw0KPiArICAgICAgYzFbaV0gPSBpICYg MTsNCj4gKyAgICAgIGMyW2ldID0gaSAmIDI7DQo+ICsgICAgICBjM1tpXSA9IGkgJiAzOw0KPiAr ICAgICAgYzRbaV0gPSBpICYgNDsNCj4gKyAgICAgIGM1W2ldID0gaSAmIDU7DQo+ICsgICAgICBj NltpXSA9IGkgJiA2Ow0KPiArICAgICAgX19hc21fXyB2b2xhdGlsZSAoIiIgOiA6IDogIm1lbW9y eSIpOw0KPiArICAgIH0NCj4gKw0KPiArICBkb3VibGUgaW5pdDEgPSAyLjcsIGluaXQyID0gOC4y LCBpbml0MyA9IDAuMTsgIGRvdWJsZSByZWYxID0gaW5pdDEsDQo+ICsgcmVmMiA9IGluaXQyLCBy ZWYzID0gaW5pdDM7DQo+ICsNCj4gKyAgaW50IGluaXQ0ID0gODcsIGluaXQ1ID0gMTEsIGluaXQ2 ID0gLTEyMzg5NDM0NCwgaW5pdDcgPSAtMiwgaW5pdDggPQ0KPiArIDg1NDg5MzsgIGludCByZWY0 ID0gaW5pdDQsIHJlZjUgPSBpbml0NSwgcmVmNiA9IGluaXQ2Ow0KPiArDQo+ICsjcHJhZ21hIEdD QyBub3ZlY3Rvcg0KPiArICBmb3IgKGludCBpID0gMDsgaSA8IFNaOyBpKyspDQo+ICsgICAgew0K PiArICAgICAgaWYgKGMxW2ldKQ0KPiArICAgICAgICByZWYxICs9IGExW2ldOw0KPiArICAgICAg aWYgKGMyW2ldKQ0KPiArICAgICAgICByZWYyIC09IGEyW2ldOw0KPiArICAgICAgaWYgKGMzW2ld KQ0KPiArICAgICAgICByZWYzICo9IGEzW2ldOw0KPiArICAgICAgaWYgKGM0W2ldKQ0KPiArICAg ICAgICByZWY0ICY9IGE0W2ldOw0KPiArICAgICAgaWYgKGM1W2ldKQ0KPiArICAgICAgICByZWY1 IHw9IGE1W2ldOw0KPiArICAgICAgaWYgKGM2W2ldKQ0KPiArICAgICAgICByZWY2IF49IGE2W2ld Ow0KPiArICAgIH0NCj4gKw0KPiArICByZXMxID0gZm9vMiAoYTEsIGluaXQxLCBjMSwgU1opOw0K PiArICByZXMyID0gZm9vMyAoYTIsIGluaXQyLCBjMiwgU1opOw0KPiArICByZXMzID0gZm9vNCAo YTMsIGluaXQzLCBjMywgU1opOw0KPiArICByZXM0ID0gZm9vNSAoYTQsIGluaXQ0LCBjNCwgU1op Ow0KPiArICByZXM1ID0gZm9vNiAoYTUsIGluaXQ1LCBjNSwgU1opOw0KPiArICByZXM2ID0gZm9v NyAoYTYsIGluaXQ2LCBjNiwgU1opOw0KPiArDQo+ICsgIGlmIChyZXMxICE9IHJlZjEpDQo+ICsg ICAgX19idWlsdGluX2Fib3J0ICgpOw0KPiArICBpZiAocmVzMiAhPSByZWYyKQ0KPiArICAgIF9f YnVpbHRpbl9hYm9ydCAoKTsNCj4gKyAgaWYgKHJlczMgIT0gcmVmMykNCj4gKyAgICBfX2J1aWx0 aW5fYWJvcnQgKCk7DQo+ICsgIGlmIChyZXM0ICE9IHJlZjQpDQo+ICsgICAgX19idWlsdGluX2Fi b3J0ICgpOw0KPiArICBpZiAocmVzNSAhPSByZWY1KQ0KPiArICAgIF9fYnVpbHRpbl9hYm9ydCAo KTsNCj4gKyAgaWYgKHJlczYgIT0gcmVmNikNCj4gKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7DQo+ ICt9DQo+ICsNCj4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9y aXplZCAxIGxvb3AiIDUgInZlY3QiIH0gfQ0KPiArKi8NCj4gKy8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC1ub3QgIlZDT05EX01BU0siICJ2ZWN0IiB9IH0gKi8NCj4gZGlmZiAtLWdpdCBh L2djYy90cmVlLWlmLWNvbnYuY2MgYi9nY2MvdHJlZS1pZi1jb252LmNjIGluZGV4DQo+IGE4Yzkx NTkxM2FlLi5iMzM0MTczNzk0ZCAxMDA2NDQNCj4gLS0tIGEvZ2NjL3RyZWUtaWYtY29udi5jYw0K PiArKysgYi9nY2MvdHJlZS1pZi1jb252LmNjDQo+IEBAIC0xODUyLDEwICsxODUyLDEyIEBAIGNv bnZlcnRfc2NhbGFyX2NvbmRfcmVkdWN0aW9uIChnaW1wbGUgKnJlZHVjLA0KPiBnaW1wbGVfc3Rt dF9pdGVyYXRvciAqZ3NpLA0KPiAgICBnaW1wbGUgKm5ld19hc3NpZ247DQo+ICAgIHRyZWUgcmhz Ow0KPiAgICB0cmVlIHJoczEgPSBnaW1wbGVfYXNzaWduX3JoczEgKHJlZHVjKTsNCj4gKyAgdHJl ZSBsaHMgPSBnaW1wbGVfYXNzaWduX2xocyAocmVkdWMpOw0KPiAgICB0cmVlIHRtcCA9IG1ha2Vf dGVtcF9zc2FfbmFtZSAoVFJFRV9UWVBFIChyaHMxKSwgTlVMTCwgIl9pZmNfIik7DQo+ICAgIHRy ZWUgYzsNCj4gICAgZW51bSB0cmVlX2NvZGUgcmVkdWN0aW9uX29wICA9IGdpbXBsZV9hc3NpZ25f cmhzX2NvZGUgKHJlZHVjKTsNCj4gLSAgdHJlZSBvcF9ub2NoYW5nZSA9IG5ldXRyYWxfb3BfZm9y X3JlZHVjdGlvbiAoVFJFRV9UWVBFIChyaHMxKSwNCj4gcmVkdWN0aW9uX29wLCBOVUxMKTsNCj4g KyAgdHJlZSBvcF9ub2NoYW5nZSA9IG5ldXRyYWxfb3BfZm9yX3JlZHVjdGlvbiAoVFJFRV9UWVBF IChyaHMxKSwNCj4gcmVkdWN0aW9uX29wLA0KPiArCQkJCQkgICAgICAgTlVMTCwgZmFsc2UpOw0K PiAgICBnaW1wbGVfc2VxIHN0bXRzID0gTlVMTDsNCj4gDQo+ICAgIGlmIChkdW1wX2ZpbGUgJiYg KGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpIEBAIC0xODY0LDE5ICsxODY2LDUyDQo+IEBAIGNv bnZlcnRfc2NhbGFyX2NvbmRfcmVkdWN0aW9uIChnaW1wbGUgKnJlZHVjLCBnaW1wbGVfc3RtdF9p dGVyYXRvcg0KPiAqZ3NpLA0KPiAgICAgICAgcHJpbnRfZ2ltcGxlX3N0bXQgKGR1bXBfZmlsZSwg cmVkdWMsIDAsIFRERl9TTElNKTsNCj4gICAgICB9DQo+IA0KPiAtICAvKiBCdWlsZCBjb25kIGV4 cHJlc3Npb24gdXNpbmcgQ09ORCBhbmQgY29uc3RhbnQgb3BlcmFuZA0KPiAtICAgICBvZiByZWR1 Y3Rpb24gcmhzLiAgKi8NCj4gLSAgYyA9IGZvbGRfYnVpbGRfY29uZF9leHByIChUUkVFX1RZUEUg KHJoczEpLA0KPiAtCQkJICAgIHVuc2hhcmVfZXhwciAoY29uZCksDQo+IC0JCQkgICAgc3dhcCA/ IG9wX25vY2hhbmdlIDogb3AxLA0KPiAtCQkJICAgIHN3YXAgPyBvcDEgOiBvcF9ub2NoYW5nZSk7 DQo+ICsgIC8qIElmIHBvc3NpYmxlIHRyeSB0byBjcmVhdGUgYW4gSUZOX0NPTkRfQUREIGluc3Rl YWQgb2YgYSBDT05EX0VYUFIgYW5kDQo+ICsgICAgIGEgUExVU19FWFBSLiAgRG9uJ3QgZG8gdGhp cyBpZiB0aGUgcmVkdWN0aW9uIGRlZiBvcGVyYW5kIGl0c2VsZiBpcw0KPiArICAgICBhIHZlY3Rv cml6YWJsZSBjYWxsIGFzIHdlIGNhbiBjcmVhdGUgYSBDT05EIHZlcnNpb24gb2YgaXQNCj4gKyBk aXJlY3RseS4gICovICBpbnRlcm5hbF9mbiBpZm47ICBpZm4gPSBnZXRfY29uZGl0aW9uYWxfaW50 ZXJuYWxfZm4NCj4gKyAocmVkdWN0aW9uX29wKTsNCj4gDQo+IC0gIC8qIENyZWF0ZSBhc3NpZ25t ZW50IHN0bXQgYW5kIGluc2VydCBpdCBhdCBHU0kuICAqLw0KPiAtICBuZXdfYXNzaWduID0gZ2lt cGxlX2J1aWxkX2Fzc2lnbiAodG1wLCBjKTsNCj4gLSAgZ3NpX2luc2VydF9iZWZvcmUgKGdzaSwg bmV3X2Fzc2lnbiwgR1NJX1NBTUVfU1RNVCk7DQo+IC0gIC8qIEJ1aWxkIHJocyBmb3IgdW5jb25k aXRpb25hbCBpbmNyZW1lbnQvZGVjcmVtZW50L2xvZ2ljX29wZXJhdGlvbi4gICovDQo+IC0gIHJo cyA9IGdpbXBsZV9idWlsZCAoJnN0bXRzLCByZWR1Y3Rpb25fb3AsDQo+IC0JCSAgICAgIFRSRUVf VFlQRSAocmhzMSksIG9wMCwgdG1wKTsNCj4gKyAgYm9vbCB0cnlfY29uZF9vcCA9IHRydWU7DQo+ ICsgIGdpbXBsZSAqb3BzdG10Ow0KPiArICBpZiAoVFJFRV9DT0RFIChvcDEpID09IFNTQV9OQU1F DQo+ICsgICAgICAmJiAob3BzdG10ID0gU1NBX05BTUVfREVGX1NUTVQgKG9wMSkpDQo+ICsgICAg ICAmJiBpc19naW1wbGVfY2FsbCAob3BzdG10KSkNCj4gKyAgICB7DQo+ICsgICAgICBjb21iaW5l ZF9mbiBjZm4gPSBnaW1wbGVfY2FsbF9jb21iaW5lZF9mbiAob3BzdG10KTsNCj4gKyAgICAgIGlu dGVybmFsX2ZuIGlmbm9wOw0KPiArICAgICAgcmVkdWN0aW9uX2ZuX2Zvcl9zY2FsYXJfY29kZSAo Y2ZuLCAmaWZub3ApOw0KPiArICAgICAgaWYgKHZlY3Rvcml6ZWRfaW50ZXJuYWxfZm5fc3VwcG9y dGVkX3AgKGlmbm9wLCBUUkVFX1RZUEUNCj4gKwkJCQkJICAgICAgKGdpbXBsZV9jYWxsX2xocyAo b3BzdG10KSkpKQ0KPiArCXRyeV9jb25kX29wID0gZmFsc2U7DQo+ICsgICAgfQ0KPiArDQo+ICsg IGlmIChpZm4gIT0gSUZOX0xBU1QNCj4gKyAgICAgICYmIHZlY3Rvcml6ZWRfaW50ZXJuYWxfZm5f c3VwcG9ydGVkX3AgKGlmbiwgVFJFRV9UWVBFIChsaHMpKQ0KPiArICAgICAgJiYgdHJ5X2NvbmRf b3AgJiYgIXN3YXApDQo+ICsgICAgew0KPiArICAgICAgZ2NhbGwgKmNvbmRfY2FsbCA9IGdpbXBs ZV9idWlsZF9jYWxsX2ludGVybmFsIChpZm4sIDQsDQo+ICsJCQkJCQkgICAgIHVuc2hhcmVfZXhw ciAoY29uZCksDQo+ICsJCQkJCQkgICAgIG9wMCwgb3AxLCBvcDApOw0KPiArICAgICAgZ3NpX2lu c2VydF9iZWZvcmUgKGdzaSwgY29uZF9jYWxsLCBHU0lfU0FNRV9TVE1UKTsNCj4gKyAgICAgIGdp bXBsZV9jYWxsX3NldF9saHMgKGNvbmRfY2FsbCwgdG1wKTsNCj4gKyAgICAgIHJocyA9IHRtcDsN Cj4gKyAgICB9DQo+ICsgIGVsc2UNCj4gKyAgICB7DQo+ICsgICAgICAvKiBCdWlsZCBjb25kIGV4 cHJlc3Npb24gdXNpbmcgQ09ORCBhbmQgY29uc3RhbnQgb3BlcmFuZA0KPiArCSBvZiByZWR1Y3Rp b24gcmhzLiAgKi8NCj4gKyAgICAgIGMgPSBmb2xkX2J1aWxkX2NvbmRfZXhwciAoVFJFRV9UWVBF IChyaHMxKSwNCj4gKwkJCQl1bnNoYXJlX2V4cHIgKGNvbmQpLA0KPiArCQkJCXN3YXAgPyBvcF9u b2NoYW5nZSA6IG9wMSwNCj4gKwkJCQlzd2FwID8gb3AxIDogb3Bfbm9jaGFuZ2UpOw0KPiArICAg ICAgLyogQ3JlYXRlIGFzc2lnbm1lbnQgc3RtdCBhbmQgaW5zZXJ0IGl0IGF0IEdTSS4gICovDQo+ ICsgICAgICBuZXdfYXNzaWduID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodG1wLCBjKTsNCj4gKyAg ICAgIGdzaV9pbnNlcnRfYmVmb3JlIChnc2ksIG5ld19hc3NpZ24sIEdTSV9TQU1FX1NUTVQpOw0K PiArICAgICAgLyogQnVpbGQgcmhzIGZvciB1bmNvbmRpdGlvbmFsIGluY3JlbWVudC9kZWNyZW1l bnQvbG9naWNfb3BlcmF0aW9uLiAgKi8NCj4gKyAgICAgIHJocyA9IGdpbXBsZV9idWlsZCAoJnN0 bXRzLCByZWR1Y3Rpb25fb3AsDQo+ICsJCQkgIFRSRUVfVFlQRSAocmhzMSksIG9wMCwgdG1wKTsN Cj4gKyAgICB9DQo+IA0KPiAgICBpZiAoaGFzX25vcCkNCj4gICAgICB7DQo+IEBAIC0yMjQxLDcg KzIyNzYsNyBAQCBwcmVkaWNhdGVfc2NhbGFyX3BoaSAoZ3BoaSAqcGhpLA0KPiBnaW1wbGVfc3Rt dF9pdGVyYXRvciAqZ3NpKQ0KPiAgCXsNCj4gIAkgIC8qIENvbnZlcnQgcmVkdWN0aW9uIHN0bXQg aW50byB2ZWN0b3JpemFibGUgZm9ybS4gICovDQo+ICAJICByaHMgPSBjb252ZXJ0X3NjYWxhcl9j b25kX3JlZHVjdGlvbiAocmVkdWMsIGdzaSwgY29uZCwgb3AwLCBvcDEsDQo+IC0JCQkJCSAgICAg ICBzd2FwLGhhc19ub3AsIG5vcF9yZWR1Yyk7DQo+ICsJCQkJCSAgICAgICBzd2FwLCBoYXNfbm9w LCBub3BfcmVkdWMpOw0KPiAgCSAgcmVkdW5kYW50X3NzYV9uYW1lcy5zYWZlX3B1c2ggKHN0ZDo6 bWFrZV9wYWlyIChyZXMsIHJocykpOw0KPiAgCX0NCj4gICAgICAgIG5ld19zdG10ID0gZ2ltcGxl X2J1aWxkX2Fzc2lnbiAocmVzLCByaHMpOyBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC0NCj4g bG9vcC5jYyBiL2djYy90cmVlLXZlY3QtbG9vcC5jYyBpbmRleCAyM2M2ZTgyNTllNy4uZDM3MDc5 M2NmY2IgMTAwNjQ0DQo+IC0tLSBhL2djYy90cmVlLXZlY3QtbG9vcC5jYw0KPiArKysgYi9nY2Mv dHJlZS12ZWN0LWxvb3AuY2MNCj4gQEAgLTM2NzIsNyArMzY3Miw3IEBAIHZlY3RfYW5hbHl6ZV9s b29wIChjbGFzcyBsb29wICpsb29wLA0KPiB2ZWNfaW5mb19zaGFyZWQgKnNoYXJlZCkgIHN0YXRp YyBib29sICBmb2xkX2xlZnRfcmVkdWN0aW9uX2ZuIChjb2RlX2hlbHBlcg0KPiBjb2RlLCBpbnRl cm5hbF9mbiAqcmVkdWNfZm4pICB7DQo+IC0gIGlmIChjb2RlID09IFBMVVNfRVhQUikNCj4gKyAg aWYgKGNvZGUgPT0gUExVU19FWFBSIHx8IGNvZGUgPT0gTUlOVVNfRVhQUikNCj4gICAgICB7DQo+ ICAgICAgICAqcmVkdWNfZm4gPSBJRk5fRk9MRF9MRUZUX1BMVVM7DQo+ICAgICAgICByZXR1cm4g dHJ1ZTsNCj4gQEAgLTM3NTEsMjMgKzM3NTEsMjkgQEAgcmVkdWN0aW9uX2ZuX2Zvcl9zY2FsYXJf Y29kZSAoY29kZV9oZWxwZXINCj4gY29kZSwgaW50ZXJuYWxfZm4gKnJlZHVjX2ZuKQ0KPiAgICAg YnkgdGhlIGludHJvZHVjdGlvbiBvZiBhZGRpdGlvbmFsIFggZWxlbWVudHMsIHJldHVybiB0aGF0 IFgsIG90aGVyd2lzZQ0KPiAgICAgcmV0dXJuIG51bGwuICBDT0RFIGlzIHRoZSBjb2RlIG9mIHRo ZSByZWR1Y3Rpb24gYW5kIFNDQUxBUl9UWVBFIGlzIHR5cGUNCj4gICAgIG9mIHRoZSBzY2FsYXIg ZWxlbWVudHMuICBJZiB0aGUgcmVkdWN0aW9uIGhhcyBqdXN0IGEgc2luZ2xlIGluaXRpYWwgdmFs dWUNCj4gLSAgIHRoZW4gSU5JVElBTF9WQUxVRSBpcyB0aGF0IHZhbHVlLCBvdGhlcndpc2UgaXQg aXMgbnVsbC4gICovDQo+ICsgICB0aGVuIElOSVRJQUxfVkFMVUUgaXMgdGhhdCB2YWx1ZSwgb3Ro ZXJ3aXNlIGl0IGlzIG51bGwuDQo+ICsgICBJZiBBU19JTklUSUFMIGlzIFRSVUUgdGhlIHZhbHVl IGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgYXMgaW5pdGlhbCB2YWx1ZS4NCj4gKyAgIEluIHRoYXQg Y2FzZSBubyBzaWduZWQgemVybyBpcyByZXR1cm5lZC4gICovDQo+IA0KPiAgdHJlZQ0KPiAgbmV1 dHJhbF9vcF9mb3JfcmVkdWN0aW9uICh0cmVlIHNjYWxhcl90eXBlLCBjb2RlX2hlbHBlciBjb2Rl LA0KPiAtCQkJICB0cmVlIGluaXRpYWxfdmFsdWUpDQo+ICsJCQkgIHRyZWUgaW5pdGlhbF92YWx1 ZSwgYm9vbCBhc19pbml0aWFsKQ0KPiAgew0KPiAgICBpZiAoY29kZS5pc190cmVlX2NvZGUgKCkp DQo+ICAgICAgc3dpdGNoICh0cmVlX2NvZGUgKGNvZGUpKQ0KPiAgICAgICAgew0KPiAtICAgICAg Y2FzZSBXSURFTl9TVU1fRVhQUjoNCj4gICAgICAgIGNhc2UgRE9UX1BST0RfRVhQUjoNCj4gICAg ICAgIGNhc2UgU0FEX0VYUFI6DQo+IC0gICAgICBjYXNlIFBMVVNfRVhQUjoNCj4gICAgICAgIGNh c2UgTUlOVVNfRVhQUjoNCj4gICAgICAgIGNhc2UgQklUX0lPUl9FWFBSOg0KPiAgICAgICAgY2Fz ZSBCSVRfWE9SX0VYUFI6DQo+ICAJcmV0dXJuIGJ1aWxkX3plcm9fY3N0IChzY2FsYXJfdHlwZSk7 DQo+ICsgICAgICBjYXNlIFdJREVOX1NVTV9FWFBSOg0KPiArICAgICAgY2FzZSBQTFVTX0VYUFI6 DQo+ICsJaWYgKCFhc19pbml0aWFsICYmIEhPTk9SX1NJR05FRF9aRVJPUyAoc2NhbGFyX3R5cGUp KQ0KPiArCSAgcmV0dXJuIGJ1aWxkX3JlYWwgKHNjYWxhcl90eXBlLCBkY29uc3RtMCk7DQo+ICsJ ZWxzZQ0KPiArCSAgcmV0dXJuIGJ1aWxkX3plcm9fY3N0IChzY2FsYXJfdHlwZSk7DQo+IA0KPiAg ICAgICAgY2FzZSBNVUxUX0VYUFI6DQo+ICAJcmV0dXJuIGJ1aWxkX29uZV9jc3QgKHNjYWxhcl90 eXBlKTsNCj4gQEAgLTQxMDYsOCArNDExMiwxNCBAQCB2ZWN0X2lzX3NpbXBsZV9yZWR1Y3Rpb24g KGxvb3BfdmVjX2luZm8NCj4gbG9vcF9pbmZvLCBzdG10X3ZlY19pbmZvIHBoaV9pbmZvLA0KPiAg ICAgICAgICAgIHJldHVybiBOVUxMOw0KPiAgICAgICAgICB9DQo+IA0KPiAtICAgICAgbnBoaV9k ZWZfbG9vcF91c2VzKys7DQo+IC0gICAgICBwaGlfdXNlX3N0bXQgPSB1c2Vfc3RtdDsNCj4gKyAg ICAgIC8qIEluIGNhc2Ugb2YgYSBDT05EX09QIChtYXNrLCBvcDEsIG9wMiwgb3AxKSByZWR1Y3Rp b24gd2UgbWlnaHQgaGF2ZQ0KPiArCSBvcDEgdHdpY2UgKG9uY2UgYXMgZGVmaW5pdGlvbiwgb25j ZSBhcyBlbHNlKSBpbiB0aGUgc2FtZSBvcGVyYXRpb24uDQo+ICsJIE9ubHkgY291bnQgaXQgYXMg b25lLiAqLw0KPiArICAgICAgaWYgKHVzZV9zdG10ICE9IHBoaV91c2Vfc3RtdCkNCj4gKwl7DQo+ ICsJICBucGhpX2RlZl9sb29wX3VzZXMrKzsNCj4gKwkgIHBoaV91c2Vfc3RtdCA9IHVzZV9zdG10 Ow0KPiArCX0NCj4gICAgICB9DQo+IA0KPiAgICB0cmVlIGxhdGNoX2RlZiA9IFBISV9BUkdfREVG X0ZST01fRURHRSAocGhpLCBsb29wX2xhdGNoX2VkZ2UgKGxvb3ApKTsNCj4gQEAgLTYwNDEsNyAr NjA1Myw3IEBAIHZlY3RfY3JlYXRlX2VwaWxvZ19mb3JfcmVkdWN0aW9uIChsb29wX3ZlY19pbmZv DQo+IGxvb3BfdmluZm8sDQo+ICAgICAgICBnY2NfYXNzZXJ0IChTVE1UX1ZJTkZPX0lOX1BBVFRF Uk5fUCAob3JpZ19zdG10X2luZm8pKTsNCj4gICAgICAgIGdjY19hc3NlcnQgKFNUTVRfVklORk9f UkVMQVRFRF9TVE1UIChvcmlnX3N0bXRfaW5mbykgPT0gc3RtdF9pbmZvKTsNCj4gICAgICB9DQo+ IC0NCj4gKw0KPiAgICBzY2FsYXJfZGVzdCA9IGdpbXBsZV9nZXRfbGhzIChvcmlnX3N0bXRfaW5m by0+c3RtdCk7DQo+ICAgIHNjYWxhcl90eXBlID0gVFJFRV9UWVBFIChzY2FsYXJfZGVzdCk7DQo+ ICAgIHNjYWxhcl9yZXN1bHRzLnRydW5jYXRlICgwKTsNCj4gQEAgLTYzNzgsNyArNjM5MCw3IEBA IHZlY3RfY3JlYXRlX2VwaWxvZ19mb3JfcmVkdWN0aW9uIChsb29wX3ZlY19pbmZvDQo+IGxvb3Bf dmluZm8sDQo+ICAJICBpZiAoUkVEVUNfR1JPVVBfRklSU1RfRUxFTUVOVCAoc3RtdF9pbmZvKSkN Cj4gIAkgICAgaW5pdGlhbF92YWx1ZSA9IHJlZHVjX2luZm8tPnJlZHVjX2luaXRpYWxfdmFsdWVz WzBdOw0KPiAgCSAgbmV1dHJhbF9vcCA9IG5ldXRyYWxfb3BfZm9yX3JlZHVjdGlvbiAoVFJFRV9U WVBFICh2ZWN0eXBlKSwgY29kZSwNCj4gLQkJCQkJCSBpbml0aWFsX3ZhbHVlKTsNCj4gKwkJCQkJ CSBpbml0aWFsX3ZhbHVlLCBmYWxzZSk7DQo+ICAJfQ0KPiAgICAgICAgaWYgKG5ldXRyYWxfb3Ap DQo+ICAJdmVjdG9yX2lkZW50aXR5ID0gZ2ltcGxlX2J1aWxkX3ZlY3Rvcl9mcm9tX3ZhbCAoJnNl cSwgdmVjdHlwZSwgQEAgLQ0KPiA2ODYwLDggKzY4NzIsOCBAQCB2ZWN0b3JpemVfZm9sZF9sZWZ0 X3JlZHVjdGlvbiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiAgCQkJICAgICAgIGdpbXBs ZV9zdG10X2l0ZXJhdG9yICpnc2ksDQo+ICAJCQkgICAgICAgZ2ltcGxlICoqdmVjX3N0bXQsIHNs cF90cmVlIHNscF9ub2RlLA0KPiAgCQkJICAgICAgIGdpbXBsZSAqcmVkdWNfZGVmX3N0bXQsDQo+ IC0JCQkgICAgICAgdHJlZV9jb2RlIGNvZGUsIGludGVybmFsX2ZuIHJlZHVjX2ZuLA0KPiAtCQkJ ICAgICAgIHRyZWUgb3BzWzNdLCB0cmVlIHZlY3R5cGVfaW4sDQo+ICsJCQkgICAgICAgY29kZV9o ZWxwZXIgY29kZSwgaW50ZXJuYWxfZm4gcmVkdWNfZm4sDQo+ICsJCQkgICAgICAgdHJlZSAqb3Bz LCBpbnQgbnVtX29wcywgdHJlZSB2ZWN0eXBlX2luLA0KPiAgCQkJICAgICAgIGludCByZWR1Y19p bmRleCwgdmVjX2xvb3BfbWFza3MgKm1hc2tzLA0KPiAgCQkJICAgICAgIHZlY19sb29wX2xlbnMg KmxlbnMpDQo+ICB7DQo+IEBAIC02ODc3LDE3ICs2ODg5LDM4IEBAIHZlY3Rvcml6ZV9mb2xkX2xl ZnRfcmVkdWN0aW9uIChsb29wX3ZlY19pbmZvDQo+IGxvb3BfdmluZm8sDQo+IA0KPiAgICBnY2Nf YXNzZXJ0ICghbmVzdGVkX2luX3ZlY3RfbG9vcF9wIChsb29wLCBzdG10X2luZm8pKTsNCj4gICAg Z2NjX2Fzc2VydCAobmNvcGllcyA9PSAxKTsNCj4gLSAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFX0xF TkdUSCAoY29kZSkgPT0gYmluYXJ5X29wKTsNCj4gKw0KPiArICBib29sIGlzX2NvbmRfb3AgPSBm YWxzZTsNCj4gKyAgaWYgKCFjb2RlLmlzX3RyZWVfY29kZSAoKSkNCj4gKyAgICB7DQo+ICsgICAg ICBnY2NfYXNzZXJ0IChjb25kX2ZuX3AgKGNvZGUpKTsNCj4gKyAgICAgIGlzX2NvbmRfb3AgPSB0 cnVlOw0KPiArICAgICAgY29kZSA9IGNvbmRpdGlvbmFsX2ludGVybmFsX2ZuX2NvZGUgKGludGVy bmFsX2ZuIChjb2RlKSk7DQo+ICsgICAgfQ0KPiArDQo+ICsgIGdjY19hc3NlcnQgKFRSRUVfQ09E RV9MRU5HVEggKHRyZWVfY29kZSAoY29kZSkpID09IGJpbmFyeV9vcCk7DQo+IA0KPiAgICBpZiAo c2xwX25vZGUpDQo+ICAgICAgZ2NjX2Fzc2VydCAoa25vd25fZXEgKFRZUEVfVkVDVE9SX1NVQlBB UlRTICh2ZWN0eXBlX291dCksDQo+ICAJCQkgIFRZUEVfVkVDVE9SX1NVQlBBUlRTICh2ZWN0eXBl X2luKSkpOw0KPiANCj4gLSAgdHJlZSBvcDAgPSBvcHNbMSAtIHJlZHVjX2luZGV4XTsNCj4gKyAg LyogVGhlIG9wZXJhbmRzIGVpdGhlciBjb21lIGZyb20gYSBiaW5hcnkgb3BlcmF0aW9uIG9yIGFu IElGTl9DT05EDQo+IG9wZXJhdGlvbi4NCj4gKyAgICAgVGhlIGZvcm1lciBpcyBhIGdpbXBsZSBh c3NpZ24gd2l0aCBiaW5hcnkgcmhzIGFuZCB0aGUgbGF0dGVyIGlzIGENCj4gKyAgICAgZ2ltcGxl IGNhbGwgd2l0aCBmb3VyIGFyZ3VtZW50cy4gICovICBnY2NfYXNzZXJ0IChudW1fb3BzID09IDIg fHwNCj4gKyBudW1fb3BzID09IDQpOyAgdHJlZSBvcDAsIG9wbWFzazsgIGlmICghaXNfY29uZF9v cCkNCj4gKyAgICBvcDAgPSBvcHNbMSAtIHJlZHVjX2luZGV4XTsNCj4gKyAgZWxzZQ0KPiArICAg IHsNCj4gKyAgICAgIG9wMCA9IG9wc1syXTsNCj4gKyAgICAgIG9wbWFzayA9IG9wc1swXTsNCj4g KyAgICAgIGdjY19hc3NlcnQgKCFzbHBfbm9kZSk7DQo+ICsgICAgfQ0KPiANCj4gICAgaW50IGdy b3VwX3NpemUgPSAxOw0KPiAgICBzdG10X3ZlY19pbmZvIHNjYWxhcl9kZXN0X2RlZl9pbmZvOw0K PiAtICBhdXRvX3ZlYzx0cmVlPiB2ZWNfb3BybmRzMDsNCj4gKyAgYXV0b192ZWM8dHJlZT4gdmVj X29wcm5kczAsIHZlY19vcG1hc2s7DQo+ICAgIGlmIChzbHBfbm9kZSkNCj4gICAgICB7DQo+ICAg ICAgICBhdXRvX3ZlYzx2ZWM8dHJlZT4gPiB2ZWNfZGVmcyAoMik7IEBAIC02OTAzLDkgKzY5MzYs MTUgQEANCj4gdmVjdG9yaXplX2ZvbGRfbGVmdF9yZWR1Y3Rpb24gKGxvb3BfdmVjX2luZm8gbG9v cF92aW5mbywNCj4gICAgICAgIHZlY3RfZ2V0X3ZlY19kZWZzX2Zvcl9vcGVyYW5kIChsb29wX3Zp bmZvLCBzdG10X2luZm8sIDEsDQo+ICAJCQkJICAgICBvcDAsICZ2ZWNfb3BybmRzMCk7DQo+ICAg ICAgICBzY2FsYXJfZGVzdF9kZWZfaW5mbyA9IHN0bXRfaW5mbzsNCj4gKw0KPiArICAgICAgLyog Rm9yIGFuIElGTl9DT05EX09QIHdlIGFsc28gbmVlZCB0aGUgdmVjdG9yIG1hc2sgb3BlcmFuZC4g ICovDQo+ICsgICAgICBpZiAoaXNfY29uZF9vcCkNCj4gKwkgIHZlY3RfZ2V0X3ZlY19kZWZzX2Zv cl9vcGVyYW5kIChsb29wX3ZpbmZvLCBzdG10X2luZm8sIDEsDQo+ICsJCQkJCSBvcG1hc2ssICZ2 ZWNfb3BtYXNrKTsNCj4gICAgICB9DQo+IA0KPiAtICB0cmVlIHNjYWxhcl9kZXN0ID0gZ2ltcGxl X2Fzc2lnbl9saHMgKHNjYWxhcl9kZXN0X2RlZl9pbmZvLT5zdG10KTsNCj4gKyAgZ2ltcGxlICpz ZGVmID0gc2NhbGFyX2Rlc3RfZGVmX2luZm8tPnN0bXQ7ICB0cmVlIHNjYWxhcl9kZXN0ID0NCj4g KyBnaW1wbGVfZ2V0X2xocyAoc2RlZik7DQo+ICAgIHRyZWUgc2NhbGFyX3R5cGUgPSBUUkVFX1RZ UEUgKHNjYWxhcl9kZXN0KTsNCj4gICAgdHJlZSByZWR1Y192YXIgPSBnaW1wbGVfcGhpX3Jlc3Vs dCAocmVkdWNfZGVmX3N0bXQpOw0KPiANCj4gQEAgLTY5MzksMTMgKzY5NzgsMTYgQEAgdmVjdG9y aXplX2ZvbGRfbGVmdF9yZWR1Y3Rpb24gKGxvb3BfdmVjX2luZm8NCj4gbG9vcF92aW5mbywNCj4g ICAgICAgIHRyZWUgYmlhcyA9IE5VTExfVFJFRTsNCj4gICAgICAgIGlmIChMT09QX1ZJTkZPX0ZV TExZX01BU0tFRF9QIChsb29wX3ZpbmZvKSkNCj4gIAltYXNrID0gdmVjdF9nZXRfbG9vcF9tYXNr IChsb29wX3ZpbmZvLCBnc2ksIG1hc2tzLCB2ZWNfbnVtLA0KPiB2ZWN0eXBlX2luLCBpKTsNCj4g KyAgICAgIGVsc2UgaWYgKGlzX2NvbmRfb3ApDQo+ICsJbWFzayA9IHZlY19vcG1hc2tbMF07DQo+ ICAgICAgICBpZiAoTE9PUF9WSU5GT19GVUxMWV9XSVRIX0xFTkdUSF9QIChsb29wX3ZpbmZvKSkN Cj4gIAl7DQo+ICAJICBsZW4gPSB2ZWN0X2dldF9sb29wX2xlbiAobG9vcF92aW5mbywgZ3NpLCBs ZW5zLCB2ZWNfbnVtLCB2ZWN0eXBlX2luLA0KPiAgCQkJCSAgIGksIDEpOw0KPiAgCSAgc2lnbmVk IGNoYXIgYmlhc3ZhbCA9IExPT1BfVklORk9fUEFSVElBTF9MT0FEX1NUT1JFX0JJQVMNCj4gKGxv b3BfdmluZm8pOw0KPiAgCSAgYmlhcyA9IGJ1aWxkX2ludF9jc3QgKGludFFJX3R5cGVfbm9kZSwg Ymlhc3ZhbCk7DQo+IC0JICBtYXNrID0gYnVpbGRfbWludXNfb25lX2NzdCAodHJ1dGhfdHlwZV9m b3IgKHZlY3R5cGVfaW4pKTsNCj4gKwkgIGlmICghaXNfY29uZF9vcCkNCj4gKwkgICAgbWFzayA9 IGJ1aWxkX21pbnVzX29uZV9jc3QgKHRydXRoX3R5cGVfZm9yICh2ZWN0eXBlX2luKSk7DQo+ICAJ fQ0KPiANCj4gICAgICAgIC8qIEhhbmRsZSBNSU5VUyBieSBhZGRpbmcgdGhlIG5lZ2F0aXZlLiAg Ki8gQEAgLTY5NTcsNyArNjk5OSw4IEBADQo+IHZlY3Rvcml6ZV9mb2xkX2xlZnRfcmVkdWN0aW9u IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ICAJICBkZWYwID0gbmVnYXRlZDsNCj4gIAl9 DQo+IA0KPiAtICAgICAgaWYgKG1hc2sgJiYgbWFza19yZWR1Y19mbiA9PSBJRk5fTEFTVCkNCj4g KyAgICAgIGlmIChMT09QX1ZJTkZPX0ZVTExZX01BU0tFRF9QIChsb29wX3ZpbmZvKQ0KPiArCSAg JiYgbWFzayAmJiBtYXNrX3JlZHVjX2ZuID09IElGTl9MQVNUKQ0KPiAgCWRlZjAgPSBtZXJnZV93 aXRoX2lkZW50aXR5IChnc2ksIG1hc2ssIHZlY3R5cGVfb3V0LCBkZWYwLA0KPiAgCQkJCSAgICB2 ZWN0b3JfaWRlbnRpdHkpOw0KPiANCj4gQEAgLTY5ODgsOCArNzAzMSw4IEBAIHZlY3Rvcml6ZV9m b2xkX2xlZnRfcmVkdWN0aW9uIChsb29wX3ZlY19pbmZvDQo+IGxvb3BfdmluZm8sDQo+ICAJfQ0K PiAgICAgICAgZWxzZQ0KPiAgCXsNCj4gLQkgIHJlZHVjX3ZhciA9IHZlY3RfZXhwYW5kX2ZvbGRf bGVmdCAoZ3NpLCBzY2FsYXJfZGVzdF92YXIsIGNvZGUsDQo+IC0JCQkJCSAgICAgcmVkdWNfdmFy LCBkZWYwKTsNCj4gKwkgIHJlZHVjX3ZhciA9IHZlY3RfZXhwYW5kX2ZvbGRfbGVmdCAoZ3NpLCBz Y2FsYXJfZGVzdF92YXIsDQo+ICsJCQkJCSAgICAgdHJlZV9jb2RlIChjb2RlKSwgcmVkdWNfdmFy LCBkZWYwKTsNCj4gIAkgIG5ld19zdG10ID0gU1NBX05BTUVfREVGX1NUTVQgKHJlZHVjX3Zhcik7 DQo+ICAJICAvKiBSZW1vdmUgdGhlIHN0YXRlbWVudCwgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZSBz YW1lIGNvZGUgcGF0aHMNCj4gIAkgICAgIGFzIGZvciBzdGF0ZW1lbnRzIHRoYXQgd2UndmUganVz dCBjcmVhdGVkLiAgKi8gQEAgLTc0NDAsNg0KPiArNzQ4MywxMSBAQCB2ZWN0b3JpemFibGVfcmVk dWN0aW9uIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ICAgICAgICBpZiAoaSA9PSBTVE1U X1ZJTkZPX1JFRFVDX0lEWCAoc3RtdF9pbmZvKSkNCj4gIAljb250aW51ZTsNCj4gDQo+ICsgICAg ICAvKiBGb3IgYW4gSUZOX0NPTkRfT1Agd2UgbWlnaHQgaGl0IHRoZSByZWR1Y3Rpb24gZGVmaW5p dGlvbiBvcGVyYW5kDQo+ICsJIHR3aWNlIChvbmNlIGFzIGRlZmluaXRpb24sIG9uY2UgYXMgZWxz ZSkuICAqLw0KPiArICAgICAgaWYgKG9wLm9wc1tpXSA9PSBvcC5vcHNbU1RNVF9WSU5GT19SRURV Q19JRFggKHN0bXRfaW5mbyldKQ0KPiArCWNvbnRpbnVlOw0KPiArDQo+ICAgICAgICAvKiBUaGVy ZSBzaG91bGQgYmUgb25seSBvbmUgY3ljbGUgZGVmIGluIHRoZSBzdG10LCB0aGUgb25lDQo+ICAg ICAgICAgICBsZWFkaW5nIHRvIHJlZHVjX2RlZi4gICovDQo+ICAgICAgICBpZiAoVkVDVE9SSVpB QkxFX0NZQ0xFX0RFRiAoZHQpKQ0KPiBAQCAtNzY0MCw2ICs3Njg4LDEyIEBAIHZlY3Rvcml6YWJs ZV9yZWR1Y3Rpb24gKGxvb3BfdmVjX2luZm8NCj4gbG9vcF92aW5mbywNCj4gICAgICAgICAgICB3 aGVuIGdlbmVyYXRpbmcgdGhlIGNvZGUgaW5zaWRlIHRoZSBsb29wLiAgKi8NCj4gDQo+ICAgIGNv ZGVfaGVscGVyIG9yaWdfY29kZSA9IFNUTVRfVklORk9fUkVEVUNfQ09ERSAocGhpX2luZm8pOw0K PiArDQo+ICsgIC8qIElmIGNvbnZlcnNpb24gbWlnaHQgaGF2ZSBjcmVhdGVkIGEgY29uZGl0aW9u YWwgb3BlcmF0aW9uIGxpa2UNCj4gKyAgICAgSUZOX0NPTkRfQUREIGFscmVhZHkuICBVc2UgdGhl IGludGVybmFsIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcNCj4gKyBjaGVja3MuICAqLyAgaWYgKGNv bmRfZm5fcCAob3JpZ19jb2RlKSkNCj4gKyAgICBvcmlnX2NvZGUgPSBjb25kaXRpb25hbF9pbnRl cm5hbF9mbl9jb2RlIChpbnRlcm5hbF9mbiAob3JpZ19jb2RlKSk7DQo+ICsNCj4gICAgU1RNVF9W SU5GT19SRURVQ19DT0RFIChyZWR1Y19pbmZvKSA9IG9yaWdfY29kZTsNCj4gDQo+ICAgIHZlY3Rf cmVkdWN0aW9uX3R5cGUgcmVkdWN0aW9uX3R5cGUgPSBTVE1UX1ZJTkZPX1JFRFVDX1RZUEUNCj4g KHJlZHVjX2luZm8pOyBAQCAtNzY3OCw3ICs3NzMyLDcgQEAgdmVjdG9yaXphYmxlX3JlZHVjdGlv bg0KPiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiAgCXsNCj4gIAkgIGlmIChkdW1wX2Vu YWJsZWRfcCAoKSkNCj4gIAkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpB VElPTiwgdmVjdF9sb2NhdGlvbiwNCj4gLQkJCSAgICAicmVkdWN0aW9uOiBub3QgY29tbXV0YXRp dmUvYXNzb2NpYXRpdmUiKTsNCj4gKwkJCSAgICAicmVkdWN0aW9uOiBub3QgY29tbXV0YXRpdmUv YXNzb2NpYXRpdmVcbiIpOw0KPiAgCSAgcmV0dXJuIGZhbHNlOw0KPiAgCX0NCj4gICAgICB9DQo+ IEBAIC04MjEzLDYgKzgyNjcsNyBAQCB2ZWN0X3RyYW5zZm9ybV9yZWR1Y3Rpb24gKGxvb3BfdmVj X2luZm8NCj4gbG9vcF92aW5mbywNCj4gDQo+ICAgIGNvZGVfaGVscGVyIGNvZGUgPSBjYW5vbmlj YWxpemVfY29kZSAob3AuY29kZSwgb3AudHlwZSk7DQo+ICAgIGludGVybmFsX2ZuIGNvbmRfZm4g PSBnZXRfY29uZGl0aW9uYWxfaW50ZXJuYWxfZm4gKGNvZGUsIG9wLnR5cGUpOw0KPiArDQo+ICAg IHZlY19sb29wX21hc2tzICptYXNrcyA9ICZMT09QX1ZJTkZPX01BU0tTIChsb29wX3ZpbmZvKTsN Cj4gICAgdmVjX2xvb3BfbGVucyAqbGVucyA9ICZMT09QX1ZJTkZPX0xFTlMgKGxvb3BfdmluZm8p Ow0KPiAgICBib29sIG1hc2tfYnlfY29uZF9leHByID0gdXNlX21hc2tfYnlfY29uZF9leHByX3Ag KGNvZGUsIGNvbmRfZm4sDQo+IHZlY3R5cGVfaW4pOyBAQCAtODIzMSwxNyArODI4NiwyNSBAQCB2 ZWN0X3RyYW5zZm9ybV9yZWR1Y3Rpb24NCj4gKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4g ICAgaWYgKGNvZGUgPT0gQ09ORF9FWFBSKQ0KPiAgICAgIGdjY19hc3NlcnQgKG5jb3BpZXMgPT0g MSk7DQo+IA0KPiArICAvKiBBIGJpbmFyeSBDT05EX09QIHJlZHVjdGlvbiBtdXN0IGhhdmUgdGhl IHNhbWUgZGVmaW5pdGlvbiBhbmQgZWxzZQ0KPiArICAgICB2YWx1ZS4gKi8NCj4gKyAgaWYgKGNv bmRfZm5fcCAoY29kZSkpDQo+ICsgICAgew0KPiArICAgICAgZ2NjX2Fzc2VydCAoY29kZSA9PSBJ Rk5fQ09ORF9BREQgfHwgY29kZSA9PSBJRk5fQ09ORF9TVUIpOw0KPiArICAgICAgZ2NjX2Fzc2Vy dCAob3AubnVtX29wcyA9PSA0ICYmIChvcC5vcHNbMV0gPT0gb3Aub3BzWzNdKSk7DQo+ICsgICAg fQ0KPiArDQo+ICAgIGJvb2wgbWFza2VkX2xvb3BfcCA9IExPT1BfVklORk9fRlVMTFlfTUFTS0VE X1AgKGxvb3BfdmluZm8pOw0KPiANCj4gICAgdmVjdF9yZWR1Y3Rpb25fdHlwZSByZWR1Y3Rpb25f dHlwZSA9IFNUTVRfVklORk9fUkVEVUNfVFlQRQ0KPiAocmVkdWNfaW5mbyk7DQo+ICAgIGlmIChy ZWR1Y3Rpb25fdHlwZSA9PSBGT0xEX0xFRlRfUkVEVUNUSU9OKQ0KPiAgICAgIHsNCj4gICAgICAg IGludGVybmFsX2ZuIHJlZHVjX2ZuID0gU1RNVF9WSU5GT19SRURVQ19GTiAocmVkdWNfaW5mbyk7 DQo+IC0gICAgICBnY2NfYXNzZXJ0IChjb2RlLmlzX3RyZWVfY29kZSAoKSk7DQo+ICsgICAgICBn Y2NfYXNzZXJ0IChjb2RlLmlzX3RyZWVfY29kZSAoKSB8fCBjb25kX2ZuX3AgKGNvZGUpKTsNCj4g ICAgICAgIHJldHVybiB2ZWN0b3JpemVfZm9sZF9sZWZ0X3JlZHVjdGlvbg0KPiAgCSAgKGxvb3Bf dmluZm8sIHN0bXRfaW5mbywgZ3NpLCB2ZWNfc3RtdCwgc2xwX25vZGUsIHJlZHVjX2RlZl9waGks DQo+IC0JICAgdHJlZV9jb2RlIChjb2RlKSwgcmVkdWNfZm4sIG9wLm9wcywgdmVjdHlwZV9pbiwg cmVkdWNfaW5kZXgsIG1hc2tzLA0KPiAtCSAgIGxlbnMpOw0KPiArCSAgIGNvZGUsIHJlZHVjX2Zu LCBvcC5vcHMsIG9wLm51bV9vcHMsIHZlY3R5cGVfaW4sDQo+ICsJICAgcmVkdWNfaW5kZXgsIG1h c2tzLCBsZW5zKTsNCj4gICAgICB9DQo+IA0KPiAgICBib29sIHNpbmdsZV9kZWZ1c2VfY3ljbGUg PSBTVE1UX1ZJTkZPX0ZPUkNFX1NJTkdMRV9DWUNMRQ0KPiAocmVkdWNfaW5mbyk7IEBAIC04MjU0 LDE0ICs4MzE3LDIwIEBAIHZlY3RfdHJhbnNmb3JtX3JlZHVjdGlvbg0KPiAobG9vcF92ZWNfaW5m byBsb29wX3ZpbmZvLA0KPiAgICB0cmVlIHNjYWxhcl9kZXN0ID0gZ2ltcGxlX2dldF9saHMgKHN0 bXRfaW5mby0+c3RtdCk7DQo+ICAgIHRyZWUgdmVjX2Rlc3QgPSB2ZWN0X2NyZWF0ZV9kZXN0aW5h dGlvbl92YXIgKHNjYWxhcl9kZXN0LCB2ZWN0eXBlX291dCk7DQo+IA0KPiArICAvKiBHZXQgTkNP UElFUyB2ZWN0b3IgZGVmaW5pdGlvbnMgZm9yIGFsbCBvcGVyYW5kcyBleGNlcHQgdGhlIHJlZHVj dGlvbg0KPiArICAgICBkZWZpbml0aW9uLiAgKi8NCj4gICAgdmVjdF9nZXRfdmVjX2RlZnMgKGxv b3BfdmluZm8sIHN0bXRfaW5mbywgc2xwX25vZGUsIG5jb3BpZXMsDQo+ICAJCSAgICAgc2luZ2xl X2RlZnVzZV9jeWNsZSAmJiByZWR1Y19pbmRleCA9PSAwDQo+ICAJCSAgICAgPyBOVUxMX1RSRUUg OiBvcC5vcHNbMF0sICZ2ZWNfb3BybmRzMCwNCj4gIAkJICAgICBzaW5nbGVfZGVmdXNlX2N5Y2xl ICYmIHJlZHVjX2luZGV4ID09IDENCj4gIAkJICAgICA/IE5VTExfVFJFRSA6IG9wLm9wc1sxXSwg JnZlY19vcHJuZHMxLA0KPiAtCQkgICAgIG9wLm51bV9vcHMgPT0gMw0KPiAtCQkgICAgICYmICEo c2luZ2xlX2RlZnVzZV9jeWNsZSAmJiByZWR1Y19pbmRleCA9PSAyKQ0KPiArCQkgICAgIG9wLm51 bV9vcHMgPT0gNA0KPiArCQkgICAgIHx8IChvcC5udW1fb3BzID09IDMNCj4gKwkJCSAmJiAhKHNp bmdsZV9kZWZ1c2VfY3ljbGUgJiYgcmVkdWNfaW5kZXggPT0gMikpDQo+ICAJCSAgICAgPyBvcC5v cHNbMl0gOiBOVUxMX1RSRUUsICZ2ZWNfb3BybmRzMik7DQo+ICsNCj4gKyAgLyogRm9yIHNpbmds ZSBkZWYtdXNlIGN5Y2xlcyBnZXQgb25lIGNvcHkgb2YgdGhlIHZlY3Rvcml6ZWQgcmVkdWN0aW9u DQo+ICsgICAgIGRlZmluaXRpb24uICAqLw0KPiAgICBpZiAoc2luZ2xlX2RlZnVzZV9jeWNsZSkN Cj4gICAgICB7DQo+ICAgICAgICBnY2NfYXNzZXJ0ICghc2xwX25vZGUpOw0KPiBAQCAtODMwMSw3 ICs4MzcwLDcgQEAgdmVjdF90cmFuc2Zvcm1fcmVkdWN0aW9uIChsb29wX3ZlY19pbmZvDQo+IGxv b3BfdmluZm8sDQo+ICAJfQ0KPiAgICAgICAgZWxzZQ0KPiAgCXsNCj4gLQkgIGlmIChvcC5udW1f b3BzID09IDMpDQo+ICsJICBpZiAob3AubnVtX29wcyA+PSAzKQ0KPiAgCSAgICB2b3BbMl0gPSB2 ZWNfb3BybmRzMltpXTsNCj4gDQo+ICAJICBpZiAobWFza2VkX2xvb3BfcCAmJiBtYXNrX2J5X2Nv bmRfZXhwcikgQEAgLTgzMTQsMTANCj4gKzgzODMsMTYgQEAgdmVjdF90cmFuc2Zvcm1fcmVkdWN0 aW9uIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ICAJICBpZiAoZW11bGF0ZWRfbWl4ZWRf ZG90X3Byb2QpDQo+ICAJICAgIG5ld19zdG10ID0gdmVjdF9lbXVsYXRlX21peGVkX2RvdF9wcm9k IChsb29wX3ZpbmZvLCBzdG10X2luZm8sDQo+IGdzaSwNCj4gIAkJCQkJCSAgICB2ZWNfZGVzdCwg dm9wKTsNCj4gLQkgIGVsc2UgaWYgKGNvZGUuaXNfaW50ZXJuYWxfZm4gKCkpDQo+ICsNCj4gKwkg IGVsc2UgaWYgKGNvZGUuaXNfaW50ZXJuYWxfZm4gKCkgJiYgIWNvbmRfZm5fcCAoY29kZSkpDQo+ ICAJICAgIG5ld19zdG10ID0gZ2ltcGxlX2J1aWxkX2NhbGxfaW50ZXJuYWwgKGludGVybmFsX2Zu IChjb2RlKSwNCj4gIAkJCQkJCSAgIG9wLm51bV9vcHMsDQo+ICAJCQkJCQkgICB2b3BbMF0sIHZv cFsxXSwgdm9wWzJdKTsNCj4gKwkgIGVsc2UgaWYgKGNvbmRfZm5fcCAoY29kZSkpDQo+ICsJICAg IG5ld19zdG10ID0gZ2ltcGxlX2J1aWxkX2NhbGxfaW50ZXJuYWwgKGludGVybmFsX2ZuIChjb2Rl KSwNCj4gKwkJCQkJCSAgIG9wLm51bV9vcHMsDQo+ICsJCQkJCQkgICB2b3BbMF0sIHZvcFsxXSwg dm9wWzJdLA0KPiArCQkJCQkJICAgdm9wWzFdKTsNCj4gIAkgIGVsc2UNCj4gIAkgICAgbmV3X3N0 bXQgPSBnaW1wbGVfYnVpbGRfYXNzaWduICh2ZWNfZGVzdCwgdHJlZV9jb2RlIChvcC5jb2RlKSwN Cj4gIAkJCQkJICAgIHZvcFswXSwgdm9wWzFdLCB2b3BbMl0pOw0KPiBkaWZmIC0tZ2l0IGEvZ2Nj L3RyZWUtdmVjdG9yaXplci5oIGIvZ2NjL3RyZWUtdmVjdG9yaXplci5oIGluZGV4DQo+IGYxZDBj ZDc5OTYxLi5lMjIwNjc0MDBhZiAxMDA2NDQNCj4gLS0tIGEvZ2NjL3RyZWUtdmVjdG9yaXplci5o DQo+ICsrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuaA0KPiBAQCAtMjMxOSw3ICsyMzE5LDcgQEAg ZXh0ZXJuIHRyZWUgdmVjdF9jcmVhdGVfYWRkcl9iYXNlX2Zvcl92ZWN0b3JfcmVmDQo+ICh2ZWNf aW5mbyAqLA0KPiAgCQkJCQkJICB0cmVlKTsNCj4gDQo+ICAvKiBJbiB0cmVlLXZlY3QtbG9vcC5j Yy4gICovDQo+IC1leHRlcm4gdHJlZSBuZXV0cmFsX29wX2Zvcl9yZWR1Y3Rpb24gKHRyZWUsIGNv ZGVfaGVscGVyLCB0cmVlKTsNCj4gK2V4dGVybiB0cmVlIG5ldXRyYWxfb3BfZm9yX3JlZHVjdGlv biAodHJlZSwgY29kZV9oZWxwZXIsIHRyZWUsIGJvb2wgPQ0KPiArdHJ1ZSk7DQo+ICBleHRlcm4g d2lkZXN0X2ludCB2ZWN0X2l2X2xpbWl0X2Zvcl9wYXJ0aWFsX3ZlY3RvcnMgKGxvb3BfdmVjX2lu Zm8NCj4gbG9vcF92aW5mbyk7ICBib29sIHZlY3Rfcmdyb3VwX2l2X21pZ2h0X3dyYXBfcCAobG9v cF92ZWNfaW5mbywNCj4gcmdyb3VwX2NvbnRyb2xzICopOw0KPiAgLyogVXNlZCBpbiB0cmVlLXZl Y3QtbG9vcC1tYW5pcC5jYyAqLw0KPiAtLQ0KPiAyLjQxLjANCj4gDQoNCg==