From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2080.outbound.protection.outlook.com [40.107.20.80]) by sourceware.org (Postfix) with ESMTPS id 85E16383579B for ; Tue, 15 Nov 2022 11:11:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 85E16383579B 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-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=hTM6XAz7desxLDWNeJAMS31T1uhI79crQYSJn93h6P5QJZKZZboJBk4fiNiT8iOh9KO1bhE9C26Koq8OC4Ubm9zX4raKJqzP7rRR2SWCqZMZvrZxa/qifhA9UcFhWADYC09v7I6bxTqrIvV5qIfzfFmHFEcXt5gsNMdTw/X5f0u/sa4zvzCUGm77RV8JJ14aBnp02s+MJJspUz1LKkcHwrdXan8HJZle6AtXiLlI2rYDcOXLu1K/I53vjDwov/r7vAyICL0iNZHw9N7FjlZfqDamXmqbPncdIXq4qSuGaIV/U+a0QUFO47XnRCiqW/1o+uuAgtLsQa9rC2JJ491CqQ== 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=bsW7+uLN78PPlcpF5XkrHXJzd3Ppl+K2ej0gQhYYIfM=; b=RPM2QyrxTBRShLYL5MpHqEuMP92bca1u5FhwI8o64aA7WCTxmMxbOCyhIzMwB/cWjchb9CkptEp1BCFypjfqJ4aBv7JaIXr9Uob6/eb2dudwIzqmpxeI2bqtmfV7yEjfwWRYka0wNXXxQjonLyiHTUG+2b+FGGzzXC/mgl927/1Gxj2lb3DC1RXNTY6O6H11wXd2dk/i+ipYH94so0pHdSfycQZRwMOsRaZgwASU26gsbhYEpNV2C4CZZupGfrDqEwD3JLckf++LRwnkUbtFGR40jVRDy5PrCK37NTk6fptYga/0hFuPvWTYcQ7dMJ0HqAQQixVGD936DG4aZqRpnA== 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=bsW7+uLN78PPlcpF5XkrHXJzd3Ppl+K2ej0gQhYYIfM=; b=DhTDpsXC/WqnXgjRbeiQAgn/d3A9ZeXYGIEX00ntprOGI+t1Ai4J9zrV6Y3kQAYSqZxy3fDIAjnSNWvE5d5nCTKURrjIGOioqgT4teMcLaU7SgzSjbVReVgCxzH3C9WmbCnK79woWOrXmwQD58QZPFjiUALrk9sLNRZari73av4= Received: from AM5PR0601CA0025.eurprd06.prod.outlook.com (2603:10a6:203:68::11) by PAVPR08MB9507.eurprd08.prod.outlook.com (2603:10a6:102:313::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.6; Tue, 15 Nov 2022 11:11:36 +0000 Received: from VI1EUR03FT036.eop-EUR03.prod.protection.outlook.com (2603:10a6:203:68:cafe::13) by AM5PR0601CA0025.outlook.office365.com (2603:10a6:203:68::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.17 via Frontend Transport; Tue, 15 Nov 2022 11:11:36 +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 VI1EUR03FT036.mail.protection.outlook.com (100.127.144.159) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12 via Frontend Transport; Tue, 15 Nov 2022 11:11:35 +0000 Received: ("Tessian outbound 6c699027a257:v130"); Tue, 15 Nov 2022 11:11:35 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: af45375af94c4ae9 X-CR-MTA-TID: 64aa7808 Received: from 913dd36d1a0d.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id D8014177-0138-488B-B0E8-EAD759FEA868.1; Tue, 15 Nov 2022 11:11:26 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 913dd36d1a0d.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 15 Nov 2022 11:11:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iYGKNUcbsx1U182X4ADOIIxf+p++iSfQ2Xn/Ldlr+Pq6/VwViHmzr4uAQ/0onNi+4GRgmYVrsD9RDM5WbRBscn9AoCZBqGqRqSbVDXmhdW+04gbNcg/c1B+DEhQTvVNZ2nqep0DfE7dkMu/keF6ks5pHAXKpvsrgs/Km+f5x6bffwwsBjLJmbP5VbWfigf/8pUZzKQpO5QikxwMNNLdL9VB8waMijSIrg5Zst9Uwcbl/EOiLR/I3nYYN1UHcuxW66ZwsKTEUBqngGndI8u7UQWQtrn9mGV1tjYZFk4vpsnfz9bA8kCKsUvnl4ssPDAtJeMboxMhio4ZoXj28aJWR5w== 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=bsW7+uLN78PPlcpF5XkrHXJzd3Ppl+K2ej0gQhYYIfM=; b=HvqTx2vggQhEvqgVzugBp4M6jmzhkn0U/K4v6dKnuVmV0npXt/4JZ5Z8d5N0dGsQfj5u7HIlYCMGxv9Yn6d8MqaJS0pwUpzVFM3ZTvXsxvVa7Ps4+cQBbMuFxsy1UQleXT7bdzuOqUZvKC/ZFAerfEDUbl40hbh9vxXdNKyr/iJGjJYbSejDqn/5iTndaYdcLClqtSHI94Bj3ZcboO1+aWxLc72BlA8MChAgmM2DHnmBHvWnrPndF9cfOyKq6OXfoMRK2ZKp5s5TmN73SSzliy0XucNg4sBbqeEO99OK/zRXH+iJgj5hi309VN9inIZlViQtWwVpxEcu7whgjQvzdA== 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=bsW7+uLN78PPlcpF5XkrHXJzd3Ppl+K2ej0gQhYYIfM=; b=DhTDpsXC/WqnXgjRbeiQAgn/d3A9ZeXYGIEX00ntprOGI+t1Ai4J9zrV6Y3kQAYSqZxy3fDIAjnSNWvE5d5nCTKURrjIGOioqgT4teMcLaU7SgzSjbVReVgCxzH3C9WmbCnK79woWOrXmwQD58QZPFjiUALrk9sLNRZari73av4= Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by DB9PR08MB6617.eurprd08.prod.outlook.com (2603:10a6:10:261::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.7; Tue, 15 Nov 2022 11:11:20 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::bd2a:aff9:b1a0:2fc7%4]) with mapi id 15.20.5834.007; Tue, 15 Nov 2022 11:11:20 +0000 From: Tamar Christina To: "gcc-patches@gcc.gnu.org" CC: nd , "rguenther@suse.de" , Richard Sandiford Subject: RE: [PATCH 1/2]middle-end: Support early break/return auto-vectorization. Thread-Topic: [PATCH 1/2]middle-end: Support early break/return auto-vectorization. Thread-Index: AQHY7snIAwho+tAVIES+mK7MOEeJC641U6WAgAqUpQA= Date: Tue, 15 Nov 2022 11:11:20 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: EDCF5D4571E2944285D2E4E5CBAE1F7F.0 Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: VI1PR08MB5325:EE_|DB9PR08MB6617:EE_|VI1EUR03FT036:EE_|PAVPR08MB9507:EE_ X-MS-Office365-Filtering-Correlation-Id: f3e4f071-592d-4289-a182-08dac6fa2918 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: zhW9JZqSHgSBYzKYLbTFDkDfP6AjzH+VUQh4orKGJQOKc1IdWwyLlsv0VtGby58wkRWVIEljOuYyBnnFyYKe8C+3Co4lfLU8w5YJdqloCJJ79ppf0hc114Fzk8b/Dm/y0jEeYCSbRt+h84zw/YETnS4zmSH6S2P42NceaX5TRwYgdBi2oEn6VNvS6zCEbMymKmZ9BMqGq6YYa4ChK5d1s4jpynrXzNsh5CpAUNpkkOTfV0QCsrI0JDAOEQDIcQMGW03YILMieOS2sfbFdK63EoG61DiicI5lEvy4Xxlir8fQQ6TtS4FdCGSF86ypP98KaPpMlUnDDj/aIU9sMJ94A32jwtvK6m7Bsc77H1HpgrASb2VQaHGNR//lGaUds6Wd1vhkZUjzO8n8IIhjz3x57fN1SBxq7jLy7bAIsuON/e8zsKdhKQiF46VFXA9P4UC7alCVdyMNxu3hn7wDa27LWh+2Yr05CgRizID5TtbBnX5yznZangChy3d4mJhd/Hu562OqujzA8BOb33APTOhu7YntddbpVhyDFwrOhPZoBzemasWTi9YwSblIoXKKU/tu+h4rrBgZw8DiCo8jhT1HGkPFh7fqogiWNtSU1mZrneKFjXPTzQv2Td87Sv40/E82YF6eCyAevON6FE63Z1+sOhkgLEuxovITy9M2Enaiwtpw/TikjRRGYLHzcxBre+Pp6qrruhs9G+PSnaT95hreotVCTLOba9VQYYOqDNjDx4ZbYDY7rBmpaWhAgSfc13iogCChiHT0rHKAgyLnJ03uHFgJQw/pyb8e5IL3oYBB1FWf4I9C9xHDpxwVMo2bkd8TRfmf7G8LDJGBc9BUnuO+4MyTvWIpWhcovH+hf2jhcQUT+ULSRNi3G1sLEUmAGV/c 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:(13230022)(4636009)(39860400002)(376002)(346002)(366004)(396003)(136003)(451199015)(53546011)(7696005)(6506007)(316002)(8936002)(52536014)(41300700001)(33656002)(4743002)(2906002)(5660300002)(30864003)(186003)(83380400001)(26005)(9686003)(76116006)(55016003)(8676002)(4326008)(66476007)(66946007)(64756008)(66446008)(66556008)(66899015)(6916009)(38070700005)(478600001)(84970400001)(122000001)(54906003)(86362001)(38100700002)(71200400001)(579004)(559001)(357404004);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6617 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: VI1EUR03FT036.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 75f6a8de-4113-40ef-1886-08dac6fa1fec X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hQEw/8sHp1ZUOXTSf2oHFaBZTas5kBrv2CD7HOj5da/J4vvI9D+kt4d7OMoMnhcCvzfhZw44zeP4DrOpq//nwFe2Iyxi+NoyQ3/SU0gNi47RLbCWO51Unj0jBYPdBpzKQQM2aEb3sU9FgP10zFBa4bvrNh3RxDB9Vc0LbpmGTzkJFmgrmPvwR8JSy2F2XhD1fwrUfJdzql+Dr391MtqS1qX0J4wmu5I6Lr79KnnHRADHbmrfjdeqdW0jVcIC96b+HRrSg246WVG7tgbXcwPZ5Ror8RzdRRKDD31DjzOHXgRAgiRhszfxNOGTitGCcMB8HfocW3wBYB3GDVszmmBxitf4xtWRuD3/RjQvRxgJH+v2LYd/xMutbscy6HJ97aztZbpLAbuUFulAJqFgnE2BQ9SeY1/7nu4WZPDxN3PS3AzDLzoVqCFUijr2ZOI8NRvzb3o3Ju52xPV7PLb5AcZvxtCbaQsAJbhnECOOS/HnXTHCXh+29TIQ+DThBiAnZXvFqy7I/r6DiPdf8udDcEfXIYKqL/tqQ8ZnQiJdL372xV8AxGPNGWyoLCOn4jUlvBGXXIilKjO7EM1eupT8q1eKx0KGEc3+PKHosPEQXaB4hROLo64i+JZfoDSnv2XjRwP1TjjHmgMA9DJ770oau+3itnhhr5y+aDFu9kAu165VCmYYtPMLjM/6ECbSdCElFEkrDAOzmrcgjWJeTyKrr5u8xjFhdRKM7JIfWlM0rnummAzDP1URPY468rD9gJtLW8xPj9ZswSErbX9RwP+GJujdLH0h5XVRyYqRBWFVYXnkZou3k/uMEGKQW0NRnDoO6b9SQqp/m7j3ctcLfuKd7VOOCwr2S5a1+pOElKYl8uEkJgM+SYJmuY4xWblIeav3swiH 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:(13230022)(4636009)(39860400002)(136003)(346002)(396003)(376002)(451199015)(36840700001)(46966006)(40470700004)(2906002)(83380400001)(84970400001)(41300700001)(86362001)(55016003)(82310400005)(478600001)(30864003)(4743002)(8936002)(47076005)(36860700001)(70206006)(356005)(6506007)(26005)(33656002)(66899015)(52536014)(81166007)(316002)(7696005)(5660300002)(54906003)(53546011)(9686003)(336012)(6916009)(8676002)(82740400003)(40480700001)(186003)(70586007)(40460700003)(4326008)(579004)(559001)(357404004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Nov 2022 11:11:35.8544 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f3e4f071-592d-4289-a182-08dac6fa2918 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: VI1EUR03FT036.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB9507 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,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: UGluZywgYW55b25lIGFsaXZlIGluIGhlcmU/IPCfmIoNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3Nh Z2UtLS0tLQ0KPiBGcm9tOiBUYW1hciBDaHJpc3RpbmENCj4gU2VudDogVHVlc2RheSwgTm92ZW1i ZXIgOCwgMjAyMiA1OjM3IFBNDQo+IFRvOiBnY2MtcGF0Y2hlc0BnY2MuZ251Lm9yZw0KPiBDYzog bmQgPG5kQGFybS5jb20+OyByZ3VlbnRoZXJAc3VzZS5kZTsgUmljaGFyZCBTYW5kaWZvcmQNCj4g PFJpY2hhcmQuU2FuZGlmb3JkQGFybS5jb20+DQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggMS8yXW1p ZGRsZS1lbmQ6IFN1cHBvcnQgZWFybHkgYnJlYWsvcmV0dXJuIGF1dG8tDQo+IHZlY3Rvcml6YXRp b24uDQo+IA0KPiBwaW5nDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4g RnJvbTogVGFtYXIgQ2hyaXN0aW5hDQo+ID4gU2VudDogV2VkbmVzZGF5LCBOb3ZlbWJlciAyLCAy MDIyIDI6NDYgUE0NCj4gPiBUbzogZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcNCj4gPiBDYzogbmQg PG5kQGFybS5jb20+OyByZ3VlbnRoZXJAc3VzZS5kZTsgUmljaGFyZCBTYW5kaWZvcmQNCj4gPiA8 UmljaGFyZC5TYW5kaWZvcmRAYXJtLmNvbT4NCj4gPiBTdWJqZWN0OiBbUEFUQ0ggMS8yXW1pZGRs ZS1lbmQ6IFN1cHBvcnQgZWFybHkgYnJlYWsvcmV0dXJuIGF1dG8tDQo+ID4gdmVjdG9yaXphdGlv bi4NCj4gPg0KPiA+IEhpIEFsbCwNCj4gPg0KPiA+IFRoaXMgcGF0Y2ggYWRkcyBpbml0aWFsIHN1 cHBvcnQgZm9yIGVhcmx5IGJyZWFrIHZlY3Rvcml6YXRpb24gaW4gR0NDLg0KPiA+IFRoZSBzdXBw b3J0IGlzIGFkZGVkIGZvciBhbnkgdGFyZ2V0IHRoYXQgaW1wbGVtZW50cyBhIHZlY3RvciBjYnJh bmNoDQo+IG9wdGFiLg0KPiA+DQo+ID4gQ29uY3JldGVseSB0aGUga2luZCBvZiBsb29wcyBzdXBw b3J0ZWQgYXJlIG9mIHRoZSBmb3JtczoNCj4gPg0KPiA+ICBmb3IgKGludCBpID0gMDsgaSA8IE47 IGkrKykNCj4gPiAgew0KPiA+ICAgIDxzdGF0ZW1lbnRzMT4NCj4gPiAgICBpZiAoPGNvbmRpdGlv bj4pDQo+ID4gICAgICA8YWN0aW9uPjsNCj4gPiAgICA8c3RhdGVtZW50czI+DQo+ID4gIH0NCj4g Pg0KPiA+IHdoZXJlIDxhY3Rpb24+IGNhbiBiZToNCj4gPiAgLSBicmVhaw0KPiA+ICAtIHJldHVy bg0KPiA+DQo+ID4gQW55IG51bWJlciBvZiBzdGF0ZW1lbnRzIGNhbiBiZSB1c2VkIGJlZm9yZSB0 aGUgPGFjdGlvbj4gb2NjdXJzLg0KPiA+DQo+ID4gU2luY2UgdGhpcyBpcyBhbiBpbml0aWFsIHZl cnNpb24gZm9yIEdDQyAxMyBpdCBoYXMgdGhlIGZvbGxvd2luZyBsaW1pdGF0aW9uczoNCj4gPg0K PiA+IC0gT25seSBmaXhlZCBzaXplZCBpdGVyYXRpb25zIGFuZCBidWZmZXJzIGFyZSBzdXBwb3J0 ZWQuICBUaGF0IGlzIHRvIHNheSBhbnkNCj4gPiAgIHZlY3RvcnMgbG9hZGVkIG9yIHN0b3JlZCBt dXN0IGJlIHRvIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFycmF5cyB3aXRoIGtub3duDQo+ID4gICBz aXplcy4gTiBtdXN0IGFsc28gYmUga25vd24uDQo+ID4gLSBhbnkgc3RvcmVzIGluIDxzdGF0ZW1l bnRzMT4gc2hvdWxkIG5vdCBiZSB0byB0aGUgc2FtZSBvYmplY3RzIGFzIGluDQo+ID4gICA8Y29u ZGl0aW9uPi4gIExvYWRzIGFyZSBmaW5lIGFzIGxvbmcgYXMgdGhleSBkb24ndCBoYXZlIHRoZSBw b3NzaWJpbGl0eSB0bw0KPiA+ICAgYWxpYXMuDQo+ID4gLSBObyBzdXBwb3J0IGZvciBwcm9sb2d1 ZSBwZWVsaW5nLiAgU2luY2Ugd2Ugb25seSBzdXBwb3J0IGZpeGVkIGJ1ZmZlcnMgdGhpcw0KPiA+ ICAgd291bGRuJ3QgYmUgYW4gaXNzdWUgYXMgd2UgYXNzdW1lIHRoZSBhcnJheXMgYXJlIGNvcnJl Y3RseSBhbGlnbmVkLg0KPiA+IC0gRnVsbHkgbWFza2VkIGxvb3BzIG9yIHVubWFza2VkIGxvb3Bz IGFyZSBzdXBwb3J0ZWQsIGJ1dCBub3QgcGFydGlhbGx5DQo+ID4gbWFza2VkDQo+ID4gICBsb29w cy4NCj4gPiAtIE9ubHkgb25lIGFkZGl0aW9uYWwgZXhpdCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0 aW1lLiAgVGhlIG1ham9yaXR5IG9mIHRoZQ0KPiBjb2RlDQo+ID4gICB3aWxsIGhhbmRsZSBuIGV4 aXRzLiBCdXQgbm90IGFsbCBzbyBhdCB0aGlzIHRpbWUgdGhpcyByZXN0cmljdGlvbiBpcyBuZWVk ZWQuDQo+ID4gLSBUaGUgZWFybHkgZXhpdCBtdXN0IGJlIGJlZm9yZSB0aGUgbmF0dXJhbCBsb29w IGV4aXQvbGF0Y2guICBUaGUgdmVjdG9yaXplciBpcw0KPiA+ICAgZGVzaWduZWQgaW4gd2F5IHRv IHByb3BhZ2UgcGhpLW5vZGVzIGRvd253YXJkcy4gIEFzIHN1Y2ggc3VwcG9ydGluZw0KPiB0aGlz DQo+ID4gICBpbnZlcnRlZCBjb250cm9sIGZsb3cgaXMgaGFyZC4NCj4gPiAtIE5vIHN1cHBvcnQg Zm9yIGVwaWxvZ3VlIHZlY3Rvcml6YXRpb24uICBUaGUgb25seSBlcGlsb2d1ZSBzdXBwb3J0ZWQg aXMgdGhlDQo+ID4gICBzY2FsYXIgZmluYWwgb25lLg0KPiA+DQo+ID4gV2l0aCB0aGUgaGVscCBv ZiBJUEEgdGhpcyBzdGlsbCBnZXRzIGhpdCBxdWl0ZSBvZnRlbi4gIER1cmluZyBib290c3RyYXAg aXQNCj4gPiBoaXQgcmF0aGVyIGZyZXF1ZW50bHkgYXMgd2VsbC4NCj4gPg0KPiA+IFRoaXMgaW1w bGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9ydCBjb21wbGV0ZWx5IGhhbmRsaW5nIHRoZSBlYXJs eSBicmVhaw0KPiA+IGluc2lkZQ0KPiA+IHRoZSB2ZWN0b3IgbG9vcCBpdHNlbGYgYnV0IGluc3Rl YWQgc3VwcG9ydHMgYWRkaW5nIGNoZWNrcyBzdWNoIHRoYXQgaWYgd2UNCj4gPiBrbm93DQo+ID4g dGhhdCB3ZSBoYXZlIHRvIGV4aXQgaW4gdGhlIGN1cnJlbnQgaXRlcmF0aW9uIHRoZW4gd2UgYnJh bmNoIHRvIHNjYWxhciBjb2RlDQo+IHRvDQo+ID4gYWN0dWFsbHkgZG8gdGhlIGZpbmFsIFZGIGl0 ZXJhdGlvbnMgd2hpY2ggaGFuZGxlcyBhbGwgdGhlIGNvZGUgaW4gPGFjdGlvbj4uDQo+ID4NCj4g PiBuaXRlcnMgYW5hbHlzaXMgYW5kIHRoZSBtYWpvcml0eSBvZiB0aGUgdmVjdG9yaXplciB3aXRo IGhhcmRjb2RlZA0KPiBzaW5nbGVfZXhpdA0KPiA+IGhhdmUgYmVlbiB1cGRhdGVkIHdpdGggdGhl IHVzZSBvZiBhIG5ldyBmdW5jdGlvbiBub3JtYWxfZXhpdCB3aGljaA0KPiA+IHJldHVybnMgdGhl DQo+ID4gbG9vcCdzIG5hdHVyYWwgZXhpdC4NCj4gPg0KPiA+IGZvciBuaXRlcnMgdGhlIG5hdHVy YWwgZXhpdCBpcyBzdGlsbCB3aGF0IGRldGVybWluZXMgdGhlIG92ZXJhbGwgaXRlcmF0aW9ucyBh cw0KPiA+IHRoYXQgaXMgdGhlIE8oaXRlcnMpIGZvciB0aGUgbG9vcC4NCj4gPg0KPiA+IEZvciB0 aGUgc2NhbGFyIGxvb3Agd2Uga25vdyB0aGF0IHdoYXRldmVyIGV4aXQgeW91IHRha2UgeW91IGhh dmUgdG8NCj4gPiBwZXJmb3JtIGF0DQo+ID4gbW9zdCBWRiBpdGVyYXRpb25zLg0KPiA+DQo+ID4g V2hlbiB0aGUgbG9vcCBpcyBwZWVsZWQgZHVyaW5nIHRoZSBjb3B5aW5nIEkgaGF2ZSB0byBnbyB0 aHJvdWdoIGdyZWF0DQo+ID4gbGVuZ3RocyB0bw0KPiA+IGtlZXAgdGhlIGRvbWluYXRvcnMgdXAg dG8gZGF0ZS4gIEFsbCBleGl0cyBmcm9tIHRoZSBmaXJzdCBsb29wIGFyZSByZXdpcmVkIHRvDQo+ ID4gdGhlDQo+ID4gbG9vcCBoZWFkZXIgb2YgdGhlIHNlY29uZCBsb29wLiAgQnV0IHRoaXMgY2Fu IGNoYW5nZSB0aGUgaW1tZWRpYXRlDQo+ID4gZG9taW5hdG9yLg0KPiA+DQo+ID4gV2UgaGFkIHNw b2tlbiBvbiBJUkMgYWJvdXQgcmVtb3ZpbmcgdGhlIGRvbWluYXRvcnMgdmFsaWRhdGlvbiBjYWxs IGF0IHRoZQ0KPiA+IGVuZCBvZg0KPiA+IHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2Vk Z2VfY2ZnIGFuZCBsZWF2aW5nIGl0IHVwIHRvIGNmZyBjbGVhbnVwDQo+IHRvDQo+ID4gcmVtb3Zl IHRoZSBpbnRlcm1lZGlhdGUgYmxvY2tzIHRoYXQgY2F1c2UgdGhlIGRvbWluYXRvcnMgdG8gZmFp bC4NCj4gPg0KPiA+IEhvd2V2ZXIgdGhpcyB0dXJuZWQgb3V0IG5vdCB0byB3b3JrIGFzIGNmZ2Ns ZWFudXAgaXRzZWxmIHJlcXVpcmVzIHRoZQ0KPiA+IGRvbWluYXRvcnMNCj4gPiBncmFwaC4gICBT byBpdCdzIHNvbWV3aGF0IGEgY2hpY2tlbiBhbmQgZWdnLiAgVG8gd29yayBhcm91bmQgdGhpcyBJ IGFkZGVkDQo+ID4gc29tZQ0KPiA+IHJ1bGVzIGZvciB3aGVuIEkgdXBkYXRlIHdoYXQgZG9taW5h dG9yIGFuZCBhbHNvIHJlamVjdCB0aGUgZm9ybXMgSSBkb24ndA0KPiA+IHN1cHBvcnQNCj4gPiBk dXJpbmcgdmVjdF9hbmFseXplX2xvb3BfZm9ybS4NCj4gPg0KPiA+IEkgaGF2ZSB0cmllZCB0byBz dHJ1Y3R1cmUgdGhlIHVwZGF0ZXMgdG8gbG9vcC1tYW5pcC5jYyBpbiBhIHdheSB0aGF0IGl0IGZp dHMNCj4gPiB3aXRoIHRoZSBjdXJyZW50IGZsb3cuICBJIHRoaW5rIEkgaGF2ZSBkb25lIGEgZGVj ZW50IGpvYiwgYnV0IHRoZXJlIGFyZSB0aGluZ3MNCj4gSQ0KPiA+IGNhbiBhbHNvIGRvIGRpZmZl cmVudGx5IGlmIHByZWZlcnJlZCBhbmQgaGF2ZSBwb2ludGVkIHRoZW0gb3V0IGluDQo+IGNvbW1l bnRzDQo+ID4gaW4NCj4gPiB0aGUgc291cmNlLg0KPiA+DQo+ID4gRm9yIHRoZSBsb29wIHBlZWxp bmcgd2UgcmV3cml0ZSB0aGUgbG9vcCBmb3JtOg0KPiA+DQo+ID4NCj4gPiAgICAgICAgICAgICAg ICAgICAgICBIZWFkZXINCj4gPiAgICAgICAgICAgICAgICAgICAgICAgLS0tDQo+ID4gICAgICAg ICAgICAgICAgICAgICAgIHx4fA0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgMg0KPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgfA0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgdg0KPiA+ ICAgICAgICAgICAgICAgICAtLS0tLS0tMzwtLS0tLS0NCj4gPiAgICAgIGVhcmx5IGV4aXQgfCAg ICAgIHwgICAgICB8DQo+ID4gICAgICAgICAgICAgICAgIHYgICAgICB2ICAgICAgfCBsYXRjaA0K PiA+ICAgICAgICAgICAgICAgICA3ICAgICAgNC0tLS0tPjYNCj4gPiAgICAgICAgICAgICAgICAg fCAgICAgIHwNCj4gPiAgICAgICAgICAgICAgICAgfCAgICAgIHYNCj4gPiAgICAgICAgICAgICAg ICAgfCAgICAgIDgNCj4gPiAgICAgICAgICAgICAgICAgfCAgICAgIHwNCj4gPiAgICAgICAgICAg ICAgICAgfCAgICAgIHYNCj4gPiAgICAgICAgICAgICAgICAgLS0tLS0tPjUNCj4gPg0KPiA+IGlu dG8NCj4gPg0KPiA+ICAgICAgICAgICAgICAgICAgICAgIEhlYWRlcg0KPiA+ICAgICAgICAgICAg ICAgICAgICAgICAtLS0NCj4gPiAgICAgICAgICAgICAgICAgICAgICAgfHh8DQo+ID4gICAgICAg ICAgICAgICAgICAgICAgICAyDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICB8DQo+ID4gICAg ICAgICAgICAgICAgICAgICAgICB2DQo+ID4gICAgICAgICAgICAgICAgIC0tLS0tLS0zPC0tLS0t LQ0KPiA+ICAgICAgZWFybHkgZXhpdCB8ICAgICAgfCAgICAgIHwNCj4gPiAgICAgICAgICAgICAg ICAgdiAgICAgIHYgICAgICB8IGxhdGNoDQo+ID4gICAgICAgICAgICAgICAgIDcgICAgICA0LS0t LS0+Ng0KPiA+ICAgICAgICAgICAgICAgICB8ICAgICAgfA0KPiA+ICAgICAgICAgICAgICAgICB8 ICAgICAgdg0KPiA+ICAgICAgICAgICAgICAgICB8ICAgICAgOA0KPiA+ICAgICAgICAgICAgICAg ICB8ICAgICAgfA0KPiA+ICAgICAgICAgICAgICAgICB8ICAgICAgdg0KPiA+ICAgICAgICAgICAg ICAgICB8ICBOZXcgSGVhZGVyDQo+ID4gICAgICAgICAgICAgICAgIHwgICAgIC0tLQ0KPiA+ICAg ICAgICAgICAgICAgICAtLS0tLT58eHwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgIDkNCj4g PiAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgIHYN Cj4gPiAgICAgICAgICAgICAgICAgLS0tLS0tMTA8LS0tLS0NCj4gPiAgICAgIGVhcmx5IGV4aXQg fCAgICAgIHwgICAgICB8DQo+ID4gICAgICAgICAgICAgICAgIHYgICAgICB2ICAgICAgfCBsYXRj aA0KPiA+ICAgICAgICAgICAgICAgICAxNCAgICAgMTEtLS0tPjEzDQo+ID4gICAgICAgICAgICAg ICAgIHwgICAgICB8DQo+ID4gICAgICAgICAgICAgICAgIHwgICAgICB2DQo+ID4gICAgICAgICAg ICAgICAgIHwgICAgICAxMg0KPiA+ICAgICAgICAgICAgICAgICB8ICAgICAgfA0KPiA+ICAgICAg ICAgICAgICAgICB8ICAgICAgdg0KPiA+ICAgICAgICAgICAgICAgICAtLS0tLS0+IDUNCj4gPg0K PiA+IFdoZW4gd2UgdmVjdG9yaXplIHdlIG1vdmUgYW55IHN0YXRlbWVudCBub3QgcmVsYXRlZCB0 byB0aGUgZWFybHkgYnJlYWsNCj4gPiBpdHNlbGYgdG8NCj4gPiB0aGUgQkIgYWZ0ZXIgdGhlIGVh cmx5IGV4aXQgYW5kIHVwZGF0ZSBhbGwgcmVmZXJlbmNlcyBhcyBhcHByb3ByaWF0ZS4NCj4gPg0K PiA+IFRoaXMgbWVhbnMgdGhhdCB3ZSBjaGVjayBhdCB0aGUgc3RhcnQgb2YgaXRlcmF0aW9ucyB3 aGV0aGVyIHdlIGFyZSBnb2luZyB0bw0KPiA+IGV4aXQNCj4gPiBvciBub3QuICBEdXJpbmcgdGhl IGFuYWx5aXMgcGhhc2Ugd2UgY2hlY2sgd2hldGhlciB3ZSBhcmUgYWxsb3dlZCB0byBkbw0KPiB0 aGlzDQo+ID4gbW92aW5nIG9mIHN0YXRlbWVudHMuICBBbHNvIG5vdGUgdGhhdCB3ZSBvbmx5IG1v dmUgdGhlIHZlY3RvciBzdGF0ZW1lbnRzDQo+ID4gYW5kDQo+ID4gbGVhdmUgdGhlIHNjYWxhcnMg YWxvbmUuDQo+ID4NCj4gPiBDb2RlZ2VuOg0KPiA+DQo+ID4gZm9yIGUuZy4NCj4gPg0KPiA+ICNk ZWZpbmUgTiA4MDMNCj4gPiB1bnNpZ25lZCB2ZWN0X2FbTl07DQo+ID4gdW5zaWduZWQgdmVjdF9i W05dOw0KPiA+DQo+ID4gdW5zaWduZWQgdGVzdDQodW5zaWduZWQgeCkNCj4gPiB7DQo+ID4gIHVu c2lnbmVkIHJldCA9IDA7DQo+ID4gIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiA+ICB7 DQo+ID4gICAgdmVjdF9iW2ldID0geCArIGk7DQo+ID4gICAgaWYgKHZlY3RfYVtpXSA+IHgpDQo+ ID4gICAgICBicmVhazsNCj4gPiAgICB2ZWN0X2FbaV0gPSB4Ow0KPiA+DQo+ID4gIH0NCj4gPiAg cmV0dXJuIHJldDsNCj4gPiB9DQo+ID4NCj4gPiBXZSBnZW5lcmF0ZSBmb3IgTkVPTjoNCj4gPg0K PiA+IHRlc3Q0Og0KPiA+ICAgICAgICAgYWRycCAgICB4MiwgLkxDMA0KPiA+ICAgICAgICAgYWRy cCAgICB4MywgLkxBTkNIT1IwDQo+ID4gICAgICAgICBkdXAgICAgIHYyLjRzLCB3MA0KPiA+ICAg ICAgICAgYWRkICAgICB4MywgeDMsIDpsbzEyOi5MQU5DSE9SMA0KPiA+ICAgICAgICAgbW92aSAg ICB2NC40cywgMHg0DQo+ID4gICAgICAgICBhZGQgICAgIHg0LCB4MywgMzIxNg0KPiA+ICAgICAg ICAgbGRyICAgICBxMSwgW3gyLCAjOmxvMTI6LkxDMF0NCj4gPiAgICAgICAgIG1vdiAgICAgeDEs IDANCj4gPiAgICAgICAgIG1vdiAgICAgdzIsIDANCj4gPiAgICAgICAgIC5wMmFsaWduIDMsLDcN Cj4gPiAuTDM6DQo+ID4gICAgICAgICBsZHIgICAgIHEwLCBbeDMsIHgxXQ0KPiA+ICAgICAgICAg YWRkICAgICB2My40cywgdjEuNHMsIHYyLjRzDQo+ID4gICAgICAgICBhZGQgICAgIHYxLjRzLCB2 MS40cywgdjQuNHMNCj4gPiAgICAgICAgIGNtaGkgICAgdjAuNHMsIHYwLjRzLCB2Mi40cw0KPiA+ ICAgICAgICAgdW1heHAgICB2MC40cywgdjAuNHMsIHYwLjRzDQo+ID4gICAgICAgICBmbW92ICAg IHg1LCBkMA0KPiA+ICAgICAgICAgY2JueiAgICB4NSwgLkw2DQo+ID4gICAgICAgICBhZGQgICAg IHcyLCB3MiwgMQ0KPiA+ICAgICAgICAgc3RyICAgICBxMywgW3gxLCB4NF0NCj4gPiAgICAgICAg IHN0ciAgICAgcTIsIFt4MywgeDFdDQo+ID4gICAgICAgICBhZGQgICAgIHgxLCB4MSwgMTYNCj4g PiAgICAgICAgIGNtcCAgICAgdzIsIDIwMA0KPiA+ICAgICAgICAgYm5lICAgICAuTDMNCj4gPiAg ICAgICAgIG1vdiAgICAgdzcsIDMNCj4gPiAuTDI6DQo+ID4gICAgICAgICBsc2wgICAgIHcyLCB3 MiwgMg0KPiA+ICAgICAgICAgYWRkICAgICB4NSwgeDMsIDMyMTYNCj4gPiAgICAgICAgIGFkZCAg ICAgdzYsIHcyLCB3MA0KPiA+ICAgICAgICAgc3h0dyAgICB4NCwgdzINCj4gPiAgICAgICAgIGxk ciAgICAgdzEsIFt4MywgeDQsIGxzbCAyXQ0KPiA+ICAgICAgICAgc3RyICAgICB3NiwgW3g1LCB4 NCwgbHNsIDJdDQo+ID4gICAgICAgICBjbXAgICAgIHcwLCB3MQ0KPiA+ICAgICAgICAgYmNjICAg ICAuTDQNCj4gPiAgICAgICAgIGFkZCAgICAgdzEsIHcyLCAxDQo+ID4gICAgICAgICBzdHIgICAg IHcwLCBbeDMsIHg0LCBsc2wgMl0NCj4gPiAgICAgICAgIGFkZCAgICAgdzYsIHcxLCB3MA0KPiA+ ICAgICAgICAgc3h0dyAgICB4MSwgdzENCj4gPiAgICAgICAgIGxkciAgICAgdzQsIFt4MywgeDEs IGxzbCAyXQ0KPiA+ICAgICAgICAgc3RyICAgICB3NiwgW3g1LCB4MSwgbHNsIDJdDQo+ID4gICAg ICAgICBjbXAgICAgIHcwLCB3NA0KPiA+ICAgICAgICAgYmNjICAgICAuTDQNCj4gPiAgICAgICAg IGFkZCAgICAgdzQsIHcyLCAyDQo+ID4gICAgICAgICBzdHIgICAgIHcwLCBbeDMsIHgxLCBsc2wg Ml0NCj4gPiAgICAgICAgIHN4dHcgICAgeDEsIHc0DQo+ID4gICAgICAgICBhZGQgICAgIHc2LCB3 MSwgdzANCj4gPiAgICAgICAgIGxkciAgICAgdzQsIFt4MywgeDEsIGxzbCAyXQ0KPiA+ICAgICAg ICAgc3RyICAgICB3NiwgW3g1LCB4MSwgbHNsIDJdDQo+ID4gICAgICAgICBjbXAgICAgIHcwLCB3 NA0KPiA+ICAgICAgICAgYmNjICAgICAuTDQNCj4gPiAgICAgICAgIHN0ciAgICAgdzAsIFt4Mywg eDEsIGxzbCAyXQ0KPiA+ICAgICAgICAgYWRkICAgICB3MiwgdzIsIDMNCj4gPiAgICAgICAgIGNt cCAgICAgdzcsIDMNCj4gPiAgICAgICAgIGJlcSAgICAgLkw0DQo+ID4gICAgICAgICBzeHR3ICAg IHgxLCB3Mg0KPiA+ICAgICAgICAgYWRkICAgICB3MiwgdzIsIHcwDQo+ID4gICAgICAgICBsZHIg ICAgIHc0LCBbeDMsIHgxLCBsc2wgMl0NCj4gPiAgICAgICAgIHN0ciAgICAgdzIsIFt4NSwgeDEs IGxzbCAyXQ0KPiA+ICAgICAgICAgY21wICAgICB3MCwgdzQNCj4gPiAgICAgICAgIGJjYyAgICAg Lkw0DQo+ID4gICAgICAgICBzdHIgICAgIHcwLCBbeDMsIHgxLCBsc2wgMl0NCj4gPiAuTDQ6DQo+ ID4gICAgICAgICBtb3YgICAgIHcwLCAwDQo+ID4gICAgICAgICByZXQNCj4gPiAgICAgICAgIC5w MmFsaWduIDIsLDMNCj4gPiAuTDY6DQo+ID4gICAgICAgICBtb3YgICAgIHc3LCA0DQo+ID4gICAg ICAgICBiICAgICAgIC5MMg0KPiA+DQo+ID4gYW5kIGZvciBTVkU6DQo+ID4NCj4gPiB0ZXN0NDoN Cj4gPiAgICAgICAgIGFkcnAgICAgeDIsIC5MQU5DSE9SMA0KPiA+ICAgICAgICAgYWRkICAgICB4 MiwgeDIsIDpsbzEyOi5MQU5DSE9SMA0KPiA+ICAgICAgICAgYWRkICAgICB4NSwgeDIsIDMyMTYN Cj4gPiAgICAgICAgIG1vdiAgICAgeDMsIDANCj4gPiAgICAgICAgIG1vdiAgICAgdzEsIDANCj4g PiAgICAgICAgIGNudHcgICAgeDQNCj4gPiAgICAgICAgIG1vdiAgICAgejEucywgdzANCj4gPiAg ICAgICAgIGluZGV4ICAgejAucywgIzAsICMxDQo+ID4gICAgICAgICBwdHJ1ZSAgIHAxLmIsIGFs bA0KPiA+ICAgICAgICAgcHRydWUgICBwMC5zLCBhbGwNCj4gPiAgICAgICAgIC5wMmFsaWduIDMs LDcNCj4gPiAuTDM6DQo+ID4gICAgICAgICBsZDF3ICAgIHoyLnMsIHAxL3osIFt4MiwgeDMsIGxz bCAyXQ0KPiA+ICAgICAgICAgYWRkICAgICB6My5zLCB6MC5zLCB6MS5zDQo+ID4gICAgICAgICBj bXBsbyAgIHAyLnMsIHAwL3osIHoxLnMsIHoyLnMNCj4gPiAgICAgICAgIGIuYW55ICAgLkwyDQo+ ID4gICAgICAgICBzdDF3ICAgIHozLnMsIHAxLCBbeDUsIHgzLCBsc2wgMl0NCj4gPiAgICAgICAg IGFkZCAgICAgdzEsIHcxLCAxDQo+ID4gICAgICAgICBzdDF3ICAgIHoxLnMsIHAxLCBbeDIsIHgz LCBsc2wgMl0NCj4gPiAgICAgICAgIGFkZCAgICAgeDMsIHgzLCB4NA0KPiA+ICAgICAgICAgaW5j dyAgICB6MC5zDQo+ID4gICAgICAgICBjbXAgICAgIHczLCA4MDMNCj4gPiAgICAgICAgIGJscyAg ICAgLkwzDQo+ID4gLkw1Og0KPiA+ICAgICAgICAgbW92ICAgICB3MCwgMA0KPiA+ICAgICAgICAg cmV0DQo+ID4gICAgICAgICAucDJhbGlnbiAyLCwzDQo+ID4gLkwyOg0KPiA+ICAgICAgICAgY250 dyAgICB4NQ0KPiA+ICAgICAgICAgbXVsICAgICB3MSwgdzEsIHc1DQo+ID4gICAgICAgICBjYnog ICAgIHc1LCAuTDUNCj4gPiAgICAgICAgIHN4dHcgICAgeDEsIHcxDQo+ID4gICAgICAgICBzdWIg ICAgIHc1LCB3NSwgIzENCj4gPiAgICAgICAgIGFkZCAgICAgeDUsIHg1LCB4MQ0KPiA+ICAgICAg ICAgYWRkICAgICB4NiwgeDIsIDMyMTYNCj4gPiAgICAgICAgIGIgICAgICAgLkw2DQo+ID4gICAg ICAgICAucDJhbGlnbiAyLCwzDQo+ID4gLkwxNDoNCj4gPiAgICAgICAgIHN0ciAgICAgdzAsIFt4 MiwgeDEsIGxzbCAyXQ0KPiA+ICAgICAgICAgY21wICAgICB4MSwgeDUNCj4gPiAgICAgICAgIGJl cSAgICAgLkw1DQo+ID4gICAgICAgICBtb3YgICAgIHgxLCB4NA0KPiA+IC5MNjoNCj4gPiAgICAg ICAgIGxkciAgICAgdzMsIFt4MiwgeDEsIGxzbCAyXQ0KPiA+ICAgICAgICAgYWRkICAgICB3NCwg dzAsIHcxDQo+ID4gICAgICAgICBzdHIgICAgIHc0LCBbeDYsIHgxLCBsc2wgMl0NCj4gPiAgICAg ICAgIGFkZCAgICAgeDQsIHgxLCAxDQo+ID4gICAgICAgICBjbXAgICAgIHcwLCB3Mw0KPiA+ICAg ICAgICAgYmNzICAgICAuTDE0DQo+ID4gICAgICAgICBtb3YgICAgIHcwLCAwDQo+ID4gICAgICAg ICByZXQNCj4gPg0KPiA+IE9uIHRoZSB3b3JrbG9hZHMgdGhpcyB3b3JrIGlzIGJhc2VkIG9uIHdl IHNlZSBiZXR3ZWVuIDItM3ggcGVyZm9ybWFuY2UNCj4gPiB1cGxpZnQNCj4gPiB1c2luZyB0aGlz IHBhdGNoLg0KPiA+DQo+ID4gT3V0c3RhbmRpbmcgaXNzdWVzOg0KPiA+ICAtIFRoZSBwYXRjaCBp cyBmdWxseSBmdW5jdGlvbmFsIGJ1dCBoYXMgdHdvIHRoaW5ncyBJIHdvbmRlciBhYm91dA0KPiA+ ICAgICogSW4gdmVjdF90cmFuc2Zvcm1fZWFybHlfYnJlYWsgc2hvdWxkIEkganVzdCByZWZhY3Rv cg0KPiA+IHZlY3Rvcml6YWJsZV9jb21wYXJpc29uDQo+ID4gICAgICBhbmQgdXNlIGl0IHRvIGdl bmVyYXRlIHRoZSBjb25kaXRpb24gYm9keT8gIFRoYXQgd291bGQgYWxzbyBnZXQgdGhlDQo+ID4g Y29zdGluZy4NCj4gPiAgICAqIFRoZSB0ZXN0Y2FzZSB2ZWN0LWVhcmx5LWJyZWFrXzIuYyBzaG93 cyBvbmUgZm9ybSB0aGF0IGN1cnJlbnRseQ0KPiBkb2Vzbid0DQo+ID4gd29yaw0KPiA+ICAgICAg YW5kIGNyYXNoZXMuICBUaGUgcmVhc29uIGlzIHRoYXQgdGhlcmUncyBhIG1pc21hdGNoIGJldHdl ZW4gdGhlIHR5cGVzDQo+ID4gcmVxdWlyZWQNCj4gPiAgICAgIHRvIHZlY3Rvcml6ZSB0aGlzLiAg VGhlIHZlY3RvciBsb2FkcyBjYXVzZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIHRvIGJlDQo+ID4gZ2Vu ZXJhdGVkDQo+ID4gICAgICBhbmQgdGh1cyByZXF1aXJlIG11bHRpcGxlIGNvbXBhcmlzb25zLiAg SW4gdGhpcyBjYXNlIDggb2YgdGhlbS4gIEhvd2V2ZXINCj4gPiAgICAgIHdoZW4gZGV0ZXJtaW5p bmcgbmNvcGllcyB0aGUgZWFybHkgZXhpdCB1c2VzIGEgYm9vbGVhbiBtb2RlIGFuZCBzbw0KPiA+ IG5jb3BpZXMNCj4gPiAgICAgIGlzIGFsd2F5cyAxLiAgSWYgSSBmb3JjZSBpdCBpbnN0ZWFkIHRv IGRldGVybWluZSBuY29waWVzIGJhc2VkIG9uIGl0J3MNCj4gPiAgICAgIG9wZXJhbmRzIGluc3Rl YWQgb2YgdGhlIGZpbmFsIHR5cGUgdGhlbiB3ZSBnZXQgdGhlIGNvbmRpdG9uYWwgdmVjdG9yaXpl ZA0KPiA+ICAgICAgYnV0IHRoZSBpdCBoYXMgYSBtaXNtYXRjaCBjb21wYXJpbmcgaW50ZWdlciB2 ZWN0b3JzIHdpdGggYm9vbGVhbi4NCj4gPiAgICAgIEl0IGZlZWxzIGxpa2UgSSBuZWVkIHNvbWUg a2luZCBvZiBib29sZWFuIHJlZHVjdGlvbnMgaGVyZS4uICBTaG91bGQgSSBqdXN0DQo+ID4gICAg ICByZWplY3QgdGhpcyBmb3JtIGZvciBub3c/DQo+ID4NCj4gPiBCb290c3RyYXBwZWQgUmVndGVz dGVkIG9uIGFhcmNoNjQtbm9uZS1saW51eC1nbnUsIHg4Nl82NC1wYy1saW51eC1nbnUNCj4gPiBh bmQgaXNzdWVzDQo+ID4gbWVudGlvbmVkIGFib3ZlLg0KPiA+DQo+ID4gT0sgZW5vdWdoIGRlc2ln biBhbmQgaW1wbGVtZW50YXRpb24gZm9yIEdDQyAxMz8NCj4gPg0KPiA+IFRoYW5rcywNCj4gPiBU YW1hcg0KPiA+DQo+ID4gZ2NjL0NoYW5nZUxvZzoNCj4gPg0KPiA+IAkqIGNmZ2xvb3AuY2MgKG5v cm1hbF9leGl0KTogTmV3Lg0KPiA+IAkqIGNmZ2xvb3AuaCAobm9ybWFsX2V4aXQpOiBOZXcuDQo+ ID4gCSogZG9jL2xvb3AudGV4aSAobm9ybWFsX2V4aXQpOiBEb2N1bWVudC4NCj4gPiAJKiBkb2Mv c291cmNlYnVpbGQudGV4aSAodmVjdF9lYXJseV9icmVhayk6IERvY3VtZW50Lg0KPiA+IAkqIHRy ZWUtc2NhbGFyLWV2b2x1dGlvbi5jYyAoZ2V0X2xvb3BfZXhpdF9jb25kaXRpb24pOiBSZWZhY3Rv ci4NCj4gPiAJKGdldF9lZGdlX2NvbmRpdGlvbik6IE5ldy4NCj4gPiAJKiB0cmVlLXNjYWxhci1l dm9sdXRpb24uaCAoZ2V0X2VkZ2VfY29uZGl0aW9uKTogbmV3Lg0KPiA+IAkqIHRyZWUtdmVjdC1k YXRhLXJlZnMuY2MgKHZlY3RfZW5oYW5jZV9kYXRhX3JlZnNfYWxpZ25tZW50KTogR2V0DQo+ID4g bWFpbg0KPiA+IAlleGl0IGR1cmluZyBwZWVsaW5nIGNoZWNrLg0KPiA+IAkqIHRyZWUtdmVjdC1s b29wLW1hbmlwLmNjDQo+ID4gCShzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2Nm Zyk6IFN1cHBvcnQgY29weWluZyBDRkdzDQo+ID4gd2l0aA0KPiA+IAltdWx0aXBsZSBleGl0cyBh bmQgcGxhY2UgYXQgdGhlIGVuZC4NCj4gPiAJKHZlY3RfdXBkYXRlX2l2c19hZnRlcl92ZWN0b3Jp emVyKTogU2tpcCBvbiBlYXJseSBleGl0cy4NCj4gPiAJKHZlY3RfdXBkYXRlX2l2c19hZnRlcl9l YXJseV9icmVhayk6IE5ldy4NCj4gPiAJKGdpbXBsZV9maW5kX2xhc3RfbWVtX3VzZSk6IE5ldy4N Cj4gPiAJKHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcywNCj4gPiBzbHBlZWxfdXBk YXRlX3BoaV9ub2Rlc19mb3JfZ3VhcmQyLA0KPiA+IAlzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19m b3JfbGNzc2EsDQo+ID4gdmVjdF9nZW5fdmVjdG9yX2xvb3Bfbml0ZXJzX211bHRfdmYsDQo+ID4g CXNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3BfcCwNCj4gPiB2ZWN0X3NldF9sb29wX2NvbmRpdGlv bl9wYXJ0aWFsX3ZlY3RvcnMpOg0KPiA+IAlVcGRhdGUgZm9yIG11bHRpcGxlIGV4aXRzLg0KPiA+ IAkodmVjdF9zZXRfbG9vcF9jb25kaXRpb24sIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1h bCk6DQo+ID4gVXBkYXRlDQo+ID4gCWNvbmRpdGlvbiBmb3IgZWFybHkgZXhpdHMuDQo+ID4gCSh2 ZWN0X2RvX3BlZWxpbmcpOiBQZWVsIGZvciBlYXJseSBicmVha3MuDQo+ID4gCSogdHJlZS12ZWN0 LWxvb3AuY2MgKHZlY3RfZ2V0X2xvb3Bfbml0ZXJzKTogQW5hbHl6ZSBhbmQgcmV0dXJuIGFsbA0K PiA+IAlleGl0cy4NCj4gPiAJKHZlY3RfYW5hbHl6ZV9sb29wX2Zvcm0sIHZlY3RfY3JlYXRlX2xv b3BfdmluZm8pOiBBbmFseXplIGFsbA0KPiA+IGNvbmRzLg0KPiA+IAkodmVjdF9kZXRlcm1pbmVf cGFydGlhbF92ZWN0b3JzX2FuZF9wZWVsaW5nKTogU3Vwb3J0IG11bHRpcGxlDQo+ID4gZXhpdHMg YnkNCj4gPiAJcGVlaW5nLg0KPiA+IAkodmVjdF9hbmFseXplX2xvb3ApOiBBZGQgYW5heXNpcyBm b3IgbXVsdGlwbGUgZXhpdHMuDQo+ID4gCShtb3ZlX2Vhcmx5X2V4aXRfc3RtdHMsIHZlY3RfdHJh bnNmb3JtX2Vhcmx5X2JyZWFrLA0KPiA+IAl2YWxpZGF0ZV9lYXJseV9leGl0X3N0bXRzLCB2ZWN0 b3JpemFibGVfZWFybHlfZXhpdCk6IE5ldy4NCj4gPiAJKHZlY3Rvcml6YWJsZV9saXZlX29wZXJh dGlvbik6IElnbm9yZSBlYXJseSBicmVhayBzdGF0ZW1lbnRzLg0KPiA+IAkoc2NhbGVfcHJvZmls ZV9mb3JfdmVjdF9sb29wLCB2ZWN0X3RyYW5zZm9ybV9sb29wKTogU3VwcG9ydA0KPiA+IG11bHRp cGxlDQo+ID4gCWV4aXRzLg0KPiA+IAkqIHRyZWUtdmVjdC1zdG10cy5jYyAodmVjdF9zdG10X3Jl bGV2YW50X3ApOiBBbmFseXplIGVhcmx5IGJyZWFrcy4NCj4gPiAJKHByZXBhcmVfdmVjX21hc2sp OiBFeHBvc2UuDQo+ID4gCSh2ZWN0X2FuYWx5emVfc3RtdCwgdmVjdF90cmFuc2Zvcm1fc3RtdCwg dmVjdF9pc19zaW1wbGVfdXNlLA0KPiA+IAl2ZWN0X2dldF92ZWN0b3JfdHlwZXNfZm9yX3N0bXQp OiBTdXBwb3J0IGxvb3AgY29udHJvbC9lYXJseSBleGl0cy4NCj4gPiAJKiB0cmVlLXZlY3Rvcml6 ZXIuY2MgKHBhc3NfdmVjdG9yaXplOjpleGVjdXRlKTogUmVjb3JkIGFsbCBleGl0cyBmb3INCj4g PiAJUlBPLg0KPiA+IAkqIHRyZWUtdmVjdG9yaXplci5oIChlbnVtIHZlY3RfZGVmX3R5cGUpOiBB ZGQgdmVjdF9lYXJseV9leGl0X2RlZi4NCj4gPiAJKHNscGVlbF9jYW5fZHVwbGljYXRlX2xvb3Bf cCk6IENoYW5nZSBsb29wIHRvIGxvb3BfdmVjX2luZm8uDQo+ID4gCShzdHJ1Y3QgdmVjdF9sb29w X2Zvcm1faW5mbyk6IEFkZCBsb29wIGNvbmRpdGlvbnMuDQo+ID4gCShMT09QX1ZJTkZPX0VBUkxZ X0JSRUFLUywgdmVjdF90cmFuc2Zvcm1fZWFybHlfYnJlYWssDQo+ID4gCXZlY3Rvcml6YWJsZV9l YXJseV9leGl0KTogTmV3Lg0KPiA+IAkocHJlcGFyZV92ZWNfbWFzayk6IE5ldy4NCj4gPiAJKHZl Y19pbmZvKTogQWRkIGVhcmx5X2JyZWFrcy4NCj4gPiAJKGxvb3BfdmVjX2luZm9fZm9yX2xvb3Ap OiBNYWtlIGxvb3AgY29uc3QuDQo+ID4NCj4gPiBnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoNCj4g Pg0KPiA+IAkqIGxpYi90YXJnZXQtc3VwcG9ydHMuZXhwICh2ZWN0X2Vhcmx5X2JyZWFrKTogTmV3 Lg0KPiA+IAkqIGcrKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMS5jYzogTmV3IHRlc3QuDQo+ ID4gCSogZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18yLmNjOiBOZXcgdGVzdC4NCj4gPiAJ KiBnKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzMuY2M6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzEuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMTAuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMi5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2Mu ZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8zLmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzQuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2NjLmRn L3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNS5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcv dmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl82LmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92 ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzcuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVhay1ydW5fOC5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdmVj dC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl85LmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcv dmVjdC92ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xLmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92 ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTAuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2NjLmRnL3ZlY3Qv dmVjdC1lYXJseS1icmVha18xMS5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrXzEyLmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWtfMTMuYzogTmV3IHRlc3QuDQo+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVha18xNC5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzE1LmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMi5j OiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzMuYzogTmV3 IHRlc3QuDQo+ID4gCSogZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha180LmM6IE5ldyB0ZXN0 Lg0KPiA+IAkqIGdjYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNS5jOiBOZXcgdGVzdC4NCj4g PiAJKiBnY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzYuYzogTmV3IHRlc3QuDQo+ID4gCSog Z2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha183LmM6IE5ldyB0ZXN0Lg0KPiA+IAkqIGdjYy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOC5jOiBOZXcgdGVzdC4NCj4gPiAJKiBnY2MuZGcvdmVj dC92ZWN0LWVhcmx5LWJyZWFrXzkuYzogTmV3IHRlc3QuDQo+ID4NCj4gPiAtLS0gaW5saW5lIGNv cHkgb2YgcGF0Y2ggLS0NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL2NmZ2xvb3AuaCBiL2djYy9jZmds b29wLmgNCj4gPiBpbmRleA0KPiA+DQo+IDUyOGIxMjE5YmMzN2FkOGYxMTRkNWNmMzgxYzBjZmY4 OTlkYjMxZWUuLjljN2YwMTlhNTFhYmZlMmRlOGUxZGQ3MTM1DQo+ID4gZGVhMjQ2M2IwMjU2YTAg MTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL2NmZ2xvb3AuaA0KPiA+ICsrKyBiL2djYy9jZmdsb29wLmgN Cj4gPiBAQCAtMzg1LDYgKzM4NSw3IEBAIGV4dGVybiBiYXNpY19ibG9jaw0KPiA+ICpnZXRfbG9v cF9ib2R5X2luX2N1c3RvbV9vcmRlciAoY29uc3QgY2xhc3MgbG9vcCAqLCB2b2lkICosDQo+ID4N Cj4gPiAgZXh0ZXJuIGF1dG9fdmVjPGVkZ2U+IGdldF9sb29wX2V4aXRfZWRnZXMgKGNvbnN0IGNs YXNzIGxvb3AgKiwNCj4gPiBiYXNpY19ibG9jayAqID0gTlVMTCk7DQo+ID4gIGV4dGVybiBlZGdl IHNpbmdsZV9leGl0IChjb25zdCBjbGFzcyBsb29wICopOw0KPiA+ICtleHRlcm4gZWRnZSBub3Jt YWxfZXhpdCAoY29uc3QgY2xhc3MgbG9vcCAqKTsNCj4gPiAgZXh0ZXJuIGVkZ2Ugc2luZ2xlX2xp a2VseV9leGl0IChjbGFzcyBsb29wICpsb29wLCBjb25zdCB2ZWM8ZWRnZT4gJik7DQo+ID4gIGV4 dGVybiB1bnNpZ25lZCBudW1fbG9vcF9icmFuY2hlcyAoY29uc3QgY2xhc3MgbG9vcCAqKTsNCj4g Pg0KPiA+IGRpZmYgLS1naXQgYS9nY2MvY2ZnbG9vcC5jYyBiL2djYy9jZmdsb29wLmNjDQo+ID4g aW5kZXgNCj4gPg0KPiA1N2JmN2IxODU1ZDRkZDIwZmIzZjQyMzg4MTI0OTMyZDBjYTJiNDhhLi45 N2E3MzczZmI2ZDk1MTRkYTYwMmQ1YmUwDQo+ID4gMTA1MGYyZWM2NjA5NGJjIDEwMDY0NA0KPiA+ IC0tLSBhL2djYy9jZmdsb29wLmNjDQo+ID4gKysrIGIvZ2NjL2NmZ2xvb3AuY2MNCj4gPiBAQCAt MTgxMiw2ICsxODEyLDIwIEBAIHNpbmdsZV9leGl0IChjb25zdCBjbGFzcyBsb29wICpsb29wKQ0K PiA+ICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gIH0NCj4gPg0KPiA+ICsvKiBSZXR1cm5zIHRoZSBu b3JtYWwgZXhpdCBlZGdlIG9mIExPT1AsIG9yIE5VTEwgaWYgTE9PUCBoYXMgZWl0aGVyIG5vDQo+ ID4gZXhpdC4NCj4gPiArICAgSWYgbG9vcHMgZG8gbm90IGhhdmUgdGhlIGV4aXRzIHJlY29yZGVk LCBOVUxMIGlzIHJldHVybmVkIGFsd2F5cy4gICovDQo+ID4gKw0KPiA+ICtlZGdlDQo+ID4gK25v cm1hbF9leGl0IChjb25zdCBjbGFzcyBsb29wICpsb29wKQ0KPiA+ICt7DQo+ID4gKyAgc3RydWN0 IGxvb3BfZXhpdCAqZXhpdCA9IGxvb3AtPmV4aXRzLT5uZXh0Ow0KPiA+ICsNCj4gPiArICBpZiAo IWxvb3BzX3N0YXRlX3NhdGlzZmllc19wIChMT09QU19IQVZFX1JFQ09SREVEX0VYSVRTKSkNCj4g PiArICAgIHJldHVybiBOVUxMOw0KPiA+ICsNCj4gPiArICByZXR1cm4gZXhpdC0+ZTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiAgLyogUmV0dXJucyB0cnVlIHdoZW4gQkIgaGFzIGFuIGluY29taW5nIGVk Z2UgZXhpdGluZyBMT09QLiAgKi8NCj4gPg0KPiA+ICBib29sDQo+ID4gZGlmZiAtLWdpdCBhL2dj Yy9kb2MvbG9vcC50ZXhpIGIvZ2NjL2RvYy9sb29wLnRleGkNCj4gPiBpbmRleA0KPiA+DQo+IDZl ODY1N2EwNzRkMjQ0N2RiN2FlOWI3NWNiZmJiNzEyODJiODQyODcuLmUxZGUyYWM0MGY4N2Y4Nzlh YjY5MWY2OGINCj4gPiBkNDFiM2JjMjFhODNiZjcgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL2RvYy9s b29wLnRleGkNCj4gPiArKysgYi9nY2MvZG9jL2xvb3AudGV4aQ0KPiA+IEBAIC0yMTEsNiArMjEx LDEwIEBAIHJlbGF0aW9uLCBhbmQgYnJlYXRoLWZpcnN0IHNlYXJjaCBvcmRlciwNCj4gcmVzcGVj dGl2ZWx5Lg0KPiA+ICBAaXRlbSBAY29kZXtzaW5nbGVfZXhpdH06IFJldHVybnMgdGhlIHNpbmds ZSBleGl0IGVkZ2Ugb2YgdGhlIGxvb3AsIG9yDQo+ID4gIEBjb2Rle05VTEx9IGlmIHRoZSBsb29w IGhhcyBtb3JlIHRoYW4gb25lIGV4aXQuICBZb3UgY2FuIG9ubHkgdXNlIHRoaXMNCj4gPiAgZnVu Y3Rpb24gaWYgQGNvZGV7TE9PUFNfSEFWRV9SRUNPUkRFRF9FWElUU30gaXMgdXNlZC4NCj4gPiAr ZnVuY3Rpb24gaWYgTE9PUFNfSEFWRV9NQVJLRURfU0lOR0xFX0VYSVRTIHByb3BlcnR5IGlzIHVz ZWQuDQo+ID4gK0BpdGVtIEBjb2Rle25vcm1hbF9leGl0fTogUmV0dXJucyB0aGUgbmF0dXJhbCBl eGl0IGVkZ2Ugb2YgdGhlIGxvb3AsDQo+ID4gK2V2ZW4gaWYgdGhlIGxvb3AgaGFzIG1vcmUgdGhh biBvbmUgZXhpdC4gIFRoZSBuYXR1cmFsIGV4aXQgaXMgdGhlIGV4aXQNCj4gPiArdGhhdCB3b3Vs ZCBub3JtYWxseSBiZSB0YWtlbiB3aGVyZSB0aGUgbG9vcCB0byBiZSBmdWxseSBleGVjdXRlZC4N Cj4gPiAgQGl0ZW0gQGNvZGV7Z2V0X2xvb3BfZXhpdF9lZGdlc306IEVudW1lcmF0ZXMgdGhlIGV4 aXQgZWRnZXMgb2YgYQ0KPiBsb29wLg0KPiA+ICBAaXRlbSBAY29kZXtqdXN0X29uY2VfZWFjaF9p dGVyYXRpb25fcH06IFJldHVybnMgdHJ1ZSBpZiB0aGUgYmFzaWMNCj4gYmxvY2sNCj4gPiAgaXMg ZXhlY3V0ZWQgZXhhY3RseSBvbmNlIGR1cmluZyBlYWNoIGl0ZXJhdGlvbiBvZiBhIGxvb3AgKHRo YXQgaXMsIGl0DQo+ID4gQEAgLTYyMyw0ICs2MjcsNCBAQCBtYXhpbXVtIHZlcmJvc2l0eSB0aGUg ZGV0YWlscyBvZiBhIGRhdGENCj4gZGVwZW5kZW5jZQ0KPiA+IHJlbGF0aW9ucyBhcnJheSwNCj4g PiAgQGNvZGV7ZHVtcF9kaXN0X2Rpcl92ZWN0b3JzfSBwcmludHMgb25seSB0aGUgY2xhc3NpY2Fs IGRpc3RhbmNlIGFuZA0KPiA+ICBkaXJlY3Rpb24gdmVjdG9ycyBmb3IgYSBkYXRhIGRlcGVuZGVu Y2UgcmVsYXRpb25zIGFycmF5LCBhbmQNCj4gPiAgQGNvZGV7ZHVtcF9kYXRhX3JlZmVyZW5jZXN9 IHByaW50cyB0aGUgZGV0YWlscyBvZiB0aGUgZGF0YSByZWZlcmVuY2VzDQo+ID4gLWNvbnRhaW5l ZCBpbiBhIGRhdGEgcmVmZXJlbmNlIGFycmF5Lg0KPiA+ICtjb250YWluZWQgaW4gYSBkYXRhIHJl ZmVyZW5jZSBhcnJheQ0KPiA+IGRpZmYgLS1naXQgYS9nY2MvZG9jL3NvdXJjZWJ1aWxkLnRleGkg Yi9nY2MvZG9jL3NvdXJjZWJ1aWxkLnRleGkNCj4gPiBpbmRleA0KPiA+DQo+IGUyMWExZDM4MWUw NWRhMWJmY2NiNTU1MDY4ZWExZGJlYWJkOWZjNzkuLjE2ZmE5NGViZjUzMmQyN2NkOWEzYTQ1YTcN Cj4gPiBhYWQ1NzhjYTY5MjA0OTYgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL2RvYy9zb3VyY2VidWls ZC50ZXhpDQo+ID4gKysrIGIvZ2NjL2RvYy9zb3VyY2VidWlsZC50ZXhpDQo+ID4gQEAgLTE2NDAs NiArMTY0MCwxMCBAQCBUYXJnZXQgc3VwcG9ydHMgaGFyZHdhcmUgdmVjdG9ycyBvZg0KPiBAY29k ZXtmbG9hdH0NCj4gPiB3aGVuDQo+ID4gIEBvcHRpb257LWZ1bnNhZmUtbWF0aC1vcHRpbWl6YXRp b25zfSBpcyBub3QgaW4gZWZmZWN0Lg0KPiA+ICBUaGlzIGltcGxpZXMgQGNvZGV7dmVjdF9mbG9h dH0uDQo+ID4NCj4gPiArQGl0ZW0gdmVjdF9lYXJseV9icmVhaw0KPiA+ICtUYXJnZXQgc3VwcG9y dHMgaGFyZHdhcmUgdmVjdG9yaXphdGlvbiBvZiBsb29wcyB3aXRoIGVhcmx5IGJyZWFrcy4NCj4g PiArVGhpcyByZXF1aXJlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2JyYW5jaCBvcHRhYiBm b3IgdmVjdG9ycy4NCj4gPiArDQo+ID4gIEBpdGVtIHZlY3RfaW50DQo+ID4gIFRhcmdldCBzdXBw b3J0cyBoYXJkd2FyZSB2ZWN0b3JzIG9mIEBjb2Rle2ludH0uDQo+ID4NCj4gPiBkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEuY2MNCj4gPiBi L2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xLmNjDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhODM2NDhjYTM2ZTJjOGZlZWI3ODMzNWZjDQo+ID4gY2Yz ZjNiODJhOTdkMmUNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEuY2MNCj4gPiBAQCAtMCwwICsxLDYxIEBADQo+ ID4gKy8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3Rp dmUtdGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZm ZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9u YWwtb3B0aW9ucyAiLXcgLU8yIiB9ICovDQo+ID4gKw0KPiA+ICt2b2lkIGZhbmN5X2Fib3J0KGNo YXIgKiwgaW50LCBjb25zdCBjaGFyICopDQo+IF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykp Ow0KPiA+ICt0ZW1wbGF0ZSA8dW5zaWduZWQgTiwgdHlwZW5hbWU+IHN0cnVjdCBwb2x5X2ludF9w b2QgeyBpbnQgY29lZmZzW05dOyB9Ow0KPiA+ICt0ZW1wbGF0ZSA8dW5zaWduZWQgTiwgdHlwZW5h bWU+IGNsYXNzIHBvbHlfaW50IDogcHVibGljIHBvbHlfaW50X3BvZDxOLA0KPiA+IGludD4gew0K PiA+ICtwdWJsaWM6DQo+ID4gKyAgdGVtcGxhdGUgPHR5cGVuYW1lIENhPiBwb2x5X2ludCAmb3Bl cmF0b3IrPShjb25zdCBwb2x5X2ludF9wb2Q8TiwNCj4gPiBDYT4gJik7DQo+ID4gK307DQo+ID4g K3RlbXBsYXRlIDx1bnNpZ25lZCBOLCB0eXBlbmFtZSBDPg0KPiA+ICt0ZW1wbGF0ZSA8dHlwZW5h bWUgQ2E+DQo+ID4gK3BvbHlfaW50PE4sIEM+ICZwb2x5X2ludDxOLCBDPjo6b3BlcmF0b3IrPShj b25zdCBwb2x5X2ludF9wb2Q8TiwgQ2E+DQo+ID4gJmEpIHsNCj4gPiArICBmb3IgKGludCBpID0g MDsgaSA8IE47IGkrKykNCj4gPiArICAgIHRoaXMtPmNvZWZmc1tpXSArPSBhLmNvZWZmc1tpXTsN Cj4gPiArICByZXR1cm4gKnRoaXM7DQo+ID4gK30NCj4gPiArdGVtcGxhdGUgPHVuc2lnbmVkIE4s IHR5cGVuYW1lIENhLCB0eXBlbmFtZSBDYj4NCj4gPiArcG9seV9pbnQ8TiwgbG9uZz4gZXhhY3Rf ZGl2KHBvbHlfaW50X3BvZDxOLCBDYT4sIENiKSB7DQo+ID4gKyAgcG9seV9pbnQ8TiwgbG9uZz4g cjsNCj4gPiArICByZXR1cm4gcjsNCj4gPiArfQ0KPiA+ICtzdHJ1Y3QgdmVjX3ByZWZpeCB7DQo+ ID4gKyAgdW5zaWduZWQgbV9udW07DQo+ID4gK307DQo+ID4gK3N0cnVjdCB2bF9wdHI7DQo+ID4g K3N0cnVjdCB2YV9oZWFwIHsNCj4gPiArICB0eXBlZGVmIHZsX3B0ciBkZWZhdWx0X2xheW91dDsN Cj4gPiArfTsNCj4gPiArdGVtcGxhdGUgPHR5cGVuYW1lLCB0eXBlbmFtZSBBLCB0eXBlbmFtZSA9 IHR5cGVuYW1lDQo+ID4gQTo6ZGVmYXVsdF9sYXlvdXQ+DQo+ID4gK3N0cnVjdCB2ZWM7DQo+ID4g K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBPiBzdHJ1Y3QgdmVjPFQsIEEsIGludD4g ew0KPiA+ICsgIFQgJm9wZXJhdG9yW10odW5zaWduZWQpOw0KPiA+ICsgIHZlY19wcmVmaXggbV92 ZWNwZng7DQo+ID4gKyAgVCBtX3ZlY2RhdGFbXTsNCj4gPiArfTsNCj4gPiArdGVtcGxhdGUgPHR5 cGVuYW1lIFQsIHR5cGVuYW1lIEE+IFQgJnZlYzxULCBBLA0KPiA+IGludD46Om9wZXJhdG9yW10o dW5zaWduZWQgaXgpIHsNCj4gPiArICBtX3ZlY3BmeC5tX251bSA/IGZhbmN5X2Fib3J0KCIiLCA5 LCBfX0ZVTkNUSU9OX18pLCAwIDogMDsNCj4gPiArICByZXR1cm4gbV92ZWNkYXRhW2l4XTsNCj4g PiArfQ0KPiA+ICt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IHZlYzxULCB2YV9oZWFwPiB7 DQo+ID4gKyAgVCAmb3BlcmF0b3JbXSh1bnNpZ25lZCBpeCkgeyByZXR1cm4gbV92ZWNbaXhdOyB9 DQo+ID4gKyAgdmVjPFQsIHZhX2hlYXAsIGludD4gbV92ZWM7DQo+ID4gK307DQo+ID4gK2NsYXNz IGF1dG9fdmVjIDogcHVibGljIHZlYzxwb2x5X2ludDwyLCBsb25nPiwgdmFfaGVhcD4ge307DQo+ ID4gK3RlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3MgdmVjdG9yX2J1aWxkZXIgOiBwdWJsaWMgYXV0 b192ZWMge307DQo+ID4gK2NsYXNzIGludF92ZWN0b3JfYnVpbGRlciA6IHB1YmxpYyB2ZWN0b3Jf YnVpbGRlcjxpbnQ+IHsNCj4gPiArcHVibGljOg0KPiA+ICsgIGludF92ZWN0b3JfYnVpbGRlcihw b2x5X2ludDwyLCBsb25nPiwgaW50LCBpbnQpOw0KPiA+ICt9Ow0KPiA+ICtib29sIHZlY3RfZ3Jv dXBlZF9zdG9yZV9zdXBwb3J0ZWQoKSB7DQo+ID4gKyAgaW50IGk7DQo+ID4gKyAgcG9seV9pbnQ8 MiwgbG9uZz4gbmVsdDsNCj4gPiArICBpbnRfdmVjdG9yX2J1aWxkZXIgc2VsKG5lbHQsIDIsIDMp Ow0KPiA+ICsgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspDQo+ID4gKyAgICBzZWxbaV0gKz0gZXhh Y3RfZGl2KG5lbHQsIDIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+IGRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMi5jYw0KPiA+ IGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIuY2MNCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmE4MzY0OGNhMzZlMmM4ZmVlYjc4MzM1ZmMNCj4gPiBj ZjNmM2I4MmE5N2QyZQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRl L2crKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMi5jYw0KPiA+IEBAIC0wLDAgKzEsNjEgQEAN Cj4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1l ZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRp b25hbC1vcHRpb25zICItdyAtTzIiIH0gKi8NCj4gPiArDQo+ID4gK3ZvaWQgZmFuY3lfYWJvcnQo Y2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikNCj4gX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9f KSk7DQo+ID4gK3RlbXBsYXRlIDx1bnNpZ25lZCBOLCB0eXBlbmFtZT4gc3RydWN0IHBvbHlfaW50 X3BvZCB7IGludCBjb2VmZnNbTl07IH07DQo+ID4gK3RlbXBsYXRlIDx1bnNpZ25lZCBOLCB0eXBl bmFtZT4gY2xhc3MgcG9seV9pbnQgOiBwdWJsaWMgcG9seV9pbnRfcG9kPE4sDQo+ID4gaW50PiB7 DQo+ID4gK3B1YmxpYzoNCj4gPiArICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2E+IHBvbHlfaW50ICZv cGVyYXRvcis9KGNvbnN0IHBvbHlfaW50X3BvZDxOLA0KPiA+IENhPiAmKTsNCj4gPiArfTsNCj4g PiArdGVtcGxhdGUgPHVuc2lnbmVkIE4sIHR5cGVuYW1lIEM+DQo+ID4gK3RlbXBsYXRlIDx0eXBl bmFtZSBDYT4NCj4gPiArcG9seV9pbnQ8TiwgQz4gJnBvbHlfaW50PE4sIEM+OjpvcGVyYXRvcis9 KGNvbnN0IHBvbHlfaW50X3BvZDxOLCBDYT4NCj4gPiAmYSkgew0KPiA+ICsgIGZvciAoaW50IGkg PSAwOyBpIDwgTjsgaSsrKQ0KPiA+ICsgICAgdGhpcy0+Y29lZmZzW2ldICs9IGEuY29lZmZzW2ld Ow0KPiA+ICsgIHJldHVybiAqdGhpczsNCj4gPiArfQ0KPiA+ICt0ZW1wbGF0ZSA8dW5zaWduZWQg TiwgdHlwZW5hbWUgQ2EsIHR5cGVuYW1lIENiPg0KPiA+ICtwb2x5X2ludDxOLCBsb25nPiBleGFj dF9kaXYocG9seV9pbnRfcG9kPE4sIENhPiwgQ2IpIHsNCj4gPiArICBwb2x5X2ludDxOLCBsb25n PiByOw0KPiA+ICsgIHJldHVybiByOw0KPiA+ICt9DQo+ID4gK3N0cnVjdCB2ZWNfcHJlZml4IHsN Cj4gPiArICB1bnNpZ25lZCBtX251bTsNCj4gPiArfTsNCj4gPiArc3RydWN0IHZsX3B0cjsNCj4g PiArc3RydWN0IHZhX2hlYXAgew0KPiA+ICsgIHR5cGVkZWYgdmxfcHRyIGRlZmF1bHRfbGF5b3V0 Ow0KPiA+ICt9Ow0KPiA+ICt0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lIEEsIHR5cGVuYW1l ID0gdHlwZW5hbWUNCj4gPiBBOjpkZWZhdWx0X2xheW91dD4NCj4gPiArc3RydWN0IHZlYzsNCj4g PiArdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEE+IHN0cnVjdCB2ZWM8VCwgQSwgaW50 PiB7DQo+ID4gKyAgVCAmb3BlcmF0b3JbXSh1bnNpZ25lZCk7DQo+ID4gKyAgdmVjX3ByZWZpeCBt X3ZlY3BmeDsNCj4gPiArICBUIG1fdmVjZGF0YVtdOw0KPiA+ICt9Ow0KPiA+ICt0ZW1wbGF0ZSA8 dHlwZW5hbWUgVCwgdHlwZW5hbWUgQT4gVCAmdmVjPFQsIEEsDQo+ID4gaW50Pjo6b3BlcmF0b3Jb XSh1bnNpZ25lZCBpeCkgew0KPiA+ICsgIG1fdmVjcGZ4Lm1fbnVtID8gZmFuY3lfYWJvcnQoIiIs IDksIF9fRlVOQ1RJT05fXyksIDAgOiAwOw0KPiA+ICsgIHJldHVybiBtX3ZlY2RhdGFbaXhdOw0K PiA+ICt9DQo+ID4gK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgdmVjPFQsIHZhX2hlYXA+ IHsNCj4gPiArICBUICZvcGVyYXRvcltdKHVuc2lnbmVkIGl4KSB7IHJldHVybiBtX3ZlY1tpeF07 IH0NCj4gPiArICB2ZWM8VCwgdmFfaGVhcCwgaW50PiBtX3ZlYzsNCj4gPiArfTsNCj4gPiArY2xh c3MgYXV0b192ZWMgOiBwdWJsaWMgdmVjPHBvbHlfaW50PDIsIGxvbmc+LCB2YV9oZWFwPiB7fTsN Cj4gPiArdGVtcGxhdGUgPHR5cGVuYW1lPiBjbGFzcyB2ZWN0b3JfYnVpbGRlciA6IHB1YmxpYyBh dXRvX3ZlYyB7fTsNCj4gPiArY2xhc3MgaW50X3ZlY3Rvcl9idWlsZGVyIDogcHVibGljIHZlY3Rv cl9idWlsZGVyPGludD4gew0KPiA+ICtwdWJsaWM6DQo+ID4gKyAgaW50X3ZlY3Rvcl9idWlsZGVy KHBvbHlfaW50PDIsIGxvbmc+LCBpbnQsIGludCk7DQo+ID4gK307DQo+ID4gK2Jvb2wgdmVjdF9n cm91cGVkX3N0b3JlX3N1cHBvcnRlZCgpIHsNCj4gPiArICBpbnQgaTsNCj4gPiArICBwb2x5X2lu dDwyLCBsb25nPiBuZWx0Ow0KPiA+ICsgIGludF92ZWN0b3JfYnVpbGRlciBzZWwobmVsdCwgMiwg Myk7DQo+ID4gKyAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykNCj4gPiArICAgIHNlbFtpXSArPSBl eGFjdF9kaXYobmVsdCwgMik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4gZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18zLmNjDQo+ ID4gYi9nY2MvdGVzdHN1aXRlL2crKy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMy5jYw0KPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTJlNWNhNDM0YjJhYzM3YzAzZGJhYTEyDQo+ID4g MjczZmQ4ZTVhYTIwMThjDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3Vp dGUvZysrLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18zLmNjDQo+ID4gQEAgLTAsMCArMSwxNiBA QA0KPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZm ZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJl LWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1hZGRp dGlvbmFsLW9wdGlvbnMgIi13IC1PMiIgfSAqLw0KPiA+ICsNCj4gPiAraW50IGFhcmNoNjRfYWR2 c2ltZF92YWxpZF9pbW1lZGlhdGVfaHNfdmFsMzI7DQo+ID4gK2Jvb2wgYWFyY2g2NF9hZHZzaW1k X3ZhbGlkX2ltbWVkaWF0ZV9ocygpIHsNCj4gPiArICBmb3IgKGludCBzaGlmdCA9IDA7IHNoaWZ0 IDwgMzI7IHNoaWZ0ICs9IDgpDQo+ID4gKyAgICBpZiAoYWFyY2g2NF9hZHZzaW1kX3ZhbGlkX2lt bWVkaWF0ZV9oc192YWwzMiAmIHNoaWZ0KQ0KPiA+ICsgICAgICByZXR1cm4gYWFyY2g2NF9hZHZz aW1kX3ZhbGlkX2ltbWVkaWF0ZV9oc192YWwzMjsNCj4gPiArICBmb3IgKDs7KQ0KPiA+ICsgICAg Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxP T1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzEuYw0KPiA+IGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8xLmMNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uMjQ5NWIzNmE3MmVhZTk0Y2I3YWJjNGEwZA0KPiA+IDE3YTVjOTc5ZmQ3 ODA4Mw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzEuYw0KPiA+IEBAIC0wLDAgKzEsMTEgQEANCj4gPiAr LyogeyBkZy1kbyBydW4gfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlv bnMgIi1PZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBOIDgwMw0K PiA+ICsjZGVmaW5lIFAgMA0KPiA+ICsjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10ZW1wbGF0 ZV8xLmMiDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1Ag VkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzEwLmMNCj4gPiBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMTAuYw0KPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi45YmNkN2Y3ZTU3ZWY5YTFkNDY0OWQxODU2DQo+ID4gOWIzNDA2MDUwZTU0 NjAzDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVhay1ydW5fMTAuYw0KPiA+IEBAIC0wLDAgKzEsMTEgQEANCj4gPiAr LyogeyBkZy1kbyBydW4gfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlv bnMgIi1PZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBOIDgwMA0K PiA+ICsjZGVmaW5lIFAgNzk5DQo+ID4gKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBs YXRlXzIuYyINCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9P UCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMi5jDQo+ID4gYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzIuYw0KPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi42M2Y2MzEwMWE0Njc5MDlmMzI4YmU3ZjNhYw0KPiA+IGJjNWJjYjcyMTk2 N2ZmDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVhay1ydW5fMi5jDQo+ID4gQEAgLTAsMCArMSwxMSBAQA0KPiA+ICsv KiB7IGRnLWRvIHJ1biB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0 IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRh cmdldCB2ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9u cyAiLU9mYXN0IC1zYXZlLXRlbXBzIiB9ICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE4gODAzDQo+ ID4gKyNkZWZpbmUgUCA4MDINCj4gPiArI2luY2x1ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxh dGVfMS5jIg0KPiA+ICsNCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09Q IFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8zLmMNCj4gPiBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fMy5jDQo+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLjYyNmI5NWU5Yjg1MTcwODFkNDFkNzk0ZTkNCj4gPiBlMDI2NGQ2MzAxYzg1 ODkNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl8zLmMNCj4gPiBAQCAtMCwwICsxLDExIEBADQo+ID4gKy8q IHsgZGctZG8gcnVuIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQg dmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFy Z2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItT2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8NCj4gPiArDQo+ID4gKyNkZWZpbmUgTiA4MDMNCj4g PiArI2RlZmluZSBQIDUNCj4gPiArI2luY2x1ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVf MS5jIg0KPiA+ICsNCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZF Q1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl80LmMNCj4gPiBiL2djYy90ZXN0c3VpdGUv Z2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNC5jDQo+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLjdlMGU2NDI2MTIwNTUxMTUyYTdiZDgwMGMNCj4gPiAxNWQ5ZWQ2YWIxNWJhZGEN Cj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrLXJ1bl80LmMNCj4gPiBAQCAtMCwwICsxLDExIEBADQo+ID4gKy8qIHsg ZGctZG8gcnVuIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVj dF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0 IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICIt T2Zhc3QgLXNhdmUtdGVtcHMiIH0gKi8NCj4gPiArDQo+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiAr I2RlZmluZSBQIDI3OA0KPiA+ICsjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10ZW1wbGF0ZV8x LmMiDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVD VE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzUuYw0KPiA+IGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl81LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uMjQyY2Y0ODZmOWM0MDA1NWRmMGFlZjVmZDIzDQo+ID4gOGQxYWZmN2E3YzdkYQ0K PiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3Zl Y3QtZWFybHktYnJlYWstcnVuXzUuYw0KPiA+IEBAIC0wLDAgKzEsMTEgQEANCj4gPiArLyogeyBk Zy1kbyBydW4gfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0 X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQg dmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1P ZmFzdCAtc2F2ZS10ZW1wcyIgfSAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBOIDgwMA0KPiA+ICsj ZGVmaW5lIFAgNzk5DQo+ID4gKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzEu YyINCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNU T1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNi5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzYuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi45ZmU3MTM2YjcyMTNhNDYzY2E2NTczYzYwNA0KPiA+IDc2YjdjOGY1MzFkZGNiDQo+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC1lYXJseS1icmVhay1ydW5fNi5jDQo+ID4gQEAgLTAsMCArMSwxMSBAQA0KPiA+ICsvKiB7IGRn LWRvIHJ1biB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf ZWFybHlfYnJlYWsgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2 ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9m YXN0IC1zYXZlLXRlbXBzIiB9ICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gKyNk ZWZpbmUgUCAwDQo+ID4gKyNpbmNsdWRlICJ2ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzIuYyIN Cj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJ WkVEIiAidmVjdCIgfSB9ICovDQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fNy5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWstcnVuXzcuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwLi4wMmY5M2Q3N2RiYTMxYjkzOGY2ZmQ5ZThjNw0KPiA+IGY1ZTRhY2RlNGFlZWM5DQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1l YXJseS1icmVhay1ydW5fNy5jDQo+ID4gQEAgLTAsMCArMSwxMSBAQA0KPiA+ICsvKiB7IGRnLWRv IHJ1biB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFy bHlfYnJlYWsgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0 X2ludCB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0 IC1zYXZlLXRlbXBzIiB9ICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gKyNkZWZp bmUgUCA4MDINCj4gPiArI2luY2x1ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMi5jIg0K PiA+ICsNCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUkla RUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl84LmMNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1lYXJseS1icmVhay1ydW5fOC5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLmE2MTQ5MjU0NjU2MDZiNTRjNjM4MjIxZmZiDQo+ID4gOTVhNWU4ZDNiZWU3OTcNCj4gPiAt LS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVh cmx5LWJyZWFrLXJ1bl84LmMNCj4gPiBAQCAtMCwwICsxLDExIEBADQo+ID4gKy8qIHsgZGctZG8g cnVuIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJs eV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf aW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3Qg LXNhdmUtdGVtcHMiIH0gKi8NCj4gPiArDQo+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiArI2RlZmlu ZSBQIDUNCj4gPiArI2luY2x1ZGUgInZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMi5jIg0KPiA+ ICsNCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQi ICJ2ZWN0IiB9IH0gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LWVhcmx5LWJyZWFrLXJ1bl85LmMNCj4gPiBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1lYXJseS1icmVhay1ydW5fOS5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g PiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu Ljk0ZTJiOWMzMDE0NTZlZGE4ZjlhZDdlYWENCj4gPiA2NzYwNDU2M2YwYWZlZTcNCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5 LWJyZWFrLXJ1bl85LmMNCj4gPiBAQCAtMCwwICsxLDExIEBADQo+ID4gKy8qIHsgZGctZG8gcnVu IH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9i cmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50 IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QgLXNh dmUtdGVtcHMiIH0gKi8NCj4gPiArDQo+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiArI2RlZmluZSBQ IDI3OA0KPiA+ICsjaW5jbHVkZSAidmVjdC1lYXJseS1icmVhay10ZW1wbGF0ZV8yLmMiDQo+ID4g Kw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIg InZlY3QiIH0gfSAqLw0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtZWFybHktYnJlYWstdGVtcGxhdGVfMS5jDQo+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLmFmNzBhOGUyYTVhOWRjOTc1NmVkYjU1ODBmDQo+ID4gMmRlMDJkZGNjOTVkZTkN Cj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRlXzEuYw0KPiA+IEBAIC0wLDAgKzEsNDcgQEANCj4gPiAr I2lmbmRlZiBODQo+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsj aWZuZGVmIFANCj4gPiArI2RlZmluZSBQIDANCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICt1bnNp Z25lZCB2ZWN0X2FbTl0gPSB7MH07DQo+ID4gK3Vuc2lnbmVkIHZlY3RfYltOXSA9IHswfTsNCj4g PiArDQo+ID4gK19fYXR0cmlidXRlX18oKG5vaXBhLCBub2lubGluZSkpDQo+ID4gK3Vuc2lnbmVk IHRlc3Q0KHVuc2lnbmVkIHgpDQo+ID4gK3sNCj4gPiArIHVuc2lnbmVkIHJldCA9IDA7DQo+ID4g KyBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykNCj4gPiArIHsNCj4gPiArICAgdmVjdF9iW2ld ID0geCArIGk7DQo+ID4gKyAgIGlmICh2ZWN0X2FbaV0gPiB4KQ0KPiA+ICsgICAgIGJyZWFrOw0K PiA+ICsgICB2ZWN0X2FbaV0gPSB4Ow0KPiA+ICsNCj4gPiArIH0NCj4gPiArIHJldHVybiByZXQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gK2V4dGVybiB2b2lkIGFib3J0ICgpOw0KPiA+ICsNCj4gPiAr aW50IG1haW4gKCkNCj4gPiArew0KPiA+ICsNCj4gPiArICBpbnQgeCA9IDE7DQo+ID4gKyAgaW50 IGlkeCA9IFA7DQo+ID4gKyAgdmVjdF9hW2lkeF0gPSB4ICsgMTsNCj4gPiArDQo+ID4gKyAgdGVz dDQoeCk7DQo+ID4gKw0KPiA+ICsgIGlmICh2ZWN0X2JbaWR4XSAhPSAoeCArIGlkeCkpDQo+ID4g KyAgICBhYm9ydCAoKTsNCj4gPiArDQo+ID4gKyAgaWYgKHZlY3RfYVtpZHhdICE9IHggKyAxKQ0K PiA+ICsgICAgYWJvcnQgKCk7DQo+ID4gKw0KPiA+ICsgIGlmIChpZHggPiAwICYmIHZlY3RfYVtp ZHgtMV0gIT0geCkNCj4gPiArICAgIGFib3J0ICgpOw0KPiA+ICsNCj4gPiArfQ0KPiA+IGRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWstdGVtcGxh dGVfMi5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWst dGVtcGxhdGVfMi5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+ IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwZjkyNGQ5MDQ0Mzdl NzE1NjdkMjdjYzFmDQo+ID4gMTA4OWU1NjA3ZGNhMGQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4g KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrLXRlbXBsYXRl XzIuYw0KPiA+IEBAIC0wLDAgKzEsNTAgQEANCj4gPiArI2lmbmRlZiBODQo+ID4gKyNkZWZpbmUg TiA4MDMNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjaWZuZGVmIFANCj4gPiArI2RlZmluZSBQ IDANCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICt1bnNpZ25lZCB2ZWN0X2FbTl0gPSB7MH07DQo+ ID4gK3Vuc2lnbmVkIHZlY3RfYltOXSA9IHswfTsNCj4gPiArDQo+ID4gK19fYXR0cmlidXRlX18o KG5vaXBhLCBub2lubGluZSkpDQo+ID4gK3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgpDQo+ID4g K3sNCj4gPiArIHVuc2lnbmVkIHJldCA9IDA7DQo+ID4gKyBmb3IgKGludCBpID0gMDsgaSA8IE47 IGkrKykNCj4gPiArIHsNCj4gPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ID4gKyAgIGlmICh2 ZWN0X2FbaV0gPiB4KQ0KPiA+ICsgICAgIHJldHVybiBpOw0KPiA+ICsgICB2ZWN0X2FbaV0gPSB4 Ow0KPiA+ICsNCj4gPiArIH0NCj4gPiArIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4g K2V4dGVybiB2b2lkIGFib3J0ICgpOw0KPiA+ICsNCj4gPiAraW50IG1haW4gKCkNCj4gPiArew0K PiA+ICsNCj4gPiArICBpbnQgeCA9IDE7DQo+ID4gKyAgaW50IGlkeCA9IFA7DQo+ID4gKyAgdmVj dF9hW2lkeF0gPSB4ICsgMTsNCj4gPiArDQo+ID4gKyAgdW5zaWduZWQgcmVzID0gdGVzdDQoeCk7 DQo+ID4gKw0KPiA+ICsgIGlmIChyZXMgIT0gaWR4KQ0KPiA+ICsgICAgYWJvcnQgKCk7DQo+ID4g Kw0KPiA+ICsgIGlmICh2ZWN0X2JbaWR4XSAhPSAoeCArIGlkeCkpDQo+ID4gKyAgICBhYm9ydCAo KTsNCj4gPiArDQo+ID4gKyAgaWYgKHZlY3RfYVtpZHhdICE9IHggKyAxKQ0KPiA+ICsgICAgYWJv cnQgKCk7DQo+ID4gKw0KPiA+ICsgIGlmIChpZHggPiAwICYmIHZlY3RfYVtpZHgtMV0gIT0geCkN Cj4gPiArICAgIGFib3J0ICgpOw0KPiA+ICsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMS5jDQo+ID4gYi9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMS5jDQo+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLjUxZTdkNjQ4OWI5OWMyNWI5YjRiM2QxYzgNCj4gPiAzOWY5ODU2MmI2ZDRk ZDcNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LWVhcmx5LWJyZWFrXzEuYw0KPiA+IEBAIC0wLDAgKzEsMjcgQEANCj4gPiArLyogeyBk Zy1kbyBjb21waWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQg dmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFy Z2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItT2Zhc3QiIH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIE4N Cj4gPiArI2RlZmluZSBOIDgwMw0KPiA+ICsjZW5kaWYNCj4gPiArdW5zaWduZWQgdmVjdF9hW05d Ow0KPiA+ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ID4gKw0KPiA+ICt1bnNpZ25lZCB0ZXN0NCh1 bnNpZ25lZCB4KQ0KPiA+ICt7DQo+ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ICsgZm9yIChp bnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gKyB7DQo+ID4gKyAgIHZlY3RfYltpXSA9IHggKyBp Ow0KPiA+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gPiArICAgICBicmVhazsNCj4gPiArICAg dmVjdF9hW2ldID0geDsNCj4gPiArDQo+ID4gKyB9DQo+ID4gKyByZXR1cm4gcmV0Ow0KPiA+ICt9 DQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1i cmVha18xMC5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJl YWtfMTAuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTRhZDE3NjMyMDJkZmRhYjNl ZDc5NjFlDQo+ID4gYWQ1MTE0ZmNjNjFhMTFiDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMC5jDQo+ID4gQEAg LTAsMCArMSwyOCBAQA0KPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ICsvKiB7IGRn LXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyog eyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiAr LyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiA+ICsNCj4gPiArLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0g Ki8NCj4gPiArDQo+ID4gKyNpZm5kZWYgTg0KPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4gKyNlbmRp Zg0KPiA+ICt1bnNpZ25lZCB2ZWN0X2FbTl07DQo+ID4gK3Vuc2lnbmVkIHZlY3RfYltOXTsNCj4g PiArDQo+ID4gK3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgsaW50IHksIGludCB6KQ0KPiA+ICt7 DQo+ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBp KyspDQo+ID4gKyB7DQo+ID4gKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KPiA+ICsgICBpZiAodmVj dF9hW2ldID4geCkNCj4gPiArICAgICBicmVhazsNCj4gPiArICAgdmVjdF9hW2ldID0geDsNCj4g PiArIH0NCj4gPiArDQo+ID4gKyByZXQgPSB4ICsgeSAqIHo7DQo+ID4gKyByZXR1cm4gcmV0Ow0K PiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1l YXJseS1icmVha18xMS5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWtfMTEuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gPg0K PiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjEzZGQ5OTA5ZmIw OTI3OGRkOTJhODFhDQo+ID4gMjRlZjg1NDk5NGE5ODkwDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xMS5jDQo+ ID4gQEAgLTAsMCArMSwzMSBAQA0KPiA+ICsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KPiA+ICsv KiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4g PiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsN Cj4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1PZmFzdCIgfSAqLw0KPiA+ICsNCj4g PiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0 IiB9IH0gKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgTg0KPiA+ICsjZGVmaW5lIE4gODAzDQo+ID4g KyNlbmRpZg0KPiA+ICt1bnNpZ25lZCB2ZWN0X2FbTl07DQo+ID4gK3Vuc2lnbmVkIHZlY3RfYltO XTsNCj4gPiArDQo+ID4gK3Vuc2lnbmVkIHRlc3Q0KHVuc2lnbmVkIHgsIGludCB5KQ0KPiA+ICt7 DQo+ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ICtmb3IgKGludCBvID0gMDsgbyA8IHk7IG8r KykNCj4gPiArew0KPiA+ICsgcmV0ICs9IG87DQo+ID4gKyBmb3IgKGludCBpID0gMDsgaSA8IE47 IGkrKykNCj4gPiArIHsNCj4gPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ID4gKyAgIGlmICh2 ZWN0X2FbaV0gPiB4KQ0KPiA+ICsgICAgIGJyZWFrOw0KPiA+ICsgICB2ZWN0X2FbaV0gPSB4Ow0K PiA+ICsNCj4gPiArIH0NCj4gPiArfQ0KPiA+ICsgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+IGRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTIu Yw0KPiA+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEyLmMN Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2MxMGYzMjM4ZjFjYjhlMTMwN2UwMjRhM2UN Cj4gPiBiY2I1YzI1YTM5ZDFiMg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTIuYw0KPiA+IEBAIC0wLDAgKzEs MzEgQEANCj4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJl LWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGct YWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4g Kw0KPiA+ICsjaWZuZGVmIE4NCj4gPiArI2RlZmluZSBOIDgwMw0KPiA+ICsjZW5kaWYNCj4gPiAr dW5zaWduZWQgdmVjdF9hW05dOw0KPiA+ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ID4gKw0KPiA+ ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4LCBpbnQgeSkNCj4gPiArew0KPiA+ICsgdW5zaWdu ZWQgcmV0ID0gMDsNCj4gPiArZm9yIChpbnQgbyA9IDA7IG8gPCB5OyBvKyspDQo+ID4gK3sNCj4g PiArIHJldCArPSBvOw0KPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gKyB7 DQo+ID4gKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KPiA+ICsgICBpZiAodmVjdF9hW2ldID4geCkN Cj4gPiArICAgICByZXR1cm4gdmVjdF9hW2ldOw0KPiA+ICsgICB2ZWN0X2FbaV0gPSB4Ow0KPiA+ ICsNCj4gPiArIH0NCj4gPiArfQ0KPiA+ICsgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+IGRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTMuYw0K PiA+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzEzLmMNCj4g PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjk2N2I3Mzk1ZWQ3YzE5ZTM4YTQzNmQ2ZQ0KPiA+ IGRjZmU3YzE1ODBjNzExMw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTMuYw0KPiA+IEBAIC0wLDAgKzEsMjcg QEANCj4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRk aXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVEIiAidmVjdCIgfSB9ICovDQo+ID4gKw0K PiA+ICsjaWZuZGVmIE4NCj4gPiArI2RlZmluZSBOIDgwMw0KPiA+ICsjZW5kaWYNCj4gPiArdW5z aWduZWQgdmVjdF9hW05dOw0KPiA+ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ID4gKw0KPiA+ICt1 bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiA+ICt7DQo+ID4gKyB1bnNpZ25lZCByZXQgPSAw Ow0KPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gKyB7DQo+ID4gKyAgIHZl Y3RfYltpXSA9IHggKyBpOw0KPiA+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4gPiArICAgICBy ZXR1cm4gdmVjdF9hW2ldICogeDsNCj4gPiArICAgdmVjdF9hW2ldID0geDsNCj4gPiArDQo+ID4g KyB9DQo+ID4gKyByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xNC5jDQo+ID4gYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfMTQuYw0KPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi4wM2NjZTVjZjZjYWRlY2I1MjBiNDZiZTY2Ng0KPiA+IGJmNjA4ZTNiYzZhNTEx DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3Qv dmVjdC1lYXJseS1icmVha18xNC5jDQo+ID4gQEAgLTAsMCArMSwyNSBAQA0KPiA+ICsvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2 ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMg Ii1PZmFzdCIgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w ICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiArDQo+ID4gKyNkZWZpbmUgTiA4 MDMNCj4gPiArdW5zaWduZWQgdmVjdF9hW05dOw0KPiA+ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ ID4gKw0KPiA+ICtpbnQgdGVzdDQodW5zaWduZWQgeCkNCj4gPiArew0KPiA+ICsgdW5zaWduZWQg cmV0ID0gMDsNCj4gPiArIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiA+ICsgew0KPiA+ ICsgICB2ZWN0X2JbaV0gPSB4ICsgaTsNCj4gPiArICAgaWYgKHZlY3RfYVtpXSA+IHgpDQo+ID4g KyAgICAgcmV0dXJuIGk7DQo+ID4gKyAgIHZlY3RfYVtpXSArPSB4ICogdmVjdF9iW2ldOw0KPiA+ ICsNCj4gPiArIH0NCj4gPiArIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzE1LmMNCj4gPiBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18xNS5jDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLmRlYzY4NzJlMTExNWZmNjY2OTVmNWE1MDBmZg0KPiA+IGE3Y2Ew MWMwZjhkM2ENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzE1LmMNCj4gPiBAQCAtMCwwICsxLDI1IEBADQo+ID4g Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0 aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwt b3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ICsNCj4gPiArI2Rl ZmluZSBOIDgwMw0KPiA+ICt1bnNpZ25lZCB2ZWN0X2FbTl07DQo+ID4gK3Vuc2lnbmVkIHZlY3Rf YltOXTsNCj4gPiArDQo+ID4gK2ludCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiA+ICt7DQo+ID4gKyBp bnQgcmV0ID0gMDsNCj4gPiArIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiA+ICsgew0K PiA+ICsgICB2ZWN0X2JbaV0gPSB4ICsgaTsNCj4gPiArICAgaWYgKHZlY3RfYVtpXSA+IHgpDQo+ ID4gKyAgICAgcmV0dXJuIGk7DQo+ID4gKyAgIHZlY3RfYVtpXSArPSB4ICogdmVjdF9iW2ldOw0K PiA+ICsNCj4gPiArIH0NCj4gPiArIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIuYw0KPiA+IGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzIuYw0KPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi43MjY4ZjZhZTI0ODVkMDI3NGZkODVlYTUzYw0KPiA+IGMxZTQ0 ZWY0Yjg0ZDVjDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha18yLmMNCj4gPiBAQCAtMCwwICsxLDI3IEBADQo+ID4g Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUt dGFyZ2V0IHZlY3RfZWFybHlfYnJlYWsgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0 aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwt b3B0aW9ucyAiLU9mYXN0IiB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ICsNCj4gPiArI2lu Y2x1ZGUgPGNvbXBsZXguaD4NCj4gPiArDQo+ID4gKyNkZWZpbmUgTiAxMDI0DQo+ID4gK2NvbXBs ZXggZG91YmxlIHZlY3RfYVtOXTsNCj4gPiArY29tcGxleCBkb3VibGUgdmVjdF9iW05dOw0KPiA+ ICsNCj4gPiArY29tcGxleCBkb3VibGUgdGVzdDQoY29tcGxleCBkb3VibGUgeCkNCj4gPiArew0K PiA+ICsgY29tcGxleCBkb3VibGUgcmV0ID0gMDsNCj4gPiArIGZvciAoaW50IGkgPSAwOyBpIDwg TjsgaSsrKQ0KPiA+ICsgew0KPiA+ICsgICB2ZWN0X2JbaV0gKz0geCArIGk7DQo+ID4gKyAgIGlm ICh2ZWN0X2FbaV0gPT0geCkNCj4gPiArICAgICByZXR1cm4gaTsNCj4gPiArICAgdmVjdF9hW2ld ICs9IHggKiB2ZWN0X2JbaV07DQo+ID4gKw0KPiA+ICsgfQ0KPiA+ICsgcmV0dXJuIHJldDsNCj4g PiArfQ0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFy bHktYnJlYWtfMy5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHkt YnJlYWtfMy5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjNmQyOGJkMmQ2ZTZlNzk0 MTQ2YmFmODkNCj4gPiBlNDNjM2I3MDI5M2I3ZDkNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzMuYw0KPiA+IEBA IC0wLDAgKzEsMjAgQEANCj4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gPiArLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8q IHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4g Ky8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCj4gPiArDQo+ID4gKy8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3QgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3Qi IH0gfSAqLw0KPiA+ICsNCj4gPiArdW5zaWduZWQgdGVzdDQoY2hhciB4LCBjaGFyICp2ZWN0LCBp bnQgbikNCj4gPiArew0KPiA+ICsgdW5zaWduZWQgcmV0ID0gMDsNCj4gPiArIGZvciAoaW50IGkg PSAwOyBpIDwgbjsgaSsrKQ0KPiA+ICsgew0KPiA+ICsgICBpZiAodmVjdFtpXSA+IHgpDQo+ID4g KyAgICAgcmV0dXJuIDE7DQo+ID4gKw0KPiA+ICsgICB2ZWN0W2ldID0geDsNCj4gPiArIH0NCj4g PiArIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzQuYw0KPiA+IGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzQuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li4yMTZjNTZmYWYzMzA0NDliZjE5NjliN2U1MQ0KPiA+IGZmMWU5NDI3MGRjODYxDQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJs eS1icmVha180LmMNCj4gPiBAQCAtMCwwICsxLDIzIEBADQo+ID4gKy8qIHsgZGctZG8gY29tcGls ZSB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfZWFybHlf YnJlYWsgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2lu dCB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9mYXN0IiB9 ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICJMT09Q IFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiArDQo+ID4gKyNkZWZpbmUgTiAxMDI0DQo+ ID4gK3Vuc2lnbmVkIHZlY3RbTl07DQo+ID4gKw0KPiA+ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25l ZCB4KQ0KPiA+ICt7DQo+ID4gKyB1bnNpZ25lZCByZXQgPSAwOw0KPiA+ICsgZm9yIChpbnQgaSA9 IDA7IGkgPCBOOyBpKyspDQo+ID4gKyB7DQo+ID4gKyAgIGlmIChpID4gMTYgJiYgdmVjdFtpXSA+ IHgpDQo+ID4gKyAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICsgICB2ZWN0W2ldID0geDsNCj4gPiAr IH0NCj4gPiArIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzUuYw0KPiA+IGIvZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzUuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+ID4gaW5kZXgNCj4gPg0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi40YTM2ZDY5NzlkYjFmZDFmOTdiYTJhMjkwZg0KPiA+IDc4YWMzYjg0ZjZkZTI0DQo+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVj dC1lYXJseS1icmVha181LmMNCj4gPiBAQCAtMCwwICsxLDI0IEBADQo+ID4gKy8qIHsgZGctZG8g Y29tcGlsZSB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3Rf ZWFybHlfYnJlYWsgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2 ZWN0X2ludCB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLU9m YXN0IiB9ICovDQo+ID4gKw0KPiA+ICsvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIkxP T1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBOIDEwMjQN Cj4gPiArdW5zaWduZWQgdmVjdF9hW05dOw0KPiA+ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ID4g Kw0KPiA+ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiA+ICt7DQo+ID4gKyB1bnNpZ25l ZCByZXQgPSAwOw0KPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gKyB7DQo+ ID4gKyAgIHZlY3RfYltpXSA9IHggKyBpOw0KPiA+ICsgICBpZiAodmVjdF9hW2ldID4geCkNCj4g PiArICAgICByZXR1cm4gdmVjdF9hW2ldOw0KPiA+ICsgICB2ZWN0X2FbaV0gPSB4Ow0KPiA+ICsg fQ0KPiA+ICsgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNi5jDQo+ID4gYi9nY2MvdGVzdHN1aXRl L2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfNi5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAuLjA5NjMyZDlhZmRhN2UwN2YxYTg0MTc1MTRlDQo+ID4gZjc3MzU2ZjAwMDQ1YmQNCj4g PiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LWVhcmx5LWJyZWFrXzYuYw0KPiA+IEBAIC0wLDAgKzEsMjYgQEANCj4gPiArLyogeyBkZy1kbyBj b21waWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9l YXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZl Y3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zh c3QiIH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC1ub3Qg IkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBOIDEw MjQNCj4gPiArdW5zaWduZWQgdmVjdF9hW05dOw0KPiA+ICt1bnNpZ25lZCB2ZWN0X2JbTl07DQo+ ID4gKw0KPiA+ICt1bnNpZ25lZCB0ZXN0NCh1bnNpZ25lZCB4KQ0KPiA+ICt7DQo+ID4gKyB1bnNp Z25lZCByZXQgPSAwOw0KPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCAoTi8yKTsgaSs9MikNCj4g PiArIHsNCj4gPiArICAgdmVjdF9iW2ldID0geCArIGk7DQo+ID4gKyAgIHZlY3RfYltpKzFdID0g eCArIGkrMTsNCj4gPiArICAgaWYgKHZlY3RfYVtpXSA+IHggfHwgdmVjdF9hW2krMV0gPiB4KQ0K PiA+ICsgICAgIGJyZWFrOw0KPiA+ICsgICB2ZWN0X2FbaV0gKz0geCAqIHZlY3RfYltpXTsNCj4g PiArICAgdmVjdF9hW2krMV0gKz0geCAqIHZlY3RfYltpKzFdOw0KPiA+ICsgfQ0KPiA+ICsgcmV0 dXJuIHJldDsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtZWFybHktYnJlYWtfNy5jDQo+ID4gYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWtfNy5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRl eA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwZmQ4 YjQyOTUyYzQyZjNkM2EwMTRkYTEwDQo+ID4gMzkzMWNhMzk0NDIzZDUNCj4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFr XzcuYw0KPiA+IEBAIC0wLDAgKzEsMjcgQEANCj4gPiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8N Cj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9 ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8N Cj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCj4g PiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiTE9PUCBWRUNUT1JJWkVE IiAidmVjdCIgfSB9ICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8Y29tcGxleC5oPg0KPiA+ICsN Cj4gPiArI2RlZmluZSBOIDEwMjQNCj4gPiArY29tcGxleCBkb3VibGUgdmVjdF9hW05dOw0KPiA+ ICtjb21wbGV4IGRvdWJsZSB2ZWN0X2JbTl07DQo+ID4gKw0KPiA+ICtjb21wbGV4IGRvdWJsZSB0 ZXN0NChjb21wbGV4IGRvdWJsZSB4KQ0KPiA+ICt7DQo+ID4gKyBjb21wbGV4IGRvdWJsZSByZXQg PSAwOw0KPiA+ICsgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gKyB7DQo+ID4gKyAg IHZlY3RfYltpXSArPSB4ICsgaTsNCj4gPiArICAgaWYgKHZlY3RfYVtpXSA9PSB4KQ0KPiA+ICsg ICAgIGJyZWFrOw0KPiA+ICsgICB2ZWN0X2FbaV0gKz0geCAqIHZlY3RfYltpXTsNCj4gPiArDQo+ ID4gKyB9DQo+ID4gKyByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha184LmMNCj4gPiBiL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1lYXJseS1icmVha184LmMNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4DQo+ID4NCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uYWU3MDZiMjk1MmNmY2VjZjIwNTQ2YTY3YTcNCj4gPiAzNWI4ZDkwMmNiYjYw Nw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtZWFybHktYnJlYWtfOC5jDQo+ID4gQEAgLTAsMCArMSwyNyBAQA0KPiA+ICsvKiB7IGRn LWRvIGNvbXBpbGUgfSAqLw0KPiA+ICsvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2 ZWN0X2Vhcmx5X2JyZWFrIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9pbnQgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMg Ii1PZmFzdCIgfSAqLw0KPiA+ICsNCj4gPiArLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w ICJMT09QIFZFQ1RPUklaRUQiICJ2ZWN0IiB9IH0gKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxj b21wbGV4Lmg+DQo+ID4gKw0KPiA+ICsjZGVmaW5lIE4gMTAyNA0KPiA+ICtjaGFyIHZlY3RfYVtO XTsNCj4gPiArY2hhciB2ZWN0X2JbTl07DQo+ID4gKw0KPiA+ICtjaGFyIHRlc3Q0KGNoYXIgeCwg Y2hhciAqIHJlc3RyaWN0IHJlcykNCj4gPiArew0KPiA+ICsgY2hhciByZXQgPSAwOw0KPiA+ICsg Zm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspDQo+ID4gKyB7DQo+ID4gKyAgIHZlY3RfYltpXSAr PSB4ICsgaTsNCj4gPiArICAgaWYgKHZlY3RfYVtpXSA+IHgpDQo+ID4gKyAgICAgYnJlYWs7DQo+ ID4gKyAgIHZlY3RfYVtpXSArPSB4ICogdmVjdF9iW2ldOw0KPiA+ICsgICByZXNbaV0gKj0gdmVj dF9iW2ldOw0KPiA+ICsgfQ0KPiA+ICsgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+IGRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOS5jDQo+ID4g Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtZWFybHktYnJlYWtfOS5jDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleA0KPiA+DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1MGYwMmYzYzdjYWVmNDU3YWRiZTFiZTgwDQo+ID4gMmJi YTUxY2Q4MTgzOTMNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LWVhcmx5LWJyZWFrXzkuYw0KPiA+IEBAIC0wLDAgKzEsMjcgQEANCj4g PiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCj4gPiArLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2 ZS10YXJnZXQgdmVjdF9lYXJseV9icmVhayB9ICovDQo+ID4gKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctYWRkaXRpb25h bC1vcHRpb25zICItT2Zhc3QiIH0gKi8NCj4gPiArDQo+ID4gKy8qIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC1ub3QgIkxPT1AgVkVDVE9SSVpFRCIgInZlY3QiIH0gfSAqLw0KPiA+ICsNCj4g PiArI2lmbmRlZiBODQo+ID4gKyNkZWZpbmUgTiA4MDMNCj4gPiArI2VuZGlmDQo+ID4gK3Vuc2ln bmVkIHZlY3RfYVtOXTsNCj4gPiArdW5zaWduZWQgdmVjdF9iW05dOw0KPiA+ICsNCj4gPiArdW5z aWduZWQgdGVzdDQodW5zaWduZWQgeCkNCj4gPiArew0KPiA+ICsgdW5zaWduZWQgcmV0ID0gMDsN Cj4gPiArIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQ0KPiA+ICsgew0KPiA+ICsgICB2ZWN0 X2FbaV0gPSB4ICsgaTsNCj4gPiArICAgaWYgKHZlY3RfYVtpXSA+IHgpDQo+ID4gKyAgICAgYnJl YWs7DQo+ID4gKyAgIHZlY3RfYVtpXSA9IHg7DQo+ID4gKw0KPiA+ICsgfQ0KPiA+ICsgcmV0dXJu IHJldDsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2xpYi90YXJnZXQt c3VwcG9ydHMuZXhwIGIvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LQ0KPiA+IHN1cHBvcnRzLmV4 cA0KPiA+IGluZGV4DQo+ID4NCj4gY2NiYmVlODQ3Zjc1NWQ2ZjMwMTE2ZDViMzhlNDAyN2E5OThi NDhmZC4uNWNiZjU0YmQyYTIzZGZkYzVkYzdiMTQ4Yg0KPiA+IDBkYzZlZDRjNjM4MTRhZSAxMDA2 NDQNCj4gPiAtLS0gYS9nY2MvdGVzdHN1aXRlL2xpYi90YXJnZXQtc3VwcG9ydHMuZXhwDQo+ID4g KysrIGIvZ2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LXN1cHBvcnRzLmV4cA0KPiA+IEBAIC0zNjQ1 LDYgKzM2NDUsMTggQEAgcHJvYyBjaGVja19lZmZlY3RpdmVfdGFyZ2V0X3ZlY3RfaW50IHsgfSB7 DQo+ID4gIAl9fV0NCj4gPiAgfQ0KPiA+DQo+ID4gKyMgUmV0dXJuIDEgaWYgdGhlIHRhcmdldCBz dXBwb3J0cyBoYXJkd2FyZSB2ZWN0b3JpemF0aW9uIG9mIGVhcmx5IGJyZWFrcywNCj4gPiArIyAw IG90aGVyd2lzZS4NCj4gPiArIw0KPiA+ICsjIFRoaXMgd29uJ3QgY2hhbmdlIGZvciBkaWZmZXJl bnQgc3VidGFyZ2V0cyBzbyBjYWNoZSB0aGUgcmVzdWx0Lg0KPiA+ICsNCj4gPiArcHJvYyBjaGVj a19lZmZlY3RpdmVfdGFyZ2V0X3ZlY3RfZWFybHlfYnJlYWsgeyB9IHsNCj4gPiArICAgIHJldHVy biBbY2hlY2tfY2FjaGVkX2VmZmVjdGl2ZV90YXJnZXRfaW5kZXhlZCB2ZWN0X2Vhcmx5X2JyZWFr IHsNCj4gPiArICAgICAgZXhwciB7DQo+ID4gKwkoW2lzdGFyZ2V0IGFhcmNoNjQqLSotKl0NCj4g PiArCSAmJiBbY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9hYXJjaDY0X3N2ZV0pDQo+ID4gKwl9fV0N Cj4gPiArfQ0KPiA+ICAjIFJldHVybiAxIGlmIHRoZSB0YXJnZXQgc3VwcG9ydHMgaGFyZHdhcmUg dmVjdG9yaXphdGlvbiBvZiBjb21wbGV4DQo+ID4gYWRkaXRpb25zIG9mDQo+ID4gICMgYnl0ZSwg MCBvdGhlcndpc2UuDQo+ID4gICMNCj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc2NhbGFyLWV2 b2x1dGlvbi5oIGIvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5oDQo+ID4gaW5kZXgNCj4gPg0K PiAwZjkwMjA3YmM3MzNkYjNjZjg1OTc5ZDliMGI5NjJhZWZhMDgzMWQ2Li41YWY3ZDJiYmEwZDYy MTk1NzA0YThkNDFlDQo+ID4gZjZlNjAwMzI3MTY5NzcwIDEwMDY0NA0KPiA+IC0tLSBhL2djYy90 cmVlLXNjYWxhci1ldm9sdXRpb24uaA0KPiA+ICsrKyBiL2djYy90cmVlLXNjYWxhci1ldm9sdXRp b24uaA0KPiA+IEBAIC0yMyw2ICsyMyw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUg Q09QWUlORzMuICBJZiBub3Qgc2VlDQo+ID4NCj4gPiAgZXh0ZXJuIHRyZWUgbnVtYmVyX29mX2xh dGNoX2V4ZWN1dGlvbnMgKGNsYXNzIGxvb3AgKik7DQo+ID4gIGV4dGVybiBnY29uZCAqZ2V0X2xv b3BfZXhpdF9jb25kaXRpb24gKGNvbnN0IGNsYXNzIGxvb3AgKik7DQo+ID4gK2V4dGVybiBnY29u ZCAqZ2V0X2VkZ2VfY29uZGl0aW9uIChlZGdlKTsNCj4gPg0KPiA+ICBleHRlcm4gdm9pZCBzY2V2 X2luaXRpYWxpemUgKHZvaWQpOw0KPiA+ICBleHRlcm4gYm9vbCBzY2V2X2luaXRpYWxpemVkX3Ag KHZvaWQpOw0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS1zY2FsYXItZXZvbHV0aW9uLmNjIGIv Z2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5jYw0KPiA+IGluZGV4DQo+ID4NCj4gN2UyYTNlOTg2 NjE5ZGU4N2U0YWU5ZGFmMTYxOThiZTFmMTNiOTE3Yy4uMzAxMjg3MWRkN2Y5YTdkMTg5N2Y5NmEy OQ0KPiA+IGIxYjBiMjhkOTBjYjYzZiAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvdHJlZS1zY2FsYXIt ZXZvbHV0aW9uLmNjDQo+ID4gKysrIGIvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5jYw0KPiA+ IEBAIC04ODQsNyArODg0LDcgQEAgc2Nldl9kZnM6OmFkZF90b19ldm9sdXRpb24gKHRyZWUgY2hy ZWNfYmVmb3JlLA0KPiA+IGVudW0gdHJlZV9jb2RlIGNvZGUsDQo+ID4gICAgcmV0dXJuIHJlczsN Cj4gPiAgfQ0KPiA+DQo+ID4gLQ0KPiA+ICsNCj4gPg0KPiA+DQo+ID4gIC8qIEZvbGxvdyB0aGUg c3NhIGVkZ2UgaW50byB0aGUgYmluYXJ5IGV4cHJlc3Npb24gUkhTMCBDT0RFIFJIUzEuDQo+ID4g ICAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50IGhhcyBi ZWVuIGZvdW5kLiAgKi8NCj4gPg0KPiA+IEBAIC0xMjk1LDggKzEyOTUsMTUgQEAgdGFpbF9yZWN1 cnNlOg0KPiA+ICBnY29uZCAqDQo+ID4gIGdldF9sb29wX2V4aXRfY29uZGl0aW9uIChjb25zdCBj bGFzcyBsb29wICpsb29wKQ0KPiA+ICB7DQo+ID4gKyAgcmV0dXJuIGdldF9lZGdlX2NvbmRpdGlv biAobm9ybWFsX2V4aXQgKGxvb3ApKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogSWYgdGhlIHN0 YXRlbWVudCBqdXN0IGJlZm9yZSB0aGUgRVhJVF9FREdFIGNvbnRhaW5zIGEgY29uZGl0aW9uIHRo ZW4NCj4gPiArICAgcmV0dXJuIHRoZSBjb25kaXRpb24sIG90aGVyd2lzZSBOVUxMLiAqLw0KPiA+ ICsNCj4gPiArZ2NvbmQgKg0KPiA+ICtnZXRfZWRnZV9jb25kaXRpb24gKGVkZ2UgZXhpdF9lZGdl KXsNCj4gPiAgICBnY29uZCAqcmVzID0gTlVMTDsNCj4gPiAtICBlZGdlIGV4aXRfZWRnZSA9IHNp bmdsZV9leGl0IChsb29wKTsNCj4gPg0KPiA+ICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxh Z3MgJiBUREZfU0NFVikpDQo+ID4gICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICIoZ2V0X2xvb3Bf ZXhpdF9jb25kaXRpb24gXG4gICIpOw0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LWRh dGEtcmVmcy5jYyBiL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmNjDQo+ID4gaW5kZXgNCj4gPg0K PiA0YTIzZDYxNzJhYWExMmFkNzA0OWRjNjI2ZTVjNGFmYmQ1Y2EzZjc0Li4wMmUzNzMxNzE2NzU0 MzJjZDMyYzRhNzI0NA0KPiA+IDBlZWJkZmY5ODhiZGNmIDEwMDY0NA0KPiA+IC0tLSBhL2djYy90 cmVlLXZlY3QtZGF0YS1yZWZzLmNjDQo+ID4gKysrIGIvZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMu Y2MNCj4gPiBAQCAtMjA3Miw3ICsyMDcyLDcgQEAgdmVjdF9lbmhhbmNlX2RhdGFfcmVmc19hbGln bm1lbnQNCj4gPiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvKQ0KPiA+DQo+ID4gICAgLyogQ2hl Y2sgaWYgd2UgY2FuIHBvc3NpYmx5IHBlZWwgdGhlIGxvb3AuICAqLw0KPiA+ICAgIGlmICghdmVj dF9jYW5fYWR2YW5jZV9pdnNfcCAobG9vcF92aW5mbykNCj4gPiAtICAgICAgfHwgIXNscGVlbF9j YW5fZHVwbGljYXRlX2xvb3BfcCAobG9vcCwgc2luZ2xlX2V4aXQgKGxvb3ApKQ0KPiA+ICsgICAg ICB8fCAhc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChsb29wX3ZpbmZvLCBub3JtYWxfZXhp dCAobG9vcCkpDQo+ID4gICAgICAgIHx8IGxvb3AtPmlubmVyKQ0KPiA+ICAgICAgZG9fcGVlbGlu ZyA9IGZhbHNlOw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtbG9vcC1tYW5p cC5jYyBiL2djYy90cmVlLXZlY3QtbG9vcC1tYW5pcC5jYw0KPiA+IGluZGV4DQo+ID4NCj4gMWQ5 NjEzMGM5ODVlMmRlZmQxNDFjZmRmNjAyMjI0YzczYjRiNDFmMi4uMGIyYTQ5MjA3NTRkODNhZWIz Nzk1YjQzNQ0KPiA+IDY5M2Q2MWFkY2ZlOTJiNiAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvdHJlZS12 ZWN0LWxvb3AtbWFuaXAuY2MNCj4gPiArKysgYi9nY2MvdHJlZS12ZWN0LWxvb3AtbWFuaXAuY2MN Cj4gPiBAQCAtNzcwLDcgKzc3MCw3IEBAIHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX3BhcnRpYWxf dmVjdG9ycyAoY2xhc3MgbG9vcA0KPiA+ICpsb29wLA0KPiA+ICAgIGFkZF9oZWFkZXJfc2VxIChs b29wLCBoZWFkZXJfc2VxKTsNCj4gPg0KPiA+ICAgIC8qIEdldCBhIGJvb2xlYW4gcmVzdWx0IHRo YXQgdGVsbHMgdXMgd2hldGhlciB0byBpdGVyYXRlLiAgKi8NCj4gPiAtICBlZGdlIGV4aXRfZWRn ZSA9IHNpbmdsZV9leGl0IChsb29wKTsNCj4gPiArICBlZGdlIGV4aXRfZWRnZSA9IG5vcm1hbF9l eGl0IChsb29wKTsNCj4gPiAgICB0cmVlX2NvZGUgY29kZSA9IChleGl0X2VkZ2UtPmZsYWdzICYg RURHRV9UUlVFX1ZBTFVFKSA/IEVRX0VYUFIgOg0KPiA+IE5FX0VYUFI7DQo+ID4gICAgdHJlZSB6 ZXJvX2N0cmwgPSBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBFICh0ZXN0X2N0cmwpKTsNCj4gPiAg ICBnY29uZCAqY29uZF9zdG10ID0gZ2ltcGxlX2J1aWxkX2NvbmQgKGNvZGUsIHRlc3RfY3RybCwg emVyb19jdHJsLA0KPiA+IEBAIC03ODksNyArNzg5LDcgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRp b25fcGFydGlhbF92ZWN0b3JzIChjbGFzcyBsb29wDQo+ID4gKmxvb3AsDQo+ID4gICAgaWYgKGZp bmFsX2l2KQ0KPiA+ICAgICAgew0KPiA+ICAgICAgICBnYXNzaWduICphc3NpZ24gPSBnaW1wbGVf YnVpbGRfYXNzaWduIChmaW5hbF9pdiwgb3JpZ19uaXRlcnMpOw0KPiA+IC0gICAgICBnc2lfaW5z ZXJ0X29uX2VkZ2VfaW1tZWRpYXRlIChzaW5nbGVfZXhpdCAobG9vcCksIGFzc2lnbik7DQo+ID4g KyAgICAgIGdzaV9pbnNlcnRfb25fZWRnZV9pbW1lZGlhdGUgKGV4aXRfZWRnZSwgYXNzaWduKTsN Cj4gPiAgICAgIH0NCj4gPg0KPiA+ICAgIHJldHVybiBjb25kX3N0bXQ7DQo+ID4gQEAgLTc5OSw3 ICs3OTksOCBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9wYXJ0aWFsX3ZlY3RvcnMgKGNsYXNz IGxvb3ANCj4gPiAqbG9vcCwNCj4gPiAgICAgbG9vcCBoYW5kbGVzIGV4YWN0bHkgVkYgc2NhbGFy cyBwZXIgaXRlcmF0aW9uLiAgKi8NCj4gPg0KPiA+ICBzdGF0aWMgZ2NvbmQgKg0KPiA+IC12ZWN0 X3NldF9sb29wX2NvbmRpdGlvbl9ub3JtYWwgKGNsYXNzIGxvb3AgKmxvb3AsIHRyZWUgbml0ZXJz LCB0cmVlIHN0ZXAsDQo+ID4gK3ZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAobG9vcF92 ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+ICsJCQkJY2xhc3MgbG9vcCAqbG9vcCwgdHJlZSBuaXRl cnMsIHRyZWUgc3RlcCwNCj4gPiAgCQkJCXRyZWUgZmluYWxfaXYsIGJvb2wgbml0ZXJzX21heWJl X3plcm8sDQo+ID4gIAkJCQlnaW1wbGVfc3RtdF9pdGVyYXRvciBsb29wX2NvbmRfZ3NpKQ0KPiA+ ICB7DQo+ID4gQEAgLTgwNyw3ICs4MDgsNyBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3Jt YWwgKGNsYXNzIGxvb3AgKmxvb3AsDQo+ID4gdHJlZSBuaXRlcnMsIHRyZWUgc3RlcCwNCj4gPiAg ICBnY29uZCAqY29uZF9zdG10Ow0KPiA+ICAgIGdjb25kICpvcmlnX2NvbmQ7DQo+ID4gICAgZWRn ZSBwZSA9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApOw0KPiA+IC0gIGVkZ2UgZXhpdF9lZGdl ID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0KPiA+ICsgIGVkZ2UgZXhpdF9lZGdlID0gbm9ybWFsX2V4 aXQgKGxvb3ApOw0KPiA+ICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGluY3JfZ3NpOw0KPiA+ICAg IGJvb2wgaW5zZXJ0X2FmdGVyOw0KPiA+ICAgIGVudW0gdHJlZV9jb2RlIGNvZGU7DQo+ID4gQEAg LTg3Miw3ICs4NzMsMTEgQEAgdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fbm9ybWFsIChjbGFzcyBs b29wDQo+ICpsb29wLA0KPiA+IHRyZWUgbml0ZXJzLCB0cmVlIHN0ZXAsDQo+ID4gIAkgSW4gYm90 aCBjYXNlcyB0aGUgbG9vcCBsaW1pdCBpcyBOSVRFUlMgLSBTVEVQLiAgKi8NCj4gPiAgICAgICAg Z2ltcGxlX3NlcSBzZXEgPSBOVUxMOw0KPiA+ICAgICAgICBsaW1pdCA9IGZvcmNlX2dpbXBsZV9v cGVyYW5kIChuaXRlcnMsICZzZXEsIHRydWUsIE5VTExfVFJFRSk7DQo+ID4gLSAgICAgIGxpbWl0 ID0gZ2ltcGxlX2J1aWxkICgmc2VxLCBNSU5VU19FWFBSLCBUUkVFX1RZUEUgKGxpbWl0KSwgbGlt aXQsDQo+IHN0ZXApOw0KPiA+ICsgICAgICAvKiBGb3IgVkxBIGxlYXZlIGxpbWl0ID09IG5pdGVy cy4gIFRob3VnaCBJIHdvbmRlciBpZiBtYXliZSBJIHNob3VsZA0KPiA+ICsJIGZvcmNlIHBhcnRp YWwgbG9vcHMgaGVyZSBhbmQgdXNlDQo+ID4gdmVjdF9zZXRfbG9vcF9jb25kaXRpb25fcGFydGlh bF92ZWN0b3JzDQo+ID4gKwkgaW5zdGVhZC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIFZMIGNo ZWNrIGlzIHVzZWxlc3MgaGVyZS4gICovDQo+ID4gKyAgICAgIGlmICghTE9PUF9WSU5GT19FQVJM WV9CUkVBS1MgKGxvb3BfdmluZm8pICYmDQo+ID4gIUxPT1BfVklORk9fTklURVJTX0tOT1dOX1Ag KGxvb3BfdmluZm8pKQ0KPiA+ICsJbGltaXQgPSBnaW1wbGVfYnVpbGQgKCZzZXEsIE1JTlVTX0VY UFIsIFRSRUVfVFlQRSAobGltaXQpLCBsaW1pdCwNCj4gPiBzdGVwKTsNCj4gPiAgICAgICAgaWYg KHNlcSkNCj4gPiAgCXsNCj4gPiAgCSAgYmFzaWNfYmxvY2sgbmV3X2JiID0gZ3NpX2luc2VydF9z ZXFfb25fZWRnZV9pbW1lZGlhdGUgKHBlLA0KPiA+IHNlcSk7DQo+ID4gQEAgLTkwNyw3ICs5MTIs OCBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3JtYWwgKGNsYXNzIGxvb3AgKmxvb3AsDQo+ ID4gdHJlZSBuaXRlcnMsIHRyZWUgc3RlcCwNCj4gPiAgICBnc2lfaW5zZXJ0X2JlZm9yZSAoJmxv b3BfY29uZF9nc2ksIGNvbmRfc3RtdCwgR1NJX1NBTUVfU1RNVCk7DQo+ID4NCj4gPiAgICAvKiBS ZWNvcmQgdGhlIG51bWJlciBvZiBsYXRjaCBpdGVyYXRpb25zLiAgKi8NCj4gPiAtICBpZiAobGlt aXQgPT0gbml0ZXJzKQ0KPiA+ICsgIGlmIChsaW1pdCA9PSBuaXRlcnMNCj4gPiArICAgICAgfHwg TE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ICAgICAgLyogQ2FzZSBB OiB0aGUgbG9vcCBpdGVyYXRlcyBOSVRFUlMgdGltZXMuICBTdWJ0cmFjdCBvbmUgdG8gZ2V0IHRo ZQ0KPiA+ICAgICAgICAgbGF0Y2ggY291bnQuICAqLw0KPiA+ICAgICAgbG9vcC0+bmJfaXRlcmF0 aW9ucyA9IGZvbGRfYnVpbGQyIChNSU5VU19FWFBSLCBuaXRlcnNfdHlwZSwgbml0ZXJzLA0KPiA+ IEBAIC05MTgsMTAgKzkyNCwxNyBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbl9ub3JtYWwgKGNs YXNzIGxvb3ANCj4gKmxvb3AsDQo+ID4gdHJlZSBuaXRlcnMsIHRyZWUgc3RlcCwNCj4gPiAgICAg IGxvb3AtPm5iX2l0ZXJhdGlvbnMgPSBmb2xkX2J1aWxkMiAoVFJVTkNfRElWX0VYUFIsIG5pdGVy c190eXBlLA0KPiA+ICAJCQkJICAgICAgIGxpbWl0LCBzdGVwKTsNCj4gPg0KPiA+IC0gIGlmIChm aW5hbF9pdikNCj4gPiArICBhdXRvX3ZlYzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRn ZXMgKGxvb3ApOw0KPiA+ICsgIC8qIEZvciBtdWx0aXBsZSBleGl0cyB3ZSd2ZSBhbHJlYWR5IG1h aW50YWluZWQgTENTU0EgZm9ybSBhbmQgaGFuZGxlZA0KPiA+ICsgICAgIHRoZSBzY2FsYXIgaXRl cmF0aW9uIHVwZGF0ZSBpbiB0aGUgY29kZSB0aGF0IGRlYWxzIHdpdGggdGhlIG1lcmdlDQo+ID4g KyAgICAgYmxvY2sgYW5kIGl0cyB1cGRhdGVkIGd1YXJkLiAgSSBjb3VsZCBtb3ZlIHRoYXQgY29k ZSBoZXJlIGluc3RlYWQNCj4gPiArICAgICBvZiBpbiB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfZWFy bHlfYnJlYWsgYnV0IEkgaGF2ZSB0byBzdGlsbCBkZWFsDQo+ID4gKyAgICAgd2l0aCB0aGUgdXBk YXRlcyB0byB0aGUgY291bnRlciBgaWAuICBTbyBmb3Igbm93IEknbGwga2VlcCB0aGVtDQo+ID4g KyAgICAgdG9nZXRoZXIuICAqLw0KPiA+ICsgIGlmIChmaW5hbF9pdiAmJiBleGl0cy5sZW5ndGgg KCkgPT0gMSkNCj4gPiAgICAgIHsNCj4gPiAgICAgICAgZ2Fzc2lnbiAqYXNzaWduOw0KPiA+IC0g ICAgICBlZGdlIGV4aXQgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+ID4gKyAgICAgIGVkZ2UgZXhp dCA9IG5vcm1hbF9leGl0IChsb29wKTsNCj4gPiAgICAgICAgZ2NjX2Fzc2VydCAoc2luZ2xlX3By ZWRfcCAoZXhpdC0+ZGVzdCkpOw0KPiA+ICAgICAgICB0cmVlIHBoaV9kZXN0DQo+ID4gIAk9IGlu dGVnZXJfemVyb3AgKGluaXQpID8gZmluYWxfaXYgOiBjb3B5X3NzYV9uYW1lIChpbmR4X2FmdGVy X2luY3IpOw0KPiA+IEBAIC05NzIsMTMgKzk4NSwxNSBAQCB2ZWN0X3NldF9sb29wX2NvbmRpdGlv biAoY2xhc3MgbG9vcCAqbG9vcCwNCj4gPiBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4g ICAgZ2NvbmQgKm9yaWdfY29uZCA9IGdldF9sb29wX2V4aXRfY29uZGl0aW9uIChsb29wKTsNCj4g PiAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciBsb29wX2NvbmRfZ3NpID0gZ3NpX2Zvcl9zdG10IChv cmlnX2NvbmQpOw0KPiA+DQo+ID4gLSAgaWYgKGxvb3BfdmluZm8gJiYgTE9PUF9WSU5GT19VU0lO R19QQVJUSUFMX1ZFQ1RPUlNfUA0KPiA+IChsb29wX3ZpbmZvKSkNCj4gPiArICBpZiAobG9vcF92 aW5mbw0KPiA+ICsgICAgICAmJiBMT09QX1ZJTkZPX1VTSU5HX1BBUlRJQUxfVkVDVE9SU19QIChs b29wX3ZpbmZvKSkNCj4gPiAgICAgIGNvbmRfc3RtdCA9IHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9u X3BhcnRpYWxfdmVjdG9ycyAobG9vcCwgbG9vcF92aW5mbywNCj4gPiAgCQkJCQkJCSBuaXRlcnMs IGZpbmFsX2l2LA0KPiA+ICAJCQkJCQkJIG5pdGVyc19tYXliZV96ZXJvLA0KPiA+ICAJCQkJCQkJ IGxvb3BfY29uZF9nc2kpOw0KPiA+ICAgIGVsc2UNCj4gPiAtICAgIGNvbmRfc3RtdCA9IHZlY3Rf c2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAobG9vcCwgbml0ZXJzLCBzdGVwLA0KPiBmaW5hbF9p diwNCj4gPiArICAgIGNvbmRfc3RtdCA9IHZlY3Rfc2V0X2xvb3BfY29uZGl0aW9uX25vcm1hbCAo bG9vcF92aW5mbywgbG9vcCwgbml0ZXJzLA0KPiA+ICsJCQkJCQlzdGVwLCBmaW5hbF9pdiwNCj4g PiAgCQkJCQkJbml0ZXJzX21heWJlX3plcm8sDQo+ID4gIAkJCQkJCWxvb3BfY29uZF9nc2kpOw0K PiA+DQo+ID4gQEAgLTEwNjYsNyArMTA4MSw3IEBAIHNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29w X3RvX2VkZ2VfY2ZnIChjbGFzcw0KPiA+IGxvb3AgKmxvb3AsDQo+ID4gICAgZWRnZSBleGl0LCBu ZXdfZXhpdDsNCj4gPiAgICBib29sIGR1cGxpY2F0ZV9vdXRlcl9sb29wID0gZmFsc2U7DQo+ID4N Cj4gPiAtICBleGl0ID0gc2luZ2xlX2V4aXQgKGxvb3ApOw0KPiA+ICsgIGV4aXQgPSBub3JtYWxf ZXhpdCAobG9vcCk7DQo+ID4gICAgYXRfZXhpdCA9IChlID09IGV4aXQpOw0KPiA+ICAgIGlmICgh YXRfZXhpdCAmJiBlICE9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3ApKQ0KPiA+ICAgICAgcmV0 dXJuIE5VTEw7DQo+ID4gQEAgLTExMDQsMTEgKzExMTksMTEgQEAgc2xwZWVsX3RyZWVfZHVwbGlj YXRlX2xvb3BfdG9fZWRnZV9jZmcNCj4gKGNsYXNzDQo+ID4gbG9vcCAqbG9vcCwNCj4gPiAgICBi YnNbMF0gPSBwcmVoZWFkZXI7DQo+ID4gICAgbmV3X2JicyA9IFhORVdWRUMgKGJhc2ljX2Jsb2Nr LCBzY2FsYXJfbG9vcC0+bnVtX25vZGVzICsgMSk7DQo+ID4NCj4gPiAtICBleGl0ID0gc2luZ2xl X2V4aXQgKHNjYWxhcl9sb29wKTsNCj4gPiArICBleGl0ID0gbm9ybWFsX2V4aXQgKHNjYWxhcl9s b29wKTsNCj4gPiAgICBjb3B5X2JicyAoYmJzLCBzY2FsYXJfbG9vcC0+bnVtX25vZGVzICsgMSwg bmV3X2JicywNCj4gPiAgCSAgICAmZXhpdCwgMSwgJm5ld19leGl0LCBOVUxMLA0KPiA+ICAJICAg IGF0X2V4aXQgPyBsb29wLT5sYXRjaCA6IGUtPnNyYywgdHJ1ZSk7DQo+ID4gLSAgZXhpdCA9IHNp bmdsZV9leGl0IChsb29wKTsNCj4gPiArICBleGl0ID0gbm9ybWFsX2V4aXQgKGxvb3ApOw0KPiA+ ICAgIGJhc2ljX2Jsb2NrIG5ld19wcmVoZWFkZXIgPSBuZXdfYmJzWzBdOw0KPiA+DQo+ID4gICAg LyogQmVmb3JlIGluc3RhbGxpbmcgUEhJIGFyZ3VtZW50cyBtYWtlIHN1cmUgdGhhdCB0aGUgZWRn ZXMNCj4gPiBAQCAtMTE3NiwxMSArMTE5MSw1MyBAQCBzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9v cF90b19lZGdlX2NmZw0KPiAoY2xhc3MNCj4gPiBsb29wICpsb29wLA0KPiA+ICAJICAgICAgYWRk X3BoaV9hcmcgKHBoaSwgb3JpZ19hcmcsIG5ld19leGl0LCBvcmlnX2xvY3VzKTsNCj4gPiAgCSAg ICB9DQo+ID4gIAl9DQo+ID4gKw0KPiA+ICsgICAgICAvKiBJZiBoYXZlIG11bHRpcGxlIGV4aXN0 LCB3ZSBub3cgbmVlZCB0byBwb2ludCB0aGUgYWRkaXRpb25hbCBleGl0cw0KPiA+ICsJIGZyb20g dGhlIG9sZCBsb29wIHRvIHRoZSBsb29wIHByZS1oZWFkZXIgb2YgdGhlIG5ldyBjb3BpZWQgbG9v cC4NCj4gPiArCSBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IHNpbXBsZSBlYXJseSBicmVhayB2 ZWN0b3JpemF0aW9uIHNvIGFsbA0KPiA+ICsJIGFkZGl0aW9uYWwgZXhpdHMgbXVzdCBleGl0IHRo ZSBsb29wLiBBZGRpdGlvbmFsbHkgd2UgY2FuIG9ubHkgcGxhY2UNCj4gPiArCSBjb3BpZXMgYXQg dGhlIGVuZC4gIGkuZS4gd2UgY2Fubm90IGRvIHByb2xvZ3VlIHBlZWxpbmcuICAqLw0KPiA+ICsg ICAgICBhdXRvX3ZlYzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGxvb3ApOw0K PiA+ICsgICAgICBib29sIG11bHRpcGxlX2V4aXRzX3AgPSBleGl0cy5sZW5ndGggKCkgPiAxOw0K PiA+ICsNCj4gPiArICAgICAgLyogQ2hlY2sgdG8gc2VlIGlmIGFsbCBvZiB0aGUgZXhpdHMgcG9p bnQgdG8gdGhlIGxvb3AgaGVhZGVyLiAgSWYgdGhleQ0KPiA+ICsJIGRvbid0IHRoZW4gd2UgaGF2 ZSBhbiBpbnRlcm1lZGlhdGUgQkIgdGhhdCdzIG5vIGxvbmdlciB1c2VmdWwgYWZ0ZXINCj4gPiAr CSB0aGUgY29weSBhbmQgd2Ugc2hvdWxkIHJlbW92ZSBpdC4gKi8NCj4gPiArICAgICAgYm9vbCBp bW1fZXhpdCA9IHRydWU7DQo+ID4gKyAgICAgIGZvciAoYXV0byBleGl0IDogZXhpdHMpDQo+ID4g Kwl7DQo+ID4gKwkgICBpbW1fZXhpdCA9IGltbV9leGl0ICYmIGV4aXQtPmRlc3QgPT0gbG9vcC0+ aGVhZGVyOw0KPiA+ICsJICAgaWYgKCFpbW1fZXhpdCkNCj4gPiArCSAgICAgYnJlYWs7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZXhpdHMubGVu Z3RoICgpOyBpKyspDQo+ID4gKwl7DQo+ID4gKwkgIHJlZGlyZWN0X2VkZ2VfYW5kX2JyYW5jaCAo ZXhpdHNbaV0sIG5ld19wcmVoZWFkZXIpOw0KPiA+ICsJICBmbHVzaF9wZW5kaW5nX3N0bXRzIChl eGl0c1tpXSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsgICAgICAvKiBNYWluIGV4aXQgbXVzdCBi ZSB0aGUgbGFzdCB0byBiZSByZXdyaXR0ZW4gYXMgaXQncyB0aGUgZmlyc3QgcGhpIG5vZGUNCj4g PiArCSBlbnRyeS4gIFRoZSByZXN0IGFyZSBpbiBhcnJheSBvcmRlci4gICovDQo+ID4gICAgICAg IHJlZGlyZWN0X2VkZ2VfYW5kX2JyYW5jaF9mb3JjZSAoZSwgbmV3X3ByZWhlYWRlcik7DQo+ID4g ICAgICAgIGZsdXNoX3BlbmRpbmdfc3RtdHMgKGUpOw0KPiA+IC0gICAgICBzZXRfaW1tZWRpYXRl X2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIG5ld19wcmVoZWFkZXIsIGUtDQo+ID4gPnNyYyk7 DQo+ID4gKw0KPiA+ICsgICAgICAvKiBPbmx5IHVwZGF0ZSB0aGUgZG9taW5hdG9ycyBvZiB0aGUg bmV3X3ByZWhlYWRlciB0byB0aGUgb2xkIGV4aXQgaWYNCj4gPiArCSB3ZSBoYXZlIGVmZmVjdGl2 ZWx5IGEgc2luZ2xlIGV4aXQuICAqLw0KPiA+ICsgICAgICBpZiAoIW11bHRpcGxlX2V4aXRzX3AN Cj4gPiArCSAgfHwgZXhpdHNbMV0tPnNyYyAhPSBFREdFX1BSRUQgKGV4aXRzWzBdLT5zcmMsIDAp LT5zcmMpDQo+ID4gKyAgICAgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFU T1JTLCBuZXdfcHJlaGVhZGVyLCBlLQ0KPiA+ID5zcmMpOw0KPiA+ICsgICAgICBlbHNlDQo+ID4g KwlzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIG5ld19wcmVoZWFkZXIs DQo+ID4gZXhpdHNbMV0tPnNyYyk7DQo+ID4gKw0KPiA+ICsgICAgICBhdXRvX3ZlYzxlZGdlPiBu ZXdfZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChuZXdfbG9vcCk7DQo+ID4gICAgICAgIGlm ICh3YXNfaW1tX2RvbSB8fCBkdXBsaWNhdGVfb3V0ZXJfbG9vcCkNCj4gPiAtCXNldF9pbW1lZGlh dGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgZXhpdF9kZXN0LA0KPiA+IG5ld19leGl0LT5z cmMpOw0KPiA+ICsJew0KPiA+ICsJICBpZiAoIW11bHRpcGxlX2V4aXRzX3ApDQo+ID4gKwkgICAg c2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBleGl0X2Rlc3QsDQo+ID4g bmV3X2V4aXQtPnNyYyk7DQo+ID4gKwkgIGVsc2UNCj4gPiArCSAgICBzZXRfaW1tZWRpYXRlX2Rv bWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIGV4aXRfZGVzdCwNCj4gPiBuZXdfZXhpdHNbMV0tPnNy Yyk7DQo+ID4gKwl9DQo+ID4NCj4gPiAgICAgICAgLyogQW5kIHJlbW92ZSB0aGUgbm9uLW5lY2Vz c2FyeSBmb3J3YXJkZXIgYWdhaW4uICBLZWVwIHRoZSBvdGhlcg0KPiA+ICAgICAgICAgICBvbmUg c28gd2UgaGF2ZSBhIHByb3BlciBwcmUtaGVhZGVyIGZvciB0aGUgbG9vcCBhdCB0aGUgZXhpdCBl ZGdlLiAgKi8NCj4gPiBAQCAtMTE4OSw2ICsxMjQ2LDM5IEBAIHNscGVlbF90cmVlX2R1cGxpY2F0 ZV9sb29wX3RvX2VkZ2VfY2ZnIChjbGFzcw0KPiA+IGxvb3AgKmxvb3AsDQo+ID4gICAgICAgIGRl bGV0ZV9iYXNpY19ibG9jayAocHJlaGVhZGVyKTsNCj4gPiAgICAgICAgc2V0X2ltbWVkaWF0ZV9k b21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBzY2FsYXJfbG9vcC0+aGVhZGVyLA0KPiA+ICAJCQkg ICAgICAgbG9vcF9wcmVoZWFkZXJfZWRnZSAoc2NhbGFyX2xvb3ApLT5zcmMpOw0KPiA+ICsNCj4g PiArICAgICAgLyogRmluYWxseSBhZnRlciB3aXJpbmcgdGhlIG5ldyBlcGlsb2d1ZSB3ZSBuZWVk IHRvIHVwZGF0ZSBpdHMgbWFpbg0KPiBleGl0DQo+ID4gKwkgdG8gdGhlIG9yaWdpbmFsIGZ1bmN0 aW9uIGV4aXQgd2UgcmVjb3JkZWQuICBPdGhlciBleGl0cyBhcmUgYWxyZWFkeQ0KPiA+ICsJIGNv cnJlY3QuICAqLw0KPiA+ICsgICAgICBpZiAoIWltbV9leGl0ICYmIG11bHRpcGxlX2V4aXRzX3Ap DQo+ID4gKwl7DQo+ID4gKwkgIC8qIEZvciBub3cgd2UgZXhwZWN0IGF0IG1vc3QgYSBzaW5nbGUg c3VjY2Vzc29yIGhlcmUsIGJ1dCB3ZSBtaWdodA0KPiA+IGJlDQo+ID4gKwkgICAgIGFibGUgdG8g ZXh0ZW5kIHRoaXMgdG8gbXVsdGlwbGUuICAqLw0KPiA+ICsJICBpZiAoc2luZ2xlX3N1Y2NfcCAo bmV3X2V4aXQtPmRlc3QpICYmIHNpbmdsZV9wcmVkX3AgKG5ld19leGl0LQ0KPiA+ID5kZXN0KSkN Cj4gPiArCSAgICB7DQo+ID4gKwkgICAgICBlZGdlIGV4aXRfZWRnZSA9IHNpbmdsZV9zdWNjX2Vk Z2UgKG5ld19leGl0LT5kZXN0KTsNCj4gPiArCSAgICAgIC8qIE5vdyBjb3JyZWN0IHRoZSBkb21p bmF0b3JzIHRoYXQgd2VyZSBtZXNzZWQgdXAgZHVyaW5nIHRoZQ0KPiA+IGNvcHlpbmcNCj4gPiAr CQkgYXMgdGhlIENGRyB3YXMgdHdlYWtlZCBhIGJpdC4gICovDQo+ID4gKwkgICAgICAvKiBUaGUg bWFpbiBleGl0IGlzIG5vdyBkb21pbmF0ZWQgYnkgYSBuZXcgZmFsbCB0aHJvdWdoIGVkZ2UuICAq Lw0KPiA+ICsJICAgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBl eGl0X2VkZ2UtPnNyYywNCj4gPiArCQkJCSAgICAgICBuZXdfZXhpdHNbMF0tPnNyYyk7DQo+ID4g KwkgICAgICAvKiBJZiB0aGlzIGlzIGEgZmFsbCB0aHJvdWdoIGVkZ2UgdGhlbiBkb24ndCB1cGRh dGUgZG9tcy4gICovDQo+ID4gKwkgICAgICBpZiAoIWVtcHR5X2Jsb2NrX3AgKGV4aXRfZWRnZS0+ c3JjKSkNCj4gPiArCQlzZXRfaW1tZWRpYXRlX2RvbWluYXRvciAoQ0RJX0RPTUlOQVRPUlMsIGV4 aXRfZWRnZS0NCj4gPiA+ZGVzdCwNCj4gPiArCQkJCQkgbmV3X2V4aXRzWzFdLT5zcmMpOw0KPiA+ ICsJICAgIH0NCj4gPiArDQo+ID4gKwkgIC8qIFRoZSBleGl0cyBmcm9tIHRoZSBCQiB3aXRoIHRo ZSBlYXJseSBleGl0IGRvbWluYXRlIHRoZSBuZXcNCj4gPiBmdW5jdGlvbg0KPiA+ICsJICAgICBl eGl0IGVkZ2UgYW5kIGFsc28gdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBsb29wLiAgVGhlIGVkZ2Vz IHdlcmUNCj4gPiArCSAgICAgY29waWVkIGNvcnJlY3RseSBidXQgdGhlIGRvbXMgYXJlIHdyb25n IGJlY2F1c2UgZHVyaW5nIHRoZQ0KPiA+IGNvcHlpbmcNCj4gPiArCSAgICAgc29tZSBvZiB0aGUg aW50ZXJtZWRpYXRlIGVkZ2VzIGFyZSByZXdyaXR0ZW4uICAgKi8NCj4gPiArCSAgc2V0X2ltbWVk aWF0ZV9kb21pbmF0b3IgKENESV9ET01JTkFUT1JTLCBuZXdfZXhpdHNbMF0tPnNyYywNCj4gPiAr CQkJCSAgIG5ld19leGl0c1sxXS0+c3JjKTsNCj4gPiArCSAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0 b3IgKENESV9ET01JTkFUT1JTLCBuZXdfZXhpdHNbMF0tDQo+ID4gPmRlc3QsDQo+ID4gKwkJCQkg ICBuZXdfZXhpdHNbMF0tPnNyYyk7DQo+ID4gKwkgIHNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChD RElfRE9NSU5BVE9SUywgbmV3X2V4aXRzWzFdLQ0KPiA+ID5kZXN0LA0KPiA+ICsJCQkJICAgbmV3 X2V4aXRzWzFdLT5zcmMpOw0KPiA+ICsJfQ0KPiA+ICAgICAgfQ0KPiA+ICAgIGVsc2UgLyogQWRk IHRoZSBjb3B5IGF0IGVudHJ5LiAgKi8NCj4gPiAgICAgIHsNCj4gPiBAQCAtMTMxMCwyMCArMTQw MCwyNCBAQCBzbHBlZWxfYWRkX2xvb3BfZ3VhcmQgKGJhc2ljX2Jsb2NrIGd1YXJkX2JiLA0KPiA+ IHRyZWUgY29uZCwNCj4gPiAgICovDQo+ID4NCj4gPiAgYm9vbA0KPiA+IC1zbHBlZWxfY2FuX2R1 cGxpY2F0ZV9sb29wX3AgKGNvbnN0IGNsYXNzIGxvb3AgKmxvb3AsIGNvbnN0X2VkZ2UgZSkNCj4g PiArc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChjb25zdCBsb29wX3ZlY19pbmZvIGxvb3Bf dmluZm8sDQo+IGNvbnN0X2VkZ2UNCj4gPiBlKQ0KPiA+ICB7DQo+ID4gLSAgZWRnZSBleGl0X2Ug PSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+ID4gKyAgY2xhc3MgbG9vcCAqbG9vcCA9IExPT1BfVklO Rk9fTE9PUCAobG9vcF92aW5mbyk7DQo+ID4gKyAgZWRnZSBleGl0X2UgPSBub3JtYWxfZXhpdCAo bG9vcCk7DQo+ID4gICAgZWRnZSBlbnRyeV9lID0gbG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCk7 DQo+ID4gICAgZ2NvbmQgKm9yaWdfY29uZCA9IGdldF9sb29wX2V4aXRfY29uZGl0aW9uIChsb29w KTsNCj4gPiAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciBsb29wX2V4aXRfZ3NpID0gZ3NpX2xhc3Rf YmIgKGV4aXRfZS0+c3JjKTsNCj4gPiAgICB1bnNpZ25lZCBpbnQgbnVtX2JiID0gbG9vcC0+aW5u ZXI/IDUgOiAyOw0KPiA+DQo+ID4gKyAgaWYgKExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29w X3ZpbmZvKSkNCj4gPiArICAgIG51bV9iYiArPSAxOw0KPiA+ICsNCj4gPiAgICAvKiBBbGwgbG9v cHMgaGF2ZSBhbiBvdXRlciBzY29wZTsgdGhlIG9ubHkgY2FzZSBsb29wLT5vdXRlciBpcyBOVUxM IGlzIGZvcg0KPiA+ICAgICAgIHRoZSBmdW5jdGlvbiBpdHNlbGYuICAqLw0KPiA+ICAgIGlmICgh bG9vcF9vdXRlciAobG9vcCkNCj4gPiAgICAgICAgfHwgbG9vcC0+bnVtX25vZGVzICE9IG51bV9i Yg0KPiA+ICAgICAgICB8fCAhZW1wdHlfYmxvY2tfcCAobG9vcC0+bGF0Y2gpDQo+ID4gLSAgICAg IHx8ICFzaW5nbGVfZXhpdCAobG9vcCkNCj4gPiArICAgICAgfHwgKCFzaW5nbGVfZXhpdCAobG9v cCkgJiYgIUxPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiAgICAgICAg LyogVmVyaWZ5IHRoYXQgbmV3IGxvb3AgZXhpdCBjb25kaXRpb24gY2FuIGJlIHRyaXZpYWxseSBt b2RpZmllZC4gICovDQo+ID4gICAgICAgIHx8ICghb3JpZ19jb25kIHx8IG9yaWdfY29uZCAhPSBn c2lfc3RtdCAobG9vcF9leGl0X2dzaSkpDQo+ID4gICAgICAgIHx8IChlICE9IGV4aXRfZSAmJiBl ICE9IGVudHJ5X2UpKQ0KPiA+IEBAIC0xNTI4LDYgKzE2MjIsMTIgQEAgdmVjdF91cGRhdGVfaXZz X2FmdGVyX3ZlY3Rvcml6ZXINCj4gKGxvb3BfdmVjX2luZm8NCj4gPiBsb29wX3ZpbmZvLA0KPiA+ ICAgIGdwaGlfaXRlcmF0b3IgZ3NpLCBnc2kxOw0KPiA+ICAgIGNsYXNzIGxvb3AgKmxvb3AgPSBM T09QX1ZJTkZPX0xPT1AgKGxvb3BfdmluZm8pOw0KPiA+ICAgIGJhc2ljX2Jsb2NrIHVwZGF0ZV9i YiA9IHVwZGF0ZV9lLT5kZXN0Ow0KPiA+ICsNCj4gPiArICAvKiBGb3IgZWFybHkgZXhpdHMgd2Un bGwgdXBkYXRlIHRoZSBJVnMgaW4NCj4gPiArICAgICB2ZWN0X3VwZGF0ZV9pdnNfYWZ0ZXJfZWFy bHlfYnJlYWsuICAqLw0KPiA+ICsgIGlmIChMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92 aW5mbykpDQo+ID4gKyAgICByZXR1cm47DQo+ID4gKw0KPiA+ICAgIGJhc2ljX2Jsb2NrIGV4aXRf YmIgPSBzaW5nbGVfZXhpdCAobG9vcCktPmRlc3Q7DQo+ID4NCj4gPiAgICAvKiBNYWtlIHN1cmUg dGhlcmUgZXhpc3RzIGEgc2luZ2xlLXByZWRlY2Vzc29yIGV4aXQgYmI6ICAqLw0KPiA+IEBAIC0x NjEzLDYgKzE3MTMsMTg2IEBAIHZlY3RfdXBkYXRlX2l2c19hZnRlcl92ZWN0b3JpemVyDQo+ID4g KGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gPiAgICAgICAgLyogRml4IHBoaSBleHByZXNz aW9ucyBpbiB0aGUgc3VjY2Vzc29yIGJiLiAgKi8NCj4gPiAgICAgICAgYWRqdXN0X3BoaV9hbmRf ZGVidWdfc3RtdHMgKHBoaTEsIHVwZGF0ZV9lLCBuaV9uYW1lKTsNCj4gPiAgICAgIH0NCj4gPiAr ICByZXR1cm47DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qICAgRnVuY3Rpb24gdmVjdF91cGRhdGVf aXZzX2FmdGVyX2Vhcmx5X2JyZWFrLg0KPiA+ICsNCj4gPiArICAgICAiQWR2YW5jZSIgdGhlIGlu ZHVjdGlvbiB2YXJpYWJsZXMgb2YgTE9PUCB0byB0aGUgdmFsdWUgdGhleSBzaG91bGQNCj4gdGFr ZQ0KPiA+ICsgICAgIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgTE9PUC4gIFRoaXMgaXMgY3VycmVu dGx5IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZQ0KPiA+ICsgICAgIHZlY3Rvcml6ZXIgZG9lcyBub3Qg aGFuZGxlIGluZHVjdGlvbiB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBhZnRlciB0aGUNCj4gPiAr ICAgICBsb29wLiAgU3VjaCBhIHNpdHVhdGlvbiBvY2N1cnMgd2hlbiB0aGUgbGFzdCBpdGVyYXRp b25zIG9mIExPT1AgYXJlDQo+ID4gKyAgICAgcGVlbGVkLCBiZWNhdXNlIG9mIHRoZSBlYXJseSBl eGl0LiAgV2l0aCBhbiBlYXJseSBleGl0IHdlIGFsd2F5cyBwZWVsIHRoZQ0KPiA+ICsgICAgIGxv b3AuDQo+ID4gKw0KPiA+ICsgICAgIElucHV0Og0KPiA+ICsgICAgIC0gTE9PUF9WSU5GTyAtIGEg bG9vcCBpbmZvIHN0cnVjdHVyZSBmb3IgdGhlIGxvb3AgdGhhdCBpcyBnb2luZyB0byBiZQ0KPiA+ ICsJCSAgICB2ZWN0b3JpemVkLiBUaGUgbGFzdCBmZXcgaXRlcmF0aW9ucyBvZiBMT09QIHdlcmUg cGVlbGVkLg0KPiA+ICsgICAgIC0gTE9PUCAtIGEgbG9vcCB0aGF0IGlzIGdvaW5nIHRvIGJlIHZl Y3Rvcml6ZWQuIFRoZSBsYXN0IGZldyBpdGVyYXRpb25zDQo+ID4gKwkgICAgICBvZiBMT09QIHdl cmUgcGVlbGVkLg0KPiA+ICsgICAgIC0gVkYgLSBUaGUgbG9vcCB2ZWN0b3JpemF0aW9uIGZhY3Rv ci4NCj4gPiArICAgICAtIE5JVEVSU19PUklHIC0gdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRo YXQgTE9PUCBleGVjdXRlcyAoYmVmb3JlDQo+IGl0DQo+ID4gaXMNCj4gPiArCQkgICAgIHZlY3Rv cml6ZWQpLiBpLmUsIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGl2cyBzaG91bGQgYmUNCj4gPiAr CQkgICAgIGJ1bXBlZC4NCj4gPiArICAgICAtIE5JVEVSU19WRUNUT1IgLSBUaGUgbnVtYmVyIG9m IGl0ZXJhdGlvbnMgdGhhdCB0aGUgdmVjdG9yIExPT1ANCj4gPiBleGVjdXRlcy4NCj4gPiArICAg ICAtIFVQREFURV9FIC0gYSBzdWNjZXNzb3IgZWRnZSBvZiBMT09QLT5leGl0IHRoYXQgaXMgb24g dGhlIChvbmx5KSBwYXRoDQo+ID4gKwkJICBjb21pbmcgb3V0IGZyb20gTE9PUCBvbiB3aGljaCB0 aGVyZSBhcmUgdXNlcyBvZiB0aGUgTE9PUA0KPiA+IGl2cw0KPiA+ICsJCSAgKHRoaXMgaXMgdGhl IHBhdGggZnJvbSBMT09QLT5leGl0IHRvIGVwaWxvZ19sb29wLQ0KPiA+ID5wcmVoZWFkZXIpLg0K PiA+ICsNCj4gPiArCQkgIFRoZSBuZXcgZGVmaW5pdGlvbnMgb2YgdGhlIGl2cyBhcmUgcGxhY2Vk IGluIExPT1AtPmV4aXQuDQo+ID4gKwkJICBUaGUgcGhpIGFyZ3MgYXNzb2NpYXRlZCB3aXRoIHRo ZSBlZGdlIFVQREFURV9FIGluIHRoZSBiYg0KPiA+ICsJCSAgVVBEQVRFX0UtPmRlc3QgYXJlIHVw ZGF0ZWQgYWNjb3JkaW5nbHkuDQo+ID4gKw0KPiA+ICsgICAgIE91dHB1dDoNCj4gPiArICAgICAg IC0gSWYgYXZhaWxhYmxlLCB0aGUgTENTU0EgcGhpIG5vZGUgZm9yIHRoZSBsb29wIElWIHRlbXAu DQo+ID4gKw0KPiA+ICsgICAgIEFzc3VtcHRpb24gMTogTGlrZSB0aGUgcmVzdCBvZiB0aGUgdmVj dG9yaXplciwgdGhpcyBmdW5jdGlvbiBhc3N1bWVzDQo+ID4gKyAgICAgYSBzaW5nbGUgbG9vcCBl eGl0IHRoYXQgaGFzIGEgc2luZ2xlIHByZWRlY2Vzc29yLg0KPiA+ICsNCj4gPiArICAgICBBc3N1 bXB0aW9uIDI6IFRoZSBwaGkgbm9kZXMgaW4gdGhlIExPT1AgaGVhZGVyIGFuZCBpbiB1cGRhdGVf YmIgYXJlDQo+ID4gKyAgICAgb3JnYW5pemVkIGluIHRoZSBzYW1lIG9yZGVyLg0KPiA+ICsNCj4g PiArICAgICBBc3N1bXB0aW9uIDM6IFRoZSBhY2Nlc3MgZnVuY3Rpb24gb2YgdGhlIGl2cyBpcyBz aW1wbGUgZW5vdWdoIChzZWUNCj4gPiArICAgICB2ZWN0X2Nhbl9hZHZhbmNlX2l2c19wKS4gIFRo aXMgYXNzdW1wdGlvbiB3aWxsIGJlIHJlbGF4ZWQgaW4gdGhlDQo+IGZ1dHVyZS4NCj4gPiArDQo+ ID4gKyAgICAgQXNzdW1wdGlvbiA0OiBFeGFjdGx5IG9uZSBvZiB0aGUgc3VjY2Vzc29ycyBvZiBM T09QIGV4aXQtYmIgaXMgb24gYQ0KPiBwYXRoDQo+ID4gKyAgICAgY29taW5nIG91dCBvZiBMT09Q IG9uIHdoaWNoIHRoZSBpdnMgb2YgTE9PUCBhcmUgdXNlZCAodGhpcyBpcyB0aGUgcGF0aA0KPiA+ ICsgICAgIHRoYXQgbGVhZHMgdG8gdGhlIGVwaWxvZyBsb29wOyBvdGhlciBwYXRocyBza2lwIHRo ZSBlcGlsb2cgbG9vcCkuICBUaGlzDQo+ID4gKyAgICAgcGF0aCBzdGFydHMgd2l0aCB0aGUgZWRn ZSBVUERBVEVfRSwgYW5kIGl0cyBkZXN0aW5hdGlvbiAoZGVub3RlZA0KPiA+IHVwZGF0ZV9iYikN Cj4gPiArICAgICBuZWVkcyB0byBoYXZlIGl0cyBwaGlzIHVwZGF0ZWQuDQo+ID4gKyAqLw0KPiA+ ICsNCj4gPiArc3RhdGljIHRyZWUNCj4gPiArdmVjdF91cGRhdGVfaXZzX2FmdGVyX2Vhcmx5X2Jy ZWFrIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIGNsYXNzIGxvb3ANCj4gPiAqLA0KPiA+ICsJ CQkJICAgcG9seV9pbnQ2NCB2ZiwgdHJlZSBuaXRlcnNfb3JpZywNCj4gPiArCQkJCSAgIHRyZWUg bml0ZXJzX3ZlY3RvciwgZWRnZSB1cGRhdGVfZSkNCj4gPiArew0KPiA+ICsgIGdwaGlfaXRlcmF0 b3IgZ3NpLCBnc2kxOw0KPiA+ICsgIHRyZWUgbmlfbmFtZSwgaXZ0bXAgPSBOVUxMOw0KPiA+ICsg IGNsYXNzIGxvb3AgKmxvb3AgPSBMT09QX1ZJTkZPX0xPT1AgKGxvb3BfdmluZm8pOw0KPiA+ICsg IGJhc2ljX2Jsb2NrIHVwZGF0ZV9iYiA9IHVwZGF0ZV9lLT5kZXN0Ow0KPiA+ICsgIGF1dG9fdmVj PGVkZ2U+IGV4aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdlcyAobG9vcCk7DQo+ID4gKw0KPiA+ICsg IGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBleGl0c1swXS0+ZGVzdDsNCj4gPiArDQo+ID4gKyAgaWYg KCFMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykpDQo+ID4gKyAgICByZXR1cm4g TlVMTDsNCj4gPiArDQo+ID4gKyAgZm9yIChnc2kgPSBnc2lfc3RhcnRfcGhpcyAobG9vcC0+aGVh ZGVyKSwgZ3NpMSA9IGdzaV9zdGFydF9waGlzDQo+ICh1cGRhdGVfYmIpOw0KPiA+ICsgICAgICAg IWdzaV9lbmRfcCAoZ3NpKSAmJiAhZ3NpX2VuZF9wIChnc2kxKTsNCj4gPiArICAgICAgIGdzaV9u ZXh0ICgmZ3NpKSwgZ3NpX25leHQgKCZnc2kxKSkNCj4gPiArICAgIHsNCj4gPiArICAgICAgdHJl ZSBpbml0X2V4cHI7DQo+ID4gKyAgICAgIHRyZWUgc3RlcF9leHByOw0KPiA+ICsgICAgICB0cmVl IHR5cGU7DQo+ID4gKyAgICAgIHRyZWUgdmFyLCBuaTsNCj4gPiArICAgICAgZ2ltcGxlX3N0bXRf aXRlcmF0b3IgbGFzdF9nc2k7DQo+ID4gKw0KPiA+ICsgICAgICBncGhpICpwaGkgPSBnc2kxLnBo aSAoKTsNCj4gPiArICAgICAgdHJlZSBwaGlfc3NhID0gUEhJX0FSR19ERUZfRlJPTV9FREdFIChw aGksDQo+IGxvb3BfcHJlaGVhZGVyX2VkZ2UNCj4gPiAobG9vcCkpOw0KPiA+ICsgICAgICBncGhp ICpwaGkxID0gYXNfYSA8Z3BoaSAqPiAoU1NBX05BTUVfREVGX1NUTVQgKHBoaV9zc2EpKTsNCj4g PiArICAgICAgc3RtdF92ZWNfaW5mbyBwaGlfaW5mbyA9IGxvb3BfdmluZm8tPmxvb2t1cF9zdG10 IChnc2kucGhpICgpKTsNCj4gPiArICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ICsJ ZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwNCj4gPiArCQkJICJ2ZWN0 X3VwZGF0ZV9pdnNfYWZ0ZXJfZWFybHlfYnJlYWs6IHBoaTogJUciLA0KPiA+ICsJCQkgKGdpbXBs ZSAqKXBoaSk7DQo+ID4gKw0KPiA+ICsgICAgICAvKiBTa2lwIHJlZHVjdGlvbiBhbmQgdmlydHVh bCBwaGlzLiAgKi8NCj4gPiArICAgICAgaWYgKCFpdl9waGlfcCAocGhpX2luZm8pKQ0KPiA+ICsJ ew0KPiA+ICsJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gKwkgICAgZHVtcF9wcmludGZf bG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwNCj4gPiArCQkJICAgICAicmVkdWMgb3Igdmly dHVhbCBwaGkuIHNraXAuXG4iKTsNCj4gPiArCSAgY29udGludWU7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsgICAgICAvKiBGb3IgbXVsdGlwbGUgZXhpdHMgd2hlcmUgd2UgaGFuZGxlIGVhcmx5IGV4 aXRzIHdlIG5lZWQgdG8gY2Fycnkgb24NCj4gPiArCSB3aXRoIHRoZSBwcmV2aW91cyBJViBhcyBs b29wIGl0ZXJhdGlvbiB3YXMgbm90IGRvbmUgYmVjYXVzZSB3ZQ0KPiA+IGV4aXRlZA0KPiA+ICsJ IGVhcmx5LiAgQXMgc3VjaCBqdXN0IGdyYWIgdGhlIG9yaWdpbmFsIElWLiAgKi8NCj4gPiArICAg ICAgaWYgKFNUTVRfVklORk9fVFlQRSAocGhpX2luZm8pICE9IHVuZGVmX3ZlY19pbmZvX3R5cGUp DQo+ID4gKwl7DQo+ID4gKwkgIHR5cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9waGlfcmVzdWx0IChw aGkpKTsNCj4gPiArCSAgc3RlcF9leHByID0gU1RNVF9WSU5GT19MT09QX1BISV9FVk9MVVRJT05f UEFSVA0KPiA+IChwaGlfaW5mbyk7DQo+ID4gKwkgIHN0ZXBfZXhwciA9IHVuc2hhcmVfZXhwciAo c3RlcF9leHByKTsNCj4gPiArDQo+ID4gKwkgIC8qIFdlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIHRo ZSBuZXcgbWVyZ2VkIHBoaSBpbiB0aGUgc2FtZSBCQiBhcw0KPiA+IHRoZQ0KPiA+ICsJICAgICBn dWFyZC4gIFNvIHVzZSB0aGF0IHRvIHBlcmZvcm0gdGhlIHNjYWxpbmcgb24gcmF0aGVyIHRoYW4g dGhlDQo+ID4gKwkgICAgIG5vcm1hbCBsb29wIHBoaSB3aGljaCBkb24ndCB0YWtlIHRoZSBlYXJs eSBicmVha3MgaW50byBhY2NvdW50LiAgKi8NCj4gPiArCSAgaW5pdF9leHByID0gZ2ltcGxlX3Bo aV9yZXN1bHQgKHBoaTEpOyAvL1BISV9BUkdfREVGX0ZST01fRURHRQ0KPiA+IChwaGkxLCBsb29w X3ByZWhlYWRlcl9lZGdlIChsb29wKSk7DQo+ID4gKw0KPiA+ICsJICBuaSA9IGZvbGRfYnVpbGQy IChNVUxUX0VYUFIsIFRSRUVfVFlQRSAoc3RlcF9leHByKSwNCj4gPiArCQkJICAgIGZvbGRfY29u dmVydCAoVFJFRV9UWVBFIChzdGVwX2V4cHIpLCBpbml0X2V4cHIpLA0KPiA+ICsJCQkgICAgYnVp bGRfaW50X2NzdCAoVFJFRV9UWVBFIChzdGVwX2V4cHIpLCB2ZikpOw0KPiA+ICsNCj4gPiArCSAg dmFyID0gY3JlYXRlX3RtcF92YXIgKHR5cGUsICJ0bXAiKTsNCj4gPiArDQo+ID4gKwkgIGxhc3Rf Z3NpID0gZ3NpX2xhc3RfYmIgKGV4aXRfYmIpOw0KPiA+ICsJICBnaW1wbGVfc2VxIG5ld19zdG10 cyA9IE5VTEw7DQo+ID4gKwkgIG5pX25hbWUgPSBmb3JjZV9naW1wbGVfb3BlcmFuZCAobmksICZu ZXdfc3RtdHMsIGZhbHNlLCB2YXIpOw0KPiA+ICsJICAvKiBFeGl0X2JiIHNob3VsZG4ndCBiZSBl bXB0eS4gICovDQo+ID4gKwkgIGlmICghZ3NpX2VuZF9wIChsYXN0X2dzaSkpDQo+ID4gKwkgICAg Z3NpX2luc2VydF9zZXFfYWZ0ZXIgKCZsYXN0X2dzaSwgbmV3X3N0bXRzLCBHU0lfU0FNRV9TVE1U KTsNCj4gPiArCSAgZWxzZQ0KPiA+ICsJICAgIGdzaV9pbnNlcnRfc2VxX2JlZm9yZSAoJmxhc3Rf Z3NpLCBuZXdfc3RtdHMsIEdTSV9TQU1FX1NUTVQpOw0KPiA+ICsNCj4gPiArCSAgLyogRml4IHBo aSBleHByZXNzaW9ucyBpbiB0aGUgc3VjY2Vzc29yIGJiLiAgKi8NCj4gPiArCSAgYWRqdXN0X3Bo aV9hbmRfZGVidWdfc3RtdHMgKHBoaSwgdXBkYXRlX2UsIG5pX25hbWUpOw0KPiA+ICsJfQ0KPiA+ ICsgICAgICBlbHNlIGlmIChTVE1UX1ZJTkZPX1RZUEUgKHBoaV9pbmZvKSA9PSB1bmRlZl92ZWNf aW5mb190eXBlKQ0KPiA+ICsJew0KPiA+ICsJICB0eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfcGhp X3Jlc3VsdCAocGhpKSk7DQo+ID4gKwkgIHN0ZXBfZXhwciA9IFNUTVRfVklORk9fTE9PUF9QSElf RVZPTFVUSU9OX1BBUlQNCj4gPiAocGhpX2luZm8pOw0KPiA+ICsJICBzdGVwX2V4cHIgPSB1bnNo YXJlX2V4cHIgKHN0ZXBfZXhwcik7DQo+ID4gKw0KPiA+ICsJICAvKiBXZSBwcmV2aW91c2x5IGdl bmVyYXRlZCB0aGUgbmV3IG1lcmdlZCBwaGkgaW4gdGhlIHNhbWUgQkIgYXMNCj4gPiB0aGUNCj4g PiArCSAgICAgZ3VhcmQuICBTbyB1c2UgdGhhdCB0byBwZXJmb3JtIHRoZSBzY2FsaW5nIG9uIHJh dGhlciB0aGFuIHRoZQ0KPiA+ICsJICAgICBub3JtYWwgbG9vcCBwaGkgd2hpY2ggZG9uJ3QgdGFr ZSB0aGUgZWFybHkgYnJlYWtzIGludG8gYWNjb3VudC4gICovDQo+ID4gKwkgIGluaXRfZXhwciA9 IFBISV9BUkdfREVGX0ZST01fRURHRSAocGhpMSwNCj4gPiBsb29wX3ByZWhlYWRlcl9lZGdlIChs b29wKSk7DQo+ID4gKw0KPiA+ICsJICBpZiAodmYuaXNfY29uc3RhbnQgKCkpDQo+ID4gKwkgICAg ew0KPiA+ICsJICAgICAgbmkgPSBmb2xkX2J1aWxkMiAoTVVMVF9FWFBSLCBUUkVFX1RZUEUgKHN0 ZXBfZXhwciksDQo+ID4gKwkJCQlmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoc3RlcF9leHByKSwN Cj4gPiArCQkJCQkgICAgICBuaXRlcnNfdmVjdG9yKSwNCj4gPiArCQkJCWJ1aWxkX2ludF9jc3Qg KFRSRUVfVFlQRSAoc3RlcF9leHByKSwgdmYpKTsNCj4gPiArDQo+ID4gKwkgICAgICBuaSA9IGZv bGRfYnVpbGQyIChNSU5VU19FWFBSLCBUUkVFX1RZUEUgKHN0ZXBfZXhwciksDQo+ID4gKwkJCQlm b2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoc3RlcF9leHByKSwNCj4gPiArCQkJCQkgICAgICBuaXRl cnNfb3JpZyksDQo+ID4gKwkJCQlmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoc3RlcF9leHByKSwg bmkpKTsNCj4gPiArCSAgICB9DQo+ID4gKwkgIGVsc2UNCj4gPiArCSAgICAvKiBJZiB0aGUgbG9v cCdzIFZGIGlzbid0IGNvbnN0YW50IHRoZW4gdGhlIGxvb3AgbXVzdCBoYXZlIGJlZW4NCj4gPiAr CSAgICAgICBtYXNrZWQsIHNvIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3Agd2Uga25vdyB3ZSBoYXZl IGZpbmlzaGVkDQo+ID4gKwkgICAgICAgdGhlIGVudGlyZSBsb29wIGFuZCBmb3VuZCBub3RoaW5n LiAgKi8NCj4gPiArCSAgICBuaSA9IGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKHN0ZXBfZXhw cikpOw0KPiA+ICsNCj4gPiArCSAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChuaSkgPT0gSU5URUdF Ul9DU1QpOw0KPiA+ICsNCj4gPiArCSAgdmFyID0gY3JlYXRlX3RtcF92YXIgKHR5cGUsICJ0bXAi KTsNCj4gPiArDQo+ID4gKwkgIGxhc3RfZ3NpID0gZ3NpX2xhc3RfYmIgKGV4aXRfYmIpOw0KPiA+ ICsJICBnaW1wbGVfc2VxIG5ld19zdG10cyA9IE5VTEw7DQo+ID4gKwkgIG5pX25hbWUgPSBmb3Jj ZV9naW1wbGVfb3BlcmFuZCAobmksICZuZXdfc3RtdHMsIGZhbHNlLCB2YXIpOw0KPiA+ICsJICAv KiBFeGl0X2JiIHNob3VsZG4ndCBiZSBlbXB0eS4gICovDQo+ID4gKwkgIGlmICghZ3NpX2VuZF9w IChsYXN0X2dzaSkpDQo+ID4gKwkgICAgZ3NpX2luc2VydF9zZXFfYWZ0ZXIgKCZsYXN0X2dzaSwg bmV3X3N0bXRzLCBHU0lfU0FNRV9TVE1UKTsNCj4gPiArCSAgZWxzZQ0KPiA+ICsJICAgIGdzaV9p bnNlcnRfc2VxX2JlZm9yZSAoJmxhc3RfZ3NpLCBuZXdfc3RtdHMsIEdTSV9TQU1FX1NUTVQpOw0K PiA+ICsNCj4gPiArCSAgYWRqdXN0X3BoaV9hbmRfZGVidWdfc3RtdHMgKHBoaTEsIHVwZGF0ZV9l LCBuaV9uYW1lKTsNCj4gPiArDQo+ID4gKwkgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBleGl0 cy5sZW5ndGggKCk7IGkrKykNCj4gPiArCSAgICBhZGp1c3RfcGhpX2FuZF9kZWJ1Z19zdG10cyAo cGhpMSwgZXhpdHNbaV0sDQo+ID4gKwkJCQkJYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFDQo+ID4g KHN0ZXBfZXhwciksDQo+ID4gKwkJCQkJCSAgICAgICB2ZikpOw0KPiA+ICsJICBpdnRtcCA9IGdp bXBsZV9waGlfcmVzdWx0IChwaGkxKTsNCj4gPiArCX0NCj4gPiArICAgICAgZWxzZQ0KPiA+ICsJ Y29udGludWU7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBpdnRtcDsNCj4gPiAg fQ0KPiA+DQo+ID4gIC8qIFJldHVybiBhIGdpbXBsZSB2YWx1ZSBjb250YWluaW5nIHRoZSBtaXNh bGlnbm1lbnQgKG1lYXN1cmVkIGluIHZlY3Rvcg0KPiA+IEBAIC0yMDk2LDcgKzIzNzYsNyBAQCB2 ZWN0X2dlbl92ZWN0b3JfbG9vcF9uaXRlcnNfbXVsdF92Zg0KPiA+IChsb29wX3ZlY19pbmZvIGxv b3BfdmluZm8sDQo+ID4gICAgY2xhc3MgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAobG9v cF92aW5mbyk7DQo+ID4gICAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChuaXRlcnNfdmVjdG9yKTsN Cj4gPiAgICB0cmVlIGxvZ192ZiA9IGJ1aWxkX2ludF9jc3QgKHR5cGUsIGV4YWN0X2xvZzIgKHZm KSk7DQo+ID4gLSAgYmFzaWNfYmxvY2sgZXhpdF9iYiA9IHNpbmdsZV9leGl0IChsb29wKS0+ZGVz dDsNCj4gPiArICBiYXNpY19ibG9jayBleGl0X2JiID0gbm9ybWFsX2V4aXQgKGxvb3ApLT5kZXN0 Ow0KPiA+DQo+ID4gICAgZ2NjX2Fzc2VydCAobml0ZXJzX3ZlY3Rvcl9tdWx0X3ZmX3B0ciAhPSBO VUxMKTsNCj4gPiAgICB0cmVlIG5pdGVyc192ZWN0b3JfbXVsdF92ZiA9IGZvbGRfYnVpbGQyIChM U0hJRlRfRVhQUiwgdHlwZSwNCj4gPiBAQCAtMjEyMywxOSArMjQwMyw0NiBAQCBmaW5kX2d1YXJk X2FyZyAoY2xhc3MgbG9vcCAqbG9vcCwgY2xhc3MgbG9vcA0KPiA+ICplcGlsb2cgQVRUUklCVVRF X1VOVVNFRCwNCj4gPiAgCQlncGhpICpsY3NzYV9waGkpDQo+ID4gIHsNCj4gPiAgICBncGhpX2l0 ZXJhdG9yIGdzaTsNCj4gPiAtICBlZGdlIGUgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+ID4gKyAg ZWRnZSBlID0gbm9ybWFsX2V4aXQgKGxvb3ApOw0KPiA+DQo+ID4gLSAgZ2NjX2Fzc2VydCAoc2lu Z2xlX3ByZWRfcCAoZS0+ZGVzdCkpOw0KPiA+ICAgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0X3BoaXMg KGUtPmRlc3QpOyAhZ3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4dCAoJmdzaSkpDQo+ID4gICAgICB7 DQo+ID4gICAgICAgIGdwaGkgKnBoaSA9IGdzaS5waGkgKCk7DQo+ID4gLSAgICAgIGlmIChvcGVy YW5kX2VxdWFsX3AgKFBISV9BUkdfREVGIChwaGksIDApLA0KPiA+IC0JCQkgICBQSElfQVJHX0RF RiAobGNzc2FfcGhpLCAwKSwgMCkpDQo+ID4gKyAgICAgIC8qIE5lc3RlZCBsb29wcyB3aXRoIG11 bHRpcGxlIGV4aXRzIGNhbiBoYXZlIGRpZmZlcmVudCBubyMgcGhpIG5vZGUNCj4gPiArCSBhcmd1 bWVudHMgYmV0d2VlbiB0aGUgbWFpbiBsb29wIGFuZCBlcGlsb2cgYXMgZXBpbG9nIGZhbGxzIHRv IHRoZQ0KPiA+ICsJIHNlY29uZCBsb29wLiAgKi8NCj4gPiArICAgICAgaWYgKGdpbXBsZV9waGlf bnVtX2FyZ3MgKHBoaSkgPiBlLT5kZXN0X2lkeA0KPiA+ICsJICAmJiBvcGVyYW5kX2VxdWFsX3Ag KFBISV9BUkdfREVGIChwaGksIGUtPmRlc3RfaWR4KSwNCj4gPiArCQkJICAgICAgUEhJX0FSR19E RUYgKGxjc3NhX3BoaSwgMCksIDApKQ0KPiA+ICAJcmV0dXJuIFBISV9SRVNVTFQgKHBoaSk7DQo+ ID4gICAgICB9DQo+ID4gICAgcmV0dXJuIE5VTExfVFJFRTsNCj4gPiAgfQ0KPiA+DQo+ID4gKy8q IFN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgZWRnZSB3YWxrIGFsbCBpbnN0cnVjdGlvbnMgYW5k IGZpbmQgdGhlIGxhc3QNCj4gPiArICAgVlVTRS9WREVGIGluIHRoZSBiYXNpYyBibG9jay4gICov DQo+ID4gKw0KPiA+ICtzdGF0aWMgdHJlZQ0KPiA+ICtnaW1wbGVfZmluZF9sYXN0X21lbV91c2Ug KGVkZ2UgZSkNCj4gPiArew0KPiA+ICsgIGJhc2ljX2Jsb2NrIGJiID0gZS0+c3JjOw0KPiA+ICsg IHRyZWUgcmVzID0gTlVMTDsNCj4gPiArICBnaW1wbGVfc3RtdF9pdGVyYXRvciBpdGVyID0gZ3Np X2xhc3RfYmIgKGJiKTsNCj4gPiArICBkbw0KPiA+ICsgIHsNCj4gPiArICAgIGdpbXBsZSAqc3Rt dCA9IGdzaV9zdG10IChpdGVyKTsNCj4gPiArICAgIGlmICgocmVzID0gZ2ltcGxlX3ZkZWYgKHN0 bXQpKSkNCj4gPiArICAgICAgcmV0dXJuIHJlczsNCj4gPiArDQo+ID4gKyAgICBpZiAoKHJlcyA9 IGdpbXBsZV92dXNlIChzdG10KSkpDQo+ID4gKyAgICAgIHJldHVybiByZXM7DQo+ID4gKw0KPiA+ ICsgICAgZ3NpX3ByZXYgKCZpdGVyKTsNCj4gPiArICB9IHdoaWxlICghZ3NpX2VuZF9wIChpdGVy KSk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAvKiBG dW5jdGlvbiBzbHBlZWxfdHJlZV9kdXBsaWNhdGVfbG9vcF90b19lZGdlX2NmZyBkdXBsY2lhdGVz DQo+ID4gRklSU1QvU0VDT05EDQo+ID4gICAgIGZyb20gU0VDT05EL0ZJUlNUIGFuZCBwdXRzIGl0 IGF0IHRoZSBvcmlnaW5hbCBsb29wJ3MgcHJlaGVhZGVyL2V4aXQNCj4gPiAgICAgZWRnZSwgdGhl IHR3byBsb29wcyBhcmUgYXJyYW5nZWQgYXMgYmVsb3c6DQo+ID4gQEAgLTIxODUsNiArMjQ5Miw3 IEBAIGZpbmRfZ3VhcmRfYXJnIChjbGFzcyBsb29wICpsb29wLCBjbGFzcyBsb29wDQo+ICplcGls b2cNCj4gPiBBVFRSSUJVVEVfVU5VU0VELA0KPiA+ICBzdGF0aWMgdm9pZA0KPiA+ICBzbHBlZWxf dXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9vcHMgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4g PiAgCQkJCSAgIGNsYXNzIGxvb3AgKmZpcnN0LCBjbGFzcyBsb29wICpzZWNvbmQsDQo+ID4gKwkJ CQkgICB0cmVlICpsY3NzYV9pdnRtcCwNCj4gPiAgCQkJCSAgIGJvb2wgY3JlYXRlX2xjc3NhX2Zv cl9pdl9waGlzKQ0KPiA+ICB7DQo+ID4gICAgZ3BoaV9pdGVyYXRvciBnc2lfdXBkYXRlLCBnc2lf b3JpZzsNCj4gPiBAQCAtMjE5MiwxMCArMjUwMCwxOCBAQCBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rl c19mb3JfbG9vcHMNCj4gPiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+DQo+ID4gICAg ZWRnZSBmaXJzdF9sYXRjaF9lID0gRURHRV9TVUNDIChmaXJzdC0+bGF0Y2gsIDApOw0KPiA+ICAg IGVkZ2Ugc2Vjb25kX3ByZWhlYWRlcl9lID0gbG9vcF9wcmVoZWFkZXJfZWRnZSAoc2Vjb25kKTsN Cj4gPiAtICBiYXNpY19ibG9jayBiZXR3ZWVuX2JiID0gc2luZ2xlX2V4aXQgKGZpcnN0KS0+ZGVz dDsNCj4gPiArICBhdXRvX3ZlYzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGZp cnN0KTsNCj4gPiArICBiYXNpY19ibG9jayBiZXR3ZWVuX2JiID0gZXhpdHNbMF0tPmRlc3Q7DQo+ ID4gKw0KPiA+ICsgIGJvb2wgZWFybHlfZXhpdCA9IExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChs b29wX3ZpbmZvKTsNCj4gPiArICAvKiBGb3IgZWFybHkgZXhpdHMgd2hlbiB3ZSBjcmVhdGUgdGhl IG1lcmdlIEJCIHdlIG11c3QgbWFpbnRhaW4gaXQgaW4NCj4gPiArICAgICBMQ1NTQSBmb3JtLCBv dGhlcndpc2UgdGhlIGZpbmFsIHZlY3Rvcml6ZXIgcGFzc2VzIHdpbGwgY3JlYXRlIHRoZQ0KPiA+ ICsgICAgIHdyb25nIFBISSBub2RlcyBoZXJlLiAgKi8NCj4gPiArICBjcmVhdGVfbGNzc2FfZm9y X2l2X3BoaXMgPSBjcmVhdGVfbGNzc2FfZm9yX2l2X3BoaXMgfHwgZWFybHlfZXhpdDsNCj4gPg0K PiA+ICAgIGdjY19hc3NlcnQgKGJldHdlZW5fYmIgPT0gc2Vjb25kX3ByZWhlYWRlcl9lLT5zcmMp Ow0KPiA+IC0gIGdjY19hc3NlcnQgKHNpbmdsZV9wcmVkX3AgKGJldHdlZW5fYmIpICYmIHNpbmds ZV9zdWNjX3ANCj4gPiAoYmV0d2Vlbl9iYikpOw0KPiA+ICsgIGdjY19hc3NlcnQgKChzaW5nbGVf cHJlZF9wIChiZXR3ZWVuX2JiKSAmJiBzaW5nbGVfc3VjY19wDQo+ID4gKGJldHdlZW5fYmIpKQ0K PiA+ICsJICAgICAgfHwgZWFybHlfZXhpdCk7DQo+ID4gICAgLyogRWl0aGVyIHRoZSBmaXJzdCBs b29wIG9yIHRoZSBzZWNvbmQgaXMgdGhlIGxvb3AgdG8gYmUgdmVjdG9yaXplZC4gICovDQo+ID4g ICAgZ2NjX2Fzc2VydCAobG9vcCA9PSBmaXJzdCB8fCBsb29wID09IHNlY29uZCk7DQo+ID4NCj4g PiBAQCAtMjIxNSwxMCArMjUzMSw0MCBAQCBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbG9v cHMNCj4gPiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiA+ICAJew0KPiA+ICAJICB0cmVl IG5ld19yZXMgPSBjb3B5X3NzYV9uYW1lIChQSElfUkVTVUxUIChvcmlnX3BoaSkpOw0KPiA+ICAJ ICBncGhpICpsY3NzYV9waGkgPSBjcmVhdGVfcGhpX25vZGUgKG5ld19yZXMsIGJldHdlZW5fYmIp Ow0KPiA+IC0JICBhZGRfcGhpX2FyZyAobGNzc2FfcGhpLCBhcmcsIHNpbmdsZV9leGl0IChmaXJz dCksDQo+ID4gVU5LTk9XTl9MT0NBVElPTik7DQo+ID4gKw0KPiA+ICsJICAvKiBUaGUgZmlyc3Qg ZXhpdCBpcyBhbHdheXMgdGhlIGxvb3AgbGF0Y2gsIHNvIGhhbmRsZSB0aGF0DQo+ID4gKwkgICAg IHNlcGVyYXRlbHkuICAqLw0KPiA+ICsJICBnY2NfYXNzZXJ0IChhcmcpOw0KPiA+ICsJICBhZGRf cGhpX2FyZyAobGNzc2FfcGhpLCBhcmcsIGV4aXRzWzBdLCBVTktOT1dOX0xPQ0FUSU9OKTsNCj4g PiArDQo+ID4gKwkgIC8qIFRoZSBlYXJseSBleGl0cyBhcmUgcHJvY2Vzc2VkIGluIG9yZGVyIHN0 YXJ0aW5nIGZyb20gZXhpdCAxLiAgKi8NCj4gPiArCSAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8 IGV4aXRzLmxlbmd0aCAoKTsgaSsrKQ0KPiA+ICsJICAgIHsNCj4gPiArCSAgICAgIHRyZWUgcGhp X2FyZzsNCj4gPiArCSAgICAgIGlmIChpdl9waGlfcCAodmVjdF9waGlfaW5mbykpDQo+ID4gKwkJ LyogRm9yIGluZHVjdGlvbiB2YWx1ZXMganVzdCBjb3B5IHRoZSBwcmV2aW91cyBvbmUgYXMgdGhl DQo+ID4gKwkJICAgY3VycmVudCBpdGVyYXRpb24gZGlkIG5vdCBmaW5pc2guICBXZSdsbCB1cGRh dGUgYXMgbmVlZGVkDQo+ID4gKwkJICAgbGF0ZXIgb24uICAqLw0KPiA+ICsJCXBoaV9hcmcgPSBn aW1wbGVfcGhpX3Jlc3VsdCAob3JpZ19waGkpOw0KPiA+ICsJICAgICAgZWxzZQ0KPiA+ICsJCXBo aV9hcmcgPSBnaW1wbGVfZmluZF9sYXN0X21lbV91c2UgKGV4aXRzW2ldKTsNCj4gPiArCSAgICAg IC8qIElmIHdlIGRpZG4ndCBmaW5kIGFueSBqdXN0IGNvcHkgdGhlIGV4aXN0aW5nIG9uZSBhbmQg bGVhdmUNCj4gPiArCQkgaXQgdG8gdGhlIG90aGVycyB0byBmaXggaXQgdXAuICAqLw0KPiA+ICsJ ICAgICAgaWYgKCFwaGlfYXJnKQ0KPiA+ICsJCXBoaV9hcmcgPSBnaW1wbGVfcGhpX3Jlc3VsdCAo b3JpZ19waGkpOw0KPiA+ICsJICAgICAgYWRkX3BoaV9hcmcgKGxjc3NhX3BoaSwgcGhpX2FyZywg ZXhpdHNbaV0sIFVOS05PV05fTE9DQVRJT04pOw0KPiA+ICsJICAgIH0NCj4gPiAgCSAgYXJnID0g bmV3X3JlczsNCj4gPiAgCX0NCj4gPg0KPiA+ICsgICAgICAvKiBOb3JtYWxseSBhYmxlIHRvIGRp c3Rpbmd1aXNoIGJldHdlZW4gdGhlIGl0ZXJhdG9yIGNvdW50ZXIgYW5kIHRoZQ0KPiA+ICsJIGl2 dGVtcHMgYnUgbG9va2luZyBhdCB0aGUgU1RNVF9WSU5GT19UWVBFIG9mIHRoZSBwaGkgbm9kZS4N Cj4gPiArCSBob3dldmVyIGZvciBzb21lIHJlYXNvbiB0aGlzIGlzbid0IGNvbnNpc3RlbnRseSBz ZXQuICBJcyB0aGVyZSBhDQo+ID4gKwkgYmV0dGVyIHdheT8/LiAgKi8NCj4gPiArICAgICAgaWYg KGxjc3NhX2l2dG1wDQo+ID4gKwkgICYmIGl2X3BoaV9wICh2ZWN0X3BoaV9pbmZvKSkNCj4gPiAr CSpsY3NzYV9pdnRtcCA9IGFyZzsNCj4gPiArDQo+ID4gICAgICAgIC8qIFVwZGF0ZSBQSEkgbm9k ZSBpbiB0aGUgc2Vjb25kIGxvb3AgYnkgcmVwbGFjaW5nIGFyZyBvbiB0aGUgbG9vcCdzDQo+ID4g IAkgaW5jb21pbmcgZWRnZS4gICovDQo+ID4gICAgICAgIGFkanVzdF9waGlfYW5kX2RlYnVnX3N0 bXRzICh1cGRhdGVfcGhpLCBzZWNvbmRfcHJlaGVhZGVyX2UsDQo+IGFyZyk7DQo+ID4gQEAgLTIy MjgsNyArMjU3NCw4IEBAIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcw0KPiA+IChs b29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gICAgICAgZm9yIGNvcnJlY3QgdmVjdG9yaXph dGlvbiBvZiBsaXZlIHN0bXRzLiAgKi8NCj4gPiAgICBpZiAobG9vcCA9PSBmaXJzdCkNCj4gPiAg ICAgIHsNCj4gPiAtICAgICAgYmFzaWNfYmxvY2sgb3JpZ19leGl0ID0gc2luZ2xlX2V4aXQgKHNl Y29uZCktPmRlc3Q7DQo+ID4gKyAgICAgIGF1dG9fdmVjPGVkZ2U+IG5ld19leGl0cyA9IGdldF9s b29wX2V4aXRfZWRnZXMgKHNlY29uZCk7DQo+ID4gKyAgICAgIGJhc2ljX2Jsb2NrIG9yaWdfZXhp dCA9IG5ld19leGl0c1swXS0+ZGVzdDsNCj4gPiAgICAgICAgZm9yIChnc2lfb3JpZyA9IGdzaV9z dGFydF9waGlzIChvcmlnX2V4aXQpOw0KPiA+ICAJICAgIWdzaV9lbmRfcCAoZ3NpX29yaWcpOyBn c2lfbmV4dCAoJmdzaV9vcmlnKSkNCj4gPiAgCXsNCj4gPiBAQCAtMjI0Myw3ICsyNTkwLDE1IEBA IHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcw0KPiA+IChsb29wX3ZlY19pbmZvIGxv b3BfdmluZm8sDQo+ID4NCj4gPiAgCSAgdHJlZSBuZXdfcmVzID0gY29weV9zc2FfbmFtZSAob3Jp Z19hcmcpOw0KPiA+ICAJICBncGhpICpsY3BoaSA9IGNyZWF0ZV9waGlfbm9kZSAobmV3X3Jlcywg YmV0d2Vlbl9iYik7DQo+ID4gLQkgIGFkZF9waGlfYXJnIChsY3BoaSwgb3JpZ19hcmcsIHNpbmds ZV9leGl0IChmaXJzdCksDQo+ID4gVU5LTk9XTl9MT0NBVElPTik7DQo+ID4gKwkgIC8qIFRoZSBm aXJzdCBleGl0IGlzIGFsd2F5cyB0aGUgbG9vcCBsYXRjaCwgc28gaGFuZGxlIHRoYXQNCj4gPiAr CSAgICAgc2VwZXJhdGVseS4gICovDQo+ID4gKwkgIGFkZF9waGlfYXJnIChsY3BoaSwgb3JpZ19h cmcsIG5ld19leGl0c1swXSwNCj4gPiBVTktOT1dOX0xPQ0FUSU9OKTsNCj4gPiArCSAgLyogVGhl IGVhcmx5IGV4aXRzIGFyZSBwcm9jZXNzZWQgaW4gb3JkZXIgc3RhcnRpbmcgZnJvbSBleGl0IDEu ICAqLw0KPiA+ICsJICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbmV3X2V4aXRzLmxlbmd0aCAo KTsgaSsrKQ0KPiA+ICsJICAgIHsNCj4gPiArCSAgICAgIHRyZWUgcGhpX2FyZyA9IGdpbXBsZV9w aGlfcmVzdWx0IChvcmlnX3BoaSk7DQo+ID4gKwkgICAgICBhZGRfcGhpX2FyZyAobGNwaGksIHBo aV9hcmcsIGV4aXRzW2ldLCBVTktOT1dOX0xPQ0FUSU9OKTsNCj4gPiArCSAgICB9DQo+ID4gIAl9 DQo+ID4gICAgICB9DQo+ID4gIH0NCj4gPiBAQCAtMjM5MywxMyArMjc0OCwxMSBAQCBzbHBlZWxf dXBkYXRlX3BoaV9ub2Rlc19mb3JfZ3VhcmQyIChjbGFzcw0KPiA+IGxvb3AgKmxvb3AsIGNsYXNz IGxvb3AgKmVwaWxvZywNCj4gPiAgICBnY2NfYXNzZXJ0IChzaW5nbGVfc3VjY19wIChtZXJnZV9i YikpOw0KPiA+ICAgIGVkZ2UgZSA9IHNpbmdsZV9zdWNjX2VkZ2UgKG1lcmdlX2JiKTsNCj4gPiAg ICBiYXNpY19ibG9jayBleGl0X2JiID0gZS0+ZGVzdDsNCj4gPiAtICBnY2NfYXNzZXJ0IChzaW5n bGVfcHJlZF9wIChleGl0X2JiKSk7DQo+ID4gLSAgZ2NjX2Fzc2VydCAoc2luZ2xlX3ByZWQgKGV4 aXRfYmIpID09IHNpbmdsZV9leGl0IChlcGlsb2cpLT5kZXN0KTsNCj4gPg0KPiA+ICAgIGZvciAo Z3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGV4aXRfYmIpOyAhZ3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4 dCAoJmdzaSkpDQo+ID4gICAgICB7DQo+ID4gICAgICAgIGdwaGkgKnVwZGF0ZV9waGkgPSBnc2ku cGhpICgpOw0KPiA+IC0gICAgICB0cmVlIG9sZF9hcmcgPSBQSElfQVJHX0RFRiAodXBkYXRlX3Bo aSwgMCk7DQo+ID4gKyAgICAgIHRyZWUgb2xkX2FyZyA9IFBISV9BUkdfREVGICh1cGRhdGVfcGhp LCBlLT5kZXN0X2lkeCk7DQo+ID4NCj4gPiAgICAgICAgdHJlZSBtZXJnZV9hcmcgPSBOVUxMX1RS RUU7DQo+ID4NCj4gPiBAQCAtMjQzOCwxMiArMjc5MSwxNCBAQCBzdGF0aWMgdm9pZA0KPiA+ICBz bHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfbGNzc2EgKGNsYXNzIGxvb3AgKmVwaWxvZykNCj4g PiAgew0KPiA+ICAgIGdwaGlfaXRlcmF0b3IgZ3NpOw0KPiA+IC0gIGJhc2ljX2Jsb2NrIGV4aXRf YmIgPSBzaW5nbGVfZXhpdCAoZXBpbG9nKS0+ZGVzdDsNCj4gPiArICBhdXRvX3ZlYzxlZGdlPiBl eGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGVwaWxvZyk7DQo+ID4NCj4gPiAtICBnY2NfYXNz ZXJ0IChzaW5nbGVfcHJlZF9wIChleGl0X2JiKSk7DQo+ID4gLSAgZWRnZSBlID0gRURHRV9QUkVE IChleGl0X2JiLCAwKTsNCj4gPiAtICBmb3IgKGdzaSA9IGdzaV9zdGFydF9waGlzIChleGl0X2Ji KTsgIWdzaV9lbmRfcCAoZ3NpKTsgZ3NpX25leHQgKCZnc2kpKQ0KPiA+IC0gICAgcmVuYW1lX3Vz ZV9vcCAoUEhJX0FSR19ERUZfUFRSX0ZST01fRURHRSAoZ3NpLnBoaSAoKSwgZSkpOw0KPiA+ICsg IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0cy5sZW5ndGggKCk7IGkrKykNCj4gPiArICAg IHsNCj4gPiArICAgICAgYmFzaWNfYmxvY2sgZXhpdF9iYiA9IGV4aXRzW2ldLT5kZXN0Ow0KPiA+ ICsgICAgICBmb3IgKGdzaSA9IGdzaV9zdGFydF9waGlzIChleGl0X2JiKTsgIWdzaV9lbmRfcCAo Z3NpKTsgZ3NpX25leHQgKCZnc2kpKQ0KPiA+ICsJcmVuYW1lX3VzZV9vcCAoUEhJX0FSR19ERUZf UFRSX0ZST01fRURHRSAoZ3NpLnBoaSAoKSwNCj4gPiBleGl0c1tpXSkpOw0KPiA+ICsgICAgfQ0K PiA+ICB9DQo+ID4NCj4gPiAgLyogRVBJTE9HVUVfVklORk8gaXMgYW4gZXBpbG9ndWUgbG9vcCB0 aGF0IHdlIG5vdyBrbm93IHdvdWxkIG5lZWQgdG8NCj4gPiBAQCAtMjYyMSw2ICsyOTc2LDE0IEBA IHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLA0KPiB0cmVlDQo+ID4g bml0ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiA+ICAgICAgYm91bmRfZXBpbG9nICs9IHZmIC0gMTsN Cj4gPiAgICBpZiAoTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9HQVBTIChsb29wX3ZpbmZvKSkNCj4g PiAgICAgIGJvdW5kX2VwaWxvZyArPSAxOw0KPiA+ICsgIC8qIEZvciBlYXJseSBicmVha3MgdGhl IHNjYWxhciBsb29wIG5lZWRzIHRvIGV4ZWN1dGUgYXQgbW9zdCBWRiB0aW1lcw0KPiA+ICsgICAg IHRvIGZpbmQgdGhlIGVsZW1lbnQgdGhhdCBjYXVzZWQgdGhlIGJyZWFrLiAgKi8NCj4gPiArICBp ZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ICsgICAgew0KPiA+ ICsgICAgICBib3VuZF9lcGlsb2cgPSB2ZjsNCj4gPiArICAgICAgLyogRm9yY2UgYSBzY2FsYXIg ZXBpbG9ndWUgYXMgd2UgY2FuJ3QgdmVjdG9yaXplIHRoZSBpbmRleCBmaW5kaW5nLiAgKi8NCj4g PiArICAgICAgdmVjdF9lcGlsb2d1ZXMgPSBmYWxzZTsNCj4gPiArICAgIH0NCj4gPiAgICBib29s IGVwaWxvZ19wZWVsaW5nID0gbWF5YmVfbmUgKGJvdW5kX2VwaWxvZywgMFUpOw0KPiA+ICAgIHBv bHlfdWludDY0IGJvdW5kX3NjYWxhciA9IGJvdW5kX2VwaWxvZzsNCj4gPg0KPiA+IEBAIC0yNzgw LDE2ICszMTQzLDI0IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv LA0KPiB0cmVlDQo+ID4gbml0ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiA+ICAJCQkJICBib3VuZF9w cm9sb2cgKyBib3VuZF9lcGlsb2cpDQo+ID4gIAkJICAgICAgOiAoIUxPT1BfUkVRVUlSRVNfVkVS U0lPTklORyAobG9vcF92aW5mbykNCj4gPiAgCQkJIHx8IHZlY3RfZXBpbG9ndWVzKSk7DQo+ID4g Kw0KPiA+ICsgIC8qIFdlIG9ubHkgc3VwcG9ydCBlYXJseSBicmVhayB2ZWN0b3JpemF0aW9uIG9u IGtub3duIGJvdW5kcyBhdCB0aGlzDQo+ID4gdGltZS4NCj4gPiArICAgICBUaGlzIG1lYW5zIHRo YXQgaWYgdGhlIHZlY3RvciBsb29wIGNhbid0IGJlIGVudGVyZWQgdGhlbiB3ZSB3b24ndA0KPiA+ IGdlbmVyYXRlDQo+ID4gKyAgICAgaXQgYXQgYWxsLiAgU28gZm9yIG5vdyBmb3JjZSBza2lwX3Zl Y3RvciBvZmYgYmVjYXVzZSB0aGUgYWRkaXRpb25hbCBjb250cm9sDQo+ID4gKyAgICAgZmxvdyBt ZXNzZXMgd2l0aCB0aGUgQkIgZXhpdHMgYW5kIHdlJ3ZlIGFscmVhZHkgYW5hbHl6ZWQgdGhlbS4g ICovDQo+ID4gKyBza2lwX3ZlY3RvciA9IHNraXBfdmVjdG9yICYmICFMT09QX1ZJTkZPX0VBUkxZ X0JSRUFLUw0KPiAobG9vcF92aW5mbyk7DQo+ID4gKw0KPiA+ICAgIC8qIEVwaWxvZyBsb29wIG11 c3QgYmUgZXhlY3V0ZWQgaWYgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIGZvciBlcGlsb2cNCj4g PiAgICAgICBsb29wIGlzIGtub3duIGF0IGNvbXBpbGUgdGltZSwgb3RoZXJ3aXNlIHdlIG5lZWQg dG8gYWRkIGEgY2hlY2sgYXQNCj4gPiAgICAgICB0aGUgZW5kIG9mIHZlY3RvciBsb29wIGFuZCBz a2lwIHRvIHRoZSBlbmQgb2YgZXBpbG9nIGxvb3AuICAqLw0KPiA+ICAgIGJvb2wgc2tpcF9lcGls b2cgPSAocHJvbG9nX3BlZWxpbmcgPCAwDQo+ID4gIAkJICAgICAgfHwgIUxPT1BfVklORk9fTklU RVJTX0tOT1dOX1AgKGxvb3BfdmluZm8pDQo+ID4gIAkJICAgICAgfHwgIXZmLmlzX2NvbnN0YW50 ICgpKTsNCj4gPiAtICAvKiBQRUVMSU5HX0ZPUl9HQVBTIGlzIHNwZWNpYWwgYmVjYXVzZSBlcGls b2cgbG9vcCBtdXN0IGJlIGV4ZWN1dGVkLg0KPiA+ICovDQo+ID4gLSAgaWYgKExPT1BfVklORk9f UEVFTElOR19GT1JfR0FQUyAobG9vcF92aW5mbykpDQo+ID4gKyAgLyogUEVFTElOR19GT1JfR0FQ UyBhbmQgcGVlbGluZyBmb3IgZWFybHkgYnJlYWtzIGFyZSBzcGVjaWFsIGJlY2F1c2UNCj4gPiBl cGlsb2cNCj4gPiArICAgICBsb29wIG11c3QgYmUgZXhlY3V0ZWQuICAqLw0KPiA+ICsgIGlmIChM T09QX1ZJTkZPX1BFRUxJTkdfRk9SX0dBUFMgKGxvb3BfdmluZm8pDQo+ID4gKyAgICAgIHx8IExP T1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKSkNCj4gPiAgICAgIHNraXBfZXBpbG9n ID0gZmFsc2U7DQo+ID4gLQ0KPiA+ICAgIGNsYXNzIGxvb3AgKnNjYWxhcl9sb29wID0gTE9PUF9W SU5GT19TQ0FMQVJfTE9PUCAobG9vcF92aW5mbyk7DQo+ID4gICAgYXV0b192ZWM8cHJvZmlsZV9j b3VudD4gb3JpZ2luYWxfY291bnRzOw0KPiA+ICAgIGJhc2ljX2Jsb2NrICpvcmlnaW5hbF9iYnMg PSBOVUxMOw0KPiA+IEBAIC0yODI4LDcgKzMxOTksNyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywgdHJlZQ0KPiA+IG5pdGVycywgdHJlZSBuaXRlcnNtMSwNCj4g PiAgICBpZiAocHJvbG9nX3BlZWxpbmcpDQo+ID4gICAgICB7DQo+ID4gICAgICAgIGUgPSBsb29w X3ByZWhlYWRlcl9lZGdlIChsb29wKTsNCj4gPiAtICAgICAgaWYgKCFzbHBlZWxfY2FuX2R1cGxp Y2F0ZV9sb29wX3AgKGxvb3AsIGUpKQ0KPiA+ICsgICAgICBpZiAoIXNscGVlbF9jYW5fZHVwbGlj YXRlX2xvb3BfcCAobG9vcF92aW5mbywgZSkpDQo+ID4gIAl7DQo+ID4gIAkgIGR1bXBfcHJpbnRm X2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIGxvb3BfbG9jLA0KPiA+ICAJCQkgICAibG9v cCBjYW4ndCBiZSBkdXBsaWNhdGVkIHRvIHByZWhlYWRlciBlZGdlLlxuIik7DQo+ID4gQEAgLTI4 NDMsNyArMzIxNCw3IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv LCB0cmVlDQo+ID4gbml0ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiA+ICAJICBnY2NfdW5yZWFjaGFi bGUgKCk7DQo+ID4gIAl9DQo+ID4gICAgICAgIHByb2xvZy0+Zm9yY2VfdmVjdG9yaXplID0gZmFs c2U7DQo+ID4gLSAgICAgIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9sb29wcyAobG9vcF92 aW5mbywgcHJvbG9nLCBsb29wLCB0cnVlKTsNCj4gPiArICAgICAgc2xwZWVsX3VwZGF0ZV9waGlf bm9kZXNfZm9yX2xvb3BzIChsb29wX3ZpbmZvLCBwcm9sb2csIGxvb3AsIE5VTEwsDQo+ID4gdHJ1 ZSk7DQo+ID4gICAgICAgIGZpcnN0X2xvb3AgPSBwcm9sb2c7DQo+ID4gICAgICAgIHJlc2V0X29y aWdpbmFsX2NvcHlfdGFibGVzICgpOw0KPiA+DQo+ID4gQEAgLTI5MDIsMTEgKzMyNzMsMTMgQEAg dmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+IHRyZWUNCj4gPiBu aXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4NCj4gPiAgICBpZiAoZXBpbG9nX3BlZWxpbmcpDQo+ ID4gICAgICB7DQo+ID4gLSAgICAgIGUgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+ID4gLSAgICAg IGlmICghc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChsb29wLCBlKSkNCj4gPiArICAgICAg YXV0b192ZWM8ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCj4gPiAr ICAgICAgZSA9IGV4aXRzWzBdOw0KPiA+ICsgICAgICBpZiAoIXNscGVlbF9jYW5fZHVwbGljYXRl X2xvb3BfcCAobG9vcF92aW5mbywgZSkpDQo+ID4gIAl7DQo+ID4gLQkgIGR1bXBfcHJpbnRmX2xv YyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIGxvb3BfbG9jLA0KPiA+IC0JCQkgICAibG9vcCBj YW4ndCBiZSBkdXBsaWNhdGVkIHRvIGV4aXQgZWRnZS5cbiIpOw0KPiA+ICsJICBpZiAoZHVtcF9l bmFibGVkX3AgKCkpDQo+ID4gKwkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElN SVpBVElPTiwgbG9vcF9sb2MsDQo+ID4gKwkJCSAgICAgImxvb3AgY2FuJ3QgYmUgZHVwbGljYXRl ZCB0byBleGl0IGVkZ2UuXG4iKTsNCj4gPiAgCSAgZ2NjX3VucmVhY2hhYmxlICgpOw0KPiA+ICAJ fQ0KPiA+ICAgICAgICAvKiBQZWVsIGVwaWxvZyBhbmQgcHV0IGl0IG9uIGV4aXQgZWRnZSBvZiBs b29wLiAgSWYgd2UgYXJlIHZlY3Rvcml6aW5nDQo+ID4gQEAgLTI5MjAsMTIgKzMyOTMsMTYgQEAg dmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+IHRyZWUNCj4gPiBu aXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gICAgICAgIGVwaWxvZyA9IHNscGVlbF90cmVlX2R1 cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIChsb29wLCBlcGlsb2csIGUpOw0KPiA+ICAgICAgICBp ZiAoIWVwaWxvZykNCj4gPiAgCXsNCj4gPiAtCSAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VE X09QVElNSVpBVElPTiwgbG9vcF9sb2MsDQo+ID4gLQkJCSAgICJzbHBlZWxfdHJlZV9kdXBsaWNh dGVfbG9vcF90b19lZGdlX2NmZw0KPiA+IGZhaWxlZC5cbiIpOw0KPiA+ICsJICBpZiAoZHVtcF9l bmFibGVkX3AgKCkpDQo+ID4gKwkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElN SVpBVElPTiwgbG9vcF9sb2MsDQo+ID4gKwkJCSAgICAgInNscGVlbF90cmVlX2R1cGxpY2F0ZV9s b29wX3RvX2VkZ2VfY2ZnDQo+ID4gZmFpbGVkLlxuIik7DQo+ID4gIAkgIGdjY191bnJlYWNoYWJs ZSAoKTsNCj4gPiAgCX0NCj4gPiAgICAgICAgZXBpbG9nLT5mb3JjZV92ZWN0b3JpemUgPSBmYWxz ZTsNCj4gPiAtICAgICAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xvb3BzIChsb29wX3Zp bmZvLCBsb29wLCBlcGlsb2csIGZhbHNlKTsNCj4gPiArDQo+ID4gKyAgICAgIHRyZWUgZWFybHlf YnJlYWtfaXZfbmFtZTsNCj4gPiArICAgICAgc2xwZWVsX3VwZGF0ZV9waGlfbm9kZXNfZm9yX2xv b3BzIChsb29wX3ZpbmZvLCBsb29wLCBlcGlsb2csDQo+ID4gKwkJCQkJICZlYXJseV9icmVha19p dl9uYW1lLCBmYWxzZSk7DQo+ID4NCj4gPiAgICAgICAgLyogU2NhbGFyIHZlcnNpb24gbG9vcCBt YXkgYmUgcHJlZmVycmVkLiAgSW4gdGhpcyBjYXNlLCBhZGQgZ3VhcmQNCj4gPiAgCSBhbmQgc2tp cCB0byBlcGlsb2cuICBOb3RlIHRoaXMgb25seSBoYXBwZW5zIHdoZW4gdGhlIG51bWJlciBvZg0K PiA+IEBAIC0yOTc4LDYgKzMzNTUsNyBAQCB2ZWN0X2RvX3BlZWxpbmcgKGxvb3BfdmVjX2luZm8g bG9vcF92aW5mbywgdHJlZQ0KPiA+IG5pdGVycywgdHJlZSBuaXRlcnNtMSwNCj4gPiAgICAgICAg dmVjdF9nZW5fdmVjdG9yX2xvb3Bfbml0ZXJzIChsb29wX3ZpbmZvLCBuaXRlcnMsDQo+ID4gIAkJ CQkgICBuaXRlcnNfdmVjdG9yLCBzdGVwX3ZlY3RvciwNCj4gPiAgCQkJCSAgIG5pdGVyc19ub19v dmVyZmxvdyk7DQo+ID4gKw0KPiA+ICAgICAgICBpZiAoIWludGVnZXJfb25lcCAoKnN0ZXBfdmVj dG9yKSkNCj4gPiAgCXsNCj4gPiAgCSAgLyogT24gZXhpdCBmcm9tIHRoZSBsb29wIHdlIHdpbGwg aGF2ZSBhbiBlYXN5IHdheSBvZiBjYWxjYWxhdGluZw0KPiA+IEBAIC0yOTg3LDkgKzMzNjUsMTMg QEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+IHRyZWUNCj4g PiBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gIAkgIFNTQV9OQU1FX0RFRl9TVE1UIChuaXRl cnNfdmVjdG9yX211bHRfdmYpID0NCj4gPiBnaW1wbGVfYnVpbGRfbm9wICgpOw0KPiA+ICAJICAq bml0ZXJzX3ZlY3Rvcl9tdWx0X3ZmX3ZhciA9IG5pdGVyc192ZWN0b3JfbXVsdF92ZjsNCj4gPiAg CX0NCj4gPiArICAgICAgZWxzZSBpZiAoTE9PUF9WSU5GT19FQVJMWV9CUkVBS1MgKGxvb3Bfdmlu Zm8pKQ0KPiA+ICsJdmVjdF9nZW5fdmVjdG9yX2xvb3Bfbml0ZXJzX211bHRfdmYgKGxvb3Bfdmlu Zm8sDQo+ID4gZWFybHlfYnJlYWtfaXZfbmFtZSwNCj4gPiArCQkJCQkgICAgICZuaXRlcnNfdmVj dG9yX211bHRfdmYpOw0KPiA+ICAgICAgICBlbHNlDQo+ID4gIAl2ZWN0X2dlbl92ZWN0b3JfbG9v cF9uaXRlcnNfbXVsdF92ZiAobG9vcF92aW5mbywgKm5pdGVyc192ZWN0b3IsDQo+ID4gIAkJCQkJ ICAgICAmbml0ZXJzX3ZlY3Rvcl9tdWx0X3ZmKTsNCj4gPiArDQo+ID4gICAgICAgIC8qIFVwZGF0 ZSBJVnMgb2Ygb3JpZ2luYWwgbG9vcCBhcyBpZiB0aGV5IHdlcmUgYWR2YW5jZWQgYnkNCj4gPiAg CSBuaXRlcnNfdmVjdG9yX211bHRfdmYgc3RlcHMuICAqLw0KPiA+ICAgICAgICBnY2NfY2hlY2tp bmdfYXNzZXJ0ICh2ZWN0X2Nhbl9hZHZhbmNlX2l2c19wIChsb29wX3ZpbmZvKSk7DQo+ID4gQEAg LTI5OTcsMTIgKzMzNzksOTcgQEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3ZlY19pbmZvIGxvb3Bf dmluZm8sDQo+IHRyZWUNCj4gPiBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4gICAgICAgIHZl Y3RfdXBkYXRlX2l2c19hZnRlcl92ZWN0b3JpemVyIChsb29wX3ZpbmZvLCBuaXRlcnNfdmVjdG9y X211bHRfdmYsDQo+ID4gIAkJCQkJdXBkYXRlX2UpOw0KPiA+DQo+ID4gKyAgICAgIC8qIEZvciBl YXJseSBicmVha3Mgd2UgbXVzdCBjcmVhdGUgYSBndWFyZCB0byBjaGVjayBob3cgbWFueQ0KPiBp dGVyYXRpb25zDQo+ID4gKwkgb2YgdGhlIHNjYWxhciBsb29wIGFyZSB5ZXQgdG8gYmUgcGVyZm9y bWVkLiAgKi8NCj4gPiArICAgICAgaWYgKExPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3Zp bmZvKSkNCj4gPiArCXsNCj4gPiArCSAgZ2NjX2Fzc2VydCAoZWFybHlfYnJlYWtfaXZfbmFtZSk7 DQo+ID4gKwkgIHRyZWUgaXZ0bXAgPQ0KPiA+ICsJICAgIHZlY3RfdXBkYXRlX2l2c19hZnRlcl9l YXJseV9icmVhayAobG9vcF92aW5mbywgZXBpbG9nLCB2Ziwgbml0ZXJzLA0KPiA+ICsJCQkJCSAg ICAgICAqbml0ZXJzX3ZlY3RvciwgdXBkYXRlX2UpOw0KPiA+ICsNCj4gPiArCSAgdHJlZSBndWFy ZF9jb25kID0gZm9sZF9idWlsZDIgKEVRX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLA0KPiA+ICsJ CQkJCSBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAobml0ZXJzKSwNCj4gPiArCQkJCQkJICAgICAg IGl2dG1wKSwNCj4gPiArCQkJCQkgYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAobml0ZXJzKSkp Ow0KPiA+ICsJICBiYXNpY19ibG9jayBndWFyZF9iYiA9IG5vcm1hbF9leGl0IChsb29wKS0+ZGVz dDsNCj4gPiArCSAgYXV0b192ZWM8ZWRnZT4gbmV3X2V4aXRzID0gZ2V0X2xvb3BfZXhpdF9lZGdl cyAoZXBpbG9nKTsNCj4gPiArCSAgLyogSWYgd2UgaGFkIGEgZmFsbHRocm91Z2ggZWRnZSwgdGhl IGd1YXJkIHdpbGwgdGhlIHRocmVhZGVkIHRocm91Z2gNCj4gPiArCSAgICAgYW5kIHNvIHdlIG1h eSBuZWVkIHRvIGZpbmQgdGhlIGFjdHVhbCBmaW5hbCBlZGdlLiAgKi8NCj4gPiArCSAgZWRnZSBm aW5hbF9lZGdlID0gbmV3X2V4aXRzWzBdOw0KPiA+ICsJICBiYXNpY19ibG9jayBndWFyZF90bzsN Cj4gPiArCSAgYm9vbCBmbl9leGl0X3AgPSBmYWxzZTsNCj4gPiArCSAgaWYgKGdzaV9lbmRfcCAo Z3NpX3N0YXJ0X25vbmRlYnVnX2JiIChmaW5hbF9lZGdlLT5kZXN0KSkNCj4gPiArCSAgICAgICYm ICFnc2lfZW5kX3AgKGdzaV9zdGFydF9waGlzIChmaW5hbF9lZGdlLT5kZXN0KSkNCj4gPiArCSAg ICAgICYmIHNpbmdsZV9zdWNjX3AgKGZpbmFsX2VkZ2UtPmRlc3QpKQ0KPiA+ICsJICAgIHsNCj4g PiArCSAgICAgIGF1dG8gZ3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGZpbmFsX2VkZ2UtPmRlc3QpOw0K PiA+ICsJICAgICAgd2hpbGUgKCFnc2lfZW5kX3AgKGdzaSkpDQo+ID4gKwkJZ3NpX3JlbW92ZSAo JmdzaSwgdHJ1ZSk7DQo+ID4gKwkgICAgICBndWFyZF90byA9IGZpbmFsX2VkZ2UtPmRlc3Q7DQo+ ID4gKwkgICAgICBmbl9leGl0X3AgPSB0cnVlOw0KPiA+ICsJICAgIH0NCj4gPiArCSAgZWxzZQ0K PiA+ICsJICAgIGd1YXJkX3RvID0gc3BsaXRfZWRnZSAobm9ybWFsX2V4aXQgKGVwaWxvZykpOw0K PiA+ICsNCj4gPiArCSAgZWRnZSBndWFyZF9lID0gc2xwZWVsX2FkZF9sb29wX2d1YXJkIChndWFy ZF9iYiwgZ3VhcmRfY29uZCwNCj4gPiBndWFyZF90bywNCj4gPiArCQkJCQkgICBndWFyZF9iYiwN Cj4gPiArCQkJCQkgICBwcm9iX2VwaWxvZy5pbnZlcnQgKCksDQo+ID4gKwkJCQkJICAgaXJyZWRf ZmxhZyk7DQo+ID4gKw0KPiA+ICsJICBiYXNpY19ibG9jayBkZXN0ID0gc2luZ2xlX3N1Y2MgKGd1 YXJkX3RvKTsNCj4gPiArCSAgLyogSWYgd2UgaGF2ZSBhIHNpbmdsZSBwcmVkIHRoZW4gdGhlIHBy ZXZpb3VzIGJsb2NrIGlzIHRoZSBpbW1lZGlhdGUNCj4gPiArCSAgICAgZG9taW5hdG9yLiAgIFRo aXMgbWF5IG9yIG1heSBub3QgYmUgdGhlIGd1YXJkIGJiLiAgSG93ZXZlciBpZiB3ZQ0KPiA+ICsJ ICAgICBoYXZlIG11bHRpcGxlIHByZWQgdGhlbiB0aGUgZ3VhcmQgQkIgbXVzdCBiZSB0aGUgZG9t aW5hdG9yIGFzIGFsbA0KPiA+ICsJICAgICBwcmV2aW91cyBleGl0cyBnb3QgcmV3cml0ZWQgdG8g dGhlIGd1YXJkIEJCLiAgKi8NCj4gPiArCSAgaWYgKHNpbmdsZV9wcmVkX3AgKGRlc3QpKQ0KPiA+ ICsJICAgIHNldF9pbW1lZGlhdGVfZG9taW5hdG9yIChDRElfRE9NSU5BVE9SUywgZGVzdCwgZ3Vh cmRfdG8pOw0KPiA+ICsJICBlbHNlDQo+ID4gKwkgICAgc2V0X2ltbWVkaWF0ZV9kb21pbmF0b3Ig KENESV9ET01JTkFUT1JTLCBkZXN0LCBndWFyZF9iYik7DQo+ID4gKw0KPiA+ICsJICAvKiBXZSBt dXN0IHVwZGF0ZSBhbGwgdGhlIGVkZ2VzIGZyb20gdGhlIG5ldyBndWFyZF9iYi4gICovDQo+ID4g KwkgIHNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9ndWFyZDIgKGxvb3AsIGVwaWxvZywgZ3Vh cmRfZSwNCj4gPiArCQkJCQkgICAgICBmaW5hbF9lZGdlKTsNCj4gPiArDQo+ID4gKwkgIC8qIElm IHdlIGhhdmUgYW4gYWRkaXRpb25hbCBmdW5jdGlvbmUgZXhpdCBibG9jaywgdGhlbiB0aHJlYWQg dGhlDQo+ID4gdXBkYXRlcw0KPiA+ICsJICAgICB0aHJvdWdoIHRvIHRoZSBibG9jay4gIExlYXZp bmcgaXQgdXAgdG8gdGhlIExDU1NBIGNsZWFudXAgcGFzcyB3aWxsDQo+ID4gKwkgICAgIGdldCB0 aGUgd3JvbmcgdmFsdWVzIGhlcmUgYXMgaXQgY2FuJ3QgaGFuZGxlIHRoZSBtZXJnZSBibG9jayB3 ZQ0KPiA+IGp1c3QNCj4gPiArCSAgICAgbWFkZSBjb3JyZWN0bHkuICAqLw0KPiA+ICsJICBpZiAo Zm5fZXhpdF9wKQ0KPiA+ICsJICAgIHsNCj4gPiArCQlncGhpX2l0ZXJhdG9yIGdzaV91cGRhdGUs IGdzaV9vcmlnLCBnc2lfdmVjdDsNCj4gPiArCQlmb3IgKGdzaV9vcmlnID0gZ3NpX3N0YXJ0X3Bo aXMgKGVwaWxvZy0+aGVhZGVyKSwNCj4gPiArCQkgICAgIGdzaV91cGRhdGUgPSBnc2lfc3RhcnRf cGhpcyAoZ3VhcmRfZS0+ZGVzdCksDQo+ID4gKwkJICAgICBnc2lfdmVjdCA9IGdzaV9zdGFydF9w aGlzIChsb29wLT5oZWFkZXIpOw0KPiA+ICsJCSAgICAgIWdzaV9lbmRfcCAoZ3NpX29yaWcpICYm ICFnc2lfZW5kX3AgKGdzaV91cGRhdGUpDQo+ID4gKwkJICAgICAmJiAhZ3NpX2VuZF9wIChnc2lf dmVjdCk7DQo+ID4gKwkJICAgICBnc2lfbmV4dCAoJmdzaV9vcmlnKSwgZ3NpX25leHQgKCZnc2lf dXBkYXRlKSwNCj4gPiArCQkgICAgIGdzaV9uZXh0ICgmZ3NpX3ZlY3QpKQ0KPiA+ICsJCSAgew0K PiA+ICsJCSAgICBncGhpICpvcmlnX3BoaSA9IGdzaV9vcmlnLnBoaSAoKTsNCj4gPiArCQkgICAg Z3BoaSAqdXBkYXRlX3BoaSA9IGdzaV91cGRhdGUucGhpICgpOw0KPiA+ICsJCSAgICBncGhpICp2 ZWN0X3BoaSA9IGdzaV92ZWN0LnBoaSAoKTsNCj4gPiArCQkgICAgc3RtdF92ZWNfaW5mbyBwaGlf aW5mbyA9IGxvb3BfdmluZm8tPmxvb2t1cF9zdG10DQo+ID4gKHZlY3RfcGhpKTsNCj4gPiArDQo+ ID4gKwkJICAgIGlmIChpdl9waGlfcCAocGhpX2luZm8pKQ0KPiA+ICsJCSAgICAgIGNvbnRpbnVl Ow0KPiA+ICsNCj4gPiArCQkgICAgdHJlZSBwaGlfYXJnID0gUEhJX0FSR19ERUZfRlJPTV9FREdF IChvcmlnX3BoaSwNCj4gPiB1cGRhdGVfZSk7DQo+ID4gKwkJICAgIFNFVF9QSElfQVJHX0RFRiAo dXBkYXRlX3BoaSwgdXBkYXRlX2UtPmRlc3RfaWR4LA0KPiA+IHBoaV9hcmcpOw0KPiA+ICsNCj4g PiArCQkgICAgcGhpX2FyZyA9IFBISV9BUkdfREVGX0ZST01fRURHRSAob3JpZ19waGksIGd1YXJk X2UpOw0KPiA+ICsJCSAgICBTRVRfUEhJX0FSR19ERUYgKHVwZGF0ZV9waGksIGd1YXJkX2UtPmRl c3RfaWR4LA0KPiA+IHBoaV9hcmcpOw0KPiA+ICsJCSAgfQ0KPiA+ICsJICAgIH0NCj4gPiArCSAg Zmx1c2hfcGVuZGluZ19zdG10cyAoZ3VhcmRfZSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICAgICAg ICBpZiAoc2tpcF9lcGlsb2cpDQo+ID4gIAl7DQo+ID4gIAkgIGd1YXJkX2NvbmQgPSBmb2xkX2J1 aWxkMiAoRVFfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsDQo+ID4gIAkJCQkgICAgbml0ZXJzLCBu aXRlcnNfdmVjdG9yX211bHRfdmYpOw0KPiA+IC0JICBndWFyZF9iYiA9IHNpbmdsZV9leGl0IChs b29wKS0+ZGVzdDsNCj4gPiAtCSAgZ3VhcmRfdG8gPSBzcGxpdF9lZGdlIChzaW5nbGVfZXhpdCAo ZXBpbG9nKSk7DQo+ID4gKwkgIGd1YXJkX2JiID0gbm9ybWFsX2V4aXQgKGxvb3ApLT5kZXN0Ow0K PiA+ICsJICBndWFyZF90byA9IHNwbGl0X2VkZ2UgKG5vcm1hbF9leGl0IChlcGlsb2cpKTsNCj4g PiAgCSAgZ3VhcmRfZSA9IHNscGVlbF9hZGRfbG9vcF9ndWFyZCAoZ3VhcmRfYmIsIGd1YXJkX2Nv bmQsDQo+ID4gZ3VhcmRfdG8sDQo+ID4gIAkJCQkJICAgc2tpcF92ZWN0b3IgPyBhbmNob3IgOiBn dWFyZF9iYiwNCj4gPiAgCQkJCQkgICBwcm9iX2VwaWxvZy5pbnZlcnQgKCksDQo+ID4gQEAgLTMw MTAsNyArMzQ3Nyw3IEBAIHZlY3RfZG9fcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv LCB0cmVlDQo+ID4gbml0ZXJzLCB0cmVlIG5pdGVyc20xLA0KPiA+ICAJICBpZiAodmVjdF9lcGls b2d1ZXMpDQo+ID4gIAkgICAgZXBpbG9ndWVfdmluZm8tPnNraXBfdGhpc19sb29wX2VkZ2UgPSBn dWFyZF9lOw0KPiA+ICAJICBzbHBlZWxfdXBkYXRlX3BoaV9ub2Rlc19mb3JfZ3VhcmQyIChsb29w LCBlcGlsb2csIGd1YXJkX2UsDQo+ID4gLQkJCQkJICAgICAgc2luZ2xlX2V4aXQgKGVwaWxvZykp Ow0KPiA+ICsJCQkJCSAgICAgIG5vcm1hbF9leGl0IChlcGlsb2cpKTsNCj4gPiAgCSAgLyogT25s eSBuZWVkIHRvIGhhbmRsZSBiYXNpYyBibG9jayBiZWZvcmUgZXBpbG9nIGxvb3AgaWYgaXQncyBu b3QNCj4gPiAgCSAgICAgdGhlIGd1YXJkX2JiLCB3aGljaCBpcyB0aGUgY2FzZSB3aGVuIHNraXBf dmVjdG9yIGlzIHRydWUuICAqLw0KPiA+ICAJICBpZiAoZ3VhcmRfYmIgIT0gYmJfYmVmb3JlX2Vw aWxvZykNCj4gPiBAQCAtMzAyMyw3ICszNDkwLDYgQEAgdmVjdF9kb19wZWVsaW5nIChsb29wX3Zl Y19pbmZvIGxvb3BfdmluZm8sIHRyZWUNCj4gPiBuaXRlcnMsIHRyZWUgbml0ZXJzbTEsDQo+ID4g IAl9DQo+ID4gICAgICAgIGVsc2UNCj4gPiAgCXNscGVlbF91cGRhdGVfcGhpX25vZGVzX2Zvcl9s Y3NzYSAoZXBpbG9nKTsNCj4gPiAtDQo+ID4gICAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQg Ym91bmQ7DQo+ID4gICAgICAgIGlmIChib3VuZF9zY2FsYXIuaXNfY29uc3RhbnQgKCZib3VuZCkp DQo+ID4gIAl7DQo+ID4gQEAgLTMxMTQsNyArMzU4MCw2IEBAIHZlY3RfZG9fcGVlbGluZyAobG9v cF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlDQo+ID4gbml0ZXJzLCB0cmVlIG5pdGVyc20xLA0K PiA+DQo+ID4gICAgYWRqdXN0X3ZlYy5yZWxlYXNlICgpOw0KPiA+ICAgIGZyZWVfb3JpZ2luYWxf Y29weV90YWJsZXMgKCk7DQo+ID4gLQ0KPiA+ICAgIHJldHVybiB2ZWN0X2VwaWxvZ3VlcyA/IGVw aWxvZyA6IE5VTEw7DQo+ID4gIH0NCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0 LWxvb3AuY2MgYi9nY2MvdHJlZS12ZWN0LWxvb3AuY2MNCj4gPiBpbmRleA0KPiA+DQo+IGQ1YzJi ZmY4MGJlOWJlMTUyNzA3ZWI5ZDM5MzJjODYzOTQ4ZGFhNzMuLjU0ODk0NmE2YmJmODg5MjA4NmEx N2ZlMzANCj4gPiAwM2RhMmMzZGNlYWRmNWIgMTAwNjQ0DQo+ID4gLS0tIGEvZ2NjL3RyZWUtdmVj dC1sb29wLmNjDQo+ID4gKysrIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmNjDQo+ID4gQEAgLTg0NCw4 MCArODQ0LDEwNiBAQCB2ZWN0X2ZpeHVwX3NjYWxhcl9jeWNsZXNfd2l0aF9wYXR0ZXJucw0KPiA+ IChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8pDQo+ID4gICAgIGluIE5VTUJFUl9PRl9JVEVSQVRJ T05TTTEuICBQbGFjZSB0aGUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIHRoZQ0KPiA+ICAgICBuaXRl ciBpbmZvcm1hdGlvbiBob2xkcyBpbiBBU1NVTVBUSU9OUy4NCj4gPg0KPiA+IC0gICBSZXR1cm4g dGhlIGxvb3AgZXhpdCBjb25kaXRpb24uICAqLw0KPiA+ICsgICBSZXR1cm4gdGhlIGxvb3AgZXhp dCBjb25kaXRpb25zLiAgKi8NCj4gPg0KPiA+DQo+ID4gLXN0YXRpYyBnY29uZCAqDQo+ID4gK3N0 YXRpYyB2ZWM8Z2NvbmQgKj4NCj4gPiAgdmVjdF9nZXRfbG9vcF9uaXRlcnMgKGNsYXNzIGxvb3Ag Kmxvb3AsIHRyZWUgKmFzc3VtcHRpb25zLA0KPiA+ICAJCSAgICAgIHRyZWUgKm51bWJlcl9vZl9p dGVyYXRpb25zLCB0cmVlDQo+ID4gKm51bWJlcl9vZl9pdGVyYXRpb25zbTEpDQo+ID4gIHsNCj4g PiAtICBlZGdlIGV4aXQgPSBzaW5nbGVfZXhpdCAobG9vcCk7DQo+ID4gKyAgYXV0b192ZWM8ZWRn ZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCj4gPiArICB2ZWM8Z2NvbmQg Kj4gY29uZHM7DQo+ID4gKyAgY29uZHMuY3JlYXRlIChleGl0cy5sZW5ndGggKCkpOw0KPiA+ICAg IGNsYXNzIHRyZWVfbml0ZXJfZGVzYyBuaXRlcl9kZXNjOw0KPiA+ICAgIHRyZWUgbml0ZXJfYXNz dW1wdGlvbnMsIG5pdGVyLCBtYXlfYmVfemVybzsNCj4gPiAtICBnY29uZCAqY29uZCA9IGdldF9s b29wX2V4aXRfY29uZGl0aW9uIChsb29wKTsNCj4gPg0KPiA+ICAgICphc3N1bXB0aW9ucyA9IGJv b2xlYW5fdHJ1ZV9ub2RlOw0KPiA+ICAgICpudW1iZXJfb2ZfaXRlcmF0aW9uc20xID0gY2hyZWNf ZG9udF9rbm93Ow0KPiA+ICAgICpudW1iZXJfb2ZfaXRlcmF0aW9ucyA9IGNocmVjX2RvbnRfa25v dzsNCj4gPiArDQo+ID4gICAgRFVNUF9WRUNUX1NDT1BFICgiZ2V0X2xvb3Bfbml0ZXJzIik7DQo+ ID4NCj4gPiAtICBpZiAoIWV4aXQpDQo+ID4gLSAgICByZXR1cm4gY29uZDsNCj4gPiArICBpZiAo ZXhpdHMuaXNfZW1wdHkgKCkpDQo+ID4gKyAgICByZXR1cm4gY29uZHM7DQo+ID4NCj4gPiAtICBt YXlfYmVfemVybyA9IE5VTExfVFJFRTsNCj4gPiAtICBpZiAoIW51bWJlcl9vZl9pdGVyYXRpb25z X2V4aXRfYXNzdW1wdGlvbnMgKGxvb3AsIGV4aXQsICZuaXRlcl9kZXNjLA0KPiA+IE5VTEwpDQo+ ID4gLSAgICAgIHx8IGNocmVjX2NvbnRhaW5zX3VuZGV0ZXJtaW5lZCAobml0ZXJfZGVzYy5uaXRl cikpDQo+ID4gLSAgICByZXR1cm4gY29uZDsNCj4gPiArICBpZiAoZHVtcF9lbmFibGVkX3AgKCkp DQo+ID4gKyAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLCAiTG9v cCBoYXMgJWQgZXhpdHMuXG4iLA0KPiA+ICsJCSAgICAgZXhpdHMubGVuZ3RoICgpKTsNCj4gPg0K PiA+IC0gIG5pdGVyX2Fzc3VtcHRpb25zID0gbml0ZXJfZGVzYy5hc3N1bXB0aW9uczsNCj4gPiAt ICBtYXlfYmVfemVybyA9IG5pdGVyX2Rlc2MubWF5X2JlX3plcm87DQo+ID4gLSAgbml0ZXIgPSBu aXRlcl9kZXNjLm5pdGVyOw0KPiA+ICsgIGVkZ2UgZXhpdDsNCj4gPiArICB1bnNpZ25lZCBpbnQg aTsNCj4gPiArICBGT1JfRUFDSF9WRUNfRUxUIChleGl0cywgaSwgZXhpdCkNCj4gPiArICAgIHsN Cj4gPiArICAgICAgZ2NvbmQgKmNvbmQgPSBnZXRfZWRnZV9jb25kaXRpb24gKGV4aXQpOw0KPiA+ ICsgICAgICBpZiAoY29uZCkNCj4gPiArCWNvbmRzLnNhZmVfcHVzaCAoY29uZCk7DQo+ID4NCj4g PiAtICBpZiAobWF5X2JlX3plcm8gJiYgaW50ZWdlcl96ZXJvcCAobWF5X2JlX3plcm8pKQ0KPiA+ IC0gICAgbWF5X2JlX3plcm8gPSBOVUxMX1RSRUU7DQo+ID4gKyAgICAgIGlmIChkdW1wX2VuYWJs ZWRfcCAoKSkNCj4gPiArCWR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24s ICJBbmFseXppbmcgZXhpdA0KPiA+ICVkLi4uXG4iLCBpKTsNCj4gPg0KPiA+IC0gIGlmIChtYXlf YmVfemVybykNCj4gPiAtICAgIHsNCj4gPiAtICAgICAgaWYgKENPTVBBUklTT05fQ0xBU1NfUCAo bWF5X2JlX3plcm8pKQ0KPiA+ICsgICAgICBtYXlfYmVfemVybyA9IE5VTExfVFJFRTsNCj4gPiAr ICAgICAgaWYgKCFudW1iZXJfb2ZfaXRlcmF0aW9uc19leGl0X2Fzc3VtcHRpb25zIChsb29wLCBl eGl0LCAmbml0ZXJfZGVzYywNCj4gPiBOVUxMKQ0KPiA+ICsgICAgICAgICAgfHwgY2hyZWNfY29u dGFpbnNfdW5kZXRlcm1pbmVkIChuaXRlcl9kZXNjLm5pdGVyKSkNCj4gPiArCWNvbnRpbnVlOw0K PiA+ICsNCj4gPiArICAgICAgbml0ZXJfYXNzdW1wdGlvbnMgPSBuaXRlcl9kZXNjLmFzc3VtcHRp b25zOw0KPiA+ICsgICAgICBtYXlfYmVfemVybyA9IG5pdGVyX2Rlc2MubWF5X2JlX3plcm87DQo+ ID4gKyAgICAgIG5pdGVyID0gbml0ZXJfZGVzYy5uaXRlcjsNCj4gPiArDQo+ID4gKyAgICAgIGlm IChtYXlfYmVfemVybyAmJiBpbnRlZ2VyX3plcm9wIChtYXlfYmVfemVybykpDQo+ID4gKwltYXlf YmVfemVybyA9IE5VTExfVFJFRTsNCj4gPiArDQo+ID4gKyAgICAgIGlmIChtYXlfYmVfemVybykN Cj4gPiAgCXsNCj4gPiAtCSAgLyogVHJ5IHRvIGNvbWJpbmUgbWF5X2JlX3plcm8gd2l0aCBhc3N1 bXB0aW9ucywgdGhpcyBjYW4gc2ltcGxpZnkNCj4gPiAtCSAgICAgY29tcHV0YXRpb24gb2Ygbml0 ZXIgZXhwcmVzc2lvbi4gICovDQo+ID4gLQkgIGlmIChuaXRlcl9hc3N1bXB0aW9ucyAmJiAhaW50 ZWdlcl9ub256ZXJvcCAobml0ZXJfYXNzdW1wdGlvbnMpKQ0KPiA+IC0JICAgIG5pdGVyX2Fzc3Vt cHRpb25zID0gZm9sZF9idWlsZDIgKFRSVVRIX0FORF9FWFBSLA0KPiA+IGJvb2xlYW5fdHlwZV9u b2RlLA0KPiA+IC0JCQkJCSAgICAgbml0ZXJfYXNzdW1wdGlvbnMsDQo+ID4gLQkJCQkJICAgICBm b2xkX2J1aWxkMSAoVFJVVEhfTk9UX0VYUFIsDQo+ID4gLQ0KPiA+IGJvb2xlYW5fdHlwZV9ub2Rl LA0KPiA+IC0JCQkJCQkJICBtYXlfYmVfemVybykpOw0KPiA+ICsJICBpZiAoQ09NUEFSSVNPTl9D TEFTU19QIChtYXlfYmVfemVybykpDQo+ID4gKwkgICAgew0KPiA+ICsJICAgICAgLyogVHJ5IHRv IGNvbWJpbmUgbWF5X2JlX3plcm8gd2l0aCBhc3N1bXB0aW9ucywgdGhpcyBjYW4NCj4gPiBzaW1w bGlmeQ0KPiA+ICsJCSBjb21wdXRhdGlvbiBvZiBuaXRlciBleHByZXNzaW9uLiAgKi8NCj4gPiAr CSAgICAgIGlmIChuaXRlcl9hc3N1bXB0aW9ucyAmJiAhaW50ZWdlcl9ub256ZXJvcCAobml0ZXJf YXNzdW1wdGlvbnMpKQ0KPiA+ICsJCW5pdGVyX2Fzc3VtcHRpb25zID0gZm9sZF9idWlsZDIgKFRS VVRIX0FORF9FWFBSLA0KPiA+IGJvb2xlYW5fdHlwZV9ub2RlLA0KPiA+ICsJCQkJCQkgbml0ZXJf YXNzdW1wdGlvbnMsDQo+ID4gKwkJCQkJCSBmb2xkX2J1aWxkMQ0KPiA+IChUUlVUSF9OT1RfRVhQ UiwNCj4gPiArDQo+ID4gYm9vbGVhbl90eXBlX25vZGUsDQo+ID4gKwkJCQkJCQkgICAgICBtYXlf YmVfemVybykpOw0KPiA+ICsJICAgICAgZWxzZQ0KPiA+ICsJCW5pdGVyID0gZm9sZF9idWlsZDMg KENPTkRfRVhQUiwgVFJFRV9UWVBFIChuaXRlciksDQo+ID4gbWF5X2JlX3plcm8sDQo+ID4gKwkJ CQkgICAgIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAobml0ZXIpLCAwKSwNCj4gPiArCQkJCSAg ICAgcmV3cml0ZV90b19ub25fdHJhcHBpbmdfb3ZlcmZsb3cNCj4gPiAobml0ZXIpKTsNCj4gPiAr DQo+ID4gKwkgICAgICBtYXlfYmVfemVybyA9IE5VTExfVFJFRTsNCj4gPiArCSAgICB9DQo+ID4g KwkgIGVsc2UgaWYgKGludGVnZXJfbm9uemVyb3AgKG1heV9iZV96ZXJvKSAmJiBpID09IDApDQo+ ID4gKwkgICAgew0KPiA+ICsJICAgICAgKm51bWJlcl9vZl9pdGVyYXRpb25zbTEgPSBidWlsZF9p bnRfY3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMCk7DQo+ID4gKwkgICAgICAqbnVtYmVyX29mX2l0 ZXJhdGlvbnMgPSBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMSk7DQo+ID4gKwkg ICAgICBjb250aW51ZTsNCj4gPiArCSAgICB9DQo+ID4gIAkgIGVsc2UNCj4gPiAtCSAgICBuaXRl ciA9IGZvbGRfYnVpbGQzIChDT05EX0VYUFIsIFRSRUVfVFlQRSAobml0ZXIpLCBtYXlfYmVfemVy bywNCj4gPiAtCQkJCSBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMCksDQo+ID4g LQkJCQkgcmV3cml0ZV90b19ub25fdHJhcHBpbmdfb3ZlcmZsb3cgKG5pdGVyKSk7DQo+ID4gKwkg ICAgY29udGludWU7DQo+ID4gKyAgICAgICB9DQo+ID4NCj4gPiAtCSAgbWF5X2JlX3plcm8gPSBO VUxMX1RSRUU7DQo+ID4gLQl9DQo+ID4gLSAgICAgIGVsc2UgaWYgKGludGVnZXJfbm9uemVyb3Ag KG1heV9iZV96ZXJvKSkNCj4gPiArICAgICAgLyogTG9vcCBhc3N1bXB0aW9ucyBhcmUgYmFzZWQg b2ZmIHRoZSBub3JtYWwgZXhpdC4gICovDQo+ID4gKyAgICAgIGlmIChpID09IDApDQo+ID4gIAl7 DQo+ID4gLQkgICpudW1iZXJfb2ZfaXRlcmF0aW9uc20xID0gYnVpbGRfaW50X2NzdCAoVFJFRV9U WVBFIChuaXRlciksIDApOw0KPiA+IC0JICAqbnVtYmVyX29mX2l0ZXJhdGlvbnMgPSBidWlsZF9p bnRfY3N0IChUUkVFX1RZUEUgKG5pdGVyKSwgMSk7DQo+ID4gLQkgIHJldHVybiBjb25kOw0KPiA+ ICsJICAqYXNzdW1wdGlvbnMgPSBuaXRlcl9hc3N1bXB0aW9uczsNCj4gPiArCSAgKm51bWJlcl9v Zl9pdGVyYXRpb25zbTEgPSBuaXRlcjsNCj4gPiArDQo+ID4gKwkgIC8qIFdlIHdhbnQgdGhlIG51 bWJlciBvZiBsb29wIGhlYWRlciBleGVjdXRpb25zIHdoaWNoIGlzIHRoZQ0KPiA+IG51bWJlcg0K PiA+ICsJICAgICBvZiBsYXRjaCBleGVjdXRpb25zIHBsdXMgb25lLg0KPiA+ICsJICAgICA/Pz8g IEZvciBVSU5UX01BWCBsYXRjaCBleGVjdXRpb25zIHRoaXMgbnVtYmVyIG92ZXJmbG93cyB0bw0K PiA+IHplcm8NCj4gPiArCSAgICAgZm9yIGxvb3BzIGxpa2UgZG8geyBuKys7IH0gd2hpbGUgKG4g IT0gMCk7ICAqLw0KPiA+ICsJICBpZiAobml0ZXIgJiYgIWNocmVjX2NvbnRhaW5zX3VuZGV0ZXJt aW5lZCAobml0ZXIpKQ0KPiA+ICsJICAgIG5pdGVyID0gZm9sZF9idWlsZDIgKFBMVVNfRVhQUiwg VFJFRV9UWVBFIChuaXRlciksDQo+ID4gKwkJCQkgdW5zaGFyZV9leHByIChuaXRlciksDQo+ID4g KwkJCQkgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChuaXRlciksIDEpKTsNCj4gPiArCSAgKm51 bWJlcl9vZl9pdGVyYXRpb25zID0gbml0ZXI7DQo+ID4gIAl9DQo+ID4gLSAgICAgIGVsc2UNCj4g PiAtCXJldHVybiBjb25kOw0KPiA+ICAgICAgfQ0KPiA+DQo+ID4gLSAgKmFzc3VtcHRpb25zID0g bml0ZXJfYXNzdW1wdGlvbnM7DQo+ID4gLSAgKm51bWJlcl9vZl9pdGVyYXRpb25zbTEgPSBuaXRl cjsNCj4gPiAtDQo+ID4gLSAgLyogV2Ugd2FudCB0aGUgbnVtYmVyIG9mIGxvb3AgaGVhZGVyIGV4 ZWN1dGlvbnMgd2hpY2ggaXMgdGhlIG51bWJlcg0KPiA+IC0gICAgIG9mIGxhdGNoIGV4ZWN1dGlv bnMgcGx1cyBvbmUuDQo+ID4gLSAgICAgPz8/ICBGb3IgVUlOVF9NQVggbGF0Y2ggZXhlY3V0aW9u cyB0aGlzIG51bWJlciBvdmVyZmxvd3MgdG8gemVybw0KPiA+IC0gICAgIGZvciBsb29wcyBsaWtl IGRvIHsgbisrOyB9IHdoaWxlIChuICE9IDApOyAgKi8NCj4gPiAtICBpZiAobml0ZXIgJiYgIWNo cmVjX2NvbnRhaW5zX3VuZGV0ZXJtaW5lZCAobml0ZXIpKQ0KPiA+IC0gICAgbml0ZXIgPSBmb2xk X2J1aWxkMiAoUExVU19FWFBSLCBUUkVFX1RZUEUgKG5pdGVyKSwgdW5zaGFyZV9leHByDQo+IChu aXRlciksDQo+ID4gLQkJCSAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChuaXRlciksIDEpKTsN Cj4gPiAtICAqbnVtYmVyX29mX2l0ZXJhdGlvbnMgPSBuaXRlcjsNCj4gPiArICBpZiAoZHVtcF9l bmFibGVkX3AgKCkpDQo+ID4gKyAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xv Y2F0aW9uLCAiQWxsIGxvb3AgZXhpdHMgc3VjY2Vzc2Z1bGx5DQo+ID4gYW5hbHl6ZWQuXG4iKTsN Cj4gPg0KPiA+IC0gIHJldHVybiBjb25kOw0KPiA+ICsgIHJldHVybiBjb25kczsNCj4gPiAgfQ0K PiA+DQo+ID4gIC8qIEZ1bmN0aW9uIGJiX2luX2xvb3BfcA0KPiA+IEBAIC0xNDU1LDcgKzE0ODEs OCBAQCB2ZWN0X2NvbXB1dGVfc2luZ2xlX3NjYWxhcl9pdGVyYXRpb25fY29zdA0KPiA+IChsb29w X3ZlY19pbmZvIGxvb3BfdmluZm8pDQo+ID4NCj4gPiAgICAgVmVyaWZ5IHRoYXQgY2VydGFpbiBD RkcgcmVzdHJpY3Rpb25zIGhvbGQsIGluY2x1ZGluZzoNCj4gPiAgICAgLSB0aGUgbG9vcCBoYXMg YSBwcmUtaGVhZGVyDQo+ID4gLSAgIC0gdGhlIGxvb3AgaGFzIGEgc2luZ2xlIGVudHJ5IGFuZCBl eGl0DQo+ID4gKyAgIC0gdGhlIGxvb3AgaGFzIGEgc2luZ2xlIGVudHJ5DQo+ID4gKyAgIC0gbmVz dGVkIGxvb3BzIGNhbiBoYXZlIG9ubHkgYSBzaW5nbGUgZXhpdC4NCj4gPiAgICAgLSB0aGUgbG9v cCBleGl0IGNvbmRpdGlvbiBpcyBzaW1wbGUgZW5vdWdoDQo+ID4gICAgIC0gdGhlIG51bWJlciBv ZiBpdGVyYXRpb25zIGNhbiBiZSBhbmFseXplZCwgaS5lLCBhIGNvdW50YWJsZSBsb29wLiAgVGhl DQo+ID4gICAgICAgbml0ZXIgY291bGQgYmUgYW5hbHl6ZWQgdW5kZXIgc29tZSBhc3N1bXB0aW9u cy4gICovDQo+ID4gQEAgLTE0ODQsMTEgKzE1MTEsNiBAQCB2ZWN0X2FuYWx5emVfbG9vcF9mb3Jt IChjbGFzcyBsb29wICpsb29wLA0KPiA+IHZlY3RfbG9vcF9mb3JtX2luZm8gKmluZm8pDQo+ID4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAg ICAgKGV4aXQtYmIpICAqLw0KPiA+DQo+ID4gLSAgICAgIGlmIChsb29wLT5udW1fbm9kZXMgIT0g MikNCj4gPiAtCXJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLA0K PiA+IC0JCQkJICAgICAgICJub3QgdmVjdG9yaXplZDoiDQo+ID4gLQkJCQkgICAgICAgIiBjb250 cm9sIGZsb3cgaW4gbG9vcC5cbiIpOw0KPiA+IC0NCj4gPiAgICAgICAgaWYgKGVtcHR5X2Jsb2Nr X3AgKGxvb3AtPmhlYWRlcikpDQo+ID4gIAlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAo dmVjdF9sb2NhdGlvbiwNCj4gPiAgCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6IGVtcHR5IGxv b3AuXG4iKTsNCj4gPiBAQCAtMTU1OSwxMSArMTU4MSwxMyBAQCB2ZWN0X2FuYWx5emVfbG9vcF9m b3JtIChjbGFzcyBsb29wICpsb29wLA0KPiA+IHZlY3RfbG9vcF9mb3JtX2luZm8gKmluZm8pDQo+ ID4gICAgICAgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwNCj4g PiAgCQkJICJDb25zaWRlcmluZyBvdXRlci1sb29wIHZlY3Rvcml6YXRpb24uXG4iKTsNCj4gPiAg ICAgICAgaW5mby0+aW5uZXJfbG9vcF9jb25kID0gaW5uZXIubG9vcF9jb25kOw0KPiA+ICsNCj4g PiArICAgICAgaWYgKCFzaW5nbGVfZXhpdCAobG9vcCkpDQo+ID4gKwlyZXR1cm4gb3B0X3Jlc3Vs dDo6ZmFpbHVyZV9hdCAodmVjdF9sb2NhdGlvbiwNCj4gPiArCQkJCSAgICAgICAibm90IHZlY3Rv cml6ZWQ6IG11bHRpcGxlIGV4aXRzLlxuIik7DQo+ID4gKw0KPiA+ICAgICAgfQ0KPiA+DQo+ID4g LSAgaWYgKCFzaW5nbGVfZXhpdCAobG9vcCkpDQo+ID4gLSAgICByZXR1cm4gb3B0X3Jlc3VsdDo6 ZmFpbHVyZV9hdCAodmVjdF9sb2NhdGlvbiwNCj4gPiAtCQkJCSAgICJub3QgdmVjdG9yaXplZDog bXVsdGlwbGUgZXhpdHMuXG4iKTsNCj4gPiAgICBpZiAoRURHRV9DT1VOVCAobG9vcC0+aGVhZGVy LT5wcmVkcykgIT0gMikNCj4gPiAgICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2 ZWN0X2xvY2F0aW9uLA0KPiA+ICAJCQkJICAgIm5vdCB2ZWN0b3JpemVkOiINCj4gPiBAQCAtMTU3 OSwyMSArMTYwMyw0NSBAQCB2ZWN0X2FuYWx5emVfbG9vcF9mb3JtIChjbGFzcyBsb29wICpsb29w LA0KPiA+IHZlY3RfbG9vcF9mb3JtX2luZm8gKmluZm8pDQo+ID4gIAkJCQkgICAibm90IHZlY3Rv cml6ZWQ6IGxhdGNoIGJsb2NrIG5vdCBlbXB0eS5cbiIpOw0KPiA+DQo+ID4gICAgLyogTWFrZSBz dXJlIHRoZSBleGl0IGlzIG5vdCBhYm5vcm1hbC4gICovDQo+ID4gLSAgZWRnZSBlID0gc2luZ2xl X2V4aXQgKGxvb3ApOw0KPiA+IC0gIGlmIChlLT5mbGFncyAmIEVER0VfQUJOT1JNQUwpDQo+ID4g KyAgYXV0b192ZWM8ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCj4g PiArICBlZGdlIG5leGl0ID0gbm9ybWFsX2V4aXQgKGxvb3ApOw0KPiA+ICsgIGZvciAoZWRnZSBl IDogZXhpdHMpDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIGlmIChlLT5mbGFncyAmIEVER0VfQUJO T1JNQUwpDQo+ID4gKwlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9sb2NhdGlv biwNCj4gPiArCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6Ig0KPiA+ICsJCQkJICAgICAgICIg YWJub3JtYWwgbG9vcCBleGl0IGVkZ2UuXG4iKTsNCj4gPiArICAgICAgLyogRWFybHkgYnJlYWsg QkIgbXVzdCBiZSBhZnRlciB0aGUgbWFpbiBleGl0IEJCLiAgSW4gdGhlb3J5IHdlIHNob3VsZA0K PiA+ICsJIGJlIGFibGUgdG8gdmVjdG9yaXplIHRoZSBpbnZlcnNlIG9yZGVyLCBidXQgdGhlIGN1 cnJlbnQgZmxvdyBpbiB0aGUNCj4gPiArCSB0aGUgdmVjdG9yaXplciBhbHdheXMgYXNzdW1lcyB5 b3UgdXBkYXRlIHN1Y2Nlc3MgUEhJIG5vZGVzLCBub3QNCj4gPiArCSBwcmVkcy4gICovDQo+ID4g KyAgICAgIGlmIChlICE9IG5leGl0ICYmICFkb21pbmF0ZWRfYnlfcCAoQ0RJX0RPTUlOQVRPUlMs IG5leGl0LT5zcmMsIGUtDQo+ID4gPnNyYykpDQo+ID4gKwlyZXR1cm4gb3B0X3Jlc3VsdDo6ZmFp bHVyZV9hdCAodmVjdF9sb2NhdGlvbiwNCj4gPiArCQkJCSAgICAgICAibm90IHZlY3Rvcml6ZWQ6 Ig0KPiA+ICsJCQkJICAgICAgICIgYWJub3JtYWwgbG9vcCBleGl0IGVkZ2Ugb3JkZXIuXG4iKTsN Cj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgaWYgKGV4aXRzLmxlbmd0aCAoKSA+IDIpDQo+ID4g ICAgICByZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdCAodmVjdF9sb2NhdGlvbiwNCj4gPiAg CQkJCSAgICJub3QgdmVjdG9yaXplZDoiDQo+ID4gLQkJCQkgICAiIGFibm9ybWFsIGxvb3AgZXhp dCBlZGdlLlxuIik7DQo+ID4gLQ0KPiA+IC0gIGluZm8tPmxvb3BfY29uZA0KPiA+ICsJCQkJICAg IiB0b28gbWFueSBleGl0cy4gT25seSAxIGFkZGl0aW9uYWwgZXhpdCINCj4gPiArCQkJCSAgICIg c3VwcG9ydGVkLlxuIik7DQo+ID4gKyAgaWYgKGxvb3AtPm51bV9ub2RlcyAhPSAyICsgZXhpdHMu bGVuZ3RoICgpIC0gMSkNCj4gPiArICAgIHJldHVybiBvcHRfcmVzdWx0OjpmYWlsdXJlX2F0ICh2 ZWN0X2xvY2F0aW9uLA0KPiA+ICsJCQkJICAgIm5vdCB2ZWN0b3JpemVkOiINCj4gPiArCQkJCSAg ICIgdW5zdXBwb3J0ZWQgY29udHJvbCBmbG93IGluIGxvb3AuXG4iKTsNCj4gPiArICBpbmZvLT5j b25kcw0KPiA+ICAgICAgPSB2ZWN0X2dldF9sb29wX25pdGVycyAobG9vcCwgJmluZm8tPmFzc3Vt cHRpb25zLA0KPiA+ICAJCQkgICAgJmluZm8tPm51bWJlcl9vZl9pdGVyYXRpb25zLA0KPiA+ICAJ CQkgICAgJmluZm8tPm51bWJlcl9vZl9pdGVyYXRpb25zbTEpOw0KPiA+IC0gIGlmICghaW5mby0+ bG9vcF9jb25kKQ0KPiA+ICsNCj4gPiArICBpZiAoaW5mby0+Y29uZHMubGVuZ3RoICgpID09IDAp DQo+ID4gICAgICByZXR1cm4gb3B0X3Jlc3VsdDo6ZmFpbHVyZV9hdA0KPiA+ICAgICAgICAodmVj dF9sb2NhdGlvbiwNCj4gPiAgICAgICAgICJub3QgdmVjdG9yaXplZDogY29tcGxpY2F0ZWQgZXhp dCBjb25kaXRpb24uXG4iKTsNCj4gPg0KPiA+ICsgIGluZm8tPmxvb3BfY29uZCA9IGluZm8tPmNv bmRzWzBdOw0KPiA+ICsNCj4gPiAgICBpZiAoaW50ZWdlcl96ZXJvcCAoaW5mby0+YXNzdW1wdGlv bnMpDQo+ID4gICAgICAgIHx8ICFpbmZvLT5udW1iZXJfb2ZfaXRlcmF0aW9ucw0KPiA+ICAgICAg ICB8fCBjaHJlY19jb250YWluc191bmRldGVybWluZWQgKGluZm8tPm51bWJlcl9vZl9pdGVyYXRp b25zKSkNCj4gPiBAQCAtMTYzOCw4ICsxNjg2LDE3IEBAIHZlY3RfY3JlYXRlX2xvb3BfdmluZm8g KGNsYXNzIGxvb3AgKmxvb3AsDQo+ID4gdmVjX2luZm9fc2hhcmVkICpzaGFyZWQsDQo+ID4gICAg aWYgKCFpbnRlZ2VyX29uZXAgKGluZm8tPmFzc3VtcHRpb25zKSAmJiAhbWFpbl9sb29wX2luZm8p DQo+ID4gICAgICBMT09QX1ZJTkZPX05JVEVSU19BU1NVTVBUSU9OUyAobG9vcF92aW5mbykgPSBp bmZvLT5hc3N1bXB0aW9uczsNCj4gPg0KPiA+IC0gIHN0bXRfdmVjX2luZm8gbG9vcF9jb25kX2lu Zm8gPSBsb29wX3ZpbmZvLT5sb29rdXBfc3RtdCAoaW5mby0NCj4gPiA+bG9vcF9jb25kKTsNCj4g PiAtICBTVE1UX1ZJTkZPX1RZUEUgKGxvb3BfY29uZF9pbmZvKSA9IGxvb3BfZXhpdF9jdHJsX3Zl Y19pbmZvX3R5cGU7DQo+ID4gKyAgdW5zaWduZWQgaW50IGk7DQo+ID4gKyAgZ2NvbmQgKmNvbmQ7 DQo+ID4gKyAgRk9SX0VBQ0hfVkVDX0VMVCAoaW5mby0+Y29uZHMsIGksIGNvbmQpDQo+ID4gKyAg ICB7DQo+ID4gKyAgICAgIHN0bXRfdmVjX2luZm8gbG9vcF9jb25kX2luZm8gPSBsb29wX3ZpbmZv LT5sb29rdXBfc3RtdCAoY29uZCk7DQo+ID4gKyAgICAgIFNUTVRfVklORk9fVFlQRSAobG9vcF9j b25kX2luZm8pID0gbG9vcF9leGl0X2N0cmxfdmVjX2luZm9fdHlwZTsNCj4gPiArICAgIH0NCj4g PiArDQo+ID4gKyAgLyogQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHZlY3Rvcml6aW5nIG11bHRpcGxl IGV4aXRzLiAgKi8NCj4gPiArICBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyAobG9vcF92aW5mbykg PSBpbmZvLT5jb25kcy5sZW5ndGggKCkgPiAxOw0KPiA+ICsNCj4gPiAgICBpZiAoaW5mby0+aW5u ZXJfbG9vcF9jb25kKQ0KPiA+ICAgICAgew0KPiA+ICAgICAgICBzdG10X3ZlY19pbmZvIGlubmVy X2xvb3BfY29uZF9pbmZvDQo+ID4gQEAgLTIyNzAsMTAgKzIzMjcsMTMgQEAgdmVjdF9kZXRlcm1p bmVfcGFydGlhbF92ZWN0b3JzX2FuZF9wZWVsaW5nDQo+ID4gKGxvb3BfdmVjX2luZm8gbG9vcF92 aW5mbywNCj4gPiAgICBib29sIG5lZWRfcGVlbGluZ19vcl9wYXJ0aWFsX3ZlY3RvcnNfcA0KPiA+ ICAgICAgPSB2ZWN0X25lZWRfcGVlbGluZ19vcl9wYXJ0aWFsX3ZlY3RvcnNfcCAobG9vcF92aW5m byk7DQo+ID4NCj4gPiAtICAvKiBEZWNpZGUgd2hldGhlciB0byB2ZWN0b3JpemUgdGhlIGxvb3Ag d2l0aCBwYXJ0aWFsIHZlY3RvcnMuICAqLw0KPiA+ICsgIC8qIERlY2lkZSB3aGV0aGVyIHRvIHZl Y3Rvcml6ZSB0aGUgbG9vcCB3aXRoIHBhcnRpYWwgdmVjdG9ycy4gIEN1cnJlbnRseQ0KPiA+ICsg ICAgIGVhcmx5IGJyZWFrIHZlY3Rvcml6YXRpb24gZG9lcyBub3Qgc3VwcG9ydCBwYXJ0aWFsIHZl Y3RvcnMgYXMgd2UgaGF2ZQ0KPiA+ICsgICAgIHRvIHBlZWwgYSBzY2FsYXIgbG9vcCB0aGF0IHdl IGNhbid0IHZlY3Rvcml6ZS4gICovDQo+ID4gICAgTE9PUF9WSU5GT19VU0lOR19QQVJUSUFMX1ZF Q1RPUlNfUCAobG9vcF92aW5mbykgPSBmYWxzZTsNCj4gPiAgICBMT09QX1ZJTkZPX0VQSUxfVVNJ TkdfUEFSVElBTF9WRUNUT1JTX1AgKGxvb3BfdmluZm8pID0gZmFsc2U7DQo+ID4gICAgaWYgKExP T1BfVklORk9fQ0FOX1VTRV9QQVJUSUFMX1ZFQ1RPUlNfUCAobG9vcF92aW5mbykNCj4gPiArICAg ICAgJiYgIUxPT1BfVklORk9fRUFSTFlfQlJFQUtTIChsb29wX3ZpbmZvKQ0KPiA+ICAgICAgICAm JiBuZWVkX3BlZWxpbmdfb3JfcGFydGlhbF92ZWN0b3JzX3ApDQo+ID4gICAgICB7DQo+ID4gICAg ICAgIC8qIEZvciBwYXJ0aWFsLXZlY3Rvci11c2FnZT0xLCB0cnkgdG8gcHVzaCB0aGUgaGFuZGxp bmcgb2YgcGFydGlhbA0KPiA+IEBAIC0yNzQ2LDEzICsyODA2LDE0IEBAIHN0YXJ0X292ZXI6DQo+ ID4NCj4gPiAgICAvKiBJZiBhbiBlcGlsb2d1ZSBsb29wIGlzIHJlcXVpcmVkIG1ha2Ugc3VyZSB3 ZSBjYW4gY3JlYXRlIG9uZS4gICovDQo+ID4gICAgaWYgKExPT1BfVklORk9fUEVFTElOR19GT1Jf R0FQUyAobG9vcF92aW5mbykNCj4gPiAtICAgICAgfHwgTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9O SVRFUiAobG9vcF92aW5mbykpDQo+ID4gKyAgICAgIHx8IExPT1BfVklORk9fUEVFTElOR19GT1Jf TklURVIgKGxvb3BfdmluZm8pDQo+ID4gKyAgICAgIHx8IExPT1BfVklORk9fRUFSTFlfQlJFQUtT IChsb29wX3ZpbmZvKSkNCj4gPiAgICAgIHsNCj4gPiAgICAgICAgaWYgKGR1bXBfZW5hYmxlZF9w ICgpKQ0KPiA+ICAgICAgICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRp b24sICJlcGlsb2cgbG9vcA0KPiByZXF1aXJlZFxuIik7DQo+ID4gICAgICAgIGlmICghdmVjdF9j YW5fYWR2YW5jZV9pdnNfcCAobG9vcF92aW5mbykNCj4gPiAtCSAgfHwgIXNscGVlbF9jYW5fZHVw bGljYXRlX2xvb3BfcCAoTE9PUF9WSU5GT19MT09QDQo+ID4gKGxvb3BfdmluZm8pLA0KPiA+IC0J CQkJCSAgIHNpbmdsZV9leGl0IChMT09QX1ZJTkZPX0xPT1ANCj4gPiArCSAgfHwgIXNscGVlbF9j YW5fZHVwbGljYXRlX2xvb3BfcCAobG9vcF92aW5mbywNCj4gPiArCQkJCQkgICBub3JtYWxfZXhp dCAoTE9PUF9WSU5GT19MT09QDQo+ID4gIAkJCQkJCQkgKGxvb3BfdmluZm8pKSkpDQo+ID4gICAg ICAgICAgew0KPiA+ICAJICBvayA9IG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRp b24sDQo+ID4gQEAgLTMyMzksNiArMzMwMCw4IEBAIHZlY3RfYW5hbHl6ZV9sb29wIChjbGFzcyBs b29wICpsb29wLA0KPiA+IHZlY19pbmZvX3NoYXJlZCAqc2hhcmVkKQ0KPiA+ICAJCSAgICAgIioq KioqIENob29zaW5nIHZlY3RvciBtb2RlICVzXG4iLA0KPiA+ICAJCSAgICAgR0VUX01PREVfTkFN RSAoZmlyc3RfbG9vcF92aW5mby0+dmVjdG9yX21vZGUpKTsNCj4gPg0KPiA+ICsgIGxvb3BfZm9y bV9pbmZvLmNvbmRzLnJlbGVhc2UgKCk7DQo+ID4gKw0KPiA+ICAgIC8qIE9ubHkgdmVjdG9yaXpl IGVwaWxvZ3VlcyBpZiBQQVJBTV9WRUNUX0VQSUxPR1VFU19OT01BU0sgaXMNCj4gPiAgICAgICBl bmFibGVkLCBTSU1EVUlEIGlzIG5vdCBzZXQsIGl0IGlzIHRoZSBpbm5lcm1vc3QgbG9vcCBhbmQg d2UgaGF2ZQ0KPiA+ICAgICAgIGVpdGhlciBhbHJlYWR5IGZvdW5kIHRoZSBsb29wJ3MgU0lNRExF TiBvciB0aGVyZSB3YXMgbm8gU0lNRExFTiB0bw0KPiA+IEBAIC0zMzUwLDYgKzM0MTMsOCBAQCB2 ZWN0X2FuYWx5emVfbG9vcCAoY2xhc3MgbG9vcCAqbG9vcCwNCj4gPiB2ZWNfaW5mb19zaGFyZWQg KnNoYXJlZCkNCj4gPiAgCQkJICAgKGZpcnN0X2xvb3BfdmluZm8tPmVwaWxvZ3VlX3ZpbmZvc1sw XS0NCj4gPiA+dmVjdG9yX21vZGUpKTsNCj4gPiAgICAgIH0NCj4gPg0KPiA+ICsgIGxvb3BfZm9y bV9pbmZvLmNvbmRzLnJlbGVhc2UgKCk7DQo+ID4gKw0KPiA+ICAgIHJldHVybiBmaXJzdF9sb29w X3ZpbmZvOw0KPiA+ICB9DQo+ID4NCj4gPiBAQCAtNzkwNyw2ICs3OTcyLDIzNyBAQCB2ZWN0X3Ry YW5zZm9ybV9yZWR1Y3Rpb24gKGxvb3BfdmVjX2luZm8NCj4gPiBsb29wX3ZpbmZvLA0KPiA+ICAg IHJldHVybiB0cnVlOw0KPiA+ICB9DQo+ID4NCj4gPiArLyogIFdoZW4gdmVjdG9yaXppbmcgZWFy bHkgYnJlYWsgc3RhdGVtZW50cyBpbnN0cnVjdGlvbnMgdGhhdCBoYXBwZW4NCj4gPiBiZWZvcmUN Cj4gPiArICAgIHRoZSBlYXJseSBicmVhayBpbiB0aGUgY3VycmVudCBCQiBuZWVkIHRvIGJlIG1v dmVkIHRvIGFmdGVyIHRoZSBlYXJseQ0KPiA+ICsgICAgYnJlYWsuICBUaGlzIGZ1bmN0aW9uIGRl YWxzIHdpdGggdGhhdCBhbmQgYXNzdW1lcyB0aGF0IGFueSB2YWxpZGF0eQ0KPiA+ICsgICAgY2hl Y2tzIGhhcyBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkLg0KPiA+ICsNCj4gPiArICAgIFdoaWxlIG1v dmluZyB0aGUgaW5zdHJ1Y3Rpb25zIGlmIGl0IGVuY291bnRlcnMgYSBWVVNFIG9yIFZERUYgaXQg dGhlbg0KPiA+ICsgICAgY29ycmVjdHMgdGhlIFZVU0VTIGFzIGl0IG1vdmVzIHRoZSBzdGF0ZW1l bnRzIGFsb25nLiAgQ0hBSU5FRA0KPiBjb250YWlucw0KPiA+ICsgICAgdGhlIGxpc3Qgb2YgU1NB X05BTUVTIHRoYXQgYmVsb25nIHRvIHRoZSBkZXBlbmRlbmN5IGNoYWluIG9mIHRoZSBlYXJseQ0K PiA+ICsgICAgYnJlYWsgY29uZGl0aW9uYWwuICBHREVTVCBpcyB0aGUgbG9jYXRpb24gaW4gd2hp Y2ggdG8gaW5zZXJ0IHRoZSBuZXcNCj4gPiArICAgIHN0YXRlbWVudHMuICBHU1RNVCBpcyB0aGUg aXRlcmF0b3IgdG8gd2FsayB1cCB0byBmaW5kIHN0YXRlbWVudHMgdG8NCj4gPiArICAgIGNvbnNp ZGVyIG1vdmluZy4gIFJFQUNISU5HX1ZVU0UgY29udGFpbnMgdGhlIGRvbWluYXRpbmcgVlVTRQ0K PiBmb3VuZA0KPiA+IHNvIGZhcg0KPiA+ICsgICAgYW5kIENVUlJFTlRfVkRFRiBjb250YWlucyB0 aGUgbGFzdCBWREVGIHdlJ3ZlIHNlZW4uICBUaGVzZSBhcmUNCj4gPiB1cGRhdGVkIGluDQo+ID4g KyAgICBwcmUtb3JkZXIgYW5kIHVwZGF0ZWQgaW4gcG9zdC1vcmRlciBhZnRlciBtb3ZpbmcgdGhl IGluc3RydWN0aW9uLiAgKi8NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkDQo+ID4gK21vdmVfZWFy bHlfZXhpdF9zdG10cyAoaGFzaF9zZXQ8dHJlZT4gKmNoYWluZWQsIGdpbXBsZV9zdG10X2l0ZXJh dG9yDQo+ID4gKmdkZXN0LA0KPiA+ICsJCSAgICAgICBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3N0 bXQsIHRyZWUgKnJlYWNoaW5nX3Z1c2UsDQo+ID4gKwkJICAgICAgIHRyZWUgKmN1cnJlbnRfdmRl ZikNCj4gPiArew0KPiA+ICsgIGlmIChnc2lfZW5kX3AgKCpnc3RtdCkpDQo+ID4gKyAgICByZXR1 cm47DQo+ID4gKw0KPiA+ICsgIGdpbXBsZSAqc3RtdCA9IGdzaV9zdG10ICgqZ3N0bXQpOw0KPiA+ ICsgIGlmIChnaW1wbGVfaGFzX29wcyAoc3RtdCkpDQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIHRy ZWUgZGVzdCA9IE5VTExfVFJFRTsNCj4gPiArICAgICAgLyogVHJ5IHRvIGZpbmQgdGhlIFNTQV9O QU1FIGJlaW5nIGRlZmluZWQuICBGb3IgU3RhdGVtZW50cyB3aXRoIGFuDQo+IExIUw0KPiA+ICsJ IHVzZSB0aGUgTEhTLCBpZiBub3QsIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBh IGNhbGwgaXMgdGhlDQo+ID4gKwkgdmFsdWUgYmVpbmcgZGVmaW5lZC4gIGUuZy4gTUFTS0VEX0xP QUQgZXRjLiAgKi8NCj4gPiArICAgICAgaWYgKGdpbXBsZV9oYXNfbGhzIChzdG10KSkNCj4gPiAr CXsNCj4gPiArCSAgaWYgKGlzX2dpbXBsZV9hc3NpZ24gKHN0bXQpKQ0KPiA+ICsJICAgIGRlc3Qg PSBnaW1wbGVfYXNzaWduX2xocyAoc3RtdCk7DQo+ID4gKwkgIGVsc2UgaWYgKGNvbnN0IGdjYWxs ICpjYWxsID0gZHluX2Nhc3QgPGNvbnN0IGdjYWxsICo+IChzdG10KSkNCj4gPiArCSAgICBkZXN0 ID0gZ2ltcGxlX2NhbGxfbGhzIChjYWxsKTsNCj4gPiArCX0NCj4gPiArICAgICAgZWxzZSBpZiAo Y29uc3QgZ2NhbGwgKmNhbGwgPSBkeW5fY2FzdCA8Y29uc3QgZ2NhbGwgKj4gKHN0bXQpKQ0KPiA+ ICsJZGVzdCA9IGdpbXBsZV9hcmcgKGNhbGwsIDApOw0KPiA+ICsNCj4gPiArICAgICAgLyogRG9u J3QgbW92ZSB0aGUgc2NhbGFyIGluc3RydWN0aW9ucy4gICovDQo+ID4gKyAgICAgIGJvb2wgbW92 ZQ0KPiA+ICsJPSBkZXN0ICYmIChWRUNUT1JfVFlQRV9QIChUUkVFX1RZUEUgKGRlc3QpKQ0KPiA+ ICsJCSAgIHx8IFBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKGRlc3QpKSk7DQo+ID4gKw0KPiA+ ICsgICAgICAvKiBJZiB3ZSBmb3VuZCB0aGUgZGVmaW5pbmcgc3RhdGVtZW50IG9mIGEgc29tZXRo aW5nIHRoYXQncyBwYXJ0IG9mIHRoZQ0KPiA+ICsJIGNoYWluIHRoZW4gZXhwYW5kIHRoZSBjaGFp biB3aXRoIHRoZSBuZXcgU1NBX1ZBUnMgYmVpbmcgdXNlZC4gICovDQo+ID4gKyAgICAgIGlmIChj aGFpbmVkLT5jb250YWlucyAoZGVzdCkpDQo+ID4gKwl7DQo+ID4gKwkgIGZvciAodW5zaWduZWQg eCA9IDA7IHggPCBnaW1wbGVfbnVtX2FyZ3MgKHN0bXQpOyB4KyspDQo+ID4gKwkgICAgaWYgKFRS RUVfQ09ERSAoZ2ltcGxlX2FyZyAoc3RtdCwgeCkpID09IFNTQV9OQU1FKQ0KPiA+ICsJICAgICAg Y2hhaW5lZC0+YWRkIChnaW1wbGVfYXJnIChzdG10LCB4KSk7DQo+ID4gKw0KPiA+ICsJICBpZiAo ZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gKwkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwg dmVjdF9sb2NhdGlvbiwNCj4gPiArCQkJICAgICAiZm91bmQgY2hhaW4gJUciLCBzdG10KTsNCj4g PiArCSAgdXBkYXRlX3N0bXQgKHN0bXQpOw0KPiA+ICsJICBtb3ZlID0gZmFsc2U7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsgICAgICBpZiAobW92ZSkNCj4gPiArCXsNCj4gPiArCSAgaWYgKGR1bXBf ZW5hYmxlZF9wICgpKQ0KPiA+ICsJICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3Rf bG9jYXRpb24sDQo+ID4gKwkJICAgICAgICAgICAgICJtb3Zpbmcgc3RtdCAlRyIsIHN0bXQpOw0K PiA+ICsJICBnc2lfbW92ZV9iZWZvcmUgKGdzdG10LCBnZGVzdCk7DQo+ID4gKwkgIGdzaV9wcmV2 IChnZGVzdCk7DQo+ID4gKwkgIHRyZWUgdmRlZiA9IGdpbXBsZV92ZGVmIChzdG10KTsNCj4gPiAr DQo+ID4gKwkgIC8qIElmIHdlJ3ZlIG1vdmVkIGEgVkRFRiwgZXh0cmFjdCB0aGUgZGVmaW5pbmcg TUVNIGFuZCB1cGRhdGUNCj4gPiArCSAgICAgdXNhZ2VzIG9mIGl0LiAgVE9ETzogSSB0aGluayB0 aGlzIG1heSBuZWVkIHNvbWUgY29uc3RyYWludHM/ICovDQo+ID4gKwkgIGlmICh2ZGVmKQ0KPiA+ ICsJICAgIHsNCj4gPiArCSAgICAgICpjdXJyZW50X3ZkZWYgPSB2ZGVmOw0KPiA+ICsJICAgICAg KnJlYWNoaW5nX3Z1c2UgPSBnaW1wbGVfdnVzZSAoc3RtdCk7DQo+ID4gKwkgICAgICBpbW1fdXNl X2l0ZXJhdG9yIGltbV9pdGVyOw0KPiA+ICsJICAgICAgZ2ltcGxlICp1c2Vfc3RtdDsNCj4gPiAr CSAgICAgIEZPUl9FQUNIX0lNTV9VU0VfU1RNVCAodXNlX3N0bXQsIGltbV9pdGVyLCB2ZGVmKQ0K PiA+ICsJCXsNCj4gPiArCQkgICBpZiAoIWlzX2EgPGdwaGkgKj4gKHVzZV9zdG10KSkNCj4gPiAr CQkgICAgIGNvbnRpbnVlOw0KPiA+ICsJCSAgIGdwaGkgKnBoaV9zdG10ID0gYXNfYSA8Z3BoaSAq PiAodXNlX3N0bXQpOw0KPiA+ICsNCj4gPiArCQkgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ ID4gKwkJICAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLA0KPiA+ ICsJCQkJInVwZGF0aW5nIHZ1c2UgJUciLCB1c2Vfc3RtdCk7DQo+ID4gKwkJICAgZm9yICh1bnNp Z25lZCBpID0gMDsgaSA8IGdpbXBsZV9waGlfbnVtX2FyZ3MgKHBoaV9zdG10KTsNCj4gPiBpKysp DQo+ID4gKwkJICAgIGlmIChnaW1wbGVfcGhpX2FyZ19kZWYgKHBoaV9zdG10LCBpKSA9PSB2ZGVm KQ0KPiA+ICsJCSAgICAgIHsNCj4gPiArCQkJU0VUX1VTRSAoUEhJX0FSR19ERUZfUFRSIChwaGlf c3RtdCwgaSksDQo+ID4gZ2ltcGxlX3Z1c2UgKHN0bXQpKTsNCj4gPiArCQkJYnJlYWs7DQo+ID4g KwkJICAgICAgfQ0KPiA+ICsJCX0NCj4gPiArCSAgICB9DQo+ID4gKwkgIHVwZGF0ZV9zdG10IChz dG10KTsNCj4gPiArCX0NCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgZ3NpX3ByZXYgKGdzdG10 KTsNCj4gPiArICBtb3ZlX2Vhcmx5X2V4aXRfc3RtdHMgKGNoYWluZWQsIGdkZXN0LCBnc3RtdCwg cmVhY2hpbmdfdnVzZSwNCj4gPiBjdXJyZW50X3ZkZWYpOw0KPiA+ICsNCj4gPiArICBpZiAoZ2lt cGxlX3Z1c2UgKHN0bXQpDQo+ID4gKyAgICAgICYmIHJlYWNoaW5nX3Z1c2UgJiYgKnJlYWNoaW5n X3Z1c2UNCj4gPiArICAgICAgJiYgZ2ltcGxlX3Z1c2UgKHN0bXQpID09ICpjdXJyZW50X3ZkZWYp DQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIHVubGlua19zdG10X3ZkZWYgKHN0bXQpOw0KPiA+ICsg ICAgICBnaW1wbGVfc2V0X3Z1c2UgKHN0bXQsICpyZWFjaGluZ192dXNlKTsNCj4gPiArICAgICAg dXBkYXRlX3N0bXQgKHN0bXQpOw0KPiA+ICsgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBU cmFuc2Zvcm0gdGhlIGRlZmluaXRpb24gc3RtdCBTVE1UX0lORk8gb2YgYW4gZWFybHkgZXhpdA0K PiA+ICsgICB2YWx1ZS4gICovDQo+ID4gKw0KPiA+ICtib29sDQo+ID4gK3ZlY3RfdHJhbnNmb3Jt X2Vhcmx5X2JyZWFrIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sDQo+ID4gKwkJCSAgICBzdG10 X3ZlY19pbmZvIHN0bXRfaW5mbywgZ2ltcGxlX3N0bXRfaXRlcmF0b3INCj4gPiAqZ3NpLA0KPiA+ ICsJCQkgICAgZ2ltcGxlICoqdmVjX3N0bXQsIHNscF90cmVlIHNscF9ub2RlKQ0KPiA+ICt7DQo+ ID4gKyAgdHJlZSB2ZWN0eXBlX291dCA9IFNUTVRfVklORk9fVkVDVFlQRSAoc3RtdF9pbmZvKTsN Cj4gPiArICBpbnQgaTsNCj4gPiArICBpbnQgbmNvcGllczsNCj4gPiArICBpbnQgdmVjX251bTsN Cj4gPiArDQo+ID4gKyAgaWYgKCFTVE1UX1ZJTkZPX1JFTEVWQU5UX1AgKHN0bXRfaW5mbykpDQo+ ID4gKyAgICByZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICsgIGdpbXBsZV9tYXRjaF9vcCBvcDsN Cj4gPiArICBpZiAoIWdpbXBsZV9leHRyYWN0X29wIChzdG10X2luZm8tPnN0bXQsICZvcCkpDQo+ ID4gKyAgICBnY2NfdW5yZWFjaGFibGUgKCk7DQo+ID4gKyAgZ2NjX2Fzc2VydCAob3AuY29kZS5p c190cmVlX2NvZGUgKCkpOw0KPiA+ICsgIGF1dG8gY29kZSA9IHRyZWVfY29kZSAob3AuY29kZSk7 DQo+ID4gKw0KPiA+ICsgIHRyZWUgdmVjdHlwZV9pbiA9IFNUTVRfVklORk9fVkVDVFlQRSAoc3Rt dF9pbmZvKTsNCj4gPiArICBnY2NfYXNzZXJ0ICh2ZWN0eXBlX2luKTsNCj4gPiArDQo+ID4gKw0K PiA+ICsgIGlmIChzbHBfbm9kZSkNCj4gPiArICAgIHsNCj4gPiArICAgICAgbmNvcGllcyA9IDE7 DQo+ID4gKyAgICAgIHZlY19udW0gPSBTTFBfVFJFRV9OVU1CRVJfT0ZfVkVDX1NUTVRTIChzbHBf bm9kZSk7DQo+ID4gKyAgICB9DQo+ID4gKyAgZWxzZQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICBu Y29waWVzID0gdmVjdF9nZXRfbnVtX2NvcGllcyAobG9vcF92aW5mbywgdmVjdHlwZV9pbik7DQo+ ID4gKyAgICAgIHZlY19udW0gPSAxOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICB2ZWNfbG9v cF9tYXNrcyAqbWFza3MgPSAmTE9PUF9WSU5GT19NQVNLUyAobG9vcF92aW5mbyk7DQo+ID4gKyAg Ym9vbCBtYXNrZWRfbG9vcF9wID0gTE9PUF9WSU5GT19GVUxMWV9NQVNLRURfUCAobG9vcF92aW5m byk7DQo+ID4gKw0KPiA+ICsgIC8qIFRyYW5zZm9ybS4gICovDQo+ID4gKyAgdHJlZSBuZXdfdGVt cCA9IE5VTExfVFJFRTsNCj4gPiArICBhdXRvX3ZlYzx0cmVlPiB2ZWNfb3BybmRzMDsNCj4gPiAr ICBhdXRvX3ZlYzx0cmVlPiB2ZWNfb3BybmRzMTsNCj4gPiArICB0cmVlIGRlZjA7DQo+ID4gKw0K PiA+ICsgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiArICAgIGR1bXBfcHJpbnRmX2xvYyAo TVNHX05PVEUsIHZlY3RfbG9jYXRpb24sICJ0cmFuc2Zvcm0gZWFybHktDQo+IGV4aXQuXG4iKTsN Cj4gPiArDQo+ID4gKyAgLyogRk9STk9XOiBNdWx0aXBsZSB0eXBlcyBhcmUgbm90IHN1cHBvcnRl ZCBmb3IgY29uZGl0aW9uLiAgKi8NCj4gPiArICBpZiAoY29kZSA9PSBDT05EX0VYUFIpDQo+ID4g KyAgICBnY2NfYXNzZXJ0IChuY29waWVzID09IDEpOw0KPiA+ICsNCj4gPiArDQo+ID4gKyAgZ2lt cGxlICpzdG10ID0gU1RNVF9WSU5GT19TVE1UIChzdG10X2luZm8pOw0KPiA+ICsgIGJhc2ljX2Js b2NrIGNvbmRfYmIgPSBnaW1wbGVfYmIgKHN0bXQpOw0KPiA+ICsgIGdpbXBsZV9zdG10X2l0ZXJh dG9yICBjb25kX2dzaSA9IGdzaV9sYXN0X2JiIChjb25kX2JiKTsNCj4gPiArDQo+ID4gKyAgdmVj dF9nZXRfdmVjX2RlZnMgKGxvb3BfdmluZm8sIHN0bXRfaW5mbywgc2xwX25vZGUsIG5jb3BpZXMs DQo+ID4gKwkJICAgICBvcC5vcHNbMF0sICZ2ZWNfb3BybmRzMCwgb3Aub3BzWzFdLCAmdmVjX29w cm5kczEsDQo+ID4gKwkJICAgICBOVUxMLCBOVUxMKTsNCj4gPiArDQo+ID4gKyAgZ2ltcGxlICpu ZXdfc3RtdCA9IE5VTEw7DQo+ID4gKyAgdHJlZSBjc3RfMCA9IGJ1aWxkX3plcm9fY3N0ICh0cnV0 aF90eXBlX2ZvciAodmVjdHlwZV9vdXQpKTsNCj4gPiArICB0cmVlIGNzdF9tMSA9IGJ1aWxkX21p bnVzX29uZV9jc3QgKHRydXRoX3R5cGVfZm9yICh2ZWN0eXBlX291dCkpOw0KPiA+ICsNCj4gPiAr ICBGT1JfRUFDSF9WRUNfRUxUICh2ZWNfb3BybmRzMCwgaSwgZGVmMCkNCj4gPiArICAgIHsNCj4g PiArICAgICAgdHJlZSB2b3BbM10gPSB7IGRlZjAsIHZlY19vcHJuZHMxW2ldLCBOVUxMX1RSRUUg fTsNCj4gPiArCXsNCj4gPiArCSAgdHJlZSBjb25kID0gbWFrZV90ZW1wX3NzYV9uYW1lICh0cnV0 aF90eXBlX2ZvciAodmVjdHlwZV9vdXQpLA0KPiA+IE5VTEwsICJtYXNrIik7DQo+ID4gKwkgIGdp bXBsZSAqdmVjX2NtcCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKGNvbmQsIGNvZGUsIHZvcFswXSwN Cj4gPiB2b3BbMV0pOw0KPiA+ICsJICB2ZWN0X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24gKGxvb3Bf dmluZm8sIHN0bXRfaW5mbywgdmVjX2NtcCwNCj4gPiAmY29uZF9nc2kpOw0KPiA+ICsgICAgICAg ICAgaWYgKG1hc2tlZF9sb29wX3ApDQo+ID4gKwkgICAgew0KPiA+ICsJICAgICAgdHJlZSBtYXNr ID0gdmVjdF9nZXRfbG9vcF9tYXNrIChnc2ksIG1hc2tzLCB2ZWNfbnVtICogbmNvcGllcywNCj4g PiArCQkJCQkgICAgICB2ZWN0eXBlX2luLCBpKTsNCj4gPiArCSAgICAgIGNvbmQgPSBwcmVwYXJl X3ZlY19tYXNrIChsb29wX3ZpbmZvLCBUUkVFX1RZUEUgKG1hc2spLCBtYXNrLA0KPiA+ICsJCQkJ ICAgICAgIGNvbmQsICZjb25kX2dzaSk7DQo+ID4gKwkgICAgfQ0KPiA+ICsNCj4gPiArCSAgbmV3 X3RlbXAgPSBtYWtlX3RlbXBfc3NhX25hbWUgKHRydXRoX3R5cGVfZm9yDQo+ID4gKHZlY3R5cGVf b3V0KSwgTlVMTCwgInZleGl0Iik7DQo+ID4gKyAgICAgICAgICBnaW1wbGUgKnZlY19jb25kID0g Z2ltcGxlX2J1aWxkX2Fzc2lnbiAobmV3X3RlbXAsDQo+ID4gVkVDX0NPTkRfRVhQUiwNCj4gPiAr CQkJCQkJICBjb25kLCBjc3RfbTEsIGNzdF8wKTsNCj4gPiArCSAgdmVjdF9maW5pc2hfc3RtdF9n ZW5lcmF0aW9uIChsb29wX3ZpbmZvLCBzdG10X2luZm8sIHZlY19jb25kLA0KPiA+ICZjb25kX2dz aSk7DQo+ID4gKwkgIG5ld19zdG10ID0gdmVjX2NvbmQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsg ICAgICBpZiAoc2xwX25vZGUpDQo+ID4gKwlTTFBfVFJFRV9WRUNfU1RNVFMgKHNscF9ub2RlKS5x dWlja19wdXNoIChuZXdfc3RtdCk7DQo+ID4gKyAgICAgIGVsc2UNCj4gPiArCVNUTVRfVklORk9f VkVDX1NUTVRTIChzdG10X2luZm8pLnNhZmVfcHVzaCAobmV3X3N0bXQpOw0KPiA+ICsgICAgfQ0K PiA+ICsNCj4gPiArICBnY2NfYXNzZXJ0IChuZXdfc3RtdCk7DQo+ID4gKyAgdHJlZSBsaHMgPSBn aW1wbGVfYXNzaWduX2xocyAobmV3X3N0bXQpOw0KPiA+ICsNCj4gPiArICB0cmVlIHQgPSBmb2xk X2J1aWxkMiAoTkVfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsIGxocywNCj4gPiArCQkJYnVpbGRf emVyb19jc3QgKHRydXRoX3R5cGVfZm9yICh2ZWN0eXBlX291dCkpKTsNCj4gPiArICB0ID0gY2Fu b25pY2FsaXplX2NvbmRfZXhwcl9jb25kICh0KTsNCj4gPiArICBnaW1wbGVfY29uZF9zZXRfY29u ZGl0aW9uX2Zyb21fdHJlZSAoKGdjb25kKilzdG10LCB0KTsNCj4gPiArICB1cGRhdGVfc3RtdCAo c3RtdCk7DQo+ID4gKw0KPiA+ICsgIGJhc2ljX2Jsb2NrIGRlc3RfYmIgPSBFREdFX1NVQ0MgKGNv bmRfYmIsIDEpLT5kZXN0Ow0KPiA+ICsgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGRlc3RfZ3NpID0g Z3NpX3N0YXJ0X2JiIChkZXN0X2JiKTsNCj4gPiArDQo+ID4gKyAgaGFzaF9zZXQ8dHJlZT4gY2hh aW5lZDsNCj4gPiArICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2kyID0gZ3NpX2Zvcl9zdG10IChu ZXdfc3RtdCk7DQo+ID4gKyAgY2hhaW5lZC5hZGQgKGxocyk7DQo+ID4gKyAgdHJlZSB2ZGVmOw0K PiA+ICsgIHRyZWUgdnVzZSA9IGdpbXBsZV92dXNlIChuZXdfc3RtdCk7DQo+ID4gKyAgbW92ZV9l YXJseV9leGl0X3N0bXRzICgmY2hhaW5lZCwgJmRlc3RfZ3NpLCAmZ3NpMiwgJnZ1c2UsICZ2ZGVm KTsNCj4gPiArDQo+ID4gKyAgaWYgKCFzbHBfbm9kZSkNCj4gPiArICAgICp2ZWNfc3RtdCA9IFNU TVRfVklORk9fVkVDX1NUTVRTIChzdG10X2luZm8pWzBdOw0KPiA+ICsNCj4gPiArICByZXR1cm4g dHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gKw0KPiA+ICAvKiBUcmFuc2Zvcm0gcGhh c2Ugb2YgYSBjeWNsZSBQSEkuICAqLw0KPiA+DQo+ID4gIGJvb2wNCj4gPiBAQCAtODE4NSw2ICs4 NDgxLDE4NiBAQCB2ZWN0X3RyYW5zZm9ybV9jeWNsZV9waGkgKGxvb3BfdmVjX2luZm8NCj4gPiBs b29wX3ZpbmZvLA0KPiA+ICAgIHJldHVybiB0cnVlOw0KPiA+ICB9DQo+ID4NCj4gPiArLyogVGhp cyBmdW5jdGlvbiB0cmllcyB0byB2YWxpZGF0ZSB3aGV0aGVyIGFuIGVhcmx5IGJyZWFrIHZlY3Rv cml6YXRpb24NCj4gPiArICAgaXMgcG9zc2libGUgZm9yIHRoZSBjdXJyZW50IGluc3RydWN0aW9u IHNlcXVlbmNlLiBSZXR1cm5zIFRydWUgaQ0KPiA+ICsgICBwb3NzaWJsZSwgb3RoZXJ3aXNlIEZh bHNlLg0KPiA+ICsNCj4gPiArICAgUmVxdWlyZW1lbnRzOg0KPiA+ICsgICAgIC0gQW55IG1lbW9y eSBhY2Nlc3MgbXVzdCBiZSB0byBhIGZpeGVkIHNpemUgYnVmZmVyLg0KPiA+ICsgICAgIC0gVGhl cmUgbXVzdCBub3QgYmUgYW55IGxvYWRzIGFuZCBzdG9yZXMgdG8gdGhlIHNhbWUgb2JqZWN0Lg0K PiA+ICsgICAgIC0gTXVsdGlwbGUgbG9hZHMgYXJlIGFsbG93ZWQgYXMgbG9uZyBhcyB0aGV5IGRv bid0IGFsaWFzLg0KPiA+ICsNCj4gPiArDQo+ID4gKyAgIEFyZ3VtZW50czoNCj4gPiArICAgICAt IExPT1BfVklORk86IGxvb3AgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGxvb3AuDQo+ID4g KyAgICAgLSBDSEFJTjogQ3VycmVudGx5IGRldGVjdGVkIHNlcXVlbmNlIG9mIGluc3RydWN0aW9u cyB0aGF0IGJlbG9uZw0KPiA+ICsJICAgICAgdG8gdGhlIGN1cnJlbnQgZWFybHkgYnJlYWsuDQo+ ID4gKyAgICAgLSBMT0FEUzogTGlzdCBvZiBhbGwgbG9hZHMgZm91bmQgZHVyaW5nIHRyYXZlcnNh bC4NCj4gPiArICAgICAtIEJBU0VTOiBMaXN0IG9mIGFsbCBsb2FkIGRhdGFyZWZlcmVuY2VzIGZv dW5kIGR1cmluZyB0cmF2ZXJzYWwuDQo+ID4gKyAgICAgLSBHU1RNVDogQ3VycmVudCBwb3NpdGlv biB0byBpbnNwZWN0IGZvciB2YWxpZGl0eS4gIFRoZSBzZXF1ZW5jZQ0KPiA+ICsJICAgICAgd2ls bCBiZSBtb3ZlZCB1cHdhcmRzIGZyb20gdGhpcyBwb2ludC4gICovDQo+ID4gKw0KPiA+ICtzdGF0 aWMgYm9vbA0KPiA+ICt2YWxpZGF0ZV9lYXJseV9leGl0X3N0bXRzIChsb29wX3ZlY19pbmZvIGxv b3BfdmluZm8sIGhhc2hfc2V0PHRyZWU+DQo+ID4gKmNoYWluLA0KPiA+ICsJCQkgICB2ZWM8dHJl ZT4gKmxvYWRzLCB2ZWM8ZGF0YV9yZWZlcmVuY2UgKj4gKmJhc2VzLA0KPiA+ICsJCQkgICBnaW1w bGVfc3RtdF9pdGVyYXRvciAqZ3N0bXQpDQo+ID4gK3sNCj4gPiArICBpZiAoZ3NpX2VuZF9wICgq Z3N0bXQpKQ0KPiA+ICsgICAgcmV0dXJuIHRydWU7DQo+ID4gKw0KPiA+ICsgIGdpbXBsZSAqc3Rt dCA9IGdzaV9zdG10ICgqZ3N0bXQpOw0KPiA+ICsgIGlmIChnaW1wbGVfaGFzX29wcyAoc3RtdCkp DQo+ID4gKyAgICB7DQo+ID4gKyAgICAgIHRyZWUgZGVzdCA9IE5VTExfVFJFRTsNCj4gPiArICAg ICAgLyogVHJ5IHRvIGZpbmQgdGhlIFNTQV9OQU1FIGJlaW5nIGRlZmluZWQuICBGb3IgU3RhdGVt ZW50cyB3aXRoIGFuDQo+IExIUw0KPiA+ICsJIHVzZSB0aGUgTEhTLCBpZiBub3QsIGFzc3VtZSB0 aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBhIGNhbGwgaXMgdGhlDQo+ID4gKwkgdmFsdWUgYmVp bmcgZGVmaW5lZC4gIGUuZy4gTUFTS0VEX0xPQUQgZXRjLiAgKi8NCj4gPiArICAgICAgaWYgKGdp bXBsZV9oYXNfbGhzIChzdG10KSkNCj4gPiArCXsNCj4gPiArCSAgaWYgKGlzX2dpbXBsZV9hc3Np Z24gKHN0bXQpKQ0KPiA+ICsJICAgIGRlc3QgPSBnaW1wbGVfYXNzaWduX2xocyAoc3RtdCk7DQo+ ID4gKwkgIGVsc2UgaWYgKGNvbnN0IGdjYWxsICpjYWxsID0gZHluX2Nhc3QgPGNvbnN0IGdjYWxs ICo+IChzdG10KSkNCj4gPiArCSAgICBkZXN0ID0gZ2ltcGxlX2NhbGxfbGhzIChjYWxsKTsNCj4g PiArCX0NCj4gPiArICAgICAgZWxzZSBpZiAoY29uc3QgZ2NhbGwgKmNhbGwgPSBkeW5fY2FzdCA8 Y29uc3QgZ2NhbGwgKj4gKHN0bXQpKQ0KPiA+ICsJZGVzdCA9IGdpbXBsZV9hcmcgKGNhbGwsIDAp Ow0KPiA+ICsNCj4gPiArICAgICAgLyogRG9uJ3QgbW92ZSB0aGUgc2NhbGFyIGluc3RydWN0aW9u cy4gICovDQo+ID4gKyAgICAgIGJvb2wgbW92ZQ0KPiA+ICsJPSBkZXN0ICYmIChWRUNUT1JfVFlQ RV9QIChUUkVFX1RZUEUgKGRlc3QpKQ0KPiA+ICsJCSAgIHx8IFBPSU5URVJfVFlQRV9QIChUUkVF X1RZUEUgKGRlc3QpKSk7DQo+ID4gKw0KPiA+ICsgICAgICAvKiBJZiB3ZSBmb3VuZCB0aGUgZGVm aW5pbmcgc3RhdGVtZW50IG9mIGEgc29tZXRoaW5nIHRoYXQncyBwYXJ0IG9mIHRoZQ0KPiA+ICsJ IGNoYWluIHRoZW4gZXhwYW5kIHRoZSBjaGFpbiB3aXRoIHRoZSBuZXcgU1NBX1ZBUnMgYmVpbmcg dXNlZC4gICovDQo+ID4gKyAgICAgIGlmIChjaGFpbi0+Y29udGFpbnMgKGRlc3QpKQ0KPiA+ICsJ ew0KPiA+ICsJICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgZ2ltcGxlX251bV9hcmdzIChzdG10 KTsgeCsrKQ0KPiA+ICsJICAgIGlmIChUUkVFX0NPREUgKGdpbXBsZV9hcmcgKHN0bXQsIHgpKSA9 PSBTU0FfTkFNRSkNCj4gPiArCSAgICAgIGNoYWluLT5hZGQgKGdpbXBsZV9hcmcgKHN0bXQsIHgp KTsNCj4gPiArDQo+ID4gKwkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiArCSAgICAgIGR1 bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sDQo+ID4gKwkJCQkiZm91bmQg Y2hhaW4gJUciLCBzdG10KTsNCj4gPiArDQo+ID4gKwkgIG1vdmUgPSBmYWxzZTsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKyAgICAgIHN0bXRfdmVjX2luZm8gc3RtdF92aW5mbyA9IGxvb3BfdmluZm8t Pmxvb2t1cF9zdG10IChzdG10KTsNCj4gPiArICAgICAgaWYgKCFzdG10X3ZpbmZvKQ0KPiA+ICsJ ew0KPiA+ICsJICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQ0KPiA+ICsJICAgICBkdW1wX3ByaW50 Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0aW9uLA0KPiA+ICsJCQkg ICAgICAiZWFybHkgYnJlYWtzIG9ubHkgc3VwcG9ydGVkLiBVbmtub3duIg0KPiA+ICsJCQkgICAg ICAiIHN0YXRlbWVudDogJUciLCBzdG10KTsNCj4gPiArCSAgIHJldHVybiBmYWxzZTsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKyAgICAgIGF1dG8gZHJfcmVmID0gU1RNVF9WSU5GT19EQVRBX1JFRiAo c3RtdF92aW5mbyk7DQo+ID4gKyAgICAgIGlmIChkcl9yZWYpDQo+ID4gKwl7DQo+ID4gKwkgICAv KiBXZSBjdXJyZW5seSBvbmx5IHN1cHBvcnQgc3RhdGljYWxseSBhbGxvY2F0ZWQgb2JqZWN0cyBk dWUgdG8NCj4gPiArCSAgICAgIG5vdCBoYXZpbmcgZmlyc3QtZmF1bHRpbmcgbG9hZHMgc3VwcG9y dCBvciBwZWVsaW5nIGZvciBhbGlnbm1lbnQNCj4gPiArCSAgICAgIHN1cHBvcnQuICBDb21wdXRl IHRoZSBpc2l6ZSBvZiB0aGUgcmVmZXJlbmNlZCBvYmplY3QgKGl0IGNvdWxkIGJlDQo+ID4gKwkg ICAgICBkeW5hbWljYWxseSBhbGxvY2F0ZWQpLiAgKi8NCj4gPiArCSAgIHRyZWUgb2JqID0gRFJf QkFTRV9BRERSRVNTIChkcl9yZWYpOw0KPiA+ICsJICAgaWYgKCFvYmogfHwgVFJFRV9DT0RFIChv YmopICE9IEFERFJfRVhQUikNCj4gPiArCSAgICAgew0KPiA+ICsJICAgICAgIGlmIChkdW1wX2Vu YWJsZWRfcCAoKSkNCj4gPiArCQkgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElNSVpB VElPTiwNCj4gPiB2ZWN0X2xvY2F0aW9uLA0KPiA+ICsJCQkJICAiZWFybHkgYnJlYWtzIG9ubHkg c3VwcG9ydGVkIG9uIHN0YXRpY2FsbHkiDQo+ID4gKwkJCQkgICIgYWxsb2NhdGVkIG9iamVjdHMu XG4iKTsNCj4gPiArCSAgICAgICByZXR1cm4gZmFsc2U7DQo+ID4gKwkgICAgIH0NCj4gPiArDQo+ ID4gKwkgICB0cmVlIHJlZm9wID0gVFJFRV9PUEVSQU5EIChvYmosIDApOw0KPiA+ICsJICAgdHJl ZSByZWZiYXNlID0gZ2V0X2Jhc2VfYWRkcmVzcyAocmVmb3ApOw0KPiA+ICsJICAgaWYgKCFyZWZi YXNlIHx8ICFERUNMX1AgKHJlZmJhc2UpDQo+ID4gKwkgICAgICAgfHwgVFJFRV9DT0RFIChERUNM X1NJWkUgKHJlZmJhc2UpKSAhPSBJTlRFR0VSX0NTVCkNCj4gPiArCSAgICAgew0KPiA+ICsJICAg ICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkNCj4gPiArCQkgZHVtcF9wcmludGZfbG9jIChNU0df TUlTU0VEX09QVElNSVpBVElPTiwNCj4gPiB2ZWN0X2xvY2F0aW9uLA0KPiA+ICsJCQkJICAiZWFy bHkgYnJlYWtzIG9ubHkgc3VwcG9ydGVkIG9uIHN0YXRpY2FsbHkiDQo+ID4gKwkJCQkgICIgYWxs b2NhdGVkIG9iamVjdHMuXG4iKTsNCj4gPiArCSAgICAgICByZXR1cm4gZmFsc2U7DQo+ID4gKwkg ICAgIH0NCj4gPiArDQo+ID4gKwkgICBpZiAoIW1vdmUgJiYgRFJfSVNfUkVBRCAoZHJfcmVmKSkN Cj4gPiArCSAgICAgew0KPiA+ICsJCWxvYWRzLT5zYWZlX3B1c2ggKGRlc3QpOw0KPiA+ICsJCWJh c2VzLT5zYWZlX3B1c2ggKGRyX3JlZik7DQo+ID4gKwkgICAgIH0NCj4gPiArCSAgIGVsc2UgaWYg KERSX0lTX1dSSVRFIChkcl9yZWYpKQ0KPiA+ICsJICAgICB7DQo+ID4gKwkJZm9yIChhdXRvIGRy IDogYmFzZXMpDQo+ID4gKwkJICBpZiAoc2FtZV9kYXRhX3JlZnNfYmFzZV9vYmplY3RzIChkciwg ZHJfcmVmKSkNCj4gPiArCQkgICAgcmV0dXJuIGZhbHNlOw0KPiA+ICsJICAgICB9DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsgICAgICBpZiAobW92ZSkNCj4gPiArCXsNCj4gPiArCSAgaWYgKGR1bXBf ZW5hYmxlZF9wICgpKQ0KPiA+ICsJICAgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3Rf bG9jYXRpb24sDQo+ID4gKwkJICAgICAgICAgICAgICJhbmFseXppbmcgc3RtdCAlRyIsIHN0bXQp Ow0KPiA+ICsNCj4gPiArCSAgZm9yICh0cmVlIHJlZiA6IGxvYWRzKQ0KPiA+ICsJICAgIGlmIChz dG10X21heV9jbG9iYmVyX3JlZl9wIChzdG10LCByZWYsIHRydWUpKQ0KPiA+ICsJICAgICAgew0K PiA+ICsJICAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gKwkJICBkdW1wX3ByaW50 Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLA0KPiA+IHZlY3RfbG9jYXRpb24sDQo+ID4g KwkJCQkgICAiZWFybHkgYnJlYWtzIG5vdCBzdXBwb3J0ZWQgYXMgbWVtb3J5DQo+ID4gdXNlZCIN Cj4gPiArCQkJCSAgICIgbWF5IGFsaWFzLlxuIik7DQo+ID4gKwkgICAgICAgIHJldHVybiBmYWxz ZTsNCj4gPiArCSAgICAgIH0NCj4gPiArCX0NCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgZ3Np X3ByZXYgKGdzdG10KTsNCj4gPiArICByZXR1cm4gdmFsaWRhdGVfZWFybHlfZXhpdF9zdG10cyAo bG9vcF92aW5mbywgY2hhaW4sIGxvYWRzLCBiYXNlcywNCj4gZ3N0bXQpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKiBDaGVjayB0byBzZWUgaWYgdGhlIGN1cnJlbnQgZWFybHkgYnJlYWsgZ2l2ZW4g aW4gU1RNVF9JTkZPIGlzIHZhbGlkIGZvcg0KPiA+ICsgICB2ZWN0b3JpemF0aW9uLiAgKi8NCj4g PiArDQo+ID4gK2Jvb2wNCj4gPiArdmVjdG9yaXphYmxlX2Vhcmx5X2V4aXQgKHZlY19pbmZvICp2 aW5mbywNCj4gPiArCQkJc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sIHNscF90cmVlIC8qIHNscF9u b2RlICovLA0KPiA+ICsJCQlzbHBfaW5zdGFuY2UgLyogc2xwX25vZGVfaW5zdGFuY2UgKi8sDQo+ ID4gKwkJCXN0bXRfdmVjdG9yX2Zvcl9jb3N0ICogLyogY29zdF92ZWMgKi8pDQo+ID4gK3sNCj4g PiArICBsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8gPSBkeW5fY2FzdCA8bG9vcF92ZWNfaW5mbz4g KHZpbmZvKTsNCj4gPiArDQo+ID4gKyAgaWYgKCFsb29wX3ZpbmZvDQo+ID4gKyAgICAgIHx8ICFp c19hIDxnY29uZCAqPiAoU1RNVF9WSU5GT19TVE1UIChzdG10X2luZm8pKSkNCj4gPiArICAgIHJl dHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKyAgaWYgKFNUTVRfVklORk9fREVGX1RZUEUgKHN0bXRf aW5mbykgIT0gdmVjdF9lYXJseV9leGl0X2RlZikNCj4gPiArICAgIHJldHVybiBmYWxzZTsNCj4g PiArDQo+ID4gKyAgdHJlZSB2ZWN0eXBlID0gU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8p Ow0KPiA+ICsgIHRyZWUgdHJ1dGhfdHlwZSA9IHRydXRoX3R5cGVfZm9yICh2ZWN0eXBlKTsNCj4g PiArDQo+ID4gKyAgYXV0byBvcHRhYiA9IGRpcmVjdF9vcHRhYl9oYW5kbGVyIChjYnJhbmNoX29w dGFiLCBUWVBFX01PREUNCj4gPiAodHJ1dGhfdHlwZSkpOw0KPiA+ICsgIGlmIChvcHRhYiA9PSBD T0RFX0ZPUl9ub3RoaW5nKQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICBpZiAoZHVtcF9lbmFibGVk X3AgKCkpDQo+ID4gKwkgIGR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04s IHZlY3RfbG9jYXRpb24sDQo+ID4gKwkJCQkgImNhbid0IHZlY3Rvcml6ZSBlYXJseSBleGl0IGJl Y2F1c2UgdGhlICINCj4gPiArCQkJCSAidGFyZ2V0IGRvZXNuJ3Qgc3VwcG9ydCBmbGFnIHNldHRp bmcgdmVjdG9yICINCj4gPiArCQkJCSAiY29tcGFyaXNvbnMuXG4iKTsNCj4gPiArICAgICAgcmV0 dXJuIGZhbHNlOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICBoYXNoX3NldDx0cmVlPiBjaGFp bjsNCj4gPiArICBhdXRvX3ZlYzx0cmVlPiBsb2FkczsNCj4gPiArICBhdXRvX3ZlYzxkYXRhX3Jl ZmVyZW5jZSAqPiBiYXNlczsNCj4gPiArDQo+ID4gKyAgZ2ltcGxlICpzdG10ID0gU1RNVF9WSU5G T19TVE1UIChzdG10X2luZm8pOw0KPiA+ICsgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaSA9IGdz aV9mb3Jfc3RtdCAoc3RtdCk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiB2YWxpZGF0ZV9lYXJseV9l eGl0X3N0bXRzIChsb29wX3ZpbmZvLCAmY2hhaW4sICZsb2FkcywgJmJhc2VzLA0KPiA+ICZnc2kp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICAvKiBWZWN0b3JpemVzIExDIFBISXMuICAqLw0KPiA+DQo+ ID4gIGJvb2wNCj4gPiBAQCAtOTk5MywxMyArMTA0NjksMjQgQEAgdmVjdG9yaXphYmxlX2xpdmVf b3BlcmF0aW9uICh2ZWNfaW5mbyAqdmluZm8sDQo+ID4gIAkgICBuZXdfdHJlZSA9IGxhbmVfZXh0 cmFjdCA8dmVjX2xocycsIC4uLj47DQo+ID4gIAkgICBsaHMnID0gbmV3X3RyZWU7ICAqLw0KPiA+ DQo+ID4gKyAgICAgIC8qIFdoZW4gdmVjdG9yaXppbmcgYW4gZWFybHkgYnJlYWssIGFueSBsaXZl IHN0YXRlbWVudCB0aGF0IGlzIHVzZWQNCj4gPiArCSBvdXRzaWRlIG9mIHRoZSBsb29wIGFyZSBk ZWFkLiAgVGhlIGxvb3Agd2lsbCBuZXZlciBnZXQgdG8gdGhlbS4NCj4gPiArCSBXZSBjb3VsZCBj aGFuZ2UgdGhlIGxpdmVuZXNzIHZhbHVlIGR1cmluZyBhbmFseXNpcyBpbnN0ZWFkIGJ1dCBzaW5j ZQ0KPiA+ICsJIHRoZSBiZWxvdyBjb2RlIGlzIGludmFsaWQgYW55d2F5IGp1c3QgaWdub3JlIGl0 IGR1cmluZyBjb2RlZ2VuLiAgKi8NCj4gPiArICAgICAgaWYgKExPT1BfVklORk9fRUFSTFlfQlJF QUtTIChsb29wX3ZpbmZvKSkNCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICsNCj4gPiAgICAgICAg Y2xhc3MgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAobG9vcF92aW5mbyk7DQo+ID4gLSAg ICAgIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBzaW5nbGVfZXhpdCAobG9vcCktPmRlc3Q7DQo+ID4g KyAgICAgIGJhc2ljX2Jsb2NrIGV4aXRfYmIgPSBub3JtYWxfZXhpdCAobG9vcCktPmRlc3Q7DQo+ ID4gICAgICAgIGdjY19hc3NlcnQgKHNpbmdsZV9wcmVkX3AgKGV4aXRfYmIpKTsNCj4gPg0KPiA+ ICAgICAgICB0cmVlIHZlY19saHNfcGhpID0gY29weV9zc2FfbmFtZSAodmVjX2xocyk7DQo+ID4g ICAgICAgIGdpbXBsZSAqcGhpID0gY3JlYXRlX3BoaV9ub2RlICh2ZWNfbGhzX3BoaSwgZXhpdF9i Yik7DQo+ID4gLSAgICAgIFNFVF9QSElfQVJHX0RFRiAocGhpLCBzaW5nbGVfZXhpdCAobG9vcCkt PmRlc3RfaWR4LCB2ZWNfbGhzKTsNCj4gPiArICAgICAgLyogRm9yIGVhcmx5IGV4aXRzIHdlIG5l ZWQgdG8gY29tcHV0ZSB0aGUgcmlnaHQgZXhpdC4gIFRoZSBjdXJyZW50DQo+ID4gKwkgYXBwcm9h Y2ggcHVudHMgdG8gYSBzY2FsYXIgbG9vcCBpbnN0ZWFkLiAgSWYgd2Ugd2VyZSB0byB2ZWN0b3Jp emUNCj4gPiArCSB0aGUgZXhpdCBjb25kaXRpb24gYmVsb3cgbmVlZHMgdG8gdGFrZSBpbnRvIGFj Y291bnQgdGhlIGRpZmZlcmVuY2UNCj4gPiArCSBiZXR3ZWVuIGEgYGJyZWFrYCBlZGdlIGFuZCBh IGByZXR1cm5gIGVkZ2UuICAqLw0KPiA+ICsgICAgICBTRVRfUEhJX0FSR19ERUYgKHBoaSwgbm9y bWFsX2V4aXQgKGxvb3ApLT5kZXN0X2lkeCwgdmVjX2xocyk7DQo+ID4NCj4gPiAgICAgICAgZ2lt cGxlX3NlcSBzdG10cyA9IE5VTEw7DQo+ID4gICAgICAgIHRyZWUgbmV3X3RyZWU7DQo+ID4gQEAg LTEwNDM4LDcgKzEwOTI1LDggQEAgc2NhbGVfcHJvZmlsZV9mb3JfdmVjdF9sb29wIChjbGFzcyBs b29wICpsb29wLA0KPiA+IHVuc2lnbmVkIHZmKQ0KPiA+ICAgICAgICBzY2FsZV9sb29wX2ZyZXF1 ZW5jaWVzIChsb29wLCBwKTsNCj4gPiAgICAgIH0NCj4gPg0KPiA+IC0gIGVkZ2UgZXhpdF9lID0g c2luZ2xlX2V4aXQgKGxvb3ApOw0KPiA+ICsgIGVkZ2UgZXhpdF9lID0gbm9ybWFsX2V4aXQgKGxv b3ApOw0KPiA+ICsNCj4gPiAgICBleGl0X2UtPnByb2JhYmlsaXR5ID0gcHJvZmlsZV9wcm9iYWJp bGl0eTo6YWx3YXlzICgpIC8gKG5ld19lc3Rfbml0ZXIgKyAxKTsNCj4gPg0KPiA+ICAgIGVkZ2Ug ZXhpdF9sID0gc2luZ2xlX3ByZWRfZWRnZSAobG9vcC0+bGF0Y2gpOw0KPiA+IEBAIC0xMDc4Nyw3 ICsxMTI3NSw3IEBAIHZlY3RfdHJhbnNmb3JtX2xvb3AgKGxvb3BfdmVjX2luZm8NCj4gbG9vcF92 aW5mbywNCj4gPiBnaW1wbGUgKmxvb3BfdmVjdG9yaXplZF9jYWxsKQ0KPiA+ICAgIC8qIE1ha2Ug c3VyZSB0aGVyZSBleGlzdHMgYSBzaW5nbGUtcHJlZGVjZXNzb3IgZXhpdCBiYi4gIERvIHRoaXMg YmVmb3JlDQo+ID4gICAgICAgdmVyc2lvbmluZy4gICAqLw0KPiA+ICAgIGVkZ2UgZSA9IHNpbmds ZV9leGl0IChsb29wKTsNCj4gPiAtICBpZiAoISBzaW5nbGVfcHJlZF9wIChlLT5kZXN0KSkNCj4g PiArICBpZiAoZSAmJiAhIHNpbmdsZV9wcmVkX3AgKGUtPmRlc3QpKQ0KPiA+ICAgICAgew0KPiA+ ICAgICAgICBzcGxpdF9sb29wX2V4aXRfZWRnZSAoZSwgdHJ1ZSk7DQo+ID4gICAgICAgIGlmIChk dW1wX2VuYWJsZWRfcCAoKSkNCj4gPiBAQCAtMTA4MTMsNyArMTEzMDEsNyBAQCB2ZWN0X3RyYW5z Zm9ybV9sb29wIChsb29wX3ZlY19pbmZvDQo+IGxvb3BfdmluZm8sDQo+ID4gZ2ltcGxlICpsb29w X3ZlY3Rvcml6ZWRfY2FsbCkNCj4gPiAgICBpZiAoTE9PUF9WSU5GT19TQ0FMQVJfTE9PUCAobG9v cF92aW5mbykpDQo+ID4gICAgICB7DQo+ID4gICAgICAgIGUgPSBzaW5nbGVfZXhpdCAoTE9PUF9W SU5GT19TQ0FMQVJfTE9PUCAobG9vcF92aW5mbykpOw0KPiA+IC0gICAgICBpZiAoISBzaW5nbGVf cHJlZF9wIChlLT5kZXN0KSkNCj4gPiArICAgICAgaWYgKGUgJiYgISBzaW5nbGVfcHJlZF9wIChl LT5kZXN0KSkNCj4gPiAgCXsNCj4gPiAgCSAgc3BsaXRfbG9vcF9leGl0X2VkZ2UgKGUsIHRydWUp Ow0KPiA+ICAJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4gQEAgLTExMTQ2LDcgKzExNjM0 LDggQEAgdmVjdF90cmFuc2Zvcm1fbG9vcCAobG9vcF92ZWNfaW5mbw0KPiBsb29wX3ZpbmZvLA0K PiA+IGdpbXBsZSAqbG9vcF92ZWN0b3JpemVkX2NhbGwpDQo+ID4NCj4gPiAgICAvKiBMb29wcyB2 ZWN0b3JpemVkIHdpdGggYSB2YXJpYWJsZSBmYWN0b3Igd29uJ3QgYmVuZWZpdCBmcm9tDQo+ID4g ICAgICAgdW5yb2xsaW5nL3BlZWxpbmcuICAqLw0KPiA+IC0gIGlmICghdmYuaXNfY29uc3RhbnQg KCkpDQo+ID4gKyAgaWYgKCF2Zi5pc19jb25zdGFudCAoKQ0KPiA+ICsgICAgICAmJiAhTE9PUF9W SU5GT19FQVJMWV9CUkVBS1MgKGxvb3BfdmluZm8pKQ0KPiA+ICAgICAgew0KPiA+ICAgICAgICBs b29wLT51bnJvbGwgPSAxOw0KPiA+ICAgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpDQo+ID4g ZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MgYi9nY2MvdHJlZS12ZWN0LXN0bXRz LmNjDQo+ID4gaW5kZXgNCj4gPg0KPiA0ZTBkNzVlMGQ3NTg2YWQ1N2EzNzg1MGQ4YTcwZjYxODJl Y2IxM2QwLi40Zjk0NDZhNWM2OTkyODhiZTA5M2M1NTZlDQo+ID4gYzUyN2U4N2NmNzg4MzE3IDEw MDY0NA0KPiA+IC0tLSBhL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MNCj4gPiArKysgYi9nY2MvdHJl ZS12ZWN0LXN0bXRzLmNjDQo+ID4gQEAgLTM0Miw5ICszNDIsMjggQEAgdmVjdF9zdG10X3JlbGV2 YW50X3AgKHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLA0KPiA+IGxvb3BfdmVjX2luZm8gbG9vcF92 aW5mbywNCj4gPiAgICAqbGl2ZV9wID0gZmFsc2U7DQo+ID4NCj4gPiAgICAvKiBjb25kIHN0bXQg b3RoZXIgdGhhbiBsb29wIGV4aXQgY29uZC4gICovDQo+ID4gLSAgaWYgKGlzX2N0cmxfc3RtdCAo c3RtdF9pbmZvLT5zdG10KQ0KPiA+IC0gICAgICAmJiBTVE1UX1ZJTkZPX1RZUEUgKHN0bXRfaW5m bykgIT0gbG9vcF9leGl0X2N0cmxfdmVjX2luZm9fdHlwZSkNCj4gPiAtICAgICpyZWxldmFudCA9 IHZlY3RfdXNlZF9pbl9zY29wZTsNCj4gPiArICBpZiAoaXNfY3RybF9zdG10IChzdG10X2luZm8t PnN0bXQpKQ0KPiA+ICsgICAgew0KPiA+ICsgICAgICAvKiBJZGVhbGx5IEVER0VfTE9PUF9FWElU IHdvdWxkIGhhdmUgYmVlbiBzZXQgb24gdGhlIGV4aXQgZWRnZSwgYnV0DQo+ID4gKwkgaXQgbG9v a3MgbGlrZSBsb29wX21hbmlwIGRvZXNuJ3QgZG8gdGhhdC4uICBTbyB3ZSBoYXZlIHRvIGRvIGl0 DQo+ID4gKwkgdGhlIGhhcmQgd2F5LiAgKi8NCj4gPiArICAgICAgYmFzaWNfYmxvY2sgYmIgPSBn aW1wbGVfYmIgKHN0bXRfaW5mby0+c3RtdCk7DQo+ID4gKyAgICAgIGJhc2ljX2Jsb2NrICpiYnMg PSBMT09QX1ZJTkZPX0JCUyAobG9vcF92aW5mbyk7DQo+ID4gKyAgICAgIGVkZ2UgZXhpdCA9IEJS QU5DSF9FREdFIChiYik7DQo+ID4gKyAgICAgIHVuc2lnbmVkIG5iYnMgPSBsb29wLT5udW1fbm9k ZXM7DQo+ID4gKyAgICAgIGJvb2wgZXhpdF9iYiA9IHRydWU7DQo+ID4gKyAgICAgIGZvciAodW5z aWduZWQgaSA9IDA7IGkgPCBuYmJzOyBpKyspDQo+ID4gKwl7DQo+ID4gKwkgIGlmIChleGl0LT5k ZXN0ID09IGJic1tpXSkNCj4gPiArCSAgICB7DQo+ID4gKwkgICAgICBleGl0X2JiID0gZmFsc2U7 DQo+ID4gKwkgICAgICBicmVhazsNCj4gPiArCSAgICB9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsg ICAgICBpZiAoZXhpdF9iYikNCj4gPiArCSpyZWxldmFudCA9IHZlY3RfdXNlZF9pbl9zY29wZTsN Cj4gPiArICAgIH0NCj4gPg0KPiA+ICAgIC8qIGNoYW5naW5nIG1lbW9yeS4gICovDQo+ID4gICAg aWYgKGdpbXBsZV9jb2RlIChzdG10X2luZm8tPnN0bXQpICE9IEdJTVBMRV9QSEkpDQo+ID4gQEAg LTM1Nyw2ICszNzYsMTEgQEAgdmVjdF9zdG10X3JlbGV2YW50X3AgKHN0bXRfdmVjX2luZm8gc3Rt dF9pbmZvLA0KPiA+IGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywNCj4gPiAgCSpyZWxldmFudCA9 IHZlY3RfdXNlZF9pbl9zY29wZTsNCj4gPiAgICAgICAgfQ0KPiA+DQo+ID4gKyAgYXV0b192ZWM8 ZWRnZT4gZXhpdHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsNCj4gPiArICBhdXRvX2Jp dG1hcCBleGl0X2JiczsNCj4gPiArICBmb3IgKGVkZ2UgZXhpdCA6IGV4aXRzKQ0KPiA+ICsgICAg Yml0bWFwX3NldF9iaXQgKGV4aXRfYmJzLCBleGl0LT5kZXN0LT5pbmRleCk7DQo+ID4gKw0KPiA+ ICAgIC8qIHVzZXMgb3V0c2lkZSB0aGUgbG9vcC4gICovDQo+ID4gICAgRk9SX0VBQ0hfUEhJX09S X1NUTVRfREVGIChkZWZfcCwgc3RtdF9pbmZvLT5zdG10LCBvcF9pdGVyLA0KPiA+IFNTQV9PUF9E RUYpDQo+ID4gICAgICB7DQo+ID4gQEAgLTM3NSw3ICszOTksNyBAQCB2ZWN0X3N0bXRfcmVsZXZh bnRfcCAoc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sDQo+ID4gbG9vcF92ZWNfaW5mbyBsb29wX3Zp bmZvLA0KPiA+ICAJICAgICAgLyogV2UgZXhwZWN0IGFsbCBzdWNoIHVzZXMgdG8gYmUgaW4gdGhl IGxvb3AgZXhpdCBwaGlzDQo+ID4gIAkJIChiZWNhdXNlIG9mIGxvb3AgY2xvc2VkIGZvcm0pICAg Ki8NCj4gPiAgCSAgICAgIGdjY19hc3NlcnQgKGdpbXBsZV9jb2RlIChVU0VfU1RNVCAodXNlX3Ap KSA9PSBHSU1QTEVfUEhJKTsNCj4gPiAtCSAgICAgIGdjY19hc3NlcnQgKGJiID09IHNpbmdsZV9l eGl0IChsb29wKS0+ZGVzdCk7DQo+ID4gKwkgICAgICBnY2NfYXNzZXJ0IChiaXRtYXBfYml0X3Ag KGV4aXRfYmJzLCBiYi0+aW5kZXgpKTsNCj4gPg0KPiA+ICAgICAgICAgICAgICAgICpsaXZlX3Ag PSB0cnVlOw0KPiA+ICAJICAgIH0NCj4gPiBAQCAtMTg0NSw3ICsxODY5LDcgQEAgY2hlY2tfbG9h ZF9zdG9yZV9mb3JfcGFydGlhbF92ZWN0b3JzDQo+ID4gKGxvb3BfdmVjX2luZm8gbG9vcF92aW5m bywgdHJlZSB2ZWN0eXBlLA0KPiA+ICAgICBNQVNLX1RZUEUgaXMgdGhlIHR5cGUgb2YgYm90aCBt YXNrcy4gIElmIG5ldyBzdGF0ZW1lbnRzIGFyZSBuZWVkZWQsDQo+ID4gICAgIGluc2VydCB0aGVt IGJlZm9yZSBHU0kuICAqLw0KPiA+DQo+ID4gLXN0YXRpYyB0cmVlDQo+ID4gK3RyZWUNCj4gPiAg cHJlcGFyZV92ZWNfbWFzayAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlIG1hc2tfdHlw ZSwgdHJlZQ0KPiA+IGxvb3BfbWFzaywNCj4gPiAgCQkgIHRyZWUgdmVjX21hc2ssIGdpbXBsZV9z dG10X2l0ZXJhdG9yICpnc2kpDQo+ID4gIHsNCj4gPiBAQCAtMTExNTgsMTEgKzExMTgyLDE0IEBA IHZlY3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5mbyAqdmluZm8sDQo+ID4gIAkJCSAgICAgbm9kZV9p bnN0YW5jZSwgY29zdF92ZWMpOw0KPiA+ICAgICAgICBpZiAoIXJlcykNCj4gPiAgCXJldHVybiBy ZXM7DQo+ID4gLSAgIH0NCj4gPiArICAgIH0NCj4gPiArICBlbHNlIGlmIChpc19jdHJsX3N0bXQg KHN0bXRfaW5mby0+c3RtdCkpDQo+ID4gKyAgICBTVE1UX1ZJTkZPX0RFRl9UWVBFIChzdG10X2lu Zm8pID0gdmVjdF9lYXJseV9leGl0X2RlZjsNCj4gPg0KPiA+ICAgIHN3aXRjaCAoU1RNVF9WSU5G T19ERUZfVFlQRSAoc3RtdF9pbmZvKSkNCj4gPiAgICAgIHsNCj4gPiAgICAgICAgY2FzZSB2ZWN0 X2ludGVybmFsX2RlZjoNCj4gPiArICAgICAgY2FzZSB2ZWN0X2Vhcmx5X2V4aXRfZGVmOg0KPiA+ ICAgICAgICAgIGJyZWFrOw0KPiA+DQo+ID4gICAgICAgIGNhc2UgdmVjdF9yZWR1Y3Rpb25fZGVm Og0KPiA+IEBAIC0xMTE5NSw2ICsxMTIyMiw3IEBAIHZlY3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5m byAqdmluZm8sDQo+ID4gICAgICB7DQo+ID4gICAgICAgIGdjYWxsICpjYWxsID0gZHluX2Nhc3Qg PGdjYWxsICo+IChzdG10X2luZm8tPnN0bXQpOw0KPiA+ICAgICAgICBnY2NfYXNzZXJ0IChTVE1U X1ZJTkZPX1ZFQ1RZUEUgKHN0bXRfaW5mbykNCj4gPiArCQkgIHx8IGdpbXBsZV9jb2RlIChzdG10 X2luZm8tPnN0bXQpID09IEdJTVBMRV9DT05EDQo+ID4gIAkJICB8fCAoY2FsbCAmJiBnaW1wbGVf Y2FsbF9saHMgKGNhbGwpID09IE5VTExfVFJFRSkpOw0KPiA+ICAgICAgICAqbmVlZF90b192ZWN0 b3JpemUgPSB0cnVlOw0KPiA+ICAgICAgfQ0KPiA+IEBAIC0xMTIzNyw3ICsxMTI2NSw5IEBAIHZl Y3RfYW5hbHl6ZV9zdG10ICh2ZWNfaW5mbyAqdmluZm8sDQo+ID4gIAkgIHx8IHZlY3Rvcml6YWJs ZV9sY19waGkgKGFzX2EgPGxvb3BfdmVjX2luZm8+ICh2aW5mbyksDQo+ID4gIAkJCQkgIHN0bXRf aW5mbywgTlVMTCwgbm9kZSkNCj4gPiAgCSAgfHwgdmVjdG9yaXphYmxlX3JlY3VyciAoYXNfYSA8 bG9vcF92ZWNfaW5mbz4gKHZpbmZvKSwNCj4gPiAtCQkJCSAgIHN0bXRfaW5mbywgTlVMTCwgbm9k ZSwgY29zdF92ZWMpKTsNCj4gPiArCQkJCSAgIHN0bXRfaW5mbywgTlVMTCwgbm9kZSwgY29zdF92 ZWMpDQo+ID4gKwkgIHx8IHZlY3Rvcml6YWJsZV9lYXJseV9leGl0ICh2aW5mbywgc3RtdF9pbmZv LA0KPiA+ICsJCQkJICAgICAgbm9kZSwgbm9kZV9pbnN0YW5jZSwgY29zdF92ZWMpKTsNCj4gPiAg ICBlbHNlDQo+ID4gICAgICB7DQo+ID4gICAgICAgIGlmIChiYl92aW5mbykNCj4gPiBAQCAtMTEy NjAsNyArMTEyOTAsMTAgQEAgdmVjdF9hbmFseXplX3N0bXQgKHZlY19pbmZvICp2aW5mbywNCj4g PiAgCQkJCQkgTlVMTCwgTlVMTCwgbm9kZSwgY29zdF92ZWMpDQo+ID4gIAkgICAgICB8fCB2ZWN0 b3JpemFibGVfY29tcGFyaXNvbiAodmluZm8sIHN0bXRfaW5mbywgTlVMTCwgTlVMTCwgbm9kZSwN Cj4gPiAgCQkJCQkgIGNvc3RfdmVjKQ0KPiA+IC0JICAgICAgfHwgdmVjdG9yaXphYmxlX3BoaSAo dmluZm8sIHN0bXRfaW5mbywgTlVMTCwgbm9kZSwgY29zdF92ZWMpKTsNCj4gPiArCSAgICAgIHx8 IHZlY3Rvcml6YWJsZV9waGkgKHZpbmZvLCBzdG10X2luZm8sIE5VTEwsIG5vZGUsIGNvc3RfdmVj KQ0KPiA+ICsJICAgICAgfHwgdmVjdG9yaXphYmxlX2Vhcmx5X2V4aXQgKHZpbmZvLCBzdG10X2lu Zm8sIG5vZGUsDQo+ID4gKwkJCQkJICBub2RlX2luc3RhbmNlLCBjb3N0X3ZlYykpOw0KPiA+ICsN Cj4gPiAgICAgIH0NCj4gPg0KPiA+ICAgIGlmIChub2RlKQ0KPiA+IEBAIC0xMTQxOCw2ICsxMTQ1 MSwxMiBAQCB2ZWN0X3RyYW5zZm9ybV9zdG10ICh2ZWNfaW5mbyAqdmluZm8sDQo+ID4gICAgICAg IGdjY19hc3NlcnQgKGRvbmUpOw0KPiA+ICAgICAgICBicmVhazsNCj4gPg0KPiA+ICsgICAgY2Fz ZSBsb29wX2V4aXRfY3RybF92ZWNfaW5mb190eXBlOg0KPiA+ICsgICAgICBkb25lID0gdmVjdF90 cmFuc2Zvcm1fZWFybHlfYnJlYWsgKGFzX2EgPGxvb3BfdmVjX2luZm8+ICh2aW5mbyksDQo+ID4g c3RtdF9pbmZvLA0KPiA+ICsJCQkJICAgICAgICAgZ3NpLCAmdmVjX3N0bXQsIHNscF9ub2RlKTsN Cj4gPiArICAgICAgZ2NjX2Fzc2VydCAoZG9uZSk7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsN Cj4gPiAgICAgIGRlZmF1bHQ6DQo+ID4gICAgICAgIGlmICghU1RNVF9WSU5GT19MSVZFX1AgKHN0 bXRfaW5mbykpDQo+ID4gIAl7DQo+ID4gQEAgLTExODE2LDYgKzExODU1LDkgQEAgdmVjdF9pc19z aW1wbGVfdXNlICh0cmVlIG9wZXJhbmQsIHZlY19pbmZvDQo+ID4gKnZpbmZvLCBlbnVtIHZlY3Rf ZGVmX3R5cGUgKmR0LA0KPiA+ICAJY2FzZSB2ZWN0X2ZpcnN0X29yZGVyX3JlY3VycmVuY2U6DQo+ ID4gIAkgIGR1bXBfcHJpbnRmIChNU0dfTk9URSwgImZpcnN0IG9yZGVyIHJlY3VycmVuY2VcbiIp Ow0KPiA+ICAJICBicmVhazsNCj4gPiArCWNhc2UgdmVjdF9lYXJseV9leGl0X2RlZjoNCj4gPiAr CSAgZHVtcF9wcmludGYgKE1TR19OT1RFLCAiZWFybHkgZXhpdFxuIik7DQo+ID4gKwkgIGJyZWFr Ow0KPiA+ICAJY2FzZSB2ZWN0X3Vua25vd25fZGVmX3R5cGU6DQo+ID4gIAkgIGR1bXBfcHJpbnRm IChNU0dfTk9URSwgInVua25vd25cbiIpOw0KPiA+ICAJICBicmVhazsNCj4gPiBAQCAtMTI0ODYs NiArMTI1MjgsOCBAQCB2ZWN0X2dldF92ZWN0b3JfdHlwZXNfZm9yX3N0bXQgKHZlY19pbmZvDQo+ ID4gKnZpbmZvLCBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywNCj4gPiAgICAqbnVuaXRzX3ZlY3R5 cGVfb3V0ID0gTlVMTF9UUkVFOw0KPiA+DQo+ID4gICAgaWYgKGdpbXBsZV9nZXRfbGhzIChzdG10 KSA9PSBOVUxMX1RSRUUNCj4gPiArICAgICAgLyogQWxsb3cgdmVjdG9yIGNvbmRpdGlvbmFscyB0 aHJvdWdoIGhlcmUuICAqLw0KPiA+ICsgICAgICAmJiAhaXNfY3RybF9zdG10IChzdG10KQ0KPiA+ ICAgICAgICAvKiBNQVNLX1NUT1JFIGhhcyBubyBsaHMsIGJ1dCBpcyBvay4gICovDQo+ID4gICAg ICAgICYmICFnaW1wbGVfY2FsbF9pbnRlcm5hbF9wIChzdG10LCBJRk5fTUFTS19TVE9SRSkpDQo+ ID4gICAgICB7DQo+ID4gQEAgLTEyNTAyLDcgKzEyNTQ2LDcgQEAgdmVjdF9nZXRfdmVjdG9yX3R5 cGVzX2Zvcl9zdG10ICh2ZWNfaW5mbw0KPiA+ICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2lu Zm8sDQo+ID4gIAl9DQo+ID4NCj4gPiAgICAgICAgcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVf YXQgKHN0bXQsDQo+ID4gLQkJCQkgICAgICJub3QgdmVjdG9yaXplZDogaXJyZWd1bGFyIHN0bXQu JUciLCBzdG10KTsNCj4gPiArCQkJCSAgICAgIm5vdCB2ZWN0b3JpemVkOiBpcnJlZ3VsYXIgc3Rt dDogJUciLCBzdG10KTsNCj4gPiAgICAgIH0NCj4gPg0KPiA+ICAgIHRyZWUgdmVjdHlwZTsNCj4g PiBAQCAtMTI1MzEsNiArMTI1NzUsOCBAQCB2ZWN0X2dldF92ZWN0b3JfdHlwZXNfZm9yX3N0bXQg KHZlY19pbmZvDQo+ID4gKnZpbmZvLCBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywNCj4gPiAgCXNj YWxhcl90eXBlID0gVFJFRV9UWVBFIChEUl9SRUYgKGRyKSk7DQo+ID4gICAgICAgIGVsc2UgaWYg KGdpbXBsZV9jYWxsX2ludGVybmFsX3AgKHN0bXQsIElGTl9NQVNLX1NUT1JFKSkNCj4gPiAgCXNj YWxhcl90eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfY2FsbF9hcmcgKHN0bXQsIDMpKTsNCj4gPiAr ICAgICAgZWxzZSBpZiAoaXNfY3RybF9zdG10IChzdG10KSkNCj4gPiArCXNjYWxhcl90eXBlID0g VFJFRV9UWVBFIChnaW1wbGVfY29uZF9yaHMgKHN0bXQpKTsNCj4gPiAgICAgICAgZWxzZQ0KPiA+ ICAJc2NhbGFyX3R5cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9nZXRfbGhzIChzdG10KSk7DQo+ID4N Cj4gPiBkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdG9yaXplci5oIGIvZ2NjL3RyZWUtdmVjdG9y aXplci5oDQo+ID4gaW5kZXgNCj4gPg0KPiAwMTY5NjFkYTg1MTBjYTdkZDJkMDdlNzE2Y2JlMzU2 MjNlZDJkOWE1Li5lZGJiNzIyOGQzYWFlMjliNmY1MWZkYWINCj4gPiAyODRmNDlhYzU3YzY2MTJk IDEwMDY0NA0KPiA+IC0tLSBhL2djYy90cmVlLXZlY3Rvcml6ZXIuaA0KPiA+ICsrKyBiL2djYy90 cmVlLXZlY3Rvcml6ZXIuaA0KPiA+IEBAIC02Myw2ICs2Myw3IEBAIGVudW0gdmVjdF9kZWZfdHlw ZSB7DQo+ID4gICAgdmVjdF9pbnRlcm5hbF9kZWYsDQo+ID4gICAgdmVjdF9pbmR1Y3Rpb25fZGVm LA0KPiA+ICAgIHZlY3RfcmVkdWN0aW9uX2RlZiwNCj4gPiArICB2ZWN0X2Vhcmx5X2V4aXRfZGVm LA0KPiA+ICAgIHZlY3RfZG91YmxlX3JlZHVjdGlvbl9kZWYsDQo+ID4gICAgdmVjdF9uZXN0ZWRf Y3ljbGUsDQo+ID4gICAgdmVjdF9maXJzdF9vcmRlcl9yZWN1cnJlbmNlLA0KPiA+IEBAIC04MzYs NiArODM3LDEwIEBAIHB1YmxpYzoNCj4gPiAgICAgICB3ZSBuZWVkIHRvIHBlZWwgb2ZmIGl0ZXJh dGlvbnMgYXQgdGhlIGVuZCB0byBmb3JtIGFuIGVwaWxvZ3VlIGxvb3AuICAqLw0KPiA+ICAgIGJv b2wgcGVlbGluZ19mb3Jfbml0ZXI7DQo+ID4NCj4gPiArICAvKiBXaGVuIHRoZSBsb29wIGhhcyBl YXJseSBicmVha3MgdGhhdCB3ZSBjYW4gdmVjdG9yaXplIHdlIG5lZWQgdG8gcGVlbA0KPiA+ICsg ICAgIHRoZSBsb29wIGZvciB0aGUgYnJlYWsgZmluZGluZyBsb29wLiAgKi8NCj4gPiArICBib29s IGVhcmx5X2JyZWFrczsNCj4gPiArDQo+ID4gICAgLyogVHJ1ZSBpZiB0aGVyZSBhcmUgbm8gbG9v cCBjYXJyaWVkIGRhdGEgZGVwZW5kZW5jaWVzIGluIHRoZSBsb29wLg0KPiA+ICAgICAgIElmIGxv b3AtPnNhZmVsZW4gPD0gMSwgdGhlbiB0aGlzIGlzIGFsd2F5cyB0cnVlLCBlaXRoZXIgdGhlIGxv b3ANCj4gPiAgICAgICBkaWRuJ3QgaGF2ZSBhbnkgbG9vcCBjYXJyaWVkIGRhdGEgZGVwZW5kZW5j aWVzLCBvciB0aGUgbG9vcCBpcyBiZWluZw0KPiA+IEBAIC05MjEsNiArOTI2LDcgQEAgcHVibGlj Og0KPiA+ICAjZGVmaW5lIExPT1BfVklORk9fUkVEVUNUSU9OX0NIQUlOUyhMKSAgICAgKEwpLT5y ZWR1Y3Rpb25fY2hhaW5zDQo+ID4gICNkZWZpbmUgTE9PUF9WSU5GT19QRUVMSU5HX0ZPUl9HQVBT KEwpICAgICAoTCktPnBlZWxpbmdfZm9yX2dhcHMNCj4gPiAgI2RlZmluZSBMT09QX1ZJTkZPX1BF RUxJTkdfRk9SX05JVEVSKEwpICAgIChMKS0+cGVlbGluZ19mb3Jfbml0ZXINCj4gPiArI2RlZmlu ZSBMT09QX1ZJTkZPX0VBUkxZX0JSRUFLUyhMKSAgICAgICAgIChMKS0+ZWFybHlfYnJlYWtzDQo+ ID4gICNkZWZpbmUgTE9PUF9WSU5GT19OT19EQVRBX0RFUEVOREVOQ0lFUyhMKSAoTCktDQo+ID4g Pm5vX2RhdGFfZGVwZW5kZW5jaWVzDQo+ID4gICNkZWZpbmUgTE9PUF9WSU5GT19TQ0FMQVJfTE9P UChMKQkgICAoTCktPnNjYWxhcl9sb29wDQo+ID4gICNkZWZpbmUgTE9PUF9WSU5GT19TQ0FMQVJf TE9PUF9TQ0FMSU5HKEwpICAoTCktDQo+ID5zY2FsYXJfbG9vcF9zY2FsaW5nDQo+ID4gQEAgLTk3 MCw3ICs5NzYsNyBAQCBwdWJsaWM6DQo+ID4gIHR5cGVkZWYgb3B0X3BvaW50ZXJfd3JhcHBlciA8 bG9vcF92ZWNfaW5mbz4gb3B0X2xvb3BfdmVjX2luZm87DQo+ID4NCj4gPiAgc3RhdGljIGlubGlu ZSBsb29wX3ZlY19pbmZvDQo+ID4gLWxvb3BfdmVjX2luZm9fZm9yX2xvb3AgKGNsYXNzIGxvb3Ag Kmxvb3ApDQo+ID4gK2xvb3BfdmVjX2luZm9fZm9yX2xvb3AgKGNvbnN0IGNsYXNzIGxvb3AgKmxv b3ApDQo+ID4gIHsNCj4gPiAgICByZXR1cm4gKGxvb3BfdmVjX2luZm8pIGxvb3AtPmF1eDsNCj4g PiAgfQ0KPiA+IEBAIC0yMTA3LDcgKzIxMTMsNyBAQCBjbGFzcyBhdXRvX3B1cmdlX3ZlY3RfbG9j YXRpb24NCj4gPiAgICAgaW4gdHJlZS12ZWN0LWxvb3AtbWFuaXAuY2MuICAqLw0KPiA+ICBleHRl cm4gdm9pZCB2ZWN0X3NldF9sb29wX2NvbmRpdGlvbiAoY2xhc3MgbG9vcCAqLCBsb29wX3ZlY19p bmZvLA0KPiA+ICAJCQkJICAgICB0cmVlLCB0cmVlLCB0cmVlLCBib29sKTsNCj4gPiAtZXh0ZXJu IGJvb2wgc2xwZWVsX2Nhbl9kdXBsaWNhdGVfbG9vcF9wIChjb25zdCBjbGFzcyBsb29wICosDQo+ IGNvbnN0X2VkZ2UpOw0KPiA+ICtleHRlcm4gYm9vbCBzbHBlZWxfY2FuX2R1cGxpY2F0ZV9sb29w X3AgKGNvbnN0IGxvb3BfdmVjX2luZm8sDQo+ID4gY29uc3RfZWRnZSk7DQo+ID4gIGNsYXNzIGxv b3AgKnNscGVlbF90cmVlX2R1cGxpY2F0ZV9sb29wX3RvX2VkZ2VfY2ZnIChjbGFzcyBsb29wICos DQo+ID4gIAkJCQkJCSAgICAgY2xhc3MgbG9vcCAqLCBlZGdlKTsNCj4gPiAgY2xhc3MgbG9vcCAq dmVjdF9sb29wX3ZlcnNpb25pbmcgKGxvb3BfdmVjX2luZm8sIGdpbXBsZSAqKTsNCj4gPiBAQCAt MjMwNiw2ICsyMzEyLDcgQEAgc3RydWN0IHZlY3RfbG9vcF9mb3JtX2luZm8NCj4gPiAgICB0cmVl IG51bWJlcl9vZl9pdGVyYXRpb25zOw0KPiA+ICAgIHRyZWUgbnVtYmVyX29mX2l0ZXJhdGlvbnNt MTsNCj4gPiAgICB0cmVlIGFzc3VtcHRpb25zOw0KPiA+ICsgIHZlYzxnY29uZCAqPiBjb25kczsN Cj4gPiAgICBnY29uZCAqbG9vcF9jb25kOw0KPiA+ICAgIGdjb25kICppbm5lcl9sb29wX2NvbmQ7 DQo+ID4gIH07DQo+ID4gQEAgLTIzMjYsNiArMjMzMyw5IEBAIGV4dGVybiBib29sIHZlY3Rvcml6 YWJsZV9pbmR1Y3Rpb24NCj4gKGxvb3BfdmVjX2luZm8sDQo+ID4gc3RtdF92ZWNfaW5mbywNCj4g PiAgZXh0ZXJuIGJvb2wgdmVjdF90cmFuc2Zvcm1fcmVkdWN0aW9uIChsb29wX3ZlY19pbmZvLCBz dG10X3ZlY19pbmZvLA0KPiA+ICAJCQkJICAgICAgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwNCj4g PiAgCQkJCSAgICAgIGdpbXBsZSAqKiwgc2xwX3RyZWUpOw0KPiA+ICtleHRlcm4gYm9vbCB2ZWN0 X3RyYW5zZm9ybV9lYXJseV9icmVhayAobG9vcF92ZWNfaW5mbywgc3RtdF92ZWNfaW5mbywNCj4g PiArCQkJCQlnaW1wbGVfc3RtdF9pdGVyYXRvciAqLA0KPiA+ICsJCQkJCWdpbXBsZSAqKiwgc2xw X3RyZWUpOw0KPiA+ICBleHRlcm4gYm9vbCB2ZWN0X3RyYW5zZm9ybV9jeWNsZV9waGkgKGxvb3Bf dmVjX2luZm8sIHN0bXRfdmVjX2luZm8sDQo+ID4gIAkJCQkgICAgICBnaW1wbGUgKiosDQo+ID4g IAkJCQkgICAgICBzbHBfdHJlZSwgc2xwX2luc3RhbmNlKTsNCj4gPiBAQCAtMjMzNSw2ICsyMzQ1 LDExIEBAIGV4dGVybiBib29sIHZlY3Rvcml6YWJsZV9waGkgKHZlY19pbmZvICosDQo+ID4gc3Rt dF92ZWNfaW5mbywgZ2ltcGxlICoqLCBzbHBfdHJlZSwNCj4gPiAgCQkJICAgICAgc3RtdF92ZWN0 b3JfZm9yX2Nvc3QgKik7DQo+ID4gIGV4dGVybiBib29sIHZlY3Rvcml6YWJsZV9yZWN1cnIgKGxv b3BfdmVjX2luZm8sIHN0bXRfdmVjX2luZm8sDQo+ID4gIAkJCQkgIGdpbXBsZSAqKiwgc2xwX3Ry ZWUsIHN0bXRfdmVjdG9yX2Zvcl9jb3N0DQo+ID4gKik7DQo+ID4gK2V4dGVybiBib29sIHZlY3Rv cml6YWJsZV9lYXJseV9leGl0ICh2ZWNfaW5mbyAqLCBzdG10X3ZlY19pbmZvLA0KPiA+ICsJCQkJ ICAgICBzbHBfdHJlZSwgc2xwX2luc3RhbmNlLA0KPiA+ICsJCQkJICAgICBzdG10X3ZlY3Rvcl9m b3JfY29zdCAqKTsNCj4gPiArZXh0ZXJuIHRyZWUgcHJlcGFyZV92ZWNfbWFzayAobG9vcF92ZWNf aW5mbywgdHJlZSwgdHJlZSwNCj4gPiArCQkJICAgICAgdHJlZSwgZ2ltcGxlX3N0bXRfaXRlcmF0 b3IgKik7DQo+ID4gIGV4dGVybiBib29sIHZlY3RfZW11bGF0ZWRfdmVjdG9yX3AgKHRyZWUpOw0K PiA+ICBleHRlcm4gYm9vbCB2ZWN0X2Nhbl92ZWN0b3JpemVfd2l0aG91dF9zaW1kX3AgKHRyZWVf Y29kZSk7DQo+ID4gIGV4dGVybiBib29sIHZlY3RfY2FuX3ZlY3Rvcml6ZV93aXRob3V0X3NpbWRf cCAoY29kZV9oZWxwZXIpOw0KPiA+IGRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0b3JpemVyLmNj IGIvZ2NjL3RyZWUtdmVjdG9yaXplci5jYw0KPiA+IGluZGV4DQo+ID4NCj4gNmVjNDk1MTFkNzRi ZDJlMGU1ZGQ1MTgyM2E2YzQxMTgwZjA4NzE2Yy4uNGFhNDZjN2MwZDgyMzVkM2I3ODNjZTkzMA0K PiA+IGU1ZGYzNDgwZTFiM2VmOSAxMDA2NDQNCj4gPiAtLS0gYS9nY2MvdHJlZS12ZWN0b3JpemVy LmNjDQo+ID4gKysrIGIvZ2NjL3RyZWUtdmVjdG9yaXplci5jYw0KPiA+IEBAIC0xMzgyLDcgKzEz ODIsOSBAQCBwYXNzX3ZlY3Rvcml6ZTo6ZXhlY3V0ZSAoZnVuY3Rpb24gKmZ1bikNCj4gPiAgCSBw cmVkaWNhdGVzIHRoYXQgbmVlZCB0byBiZSBzaGFyZWQgZm9yIG9wdGltYWwgcHJlZGljYXRlIHVz YWdlLg0KPiA+ICAJIEhvd2V2ZXIgcmVhc3NvYyB3aWxsIHJlLW9yZGVyIHRoZW0gYW5kIHByZXZl bnQgQ1NFIGZyb20gd29ya2luZw0KPiA+ICAJIGFzIGl0IHNob3VsZC4gIENTRSBvbmx5IHRoZSBs b29wIGJvZHksIG5vdCB0aGUgZW50cnkuICAqLw0KPiA+IC0gICAgICBiaXRtYXBfc2V0X2JpdCAo ZXhpdF9iYnMsIHNpbmdsZV9leGl0IChsb29wKS0+ZGVzdC0+aW5kZXgpOw0KPiA+ICsgICAgICBh dXRvX3ZlYzxlZGdlPiBleGl0cyA9IGdldF9sb29wX2V4aXRfZWRnZXMgKGxvb3ApOw0KPiA+ICsg ICAgICBmb3IgKGVkZ2UgZXhpdCA6IGV4aXRzKQ0KPiA+ICsJYml0bWFwX3NldF9iaXQgKGV4aXRf YmJzLCBleGl0LT5kZXN0LT5pbmRleCk7DQo+ID4NCj4gPiAgICAgICAgZWRnZSBlbnRyeSA9IEVE R0VfUFJFRCAobG9vcF9wcmVoZWFkZXJfZWRnZSAobG9vcCktPnNyYywgMCk7DQo+ID4gICAgICAg IGRvX3Jwb192biAoZnVuLCBlbnRyeSwgZXhpdF9iYnMpOw0KPiA+DQo+ID4NCj4gPg0KPiA+DQo+ ID4gLS0NCg==