From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web11.1063.1595573638170697401 for ; Thu, 23 Jul 2020 23:53:58 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: ray.ni@intel.com) IronPort-SDR: /YtMw0OlrKfR2CYr/XGb6pifUTq0XFmBgmciiewvZts1QCCoPaF2QGVy5HgM0AKBM49rMIPcze t4xG6hoKsNGw== X-IronPort-AV: E=McAfee;i="6000,8403,9691"; a="130742644" X-IronPort-AV: E=Sophos;i="5.75,389,1589266800"; d="scan'208";a="130742644" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jul 2020 23:53:57 -0700 IronPort-SDR: duGMKw33++mpOTO1wzNYxfokko/vC6oRLDTmK0ZjXbkfE9zb4q+Mc4e9fbzC4oEfxbbjsIbZ3q NoQJQE7zYzAQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,389,1589266800"; d="scan'208";a="489105665" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga005.fm.intel.com with ESMTP; 23 Jul 2020 23:53:57 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 23 Jul 2020 23:53:57 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.135]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.49]) with mapi id 14.03.0439.000; Fri, 24 Jul 2020 14:53:52 +0800 From: "Ni, Ray" To: "Kinney, Michael D" , "devel@edk2.groups.io" CC: "Shao, Ming" , "Dong, Eric" , Laszlo Ersek , Sean Brogan , Bret Barkelew , "Yao, Jiewen" Subject: Re: [PATCH] UefiCpuPkg/MtrrLib/UnitTest: Add host based unit test Thread-Topic: [PATCH] UefiCpuPkg/MtrrLib/UnitTest: Add host based unit test Thread-Index: AQHWXAy3VXl959YFJEantVyqGGdAE6kV+qGQgABbTrA= Date: Fri, 24 Jul 2020 06:53:52 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C628B10@SHSMSX104.ccr.corp.intel.com> References: <20200717073318.877-1-ray.ni@intel.com> In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: ray.ni@intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TWlrZSwNCkkgcmVzZW50IFYyIHBhdGNoIGFuZCByZWR1Y2VkIG1vc3Qgb2YgdGhlIGdsb2JhbCB2 YXJpYWJsZSByZWZlcmVuY2VzLg0KDQpGdXJ0aGVybHksIEkgYWRkZWQgbW9yZSBDT05TVCBtb2Rp ZmllciB0byBhdm9pZCB0ZXN0IGNhc2UgYWNjaWRlbnRseSBtb2RpZmllcyB0aGUgc3lzdGVtIHBh cmFtZXRlciBzdHJ1Y3R1cmUuDQoNCkkgc3VibWl0dGVkIGEgQnVnemlsbGEgaHR0cHM6Ly9idWd6 aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0yODYzIHRvIGNhcHR1cmUgd2hhdCB5 b3Ugc3VnZ2VzdGVkIGJlbG93Lg0KDQpUaGFua3MsDQpSYXkNCg0KPiAtLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQ0KPiBGcm9tOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBp bnRlbC5jb20+DQo+IFNlbnQ6IEZyaWRheSwgSnVseSAyNCwgMjAyMCA5OjM0IEFNDQo+IFRvOiBO aSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW87IEtpbm5leSwg TWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gQ2M6IFNoYW8sIE1pbmcg PG1pbmcuc2hhb0BpbnRlbC5jb20+OyBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPjsg TGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT47IFNlYW4gQnJvZ2FuDQo+IDxzZWFuLmJy b2dhbkBtaWNyb3NvZnQuY29tPjsgQnJldCBCYXJrZWxldyA8QnJldC5CYXJrZWxld0BtaWNyb3Nv ZnQuY29tPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBS RTogW1BBVENIXSBVZWZpQ3B1UGtnL010cnJMaWIvVW5pdFRlc3Q6IEFkZCBob3N0IGJhc2VkIHVu aXQgdGVzdA0KPiANCj4gSGkgUmF5LA0KPiANCj4gSW4gdGhlIGZvbGxvd2luZyBVbml0IFRlc3Qg RnVuY3Rpb25zLCBJIHJlY29tbWVuZCBwYXNzaW5nIGluDQo+IG1EZWZhdWx0U3lzdGVtUGFyYW1l dGVyIGFzIHRoZSBDb250ZXh0IHBhcmFtZXRlciB0byByZWR1Y2UgdGhlDQo+IHVzZSBvZiBhIGds b2JhbCB2YXJpYWJsZXMuDQo+IA0KPiAqIFVuaXRUZXN0SXNNdHJyU3VwcG9ydGVkKCkNCj4gKiBV bml0VGVzdEdldFZhcmlhYmxlTXRyckNvdW50KCkNCj4gKiBVbml0VGVzdEdldEZpcm13YXJlVmFy aWFibGVNdHJyQ291bnQoKQ0KPiAqIFVuaXRUZXN0TXRyckdldEZpeGVkTXRycigpDQo+ICogVW5p dFRlc3RNdHJyR2V0QWxsTXRycnMoKQ0KPiAqIFVuaXRUZXN0TXRyclNldEFsbE10cnJzKCkNCj4g KiBVbml0VGVzdE10cnJHZXRNZW1vcnlBdHRyaWJ1dGVJblZhcmlhYmxlTXRycigpDQo+ICogVW5p dFRlc3RNdHJyR2V0RGVmYXVsdE1lbW9yeVR5cGUoKQ0KPiANCj4gVGhlIHVzZSBvZiByYW5kb20g bWVtb3J5IG1hcHMgaXMgYSBnb29kIHdheSB0byB0ZXN0IGNvbXBsZXgNCj4gc2VydmljZXMgbGlr ZSB0aGVzZS4gIEhvd2V2ZXIsIHRoZSBpc3N1ZXMgd2l0aCByYW5kb20gdGVzdA0KPiB2ZWN0b3Jz IGlzIHRoYXQgYSB0ZXN0IGZhaWx1cmUgaXMgZGlmZmljdWx0IHRvIHJlcHJvZHVjZS4NCj4gWW91 IGNhbiBhbHNvIGhhdmUgY2FzZXMgd2hlcmUgb25lIHJ1biB0aHJvdWdoIENJIGZhaWxzIGFuZA0K PiB0aGUgbmV4dCBydW4gd2l0aCBkaWZmZXJlbnQgcmFuZG9tIHZhbHVlcyBwYXNzZXMuDQo+IA0K PiBJIGxpa2UgdGhlIGlkZWEgb2YgdXNpbmcgY29kZSB0aGF0IGdlbmVyYXRlcyByYW5kb20gdGVz dA0KPiB2ZWN0b3JzIHRvIGdlbmVyYXRlIGEgZml4ZWQgc2V0IG9mIHRlc3QgdmVjdG9ycyB0aGF0 IGFyZQ0KPiBidWlsdCBpbnRvIHRoZSB1bml0IHRlc3Qgc28gd2UgaGF2ZSB0aGUgc2FtZSB0ZXN0 IHZlY3RvcnMNCj4gZm9yIGV2ZXJ5IENJIGNoZWNrLg0KPiANCj4gVGhlbiwgd2UgY2FuIHNwbGl0 IG91dCB0aGUgdW5pdCB0ZXN0IHRoYXQgZG9lcyByYW5kb20gdGVzdA0KPiB2ZWN0b3JzIGludG8g aXRzIG93biB0ZXN0IHRoYXQgYSBkZXZlbG9wZXIgY2FuIGNob29zZSB0bw0KPiBydW4gd2l0aCBh IGhpZ2ggbnVtYmVyIG9mIGl0ZXJhdGlvbnMgd2hlbiB0aGVyZSBpcyBhbiBhbGdvDQo+IGNoYW5n ZSBvciB3ZSBhcmUgZG9pbmcgcmVsZWFzZSB0ZXN0aW5nLiAgVGhpcyB1bml0IHRlc3QNCj4gd291 bGQgbm90IGJlIHVzZSBmb3IgQ0kgdGVzdGluZy4NCj4gDQo+IEkgYW0gb2sgd2l0aCB0aGUgZmly c3QgdmVyc2lvbiB1c2luZyByYW5kb20sIGJ1dCBwbGVhc2UNCj4gZW50ZXIgYSBCWiB0byBzcGxp dCBpdCBvdXQuDQo+IA0KPiBUaGFua3MsDQo+IA0KPiBNaWtlDQo+IA0KPiA+IC0tLS0tT3JpZ2lu YWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbT4NCj4g PiBTZW50OiBGcmlkYXksIEp1bHkgMTcsIDIwMjAgMTI6MzMgQU0NCj4gPiBUbzogZGV2ZWxAZWRr Mi5ncm91cHMuaW8NCj4gPiBDYzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlA aW50ZWwuY29tPjsNCj4gPiBTaGFvLCBNaW5nIDxtaW5nLnNoYW9AaW50ZWwuY29tPjsgRG9uZywg RXJpYw0KPiA+IDxlcmljLmRvbmdAaW50ZWwuY29tPjsgTGFzemxvIEVyc2VrDQo+ID4gPGxlcnNl a0ByZWRoYXQuY29tPjsgU2VhbiBCcm9nYW4NCj4gPiA8c2Vhbi5icm9nYW5AbWljcm9zb2Z0LmNv bT47IEJyZXQgQmFya2VsZXcNCj4gPiA8QnJldC5CYXJrZWxld0BtaWNyb3NvZnQuY29tPjsgWWFv LCBKaWV3ZW4NCj4gPiA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gU3ViamVjdDogW1BBVENI XSBVZWZpQ3B1UGtnL010cnJMaWIvVW5pdFRlc3Q6IEFkZCBob3N0DQo+ID4gYmFzZWQgdW5pdCB0 ZXN0DQo+ID4NCj4gPiBBZGQgaG9zdCBiYXNlZCB1bml0IHRlc3RzIGZvciB0aGUgTXRyckxpYiBz ZXJ2aWNlcy4NCj4gPiBUaGUgQmFzZUxpYiBzZXJ2aWNlcyBBc21DcHVpZCgpLCBBc21SZWFkTXNy NjQoKSwgYW5kDQo+ID4gQXNtV3JpdGVNc3I2NCgpIGFyZSBob29rZWQgYW5kIHByb3ZpZGUgc2lt cGxlIGVtdWxhdGlvbg0KPiA+IG9mIHRoZSBDUFVJRCBsZWFmcyBhbmQgTVNScyByZXF1aXJlZCBi eSB0aGUgTXRyckxpYiB0bw0KPiA+IHJ1biBhcyBhIGhvc3QgYmFzZWQgdW5pdCB0ZXN0Lg0KPiA+ DQo+ID4gVGVzdCBjYXNlcyBhcmUgZGV2ZWxvcGVkIGZvciBlYWNoIG9mIHRoZSBBUEkuDQo+ID4N Cj4gPiBGb3IgdGhlIG1vc3QgaW1wb3J0YW50IEFQSXMNCj4gPiBNdHJyU2V0TWVtb3J5QXR0cmli dXRlc0luTXRyclNldHRpbmdzKCkNCj4gPiBhbmQgTXRyclNldE1lbW9yeUF0dHJpYnV0ZUluTXRy clNldHRpbmdzKCksIHJhbmRvbQ0KPiA+IGlucHV0cyBhcmUNCj4gPiBnZW5lcmF0ZWQgYW5kIGZl ZCB0byB0aGUgQVBJcyB0byBtYWtlIHN1cmUgdGhlDQo+ID4gaW1wbGVtZW50YXRpb24gaXMNCj4g PiBnb29kLiBUaGUgdGVzdCBhcHBsaWNhdGlvbiBhY2NlcHRzIGFuIG9wdGlvbmFsDQo+ID4gcGFy YW1ldGVyIHdoaWNoDQo+ID4gc3BlY2lmaWVzIGhvdyBtYW55IGl0ZXJhdGlvbnMgb2YgZmVlZGlu ZyByYW5kb20gaW5wdXRzDQo+ID4gdG8gdGhlIHR3bw0KPiA+IEFQSXMuIFRoZSBvdmVyYWxsIG51 bWJlciBvZiB0ZXN0IGNhc2VzIGluY3JlYXNlcyB3aGVuDQo+ID4gdGhlIGl0ZXJhdGlvbg0KPiA+ IGluY3JlYXNlcy4gRGVmYXVsdCBpdGVyYXRpb24gaXMgMTAgd2hlbiBubyBwYXJhbWV0ZXIgaXMN Cj4gPiBzcGVjaWZpZWQuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBSYXkgTmkgPHJheS5uaUBp bnRlbC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogTWljaGFlbCBEIEtpbm5leQ0KPiA+IDxtaWNo YWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBNaW5nIFNoYW8gPG1p bmcuc2hhb0BpbnRlbC5jb20+DQo+ID4gQ2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5r aW5uZXlAaW50ZWwuY29tPg0KPiA+IENjOiBNaW5nIFNoYW8gPG1pbmcuc2hhb0BpbnRlbC5jb20+ DQo+ID4gQ2M6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gPiBDYzogUmF5IE5p IDxyYXkubmlAaW50ZWwuY29tPg0KPiA+IENjOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQu Y29tPg0KPiA+IENjOiBTZWFuIEJyb2dhbiA8c2Vhbi5icm9nYW5AbWljcm9zb2Z0LmNvbT4NCj4g PiBDYzogQnJldCBCYXJrZWxldyA8QnJldC5CYXJrZWxld0BtaWNyb3NvZnQuY29tPg0KPiA+IENj OiBKaWV3ZW4gWWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgLi4uL010 cnJMaWIvVW5pdFRlc3QvTXRyckxpYlVuaXRUZXN0LmMgICAgICAgIHwgMTA5NA0KPiA+ICsrKysr KysrKysrKysrKysrDQo+ID4gIC4uLi9NdHJyTGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdC5o ICAgICAgICB8ICAxNzENCj4gPiArKysNCj4gPiAgLi4uL010cnJMaWIvVW5pdFRlc3QvTXRyckxp YlVuaXRUZXN0SG9zdC5pbmYgIHwgICAzOSArDQo+ID4gIFVlZmlDcHVQa2cvTGlicmFyeS9NdHJy TGliL1VuaXRUZXN0L1N1cHBvcnQuYyB8ICA5MTMNCj4gPiArKysrKysrKysrKysrKw0KPiA+ICBV ZWZpQ3B1UGtnL1Rlc3QvVWVmaUNwdVBrZ0hvc3RUZXN0LmRzYyAgICAgICAgfCAgIDMxICsNCj4g PiAgNSBmaWxlcyBjaGFuZ2VkLCAyMjQ4IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUg MTAwNjQ0DQo+ID4gVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRlc3QvTXRyckxpYlVu aXRUZXN0LmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gVWVmaUNwdVBrZy9MaWJyYXJ5 L010cnJMaWIvVW5pdFRlc3QvTXRyckxpYlVuaXRUZXN0LmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAw NjQ0DQo+ID4gVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRlc3QvTXRyckxpYlVuaXRU ZXN0SG9zdA0KPiA+IC5pbmYNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gVWVmaUNwdVBr Zy9MaWJyYXJ5L010cnJMaWIvVW5pdFRlc3QvU3VwcG9ydC5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NA0KPiA+IFVlZmlDcHVQa2cvVGVzdC9VZWZpQ3B1UGtnSG9zdFRlc3QuZHNjDQo+ID4NCj4g PiBkaWZmIC0tZ2l0DQo+ID4gYS9VZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9N dHJyTGliVW5pdFRlc3QuYw0KPiA+IGIvVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRl c3QvTXRyckxpYlVuaXRUZXN0LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4 IDAwMDAwMDAwMDAuLmIwNjIzZGRlYTcNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrDQo+ID4g Yi9VZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3QuYw0K PiA+IEBAIC0wLDAgKzEsMTA5NCBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPg0KPiA+ICsgIFVuaXQg dGVzdHMgb2YgdGhlIE10cnJMaWIgaW5zdGFuY2Ugb2YgdGhlIE10cnJMaWINCj4gPiBjbGFzcw0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDIwLCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cw0KPiA+IHJlc2VydmVkLjxCUj4NCj4gPg0KPiA+ICsgIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4NCj4gPiArDQo+ID4NCj4g PiArKiovDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArI2luY2x1ZGUgIk10cnJMaWJVbml0VGVzdC5o Ig0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gK0NPTlNUIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIN Cj4gPiBtRGVmYXVsdFN5c3RlbVBhcmFtZXRlciA9IHsNCj4gPg0KPiA+ICsgIDQyLCBUUlVFLCBU UlVFLCBDYWNoZVVuY2FjaGVhYmxlLCAxMg0KPiA+DQo+ID4gKyAgfTsNCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICtNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSIG1TeXN0ZW1QYXJhbWV0ZXJzW10gPSB7 DQo+ID4NCj4gPiArICB7IDM4LCBUUlVFLCBUUlVFLCBDYWNoZVVuY2FjaGVhYmxlLCAgICAxMiB9 LA0KPiA+DQo+ID4gKyAgeyAzOCwgVFJVRSwgVFJVRSwgQ2FjaGVXcml0ZUJhY2ssICAgICAgMTIg fSwNCj4gPg0KPiA+ICsgIHsgMzgsIFRSVUUsIFRSVUUsIENhY2hlV3JpdGVUaHJvdWdoLCAgIDEy IH0sDQo+ID4NCj4gPiArICB7IDM4LCBUUlVFLCBUUlVFLCBDYWNoZVdyaXRlUHJvdGVjdGVkLCAx MiB9LA0KPiA+DQo+ID4gKyAgeyAzOCwgVFJVRSwgVFJVRSwgQ2FjaGVXcml0ZUNvbWJpbmluZywg MTIgfSwNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIHsgNDIsIFRSVUUsIFRSVUUsIENhY2hlVW5j YWNoZWFibGUsICAgIDEyIH0sDQo+ID4NCj4gPiArICB7IDQyLCBUUlVFLCBUUlVFLCBDYWNoZVdy aXRlQmFjaywgICAgICAxMiB9LA0KPiA+DQo+ID4gKyAgeyA0MiwgVFJVRSwgVFJVRSwgQ2FjaGVX cml0ZVRocm91Z2gsICAgMTIgfSwNCj4gPg0KPiA+ICsgIHsgNDIsIFRSVUUsIFRSVUUsIENhY2hl V3JpdGVQcm90ZWN0ZWQsIDEyIH0sDQo+ID4NCj4gPiArICB7IDQyLCBUUlVFLCBUUlVFLCBDYWNo ZVdyaXRlQ29tYmluaW5nLCAxMiB9LA0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgeyA0OCwgVFJV RSwgVFJVRSwgQ2FjaGVVbmNhY2hlYWJsZSwgICAgMTIgfSwNCj4gPg0KPiA+ICsgIHsgNDgsIFRS VUUsIFRSVUUsIENhY2hlV3JpdGVCYWNrLCAgICAgIDEyIH0sDQo+ID4NCj4gPiArICB7IDQ4LCBU UlVFLCBUUlVFLCBDYWNoZVdyaXRlVGhyb3VnaCwgICAxMiB9LA0KPiA+DQo+ID4gKyAgeyA0OCwg VFJVRSwgVFJVRSwgQ2FjaGVXcml0ZVByb3RlY3RlZCwgMTIgfSwNCj4gPg0KPiA+ICsgIHsgNDgs IFRSVUUsIFRSVUUsIENhY2hlV3JpdGVDb21iaW5pbmcsIDEyIH0sDQo+ID4NCj4gPiArfTsNCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICtVSU5UMzIgICAgICAgICAgICAgICAgICAgIG1GaXhlZE10cnJz SW5kZXhbXSA9IHsNCj4gPg0KPiA+ICsgIE1TUl9JQTMyX01UUlJfRklYNjRLXzAwMDAwLA0KPiA+ DQo+ID4gKyAgTVNSX0lBMzJfTVRSUl9GSVgxNktfODAwMDAsDQo+ID4NCj4gPiArICBNU1JfSUEz Ml9NVFJSX0ZJWDE2S19BMDAwMCwNCj4gPg0KPiA+ICsgIE1TUl9JQTMyX01UUlJfRklYNEtfQzAw MDAsDQo+ID4NCj4gPiArICBNU1JfSUEzMl9NVFJSX0ZJWDRLX0M4MDAwLA0KPiA+DQo+ID4gKyAg TVNSX0lBMzJfTVRSUl9GSVg0S19EMDAwMCwNCj4gPg0KPiA+ICsgIE1TUl9JQTMyX01UUlJfRklY NEtfRDgwMDAsDQo+ID4NCj4gPiArICBNU1JfSUEzMl9NVFJSX0ZJWDRLX0UwMDAwLA0KPiA+DQo+ ID4gKyAgTVNSX0lBMzJfTVRSUl9GSVg0S19FODAwMCwNCj4gPg0KPiA+ICsgIE1TUl9JQTMyX01U UlJfRklYNEtfRjAwMDAsDQo+ID4NCj4gPiArICBNU1JfSUEzMl9NVFJSX0ZJWDRLX0Y4MDAwDQo+ ID4NCj4gPiArfTsNCj4gPg0KPiA+ICtTVEFUSUNfQVNTRVJUICgNCj4gPg0KPiA+ICsgIChBUlJB WV9TSVpFIChtRml4ZWRNdHJyc0luZGV4KSA9PQ0KPiA+IE1UUlJfTlVNQkVSX09GX0ZJWEVEX01U UlIpLA0KPiA+DQo+ID4gKyAgImdGaXhlZE10cnJJbmRleCBkb2VzIE5PVCBjb250YWluIGFsbCB0 aGUgZml4ZWQNCj4gPiBNVFJScyEiDQo+ID4NCj4gPiArICApOw0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKw0KPiA+DQo+ID4gK0NIQVI4ICptQ2FjaGVEZXNjcmlwdGlvbltdID0geyAiVUMiLCAiV0Mi LCAiTi9BIiwNCj4gPiAiTi9BIiwgIldUIiwgIldQIiwgIldCIiB9Ow0KPiA+DQo+ID4gKw0KPiA+ DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgQ29tcGFyZSB0aGUgYWN0dWFsIG1lbW9yeSByYW5nZXMg YWdhaW5zdCBleHBlY3RlZA0KPiA+IG1lbW9yeSByYW5nZXMgYW5kIHJldHVybiBQQVNTIHdoZW4g dGhleSBtYXRjaC4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBFeHBlY3RlZE1lbW9y eVJhbmdlcyAgICAgRXhwZWN0ZWQgbWVtb3J5DQo+ID4gcmFuZ2VzLg0KPiA+DQo+ID4gKyAgQHBh cmFtIEV4cGVjdGVkTWVtb3J5UmFuZ2VDb3VudCBDb3VudCBvZiBleHBlY3RlZA0KPiA+IG1lbW9y eSByYW5nZXMuDQo+ID4NCj4gPiArICBAcGFyYW0gQWN0dWFsUmFuZ2VzICAgICAgICAgICAgIEFj dHVhbCBtZW1vcnkNCj4gPiByYW5nZXMuDQo+ID4NCj4gPiArICBAcGFyYW0gQWN0dWFsUmFuZ2VD b3VudCAgICAgICAgIENvdW50IG9mIGFjdHVhbA0KPiA+IG1lbW9yeSByYW5nZXMuDQo+ID4NCj4g PiArDQo+ID4NCj4gPiArICBAcmV0dmFsIFVOSVRfVEVTVF9QQVNTRUQgIFRlc3QgcGFzc2VkLg0K PiA+DQo+ID4gKyAgQHJldHZhbCBvdGhlcnMgICAgICAgICAgICBUZXN0IGZhaWxlZC4NCj4gPg0K PiA+ICsqKi8NCj4gPg0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4NCj4gPiArVmVyaWZ5TWVt b3J5UmFuZ2VzICgNCj4gPg0KPiA+ICsgIElOIE1UUlJfTUVNT1JZX1JBTkdFICAqRXhwZWN0ZWRN ZW1vcnlSYW5nZXMsDQo+ID4NCj4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgRXhwZWN0ZWRN ZW1vcnlSYW5nZUNvdW50LA0KPiA+DQo+ID4gKyAgSU4gTVRSUl9NRU1PUllfUkFOR0UgICpBY3R1 YWxSYW5nZXMsDQo+ID4NCj4gPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgQWN0dWFsUmFuZ2VD b3VudA0KPiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgIFVJTlROICBJbmRl eDsNCj4gPg0KPiA+ICsgIFVUX0FTU0VSVF9FUVVBTCAoRXhwZWN0ZWRNZW1vcnlSYW5nZUNvdW50 LA0KPiA+IEFjdHVhbFJhbmdlQ291bnQpOw0KPiA+DQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IElu ZGV4IDwgRXhwZWN0ZWRNZW1vcnlSYW5nZUNvdW50Ow0KPiA+IEluZGV4KyspIHsNCj4gPg0KPiA+ ICsgICAgVVRfQVNTRVJUX0VRVUFMDQo+ID4gKEV4cGVjdGVkTWVtb3J5UmFuZ2VzW0luZGV4XS5C YXNlQWRkcmVzcywNCj4gPiBBY3R1YWxSYW5nZXNbSW5kZXhdLkJhc2VBZGRyZXNzKTsNCj4gPg0K PiA+ICsgICAgVVRfQVNTRVJUX0VRVUFMDQo+ID4gKEV4cGVjdGVkTWVtb3J5UmFuZ2VzW0luZGV4 XS5MZW5ndGgsDQo+ID4gQWN0dWFsUmFuZ2VzW0luZGV4XS5MZW5ndGgpOw0KPiA+DQo+ID4gKyAg ICBVVF9BU1NFUlRfRVFVQUwgKEV4cGVjdGVkTWVtb3J5UmFuZ2VzW0luZGV4XS5UeXBlLA0KPiA+ IEFjdHVhbFJhbmdlc1tJbmRleF0uVHlwZSk7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ ID4NCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPg0KPiA+ICt9DQo+ID4NCj4g PiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBEdW1wIHRoZSBtZW1vcnkgcmFuZ2VzLg0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhbmdlcyAgICAgICBNZW1vcnkgcmFuZ2Vz IHRvIGR1bXAuDQo+ID4NCj4gPiArICBAcGFyYW0gUmFuZ2VDb3VudCAgIENvdW50IG9mIG1lbW9y eSByYW5nZXMuDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVk9JRA0KPiA+DQo+ID4gK0R1bXBN ZW1vcnlSYW5nZXMgKA0KPiA+DQo+ID4gKyAgTVRSUl9NRU1PUllfUkFOR0UgICAgKlJhbmdlcywN Cj4gPg0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgIFJhbmdlQ291bnQNCj4gPg0KPiA+ICsg ICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBVSU5UTiAgICAgSW5kZXg7DQo+ID4NCj4gPiAr ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBSYW5nZUNvdW50OyBJbmRleCsrKSB7DQo+ID4NCj4g PiArICAgIFVUX0xPR19JTkZPICgiXHR7IDB4JTAxNmxseCwgMHglMDE2bGx4LCAlYSB9LFxuIiwN Cj4gPiBSYW5nZXNbSW5kZXhdLkJhc2VBZGRyZXNzLCBSYW5nZXNbSW5kZXhdLkxlbmd0aCwNCj4g PiBtQ2FjaGVEZXNjcmlwdGlvbltSYW5nZXNbSW5kZXhdLlR5cGVdKTsNCj4gPg0KPiA+ICsgIH0N Cj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArKiovDQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBHZW5lcmF0ZSByYW5kb20gY291 bnQgb2YgTVRSUnMgZm9yIGVhY2ggY2FjaGUgdHlwZS4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsg IEBwYXJhbSBUb3RhbENvdW50IFRvdGFsIE1UUlIgY291bnQuDQo+ID4NCj4gPiArICBAcGFyYW0g VWNDb3VudCAgICBSZXR1cm4gY291bnQgb2YgVW5jYWNoZWFibGUgdHlwZS4NCj4gPg0KPiA+ICsg IEBwYXJhbSBXdENvdW50ICAgIFJldHVybiBjb3VudCBvZiBXcml0ZSBUaHJvdWdoDQo+ID4gdHlw ZS4NCj4gPg0KPiA+ICsgIEBwYXJhbSBXYkNvdW50ICAgIFJldHVybiBjb3VudCBvZiBXcml0ZSBC YWNrIHR5cGUuDQo+ID4NCj4gPiArICBAcGFyYW0gV3BDb3VudCAgICBSZXR1cm4gY291bnQgb2Yg V3JpdGUgUHJvdGVjdGVkDQo+ID4gdHlwZS4NCj4gPg0KPiA+ICsgIEBwYXJhbSBXY0NvdW50ICAg IFJldHVybiBjb3VudCBvZiBXcml0ZSBDb21iaW5pbmcNCj4gPiB0eXBlLg0KPiA+DQo+ID4gKyoq Lw0KPiA+DQo+ID4gK1ZPSUQNCj4gPg0KPiA+ICtHZW5lcmF0ZVJhbmRvbU1lbW9yeVR5cGVDb21i aW5hdGlvbiAoDQo+ID4NCj4gPiArICBJTiAgVUlOVDMyIFRvdGFsQ291bnQsDQo+ID4NCj4gPiAr ICBPVVQgVUlOVDMyICpVY0NvdW50LA0KPiA+DQo+ID4gKyAgT1VUIFVJTlQzMiAqV3RDb3VudCwN Cj4gPg0KPiA+ICsgIE9VVCBVSU5UMzIgKldiQ291bnQsDQo+ID4NCj4gPiArICBPVVQgVUlOVDMy ICpXcENvdW50LA0KPiA+DQo+ID4gKyAgT1VUIFVJTlQzMiAqV2NDb3VudA0KPiA+DQo+ID4gKyAg KQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgIFVJTlROICBJbmRleDsNCj4gPg0KPiA+ICsgIFVJ TlQzMiBUb3RhbE10cnJDb3VudDsNCj4gPg0KPiA+ICsgIFVJTlQzMiAqQ291bnRQZXJUeXBlWzVd Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQ291bnRQZXJUeXBlWzBdID0gVWNDb3VudDsNCj4g Pg0KPiA+ICsgIENvdW50UGVyVHlwZVsxXSA9IFd0Q291bnQ7DQo+ID4NCj4gPiArICBDb3VudFBl clR5cGVbMl0gPSBXYkNvdW50Ow0KPiA+DQo+ID4gKyAgQ291bnRQZXJUeXBlWzNdID0gV3BDb3Vu dDsNCj4gPg0KPiA+ICsgIENvdW50UGVyVHlwZVs0XSA9IFdjQ291bnQ7DQo+ID4NCj4gPiArDQo+ ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gSW5pdGlhbGl6ZSB0aGUgY291bnQgb2YgZWFj aCBjYWNoZSB0eXBlIHRvIDAuDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgZm9yIChJbmRl eCA9IDA7IEluZGV4IDwgQVJSQVlfU0laRSAoQ291bnRQZXJUeXBlKTsNCj4gPiBJbmRleCsrKSB7 DQo+ID4NCj4gPiArICAgICooQ291bnRQZXJUeXBlW0luZGV4XSkgPSAwOw0KPiA+DQo+ID4gKyAg fQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIC8vIFBpY2sgYSByYW5k b20gY291bnQgb2YgTVRSUnMNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICBUb3RhbE10cnJD b3VudCA9IFJhbmRvbTMyICgxLCBUb3RhbENvdW50KTsNCj4gPg0KPiA+ICsgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IFRvdGFsTXRyckNvdW50OyBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgIC8v DQo+ID4NCj4gPiArICAgIC8vIEZvciBlYWNoIG9mIHRoZW0sIHBpY2sgYSByYW5kb20gY2FjaGUg dHlwZS4NCj4gPg0KPiA+ICsgICAgLy8NCj4gPg0KPiA+ICsgICAgKCooQ291bnRQZXJUeXBlW1Jh bmRvbTMyICgwLCBBUlJBWV9TSVpFDQo+ID4gKENvdW50UGVyVHlwZSkgLSAxKV0pKSsrOw0KPiA+ DQo+ID4gKyAgfQ0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0K PiA+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UNCj4gPiBNdHJyU2V0TWVtb3J5QXR0 cmlidXRlKCkNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAg SWdub3JlZA0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NF RCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0DQo+ID4gaGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRl c3QNCj4gPg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSB3YXMNCj4gPiBzdWNjZXNzZnVsLg0KPiA+DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VS Uk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZQ0KPiA+IGFzc2VydGlvbiBoYXMgZmFpbGVkLg0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4g Pg0KPiA+ICtFRklBUEkNCj4gPg0KPiA+ICtVbml0VGVzdE10cnJTZXRNZW1vcnlBdHRyaWJ1dGVz SW5NdHJyU2V0dGluZ3MgKA0KPiA+DQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRl eHQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBNVFJSX0xJQl9TWVNU RU1fUEFSQU1FVEVSICpTeXN0ZW1QYXJhbWV0ZXI7DQo+ID4NCj4gPiArICBSRVRVUk5fU1RBVFVT ICAgICAgICAgICAgIFN0YXR1czsNCj4gPg0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgVWNDb3VudDsNCj4gPg0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgV3RDb3Vu dDsNCj4gPg0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgV2JDb3VudDsNCj4gPg0K PiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgV3BDb3VudDsNCj4gPg0KPiA+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgV2NDb3VudDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgTXRyckluZGV4Ow0KPiA+DQo+ID4gKyAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAqU2NyYXRjaDsNCj4gPg0KPiA+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgU2NyYXRjaFNpemU7DQo+ID4NCj4gPiArICBNVFJSX1NFVFRJTkdTICAgICAg ICAgICAgIExvY2FsTXRycnM7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBNVFJSX01FTU9SWV9S QU5HRQ0KPiA+IFJhd010cnJSYW5nZVtNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSXTsNCj4g Pg0KPiA+ICsgIE1UUlJfTUVNT1JZX1JBTkdFDQo+ID4gRXhwZWN0ZWRNZW1vcnlSYW5nZXNbTVRS Ul9OVU1CRVJfT0ZfRklYRURfTVRSUiAqIHNpemVvZg0KPiA+IChVSU5UNjQpICsgMiAqIE1UUlJf TlVNQkVSX09GX1ZBUklBQkxFX01UUlIgKyAxXTsNCj4gPg0KPiA+ICsgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgRXhwZWN0ZWRWYXJpYWJsZU10cnJVc2FnZTsNCj4gPg0KPiA+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgRXhwZWN0ZWRNZW1vcnlSYW5nZXNDb3VudDsNCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsgIE1UUlJfTUVNT1JZX1JBTkdFDQo+ID4gQWN0dWFsTWVtb3J5UmFuZ2Vz W01UUlJfTlVNQkVSX09GX0ZJWEVEX01UUlIgICAqIHNpemVvZg0KPiA+IChVSU5UNjQpICsgMiAq IE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01UUlIgKyAxXTsNCj4gPg0KPiA+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgQWN0dWFsVmFyaWFibGVNdHJyVXNhZ2U7DQo+ID4NCj4gPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgIEFjdHVhbE1lbW9yeVJhbmdlc0NvdW50Ow0KPiA+DQo+ ID4gKw0KPiA+DQo+ID4gKyAgTVRSUl9TRVRUSU5HUyAgICAgICAgICAgICAqTXRycnNbMl07DQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIgPSAoTVRSUl9MSUJfU1lTVEVN X1BBUkFNRVRFUiAqKQ0KPiA+IENvbnRleHQ7DQo+ID4NCj4gPiArICBHZW5lcmF0ZVJhbmRvbU1l bW9yeVR5cGVDb21iaW5hdGlvbiAoDQo+ID4NCj4gPiArICAgIFN5c3RlbVBhcmFtZXRlci0+VmFy aWFibGVNdHJyQ291bnQgLSBQYXRjaFBjZEdldDMyDQo+ID4gKFBjZENwdU51bWJlck9mUmVzZXJ2 ZWRWYXJpYWJsZU10cnJzKSwNCj4gPg0KPiA+ICsgICAgJlVjQ291bnQsICZXdENvdW50LCAmV2JD b3VudCwgJldwQ291bnQsICZXY0NvdW50DQo+ID4NCj4gPiArICAgICk7DQo+ID4NCj4gPiArICBH ZW5lcmF0ZVZhbGlkQW5kQ29uZmlndXJhYmxlTXRyclBhaXJzICgNCj4gPg0KPiA+ICsgICAgU3lz dGVtUGFyYW1ldGVyLT5QaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiA+IFJhd010cnJSYW5nZSwNCj4g Pg0KPiA+ICsgICAgVWNDb3VudCwgV3RDb3VudCwgV2JDb3VudCwgV3BDb3VudCwgV2NDb3VudA0K PiA+DQo+ID4gKyAgICApOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgRXhwZWN0ZWRWYXJpYWJs ZU10cnJVc2FnZSA9IFVjQ291bnQgKyBXdENvdW50ICsNCj4gPiBXYkNvdW50ICsgV3BDb3VudCAr IFdjQ291bnQ7DQo+ID4NCj4gPiArICBFeHBlY3RlZE1lbW9yeVJhbmdlc0NvdW50ID0gQVJSQVlf U0laRQ0KPiA+IChFeHBlY3RlZE1lbW9yeVJhbmdlcyk7DQo+ID4NCj4gPiArICBHZXRFZmZlY3Rp dmVNZW1vcnlSYW5nZXMgKA0KPiA+DQo+ID4gKyAgICBTeXN0ZW1QYXJhbWV0ZXItPkRlZmF1bHRD YWNoZVR5cGUsDQo+ID4NCj4gPiArICAgIFN5c3RlbVBhcmFtZXRlci0+UGh5c2ljYWxBZGRyZXNz Qml0cywNCj4gPg0KPiA+ICsgICAgUmF3TXRyclJhbmdlLCBFeHBlY3RlZFZhcmlhYmxlTXRyclVz YWdlLA0KPiA+DQo+ID4gKyAgICBFeHBlY3RlZE1lbW9yeVJhbmdlcywgJkV4cGVjdGVkTWVtb3J5 UmFuZ2VzQ291bnQNCj4gPg0KPiA+ICsgICAgKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIFVU X0xPR19JTkZPICgNCj4gPg0KPiA+ICsgICAgIlRvdGFsIE1UUlIgWyVkXTogVUM9JWQsIFdUPSVk LCBXQj0lZCwgV1A9JWQsDQo+ID4gV0M9JWRcbiIsDQo+ID4NCj4gPiArICAgIEV4cGVjdGVkVmFy aWFibGVNdHJyVXNhZ2UsIFVjQ291bnQsIFd0Q291bnQsDQo+ID4gV2JDb3VudCwgV3BDb3VudCwg V2NDb3VudA0KPiA+DQo+ID4gKyAgICApOw0KPiA+DQo+ID4gKyAgVVRfTE9HX0lORk8gKCItLS0g RXhwZWN0ZWQgTWVtb3J5IFJhbmdlcyBbJWRdIC0tLQ0KPiA+IFxuIiwgRXhwZWN0ZWRNZW1vcnlS YW5nZXNDb3VudCk7DQo+ID4NCj4gPiArICBEdW1wTWVtb3J5UmFuZ2VzIChFeHBlY3RlZE1lbW9y eVJhbmdlcywNCj4gPiBFeHBlY3RlZE1lbW9yeVJhbmdlc0NvdW50KTsNCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBEZWZhdWx0IGNhY2hlIHR5cGUgaXMgYWx3YXlz IGFuIElOUFVUDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgWmVyb01lbSAoJkxvY2FsTXRy cnMsIHNpemVvZiAoTG9jYWxNdHJycykpOw0KPiA+DQo+ID4gKyAgTG9jYWxNdHJycy5NdHJyRGVm VHlwZSA9IE10cnJHZXREZWZhdWx0TWVtb3J5VHlwZQ0KPiA+ICgpOw0KPiA+DQo+ID4gKyAgU2Ny YXRjaFNpemUgICAgICAgICAgICA9IFNDUkFUQ0hfQlVGRkVSX1NJWkU7DQo+ID4NCj4gPiArICBN dHJyc1swXSAgICAgICAgICAgICAgID0gJkxvY2FsTXRycnM7DQo+ID4NCj4gPiArICBNdHJyc1sx XSAgICAgICAgICAgICAgID0gTlVMTDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIGZvciAoTXRy ckluZGV4ID0gMDsgTXRyckluZGV4IDwgQVJSQVlfU0laRSAoTXRycnMpOw0KPiA+IE10cnJJbmRl eCsrKSB7DQo+ID4NCj4gPiArICAgIFNjcmF0Y2ggPSBjYWxsb2MgKFNjcmF0Y2hTaXplLCBzaXpl b2YgKFVJTlQ4KSk7DQo+ID4NCj4gPiArICAgIFN0YXR1cyA9IE10cnJTZXRNZW1vcnlBdHRyaWJ1 dGVzSW5NdHJyU2V0dGluZ3MNCj4gPiAoTXRycnNbTXRyckluZGV4XSwgU2NyYXRjaCwgJlNjcmF0 Y2hTaXplLA0KPiA+IEV4cGVjdGVkTWVtb3J5UmFuZ2VzLCBFeHBlY3RlZE1lbW9yeVJhbmdlc0Nv dW50KTsNCj4gPg0KPiA+ICsgICAgaWYgKFN0YXR1cyA9PSBSRVRVUk5fQlVGRkVSX1RPT19TTUFM TCkgew0KPiA+DQo+ID4gKyAgICAgIFNjcmF0Y2ggPSByZWFsbG9jIChTY3JhdGNoLCBTY3JhdGNo U2l6ZSk7DQo+ID4NCj4gPiArICAgICAgU3RhdHVzID0gTXRyclNldE1lbW9yeUF0dHJpYnV0ZXNJ bk10cnJTZXR0aW5ncw0KPiA+IChNdHJyc1tNdHJySW5kZXhdLCBTY3JhdGNoLCAmU2NyYXRjaFNp emUsDQo+ID4gRXhwZWN0ZWRNZW1vcnlSYW5nZXMsIEV4cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQp Ow0KPiA+DQo+ID4gKyAgICB9DQo+ID4NCj4gPiArICAgIFVUX0FTU0VSVF9TVEFUVVNfRVFVQUwg KFN0YXR1cywgUkVUVVJOX1NVQ0NFU1MpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgICBpZiAo TXRycnNbTXRyckluZGV4XSA9PSBOVUxMKSB7DQo+ID4NCj4gPiArICAgICAgWmVyb01lbSAoJkxv Y2FsTXRycnMsIHNpemVvZiAoTG9jYWxNdHJycykpOw0KPiA+DQo+ID4gKyAgICAgIE10cnJHZXRB bGxNdHJycyAoJkxvY2FsTXRycnMpOw0KPiA+DQo+ID4gKyAgICB9DQo+ID4NCj4gPiArICAgIEFj dHVhbE1lbW9yeVJhbmdlc0NvdW50ID0gQVJSQVlfU0laRQ0KPiA+IChBY3R1YWxNZW1vcnlSYW5n ZXMpOw0KPiA+DQo+ID4gKyAgICBDb2xsZWN0VGVzdFJlc3VsdCAoDQo+ID4NCj4gPiArICAgICAg U3lzdGVtUGFyYW1ldGVyLT5EZWZhdWx0Q2FjaGVUeXBlLA0KPiA+IFN5c3RlbVBhcmFtZXRlci0+ UGh5c2ljYWxBZGRyZXNzQml0cywgU3lzdGVtUGFyYW1ldGVyLQ0KPiA+ID5WYXJpYWJsZU10cnJD b3VudCwNCj4gPg0KPiA+ICsgICAgICAmTG9jYWxNdHJycywgQWN0dWFsTWVtb3J5UmFuZ2VzLA0K PiA+ICZBY3R1YWxNZW1vcnlSYW5nZXNDb3VudCwgJkFjdHVhbFZhcmlhYmxlTXRyclVzYWdlDQo+ ID4NCj4gPiArICAgICAgKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgICAgVVRfTE9HX0lORk8g KCItLS0gQWN0dWFsIE1lbW9yeSBSYW5nZXMgWyVkXSAtLS0NCj4gPiBcbiIsIEFjdHVhbE1lbW9y eVJhbmdlc0NvdW50KTsNCj4gPg0KPiA+ICsgICAgRHVtcE1lbW9yeVJhbmdlcyAoQWN0dWFsTWVt b3J5UmFuZ2VzLA0KPiA+IEFjdHVhbE1lbW9yeVJhbmdlc0NvdW50KTsNCj4gPg0KPiA+ICsgICAg VmVyaWZ5TWVtb3J5UmFuZ2VzIChFeHBlY3RlZE1lbW9yeVJhbmdlcywNCj4gPiBFeHBlY3RlZE1l bW9yeVJhbmdlc0NvdW50LCBBY3R1YWxNZW1vcnlSYW5nZXMsDQo+ID4gQWN0dWFsTWVtb3J5UmFu Z2VzQ291bnQpOw0KPiA+DQo+ID4gKyAgICBVVF9BU1NFUlRfVFJVRSAoRXhwZWN0ZWRWYXJpYWJs ZU10cnJVc2FnZSA+PQ0KPiA+IEFjdHVhbFZhcmlhYmxlTXRyclVzYWdlKTsNCj4gPg0KPiA+ICsN Cj4gPg0KPiA+ICsgICAgWmVyb01lbSAoJkxvY2FsTXRycnMsIHNpemVvZiAoTG9jYWxNdHJycykp Ow0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgZnJlZSAoU2NyYXRjaCk7 DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPg0K PiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBUZXN0IHJvdXRp bmUgdG8gY2hlY2sgd2hldGhlciBpbnZhbGlkIGJhc2Uvc2l6ZSBjYW4NCj4gPiBiZSByZWplY3Rl ZC4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBDb250ZXh0ICAgUG9pbnRlciB0bw0K PiA+IE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBA cmV0dXJuIFRlc3Qgc3RhdHVzLg0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1VOSVRfVEVTVF9T VEFUVVMNCj4gPg0KPiA+ICtFRklBUEkNCj4gPg0KPiA+ICtVbml0VGVzdEludmFsaWRNZW1vcnlM YXlvdXRzICgNCj4gPg0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICAgICAgICAgIENvbnRl eHQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBNVFJSX0xJQl9TWVNU RU1fUEFSQU1FVEVSICAgICAqU3lzdGVtUGFyYW1ldGVyOw0KPiA+DQo+ID4gKyAgTVRSUl9NRU1P UllfUkFOR0UNCj4gPiBSYW5nZXNbTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiAqIDIgKyAx XTsNCj4gPg0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlQ291bnQ7 DQo+ID4NCj4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICBNYXhBZGRyZXNzOw0K PiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4NCj4g PiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICBCYXNlQWRkcmVzczsNCj4gPg0KPiA+ ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsNCj4gPg0KPiA+ICsgIFJF VFVSTl9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPg0KPiA+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hTaXplOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g KyAgU3lzdGVtUGFyYW1ldGVyID0gKE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIgKikNCj4gPiBD b250ZXh0Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgUmFuZ2VDb3VudCA9IFJhbmRvbTMyICgx LCBBUlJBWV9TSVpFIChSYW5nZXMpKTsNCj4gPg0KPiA+ICsgIE1heEFkZHJlc3MgPSAxdWxsIDw8 IFN5c3RlbVBhcmFtZXRlci0NCj4gPiA+UGh5c2ljYWxBZGRyZXNzQml0czsNCj4gPg0KPiA+ICsN Cj4gPg0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFJhbmdlQ291bnQ7IEluZGV4Kysp IHsNCj4gPg0KPiA+ICsgICAgZG8gew0KPiA+DQo+ID4gKyAgICAgIEJhc2VBZGRyZXNzID0gUmFu ZG9tNjQgKDAsIE1heEFkZHJlc3MpOw0KPiA+DQo+ID4gKyAgICAgIExlbmd0aCAgICAgID0gUmFu ZG9tNjQgKDEsIE1heEFkZHJlc3MgLQ0KPiA+IEJhc2VBZGRyZXNzKTsNCj4gPg0KPiA+ICsgICAg fSB3aGlsZSAoKChCYXNlQWRkcmVzcyAmIDB4RkZGKSA9PSAwKSB8fCAoKExlbmd0aA0KPiA+ICYg MHhGRkYpID09IDApKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgICAgUmFuZ2VzW0luZGV4XS5C YXNlQWRkcmVzcyA9IEJhc2VBZGRyZXNzOw0KPiA+DQo+ID4gKyAgICBSYW5nZXNbSW5kZXhdLkxl bmd0aCAgICAgID0gTGVuZ3RoOw0KPiA+DQo+ID4gKyAgICBSYW5nZXNbSW5kZXhdLlR5cGUgICAg ICAgID0NCj4gPiBHZW5lcmF0ZVJhbmRvbUNhY2hlVHlwZSAoKTsNCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsgICAgU3RhdHVzID0gTXRyclNldE1lbW9yeUF0dHJpYnV0ZSAoDQo+ID4NCj4gPiArICAg ICAgUmFuZ2VzW0luZGV4XS5CYXNlQWRkcmVzcywgUmFuZ2VzW0luZGV4XS5MZW5ndGgsDQo+ID4g UmFuZ2VzW0luZGV4XS5UeXBlDQo+ID4NCj4gPiArICAgICAgKTsNCj4gPg0KPiA+ICsgICAgVVRf QVNTRVJUX1RSVUUgKFJFVFVSTl9FUlJPUiAoU3RhdHVzKSk7DQo+ID4NCj4gPiArICB9DQo+ID4N Cj4gPiArDQo+ID4NCj4gPiArICBTY3JhdGNoU2l6ZSA9IDA7DQo+ID4NCj4gPiArICBTdGF0dXMg PSBNdHJyU2V0TWVtb3J5QXR0cmlidXRlc0luTXRyclNldHRpbmdzDQo+ID4gKE5VTEwsIE5VTEws ICZTY3JhdGNoU2l6ZSwgUmFuZ2VzLCBSYW5nZUNvdW50KTsNCj4gPg0KPiA+ICsgIFVUX0FTU0VS VF9UUlVFIChSRVRVUk5fRVJST1IgKFN0YXR1cykpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAg cmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKy8qKg0KPiA+DQo+ID4gKyAgVW5pdCB0ZXN0IG9mIE10cnJMaWIgc2VydmljZSBJc010cnJT dXBwb3J0ZWQoKQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAg ICBJZ25vcmVkDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFT U0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gPiBoYXMgY29tcGxldGVkIGFuZCB0aGUg dGVzdA0KPiA+DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YXNlIHdhcw0KPiA+IHN1Y2Nlc3NmdWwuDQo+ID4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1Rf RVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlDQo+ID4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQu DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0K PiA+DQo+ID4gK0VGSUFQSQ0KPiA+DQo+ID4gK1VuaXRUZXN0SXNNdHJyU3VwcG9ydGVkICgNCj4g Pg0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4NCj4gPiArICApDQo+ ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiAgU3lzdGVt UGFyYW1ldGVyOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQ29weU1lbSAoJlN5c3RlbVBhcmFt ZXRlciwgJm1EZWZhdWx0U3lzdGVtUGFyYW1ldGVyLA0KPiA+IHNpemVvZiAoU3lzdGVtUGFyYW1l dGVyKSk7DQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gTVRSUiBjYXBhYmlsaXR5IG9m ZiBpbiBDUFVJRCBsZWFmLg0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFt ZXRlci5NdHJyU3VwcG9ydGVkID0gRkFMU0U7DQo+ID4NCj4gPiArICBJbml0aWFsaXplTXRyclJl Z3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiA+DQo+ID4gKyAgVVRfQVNTRVJUX0ZBTFNFIChJc010 cnJTdXBwb3J0ZWQgKCkpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsg IC8vIE1UUlIgY2FwYWJpbGl0eSBvbiBpbiBDUFVJRCBsZWFmLCBidXQgbm8gdmFyaWFibGUNCj4g PiBvciBmaXhlZCBNVFJScy4NCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICBTeXN0ZW1QYXJh bWV0ZXIuTXRyclN1cHBvcnRlZCA9IFRSVUU7DQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIu VmFyaWFibGVNdHJyQ291bnQgPSAwOw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLkZpeGVk TXRyclN1cHBvcnRlZCA9IEZBTFNFOw0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgm U3lzdGVtUGFyYW1ldGVyKTsNCj4gPg0KPiA+ICsgIFVUX0FTU0VSVF9GQUxTRSAoSXNNdHJyU3Vw cG9ydGVkICgpKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBN VFJSIGNhcGFiaWxpdHkgb24gaW4gQ1BVSUQgbGVhZiwgYnV0IG5vIHZhcmlhYmxlDQo+ID4gTVRS UnMuDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBw b3J0ZWQgPSBUUlVFOw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNv dW50ID0gMDsNCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlci5GaXhlZE10cnJTdXBwb3J0ZWQg PSBUUlVFOw0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVy KTsNCj4gPg0KPiA+ICsgIFVUX0FTU0VSVF9GQUxTRSAoSXNNdHJyU3VwcG9ydGVkICgpKTsNCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBNVFJSIGNhcGFiaWxpdHkg b24gaW4gQ1BVSUQgbGVhZiwgYnV0IG5vIGZpeGVkDQo+ID4gTVRSUnMuDQo+ID4NCj4gPiArICAv Lw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiA+ DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ID0gNzsNCj4gPg0KPiA+ ICsgIFN5c3RlbVBhcmFtZXRlci5GaXhlZE10cnJTdXBwb3J0ZWQgPSBGQUxTRTsNCj4gPg0KPiA+ ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArICBV VF9BU1NFUlRfRkFMU0UgKElzTXRyclN1cHBvcnRlZCAoKSk7DQo+ID4NCj4gPiArDQo+ID4NCj4g PiArICAvLw0KPiA+DQo+ID4gKyAgLy8gTVRSUiBjYXBhYmlsaXR5IG9uIGluIENQVUlEIGxlYWYg d2l0aCBib3RoDQo+ID4gdmFyaWFibGUgYW5kIGZpeGVkIE1UUlJzLg0KPiA+DQo+ID4gKyAgLy8N Cj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gPg0K PiA+ICsgIFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCA9IDc7DQo+ID4NCj4gPiAr ICBTeXN0ZW1QYXJhbWV0ZXIuRml4ZWRNdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gPg0KPiA+ICsg IEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArICBVVF9B U1NFUlRfVFJVRSAoSXNNdHJyU3VwcG9ydGVkICgpKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsg IHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsvKioNCj4gPg0KPiA+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UgR2V0VmFy aWFibGVNdHJyQ291bnQoKQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtW2luXSAgQ29u dGV4dCAgICBJZ25vcmVkDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcmV0dmFsICBVTklUX1RF U1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gPiBoYXMgY29tcGxldGVkIGFu ZCB0aGUgdGVzdA0KPiA+DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlIHdhcw0KPiA+IHN1Y2Nlc3NmdWwuDQo+ID4NCj4gPiArICBAcmV0dmFsICBVTklU X1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlDQo+ID4gYXNzZXJ0aW9uIGhhcyBm YWlsZWQuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVU5JVF9URVNUX1NU QVRVUw0KPiA+DQo+ID4gK0VGSUFQSQ0KPiA+DQo+ID4gK1VuaXRUZXN0R2V0VmFyaWFibGVNdHJy Q291bnQgKA0KPiA+DQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPg0K PiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgIFJlc3VsdDsNCj4gPg0KPiA+ICsgIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIgU3lzdGVt UGFyYW1ldGVyOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQ29weU1lbSAoJlN5c3RlbVBhcmFt ZXRlciwgJm1EZWZhdWx0U3lzdGVtUGFyYW1ldGVyLA0KPiA+IHNpemVvZiAoU3lzdGVtUGFyYW1l dGVyKSk7DQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gSWYgTVRSUiBjYXBhYmlsaXR5 IG9mZiBpbiBDUFVJRCBsZWFmLCB0aGVuIHRoZQ0KPiA+IGNvdW50IGlzIGFsd2F5cyAwLg0KPiA+ DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0g RkFMU0U7DQo+ID4NCj4gPiArICBmb3IgKFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3Vu dCA9IDE7DQo+ID4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50IDw9DQo+ID4gTVRS Ul9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUjsNCj4gPiBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVN dHJyQ291bnQrKykgew0KPiA+DQo+ID4gKyAgICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1Q YXJhbWV0ZXIpOw0KPiA+DQo+ID4gKyAgICBSZXN1bHQgPSBHZXRWYXJpYWJsZU10cnJDb3VudCAo KTsNCj4gPg0KPiA+ICsgICAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsIDApOw0KPiA+DQo+ID4g KyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIC8vIFRyeSBhbGwg c3VwcG9ydGVkIHZhcmlhYmxlIE1UUlIgY291bnRzLg0KPiA+DQo+ID4gKyAgLy8gSWYgdmFyaWFi bGUgTVRSUiBjb3VudCBpcyA+DQo+ID4gTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiwgdGhl biBhbiBBU1NFUlQoKQ0KPiA+DQo+ID4gKyAgLy8gaXMgZ2VuZXJhdGVkLg0KPiA+DQo+ID4gKyAg Ly8NCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4g Pg0KPiA+ICsgIGZvciAoU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ID0gMTsNCj4g PiBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291bnQgPD0NCj4gPiBNVFJSX05VTUJFUl9P Rl9WQVJJQUJMRV9NVFJSOw0KPiA+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCsr KSB7DQo+ID4NCj4gPiArICAgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7 DQo+ID4NCj4gPiArICAgIFJlc3VsdCA9IEdldFZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiA+DQo+ ID4gKyAgICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwNCj4gPiBTeXN0ZW1QYXJhbWV0ZXIuVmFy aWFibGVNdHJyQ291bnQpOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAg Ly8NCj4gPg0KPiA+ICsgIC8vIEV4cGVjdCBBU1NFUlQoKSBpZiB2YXJpYWJsZSBNVFJSIGNvdW50 IGlzID4NCj4gPiBNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSDQo+ID4NCj4gPiArICAvLw0K PiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ID0NCj4gPiBNVFJS X05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSICsgMTsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJy UmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArICBVVF9FWFBFQ1RfQVNTRVJUX0ZB SUxVUkUgKEdldFZhcmlhYmxlTXRyckNvdW50ICgpLA0KPiA+IE5VTEwpOw0KPiA+DQo+ID4gKw0K PiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiA+DQo+ ID4gKyAgU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ID0gTUFYX1VJTlQ4Ow0KPiA+ DQo+ID4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gPg0KPiA+ ICsgIFVUX0VYUEVDVF9BU1NFUlRfRkFJTFVSRSAoR2V0VmFyaWFibGVNdHJyQ291bnQgKCksDQo+ ID4gTlVMTCk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NF RDsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBV bml0IHRlc3Qgb2YgTXRyckxpYiBzZXJ2aWNlDQo+ID4gR2V0RmlybXdhcmVWYXJpYWJsZU10cnJD b3VudCgpDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIEln bm9yZWQNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQg ICAgICAgICAgICAgVGhlIFVuaXQgdGVzdA0KPiA+IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSB0ZXN0 DQo+ID4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug d2FzDQo+ID4gc3VjY2Vzc2Z1bC4NCj4gPg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJP Ul9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gPiBhc3NlcnRpb24gaGFzIGZhaWxlZC4NCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4N Cj4gPiArRUZJQVBJDQo+ID4NCj4gPiArVW5pdFRlc3RHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNv dW50ICgNCj4gPg0KPiA+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4NCj4g PiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICBSZXN1bHQ7DQo+ID4NCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFJlc2VydmVk TXRycnM7DQo+ID4NCj4gPiArICBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSIFN5c3RlbVBhcmFt ZXRlcjsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIENvcHlNZW0gKCZTeXN0ZW1QYXJhbWV0ZXIs ICZtRGVmYXVsdFN5c3RlbVBhcmFtZXRlciwNCj4gPiBzaXplb2YgKFN5c3RlbVBhcmFtZXRlcikp Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFy YW1ldGVyKTsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBQb3NpdGl2ZSB0ZXN0IGNh c2VzIGZvciBWQ05UID0gMTAgYW5kIFJlc2VydmVkDQo+ID4gUENEIGluIHJhbmdlIDAuLjEwDQo+ ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgZm9yIChSZXNlcnZlZE10cnJzID0gMDsgUmVzZXJ2 ZWRNdHJycyA8PQ0KPiA+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudDsgUmVzZXJ2 ZWRNdHJycysrKSB7DQo+ID4NCj4gPiArICAgIFBhdGNoUGNkU2V0MzINCj4gPiAoUGNkQ3B1TnVt YmVyT2ZSZXNlcnZlZFZhcmlhYmxlTXRycnMsIFJlc2VydmVkTXRycnMpOw0KPiA+DQo+ID4gKyAg ICBSZXN1bHQgPSBHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiA+DQo+ID4gKyAg ICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwNCj4gPiBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVN dHJyQ291bnQgLSBSZXNlcnZlZE10cnJzKTsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBOZWdhdGl2ZSB0ZXN0IGNhc2VzIHdoZW4gUmVz ZXJ2ZWQgUENEIGlzIGxhcmdlcg0KPiA+IHRoYW4gVkNOVA0KPiA+DQo+ID4gKyAgLy8NCj4gPg0K PiA+ICsgIGZvciAoUmVzZXJ2ZWRNdHJycyA9DQo+ID4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxl TXRyckNvdW50ICsgMTsgUmVzZXJ2ZWRNdHJycyA8PQ0KPiA+IDI1NTsgUmVzZXJ2ZWRNdHJycysr KSB7DQo+ID4NCj4gPiArICAgIFBhdGNoUGNkU2V0MzINCj4gPiAoUGNkQ3B1TnVtYmVyT2ZSZXNl cnZlZFZhcmlhYmxlTXRycnMsIFJlc2VydmVkTXRycnMpOw0KPiA+DQo+ID4gKyAgICBSZXN1bHQg PSBHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiA+DQo+ID4gKyAgICBVVF9BU1NF UlRfRVFVQUwgKFJlc3VsdCwgMCk7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4g PiArICAvLw0KPiA+DQo+ID4gKyAgLy8gTmVnYXRpdmUgdGVzdCBjYXNlcyB3aGVuIFJlc2VydmVk IFBDRCBpcyBsYXJnZXINCj4gPiB0aGFuIFZDTlQNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiAr ICBQYXRjaFBjZFNldDMyIChQY2RDcHVOdW1iZXJPZlJlc2VydmVkVmFyaWFibGVNdHJycywNCj4g PiBNQVhfVUlOVDMyKTsNCj4gPg0KPiA+ICsgIFJlc3VsdCA9IEdldEZpcm13YXJlVmFyaWFibGVN dHJyQ291bnQgKCk7DQo+ID4NCj4gPiArICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwgMCk7DQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gTmVnYXRpdmUgdGVzdCBj YXNlIHdoZW4gTVRSUnMgYXJlIG5vdCBzdXBwb3J0ZWQNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4g PiArICBTeXN0ZW1QYXJhbWV0ZXIuTXRyclN1cHBvcnRlZCA9IEZBTFNFOw0KPiA+DQo+ID4gKyAg SW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gPg0KPiA+ICsgIFBhdGNo UGNkU2V0MzIgKFBjZENwdU51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZU10cnJzLA0KPiA+IDIpOw0K PiA+DQo+ID4gKyAgUmVzdWx0ID0gR2V0RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCAoKTsNCj4g Pg0KPiA+ICsgIFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LCAwKTsNCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBOZWdhdGl2ZSB0ZXN0IGNhc2Ugd2hlbiBGaXhlZCBN VFJScyBhcmUgbm90DQo+ID4gc3VwcG9ydGVkDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAg U3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiA+DQo+ID4gKyAgU3lzdGVt UGFyYW1ldGVyLkZpeGVkTXRyclN1cHBvcnRlZCA9IEZBTFNFOw0KPiA+DQo+ID4gKyAgSW5pdGlh bGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gPg0KPiA+ICsgIFBhdGNoUGNkU2V0 MzIgKFBjZENwdU51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZU10cnJzLA0KPiA+IDIpOw0KPiA+DQo+ ID4gKyAgUmVzdWx0ID0gR2V0RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCAoKTsNCj4gPg0KPiA+ ICsgIFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LCAwKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsg IC8vDQo+ID4NCj4gPiArICAvLyBFeHBlY3QgQVNTRVJUKCkgaWYgdmFyaWFibGUgTVRSUiBjb3Vu dCBpcyA+DQo+ID4gTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUg0KPiA+DQo+ID4gKyAgLy8N Cj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlci5GaXhlZE10cnJTdXBwb3J0ZWQgPSBUUlVFOw0K PiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ID0NCj4gPiBNVFJS X05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSICsgMTsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJy UmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArICBVVF9FWFBFQ1RfQVNTRVJUX0ZB SUxVUkUNCj4gPiAoR2V0RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCAoKSwgTlVMTCk7DQo+ID4N Cj4gPiArDQo+ID4NCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPg0KPiA+ICt9 DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBVbml0IHRlc3Qgb2YgTXRy ckxpYiBzZXJ2aWNlDQo+ID4gTXRyckdldE1lbW9yeUF0dHJpYnV0ZSgpDQo+ID4NCj4gPiArDQo+ ID4NCj4gPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIElnbm9yZWQNCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQg dGVzdA0KPiA+IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSB0ZXN0DQo+ID4NCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzDQo+ID4gc3VjY2Vzc2Z1bC4N Cj4gPg0KPiA+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0 IGNhc2UNCj4gPiBhc3NlcnRpb24gaGFzIGZhaWxlZC4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsq Ki8NCj4gPg0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4NCj4gPiArRUZJQVBJDQo+ID4NCj4g PiArVW5pdFRlc3RNdHJyR2V0TWVtb3J5QXR0cmlidXRlICgNCj4gPg0KPiA+ICsgIElOIFVOSVRf VEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0K PiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgVW5pdCB0ZXN0IG9mIE10cnJMaWIgc2VydmljZSBN dHJyR2V0Rml4ZWRNdHJyKCkNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbVtpbl0gIENv bnRleHQgICAgSWdub3JlZA0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9U RVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0DQo+ID4gaGFzIGNvbXBsZXRlZCBh bmQgdGhlIHRlc3QNCj4gPg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSB3YXMNCj4gPiBzdWNjZXNzZnVsLg0KPiA+DQo+ID4gKyAgQHJldHZhbCAgVU5J VF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZQ0KPiA+IGFzc2VydGlvbiBoYXMg ZmFpbGVkLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1VOSVRfVEVTVF9T VEFUVVMNCj4gPg0KPiA+ICtFRklBUEkNCj4gPg0KPiA+ICtVbml0VGVzdE10cnJHZXRGaXhlZE10 cnIgKA0KPiA+DQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gPg0KPiA+ ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBNVFJSX0ZJWEVEX1NFVFRJTkdTICAgICAg ICpSZXN1bHQ7DQo+ID4NCj4gPiArICBNVFJSX0ZJWEVEX1NFVFRJTkdTICAgICAgIEV4cGVjdGVk Rml4ZWRTZXR0aW5nczsNCj4gPg0KPiA+ICsgIE1UUlJfRklYRURfU0VUVElOR1MgICAgICAgRml4 ZWRTZXR0aW5nczsNCj4gPg0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgSW5kZXg7 DQo+ID4NCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIE1zckluZGV4Ow0KPiA+DQo+ ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBCeXRlSW5kZXg7DQo+ID4NCj4gPiArICBV SU5UNjQgICAgICAgICAgICAgICAgICAgIE1zclZhbHVlOw0KPiA+DQo+ID4gKyAgTVRSUl9MSUJf U1lTVEVNX1BBUkFNRVRFUiBTeXN0ZW1QYXJhbWV0ZXI7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiAr ICBDb3B5TWVtICgmU3lzdGVtUGFyYW1ldGVyLCAmbURlZmF1bHRTeXN0ZW1QYXJhbWV0ZXIsDQo+ ID4gc2l6ZW9mIChTeXN0ZW1QYXJhbWV0ZXIpKTsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJy UmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8g U2V0IHJhbmRvbSBjYWNoZSB0eXBlIHRvIGRpZmZlcmVudCByYW5nZXMgdW5kZXINCj4gPiAxTUIg YW5kIG1ha2Ugc3VyZQ0KPiA+DQo+ID4gKyAgLy8gdGhlIGZpeGVkIE1UUlIgc2V0dGluZ3MgYXJl IGV4cGVjdGVkLg0KPiA+DQo+ID4gKyAgLy8gVHJ5IDEwMCB0aW1lcy4NCj4gPg0KPiA+ICsgIC8v DQo+ID4NCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAxMDA7IEluZGV4KyspIHsNCj4g Pg0KPiA+ICsgICAgZm9yIChNc3JJbmRleCA9IDA7IE1zckluZGV4IDwgQVJSQVlfU0laRQ0KPiA+ IChtRml4ZWRNdHJyc0luZGV4KTsgTXNySW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICAgIE1zclZh bHVlID0gMDsNCj4gPg0KPiA+ICsgICAgICBmb3IgKEJ5dGVJbmRleCA9IDA7IEJ5dGVJbmRleCA8 IHNpemVvZiAoVUlOVDY0KTsNCj4gPiBCeXRlSW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICAgICAg TXNyVmFsdWUgPSBNc3JWYWx1ZSB8IExTaGlmdFU2NA0KPiA+IChHZW5lcmF0ZVJhbmRvbUNhY2hl VHlwZSAoKSwgQnl0ZUluZGV4ICogOCk7DQo+ID4NCj4gPiArICAgICAgfQ0KPiA+DQo+ID4gKyAg ICAgIEV4cGVjdGVkRml4ZWRTZXR0aW5ncy5NdHJyW01zckluZGV4XSA9IE1zclZhbHVlOw0KPiA+ DQo+ID4gKyAgICAgIEFzbVdyaXRlTXNyNjQgKG1GaXhlZE10cnJzSW5kZXhbTXNySW5kZXhdLA0K PiA+IE1zclZhbHVlKTsNCj4gPg0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAg ICBSZXN1bHQgPSBNdHJyR2V0Rml4ZWRNdHJyICgmRml4ZWRTZXR0aW5ncyk7DQo+ID4NCj4gPiAr ICAgIFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LCAmRml4ZWRTZXR0aW5ncyk7DQo+ID4NCj4gPiAr ICAgIFVUX0FTU0VSVF9NRU1fRVFVQUwgKCZGaXhlZFNldHRpbmdzLA0KPiA+ICZFeHBlY3RlZEZp eGVkU2V0dGluZ3MsIHNpemVvZiAoRml4ZWRTZXR0aW5ncykpOw0KPiA+DQo+ID4gKyAgfQ0KPiA+ DQo+ID4gKw0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIC8vIE5lZ2F0aXZlIHRlc3QgY2Fz ZSB3aGVuIE1UUlJzIGFyZSBub3Qgc3VwcG9ydGVkDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4g KyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBGQUxTRTsNCj4gPg0KPiA+ICsgIElu aXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArDQo+ID4NCj4g PiArICBaZXJvTWVtICgmRml4ZWRTZXR0aW5ncywgc2l6ZW9mIChGaXhlZFNldHRpbmdzKSk7DQo+ ID4NCj4gPiArICBaZXJvTWVtICgmRXhwZWN0ZWRGaXhlZFNldHRpbmdzLCBzaXplb2YNCj4gPiAo RXhwZWN0ZWRGaXhlZFNldHRpbmdzKSk7DQo+ID4NCj4gPiArICBSZXN1bHQgPSBNdHJyR2V0Rml4 ZWRNdHJyICgmRml4ZWRTZXR0aW5ncyk7DQo+ID4NCj4gPiArICBVVF9BU1NFUlRfRVFVQUwgKFJl c3VsdCwgJkZpeGVkU2V0dGluZ3MpOw0KPiA+DQo+ID4gKyAgVVRfQVNTRVJUX01FTV9FUVVBTCAo JkV4cGVjdGVkRml4ZWRTZXR0aW5ncywNCj4gPiAmRml4ZWRTZXR0aW5ncywgc2l6ZW9mIChFeHBl Y3RlZEZpeGVkU2V0dGluZ3MpKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIHJldHVybiBVTklU X1RFU1RfUEFTU0VEOw0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4g Pg0KPiA+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UgTXRyckdldEFsbE10cnJzKCkN Cj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgSWdub3JlZA0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAg ICAgICBUaGUgVW5pdCB0ZXN0DQo+ID4gaGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRlc3QNCj4gPg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMNCj4g PiBzdWNjZXNzZnVsLg0KPiA+DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1Rf RkFJTEVEICBBIHRlc3QgY2FzZQ0KPiA+IGFzc2VydGlvbiBoYXMgZmFpbGVkLg0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPg0KPiA+ICtF RklBUEkNCj4gPg0KPiA+ICtVbml0VGVzdE10cnJHZXRBbGxNdHJycyAoDQo+ID4NCj4gPiArICBJ TiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sN Cj4gPg0KPiA+ICsgIE1UUlJfU0VUVElOR1MgICpSZXN1bHQ7DQo+ID4NCj4gPiArICBNVFJSX1NF VFRJTkdTICBNdHJyczsNCj4gPg0KPiA+ICsgIE1UUlJfU0VUVElOR1MgIEV4cGVjdGVkTXRycnM7 DQo+ID4NCj4gPiArICBNVFJSX1ZBUklBQkxFX1NFVFRJTkcNCj4gPiBWYXJpYWJsZU10cnJbTVRS Ul9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUl07DQo+ID4NCj4gPiArICBVSU5UMzIgICAgICAgICBJ bmRleDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIg U3lzdGVtUGFyYW1ldGVyOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQ29weU1lbSAoJlN5c3Rl bVBhcmFtZXRlciwgJm1EZWZhdWx0U3lzdGVtUGFyYW1ldGVyLA0KPiA+IHNpemVvZiAoU3lzdGVt UGFyYW1ldGVyKSk7DQo+ID4NCj4gPiArICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJh bWV0ZXIpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwN Cj4gPiBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291bnQ7IEluZGV4KyspIHsNCj4gPg0K PiA+ICsgICAgR2VuZXJhdGVSYW5kb21NdHJyUGFpcg0KPiA+IChTeXN0ZW1QYXJhbWV0ZXIuUGh5 c2ljYWxBZGRyZXNzQml0cywNCj4gPiBHZW5lcmF0ZVJhbmRvbUNhY2hlVHlwZSAoKSwgJlZhcmlh YmxlTXRycltJbmRleF0sDQo+ID4gTlVMTCk7DQo+ID4NCj4gPiArICAgIEFzbVdyaXRlTXNyNjQg KE1TUl9JQTMyX01UUlJfUEhZU0JBU0UwICsgKEluZGV4IDw8DQo+ID4gMSksIFZhcmlhYmxlTXRy cltJbmRleF0uQmFzZSk7DQo+ID4NCj4gPiArICAgIEFzbVdyaXRlTXNyNjQgKE1TUl9JQTMyX01U UlJfUEhZU01BU0swICsgKEluZGV4IDw8DQo+ID4gMSksIFZhcmlhYmxlTXRycltJbmRleF0uTWFz ayk7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArICBSZXN1bHQgPSBNdHJyR2V0QWxsTXRycnMg KCZNdHJycyk7DQo+ID4NCj4gPiArICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwgJk10cnJzKTsN Cj4gPg0KPiA+ICsgIFVUX0FTU0VSVF9NRU1fRVFVQUwgKE10cnJzLlZhcmlhYmxlcy5NdHJyLA0K PiA+IFZhcmlhYmxlTXRyciwgc2l6ZW9mIChNVFJSX1ZBUklBQkxFX1NFVFRJTkcpICoNCj4gPiBT eXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291bnQpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g KyAgLy8NCj4gPg0KPiA+ICsgIC8vIE5lZ2F0aXZlIHRlc3QgY2FzZSB3aGVuIE1UUlJzIGFyZSBu b3Qgc3VwcG9ydGVkDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgWmVyb01lbSAoJkV4cGVj dGVkTXRycnMsIHNpemVvZiAoRXhwZWN0ZWRNdHJycykpOw0KPiA+DQo+ID4gKyAgWmVyb01lbSAo Jk10cnJzLCBzaXplb2YgKE10cnJzKSk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBTeXN0ZW1Q YXJhbWV0ZXIuTXRyclN1cHBvcnRlZCA9IEZBTFNFOw0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZU10 cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gPg0KPiA+ICsgIFJlc3VsdCA9IE10cnJHZXRB bGxNdHJycyAoJk10cnJzKTsNCj4gPg0KPiA+ICsgIFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LCAm TXRycnMpOw0KPiA+DQo+ID4gKyAgVVRfQVNTRVJUX01FTV9FUVVBTCAoJkV4cGVjdGVkTXRycnMs ICZNdHJycywgc2l6ZW9mDQo+ID4gKEV4cGVjdGVkTXRycnMpKTsNCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBFeHBlY3QgQVNTRVJUKCkgaWYgdmFyaWFibGUgTVRS UiBjb3VudCBpcyA+DQo+ID4gTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUg0KPiA+DQo+ID4g KyAgLy8NCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsN Cj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCA9DQo+ID4gTVRS Ul9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiArIDE7DQo+ID4NCj4gPiArICBJbml0aWFsaXplTXRy clJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiA+DQo+ID4gKyAgVVRfRVhQRUNUX0FTU0VSVF9G QUlMVVJFIChNdHJyR2V0QWxsTXRycnMgKCZNdHJycyksDQo+ID4gTlVMTCk7DQo+ID4NCj4gPiAr DQo+ID4NCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPg0KPiA+ICt9DQo+ID4N Cj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBVbml0IHRlc3Qgb2YgTXRyckxpYiBz ZXJ2aWNlIE10cnJTZXRBbGxNdHJycygpDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW1b aW5dICBDb250ZXh0ICAgIElnbm9yZWQNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEByZXR2YWwg IFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdA0KPiA+IGhhcyBjb21w bGV0ZWQgYW5kIHRoZSB0ZXN0DQo+ID4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2Ugd2FzDQo+ID4gc3VjY2Vzc2Z1bC4NCj4gPg0KPiA+ICsgIEByZXR2 YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gPiBhc3NlcnRp b24gaGFzIGZhaWxlZC4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtVTklU X1RFU1RfU1RBVFVTDQo+ID4NCj4gPiArRUZJQVBJDQo+ID4NCj4gPiArVW5pdFRlc3RNdHJyU2V0 QWxsTXRycnMgKA0KPiA+DQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4g Pg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBNVFJSX1NFVFRJTkdTICAgICAg ICAgICAgICAgICAgICpSZXN1bHQ7DQo+ID4NCj4gPiArICBNVFJSX1NFVFRJTkdTICAgICAgICAg ICAgICAgICAgIE10cnJzOw0KPiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAg ICAgICBJbmRleDsNCj4gPg0KPiA+ICsgIE1TUl9JQTMyX01UUlJfREVGX1RZUEVfUkVHSVNURVIg RGVmYXVsdDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVU RVIgU3lzdGVtUGFyYW1ldGVyOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQ29weU1lbSAoJlN5 c3RlbVBhcmFtZXRlciwgJm1EZWZhdWx0U3lzdGVtUGFyYW1ldGVyLA0KPiA+IHNpemVvZiAoU3lz dGVtUGFyYW1ldGVyKSk7DQo+ID4NCj4gPiArICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1Q YXJhbWV0ZXIpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgRGVmYXVsdC5VaW50NjQgPSAwOw0K PiA+DQo+ID4gKyAgRGVmYXVsdC5CaXRzLkUgPSAxOw0KPiA+DQo+ID4gKyAgRGVmYXVsdC5CaXRz LkZFID0gMTsNCj4gPg0KPiA+ICsgIERlZmF1bHQuQml0cy5UeXBlID0gR2VuZXJhdGVSYW5kb21D YWNoZVR5cGUgKCk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBaZXJvTWVtICgmTXRycnMsIHNp emVvZiAoTXRycnMpKTsNCj4gPg0KPiA+ICsgIE10cnJzLk10cnJEZWZUeXBlID0gRGVmYXVsdC5V aW50NjQ7DQo+ID4NCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPA0KPiA+IFN5c3RlbVBh cmFtZXRlci5WYXJpYWJsZU10cnJDb3VudDsgSW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICBHZW5l cmF0ZVJhbmRvbU10cnJQYWlyDQo+ID4gKFN5c3RlbVBhcmFtZXRlci5QaHlzaWNhbEFkZHJlc3NC aXRzLA0KPiA+IEdlbmVyYXRlUmFuZG9tQ2FjaGVUeXBlICgpLA0KPiA+ICZNdHJycy5WYXJpYWJs ZXMuTXRycltJbmRleF0sIE5VTEwpOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKyAgUmVzdWx0 ID0gTXRyclNldEFsbE10cnJzICgmTXRycnMpOw0KPiA+DQo+ID4gKyAgVVRfQVNTRVJUX0VRVUFM IChSZXN1bHQsICZNdHJycyk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBVVF9BU1NFUlRfRVFV QUwgKEFzbVJlYWRNc3I2NA0KPiA+IChNU1JfSUEzMl9NVFJSX0RFRl9UWVBFKSwgTXRycnMuTXRy ckRlZlR5cGUpOw0KPiA+DQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwNCj4gPiBTeXN0 ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291bnQ7IEluZGV4KyspIHsNCj4gPg0KPiA+ICsgICAg VVRfQVNTRVJUX0VRVUFMIChBc21SZWFkTXNyNjQNCj4gPiAoTVNSX0lBMzJfTVRSUl9QSFlTQkFT RTAgKyAoSW5kZXggPDwgMSkpLA0KPiA+IE10cnJzLlZhcmlhYmxlcy5NdHJyW0luZGV4XS5CYXNl KTsNCj4gPg0KPiA+ICsgICAgVVRfQVNTRVJUX0VRVUFMIChBc21SZWFkTXNyNjQNCj4gPiAoTVNS X0lBMzJfTVRSUl9QSFlTTUFTSzAgKyAoSW5kZXggPDwgMSkpLA0KPiA+IE10cnJzLlZhcmlhYmxl cy5NdHJyW0luZGV4XS5NYXNrKTsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UNCj4g PiBNdHJyR2V0TWVtb3J5QXR0cmlidXRlSW5WYXJpYWJsZU10cnIoKQ0KPiA+DQo+ID4gKw0KPiA+ DQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICBJZ25vcmVkDQo+ID4NCj4gPiArDQo+ID4N Cj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRl c3QNCj4gPiBoYXMgY29tcGxldGVkIGFuZCB0aGUgdGVzdA0KPiA+DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcw0KPiA+IHN1Y2Nlc3NmdWwuDQo+ ID4NCj4gPiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBj YXNlDQo+ID4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArKiov DQo+ID4NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+DQo+ID4gK0VGSUFQSQ0KPiA+DQo+ID4g K1VuaXRUZXN0TXRyckdldE1lbW9yeUF0dHJpYnV0ZUluVmFyaWFibGVNdHJyICgNCj4gPg0KPiA+ ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4NCj4gPiArICApDQo+ID4NCj4g PiArew0KPiA+DQo+ID4gKyAgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiAgICAgICBTeXN0ZW1Q YXJhbWV0ZXI7DQo+ID4NCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgIFJl c3VsdDsNCj4gPg0KPiA+ICsgIE1UUlJfVkFSSUFCTEVfU0VUVElORw0KPiA+IFZhcmlhYmxlU2V0 dGluZ1tNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSXTsNCj4gPg0KPiA+ICsgIFZBUklBQkxF X01UUlINCj4gPiBWYXJpYWJsZU10cnJbTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUl07DQo+ ID4NCj4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkTXRyckJpdHNN YXNrOw0KPiA+DQo+ID4gKyAgVUlOVDY0DQo+ID4gVmFsaWRNdHJyQWRkcmVzc01hc2s7DQo+ID4N Cj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+DQo+ID4g KyAgTVNSX0lBMzJfTVRSUl9QSFlTQkFTRV9SRUdJU1RFUiBCYXNlOw0KPiA+DQo+ID4gKyAgTVNS X0lBMzJfTVRSUl9QSFlTTUFTS19SRUdJU1RFUiBNYXNrOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g KyAgQ29weU1lbSAoJlN5c3RlbVBhcmFtZXRlciwgJm1EZWZhdWx0U3lzdGVtUGFyYW1ldGVyLA0K PiA+IHNpemVvZiAoU3lzdGVtUGFyYW1ldGVyKSk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBJ bml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKyAgVmFsaWRNdHJyQml0c01hc2sgICAgPSAoMXVsbCA8PA0KPiA+IFN5c3RlbVBhcmFtZXRl ci5QaHlzaWNhbEFkZHJlc3NCaXRzKSAtIDE7DQo+ID4NCj4gPiArICBWYWxpZE10cnJBZGRyZXNz TWFzayA9IFZhbGlkTXRyckJpdHNNYXNrICYNCj4gPiAweGZmZmZmZmZmZmZmZmYwMDBVTEw7DQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPA0KPiA+IFN5c3Rl bVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudDsgSW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICBH ZW5lcmF0ZVJhbmRvbU10cnJQYWlyDQo+ID4gKFN5c3RlbVBhcmFtZXRlci5QaHlzaWNhbEFkZHJl c3NCaXRzLA0KPiA+IEdlbmVyYXRlUmFuZG9tQ2FjaGVUeXBlICgpLCAmVmFyaWFibGVTZXR0aW5n W0luZGV4XSwNCj4gPiBOVUxMKTsNCj4gPg0KPiA+ICsgICAgQXNtV3JpdGVNc3I2NCAoTVNSX0lB MzJfTVRSUl9QSFlTQkFTRTAgKyAoSW5kZXggPDwNCj4gPiAxKSwgVmFyaWFibGVTZXR0aW5nW0lu ZGV4XS5CYXNlKTsNCj4gPg0KPiA+ICsgICAgQXNtV3JpdGVNc3I2NCAoTVNSX0lBMzJfTVRSUl9Q SFlTTUFTSzAgKyAoSW5kZXggPDwNCj4gPiAxKSwgVmFyaWFibGVTZXR0aW5nW0luZGV4XS5NYXNr KTsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsgIFJlc3VsdCA9IE10cnJHZXRNZW1vcnlBdHRy aWJ1dGVJblZhcmlhYmxlTXRycg0KPiA+IChWYWxpZE10cnJCaXRzTWFzaywgVmFsaWRNdHJyQWRk cmVzc01hc2ssDQo+ID4gVmFyaWFibGVNdHJyKTsNCj4gPg0KPiA+ICsgIFVUX0FTU0VSVF9FUVVB TCAoUmVzdWx0LA0KPiA+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCk7DQo+ID4N Cj4gPiArDQo+ID4NCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPA0KPiA+IFN5c3RlbVBh cmFtZXRlci5WYXJpYWJsZU10cnJDb3VudDsgSW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICBCYXNl LlVpbnQ2NCAgICA9IFZhcmlhYmxlTXRycltJbmRleF0uQmFzZUFkZHJlc3M7DQo+ID4NCj4gPiAr ICAgIEJhc2UuQml0cy5UeXBlID0gKFVJTlQzMikNCj4gPiBWYXJpYWJsZU10cnJbSW5kZXhdLlR5 cGU7DQo+ID4NCj4gPiArICAgIFVUX0FTU0VSVF9FUVVBTCAoQmFzZS5VaW50NjQsDQo+ID4gVmFy aWFibGVTZXR0aW5nW0luZGV4XS5CYXNlKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgICAgTWFz ay5VaW50NjQgICAgPSB+KFZhcmlhYmxlTXRycltJbmRleF0uTGVuZ3RoIC0gMSkNCj4gPiAmIFZh bGlkTXRyckJpdHNNYXNrOw0KPiA+DQo+ID4gKyAgICBNYXNrLkJpdHMuViAgICA9IDE7DQo+ID4N Cj4gPiArICAgIFVUX0FTU0VSVF9FUVVBTCAoTWFzay5VaW50NjQsDQo+ID4gVmFyaWFibGVTZXR0 aW5nW0luZGV4XS5NYXNrKTsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsg IC8vDQo+ID4NCj4gPiArICAvLyBOZWdhdGl2ZSB0ZXN0IGNhc2Ugd2hlbiBNVFJScyBhcmUgbm90 IHN1cHBvcnRlZA0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlci5N dHJyU3VwcG9ydGVkID0gRkFMU0U7DQo+ID4NCj4gPiArICBJbml0aWFsaXplTXRyclJlZ3MgKCZT eXN0ZW1QYXJhbWV0ZXIpOw0KPiA+DQo+ID4gKyAgUmVzdWx0ID0gTXRyckdldE1lbW9yeUF0dHJp YnV0ZUluVmFyaWFibGVNdHJyDQo+ID4gKFZhbGlkTXRyckJpdHNNYXNrLCBWYWxpZE10cnJBZGRy ZXNzTWFzaywNCj4gPiBWYXJpYWJsZU10cnIpOw0KPiA+DQo+ID4gKyAgVVRfQVNTRVJUX0VRVUFM IChSZXN1bHQsIDApOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIC8v IEV4cGVjdCBBU1NFUlQoKSBpZiB2YXJpYWJsZSBNVFJSIGNvdW50IGlzID4NCj4gPiBNVFJSX05V TUJFUl9PRl9WQVJJQUJMRV9NVFJSDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgU3lzdGVt UGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1l dGVyLlZhcmlhYmxlTXRyckNvdW50ID0NCj4gPiBNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJS ICsgMTsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7 DQo+ID4NCj4gPiArICBVVF9FWFBFQ1RfQVNTRVJUX0ZBSUxVUkUNCj4gPiAoTXRyckdldE1lbW9y eUF0dHJpYnV0ZUluVmFyaWFibGVNdHJyDQo+ID4gKFZhbGlkTXRyckJpdHNNYXNrLCBWYWxpZE10 cnJBZGRyZXNzTWFzaywNCj4gPiBWYXJpYWJsZU10cnIpLCBOVUxMKTsNCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZp Y2UNCj4gPiBNdHJyRGVidWdQcmludEFsbE10cnJzKCkNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsg IEBwYXJhbVtpbl0gIENvbnRleHQgICAgSWdub3JlZA0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAg QHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0DQo+ID4g aGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRlc3QNCj4gPg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMNCj4gPiBzdWNjZXNzZnVsLg0KPiA+DQo+ID4g KyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZQ0KPiA+ IGFzc2VydGlvbiBoYXMgZmFpbGVkLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPg0KPiA+ICtFRklBUEkNCj4gPg0KPiA+ICtVbml0VGVz dE10cnJEZWJ1Z1ByaW50QWxsTXRycnMgKA0KPiA+DQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRF WFQgIENvbnRleHQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICByZXR1 cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiAr LyoqDQo+ID4NCj4gPiArICBVbml0IHRlc3Qgb2YgTXRyckxpYiBzZXJ2aWNlDQo+ID4gTXRyckdl dERlZmF1bHRNZW1vcnlUeXBlKCkuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW1baW5d ICBDb250ZXh0ICAgIElnbm9yZWQNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEByZXR2YWwgIFVO SVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdA0KPiA+IGhhcyBjb21wbGV0 ZWQgYW5kIHRoZSB0ZXN0DQo+ID4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2Ugd2FzDQo+ID4gc3VjY2Vzc2Z1bC4NCj4gPg0KPiA+ICsgIEByZXR2YWwg IFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gPiBhc3NlcnRpb24g aGFzIGZhaWxlZC4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtVTklUX1RF U1RfU1RBVFVTDQo+ID4NCj4gPiArRUZJQVBJDQo+ID4NCj4gPiArVW5pdFRlc3RNdHJyR2V0RGVm YXVsdE1lbW9yeVR5cGUgKA0KPiA+DQo+ID4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRl eHQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgIEluZGV4Ow0KPiA+DQo+ID4gKyAgTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSAg ICBSZXN1bHQ7DQo+ID4NCj4gPiArICBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSIFN5c3RlbVBh cmFtZXRlcjsNCj4gPg0KPiA+ICsgIE1UUlJfTUVNT1JZX0NBQ0hFX1RZUEUgICAgQ2FjaGVUeXBl WzVdOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQ2FjaGVUeXBlWzBdID0gQ2FjaGVVbmNhY2hl YWJsZTsNCj4gPg0KPiA+ICsgIENhY2hlVHlwZVsxXSA9IENhY2hlV3JpdGVDb21iaW5pbmc7DQo+ ID4NCj4gPiArICBDYWNoZVR5cGVbMl0gPSBDYWNoZVdyaXRlVGhyb3VnaDsNCj4gPg0KPiA+ICsg IENhY2hlVHlwZVszXSA9IENhY2hlV3JpdGVQcm90ZWN0ZWQ7DQo+ID4NCj4gPiArICBDYWNoZVR5 cGVbNF0gPSBDYWNoZVdyaXRlQmFjazsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIENvcHlNZW0g KCZTeXN0ZW1QYXJhbWV0ZXIsICZtRGVmYXVsdFN5c3RlbVBhcmFtZXRlciwNCj4gPiBzaXplb2Yg KFN5c3RlbVBhcmFtZXRlcikpOw0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIC8vIElmIE1U UlJzIGFyZSBzdXBwb3J0ZWQsIHRoZW4gYWx3YXlzIHJldHVybiB0aGUNCj4gPiBjYWNoZSB0eXBl IGluIHRoZSBNU1INCj4gPg0KPiA+ICsgIC8vIE1TUl9JQTMyX01UUlJfREVGX1RZUEUNCj4gPg0K PiA+ICsgIC8vDQo+ID4NCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBBUlJBWV9TSVpF IChDYWNoZVR5cGUpOw0KPiA+IEluZGV4KyspIHsNCj4gPg0KPiA+ICsgICAgU3lzdGVtUGFyYW1l dGVyLkRlZmF1bHRDYWNoZVR5cGUgPQ0KPiA+IENhY2hlVHlwZVtJbmRleF07DQo+ID4NCj4gPiAr ICAgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArICAg IFJlc3VsdCA9IE10cnJHZXREZWZhdWx0TWVtb3J5VHlwZSAoKTsNCj4gPg0KPiA+ICsgICAgVVRf QVNTRVJUX0VRVUFMIChSZXN1bHQsDQo+ID4gU3lzdGVtUGFyYW1ldGVyLkRlZmF1bHRDYWNoZVR5 cGUpOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ ICsgIC8vIElmIE1UUlJzIGFyZSBub3Qgc3VwcG9ydGVkLCB0aGVuIGFsd2F5cyByZXR1cm4NCj4g PiBDYWNoZVVuY2FjaGVhYmxlDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFy YW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBGQUxTRTsNCj4gPg0KPiA+ICsgIEluaXRpYWxpemVNdHJy UmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+ID4NCj4gPiArICBSZXN1bHQgPSBNdHJyR2V0RGVm YXVsdE1lbW9yeVR5cGUgKCk7DQo+ID4NCj4gPiArICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwg Q2FjaGVVbmNhY2hlYWJsZSk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0 ZXIuTXRyclN1cHBvcnRlZCA9IFRSVUU7DQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIuRml4 ZWRNdHJyU3VwcG9ydGVkID0gRkFMU0U7DQo+ID4NCj4gPiArICBJbml0aWFsaXplTXRyclJlZ3Mg KCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiA+DQo+ID4gKyAgUmVzdWx0ID0gTXRyckdldERlZmF1bHRN ZW1vcnlUeXBlICgpOw0KPiA+DQo+ID4gKyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsIENhY2hl VW5jYWNoZWFibGUpOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLk10 cnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiA+DQo+ID4gKyAgU3lzdGVtUGFyYW1ldGVyLkZpeGVkTXRy clN1cHBvcnRlZCA9IFRSVUU7DQo+ID4NCj4gPiArICBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVN dHJyQ291bnQgPSAwOw0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFy YW1ldGVyKTsNCj4gPg0KPiA+ICsgIFJlc3VsdCA9IE10cnJHZXREZWZhdWx0TWVtb3J5VHlwZSAo KTsNCj4gPg0KPiA+ICsgIFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LCBDYWNoZVVuY2FjaGVhYmxl KTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiA+ DQo+ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIFVuaXQgdGVz dCBvZiBNdHJyTGliIHNlcnZpY2UNCj4gPiBNdHJyU2V0TWVtb3J5QXR0cmlidXRlSW5NdHJyU2V0 dGluZ3MoKS4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAg SWdub3JlZA0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NF RCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0DQo+ID4gaGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRl c3QNCj4gPg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSB3YXMNCj4gPiBzdWNjZXNzZnVsLg0KPiA+DQo+ID4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VS Uk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZQ0KPiA+IGFzc2VydGlvbiBoYXMgZmFpbGVkLg0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4g Pg0KPiA+ICtFRklBUEkNCj4gPg0KPiA+ICtVbml0VGVzdE10cnJTZXRNZW1vcnlBdHRyaWJ1dGVJ bk10cnJTZXR0aW5ncyAoDQo+ID4NCj4gPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4 dA0KPiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgIE1UUlJfTElCX1NZU1RF TV9QQVJBTUVURVIgKlN5c3RlbVBhcmFtZXRlcjsNCj4gPg0KPiA+ICsgIFJFVFVSTl9TVEFUVVMg ICAgICAgICAgICAgU3RhdHVzOw0KPiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICBVY0NvdW50Ow0KPiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBXdENvdW50 Ow0KPiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBXYkNvdW50Ow0KPiA+DQo+ ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBXcENvdW50Ow0KPiA+DQo+ID4gKyAgVUlO VDMyICAgICAgICAgICAgICAgICAgICBXY0NvdW50Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBNdHJySW5kZXg7DQo+ID4NCj4gPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+DQo+ID4gKyAgTVRSUl9TRVRUSU5HUyAgICAg ICAgICAgICBMb2NhbE10cnJzOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgTVRSUl9NRU1PUllf UkFOR0UNCj4gPiBSYXdNdHJyUmFuZ2VbTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUl07DQo+ ID4NCj4gPiArICBNVFJSX01FTU9SWV9SQU5HRQ0KPiA+IEV4cGVjdGVkTWVtb3J5UmFuZ2VzW01U UlJfTlVNQkVSX09GX0ZJWEVEX01UUlIgKiBzaXplb2YNCj4gPiAoVUlOVDY0KSArIDIgKiBNVFJS X05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSICsgMV07DQo+ID4NCj4gPiArICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgIEV4cGVjdGVkVmFyaWFibGVNdHJyVXNhZ2U7DQo+ID4NCj4gPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgIEV4cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQ7DQo+ID4NCj4g PiArDQo+ID4NCj4gPiArICBNVFJSX01FTU9SWV9SQU5HRQ0KPiA+IEFjdHVhbE1lbW9yeVJhbmdl c1tNVFJSX05VTUJFUl9PRl9GSVhFRF9NVFJSICogc2l6ZW9mDQo+ID4gKFVJTlQ2NCkgKyAyICog TVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiArIDFdOw0KPiA+DQo+ID4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICBBY3R1YWxWYXJpYWJsZU10cnJVc2FnZTsNCj4gPg0KPiA+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgQWN0dWFsTWVtb3J5UmFuZ2VzQ291bnQ7DQo+ID4NCj4g PiArDQo+ID4NCj4gPiArICBNVFJSX1NFVFRJTkdTICAgICAgICAgICAgICpNdHJyc1syXTsNCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICsgIFN5c3RlbVBhcmFtZXRlciA9IChNVFJSX0xJQl9TWVNURU1f UEFSQU1FVEVSICopDQo+ID4gQ29udGV4dDsNCj4gPg0KPiA+ICsgIEdlbmVyYXRlUmFuZG9tTWVt b3J5VHlwZUNvbWJpbmF0aW9uICgNCj4gPg0KPiA+ICsgICAgU3lzdGVtUGFyYW1ldGVyLT5WYXJp YWJsZU10cnJDb3VudCAtIFBhdGNoUGNkR2V0MzINCj4gPiAoUGNkQ3B1TnVtYmVyT2ZSZXNlcnZl ZFZhcmlhYmxlTXRycnMpLA0KPiA+DQo+ID4gKyAgICAmVWNDb3VudCwgJld0Q291bnQsICZXYkNv dW50LCAmV3BDb3VudCwgJldjQ291bnQNCj4gPg0KPiA+ICsgICAgKTsNCj4gPg0KPiA+ICsgIEdl bmVyYXRlVmFsaWRBbmRDb25maWd1cmFibGVNdHJyUGFpcnMgKA0KPiA+DQo+ID4gKyAgICBTeXN0 ZW1QYXJhbWV0ZXItPlBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+ID4gUmF3TXRyclJhbmdlLA0KPiA+ DQo+ID4gKyAgICBVY0NvdW50LCBXdENvdW50LCBXYkNvdW50LCBXcENvdW50LCBXY0NvdW50DQo+ ID4NCj4gPiArICAgICk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBFeHBlY3RlZFZhcmlhYmxl TXRyclVzYWdlID0gVWNDb3VudCArIFd0Q291bnQgKw0KPiA+IFdiQ291bnQgKyBXcENvdW50ICsg V2NDb3VudDsNCj4gPg0KPiA+ICsgIEV4cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQgPSBBUlJBWV9T SVpFDQo+ID4gKEV4cGVjdGVkTWVtb3J5UmFuZ2VzKTsNCj4gPg0KPiA+ICsgIEdldEVmZmVjdGl2 ZU1lbW9yeVJhbmdlcyAoDQo+ID4NCj4gPiArICAgIFN5c3RlbVBhcmFtZXRlci0+RGVmYXVsdENh Y2hlVHlwZSwNCj4gPg0KPiA+ICsgICAgU3lzdGVtUGFyYW1ldGVyLT5QaHlzaWNhbEFkZHJlc3NC aXRzLA0KPiA+DQo+ID4gKyAgICBSYXdNdHJyUmFuZ2UsIEV4cGVjdGVkVmFyaWFibGVNdHJyVXNh Z2UsDQo+ID4NCj4gPiArICAgIEV4cGVjdGVkTWVtb3J5UmFuZ2VzLCAmRXhwZWN0ZWRNZW1vcnlS YW5nZXNDb3VudA0KPiA+DQo+ID4gKyAgICApOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgVVRf TE9HX0lORk8gKCItLS0gRXhwZWN0ZWQgTWVtb3J5IFJhbmdlcyBbJWRdIC0tLQ0KPiA+IFxuIiwg RXhwZWN0ZWRNZW1vcnlSYW5nZXNDb3VudCk7DQo+ID4NCj4gPiArICBEdW1wTWVtb3J5UmFuZ2Vz IChFeHBlY3RlZE1lbW9yeVJhbmdlcywNCj4gPiBFeHBlY3RlZE1lbW9yeVJhbmdlc0NvdW50KTsN Cj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBEZWZhdWx0IGNhY2hlIHR5cGUgaXMgYWx3 YXlzIGFuIElOUFVUDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgWmVyb01lbSAoJkxvY2Fs TXRycnMsIHNpemVvZiAoTG9jYWxNdHJycykpOw0KPiA+DQo+ID4gKyAgTG9jYWxNdHJycy5NdHJy RGVmVHlwZSA9IE10cnJHZXREZWZhdWx0TWVtb3J5VHlwZQ0KPiA+ICgpOw0KPiA+DQo+ID4gKyAg TXRycnNbMF0gICAgICAgICAgICAgICA9ICZMb2NhbE10cnJzOw0KPiA+DQo+ID4gKyAgTXRycnNb MV0gICAgICAgICAgICAgICA9IE5VTEw7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBmb3IgKE10 cnJJbmRleCA9IDA7IE10cnJJbmRleCA8IEFSUkFZX1NJWkUgKE10cnJzKTsNCj4gPiBNdHJySW5k ZXgrKykgew0KPiA+DQo+ID4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBFeHBlY3RlZE1l bW9yeVJhbmdlc0NvdW50Ow0KPiA+IEluZGV4KyspIHsNCj4gPg0KPiA+ICsgICAgICBTdGF0dXMg PSBNdHJyU2V0TWVtb3J5QXR0cmlidXRlSW5NdHJyU2V0dGluZ3MgKA0KPiA+DQo+ID4gKyAgICAg ICAgICAgICAgICAgTXRycnNbTXRyckluZGV4XSwNCj4gPg0KPiA+ICsNCj4gPiBFeHBlY3RlZE1l bW9yeVJhbmdlc1tJbmRleF0uQmFzZUFkZHJlc3MsDQo+ID4NCj4gPiArICAgICAgICAgICAgICAg ICBFeHBlY3RlZE1lbW9yeVJhbmdlc1tJbmRleF0uTGVuZ3RoLA0KPiA+DQo+ID4gKyAgICAgICAg ICAgICAgICAgRXhwZWN0ZWRNZW1vcnlSYW5nZXNbSW5kZXhdLlR5cGUNCj4gPg0KPiA+ICsgICAg ICAgICAgICAgICAgICk7DQo+ID4NCj4gPiArICAgICAgVVRfQVNTRVJUX1RSVUUgKFN0YXR1cyA9 PSBSRVRVUk5fU1VDQ0VTUyB8fA0KPiA+IFN0YXR1cyA9PSBSRVRVUk5fT1VUX09GX1JFU09VUkNF UyB8fCBTdGF0dXMgPT0NCj4gPiBSRVRVUk5fQlVGRkVSX1RPT19TTUFMTCk7DQo+ID4NCj4gPiAr ICAgICAgaWYgKFN0YXR1cyA9PSBSRVRVUk5fT1VUX09GX1JFU09VUkNFUyB8fCBTdGF0dXMNCj4g PiA9PSBSRVRVUk5fQlVGRkVSX1RPT19TTUFMTCkgew0KPiA+DQo+ID4gKyAgICAgICAgcmV0dXJu IFVOSVRfVEVTVF9TS0lQUEVEOw0KPiA+DQo+ID4gKyAgICAgIH0NCj4gPg0KPiA+ICsgICAgfQ0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgICBpZiAoTXRycnNbTXRyckluZGV4XSA9PSBOVUxMKSB7 DQo+ID4NCj4gPiArICAgICAgWmVyb01lbSAoJkxvY2FsTXRycnMsIHNpemVvZiAoTG9jYWxNdHJy cykpOw0KPiA+DQo+ID4gKyAgICAgIE10cnJHZXRBbGxNdHJycyAoJkxvY2FsTXRycnMpOw0KPiA+ DQo+ID4gKyAgICB9DQo+ID4NCj4gPiArICAgIEFjdHVhbE1lbW9yeVJhbmdlc0NvdW50ID0gQVJS QVlfU0laRQ0KPiA+IChBY3R1YWxNZW1vcnlSYW5nZXMpOw0KPiA+DQo+ID4gKyAgICBDb2xsZWN0 VGVzdFJlc3VsdCAoDQo+ID4NCj4gPiArICAgICAgU3lzdGVtUGFyYW1ldGVyLT5EZWZhdWx0Q2Fj aGVUeXBlLA0KPiA+IFN5c3RlbVBhcmFtZXRlci0+UGh5c2ljYWxBZGRyZXNzQml0cywgU3lzdGVt UGFyYW1ldGVyLQ0KPiA+ID5WYXJpYWJsZU10cnJDb3VudCwNCj4gPg0KPiA+ICsgICAgICAmTG9j YWxNdHJycywgQWN0dWFsTWVtb3J5UmFuZ2VzLA0KPiA+ICZBY3R1YWxNZW1vcnlSYW5nZXNDb3Vu dCwgJkFjdHVhbFZhcmlhYmxlTXRyclVzYWdlDQo+ID4NCj4gPiArICAgICAgKTsNCj4gPg0KPiA+ ICsgICAgVVRfTE9HX0lORk8gKCItLS0gQWN0dWFsIE1lbW9yeSBSYW5nZXMgWyVkXSAtLS0NCj4g PiBcbiIsIEFjdHVhbE1lbW9yeVJhbmdlc0NvdW50KTsNCj4gPg0KPiA+ICsgICAgRHVtcE1lbW9y eVJhbmdlcyAoQWN0dWFsTWVtb3J5UmFuZ2VzLA0KPiA+IEFjdHVhbE1lbW9yeVJhbmdlc0NvdW50 KTsNCj4gPg0KPiA+ICsgICAgVmVyaWZ5TWVtb3J5UmFuZ2VzIChFeHBlY3RlZE1lbW9yeVJhbmdl cywNCj4gPiBFeHBlY3RlZE1lbW9yeVJhbmdlc0NvdW50LCBBY3R1YWxNZW1vcnlSYW5nZXMsDQo+ ID4gQWN0dWFsTWVtb3J5UmFuZ2VzQ291bnQpOw0KPiA+DQo+ID4gKyAgICBVVF9BU1NFUlRfVFJV RSAoRXhwZWN0ZWRWYXJpYWJsZU10cnJVc2FnZSA+PQ0KPiA+IEFjdHVhbFZhcmlhYmxlTXRyclVz YWdlKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgICAgWmVyb01lbSAoJkxvY2FsTXRycnMsIHNp emVvZiAoTG9jYWxNdHJycykpOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g KyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+ DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgUHJlcCByb3V0aW5lIGZvcg0KPiA+IFVuaXRUZXN0R2V0 RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCgpLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBh cmFtIENvbnRleHQgIFBvaW50IHRvIGEgVUlOVDMyIGRhdGEgdG8gc2F2ZSB0aGUNCj4gPiBQY2RD cHVOdW1iZXJPZlJlc2VydmVkVmFyaWFibGVNdHJycy4NCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4NCj4gPiArRUZJQVBJDQo+ID4NCj4gPiArU2F2ZVBjZFZh bHVlICgNCj4gPg0KPiA+ICsgIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+ID4NCj4gPiAr ICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgKihVSU5UMzIgKikgQ29udGV4dCA9IFBhdGNo UGNkR2V0MzINCj4gPiAoUGNkQ3B1TnVtYmVyT2ZSZXNlcnZlZFZhcmlhYmxlTXRycnMpOw0KPiA+ DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgQ2xlYW4gdXAgcm91dGluZSBmb3INCj4gPiBV bml0VGVzdEdldEZpcm13YXJlVmFyaWFibGVNdHJyQ291bnQoKS4NCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsgIEBwYXJhbSBDb250ZXh0ICBQb2ludCB0byBhIFVJTlQzMiBkYXRhIHRvIHNhdmUgdGhl DQo+ID4gUGNkQ3B1TnVtYmVyT2ZSZXNlcnZlZFZhcmlhYmxlTXRycnMuDQo+ID4NCj4gPiArKiov DQo+ID4NCj4gPiArVU5JVF9URVNUX1NUQVRVUw0KPiA+DQo+ID4gK0VGSUFQSQ0KPiA+DQo+ID4g K1Jlc3RvcmVQY2RWYWx1ZSAoDQo+ID4NCj4gPiArICBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4 dA0KPiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgIFBhdGNoUGNkU2V0MzIg KFBjZENwdU51bWJlck9mUmVzZXJ2ZWRWYXJpYWJsZU10cnJzLA0KPiA+ICooVUlOVDMyICopIENv bnRleHQpOw0KPiA+DQo+ID4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+ID4NCj4gPiAr fQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgSW5pdGlhbGl6ZSB0aGUg dW5pdCB0ZXN0IGZyYW1ld29yaywgc3VpdGUsIGFuZCB1bml0DQo+ID4gdGVzdHMgZm9yIHRoZQ0K PiA+DQo+ID4gKyAgUmVzZXRTeXN0ZW1MaWIgYW5kIHJ1biB0aGUgUmVzZXRTeXN0ZW1MaWIgdW5p dCB0ZXN0Lg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtIEl0ZXJhdGlvbiAgICAgICAg ICAgICAgIEl0ZXJhdGlvbiBvZiB0ZXN0aW5nDQo+ID4gTXRyclNldE1lbW9yeUF0dHJpYnV0ZUlu TXRyclNldHRpbmdzDQo+ID4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YW5kDQo+ID4gTXRyclNldE1lbW9yeUF0dHJpYnV0ZXNJbk10cnJTZXR0aW5ncyB1c2luZyByYW5k b20NCj4gPiBpbnB1dHMuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcmV0dmFsICBFRklfU1VD Q0VTUyAgICAgICAgICAgQWxsIHRlc3QgY2FzZXMgd2VyZQ0KPiA+IGRpc3BhdGNoZWQuDQo+ID4N Cj4gPiArICBAcmV0dmFsICBFRklfT1VUX09GX1JFU09VUkNFUyAgVGhlcmUgYXJlIG5vdCBlbm91 Z2gNCj4gPiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvDQo+ID4NCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSB0aGUgdW5pdA0KPiA+IHRlc3RzLg0KPiA+DQo+ ID4gKyoqLw0KPiA+DQo+ID4gK1NUQVRJQw0KPiA+DQo+ID4gK0VGSV9TVEFUVVMNCj4gPg0KPiA+ ICtFRklBUEkNCj4gPg0KPiA+ICtVbml0VGVzdGluZ0VudHJ5ICgNCj4gPg0KPiA+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRpb24NCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ ICt7DQo+ID4NCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ DQo+ID4gKyAgVU5JVF9URVNUX0ZSQU1FV09SS19IQU5ETEUgIEZyYW1ld29yazsNCj4gPg0KPiA+ ICsgIFVOSVRfVEVTVF9TVUlURV9IQU5ETEUgICAgICBNdHJyQXBpVGVzdHM7DQo+ID4NCj4gPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4NCj4gPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgU3lzdGVtSW5kZXg7DQo+ID4NCj4gPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgT3JpZ2luYWxQY2RWYWx1ZTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ ICsgIEZyYW1ld29yayA9IE5VTEw7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBERUJVRyAoKERF QlVHX0lORk8sICIlYSB2JWFcbiIsIFVOSVRfVEVTVF9BUFBfTkFNRSwNCj4gPiBVTklUX1RFU1Rf QVBQX1ZFUlNJT04pKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAv LyBTZXR1cCB0aGUgdGVzdCBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIHRlc3RzLg0KPiA+DQo+ ID4gKyAgLy8NCj4gPg0KPiA+ICsgIFN0YXR1cyA9IEluaXRVbml0VGVzdEZyYW1ld29yayAoJkZy YW1ld29yaywNCj4gPiBVTklUX1RFU1RfQVBQX05BTUUsIGdFZmlDYWxsZXJCYXNlTmFtZSwNCj4g PiBVTklUX1RFU1RfQVBQX1ZFUlNJT04pOw0KPiA+DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiA+DQo+ID4gKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRmFpbGVkIGluDQo+ ID4gSW5pdFVuaXRUZXN0RnJhbWV3b3JrLiBTdGF0dXMgPSAlclxuIiwgU3RhdHVzKSk7DQo+ID4N Cj4gPiArICAgIGdvdG8gRVhJVDsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ ICsgIC8vDQo+ID4NCj4gPiArICAvLyAtLS0tLS0tLS0tLS0tLVN1aXRlLS0tLS0tLS0tLS1EZXNj cmlwdGlvbi0tLS0tLS0tDQo+ID4gLS0tLS0tTmFtZS0tLS0tLS0tLS1GdW5jdGlvbi0tLS0tLS0t UHJlLS0tUG9zdC0tLS0tLS0tLQ0KPiA+IC0tLS0tLS0tLS1Db250ZXh0LS0tLS0tLS0tLS0NCj4g Pg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8g UG9wdWxhdGUgdGhlIE10cnJMaWIgQVBJIFVuaXQgVGVzdCBTdWl0ZS4NCj4gPg0KPiA+ICsgIC8v DQo+ID4NCj4gPiArICBTdGF0dXMgPSBDcmVhdGVVbml0VGVzdFN1aXRlICgmTXRyckFwaVRlc3Rz LA0KPiA+IEZyYW1ld29yaywgIk10cnJMaWIgQVBJIFRlc3RzIiwgIk10cnJMaWIuTXRyckxpYiIs DQo+ID4gTlVMTCwgTlVMTCk7DQo+ID4NCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ID4NCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJGYWlsZWQgaW4NCj4gPiBDcmVh dGVVbml0VGVzdFN1aXRlIGZvciBNdHJyTGliIEFQSSBUZXN0c1xuIikpOw0KPiA+DQo+ID4gKyAg ICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPg0KPiA+ICsgICAgZ290byBFWElU Ow0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKyAgQWRkVGVzdENhc2UgKE10cnJBcGlUZXN0cywg IlRlc3QgSXNNdHJyU3VwcG9ydGVkIiwNCj4gPiAiTXRyclN1cHBvcnRlZCIsDQo+ID4gVW5pdFRl c3RJc010cnJTdXBwb3J0ZWQsICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ID4gTlVMTCwg TlVMTCk7DQo+ID4NCj4gPiArICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0KPiA+ IEdldFZhcmlhYmxlTXRyckNvdW50IiwNCj4gPiAiR2V0VmFyaWFibGVNdHJyQ291bnQiLA0KPiA+ IFVuaXRUZXN0R2V0VmFyaWFibGVNdHJyQ291bnQsICAgICAgICAgICAgICAgICBOVUxMLA0KPiA+ IE5VTEwsIE5VTEwpOw0KPiA+DQo+ID4gKyAgQWRkVGVzdENhc2UgKE10cnJBcGlUZXN0cywgIlRl c3QNCj4gPiBHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50IiwNCj4gPiAiR2V0RmlybXdhcmVW YXJpYWJsZU10cnJDb3VudCIsDQo+ID4gVW5pdFRlc3RHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNv dW50LA0KPiA+IFNhdmVQY2RWYWx1ZSwgUmVzdG9yZVBjZFZhbHVlLCAmT3JpZ2luYWxQY2RWYWx1 ZSk7DQo+ID4NCj4gPiArICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0KPiA+IE10 cnJHZXRNZW1vcnlBdHRyaWJ1dGUiLA0KPiA+ICJNdHJyR2V0TWVtb3J5QXR0cmlidXRlIiwNCj4g PiBVbml0VGVzdE10cnJHZXRNZW1vcnlBdHRyaWJ1dGUsICAgICAgICAgICAgICAgTlVMTCwNCj4g PiBOVUxMLCBOVUxMKTsNCj4gPg0KPiA+ICsgIEFkZFRlc3RDYXNlIChNdHJyQXBpVGVzdHMsICJU ZXN0IE10cnJHZXRGaXhlZE10cnIiLA0KPiA+ICJNdHJyR2V0Rml4ZWRNdHJyIiwNCj4gPiBVbml0 VGVzdE10cnJHZXRGaXhlZE10cnIsICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gPiBOVUxM LCBOVUxMKTsNCj4gPg0KPiA+ICsgIEFkZFRlc3RDYXNlIChNdHJyQXBpVGVzdHMsICJUZXN0IE10 cnJHZXRBbGxNdHJycyIsDQo+ID4gIk10cnJHZXRBbGxNdHJycyIsDQo+ID4gVW5pdFRlc3RNdHJy R2V0QWxsTXRycnMsICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ID4gTlVMTCwgTlVMTCk7 DQo+ID4NCj4gPiArICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdCBNdHJyU2V0QWxs TXRycnMiLA0KPiA+ICJNdHJyU2V0QWxsTXRycnMiLA0KPiA+IFVuaXRUZXN0TXRyclNldEFsbE10 cnJzLCAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiA+IE5VTEwsIE5VTEwpOw0KPiA+DQo+ ID4gKyAgQWRkVGVzdENhc2UgKE10cnJBcGlUZXN0cywgIlRlc3QNCj4gPiBNdHJyR2V0TWVtb3J5 QXR0cmlidXRlSW5WYXJpYWJsZU10cnIiLA0KPiA+ICJNdHJyR2V0TWVtb3J5QXR0cmlidXRlSW5W YXJpYWJsZU10cnIiLA0KPiA+IFVuaXRUZXN0TXRyckdldE1lbW9yeUF0dHJpYnV0ZUluVmFyaWFi bGVNdHJyLCBOVUxMLA0KPiA+IE5VTEwsIE5VTEwpOw0KPiA+DQo+ID4gKyAgQWRkVGVzdENhc2Ug KE10cnJBcGlUZXN0cywgIlRlc3QNCj4gPiBNdHJyRGVidWdQcmludEFsbE10cnJzIiwNCj4gPiAi TXRyckRlYnVnUHJpbnRBbGxNdHJycyIsDQo+ID4gVW5pdFRlc3RNdHJyRGVidWdQcmludEFsbE10 cnJzLCAgICAgICAgICAgICAgIE5VTEwsDQo+ID4gTlVMTCwgTlVMTCk7DQo+ID4NCj4gPiArICBB ZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0KPiA+IE10cnJHZXREZWZhdWx0TWVtb3J5 VHlwZSIsDQo+ID4gIk10cnJHZXREZWZhdWx0TWVtb3J5VHlwZSIsDQo+ID4gVW5pdFRlc3RNdHJy R2V0RGVmYXVsdE1lbW9yeVR5cGUsICAgICAgICAgICAgIE5VTEwsDQo+ID4gTlVMTCwgTlVMTCk7 DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBmb3IgKFN5c3RlbUluZGV4ID0gMDsgU3lzdGVtSW5k ZXggPCBBUlJBWV9TSVpFDQo+ID4gKG1TeXN0ZW1QYXJhbWV0ZXJzKTsgU3lzdGVtSW5kZXgrKykg ew0KPiA+DQo+ID4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBJdGVyYXRpb247IEluZGV4 KyspIHsNCj4gPg0KPiA+ICsgICAgICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0K PiA+IEludmFsaWRNZW1vcnlMYXlvdXRzIiwNCj4gPiAiSW52YWxpZE1lbW9yeUxheW91dHMiLA0K PiA+IFVuaXRUZXN0SW52YWxpZE1lbW9yeUxheW91dHMsDQo+ID4gSW5pdGlhbGl6ZU10cnJSZWdz LCBOVUxMLA0KPiA+ICZtU3lzdGVtUGFyYW1ldGVyc1tTeXN0ZW1JbmRleF0pOw0KPiA+DQo+ID4g KyAgICAgIEFkZFRlc3RDYXNlIChNdHJyQXBpVGVzdHMsICJUZXN0DQo+ID4gTXRyclNldE1lbW9y eUF0dHJpYnV0ZUluTXRyclNldHRpbmdzIiwNCj4gPiAiTXRyclNldE1lbW9yeUF0dHJpYnV0ZUlu TXRyclNldHRpbmdzIiwNCj4gPiBVbml0VGVzdE10cnJTZXRNZW1vcnlBdHRyaWJ1dGVJbk10cnJT ZXR0aW5ncywNCj4gPiBJbml0aWFsaXplTXRyclJlZ3MsIE5VTEwsDQo+ID4gJm1TeXN0ZW1QYXJh bWV0ZXJzW1N5c3RlbUluZGV4XSk7DQo+ID4NCj4gPiArICAgICAgQWRkVGVzdENhc2UgKE10cnJB cGlUZXN0cywgIlRlc3QNCj4gPiBNdHJyU2V0TWVtb3J5QXR0cmlidXRlc0luTXRyclNldHRpbmdz IiwNCj4gPiAiTXRyclNldE1lbW9yeUF0dHJpYnV0ZXNJbk10cnJTZXR0aW5ncyIsDQo+ID4gVW5p dFRlc3RNdHJyU2V0TWVtb3J5QXR0cmlidXRlc0luTXRyclNldHRpbmdzLA0KPiA+IEluaXRpYWxp emVNdHJyUmVncywgTlVMTCwNCj4gPiAmbVN5c3RlbVBhcmFtZXRlcnNbU3lzdGVtSW5kZXhdKTsN Cj4gPg0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ ICsgIC8vIEV4ZWN1dGUgdGhlIHRlc3RzLg0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIHNy YW5kICgodW5zaWduZWQgaW50KSB0aW1lIChOVUxMKSk7DQo+ID4NCj4gPiArICBTdGF0dXMgPSBS dW5BbGxUZXN0U3VpdGVzIChGcmFtZXdvcmspOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gK0VYSVQ6 DQo+ID4NCj4gPiArICBpZiAoRnJhbWV3b3JrICE9IE5VTEwpIHsNCj4gPg0KPiA+ICsgICAgRnJl ZVVuaXRUZXN0RnJhbWV3b3JrIChGcmFtZXdvcmspOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBTdGFuZGFyZCBQT1NJWCBDIGVudHJ5IHBvaW50IGZv ciBob3N0IGJhc2VkIHVuaXQNCj4gPiB0ZXN0IGV4ZWN1dGlvbi4NCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsgIEBwYXJhbSBBcmdjICBOdW1iZXIgb2YgYXJndW1lbnRzLg0KPiA+DQo+ID4gKyAgQHBh cmFtIEFyZ3YgIEFycmF5IG9mIGFyZ3VtZW50cy4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBy ZXR1cm4gVGVzdCBhcHBsaWNhdGlvbiBleGl0IGNvZGUuDQo+ID4NCj4gPiArKiovDQo+ID4NCj4g PiArSU5UMzINCj4gPg0KPiA+ICttYWluICgNCj4gPg0KPiA+ICsgIElOVDMyIEFyZ2MsDQo+ID4N Cj4gPiArICBDSEFSOCAqQXJndltdDQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ ID4gKyAgVUlOVE4gICAgSXRlcmF0aW9uOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgLy8NCj4g Pg0KPiA+ICsgIC8vIEZpcnN0IHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHRlc3QgaXRlcmF0aW9u cy4NCj4gPg0KPiA+ICsgIC8vIERlZmF1bHQgaXMgMTAuDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ ID4gKyAgSXRlcmF0aW9uID0gMTA7DQo+ID4NCj4gPiArICBpZiAoQXJnYyA9PSAyKSB7DQo+ID4N Cj4gPiArICAgIEl0ZXJhdGlvbiA9IGF0b2kgKEFyZ3ZbMV0pOw0KPiA+DQo+ID4gKyAgfQ0KPiA+ DQo+ID4gKyAgcmV0dXJuIFVuaXRUZXN0aW5nRW50cnkgKEl0ZXJhdGlvbik7DQo+ID4NCj4gPiAr fQ0KPiA+DQo+ID4gZGlmZiAtLWdpdA0KPiA+IGEvVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIv VW5pdFRlc3QvTXRyckxpYlVuaXRUZXN0LmgNCj4gPiBiL1VlZmlDcHVQa2cvTGlicmFyeS9NdHJy TGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdC5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi4yNWQ0MjY5NTg5DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKw0KPiA+IGIvVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRlc3QvTXRyckxpYlVu aXRUZXN0LmgNCj4gPiBAQCAtMCwwICsxLDE3MSBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsgIENvcHlyaWdodCAoYykgMjAyMCwgSW50ZWwgQ29ycG9yYXRpb24uIEFs bCByaWdodHMNCj4gPiByZXNlcnZlZC48QlI+DQo+ID4NCj4gPiArICBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyoqLw0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKyNpZm5kZWYgX01UUlJfU1VQUE9SVF9IXw0KPiA+DQo+ID4g KyNkZWZpbmUgX01UUlJfU1VQUE9SVF9IXw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyNpbmNsdWRl IDxzdGRpby5oPg0KPiA+DQo+ID4gKyNpbmNsdWRlIDxzdGRsaWIuaD4NCj4gPg0KPiA+ICsjaW5j bHVkZSA8c3RyaW5nLmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPHN0ZGFyZy5oPg0KPiA+DQo+ID4g KyNpbmNsdWRlIDxzdGRkZWYuaD4NCj4gPg0KPiA+ICsjaW5jbHVkZSA8c2V0am1wLmg+DQo+ID4N Cj4gPiArI2luY2x1ZGUgPGNtb2NrYS5oPg0KPiA+DQo+ID4gKyNpbmNsdWRlIDx0aW1lLmg+DQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArI2luY2x1ZGUgPFVlZmkuaD4NCj4gPg0KPiA+ICsjaW5jbHVk ZSA8TGlicmFyeS9CYXNlTGliLmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1l bW9yeUxpYi5oPg0KPiA+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ID4N Cj4gPiArI2luY2x1ZGUgPExpYnJhcnkvVW5pdFRlc3RMaWIuaD4NCj4gPg0KPiA+ICsjaW5jbHVk ZSA8TGlicmFyeS9NdHJyTGliLmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvVW5pdFRl c3RIb3N0QmFzZUxpYi5oPg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyNpbmNsdWRlIDxSZWdpc3Rl ci9BcmNoaXRlY3R1cmFsTXNyLmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPFJlZ2lzdGVyL0NwdWlk Lmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPFJlZ2lzdGVyL01zci5oPg0KPiA+DQo+ID4gKw0KPiA+ DQo+ID4gKyNkZWZpbmUgVU5JVF9URVNUX0FQUF9OQU1FICAgICAgICAiTXRyckxpYiBVbml0IFRl c3RzIg0KPiA+DQo+ID4gKyNkZWZpbmUgVU5JVF9URVNUX0FQUF9WRVJTSU9OICAgICAiMS4wIg0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKyNkZWZpbmUgU0NSQVRDSF9CVUZGRVJfU0laRSAgICAgICBT SVpFXzE2S0INCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4NCj4g PiArICBVSU5UOCAgICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzc0JpdHM7DQo+ID4NCj4g PiArICBCT09MRUFOICAgICAgICAgICAgICAgIE10cnJTdXBwb3J0ZWQ7DQo+ID4NCj4gPiArICBC T09MRUFOICAgICAgICAgICAgICAgIEZpeGVkTXRyclN1cHBvcnRlZDsNCj4gPg0KPiA+ICsgIE1U UlJfTUVNT1JZX0NBQ0hFX1RZUEUgRGVmYXVsdENhY2hlVHlwZTsNCj4gPg0KPiA+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgVmFyaWFibGVNdHJyQ291bnQ7DQo+ID4NCj4gPiArfSBNVFJSX0xJ Ql9TWVNURU1fUEFSQU1FVEVSOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gK2V4dGVybiBVSU5UMzIN Cj4gPiBtRml4ZWRNdHJyc0luZGV4W107DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4N Cj4gPiArICBJbml0aWFsaXplIHRoZSBNVFJSIHJlZ2lzdGVycy4NCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsgIEBwYXJhbSBTeXN0ZW1QYXJhbWV0ZXIgU3lzdGVtIHBhcmFtZXRlciB0aGF0DQo+ID4g Y29udHJvbHMgdGhlIE1UUlIgcmVnaXN0ZXJzIGluaXRpYWxpemF0aW9uLg0KPiA+DQo+ID4gKyoq Lw0KPiA+DQo+ID4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPg0KPiA+ICtFRklBUEkNCj4gPg0KPiA+ ICtJbml0aWFsaXplTXRyclJlZ3MgKA0KPiA+DQo+ID4gKyAgSU4gTVRSUl9MSUJfU1lTVEVNX1BB UkFNRVRFUiAgKlN5c3RlbVBhcmFtZXRlcg0KPiA+DQo+ID4gKyAgKTsNCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIFJldHVybiBhIHJhbmRvbSBtZW1vcnkgY2FjaGUgdHlw ZS4NCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtNVFJSX01FTU9SWV9DQUNIRV9UWVBFDQo+ID4N Cj4gPiArR2VuZXJhdGVSYW5kb21DYWNoZVR5cGUgKA0KPiA+DQo+ID4gKyAgVk9JRA0KPiA+DQo+ ID4gKyAgKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIEdlbmVyYXRl IHJhbmRvbSBNVFJScy4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBQaHlzaWNhbEFk ZHJlc3NCaXRzICBQaHlzaWNhbCBhZGRyZXNzIGJpdHMuDQo+ID4NCj4gPiArICBAcGFyYW0gUmF3 TWVtb3J5UmFuZ2VzICAgICAgUmV0dXJuIHRoZSByYW5kb21seQ0KPiA+IGdlbmVyYXRlZCBNVFJS cy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBVY0NvdW50ICAgICAgICAgICAgICBDb3VudCBvZiBVbmNh Y2hlYWJsZQ0KPiA+IE1UUlJzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFd0Q291bnQgICAgICAgICAg ICAgIENvdW50IG9mIFdyaXRlIFRocm91Z2gNCj4gPiBNVFJScy4NCj4gPg0KPiA+ICsgIEBwYXJh bSBXYkNvdW50ICAgICAgICAgICAgICBDb3VudCBvZiBXcml0ZSBCYWNrDQo+ID4gTVRSUnMuDQo+ ID4NCj4gPiArICBAcGFyYW0gV3BDb3VudCAgICAgICAgICAgICAgQ291bnQgb2YgV3JpdGUgUHJv dGVjdGVkDQo+ID4gTVRSUnMuDQo+ID4NCj4gPiArICBAcGFyYW0gV2NDb3VudCAgICAgICAgICAg ICAgQ291bnQgb2YgV3JpdGUgQ29tYmluaW5nDQo+ID4gTVRSUnMuDQo+ID4NCj4gPiArKiovDQo+ ID4NCj4gPiArVk9JRA0KPiA+DQo+ID4gK0dlbmVyYXRlVmFsaWRBbmRDb25maWd1cmFibGVNdHJy UGFpcnMgKA0KPiA+DQo+ID4gKyAgSU4gICAgIFVJTlQzMg0KPiA+IFBoeXNpY2FsQWRkcmVzc0Jp dHMsDQo+ID4NCj4gPiArICBJTiBPVVQgTVRSUl9NRU1PUllfUkFOR0UgICAgICAgICAqUmF3TWVt b3J5UmFuZ2VzLA0KPiA+DQo+ID4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg VWNDb3VudCwNCj4gPg0KPiA+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFd0 Q291bnQsDQo+ID4NCj4gPiArICBJTiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBXYkNv dW50LA0KPiA+DQo+ID4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgV3BDb3Vu dCwNCj4gPg0KPiA+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFdjQ291bnQN Cj4gPg0KPiA+ICsgICk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBD b252ZXJ0IHRoZSBNVFJSIEJBU0UvTUFTSyBhcnJheSB0byBtZW1vcnkgcmFuZ2VzLg0KPiA+DQo+ ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtIERlZmF1bHRUeXBlICAgICAgICAgIERlZmF1bHQgbWVt b3J5IHR5cGUuDQo+ID4NCj4gPiArICBAcGFyYW0gUGh5c2ljYWxBZGRyZXNzQml0cyAgUGh5c2lj YWwgYWRkcmVzcyBiaXRzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhd01lbW9yeVJhbmdlcyAgICAg IFJhdyBtZW1vcnkgcmFuZ2VzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhd01lbW9yeVJhbmdlQ291 bnQgIENvdW50IG9mIHJhdyBtZW1vcnkNCj4gPiByYW5nZXMuDQo+ID4NCj4gPiArICBAcGFyYW0g TWVtb3J5UmFuZ2VzICAgICAgICAgTWVtb3J5IHJhbmdlcy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBN ZW1vcnlSYW5nZUNvdW50ICAgICBDb3VudCBvZiBtZW1vcnkgcmFuZ2VzLg0KPiA+DQo+ID4gKyoq Lw0KPiA+DQo+ID4gK1ZPSUQNCj4gPg0KPiA+ICtHZXRFZmZlY3RpdmVNZW1vcnlSYW5nZXMgKA0K PiA+DQo+ID4gKyAgSU4gTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSBEZWZhdWx0VHlwZSwNCj4gPg0K PiA+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgUGh5c2ljYWxBZGRyZXNzQml0cywNCj4g Pg0KPiA+ICsgIElOIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgKlJhd01lbW9yeVJhbmdlcywNCj4g Pg0KPiA+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgUmF3TWVtb3J5UmFuZ2VDb3VudCwN Cj4gPg0KPiA+ICsgIE9VVCBNVFJSX01FTU9SWV9SQU5HRSAgICAgKk1lbW9yeVJhbmdlcywNCj4g Pg0KPiA+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgKk1lbW9yeVJhbmdlQ291bnQNCj4g Pg0KPiA+ICsgICk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBHZW5l cmF0ZSByYW5kb20gTVRSUiBCQVNFL01BU0sgZm9yIGEgc3BlY2lmaWVkIHR5cGUuDQo+ID4NCj4g PiArDQo+ID4NCj4gPiArICBAcGFyYW0gUGh5c2ljYWxBZGRyZXNzQml0cyBQaHlzaWNhbCBhZGRy ZXNzIGJpdHMuDQo+ID4NCj4gPiArICBAcGFyYW0gQ2FjaGVUeXBlICAgICAgICAgICBDYWNoZSB0 eXBlLg0KPiA+DQo+ID4gKyAgQHBhcmFtIE10cnJQYWlyICAgICAgICAgICAgUmV0dXJuIHRoZSBy YW5kb20gTVRSUi4NCj4gPg0KPiA+ICsgIEBwYXJhbSBNdHJyTWVtb3J5UmFuZ2UgICAgIFJldHVy biB0aGUgcmFuZG9tIG1lbW9yeQ0KPiA+IHJhbmdlLg0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4g K1ZPSUQNCj4gPg0KPiA+ICtHZW5lcmF0ZVJhbmRvbU10cnJQYWlyICgNCj4gPg0KPiA+ICsgIElO ICBVSU5UMzIgICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+ID4NCj4gPiAr ICBJTiAgTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSBDYWNoZVR5cGUsDQo+ID4NCj4gPiArICBPVVQg TVRSUl9WQVJJQUJMRV9TRVRUSU5HICAqTXRyclBhaXIsICAgICAgIE9QVElPTkFMDQo+ID4NCj4g PiArICBPVVQgTVRSUl9NRU1PUllfUkFOR0UgICAgICAqTXRyck1lbW9yeVJhbmdlIE9QVElPTkFM DQo+ID4NCj4gPiArICApOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAg Q29sbGVjdCB0aGUgdGVzdCByZXN1bHQuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0g RGVmYXVsdFR5cGUgICAgICAgICAgRGVmYXVsdCBtZW1vcnkgdHlwZS4NCj4gPg0KPiA+ICsgIEBw YXJhbSBQaHlzaWNhbEFkZHJlc3NCaXRzICBQaHlzaWNhbCBhZGRyZXNzIGJpdHMuDQo+ID4NCj4g PiArICBAcGFyYW0gVmFyaWFibGVNdHJyQ291bnQgICAgQ291bnQgb2YgdmFyaWFibGUgTVRSUnMu DQo+ID4NCj4gPiArICBAcGFyYW0gTXRycnMgICAgICAgICAgICAgICAgTVRSUiBzZXR0aW5ncyB0 byBjb2xsZWN0DQo+ID4gZnJvbS4NCj4gPg0KPiA+ICsgIEBwYXJhbSBSYW5nZXMgICAgICAgICAg ICAgICBSZXR1cm4gdGhlIG1lbW9yeQ0KPiA+IHJhbmdlcy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBS YW5nZUNvdW50ICAgICAgICAgICBSZXR1cm4gdGhlIGNvdW50IG9mDQo+ID4gbWVtb3J5IHJhbmdl cy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBNdHJyQ291bnQgICAgICAgICAgICBSZXR1cm4gdGhlIGNv dW50IG9mDQo+ID4gdmFyaWFibGUgTVRSUnMgYmVpbmcgdXNlZC4NCj4gPg0KPiA+ICsqKi8NCj4g Pg0KPiA+ICtWT0lEDQo+ID4NCj4gPiArQ29sbGVjdFRlc3RSZXN1bHQgKA0KPiA+DQo+ID4gKyAg SU4gICAgIE1UUlJfTUVNT1JZX0NBQ0hFX1RZUEUgRGVmYXVsdFR5cGUsDQo+ID4NCj4gPiArICBJ TiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICBQaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiA+DQo+ ID4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgVmFyaWFibGVNdHJyQ291bnQsDQo+ ID4NCj4gPiArICBJTiAgICAgTVRSUl9TRVRUSU5HUyAgICAgICAgICAqTXRycnMsDQo+ID4NCj4g PiArICBPVVQgICAgTVRSUl9NRU1PUllfUkFOR0UgICAgICAqUmFuZ2VzLA0KPiA+DQo+ID4gKyAg SU4gT1VUIFVJTlROICAgICAgICAgICAgICAgICAgKlJhbmdlQ291bnQsDQo+ID4NCj4gPiArICBP VVQgICAgVUlOVDMyICAgICAgICAgICAgICAgICAqTXRyckNvdW50DQo+ID4NCj4gPiArICApOw0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgUmV0dXJuIGEgNjRiaXQgcmFu ZG9tIG51bWJlci4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBTdGFydCAgU3RhcnQg b2YgdGhlIHJhbmRvbSBudW1iZXIgcmFuZ2UuDQo+ID4NCj4gPiArICBAcGFyYW0gTGltaXQgIExp bWl0IG9mIHRoZSByYW5kb20gbnVtYmVyIHJhbmdlLg0KPiA+DQo+ID4gKyAgQHJldHVybiA2NGJp dCByYW5kb20gbnVtYmVyDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVUlOVDY0DQo+ID4NCj4g PiArUmFuZG9tNjQgKA0KPiA+DQo+ID4gKyAgVUlOVDY0ICBTdGFydCwNCj4gPg0KPiA+ICsgIFVJ TlQ2NCAgTGltaXQNCj4gPg0KPiA+ICsgICk7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ ID4NCj4gPiArICBSZXR1cm4gYSAzMmJpdCByYW5kb20gbnVtYmVyLg0KPiA+DQo+ID4gKw0KPiA+ DQo+ID4gKyAgQHBhcmFtIFN0YXJ0ICBTdGFydCBvZiB0aGUgcmFuZG9tIG51bWJlciByYW5nZS4N Cj4gPg0KPiA+ICsgIEBwYXJhbSBMaW1pdCAgTGltaXQgb2YgdGhlIHJhbmRvbSBudW1iZXIgcmFu Z2UuDQo+ID4NCj4gPiArICBAcmV0dXJuIDMyYml0IHJhbmRvbSBudW1iZXINCj4gPg0KPiA+ICsq Ki8NCj4gPg0KPiA+ICtVSU5UMzINCj4gPg0KPiA+ICtSYW5kb20zMiAoDQo+ID4NCj4gPiArICBV SU5UMzIgIFN0YXJ0LA0KPiA+DQo+ID4gKyAgVUlOVDMyICBMaW1pdA0KPiA+DQo+ID4gKyAgKTsN Cj4gPg0KPiA+ICsjZW5kaWYNCj4gPg0KPiA+IGRpZmYgLS1naXQNCj4gPiBhL1VlZmlDcHVQa2cv TGlicmFyeS9NdHJyTGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdEhvDQo+ID4gc3QuaW5mDQo+ ID4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3RI bw0KPiA+IHN0LmluZg0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAw MDAwMC4uNDQ3MjM4ZGM4MQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysNCj4gPiBiL1VlZmlD cHVQa2cvTGlicmFyeS9NdHJyTGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdEhvDQo+ID4gc3Qu aW5mDQo+ID4gQEAgLTAsMCArMSwzOSBAQA0KPiA+ICsjIyBAZmlsZQ0KPiA+DQo+ID4gKyMgVW5p dCB0ZXN0cyBvZiB0aGUgTXRyckxpYiBpbnN0YW5jZSBvZiB0aGUgTXRyckxpYg0KPiA+IGNsYXNz DQo+ID4NCj4gPiArIw0KPiA+DQo+ID4gKyMgQ29weXJpZ2h0IChjKSAyMDIwLCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cw0KPiA+IHJlc2VydmVkLjxCUj4NCj4gPg0KPiA+ICsjIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4NCj4gPiArIyMNCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICtbRGVmaW5lc10NCj4gPg0KPiA+ICsgIElORl9WRVJTSU9OICAg ICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDYNCj4gPg0KPiA+ICsgIEJBU0VfTkFNRSAgICAg ICAgICAgICAgICAgICAgICA9IE10cnJMaWJVbml0VGVzdEhvc3QNCj4gPg0KPiA+ICsgIEZJTEVf R1VJRCAgICAgICAgICAgICAgICAgICAgICA9IEExNTQyRDg0LUI2NEQtNDg0Ny0NCj4gPiA4ODVF LTA1MDkwODQzNzZBQg0KPiA+DQo+ID4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAg ID0gSE9TVF9BUFBMSUNBVElPTg0KPiA+DQo+ID4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAg ICAgICAgID0gMS4wDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArIw0KPiA+DQo+ID4gKyMgVGhlIGZv bGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kDQo+ID4gbm90IHJl cXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4NCj4gPg0KPiA+ICsjDQo+ID4NCj4gPiArIyAgVkFM SURfQVJDSElURUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2NA0KPiA+DQo+ID4gKyMNCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICtbU291cmNlc10NCj4gPg0KPiA+ICsgIE10cnJMaWJVbml0VGVzdC5j DQo+ID4NCj4gPiArICBNdHJyTGliVW5pdFRlc3QuaA0KPiA+DQo+ID4gKyAgU3VwcG9ydC5jDQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArW1BhY2thZ2VzXQ0KPiA+DQo+ID4gKyAgTWRlUGtnL01kZVBr Zy5kZWMNCj4gPg0KPiA+ICsgIFVlZmlDcHVQa2cvVWVmaUNwdVBrZy5kZWMNCj4gPg0KPiA+ICsg IFVuaXRUZXN0RnJhbWV3b3JrUGtnL1VuaXRUZXN0RnJhbWV3b3JrUGtnLmRlYw0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPg0KPiA+ICsgIEJhc2VMaWINCj4gPg0K PiA+ICsgIEJhc2VNZW1vcnlMaWINCj4gPg0KPiA+ICsgIERlYnVnTGliDQo+ID4NCj4gPiArICBN dHJyTGliDQo+ID4NCj4gPiArICBVbml0VGVzdExpYg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gK1tQ Y2RdDQo+ID4NCj4gPiArDQo+ID4gZ1VlZmlDcHVQa2dUb2tlblNwYWNlR3VpZC5QY2RDcHVOdW1i ZXJPZlJlc2VydmVkVmFyaWFibA0KPiA+IGVNdHJycyAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0K PiA+DQo+ID4gZGlmZiAtLWdpdA0KPiA+IGEvVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5p dFRlc3QvU3VwcG9ydC5jDQo+ID4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVz dC9TdXBwb3J0LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAw MDAuLjlmZTRiMDI3OGUNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvVWVmaUNwdVBrZy9M aWJyYXJ5L010cnJMaWIvVW5pdFRlc3QvU3VwcG9ydC5jDQo+ID4gQEAgLTAsMCArMSw5MTMgQEAN Cj4gPiArLyoqIEBmaWxlDQo+ID4NCj4gPiArICBVbml0IHRlc3RzIG9mIHRoZSBNdHJyTGliIGlu c3RhbmNlIG9mIHRoZSBNdHJyTGliDQo+ID4gY2xhc3MNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsg IENvcHlyaWdodCAoYykgMjAxOCAtIDIwMjAsIEludGVsIENvcnBvcmF0aW9uLiBBbGwNCj4gPiBy aWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+DQo+ID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsjaW5jbHVkZSAiTXRyckxpYlVuaXRUZXN0LmgiDQo+ID4NCj4gPiArDQo+ ID4NCj4gPiArTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSBtTWVtb3J5Q2FjaGVUeXBlc1tdID0gew0K PiA+DQo+ID4gKyAgQ2FjaGVVbmNhY2hlYWJsZSwgQ2FjaGVXcml0ZUNvbWJpbmluZywNCj4gPiBD YWNoZVdyaXRlVGhyb3VnaCwgQ2FjaGVXcml0ZVByb3RlY3RlZCwgQ2FjaGVXcml0ZUJhY2sNCj4g Pg0KPiA+ICsgIH07DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArVUlOVDY0DQo+ID4gbUZpeGVkTXRy cnNWYWx1ZVtNVFJSX05VTUJFUl9PRl9GSVhFRF9NVFJSXTsNCj4gPg0KPiA+ICtNU1JfSUEzMl9N VFJSX1BIWVNCQVNFX1JFR0lTVEVSDQo+ID4gbVZhcmlhYmxlTXRycnNQaHlzQmFzZVtNVFJSX05V TUJFUl9PRl9WQVJJQUJMRV9NVFJSXTsNCj4gPg0KPiA+ICtNU1JfSUEzMl9NVFJSX1BIWVNNQVNL X1JFR0lTVEVSDQo+ID4gbVZhcmlhYmxlTXRycnNQaHlzTWFza1tNVFJSX05VTUJFUl9PRl9WQVJJ QUJMRV9NVFJSXTsNCj4gPg0KPiA+ICtNU1JfSUEzMl9NVFJSX0RFRl9UWVBFX1JFR0lTVEVSICBt RGVmVHlwZU1zcjsNCj4gPg0KPiA+ICtNU1JfSUEzMl9NVFJSQ0FQX1JFR0lTVEVSICAgICAgICBt TXRyckNhcE1zcjsNCj4gPg0KPiA+ICtDUFVJRF9WRVJTSU9OX0lORk9fRURYICAgICAgICAgICBt Q3B1aWRWZXJzaW9uSW5mb0VkeDsNCj4gPg0KPiA+ICtDUFVJRF9WSVJfUEhZX0FERFJFU1NfU0la RV9FQVgNCj4gPiBtQ3B1aWRWaXJQaHlBZGRyZXNzU2l6ZUVheDsNCj4gPg0KPiA+ICsNCj4gPg0K PiA+ICsvKioNCj4gPg0KPiA+ICsgIFJldHJpZXZlcyBDUFVJRCBpbmZvcm1hdGlvbi4NCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICsgIEV4ZWN1dGVzIHRoZSBDUFVJRCBpbnN0cnVjdGlvbiB3aXRoIEVB WCBzZXQgdG8gdGhlDQo+ID4gdmFsdWUgc3BlY2lmaWVkIGJ5IEluZGV4Lg0KPiA+DQo+ID4gKyAg VGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBJbmRleC4NCj4gPg0KPiA+ICsgIElmIEVheCBp cyBub3QgTlVMTCwgdGhlbiB0aGUgdmFsdWUgb2YgRUFYIGFmdGVyDQo+ID4gQ1BVSUQgaXMgcmV0 dXJuZWQgaW4gRWF4Lg0KPiA+DQo+ID4gKyAgSWYgRWJ4IGlzIG5vdCBOVUxMLCB0aGVuIHRoZSB2 YWx1ZSBvZiBFQlggYWZ0ZXINCj4gPiBDUFVJRCBpcyByZXR1cm5lZCBpbiBFYnguDQo+ID4NCj4g PiArICBJZiBFY3ggaXMgbm90IE5VTEwsIHRoZW4gdGhlIHZhbHVlIG9mIEVDWCBhZnRlcg0KPiA+ IENQVUlEIGlzIHJldHVybmVkIGluIEVjeC4NCj4gPg0KPiA+ICsgIElmIEVkeCBpcyBub3QgTlVM TCwgdGhlbiB0aGUgdmFsdWUgb2YgRURYIGFmdGVyDQo+ID4gQ1BVSUQgaXMgcmV0dXJuZWQgaW4g RWR4Lg0KPiA+DQo+ID4gKyAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBvbiBJQS0z MiBhbmQgeDY0Lg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtICBJbmRleCBUaGUgMzIt Yml0IHZhbHVlIHRvIGxvYWQgaW50byBFQVgNCj4gPiBwcmlvciB0byBpbnZva2luZyB0aGUgQ1BV SUQNCj4gPg0KPiA+ICsgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uDQo+ID4NCj4gPiArICBA cGFyYW0gIEVheCAgIFRoZSBwb2ludGVyIHRvIHRoZSAzMi1iaXQgRUFYIHZhbHVlDQo+ID4gcmV0 dXJuZWQgYnkgdGhlIENQVUlEDQo+ID4NCj4gPiArICAgICAgICAgICAgICAgIGluc3RydWN0aW9u LiBUaGlzIGlzIGFuIG9wdGlvbmFsDQo+ID4gcGFyYW1ldGVyIHRoYXQgbWF5IGJlIE5VTEwuDQo+ ID4NCj4gPiArICBAcGFyYW0gIEVieCAgIFRoZSBwb2ludGVyIHRvIHRoZSAzMi1iaXQgRUJYIHZh bHVlDQo+ID4gcmV0dXJuZWQgYnkgdGhlIENQVUlEDQo+ID4NCj4gPiArICAgICAgICAgICAgICAg IGluc3RydWN0aW9uLiBUaGlzIGlzIGFuIG9wdGlvbmFsDQo+ID4gcGFyYW1ldGVyIHRoYXQgbWF5 IGJlIE5VTEwuDQo+ID4NCj4gPiArICBAcGFyYW0gIEVjeCAgIFRoZSBwb2ludGVyIHRvIHRoZSAz Mi1iaXQgRUNYIHZhbHVlDQo+ID4gcmV0dXJuZWQgYnkgdGhlIENQVUlEDQo+ID4NCj4gPiArICAg ICAgICAgICAgICAgIGluc3RydWN0aW9uLiBUaGlzIGlzIGFuIG9wdGlvbmFsDQo+ID4gcGFyYW1l dGVyIHRoYXQgbWF5IGJlIE5VTEwuDQo+ID4NCj4gPiArICBAcGFyYW0gIEVkeCAgIFRoZSBwb2lu dGVyIHRvIHRoZSAzMi1iaXQgRURYIHZhbHVlDQo+ID4gcmV0dXJuZWQgYnkgdGhlIENQVUlEDQo+ ID4NCj4gPiArICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLiBUaGlzIGlzIGFuIG9wdGlvbmFs DQo+ID4gcGFyYW1ldGVyIHRoYXQgbWF5IGJlIE5VTEwuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiAr ICBAcmV0dXJuIEluZGV4Lg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1VJ TlQzMg0KPiA+DQo+ID4gK0VGSUFQSQ0KPiA+DQo+ID4gK1VuaXRUZXN0TXRyckxpYkFzbUNwdWlk ICgNCj4gPg0KPiA+ICsgIElOICAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbmRleCwN Cj4gPg0KPiA+ICsgIE9VVCAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAqRWF4LCAgT1BU SU9OQUwNCj4gPg0KPiA+ICsgIE9VVCAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAqRWJ4 LCAgT1BUSU9OQUwNCj4gPg0KPiA+ICsgIE9VVCAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICAqRWN4LCAgT1BUSU9OQUwNCj4gPg0KPiA+ICsgIE9VVCAgICAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICAqRWR4ICAgT1BUSU9OQUwNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4N Cj4gPiArICBzd2l0Y2ggKEluZGV4KSB7DQo+ID4NCj4gPiArICBjYXNlIENQVUlEX1ZFUlNJT05f SU5GTzoNCj4gPg0KPiA+ICsgICAgaWYgKEVkeCAhPSBOVUxMKSB7DQo+ID4NCj4gPiArICAgICAg KkVkeCA9IG1DcHVpZFZlcnNpb25JbmZvRWR4LlVpbnQzMjsNCj4gPg0KPiA+ICsgICAgfQ0KPiA+ DQo+ID4gKyAgICByZXR1cm4gSW5kZXg7DQo+ID4NCj4gPiArICAgIGJyZWFrOw0KPiA+DQo+ID4g KyAgY2FzZSBDUFVJRF9FWFRFTkRFRF9GVU5DVElPTjoNCj4gPg0KPiA+ICsgICAgaWYgKEVheCAh PSBOVUxMKSB7DQo+ID4NCj4gPiArICAgICAgKkVheCA9IENQVUlEX1ZJUl9QSFlfQUREUkVTU19T SVpFOw0KPiA+DQo+ID4gKyAgICB9DQo+ID4NCj4gPiArICAgIHJldHVybiBJbmRleDsNCj4gPg0K PiA+ICsgICAgYnJlYWs7DQo+ID4NCj4gPiArICBjYXNlIENQVUlEX1ZJUl9QSFlfQUREUkVTU19T SVpFOg0KPiA+DQo+ID4gKyAgICBpZiAoRWF4ICE9IE5VTEwpIHsNCj4gPg0KPiA+ICsgICAgICAq RWF4ID0gbUNwdWlkVmlyUGh5QWRkcmVzc1NpemVFYXguVWludDMyOw0KPiA+DQo+ID4gKyAgICB9 DQo+ID4NCj4gPiArICAgIHJldHVybiBJbmRleDsNCj4gPg0KPiA+ICsgICAgYnJlYWs7DQo+ID4N Cj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gU2hv dWxkIG5ldmVyIGZhbGwgdGhyb3VnaCB0byBoZXJlDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4g KyAgQVNTRVJUKEZBTFNFKTsNCj4gPg0KPiA+ICsgIHJldHVybiBJbmRleDsNCj4gPg0KPiA+ICt9 DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBSZXR1cm5zIGEgNjQtYml0 IE1hY2hpbmUgU3BlY2lmaWMgUmVnaXN0ZXIoTVNSKS4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsg IFJlYWRzIGFuZCByZXR1cm5zIHRoZSA2NC1iaXQgTVNSIHNwZWNpZmllZCBieSBJbmRleC4NCj4g PiBObyBwYXJhbWV0ZXIgY2hlY2tpbmcgaXMNCj4gPg0KPiA+ICsgIHBlcmZvcm1lZCBvbiBJbmRl eCwgYW5kIHNvbWUgSW5kZXggdmFsdWVzIG1heSBjYXVzZQ0KPiA+IENQVSBleGNlcHRpb25zLiBU aGUNCj4gPg0KPiA+ICsgIGNhbGxlciBtdXN0IGVpdGhlciBndWFyYW50ZWUgdGhhdCBJbmRleCBp cyB2YWxpZCwgb3INCj4gPiB0aGUgY2FsbGVyIG11c3Qgc2V0IHVwDQo+ID4NCj4gPiArICBleGNl cHRpb24gaGFuZGxlcnMgdG8gY2F0Y2ggdGhlIGV4Y2VwdGlvbnMuIFRoaXMNCj4gPiBmdW5jdGlv biBpcyBvbmx5IGF2YWlsYWJsZQ0KPiA+DQo+ID4gKyAgb24gSUEtMzIgYW5kIHg2NC4NCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSAgTXNySW5kZXggVGhlIDMyLWJpdCBNU1IgaW5kZXgg dG8gcmVhZC4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRo ZSBNU1IgaWRlbnRpZmllZCBieSBNc3JJbmRleC4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsqKi8N Cj4gPg0KPiA+ICtVSU5UNjQNCj4gPg0KPiA+ICtFRklBUEkNCj4gPg0KPiA+ICtVbml0VGVzdE10 cnJMaWJBc21SZWFkTXNyNjQoDQo+ID4NCj4gPiArICBJTiBVSU5UMzIgIE1zckluZGV4DQo+ID4N Cj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgVUlOVDMyIEluZGV4Ow0KPiA+DQo+ ID4gKw0KPiA+DQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQVJSQVlfU0laRQ0KPiA+ IChtRml4ZWRNdHJyc1ZhbHVlKTsgSW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICBpZiAoTXNySW5k ZXggPT0gbUZpeGVkTXRycnNJbmRleFtJbmRleF0pIHsNCj4gPg0KPiA+ICsgICAgICByZXR1cm4g bUZpeGVkTXRycnNWYWx1ZVtJbmRleF07DQo+ID4NCj4gPiArICAgIH0NCj4gPg0KPiA+ICsgIH0N Cj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIGlmICgoTXNySW5kZXggPj0gTVNSX0lBMzJfTVRSUl9Q SFlTQkFTRTApICYmDQo+ID4NCj4gPiArICAgICAgKE1zckluZGV4IDw9IE1TUl9JQTMyX01UUlJf UEhZU01BU0swICsNCj4gPiAoTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiA8PCAxKSkpIHsN Cj4gPg0KPiA+ICsgICAgaWYgKE1zckluZGV4ICUgMiA9PSAwKSB7DQo+ID4NCj4gPiArICAgICAg SW5kZXggPSAoTXNySW5kZXggLSBNU1JfSUEzMl9NVFJSX1BIWVNCQVNFMCkgPj4NCj4gPiAxOw0K PiA+DQo+ID4gKyAgICAgIHJldHVybiBtVmFyaWFibGVNdHJyc1BoeXNCYXNlW0luZGV4XS5VaW50 NjQ7DQo+ID4NCj4gPiArICAgIH0gZWxzZSB7DQo+ID4NCj4gPiArICAgICAgSW5kZXggPSAoTXNy SW5kZXggLSBNU1JfSUEzMl9NVFJSX1BIWVNNQVNLMCkgPj4NCj4gPiAxOw0KPiA+DQo+ID4gKyAg ICAgIHJldHVybiBtVmFyaWFibGVNdHJyc1BoeXNNYXNrW0luZGV4XS5VaW50NjQ7DQo+ID4NCj4g PiArICAgIH0NCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIGlmIChNc3JJ bmRleCA9PSBNU1JfSUEzMl9NVFJSX0RFRl9UWVBFKSB7DQo+ID4NCj4gPiArICAgIHJldHVybiBt RGVmVHlwZU1zci5VaW50NjQ7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiAr ICBpZiAoTXNySW5kZXggPT0gTVNSX0lBMzJfTVRSUkNBUCkgew0KPiA+DQo+ID4gKyAgICByZXR1 cm4gbU10cnJDYXBNc3IuVWludDY0Ow0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKyAgLy8NCj4gPg0KPiA+ICsgIC8vIFNob3VsZCBuZXZlciBmYWxsIHRocm91Z2ggdG8gaGVy ZQ0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIEFTU0VSVChGQUxTRSk7DQo+ID4NCj4gPiAr ICByZXR1cm4gMDsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4N Cj4gPiArICBXcml0ZXMgYSA2NC1iaXQgdmFsdWUgdG8gYSBNYWNoaW5lIFNwZWNpZmljDQo+ID4g UmVnaXN0ZXIoTVNSKSwgYW5kIHJldHVybnMgdGhlDQo+ID4NCj4gPiArICB2YWx1ZS4NCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICsgIFdyaXRlcyB0aGUgNjQtYml0IHZhbHVlIHNwZWNpZmllZCBieSBW YWx1ZSB0byB0aGUNCj4gPiBNU1Igc3BlY2lmaWVkIGJ5IEluZGV4LiBUaGUNCj4gPg0KPiA+ICsg IDY0LWJpdCB2YWx1ZSB3cml0dGVuIHRvIHRoZSBNU1IgaXMgcmV0dXJuZWQuIE5vDQo+ID4gcGFy YW1ldGVyIGNoZWNraW5nIGlzDQo+ID4NCj4gPiArICBwZXJmb3JtZWQgb24gSW5kZXggb3IgVmFs dWUsIGFuZCBzb21lIG9mIHRoZXNlIG1heQ0KPiA+IGNhdXNlIENQVSBleGNlcHRpb25zLiBUaGUN Cj4gPg0KPiA+ICsgIGNhbGxlciBtdXN0IGVpdGhlciBndWFyYW50ZWUgdGhhdCBJbmRleCBhbmQg VmFsdWUNCj4gPiBhcmUgdmFsaWQsIG9yIHRoZSBjYWxsZXINCj4gPg0KPiA+ICsgIG11c3QgZXN0 YWJsaXNoIHByb3BlciBleGNlcHRpb24gaGFuZGxlcnMuIFRoaXMNCj4gPiBmdW5jdGlvbiBpcyBv bmx5IGF2YWlsYWJsZSBvbg0KPiA+DQo+ID4gKyAgSUEtMzIgYW5kIHg2NC4NCj4gPg0KPiA+ICsN Cj4gPg0KPiA+ICsgIEBwYXJhbSAgTXNySW5kZXggVGhlIDMyLWJpdCBNU1IgaW5kZXggdG8gd3Jp dGUuDQo+ID4NCj4gPiArICBAcGFyYW0gIFZhbHVlIFRoZSA2NC1iaXQgdmFsdWUgdG8gd3JpdGUg dG8gdGhlIE1TUi4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEByZXR1cm4gVmFsdWUNCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtVSU5UNjQNCj4gPg0KPiA+ICtFRklBUEkN Cj4gPg0KPiA+ICtVbml0VGVzdE10cnJMaWJBc21Xcml0ZU1zcjY0KA0KPiA+DQo+ID4gKyAgSU4g ICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIE1zckluZGV4LA0KPiA+DQo+ID4gKyAgSU4g ICAgICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIFZhbHVlDQo+ID4NCj4gPiArICApDQo+ID4N Cj4gPiArew0KPiA+DQo+ID4gKyAgVUlOVDMyIEluZGV4Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g KyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQVJSQVlfU0laRQ0KPiA+IChtRml4ZWRNdHJyc1Zh bHVlKTsgSW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICBpZiAoTXNySW5kZXggPT0gbUZpeGVkTXRy cnNJbmRleFtJbmRleF0pIHsNCj4gPg0KPiA+ICsgICAgICBtRml4ZWRNdHJyc1ZhbHVlW0luZGV4 XSA9IFZhbHVlOw0KPiA+DQo+ID4gKyAgICAgIHJldHVybiBWYWx1ZTsNCj4gPg0KPiA+ICsgICAg fQ0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgaWYgKChNc3JJbmRleCA+ PSBNU1JfSUEzMl9NVFJSX1BIWVNCQVNFMCkgJiYNCj4gPg0KPiA+ICsgICAgICAoTXNySW5kZXgg PD0gTVNSX0lBMzJfTVRSUl9QSFlTTUFTSzAgKw0KPiA+IChNVFJSX05VTUJFUl9PRl9WQVJJQUJM RV9NVFJSIDw8IDEpKSkgew0KPiA+DQo+ID4gKyAgICBpZiAoTXNySW5kZXggJSAyID09IDApIHsN Cj4gPg0KPiA+ICsgICAgICBJbmRleCA9IChNc3JJbmRleCAtIE1TUl9JQTMyX01UUlJfUEhZU0JB U0UwKSA+Pg0KPiA+IDE7DQo+ID4NCj4gPiArICAgICAgbVZhcmlhYmxlTXRycnNQaHlzQmFzZVtJ bmRleF0uVWludDY0ID0gVmFsdWU7DQo+ID4NCj4gPiArICAgICAgcmV0dXJuIFZhbHVlOw0KPiA+ DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+DQo+ID4gKyAgICAgIEluZGV4ID0gKE1zckluZGV4IC0g TVNSX0lBMzJfTVRSUl9QSFlTTUFTSzApID4+DQo+ID4gMTsNCj4gPg0KPiA+ICsgICAgICBtVmFy aWFibGVNdHJyc1BoeXNNYXNrW0luZGV4XS5VaW50NjQgPSBWYWx1ZTsNCj4gPg0KPiA+ICsgICAg ICByZXR1cm4gVmFsdWU7DQo+ID4NCj4gPiArICAgIH0NCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsgIGlmIChNc3JJbmRleCA9PSBNU1JfSUEzMl9NVFJSX0RFRl9UWVBFKSB7 DQo+ID4NCj4gPiArICAgIG1EZWZUeXBlTXNyLlVpbnQ2NCA9IFZhbHVlOw0KPiA+DQo+ID4gKyAg ICByZXR1cm4gVmFsdWU7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBp ZiAoTXNySW5kZXggPT0gTVNSX0lBMzJfTVRSUkNBUCkgew0KPiA+DQo+ID4gKyAgICBtTXRyckNh cE1zci5VaW50NjQgPSBWYWx1ZTsNCj4gPg0KPiA+ICsgICAgcmV0dXJuIFZhbHVlOw0KPiA+DQo+ ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsgIC8vIFNob3Vs ZCBuZXZlciBmYWxsIHRocm91Z2ggdG8gaGVyZQ0KPiA+DQo+ID4gKyAgLy8NCj4gPg0KPiA+ICsg IEFTU0VSVChGQUxTRSk7DQo+ID4NCj4gPiArICByZXR1cm4gMDsNCj4gPg0KPiA+ICt9DQo+ID4N Cj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBJbml0aWFsaXplIE1UUlIgcmVnaXN0 ZXJzLg0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4g KyAgSW5pdGlhbGl6ZSB0aGUgTVRSUiByZWdpc3RlcnMuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiAr ICBAcGFyYW0gU3lzdGVtUGFyYW1ldGVyIFN5c3RlbSBwYXJhbWV0ZXIgdGhhdA0KPiA+IGNvbnRy b2xzIHRoZSBNVFJSIHJlZ2lzdGVycyBpbml0aWFsaXphdGlvbi4NCj4gPg0KPiA+ICsqKi8NCj4g Pg0KPiA+ICtVTklUX1RFU1RfU1RBVFVTDQo+ID4NCj4gPiArRUZJQVBJDQo+ID4NCj4gPiArSW5p dGlhbGl6ZU10cnJSZWdzICgNCj4gPg0KPiA+ICsgIElOIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVU RVIgICpTeXN0ZW1QYXJhbWV0ZXINCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4g PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ ID4gKyAgU2V0TWVtIChtRml4ZWRNdHJyc1ZhbHVlLCBzaXplb2YgKG1GaXhlZE10cnJzVmFsdWUp LA0KPiA+IFN5c3RlbVBhcmFtZXRlci0+RGVmYXVsdENhY2hlVHlwZSk7DQo+ID4NCj4gPiArDQo+ ID4NCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBBUlJBWV9TSVpFDQo+ID4gKG1WYXJp YWJsZU10cnJzUGh5c0Jhc2UpOyBJbmRleCsrKSB7DQo+ID4NCj4gPiArICAgIG1WYXJpYWJsZU10 cnJzUGh5c0Jhc2VbSW5kZXhdLlVpbnQ2NCAgICAgICAgID0gMDsNCj4gPg0KPiA+ICsgICAgbVZh cmlhYmxlTXRycnNQaHlzQmFzZVtJbmRleF0uQml0cy5UeXBlICAgICAgPQ0KPiA+IFN5c3RlbVBh cmFtZXRlci0+RGVmYXVsdENhY2hlVHlwZTsNCj4gPg0KPiA+ICsgICAgbVZhcmlhYmxlTXRycnNQ aHlzQmFzZVtJbmRleF0uQml0cy5SZXNlcnZlZDEgPSAwOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g KyAgICBtVmFyaWFibGVNdHJyc1BoeXNNYXNrW0luZGV4XS5VaW50NjQgICAgICAgICA9IDA7DQo+ ID4NCj4gPiArICAgIG1WYXJpYWJsZU10cnJzUGh5c01hc2tbSW5kZXhdLkJpdHMuViAgICAgICAg ID0gMDsNCj4gPg0KPiA+ICsgICAgbVZhcmlhYmxlTXRycnNQaHlzTWFza1tJbmRleF0uQml0cy5S ZXNlcnZlZDEgPSAwOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgbURl ZlR5cGVNc3IuQml0cy5FICAgICAgICAgPSAxOw0KPiA+DQo+ID4gKyAgbURlZlR5cGVNc3IuQml0 cy5GRSAgICAgICAgPSAxOw0KPiA+DQo+ID4gKyAgbURlZlR5cGVNc3IuQml0cy5UeXBlICAgICAg PSBTeXN0ZW1QYXJhbWV0ZXItDQo+ID4gPkRlZmF1bHRDYWNoZVR5cGU7DQo+ID4NCj4gPiArICBt RGVmVHlwZU1zci5CaXRzLlJlc2VydmVkMSA9IDA7DQo+ID4NCj4gPiArICBtRGVmVHlwZU1zci5C aXRzLlJlc2VydmVkMiA9IDA7DQo+ID4NCj4gPiArICBtRGVmVHlwZU1zci5CaXRzLlJlc2VydmVk MyA9IDA7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBtTXRyckNhcE1zci5CaXRzLlNNUlIgICAg ICA9IDA7DQo+ID4NCj4gPiArICBtTXRyckNhcE1zci5CaXRzLldDICAgICAgICA9IDA7DQo+ID4N Cj4gPiArICBtTXRyckNhcE1zci5CaXRzLlZDTlQgICAgICA9IFN5c3RlbVBhcmFtZXRlci0NCj4g PiA+VmFyaWFibGVNdHJyQ291bnQ7DQo+ID4NCj4gPiArICBtTXRyckNhcE1zci5CaXRzLkZJWCAg ICAgICA9IFN5c3RlbVBhcmFtZXRlci0NCj4gPiA+Rml4ZWRNdHJyU3VwcG9ydGVkOw0KPiA+DQo+ ID4gKyAgbU10cnJDYXBNc3IuQml0cy5SZXNlcnZlZDEgPSAwOw0KPiA+DQo+ID4gKyAgbU10cnJD YXBNc3IuQml0cy5SZXNlcnZlZDIgPSAwOw0KPiA+DQo+ID4gKyAgbU10cnJDYXBNc3IuQml0cy5S ZXNlcnZlZDMgPSAwOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgbUNwdWlkVmVyc2lvbkluZm9F ZHguQml0cy5NVFJSDQo+ID4gPSBTeXN0ZW1QYXJhbWV0ZXItPk10cnJTdXBwb3J0ZWQ7DQo+ID4N Cj4gPiArICBtQ3B1aWRWaXJQaHlBZGRyZXNzU2l6ZUVheC5CaXRzLlBoeXNpY2FsQWRkcmVzc0Jp dHMNCj4gPiA9IFN5c3RlbVBhcmFtZXRlci0+UGh5c2ljYWxBZGRyZXNzQml0czsNCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICAvLyBIb29rIEJhc2VMaWIgZnVuY3Rpb25z IHVzZWQgYnkgTXRyckxpYiB0aGF0DQo+ID4gcmVxdWlyZSBzb21lIGVtdWxhdGlvbi4NCj4gPg0K PiA+ICsgIC8vDQo+ID4NCj4gPiArICBnVW5pdFRlc3RIb3N0QmFzZUxpYi5YODYtPkFzbUNwdWlk ICAgICAgPQ0KPiA+IFVuaXRUZXN0TXRyckxpYkFzbUNwdWlkOw0KPiA+DQo+ID4gKyAgZ1VuaXRU ZXN0SG9zdEJhc2VMaWIuWDg2LT5Bc21SZWFkTXNyNjQgID0NCj4gPiBVbml0VGVzdE10cnJMaWJB c21SZWFkTXNyNjQ7DQo+ID4NCj4gPiArICBnVW5pdFRlc3RIb3N0QmFzZUxpYi5YODYtPkFzbVdy aXRlTXNyNjQgPQ0KPiA+IFVuaXRUZXN0TXRyckxpYkFzbVdyaXRlTXNyNjQ7DQo+ID4NCj4gPiAr DQo+ID4NCj4gPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPg0KPiA+ICt9DQo+ID4N Cj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBDb2xsZWN0IHRoZSB0ZXN0IHJlc3Vs dC4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBEZWZhdWx0VHlwZSAgICAgICAgICBE ZWZhdWx0IG1lbW9yeSB0eXBlLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFBoeXNpY2FsQWRkcmVzc0Jp dHMgIFBoeXNpY2FsIGFkZHJlc3MgYml0cy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBWYXJpYWJsZU10 cnJDb3VudCAgICBDb3VudCBvZiB2YXJpYWJsZSBNVFJScy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBN dHJycyAgICAgICAgICAgICAgICBNVFJSIHNldHRpbmdzIHRvIGNvbGxlY3QNCj4gPiBmcm9tLg0K PiA+DQo+ID4gKyAgQHBhcmFtIFJhbmdlcyAgICAgICAgICAgICAgIFJldHVybiB0aGUgbWVtb3J5 DQo+ID4gcmFuZ2VzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhbmdlQ291bnQgICAgICAgICAgIFJl dHVybiB0aGUgY291bnQgb2YNCj4gPiBtZW1vcnkgcmFuZ2VzLg0KPiA+DQo+ID4gKyAgQHBhcmFt IE10cnJDb3VudCAgICAgICAgICAgIFJldHVybiB0aGUgY291bnQgb2YNCj4gPiB2YXJpYWJsZSBN VFJScyBiZWluZyB1c2VkLg0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK1ZPSUQNCj4gPg0KPiA+ ICtDb2xsZWN0VGVzdFJlc3VsdCAoDQo+ID4NCj4gPiArICBJTiAgICAgTVRSUl9NRU1PUllfQ0FD SEVfVFlQRSBEZWZhdWx0VHlwZSwNCj4gPg0KPiA+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAg ICAgICAgIFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+ID4NCj4gPiArICBJTiAgICAgVUlOVDMyICAg ICAgICAgICAgICAgICBWYXJpYWJsZU10cnJDb3VudCwNCj4gPg0KPiA+ICsgIElOICAgICBNVFJS X1NFVFRJTkdTICAgICAgICAgICpNdHJycywNCj4gPg0KPiA+ICsgIE9VVCAgICBNVFJSX01FTU9S WV9SQU5HRSAgICAgICpSYW5nZXMsDQo+ID4NCj4gPiArICBJTiBPVVQgVUlOVE4gICAgICAgICAg ICAgICAgICAqUmFuZ2VDb3VudCwNCj4gPg0KPiA+ICsgIE9VVCAgICBVSU5UMzIgICAgICAgICAg ICAgICAgICpNdHJyQ291bnQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiAr ICBVSU5UTiAgICAgICAgICAgICBJbmRleDsNCj4gPg0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAg IE10cnJWYWxpZEJpdHNNYXNrOw0KPiA+DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgTXRyclZh bGlkQWRkcmVzc01hc2s7DQo+ID4NCj4gPiArICBNVFJSX01FTU9SWV9SQU5HRSBSYXdNZW1vcnlS YW5nZXNbQVJSQVlfU0laRSAoTXRycnMtDQo+ID4gPlZhcmlhYmxlcy5NdHJyKV07DQo+ID4NCj4g PiArDQo+ID4NCj4gPiArICBBU1NFUlQgKE10cnJzICE9IE5VTEwpOw0KPiA+DQo+ID4gKyAgQVNT RVJUIChWYXJpYWJsZU10cnJDb3VudCA8PSBBUlJBWV9TSVpFIChNdHJycy0NCj4gPiA+VmFyaWFi bGVzLk10cnIpKTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIE10cnJWYWxpZEJpdHNNYXNrID0g KDF1bGwgPDwgUGh5c2ljYWxBZGRyZXNzQml0cykgLQ0KPiA+IDE7DQo+ID4NCj4gPiArICBNdHJy VmFsaWRBZGRyZXNzTWFzayA9IE10cnJWYWxpZEJpdHNNYXNrICYNCj4gPiB+MHhGRkZ1bGw7DQo+ ID4NCj4gPiArDQo+ID4NCj4gPiArICAqTXRyckNvdW50ID0gMDsNCj4gPg0KPiA+ICsgIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IFZhcmlhYmxlTXRyckNvdW50OyBJbmRleCsrKQ0KPiA+IHsNCj4g Pg0KPiA+ICsgICAgaWYgKCgoTVNSX0lBMzJfTVRSUl9QSFlTTUFTS19SRUdJU1RFUiAqKSAmTXRy cnMtDQo+ID4gPlZhcmlhYmxlcy5NdHJyW0luZGV4XS5NYXNrKS0+Qml0cy5WID09IDEpIHsNCj4g Pg0KPiA+ICsgICAgICBSYXdNZW1vcnlSYW5nZXNbKk10cnJDb3VudF0uQmFzZUFkZHJlc3MgPSBN dHJycy0NCj4gPiA+VmFyaWFibGVzLk10cnJbSW5kZXhdLkJhc2UgJiBNdHJyVmFsaWRBZGRyZXNz TWFzazsNCj4gPg0KPiA+ICsgICAgICBSYXdNZW1vcnlSYW5nZXNbKk10cnJDb3VudF0uVHlwZSAg ICAgICAgPQ0KPiA+DQo+ID4gKyAgICAgICAgKChNU1JfSUEzMl9NVFJSX1BIWVNCQVNFX1JFR0lT VEVSICopICZNdHJycy0NCj4gPiA+VmFyaWFibGVzLk10cnJbSW5kZXhdLkJhc2UpLT5CaXRzLlR5 cGU7DQo+ID4NCj4gPiArICAgICAgUmF3TWVtb3J5UmFuZ2VzWypNdHJyQ291bnRdLkxlbmd0aCAg ICAgID0NCj4gPg0KPiA+ICsgICAgICAgICAgKCh+KE10cnJzLT5WYXJpYWJsZXMuTXRycltJbmRl eF0uTWFzayAmDQo+ID4gTXRyclZhbGlkQWRkcmVzc01hc2spKSAmIE10cnJWYWxpZEJpdHNNYXNr KSArIDE7DQo+ID4NCj4gPiArICAgICAgKCpNdHJyQ291bnQpKys7DQo+ID4NCj4gPiArICAgIH0N Cj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEdldEVmZmVjdGl2ZU1lbW9y eVJhbmdlcyAoRGVmYXVsdFR5cGUsDQo+ID4gUGh5c2ljYWxBZGRyZXNzQml0cywgUmF3TWVtb3J5 UmFuZ2VzLCAqTXRyckNvdW50LA0KPiA+IFJhbmdlcywgUmFuZ2VDb3VudCk7DQo+ID4NCj4gPiAr fQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgUmV0dXJuIGEgMzJiaXQg cmFuZG9tIG51bWJlci4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBTdGFydCAgU3Rh cnQgb2YgdGhlIHJhbmRvbSBudW1iZXIgcmFuZ2UuDQo+ID4NCj4gPiArICBAcGFyYW0gTGltaXQg IExpbWl0IG9mIHRoZSByYW5kb20gbnVtYmVyIHJhbmdlLg0KPiA+DQo+ID4gKyAgQHJldHVybiAz MmJpdCByYW5kb20gbnVtYmVyDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVUlOVDMyDQo+ID4N Cj4gPiArUmFuZG9tMzIgKA0KPiA+DQo+ID4gKyAgVUlOVDMyICBTdGFydCwNCj4gPg0KPiA+ICsg IFVJTlQzMiAgTGltaXQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBy ZXR1cm4gKFVJTlQzMikgKCgoZG91YmxlKSByYW5kICgpIC8gUkFORF9NQVgpICoNCj4gPiAoTGlt aXQgLSBTdGFydCkpICsgU3RhcnQ7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g Ky8qKg0KPiA+DQo+ID4gKyAgUmV0dXJuIGEgNjRiaXQgcmFuZG9tIG51bWJlci4NCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBTdGFydCAgU3RhcnQgb2YgdGhlIHJhbmRvbSBudW1iZXIg cmFuZ2UuDQo+ID4NCj4gPiArICBAcGFyYW0gTGltaXQgIExpbWl0IG9mIHRoZSByYW5kb20gbnVt YmVyIHJhbmdlLg0KPiA+DQo+ID4gKyAgQHJldHVybiA2NGJpdCByYW5kb20gbnVtYmVyDQo+ID4N Cj4gPiArKiovDQo+ID4NCj4gPiArVUlOVDY0DQo+ID4NCj4gPiArUmFuZG9tNjQgKA0KPiA+DQo+ ID4gKyAgVUlOVDY0ICBTdGFydCwNCj4gPg0KPiA+ICsgIFVJTlQ2NCAgTGltaXQNCj4gPg0KPiA+ ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICByZXR1cm4gKFVJTlQ2NCkgKCgoZG91Ymxl KSByYW5kICgpIC8gUkFORF9NQVgpICoNCj4gPiAoTGltaXQgLSBTdGFydCkpICsgU3RhcnQ7DQo+ ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgR2VuZXJh dGUgcmFuZG9tIE1UUlIgQkFTRS9NQVNLIGZvciBhIHNwZWNpZmllZCB0eXBlLg0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gKyAgQHBhcmFtIFBoeXNpY2FsQWRkcmVzc0JpdHMgUGh5c2ljYWwgYWRkcmVz cyBiaXRzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIENhY2hlVHlwZSAgICAgICAgICAgQ2FjaGUgdHlw ZS4NCj4gPg0KPiA+ICsgIEBwYXJhbSBNdHJyUGFpciAgICAgICAgICAgIFJldHVybiB0aGUgcmFu ZG9tIE1UUlIuDQo+ID4NCj4gPiArICBAcGFyYW0gTXRyck1lbW9yeVJhbmdlICAgICBSZXR1cm4g dGhlIHJhbmRvbSBtZW1vcnkNCj4gPiByYW5nZS4NCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtW T0lEDQo+ID4NCj4gPiArR2VuZXJhdGVSYW5kb21NdHJyUGFpciAoDQo+ID4NCj4gPiArICBJTiAg VUlOVDMyICAgICAgICAgICAgICAgICBQaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiA+DQo+ID4gKyAg SU4gIE1UUlJfTUVNT1JZX0NBQ0hFX1RZUEUgQ2FjaGVUeXBlLA0KPiA+DQo+ID4gKyAgT1VUIE1U UlJfVkFSSUFCTEVfU0VUVElORyAgKk10cnJQYWlyLCAgICAgICBPUFRJT05BTA0KPiA+DQo+ID4g KyAgT1VUIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgKk10cnJNZW1vcnlSYW5nZSBPUFRJT05BTA0K PiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgIE1TUl9JQTMyX01UUlJfUEhZ U0JBU0VfUkVHSVNURVIgUGh5c0Jhc2U7DQo+ID4NCj4gPiArICBNU1JfSUEzMl9NVFJSX1BIWVNN QVNLX1JFR0lTVEVSIFBoeXNNYXNrOw0KPiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICAgICBTaXplU2hpZnQ7DQo+ID4NCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgICAgIEJhc2VTaGlmdDsNCj4gPg0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAg ICAgICAgICAgUmFuZG9tQm91bmRhcnk7DQo+ID4NCj4gPiArICBVSU5UNjQgICAgICAgICAgICAg ICAgICAgICAgICAgIE1heFBoeXNpY2FsQWRkcmVzczsNCj4gPg0KPiA+ICsgIFVJTlQ2NCAgICAg ICAgICAgICAgICAgICAgICAgICAgUmFuZ2VTaXplOw0KPiA+DQo+ID4gKyAgVUlOVDY0ICAgICAg ICAgICAgICAgICAgICAgICAgICBSYW5nZUJhc2U7DQo+ID4NCj4gPiArICBVSU5UNjQNCj4gPiBQ aHlzQmFzZVBoeU1hc2tWYWxpZEJpdHNNYXNrOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgTWF4 UGh5c2ljYWxBZGRyZXNzID0gMXVsbCA8PCBQaHlzaWNhbEFkZHJlc3NCaXRzOw0KPiA+DQo+ID4g KyAgZG8gew0KPiA+DQo+ID4gKyAgICBTaXplU2hpZnQgPSBSYW5kb20zMiAoMTIsIFBoeXNpY2Fs QWRkcmVzc0JpdHMgLQ0KPiA+IDEpOw0KPiA+DQo+ID4gKyAgICBSYW5nZVNpemUgPSAxdWxsIDw8 IFNpemVTaGlmdDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgICAgQmFzZVNoaWZ0ID0gUmFuZG9t MzIgKFNpemVTaGlmdCwNCj4gPiBQaHlzaWNhbEFkZHJlc3NCaXRzIC0gMSk7DQo+ID4NCj4gPiAr ICAgIFJhbmRvbUJvdW5kYXJ5ID0gUmFuZG9tNjQgKDAsIDF1bGwgPDwNCj4gPiAoUGh5c2ljYWxB ZGRyZXNzQml0cyAtIEJhc2VTaGlmdCkpOw0KPiA+DQo+ID4gKyAgICBSYW5nZUJhc2UgPSBSYW5k b21Cb3VuZGFyeSA8PCBCYXNlU2hpZnQ7DQo+ID4NCj4gPiArICB9IHdoaWxlIChSYW5nZUJhc2Ug PCBTSVpFXzFNQiB8fCBSYW5nZUJhc2UgPg0KPiA+IE1heFBoeXNpY2FsQWRkcmVzcyAtIDEpOw0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgUGh5c0Jhc2VQaHlNYXNrVmFsaWRCaXRzTWFzayA9IChN YXhQaHlzaWNhbEFkZHJlc3MgLQ0KPiA+IDEpICYgMHhmZmZmZmZmZmZmZmZmMDAwVUxMOw0KPiA+ DQo+ID4gKw0KPiA+DQo+ID4gKyAgUGh5c0Jhc2UuVWludDY0ICAgID0gMDsNCj4gPg0KPiA+ICsg IFBoeXNCYXNlLkJpdHMuVHlwZSA9IENhY2hlVHlwZTsNCj4gPg0KPiA+ICsgIFBoeXNCYXNlLlVp bnQ2NCAgIHw9IFJhbmdlQmFzZSAmDQo+ID4gUGh5c0Jhc2VQaHlNYXNrVmFsaWRCaXRzTWFzazsN Cj4gPg0KPiA+ICsgIFBoeXNNYXNrLlVpbnQ2NCAgICA9IDA7DQo+ID4NCj4gPiArICBQaHlzTWFz ay5CaXRzLlYgICAgPSAxOw0KPiA+DQo+ID4gKyAgUGh5c01hc2suVWludDY0ICAgfD0gKCh+UmFu Z2VTaXplKSArIDEpICYNCj4gPiBQaHlzQmFzZVBoeU1hc2tWYWxpZEJpdHNNYXNrOw0KPiA+DQo+ ID4gKw0KPiA+DQo+ID4gKyAgaWYgKE10cnJQYWlyICE9IE5VTEwpIHsNCj4gPg0KPiA+ICsgICAg TXRyclBhaXItPkJhc2UgPSBQaHlzQmFzZS5VaW50NjQ7DQo+ID4NCj4gPiArICAgIE10cnJQYWly LT5NYXNrID0gUGh5c01hc2suVWludDY0Ow0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+ DQo+ID4gKyAgaWYgKE10cnJNZW1vcnlSYW5nZSAhPSBOVUxMKSB7DQo+ID4NCj4gPiArICAgIE10 cnJNZW1vcnlSYW5nZS0+QmFzZUFkZHJlc3MgPSBSYW5nZUJhc2U7DQo+ID4NCj4gPiArICAgIE10 cnJNZW1vcnlSYW5nZS0+TGVuZ3RoICAgICAgPSBSYW5nZVNpemU7DQo+ID4NCj4gPiArICAgIE10 cnJNZW1vcnlSYW5nZS0+VHlwZSAgICAgICAgPSBDYWNoZVR5cGU7DQo+ID4NCj4gPiArICB9DQo+ ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ ID4gKyAgQ2hlY2sgd2hldGhlciB0aGUgUmFuZ2Ugb3ZlcmxhcHMgd2l0aCBhbnkgb25lIGluDQo+ ID4gUmFuZ2VzLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhbmdlICBUaGUgbWVt b3J5IHJhbmdlIHRvIGNoZWNrLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhbmdlcyBUaGUgbWVtb3J5 IHJhbmdlcy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBDb3VudCAgQ291bnQgb2YgbWVtb3J5IHJhbmdl cy4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEByZXR1cm4gVFJVRSB3aGVuIG92ZXJsYXAgZXhp c3RzLg0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK0JPT0xFQU4NCj4gPg0KPiA+ICtSYW5nZXNP dmVybGFwICgNCj4gPg0KPiA+ICsgIElOIE1UUlJfTUVNT1JZX1JBTkdFICpSYW5nZSwNCj4gPg0K PiA+ICsgIElOIE1UUlJfTUVNT1JZX1JBTkdFICpSYW5nZXMsDQo+ID4NCj4gPiArICBJTiBVSU5U TiAgICAgICAgICAgICBDb3VudA0KPiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ ICsgIHdoaWxlIChDb3VudC0tICE9IDApIHsNCj4gPg0KPiA+ICsgICAgLy8NCj4gPg0KPiA+ICsg ICAgLy8gVHdvIHJhbmdlcyBvdmVybGFwIHdoZW46DQo+ID4NCj4gPiArICAgIC8vIDEuIHJhbmdl IzIuYmFzZSBpcyBpbiB0aGUgbWlkZGxlIG9mIHJhbmdlIzENCj4gPg0KPiA+ICsgICAgLy8gMi4g cmFuZ2UjMS5iYXNlIGlzIGluIHRoZSBtaWRkbGUgb2YgcmFuZ2UjMg0KPiA+DQo+ID4gKyAgICAv Lw0KPiA+DQo+ID4gKyAgICBpZiAoKFJhbmdlLT5CYXNlQWRkcmVzcyA8PQ0KPiA+IFJhbmdlc1tD b3VudF0uQmFzZUFkZHJlc3MgJiYgUmFuZ2VzW0NvdW50XS5CYXNlQWRkcmVzcw0KPiA+IDwgUmFu Z2UtPkJhc2VBZGRyZXNzICsgUmFuZ2UtPkxlbmd0aCkNCj4gPg0KPiA+ICsgICAgIHx8IChSYW5n ZXNbQ291bnRdLkJhc2VBZGRyZXNzIDw9IFJhbmdlLQ0KPiA+ID5CYXNlQWRkcmVzcyAmJiBSYW5n ZS0+QmFzZUFkZHJlc3MgPA0KPiA+IFJhbmdlc1tDb3VudF0uQmFzZUFkZHJlc3MgKyBSYW5nZXNb Q291bnRdLkxlbmd0aCkpIHsNCj4gPg0KPiA+ICsgICAgICByZXR1cm4gVFJVRTsNCj4gPg0KPiA+ ICsgICAgfQ0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+DQo+ ID4gK30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIEdlbmVyYXRlIHJh bmRvbSBNVFJScy4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBQaHlzaWNhbEFkZHJl c3NCaXRzICBQaHlzaWNhbCBhZGRyZXNzIGJpdHMuDQo+ID4NCj4gPiArICBAcGFyYW0gUmF3TWVt b3J5UmFuZ2VzICAgICAgUmV0dXJuIHRoZSByYW5kb21seQ0KPiA+IGdlbmVyYXRlZCBNVFJScy4N Cj4gPg0KPiA+ICsgIEBwYXJhbSBVY0NvdW50ICAgICAgICAgICAgICBDb3VudCBvZiBVbmNhY2hl YWJsZQ0KPiA+IE1UUlJzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFd0Q291bnQgICAgICAgICAgICAg IENvdW50IG9mIFdyaXRlIFRocm91Z2gNCj4gPiBNVFJScy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBX YkNvdW50ICAgICAgICAgICAgICBDb3VudCBvZiBXcml0ZSBCYWNrDQo+ID4gTVRSUnMuDQo+ID4N Cj4gPiArICBAcGFyYW0gV3BDb3VudCAgICAgICAgICAgICAgQ291bnQgb2YgV3JpdGUgUHJvdGVj dGVkDQo+ID4gTVRSUnMuDQo+ID4NCj4gPiArICBAcGFyYW0gV2NDb3VudCAgICAgICAgICAgICAg Q291bnQgb2YgV3JpdGUgQ29tYmluZQ0KPiA+IE1UUlJzLg0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ ID4gK1ZPSUQNCj4gPg0KPiA+ICtHZW5lcmF0ZVZhbGlkQW5kQ29uZmlndXJhYmxlTXRyclBhaXJz ICgNCj4gPg0KPiA+ICsgIElOICAgICBVSU5UMzINCj4gPiBQaHlzaWNhbEFkZHJlc3NCaXRzLA0K PiA+DQo+ID4gKyAgSU4gT1VUIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgICAgKlJhd01lbW9yeVJh bmdlcywNCj4gPg0KPiA+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFVjQ291 bnQsDQo+ID4NCj4gPiArICBJTiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBXdENvdW50 LA0KPiA+DQo+ID4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgV2JDb3VudCwN Cj4gPg0KPiA+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFdwQ291bnQsDQo+ ID4NCj4gPiArICBJTiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBXY0NvdW50DQo+ID4N Cj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgICAgICBJbmRleDsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiAr ICAvLyAxLiBHZW5lcmF0ZSBVQywgV1QsIFdCIGluIG9yZGVyLg0KPiA+DQo+ID4gKyAgLy8NCj4g Pg0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFVjQ291bnQ7IEluZGV4KyspIHsNCj4g Pg0KPiA+ICsgICAgR2VuZXJhdGVSYW5kb21NdHJyUGFpciAoUGh5c2ljYWxBZGRyZXNzQml0cywN Cj4gPiBDYWNoZVVuY2FjaGVhYmxlLCBOVUxMLCAmUmF3TWVtb3J5UmFuZ2VzW0luZGV4XSk7DQo+ ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBmb3IgKEluZGV4ID0gVWNDb3Vu dDsgSW5kZXggPCBVY0NvdW50ICsgV3RDb3VudDsNCj4gPiBJbmRleCsrKSB7DQo+ID4NCj4gPiAr ICAgIEdlbmVyYXRlUmFuZG9tTXRyclBhaXIgKFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+ID4gQ2Fj aGVXcml0ZVRocm91Z2gsIE5VTEwsICZSYXdNZW1vcnlSYW5nZXNbSW5kZXhdKTsNCj4gPg0KPiA+ ICsgIH0NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIGZvciAoSW5kZXggPSBVY0NvdW50ICsgV3RD b3VudDsgSW5kZXggPCBVY0NvdW50ICsNCj4gPiBXdENvdW50ICsgV2JDb3VudDsgSW5kZXgrKykg ew0KPiA+DQo+ID4gKyAgICBHZW5lcmF0ZVJhbmRvbU10cnJQYWlyIChQaHlzaWNhbEFkZHJlc3NC aXRzLA0KPiA+IENhY2hlV3JpdGVCYWNrLCBOVUxMLCAmUmF3TWVtb3J5UmFuZ2VzW0luZGV4XSk7 DQo+ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAg Ly8gMi4gR2VuZXJhdGUgV1AgTVRSUiBhbmQgRE8gTk9UIG92ZXJsYXAgd2l0aCBXVCwNCj4gPiBX Qi4NCj4gPg0KPiA+ICsgIC8vDQo+ID4NCj4gPiArICBmb3IgKEluZGV4ID0gVWNDb3VudCArIFd0 Q291bnQgKyBXYkNvdW50OyBJbmRleCA8DQo+ID4gVWNDb3VudCArIFd0Q291bnQgKyBXYkNvdW50 ICsgV3BDb3VudDsgSW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICBHZW5lcmF0ZVJhbmRvbU10cnJQ YWlyIChQaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiA+IENhY2hlV3JpdGVQcm90ZWN0ZWQsIE5VTEws ICZSYXdNZW1vcnlSYW5nZXNbSW5kZXhdKTsNCj4gPg0KPiA+ICsgICAgd2hpbGUgKFJhbmdlc092 ZXJsYXAgKCZSYXdNZW1vcnlSYW5nZXNbSW5kZXhdLA0KPiA+ICZSYXdNZW1vcnlSYW5nZXNbVWND b3VudF0sIFd0Q291bnQgKyBXYkNvdW50KSkgew0KPiA+DQo+ID4gKyAgICAgIEdlbmVyYXRlUmFu ZG9tTXRyclBhaXIgKFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+ID4gQ2FjaGVXcml0ZVByb3RlY3Rl ZCwgTlVMTCwgJlJhd01lbW9yeVJhbmdlc1tJbmRleF0pOw0KPiA+DQo+ID4gKyAgICB9DQo+ID4N Cj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgLy8gMy4g R2VuZXJhdGUgV0MgTVRSUiBhbmQgRE8gTk9UIG92ZXJsYXAgd2l0aCBXVCwNCj4gPiBXQiwgV1Au DQo+ID4NCj4gPiArICAvLw0KPiA+DQo+ID4gKyAgZm9yIChJbmRleCA9IFVjQ291bnQgKyBXdENv dW50ICsgV2JDb3VudCArIFdwQ291bnQ7DQo+ID4gSW5kZXggPCBVY0NvdW50ICsgV3RDb3VudCAr IFdiQ291bnQgKyBXcENvdW50ICsNCj4gPiBXY0NvdW50OyBJbmRleCsrKSB7DQo+ID4NCj4gPiAr ICAgIEdlbmVyYXRlUmFuZG9tTXRyclBhaXIgKFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+ID4gQ2Fj aGVXcml0ZUNvbWJpbmluZywgTlVMTCwgJlJhd01lbW9yeVJhbmdlc1tJbmRleF0pOw0KPiA+DQo+ ID4gKyAgICB3aGlsZSAoUmFuZ2VzT3ZlcmxhcCAoJlJhd01lbW9yeVJhbmdlc1tJbmRleF0sDQo+ ID4gJlJhd01lbW9yeVJhbmdlc1tVY0NvdW50XSwgV3RDb3VudCArIFdiQ291bnQgKw0KPiA+IFdw Q291bnQpKSB7DQo+ID4NCj4gPiArICAgICAgR2VuZXJhdGVSYW5kb21NdHJyUGFpciAoUGh5c2lj YWxBZGRyZXNzQml0cywNCj4gPiBDYWNoZVdyaXRlQ29tYmluaW5nLCBOVUxMLCAmUmF3TWVtb3J5 UmFuZ2VzW0luZGV4XSk7DQo+ID4NCj4gPiArICAgIH0NCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBSZXR1cm4gYSByYW5k b20gbWVtb3J5IGNhY2hlIHR5cGUuDQo+ID4NCj4gPiArKiovDQo+ID4NCj4gPiArTVRSUl9NRU1P UllfQ0FDSEVfVFlQRQ0KPiA+DQo+ID4gK0dlbmVyYXRlUmFuZG9tQ2FjaGVUeXBlICgNCj4gPg0K PiA+ICsgIFZPSUQNCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICAgIHJl dHVybiBtTWVtb3J5Q2FjaGVUeXBlc1tSYW5kb20zMiAoMCwgQVJSQVlfU0laRQ0KPiA+IChtTWVt b3J5Q2FjaGVUeXBlcykgLSAxKV07DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g Ky8qKg0KPiA+DQo+ID4gKyAgQ29tcGFyZSBmdW5jdGlvbiB1c2VkIGJ5IHFzb3J0KCkuDQo+ID4N Cj4gPiArKiovDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBDb21wYXJl IGZ1bmN0aW9uIHVzZWQgYnkgcXNvcnQoKS4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJh bSBMZWZ0ICAgTGVmdCBvcGVyYW5kIHRvIGNvbXBhcmUuDQo+ID4NCj4gPiArICBAcGFyYW0gUmln aHQgIFJpZ2h0IG9wZXJhbmQgdG8gY29tcGFyZS4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBy ZXR2YWwgMCAgTGVmdCA9PSBSaWdodA0KPiA+DQo+ID4gKyAgQHJldHZhbCAtMSBMZWZ0IDwgUmln aHQNCj4gPg0KPiA+ICsgIEByZXR2YWwgMSAgTGVmdCA+IFJpZ2h0DQo+ID4NCj4gPiArKiovDQo+ ID4NCj4gPiArSU5UMzINCj4gPg0KPiA+ICtDb21wYXJlRnVuY1VpbnQ2NCAoDQo+ID4NCj4gPiAr ICBDT05TVCBWT0lEICogTGVmdCwNCj4gPg0KPiA+ICsgIENPTlNUIFZPSUQgKiBSaWdodA0KPiA+ DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgICAgSU5UNjQgRGVsdGE7DQo+ID4N Cj4gPiArICAgIERlbHRhID0gKCooVUlOVDY0KilMZWZ0IC0gKihVSU5UNjQqKVJpZ2h0KTsNCj4g Pg0KPiA+ICsgICAgaWYgKERlbHRhID4gMCkgew0KPiA+DQo+ID4gKyAgICAgIHJldHVybiAxOw0K PiA+DQo+ID4gKyAgICB9IGVsc2UgaWYgKERlbHRhID09IDApIHsNCj4gPg0KPiA+ICsgICAgICBy ZXR1cm4gMDsNCj4gPg0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPg0KPiA+ICsgICAgICByZXR1cm4g LTE7DQo+ID4NCj4gPiArICAgIH0NCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiAr LyoqDQo+ID4NCj4gPiArICBEZXRlcm1pbiB0aGUgbWVtb3J5IGNhY2hlIHR5cGUgZm9yIHRoZSBS YW5nZS4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBEZWZhdWx0VHlwZSBEZWZhdWx0 IGNhY2hlIHR5cGUuDQo+ID4NCj4gPiArICBAcGFyYW0gUmFuZ2UgICAgICAgVGhlIG1lbW9yeSBy YW5nZSB0byBkZXRlcm1pbiB0aGUNCj4gPiBjYWNoZSB0eXBlLg0KPiA+DQo+ID4gKyAgQHBhcmFt IFJhbmdlcyAgICAgIFRoZSBlbnRpcmUgbWVtb3J5IHJhbmdlcy4NCj4gPg0KPiA+ICsgIEBwYXJh bSBSYW5nZUNvdW50ICBDb3VudCBvZiB0aGUgZW50aXJlIG1lbW9yeQ0KPiA+IHJhbmdlcy4NCj4g Pg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtWT0lEDQo+ID4NCj4gPiArRGV0ZXJtaW5lTWVtb3J5Q2Fj aGVUeXBlICgNCj4gPg0KPiA+ICsgIElOICAgICBNVFJSX01FTU9SWV9DQUNIRV9UWVBFIERlZmF1 bHRUeXBlLA0KPiA+DQo+ID4gKyAgSU4gT1VUIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgKlJhbmdl LA0KPiA+DQo+ID4gKyAgSU4gICAgIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgKlJhbmdlcywNCj4g Pg0KPiA+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgIFJhbmdlQ291bnQNCj4gPg0K PiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBVSU5UMzIgSW5kZXg7DQo+ID4NCj4g PiArICBSYW5nZS0+VHlwZSA9IENhY2hlSW52YWxpZDsNCj4gPg0KPiA+ICsgIGZvciAoSW5kZXgg PSAwOyBJbmRleCA8IFJhbmdlQ291bnQ7IEluZGV4KyspIHsNCj4gPg0KPiA+ICsgICAgaWYgKFJh bmdlc092ZXJsYXAgKFJhbmdlLCAmUmFuZ2VzW0luZGV4XSwgMSkpIHsNCj4gPg0KPiA+ICsgICAg ICBpZiAoUmFuZ2VzW0luZGV4XS5UeXBlIDwgUmFuZ2UtPlR5cGUpIHsNCj4gPg0KPiA+ICsgICAg ICAgIFJhbmdlLT5UeXBlID0gUmFuZ2VzW0luZGV4XS5UeXBlOw0KPiA+DQo+ID4gKyAgICAgIH0N Cj4gPg0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAg aWYgKFJhbmdlLT5UeXBlID09IENhY2hlSW52YWxpZCkgew0KPiA+DQo+ID4gKyAgICBSYW5nZS0+ VHlwZSA9IERlZmF1bHRUeXBlOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gK30NCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIEdldCB0aGUgaW5kZXggb2YgdGhlIGVsZW1l bnQgdGhhdCBkb2VzIE5PVCBlcXVhbHMgdG8NCj4gPiBBcnJheVtJbmRleF0uDQo+ID4NCj4gPiAr DQo+ID4NCj4gPiArICBAcGFyYW0gSW5kZXggICBDdXJyZW50IGVsZW1lbnQuDQo+ID4NCj4gPiAr ICBAcGFyYW0gQXJyYXkgICBBcnJheSB0byBzY2FuLg0KPiA+DQo+ID4gKyAgQHBhcmFtIENvdW50 ICAgQ291bnQgb2YgdGhlIGFycmF5Lg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHJldHVybiBO ZXh0IGVsZW1lbnQgdGhhdCBkb2Vzbid0IGVxdWFsIHRvIGN1cnJlbnQNCj4gPiBvbmUuDQo+ID4N Cj4gPiArKiovDQo+ID4NCj4gPiArVUlOVDMyDQo+ID4NCj4gPiArR2V0TmV4dERpZmZlcmVudEVs ZW1lbnRJblNvcnRlZEFycmF5ICgNCj4gPg0KPiA+ICsgIElOIFVJTlQzMiBJbmRleCwNCj4gPg0K PiA+ICsgIElOIFVJTlQ2NCAqQXJyYXksDQo+ID4NCj4gPiArICBJTiBVSU5UMzIgQ291bnQNCj4g Pg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICBVSU5UNjQgQ3VycmVudEVsZW1l bnQ7DQo+ID4NCj4gPiArICBDdXJyZW50RWxlbWVudCA9IEFycmF5W0luZGV4XTsNCj4gPg0KPiA+ ICsgIHdoaWxlIChDdXJyZW50RWxlbWVudCA9PSBBcnJheVtJbmRleF0gJiYgSW5kZXggPA0KPiA+ IENvdW50KSB7DQo+ID4NCj4gPiArICAgIEluZGV4Kys7DQo+ID4NCj4gPiArICB9DQo+ID4NCj4g PiArICByZXR1cm4gSW5kZXg7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8q Kg0KPiA+DQo+ID4gKyAgUmVtb3ZlIHRoZSBkdXBsaWNhdGVzIGZyb20gdGhlIGFycmF5Lg0KPiA+ DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtIEFycmF5ICBUaGUgYXJyYXkgdG8gb3BlcmF0ZSBv bi4NCj4gPg0KPiA+ICsgIEBwYXJhbSBDb3VudCAgQ291bnQgb2YgdGhlIGFycmF5Lg0KPiA+DQo+ ID4gKyoqLw0KPiA+DQo+ID4gK1ZPSUQNCj4gPg0KPiA+ICtSZW1vdmVEdXBsaWNhdGVzSW5Tb3J0 ZWRBcnJheSAoDQo+ID4NCj4gPiArICBJTiBPVVQgVUlOVDY0ICpBcnJheSwNCj4gPg0KPiA+ICsg IElOIE9VVCBVSU5UMzIgKkNvdW50DQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ ID4gKyAgVUlOVDMyIEluZGV4Ow0KPiA+DQo+ID4gKyAgVUlOVDMyIE5ld0NvdW50Ow0KPiA+DQo+ ID4gKw0KPiA+DQo+ID4gKyAgSW5kZXggICAgPSAwOw0KPiA+DQo+ID4gKyAgTmV3Q291bnQgPSAw Ow0KPiA+DQo+ID4gKyAgd2hpbGUgKEluZGV4IDwgKkNvdW50KSB7DQo+ID4NCj4gPiArICAgIEFy cmF5W05ld0NvdW50XSA9IEFycmF5W0luZGV4XTsNCj4gPg0KPiA+ICsgICAgTmV3Q291bnQrKzsN Cj4gPg0KPiA+ICsgICAgSW5kZXggPSBHZXROZXh0RGlmZmVyZW50RWxlbWVudEluU29ydGVkQXJy YXkNCj4gPiAoSW5kZXgsIEFycmF5LCAqQ291bnQpOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4g KyAgKkNvdW50ID0gTmV3Q291bnQ7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4g Ky8qKg0KPiA+DQo+ID4gKyAgUmV0dXJuIFRSVUUgd2hlbiBBZGRyZXNzIGlzIGluIHRoZSBSYW5n ZS4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBBZGRyZXNzIFRoZSBhZGRyZXNzIHRv IGNoZWNrLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhbmdlICAgVGhlIHJhbmdlIHRvIGNoZWNrLg0K PiA+DQo+ID4gKyAgQHJldHVybiBUUlVFIHdoZW4gQWRkcmVzcyBpcyBpbiB0aGUgUmFuZ2UuDQo+ ID4NCj4gPiArKiovDQo+ID4NCj4gPiArQk9PTEVBTg0KPiA+DQo+ID4gK0FkZHJlc3NJblJhbmdl ICgNCj4gPg0KPiA+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgIEFkZHJlc3MsDQo+ID4NCj4gPiAr ICBJTiBNVFJSX01FTU9SWV9SQU5HRSBSYW5nZQ0KPiA+DQo+ID4gKyAgKQ0KPiA+DQo+ID4gK3sN Cj4gPg0KPiA+ICsgICAgcmV0dXJuIChBZGRyZXNzID49IFJhbmdlLkJhc2VBZGRyZXNzKSAmJiAo QWRkcmVzcw0KPiA+IDw9IFJhbmdlLkJhc2VBZGRyZXNzICsgUmFuZ2UuTGVuZ3RoIC0gMSk7DQo+ ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgR2V0IHRo ZSBvdmVybGFwIGJpdCBmbGFnLg0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQHBhcmFtIFJhd01l bW9yeVJhbmdlcyAgICAgUmF3IG1lbW9yeSByYW5nZXMuDQo+ID4NCj4gPiArICBAcGFyYW0gUmF3 TWVtb3J5UmFuZ2VDb3VudCBDb3VudCBvZiByYXcgbWVtb3J5DQo+ID4gcmFuZ2VzLg0KPiA+DQo+ ID4gKyAgQHBhcmFtIEFkZHJlc3MgICAgICAgICAgICAgVGhlIGFkZHJlc3MgdG8gY2hlY2suDQo+ ID4NCj4gPiArKiovDQo+ID4NCj4gPiArVUlOVDY0DQo+ID4NCj4gPiArR2V0T3ZlcmxhcEJpdEZs YWcgKA0KPiA+DQo+ID4gKyAgSU4gTVRSUl9NRU1PUllfUkFOR0UgKlJhd01lbW9yeVJhbmdlcywN Cj4gPg0KPiA+ICsgIElOIFVJTlQzMiAgICAgICAgICAgIFJhd01lbW9yeVJhbmdlQ291bnQsDQo+ ID4NCj4gPiArICBJTiBVSU5UNjQgICAgICAgICAgICBBZGRyZXNzDQo+ID4NCj4gPiArICApDQo+ ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgVUlOVDY0IE92ZXJsYXBCaXRGbGFnOw0KPiA+DQo+ID4g KyAgVUlOVDMyIEluZGV4Ow0KPiA+DQo+ID4gKyAgT3ZlcmxhcEJpdEZsYWcgPSAwOw0KPiA+DQo+ ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUmF3TWVtb3J5UmFuZ2VDb3VudDsNCj4gPiBJ bmRleCsrKSB7DQo+ID4NCj4gPiArICAgIGlmIChBZGRyZXNzSW5SYW5nZSAoQWRkcmVzcywNCj4g PiBSYXdNZW1vcnlSYW5nZXNbSW5kZXhdKSkgew0KPiA+DQo+ID4gKyAgICAgIE92ZXJsYXBCaXRG bGFnIHw9ICgxdWxsIDw8IEluZGV4KTsNCj4gPg0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gKyAgfQ0K PiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgcmV0dXJuIE92ZXJsYXBCaXRGbGFnOw0KPiA+DQo+ID4g K30NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsvKioNCj4gPg0KPiA+ICsgIFJldHVybiB0aGUgcmVs YXRpb25zaGlwIGJldHdlZW4gZmxhZ3MuDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBAcGFyYW0g RmxhZzEgRmxhZyAxDQo+ID4NCj4gPiArICBAcGFyYW0gRmxhZzIgRmxhZyAyDQo+ID4NCj4gPiAr DQo+ID4NCj4gPiArICBAcmV0dmFsIDAgICBGbGFnMSA9PSBGbGFnMg0KPiA+DQo+ID4gKyAgQHJl dHZhbCAxICAgRmxhZzEgaXMgYSBzdWJzZXQgb2YgRmxhZzINCj4gPg0KPiA+ICsgIEByZXR2YWwg MiAgIEZsYWcyIGlzIGEgc3Vic2V0IG9mIEZsYWcxDQo+ID4NCj4gPiArICBAcmV0dmFsIDMgICBO byBzdWJzZXQgcmVsYXRpb25zIGJldHdlZW4gRmxhZzEgYW5kDQo+ID4gRmxhZzIuDQo+ID4NCj4g PiArKiovDQo+ID4NCj4gPiArVUlOVDMyDQo+ID4NCj4gPiArQ2hlY2tPdmVybGFwQml0RmxhZ3NS ZWxhdGlvbiAoDQo+ID4NCj4gPiArICBJTiBVSU5UNjQgRmxhZzEsDQo+ID4NCj4gPiArICBJTiBV SU5UNjQgRmxhZzINCj4gPg0KPiA+ICsgICkNCj4gPg0KPiA+ICt7DQo+ID4NCj4gPiArICAgIGlm IChGbGFnMSA9PSBGbGFnMikgcmV0dXJuIDA7DQo+ID4NCj4gPiArICAgIGlmICgoRmxhZzEgfCBG bGFnMikgPT0gRmxhZzIpIHJldHVybiAxOw0KPiA+DQo+ID4gKyAgICBpZiAoKEZsYWcxIHwgRmxh ZzIpID09IEZsYWcxKSByZXR1cm4gMjsNCj4gPg0KPiA+ICsgICAgcmV0dXJuIDM7DQo+ID4NCj4g PiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgUmV0dXJuIFRSVUUg d2hlbiB0aGUgRW5kcG9pbnQgaXMgaW4gYW55IG9mIHRoZQ0KPiA+IFJhbmdlcy4NCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBFbmRwb2ludCAgICBUaGUgZW5kcG9pbnQgdG8gY2hlY2su DQo+ID4NCj4gPiArICBAcGFyYW0gUmFuZ2VzICAgICAgVGhlIG1lbW9yeSByYW5nZXMuDQo+ID4N Cj4gPiArICBAcGFyYW0gUmFuZ2VDb3VudCAgQ291bnQgb2YgbWVtb3J5IHJhbmdlcy4NCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICsgIEByZXR2YWwgVFJVRSAgRW5kcG9pbnQgaXMgaW4gb25lIG9mIHRo ZSByYW5nZS4NCj4gPg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgRW5kcG9pbnQgaXMgbm90IGluIGFu eSBvZiB0aGUgcmFuZ2VzLg0KPiA+DQo+ID4gKyoqLw0KPiA+DQo+ID4gK0JPT0xFQU4NCj4gPg0K PiA+ICtJc0VuZHBvaW50SW5SYW5nZXMgKA0KPiA+DQo+ID4gKyAgSU4gVUlOVDY0ICAgICAgICAg ICAgRW5kcG9pbnQsDQo+ID4NCj4gPiArICBJTiBNVFJSX01FTU9SWV9SQU5HRSAqUmFuZ2VzLA0K PiA+DQo+ID4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgUmFuZ2VDb3VudA0KPiA+DQo+ID4gKyAg KQ0KPiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgICAgVUlOVDMyIEluZGV4Ow0KPiA+DQo+ID4gKyAg ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBSYW5nZUNvdW50OyBJbmRleCsrKSB7DQo+ID4NCj4g PiArICAgICAgaWYgKEFkZHJlc3NJblJhbmdlIChFbmRwb2ludCwgUmFuZ2VzW0luZGV4XSkpIHsN Cj4gPg0KPiA+ICsgICAgICAgIHJldHVybiBUUlVFOw0KPiA+DQo+ID4gKyAgICAgIH0NCj4gPg0K PiA+ICsgICAgfQ0KPiA+DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4NCj4gPiArfQ0KPiA+ DQo+ID4gKw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+DQo+ID4gKyAgQ29tcGFjdCBh ZGphY2VudCByYW5nZXMgb2YgdGhlIHNhbWUgdHlwZS4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsg IEBwYXJhbSBEZWZhdWx0VHlwZSAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBtZW1vcnkNCj4g PiB0eXBlLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFBoeXNpY2FsQWRkcmVzc0JpdHMgICAgICAgICAg ICBQaHlzaWNhbA0KPiA+IGFkZHJlc3MgYml0cy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBFZmZlY3Rp dmVNdHJyTWVtb3J5UmFuZ2VzICAgICAgTWVtb3J5IHJhbmdlcw0KPiA+IHRvIGNvbXBhY3QuDQo+ ID4NCj4gPiArICBAcGFyYW0gRWZmZWN0aXZlTXRyck1lbW9yeVJhbmdlc0NvdW50IFJldHVybiB0 aGUgbmV3DQo+ID4gY291bnQgb2YgbWVtb3J5IHJhbmdlcy4NCj4gPg0KPiA+ICsqKi8NCj4gPg0K PiA+ICtWT0lEDQo+ID4NCj4gPiArQ29tcGFjdEFuZEV4dGVuZEVmZmVjdGl2ZU10cnJNZW1vcnlS YW5nZXMgKA0KPiA+DQo+ID4gKyAgSU4gICAgIE1UUlJfTUVNT1JZX0NBQ0hFX1RZUEUgRGVmYXVs dFR5cGUsDQo+ID4NCj4gPiArICBJTiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICBQaHlzaWNh bEFkZHJlc3NCaXRzLA0KPiA+DQo+ID4gKyAgSU4gT1VUIE1UUlJfTUVNT1JZX1JBTkdFDQo+ID4g KipFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzLA0KPiA+DQo+ID4gKyAgSU4gT1VUIFVJTlRODQo+ ID4gKkVmZmVjdGl2ZU10cnJNZW1vcnlSYW5nZXNDb3VudA0KPiA+DQo+ID4gKyAgKQ0KPiA+DQo+ ID4gK3sNCj4gPg0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgIE1heEFkZHJl c3M7DQo+ID4NCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBOZXdSYW5nZXND b3VudEF0TW9zdDsNCj4gPg0KPiA+ICsgIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgICAgICAgICpO ZXdSYW5nZXM7DQo+ID4NCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBOZXdS YW5nZXNDb3VudEFjdHVhbDsNCj4gPg0KPiA+ICsgIE1UUlJfTUVNT1JZX1JBTkdFDQo+ID4gKkN1 cnJlbnRSYW5nZUluTmV3UmFuZ2VzOw0KPiA+DQo+ID4gKyAgTVRSUl9NRU1PUllfQ0FDSEVfVFlQ RQ0KPiA+IEN1cnJlbnRSYW5nZVR5cGVJbk9sZFJhbmdlczsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ ICsgIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgICAgICAgICpPbGRSYW5nZXM7DQo+ID4NCj4gPiAr ICBNVFJSX01FTU9SWV9SQU5HRSAgICAgICAgICAgICBPbGRMYXN0UmFuZ2U7DQo+ID4NCj4gPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBPbGRSYW5nZXNJbmRleDsNCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsgIE5ld1Jhbmdlc0NvdW50QWN0dWFsID0gMDsNCj4gPg0KPiA+ICsgIE5l d1Jhbmdlc0NvdW50QXRNb3N0ID0NCj4gPiAqRWZmZWN0aXZlTXRyck1lbW9yeVJhbmdlc0NvdW50 ICsgMjsgICAvLyBBdCBtb3N0IHdpdGgNCj4gPiAyIG1vcmUgcmFuZ2UgZW50cmllcy4NCj4gPg0K PiA+ICsgIE5ld1JhbmdlcyAgICAgICAgICAgID0gKE1UUlJfTUVNT1JZX1JBTkdFICopIGNhbGxv Yw0KPiA+IChOZXdSYW5nZXNDb3VudEF0TW9zdCwgc2l6ZW9mIChNVFJSX01FTU9SWV9SQU5HRSkp Ow0KPiA+DQo+ID4gKyAgT2xkUmFuZ2VzICAgICAgICAgICAgPSAqRWZmZWN0aXZlTXRyck1lbW9y eVJhbmdlczsNCj4gPg0KPiA+ICsgIGlmIChPbGRSYW5nZXNbMF0uQmFzZUFkZHJlc3MgPiAwKSB7 DQo+ID4NCj4gPiArICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbF0uQmFzZUFkZHJl c3MgPSAwOw0KPiA+DQo+ID4gKyAgICBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxdLkxl bmd0aCAgICAgID0NCj4gPiBPbGRSYW5nZXNbMF0uQmFzZUFkZHJlc3M7DQo+ID4NCj4gPiArICAg IE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbF0uVHlwZSAgICAgICAgPQ0KPiA+IERlZmF1 bHRUeXBlOw0KPiA+DQo+ID4gKyAgICBOZXdSYW5nZXNDb3VudEFjdHVhbCsrOw0KPiA+DQo+ID4g KyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgT2xkUmFuZ2VzSW5kZXggPSAwOw0KPiA+DQo+ ID4gKyAgd2hpbGUgKE9sZFJhbmdlc0luZGV4IDwNCj4gPiAqRWZmZWN0aXZlTXRyck1lbW9yeVJh bmdlc0NvdW50KSB7DQo+ID4NCj4gPiArICAgIEN1cnJlbnRSYW5nZVR5cGVJbk9sZFJhbmdlcyA9 DQo+ID4gT2xkUmFuZ2VzW09sZFJhbmdlc0luZGV4XS5UeXBlOw0KPiA+DQo+ID4gKyAgICBDdXJy ZW50UmFuZ2VJbk5ld1JhbmdlcyA9IE5VTEw7DQo+ID4NCj4gPiArICAgIGlmIChOZXdSYW5nZXND b3VudEFjdHVhbCA+IDApICAgLy8gV2UgbmVlZCB0bw0KPiA+IGNoZWNrIEN1cnJlbnROZXdSYW5n ZSBmaXJzdCBiZWZvcmUgZ2VuZXJhdGUgYSBuZXcNCj4gPiBOZXdSYW5nZS4NCj4gPg0KPiA+ICsg ICAgew0KPiA+DQo+ID4gKyAgICAgIEN1cnJlbnRSYW5nZUluTmV3UmFuZ2VzID0NCj4gPiAmTmV3 UmFuZ2VzW05ld1Jhbmdlc0NvdW50QWN0dWFsIC0gMV07DQo+ID4NCj4gPiArICAgIH0NCj4gPg0K PiA+ICsgICAgaWYgKEN1cnJlbnRSYW5nZUluTmV3UmFuZ2VzICE9IE5VTEwgJiYNCj4gPiBDdXJy ZW50UmFuZ2VJbk5ld1Jhbmdlcy0+VHlwZSA9PQ0KPiA+IEN1cnJlbnRSYW5nZVR5cGVJbk9sZFJh bmdlcykgew0KPiA+DQo+ID4gKyAgICAgIEN1cnJlbnRSYW5nZUluTmV3UmFuZ2VzLT5MZW5ndGgg Kz0NCj4gPiBPbGRSYW5nZXNbT2xkUmFuZ2VzSW5kZXhdLkxlbmd0aDsNCj4gPg0KPiA+ICsgICAg fSBlbHNlIHsNCj4gPg0KPiA+ICsgICAgICBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxd LkJhc2VBZGRyZXNzID0NCj4gPiBPbGRSYW5nZXNbT2xkUmFuZ2VzSW5kZXhdLkJhc2VBZGRyZXNz Ow0KPiA+DQo+ID4gKyAgICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbF0uTGVuZ3Ro ICAgICArPQ0KPiA+IE9sZFJhbmdlc1tPbGRSYW5nZXNJbmRleF0uTGVuZ3RoOw0KPiA+DQo+ID4g KyAgICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbF0uVHlwZSAgICAgICAgPQ0KPiA+ IEN1cnJlbnRSYW5nZVR5cGVJbk9sZFJhbmdlczsNCj4gPg0KPiA+ICsgICAgICB3aGlsZSAoT2xk UmFuZ2VzSW5kZXggKyAxIDwNCj4gPiAqRWZmZWN0aXZlTXRyck1lbW9yeVJhbmdlc0NvdW50ICYm DQo+ID4gT2xkUmFuZ2VzW09sZFJhbmdlc0luZGV4ICsgMV0uVHlwZSA9PQ0KPiA+IEN1cnJlbnRS YW5nZVR5cGVJbk9sZFJhbmdlcykNCj4gPg0KPiA+ICsgICAgICB7DQo+ID4NCj4gPiArICAgICAg ICBPbGRSYW5nZXNJbmRleCsrOw0KPiA+DQo+ID4gKyAgICAgICAgTmV3UmFuZ2VzW05ld1Jhbmdl c0NvdW50QWN0dWFsXS5MZW5ndGggKz0NCj4gPiBPbGRSYW5nZXNbT2xkUmFuZ2VzSW5kZXhdLkxl bmd0aDsNCj4gPg0KPiA+ICsgICAgICB9DQo+ID4NCj4gPiArICAgICAgTmV3UmFuZ2VzQ291bnRB Y3R1YWwrKzsNCj4gPg0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgICBPbGRS YW5nZXNJbmRleCsrOw0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgTWF4 QWRkcmVzcyA9ICgxdWxsIDw8IFBoeXNpY2FsQWRkcmVzc0JpdHMpIC0gMTsNCj4gPg0KPiA+ICsg IE9sZExhc3RSYW5nZSA9DQo+ID4gT2xkUmFuZ2VzWygqRWZmZWN0aXZlTXRyck1lbW9yeVJhbmdl c0NvdW50KSAtIDFdOw0KPiA+DQo+ID4gKyAgQ3VycmVudFJhbmdlSW5OZXdSYW5nZXMgPQ0KPiA+ ICZOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWwgLSAxXTsNCj4gPg0KPiA+ICsgIGlmIChP bGRMYXN0UmFuZ2UuQmFzZUFkZHJlc3MgKyBPbGRMYXN0UmFuZ2UuTGVuZ3RoIC0NCj4gPiAxIDwg TWF4QWRkcmVzcykgew0KPiA+DQo+ID4gKyAgICBpZiAoQ3VycmVudFJhbmdlSW5OZXdSYW5nZXMt PlR5cGUgPT0gRGVmYXVsdFR5cGUpDQo+ID4gew0KPiA+DQo+ID4gKyAgICAgIEN1cnJlbnRSYW5n ZUluTmV3UmFuZ2VzLT5MZW5ndGggPSBNYXhBZGRyZXNzIC0NCj4gPiBDdXJyZW50UmFuZ2VJbk5l d1Jhbmdlcy0+QmFzZUFkZHJlc3MgKyAxOw0KPiA+DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+DQo+ ID4gKyAgICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbF0uQmFzZUFkZHJlc3MgPQ0K PiA+IE9sZExhc3RSYW5nZS5CYXNlQWRkcmVzcyArIE9sZExhc3RSYW5nZS5MZW5ndGg7DQo+ID4N Cj4gPiArICAgICAgTmV3UmFuZ2VzW05ld1Jhbmdlc0NvdW50QWN0dWFsXS5MZW5ndGggPQ0KPiA+ IE1heEFkZHJlc3MgLQ0KPiA+IE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbF0uQmFzZUFk ZHJlc3MgKyAxOw0KPiA+DQo+ID4gKyAgICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVh bF0uVHlwZSA9DQo+ID4gRGVmYXVsdFR5cGU7DQo+ID4NCj4gPiArICAgICAgTmV3UmFuZ2VzQ291 bnRBY3R1YWwrKzsNCj4gPg0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gKyAgfQ0KPiA+DQo+ID4gKw0K PiA+DQo+ID4gKyAgZnJlZSAoKkVmZmVjdGl2ZU10cnJNZW1vcnlSYW5nZXMpOw0KPiA+DQo+ID4g KyAgKkVmZmVjdGl2ZU10cnJNZW1vcnlSYW5nZXMgPSBOZXdSYW5nZXM7DQo+ID4NCj4gPiArICAq RWZmZWN0aXZlTXRyck1lbW9yeVJhbmdlc0NvdW50ID0NCj4gPiBOZXdSYW5nZXNDb3VudEFjdHVh bDsNCj4gPg0KPiA+ICt9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArLyoqDQo+ID4NCj4gPiArICBD b2xsZWN0IGFsbCB0aGUgZW5kcG9pbnRzIGluIHRoZSByYXcgbWVtb3J5IHJhbmdlcy4NCj4gPg0K PiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBFbmRwb2ludHMgICAgICAgICAgIFJldHVybiB0aGUg Y29sbGVjdGVkDQo+ID4gZW5kcG9pbnRzLg0KPiA+DQo+ID4gKyAgQHBhcmFtIEVuZFBvaW50Q291 bnQgICAgICAgUmV0dXJuIHRoZSBjb3VudCBvZg0KPiA+IGVuZHBvaW50cy4NCj4gPg0KPiA+ICsg IEBwYXJhbSBSYXdNZW1vcnlSYW5nZXMgICAgIFJhdyBtZW1vcnkgcmFuZ2VzLg0KPiA+DQo+ID4g KyAgQHBhcmFtIFJhd01lbW9yeVJhbmdlQ291bnQgQ291bnQgb2YgcmF3IG1lbW9yeQ0KPiA+IHJh bmdlcy4NCj4gPg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtWT0lEDQo+ID4NCj4gPiArQ29sbGVjdEVu ZHBvaW50cyAoDQo+ID4NCj4gPiArICBJTiBPVVQgVUlOVDY0ICAgICAgICAqRW5kcG9pbnRzLA0K PiA+DQo+ID4gKyAgSU4gT1VUIFVJTlQzMiAgICAgICAgKkVuZFBvaW50Q291bnQsDQo+ID4NCj4g PiArICBJTiBNVFJSX01FTU9SWV9SQU5HRSAqUmF3TWVtb3J5UmFuZ2VzLA0KPiA+DQo+ID4gKyAg SU4gVUlOVDMyICAgICAgICAgICAgUmF3TWVtb3J5UmFuZ2VDb3VudA0KPiA+DQo+ID4gKyAgKQ0K PiA+DQo+ID4gK3sNCj4gPg0KPiA+ICsgIFVJTlQzMiBJbmRleDsNCj4gPg0KPiA+ICsgIFVJTlQz MiBSYXdSYW5nZUluZGV4Ow0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgQVNTRVJUICgoUmF3TWVt b3J5UmFuZ2VDb3VudCA8PCAxKSA9PQ0KPiA+ICpFbmRQb2ludENvdW50KTsNCj4gPg0KPiA+ICsN Cj4gPg0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICpFbmRQb2ludENvdW50OyBJbmRl eCArPSAyKQ0KPiA+IHsNCj4gPg0KPiA+ICsgICAgUmF3UmFuZ2VJbmRleCA9IEluZGV4ID4+IDE7 DQo+ID4NCj4gPiArICAgIEVuZHBvaW50c1tJbmRleF0gPQ0KPiA+IFJhd01lbW9yeVJhbmdlc1tS YXdSYW5nZUluZGV4XS5CYXNlQWRkcmVzczsNCj4gPg0KPiA+ICsgICAgRW5kcG9pbnRzW0luZGV4 ICsgMV0gPQ0KPiA+IFJhd01lbW9yeVJhbmdlc1tSYXdSYW5nZUluZGV4XS5CYXNlQWRkcmVzcyAr DQo+ID4gUmF3TWVtb3J5UmFuZ2VzW1Jhd1JhbmdlSW5kZXhdLkxlbmd0aCAtIDE7DQo+ID4NCj4g PiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBxc29ydCAoRW5kcG9pbnRzLCAqRW5kUG9p bnRDb3VudCwgc2l6ZW9mIChVSU5UNjQpLA0KPiA+IENvbXBhcmVGdW5jVWludDY0KTsNCj4gPg0K PiA+ICsgIFJlbW92ZUR1cGxpY2F0ZXNJblNvcnRlZEFycmF5IChFbmRwb2ludHMsDQo+ID4gRW5k UG9pbnRDb3VudCk7DQo+ID4NCj4gPiArfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKy8qKg0KPiA+ DQo+ID4gKyAgQ29udmVydCB0aGUgTVRSUiBCQVNFL01BU0sgYXJyYXkgdG8gbWVtb3J5IHJhbmdl cy4NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIEBwYXJhbSBEZWZhdWx0VHlwZSAgICAgICAgICBE ZWZhdWx0IG1lbW9yeSB0eXBlLg0KPiA+DQo+ID4gKyAgQHBhcmFtIFBoeXNpY2FsQWRkcmVzc0Jp dHMgIFBoeXNpY2FsIGFkZHJlc3MgYml0cy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBSYXdNZW1vcnlS YW5nZXMgICAgICBSYXcgbWVtb3J5IHJhbmdlcy4NCj4gPg0KPiA+ICsgIEBwYXJhbSBSYXdNZW1v cnlSYW5nZUNvdW50ICBDb3VudCBvZiByYXcgbWVtb3J5DQo+ID4gcmFuZ2VzLg0KPiA+DQo+ID4g KyAgQHBhcmFtIE1lbW9yeVJhbmdlcyAgICAgICAgIE1lbW9yeSByYW5nZXMuDQo+ID4NCj4gPiAr ICBAcGFyYW0gTWVtb3J5UmFuZ2VDb3VudCAgICAgQ291bnQgb2YgbWVtb3J5IHJhbmdlcy4NCj4g Pg0KPiA+ICsqKi8NCj4gPg0KPiA+ICtWT0lEDQo+ID4NCj4gPiArR2V0RWZmZWN0aXZlTWVtb3J5 UmFuZ2VzICgNCj4gPg0KPiA+ICsgIElOIE1UUlJfTUVNT1JZX0NBQ0hFX1RZUEUgRGVmYXVsdFR5 cGUsDQo+ID4NCj4gPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVz c0JpdHMsDQo+ID4NCj4gPiArICBJTiBNVFJSX01FTU9SWV9SQU5HRSAgICAgICpSYXdNZW1vcnlS YW5nZXMsDQo+ID4NCj4gPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgIFJhd01lbW9yeVJh bmdlQ291bnQsDQo+ID4NCj4gPiArICBPVVQgTVRSUl9NRU1PUllfUkFOR0UgICAgICpNZW1vcnlS YW5nZXMsDQo+ID4NCj4gPiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICpNZW1vcnlSYW5n ZUNvdW50DQo+ID4NCj4gPiArICApDQo+ID4NCj4gPiArew0KPiA+DQo+ID4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgIEluZGV4Ow0KPiA+DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgIEFs bEVuZFBvaW50c0NvdW50Ow0KPiA+DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICpBbGxF bmRQb2ludHNJbmNsdXNpdmU7DQo+ID4NCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgQWxs UmFuZ2VQaWVjZXNDb3VudE1heDsNCj4gPg0KPiA+ICsgIE1UUlJfTUVNT1JZX1JBTkdFICAgICAq QWxsUmFuZ2VQaWVjZXM7DQo+ID4NCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgQWxsUmFu Z2VQaWVjZXNDb3VudEFjdHVhbDsNCj4gPg0KPiA+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICBP dmVybGFwQml0RmxhZzE7DQo+ID4NCj4gPiArICBVSU5UNjQgICAgICAgICAgICAgICAgT3Zlcmxh cEJpdEZsYWcyOw0KPiA+DQo+ID4gKyAgSU5UMzIgICAgICAgICAgICAgICAgIE92ZXJsYXBGbGFn UmVsYXRpb247DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBpZiAoUmF3TWVtb3J5UmFuZ2VDb3Vu dCA9PSAwKSB7DQo+ID4NCj4gPiArICAgIE1lbW9yeVJhbmdlc1swXS5CYXNlQWRkcmVzcyA9IDA7 DQo+ID4NCj4gPiArICAgIE1lbW9yeVJhbmdlc1swXS5MZW5ndGggICAgICA9ICgxdWxsIDw8DQo+ ID4gUGh5c2ljYWxBZGRyZXNzQml0cyk7DQo+ID4NCj4gPiArICAgIE1lbW9yeVJhbmdlc1swXS5U eXBlICAgICAgICA9IERlZmF1bHRUeXBlOw0KPiA+DQo+ID4gKyAgICAqTWVtb3J5UmFuZ2VDb3Vu dCA9IDE7DQo+ID4NCj4gPiArICAgIHJldHVybjsNCj4gPg0KPiA+ICsgIH0NCj4gPg0KPiA+ICsN Cj4gPg0KPiA+ICsgIEFsbEVuZFBvaW50c0NvdW50ICAgICAgICAgPSBSYXdNZW1vcnlSYW5nZUNv dW50IDw8DQo+ID4gMTsNCj4gPg0KPiA+ICsgIEFsbEVuZFBvaW50c0luY2x1c2l2ZSAgICAgPSBj YWxsb2MNCj4gPiAoQWxsRW5kUG9pbnRzQ291bnQsIHNpemVvZiAoVUlOVDY0KSk7DQo+ID4NCj4g PiArICBBbGxSYW5nZVBpZWNlc0NvdW50TWF4ICAgID0gUmF3TWVtb3J5UmFuZ2VDb3VudCAqIDMN Cj4gPiArIDE7DQo+ID4NCj4gPiArICBBbGxSYW5nZVBpZWNlcyAgICAgICAgICAgID0gY2FsbG9j DQo+ID4gKEFsbFJhbmdlUGllY2VzQ291bnRNYXgsIHNpemVvZiAoTVRSUl9NRU1PUllfUkFOR0Up KTsNCj4gPg0KPiA+ICsgIENvbGxlY3RFbmRwb2ludHMgKEFsbEVuZFBvaW50c0luY2x1c2l2ZSwN Cj4gPiAmQWxsRW5kUG9pbnRzQ291bnQsIFJhd01lbW9yeVJhbmdlcywNCj4gPiBSYXdNZW1vcnlS YW5nZUNvdW50KTsNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgIGZvciAoSW5kZXggPSAwLCBBbGxS YW5nZVBpZWNlc0NvdW50QWN0dWFsID0gMDsgSW5kZXgNCj4gPiA8IEFsbEVuZFBvaW50c0NvdW50 IC0gMTsgSW5kZXgrKykgew0KPiA+DQo+ID4gKyAgICBPdmVybGFwQml0RmxhZzEgPSBHZXRPdmVy bGFwQml0RmxhZw0KPiA+IChSYXdNZW1vcnlSYW5nZXMsIFJhd01lbW9yeVJhbmdlQ291bnQsDQo+ ID4gQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XSk7DQo+ID4NCj4gPiArICAgIE92ZXJsYXBC aXRGbGFnMiA9IEdldE92ZXJsYXBCaXRGbGFnDQo+ID4gKFJhd01lbW9yeVJhbmdlcywgUmF3TWVt b3J5UmFuZ2VDb3VudCwNCj4gPiBBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXggKyAxXSk7DQo+ ID4NCj4gPiArICAgIE92ZXJsYXBGbGFnUmVsYXRpb24gPSBDaGVja092ZXJsYXBCaXRGbGFnc1Jl bGF0aW9uDQo+ID4gKE92ZXJsYXBCaXRGbGFnMSwgT3ZlcmxhcEJpdEZsYWcyKTsNCj4gPg0KPiA+ ICsgICAgc3dpdGNoIChPdmVybGFwRmxhZ1JlbGF0aW9uKSB7DQo+ID4NCj4gPiArICAgICAgY2Fz ZSAwOiAgIC8vIFsxLCAyXQ0KPiA+DQo+ID4gKw0KPiA+IEFsbFJhbmdlUGllY2VzW0FsbFJhbmdl UGllY2VzQ291bnRBY3R1YWxdLkJhc2VBZGRyZXNzID0NCj4gPiBBbGxFbmRQb2ludHNJbmNsdXNp dmVbSW5kZXhdOw0KPiA+DQo+ID4gKw0KPiA+IEFsbFJhbmdlUGllY2VzW0FsbFJhbmdlUGllY2Vz Q291bnRBY3R1YWxdLkxlbmd0aCAgICAgID0NCj4gPiBBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5k ZXggKyAxXSAtDQo+ID4gQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XSArIDE7DQo+ID4NCj4g PiArICAgICAgICBBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsKys7DQo+ID4NCj4gPiArICAgICAg ICBicmVhazsNCj4gPg0KPiA+ICsgICAgICBjYXNlIDE6ICAgLy8gWzEsIDIpDQo+ID4NCj4gPiAr DQo+ID4gQWxsUmFuZ2VQaWVjZXNbQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uQmFzZUFkZHJl c3MgPQ0KPiA+IEFsbEVuZFBvaW50c0luY2x1c2l2ZVtJbmRleF07DQo+ID4NCj4gPiArDQo+ID4g QWxsUmFuZ2VQaWVjZXNbQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uTGVuZ3RoICAgICAgPQ0K PiA+IChBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXggKyAxXSAtIDEpIC0NCj4gPiBBbGxFbmRQ b2ludHNJbmNsdXNpdmVbSW5kZXhdICsgMTsNCj4gPg0KPiA+ICsgICAgICAgIEFsbFJhbmdlUGll Y2VzQ291bnRBY3R1YWwrKzsNCj4gPg0KPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+DQo+ID4gKyAg ICAgIGNhc2UgMjogICAvLyAoMSwgMl0NCj4gPg0KPiA+ICsNCj4gPiBBbGxSYW5nZVBpZWNlc1tB bGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsXS5CYXNlQWRkcmVzcyA9DQo+ID4gQWxsRW5kUG9pbnRz SW5jbHVzaXZlW0luZGV4XSArIDE7DQo+ID4NCj4gPiArDQo+ID4gQWxsUmFuZ2VQaWVjZXNbQWxs UmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uTGVuZ3RoICAgICAgPQ0KPiA+IEFsbEVuZFBvaW50c0lu Y2x1c2l2ZVtJbmRleCArIDFdIC0NCj4gPiAoQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XSAr IDEpICsgMTsNCj4gPg0KPiA+ICsgICAgICAgIEFsbFJhbmdlUGllY2VzQ291bnRBY3R1YWwrKzsN Cj4gPg0KPiA+ICsNCj4gPg0KPiA+ICsgICAgICAgIGlmICghSXNFbmRwb2ludEluUmFuZ2VzDQo+ ID4gKEFsbEVuZFBvaW50c0luY2x1c2l2ZVtJbmRleF0sIEFsbFJhbmdlUGllY2VzLA0KPiA+IEFs bFJhbmdlUGllY2VzQ291bnRBY3R1YWwpKSB7DQo+ID4NCj4gPiArDQo+ID4gQWxsUmFuZ2VQaWVj ZXNbQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uQmFzZUFkZHJlc3MgPQ0KPiA+IEFsbEVuZFBv aW50c0luY2x1c2l2ZVtJbmRleF07DQo+ID4NCj4gPiArDQo+ID4gQWxsUmFuZ2VQaWVjZXNbQWxs UmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uTGVuZ3RoICAgICAgPQ0KPiA+IDE7DQo+ID4NCj4gPiAr ICAgICAgICAgIEFsbFJhbmdlUGllY2VzQ291bnRBY3R1YWwrKzsNCj4gPg0KPiA+ICsgICAgICAg IH0NCj4gPg0KPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+DQo+ID4gKyAgICAgIGNhc2UgMzogICAv LyAoMSwgMikNCj4gPg0KPiA+ICsNCj4gPiBBbGxSYW5nZVBpZWNlc1tBbGxSYW5nZVBpZWNlc0Nv dW50QWN0dWFsXS5CYXNlQWRkcmVzcyA9DQo+ID4gQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4 XSArIDE7DQo+ID4NCj4gPiArDQo+ID4gQWxsUmFuZ2VQaWVjZXNbQWxsUmFuZ2VQaWVjZXNDb3Vu dEFjdHVhbF0uTGVuZ3RoICAgICAgPQ0KPiA+IChBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXgg KyAxXSAtIDEpIC0NCj4gPiAoQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XSArIDEpICsgMTsN Cj4gPg0KPiA+ICsgICAgICAgIGlmDQo+ID4gKEFsbFJhbmdlUGllY2VzW0FsbFJhbmdlUGllY2Vz Q291bnRBY3R1YWxdLkxlbmd0aCA9PSAwKQ0KPiA+IC8vIE9ubHkgaW4gY2FzZSAzIGNhbiBleGlz dHMgTGVuZ3RoPTAsIHdlIHNob3VsZCBza2lwDQo+ID4gc3VjaCAic2VnbWVudCIuDQo+ID4NCj4g PiArICAgICAgICAgIGJyZWFrOw0KPiA+DQo+ID4gKyAgICAgICAgQWxsUmFuZ2VQaWVjZXNDb3Vu dEFjdHVhbCsrOw0KPiA+DQo+ID4gKyAgICAgICAgaWYgKCFJc0VuZHBvaW50SW5SYW5nZXMNCj4g PiAoQWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XSwgQWxsUmFuZ2VQaWVjZXMsDQo+ID4gQWxs UmFuZ2VQaWVjZXNDb3VudEFjdHVhbCkpIHsNCj4gPg0KPiA+ICsNCj4gPiBBbGxSYW5nZVBpZWNl c1tBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsXS5CYXNlQWRkcmVzcyA9DQo+ID4gQWxsRW5kUG9p bnRzSW5jbHVzaXZlW0luZGV4XTsNCj4gPg0KPiA+ICsNCj4gPiBBbGxSYW5nZVBpZWNlc1tBbGxS YW5nZVBpZWNlc0NvdW50QWN0dWFsXS5MZW5ndGggICAgICA9DQo+ID4gMTsNCj4gPg0KPiA+ICsg ICAgICAgICAgQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbCsrOw0KPiA+DQo+ID4gKyAgICAgICAg fQ0KPiA+DQo+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4NCj4gPiArICAgICAgZGVmYXVsdDoNCj4g Pg0KPiA+ICsgICAgICAgIEFTU0VSVCAoRkFMU0UpOw0KPiA+DQo+ID4gKyAgICB9DQo+ID4NCj4g PiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBB bGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsOw0KPiA+IEluZGV4KyspIHsNCj4gPg0KPiA+ICsgICAg RGV0ZXJtaW5lTWVtb3J5Q2FjaGVUeXBlIChEZWZhdWx0VHlwZSwNCj4gPiAmQWxsUmFuZ2VQaWVj ZXNbSW5kZXhdLCBSYXdNZW1vcnlSYW5nZXMsDQo+ID4gUmF3TWVtb3J5UmFuZ2VDb3VudCk7DQo+ ID4NCj4gPiArICB9DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBDb21wYWN0QW5kRXh0ZW5kRWZm ZWN0aXZlTXRyck1lbW9yeVJhbmdlcw0KPiA+IChEZWZhdWx0VHlwZSwgUGh5c2ljYWxBZGRyZXNz Qml0cywgJkFsbFJhbmdlUGllY2VzLA0KPiA+ICZBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsKTsN Cj4gPg0KPiA+ICsgIEFTU0VSVCAoKk1lbW9yeVJhbmdlQ291bnQgPj0NCj4gPiBBbGxSYW5nZVBp ZWNlc0NvdW50QWN0dWFsKTsNCj4gPg0KPiA+ICsgIG1lbWNweSAoTWVtb3J5UmFuZ2VzLCBBbGxS YW5nZVBpZWNlcywNCj4gPiBBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsICogc2l6ZW9mDQo+ID4g KE1UUlJfTUVNT1JZX1JBTkdFKSk7DQo+ID4NCj4gPiArICAqTWVtb3J5UmFuZ2VDb3VudCA9IEFs bFJhbmdlUGllY2VzQ291bnRBY3R1YWw7DQo+ID4NCj4gPiArDQo+ID4NCj4gPiArICBmcmVlIChB bGxFbmRQb2ludHNJbmNsdXNpdmUpOw0KPiA+DQo+ID4gKyAgZnJlZSAoQWxsUmFuZ2VQaWVjZXMp Ow0KPiA+DQo+ID4gK30NCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL1Rlc3QvVWVm aUNwdVBrZ0hvc3RUZXN0LmRzYw0KPiA+IGIvVWVmaUNwdVBrZy9UZXN0L1VlZmlDcHVQa2dIb3N0 VGVzdC5kc2MNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAu LjhhNWM0NTY4MzANCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvVWVmaUNwdVBrZy9UZXN0 L1VlZmlDcHVQa2dIb3N0VGVzdC5kc2MNCj4gPiBAQCAtMCwwICsxLDMxIEBADQo+ID4gKyMjIEBm aWxlDQo+ID4NCj4gPiArIyBVZWZpQ3B1UGtnIERTQyBmaWxlIHVzZWQgdG8gYnVpbGQgaG9zdC1i YXNlZCB1bml0DQo+ID4gdGVzdHMuDQo+ID4NCj4gPiArIw0KPiA+DQo+ID4gKyMgQ29weXJpZ2h0 IChjKSAyMDIwLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cw0KPiA+IHJlc2VydmVkLjxC Uj4NCj4gPg0KPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50DQo+ID4NCj4gPiArIw0KPiA+DQo+ID4gKyMjDQo+ID4NCj4gPiArDQo+ID4NCj4gPiArW0Rl ZmluZXNdDQo+ID4NCj4gPiArICBQTEFURk9STV9OQU1FICAgICAgICAgICA9IFVlZmlDcHVQa2dI b3N0VGVzdA0KPiA+DQo+ID4gKyAgUExBVEZPUk1fR1VJRCAgICAgICAgICAgPSBFMDBCOTU5OS01 Qjc0LTRGRjctQUI5Ri0NCj4gPiA4MTgzRkIxM0IyRjkNCj4gPg0KPiA+ICsgIFBMQVRGT1JNX1ZF UlNJT04gICAgICAgID0gMC4xDQo+ID4NCj4gPiArICBEU0NfU1BFQ0lGSUNBVElPTiAgICAgICA9 IDB4MDAwMTAwMDUNCj4gPg0KPiA+ICsgIE9VVFBVVF9ESVJFQ1RPUlkgICAgICAgID0gQnVpbGQv VWVmaUNwdVBrZy9Ib3N0VGVzdA0KPiA+DQo+ID4gKyAgU1VQUE9SVEVEX0FSQ0hJVEVDVFVSRVMg PSBJQTMyfFg2NA0KPiA+DQo+ID4gKyAgQlVJTERfVEFSR0VUUyAgICAgICAgICAgPSBOT09QVA0K PiA+DQo+ID4gKyAgU0tVSURfSURFTlRJRklFUiAgICAgICAgPSBERUZBVUxUDQo+ID4NCj4gPiAr DQo+ID4NCj4gPiArIWluY2x1ZGUNCj4gPiBVbml0VGVzdEZyYW1ld29ya1BrZy9Vbml0VGVzdEZy YW1ld29ya1BrZ0hvc3QuZHNjLmluYw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gK1tMaWJyYXJ5Q2xh c3Nlc10NCj4gPg0KPiA+ICsgIE10cnJMaWJ8VWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvTXRy ckxpYi5pbmYNCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICtbUGNkc1BhdGNoYWJsZUluTW9kdWxlXQ0K PiA+DQo+ID4gKw0KPiA+IGdVZWZpQ3B1UGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1TnVtYmVyT2ZS ZXNlcnZlZFZhcmlhYmwNCj4gPiBlTXRycnN8MA0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gK1tDb21w b25lbnRzXQ0KPiA+DQo+ID4gKyAgIw0KPiA+DQo+ID4gKyAgIyBCdWlsZCBIT1NUX0FQUExJQ0FU SU9OIHRoYXQgdGVzdHMgdGhlIE10cnJMaWINCj4gPg0KPiA+ICsgICMNCj4gPg0KPiA+ICsNCj4g PiBVZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3RIb3N0 DQo+ID4gLmluZg0KPiA+DQo+ID4gLS0NCj4gPiAyLjI3LjAud2luZG93cy4xDQo+IA0KDQo=