From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 53272AC172E for ; Fri, 23 Feb 2024 14:07:49 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=J2BeZh07STa8GHeXk4vp+XRjj2/3Ns7fEe4PzK7kQhM=; c=relaxed/simple; d=groups.io; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20140610; t=1708697268; v=1; b=SrKu7FUXLllUG0+jrf6lvWMU9yKuK4h9L6yyK4dlSHgeDd3KrbMne78p2Q3yoHv5OWP0dOYm 4ip2qZ4emvcZVICl8MUlo5QIKfZtfXWvqDGK3y8Yy4sbuaGcq5uQXJnt1pV0egL2GTpc60ZhH+E xT7OeHdr/F1/HJFr2+4NN4GE= X-Received: by 127.0.0.2 with SMTP id TG1AYY7687511x3DMWglBvN4; Fri, 23 Feb 2024 06:07:48 -0800 X-Received: from NAM11-DM6-obe.outbound.protection.outlook.com (NAM11-DM6-obe.outbound.protection.outlook.com [40.107.223.62]) by mx.groups.io with SMTP id smtpd.web11.11813.1708697266939013295 for ; Fri, 23 Feb 2024 06:07:47 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aETMzxxi50P1ZpA7/0GShOTnWlMRmlG/u1YolqADGnLmtE/cA7TMC64ZD9Eqcfc5zde8LOT0PaXTLIHTLdGzL0Hdj4WqozCjIXxteVB4rHgNz8oELk0kKMnKR+PphnQLAKKoyPeAamd5WoqECJk+n+sxG9JECdByFuNuD1nZRpVXlywobDpCXiAiJnkYUB16jAgJxSJ1ohmAH1m3QoTwMM0aoI3ismDxIo7CDFSnFTN/0svLrLlzFdhuLCqIQAWYtN/zJ1Hyf1caBWERNCPEqAMQJ9j1RuLaYRwStmfIGx7GavFGZBed3dqb6uSsxrjXbE77nZERNOf9XAPXYkn/qw== 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=ci7Bly11mQXMT2bppuaoorV62isJWpeRjxO0uiU3m34=; b=IJHYC2MMCpLh0WHZM9kvSdPjbnhWp3GyF6975gnzpxAnZ7Ztd8shRcp0ORv81WgcW/DxWlmMe+9PzfyFhuqazjJkWBLUuZ3WKPRNTK9ORSXGh53mL31P7tl0v0FO++Fh3TosOhKz1TYtlxUcVsg0yl9WZmyGzJGwmY897W1IhcWtrw+Pn1qlKqCDQmbAi2Lj6WzHr1zrhNVgR2N4o0N0JBUqGG7/LO4TiEH/hJaQUQwRcEDnWC83xgTH6MoRDJdac9h2pCmtS0pgyKssKdYF2zSPUs79CSwtrdtSDvLQWUfFuMc7hqvTHJblBi8cAsTWWi3wCijDKLcNwdySafbDGQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none X-Received: from MW4PR12MB7031.namprd12.prod.outlook.com (2603:10b6:303:1ef::6) by SN7PR12MB8001.namprd12.prod.outlook.com (2603:10b6:806:340::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7316.27; Fri, 23 Feb 2024 14:07:39 +0000 X-Received: from MW4PR12MB7031.namprd12.prod.outlook.com ([fe80::aa79:3ab0:fbcd:d61b]) by MW4PR12MB7031.namprd12.prod.outlook.com ([fe80::aa79:3ab0:fbcd:d61b%5]) with mapi id 15.20.7316.018; Fri, 23 Feb 2024 14:07:39 +0000 From: "Nickle Wang via groups.io" To: Mike Maslenkin , "devel@edk2.groups.io" CC: Igor Kulchytskyy , Abner Chang , Nick Ramirez Subject: Re: [edk2-devel] [PATCH v2 2/6] RedfishPkg: implement Redfish HTTP protocol Thread-Topic: [edk2-devel] [PATCH v2 2/6] RedfishPkg: implement Redfish HTTP protocol Thread-Index: AQHaZkuGvyZ6S8dclkaty1tyFdt2IbEX82sw Date: Fri, 23 Feb 2024 14:07:39 +0000 Message-ID: References: <20240222091122.644-1-nicklew@nvidia.com> <9A76E719-1472-4E4C-A480-B38C7D305AAF@gmail.com> In-Reply-To: <9A76E719-1472-4E4C-A480-B38C7D305AAF@gmail.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR12MB7031:EE_|SN7PR12MB8001:EE_ x-ms-office365-filtering-correlation-id: f7e1c708-f8a0-4b34-39d6-08dc3478cb47 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: NK64a/aWXz2no+MCYDwZaMRodFklEr5rG3oQo8PHBfrM1f41JH6AbV8sOXBpYSgBXPMD2lkEH89S2XKMGq838fwVrBYowSQnSR78hCKjwVxZosL1ksEljy9wHrKUWbLrsbOqxWT/HQjZEItlPeA6KinMqW1eQZAfboOGPXzeAytxnqNVMGLD8OwHM+c8JvwnRD3Gg4E16uK/tYDjWcqS3A9fFD/0ArRV8l9bgvotkHQ2AXUXLKHpxvWzcAklgazi39CFeNJwoHI29l+zv0NQi+zqGZLBciB2MXmlhipERdj84PchPDEG+TFt/xj9mn6v4Uj/BYM9f6d1Jk4StrkzpktmADDBFDy4cICo1YzqyXESY/sCXvNQQElq13Xtq6Zc1K6XvgziTHLytYZ+MFHNWG5YEMegCYwUDiAdZ0yNhGzL0l4EraHUdDjaJ7FaAFxzZrkcVm+hgbHimEfiW/ixKiBDZ4woD63KrYytSyhc7xYpcRZb1Qu6qPDV/F29C7Tiq/mcGQC+VrSINXu+VJFxxnICHocRHB81ePLNfXwHGJ3YMtsOzg8InqAkOUQzMfspiQNMGAKJ2IjQnd+srp4kJZ0qZFBZGxEsVeJdCuzu90M= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?L0N2RjZoaXJOOTBPU216UWN3dXMzOEk2UzNrbUJ1cW5pUC9QcFBhMmVobWUv?= =?utf-8?B?OGQ2US9kY3ovaDJZeG9id1g5emdXUEpZaVFnSkF6Skt1aks2VnpZbk1peFB0?= =?utf-8?B?NE1kZTRoeHRMbXhHeWNLZ3RxYkdHWEVuZHNWZ2FYdjRoK0ZjQmIzRGZiNDBI?= =?utf-8?B?U3ZRcTV5ZVUzendKUE9MRVA4ZGhjVXdsOXhaR1ZVNHd2MEJRMmk0eCsrWnds?= =?utf-8?B?Mkg4SHR1S3dQdFZ6UGt1SmZjSkRxL3kzR1ZnclpRb0Mrb091SXNFZXdUc0lj?= =?utf-8?B?Q21FeHpCMDUxcVo5Zy9vM1VPSXlkdE5NcGdiZlRBS1FSdXY0bFhVeS9kR3Yz?= =?utf-8?B?SUhDVzZES0Zjd0xxS0U1OFdwV0tCbjgzOEM2ZlVPRHo2UEYwMkVPU3BxTTlE?= =?utf-8?B?ZW1SL3RLckhQR21oL1BCQmNsNjdtWUNrSU5FRnhNTFVwbFFtUVpobU55Qkto?= =?utf-8?B?YThkKzRJaU1RUW5BbVgzUDE5UkVZVWRBRW9BZWltS3BjQlpEV0Z4NTZpUGIv?= =?utf-8?B?UTI2ZmZmTWkwRlVmS0cxRkMzc1hKZVBuVHNBb1Zqb2RhVUhKYzcxaktlckJx?= =?utf-8?B?YmthclFPdUQzQTNIYjhpUXFHRUVsUmlucEY5blVXWGk4azQ1WExkMUZQVHR3?= =?utf-8?B?WEtVbElzOXlXeUhIZHhDaFZxZ2Z5ZHprL3dBSHJpN1hHS096RTQ2VnRFbFYy?= =?utf-8?B?OUI3RWh0eU1oVVVCeXZZV3VsYzRtR29QdmVGSnVlNmJKcTRiWDZ0K1BzNjJS?= =?utf-8?B?cmpWK0RFNXM3Q0Z1VDgrd0tlODFzeXZYMjNyVjJJN3R5dE5mY2xBS2E2blVZ?= =?utf-8?B?bnhCcUNYSE1yZnVRbVBURGtCa2QxT1hSeGhENE5WU1JRSi8reWsrZW8vVkxE?= =?utf-8?B?b2dDNDdpT1RmMVVIUGo2KzI0dTUvalN5d09ZdStuVHQ0ZDBhSGZKYVhUS0lR?= =?utf-8?B?bUlFVlRMdkRidXVUZjVPaG4xM2pHb253MUhTN01aNUh1U3hCaUlNRFhnMmJ4?= =?utf-8?B?VGp4dlFqYUthYWVTOWh1N3N1RG5oZnkycGhwZ2JDbjdmVTlmTkJmeWdmeUdl?= =?utf-8?B?YmFTT1l5VGRBQ1lEMFB3cmdpVWxLanRXRVdKS1dZNE1mRFpiNlVZTG44NzZH?= =?utf-8?B?M2hlMlMzRUxPa3g0Uk92aDNPMDR3NXF5YmdKaVdiUUUvNVlFQ29CckJmcUFi?= =?utf-8?B?L25KMk5wTXhJdGQ4clJsRjk5bExYTmZEQlplMVM0aU9nb21XbVFnWkt5b21s?= =?utf-8?B?Y2Y3WWJiWlV6WXF6Y1lQdVpyVmVOTGRTTFE3Zkw3NkJEY3hQTzBTcDdqWVp0?= =?utf-8?B?SnFxaERsR09BWnBwNHpyRXlqQlZlcHVxTzRBU2dpdDZtZ0hFcU1LTW9keFI0?= =?utf-8?B?YW1iL3FpT3N1MjJiWXpLcGVoV0hBWWFtQTVvdDVETEJLVENKbG9SUW1SRTlY?= =?utf-8?B?dEhLcjJ5N3prdGdabDI5MUJtcmFxNFNqYUhTdmI4a1ZMUnk5Ymp3VVZTdUZX?= =?utf-8?B?ZVJUcEw1bkhFNmUwWFhLa2JLTzk5SGcrYTVyc0JsU0pOck1PQ0VMMXhNMVJs?= =?utf-8?B?RDk1ZmNWOFdxTURPbkFobWtxSmx3VXQrOXREN09kSk1jWDFNdzJiaDM3SzRm?= =?utf-8?B?Wjd0cUNKZlo5emhFTGV2L0F0SmxaM1R1YjZMSm9BT2V6N3JqWktUV2pNcE0r?= =?utf-8?B?VGdhaWtlNkFKcCtXQkFlaFYzTjYxdTRxQ0RQdXR1OHNSd3RlczJaeFBtOXFp?= =?utf-8?B?aWsxbVk1YSsyTEk1c25wWS9CbGg4T3lPL3NRRjNid21jcEpxMlluYjRGMEJM?= =?utf-8?B?R0UrL1ZBS3lIVUxhNUxndjgrSEdPMFFVT3QrcWNLVTRvelZzYmVpUSthcjVL?= =?utf-8?B?TVEySmVvVitkazMwVW9lNzRQNzZleEllYmo4ZU8wTjJ1aEJPaFVFR2VOZXln?= =?utf-8?B?dzR2dGJTL29lWXczVjJyTjZHRVNUYjhCeitmbStNZEpnM2doZmNFVElrdis4?= =?utf-8?B?SzBvMWkzUFVidmZuWXZ4YTJTMnFUYy8xV1hIY0FTNVpKUGM2cEs4UmlQd2kw?= =?utf-8?B?bFBwNG5NUnhaMXFNcGRTeXlpd1NJZW92cjhmeTErbmpaUTBzQXNhUGdXUlAy?= =?utf-8?Q?LZpM=3D?= MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR12MB7031.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f7e1c708-f8a0-4b34-39d6-08dc3478cb47 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Feb 2024 14:07:39.0570 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Uj8tZJB5DreJxDOkt9zAE1v/CLYWs347mQFHpzrMgQ3dtHE3614ncsS5WpK78DQnNcrVTHeGvVeYccEfz6mIGw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB8001 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,nicklew@nvidia.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: OH8w1JCCzIpedGxrLLyElJnxx7686176AA= Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Spam-Flag: yes X-Spam-Level: ************ X-GND-Spam-Score: 190 X-GND-Status: SPAM Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=SrKu7FUX; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}"); dmarc=pass (policy=none) header.from=groups.io; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io VGhhbmtzIGZvciB5b3VyIHJldmlldywgTWlrZS4NCg0KPiAlcy9SZXNyb3VjZS9SZXNvdXJjZS8g dGhpcyBjb21lcyBmcm9tIFJlZGZpc2hDbGllbnQgYXV0b2dlbmVyYXRlZCBmaWxlcy4uLg0KDQpU eXBvcyBhcmUgQWRkcmVzc2VkLiBJIHdpbGwgc2VuZCB2MyBsYXRlci4NCg0KPj4gK09OX0VSUk9S Og0KPj4gKw0KPj4gKyAgUmVsZWFzZVJlZGZpc2hQYXlsb2FkIChOZXdQYXlsb2FkKTsNCj4+ICsN Cj4NCj4gTmV3UGF5bG9hZC0+U2VydmljZSAgaXMgbGVha2VkDQoNCk5ld1BheWxvYWQtPlNlcnZp Y2Ugd2lsbCBiZSByZWxlYXNlZCBpbiBSZWxlYXNlUmVkZmlzaFBheWxvYWQgZnVuY3Rpb24uICBS ZWxlYXNlUmVkZmlzaFNlcnZpY2UoKSB3aWxsIGJlIGNhbGxlZCBpbiBSZWxlYXNlUmVkZmlzaFBh eWxvYWQoKSB3aGVuIFNlcnZpY2UgaXMgbm90IE5VTEwuIFBsZWFzZSBsZXQgbWUga25vdyBpZiBJ IG1pc3VuZGVyc3RhbmQgeW91ciBjb21tZW50Lg0KDQoNCj4+ICsgICAgKCpEc3RIZWFkZXJzKVtJ bmRleF0uRmllbGRWYWx1ZSA9IEFsbG9jYXRlQ29weVBvb2wgKEFzY2lpU3RyU2l6ZSAoU3JjSGVh ZGVyc1tJbmRleF0uRmllbGRWYWx1ZSksIFNyY0hlYWRlcnNbSW5kZXhdLkZpZWxkVmFsdWUpOw0K Pj4gKyAgICBpZiAoKCpEc3RIZWFkZXJzKVtJbmRleF0uRmllbGRWYWx1ZSA9PSBOVUxMKSB7DQo+ PiArICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPg0KPiBMb29rcyBsaWtlIG9y ZXZpb3VzIGFsbG9jYXRpb25zIGxlYWtlZC4NCj4gRGlkbid0IHlvdSB0aGluayB0byBpbXBsZW1l bnQgc210aCBsaWtlIHRoaXMgLi4uLj8NCg0KWWVzLCBJIGNhbiBpbXBsZW1lbnQgQXNjaWlTdHJE dXAoKSBoZXJlLiBCdXQgdGhpcyB3b24ndCBmaXggdGhlIGFsbG9jYXRpb24gbGVha2luZywgcmln aHQ/IFRvIGZpeCBhbGxvY2F0aW9uIGxlYWtpbmcsIG15IGlkZWEgaXMgdG8gY2FsbCBIdHRwRnJl ZUhlYWRlckZpZWxkcygpIGJlZm9yZSByZXR1cm5pbmcgRUZJX09VVF9PRl9SRVNPVVJDRVMuICBI dHRwRnJlZUhlYWRlckZpZWxkcygpIHdpbGwgc2tpcCBOVUxMIEZpZWxkTmFtZSBhbmQgRmllbGRW YWx1ZSBhdXRvbWF0aWNhbGx5LiBEb2VzIHRoaXMgc291bmQgZ29vZCB0byB5b3U/DQoNCkkgdGhp bmsgSSBjb3ZlcmVkIGFsbCB5b3VyIGNvbW1lbnRzLCBidXQgSSBhbSBiYWQgdG8gZmluZCByZXZp ZXcgY29tbWVudCBpbiBlbWFpbC4gSWYgSSBtaXNzZWQgYW55IHJldmlldyBjb21tZW50LCBwbGVh c2Uga2luZGx5IGxldCBtZSBrbm93LiBUaGFua3MhDQoNClJlZ2FyZHMsDQpOaWNrbGUNCg0KPiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNaWtlIE1hc2xlbmtpbiA8bWlrZS5t YXNsZW5raW5AZ21haWwuY29tPg0KPiBTZW50OiBGcmlkYXksIEZlYnJ1YXJ5IDIzLCAyMDI0IDc6 MjkgUE0NCj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBOaWNrbGUgV2FuZyA8bmlja2xld0Bu dmlkaWEuY29tPg0KPiBDYzogSWdvciBLdWxjaHl0c2t5eSA8aWdvcmtAYW1pLmNvbT47IEFibmVy IENoYW5nIDxhYm5lci5jaGFuZ0BhbWQuY29tPjsNCj4gTmljayBSYW1pcmV6IDxucmFtaXJlekBu dmlkaWEuY29tPg0KPiBTdWJqZWN0OiBSZTogW2VkazItZGV2ZWxdIFtQQVRDSCB2MiAyLzZdIFJl ZGZpc2hQa2c6IGltcGxlbWVudCBSZWRmaXNoIEhUVFANCj4gcHJvdG9jb2wNCj4NCj4gRXh0ZXJu YWwgZW1haWw6IFVzZSBjYXV0aW9uIG9wZW5pbmcgbGlua3Mgb3IgYXR0YWNobWVudHMNCj4NCj4N Cj4gSGkgTmlja2xlLA0KPg0KPiAlcy9SZXNyb3VjZS9SZXNvdXJjZS8gdGhpcyBjb21lcyBmcm9t IFJlZGZpc2hDbGllbnQgYXV0b2dlbmVyYXRlZCBmaWxlcy4uLg0KPiB0aGVyZSBhcmUgdGhvdXNh bmRzIG9mICJSZXNyb3VjZSIgdHlwb3MuDQo+DQo+IHBsZWFzZSwgZmluZCBteSBtaW5vciBub3Rl cyBiZWxvdzoNCj4NCj4NCj4gT24gVGh1LCBGZWIgMjIsIDIwMjQgYXQgMTI6MTHigK9QTSBOaWNr bGUgV2FuZyB2aWEgZ3JvdXBzLmlvDQo+IDxuaWNrbGV3PW52aWRpYS5jb21AZ3JvdXBzLmlvPiB3 cm90ZToNCj4gPg0KPiA+IGltcGxlbWVudCBSZWRmaXNoIEhUVFAgcHJvdG9jb2wgZHJpdmVyLg0K PiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTmlja2xlIFdhbmcgPG5pY2tsZXdAbnZpZGlhLmNvbT4N Cj4gPiBDby1hdXRob3JlZC1ieTogSWdvciBLdWxjaHl0c2t5eSA8aWdvcmtAYW1pLmNvbT4NCj4g PiBDYzogQWJuZXIgQ2hhbmcgPGFibmVyLmNoYW5nQGFtZC5jb20+DQo+ID4gQ2M6IElnb3IgS3Vs Y2h5dHNreXkgPGlnb3JrQGFtaS5jb20+DQo+ID4gQ2M6IE5pY2sgUmFtaXJleiA8bnJhbWlyZXpA bnZpZGlhLmNvbT4NCj4gPiAtLS0NCj4gPiBSZWRmaXNoUGtnL1JlZGZpc2hQa2cuZGVjICAgICAg ICAgICAgICAgICAgICAgfCAgICA3ICstDQo+ID4gUmVkZmlzaFBrZy9SZWRmaXNoQ29tcG9uZW50 cy5kc2MuaW5jICAgICAgICAgIHwgICAgMyArLQ0KPiA+IFJlZGZpc2hQa2cvUmVkZmlzaFBrZy5k c2MgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKw0KPiA+IFJlZGZpc2hQa2cvUmVkZmlzaEh0 dHBEeGUvUmVkZmlzaEh0dHBEeGUuaW5mICB8ICAgNzMgKw0KPiA+IFJlZGZpc2hQa2cvUmVkZmlz aEh0dHBEeGUvUmVkZmlzaEh0dHBEYXRhLmggICB8ICAyNTYgKysrKw0KPiA+IFJlZGZpc2hQa2cv UmVkZmlzaEh0dHBEeGUvUmVkZmlzaEh0dHBEeGUuaCAgICB8ICAgNDQgKw0KPiA+IC4uLi9SZWRm aXNoSHR0cER4ZS9SZWRmaXNoSHR0cE9wZXJhdGlvbi5oICAgICB8ICAgNzYgKw0KPiA+IFJlZGZp c2hQa2cvUmVkZmlzaEh0dHBEeGUvUmVkZmlzaEh0dHBEYXRhLmMgICB8ICA2NjcgKysrKysrKysN Cj4gPiBSZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRHhlLmMgICAgfCAxMzQ0 ICsrKysrKysrKysrKysrKysrDQo+ID4gLi4uL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwT3Bl cmF0aW9uLmMgICAgIHwgIDY5MyArKysrKysrKysNCj4gPiBSZWRmaXNoUGtnL1JlZGZpc2guZmRm LmluYyAgICAgICAgICAgICAgICAgICAgfCAgICAzICstDQo+ID4gMTEgZmlsZXMgY2hhbmdlZCwg MzE2NCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQ0KPiA+IGNyZWF0ZSBtb2RlIDEwMDY0 NCBSZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRHhlLmluZg0KPiA+IGNyZWF0 ZSBtb2RlIDEwMDY0NCBSZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRGF0YS5o DQo+ID4gY3JlYXRlIG1vZGUgMTAwNjQ0IFJlZGZpc2hQa2cvUmVkZmlzaEh0dHBEeGUvUmVkZmlz aEh0dHBEeGUuaA0KPiA+IGNyZWF0ZSBtb2RlIDEwMDY0NCBSZWRmaXNoUGtnL1JlZGZpc2hIdHRw RHhlL1JlZGZpc2hIdHRwT3BlcmF0aW9uLmgNCj4gPiBjcmVhdGUgbW9kZSAxMDA2NDQgUmVkZmlz aFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cERhdGEuYw0KPiA+IGNyZWF0ZSBtb2RlIDEw MDY0NCBSZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRHhlLmMNCj4gPiBjcmVh dGUgbW9kZSAxMDA2NDQgUmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cE9wZXJh dGlvbi5jDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9SZWRmaXNoUGtnLmRlYyBi L1JlZGZpc2hQa2cvUmVkZmlzaFBrZy5kZWMNCj4gPiBpbmRleCA5YjQyNGVmZGYzLi4xMTRmOGQy YWQ4IDEwMDY0NA0KPiA+IC0tLSBhL1JlZGZpc2hQa2cvUmVkZmlzaFBrZy5kZWMNCj4gPiArKysg Yi9SZWRmaXNoUGtnL1JlZGZpc2hQa2cuZGVjDQo+ID4gQEAgLTE1Nyw4ICsxNTcsMTEgQEANCj4g PiAgICMgc2V0IHRvIEVGSV9SRVNUX0VYX1BST1RPQ09MLg0KPiA+ICAgIw0KPiA+DQo+IGdFZmlS ZWRmaXNoUGtnVG9rZW5TcGFjZUd1aWQuUGNkUmVkZmlzaFNlbmRSZWNlaXZlVGltZW91dHw1MDAw fFVJTlQzMnwwDQo+IHgwMDAwMTAwOQ0KPiA+IC0gICMjIFRoaXMgaXMgdXNlZCB0byBlbmFibGUg SFRUUCBjb250ZW50IGVuY29kaW5nIG9uIFJlZGZpc2ggY29tbXVuaWNhdGlvbi4NCj4gPiAtDQo+ IGdFZmlSZWRmaXNoUGtnVG9rZW5TcGFjZUd1aWQuUGNkUmVkZmlzaFNlcnZpY2VDb250ZW50RW5j b2Rpbmd8VFJVRXxCT09MRQ0KPiBBTnwweDAwMDAxMDBBDQo+ID4gKyAgIw0KPiA+ICsgICMgVGhp cyBQQ0Qgc3RyaW5nIGlzIGludHJvZHVjZWQgZm9yIHBsYXRmb3JtIGRldmVsb3BlciB0byBzZXQg dGhlIGVuY29kaW5nDQo+IG1ldGhvZCBzdXBwb3J0ZWQgYnkgQk1DIFJlZGZpc2guDQo+ID4gKyAg IyBDdXJyZW50bHkgb25seSAiTm9uZSIgYW5kICJnemlwIiBhcmUgc3VwcG9ydGVkLg0KPiA+ICsg ICMNCj4gPiArDQo+IGdFZmlSZWRmaXNoUGtnVG9rZW5TcGFjZUd1aWQuUGNkUmVkZmlzaFNlcnZp Y2VDb250ZW50RW5jb2Rpbmd8Ik5vbmUifFZPSUQNCj4gKnwweDAwMDAxMDBBDQo+ID4gICAjDQo+ ID4gICAjIFVzZSBiZWxvdyBQQ0RzIHRvIGNvbnRyb2wgUmVkZmhzIEhUVFAgcHJvdG9jb2wuDQo+ ID4gICAjDQo+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cvUmVkZmlzaENvbXBvbmVudHMuZHNj LmluYw0KPiBiL1JlZGZpc2hQa2cvUmVkZmlzaENvbXBvbmVudHMuZHNjLmluYw0KPiA+IGluZGV4 IDQ2NGZmYzg2MDYuLmQ2YzViNzNkN2YgMTAwNjQ0DQo+ID4gLS0tIGEvUmVkZmlzaFBrZy9SZWRm aXNoQ29tcG9uZW50cy5kc2MuaW5jDQo+ID4gKysrIGIvUmVkZmlzaFBrZy9SZWRmaXNoQ29tcG9u ZW50cy5kc2MuaW5jDQo+ID4gQEAgLTcsNyArNyw3IEBADQo+ID4gIyAiUmVkZmlzaERlZmluZXMu ZHNjLmluYyIuDQo+ID4gIw0KPiA+ICMgKEMpIENvcHlyaWdodCAyMDIwLTIwMjEgSGV3bGV0dCBQ YWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+ID4gLSMgQ29weXJpZ2h0IChj KSAyMDIzLCBOVklESUEgQ09SUE9SQVRJT04gJiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLg0KPiA+ICsjIENvcHlyaWdodCAoYykgMjAyMy0yMDI0LCBOVklESUEgQ09SUE9SQVRJT04g JiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLg0KPiA+ICMNCj4gPiAjICAgIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gIw0KPiA+IEBA IC0yOCw0ICsyOCw1IEBADQo+ID4gICBSZWRmaXNoUGtnL1JlZGZpc2hDb25maWdIYW5kbGVyL1Jl ZGZpc2hDb25maWdIYW5kbGVyRHJpdmVyLmluZg0KPiA+ICAgUmVkZmlzaFBrZy9SZWRmaXNoUGxh dGZvcm1Db25maWdEeGUvUmVkZmlzaFBsYXRmb3JtQ29uZmlnRHhlLmluZg0KPiA+ICAgTWRlTW9k dWxlUGtnL1VuaXZlcnNhbC9SZWd1bGFyRXhwcmVzc2lvbkR4ZS9SZWd1bGFyRXhwcmVzc2lvbkR4 ZS5pbmYNCj4gPiArICBSZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRHhlLmlu Zg0KPiA+ICFlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9SZWRmaXNoUGtnL1JlZGZpc2hQa2cuZHNj IGIvUmVkZmlzaFBrZy9SZWRmaXNoUGtnLmRzYw0KPiA+IGluZGV4IDI1ZWQxOTMxODIuLjU4NDll N2NmOWUgMTAwNjQ0DQo+ID4gLS0tIGEvUmVkZmlzaFBrZy9SZWRmaXNoUGtnLmRzYw0KPiA+ICsr KyBiL1JlZGZpc2hQa2cvUmVkZmlzaFBrZy5kc2MNCj4gPiBAQCAtNDUsNiArNDUsOCBAQA0KPiA+ DQo+IFVlZmlIaWlTZXJ2aWNlc0xpYnxNZGVNb2R1bGVQa2cvTGlicmFyeS9VZWZpSGlpU2Vydmlj ZXNMaWIvVWVmaUhpaVNlcnZpY2VzTGliLg0KPiBpbmYNCj4gPg0KPiBSZWRmaXNoUGxhdGZvcm1D cmVkZW50aWFsTGlifFJlZGZpc2hQa2cvTGlicmFyeS9QbGF0Zm9ybUNyZWRlbnRpYWxMaWJOdWxs L1BsYXRmDQo+IG9ybUNyZWRlbnRpYWxMaWJOdWxsLmluZg0KPiA+DQo+IFJlZGZpc2hDb250ZW50 Q29kaW5nTGlifFJlZGZpc2hQa2cvTGlicmFyeS9SZWRmaXNoQ29udGVudENvZGluZ0xpYk51bGwv UmVkZmkNCj4gc2hDb250ZW50Q29kaW5nTGliTnVsbC5pbmYNCj4gPiArDQo+IFJlcG9ydFN0YXR1 c0NvZGVMaWJ8TWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlUmVwb3J0U3RhdHVzQ29kZUxpYi9EeGVS ZXBvDQo+IHJ0U3RhdHVzQ29kZUxpYi5pbmYNCj4gPiArICBTb3J0TGlifE1kZU1vZHVsZVBrZy9M aWJyYXJ5L1VlZmlTb3J0TGliL1VlZmlTb3J0TGliLmluZg0KPiA+DQo+ID4gICAjIE5VTEwgaW5z dGFuY2Ugb2YgSVBNSSByZWxhdGVkIGxpYnJhcnkuDQo+ID4gICBJcG1pTGlifE1kZU1vZHVsZVBr Zy9MaWJyYXJ5L0Jhc2VJcG1pTGliTnVsbC9CYXNlSXBtaUxpYk51bGwuaW5mDQo+ID4gZGlmZiAt LWdpdCBhL1JlZGZpc2hQa2cvUmVkZmlzaEh0dHBEeGUvUmVkZmlzaEh0dHBEeGUuaW5mDQo+IGIv UmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cER4ZS5pbmYNCj4gPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLmM3ZGZkZmZhY2YNCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvUmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0 cER4ZS5pbmYNCj4gPiBAQCAtMCwwICsxLDczIEBADQo+ID4gKyMjIEBmaWxlDQo+ID4gKyMgIFJl ZGZpc2hIdHRwRHhlIGlzIHRoZSBEWEUgZHJpdmVyIHdoaWNoIHByb3ZpZGVzDQo+ID4gKyMgIEVk a0lJUmVkZmlzaEh0dHBQcm90b2NvbCB0byBFREsyIFJlZGZpc2ggRmVhdHVyZQ0KPiA+ICsjICBk cml2ZXJzIGZvciBIVFRQIG9wZXJhdGlvbi4NCj4gPiArIw0KPiA+ICsjICBDb3B5cmlnaHQgKGMp IDIwMjMtMjAyNCwgTlZJRElBIENPUlBPUkFUSU9OICYgQUZGSUxJQVRFUy4gQWxsIHJpZ2h0cw0K PiByZXNlcnZlZC4NCj4gPiArIw0KPiA+ICsjICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KPiA+ICsjDQo+ID4gKyMjDQo+ID4gKw0KPiA+ICtbRGVmaW5lc10N Cj4gPiArICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDEwMDBiDQo+ID4g KyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gUmVkZmlzaEh0dHBEeGUNCj4gPiAr ICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSA4NUFEQjJGMS1EQTkzLTQ3RDQtQUY0 Ri0zRDkyMEQ5QkQyQzANCj4gPiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBE WEVfRFJJVkVSDQo+ID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAgICAgID0gMS4wDQo+ ID4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAgID0gUmVkZmlzaEh0dHBFbnRyeVBv aW50DQo+ID4gKyAgVU5MT0FEX0lNQUdFICAgICAgICAgICAgICAgICAgID0gUmVkZmlzaEh0dHBE cml2ZXJVbmxvYWQNCj4gPiArDQo+ID4gKyMNCj4gPiArIyAgVkFMSURfQVJDSElURUNUVVJFUyAg ICAgICAgICAgPSBJQTMyIFg2NCBBUk0gQUFSQ0g2NCBSSVNDVjY0DQo+ID4gKyMNCj4gPiArDQo+ ID4gK1tTb3VyY2VzXQ0KPiA+ICsgIFJlZGZpc2hIdHRwRGF0YS5jDQo+ID4gKyAgUmVkZmlzaEh0 dHBEYXRhLmgNCj4gPiArICBSZWRmaXNoSHR0cER4ZS5jDQo+ID4gKyAgUmVkZmlzaEh0dHBEeGUu aA0KPiA+ICsgIFJlZGZpc2hIdHRwT3BlcmF0aW9uLmMNCj4gPiArICBSZWRmaXNoSHR0cE9wZXJh dGlvbi5oDQo+ID4gKw0KPiA+ICtbUGFja2FnZXNdDQo+ID4gKyAgTWRlUGtnL01kZVBrZy5kZWMN Cj4gPiArICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiA+ICsgIE5ldHdvcmtQa2cv TmV0d29ya1BrZy5kZWMNCj4gPiArICBSZWRmaXNoUGtnL1JlZGZpc2hQa2cuZGVjDQo+ID4gKw0K PiA+ICtbTGlicmFyeUNsYXNzZXMuQVJNXQ0KPiA+ICsgIEFybVNvZnRGbG9hdExpYg0KPiA+ICsN Cj4gPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiA+ICsgIEJhc2VMaWINCj4gPiArICBCYXNlTWVtb3J5 TGliDQo+ID4gKyAgUmVkZmlzaENvbnRlbnRDb2RpbmdMaWINCj4gPiArICBEZWJ1Z0xpYg0KPiA+ ICsgIEh0dHBMaWINCj4gPiArICBKc29uTGliDQo+ID4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0K PiA+ICsgIFByaW50TGliDQo+ID4gKyAgUmVkZmlzaERlYnVnTGliDQo+ID4gKyAgUmVwb3J0U3Rh dHVzQ29kZUxpYg0KPiA+ICsgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KPiA+ICsgIFVlZmlE cml2ZXJFbnRyeVBvaW50DQo+ID4gKyAgVWVmaUxpYg0KPiA+ICsNCj4gPiArW1Byb3RvY29sc10N Cj4gPiArICBnRWRrSUlSZWRmaXNoSHR0cFByb3RvY29sR3VpZCAgICAgICAgICAgICAjIyBQUk9E VUNFRA0KPiA+ICsgIGdFZGtJSVJlZGZpc2hDcmVkZW50aWFsUHJvdG9jb2xHdWlkICAgICAgICMj IENPTlNVTUVTDQo+ID4gKyAgZ0VmaVJlc3RFeFByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAg ICAgIyMgQ09OU1VFTVMNCj4gPiArDQo+ID4gK1tQY2RdDQo+ID4gKyAgZ0VmaVJlZGZpc2hQa2dU b2tlblNwYWNlR3VpZC5QY2RIdHRwR2V0UmV0cnkNCj4gPiArICBnRWZpUmVkZmlzaFBrZ1Rva2Vu U3BhY2VHdWlkLlBjZEh0dHBQdXRSZXRyeQ0KPiA+ICsgIGdFZmlSZWRmaXNoUGtnVG9rZW5TcGFj ZUd1aWQuUGNkSHR0cFBhdGNoUmV0cnkNCj4gPiArICBnRWZpUmVkZmlzaFBrZ1Rva2VuU3BhY2VH dWlkLlBjZEh0dHBQb3N0UmV0cnkNCj4gPiArICBnRWZpUmVkZmlzaFBrZ1Rva2VuU3BhY2VHdWlk LlBjZEh0dHBEZWxldGVSZXRyeQ0KPiA+ICsgIGdFZmlSZWRmaXNoUGtnVG9rZW5TcGFjZUd1aWQu UGNkSHR0cFJldHJ5V2FpdEluU2Vjb25kDQo+ID4gKyAgZ0VmaVJlZGZpc2hQa2dUb2tlblNwYWNl R3VpZC5QY2RIdHRwQ2FjaGVEaXNhYmxlZA0KPiA+ICsgIGdFZmlSZWRmaXNoUGtnVG9rZW5TcGFj ZUd1aWQuUGNkUmVkZmlzaFNlcnZpY2VDb250ZW50RW5jb2RpbmcNCj4gPiArDQo+ID4gK1tEZXBl eF0NCj4gPiArICBUUlVFDQo+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cvUmVkZmlzaEh0dHBE eGUvUmVkZmlzaEh0dHBEYXRhLmgNCj4gYi9SZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZp c2hIdHRwRGF0YS5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAw MDAwLi42YmU2MTAxNDJlDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1JlZGZpc2hQa2cv UmVkZmlzaEh0dHBEeGUvUmVkZmlzaEh0dHBEYXRhLmgNCj4gPiBAQCAtMCwwICsxLDI1NiBAQA0K PiA+ICsvKiogQGZpbGUNCj4gPiArICBEZWZpbml0aW9ucyBvZiBSZWRmaXNoSHR0cERhdGENCj4g PiArDQo+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLTIwMjQsIE5WSURJQSBDT1JQT1JBVElPTiAm IEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuDQo+ID4gKw0KPiA+ICsgIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8N Cj4gPiArDQo+ID4gKyNpZm5kZWYgRURLSUlfUkVERklTSF9IVFRQX0RBVEFfSF8NCj4gPiArI2Rl ZmluZSBFREtJSV9SRURGSVNIX0hUVFBfREFUQV9IXw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIlJl ZGZpc2hIdHRwRHhlLmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJFREZJU0hfSFRUUF9EUklWRVJf U0lHTkFUVVJFICAgU0lHTkFUVVJFXzMyICgncicsICdmJywgJ2gnLCAncCcpDQo+ID4gKyNkZWZp bmUgUkVERklTSF9IVFRQX0NBQ0hFX1NJR05BVFVSRSAgICBTSUdOQVRVUkVfMzIgKCdyJywgJ2Yn LCAnYycsICdoJykNCj4gPiArI2RlZmluZSBSRURGSVNIX0hUVFBfU0VSVklDRV9TSUdOQVRVUkUg IFNJR05BVFVSRV8zMiAoJ3InLCAnZicsICdzJywgJ3YnKQ0KPiA+ICsjZGVmaW5lIFJFREZJU0hf SFRUUF9QQVlMT0FEX1NJR05BVFVSRSAgU0lHTkFUVVJFXzMyICgncicsICdmJywgJ3AnLCAnbCcp DQo+ID4gKyNkZWZpbmUgUkVERklTSF9IVFRQX0JBU0lDX0FVVEhfU1RSICAgICAiQmFzaWMgIg0K PiA+ICsNCj4gPiArLy8vDQo+ID4gKy8vLyBSRURGSVNIX1NFUlZJQ0VfUFJJVkFURSBkZWZpbml0 aW9uLg0KPiA+ICsvLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIFVJTlQzMiAgICAg ICAgICAgICAgICAgIFNpZ25hdHVyZTsNCj4gPiArICBDSEFSOCAgICAgICAgICAgICAgICAgICAq SG9zdDsNCj4gPiArICBDSEFSOCAgICAgICAgICAgICAgICAgICAqSG9zdE5hbWU7DQo+ID4gKyAg Q0hBUjggICAgICAgICAgICAgICAgICAgKkJhc2ljQXV0aDsNCj4gPiArICBDSEFSOCAgICAgICAg ICAgICAgICAgICAqU2Vzc2lvblRva2VuOw0KPiA+ICsgIEVGSV9SRVNUX0VYX1BST1RPQ09MICAg ICpSZXN0RXg7DQo+ID4gK30gUkVERklTSF9TRVJWSUNFX1BSSVZBVEU7DQo+ID4gKw0KPiA+ICsv Ly8NCj4gPiArLy8vIFJFREZJU0hfUEFZTE9BRF9QUklWQVRFIGRlZmluaXRpb24uDQo+ID4gKy8v Lw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICAgU2lnbmF0dXJlOw0KPiA+ICsgIFJFREZJU0hfU0VSVklDRV9QUklWQVRFICAgICpTZXJ2aWNl Ow0KPiA+ICsgIEVES0lJX0pTT05fVkFMVUUgICAgICAgICAgIEpzb25WYWx1ZTsNCj4gPiArfSBS RURGSVNIX1BBWUxPQURfUFJJVkFURTsNCj4gPiArDQo+ID4gKy8vLw0KPiA+ICsvLy8gRGVmaW5p dGlvbiBvZiBSRURGSVNIX0hUVFBfQ0FDSEVfREFUQQ0KPiA+ICsvLy8NCj4gPiArdHlwZWRlZiBz dHJ1Y3Qgew0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgU2lnbmF0dXJlOw0KPiA+ICsgIExJ U1RfRU5UUlkgICAgICAgICAgTGlzdDsNCj4gPiArICBFRklfU1RSSU5HICAgICAgICAgIFVyaTsN Cj4gPiArICBVSU5UTiAgICAgICAgICAgICAgIEhpdENvdW50Ow0KPiA+ICsgIFJFREZJU0hfUkVT UE9OU0UgICAgKlJlc3BvbnNlOw0KPiA+ICt9IFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBOw0KPiA+ ICsNCj4gPiArI2RlZmluZSBSRURGSVNIX0hUVFBfQ0FDSEVfRlJPTV9MSVNUKGEpICBDUiAoYSwN Cj4gUkVERklTSF9IVFRQX0NBQ0hFX0RBVEEsIExpc3QsIFJFREZJU0hfSFRUUF9DQUNIRV9TSUdO QVRVUkUpDQo+ID4gKw0KPiA+ICsvLy8NCj4gPiArLy8vIERlZmluaXRpb24gb2YgUkVERklTSF9I VFRQX0NBQ0hFX0xJU1QNCj4gPiArLy8vDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBM SVNUX0VOVFJZICAgIEhlYWQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICBDb3VudDsNCj4gPiArICBV SU5UTiAgICAgICAgIENhcGFjaXR5Ow0KPiA+ICt9IFJFREZJU0hfSFRUUF9DQUNIRV9MSVNUOw0K PiA+ICsNCj4gPiArLy8vDQo+ID4gKy8vLyBEZWZpbml0aW9uIG9mIFJFREZJU0hfSFRUUF9SRVRS WV9TRVRUSU5HDQo+ID4gKy8vLw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgVUlOVDE2 ICAgIE1heGltdW1SZXRyeUdldDsNCj4gPiArICBVSU5UMTYgICAgTWF4aW11bVJldHJ5UHV0Ow0K PiA+ICsgIFVJTlQxNiAgICBNYXhpbXVtUmV0cnlQb3N0Ow0KPiA+ICsgIFVJTlQxNiAgICBNYXhp bXVtUmV0cnlQYXRjaDsNCj4gPiArICBVSU5UMTYgICAgTWF4aW11bVJldHJ5RGVsZXRlOw0KPiA+ ICsgIFVJTlROICAgICBSZXRyeVdhaXQ7DQo+ID4gK30gUkVERklTSF9IVFRQX1JFVFJZX1NFVFRJ Tkc7DQo+ID4gKw0KPiA+ICsvLy8NCj4gPiArLy8vIERlZmluaXRpb24gb2YgUkVERklTSF9IVFRQ X0NBQ0hFX1BSSVZBVEUNCj4gPiArLy8vDQo+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiArICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlOw0KPiA+ICsgIEVG SV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUhhbmRsZTsNCj4gPiArICBC T09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGVEaXNhYmxlZDsNCj4gPiAr ICBFRklfRVZFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZ5RXZlbnQ7DQo+ID4g KyAgUkVERklTSF9IVFRQX0NBQ0hFX0xJU1QgICAgICAgICAgICAgIENhY2hlTGlzdDsNCj4gPiAr ICBFREtJSV9SRURGSVNIX0hUVFBfUFJPVE9DT0wgICAgICAgICAgUHJvdG9jb2w7DQo+ID4gKyAg RURLSUlfUkVERklTSF9DUkVERU5USUFMX1BST1RPQ09MICAgICpDcmVkZW50aWFsUHJvdG9jb2w7 DQo+ID4gKyAgUkVERklTSF9IVFRQX1JFVFJZX1NFVFRJTkcgICAgICAgICAgIFJldHJ5U2V0dGlu ZzsNCj4gPiArfSBSRURGSVNIX0hUVFBfQ0FDSEVfUFJJVkFURTsNCj4gPiArDQo+ID4gKyNkZWZp bmUgUkVERklTSF9IVFRQX0NBQ0hFX1BSSVZBVEVfRlJPTV9USElTKGEpICBDUiAoYSwNCj4gUkVE RklTSF9IVFRQX0NBQ0hFX1BSSVZBVEUsIFByb3RvY29sLCBSRURGSVNIX0hUVFBfRFJJVkVSX1NJ R05BVFVSRSkNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFNlYXJjaCBvbiBnaXZlbiBMaXN0SGVh ZGVyIGZvciBnaXZlbiBVUkkgc3RyaW5nLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgIExp c3RIZWFkZXIgIFRhcmdldCBsaXN0IHRvIHNlYXJjaC4NCj4gPiArICBAcGFyYW1baW5dICAgIFVy aSAgICAgICAgIFRhcmdldCBVUkkgdG8gc2VhcmNoLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFJF REZJU0hfSFRUUF9DQUNIRV9EQVRBICAgVGFyZ2V0IGNhY2hlIGRhdGEgaXMgZm91bmQuDQo+ID4g KyAgQHJldHZhbCBOVUxMICAgICAgICAgICAgICAgICAgICAgIE5vIGNhY2hlIGRhdGEgd2l0aCBn aXZlbiBVUkkgaXMgZm91bmQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArUkVERklTSF9IVFRQX0NB Q0hFX0RBVEEgKg0KPiA+ICtGaW5kSHR0cENhY2hlRGF0YSAoDQo+ID4gKyAgSU4gIExJU1RfRU5U UlkgICpMaXN0SGVhZGVyLA0KPiA+ICsgIElOICBFRklfU1RSSU5HICBVcmkNCj4gPiArICApOw0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBjb3B5IHRoZSBkYXRhIGluIFNy Y1Jlc3BvbnNlIHRvIERzdFJlc3BvbnNlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBTcmNS ZXNwb25zZSAgICAgIFNvdXJjZSBSZXNwb25zZSB0byBjb3B5Lg0KPiA+ICsgIEBwYXJhbVtvdXRd IERzdFJlc3BvbnNlICAgICAgRGVzdGluYXRpb24gUmVzcG9uc2UuDQo+ID4gKw0KPiA+ICsgIEBy ZXR2YWwgICAgIEVGSV9TVUNDRVNTICAgICAgUmVzcG9uc2UgaXMgY29waWVkIHN1Y2Nlc3NmdWxs eS4NCj4gPiArICBAcmV0dmFsICAgICBPdGhlcnMgICAgICAgICAgIEVycm9yIG9jY3Vycy4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0NvcHlSZWRmaXNoUmVzcG9uc2Ug KA0KPiA+ICsgIElOICBSRURGSVNIX1JFU1BPTlNFICAqU3JjUmVzcG9uc2UsDQo+ID4gKyAgT1VU IFJFREZJU0hfUkVTUE9OU0UgICpEc3RSZXNwb25zZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICBSZWxlYXNlIGFsbCBjYWNoZSBmcm9tIGxpc3QuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtpbl0gICAgQ2FjaGVMaXN0ICAgIFRoZSBsaXN0IHRvIGJlIHJlbGVhc2VkLg0KPiA+ICsN Cj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIEFsbCBjYWNoZSBkYXRhIGFy ZSByZWxlYXNlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIENhY2hl TGlzdCBpcyBOVUxMLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArUmVs ZWFzZUNhY2hlTGlzdCAoDQo+ID4gKyAgSU4gIFJFREZJU0hfSFRUUF9DQUNIRV9MSVNUICAqQ2Fj aGVMaXN0DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEFkZCBuZXcgY2FjaGUg YnkgZ2l2ZW4gVVJJIGFuZCBIVFRQIHJlc3BvbnNlIHRvIHNwZWNpZnkgTGlzdC4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtW2luXSAgICBMaXN0ICAgICAgVGFyZ2V0IGNhY2hlIGxpc3QgdG8gYWRkLg0K PiA+ICsgIEBwYXJhbVtpbl0gICAgVXJpICAgICAgIFRoZSBVUkkgc3RyaW5nIG1hdGNoaW5nIHRv IHRoaXMgY2FjaGUgZGF0YS4NCj4gPiArICBAcGFyYW1baW5dICAgIFJlc3BvbnNlICBIVFRQIHJl c3BvbnNlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgQ2FjaGUgZGF0YSBp cyBhZGRlZC4NCj4gPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgRmFpbCB0byBhZGQgY2FjaGUg ZGF0YS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0FkZEh0dHBDYWNo ZURhdGEgKA0KPiA+ICsgIElOICBSRURGSVNIX0hUVFBfQ0FDSEVfTElTVCAgKkxpc3QsDQo+ID4g KyAgSU4gIEVGSV9TVFJJTkcgICAgICAgICAgICAgICBVcmksDQo+ID4gKyAgSU4gIFJFREZJU0hf UkVTUE9OU0UgICAgICAgICAqUmVzcG9uc2UNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAgRGVsZXRlIGEgY2FjaGUgZGF0YSBieSBnaXZlbiBjYWNoZSBpbnN0YW5jZS4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgICBMaXN0ICAgIFRhcmdldCBjYWNoZSBsaXN0IHRvIGJlIHJl bW92ZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgICBEYXRhICAgIFBvaW50ZXIgdG8gdGhlIGluc3Rh bmNlIHRvIGJlIGRlbGV0ZWQuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICBD YWNoZSBkYXRhIGlzIHJlbW92ZWQuDQo+ID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgIEZhaWwg dG8gcmVtb3ZlIGNhY2hlIGRhdGEuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0K PiA+ICtEZWxldGVIdHRwQ2FjaGVEYXRhICgNCj4gPiArICBJTiAgUkVERklTSF9IVFRQX0NBQ0hF X0xJU1QgICpMaXN0LA0KPiA+ICsgIElOICBSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSAgKkRhdGEN Cj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiByZWxlYXNl IFJlZGZpc2ggUGF5bG9hZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgUGF5bG9hZCAgICAg ICAgIFBvaW50ZXIgdG8gcGF5bG9hZCBpbnN0YW5jZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAg ICAgRUZJX1NVQ0NFU1MgICAgIFBheWxvYWQgaXMgcmVsZWFzZWQuDQo+ID4gKyAgQHJldHZhbCAg ICAgT3RoZXJzICAgICAgICAgIEVycm9yIG9jY3Vycy4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtF RklfU1RBVFVTDQo+ID4gK1JlbGVhc2VSZWRmaXNoUGF5bG9hZCAoDQo+ID4gKyAgSU4gUkVERklT SF9QQVlMT0FEX1BSSVZBVEUgICpQYXlsb2FkDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIFRoaXMgZnVuY3Rpb24gY3JlYXQgbmV3IHBheWxvYWQuIFNlcnZlciBhbmQgSnNvbk9i aiBhcmUNCj4gPiArICBjb3BpZWQgdG8gbmV3bHkgY3JlYXRlZCBwYXlsb2FkLg0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dICBTZXJ2aWNlICAgICAgICAgIFBvaW50ZXIgdG8gU2VydmljZSBpbnN0 YW5jZS4NCj4gPiArICBAcGFyYW1baW5dICBKc29uT2JqICAgICAgICAgIFBvaW50ZXIgdG8gSlNP TiBvYmplY3QuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgIFJFREZJU0hfUEFZTE9BRF9QUklW QVRFICBOZXdseSBjcmVhdGVkIHBheWxvYWQuDQo+ID4gKyAgQHJldHZhbCAgICAgTlVMTCAgICAg ICAgICAgICBFcnJvciBvY2N1cnMuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArUkVERklTSF9QQVlM T0FEX1BSSVZBVEUgKg0KPiA+ICtDcmVhdGVSZWRmaXNoUGF5bG9hZCAoDQo+ID4gKyAgSU4gUkVE RklTSF9TRVJWSUNFX1BSSVZBVEUgICpTZXJ2aWNlLA0KPiA+ICsgIElOIEVES0lJX0pTT05fVkFM VUUgICAgICAgICBKc29uVmFsdWUNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAg VGhpcyBmdW5jdGlvbiByZWxlYXNlIFJlZGZpc2ggU2VydmljZS4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgU2VydmljZSAgICAgICAgIFBvaW50ZXIgdG8gc2VydmljZSBpbnN0YW5jZS4NCj4g PiArDQo+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFNlcnZpY2UgaXMgcmVsZWFz ZWQuDQo+ID4gKyAgQHJldHZhbCAgICAgT3RoZXJzICAgICAgICAgIEVycm9yIG9jY3Vycy4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK1JlbGVhc2VSZWRmaXNoU2Vydmlj ZSAoDQo+ID4gKyAgSU4gUkVERklTSF9TRVJWSUNFX1BSSVZBVEUgICpTZXJ2aWNlDQo+ID4gKyAg KTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gY3JlYXQgbmV3IHNlcnZp Y2UuIEhvc3QgYW5kIEhvc3ROYW1lIGFyZSBjb3BpZWQgdG8NCj4gPiArICBuZXdseSBjcmVhdGVk IHNlcnZpY2UgaW5zdGFuY2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEhvc3QgICAgICAg ICAgICBIb3N0IHN0cmluZy4NCj4gPiArICBAcGFyYW1baW5dICBIb3N0TmFtZSAgICAgICAgSG9z dG5hbWUgc3RyaW5nLg0KPiA+ICsgIEBwYXJhbVtpbl0gIEJhc2ljQXV0aCAgICAgICBCYXNpYyBB dXRob3JpemF0aW9uIHN0cmluZy4NCj4gPiArICBAcGFyYW1baW5dICBTZXNzaW9uVG9rZW4gICAg U2Vzc2lvbiB0b2tlbiBzdHJpbmcuDQo+ID4gKyAgQHBhcmFtW2luXSAgUmVzdEV4ICAgICAgICAg IFJlc3QgRVggcHJvdG9jb2wgaW5zdGFuY2UuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgIFJF REZJU0hfUEFZTE9BRF9QUklWQVRFICBOZXdseSBjcmVhdGVkIHNlcnZpY2UuDQo+ID4gKyAgQHJl dHZhbCAgICAgTlVMTCAgICAgICAgICAgICBFcnJvciBvY2N1cnMuDQo+ID4gKw0KPiA+ICsqKi8N Cj4gPiArUkVERklTSF9TRVJWSUNFX1BSSVZBVEUgKg0KPiA+ICtDcmVhdGVSZWRmaXNoU2Vydmlj ZSAoDQo+ID4gKyAgSU4gQ0hBUjggICAgICAgICAgICAgICAgICpIb3N0LA0KPiA+ICsgIElOIENI QVI4ICAgICAgICAgICAgICAgICAqSG9zdE5hbWUsDQo+ID4gKyAgSU4gQ0hBUjggICAgICAgICAg ICAgICAgICpCYXNpY0F1dGggT1BUSU9OQUwsDQo+ID4gKyAgSU4gQ0hBUjggICAgICAgICAgICAg ICAgICpTZXNzaW9uVG9rZW4gT1BUSU9OQUwsDQo+ID4gKyAgSU4gRUZJX1JFU1RfRVhfUFJPVE9D T0wgICpSZXN0RXgNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5j dGlvbiB1cGRhdGUgc2Vzc2lvbiB0b2tlbiBpbiBSZWRmaXNoIFNlcnZpY2UuDQo+ID4gKw0KPiA+ ICsgIEBwYXJhbVtpbl0gIFNlcnZpY2UgICAgICAgICBQb2ludGVyIHRvIHNlcnZpY2UgaW5zdGFu Y2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgVG9rZW4gICAgICAgICAgIFNlc3Npb24gdG9rZW4uDQo+ ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNTICAgICBTZXNzaW9uIHRva2VuIGlz IHVwZGF0ZWQuDQo+ID4gKyAgQHJldHZhbCAgICAgT3RoZXJzICAgICAgICAgIEVycm9yIG9jY3Vy cy4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK1VwZGF0ZVNlc3Npb25U b2tlbiAoDQo+ID4gKyAgSU4gUkVERklTSF9TRVJWSUNFX1BSSVZBVEUgICpTZXJ2aWNlLA0KPiA+ ICsgIElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAqVG9rZW4NCj4gPiArICApOw0KPiA+ICsN Cj4gPiArI2VuZGlmDQo+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cvUmVkZmlzaEh0dHBEeGUv UmVkZmlzaEh0dHBEeGUuaA0KPiBiL1JlZGZpc2hQa2cvUmVkZmlzaEh0dHBEeGUvUmVkZmlzaEh0 dHBEeGUuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4u Y2Y2YmE5Y2I0Nw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9SZWRmaXNoUGtnL1JlZGZp c2hIdHRwRHhlL1JlZGZpc2hIdHRwRHhlLmgNCj4gPiBAQCAtMCwwICsxLDQ0IEBADQo+ID4gKy8q KiBAZmlsZQ0KPiA+ICsgIERlZmluaXRpb25zIG9mIFJlZGZpc2hIdHRwRHhlDQo+ID4gKw0KPiA+ ICsgIENvcHlyaWdodCAoYykgMjAyMy0yMDI0LCBOVklESUEgQ09SUE9SQVRJT04gJiBBRkZJTElB VEVTLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLg0KPiA+ICsNCj4gPiArICBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0K PiA+ICsjaWZuZGVmIEVES0lJX1JFREZJU0hfSFRUUF9EWEVfSF8NCj4gPiArI2RlZmluZSBFREtJ SV9SRURGSVNIX0hUVFBfRFhFX0hfDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8VWVmaS5oPg0KPiA+ ICsjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9IdHRwMTEuaD4NCj4gPiArDQo+ID4gKyNpbmNs dWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5o Pg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ID4gKyNpbmNsdWRl IDxMaWJyYXJ5L1JlZGZpc2hDb250ZW50Q29kaW5nTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJy YXJ5L0RlYnVnTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0h0dHBMaWIuaD4NCj4gPiAr I2luY2x1ZGUgPExpYnJhcnkvSnNvbkxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZp Qm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxs b2NhdGlvbkxpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9SZWRmaXNoRGVidWdMaWIuaD4N Cj4gPiArI2luY2x1ZGUgPExpYnJhcnkvUmVwb3J0U3RhdHVzQ29kZUxpYi5oPg0KPiA+ICsjaW5j bHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPFByb3RvY29s L0h0dHAuaD4NCj4gPiArI2luY2x1ZGUgPFByb3RvY29sL0Vka0lJUmVkZmlzaEh0dHBQcm90b2Nv bC5oPg0KPiA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvRWRrSUlSZWRmaXNoQ3JlZGVudGlhbC5oPg0K PiA+ICsjaW5jbHVkZSA8UHJvdG9jb2wvUmVzdEV4Lmg+DQo+ID4gKw0KPiA+ICsjZGVmaW5lIElT X0VNUFRZX1NUUklORyhhKSAgKChhKSA9PSBOVUxMIHx8IChhKVswXSA9PSAnXDAnKQ0KPiA+ICsj ZGVmaW5lIFJFREZJU0hfSFRUUF9DQUNIRV9MSVNUX1NJWkUgICAgICAweDgwDQo+ID4gKyNkZWZp bmUgUkVERklTSF9FUlJPUl9NU0dfTUFYICAgICAgICAgICAgIDEyOA0KPiA+ICsjZGVmaW5lIFJF REZJU0hfREVCVUdfU1RSSU5HX0xFTkdUSCAgICAgICAyMDANCj4gPiArI2RlZmluZSBSRURGSVNI X0hPU1RfTkFNRV9NQVggICAgICAgICAgICAgNjQgICAvLyBJUHY2IG1heGltdW0gbGVuZ3RoICgz OSkNCj4gKyAiaHR0cHM6Ly8iICg4KSArIHBvcnQgbnVtYmVyIChtYXhpbXVtIDUpDQo+ID4gKyNk ZWZpbmUgUkVERklTSF9IVFRQX0VSUk9SX1JFUE9SVCAgICAgICAgICJSZWRmaXNoIEhUVFAgJWEg ZmFpbHVyZSgweCV4KToNCj4gJXMiDQo+ID4gKyNkZWZpbmUgUkVERklTSF9IVFRQX0NBQ0hFX0RF QlVHICAgICAgICAgIERFQlVHX01BTkFHRUFCSUxJVFkNCj4gPiArI2RlZmluZSBSRURGSVNIX0hU VFBfQ0FDSEVfREVCVUdfRFVNUCAgICAgREVCVUdfTUFOQUdFQUJJTElUWQ0KPiA+ICsjZGVmaW5l IFJFREZJU0hfSFRUUF9DQUNIRV9ERUJVR19SRVFVRVNUICBERUJVR19NQU5BR0VBQklMSVRZDQo+ ID4gKw0KPiA+ICsjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9SZWRmaXNoSHR0 cER4ZS9SZWRmaXNoSHR0cE9wZXJhdGlvbi5oDQo+IGIvUmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4 ZS9SZWRmaXNoSHR0cE9wZXJhdGlvbi5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBp bmRleCAwMDAwMDAwMDAwLi5kMmY3Y2Y0YzI3DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBi L1JlZGZpc2hQa2cvUmVkZmlzaEh0dHBEeGUvUmVkZmlzaEh0dHBPcGVyYXRpb24uaA0KPiA+IEBA IC0wLDAgKzEsNzYgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKyAgRGVmaW5pdGlvbnMgb2YgUmVk ZmlzaEh0dHBPcGVyYXRpb24NCj4gPiArDQo+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDI0LCBOVklE SUEgQ09SUE9SQVRJT04gJiBBRkZJTElBVEVTLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsN Cj4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ ICsNCj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIEVES0lJX1JFREZJU0hfSFRUUF9PUEVS QVRJT05fSF8NCj4gPiArI2RlZmluZSBFREtJSV9SRURGSVNIX0hUVFBfT1BFUkFUSU9OX0hfDQo+ ID4gKw0KPiA+ICsjaW5jbHVkZSAiUmVkZmlzaEh0dHBEeGUuaCINCj4gPiArDQo+ID4gKyNkZWZp bmUgUkVERklTSF9DT05URU5UX0xFTkdUSF9TSVpFICAgICAgICAgICAgICA4MA0KPiA+ICsjZGVm aW5lIFJFREZJU0hfQ09NTU9OX0hFQURFUl9TSVpFICAgICAgICAgICAgICAgNQ0KPiA+ICsjZGVm aW5lIFJFREZJU0hfSFRUUF9IRUFERVJfT0RBVEFfVkVSU0lPTl9TVFIgICAgIk9EYXRhLVZlcnNp b24iDQo+ID4gKyNkZWZpbmUgUkVERklTSF9IVFRQX0hFQURFUl9PREFUQV9WRVJTSU9OX1ZBTFVF ICAiNC4wIg0KPiA+ICsjZGVmaW5lIFJFREZJU0hfSFRUUF9IRUFERVJfVVNFUl9BR0VOVF9WQUxV RSAgICAgImVkazJyZWRmaXNoIg0KPiA+ICsjZGVmaW5lIFJFREZJU0hfSFRUUF9IRUFERVJfQ09O TkVDVElPTl9TVFIgICAgICAgIkNvbm5lY3Rpb24iDQo+ID4gKyNkZWZpbmUgUkVERklTSF9IVFRQ X0hFQURFUl9DT05ORUNUSU9OX1ZBTFVFICAgICAiS2VlcC1BbGl2ZSINCj4gPiArI2RlZmluZSBS RURGSVNIX0hUVFBfQ09OVEVOVF9FTkNPRElOR19OT05FICAgICAgICJOb25lIg0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBmcmVlIHJlc291cmNlcyBpbiBSZXF1ZXN0LiBS ZXF1ZXN0IGlzIG5vIGxvbmdlciBhdmFpbGFibGUNCj4gPiArICBhZnRlciB0aGlzIGZ1bmN0aW9u IHJldHVybnMgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBSZXF1ZXN0 ICAgICAgSFRUUCByZXF1ZXN0IHRvIGJlIHJlbGVhc2VkLg0KPiA+ICsNCj4gPiArICBAcmV0dmFs ICAgICBFRklfU1VDQ0VTUyAgICAgUmVzcm91Y2UgaXMgcmVsZWFzZWQgc3VjY2Vzc2Z1bGx5Lg0K PiA+ICsgIEByZXR2YWwgICAgIE90aGVycyAgICAgICAgICBFcnJvcnMgb2NjdXIuDQo+ID4gKw0K PiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtSZWxlYXNlUmVkZmlzaFJlcXVlc3QgKA0K PiA+ICsgIElOICBSRURGSVNIX1JFUVVFU1QgICpSZXF1ZXN0DQo+ID4gKyAgKTsNCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gZnJlZSByZXNvdXJjZXMgaW4gZ2l2ZW4gUmVz cG9uc2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFJlc3BvbnNlICAgICBIVFRQIHJlc3Bv bnNlIHRvIGJlIHJlbGVhc2VkLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VT UyAgICAgUmVzcm91Y2UgaXMgcmVsZWFzZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwg ICAgIE90aGVycyAgICAgICAgICBFcnJvcnMgb2NjdXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr RUZJX1NUQVRVUw0KPiA+ICtSZWxlYXNlUmVkZmlzaFJlc3BvbnNlICgNCj4gPiArICBJTiAgUkVE RklTSF9SRVNQT05TRSAgKlJlc3BvbnNlDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFRoaXMgZnVuY3Rpb24gc2VuZCBSZWRmaXNoIHJlcXVlc3QgdG8gUmVkZmlzaCBzZXJ2aWNl IGJ5IGNhbGxpbmcNCj4gPiArICBSZXN0IEV4IHByb3RvY29sLg0KPiA+ICsNCj4gPiArICBAcGFy YW1baW5dICAgU2VydmljZSAgICAgICBQb2ludGVyIHRvIFJlZGZpc2ggc2VydmljZS4NCj4gPiAr ICBAcGFyYW1baW5dICAgVXJpICAgICAgICAgICBVcmkgb2YgUmVkZmlzaCBzZXJ2aWNlLg0KPiA+ ICsgIEBwYXJhbVtpbl0gICBNZXRob2QgICAgICAgIEhUVFAgbWV0aG9kLg0KPiA+ICsgIEBwYXJh bVtpbl0gICBSZXF1ZXN0ICAgICBSZXF1ZXN0IGRhdGEuIFRoaXMgaXMgb3B0aW9uYWwuDQo+ID4g KyAgQHBhcmFtW291dF0gIFJlc3BvbnNlICAgIFJlZGZpc2ggcmVzcG9uc2UgZGF0YS4NCj4gPiAr DQo+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFJlcXVlc3QgaXMgc2VudCBhbmQg cmVjZWl2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgICAgIE90aGVycyAgICAgICAg ICBFcnJvcnMgb2NjdXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtI dHRwU2VuZFJlY2VpdmUgKA0KPiA+ICsgIElOICBSRURGSVNIX1NFUlZJQ0UgICBTZXJ2aWNlLA0K PiA+ICsgIElOICBFRklfU1RSSU5HICAgICAgICBVcmksDQo+ID4gKyAgSU4gIEVGSV9IVFRQX01F VEhPRCAgIE1ldGhvZCwNCj4gPiArICBJTiAgUkVERklTSF9SRVFVRVNUICAgKlJlcXVlc3QgIE9Q VElPTkFMLA0KPiA+ICsgIE9VVCBSRURGSVNIX1JFU1BPTlNFICAqUmVzcG9uc2UNCj4gPiArICAp Ow0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4gZGlmZiAtLWdpdCBhL1JlZGZpc2hQa2cvUmVkZmlz aEh0dHBEeGUvUmVkZmlzaEh0dHBEYXRhLmMNCj4gYi9SZWRmaXNoUGtnL1JlZGZpc2hIdHRwRHhl L1JlZGZpc2hIdHRwRGF0YS5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAw MDAwMDAwMDAwLi5iZjk1ZTlmOGQ0DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1JlZGZp c2hQa2cvUmVkZmlzaEh0dHBEeGUvUmVkZmlzaEh0dHBEYXRhLmMNCj4gPiBAQCAtMCwwICsxLDY2 NyBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBSZWRmaXNoSHR0cERhdGEgaGFuZGxlcyBpbnRl cm5hbCBkYXRhIHRvIHN1cHBvcnQgUmVkZmlzaCBIVFRQIHByb3RvY29sLg0KPiA+ICsNCj4gPiAr ICBDb3B5cmlnaHQgKGMpIDIwMjMtMjAyNCwgTlZJRElBIENPUlBPUkFUSU9OICYgQUZGSUxJQVRF Uy4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC4NCj4gPiArDQo+ID4gKyAgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsNCj4g PiArI2luY2x1ZGUgIlJlZGZpc2hIdHRwRGF0YS5oIg0KPiA+ICsjaW5jbHVkZSAiUmVkZmlzaEh0 dHBPcGVyYXRpb24uaCINCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gdXBk YXRlIHNlc3Npb24gdG9rZW4gaW4gUmVkZmlzaCBTZXJ2aWNlLg0KPiA+ICsNCj4gPiArICBAcGFy YW1baW5dICBTZXJ2aWNlICAgICAgICAgUG9pbnRlciB0byBzZXJ2aWNlIGluc3RhbmNlLg0KPiA+ ICsgIEBwYXJhbVtpbl0gIFRva2VuICAgICAgICAgICBTZXNzaW9uIHRva2VuLg0KPiA+ICsNCj4g PiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VTUyAgICAgU2Vzc2lvbiB0b2tlbiBpcyB1cGRhdGVk Lg0KPiA+ICsgIEByZXR2YWwgICAgIE90aGVycyAgICAgICAgICBFcnJvciBvY2N1cnMuDQo+ID4g Kw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtVcGRhdGVTZXNzaW9uVG9rZW4gKA0K PiA+ICsgIElOIFJFREZJU0hfU0VSVklDRV9QUklWQVRFICAqU2VydmljZSwNCj4gPiArICBJTiBD SEFSOCAgICAgICAgICAgICAgICAgICAgKlRva2VuDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAg aWYgKChTZXJ2aWNlID09IE5VTEwpIHx8IElTX0VNUFRZX1NUUklORyAoVG9rZW4pKSB7DQo+ID4g KyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgaWYgKFNlcnZpY2UtPlNlc3Npb25Ub2tlbiAhPSBOVUxMKSB7DQo+ID4gKyAgICBGcmVlUG9v bCAoU2VydmljZS0+U2Vzc2lvblRva2VuKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFNlcnZp Y2UtPlNlc3Npb25Ub2tlbiA9IEFsbG9jYXRlQ29weVBvb2wgKEFzY2lpU3RyU2l6ZSAoVG9rZW4p LCBUb2tlbik7DQo+ID4gKyAgaWYgKFNlcnZpY2UtPlNlc3Npb25Ub2tlbiA9PSBOVUxMKSB7DQo+ ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IFRoaXMgZnVuY3Rpb24gcmVsZWFzZSBSZWRmaXNoIFNlcnZpY2UuDQo+ID4gKw0KPiA+ICsgIEBw YXJhbVtpbl0gIFNlcnZpY2UgICAgICAgICBQb2ludGVyIHRvIHNlcnZpY2UgaW5zdGFuY2UuDQo+ ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNTICAgICBTZXJ2aWNlIGlzIHJlbGVh c2VkLg0KPiA+ICsgIEByZXR2YWwgICAgIE90aGVycyAgICAgICAgICBFcnJvciBvY2N1cnMuDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtSZWxlYXNlUmVkZmlzaFNlcnZp Y2UgKA0KPiA+ICsgIElOIFJFREZJU0hfU0VSVklDRV9QUklWQVRFICAqU2VydmljZQ0KPiA+ICsg ICkNCj4gPiArew0KPiA+ICsgIGlmIChTZXJ2aWNlID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoU2Vy dmljZS0+SG9zdCAhPSBOVUxMKSB7DQo+ID4gKyAgICBGcmVlUG9vbCAoU2VydmljZS0+SG9zdCk7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoU2VydmljZS0+SG9zdE5hbWUgIT0gTlVMTCkg ew0KPiA+ICsgICAgRnJlZVBvb2wgKFNlcnZpY2UtPkhvc3ROYW1lKTsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIGlmIChTZXJ2aWNlLT5CYXNpY0F1dGggIT0gTlVMTCkgew0KPiA+ICsgICAgWmVy b01lbSAoU2VydmljZS0+QmFzaWNBdXRoLCBBc2NpaVN0clNpemUgKFNlcnZpY2UtPkJhc2ljQXV0 aCkpOw0KPiA+ICsgICAgRnJlZVBvb2wgKFNlcnZpY2UtPkJhc2ljQXV0aCk7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBpZiAoU2VydmljZS0+U2Vzc2lvblRva2VuICE9IE5VTEwpIHsNCj4gPiAr ICAgIFplcm9NZW0gKFNlcnZpY2UtPlNlc3Npb25Ub2tlbiwgQXNjaWlTdHJTaXplIChTZXJ2aWNl LT5TZXNzaW9uVG9rZW4pKTsNCj4gPiArICAgIEZyZWVQb29sIChTZXJ2aWNlLT5TZXNzaW9uVG9r ZW4pOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgRnJlZVBvb2wgKFNlcnZpY2UpOw0KPiA+ICsN Cj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFRoaXMgZnVuY3Rpb24gY3JlYXQgbmV3IHNlcnZpY2UuIEhvc3QgYW5kIEhvc3ROYW1lIGFy ZSBjb3BpZWQgdG8NCj4gPiArICBuZXdseSBjcmVhdGVkIHNlcnZpY2UgaW5zdGFuY2UuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbVtpbl0gIEhvc3QgICAgICAgICAgICBIb3N0IHN0cmluZy4NCj4gPiAr ICBAcGFyYW1baW5dICBIb3N0TmFtZSAgICAgICAgSG9zdG5hbWUgc3RyaW5nLg0KPiA+ICsgIEBw YXJhbVtpbl0gIEJhc2ljQXV0aCAgICAgICBCYXNpYyBBdXRob3JpemF0aW9uIHN0cmluZy4NCj4g PiArICBAcGFyYW1baW5dICBTZXNzaW9uVG9rZW4gICAgU2Vzc2lvbiB0b2tlbiBzdHJpbmcuDQo+ ID4gKyAgQHBhcmFtW2luXSAgUmVzdEV4ICAgICAgICAgIFJlc3QgRVggcHJvdG9jb2wgaW5zdGFu Y2UuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgIFJFREZJU0hfUEFZTE9BRF9QUklWQVRFICBO ZXdseSBjcmVhdGVkIHNlcnZpY2UuDQo+ID4gKyAgQHJldHZhbCAgICAgTlVMTCAgICAgICAgICAg ICBFcnJvciBvY2N1cnMuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArUkVERklTSF9TRVJWSUNFX1BS SVZBVEUgKg0KPiA+ICtDcmVhdGVSZWRmaXNoU2VydmljZSAoDQo+ID4gKyAgSU4gQ0hBUjggICAg ICAgICAgICAgICAgICpIb3N0LA0KPiA+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAgICAqSG9z dE5hbWUsDQo+ID4gKyAgSU4gQ0hBUjggICAgICAgICAgICAgICAgICpCYXNpY0F1dGggT1BUSU9O QUwsDQo+ID4gKyAgSU4gQ0hBUjggICAgICAgICAgICAgICAgICpTZXNzaW9uVG9rZW4gT1BUSU9O QUwsDQo+ID4gKyAgSU4gRUZJX1JFU1RfRVhfUFJPVE9DT0wgICpSZXN0RXgNCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICBSRURGSVNIX1NFUlZJQ0VfUFJJVkFURSAgKk5ld1NlcnZpY2U7DQo+ID4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgIEF1dGhTdHJTaXplOw0KPiA+ICsNCj4gPiArICBp ZiAoSVNfRU1QVFlfU1RSSU5HIChIb3N0KSB8fCBJU19FTVBUWV9TVFJJTkcgKEhvc3ROYW1lKSB8 fCAoUmVzdEV4ID09DQo+IE5VTEwpKSB7DQo+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIE5ld1NlcnZpY2UgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKFJF REZJU0hfU0VSVklDRV9QUklWQVRFKSk7DQo+ID4gKyAgaWYgKE5ld1NlcnZpY2UgPT0gTlVMTCkg ew0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBOZXdTZXJ2 aWNlLT5TaWduYXR1cmUgPSBSRURGSVNIX0hUVFBfU0VSVklDRV9TSUdOQVRVUkU7DQo+ID4gKyAg TmV3U2VydmljZS0+SG9zdCAgICAgID0gQWxsb2NhdGVDb3B5UG9vbCAoQXNjaWlTdHJTaXplIChI b3N0KSwgSG9zdCk7DQo+ID4gKyAgaWYgKE5ld1NlcnZpY2UtPkhvc3QgPT0gTlVMTCkgew0KPiA+ ICsgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIE5ld1NlcnZpY2Ut Pkhvc3ROYW1lID0gQWxsb2NhdGVDb3B5UG9vbCAoQXNjaWlTdHJTaXplIChIb3N0TmFtZSksDQo+ IEhvc3ROYW1lKTsNCj4gPiArICBpZiAoTmV3U2VydmljZS0+SG9zdE5hbWUgPT0gTlVMTCkgew0K PiA+ICsgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICghSVNf RU1QVFlfU1RSSU5HIChCYXNpY0F1dGgpKSB7DQo+ID4gKyAgICBBdXRoU3RyU2l6ZSAgICAgICAg ICAgPSBBc2NpaVN0clNpemUgKEJhc2ljQXV0aCkgKyBBc2NpaVN0ckxlbg0KPiAoUkVERklTSF9I VFRQX0JBU0lDX0FVVEhfU1RSKTsNCj4gPiArICAgIE5ld1NlcnZpY2UtPkJhc2ljQXV0aCA9IEFs bG9jYXRlWmVyb1Bvb2wgKEF1dGhTdHJTaXplKTsNCj4gPiArICAgIGlmIChOZXdTZXJ2aWNlLT5C YXNpY0F1dGggPT0gTlVMTCkgew0KPiA+ICsgICAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ICsgICAg fQ0KPiA+ICsNCj4gPiArICAgIEFzY2lpU1ByaW50IChOZXdTZXJ2aWNlLT5CYXNpY0F1dGgsIEF1 dGhTdHJTaXplLCAiJWElYSIsDQo+IFJFREZJU0hfSFRUUF9CQVNJQ19BVVRIX1NUUiwgQmFzaWNB dXRoKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICghSVNfRU1QVFlfU1RSSU5HIChTZXNz aW9uVG9rZW4pKSB7DQo+ID4gKyAgICBOZXdTZXJ2aWNlLT5TZXNzaW9uVG9rZW4gPSBBbGxvY2F0 ZUNvcHlQb29sIChBc2NpaVN0clNpemUgKFNlc3Npb25Ub2tlbiksDQo+IFNlc3Npb25Ub2tlbik7 DQo+ID4gKyAgICBpZiAoTmV3U2VydmljZS0+U2Vzc2lvblRva2VuID09IE5VTEwpIHsNCj4gPiAr ICAgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IE5ld1NlcnZpY2UtPlJlc3RFeCA9IFJlc3RFeDsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIE5ld1Nl cnZpY2U7DQo+ID4gKw0KPiA+ICtPTl9FUlJPUjoNCj4gPiArDQo+ID4gKyAgUmVsZWFzZVJlZGZp c2hTZXJ2aWNlIChOZXdTZXJ2aWNlKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIE5VTEw7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gcmVsZWFzZSBSZWRmaXNo IFBheWxvYWQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFBheWxvYWQgICAgICAgICBQb2lu dGVyIHRvIHBheWxvYWQgaW5zdGFuY2UuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgIEVGSV9T VUNDRVNTICAgICBQYXlsb2FkIGlzIHJlbGVhc2VkLg0KPiA+ICsgIEByZXR2YWwgICAgIE90aGVy cyAgICAgICAgICBFcnJvciBvY2N1cnMuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRV Uw0KPiA+ICtSZWxlYXNlUmVkZmlzaFBheWxvYWQgKA0KPiA+ICsgIElOIFJFREZJU0hfUEFZTE9B RF9QUklWQVRFICAqUGF5bG9hZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIGlmIChQYXlsb2Fk ID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoUGF5bG9hZC0+U2VydmljZSAhPSBOVUxMKSB7DQo+ID4g KyAgICBSZWxlYXNlUmVkZmlzaFNlcnZpY2UgKFBheWxvYWQtPlNlcnZpY2UpOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgaWYgKFBheWxvYWQtPkpzb25WYWx1ZSAhPSBOVUxMKSB7DQo+ID4gKyAg ICBKc29uVmFsdWVGcmVlIChQYXlsb2FkLT5Kc29uVmFsdWUpOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgRnJlZVBvb2wgKFBheWxvYWQpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gY3JlYXQg bmV3IHBheWxvYWQuIFNlcnZlciBhbmQgSnNvbk9iaiBhcmUNCj4gPiArICBjb3BpZWQgdG8gbmV3 bHkgY3JlYXRlZCBwYXlsb2FkLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBTZXJ2aWNlICAg ICAgICAgIFBvaW50ZXIgdG8gU2VydmljZSBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW1baW5dICBK c29uVmFsdWUgICAgICAgIFBvaW50ZXIgdG8gSlNPTiB2YWx1ZS4NCj4gPiArDQo+ID4gKyAgQHJl dHZhbCAgICAgUkVERklTSF9QQVlMT0FEX1BSSVZBVEUgIE5ld2x5IGNyZWF0ZWQgcGF5bG9hZC4N Cj4gPiArICBAcmV0dmFsICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgRXJyb3Igb2NjdXJz Lg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1JFREZJU0hfUEFZTE9BRF9QUklWQVRFICoNCj4gPiAr Q3JlYXRlUmVkZmlzaFBheWxvYWQgKA0KPiA+ICsgIElOIFJFREZJU0hfU0VSVklDRV9QUklWQVRF ICAqU2VydmljZSwNCj4gPiArICBJTiBFREtJSV9KU09OX1ZBTFVFICAgICAgICAgSnNvblZhbHVl DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgUkVERklTSF9QQVlMT0FEX1BSSVZBVEUgICpOZXdQ YXlsb2FkOw0KPiA+ICsNCj4gPiArICBpZiAoKFNlcnZpY2UgPT0gTlVMTCkgfHwgKEpzb25WYWx1 ZSA9PSBOVUxMKSkgew0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICBOZXdQYXlsb2FkID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChSRURGSVNIX1BBWUxP QURfUFJJVkFURSkpOw0KPiA+ICsgIGlmIChOZXdQYXlsb2FkID09IE5VTEwpIHsNCj4gPiArICAg IHJldHVybiBOVUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgTmV3UGF5bG9hZC0+U2lnbmF0 dXJlID0gUkVERklTSF9IVFRQX1BBWUxPQURfU0lHTkFUVVJFOw0KPiA+ICsgIE5ld1BheWxvYWQt PlNlcnZpY2UgICA9IENyZWF0ZVJlZGZpc2hTZXJ2aWNlIChTZXJ2aWNlLT5Ib3N0LCBTZXJ2aWNl LQ0KPiA+SG9zdE5hbWUsIFNlcnZpY2UtPkJhc2ljQXV0aCwgU2VydmljZS0+U2Vzc2lvblRva2Vu LCBTZXJ2aWNlLT5SZXN0RXgpOw0KPiA+ICsgIGlmIChOZXdQYXlsb2FkLT5TZXJ2aWNlID09IE5V TEwpIHsNCj4gPiArICAgIGdvdG8gT05fRVJST1I7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBO ZXdQYXlsb2FkLT5Kc29uVmFsdWUgPSBKc29uVmFsdWVDbG9uZSAoSnNvblZhbHVlKTsNCj4gPiAr ICBpZiAoTmV3UGF5bG9hZC0+SnNvblZhbHVlID09IE5VTEwpIHsNCj4gPiArICAgIGdvdG8gT05f RVJST1I7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gTmV3UGF5bG9hZDsNCj4gPiAr DQo+ID4gK09OX0VSUk9SOg0KPiA+ICsNCj4gPiArICBSZWxlYXNlUmVkZmlzaFBheWxvYWQgKE5l d1BheWxvYWQpOw0KPiA+ICsNCj4NCj4NCj4gTmV3UGF5bG9hZC0+U2VydmljZSAgaXMgbGVha2Vk DQo+DQo+DQo+ID4gKyAgcmV0dXJuIE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFRoaXMgZnVuY3Rpb24gY29weSB0aGUgZGF0YSBpbiBTcmNSZXNwb25zZSB0byBEc3RSZXNw b25zZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgU3JjUmVzcG9uc2UgICAgICBTb3VyY2Ug UmVzcG9uc2UgdG8gY29weS4NCj4gPiArICBAcGFyYW1bb3V0XSBEc3RSZXNwb25zZSAgICAgIERl c3RpbmF0aW9uIFJlc3BvbnNlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VT UyAgICAgIFJlc3BvbnNlIGlzIGNvcGllZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCAg ICAgT3RoZXJzICAgICAgICAgICBFcnJvciBvY2N1cnMuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr RUZJX1NUQVRVUw0KPiA+ICtDb3B5UmVkZmlzaFJlc3BvbnNlICgNCj4gPiArICBJTiAgUkVERklT SF9SRVNQT05TRSAgKlNyY1Jlc3BvbnNlLA0KPiA+ICsgIE9VVCBSRURGSVNIX1JFU1BPTlNFICAq RHN0UmVzcG9uc2UNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBSRURGSVNIX1BBWUxPQURfUFJJ VkFURSAgKlBheWxvYWQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgIEluZGV4Ow0K PiA+ICsNCj4gPiArICBpZiAoKFNyY1Jlc3BvbnNlID09IE5VTEwpIHx8IChEc3RSZXNwb25zZSA9 PSBOVUxMKSkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIGlmIChTcmNSZXNwb25zZSA9PSBEc3RSZXNwb25zZSkgew0KPiA+ ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4g PiArICAvLyBTdGF0dXMgY29kZQ0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKFNyY1Jlc3BvbnNlLT5T dGF0dXNDb2RlICE9IE5VTEwpIHsNCj4gPiArICAgIERzdFJlc3BvbnNlLT5TdGF0dXNDb2RlID0g QWxsb2NhdGVDb3B5UG9vbCAoc2l6ZW9mDQo+IChFRklfSFRUUF9TVEFUVVNfQ09ERSksIFNyY1Jl c3BvbnNlLT5TdGF0dXNDb2RlKTsNCj4gPiArICAgIGlmIChEc3RSZXNwb25zZS0+U3RhdHVzQ29k ZSA9PSBOVUxMKSB7DQo+ID4gKyAgICAgIGdvdG8gT05fRVJST1I7DQo+ID4gKyAgICB9DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEhlYWRlcg0KPiA+ICsgIC8vDQo+ID4g KyAgaWYgKChTcmNSZXNwb25zZS0+SGVhZGVyQ291bnQgPiAwKSAmJiAoU3JjUmVzcG9uc2UtPkhl YWRlcnMgIT0gTlVMTCkpIHsNCj4gPiArICAgIERzdFJlc3BvbnNlLT5IZWFkZXJDb3VudCA9IDA7 DQo+ID4gKyAgICBEc3RSZXNwb25zZS0+SGVhZGVycyAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChz aXplb2YgKEVGSV9IVFRQX0hFQURFUikgKg0KPiBTcmNSZXNwb25zZS0+SGVhZGVyQ291bnQpOw0K PiA+ICsgICAgaWYgKERzdFJlc3BvbnNlLT5IZWFkZXJzID09IE5VTEwpIHsNCj4gPiArICAgICAg Z290byBPTl9FUlJPUjsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCBTcmNSZXNwb25zZS0+SGVhZGVyQ291bnQ7IEluZGV4KyspIHsNCj4gPiArICAg ICAgRHN0UmVzcG9uc2UtPkhlYWRlcnNbSW5kZXhdLkZpZWxkTmFtZSA9IEFsbG9jYXRlQ29weVBv b2wgKEFzY2lpU3RyU2l6ZQ0KPiAoU3JjUmVzcG9uc2UtPkhlYWRlcnNbSW5kZXhdLkZpZWxkTmFt ZSksIFNyY1Jlc3BvbnNlLQ0KPiA+SGVhZGVyc1tJbmRleF0uRmllbGROYW1lKTsNCj4gPiArICAg ICAgaWYgKERzdFJlc3BvbnNlLT5IZWFkZXJzW0luZGV4XS5GaWVsZE5hbWUgPT0gTlVMTCkgew0K PiA+ICsgICAgICAgIGdvdG8gT05fRVJST1I7DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgIERzdFJlc3BvbnNlLT5IZWFkZXJzW0luZGV4XS5GaWVsZFZhbHVlID0gQWxsb2NhdGVDb3B5 UG9vbCAoQXNjaWlTdHJTaXplDQo+IChTcmNSZXNwb25zZS0+SGVhZGVyc1tJbmRleF0uRmllbGRW YWx1ZSksIFNyY1Jlc3BvbnNlLQ0KPiA+SGVhZGVyc1tJbmRleF0uRmllbGRWYWx1ZSk7DQo+ID4g KyAgICAgIGlmIChEc3RSZXNwb25zZS0+SGVhZGVyc1tJbmRleF0uRmllbGRWYWx1ZSA9PSBOVUxM KSB7DQo+ID4gKyAgICAgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4g PiArICAgICAgRHN0UmVzcG9uc2UtPkhlYWRlckNvdW50ICs9IDE7DQo+ID4gKyAgICB9DQo+ID4g KyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFBheWxvYWQNCj4gPiArICAvLw0KPiA+ ICsgIGlmIChTcmNSZXNwb25zZS0+UGF5bG9hZCAhPSBOVUxMKSB7DQo+ID4gKyAgICBQYXlsb2Fk ID0gKFJFREZJU0hfUEFZTE9BRF9QUklWQVRFICopU3JjUmVzcG9uc2UtPlBheWxvYWQ7DQo+ID4g KyAgICBpZiAoUGF5bG9hZC0+U2lnbmF0dXJlICE9IFJFREZJU0hfSFRUUF9QQVlMT0FEX1NJR05B VFVSRSkgew0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IHNpZ25hdHVyZSBj aGVjayBmYWlsdXJlXG4iLCBfX2Z1bmNfXykpOw0KPiA+ICsgICAgICBnb3RvIE9OX0VSUk9SOw0K PiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIERzdFJlc3BvbnNlLT5QYXlsb2FkID0gQ3JlYXRl UmVkZmlzaFBheWxvYWQgKFBheWxvYWQtPlNlcnZpY2UsIFBheWxvYWQtDQo+ID5Kc29uVmFsdWUp Ow0KPiA+ICsgICAgaWYgKERzdFJlc3BvbnNlLT5QYXlsb2FkICA9PSBOVUxMKSB7DQo+ID4gKyAg ICAgIGdvdG8gT05fRVJST1I7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBy ZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gKw0KPiA+ICtPTl9FUlJPUjoNCj4gPiArDQo+ID4gKyAg UmVsZWFzZVJlZGZpc2hSZXNwb25zZSAoRHN0UmVzcG9uc2UpOw0KPiA+ICsNCj4gPiArICByZXR1 cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IFRoaXMgZnVuY3Rpb24gY2xvbmUgaW5wdXQgcmVzcG9uc2UgYW5kIHJldHVybiB0byBjYWxsZXIN Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgUmVzcG9uc2UgICAgICBSZXNwb25zZSB0byBjbG9u ZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgUkVERklTSF9SRVNQT05TRSAqICBSZXNwb25z ZSBpcyBjbG9uZWQuDQo+ID4gKyAgQHJldHZhbCAgICAgTlVMTCAgICAgICAgICAgICAgICBFcnJv cnMgb2NjdXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArUkVERklTSF9SRVNQT05TRSAqDQo+ID4g K0Nsb25lUmVkZmlzaFJlc3BvbnNlICgNCj4gPiArICBJTiBSRURGSVNIX1JFU1BPTlNFICAqUmVz cG9uc2UNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICBTdGF0dXM7 DQo+ID4gKyAgUkVERklTSF9SRVNQT05TRSAgKk5ld1Jlc3BvbnNlOw0KPiA+ICsNCj4gPiArICBp ZiAoUmVzcG9uc2UgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICBOZXdSZXNwb25zZSA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAoUkVE RklTSF9SRVNQT05TRSkpOw0KPiA+ICsgIGlmIChOZXdSZXNwb25zZSA9PSBOVUxMKSB7DQo+ID4g KyAgICByZXR1cm4gTlVMTDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IENvcHlS ZWRmaXNoUmVzcG9uc2UgKFJlc3BvbnNlLCBOZXdSZXNwb25zZSk7DQo+ID4gKyAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgRnJlZVBvb2wgKE5ld1Jlc3BvbnNlKTsNCj4gPiAr ICAgIHJldHVybiBOVUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIE5ld1Jlc3Bv bnNlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZWxlYXNlIFJFREZJU0hfSFRU UF9DQUNIRV9EQVRBIHJlc291cmNlDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgRGF0YSAg ICBQb2ludGVyIHRvIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBIGluc3RhbmNlDQo+ID4gKw0KPiA+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgUkVERklTSF9IVFRQX0NBQ0hFX0RB VEEgaXMgcmVsZWFzZWQNCj4gc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFM SURfUEFSQU1FVEVSICAgRGF0YSBpcyBOVUxMDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NU QVRVUw0KPiA+ICtSZWxlYXNlSHR0cENhY2hlRGF0YSAoDQo+ID4gKyAgSU4gUkVERklTSF9IVFRQ X0NBQ0hFX0RBVEEgICpEYXRhDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgaWYgKERhdGEgPT0g TlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIGlmIChEYXRhLT5VcmkgIT0gTlVMTCkgew0KPiA+ICsgICAgRnJlZVBv b2wgKERhdGEtPlVyaSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoRGF0YS0+UmVzcG9u c2UgIT0gTlVMTCkgew0KPiA+ICsgICAgUmVsZWFzZVJlZGZpc2hSZXNwb25zZSAoRGF0YS0+UmVz cG9uc2UpOw0KPiA+ICsgICAgRnJlZVBvb2wgKERhdGEtPlJlc3BvbnNlKTsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIEZyZWVQb29sIChEYXRhKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDcmVhdGUgbmV3IGNhY2hl IGRhdGEuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgVXJpICAgICAgIFRoZSBVUkkgc3Ry aW5nIG1hdGNoaW5nIHRvIHRoaXMgY2FjaGUgZGF0YS4NCj4gPiArICBAcGFyYW1baW5dICAgIFJl c3BvbnNlICBIVFRQIHJlc3BvbnNlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFJFREZJU0hfSFRU UF9DQUNIRV9EQVRBICogICBQb2ludGVyIHRvIG5ld2x5IGNyZWF0ZWQgY2FjaGUNCj4gZGF0YS4N Cj4gPiArICBAcmV0dmFsIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICBObyBtZW1vcnkgYXZh aWxhYmxlLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1JFREZJU0hfSFRUUF9DQUNIRV9EQVRBICoN Cj4gPiArTmV3SHR0cENhY2hlRGF0YSAoDQo+ID4gKyAgSU4gIEVGSV9TVFJJTkcgICAgICAgIFVy aSwNCj4gPiArICBJTiAgUkVERklTSF9SRVNQT05TRSAgKlJlc3BvbnNlDQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgUkVERklTSF9IVFRQX0NBQ0hFX0RBVEEgICpOZXdEYXRhOw0KPiA+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICBTaXplOw0KPiA+ICsNCj4gPiArICBpZiAoSVNfRU1QVFlf U1RSSU5HIChVcmkpIHx8IChSZXNwb25zZSA9PSBOVUxMKSkgew0KPiA+ICsgICAgcmV0dXJuIE5V TEw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBOZXdEYXRhID0gQWxsb2NhdGVaZXJvUG9vbCAo c2l6ZW9mIChSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSkpOw0KPiA+ICsgIGlmIChOZXdEYXRhID09 IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg TmV3RGF0YS0+U2lnbmF0dXJlID0gUkVERklTSF9IVFRQX0NBQ0hFX1NJR05BVFVSRTsNCj4gPiAr ICBTaXplICAgICAgICAgICAgICAgPSBTdHJTaXplIChVcmkpOw0KPiA+ICsgIE5ld0RhdGEtPlVy aSAgICAgICA9IEFsbG9jYXRlQ29weVBvb2wgKFNpemUsIFVyaSk7DQo+ID4gKyAgaWYgKE5ld0Rh dGEtPlVyaSA9PSBOVUxMKSB7DQo+ID4gKyAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgTmV3RGF0YS0+UmVzcG9uc2UgPSBSZXNwb25zZTsNCj4gPiArICBOZXdEYXRh LT5IaXRDb3VudCA9IDE7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBOZXdEYXRhOw0KPiA+ICsNCj4g PiArT05fRVJST1I6DQo+ID4gKw0KPiA+ICsgIGlmIChOZXdEYXRhICE9IE5VTEwpIHsNCj4gPiAr ICAgIFJlbGVhc2VIdHRwQ2FjaGVEYXRhIChOZXdEYXRhKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIHJldHVybiBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTZWFyY2gg b24gZ2l2ZW4gTGlzdEhlYWRlciBmb3IgZ2l2ZW4gVVJJIHN0cmluZy4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgICBMaXN0SGVhZGVyICBUYXJnZXQgbGlzdCB0byBzZWFyY2guDQo+ID4gKyAg QHBhcmFtW2luXSAgICBVcmkgICAgICAgICBUYXJnZXQgVVJJIHRvIHNlYXJjaC4NCj4gPiArDQo+ ID4gKyAgQHJldHZhbCBSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSAgIFRhcmdldCBjYWNoZSBkYXRh IGlzIGZvdW5kLg0KPiA+ICsgIEByZXR2YWwgTlVMTCAgICAgICAgICAgICAgICAgICAgICBObyBj YWNoZSBkYXRhIHdpdGggZ2l2ZW4gVVJJIGlzIGZvdW5kLg0KPiA+ICsNCj4gPiArKiovDQo+ID4g K1JFREZJU0hfSFRUUF9DQUNIRV9EQVRBICoNCj4gPiArRmluZEh0dHBDYWNoZURhdGEgKA0KPiA+ ICsgIElOICBMSVNUX0VOVFJZICAqTGlzdEhlYWRlciwNCj4gPiArICBJTiAgRUZJX1NUUklORyAg VXJpDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgTElTVF9FTlRSWSAgICAgICAgICAgICAgICpM aXN0Ow0KPiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBICAqRGF0YTsNCj4gPiArDQo+ID4g KyAgaWYgKElTX0VNUFRZX1NUUklORyAoVXJpKSkgew0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoSXNMaXN0RW1wdHkgKExpc3RIZWFkZXIpKSB7DQo+ ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIERhdGEgPSBOVUxM Ow0KPiA+ICsgIExpc3QgPSBHZXRGaXJzdE5vZGUgKExpc3RIZWFkZXIpOw0KPiA+ICsgIHdoaWxl ICghSXNOdWxsIChMaXN0SGVhZGVyLCBMaXN0KSkgew0KPiA+ICsgICAgRGF0YSA9IFJFREZJU0hf SFRUUF9DQUNIRV9GUk9NX0xJU1QgKExpc3QpOw0KPiA+ICsNCj4gPiArICAgIGlmIChTdHJDbXAg KERhdGEtPlVyaSwgVXJpKSA9PSAwKSB7DQo+ID4gKyAgICAgIHJldHVybiBEYXRhOw0KPiA+ICsg ICAgfQ0KPiA+ICsNCj4gPiArICAgIExpc3QgPSBHZXROZXh0Tm9kZSAoTGlzdEhlYWRlciwgTGlz dCk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gTlVMTDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgU2VhcmNoIG9uIGdpdmVuIExpc3RIZWFkZXIgYW5kIHJldHVybiBj YWNoZSBkYXRhIHdpdGggbWluaW11bSBoaXQgY291bnQuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtp bl0gICAgTGlzdEhlYWRlciAgVGFyZ2V0IGxpc3QgdG8gc2VhcmNoLg0KPiA+ICsNCj4gPiArICBA cmV0dmFsIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBICAgVGFyZ2V0IGNhY2hlIGRhdGEgaXMgcmV0 dXJuZWQuDQo+ID4gKyAgQHJldHZhbCBOVUxMICAgICAgICAgICAgICAgICAgICAgIE5vIGNhY2hl IGRhdGEgaXMgZm91bmQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArUkVERklTSF9IVFRQX0NBQ0hF X0RBVEEgKg0KPiA+ICtGaW5kVW51c2VkSHR0cENhY2hlRGF0YSAoDQo+ID4gKyAgSU4gIExJU1Rf RU5UUlkgICpMaXN0SGVhZGVyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgTElTVF9FTlRSWSAg ICAgICAgICAgICAgICpMaXN0Ow0KPiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBICAqRGF0 YTsNCj4gPiArICBSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSAgKlVudXNlZERhdGE7DQo+ID4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgIEhpdENvdW50Ow0KPiA+ICsNCj4gPiArICBpZiAoSXNM aXN0RW1wdHkgKExpc3RIZWFkZXIpKSB7DQo+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIERhdGEgICAgICAgPSBOVUxMOw0KPiA+ICsgIFVudXNlZERhdGEgPSBO VUxMOw0KPiA+ICsgIEhpdENvdW50ICAgPSAwOw0KPiA+ICsNCj4gPiArICBMaXN0ICAgICAgID0g R2V0Rmlyc3ROb2RlIChMaXN0SGVhZGVyKTsNCj4gPiArICBEYXRhICAgICAgID0gUkVERklTSF9I VFRQX0NBQ0hFX0ZST01fTElTVCAoTGlzdCk7DQo+ID4gKyAgVW51c2VkRGF0YSA9IERhdGE7DQo+ ID4gKyAgSGl0Q291bnQgICA9IERhdGEtPkhpdENvdW50Ow0KPiA+ICsgIExpc3QgICAgICAgPSBH ZXROZXh0Tm9kZSAoTGlzdEhlYWRlciwgTGlzdCk7DQo+ID4gKw0KPiA+ICsgIHdoaWxlICghSXNO dWxsIChMaXN0SGVhZGVyLCBMaXN0KSkgew0KPiA+ICsgICAgRGF0YSA9IFJFREZJU0hfSFRUUF9D QUNIRV9GUk9NX0xJU1QgKExpc3QpOw0KPiA+ICsNCj4gPiArICAgIGlmIChEYXRhLT5IaXRDb3Vu dCA8IEhpdENvdW50KSB7DQo+ID4gKyAgICAgIEhpdENvdW50ICAgPSBEYXRhLT5IaXRDb3VudDsN Cj4gPiArICAgICAgVW51c2VkRGF0YSA9IERhdGE7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsg ICAgTGlzdCA9IEdldE5leHROb2RlIChMaXN0SGVhZGVyLCBMaXN0KTsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIHJldHVybiBVbnVzZWREYXRhOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBEZWxldGUgYSBjYWNoZSBkYXRhIGJ5IGdpdmVuIGNhY2hlIGluc3RhbmNlLg0KPiA+ICsN Cj4gPiArICBAcGFyYW1baW5dICAgIExpc3QgICAgVGFyZ2V0IGNhY2hlIGxpc3QgdG8gYmUgcmVt b3ZlZC4NCj4gPiArICBAcGFyYW1baW5dICAgIERhdGEgICAgUG9pbnRlciB0byB0aGUgaW5zdGFu Y2UgdG8gYmUgZGVsZXRlZC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgIENh Y2hlIGRhdGEgaXMgcmVtb3ZlZC4NCj4gPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgRmFpbCB0 byByZW1vdmUgY2FjaGUgZGF0YS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ ID4gK0RlbGV0ZUh0dHBDYWNoZURhdGEgKA0KPiA+ICsgIElOICBSRURGSVNIX0hUVFBfQ0FDSEVf TElTVCAgKkxpc3QsDQo+ID4gKyAgSU4gIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBICAqRGF0YQ0K PiA+ICsgICkNCj4gPiArew0KPiA+ICsgIGlmICgoTGlzdCA9PSBOVUxMKSB8fCAoRGF0YSA9PSBO VUxMKSkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIERFQlVHICgoUkVERklTSF9IVFRQX0NBQ0hFX0RFQlVHLCAiJWE6IGRl bGV0ZTogJXNcbiIsIF9fZnVuY19fLA0KPiBEYXRhLT5VcmkpKTsNCj4gPiArDQo+ID4gKyAgUmVt b3ZlRW50cnlMaXN0ICgmRGF0YS0+TGlzdCk7DQo+ID4gKyAgLS1MaXN0LT5Db3VudDsNCj4gPiAr DQo+ID4gKyAgcmV0dXJuIFJlbGVhc2VIdHRwQ2FjaGVEYXRhIChEYXRhKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgQWRkIG5ldyBjYWNoZSBieSBnaXZlbiBVUkkgYW5kIEhUVFAg cmVzcG9uc2UgdG8gc3BlY2lmeSBMaXN0Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgIExp c3QgICAgICBUYXJnZXQgY2FjaGUgbGlzdCB0byBhZGQuDQo+ID4gKyAgQHBhcmFtW2luXSAgICBV cmkgICAgICAgVGhlIFVSSSBzdHJpbmcgbWF0Y2hpbmcgdG8gdGhpcyBjYWNoZSBkYXRhLg0KPiA+ ICsgIEBwYXJhbVtpbl0gICAgUmVzcG9uc2UgIEhUVFAgcmVzcG9uc2UuDQo+ID4gKw0KPiA+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICBDYWNoZSBkYXRhIGlzIGFkZGVkLg0KPiA+ICsgIEByZXR2 YWwgT3RoZXJzICAgICAgICBGYWlsIHRvIGFkZCBjYWNoZSBkYXRhLg0KPiA+ICsNCj4gPiArKiov DQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArQWRkSHR0cENhY2hlRGF0YSAoDQo+ID4gKyAgSU4gIFJF REZJU0hfSFRUUF9DQUNIRV9MSVNUICAqTGlzdCwNCj4gPiArICBJTiAgRUZJX1NUUklORyAgICAg ICAgICAgICAgIFVyaSwNCj4gPiArICBJTiAgUkVERklTSF9SRVNQT05TRSAgICAgICAgICpSZXNw b25zZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBICAq TmV3RGF0YTsNCj4gPiArICBSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSAgKk9sZERhdGE7DQo+ID4g KyAgUkVERklTSF9IVFRQX0NBQ0hFX0RBVEEgICpVbnVzZWREYXRhOw0KPiA+ICsgIFJFREZJU0hf UkVTUE9OU0UgICAgICAgICAqTmV3UmVzcG9uc2U7DQo+ID4gKw0KPiA+ICsgIGlmICgoTGlzdCA9 PSBOVUxMKSB8fCBJU19FTVBUWV9TVFJJTkcgKFVyaSkgfHwgKFJlc3BvbnNlID09IE5VTEwpKSB7 DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgLy8NCj4gPiArICAvLyBJZiBzYW1lIGNhY2hlIGRhdGEgZXhpc3QsIHJlcGxhY2Ug aXQgd2l0aCBsYXRlc3Qgb25lLg0KPiA+ICsgIC8vDQo+ID4gKyAgT2xkRGF0YSA9IEZpbmRIdHRw Q2FjaGVEYXRhICgmTGlzdC0+SGVhZCwgVXJpKTsNCj4gPiArICBpZiAoT2xkRGF0YSAhPSBOVUxM KSB7DQo+ID4gKyAgICBEZWxldGVIdHRwQ2FjaGVEYXRhIChMaXN0LCBPbGREYXRhKTsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gQ2hlY2sgY2FwYWNpdHkNCj4gPiArICAv Lw0KPiA+ICsgIGlmIChMaXN0LT5Db3VudCA+PSBMaXN0LT5DYXBhY2l0eSkgew0KPiA+ICsgICAg REVCVUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUcsICIlYTogbGlzdCBpcyBmdWxsIGFuZCBy ZXRpcmUgdW51c2VkDQo+IGNhY2hlXG4iLCBfX2Z1bmNfXykpOw0KPiA+ICsgICAgVW51c2VkRGF0 YSA9IEZpbmRVbnVzZWRIdHRwQ2FjaGVEYXRhICgmTGlzdC0+SGVhZCk7DQo+ID4gKyAgICBpZiAo VW51c2VkRGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09V UkNFUzsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBEZWxldGVIdHRwQ2FjaGVEYXRhIChM aXN0LCBVbnVzZWREYXRhKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8g Q2xvbmUgYSBsb2NhbCBjb3B5DQo+ID4gKyAgLy8NCj4gPiArICBOZXdSZXNwb25zZSA9IENsb25l UmVkZmlzaFJlc3BvbnNlIChSZXNwb25zZSk7DQo+ID4gKyAgaWYgKE5ld1Jlc3BvbnNlID09IE5V TEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICB9DQo+ ID4gKw0KPiA+ICsgIE5ld0RhdGEgPSBOZXdIdHRwQ2FjaGVEYXRhIChVcmksIE5ld1Jlc3BvbnNl KTsNCj4gPiArICBpZiAoTmV3RGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBJbnNlcnRUYWlsTGlzdCAo Jkxpc3QtPkhlYWQsICZOZXdEYXRhLT5MaXN0KTsNCj4gPiArICArK0xpc3QtPkNvdW50Ow0KPiA+ ICsNCj4gPiArICBERUJVRyAoKFJFREZJU0hfSFRUUF9DQUNIRV9ERUJVRywgIiVhOiBjYWNoZSgl ZC8lZCkgJXNcbiIsDQo+IF9fZnVuY19fLCBMaXN0LT5Db3VudCwgTGlzdC0+Q2FwYWNpdHksIE5l d0RhdGEtPlVyaSkpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJlbGVhc2UgYWxsIGNhY2hlIGZyb20gbGlzdC4NCj4g PiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICBDYWNoZUxpc3QgICAgVGhlIGxpc3QgdG8gYmUgcmVs ZWFzZWQuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgQWxs IGNhY2hlIGRhdGEgYXJlIHJlbGVhc2VkLg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFS QU1FVEVSICAgQ2FjaGVMaXN0IGlzIE5VTEwuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NU QVRVUw0KPiA+ICtSZWxlYXNlQ2FjaGVMaXN0ICgNCj4gPiArICBJTiAgUkVERklTSF9IVFRQX0NB Q0hFX0xJU1QgICpDYWNoZUxpc3QNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBMSVNUX0VOVFJZ ICAgICAgICAgICAgICAgKkxpc3Q7DQo+ID4gKyAgTElTVF9FTlRSWSAgICAgICAgICAgICAgICpO ZXh0Ow0KPiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBICAqRGF0YTsNCj4gPiArDQo+ID4g KyAgaWYgKENhY2hlTGlzdCA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKElzTGlzdEVtcHR5ICgmQ2Fj aGVMaXN0LT5IZWFkKSkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgRGF0YSA9IE5VTEw7DQo+ID4gKyAgTmV4dCA9IE5VTEw7DQo+ID4gKyAg TGlzdCA9IEdldEZpcnN0Tm9kZSAoJkNhY2hlTGlzdC0+SGVhZCk7DQo+ID4gKyAgd2hpbGUgKCFJ c051bGwgKCZDYWNoZUxpc3QtPkhlYWQsIExpc3QpKSB7DQo+ID4gKyAgICBEYXRhID0gUkVERklT SF9IVFRQX0NBQ0hFX0ZST01fTElTVCAoTGlzdCk7DQo+ID4gKyAgICBOZXh0ID0gR2V0TmV4dE5v ZGUgKCZDYWNoZUxpc3QtPkhlYWQsIExpc3QpOw0KPiA+ICsNCj4gPiArICAgIERlbGV0ZUh0dHBD YWNoZURhdGEgKENhY2hlTGlzdCwgRGF0YSk7DQo+ID4gKw0KPiA+ICsgICAgTGlzdCA9IE5leHQ7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4g PiBkaWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cER4ZS5j DQo+IGIvUmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cER4ZS5jDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi4zOTk1OGQ0ODY1DQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL1JlZGZpc2hQa2cvUmVkZmlzaEh0dHBEeGUvUmVkZmlz aEh0dHBEeGUuYw0KPiA+IEBAIC0wLDAgKzEsMTM0NCBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiAr ICBSZWRmaXNoSHR0cER4ZSBwcm9kdWNlcyBFZGtJSVJlZGZpc2hIdHRwUHJvdG9jb2wNCj4gPiAr ICBmb3IgRURLMiBSZWRmaXNoIEZlYXR1cmUgZHJpdmVyIHRvIGRvIEhUVFAgb3BlcmF0aW9ucy4N Cj4gPiArDQo+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIzLTIwMjQsIE5WSURJQSBDT1JQT1JBVElP TiAmIEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuDQo+ID4gKw0KPiA+ICsgIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsq Ki8NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJSZWRmaXNoSHR0cER4ZS5oIg0KPiA+ICsjaW5jbHVk ZSAiUmVkZmlzaEh0dHBEYXRhLmgiDQo+ID4gKyNpbmNsdWRlICJSZWRmaXNoSHR0cE9wZXJhdGlv bi5oIg0KPiA+ICsNCj4gPiArUkVERklTSF9IVFRQX0NBQ0hFX1BSSVZBVEUgICptUmVkZmlzaEh0 dHBDYWNoZVByaXZhdGUgPSBOVUxMOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgRGVidWcgb3V0 cHV0IHRoZSBjYWNoZSBsaXN0Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgIE1zZyAgICAg ICAgICAgIERlYnVnIG1lc3NhZ2Ugc3RyaW5nLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgRXJyb3JM ZXZlbCAgICAgT3V0cHV0IGVycm9yIGxldmVsLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgQ2FjaGVM aXN0ICAgICAgVGFyZ2V0IGxpc3QgdG8gZHVtcC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgICBEZWJ1ZyBkdW1wIGZpbmlzaGVkLg0KPiA+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSICAgSHR0cENhY2hlTGlzdCBpcyBOVUxMLg0KPiA+ICsNCj4g PiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRGVidWdQcmludEh0dHBDYWNoZUxpc3QgKA0K PiA+ICsgIElOICBDT05TVCBDSEFSOCAgICAgICAgICAgICAgKk1zZywNCj4gPiArICBJTiAgVUlO VE4gICAgICAgICAgICAgICAgICAgIEVycm9yTGV2ZWwsDQo+ID4gKyAgSU4gIFJFREZJU0hfSFRU UF9DQUNIRV9MSVNUICAqQ2FjaGVMaXN0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgTElTVF9F TlRSWSAgICAgICAgICAgICAgICpMaXN0Ow0KPiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRB ICAqRGF0YTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4gKw0K PiA+ICsgIGlmIChDYWNoZUxpc3QgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICghSVNfRU1QVFlfU1RS SU5HIChNc2cpKSB7DQo+ID4gKyAgICBERUJVRyAoKEVycm9yTGV2ZWwsICIlYVxuIiwgTXNnKSk7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoSXNMaXN0RW1wdHkgKCZDYWNoZUxpc3QtPkhl YWQpKSB7DQo+ID4gKyAgICBERUJVRyAoKEVycm9yTGV2ZWwsICJsaXN0IGlzIGVtcHR5XG4iKSk7 DQo+ID4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IERFQlVHICgoRXJyb3JMZXZlbCwgImxpc3QgY291bnQ6ICVkIGNhcGFjaXR5OiAlZFxuIiwgQ2Fj aGVMaXN0LT5Db3VudCwNCj4gQ2FjaGVMaXN0LT5DYXBhY2l0eSkpOw0KPiA+ICsgIERhdGEgID0g TlVMTDsNCj4gPiArICBJbmRleCA9IDA7DQo+ID4gKyAgTGlzdCAgPSBHZXRGaXJzdE5vZGUgKCZD YWNoZUxpc3QtPkhlYWQpOw0KPiA+ICsgIHdoaWxlICghSXNOdWxsICgmQ2FjaGVMaXN0LT5IZWFk LCBMaXN0KSkgew0KPiA+ICsgICAgRGF0YSA9IFJFREZJU0hfSFRUUF9DQUNIRV9GUk9NX0xJU1Qg KExpc3QpOw0KPiA+ICsNCj4gPiArICAgIERFQlVHICgoRXJyb3JMZXZlbCwgIiVkKSBVcmk6ICVz IEhpdDogJWRcbiIsICsrSW5kZXgsIERhdGEtPlVyaSwgRGF0YS0NCj4gPkhpdENvdW50KSk7DQo+ ID4gKw0KPiA+ICsgICAgTGlzdCA9IEdldE5leHROb2RlICgmQ2FjaGVMaXN0LT5IZWFkLCBMaXN0 KTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArfQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKw0KPiA+ICsgIENoZWNrIEhUVFAgc3RhdHVzIGNvZGUgdG8g c2VlIGlmIHdlIGxpa2UgdG8gcmV0cnkgSFRUUCByZXF1ZXN0IG9yIG5vdC4NCj4gPiArDQo+ID4g KyAgQHBhcmFtW2luXSAgU3RhdHVzQ29kZSAgICAgIEhUVFAgc3RhdHVzIGNvZGUuDQo+ID4gKw0K PiA+ICsgIEByZXR2YWwgICAgIEJPT0xFQU4gICAgICAgICBSZXR1cm4gdHJ1ZSB3aGVuIHdlIGxp a2UgdG8gcmV0cnkgcmVxdWVzdC4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmV0dXJuIGZhbHNlIHdoZW4gd2UgZG9uJ3Qgd2FudCB0byByZXRyeSByZXF1ZXN0Lg0KPiA+ICsN Cj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArUmVkZmlzaFJldHJ5UmVxdWlyZWQgKA0KPiA+ ICsgIElOIEVGSV9IVFRQX1NUQVRVU19DT0RFICAqU3RhdHVzQ29kZQ0KPiA+ICsgICkNCj4gPiAr ew0KPiA+ICsgIGlmIChTdGF0dXNDb2RlID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBUUlVF Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKCgqU3RhdHVzQ29kZSA9PSBIVFRQX1NUQVRV U181MDBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKSB8fA0KPiA+ICsgICAgICAoKlN0YXR1c0NvZGUg PT0gSFRUUF9TVEFUVVNfVU5TVVBQT1JURURfU1RBVFVTKSkNCj4gPiArICB7DQo+ID4gKyAgICBy ZXR1cm4gVFJVRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBGQUxTRTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKw0KPiA+ICsgIENvbnZlcnQgVW5pY29kZSBzdHJpbmcg dG8gQVNDSUkgc3RyaW5nLiBJdCdzIGNhbGwgcmVzcG9uc2liaWxpdHkgdG8gcmVsZWFzZQ0KPiBy ZXR1cm5lZCBidWZmZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFVuaWNvZGVTdHIgICAg ICBVbmljb2RlIHN0cmluZyB0byBjb252ZXJ0Lg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICBD SEFSOCAqICAgICAgICAgQVNDSUkgc3RyaW5nIHJldHVybmVkLg0KPiA+ICsgIEByZXR2YWwgICAg IE5VTEwgICAgICAgICAgICBFcnJvcnMgb2NjdXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArQ0hB UjggKg0KPiA+ICtTdHJpbmdVbmljb2RlVG9Bc2NpaSAoDQo+ID4gKyAgSU4gRUZJX1NUUklORyAg VW5pY29kZVN0cg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIENIQVI4ICAgICAgICpBc2NpaVN0 cjsNCj4gPiArICBVSU5UTiAgICAgICBBc2NpaVN0clNpemU7DQo+ID4gKyAgRUZJX1NUQVRVUyAg U3RhdHVzOw0KPiA+ICsNCj4gPiArICBpZiAoSVNfRU1QVFlfU1RSSU5HIChVbmljb2RlU3RyKSkg ew0KPiA+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBBc2NpaVN0 clNpemUgPSBTdHJMZW4gKFVuaWNvZGVTdHIpICsgMTsNCj4gPiArICBBc2NpaVN0ciAgICAgPSBB bGxvY2F0ZVplcm9Qb29sIChBc2NpaVN0clNpemUpOw0KPiA+ICsgIGlmIChBc2NpaVN0ciA9PSBO VUxMKSB7DQo+ID4gKyAgICByZXR1cm4gTlVMTDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0 YXR1cyA9IFVuaWNvZGVTdHJUb0FzY2lpU3RyUyAoVW5pY29kZVN0ciwgQXNjaWlTdHIsIEFzY2lp U3RyU2l6ZSk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgREVC VUcgKChERUJVR19FUlJPUiwgIlVuaWNvZGVTdHJUb0FzY2lpU3RyUyBmYWlsZWQ6ICVyXG4iLCBT dGF0dXMpKTsNCj4gPiArICAgIEZyZWVQb29sIChBc2NpaVN0cik7DQo+ID4gKyAgICByZXR1cm4g TlVMTDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBBc2NpaVN0cjsNCj4gPiArfQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmV0dXJuIEhUVFAgbWV0aG9kIGluIEFTQ0lJIHN0cmlu Zy4gQ2FsbGVyIGRvZXMgbm90IG5lZWQNCj4gPiArICB0byBmcmVlIHJldHVybmVkIHN0cmluZyBi dWZmZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIE1ldGhvZCAgICAgICAgIEhUVFAgbWV0 aG9kLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIENIQVI4ICogICBNZXRob2QgaW4gc3RyaW5nLg0K PiA+ICsqKi8NCj4gPiArQ0hBUjggKg0KPiA+ICtIdHRwTWV0aG9kVG9TdHJpbmcgKA0KPiA+ICsg IElOICBFRklfSFRUUF9NRVRIT0QgIE1ldGhvZA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHN3 aXRjaCAoTWV0aG9kKSB7DQo+ID4gKyAgICBjYXNlIEh0dHBNZXRob2RHZXQ6DQo+ID4gKyAgICAg IHJldHVybiBIVFRQX01FVEhPRF9HRVQ7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2Fz ZSBIdHRwTWV0aG9kUG9zdDoNCj4gPiArICAgICAgcmV0dXJuIEhUVFBfTUVUSE9EX1BPU1Q7DQo+ ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2FzZSBIdHRwTWV0aG9kUGF0Y2g6DQo+ID4gKyAg ICAgIHJldHVybiBIVFRQX01FVEhPRF9QQVRDSDsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAg ICBjYXNlIEh0dHBNZXRob2RQdXQ6DQo+ID4gKyAgICAgIHJldHVybiBIVFRQX01FVEhPRF9QVVQ7 DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgY2FzZSBIdHRwTWV0aG9kRGVsZXRlOg0KPiA+ ICsgICAgICByZXR1cm4gSFRUUF9NRVRIT0RfREVMRVRFOw0KPiA+ICsgICAgICBicmVhazsNCj4g PiArICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgcmV0dXJuICJVbmtub3duIjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVw b3J0IEhUVFAgY29tbXVuaWNhdGlvbiBlcnJvciB2aWEgcmVwb3J0IHN0YXR1cyBjb2RlLg0KPiA+ ICsNCj4gPiArICBAcGFyYW1baW5dICBNZXRob2QgICAgICAgICBIVFRQIG1ldGhvZC4NCj4gPiAr ICBAcGFyYW1baW5dICBVcmkgICAgICAgICAgICBUaGUgVVJJIHdoaWNoIGhhcyBmYWlsdXJlLg0K PiA+ICsgIEBwYXJhbVtpbl0gIEh0dHBTdGF0dXNDb2RlIEhUVFAgc3RhdHVzIGNvZGUuDQo+ID4g Kw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtSZXBvcnRIdHRwRXJyb3IgKA0KPiA+ICsgIElO ICBFRklfSFRUUF9NRVRIT0QgICAgICAgTWV0aG9kLA0KPiA+ICsgIElOICBFRklfU1RSSU5HICAg ICAgICAgICAgVXJpLA0KPiA+ICsgIElOICBFRklfSFRUUF9TVEFUVVNfQ09ERSAgKkh0dHBTdGF0 dXNDb2RlICBPUFRJT05BTA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIENIQVI4ICBFcnJvck1z Z1tSRURGSVNIX0VSUk9SX01TR19NQVhdOw0KPiA+ICsNCj4gPiArICBpZiAoSVNfRU1QVFlfU1RS SU5HIChVcmkpKSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IG5vIFVSSSB0 byByZXBvcnQgZXJyb3Igc3RhdHVzXG4iLCBfX2Z1bmNfXykpOw0KPiA+ICsgICAgcmV0dXJuOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBSZXBvcnQgZmFpbHVyZSBvZiBV UkkgYW5kIEhUVFAgc3RhdHVzIGNvZGUuDQo+ID4gKyAgLy8NCj4gPiArICBBc2NpaVNQcmludCAo RXJyb3JNc2csIHNpemVvZiAoRXJyb3JNc2cpLCBSRURGSVNIX0hUVFBfRVJST1JfUkVQT1JULA0K PiBIdHRwTWV0aG9kVG9TdHJpbmcgKE1ldGhvZCksIChIdHRwU3RhdHVzQ29kZSA9PSBOVUxMID8N Cj4gSFRUUF9TVEFUVVNfVU5TVVBQT1JURURfU1RBVFVTIDogKkh0dHBTdGF0dXNDb2RlKSwgVXJp KTsNCj4gPiArICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWFcbiIsIEVycm9yTXNnKSk7DQo+ID4g KyAgLy8NCj4gPiArICAvLyBUT0RPOg0KPiA+ICsgIC8vIEJlbG93IFBJIHN0YXR1cyBjb2RlIGlz IGFwcHJvdmVkIGJ5IFBJV0cgYW5kIHdhaXQgZm9yIHNwZWNpZmljYXRpb24NCj4gcHVibGlzaGVk Lg0KPiA+ICsgIC8vIFdlIHdpbGwgdW5jb21tZW50IGJlbG93IHJlcG9ydCBzdGF0dXMgY29kZSBh ZnRlciBQSSBzdGF0dXMgY29kZSBnZXQNCj4gcHVibGlzaGVkLg0KPiA+ICsgIC8vIFJFRjoNCj4g aHR0cHM6Ly9idWd6aWxsYS50aS8NCj4gYW5vY29yZS5vcmclMkZzaG93X2J1Zy5jZ2klM0ZpZCUz RDQ0ODMmZGF0YT0wNSU3QzAyJTdDbmlja2xldyU0MG52aQ0KPiBkaWEuY29tJTdDZjY1OWM1NGMz ZWRiNDM1MjdjMzYwOGRjMzQ2MmFiMmElN0M0MzA4M2QxNTcyNzM0MGMxYjdkYg0KPiAzOWVmZDlj Y2MxN2ElN0MwJTdDMCU3QzYzODQ0Mjg0NTYwMTA1MTM5NiU3Q1Vua25vd24lN0NUV0ZwYkdacw0K PiBiM2Q4ZXlKV0lqb2lNQzR3TGpBd01EQWlMQ0pRSWpvaVYybHVNeklpTENKQlRpSTZJazFoYVd3 aUxDSlhWQ0k2TW4wJQ0KPiAzRCU3QzAlN0MlN0MlN0Mmc2RhdGE9VDFiTjdLbVRhMXY0OWNPRmtk OSUyRjlobHprZHpiSFBMZWJ4U2lVa3ANCj4gVnVVNCUzRCZyZXNlcnZlZD0wDQo+ID4gKyAgLy8N Cj4gPiArICAvLyBSRVBPUlRfU1RBVFVTX0NPREVfV0lUSF9FWFRFTkRFRF9EQVRBICgNCj4gPiAr ICAvLyAgRUZJX0VSUk9SX0NPREUgfCBFRklfRVJST1JfTUFKT1IsDQo+ID4gKyAgLy8gIEVGSV9D T01QVVRJTkdfVU5JVF9NQU5BR0VBQklMSVRZIHwNCj4gRUZJX01BTkFHRUFCSUxJVFlfRUNfUkVE RklTSF9DT01NVU5JQ0FUSU9OX0VSUk9SLA0KPiA+ICsgIC8vICBFcnJvck1zZywNCj4gPiArICAv LyAgQXNjaWlTdHJTaXplIChFcnJvck1zZykNCj4gPiArICAvLyAgKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBjcmVhdGUgUmVkZmlzaCBzZXJ2aWNlLiBJ dCdzIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgcmV0dXJuZWQNCj4gPiArICBSZWRm aXNoIHNlcnZpY2UgYnkgY2FsbGluZyBGcmVlU2VydmljZSAoKS4NCj4gPiArDQo+ID4gKyAgQHBh cmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBFREtJSV9SRURG SVNIX0hUVFBfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgUmVkZmlz aENvbmZpZ1NlcnZpY2VJbmZvICAgUmVkZmlzaCBjb25maWcgc2VydmljZSBpbmZvcm1hdGlvbi4N Cj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgUkVERklTSF9TRVJWSUNFICBSZWRmaXNoIHNlcnZp Y2UgaXMgY3JlYXRlZC4NCj4gPiArICBAcmV0dmFsICAgICBOVUxMICAgICAgICAgICAgIEVycm9y cyBvY2N1ci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtSRURGSVNIX1NFUlZJQ0UNCj4gPiArRUZJ QVBJDQo+ID4gK1JlZGZpc2hDcmVhdGVSZWRmaXNoU2VydmljZSAoDQo+ID4gKyAgSU4gIEVES0lJ X1JFREZJU0hfSFRUUF9QUk9UT0NPTCAgICAgICAgICpUaGlzLA0KPiA+ICsgIElOICBSRURGSVNI X0NPTkZJR19TRVJWSUNFX0lORk9STUFUSU9OICAqUmVkZmlzaENvbmZpZ1NlcnZpY2VJbmZvDQo+ ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gPiArICBSRURGSVNIX0hUVFBfQ0FDSEVfUFJJVkFURSAgKlByaXZhdGU7DQo+ID4gKyAg UkVERklTSF9TRVJWSUNFX1BSSVZBVEUgICAgICpOZXdTZXJ2aWNlOw0KPiA+ICsgIENIQVI4ICAg ICAgICAgICAgICAgICAgICAgICAqQXNjaWlMb2NhdGlvbjsNCj4gPiArICBDSEFSOCAgICAgICAg ICAgICAgICAgICAgICAgKkhvc3Q7DQo+ID4gKyAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAg ICpCYXNpY0F1dGhTdHJpbmc7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgIEJh c2ljQXV0aFN0clNpemU7DQo+ID4gKyAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICpFbmNv ZGVkQXV0aFN0cmluZzsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgRW5jb2Rl ZEF1dGhTdHJTaXplOw0KPiA+ICsgIEVES0lJX1JFREZJU0hfQVVUSF9NRVRIT0QgICBBdXRoTWV0 aG9kOw0KPiA+ICsgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAqVXNlcm5hbWU7DQo+ID4g KyAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICpQYXNzd29yZDsNCj4gPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgVXNlcm5hbWVTaXplOw0KPiA+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICBQYXNzd29yZFNpemU7DQo+ID4gKyAgRUZJX1JFU1RfRVhfUFJPVE9DT0wg ICAgICAgICpSZXN0RXg7DQo+ID4gKw0KPiA+ICsgIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoUmVk ZmlzaENvbmZpZ1NlcnZpY2VJbmZvID09IE5VTEwpKSB7DQo+ID4gKyAgICByZXR1cm4gTlVMTDsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIERFQlVHICgoUkVERklTSF9IVFRQX0NBQ0hFX0RFQlVH LCAiJWE6IHNlcnZpY2UgbG9jYXRpb246ICVzXG4iLA0KPiBfX2Z1bmNfXywgUmVkZmlzaENvbmZp Z1NlcnZpY2VJbmZvLT5SZWRmaXNoU2VydmljZUxvY2F0aW9uKSk7DQo+ID4gKw0KPiA+ICsgIFBy aXZhdGUgICAgICAgICAgICA9IFJFREZJU0hfSFRUUF9DQUNIRV9QUklWQVRFX0ZST01fVEhJUyAo VGhpcyk7DQo+ID4gKyAgQmFzaWNBdXRoU3RyaW5nICAgID0gTlVMTDsNCj4gPiArICBFbmNvZGVk QXV0aFN0cmluZyAgPSBOVUxMOw0KPiA+ICsgIFVzZXJuYW1lICAgICAgICAgICA9IE5VTEw7DQo+ ID4gKyAgUGFzc3dvcmQgICAgICAgICAgID0gTlVMTDsNCj4gPiArICBOZXdTZXJ2aWNlICAgICAg ICAgPSBOVUxMOw0KPiA+ICsgIEFzY2lpTG9jYXRpb24gICAgICA9IE5VTEw7DQo+ID4gKyAgSG9z dCAgICAgICAgICAgICAgID0gTlVMTDsNCj4gPiArICBCYXNpY0F1dGhTdHJTaXplICAgPSAwOw0K PiA+ICsgIEVuY29kZWRBdXRoU3RyU2l6ZSA9IDA7DQo+ID4gKyAgVXNlcm5hbWVTaXplICAgICAg ID0gMDsNCj4gPiArICBQYXNzd29yZFNpemUgICAgICAgPSAwOw0KPiA+ICsNCj4gPiArICAvLw0K PiA+ICsgIC8vIEJ1aWxkIGhvc3QgYW5kIGhvc3QgbmFtZSBmcm9tIHNlcnZpY2UgbG9jYXRpb24N Cj4gPiArICAvLw0KPiA+ICsgIGlmICghSVNfRU1QVFlfU1RSSU5HIChSZWRmaXNoQ29uZmlnU2Vy dmljZUluZm8tPlJlZGZpc2hTZXJ2aWNlTG9jYXRpb24pKSB7DQo+ID4gKyAgICBBc2NpaUxvY2F0 aW9uID0gU3RyaW5nVW5pY29kZVRvQXNjaWkgKFJlZGZpc2hDb25maWdTZXJ2aWNlSW5mby0NCj4g PlJlZGZpc2hTZXJ2aWNlTG9jYXRpb24pOw0KPiA+ICsgICAgaWYgKEFzY2lpTG9jYXRpb24gPT0g TlVMTCkgew0KPiA+ICsgICAgICBnb3RvIE9OX1JFTEVBU0U7DQo+ID4gKyAgICB9DQo+ID4gKw0K PiA+ICsgICAgSG9zdCA9IEFsbG9jYXRlWmVyb1Bvb2wgKFJFREZJU0hfSE9TVF9OQU1FX01BWCk7 DQo+ID4gKyAgICBpZiAoQXNjaWlMb2NhdGlvbiA9PSBOVUxMKSB7DQo+ID4gKyAgICAgIGdvdG8g T05fUkVMRUFTRTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBpZiAoUmVkZmlzaENvbmZp Z1NlcnZpY2VJbmZvLT5SZWRmaXNoU2VydmljZVVzZUh0dHBzKSB7DQo+ID4gKyAgICAgIEFzY2lp U1ByaW50IChIb3N0LCBSRURGSVNIX0hPU1RfTkFNRV9NQVgsICJodHRwczovLyVhIiwNCj4gQXNj aWlMb2NhdGlvbik7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBBc2NpaVNQcmludCAo SG9zdCwgUkVERklTSF9IT1NUX05BTUVfTUFYLCAiaHR0cDovLyVhIiwgQXNjaWlMb2NhdGlvbik7 DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgREVCVUcgKChSRURGSVNIX0hUVFBfQ0FDSEVf REVCVUcsICIlYTogSG9zdDogJWFcbiIsIF9fZnVuY19fLA0KPiBIb3N0KSk7DQo+ID4gKyAgfQ0K PiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEZpbmQgUmVzdCBFeCBwcm90b2NvbA0KPiA+ICsg IC8vDQo+ID4gKyAgaWYgKFJlZGZpc2hDb25maWdTZXJ2aWNlSW5mby0+UmVkZmlzaFNlcnZpY2VS ZXN0RXhIYW5kbGUgIT0gTlVMTCkgew0KPiA+ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90 b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgUmVkZmlzaENvbmZpZ1NlcnZpY2VJbmZv LT5SZWRmaXNoU2VydmljZVJlc3RFeEhhbmRsZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAm Z0VmaVJlc3RFeFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAq KikmUmVzdEV4DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICB9IGVsc2Ugew0K PiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBSZXN0IEV4IHByb3RvY29sIGlzIG5v dCBhdmFpbGFibGVcbiIsDQo+IF9fZnVuY19fKSk7DQo+ID4gKyAgICBnb3RvIE9OX1JFTEVBU0U7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEdldCBjcmVkZW50aWFsDQo+ ID4gKyAgLy8NCj4gPiArICBpZiAoUHJpdmF0ZS0+Q3JlZGVudGlhbFByb3RvY29sID09IE5VTEwp IHsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBObyBjcmVkZW50aWFsIGF2YWlsYWJsZSBvbiB0 aGlzIHN5c3RlbS4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBERUJVRyAoKERFQlVHX1dBUk4sICIl YTogbm8gY3JlZGVudGlhbCBwcm90b2NvbCBhdmFpbGFibGVcbiIsDQo+IF9fZnVuY19fKSk7DQo+ ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIFN0YXR1cyA9IFByaXZhdGUtPkNyZWRlbnRpYWxQcm90 b2NvbC0+R2V0QXV0aEluZm8gKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFByaXZhdGUtPkNyZWRlbnRpYWxQcm90b2NvbCwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQXV0aE1ldGhvZCwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVXNlcm5hbWUsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBhc3N3b3JkDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiAr ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykgfHwgSVNfRU1QVFlfU1RSSU5HIChVc2VybmFtZSkg fHwNCj4gSVNfRU1QVFlfU1RSSU5HIChQYXNzd29yZCkpIHsNCj4gPiArICAgICAgREVCVUcgKChE RUJVR19FUlJPUiwgIiVhOiBjYW5ub3QgZ2V0IGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uOg0K PiAlclxuIiwgX19mdW5jX18sIFN0YXR1cykpOw0KPiA+ICsgICAgICBnb3RvIE9OX1JFTEVBU0U7 DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBERUJVRyAoKFJFREZJU0hfSFRUUF9DQUNI RV9ERUJVRywgIiVhOiBBdXRoIG1ldGhvZDogMHgleA0KPiB1c2VybmFtZTogJWEgcGFzc3dvcmQ6 ICVhXG4iLCBfX2Z1bmNfXywgQXV0aE1ldGhvZCwgVXNlcm5hbWUsIFBhc3N3b3JkKSk7DQo+ID4g Kw0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBQZXJmb3JtIGJhc2U2NCBlbmNvZGluZyAo UkZDIDc2MTcpDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIFVzZXJuYW1lU2l6ZSAgICAgPSBB c2NpaVN0clNpemUgKFVzZXJuYW1lKTsNCj4gPiArICAgICAgUGFzc3dvcmRTaXplICAgICA9IEFz Y2lpU3RyU2l6ZSAoUGFzc3dvcmQpOw0KPiA+ICsgICAgICBCYXNpY0F1dGhTdHJTaXplID0gIFVz ZXJuYW1lU2l6ZSArIFBhc3N3b3JkU2l6ZTsgIC8vIG9uZSBieXRlIHRha2VuIGZyb20NCj4gbnVs bC10ZXJtaW5hdG9yIGZvciAnOicNCj4gPiArICAgICAgQmFzaWNBdXRoU3RyaW5nICA9IEFsbG9j YXRlWmVyb1Bvb2wgKEJhc2ljQXV0aFN0clNpemUpOw0KPiA+ICsgICAgICBpZiAoQmFzaWNBdXRo U3RyaW5nID09IE5VTEwpIHsNCj4gPiArICAgICAgICBnb3RvIE9OX1JFTEVBU0U7DQo+ID4gKyAg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIEFzY2lpU1ByaW50ICgNCj4gPiArICAgICAgICBCYXNp Y0F1dGhTdHJpbmcsDQo+ID4gKyAgICAgICAgQmFzaWNBdXRoU3RyU2l6ZSwNCj4gPiArICAgICAg ICAiJWE6JWEiLA0KPiA+ICsgICAgICAgIFVzZXJuYW1lLA0KPiA+ICsgICAgICAgIFBhc3N3b3Jk DQo+ID4gKyAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgICAgIFN0YXR1cyA9IEJhc2U2NEVuY29k ZSAoDQo+ID4gKyAgICAgICAgICAgICAgICAgKENPTlNUIFVJTlQ4ICopQmFzaWNBdXRoU3RyaW5n LA0KPiA+ICsgICAgICAgICAgICAgICAgIEJhc2ljQXV0aFN0clNpemUsDQo+ID4gKyAgICAgICAg ICAgICAgICAgRW5jb2RlZEF1dGhTdHJpbmcsDQo+ID4gKyAgICAgICAgICAgICAgICAgJkVuY29k ZWRBdXRoU3RyU2l6ZQ0KPiA+ICsgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgIGlmICgo U3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSAmJiAoRW5jb2RlZEF1dGhTdHJTaXplID4g MCkpIHsNCj4gPiArICAgICAgICBFbmNvZGVkQXV0aFN0cmluZyA9IEFsbG9jYXRlWmVyb1Bvb2wg KEVuY29kZWRBdXRoU3RyU2l6ZSk7DQo+ID4gKyAgICAgICAgaWYgKEVuY29kZWRBdXRoU3RyaW5n ID09IE5VTEwpIHsNCj4gPiArICAgICAgICAgIGdvdG8gT05fUkVMRUFTRTsNCj4gPiArICAgICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgICAgIFN0YXR1cyA9IEJhc2U2NEVuY29kZSAoDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAoQ09OU1QgVUlOVDggKilCYXNpY0F1dGhTdHJpbmcsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICBCYXNpY0F1dGhTdHJTaXplLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgRW5jb2RlZEF1dGhTdHJpbmcsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAmRW5jb2RlZEF1 dGhTdHJTaXplDQo+ID4gKyAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgICAgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgICAgIERFQlVHICgoREVCVUdfRVJST1Is ICIlYTogQmFzZTY0RW5jb2RlIGZhaWx1cmU6ICVyXG4iLCBfX2Z1bmNfXywNCj4gU3RhdHVzKSk7 DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICBERUJVRyAoKFJFREZJU0hfSFRU UF9DQUNIRV9ERUJVRywgIiVhOiBCYXNpYyBhdXRob3JpemF0aW9uOg0KPiAlYVxuIiwgX19mdW5j X18sIEVuY29kZWRBdXRoU3RyaW5nKSk7DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAg ICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBCYXNlNjRFbmNvZGUgZmFpbHVyZTogJXJcbiIs IF9fZnVuY19fLA0KPiBTdGF0dXMpKTsNCj4gPiArICAgICAgICBnb3RvIE9OX1JFTEVBU0U7DQo+ ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIE5ld1NlcnZp Y2UgPSBDcmVhdGVSZWRmaXNoU2VydmljZSAoSG9zdCwgQXNjaWlMb2NhdGlvbiwgRW5jb2RlZEF1 dGhTdHJpbmcsDQo+IE5VTEwsIFJlc3RFeCk7DQo+ID4gKyAgaWYgKE5ld1NlcnZpY2UgPT0gTlVM TCkgew0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBDcmVhdGVSZWRmaXNoU2Vy dmljZVxuIiwgX19mdW5jX18pKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICtPTl9SRUxFQVNFOg0K PiA+ICsNCj4gPiArICBpZiAoQmFzaWNBdXRoU3RyaW5nICE9IE5VTEwpIHsNCj4gPiArICAgIFpl cm9NZW0gKEJhc2ljQXV0aFN0cmluZywgQmFzaWNBdXRoU3RyU2l6ZSk7DQo+ID4gKyAgICBGcmVl UG9vbCAoQmFzaWNBdXRoU3RyaW5nKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChFbmNv ZGVkQXV0aFN0cmluZyAhPSBOVUxMKSB7DQo+ID4gKyAgICBaZXJvTWVtIChCYXNpY0F1dGhTdHJp bmcsIEVuY29kZWRBdXRoU3RyU2l6ZSk7DQo+ID4gKyAgICBGcmVlUG9vbCAoRW5jb2RlZEF1dGhT dHJpbmcpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKFVzZXJuYW1lICE9IE5VTEwpIHsN Cj4gPiArICAgIFplcm9NZW0gKFVzZXJuYW1lLCBVc2VybmFtZVNpemUpOw0KPiA+ICsgICAgRnJl ZVBvb2wgKFVzZXJuYW1lKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChQYXNzd29yZCAh PSBOVUxMKSB7DQo+ID4gKyAgICBaZXJvTWVtIChQYXNzd29yZCwgUGFzc3dvcmRTaXplKTsNCj4g PiArICAgIEZyZWVQb29sIChQYXNzd29yZCk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAo QXNjaWlMb2NhdGlvbiAhPSBOVUxMKSB7DQo+ID4gKyAgICBGcmVlUG9vbCAoQXNjaWlMb2NhdGlv bik7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoSG9zdCAhPSBOVUxMKSB7DQo+ID4gKyAg ICBGcmVlUG9vbCAoSG9zdCk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gTmV3U2Vy dmljZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBmcmVl IHJlc291cmNlcyBpbiBSZWRmaXNoIHNlcnZpY2UuIFJlZGZpc2hTZXJ2aWNlIGlzIG5vIGxvbmdl cg0KPiBhdmFpbGFibGUNCj4gPiArICBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMgc3VjY2Vz c2Z1bGx5Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICAgUG9pbnRl ciB0byBFREtJSV9SRURGSVNIX0hUVFBfUFJPVE9DT0wNCj4gaW5zdGFuY2UuDQo+ID4gKyAgQHBh cmFtW2luXSAgUmVkZmlzaFNlcnZpY2UgIFBvaW50ZXIgdG8gUmVkZmlzaCBzZXJ2aWNlIHRvIGJl IHJlbGVhc2VkLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VTUyAgICAgUmVz cm91Y2UgaXMgcmVsZWFzZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgICAgIE90aGVy cyAgICAgICAgICBFcnJvcnMgb2NjdXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRV Uw0KPiA+ICtFRklBUEkNCj4gPiArUmVkZmlzaEZyZWVSZWRmaXNoU2VydmljZSAoDQo+ID4gKyAg SU4gIEVES0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gIFJFREZJ U0hfU0VSVklDRSAgICAgICAgICAgICAgUmVkZmlzaFNlcnZpY2UNCj4gPiArICApDQo+ID4gK3sN Cj4gPiArICBSRURGSVNIX1NFUlZJQ0VfUFJJVkFURSAgKlNlcnZpY2U7DQo+ID4gKw0KPiA+ICsg IGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoUmVkZmlzaFNlcnZpY2UgPT0gTlVMTCkpIHsNCj4gPiAr ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICBTZXJ2aWNlID0gKFJFREZJU0hfU0VSVklDRV9QUklWQVRFICopUmVkZmlzaFNlcnZpY2U7DQo+ ID4gKyAgaWYgKFNlcnZpY2UtPlNpZ25hdHVyZSAhPSBSRURGSVNIX0hUVFBfU0VSVklDRV9TSUdO QVRVUkUpIHsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogc2lnbmF0dXJlIGNo ZWNrIGZhaWx1cmVcbiIsIF9fZnVuY19fKSk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1 cm4gUmVsZWFzZVJlZGZpc2hTZXJ2aWNlIChTZXJ2aWNlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIEpTT04gdmFsdWUgaW4gZ2l2ZW4gUmVk ZmlzaFBheWxvYWQuIFJldHVybmVkIEpTT04NCj4gdmFsdWUNCj4gPiArICBpcyBhIHJlZmVyZW5j ZSB0byB0aGUgSlNPTiB2YWx1ZSBpbiBSZWRmaXNoUGF5bG9hZC4gQW55IG1vZGlmaWNhdGlvbiB0 bw0KPiByZXR1cm5lZA0KPiA+ICsgIEpTT04gdmFsdWUgd2lsbCBjaGFuZ2UgSlNPTiB2YWx1ZSBp biBSZWRmaXNoUGF5bG9hZC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAg ICAgIFBvaW50ZXIgdG8gRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MDQo+IGluc3RhbmNlLg0K PiA+ICsgIEBwYXJhbVtpbl0gIFJlZGZpc2hQYXlsb2FkICBQb2ludGVyIHRvIFJlZGZpc2ggcGF5 bG9hZC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgRURLSUlfSlNPTl9WQUxVRSAgIEpTT04g dmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4gKyAgQHJldHZhbCAgICAgTlVMTCAgICAgICAgICAgICAg IEVycm9ycyBvY2N1ci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFREtJSV9KU09OX1ZBTFVFDQo+ ID4gK0VGSUFQSQ0KPiA+ICtSZWRmaXNoSnNvbkluUmVkZmlzaFBheWxvYWQgKA0KPiA+ICsgIElO ICBFREtJSV9SRURGSVNIX0hUVFBfUFJPVE9DT0wgICpUaGlzLA0KPiA+ICsgIElOICBSRURGSVNI X1BBWUxPQUQgICAgICAgICAgICAgIFJlZGZpc2hQYXlsb2FkDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgUkVERklTSF9QQVlMT0FEX1BSSVZBVEUgICpQYXlsb2FkOw0KPiA+ICsNCj4gPiArICBp ZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFJlZGZpc2hQYXlsb2FkID09IE5VTEwpKSB7DQo+ID4gKyAg ICByZXR1cm4gTlVMTDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFBheWxvYWQgPSAoUkVERklT SF9QQVlMT0FEX1BSSVZBVEUgKilSZWRmaXNoUGF5bG9hZDsNCj4gPiArICBpZiAoUGF5bG9hZC0+ U2lnbmF0dXJlICE9IFJFREZJU0hfSFRUUF9QQVlMT0FEX1NJR05BVFVSRSkgew0KPiA+ICsgICAg REVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBzaWduYXR1cmUgY2hlY2sgZmFpbHVyZVxuIiwgX19m dW5jX18pKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBQYXlsb2FkLT5Kc29uVmFs dWU7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFBlcmZvcm0gSFRUUCBHRVQgdG8g R2V0IHJlZGZpc2ggcmVzb3VyY2UgZnJvbSBnaXZlbiByZXNvdXJjZSBVUkkgd2l0aA0KPiA+ICsg IGNhY2hlIG1lY2hhbmlzbSBzdXBwb3J0ZWQuIEl0J3MgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkg dG8gZnJlZSBSZXNwb25zZQ0KPiA+ICsgIGJ5IGNhbGxpbmcgRnJlZVJlc3BvbnNlICgpLg0KPiA+ ICsNCj4gPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgIFBvaW50ZXIgdG8gRURLSUlfUkVE RklTSF9IVFRQX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFNlcnZpY2Ug ICAgICAgUmVkZmlzaCBzZXJ2aWNlIGluc3RhbmNlIHRvIHBlcmZvcm0gSFRUUCBHRVQuDQo+ID4g KyAgQHBhcmFtW2luXSAgVXJpICAgICAgICAgICBUYXJnZXQgcmVzb3VyY2UgVVJJLg0KPiA+ICsg IEBwYXJhbVtpbl0gIFJlcXVlc3QgICAgICAgQWRkaXRpb25hbCByZXF1ZXN0IGNvbnRleHQuIFRo aXMgaXMgb3B0aW9uYWwuDQo+ID4gKyAgQHBhcmFtW291dF0gUmVzcG9uc2UgICAgICBIVFRQIHJl c3BvbnNlIGZyb20gcmVkZmlzaCBzZXJ2aWNlLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFVzZUNhY2hl ICAgICAgSWYgaXQgaXMgVFJVRSwgdGhpcyBmdW5jdGlvbiB3aWxsIHNlYXJjaCBmb3INCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlIGZpcnN0LiBJZiBpdCBpcyBGQUxTRSwg dGhpcyBmdW5jdGlvbg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBxdWVy eSBSZWRmaXNoIFVSSSBkaXJlY3RseS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NV Q0NFU1MgICAgIFJlc3JvdWNlIGlzIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0 dmFsICAgICBPdGhlcnMgICAgICAgICAgRXJyb3JzIG9jY3VyLg0KPiA+ICsNCj4gPiArKiovDQo+ ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1JlZGZpc2hHZXRSZXNvdXJjZSAoDQo+ ID4gKyAgSU4gIEVES0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4g IFJFREZJU0hfU0VSVklDRSAgICAgICAgICAgICAgU2VydmljZSwNCj4gPiArICBJTiAgRUZJX1NU UklORyAgICAgICAgICAgICAgICAgICBVcmksDQo+ID4gKyAgSU4gIFJFREZJU0hfUkVRVUVTVCAg ICAgICAgICAgICAgKlJlcXVlc3QgT1BUSU9OQUwsDQo+ID4gKyAgT1VUIFJFREZJU0hfUkVTUE9O U0UgICAgICAgICAgICAgKlJlc3BvbnNlLA0KPiA+ICsgIElOICBCT09MRUFOICAgICAgICAgICAg ICAgICAgICAgIFVzZUNhY2hlDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBSRURGSVNIX0hUVFBfQ0FDSEVfREFUQSAg ICAgKkNhY2hlRGF0YTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgUmV0cnlD b3VudDsNCj4gPiArICBSRURGSVNIX0hUVFBfQ0FDSEVfUFJJVkFURSAgKlByaXZhdGU7DQo+ID4g Kw0KPiA+ICsgIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoU2VydmljZSA9PSBOVUxMKSB8fCAoUmVz cG9uc2UgPT0gTlVMTCkgfHwNCj4gSVNfRU1QVFlfU1RSSU5HIChVcmkpKSB7DQo+ID4gKyAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgREVC VUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUcsICIlYTogR2V0IFVSSTogJXMgY2FjaGU6ICVh XG4iLA0KPiBfX2Z1bmNfXywgVXJpLCAoVXNlQ2FjaGUgPyAidHJ1ZSIgOiAiZmFsc2UiKSkpOw0K PiA+ICsNCj4gPiArICBQcml2YXRlICAgID0gUkVERklTSF9IVFRQX0NBQ0hFX1BSSVZBVEVfRlJP TV9USElTIChUaGlzKTsNCj4gPiArICBDYWNoZURhdGEgID0gTlVMTDsNCj4gPiArICBSZXRyeUNv dW50ID0gMDsNCj4gPiArICBaZXJvTWVtIChSZXNwb25zZSwgc2l6ZW9mIChSRURGSVNIX1JFU1BP TlNFKSk7DQo+ID4gKw0KPiA+ICsgIGlmIChQcml2YXRlLT5DYWNoZURpc2FibGVkKSB7DQo+ID4g KyAgICBVc2VDYWNoZSA9IEZBTFNFOw0KPiA+ICsgICAgREVCVUcgKChSRURGSVNIX0hUVFBfQ0FD SEVfREVCVUcsICIlYTogY2FjaGUgaXMgZGlzYWJsZWQgYnkNCj4gUENEIVxuIiwgX19mdW5jX18p KTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gU2VhcmNoIGZvciBjYWNo ZSBsaXN0Lg0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKFVzZUNhY2hlKSB7DQo+ID4gKyAgICBDYWNo ZURhdGEgPSBGaW5kSHR0cENhY2hlRGF0YSAoJlByaXZhdGUtPkNhY2hlTGlzdC5IZWFkLCBVcmkp Ow0KPiA+ICsgICAgaWYgKENhY2hlRGF0YSAhPSBOVUxMKSB7DQo+ID4gKyAgICAgIERFQlVHICgo UkVERklTSF9IVFRQX0NBQ0hFX0RFQlVHX1JFUVVFU1QsICIlYTogY2FjaGUgaGl0ISAlc1xuIiwN Cj4gX19mdW5jX18sIFVyaSkpOw0KPiA+ICsNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8g Q29weSBjYWNoZWQgcmVzcG9uc2UgdG8gY2FsbGVyJ3MgYnVmZmVyLg0KPiA+ICsgICAgICAvLw0K PiA+ICsgICAgICBTdGF0dXMgICAgICAgICAgICAgICA9IENvcHlSZWRmaXNoUmVzcG9uc2UgKENh Y2hlRGF0YS0+UmVzcG9uc2UsIFJlc3BvbnNlKTsNCj4gPiArICAgICAgQ2FjaGVEYXRhLT5IaXRD b3VudCArPSAxOw0KPiA+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgICAgfQ0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBHZXQgcmVzb3VyY2UgZnJvbSByZWRmaXNo IHNlcnZpY2UuDQo+ID4gKyAgLy8NCj4gPiArICBkbyB7DQo+ID4gKyAgICBSZXRyeUNvdW50ICs9 IDE7DQo+ID4gKyAgICBTdGF0dXMgICAgICA9IEh0dHBTZW5kUmVjZWl2ZSAoDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgU2VydmljZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICBVcmksDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgSHR0cE1ldGhvZEdldCwNCj4gPiArICAgICAgICAgICAg ICAgICAgICBSZXF1ZXN0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICAgIERFQlVHICgoUkVERklTSF9IVFRQX0NB Q0hFX0RFQlVHX1JFUVVFU1QsICIlYTogSFRUUCByZXF1ZXN0Og0KPiAlcyA6JXJcbiIsIF9fZnVu Y19fLCBVcmksIFN0YXR1cykpOw0KPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykgfHwg KFJldHJ5Q291bnQgPj0gUHJpdmF0ZS0NCj4gPlJldHJ5U2V0dGluZy5NYXhpbXVtUmV0cnlHZXQp KSB7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIC8vDQo+ ID4gKyAgICAvLyBSZXRyeSB3aGVuIEJNQyBpcyBub3QgcmVhZHkuDQo+ID4gKyAgICAvLw0KPiA+ ICsgICAgaWYgKChSZXNwb25zZS0+U3RhdHVzQ29kZSAhPSBOVUxMKSkgew0KPiA+ICsgICAgICBE RUJVR19DT0RFICgNCj4gPiArICAgICAgICBEdW1wUmVkZmlzaFJlc3BvbnNlIChOVUxMLCBERUJV R19FUlJPUiwgUmVzcG9uc2UpOw0KPiA+ICsgICAgICAgICk7DQo+ID4gKw0KPiA+ICsgICAgICBp ZiAoIVJlZGZpc2hSZXRyeVJlcXVpcmVkIChSZXNwb25zZS0+U3RhdHVzQ29kZSkpIHsNCj4gPiAr ICAgICAgICBicmVhazsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgLy8NCj4gPiAr ICAgICAgLy8gUmVsZWFzZSByZXNwb25zZSBmb3IgbmV4dCByb3VuZCBvZiByZXF1ZXN0Lg0KPiA+ ICsgICAgICAvLw0KPiA+ICsgICAgICBUaGlzLT5GcmVlUmVzcG9uc2UgKFRoaXMsIFJlc3BvbnNl KTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBERUJVRyAoKERFQlVHX1dBUk4sICIlYTog UmVkZmlzaEdldEJ5VXJpRXggZmFpbGVkLCByZXRyeSAoJWQvJWQpXG4iLA0KPiBfX2Z1bmNfXywg UmV0cnlDb3VudCwgUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLk1heGltdW1SZXRyeUdldCkpOw0KPiA+ ICsgICAgaWYgKFByaXZhdGUtPlJldHJ5U2V0dGluZy5SZXRyeVdhaXQgPiAwKSB7DQo+ID4gKyAg ICAgIGdCUy0+U3RhbGwgKFByaXZhdGUtPlJldHJ5U2V0dGluZy5SZXRyeVdhaXQpOw0KPiA+ICsg ICAgfQ0KPiA+ICsgIH0gd2hpbGUgKFRSVUUpOw0KPiA+ICsNCj4gPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ID4gKyAgICBERUJVR19DT0RFICgNCj4gPiArICAgICAgRHVtcFJlZGZp c2hSZXNwb25zZSAoTlVMTCwgREVCVUdfRVJST1IsIFJlc3BvbnNlKTsNCj4gPiArICAgICAgKTsN Cj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBSZXBvcnQgc3RhdHVzIGNvZGUgZm9yIFJlZGZpc2gg ZmFpbHVyZQ0KPiA+ICsgICAgLy8NCj4gPiArICAgIFJlcG9ydEh0dHBFcnJvciAoSHR0cE1ldGhv ZEdldCwgVXJpLCBSZXNwb25zZS0+U3RhdHVzQ29kZSk7DQo+ID4gKyAgICBERUJVRyAoKERFQlVH X0VSUk9SLCAiJWE6IGdldCAlcyBmYWlsZWQgKCVkLyVkKTogJXJcbiIsIF9fZnVuY19fLCBVcmks DQo+IFJldHJ5Q291bnQsIFByaXZhdGUtPlJldHJ5U2V0dGluZy5NYXhpbXVtUmV0cnlHZXQsIFN0 YXR1cykpOw0KPiA+ICsgICAgZ290byBPTl9SRUxFQVNFOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgaWYgKCFQcml2YXRlLT5DYWNoZURpc2FibGVkKSB7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAg Ly8gS2VlcCByZXNwb25zZSBpbiBjYWNoZSBsaXN0DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgU3Rh dHVzID0gQWRkSHR0cENhY2hlRGF0YSAoJlByaXZhdGUtPkNhY2hlTGlzdCwgVXJpLCBSZXNwb25z ZSk7DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIERFQlVH ICgoREVCVUdfRVJST1IsICIlYTogZmFpbGVkIHRvIGNhY2hlICVzOiAlclxuIiwgX19mdW5jX18s IFVyaSwNCj4gU3RhdHVzKSk7DQo+ID4gKyAgICAgIGdvdG8gT05fUkVMRUFTRTsNCj4gPiArICAg IH0NCj4gPiArDQo+ID4gKyAgICBERUJVR19DT0RFICgNCj4gPiArICAgICAgRGVidWdQcmludEh0 dHBDYWNoZUxpc3QgKF9fZnVuY19fLA0KPiBSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUdfRFVNUCwg JlByaXZhdGUtPkNhY2hlTGlzdCk7DQo+ID4gKyAgICAgICk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArT05fUkVMRUFTRToNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBmcmVlIHJlc291cmNlcyBpbiBSZXF1 ZXN0LiBSZXF1ZXN0IGlzIG5vIGxvbmdlciBhdmFpbGFibGUNCj4gPiArICBhZnRlciB0aGlzIGZ1 bmN0aW9uIHJldHVybnMgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBU aGlzICAgICAgICAgUG9pbnRlciB0byBFREtJSV9SRURGSVNIX0hUVFBfUFJPVE9DT0wgaW5zdGFu Y2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgUmVxdWVzdCAgICAgIEhUVFAgcmVxdWVzdCB0byBiZSBy ZWxlYXNlZC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFJlc3Jv dWNlIGlzIHJlbGVhc2VkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsICAgICBPdGhlcnMg ICAgICAgICAgRXJyb3JzIG9jY3VyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMN Cj4gPiArRUZJQVBJDQo+ID4gK1JlZGZpc2hGcmVlUmVxdWVzdCAoDQo+ID4gKyAgSU4gIEVES0lJ X1JFREZJU0hfSFRUUF9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gIFJFREZJU0hfUkVRVUVT VCAgICAgICAgICAgICAgKlJlcXVlc3QNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBpZiAoKFRo aXMgPT0gTlVMTCkgfHwgKFJlcXVlc3QgPT0gTlVMTCkpIHsNCj4gPiArICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBERUJVRyAoKFJFREZJ U0hfSFRUUF9DQUNIRV9ERUJVRywgIiVhOiBlbnRyeVxuIiwgX19mdW5jX18pKTsNCj4gPiArDQo+ ID4gKyAgcmV0dXJuIFJlbGVhc2VSZWRmaXNoUmVxdWVzdCAoUmVxdWVzdCk7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gZnJlZSByZXNvdXJjZXMgaW4gZ2l2 ZW4gUmVzcG9uc2UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICBQb2lu dGVyIHRvIEVES0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gPiArICBAcGFy YW1baW5dICBSZXNwb25zZSAgICAgSFRUUCByZXNwb25zZSB0byBiZSByZWxlYXNlZC4NCj4gPiAr DQo+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFJlc3JvdWNlIGlzIHJlbGVhc2Vk IHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsICAgICBPdGhlcnMgICAgICAgICAgRXJyb3Jz IG9jY3VyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ ID4gK1JlZGZpc2hGcmVlUmVzcG9uc2UgKA0KPiA+ICsgIElOICBFREtJSV9SRURGSVNIX0hUVFBf UFJPVE9DT0wgICpUaGlzLA0KPiA+ICsgIElOICBSRURGSVNIX1JFU1BPTlNFICAgICAgICAgICAg ICpSZXNwb25zZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIGlmICgoVGhpcyA9PSBOVUxMKSB8 fCAoUmVzcG9uc2UgPT0gTlVMTCkpIHsNCj4gPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJB TUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBERUJVRyAoKFJFREZJU0hfSFRUUF9DQUNI RV9ERUJVRywgIiVhOiBlbnRyeVxuIiwgX19mdW5jX18pKTsNCj4gPiArDQo+ID4gKyAgcmV0dXJu IFJlbGVhc2VSZWRmaXNoUmVzcG9uc2UgKFJlc3BvbnNlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBleHBpcmUgdGhlIGNhY2hlZCByZXNwb25zZSBvZiBn aXZlbiBVUkkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICBQb2ludGVy IHRvIEVES0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW1b aW5dICBVcmkgICAgICAgICAgVGFyZ2V0IHJlc3BvbnNlIG9mIFVSSS4NCj4gPiArDQo+ID4gKyAg QHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFRhcmdldCByZXNwb25zZSBpcyBleHBpcmVkIHN1 Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsICAgICBPdGhlcnMgICAgICAgICAgRXJyb3JzIG9j Y3VyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4g K1JlZGZpc2hFeHBpcmVSZXNwb25zZSAoDQo+ID4gKyAgSU4gIEVES0lJX1JFREZJU0hfSFRUUF9Q Uk9UT0NPTCAgKlRoaXMsDQo+ID4gKyAgSU4gIEVGSV9TVFJJTkcgICAgICAgICAgICAgICAgICAg VXJpDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgUkVERklTSF9IVFRQX0NBQ0hFX1BSSVZBVEUg ICpQcml2YXRlOw0KPiA+ICsgIFJFREZJU0hfSFRUUF9DQUNIRV9EQVRBICAgICAqQ2FjaGVEYXRh Ow0KPiA+ICsNCj4gPiArICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgSVNfRU1QVFlfU1RSSU5HIChV cmkpKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgREVCVUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUcsICIlYTogZXhw aXJlIFVSSTogJXNcbiIsIF9fZnVuY19fLA0KPiBVcmkpKTsNCj4gPiArDQo+ID4gKyAgUHJpdmF0 ZSA9IFJFREZJU0hfSFRUUF9DQUNIRV9QUklWQVRFX0ZST01fVEhJUyAoVGhpcyk7DQo+ID4gKw0K PiA+ICsgIENhY2hlRGF0YSA9IEZpbmRIdHRwQ2FjaGVEYXRhICgmUHJpdmF0ZS0+Q2FjaGVMaXN0 LkhlYWQsIFVyaSk7DQo+ID4gKyAgaWYgKENhY2hlRGF0YSA9PSBOVUxMKSB7DQo+ID4gKyAgICBy ZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBEZWxl dGVIdHRwQ2FjaGVEYXRhICgmUHJpdmF0ZS0+Q2FjaGVMaXN0LCBDYWNoZURhdGEpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBQZXJmb3JtIEhUVFAgUEFUQ0ggdG8gc2VuZCByZWRm aXNoIHJlc291cmNlIHRvIGdpdmVuIHJlc291cmNlIFVSSS4NCj4gPiArICBJdCdzIGNhbGxlcidz IHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgUmVzcG9uc2UgYnkgY2FsbGluZyBGcmVlUmVzcG9uc2Ug KCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgUG9pbnRlciB0byBF REtJSV9SRURGSVNIX0hUVFBfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAg U2VydmljZSAgICAgICBSZWRmaXNoIHNlcnZpY2UgaW5zdGFuY2UgdG8gcGVyZm9ybSBIVFRQIFBB VENILg0KPiA+ICsgIEBwYXJhbVtpbl0gIFVyaSAgICAgICAgICAgVGFyZ2V0IHJlc291cmNlIFVS SS4NCj4gPiArICBAcGFyYW1baW5dICBDb250ZW50ICAgICAgIERhdGEgdG8gcGF0Y2guDQo+ID4g KyAgQHBhcmFtW2luXSAgQ29udGVudFNpemUgICBTaXplIG9mIHRoZSBDb250ZW50IHRvIGJlIHNl bmQgdG8gUmVkZmlzaCBzZXJ2aWNlLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg VGhpcyBpcyBvcHRpb25hbC4gV2hlbiBDb250ZW50U2l6ZSBpcyAwLCBDb250ZW50U2l6ZQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIHNpemUgb2YgQ29udGVudC4NCj4g PiArICBAcGFyYW1baW5dICBDb250ZW50VHlwZSAgIFR5cGUgb2YgdGhlIENvbnRlbnQgdG8gYmUg c2VuZCB0byBSZWRmaXNoIHNlcnZpY2UuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUaGlzIGlzIG9wdGlvbmFsLiBXaGVuIENvbnRlbnRUeXBlIGlzIE5VTEwsIGNvbnRlbnQNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgSFRUUF9DT05URU5UX1RZUEVfQVBQ X0pTT04gd2lsbCBiZSB1c2VkLg0KPiA+ICsgIEBwYXJhbVtvdXRdIFJlc3BvbnNlICAgICAgSFRU UCByZXNwb25zZSBmcm9tIHJlZGZpc2ggc2VydmljZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAg ICAgRUZJX1NVQ0NFU1MgICAgIFJlc3JvdWNlIGlzIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4NCj4g PiArICBAcmV0dmFsICAgICBPdGhlcnMgICAgICAgICAgRXJyb3JzIG9jY3VyLg0KPiA+ICsNCj4g PiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1JlZGZpc2hQYXRjaFJl c291cmNlICgNCj4gPiArICBJTiAgRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MICAqVGhpcywN Cj4gPiArICBJTiAgUkVERklTSF9TRVJWSUNFICAgICAgICAgICAgICBTZXJ2aWNlLA0KPiA+ICsg IElOICBFRklfU1RSSU5HICAgICAgICAgICAgICAgICAgIFVyaSwNCj4gPiArICBJTiAgQ0hBUjgg ICAgICAgICAgICAgICAgICAgICAgICAqQ29udGVudCwNCj4gPiArICBJTiAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICBDb250ZW50U2l6ZSBPUFRJT05BTCwNCj4gPiArICBJTiAgQ0hBUjgg ICAgICAgICAgICAgICAgICAgICAgICAqQ29udGVudFR5cGUgT1BUSU9OQUwsDQo+ID4gKyAgT1VU IFJFREZJU0hfUkVTUE9OU0UgICAgICAgICAgICAgKlJlc3BvbnNlDQo+ID4gKyAgKQ0KPiA+ICt7 DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgUmV0cnlDb3VudDsNCj4gPiArICBSRURGSVNIX1JFUVVF U1QgICAgICAgICAgICAgUmVxdWVzdDsNCj4gPiArICBSRURGSVNIX0hUVFBfQ0FDSEVfUFJJVkFU RSAgKlByaXZhdGU7DQo+ID4gKw0KPiA+ICsgIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoU2Vydmlj ZSA9PSBOVUxMKSB8fCAoUmVzcG9uc2UgPT0gTlVMTCkgfHwNCj4gSVNfRU1QVFlfU1RSSU5HIChV cmkpIHx8IElTX0VNUFRZX1NUUklORyAoQ29udGVudCkpIHsNCj4gPiArICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBERUJVRyAoKFJFREZJ U0hfSFRUUF9DQUNIRV9ERUJVRywgIiVhOiBQYXRjaCBVUkk6ICVzXG4iLCBfX2Z1bmNfXywNCj4g VXJpKSk7DQo+ID4gKw0KPiA+ICsgIFByaXZhdGUgICAgPSBSRURGSVNIX0hUVFBfQ0FDSEVfUFJJ VkFURV9GUk9NX1RISVMgKFRoaXMpOw0KPiA+ICsgIFJldHJ5Q291bnQgPSAwOw0KPiA+ICsgIFpl cm9NZW0gKFJlc3BvbnNlLCBzaXplb2YgKFJFREZJU0hfUkVTUE9OU0UpKTsNCj4gPiArICBaZXJv TWVtICgmUmVxdWVzdCwgc2l6ZW9mIChSRURGSVNIX1JFUVVFU1QpKTsNCj4gPiArDQo+ID4gKyAg UmVxdWVzdC5Db250ZW50ICAgICAgID0gQ29udGVudDsNCj4gPiArICBSZXF1ZXN0LkNvbnRlbnRM ZW5ndGggPSBDb250ZW50U2l6ZTsNCj4gPiArICBSZXF1ZXN0LkNvbnRlbnRUeXBlICAgPSBDb250 ZW50VHlwZTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBQYXRjaCByZXNvdXJjZSB0byBy ZWRmaXNoIHNlcnZpY2UuDQo+ID4gKyAgLy8NCj4gPiArICBkbyB7DQo+ID4gKyAgICBSZXRyeUNv dW50ICs9IDE7DQo+ID4gKyAgICBTdGF0dXMgICAgICA9IEh0dHBTZW5kUmVjZWl2ZSAoDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgU2VydmljZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICBV cmksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgSHR0cE1ldGhvZFBhdGNoLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICZSZXF1ZXN0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIFJlc3Bv bnNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICAgIERFQlVHICgoUkVERklT SF9IVFRQX0NBQ0hFX0RFQlVHX1JFUVVFU1QsICIlYTogSFRUUCByZXF1ZXN0Og0KPiAlcyA6JXJc biIsIF9fZnVuY19fLCBVcmksIFN0YXR1cykpOw0KPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0 YXR1cykgfHwgKFJldHJ5Q291bnQgPj0gUHJpdmF0ZS0NCj4gPlJldHJ5U2V0dGluZy5NYXhpbXVt UmV0cnlQYXRjaCkpIHsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ ICsgICAgLy8NCj4gPiArICAgIC8vIFJldHJ5IHdoZW4gQk1DIGlzIG5vdCByZWFkeS4NCj4gPiAr ICAgIC8vDQo+ID4gKyAgICBpZiAoKFJlc3BvbnNlLT5TdGF0dXNDb2RlICE9IE5VTEwpKSB7DQo+ ID4gKyAgICAgIERFQlVHX0NPREUgKA0KPiA+ICsgICAgICAgIER1bXBSZWRmaXNoUmVzcG9uc2Ug KE5VTEwsIERFQlVHX0VSUk9SLCBSZXNwb25zZSk7DQo+ID4gKyAgICAgICAgKTsNCj4gPiArDQo+ ID4gKyAgICAgIGlmICghUmVkZmlzaFJldHJ5UmVxdWlyZWQgKFJlc3BvbnNlLT5TdGF0dXNDb2Rl KSkgew0KPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAg ICAvLw0KPiA+ICsgICAgICAvLyBSZWxlYXNlIHJlc3BvbnNlIGZvciBuZXh0IHJvdW5kIG9mIHJl cXVlc3QuDQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIFRoaXMtPkZyZWVSZXNwb25zZSAoVGhp cywgUmVzcG9uc2UpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIERFQlVHICgoREVCVUdf V0FSTiwgIiVhOiBSZWRmaXNoUGF0Y2hUb1VyaUV4IGZhaWxlZCwgcmV0cnkgKCVkLyVkKVxuIiwN Cj4gX19mdW5jX18sIFJldHJ5Q291bnQsIFByaXZhdGUtPlJldHJ5U2V0dGluZy5NYXhpbXVtUmV0 cnlQYXRjaCkpOw0KPiA+ICsgICAgaWYgKFByaXZhdGUtPlJldHJ5U2V0dGluZy5SZXRyeVdhaXQg PiAwKSB7DQo+ID4gKyAgICAgIGdCUy0+U3RhbGwgKFByaXZhdGUtPlJldHJ5U2V0dGluZy5SZXRy eVdhaXQpOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0gd2hpbGUgKFRSVUUpOw0KPiA+ICsNCj4gPiAr ICAvLw0KPiA+ICsgIC8vIFJlZGZpc2ggcmVzb3VyY2UgaXMgdXBkYXRlZC4gQXV0b21hdGljYWxs eSBleHBpcmUgdGhlIGNhY2hlZCByZXNwb25zZQ0KPiA+ICsgIC8vIHNvIGFwcGxpY2F0aW9uIGNh biBkaXJlY3RseSBnZXQgcmVzb3VyY2UgZnJvbSBSZWRmaXNoIHNlcnZpY2UgYWdhaW4uDQo+ID4g KyAgLy8NCj4gPiArICBERUJVRyAoKFJFREZJU0hfSFRUUF9DQUNIRV9ERUJVRywgIiVhOiBSZXNv dXJjZSBpcyB1cGRhdGVkLCBleHBpcmUNCj4gVVJJOiAlc1xuIiwgX19mdW5jX18sIFVyaSkpOw0K PiA+ICsgIFJlZGZpc2hFeHBpcmVSZXNwb25zZSAoVGhpcywgVXJpKTsNCj4gPiArDQo+ID4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgREVCVUdfQ09ERSAoDQo+ID4gKyAg ICAgIER1bXBSZWRmaXNoUmVzcG9uc2UgKE5VTEwsIERFQlVHX0VSUk9SLCBSZXNwb25zZSk7DQo+ ID4gKyAgICAgICk7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gUmVwb3J0IHN0YXR1cyBjb2Rl IGZvciBSZWRmaXNoIGZhaWx1cmUNCj4gPiArICAgIC8vDQo+ID4gKyAgICBSZXBvcnRIdHRwRXJy b3IgKEh0dHBNZXRob2RQYXRjaCwgVXJpLCBSZXNwb25zZS0+U3RhdHVzQ29kZSk7DQo+ID4gKyAg ICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IHBhdGNoICVzIGZhaWxlZCAoJWQvJWQpOiAlclxu IiwgX19mdW5jX18sDQo+IFVyaSwgUmV0cnlDb3VudCwgUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLk1h eGltdW1SZXRyeVBhdGNoLCBTdGF0dXMpKTsNCj4gPiArICAgIGdvdG8gT05fUkVMRUFTRTsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICtPTl9SRUxFQVNFOg0KPiA+ICsNCj4gPiArICByZXR1cm4gU3Rh dHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBQZXJmb3JtIEhUVFAgUFVUIHRv IHNlbmQgcmVkZmlzaCByZXNvdXJjZSB0byBnaXZlbiByZXNvdXJjZSBVUkkuDQo+ID4gKyAgSXQn cyBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIFJlc3BvbnNlIGJ5IGNhbGxpbmcgRnJl ZVJlc3BvbnNlICgpLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgIFBv aW50ZXIgdG8gRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MIGluc3RhbmNlLg0KPiA+ICsgIEBw YXJhbVtpbl0gIFNlcnZpY2UgICAgICAgUmVkZmlzaCBzZXJ2aWNlIGluc3RhbmNlIHRvIHBlcmZv cm0gSFRUUCBQVVQuDQo+ID4gKyAgQHBhcmFtW2luXSAgVXJpICAgICAgICAgICBUYXJnZXQgcmVz b3VyY2UgVVJJLg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRlbnQgICAgICAgRGF0YSB0byBwdXQu DQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGVudFNpemUgICBTaXplIG9mIHRoZSBDb250ZW50IHRv IGJlIHNlbmQgdG8gUmVkZmlzaCBzZXJ2aWNlLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVGhpcyBpcyBvcHRpb25hbC4gV2hlbiBDb250ZW50U2l6ZSBpcyAwLCBDb250ZW50U2l6 ZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIHNpemUgb2YgQ29udGVu dC4NCj4gPiArICBAcGFyYW1baW5dICBDb250ZW50VHlwZSAgIFR5cGUgb2YgdGhlIENvbnRlbnQg dG8gYmUgc2VuZCB0byBSZWRmaXNoIHNlcnZpY2UuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUaGlzIGlzIG9wdGlvbmFsLiBXaGVuIENvbnRlbnRUeXBlIGlzIE5VTEwsIGNvbnRl bnQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgSFRUUF9DT05URU5UX1RZ UEVfQVBQX0pTT04gd2lsbCBiZSB1c2VkLg0KPiA+ICsgIEBwYXJhbVtvdXRdIFJlc3BvbnNlICAg ICAgSFRUUCByZXNwb25zZSBmcm9tIHJlZGZpc2ggc2VydmljZS4NCj4gPiArDQo+ID4gKyAgQHJl dHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFJlc3JvdWNlIGlzIHJldHVybmVkIHN1Y2Nlc3NmdWxs eS4NCj4gPiArICBAcmV0dmFsICAgICBPdGhlcnMgICAgICAgICAgRXJyb3JzIG9jY3VyLg0KPiA+ ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArRUZJQVBJDQo+ID4gK1JlZGZpc2hQ dXRSZXNvdXJjZSAoDQo+ID4gKyAgSU4gIEVES0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTCAgKlRo aXMsDQo+ID4gKyAgSU4gIFJFREZJU0hfU0VSVklDRSAgICAgICAgICAgICAgU2VydmljZSwNCj4g PiArICBJTiAgRUZJX1NUUklORyAgICAgICAgICAgICAgICAgICBVcmksDQo+ID4gKyAgSU4gIENI QVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkNvbnRlbnQsDQo+ID4gKyAgSU4gIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgQ29udGVudFNpemUgT1BUSU9OQUwsDQo+ID4gKyAgSU4gIENI QVI4ICAgICAgICAgICAgICAgICAgICAgICAgKkNvbnRlbnRUeXBlIE9QVElPTkFMLA0KPiA+ICsg IE9VVCBSRURGSVNIX1JFU1BPTlNFICAgICAgICAgICAgICpSZXNwb25zZQ0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgIFJldHJ5Q291bnQ7DQo+ID4gKyAgUkVERklTSF9S RVFVRVNUICAgICAgICAgICAgIFJlcXVlc3Q7DQo+ID4gKyAgUkVERklTSF9IVFRQX0NBQ0hFX1BS SVZBVEUgICpQcml2YXRlOw0KPiA+ICsNCj4gPiArICBpZiAoKFRoaXMgPT0gTlVMTCkgfHwgKFNl cnZpY2UgPT0gTlVMTCkgfHwgKFJlc3BvbnNlID09IE5VTEwpIHx8DQo+IElTX0VNUFRZX1NUUklO RyAoVXJpKSB8fCBJU19FTVBUWV9TVFJJTkcgKENvbnRlbnQpKSB7DQo+ID4gKyAgICByZXR1cm4g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgREVCVUcgKChS RURGSVNIX0hUVFBfQ0FDSEVfREVCVUcsICIlYTogUHV0IFVSSTogJXNcbiIsIF9fZnVuY19fLA0K PiBVcmkpKTsNCj4gPiArDQo+ID4gKyAgUHJpdmF0ZSAgICA9IFJFREZJU0hfSFRUUF9DQUNIRV9Q UklWQVRFX0ZST01fVEhJUyAoVGhpcyk7DQo+ID4gKyAgUmV0cnlDb3VudCA9IDA7DQo+ID4gKyAg WmVyb01lbSAoUmVzcG9uc2UsIHNpemVvZiAoUkVERklTSF9SRVNQT05TRSkpOw0KPiA+ICsgIFpl cm9NZW0gKCZSZXF1ZXN0LCBzaXplb2YgKFJFREZJU0hfUkVRVUVTVCkpOw0KPiA+ICsNCj4gPiAr ICBSZXF1ZXN0LkNvbnRlbnQgICAgICAgPSBDb250ZW50Ow0KPiA+ICsgIFJlcXVlc3QuQ29udGVu dExlbmd0aCA9IENvbnRlbnRTaXplOw0KPiA+ICsgIFJlcXVlc3QuQ29udGVudFR5cGUgICA9IENv bnRlbnRUeXBlOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFBhdGNoIHJlc291cmNlIHRv IHJlZGZpc2ggc2VydmljZS4NCj4gPiArICAvLw0KPiA+ICsgIGRvIHsNCj4gPiArICAgIFJldHJ5 Q291bnQgKz0gMTsNCj4gPiArICAgIFN0YXR1cyAgICAgID0gSHR0cFNlbmRSZWNlaXZlICgNCj4g PiArICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg IFVyaSwNCj4gPiArICAgICAgICAgICAgICAgICAgICBIdHRwTWV0aG9kUHV0LA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICZSZXF1ZXN0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIFJlc3Bv bnNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICAgIERFQlVHICgoUkVERklT SF9IVFRQX0NBQ0hFX0RFQlVHX1JFUVVFU1QsICIlYTogSFRUUCByZXF1ZXN0Og0KPiAlcyA6JXJc biIsIF9fZnVuY19fLCBVcmksIFN0YXR1cykpOw0KPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0 YXR1cykgfHwgKFJldHJ5Q291bnQgPj0gUHJpdmF0ZS0NCj4gPlJldHJ5U2V0dGluZy5NYXhpbXVt UmV0cnlQdXQpKSB7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiAr ICAgIC8vDQo+ID4gKyAgICAvLyBSZXRyeSB3aGVuIEJNQyBpcyBub3QgcmVhZHkuDQo+ID4gKyAg ICAvLw0KPiA+ICsgICAgaWYgKChSZXNwb25zZS0+U3RhdHVzQ29kZSAhPSBOVUxMKSkgew0KPiA+ ICsgICAgICBERUJVR19DT0RFICgNCj4gPiArICAgICAgICBEdW1wUmVkZmlzaFJlc3BvbnNlIChO VUxMLCBERUJVR19FUlJPUiwgUmVzcG9uc2UpOw0KPiA+ICsgICAgICAgICk7DQo+ID4gKw0KPiA+ ICsgICAgICBpZiAoIVJlZGZpc2hSZXRyeVJlcXVpcmVkIChSZXNwb25zZS0+U3RhdHVzQ29kZSkp IHsNCj4gPiArICAgICAgICBicmVhazsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAg Ly8NCj4gPiArICAgICAgLy8gUmVsZWFzZSByZXNwb25zZSBmb3IgbmV4dCByb3VuZCBvZiByZXF1 ZXN0Lg0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICBUaGlzLT5GcmVlUmVzcG9uc2UgKFRoaXMs IFJlc3BvbnNlKTsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBERUJVRyAoKERFQlVHX1dB Uk4sICIlYTogUmVkZmlzaFB1dFRvVXJpIGZhaWxlZCwgcmV0cnkgKCVkLyVkKVxuIiwNCj4gX19m dW5jX18sIFJldHJ5Q291bnQsIFByaXZhdGUtPlJldHJ5U2V0dGluZy5NYXhpbXVtUmV0cnlQdXQp KTsNCj4gPiArICAgIGlmIChQcml2YXRlLT5SZXRyeVNldHRpbmcuUmV0cnlXYWl0ID4gMCkgew0K PiA+ICsgICAgICBnQlMtPlN0YWxsIChQcml2YXRlLT5SZXRyeVNldHRpbmcuUmV0cnlXYWl0KTsN Cj4gPiArICAgIH0NCj4gPiArICB9IHdoaWxlIChUUlVFKTsNCj4gPiArDQo+ID4gKyAgLy8NCj4g PiArICAvLyBSZWRmaXNoIHJlc291cmNlIGlzIHVwZGF0ZWQuIEF1dG9tYXRpY2FsbHkgZXhwaXJl IHRoZSBjYWNoZWQgcmVzcG9uc2UNCj4gPiArICAvLyBzbyBhcHBsaWNhdGlvbiBjYW4gZGlyZWN0 bHkgZ2V0IHJlc291cmNlIGZyb20gUmVkZmlzaCBzZXJ2aWNlIGFnYWluLg0KPiA+ICsgIC8vDQo+ ID4gKyAgREVCVUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUcsICIlYTogUmVzb3VyY2UgaXMg dXBkYXRlZCwgZXhwaXJlDQo+IFVSSTogJXNcbiIsIF9fZnVuY19fLCBVcmkpKTsNCj4gPiArICBS ZWRmaXNoRXhwaXJlUmVzcG9uc2UgKFRoaXMsIFVyaSk7DQo+ID4gKw0KPiA+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIERFQlVHX0NPREUgKA0KPiA+ICsgICAgICBEdW1w UmVkZmlzaFJlc3BvbnNlIChOVUxMLCBERUJVR19FUlJPUiwgUmVzcG9uc2UpOw0KPiA+ICsgICAg ICApOw0KPiA+ICsgICAgLy8NCj4gPiArICAgIC8vIFJlcG9ydCBzdGF0dXMgY29kZSBmb3IgUmVk ZmlzaCBmYWlsdXJlDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgUmVwb3J0SHR0cEVycm9yIChIdHRw TWV0aG9kUHV0LCBVcmksIFJlc3BvbnNlLT5TdGF0dXNDb2RlKTsNCj4gPiArICAgIERFQlVHICgo REVCVUdfRVJST1IsICIlYTogcHV0ICVzIGZhaWxlZCAoJWQvJWQpOiAlclxuIiwgX19mdW5jX18s IFVyaSwNCj4gUmV0cnlDb3VudCwgUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLk1heGltdW1SZXRyeVB1 dCwgU3RhdHVzKSk7DQo+ID4gKyAgICBnb3RvIE9OX1JFTEVBU0U7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArT05fUkVMRUFTRToNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUGVyZm9ybSBIVFRQIFBPU1QgdG8gc2VuZCByZWRmaXNo IHJlc291cmNlIHRvIGdpdmVuIHJlc291cmNlIFVSSS4NCj4gPiArICBJdCdzIGNhbGxlcidzIHJl c3BvbnNpYmlsaXR5IHRvIGZyZWUgUmVzcG9uc2UgYnkgY2FsbGluZyBGcmVlUmVzcG9uc2UgKCku DQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAgUG9pbnRlciB0byBFREtJ SV9SRURGSVNIX0hUVFBfUFJPVE9DT0wgaW5zdGFuY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgU2Vy dmljZSAgICAgICBSZWRmaXNoIHNlcnZpY2UgaW5zdGFuY2UgdG8gcGVyZm9ybSBIVFRQIFBPU1Qu DQo+ID4gKyAgQHBhcmFtW2luXSAgVXJpICAgICAgICAgICBUYXJnZXQgcmVzb3VyY2UgVVJJLg0K PiA+ICsgIEBwYXJhbVtpbl0gIENvbnRlbnQgICAgICAgRGF0YSB0byBwb3N0Lg0KPiA+ICsgIEBw YXJhbVtpbl0gIENvbnRlbnRTaXplICAgU2l6ZSBvZiB0aGUgQ29udGVudCB0byBiZSBzZW5kIHRv IFJlZGZpc2ggc2VydmljZS4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMg aXMgb3B0aW9uYWwuIFdoZW4gQ29udGVudFNpemUgaXMgMCwgQ29udGVudFNpemUNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBzaXplIG9mIENvbnRlbnQuDQo+ID4gKyAg QHBhcmFtW2luXSAgQ29udGVudFR5cGUgICBUeXBlIG9mIHRoZSBDb250ZW50IHRvIGJlIHNlbmQg dG8gUmVkZmlzaCBzZXJ2aWNlLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhp cyBpcyBvcHRpb25hbC4gV2hlbiBDb250ZW50VHlwZSBpcyBOVUxMLCBjb250ZW50DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIEhUVFBfQ09OVEVOVF9UWVBFX0FQUF9KU09O IHdpbGwgYmUgdXNlZC4NCj4gPiArICBAcGFyYW1bb3V0XSBSZXNwb25zZSAgICAgIEhUVFAgcmVz cG9uc2UgZnJvbSByZWRmaXNoIHNlcnZpY2UuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgIEVG SV9TVUNDRVNTICAgICBSZXNyb3VjZSBpcyByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAg QHJldHZhbCAgICAgT3RoZXJzICAgICAgICAgIEVycm9ycyBvY2N1ci4NCj4gPiArDQo+ID4gKyoq Lw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtSZWRmaXNoUG9zdFJlc291cmNl ICgNCj4gPiArICBJTiAgRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MICAqVGhpcywNCj4gPiAr ICBJTiAgUkVERklTSF9TRVJWSUNFICAgICAgICAgICAgICBTZXJ2aWNlLA0KPiA+ICsgIElOICBF RklfU1RSSU5HICAgICAgICAgICAgICAgICAgIFVyaSwNCj4gPiArICBJTiAgQ0hBUjggICAgICAg ICAgICAgICAgICAgICAgICAqQ29udGVudCwNCj4gPiArICBJTiAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICBDb250ZW50U2l6ZSBPUFRJT05BTCwNCj4gPiArICBJTiAgQ0hBUjggICAgICAg ICAgICAgICAgICAgICAgICAqQ29udGVudFR5cGUgT1BUSU9OQUwsDQo+ID4gKyAgT1VUIFJFREZJ U0hfUkVTUE9OU0UgICAgICAgICAgICAgKlJlc3BvbnNlDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgUmV0cnlDb3VudDsNCj4gPiArICBSRURGSVNIX1JFUVVFU1QgICAg ICAgICAgICAgUmVxdWVzdDsNCj4gPiArICBSRURGSVNIX0hUVFBfQ0FDSEVfUFJJVkFURSAgKlBy aXZhdGU7DQo+ID4gKw0KPiA+ICsgIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoU2VydmljZSA9PSBO VUxMKSB8fCAoUmVzcG9uc2UgPT0gTlVMTCkgfHwNCj4gSVNfRU1QVFlfU1RSSU5HIChVcmkpIHx8 IElTX0VNUFRZX1NUUklORyAoQ29udGVudCkpIHsNCj4gPiArICAgIHJldHVybiBFRklfSU5WQUxJ RF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBERUJVRyAoKFJFREZJU0hfSFRU UF9DQUNIRV9ERUJVRywgIiVhOiBQb3N0IFVSSTogJXNcbiIsIF9fZnVuY19fLA0KPiBVcmkpKTsN Cj4gPiArDQo+ID4gKyAgUHJpdmF0ZSAgICA9IFJFREZJU0hfSFRUUF9DQUNIRV9QUklWQVRFX0ZS T01fVEhJUyAoVGhpcyk7DQo+ID4gKyAgUmV0cnlDb3VudCA9IDA7DQo+ID4gKyAgWmVyb01lbSAo UmVzcG9uc2UsIHNpemVvZiAoUkVERklTSF9SRVNQT05TRSkpOw0KPiA+ICsgIFplcm9NZW0gKCZS ZXF1ZXN0LCBzaXplb2YgKFJFREZJU0hfUkVRVUVTVCkpOw0KPiA+ICsNCj4gPiArICBSZXF1ZXN0 LkNvbnRlbnQgICAgICAgPSBDb250ZW50Ow0KPiA+ICsgIFJlcXVlc3QuQ29udGVudExlbmd0aCA9 IENvbnRlbnRTaXplOw0KPiA+ICsgIFJlcXVlc3QuQ29udGVudFR5cGUgICA9IENvbnRlbnRUeXBl Ow0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFBhdGNoIHJlc291cmNlIHRvIHJlZGZpc2gg c2VydmljZS4NCj4gPiArICAvLw0KPiA+ICsgIGRvIHsNCj4gPiArICAgIFJldHJ5Q291bnQgKz0g MTsNCj4gPiArICAgIFN0YXR1cyAgICAgID0gSHR0cFNlbmRSZWNlaXZlICgNCj4gPiArICAgICAg ICAgICAgICAgICAgICBTZXJ2aWNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIFVyaSwNCj4g PiArICAgICAgICAgICAgICAgICAgICBIdHRwTWV0aG9kUG9zdCwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAmUmVxdWVzdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICBSZXNwb25zZQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICBERUJVRyAoKFJFREZJU0hfSFRUUF9D QUNIRV9ERUJVR19SRVFVRVNULCAiJWE6IEhUVFAgcmVxdWVzdDoNCj4gJXMgOiVyXG4iLCBfX2Z1 bmNfXywgVXJpLCBTdGF0dXMpKTsNCj4gPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpIHx8 IChSZXRyeUNvdW50ID49IFByaXZhdGUtDQo+ID5SZXRyeVNldHRpbmcuTWF4aW11bVJldHJ5UG9z dCkpIHsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgLy8N Cj4gPiArICAgIC8vIFJldHJ5IHdoZW4gQk1DIGlzIG5vdCByZWFkeS4NCj4gPiArICAgIC8vDQo+ ID4gKyAgICBpZiAoKFJlc3BvbnNlLT5TdGF0dXNDb2RlICE9IE5VTEwpKSB7DQo+ID4gKyAgICAg IERFQlVHX0NPREUgKA0KPiA+ICsgICAgICAgIER1bXBSZWRmaXNoUmVzcG9uc2UgKE5VTEwsIERF QlVHX0VSUk9SLCBSZXNwb25zZSk7DQo+ID4gKyAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgICAg IGlmICghUmVkZmlzaFJldHJ5UmVxdWlyZWQgKFJlc3BvbnNlLT5TdGF0dXNDb2RlKSkgew0KPiA+ ICsgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAvLw0KPiA+ ICsgICAgICAvLyBSZWxlYXNlIHJlc3BvbnNlIGZvciBuZXh0IHJvdW5kIG9mIHJlcXVlc3QuDQo+ ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIFRoaXMtPkZyZWVSZXNwb25zZSAoVGhpcywgUmVzcG9u c2UpOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIERFQlVHICgoREVCVUdfV0FSTiwgIiVh OiBSZWRmaXNoUG9zdFRvVXJpIGZhaWxlZCwgcmV0cnkgKCVkLyVkKVxuIiwNCj4gX19mdW5jX18s IFJldHJ5Q291bnQsIFByaXZhdGUtPlJldHJ5U2V0dGluZy5NYXhpbXVtUmV0cnlQb3N0KSk7DQo+ ID4gKyAgICBpZiAoUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLlJldHJ5V2FpdCA+IDApIHsNCj4gPiAr ICAgICAgZ0JTLT5TdGFsbCAoUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLlJldHJ5V2FpdCk7DQo+ID4g KyAgICB9DQo+ID4gKyAgfSB3aGlsZSAoVFJVRSk7DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAg Ly8gUmVkZmlzaCByZXNvdXJjZSBpcyB1cGRhdGVkLiBBdXRvbWF0aWNhbGx5IGV4cGlyZSB0aGUg Y2FjaGVkIHJlc3BvbnNlDQo+ID4gKyAgLy8gc28gYXBwbGljYXRpb24gY2FuIGRpcmVjdGx5IGdl dCByZXNvdXJjZSBmcm9tIFJlZGZpc2ggc2VydmljZSBhZ2Fpbi4NCj4gPiArICAvLw0KPiA+ICsg IERFQlVHICgoUkVERklTSF9IVFRQX0NBQ0hFX0RFQlVHLCAiJWE6IFJlc291cmNlIGlzIHVwZGF0 ZWQsIGV4cGlyZQ0KPiBVUkk6ICVzXG4iLCBfX2Z1bmNfXywgVXJpKSk7DQo+ID4gKyAgUmVkZmlz aEV4cGlyZVJlc3BvbnNlIChUaGlzLCBVcmkpOw0KPiA+ICsNCj4gPiArICBpZiAoRUZJX0VSUk9S IChTdGF0dXMpKSB7DQo+ID4gKyAgICBERUJVR19DT0RFICgNCj4gPiArICAgICAgRHVtcFJlZGZp c2hSZXNwb25zZSAoTlVMTCwgREVCVUdfRVJST1IsIFJlc3BvbnNlKTsNCj4gPiArICAgICAgKTsN Cj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBSZXBvcnQgc3RhdHVzIGNvZGUgZm9yIFJlZGZpc2gg ZmFpbHVyZQ0KPiA+ICsgICAgLy8NCj4gPiArICAgIFJlcG9ydEh0dHBFcnJvciAoSHR0cE1ldGhv ZFBvc3QsIFVyaSwgUmVzcG9uc2UtPlN0YXR1c0NvZGUpOw0KPiA+ICsgICAgREVCVUcgKChERUJV R19FUlJPUiwgIiVhOiBwb3N0ICVzIGZhaWxlZCAoJWQvJWQpOiAlclxuIiwgX19mdW5jX18sIFVy aSwNCj4gUmV0cnlDb3VudCwgUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLk1heGltdW1SZXRyeVBvc3Qs IFN0YXR1cykpOw0KPiA+ICsgICAgZ290byBPTl9SRUxFQVNFOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gK09OX1JFTEVBU0U6DQo+ID4gKw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFBlcmZvcm0gSFRUUCBERUxFVEUgdG8gZGVsZXRlIHJlZGZp c2ggcmVzb3VyY2Ugb24gZ2l2ZW4gcmVzb3VyY2UgVVJJLg0KPiA+ICsgIEl0J3MgY2FsbGVyJ3Mg cmVzcG9uc2liaWxpdHkgdG8gZnJlZSBSZXNwb25zZSBieSBjYWxsaW5nIEZyZWVSZXNwb25zZSAo KS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICBQb2ludGVyIHRvIEVE S0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gPiArICBAcGFyYW1baW5dICBT ZXJ2aWNlICAgICAgIFJlZGZpc2ggc2VydmljZSBpbnN0YW5jZSB0byBwZXJmb3JtIEhUVFAgREVM RVRFLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFVyaSAgICAgICAgICAgVGFyZ2V0IHJlc291cmNlIFVS SS4NCj4gPiArICBAcGFyYW1baW5dICBDb250ZW50ICAgICAgIEpTT04gcmVwcmVzZW50ZWQgcHJv cGVydGllcyB0byBiZSBkZWxldGVkLiBUaGlzIGlzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvcHRpb25hbC4NCj4gPiArICBAcGFyYW1baW5dICBDb250ZW50U2l6ZSAgIFNpemUg b2YgdGhlIENvbnRlbnQgdG8gYmUgc2VuZCB0byBSZWRmaXNoIHNlcnZpY2UuDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIG9wdGlvbmFsLiBXaGVuIENvbnRlbnRTaXpl IGlzIDAsIENvbnRlbnRTaXplDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0 aGUgc2l6ZSBvZiBDb250ZW50IGlmIENvbnRlbnQgaXMgbm90IE5VTEwuDQo+ID4gKyAgQHBhcmFt W2luXSAgQ29udGVudFR5cGUgICBUeXBlIG9mIHRoZSBDb250ZW50IHRvIGJlIHNlbmQgdG8gUmVk ZmlzaCBzZXJ2aWNlLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBv cHRpb25hbC4gV2hlbiBDb250ZW50IGlzIG5vdCBOVUxMIGFuZA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ29udGVudFR5cGUgaXMgTlVMTCwgY29udGVudCB0eXBlDQo+IEhUVFBf Q09OVEVOVF9UWVBFX0FQUF9KU09ODQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3 aWxsIGJlIHVzZWQuDQo+ID4gKyAgQHBhcmFtW291dF0gUmVzcG9uc2UgICAgICBIVFRQIHJlc3Bv bnNlIGZyb20gcmVkZmlzaCBzZXJ2aWNlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICBFRklf U1VDQ0VTUyAgICAgUmVzcm91Y2UgaXMgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEBy ZXR2YWwgICAgIE90aGVycyAgICAgICAgICBFcnJvcnMgb2NjdXIuDQo+ID4gKw0KPiA+ICsqKi8N Cj4gPiArRUZJX1NUQVRVUw0KPiA+ICtFRklBUEkNCj4gPiArUmVkZmlzaERlbGV0ZVJlc291cmNl ICgNCj4gPiArICBJTiAgRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MICAqVGhpcywNCj4gPiAr ICBJTiAgUkVERklTSF9TRVJWSUNFICAgICAgICAgICAgICBTZXJ2aWNlLA0KPiA+ICsgIElOICBF RklfU1RSSU5HICAgICAgICAgICAgICAgICAgIFVyaSwNCj4gPiArICBJTiAgQ0hBUjggICAgICAg ICAgICAgICAgICAgICAgICAqQ29udGVudCBPUFRJT05BTCwNCj4gPiArICBJTiAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICBDb250ZW50U2l6ZSBPUFRJT05BTCwNCj4gPiArICBJTiAgQ0hB UjggICAgICAgICAgICAgICAgICAgICAgICAqQ29udGVudFR5cGUgT1BUSU9OQUwsDQo+ID4gKyAg T1VUIFJFREZJU0hfUkVTUE9OU0UgICAgICAgICAgICAgKlJlc3BvbnNlDQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgUmV0cnlDb3VudDsNCj4gPiArICBSRURGSVNIX1JF UVVFU1QgICAgICAgICAgICAgUmVxdWVzdDsNCj4gPiArICBSRURGSVNIX0hUVFBfQ0FDSEVfUFJJ VkFURSAgKlByaXZhdGU7DQo+ID4gKw0KPiA+ICsgIGlmICgoVGhpcyA9PSBOVUxMKSB8fCAoU2Vy dmljZSA9PSBOVUxMKSB8fCAoUmVzcG9uc2UgPT0gTlVMTCkgfHwNCj4gSVNfRU1QVFlfU1RSSU5H IChVcmkpKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgREVCVUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUcsICIlYTog RGVsZXRlIFVSSTogJXNcbiIsIF9fZnVuY19fLA0KPiBVcmkpKTsNCj4gPiArDQo+ID4gKyAgUHJp dmF0ZSAgICA9IFJFREZJU0hfSFRUUF9DQUNIRV9QUklWQVRFX0ZST01fVEhJUyAoVGhpcyk7DQo+ ID4gKyAgUmV0cnlDb3VudCA9IDA7DQo+ID4gKyAgWmVyb01lbSAoUmVzcG9uc2UsIHNpemVvZiAo UkVERklTSF9SRVNQT05TRSkpOw0KPiA+ICsgIFplcm9NZW0gKCZSZXF1ZXN0LCBzaXplb2YgKFJF REZJU0hfUkVRVUVTVCkpOw0KPiA+ICsNCj4gPiArICBSZXF1ZXN0LkNvbnRlbnQgICAgICAgPSBD b250ZW50Ow0KPiA+ICsgIFJlcXVlc3QuQ29udGVudExlbmd0aCA9IENvbnRlbnRTaXplOw0KPiA+ ICsgIFJlcXVlc3QuQ29udGVudFR5cGUgICA9IENvbnRlbnRUeXBlOw0KPiA+ICsNCj4gPiArICAv Lw0KPiA+ICsgIC8vIFBhdGNoIHJlc291cmNlIHRvIHJlZGZpc2ggc2VydmljZS4NCj4gPiArICAv Lw0KPiA+ICsgIGRvIHsNCj4gPiArICAgIFJldHJ5Q291bnQgKz0gMTsNCj4gPiArICAgIFN0YXR1 cyAgICAgID0gSHR0cFNlbmRSZWNlaXZlICgNCj4gPiArICAgICAgICAgICAgICAgICAgICBTZXJ2 aWNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIFVyaSwNCj4gPiArICAgICAgICAgICAgICAg ICAgICBIdHRwTWV0aG9kRGVsZXRlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICZSZXF1ZXN0 LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgKTsNCj4gPiArICAgIERFQlVHICgoUkVERklTSF9IVFRQX0NBQ0hFX0RFQlVHX1JFUVVF U1QsICIlYTogSFRUUCByZXF1ZXN0Og0KPiAlcyA6JXJcbiIsIF9fZnVuY19fLCBVcmksIFN0YXR1 cykpOw0KPiA+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykgfHwgKFJldHJ5Q291bnQgPj0g UHJpdmF0ZS0NCj4gPlJldHJ5U2V0dGluZy5NYXhpbXVtUmV0cnlEZWxldGUpKSB7DQo+ID4gKyAg ICAgIGJyZWFrOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBS ZXRyeSB3aGVuIEJNQyBpcyBub3QgcmVhZHkuDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgaWYgKChS ZXNwb25zZS0+U3RhdHVzQ29kZSAhPSBOVUxMKSkgew0KPiA+ICsgICAgICBERUJVR19DT0RFICgN Cj4gPiArICAgICAgICBEdW1wUmVkZmlzaFJlc3BvbnNlIChOVUxMLCBERUJVR19FUlJPUiwgUmVz cG9uc2UpOw0KPiA+ICsgICAgICAgICk7DQo+ID4gKw0KPiA+ICsgICAgICBpZiAoIVJlZGZpc2hS ZXRyeVJlcXVpcmVkIChSZXNwb25zZS0+U3RhdHVzQ29kZSkpIHsNCj4gPiArICAgICAgICBicmVh azsNCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8gUmVs ZWFzZSByZXNwb25zZSBmb3IgbmV4dCByb3VuZCBvZiByZXF1ZXN0Lg0KPiA+ICsgICAgICAvLw0K PiA+ICsgICAgICBUaGlzLT5GcmVlUmVzcG9uc2UgKFRoaXMsIFJlc3BvbnNlKTsNCj4gPiArICAg IH0NCj4gPiArDQo+ID4gKyAgICBERUJVRyAoKERFQlVHX1dBUk4sICIlYTogUmVkZmlzaERlbGV0 ZUJ5VXJpIGZhaWxlZCwgcmV0cnkgKCVkLyVkKVxuIiwNCj4gX19mdW5jX18sIFJldHJ5Q291bnQs IFByaXZhdGUtPlJldHJ5U2V0dGluZy5NYXhpbXVtUmV0cnlEZWxldGUpKTsNCj4gPiArICAgIGlm IChQcml2YXRlLT5SZXRyeVNldHRpbmcuUmV0cnlXYWl0ID4gMCkgew0KPiA+ICsgICAgICBnQlMt PlN0YWxsIChQcml2YXRlLT5SZXRyeVNldHRpbmcuUmV0cnlXYWl0KTsNCj4gPiArICAgIH0NCj4g PiArICB9IHdoaWxlIChUUlVFKTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBSZWRmaXNo IHJlc291cmNlIGlzIHVwZGF0ZWQuIEF1dG9tYXRpY2FsbHkgZXhwaXJlIHRoZSBjYWNoZWQgcmVz cG9uc2UNCj4gPiArICAvLyBzbyBhcHBsaWNhdGlvbiBjYW4gZGlyZWN0bHkgZ2V0IHJlc291cmNl IGZyb20gUmVkZmlzaCBzZXJ2aWNlIGFnYWluLg0KPiA+ICsgIC8vDQo+ID4gKyAgREVCVUcgKChS RURGSVNIX0hUVFBfQ0FDSEVfREVCVUcsICIlYTogUmVzb3VyY2UgaXMgdXBkYXRlZCwgZXhwaXJl DQo+IFVSSTogJXNcbiIsIF9fZnVuY19fLCBVcmkpKTsNCj4gPiArICBSZWRmaXNoRXhwaXJlUmVz cG9uc2UgKFRoaXMsIFVyaSk7DQo+ID4gKw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiArICAgIERFQlVHX0NPREUgKA0KPiA+ICsgICAgICBEdW1wUmVkZmlzaFJlc3BvbnNl IChOVUxMLCBERUJVR19FUlJPUiwgUmVzcG9uc2UpOw0KPiA+ICsgICAgICApOw0KPiA+ICsgICAg Ly8NCj4gPiArICAgIC8vIFJlcG9ydCBzdGF0dXMgY29kZSBmb3IgUmVkZmlzaCBmYWlsdXJlDQo+ ID4gKyAgICAvLw0KPiA+ICsgICAgUmVwb3J0SHR0cEVycm9yIChIdHRwTWV0aG9kRGVsZXRlLCBV cmksIFJlc3BvbnNlLT5TdGF0dXNDb2RlKTsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1Is ICIlYTogZGVsZXRlICVzIGZhaWxlZCAoJWQvJWQpOiAlclxuIiwgX19mdW5jX18sDQo+IFVyaSwg UmV0cnlDb3VudCwgUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLk1heGltdW1SZXRyeURlbGV0ZSwgU3Rh dHVzKSk7DQo+ID4gKyAgICBnb3RvIE9OX1JFTEVBU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr T05fUkVMRUFTRToNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MICBtRWRrSUlSZWRmaXNoSHR0cFByb3Rv Y29sID0gew0KPiA+ICsgIEVES0lJX1JFREZJU0hfSFRUUF9QUk9UT0NPTF9SRVZJU0lPTiwNCj4g PiArICBSZWRmaXNoQ3JlYXRlUmVkZmlzaFNlcnZpY2UsDQo+ID4gKyAgUmVkZmlzaEZyZWVSZWRm aXNoU2VydmljZSwNCj4gPiArICBSZWRmaXNoSnNvbkluUmVkZmlzaFBheWxvYWQsDQo+ID4gKyAg UmVkZmlzaEdldFJlc291cmNlLA0KPiA+ICsgIFJlZGZpc2hQYXRjaFJlc291cmNlLA0KPiA+ICsg IFJlZGZpc2hQdXRSZXNvdXJjZSwNCj4gPiArICBSZWRmaXNoUG9zdFJlc291cmNlLA0KPiA+ICsg IFJlZGZpc2hEZWxldGVSZXNvdXJjZSwNCj4gPiArICBSZWRmaXNoRnJlZVJlcXVlc3QsDQo+ID4g KyAgUmVkZmlzaEZyZWVSZXNwb25zZSwNCj4gPiArICBSZWRmaXNoRXhwaXJlUmVzcG9uc2UNCj4g PiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFVubG9hZHMgYW4gaW1hZ2UuDQo+ID4gKw0K PiA+ICsgIEBwYXJhbVtpbl0gIEltYWdlSGFuZGxlICAgICAgICAgSGFuZGxlIHRoYXQgaWRlbnRp ZmllcyB0aGUgaW1hZ2UgdG8gYmUNCj4gdW5sb2FkZWQuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIGltYWdlIGhhcyBiZWVuIHVubG9hZGVkLg0KPiA+ ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgSW1hZ2VIYW5kbGUgaXMgbm90IGEg dmFsaWQgaW1hZ2UNCj4gaGFuZGxlLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMN Cj4gPiArRUZJQVBJDQo+ID4gK1JlZGZpc2hIdHRwRHJpdmVyVW5sb2FkICgNCj4gPiArICBJTiBF RklfSEFORExFICBJbWFnZUhhbmRsZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIGlmIChtUmVk ZmlzaEh0dHBDYWNoZVByaXZhdGUgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKCFJc0xpc3RFbXB0eSAoJm1SZWRmaXNo SHR0cENhY2hlUHJpdmF0ZS0+Q2FjaGVMaXN0LkhlYWQpKSB7DQo+ID4gKyAgICBSZWxlYXNlQ2Fj aGVMaXN0ICgmbVJlZGZpc2hIdHRwQ2FjaGVQcml2YXRlLT5DYWNoZUxpc3QpOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgZ0JTLT5Vbmluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAo DQo+ID4gKyAgICAgICAgIEltYWdlSGFuZGxlLA0KPiA+ICsgICAgICAgICAmZ0Vka0lJUmVkZmlz aEh0dHBQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICZtUmVkZmlzaEh0dHBDYWNoZVByaXZh dGUtPlByb3RvY29sLA0KPiA+ICsgICAgICAgICBOVUxMDQo+ID4gKyAgICAgICAgICk7DQo+ID4g Kw0KPiA+ICsgIEZyZWVQb29sIChtUmVkZmlzaEh0dHBDYWNoZVByaXZhdGUpOw0KPiA+ICsgIG1S ZWRmaXNoSHR0cENhY2hlUHJpdmF0ZSA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBpcyBhIEVES0lJ X1JFREZJU0hfQ1JFREVOVElBTF9QUk9UT0NPTCBub3RpZmljYXRpb24gZXZlbnQgaGFuZGxlci4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSBFdmVudCAgICBFdmVudCB3aG9zZSBub3RpZmljYXRp b24gZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4NCj4gPiArICBAcGFyYW1baW5dIENvbnRleHQg IFBvaW50ZXIgdG8gdGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbidzIGNvbnRleHQuDQo+ID4gKw0K PiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArQ3JlZGVudGlhbFByb3RvY29s SW5zdGFsbGVkICgNCj4gPiArICBJTiAgRUZJX0VWRU5UICBFdmVudCwNCj4gPiArICBJTiAgVk9J RCAgICAgICAqQ29udGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgUkVERklTSF9IVFRQX0NBQ0hFX1BSSVZBVEUg ICpQcml2YXRlOw0KPiA+ICsNCj4gPiArICBQcml2YXRlID0gKFJFREZJU0hfSFRUUF9DQUNIRV9Q UklWQVRFICopQ29udGV4dDsNCj4gPiArICBpZiAoUHJpdmF0ZS0+U2lnbmF0dXJlICE9IFJFREZJ U0hfSFRUUF9EUklWRVJfU0lHTkFUVVJFKSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9S LCAiJWE6IHNpZ25hdHVyZSBjaGVjayBmYWlsdXJlXG4iLCBfX2Z1bmNfXykpOw0KPiA+ICsgICAg cmV0dXJuOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBMb2NhdGUgSElJ IGRhdGFiYXNlIHByb3RvY29sLg0KPiA+ICsgIC8vDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5Mb2Nh dGVQcm90b2NvbCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgICZnRWRrSUlSZWRmaXNoQ3JlZGVu dGlhbFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gPiArICAg ICAgICAgICAgICAgICAgKFZPSUQgKiopJlByaXZhdGUtPkNyZWRlbnRpYWxQcm90b2NvbA0KPiA+ ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGdCUy0+Q2xvc2VFdmVu dCAoRXZlbnQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBNYWluIGVudHJ5IGZv ciB0aGlzIGRyaXZlci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSBJbWFnZUhhbmRsZSAgICAg SW1hZ2UgaGFuZGxlIHRoaXMgZHJpdmVyLg0KPiA+ICsgIEBwYXJhbVtpbl0gU3lzdGVtVGFibGUg ICAgIFBvaW50ZXIgdG8gU3lzdGVtVGFibGUuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NV Q0NFU1MgICAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0VGSUFQSQ0KPiA+ICtSZWRmaXNo SHR0cEVudHJ5UG9pbnQgKA0KPiA+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxl LA0KPiA+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJsZQ0KPiA+ICsgICkNCj4g PiArew0KPiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiArICBWT0lEICAgICAgICAqUmVn aXN0cmF0aW9uOw0KPiA+ICsNCj4gPiArICBpZiAobVJlZGZpc2hIdHRwQ2FjaGVQcml2YXRlICE9 IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfQUxSRUFEWV9TVEFSVEVEOw0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgbVJlZGZpc2hIdHRwQ2FjaGVQcml2YXRlID0gQWxsb2NhdGVaZXJvUG9v bCAoc2l6ZW9mDQo+IChSRURGSVNIX0hUVFBfQ0FDSEVfUFJJVkFURSkpOw0KPiA+ICsgIGlmICht UmVkZmlzaEh0dHBDYWNoZVByaXZhdGUgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBJ bml0aWFsIGNhY2hlIGxpc3QgYW5kIHByb3RvY29sIGluc3RhbmNlLg0KPiA+ICsgIC8vDQo+ID4g KyAgbVJlZGZpc2hIdHRwQ2FjaGVQcml2YXRlLT5TaWduYXR1cmUgICA9DQo+IFJFREZJU0hfSFRU UF9EUklWRVJfU0lHTkFUVVJFOw0KPiA+ICsgIG1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+SW1h Z2VIYW5kbGUgPSBJbWFnZUhhbmRsZTsNCj4gPiArICBDb3B5TWVtICgmbVJlZGZpc2hIdHRwQ2Fj aGVQcml2YXRlLT5Qcm90b2NvbCwNCj4gJm1FZGtJSVJlZGZpc2hIdHRwUHJvdG9jb2wsIHNpemVv ZiAoRURLSUlfUkVERklTSF9IVFRQX1BST1RPQ09MKSk7DQo+ID4gKyAgbVJlZGZpc2hIdHRwQ2Fj aGVQcml2YXRlLT5DYWNoZUxpc3QuQ2FwYWNpdHkgPQ0KPiBSRURGSVNIX0hUVFBfQ0FDSEVfTElT VF9TSVpFOw0KPiA+ICsgIG1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+Q2FjaGVMaXN0LkNvdW50 ICAgID0gMHgwMDsNCj4gPiArICBtUmVkZmlzaEh0dHBDYWNoZVByaXZhdGUtPkNhY2hlRGlzYWJs ZWQgICAgICA9IFBjZEdldEJvb2wNCj4gKFBjZEh0dHBDYWNoZURpc2FibGVkKTsNCj4gPiArICBJ bml0aWFsaXplTGlzdEhlYWQgKCZtUmVkZmlzaEh0dHBDYWNoZVByaXZhdGUtPkNhY2hlTGlzdC5I ZWFkKTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBHZXQgcmV0cnkgc2V0dGluZ3MNCj4g PiArICAvLw0KPiA+ICsgIG1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLk1h eGltdW1SZXRyeUdldCAgICA9IFBjZEdldDE2DQo+IChQY2RIdHRwR2V0UmV0cnkpOw0KPiA+ICsg IG1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLk1heGltdW1SZXRyeVB1dCAg ICA9IFBjZEdldDE2DQo+IChQY2RIdHRwUHV0UmV0cnkpOw0KPiA+ICsgIG1SZWRmaXNoSHR0cENh Y2hlUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLk1heGltdW1SZXRyeVBhdGNoICA9IFBjZEdldDE2DQo+ IChQY2RIdHRwUGF0Y2hSZXRyeSk7DQo+ID4gKyAgbVJlZGZpc2hIdHRwQ2FjaGVQcml2YXRlLT5S ZXRyeVNldHRpbmcuTWF4aW11bVJldHJ5UG9zdCAgID0gUGNkR2V0MTYNCj4gKFBjZEh0dHBQb3N0 UmV0cnkpOw0KPiA+ICsgIG1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLk1h eGltdW1SZXRyeURlbGV0ZSA9IFBjZEdldDE2DQo+IChQY2RIdHRwRGVsZXRlUmV0cnkpOw0KPiA+ ICsgIG1SZWRmaXNoSHR0cENhY2hlUHJpdmF0ZS0+UmV0cnlTZXR0aW5nLlJldHJ5V2FpdCAgICAg ICAgICA9IFBjZEdldDE2DQo+IChQY2RIdHRwUmV0cnlXYWl0SW5TZWNvbmQpICogMTAwMDAwMFU7 DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gSW5zdGFsbCB0aGUgZ0Vka0lJUmVkZmlzaEh0 dHBQcm90b2NvbEd1aWQgb250byBIYW5kbGUuDQo+ID4gKyAgLy8NCj4gPiArICBTdGF0dXMgPSBn QlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ID4gKyAgICAgICAgICAg ICAgICAgICZtUmVkZmlzaEh0dHBDYWNoZVByaXZhdGUtPkltYWdlSGFuZGxlLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAmZ0Vka0lJUmVkZmlzaEh0dHBQcm90b2NvbEd1aWQsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICZtUmVkZmlzaEh0dHBDYWNoZVByaXZhdGUtPlByb3RvY29sLA0KPiA+ICsg ICAgICAgICAgICAgICAgICBOVUxMDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwg IiVhOiBjYW5ub3QgaW5zdGFsbCBSZWRmaXNoIGh0dHAgcHJvdG9jb2w6ICVyXG4iLA0KPiBfX2Z1 bmNfXywgU3RhdHVzKSk7DQo+ID4gKyAgICBSZWRmaXNoSHR0cERyaXZlclVubG9hZCAoSW1hZ2VI YW5kbGUpOw0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IC8vDQo+ID4gKyAgLy8gSW5zdGFsbCBwcm90b2NvbCBub3RpZmljYXRpb24gaWYgY3JlZGVudGlh bCBwcm90b2NvbCBpcyBpbnN0YWxsZWQuDQo+ID4gKyAgLy8NCj4gPiArICBtUmVkZmlzaEh0dHBD YWNoZVByaXZhdGUtPk5vdGlmeUV2ZW50ID0gRWZpQ3JlYXRlUHJvdG9jb2xOb3RpZnlFdmVudCAo DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdFZGtJ SVJlZGZpc2hDcmVkZW50aWFsUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRQTF9DQUxMQkFDSywNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVkZW50aWFsUHJvdG9jb2xJbnN0YWxs ZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJl ZGZpc2hIdHRwQ2FjaGVQcml2YXRlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZSZWdpc3RyYXRpb24NCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+ICsgIGlmIChtUmVkZmlzaEh0dHBDYWNoZVBy aXZhdGUtPk5vdGlmeUV2ZW50ID09IE5VTEwpIHsNCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJS T1IsICIlYTogZmFpbGVkIHRvIGNyZWF0ZSBwcm90b2NvbCBub3RpZmljYXRpb24gZm9yDQo+IGdF ZGtJSVJlZGZpc2hDcmVkZW50aWFsUHJvdG9jb2xHdWlkXG4iLCBfX2Z1bmNfXykpOw0KPiA+ICsg ICAgQVNTRVJUIChGQUxTRSk7DQo+ID4gKyAgICBSZWRmaXNoSHR0cERyaXZlclVubG9hZCAoSW1h Z2VIYW5kbGUpOw0KPiA+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9SZWRmaXNo UGtnL1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwT3BlcmF0aW9uLmMNCj4gYi9SZWRmaXNoUGtn L1JlZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwT3BlcmF0aW9uLmMNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjU2NTI4MThkMTYNCj4gPiAtLS0gL2Rldi9u dWxsDQo+ID4gKysrIGIvUmVkZmlzaFBrZy9SZWRmaXNoSHR0cER4ZS9SZWRmaXNoSHR0cE9wZXJh dGlvbi5jDQo+ID4gQEAgLTAsMCArMSw2OTMgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKyAgUmVk ZmlzaEh0dHBPcGVyYXRpb24gaGFuZGxlcyBIVFRQIG9wZXJhdGlvbnMuDQo+ID4gKw0KPiA+ICsg IENvcHlyaWdodCAoYykgMjAyNCwgTlZJRElBIENPUlBPUkFUSU9OICYgQUZGSUxJQVRFUy4gQWxs IHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArDQo+ID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArI2luY2x1 ZGUgIlJlZGZpc2hIdHRwT3BlcmF0aW9uLmgiDQo+ID4gKyNpbmNsdWRlICJSZWRmaXNoSHR0cERh dGEuaCINCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gY29waWVzIGFsbCBo ZWFkZXJzIGluIFNyY0hlYWRlcnMgdG8gRHN0SGVhZGVycy4NCj4gPiArICBJdCdzIGNhbGwgcmVz cG9uc2liaWxpdHkgdG8gcmVsZWFzZSByZXR1cm5lZCBEc3RIZWFkZXJzLg0KPiA+ICsNCj4gPiAr ICBAcGFyYW1baW5dICBTcmNIZWFkZXJzICAgICAgU291cmNlIGhlYWRlcnMuDQo+ID4gKyAgQHBh cmFtW2luXSAgU3JjSGVhZGVyQ291bnQgIE51bWJlciBvZiBoZWFkZXIgaW4gc291cmNlIGhlYWRl cnMuDQo+ID4gKyAgQHBhcmFtW291dF0gRHN0SGVhZGVycyAgICAgIERlc3RpbmF0aW9uIGhlYWRl cnMuDQo+ID4gKyAgQHBhcmFtW291dF0gRHN0SGVhZGVyQ291bnQgIE51bWJlciBvZiBoZWFkZXIg aW4gZGVzaWduYXRpb24gaGVhZGVycy4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NV Q0NFU1MgICAgIEhlYWRlcnMgYXJlIGNvcGllZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZh bCAgICAgT3RoZXJzICAgICAgICAgIEVycm9ycyBvY2N1ci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gK0NvcHlIdHRwSGVhZGVycyAoDQo+ID4gKyAgSU4gIEVGSV9IVFRQ X0hFQURFUiAgKlNyY0hlYWRlcnMsDQo+ID4gKyAgSU4gIFVJTlROICAgICAgICAgICAgU3JjSGVh ZGVyQ291bnQsDQo+ID4gKyAgT1VUIEVGSV9IVFRQX0hFQURFUiAgKipEc3RIZWFkZXJzLA0KPiA+ ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICpEc3RIZWFkZXJDb3VudA0KPiA+ICsgICkNCj4gPiAr ew0KPiA+ICsgIFVJTlROICBJbmRleDsNCj4gPiArDQo+ID4gKyAgaWYgKChTcmNIZWFkZXJzID09 IE5VTEwpIHx8IChTcmNIZWFkZXJDb3VudCA9PSAwKSB8fCAoRHN0SGVhZGVycyA9PSBOVUxMKQ0K PiB8fCAoRHN0SGVhZGVyQ291bnQgPT0gTlVMTCkpIHsNCj4gPiArICAgIHJldHVybiBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAqRHN0SGVhZGVyQ291bnQg PSAwOw0KPiA+ICsgICpEc3RIZWFkZXJzICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAo RUZJX0hUVFBfSEVBREVSKSAqDQo+IFNyY0hlYWRlckNvdW50KTsNCj4gPiArICBpZiAoKkRzdEhl YWRlcnMgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0K PiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgU3JjSGVhZGVy Q291bnQ7IEluZGV4KyspIHsNCj4gPiArICAgICgqRHN0SGVhZGVycylbSW5kZXhdLkZpZWxkTmFt ZSA9IEFsbG9jYXRlQ29weVBvb2wgKEFzY2lpU3RyU2l6ZQ0KPiAoU3JjSGVhZGVyc1tJbmRleF0u RmllbGROYW1lKSwgU3JjSGVhZGVyc1tJbmRleF0uRmllbGROYW1lKTsNCj4gPiArICAgIGlmICgo KkRzdEhlYWRlcnMpW0luZGV4XS5GaWVsZE5hbWUgPT0gTlVMTCkgew0KPiA+ICsgICAgICByZXR1 cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgKCpE c3RIZWFkZXJzKVtJbmRleF0uRmllbGRWYWx1ZSA9IEFsbG9jYXRlQ29weVBvb2wgKEFzY2lpU3Ry U2l6ZQ0KPiAoU3JjSGVhZGVyc1tJbmRleF0uRmllbGRWYWx1ZSksIFNyY0hlYWRlcnNbSW5kZXhd LkZpZWxkVmFsdWUpOw0KPiA+ICsgICAgaWYgKCgqRHN0SGVhZGVycylbSW5kZXhdLkZpZWxkVmFs dWUgPT0gTlVMTCkgew0KPiA+ICsgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ DQo+DQo+DQo+IExvb2tzIGxpa2Ugb3JldmlvdXMgYWxsb2NhdGlvbnMgbGVha2VkLg0KPiBEaWRu J3QgeW91IHRoaW5rIHRvIGltcGxlbWVudCBzbXRoIGxpa2UgdGhpcw0KPiBodHRwczovL2dpdGh1 Yi5jby8NCj4gbSUyRnRpYW5vY29yZSUyRmVkazIlMkZibG9iJTJGbWFzdGVyJTJGT3ZtZlBrZyUy RlhlbkJ1c0R4ZSUyRkhlbHANCj4gZXJzLmMlMjNMNCZkYXRhPTA1JTdDMDIlN0NuaWNrbGV3JTQw bnZpZGlhLmNvbSU3Q2Y2NTljNTRjM2VkYjQzNTI3Yw0KPiAzNjA4ZGMzNDYyYWIyYSU3QzQzMDgz ZDE1NzI3MzQwYzFiN2RiMzllZmQ5Y2NjMTdhJTdDMCU3QzAlN0M2Mzg0DQo+IDQyODQ1NjAxMDU5 NzE5JTdDVW5rbm93biU3Q1RXRnBiR1pzYjNkOGV5SldJam9pTUM0d0xqQXdNREFpTENKDQo+IFFJ am9pVjJsdU16SWlMQ0pCVGlJNklrMWhhV3dpTENKWFZDSTZNbjAlM0QlN0MwJTdDJTdDJTdDJnNk YXRhPW9Zdg0KPiBYa2ZqT3Bha01PWFYxdzZuWVZwaERSdVBNN1I3M2xxcjhRVnFoJTJCSTQlM0Qm cmVzZXJ2ZWQ9MCA/DQo+DQo+DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgKkRzdEhlYWRl ckNvdW50ICs9IDE7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gZnJlZSByZXNv dXJjZXMgaW4gUmVxdWVzdC4gUmVxdWVzdCBpcyBubyBsb25nZXIgYXZhaWxhYmxlDQo+ID4gKyAg YWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHN1Y2Nlc3NmdWxseS4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgUmVxdWVzdCAgICAgIEhUVFAgcmVxdWVzdCB0byBiZSByZWxlYXNlZC4NCj4g PiArDQo+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFJlc3JvdWNlIGlzIHJlbGVh c2VkIHN1Y2Nlc3NmdWxseS4NCj4gPiArICBAcmV0dmFsICAgICBPdGhlcnMgICAgICAgICAgRXJy b3JzIG9jY3VyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArUmVsZWFz ZVJlZGZpc2hSZXF1ZXN0ICgNCj4gPiArICBJTiAgUkVERklTSF9SRVFVRVNUICAqUmVxdWVzdA0K PiA+ICsgICkNCj4gPiArew0KPiA+ICsgIGlmIChSZXF1ZXN0ID09IE5VTEwpIHsNCj4gPiArICAg IHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBp ZiAoKFJlcXVlc3QtPkhlYWRlcnMgIT0gTlVMTCkgJiYgKFJlcXVlc3QtPkhlYWRlckNvdW50ID4g MCkpIHsNCj4gPiArICAgIEh0dHBGcmVlSGVhZGVyRmllbGRzIChSZXF1ZXN0LT5IZWFkZXJzLCBS ZXF1ZXN0LT5IZWFkZXJDb3VudCk7DQo+ID4gKyAgICBSZXF1ZXN0LT5IZWFkZXJzICAgICA9IE5V TEw7DQo+ID4gKyAgICBSZXF1ZXN0LT5IZWFkZXJDb3VudCA9IDA7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICBpZiAoUmVxdWVzdC0+Q29udGVudCAhPSBOVUxMKSB7DQo+ID4gKyAgICBGcmVlUG9v bCAoUmVxdWVzdC0+Q29udGVudCk7DQo+ID4gKyAgICBSZXF1ZXN0LT5Db250ZW50ID0gTlVMTDsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChSZXF1ZXN0LT5Db250ZW50VHlwZSAhPSBOVUxM KSB7DQo+ID4gKyAgICBGcmVlUG9vbCAoUmVxdWVzdC0+Q29udGVudFR5cGUpOw0KPiA+ICsgICAg UmVxdWVzdC0+Q29udGVudFR5cGUgPSBOVUxMOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgUmVx dWVzdC0+Q29udGVudExlbmd0aCA9IDA7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBmcmVlIHJl c291cmNlcyBpbiBnaXZlbiBSZXNwb25zZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgUmVz cG9uc2UgICAgIEhUVFAgcmVzcG9uc2UgdG8gYmUgcmVsZWFzZWQuDQo+ID4gKw0KPiA+ICsgIEBy ZXR2YWwgICAgIEVGSV9TVUNDRVNTICAgICBSZXNyb3VjZSBpcyByZWxlYXNlZCBzdWNjZXNzZnVs bHkuDQo+ID4gKyAgQHJldHZhbCAgICAgT3RoZXJzICAgICAgICAgIEVycm9ycyBvY2N1ci4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK1JlbGVhc2VSZWRmaXNoUmVzcG9u c2UgKA0KPiA+ICsgIElOICBSRURGSVNIX1JFU1BPTlNFICAqUmVzcG9uc2UNCj4gPiArICApDQo+ ID4gK3sNCj4gPiArICBpZiAoUmVzcG9uc2UgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICgoUmVzcG9u c2UtPkhlYWRlcnMgIT0gTlVMTCkgJiYgKFJlc3BvbnNlLT5IZWFkZXJDb3VudCA+IDApKSB7DQo+ ID4gKyAgICBIdHRwRnJlZUhlYWRlckZpZWxkcyAoUmVzcG9uc2UtPkhlYWRlcnMsIFJlc3BvbnNl LT5IZWFkZXJDb3VudCk7DQo+ID4gKyAgICBSZXNwb25zZS0+SGVhZGVycyAgICAgPSBOVUxMOw0K PiA+ICsgICAgUmVzcG9uc2UtPkhlYWRlckNvdW50ID0gMDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIGlmIChSZXNwb25zZS0+UGF5bG9hZCAhPSBOVUxMKSB7DQo+ID4gKyAgICBSZWxlYXNlUmVk ZmlzaFBheWxvYWQgKFJlc3BvbnNlLT5QYXlsb2FkKTsNCj4gPiArICAgIFJlc3BvbnNlLT5QYXls b2FkID0gTlVMTDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChSZXNwb25zZS0+U3RhdHVz Q29kZSAhPSBOVUxMKSB7DQo+ID4gKyAgICBGcmVlUG9vbCAoUmVzcG9uc2UtPlN0YXR1c0NvZGUp Ow0KPiA+ICsgICAgUmVzcG9uc2UtPlN0YXR1c0NvZGUgPSBOVUxMOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBUaGlzIGZ1bmN0aW9uIGZyZWUgcmVzb3VyY2VzIGluIGdpdmVuIEhUVFAgbWVzc2FnZS4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgSHR0cE1lc3NhZ2UgICAgIEhUVFAgbWVzc2FnZSB0 byBiZSByZWxlYXNlZC4NCj4gPiArICBAcGFyYW1baW5dICBJc1JlcXVlc3QgICAgICAgVFJVRSBp ZiB0aGlzIGlzIHJlcXVlc3QgdHlwZSBvZiBIVFRQIG1lc3NhZ2UuDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZBTFNFIGlmIHRoaXMgaXMgcmVzcG9uc2UgdHlwZSBvZiBIVFRQ IG1lc3NhZ2UuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNTICAgICBSZXNy b3VjZSBpcyByZWxlYXNlZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZhbCAgICAgT3RoZXJz ICAgICAgICAgIEVycm9ycyBvY2N1ci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVT DQo+ID4gK1JlbGVhc2VIdHRwTWVzc2FnZSAoDQo+ID4gKyAgSU4gIEVGSV9IVFRQX01FU1NBR0Ug ICpIdHRwTWVzc2FnZSwNCj4gPiArICBJTiAgQk9PTEVBTiAgICAgICAgICAgSXNSZXF1ZXN0DQo+ ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgaWYgKEh0dHBNZXNzYWdlID09IE5VTEwpIHsNCj4gPiAr ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiAr ICBpZiAoSXNSZXF1ZXN0KSB7DQo+ID4gKyAgICBpZiAoSHR0cE1lc3NhZ2UtPkRhdGEuUmVxdWVz dCAhPSBOVUxMKSB7DQo+ID4gKyAgICAgIGlmIChIdHRwTWVzc2FnZS0+RGF0YS5SZXF1ZXN0LT5V cmwgIT0gTlVMTCkgew0KPiA+ICsgICAgICAgIEZyZWVQb29sIChIdHRwTWVzc2FnZS0+RGF0YS5S ZXF1ZXN0LT5VcmwpOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICBGcmVlUG9vbCAo SHR0cE1lc3NhZ2UtPkRhdGEuUmVxdWVzdCk7DQo+ID4gKyAgICAgIEh0dHBNZXNzYWdlLT5EYXRh LlJlcXVlc3QgPSBOVUxMOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0gZWxzZSB7DQo+ID4gKyAgICBp ZiAoSHR0cE1lc3NhZ2UtPkRhdGEuUmVzcG9uc2UgIT0gTlVMTCkgew0KPiA+ICsgICAgICBGcmVl UG9vbCAoSHR0cE1lc3NhZ2UtPkRhdGEuUmVzcG9uc2UpOw0KPiA+ICsgICAgICBIdHRwTWVzc2Fn ZS0+RGF0YS5SZXNwb25zZSA9IE5VTEw7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICBpZiAoSHR0cE1lc3NhZ2UtPkJvZHkgIT0gTlVMTCkgew0KPiA+ICsgICAgRnJlZVBvb2wg KEh0dHBNZXNzYWdlLT5Cb2R5KTsNCj4gPiArICAgIEh0dHBNZXNzYWdlLT5Cb2R5ID0gTlVMTDsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChIdHRwTWVzc2FnZS0+SGVhZGVycyAhPSBOVUxM KSB7DQo+ID4gKyAgICBIdHRwRnJlZUhlYWRlckZpZWxkcyAoSHR0cE1lc3NhZ2UtPkhlYWRlcnMs IEh0dHBNZXNzYWdlLQ0KPiA+SGVhZGVyQ291bnQpOw0KPiA+ICsgICAgSHR0cE1lc3NhZ2UtPkhl YWRlcnMgICAgID0gTlVMTDsNCj4gPiArICAgIEh0dHBNZXNzYWdlLT5IZWFkZXJDb3VudCA9IDA7 DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gYnVpbGQgUmVkZmlzaCBtZXNzYWdl IGZvciBzZW5kaW5nIGRhdGEgdG8gUmVkZmlzaCBzZXJ2aWNlLg0KPiA+ICsgIEl0J3MgY2FsbCBy ZXNwb25zaWJpbGl0eSB0byBwcm9wZXJseSByZWxlYXNlIHJldHVybmVkIEhUVFAgbWVzc2FnZSBi eQ0KPiA+ICsgIGNhbGxpbmcgUmVsZWFzZUh0dHBNZXNzYWdlLg0KPiA+ICsNCj4gPiArICBAcGFy YW1baW5dICAgU2VydmljZVByaXZhdGUgICAgUG9pbnRlciB0byBSZWRmaXNoIHNlcnZpY2UgcHJp dmF0ZSBkYXRhLg0KPiA+ICsgIEBwYXJhbVtpbl0gICBVcmkgICAgICAgICAgICAgICBSZWRmaXNo IHNlcnZpY2UgVVJJLg0KPiA+ICsgIEBwYXJhbVtpbl0gICBNZXRob2QgICAgICAgICAgICBIVFRQ IG1ldGhvZC4NCj4gPiArICBAcGFyYW1baW5dICAgUmVxdWVzdCAgICAgICAgICAgQWRkaXRpb25h bCBkYXRhIHRvIHNlbmQgdG8gUmVkZmlzaCBzZXJ2aWNlLg0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBUaGlzIGlzIG9wdGlvbmFsLg0KPiA+ICsgIEBwYXJhbVtpbl0gICBD b250ZW50RW5jb2RpbmcgICBDb250ZW50IGVuY29kaW5nIG1ldGhvZCB0byBjb21wcmVzcyBIVFRQ DQo+IGNvbnRleHQuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMg aXMgb3B0aW9uYWwuIFdoZW4gQ29udGVudEVuY29kaW5nIGlzIE5VTEwsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5vIGNvbXByZXNzIG1ldGhvZCB3aWxsIGJlIHBlcmZv cm1lZC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgRUZJX0hUVFBfTUVTU0FHRSAqICAgUG9p bnRlciB0byBuZXdseSBjcmVhdGVkIEhUVFAgbWVzc2FnZS4NCj4gPiArICBAcmV0dmFsICAgICBO VUxMICAgICAgICAgICAgICAgICBFcnJvciBvY2N1cnJlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtFRklfSFRUUF9NRVNTQUdFICoNCj4gPiArQnVpbGRSZXF1ZXN0TWVzc2FnZSAoDQo+ID4gKyAg SU4gUkVERklTSF9TRVJWSUNFX1BSSVZBVEUgICpTZXJ2aWNlUHJpdmF0ZSwNCj4gPiArICBJTiBF RklfU1RSSU5HICAgICAgICAgICAgICAgVXJpLA0KPiA+ICsgIElOIEVGSV9IVFRQX01FVEhPRCAg ICAgICAgICBNZXRob2QsDQo+ID4gKyAgSU4gUkVERklTSF9SRVFVRVNUICAgICAgICAgICpSZXF1 ZXN0IE9QVElPTkFMLA0KPiA+ICsgIElOIENIQVI4ICAgICAgICAgICAgICAgICAgICAqQ29udGVu dEVuY29kaW5nIE9QVElPTkFMDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgRUZJX1NUUklORyAgICAgICAgICAgICBVcmw7DQo+ ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICBVcmxTaXplOw0KPiA+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgSW5kZXg7DQo+ID4gKyAgRUZJX0hUVFBfTUVTU0FHRSAgICAgICAqUmVxdWVz dE1zZzsNCj4gPiArICBFRklfSFRUUF9SRVFVRVNUX0RBVEEgICpSZXF1ZXN0RGF0YTsNCj4gPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgIEhlYWRlckNvdW50Ow0KPiA+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgSGVhZGVySW5kZXg7DQo+ID4gKyAgRUZJX0hUVFBfSEVBREVSICAgICAgICAq SGVhZGVyczsNCj4gPiArICBDSEFSOCAgICAgICAgICAgICAgICAgIENvbnRlbnRMZW5ndGhTdHJb UkVERklTSF9DT05URU5UX0xFTkdUSF9TSVpFXTsNCj4gPiArICBWT0lEICAgICAgICAgICAgICAg ICAgICpDb250ZW50Ow0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgQ29udGVudExlbmd0 aDsNCj4gPiArICBCT09MRUFOICAgICAgICAgICAgICAgIEhhc0NvbnRlbnQ7DQo+ID4gKyAgQk9P TEVBTiAgICAgICAgICAgICAgICBEb0NvbnRlbnRFbmNvZGluZzsNCj4gPiArDQo+ID4gKyAgUmVx dWVzdE1zZyAgICAgICAgPSBOVUxMOw0KPiA+ICsgIFJlcXVlc3REYXRhICAgICAgID0gTlVMTDsN Cj4gPiArICBVcmwgICAgICAgICAgICAgICA9IE5VTEw7DQo+ID4gKyAgVXJsU2l6ZSAgICAgICAg ICAgPSAwOw0KPiA+ICsgIENvbnRlbnQgICAgICAgICAgID0gTlVMTDsNCj4gPiArICBDb250ZW50 TGVuZ3RoICAgICA9IDA7DQo+ID4gKyAgSGVhZGVyQ291bnQgICAgICAgPSBSRURGSVNIX0NPTU1P Tl9IRUFERVJfU0laRTsNCj4gPiArICBIZWFkZXJJbmRleCAgICAgICA9IDA7DQo+ID4gKyAgSGVh ZGVycyAgICAgICAgICAgPSBOVUxMOw0KPiA+ICsgIEhhc0NvbnRlbnQgICAgICAgID0gRkFMU0U7 DQo+ID4gKyAgRG9Db250ZW50RW5jb2RpbmcgPSBGQUxTRTsNCj4gPiArDQo+ID4gKyAgaWYgKChT ZXJ2aWNlUHJpdmF0ZSA9PSBOVUxMKSB8fCAoSVNfRU1QVFlfU1RSSU5HIChVcmkpKSkgew0KPiA+ ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoTWV0aG9kID49 IEh0dHBNZXRob2RNYXgpIHsNCj4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgREVCVUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUdfUkVRVUVTVCwgIiVhOiAl c1xuIiwgX19mdW5jX18sDQo+IFVyaSkpOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEJ1 aWxkIGZ1bGwgVVJMIGZvciBIVFRQIHF1ZXJ5Lg0KPiA+ICsgIC8vDQo+ID4gKyAgVXJsU2l6ZSA9 IChBc2NpaVN0ckxlbiAoU2VydmljZVByaXZhdGUtPkhvc3QpICsgU3RyTGVuIChVcmkpICsgMSkg KiBzaXplb2YNCj4gKENIQVIxNik7DQo+ID4gKyAgVXJsICAgICA9IEFsbG9jYXRlWmVyb1Bvb2wg KFVybFNpemUpOw0KPiA+ICsgIGlmIChVcmwgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIE5V TEw7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBVbmljb2RlU1ByaW50IChVcmwsIFVybFNpemUs IEwiJWElcyIsIFNlcnZpY2VQcml2YXRlLT5Ib3N0LCBVcmkpOw0KPiA+ICsgIERFQlVHICgoUkVE RklTSF9IVFRQX0NBQ0hFX0RFQlVHX1JFUVVFU1QsICIlYTogVXJsOiAlc1xuIiwNCj4gX19mdW5j X18sIFVybCkpOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFN0ZXAgMTogYnVpbGQgdGhl IEhUVFAgaGVhZGVycy4NCj4gPiArICAvLw0KPiA+ICsgIGlmICghSVNfRU1QVFlfU1RSSU5HIChT ZXJ2aWNlUHJpdmF0ZS0+U2Vzc2lvblRva2VuKSB8fCAhSVNfRU1QVFlfU1RSSU5HDQo+IChTZXJ2 aWNlUHJpdmF0ZS0+QmFzaWNBdXRoKSkgew0KPiA+ICsgICAgSGVhZGVyQ291bnQrKzsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIGlmICgoUmVxdWVzdCAhPSBOVUxMKSAmJiAoUmVxdWVzdC0+SGVh ZGVyQ291bnQgPiAwKSkgew0KPiA+ICsgICAgSGVhZGVyQ291bnQgKz0gUmVxdWVzdC0+SGVhZGVy Q291bnQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIENoZWNrIGFuZCBz ZWUgaWYgd2Ugd2lsbCBkbyBjb250ZW50IGVuY29kaW5nIG9yIG5vdA0KPiA+ICsgIC8vDQo+ID4g KyAgaWYgKCFJU19FTVBUWV9TVFJJTkcgKENvbnRlbnRFbmNvZGluZykpIHsNCj4gPiArICAgIGlm IChBc2NpaVN0ckNtcCAoQ29udGVudEVuY29kaW5nLA0KPiBSRURGSVNIX0hUVFBfQ09OVEVOVF9F TkNPRElOR19OT05FKSAhPSAwKSB7DQo+ID4gKyAgICAgIERvQ29udGVudEVuY29kaW5nID0gVFJV RTsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICgoUmVxdWVzdCAhPSBO VUxMKSAmJiAhSVNfRU1QVFlfU1RSSU5HIChSZXF1ZXN0LT5Db250ZW50KSkgew0KPiA+ICsgICAg SGVhZGVyQ291bnQgKz0gMjsNCj4gPiArICAgIEhhc0NvbnRlbnQgICA9IFRSVUU7DQo+ID4gKyAg ICBpZiAoRG9Db250ZW50RW5jb2RpbmcpIHsNCj4gPiArICAgICAgSGVhZGVyQ291bnQgKz0gMTsN Cj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEhlYWRlcnMgPSBBbGxvY2F0ZVpl cm9Qb29sIChIZWFkZXJDb3VudCAqIHNpemVvZiAoRUZJX0hUVFBfSEVBREVSKSk7DQo+ID4gKyAg aWYgKEhlYWRlcnMgPT0gTlVMTCkgew0KPiA+ICsgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIGlmICghSVNfRU1QVFlfU1RSSU5HIChTZXJ2aWNlUHJpdmF0ZS0+U2Vz c2lvblRva2VuKSkgew0KPiA+ICsgICAgU3RhdHVzID0gSHR0cFNldEZpZWxkTmFtZUFuZFZhbHVl ICgmSGVhZGVyc1tIZWFkZXJJbmRleCsrXSwNCj4gSFRUUF9IRUFERVJfWF9BVVRIX1RPS0VOLCBT ZXJ2aWNlUHJpdmF0ZS0+U2Vzc2lvblRva2VuKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gPiArICAgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICAgIH0NCj4gPiArICB9 IGVsc2UgaWYgKCFJU19FTVBUWV9TVFJJTkcgKFNlcnZpY2VQcml2YXRlLT5CYXNpY0F1dGgpKSB7 DQo+ID4gKyAgICBTdGF0dXMgPSBIdHRwU2V0RmllbGROYW1lQW5kVmFsdWUgKCZIZWFkZXJzW0hl YWRlckluZGV4KytdLA0KPiBIVFRQX0hFQURFUl9BVVRIT1JJWkFUSU9OLCBTZXJ2aWNlUHJpdmF0 ZS0+QmFzaWNBdXRoKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAr ICAgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IGlmIChSZXF1ZXN0ICE9IE5VTEwpIHsNCj4gPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IFJlcXVlc3QtPkhlYWRlckNvdW50OyBJbmRleCsrKSB7DQo+ID4gKyAgICAgIFN0YXR1cyA9IEh0 dHBTZXRGaWVsZE5hbWVBbmRWYWx1ZSAoJkhlYWRlcnNbSGVhZGVySW5kZXgrK10sIFJlcXVlc3Qt DQo+ID5IZWFkZXJzW0luZGV4XS5GaWVsZE5hbWUsIFJlcXVlc3QtPkhlYWRlcnNbSW5kZXhdLkZp ZWxkVmFsdWUpOw0KPiA+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAg ICAgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgIH0N Cj4gPiArDQo+ID4gKyAgU3RhdHVzID0gSHR0cFNldEZpZWxkTmFtZUFuZFZhbHVlICgmSGVhZGVy c1tIZWFkZXJJbmRleCsrXSwNCj4gSFRUUF9IRUFERVJfSE9TVCwgU2VydmljZVByaXZhdGUtPkhv c3ROYW1lKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBnb3Rv IE9OX0VSUk9SOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gSHR0cFNldEZpZWxk TmFtZUFuZFZhbHVlICgmSGVhZGVyc1tIZWFkZXJJbmRleCsrXSwNCj4gUkVERklTSF9IVFRQX0hF QURFUl9PREFUQV9WRVJTSU9OX1NUUiwNCj4gUkVERklTSF9IVFRQX0hFQURFUl9PREFUQV9WRVJT SU9OX1ZBTFVFKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBn b3RvIE9OX0VSUk9SOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gSHR0cFNldEZp ZWxkTmFtZUFuZFZhbHVlICgmSGVhZGVyc1tIZWFkZXJJbmRleCsrXSwNCj4gSFRUUF9IRUFERVJf QUNDRVBULCBIVFRQX0NPTlRFTlRfVFlQRV9BUFBfSlNPTik7DQo+ID4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ICsgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIFN0YXR1cyA9IEh0dHBTZXRGaWVsZE5hbWVBbmRWYWx1ZSAoJkhlYWRlcnNbSGVhZGVy SW5kZXgrK10sDQo+IEhUVFBfSEVBREVSX1VTRVJfQUdFTlQsIFJFREZJU0hfSFRUUF9IRUFERVJf VVNFUl9BR0VOVF9WQUxVRSk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ ICsgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IEh0 dHBTZXRGaWVsZE5hbWVBbmRWYWx1ZSAoJkhlYWRlcnNbSGVhZGVySW5kZXgrK10sDQo+IFJFREZJ U0hfSFRUUF9IRUFERVJfQ09OTkVDVElPTl9TVFIsDQo+IFJFREZJU0hfSFRUUF9IRUFERVJfQ09O TkVDVElPTl9WQUxVRSk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsg ICAgZ290byBPTl9FUlJPUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8g SGFuZGxlIGNvbnRlbnQgaGVhZGVyDQo+ID4gKyAgLy8NCj4gPiArICBpZiAoSGFzQ29udGVudCkg ew0KPiA+ICsgICAgaWYgKFJlcXVlc3QtPkNvbnRlbnRUeXBlID09IE5VTEwpIHsNCj4gPiArICAg ICAgU3RhdHVzID0gSHR0cFNldEZpZWxkTmFtZUFuZFZhbHVlICgmSGVhZGVyc1tIZWFkZXJJbmRl eCsrXSwNCj4gSFRUUF9IRUFERVJfQ09OVEVOVF9UWVBFLCBIVFRQX0NPTlRFTlRfVFlQRV9BUFBf SlNPTik7DQo+ID4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAg ICBnb3RvIE9OX0VSUk9SOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsg ICAgICBTdGF0dXMgPSBIdHRwU2V0RmllbGROYW1lQW5kVmFsdWUgKCZIZWFkZXJzW0hlYWRlcklu ZGV4KytdLA0KPiBIVFRQX0hFQURFUl9DT05URU5UX1RZUEUsIFJlcXVlc3QtPkNvbnRlbnRUeXBl KTsNCj4gPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICAgIGdv dG8gT05fRVJST1I7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgIH0NCj4gPiArDQo+ID4gKyAgICBp ZiAoUmVxdWVzdC0+Q29udGVudExlbmd0aCA9PSAwKSB7DQo+ID4gKyAgICAgIFJlcXVlc3QtPkNv bnRlbnRMZW5ndGggPSAgQXNjaWlTdHJMZW4gKFJlcXVlc3QtPkNvbnRlbnQpOw0KPiA+ICsgICAg fQ0KPiA+ICsNCj4gPiArICAgIEFzY2lpU1ByaW50ICgNCj4gPiArICAgICAgQ29udGVudExlbmd0 aFN0ciwNCj4gPiArICAgICAgc2l6ZW9mIChDb250ZW50TGVuZ3RoU3RyKSwNCj4gPiArICAgICAg IiVsdSIsDQo+ID4gKyAgICAgIChVSU5UNjQpUmVxdWVzdC0+Q29udGVudExlbmd0aA0KPiA+ICsg ICAgICApOw0KPiA+ICsgICAgU3RhdHVzID0gSHR0cFNldEZpZWxkTmFtZUFuZFZhbHVlICgmSGVh ZGVyc1tIZWFkZXJJbmRleCsrXSwNCj4gSFRUUF9IRUFERVJfQ09OVEVOVF9MRU5HVEgsIENvbnRl bnRMZW5ndGhTdHIpOw0KPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsg ICAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIC8vDQo+ID4g KyAgICAvLyBFbmNvZGluZw0KPiA+ICsgICAgLy8NCj4gPiArICAgIGlmIChEb0NvbnRlbnRFbmNv ZGluZykgew0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBz dXBwb3J0IGd6aXAgQ29udGVudC1FbmNvZGluZy4NCj4gPiArICAgICAgLy8NCj4gPiArICAgICAg U3RhdHVzID0gIFJlZGZpc2hDb250ZW50RW5jb2RlICgNCj4gPiArICAgICAgICAgICAgICAgICAg Q29udGVudEVuY29kaW5nLA0KPiA+ICsgICAgICAgICAgICAgICAgICBSZXF1ZXN0LT5Db250ZW50 LA0KPiA+ICsgICAgICAgICAgICAgICAgICBSZXF1ZXN0LT5Db250ZW50TGVuZ3RoLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAmQ29udGVudCwNCj4gPiArICAgICAgICAgICAgICAgICAgJkNvbnRl bnRMZW5ndGgNCj4gPiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICAgICAgaWYgKFN0YXR1 cyA9PSBFRklfSU5WQUxJRF9QQVJBTUVURVIpIHsNCj4gPiArICAgICAgICBERUJVRyAoKERFQlVH X0VSUk9SLCAiJWE6IEVycm9yIHRvIGVuY29kZSBjb250ZW50LlxuIiwgX19mdW5jX18pKTsNCj4g PiArICAgICAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ICsgICAgICB9IGVsc2UgaWYgKFN0YXR1cyA9 PSBFRklfVU5TVVBQT1JURUQpIHsNCj4gPiArICAgICAgICBEb0NvbnRlbnRFbmNvZGluZyA9IEZB TFNFOw0KPiA+ICsgICAgICAgIERFQlVHICgoUkVERklTSF9IVFRQX0NBQ0hFX0RFQlVHX1JFUVVF U1QsICIlYTogTm8gY29udGVudA0KPiBjb2RpbmcgZm9yICVhISBVc2UgcmF3IGRhdGEgaW5zdGVh ZC5cbiIsIF9fZnVuY19fLCBDb250ZW50RW5jb2RpbmcpKTsNCj4gPiArICAgICAgICBTdGF0dXMg PSBIdHRwU2V0RmllbGROYW1lQW5kVmFsdWUgKCZIZWFkZXJzW0hlYWRlckluZGV4KytdLA0KPiBI VFRQX0hFQURFUl9DT05URU5UX0VOQ09ESU5HLCBIVFRQX0NPTlRFTlRfRU5DT0RJTkdfSURFTlRJ VFkpOw0KPiA+ICsgICAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAg ICAgIGdvdG8gT05fRVJST1I7DQo+ID4gKyAgICAgICAgfQ0KPiA+ICsgICAgICB9IGVsc2Ugew0K PiA+ICsgICAgICAgIFN0YXR1cyA9IEh0dHBTZXRGaWVsZE5hbWVBbmRWYWx1ZSAoJkhlYWRlcnNb SGVhZGVySW5kZXgrK10sDQo+IEhUVFBfSEVBREVSX0NPTlRFTlRfRU5DT0RJTkcsIEhUVFBfQ09O VEVOVF9FTkNPRElOR19HWklQKTsNCj4gPiArICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ID4gKyAgICAgICAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ICsgICAgICAgIH0NCj4gPiAr ICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBXaGVu IHRoZSBjb250ZW50IGlzIGZyb20gY2FsbGVyLCB3ZSB1c2Ugb3VyIG93biBjb3B5IHNvIHRoYXQg d2UgcHJvcGVybHkNCj4gcmVsZWFzZSBpdCBsYXRlci4NCj4gPiArICAgIC8vDQo+ID4gKyAgICBp ZiAoIURvQ29udGVudEVuY29kaW5nKSB7DQo+ID4gKyAgICAgIENvbnRlbnQgPSBBbGxvY2F0ZUNv cHlQb29sIChSZXF1ZXN0LT5Db250ZW50TGVuZ3RoLCBSZXF1ZXN0LT5Db250ZW50KTsNCj4gPiAr ICAgICAgaWYgKENvbnRlbnQgPT0gTlVMTCkgew0KPiA+ICsgICAgICAgIGdvdG8gT05fRVJST1I7 DQo+ID4gKyAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgIENvbnRlbnRMZW5ndGggPSBSZXF1ZXN0 LT5Db250ZW50TGVuZ3RoOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8N Cj4gPiArICAvLyBTdGVwIDI6IGJ1aWxkIHRoZSByZXN0IG9mIEhUVFAgcmVxdWVzdCBpbmZvLg0K PiA+ICsgIC8vDQo+ID4gKyAgUmVxdWVzdERhdGEgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXplb2Yg KEVGSV9IVFRQX1JFUVVFU1RfREFUQSkpOw0KPiA+ICsgIGlmIChSZXF1ZXN0RGF0YSA9PSBOVUxM KSB7DQo+ID4gKyAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgUmVx dWVzdERhdGEtPk1ldGhvZCA9IE1ldGhvZDsNCj4gPiArICBSZXF1ZXN0RGF0YS0+VXJsICAgID0g VXJsOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIFN0ZXAgMzogZmlsbCBpbiBFRklfSFRU UF9NRVNTQUdFDQo+ID4gKyAgLy8NCj4gPiArICBSZXF1ZXN0TXNnID0gQWxsb2NhdGVaZXJvUG9v bCAoc2l6ZW9mIChFRklfSFRUUF9NRVNTQUdFKSk7DQo+ID4gKyAgaWYgKFJlcXVlc3RNc2cgPT0g TlVMTCkgew0KPiA+ICsgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsg IEFTU0VSVCAoSGVhZGVySW5kZXggPT0gSGVhZGVyQ291bnQpOw0KPiA+ICsgIFJlcXVlc3RNc2ct PkRhdGEuUmVxdWVzdCA9IFJlcXVlc3REYXRhOw0KPiA+ICsgIFJlcXVlc3RNc2ctPkhlYWRlckNv dW50ICA9IEhlYWRlckluZGV4Ow0KPiA+ICsgIFJlcXVlc3RNc2ctPkhlYWRlcnMgICAgICA9IEhl YWRlcnM7DQo+ID4gKw0KPiA+ICsgIGlmIChIYXNDb250ZW50KSB7DQo+ID4gKyAgICBSZXF1ZXN0 TXNnLT5Cb2R5TGVuZ3RoID0gQ29udGVudExlbmd0aDsNCj4gPiArICAgIFJlcXVlc3RNc2ctPkJv ZHkgICAgICAgPSBDb250ZW50Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIFJlcXVl c3RNc2c7DQo+ID4gKw0KPiA+ICtPTl9FUlJPUjoNCj4gPiArDQo+ID4gKyAgaWYgKEhlYWRlcnMg IT0gTlVMTCkgew0KPiA+ICsgICAgSHR0cEZyZWVIZWFkZXJGaWVsZHMgKEhlYWRlcnMsIEhlYWRl ckluZGV4KTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChSZXF1ZXN0RGF0YSAhPSBOVUxM KSB7DQo+ID4gKyAgICBGcmVlUG9vbCAoUmVxdWVzdERhdGEpOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgaWYgKFJlcXVlc3RNc2cgIT0gTlVMTCkgew0KPiA+ICsgICAgRnJlZVBvb2wgKFJlcXVl c3RNc2cpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKFVybCAhPSBOVUxMKSB7DQo+ID4g KyAgICBGcmVlUG9vbCAoVXJsKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBOVUxM Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBUaGlzIGZ1bmN0aW9uIHBhcnNlIHJl c3BvbnNlIG1lc3NhZ2UgZnJvbSBSZWRmaXNoIHNlcnZpY2UsIGFuZA0KPiA+ICsgIGJ1aWxkIFJl ZGZpc2ggcmVzcG9uc2UgZm9yIGNhbGxlci4gSXQncyBjYWxsIHJlc3BvbnNpYmlsaXR5IHRvDQo+ ID4gKyAgcHJvcGVybHkgcmVsZWFzZSBSZWRmaXNoIHJlc3BvbnNlIGJ5IGNhbGxpbmcgUmVsZWFz ZVJlZGZpc2hSZXNwb25zZS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgIFNlcnZpY2VQcml2 YXRlICAgUG9pbnRlciB0byBSZWRmaXNoIHNlcnZpY2UgcHJpdmF0ZSBkYXRhLg0KPiA+ICsgIEBw YXJhbVtpbl0gICBSZXNwb25zZU1zZyAgICAgIFJlc3BvbnNlIG1lc3NhZ2UgZnJvbSBSZWRmaXNo IHNlcnZpY2UuDQo+ID4gKyAgQHBhcmFtW291dF0gIFJlZGZpc2hSZXNwb25zZSAgUmVkZmlzaCBy ZXNwb25zZSBkYXRhLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsICAgICBFRklfU1VDQ0VTUyAgICAg UmVkZmlzaCByZXNwb25zZSBpcyByZXR1cm5lZCBzdWNjZXNzZnVsbHkuDQo+ID4gKyAgQHJldHZh bCAgICAgT3RoZXJzICAgICAgICAgIEVycm9ycyBvY2N1ci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gK1BhcnNlUmVzcG9uc2VNZXNzYWdlICgNCj4gPiArICBJTiAgUkVE RklTSF9TRVJWSUNFX1BSSVZBVEUgICpTZXJ2aWNlUHJpdmF0ZSwNCj4gPiArICBJTiAgRUZJX0hU VFBfTUVTU0FHRSAgICAgICAgICpSZXNwb25zZU1zZywNCj4gPiArICBPVVQgUkVERklTSF9SRVNQ T05TRSAgICAgICAgICpSZWRmaXNoUmVzcG9uc2UNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBF RklfU1RBVFVTICAgICAgICBTdGF0dXM7DQo+ID4gKyAgRURLSUlfSlNPTl9WQUxVRSAgSnNvbkRh dGE7DQo+ID4gKyAgRUZJX0hUVFBfSEVBREVSICAgKkNvbnRlbnRFbmNvZGVkSGVhZGVyOw0KPiA+ ICsgIFZPSUQgICAgICAgICAgICAgICpEZWNvZGVkQm9keTsNCj4gPiArICBVSU5UTiAgICAgICAg ICAgICBEZWNvZGVkTGVuZ3RoOw0KPiA+ICsNCj4gPiArICBpZiAoKFNlcnZpY2VQcml2YXRlID09 IE5VTEwpIHx8IChSZXNwb25zZU1zZyA9PSBOVUxMKSB8fCAoUmVkZmlzaFJlc3BvbnNlDQo+ID09 IE5VTEwpKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgREVCVUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUdfUkVRVUVT VCwgIiVhXG4iLCBfX2Z1bmNfXykpOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEluaXRp YWxpemF0aW9uDQo+ID4gKyAgLy8NCj4gPiArICBKc29uRGF0YSAgICAgICAgICAgICAgICAgICAg ID0gTlVMTDsNCj4gPiArICBSZWRmaXNoUmVzcG9uc2UtPkhlYWRlckNvdW50ID0gMDsNCj4gPiAr ICBSZWRmaXNoUmVzcG9uc2UtPkhlYWRlcnMgICAgID0gTlVMTDsNCj4gPiArICBSZWRmaXNoUmVz cG9uc2UtPlBheWxvYWQgICAgID0gTlVMTDsNCj4gPiArICBSZWRmaXNoUmVzcG9uc2UtPlN0YXR1 c0NvZGUgID0gTlVMTDsNCj4gPiArICBEZWNvZGVkQm9keSAgICAgICAgICAgICAgICAgID0gTlVM TDsNCj4gPiArICBEZWNvZGVkTGVuZ3RoICAgICAgICAgICAgICAgID0gMDsNCj4gPiArDQo+ID4g KyAgLy8NCj4gPiArICAvLyBSZXR1cm4gdGhlIEhUVFAgU3RhdHVzQ29kZS4NCj4gPiArICAvLw0K PiA+ICsgIGlmIChSZXNwb25zZU1zZy0+RGF0YS5SZXNwb25zZSAhPSBOVUxMKSB7DQo+ID4gKyAg ICBERUJVRyAoKFJFREZJU0hfSFRUUF9DQUNIRV9ERUJVR19SRVFVRVNULCAiJWE6IHN0YXR1czog JWRcbiIsDQo+IF9fZnVuY19fLCBSZXNwb25zZU1zZy0+RGF0YS5SZXNwb25zZS0+U3RhdHVzQ29k ZSkpOw0KPiA+ICsgICAgUmVkZmlzaFJlc3BvbnNlLT5TdGF0dXNDb2RlID0gQWxsb2NhdGVDb3B5 UG9vbCAoc2l6ZW9mDQo+IChFRklfSFRUUF9TVEFUVVNfQ09ERSksICZSZXNwb25zZU1zZy0+RGF0 YS5SZXNwb25zZS0+U3RhdHVzQ29kZSk7DQo+ID4gKyAgICBpZiAoUmVkZmlzaFJlc3BvbnNlLT5T dGF0dXNDb2RlID09IE5VTEwpIHsNCj4gPiArICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVh OiBGYWlsZWQgdG8gY3JlYXRlIHN0YXR1cyBjb2RlLlxuIiwgX19mdW5jX18pKTsNCj4gPiArICAg IH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUmV0dXJuIHRoZSBIVFRQ IGhlYWRlcnMuDQo+ID4gKyAgLy8NCj4gPiArICBpZiAoUmVzcG9uc2VNc2ctPkhlYWRlcnMgIT0g TlVMTCkgew0KPiA+ICsgICAgREVCVUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUdfUkVRVUVT VCwgIiVhOiBoZWFkZXIgY291bnQ6DQo+ICVkXG4iLCBfX2Z1bmNfXywgUmVzcG9uc2VNc2ctPkhl YWRlckNvdW50KSk7DQo+ID4gKyAgICBTdGF0dXMgPSBDb3B5SHR0cEhlYWRlcnMgKA0KPiA+ICsg ICAgICAgICAgICAgICBSZXNwb25zZU1zZy0+SGVhZGVycywNCj4gPiArICAgICAgICAgICAgICAg UmVzcG9uc2VNc2ctPkhlYWRlckNvdW50LA0KPiA+ICsgICAgICAgICAgICAgICAmUmVkZmlzaFJl c3BvbnNlLT5IZWFkZXJzLA0KPiA+ICsgICAgICAgICAgICAgICAmUmVkZmlzaFJlc3BvbnNlLT5I ZWFkZXJDb3VudA0KPiA+ICsgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IEZhaWxl ZCB0byBjb3B5IEhUVFAgaGVhZGVyczogJXJcbiIsDQo+IF9fZnVuY19fLCBTdGF0dXMpKTsNCj4g PiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUmV0dXJuIHRo ZSBIVFRQIGJvZHkuDQo+ID4gKyAgLy8NCj4gPiArICBpZiAoKFJlc3BvbnNlTXNnLT5Cb2R5TGVu Z3RoICE9IDApICYmIChSZXNwb25zZU1zZy0+Qm9keSAhPSBOVUxMKSkgew0KPiA+ICsgICAgREVC VUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUdfUkVRVUVTVCwgIiVhOiBib2R5IGxlbmd0aDoN Cj4gJWRcbiIsIF9fZnVuY19fLCBSZXNwb25zZU1zZy0+Qm9keUxlbmd0aCkpOw0KPiA+ICsgICAg Ly8NCj4gPiArICAgIC8vIENoZWNrIGlmIGRhdGEgaXMgZW5jb2RlZC4NCj4gPiArICAgIC8vDQo+ ID4gKyAgICBDb250ZW50RW5jb2RlZEhlYWRlciA9IEh0dHBGaW5kSGVhZGVyIChSZWRmaXNoUmVz cG9uc2UtPkhlYWRlckNvdW50LA0KPiBSZWRmaXNoUmVzcG9uc2UtPkhlYWRlcnMsIEhUVFBfSEVB REVSX0NPTlRFTlRfRU5DT0RJTkcpOw0KPiA+ICsgICAgaWYgKENvbnRlbnRFbmNvZGVkSGVhZGVy ICE9IE5VTEwpIHsNCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8gVGhlIGNvbnRlbnQgaXMg ZW5jb2RlZC4NCj4gPiArICAgICAgLy8NCj4gPiArICAgICAgU3RhdHVzID0gUmVkZmlzaENvbnRl bnREZWNvZGUgKA0KPiA+ICsgICAgICAgICAgICAgICAgIENvbnRlbnRFbmNvZGVkSGVhZGVyLT5G aWVsZFZhbHVlLA0KPiA+ICsgICAgICAgICAgICAgICAgIFJlc3BvbnNlTXNnLT5Cb2R5LA0KPiA+ ICsgICAgICAgICAgICAgICAgIFJlc3BvbnNlTXNnLT5Cb2R5TGVuZ3RoLA0KPiA+ICsgICAgICAg ICAgICAgICAgICZEZWNvZGVkQm9keSwNCj4gPiArICAgICAgICAgICAgICAgICAmRGVjb2RlZExl bmd0aA0KPiA+ICsgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gPiArICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IEZhaWxl ZCB0byBkZWNvbXByZXNzIHRoZSByZXNwb25zZQ0KPiBjb250ZW50OiAlciBkZWNvZGluZyBtZXRo b2Q6ICVhXG4uIiwgX19mdW5jX18sIFN0YXR1cywgQ29udGVudEVuY29kZWRIZWFkZXItDQo+ID5G aWVsZFZhbHVlKSk7DQo+ID4gKyAgICAgICAgZ290byBPTl9FUlJPUjsNCj4gPiArICAgICAgfQ0K PiA+ICsNCj4gPiArICAgICAgSnNvbkRhdGEgPSBKc29uTG9hZEJ1ZmZlciAoRGVjb2RlZEJvZHks IERlY29kZWRMZW5ndGgsIDAsIE5VTEwpOw0KPiA+ICsgICAgICBGcmVlUG9vbCAoRGVjb2RlZEJv ZHkpOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgSnNvbkRhdGEgPSBKc29uTG9hZEJ1 ZmZlciAoUmVzcG9uc2VNc2ctPkJvZHksIFJlc3BvbnNlTXNnLQ0KPiA+Qm9keUxlbmd0aCwgMCwg TlVMTCk7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgaWYgKCFKc29uVmFsdWVJc051bGwg KEpzb25EYXRhKSkgew0KPiA+ICsgICAgICBSZWRmaXNoUmVzcG9uc2UtPlBheWxvYWQgPSBDcmVh dGVSZWRmaXNoUGF5bG9hZCAoU2VydmljZVByaXZhdGUsDQo+IEpzb25EYXRhKTsNCj4gPiArICAg ICAgaWYgKFJlZGZpc2hSZXNwb25zZS0+UGF5bG9hZCA9PSBOVUxMKSB7DQo+ID4gKyAgICAgICAg REVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBGYWlsZWQgdG8gY3JlYXRlIHBheWxvYWRcbi4iLCBf X2Z1bmNfXykpOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICBKc29uVmFsdWVGcmVl IChKc29uRGF0YSk7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBERUJVRyAoKERFQlVH X0VSUk9SLCAiJWE6IE5vIHBheWxvYWQgYXZhaWxhYmxlXG4iLCBfX2Z1bmNfXykpOw0KPiA+ICsg ICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICsN Cj4gPiArT05fRVJST1I6DQo+ID4gKw0KPiA+ICsgIGlmIChSZWRmaXNoUmVzcG9uc2UgIT0gTlVM TCkgew0KPiA+ICsgICAgUmVsZWFzZVJlZGZpc2hSZXNwb25zZSAoUmVkZmlzaFJlc3BvbnNlKTsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gc2VuZCBSZWRmaXNoIHJlcXVlc3QgdG8gUmVk ZmlzaCBzZXJ2aWNlIGJ5IGNhbGxpbmcNCj4gPiArICBSZXN0IEV4IHByb3RvY29sLg0KPiA+ICsN Cj4gPiArICBAcGFyYW1baW5dICAgU2VydmljZSAgICAgICBQb2ludGVyIHRvIFJlZGZpc2ggc2Vy dmljZS4NCj4gPiArICBAcGFyYW1baW5dICAgVXJpICAgICAgICAgICBVcmkgb2YgUmVkZmlzaCBz ZXJ2aWNlLg0KPiA+ICsgIEBwYXJhbVtpbl0gICBNZXRob2QgICAgICAgIEhUVFAgbWV0aG9kLg0K PiA+ICsgIEBwYXJhbVtpbl0gICBSZXF1ZXN0ICAgICBSZXF1ZXN0IGRhdGEuIFRoaXMgaXMgb3B0 aW9uYWwuDQo+ID4gKyAgQHBhcmFtW291dF0gIFJlc3BvbnNlICAgIFJlZGZpc2ggcmVzcG9uc2Ug ZGF0YS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICAgRUZJX1NVQ0NFU1MgICAgIFJlcXVlc3Qg aXMgc2VudCBhbmQgcmVjZWl2ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiA+ICsgIEByZXR2YWwgICAgIE90 aGVycyAgICAgICAgICBFcnJvcnMgb2NjdXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NU QVRVUw0KPiA+ICtIdHRwU2VuZFJlY2VpdmUgKA0KPiA+ICsgIElOICBSRURGSVNIX1NFUlZJQ0Ug ICBTZXJ2aWNlLA0KPiA+ICsgIElOICBFRklfU1RSSU5HICAgICAgICBVcmksDQo+ID4gKyAgSU4g IEVGSV9IVFRQX01FVEhPRCAgIE1ldGhvZCwNCj4gPiArICBJTiAgUkVERklTSF9SRVFVRVNUICAg KlJlcXVlc3QgIE9QVElPTkFMLA0KPiA+ICsgIE9VVCBSRURGSVNIX1JFU1BPTlNFICAqUmVzcG9u c2UNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICBSZXN0RXhTdGF0dXM7DQo+ID4g KyAgRUZJX0hUVFBfTUVTU0FHRSAgICAgICAgICpSZXF1ZXN0TXNnOw0KPiA+ICsgIEVGSV9IVFRQ X01FU1NBR0UgICAgICAgICBSZXNwb25zZU1zZzsNCj4gPiArICBSRURGSVNIX1NFUlZJQ0VfUFJJ VkFURSAgKlNlcnZpY2VQcml2YXRlOw0KPiA+ICsgIEVGSV9IVFRQX0hFQURFUiAgICAgICAgICAq WEF1dGhUb2tlbkhlYWRlcjsNCj4gPiArICBDSEFSOCAgICAgICAgICAgICAgICAgICAgKkh0dHBD b250ZW50RW5jb2Rpbmc7DQo+ID4gKw0KPiA+ICsgIGlmICgoU2VydmljZSA9PSBOVUxMKSB8fCBJ U19FTVBUWV9TVFJJTkcgKFVyaSkgfHwgKFJlc3BvbnNlID09IE5VTEwpKSB7DQo+ID4gKyAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgREVC VUcgKChSRURGSVNIX0hUVFBfQ0FDSEVfREVCVUdfUkVRVUVTVCwgIiVhOiBNZXRob2Q6IDB4JXgN Cj4gJXNcbiIsIF9fZnVuY19fLCBNZXRob2QsIFVyaSkpOw0KPiA+ICsNCj4gPiArICBTZXJ2aWNl UHJpdmF0ZSA9IChSRURGSVNIX1NFUlZJQ0VfUFJJVkFURSAqKVNlcnZpY2U7DQo+ID4gKyAgaWYg KFNlcnZpY2VQcml2YXRlLT5TaWduYXR1cmUgIT0gUkVERklTSF9IVFRQX1NFUlZJQ0VfU0lHTkFU VVJFKSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IHNpZ25hdHVyZSBjaGVj ayBmYWlsdXJlXG4iLCBfX2Z1bmNfXykpOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BB UkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFplcm9NZW0gKCZSZXNwb25zZU1zZywg c2l6ZW9mIChSZXNwb25zZU1zZykpOw0KPiA+ICsgIEh0dHBDb250ZW50RW5jb2RpbmcgPSAoQ0hB UjggKilQY2RHZXRQdHINCj4gKFBjZFJlZGZpc2hTZXJ2aWNlQ29udGVudEVuY29kaW5nKTsNCj4g PiArDQo+ID4gKyAgUmVxdWVzdE1zZyA9IEJ1aWxkUmVxdWVzdE1lc3NhZ2UgKFNlcnZpY2UsIFVy aSwgTWV0aG9kLCBSZXF1ZXN0LA0KPiBIdHRwQ29udGVudEVuY29kaW5nKTsNCj4gPiArICBpZiAo UmVxdWVzdE1zZyA9PSBOVUxMKSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6 IGNhbm5vdCBidWlsZCByZXF1ZXN0IG1lc3NhZ2UgZm9yICVzXG4iLA0KPiBfX2Z1bmNfXywgVXJp KSk7DQo+ID4gKyAgICByZXR1cm4gRUZJX1BST1RPQ09MX0VSUk9SOw0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgLy8NCj4gPiArICAvLyBjYWxsIFJFU1RFeCB0byBnZXQgcmVzcG9uc2UgZnJvbSBS RVNUIHNlcnZpY2UuDQo+ID4gKyAgLy8NCj4gPiArICBSZXN0RXhTdGF0dXMgPSBTZXJ2aWNlUHJp dmF0ZS0+UmVzdEV4LT5TZW5kUmVjZWl2ZSAoU2VydmljZVByaXZhdGUtPlJlc3RFeCwNCj4gUmVx dWVzdE1zZywgJlJlc3BvbnNlTXNnKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChSZXN0RXhTdGF0 dXMpKSB7DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6ICVzIFNlbmRSZWNlaXZl IGZhaWx1cmU6ICVyXG4iLCBfX2Z1bmNfXywNCj4gVXJpLCBSZXN0RXhTdGF0dXMpKTsNCj4gPiAr ICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUmV0dXJuIHN0YXR1cyBjb2RlLCBoZWFk ZXJzIGFuZCBwYXlsb2FkIHRvIGNhbGxlciBhcyBtdWNoIGFzIHBvc3NpYmxlIGV2ZW4NCj4gd2hl biBSZXN0RXggcmV0dXJucyBmYWlsdXJlLg0KPiA+ICsgIC8vDQo+ID4gKyAgU3RhdHVzID0gUGFy c2VSZXNwb25zZU1lc3NhZ2UgKFNlcnZpY2VQcml2YXRlLCAmUmVzcG9uc2VNc2csIFJlc3BvbnNl KTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBERUJVRyAoKERF QlVHX0VSUk9SLCAiJWE6ICVzIHBhcnNlIHJlc3BvbnNlIGZhaWx1cmU6ICVyXG4iLCBfX2Z1bmNf XywNCj4gVXJpLCBTdGF0dXMpKTsNCj4gPiArICB9IGVsc2Ugew0KPiA+ICsgICAgLy8NCj4gPiAr ICAgIC8vIENhcHR1cmUgc2Vzc2lvbiB0b2tlbiBpbiBoZWFkZXINCj4gPiArICAgIC8vDQo+ID4g KyAgICBpZiAoKE1ldGhvZCA9PSBIdHRwTWV0aG9kUG9zdCkgJiYNCj4gPiArICAgICAgICAoUmVz cG9uc2UtPlN0YXR1c0NvZGUgIT0gTlVMTCkgJiYNCj4gPiArICAgICAgICAoKCpSZXNwb25zZS0+ U3RhdHVzQ29kZSA9PSBIVFRQX1NUQVRVU18yMDBfT0spIHx8ICgqUmVzcG9uc2UtDQo+ID5TdGF0 dXNDb2RlID09IEhUVFBfU1RBVFVTXzIwNF9OT19DT05URU5UKSkpDQo+ID4gKyAgICB7DQo+ID4g KyAgICAgIFhBdXRoVG9rZW5IZWFkZXIgPSBIdHRwRmluZEhlYWRlciAoUmVzcG9uc2VNc2cuSGVh ZGVyQ291bnQsDQo+IFJlc3BvbnNlTXNnLkhlYWRlcnMsIEhUVFBfSEVBREVSX1hfQVVUSF9UT0tF Tik7DQo+ID4gKyAgICAgIGlmIChYQXV0aFRva2VuSGVhZGVyICE9IE5VTEwpIHsNCj4gPiArICAg ICAgICBTdGF0dXMgPSBVcGRhdGVTZXNzaW9uVG9rZW4gKFNlcnZpY2VQcml2YXRlLCBYQXV0aFRv a2VuSGVhZGVyLQ0KPiA+RmllbGRWYWx1ZSk7DQo+ID4gKyAgICAgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiA+ICsgICAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiB1cGRh dGUgc2Vzc2lvbiB0b2tlbiBmYWlsdXJlOiAlclxuIiwNCj4gX19mdW5jX18sIFN0YXR1cykpOw0K PiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgfQ0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgLy8NCj4gPiArICAvLyBSZWxlYXNlIHJlc291cmNlcw0KPiA+ICsgIC8vDQo+ID4g KyAgaWYgKFJlcXVlc3RNc2cgIT0gTlVMTCkgew0KPiA+ICsgICAgUmVsZWFzZUh0dHBNZXNzYWdl IChSZXF1ZXN0TXNnLCBUUlVFKTsNCj4gPiArICAgIEZyZWVQb29sIChSZXF1ZXN0TXNnKTsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgIFJlbGVhc2VIdHRwTWVzc2FnZSAoJlJlc3BvbnNlTXNnLCBG QUxTRSk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBSZXN0RXhTdGF0dXM7DQo+ID4gK30NCj4gPiBk aWZmIC0tZ2l0IGEvUmVkZmlzaFBrZy9SZWRmaXNoLmZkZi5pbmMgYi9SZWRmaXNoUGtnL1JlZGZp c2guZmRmLmluYw0KPiA+IGluZGV4IDNlNWE3Nzc2NmUuLjVjYmUzNTkyZmQgMTAwNjQ0DQo+ID4g LS0tIGEvUmVkZmlzaFBrZy9SZWRmaXNoLmZkZi5pbmMNCj4gPiArKysgYi9SZWRmaXNoUGtnL1Jl ZGZpc2guZmRmLmluYw0KPiA+IEBAIC02LDcgKzYsNyBAQA0KPiA+ICMgdG8gYmUgYnVpbHQgaW4g dGhlIGZpcm13YXJlIHZvbHVtZS4NCj4gPiAjDQo+ID4gIyAoQykgQ29weXJpZ2h0IDIwMjAtMjAy MSBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUDxCUj4NCj4gPiAtIyBD b3B5cmlnaHQgKGMpIDIwMjMsIE5WSURJQSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuDQo+ID4gKyMgQ29weXJpZ2h0IChjKSAyMDIzLTIwMjQsIE5WSURJQSBD T1JQT1JBVElPTiAmIEFGRklMSUFURVMuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuDQo+ID4gIw0K PiA+ICMgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4g PiAjDQo+ID4gQEAgLTIwLDQgKzIwLDUgQEANCj4gPiAgIElORiBSZWRmaXNoUGtnL1JlZGZpc2hD b25maWdIYW5kbGVyL1JlZGZpc2hDb25maWdIYW5kbGVyRHJpdmVyLmluZg0KPiA+ICAgSU5GIFJl ZGZpc2hQa2cvUmVkZmlzaFBsYXRmb3JtQ29uZmlnRHhlL1JlZGZpc2hQbGF0Zm9ybUNvbmZpZ0R4 ZS5pbmYNCj4gPiAgIElORg0KPiBNZGVNb2R1bGVQa2cvVW5pdmVyc2FsL1JlZ3VsYXJFeHByZXNz aW9uRHhlL1JlZ3VsYXJFeHByZXNzaW9uRHhlLmluZg0KPiA+ICsgIElORiBSZWRmaXNoUGtnL1Jl ZGZpc2hIdHRwRHhlL1JlZGZpc2hIdHRwRHhlLmluZg0KPiA+ICFlbmRpZg0KPiA+IC0tDQo+ID4g Mi4zNC4xDQo+ID4NCj4gPg0KPiA+DQo+ID4gDQo+ID4NCj4NCj4gUmVnYXJkcywNCj4gTWlrZS4N Cj4gPg0KDQoKLT0tPS09LT0tPS09LT0tPS09LT0tPS0KR3JvdXBzLmlvIExpbmtzOiBZb3UgcmVj ZWl2ZSBhbGwgbWVzc2FnZXMgc2VudCB0byB0aGlzIGdyb3VwLgpWaWV3L1JlcGx5IE9ubGluZSAo IzExNTg4NSk6IGh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC9tZXNzYWdlLzExNTg4NQpN dXRlIFRoaXMgVG9waWM6IGh0dHBzOi8vZ3JvdXBzLmlvL210LzEwNDUwNTQwNC83Njg2MTc2Ckdy b3VwIE93bmVyOiBkZXZlbCtvd25lckBlZGsyLmdyb3Vwcy5pbwpVbnN1YnNjcmliZTogaHR0cHM6 Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL3Vuc3ViIFtyZWJlY2NhQG9wZW5mdy5pb10KLT0tPS09 LT0tPS09LT0tPS09LT0tPS0KCg0K