Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 921FF200CE4 for ; Mon, 31 Jul 2017 06:36:14 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 8986B1609D6; Mon, 31 Jul 2017 04:36:14 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id ABC811609C1 for ; Mon, 31 Jul 2017 06:36:12 +0200 (CEST) Received: (qmail 7152 invoked by uid 500); 31 Jul 2017 04:36:11 -0000 Mailing-List: contact dev-help@flex.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@flex.apache.org Delivered-To: mailing list dev@flex.apache.org Received: (qmail 7140 invoked by uid 99); 31 Jul 2017 04:36:11 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 31 Jul 2017 04:36:11 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 940AD18040F for ; Mon, 31 Jul 2017 04:36:10 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -1.852 X-Spam-Level: X-Spam-Status: No, score=-1.852 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, KAM_ASCII_DIVIDERS=0.8, KAM_LOTSOFHASH=0.25, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-2.8, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=disabled Authentication-Results: spamd3-us-west.apache.org (amavisd-new); dkim=pass (1024-bit key) header.d=adobe.com Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id P4blSHLu96ZZ for ; Mon, 31 Jul 2017 04:36:03 +0000 (UTC) Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0064.outbound.protection.outlook.com [104.47.32.64]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTPS id E8CA75FE2F for ; Mon, 31 Jul 2017 04:36:02 +0000 (UTC) Received: from DM5PR02MB3307.namprd02.prod.outlook.com (10.164.152.143) by DM5PR02MB3306.namprd02.prod.outlook.com (10.164.152.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1304.22; Mon, 31 Jul 2017 04:35:54 +0000 Received: from DM5PR02MB3307.namprd02.prod.outlook.com ([10.164.152.143]) by DM5PR02MB3307.namprd02.prod.outlook.com ([10.164.152.143]) with mapi id 15.01.1304.023; Mon, 31 Jul 2017 04:35:54 +0000 From: Alex Harui To: "dev@flex.apache.org" Subject: Re: [07/13] git commit: [flex-asjs] [refs/heads/release0.8.0] - give up on trying to use FlexBox for full-screen 3-pane views. FlexBox seems more happy stretching to content size instead of clipping at the computed flex-ed size. These custom layouts wi... Thread-Topic: [07/13] git commit: [flex-asjs] [refs/heads/release0.8.0] - give up on trying to use FlexBox for full-screen 3-pane views. FlexBox seems more happy stretching to content size instead of clipping at the computed flex-ed size. These custom layouts wi... Thread-Index: AQHTCRtDZdyC73/EDUuw4uVoXngfb6Js5WAA Date: Mon, 31 Jul 2017 04:35:53 +0000 Message-ID: References: <45863a7c10954519ad40c2c5c94ff3d4@git.apache.org> <0813A5A2-60B9-4BD5-ACA6-670D8EDA908E@gmail.com> In-Reply-To: <0813A5A2-60B9-4BD5-ACA6-670D8EDA908E@gmail.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/14.7.3.170325 authentication-results: spf=none (sender IP is ) smtp.mailfrom=aharui@adobe.com; x-originating-ip: [73.39.44.8] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;DM5PR02MB3306;7:ztD2iCk30gXfBNHjA75e6mTL7KPujSwQPtl9ocfh9QsxscR8bduz7+SwMKz+BRL8HUEk9zRDpBSBFwHvYUm+F6J0a4S/eSdCb1gQ2pxqojX1BLZyDu6i0zQgThUlKy/zlqgUg7i5LUf40vCiFAABcEJUYnX01MoJwwHvNkotuVJmrn+FK7TQ/fwenBScf67HqgBatcrk1HLsfHiW3kQtNUpXRs2lpi87bcJ8Drv1zTRE00P8zaIqMu3cLab0QnU+qlMKF1Y0PYUYlGsMMHibvw3WlKDNJGtMGAErlNA4Iw2MtHKQBj42KErXSnFAs/vKs8kPEI6KUFhxDy8SbuRFrnQn3H9V3p1qCqFhNyDsqZ3ttvFmuelZFFKjDSaPAgMWwl8gyHS6T/APD1K5bpgxQSJiamgM5l4FKTpQZY+ZqNrWgZqzrz4QS6tSO1VWhJzwBcwrfkbB8sIEn6VqBGNYqKSTQTOPlsmLmXdP2PHMGk9EvkJq/YbTmUfC2RSV4lHLq5k5pgkrw7w2tmOlNsC5RPdhoMRuzrAauKi051x7Ag573Wher8XwhVJnZ3oj1RUNtkmgvBK6tsBJeVKJg0pLiwWtOUl68SINrwLRj5XpzKvb+Js69DZs+qcAJgnoJkXyhwjgXcOmv0T7wmX9sKui3vLMt5b8XLXY6iu5Hg6PAKqUqUkZKR1mfm7P72Rujx6WZCH3QHe0qjz/fEOUOGj9FSHvMqWk3D1qi6dxIV0PVtXgugyNjaqztjPcZeVFaybfODgICA6A27m/vDgUNm+SFUtyLuwEMoMCZJasfOJaZZ4= x-ms-office365-filtering-correlation-id: 9901a1d1-75cd-4278-a8ed-08d4d7cda152 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(2017052603031)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:DM5PR02MB3306; x-ms-traffictypediagnostic: DM5PR02MB3306: x-exchange-antispam-report-test: UriScan:(189930954265078)(219752817060721)(5213294742642); x-microsoft-antispam-prvs: x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(61425038)(6040450)(601004)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(3002001)(6055026)(61426038)(61427038)(6041248)(20161123560025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123555025)(20161123558100)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DM5PR02MB3306;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DM5PR02MB3306; x-forefront-prvs: 03853D523D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(39400400002)(39840400002)(39860400002)(39850400002)(39410400002)(39450400003)(377454003)(199003)(189002)(24454002)(81156014)(6436002)(81166006)(1730700003)(38730400002)(305945005)(36756003)(2351001)(5660300001)(83506001)(97736004)(2950100002)(6916009)(2900100001)(77096006)(66066001)(50986999)(6486002)(6506006)(6246003)(4001350100001)(106356001)(189998001)(105586002)(229853002)(53546010)(76176999)(53946003)(110136004)(6306002)(14454004)(6512007)(53936002)(68736007)(45080400002)(2501003)(478600001)(101416001)(25786009)(54356999)(16200700003)(8676002)(8936002)(86362001)(575784001)(3660700001)(3846002)(6116002)(102836003)(10090500001)(7736002)(3280700002)(99286003)(5640700003)(2906002)(219693003)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR02MB3306;H:DM5PR02MB3307.namprd02.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; received-spf: None (protection.outlook.com: adobe.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: adobe.com X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Jul 2017 04:35:53.8555 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: fa7b1b5a-7b34-4387-94ae-d2c178decee1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR02MB3306 archived-at: Mon, 31 Jul 2017 04:36:14 -0000 SXQgd2lsbCBlaXRoZXIgd29yayBpbiB0aGUgZXhhbXBsZXMgdGhhdCB1c2UgaXQgb3IgaXQgd29u J3QuICBUcnkgaXQgYW5kDQpmaW5kIG91dC4NCg0KLUFsZXgNCg0KT24gNy8zMC8xNywgMzowNCBB TSwgIkhhcmJzIiA8aGFyYnMubGlzdHNAZ21haWwuY29tPiB3cm90ZToNCg0KPkkgdGhpbmsgSSBq dXN0IHJhbiBpbnRvIHRoZSBzYW1lIGlzc3VlLg0KPg0KPlRoaXMgbGF5b3V0IHNlZW1zIHRvIG1v cmUtb3ItbGVzcyBkbyB0aGUgam9iLCBidXQgaXTigJlzIGtpbmQgb2YgaGVhdnkuDQo+DQo+SSBk aWQgc29tZSByZXNlYXJjaCBpbnRvIGZsZXhib3ggYW5kIGl0IGFwcGVhciB0aGF0IHNldHRpbmcg ZmxleC1iYXNpcyB0bw0KPjAgZG9lcyB0aGUgam9iLiBJdCBuZWVkcyB0byBiZSBzZXQgb24gT05M WSB0aGUgb25lIGZsZXhpYmxlIGNoaWxkLg0KPg0KPkhlcmXigJlzIGEgY29kZXBlbiB3aGljaCBz aG93cyBhIHVzZSBjYXNlLg0KPmh0dHBzOi8vbmEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRs b29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJGY29kZXBlbi5pDQo+byUyRmpwZGV2cmllcyUyRnBl biUyRm9YeFBPUCZkYXRhPTAyJTdDMDElN0MlN0M2OTliYmIxNzBiMmM0ZjBiZjNhZTA4ZDRkNzMN Cj4yNjM4YSU3Q2ZhN2IxYjVhN2IzNDQzODc5NGFlZDJjMTc4ZGVjZWUxJTdDMCU3QzAlN0M2MzYz NzAwNTg4MTg3NjY1MTEmc2RhdA0KPmE9dFNUTllBTkZGaVE0RE1HWWJBWmF6MGRKOXFZRFlwY3dQ MlpvU1lSSWNHOCUzRCZyZXNlcnZlZD0wDQo+PGh0dHBzOi8vbmEwMS5zYWZlbGlua3MucHJvdGVj dGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJGY29kZXBlbi4NCj5pbyUyRmpwZGV2 cmllcyUyRnBlbiUyRm9YeFBPUCZkYXRhPTAyJTdDMDElN0MlN0M2OTliYmIxNzBiMmM0ZjBiZjNh ZTA4ZDRkNw0KPjMyNjM4YSU3Q2ZhN2IxYjVhN2IzNDQzODc5NGFlZDJjMTc4ZGVjZWUxJTdDMCU3 QzAlN0M2MzYzNzAwNTg4MTg3NjY1MTEmc2RhDQo+dGE9dFNUTllBTkZGaVE0RE1HWWJBWmF6MGRK OXFZRFlwY3dQMlpvU1lSSWNHOCUzRCZyZXNlcnZlZD0wPg0KPg0KPkkgbm90aWNlZCB0aGF0IHRo ZSBPbmVGbGV4aWJsZUxheW91dHMgaGF2ZSBjb2RlIHdoaWNoIHNldCB0aGUgZmxleC1iYXNpcw0K Pm9mIHRoZSBjaGlsZHJlbiBpZiBhIHBlcmNlbnRhZ2UgdmFsdWUgaXMgc2V0LiBXaGVuIHNldHRp bmcgdGhlIHNpemUgb2YNCj50aGUgb25lIGZsZXhpYmxlIGNoaWxkIHRvIDAlIHRoaXMgY2F1c2Vz IHRoZSBmbGV4LWJhc2lzIHRvIGJlIHNldCB0byAwDQo+YW5kIHRoZW4gdGhlIG9uZSBmbGV4aWJs ZSBjaGlsZCB3aWxsIGZpdCB0aGUgcmVtYWluaW5nIHNwYWNlIGV2ZW4gaWYgaXQNCj5taWdodCBv dmVyZmxvdyBiZWNhdXNlIG9mIGl0cyBjaGlsZHJlbi4NCj4NCj5JIGhhdmUgd2FzdGVkIHF1aXRl IGEgYml0IG9mIHRpbWUgYmVmb3JlIEkgZGlzY292ZXJlZCB0aGlzLiBJ4oCZbSBub3Qgc3VyZQ0K PndoZXRoZXIgdGhlIE9uZUZsZXhpYmxlTGF5b3V0IGNsYXNzZXMgc2hvdWxkIGJlIGNoYW5nZWQs IG9yIG1heWJlIHdlIG5lZWQNCj5kb2N1bWVudGF0aW9uIHRoYXQgdG8gZml0IGNvbnRlbnQgdGhh dCBtaWdodCBvdmVyZmxvdywgdGhlIHBlcmNlbnRhZ2UNCj5zaG91bGQgYmUgc2V0IHRvIDAuIEl0 IGNvdWxkIGJlIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgZW50aXJlDQo+T25GbGV4aWJsZUxh eW91dCBzaG91bGQgYmUgZml0IHdoZW4gc21hbGxlciBhbmQgZXhwYW5kIChhbmQgbm90IHNjcm9s bCkNCj53aGVuIGJpZ2dlci4gSW4gdGhhdCBjYXNlLCB0aGUgY3VycmVudCBiZWhhdmlvciBtaWdo dCBiZSBjb3JyZWN0Lg0KPg0KPlRob3VnaHRzPw0KPkhhcmJzDQo+DQo+PiBPbiBNYXkgMjMsIDIw MTcsIGF0IDEwOjE2IEFNLCBhaGFydWlAYXBhY2hlLm9yZyB3cm90ZToNCj4+IA0KPj4gZ2l2ZSB1 cCBvbiB0cnlpbmcgdG8gdXNlIEZsZXhCb3ggZm9yIGZ1bGwtc2NyZWVuIDMtcGFuZSB2aWV3cy4g IEZsZXhCb3gNCj4+c2VlbXMgbW9yZSBoYXBweSBzdHJldGNoaW5nIHRvIGNvbnRlbnQgc2l6ZSBp bnN0ZWFkIG9mIGNsaXBwaW5nIGF0IHRoZQ0KPj5jb21wdXRlZCBmbGV4LWVkIHNpemUuICBUaGVz ZSBjdXN0b20gbGF5b3V0cyB3aWxsIGRvIHRoZSBwcm9wZXIgc2l6aW5nDQo+PiANCj4+IA0KPj4g UHJvamVjdDogDQo+Pmh0dHBzOi8vbmEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNv bS8/dXJsPWh0dHAlM0ElMkYlMkZnaXQtd2lwLXUNCj4+cy5hcGFjaGUub3JnJTJGcmVwb3MlMkZh c2YlMkZmbGV4LWFzanMlMkZyZXBvJmRhdGE9MDIlN0MwMSU3QyU3QzY5OWJiYjE3MA0KPj5iMmM0 ZjBiZjNhZTA4ZDRkNzMyNjM4YSU3Q2ZhN2IxYjVhN2IzNDQzODc5NGFlZDJjMTc4ZGVjZWUxJTdD MCU3QzAlN0M2MzYzDQo+PjcwMDU4ODE4NzY2NTExJnNkYXRhPVAlMkZNa2ZaQXdDWXdwUUVvQ2U1 VUd4OHRXMG1aYUlac01kRGc2VnhsYUtXQSUzRCZyZXMNCj4+ZXJ2ZWQ9MA0KPj4gQ29tbWl0OiAN Cj4+aHR0cHM6Ly9uYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0 cCUzQSUyRiUyRmdpdC13aXAtdQ0KPj5zLmFwYWNoZS5vcmclMkZyZXBvcyUyRmFzZiUyRmZsZXgt YXNqcyUyRmNvbW1pdCUyRmJkZDM0ZDJlJmRhdGE9MDIlN0MwMSU3DQo+PkMlN0M2OTliYmIxNzBi MmM0ZjBiZjNhZTA4ZDRkNzMyNjM4YSU3Q2ZhN2IxYjVhN2IzNDQzODc5NGFlZDJjMTc4ZGVjZWUx JTcNCj4+QzAlN0MwJTdDNjM2MzcwMDU4ODE4NzY2NTExJnNkYXRhPVFvc0JBYXU4bEU0bkNTN2Ml MkY4QjZHRGMlMkJxYSUyQnBTa29QNQ0KPj41eDNvamk1Rm5JJTNEJnJlc2VydmVkPTANCj4+IFRy ZWU6IA0KPj5odHRwczovL25hMDEuc2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3Vy bD1odHRwJTNBJTJGJTJGZ2l0LXdpcC11DQo+PnMuYXBhY2hlLm9yZyUyRnJlcG9zJTJGYXNmJTJG ZmxleC1hc2pzJTJGdHJlZSUyRmJkZDM0ZDJlJmRhdGE9MDIlN0MwMSU3QyUNCj4+N0M2OTliYmIx NzBiMmM0ZjBiZjNhZTA4ZDRkNzMyNjM4YSU3Q2ZhN2IxYjVhN2IzNDQzODc5NGFlZDJjMTc4ZGVj ZWUxJTdDMA0KPj4lN0MwJTdDNjM2MzcwMDU4ODE4NzY2NTExJnNkYXRhPVQ0Q0Nxd3RuJTJGZ0ZU bUFuYUklMkJ1Q1hxdFgwUDc1ZWJwS1ZaT3hmDQo+PlhPVGJJRSUzRCZyZXNlcnZlZD0wDQo+PiBE aWZmOiANCj4+aHR0cHM6Ly9uYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91 cmw9aHR0cCUzQSUyRiUyRmdpdC13aXAtdQ0KPj5zLmFwYWNoZS5vcmclMkZyZXBvcyUyRmFzZiUy RmZsZXgtYXNqcyUyRmRpZmYlMkZiZGQzNGQyZSZkYXRhPTAyJTdDMDElN0MlDQo+PjdDNjk5YmJi MTcwYjJjNGYwYmYzYWUwOGQ0ZDczMjYzOGElN0NmYTdiMWI1YTdiMzQ0Mzg3OTRhZWQyYzE3OGRl Y2VlMSU3QzANCj4+JTdDMCU3QzYzNjM3MDA1ODgxODc2NjUxMSZzZGF0YT1mOFdWSlhjODFLckxN dVVnUmNrVUxZQ2ZnbE5MN2QlMkJmZGpTYkJCVQ0KPj4wZlJvJTNEJnJlc2VydmVkPTANCj4+IA0K Pj4gQnJhbmNoOiByZWZzL2hlYWRzL3JlbGVhc2UwLjguMA0KPj4gQ29tbWl0OiBiZGQzNGQyZWY0 ZDgxMTdmYTFiMjIyYWM0NzA0ODJhNDJkYmVhOWViDQo+PiBQYXJlbnRzOiBjNTA1ZDY3DQo+PiBB dXRob3I6IEFsZXggSGFydWkgPGFoYXJ1aUBhcGFjaGUub3JnPg0KPj4gQXV0aG9yZWQ6IE1vbiBN YXkgMjIgMTA6MTI6MDIgMjAxNyAtMDcwMA0KPj4gQ29tbWl0dGVyOiBBbGV4IEhhcnVpIDxhaGFy dWlAYXBhY2hlLm9yZz4NCj4+IENvbW1pdHRlZDogVHVlIE1heSAyMyAwMDoxNTo1NiAyMDE3IC0w NzAwDQo+PiANCj4+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+IC4uLmVGbGV4aWJsZUNoaWxkSG9yaXpvbnRh bExheW91dEZvck92ZXJmbG93LmFzIHwgMjkwICsrKysrKysrKysrKysrKysrKw0KPj4gLi4ueGli bGVDaGlsZEhvcml6b250YWxMYXlvdXRMb2NrQ2hpbGRIZWlnaHQuYXMgfCAgOTEgLS0tLS0tDQo+ PiAuLi5PbmVGbGV4aWJsZUNoaWxkVmVydGljYWxMYXlvdXRGb3JPdmVyZmxvdy5hcyB8IDI5MQ0K Pj4rKysrKysrKysrKysrKysrKysrDQo+PiAuLi5GbGV4aWJsZUNoaWxkVmVydGljYWxMYXlvdXRM b2NrQ2hpbGRXaWR0aC5hcyB8ICA5MyAtLS0tLS0NCj4+IC4uLi9CYXNpYy9zcmMvbWFpbi9yZXNv dXJjZXMvYmFzaWMtbWFuaWZlc3QueG1sIHwgICA0ICstDQo+PiA1IGZpbGVzIGNoYW5nZWQsIDU4 MyBpbnNlcnRpb25zKCspLCAxODYgZGVsZXRpb25zKC0pDQo+PiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+PiAN Cj4+IA0KPj4gDQo+Pmh0dHBzOi8vbmEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNv bS8/dXJsPWh0dHAlM0ElMkYlMkZnaXQtd2lwLXUNCj4+cy5hcGFjaGUub3JnJTJGcmVwb3MlMkZh c2YlMkZmbGV4LWFzanMlMkZibG9iJTJGYmRkMzRkMmUlMkZmcmFtZXdvcmtzJTJGcA0KPj5yb2pl Y3RzJTJGQmFzaWMlMkZzcmMlMkZtYWluJTJGZmxleCUyRm9yZyUyRmFwYWNoZSUyRmZsZXglMkZo dG1sJTJGYmVhZHMlDQo+PjJGbGF5b3V0cyUyRk9uZUZsZXhpYmxlQ2hpbGRIb3Jpem9udGFsTGF5 b3V0Rm9yT3ZlcmZsb3cuYXMmZGF0YT0wMiU3QzAxJTcNCj4+QyU3QzY5OWJiYjE3MGIyYzRmMGJm M2FlMDhkNGQ3MzI2MzhhJTdDZmE3YjFiNWE3YjM0NDM4Nzk0YWVkMmMxNzhkZWNlZTElNw0KPj5D MCU3QzAlN0M2MzYzNzAwNTg4MTg3NjY1MTEmc2RhdGE9TDdCakclMkJNN25Ud2d1WCUyQk5hRTVP cDZCSVQ3WFpyRXFLRm9wDQo+PjBEJTJGcmMwQXclM0QmcmVzZXJ2ZWQ9MA0KPj4gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KPj4gZGlmZiAtLWdpdCANCj4+YS9mcmFtZXdvcmtzL3Byb2plY3RzL0Jhc2ljL3NyYy9t YWluL2ZsZXgvb3JnL2FwYWNoZS9mbGV4L2h0bWwvYmVhZHMvbGF5bw0KPj51dHMvT25lRmxleGli bGVDaGlsZEhvcml6b250YWxMYXlvdXRGb3JPdmVyZmxvdy5hcw0KPj5iL2ZyYW1ld29ya3MvcHJv amVjdHMvQmFzaWMvc3JjL21haW4vZmxleC9vcmcvYXBhY2hlL2ZsZXgvaHRtbC9iZWFkcy9sYXlv DQo+PnV0cy9PbmVGbGV4aWJsZUNoaWxkSG9yaXpvbnRhbExheW91dEZvck92ZXJmbG93LmFzDQo+ PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMC4uYzZhYmMyMg0KPj4gLS0t IC9kZXYvbnVsbA0KPj4gKysrIA0KPj5iL2ZyYW1ld29ya3MvcHJvamVjdHMvQmFzaWMvc3JjL21h aW4vZmxleC9vcmcvYXBhY2hlL2ZsZXgvaHRtbC9iZWFkcy9sYXlvDQo+PnV0cy9PbmVGbGV4aWJs ZUNoaWxkSG9yaXpvbnRhbExheW91dEZvck92ZXJmbG93LmFzDQo+PiBAQCAtMCwwICsxLDI5MCBA QA0KPj4gDQo+PisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCj4+Ly8vLy8vLy8NCj4+ICsvLw0KPj4gKy8vICBM aWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25l IG9yIG1vcmUNCj4+ICsvLyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRo ZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZA0KPj53aXRoDQo+PiArLy8gIHRoaXMgd29yayBmb3Ig YWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCj4+ ICsvLyAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUg TGljZW5zZSwNCj4+VmVyc2lvbiAyLjANCj4+ICsvLyAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5 IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQo+PndpdGgNCj4+ICsvLyAg dGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCj4+ ICsvLw0KPj4gKy8vICAgICAgDQo+Pmh0dHBzOi8vbmEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5v dXRsb29rLmNvbS8/dXJsPWh0dHAlM0ElMkYlMkZ3d3cuYXBhY2gNCj4+ZS5vcmclMkZsaWNlbnNl cyUyRkxJQ0VOU0UtMi4wJmRhdGE9MDIlN0MwMSU3QyU3QzY5OWJiYjE3MGIyYzRmMGJmM2FlMDhk NA0KPj5kNzMyNjM4YSU3Q2ZhN2IxYjVhN2IzNDQzODc5NGFlZDJjMTc4ZGVjZWUxJTdDMCU3QzAl N0M2MzYzNzAwNTg4MTg3NjY1MTEmDQo+PnNkYXRhPWJCdXRyNXhYYWN6aGw3NDFpWnZqWHViMGwx QjcyZCUyRnZJbWFqcUQ3bXZ5QSUzRCZyZXNlcnZlZD0wDQo+PiArLy8NCj4+ICsvLyAgVW5sZXNz IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0 d2FyZQ0KPj4gKy8vICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KPj4gKy8vICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O RElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3INCj4+aW1wbGllZC4NCj4+ICsv LyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl cm1pc3Npb25zIGFuZA0KPj4gKy8vICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCj4+ ICsvLw0KPj4gDQo+PisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCj4+Ly8vLy8vLy8NCj4+ICtwYWNrYWdlIG9y Zy5hcGFjaGUuZmxleC5odG1sLmJlYWRzLmxheW91dHMNCj4+ICt7DQo+PiArCWltcG9ydCBvcmcu YXBhY2hlLmZsZXguY29yZS5MYXlvdXRCYXNlOw0KPj4gKwlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4 LmNvcmUuSURvY3VtZW50Ow0KPj4gKwlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4LmNvcmUuSUxheW91 dENoaWxkOw0KPj4gKwlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4LmNvcmUuSUxheW91dEhvc3Q7DQo+ PiArCWltcG9ydCBvcmcuYXBhY2hlLmZsZXguY29yZS5JTGF5b3V0VmlldzsNCj4+ICsJaW1wb3J0 IG9yZy5hcGFjaGUuZmxleC5jb3JlLklMYXlvdXRQYXJlbnQ7DQo+PiArCWltcG9ydCBvcmcuYXBh Y2hlLmZsZXguY29yZS5JUGFyZW50SVVJQmFzZTsNCj4+ICsJaW1wb3J0IG9yZy5hcGFjaGUuZmxl eC5jb3JlLklTdHJhbmQ7DQo+PiArCWltcG9ydCBvcmcuYXBhY2hlLmZsZXguY29yZS5JVUlCYXNl Ow0KPj4gKwlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4LmNvcmUuVmFsdWVzTWFuYWdlcjsNCj4+ICsJ aW1wb3J0IG9yZy5hcGFjaGUuZmxleC5jb3JlLlVJQmFzZTsNCj4+ICsJaW1wb3J0IG9yZy5hcGFj aGUuZmxleC5ldmVudHMuRXZlbnQ7DQo+PiArCWltcG9ydCBvcmcuYXBhY2hlLmZsZXguZ2VvbS5S ZWN0YW5nbGU7DQo+PiArCWltcG9ydCBvcmcuYXBhY2hlLmZsZXgudXRpbHMuQ1NTQ29udGFpbmVy VXRpbHM7DQo+PiArCWltcG9ydCBvcmcuYXBhY2hlLmZsZXgudXRpbHMuQ1NTVXRpbHM7DQo+PiAr DQo+PiArICAgIC8qKg0KPj4gKyAgICAgKiAgVGhlIE9uZUZsZXhpYmxlQ2hpbGRIb3Jpem9udGFs TGF5b3V0Rm9yT3ZlcmZsb3dpcw0KPj4gKwkgKiAgaW50ZW5kZWQgZm9yIGJ1aWxkaW5nIGFwcHMg dGhhdCBjbGlwDQo+PiArCSAqICBhbmQvb3Igc2Nyb2xsIHRoZSBvdmVyZmxvdywgZXNwZWNpYWxs eSBpbiBhDQo+PiArCSAqICAzLXBhbmUgdmlldyBsaWtlIHRoZSBBU0RvYyBleGFtcGxlcy4gIEl0 IGRvZXMgbm90IHVzZQ0KPj4gKwkgKiAgRmxleEJveCBiZWNhdXNlIEZsZXhCb3ggd2FudHMgdG8g Z3JvdyB0byB0aGUgc2l6ZQ0KPj4gKwkgKiAgb2YgdGhlIGNvbnRlbnQgd2l0aG91dCBzcGVjaWZ5 aW5nIHdpZHRoL2hlaWdodCBvbg0KPj4gKwkgKiAgdGhlIGZsZXhpYmxlIGNoaWxkLiAgQnV0IHRo ZW4gdGhlIGNoaWxkcmVuIGluDQo+PiArCSAqICB0aGUgZmxleGlibGUgY2hpbGQgY2Fubm90IHVz ZSAlIHNpemluZy4NCj4+ICsJICogIFRoaXMgbGF5b3V0IHByZXN1bWVzIHRoZSBwYXJlbnQgaXMg YSBrbm93biBzaXplLg0KPj4gKwkgKg0KPj4gKyAgICAgKiAgQGxhbmd2ZXJzaW9uIDMuMA0KPj4g KyAgICAgKiAgQHBsYXllcnZlcnNpb24gRmxhc2ggMTAuMg0KPj4gKyAgICAgKiAgQHBsYXllcnZl cnNpb24gQUlSIDIuNg0KPj4gKyAgICAgKiAgQHByb2R1Y3R2ZXJzaW9uIEZsZXhKUyAwLjANCj4+ ICsgICAgICovDQo+PiArCXB1YmxpYyBjbGFzcyBPbmVGbGV4aWJsZUNoaWxkSG9yaXpvbnRhbExh eW91dEZvck92ZXJmbG93IGV4dGVuZHMNCj4+TGF5b3V0QmFzZSBpbXBsZW1lbnRzIElPbmVGbGV4 aWJsZUNoaWxkTGF5b3V0LCBJRG9jdW1lbnQNCj4+ICsJew0KPj4gKyAgICAgICAgLyoqDQo+PiAr ICAgICAgICAgKiAgQ29uc3RydWN0b3IuDQo+PiArICAgICAgICAgKg0KPj4gKyAgICAgICAgICog IEBsYW5ndmVyc2lvbiAzLjANCj4+ICsgICAgICAgICAqICBAcGxheWVydmVyc2lvbiBGbGFzaCAx MC4yDQo+PiArICAgICAgICAgKiAgQHBsYXllcnZlcnNpb24gQUlSIDIuNg0KPj4gKyAgICAgICAg ICogIEBwcm9kdWN0dmVyc2lvbiBGbGV4SlMgMC4wDQo+PiArICAgICAgICAgKi8NCj4+ICsJCXB1 YmxpYyBmdW5jdGlvbiBPbmVGbGV4aWJsZUNoaWxkSG9yaXpvbnRhbExheW91dEZvck92ZXJmbG93 KCkNCj4+ICsJCXsNCj4+ICsJCQlzdXBlcigpOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKyAgICAgICAg cHJpdmF0ZSB2YXIgX2ZsZXhpYmxlQ2hpbGQ6U3RyaW5nOw0KPj4gKw0KPj4gKyAgICAgICAgcHJv dGVjdGVkIHZhciBhY3R1YWxDaGlsZDpJTGF5b3V0Q2hpbGQ7DQo+PiArDQo+PiArICAgICAgICAv KioNCj4+ICsgICAgICAgICAqICBAcHJpdmF0ZQ0KPj4gKyAgICAgICAgICogIFRoZSBkb2N1bWVu dC4NCj4+ICsgICAgICAgICAqLw0KPj4gKyAgICAgICAgcHJpdmF0ZSB2YXIgZG9jdW1lbnQ6T2Jq ZWN0Ow0KPj4gKw0KPj4gKwkJLyoqDQo+PiArCQkgKiAgVGhlIGlkIG9mIHRoZSBmbGV4aWJsZSBj aGlsZA0KPj4gKwkJICoNCj4+ICsJCSAqICBAbGFuZ3ZlcnNpb24gMy4wDQo+PiArCQkgKiAgQHBs YXllcnZlcnNpb24gRmxhc2ggMTAuMg0KPj4gKwkJICogIEBwbGF5ZXJ2ZXJzaW9uIEFJUiAyLjYN Cj4+ICsJCSAqICBAcHJvZHVjdHZlcnNpb24gRmxleEpTIDAuMA0KPj4gKwkJICovDQo+PiArCQlw dWJsaWMgZnVuY3Rpb24gZ2V0IGZsZXhpYmxlQ2hpbGQoKTpTdHJpbmcNCj4+ICsJCXsNCj4+ICsJ CQlyZXR1cm4gX2ZsZXhpYmxlQ2hpbGQ7DQo+PiArCQl9DQo+PiArDQo+PiArCQkvKioNCj4+ICsJ CSAqIEBwcml2YXRlDQo+PiArCQkgKi8NCj4+ICsJCXB1YmxpYyBmdW5jdGlvbiBzZXQgZmxleGli bGVDaGlsZCh2YWx1ZTpTdHJpbmcpOnZvaWQNCj4+ICsJCXsNCj4+ICsJCQlfZmxleGlibGVDaGls ZCA9IHZhbHVlOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKyAgICAgICAgLyoqDQo+PiArICAgICAgICAg KiBAY29weSBvcmcuYXBhY2hlLmZsZXguY29yZS5JQmVhZExheW91dCNsYXlvdXQNCj4+ICsgICAg ICAgICAqLw0KPj4gKwkJQ09NUElMRTo6SlMNCj4+ICsJCW92ZXJyaWRlIHB1YmxpYyBmdW5jdGlv biBsYXlvdXQoKTpCb29sZWFuDQo+PiArCQl7DQo+PiArCQkJdmFyIGNvbnRlbnRWaWV3OklMYXlv dXRWaWV3ID0gbGF5b3V0VmlldzsNCj4+ICsNCj4+ICsJCQlhY3R1YWxDaGlsZCA9IGRvY3VtZW50 W2ZsZXhpYmxlQ2hpbGRdOw0KPj4gKw0KPj4gKwkJCXZhciBuOmludCA9IGNvbnRlbnRWaWV3Lm51 bUVsZW1lbnRzOw0KPj4gKwkJCWlmIChuID09IDApIHJldHVybiBmYWxzZTsNCj4+ICsNCj4+ICsJ CQlmb3IodmFyIGk6aW50PTA7IGkgPCBuOyBpKyspIHsNCj4+ICsJCQkJdmFyIGNoaWxkOlVJQmFz ZSA9IGNvbnRlbnRWaWV3LmdldEVsZW1lbnRBdChpKSBhcyBVSUJhc2U7DQo+PiArCQkJCWlmIChj aGlsZC5lbGVtZW50LnN0eWxlWyJkaXNwbGF5Il0gIT0gImlubGluZS1mbGV4IiAmJg0KPj5jaGls ZC5lbGVtZW50LnN0eWxlWyJkaXNwbGF5Il0gIT0gIm5vbmUiKQ0KPj4gKwkJCQkJY2hpbGQuZWxl bWVudC5zdHlsZVsiZGlzcGxheSJdID0gImlubGluZS1ibG9jayI7DQo+PiArCQkJfQ0KPj4gKw0K Pj4gKwkJCXZhciB3Ok51bWJlciA9IGhvc3Qud2lkdGg7DQo+PiArCQkJZm9yKGk9MDsgaSA8IG47 IGkrKykgew0KPj4gKwkJCQljaGlsZCA9IGNvbnRlbnRWaWV3LmdldEVsZW1lbnRBdChpKSBhcyBV SUJhc2U7DQo+PiArCQkJCWlmIChjaGlsZCAhPSBhY3R1YWxDaGlsZCkNCj4+ICsJCQkJCXcgLT0g Y2hpbGQud2lkdGg7DQo+PiArCQkJfQ0KPj4gKwkJCWFjdHVhbENoaWxkLndpZHRoID0gdzsNCj4+ ICsJCQkJCQ0KPj4gKwkJCXJldHVybiB0cnVlOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKwkJQ09NUElM RTo6U1dGDQo+PiArCQlvdmVycmlkZSBwdWJsaWMgZnVuY3Rpb24gbGF5b3V0KCk6Qm9vbGVhbg0K Pj4gKwkJew0KPj4gKwkJCXZhciBjb250ZW50VmlldzpJTGF5b3V0VmlldyA9IGxheW91dFZpZXc7 DQo+PiArCQkJYWN0dWFsQ2hpbGQgPSBkb2N1bWVudC5oYXNPd25Qcm9wZXJ0eShmbGV4aWJsZUNo aWxkKSA/DQo+PmRvY3VtZW50W2ZsZXhpYmxlQ2hpbGRdIDogbnVsbDsNCj4+ICsNCj4+ICsJCQl2 YXIgbjpOdW1iZXIgPSBjb250ZW50Vmlldy5udW1FbGVtZW50czsNCj4+ICsJCQlpZiAobiA9PSAw KSByZXR1cm4gZmFsc2U7DQo+PiArCQkJDQo+PiArCQkJdmFyIG1heFdpZHRoOk51bWJlciA9IDA7 DQo+PiArCQkJdmFyIG1heEhlaWdodDpOdW1iZXIgPSAwOw0KPj4gKwkJCXZhciBob3N0U2l6ZWRU b0NvbnRlbnQ6Qm9vbGVhbiA9IGhvc3QuaXNIZWlnaHRTaXplZFRvQ29udGVudCgpOw0KPj4gKwkJ CXZhciBob3N0V2lkdGg6TnVtYmVyID0gaG9zdC53aWR0aDsNCj4+ICsJCQl2YXIgaG9zdEhlaWdo dDpOdW1iZXIgPSBob3N0LmhlaWdodDsNCj4+ICsNCj4+ICsJCQl2YXIgaWxjOklMYXlvdXRDaGls ZDsNCj4+ICsJCQl2YXIgZGF0YTpPYmplY3Q7DQo+PiArCQkJdmFyIGNhbkFkanVzdDpCb29sZWFu ID0gZmFsc2U7DQo+PiArCQkJdmFyIG1hcmdpbnM6T2JqZWN0Ow0KPj4gKw0KPj4gKwkJCXZhciBw YWRkaW5nTWV0cmljczpSZWN0YW5nbGUgPQ0KPj5DU1NDb250YWluZXJVdGlscy5nZXRQYWRkaW5n TWV0cmljcyhob3N0KTsNCj4+ICsJCQl2YXIgYm9yZGVyTWV0cmljczpSZWN0YW5nbGUgPQ0KPj5D U1NDb250YWluZXJVdGlscy5nZXRCb3JkZXJNZXRyaWNzKGhvc3QpOw0KPj4gKwkJCQ0KPj4gKwkJ CS8vIGFkanVzdCB0aGUgaG9zdCdzIHVzYWJsZSBzaXplIGJ5IHRoZSBtZXRyaWNzLiBJZg0KPj5o b3N0U2l6ZWRUb0NvbnRlbnQsIHRoZW4gdGhlDQo+PiArCQkJLy8gcmVzdWx0aW5nIGFkanVzdGVk IHZhbHVlIG1heSBiZSBsZXNzIHRoYW4gemVyby4NCj4+ICsJCQlob3N0V2lkdGggLT0gcGFkZGlu Z01ldHJpY3MubGVmdCArIHBhZGRpbmdNZXRyaWNzLnJpZ2h0ICsNCj4+Ym9yZGVyTWV0cmljcy5s ZWZ0ICsgYm9yZGVyTWV0cmljcy5yaWdodDsNCj4+ICsJCQlob3N0SGVpZ2h0IC09IHBhZGRpbmdN ZXRyaWNzLnRvcCArIHBhZGRpbmdNZXRyaWNzLmJvdHRvbSArDQo+PmJvcmRlck1ldHJpY3MudG9w ICsgYm9yZGVyTWV0cmljcy5ib3R0b207DQo+PiArDQo+PiArCQkJdmFyIHhwb3M6TnVtYmVyID0g Ym9yZGVyTWV0cmljcy5sZWZ0ICsgcGFkZGluZ01ldHJpY3MubGVmdDsNCj4+ICsJCQl2YXIgeXBv czpOdW1iZXIgPSBib3JkZXJNZXRyaWNzLnRvcCArIHBhZGRpbmdNZXRyaWNzLmxlZnQ7DQo+PiAr CQkJdmFyIGNoaWxkOklVSUJhc2U7DQo+PiArCQkJdmFyIGNoaWxkSGVpZ2h0Ok51bWJlcjsNCj4+ ICsJCQl2YXIgaTppbnQ7DQo+PiArCQkJdmFyIGNoaWxkWXBvczpOdW1iZXI7DQo+PiArCQkJdmFy IGFkanVzdExlZnQ6TnVtYmVyID0gMDsNCj4+ICsJCQl2YXIgYWRqdXN0UmlnaHQ6TnVtYmVyID0g aG9zdFdpZHRoICsgYm9yZGVyTWV0cmljcy5sZWZ0ICsNCj4+cGFkZGluZ01ldHJpY3MubGVmdDsN Cj4+ICsNCj4+ICsJCQkvLyBmaXJzdCB3b3JrIGZyb20gbGVmdCB0byByaWdodA0KPj4gKwkJCWZv cihpPTA7IGkgPCBuOyBpKyspDQo+PiArCQkJew0KPj4gKwkJCQljaGlsZCA9IGNvbnRlbnRWaWV3 LmdldEVsZW1lbnRBdChpKSBhcyBJVUlCYXNlOw0KPj4gKwkJCQlpZiAoY2hpbGQgPT0gbnVsbCB8 fCAhY2hpbGQudmlzaWJsZSkgY29udGludWU7DQo+PiArCQkJCWlmIChjaGlsZCA9PSBhY3R1YWxD aGlsZCkgYnJlYWs7DQo+PiArDQo+PiArCQkJCW1hcmdpbnMgPSBjaGlsZE1hcmdpbnMoY2hpbGQs IGhvc3RXaWR0aCwgaG9zdEhlaWdodCk7DQo+PiArCQkJCWlsYyA9IGNoaWxkIGFzIElMYXlvdXRD aGlsZDsNCj4+ICsNCj4+ICsJCQkJeHBvcyArPSBtYXJnaW5zLmxlZnQ7DQo+PiArDQo+PiArCQkJ CWNoaWxkWXBvcyA9IHlwb3MgKyBtYXJnaW5zLnRvcDsgLy8gZGVmYXVsdCB5IHBvc2l0aW9uDQo+ PiArDQo+PiArCQkJCWNoaWxkSGVpZ2h0ID0gY2hpbGQuaGVpZ2h0Ow0KPj4gKwkJCQlpZiAoaWxj ICE9IG51bGwpDQo+PiArCQkJCXsNCj4+ICsJCQkJCWlmICghaXNOYU4oaWxjLnBlcmNlbnRIZWln aHQpKSB7DQo+PiArCQkJCQkJY2hpbGRIZWlnaHQgPSBob3N0LmhlaWdodCAqIGlsYy5wZXJjZW50 SGVpZ2h0LzEwMC4wOw0KPj4gKwkJCQkJfQ0KPj4gKwkJCQkJZWxzZSBpZiAoaXNOYU4oaWxjLmV4 cGxpY2l0SGVpZ2h0KSkgew0KPj4gKwkJCQkJCWNoaWxkSGVpZ2h0ID0gaG9zdC5oZWlnaHQ7DQo+ PiArCQkJCQl9DQo+PiArCQkJCQlpbGMuc2V0SGVpZ2h0KGNoaWxkSGVpZ2h0KTsNCj4+ICsJCQkJ fQ0KPj4gKw0KPj4gKwkJCQlpZiAoaWxjKSB7DQo+PiArCQkJCQlpbGMuc2V0WCh4cG9zKTsNCj4+ ICsJCQkJCWlsYy5zZXRZKGNoaWxkWXBvcyk7DQo+PiArDQo+PiArCQkJCQlpZiAoIWlzTmFOKGls Yy5wZXJjZW50V2lkdGgpKSB7DQo+PiArCQkJCQkJaWxjLnNldFdpZHRoKGhvc3RXaWR0aCAqIGls Yy5wZXJjZW50V2lkdGggLyAxMDApOw0KPj4gKwkJCQkJfQ0KPj4gKw0KPj4gKwkJCQl9IGVsc2Ug ew0KPj4gKwkJCQkJY2hpbGQueCA9IHhwb3M7DQo+PiArCQkJCQljaGlsZC55ID0gY2hpbGRZcG9z Ow0KPj4gKwkJCQl9DQo+PiArDQo+PiArCQkJCXhwb3MgKz0gY2hpbGQud2lkdGggKyBtYXJnaW5z LnJpZ2h0Ow0KPj4gKwkJCQlhZGp1c3RMZWZ0ID0geHBvczsNCj4+ICsJCQl9DQo+PiArDQo+PiAr CQkJLy8gdGhlbiB3b3JrIGZyb20gcmlnaHQgdG8gbGVmdA0KPj4gKwkJCXhwb3MgPSBob3N0V2lk dGggKyBib3JkZXJNZXRyaWNzLmxlZnQgKyBwYWRkaW5nTWV0cmljcy5sZWZ0Ow0KPj4gKw0KPj4g KwkJCWZvcihpPShuLTEpOyBhY3R1YWxDaGlsZCAhPSBudWxsICYmIGkgPj0gMDsgaS0tKQ0KPj4g KwkJCXsNCj4+ICsJCQkJY2hpbGQgPSBjb250ZW50Vmlldy5nZXRFbGVtZW50QXQoaSkgYXMgSVVJ QmFzZTsNCj4+ICsJCQkJaWYgKGNoaWxkID09IG51bGwgfHwgIWNoaWxkLnZpc2libGUpIGNvbnRp bnVlOw0KPj4gKwkJCQlpZiAoY2hpbGQgPT0gYWN0dWFsQ2hpbGQpIGJyZWFrOw0KPj4gKw0KPj4g KwkJCQltYXJnaW5zID0gY2hpbGRNYXJnaW5zKGNoaWxkLCBob3N0V2lkdGgsIGhvc3RIZWlnaHQp Ow0KPj4gKwkJCQlpbGMgPSBjaGlsZCBhcyBJTGF5b3V0Q2hpbGQ7DQo+PiArDQo+PiArCQkJCWNo aWxkWXBvcyA9IHlwb3MgKyBtYXJnaW5zLnRvcDsgLy8gZGVmYXVsdCB5IHBvc2l0aW9uDQo+PiAr DQo+PiArCQkJCWNoaWxkSGVpZ2h0ID0gY2hpbGQuaGVpZ2h0Ow0KPj4gKwkJCQlpZiAoaWxjICE9 IG51bGwpDQo+PiArCQkJCXsNCj4+ICsJCQkJCWlmICghaXNOYU4oaWxjLnBlcmNlbnRIZWlnaHQp KSB7DQo+PiArCQkJCQkJY2hpbGRIZWlnaHQgPSBob3N0LmhlaWdodCAqIGlsYy5wZXJjZW50SGVp Z2h0LzEwMC4wOw0KPj4gKwkJCQkJfQ0KPj4gKwkJCQkJZWxzZSBpZiAoaXNOYU4oaWxjLmV4cGxp Y2l0SGVpZ2h0KSkgew0KPj4gKwkJCQkJCWNoaWxkSGVpZ2h0ID0gaG9zdC5oZWlnaHQ7DQo+PiAr CQkJCQl9DQo+PiArCQkJCQlpbGMuc2V0SGVpZ2h0KGNoaWxkSGVpZ2h0KTsNCj4+ICsJCQkJfQ0K Pj4gKw0KPj4gKwkJCQlpZiAoaWxjKSB7DQo+PiArCQkJCQlpZiAoIWlzTmFOKGlsYy5wZXJjZW50 V2lkdGgpKSB7DQo+PiArCQkJCQkJaWxjLnNldFdpZHRoKGhvc3RXaWR0aCAqIGlsYy5wZXJjZW50 V2lkdGggLyAxMDApOw0KPj4gKwkJCQkJfQ0KPj4gKwkJCQl9DQo+PiArDQo+PiArCQkJCXhwb3Mg LT0gY2hpbGQud2lkdGggKyBtYXJnaW5zLnJpZ2h0Ow0KPj4gKw0KPj4gKwkJCQlpZiAoaWxjKSB7 DQo+PiArCQkJCQlpbGMuc2V0WCh4cG9zKTsNCj4+ICsJCQkJCWlsYy5zZXRZKGNoaWxkWXBvcyk7 DQo+PiArCQkJCX0gZWxzZSB7DQo+PiArCQkJCQljaGlsZC54ID0geHBvczsNCj4+ICsJCQkJCWNo aWxkLnkgPSBjaGlsZFlwb3M7DQo+PiArCQkJCX0NCj4+ICsNCj4+ICsJCQkJeHBvcyAtPSBtYXJn aW5zLmxlZnQ7DQo+PiArCQkJCWFkanVzdFJpZ2h0ID0geHBvczsNCj4+ICsJCQl9DQo+PiArDQo+ PiArCQkJLy8gbm93IGFkanVzdCB0aGUgYWN0dWFsQ2hpbGQgdG8gZmlsbCB0aGUgc3BhY2UuDQo+ PiArCQkJaWYgKGFjdHVhbENoaWxkICE9IG51bGwpIHsNCj4+ICsJCQkJbWFyZ2lucyA9IGNoaWxk TWFyZ2lucyhhY3R1YWxDaGlsZCwgaG9zdFdpZHRoLCBob3N0SGVpZ2h0KTsNCj4+ICsJCQkJaWxj ID0gYWN0dWFsQ2hpbGQgYXMgSUxheW91dENoaWxkOw0KPj4gKwkJCQljaGlsZEhlaWdodCA9IGFj dHVhbENoaWxkLmhlaWdodDsNCj4+ICsJCQkJaWYgKGlsYyAhPSBudWxsKQ0KPj4gKwkJCQl7DQo+ PiArCQkJCQlpZiAoIWlzTmFOKGlsYy5wZXJjZW50SGVpZ2h0KSkgew0KPj4gKwkJCQkJCWNoaWxk SGVpZ2h0ID0gaG9zdC5oZWlnaHQgKiBpbGMucGVyY2VudEhlaWdodC8xMDAuMDsNCj4+ICsJCQkJ CX0NCj4+ICsJCQkJCWVsc2UgaWYgKGlzTmFOKGlsYy5leHBsaWNpdEhlaWdodCkpIHsNCj4+ICsJ CQkJCQljaGlsZEhlaWdodCA9IGhvc3QuaGVpZ2h0Ow0KPj4gKwkJCQkJfQ0KPj4gKwkJCQkJaWxj LnNldEhlaWdodChjaGlsZEhlaWdodCk7DQo+PiArCQkJCX0NCj4+ICsJCQkJY2hpbGRZcG9zID0g eXBvcyArIG1hcmdpbnMudG9wOw0KPj4gKwkJCQlhY3R1YWxDaGlsZC54ID0gYWRqdXN0TGVmdCAr IG1hcmdpbnMubGVmdDsNCj4+ICsJCQkJYWN0dWFsQ2hpbGQueSA9IGNoaWxkWXBvczsNCj4+ICsJ CQkJaWYgKGlsYykgew0KPj4gKwkJCQkJaWxjLnNldFdpZHRoKChhZGp1c3RSaWdodC1tYXJnaW5z LnJpZ2h0KSAtDQo+PihhZGp1c3RMZWZ0K21hcmdpbnMubGVmdCkpOw0KPj4gKwkJCQl9IGVsc2Ug ew0KPj4gKwkJCQkJYWN0dWFsQ2hpbGQud2lkdGggPSAoYWRqdXN0UmlnaHQtbWFyZ2lucy5yaWdo dCkgLQ0KPj4oYWRqdXN0TGVmdCttYXJnaW5zLmxlZnQpOw0KPj4gKwkJCQl9DQo+PiArCQkJfQ0K Pj4gKw0KPj4gKyAgICAgICAgICAgIHJldHVybiB0cnVlOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKyAg ICAgICAgcHVibGljIGZ1bmN0aW9uIHNldERvY3VtZW50KGRvY3VtZW50Ok9iamVjdCwgaWQ6U3Ry aW5nID0NCj4+bnVsbCk6dm9pZA0KPj4gKyAgICAgICAgew0KPj4gKyAgICAgICAgICAgIHRoaXMu ZG9jdW1lbnQgPSBkb2N1bWVudDsNCj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ICsgICAgfQ0KPj4g Kw0KPj4gK30NCj4+IA0KPj4gDQo+Pmh0dHBzOi8vbmEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5v dXRsb29rLmNvbS8/dXJsPWh0dHAlM0ElMkYlMkZnaXQtd2lwLXUNCj4+cy5hcGFjaGUub3JnJTJG cmVwb3MlMkZhc2YlMkZmbGV4LWFzanMlMkZibG9iJTJGYmRkMzRkMmUlMkZmcmFtZXdvcmtzJTJG cA0KPj5yb2plY3RzJTJGQmFzaWMlMkZzcmMlMkZtYWluJTJGZmxleCUyRm9yZyUyRmFwYWNoZSUy RmZsZXglMkZodG1sJTJGYmVhZHMlDQo+PjJGbGF5b3V0cyUyRk9uZUZsZXhpYmxlQ2hpbGRIb3Jp em9udGFsTGF5b3V0TG9ja0NoaWxkSGVpZ2h0LmFzJmRhdGE9MDIlN0MNCj4+MDElN0MlN0M2OTli YmIxNzBiMmM0ZjBiZjNhZTA4ZDRkNzMyNjM4YSU3Q2ZhN2IxYjVhN2IzNDQzODc5NGFlZDJjMTc4 ZGVjZQ0KPj5lMSU3QzAlN0MwJTdDNjM2MzcwMDU4ODE4NzY2NTExJnNkYXRhPUlyMVNpeWUyMUlV enppanB2V0ExWG1RTjBBYkhrdEx1JTJGDQo+PnUzaCUyQlJ0QlpUMCUzRCZyZXNlcnZlZD0wDQo+ PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+PiBkaWZmIC0tZ2l0IA0KPj5hL2ZyYW1ld29ya3MvcHJvamVjdHMv QmFzaWMvc3JjL21haW4vZmxleC9vcmcvYXBhY2hlL2ZsZXgvaHRtbC9iZWFkcy9sYXlvDQo+PnV0 cy9PbmVGbGV4aWJsZUNoaWxkSG9yaXpvbnRhbExheW91dExvY2tDaGlsZEhlaWdodC5hcw0KPj5i L2ZyYW1ld29ya3MvcHJvamVjdHMvQmFzaWMvc3JjL21haW4vZmxleC9vcmcvYXBhY2hlL2ZsZXgv aHRtbC9iZWFkcy9sYXlvDQo+PnV0cy9PbmVGbGV4aWJsZUNoaWxkSG9yaXpvbnRhbExheW91dExv Y2tDaGlsZEhlaWdodC5hcw0KPj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCBk MTcwZDIzLi4wMDAwMDAwDQo+PiAtLS0gDQo+PmEvZnJhbWV3b3Jrcy9wcm9qZWN0cy9CYXNpYy9z cmMvbWFpbi9mbGV4L29yZy9hcGFjaGUvZmxleC9odG1sL2JlYWRzL2xheW8NCj4+dXRzL09uZUZs ZXhpYmxlQ2hpbGRIb3Jpem9udGFsTGF5b3V0TG9ja0NoaWxkSGVpZ2h0LmFzDQo+PiArKysgL2Rl di9udWxsDQo+PiBAQCAtMSw5MSArMCwwIEBADQo+PiANCj4+LS8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KPj4v Ly8vLy8vLw0KPj4gLS8vDQo+PiAtLy8gIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUg Rm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KPj4gLS8vICBjb250cmlidXRvciBs aWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkDQo+Pndp dGgNCj4+IC0vLyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGlu ZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KPj4gLS8vICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmls ZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLA0KPj5WZXJzaW9uIDIuMA0KPj4gLS8v ICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv bXBsaWFuY2UNCj4+d2l0aA0KPj4gLS8vICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEg Y29weSBvZiB0aGUgTGljZW5zZSBhdA0KPj4gLS8vDQo+PiAtLy8gICAgICANCj4+aHR0cHM6Ly9u YTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRnd3 dy5hcGFjaA0KPj5lLm9yZyUyRmxpY2Vuc2VzJTJGTElDRU5TRS0yLjAmZGF0YT0wMiU3QzAxJTdD JTdDNjk5YmJiMTcwYjJjNGYwYmYzYWUwOGQ0DQo+PmQ3MzI2MzhhJTdDZmE3YjFiNWE3YjM0NDM4 Nzk0YWVkMmMxNzhkZWNlZTElN0MwJTdDMCU3QzYzNjM3MDA1ODgxODc2NjUxMSYNCj4+c2RhdGE9 YkJ1dHI1eFhhY3pobDc0MWladmpYdWIwbDFCNzJkJTJGdkltYWpxRDdtdnlBJTNEJnJlc2VydmVk PTANCj4+IC0vLw0KPj4gLS8vICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQo+PiAtLy8gIGRpc3RyaWJ1dGVkIHVuZGVy IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQo+PiAtLy8g IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw cmVzcyBvcg0KPj5pbXBsaWVkLg0KPj4gLS8vICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVj aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQo+PiAtLy8gIGxpbWl0YXRp b25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KPj4gLS8vDQo+PiANCj4+LS8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0K Pj4vLy8vLy8vLw0KPj4gLXBhY2thZ2Ugb3JnLmFwYWNoZS5mbGV4Lmh0bWwuYmVhZHMubGF5b3V0 cw0KPj4gLXsNCj4+IC0JaW1wb3J0IG9yZy5hcGFjaGUuZmxleC5jb3JlLkxheW91dEJhc2U7DQo+ PiAtCWltcG9ydCBvcmcuYXBhY2hlLmZsZXguY29yZS5JRG9jdW1lbnQ7DQo+PiAtCWltcG9ydCBv cmcuYXBhY2hlLmZsZXguY29yZS5JTGF5b3V0Q2hpbGQ7DQo+PiAtCWltcG9ydCBvcmcuYXBhY2hl LmZsZXguY29yZS5JTGF5b3V0SG9zdDsNCj4+IC0JaW1wb3J0IG9yZy5hcGFjaGUuZmxleC5jb3Jl LklMYXlvdXRWaWV3Ow0KPj4gLQlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4LmNvcmUuSUxheW91dFBh cmVudDsNCj4+IC0JaW1wb3J0IG9yZy5hcGFjaGUuZmxleC5jb3JlLklQYXJlbnRJVUlCYXNlOw0K Pj4gLQlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4LmNvcmUuSVN0cmFuZDsNCj4+IC0JaW1wb3J0IG9y Zy5hcGFjaGUuZmxleC5jb3JlLklVSUJhc2U7DQo+PiAtCWltcG9ydCBvcmcuYXBhY2hlLmZsZXgu Y29yZS5WYWx1ZXNNYW5hZ2VyOw0KPj4gLQlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4LmNvcmUuVUlC YXNlOw0KPj4gLQlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4LmV2ZW50cy5FdmVudDsNCj4+IC0JaW1w b3J0IG9yZy5hcGFjaGUuZmxleC5nZW9tLlJlY3RhbmdsZTsNCj4+IC0JaW1wb3J0IG9yZy5hcGFj aGUuZmxleC51dGlscy5DU1NDb250YWluZXJVdGlsczsNCj4+IC0JaW1wb3J0IG9yZy5hcGFjaGUu ZmxleC51dGlscy5DU1NVdGlsczsNCj4+IC0NCj4+IC0gICAgLyoqDQo+PiAtICAgICAqICBUaGUg T25lRmxleGlibGVDaGlsZEhvcml6b250YWxMYXlvdXRMb2NrQ2hpbGRIZWlnaHQNCj4+IC0JICog IGlzIGEgc3ViY2xhc3Mgb2YgT25lRmxleGlibGVDaGlsZEhvcml6b250YWxMYXlvdXQNCj4+IC0J ICogIHRoYXQgc2V0cyB0aGUgZmxleGlibGUgY2hpbGQncyBoZWlnaHQgdG8gYmUgdGhlIGhlaWdo dA0KPj4gLQkgKiAgb2YgdGhlIGhvc3QgY29udGFpbmVyLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB5 b3UNCj4+IC0JICogIGRvbid0IHdhbnQgdGhlIGFjdHVhbCBjaGlsZCdzIGhlaWdodCB0byBkaWN0 YXRlIHRoZQ0KPj4gLQkgKiAgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgaW4gb3JkZXIgdG8gZm9y Y2UNCj4+IC0JICogIHNjcm9sbGJhcnMNCj4+IC0gICAgICoNCj4+IC0gICAgICogIEBsYW5ndmVy c2lvbiAzLjANCj4+IC0gICAgICogIEBwbGF5ZXJ2ZXJzaW9uIEZsYXNoIDEwLjINCj4+IC0gICAg ICogIEBwbGF5ZXJ2ZXJzaW9uIEFJUiAyLjYNCj4+IC0gICAgICogIEBwcm9kdWN0dmVyc2lvbiBG bGV4SlMgMC4wDQo+PiAtICAgICAqLw0KPj4gLQlwdWJsaWMgY2xhc3MgT25lRmxleGlibGVDaGls ZEhvcml6b250YWxMYXlvdXRMb2NrQ2hpbGRIZWlnaHQgZXh0ZW5kcw0KPj5PbmVGbGV4aWJsZUNo aWxkSG9yaXpvbnRhbExheW91dA0KPj4gLQl7DQo+PiAtICAgICAgICAvKioNCj4+IC0gICAgICAg ICAqICBDb25zdHJ1Y3Rvci4NCj4+IC0gICAgICAgICAqDQo+PiAtICAgICAgICAgKiAgQGxhbmd2 ZXJzaW9uIDMuMA0KPj4gLSAgICAgICAgICogIEBwbGF5ZXJ2ZXJzaW9uIEZsYXNoIDEwLjINCj4+ IC0gICAgICAgICAqICBAcGxheWVydmVyc2lvbiBBSVIgMi42DQo+PiAtICAgICAgICAgKiAgQHBy b2R1Y3R2ZXJzaW9uIEZsZXhKUyAwLjANCj4+IC0gICAgICAgICAqLw0KPj4gLQkJcHVibGljIGZ1 bmN0aW9uIE9uZUZsZXhpYmxlQ2hpbGRIb3Jpem9udGFsTGF5b3V0TG9ja0NoaWxkSGVpZ2h0KCkN Cj4+IC0JCXsNCj4+IC0JCQlzdXBlcigpOw0KPj4gLQkJfQ0KPj4gLQ0KPj4gLSAgICAgICAgLyoq DQo+PiAtICAgICAgICAgKiBAY29weSBvcmcuYXBhY2hlLmZsZXguY29yZS5JQmVhZExheW91dCNs YXlvdXQNCj4+IC0gICAgICAgICAqLw0KPj4gLQkJb3ZlcnJpZGUgcHVibGljIGZ1bmN0aW9uIGxh eW91dCgpOkJvb2xlYW4NCj4+IC0JCXsNCj4+IC0JCQl2YXIgcmV0OkJvb2xlYW4gPSBzdXBlci5s YXlvdXQoKTsNCj4+IC0JCQlpZiAocmV0KQ0KPj4gLQkJCXsNCj4+IC0JCQkJdmFyIGNvbnRlbnRW aWV3OklMYXlvdXRWaWV3ID0gbGF5b3V0VmlldzsNCj4+IC0JDQo+PiAtCQkJCXZhciBuOmludCA9 IGNvbnRlbnRWaWV3Lm51bUVsZW1lbnRzOw0KPj4gLQ0KPj4gLQkJCQl2YXIgaDpOdW1iZXIgPSBo b3N0LmhlaWdodDsNCj4+IC0JCQkJZm9yKHZhciBpOmludD0wOyBpIDwgbjsgaSsrKSB7DQo+PiAt CQkJCQl2YXIgY2hpbGQ6VUlCYXNlID0gY29udGVudFZpZXcuZ2V0RWxlbWVudEF0KGkpIGFzIFVJ QmFzZTsNCj4+IC0JCQkJCWlmIChjaGlsZCAhPSBhY3R1YWxDaGlsZCkNCj4+IC0JCQkJCQloID0g Y2hpbGQuaGVpZ2h0Ow0KPj4gLQkJCQl9DQo+PiAtCQkJCWFjdHVhbENoaWxkLnNldEhlaWdodCho KTsNCj4+IC0JCQl9DQo+PiAtCQkJcmV0dXJuIHJldDsNCj4+IC0JCX0NCj4+IC0NCj4+IC0gICAg fQ0KPj4gLQ0KPj4gLX0NCj4+IA0KPj4gDQo+Pmh0dHBzOi8vbmEwMS5zYWZlbGlua3MucHJvdGVj dGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHAlM0ElMkYlMkZnaXQtd2lwLXUNCj4+cy5hcGFjaGUu b3JnJTJGcmVwb3MlMkZhc2YlMkZmbGV4LWFzanMlMkZibG9iJTJGYmRkMzRkMmUlMkZmcmFtZXdv cmtzJTJGcA0KPj5yb2plY3RzJTJGQmFzaWMlMkZzcmMlMkZtYWluJTJGZmxleCUyRm9yZyUyRmFw YWNoZSUyRmZsZXglMkZodG1sJTJGYmVhZHMlDQo+PjJGbGF5b3V0cyUyRk9uZUZsZXhpYmxlQ2hp bGRWZXJ0aWNhbExheW91dEZvck92ZXJmbG93LmFzJmRhdGE9MDIlN0MwMSU3QyUNCj4+N0M2OTli YmIxNzBiMmM0ZjBiZjNhZTA4ZDRkNzMyNjM4YSU3Q2ZhN2IxYjVhN2IzNDQzODc5NGFlZDJjMTc4 ZGVjZWUxJTdDMA0KPj4lN0MwJTdDNjM2MzcwMDU4ODE4NzY2NTExJnNkYXRhPVdkSm54NklHYlB3 SXhVaWJLQjNVcWZLVEhnSHVnV0lsZXFCVnNxSjVmDQo+PmVFJTNEJnJlc2VydmVkPTANCj4+IC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCj4+IGRpZmYgLS1naXQgDQo+PmEvZnJhbWV3b3Jrcy9wcm9qZWN0cy9CYXNp Yy9zcmMvbWFpbi9mbGV4L29yZy9hcGFjaGUvZmxleC9odG1sL2JlYWRzL2xheW8NCj4+dXRzL09u ZUZsZXhpYmxlQ2hpbGRWZXJ0aWNhbExheW91dEZvck92ZXJmbG93LmFzDQo+PmIvZnJhbWV3b3Jr cy9wcm9qZWN0cy9CYXNpYy9zcmMvbWFpbi9mbGV4L29yZy9hcGFjaGUvZmxleC9odG1sL2JlYWRz L2xheW8NCj4+dXRzL09uZUZsZXhpYmxlQ2hpbGRWZXJ0aWNhbExheW91dEZvck92ZXJmbG93LmFz DQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMC4uNTY3OWY4MA0KPj4g LS0tIC9kZXYvbnVsbA0KPj4gKysrIA0KPj5iL2ZyYW1ld29ya3MvcHJvamVjdHMvQmFzaWMvc3Jj L21haW4vZmxleC9vcmcvYXBhY2hlL2ZsZXgvaHRtbC9iZWFkcy9sYXlvDQo+PnV0cy9PbmVGbGV4 aWJsZUNoaWxkVmVydGljYWxMYXlvdXRGb3JPdmVyZmxvdy5hcw0KPj4gQEAgLTAsMCArMSwyOTEg QEANCj4+IA0KPj4rLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQo+Pi8vLy8vLy8vDQo+PiArLy8NCj4+ICsvLyAg TGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9u ZSBvciBtb3JlDQo+PiArLy8gIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0 aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQNCj4+d2l0aA0KPj4gKy8vICB0aGlzIHdvcmsgZm9y IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQo+ PiArLy8gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hl IExpY2Vuc2UsDQo+PlZlcnNpb24gMi4wDQo+PiArLy8gICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1h eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KPj53aXRoDQo+PiArLy8g IHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQo+ PiArLy8NCj4+ICsvLyAgICAgIA0KPj5odHRwczovL25hMDEuc2FmZWxpbmtzLnByb3RlY3Rpb24u b3V0bG9vay5jb20vP3VybD1odHRwJTNBJTJGJTJGd3d3LmFwYWNoDQo+PmUub3JnJTJGbGljZW5z ZXMlMkZMSUNFTlNFLTIuMCZkYXRhPTAyJTdDMDElN0MlN0M2OTliYmIxNzBiMmM0ZjBiZjNhZTA4 ZDQNCj4+ZDczMjYzOGElN0NmYTdiMWI1YTdiMzQ0Mzg3OTRhZWQyYzE3OGRlY2VlMSU3QzAlN0Mw JTdDNjM2MzcwMDU4ODE4NzY2NTExJg0KPj5zZGF0YT1iQnV0cjV4WGFjemhsNzQxaVp2alh1YjBs MUI3MmQlMkZ2SW1hanFEN212eUElM0QmcmVzZXJ2ZWQ9MA0KPj4gKy8vDQo+PiArLy8gIFVubGVz cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m dHdhcmUNCj4+ICsvLyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0 ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCj4+ICsvLyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yDQo+PmltcGxpZWQuDQo+PiAr Ly8gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw ZXJtaXNzaW9ucyBhbmQNCj4+ICsvLyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQo+ PiArLy8NCj4+IA0KPj4rLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQo+Pi8vLy8vLy8vDQo+PiArcGFja2FnZSBv cmcuYXBhY2hlLmZsZXguaHRtbC5iZWFkcy5sYXlvdXRzDQo+PiArew0KPj4gKwlpbXBvcnQgb3Jn LmFwYWNoZS5mbGV4LmNvcmUuTGF5b3V0QmFzZTsNCj4+ICsJaW1wb3J0IG9yZy5hcGFjaGUuZmxl eC5jb3JlLklEb2N1bWVudDsNCj4+ICsJaW1wb3J0IG9yZy5hcGFjaGUuZmxleC5jb3JlLklMYXlv dXRDaGlsZDsNCj4+ICsJaW1wb3J0IG9yZy5hcGFjaGUuZmxleC5jb3JlLklMYXlvdXRIb3N0Ow0K Pj4gKwlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4LmNvcmUuSUxheW91dFZpZXc7DQo+PiArCWltcG9y dCBvcmcuYXBhY2hlLmZsZXguY29yZS5JTGF5b3V0UGFyZW50Ow0KPj4gKwlpbXBvcnQgb3JnLmFw YWNoZS5mbGV4LmNvcmUuSVBhcmVudElVSUJhc2U7DQo+PiArCWltcG9ydCBvcmcuYXBhY2hlLmZs ZXguY29yZS5JU3RyYW5kOw0KPj4gKwlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4LmNvcmUuSVN0eWxl YWJsZU9iamVjdDsNCj4+ICsJaW1wb3J0IG9yZy5hcGFjaGUuZmxleC5jb3JlLklVSUJhc2U7DQo+ PiArCWltcG9ydCBvcmcuYXBhY2hlLmZsZXguY29yZS5WYWx1ZXNNYW5hZ2VyOw0KPj4gKwlpbXBv cnQgb3JnLmFwYWNoZS5mbGV4LmNvcmUuVUlCYXNlOw0KPj4gKwlpbXBvcnQgb3JnLmFwYWNoZS5m bGV4LmV2ZW50cy5FdmVudDsNCj4+ICsJaW1wb3J0IG9yZy5hcGFjaGUuZmxleC5nZW9tLlJlY3Rh bmdsZTsNCj4+ICsJaW1wb3J0IG9yZy5hcGFjaGUuZmxleC51dGlscy5DU1NDb250YWluZXJVdGls czsNCj4+ICsJaW1wb3J0IG9yZy5hcGFjaGUuZmxleC51dGlscy5DU1NVdGlsczsNCj4+ICsNCj4+ ICsgICAgLyoqDQo+PiArICAgICAqICBUaGUgT25lRmxleGlibGVDaGlsZFZlcnRpY2FsTGF5b3V0 Rm9yT3ZlcmZsb3cgaXMNCj4+ICsJICogIGludGVuZGVkIGZvciBidWlsZGluZyBhcHBzIHRoYXQg Y2xpcA0KPj4gKwkgKiAgYW5kL29yIHNjcm9sbCB0aGUgb3ZlcmZsb3csIGVzcGVjaWFsbHkgaW4g YQ0KPj4gKwkgKiAgMy1wYW5lIHZpZXcgbGlrZSB0aGUgQVNEb2MgZXhhbXBsZXMuICBJdCBkb2Vz IG5vdCB1c2UNCj4+ICsJICogIEZsZXhCb3ggYmVjYXVzZSBGbGV4Qm94IHdhbnRzIHRvIGdyb3cg dG8gdGhlIHNpemUNCj4+ICsJICogIG9mIHRoZSBjb250ZW50IHdpdGhvdXQgc3BlY2lmeWluZyB3 aWR0aC9oZWlnaHQgb24NCj4+ICsJICogIHRoZSBmbGV4aWJsZSBjaGlsZC4gIEJ1dCB0aGVuIHRo ZSBjaGlsZHJlbiBpbg0KPj4gKwkgKiAgdGhlIGZsZXhpYmxlIGNoaWxkIGNhbm5vdCB1c2UgJSBz aXppbmcuDQo+PiArCSAqICBUaGlzIGxheW91dCBwcmVzdW1lcyB0aGUgcGFyZW50IGlzIGEga25v d24gc2l6ZS4NCj4+ICsgICAgICoNCj4+ICsgICAgICogIEBsYW5ndmVyc2lvbiAzLjANCj4+ICsg ICAgICogIEBwbGF5ZXJ2ZXJzaW9uIEZsYXNoIDEwLjINCj4+ICsgICAgICogIEBwbGF5ZXJ2ZXJz aW9uIEFJUiAyLjYNCj4+ICsgICAgICogIEBwcm9kdWN0dmVyc2lvbiBGbGV4SlMgMC4wDQo+PiAr ICAgICAqLw0KPj4gKwlwdWJsaWMgY2xhc3MgT25lRmxleGlibGVDaGlsZFZlcnRpY2FsTGF5b3V0 Rm9yT3ZlcmZsb3cgZXh0ZW5kcw0KPj5MYXlvdXRCYXNlIGltcGxlbWVudHMgSU9uZUZsZXhpYmxl Q2hpbGRMYXlvdXQsIElEb2N1bWVudA0KPj4gKwl7DQo+PiArICAgICAgICAvKioNCj4+ICsgICAg ICAgICAqICBDb25zdHJ1Y3Rvci4NCj4+ICsgICAgICAgICAqDQo+PiArICAgICAgICAgKiAgQGxh bmd2ZXJzaW9uIDMuMA0KPj4gKyAgICAgICAgICogIEBwbGF5ZXJ2ZXJzaW9uIEZsYXNoIDEwLjIN Cj4+ICsgICAgICAgICAqICBAcGxheWVydmVyc2lvbiBBSVIgMi42DQo+PiArICAgICAgICAgKiAg QHByb2R1Y3R2ZXJzaW9uIEZsZXhKUyAwLjANCj4+ICsgICAgICAgICAqLw0KPj4gKwkJcHVibGlj IGZ1bmN0aW9uIE9uZUZsZXhpYmxlQ2hpbGRWZXJ0aWNhbExheW91dEZvck92ZXJmbG93KCkNCj4+ ICsJCXsNCj4+ICsJCQlzdXBlcigpOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKyAgICAgICAgcHJpdmF0 ZSB2YXIgX2ZsZXhpYmxlQ2hpbGQ6U3RyaW5nOw0KPj4gKw0KPj4gKyAgICAgICAgcHJvdGVjdGVk IHZhciBhY3R1YWxDaGlsZDpJTGF5b3V0Q2hpbGQ7DQo+PiArDQo+PiArICAgICAgICAvKioNCj4+ ICsgICAgICAgICAqICBAcHJpdmF0ZQ0KPj4gKyAgICAgICAgICogIFRoZSBkb2N1bWVudC4NCj4+ ICsgICAgICAgICAqLw0KPj4gKyAgICAgICAgcHJpdmF0ZSB2YXIgZG9jdW1lbnQ6T2JqZWN0Ow0K Pj4gKw0KPj4gKwkJLyoqDQo+PiArCQkgKiAgVGhlIGlkIG9mIHRoZSBmbGV4aWJsZSBjaGlsZA0K Pj4gKwkJICoNCj4+ICsJCSAqICBAbGFuZ3ZlcnNpb24gMy4wDQo+PiArCQkgKiAgQHBsYXllcnZl cnNpb24gRmxhc2ggMTAuMg0KPj4gKwkJICogIEBwbGF5ZXJ2ZXJzaW9uIEFJUiAyLjYNCj4+ICsJ CSAqICBAcHJvZHVjdHZlcnNpb24gRmxleEpTIDAuMA0KPj4gKwkJICovDQo+PiArCQlwdWJsaWMg ZnVuY3Rpb24gZ2V0IGZsZXhpYmxlQ2hpbGQoKTpTdHJpbmcNCj4+ICsJCXsNCj4+ICsJCQlyZXR1 cm4gX2ZsZXhpYmxlQ2hpbGQ7DQo+PiArCQl9DQo+PiArDQo+PiArCQkvKioNCj4+ICsJCSAqIEBw cml2YXRlDQo+PiArCQkgKi8NCj4+ICsJCXB1YmxpYyBmdW5jdGlvbiBzZXQgZmxleGlibGVDaGls ZCh2YWx1ZTpTdHJpbmcpOnZvaWQNCj4+ICsJCXsNCj4+ICsJCQlfZmxleGlibGVDaGlsZCA9IHZh bHVlOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKyAgICAgICAgLyoqDQo+PiArICAgICAgICAgKiBAY29w eSBvcmcuYXBhY2hlLmZsZXguY29yZS5JQmVhZExheW91dCNsYXlvdXQNCj4+ICsgICAgICAgICAq Lw0KPj4gKwkJQ09NUElMRTo6SlMNCj4+ICsJCW92ZXJyaWRlIHB1YmxpYyBmdW5jdGlvbiBsYXlv dXQoKTpCb29sZWFuDQo+PiArCQl7DQo+PiArCQkJdmFyIGNvbnRlbnRWaWV3OklMYXlvdXRWaWV3 ID0gbGF5b3V0VmlldzsNCj4+ICsNCj4+ICsJCQlhY3R1YWxDaGlsZCA9IGRvY3VtZW50W2ZsZXhp YmxlQ2hpbGRdOw0KPj4gKw0KPj4gKwkJCXZhciBuOmludCA9IGNvbnRlbnRWaWV3Lm51bUVsZW1l bnRzOw0KPj4gKwkJCWlmIChuID09IDApIHJldHVybiBmYWxzZTsNCj4+ICsNCj4+ICsJCQlmb3Io dmFyIGk6aW50PTA7IGkgPCBuOyBpKyspIHsNCj4+ICsJCQkJdmFyIGNoaWxkOlVJQmFzZSA9IGNv bnRlbnRWaWV3LmdldEVsZW1lbnRBdChpKSBhcyBVSUJhc2U7DQo+PiArCQkJCWlmIChjaGlsZC5l bGVtZW50LnN0eWxlWyJkaXNwbGF5Il0gIT0gImZsZXgiICYmDQo+PmNoaWxkLmVsZW1lbnQuc3R5 bGVbImRpc3BsYXkiXSAhPSAibm9uZSIpDQo+PiArCQkJCQljaGlsZC5lbGVtZW50LnN0eWxlWyJk aXNwbGF5Il0gPSAiYmxvY2siOw0KPj4gKwkJCX0NCj4+ICsNCj4+ICsJCQl2YXIgaDpOdW1iZXIg PSBob3N0LmhlaWdodDsNCj4+ICsJCQlmb3IoaT0wOyBpIDwgbjsgaSsrKSB7DQo+PiArCQkJCWNo aWxkID0gY29udGVudFZpZXcuZ2V0RWxlbWVudEF0KGkpIGFzIFVJQmFzZTsNCj4+ICsJCQkJaWYg KGNoaWxkICE9IGFjdHVhbENoaWxkKQ0KPj4gKwkJCQkJaCAtPSBjaGlsZC5oZWlnaHQ7DQo+PiAr CQkJfQ0KPj4gKwkJCWFjdHVhbENoaWxkLmhlaWdodCA9IGg7DQo+PiArCQkJCQkNCj4+ICsJCQly ZXR1cm4gdHJ1ZTsNCj4+ICsJCX0NCj4+ICsNCj4+ICsJCUNPTVBJTEU6OlNXRg0KPj4gKwkJb3Zl cnJpZGUgcHVibGljIGZ1bmN0aW9uIGxheW91dCgpOkJvb2xlYW4NCj4+ICsJCXsNCj4+ICsJCQl2 YXIgY29udGVudFZpZXc6SUxheW91dFZpZXcgPSBsYXlvdXRWaWV3Ow0KPj4gKwkJCWFjdHVhbENo aWxkID0gZG9jdW1lbnQuaGFzT3duUHJvcGVydHkoZmxleGlibGVDaGlsZCkgPw0KPj5kb2N1bWVu dFtmbGV4aWJsZUNoaWxkXSA6IG51bGw7DQo+PiArDQo+PiArCQkJdmFyIG46TnVtYmVyID0gY29u dGVudFZpZXcubnVtRWxlbWVudHM7DQo+PiArCQkJaWYgKG4gPT0gMCkgcmV0dXJuIGZhbHNlOw0K Pj4gKwkJCQ0KPj4gKwkJCXZhciBtYXhXaWR0aDpOdW1iZXIgPSAwOw0KPj4gKwkJCXZhciBtYXhI ZWlnaHQ6TnVtYmVyID0gMDsNCj4+ICsJCQl2YXIgaG9zdFNpemVkVG9Db250ZW50OkJvb2xlYW4g PSBob3N0LmlzV2lkdGhTaXplZFRvQ29udGVudCgpOw0KPj4gKwkJCXZhciBob3N0V2lkdGg6TnVt YmVyID0gaG9zdC53aWR0aDsNCj4+ICsJCQl2YXIgaG9zdEhlaWdodDpOdW1iZXIgPSBob3N0Lmhl aWdodDsNCj4+ICsNCj4+ICsJCQl2YXIgaWxjOklMYXlvdXRDaGlsZDsNCj4+ICsJCQl2YXIgZGF0 YTpPYmplY3Q7DQo+PiArCQkJdmFyIGNhbkFkanVzdDpCb29sZWFuID0gZmFsc2U7DQo+PiArCQkJ dmFyIG1hcmdpbnM6T2JqZWN0Ow0KPj4gKw0KPj4gKwkJCXZhciBwYWRkaW5nTWV0cmljczpSZWN0 YW5nbGUgPQ0KPj5DU1NDb250YWluZXJVdGlscy5nZXRQYWRkaW5nTWV0cmljcyhob3N0KTsNCj4+ ICsJCQl2YXIgYm9yZGVyTWV0cmljczpSZWN0YW5nbGUgPQ0KPj5DU1NDb250YWluZXJVdGlscy5n ZXRCb3JkZXJNZXRyaWNzKGhvc3QpOw0KPj4gKwkJCQ0KPj4gKwkJCS8vIGFkanVzdCB0aGUgaG9z dCdzIHVzYWJsZSBzaXplIGJ5IHRoZSBtZXRyaWNzLiBJZg0KPj5ob3N0U2l6ZWRUb0NvbnRlbnQs IHRoZW4gdGhlDQo+PiArCQkJLy8gcmVzdWx0aW5nIGFkanVzdGVkIHZhbHVlIG1heSBiZSBsZXNz IHRoYW4gemVyby4NCj4+ICsJCQlob3N0V2lkdGggLT0gcGFkZGluZ01ldHJpY3MubGVmdCArIHBh ZGRpbmdNZXRyaWNzLnJpZ2h0ICsNCj4+Ym9yZGVyTWV0cmljcy5sZWZ0ICsgYm9yZGVyTWV0cmlj cy5yaWdodDsNCj4+ICsJCQlob3N0SGVpZ2h0IC09IHBhZGRpbmdNZXRyaWNzLnRvcCArIHBhZGRp bmdNZXRyaWNzLmJvdHRvbSArDQo+PmJvcmRlck1ldHJpY3MudG9wICsgYm9yZGVyTWV0cmljcy5i b3R0b207DQo+PiArDQo+PiArCQkJdmFyIHhwb3M6TnVtYmVyID0gYm9yZGVyTWV0cmljcy5sZWZ0 ICsgcGFkZGluZ01ldHJpY3MubGVmdDsNCj4+ICsJCQl2YXIgeXBvczpOdW1iZXIgPSBib3JkZXJN ZXRyaWNzLnRvcCArIHBhZGRpbmdNZXRyaWNzLmxlZnQ7DQo+PiArCQkJdmFyIGNoaWxkOklVSUJh c2U7DQo+PiArCQkJdmFyIGNoaWxkV2lkdGg6TnVtYmVyOw0KPj4gKwkJCXZhciBpOmludDsNCj4+ ICsJCQl2YXIgY2hpbGRYcG9zOk51bWJlcjsNCj4+ICsJCQl2YXIgYWRqdXN0VG9wOk51bWJlciA9 IDA7DQo+PiArCQkJdmFyIGFkanVzdEJvdHRvbTpOdW1iZXIgPSBob3N0SGVpZ2h0ICsgYm9yZGVy TWV0cmljcy50b3AgKw0KPj5wYWRkaW5nTWV0cmljcy50b3A7DQo+PiArDQo+PiArCQkJLy8gZmly c3Qgd29yayBmcm9tIHRvcCB0byBib3R0b20NCj4+ICsJCQlmb3IoaT0wOyBpIDwgbjsgaSsrKQ0K Pj4gKwkJCXsNCj4+ICsJCQkJY2hpbGQgPSBjb250ZW50Vmlldy5nZXRFbGVtZW50QXQoaSkgYXMg SVVJQmFzZTsNCj4+ICsJCQkJaWYgKGNoaWxkID09IG51bGwgfHwgIWNoaWxkLnZpc2libGUpIGNv bnRpbnVlOw0KPj4gKwkJCQlpZiAoY2hpbGQgPT0gYWN0dWFsQ2hpbGQpIGJyZWFrOw0KPj4gKw0K Pj4gKwkJCQltYXJnaW5zID0gY2hpbGRNYXJnaW5zKGNoaWxkLCBob3N0V2lkdGgsIGhvc3RIZWln aHQpOw0KPj4gKwkJCQlpbGMgPSBjaGlsZCBhcyBJTGF5b3V0Q2hpbGQ7DQo+PiArDQo+PiArCQkJ CXlwb3MgKz0gbWFyZ2lucy50b3A7DQo+PiArDQo+PiArCQkJCWNoaWxkWHBvcyA9IHhwb3MgKyBt YXJnaW5zLmxlZnQ7IC8vIGRlZmF1bHQgeCBwb3NpdGlvbg0KPj4gKw0KPj4gKwkJCQljaGlsZFdp ZHRoID0gY2hpbGQud2lkdGg7DQo+PiArCQkJCWlmIChpbGMgIT0gbnVsbCkNCj4+ICsJCQkJew0K Pj4gKwkJCQkJaWYgKCFpc05hTihpbGMucGVyY2VudFdpZHRoKSkgew0KPj4gKwkJCQkJCWNoaWxk V2lkdGggPSBob3N0V2lkdGggKiBpbGMucGVyY2VudFdpZHRoLzEwMC4wOw0KPj4gKwkJCQkJfQ0K Pj4gKwkJCQkJZWxzZSBpZiAoaXNOYU4oaWxjLmV4cGxpY2l0V2lkdGgpKSB7DQo+PiArCQkJCQkJ Y2hpbGRXaWR0aCA9IGhvc3RXaWR0aDsNCj4+ICsJCQkJCX0NCj4+ICsJCQkJCWlsYy5zZXRXaWR0 aChjaGlsZFdpZHRoKTsNCj4+ICsJCQkJfQ0KPj4gKw0KPj4gKwkJCQlpZiAoaWxjKSB7DQo+PiAr CQkJCQlpbGMuc2V0WChjaGlsZFhwb3MpOw0KPj4gKwkJCQkJaWxjLnNldFkoeXBvcyk7DQo+PiAr DQo+PiArCQkJCQlpZiAoIWlzTmFOKGlsYy5wZXJjZW50SGVpZ2h0KSkgew0KPj4gKwkJCQkJCWls Yy5zZXRIZWlnaHQoaG9zdEhlaWdodCAqIGlsYy5wZXJjZW50SGVpZ2h0IC8gMTAwKTsNCj4+ICsJ CQkJCX0NCj4+ICsNCj4+ICsJCQkJfSBlbHNlIHsNCj4+ICsJCQkJCWNoaWxkLnggPSBjaGlsZFhw b3M7DQo+PiArCQkJCQljaGlsZC55ID0geXBvczsNCj4+ICsJCQkJfQ0KPj4gKw0KPj4gKwkJCQl5 cG9zICs9IGNoaWxkLmhlaWdodCArIG1hcmdpbnMuYm90dG9tOw0KPj4gKwkJCQlhZGp1c3RUb3Ag PSB5cG9zOw0KPj4gKwkJCX0NCj4+ICsNCj4+ICsJCQkvLyB0aGVuIHdvcmsgZnJvbSBib3R0b20g dG8gdG9wDQo+PiArCQkJeXBvcyA9IGhvc3RIZWlnaHQgKyBib3JkZXJNZXRyaWNzLnRvcCArIHBh ZGRpbmdNZXRyaWNzLnRvcDsNCj4+ICsNCj4+ICsJCQlmb3IoaT0obi0xKTsgYWN0dWFsQ2hpbGQg IT0gbnVsbCAmJiBpID49IDA7IGktLSkNCj4+ICsJCQl7DQo+PiArCQkJCWNoaWxkID0gY29udGVu dFZpZXcuZ2V0RWxlbWVudEF0KGkpIGFzIElVSUJhc2U7DQo+PiArCQkJCWlmIChjaGlsZCA9PSBu dWxsIHx8ICFjaGlsZC52aXNpYmxlKSBjb250aW51ZTsNCj4+ICsJCQkJaWYgKGNoaWxkID09IGFj dHVhbENoaWxkKSBicmVhazsNCj4+ICsNCj4+ICsJCQkJbWFyZ2lucyA9IGNoaWxkTWFyZ2lucyhj aGlsZCwgaG9zdFdpZHRoLCBob3N0SGVpZ2h0KTsNCj4+ICsJCQkJaWxjID0gY2hpbGQgYXMgSUxh eW91dENoaWxkOw0KPj4gKw0KPj4gKwkJCQljaGlsZFhwb3MgPSB4cG9zICsgbWFyZ2lucy5sZWZ0 OyAvLyBkZWZhdWx0IHggcG9zaXRpb24NCj4+ICsNCj4+ICsJCQkJY2hpbGRXaWR0aCA9IGNoaWxk LndpZHRoOw0KPj4gKwkJCQlpZiAoaWxjICE9IG51bGwpDQo+PiArCQkJCXsNCj4+ICsJCQkJCWlm ICghaXNOYU4oaWxjLnBlcmNlbnRXaWR0aCkpIHsNCj4+ICsJCQkJCQljaGlsZFdpZHRoID0gaG9z dFdpZHRoICogaWxjLnBlcmNlbnRXaWR0aC8xMDAuMDsNCj4+ICsJCQkJCX0NCj4+ICsJCQkJCWVs c2UgaWYgKGlzTmFOKGlsYy5leHBsaWNpdFdpZHRoKSkgew0KPj4gKwkJCQkJCWNoaWxkV2lkdGgg PSBob3N0V2lkdGg7DQo+PiArCQkJCQl9DQo+PiArCQkJCQlpbGMuc2V0V2lkdGgoY2hpbGRXaWR0 aCk7DQo+PiArCQkJCX0NCj4+ICsNCj4+ICsJCQkJaWYgKGlsYykgew0KPj4gKwkJCQkJaWYgKCFp c05hTihpbGMucGVyY2VudEhlaWdodCkpIHsNCj4+ICsJCQkJCQlpbGMuc2V0SGVpZ2h0KGhvc3RI ZWlnaHQgKiBpbGMucGVyY2VudEhlaWdodCAvIDEwMCk7DQo+PiArCQkJCQl9DQo+PiArCQkJCX0N Cj4+ICsNCj4+ICsJCQkJeXBvcyAtPSBjaGlsZC5oZWlnaHQgKyBtYXJnaW5zLmJvdHRvbTsNCj4+ ICsNCj4+ICsJCQkJaWYgKGlsYykgew0KPj4gKwkJCQkJaWxjLnNldFgoY2hpbGRYcG9zKTsNCj4+ ICsJCQkJCWlsYy5zZXRZKHlwb3MpOw0KPj4gKwkJCQl9IGVsc2Ugew0KPj4gKwkJCQkJY2hpbGQu eCA9IGNoaWxkWHBvczsNCj4+ICsJCQkJCWNoaWxkLnkgPSB5cG9zOw0KPj4gKwkJCQl9DQo+PiAr DQo+PiArCQkJCXlwb3MgLT0gbWFyZ2lucy50b3A7DQo+PiArCQkJCWFkanVzdEJvdHRvbSA9IHlw b3M7DQo+PiArCQkJfQ0KPj4gKw0KPj4gKwkJCS8vIG5vdyBhZGp1c3QgdGhlIGFjdHVhbENoaWxk IHRvIGZpbGwgdGhlIHNwYWNlLg0KPj4gKwkJCWlmIChhY3R1YWxDaGlsZCAhPSBudWxsKSB7DQo+ PiArCQkJCW1hcmdpbnMgPSBjaGlsZE1hcmdpbnMoYWN0dWFsQ2hpbGQsIGhvc3RXaWR0aCwgaG9z dEhlaWdodCk7DQo+PiArCQkJCWlsYyA9IGFjdHVhbENoaWxkIGFzIElMYXlvdXRDaGlsZDsNCj4+ ICsJCQkJY2hpbGRXaWR0aCA9IGFjdHVhbENoaWxkLndpZHRoOw0KPj4gKwkJCQlpZiAoaWxjICE9 IG51bGwpDQo+PiArCQkJCXsNCj4+ICsJCQkJCWlmICghaXNOYU4oaWxjLnBlcmNlbnRXaWR0aCkp IHsNCj4+ICsJCQkJCQljaGlsZFdpZHRoID0gaG9zdFdpZHRoICogaWxjLnBlcmNlbnRXaWR0aC8x MDAuMDsNCj4+ICsJCQkJCX0NCj4+ICsJCQkJCWVsc2UgaWYgKGlzTmFOKGlsYy5leHBsaWNpdFdp ZHRoKSkgew0KPj4gKwkJCQkJCWNoaWxkV2lkdGggPSBob3N0V2lkdGg7DQo+PiArCQkJCQl9DQo+ PiArCQkJCQlpbGMuc2V0V2lkdGgoY2hpbGRXaWR0aCk7DQo+PiArCQkJCX0NCj4+ICsJCQkJY2hp bGRYcG9zID0geHBvcyArIG1hcmdpbnMubGVmdDsNCj4+ICsJCQkJCQ0KPj4gKwkJCQlhY3R1YWxD aGlsZC54ID0gY2hpbGRYcG9zDQo+PiArCQkJCWFjdHVhbENoaWxkLnkgPSBhZGp1c3RUb3AgKyBt YXJnaW5zLnRvcDsNCj4+ICsJCQkJaWYgKGlsYykgew0KPj4gKwkJCQkJaWxjLnNldEhlaWdodCgo YWRqdXN0Qm90dG9tLW1hcmdpbnMuYm90dG9tKSAtDQo+PihhZGp1c3RUb3ArbWFyZ2lucy50b3Ap KTsNCj4+ICsJCQkJfSBlbHNlIHsNCj4+ICsJCQkJCWFjdHVhbENoaWxkLmhlaWdodCA9IChhZGp1 c3RCb3R0b20tbWFyZ2lucy5ib3R0b20pIC0NCj4+KGFkanVzdFRvcCttYXJnaW5zLnRvcCk7DQo+ PiArCQkJCX0NCj4+ICsJCQl9DQo+PiArDQo+PiArCQkJcmV0dXJuIHRydWU7DQo+PiArCQl9DQo+ PiArDQo+PiArICAgICAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RG9jdW1lbnQoZG9jdW1lbnQ6T2Jq ZWN0LCBpZDpTdHJpbmcgPQ0KPj5udWxsKTp2b2lkDQo+PiArICAgICAgICB7DQo+PiArICAgICAg ICAgICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50Ow0KPj4gKyAgICAgICAgfQ0KPj4gKyAgICB9 DQo+PiArDQo+PiArfQ0KPj4gDQo+PiANCj4+aHR0cHM6Ly9uYTAxLnNhZmVsaW5rcy5wcm90ZWN0 aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRmdpdC13aXAtdQ0KPj5zLmFwYWNoZS5v cmclMkZyZXBvcyUyRmFzZiUyRmZsZXgtYXNqcyUyRmJsb2IlMkZiZGQzNGQyZSUyRmZyYW1ld29y a3MlMkZwDQo+PnJvamVjdHMlMkZCYXNpYyUyRnNyYyUyRm1haW4lMkZmbGV4JTJGb3JnJTJGYXBh Y2hlJTJGZmxleCUyRmh0bWwlMkZiZWFkcyUNCj4+MkZsYXlvdXRzJTJGT25lRmxleGlibGVDaGls ZFZlcnRpY2FsTGF5b3V0TG9ja0NoaWxkV2lkdGguYXMmZGF0YT0wMiU3QzAxJQ0KPj43QyU3QzY5 OWJiYjE3MGIyYzRmMGJmM2FlMDhkNGQ3MzI2MzhhJTdDZmE3YjFiNWE3YjM0NDM4Nzk0YWVkMmMx NzhkZWNlZTElDQo+PjdDMCU3QzAlN0M2MzYzNzAwNTg4MTg3NjY1MTEmc2RhdGE9NFE0Ymt0czBk cDR3dnZMVXR1MnlUWU5nJTJGcjdqUzhiUnQ0Y28NCj4+M25ZYlBLYyUzRCZyZXNlcnZlZD0wDQo+ PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+PiBkaWZmIC0tZ2l0IA0KPj5hL2ZyYW1ld29ya3MvcHJvamVjdHMv QmFzaWMvc3JjL21haW4vZmxleC9vcmcvYXBhY2hlL2ZsZXgvaHRtbC9iZWFkcy9sYXlvDQo+PnV0 cy9PbmVGbGV4aWJsZUNoaWxkVmVydGljYWxMYXlvdXRMb2NrQ2hpbGRXaWR0aC5hcw0KPj5iL2Zy YW1ld29ya3MvcHJvamVjdHMvQmFzaWMvc3JjL21haW4vZmxleC9vcmcvYXBhY2hlL2ZsZXgvaHRt bC9iZWFkcy9sYXlvDQo+PnV0cy9PbmVGbGV4aWJsZUNoaWxkVmVydGljYWxMYXlvdXRMb2NrQ2hp bGRXaWR0aC5hcw0KPj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRleCA3NDE1Mjk5 Li4wMDAwMDAwDQo+PiAtLS0gDQo+PmEvZnJhbWV3b3Jrcy9wcm9qZWN0cy9CYXNpYy9zcmMvbWFp bi9mbGV4L29yZy9hcGFjaGUvZmxleC9odG1sL2JlYWRzL2xheW8NCj4+dXRzL09uZUZsZXhpYmxl Q2hpbGRWZXJ0aWNhbExheW91dExvY2tDaGlsZFdpZHRoLmFzDQo+PiArKysgL2Rldi9udWxsDQo+ PiBAQCAtMSw5MyArMCwwIEBADQo+PiANCj4+LS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KPj4vLy8vLy8vLw0K Pj4gLS8vDQo+PiAtLy8gIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlv biAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KPj4gLS8vICBjb250cmlidXRvciBsaWNlbnNlIGFn cmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkDQo+PndpdGgNCj4+IC0v LyAgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmln aHQgb3duZXJzaGlwLg0KPj4gLS8vICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3Ug dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLA0KPj5WZXJzaW9uIDIuMA0KPj4gLS8vICAodGhlICJM aWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UN Cj4+d2l0aA0KPj4gLS8vICB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0 aGUgTGljZW5zZSBhdA0KPj4gLS8vDQo+PiAtLy8gICAgICANCj4+aHR0cHM6Ly9uYTAxLnNhZmVs aW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUyRnd3dy5hcGFjaA0K Pj5lLm9yZyUyRmxpY2Vuc2VzJTJGTElDRU5TRS0yLjAmZGF0YT0wMiU3QzAxJTdDJTdDNjk5YmJi MTcwYjJjNGYwYmYzYWUwOGQ0DQo+PmQ3MzI2MzhhJTdDZmE3YjFiNWE3YjM0NDM4Nzk0YWVkMmMx NzhkZWNlZTElN0MwJTdDMCU3QzYzNjM3MDA1ODgxODc2NjUxMSYNCj4+c2RhdGE9YkJ1dHI1eFhh Y3pobDc0MWladmpYdWIwbDFCNzJkJTJGdkltYWpxRDdtdnlBJTNEJnJlc2VydmVkPTANCj4+IC0v Lw0KPj4gLS8vICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv IGluIHdyaXRpbmcsIHNvZnR3YXJlDQo+PiAtLy8gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQo+PiAtLy8gIFdJVEhPVVQg V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciAN Cj4+aW1wbGllZC4NCj4+IC0vLyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KPj4gLS8vICBsaW1pdGF0aW9ucyB1bmRl ciB0aGUgTGljZW5zZS4NCj4+IC0vLw0KPj4gDQo+Pi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCj4+Ly8vLy8v Ly8NCj4+IC1wYWNrYWdlIG9yZy5hcGFjaGUuZmxleC5odG1sLmJlYWRzLmxheW91dHMNCj4+IC17 DQo+PiAtCWltcG9ydCBvcmcuYXBhY2hlLmZsZXguY29yZS5MYXlvdXRCYXNlOw0KPj4gLQlpbXBv cnQgb3JnLmFwYWNoZS5mbGV4LmNvcmUuSURvY3VtZW50Ow0KPj4gLQlpbXBvcnQgb3JnLmFwYWNo ZS5mbGV4LmNvcmUuSUxheW91dENoaWxkOw0KPj4gLQlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4LmNv cmUuSUxheW91dEhvc3Q7DQo+PiAtCWltcG9ydCBvcmcuYXBhY2hlLmZsZXguY29yZS5JTGF5b3V0 VmlldzsNCj4+IC0JaW1wb3J0IG9yZy5hcGFjaGUuZmxleC5jb3JlLklMYXlvdXRQYXJlbnQ7DQo+ PiAtCWltcG9ydCBvcmcuYXBhY2hlLmZsZXguY29yZS5JUGFyZW50SVVJQmFzZTsNCj4+IC0JaW1w b3J0IG9yZy5hcGFjaGUuZmxleC5jb3JlLklTdHJhbmQ7DQo+PiAtCWltcG9ydCBvcmcuYXBhY2hl LmZsZXguY29yZS5JU3R5bGVhYmxlT2JqZWN0Ow0KPj4gLQlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4 LmNvcmUuSVVJQmFzZTsNCj4+IC0JaW1wb3J0IG9yZy5hcGFjaGUuZmxleC5jb3JlLlZhbHVlc01h bmFnZXI7DQo+PiAtCWltcG9ydCBvcmcuYXBhY2hlLmZsZXguY29yZS5VSUJhc2U7DQo+PiAtCWlt cG9ydCBvcmcuYXBhY2hlLmZsZXguZXZlbnRzLkV2ZW50Ow0KPj4gLQlpbXBvcnQgb3JnLmFwYWNo ZS5mbGV4Lmdlb20uUmVjdGFuZ2xlOw0KPj4gLQlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4LnV0aWxz LkNTU0NvbnRhaW5lclV0aWxzOw0KPj4gLQlpbXBvcnQgb3JnLmFwYWNoZS5mbGV4LnV0aWxzLkNT U1V0aWxzOw0KPj4gLQ0KPj4gLSAgICAvKioNCj4+IC0gICAgICogIFRoZSBPbmVGbGV4aWJsZUNo aWxkSG9yaXpvbnRhbExheW91dExvY2tDaGlsZEhlaWdodCANCj4+IC0JICogIGlzIGEgc3ViY2xh c3Mgb2YgT25lRmxleGlibGVDaGlsZEhvcml6b250YWxMYXlvdXQNCj4+IC0JICogIHRoYXQgc2V0 cyB0aGUgZmxleGlibGUgY2hpbGQncyBoZWlnaHQgdG8gYmUgdGhlIGhlaWdodA0KPj4gLQkgKiAg b2YgdGhlIGhvc3QgY29udGFpbmVyLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3UNCj4+IC0JICog IGRvbid0IHdhbnQgdGhlIGFjdHVhbCBjaGlsZCdzIGhlaWdodCB0byBkaWN0YXRlIHRoZQ0KPj4g LQkgKiAgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgaW4gb3JkZXIgdG8gZm9yY2UNCj4+IC0JICog IHNjcm9sbGJhcnMgb3IgbGluZSB3cmFwcGluZy4NCj4+IC0gICAgICoNCj4+IC0gICAgICogIEBs YW5ndmVyc2lvbiAzLjANCj4+IC0gICAgICogIEBwbGF5ZXJ2ZXJzaW9uIEZsYXNoIDEwLjINCj4+ IC0gICAgICogIEBwbGF5ZXJ2ZXJzaW9uIEFJUiAyLjYNCj4+IC0gICAgICogIEBwcm9kdWN0dmVy c2lvbiBGbGV4SlMgMC4wDQo+PiAtICAgICAqLw0KPj4gLQlwdWJsaWMgY2xhc3MgT25lRmxleGli bGVDaGlsZFZlcnRpY2FsTGF5b3V0TG9ja0NoaWxkV2lkdGggZXh0ZW5kcyANCj4+T25lRmxleGli bGVDaGlsZFZlcnRpY2FsTGF5b3V0DQo+PiAtCXsNCj4+IC0gICAgICAgIC8qKg0KPj4gLSAgICAg ICAgICogIENvbnN0cnVjdG9yLg0KPj4gLSAgICAgICAgICoNCj4+IC0gICAgICAgICAqICBAbGFu Z3ZlcnNpb24gMy4wDQo+PiAtICAgICAgICAgKiAgQHBsYXllcnZlcnNpb24gRmxhc2ggMTAuMg0K Pj4gLSAgICAgICAgICogIEBwbGF5ZXJ2ZXJzaW9uIEFJUiAyLjYNCj4+IC0gICAgICAgICAqICBA cHJvZHVjdHZlcnNpb24gRmxleEpTIDAuMA0KPj4gLSAgICAgICAgICovDQo+PiAtCQlwdWJsaWMg ZnVuY3Rpb24gT25lRmxleGlibGVDaGlsZFZlcnRpY2FsTGF5b3V0TG9ja0NoaWxkV2lkdGgoKQ0K Pj4gLQkJew0KPj4gLQkJCXN1cGVyKCk7DQo+PiAtCQl9DQo+PiAtDQo+PiAtICAgICAgICAvKioN Cj4+IC0gICAgICAgICAqIEBjb3B5IG9yZy5hcGFjaGUuZmxleC5jb3JlLklCZWFkTGF5b3V0I2xh eW91dA0KPj4gLSAgICAgICAgICovDQo+PiAtCQlvdmVycmlkZSBwdWJsaWMgZnVuY3Rpb24gbGF5 b3V0KCk6Qm9vbGVhbg0KPj4gLQkJew0KPj4gLQkJCXZhciByZXQ6Qm9vbGVhbiA9IHN1cGVyLmxh eW91dCgpOw0KPj4gLQkJCWlmIChyZXQpDQo+PiAtCQkJew0KPj4gLQkJCQl2YXIgY29udGVudFZp ZXc6SUxheW91dFZpZXcgPSBsYXlvdXRWaWV3Ow0KPj4gLQkNCj4+IC0JCQkJdmFyIG46aW50ID0g Y29udGVudFZpZXcubnVtRWxlbWVudHM7DQo+PiAtDQo+PiAtCQkJCXZhciB3Ok51bWJlciA9IGhv c3Qud2lkdGg7DQo+PiAtCQkJCWZvcih2YXIgaTppbnQ9MDsgaSA8IG47IGkrKykgew0KPj4gLQkJ CQkJdmFyIGNoaWxkOlVJQmFzZSA9IGNvbnRlbnRWaWV3LmdldEVsZW1lbnRBdChpKSBhcyBVSUJh c2U7DQo+PiAtCQkJCQlpZiAoY2hpbGQgIT0gYWN0dWFsQ2hpbGQpDQo+PiAtCQkJCQkJdyA9IGNo aWxkLndpZHRoOw0KPj4gLQkJCQl9DQo+PiAtCQkJCQ0KPj4gLQkJCQlhY3R1YWxDaGlsZC5zZXRX aWR0aCh3KTsgDQo+PiAtCQkJfQ0KPj4gLQkJCXJldHVybiByZXQ7DQo+PiAtCQl9DQo+PiAtDQo+ PiAtICAgIH0NCj4+IC0NCj4+IC19DQo+PiANCj4+IA0KPj5odHRwczovL25hMDEuc2FmZWxpbmtz LnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwJTNBJTJGJTJGZ2l0LXdpcC11DQo+PnMu YXBhY2hlLm9yZyUyRnJlcG9zJTJGYXNmJTJGZmxleC1hc2pzJTJGYmxvYiUyRmJkZDM0ZDJlJTJG ZnJhbWV3b3JrcyUyRnANCj4+cm9qZWN0cyUyRkJhc2ljJTJGc3JjJTJGbWFpbiUyRnJlc291cmNl cyUyRmJhc2ljLW1hbmlmZXN0LnhtbCZkYXRhPTAyJTdDMA0KPj4xJTdDJTdDNjk5YmJiMTcwYjJj NGYwYmYzYWUwOGQ0ZDczMjYzOGElN0NmYTdiMWI1YTdiMzQ0Mzg3OTRhZWQyYzE3OGRlY2VlDQo+ PjElN0MwJTdDMCU3QzYzNjM3MDA1ODgxODc2NjUxMSZzZGF0YT1tUGxkWUN1RGZwJTJCeFE0UVJP ZHU0QldTbDNEaDdIUDE5VlgNCj4+QlIzQjNJWE9nJTNEJnJlc2VydmVkPTANCj4+IC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4+IGRpZmYgLS1naXQgDQo+PmEvZnJhbWV3b3Jrcy9wcm9qZWN0cy9CYXNpYy9zcmMv bWFpbi9yZXNvdXJjZXMvYmFzaWMtbWFuaWZlc3QueG1sIA0KPj5iL2ZyYW1ld29ya3MvcHJvamVj dHMvQmFzaWMvc3JjL21haW4vcmVzb3VyY2VzL2Jhc2ljLW1hbmlmZXN0LnhtbA0KPj4gaW5kZXgg N2NiYzA1ZC4uMDliYjFhMyAxMDA2NDQNCj4+IC0tLSBhL2ZyYW1ld29ya3MvcHJvamVjdHMvQmFz aWMvc3JjL21haW4vcmVzb3VyY2VzL2Jhc2ljLW1hbmlmZXN0LnhtbA0KPj4gKysrIGIvZnJhbWV3 b3Jrcy9wcm9qZWN0cy9CYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvYmFzaWMtbWFuaWZlc3QueG1s DQo+PiBAQCAtMTUwLDggKzE1MCw4IEBADQo+PiAgICAgPGNvbXBvbmVudCBpZD0iRmxleGlibGVG aXJzdENoaWxkSG9yaXpvbnRhbExheW91dCIgDQo+PmNsYXNzPSJvcmcuYXBhY2hlLmZsZXguaHRt bC5iZWFkcy5sYXlvdXRzLkZsZXhpYmxlRmlyc3RDaGlsZEhvcml6b250YWxMYXkNCj4+b3V0Ii8+ DQo+PiAgICAgPGNvbXBvbmVudCBpZD0iT25lRmxleGlibGVDaGlsZFZlcnRpY2FsTGF5b3V0IiAN Cj4+Y2xhc3M9Im9yZy5hcGFjaGUuZmxleC5odG1sLmJlYWRzLmxheW91dHMuT25lRmxleGlibGVD aGlsZFZlcnRpY2FsTGF5b3V0Ig0KPj4vPg0KPj4gICAgIDxjb21wb25lbnQgaWQ9Ik9uZUZsZXhp YmxlQ2hpbGRIb3Jpem9udGFsTGF5b3V0IiANCj4+Y2xhc3M9Im9yZy5hcGFjaGUuZmxleC5odG1s LmJlYWRzLmxheW91dHMuT25lRmxleGlibGVDaGlsZEhvcml6b250YWxMYXlvdQ0KPj50Ii8+DQo+ PiAtICAgIDxjb21wb25lbnQgaWQ9Ik9uZUZsZXhpYmxlQ2hpbGRWZXJ0aWNhbExheW91dExvY2tD aGlsZFdpZHRoIiANCj4+Y2xhc3M9Im9yZy5hcGFjaGUuZmxleC5odG1sLmJlYWRzLmxheW91dHMu T25lRmxleGlibGVDaGlsZFZlcnRpY2FsTGF5b3V0TA0KPj5vY2tDaGlsZFdpZHRoIi8+DQo+PiAt ICAgIDxjb21wb25lbnQgaWQ9Ik9uZUZsZXhpYmxlQ2hpbGRIb3Jpem9udGFsTGF5b3V0TG9ja0No aWxkSGVpZ2h0IiANCj4+Y2xhc3M9Im9yZy5hcGFjaGUuZmxleC5odG1sLmJlYWRzLmxheW91dHMu T25lRmxleGlibGVDaGlsZEhvcml6b250YWxMYXlvdQ0KPj50TG9ja0NoaWxkSGVpZ2h0Ii8+DQo+ PiArICAgIDxjb21wb25lbnQgaWQ9Ik9uZUZsZXhpYmxlQ2hpbGRWZXJ0aWNhbExheW91dEZvck92 ZXJmbG93IiANCj4+Y2xhc3M9Im9yZy5hcGFjaGUuZmxleC5odG1sLmJlYWRzLmxheW91dHMuT25l RmxleGlibGVDaGlsZFZlcnRpY2FsTGF5b3V0Rg0KPj5vck92ZXJmbG93Ii8+DQo+PiArICAgIDxj b21wb25lbnQgaWQ9Ik9uZUZsZXhpYmxlQ2hpbGRIb3Jpem9udGFsTGF5b3V0Rm9yT3ZlcmZsb3ci IA0KPj5jbGFzcz0ib3JnLmFwYWNoZS5mbGV4Lmh0bWwuYmVhZHMubGF5b3V0cy5PbmVGbGV4aWJs ZUNoaWxkSG9yaXpvbnRhbExheW91DQo+PnRGb3JPdmVyZmxvdyIvPg0KPj4gICAgIDxjb21wb25l bnQgaWQ9Ik1YTUxCZWFkVmlldyIgDQo+PmNsYXNzPSJvcmcuYXBhY2hlLmZsZXguaHRtbC5NWE1M QmVhZFZpZXciLz4NCj4+IA0KPj4gICAgIDxjb21wb25lbnQgaWQ9IlN1YkFwcExvYWRlciIgDQo+ PmNsYXNzPSJvcmcuYXBhY2hlLmZsZXguaHRtbC5TdWJBcHBMb2FkZXIiIC8+DQo+PiANCj4NCg0K