From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 82B22722101; Wed, 6 Dec 2023 16:58:25 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 82B22722101 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1701871105; bh=rNq99UlEipc1bN/rUv+9AFD3uURjiObpwLCzA0nnd8M=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=skaoPN5HJAz/ZIzcDmCnDD9CEcH1RWTTY5mMZxHkGTSIZstBNUVhU/6ZhUPUN/B/9 cCxaqFkGqVFBWhzU394ttYpJsUpPsuMS9y5ZNLAne85w3BNsVClC8gxU1rQiXLaUs8 Z1RIkJHkkP825p2AWWl4eNO7d1aY02kII3AfR9kw= Received: from f340.i.mail.ru (f340.i.mail.ru [45.84.128.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 58A816B03F1 for ; Wed, 6 Dec 2023 16:58:23 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 58A816B03F1 Received: by f340.i.mail.ru with local (envelope-from ) id 1rAsPs-0004oG-84; Wed, 06 Dec 2023 16:58:21 +0300 Received: by e.mail.ru with HTTP; Wed, 06 Dec 2023 16:58:20 +0300 To: =?UTF-8?B?U2VyZ2V5IEJyb25uaWtvdg==?= MIME-Version: 1.0 X-Mailer: Mail.Ru Mailer 1.0 X-SenderField-ReMsg: 17006644170386418819 X-SenderField-Remind: 0 Date: Wed, 06 Dec 2023 16:58:20 +0300 X-Priority: 3 (Normal) Message-ID: <1701871100.669118883@f762.i.mail.ru> Content-Type: multipart/alternative; boundary="--ALT--b12838Beb1D38E5b91b1752f6Ec8C8441701871100" In-Reply-To: <9991c893-9a0d-48f9-826c-183a5e27fa8a@tarantool.org> References: <20231110201612.81722-1-max.kokryashkin@gmail.com> <20231110201612.81722-2-max.kokryashkin@gmail.com> <9991c893-9a0d-48f9-826c-183a5e27fa8a@tarantool.org> X-Mailru-Src: fe X-7564579A: EEAE043A70213CC8 X-77F55803: 119C1F4DF6A9251C89EAF21FBB369C359A7598FAB42E01A8C8660BE2F7FD81B28FD872164937FA4C22777BD101B4AEE9729E4D89F21374BA800A9560D4987FCD572EA6360F329DEA X-C1DE0DAB: 0D63561A33F958A5CD3ED377C37B28012FC4BD24E16619E6C7764B39F2E0F4E7F87CCE6106E1FC07E67D4AC08A07B9B0A6C7FFFE744CA7FBCB5012B2E24CD356 X-C8649E89: 1C3962B70DF3F0AD5177F0B940C8B66ECE892A7B2722663E91682638B966EB3F662256BEEFA9527F1ABA0D819C192009000CDED03F6112177B4D5915C1A28B5D3355E432B67850BA2B5E0DCD75ECDBD737FD76D11AF80A0DB5B3FA760480B3EBE5ABF61BF23D47A1EA455F16B58544A2D06CB91D864A7BD2965026E5D17F6739C77C69D99B9914278E50E1F0597A6FD5CD72808BE417F3B9E0E7457915DAA85F X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5+wYjsrrSY/u8Y3PrTqANeitKFiSd6Yd7yPpbiiZ/d5BsxIjK0jGQgCHUM3Ry2Lt2G3MDkMauH3h0dBdQGj+BB/iPzQYh7XS329fgu+/vnDhxs/Bq4wlPfUJl3/Kvfg+ew== X-Mailru-MI: 800 X-Mailru-Sender: 11C2EC085EDE56FA38FD4C59F7EFE40730D4EAF74073AA93D0D19E47F012182A2AC8DA90C339961B06CD02445D2D9C8FA2BFD6D8330F0C2D563E610FBBDBB4C842051EA7CBBFB509093DA5C00B83CE8412EB40C6FA10D71EFD657A8799238ED55FEEDEB644C299C0ED14614B50AE0675 X-Mras: OK Subject: Re: [Tarantool-patches] =?utf-8?q?=5BPATCH_luajit_v3_1/2=5D_debug=3A?= =?utf-8?q?_generalized_extension?= X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Maxim Kokryashkin via Tarantool-patches Reply-To: =?UTF-8?B?TWF4aW0gS29rcnlhc2hraW4=?= Cc: =?UTF-8?B?TWFrc2ltIEtva3J5YXNoa2lu?= , tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" ----ALT--b12838Beb1D38E5b91b1752f6Ec8C8441701871100 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 CkhpIQpUaGFua3MgZm9yIHRoZSByZXZpZXchCsKgCsKgIAo+0KHRgNC10LTQsCwgMjIg0L3QvtGP 0LHRgNGPIDIwMjMsIDE3OjQ2ICswMzowMCDQvtGCIFNlcmdleSBCcm9ubmlrb3YgPHNlcmdleWJA dGFyYW50b29sLm9yZz46Cj7CoAo+SGVsbG8sIE1heCwKPgo+dGhhbmtzIGZvciB0aGUgcGF0Y2gh Cj4KPgo+ZXh0ZW5zaW9uIGNhbm5vdCBiZSBsb2FkIGluIEdEQjoKRml4ZWQsIHRoYW5rcyEKPgo+ KGdkYikgc291cmNlIHNyYy9sdWFqaXRfZGJnLnB5Cj5UcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNh bGwgbGFzdCk6Cj7CoMKgIEZpbGUgInNyYy9sdWFqaXRfZGJnLnB5IiwgbGluZSAyMjgsIGluIDxt b2R1bGU+Cj7CoMKgwqDCoCBkYmcgPSBEZWJ1Z2dlcigpCj7CoMKgIEZpbGUgInNyYy9sdWFqaXRf ZGJnLnB5IiwgbGluZSA0NiwgaW4gX19pbml0X18KPsKgwqDCoMKgIGlmIGhlYWx0aGNoZWNrKGxp Yik6Cj7CoMKgIEZpbGUgInNyYy9sdWFqaXRfZGJnLnB5IiwgbGluZSAzNywgaW4gPGxhbWJkYT4K PsKgwqDCoMKgICdsbGRiJzogbGFtYmRhIGxpYjogbGliLmRlYnVnZ2VyIGlzIG5vdCBOb25lLAo+ QXR0cmlidXRlRXJyb3I6IG1vZHVsZSAnbGxkYicgaGFzIG5vIGF0dHJpYnV0ZSAnZGVidWdnZXIn Cj4oZ2RiKQo+Cj5bMF0gfi9zb3VyY2VzL01SRy90YXJhbnRvb2wvdGhpcmRfcGFydHkvbHVhaml0 JCBnZGIgLS12ZXJzaW9uCj5HTlUgZ2RiIChVYnVudHUgMTIuMS0wdWJ1bnR1MX4yMi4wNCkgMTIu MQo+Cj5PbiAxMS8xMC8yMyAyMzoxNiwgTWFrc2ltIEtva3J5YXNoa2luIHdyb3RlOgo+PiBGcm9t OiBNYXhpbSBLb2tyeWFzaGtpbiA8IG0ua29rcnlhc2hraW5AdGFyYW50b29sLm9yZyA+Cj4+Cj4+ IFRoaXMgcGF0Y2ggam9pbnMgdGhlIExMREIgYW5kIEdEQiBMdWFKSVQgZGVidWdnaW5nIGV4dGVu c2lvbnMKPj4gaW50byBvbmUsIHNvIG5vdyB0aGUgZXh0ZW5zaW9uIGxvZ2ljIGNhbiBiZSBkZWJ1 Z2dlci1hZ25vc3RpYy4KPj4gVG8gZG8gdGhhdCwgYW4gYWRhcHRlciBjbGFzcyBpcyBpbnRyb2R1 Y2VkLCBhbmQgYWxsIG9mIHRoZQo+PiBkZWJ1Z2dlci1zcGVjaWZpYyBiZWhhdmlvciBpcyBlbmNh cHN1bGF0ZWQgdGhlcmUuIFRoZSBleHRlbnNpb24KPj4gYXV0by1kZXRlY3RzIHRoZSBkZWJ1Z2dl ciBpdCB3YXMgbG9hZGVkIGludG8gYW5kIHNlbGVjdHMgdGhlCj4+IGNvcnJlY3QgbG93LWxldmVs IGxvZ2ljIGltcGxlbWVudGF0aW9uLgo+PiAtLS0KPj4gc3JjL2x1YWppdC1nZGIucHkgfCA4ODUg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4gc3JjL3tsdWFqaXRfbGxkYi5weSA9PiBsdWFq aXRfZGJnLnB5fSB8IDYxNyArKysrKysrKysrKystLS0tLS0KPj4gMiBmaWxlcyBjaGFuZ2VkLCA0 MTcgaW5zZXJ0aW9ucygrKSwgMTA4NSBkZWxldGlvbnMoLSkKPj4gZGVsZXRlIG1vZGUgMTAwNjQ0 IHNyYy9sdWFqaXQtZ2RiLnB5Cj4+IHJlbmFtZSBzcmMve2x1YWppdF9sbGRiLnB5ID0+IGx1YWpp dF9kYmcucHl9ICg2MyUpCj4+Cj4+IGRpZmYgLS1naXQgYS9zcmMvbHVhaml0LWdkYi5weSBiL3Ny Yy9sdWFqaXQtZ2RiLnB5Cj4+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCA1ZWFm MjUwZi4uMDAwMDAwMDAKPj4gLS0tIGEvc3JjL2x1YWppdC1nZGIucHkKPj4gKysrIC9kZXYvbnVs bAo+PiBAQCAtMSw4ODUgKzAsMCBAQAo+PiAtIyBHREIgZXh0ZW5zaW9uIGZvciBMdWFKSVQgcG9z dC1tb3J0ZW0gYW5hbHlzaXMuCj4+IC0jIFRvIHVzZSwganVzdCBwdXQgJ3NvdXJjZSA8cGF0aC10 by1yZXBvPi9zcmMvbHVhaml0LWdkYi5weScgaW4gZ2RiLgo+PiAtCj4+IC1pbXBvcnQgcmUKPj4g LWltcG9ydCBnZGIKPj4gLWltcG9ydCBzeXMKPj4gLQo+PiAtIyBtYWtlIHNjcmlwdCBjb21wYXRp YmxlIHdpdGggdGhlIGFuY2llbnQgUHl0aG9uIHt7ewo+PiAtCj4+IC0KPj4gLUxFR0FDWSA9IHJl Lm1hdGNoKHInXjJcLicsIHN5cy52ZXJzaW9uKQo+PiAtCj4+IC1pZiBMRUdBQ1k6Cj4+IC0gQ09O TkVDVEVEID0gRmFsc2UKPj4gLSBpbnQgPSBsb25nCj4+IC0gcmFuZ2UgPSB4cmFuZ2UKPj4gLQo+ PiAtCj4+IC0jIH19fQo+PiAtCj4+IC0KPj4gLWd0eXBlX2NhY2hlID0ge30KPj4gLQo+PiAtCj4+ IC1kZWYgZ3R5cGUodHlwZXN0cik6Cj4+IC0gZ2xvYmFsIGd0eXBlX2NhY2hlCj4+IC0gaWYgdHlw ZXN0ciBpbiBndHlwZV9jYWNoZToKPj4gLSByZXR1cm4gZ3R5cGVfY2FjaGVbdHlwZXN0cl0KPj4g LQo+PiAtIG0gPSByZS5tYXRjaChyJygoPzooPzpzdHJ1Y3R8dW5pb24pICk/XFMqKVxzKlsqXScs IHR5cGVzdHIpCj4+IC0KPj4gLSBndHlwZSA9IGdkYi5sb29rdXBfdHlwZSh0eXBlc3RyKSBpZiBt IGlzIE5vbmUgXAo+PiAtIGVsc2UgZ2RiLmxvb2t1cF90eXBlKG0uZ3JvdXAoMSkpLnBvaW50ZXIo KQo+PiAtCj4+IC0gZ3R5cGVfY2FjaGVbdHlwZXN0cl0gPSBndHlwZQo+PiAtIHJldHVybiBndHlw ZQo+PiAtCj4+IC0KPj4gLWRlZiBjYXN0KHR5cGVzdHIsIHZhbCk6Cj4+IC0gcmV0dXJuIGdkYi5W YWx1ZSh2YWwpLmNhc3QoZ3R5cGUodHlwZXN0cikpCj4+IC0KPj4gLQo+PiAtZGVmIGxvb2t1cChz eW1ib2wpOgo+PiAtIHZhcmlhYmxlLCBfID0gZ2RiLmxvb2t1cF9zeW1ib2woc3ltYm9sKQo+PiAt IHJldHVybiB2YXJpYWJsZS52YWx1ZSgpIGlmIHZhcmlhYmxlIGVsc2UgTm9uZQo+PiAtCj4+IC0K Pj4gLWRlZiBwYXJzZV9hcmcoYXJnKToKPj4gLSBpZiBub3QgYXJnOgo+PiAtIHJldHVybiBOb25l Cj4+IC0KPj4gLSByZXQgPSBnZGIucGFyc2VfYW5kX2V2YWwoYXJnKQo+PiAtCj4+IC0gaWYgbm90 IHJldDoKPj4gLSByYWlzZSBnZGIuR2RiRXJyb3IoJ3RhYmxlIGFyZ3VtZW50IGVtcHR5JykKPj4g LQo+PiAtIHJldHVybiByZXQKPj4gLQo+PiAtCj4+IC1kZWYgdG91NjQodmFsKToKPj4gLSByZXR1 cm4gY2FzdCgndWludDY0X3QnLCB2YWwpICYgMHhGRkZGRkZGRkZGRkZGRkZGCj4+IC0KPj4gLQo+ PiAtZGVmIHRvdTMyKHZhbCk6Cj4+IC0gcmV0dXJuIGNhc3QoJ3VpbnQzMl90JywgdmFsKSAmIDB4 RkZGRkZGRkYKPj4gLQo+PiAtCj4+IC1kZWYgaTJub3R1MzIodmFsKToKPj4gLSByZXR1cm4gfmlu dCh2YWwpICYgMHhGRkZGRkZGRgo+PiAtCj4+IC0KPj4gLWRlZiBzdHJ4NjQodmFsKToKPj4gLSBy ZXR1cm4gcmUuc3ViKCdMPyQnLCAnJywKPj4gLSBoZXgoaW50KGNhc3QoJ3VpbnQ2NF90JywgdmFs KSAmIDB4RkZGRkZGRkZGRkZGRkZGRikpKQo+PiAtCj4+IC0KPj4gLSMgVHlwZXMge3t7Cj4+IC0K Pj4gLQo+PiAtTEpfVCA9IHsKPj4gLSAnTklMJzogaTJub3R1MzIoMCksCj4+IC0gJ0ZBTFNFJzog aTJub3R1MzIoMSksCj4+IC0gJ1RSVUUnOiBpMm5vdHUzMigyKSwKPj4gLSAnTElHSFRVRCc6IGky bm90dTMyKDMpLAo+PiAtICdTVFInOiBpMm5vdHUzMig0KSwKPj4gLSAnVVBWQUwnOiBpMm5vdHUz Mig1KSwKPj4gLSAnVEhSRUFEJzogaTJub3R1MzIoNiksCj4+IC0gJ1BST1RPJzogaTJub3R1MzIo NyksCj4+IC0gJ0ZVTkMnOiBpMm5vdHUzMig4KSwKPj4gLSAnVFJBQ0UnOiBpMm5vdHUzMig5KSwK Pj4gLSAnQ0RBVEEnOiBpMm5vdHUzMigxMCksCj4+IC0gJ1RBQic6IGkybm90dTMyKDExKSwKPj4g LSAnVURBVEEnOiBpMm5vdHUzMigxMiksCj4+IC0gJ05VTVgnOiBpMm5vdHUzMigxMyksCj4+IC19 Cj4+IC0KPj4gLQo+PiAtZGVmIHR5cGVuYW1lcyh2YWx1ZSk6Cj4+IC0gcmV0dXJuIHsKPj4gLSBM Sl9UW2tdOiAnTEpfVCcgKyBrIGZvciBrIGluIExKX1Qua2V5cygpCj4+IC0gfS5nZXQoaW50KHZh bHVlKSwgJ0xKX1RJTlZBTElEJykKPj4gLQo+PiAtCj4+IC0jIH19fQo+PiAtCj4+IC0jIEZyYW1l cyB7e3sKPj4gLQo+PiAtCj4+IC1GUkFNRV9UWVBFID0gMHgzCj4+IC1GUkFNRV9QID0gMHg0Cj4+ IC1GUkFNRV9UWVBFUCA9IEZSQU1FX1RZUEUgfCBGUkFNRV9QCj4+IC0KPj4gLUZSQU1FID0gewo+ PiAtICdMVUEnOiAweDAsCj4+IC0gJ0MnOiAweDEsCj4+IC0gJ0NPTlQnOiAweDIsCj4+IC0gJ1ZB UkcnOiAweDMsCj4+IC0gJ0xVQVAnOiAweDQsCj4+IC0gJ0NQJzogMHg1LAo+PiAtICdQQ0FMTCc6 IDB4NiwKPj4gLSAnUENBTExIJzogMHg3LAo+PiAtfQo+PiAtCj4+IC0KPj4gLWRlZiBmcmFtZXR5 cGVzKGZ0KToKPj4gLSByZXR1cm4gewo+PiAtIEZSQU1FWydMVUEnXTogJ0wnLAo+PiAtIEZSQU1F WydDJ106ICdDJywKPj4gLSBGUkFNRVsnQ09OVCddOiAnTScsCj4+IC0gRlJBTUVbJ1ZBUkcnXTog J1YnLAo+PiAtIH0uZ2V0KGZ0LCAnPycpCj4+IC0KPj4gLQo+PiAtZGVmIGJjX2EoaW5zKToKPj4g LSByZXR1cm4gKGlucyA+PiA4KSAmIDB4ZmYKPj4gLQo+PiAtCj4+IC1kZWYgZnJhbWVfZnRzeihm cmFtZWxpbmspOgo+PiAtIHJldHVybiBjYXN0KCdwdHJkaWZmX3QnLCBmcmFtZWxpbmtbJ2Z0c3on XSBpZiBMSl9GUjIKPj4gLSBlbHNlIGZyYW1lbGlua1snZnInXVsndHAnXVsnZnRzeiddKQo+PiAt Cj4+IC0KPj4gLWRlZiBmcmFtZV9wYyhmcmFtZWxpbmspOgo+PiAtIHJldHVybiBjYXN0KCdCQ0lu cyAqJywgZnJhbWVfZnRzeihmcmFtZWxpbmspKSBpZiBMSl9GUjIgXAo+PiAtIGVsc2UgbXJlZign QkNJbnMgKicsIGZyYW1lbGlua1snZnInXVsndHAnXVsncGNyJ10pCj4+IC0KPj4gLQo+PiAtZGVm IGZyYW1lX3ByZXZsKGZyYW1lbGluayk6Cj4+IC0gcmV0dXJuIGZyYW1lbGluayAtICgxICsgTEpf RlIyICsgYmNfYShmcmFtZV9wYyhmcmFtZWxpbmspWy0xXSkpCj4+IC0KPj4gLQo+PiAtZGVmIGZy YW1lX2lzcGNhbGwoZnJhbWVsaW5rKToKPj4gLSByZXR1cm4gKGZyYW1lX2Z0c3ooZnJhbWVsaW5r KSAmIEZSQU1FWydQQ0FMTCddKSA9PSBGUkFNRVsnUENBTEwnXQo+PiAtCj4+IC0KPj4gLWRlZiBm cmFtZV9zaXplZChmcmFtZWxpbmspOgo+PiAtIHJldHVybiAoZnJhbWVfZnRzeihmcmFtZWxpbmsp ICYgfkZSQU1FX1RZUEVQKQo+PiAtCj4+IC0KPj4gLWRlZiBmcmFtZV9wcmV2ZChmcmFtZWxpbmsp Ogo+PiAtIHJldHVybiBjYXN0KCdUVmFsdWUgKicsIGNhc3QoJ2NoYXIgKicsIGZyYW1lbGluaykg LSBmcmFtZV9zaXplZChmcmFtZWxpbmspKQo+PiAtCj4+IC0KPj4gLWRlZiBmcmFtZV90eXBlKGZy YW1lbGluayk6Cj4+IC0gcmV0dXJuIGZyYW1lX2Z0c3ooZnJhbWVsaW5rKSAmIEZSQU1FX1RZUEUK Pj4gLQo+PiAtCj4+IC1kZWYgZnJhbWVfdHlwZXAoZnJhbWVsaW5rKToKPj4gLSByZXR1cm4gZnJh bWVfZnRzeihmcmFtZWxpbmspICYgRlJBTUVfVFlQRVAKPj4gLQo+PiAtCj4+IC1kZWYgZnJhbWVf aXNsdWEoZnJhbWVsaW5rKToKPj4gLSByZXR1cm4gZnJhbWV0eXBlcyhpbnQoZnJhbWVfdHlwZShm cmFtZWxpbmspKSkgPT0gJ0wnIFwKPj4gLSBhbmQgaW50KGZyYW1lX2Z0c3ooZnJhbWVsaW5rKSkg PiAwCj4+IC0KPj4gLQo+PiAtZGVmIGZyYW1lX3ByZXYoZnJhbWVsaW5rKToKPj4gLSByZXR1cm4g ZnJhbWVfcHJldmwoZnJhbWVsaW5rKSBpZiBmcmFtZV9pc2x1YShmcmFtZWxpbmspIFwKPj4gLSBl bHNlIGZyYW1lX3ByZXZkKGZyYW1lbGluaykKPj4gLQo+PiAtCj4+IC1kZWYgZnJhbWVfc2VudGlu ZWwoTCk6Cj4+IC0gcmV0dXJuIG1yZWYoJ1RWYWx1ZSAqJywgTFsnc3RhY2snXSkgKyBMSl9GUjIK Pj4gLQo+PiAtCj4+IC0jIH19fQo+PiAtCj4+IC0jIENvbnN0IHt7ewo+PiAtCj4+IC0KPj4gLUxK XzY0ID0gTm9uZQo+PiAtTEpfR0M2NCA9IE5vbmUKPj4gLUxKX0ZSMiA9IE5vbmUKPj4gLUxKX0RV QUxOVU0gPSBOb25lCj4+IC0KPj4gLUxKX0dDVk1BU0sgPSAoKDEgPDwgNDcpIC0gMSkKPj4gLUxK X1RJU05VTSA9IE5vbmUKPj4gLVBBRERJTkcgPSBOb25lCj4+IC0KPj4gLSMgVGhlc2UgY29uc3Rh bnRzIGFyZSBtZWFuaW5nZnVsIG9ubHkgZm9yICdMSl82NCcgbW9kZS4KPj4gLUxKX0xJR0hUVURf QklUU19TRUcgPSA4Cj4+IC1MSl9MSUdIVFVEX0JJVFNfTE8gPSA0NyAtIExKX0xJR0hUVURfQklU U19TRUcKPj4gLUxJR0hUVURfU0VHX01BU0sgPSAoMSA8PCBMSl9MSUdIVFVEX0JJVFNfU0VHKSAt IDEKPj4gLUxJR0hUVURfTE9fTUFTSyA9ICgxIDw8IExKX0xJR0hUVURfQklUU19MTykgLSAxCj4+ IC0KPj4gLQo+PiAtIyB9fX0KPj4gLQo+PiAtCj4+IC1kZWYgaXR5cGUobyk6Cj4+IC0gcmV0dXJu IGNhc3QoJ3VpbnQzMl90Jywgb1snaXQ2NCddID4+IDQ3KSBpZiBMSl9HQzY0IGVsc2Ugb1snaXQn XQo+PiAtCj4+IC0KPj4gLWRlZiBtcmVmKHR5cGVuYW1lLCBvYmopOgo+PiAtIHJldHVybiBjYXN0 KHR5cGVuYW1lLCBvYmpbJ3B0cjY0J10gaWYgTEpfR0M2NCBlbHNlIG9ialsncHRyMzInXSkKPj4g LQo+PiAtCj4+IC1kZWYgZ2NyZWYob2JqKToKPj4gLSByZXR1cm4gY2FzdCgnR0NvYmogKicsIG9i alsnZ2NwdHI2NCddIGlmIExKX0dDNjQKPj4gLSBlbHNlIGNhc3QoJ3VpbnRwdHJfdCcsIG9ialsn Z2NwdHIzMiddKSkKPj4gLQo+PiAtCj4+IC1kZWYgZ2N2YWwob2JqKToKPj4gLSByZXR1cm4gY2Fz dCgnR0NvYmogKicsIG9ialsnZ2NwdHI2NCddICYgTEpfR0NWTUFTSyBpZiBMSl9HQzY0Cj4+IC0g ZWxzZSBjYXN0KCd1aW50cHRyX3QnLCBvYmpbJ2djcHRyMzInXSkpCj4+IC0KPj4gLQo+PiAtZGVm IGdjbmV4dChvYmopOgo+PiAtIHJldHVybiBnY3JlZihvYmopWydnY2gnXVsnbmV4dGdjJ10KPj4g LQo+PiAtCj4+IC1kZWYgTChMPU5vbmUpOgo+PiAtICMgbG9va3VwIGEgc3ltYm9sIGZvciB0aGUg bWFpbiBjb3JvdXRpbmUgY29uc2lkZXJpbmcgdGhlIGhvc3QgYXBwCj4+IC0gIyBYWFggRnJhZ2ls ZTogdGhvdWdoIHRoZSBsb29wIGluaXRpYWxpemF0aW9uIGxvb2tzIGxpa2UgYSBjcmFwIGJ1dCBp dAo+PiAtICMgcmVzcGVjdHMgYm90aCBQeXRob24gMiBhbmQgUHl0aG9uIDMuCj4+IC0gZm9yIGxz dGF0ZSBpbiBbTF0gKyBsaXN0KG1hcChsYW1iZGEgbWFpbjogbG9va3VwKG1haW4pLCAoCj4+IC0g IyBMdWFKSVQgbWFpbiBjb3JvIChzZWUgbHVhaml0L3NyYy9sdWFqaXQuYykKPj4gLSAnZ2xvYmFs TCcsCj4+IC0gIyBUYXJhbnRvb2wgbWFpbiBjb3JvIChzZWUgdGFyYW50b29sL3NyYy9sdWEvaW5p dC5oKQo+PiAtICd0YXJhbnRvb2xfTCcsCj4+IC0gIyBUT0RPOiBBZGQgbW9yZQo+PiAtICkpKToK Pj4gLSBpZiBsc3RhdGU6Cj4+IC0gcmV0dXJuIGNhc3QoJ2x1YV9TdGF0ZSAqJywgbHN0YXRlKQo+ PiAtCj4+IC0KPj4gLWRlZiBHKEwpOgo+PiAtIHJldHVybiBtcmVmKCdnbG9iYWxfU3RhdGUgKics IExbJ2dscmVmJ10pCj4+IC0KPj4gLQo+PiAtZGVmIEooZyk6Cj4+IC0gdHlwZUdHID0gZ3R5cGUo J0dHX1N0YXRlJykKPj4gLQo+PiAtIHJldHVybiBjYXN0KCdqaXRfU3RhdGUgKicsIGludChjYXN0 KCdjaGFyIConLCBnKSkKPj4gLSAtIGludCh0eXBlR0dbJ2cnXS5iaXRwb3MgLyA4KQo+PiAtICsg aW50KHR5cGVHR1snSiddLmJpdHBvcyAvIDgpKQo+PiAtCj4+IC0KPj4gLWRlZiB2bV9zdGF0ZShn KToKPj4gLSByZXR1cm4gewo+PiAtIGkybm90dTMyKDApOiAnSU5URVJQJywKPj4gLSBpMm5vdHUz MigxKTogJ0xGVU5DJywKPj4gLSBpMm5vdHUzMigyKTogJ0ZGVU5DJywKPj4gLSBpMm5vdHUzMigz KTogJ0NGVU5DJywKPj4gLSBpMm5vdHUzMig0KTogJ0dDJywKPj4gLSBpMm5vdHUzMig1KTogJ0VY SVQnLAo+PiAtIGkybm90dTMyKDYpOiAnUkVDT1JEJywKPj4gLSBpMm5vdHUzMig3KTogJ09QVCcs Cj4+IC0gaTJub3R1MzIoOCk6ICdBU00nLAo+PiAtIH0uZ2V0KGludCh0b3UzMihnWyd2bXN0YXRl J10pKSwgJ1RSQUNFJykKPj4gLQo+PiAtCj4+IC1kZWYgZ2Nfc3RhdGUoZyk6Cj4+IC0gcmV0dXJu IHsKPj4gLSAwOiAnUEFVU0UnLAo+PiAtIDE6ICdQUk9QQUdBVEUnLAo+PiAtIDI6ICdBVE9NSUMn LAo+PiAtIDM6ICdTV0VFUFNUUklORycsCj4+IC0gNDogJ1NXRUVQJywKPj4gLSA1OiAnRklOQUxJ WkUnLAo+PiAtIDY6ICdMQVNUJywKPj4gLSB9LmdldChpbnQoZ1snZ2MnXVsnc3RhdGUnXSksICdJ TlZBTElEJykKPj4gLQo+PiAtCj4+IC1kZWYgaml0X3N0YXRlKGcpOgo+PiAtIHJldHVybiB7Cj4+ IC0gMDogJ0lETEUnLAo+PiAtIDB4MTA6ICdBQ1RJVkUnLAo+PiAtIDB4MTE6ICdSRUNPUkQnLAo+ PiAtIDB4MTI6ICdTVEFSVCcsCj4+IC0gMHgxMzogJ0VORCcsCj4+IC0gMHgxNDogJ0FTTScsCj4+ IC0gMHgxNTogJ0VSUicsCj4+IC0gfS5nZXQoaW50KEooZylbJ3N0YXRlJ10pLCAnSU5WQUxJRCcp Cj4+IC0KPj4gLQo+PiAtZGVmIHR2aXNpbnQobyk6Cj4+IC0gcmV0dXJuIExKX0RVQUxOVU0gYW5k IGl0eXBlKG8pID09IExKX1RJU05VTQo+PiAtCj4+IC0KPj4gLWRlZiB0dmlzbnVtYmVyKG8pOgo+ PiAtIHJldHVybiBpdHlwZShvKSA8PSBMSl9USVNOVU0KPj4gLQo+PiAtCj4+IC1kZWYgdHZpc2xp Z2h0dWQobyk6Cj4+IC0gaWYgTEpfNjQgYW5kIG5vdCBMSl9HQzY0Ogo+PiAtIHJldHVybiAoY2Fz dCgnaW50MzJfdCcsIGl0eXBlKG8pKSA+PiAxNSkgPT0gLTIKPj4gLSBlbHNlOgo+PiAtIHJldHVy biBpdHlwZShvKSA9PSBMSl9UWydMSUdIVFVEJ10KPj4gLQo+PiAtCj4+IC1kZWYgc3RyZGF0YShv YmopOgo+PiAtICMgU3RyaW5nIGlzIHByaW50ZWQgd2l0aCBwb2ludGVyIHRvIGl0LCB0aGFua3Mg dG8gZ2RiLiBKdXN0IHN0cmlwIGl0Lgo+PiAtIHRyeToKPj4gLSByZXR1cm4gc3RyKGNhc3QoJ2No YXIgKicsIGNhc3QoJ0dDc3RyIConLCBvYmopICsgMSkpW2xlbihQQURESU5HKTpdCj4+IC0gZXhj ZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKPj4gLSByZXR1cm4gIjxsdWFqaXQtZ2RiOiBlcnJvciBv Y2N1cmVkIHdoaWxlIHJlbmRlcmluZyBub24tYXNjaWkgc2xvdD4iCj4+IC0KPj4gLQo+PiAtZGVm IGl0eXBlbWFwKG8pOgo+PiAtIGlmIExKXzY0IGFuZCBub3QgTEpfR0M2NDoKPj4gLSByZXR1cm4g TEpfVFsnTlVNWCddIGlmIHR2aXNudW1iZXIobykgXAo+PiAtIGVsc2UgTEpfVFsnTElHSFRVRCdd IGlmIHR2aXNsaWdodHVkKG8pIFwKPj4gLSBlbHNlIGl0eXBlKG8pCj4+IC0gZWxzZToKPj4gLSBy ZXR1cm4gTEpfVFsnTlVNWCddIGlmIHR2aXNudW1iZXIobykgZWxzZSBpdHlwZShvKQo+PiAtCj4+ IC0KPj4gLWRlZiBmdW5jcHJvdG8oZnVuYyk6Cj4+IC0gYXNzZXJ0IGZ1bmNbJ2ZmaWQnXSA9PSAw Cj4+IC0KPj4gLSByZXR1cm4gY2FzdCgnR0Nwcm90byAqJywKPj4gLSBtcmVmKCdjaGFyIConLCBm dW5jWydwYyddKSAtIGdkYi5sb29rdXBfdHlwZSgnR0Nwcm90bycpLnNpemVvZikKPj4gLQo+PiAt Cj4+IC1kZWYgZ2NsaXN0bGVuKHJvb3QsIGVuZD0weDApOgo+PiAtIGNvdW50ID0gMAo+PiAtIHdo aWxlIChnY3JlZihyb290KSAhPSBlbmQpOgo+PiAtIGNvdW50ICs9IDEKPj4gLSByb290ID0gZ2Nu ZXh0KHJvb3QpCj4+IC0gcmV0dXJuIGNvdW50Cj4+IC0KPj4gLQo+PiAtZGVmIGdjcmluZ2xlbihy b290KToKPj4gLSBpZiBub3QgZ2NyZWYocm9vdCk6Cj4+IC0gcmV0dXJuIDAKPj4gLSBlbGlmIGdj cmVmKHJvb3QpID09IGdjcmVmKGdjbmV4dChyb290KSk6Cj4+IC0gcmV0dXJuIDEKPj4gLSBlbHNl Ogo+PiAtIHJldHVybiAxICsgZ2NsaXN0bGVuKGdjbmV4dChyb290KSwgZ2NyZWYocm9vdCkpCj4+ IC0KPj4gLQo+PiAtZ2NsZW4gPSB7Cj4+IC0gJ3Jvb3QnOiBnY2xpc3RsZW4sCj4+IC0gJ2dyYXkn OiBnY2xpc3RsZW4sCj4+IC0gJ2dyYXlhZ2Fpbic6IGdjbGlzdGxlbiwKPj4gLSAnd2Vhayc6IGdj bGlzdGxlbiwKPj4gLSAjIFhYWDogZ2MubW11ZGF0YSBpcyBhIHJpbmctbGlzdC4KPj4gLSAnbW11 ZGF0YSc6IGdjcmluZ2xlbiwKPj4gLX0KPj4gLQo+PiAtCj4+IC0jIFRoZSBnZW5lcmF0b3IgdGhh dCBpbXBsZW1lbnRzIGZyYW1lIGl0ZXJhdG9yLgo+PiAtIyBFdmVyeSBmcmFtZSBpcyByZXByZXNl bnRlZCBhcyBhIHR1cGxlIG9mIGZyYW1lbGluayBhbmQgZnJhbWV0b3AuCj4+IC1kZWYgZnJhbWVz KEwpOgo+PiAtIGZyYW1ldG9wID0gTFsndG9wJ10KPj4gLSBmcmFtZWxpbmsgPSBMWydiYXNlJ10g LSAxCj4+IC0gZnJhbWVsaW5rX3NlbnRpbmVsID0gZnJhbWVfc2VudGluZWwoTCkKPj4gLSB3aGls ZSBUcnVlOgo+PiAtIHlpZWxkIGZyYW1lbGluaywgZnJhbWV0b3AKPj4gLSBmcmFtZXRvcCA9IGZy YW1lbGluayAtICgxICsgTEpfRlIyKQo+PiAtIGlmIGZyYW1lbGluayA8PSBmcmFtZWxpbmtfc2Vu dGluZWw6Cj4+IC0gYnJlYWsKPj4gLSBmcmFtZWxpbmsgPSBmcmFtZV9wcmV2KGZyYW1lbGluaykK Pj4gLQo+PiAtCj4+IC1kZWYgbGlnaHR1ZFYodHYpOgo+PiAtIGlmIExKXzY0Ogo+PiAtIHUgPSBp bnQodHZbJ3U2NCddKQo+PiAtICMgbGlnaHR1ZHNlZyBtYWNybyBleHBhbmRlZC4KPj4gLSBzZWcg PSAodSA+PiBMSl9MSUdIVFVEX0JJVFNfTE8pICYgTElHSFRVRF9TRUdfTUFTSwo+PiAtIHNlZ21h cCA9IG1yZWYoJ3VpbnQzMl90IConLCBHKEwoTm9uZSkpWydnYyddWydsaWdodHVkc2VnJ10pCj4+ IC0gIyBsaWdodHVkbG8gbWFjcm8gZXhwYW5kZWQuCj4+IC0gcmV0dXJuIChpbnQoc2VnbWFwW3Nl Z10pIDw8IDMyKSB8ICh1ICYgTElHSFRVRF9MT19NQVNLKQo+PiAtIGVsc2U6Cj4+IC0gcmV0dXJu IGdjdmFsKHR2WydnY3InXSkKPj4gLQo+PiAtCj4+IC0jIER1bXBlcnMge3t7Cj4+IC0KPj4gLQo+ PiAtZGVmIGR1bXBfbGpfdG5pbCh0dik6Cj4+IC0gcmV0dXJuICduaWwnCj4+IC0KPj4gLQo+PiAt ZGVmIGR1bXBfbGpfdGZhbHNlKHR2KToKPj4gLSByZXR1cm4gJ2ZhbHNlJwo+PiAtCj4+IC0KPj4g LWRlZiBkdW1wX2xqX3R0cnVlKHR2KToKPj4gLSByZXR1cm4gJ3RydWUnCj4+IC0KPj4gLQo+PiAt ZGVmIGR1bXBfbGpfdGxpZ2h0dWQodHYpOgo+PiAtIHJldHVybiAnbGlnaHQgdXNlcmRhdGEgQCB7 fScuZm9ybWF0KHN0cng2NChsaWdodHVkVih0dikpKQo+PiAtCj4+IC0KPj4gLWRlZiBkdW1wX2xq X3RzdHIodHYpOgo+PiAtIHJldHVybiAnc3RyaW5nIHtib2R5fSBAIHthZGRyZXNzfScuZm9ybWF0 KAo+PiAtIGJvZHk9c3RyZGF0YShnY3ZhbCh0dlsnZ2NyJ10pKSwKPj4gLSBhZGRyZXNzPXN0cng2 NChnY3ZhbCh0dlsnZ2NyJ10pKQo+PiAtICkKPj4gLQo+PiAtCj4+IC1kZWYgZHVtcF9sal90dXB2 YWwodHYpOgo+PiAtIHJldHVybiAndXB2YWx1ZSBAIHt9Jy5mb3JtYXQoc3RyeDY0KGdjdmFsKHR2 WydnY3InXSkpKQo+PiAtCj4+IC0KPj4gLWRlZiBkdW1wX2xqX3R0aHJlYWQodHYpOgo+PiAtIHJl dHVybiAndGhyZWFkIEAge30nLmZvcm1hdChzdHJ4NjQoZ2N2YWwodHZbJ2djciddKSkpCj4+IC0K Pj4gLQo+PiAtZGVmIGR1bXBfbGpfdHByb3RvKHR2KToKPj4gLSByZXR1cm4gJ3Byb3RvIEAge30n LmZvcm1hdChzdHJ4NjQoZ2N2YWwodHZbJ2djciddKSkpCj4+IC0KPj4gLQo+PiAtZGVmIGR1bXBf bGpfdGZ1bmModHYpOgo+PiAtIGZ1bmMgPSBjYXN0KCdzdHJ1Y3QgR0NmdW5jQyAqJywgZ2N2YWwo dHZbJ2djciddKSkKPj4gLSBmZmlkID0gZnVuY1snZmZpZCddCj4+IC0KPj4gLSBpZiBmZmlkID09 IDA6Cj4+IC0gcHQgPSBmdW5jcHJvdG8oZnVuYykKPj4gLSByZXR1cm4gJ0x1YSBmdW5jdGlvbiBA IHthZGRyfSwge251cHN9IHVwdmFsdWVzLCB7Y2h1bmt9OntsaW5lfScuZm9ybWF0KAo+PiAtIGFk ZHI9c3RyeDY0KGZ1bmMpLAo+PiAtIG51cHM9aW50KGZ1bmNbJ251cHZhbHVlcyddKSwKPj4gLSBj aHVuaz1zdHJkYXRhKGNhc3QoJ0dDc3RyIConLCBnY3ZhbChwdFsnY2h1bmtuYW1lJ10pKSksCj4+ IC0gbGluZT1wdFsnZmlyc3RsaW5lJ10KPj4gLSApCj4+IC0gZWxpZiBmZmlkID09IDE6Cj4+IC0g cmV0dXJuICdDIGZ1bmN0aW9uIEAge30nLmZvcm1hdChzdHJ4NjQoZnVuY1snZiddKSkKPj4gLSBl bHNlOgo+PiAtIHJldHVybiAnZmFzdCBmdW5jdGlvbiAje30nLmZvcm1hdChpbnQoZmZpZCkpCj4+ IC0KPj4gLQo+PiAtZGVmIGR1bXBfbGpfdHRyYWNlKHR2KToKPj4gLSB0cmFjZSA9IGNhc3QoJ3N0 cnVjdCBHQ3RyYWNlIConLCBnY3ZhbCh0dlsnZ2NyJ10pKQo+PiAtIHJldHVybiAndHJhY2Uge3Ry YWNlbm99IEAge2FkZHJ9Jy5mb3JtYXQoCj4+IC0gdHJhY2Vubz1zdHJ4NjQodHJhY2VbJ3RyYWNl bm8nXSksCj4+IC0gYWRkcj1zdHJ4NjQodHJhY2UpCj4+IC0gKQo+PiAtCj4+IC0KPj4gLWRlZiBk dW1wX2xqX3RjZGF0YSh0dik6Cj4+IC0gcmV0dXJuICdjZGF0YSBAIHt9Jy5mb3JtYXQoc3RyeDY0 KGdjdmFsKHR2WydnY3InXSkpKQo+PiAtCj4+IC0KPj4gLWRlZiBkdW1wX2xqX3R0YWIodHYpOgo+ PiAtIHRhYmxlID0gY2FzdCgnR0N0YWIgKicsIGdjdmFsKHR2WydnY3InXSkpCj4+IC0gcmV0dXJu ICd0YWJsZSBAIHtnY3J9IChhc2l6ZToge2FzaXplfSwgaG1hc2s6IHtobWFza30pJy5mb3JtYXQo Cj4+IC0gZ2NyPXN0cng2NCh0YWJsZSksCj4+IC0gYXNpemU9dGFibGVbJ2FzaXplJ10sCj4+IC0g aG1hc2s9c3RyeDY0KHRhYmxlWydobWFzayddKSwKPj4gLSApCj4+IC0KPj4gLQo+PiAtZGVmIGR1 bXBfbGpfdHVkYXRhKHR2KToKPj4gLSByZXR1cm4gJ3VzZXJkYXRhIEAge30nLmZvcm1hdChzdHJ4 NjQoZ2N2YWwodHZbJ2djciddKSkpCj4+IC0KPj4gLQo+PiAtZGVmIGR1bXBfbGpfdG51bXgodHYp Ogo+PiAtIGlmIHR2aXNpbnQodHYpOgo+PiAtIHJldHVybiAnaW50ZWdlciB7fScuZm9ybWF0KGNh c3QoJ2ludDMyX3QnLCB0dlsnaSddKSkKPj4gLSBlbHNlOgo+PiAtIHJldHVybiAnbnVtYmVyIHt9 Jy5mb3JtYXQoY2FzdCgnZG91YmxlJywgdHZbJ24nXSkpCj4+IC0KPj4gLQo+PiAtZGVmIGR1bXBf bGpfaW52YWxpZCh0dik6Cj4+IC0gcmV0dXJuICdub3QgdmFsaWQgdHlwZSBAIHt9Jy5mb3JtYXQo c3RyeDY0KGdjdmFsKHR2WydnY3InXSkpKQo+PiAtCj4+IC0KPj4gLSMgfX19Cj4+IC0KPj4gLQo+ PiAtZHVtcGVycyA9IHsKPj4gLSAnTEpfVE5JTCc6IGR1bXBfbGpfdG5pbCwKPj4gLSAnTEpfVEZB TFNFJzogZHVtcF9sal90ZmFsc2UsCj4+IC0gJ0xKX1RUUlVFJzogZHVtcF9sal90dHJ1ZSwKPj4g LSAnTEpfVExJR0hUVUQnOiBkdW1wX2xqX3RsaWdodHVkLAo+PiAtICdMSl9UU1RSJzogZHVtcF9s al90c3RyLAo+PiAtICdMSl9UVVBWQUwnOiBkdW1wX2xqX3R1cHZhbCwKPj4gLSAnTEpfVFRIUkVB RCc6IGR1bXBfbGpfdHRocmVhZCwKPj4gLSAnTEpfVFBST1RPJzogZHVtcF9sal90cHJvdG8sCj4+ IC0gJ0xKX1RGVU5DJzogZHVtcF9sal90ZnVuYywKPj4gLSAnTEpfVFRSQUNFJzogZHVtcF9sal90 dHJhY2UsCj4+IC0gJ0xKX1RDREFUQSc6IGR1bXBfbGpfdGNkYXRhLAo+PiAtICdMSl9UVEFCJzog ZHVtcF9sal90dGFiLAo+PiAtICdMSl9UVURBVEEnOiBkdW1wX2xqX3R1ZGF0YSwKPj4gLSAnTEpf VE5VTVgnOiBkdW1wX2xqX3RudW14LAo+PiAtfQo+PiAtCj4+IC0KPj4gLWRlZiBkdW1wX3R2YWx1 ZSh0dmFsdWUpOgo+PiAtIHJldHVybiBkdW1wZXJzLmdldCh0eXBlbmFtZXMoaXR5cGVtYXAodHZh bHVlKSksIGR1bXBfbGpfaW52YWxpZCkodHZhbHVlKQo+PiAtCj4+IC0KPj4gLWRlZiBkdW1wX2Zy YW1lbGlua19zbG90X2FkZHJlc3MoZnIpOgo+PiAtIHJldHVybiAne306e30nLmZvcm1hdChmciAt IDEsIGZyKSBpZiBMSl9GUjIgXAo+PiAtIGVsc2UgJ3t9Jy5mb3JtYXQoZnIpICsgUEFERElORwo+ PiAtCj4+IC0KPj4gLWRlZiBkdW1wX2ZyYW1lbGluayhMLCBmcik6Cj4+IC0gaWYgZnIgPT0gZnJh bWVfc2VudGluZWwoTCk6Cj4+IC0gcmV0dXJuICd7YWRkcn0gW1MgXSBGUkFNRTogZHVtbXkgTCcu Zm9ybWF0KAo+PiAtIGFkZHI9ZHVtcF9mcmFtZWxpbmtfc2xvdF9hZGRyZXNzKGZyKSwKPj4gLSAp Cj4+IC0gcmV0dXJuICd7YWRkcn0gWyBdIEZSQU1FOiBbe3BwfV0gZGVsdGE9e2R9LCB7Zn0nLmZv cm1hdCgKPj4gLSBhZGRyPWR1bXBfZnJhbWVsaW5rX3Nsb3RfYWRkcmVzcyhmciksCj4+IC0gcHA9 J1BQJyBpZiBmcmFtZV9pc3BjYWxsKGZyKSBlbHNlICd7ZnJuYW1lfXtwfScuZm9ybWF0KAo+PiAt IGZybmFtZT1mcmFtZXR5cGVzKGludChmcmFtZV90eXBlKGZyKSkpLAo+PiAtIHA9J1AnIGlmIGZy YW1lX3R5cGVwKGZyKSAmIEZSQU1FX1AgZWxzZSAnJwo+PiAtICksCj4+IC0gZD1jYXN0KCdUVmFs dWUgKicsIGZyKSAtIGNhc3QoJ1RWYWx1ZSAqJywgZnJhbWVfcHJldihmcikpLAo+PiAtIGY9ZHVt cF9sal90ZnVuYyhmciAtIExKX0ZSMiksCj4+IC0gKQo+PiAtCj4+IC0KPj4gLWRlZiBkdW1wX3N0 YWNrX3Nsb3QoTCwgc2xvdCwgYmFzZT1Ob25lLCB0b3A9Tm9uZSk6Cj4+IC0gYmFzZSA9IGJhc2Ug b3IgTFsnYmFzZSddCj4+IC0gdG9wID0gdG9wIG9yIExbJ3RvcCddCj4+IC0KPj4gLSByZXR1cm4g J3thZGRyfXtwYWRkaW5nfSBbIHtCfXtUfXtNfV0gVkFMVUU6IHt2YWx1ZX0nLmZvcm1hdCgKPj4g LSBhZGRyPXN0cng2NChzbG90KSwKPj4gLSBwYWRkaW5nPVBBRERJTkcsCj4+IC0gQj0nQicgaWYg c2xvdCA9PSBiYXNlIGVsc2UgJyAnLAo+PiAtIFQ9J1QnIGlmIHNsb3QgPT0gdG9wIGVsc2UgJyAn LAo+PiAtIE09J00nIGlmIHNsb3QgPT0gbXJlZignVFZhbHVlIConLCBMWydtYXhzdGFjayddKSBl bHNlICcgJywKPj4gLSB2YWx1ZT1kdW1wX3R2YWx1ZShzbG90KSwKPj4gLSApCj4+IC0KPj4gLQo+ PiAtZGVmIGR1bXBfc3RhY2soTCwgYmFzZT1Ob25lLCB0b3A9Tm9uZSk6Cj4+IC0gYmFzZSA9IGJh c2Ugb3IgTFsnYmFzZSddCj4+IC0gdG9wID0gdG9wIG9yIExbJ3RvcCddCj4+IC0gc3RhY2sgPSBt cmVmKCdUVmFsdWUgKicsIExbJ3N0YWNrJ10pCj4+IC0gbWF4c3RhY2sgPSBtcmVmKCdUVmFsdWUg KicsIExbJ21heHN0YWNrJ10pCj4+IC0gcmVkID0gNSArIDIgKiBMSl9GUjIKPj4gLQo+PiAtIGR1 bXAgPSBbCj4+IC0gJ3twYWRkaW5nfSBSZWQgem9uZToge25yZWRzbG90czogPjJ9IHNsb3RzIHtw YWRkaW5nfScuZm9ybWF0KAo+PiAtIHBhZGRpbmc9Jy0nICogbGVuKFBBRERJTkcpLAo+PiAtIG5y ZWRzbG90cz1yZWQsCj4+IC0gKSwKPj4gLSBdCj4+IC0gZHVtcC5leHRlbmQoWwo+PiAtIGR1bXBf c3RhY2tfc2xvdChMLCBtYXhzdGFjayArIG9mZnNldCwgYmFzZSwgdG9wKQo+PiAtIGZvciBvZmZz ZXQgaW4gcmFuZ2UocmVkLCAwLCAtMSkgIyBub3FhOiBFMTMxCj4+IC0gXSkKPj4gLSBkdW1wLmV4 dGVuZChbCj4+IC0gJ3twYWRkaW5nfSBTdGFjazoge25zdGFja3Nsb3RzOiA+NX0gc2xvdHMge3Bh ZGRpbmd9Jy5mb3JtYXQoCj4+IC0gcGFkZGluZz0nLScgKiBsZW4oUEFERElORyksCj4+IC0gbnN0 YWNrc2xvdHM9aW50KCh0b3U2NChtYXhzdGFjaykgLSB0b3U2NChzdGFjaykpID4+IDMpLAo+PiAt ICksCj4+IC0gZHVtcF9zdGFja19zbG90KEwsIG1heHN0YWNrLCBiYXNlLCB0b3ApLAo+PiAtICd7 c3RhcnR9OntlbmR9IFsgXSB7bmZyZWVzbG90c30gc2xvdHM6IEZyZWUgc3RhY2sgc2xvdHMnLmZv cm1hdCgKPj4gLSBzdGFydD1zdHJ4NjQodG9wICsgMSksCj4+IC0gZW5kPXN0cng2NChtYXhzdGFj ayAtIDEpLAo+PiAtIG5mcmVlc2xvdHM9aW50KCh0b3U2NChtYXhzdGFjaykgLSB0b3U2NCh0b3Ap IC0gOCkgPj4gMyksCj4+IC0gKSwKPj4gLSBdKQo+PiAtCj4+IC0gZm9yIGZyYW1lbGluaywgZnJh bWV0b3AgaW4gZnJhbWVzKEwpOgo+PiAtICMgRHVtcCBhbGwgZGF0YSBzbG90cyBpbiB0aGUgKGZy YW1lbGluaywgdG9wKSBpbnRlcnZhbC4KPj4gLSBkdW1wLmV4dGVuZChbCj4+IC0gZHVtcF9zdGFj a19zbG90KEwsIGZyYW1lbGluayArIG9mZnNldCwgYmFzZSwgdG9wKQo+PiAtIGZvciBvZmZzZXQg aW4gcmFuZ2UoZnJhbWV0b3AgLSBmcmFtZWxpbmssIDAsIC0xKSAjIG5vcWE6IEUxMzEKPj4gLSBd KQo+PiAtICMgRHVtcCBmcmFtZSBzbG90ICgyIHNsb3RzIGluIGNhc2Ugb2YgR0M2NCkuCj4+IC0g ZHVtcC5hcHBlbmQoZHVtcF9mcmFtZWxpbmsoTCwgZnJhbWVsaW5rKSkKPj4gLQo+PiAtIHJldHVy biAnXG4nLmpvaW4oZHVtcCkKPj4gLQo+PiAtCj4+IC1kZWYgZHVtcF9nYyhnKToKPj4gLSBnYyA9 IGdbJ2djJ10KPj4gLSBzdGF0cyA9IFsne2tleX06IHt2YWx1ZX0nLmZvcm1hdChrZXk9ZiwgdmFs dWU9Z2NbZl0pIGZvciBmIGluICgKPj4gLSAndG90YWwnLCAndGhyZXNob2xkJywgJ2RlYnQnLCAn ZXN0aW1hdGUnLCAnc3RlcG11bCcsICdwYXVzZScKPj4gLSApXQo+PiAtCj4+IC0gc3RhdHMgKz0g Wydzd2VlcHN0cjoge3N3ZWVwc3RyfS97c3RybWFza30nLmZvcm1hdCgKPj4gLSBzd2VlcHN0cj1n Y1snc3dlZXBzdHInXSwKPj4gLSAjIFN0cmluZyBoYXNoIG1hc2sgKHNpemUgb2YgaGFzaCB0YWJs ZSAtIDEpLgo+PiAtIHN0cm1hc2s9Z1snc3RybWFzayddICsgMSwKPj4gLSApXQo+PiAtCj4+IC0g c3RhdHMgKz0gWyd7a2V5fToge251bWJlcn0gb2JqZWN0cycuZm9ybWF0KAo+PiAtIGtleT1zdGF0 LAo+PiAtIG51bWJlcj1oYW5kbGVyKGdjW3N0YXRdKQo+PiAtICkgZm9yIHN0YXQsIGhhbmRsZXIg aW4gZ2NsZW4uaXRlbXMoKV0KPj4gLQo+PiAtIHJldHVybiAnXG4nLmpvaW4obWFwKGxhbWJkYSBz OiAnXHQnICsgcywgc3RhdHMpKQo+PiAtCj4+IC0KPj4gLWNsYXNzIExKQmFzZShnZGIuQ29tbWFu ZCk6Cj4+IC0KPj4gLSBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6Cj4+IC0gIyBYWFggRnJhZ2ls ZTogdGhvdWdoIHRoZSBjb21tYW5kIGluaXRpYWxpemF0aW9uIGxvb2tzIGxpa2UgYSBjcmFwIGJ1 dAo+PiAtICMgaXQgcmVzcGVjdHMgYm90aCBQeXRob24gMiBhbmQgUHl0aG9uIDMuCj4+IC0gZ2Ri LkNvbW1hbmQuX19pbml0X18oc2VsZiwgbmFtZSwgZ2RiLkNPTU1BTkRfREFUQSkKPj4gLSBnZGIu d3JpdGUoJ3t9IGNvbW1hbmQgaW5pdGlhbGl6ZWRcbicuZm9ybWF0KG5hbWUpKQo+PiAtCj4+IC0K Pj4gLWNsYXNzIExKRHVtcEFyY2goTEpCYXNlKToKPj4gLSAnJycKPj4gLWxqLWFyY2gKPj4gLQo+ PiAtVGhlIGNvbW1hbmQgcmVxdWlyZXMgbm8gYXJncyBhbmQgZHVtcHMgdmFsdWVzIG9mIExKXzY0 IGFuZCBMSl9HQzY0Cj4+IC1jb21waWxlLXRpbWUgZmxhZ3MuIFRoZXNlIHZhbHVlcyBkZWZpbmUg dGhlIHNpemVzIG9mIGhvc3QgYW5kIEdDCj4+IC1wb2ludGVycyByZXNwZWN0aXZlbHkuCj4+IC0g JycnCj4+IC0KPj4gLSBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgo+PiAtIGdkYi53 cml0ZSgKPj4gLSAnTEpfNjQ6IHtMSl82NH0sIExKX0dDNjQ6IHtMSl9HQzY0fSwgTEpfRFVBTE5V TToge0xKX0RVQUxOVU19XG4nCj4+IC0gLmZvcm1hdCgKPj4gLSBMSl82ND1MSl82NCwKPj4gLSBM Sl9HQzY0PUxKX0dDNjQsCj4+IC0gTEpfRFVBTE5VTT1MSl9EVUFMTlVNCj4+IC0gKQo+PiAtICkK Pj4gLQo+PiAtCj4+IC1jbGFzcyBMSkR1bXBUVmFsdWUoTEpCYXNlKToKPj4gLSAnJycKPj4gLWxq LXR2IDxUVmFsdWUgKj4KPj4gLQo+PiAtVGhlIGNvbW1hbmQgcmVjZWl2ZXMgYSBwb2ludGVyIHRv IDx0dj4gKFRWYWx1ZSBhZGRyZXNzKSBhbmQgZHVtcHMKPj4gLXRoZSB0eXBlIGFuZCBzb21lIGlu Zm8gcmVsYXRlZCB0byBpdC4KPj4gLQo+PiAtKiBMSl9UTklMOiBuaWwKPj4gLSogTEpfVEZBTFNF OiBmYWxzZQo+PiAtKiBMSl9UVFJVRTogdHJ1ZQo+PiAtKiBMSl9UTElHSFRVRDogbGlnaHQgdXNl cmRhdGEgQCA8Z2NyPgo+PiAtKiBMSl9UU1RSOiBzdHJpbmcgPHN0cmluZyBwYXlsb2FkPiBAIDxn Y3I+Cj4+IC0qIExKX1RVUFZBTDogdXB2YWx1ZSBAIDxnY3I+Cj4+IC0qIExKX1RUSFJFQUQ6IHRo cmVhZCBAIDxnY3I+Cj4+IC0qIExKX1RQUk9UTzogcHJvdG8gQCA8Z2NyPgo+PiAtKiBMSl9URlVO QzogPExGVU5DfENGVU5DfEZGVU5DPgo+PiAtIDxMRlVOQz46IEx1YSBmdW5jdGlvbiBAIDxnY3I+ LCA8bnVwdmFscz4gdXB2YWx1ZXMsIDxjaHVuazpsaW5lPgo+PiAtIDxDRlVOQz46IEMgZnVuY3Rp b24gPG1jb2RlIGFkZHJlc3M+Cj4+IC0gPEZGVU5DPjogZmFzdCBmdW5jdGlvbiAjPGZmaWQ+Cj4+ IC0qIExKX1RUUkFDRTogdHJhY2UgPHRyYWNlbm8+IEAgPGdjcj4KPj4gLSogTEpfVENEQVRBOiBj ZGF0YSBAIDxnY3I+Cj4+IC0qIExKX1RUQUI6IHRhYmxlIEAgPGdjcj4gKGFzaXplOiA8YXNpemU+ LCBobWFzazogPGhtYXNrPikKPj4gLSogTEpfVFVEQVRBOiB1c2VyZGF0YSBAIDxnY3I+Cj4+IC0q IExKX1ROVU1YOiBudW1iZXIgPG51bWVyaWMgcGF5bG9hZD4KPj4gLQo+PiAtV2hldGhlciB0aGUg dHlwZSBvZiB0aGUgZ2l2ZW4gYWRkcmVzcyBkaWZmZXJzIGZyb20gdGhlIGxpc3RlZCBhYm92ZSwg dGhlbgo+PiAtZXJyb3IgbWVzc2FnZSBvY2N1cnMuCj4+IC0gJycnCj4+IC0KPj4gLSBkZWYgaW52 b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgo+PiAtIHR2ID0gY2FzdCgnVFZhbHVlIConLCBwYXJz ZV9hcmcoYXJnKSkKPj4gLSBnZGIud3JpdGUoJ3t9XG4nLmZvcm1hdChkdW1wX3R2YWx1ZSh0dikp KQo+PiAtCj4+IC0KPj4gLWNsYXNzIExKRHVtcFN0cmluZyhMSkJhc2UpOgo+PiAtICcnJwo+PiAt bGotc3RyIDxHQ3N0ciAqPgo+PiAtCj4+IC1UaGUgY29tbWFuZCByZWNlaXZlcyBhIDxnY3I+IG9m IHRoZSBjb3JyZXNwb25kaW5nIEdDc3RyIG9iamVjdCBhbmQgZHVtcHMKPj4gLXRoZSBwYXlsb2Fk LCBzaXplIGluIGJ5dGVzIGFuZCBoYXNoLgo+PiAtCj4+IC0qQ2F2ZWF0KjogU2luY2UgUHl0aG9u IDIgcHJvdmlkZXMgbm8gbmF0aXZlIFVuaWNvZGUgc3VwcG9ydCwgdGhlIHBheWxvYWQKPj4gLWlz IHJlcGxhY2VkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3Igd2hlbiBkZWNvZGluZyBmYWls cy4KPj4gLSAnJycKPj4gLQo+PiAtIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6Cj4+ IC0gc3RyaW5nID0gY2FzdCgnR0NzdHIgKicsIHBhcnNlX2FyZyhhcmcpKQo+PiAtIGdkYi53cml0 ZSgiU3RyaW5nOiB7Ym9keX0gW3tsZW59IGJ5dGVzXSB3aXRoIGhhc2gge2hhc2h9XG4iLmZvcm1h dCgKPj4gLSBib2R5PXN0cmRhdGEoc3RyaW5nKSwKPj4gLSBoYXNoPXN0cng2NChzdHJpbmdbJ2hh c2gnXSksCj4+IC0gbGVuPXN0cmluZ1snbGVuJ10sCj4+IC0gKSkKPj4gLQo+PiAtCj4+IC1jbGFz cyBMSkR1bXBUYWJsZShMSkJhc2UpOgo+PiAtICcnJwo+PiAtbGotdGFiIDxHQ3RhYiAqPgo+PiAt Cj4+IC1UaGUgY29tbWFuZCByZWNlaXZlcyBhIEdDdGFiIGFkcmVzcyBhbmQgZHVtcHMgdGhlIHRh YmxlIGNvbnRlbnRzOgo+PiAtKiBNZXRhdGFibGUgYWRkcmVzcyB3aGV0aGVyIHRoZSBvbmUgaXMg c2V0Cj4+IC0qIEFycmF5IHBhcnQgPGFzaXplPiBzbG90czoKPj4gLSA8YXNsb3QgcHRyPjogWzxp bmRleD5dOiA8dHY+Cj4+IC0qIEhhc2ggcGFydCA8aHNpemU+IG5vZGVzOgo+PiAtIDxobm9kZSBw dHI+OiB7IDx0dj4gfSA9PiB7IDx0dj4gfTsgbmV4dCA9IDxuZXh0IGhub2RlIHB0cj4KPj4gLSAn JycKPj4gLQo+PiAtIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6Cj4+IC0gdCA9IGNh c3QoJ0dDdGFiIConLCBwYXJzZV9hcmcoYXJnKSkKPj4gLSBhcnJheSA9IG1yZWYoJ1RWYWx1ZSAq JywgdFsnYXJyYXknXSkKPj4gLSBub2RlcyA9IG1yZWYoJ3N0cnVjdCBOb2RlIConLCB0Wydub2Rl J10pCj4+IC0gbXQgPSBnY3ZhbCh0WydtZXRhdGFibGUnXSkKPj4gLSBjYXBhY2l0eSA9IHsKPj4g LSAnYXBhcnQnOiBpbnQodFsnYXNpemUnXSksCj4+IC0gJ2hwYXJ0JzogaW50KHRbJ2htYXNrJ10g KyAxKSBpZiB0WydobWFzayddID4gMCBlbHNlIDAKPj4gLSB9Cj4+IC0KPj4gLSBpZiBtdCAhPSAw Ogo+PiAtIGdkYi53cml0ZSgnTWV0YXRhYmxlIGRldGVjdGVkOiB7fVxuJy5mb3JtYXQoc3RyeDY0 KG10KSkpCj4+IC0KPj4gLSBnZGIud3JpdGUoJ0FycmF5IHBhcnQ6IHt9IHNsb3RzXG4nLmZvcm1h dChjYXBhY2l0eVsnYXBhcnQnXSkpCj4+IC0gZm9yIGkgaW4gcmFuZ2UoY2FwYWNpdHlbJ2FwYXJ0 J10pOgo+PiAtIHNsb3QgPSBhcnJheSArIGkKPj4gLSBnZGIud3JpdGUoJ3twdHJ9OiBbe2luZGV4 fV06IHt2YWx1ZX1cbicuZm9ybWF0KAo+PiAtIHB0cj1zbG90LAo+PiAtIGluZGV4PWksCj4+IC0g dmFsdWU9ZHVtcF90dmFsdWUoc2xvdCkKPj4gLSApKQo+PiAtCj4+IC0gZ2RiLndyaXRlKCdIYXNo IHBhcnQ6IHt9IG5vZGVzXG4nLmZvcm1hdChjYXBhY2l0eVsnaHBhcnQnXSkpCj4+IC0gIyBTZWUg aG1hc2sgY29tbWVudCBpbiBsal9vYmouaAo+PiAtIGZvciBpIGluIHJhbmdlKGNhcGFjaXR5Wydo cGFydCddKToKPj4gLSBub2RlID0gbm9kZXMgKyBpCj4+IC0gZ2RiLndyaXRlKCd7cHRyfToge3sg e2tleX0gfX0gPT4ge3sge3ZhbH0gfX07IG5leHQgPSB7bn1cbicuZm9ybWF0KAo+PiAtIHB0cj1u b2RlLAo+PiAtIGtleT1kdW1wX3R2YWx1ZShub2RlWydrZXknXSksCj4+IC0gdmFsPWR1bXBfdHZh bHVlKG5vZGVbJ3ZhbCddKSwKPj4gLSBuPW1yZWYoJ3N0cnVjdCBOb2RlIConLCBub2RlWyduZXh0 J10pCj4+IC0gKSkKPj4gLQo+PiAtCj4+IC1jbGFzcyBMSkR1bXBTdGFjayhMSkJhc2UpOgo+PiAt ICcnJwo+PiAtbGotc3RhY2sgWzxsdWFfU3RhdGUgKj5dCj4+IC0KPj4gLVRoZSBjb21tYW5kIHJl Y2VpdmVzIGEgbHVhX1N0YXRlIGFkZHJlc3MgYW5kIGR1bXBzIHRoZSBnaXZlbiBMdWEKPj4gLWNv cm91dGluZSBndWVzdCBzdGFjazoKPj4gLQo+PiAtPHNsb3QgcHRyPiBbPHNsb3QgYXR0cmlidXRl cz5dIDxWQUxVRXxGUkFNRT4KPj4gLQo+PiAtKiA8c2xvdCBwdHI+OiBndWVzdCBzdGFjayBzbG90 IGFkZHJlc3MKPj4gLSogPHNsb3QgYXR0cmlidXRlcz46Cj4+IC0gLSBTOiBCb3R0b20gb2YgdGhl IHN0YWNrICh0aGUgc2xvdCBMLT5zdGFjayBwb2ludHMgdG8pCj4+IC0gLSBCOiBCYXNlIG9mIHRo ZSBjdXJyZW50IGd1ZXN0IGZyYW1lICh0aGUgc2xvdCBMLT5iYXNlIHBvaW50cyB0bykKPj4gLSAt IFQ6IFRvcCBvZiB0aGUgY3VycmVudCBndWVzdCBmcmFtZSAodGhlIHNsb3QgTC0+dG9wIHBvaW50 cyB0bykKPj4gLSAtIE06IExhc3Qgc2xvdCBvZiB0aGUgc3RhY2sgKHRoZSBzbG90IEwtPm1heHN0 YWNrIHBvaW50cyB0bykKPj4gLSogPFZBTFVFPjogc2VlIGhlbHAgbGotdHYgZm9yIG1vcmUgaW5m bwo+PiAtKiA8RlJBTUU+OiBmcmFtZWxpbmsgc2xvdCBkaWZmZXJzIGZyb20gdGhlIHZhbHVlIHNs b3Q6IGl0IGNvbnRhaW5zIGluZm8KPj4gLSByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbiBiZWluZyBl eGVjdXRlZCB3aXRoaW4gdGhpcyBndWVzdCBmcmFtZSwgaXRzCj4+IC0gdHlwZSBhbmQgbGluayB0 byB0aGUgcGFyZW50IGd1ZXN0IGZyYW1lCj4+IC0gWzxmcmFtZSB0eXBlPl0gZGVsdGE9PHNsb3Rz IGluIGZyYW1lPiwgPGxqLXR2IGZvciBMSl9URlVOQyBzbG90Pgo+PiAtIC0gPGZyYW1lIHR5cGU+ Ogo+PiAtICsgTDogVk0gcGVyZm9ybXMgYSBjYWxsIGFzIGEgcmVzdWx0IG9mIGJ5dGVjb2RlIGV4 ZWN1dGlvbgo+PiAtICsgQzogVk0gcGVyZm9ybXMgYSBjYWxsIGFzIGEgcmVzdWx0IG9mIGxqX3Zt X2NhbGwKPj4gLSArIE06IFZNIHBlcmZvcm1zIGEgY2FsbCB0byBhIG1ldGFtZXRob2QgYXMgYSBy ZXN1bHQgb2YgYnl0ZWNvZGUKPj4gLSBleGVjdXRpb24KPj4gLSArIFY6IFZhcmlhYmxlLWxlbmd0 aCBmcmFtZSBmb3Igc3RvcmluZyBhcmd1bWVudHMgb2YgYSB2YXJpYWRpYwo+PiAtIGZ1bmN0aW9u Cj4+IC0gKyBDUDogUHJvdGVjdGVkIEMgZnJhbWUKPj4gLSArIFBQOiBWTSBwZXJmb3JtcyBhIGNh bGwgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5pZyBwY2FsbCBvciB4cGNhbGwKPj4gLQo+PiAtSWYg TCBpcyBvbW1pdGVkIHRoZSBtYWluIGNvcm91dGluZSBpcyB1c2VkLgo+PiAtICcnJwo+PiAtCj4+ IC0gZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKPj4gLSBnZGIud3JpdGUoJ3t9XG4n LmZvcm1hdChkdW1wX3N0YWNrKEwocGFyc2VfYXJnKGFyZykpKSkpCj4+IC0KPj4gLQo+PiAtY2xh c3MgTEpTdGF0ZShMSkJhc2UpOgo+PiAtICcnJwo+PiAtbGotc3RhdGUKPj4gLVRoZSBjb21tYW5k IHJlcXVpcmVzIG5vIGFyZ3MgYW5kIGR1bXBzIGN1cnJlbnQgVk0gYW5kIEdDIHN0YXRlcwo+PiAt KiBWTSBzdGF0ZTogPElOVEVSUHxDfEdDfEVYSVR8UkVDT1JEfE9QVHxBU018VFJBQ0U+Cj4+IC0q IEdDIHN0YXRlOiA8UEFVU0V8UFJPUEFHQVRFfEFUT01JQ3xTV0VFUFNUUklOR3xTV0VFUHxGSU5B TElaRXxMQVNUPgo+PiAtKiBKSVQgc3RhdGU6IDxJRExFfEFDVElWRXxSRUNPUkR8U1RBUlR8RU5E fEFTTXxFUlI+Cj4+IC0gJycnCj4+IC0KPj4gLSBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90 dHkpOgo+PiAtIGcgPSBHKEwoTm9uZSkpCj4+IC0gZ2RiLndyaXRlKCd7fVxuJy5mb3JtYXQoJ1xu Jy5qb2luKAo+PiAtIG1hcChsYW1iZGEgdDogJ3t9IHN0YXRlOiB7fScuZm9ybWF0KCp0KSwgewo+ PiAtICdWTSc6IHZtX3N0YXRlKGcpLAo+PiAtICdHQyc6IGdjX3N0YXRlKGcpLAo+PiAtICdKSVQn OiBqaXRfc3RhdGUoZyksCj4+IC0gfS5pdGVtcygpKQo+PiAtICkpKQo+PiAtCj4+IC0KPj4gLWNs YXNzIExKR0MoTEpCYXNlKToKPj4gLSAnJycKPj4gLWxqLWdjCj4+IC0KPj4gLVRoZSBjb21tYW5k IHJlcXVpcmVzIG5vIGFyZ3MgYW5kIGR1bXBzIGN1cnJlbnQgR0Mgc3RhdHM6Cj4+IC0qIHRvdGFs OiA8dG90YWwgbnVtYmVyIG9mIGFsbG9jYXRlZCBieXRlcyBpbiBHQyBhcmVhPgo+PiAtKiB0aHJl c2hvbGQ6IDxsaW1pdCB3aGVuIGdjIHN0ZXAgaXMgdHJpZ2dlcmVkPgo+PiAtKiBkZWJ0OiA8aG93 IG11Y2ggR0MgaXMgYmVoaW5kIHNjaGVkdWxlPgo+PiAtKiBlc3RpbWF0ZTogPGVzdGltYXRlIG9m IG1lbW9yeSBhY3R1YWxseSBpbiB1c2U+Cj4+IC0qIHN0ZXBtdWw6IDxpbmNyZW1lbnRhbCBHQyBz dGVwIGdyYW51bGFyaXR5Pgo+PiAtKiBwYXVzZTogPHBhdXNlIGJldHdlZW4gc3VjY2Vzc2l2ZSBH QyBjeWNsZXM+Cj4+IC0qIHN3ZWVwc3RyOiA8c3dlZXAgcG9zaXRpb24gaW4gc3RyaW5nIHRhYmxl Pgo+PiAtKiByb290OiA8bnVtYmVyIG9mIGFsbCBjb2xsZWN0YWJsZSBvYmplY3RzPgo+PiAtKiBn cmF5OiA8bnVtYmVyIG9mIGdyYXkgb2JqZWN0cz4KPj4gLSogZ3JheWFnYWluOiA8bnVtYmVyIG9m IG9iamVjdHMgZm9yIGF0b21pYyB0cmF2ZXJzYWw+Cj4+IC0qIHdlYWs6IDxudW1iZXIgb2Ygd2Vh ayB0YWJsZXMgKHRvIGJlIGNsZWFyZWQpPgo+PiAtKiBtbXVkYXRhOiA8bnVtYmVyIG9mIHVkYXRh fGNkYXRhIHRvIGJlIGZpbmFsaXplZD4KPj4gLSAnJycKPj4gLQo+PiAtIGRlZiBpbnZva2Uoc2Vs ZiwgYXJnLCBmcm9tX3R0eSk6Cj4+IC0gZyA9IEcoTChOb25lKSkKPj4gLSBnZGIud3JpdGUoJ0dD IHN0YXRzOiB7c3RhdGV9XG57c3RhdHN9XG4nLmZvcm1hdCgKPj4gLSBzdGF0ZT1nY19zdGF0ZShn KSwKPj4gLSBzdGF0cz1kdW1wX2djKGcpCj4+IC0gKSkKPj4gLQo+PiAtCj4+IC1kZWYgaW5pdChj b21tYW5kcyk6Cj4+IC0gZ2xvYmFsIExKXzY0LCBMSl9HQzY0LCBMSl9GUjIsIExKX0RVQUxOVU0s IExKX1RJU05VTSwgUEFERElORwo+PiAtCj4+IC0gIyBYWFggRnJhZ2lsZTogdGhvdWdoIGNvbm5l Y3RpbmcgdGhlIGNhbGxiYWNrIGxvb2tzIGxpa2UgYSBjcmFwIGJ1dCBpdAo+PiAtICMgcmVzcGVj dHMgYm90aCBQeXRob24gMiBhbmQgUHl0aG9uIDMgKHNlZSAjNDgyOCkuCj4+IC0gZGVmIGNvbm5l Y3QoY2FsbGJhY2spOgo+PiAtIGlmIExFR0FDWToKPj4gLSBnbG9iYWwgQ09OTkVDVEVECj4+IC0g Q09OTkVDVEVEID0gVHJ1ZQo+PiAtIGdkYi5ldmVudHMubmV3X29iamZpbGUuY29ubmVjdChjYWxs YmFjaykKPj4gLQo+PiAtICMgWFhYIEZyYWdpbGU6IHRob3VnaCBkaXNjb25uZWN0aW5nIHRoZSBj YWxsYmFjayBsb29rcyBsaWtlIGEgY3JhcCBidXQgaXQKPj4gLSAjIHJlc3BlY3RzIGJvdGggUHl0 aG9uIDIgYW5kIFB5dGhvbiAzIChzZWUgIzQ4MjgpLgo+PiAtIGRlZiBkaXNjb25uZWN0KGNhbGxi YWNrKToKPj4gLSBpZiBMRUdBQ1k6Cj4+IC0gZ2xvYmFsIENPTk5FQ1RFRAo+PiAtIGlmIG5vdCBD T05ORUNURUQ6Cj4+IC0gcmV0dXJuCj4+IC0gQ09OTkVDVEVEID0gRmFsc2UKPj4gLSBnZGIuZXZl bnRzLm5ld19vYmpmaWxlLmRpc2Nvbm5lY3QoY2FsbGJhY2spCj4+IC0KPj4gLSB0cnk6Cj4+IC0g IyBUcnkgdG8gcmVtb3ZlIHRoZSBjYWxsYmFjayBhdCBmaXJzdCB0byBub3QgYXBwZW5kIGR1cGxp Y2F0ZXMgdG8KPj4gLSAjIGdkYi5ldmVudHMubmV3X29iamZpbGUgaW50ZXJuYWwgbGlzdC4KPj4g LSBkaXNjb25uZWN0KGxvYWQpCj4+IC0gZXhjZXB0IEV4Y2VwdGlvbjoKPj4gLSAjIENhbGxiYWNr IGlzIG5vdCBjb25uZWN0ZWQuCj4+IC0gcGFzcwo+PiAtCj4+IC0gdHJ5Ogo+PiAtICMgRGV0ZWN0 IHdoZXRoZXIgbGlibHVhaml0IG9iamZpbGUgaXMgbG9hZGVkLgo+PiAtIGdkYi5wYXJzZV9hbmRf ZXZhbCgnbHVhSklUX3NldG1vZGUnKQo+PiAtIGV4Y2VwdCBFeGNlcHRpb246Cj4+IC0gZ2RiLndy aXRlKCdsdWFqaXQtZ2RiLnB5IGluaXRpYWxpemF0aW9uIGlzIHBvc3Rwb25lZCAnCj4+IC0gJ3Vu dGlsIGxpYmx1YWppdCBvYmpmaWxlIGlzIGxvYWRlZFxuJykKPj4gLSAjIEFkZCBhIGNhbGxiYWNr IHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG5leHQgb2JqZmlsZSBpcyBsb2FkZWQuCj4+IC0gY29u bmVjdChsb2FkKQo+PiAtIHJldHVybgo+PiAtCj4+IC0gdHJ5Ogo+PiAtIExKXzY0ID0gc3RyKGdk Yi5wYXJzZV9hbmRfZXZhbCgnSVJUX1BUUicpKSA9PSAnSVJUX1A2NCcKPj4gLSBMSl9GUjIgPSBM Sl9HQzY0ID0gc3RyKGdkYi5wYXJzZV9hbmRfZXZhbCgnSVJUX1BHQycpKSA9PSAnSVJUX1A2NCcK Pj4gLSBMSl9EVUFMTlVNID0gZ2RiLmxvb2t1cF9nbG9iYWxfc3ltYm9sKCdsal9saWJfY2hlY2tu dW1iZXInKSBpcyBub3QgTm9uZQo+PiAtIGV4Y2VwdCBFeGNlcHRpb246Cj4+IC0gZ2RiLndyaXRl KCdsdWFqaXQtZ2RiLnB5IGZhaWxlZCB0byBsb2FkOiAnCj4+IC0gJ25vIGRlYnVnZ2luZyBzeW1i b2xzIGZvdW5kIGZvciBsaWJsdWFqaXRcbicpCj4+IC0gcmV0dXJuCj4+IC0KPj4gLSBmb3IgbmFt ZSwgY29tbWFuZCBpbiBjb21tYW5kcy5pdGVtcygpOgo+PiAtIGNvbW1hbmQobmFtZSkKPj4gLQo+ PiAtIFBBRERJTkcgPSAnICcgKiBsZW4oJzonICsgaGV4KCgxIDw8ICg0NyBpZiBMSl9HQzY0IGVs c2UgMzIpKSAtIDEpKQo+PiAtIExKX1RJU05VTSA9IDB4ZmZmZWZmZmYgaWYgTEpfNjQgYW5kIG5v dCBMSl9HQzY0IGVsc2UgTEpfVFsnTlVNWCddCj4+IC0KPj4gLSBnZGIud3JpdGUoJ2x1YWppdC1n ZGIucHkgaXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZFxuJykKPj4gLQo+PiAtCj4+IC1kZWYgbG9hZChl dmVudD1Ob25lKToKPj4gLSBpbml0KHsKPj4gLSAnbGotYXJjaCc6IExKRHVtcEFyY2gsCj4+IC0g J2xqLXR2JzogTEpEdW1wVFZhbHVlLAo+PiAtICdsai1zdHInOiBMSkR1bXBTdHJpbmcsCj4+IC0g J2xqLXRhYic6IExKRHVtcFRhYmxlLAo+PiAtICdsai1zdGFjayc6IExKRHVtcFN0YWNrLAo+PiAt ICdsai1zdGF0ZSc6IExKU3RhdGUsCj4+IC0gJ2xqLWdjJzogTEpHQywKPj4gLSB9KQo+PiAtCj4+ IC0KPj4gLWxvYWQoTm9uZSkKPj4gZGlmZiAtLWdpdCBhL3NyYy9sdWFqaXRfbGxkYi5weSBiL3Ny Yy9sdWFqaXRfZGJnLnB5Cj4+IHNpbWlsYXJpdHkgaW5kZXggNjMlCj4+IHJlbmFtZSBmcm9tIHNy Yy9sdWFqaXRfbGxkYi5weQo+PiByZW5hbWUgdG8gc3JjL2x1YWppdF9kYmcucHkKPj4gaW5kZXgg ZWYwOTg2Y2MuLmNiNDZiNDczIDEwMDY0NAo+PiAtLS0gYS9zcmMvbHVhaml0X2xsZGIucHkKPj4g KysrIGIvc3JjL2x1YWppdF9kYmcucHkKPj4gQEAgLTEsMTAgKzEsMjMxIEBACj4+IC0jIExMREIg ZXh0ZW5zaW9uIGZvciBMdWFKSVQgcG9zdC1tb3J0ZW0gYW5hbHlzaXMuCj4+IC0jIFRvIHVzZSwg anVzdCBwdXQgJ2NvbW1hbmQgc2NyaXB0IGltcG9ydCA8cGF0aC10by1yZXBvPi9zcmMvbHVhaml0 X2xsZGIucHknCj4+IC0jIGluIGxsZGIuCj4+ICsjIERlYnVnIGV4dGVuc2lvbiBmb3IgTHVhSklU IHBvc3QtbW9ydGVtIGFuYWx5c2lzLgo+PiArIyBUbyB1c2UgaW4gTExEQjogJ2NvbW1hbmQgc2Ny aXB0IGltcG9ydCA8cGF0aC10by1yZXBvPi9zcmMvbHVhaml0X2RiZy5weScKPj4gKyMgVG8gdXNl IGluIEdEQjogJ3NvdXJjZSA8cGF0aC10by1yZXBvPi9zcmMvbHVhaml0X2RiZy5weScKPj4KPj4g aW1wb3J0IGFiYwo+PiBpbXBvcnQgcmUKPj4gLWltcG9ydCBsbGRiCj4+ICtpbXBvcnQgc3lzCj4+ ICtpbXBvcnQgdHlwZXMKPj4gKwo+PiArZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGltcG9ydF9tb2R1 bGUKPj4gKwo+PiArIyBtYWtlIHNjcmlwdCBjb21wYXRpYmxlIHdpdGggdGhlIGFuY2llbnQgUHl0 aG9uIHt7ewo+PiArCj4+ICsKPj4gK0xFR0FDWSA9IHJlLm1hdGNoKHInXjJcLicsIHN5cy52ZXJz aW9uKQo+PiArCj4+ICtpZiBMRUdBQ1k6Cj4+ICsgQ09OTkVDVEVEID0gRmFsc2UKPj4gKyBpbnQg PSBsb25nCj4+ICsgcmFuZ2UgPSB4cmFuZ2UKPj4gKwo+PiArCj4+ICtkZWYgaXNfaW50ZWdlcl90 eXBlKHZhbCk6Cj4+ICsgcmV0dXJuIGlzaW5zdGFuY2UodmFsLCBpbnQpIG9yIChMRUdBQ1kgYW5k IGlzaW5zdGFuY2UodmFsLCB0eXBlcy5JbnRUeXBlKSkKPj4gKwo+PiArCj4+ICsjIH19fQo+PiAr Cj4+ICsKPj4gK2NsYXNzIERlYnVnZ2VyKG9iamVjdCk6Cj4+ICsgZGVmIF9faW5pdF9fKHNlbGYp Ogo+PiArIHNlbGYuR0RCID0gRmFsc2UKPj4gKyBzZWxmLkxMREIgPSBGYWxzZQo+PiArCj4+ICsg ZGVidWdnZXJzID0gewo+PiArICdnZGInOiBsYW1iZGEgbGliOiBUcnVlLAo+PiArICdsbGRiJzog bGFtYmRhIGxpYjogbGliLmRlYnVnZ2VyIGlzIG5vdCBOb25lLAo+PiArIH0KPj4gKyBmb3IgbmFt ZSwgaGVhbHRoY2hlY2sgaW4gZGVidWdnZXJzLml0ZW1zKCk6Cj4+ICsgbGliID0gTm9uZQo+PiAr IHRyeToKPj4gKyBsaWIgPSBpbXBvcnRfbW9kdWxlKG5hbWUpCj4+ICsgZXhjZXB0IEltcG9ydEVy cm9yOgo+PiArIGNvbnRpbnVlCj4+ICsKPj4gKyBpZiBoZWFsdGhjaGVjayhsaWIpOgo+PiArIHNl dGF0dHIoc2VsZiwgbmFtZS51cHBlcigpLCBUcnVlKQo+PiArIGdsb2JhbHMoKVtuYW1lXSA9IGxp Ygo+PiArIHNlbGYubmFtZSA9IG5hbWUKPj4gKwo+PiArIGFzc2VydCBzZWxmLkxMREIgIT0gc2Vs Zi5HREIKPj4gKwo+PiArIGRlZiBzZXR1cF90YXJnZXQoc2VsZiwgZGVidWdnZXIpOgo+PiArIGds b2JhbCB0YXJnZXQKPj4gKyBpZiBzZWxmLkxMREI6Cj4+ICsgdGFyZ2V0ID0gZGVidWdnZXIuR2V0 U2VsZWN0ZWRUYXJnZXQoKQo+PiArCj4+ICsgZGVmIHdyaXRlKHNlbGYsIG1zZyk6Cj4+ICsgaWYg c2VsZi5MTERCOgo+PiArIHByaW50KG1zZykKPj4gKyBlbHNlOgo+PiArIGdkYi53cml0ZShtc2cg KyAnXG4nKQo+PiArCj4+ICsgZGVmIGNtZF9pbml0KHNlbGYsIGNtZF9jbHMsIGRlYnVnZ2VyPU5v bmUpOgo+PiArIGlmIHNlbGYuTExEQjoKPj4gKyBkZWJ1Z2dlci5IYW5kbGVDb21tYW5kKAo+PiAr ICdjb21tYW5kIHNjcmlwdCBhZGQgLS1vdmVyd3JpdGUgLS1jbGFzcyAnCj4+ICsgJ2x1YWppdF9k Ymcue2Nsc30ge2NtZH0nCj4+ICsgLmZvcm1hdCgKPj4gKyBjbHM9Y21kX2Nscy5fX25hbWVfXywK Pj4gKyBjbWQ9Y21kX2Nscy5jb21tYW5kLAo+PiArICkKPj4gKyApCj4+ICsgZWxzZToKPj4gKyBj bWRfY2xzKCkKPj4gKwo+PiArIGRlZiBldmVudF9jb25uZWN0KHNlbGYsIGNhbGxiYWNrKToKPj4g KyBpZiBub3Qgc2VsZi5MTERCOgo+PiArICMgWFhYIEZyYWdpbGU6IHRob3VnaCBjb25uZWN0aW5n IHRoZSBjYWxsYmFjayBsb29rcyBsaWtlIGEgY3JhcCBidXQKPj4gKyAjIGl0IHJlc3BlY3RzIGJv dGggUHl0aG9uIDIgYW5kIFB5dGhvbiAzIChzZWUgIzQ4MjgpLgo+PiArIGlmIExFR0FDWToKPj4g KyBnbG9iYWwgQ09OTkVDVEVECj4+ICsgQ09OTkVDVEVEID0gVHJ1ZQo+PiArIGdkYi5ldmVudHMu bmV3X29iamZpbGUuY29ubmVjdChjYWxsYmFjaykKPj4gKwo+PiArIGRlZiBldmVudF9kaXNjb25u ZWN0KHNlbGYsIGNhbGxiYWNrKToKPj4gKyBpZiBub3Qgc2VsZi5MTERCOgo+PiArICMgWFhYIEZy YWdpbGU6IHRob3VnaCBkaXNjb25uZWN0aW5nIHRoZSBjYWxsYmFjayBsb29rcyBsaWtlIGEgY3Jh cAo+PiArICMgYnV0IGl0IHJlc3BlY3RzIGJvdGggUHl0aG9uIDIgYW5kIFB5dGhvbiAzIChzZWUg IzQ4MjgpLgo+PiArIGlmIExFR0FDWToKPj4gKyBnbG9iYWwgQ09OTkVDVEVECj4+ICsgaWYgbm90 IENPTk5FQ1RFRDoKPj4gKyByZXR1cm4KPj4gKyBDT05ORUNURUQgPSBGYWxzZQo+PiArIGdkYi5l dmVudHMubmV3X29iamZpbGUuZGlzY29ubmVjdChjYWxsYmFjaykKPj4gKwo+PiArIGRlZiBsb29r dXBfdmFyaWFibGUoc2VsZiwgbmFtZSk6Cj4+ICsgaWYgc2VsZi5MTERCOgo+PiArIHJldHVybiB0 YXJnZXQuRmluZEZpcnN0R2xvYmFsVmFyaWFibGUobmFtZSkKPj4gKyBlbHNlOgo+PiArIHZhcmlh YmxlLCBfID0gZ2RiLmxvb2t1cF9zeW1ib2wobmFtZSkKPj4gKyByZXR1cm4gdmFyaWFibGUudmFs dWUoKSBpZiB2YXJpYWJsZSBlbHNlIE5vbmUKPj4gKwo+PiArIGRlZiBsb29rdXBfc3ltYm9sKHNl bGYsIHN5bSk6Cj4+ICsgaWYgc2VsZi5MTERCOgo+PiArIHJldHVybiB0YXJnZXQubW9kdWxlc1sw XS5GaW5kU3ltYm9sKHN5bSkKPj4gKyBlbHNlOgo+PiArIHJldHVybiBnZGIubG9va3VwX2dsb2Jh bF9zeW1ib2woc3ltKQo+PiArCj4+ICsgZGVmIHRvX3Vuc2lnbmVkKHNlbGYsIHZhbCk6Cj4+ICsg cmV0dXJuIHZhbC51bnNpZ25lZCBpZiBzZWxmLkxMREIgZWxzZSBpbnQodmFsKQo+PiArCj4+ICsg ZGVmIHRvX3NpZ25lZChzZWxmLCB2YWwpOgo+PiArIHJldHVybiB2YWwuc2lnbmVkIGlmIHNlbGYu TExEQiBlbHNlIGludCh2YWwpCj4+ICsKPj4gKyBkZWYgdG9fc3RyKHNlbGYsIHZhbCk6Cj4+ICsg cmV0dXJuIHZhbC52YWx1ZSBpZiBzZWxmLkxMREIgZWxzZSBzdHIodmFsKQo+PiArCj4+ICsgZGVm IGZpbmRfdHlwZShzZWxmLCB0eXBlbmFtZSk6Cj4+ICsgaWYgc2VsZi5MTERCOgo+PiArIHJldHVy biB0YXJnZXQuRmluZEZpcnN0VHlwZSh0eXBlbmFtZSkKPj4gKyBlbHNlOgo+PiArIHJldHVybiBn ZGIubG9va3VwX3R5cGUodHlwZW5hbWUpCj4+ICsKPj4gKyBkZWYgdHlwZV90b19wb2ludGVyX3R5 cGUoc2VsZiwgdHApOgo+PiArIGlmIHNlbGYuTExEQjoKPj4gKyByZXR1cm4gdHAuR2V0UG9pbnRl clR5cGUoKQo+PiArIGVsc2U6Cj4+ICsgcmV0dXJuIHRwLnBvaW50ZXIoKQo+PiArCj4+ICsgZGVm IGNhc3RfaW1wbChzZWxmLCB2YWx1ZSwgdCwgcG9pbnRlcl90eXBlKToKPj4gKyBpZiBzZWxmLkxM REI6Cj4+ICsgaWYgaXNfaW50ZWdlcl90eXBlKHZhbHVlKToKPj4gKyAjIEludGVnZXIgY2FzdHMg cmVxdWlyZSBzb21lIGJsYWNrIG1hZ2ljCj4+ICsgIyBmb3IgbGxkYiB0byBiZWhhdmUgcHJvcGVy bHkuCj4+ICsgaWYgcG9pbnRlcl90eXBlOgo+PiArIHJldHVybiB0YXJnZXQuQ3JlYXRlVmFsdWVG cm9tQWRkcmVzcygKPj4gKyAndmFsdWUnLAo+PiArIGxsZGIuU0JBZGRyZXNzKHZhbHVlLCB0YXJn ZXQpLAo+PiArIHQuR2V0UG9pbnRlZVR5cGUoKSwKPj4gKyApLmFkZHJlc3Nfb2YKPj4gKyBlbHNl Ogo+PiArIHJldHVybiB0YXJnZXQuQ3JlYXRlVmFsdWVGcm9tRGF0YSgKPj4gKyBuYW1lPSd2YWx1 ZScsCj4+ICsgZGF0YT1sbGRiLlNCRGF0YS5DcmVhdGVEYXRhRnJvbUludCh2YWx1ZSwgc2l6ZT04 KSwKPj4gKyB0eXBlPXQsCj4+ICsgKQo+PiArIGVsc2U6Cj4+ICsgcmV0dXJuIHZhbHVlLkNhc3Qo dCkKPj4gKyBlbHNlOgo+PiArIHJldHVybiBnZGIuVmFsdWUodmFsdWUpLmNhc3QodCkKPj4gKwo+ PiArIGRlZiBkZXJlZmVyZW5jZShzZWxmLCB2YWwpOgo+PiArIGlmIHNlbGYuTExEQjoKPj4gKyBy ZXR1cm4gdmFsLkRlcmVmZXJlbmNlKCkKPj4gKyBlbHNlOgo+PiArIHJldHVybiB2YWwuZGVyZWZl cmVuY2UoKQo+PiArCj4+ICsgZGVmIGV2YWwoc2VsZiwgZXhwcmVzc2lvbik6Cj4+ICsgaWYgc2Vs Zi5MTERCOgo+PiArIHByb2Nlc3MgPSB0YXJnZXQuR2V0UHJvY2VzcygpCj4+ICsgdGhyZWFkID0g cHJvY2Vzcy5HZXRTZWxlY3RlZFRocmVhZCgpCj4+ICsgZnJhbWUgPSB0aHJlYWQuR2V0U2VsZWN0 ZWRGcmFtZSgpCj4+ICsKPj4gKyBpZiBub3QgZXhwcmVzc2lvbjoKPj4gKyByZXR1cm4gTm9uZQo+ PiArCj4+ICsgcmV0dXJuIGZyYW1lLkV2YWx1YXRlRXhwcmVzc2lvbihleHByZXNzaW9uKQo+PiAr IGVsc2U6Cj4+ICsgcmV0dXJuIGdkYi5wYXJzZV9hbmRfZXZhbChleHByZXNzaW9uKQo+PiArCj4+ ICsgZGVmIHR5cGVfc2l6ZW9mX2ltcGwoc2VsZiwgdHApOgo+PiArIGlmIHNlbGYuTExEQjoKPj4g KyByZXR1cm4gdHAuR2V0Qnl0ZVNpemUoKQo+PiArIGVsc2U6Cj4+ICsgcmV0dXJuIHRwLnNpemVv Zgo+PiArCj4+ICsgZGVmIHN1bW1hcnkoc2VsZiwgdmFsKToKPj4gKyBpZiBzZWxmLkxMREI6Cj4+ ICsgcmV0dXJuIHZhbC5zdW1tYXJ5Cj4+ICsgZWxzZToKPj4gKyByZXR1cm4gc3RyKHZhbClbbGVu KFBBRERJTkcpOl0uc3RyaXAoKQo+PiArCj4+ICsgZGVmIHR5cGVfbWVtYmVyKHNlbGYsIHR5cGVf b2JqLCBuYW1lKToKPj4gKyBpZiBzZWxmLkxMREI6Cj4+ICsgcmV0dXJuIG5leHQoKHggZm9yIHgg aW4gdHlwZV9vYmoubWVtYmVycyBpZiB4Lm5hbWUgPT0gbmFtZSksIE5vbmUpCj4+ICsgZWxzZToK Pj4gKyByZXR1cm4gdHlwZV9vYmpbbmFtZV0KPj4gKwo+PiArIGRlZiB0eXBlX21lbWJlcl9vZmZz ZXQoc2VsZiwgbWVtYmVyKToKPj4gKyBpZiBzZWxmLkxMREI6Cj4+ICsgcmV0dXJuIG1lbWJlci5H ZXRPZmZzZXRJbkJ5dGVzKCkKPj4gKyBlbHNlOgo+PiArIHJldHVybiBtZW1iZXIuYml0cG9zIC8g OAo+PiArCj4+ICsgZGVmIGdldF9tZW1iZXIoc2VsZiwgdmFsdWUsIG1lbWJlcl9uYW1lKToKPj4g KyBpZiBzZWxmLkxMREI6Cj4+ICsgcmV0dXJuIHZhbHVlLkdldENoaWxkTWVtYmVyV2l0aE5hbWUo bWVtYmVyX25hbWUpCj4+ICsgZWxzZToKPj4gKyByZXR1cm4gdmFsdWVbbWVtYmVyX25hbWVdCj4+ ICsKPj4gKyBkZWYgYWRkcmVzc19vZihzZWxmLCB2YWx1ZSk6Cj4+ICsgaWYgc2VsZi5MTERCOgo+ PiArIHJldHVybiB2YWx1ZS5hZGRyZXNzX29mCj4+ICsgZWxzZToKPj4gKyByZXR1cm4gdmFsdWUu YWRkcmVzcwo+PiArCj4+ICsgZGVmIGFyY2hfaW5pdChzZWxmKToKPj4gKyBnbG9iYWwgTEpfNjQs IExKX0dDNjQsIExKX0ZSMiwgTEpfRFVBTE5VTSwgUEFERElORywgTEpfVElTTlVNLCB0YXJnZXQK Pj4gKyBpZiBzZWxmLkxMREI6Cj4+ICsgaXJ0eXBlX2VudW0gPSBkYmcuZmluZF90eXBlKCdJUlR5 cGUnKS5lbnVtX21lbWJlcnMKPj4gKyBmb3IgbWVtYmVyIGluIGlydHlwZV9lbnVtOgo+PiArIGlm IG1lbWJlci5uYW1lID09ICdJUlRfUFRSJzoKPj4gKyBMSl82NCA9IGRiZy50b191bnNpZ25lZCht ZW1iZXIpICYgMHgxZiA9PSBJUlRfUDY0Cj4+ICsgaWYgbWVtYmVyLm5hbWUgPT0gJ0lSVF9QR0Mn Ogo+PiArIExKX0dDNjQgPSBkYmcudG9fdW5zaWduZWQobWVtYmVyKSAmIDB4MWYgPT0gSVJUX1A2 NAo+PiArIGVsc2U6Cj4+ICsgTEpfNjQgPSBzdHIoZGJnLmV2YWwoJ0lSVF9QVFInKSkgPT0gJ0lS VF9QNjQnCj4+ICsgTEpfR0M2NCA9IHN0cihkYmcuZXZhbCgnSVJUX1BHQycpKSA9PSAnSVJUX1A2 NCcKPj4gKwo+PiArIExKX0ZSMiA9IExKX0dDNjQKPj4gKyBMSl9EVUFMTlVNID0gZGJnLmxvb2t1 cF9zeW1ib2woJ2xqX2xpYl9jaGVja251bWJlcicpIGlzIG5vdCBOb25lCj4+ICsgIyBUd28gZXh0 cmEgY2hhcmFjdGVycyBhcmUgcmVxdWlyZWQgdG8gZml0IGluIHRoZSBgMHhgIHBhcnQuCj4+ICsg UEFERElORyA9ICcgJyAqIGxlbihzdHJ4NjQoTCgpKSkKPj4gKyBMSl9USVNOVU0gPSAweGZmZmVm ZmZmIGlmIExKXzY0IGFuZCBub3QgTEpfR0M2NCBlbHNlIExKX1RbJ05VTVgnXQo+PiArCj4+ICsK Pj4gK2RiZyA9IERlYnVnZ2VyKCkKPj4KPj4gTEpfNjQgPSBOb25lCj4+IExKX0dDNjQgPSBOb25l Cj4+IEBAIC0xNyw2OCArMjM4LDczIEBAIElSVF9QNjQgPSA5Cj4+IExKX0dDVk1BU0sgPSAoKDEg PDwgNDcpIC0gMSkKPj4gTEpfVElTTlVNID0gTm9uZQo+Pgo+PiAtIyBEZWJ1Z2dlciBzcGVjaWZp YyB7e3sKPj4gLQo+PiAtCj4+ICMgR2xvYmFsCj4+IHRhcmdldCA9IE5vbmUKPj4KPj4KPj4gLWNs YXNzIFB0cjoKPj4gK2NsYXNzIFB0cihvYmplY3QpOgo+PiBkZWYgX19pbml0X18oc2VsZiwgdmFs dWUsIG5vcm1hbF90eXBlKToKPj4gc2VsZi52YWx1ZSA9IHZhbHVlCj4+IHNlbGYubm9ybWFsX3R5 cGUgPSBub3JtYWxfdHlwZQo+Pgo+PiBAcHJvcGVydHkKPj4gZGVmIF9fZGVyZWYoc2VsZik6Cj4+ IC0gcmV0dXJuIHNlbGYubm9ybWFsX3R5cGUoc2VsZi52YWx1ZS5EZXJlZmVyZW5jZSgpKQo+PiAr IHJldHVybiBzZWxmLm5vcm1hbF90eXBlKGRiZy5kZXJlZmVyZW5jZShzZWxmLnZhbHVlKSkKPj4K Pj4gZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgo+PiAtIGFzc2VydCBpc2luc3RhbmNlKG90aGVy LCBpbnQpCj4+ICsgYXNzZXJ0IGlzX2ludGVnZXJfdHlwZShvdGhlcikKPj4gcmV0dXJuIHNlbGYu X19jbGFzc19fKAo+PiBjYXN0KAo+PiBzZWxmLm5vcm1hbF90eXBlLl9fbmFtZV9fICsgJyAqJywK Pj4gY2FzdCgKPj4gJ3VpbnRwdHJfdCcsCj4+IC0gc2VsZi52YWx1ZS51bnNpZ25lZCArIG90aGVy ICogc2VsZi52YWx1ZS5kZXJlZi5zaXplLAo+PiArIGRiZy50b191bnNpZ25lZChzZWxmLnZhbHVl KSArIG90aGVyICogc2l6ZW9mKAo+PiArIHNlbGYubm9ybWFsX3R5cGUuX19uYW1lX18KPj4gKyAp LAo+PiApLAo+PiApLAo+PiApCj4+Cj4+IGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKPj4gLSBh c3NlcnQgaXNpbnN0YW5jZShvdGhlciwgaW50KSBvciBpc2luc3RhbmNlKG90aGVyLCBQdHIpCj4+ IC0gaWYgaXNpbnN0YW5jZShvdGhlciwgaW50KToKPj4gKyBhc3NlcnQgaXNfaW50ZWdlcl90eXBl KG90aGVyKSBvciBpc2luc3RhbmNlKG90aGVyLCBQdHIpCj4+ICsgaWYgaXNfaW50ZWdlcl90eXBl KG90aGVyKToKPj4gcmV0dXJuIHNlbGYuX19hZGRfXygtb3RoZXIpCj4+IGVsc2U6Cj4+IC0gcmV0 dXJuIGludCgoc2VsZi52YWx1ZS51bnNpZ25lZCAtIG90aGVyLnZhbHVlLnVuc2lnbmVkKQo+PiAt IC8gc2l6ZW9mKHNlbGYubm9ybWFsX3R5cGUuX19uYW1lX18pKQo+PiArIHJldHVybiBpbnQoCj4+ ICsgKAo+PiArIGRiZy50b191bnNpZ25lZChzZWxmLnZhbHVlKSAtIGRiZy50b191bnNpZ25lZChv dGhlci52YWx1ZSkKPj4gKyApIC8gc2l6ZW9mKHNlbGYubm9ybWFsX3R5cGUuX19uYW1lX18pCj4+ ICsgKQo+Pgo+PiBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKPj4gLSBhc3NlcnQgaXNpbnN0YW5j ZShvdGhlciwgUHRyKSBvciBpc2luc3RhbmNlKG90aGVyLCBpbnQpIGFuZCBvdGhlciA+PSAwCj4+ ICsgYXNzZXJ0IGlzaW5zdGFuY2Uob3RoZXIsIFB0cikgb3IgaXNfaW50ZWdlcl90eXBlKG90aGVy KQo+PiBpZiBpc2luc3RhbmNlKG90aGVyLCBQdHIpOgo+PiAtIHJldHVybiBzZWxmLnZhbHVlLnVu c2lnbmVkID09IG90aGVyLnZhbHVlLnVuc2lnbmVkCj4+ICsgcmV0dXJuIGRiZy50b191bnNpZ25l ZChzZWxmLnZhbHVlKSA9PSBkYmcudG9fdW5zaWduZWQob3RoZXIudmFsdWUpCj4+IGVsc2U6Cj4+ IC0gcmV0dXJuIHNlbGYudmFsdWUudW5zaWduZWQgPT0gb3RoZXIKPj4gKyByZXR1cm4gZGJnLnRv X3Vuc2lnbmVkKHNlbGYudmFsdWUpID09IG90aGVyCj4+Cj4+IGRlZiBfX25lX18oc2VsZiwgb3Ro ZXIpOgo+PiByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKPj4KPj4gZGVmIF9fZ3RfXyhzZWxmLCBv dGhlcik6Cj4+IGFzc2VydCBpc2luc3RhbmNlKG90aGVyLCBQdHIpCj4+IC0gcmV0dXJuIHNlbGYu dmFsdWUudW5zaWduZWQgPiBvdGhlci52YWx1ZS51bnNpZ25lZAo+PiArIHJldHVybiBkYmcudG9f dW5zaWduZWQoc2VsZi52YWx1ZSkgPiBkYmcudG9fdW5zaWduZWQob3RoZXIudmFsdWUpCj4+Cj4+ IGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgo+PiBhc3NlcnQgaXNpbnN0YW5jZShvdGhlciwgUHRy KQo+PiAtIHJldHVybiBzZWxmLnZhbHVlLnVuc2lnbmVkID49IG90aGVyLnZhbHVlLnVuc2lnbmVk Cj4+ICsgcmV0dXJuIGRiZy50b191bnNpZ25lZChzZWxmLnZhbHVlKSA+PSBkYmcudG9fdW5zaWdu ZWQob3RoZXIudmFsdWUpCj4+Cj4+IGRlZiBfX2Jvb2xfXyhzZWxmKToKPj4gLSByZXR1cm4gc2Vs Zi52YWx1ZS51bnNpZ25lZCAhPSAwCj4+ICsgcmV0dXJuIGRiZy50b191bnNpZ25lZChzZWxmLnZh bHVlKSAhPSAwCj4+Cj4+IGRlZiBfX2ludF9fKHNlbGYpOgo+PiAtIHJldHVybiBzZWxmLnZhbHVl LnVuc2lnbmVkCj4+ICsgcmV0dXJuIGRiZy50b191bnNpZ25lZChzZWxmLnZhbHVlKQo+PiArCj4+ ICsgZGVmIF9fbG9uZ19fKHNlbGYpOgo+PiArIHJldHVybiBkYmcudG9fdW5zaWduZWQoc2VsZi52 YWx1ZSkKPj4KPj4gZGVmIF9fc3RyX18oc2VsZik6Cj4+IC0gcmV0dXJuIHNlbGYudmFsdWUudmFs dWUKPj4gKyByZXR1cm4gZGJnLnRvX3N0cihzZWxmLnZhbHVlKQo+Pgo+PiBkZWYgX19nZXRhdHRy X18oc2VsZiwgbmFtZSk6Cj4+IGlmIG5hbWUgIT0gJ19fZGVyZWYnOgo+PiBAQCAtODYsNTMgKzMx MiwyNiBAQCBjbGFzcyBQdHI6Cj4+IHJldHVybiBzZWxmLl9fZGVyZWYKPj4KPj4KPj4gLWNsYXNz IE1ldGFTdHJ1Y3QodHlwZSk6Cj4+IC0gZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIG5t c3BjKToKPj4gLSBzdXBlcihNZXRhU3RydWN0LCBjbHMpLl9faW5pdF9fKG5hbWUsIGJhc2VzLCBu bXNwYykKPj4gLQo+PiAtIGRlZiBtYWtlX2dlbmVyYWwoZmllbGQsIHRwKToKPj4gLSBidWlsdGlu ID0gewo+PiAtICd1aW50JzogJ3Vuc2lnbmVkJywKPj4gLSAnaW50JzogJ3NpZ25lZCcsCj4+IC0g J3N0cmluZyc6ICd2YWx1ZScsCj4+IC0gfQo+PiAtIGlmIHRwIGluIGJ1aWx0aW4ua2V5cygpOgo+ PiAtIHJldHVybiBsYW1iZGEgc2VsZjogZ2V0YXR0cihzZWxmW2ZpZWxkXSwgYnVpbHRpblt0cF0p Cj4+IC0gZWxzZToKPj4gLSByZXR1cm4gbGFtYmRhIHNlbGY6IGdsb2JhbHMoKVt0cF0oc2VsZltm aWVsZF0pCj4+IC0KPj4gLSBpZiBoYXNhdHRyKGNscywgJ21ldGFpbmZvJyk6Cj4+IC0gZm9yIGZp ZWxkIGluIGNscy5tZXRhaW5mbzoKPj4gLSBpZiBub3QgaXNpbnN0YW5jZShmaWVsZFswXSwgc3Ry KToKPj4gLSBzZXRhdHRyKGNscywgZmllbGRbMV0sIGZpZWxkWzBdKQo+PiAtIGVsc2U6Cj4+IC0g c2V0YXR0cigKPj4gLSBjbHMsCj4+IC0gZmllbGRbMV0sCj4+IC0gcHJvcGVydHkobWFrZV9nZW5l cmFsKGZpZWxkWzFdLCBmaWVsZFswXSkpLAo+PiAtICkKPj4gLQo+PiAtCj4+IC1jbGFzcyBTdHJ1 Y3QobWV0YWNsYXNzPU1ldGFTdHJ1Y3QpOgo+PiArY2xhc3MgU3RydWN0KG9iamVjdCk6Cj4+IGRl ZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6Cj4+IHNlbGYudmFsdWUgPSB2YWx1ZQo+Pgo+PiBkZWYg X19nZXRpdGVtX18oc2VsZiwgbmFtZSk6Cj4+IC0gcmV0dXJuIHNlbGYudmFsdWUuR2V0Q2hpbGRN ZW1iZXJXaXRoTmFtZShuYW1lKQo+PiArIHJldHVybiBkYmcuZ2V0X21lbWJlcihzZWxmLnZhbHVl LCBuYW1lKQo+Pgo+PiBAcHJvcGVydHkKPj4gZGVmIGFkZHIoc2VsZik6Cj4+IC0gcmV0dXJuIHNl bGYudmFsdWUuYWRkcmVzc19vZgo+PiArIHJldHVybiBkYmcuYWRkcmVzc19vZihzZWxmLnZhbHVl KQo+Pgo+Pgo+PiBjX3N0cnVjdHMgPSB7Cj4+ICdNUmVmJzogWwo+PiAtIChwcm9wZXJ0eShsYW1i ZGEgc2VsZjogc2VsZlsncHRyNjQnXS51bnNpZ25lZCBpZiBMSl9HQzY0Cj4+IC0gZWxzZSBzZWxm WydwdHIzMiddLnVuc2lnbmVkKSwgJ3B0cicpCj4+ICsgKHByb3BlcnR5KGxhbWJkYSBzZWxmOiBk YmcudG9fdW5zaWduZWQoc2VsZlsncHRyNjQnXSkgaWYgTEpfR0M2NAo+PiArIGVsc2UgZGJnLnRv X3Vuc2lnbmVkKHNlbGZbJ3B0cjMyJ10pKSwgJ3B0cicpCj4+IF0sCj4+ICdHQ1JlZic6IFsKPj4g LSAocHJvcGVydHkobGFtYmRhIHNlbGY6IHNlbGZbJ2djcHRyNjQnXS51bnNpZ25lZCBpZiBMSl9H QzY0Cj4+IC0gZWxzZSBzZWxmWydnY3B0cjMyJ10udW5zaWduZWQpLCAnZ2NwdHInKQo+PiArIChw cm9wZXJ0eShsYW1iZGEgc2VsZjogZGJnLnRvX3Vuc2lnbmVkKHNlbGZbJ2djcHRyNjQnXSkgaWYg TEpfR0M2NAo+PiArIGVsc2UgZGJnLnRvX3Vuc2lnbmVkKHNlbGZbJ2djcHRyMzInXSkpLCAnZ2Nw dHInKQo+PiBdLAo+PiAnVFZhbHVlJzogWwo+PiAoJ0dDUmVmJywgJ2djcicpLAo+PiBAQCAtMTQx LDggKzM0MCwxMiBAQCBjX3N0cnVjdHMgPSB7Cj4+ICgnaW50JywgJ2l0NjQnKSwKPj4gKCdzdHJp bmcnLCAnbicpLAo+PiAocHJvcGVydHkobGFtYmRhIHNlbGY6IEZSKHNlbGZbJ2ZyJ10pIGlmIG5v dCBMSl9HQzY0IGVsc2UgTm9uZSksICdmcicpLAo+PiAtIChwcm9wZXJ0eShsYW1iZGEgc2VsZjog c2VsZlsnZnRzeiddLnNpZ25lZCBpZiBMSl9HQzY0IGVsc2UgTm9uZSksCj4+IC0gJ2Z0c3onKQo+ PiArICgKPj4gKyBwcm9wZXJ0eSgKPj4gKyBsYW1iZGEgc2VsZjogZGJnLnRvX3NpZ25lZChzZWxm WydmdHN6J10pIGlmIExKX0dDNjQgZWxzZSBOb25lCj4+ICsgKSwKPj4gKyAnZnRzeicKPj4gKyAp Cj4+IF0sCj4+ICdHQ1N0YXRlJzogWwo+PiAoJ0dDUmVmJywgJ3Jvb3QnKSwKPj4gQEAgLTIxNiwy NiArNDE5LDUxIEBAIGNfc3RydWN0cyA9IHsKPj4gKCdUVmFsdWUnLCAndmFsJyksCj4+ICgnTVJl ZicsICduZXh0JykKPj4gXSwKPj4gLSAnQkNJbnMnOiBbXQo+PiArICdCQ0lucyc6IFtdLAo+PiB9 Cj4+Cj4+Cj4+IC1mb3IgY2xzIGluIGNfc3RydWN0cy5rZXlzKCk6Cj4+IC0gZ2xvYmFscygpW2Ns c10gPSB0eXBlKGNscywgKFN0cnVjdCwgKSwgeydtZXRhaW5mbyc6IGNfc3RydWN0c1tjbHNdfSkK Pj4gK2RlZiBtYWtlX3Byb3BlcnR5X2Zyb21fbWV0YWRhdGEoZmllbGQsIHRwKToKPj4gKyBidWls dGluID0gewo+PiArICd1aW50JzogZGJnLnRvX3Vuc2lnbmVkLAo+PiArICdpbnQnOiBkYmcudG9f c2lnbmVkLAo+PiArICdzdHJpbmcnOiBkYmcudG9fc3RyLAo+PiArIH0KPj4gKyBpZiB0cCBpbiBi dWlsdGluLmtleXMoKToKPj4gKyByZXR1cm4gbGFtYmRhIHNlbGY6IGJ1aWx0aW5bdHBdKHNlbGZb ZmllbGRdKQo+PiArIGVsc2U6Cj4+ICsgcmV0dXJuIGxhbWJkYSBzZWxmOiBnbG9iYWxzKClbdHBd KHNlbGZbZmllbGRdKQo+PiArCj4+ICsKPj4gK2ZvciBjbHMsIG1ldGFpbmZvIGluIGNfc3RydWN0 cy5pdGVtcygpOgo+PiArIGNsc19kaWN0ID0ge30KPj4gKyBmb3IgZmllbGQgaW4gbWV0YWluZm86 Cj4+ICsgaWYgbm90IGlzaW5zdGFuY2UoZmllbGRbMF0sIHN0cik6Cj4+ICsgY2xzX2RpY3RbZmll bGRbMV1dID0gZmllbGRbMF0KPj4gKyBlbHNlOgo+PiArIGNsc19kaWN0W2ZpZWxkWzFdXSA9IHBy b3BlcnR5KAo+PiArIG1ha2VfcHJvcGVydHlfZnJvbV9tZXRhZGF0YShmaWVsZFsxXSwgZmllbGRb MF0pCj4+ICsgKQo+PiArIGdsb2JhbHMoKVtjbHNdID0gdHlwZShjbHMsIChTdHJ1Y3QsICksIGNs c19kaWN0KQo+Pgo+Pgo+PiBmb3IgY2xzIGluIFN0cnVjdC5fX3N1YmNsYXNzZXNfXygpOgo+PiBw dHJfbmFtZSA9IGNscy5fX25hbWVfXyArICdQdHInCj4+Cj4+ICsgZGVmIG1ha2VfaW5pdChjbHMp Ogo+PiArIHJldHVybiBsYW1iZGEgc2VsZiwgdmFsdWU6IHN1cGVyKHR5cGUoc2VsZiksIHNlbGYp Ll9faW5pdF9fKHZhbHVlLCBjbHMpCj4+ICsKPj4gZ2xvYmFscygpW3B0cl9uYW1lXSA9IHR5cGUo cHRyX25hbWUsIChQdHIsKSwgewo+PiAtICdfX2luaXRfXyc6Cj4+IC0gbGFtYmRhIHNlbGYsIHZh bHVlOiBzdXBlcih0eXBlKHNlbGYpLCBzZWxmKS5fX2luaXRfXyh2YWx1ZSwgY2xzKQo+PiArICdf X2luaXRfXyc6IG1ha2VfaW5pdChjbHMpCj4+IH0pCj4+Cj4+Cj4+IC1jbGFzcyBDb21tYW5kKG9i amVjdCk6Cj4+IC0gZGVmIF9faW5pdF9fKHNlbGYsIGRlYnVnZ2VyLCB1bnVzZWQpOgo+PiAtIHBh c3MKPj4gK2NsYXNzIENvbW1hbmQob2JqZWN0IGlmIGRiZy5MTERCIGVsc2UgZ2RiLkNvbW1hbmQp Ogo+PiArIGRlZiBfX2luaXRfXyhzZWxmLCBkZWJ1Z2dlcj1Ob25lLCB1bnVzZWQ9Tm9uZSk6Cj4+ ICsgaWYgZGJnLkdEQjoKPj4gKyAjIFhYWCBGcmFnaWxlOiB0aG91Z2ggaW5pdGlhbGl6YXRpb24g bG9va3MgbGlrZSBhIGNyYXAgYnV0IGl0Cj4+ICsgIyByZXNwZWN0cyBib3RoIFB5dGhvbiAyIGFu ZCBQeXRob24gMyAoc2VlICM0ODI4KS4KPj4gKyBnZGIuQ29tbWFuZC5fX2luaXRfXyhzZWxmLCBz ZWxmLmNvbW1hbmQsIGdkYi5DT01NQU5EX0RBVEEpCj4+Cj4+IGRlZiBnZXRfc2hvcnRfaGVscChz ZWxmKToKPj4gcmV0dXJuIHNlbGYuX19kb2NfXy5zcGxpdGxpbmVzKClbMF0KPj4gQEAgLTI0NSwy MSArNDczLDE1IEBAIGNsYXNzIENvbW1hbmQob2JqZWN0KToKPj4KPj4gZGVmIF9fY2FsbF9fKHNl bGYsIGRlYnVnZ2VyLCBjb21tYW5kLCBleGVfY3R4LCByZXN1bHQpOgo+PiB0cnk6Cj4+IC0gc2Vs Zi5leGVjdXRlKGRlYnVnZ2VyLCBjb21tYW5kLCByZXN1bHQpCj4+ICsgc2VsZi5leGVjdXRlKGNv bW1hbmQpCj4+IGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKPj4gbXNnID0gJ0ZhaWxlZCB0byBleGVj dXRlIGNvbW1hbmQgYHt9YDoge30nLmZvcm1hdChzZWxmLmNvbW1hbmQsIGUpCj4+IHJlc3VsdC5T ZXRFcnJvcihtc2cpCj4+Cj4+IGRlZiBwYXJzZShzZWxmLCBjb21tYW5kKToKPj4gLSBwcm9jZXNz ID0gdGFyZ2V0LkdldFByb2Nlc3MoKQo+PiAtIHRocmVhZCA9IHByb2Nlc3MuR2V0U2VsZWN0ZWRU aHJlYWQoKQo+PiAtIGZyYW1lID0gdGhyZWFkLkdldFNlbGVjdGVkRnJhbWUoKQo+PiAtCj4+IGlm IG5vdCBjb21tYW5kOgo+PiByZXR1cm4gTm9uZQo+PiAtCj4+IC0gcmV0ID0gZnJhbWUuRXZhbHVh dGVFeHByZXNzaW9uKGNvbW1hbmQpCj4+IC0gcmV0dXJuIHJldAo+PiArIHJldHVybiBkYmcudG9f dW5zaWduZWQoZGJnLmV2YWwoY29tbWFuZCkpCj4+Cj4+IEBhYmMuYWJzdHJhY3Rwcm9wZXJ0eQo+ PiBkZWYgY29tbWFuZChzZWxmKToKPj4gQEAgLTI3MCw3ICs0OTIsNyBAQCBjbGFzcyBDb21tYW5k KG9iamVjdCk6Cj4+ICIiIgo+Pgo+PiBAYWJjLmFic3RyYWN0bWV0aG9kCj4+IC0gZGVmIGV4ZWN1 dGUoc2VsZiwgZGVidWdnZXIsIGFyZ3MsIHJlc3VsdCk6Cj4+ICsgZGVmIGV4ZWN1dGUoc2VsZiwg YXJncyk6Cj4+ICIiIkltcGxlbWVudGF0aW9uIG9mIHRoZSBjb21tYW5kLgo+PiBTdWJjbGFzc2Vz IG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGltcGxlbWVudCB0aGUgbG9naWMgb2YgYSBnaXZlbgo+ PiBjb21tYW5kLCBlLmcuIHByaW50aW5nIGEgc3RhY2t0cmFjZS4gVGhlIGNvbW1hbmQgb3V0cHV0 IHNob3VsZCBiZQo+PiBAQCAtMjc4LDYgKzUwMCwxMSBAQCBjbGFzcyBDb21tYW5kKG9iamVjdCk6 Cj4+IHByb3Blcmx5IHJvdXRlZCB0byBMTERCIGZyb250ZW5kLiBBbnkgdW5oYW5kbGVkIGV4Y2Vw dGlvbiB3aWxsIGJlCj4+IGF1dG9tYXRpY2FsbHkgdHJhbnNmb3JtZWQgaW50byBwcm9wZXIgZXJy b3JzLgo+PiAiIiIKPj4gKyBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgo+PiArIHRy eToKPj4gKyBzZWxmLmV4ZWN1dGUoYXJnKQo+PiArIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKPj4g KyBkYmcud3JpdGUoZSkKPj4KPj4KPj4gZGVmIGNhc3QodHlwZW5hbWUsIHZhbHVlKToKPj4gQEAg LTI5OSw3NSArNTI2LDM4IEBAIGRlZiBjYXN0KHR5cGVuYW1lLCB2YWx1ZSk6Cj4+IG5hbWUgPSBu YW1lWzotMV0uc3RyaXAoKQo+PiBwb2ludGVyX3R5cGUgPSBUcnVlCj4+Cj4+IC0gIyBHZXQgdGhl IGxsZGIgdHlwZSByZXByZXNlbnRhdGlvbi4KPj4gLSB0ID0gdGFyZ2V0LkZpbmRGaXJzdFR5cGUo bmFtZSkKPj4gKyAjIEdldCB0aGUgaW5mZXJpb3IgdHlwZSByZXByZXNlbnRhdGlvbi4KPj4gKyB0 ID0gZGJnLmZpbmRfdHlwZShuYW1lKQo+PiBpZiBwb2ludGVyX3R5cGU6Cj4+IC0gdCA9IHQuR2V0 UG9pbnRlclR5cGUoKQo+PiAtCj4+IC0gaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKPj4gLSAj IEludGVnZXIgY2FzdHMgcmVxdWlyZSBzb21lIGJsYWNrIG1hZ2ljIGZvciBsbGRiIHRvIGJlaGF2 ZSBwcm9wZXJseS4KPj4gLSBpZiBwb2ludGVyX3R5cGU6Cj4+IC0gY2FzdGVkID0gdGFyZ2V0LkNy ZWF0ZVZhbHVlRnJvbUFkZHJlc3MoCj4+IC0gJ3ZhbHVlJywKPj4gLSBsbGRiLlNCQWRkcmVzcyh2 YWx1ZSwgdGFyZ2V0KSwKPj4gLSB0LkdldFBvaW50ZWVUeXBlKCksCj4+IC0gKS5hZGRyZXNzX29m Cj4+IC0gZWxzZToKPj4gLSBjYXN0ZWQgPSB0YXJnZXQuQ3JlYXRlVmFsdWVGcm9tRGF0YSgKPj4g LSBuYW1lPSd2YWx1ZScsCj4+IC0gZGF0YT1sbGRiLlNCRGF0YS5DcmVhdGVEYXRhRnJvbUludCh2 YWx1ZSwgc2l6ZT04KSwKPj4gLSB0eXBlPXQsCj4+IC0gKQo+PiAtIGVsc2U6Cj4+IC0gY2FzdGVk ID0gdmFsdWUuQ2FzdCh0KQo+PiArIHQgPSBkYmcudHlwZV90b19wb2ludGVyX3R5cGUodCkKPj4g Kwo+PiArIGNhc3RlZCA9IGRiZy5jYXN0X2ltcGwodmFsdWUsIHQsIHBvaW50ZXJfdHlwZSkKPj4K Pj4gaWYgaXNpbnN0YW5jZSh0eXBlbmFtZSwgdHlwZSk6Cj4+IC0gIyBXcmFwIGxsZGIgb2JqZWN0 LCBpZiBwb3NzaWJsZQo+PiArICMgV3JhcCBpbmZlcmlvciBvYmplY3QsIGlmIHBvc3NpYmxlCj4+ IHJldHVybiB0eXBlbmFtZShjYXN0ZWQpCj4+IGVsc2U6Cj4+IHJldHVybiBjYXN0ZWQKPj4KPj4K Pj4gLWRlZiBsb29rdXBfZ2xvYmFsKG5hbWUpOgo+PiAtIHJldHVybiB0YXJnZXQuRmluZEZpcnN0 R2xvYmFsVmFyaWFibGUobmFtZSkKPj4gLQo+PiAtCj4+IC1kZWYgdHlwZV9tZW1iZXIodHlwZV9v YmosIG5hbWUpOgo+PiAtIHJldHVybiBuZXh0KCh4IGZvciB4IGluIHR5cGVfb2JqLm1lbWJlcnMg aWYgeC5uYW1lID09IG5hbWUpLCBOb25lKQo+PiAtCj4+IC0KPj4gLWRlZiBmaW5kX3R5cGUodHlw ZW5hbWUpOgo+PiAtIHJldHVybiB0YXJnZXQuRmluZEZpcnN0VHlwZSh0eXBlbmFtZSkKPj4gLQo+ PiAtCj4+IGRlZiBvZmZzZXRvZih0eXBlbmFtZSwgbWVtYmVybmFtZSk6Cj4+IC0gdHlwZV9vYmog PSBmaW5kX3R5cGUodHlwZW5hbWUpCj4+IC0gbWVtYmVyID0gdHlwZV9tZW1iZXIodHlwZV9vYmos IG1lbWJlcm5hbWUpCj4+ICsgdHlwZV9vYmogPSBkYmcuZmluZF90eXBlKHR5cGVuYW1lKQo+PiAr IG1lbWJlciA9IGRiZy50eXBlX21lbWJlcih0eXBlX29iaiwgbWVtYmVybmFtZSkKPj4gYXNzZXJ0 IG1lbWJlciBpcyBub3QgTm9uZQo+PiAtIHJldHVybiBtZW1iZXIuR2V0T2Zmc2V0SW5CeXRlcygp Cj4+ICsgcmV0dXJuIGRiZy50eXBlX21lbWJlcl9vZmZzZXQobWVtYmVyKQo+Pgo+Pgo+PiBkZWYg c2l6ZW9mKHR5cGVuYW1lKToKPj4gLSB0eXBlX29iaiA9IGZpbmRfdHlwZSh0eXBlbmFtZSkKPj4g LSByZXR1cm4gdHlwZV9vYmouR2V0Qnl0ZVNpemUoKQo+PiArIHR5cGVfb2JqID0gZGJnLmZpbmRf dHlwZSh0eXBlbmFtZSkKPj4gKyByZXR1cm4gZGJnLnR5cGVfc2l6ZW9mX2ltcGwodHlwZV9vYmop Cj4+Cj4+Cj4+IGRlZiB2dG91NjQodmFsdWUpOgo+PiAtIHJldHVybiB2YWx1ZS51bnNpZ25lZCAm IDB4RkZGRkZGRkZGRkZGRkZGRgo+PiArIHJldHVybiBkYmcudG9fdW5zaWduZWQodmFsdWUpICYg MHhGRkZGRkZGRkZGRkZGRkZGCj4+Cj4+Cj4+IGRlZiB2dG9pKHZhbHVlKToKPj4gLSByZXR1cm4g dmFsdWUuc2lnbmVkCj4+IC0KPj4gLQo+PiAtZGVmIGRiZ19ldmFsKGV4cHIpOgo+PiAtIHByb2Nl c3MgPSB0YXJnZXQuR2V0UHJvY2VzcygpCj4+IC0gdGhyZWFkID0gcHJvY2Vzcy5HZXRTZWxlY3Rl ZFRocmVhZCgpCj4+IC0gZnJhbWUgPSB0aHJlYWQuR2V0U2VsZWN0ZWRGcmFtZSgpCj4+IC0gcmV0 dXJuIGZyYW1lLkV2YWx1YXRlRXhwcmVzc2lvbihleHByKQo+PiAtCj4+IC0KPj4gLSMgfX19IERl YnVnZ2VyIHNwZWNpZmljCj4+ICsgcmV0dXJuIGRiZy50b19zaWduZWQodmFsdWUpCj4+Cj4+Cj4+ IGRlZiBnY3ZhbChvYmopOgo+PiBAQCAtMzkzLDcgKzU4Myw3IEBAIGRlZiBnY2xpc3RsZW4ocm9v dCwgZW5kPTB4MCk6Cj4+Cj4+Cj4+IGRlZiBnY3JpbmdsZW4ocm9vdCk6Cj4+IC0gaWYgbm90IGdj cmVmKHJvb3QpOgo+PiArIGlmIGdjcmVmKHJvb3QpID09IDA6Cj4+IHJldHVybiAwCj4+IGVsaWYg Z2NyZWYocm9vdCkgPT0gZ2NyZWYoZ2NuZXh0KHJvb3QpKToKPj4gcmV0dXJuIDEKPj4gQEAgLTQz OSw3ICs2MjksNyBAQCBkZWYgSihnKToKPj4gSl9vZmZzZXQgPSBvZmZzZXRvZignR0dfU3RhdGUn LCAnSicpCj4+IHJldHVybiBjYXN0KAo+PiBqaXRfU3RhdGVQdHIsCj4+IC0gdnRvdTY0KGNhc3Qo J2NoYXIgKicsIGcpKSAtIGdfb2Zmc2V0ICsgSl9vZmZzZXQsCj4+ICsgaW50KHZ0b3U2NChjYXN0 KCdjaGFyIConLCBnKSkgLSBnX29mZnNldCArIEpfb2Zmc2V0KSwKPj4gKQo+Pgo+Pgo+PiBAQCAt NDUxLDcgKzY0MSw3IEBAIGRlZiBMKEw9Tm9uZSk6Cj4+ICMgbG9va3VwIGEgc3ltYm9sIGZvciB0 aGUgbWFpbiBjb3JvdXRpbmUgY29uc2lkZXJpbmcgdGhlIGhvc3QgYXBwCj4+ICMgWFhYIEZyYWdp bGU6IHRob3VnaCB0aGUgbG9vcCBpbml0aWFsaXphdGlvbiBsb29rcyBsaWtlIGEgY3JhcCBidXQg aXQKPj4gIyByZXNwZWN0cyBib3RoIFB5dGhvbiAyIGFuZCBQeXRob24gMy4KPj4gLSBmb3IgbHN0 YXRlIGluIFtMXSArIGxpc3QobWFwKGxhbWJkYSBtYWluOiBsb29rdXBfZ2xvYmFsKG1haW4pLCAo Cj4+ICsgZm9yIGxzdGF0ZSBpbiBbTF0gKyBsaXN0KG1hcChsYW1iZGEgbWFpbjogZGJnLmxvb2t1 cF92YXJpYWJsZShtYWluKSwgKAo+PiAjIEx1YUpJVCBtYWluIGNvcm8gKHNlZSBsdWFqaXQvc3Jj L2x1YWppdC5jKQo+PiAnZ2xvYmFsTCcsCj4+ICMgVGFyYW50b29sIG1haW4gY29ybyAoc2VlIHRh cmFudG9vbC9zcmMvbHVhL2luaXQuaCkKPj4gQEAgLTQ1OSw3ICs2NDksNyBAQCBkZWYgTChMPU5v bmUpOgo+PiAjIFRPRE86IEFkZCBtb3JlCj4+ICkpKToKPj4gaWYgbHN0YXRlOgo+PiAtIHJldHVy biBsdWFfU3RhdGUobHN0YXRlKQo+PiArIHJldHVybiBsdWFfU3RhdGVQdHIobHN0YXRlKQo+Pgo+ Pgo+PiBkZWYgdG91MzIodmFsKToKPj4gQEAgLTUyMyw5ICs3MTMsOSBAQCBkZWYgZnVuY3Byb3Rv KGZ1bmMpOgo+PiBkZWYgc3RyZGF0YShvYmopOgo+PiB0cnk6Cj4+IHB0ciA9IGNhc3QoJ2NoYXIg KicsIG9iaiArIDEpCj4+IC0gcmV0dXJuIHB0ci5zdW1tYXJ5Cj4+ICsgcmV0dXJuIGRiZy5zdW1t YXJ5KHB0cikKPj4gZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKPj4gLSByZXR1cm4gIjxsdWFq aXQtbGxkYjogZXJyb3Igb2NjdXJlZCB3aGlsZSByZW5kZXJpbmcgbm9uLWFzY2lpIHNsb3Q+Igo+ PiArIHJldHVybiAiPGx1YWppdF9kYmc6IGVycm9yIG9jY3VyZWQgd2hpbGUgcmVuZGVyaW5nIG5v bi1hc2NpaSBzbG90PiIKPj4KPj4KPj4gZGVmIGl0eXBlKG8pOgo+PiBAQCAtNzMwLDEyICs5MjAs MTIgQEAgZGVmIGZyYW1lX3BjKGZyYW1lbGluayk6Cj4+Cj4+Cj4+IGRlZiBmcmFtZV9wcmV2bChm cmFtZWxpbmspOgo+PiAtICMgV2UgYXJlIGV2YWx1YXRpbmcgdGhlIGBmcmFtZV9wYyhmcmFtZWxp bmspWy0xXSlgIHdpdGggbGxkYidzCj4+ICsgIyBXZSBhcmUgZXZhbHVhdGluZyB0aGUgYGZyYW1l X3BjKGZyYW1lbGluaylbLTFdKWAgd2l0aAo+PiAjIFJFUEwsIGJlY2F1c2UgdGhlIGxsZGIgQVBJ IGlzIGZhdWx0eSBhbmQgaXQncyBub3QgcG9zc2libGUgdG8gY2FzdAo+PiAjIGEgc3RydWN0IG1l bWJlciBvZiAzMi1iaXQgdHlwZSB0byA2NC1iaXQgdHlwZSB3aXRob3V0IGdldHRpbmcgb250bwo+ PiAjIHRoZSBuZXh0IHByb3BlcnR5IGJpdHMsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCBpdCdzIGFu IGFjdHVhbCB2YWx1ZSwgbm90Cj4+ICMgYSBwb2ludGVyIHRvIGl0Lgo+PiAtIGJjaW5zID0gdnRv dTY0KGRiZ19ldmFsKCcoKEJDSW5zICopJyArIHN0cihmcmFtZV9wYyhmcmFtZWxpbmspKSArICcp Wy0xXScpKQo+PiArIGJjaW5zID0gdnRvdTY0KGRiZy5ldmFsKCcoKEJDSW5zICopJyArIHN0cihm cmFtZV9wYyhmcmFtZWxpbmspKSArICcpWy0xXScpKQo+PiByZXR1cm4gZnJhbWVsaW5rIC0gKDEg KyBMSl9GUjIgKyBiY19hKGJjaW5zKSkKPj4KPj4KPj4gQEAgLTc4OSwxMiArOTc5LDEyIEBAIGRl ZiBmcmFtZXMoTCk6Cj4+Cj4+IGRlZiBkdW1wX2ZyYW1lbGlua19zbG90X2FkZHJlc3MoZnIpOgo+ PiByZXR1cm4gJ3tzdGFydDp7cGFkZGluZ319OntlbmQ6e3BhZGRpbmd9fScuZm9ybWF0KAo+PiAt IHN0YXJ0PWhleChpbnQoZnIgLSAxKSksCj4+IC0gZW5kPWhleChpbnQoZnIpKSwKPj4gKyBzdGFy dD1zdHJ4NjQoZnIgLSAxKSwKPj4gKyBlbmQ9c3RyeDY0KGZyKSwKPj4gcGFkZGluZz1sZW4oUEFE RElORyksCj4+ICkgaWYgTEpfRlIyIGVsc2UgJ3thZGRyOntwYWRkaW5nfX0nLmZvcm1hdCgKPj4g LSBhZGRyPWhleChpbnQoZnIpKSwKPj4gLSBwYWRkaW5nPWxlbihQQURESU5HKSwKPj4gKyBhZGRy PXN0cng2NChmciksCj4+ICsgcGFkZGluZz0yICogbGVuKFBBRERJTkcpICsgMSwKPj4gKQo+Pgo+ Pgo+PiBAQCAtODYzLDcgKzEwNTMsNiBAQCBkZWYgZHVtcF9zdGFjayhMLCBiYXNlPU5vbmUsIHRv cD1Ob25lKToKPj4gbmZyZWVzbG90cz1pbnQoKG1heHN0YWNrIC0gdG9wIC0gOCkgPj4gMyksCj4+ ICksCj4+IF0pCj4+IC0KPj4gZm9yIGZyYW1lbGluaywgZnJhbWV0b3AgaW4gZnJhbWVzKEwpOgo+ PiAjIER1bXAgYWxsIGRhdGEgc2xvdHMgaW4gdGhlIChmcmFtZWxpbmssIHRvcCkgaW50ZXJ2YWwu Cj4+IGR1bXAuZXh0ZW5kKFsKPj4gQEAgLTkwNCw5ICsxMDkzLDExIEBAIHRoZSB0eXBlIGFuZCBz b21lIGluZm8gcmVsYXRlZCB0byBpdC4KPj4gV2hldGhlciB0aGUgdHlwZSBvZiB0aGUgZ2l2ZW4g YWRkcmVzcyBkaWZmZXJzIGZyb20gdGhlIGxpc3RlZCBhYm92ZSwgdGhlbgo+PiBlcnJvciBtZXNz YWdlIG9jY3Vycy4KPj4gJycnCj4+IC0gZGVmIGV4ZWN1dGUoc2VsZiwgZGVidWdnZXIsIGFyZ3Ms IHJlc3VsdCk6Cj4+ICsgY29tbWFuZCA9ICdsai10dicKPj4gKwo+PiArIGRlZiBleGVjdXRlKHNl bGYsIGFyZ3MpOgo+PiB0dnB0ciA9IFRWYWx1ZVB0cihjYXN0KCdUVmFsdWUgKicsIHNlbGYucGFy c2UoYXJncykpKQo+PiAtIHByaW50KCd7fScuZm9ybWF0KGR1bXBfdHZhbHVlKHR2cHRyKSkpCj4+ ICsgZGJnLndyaXRlKCd7fScuZm9ybWF0KGR1bXBfdHZhbHVlKHR2cHRyKSkpCj4+Cj4+Cj4+IGNs YXNzIExKU3RhdGUoQ29tbWFuZCk6Cj4+IEBAIC05MTcsOSArMTEwOCwxMSBAQCBUaGUgY29tbWFu ZCByZXF1aXJlcyBubyBhcmdzIGFuZCBkdW1wcyBjdXJyZW50IFZNIGFuZCBHQyBzdGF0ZXMKPj4g KiBHQyBzdGF0ZTogPFBBVVNFfFBST1BBR0FURXxBVE9NSUN8U1dFRVBTVFJJTkd8U1dFRVB8RklO QUxJWkV8TEFTVD4KPj4gKiBKSVQgc3RhdGU6IDxJRExFfEFDVElWRXxSRUNPUkR8U1RBUlR8RU5E fEFTTXxFUlI+Cj4+ICcnJwo+PiAtIGRlZiBleGVjdXRlKHNlbGYsIGRlYnVnZ2VyLCBhcmdzLCBy ZXN1bHQpOgo+PiArIGNvbW1hbmQgPSAnbGotc3RhdGUnCj4+ICsKPj4gKyBkZWYgZXhlY3V0ZShz ZWxmLCBhcmdzKToKPj4gZyA9IEcoTChOb25lKSkKPj4gLSBwcmludCgne30nLmZvcm1hdCgnXG4n LmpvaW4oCj4+ICsgZGJnLndyaXRlKCd7fScuZm9ybWF0KCdcbicuam9pbigKPj4gbWFwKGxhbWJk YSB0OiAne30gc3RhdGU6IHt9Jy5mb3JtYXQoKnQpLCB7Cj4+ICdWTSc6IHZtX3N0YXRlKGcpLAo+ PiAnR0MnOiBnY19zdGF0ZShnKSwKPj4gQEAgLTkzNiw4ICsxMTI5LDEwIEBAIFRoZSBjb21tYW5k IHJlcXVpcmVzIG5vIGFyZ3MgYW5kIGR1bXBzIHZhbHVlcyBvZiBMSl82NCBhbmQgTEpfR0M2NAo+ PiBjb21waWxlLXRpbWUgZmxhZ3MuIFRoZXNlIHZhbHVlcyBkZWZpbmUgdGhlIHNpemVzIG9mIGhv c3QgYW5kIEdDCj4+IHBvaW50ZXJzIHJlc3BlY3RpdmVseS4KPj4gJycnCj4+IC0gZGVmIGV4ZWN1 dGUoc2VsZiwgZGVidWdnZXIsIGFyZ3MsIHJlc3VsdCk6Cj4+IC0gcHJpbnQoCj4+ICsgY29tbWFu ZCA9ICdsai1hcmNoJwo+PiArCj4+ICsgZGVmIGV4ZWN1dGUoc2VsZiwgYXJncyk6Cj4+ICsgZGJn LndyaXRlKAo+PiAnTEpfNjQ6IHtMSl82NH0sIExKX0dDNjQ6IHtMSl9HQzY0fSwgTEpfRFVBTE5V TToge0xKX0RVQUxOVU19Jwo+PiAuZm9ybWF0KAo+PiBMSl82ND1MSl82NCwKPj4gQEAgLTk2NSw5 ICsxMTYwLDExIEBAIFRoZSBjb21tYW5kIHJlcXVpcmVzIG5vIGFyZ3MgYW5kIGR1bXBzIGN1cnJl bnQgR0Mgc3RhdHM6Cj4+ICogd2VhazogPG51bWJlciBvZiB3ZWFrIHRhYmxlcyAodG8gYmUgY2xl YXJlZCk+Cj4+ICogbW11ZGF0YTogPG51bWJlciBvZiB1ZGF0YXxjZGF0YSB0byBiZSBmaW5hbGl6 ZWQ+Cj4+ICcnJwo+PiAtIGRlZiBleGVjdXRlKHNlbGYsIGRlYnVnZ2VyLCBhcmdzLCByZXN1bHQp Ogo+PiArIGNvbW1hbmQgPSAnbGotZ2MnCj4+ICsKPj4gKyBkZWYgZXhlY3V0ZShzZWxmLCBhcmdz KToKPj4gZyA9IEcoTChOb25lKSkKPj4gLSBwcmludCgnR0Mgc3RhdHM6IHtzdGF0ZX1cbntzdGF0 c30nLmZvcm1hdCgKPj4gKyBkYmcud3JpdGUoJ0dDIHN0YXRzOiB7c3RhdGV9XG57c3RhdHN9Jy5m b3JtYXQoCj4+IHN0YXRlPWdjX3N0YXRlKGcpLAo+PiBzdGF0cz1kdW1wX2djKGcpCj4+ICkpCj4+ IEBAIC05ODMsOSArMTE4MCwxMSBAQCB0aGUgcGF5bG9hZCwgc2l6ZSBpbiBieXRlcyBhbmQgaGFz aC4KPj4gKkNhdmVhdCo6IFNpbmNlIFB5dGhvbiAyIHByb3ZpZGVzIG5vIG5hdGl2ZSBVbmljb2Rl IHN1cHBvcnQsIHRoZSBwYXlsb2FkCj4+IGlzIHJlcGxhY2VkIHdpdGggdGhlIGNvcnJlc3BvbmRp bmcgZXJyb3Igd2hlbiBkZWNvZGluZyBmYWlscy4KPj4gJycnCj4+IC0gZGVmIGV4ZWN1dGUoc2Vs ZiwgZGVidWdnZXIsIGFyZ3MsIHJlc3VsdCk6Cj4+ICsgY29tbWFuZCA9ICdsai1zdHInCj4+ICsK Pj4gKyBkZWYgZXhlY3V0ZShzZWxmLCBhcmdzKToKPj4gc3RyaW5nX3B0ciA9IEdDc3RyUHRyKGNh c3QoJ0dDc3RyIConLCBzZWxmLnBhcnNlKGFyZ3MpKSkKPj4gLSBwcmludCgiU3RyaW5nOiB7Ym9k eX0gW3tsZW59IGJ5dGVzXSB3aXRoIGhhc2gge2hhc2h9Ii5mb3JtYXQoCj4+ICsgZGJnLndyaXRl KCJTdHJpbmc6IHtib2R5fSBbe2xlbn0gYnl0ZXNdIHdpdGggaGFzaCB7aGFzaH0iLmZvcm1hdCgK Pj4gYm9keT1zdHJkYXRhKHN0cmluZ19wdHIpLAo+PiBoYXNoPXN0cng2NChzdHJpbmdfcHRyLmhh c2gpLAo+PiBsZW49c3RyaW5nX3B0ci5sZW4sCj4+IEBAIC0xMDAzLDcgKzEyMDIsOSBAQCBUaGUg Y29tbWFuZCByZWNlaXZlcyBhIEdDdGFiIGFkcmVzcyBhbmQgZHVtcHMgdGhlIHRhYmxlIGNvbnRl bnRzOgo+PiAqIEhhc2ggcGFydCA8aHNpemU+IG5vZGVzOgo+PiA8aG5vZGUgcHRyPjogeyA8dHY+ IH0gPT4geyA8dHY+IH07IG5leHQgPSA8bmV4dCBobm9kZSBwdHI+Cj4+ICcnJwo+PiAtIGRlZiBl eGVjdXRlKHNlbGYsIGRlYnVnZ2VyLCBhcmdzLCByZXN1bHQpOgo+PiArIGNvbW1hbmQgPSAnbGot dGFiJwo+PiArCj4+ICsgZGVmIGV4ZWN1dGUoc2VsZiwgYXJncyk6Cj4+IHQgPSBHQ3RhYlB0cihj YXN0KCdHQ3RhYiAqJywgc2VsZi5wYXJzZShhcmdzKSkpCj4+IGFycmF5ID0gbXJlZihUVmFsdWVQ dHIsIHQuYXJyYXkpCj4+IG5vZGVzID0gbXJlZihOb2RlUHRyLCB0Lm5vZGUpCj4+IEBAIC0xMDE0 LDIyICsxMjE1LDIyIEBAIFRoZSBjb21tYW5kIHJlY2VpdmVzIGEgR0N0YWIgYWRyZXNzIGFuZCBk dW1wcyB0aGUgdGFibGUgY29udGVudHM6Cj4+IH0KPj4KPj4gaWYgbXQ6Cj4+IC0gcHJpbnQoJ01l dGF0YWJsZSBkZXRlY3RlZDoge30nLmZvcm1hdChzdHJ4NjQobXQpKSkKPj4gKyBkYmcud3JpdGUo J01ldGF0YWJsZSBkZXRlY3RlZDoge30nLmZvcm1hdChzdHJ4NjQobXQpKSkKPj4KPj4gLSBwcmlu dCgnQXJyYXkgcGFydDoge30gc2xvdHMnLmZvcm1hdChjYXBhY2l0eVsnYXBhcnQnXSkpCj4+ICsg ZGJnLndyaXRlKCdBcnJheSBwYXJ0OiB7fSBzbG90cycuZm9ybWF0KGNhcGFjaXR5WydhcGFydCdd KSkKPj4gZm9yIGkgaW4gcmFuZ2UoY2FwYWNpdHlbJ2FwYXJ0J10pOgo+PiBzbG90ID0gYXJyYXkg KyBpCj4+IC0gcHJpbnQoJ3twdHJ9OiBbe2luZGV4fV06IHt2YWx1ZX0nLmZvcm1hdCgKPj4gKyBk Ymcud3JpdGUoJ3twdHJ9OiBbe2luZGV4fV06IHt2YWx1ZX0nLmZvcm1hdCgKPj4gcHRyPXN0cng2 NChzbG90KSwKPj4gaW5kZXg9aSwKPj4gdmFsdWU9ZHVtcF90dmFsdWUoc2xvdCkKPj4gKSkKPj4K Pj4gLSBwcmludCgnSGFzaCBwYXJ0OiB7fSBub2RlcycuZm9ybWF0KGNhcGFjaXR5WydocGFydCdd KSkKPj4gKyBkYmcud3JpdGUoJ0hhc2ggcGFydDoge30gbm9kZXMnLmZvcm1hdChjYXBhY2l0eVsn aHBhcnQnXSkpCj4+ICMgU2VlIGhtYXNrIGNvbW1lbnQgaW4gbGpfb2JqLmgKPj4gZm9yIGkgaW4g cmFuZ2UoY2FwYWNpdHlbJ2hwYXJ0J10pOgo+PiBub2RlID0gbm9kZXMgKyBpCj4+IC0gcHJpbnQo J3twdHJ9OiB7eyB7a2V5fSB9fSA9PiB7eyB7dmFsfSB9fTsgbmV4dCA9IHtufScuZm9ybWF0KAo+ PiArIGRiZy53cml0ZSgne3B0cn06IHt7IHtrZXl9IH19ID0+IHt7IHt2YWx9IH19OyBuZXh0ID0g e259Jy5mb3JtYXQoCj4+IHB0cj1zdHJ4NjQobm9kZSksCj4+IGtleT1kdW1wX3R2YWx1ZShUVmFs dWVQdHIobm9kZS5rZXkuYWRkcikpLAo+PiB2YWw9ZHVtcF90dmFsdWUoVFZhbHVlUHRyKG5vZGUu dmFsLmFkZHIpKSwKPj4gQEAgLTEwNjksNTYgKzEyNzAsNzIgQEAgY29yb3V0aW5lIGd1ZXN0IHN0 YWNrOgo+Pgo+PiBJZiBMIGlzIG9tbWl0ZWQgdGhlIG1haW4gY29yb3V0aW5lIGlzIHVzZWQuCj4+ ICcnJwo+PiAtIGRlZiBleGVjdXRlKHNlbGYsIGRlYnVnZ2VyLCBhcmdzLCByZXN1bHQpOgo+PiAr IGNvbW1hbmQgPSAnbGotc3RhY2snCj4+ICsKPj4gKyBkZWYgZXhlY3V0ZShzZWxmLCBhcmdzKToK Pj4gbHN0YXRlID0gc2VsZi5wYXJzZShhcmdzKQo+PiAtIGxzdGF0ZV9wdHIgPSBjYXN0KCdsdWFf U3RhdGUgKicsIGxzdGF0ZSkgaWYgY29ybyBpcyBub3QgTm9uZSBlbHNlIE5vbmUKPj4gLSBwcmlu dCgne30nLmZvcm1hdChkdW1wX3N0YWNrKEwobHN0YXRlX3B0cikpKSkKPj4gKyBsc3RhdGVfcHRy ID0gY2FzdCgnbHVhX1N0YXRlIConLCBsc3RhdGUpIGlmIGxzdGF0ZSBlbHNlIE5vbmUKPj4gKyBk Ymcud3JpdGUoJ3t9Jy5mb3JtYXQoZHVtcF9zdGFjayhMKGxzdGF0ZV9wdHIpKSkpCj4+Cj4+Cj4+ IC1kZWYgcmVnaXN0ZXJfY29tbWFuZHMoZGVidWdnZXIsIGNvbW1hbmRzKToKPj4gLSBmb3IgY29t bWFuZCwgY2xzIGluIGNvbW1hbmRzLml0ZW1zKCk6Cj4+IC0gY2xzLmNvbW1hbmQgPSBjb21tYW5k Cj4+IC0gZGVidWdnZXIuSGFuZGxlQ29tbWFuZCgKPj4gLSAnY29tbWFuZCBzY3JpcHQgYWRkIC0t b3ZlcndyaXRlIC0tY2xhc3MgbHVhaml0X2xsZGIue2Nsc30ge2NtZH0nCj4+IC0gLmZvcm1hdCgK Pj4gLSBjbHM9Y2xzLl9fbmFtZV9fLAo+PiAtIGNtZD1jbHMuY29tbWFuZCwKPj4gLSApCj4+IC0g KQo+PiAtIHByaW50KCd7Y21kfSBjb21tYW5kIGludGlhbGl6ZWQnLmZvcm1hdChjbWQ9Y2xzLmNv bW1hbmQpKQo+PiArTEpfQ09NTUFORFMgPSBbCj4+ICsgTEpEdW1wVFZhbHVlLAo+PiArIExKU3Rh dGUsCj4+ICsgTEpEdW1wQXJjaCwKPj4gKyBMSkdDLAo+PiArIExKRHVtcFN0cmluZywKPj4gKyBM SkR1bXBUYWJsZSwKPj4gKyBMSkR1bXBTdGFjaywKPj4gK10KPj4gKwo+Pgo+PiArZGVmIHJlZ2lz dGVyX2NvbW1hbmRzKGNvbW1hbmRzLCBkZWJ1Z2dlcj1Ob25lKToKPj4gKyBmb3IgY2xzIGluIGNv bW1hbmRzOgo+PiArIGRiZy5jbWRfaW5pdChjbHMsIGRlYnVnZ2VyKQo+PiArIGRiZy53cml0ZSgn e2NtZH0gY29tbWFuZCBpbnRpYWxpemVkJy5mb3JtYXQoY21kPWNscy5jb21tYW5kKSkKPj4KPj4g LWRlZiBjb25maWd1cmUoZGVidWdnZXIpOgo+PiAtIGdsb2JhbCBMSl82NCwgTEpfR0M2NCwgTEpf RlIyLCBMSl9EVUFMTlVNLCBQQURESU5HLCBMSl9USVNOVU0sIHRhcmdldAo+PiAtIHRhcmdldCA9 IGRlYnVnZ2VyLkdldFNlbGVjdGVkVGFyZ2V0KCkKPj4gLSBtb2R1bGUgPSB0YXJnZXQubW9kdWxl c1swXQo+PiAtIExKX0RVQUxOVU0gPSBtb2R1bGUuRmluZFN5bWJvbCgnbGpfbGliX2NoZWNrbnVt YmVyJykgaXMgbm90IE5vbmUKPj4KPj4gK2RlZiBjb25maWd1cmUoZGVidWdnZXI9Tm9uZSk6Cj4+ ICsgZ2xvYmFsIFBBRERJTkcsIExKX1RJU05VTSwgTEpfRFVBTE5VTQo+PiArIGRiZy5zZXR1cF90 YXJnZXQoZGVidWdnZXIpCj4+IHRyeToKPj4gLSBpcnR5cGVfZW51bSA9IHRhcmdldC5GaW5kRmly c3RUeXBlKCdJUlR5cGUnKS5lbnVtX21lbWJlcnMKPj4gLSBmb3IgbWVtYmVyIGluIGlydHlwZV9l bnVtOgo+PiAtIGlmIG1lbWJlci5uYW1lID09ICdJUlRfUFRSJzoKPj4gLSBMSl82NCA9IG1lbWJl ci51bnNpZ25lZCAmIDB4MWYgPT0gSVJUX1A2NAo+PiAtIGlmIG1lbWJlci5uYW1lID09ICdJUlRf UEdDJzoKPj4gLSBMSl9GUjIgPSBMSl9HQzY0ID0gbWVtYmVyLnVuc2lnbmVkICYgMHgxZiA9PSBJ UlRfUDY0Cj4+ICsgIyBUcnkgdG8gcmVtb3ZlIHRoZSBjYWxsYmFjayBhdCBmaXJzdCB0byBub3Qg YXBwZW5kIGR1cGxpY2F0ZXMgdG8KPj4gKyAjIGdkYi5ldmVudHMubmV3X29iamZpbGUgaW50ZXJu YWwgbGlzdC4KPj4gKyBkYmcuZXZlbnRfZGlzY29ubmVjdChsb2FkKQo+PiBleGNlcHQgRXhjZXB0 aW9uOgo+PiAtIHByaW50KCdsdWFqaXRfbGxkYi5weSBmYWlsZWQgdG8gbG9hZDogJwo+PiAtICdu byBkZWJ1Z2dpbmcgc3ltYm9scyBmb3VuZCBmb3IgbGlibHVhaml0JykKPj4gLSByZXR1cm4KPj4g LQo+PiAtIFBBRERJTkcgPSAnICcgKiBsZW4oc3RyeDY0KChUVmFsdWVQdHIoTCgpLmFkZHIpKSkp Cj4+IC0gTEpfVElTTlVNID0gMHhmZmZlZmZmZiBpZiBMSl82NCBhbmQgbm90IExKX0dDNjQgZWxz ZSBMSl9UWydOVU1YJ10KPj4gLQo+PiAtCj4+IC1kZWYgX19sbGRiX2luaXRfbW9kdWxlKGRlYnVn Z2VyLCBpbnRlcm5hbF9kaWN0KToKPj4gLSBjb25maWd1cmUoZGVidWdnZXIpCj4+IC0gcmVnaXN0 ZXJfY29tbWFuZHMoZGVidWdnZXIsIHsKPj4gLSAnbGotdHYnOiBMSkR1bXBUVmFsdWUsCj4+IC0g J2xqLXN0YXRlJzogTEpTdGF0ZSwKPj4gLSAnbGotYXJjaCc6IExKRHVtcEFyY2gsCj4+IC0gJ2xq LWdjJzogTEpHQywKPj4gLSAnbGotc3RyJzogTEpEdW1wU3RyaW5nLAo+PiAtICdsai10YWInOiBM SkR1bXBUYWJsZSwKPj4gLSAnbGotc3RhY2snOiBMSkR1bXBTdGFjaywKPj4gLSB9KQo+PiAtIHBy aW50KCdsdWFqaXRfbGxkYi5weSBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkJykKPj4gKyAjIENhbGxi YWNrIGlzIG5vdCBjb25uZWN0ZWQuCj4+ICsgcGFzcwo+PiArCj4+ICsgdHJ5Ogo+PiArICMgRGV0 ZWN0IHdoZXRoZXIgbGlibHVhaml0IG9iamZpbGUgaXMgbG9hZGVkLgo+PiArIGRiZy5ldmFsKCds dWFKSVRfc2V0bW9kZScpCj4+ICsgZXhjZXB0IEV4Y2VwdGlvbjoKPj4gKyBkYmcud3JpdGUoJ2x1 YWppdF9kYmcucHkgaW5pdGlhbGl6YXRpb24gaXMgcG9zdHBvbmVkICcKPj4gKyAndW50aWwgbGli bHVhaml0IG9iamZpbGUgaXMgbG9hZGVkXG4nKQo+PiArICMgQWRkIGEgY2FsbGJhY2sgdG8gYmUg ZXhlY3V0ZWQgd2hlbiB0aGUgbmV4dCBvYmpmaWxlIGlzIGxvYWRlZC4KPj4gKyBkYmcuZXZlbnRf Y29ubmVjdChsb2FkKQo+PiArIHJldHVybiBGYWxzZQo+PiArCj4+ICsgdHJ5Ogo+PiArIGRiZy5h cmNoX2luaXQoKQo+PiArIGV4Y2VwdCBFeGNlcHRpb246Cj4+ICsgZGJnLndyaXRlKCdMdWFKSVQg ZGVidWcgZXh0ZW5zaW9uIGZhaWxlZCB0byBsb2FkOiAnCj4+ICsgJ25vIGRlYnVnZ2luZyBzeW1i b2xzIGZvdW5kIGZvciBsaWJsdWFqaXQnKQo+PiArIHJldHVybiBGYWxzZQo+PiArIHJldHVybiBU cnVlCj4+ICsKPj4gKwo+PiArIyBYWFg6IFRoZSBkdW1teSBwYXJhbWV0ZXIgaXMgbmVlZGVkIGZv ciB0aGlzIGZ1bmN0aW9uIHRvCj4+ICsjIHdvcmsgYXMgYSBnZGIgY2FsbGJhY2suCj4+ICtkZWYg bG9hZChfPU5vbmUsIGRlYnVnZ2VyPU5vbmUpOgo+PiArIGlmIGNvbmZpZ3VyZShkZWJ1Z2dlcik6 Cj4+ICsgcmVnaXN0ZXJfY29tbWFuZHMoTEpfQ09NTUFORFMsIGRlYnVnZ2VyKQo+PiArIGRiZy53 cml0ZSgnTHVhSklUIGRlYnVnIGV4dGVuc2lvbiBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkJykKPj4g Kwo+PiArCj4+ICtkZWYgX19sbGRiX2luaXRfbW9kdWxlKGRlYnVnZ2VyLCBfPU5vbmUpOgo+PiAr IGxvYWQoTm9uZSwgZGVidWdnZXIpCj4+ICsKPj4gKwo+PiAraWYgZGJnLkdEQjoKPj4gKyBsb2Fk KCkKwqA= ----ALT--b12838Beb1D38E5b91b1752f6Ec8C8441701871100 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 CjxIVE1MPjxCT0RZPjxkaXY+SGkhPC9kaXY+PGRpdj5UaGFua3MgZm9yIHRoZSByZXZpZXchPC9k aXY+PGRpdj4mbmJzcDs8L2Rpdj48ZGl2PiZuYnNwOzwvZGl2PjxibG9ja3F1b3RlIHN0eWxlPSJi b3JkZXItbGVmdDoxcHggc29saWQgIzA4NTdBNjsgbWFyZ2luOjEwcHg7IHBhZGRpbmc6MCAwIDAg MTBweDsiPtCh0YDQtdC00LAsIDIyINC90L7Rj9Cx0YDRjyAyMDIzLCAxNzo0NiArMDM6MDAg0L7R giBTZXJnZXkgQnJvbm5pa292ICZsdDtzZXJnZXliQHRhcmFudG9vbC5vcmcmZ3Q7Ojxicj4mbmJz cDs8ZGl2IGlkPSIiPjxkaXYgY2xhc3M9ImpzLWhlbHBlciBqcy1yZWFkbXNnLW1zZyI+PGRpdj48 ZGl2IGlkPSJzdHlsZV8xNzAwNjY0NDE3MDM4NjQxODgxOV9CT0RZIj5IZWxsbywgTWF4LDxicj48 YnI+dGhhbmtzIGZvciB0aGUgcGF0Y2ghPGJyPjxicj48YnI+ZXh0ZW5zaW9uIGNhbm5vdCBiZSBs b2FkIGluIEdEQjo8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PGRpdj5GaXhl ZCwgdGhhbmtzITwvZGl2PjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVmdDoxcHggc29saWQg IzA4NTdBNjsgbWFyZ2luOjEwcHg7IHBhZGRpbmc6MCAwIDAgMTBweDsiPjxkaXY+PGRpdiBjbGFz cz0ianMtaGVscGVyIGpzLXJlYWRtc2ctbXNnIj48ZGl2PjxkaXY+PGJyPihnZGIpIHNvdXJjZSBz cmMvbHVhaml0X2RiZy5weTxicj5UcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6PGJy PiZuYnNwOyZuYnNwOyBGaWxlICJzcmMvbHVhaml0X2RiZy5weSIsIGxpbmUgMjI4LCBpbiAmbHQ7 bW9kdWxlJmd0Ozxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgZGJnID0gRGVidWdnZXIoKTxi cj4mbmJzcDsmbmJzcDsgRmlsZSAic3JjL2x1YWppdF9kYmcucHkiLCBsaW5lIDQ2LCBpbiBfX2lu aXRfXzxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYgaGVhbHRoY2hlY2sobGliKTo8YnI+ Jm5ic3A7Jm5ic3A7IEZpbGUgInNyYy9sdWFqaXRfZGJnLnB5IiwgbGluZSAzNywgaW4gJmx0O2xh bWJkYSZndDs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICdsbGRiJzogbGFtYmRhIGxpYjog bGliLmRlYnVnZ2VyIGlzIG5vdCBOb25lLDxicj5BdHRyaWJ1dGVFcnJvcjogbW9kdWxlICdsbGRi JyBoYXMgbm8gYXR0cmlidXRlICdkZWJ1Z2dlcic8YnI+KGdkYik8YnI+PGJyPlswXSB+L3NvdXJj ZXMvTVJHL3RhcmFudG9vbC90aGlyZF9wYXJ0eS9sdWFqaXQkIGdkYiAtLXZlcnNpb248YnI+R05V IGdkYiAoVWJ1bnR1IDEyLjEtMHVidW50dTF+MjIuMDQpIDEyLjE8YnI+PGJyPk9uIDExLzEwLzIz IDIzOjE2LCBNYWtzaW0gS29rcnlhc2hraW4gd3JvdGU6PGRpdiBjbGFzcz0ibWFpbC1xdW90ZS1j b2xsYXBzZSI+Jmd0OyBGcm9tOiBNYXhpbSBLb2tyeWFzaGtpbiAmbHQ7PGEgaHJlZj0iL2NvbXBv c2U/VG89bS5rb2tyeWFzaGtpbkB0YXJhbnRvb2wub3JnIj5tLmtva3J5YXNoa2luQHRhcmFudG9v bC5vcmc8L2E+Jmd0Ozxicj4mZ3Q7PGJyPiZndDsgVGhpcyBwYXRjaCBqb2lucyB0aGUgTExEQiBh bmQgR0RCIEx1YUpJVCBkZWJ1Z2dpbmcgZXh0ZW5zaW9uczxicj4mZ3Q7IGludG8gb25lLCBzbyBu b3cgdGhlIGV4dGVuc2lvbiBsb2dpYyBjYW4gYmUgZGVidWdnZXItYWdub3N0aWMuPGJyPiZndDsg VG8gZG8gdGhhdCwgYW4gYWRhcHRlciBjbGFzcyBpcyBpbnRyb2R1Y2VkLCBhbmQgYWxsIG9mIHRo ZTxicj4mZ3Q7IGRlYnVnZ2VyLXNwZWNpZmljIGJlaGF2aW9yIGlzIGVuY2Fwc3VsYXRlZCB0aGVy ZS4gVGhlIGV4dGVuc2lvbjxicj4mZ3Q7IGF1dG8tZGV0ZWN0cyB0aGUgZGVidWdnZXIgaXQgd2Fz IGxvYWRlZCBpbnRvIGFuZCBzZWxlY3RzIHRoZTxicj4mZ3Q7IGNvcnJlY3QgbG93LWxldmVsIGxv Z2ljIGltcGxlbWVudGF0aW9uLjxicj4mZ3Q7IC0tLTxicj4mZ3Q7IHNyYy9sdWFqaXQtZ2RiLnB5 IHwgODg1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyPiZndDsgc3JjL3tsdWFqaXRfbGxk Yi5weSA9Jmd0OyBsdWFqaXRfZGJnLnB5fSB8IDYxNyArKysrKysrKysrKystLS0tLS08YnI+Jmd0 OyAyIGZpbGVzIGNoYW5nZWQsIDQxNyBpbnNlcnRpb25zKCspLCAxMDg1IGRlbGV0aW9ucygtKTxi cj4mZ3Q7IGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmMvbHVhaml0LWdkYi5weTxicj4mZ3Q7IHJlbmFt ZSBzcmMve2x1YWppdF9sbGRiLnB5ID0mZ3Q7IGx1YWppdF9kYmcucHl9ICg2MyUpPGJyPiZndDs8 YnI+Jmd0OyBkaWZmIC0tZ2l0IGEvc3JjL2x1YWppdC1nZGIucHkgYi9zcmMvbHVhaml0LWdkYi5w eTxicj4mZ3Q7IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NDxicj4mZ3Q7IGluZGV4IDVlYWYyNTBm Li4wMDAwMDAwMDxicj4mZ3Q7IC0tLSBhL3NyYy9sdWFqaXQtZ2RiLnB5PGJyPiZndDsgKysrIC9k ZXYvbnVsbDxicj4mZ3Q7IEBAIC0xLDg4NSArMCwwIEBAPGJyPiZndDsgLSMgR0RCIGV4dGVuc2lv biBmb3IgTHVhSklUIHBvc3QtbW9ydGVtIGFuYWx5c2lzLjxicj4mZ3Q7IC0jIFRvIHVzZSwganVz dCBwdXQgJ3NvdXJjZSAmbHQ7cGF0aC10by1yZXBvJmd0Oy9zcmMvbHVhaml0LWdkYi5weScgaW4g Z2RiLjxicj4mZ3Q7IC08YnI+Jmd0OyAtaW1wb3J0IHJlPGJyPiZndDsgLWltcG9ydCBnZGI8YnI+ Jmd0OyAtaW1wb3J0IHN5czxicj4mZ3Q7IC08YnI+Jmd0OyAtIyBtYWtlIHNjcmlwdCBjb21wYXRp YmxlIHdpdGggdGhlIGFuY2llbnQgUHl0aG9uIHt7ezxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZn dDsgLUxFR0FDWSA9IHJlLm1hdGNoKHInXjJcLicsIHN5cy52ZXJzaW9uKTxicj4mZ3Q7IC08YnI+ Jmd0OyAtaWYgTEVHQUNZOjxicj4mZ3Q7IC0gQ09OTkVDVEVEID0gRmFsc2U8YnI+Jmd0OyAtIGlu dCA9IGxvbmc8YnI+Jmd0OyAtIHJhbmdlID0geHJhbmdlPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+ Jmd0OyAtIyB9fX08YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1ndHlwZV9jYWNoZSA9IHt9 PGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGd0eXBlKHR5cGVzdHIpOjxicj4mZ3Q7 IC0gZ2xvYmFsIGd0eXBlX2NhY2hlPGJyPiZndDsgLSBpZiB0eXBlc3RyIGluIGd0eXBlX2NhY2hl Ojxicj4mZ3Q7IC0gcmV0dXJuIGd0eXBlX2NhY2hlW3R5cGVzdHJdPGJyPiZndDsgLTxicj4mZ3Q7 IC0gbSA9IHJlLm1hdGNoKHInKCg/Oig/OnN0cnVjdHx1bmlvbikgKT9cUyopXHMqWypdJywgdHlw ZXN0cik8YnI+Jmd0OyAtPGJyPiZndDsgLSBndHlwZSA9IGdkYi5sb29rdXBfdHlwZSh0eXBlc3Ry KSBpZiBtIGlzIE5vbmUgXDxicj4mZ3Q7IC0gZWxzZSBnZGIubG9va3VwX3R5cGUobS5ncm91cCgx KSkucG9pbnRlcigpPGJyPiZndDsgLTxicj4mZ3Q7IC0gZ3R5cGVfY2FjaGVbdHlwZXN0cl0gPSBn dHlwZTxicj4mZ3Q7IC0gcmV0dXJuIGd0eXBlPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAt ZGVmIGNhc3QodHlwZXN0ciwgdmFsKTo8YnI+Jmd0OyAtIHJldHVybiBnZGIuVmFsdWUodmFsKS5j YXN0KGd0eXBlKHR5cGVzdHIpKTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWRlZiBsb29r dXAoc3ltYm9sKTo8YnI+Jmd0OyAtIHZhcmlhYmxlLCBfID0gZ2RiLmxvb2t1cF9zeW1ib2woc3lt Ym9sKTxicj4mZ3Q7IC0gcmV0dXJuIHZhcmlhYmxlLnZhbHVlKCkgaWYgdmFyaWFibGUgZWxzZSBO b25lPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIHBhcnNlX2FyZyhhcmcpOjxicj4m Z3Q7IC0gaWYgbm90IGFyZzo8YnI+Jmd0OyAtIHJldHVybiBOb25lPGJyPiZndDsgLTxicj4mZ3Q7 IC0gcmV0ID0gZ2RiLnBhcnNlX2FuZF9ldmFsKGFyZyk8YnI+Jmd0OyAtPGJyPiZndDsgLSBpZiBu b3QgcmV0Ojxicj4mZ3Q7IC0gcmFpc2UgZ2RiLkdkYkVycm9yKCd0YWJsZSBhcmd1bWVudCBlbXB0 eScpPGJyPiZndDsgLTxicj4mZ3Q7IC0gcmV0dXJuIHJldDxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJy PiZndDsgLWRlZiB0b3U2NCh2YWwpOjxicj4mZ3Q7IC0gcmV0dXJuIGNhc3QoJ3VpbnQ2NF90Jywg dmFsKSAmYW1wOyAweEZGRkZGRkZGRkZGRkZGRkY8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7 IC1kZWYgdG91MzIodmFsKTo8YnI+Jmd0OyAtIHJldHVybiBjYXN0KCd1aW50MzJfdCcsIHZhbCkg JmFtcDsgMHhGRkZGRkZGRjxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWRlZiBpMm5vdHUz Mih2YWwpOjxicj4mZ3Q7IC0gcmV0dXJuIH5pbnQodmFsKSAmYW1wOyAweEZGRkZGRkZGPGJyPiZn dDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIHN0cng2NCh2YWwpOjxicj4mZ3Q7IC0gcmV0dXJu IHJlLnN1YignTD8kJywgJycsPGJyPiZndDsgLSBoZXgoaW50KGNhc3QoJ3VpbnQ2NF90JywgdmFs KSAmYW1wOyAweEZGRkZGRkZGRkZGRkZGRkYpKSk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7 IC0jIFR5cGVzIHt7ezxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLUxKX1QgPSB7PGJyPiZn dDsgLSAnTklMJzogaTJub3R1MzIoMCksPGJyPiZndDsgLSAnRkFMU0UnOiBpMm5vdHUzMigxKSw8 YnI+Jmd0OyAtICdUUlVFJzogaTJub3R1MzIoMiksPGJyPiZndDsgLSAnTElHSFRVRCc6IGkybm90 dTMyKDMpLDxicj4mZ3Q7IC0gJ1NUUic6IGkybm90dTMyKDQpLDxicj4mZ3Q7IC0gJ1VQVkFMJzog aTJub3R1MzIoNSksPGJyPiZndDsgLSAnVEhSRUFEJzogaTJub3R1MzIoNiksPGJyPiZndDsgLSAn UFJPVE8nOiBpMm5vdHUzMig3KSw8YnI+Jmd0OyAtICdGVU5DJzogaTJub3R1MzIoOCksPGJyPiZn dDsgLSAnVFJBQ0UnOiBpMm5vdHUzMig5KSw8YnI+Jmd0OyAtICdDREFUQSc6IGkybm90dTMyKDEw KSw8YnI+Jmd0OyAtICdUQUInOiBpMm5vdHUzMigxMSksPGJyPiZndDsgLSAnVURBVEEnOiBpMm5v dHUzMigxMiksPGJyPiZndDsgLSAnTlVNWCc6IGkybm90dTMyKDEzKSw8YnI+Jmd0OyAtfTxicj4m Z3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWRlZiB0eXBlbmFtZXModmFsdWUpOjxicj4mZ3Q7IC0g cmV0dXJuIHs8YnI+Jmd0OyAtIExKX1Rba106ICdMSl9UJyArIGsgZm9yIGsgaW4gTEpfVC5rZXlz KCk8YnI+Jmd0OyAtIH0uZ2V0KGludCh2YWx1ZSksICdMSl9USU5WQUxJRCcpPGJyPiZndDsgLTxi cj4mZ3Q7IC08YnI+Jmd0OyAtIyB9fX08YnI+Jmd0OyAtPGJyPiZndDsgLSMgRnJhbWVzIHt7ezxi cj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLUZSQU1FX1RZUEUgPSAweDM8YnI+Jmd0OyAtRlJB TUVfUCA9IDB4NDxicj4mZ3Q7IC1GUkFNRV9UWVBFUCA9IEZSQU1FX1RZUEUgfCBGUkFNRV9QPGJy PiZndDsgLTxicj4mZ3Q7IC1GUkFNRSA9IHs8YnI+Jmd0OyAtICdMVUEnOiAweDAsPGJyPiZndDsg LSAnQyc6IDB4MSw8YnI+Jmd0OyAtICdDT05UJzogMHgyLDxicj4mZ3Q7IC0gJ1ZBUkcnOiAweDMs PGJyPiZndDsgLSAnTFVBUCc6IDB4NCw8YnI+Jmd0OyAtICdDUCc6IDB4NSw8YnI+Jmd0OyAtICdQ Q0FMTCc6IDB4Niw8YnI+Jmd0OyAtICdQQ0FMTEgnOiAweDcsPGJyPiZndDsgLX08YnI+Jmd0OyAt PGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYgZnJhbWV0eXBlcyhmdCk6PGJyPiZndDsgLSByZXR1cm4g ezxicj4mZ3Q7IC0gRlJBTUVbJ0xVQSddOiAnTCcsPGJyPiZndDsgLSBGUkFNRVsnQyddOiAnQycs PGJyPiZndDsgLSBGUkFNRVsnQ09OVCddOiAnTScsPGJyPiZndDsgLSBGUkFNRVsnVkFSRyddOiAn VicsPGJyPiZndDsgLSB9LmdldChmdCwgJz8nKTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsg LWRlZiBiY19hKGlucyk6PGJyPiZndDsgLSByZXR1cm4gKGlucyAmZ3Q7Jmd0OyA4KSAmYW1wOyAw eGZmPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGZyYW1lX2Z0c3ooZnJhbWVsaW5r KTo8YnI+Jmd0OyAtIHJldHVybiBjYXN0KCdwdHJkaWZmX3QnLCBmcmFtZWxpbmtbJ2Z0c3onXSBp ZiBMSl9GUjI8YnI+Jmd0OyAtIGVsc2UgZnJhbWVsaW5rWydmciddWyd0cCddWydmdHN6J10pPGJy PiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGZyYW1lX3BjKGZyYW1lbGluayk6PGJyPiZn dDsgLSByZXR1cm4gY2FzdCgnQkNJbnMgKicsIGZyYW1lX2Z0c3ooZnJhbWVsaW5rKSkgaWYgTEpf RlIyIFw8YnI+Jmd0OyAtIGVsc2UgbXJlZignQkNJbnMgKicsIGZyYW1lbGlua1snZnInXVsndHAn XVsncGNyJ10pPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGZyYW1lX3ByZXZsKGZy YW1lbGluayk6PGJyPiZndDsgLSByZXR1cm4gZnJhbWVsaW5rIC0gKDEgKyBMSl9GUjIgKyBiY19h KGZyYW1lX3BjKGZyYW1lbGluaylbLTFdKSk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1k ZWYgZnJhbWVfaXNwY2FsbChmcmFtZWxpbmspOjxicj4mZ3Q7IC0gcmV0dXJuIChmcmFtZV9mdHN6 KGZyYW1lbGluaykgJmFtcDsgRlJBTUVbJ1BDQUxMJ10pID09IEZSQU1FWydQQ0FMTCddPGJyPiZn dDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGZyYW1lX3NpemVkKGZyYW1lbGluayk6PGJyPiZn dDsgLSByZXR1cm4gKGZyYW1lX2Z0c3ooZnJhbWVsaW5rKSAmYW1wOyB+RlJBTUVfVFlQRVApPGJy PiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGZyYW1lX3ByZXZkKGZyYW1lbGluayk6PGJy PiZndDsgLSByZXR1cm4gY2FzdCgnVFZhbHVlIConLCBjYXN0KCdjaGFyIConLCBmcmFtZWxpbmsp IC0gZnJhbWVfc2l6ZWQoZnJhbWVsaW5rKSk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1k ZWYgZnJhbWVfdHlwZShmcmFtZWxpbmspOjxicj4mZ3Q7IC0gcmV0dXJuIGZyYW1lX2Z0c3ooZnJh bWVsaW5rKSAmYW1wOyBGUkFNRV9UWVBFPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVm IGZyYW1lX3R5cGVwKGZyYW1lbGluayk6PGJyPiZndDsgLSByZXR1cm4gZnJhbWVfZnRzeihmcmFt ZWxpbmspICZhbXA7IEZSQU1FX1RZUEVQPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVm IGZyYW1lX2lzbHVhKGZyYW1lbGluayk6PGJyPiZndDsgLSByZXR1cm4gZnJhbWV0eXBlcyhpbnQo ZnJhbWVfdHlwZShmcmFtZWxpbmspKSkgPT0gJ0wnIFw8YnI+Jmd0OyAtIGFuZCBpbnQoZnJhbWVf ZnRzeihmcmFtZWxpbmspKSAmZ3Q7IDA8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYg ZnJhbWVfcHJldihmcmFtZWxpbmspOjxicj4mZ3Q7IC0gcmV0dXJuIGZyYW1lX3ByZXZsKGZyYW1l bGluaykgaWYgZnJhbWVfaXNsdWEoZnJhbWVsaW5rKSBcPGJyPiZndDsgLSBlbHNlIGZyYW1lX3By ZXZkKGZyYW1lbGluayk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYgZnJhbWVfc2Vu dGluZWwoTCk6PGJyPiZndDsgLSByZXR1cm4gbXJlZignVFZhbHVlIConLCBMWydzdGFjayddKSAr IExKX0ZSMjxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLSMgfX19PGJyPiZndDsgLTxicj4m Z3Q7IC0jIENvbnN0IHt7ezxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLUxKXzY0ID0gTm9u ZTxicj4mZ3Q7IC1MSl9HQzY0ID0gTm9uZTxicj4mZ3Q7IC1MSl9GUjIgPSBOb25lPGJyPiZndDsg LUxKX0RVQUxOVU0gPSBOb25lPGJyPiZndDsgLTxicj4mZ3Q7IC1MSl9HQ1ZNQVNLID0gKCgxICZs dDsmbHQ7IDQ3KSAtIDEpPGJyPiZndDsgLUxKX1RJU05VTSA9IE5vbmU8YnI+Jmd0OyAtUEFERElO RyA9IE5vbmU8YnI+Jmd0OyAtPGJyPiZndDsgLSMgVGhlc2UgY29uc3RhbnRzIGFyZSBtZWFuaW5n ZnVsIG9ubHkgZm9yICdMSl82NCcgbW9kZS48YnI+Jmd0OyAtTEpfTElHSFRVRF9CSVRTX1NFRyA9 IDg8YnI+Jmd0OyAtTEpfTElHSFRVRF9CSVRTX0xPID0gNDcgLSBMSl9MSUdIVFVEX0JJVFNfU0VH PGJyPiZndDsgLUxJR0hUVURfU0VHX01BU0sgPSAoMSAmbHQ7Jmx0OyBMSl9MSUdIVFVEX0JJVFNf U0VHKSAtIDE8YnI+Jmd0OyAtTElHSFRVRF9MT19NQVNLID0gKDEgJmx0OyZsdDsgTEpfTElHSFRV RF9CSVRTX0xPKSAtIDE8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC0jIH19fTxicj4mZ3Q7 IC08YnI+Jmd0OyAtPGJyPiZndDsgLWRlZiBpdHlwZShvKTo8YnI+Jmd0OyAtIHJldHVybiBjYXN0 KCd1aW50MzJfdCcsIG9bJ2l0NjQnXSAmZ3Q7Jmd0OyA0NykgaWYgTEpfR0M2NCBlbHNlIG9bJ2l0 J108YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYgbXJlZih0eXBlbmFtZSwgb2JqKTo8 YnI+Jmd0OyAtIHJldHVybiBjYXN0KHR5cGVuYW1lLCBvYmpbJ3B0cjY0J10gaWYgTEpfR0M2NCBl bHNlIG9ialsncHRyMzInXSk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYgZ2NyZWYo b2JqKTo8YnI+Jmd0OyAtIHJldHVybiBjYXN0KCdHQ29iaiAqJywgb2JqWydnY3B0cjY0J10gaWYg TEpfR0M2NDxicj4mZ3Q7IC0gZWxzZSBjYXN0KCd1aW50cHRyX3QnLCBvYmpbJ2djcHRyMzInXSkp PGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGdjdmFsKG9iaik6PGJyPiZndDsgLSBy ZXR1cm4gY2FzdCgnR0NvYmogKicsIG9ialsnZ2NwdHI2NCddICZhbXA7IExKX0dDVk1BU0sgaWYg TEpfR0M2NDxicj4mZ3Q7IC0gZWxzZSBjYXN0KCd1aW50cHRyX3QnLCBvYmpbJ2djcHRyMzInXSkp PGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGdjbmV4dChvYmopOjxicj4mZ3Q7IC0g cmV0dXJuIGdjcmVmKG9iailbJ2djaCddWyduZXh0Z2MnXTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJy PiZndDsgLWRlZiBMKEw9Tm9uZSk6PGJyPiZndDsgLSAjIGxvb2t1cCBhIHN5bWJvbCBmb3IgdGhl IG1haW4gY29yb3V0aW5lIGNvbnNpZGVyaW5nIHRoZSBob3N0IGFwcDxicj4mZ3Q7IC0gIyBYWFgg RnJhZ2lsZTogdGhvdWdoIHRoZSBsb29wIGluaXRpYWxpemF0aW9uIGxvb2tzIGxpa2UgYSBjcmFw IGJ1dCBpdDxicj4mZ3Q7IC0gIyByZXNwZWN0cyBib3RoIFB5dGhvbiAyIGFuZCBQeXRob24gMy48 YnI+Jmd0OyAtIGZvciBsc3RhdGUgaW4gW0xdICsgbGlzdChtYXAobGFtYmRhIG1haW46IGxvb2t1 cChtYWluKSwgKDxicj4mZ3Q7IC0gIyBMdWFKSVQgbWFpbiBjb3JvIChzZWUgbHVhaml0L3NyYy9s dWFqaXQuYyk8YnI+Jmd0OyAtICdnbG9iYWxMJyw8YnI+Jmd0OyAtICMgVGFyYW50b29sIG1haW4g Y29ybyAoc2VlIHRhcmFudG9vbC9zcmMvbHVhL2luaXQuaCk8YnI+Jmd0OyAtICd0YXJhbnRvb2xf TCcsPGJyPiZndDsgLSAjIFRPRE86IEFkZCBtb3JlPGJyPiZndDsgLSApKSk6PGJyPiZndDsgLSBp ZiBsc3RhdGU6PGJyPiZndDsgLSByZXR1cm4gY2FzdCgnbHVhX1N0YXRlIConLCBsc3RhdGUpPGJy PiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIEcoTCk6PGJyPiZndDsgLSByZXR1cm4gbXJl ZignZ2xvYmFsX1N0YXRlIConLCBMWydnbHJlZiddKTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZn dDsgLWRlZiBKKGcpOjxicj4mZ3Q7IC0gdHlwZUdHID0gZ3R5cGUoJ0dHX1N0YXRlJyk8YnI+Jmd0 OyAtPGJyPiZndDsgLSByZXR1cm4gY2FzdCgnaml0X1N0YXRlIConLCBpbnQoY2FzdCgnY2hhciAq JywgZykpPGJyPiZndDsgLSAtIGludCh0eXBlR0dbJ2cnXS5iaXRwb3MgLyA4KTxicj4mZ3Q7IC0g KyBpbnQodHlwZUdHWydKJ10uYml0cG9zIC8gOCkpPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0 OyAtZGVmIHZtX3N0YXRlKGcpOjxicj4mZ3Q7IC0gcmV0dXJuIHs8YnI+Jmd0OyAtIGkybm90dTMy KDApOiAnSU5URVJQJyw8YnI+Jmd0OyAtIGkybm90dTMyKDEpOiAnTEZVTkMnLDxicj4mZ3Q7IC0g aTJub3R1MzIoMik6ICdGRlVOQycsPGJyPiZndDsgLSBpMm5vdHUzMigzKTogJ0NGVU5DJyw8YnI+ Jmd0OyAtIGkybm90dTMyKDQpOiAnR0MnLDxicj4mZ3Q7IC0gaTJub3R1MzIoNSk6ICdFWElUJyw8 YnI+Jmd0OyAtIGkybm90dTMyKDYpOiAnUkVDT1JEJyw8YnI+Jmd0OyAtIGkybm90dTMyKDcpOiAn T1BUJyw8YnI+Jmd0OyAtIGkybm90dTMyKDgpOiAnQVNNJyw8YnI+Jmd0OyAtIH0uZ2V0KGludCh0 b3UzMihnWyd2bXN0YXRlJ10pKSwgJ1RSQUNFJyk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7 IC1kZWYgZ2Nfc3RhdGUoZyk6PGJyPiZndDsgLSByZXR1cm4gezxicj4mZ3Q7IC0gMDogJ1BBVVNF Jyw8YnI+Jmd0OyAtIDE6ICdQUk9QQUdBVEUnLDxicj4mZ3Q7IC0gMjogJ0FUT01JQycsPGJyPiZn dDsgLSAzOiAnU1dFRVBTVFJJTkcnLDxicj4mZ3Q7IC0gNDogJ1NXRUVQJyw8YnI+Jmd0OyAtIDU6 ICdGSU5BTElaRScsPGJyPiZndDsgLSA2OiAnTEFTVCcsPGJyPiZndDsgLSB9LmdldChpbnQoZ1sn Z2MnXVsnc3RhdGUnXSksICdJTlZBTElEJyk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1k ZWYgaml0X3N0YXRlKGcpOjxicj4mZ3Q7IC0gcmV0dXJuIHs8YnI+Jmd0OyAtIDA6ICdJRExFJyw8 YnI+Jmd0OyAtIDB4MTA6ICdBQ1RJVkUnLDxicj4mZ3Q7IC0gMHgxMTogJ1JFQ09SRCcsPGJyPiZn dDsgLSAweDEyOiAnU1RBUlQnLDxicj4mZ3Q7IC0gMHgxMzogJ0VORCcsPGJyPiZndDsgLSAweDE0 OiAnQVNNJyw8YnI+Jmd0OyAtIDB4MTU6ICdFUlInLDxicj4mZ3Q7IC0gfS5nZXQoaW50KEooZylb J3N0YXRlJ10pLCAnSU5WQUxJRCcpPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIHR2 aXNpbnQobyk6PGJyPiZndDsgLSByZXR1cm4gTEpfRFVBTE5VTSBhbmQgaXR5cGUobykgPT0gTEpf VElTTlVNPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIHR2aXNudW1iZXIobyk6PGJy PiZndDsgLSByZXR1cm4gaXR5cGUobykgJmx0Oz0gTEpfVElTTlVNPGJyPiZndDsgLTxicj4mZ3Q7 IC08YnI+Jmd0OyAtZGVmIHR2aXNsaWdodHVkKG8pOjxicj4mZ3Q7IC0gaWYgTEpfNjQgYW5kIG5v dCBMSl9HQzY0Ojxicj4mZ3Q7IC0gcmV0dXJuIChjYXN0KCdpbnQzMl90JywgaXR5cGUobykpICZn dDsmZ3Q7IDE1KSA9PSAtMjxicj4mZ3Q7IC0gZWxzZTo8YnI+Jmd0OyAtIHJldHVybiBpdHlwZShv KSA9PSBMSl9UWydMSUdIVFVEJ108YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYgc3Ry ZGF0YShvYmopOjxicj4mZ3Q7IC0gIyBTdHJpbmcgaXMgcHJpbnRlZCB3aXRoIHBvaW50ZXIgdG8g aXQsIHRoYW5rcyB0byBnZGIuIEp1c3Qgc3RyaXAgaXQuPGJyPiZndDsgLSB0cnk6PGJyPiZndDsg LSByZXR1cm4gc3RyKGNhc3QoJ2NoYXIgKicsIGNhc3QoJ0dDc3RyIConLCBvYmopICsgMSkpW2xl bihQQURESU5HKTpdPGJyPiZndDsgLSBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOjxicj4mZ3Q7 IC0gcmV0dXJuICImbHQ7bHVhaml0LWdkYjogZXJyb3Igb2NjdXJlZCB3aGlsZSByZW5kZXJpbmcg bm9uLWFzY2lpIHNsb3QmZ3Q7Ijxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWRlZiBpdHlw ZW1hcChvKTo8YnI+Jmd0OyAtIGlmIExKXzY0IGFuZCBub3QgTEpfR0M2NDo8YnI+Jmd0OyAtIHJl dHVybiBMSl9UWydOVU1YJ10gaWYgdHZpc251bWJlcihvKSBcPGJyPiZndDsgLSBlbHNlIExKX1Rb J0xJR0hUVUQnXSBpZiB0dmlzbGlnaHR1ZChvKSBcPGJyPiZndDsgLSBlbHNlIGl0eXBlKG8pPGJy PiZndDsgLSBlbHNlOjxicj4mZ3Q7IC0gcmV0dXJuIExKX1RbJ05VTVgnXSBpZiB0dmlzbnVtYmVy KG8pIGVsc2UgaXR5cGUobyk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYgZnVuY3By b3RvKGZ1bmMpOjxicj4mZ3Q7IC0gYXNzZXJ0IGZ1bmNbJ2ZmaWQnXSA9PSAwPGJyPiZndDsgLTxi cj4mZ3Q7IC0gcmV0dXJuIGNhc3QoJ0dDcHJvdG8gKicsPGJyPiZndDsgLSBtcmVmKCdjaGFyICon LCBmdW5jWydwYyddKSAtIGdkYi5sb29rdXBfdHlwZSgnR0Nwcm90bycpLnNpemVvZik8YnI+Jmd0 OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYgZ2NsaXN0bGVuKHJvb3QsIGVuZD0weDApOjxicj4m Z3Q7IC0gY291bnQgPSAwPGJyPiZndDsgLSB3aGlsZSAoZ2NyZWYocm9vdCkgIT0gZW5kKTo8YnI+ Jmd0OyAtIGNvdW50ICs9IDE8YnI+Jmd0OyAtIHJvb3QgPSBnY25leHQocm9vdCk8YnI+Jmd0OyAt IHJldHVybiBjb3VudDxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWRlZiBnY3JpbmdsZW4o cm9vdCk6PGJyPiZndDsgLSBpZiBub3QgZ2NyZWYocm9vdCk6PGJyPiZndDsgLSByZXR1cm4gMDxi cj4mZ3Q7IC0gZWxpZiBnY3JlZihyb290KSA9PSBnY3JlZihnY25leHQocm9vdCkpOjxicj4mZ3Q7 IC0gcmV0dXJuIDE8YnI+Jmd0OyAtIGVsc2U6PGJyPiZndDsgLSByZXR1cm4gMSArIGdjbGlzdGxl bihnY25leHQocm9vdCksIGdjcmVmKHJvb3QpKTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsg LWdjbGVuID0gezxicj4mZ3Q7IC0gJ3Jvb3QnOiBnY2xpc3RsZW4sPGJyPiZndDsgLSAnZ3JheSc6 IGdjbGlzdGxlbiw8YnI+Jmd0OyAtICdncmF5YWdhaW4nOiBnY2xpc3RsZW4sPGJyPiZndDsgLSAn d2Vhayc6IGdjbGlzdGxlbiw8YnI+Jmd0OyAtICMgWFhYOiBnYy5tbXVkYXRhIGlzIGEgcmluZy1s aXN0Ljxicj4mZ3Q7IC0gJ21tdWRhdGEnOiBnY3JpbmdsZW4sPGJyPiZndDsgLX08YnI+Jmd0OyAt PGJyPiZndDsgLTxicj4mZ3Q7IC0jIFRoZSBnZW5lcmF0b3IgdGhhdCBpbXBsZW1lbnRzIGZyYW1l IGl0ZXJhdG9yLjxicj4mZ3Q7IC0jIEV2ZXJ5IGZyYW1lIGlzIHJlcHJlc2VudGVkIGFzIGEgdHVw bGUgb2YgZnJhbWVsaW5rIGFuZCBmcmFtZXRvcC48YnI+Jmd0OyAtZGVmIGZyYW1lcyhMKTo8YnI+ Jmd0OyAtIGZyYW1ldG9wID0gTFsndG9wJ108YnI+Jmd0OyAtIGZyYW1lbGluayA9IExbJ2Jhc2Un XSAtIDE8YnI+Jmd0OyAtIGZyYW1lbGlua19zZW50aW5lbCA9IGZyYW1lX3NlbnRpbmVsKEwpPGJy PiZndDsgLSB3aGlsZSBUcnVlOjxicj4mZ3Q7IC0geWllbGQgZnJhbWVsaW5rLCBmcmFtZXRvcDxi cj4mZ3Q7IC0gZnJhbWV0b3AgPSBmcmFtZWxpbmsgLSAoMSArIExKX0ZSMik8YnI+Jmd0OyAtIGlm IGZyYW1lbGluayAmbHQ7PSBmcmFtZWxpbmtfc2VudGluZWw6PGJyPiZndDsgLSBicmVhazxicj4m Z3Q7IC0gZnJhbWVsaW5rID0gZnJhbWVfcHJldihmcmFtZWxpbmspPGJyPiZndDsgLTxicj4mZ3Q7 IC08YnI+Jmd0OyAtZGVmIGxpZ2h0dWRWKHR2KTo8YnI+Jmd0OyAtIGlmIExKXzY0Ojxicj4mZ3Q7 IC0gdSA9IGludCh0dlsndTY0J10pPGJyPiZndDsgLSAjIGxpZ2h0dWRzZWcgbWFjcm8gZXhwYW5k ZWQuPGJyPiZndDsgLSBzZWcgPSAodSAmZ3Q7Jmd0OyBMSl9MSUdIVFVEX0JJVFNfTE8pICZhbXA7 IExJR0hUVURfU0VHX01BU0s8YnI+Jmd0OyAtIHNlZ21hcCA9IG1yZWYoJ3VpbnQzMl90IConLCBH KEwoTm9uZSkpWydnYyddWydsaWdodHVkc2VnJ10pPGJyPiZndDsgLSAjIGxpZ2h0dWRsbyBtYWNy byBleHBhbmRlZC48YnI+Jmd0OyAtIHJldHVybiAoaW50KHNlZ21hcFtzZWddKSAmbHQ7Jmx0OyAz MikgfCAodSAmYW1wOyBMSUdIVFVEX0xPX01BU0spPGJyPiZndDsgLSBlbHNlOjxicj4mZ3Q7IC0g cmV0dXJuIGdjdmFsKHR2WydnY3InXSk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC0jIER1 bXBlcnMge3t7PGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGR1bXBfbGpfdG5pbCh0 dik6PGJyPiZndDsgLSByZXR1cm4gJ25pbCc8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1k ZWYgZHVtcF9sal90ZmFsc2UodHYpOjxicj4mZ3Q7IC0gcmV0dXJuICdmYWxzZSc8YnI+Jmd0OyAt PGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYgZHVtcF9sal90dHJ1ZSh0dik6PGJyPiZndDsgLSByZXR1 cm4gJ3RydWUnPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGR1bXBfbGpfdGxpZ2h0 dWQodHYpOjxicj4mZ3Q7IC0gcmV0dXJuICdsaWdodCB1c2VyZGF0YSBAIHt9Jy5mb3JtYXQoc3Ry eDY0KGxpZ2h0dWRWKHR2KSkpPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGR1bXBf bGpfdHN0cih0dik6PGJyPiZndDsgLSByZXR1cm4gJ3N0cmluZyB7Ym9keX0gQCB7YWRkcmVzc30n LmZvcm1hdCg8YnI+Jmd0OyAtIGJvZHk9c3RyZGF0YShnY3ZhbCh0dlsnZ2NyJ10pKSw8YnI+Jmd0 OyAtIGFkZHJlc3M9c3RyeDY0KGdjdmFsKHR2WydnY3InXSkpPGJyPiZndDsgLSApPGJyPiZndDsg LTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGR1bXBfbGpfdHVwdmFsKHR2KTo8YnI+Jmd0OyAtIHJl dHVybiAndXB2YWx1ZSBAIHt9Jy5mb3JtYXQoc3RyeDY0KGdjdmFsKHR2WydnY3InXSkpKTxicj4m Z3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWRlZiBkdW1wX2xqX3R0aHJlYWQodHYpOjxicj4mZ3Q7 IC0gcmV0dXJuICd0aHJlYWQgQCB7fScuZm9ybWF0KHN0cng2NChnY3ZhbCh0dlsnZ2NyJ10pKSk8 YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYgZHVtcF9sal90cHJvdG8odHYpOjxicj4m Z3Q7IC0gcmV0dXJuICdwcm90byBAIHt9Jy5mb3JtYXQoc3RyeDY0KGdjdmFsKHR2WydnY3InXSkp KTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWRlZiBkdW1wX2xqX3RmdW5jKHR2KTo8YnI+ Jmd0OyAtIGZ1bmMgPSBjYXN0KCdzdHJ1Y3QgR0NmdW5jQyAqJywgZ2N2YWwodHZbJ2djciddKSk8 YnI+Jmd0OyAtIGZmaWQgPSBmdW5jWydmZmlkJ108YnI+Jmd0OyAtPGJyPiZndDsgLSBpZiBmZmlk ID09IDA6PGJyPiZndDsgLSBwdCA9IGZ1bmNwcm90byhmdW5jKTxicj4mZ3Q7IC0gcmV0dXJuICdM dWEgZnVuY3Rpb24gQCB7YWRkcn0sIHtudXBzfSB1cHZhbHVlcywge2NodW5rfTp7bGluZX0nLmZv cm1hdCg8YnI+Jmd0OyAtIGFkZHI9c3RyeDY0KGZ1bmMpLDxicj4mZ3Q7IC0gbnVwcz1pbnQoZnVu Y1snbnVwdmFsdWVzJ10pLDxicj4mZ3Q7IC0gY2h1bms9c3RyZGF0YShjYXN0KCdHQ3N0ciAqJywg Z2N2YWwocHRbJ2NodW5rbmFtZSddKSkpLDxicj4mZ3Q7IC0gbGluZT1wdFsnZmlyc3RsaW5lJ108 YnI+Jmd0OyAtICk8YnI+Jmd0OyAtIGVsaWYgZmZpZCA9PSAxOjxicj4mZ3Q7IC0gcmV0dXJuICdD IGZ1bmN0aW9uIEAge30nLmZvcm1hdChzdHJ4NjQoZnVuY1snZiddKSk8YnI+Jmd0OyAtIGVsc2U6 PGJyPiZndDsgLSByZXR1cm4gJ2Zhc3QgZnVuY3Rpb24gI3t9Jy5mb3JtYXQoaW50KGZmaWQpKTxi cj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWRlZiBkdW1wX2xqX3R0cmFjZSh0dik6PGJyPiZn dDsgLSB0cmFjZSA9IGNhc3QoJ3N0cnVjdCBHQ3RyYWNlIConLCBnY3ZhbCh0dlsnZ2NyJ10pKTxi cj4mZ3Q7IC0gcmV0dXJuICd0cmFjZSB7dHJhY2Vub30gQCB7YWRkcn0nLmZvcm1hdCg8YnI+Jmd0 OyAtIHRyYWNlbm89c3RyeDY0KHRyYWNlWyd0cmFjZW5vJ10pLDxicj4mZ3Q7IC0gYWRkcj1zdHJ4 NjQodHJhY2UpPGJyPiZndDsgLSApPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtZGVmIGR1 bXBfbGpfdGNkYXRhKHR2KTo8YnI+Jmd0OyAtIHJldHVybiAnY2RhdGEgQCB7fScuZm9ybWF0KHN0 cng2NChnY3ZhbCh0dlsnZ2NyJ10pKSk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYg ZHVtcF9sal90dGFiKHR2KTo8YnI+Jmd0OyAtIHRhYmxlID0gY2FzdCgnR0N0YWIgKicsIGdjdmFs KHR2WydnY3InXSkpPGJyPiZndDsgLSByZXR1cm4gJ3RhYmxlIEAge2djcn0gKGFzaXplOiB7YXNp emV9LCBobWFzazoge2htYXNrfSknLmZvcm1hdCg8YnI+Jmd0OyAtIGdjcj1zdHJ4NjQodGFibGUp LDxicj4mZ3Q7IC0gYXNpemU9dGFibGVbJ2FzaXplJ10sPGJyPiZndDsgLSBobWFzaz1zdHJ4NjQo dGFibGVbJ2htYXNrJ10pLDxicj4mZ3Q7IC0gKTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsg LWRlZiBkdW1wX2xqX3R1ZGF0YSh0dik6PGJyPiZndDsgLSByZXR1cm4gJ3VzZXJkYXRhIEAge30n LmZvcm1hdChzdHJ4NjQoZ2N2YWwodHZbJ2djciddKSkpPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+ Jmd0OyAtZGVmIGR1bXBfbGpfdG51bXgodHYpOjxicj4mZ3Q7IC0gaWYgdHZpc2ludCh0dik6PGJy PiZndDsgLSByZXR1cm4gJ2ludGVnZXIge30nLmZvcm1hdChjYXN0KCdpbnQzMl90JywgdHZbJ2kn XSkpPGJyPiZndDsgLSBlbHNlOjxicj4mZ3Q7IC0gcmV0dXJuICdudW1iZXIge30nLmZvcm1hdChj YXN0KCdkb3VibGUnLCB0dlsnbiddKSk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYg ZHVtcF9sal9pbnZhbGlkKHR2KTo8YnI+Jmd0OyAtIHJldHVybiAnbm90IHZhbGlkIHR5cGUgQCB7 fScuZm9ybWF0KHN0cng2NChnY3ZhbCh0dlsnZ2NyJ10pKSk8YnI+Jmd0OyAtPGJyPiZndDsgLTxi cj4mZ3Q7IC0jIH19fTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWR1bXBlcnMgPSB7PGJy PiZndDsgLSAnTEpfVE5JTCc6IGR1bXBfbGpfdG5pbCw8YnI+Jmd0OyAtICdMSl9URkFMU0UnOiBk dW1wX2xqX3RmYWxzZSw8YnI+Jmd0OyAtICdMSl9UVFJVRSc6IGR1bXBfbGpfdHRydWUsPGJyPiZn dDsgLSAnTEpfVExJR0hUVUQnOiBkdW1wX2xqX3RsaWdodHVkLDxicj4mZ3Q7IC0gJ0xKX1RTVFIn OiBkdW1wX2xqX3RzdHIsPGJyPiZndDsgLSAnTEpfVFVQVkFMJzogZHVtcF9sal90dXB2YWwsPGJy PiZndDsgLSAnTEpfVFRIUkVBRCc6IGR1bXBfbGpfdHRocmVhZCw8YnI+Jmd0OyAtICdMSl9UUFJP VE8nOiBkdW1wX2xqX3Rwcm90byw8YnI+Jmd0OyAtICdMSl9URlVOQyc6IGR1bXBfbGpfdGZ1bmMs PGJyPiZndDsgLSAnTEpfVFRSQUNFJzogZHVtcF9sal90dHJhY2UsPGJyPiZndDsgLSAnTEpfVENE QVRBJzogZHVtcF9sal90Y2RhdGEsPGJyPiZndDsgLSAnTEpfVFRBQic6IGR1bXBfbGpfdHRhYiw8 YnI+Jmd0OyAtICdMSl9UVURBVEEnOiBkdW1wX2xqX3R1ZGF0YSw8YnI+Jmd0OyAtICdMSl9UTlVN WCc6IGR1bXBfbGpfdG51bXgsPGJyPiZndDsgLX08YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7 IC1kZWYgZHVtcF90dmFsdWUodHZhbHVlKTo8YnI+Jmd0OyAtIHJldHVybiBkdW1wZXJzLmdldCh0 eXBlbmFtZXMoaXR5cGVtYXAodHZhbHVlKSksIGR1bXBfbGpfaW52YWxpZCkodHZhbHVlKTxicj4m Z3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWRlZiBkdW1wX2ZyYW1lbGlua19zbG90X2FkZHJlc3Mo ZnIpOjxicj4mZ3Q7IC0gcmV0dXJuICd7fTp7fScuZm9ybWF0KGZyIC0gMSwgZnIpIGlmIExKX0ZS MiBcPGJyPiZndDsgLSBlbHNlICd7fScuZm9ybWF0KGZyKSArIFBBRERJTkc8YnI+Jmd0OyAtPGJy PiZndDsgLTxicj4mZ3Q7IC1kZWYgZHVtcF9mcmFtZWxpbmsoTCwgZnIpOjxicj4mZ3Q7IC0gaWYg ZnIgPT0gZnJhbWVfc2VudGluZWwoTCk6PGJyPiZndDsgLSByZXR1cm4gJ3thZGRyfSBbUyBdIEZS QU1FOiBkdW1teSBMJy5mb3JtYXQoPGJyPiZndDsgLSBhZGRyPWR1bXBfZnJhbWVsaW5rX3Nsb3Rf YWRkcmVzcyhmciksPGJyPiZndDsgLSApPGJyPiZndDsgLSByZXR1cm4gJ3thZGRyfSBbIF0gRlJB TUU6IFt7cHB9XSBkZWx0YT17ZH0sIHtmfScuZm9ybWF0KDxicj4mZ3Q7IC0gYWRkcj1kdW1wX2Zy YW1lbGlua19zbG90X2FkZHJlc3MoZnIpLDxicj4mZ3Q7IC0gcHA9J1BQJyBpZiBmcmFtZV9pc3Bj YWxsKGZyKSBlbHNlICd7ZnJuYW1lfXtwfScuZm9ybWF0KDxicj4mZ3Q7IC0gZnJuYW1lPWZyYW1l dHlwZXMoaW50KGZyYW1lX3R5cGUoZnIpKSksPGJyPiZndDsgLSBwPSdQJyBpZiBmcmFtZV90eXBl cChmcikgJmFtcDsgRlJBTUVfUCBlbHNlICcnPGJyPiZndDsgLSApLDxicj4mZ3Q7IC0gZD1jYXN0 KCdUVmFsdWUgKicsIGZyKSAtIGNhc3QoJ1RWYWx1ZSAqJywgZnJhbWVfcHJldihmcikpLDxicj4m Z3Q7IC0gZj1kdW1wX2xqX3RmdW5jKGZyIC0gTEpfRlIyKSw8YnI+Jmd0OyAtICk8YnI+Jmd0OyAt PGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYgZHVtcF9zdGFja19zbG90KEwsIHNsb3QsIGJhc2U9Tm9u ZSwgdG9wPU5vbmUpOjxicj4mZ3Q7IC0gYmFzZSA9IGJhc2Ugb3IgTFsnYmFzZSddPGJyPiZndDsg LSB0b3AgPSB0b3Agb3IgTFsndG9wJ108YnI+Jmd0OyAtPGJyPiZndDsgLSByZXR1cm4gJ3thZGRy fXtwYWRkaW5nfSBbIHtCfXtUfXtNfV0gVkFMVUU6IHt2YWx1ZX0nLmZvcm1hdCg8YnI+Jmd0OyAt IGFkZHI9c3RyeDY0KHNsb3QpLDxicj4mZ3Q7IC0gcGFkZGluZz1QQURESU5HLDxicj4mZ3Q7IC0g Qj0nQicgaWYgc2xvdCA9PSBiYXNlIGVsc2UgJyAnLDxicj4mZ3Q7IC0gVD0nVCcgaWYgc2xvdCA9 PSB0b3AgZWxzZSAnICcsPGJyPiZndDsgLSBNPSdNJyBpZiBzbG90ID09IG1yZWYoJ1RWYWx1ZSAq JywgTFsnbWF4c3RhY2snXSkgZWxzZSAnICcsPGJyPiZndDsgLSB2YWx1ZT1kdW1wX3R2YWx1ZShz bG90KSw8YnI+Jmd0OyAtICk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYgZHVtcF9z dGFjayhMLCBiYXNlPU5vbmUsIHRvcD1Ob25lKTo8YnI+Jmd0OyAtIGJhc2UgPSBiYXNlIG9yIExb J2Jhc2UnXTxicj4mZ3Q7IC0gdG9wID0gdG9wIG9yIExbJ3RvcCddPGJyPiZndDsgLSBzdGFjayA9 IG1yZWYoJ1RWYWx1ZSAqJywgTFsnc3RhY2snXSk8YnI+Jmd0OyAtIG1heHN0YWNrID0gbXJlZign VFZhbHVlIConLCBMWydtYXhzdGFjayddKTxicj4mZ3Q7IC0gcmVkID0gNSArIDIgKiBMSl9GUjI8 YnI+Jmd0OyAtPGJyPiZndDsgLSBkdW1wID0gWzxicj4mZ3Q7IC0gJ3twYWRkaW5nfSBSZWQgem9u ZToge25yZWRzbG90czogJmd0OzJ9IHNsb3RzIHtwYWRkaW5nfScuZm9ybWF0KDxicj4mZ3Q7IC0g cGFkZGluZz0nLScgKiBsZW4oUEFERElORyksPGJyPiZndDsgLSBucmVkc2xvdHM9cmVkLDxicj4m Z3Q7IC0gKSw8YnI+Jmd0OyAtIF08YnI+Jmd0OyAtIGR1bXAuZXh0ZW5kKFs8YnI+Jmd0OyAtIGR1 bXBfc3RhY2tfc2xvdChMLCBtYXhzdGFjayArIG9mZnNldCwgYmFzZSwgdG9wKTxicj4mZ3Q7IC0g Zm9yIG9mZnNldCBpbiByYW5nZShyZWQsIDAsIC0xKSAjIG5vcWE6IEUxMzE8YnI+Jmd0OyAtIF0p PGJyPiZndDsgLSBkdW1wLmV4dGVuZChbPGJyPiZndDsgLSAne3BhZGRpbmd9IFN0YWNrOiB7bnN0 YWNrc2xvdHM6ICZndDs1fSBzbG90cyB7cGFkZGluZ30nLmZvcm1hdCg8YnI+Jmd0OyAtIHBhZGRp bmc9Jy0nICogbGVuKFBBRERJTkcpLDxicj4mZ3Q7IC0gbnN0YWNrc2xvdHM9aW50KCh0b3U2NCht YXhzdGFjaykgLSB0b3U2NChzdGFjaykpICZndDsmZ3Q7IDMpLDxicj4mZ3Q7IC0gKSw8YnI+Jmd0 OyAtIGR1bXBfc3RhY2tfc2xvdChMLCBtYXhzdGFjaywgYmFzZSwgdG9wKSw8YnI+Jmd0OyAtICd7 c3RhcnR9OntlbmR9IFsgXSB7bmZyZWVzbG90c30gc2xvdHM6IEZyZWUgc3RhY2sgc2xvdHMnLmZv cm1hdCg8YnI+Jmd0OyAtIHN0YXJ0PXN0cng2NCh0b3AgKyAxKSw8YnI+Jmd0OyAtIGVuZD1zdHJ4 NjQobWF4c3RhY2sgLSAxKSw8YnI+Jmd0OyAtIG5mcmVlc2xvdHM9aW50KCh0b3U2NChtYXhzdGFj aykgLSB0b3U2NCh0b3ApIC0gOCkgJmd0OyZndDsgMyksPGJyPiZndDsgLSApLDxicj4mZ3Q7IC0g XSk8YnI+Jmd0OyAtPGJyPiZndDsgLSBmb3IgZnJhbWVsaW5rLCBmcmFtZXRvcCBpbiBmcmFtZXMo TCk6PGJyPiZndDsgLSAjIER1bXAgYWxsIGRhdGEgc2xvdHMgaW4gdGhlIChmcmFtZWxpbmssIHRv cCkgaW50ZXJ2YWwuPGJyPiZndDsgLSBkdW1wLmV4dGVuZChbPGJyPiZndDsgLSBkdW1wX3N0YWNr X3Nsb3QoTCwgZnJhbWVsaW5rICsgb2Zmc2V0LCBiYXNlLCB0b3ApPGJyPiZndDsgLSBmb3Igb2Zm c2V0IGluIHJhbmdlKGZyYW1ldG9wIC0gZnJhbWVsaW5rLCAwLCAtMSkgIyBub3FhOiBFMTMxPGJy PiZndDsgLSBdKTxicj4mZ3Q7IC0gIyBEdW1wIGZyYW1lIHNsb3QgKDIgc2xvdHMgaW4gY2FzZSBv ZiBHQzY0KS48YnI+Jmd0OyAtIGR1bXAuYXBwZW5kKGR1bXBfZnJhbWVsaW5rKEwsIGZyYW1lbGlu aykpPGJyPiZndDsgLTxicj4mZ3Q7IC0gcmV0dXJuICdcbicuam9pbihkdW1wKTxicj4mZ3Q7IC08 YnI+Jmd0OyAtPGJyPiZndDsgLWRlZiBkdW1wX2djKGcpOjxicj4mZ3Q7IC0gZ2MgPSBnWydnYydd PGJyPiZndDsgLSBzdGF0cyA9IFsne2tleX06IHt2YWx1ZX0nLmZvcm1hdChrZXk9ZiwgdmFsdWU9 Z2NbZl0pIGZvciBmIGluICg8YnI+Jmd0OyAtICd0b3RhbCcsICd0aHJlc2hvbGQnLCAnZGVidCcs ICdlc3RpbWF0ZScsICdzdGVwbXVsJywgJ3BhdXNlJzxicj4mZ3Q7IC0gKV08YnI+Jmd0OyAtPGJy PiZndDsgLSBzdGF0cyArPSBbJ3N3ZWVwc3RyOiB7c3dlZXBzdHJ9L3tzdHJtYXNrfScuZm9ybWF0 KDxicj4mZ3Q7IC0gc3dlZXBzdHI9Z2NbJ3N3ZWVwc3RyJ10sPGJyPiZndDsgLSAjIFN0cmluZyBo YXNoIG1hc2sgKHNpemUgb2YgaGFzaCB0YWJsZSAtIDEpLjxicj4mZ3Q7IC0gc3RybWFzaz1nWydz dHJtYXNrJ10gKyAxLDxicj4mZ3Q7IC0gKV08YnI+Jmd0OyAtPGJyPiZndDsgLSBzdGF0cyArPSBb J3trZXl9OiB7bnVtYmVyfSBvYmplY3RzJy5mb3JtYXQoPGJyPiZndDsgLSBrZXk9c3RhdCw8YnI+ Jmd0OyAtIG51bWJlcj1oYW5kbGVyKGdjW3N0YXRdKTxicj4mZ3Q7IC0gKSBmb3Igc3RhdCwgaGFu ZGxlciBpbiBnY2xlbi5pdGVtcygpXTxicj4mZ3Q7IC08YnI+Jmd0OyAtIHJldHVybiAnXG4nLmpv aW4obWFwKGxhbWJkYSBzOiAnXHQnICsgcywgc3RhdHMpKTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJy PiZndDsgLWNsYXNzIExKQmFzZShnZGIuQ29tbWFuZCk6PGJyPiZndDsgLTxicj4mZ3Q7IC0gZGVm IF9faW5pdF9fKHNlbGYsIG5hbWUpOjxicj4mZ3Q7IC0gIyBYWFggRnJhZ2lsZTogdGhvdWdoIHRo ZSBjb21tYW5kIGluaXRpYWxpemF0aW9uIGxvb2tzIGxpa2UgYSBjcmFwIGJ1dDxicj4mZ3Q7IC0g IyBpdCByZXNwZWN0cyBib3RoIFB5dGhvbiAyIGFuZCBQeXRob24gMy48YnI+Jmd0OyAtIGdkYi5D b21tYW5kLl9faW5pdF9fKHNlbGYsIG5hbWUsIGdkYi5DT01NQU5EX0RBVEEpPGJyPiZndDsgLSBn ZGIud3JpdGUoJ3t9IGNvbW1hbmQgaW5pdGlhbGl6ZWRcbicuZm9ybWF0KG5hbWUpKTxicj4mZ3Q7 IC08YnI+Jmd0OyAtPGJyPiZndDsgLWNsYXNzIExKRHVtcEFyY2goTEpCYXNlKTo8YnI+Jmd0OyAt ICcnJzxicj4mZ3Q7IC1sai1hcmNoPGJyPiZndDsgLTxicj4mZ3Q7IC1UaGUgY29tbWFuZCByZXF1 aXJlcyBubyBhcmdzIGFuZCBkdW1wcyB2YWx1ZXMgb2YgTEpfNjQgYW5kIExKX0dDNjQ8YnI+Jmd0 OyAtY29tcGlsZS10aW1lIGZsYWdzLiBUaGVzZSB2YWx1ZXMgZGVmaW5lIHRoZSBzaXplcyBvZiBo b3N0IGFuZCBHQzxicj4mZ3Q7IC1wb2ludGVycyByZXNwZWN0aXZlbHkuPGJyPiZndDsgLSAnJyc8 YnI+Jmd0OyAtPGJyPiZndDsgLSBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOjxicj4m Z3Q7IC0gZ2RiLndyaXRlKDxicj4mZ3Q7IC0gJ0xKXzY0OiB7TEpfNjR9LCBMSl9HQzY0OiB7TEpf R0M2NH0sIExKX0RVQUxOVU06IHtMSl9EVUFMTlVNfVxuJzxicj4mZ3Q7IC0gLmZvcm1hdCg8YnI+ Jmd0OyAtIExKXzY0PUxKXzY0LDxicj4mZ3Q7IC0gTEpfR0M2ND1MSl9HQzY0LDxicj4mZ3Q7IC0g TEpfRFVBTE5VTT1MSl9EVUFMTlVNPGJyPiZndDsgLSApPGJyPiZndDsgLSApPGJyPiZndDsgLTxi cj4mZ3Q7IC08YnI+Jmd0OyAtY2xhc3MgTEpEdW1wVFZhbHVlKExKQmFzZSk6PGJyPiZndDsgLSAn Jyc8YnI+Jmd0OyAtbGotdHYgJmx0O1RWYWx1ZSAqJmd0Ozxicj4mZ3Q7IC08YnI+Jmd0OyAtVGhl IGNvbW1hbmQgcmVjZWl2ZXMgYSBwb2ludGVyIHRvICZsdDt0diZndDsgKFRWYWx1ZSBhZGRyZXNz KSBhbmQgZHVtcHM8YnI+Jmd0OyAtdGhlIHR5cGUgYW5kIHNvbWUgaW5mbyByZWxhdGVkIHRvIGl0 Ljxicj4mZ3Q7IC08YnI+Jmd0OyAtKiBMSl9UTklMOiBuaWw8YnI+Jmd0OyAtKiBMSl9URkFMU0U6 IGZhbHNlPGJyPiZndDsgLSogTEpfVFRSVUU6IHRydWU8YnI+Jmd0OyAtKiBMSl9UTElHSFRVRDog bGlnaHQgdXNlcmRhdGEgQCAmbHQ7Z2NyJmd0Ozxicj4mZ3Q7IC0qIExKX1RTVFI6IHN0cmluZyAm bHQ7c3RyaW5nIHBheWxvYWQmZ3Q7IEAgJmx0O2djciZndDs8YnI+Jmd0OyAtKiBMSl9UVVBWQUw6 IHVwdmFsdWUgQCAmbHQ7Z2NyJmd0Ozxicj4mZ3Q7IC0qIExKX1RUSFJFQUQ6IHRocmVhZCBAICZs dDtnY3ImZ3Q7PGJyPiZndDsgLSogTEpfVFBST1RPOiBwcm90byBAICZsdDtnY3ImZ3Q7PGJyPiZn dDsgLSogTEpfVEZVTkM6ICZsdDtMRlVOQ3xDRlVOQ3xGRlVOQyZndDs8YnI+Jmd0OyAtICZsdDtM RlVOQyZndDs6IEx1YSBmdW5jdGlvbiBAICZsdDtnY3ImZ3Q7LCAmbHQ7bnVwdmFscyZndDsgdXB2 YWx1ZXMsICZsdDtjaHVuazpsaW5lJmd0Ozxicj4mZ3Q7IC0gJmx0O0NGVU5DJmd0OzogQyBmdW5j dGlvbiAmbHQ7bWNvZGUgYWRkcmVzcyZndDs8YnI+Jmd0OyAtICZsdDtGRlVOQyZndDs6IGZhc3Qg ZnVuY3Rpb24gIyZsdDtmZmlkJmd0Ozxicj4mZ3Q7IC0qIExKX1RUUkFDRTogdHJhY2UgJmx0O3Ry YWNlbm8mZ3Q7IEAgJmx0O2djciZndDs8YnI+Jmd0OyAtKiBMSl9UQ0RBVEE6IGNkYXRhIEAgJmx0 O2djciZndDs8YnI+Jmd0OyAtKiBMSl9UVEFCOiB0YWJsZSBAICZsdDtnY3ImZ3Q7IChhc2l6ZTog Jmx0O2FzaXplJmd0OywgaG1hc2s6ICZsdDtobWFzayZndDspPGJyPiZndDsgLSogTEpfVFVEQVRB OiB1c2VyZGF0YSBAICZsdDtnY3ImZ3Q7PGJyPiZndDsgLSogTEpfVE5VTVg6IG51bWJlciAmbHQ7 bnVtZXJpYyBwYXlsb2FkJmd0Ozxicj4mZ3Q7IC08YnI+Jmd0OyAtV2hldGhlciB0aGUgdHlwZSBv ZiB0aGUgZ2l2ZW4gYWRkcmVzcyBkaWZmZXJzIGZyb20gdGhlIGxpc3RlZCBhYm92ZSwgdGhlbjxi cj4mZ3Q7IC1lcnJvciBtZXNzYWdlIG9jY3Vycy48YnI+Jmd0OyAtICcnJzxicj4mZ3Q7IC08YnI+ Jmd0OyAtIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6PGJyPiZndDsgLSB0diA9IGNh c3QoJ1RWYWx1ZSAqJywgcGFyc2VfYXJnKGFyZykpPGJyPiZndDsgLSBnZGIud3JpdGUoJ3t9XG4n LmZvcm1hdChkdW1wX3R2YWx1ZSh0dikpKTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWNs YXNzIExKRHVtcFN0cmluZyhMSkJhc2UpOjxicj4mZ3Q7IC0gJycnPGJyPiZndDsgLWxqLXN0ciAm bHQ7R0NzdHIgKiZndDs8YnI+Jmd0OyAtPGJyPiZndDsgLVRoZSBjb21tYW5kIHJlY2VpdmVzIGEg Jmx0O2djciZndDsgb2YgdGhlIGNvcnJlc3BvbmRpbmcgR0NzdHIgb2JqZWN0IGFuZCBkdW1wczxi cj4mZ3Q7IC10aGUgcGF5bG9hZCwgc2l6ZSBpbiBieXRlcyBhbmQgaGFzaC48YnI+Jmd0OyAtPGJy PiZndDsgLSpDYXZlYXQqOiBTaW5jZSBQeXRob24gMiBwcm92aWRlcyBubyBuYXRpdmUgVW5pY29k ZSBzdXBwb3J0LCB0aGUgcGF5bG9hZDxicj4mZ3Q7IC1pcyByZXBsYWNlZCB3aXRoIHRoZSBjb3Jy ZXNwb25kaW5nIGVycm9yIHdoZW4gZGVjb2RpbmcgZmFpbHMuPGJyPiZndDsgLSAnJyc8YnI+Jmd0 OyAtPGJyPiZndDsgLSBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOjxicj4mZ3Q7IC0g c3RyaW5nID0gY2FzdCgnR0NzdHIgKicsIHBhcnNlX2FyZyhhcmcpKTxicj4mZ3Q7IC0gZ2RiLndy aXRlKCJTdHJpbmc6IHtib2R5fSBbe2xlbn0gYnl0ZXNdIHdpdGggaGFzaCB7aGFzaH1cbiIuZm9y bWF0KDxicj4mZ3Q7IC0gYm9keT1zdHJkYXRhKHN0cmluZyksPGJyPiZndDsgLSBoYXNoPXN0cng2 NChzdHJpbmdbJ2hhc2gnXSksPGJyPiZndDsgLSBsZW49c3RyaW5nWydsZW4nXSw8YnI+Jmd0OyAt ICkpPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+Jmd0OyAtY2xhc3MgTEpEdW1wVGFibGUoTEpCYXNl KTo8YnI+Jmd0OyAtICcnJzxicj4mZ3Q7IC1sai10YWIgJmx0O0dDdGFiIComZ3Q7PGJyPiZndDsg LTxicj4mZ3Q7IC1UaGUgY29tbWFuZCByZWNlaXZlcyBhIEdDdGFiIGFkcmVzcyBhbmQgZHVtcHMg dGhlIHRhYmxlIGNvbnRlbnRzOjxicj4mZ3Q7IC0qIE1ldGF0YWJsZSBhZGRyZXNzIHdoZXRoZXIg dGhlIG9uZSBpcyBzZXQ8YnI+Jmd0OyAtKiBBcnJheSBwYXJ0ICZsdDthc2l6ZSZndDsgc2xvdHM6 PGJyPiZndDsgLSAmbHQ7YXNsb3QgcHRyJmd0OzogWyZsdDtpbmRleCZndDtdOiAmbHQ7dHYmZ3Q7 PGJyPiZndDsgLSogSGFzaCBwYXJ0ICZsdDtoc2l6ZSZndDsgbm9kZXM6PGJyPiZndDsgLSAmbHQ7 aG5vZGUgcHRyJmd0OzogeyAmbHQ7dHYmZ3Q7IH0gPSZndDsgeyAmbHQ7dHYmZ3Q7IH07IG5leHQg PSAmbHQ7bmV4dCBobm9kZSBwdHImZ3Q7PGJyPiZndDsgLSAnJyc8YnI+Jmd0OyAtPGJyPiZndDsg LSBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOjxicj4mZ3Q7IC0gdCA9IGNhc3QoJ0dD dGFiIConLCBwYXJzZV9hcmcoYXJnKSk8YnI+Jmd0OyAtIGFycmF5ID0gbXJlZignVFZhbHVlICon LCB0WydhcnJheSddKTxicj4mZ3Q7IC0gbm9kZXMgPSBtcmVmKCdzdHJ1Y3QgTm9kZSAqJywgdFsn bm9kZSddKTxicj4mZ3Q7IC0gbXQgPSBnY3ZhbCh0WydtZXRhdGFibGUnXSk8YnI+Jmd0OyAtIGNh cGFjaXR5ID0gezxicj4mZ3Q7IC0gJ2FwYXJ0JzogaW50KHRbJ2FzaXplJ10pLDxicj4mZ3Q7IC0g J2hwYXJ0JzogaW50KHRbJ2htYXNrJ10gKyAxKSBpZiB0WydobWFzayddICZndDsgMCBlbHNlIDA8 YnI+Jmd0OyAtIH08YnI+Jmd0OyAtPGJyPiZndDsgLSBpZiBtdCAhPSAwOjxicj4mZ3Q7IC0gZ2Ri LndyaXRlKCdNZXRhdGFibGUgZGV0ZWN0ZWQ6IHt9XG4nLmZvcm1hdChzdHJ4NjQobXQpKSk8YnI+ Jmd0OyAtPGJyPiZndDsgLSBnZGIud3JpdGUoJ0FycmF5IHBhcnQ6IHt9IHNsb3RzXG4nLmZvcm1h dChjYXBhY2l0eVsnYXBhcnQnXSkpPGJyPiZndDsgLSBmb3IgaSBpbiByYW5nZShjYXBhY2l0eVsn YXBhcnQnXSk6PGJyPiZndDsgLSBzbG90ID0gYXJyYXkgKyBpPGJyPiZndDsgLSBnZGIud3JpdGUo J3twdHJ9OiBbe2luZGV4fV06IHt2YWx1ZX1cbicuZm9ybWF0KDxicj4mZ3Q7IC0gcHRyPXNsb3Qs PGJyPiZndDsgLSBpbmRleD1pLDxicj4mZ3Q7IC0gdmFsdWU9ZHVtcF90dmFsdWUoc2xvdCk8YnI+ Jmd0OyAtICkpPGJyPiZndDsgLTxicj4mZ3Q7IC0gZ2RiLndyaXRlKCdIYXNoIHBhcnQ6IHt9IG5v ZGVzXG4nLmZvcm1hdChjYXBhY2l0eVsnaHBhcnQnXSkpPGJyPiZndDsgLSAjIFNlZSBobWFzayBj b21tZW50IGluIGxqX29iai5oPGJyPiZndDsgLSBmb3IgaSBpbiByYW5nZShjYXBhY2l0eVsnaHBh cnQnXSk6PGJyPiZndDsgLSBub2RlID0gbm9kZXMgKyBpPGJyPiZndDsgLSBnZGIud3JpdGUoJ3tw dHJ9OiB7eyB7a2V5fSB9fSA9Jmd0OyB7eyB7dmFsfSB9fTsgbmV4dCA9IHtufVxuJy5mb3JtYXQo PGJyPiZndDsgLSBwdHI9bm9kZSw8YnI+Jmd0OyAtIGtleT1kdW1wX3R2YWx1ZShub2RlWydrZXkn XSksPGJyPiZndDsgLSB2YWw9ZHVtcF90dmFsdWUobm9kZVsndmFsJ10pLDxicj4mZ3Q7IC0gbj1t cmVmKCdzdHJ1Y3QgTm9kZSAqJywgbm9kZVsnbmV4dCddKTxicj4mZ3Q7IC0gKSk8YnI+Jmd0OyAt PGJyPiZndDsgLTxicj4mZ3Q7IC1jbGFzcyBMSkR1bXBTdGFjayhMSkJhc2UpOjxicj4mZ3Q7IC0g JycnPGJyPiZndDsgLWxqLXN0YWNrIFsmbHQ7bHVhX1N0YXRlIComZ3Q7XTxicj4mZ3Q7IC08YnI+ Jmd0OyAtVGhlIGNvbW1hbmQgcmVjZWl2ZXMgYSBsdWFfU3RhdGUgYWRkcmVzcyBhbmQgZHVtcHMg dGhlIGdpdmVuIEx1YTxicj4mZ3Q7IC1jb3JvdXRpbmUgZ3Vlc3Qgc3RhY2s6PGJyPiZndDsgLTxi cj4mZ3Q7IC0mbHQ7c2xvdCBwdHImZ3Q7IFsmbHQ7c2xvdCBhdHRyaWJ1dGVzJmd0O10gJmx0O1ZB TFVFfEZSQU1FJmd0Ozxicj4mZ3Q7IC08YnI+Jmd0OyAtKiAmbHQ7c2xvdCBwdHImZ3Q7OiBndWVz dCBzdGFjayBzbG90IGFkZHJlc3M8YnI+Jmd0OyAtKiAmbHQ7c2xvdCBhdHRyaWJ1dGVzJmd0Ozo8 YnI+Jmd0OyAtIC0gUzogQm90dG9tIG9mIHRoZSBzdGFjayAodGhlIHNsb3QgTC0mZ3Q7c3RhY2sg cG9pbnRzIHRvKTxicj4mZ3Q7IC0gLSBCOiBCYXNlIG9mIHRoZSBjdXJyZW50IGd1ZXN0IGZyYW1l ICh0aGUgc2xvdCBMLSZndDtiYXNlIHBvaW50cyB0byk8YnI+Jmd0OyAtIC0gVDogVG9wIG9mIHRo ZSBjdXJyZW50IGd1ZXN0IGZyYW1lICh0aGUgc2xvdCBMLSZndDt0b3AgcG9pbnRzIHRvKTxicj4m Z3Q7IC0gLSBNOiBMYXN0IHNsb3Qgb2YgdGhlIHN0YWNrICh0aGUgc2xvdCBMLSZndDttYXhzdGFj ayBwb2ludHMgdG8pPGJyPiZndDsgLSogJmx0O1ZBTFVFJmd0Ozogc2VlIGhlbHAgbGotdHYgZm9y IG1vcmUgaW5mbzxicj4mZ3Q7IC0qICZsdDtGUkFNRSZndDs6IGZyYW1lbGluayBzbG90IGRpZmZl cnMgZnJvbSB0aGUgdmFsdWUgc2xvdDogaXQgY29udGFpbnMgaW5mbzxicj4mZ3Q7IC0gcmVsYXRl ZCB0byB0aGUgZnVuY3Rpb24gYmVpbmcgZXhlY3V0ZWQgd2l0aGluIHRoaXMgZ3Vlc3QgZnJhbWUs IGl0czxicj4mZ3Q7IC0gdHlwZSBhbmQgbGluayB0byB0aGUgcGFyZW50IGd1ZXN0IGZyYW1lPGJy PiZndDsgLSBbJmx0O2ZyYW1lIHR5cGUmZ3Q7XSBkZWx0YT0mbHQ7c2xvdHMgaW4gZnJhbWUmZ3Q7 LCAmbHQ7bGotdHYgZm9yIExKX1RGVU5DIHNsb3QmZ3Q7PGJyPiZndDsgLSAtICZsdDtmcmFtZSB0 eXBlJmd0Ozo8YnI+Jmd0OyAtICsgTDogVk0gcGVyZm9ybXMgYSBjYWxsIGFzIGEgcmVzdWx0IG9m IGJ5dGVjb2RlIGV4ZWN1dGlvbjxicj4mZ3Q7IC0gKyBDOiBWTSBwZXJmb3JtcyBhIGNhbGwgYXMg YSByZXN1bHQgb2YgbGpfdm1fY2FsbDxicj4mZ3Q7IC0gKyBNOiBWTSBwZXJmb3JtcyBhIGNhbGwg dG8gYSBtZXRhbWV0aG9kIGFzIGEgcmVzdWx0IG9mIGJ5dGVjb2RlPGJyPiZndDsgLSBleGVjdXRp b248YnI+Jmd0OyAtICsgVjogVmFyaWFibGUtbGVuZ3RoIGZyYW1lIGZvciBzdG9yaW5nIGFyZ3Vt ZW50cyBvZiBhIHZhcmlhZGljPGJyPiZndDsgLSBmdW5jdGlvbjxicj4mZ3Q7IC0gKyBDUDogUHJv dGVjdGVkIEMgZnJhbWU8YnI+Jmd0OyAtICsgUFA6IFZNIHBlcmZvcm1zIGEgY2FsbCBhcyBhIHJl c3VsdCBvZiBleGVjdXRpbmlnIHBjYWxsIG9yIHhwY2FsbDxicj4mZ3Q7IC08YnI+Jmd0OyAtSWYg TCBpcyBvbW1pdGVkIHRoZSBtYWluIGNvcm91dGluZSBpcyB1c2VkLjxicj4mZ3Q7IC0gJycnPGJy PiZndDsgLTxicj4mZ3Q7IC0gZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KTo8YnI+Jmd0 OyAtIGdkYi53cml0ZSgne31cbicuZm9ybWF0KGR1bXBfc3RhY2soTChwYXJzZV9hcmcoYXJnKSkp KSk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1jbGFzcyBMSlN0YXRlKExKQmFzZSk6PGJy PiZndDsgLSAnJyc8YnI+Jmd0OyAtbGotc3RhdGU8YnI+Jmd0OyAtVGhlIGNvbW1hbmQgcmVxdWly ZXMgbm8gYXJncyBhbmQgZHVtcHMgY3VycmVudCBWTSBhbmQgR0Mgc3RhdGVzPGJyPiZndDsgLSog Vk0gc3RhdGU6ICZsdDtJTlRFUlB8Q3xHQ3xFWElUfFJFQ09SRHxPUFR8QVNNfFRSQUNFJmd0Ozxi cj4mZ3Q7IC0qIEdDIHN0YXRlOiAmbHQ7UEFVU0V8UFJPUEFHQVRFfEFUT01JQ3xTV0VFUFNUUklO R3xTV0VFUHxGSU5BTElaRXxMQVNUJmd0Ozxicj4mZ3Q7IC0qIEpJVCBzdGF0ZTogJmx0O0lETEV8 QUNUSVZFfFJFQ09SRHxTVEFSVHxFTkR8QVNNfEVSUiZndDs8YnI+Jmd0OyAtICcnJzxicj4mZ3Q7 IC08YnI+Jmd0OyAtIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6PGJyPiZndDsgLSBn ID0gRyhMKE5vbmUpKTxicj4mZ3Q7IC0gZ2RiLndyaXRlKCd7fVxuJy5mb3JtYXQoJ1xuJy5qb2lu KDxicj4mZ3Q7IC0gbWFwKGxhbWJkYSB0OiAne30gc3RhdGU6IHt9Jy5mb3JtYXQoKnQpLCB7PGJy PiZndDsgLSAnVk0nOiB2bV9zdGF0ZShnKSw8YnI+Jmd0OyAtICdHQyc6IGdjX3N0YXRlKGcpLDxi cj4mZ3Q7IC0gJ0pJVCc6IGppdF9zdGF0ZShnKSw8YnI+Jmd0OyAtIH0uaXRlbXMoKSk8YnI+Jmd0 OyAtICkpKTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWNsYXNzIExKR0MoTEpCYXNlKTo8 YnI+Jmd0OyAtICcnJzxicj4mZ3Q7IC1sai1nYzxicj4mZ3Q7IC08YnI+Jmd0OyAtVGhlIGNvbW1h bmQgcmVxdWlyZXMgbm8gYXJncyBhbmQgZHVtcHMgY3VycmVudCBHQyBzdGF0czo8YnI+Jmd0OyAt KiB0b3RhbDogJmx0O3RvdGFsIG51bWJlciBvZiBhbGxvY2F0ZWQgYnl0ZXMgaW4gR0MgYXJlYSZn dDs8YnI+Jmd0OyAtKiB0aHJlc2hvbGQ6ICZsdDtsaW1pdCB3aGVuIGdjIHN0ZXAgaXMgdHJpZ2dl cmVkJmd0Ozxicj4mZ3Q7IC0qIGRlYnQ6ICZsdDtob3cgbXVjaCBHQyBpcyBiZWhpbmQgc2NoZWR1 bGUmZ3Q7PGJyPiZndDsgLSogZXN0aW1hdGU6ICZsdDtlc3RpbWF0ZSBvZiBtZW1vcnkgYWN0dWFs bHkgaW4gdXNlJmd0Ozxicj4mZ3Q7IC0qIHN0ZXBtdWw6ICZsdDtpbmNyZW1lbnRhbCBHQyBzdGVw IGdyYW51bGFyaXR5Jmd0Ozxicj4mZ3Q7IC0qIHBhdXNlOiAmbHQ7cGF1c2UgYmV0d2VlbiBzdWNj ZXNzaXZlIEdDIGN5Y2xlcyZndDs8YnI+Jmd0OyAtKiBzd2VlcHN0cjogJmx0O3N3ZWVwIHBvc2l0 aW9uIGluIHN0cmluZyB0YWJsZSZndDs8YnI+Jmd0OyAtKiByb290OiAmbHQ7bnVtYmVyIG9mIGFs bCBjb2xsZWN0YWJsZSBvYmplY3RzJmd0Ozxicj4mZ3Q7IC0qIGdyYXk6ICZsdDtudW1iZXIgb2Yg Z3JheSBvYmplY3RzJmd0Ozxicj4mZ3Q7IC0qIGdyYXlhZ2FpbjogJmx0O251bWJlciBvZiBvYmpl Y3RzIGZvciBhdG9taWMgdHJhdmVyc2FsJmd0Ozxicj4mZ3Q7IC0qIHdlYWs6ICZsdDtudW1iZXIg b2Ygd2VhayB0YWJsZXMgKHRvIGJlIGNsZWFyZWQpJmd0Ozxicj4mZ3Q7IC0qIG1tdWRhdGE6ICZs dDtudW1iZXIgb2YgdWRhdGF8Y2RhdGEgdG8gYmUgZmluYWxpemVkJmd0Ozxicj4mZ3Q7IC0gJycn PGJyPiZndDsgLTxicj4mZ3Q7IC0gZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KTo8YnI+ Jmd0OyAtIGcgPSBHKEwoTm9uZSkpPGJyPiZndDsgLSBnZGIud3JpdGUoJ0dDIHN0YXRzOiB7c3Rh dGV9XG57c3RhdHN9XG4nLmZvcm1hdCg8YnI+Jmd0OyAtIHN0YXRlPWdjX3N0YXRlKGcpLDxicj4m Z3Q7IC0gc3RhdHM9ZHVtcF9nYyhnKTxicj4mZ3Q7IC0gKSk8YnI+Jmd0OyAtPGJyPiZndDsgLTxi cj4mZ3Q7IC1kZWYgaW5pdChjb21tYW5kcyk6PGJyPiZndDsgLSBnbG9iYWwgTEpfNjQsIExKX0dD NjQsIExKX0ZSMiwgTEpfRFVBTE5VTSwgTEpfVElTTlVNLCBQQURESU5HPGJyPiZndDsgLTxicj4m Z3Q7IC0gIyBYWFggRnJhZ2lsZTogdGhvdWdoIGNvbm5lY3RpbmcgdGhlIGNhbGxiYWNrIGxvb2tz IGxpa2UgYSBjcmFwIGJ1dCBpdDxicj4mZ3Q7IC0gIyByZXNwZWN0cyBib3RoIFB5dGhvbiAyIGFu ZCBQeXRob24gMyAoc2VlICM0ODI4KS48YnI+Jmd0OyAtIGRlZiBjb25uZWN0KGNhbGxiYWNrKTo8 YnI+Jmd0OyAtIGlmIExFR0FDWTo8YnI+Jmd0OyAtIGdsb2JhbCBDT05ORUNURUQ8YnI+Jmd0OyAt IENPTk5FQ1RFRCA9IFRydWU8YnI+Jmd0OyAtIGdkYi5ldmVudHMubmV3X29iamZpbGUuY29ubmVj dChjYWxsYmFjayk8YnI+Jmd0OyAtPGJyPiZndDsgLSAjIFhYWCBGcmFnaWxlOiB0aG91Z2ggZGlz Y29ubmVjdGluZyB0aGUgY2FsbGJhY2sgbG9va3MgbGlrZSBhIGNyYXAgYnV0IGl0PGJyPiZndDsg LSAjIHJlc3BlY3RzIGJvdGggUHl0aG9uIDIgYW5kIFB5dGhvbiAzIChzZWUgIzQ4MjgpLjxicj4m Z3Q7IC0gZGVmIGRpc2Nvbm5lY3QoY2FsbGJhY2spOjxicj4mZ3Q7IC0gaWYgTEVHQUNZOjxicj4m Z3Q7IC0gZ2xvYmFsIENPTk5FQ1RFRDxicj4mZ3Q7IC0gaWYgbm90IENPTk5FQ1RFRDo8YnI+Jmd0 OyAtIHJldHVybjxicj4mZ3Q7IC0gQ09OTkVDVEVEID0gRmFsc2U8YnI+Jmd0OyAtIGdkYi5ldmVu dHMubmV3X29iamZpbGUuZGlzY29ubmVjdChjYWxsYmFjayk8YnI+Jmd0OyAtPGJyPiZndDsgLSB0 cnk6PGJyPiZndDsgLSAjIFRyeSB0byByZW1vdmUgdGhlIGNhbGxiYWNrIGF0IGZpcnN0IHRvIG5v dCBhcHBlbmQgZHVwbGljYXRlcyB0bzxicj4mZ3Q7IC0gIyBnZGIuZXZlbnRzLm5ld19vYmpmaWxl IGludGVybmFsIGxpc3QuPGJyPiZndDsgLSBkaXNjb25uZWN0KGxvYWQpPGJyPiZndDsgLSBleGNl cHQgRXhjZXB0aW9uOjxicj4mZ3Q7IC0gIyBDYWxsYmFjayBpcyBub3QgY29ubmVjdGVkLjxicj4m Z3Q7IC0gcGFzczxicj4mZ3Q7IC08YnI+Jmd0OyAtIHRyeTo8YnI+Jmd0OyAtICMgRGV0ZWN0IHdo ZXRoZXIgbGlibHVhaml0IG9iamZpbGUgaXMgbG9hZGVkLjxicj4mZ3Q7IC0gZ2RiLnBhcnNlX2Fu ZF9ldmFsKCdsdWFKSVRfc2V0bW9kZScpPGJyPiZndDsgLSBleGNlcHQgRXhjZXB0aW9uOjxicj4m Z3Q7IC0gZ2RiLndyaXRlKCdsdWFqaXQtZ2RiLnB5IGluaXRpYWxpemF0aW9uIGlzIHBvc3Rwb25l ZCAnPGJyPiZndDsgLSAndW50aWwgbGlibHVhaml0IG9iamZpbGUgaXMgbG9hZGVkXG4nKTxicj4m Z3Q7IC0gIyBBZGQgYSBjYWxsYmFjayB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBuZXh0IG9iamZp bGUgaXMgbG9hZGVkLjxicj4mZ3Q7IC0gY29ubmVjdChsb2FkKTxicj4mZ3Q7IC0gcmV0dXJuPGJy PiZndDsgLTxicj4mZ3Q7IC0gdHJ5Ojxicj4mZ3Q7IC0gTEpfNjQgPSBzdHIoZ2RiLnBhcnNlX2Fu ZF9ldmFsKCdJUlRfUFRSJykpID09ICdJUlRfUDY0Jzxicj4mZ3Q7IC0gTEpfRlIyID0gTEpfR0M2 NCA9IHN0cihnZGIucGFyc2VfYW5kX2V2YWwoJ0lSVF9QR0MnKSkgPT0gJ0lSVF9QNjQnPGJyPiZn dDsgLSBMSl9EVUFMTlVNID0gZ2RiLmxvb2t1cF9nbG9iYWxfc3ltYm9sKCdsal9saWJfY2hlY2tu dW1iZXInKSBpcyBub3QgTm9uZTxicj4mZ3Q7IC0gZXhjZXB0IEV4Y2VwdGlvbjo8YnI+Jmd0OyAt IGdkYi53cml0ZSgnbHVhaml0LWdkYi5weSBmYWlsZWQgdG8gbG9hZDogJzxicj4mZ3Q7IC0gJ25v IGRlYnVnZ2luZyBzeW1ib2xzIGZvdW5kIGZvciBsaWJsdWFqaXRcbicpPGJyPiZndDsgLSByZXR1 cm48YnI+Jmd0OyAtPGJyPiZndDsgLSBmb3IgbmFtZSwgY29tbWFuZCBpbiBjb21tYW5kcy5pdGVt cygpOjxicj4mZ3Q7IC0gY29tbWFuZChuYW1lKTxicj4mZ3Q7IC08YnI+Jmd0OyAtIFBBRERJTkcg PSAnICcgKiBsZW4oJzonICsgaGV4KCgxICZsdDsmbHQ7ICg0NyBpZiBMSl9HQzY0IGVsc2UgMzIp KSAtIDEpKTxicj4mZ3Q7IC0gTEpfVElTTlVNID0gMHhmZmZlZmZmZiBpZiBMSl82NCBhbmQgbm90 IExKX0dDNjQgZWxzZSBMSl9UWydOVU1YJ108YnI+Jmd0OyAtPGJyPiZndDsgLSBnZGIud3JpdGUo J2x1YWppdC1nZGIucHkgaXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZFxuJyk8YnI+Jmd0OyAtPGJyPiZn dDsgLTxicj4mZ3Q7IC1kZWYgbG9hZChldmVudD1Ob25lKTo8YnI+Jmd0OyAtIGluaXQoezxicj4m Z3Q7IC0gJ2xqLWFyY2gnOiBMSkR1bXBBcmNoLDxicj4mZ3Q7IC0gJ2xqLXR2JzogTEpEdW1wVFZh bHVlLDxicj4mZ3Q7IC0gJ2xqLXN0cic6IExKRHVtcFN0cmluZyw8YnI+Jmd0OyAtICdsai10YWIn OiBMSkR1bXBUYWJsZSw8YnI+Jmd0OyAtICdsai1zdGFjayc6IExKRHVtcFN0YWNrLDxicj4mZ3Q7 IC0gJ2xqLXN0YXRlJzogTEpTdGF0ZSw8YnI+Jmd0OyAtICdsai1nYyc6IExKR0MsPGJyPiZndDsg LSB9KTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJyPiZndDsgLWxvYWQoTm9uZSk8YnI+Jmd0OyBkaWZm IC0tZ2l0IGEvc3JjL2x1YWppdF9sbGRiLnB5IGIvc3JjL2x1YWppdF9kYmcucHk8YnI+Jmd0OyBz aW1pbGFyaXR5IGluZGV4IDYzJTxicj4mZ3Q7IHJlbmFtZSBmcm9tIHNyYy9sdWFqaXRfbGxkYi5w eTxicj4mZ3Q7IHJlbmFtZSB0byBzcmMvbHVhaml0X2RiZy5weTxicj4mZ3Q7IGluZGV4IGVmMDk4 NmNjLi5jYjQ2YjQ3MyAxMDA2NDQ8YnI+Jmd0OyAtLS0gYS9zcmMvbHVhaml0X2xsZGIucHk8YnI+ Jmd0OyArKysgYi9zcmMvbHVhaml0X2RiZy5weTxicj4mZ3Q7IEBAIC0xLDEwICsxLDIzMSBAQDxi cj4mZ3Q7IC0jIExMREIgZXh0ZW5zaW9uIGZvciBMdWFKSVQgcG9zdC1tb3J0ZW0gYW5hbHlzaXMu PGJyPiZndDsgLSMgVG8gdXNlLCBqdXN0IHB1dCAnY29tbWFuZCBzY3JpcHQgaW1wb3J0ICZsdDtw YXRoLXRvLXJlcG8mZ3Q7L3NyYy9sdWFqaXRfbGxkYi5weSc8YnI+Jmd0OyAtIyBpbiBsbGRiLjxi cj4mZ3Q7ICsjIERlYnVnIGV4dGVuc2lvbiBmb3IgTHVhSklUIHBvc3QtbW9ydGVtIGFuYWx5c2lz Ljxicj4mZ3Q7ICsjIFRvIHVzZSBpbiBMTERCOiAnY29tbWFuZCBzY3JpcHQgaW1wb3J0ICZsdDtw YXRoLXRvLXJlcG8mZ3Q7L3NyYy9sdWFqaXRfZGJnLnB5Jzxicj4mZ3Q7ICsjIFRvIHVzZSBpbiBH REI6ICdzb3VyY2UgJmx0O3BhdGgtdG8tcmVwbyZndDsvc3JjL2x1YWppdF9kYmcucHknPGJyPiZn dDs8YnI+Jmd0OyBpbXBvcnQgYWJjPGJyPiZndDsgaW1wb3J0IHJlPGJyPiZndDsgLWltcG9ydCBs bGRiPGJyPiZndDsgK2ltcG9ydCBzeXM8YnI+Jmd0OyAraW1wb3J0IHR5cGVzPGJyPiZndDsgKzxi cj4mZ3Q7ICtmcm9tIGltcG9ydGxpYiBpbXBvcnQgaW1wb3J0X21vZHVsZTxicj4mZ3Q7ICs8YnI+ Jmd0OyArIyBtYWtlIHNjcmlwdCBjb21wYXRpYmxlIHdpdGggdGhlIGFuY2llbnQgUHl0aG9uIHt7 ezxicj4mZ3Q7ICs8YnI+Jmd0OyArPGJyPiZndDsgK0xFR0FDWSA9IHJlLm1hdGNoKHInXjJcLics IHN5cy52ZXJzaW9uKTxicj4mZ3Q7ICs8YnI+Jmd0OyAraWYgTEVHQUNZOjxicj4mZ3Q7ICsgQ09O TkVDVEVEID0gRmFsc2U8YnI+Jmd0OyArIGludCA9IGxvbmc8YnI+Jmd0OyArIHJhbmdlID0geHJh bmdlPGJyPiZndDsgKzxicj4mZ3Q7ICs8YnI+Jmd0OyArZGVmIGlzX2ludGVnZXJfdHlwZSh2YWwp Ojxicj4mZ3Q7ICsgcmV0dXJuIGlzaW5zdGFuY2UodmFsLCBpbnQpIG9yIChMRUdBQ1kgYW5kIGlz aW5zdGFuY2UodmFsLCB0eXBlcy5JbnRUeXBlKSk8YnI+Jmd0OyArPGJyPiZndDsgKzxicj4mZ3Q7 ICsjIH19fTxicj4mZ3Q7ICs8YnI+Jmd0OyArPGJyPiZndDsgK2NsYXNzIERlYnVnZ2VyKG9iamVj dCk6PGJyPiZndDsgKyBkZWYgX19pbml0X18oc2VsZik6PGJyPiZndDsgKyBzZWxmLkdEQiA9IEZh bHNlPGJyPiZndDsgKyBzZWxmLkxMREIgPSBGYWxzZTxicj4mZ3Q7ICs8YnI+Jmd0OyArIGRlYnVn Z2VycyA9IHs8YnI+Jmd0OyArICdnZGInOiBsYW1iZGEgbGliOiBUcnVlLDxicj4mZ3Q7ICsgJ2xs ZGInOiBsYW1iZGEgbGliOiBsaWIuZGVidWdnZXIgaXMgbm90IE5vbmUsPGJyPiZndDsgKyB9PGJy PiZndDsgKyBmb3IgbmFtZSwgaGVhbHRoY2hlY2sgaW4gZGVidWdnZXJzLml0ZW1zKCk6PGJyPiZn dDsgKyBsaWIgPSBOb25lPGJyPiZndDsgKyB0cnk6PGJyPiZndDsgKyBsaWIgPSBpbXBvcnRfbW9k dWxlKG5hbWUpPGJyPiZndDsgKyBleGNlcHQgSW1wb3J0RXJyb3I6PGJyPiZndDsgKyBjb250aW51 ZTxicj4mZ3Q7ICs8YnI+Jmd0OyArIGlmIGhlYWx0aGNoZWNrKGxpYik6PGJyPiZndDsgKyBzZXRh dHRyKHNlbGYsIG5hbWUudXBwZXIoKSwgVHJ1ZSk8YnI+Jmd0OyArIGdsb2JhbHMoKVtuYW1lXSA9 IGxpYjxicj4mZ3Q7ICsgc2VsZi5uYW1lID0gbmFtZTxicj4mZ3Q7ICs8YnI+Jmd0OyArIGFzc2Vy dCBzZWxmLkxMREIgIT0gc2VsZi5HREI8YnI+Jmd0OyArPGJyPiZndDsgKyBkZWYgc2V0dXBfdGFy Z2V0KHNlbGYsIGRlYnVnZ2VyKTo8YnI+Jmd0OyArIGdsb2JhbCB0YXJnZXQ8YnI+Jmd0OyArIGlm IHNlbGYuTExEQjo8YnI+Jmd0OyArIHRhcmdldCA9IGRlYnVnZ2VyLkdldFNlbGVjdGVkVGFyZ2V0 KCk8YnI+Jmd0OyArPGJyPiZndDsgKyBkZWYgd3JpdGUoc2VsZiwgbXNnKTo8YnI+Jmd0OyArIGlm IHNlbGYuTExEQjo8YnI+Jmd0OyArIHByaW50KG1zZyk8YnI+Jmd0OyArIGVsc2U6PGJyPiZndDsg KyBnZGIud3JpdGUobXNnICsgJ1xuJyk8YnI+Jmd0OyArPGJyPiZndDsgKyBkZWYgY21kX2luaXQo c2VsZiwgY21kX2NscywgZGVidWdnZXI9Tm9uZSk6PGJyPiZndDsgKyBpZiBzZWxmLkxMREI6PGJy PiZndDsgKyBkZWJ1Z2dlci5IYW5kbGVDb21tYW5kKDxicj4mZ3Q7ICsgJ2NvbW1hbmQgc2NyaXB0 IGFkZCAtLW92ZXJ3cml0ZSAtLWNsYXNzICc8YnI+Jmd0OyArICdsdWFqaXRfZGJnLntjbHN9IHtj bWR9Jzxicj4mZ3Q7ICsgLmZvcm1hdCg8YnI+Jmd0OyArIGNscz1jbWRfY2xzLl9fbmFtZV9fLDxi cj4mZ3Q7ICsgY21kPWNtZF9jbHMuY29tbWFuZCw8YnI+Jmd0OyArICk8YnI+Jmd0OyArICk8YnI+ Jmd0OyArIGVsc2U6PGJyPiZndDsgKyBjbWRfY2xzKCk8YnI+Jmd0OyArPGJyPiZndDsgKyBkZWYg ZXZlbnRfY29ubmVjdChzZWxmLCBjYWxsYmFjayk6PGJyPiZndDsgKyBpZiBub3Qgc2VsZi5MTERC Ojxicj4mZ3Q7ICsgIyBYWFggRnJhZ2lsZTogdGhvdWdoIGNvbm5lY3RpbmcgdGhlIGNhbGxiYWNr IGxvb2tzIGxpa2UgYSBjcmFwIGJ1dDxicj4mZ3Q7ICsgIyBpdCByZXNwZWN0cyBib3RoIFB5dGhv biAyIGFuZCBQeXRob24gMyAoc2VlICM0ODI4KS48YnI+Jmd0OyArIGlmIExFR0FDWTo8YnI+Jmd0 OyArIGdsb2JhbCBDT05ORUNURUQ8YnI+Jmd0OyArIENPTk5FQ1RFRCA9IFRydWU8YnI+Jmd0OyAr IGdkYi5ldmVudHMubmV3X29iamZpbGUuY29ubmVjdChjYWxsYmFjayk8YnI+Jmd0OyArPGJyPiZn dDsgKyBkZWYgZXZlbnRfZGlzY29ubmVjdChzZWxmLCBjYWxsYmFjayk6PGJyPiZndDsgKyBpZiBu b3Qgc2VsZi5MTERCOjxicj4mZ3Q7ICsgIyBYWFggRnJhZ2lsZTogdGhvdWdoIGRpc2Nvbm5lY3Rp bmcgdGhlIGNhbGxiYWNrIGxvb2tzIGxpa2UgYSBjcmFwPGJyPiZndDsgKyAjIGJ1dCBpdCByZXNw ZWN0cyBib3RoIFB5dGhvbiAyIGFuZCBQeXRob24gMyAoc2VlICM0ODI4KS48YnI+Jmd0OyArIGlm IExFR0FDWTo8YnI+Jmd0OyArIGdsb2JhbCBDT05ORUNURUQ8YnI+Jmd0OyArIGlmIG5vdCBDT05O RUNURUQ6PGJyPiZndDsgKyByZXR1cm48YnI+Jmd0OyArIENPTk5FQ1RFRCA9IEZhbHNlPGJyPiZn dDsgKyBnZGIuZXZlbnRzLm5ld19vYmpmaWxlLmRpc2Nvbm5lY3QoY2FsbGJhY2spPGJyPiZndDsg Kzxicj4mZ3Q7ICsgZGVmIGxvb2t1cF92YXJpYWJsZShzZWxmLCBuYW1lKTo8YnI+Jmd0OyArIGlm IHNlbGYuTExEQjo8YnI+Jmd0OyArIHJldHVybiB0YXJnZXQuRmluZEZpcnN0R2xvYmFsVmFyaWFi bGUobmFtZSk8YnI+Jmd0OyArIGVsc2U6PGJyPiZndDsgKyB2YXJpYWJsZSwgXyA9IGdkYi5sb29r dXBfc3ltYm9sKG5hbWUpPGJyPiZndDsgKyByZXR1cm4gdmFyaWFibGUudmFsdWUoKSBpZiB2YXJp YWJsZSBlbHNlIE5vbmU8YnI+Jmd0OyArPGJyPiZndDsgKyBkZWYgbG9va3VwX3N5bWJvbChzZWxm LCBzeW0pOjxicj4mZ3Q7ICsgaWYgc2VsZi5MTERCOjxicj4mZ3Q7ICsgcmV0dXJuIHRhcmdldC5t b2R1bGVzWzBdLkZpbmRTeW1ib2woc3ltKTxicj4mZ3Q7ICsgZWxzZTo8YnI+Jmd0OyArIHJldHVy biBnZGIubG9va3VwX2dsb2JhbF9zeW1ib2woc3ltKTxicj4mZ3Q7ICs8YnI+Jmd0OyArIGRlZiB0 b191bnNpZ25lZChzZWxmLCB2YWwpOjxicj4mZ3Q7ICsgcmV0dXJuIHZhbC51bnNpZ25lZCBpZiBz ZWxmLkxMREIgZWxzZSBpbnQodmFsKTxicj4mZ3Q7ICs8YnI+Jmd0OyArIGRlZiB0b19zaWduZWQo c2VsZiwgdmFsKTo8YnI+Jmd0OyArIHJldHVybiB2YWwuc2lnbmVkIGlmIHNlbGYuTExEQiBlbHNl IGludCh2YWwpPGJyPiZndDsgKzxicj4mZ3Q7ICsgZGVmIHRvX3N0cihzZWxmLCB2YWwpOjxicj4m Z3Q7ICsgcmV0dXJuIHZhbC52YWx1ZSBpZiBzZWxmLkxMREIgZWxzZSBzdHIodmFsKTxicj4mZ3Q7 ICs8YnI+Jmd0OyArIGRlZiBmaW5kX3R5cGUoc2VsZiwgdHlwZW5hbWUpOjxicj4mZ3Q7ICsgaWYg c2VsZi5MTERCOjxicj4mZ3Q7ICsgcmV0dXJuIHRhcmdldC5GaW5kRmlyc3RUeXBlKHR5cGVuYW1l KTxicj4mZ3Q7ICsgZWxzZTo8YnI+Jmd0OyArIHJldHVybiBnZGIubG9va3VwX3R5cGUodHlwZW5h bWUpPGJyPiZndDsgKzxicj4mZ3Q7ICsgZGVmIHR5cGVfdG9fcG9pbnRlcl90eXBlKHNlbGYsIHRw KTo8YnI+Jmd0OyArIGlmIHNlbGYuTExEQjo8YnI+Jmd0OyArIHJldHVybiB0cC5HZXRQb2ludGVy VHlwZSgpPGJyPiZndDsgKyBlbHNlOjxicj4mZ3Q7ICsgcmV0dXJuIHRwLnBvaW50ZXIoKTxicj4m Z3Q7ICs8YnI+Jmd0OyArIGRlZiBjYXN0X2ltcGwoc2VsZiwgdmFsdWUsIHQsIHBvaW50ZXJfdHlw ZSk6PGJyPiZndDsgKyBpZiBzZWxmLkxMREI6PGJyPiZndDsgKyBpZiBpc19pbnRlZ2VyX3R5cGUo dmFsdWUpOjxicj4mZ3Q7ICsgIyBJbnRlZ2VyIGNhc3RzIHJlcXVpcmUgc29tZSBibGFjayBtYWdp Yzxicj4mZ3Q7ICsgIyBmb3IgbGxkYiB0byBiZWhhdmUgcHJvcGVybHkuPGJyPiZndDsgKyBpZiBw b2ludGVyX3R5cGU6PGJyPiZndDsgKyByZXR1cm4gdGFyZ2V0LkNyZWF0ZVZhbHVlRnJvbUFkZHJl c3MoPGJyPiZndDsgKyAndmFsdWUnLDxicj4mZ3Q7ICsgbGxkYi5TQkFkZHJlc3ModmFsdWUsIHRh cmdldCksPGJyPiZndDsgKyB0LkdldFBvaW50ZWVUeXBlKCksPGJyPiZndDsgKyApLmFkZHJlc3Nf b2Y8YnI+Jmd0OyArIGVsc2U6PGJyPiZndDsgKyByZXR1cm4gdGFyZ2V0LkNyZWF0ZVZhbHVlRnJv bURhdGEoPGJyPiZndDsgKyBuYW1lPSd2YWx1ZScsPGJyPiZndDsgKyBkYXRhPWxsZGIuU0JEYXRh LkNyZWF0ZURhdGFGcm9tSW50KHZhbHVlLCBzaXplPTgpLDxicj4mZ3Q7ICsgdHlwZT10LDxicj4m Z3Q7ICsgKTxicj4mZ3Q7ICsgZWxzZTo8YnI+Jmd0OyArIHJldHVybiB2YWx1ZS5DYXN0KHQpPGJy PiZndDsgKyBlbHNlOjxicj4mZ3Q7ICsgcmV0dXJuIGdkYi5WYWx1ZSh2YWx1ZSkuY2FzdCh0KTxi cj4mZ3Q7ICs8YnI+Jmd0OyArIGRlZiBkZXJlZmVyZW5jZShzZWxmLCB2YWwpOjxicj4mZ3Q7ICsg aWYgc2VsZi5MTERCOjxicj4mZ3Q7ICsgcmV0dXJuIHZhbC5EZXJlZmVyZW5jZSgpPGJyPiZndDsg KyBlbHNlOjxicj4mZ3Q7ICsgcmV0dXJuIHZhbC5kZXJlZmVyZW5jZSgpPGJyPiZndDsgKzxicj4m Z3Q7ICsgZGVmIGV2YWwoc2VsZiwgZXhwcmVzc2lvbik6PGJyPiZndDsgKyBpZiBzZWxmLkxMREI6 PGJyPiZndDsgKyBwcm9jZXNzID0gdGFyZ2V0LkdldFByb2Nlc3MoKTxicj4mZ3Q7ICsgdGhyZWFk ID0gcHJvY2Vzcy5HZXRTZWxlY3RlZFRocmVhZCgpPGJyPiZndDsgKyBmcmFtZSA9IHRocmVhZC5H ZXRTZWxlY3RlZEZyYW1lKCk8YnI+Jmd0OyArPGJyPiZndDsgKyBpZiBub3QgZXhwcmVzc2lvbjo8 YnI+Jmd0OyArIHJldHVybiBOb25lPGJyPiZndDsgKzxicj4mZ3Q7ICsgcmV0dXJuIGZyYW1lLkV2 YWx1YXRlRXhwcmVzc2lvbihleHByZXNzaW9uKTxicj4mZ3Q7ICsgZWxzZTo8YnI+Jmd0OyArIHJl dHVybiBnZGIucGFyc2VfYW5kX2V2YWwoZXhwcmVzc2lvbik8YnI+Jmd0OyArPGJyPiZndDsgKyBk ZWYgdHlwZV9zaXplb2ZfaW1wbChzZWxmLCB0cCk6PGJyPiZndDsgKyBpZiBzZWxmLkxMREI6PGJy PiZndDsgKyByZXR1cm4gdHAuR2V0Qnl0ZVNpemUoKTxicj4mZ3Q7ICsgZWxzZTo8YnI+Jmd0OyAr IHJldHVybiB0cC5zaXplb2Y8YnI+Jmd0OyArPGJyPiZndDsgKyBkZWYgc3VtbWFyeShzZWxmLCB2 YWwpOjxicj4mZ3Q7ICsgaWYgc2VsZi5MTERCOjxicj4mZ3Q7ICsgcmV0dXJuIHZhbC5zdW1tYXJ5 PGJyPiZndDsgKyBlbHNlOjxicj4mZ3Q7ICsgcmV0dXJuIHN0cih2YWwpW2xlbihQQURESU5HKTpd LnN0cmlwKCk8YnI+Jmd0OyArPGJyPiZndDsgKyBkZWYgdHlwZV9tZW1iZXIoc2VsZiwgdHlwZV9v YmosIG5hbWUpOjxicj4mZ3Q7ICsgaWYgc2VsZi5MTERCOjxicj4mZ3Q7ICsgcmV0dXJuIG5leHQo KHggZm9yIHggaW4gdHlwZV9vYmoubWVtYmVycyBpZiB4Lm5hbWUgPT0gbmFtZSksIE5vbmUpPGJy PiZndDsgKyBlbHNlOjxicj4mZ3Q7ICsgcmV0dXJuIHR5cGVfb2JqW25hbWVdPGJyPiZndDsgKzxi cj4mZ3Q7ICsgZGVmIHR5cGVfbWVtYmVyX29mZnNldChzZWxmLCBtZW1iZXIpOjxicj4mZ3Q7ICsg aWYgc2VsZi5MTERCOjxicj4mZ3Q7ICsgcmV0dXJuIG1lbWJlci5HZXRPZmZzZXRJbkJ5dGVzKCk8 YnI+Jmd0OyArIGVsc2U6PGJyPiZndDsgKyByZXR1cm4gbWVtYmVyLmJpdHBvcyAvIDg8YnI+Jmd0 OyArPGJyPiZndDsgKyBkZWYgZ2V0X21lbWJlcihzZWxmLCB2YWx1ZSwgbWVtYmVyX25hbWUpOjxi cj4mZ3Q7ICsgaWYgc2VsZi5MTERCOjxicj4mZ3Q7ICsgcmV0dXJuIHZhbHVlLkdldENoaWxkTWVt YmVyV2l0aE5hbWUobWVtYmVyX25hbWUpPGJyPiZndDsgKyBlbHNlOjxicj4mZ3Q7ICsgcmV0dXJu IHZhbHVlW21lbWJlcl9uYW1lXTxicj4mZ3Q7ICs8YnI+Jmd0OyArIGRlZiBhZGRyZXNzX29mKHNl bGYsIHZhbHVlKTo8YnI+Jmd0OyArIGlmIHNlbGYuTExEQjo8YnI+Jmd0OyArIHJldHVybiB2YWx1 ZS5hZGRyZXNzX29mPGJyPiZndDsgKyBlbHNlOjxicj4mZ3Q7ICsgcmV0dXJuIHZhbHVlLmFkZHJl c3M8YnI+Jmd0OyArPGJyPiZndDsgKyBkZWYgYXJjaF9pbml0KHNlbGYpOjxicj4mZ3Q7ICsgZ2xv YmFsIExKXzY0LCBMSl9HQzY0LCBMSl9GUjIsIExKX0RVQUxOVU0sIFBBRERJTkcsIExKX1RJU05V TSwgdGFyZ2V0PGJyPiZndDsgKyBpZiBzZWxmLkxMREI6PGJyPiZndDsgKyBpcnR5cGVfZW51bSA9 IGRiZy5maW5kX3R5cGUoJ0lSVHlwZScpLmVudW1fbWVtYmVyczxicj4mZ3Q7ICsgZm9yIG1lbWJl ciBpbiBpcnR5cGVfZW51bTo8YnI+Jmd0OyArIGlmIG1lbWJlci5uYW1lID09ICdJUlRfUFRSJzo8 YnI+Jmd0OyArIExKXzY0ID0gZGJnLnRvX3Vuc2lnbmVkKG1lbWJlcikgJmFtcDsgMHgxZiA9PSBJ UlRfUDY0PGJyPiZndDsgKyBpZiBtZW1iZXIubmFtZSA9PSAnSVJUX1BHQyc6PGJyPiZndDsgKyBM Sl9HQzY0ID0gZGJnLnRvX3Vuc2lnbmVkKG1lbWJlcikgJmFtcDsgMHgxZiA9PSBJUlRfUDY0PGJy PiZndDsgKyBlbHNlOjxicj4mZ3Q7ICsgTEpfNjQgPSBzdHIoZGJnLmV2YWwoJ0lSVF9QVFInKSkg PT0gJ0lSVF9QNjQnPGJyPiZndDsgKyBMSl9HQzY0ID0gc3RyKGRiZy5ldmFsKCdJUlRfUEdDJykp ID09ICdJUlRfUDY0Jzxicj4mZ3Q7ICs8YnI+Jmd0OyArIExKX0ZSMiA9IExKX0dDNjQ8YnI+Jmd0 OyArIExKX0RVQUxOVU0gPSBkYmcubG9va3VwX3N5bWJvbCgnbGpfbGliX2NoZWNrbnVtYmVyJykg aXMgbm90IE5vbmU8YnI+Jmd0OyArICMgVHdvIGV4dHJhIGNoYXJhY3RlcnMgYXJlIHJlcXVpcmVk IHRvIGZpdCBpbiB0aGUgYDB4YCBwYXJ0Ljxicj4mZ3Q7ICsgUEFERElORyA9ICcgJyAqIGxlbihz dHJ4NjQoTCgpKSk8YnI+Jmd0OyArIExKX1RJU05VTSA9IDB4ZmZmZWZmZmYgaWYgTEpfNjQgYW5k IG5vdCBMSl9HQzY0IGVsc2UgTEpfVFsnTlVNWCddPGJyPiZndDsgKzxicj4mZ3Q7ICs8YnI+Jmd0 OyArZGJnID0gRGVidWdnZXIoKTxicj4mZ3Q7PGJyPiZndDsgTEpfNjQgPSBOb25lPGJyPiZndDsg TEpfR0M2NCA9IE5vbmU8YnI+Jmd0OyBAQCAtMTcsNjggKzIzOCw3MyBAQCBJUlRfUDY0ID0gOTxi cj4mZ3Q7IExKX0dDVk1BU0sgPSAoKDEgJmx0OyZsdDsgNDcpIC0gMSk8YnI+Jmd0OyBMSl9USVNO VU0gPSBOb25lPGJyPiZndDs8YnI+Jmd0OyAtIyBEZWJ1Z2dlciBzcGVjaWZpYyB7e3s8YnI+Jmd0 OyAtPGJyPiZndDsgLTxicj4mZ3Q7ICMgR2xvYmFsPGJyPiZndDsgdGFyZ2V0ID0gTm9uZTxicj4m Z3Q7PGJyPiZndDs8YnI+Jmd0OyAtY2xhc3MgUHRyOjxicj4mZ3Q7ICtjbGFzcyBQdHIob2JqZWN0 KTo8YnI+Jmd0OyBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIG5vcm1hbF90eXBlKTo8YnI+Jmd0 OyBzZWxmLnZhbHVlID0gdmFsdWU8YnI+Jmd0OyBzZWxmLm5vcm1hbF90eXBlID0gbm9ybWFsX3R5 cGU8YnI+Jmd0Ozxicj4mZ3Q7IEBwcm9wZXJ0eTxicj4mZ3Q7IGRlZiBfX2RlcmVmKHNlbGYpOjxi cj4mZ3Q7IC0gcmV0dXJuIHNlbGYubm9ybWFsX3R5cGUoc2VsZi52YWx1ZS5EZXJlZmVyZW5jZSgp KTxicj4mZ3Q7ICsgcmV0dXJuIHNlbGYubm9ybWFsX3R5cGUoZGJnLmRlcmVmZXJlbmNlKHNlbGYu dmFsdWUpKTxicj4mZ3Q7PGJyPiZndDsgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOjxicj4mZ3Q7 IC0gYXNzZXJ0IGlzaW5zdGFuY2Uob3RoZXIsIGludCk8YnI+Jmd0OyArIGFzc2VydCBpc19pbnRl Z2VyX3R5cGUob3RoZXIpPGJyPiZndDsgcmV0dXJuIHNlbGYuX19jbGFzc19fKDxicj4mZ3Q7IGNh c3QoPGJyPiZndDsgc2VsZi5ub3JtYWxfdHlwZS5fX25hbWVfXyArICcgKicsPGJyPiZndDsgY2Fz dCg8YnI+Jmd0OyAndWludHB0cl90Jyw8YnI+Jmd0OyAtIHNlbGYudmFsdWUudW5zaWduZWQgKyBv dGhlciAqIHNlbGYudmFsdWUuZGVyZWYuc2l6ZSw8YnI+Jmd0OyArIGRiZy50b191bnNpZ25lZChz ZWxmLnZhbHVlKSArIG90aGVyICogc2l6ZW9mKDxicj4mZ3Q7ICsgc2VsZi5ub3JtYWxfdHlwZS5f X25hbWVfXzxicj4mZ3Q7ICsgKSw8YnI+Jmd0OyApLDxicj4mZ3Q7ICksPGJyPiZndDsgKTxicj4m Z3Q7PGJyPiZndDsgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOjxicj4mZ3Q7IC0gYXNzZXJ0IGlz aW5zdGFuY2Uob3RoZXIsIGludCkgb3IgaXNpbnN0YW5jZShvdGhlciwgUHRyKTxicj4mZ3Q7IC0g aWYgaXNpbnN0YW5jZShvdGhlciwgaW50KTo8YnI+Jmd0OyArIGFzc2VydCBpc19pbnRlZ2VyX3R5 cGUob3RoZXIpIG9yIGlzaW5zdGFuY2Uob3RoZXIsIFB0cik8YnI+Jmd0OyArIGlmIGlzX2ludGVn ZXJfdHlwZShvdGhlcik6PGJyPiZndDsgcmV0dXJuIHNlbGYuX19hZGRfXygtb3RoZXIpPGJyPiZn dDsgZWxzZTo8YnI+Jmd0OyAtIHJldHVybiBpbnQoKHNlbGYudmFsdWUudW5zaWduZWQgLSBvdGhl ci52YWx1ZS51bnNpZ25lZCk8YnI+Jmd0OyAtIC8gc2l6ZW9mKHNlbGYubm9ybWFsX3R5cGUuX19u YW1lX18pKTxicj4mZ3Q7ICsgcmV0dXJuIGludCg8YnI+Jmd0OyArICg8YnI+Jmd0OyArIGRiZy50 b191bnNpZ25lZChzZWxmLnZhbHVlKSAtIGRiZy50b191bnNpZ25lZChvdGhlci52YWx1ZSk8YnI+ Jmd0OyArICkgLyBzaXplb2Yoc2VsZi5ub3JtYWxfdHlwZS5fX25hbWVfXyk8YnI+Jmd0OyArICk8 YnI+Jmd0Ozxicj4mZ3Q7IGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOjxicj4mZ3Q7IC0gYXNzZXJ0 IGlzaW5zdGFuY2Uob3RoZXIsIFB0cikgb3IgaXNpbnN0YW5jZShvdGhlciwgaW50KSBhbmQgb3Ro ZXIgJmd0Oz0gMDxicj4mZ3Q7ICsgYXNzZXJ0IGlzaW5zdGFuY2Uob3RoZXIsIFB0cikgb3IgaXNf aW50ZWdlcl90eXBlKG90aGVyKTxicj4mZ3Q7IGlmIGlzaW5zdGFuY2Uob3RoZXIsIFB0cik6PGJy PiZndDsgLSByZXR1cm4gc2VsZi52YWx1ZS51bnNpZ25lZCA9PSBvdGhlci52YWx1ZS51bnNpZ25l ZDxicj4mZ3Q7ICsgcmV0dXJuIGRiZy50b191bnNpZ25lZChzZWxmLnZhbHVlKSA9PSBkYmcudG9f dW5zaWduZWQob3RoZXIudmFsdWUpPGJyPiZndDsgZWxzZTo8YnI+Jmd0OyAtIHJldHVybiBzZWxm LnZhbHVlLnVuc2lnbmVkID09IG90aGVyPGJyPiZndDsgKyByZXR1cm4gZGJnLnRvX3Vuc2lnbmVk KHNlbGYudmFsdWUpID09IG90aGVyPGJyPiZndDs8YnI+Jmd0OyBkZWYgX19uZV9fKHNlbGYsIG90 aGVyKTo8YnI+Jmd0OyByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXI8YnI+Jmd0Ozxicj4mZ3Q7IGRl ZiBfX2d0X18oc2VsZiwgb3RoZXIpOjxicj4mZ3Q7IGFzc2VydCBpc2luc3RhbmNlKG90aGVyLCBQ dHIpPGJyPiZndDsgLSByZXR1cm4gc2VsZi52YWx1ZS51bnNpZ25lZCAmZ3Q7IG90aGVyLnZhbHVl LnVuc2lnbmVkPGJyPiZndDsgKyByZXR1cm4gZGJnLnRvX3Vuc2lnbmVkKHNlbGYudmFsdWUpICZn dDsgZGJnLnRvX3Vuc2lnbmVkKG90aGVyLnZhbHVlKTxicj4mZ3Q7PGJyPiZndDsgZGVmIF9fZ2Vf XyhzZWxmLCBvdGhlcik6PGJyPiZndDsgYXNzZXJ0IGlzaW5zdGFuY2Uob3RoZXIsIFB0cik8YnI+ Jmd0OyAtIHJldHVybiBzZWxmLnZhbHVlLnVuc2lnbmVkICZndDs9IG90aGVyLnZhbHVlLnVuc2ln bmVkPGJyPiZndDsgKyByZXR1cm4gZGJnLnRvX3Vuc2lnbmVkKHNlbGYudmFsdWUpICZndDs9IGRi Zy50b191bnNpZ25lZChvdGhlci52YWx1ZSk8YnI+Jmd0Ozxicj4mZ3Q7IGRlZiBfX2Jvb2xfXyhz ZWxmKTo8YnI+Jmd0OyAtIHJldHVybiBzZWxmLnZhbHVlLnVuc2lnbmVkICE9IDA8YnI+Jmd0OyAr IHJldHVybiBkYmcudG9fdW5zaWduZWQoc2VsZi52YWx1ZSkgIT0gMDxicj4mZ3Q7PGJyPiZndDsg ZGVmIF9faW50X18oc2VsZik6PGJyPiZndDsgLSByZXR1cm4gc2VsZi52YWx1ZS51bnNpZ25lZDxi cj4mZ3Q7ICsgcmV0dXJuIGRiZy50b191bnNpZ25lZChzZWxmLnZhbHVlKTxicj4mZ3Q7ICs8YnI+ Jmd0OyArIGRlZiBfX2xvbmdfXyhzZWxmKTo8YnI+Jmd0OyArIHJldHVybiBkYmcudG9fdW5zaWdu ZWQoc2VsZi52YWx1ZSk8YnI+Jmd0Ozxicj4mZ3Q7IGRlZiBfX3N0cl9fKHNlbGYpOjxicj4mZ3Q7 IC0gcmV0dXJuIHNlbGYudmFsdWUudmFsdWU8YnI+Jmd0OyArIHJldHVybiBkYmcudG9fc3RyKHNl bGYudmFsdWUpPGJyPiZndDs8YnI+Jmd0OyBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6PGJy PiZndDsgaWYgbmFtZSAhPSAnX19kZXJlZic6PGJyPiZndDsgQEAgLTg2LDUzICszMTIsMjYgQEAg Y2xhc3MgUHRyOjxicj4mZ3Q7IHJldHVybiBzZWxmLl9fZGVyZWY8YnI+Jmd0Ozxicj4mZ3Q7PGJy PiZndDsgLWNsYXNzIE1ldGFTdHJ1Y3QodHlwZSk6PGJyPiZndDsgLSBkZWYgX19pbml0X18oY2xz LCBuYW1lLCBiYXNlcywgbm1zcGMpOjxicj4mZ3Q7IC0gc3VwZXIoTWV0YVN0cnVjdCwgY2xzKS5f X2luaXRfXyhuYW1lLCBiYXNlcywgbm1zcGMpPGJyPiZndDsgLTxicj4mZ3Q7IC0gZGVmIG1ha2Vf Z2VuZXJhbChmaWVsZCwgdHApOjxicj4mZ3Q7IC0gYnVpbHRpbiA9IHs8YnI+Jmd0OyAtICd1aW50 JzogJ3Vuc2lnbmVkJyw8YnI+Jmd0OyAtICdpbnQnOiAnc2lnbmVkJyw8YnI+Jmd0OyAtICdzdHJp bmcnOiAndmFsdWUnLDxicj4mZ3Q7IC0gfTxicj4mZ3Q7IC0gaWYgdHAgaW4gYnVpbHRpbi5rZXlz KCk6PGJyPiZndDsgLSByZXR1cm4gbGFtYmRhIHNlbGY6IGdldGF0dHIoc2VsZltmaWVsZF0sIGJ1 aWx0aW5bdHBdKTxicj4mZ3Q7IC0gZWxzZTo8YnI+Jmd0OyAtIHJldHVybiBsYW1iZGEgc2VsZjog Z2xvYmFscygpW3RwXShzZWxmW2ZpZWxkXSk8YnI+Jmd0OyAtPGJyPiZndDsgLSBpZiBoYXNhdHRy KGNscywgJ21ldGFpbmZvJyk6PGJyPiZndDsgLSBmb3IgZmllbGQgaW4gY2xzLm1ldGFpbmZvOjxi cj4mZ3Q7IC0gaWYgbm90IGlzaW5zdGFuY2UoZmllbGRbMF0sIHN0cik6PGJyPiZndDsgLSBzZXRh dHRyKGNscywgZmllbGRbMV0sIGZpZWxkWzBdKTxicj4mZ3Q7IC0gZWxzZTo8YnI+Jmd0OyAtIHNl dGF0dHIoPGJyPiZndDsgLSBjbHMsPGJyPiZndDsgLSBmaWVsZFsxXSw8YnI+Jmd0OyAtIHByb3Bl cnR5KG1ha2VfZ2VuZXJhbChmaWVsZFsxXSwgZmllbGRbMF0pKSw8YnI+Jmd0OyAtICk8YnI+Jmd0 OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1jbGFzcyBTdHJ1Y3QobWV0YWNsYXNzPU1ldGFTdHJ1Y3Qp Ojxicj4mZ3Q7ICtjbGFzcyBTdHJ1Y3Qob2JqZWN0KTo8YnI+Jmd0OyBkZWYgX19pbml0X18oc2Vs ZiwgdmFsdWUpOjxicj4mZ3Q7IHNlbGYudmFsdWUgPSB2YWx1ZTxicj4mZ3Q7PGJyPiZndDsgZGVm IF9fZ2V0aXRlbV9fKHNlbGYsIG5hbWUpOjxicj4mZ3Q7IC0gcmV0dXJuIHNlbGYudmFsdWUuR2V0 Q2hpbGRNZW1iZXJXaXRoTmFtZShuYW1lKTxicj4mZ3Q7ICsgcmV0dXJuIGRiZy5nZXRfbWVtYmVy KHNlbGYudmFsdWUsIG5hbWUpPGJyPiZndDs8YnI+Jmd0OyBAcHJvcGVydHk8YnI+Jmd0OyBkZWYg YWRkcihzZWxmKTo8YnI+Jmd0OyAtIHJldHVybiBzZWxmLnZhbHVlLmFkZHJlc3Nfb2Y8YnI+Jmd0 OyArIHJldHVybiBkYmcuYWRkcmVzc19vZihzZWxmLnZhbHVlKTxicj4mZ3Q7PGJyPiZndDs8YnI+ Jmd0OyBjX3N0cnVjdHMgPSB7PGJyPiZndDsgJ01SZWYnOiBbPGJyPiZndDsgLSAocHJvcGVydHko bGFtYmRhIHNlbGY6IHNlbGZbJ3B0cjY0J10udW5zaWduZWQgaWYgTEpfR0M2NDxicj4mZ3Q7IC0g ZWxzZSBzZWxmWydwdHIzMiddLnVuc2lnbmVkKSwgJ3B0cicpPGJyPiZndDsgKyAocHJvcGVydHko bGFtYmRhIHNlbGY6IGRiZy50b191bnNpZ25lZChzZWxmWydwdHI2NCddKSBpZiBMSl9HQzY0PGJy PiZndDsgKyBlbHNlIGRiZy50b191bnNpZ25lZChzZWxmWydwdHIzMiddKSksICdwdHInKTxicj4m Z3Q7IF0sPGJyPiZndDsgJ0dDUmVmJzogWzxicj4mZ3Q7IC0gKHByb3BlcnR5KGxhbWJkYSBzZWxm OiBzZWxmWydnY3B0cjY0J10udW5zaWduZWQgaWYgTEpfR0M2NDxicj4mZ3Q7IC0gZWxzZSBzZWxm WydnY3B0cjMyJ10udW5zaWduZWQpLCAnZ2NwdHInKTxicj4mZ3Q7ICsgKHByb3BlcnR5KGxhbWJk YSBzZWxmOiBkYmcudG9fdW5zaWduZWQoc2VsZlsnZ2NwdHI2NCddKSBpZiBMSl9HQzY0PGJyPiZn dDsgKyBlbHNlIGRiZy50b191bnNpZ25lZChzZWxmWydnY3B0cjMyJ10pKSwgJ2djcHRyJyk8YnI+ Jmd0OyBdLDxicj4mZ3Q7ICdUVmFsdWUnOiBbPGJyPiZndDsgKCdHQ1JlZicsICdnY3InKSw8YnI+ Jmd0OyBAQCAtMTQxLDggKzM0MCwxMiBAQCBjX3N0cnVjdHMgPSB7PGJyPiZndDsgKCdpbnQnLCAn aXQ2NCcpLDxicj4mZ3Q7ICgnc3RyaW5nJywgJ24nKSw8YnI+Jmd0OyAocHJvcGVydHkobGFtYmRh IHNlbGY6IEZSKHNlbGZbJ2ZyJ10pIGlmIG5vdCBMSl9HQzY0IGVsc2UgTm9uZSksICdmcicpLDxi cj4mZ3Q7IC0gKHByb3BlcnR5KGxhbWJkYSBzZWxmOiBzZWxmWydmdHN6J10uc2lnbmVkIGlmIExK X0dDNjQgZWxzZSBOb25lKSw8YnI+Jmd0OyAtICdmdHN6Jyk8YnI+Jmd0OyArICg8YnI+Jmd0OyAr IHByb3BlcnR5KDxicj4mZ3Q7ICsgbGFtYmRhIHNlbGY6IGRiZy50b19zaWduZWQoc2VsZlsnZnRz eiddKSBpZiBMSl9HQzY0IGVsc2UgTm9uZTxicj4mZ3Q7ICsgKSw8YnI+Jmd0OyArICdmdHN6Jzxi cj4mZ3Q7ICsgKTxicj4mZ3Q7IF0sPGJyPiZndDsgJ0dDU3RhdGUnOiBbPGJyPiZndDsgKCdHQ1Jl ZicsICdyb290JyksPGJyPiZndDsgQEAgLTIxNiwyNiArNDE5LDUxIEBAIGNfc3RydWN0cyA9IHs8 YnI+Jmd0OyAoJ1RWYWx1ZScsICd2YWwnKSw8YnI+Jmd0OyAoJ01SZWYnLCAnbmV4dCcpPGJyPiZn dDsgXSw8YnI+Jmd0OyAtICdCQ0lucyc6IFtdPGJyPiZndDsgKyAnQkNJbnMnOiBbXSw8YnI+Jmd0 OyB9PGJyPiZndDs8YnI+Jmd0Ozxicj4mZ3Q7IC1mb3IgY2xzIGluIGNfc3RydWN0cy5rZXlzKCk6 PGJyPiZndDsgLSBnbG9iYWxzKClbY2xzXSA9IHR5cGUoY2xzLCAoU3RydWN0LCApLCB7J21ldGFp bmZvJzogY19zdHJ1Y3RzW2Nsc119KTxicj4mZ3Q7ICtkZWYgbWFrZV9wcm9wZXJ0eV9mcm9tX21l dGFkYXRhKGZpZWxkLCB0cCk6PGJyPiZndDsgKyBidWlsdGluID0gezxicj4mZ3Q7ICsgJ3VpbnQn OiBkYmcudG9fdW5zaWduZWQsPGJyPiZndDsgKyAnaW50JzogZGJnLnRvX3NpZ25lZCw8YnI+Jmd0 OyArICdzdHJpbmcnOiBkYmcudG9fc3RyLDxicj4mZ3Q7ICsgfTxicj4mZ3Q7ICsgaWYgdHAgaW4g YnVpbHRpbi5rZXlzKCk6PGJyPiZndDsgKyByZXR1cm4gbGFtYmRhIHNlbGY6IGJ1aWx0aW5bdHBd KHNlbGZbZmllbGRdKTxicj4mZ3Q7ICsgZWxzZTo8YnI+Jmd0OyArIHJldHVybiBsYW1iZGEgc2Vs ZjogZ2xvYmFscygpW3RwXShzZWxmW2ZpZWxkXSk8YnI+Jmd0OyArPGJyPiZndDsgKzxicj4mZ3Q7 ICtmb3IgY2xzLCBtZXRhaW5mbyBpbiBjX3N0cnVjdHMuaXRlbXMoKTo8YnI+Jmd0OyArIGNsc19k aWN0ID0ge308YnI+Jmd0OyArIGZvciBmaWVsZCBpbiBtZXRhaW5mbzo8YnI+Jmd0OyArIGlmIG5v dCBpc2luc3RhbmNlKGZpZWxkWzBdLCBzdHIpOjxicj4mZ3Q7ICsgY2xzX2RpY3RbZmllbGRbMV1d ID0gZmllbGRbMF08YnI+Jmd0OyArIGVsc2U6PGJyPiZndDsgKyBjbHNfZGljdFtmaWVsZFsxXV0g PSBwcm9wZXJ0eSg8YnI+Jmd0OyArIG1ha2VfcHJvcGVydHlfZnJvbV9tZXRhZGF0YShmaWVsZFsx XSwgZmllbGRbMF0pPGJyPiZndDsgKyApPGJyPiZndDsgKyBnbG9iYWxzKClbY2xzXSA9IHR5cGUo Y2xzLCAoU3RydWN0LCApLCBjbHNfZGljdCk8YnI+Jmd0Ozxicj4mZ3Q7PGJyPiZndDsgZm9yIGNs cyBpbiBTdHJ1Y3QuX19zdWJjbGFzc2VzX18oKTo8YnI+Jmd0OyBwdHJfbmFtZSA9IGNscy5fX25h bWVfXyArICdQdHInPGJyPiZndDs8YnI+Jmd0OyArIGRlZiBtYWtlX2luaXQoY2xzKTo8YnI+Jmd0 OyArIHJldHVybiBsYW1iZGEgc2VsZiwgdmFsdWU6IHN1cGVyKHR5cGUoc2VsZiksIHNlbGYpLl9f aW5pdF9fKHZhbHVlLCBjbHMpPGJyPiZndDsgKzxicj4mZ3Q7IGdsb2JhbHMoKVtwdHJfbmFtZV0g PSB0eXBlKHB0cl9uYW1lLCAoUHRyLCksIHs8YnI+Jmd0OyAtICdfX2luaXRfXyc6PGJyPiZndDsg LSBsYW1iZGEgc2VsZiwgdmFsdWU6IHN1cGVyKHR5cGUoc2VsZiksIHNlbGYpLl9faW5pdF9fKHZh bHVlLCBjbHMpPGJyPiZndDsgKyAnX19pbml0X18nOiBtYWtlX2luaXQoY2xzKTxicj4mZ3Q7IH0p PGJyPiZndDs8YnI+Jmd0Ozxicj4mZ3Q7IC1jbGFzcyBDb21tYW5kKG9iamVjdCk6PGJyPiZndDsg LSBkZWYgX19pbml0X18oc2VsZiwgZGVidWdnZXIsIHVudXNlZCk6PGJyPiZndDsgLSBwYXNzPGJy PiZndDsgK2NsYXNzIENvbW1hbmQob2JqZWN0IGlmIGRiZy5MTERCIGVsc2UgZ2RiLkNvbW1hbmQp Ojxicj4mZ3Q7ICsgZGVmIF9faW5pdF9fKHNlbGYsIGRlYnVnZ2VyPU5vbmUsIHVudXNlZD1Ob25l KTo8YnI+Jmd0OyArIGlmIGRiZy5HREI6PGJyPiZndDsgKyAjIFhYWCBGcmFnaWxlOiB0aG91Z2gg aW5pdGlhbGl6YXRpb24gbG9va3MgbGlrZSBhIGNyYXAgYnV0IGl0PGJyPiZndDsgKyAjIHJlc3Bl Y3RzIGJvdGggUHl0aG9uIDIgYW5kIFB5dGhvbiAzIChzZWUgIzQ4MjgpLjxicj4mZ3Q7ICsgZ2Ri LkNvbW1hbmQuX19pbml0X18oc2VsZiwgc2VsZi5jb21tYW5kLCBnZGIuQ09NTUFORF9EQVRBKTxi cj4mZ3Q7PGJyPiZndDsgZGVmIGdldF9zaG9ydF9oZWxwKHNlbGYpOjxicj4mZ3Q7IHJldHVybiBz ZWxmLl9fZG9jX18uc3BsaXRsaW5lcygpWzBdPGJyPiZndDsgQEAgLTI0NSwyMSArNDczLDE1IEBA IGNsYXNzIENvbW1hbmQob2JqZWN0KTo8YnI+Jmd0Ozxicj4mZ3Q7IGRlZiBfX2NhbGxfXyhzZWxm LCBkZWJ1Z2dlciwgY29tbWFuZCwgZXhlX2N0eCwgcmVzdWx0KTo8YnI+Jmd0OyB0cnk6PGJyPiZn dDsgLSBzZWxmLmV4ZWN1dGUoZGVidWdnZXIsIGNvbW1hbmQsIHJlc3VsdCk8YnI+Jmd0OyArIHNl bGYuZXhlY3V0ZShjb21tYW5kKTxicj4mZ3Q7IGV4Y2VwdCBFeGNlcHRpb24gYXMgZTo8YnI+Jmd0 OyBtc2cgPSAnRmFpbGVkIHRvIGV4ZWN1dGUgY29tbWFuZCBge31gOiB7fScuZm9ybWF0KHNlbGYu Y29tbWFuZCwgZSk8YnI+Jmd0OyByZXN1bHQuU2V0RXJyb3IobXNnKTxicj4mZ3Q7PGJyPiZndDsg ZGVmIHBhcnNlKHNlbGYsIGNvbW1hbmQpOjxicj4mZ3Q7IC0gcHJvY2VzcyA9IHRhcmdldC5HZXRQ cm9jZXNzKCk8YnI+Jmd0OyAtIHRocmVhZCA9IHByb2Nlc3MuR2V0U2VsZWN0ZWRUaHJlYWQoKTxi cj4mZ3Q7IC0gZnJhbWUgPSB0aHJlYWQuR2V0U2VsZWN0ZWRGcmFtZSgpPGJyPiZndDsgLTxicj4m Z3Q7IGlmIG5vdCBjb21tYW5kOjxicj4mZ3Q7IHJldHVybiBOb25lPGJyPiZndDsgLTxicj4mZ3Q7 IC0gcmV0ID0gZnJhbWUuRXZhbHVhdGVFeHByZXNzaW9uKGNvbW1hbmQpPGJyPiZndDsgLSByZXR1 cm4gcmV0PGJyPiZndDsgKyByZXR1cm4gZGJnLnRvX3Vuc2lnbmVkKGRiZy5ldmFsKGNvbW1hbmQp KTxicj4mZ3Q7PGJyPiZndDsgQGFiYy5hYnN0cmFjdHByb3BlcnR5PGJyPiZndDsgZGVmIGNvbW1h bmQoc2VsZik6PGJyPiZndDsgQEAgLTI3MCw3ICs0OTIsNyBAQCBjbGFzcyBDb21tYW5kKG9iamVj dCk6PGJyPiZndDsgIiIiPGJyPiZndDs8YnI+Jmd0OyBAYWJjLmFic3RyYWN0bWV0aG9kPGJyPiZn dDsgLSBkZWYgZXhlY3V0ZShzZWxmLCBkZWJ1Z2dlciwgYXJncywgcmVzdWx0KTo8YnI+Jmd0OyAr IGRlZiBleGVjdXRlKHNlbGYsIGFyZ3MpOjxicj4mZ3Q7ICIiIkltcGxlbWVudGF0aW9uIG9mIHRo ZSBjb21tYW5kLjxicj4mZ3Q7IFN1YmNsYXNzZXMgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gaW1w bGVtZW50IHRoZSBsb2dpYyBvZiBhIGdpdmVuPGJyPiZndDsgY29tbWFuZCwgZS5nLiBwcmludGlu ZyBhIHN0YWNrdHJhY2UuIFRoZSBjb21tYW5kIG91dHB1dCBzaG91bGQgYmU8YnI+Jmd0OyBAQCAt Mjc4LDYgKzUwMCwxMSBAQCBjbGFzcyBDb21tYW5kKG9iamVjdCk6PGJyPiZndDsgcHJvcGVybHkg cm91dGVkIHRvIExMREIgZnJvbnRlbmQuIEFueSB1bmhhbmRsZWQgZXhjZXB0aW9uIHdpbGwgYmU8 YnI+Jmd0OyBhdXRvbWF0aWNhbGx5IHRyYW5zZm9ybWVkIGludG8gcHJvcGVyIGVycm9ycy48YnI+ Jmd0OyAiIiI8YnI+Jmd0OyArIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6PGJyPiZn dDsgKyB0cnk6PGJyPiZndDsgKyBzZWxmLmV4ZWN1dGUoYXJnKTxicj4mZ3Q7ICsgZXhjZXB0IEV4 Y2VwdGlvbiBhcyBlOjxicj4mZ3Q7ICsgZGJnLndyaXRlKGUpPGJyPiZndDs8YnI+Jmd0Ozxicj4m Z3Q7IGRlZiBjYXN0KHR5cGVuYW1lLCB2YWx1ZSk6PGJyPiZndDsgQEAgLTI5OSw3NSArNTI2LDM4 IEBAIGRlZiBjYXN0KHR5cGVuYW1lLCB2YWx1ZSk6PGJyPiZndDsgbmFtZSA9IG5hbWVbOi0xXS5z dHJpcCgpPGJyPiZndDsgcG9pbnRlcl90eXBlID0gVHJ1ZTxicj4mZ3Q7PGJyPiZndDsgLSAjIEdl dCB0aGUgbGxkYiB0eXBlIHJlcHJlc2VudGF0aW9uLjxicj4mZ3Q7IC0gdCA9IHRhcmdldC5GaW5k Rmlyc3RUeXBlKG5hbWUpPGJyPiZndDsgKyAjIEdldCB0aGUgaW5mZXJpb3IgdHlwZSByZXByZXNl bnRhdGlvbi48YnI+Jmd0OyArIHQgPSBkYmcuZmluZF90eXBlKG5hbWUpPGJyPiZndDsgaWYgcG9p bnRlcl90eXBlOjxicj4mZ3Q7IC0gdCA9IHQuR2V0UG9pbnRlclR5cGUoKTxicj4mZ3Q7IC08YnI+ Jmd0OyAtIGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6PGJyPiZndDsgLSAjIEludGVnZXIgY2Fz dHMgcmVxdWlyZSBzb21lIGJsYWNrIG1hZ2ljIGZvciBsbGRiIHRvIGJlaGF2ZSBwcm9wZXJseS48 YnI+Jmd0OyAtIGlmIHBvaW50ZXJfdHlwZTo8YnI+Jmd0OyAtIGNhc3RlZCA9IHRhcmdldC5DcmVh dGVWYWx1ZUZyb21BZGRyZXNzKDxicj4mZ3Q7IC0gJ3ZhbHVlJyw8YnI+Jmd0OyAtIGxsZGIuU0JB ZGRyZXNzKHZhbHVlLCB0YXJnZXQpLDxicj4mZ3Q7IC0gdC5HZXRQb2ludGVlVHlwZSgpLDxicj4m Z3Q7IC0gKS5hZGRyZXNzX29mPGJyPiZndDsgLSBlbHNlOjxicj4mZ3Q7IC0gY2FzdGVkID0gdGFy Z2V0LkNyZWF0ZVZhbHVlRnJvbURhdGEoPGJyPiZndDsgLSBuYW1lPSd2YWx1ZScsPGJyPiZndDsg LSBkYXRhPWxsZGIuU0JEYXRhLkNyZWF0ZURhdGFGcm9tSW50KHZhbHVlLCBzaXplPTgpLDxicj4m Z3Q7IC0gdHlwZT10LDxicj4mZ3Q7IC0gKTxicj4mZ3Q7IC0gZWxzZTo8YnI+Jmd0OyAtIGNhc3Rl ZCA9IHZhbHVlLkNhc3QodCk8YnI+Jmd0OyArIHQgPSBkYmcudHlwZV90b19wb2ludGVyX3R5cGUo dCk8YnI+Jmd0OyArPGJyPiZndDsgKyBjYXN0ZWQgPSBkYmcuY2FzdF9pbXBsKHZhbHVlLCB0LCBw b2ludGVyX3R5cGUpPGJyPiZndDs8YnI+Jmd0OyBpZiBpc2luc3RhbmNlKHR5cGVuYW1lLCB0eXBl KTo8YnI+Jmd0OyAtICMgV3JhcCBsbGRiIG9iamVjdCwgaWYgcG9zc2libGU8YnI+Jmd0OyArICMg V3JhcCBpbmZlcmlvciBvYmplY3QsIGlmIHBvc3NpYmxlPGJyPiZndDsgcmV0dXJuIHR5cGVuYW1l KGNhc3RlZCk8YnI+Jmd0OyBlbHNlOjxicj4mZ3Q7IHJldHVybiBjYXN0ZWQ8YnI+Jmd0Ozxicj4m Z3Q7PGJyPiZndDsgLWRlZiBsb29rdXBfZ2xvYmFsKG5hbWUpOjxicj4mZ3Q7IC0gcmV0dXJuIHRh cmdldC5GaW5kRmlyc3RHbG9iYWxWYXJpYWJsZShuYW1lKTxicj4mZ3Q7IC08YnI+Jmd0OyAtPGJy PiZndDsgLWRlZiB0eXBlX21lbWJlcih0eXBlX29iaiwgbmFtZSk6PGJyPiZndDsgLSByZXR1cm4g bmV4dCgoeCBmb3IgeCBpbiB0eXBlX29iai5tZW1iZXJzIGlmIHgubmFtZSA9PSBuYW1lKSwgTm9u ZSk8YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4mZ3Q7IC1kZWYgZmluZF90eXBlKHR5cGVuYW1lKTo8 YnI+Jmd0OyAtIHJldHVybiB0YXJnZXQuRmluZEZpcnN0VHlwZSh0eXBlbmFtZSk8YnI+Jmd0OyAt PGJyPiZndDsgLTxicj4mZ3Q7IGRlZiBvZmZzZXRvZih0eXBlbmFtZSwgbWVtYmVybmFtZSk6PGJy PiZndDsgLSB0eXBlX29iaiA9IGZpbmRfdHlwZSh0eXBlbmFtZSk8YnI+Jmd0OyAtIG1lbWJlciA9 IHR5cGVfbWVtYmVyKHR5cGVfb2JqLCBtZW1iZXJuYW1lKTxicj4mZ3Q7ICsgdHlwZV9vYmogPSBk YmcuZmluZF90eXBlKHR5cGVuYW1lKTxicj4mZ3Q7ICsgbWVtYmVyID0gZGJnLnR5cGVfbWVtYmVy KHR5cGVfb2JqLCBtZW1iZXJuYW1lKTxicj4mZ3Q7IGFzc2VydCBtZW1iZXIgaXMgbm90IE5vbmU8 YnI+Jmd0OyAtIHJldHVybiBtZW1iZXIuR2V0T2Zmc2V0SW5CeXRlcygpPGJyPiZndDsgKyByZXR1 cm4gZGJnLnR5cGVfbWVtYmVyX29mZnNldChtZW1iZXIpPGJyPiZndDs8YnI+Jmd0Ozxicj4mZ3Q7 IGRlZiBzaXplb2YodHlwZW5hbWUpOjxicj4mZ3Q7IC0gdHlwZV9vYmogPSBmaW5kX3R5cGUodHlw ZW5hbWUpPGJyPiZndDsgLSByZXR1cm4gdHlwZV9vYmouR2V0Qnl0ZVNpemUoKTxicj4mZ3Q7ICsg dHlwZV9vYmogPSBkYmcuZmluZF90eXBlKHR5cGVuYW1lKTxicj4mZ3Q7ICsgcmV0dXJuIGRiZy50 eXBlX3NpemVvZl9pbXBsKHR5cGVfb2JqKTxicj4mZ3Q7PGJyPiZndDs8YnI+Jmd0OyBkZWYgdnRv dTY0KHZhbHVlKTo8YnI+Jmd0OyAtIHJldHVybiB2YWx1ZS51bnNpZ25lZCAmYW1wOyAweEZGRkZG RkZGRkZGRkZGRkY8YnI+Jmd0OyArIHJldHVybiBkYmcudG9fdW5zaWduZWQodmFsdWUpICZhbXA7 IDB4RkZGRkZGRkZGRkZGRkZGRjxicj4mZ3Q7PGJyPiZndDs8YnI+Jmd0OyBkZWYgdnRvaSh2YWx1 ZSk6PGJyPiZndDsgLSByZXR1cm4gdmFsdWUuc2lnbmVkPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+ Jmd0OyAtZGVmIGRiZ19ldmFsKGV4cHIpOjxicj4mZ3Q7IC0gcHJvY2VzcyA9IHRhcmdldC5HZXRQ cm9jZXNzKCk8YnI+Jmd0OyAtIHRocmVhZCA9IHByb2Nlc3MuR2V0U2VsZWN0ZWRUaHJlYWQoKTxi cj4mZ3Q7IC0gZnJhbWUgPSB0aHJlYWQuR2V0U2VsZWN0ZWRGcmFtZSgpPGJyPiZndDsgLSByZXR1 cm4gZnJhbWUuRXZhbHVhdGVFeHByZXNzaW9uKGV4cHIpPGJyPiZndDsgLTxicj4mZ3Q7IC08YnI+ Jmd0OyAtIyB9fX0gRGVidWdnZXIgc3BlY2lmaWM8YnI+Jmd0OyArIHJldHVybiBkYmcudG9fc2ln bmVkKHZhbHVlKTxicj4mZ3Q7PGJyPiZndDs8YnI+Jmd0OyBkZWYgZ2N2YWwob2JqKTo8YnI+Jmd0 OyBAQCAtMzkzLDcgKzU4Myw3IEBAIGRlZiBnY2xpc3RsZW4ocm9vdCwgZW5kPTB4MCk6PGJyPiZn dDs8YnI+Jmd0Ozxicj4mZ3Q7IGRlZiBnY3JpbmdsZW4ocm9vdCk6PGJyPiZndDsgLSBpZiBub3Qg Z2NyZWYocm9vdCk6PGJyPiZndDsgKyBpZiBnY3JlZihyb290KSA9PSAwOjxicj4mZ3Q7IHJldHVy biAwPGJyPiZndDsgZWxpZiBnY3JlZihyb290KSA9PSBnY3JlZihnY25leHQocm9vdCkpOjxicj4m Z3Q7IHJldHVybiAxPGJyPiZndDsgQEAgLTQzOSw3ICs2MjksNyBAQCBkZWYgSihnKTo8YnI+Jmd0 OyBKX29mZnNldCA9IG9mZnNldG9mKCdHR19TdGF0ZScsICdKJyk8YnI+Jmd0OyByZXR1cm4gY2Fz dCg8YnI+Jmd0OyBqaXRfU3RhdGVQdHIsPGJyPiZndDsgLSB2dG91NjQoY2FzdCgnY2hhciAqJywg ZykpIC0gZ19vZmZzZXQgKyBKX29mZnNldCw8YnI+Jmd0OyArIGludCh2dG91NjQoY2FzdCgnY2hh ciAqJywgZykpIC0gZ19vZmZzZXQgKyBKX29mZnNldCksPGJyPiZndDsgKTxicj4mZ3Q7PGJyPiZn dDs8YnI+Jmd0OyBAQCAtNDUxLDcgKzY0MSw3IEBAIGRlZiBMKEw9Tm9uZSk6PGJyPiZndDsgIyBs b29rdXAgYSBzeW1ib2wgZm9yIHRoZSBtYWluIGNvcm91dGluZSBjb25zaWRlcmluZyB0aGUgaG9z dCBhcHA8YnI+Jmd0OyAjIFhYWCBGcmFnaWxlOiB0aG91Z2ggdGhlIGxvb3AgaW5pdGlhbGl6YXRp b24gbG9va3MgbGlrZSBhIGNyYXAgYnV0IGl0PGJyPiZndDsgIyByZXNwZWN0cyBib3RoIFB5dGhv biAyIGFuZCBQeXRob24gMy48YnI+Jmd0OyAtIGZvciBsc3RhdGUgaW4gW0xdICsgbGlzdChtYXAo bGFtYmRhIG1haW46IGxvb2t1cF9nbG9iYWwobWFpbiksICg8YnI+Jmd0OyArIGZvciBsc3RhdGUg aW4gW0xdICsgbGlzdChtYXAobGFtYmRhIG1haW46IGRiZy5sb29rdXBfdmFyaWFibGUobWFpbiks ICg8YnI+Jmd0OyAjIEx1YUpJVCBtYWluIGNvcm8gKHNlZSBsdWFqaXQvc3JjL2x1YWppdC5jKTxi cj4mZ3Q7ICdnbG9iYWxMJyw8YnI+Jmd0OyAjIFRhcmFudG9vbCBtYWluIGNvcm8gKHNlZSB0YXJh bnRvb2wvc3JjL2x1YS9pbml0LmgpPGJyPiZndDsgQEAgLTQ1OSw3ICs2NDksNyBAQCBkZWYgTChM PU5vbmUpOjxicj4mZ3Q7ICMgVE9ETzogQWRkIG1vcmU8YnI+Jmd0OyApKSk6PGJyPiZndDsgaWYg bHN0YXRlOjxicj4mZ3Q7IC0gcmV0dXJuIGx1YV9TdGF0ZShsc3RhdGUpPGJyPiZndDsgKyByZXR1 cm4gbHVhX1N0YXRlUHRyKGxzdGF0ZSk8YnI+Jmd0Ozxicj4mZ3Q7PGJyPiZndDsgZGVmIHRvdTMy KHZhbCk6PGJyPiZndDsgQEAgLTUyMyw5ICs3MTMsOSBAQCBkZWYgZnVuY3Byb3RvKGZ1bmMpOjxi cj4mZ3Q7IGRlZiBzdHJkYXRhKG9iaik6PGJyPiZndDsgdHJ5Ojxicj4mZ3Q7IHB0ciA9IGNhc3Qo J2NoYXIgKicsIG9iaiArIDEpPGJyPiZndDsgLSByZXR1cm4gcHRyLnN1bW1hcnk8YnI+Jmd0OyAr IHJldHVybiBkYmcuc3VtbWFyeShwdHIpPGJyPiZndDsgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJv cjo8YnI+Jmd0OyAtIHJldHVybiAiJmx0O2x1YWppdC1sbGRiOiBlcnJvciBvY2N1cmVkIHdoaWxl IHJlbmRlcmluZyBub24tYXNjaWkgc2xvdCZndDsiPGJyPiZndDsgKyByZXR1cm4gIiZsdDtsdWFq aXRfZGJnOiBlcnJvciBvY2N1cmVkIHdoaWxlIHJlbmRlcmluZyBub24tYXNjaWkgc2xvdCZndDsi PGJyPiZndDs8YnI+Jmd0Ozxicj4mZ3Q7IGRlZiBpdHlwZShvKTo8YnI+Jmd0OyBAQCAtNzMwLDEy ICs5MjAsMTIgQEAgZGVmIGZyYW1lX3BjKGZyYW1lbGluayk6PGJyPiZndDs8YnI+Jmd0Ozxicj4m Z3Q7IGRlZiBmcmFtZV9wcmV2bChmcmFtZWxpbmspOjxicj4mZ3Q7IC0gIyBXZSBhcmUgZXZhbHVh dGluZyB0aGUgYGZyYW1lX3BjKGZyYW1lbGluaylbLTFdKWAgd2l0aCBsbGRiJ3M8YnI+Jmd0OyAr ICMgV2UgYXJlIGV2YWx1YXRpbmcgdGhlIGBmcmFtZV9wYyhmcmFtZWxpbmspWy0xXSlgIHdpdGg8 YnI+Jmd0OyAjIFJFUEwsIGJlY2F1c2UgdGhlIGxsZGIgQVBJIGlzIGZhdWx0eSBhbmQgaXQncyBu b3QgcG9zc2libGUgdG8gY2FzdDxicj4mZ3Q7ICMgYSBzdHJ1Y3QgbWVtYmVyIG9mIDMyLWJpdCB0 eXBlIHRvIDY0LWJpdCB0eXBlIHdpdGhvdXQgZ2V0dGluZyBvbnRvPGJyPiZndDsgIyB0aGUgbmV4 dCBwcm9wZXJ0eSBiaXRzLCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgaXQncyBhbiBhY3R1YWwgdmFs dWUsIG5vdDxicj4mZ3Q7ICMgYSBwb2ludGVyIHRvIGl0Ljxicj4mZ3Q7IC0gYmNpbnMgPSB2dG91 NjQoZGJnX2V2YWwoJygoQkNJbnMgKiknICsgc3RyKGZyYW1lX3BjKGZyYW1lbGluaykpICsgJylb LTFdJykpPGJyPiZndDsgKyBiY2lucyA9IHZ0b3U2NChkYmcuZXZhbCgnKChCQ0lucyAqKScgKyBz dHIoZnJhbWVfcGMoZnJhbWVsaW5rKSkgKyAnKVstMV0nKSk8YnI+Jmd0OyByZXR1cm4gZnJhbWVs aW5rIC0gKDEgKyBMSl9GUjIgKyBiY19hKGJjaW5zKSk8YnI+Jmd0Ozxicj4mZ3Q7PGJyPiZndDsg QEAgLTc4OSwxMiArOTc5LDEyIEBAIGRlZiBmcmFtZXMoTCk6PGJyPiZndDs8YnI+Jmd0OyBkZWYg ZHVtcF9mcmFtZWxpbmtfc2xvdF9hZGRyZXNzKGZyKTo8YnI+Jmd0OyByZXR1cm4gJ3tzdGFydDp7 cGFkZGluZ319OntlbmQ6e3BhZGRpbmd9fScuZm9ybWF0KDxicj4mZ3Q7IC0gc3RhcnQ9aGV4KGlu dChmciAtIDEpKSw8YnI+Jmd0OyAtIGVuZD1oZXgoaW50KGZyKSksPGJyPiZndDsgKyBzdGFydD1z dHJ4NjQoZnIgLSAxKSw8YnI+Jmd0OyArIGVuZD1zdHJ4NjQoZnIpLDxicj4mZ3Q7IHBhZGRpbmc9 bGVuKFBBRERJTkcpLDxicj4mZ3Q7ICkgaWYgTEpfRlIyIGVsc2UgJ3thZGRyOntwYWRkaW5nfX0n LmZvcm1hdCg8YnI+Jmd0OyAtIGFkZHI9aGV4KGludChmcikpLDxicj4mZ3Q7IC0gcGFkZGluZz1s ZW4oUEFERElORyksPGJyPiZndDsgKyBhZGRyPXN0cng2NChmciksPGJyPiZndDsgKyBwYWRkaW5n PTIgKiBsZW4oUEFERElORykgKyAxLDxicj4mZ3Q7ICk8YnI+Jmd0Ozxicj4mZ3Q7PGJyPiZndDsg QEAgLTg2Myw3ICsxMDUzLDYgQEAgZGVmIGR1bXBfc3RhY2soTCwgYmFzZT1Ob25lLCB0b3A9Tm9u ZSk6PGJyPiZndDsgbmZyZWVzbG90cz1pbnQoKG1heHN0YWNrIC0gdG9wIC0gOCkgJmd0OyZndDsg MyksPGJyPiZndDsgKSw8YnI+Jmd0OyBdKTxicj4mZ3Q7IC08YnI+Jmd0OyBmb3IgZnJhbWVsaW5r LCBmcmFtZXRvcCBpbiBmcmFtZXMoTCk6PGJyPiZndDsgIyBEdW1wIGFsbCBkYXRhIHNsb3RzIGlu IHRoZSAoZnJhbWVsaW5rLCB0b3ApIGludGVydmFsLjxicj4mZ3Q7IGR1bXAuZXh0ZW5kKFs8YnI+ Jmd0OyBAQCAtOTA0LDkgKzEwOTMsMTEgQEAgdGhlIHR5cGUgYW5kIHNvbWUgaW5mbyByZWxhdGVk IHRvIGl0Ljxicj4mZ3Q7IFdoZXRoZXIgdGhlIHR5cGUgb2YgdGhlIGdpdmVuIGFkZHJlc3MgZGlm ZmVycyBmcm9tIHRoZSBsaXN0ZWQgYWJvdmUsIHRoZW48YnI+Jmd0OyBlcnJvciBtZXNzYWdlIG9j Y3Vycy48YnI+Jmd0OyAnJyc8YnI+Jmd0OyAtIGRlZiBleGVjdXRlKHNlbGYsIGRlYnVnZ2VyLCBh cmdzLCByZXN1bHQpOjxicj4mZ3Q7ICsgY29tbWFuZCA9ICdsai10dic8YnI+Jmd0OyArPGJyPiZn dDsgKyBkZWYgZXhlY3V0ZShzZWxmLCBhcmdzKTo8YnI+Jmd0OyB0dnB0ciA9IFRWYWx1ZVB0cihj YXN0KCdUVmFsdWUgKicsIHNlbGYucGFyc2UoYXJncykpKTxicj4mZ3Q7IC0gcHJpbnQoJ3t9Jy5m b3JtYXQoZHVtcF90dmFsdWUodHZwdHIpKSk8YnI+Jmd0OyArIGRiZy53cml0ZSgne30nLmZvcm1h dChkdW1wX3R2YWx1ZSh0dnB0cikpKTxicj4mZ3Q7PGJyPiZndDs8YnI+Jmd0OyBjbGFzcyBMSlN0 YXRlKENvbW1hbmQpOjxicj4mZ3Q7IEBAIC05MTcsOSArMTEwOCwxMSBAQCBUaGUgY29tbWFuZCBy ZXF1aXJlcyBubyBhcmdzIGFuZCBkdW1wcyBjdXJyZW50IFZNIGFuZCBHQyBzdGF0ZXM8YnI+Jmd0 OyAqIEdDIHN0YXRlOiAmbHQ7UEFVU0V8UFJPUEFHQVRFfEFUT01JQ3xTV0VFUFNUUklOR3xTV0VF UHxGSU5BTElaRXxMQVNUJmd0Ozxicj4mZ3Q7ICogSklUIHN0YXRlOiAmbHQ7SURMRXxBQ1RJVkV8 UkVDT1JEfFNUQVJUfEVORHxBU018RVJSJmd0Ozxicj4mZ3Q7ICcnJzxicj4mZ3Q7IC0gZGVmIGV4 ZWN1dGUoc2VsZiwgZGVidWdnZXIsIGFyZ3MsIHJlc3VsdCk6PGJyPiZndDsgKyBjb21tYW5kID0g J2xqLXN0YXRlJzxicj4mZ3Q7ICs8YnI+Jmd0OyArIGRlZiBleGVjdXRlKHNlbGYsIGFyZ3MpOjxi cj4mZ3Q7IGcgPSBHKEwoTm9uZSkpPGJyPiZndDsgLSBwcmludCgne30nLmZvcm1hdCgnXG4nLmpv aW4oPGJyPiZndDsgKyBkYmcud3JpdGUoJ3t9Jy5mb3JtYXQoJ1xuJy5qb2luKDxicj4mZ3Q7IG1h cChsYW1iZGEgdDogJ3t9IHN0YXRlOiB7fScuZm9ybWF0KCp0KSwgezxicj4mZ3Q7ICdWTSc6IHZt X3N0YXRlKGcpLDxicj4mZ3Q7ICdHQyc6IGdjX3N0YXRlKGcpLDxicj4mZ3Q7IEBAIC05MzYsOCAr MTEyOSwxMCBAQCBUaGUgY29tbWFuZCByZXF1aXJlcyBubyBhcmdzIGFuZCBkdW1wcyB2YWx1ZXMg b2YgTEpfNjQgYW5kIExKX0dDNjQ8YnI+Jmd0OyBjb21waWxlLXRpbWUgZmxhZ3MuIFRoZXNlIHZh bHVlcyBkZWZpbmUgdGhlIHNpemVzIG9mIGhvc3QgYW5kIEdDPGJyPiZndDsgcG9pbnRlcnMgcmVz cGVjdGl2ZWx5Ljxicj4mZ3Q7ICcnJzxicj4mZ3Q7IC0gZGVmIGV4ZWN1dGUoc2VsZiwgZGVidWdn ZXIsIGFyZ3MsIHJlc3VsdCk6PGJyPiZndDsgLSBwcmludCg8YnI+Jmd0OyArIGNvbW1hbmQgPSAn bGotYXJjaCc8YnI+Jmd0OyArPGJyPiZndDsgKyBkZWYgZXhlY3V0ZShzZWxmLCBhcmdzKTo8YnI+ Jmd0OyArIGRiZy53cml0ZSg8YnI+Jmd0OyAnTEpfNjQ6IHtMSl82NH0sIExKX0dDNjQ6IHtMSl9H QzY0fSwgTEpfRFVBTE5VTToge0xKX0RVQUxOVU19Jzxicj4mZ3Q7IC5mb3JtYXQoPGJyPiZndDsg TEpfNjQ9TEpfNjQsPGJyPiZndDsgQEAgLTk2NSw5ICsxMTYwLDExIEBAIFRoZSBjb21tYW5kIHJl cXVpcmVzIG5vIGFyZ3MgYW5kIGR1bXBzIGN1cnJlbnQgR0Mgc3RhdHM6PGJyPiZndDsgKiB3ZWFr OiAmbHQ7bnVtYmVyIG9mIHdlYWsgdGFibGVzICh0byBiZSBjbGVhcmVkKSZndDs8YnI+Jmd0OyAq IG1tdWRhdGE6ICZsdDtudW1iZXIgb2YgdWRhdGF8Y2RhdGEgdG8gYmUgZmluYWxpemVkJmd0Ozxi cj4mZ3Q7ICcnJzxicj4mZ3Q7IC0gZGVmIGV4ZWN1dGUoc2VsZiwgZGVidWdnZXIsIGFyZ3MsIHJl c3VsdCk6PGJyPiZndDsgKyBjb21tYW5kID0gJ2xqLWdjJzxicj4mZ3Q7ICs8YnI+Jmd0OyArIGRl ZiBleGVjdXRlKHNlbGYsIGFyZ3MpOjxicj4mZ3Q7IGcgPSBHKEwoTm9uZSkpPGJyPiZndDsgLSBw cmludCgnR0Mgc3RhdHM6IHtzdGF0ZX1cbntzdGF0c30nLmZvcm1hdCg8YnI+Jmd0OyArIGRiZy53 cml0ZSgnR0Mgc3RhdHM6IHtzdGF0ZX1cbntzdGF0c30nLmZvcm1hdCg8YnI+Jmd0OyBzdGF0ZT1n Y19zdGF0ZShnKSw8YnI+Jmd0OyBzdGF0cz1kdW1wX2djKGcpPGJyPiZndDsgKSk8YnI+Jmd0OyBA QCAtOTgzLDkgKzExODAsMTEgQEAgdGhlIHBheWxvYWQsIHNpemUgaW4gYnl0ZXMgYW5kIGhhc2gu PGJyPiZndDsgKkNhdmVhdCo6IFNpbmNlIFB5dGhvbiAyIHByb3ZpZGVzIG5vIG5hdGl2ZSBVbmlj b2RlIHN1cHBvcnQsIHRoZSBwYXlsb2FkPGJyPiZndDsgaXMgcmVwbGFjZWQgd2l0aCB0aGUgY29y cmVzcG9uZGluZyBlcnJvciB3aGVuIGRlY29kaW5nIGZhaWxzLjxicj4mZ3Q7ICcnJzxicj4mZ3Q7 IC0gZGVmIGV4ZWN1dGUoc2VsZiwgZGVidWdnZXIsIGFyZ3MsIHJlc3VsdCk6PGJyPiZndDsgKyBj b21tYW5kID0gJ2xqLXN0cic8YnI+Jmd0OyArPGJyPiZndDsgKyBkZWYgZXhlY3V0ZShzZWxmLCBh cmdzKTo8YnI+Jmd0OyBzdHJpbmdfcHRyID0gR0NzdHJQdHIoY2FzdCgnR0NzdHIgKicsIHNlbGYu cGFyc2UoYXJncykpKTxicj4mZ3Q7IC0gcHJpbnQoIlN0cmluZzoge2JvZHl9IFt7bGVufSBieXRl c10gd2l0aCBoYXNoIHtoYXNofSIuZm9ybWF0KDxicj4mZ3Q7ICsgZGJnLndyaXRlKCJTdHJpbmc6 IHtib2R5fSBbe2xlbn0gYnl0ZXNdIHdpdGggaGFzaCB7aGFzaH0iLmZvcm1hdCg8YnI+Jmd0OyBi b2R5PXN0cmRhdGEoc3RyaW5nX3B0ciksPGJyPiZndDsgaGFzaD1zdHJ4NjQoc3RyaW5nX3B0ci5o YXNoKSw8YnI+Jmd0OyBsZW49c3RyaW5nX3B0ci5sZW4sPGJyPiZndDsgQEAgLTEwMDMsNyArMTIw Miw5IEBAIFRoZSBjb21tYW5kIHJlY2VpdmVzIGEgR0N0YWIgYWRyZXNzIGFuZCBkdW1wcyB0aGUg dGFibGUgY29udGVudHM6PGJyPiZndDsgKiBIYXNoIHBhcnQgJmx0O2hzaXplJmd0OyBub2Rlczo8 YnI+Jmd0OyAmbHQ7aG5vZGUgcHRyJmd0OzogeyAmbHQ7dHYmZ3Q7IH0gPSZndDsgeyAmbHQ7dHYm Z3Q7IH07IG5leHQgPSAmbHQ7bmV4dCBobm9kZSBwdHImZ3Q7PGJyPiZndDsgJycnPGJyPiZndDsg LSBkZWYgZXhlY3V0ZShzZWxmLCBkZWJ1Z2dlciwgYXJncywgcmVzdWx0KTo8YnI+Jmd0OyArIGNv bW1hbmQgPSAnbGotdGFiJzxicj4mZ3Q7ICs8YnI+Jmd0OyArIGRlZiBleGVjdXRlKHNlbGYsIGFy Z3MpOjxicj4mZ3Q7IHQgPSBHQ3RhYlB0cihjYXN0KCdHQ3RhYiAqJywgc2VsZi5wYXJzZShhcmdz KSkpPGJyPiZndDsgYXJyYXkgPSBtcmVmKFRWYWx1ZVB0ciwgdC5hcnJheSk8YnI+Jmd0OyBub2Rl cyA9IG1yZWYoTm9kZVB0ciwgdC5ub2RlKTxicj4mZ3Q7IEBAIC0xMDE0LDIyICsxMjE1LDIyIEBA IFRoZSBjb21tYW5kIHJlY2VpdmVzIGEgR0N0YWIgYWRyZXNzIGFuZCBkdW1wcyB0aGUgdGFibGUg Y29udGVudHM6PGJyPiZndDsgfTxicj4mZ3Q7PGJyPiZndDsgaWYgbXQ6PGJyPiZndDsgLSBwcmlu dCgnTWV0YXRhYmxlIGRldGVjdGVkOiB7fScuZm9ybWF0KHN0cng2NChtdCkpKTxicj4mZ3Q7ICsg ZGJnLndyaXRlKCdNZXRhdGFibGUgZGV0ZWN0ZWQ6IHt9Jy5mb3JtYXQoc3RyeDY0KG10KSkpPGJy PiZndDs8YnI+Jmd0OyAtIHByaW50KCdBcnJheSBwYXJ0OiB7fSBzbG90cycuZm9ybWF0KGNhcGFj aXR5WydhcGFydCddKSk8YnI+Jmd0OyArIGRiZy53cml0ZSgnQXJyYXkgcGFydDoge30gc2xvdHMn LmZvcm1hdChjYXBhY2l0eVsnYXBhcnQnXSkpPGJyPiZndDsgZm9yIGkgaW4gcmFuZ2UoY2FwYWNp dHlbJ2FwYXJ0J10pOjxicj4mZ3Q7IHNsb3QgPSBhcnJheSArIGk8YnI+Jmd0OyAtIHByaW50KCd7 cHRyfTogW3tpbmRleH1dOiB7dmFsdWV9Jy5mb3JtYXQoPGJyPiZndDsgKyBkYmcud3JpdGUoJ3tw dHJ9OiBbe2luZGV4fV06IHt2YWx1ZX0nLmZvcm1hdCg8YnI+Jmd0OyBwdHI9c3RyeDY0KHNsb3Qp LDxicj4mZ3Q7IGluZGV4PWksPGJyPiZndDsgdmFsdWU9ZHVtcF90dmFsdWUoc2xvdCk8YnI+Jmd0 OyApKTxicj4mZ3Q7PGJyPiZndDsgLSBwcmludCgnSGFzaCBwYXJ0OiB7fSBub2RlcycuZm9ybWF0 KGNhcGFjaXR5WydocGFydCddKSk8YnI+Jmd0OyArIGRiZy53cml0ZSgnSGFzaCBwYXJ0OiB7fSBu b2RlcycuZm9ybWF0KGNhcGFjaXR5WydocGFydCddKSk8YnI+Jmd0OyAjIFNlZSBobWFzayBjb21t ZW50IGluIGxqX29iai5oPGJyPiZndDsgZm9yIGkgaW4gcmFuZ2UoY2FwYWNpdHlbJ2hwYXJ0J10p Ojxicj4mZ3Q7IG5vZGUgPSBub2RlcyArIGk8YnI+Jmd0OyAtIHByaW50KCd7cHRyfToge3sge2tl eX0gfX0gPSZndDsge3sge3ZhbH0gfX07IG5leHQgPSB7bn0nLmZvcm1hdCg8YnI+Jmd0OyArIGRi Zy53cml0ZSgne3B0cn06IHt7IHtrZXl9IH19ID0mZ3Q7IHt7IHt2YWx9IH19OyBuZXh0ID0ge259 Jy5mb3JtYXQoPGJyPiZndDsgcHRyPXN0cng2NChub2RlKSw8YnI+Jmd0OyBrZXk9ZHVtcF90dmFs dWUoVFZhbHVlUHRyKG5vZGUua2V5LmFkZHIpKSw8YnI+Jmd0OyB2YWw9ZHVtcF90dmFsdWUoVFZh bHVlUHRyKG5vZGUudmFsLmFkZHIpKSw8YnI+Jmd0OyBAQCAtMTA2OSw1NiArMTI3MCw3MiBAQCBj b3JvdXRpbmUgZ3Vlc3Qgc3RhY2s6PGJyPiZndDs8YnI+Jmd0OyBJZiBMIGlzIG9tbWl0ZWQgdGhl IG1haW4gY29yb3V0aW5lIGlzIHVzZWQuPGJyPiZndDsgJycnPGJyPiZndDsgLSBkZWYgZXhlY3V0 ZShzZWxmLCBkZWJ1Z2dlciwgYXJncywgcmVzdWx0KTo8YnI+Jmd0OyArIGNvbW1hbmQgPSAnbGot c3RhY2snPGJyPiZndDsgKzxicj4mZ3Q7ICsgZGVmIGV4ZWN1dGUoc2VsZiwgYXJncyk6PGJyPiZn dDsgbHN0YXRlID0gc2VsZi5wYXJzZShhcmdzKTxicj4mZ3Q7IC0gbHN0YXRlX3B0ciA9IGNhc3Qo J2x1YV9TdGF0ZSAqJywgbHN0YXRlKSBpZiBjb3JvIGlzIG5vdCBOb25lIGVsc2UgTm9uZTxicj4m Z3Q7IC0gcHJpbnQoJ3t9Jy5mb3JtYXQoZHVtcF9zdGFjayhMKGxzdGF0ZV9wdHIpKSkpPGJyPiZn dDsgKyBsc3RhdGVfcHRyID0gY2FzdCgnbHVhX1N0YXRlIConLCBsc3RhdGUpIGlmIGxzdGF0ZSBl bHNlIE5vbmU8YnI+Jmd0OyArIGRiZy53cml0ZSgne30nLmZvcm1hdChkdW1wX3N0YWNrKEwobHN0 YXRlX3B0cikpKSk8YnI+Jmd0Ozxicj4mZ3Q7PGJyPiZndDsgLWRlZiByZWdpc3Rlcl9jb21tYW5k cyhkZWJ1Z2dlciwgY29tbWFuZHMpOjxicj4mZ3Q7IC0gZm9yIGNvbW1hbmQsIGNscyBpbiBjb21t YW5kcy5pdGVtcygpOjxicj4mZ3Q7IC0gY2xzLmNvbW1hbmQgPSBjb21tYW5kPGJyPiZndDsgLSBk ZWJ1Z2dlci5IYW5kbGVDb21tYW5kKDxicj4mZ3Q7IC0gJ2NvbW1hbmQgc2NyaXB0IGFkZCAtLW92 ZXJ3cml0ZSAtLWNsYXNzIGx1YWppdF9sbGRiLntjbHN9IHtjbWR9Jzxicj4mZ3Q7IC0gLmZvcm1h dCg8YnI+Jmd0OyAtIGNscz1jbHMuX19uYW1lX18sPGJyPiZndDsgLSBjbWQ9Y2xzLmNvbW1hbmQs PGJyPiZndDsgLSApPGJyPiZndDsgLSApPGJyPiZndDsgLSBwcmludCgne2NtZH0gY29tbWFuZCBp bnRpYWxpemVkJy5mb3JtYXQoY21kPWNscy5jb21tYW5kKSk8YnI+Jmd0OyArTEpfQ09NTUFORFMg PSBbPGJyPiZndDsgKyBMSkR1bXBUVmFsdWUsPGJyPiZndDsgKyBMSlN0YXRlLDxicj4mZ3Q7ICsg TEpEdW1wQXJjaCw8YnI+Jmd0OyArIExKR0MsPGJyPiZndDsgKyBMSkR1bXBTdHJpbmcsPGJyPiZn dDsgKyBMSkR1bXBUYWJsZSw8YnI+Jmd0OyArIExKRHVtcFN0YWNrLDxicj4mZ3Q7ICtdPGJyPiZn dDsgKzxicj4mZ3Q7PGJyPiZndDsgK2RlZiByZWdpc3Rlcl9jb21tYW5kcyhjb21tYW5kcywgZGVi dWdnZXI9Tm9uZSk6PGJyPiZndDsgKyBmb3IgY2xzIGluIGNvbW1hbmRzOjxicj4mZ3Q7ICsgZGJn LmNtZF9pbml0KGNscywgZGVidWdnZXIpPGJyPiZndDsgKyBkYmcud3JpdGUoJ3tjbWR9IGNvbW1h bmQgaW50aWFsaXplZCcuZm9ybWF0KGNtZD1jbHMuY29tbWFuZCkpPGJyPiZndDs8YnI+Jmd0OyAt ZGVmIGNvbmZpZ3VyZShkZWJ1Z2dlcik6PGJyPiZndDsgLSBnbG9iYWwgTEpfNjQsIExKX0dDNjQs IExKX0ZSMiwgTEpfRFVBTE5VTSwgUEFERElORywgTEpfVElTTlVNLCB0YXJnZXQ8YnI+Jmd0OyAt IHRhcmdldCA9IGRlYnVnZ2VyLkdldFNlbGVjdGVkVGFyZ2V0KCk8YnI+Jmd0OyAtIG1vZHVsZSA9 IHRhcmdldC5tb2R1bGVzWzBdPGJyPiZndDsgLSBMSl9EVUFMTlVNID0gbW9kdWxlLkZpbmRTeW1i b2woJ2xqX2xpYl9jaGVja251bWJlcicpIGlzIG5vdCBOb25lPGJyPiZndDs8YnI+Jmd0OyArZGVm IGNvbmZpZ3VyZShkZWJ1Z2dlcj1Ob25lKTo8YnI+Jmd0OyArIGdsb2JhbCBQQURESU5HLCBMSl9U SVNOVU0sIExKX0RVQUxOVU08YnI+Jmd0OyArIGRiZy5zZXR1cF90YXJnZXQoZGVidWdnZXIpPGJy PiZndDsgdHJ5Ojxicj4mZ3Q7IC0gaXJ0eXBlX2VudW0gPSB0YXJnZXQuRmluZEZpcnN0VHlwZSgn SVJUeXBlJykuZW51bV9tZW1iZXJzPGJyPiZndDsgLSBmb3IgbWVtYmVyIGluIGlydHlwZV9lbnVt Ojxicj4mZ3Q7IC0gaWYgbWVtYmVyLm5hbWUgPT0gJ0lSVF9QVFInOjxicj4mZ3Q7IC0gTEpfNjQg PSBtZW1iZXIudW5zaWduZWQgJmFtcDsgMHgxZiA9PSBJUlRfUDY0PGJyPiZndDsgLSBpZiBtZW1i ZXIubmFtZSA9PSAnSVJUX1BHQyc6PGJyPiZndDsgLSBMSl9GUjIgPSBMSl9HQzY0ID0gbWVtYmVy LnVuc2lnbmVkICZhbXA7IDB4MWYgPT0gSVJUX1A2NDxicj4mZ3Q7ICsgIyBUcnkgdG8gcmVtb3Zl IHRoZSBjYWxsYmFjayBhdCBmaXJzdCB0byBub3QgYXBwZW5kIGR1cGxpY2F0ZXMgdG88YnI+Jmd0 OyArICMgZ2RiLmV2ZW50cy5uZXdfb2JqZmlsZSBpbnRlcm5hbCBsaXN0Ljxicj4mZ3Q7ICsgZGJn LmV2ZW50X2Rpc2Nvbm5lY3QobG9hZCk8YnI+Jmd0OyBleGNlcHQgRXhjZXB0aW9uOjxicj4mZ3Q7 IC0gcHJpbnQoJ2x1YWppdF9sbGRiLnB5IGZhaWxlZCB0byBsb2FkOiAnPGJyPiZndDsgLSAnbm8g ZGVidWdnaW5nIHN5bWJvbHMgZm91bmQgZm9yIGxpYmx1YWppdCcpPGJyPiZndDsgLSByZXR1cm48 YnI+Jmd0OyAtPGJyPiZndDsgLSBQQURESU5HID0gJyAnICogbGVuKHN0cng2NCgoVFZhbHVlUHRy KEwoKS5hZGRyKSkpKTxicj4mZ3Q7IC0gTEpfVElTTlVNID0gMHhmZmZlZmZmZiBpZiBMSl82NCBh bmQgbm90IExKX0dDNjQgZWxzZSBMSl9UWydOVU1YJ108YnI+Jmd0OyAtPGJyPiZndDsgLTxicj4m Z3Q7IC1kZWYgX19sbGRiX2luaXRfbW9kdWxlKGRlYnVnZ2VyLCBpbnRlcm5hbF9kaWN0KTo8YnI+ Jmd0OyAtIGNvbmZpZ3VyZShkZWJ1Z2dlcik8YnI+Jmd0OyAtIHJlZ2lzdGVyX2NvbW1hbmRzKGRl YnVnZ2VyLCB7PGJyPiZndDsgLSAnbGotdHYnOiBMSkR1bXBUVmFsdWUsPGJyPiZndDsgLSAnbGot c3RhdGUnOiBMSlN0YXRlLDxicj4mZ3Q7IC0gJ2xqLWFyY2gnOiBMSkR1bXBBcmNoLDxicj4mZ3Q7 IC0gJ2xqLWdjJzogTEpHQyw8YnI+Jmd0OyAtICdsai1zdHInOiBMSkR1bXBTdHJpbmcsPGJyPiZn dDsgLSAnbGotdGFiJzogTEpEdW1wVGFibGUsPGJyPiZndDsgLSAnbGotc3RhY2snOiBMSkR1bXBT dGFjayw8YnI+Jmd0OyAtIH0pPGJyPiZndDsgLSBwcmludCgnbHVhaml0X2xsZGIucHkgaXMgc3Vj Y2Vzc2Z1bGx5IGxvYWRlZCcpPGJyPiZndDsgKyAjIENhbGxiYWNrIGlzIG5vdCBjb25uZWN0ZWQu PGJyPiZndDsgKyBwYXNzPGJyPiZndDsgKzxicj4mZ3Q7ICsgdHJ5Ojxicj4mZ3Q7ICsgIyBEZXRl Y3Qgd2hldGhlciBsaWJsdWFqaXQgb2JqZmlsZSBpcyBsb2FkZWQuPGJyPiZndDsgKyBkYmcuZXZh bCgnbHVhSklUX3NldG1vZGUnKTxicj4mZ3Q7ICsgZXhjZXB0IEV4Y2VwdGlvbjo8YnI+Jmd0OyAr IGRiZy53cml0ZSgnbHVhaml0X2RiZy5weSBpbml0aWFsaXphdGlvbiBpcyBwb3N0cG9uZWQgJzxi cj4mZ3Q7ICsgJ3VudGlsIGxpYmx1YWppdCBvYmpmaWxlIGlzIGxvYWRlZFxuJyk8YnI+Jmd0OyAr ICMgQWRkIGEgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbmV4dCBvYmpmaWxlIGlz IGxvYWRlZC48YnI+Jmd0OyArIGRiZy5ldmVudF9jb25uZWN0KGxvYWQpPGJyPiZndDsgKyByZXR1 cm4gRmFsc2U8YnI+Jmd0OyArPGJyPiZndDsgKyB0cnk6PGJyPiZndDsgKyBkYmcuYXJjaF9pbml0 KCk8YnI+Jmd0OyArIGV4Y2VwdCBFeGNlcHRpb246PGJyPiZndDsgKyBkYmcud3JpdGUoJ0x1YUpJ VCBkZWJ1ZyBleHRlbnNpb24gZmFpbGVkIHRvIGxvYWQ6ICc8YnI+Jmd0OyArICdubyBkZWJ1Z2dp bmcgc3ltYm9scyBmb3VuZCBmb3IgbGlibHVhaml0Jyk8YnI+Jmd0OyArIHJldHVybiBGYWxzZTxi cj4mZ3Q7ICsgcmV0dXJuIFRydWU8YnI+Jmd0OyArPGJyPiZndDsgKzxicj4mZ3Q7ICsjIFhYWDog VGhlIGR1bW15IHBhcmFtZXRlciBpcyBuZWVkZWQgZm9yIHRoaXMgZnVuY3Rpb24gdG88YnI+Jmd0 OyArIyB3b3JrIGFzIGEgZ2RiIGNhbGxiYWNrLjxicj4mZ3Q7ICtkZWYgbG9hZChfPU5vbmUsIGRl YnVnZ2VyPU5vbmUpOjxicj4mZ3Q7ICsgaWYgY29uZmlndXJlKGRlYnVnZ2VyKTo8YnI+Jmd0OyAr IHJlZ2lzdGVyX2NvbW1hbmRzKExKX0NPTU1BTkRTLCBkZWJ1Z2dlcik8YnI+Jmd0OyArIGRiZy53 cml0ZSgnTHVhSklUIGRlYnVnIGV4dGVuc2lvbiBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkJyk8YnI+ Jmd0OyArPGJyPiZndDsgKzxicj4mZ3Q7ICtkZWYgX19sbGRiX2luaXRfbW9kdWxlKGRlYnVnZ2Vy LCBfPU5vbmUpOjxicj4mZ3Q7ICsgbG9hZChOb25lLCBkZWJ1Z2dlcik8YnI+Jmd0OyArPGJyPiZn dDsgKzxicj4mZ3Q7ICtpZiBkYmcuR0RCOjxicj4mZ3Q7ICsgbG9hZCgpPC9kaXY+PC9kaXY+PC9k aXY+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+Jm5ic3A7PC9kaXY+PC9CT0RZPjwvSFRN TD4K ----ALT--b12838Beb1D38E5b91b1752f6Ec8C8441701871100--