From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id QB54Lo8ltV8EcQAA0tVLHw (envelope-from ) for ; Wed, 18 Nov 2020 13:45:51 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id IAhdKo8ltV9NGQAA1q6Kng (envelope-from ) for ; Wed, 18 Nov 2020 13:45:51 +0000 Received: from mail.notmuchmail.org (nmbug.tethera.net [144.217.243.247]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (2048 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 9AE799404C4 for ; Wed, 18 Nov 2020 13:45:49 +0000 (UTC) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id 3356928C5B; Wed, 18 Nov 2020 08:45:42 -0500 (EST) Received: from knopi.disroot.org (knopi.disroot.org [178.21.23.139]) by mail.notmuchmail.org (Postfix) with ESMTPS id EE7A22710D for ; Wed, 18 Nov 2020 08:45:39 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 2817053454 for ; Wed, 18 Nov 2020 14:45:39 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2Hslu0yDEmS2 for ; Wed, 18 Nov 2020 14:45:36 +0100 (CET) From: Jorge P. de Morais Neto DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1605707136; bh=1iH7ZCilyUU1a9LEAwzm5YLAyt4iUStb6gQs+MRpIBQ=; h=From:To:Subject:In-Reply-To:References:Date; b=by59w9mBh6fmFY5OEO3EsAGPysEI2a+GM5FeKkbH7fVtP1jxJKWKj7PUWrSIAv8vu dqVJHT6+58EC2DuSYs2fJRnfeIT5XxQTsVbFQNY9CsjOpapr9ztYZmq6xvaS+YZGZl pnBaJiojVe9xIbuoLyeqeOTHDuVqXlOZKnVCkp35ZjV3LLj3qzB0YSJbog2p1vGPi1 qz4ddP9WxR4XsMsXIjgF5llQ9FXjVrB4AyfdwRfX3OivdpjlK03E70u5AX37SRGeQZ PURRoRINEudnQZb+L2I38gAAvObU6qS+kkiYbZVb6UtYaCS5fissHxa7R9UtgQlBYA qb00e6eUIdlgw== To: notmuch@notmuchmail.org Subject: Please discard---Corrupted database (notmuch 0.31, Emacs 27.1.50, afew 3.0.1, OfflineIMAP, Python) In-Reply-To: <87lfezpz9t.fsf@disroot.org> References: <87lfezpz9t.fsf@disroot.org> Mail-Followup-To: notmuch@notmuchmail.org Date: Wed, 18 Nov 2020 10:45:32 -0300 Message-ID: <875z62kccj.fsf@disroot.org> Mime-Version: 1.0 Message-ID-Hash: AUQ4JTL6TIV2R3YBG6Z3JOMCAM5IMK64 X-Message-ID-Hash: AUQ4JTL6TIV2R3YBG6Z3JOMCAM5IMK64 X-MailFrom: jorge+list@disroot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-notmuch.notmuchmail.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.1 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Scanner: ns3122888.ip-94-23-21.eu X-Spam-Score: 6.00 Authentication-Results: aspmx1.migadu.com; dkim=fail (body hash did not verify) header.d=disroot.org header.s=mail header.b=by59w9mB; dmarc=fail reason="SPF not aligned (relaxed)" header.from=disroot.org (policy=quarantine); spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 144.217.243.247 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Spam: Yes X-TUID: BwmweAFG+PkS TW9kZXJhdG9yLCBwbGVhc2UgZGlzY2FyZCB0aGUgZW1haWwgY2l0ZWQgYmVsb3cgYW5kIG1lbnRp b25lZCBpbiB0aGUNCkluLVJlcGx5LVRvIGhlYWRlcjogTWVzc2FnZS1JRCA4N2xmZXpwejl0LmZz ZkBkaXNyb290Lm9yZy4gIFRvZGF5IEkNCnN1Ym1pdHRlZCBhbm90aGVyIGNvcHkgKHdpdGggdGhl IGxhcmdlIGF0dGFjaG1lbnQgcmVwbGFjZWQgYnkgYW4gVVJMIHRvDQphIGZpbGUgdXBsb2FkIHNl cnZpY2UpIGFuZCBpdCBhbHJlYWR5IHdlbiB0aHJvdWdoLg0KDQpSZWdhcmRzDQoNCkVtIFsyMDIw LTExLTE3IHRlciAxNjoxOToxMC0wMzAwXSwgSm9yZ2UgUC4gZGUgTW9yYWlzIE5ldG8gZXNjcmV2 ZXU6DQoNCj4gSGkuICBJIHVzZSBOb3RtdWNoIDAuMzEuMiBvbiBFbWFjcyAyNy4xLjUwIChtYW51 YWxseSBjb21waWxlZCBvbg0KPiAyMDIwLTExLTAyKSB3aXRoIG1hdGNoaW5nIHZlcnNpb24tcGlu bmVkIE1FTFBBIFN0YWJsZSBOb3RtdWNoIHBhY2thZ2Ugb24NCj4gdXBkYXRlZCBEZWJpYW4gYnVz dGVyLiAgSSBoYXZlIGVuYWJsZWQgYnVzdGVyLXByb3Bvc2VkLXVwZGF0ZXMsDQo+IGJ1c3Rlci11 cGRhdGVzIGFuZCBidXN0ZXItYmFja3BvcnRzLiAgSSBtYW51YWxseSBiYWNrcG9ydCBub3RtdWNo DQo+IGFjY29yZGluZyB0byA8aHR0cHM6Ly93aWtpLmRlYmlhbi5vcmcvU2ltcGxlQmFja3BvcnRD cmVhdGlvbj4uICBJIHVzZQ0KPiBPZmZsaW5lSU1BUCA3LjMuMyAoUHl0aG9uIDIgcGlwKSwgYWZl dyAzLjAuMSAocGlwMyksIEJvZ29maWx0ZXIgMS4yLjQNCj4gKGJ1c3RlcikgYW5kIGEgY3VzdG9t IFB5dGhvbiAzIHNjcmlwdCBiYXNlZCBvbiB0aGUgfm5vdG11Y2h+IG1vZHVsZS4NCj4NCj4gWWVz dGVyZGF5ICh3aGVuIHN0aWxsIG9uIE5vdG11Y2ggMC4zMSkgSSBub3RpY2VkIHRoYXQsIHdoZW4g SSB0YWdnZWQgYQ0KPiBtZXNzYWdlIG9yIHRocmVhZCwgdGhlIGZpZG8tbW9kZSBjb21wbGV0aW9u IG9mZmVyZWQgbWFueSB3ZWlyZCBjYW5kaWRhdGUNCj4gdGFncyB0aGF0IHNob3VsZG4ndCBleGlz dCBpbiB0aGUgZGF0YWJhc2UuICBBbHNvLCBvbiB0aGUgTm90bXVjaCBIZWxsbw0KPiBzY3JlZW4g dGhlIH5BbGwgdGFnc34gc2VjdGlvbiB3b3VsZCBlcnJvciBvdXQuICBJIHRoZW4gZHVtcGVkIHRo ZQ0KPiBkYXRhYmFzZSAofm5vdG11Y2ggZHVtcH4pIGFuZCBub3RpY2VkIG1hbnkgbGluZXMgYXNz b2NpYXRpbmcgd2VpcmQgdGFncw0KPiB0byB3ZWlyZCBtZXNzYWdlIGlkcy4NCj4NCj4gSW4gYWxt b3N0IGV2ZXJ5IGNhc2UsIGJvdGggdGhlIHdlaXJkIHRhZ3MgYW5kIHRoZSB3ZWlyZCBNZXNzYWdl LUlkDQo+IGNvbnRhaW5lZCB1bmNvbW1vbiBjaGFyYWN0ZXJzLCBvZnRlbiBBU0NJSSBjb250cm9s IGNoYXJhY3RlcnMuICBPbmUgb2YNCj4gdGhlIHdlaXJkIGxpbmVzIHdhcyAiIC0tIGlkOjgiLS0t c3BlY2lmeWluZyBhIG1lc3NhZ2Ugd2l0aCBNZXNzYWdlZC1JRA0KPiAiOCIgYW5kIG5vIHRhZ3Mu ICBJIHRyaWVkIH5ub3RtdWNoIHNob3cgaWQ6OH4gYW5kIGdvdCBhbiBpbnRlcm5hbA0KPiBlcnJv ci0tLXNvbWV0aGluZyBsaWtlICJtZXNzYWdlIHdpdGggZG9jdW1lbnQgSUQgPFNPTUVfTlVNQkVS PiBoYXMgbm8NCj4gdGhyZWFkIElEIi4NCj4NCj4gSSB0aGVuIHVwZ3JhZGVkIE5vdG11Y2ggdG8g MC4zMS4yIGFuZCBjb21wYWN0ZWQgdGhlIGRhdGFiYXNlIGJ1dCB0aGUNCj4gZXJyb3IgcGVyc2lz dGVkLiAgSSB0aGVuIG1hbnVhbGx5IGNsZWFuZWQgdXAgdGhlIGRhdGFiYXNlIGR1bXAsIGRlbGV0 ZWQNCj4gdGhlIH4vb2ZmbGluZWltYXAvSm9yZ2UtRGlzcm9vdC8ubm90bXVjaC94YXBpYW4vIGRp cmVjdG9yeSwgaW52b2tlZA0KPiB+bm90bXVjaCBuZXd+LCBhbmQgfm5vdG11Y2ggcmVzdG9yZX4u ICBJIGNoZWNrZWQgbXkgYmFja3VwcyBmcm9tDQo+IDIwMjAtMTEtMDkgKG5vIGNvcnJ1cHRpb24p IGFuZCAyMDExLTExLTE2LiAgVGhhdCBsYXRlc3QgYmFja3VwIHdhcyBmcm9tDQo+IGJlZm9yZSBJ IC9ub3RpY2VkLyB0aGUgY29ycnVwdGlvbiwgYnV0IGl0IHdhcyBhZmZlY3RlZCB0b28uICBJIHRo ZW4NCj4gZGlmZmVkIGJhY2t1cCAyMDIwLTExLTA5IHdpdGggYmFja3VwIDIwMjAtMTEtMTY7IGFu ZCB0aGVuIGJhY2t1cA0KPiAyMDIwLTExLTE2IHdpdGggdGhlIGN1cnJlbnQgZHVtcC4gIFRoZSBk aWZmcyBzdWdnZXN0IHRoYXQgdGhlIGVycm9yDQo+IGludm9sdmVkIG9ubHkgdGhlIGFkZGl0aW9u IG9mIGludmFsaWQgaW5mb3JtYXRpb247IEkgc3VzcGVjdCBhbmQgaG9wZQ0KPiB0aGF0IHZhbGlk IGluZm9ybWF0aW9uIHdhcyBub3QgbG9zdC4NCj4NCj4gSSBhdHRhY2hlZCBteSBwb3N0LW5ldyBC YXNoIHNjcmlwdCBhbmQgdGhlIFB5dGhvbiAzIHNjcmlwdCBpdCBpbnZva2VzLg0KPiBTbyB5b3Ug Y2FuIHNlZSB0aGUgd2VpcmQgbGluZXMgSSBtZW50aW9uZWQsIEkgYWxzbyBhdHRhY2hlZCB0aGUN Cj4geHotY29tcHJlc3NlZCBvdXRwdXQgb2YgdGhlIGNvbW1hbmQ6DQo+DQo+ICAgICBkaWZmIC11 IG5vdG11Y2hfZHVtcC0tbWFudWFsbHlfZml4ZWQgbm90bXVjaF9kdW1wLS1jb3JydXB0ZWQgPiBk aWZmX25vdG11Y2hfZHVtcF9fbWFudWFsbHlfZml4ZWQtLWNvcnJ1cHRlZA0KPg0KPiBJIGhhdmUg YWxzbyBzYXZlZCB0aGUgYmluYXJ5IGNvcnJ1cHRlZCBkYXRhYmFzZS4gIElmIHlvdSB3YW50IHRv IHNlZSBpdCwNCj4gdGhlbiB0ZWxsIG1lIGFuZCBJIG1heSB1cGxvYWQgaXQgdG8gRGlzcm9vdCdz IEx1ZmkgaW5zdGFuY2UuICBJdCBzaG91bGQNCj4gcHJvYmFibHkgYmUgc2hvd24gdG8gYXMgZmV3 IHBlb3BsZSBhcyBwb3NzaWJsZSBmb3IgdGhlIHNha2Ugb2YgbXkNCj4gcHJpdmFjeS4NCj4NCj4g RmluYWxseSwgbXkgbm90bXVjaCBjb25maWcgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBkaXJlY3Rp dmVzICh0aGUgb3RoZXINCj4gZGlyZWN0aXZlcyBhcmUgcHJvYmFibHkgaXJyZWxldmFudCB0byB5 b3UpOg0KPg0KPiAgICAgW25ld10NCj4gICAgIHRhZ3M9bmV3DQo+ICAgICBpZ25vcmU9DQo+DQo+ ICAgICBbc2VhcmNoXQ0KPiAgICAgZXhjbHVkZV90YWdzPWRlbGV0ZWQ7c3BhbTt0cmFzaA0KPg0K PiAgICAgW21haWxkaXJdDQo+ICAgICBzeW5jaHJvbml6ZV9mbGFncz10cnVlDQo+DQo+IFJlZ2Fy ZHMNCj4NCj4gIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMw0KPiAiIiJNYWlsIGZpbHRlciAoaW5jbHVk aW5nIGFudGktc3BhbSkgYW5kIG5vdGlmaWVyIGZvciBOb3RtdWNoLg0KPg0KPiBUcmFjayBtZXNz YWdlcyBjbGFzc2lmaWVkIGFzIHNwYW0gKG9yIGhhbSkgYnkgQm9nb2ZpbHRlciB2aWEgJy5iZl9z cGFtJw0KPiAocmVzcC4gJy5iZl9oYW0nICkgdGFncy4gIFNpbmNlIGFmZXcgcmVtb3ZlcyB0aGUg YG5ldycgdGFnLCB3aGVuDQo+IG5vdGlmeWluZyBtYWlsIHdlIHRyYWNrIG5ldyBtZXNzYWdlcyB3 aXRoIGEgdGVtcG9yYXJ5IHRhZyAob3B0aW9uDQo+ICctLXRtcCcgb2YgYGZpbHRlcicgc3ViY29t bWFuZCkgd2hpY2ggd2UgYXNzdW1lIG5vdCB0byBwcmVleGlzdCBpbiB0aGUNCj4gZGF0YWJhc2Uu ICBUaGVzZSB0YWdzIGFuZCB0aGF0IGFkZGVkIGJ5IHRoZSB1c2VyIHRvIHNwYW0gbWVzc2FnZXMg Y2FuIGJlDQo+IGN1c3RvbWl6ZWQgdmlhIGNvbW1hbmQtbGluZSBvcHRpb25zIG9yLCBmcm9tIFB5 dGhvbiwgYnkgbW9kaWZ5aW5nDQo+IG1vZHVsZS1sZXZlbCBjb25zdGFudHMgb3IgYnkgdmlhIGZ1 bmN0aW9uIGFyZ3VtZW50cy4NCj4NCj4gVGhpcyBzY3JpcHQgaXMgcG90ZW50aWFsbHkgYWZmZWN0 ZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBmaWxlcyBhbmQNCj4gZGlyZWN0b3JpZXMgdGhh dCBhZmZlY3QgYWZldywgQm9nb2ZpbHRlciwgTm90bXVjaCBvciAob2J2aW91c2x5KQ0KPiBQeXRo b24zLCBpbmNsdWRpbmc6DQo+IDEuIGBOT1RNVUNIX0NPTkZJRycg4oCTIGxvY2F0aW9uIG9mIE5v dG11Y2ggY29uZmlndXJhdGlvbiBmaWxlIOKAkyBhbmQgdGhhdA0KPiAgICBmaWxlIGl0c2VsZi4N Cj4gMi4gYEJPR09GSUxURVJfRElSJyDigJMgbG9jYXRpb24gb2YgQm9nb2ZpbHRlcidzIGRhdGFi YXNlIGRpcmVjdG9yeSDigJMgYW5kDQo+ICAgIHRoYXQgZGlyZWN0b3J5IGl0c2VsZi4NCj4gMy4g YWZldyBjb25maWd1cmF0aW9uLg0KPg0KPiBXSVNIOiBBY2NlcHQgY3VzdG9taXphYmxlICJuZXci IGZsYWdzIChjdXJyZW50bHkgd2UgYXNzdW1lICJuZXciKS4NCj4gIiIiDQo+ICMgV0lTSDogRmlu aXNoIGRvY3VtZW50aW5nIHRoZSBleGNlcHRpb25zIHBvc3NpYmx5IHJhaXNlZCBieSBlYWNoIGZ1 bmN0aW9uDQo+IGltcG9ydCBsb2dnaW5nDQo+IGltcG9ydCBzeXMNCj4gaW1wb3J0IHRpbWUNCj4g ZnJvbSBhcmdwYXJzZSBpbXBvcnQgQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIsIEFyZ3Vt ZW50UGFyc2VyLCBOYW1lc3BhY2UNCj4gZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwNCj4g ZnJvbSBsb2dnaW5nIGltcG9ydCBoYW5kbGVycw0KPiBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFBJ UEUsIFNURE9VVCwgUG9wZW4sIHJ1bg0KPiBmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBDYWxsYWJs ZSwgSXRlcmFibGUsIE9wdGlvbmFsLCBUdXBsZSwgVW5pb24NCj4NCj4gZnJvbSBub3RtdWNoIGlt cG9ydCBEYXRhYmFzZSwgTWVzc2FnZQ0KPg0KPiAjIGh0dHBzOi8vd2lraS5hcmNobGludXgub3Jn L2luZGV4LnBocC9EZXNrdG9wX25vdGlmaWNhdGlvbnMjUHl0aG9uDQo+IGltcG9ydCBnaSAgICAg ICAgICAgICAgICAgICAgICAgIyBpc29ydDpza2lwDQo+IGdpLnJlcXVpcmVfdmVyc2lvbignTm90 aWZ5JywgJzAuNycpDQo+ICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1wb3NpdGlvbg0K PiBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IE5vdGlmeSAgIyBub3FhOiBFNDAyIGlzb3J0OnNr aXANCj4NCj4gVGFncyA9IFVuaW9uW3N0ciwgSXRlcmFibGVbc3RyXV0NCj4NCj4gTE9HID0gbG9n Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pDQo+IEZJTFRFUl9BQ1RJT05TID0geydzcGFtJywgJ2dl bmVyYWwnLCAnbm90aWZ5J30NCj4NCj4gIyBEZWZhdWx0cyBmb3IgY29tbWFuZC1saW5lIG9wdGlv bnMNCj4gQkZfSEFNID0gJy5iZl9oYW0nDQo+IEJGX1NQQU0gPSAnLmJmX3NwYW0nDQo+IFVTRVJf U1BBTSA9ICdzcGFtJw0KPiBUTVAgPSAnX3NpbXBsZW11Y2hfdG1wJw0KPg0KPg0KPiBjbGFzcyBT aW1wbGVtdWNoRXJyb3IoRXhjZXB0aW9uKToNCj4gICAgICIiIkJhc2UgY2xhc3MgZm9yIHNpbXBs ZW11Y2ggZXhjZXB0aW9uIGNsYXNzZXMiIiINCj4NCj4NCj4gY2xhc3MgTm90bXVjaERhdGFiYXNl TmVlZHNVcGdyYWRlRXJyb3IoU2ltcGxlbXVjaEVycm9yKToNCj4gICAgICIiIm5lZWRzX3VwZ3Jh ZGUoKSByZXR1cm5lZCBUcnVlLiIiIg0KPg0KPg0KPiAjIFdJU0ggQ2FwdHVyZSBtb3JlIGluZm9y bWF0aW9uLCBlLmcuIHJldHVybiBjb2RlIGFuZCBjb21tYW5kIGxpbmUNCj4gY2xhc3MgQm9nb2Zp bHRlckVycm9yKFNpbXBsZW11Y2hFcnJvcik6DQo+ICAgICAiIiJFcnJvciBmcm9tIEJvZ29maWx0 ZXIiIiINCj4NCj4NCj4gIyBkZWYgdGVzdGVfbXlweShpOiBpbnQpIC0+IE5vbmU6DQo+ICMgICAg IHJldHVybiBpICsgJycNCj4NCj4gZGVmIGFsZXJ0KHN1bW1hcnk6IHN0ciwNCj4gICAgICAgICAg IGJvZHk6IHN0ciwNCj4gICAgICAgICAgICphcmdzOiBBbnksDQo+ICAgICAgICAgICBmdW46IENh bGxhYmxlWy4uLiwgTm9uZV0gPSBMT0cud2FybmluZykgLT4gTm9uZToNCj4gICAgICIiIlNob3cg ZGVza3RvcCBub3RpZmljYXRpb24gLS0gYHN1bW1hcnknLCBgYm9keScgLS0gYW5kIGxvZy4NCj4N Cj4gICAgIExvZ3Mgd2l0aCBmdW4oYm9keSwgKmFyZ3MpLg0KPiAgICAgIiIiDQo+ICAgICBpZiBm dW4gaW4gKExPRy5leGNlcHRpb24sIExPRy5lcnJvcik6DQo+ICAgICAgICAga3dhcmdzID0geydp Y29uJzogJ2RpYWxvZy1lcnJvcid9DQo+ICAgICBlbGlmIGZ1biBpbiAoTE9HLndhcm4sIExPRy53 YXJuaW5nKToNCj4gICAgICAgICBrd2FyZ3MgPSB7J2ljb24nOiAnZGlhbG9nLXdhcm5pbmcnfQ0K PiAgICAgZWxzZToNCj4gICAgICAgICBrd2FyZ3MgPSB7fQ0KPiAgICAgTm90aWZ5Lk5vdGlmaWNh dGlvbi5uZXcoc3VtbWFyeSwgYm9keSAlIGFyZ3MsICoqa3dhcmdzKS5zaG93KCkNCj4gICAgIGZ1 bihib2R5LCAqYXJncykNCj4NCj4NCj4gZGVmIHNhZmVfb3Blbl9kYl9ydygpIC0+IERhdGFiYXNl Og0KPiAgICAgIiIiT3BlbiBOb3RtdWNoIGRhdGFiYXNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5n IGFuZCByZXR1cm4gaXQuDQo+DQo+ICAgICBCZWZvcmUgcmV0dXJuaW5nLCBjaGVjayBpZiB0aGUg ZGF0YWJhc2UgbmVlZHMgdXBncmFkZTsgaWYgc28sIHJhaXNlDQo+ICAgICBOb3RtdWNoRGF0YWJh c2VOZWVkc1VwZ3JhZGVFcnJvci4NCj4gICAgICIiIg0KPiAgICAgbm1fZGIgPSBEYXRhYmFzZSht b2RlPURhdGFiYXNlLk1PREUuUkVBRF9XUklURSkNCj4gICAgIGlmIG5tX2RiLm5lZWRzX3VwZ3Jh ZGUoKToNCj4gICAgICAgICByYWlzZSBOb3RtdWNoRGF0YWJhc2VOZWVkc1VwZ3JhZGVFcnJvcigN Cj4gICAgICAgICAgICAgJ05vdG11Y2ggZGF0YWJhc2UgbmVlZHMgdXBncmFkZS4gIEV4aXRpbmcg d2l0aG91dCBhY3Rpb24uXG4nDQo+ICAgICAgICAgICAgICdXSVNIIEltcGxlbWVudCBjb3JyZWN0 IGRhdGFiYXNlIHVwZ3JhZGluZycpDQo+ICAgICByZXR1cm4gbm1fZGINCj4NCj4NCj4gZGVmIHVw ZGF0ZShubV9kYjogRGF0YWJhc2UsIGFyZ3M6IE5hbWVzcGFjZSwgcXVlcnk6IHN0ciwNCj4gICAg ICAgICAgICBvcHI6IHN0cikgLT4gVHVwbGVbaW50LCBmbG9hdF06DQo+ICAgICAiIiJDYWxsIGJv Z29maWx0ZXIgb24gbWVzc2FnZXMgbWF0Y2hpbmcgYHF1ZXJ5JywgY2hhbmdlIHRoZWlyIHRhZ3Mu DQo+DQo+ICAgICBDYWxsIGBib2dvZmlsdGVyJyB3aXRoIGNvbW1hbmQtbGluZSBvcHRpb24gYG9w cicgKHBsdXMgLWJsKSBhbmQgZmVlZA0KPiAgICAgaXQgKHZpYSBzdGRpbikgdGhlIGZpbGVuYW1l cyBvZiBtZXNzYWdlcyBtYXRjaGluZyBOb3RtdWNoIHF1ZXJ5DQo+ICAgICBgcXVlcnknLiAgRm9y IGVhY2ggc3VjaCBtZXNzYWdlLCBhcHBseSB0aGUgY29ycmVzcG9uZGluZyB0YWcgY2hhbmdlDQo+ ICAgICAoYWNjb3JkaW5nIHRvIGBhcmdzLmJmX3NwYW0nIGFuZCBgYXJncy5iZl9oYW0nKS4gIGBv cHInIG11c3QgYmUgaW4NCj4gICAgIHNldCgnU3NObicpIChzZWUgYm9nb2ZpbHRlcigxKSBmb3Ig dGhlIG1lYW5pbmcpLiAgUmV0dXJuIHRoZSBudW1iZXINCj4gICAgIG9mIG1lc3NhZ2VzIG9wZXJh dGVkIG9uIGFuZCB0aGUgZWxhcHNlZCB0aW1lLg0KPg0KPiAgICAgVGhpcyBmdW5jdGlvbiBpcyBw b3RlbnRpYWxseSBhZmZlY3RlZCBieSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsDQo+ICAgICBmaWxl cyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhZmZlY3QgQm9nb2ZpbHRlciBvciBOb3RtdWNoLg0KPg0K PiAgICAgVE9ETyBIYW5kbGUgYm9nb2ZpbHRlciBlcnJvcnMNCj4gICAgICIiIg0KPiAgICAgc3Rh cnQgPSB0aW1lLnRpbWUoKQ0KPiAgICAgYXNzZXJ0IG9wciBpbiBzZXQoJ1NzTm4nKQ0KPiAgICAg dGFnXyA9IGFyZ3MuYmZfc3BhbSBpZiBvcHIgaW4gJ3NTJyBlbHNlIGFyZ3MuYmZfaGFtDQo+ICAg ICBpZiBvcHIgaW4gJ3NuJzoNCj4gICAgICAgICBkZWYgdGFnKG1zZzogTWVzc2FnZSkgLT4gTm9u ZToNCj4gICAgICAgICAgICAgbXNnLmFkZF90YWcodGFnXykNCj4gICAgIGVsc2U6DQo+ICAgICAg ICAgZGVmIHRhZyhtc2c6IE1lc3NhZ2UpIC0+IE5vbmU6DQo+ICAgICAgICAgICAgIG1zZy5yZW1v dmVfdGFnKHRhZ18pDQo+ICAgICBudW0gPSAwDQo+ICAgICB3aXRoIFBvcGVuKCgnYm9nb2ZpbHRl cicsICctYmwnICsgb3ByKSwgc3RkaW49UElQRSwgdGV4dD1UcnVlLA0KPiAgICAgICAgICAgICAg ICBidWZzaXplPTEpIGFzIGJvZ286DQo+ICAgICAgICAgYXNzZXJ0IGJvZ28uc3RkaW4gICAgICAg IyBQbGFjYXRlIG15cHkNCj4gICAgICAgICBmb3IgbXNnIGluIG5tX2RiLmNyZWF0ZV9xdWVyeShx dWVyeSkuc2VhcmNoX21lc3NhZ2VzKCk6DQo+ICAgICAgICAgICAgIGJvZ28uc3RkaW4ud3JpdGUo bXNnLmdldF9maWxlbmFtZSgpICsgJ1xuJykNCj4gICAgICAgICAgICAgdGFnKG1zZykNCj4gICAg ICAgICAgICAgbnVtICs9IDENCj4gICAgIGlmIGJvZ28ucmV0dXJuY29kZToNCj4gICAgICAgICBy YWlzZSBCb2dvZmlsdGVyRXJyb3IoZidCb2dvZmlsdGVyIHJldHVybmVkIHtib2dvLnJldHVybmNv ZGV9JykNCj4gICAgIHJldHVybiBudW0sIHRpbWUudGltZSgpIC0gc3RhcnQNCj4NCj4NCj4gZGVm IHRyYWluKGFyZ3M6IE5hbWVzcGFjZSkgLT4gTm9uZToNCj4gICAgICIiIlRyYWluIEJvZ29maWx0 ZXIgb24gdGhlIE5vdG11Y2ggZGF0YWJhc2UuDQo+DQo+ICAgICBBY2NvcmRpbmcgdG8gaG93IHRo ZSB1c2VyIGNsYXNzaWZpZWQgdGhlIGdpdmVuIG1lc3NhZ2UgKHNwYW0gb3INCj4gICAgIGhhbSks IHVwZGF0ZSBTaW1wbGVtdWNoIHRhZ3MgKGBhcmdzLmJmX3NwYW0nIGFuZCBgYXJncy5iZl9oYW0n KSBhbmQNCj4gICAgIEJvZ29maWx0ZXIncyBkYXRhYmFzZS4gIFdlIGFzc3VtZSB0aGUgdXNlciBj bGFzc2lmaWVkIGEgbWVzc2FnZSBhcw0KPiAgICAgc3BhbSBpZiBpdCBpcyB0YWdnZWQgYGFyZ3Mu dXNlcl9zcGFtJzsgYW5kIGhlIGNsYXNzaWZpZWQgaXQgYXMgaGFtDQo+ICAgICBpZiBpdCBoYXMg YmVlbiByZWFkIGJ1dCBub3QgdGFnZ2VkIGBhcmdzLnVzZXJfc3BhbScuDQo+DQo+ICAgICBUaGVy ZWZvcmUgd2UgYXNzdW1lIHRoYXQ6DQo+ICAgICAxLiAgTWVzc2FnZXMgdGFnZ2VkIGBhcmdzLnVz ZXJfc3BhbScgYXJlIGluIGZhY3Qgc3BhbS4NCj4gICAgIDIuICBTcGFtbXkgcmVhZCBtZXNzYWdl cyBhcmUgdGFnZ2VkIGBhcmdzLnVzZXJfc3BhbScuDQo+ICAgICAzLiAgTWVzc2FnZXMgdGFnZ2Vk IGBhcmdzLmJmX3NwYW0nIGFyZSBhbHNvIHRhZ2dlZCBgYXJncy51c2VyX3NwYW0nLA0KPiAgICAg ICAgIHVubGVzcyB0aGV5IGFyZSBmYWxzZSBwb3NpdGl2ZXMuDQo+DQo+ICAgICBBIHByb2JsZW1h dGljIHNjZW5hcmlvIGlzIHdoZW4gdGhlIHVzZXIgcmVhZHMgc3BhbSBpbiB3ZWJtYWlsIGJ1dA0K PiAgICAgZm9yZ2V0cyB0byB0YWcgaXQgYXMgc3BhbSBpbiBOb3RtdWNoLg0KPg0KPiAgICAgVGhp cyBmdW5jdGlvbiBpcyBwb3RlbnRpYWxseSBhZmZlY3RlZCBieSBlbnZpcm9ubWVudCB2YXJpYWJs ZXMsDQo+ICAgICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhZmZlY3QgQm9nb2ZpbHRlciBv ciBOb3RtdWNoLg0KPiAgICAgIiIiDQo+ICAgICB3aXRoIHNhZmVfb3Blbl9kYl9ydygpIGFzIG5t X2RiOg0KPiAgICAgICAgIGRlZiB0cmFpbl8ocXVlcnk6IHN0ciwgb3ByOiBzdHIsIG9iajogc3Ry KSAtPiBOb25lOg0KPiAgICAgICAgICAgICBhc3NlcnQgb3ByIGluIHNldCgnU3NObicpDQo+ICAg ICAgICAgICAgIG9wcl8gPSAnUmVnaXN0ZXInIGlmIG9wciBpbiAnc24nIGVsc2UgJ1VucmVnaXN0 ZXInDQo+ICAgICAgICAgICAgIGVuZCA9IGYne29wcl99ZWQgJWQge29ian0gaW4gJS4zZ3MnDQo+ ICAgICAgICAgICAgIExPRy5pbmZvKCclcyAlcycsIG9wcl8sIG9iaikNCj4gICAgICAgICAgICAg bnVtLCBkdXIgPSB1cGRhdGUobm1fZGIsIGFyZ3MsIHF1ZXJ5LCBvcHIpDQo+ICAgICAgICAgICAg IExPRy5pbmZvKGVuZCwgbnVtLCBkdXIpDQo+DQo+ICAgICAgICAgYmZfc3BhbSwgYmZfaGFtLCB1 c2VyX3NwYW0gPSBhcmdzLmJmX3NwYW0sIGFyZ3MuYmZfaGFtLCBhcmdzLnVzZXJfc3BhbQ0KPiAg ICAgICAgIHRyYWluXyhmJ2lzOnt1c2VyX3NwYW19IE5PVCBpczp7YmZfc3BhbX0nLCAncycsICdz cGFtJykNCj4gICAgICAgICB0cmFpbl8oZidpczp7YmZfc3BhbX0gTk9UIGlzOnt1c2VyX3NwYW19 JywgJ1MnLCAnKGZhbHNlKSBzcGFtJykNCj4gICAgICAgICB0cmFpbl8oZidOT1QgKGlzOnt1c2Vy X3NwYW19IGlzOnVucmVhZCBpczp7YmZfaGFtfSknLCAnbicsICdoYW0nKQ0KPiAgICAgICAgIHRy YWluXyhmJ2lzOnt1c2VyX3NwYW19IEFORCBpczp7YmZfaGFtfScsICdOJywgJyhmYWxzZSkgaGFt JykNCj4NCj4NCj4gZGVmIGNvdW50KG5tX2RiOiBEYXRhYmFzZSwgcXVlcnk6IHN0ciwgZXhjbHVk ZTogVGFncyA9ICgpKSAtPiBpbnQ6DQo+ICAgICAiIiJSZXR1cm4gWGFwaWFu4oCZcyBiZXN0IGd1 ZXNzIGFzIHRvIGhvdyBtYW55IG1lc3NhZ2VzIG1hdGNoIGBxdWVyeScuDQo+DQo+ICAgICBgZXhj bHVkZScsIGlmIHByb3ZpZGVkLCBtdXN0IGNvbnRhaW4gdGFncyB0byBleGNsdWRlIGZyb20gdGhl IGNvdW50DQo+ICAgICBieSBkZWZhdWx0LiAgQSBnaXZlbiB0YWcgd2lsbCBub3QgYmUgZXhjbHVk ZWQgaWYgaXQgYXBwZWFycw0KPiAgICAgZXhwbGljaXRseSBpbiBgcXVlcnknLg0KPg0KPiAgICAg TWF5IHJhaXNlOg0KPiAgICAgLSBgTnVsbFBvaW50ZXJFcnJvcicgaWYgdGhlIHF1ZXJ5IGNyZWF0 aW9uIGZhaWxlZCAoZS5nLiB0b28gbGl0dGxlDQo+ICAgICAgIG1lbW9yeSkuDQo+ICAgICAtIGBO b3RJbml0aWFsaXplZEVycm9yJyBpZiB0aGUgdW5kZXJseWluZyBkYiB3YXMgbm90IGluaXRpYWxp emVkLg0KPg0KPiAgICAgVGhpcyBmdW5jdGlvbiBpcyBwb3RlbnRpYWxseSBhZmZlY3RlZCBieSBl bnZpcm9ubWVudCB2YXJpYWJsZXMsDQo+ICAgICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBh ZmZlY3QgTm90bXVjaC4NCj4NCj4gICAgIFdJU0ggRmluZCBvdXQgYW5kIGRvY3VtZW50IHdoYXQg ImJlc3QgZ3Vlc3MiIG1lYW5zOyB0aGlzIHdvcmRpbmcgaXMNCj4gICAgIGZyb20gdGhlIGRvY3Vt ZW50YXRpb24gb2Ygbm90bXVjaCBQeXRob24gYmluZGluZ3MuDQo+ICAgICAiIiINCj4gICAgIHF1 ZXJ5XyA9IG5tX2RiLmNyZWF0ZV9xdWVyeShxdWVyeSkNCj4gICAgIGlmIGlzaW5zdGFuY2UoZXhj bHVkZSwgc3RyKToNCj4gICAgICAgICBxdWVyeV8uZXhjbHVkZV90YWcoZXhjbHVkZSkNCj4gICAg IGVsc2U6DQo+ICAgICAgICAgZm9yIHRhZyBpbiBleGNsdWRlOg0KPiAgICAgICAgICAgICBxdWVy eV8uZXhjbHVkZV90YWcodGFnKQ0KPiAgICAgcmV0dXJuIHF1ZXJ5Xy5jb3VudF9tZXNzYWdlcygp DQo+DQo+DQo+IGRlZiBmaWx0ZXJfc3BhbShubV9kYjogRGF0YWJhc2UsIHF1ZXJ5OiBzdHIsIGhh bTogT3B0aW9uYWxbc3RyXSA9IE5vbmUsDQo+ICAgICAgICAgICAgICAgICBzcGFtOiBPcHRpb25h bFtzdHJdID0gTm9uZSkgLT4gTm9uZToNCj4gICAgICIiIkZpbHRlciAoQm9nb2ZpbHRlcikgdGhl IG1lc3NhZ2VzIG1hdGNoaW5nIE5vdG11Y2ggcXVlcnkgYHF1ZXJ5Jy4NCj4NCj4gICAgIElmIEJv Z29maWx0ZXIgY2xhc3NpZmllcyBhIGdpdmVuIG1lc3NhZ2UgYXMgU3BhbS9IYW0gdGhlbiB0YWcg aXQNCj4gICAgIGBzcGFtJy9gaGFtJyAoZGVmYXVsdGluZyB0byBgQkZfU1BBTScvYEJGX0hBTScp Lg0KPg0KPiAgICAgVGhpcyBmdW5jdGlvbiBpcyBwb3RlbnRpYWxseSBhZmZlY3RlZCBieSBlbnZp cm9ubWVudCB2YXJpYWJsZXMsDQo+ICAgICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhZmZl Y3QgQm9nb2ZpbHRlciBvciBOb3RtdWNoLg0KPiAgICAgIiIiDQo+ICAgICB0YWcgPSBkaWN0KEg9 aGFtIG9yIEJGX0hBTSwgUz1zcGFtIG9yIEJGX1NQQU0pDQo+ICAgICB3aXRoIFBvcGVuKCgnYm9n b2ZpbHRlcicsICctYmxUJyksIHN0ZGluPVBJUEUsIHN0ZG91dD1QSVBFLCB0ZXh0PVRydWUsDQo+ ICAgICAgICAgICAgICAgIGJ1ZnNpemU9MSkgYXMgYm9nbzoNCj4gICAgICAgICBhc3NlcnQgYm9n by5zdGRpbiBhbmQgYm9nby5zdGRvdXQgICMgUGxhY2F0ZSBteXB5DQo+ICAgICAgICAgZm9yIG1z ZyBpbiBubV9kYi5jcmVhdGVfcXVlcnkocXVlcnkpLnNlYXJjaF9tZXNzYWdlcygpOg0KPiAgICAg ICAgICAgICBib2dvLnN0ZGluLndyaXRlKG1zZy5nZXRfZmlsZW5hbWUoKSArICdcbicpDQo+ICAg ICAgICAgICAgIGNvZGUgPSBib2dvLnN0ZG91dC5yZWFkbGluZSgpLnNwbGl0KClbLTJdDQo+ICAg ICAgICAgICAgIGlmIGNvZGUgIT0gJ1UnOg0KPiAgICAgICAgICAgICAgICAgbXNnLmFkZF90YWco dGFnW2NvZGVdKQ0KPiAgICAgICAgICAgICAgICAgbXNnX2lkID0gbXNnLmdldF9tZXNzYWdlX2lk KCkNCj4gICAgICAgICAgICAgICAgIExPRy5kZWJ1ZygnTWVzc2FnZSAlcyBtYXJrZWQgJXMnLCBt c2dfaWQsIHRhZ1tjb2RlXSkNCj4NCj4NCj4gZGVmIHRhZ19zZWFyY2gobm1fZGI6IERhdGFiYXNl LCBxdWVyeTogc3RyLCBhZGQ6IFRhZ3MgPSAoKSwNCj4gICAgICAgICAgICAgICAgcmVtb3ZlOiBU YWdzID0gKCkpIC0+IE5vbmU6DQo+ICAgICAiIiJBZGQvcmVtb3ZlIHRhZ3MgZnJvbSBtZXNzYWdl cyBtYXRjaGluZyBOb3RtdWNoIGBxdWVyeScuDQo+DQo+ICAgICBgbm1fZGInIG11c3QgYmUgb3Bl biBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4gIGBxdWVyeScgc2hvdWxkIGJlIGENCj4gICAgIE5v dG11Y2ggcXVlcnkgb24gd2hvc2UgcmVzdWx0cyB3ZSBzaG91bGQgYWN0LiAgT3BlcmF0ZSBhdG9t aWNhbGx5IG9uDQo+ICAgICB0aGUgc2V0IG9mIG1lc3NhZ2VzIG1hdGNoaW5nIGBxdWVyeScuDQo+ DQo+ICAgICBNYXkgcmFpc2U6DQo+ICAgICAtIGBYYXBpYW5FcnJvcicg4oCTIHNlZSBkb2N1bWVu dGF0aW9uIG9mIGBiZWdpbl9hdG9taWMoKScgYW5kDQo+ICAgICAgIGBlbmRfYXRvbWljKCknIG1l dGhvZHMgb2YgYERhdGFiYXNlJw0KPiAgICAgLSBgTnVsbFBvaW50ZXJFcnJvcicgaWYgbm90bXVj aCBxdWVyeSBjcmVhdGlvbiBmYWlsZWQgKGUuZy4gdG9vDQo+ICAgICAgIGxpdHRsZSBtZW1vcnkp IG9yIGBzZWFyY2hfbWVzc2FnZXMoKScgZmFpbGVkDQo+ICAgICAtIGBOb3RJbml0aWFsaXplZEVy cm9yJyBpZiB0aGUgdW5kZXJseWluZyBkYiB3YXMgbm90IGluaXRpYWxpemVkDQo+ICAgICAtIGBO dWxsUG9pbnRlckVycm9yJyBpZiBhIGdpdmVuIHRhZyBpcyBOVUxMDQo+ICAgICAtIGBUYWdUb29M b25nRXJyb3InIGlmIHRoZSBsZW5ndGggb2YgYSBnaXZlbiB0YWcgZXhjZWVkcw0KPiAgICAgICBu b3RtdWNoLk1lc3NhZ2UuTk9UTVVDSF9UQUdfTUFYKQ0KPiAgICAgLSBgUmVhZE9ubHlEYXRhYmFz ZUVycm9yJyBpZiB0aGUgZGF0YWJhc2Ugd2FzIG9wZW5lZCBpbiByZWFkLW9ubHkNCj4gICAgICAg bW9kZQ0KPiAgICAgLSBgTm90SW5pdGlhbGl6ZWRFcnJvcicgaWYgbWVzc2FnZSBoYXMgbm90IGJl ZW4gaW5pdGlhbGl6ZWQNCj4NCj4gICAgIFRoaXMgZnVuY3Rpb24gaXMgcG90ZW50aWFsbHkgYWZm ZWN0ZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGVzLA0KPiAgICAgZmlsZXMgYW5kIGRpcmVjdG9y aWVzIHRoYXQgYWZmZWN0IE5vdG11Y2guDQo+ICAgICAiIiINCj4gICAgIG5tX2RiLmJlZ2luX2F0 b21pYygpDQo+ICAgICBmb3IgbXNnIGluIG5tX2RiLmNyZWF0ZV9xdWVyeShxdWVyeSkuc2VhcmNo X21lc3NhZ2VzKCk6DQo+ICAgICAgICAgaWYgaXNpbnN0YW5jZShhZGQsIHN0cik6DQo+ICAgICAg ICAgICAgIG1zZy5hZGRfdGFnKGFkZCkNCj4gICAgICAgICBlbHNlOg0KPiAgICAgICAgICAgICBm b3IgdGFnIGluIGFkZDoNCj4gICAgICAgICAgICAgICAgIG1zZy5hZGRfdGFnKHRhZykNCj4gICAg ICAgICBpZiBpc2luc3RhbmNlKHJlbW92ZSwgc3RyKToNCj4gICAgICAgICAgICAgbXNnLnJlbW92 ZV90YWcocmVtb3ZlKQ0KPiAgICAgICAgIGVsc2U6DQo+ICAgICAgICAgICAgIGZvciB0YWcgaW4g cmVtb3ZlOg0KPiAgICAgICAgICAgICAgICAgbXNnLnJlbW92ZV90YWcodGFnKQ0KPiAgICAgbm1f ZGIuZW5kX2F0b21pYygpDQo+DQo+DQo+IGRlZiBmaWx0ZXJfbm90aWZ5KGFyZ3M6IE5hbWVzcGFj ZSkgLT4gTm9uZToNCj4gICAgICIiIkZpbHRlciBtYWlsIChhZmV3LCBCb2dvZmlsdGVyIGFuZCBO b3RtdWNoKSBhbmQgbm90aWZ5Lg0KPg0KPiAgICAgLSBgYXJncy5yZXEnIG11c3QgYmUgYSBjb250 YWluZXIgd2l0aCBlbGVtZW50cyBvZiBGSUxURVJfQUNUSU9OUyB3ZQ0KPiAgICAgICBzaG91bGQg YWN0IG9uIChyZXF1ZXN0ZWQgYWN0aW9ucykuDQo+ICAgICAtIElmIFwiYXJncy5yZXFbJ3NwYW0n XVwiIGlzIFRydWUgdGhlbiBgYXJncy5xdWVyeScgbXVzdCBiZSBhIHN0cmluZw0KPiAgICAgICBy ZXByZXNlbnRpbmcgYSBOb3RtdWNoIHF1ZXJ5IChvbiB3aG9zZSByZXN1bHRzIHRoZSBzcGFtIGZp bHRlcg0KPiAgICAgICB3aWxsIHdvcmspIGFuZCBgYXJncy5iZl9oYW0nLCBgYXJncy5iZl9zcGFt JyBtdXN0IGJlIHRoZSB0YWdzIHRvDQo+ICAgICAgIGFkZCB0byBtZXNzYWdlcyB0aGF0IEJvZ29m aWx0ZXIgY2xhc3NpZmllcyBhcyBoYW0gKHJlc3AuIHNwYW0pLg0KPiAgICAgLSBJZiBgYXJncy5y ZXEnIGluY2x1ZGVzICdub3RpZnknLCB3ZSBpbnRlcm5hbGx5IHVzZSBhIHRlbXBvcmFyeSB0YWcN Cj4gICAgICAg4oCTIGFyZ3MudG1wIOKAkyB0aGF0IHdlIGFzc3VtZSBub3QgdG8gcHJlZXhpc3Qg aW4gdGhlIE5vdG11Y2ggZGF0YWJhc2UuDQo+DQo+ICAgICBUaGlzIGZ1bmN0aW9uIGlzIHBvdGVu dGlhbGx5IGFmZmVjdGVkIGJ5IGVudmlyb25tZW50IHZhcmlhYmxlcywNCj4gICAgIGZpbGVzIGFu ZCBkaXJlY3RvcmllcyB0aGF0IGFmZmVjdCBhZmV3LCBCb2dvZmlsdGVyIG9yIE5vdG11Y2guDQo+ DQo+ICAgICBUT0RPIERvY3VtZW50IHRoZSByZXF1aXJlZCBOb3RtdWNoIHNhdmVkIHF1ZXJpZXMu DQo+ICAgICBUT0RPIERvY3VtZW50IHRoZSBES0lNIGZpbHRlcmluZy4NCj4gICAgICIiIg0KPiAg ICAgaWYgYXJncy5yZXFbJ2dlbmVyYWwnXSBvciBhcmdzLnJlcVsnbm90aWZ5J10gb3IgYXJncy5y ZXFbJ3NwYW0nXToNCj4gICAgICAgICB3aXRoIHNhZmVfb3Blbl9kYl9ydygpIGFzIG5tX2RiOg0K PiAgICAgICAgICAgICBpZiBhcmdzLnJlcVsnc3BhbSddOg0KPiAgICAgICAgICAgICAgICAgZmls dGVyX3NwYW0obm1fZGIsIGFyZ3MucXVlcnksIGFyZ3MuYmZfaGFtLCBhcmdzLmJmX3NwYW0pDQo+ ICAgICAgICAgICAgIGlmIGFyZ3MucmVxWydnZW5lcmFsJ10gb3IgYXJncy5yZXFbJ25vdGlmeSdd Og0KPiAgICAgICAgICAgICAgICAgIyBBZmV3IHdpbGwgcmVtb3ZlICduZXcnDQo+ICAgICAgICAg ICAgICAgICB0YWdfc2VhcmNoKG5tX2RiLCAnaXM6bmV3JywgYXJncy50bXApDQo+ICAgICAgICAg ICAgICAgICB0bXBfY291bnQgPSBjb3VudChubV9kYiwgZidpczp7YXJncy50bXB9JykNCj4gICAg IHBpcGUgPSBwYXJ0aWFsKHJ1biwgc3Rkb3V0PVBJUEUsIHRleHQ9VHJ1ZSkNCj4gICAgIHRyeToN Cj4gICAgICAgICBpZiBhcmdzLnJlcVsnZ2VuZXJhbCddIG9yIGFyZ3MucmVxWydub3RpZnknXToN Cj4gICAgICAgICAgICAgZXhjbHVkZSA9IHBpcGUoDQo+ICAgICAgICAgICAgICAgICAoJ25vdG11 Y2gnLCAnY29uZmlnJywgJ2dldCcsICdzZWFyY2guZXhjbHVkZV90YWdzJyksDQo+ICAgICAgICAg ICAgICAgICBjaGVjaz1UcnVlKS5zdGRvdXQucnN0cmlwKCdcbicpLnNwbGl0KCdcbicpDQo+ICAg ICAgICAgaWYgYXJncy5yZXFbJ2dlbmVyYWwnXToNCj4gICAgICAgICAgICAgYWZldyA9IHBpcGUo KCdhZmV3JywgJy10bnYnKSwgY2hlY2s9VHJ1ZSwgc3RkZXJyPVNURE9VVCkNCj4gICAgICAgICAg ICAgTE9HLmluZm8oJ1xuJXMnLCBhZmV3LnN0ZG91dCkNCj4gICAgICAgICAgICAgZXhjbHVkZV9k a2ltID0gJyglcyknICUgJyBPUiAnLmpvaW4oDQo+ICAgICAgICAgICAgICAgICAoZidpczp7dGFn fScgZm9yIHRhZyBpbiBleGNsdWRlICsgWycvZGtpbS0uKi8nXSkpDQo+ICAgICAgICAgICAgICMg cHJvYmxlbSA9ICgnMTU4NDYzODE4NTU1OS4xYjEwYzg4Mi1lMWUxLTQ5OTMtOGYwMS1iZGJjYjNi NGFmZTJAJw0KPiAgICAgICAgICAgICAjICAgICAgICAgICAgJzMwMjAzNm0uZ3JhbmN1cnNvc29u bGluZS5jb20uYnInKQ0KPiAgICAgICAgICAgICBka2ltX3F1ZXJ5ID0gZicoaXM6e2FyZ3MudG1w fSAte2V4Y2x1ZGVfZGtpbX0pJw0KPiAgICAgICAgICAgICBhZmV3ID0gcGlwZSgoJ2FmZXcnLCAn LXR2JywgJy1lREtJTVZhbGlkaXR5RmlsdGVyJywgZGtpbV9xdWVyeSksDQo+ICAgICAgICAgICAg ICAgICAgICAgICAgIHN0ZGVycj1TVERPVVQpDQo+ICAgICAgICAgICAgIGlmIGFmZXcucmV0dXJu Y29kZToNCj4gICAgICAgICAgICAgICAgIGFsZXJ0KCdES0lNIGZpbHRlciBlcnJvcicsDQo+ICAg ICAgICAgICAgICAgICAgICAgICAnYWZldyBES0lNVmFsaWRpdHlGaWx0ZXIgcmV0dXJuZWQgJWQ6 XG4lcycsDQo+ICAgICAgICAgICAgICAgICAgICAgICBhZmV3LnJldHVybmNvZGUsIGFmZXcuc3Rk b3V0KQ0KPiAgICAgICAgICAgICBlbHNlOg0KPiAgICAgICAgICAgICAgICAgTE9HLmluZm8oJ1xu JXMnLCBhZmV3LnN0ZG91dCkNCj4gICAgICAgICBpZiBhcmdzLnJlcVsnZ2VuZXJhbCddIG9yIGFy Z3MucmVxWydub3RpZnknXToNCj4gICAgICAgICAgICAgd2l0aCBzYWZlX29wZW5fZGJfcncoKSBh cyBubV9kYjoNCj4gICAgICAgICAgICAgICAgIGlmIGFyZ3MucmVxWydub3RpZnknXToNCj4gICAg ICAgICAgICAgICAgICAgICBwX2NvdW50ID0gcGFydGlhbChjb3VudCwgbm1fZGIsIGV4Y2x1ZGU9 ZXhjbHVkZSkNCj4gICAgICAgICAgICAgICAgICAgICB0bXBfbm90aWZ5ID0gZidpczp7YXJncy50 bXB9IHF1ZXJ5OnNpbXBsZW11Y2hfbm90aWZ5Jw0KPiAgICAgICAgICAgICAgICAgICAgIG5vdGlm eSA9IHBfY291bnQodG1wX25vdGlmeSkNCj4gICAgICAgICAgICAgICAgICAgICBpZiBub3RpZnk6 DQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHVucmVhZCA9IHBfY291bnQoInF1ZXJ5OnNpbXBs ZW11Y2hfdW5yZWFkIikNCj4gICAgICAgICAgICAgICAgICAgICAgICAgaW5ib3hfdW5yZWFkID0g cF9jb3VudCgicXVlcnk6c2ltcGxlbXVjaF9JTkJPWF91bnJlYWQiKQ0KPiAgICAgICAgICAgICAg ICAgICAgICAgICBmbGFnZ2VkID0gcF9jb3VudCgicXVlcnk6c2ltcGxlbXVjaF9mbGFnZ2VkIikN Cj4gICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IChmJ1wNCj4gSW5ib3g6IHt1bnJlYWR9 IHVucmVhZCAoe2luYm94X3VucmVhZH0gSU5CT1gpLCB7ZmxhZ2dlZH0gZmxhZ2dlZFxuJyArDQo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJy5qb2luKG1zZy5nZXRfaGVhZGVy KCdTdWJqZWN0JykgZm9yIG1zZyBpbg0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbm1fZGIuY3JlYXRlX3F1ZXJ5KA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRtcF9ub3RpZnkpLnNlYXJjaF9tZXNzYWdlcygpKSkNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgc3VtbWFyeSA9IGYne25vdGlmeX0gbmV3IG1lc3NhZ2VzLicNCj4gICAgICAgICAg ICAgICAgICAgICAgICAgTm90aWZ5Lk5vdGlmaWNhdGlvbi5uZXcoDQo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdW1tYXJ5LCBib2R5LCAnbWFpbC1tZXNzYWdlLW5ldycpLnNob3coKQ0K PiAgICAgICAgICAgICAgICAgdGFnX3NlYXJjaChubV9kYiwgJ2lzOicgKyBhcmdzLnRtcCwgcmVt b3ZlPWFyZ3MudG1wKQ0KPiAgICAgICAgICAgICAgICAgdG1wX2NvdW50ID0gMA0KPiAgICAgZmlu YWxseToNCj4gICAgICAgICBpZiAoYXJncy5yZXFbJ25vdGlmeSddIG9yIGFyZ3MucmVxWydnZW5l cmFsJ10pIGFuZCB0bXBfY291bnQ6DQo+ICAgICAgICAgICAgIGJvZHlfZm10ID0gJyVkIG1lc3Nh Z2VzIGxlZnQgdGFnZ2VkICVzJw0KPiAgICAgICAgICAgICBhbGVydCgnRGlydHkgbWVzc2FnZXMn LCBib2R5X2ZtdCwgdG1wX2NvdW50LCBhcmdzLnRtcCkNCj4NCj4NCj4gIyBDb21tZW50ZWQgb3V0 IHNpbmNlIEkgZG9uJ3Qga25vdyBhIHNpbXBsZSB3YXkgdG8gb2J0YWluIHRoZSBsb2NhdGlvbiBv ZiB0aGUNCj4gIyBCb2dvZmlsdGVyIGRpcmVjdG9yeS4gIEl0IG1heSBub3QgYmUgYCh+Ly5ib2dv ZmlsdGVyKSc6IHNlZSBCb2dvZmlsdGVyDQo+ICMgbWFuIHBhZ2Ugc2VjdGlvbiBgRU5WSVJPTk1F TlQnLiAgTWF5YmUgdGhlIGAteCcgZmxhZyBjYW4gaGVscC4NCj4gIyBkZWYgY2xlYW4oZGIsIGFy Z3MpOg0KPiAjICAgICAiIiJSZW1vdmUgQm9nb2ZpbHRlciB0YWdzIGZyb20gYWxsIG1lc3NhZ2Vz IGFuZCByZW1vdmUgYCh+Ly5ib2dvZmlsdGVyKSciIiINCj4gIyAgICAgaWYgbm90IHNodXRpbC5y bXRyZWUuYXZvaWRzX3N5bWxpbmtfYXR0YWNrczoNCj4gIyAgICAgICAgIHByaW50KCJXYXJuaW5n OiB0aGlzIGBzaHV0aWwucm10cmVlJyBpcyBzdXNjZXB0aWJsZSB0byBzeW1saW5rIGF0dGFja3Mu IikNCj4gIyAgICAgd2hpbGUgVHJ1ZToNCj4gIyAgICAgICAgIHJlcGx5ID0gaW5wdXQocHJvbXB0 PQ0KPiAjIGYiIiJSZW1vdmUgQm9nb2ZpbHRlciBkYXRhYmFzZSBkaXJlY3RvcnkgYW5kLCBmcm9t IGFsbCBOb3RtdWNoIGVtYWlsIG1lc3NhZ2VzLA0KPiAjIHthcmdzLmJmX3NwYW19IGFuZCB7YXJn cy5iZl9oYW19IHRhZ3M/IFt5L05dICIiIikubG93ZXIoKQ0KPiAjICAgICAgICAgaWYgJ25vJy5z dGFydHN3aXRoKHJlcGx5KToNCj4gIyAgICAgICAgICAgICByZXR1cm4gRmFsc2UNCj4gIyAgICAg ICAgIGlmICd5ZXMnLnN0YXJ0c3dpdGgocmVwbHkpOg0KPiAjICAgICAgICAgICAgIHNodXRpbC5y bXRyZWUob3MucGF0aC5leHBhbmR1c2VyKCd+Ly5ib2dvZmlsdGVyJykpDQo+ICMgICAgICAgICAg ICAgdGFnX3NlYXJjaChkYiwgZidpczp7YXJncy5iZl9zcGFtfScsIHJlbW92ZT0nZnthcmdzLmJm X3NwYW19JykNCj4gIyAgICAgICAgICAgICB0YWdfc2VhcmNoKGRiLCBmJ2lzOnthcmdzLmJmX2hh bX0nLCByZW1vdmU9Zid7YXJncy5iZl9oYW19JykNCj4gIyAgICAgICAgICAgICByZXR1cm4gVHJ1 ZQ0KPiAjICAgICAgICAgcHJpbnQoDQo+ICMgICAgICAgICAgICAgJ1BsZWFzZSBwcm92aWRlIGEg dmFsaWQgYW5zd2VyOiAieWVzIiwgIm5vIiBvciBhIHByZWZpeCwgJw0KPiAjICAgICAgICAgICAg ICdjYXNlLWluc2Vuc2l0aXZlJywgZmlsZT1zeXMuc3RkZXJyKQ0KPg0KPiBkZWYgcGFyc2VfY29t bWFuZF9saW5lKCkgLT4gTmFtZXNwYWNlOg0KPiAgICAgIiIiUGFyc2Ugc3lzLmFyZ3YgaW50byBh IE5hbWVzcGFjZSBvYmplY3QiIiINCj4gICAgIHBhcnNlciA9IEFyZ3VtZW50UGFyc2VyKA0KPiAg ICAgICAgIGRlc2NyaXB0aW9uPV9fZG9jX18sDQo+ICAgICAgICAgZm9ybWF0dGVyX2NsYXNzPUFy Z3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyKQ0KPiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgN Cj4gICAgICAgICAnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nU2ltcGxl bXVjaCBhbHBoYScpDQo+ICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2Un LCBhY3Rpb249J3N0b3JlX3RydWUnLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdP dXRwdXQgbG9nIG1lc3NhZ2VzIGFsc28gdG8gc3RkZXJyJykNCj4gICAgIHBhcnNlci5hZGRfYXJn dW1lbnQoDQo+ICAgICAgICAgJy0tYmZfc3BhbScsIGRlZmF1bHQ9QkZfU1BBTSwgbWV0YXZhcj0n VEFHJywNCj4gICAgICAgICBoZWxwPSdUYWcgZm9yIGJvZ29maWx0ZXItZmxhZ2dlZCBzcGFtJykN Cj4gICAgIHBhcnNlci5hZGRfYXJndW1lbnQoDQo+ICAgICAgICAgJy0tYmZfaGFtJywgZGVmYXVs dD1CRl9IQU0sIG1ldGF2YXI9J1RBRycsDQo+ICAgICAgICAgaGVscD0nVGFnIGZvciBib2dvZmls dGVyLWZsYWdnZWQgaGFtJykNCj4gICAgIHBhcnNlci5hZGRfYXJndW1lbnQoDQo+ICAgICAgICAg Jy0tdXNlcl9zcGFtJywgZGVmYXVsdD1VU0VSX1NQQU0sIG1ldGF2YXI9J1RBRycsDQo+ICAgICAg ICAgaGVscD0nVGFnIGZvciB1c2VyLWZsYWdnZWQgc3BhbScpDQo+ICAgICBwYXJzZXIuYWRkX2Fy Z3VtZW50KA0KPiAgICAgICAgICctLWxvZ2xldmVsJywgZGVmYXVsdD0nSU5GTycsIGhlbHA9IiIi XA0KPiBTZXZlcml0eSB0aHJlc2hvbGQgZm9yIGxvZ2dpbmc7IGxvZ2dpbmcgbWVzc2FnZXMgbGVz cyBzZXZlcmUgYXJlIGRpc2NhcmRlZC4NCj4gRm9yIHRoZSBhbGxvd2VkIHZhbHVlcyBzZWUNCj4g aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9sb2dnaW5nLmh0bWwiIiIpDQo+ICAgICBz dWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKA0KPiAgICAgICAgIHRpdGxlPSdTdWJj b21tYW5kcycsIHJlcXVpcmVkPVRydWUsIGRlc2NyaXB0aW9uPSdTcGVjaWZ5IGV4YWN0bHkgb25l JykNCj4gICAgIHBhcnNlcl9maWx0ZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoDQo+ICAgICAg ICAgJ2ZpbHRlcicsIGhlbHA9IiIiRmlsdGVyIG1haWwuICBCeSBkZWZhdWx0IChzZWUgYC0tc2tp cCcpLCBmaWx0ZXIgb3V0DQo+ICAgICAgICAgc3BhbSwgdGhlbiBkbyBnZW5lcmFsIG1haWwgZmls dGVyaW5nICh3aXRoIGFmZXcpIGFuZCB0aGVuLCBkZXBlbmRpbmcgb24NCj4gICAgICAgICB0aGUg bmV3IG1lc3NhZ2VzLCBub3RpZnkuIiIiKQ0KPiAgICAgcGFyc2VyX2ZpbHRlci5hZGRfYXJndW1l bnQoDQo+ICAgICAgICAgJy0tc2tpcCcsIGNob2ljZXM9RklMVEVSX0FDVElPTlMsIG5hcmdzPScr JywgaGVscD0nQWN0aW9ucyB0byBza2lwJywNCj4gICAgICAgICBkZWZhdWx0PSgpKQ0KPiAgICAg IyBXSVNIOiBhcHBlbmQgYSByYW5kb20gc3VmZml4DQo+ICAgICBwYXJzZXJfZmlsdGVyLmFkZF9h cmd1bWVudCgNCj4gICAgICAgICAnLS10bXAnLCBtZXRhdmFyPSdURU1QT1JBUllfVEFHJywgZGVm YXVsdD1UTVAsDQo+ICAgICAgICAgaGVscD0nVGVtcG9yYXJ5IHRhZyBmb3IgaW50ZXJuYWwgdXNl OyBhc3N1bWVkIGJ5IHRoaXMgc2NyaXB0Jw0KPiAgICAgICAgICcgbm90IHRvIHByZWV4aXN0IGlu IHRoZSBkYXRhYmFzZScpDQo+ICAgICBwYXJzZXJfZmlsdGVyLmFkZF9hcmd1bWVudCgNCj4gICAg ICAgICAncXVlcnknLCBuYXJncz0nPycsIGRlZmF1bHQ9J2lzOm5ldycsDQo+ICAgICAgICAgaGVs cD0nVGhlIE5vdG11Y2ggcXVlcnkgd2hvc2UgcmVzdWx0IHdpbGwgYmUgc3BhbS1maWx0ZXJlZCcp DQo+ICAgICBwYXJzZXJfZmlsdGVyLnNldF9kZWZhdWx0cyhmdW5jPWZpbHRlcl9ub3RpZnkpDQo+ ICAgICBwYXJzZXJfdHJhaW4gPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoDQo+ICAgICAgICAgJ3Ry YWluJywgaGVscD0iIiJUcmFpbiBib2dvZmlsdGVyLiAgV2UgYXNzdW1lIHRoZSB1c2VyDQo+ICAg ICAgICAgY2xhc3NpZmllZCBhIG1lc3NhZ2UgYXMgc3BhbSBpZiBpdCBpcyB0YWdnZWQgYGFyZ3Mu dXNlcl9zcGFtJzsNCj4gICAgICAgICBhbmQgaGUgY2xhc3NpZmllZCBhIG1lc3NhZ2UgYXMgaGFt IGlmIGl0IGhhcyBiZWVuIHJlYWQgYnV0DQo+ICAgICAgICAgbm90IHRhZ2dlZCBgYXJncy51c2Vy X3NwYW0nLiAgVGhlcmVmb3JlIHdlIGFzc3VtZSB0aGF0Og0KPg0KPiAgICAgICAgIDEuIE1lc3Nh Z2VzIHRhZ2dlZCBgYXJncy51c2VyX3NwYW0nIGFyZSBpbiBmYWN0IHNwYW0uDQo+ICAgICAgICAg Mi4gU3BhbW15IHJlYWQgbWVzc2FnZXMgYXJlIHRhZ2dlZCBgYXJncy51c2VyX3NwYW0nLg0KPiAg ICAgICAgIDMuIE1lc3NhZ2VzIHRhZ2dlZCBgYXJncy5iZl9zcGFtJyBhcmUgYWxzbyB0YWdnZWQg YGFyZ3MudXNlcl9zcGFtJywNCj4gICAgICAgICAgICB1bmxlc3MgdGhleSBhcmUgZmFsc2UgcG9z aXRpdmVzLg0KPg0KPiAgICAgICAgIEEgcHJvYmxlbWF0aWMgc2NlbmFyaW8gaXMgd2hlbiB0aGUg dXNlciByZWFkcyBzcGFtIGluIHdlYm1haWwNCj4gICAgICAgICBidXQgZm9yZ2V0cyB0byB0YWcg aXQgc3BhbSBpbiBOb3RtdWNoLiIiIikNCj4gICAgIHBhcnNlcl90cmFpbi5zZXRfZGVmYXVsdHMo ZnVuYz10cmFpbikNCj4gICAgICMgcGFyc2VyX2NsZWFuID0gc3VicGFyc2Vycy5hZGRfcGFyc2Vy KA0KPiAgICAgIyAgICAgJ2NsZWFuJywNCj4gICAgICMgICAgIGhlbHA9IlJlbW92ZSBCb2dvZmls dGVyIHRhZ3MgZnJvbSBhbGwgbWVzc2FnZXMgYW5kIHJlbW92ZSAiDQo+ICAgICAjICAgICAiYCh+ Ly5ib2dvZmlsdGVyKSciKQ0KPiAgICAgIyBwYXJzZXJfY2xlYW4uc2V0X2RlZmF1bHRzKGZ1bmM9 Y2xlYW4pDQo+ICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQ0KPiAgICAgYXJncy5yZXEg PSB7YTogYXJncy5mdW5jIGlzIGZpbHRlcl9ub3RpZnkgYW5kIGEgbm90IGluIGFyZ3Muc2tpcA0K PiAgICAgICAgICAgICAgICAgZm9yIGEgaW4gRklMVEVSX0FDVElPTlN9ICAjIFJlcXVlc3RlZCBh Y3Rpb25zDQo+ICAgICByZXR1cm4gYXJncw0KPg0KPg0KPiBkZWYgbWFpbigpIC0+IE5vbmU6DQo+ ICAgICAiIiJSdW4gYXMgc2NyaXB0OiBzZXQgdXAgbG9nZ2luZywgcGFyc2Ugc3lzLmFyZ3YsIGV4 ZWN1dGUuIiIiDQo+ICAgICAjIFdJU0ggTWF5YmUgY2hhbmdlIHRoZSB0eXBlIG9mIHNvY2tldC4g IFNlZSBTeXNMb2dIYW5kbGVyIGRvY3VtZW50YXRpb24NCj4gICAgIGhhbmRsZXIxID0gaGFuZGxl cnMuU3lzTG9nSGFuZGxlcigNCj4gICAgICAgICBhZGRyZXNzPScvZGV2L2xvZycsIGZhY2lsaXR5 PWhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIuTE9HX01BSUwpDQo+ICAgICBmb3JtYXR0ZXIgPSBsb2dn aW5nLkZvcm1hdHRlcigNCj4gICAgICAgICAnJShtb2R1bGUpc1slKHByb2Nlc3MpZF0uJShmdW5j TmFtZSlzOiAlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycpDQo+ICAgICBoYW5kbGVyMS5zZXRG b3JtYXR0ZXIoZm9ybWF0dGVyKQ0KPiAgICAgTE9HLmFkZEhhbmRsZXIoaGFuZGxlcjEpDQo+ICAg ICB0cnk6DQo+ICAgICAgICAgYXJncyA9IHBhcnNlX2NvbW1hbmRfbGluZSgpDQo+ICAgICAgICAg IyBodHRwczovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMDA4LyNwcm9ncmFtbWluZy1y ZWNvbW1lbmRhdGlvbnMNCj4gICAgIGV4Y2VwdDogICAgICAgICAgICAgICAgICAgICAjIG5vcWE6 IEU3MjINCj4gICAgICAgICBMT0cuZXhjZXB0aW9uKA0KPiAgICAgICAgICAgICAnRXhjZXB0aW9u IG9jY3VycmVkIHdoaWxlIHBhcnNpbmcgY29tbWFuZCBsaW5lICgiJXMiKScsIHN5cy5hcmd2KQ0K PiAgICAgICAgIHJhaXNlDQo+ICAgICB0cnk6DQo+ICAgICAgICAgaWYgYXJncy52ZXJib3NlOg0K PiAgICAgICAgICAgICBoYW5kbGVyMiA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpDQo+ICAgICAg ICAgICAgIGhhbmRsZXIyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpDQo+ICAgICAgICAgICAgIExP Ry5hZGRIYW5kbGVyKGhhbmRsZXIyKQ0KPiAgICAgICAgIGxldmVsX251bSA9IGdldGF0dHIobG9n Z2luZywgYXJncy5sb2dsZXZlbC51cHBlcigpLCBOb25lKQ0KPiAgICAgICAgIGlmIG5vdCBpc2lu c3RhbmNlKGxldmVsX251bSwgaW50KToNCj4gICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign SW52YWxpZCBsb2cgbGV2ZWw6ICVzJyAlIGFyZ3MubG9nbGV2ZWwpDQo+ICAgICAgICAgTE9HLnNl dExldmVsKGxldmVsX251bSkNCj4gICAgICAgICBpZiBhcmdzLnJlcVsnbm90aWZ5J106DQo+ICAg ICAgICAgICAgICMgV0lTSCBDb21wdXRlIG5hbWUgZnJvbSBzeXMuYXJndlswXSwgbGlrZSBhcmdw YXJzZT8NCj4gICAgICAgICAgICAgTm90aWZ5LmluaXQoJ1NpbXBsZW11Y2gnKQ0KPiAgICAgICAg IGFyZ3MuZnVuYyhhcmdzKQ0KPiAgICAgZXhjZXB0OiAgICAgICAgICAgICAgICAgICAgICMgbm9x YTogRTcyMg0KPiAgICAgICAgIGFsZXJ0KCdFeGNlcHRpb24gb2NjdXJyZWQnLCAnQ29tbWFuZCBs aW5lOiAiJXMiOyBwYXJzZWQ6ICVzJywgc3lzLmFyZ3YsDQo+ICAgICAgICAgICAgICAgYXJncywg ZnVuPUxPRy5leGNlcHRpb24pDQo+ICAgICAgICAgcmFpc2UNCj4NCj4NCj4gaWYgX19uYW1lX18g PT0gJ19fbWFpbl9fJzoNCj4gICAgIG1haW4oKQ0KPg0KPiAjIExvY2FsIFZhcmlhYmxlczoNCj4g IyBpc3BlbGwtbG9jYWwtZGljdGlvbmFyeTogImVuX1VTIg0KPiAjIEVuZDoNCj4NCj4gLS0gDQo+ IC0gPGh0dHBzOi8vam9yZ2Vtb3JhaXMuZ2l0bGFiLmlvL2p1c3RpY2UtZm9yLXJtcy8+DQo+IC0g SWYgYW4gZW1haWwgb2YgbWluZSBhcnJpdmVzIGF0IHlvdXIgc3BhbSBib3gsIHBsZWFzZSBub3Rp ZnkgbWUuDQo+IC0gUGxlYXNlIGFkb3B0IGZyZWUvbGlicmUgZm9ybWF0cyBsaWtlIFBERiwgT0RG LCBPcmcsIExhVGVYLCBPcHVzLCBXZWJNIGFuZCA3ei4NCj4gLSBGcmVlL2xpYnJlIHNvZnR3YXJl IGZvciBSZXBsaWNhbnQsIExpbmVhZ2VPUyBhbmQgQW5kcm9pZDogaHR0cHM6Ly9mLWRyb2lkLm9y Zw0KPiAtIFtbaHR0cHM6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L2ZyZWUtc3cuaHRtbF1bV2hh dCBpcyBmcmVlIHNvZnR3YXJlP11dDQoNCi0tIA0KLSA8aHR0cHM6Ly9qb3JnZW1vcmFpcy5naXRs YWIuaW8vanVzdGljZS1mb3Itcm1zLz4NCi0gSWYgYW4gZW1haWwgb2YgbWluZSBhcnJpdmVzIGF0 IHlvdXIgc3BhbSBib3gsIHBsZWFzZSBub3RpZnkgbWUuDQotIFBsZWFzZSBhZG9wdCBmcmVlL2xp YnJlIGZvcm1hdHMgbGlrZSBQREYsIE9ERiwgT3JnLCBMYVRlWCwgT3B1cywgV2ViTSBhbmQgN3ou DQotIEZyZWUvbGlicmUgc29mdHdhcmUgZm9yIFJlcGxpY2FudCwgTGluZWFnZU9TIGFuZCBBbmRy b2lkOiBodHRwczovL2YtZHJvaWQub3JnDQotIFtbaHR0cHM6Ly93d3cuZ251Lm9yZy9waGlsb3Nv cGh5L2ZyZWUtc3cuaHRtbF1bV2hhdCBpcyBmcmVlIHNvZnR3YXJlP11d