# smd_slimbox 0.210 # Image gallery lightbox wrapper using Christophe Beyl's Slimbox # Stef Dawson # http://stefdawson.com # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTE6InNtZF9zbGltYm94IjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjE6Imh0dHA6Ly9zdGVmZGF3c29uLmNvbSI7czo3OiJ2ZXJzaW9uIjtzOjU6IjAuMjEwIjtzOjExOiJkZXNjcmlwdGlvbiI7czo2MjoiSW1hZ2UgZ2FsbGVyeSBsaWdodGJveCB3cmFwcGVyIHVzaW5nIENocmlzdG9waGUgQmV5bCdzIFNsaW1ib3giO3M6NDoiaGVscCI7czozNTQ0OiI8c3R5bGU+DQpjb2RlIHtjb2xvcjogIzIwNDY2Zn0NCnByZSB7cGFkZGluZzogMC41ZW0gMWVtOyBiYWNrZ3JvdW5kOiAjZWVlOyBib3JkZXI6IDFweCBkYXNoZWQgI2NjYzt9DQpoMSwgaDIsIGgzLCBoMyBjb2RlIHtmb250LWZhbWlseTogc2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6IGJvbGQ7fQ0KaDEsIGgyLCBoMyB7bWFyZ2luLWxlZnQ6IC0xZW07fQ0KaDIsIGgzIHttYXJnaW4tdG9wOiAyZW07fQ0KaDEge2ZvbnQtc2l6ZTogM2VtO30NCmgyIHtmb250LXNpemU6IDJlbTt9DQpoMyB7Zm9udC1zaXplOiAxLjVlbTt9DQpsaSBhIGNvZGUge2ZvbnQtd2VpZ2h0OiBub3JtYWw7fQ0KLnJlcXVpcmVkLCAud2FybmluZyB7Y29sb3I6cmVkO30NCiNlZ3RhYiB0ZCwjZWd0YWIgdGgge3BhZGRpbmc6LjdlbTsgYm9yZGVyOjFweCBzb2xpZCAjODg4O3RleHQtYWxpZ246Y2VudGVyO30NCjwvc3R5bGU+DQo8aDEgaWQ9InRvcCI+c21kX3NsaW1ib3g8L2gxPg0KPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNhZ2UsIGJ1Z3MsIGZlYXR1cmVzIGV0YywgcGxlYXNlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yMDcxNCI+dmlzaXQgdGhlIGZvcnVtIHRocmVhZDwvYT4uIEZvciBvdGhlciBzb2Z0d2FyZSBieSBtZSwgb3IgdG8gbWFrZSBhIGRvbmF0aW9uLCBzZWUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT48L3A+DQo8cCBpZD0ic21kbGliIiBjbGFzcz0icmVxdWlyZWQiPlJlcXVpcmVzIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvc21kX2xpYl92MC4zLnR4dCI+c21kX2xpYiB2MC4zPC9hPiB0byBiZSBpbnN0YWxsZWQgYW5kIGFjdGl2YXRlZC48cD4NCg0KPGgyIGlkPSJjb250ZW50cyI+Q29udGVudHM8L2gyPg0KPHVsPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCNvdmVydmlldyI+T3ZlcnZpZXc8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc21kX3NsaW1ib3gjaW5zdGFsbCI+SW5zdGFsbGF0aW9uPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I2luYyI+TG9hZGluZyBpbmNsdWRlZCBmaWxlczogc21kX3NsaW1ib3hfaW5jPC9hPg0KPHVsPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCNqc2RpciI+anNkaXIgYW5kIGNzc2RpcjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCNzY3JpcHRzIj5zY3JpcHRzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I3NraXAiPnNraXA8L2E+PC9saT4NCjwvdWw+PC9saT4NCjxsaT48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc21kX3NsaW1ib3gjc2xpbWJveCI+VGhlIHBsdWdpbjogc21kX3NsaW1ib3g8L2E+DQo8dWw+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I2NhdGVnb3J5Ij5jYXRlZ29yeTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCNzdWJjYXRzIj5zdWJjYXRzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I2NhdGxhYmVsIj5jYXRsYWJlbDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCNpbWFnZWlkIj5pbWFnZWlkPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I2ltYWdlY2FwdGlvbiI+aW1hZ2VjYXB0aW9uPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I3RodW1iIj50aHVtYjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCNsaW1pdCI+bGltaXQ8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc21kX3NsaW1ib3gjbWF4bGltaXQiPm1heGxpbWl0PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I29yZGVyYnkiPm9yZGVyYnk8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc21kX3NsaW1ib3gjc2hvd3BhZ2VsaW5rcyI+c2hvd3BhZ2VsaW5rczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCNnYWxsZXJ5aWQiPmdhbGxlcnlpZDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCN0aHVtYnNpemUiPnRodW1ic2l6ZTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCN0aHVtYnRleHQiPnRodW1idGV4dDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCNwYXJhbWRlbGltIj5wYXJhbWRlbGltPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I3ByZXZsYWJlbCI+cHJldmxhYmVsPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I25leHRsYWJlbCI+bmV4dGxhYmVsPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I3dyYXB0YWciPndyYXB0YWc8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc21kX3NsaW1ib3gjY2VsbGNsYXNzIj5jZWxsY2xhc3M8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc21kX3NsaW1ib3gjdGh1bWJ0ZXh0Y2xhc3MiPnRodW1idGV4dGNsYXNzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I25hdmNsYXNzIj5uYXZjbGFzczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCNwcmV2Y2xhc3MiPnByZXZjbGFzczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCNuZXh0Y2xhc3MiPm5leHRjbGFzczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfc2xpbWJveCNsaWJjaGVjayI+bGliY2hlY2s8L2E+PC9saT4NCjwvdWw+PC9saT4NCjxsaT48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc21kX3NsaW1ib3gjZXhhbXBsZXMiPkV4YW1wbGVzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I3N0eWxlIj5TdHlsaW5nPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3NtZF9zbGltYm94I2NyZWRpdHMiPkNyZWRpdHM8L2E+PC9saT4NCjwvdWw+IjtzOjQ6ImNvZGUiO3M6MjE0NTc6Ii8vIHYwLjEgICBJbml0aWFsIHB1YmxpYyByZWxlYXNlDQovLyB2MC4xMSBBZGRlZCAhY2F0ZWdvcnkgc3VwcG9ydA0KLy8gdjAuMTIgQWRkZWQgdGV4dHBvcyBvcHRpb24gKHRoYW5rcyBsZWUpIGFuZCBpbWFnZWlkIG9wdGlvbiAodGhhbmtzIHdvdWFyZW4pDQovLyB2MC4yICAganMgYW5kIGNzcyBjYW4gbm93IGJlIGxvYWRlZCBlbHNld2hlcmUgKHRoYW5rcyBqc3R1YmJzKS4gQWRkZWQgd3JhcHRhZyBhbmQgY2hhbmdlZCBkZWZhdWx0cyB0byBtYWtlIG91dHB1dCBsZXNzIGxpa2UgdGFnLXNvdXAgKHRoYW5rcyB3b3VhcmVuKQ0KLy8gdjAuMjEgQWRkZWQgb3JkZXJieT0iZml4ZWQiIHRvIGFsbG93ZWQgZml4ZWQgaW1hZ2VpZCBvcmRlcmluZyAodGhhbmtzIGxlZSkuICR3aGVyZSB3YXJuaW5nIHNxdWFzaGVkICh0aGFua3MgYmVuamlib3QpDQovLyB2MC4yMiBOb3cgdXNlcyBzbWRfbGliIGFuZCBzdWJjYXRzLiBBbHNvIE1MUChNdWx0aS1saW5ndWFsKS1hd2FyZS4NCi8vIHYwLjIzIEZpeGVkIG9yZGVyYnkgd2hlbiB1c2luZyByYW5kb20gKHRoYW5rcyBtcmRhbGUpIGFuZCBhZGRlZCBhYmlsaXR5IHRvIG92ZXJyaWRlIG1heGxpbWl0DQovLyB2MC4yNCBBZGRlZCBsaWJjaGVjayAodGhhbmtzIHBhcHVhc3MpLiBOdW1lcmljIHJhbmdlcyBub3cgYWxsb3dlZCBmb3IgSURzIChzbWRfbGliKS4gRml4ZWQgZW1wdHkgZmllbGQvaW1hZ2VpZCBuZWdhdGlvbiBidWdzLiBGaXhlZCBuZXh0L3ByZXYgYnV0dG9ucyBmb3IgTUxQLg0KLy8gdjAuMjRiIEZpeGVkIHBhZ2luZyBpbiBzdWJkaXJlY3RvcnkgaW5zdGFsbGF0aW9ucyAodGhhbmtzIHVsdHJhbWVnYSBhbmQgUXdlc3QpDQovLyB2MC4yNSBFeHRlbmRlZCBncm91cG5hbWUgKHRoYW5rcyBbQXhlbF0pDQovLyB2MC4yNWEgQnVuZGxlZCBsYXRlc3QgdmVyc2lvbiBvZiBzbGltYm94IGluIHRoZSBwYWNrYWdlLiBNYWRlIHRoZSBkb2NzIGVhc2llciB0byByZWFkLg0KLy8gdjAuMjYgQWRkZWQgdHJ1ZSBtdWx0aXBsZSBnYWxsZXJ5IHN1cHBvcnQgKHRoYW5rcyB3aGVhdGljdXMpDQovLyB2MC4yNyBBZGRlZCB0aHVtYiAodGhhbmtzIHByb2dyZTU1KQ0KLy8gdjAuMjggQWRkZWQgaW1hZ2VjYXB0aW9uICh0aGFua3MgQWRhbV9WKQ0KLy8gdjAuMjkgQWRkZWQgdGh1bWJzaXplICh0aGFua3MgU2ltYW5laykNCi8vIHYwLjI5YSBGaXhlZCB1bmRlZmluZWQgaW5kZXggd2FybmluZ3MgKHRoYW5rcyBBbWJpdGlvdXNsZW1vbikNCi8vIHYwLjI5YiBGaXhlZCB0aGUgZml4IGZyb20gdjAuMjQgcmVnYXJkaW5nIGFuIFNRTCBlcnJvciBpZiB0aGUgY2F0ZWdvcnkgaXMgbm90IHNldCB3aGVuIHVzaW5nID9jICh0aGFua3MgTXIuU21pdGgpLiBBbHNvIGZpeGVkICdweCcgaW4gdGh1bWJzaXplICh0aGFua3Mgcm9iaW43NDYpDQovLyB2MC4yMTAgVXNlcyBzbWRfbGliIHYwLjMuIEludGVnZXIgcmFuZ2VzIG5vdyBvbmx5IGFsbG93ZWQgaW4gaW1hZ2VpZC4gQWRkZWQgdGh1bWJ0ZXh0L3RodW1idGV4dGNsYXNzL3BhcmFtZGVsaW0uIERlcHJlY2F0ZWQgc2hvd2FsdC9zaG93Y2FwdGlvbi9hbHRjbGFzcy9jYXB0aW9uY2xhc3MvdGV4dHBvcw0KDQpyZXF1aXJlX3BsdWdpbignc21kX2xpYicpOw0KZ2xvYmFsICRzbWRfc2JveExhbmcsICRzbWRfc2JveF9saWJzOw0KDQovLyBNTFAgc3VwcG9ydA0KJHNtZF9zYm94U3RyID0gYXJyYXkoDQoJJ2luY2VycicgPT4gJ0lmIHVzaW5nIHRoZSBzY3JpcHRzIG9wdGlvbiwgc3BlY2lmeSB1cCB0byB0aHJlZSByZXF1aXJlZCBzY3JpcHRzIGluIHRoaXMgb3JkZXI6ICZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIHNjcmlwdHM9Im1vb3Rvb2xzSlNMb2NhdGlvbiwgc2xpbWJveEpTTG9jYXRpb24sIHNsaW1ib3hDU1NMb2NhdGlvbiIgLyZndDsuIElmIGFueSBwb3NpdGlvbnMgYXJlIGxlZnQgZW1wdHksIHRoZSBtaXNzaW5nIHNjcmlwdHMgbXVzdCBiZSBzdXBwbGllZCB2aWEgdGhlIGpzZGlyL2Nzc2RpciBvcHRpb25zLCBvciBsb2FkZWQgZXh0ZXJuYWxseSBhbmQgdG9sZCB0byBza2lwIHRoaXMgc3RlcC4gVGhlIHRocmVlIHZhbHVlcyBjYW4gZWl0aGVyIGJlIGEgZnVsbCBYSFRNTCBzdHJpbmcgKGUuZy4gYXMgcmV0dXJuZWQgYnkgdHhwOnN0bV9qYXZhc2NyaXB0IG9yIHR4cDpjc3MsIGFsdGhvdWdoIHRoZXkgbWF5IG5vdCB3b3JrIGRpcmVjdGx5IHdpdGhpbiB0aGUgdGFnOyBzZWUgdGhlIGRvY3MpIG9yIHNpbXBseSBwYXRocyB0byB0aGUgZmlsZXMuIE5vdGUgdGhhdCBubyB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZCB0byBjaGVjayBpZiB0aGUgZmlsZXMgZXhpc3QuJywNCgknbm9pbmMnID0+ICdSZXF1aXJlZCBsaWJyYXJpZXMgbm90IGxvYWRlZC4gQ2FsbCAmbHQ7dHhwOnNtZF9zbGltYm94X2luYyAvJmd0OyBpbiB0aGUgJmx0O2hlYWQmZ3Q7IG9mIHRoaXMgcGFnZS4nLA0KCSduZXh0X2xibCcgPT4gJ05leHQnLA0KCSdwcmV2X2xibCcgPT4gJ1ByZXYnLA0KKTsNCg0KJHNtZF9zYm94TGFuZyA9IG5ldyBzbWRfTUxQKCdzbWRfc2xpbWJveCcsICdzbWRfc2JveCcsICRzbWRfc2JveFN0cik7DQoNCi8vIFVzZSB0aGlzIHRvIGluY2x1ZGUgdGhlIGxpYnJhcmllcyBpbiB0aGUgPGhlYWQ+IHNlY3Rpb24gb2YgdGhlIHBhZ2UNCmZ1bmN0aW9uIHNtZF9zbGltYm94X2luYygkYXR0cykgew0KCWdsb2JhbCAkc21kX3Nib3hfbGlicywgJHNtZF9zYm94TGFuZzsNCg0KCWlmIChpc19hcnJheSgkYXR0cykpIGV4dHJhY3QoJGF0dHMpOw0KDQoJLy8gRnVuY3Rpb24gb3B0aW9ucw0KCSRqc2RpciA9IGlzc2V0KCRqc2RpcikgPyBkb1NsYXNoKCRqc2RpcikgOiAnJzsNCgkkY3NzZGlyID0gaXNzZXQoJGNzc2RpcikgPyBkb1NsYXNoKCRjc3NkaXIpIDogJyc7DQoJJHNjcmlwdHMgPSBpc3NldCgkc2NyaXB0cykgPyAkc2NyaXB0cyA6ICcnOw0KCSRza2lwID0gaXNzZXQoJHNraXApID8gJHNraXAgOiAiMCI7DQoNCgkkbW9kc1JlcXVpcmVkID0gMzsNCgkkbW9kc0xvYWRlZCA9IDA7DQoJJG91dFN0ciA9ICcnOw0KDQoJaWYgKCRza2lwID4gMCkgew0KCQkkbW9kc0xvYWRlZCA9ICRza2lwOw0KCX0NCg0KCS8vIEluY2x1ZGUgdGhlIGpzIGxpYnMgaWYgcmVxdWlyZWQNCglpZiAoJGpzZGlyICE9ICcnKSB7DQoJCSRvdXRTdHIgLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgLiRqc2Rpci4gJy9tb290b29scy5qcyI+PC9zY3JpcHQ+Jy5uOw0KCQkkb3V0U3RyIC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInIC4kanNkaXIuICcvc2xpbWJveC5qcyI+PC9zY3JpcHQ+Jy5uOw0KCQkkbW9kc0xvYWRlZCArPSAyOw0KCX0NCg0KCS8vIEZpbmQgd2hpY2ggc2NyaXB0cyB0byBhdXRvLWxvYWQNCglpZiAoKCRzY3JpcHRzICE9ICcnKSAmJiAoJG1vZHNMb2FkZWQgPCAkbW9kc1JlcXVpcmVkKSkgew0KCQkkbW9kc0xpc3QgPSBwcmVnX3NwbGl0KCcvWyxdKy8nLCRzY3JpcHRzLCRtb2RzUmVxdWlyZWQpOw0KCQkkanNwcmVmaXggPSAiPHNjcmlwdCI7DQoJCSRjc3NwcmVmaXggPSAiPGxpbmsiOw0KCQkkdHhwcHJlZml4ID0gIjx0eHAiOw0KCQlmb3JlYWNoICgkbW9kc0xpc3QgYXMgJGZpbGVvYmopIHsNCgkJCSRmaWxlb2JqID0gdHJpbSgkZmlsZW9iaik7DQoJCQlpZiAoJGZpbGVvYmogPT0gJycpIHsNCgkJCQkkbW9kc0xvYWRlZC0tOw0KCQkJfSBlbHNlIGlmIChzdWJzdHIoJGZpbGVvYmosIDAsIHN0cmxlbigkanNwcmVmaXgpKSA9PT0gJGpzcHJlZml4KSB7DQoJCQkJJG91dFN0ciAuPSAkZmlsZW9iai5uOw0KCQkJfSBlbHNlIGlmIChzdWJzdHIoJGZpbGVvYmosIDAsIHN0cmxlbigkY3NzcHJlZml4KSkgPT09ICRjc3NwcmVmaXgpIHsNCgkJCQkkb3V0U3RyIC49ICRmaWxlb2JqLm47DQoJCQl9IGVsc2UgaWYgKHN1YnN0cigkZmlsZW9iaiwgMCwgc3RybGVuKCR0eHBwcmVmaXgpKSA9PT0gJHR4cHByZWZpeCkgew0KCQkJCSRvdXRTdHIgLj0gcGFyc2UoJGZpbGVvYmopOw0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoJG1vZHNMb2FkZWQgPCAyKSB7DQoJCQkJCSRvdXRTdHIgLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgLiRmaWxlb2JqLiAnIj48L3NjcmlwdD4nLm47DQoJCQkJfSBlbHNlIHsNCgkJCQkJJG91dFN0ciAuPSAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSInIC4kZmlsZW9iai4gJyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iIC8+Jy5uOw0KCQkJCX0NCgkJCX0NCgkJCSRtb2RzTG9hZGVkKys7DQoJCX0NCgl9DQoNCgkvLyBJbmNsdWRlIHRoZSBjc3MgZmlsZSBpZiByZXF1aXJlZA0KCWlmICgkY3NzZGlyICE9ICcnKSB7DQoJCSRvdXRTdHIgLj0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJyAuJGNzc2Rpci4gJy9zbGltYm94LmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iIC8+Jy5uOw0KCQkkbW9kc0xvYWRlZCsrOw0KCX0NCg0KCS8vIFNldCB0aGUgZmxhZyB0byBzYXkgdGhlIGxpYnMgYXJlIG9rLiBTaGFtZSB0aGVyZSdzIG5vIGVhc3kgcHJvdmlzaW9uIGZvcg0KCS8vIGNoZWNraW5nIHRoZSBmaWxlcyBhY3R1YWxseSBleGlzdCBhdCB0aGUgZ2l2ZW4gbG9jYXRpb25zLCBidXQgaGV5DQoJaWYgKCRtb2RzTG9hZGVkID09ICRtb2RzUmVxdWlyZWQpIHsNCgkJJHNtZF9zYm94X2xpYnMgPSB0cnVlOw0KCX0gZWxzZSB7DQoJCSRzbWRfc2JveF9saWJzID0gZmFsc2U7DQoJCSRvdXRTdHIgPSAkc21kX3Nib3hMYW5nLT5nVHh0KCdpbmNlcnInKS5uOw0KCX0NCg0KCXJldHVybiAkb3V0U3RyOw0KfQ0KDQpmdW5jdGlvbiBzbWRfc2xpbWJveCgkYXR0cykgew0KCWdsb2JhbCAkcHJldGV4dCwgJHRoaXNhcnRpY2xlLCAkaW1nX2RpcjsNCglnbG9iYWwgJHNtZF9zYm94X2xpYnMsICRzbWRfc2JveExhbmc7DQoNCglpZiAoaXNfYXJyYXkoJGF0dHMpKSBleHRyYWN0KCRhdHRzKTsNCgkkY2F0aWRvcHRzID0gKGlzc2V0KCRjYXRlZ29yeSkgfHwgaXNzZXQoJGltYWdlaWQpKSA/IHRydWUgOiBmYWxzZTsNCg0KCS8vIFBsdWdpbiBvcHRpb25zDQoJJGxpYmNoZWNrID0gaXNzZXQoJGxpYmNoZWNrKSA/ICRsaWJjaGVjazogIjEiOw0KCSRwYXJhbWRlbGltID0gaXNzZXQoJHBhcmFtZGVsaW0pID8gJHBhcmFtZGVsaW0gOiAiOiI7DQoJJGltYWdlaWQgPSBpc3NldCgkaW1hZ2VpZCkgPyBkb1NsYXNoKCRpbWFnZWlkKSA6ICcnOw0KCSRjYXRlZ29yeSA9IGlzc2V0KCRjYXRlZ29yeSkgPyBkb1NsYXNoKCRjYXRlZ29yeSkgOiAoKCRpbWFnZWlkPT0iIikgPyAkcHJldGV4dFsnYyddOiAnJyk7DQoJJHN1YmNhdHMgPSBpc3NldCgkc3ViY2F0cykgPyB0cnVlIDogZmFsc2U7DQoJJGNhdGxhYmVsID0gaXNzZXQoJGNhdGxhYmVsKSA/ICRjYXRsYWJlbDogImFydGljbGUtIjsNCgkkZ3JvdXBuYW1lID0gaXNzZXQoJGdyb3VwbmFtZSkgPyAkZ3JvdXBuYW1lOiAic21kIjsNCgkkdGh1bWIgPSBpc3NldCgkdGh1bWIpID8gdHJ1ZSA6IGZhbHNlOw0KCSRtYXhsaW1pdCA9IGlzc2V0KCRtYXhsaW1pdCkgPyAkbWF4bGltaXQ6ICI5OTk5OSI7DQoJJGxpbWl0ID0gaXNzZXQoJGxpbWl0KSA/ICRsaW1pdDogIjAiOw0KCSRvcmRlcmJ5ID0gaXNzZXQoJG9yZGVyYnkpID8gJG9yZGVyYnk6ICJjYXRlZ29yeSI7DQoJJHNob3dwYWdlbGlua3MgPSBpc3NldCgkc2hvd3BhZ2VsaW5rcykgPyAkc2hvd3BhZ2VsaW5rczogIjEiOw0KCSRnYWxsZXJ5aWQgPSBpc3NldCgkZ2FsbGVyeWlkKSA/ICRnYWxsZXJ5aWQ6ICI/NDo2IjsNCgkkdGh1bWJzaXplID0gaXNzZXQoJHRodW1ic2l6ZSkgPyAkdGh1bWJzaXplIDogIiI7DQoJJHByZXZsYWJlbD0gaXNzZXQoJHByZXZsYWJlbCkgPyAkcHJldmxhYmVsOiAkc21kX3Nib3hMYW5nLT5nVHh0KCdwcmV2X2xibCcpOw0KCSRuZXh0bGFiZWw9IGlzc2V0KCRuZXh0bGFiZWwpID8gJG5leHRsYWJlbDogJHNtZF9zYm94TGFuZy0+Z1R4dCgnbmV4dF9sYmwnKTsNCgkkaW1hZ2VjYXB0aW9uID0gaXNzZXQoJGltYWdlY2FwdGlvbikgPyAkaW1hZ2VjYXB0aW9uOiAiP2NhcHRpb24iOw0KCSR0aHVtYnRleHQgPSBpc3NldCgkdGh1bWJ0ZXh0KSA/ICR0aHVtYnRleHQgOiAiIjsNCgkkc2hvd2NhcHRpb24gPSBpc3NldCgkc2hvd2NhcHRpb24pID8gJHNob3djYXB0aW9uOiAiMCI7IC8vIERFUFJFQ0FURUQNCgkkc2hvd2FsdCA9IGlzc2V0KCRzaG93YWx0KSA/ICRzaG93YWx0OiAiMCI7IC8vIERFUFJFQ0FURUQNCgkkdGV4dHBvcyA9IGlzc2V0KCR0ZXh0cG9zKSA/ICR0ZXh0cG9zOiAiYmVsb3ciOyAvLyBERVBSRUNBVEVEDQoJJHdyYXB0YWcgPSBpc3NldCgkd3JhcHRhZykgPyAkd3JhcHRhZzogIiI7DQoJJGNlbGxjbGFzcyA9IGlzc2V0KCRjZWxsY2xhc3MpID8gJGNlbGxjbGFzczogIiI7DQoJJGltZ2NsYXNzID0gaXNzZXQoJGltZ2NsYXNzKSA/ICRpbWdjbGFzczogIiI7DQoJJG5hdmNsYXNzID0gaXNzZXQoJG5hdmNsYXNzKSA/ICRuYXZjbGFzczogIiI7DQoJJHByZXZjbGFzcyA9IGlzc2V0KCRwcmV2Y2xhc3MpID8gJHByZXZjbGFzczogInNtZF9zbGltYm94X3ByZXYiOw0KCSRuZXh0Y2xhc3MgPSBpc3NldCgkbmV4dGNsYXNzKSA/ICRuZXh0Y2xhc3M6ICJzbWRfc2xpbWJveF9uZXh0IjsNCgkkY2FwdGlvbmNsYXNzID0gaXNzZXQoJGFsdGNsYXNzKSA/ICRhbHRjbGFzcyA6IChpc3NldCgkY2FwdGlvbmNsYXNzKSA/ICRjYXB0aW9uY2xhc3M6ICIiKTsgLy8gREVQUkVDQVRFRA0KCSR0aHVtYnRleHRjbGFzcyA9IGlzc2V0KCR0aHVtYnRleHRjbGFzcykgPyAkdGh1bWJ0ZXh0Y2xhc3MgOiAkY2FwdGlvbmNsYXNzOw0KDQoJJGZpeGVkT3JkZXIgPSBmYWxzZTsNCgkkZ2FsbElEID0gIiI7DQoJJGZpZWxkTWFwID0gYXJyYXkoIm5hbWUiID0+ICJuYW1lIiwNCgkJCQkJCQkiaWQiID0+ICJpZCIsDQoJCQkJCQkJImFsdCIgPT4gImFsdCIsDQoJCQkJCQkJImNhcHRpb24iID0+ICJjYXB0aW9uIiwNCgkJCQkJCQkiY2F0ZWdvcnkiID0+ICJjYXRlZ29yeSIsDQoJCQkJCQkJImF1dGhvciIgPT4gImF1dGhvciIsDQoJCQkJCQkJImRhdGUiID0+ICJkYXRlIiwNCgkJCQkJCQkiZXh0IiA9PiAiZXh0IiwNCgkJCQkJCQkidyIgPT4gIndpZHRoIiwNCgkJCQkJCQkiaCIgPT4gImhlaWdodCIpOw0KCSRzaG93TG9jcyA9IGFycmF5KCJiZWxvdyIsImFib3ZlIiwiYWZ0ZXIiLCJiZWZvcmUiKTsNCgkkdGh1bWJob2xkZXIgPSAiOjpTQk9YX1JFUEw6OiI7DQoNCgkvLyBUaGUgZ2FsbGVyeSBpZGVudGlmaWVyIGlzIHVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgbmV4dC9wcmV2IHRodW1icGFnZSBsaW5rcw0KCWlmICgkZ2FsbGVyeWlkID09ICIiIHx8IHN1YnN0cigkZ2FsbGVyeWlkLDAsMSkgPT0gIj8iKSB7DQoJCS8vIEdlbmVyYXRlIGEgdW5pcXVlIElEIGZvciB0aGlzIGdhbGxlcnkgaW5zdGFuY2UNCgkJJGdhbGxUbXAgPSBtZDUoJGNhdGVnb3J5LiRpbWFnZWlkLiRvcmRlcmJ5LiRsaW1pdC4kbWF4bGltaXQuJHdyYXB0YWcpOw0KCQlsaXN0KCRnYWxsTGVuLCAkZ2FsbFNraXApID0gZXhwbG9kZSgiOiIsIHN1YnN0cigkZ2FsbGVyeWlkLDEpKTsNCgkJJGdhbGxMZW4gPSAgKGVtcHR5KCRnYWxsTGVuKSkgPyAiNCIgOiAkZ2FsbExlbjsNCgkJJGdhbGxTa2lwID0gIChlbXB0eSgkZ2FsbFNraXApKSA/ICIxIiA6ICRnYWxsU2tpcDsNCgkJZm9yICgkaWR4ID0gMCwgJGNudCA9IDA7ICRjbnQgPCAkZ2FsbExlbjsgJGNudCsrLCAkaWR4ID0gKCgkaWR4KyRnYWxsU2tpcCkgJSBzdHJsZW4oJGdhbGxUbXApKSkgew0KCQkJJGdhbGxJRCAuPSAkZ2FsbFRtcFskaWR4XTsNCgkJfQ0KCX0gZWxzZSB7DQoJCSRnYWxsSUQgPSAkZ2FsbGVyeWlkOw0KCX0NCg0KCS8vIE1haW4gY29kZSBib2R5DQoJaWYgKCgkbGliY2hlY2sgPT0gMSkgJiYgKCRzbWRfc2JveF9saWJzID09IGZhbHNlKSkgew0KCQkkb3V0U3RyID0gJHNtZF9zYm94TGFuZy0+Z1R4dCgnbm9pbmMnKTsNCgl9IGVsc2Ugew0KCQkvLyBUaGUgZGF0YWJhc2UgZmllbGRzIHJlcXVpcmVkDQoJCSRmaWVsZHMgPSAnaWQsbmFtZSxjYXB0aW9uLGFsdCxjYXRlZ29yeSxkYXRlLGF1dGhvcixleHQsdyxoJzsNCg0KCQkvLyBDb252ZXJ0IHRoZSBjYXRlZ29yeSAocG9zc2libHkgYSBjb21tYS1zZXAgbGlzdCkgaW50byBhbiBTUUwtc3R5bGUgJ2luJyBsaXN0Lg0KCQkkZnVsbENhdExpc3QgPSBhcnJheSgpOw0KCQkkbm90Q2F0TGlzdCA9IGFycmF5KCk7DQoJCSRjYXRWYXJzID0gYXJyYXkoIj9jIiwgIiFjIiwgIj9zIiwgIiFzIiwgIj90IiwgIiF0IiwgIj9pZCIsICIhaWQiLCAiP2ZpZWxkIiwgIiFmaWVsZCIpOw0KCQkkcmV0QXJyYXkgPSBzbWRfZ2V0T3B0cygkY2F0ZWdvcnksICRjYXRWYXJzLCAkY2F0bGFiZWwsIGZhbHNlKTsNCgkJJGZ1bGxDYXRMaXN0ID0gJHJldEFycmF5WzBdOw0KCQkkbm90Q2F0TGlzdCA9ICRyZXRBcnJheVsxXTsNCg0KCQkvLyBDb252ZXJ0IHRoZSBpbWFnZWlkIChwb3NzaWJseSBhIGNvbW1hLXNlcCBsaXN0KSBpbnRvIGFuIFNRTC1zdHlsZSAnaW4nIGxpc3QuDQoJCSRmdWxsSURMaXN0ID0gYXJyYXkoKTsNCgkJJG5vdElETGlzdCA9IGFycmF5KCk7DQoJCSRpZFZhcnMgPSBhcnJheSgiP2lkIiwgIiFpZCIsICI/ZmllbGQiLCAiIWZpZWxkIik7DQoJCSRyZXRBcnJheSA9IHNtZF9nZXRPcHRzKCRpbWFnZWlkLCAkaWRWYXJzKTsNCgkJJGZ1bGxJRExpc3QgPSAkcmV0QXJyYXlbMF07DQoJCSRub3RJRExpc3QgPSAkcmV0QXJyYXlbMV07DQoNCgkJLy8gTWFrZSB1cCB0aGUgV0hFUkUgc3RhdGVtZW50IGZyb20gdGhlIGNvbWJpbmVkIGxpc3RzLg0KCQkvLyBUaGUgY2F0ZWdvcmllcy9pbWFnZSBJRHMgYXJlIE9SZWQgdG9nZXRoZXIgaW4gYnJhY2tldHMgZmlyc3QNCgkJLy8gYmVmb3JlIHRoZSBuZWdhdGlvbiBvcHRpb25zIGFyZSB0YWNrZWQgb24gYXMgQU5EcyBhZnRlcndhcmRzDQoJCSR3aGVyZU9SID0gYXJyYXkoKTsNCgkJJHdoZXJlQU5EID0gYXJyYXkoKTsNCg0KCQkvLyBTdGFydCB0aGUgV0hFUkUgc3RhdGVtZW50IHdpdGggdGhlIGNvbWJpbmVkIGxpc3Qgb2YgaW1hZ2UgSURzDQoJCWlmIChjb3VudCgkZnVsbElETGlzdCkgPiAwKSB7DQoJCQlmb3IgKCRpZHggPSBjb3VudCgkZnVsbElETGlzdCk7ICRpZHggPj0wOyAkaWR4LS0pIHsNCgkJCQlpZiAoZW1wdHkoJGZ1bGxJRExpc3RbJGlkeF0pKSB7DQoJCQkJCXVuc2V0KCRmdWxsSURMaXN0WyRpZHhdKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkZnVsbElETGlzdFskaWR4XSA9ICInIiAuICRmdWxsSURMaXN0WyRpZHhdIC4gIiciOw0KCQkJCX0NCgkJCX0NCgkJCWlmIChjb3VudCgkZnVsbElETGlzdCkgPiAwKSB7DQoJCQkJJHdoZXJlT1JbXSA9ICJpZCBJTiAoIiAuIGltcGxvZGUoIiwiLCAkZnVsbElETGlzdCkuICIpIjsNCgkJCX0NCgkJfQ0KDQoJCS8vIGluY2x1ZGVkIGNhdGVnb3JpZXMgLSBzb21lIG1heSBiZSBzdWJjYXRzDQoJCSR0bXBhID0gYXJyYXkoKTsNCgkJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRmdWxsQ2F0TGlzdCk7ICRpZHgrKykgew0KCQkJaWYgKCRzdWJjYXRzKSB7DQoJCQkJJGNhdGVncyA9IHNtZF9nZXRTdWJDYXRzKCRmdWxsQ2F0TGlzdFskaWR4XSwnaW1hZ2UnKTsNCgkJCQlmb3IgKCRqZHggPSAwOyAkamR4IDwgY291bnQoJGNhdGVncyk7ICRqZHgrKykgew0KCQkJCQlpZiAoJGNhdGVnc1skamR4XVsnbmFtZSddICE9ICJyb290Iikgew0KCQkJCQkJJHRtcGFbXSA9ICInIiAuJGNhdGVnc1skamR4XVsnbmFtZSddLiAiJyI7DQoJCQkJCX0NCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCSR0bXBhW10gPSAiJyIgLiRmdWxsQ2F0TGlzdFskaWR4XS4gIiciOw0KCQkJfQ0KCQl9DQoJCWlmIChjb3VudCgkdG1wYSkgPiAwKSB7DQoJCQkkd2hlcmVPUltdID0gImNhdGVnb3J5IElOICgiIC5pbXBsb2RlKCIsIiwgJHRtcGEpLiAiKSI7DQoJCX0NCg0KCQlpZiAoY291bnQoJHdoZXJlT1IpID4gMCkgew0KCQkJJHdoZXJlID0gIigiIC4gaW1wbG9kZSgiIE9SICIsICR3aGVyZU9SKSAuICIpIjsNCgkJfSBlbHNlIHsNCgkJCSR3aGVyZSA9ICIiOw0KCQl9DQoNCgkJLy8gZXhjbHVkZWQgY2F0ZWdvcmllcw0KCQkkdG1wYSA9IGFycmF5KCk7DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkbm90Q2F0TGlzdCk7ICRpZHgrKykgew0KCQkJaWYgKCRzdWJjYXRzKSB7DQoJCQkJJGNhdGVncyA9IHNtZF9nZXRTdWJDYXRzKCRub3RDYXRMaXN0WyRpZHhdLCdpbWFnZScpOw0KCQkJCWZvciAoJGpkeCA9IDA7ICRqZHggPCBjb3VudCgkY2F0ZWdzKTsgJGpkeCsrKSB7DQoJCQkJCWlmICgkY2F0ZWdzWyRqZHhdWyduYW1lJ10gIT0gInJvb3QiKSB7DQoJCQkJCQkkdG1wYVtdID0gIiciIC4kY2F0ZWdzWyRqZHhdWyduYW1lJ10uICInIjsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJJHRtcGFbXSA9ICInIiAuJG5vdENhdExpc3RbJGlkeF0uICInIjsNCgkJCX0NCgkJfQ0KCQlpZiAoY291bnQoJHRtcGEpID4gMCkgew0KCQkJJHdoZXJlQU5EW10gPSAiY2F0ZWdvcnkgTk9UIElOICgiIC5pbXBsb2RlKCIsIiwgJHRtcGEpLiAiKSI7DQoJCX0NCg0KCQkvLyBBZGQgdG8gdGhlIFdIRVJFIHN0YXRlbWVudCB0aGUgY29tYmluZWQgbGlzdCBvZiBOT1QgaW1hZ2UgSURzDQoJCWlmIChjb3VudCgkbm90SURMaXN0KSA+IDApIHsNCgkJCWZvciAoJGlkeCA9IGNvdW50KCRub3RJRExpc3QpOyAkaWR4ID49MDsgJGlkeC0tKSB7DQoJCQkJaWYgKGVtcHR5KCRub3RJRExpc3RbJGlkeF0pKSB7DQoJCQkJCXVuc2V0KCRub3RJRExpc3RbJGlkeF0pOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRub3RJRExpc3RbJGlkeF0gPSAiJyIgLiAkbm90SURMaXN0WyRpZHhdIC4gIiciOw0KCQkJCX0NCgkJCX0NCgkJCWlmIChjb3VudCgkbm90SURMaXN0KSA+IDApIHsNCgkJCQkkd2hlcmVBTkRbXSA9ICJpZCBOT1QgSU4gKCIgLiBpbXBsb2RlKCIsIiwgJG5vdElETGlzdCkuICIpIjsNCgkJCX0NCgkJfQ0KDQoJCWlmIChjb3VudCgkd2hlcmVBTkQpID4gMCkgew0KCQkJJHdoZXJlIC49ICgoJHdoZXJlPT0iIikgPyAiIiA6ICIgQU5EICIpIC4gaW1wbG9kZSgiIEFORCAiLCAkd2hlcmVBTkQpOw0KCQl9DQoNCgkJaWYgKCR3aGVyZSA9PSAiIikgew0KCQkJaWYgKCEkY2F0aWRvcHRzKSB7DQoJCQkJLy8gSWYgbm8gY2F0ZWdvcnkvaWQgb3B0aW9ucyBnaXZlbiwgY2hvb3NlIGZyb20gdGhlIHdob2xlIGRhdGFiYXNlDQoJCQkJJHdoZXJlID0gIjE9MSI7DQoJCQl9IGVsc2Ugew0KCQkJCS8vIElmIGEgY2F0ZWdvcnkvaWQgb3B0aW9uIHdhcyBjaG9zZW4gdGhlbiB0aGUgdmFsdWVzIG11c3QgYmUgZW1wdHkuDQoJCQkJLy8gSW4gdGhpcyBjYXNlIHRoZSBwbHVnaW4gc2hvdWxkIGNob29zZSBmcm9tIGEgYm9ndXMgY2F0ZWdvcnkgdGhhdCBzaG91bGQgbm90IGV4aXN0Lg0KCQkJCSR3aGVyZSA9ICJjYXRlZ29yeT0nc21kXyIubXRfcmFuZCgpLiInIjsNCgkJCX0NCgkJfQ0KDQoJCS8vIENvbnZlcnQgdGhlIG9yZGVyYnkgaW50byBhIHZhbGlkIHNvcnRpbmcgaGllcmFyY2h5Lg0KCQkvLyBOb3RlIHRoYXQgcmFuZG9tIGlzIGEgc3BlY2lhbCBjYXNlIGFuZCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGx5Og0KCQkvLyAgMSkgQW55dGhpbmcgYXBwZWFyaW5nIGJlZm9yZSByYW5kb20gaXMgcGFzc2VkIHRvIHRoZSBkYXRhYmFzZSBxdWVyeSBmb3Igb3JkZXJpbmcNCgkJLy8gIDIpIEFzIHNvb24gYXMgcmFuZG9tIGlzIGVuY291bnRlcmVkLCB0aGUgb3JkZXJieSBzdHJpbmcgaXMgaWdub3JlZC4NCgkJLy8gICAgIFRoZSByZXN1bHRzZXQgd2lsbCBiZSBzb3J0ZWQgcmFuZG9tbHkgaW5zdGVhZA0KCQkvLyAgMykgSWYgcmFuZG9tIGFwcGVhcnMgZmlyc3QgaW4gdGhlIGxpc3QsIHRoZSBkYXRhIGlzIHJldHJpZXZlZCByYW5kb21seSB0aGVuIHRoZQ0KCQkvLyAgICAgcmVtYWluaW5nIG9wdGlvbnMgc29ydCB0aGUgcmVzdWx0c2V0DQoJCSR3aGVyZU9CID0gQXJyYXkoKTsNCgkJJHBvc3RPcmRlciA9IGFycmF5KCk7DQoJCSRydWxlID0gInNxbCI7DQoJCSRwb3N0UHJlZml4ID0gIlNPUlRfIjsNCgkJJHJhbmRzb3J0ID0gZmFsc2U7DQoJCSRvYkxpc3QgPSBwcmVnX3NwbGl0KCcvWyxcc10rLycsJG9yZGVyYnksLTEsUFJFR19TUExJVF9OT19FTVBUWSk7DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkb2JMaXN0KTsgJGlkeCsrKSB7DQoJCQkkb2JfZGlyID0gZXhwbG9kZSgnOicsJG9iTGlzdFskaWR4XSk7DQoJCQkkZGlyZWN0aW9uID0gJyc7DQoJCQkkY29sUmVmID0gJyc7DQoJCQlpZiAoY291bnQoJG9iX2RpcikgPD0gMSkgew0KCQkJCSRvYl9kaXJbMV0gPSAiYXNjIjsNCgkJCX0NCgkJCWlmICgkcnVsZSA9PSAic3FsIikgew0KCQkJCSRkaXJlY3Rpb24gPSAoJG9iX2RpclsxXSA9PSAiZGVzYyIpID8gJyBkZXNjJyA6ICcgYXNjJzsNCgkJCX0gZWxzZSB7DQoJCQkJJGRpcmVjdGlvbiA9ICgkb2JfZGlyWzFdID09ICJkZXNjIikgPyAkcG9zdFByZWZpeC4nREVTQycgOiAkcG9zdFByZWZpeC4nQVNDJzsNCgkJCX0NCg0KCQkJc3dpdGNoICgkb2JfZGlyWzBdKSB7DQoJCQkJY2FzZSAncmFuZG9tJzoNCgkJCQkJJHJ1bGUgPSAicG9zdCI7DQoJCQkJCWlmICgkaWR4ID09IDApIHsNCgkJCQkJCSR3aGVyZU9CW10gPSAncmFuZCgpJzsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRyYW5kc29ydCA9IHRydWU7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnZml4ZWQnOg0KCQkJCQkvLyAnZml4ZWQnIG9ubHkgd29ya3Mgb24gaW1hZ2UgaWRzDQoJCQkJCWlmICgkaW1hZ2VpZCAhPSAiIikgew0KCQkJCQkJJGZpeGVkT3JkZXIgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWRlZmF1bHQ6DQoJCQkJCSRjb2xSZWYgPSBhcnJheV9zZWFyY2goJG9iX2RpclswXSwgJGZpZWxkTWFwKTsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCQlpZiAoJHJ1bGUgPT0gInNxbCIpIHsNCgkJCQlpZiAoJGNvbFJlZiAhPSAiIikgew0KCQkJCQkkd2hlcmVPQltdID0gJGNvbFJlZi4kZGlyZWN0aW9uOw0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJaWYgKCEkcmFuZHNvcnQpIHsNCgkJCQkJaWYgKCRjb2xSZWYgIT0gIiIpIHsNCgkJCQkJCSRwb3N0T3JkZXJbXSA9IGFycmF5KCJjb2wiID0+ICRjb2xSZWYsICJzb3J0IiA9PiAkZGlyZWN0aW9uKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCWlmIChjb3VudCgkd2hlcmVPQikgPiAwKSB7DQoJCQkkd2hlcmUgLj0gJyBPUkRFUiBCWSAnIC4gaW1wbG9kZSgiLCIsJHdoZXJlT0IpOw0KCQl9DQoNCgkJLy8gSGFuZGxlIHBhZ2luZw0KCQlpZiAoKCRsaW1pdCA+IDApICYmICRzaG93cGFnZWxpbmtzKSB7DQoJCQkkcnMgPSBzYWZlX3Jvd3MoJGZpZWxkcywgJ3R4cF9pbWFnZScsICR3aGVyZSAuJyBMSU1JVCAwLCcuJG1heGxpbWl0KTsNCgkJCSRudW10aHVtID0gY291bnQoJHJzKTsNCgkJCSRudW1QYWdlcyA9ICgkbnVtdGh1bSA+IDApID8gY2VpbCgkbnVtdGh1bS8kbGltaXQpIDogMTsNCgkJCSR0aHVtYnBhZ2UgPSAoIWdwcygkZ2FsbElEKSkgPyAxIDogZ3BzKCRnYWxsSUQpOw0KCQkJJG9mZnNldCA9ICgkdGh1bWJwYWdlIC0gMSkgKiAkbGltaXQ7DQoJCQkkcnMgPSBzYWZlX3Jvd3MoJGZpZWxkcywgJ3R4cF9pbWFnZScsICR3aGVyZSAuJyBMSU1JVCAnLiRvZmZzZXQuJywnLiRsaW1pdCk7DQoJCX0gZWxzZSB7DQoJCQkvLyBObyBwYWdpbmcgcmVxdWlyZWQNCgkJCSRudW1QYWdlcyA9IDE7DQoJCQkkdGh1bWJwYWdlID0gMTsNCgkJCSRycyA9IHNhZmVfcm93cygkZmllbGRzLCAndHhwX2ltYWdlJywgJHdoZXJlIC4nIExJTUlUIDAsJy4gKCgkbGltaXQ9PTApID8gJG1heGxpbWl0IDogJGxpbWl0KSk7DQoJCX0NCg0KCQkvLyBJcyBwb3N0LW9yZGVyaW5nIHJlcXVpcmVkPyBEbyBpdA0KCQlpZiAoJHJhbmRzb3J0KSB7DQoJCQlzaHVmZmxlKCRycyk7DQoJCX0gZWxzZSBpZiAoY291bnQoJHBvc3RPcmRlcikgPiAwKSB7DQoJCQkvLyBUcmFuc2xhdGUgdGhlIHJvd3MgaW50byBjb2x1bW5zIHRoYXQgY2FuIGJlIHNvcnRlZA0KCQkJZm9yZWFjaCgkcnMgYXMgJGtleSA9PiAkcm93KSB7DQoJCQkJJGNvbF9pZFska2V5XSA9ICRyb3dbJ2lkJ107DQoJCQkJJGNvbF9uYW1lWyRrZXldID0gJHJvd1snbmFtZSddOw0KCQkJCSRjb2xfY2FwdGlvblska2V5XSA9ICRyb3dbJ2NhcHRpb24nXTsNCgkJCQkkY29sX2FsdFska2V5XSA9ICRyb3dbJ2FsdCddOw0KCQkJCSRjb2xfY2F0ZWdvcnlbJGtleV0gPSAkcm93WydjYXRlZ29yeSddOw0KCQkJCSRjb2xfZGF0ZVska2V5XSA9ICRyb3dbJ2RhdGUnXTsNCgkJCQkkY29sX2V4dFska2V5XSA9ICRyb3dbJ2V4dCddOw0KCQkJCSRjb2xfYXV0aG9yWyRrZXldID0gJHJvd1snYXV0aG9yJ107DQoJCQkJJGNvbF93WyRrZXldID0gJHJvd1sndyddOw0KCQkJCSRjb2xfaFska2V5XSA9ICRyb3dbJ2gnXTsNCgkJCX0NCgkJCS8vIE1ha2UgdXAgYW4gYXJyYXlfbXVsdGlzb3J0IGFyZyBsaXN0IGFuZCBleGVjdXRlIGl0DQoJCQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJHBvc3RPcmRlcik7ICRpZHgrKykgew0KCQkJCSRzb3J0YXJnc1tdID0gJyRjb2xfJy4kcG9zdE9yZGVyWyRpZHhdWydjb2wnXTsNCgkJCQkkc29ydGFyZ3NbXSA9ICRwb3N0T3JkZXJbJGlkeF1bJ3NvcnQnXTsNCgkJCX0NCgkJCSRzb3J0aXQgPSAnYXJyYXlfbXVsdGlzb3J0KCcuaW1wbG9kZSgiLCAiLCRzb3J0YXJncykuJywgJHJzKTsnOw0KCQkJZXZhbCgkc29ydGl0KTsNCgkJfQ0KDQoJCS8vIElzIGZpeGVkLW9yZGVyIG91dHB1dCBkZXNpcmVkPyBJZiBzbywgcmUtb3JkZXIgdGhlICRycw0KCQlpZiAoJGZpeGVkT3JkZXIpIHsNCgkJCSRvcmRlcmVkUlMgPSBBcnJheSgpOw0KCQkJJGlnbm9yZUxpc3QgPSBBcnJheSgpOw0KCQkJJHJlbWFpbmluZ1JTID0gQXJyYXkoKTsNCgkJCS8vIFN1Y2sgb3V0IHRoZSBmaXhlZCBpdGVtcyBmaXJzdA0KCQkJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRmdWxsSURMaXN0KTsgJGlkeCsrKSB7DQoJCQkJZm9yZWFjaCgkcnMgYXMgJHJvdykgew0KCQkJCQlpZiAoIiciLiRyb3dbJ2lkJ10uIiciID09ICRmdWxsSURMaXN0WyRpZHhdKSB7DQoJCQkJCQkkb3JkZXJlZFJTW10gPSAkcm93Ow0KCQkJCQkJJGlnbm9yZUxpc3RbXSA9ICRyb3dbJ2lkJ107DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkvLyBUYWNrIG9uIHRoZSByZW1haW5pbmcgcm93cw0KCQkJZm9yZWFjaCgkcnMgYXMgJHJvdykgew0KCQkJCWlmICghaW5fYXJyYXkoJHJvd1snaWQnXSwgJGlnbm9yZUxpc3QpKSB7DQoJCQkJCSRyZW1haW5pbmdSU1tdID0gJHJvdzsNCgkJCQl9DQoJCQl9DQoJCQkkcnMgPSBhcnJheV9tZXJnZSgkb3JkZXJlZFJTLCAkcmVtYWluaW5nUlMpOw0KCQl9DQoNCgkJLy8gSGFuZGxlIHRodW1ic2l6ZQ0KCQkkdGh1bWJXaWR0aCA9ICR0aHVtYkhlaWdodCA9ICIiOw0KCQkkdGh1bWJXVW5pdHMgPSAkdGh1bWJIVW5pdHMgPSAiIjsNCgkJaWYgKCR0aHVtYnNpemUpIHsNCgkJCSR0aHVtYlNpemVzID0gc21kX3NwbGl0KCR0aHVtYnNpemUsIGZhbHNlLCAiLFxzIiwgMCk7DQoJCQlpZiAoY291bnQoJHRodW1iU2l6ZXMpID09IDEpIHsNCgkJCQkkdGh1bWJXaWR0aCA9ICR0aHVtYkhlaWdodCA9IGVyZWdfcmVwbGFjZSgiW14wLTldIiwgIiIsICR0aHVtYlNpemVzWzBdKTsNCgkJCQkkdW5pdHMgPSBlcmVnX3JlcGxhY2UoIlswLTldIiwgIiIsICR0aHVtYlNpemVzWzBdKTsNCgkJCQkkdGh1bWJXVW5pdHMgPSAkdGh1bWJIVW5pdHMgPSAoJHVuaXRzID09ICIiKSA/ICR0aHVtYldVbml0cyA6ICR1bml0czsNCgkJCX0gZWxzZSB7DQoJCQkJJHRodW1iV2lkdGggPSBlcmVnX3JlcGxhY2UoIlteMC05XSIsICIiLCAkdGh1bWJTaXplc1swXSk7DQoJCQkJJHRodW1iSGVpZ2h0ID0gZXJlZ19yZXBsYWNlKCJbXjAtOV0iLCAiIiwgJHRodW1iU2l6ZXNbMV0pOw0KCQkJCSR1bml0cyA9IGVyZWdfcmVwbGFjZSgiWzAtOV0iLCAiIiwgJHRodW1iU2l6ZXNbMF0pOw0KCQkJCSR0aHVtYldVbml0cyA9ICgkdW5pdHMgPT0gIiIgJiYgJHRodW1iV2lkdGggIT0gIiIpID8gJHRodW1iV1VuaXRzIDogJHVuaXRzOw0KCQkJCSR1bml0cyA9IGVyZWdfcmVwbGFjZSgiWzAtOV0iLCAiIiwgJHRodW1iU2l6ZXNbMV0pOw0KCQkJCSR0aHVtYkhVbml0cyA9ICgkdW5pdHMgPT0gIiIgJiYgJHRodW1iSGVpZ2h0ICE9ICIiKSA/ICR0aHVtYkhVbml0cyA6ICR1bml0czsNCgkJCX0NCgkJfQ0KDQoJCS8vIFByZXBhcmUgdGhlIGFkZGl0aW9uYWwgdGh1bWIgZGV0YWlscyB0byBzaG93LCBpZiByZXF1aXJlZA0KCQkkcG9zQXJyYXkgPSBhcnJheSgpOw0KDQoJCS8vIERFUFJFQ0FURUQ6IEhhbmRsZSBkZXByZWNhdGVkIG9wdGlvbnMgZm9yIG5vdzsgcmVtb3ZlIGxhdGVyDQoJCWlmICgkdGV4dHBvcyAmJiBpbl9hcnJheSgkdGV4dHBvcywkc2hvd0xvY3MpKSB7DQoJCQlpZiAoJHNob3dhbHQpIHsNCgkJCQkkcG9zQXJyYXlbJHRleHRwb3NdID0gZXhwbG9kZSgiICIsICI/YWx0Iik7IC8vIENoZWF0IHRvIGdlbmVyYXRlIGFuIGFycmF5DQoJCQl9DQoJCQlpZiAoJHNob3djYXB0aW9uKSB7DQoJCQkJJHBvc0FycmF5WyR0ZXh0cG9zXSA9IGV4cGxvZGUoIiAiLCAiP2NhcHRpb24iKTsgLy8gQ2hlYXQgdG8gZ2VuZXJhdGUgYW4gYXJyYXkNCgkJCX0NCgkJfQ0KDQoJCS8vIHRodW1idGV4dCBvdmVycmlkZXMgc2hvd2FsdC9zaG93Y2FwdGlvbg0KCQkkc2hvd29wdHMgPSBzbWRfc3BsaXQoJHRodW1idGV4dCwgZmFsc2UsICIvLHwscy8iKTsNCgkJZm9yZWFjaCAoJHNob3dvcHRzIGFzICRpdGVtKSB7DQoJCQkkc2hvd3BvcyA9IHNtZF9zcGxpdCgkaXRlbSwgZmFsc2UsICIvIi4kcGFyYW1kZWxpbS4iLyIpOw0KCQkJaWYgKGNvdW50KCRzaG93cG9zKSA+IDEgJiYgaW5fYXJyYXkoJHNob3dwb3NbMF0sJHNob3dMb2NzKSkgew0KCQkJCSRwb3NBcnJheVskc2hvd3Bvc1swXV0gPSBleHBsb2RlKCIgIiwgJHNob3dwb3NbMV0pOw0KCQkJfSBlbHNlIHsNCgkJCQkkcG9zQXJyYXlbJHNob3dMb2NzWzBdXSA9IGV4cGxvZGUoIiAiLCAoKGNvdW50KCRzaG93cG9zKT4xKSA/ICRzaG93cG9zWzFdIDogJHNob3dwb3NbMF0pKTsNCgkJCX0NCgkJfQ0KDQoJCS8vIENvbnN0cnVjdCB0aGUgb3V0cHV0DQoJCSRjYXB0aW9uSXRlbXMgPSBzbWRfc3BsaXQoJGltYWdlY2FwdGlvbiwgZmFsc2UsICJccyIpOw0KCQkkdGh1bWJ0ZXh0UGxhdGUgPSAnPHNwYW4nIC4gKCgkdGh1bWJ0ZXh0Y2xhc3MgIT0gIiIpID8gJyBjbGFzcz0iJyAuJHRodW1idGV4dGNsYXNzLiAnIicgOiAnJykgLiAnPicuJHRodW1iaG9sZGVyLic8L3NwYW4+JzsNCgkJJG91dFN0ciA9ICcnOw0KCQlpZigkcnMpIHsNCgkJCWZvcmVhY2goJHJzIGFzICRyb3cpIHsNCgkJCQkkdGhlVGh1bWIgPSBodS4kaW1nX2Rpci4nLycgLiAkcm93WydpZCddIC4gJ3QnIC4gJHJvd1snZXh0J107DQoJCQkJJGZ1bGwgPSBodS4kaW1nX2Rpci4nLycgLiAkcm93WydpZCddIC4gKCgkdGh1bWIpID8gInQiIDogIiIpIC4kcm93WydleHQnXTsNCgkJCQlpZiAoJGdyb3VwbmFtZSA9PT0gIj9jIikgew0KCQkJCQkkZ3JwID0gJHJvd1snY2F0ZWdvcnknXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/aWQiKSB7DQoJCQkJCSRncnAgPSAkcm93WydpZCddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZSA9PT0gIj9hdXRob3IiKSB7DQoJCQkJCSRncnAgPSAkcm93WydhdXRob3InXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/ZGF0ZSIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ2RhdGUnXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/YWx0Iikgew0KCQkJCQkkZ3JwID0gJHJvd1snYWx0J107DQoJCQkJfSBlbHNlIGlmICgkZ3JvdXBuYW1lID09PSAiP2NhcHRpb24iKSB7DQoJCQkJCSRncnAgPSAkcm93WydjYXB0aW9uJ107DQoJCQkJfSBlbHNlIGlmICgkZ3JvdXBuYW1lID09PSAiP2V4dCIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ2V4dCddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZSA9PT0gIj9uYW1lIikgew0KCQkJCQkkZ3JwID0gJHJvd1snbmFtZSddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZSA9PT0gIj93aWR0aCIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ3cnXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/aGVpZ2h0Iikgew0KCQkJCQkkZ3JwID0gJHJvd1snaCddOw0KCQkJCX0gZWxzZSBpZiAoc3Vic3RyKCRncm91cG5hbWUsMCwxKSA9PT0gIj8iKSB7DQoJCQkJCS8vIFNwbGl0IG9mZiB0aGUgZmllbGQgbmFtZSBmcm9tIHRoZSBxdWVzdGlvbiBtYXJrDQoJCQkJCSRmaWVsZG5hbWUgPSBzdWJzdHIoJGdyb3VwbmFtZSwxKTsNCgkJCQkJaWYgKGlzc2V0KCR0aGlzYXJ0aWNsZVskZmllbGRuYW1lXSkpIHsNCgkJCQkJCSRncnAgPSAkdGhpc2FydGljbGVbJGZpZWxkbmFtZV07DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkZ3JwID0gJyc7DQoJCQkJCX0NCgkJCQl9IGVsc2Ugew0KCQkJCQkkZ3JwID0gJGdyb3VwbmFtZTsNCgkJCQl9DQoNCgkJCQkvLyBIYW5kbGUgaW1hZ2VjYXB0aW9uDQoJCQkJJGNhcHRpb25BcnJheSA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJGNhcHRpb25JdGVtcyBhcyAkaXRlbSkgew0KCQkJCQlpZiAoc3Vic3RyKCRpdGVtLDAsMSkgPT09ICI/Iikgew0KCQkJCQkJJGZpZWxkbmFtZSA9IHN1YnN0cigkaXRlbSwxKTsNCgkJCQkJCSRrZXkgPSBhcnJheV9zZWFyY2goJGZpZWxkbmFtZSwgJGZpZWxkTWFwKTsNCgkJCQkJCWlmICgka2V5KSB7DQoJCQkJCQkJJGNhcHRpb25BcnJheVtdID0gJHJvd1ska2V5XTsNCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJJGNhcHRpb25BcnJheVtdID0gJGZpZWxkbmFtZTsNCgkJCQkJCX0NCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRjYXB0aW9uQXJyYXlbXSA9ICRpdGVtOw0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJLy8gSGFuZGxlIHRodW1idGV4dA0KCQkJCSR0aHVtYnRleHRBcnJheSA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHBvc0FycmF5IGFzICRwb3MgPT4gJHRleHQpIHsNCgkJCQkJZm9yZWFjaCAoJHRleHQgYXMgJGl0ZW0pIHsNCgkJCQkJCWlmIChzdWJzdHIoJGl0ZW0sMCwxKSA9PT0gIj8iKSB7DQoJCQkJCQkJJGZpZWxkbmFtZSA9IHN1YnN0cigkaXRlbSwxKTsNCgkJCQkJCQkka2V5ID0gYXJyYXlfc2VhcmNoKCRmaWVsZG5hbWUsICRmaWVsZE1hcCk7DQoJCQkJCQkJaWYgKCRrZXkpIHsNCgkJCQkJCQkJJHRodW1idGV4dEFycmF5WyRwb3NdW10gPSAkcm93WyRrZXldOw0KCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCSR0aHVtYnRleHRBcnJheVskcG9zXVtdID0gJGZpZWxkbmFtZTsNCgkJCQkJCQl9DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCSR0aHVtYnRleHRBcnJheVskcG9zXVtdID0gJGl0ZW07DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJJHRodW1idGV4dEFycmF5WyRwb3NdID0gaW1wbG9kZSgiICIsICR0aHVtYnRleHRBcnJheVskcG9zXSk7DQoJCQkJfQ0KDQoJCQkJLy8gQ29uc3RydWN0IHRoZSBsaW5rIGFuZCBwdXQgdGh1bWJ0ZXh0IGluIHRoZSBhcHByb3ByaWF0ZSBwb3NpdGlvbnMNCgkJCQkkb3V0U3RyIC49ICgkd3JhcHRhZyAhPSAiIikgPyAnPCcgLiR3cmFwdGFnLiAoKCRjZWxsY2xhc3MgIT0gIiIpID8gJyBjbGFzcz0iJyAuJGNlbGxjbGFzcy4gJyInIDogJycpIC4gJz4nIDogJyc7DQoJCQkJJG91dFN0ciAuPSAoJHRodW1idGV4dEFycmF5WyJhYm92ZSJdKSA/IHN0cl9yZXBsYWNlKCR0aHVtYmhvbGRlciwgJHRodW1idGV4dEFycmF5WyJhYm92ZSJdLCAkdGh1bWJ0ZXh0UGxhdGUpIDogJyc7DQoJCQkJJG91dFN0ciAuPSAnPGEgaHJlZj0iJy4kZnVsbC4nIiByZWw9ImxpZ2h0Ym94LScgLiRncnAuICciIHRpdGxlPSInIC5pbXBsb2RlKCIgIiwgJGNhcHRpb25BcnJheSkuICciPicgLigoJHRodW1idGV4dEFycmF5WyJiZWZvcmUiXSkgPyBzdHJfcmVwbGFjZSgkdGh1bWJob2xkZXIsICR0aHVtYnRleHRBcnJheVsiYmVmb3JlIl0sICR0aHVtYnRleHRQbGF0ZSkgOiAnJykuICc8aW1nIHNyYz0iJyAuJHRoZVRodW1iLiAnIiBhbHQ9IicgLiRyb3dbJ2FsdCddLiAnIicgLiAoKCRpbWdjbGFzcyAhPSAiIikgPyAnIGNsYXNzPSInIC4kaW1nY2xhc3MuICciJyA6ICcnKSAuICgoJHRodW1iV2lkdGgpID8gJyB3aWR0aD0iJyAuICR0aHVtYldpZHRoLiR0aHVtYldVbml0cy4gJyInIDogJycpIC4gKCgkdGh1bWJIZWlnaHQpID8gJyBoZWlnaHQ9IicgLiAkdGh1bWJIZWlnaHQuJHRodW1iSFVuaXRzLiAnIicgOiAnJykgLiAnIC8+JyAuKCgkdGh1bWJ0ZXh0QXJyYXlbImFmdGVyIl0pID8gc3RyX3JlcGxhY2UoJHRodW1iaG9sZGVyLCAkdGh1bWJ0ZXh0QXJyYXlbImFmdGVyIl0sICR0aHVtYnRleHRQbGF0ZSkgOiAnJykuICc8L2E+Jy5uOw0KCQkJCSRvdXRTdHIgLj0gKCR0aHVtYnRleHRBcnJheVsiYmVsb3ciXSkgPyBzdHJfcmVwbGFjZSgkdGh1bWJob2xkZXIsICR0aHVtYnRleHRBcnJheVsiYmVsb3ciXSwgJHRodW1idGV4dFBsYXRlKSA6ICcnOw0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8LycgLiR3cmFwdGFnLiAnPicgOiAnJzsNCgkJCQkkb3V0U3RyIC49IG47DQoJCQl9DQoNCgkJCS8vIEFkZCB0aGUgcGFnaW5nIGZlYXR1cmVzIGlmIHJlcXVpcmVkDQoJCQlpZiAoKCRsaW1pdCA+IDApICYmICRzaG93cGFnZWxpbmtzKSB7DQoJCQkJJG5leHQgPSAoJG51bVBhZ2VzID4gMSAmJiAkdGh1bWJwYWdlICE9ICRudW1QYWdlcyk7DQoJCQkJJHByZXYgPSAoJG51bVBhZ2VzID4gMSAmJiAkdGh1bWJwYWdlID4gMSk7DQoNCgkJCQkvLyBSZXBsYWNlIGFueSBwYWdpbmcgaW5mbyBpbiB0aGUgcXVlcnkgc3RyaW5nDQoJCQkJJHByZXZQYWdlID0gc21kX2FkZFFTVmFyKCRwcmV0ZXh0WydyZXF1ZXN0X3VyaSddLCAkZ2FsbElELCAkdGh1bWJwYWdlLTEpOw0KCQkJCSRuZXh0UGFnZSA9IHNtZF9hZGRRU1ZhcigkcHJldGV4dFsncmVxdWVzdF91cmknXSwgJGdhbGxJRCwgJHRodW1icGFnZSsxKTsNCg0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8JyAuJHdyYXB0YWcuICgoJG5hdmNsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRuYXZjbGFzcy4gJyInIDogJycpIC4gJz4nIDogJyc7DQoJCQkJJG91dFN0ciAuPSAoJHByZXYpID8gJzxhJyAuICgoJHByZXZjbGFzcyAhPSAiIikgPyAnIGNsYXNzPSInIC4kcHJldmNsYXNzLiAnIicgOiAnJykgLiAnIGhyZWY9IicgLiRwcmV2UGFnZS4gJyI+JyAuJHByZXZsYWJlbC4gJzwvYT4nLm4gOiAnJzsNCgkJCQkkb3V0U3RyIC49ICgkbmV4dCkgPyAnPGEnIC4gKCgkbmV4dGNsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRuZXh0Y2xhc3MuICciJyA6ICcnKSAuICcgaHJlZj0iJyAuJG5leHRQYWdlLiAnIj4nIC4kbmV4dGxhYmVsLiAnPC9hPicubiA6ICcnOw0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8LycgLiR3cmFwdGFnLiAnPicgOiAnJzsNCgkJCQkkb3V0U3RyIC49IG47DQoJCQl9DQoJCX0NCgl9DQoNCglyZXR1cm4gJG91dFN0cjsNCn0iO3M6NDoidHlwZSI7czoxOiIwIjtzOjM6Im1kNSI7czozMjoiNjYzZmRmOTQ5Mjk5ZmM3MWZiYjZmYzE3MTZiYzUxMGIiO30=