# Name: rah_sitemap v0.9 # Type: Admin/Client side plugin # Build a valid advanced sitemap # Author: Jukka Svahn # URL: http://rahforum.biz # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjExOiJyYWhfc2l0ZW1hcCI7czo2OiJhdXRob3IiO3M6MTE6 Ikp1a2thIFN2YWhuIjtzOjEwOiJhdXRob3JfdXJpIjtzOjE5OiJodHRwOi8vcmFoZm9ydW0u Yml6IjtzOjc6InZlcnNpb24iO3M6MzoiMC45IjtzOjExOiJkZXNjcmlwdGlvbiI7czozMDoi QnVpbGQgYSB2YWxpZCBhZHZhbmNlZCBzaXRlbWFwIjtzOjQ6ImhlbHAiO3M6MTA0ODU6Igk8 aDE+cmFoX3NpdGVtYXA8L2gxPgoKCTxwPlJhaF9zaXRlbWFwIGlzIGEgc2l0ZW1hcCBwbHVn aW4gZm9yIDxhIGhyZWY9Imh0dHA6Ly93d3cudGV4dHBhdHRlcm4uY29tIj5UZXh0cGF0dGVy biA8c3BhbiBjbGFzcz0iY2FwcyI+Q01TPC9zcGFuPjwvYT4uIEVhc2lseSBidWlsZCB2YWxp ZCA8YSBocmVmPSJodHRwOi8vd3d3LnNpdGVtYXAub3JnIj5TaXRlbWFwLm9yZzwvYT4gPGFj cm9ueW0gdGl0bGU9ImVYdGVuc2libGUgTWFya3VwIExhbmd1YWdlIj48c3BhbiBjbGFzcz0i Y2FwcyI+WE1MPC9zcGFuPjwvYWNyb255bT4gc2l0ZW1hcHMgZm9yIHNlYXJjaCBlbmdpbmVz LCBpbmNsdWRpbmcgR29vZ2xlLiBTdXBwb3J0cyBjYXRlZ29yaWVzLCBzZWN0aW9ucywgYXJ0 aWNsZXMgYW5kIGV2ZW4gY3VzdG9tIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cy4g QWxsIHNldHRpbmdzIGNhbiBiZSBtYW5hZ2VkIGZyb20gY2xlYW4gaW50ZXJmYWNlLiBObyBk aXZlIHRvIGNvZGUgcmVxdWlyZWQuPC9wPgoKCTx1bD4KCQk8bGk+VmVyc2lvbjogMC45PC9s aT4KCQk8bGk+VXBkYXRlZDogMjAxMC8wOC8yNSAwMTo0NSBQTSA8c3BhbiBjbGFzcz0iY2Fw cyI+VVRDPC9zcGFuPjwvbGk+Cgk8L3VsPgoKCTxoMz5UYWJsZSBvZiBDb250ZW50czwvaDM+ CgoJPHVsPgoJCTxsaT48YSBocmVmPSIjbGlzdC1vZi1mZWF0dXJlcyI+TGlzdCBvZiBmZWF0 dXJlczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjcmVxdWlyZW1lbnRzIj5SZXF1aXJlbWVu dHM8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2luc3RhbGxhdGlvbi1hbmQtdXNhZ2UiPklu c3RhbGxhdGlvbiBhbmQgdXNhZ2U8L2E+Cgk8dWw+CgkJPGxpPjxhIGhyZWY9IiNwZXJtbGlu ay1ydWxlcyI+UGVybWxpbmsgcnVsZXM8L2E+PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PGEg aHJlZj0iI2NoYW5nZWxvZyI+Q2hhbmdlbG9nPC9hPjwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0i bGlzdC1vZi1mZWF0dXJlcyI+TGlzdCBvZiBmZWF0dXJlczwvaDM+CgoJPHVsPgoJCTxsaT5T aW1wbGUgaW50ZXJmYWNlIHVuZGVyIDxlbT5UZXh0cGF0dGVybiAmZ3Q7IEV4dGVuc2lvbnMg Jmd0OyBTaXRlbWFwPC9lbT46IGJ1aWxkLCB2aWV3LCBtb2RpZnkgYW5kIGN1c3RvbWl6ZSBz aXRlbWFwLjwvbGk+CgkJPGxpPkZpbHRlciwgaW5jbHVkZSBhbmQgZXhjbHVkZSBzZWN0aW9u LCBjYXRlZ29yeSBhbmQgYXJ0aWNsZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMg ZnJvbSB0aGUgc2l0ZW1hcC48L2xpPgoJCTxsaT5DcmVhdGUgYW5kIGluc2VydCBjdXN0b20g PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIHRvIHRoZSBzaXRlbWFwIHdpdGggY291 cGxlIHNpbXBsZSBjbGlja3MuPC9saT4KCQk8bGk+Tm8gbmVlZCB0byBjcmVhdGUgZmlsZXMg bm9yIHNldCBwZXJtaXNzaW9ucywgaW5zdGVhZCBqdXN0IHVzZSB0aGUgcGx1Z2luIGFuZCBl dmVudHVhbGx5IHN1Ym1pdCB0aGUgc2l0ZW1hcCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9z cGFuPiB0byBHb29nbGUgKHZpYSBXZWJtYXN0ZXIgdG9vbHMpIG9yIG90aGVyIHNlYXJoIGVu Z2luZS48L2xpPgoJCTxsaT5TaXRlbWFwIGlzIGF1dG9tYXRpY2FsbHkgZ3ppcHBlZCBhcyBt dWNoIGFzIHBvc3NpYmxlICYjODIxMjsgYXRsZWFzdCBpZiBzZXJ2ZXIgc3VwcG9ydHMgZ3pp cHBpbmcuPC9saT4KCTwvdWw+CgoJPGgzIGlkPSJyZXF1aXJlbWVudHMiPlJlcXVpcmVtZW50 czwvaDM+CgoJPHA+TWluaW11bTo8L3A+CgoJPHVsPgoJCTxsaT5UZXh0cGF0dGVybiA0LjAu Nys8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiA1KyAob3IgNC4z LjAgd2hlbiBjdXN0b20gdGltZXN0YW1wIGZvcm1hdCBpcyB1c2VkKTwvbGk+CgkJPGxpPk9w dGlvbmFsOiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiB6bGliIGV4dGVuc2lvbjwv bGk+Cgk8L3VsPgoKCTxwPlJlY29tbWVuZGVkOjwvcD4KCgk8dWw+CgkJPGxpPlRleHRwYXR0 ZXJuIDQuMC44KzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IDUu MS4yKzwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0iaW5zdGFsbGF0aW9uLWFuZC11c2FnZSI+SW5z dGFsbGF0aW9uIGFuZCB1c2FnZTwvaDM+CgoJPHA+VGhlIGdlbmVyYWwgYmVoYXZpb3Igc3Rh bmRzOiBwYXN0ZSB0aGUgcGx1Z2luIGNvZGUgdG8gdGhlIHBsdWdpbiBpbnN0YWxsZXIgdGV4 dGFyZWEgYW5kIHJ1biB0aGUgYXV0b21hdGljIHNldHVwLiBUaGVuIGp1c3QgYWN0aXZhdGUg dGhlIHBsdWdpbiBhbmQgeW91IGFyZSByZWFkeSB0byB1c2UgdGhlIHNpdGVtYXAuPC9wPgoK CTxwPllvdSBjYW4gbG9jYXRlIHJhaF9zaXRlbWFwJiM4MjE3O3MgdXNlcmludGVyZmFjZSBw YW5lbCBmcm9tIDxhIGhyZWY9Ij9ldmVudD1yYWhfc2l0ZW1hcCI+VGV4dHBhdHRlcm4gJmd0 OyBFeHRlbnNpb25zICZndDsgU2l0ZW1hcC48L2E+IEZyb20gdGhlcmUgeW91IGNhbiBtb2Rp ZnkgcHJlZmVyZW5jZXMgYW5kIHZpZXcgdGhlIHNpdGVtYXAuPC9wPgoKCTxoNCBpZD0icGVy bWxpbmstcnVsZXMiPlBlcm1saW5rIHNjaGVtZXMgYW5kIHJ1bGVzPC9oND4KCgk8cD5SYWhf c2l0ZW1hcCB2ZXJzaW9uIDAuNCBpbmNsdWRlZCBhIG5ldyBmZWF0dXJlOiBwZXJtbGluayBz ZXR0aW5ncy4gVGhlc2Ugc2V0dGluZywgZm91bmQgaW4gdGhlIHBhbmVsLCB3aWxsIGxldCB5 b3UgZGVmaW5lIHRoZSBwZXJtbGluayBmb3JtIGZvciB0aGUgPHNwYW4gY2xhc3M9ImNhcHMi PlVSTDwvc3Bhbj5zIGluIHRoZSBTaXRlbWFwLiBUaGlzIGlzIGEgaWRlYWwgdG9vbCBmb3Ig bWF0Y2hpbmcgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyB0byB5b3VyIG93 biAuaHR0YWNjZXNzIHJ1bGVzIG9yIGEgcGx1Z2luIGNyZWF0ZWQgY3VzdG9tIDxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+IHJ1bGVzLiBJZiB5b3Ugd2FudCB0byB1c2UgaW4tYnVp bGQgdXJscyBkZWZpbmVkIGJ5IFRleHRwYXR0ZXJuIGl0c2VsZiwgeW91IGNhbiBsZWF2ZSB0 aGVzZSBzZXR0aW5nIHVuc2V0LjwvcD4KCgk8aDU+QXJ0aWNsZSBwZXJtbGlua3M8L2g1PgoK CTxwPlRoZXNlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHNldHRpbmdzIGFyZSB1 c2VkIGZvciBhcnRpY2xlcyB0aGF0IGFwcGVhciBpbiB0aGUgc2l0ZW1hcC4gVG8gZm9ybSB0 aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIHlvdSBjYW4gdXNlIGFueSBpbmRp dmlkdWFsIGFydGljbGUgY29udGV4dCYjODIxNztzIDxjb2RlPiZsdDt0eHA6LyZndDs8L2Nv ZGU+IHRhZy4gQmlnIHNob3RzIGxpa2UgPGNvZGU+Jmx0O3R4cDpwZXJtbGluayAvJmd0Ozwv Y29kZT4sIDxjb2RlPiZsdDt0eHA6cG9zdGVkIC8mZ3Q7PC9jb2RlPiwgPGNvZGU+Jmx0O3R4 cDp0aXRsZSAvJmd0OzwvY29kZT4sIDxjb2RlPiZsdDt0eHA6Y2F0ZWdvcnkxIC8mZ3Q7PC9j b2RlPiwgPGNvZGU+Jmx0O3R4cDpjYXRlZ29yeTIgLyZndDs8L2NvZGU+LCA8Y29kZT4mbHQ7 dHhwOnNlY3Rpb24gLyZndDs8L2NvZGU+LCA8Y29kZT4mbHQ7dHhwOmlmX2FydGljbGVfYXV0 aG9yIC8mZ3Q7PC9jb2RlPiwgPGNvZGU+Jmx0O3R4cDppZl9hcnRpY2xlX2NhdGVnb3J5IC8m Z3Q7PC9jb2RlPiwgPGNvZGU+Jmx0O3R4cDppZl9hcnRpY2xlX2lkIC8mZ3Q7PC9jb2RlPiBh bmQgc28gb24uPC9wPgoKCTxwPkV4YW1wbGUgQXJ0aWNsZSBwZXJtbGluayA8c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPjo8L3A+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6c2l0ZV91cmwg LyZndDtzZWN0aW9ucy8mbHQ7dHhwOnNlY3Rpb24vJmd0Oy9hcnRpY2xlcy8mbHQ7dHhwOmFy dGljbGVfaWQgLyZndDsvJmx0O3R4cDphcnRpY2xlX3VybF90aXRsZSAvJmd0Owo8L2NvZGU+ PC9wcmU+CgoJPGg1PkNhdGVnb3J5IHBlcm1saW5rczwvaDU+CgoJPHA+VGhlc2UgPHNwYW4g Y2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc2V0dGluZ3MgYXJlIHVzZWQgZm9yIENhdGVnb3J5 IGxpbmtzIHRoYXQgYXBwZWFyIGluIHRoZSBzaXRlbWFwLiBUbyBmb3JtIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgeW91IGNhbiB1c2UgcGxhaW4gY2F0ZWdvcnkgY29u dGV4dCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0YWdzIDxjb2RlPiZsdDt0eHA6 Y2F0ZWdvcnkgLyZndDs8L2NvZGU+IGFuZCA8Y29kZT4mbHQ7dHhwOmlmX2NhdGVnb3J5IC8m Z3Q7PC9jb2RlPi4gVGhlIHBsdWdpbiBhbHNvIHByb3ZpZGVzIHR3byBleHRyYSB0YWdpc2gg dGFncywgPGNvZGU+W3R5cGVdPC9jb2RlPiBhbmQgPGNvZGU+W2lkXTwvY29kZT4gd2hpY2gg d2lsbCBiYXNpY2FsbHkgb3V0cHV0IGNhdGVnb3J5JiM4MjE3O3MgdHlwZSBhbmQgaWQuPC9w PgoKCTxwPkV4YW1wbGUgQ2F0ZWdvcnkgcGVybWxpbmsgPHNwYW4gY2xhc3M9ImNhcHMiPlVS TDwvc3Bhbj46PC9wPgoKPHByZT48Y29kZT4mbHQ7dHhwOnNpdGVfdXJsIC8mZ3Q7dmlldy9j YXRlZ29yeS9baWRdLyZsdDt0eHA6Y2F0ZWdvcnkgbGluaz0mcXVvdDswJnF1b3Q7IHRpdGxl PSZxdW90OzAmcXVvdDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxoNT5TZWN0aW9uIHBlcm1s aW5rczwvaDU+CgoJPHA+VGhlc2UgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc2V0 dGluZ3MgYXJlIHVzZWQgZm9yIHNlY3Rpb24gbGlua3MgdGhhdCBhcHBlYXIgaW4gdGhlIHNp dGVtYXAuIFRvIGZvcm0gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyB5b3Ug Y2FuIHVzZSB0aGUgdHdvIHNlY3Rpb24gdGFncywgPGNvZGU+Jmx0O3R4cDpzZWN0aW9uIC8m Z3Q7PC9jb2RlPiBhbmQgPGNvZGU+Jmx0O3R4cDppZl9zZWN0aW9uIC8mZ3Q7PC9jb2RlPi48 L3A+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6c2l0ZV91cmwgLyZndDtzZWN0aW9uLyZsdDt0eHA6 c2VjdGlvbiAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgzIGlkPSJjaGFuZ2Vsb2ciPkNoYW5n ZWxvZzwvaDM+CgoJPHA+PHN0cm9uZz5WZXJzaW9uIDAuOTwvc3Ryb25nPjwvcD4KCgk8dWw+ CgkJPGxpPkZpeGVkOiBub3cgY29ycmVjdGx5IHBhcnNlcyBjYXRlZ29yeSB0YWdzIGluIGNh dGVnb3J5IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cy4gVGhhbmsgeW91IGZvciA8 YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/cGlk PTIzMzYxOSNwMjMzNjE5Ij5yZXBvcnRpbmc8L2E+LCBBbmRyZWFzLjwvbGk+Cgk8L3VsPgoK CTxwPjxzdHJvbmc+VmVyc2lvbiAwLjg8L3N0cm9uZz48L3A+CgoJPHVsPgoJCTxsaT5Ob3cg Y29tcHJlc3Npb24gbGV2ZWwgZmllbGQmIzgyMTc7cyBsYWJlbCBub3cgbGlua3MgdG8gdGhl IGNvcnJlY3QgZmllbGQgaWQuPC9saT4KCQk8bGk+Tm93IHN1cHByZXNzZXMgRV9XQVJOSU5H L0VfU1RSSUNUIG5vdGljZXMgaW4gbGl2ZSBtb2RlIGNhdXNlZCBieSBUZXh0cGF0dGVybiYj ODIxNztzIHRpbWV6b25lIGNvZGUgd2hlbiBzb21lIGNvbmRpdGlvbnMgYXJlIG1ldCAoPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gNC4yLjAsIDxzcGFuIGNsYXNzPSJjYXBzIj5Q SFA8L3NwYW4+IDUuMS4wKywgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7 cyBBdXRvLTxzcGFuIGNsYXNzPSJjYXBzIj5EU1Q8L3NwYW4+IGZlYXR1cmUgZGlzYWJsZWQs IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGluIExpdmUgbW9kZSkuIEVycm9yIHN1 cHByZXNzaW9uIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8 L3NwYW4+IHZlcnNpb24gaXMgcmVhbGVhc2VkIHdpdGggZnVsbHkgd29ya2luZyB0aW1lem9u ZSBzZXR0aW5ncy48L2xpPgoJCTxsaT5Ob3cgZ2VuZXJhdGVzIDxzcGFuIGNsYXNzPSJjYXBz Ij5VTklYPC9zcGFuPiB0aW1lc3RhbXBzIHdpdGhpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMi PlNRTDwvc3Bhbj4gcXVlcnksIG5vdCB3aXRoIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3Nw YW4+LjwvbGk+CgkJPGxpPkNoYW5nZWQgc2xpZGluZyBwYW5lbHMmIzgyMTc7IGxpbmtzICg8 Y29kZT5hPC9jb2RlPiBlbGVtZW50cykgaW50byBzcGFucy48L2xpPgoJPC91bD4KCgk8cD48 c3Ryb25nPlZlcnNpb24gMC43PC9zdHJvbmc+PC9wPgoKCTx1bD4KCQk8bGk+Rml4ZWQ6IG5v dyBkZWxldGluZyBjdXN0b20gdXJsIGxlYWRzIGJhY2sgdG8gdGhlIGxpc3Qgdmlldywgbm90 IHRvIHRoZSBlZGl0aW5nIGZvcm0uPC9saT4KCQk8bGk+UmVtb3ZlZCBzb21lIGxlZnRvdmVy IGlubGluZSBzdHlsZSBmcm9tIHYwLjYuPC9saT4KCTwvdWw+CgoJPHA+PHN0cm9uZz5WZXJz aW9uIDAuNjwvc3Ryb25nPjwvcD4KCgk8dWw+CgkJPGxpPlJld3JpdGVuIHRoZSBjb2RlIHRo YXQgZ2VuZXJldGVzIHRoZSBzaXRlbWFwLjwvbGk+CgkJPGxpPk5ldyBhZG1pbiBwYW5lbCBs b29rLjwvbGk+CgkJPGxpPk5vdyBjdXN0b20gcGVybWxpbmsgbW9kZXMgYW5kIGN1c3RvbSB1 cmxzIGFyZSBlc2NhcGVkLiBVc2VycyBjYW4gaW5wdXQgdW5lc2NhcGVkIDxzcGFuIGNsYXNz PSJjYXBzIj5VUkw8L3NwYW4+cy9tYXJrdXAgZnJvbSBub3cgb24uPC9saT4KCQk8bGk+Tm93 IGN1c3RvbSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBsaXN0IHNob3dzIHRoZSBm dWxsIGZvcm1hdGVkIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGFmdGVyIGF1dG8t ZmlsbCBpbnN0ZWFkIG9mIHRoZSB1c2VyIGlucHV0LjwvbGk+CgkJPGxpPk5vdyBjdXN0b20g PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIHRoYXQgc3RhcnQgd2l0aCB3d3cuIGFy ZSBjb21wbGV0ZWQgd2l0aCBodHRwOi8vIHByb3RvY29sLjwvbGk+CgkJPGxpPk5vdyBhbGwg dXJscyB0aGF0IGRvIG5vdCBzdGFydCB3aXRoIGVpdGhlciBodHRwLCBodHRwcywgd3d3LCBm dHAgb3IgZnRwcyBwcm90b2NvbCBhcmUgYXV0by1jb21wbGV0ZWQgd2l0aCB0aGUgc2l0ZSYj ODIxNztzIGFkZHJlc3MuPC9saT4KCQk8bGk+Q3VzdG9tIHVybCBlZGl0b3IgZ290IG93biBw YW5lbC4gTm8gbG9uZ2VyIHRoZSBmb3JtIGlzIGFib3ZlIHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPiBsaXN0LjwvbGk+CgkJPGxpPkFkZGVkIGFiaWxpdHkgdG8gbWFudWFs bHkgdHVybiBnemliIGNvbXByZXNzaW9uIG9mZiBhbmQgY2hhbmdlIHRoZSBjb21wcmVzc2lv biBsZXZlbC48L2xpPgoJCTxsaT5BZGRlZCBzZXR0aW5nIHRvIHNldCB6bGliLm91dHB1dF9j b21wcmVzc2lvbiBvZmYuIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20v dmlld3RvcGljLnBocD9waWQ9MjI0OTMxI3AyMjQ5MzEiPlNlZSBoZXJlPC9hPiwgdGhhbmsg eW91IGZvciByZXBvcnRpbmcgc3VwZXJmbHkuPC9saT4KCQk8bGk+UHJlZmVyZW5jZXMgYXJl IG5vdyB0cmltbWVkIGR1cmluZyBzYXZlLjwvbGk+CgkJPGxpPk1lcmdlZCA8Y29kZT5yYWhf c2l0ZW1hcF91cGRhdGUoKTwvY29kZT4gd2l0aCA8Y29kZT5yYWhfc2l0ZW1hcF9zYXZlKCk8 L2NvZGU+LjwvbGk+CgkJPGxpPkZyb20gbm93IG9uIGFsbCBuZXcgaW5zdGFsbGF0aW9ucyBo YXZlIGRlZmF1bHQgc2V0dGluZ3MgZGVmaW5lZCB0aGF0IHdpbGwgYXV0b21hdGljYWxseSBl eGNsdWRlIGxpbmssIGZpbGUgYW5kIGltYWdlIGNhdGVnb3JpZXMgZnJvbSB0aGUgc2l0ZW1h cC4gVGhpcyB3b24mIzgyMTc7dCBlZmZlY3QgdXBkYXRlcnMuPC9saT4KCQk8bGk+Q2hhbmdl ZCBzaXRlbWFwJiM4MjE3O3MgY2FsbGJhY2sgcmVnaXN0ZXIgZnJvbSBwcmUgPGNvZGU+cHJl dGV4dDwvY29kZT4gdG8gY2FsbGJhY2sgYWZ0ZXIgaXQgKGNhbGxiYWNrIGlzIG5vdyA8Y29k ZT50ZXh0cGF0dGVybjwvY29kZT4pLiBOb3cgPGNvZGU+JHByZXRleHQ8L2NvZGU+IGlzIHNl dCBiZWZvcmUgdGhlIHNpdGVtYXAgYW5kIHRodXMgbW9yZSBwbHVnaW5zIG1pZ2h0IHdvcmsg d2l0aGluIHBlcm1saW5rIHNldHRpbmdzIGFuZCBjdXN0b20gdXJscy48L2xpPgoJCTxsaT5X aGVuIHVzaW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3MgY2xlYW4g PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zLCByZXF1ZXN0aW5nIDxjb2RlPi9zaXRl bWFwLnhtbC5nejwvY29kZT4gYW5kIDxjb2RlPi9zaXRlbWFwLnhtbDwvY29kZT4gPHNwYW4g Y2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIHdpbGwgcmV0dXJuIHRoZSBzaXRlbWFwLCBub3Qg anVzdCB0aGUgPGNvZGU+Lz9yYWhfc2l0ZW1hcD1zaXRlbWFwPC9jb2RlPi4gVGhpcyB3aWxs IG9mIGNvdXJzZSByZXF1aXJlIGV4aXN0aW5nIGZ1bGx5IHdvcmtpbmcgY2xlYW4gdXJscy48 L2xpPgoJPC91bD4KCgk8cD48c3Ryb25nPlZlcnNpb24gMC41PC9zdHJvbmc+PC9wPgoKCTx1 bD4KCQk8bGk+QWRkZWQgY3VzdG9taXphYmxlIHRpbWVzdGFtcCBmb3JtYXRzLjwvbGk+CgkJ PGxpPkNsZWFuZWQgYmFja2VuZCBtYXJrdXAuPC9saT4KCQk8bGk+Q29tcGluZWQgaW5kaXZp ZHVhbCBwcmVmZXJlbmNlIHF1ZXJpZXMuPC9saT4KCTwvdWw+CgoJPHA+PHN0cm9uZz5WZXJz aW9uIDAuNDwvc3Ryb25nPjwvcD4KCgk8dWw+CgkJPGxpPkFkZGVkIHN1cHBvcnQgZm9yIGN1 c3RvbSBwZXJtbGluayBydWxlczogTm93IHlvdSBjYW4gZWFzaWx5IHNldCBhbnlraW5kIG9m IHBlcm1saW5rIHJ1bGVzIGZvciBhcnRpY2xlcywgc2VjdGlvbiBhbmQgY2F0ZWdvcmllcy48 L2xpPgoJCTxsaT5BZGRlZCBvcHRpb24gdG8gZXhjbHVkZSBmdXR1cmUgYXJ0aWNsZXMuPC9s aT4KCQk8bGk+QWRkZWQgb3B0aW9uIHRvIGV4Y2x1ZGUgcGFzdCBhcnRpY2xlcy48L2xpPgoJ CTxsaT5BZGRlZCBvcHRpb24gdG8gZXhjbHVkZSBleHBpcmVkIGFydGljbGVzLjwvbGk+CgkJ PGxpPk1vdmVkIEN1c3RvbSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBVSSB0byBp dCYjODIxNztzIG93biBwYWdlLjwvbGk+CgkJPGxpPkFkZGVkIG11bHRpLWRlbGV0ZSBmZWF0 dXJlIHRvIEN1c3RvbSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBVSS48L2xpPgoJ CTxsaT5JbXByb3ZlZCBDdXN0b20gPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gVUku PC9saT4KCQk8bGk+UmVtb3ZlZCBkZWZhdWx0IHN0YXRpYyBhcHBlbmRpbmcgZG9tYWluIGZy b20gQ3VzdG9tIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGlucHV0IGZpZWxkLjwv bGk+CgkJPGxpPkNoYW5nZWQgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gbWluaW11 bSByZXF1aXJlbWVudCB0byB2ZXJzaW9uIDQuMC43IChhbmQgYWJvdmUpLiBOb3RlIHRoYXQg dGhlIHBsdWdpbiBzdGlsbCB3b3JrcyB3aXRoIG9sZGVyIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IHZlcnNpb25zIChkb3duIHRvIDQuMC41KSBpZiB0aGUgPGVtPkV4Y2x1ZGUg RXhwaXJlZCBhcnRpY2xlczwvZW0+IC1vcHRpb24gaXMgbGVmdCBlbXB0eSAodW5zZXQpLjwv bGk+Cgk8L3VsPgoKCTxwPjxzdHJvbmc+VmVyc2lvbiAwLjMuMjwvc3Ryb25nPjwvcD4KCgk8 dWw+CgkJPGxpPkZpeGVkIHZpZXcgdXJsIHRoYXQgc3RpbGwgKGZyb20gdmVyc2lvbiAwLjIp IGluY2x1ZGVkIGluc3RhbGxhdGlvbiBhZGRyZXNzIGJlZm9yZSBsaW5rLjwvbGk+Cgk8L3Vs PgoKCTxwPjxzdHJvbmc+VmVyc2lvbiAwLjM8L3N0cm9uZz48L3A+CgoJPHVsPgoJCTxsaT5B ZGRlZCBvcHRpb24gdG8gaW5zZXJ0IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyB0 aGF0IGFyZSBvdXRzaWRlIFRleHRwYXR0ZXJuIGluc3RhbGwgZGlyZWN0b3J5LjwvbGk+CgkJ PGxpPkZpeGVkIG9wdGlvbiB0byBleGNsdWRlIGNhdGVnb3JpZXMgZGlyZWN0bHkgYnkgdHlw ZTogYWRkZWQgZm9yZ290dGVuIGxpbmsgdHlwZS48L2xpPgoJPC91bD4KCgk8cD48c3Ryb25n PlZlcnNpb24gMC4yPC9zdHJvbmc+PC9wPgoKCTx1bD4KCQk8bGk+QWRkZWQgb3B0aW9uIHRv IGV4Y2x1ZGUvaW5jbHVkZSBzdGlja3kgYXJ0aWNsZXMuPC9saT4KCQk8bGk+QWRkZWQgb3B0 aW9uIHRvIGV4Y2x1ZGUgY2F0ZWdvcmllcyBkaXJlY3RseSBieSB0eXBlLjwvbGk+CgkJPGxp PkZpeGVkIGJ1Zzogbm93IHNob3dzIGFsbCBjYXRlZ29yaWVzLCBhbmQgbm90IG9ubHkgYXJ0 aWNsZS10eXBlLCBpbiBhZG1pbiBwYW5lbC48L2xpPgoJCTxsaT5GaXhlZCBidWc6IHJlbW92 ZWQgZG91cGxlIGluc3RhbGwgcXVlcnkgKGRpZG4mIzgyMTc7dCBkbyBhIHRoaW5nLCBqdXN0 IGNoZWNrZWQgdGFibGUgc3RhdHVzIHR3aWNlKS48L2xpPgoJPC91bD4KCgk8cD48c3Ryb25n PlZlcnNpb24gMC4xLjI8L3N0cm9uZz48L3A+CgoJPHVsPgoJCTxsaT5GaXhlZCBhcnRpY2xl IGxpc3RpbmcgYnVnIGNhdXNlZCBieSBuYXN0eSBsaXR0bGUgdHlwbzogbm93IG9ubHkgNCBh bmQgNSBzdGF0dXNlcyBhcmUgbGlzdGVkLjwvbGk+Cgk8L3VsPgoKCTxwPjxzdHJvbmc+VmVy c2lvbiAwLjE8L3N0cm9uZz48L3A+CgoJPHVsPgoJCTxsaT5GaXJzdCByZWxlYXNlLjwvbGk+ Cgk8L3VsPiI7czo0OiJjb2RlIjtzOjI3MTg2OiIJIyMjIyMjIyMjIyMjIyMjIyMjDQoJIw0K CSMJcmFoX3NpdGVtYXAtcGx1Z2luIGZvciBUZXh0cGF0dGVybg0KCSMJdmVyc2lvbiAwLjkN CgkjCWJ5IEp1a2thIFN2YWhuDQoJIwlodHRwOi8vcmFoZm9ydW0uYml6DQoJIw0KCSMjIyMj IyMjIyMjIyMjIyMjIyMNCg0KCWlmKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCQlh ZGRfcHJpdnMoJ3JhaF9zaXRlbWFwJywnMSwyJyk7DQoJCXJlZ2lzdGVyX3RhYignZXh0ZW5z aW9ucycsJ3JhaF9zaXRlbWFwJywnU2l0ZW1hcCcpOw0KCQlyZWdpc3Rlcl9jYWxsYmFjaygn cmFoX3NpdGVtYXBfcGFnZScsJ3JhaF9zaXRlbWFwJyk7DQoJCXJlZ2lzdGVyX2NhbGxiYWNr KCdyYWhfc2l0ZW1hcF9oZWFkJywnYWRtaW5fc2lkZScsJ2hlYWRfZW5kJyk7DQoJfSBlbHNl IA0KCQlyZWdpc3Rlcl9jYWxsYmFjaygncmFoX3NpdGVtYXAnLCd0ZXh0cGF0dGVybicpOw0K DQovKioNCglDaGVja3MgaWYgdGhlIHNpdGVtYXAgc2hvdWxkIGJlIHJldHVybmVkDQoqLw0K DQoJZnVuY3Rpb24gcmFoX3NpdGVtYXBfZGVsaXZlcnkoKSB7DQoJCWdsb2JhbCAkcHJldGV4 dDsNCgkJDQoJCSR1cmkgPSAkcHJldGV4dFsncmVxdWVzdF91cmknXTsNCgkJJHVyaSA9IGV4 cGxvZGUoJy8nLCR1cmkpOw0KCQkkdXJpID0gYXJyYXlfcmV2ZXJzZSgkdXJpKTsNCgkJDQoJ CWlmKGluX2FycmF5KCR1cmlbMF0sYXJyYXkoJ3NpdGVtYXAueG1sLmd6Jywnc2l0ZW1hcC54 bWwnKSkpDQoJCQlyZXR1cm4gdHJ1ZTsNCgkJDQoJCWlmKGdwcygncmFoX3NpdGVtYXAnKSA9 PSAnc2l0ZW1hcCcpCQ0KCQkJcmV0dXJuIHRydWU7DQoJCQ0KCQlyZXR1cm4gZmFsc2U7DQoJ fQ0KDQovKioNCglUaGUgc2l0ZW1hcA0KKi8NCg0KCWZ1bmN0aW9uIHJhaF9zaXRlbWFwKCkg ew0KCQlpZihyYWhfc2l0ZW1hcF9kZWxpdmVyeSgpID09IGZhbHNlKQ0KCQkJcmV0dXJuOw0K CQkNCgkJZ2xvYmFsICRzLCAkdGhpc3NlY3Rpb24sICR0aGlzY2F0ZWdvcnksICRjLCAkcHJl dGV4dCwgJHRoaXNwYWdlLCAkdGhpc2FydGljbGU7DQoJCQ0KCQlAJHByZWYgPSByYWhfc2l0 ZW1hcF9wcmVmcygpOw0KCQkNCgkJaWYoIWlzc2V0KCRwcmVmWyd6bGliX291dHB1dCddKSkg ew0KCQkJcmFoX3NpdGVtYXBfaW5zdGFsbCgpOw0KCQkJJHByZWYgPSByYWhfc2l0ZW1hcF9w cmVmcygpOw0KCQl9DQoNCgkJaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3ht bCcpOw0KDQoJCWlmKCRwcmVmWydjb21wcmVzcyddID09IDEgJiYgZnVuY3Rpb25fZXhpc3Rz KCdnemVuY29kZScpKQ0KCQkJaGVhZGVyKCdDb250ZW50LUVuY29kaW5nOiBnemlwJyk7DQoJ CQ0KCQlpZigkcHJlZlsnemxpYl9vdXRwdXQnXSA9PSAxKQ0KCQkJaW5pX3NldCgnemxpYi5v dXRwdXRfY29tcHJlc3Npb24nLCdPZmYnKTsNCgkNCgkJJHRpbWVzdGFtcGZvcm1hdCA9ICgh ZW1wdHkoJHByZWZbJ3RpbWVzdGFtcGZvcm1hdCddKSkgPyAkcHJlZlsndGltZXN0YW1wZm9y bWF0J10gOiAnYyc7DQoJCQ0KCQkkb3V0W10gPSANCgkJCSc8P3htbCB2ZXJzaW9uPSIxLjAi IGVuY29kaW5nPSJ1dGYtOCI/PicuDQoJCQknPHVybHNldCB4bWxucz0iaHR0cDovL3d3dy5z aXRlbWFwcy5vcmcvc2NoZW1hcy9zaXRlbWFwLzAuOSI+Jy4NCgkJCSc8dXJsPjxsb2M+Jy5o dS4nPC9sb2M+PC91cmw+JzsNCgkJDQoJCWlmKCRwcmVmWydub3NlY3Rpb25zJ10gIT0gMSkg ew0KCQkJDQoJCQkkcnMgPSANCgkJCQlzYWZlX3Jvd3MoDQoJCQkJCSduYW1lJywNCgkJCQkJ J3R4cF9zZWN0aW9uJywNCgkJCQkJcmFoX3NpdGVtYXBfaW4oJ25hbWUnLCRwcmVmWydzZWN0 aW9ucyddLCdkZWZhdWx0JykgLg0KCQkJCQkiIG9yZGVyIGJ5IG5hbWUgYXNjIg0KCQkJCSk7 DQoJCQkNCgkJCSR0aGlzYXJ0aWNsZVsnc2VjdGlvbiddID0gJyc7DQoJCQkNCgkJCWZvcmVh Y2goJHJzIGFzICRhKSB7DQoJCQkJDQoJCQkJJHMgPSAkdGhpc3BhZ2VbJ3MnXSA9ICR0aGlz c2VjdGlvblsnc2VjdGlvbiddID0gICRwcmV0ZXh0WydzJ10gPSAkYVsnbmFtZSddOw0KCQkJ CQ0KCQkJCWlmKCRwcmVmWydwZXJtbGlua19zZWN0aW9uJ10pDQoJCQkJCSRvdXRbXSA9ICc8 dXJsPjxsb2M+Jy5wYXJzZSgkcHJlZlsncGVybWxpbmtfc2VjdGlvbiddKS4nPC9sb2M+PC91 cmw+JzsNCgkJCQllbHNlIA0KCQkJCQkkb3V0W10gPSAnPHVybD48bG9jPicucGFnZWxpbmt1 cmwoYXJyYXkoJ3MnID0+ICRhWyduYW1lJ10pKS4nPC9sb2M+PC91cmw+JzsNCgkJCX0NCgkJ CQ0KCQkJJHMgPSAgJHRoaXNzZWN0aW9uWydzZWN0aW9uJ10gPSAkdGhpc3BhZ2VbJ3MnXSA9 ICRwcmV0ZXh0WydzJ10gPSAnJzsNCgkJCQ0KCQl9DQoJCQ0KCQkkbm90eXBlcyA9ICcnOw0K CQkNCgkJaWYoJHByZWZbJ25vY2F0ZWdvcmllcyddID09IDEpDQoJCQkkbm90eXBlc1tdID0g J2FydGljbGUnOw0KCQlpZigkcHJlZlsnbm9maWxlJ10gPT0gMSkNCgkJCSRub3R5cGVzW10g PSAnZmlsZSc7DQoJCWlmKCRwcmVmWydub2ltYWdlJ10gPT0gMSkNCgkJCSRub3R5cGVzW10g PSAnaW1hZ2UnOw0KCQlpZigkcHJlZlsnbm9saW5rJ10gPT0gMSkNCgkJCSRub3R5cGVzW10g PSAnbGluayc7DQoJCQ0KCQkkbm90ID0gZXhwbG9kZSgnLCcsJHByZWZbJ2NhdGVnb3JpZXMn XSk7DQoJCQ0KCQkkcnMgPSANCgkJCXNhZmVfcm93cygNCgkJCQknbmFtZSx0eXBlLGlkJywN CgkJCQkndHhwX2NhdGVnb3J5JywNCgkJCQkibmFtZSAhPSAncm9vdCcgIiAuIHJhaF9zaXRl bWFwX2luKCdhbmQgdHlwZScsJG5vdHlwZXMpIC4gIiBvcmRlciBieSBuYW1lIGFzYyINCgkJ CSk7DQoJCQ0KCQlmb3JlYWNoKCRycyBhcyAkYSkgew0KDQoJCQlpZihpbl9hcnJheSgkYVsn dHlwZSddLidffHxfJy4kYVsnbmFtZSddLCRub3QpKQ0KCQkJCWNvbnRpbnVlOw0KDQoJCQkk YyA9ICR0aGlzY2F0ZWdvcnlbJ2MnXSA9ICRwcmV0ZXh0WydjJ10gPSAkdGhpc3BhZ2VbJ2Mn XSA9ICRhWyduYW1lJ107DQoNCgkJCWlmKCRwcmVmWydwZXJtbGlua19jYXRlZ29yeSddKQ0K CQkJCSRvdXRbXSA9IA0KCQkJCQkNCgkJCQkJJzx1cmw+PGxvYz4nLg0KCQkJCQkNCgkJCQkJ aHRtbHNwZWNpYWxjaGFycyhzdHJfcmVwbGFjZSgNCgkJCQkJCWFycmF5KA0KCQkJCQkJCSdb dHlwZV0nLA0KCQkJCQkJCSdbaWRdJw0KCQkJCQkJKSwNCgkJCQkJCWFycmF5KA0KCQkJCQkJ CSRhWyd0eXBlJ10sDQoJCQkJCQkJJGFbJ2lkJ10NCgkJCQkJCSksDQoJCQkJCQlwYXJzZSgk cHJlZlsncGVybWxpbmtfY2F0ZWdvcnknXSkNCgkJCQkJKSkuDQoJCQkJCQ0KCQkJCQknPC9s b2M+PC91cmw+JzsNCgkJCQkJDQoJCQllbHNlIA0KCQkJCSRvdXRbXSA9IA0KCQkJCQknPHVy bD48bG9jPicucGFnZWxpbmt1cmwoYXJyYXkoJ2MnID0+ICRhWyduYW1lJ10pKS4nPC9sb2M+ PC91cmw+JzsNCgkJfQ0KCQkNCgkJJGMgPSAkdGhpc2NhdGVnb3J5WydjJ10gPSAkcHJldGV4 dFsnYyddID0gJHRoaXNwYWdlWydjJ10gPSAgJyc7DQoJCQ0KCQlpZigkcHJlZlsnbm9hcnRp Y2xlcyddICE9IDEpIHsNCgkJCQ0KCQkJJHNxbFtdID0gcmFoX3NpdGVtYXBfaW4oJyBhbmQg Q2F0ZWdvcnkxJywkcHJlZlsnYXJ0aWNsZWNhdGVnb3JpZXMnXSk7DQoJCQkkc3FsW10gPSBy YWhfc2l0ZW1hcF9pbignIGFuZCBDYXRlZ29yeTInLCRwcmVmWydhcnRpY2xlY2F0ZWdvcmll cyddKTsNCgkJCSRzcWxbXSA9IHJhaF9zaXRlbWFwX2luKCcgYW5kIFN0YXR1cycsJHByZWZb J2FydGljbGVzdGF0dXMnXSwnMSwyLDMnKTsNCgkJCSRzcWxbXSA9IHJhaF9zaXRlbWFwX2lu KCcgYW5kIFNlY3Rpb24nLCRwcmVmWydhcnRpY2xlc2VjdGlvbnMnXSk7DQoJCQkNCgkJCWlm KCRwcmVmWydhcnRpY2xlZnV0dXJlJ10pDQoJCQkJJHNxbFtdID0gJyBhbmQgUG9zdGVkIDw9 IG5vdygpJzsNCgkJCWlmKCRwcmVmWydhcnRpY2xlcGFzdCddKQ0KCQkJCSRzcWxbXSA9ICcg YW5kIFBvc3RlZCA+IG5vdygpJzsNCgkJCWlmKCRwcmVmWydhcnRpY2xlZXhwaXJlZCddKQ0K CQkJCSRzcWxbXSA9ICIgYW5kIChFeHBpcmVzID0gJzAwMDAtMDAtMDAgMDA6MDA6MDAnIG9y IEV4cGlyZXMgPj0gbm93KCkpIjsNCgkJCQ0KCQkJJHJzID0gDQoJCQkJc2FmZV9yb3dzKA0K CQkJCQkoDQoJCQkJCQkoJHByZWZbJ3Blcm1saW5rX2FydGljbGUnXSkgPyANCgkJCQkJCQkn KiwgIHVuaXhfdGltZXN0YW1wKFBvc3RlZCkgYXMgdVBvc3RlZCwgdW5peF90aW1lc3RhbXAo RXhwaXJlcykgYXMgdUV4cGlyZXMsIHVuaXhfdGltZXN0YW1wKExhc3RNb2QpIGFzIHVMYXN0 TW9kJw0KCQkJCQkJOiANCgkJCQkJCQknSUQsIHVuaXhfdGltZXN0YW1wKFBvc3RlZCkgYXMg dVBvc3RlZCwgdW5peF90aW1lc3RhbXAoTGFzdE1vZCkgYXMgdUxhc3RNb2QnDQoJCQkJCSks DQoJCQkJCSd0ZXh0cGF0dGVybicsDQoJCQkJCScxPTEnIC4gaW1wbG9kZSgnJywkc3FsKS4g JyBvcmRlciBieSBQb3N0ZWQgZGVzYycNCgkJCQkpOw0KCQkJDQoJCQlmb3JlYWNoKCRycyBh cyAkYSkgew0KCQkJCWV4dHJhY3QoJGEpOw0KCQkJCQ0KCQkJCWlmKCRwcmVmWydwZXJtbGlu a19hcnRpY2xlJ10pIHsNCgkJCQkJJHRoaXNhcnRpY2xlID0gDQoJCQkJCQlhcnJheSgNCgkJ CQkJCQkndGhpc2lkJyA9PiAkSUQsDQoJCQkJCQkJJ3Bvc3RlZCcgPT4gJHVQb3N0ZWQsDQoJ CQkJCQkJJ21vZGlmaWVkJyA9PiAkdUxhc3RNb2QsDQoJCQkJCQkJJ2Fubm90YXRlJyA9PiAk QW5ub3RhdGUsDQoJCQkJCQkJJ2NvbW1lbnRzX2ludml0ZScgPT4gJEFubm90YXRlSW52aXRl LA0KCQkJCQkJCSdhdXRob3JpZCcgPT4gJEF1dGhvcklELA0KCQkJCQkJCSd0aXRsZScgPT4g JFRpdGxlLA0KCQkJCQkJCSd1cmxfdGl0bGUnID0+ICR1cmxfdGl0bGUsDQoJCQkJCQkJJ2Nh dGVnb3J5MScgPT4gJENhdGVnb3J5MSwNCgkJCQkJCQknY2F0ZWdvcnkyJyA9PiAkQ2F0ZWdv cnkyLA0KCQkJCQkJCSdzZWN0aW9uJyA9PiAkU2VjdGlvbiwNCgkJCQkJCQkna2V5d29yZHMn ID0+ICRLZXl3b3JkcywNCgkJCQkJCQknYXJ0aWNsZV9pbWFnZScgPT4gJEltYWdlLA0KCQkJ CQkJCSdjb21tZW50c19jb3VudCcgPT4gJGNvbW1lbnRzX2NvdW50LA0KCQkJCQkJCSdib2R5 JyA9PiAkQm9keV9odG1sLA0KCQkJCQkJCSdleGNlcnB0JyA9PiAkRXhjZXJwdF9odG1sLA0K CQkJCQkJCSdvdmVycmlkZV9mb3JtJyA9PiAkb3ZlcnJpZGVfZm9ybSwNCgkJCQkJCQknc3Rh dHVzJz0+ICRTdGF0dXMNCgkJCQkJCSkNCgkJCQkJOw0KCQkJCX0NCgkJCQkNCgkJCQlAJG91 dFtdID0gDQoJCQkJCSc8dXJsPjxsb2M+Jy4NCgkJCQkJKCgkcHJlZlsncGVybWxpbmtfYXJ0 aWNsZSddKSA/IA0KCQkJCQkJCWh0bWxzcGVjaWFsY2hhcnMocGFyc2UoJHByZWZbJ3Blcm1s aW5rX2FydGljbGUnXSkpDQoJCQkJCQk6IA0KCQkJCQkJCXBlcm1saW5rdXJsX2lkKCRJRCkN CgkJCQkJKS4NCgkJCQkJJzwvbG9jPjxsYXN0bW9kPicuDQoJCQkJCSgoJHVMYXN0TW9kIDwg JHVQb3N0ZWQpID8gDQoJCQkJCQlkYXRlKCR0aW1lc3RhbXBmb3JtYXQsJHVQb3N0ZWQpIDog DQoJCQkJCQlkYXRlKCR0aW1lc3RhbXBmb3JtYXQsJHVMYXN0TW9kKQ0KCQkJCQkpLg0KCQkJ CQknPC9sYXN0bW9kPjwvdXJsPicNCgkJCQk7DQoJCQkJDQoJCQl9DQoJCQkkdGhpc2FydGlj bGUgPSAnJzsNCgkJfQ0KCQkNCgkJJHJzID0gDQoJCQlzYWZlX3Jvd3MoDQoJCQkJJyosIHVu aXhfdGltZXN0YW1wKHBvc3RlZCkgYXMgdXBvc3RlZCcsDQoJCQkJJ3JhaF9zaXRlbWFwJywN CgkJCQknMT0xIG9yZGVyIGJ5IHBvc3RlZCBkZXNjJw0KCQkJKTsNCgkJDQoJCWZvcmVhY2go JHJzIGFzICRhKSB7DQoJCQkkdXJsID0gcGFyc2UoJGFbJ3VybCddKTsNCgkJCSRvdXRbXSA9 ICc8dXJsPjxsb2M+Jy5yYWhfc2l0ZW1hcF91cmkoJHVybCwxKS4nPC9sb2M+JzsNCgkJCWlm KCRhWydpbmNsdWRlJ10gPT0gMSkNCgkJCQlAJG91dFtdID0gJzxsYXN0bW9kPicuZGF0ZSgk dGltZXN0YW1wZm9ybWF0LCRhWyd1cG9zdGVkJ10pLic8L2xhc3Rtb2Q+JzsNCgkJCSRvdXRb XSA9ICc8L3VybD4nOw0KCQl9DQoJCQ0KCQkkb3V0W10gPSAnPC91cmxzZXQ+JzsNCgkJJG91 dCA9IGltcGxvZGUoJycsJG91dCk7DQoJCQ0KCQllY2hvIChAJHByZWZbJ2NvbXByZXNzJ10g PT0gMSAmJiBmdW5jdGlvbl9leGlzdHMoJ2d6ZW5jb2RlJykpID8gZ3plbmNvZGUoJG91dCwk cHJlZlsnY29tcHJlc3Npb25fbGV2ZWwnXSkgOiAkb3V0Ow0KCQlleGl0KCk7DQoJfQ0KDQov KioNCglEZWxpdmVycyB0aGUgcGFuZWxzDQoqLw0KDQoJZnVuY3Rpb24gcmFoX3NpdGVtYXBf cGFnZSgpIHsNCgkJZ2xvYmFsICRzdGVwOw0KCQlyZXF1aXJlX3ByaXZzKCdyYWhfc2l0ZW1h cCcpOw0KCQlyYWhfc2l0ZW1hcF9pbnN0YWxsKCk7DQoJCWlmKGluX2FycmF5KCRzdGVwLGFy cmF5KA0KCQkJJ3JhaF9zaXRlbWFwX3NhdmUnLA0KCQkJJ3JhaF9zaXRlbWFwX2N1c3RvbV9s aXN0JywNCgkJCSdyYWhfc2l0ZW1hcF9jdXN0b21fZm9ybScsDQoJCQkncmFoX3NpdGVtYXBf Y3VzdG9tX3NhdmUnLA0KCQkJJ3JhaF9zaXRlbWFwX2RlbGV0ZScNCgkJKSkpICRzdGVwKCk7 DQoJCWVsc2UgcmFoX3NpdGVtYXBfbGlzdCgpOw0KCX0NCg0KLyoqDQoJUHJlZmVyZW5jZXMg cGFuZWwNCiovDQoNCglmdW5jdGlvbiByYWhfc2l0ZW1hcF9saXN0KCRtZXNzYWdlPScnKSB7 DQoJCQ0KCQkkcHJlZiA9IA0KCQkJcmFoX3NpdGVtYXBfcHJlZnMoKTsNCgkJDQoJCXJhaF9z aXRlbWFwX2hlYWRlcigNCgkJCQ0KCQkJJwk8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0i aW5kZXgucGhwIj4nLm4uDQoJCQkNCgkJCScJCTxwPjxzdHJvbmc+R2VuZXJhbCBwcmVmZXJl bmNlczwvc3Ryb25nPjwvcD4nLm4uDQoJCQkNCgkJCScJCTxwIHRpdGxlPSJDbGljayB0byBl eHBhbmQiIGNsYXNzPSJyYWhfc2l0ZW1hcF9oZWFkaW5nIj4nLm4uDQoJCQknCQkJKyA8c3Bh bj5FeGNsdWRlIHNlY3Rpb25zIGFuZCBjYXRlZ29yaWVzIGZyb20gdGhlIHNpdGVtYXA8L3Nw YW4+Jy5uLg0KCQkJJwkJPC9wPicubi4NCgkJCQ0KCQkJJwkJPGRpdiBjbGFzcz0icmFoX3Np dGVtYXBfbW9yZSI+Jy5uLg0KCQkJDQoJCQlyYWhfc2l0ZW1hcF9saXN0aW5nKCdFeGNsdWRl IHNlY3Rpb25zJywnc2VjdGlvbnMnLCd0eHBfc2VjdGlvbicsIm5hbWUgIT0gJ2RlZmF1bHQn IikuDQoJCQlyYWhfc2l0ZW1hcF9saXN0aW5nKCdFeGNsdWRlIGNhdGVnb3JpZXMnLCdjYXRl Z29yaWVzJywndHhwX2NhdGVnb3J5JywibmFtZSAhPSAncm9vdCcgYW5kIHRpdGxlICE9ICdy b290JyIpLg0KCQkJDQoJCQknCQkJPGRpdiBjbGFzcz0icmFoX3NpdGVtYXBfY29sdW1uIj4n Lm4uDQoJCQkNCgkJCScJCQkJPHN0cm9uZz5BZHZhbmNlZCBzZXR0aW5nczwvc3Ryb25nPjxi ciAvPicubi4NCgkJCScJCQkJPGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0i bm9zZWN0aW9ucyIgdmFsdWU9IjEiJy4oKCRwcmVmWydub3NlY3Rpb25zJ10gPT0gMSkgPyAn IGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4nIC8+IEV4Y2x1ZGUgYWxsIHNlY3Rpb24gVVJM czwvbGFiZWw+PGJyIC8+Jy5uLg0KCQkJJwkJCQk8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNr Ym94IiBuYW1lPSJub2ZpbGUiIHZhbHVlPSIxIicuKCgkcHJlZlsnbm9maWxlJ10gPT0gMSkg PyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4nIC8+IEV4Y2x1ZGUgYWxsIGZpbGUtdHlw ZSBjYXRlZ29yeSBVUkxzPC9sYWJlbD48YnIgLz4nLm4uDQoJCQknCQkJCTxsYWJlbD48aW5w dXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im5vaW1hZ2UiIHZhbHVlPSIxIicuKCgkcHJlZlsn bm9pbWFnZSddID09IDEpID8gJyBjaGVja2VkPSJjaGVja2VkIicgOiAnJykuJyAvPiBFeGNs dWRlIGFsbCBpbWFnZS10eXBlIGNhdGVnb3J5IFVSTHM8L2xhYmVsPjxiciAvPicubi4NCgkJ CScJCQkJPGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibm9saW5rIiB2YWx1 ZT0iMSInLigoJHByZWZbJ25vbGluayddID09IDEpID8gJyBjaGVja2VkPSJjaGVja2VkIicg OiAnJykuJyAvPiBFeGNsdWRlIGFsbCBsaW5rLXR5cGUgY2F0ZWdvcnkgVVJMczwvbGFiZWw+ PGJyIC8+Jy5uLg0KCQkJJwkJCQk8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1l PSJub2NhdGVnb3JpZXMiIHZhbHVlPSIxIicuKCgkcHJlZlsnbm9jYXRlZ29yaWVzJ10gPT0g MSkgPyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4nIC8+IEV4Y2x1ZGUgYWxsIGFydGlj bGUtdHlwZSBjYXRlZ29yeSBVUkxzPC9sYWJlbD48YnIgLz4nLm4uDQoJCQkNCgkJCQ0KCQkJ JwkJCTwvZGl2Picubi4NCgkJCQ0KCQkJJwkJPC9kaXY+Jy5uLg0KCQkJDQoJCQknCQk8cCB0 aXRsZT0iQ2xpY2sgdG8gZXhwYW5kIiBjbGFzcz0icmFoX3NpdGVtYXBfaGVhZGluZyI+Jy5u Lg0KCQkJJwkJCSsgPHNwYW4+RmlsdGVyIGFydGljbGVzIGZyb20gdGhlIHNpdGVtYXA8L3Nw YW4+Jy5uLg0KCQkJJwkJPC9wPicubi4NCgkJCQ0KCQkJJwkJPGRpdiBjbGFzcz0icmFoX3Np dGVtYXBfbW9yZSI+Jy5uLg0KCQkJDQoJCQkNCgkJCXJhaF9zaXRlbWFwX2xpc3RpbmcoJ0V4 Y2x1ZGUgYXJ0aWNsZSBzZWN0aW9ucycsJ2FydGljbGVzZWN0aW9ucycsJ3R4cF9zZWN0aW9u JywibmFtZSAhPSAnZGVmYXVsdCciKS4NCgkJCXJhaF9zaXRlbWFwX2xpc3RpbmcoJ0V4Y2x1 ZGUgYXJ0aWNsZSBjYXRlZ29yaWVzJywnYXJ0aWNsZWNhdGVnb3JpZXMnLCd0eHBfY2F0ZWdv cnknLCJuYW1lICE9ICdyb290JyBhbmQgdGl0bGUgIT0gJ3Jvb3QnIGFuZCB0eXBlID0gJ2Fy dGljbGUnIikuDQoJCQkNCgkJCScJCQk8ZGl2IGNsYXNzPSJyYWhfc2l0ZW1hcF9jb2x1bW4i Picubi4NCgkJCScJCQkJPHN0cm9uZz5BZHZhbmNlZCBzZXR0aW5nczwvc3Ryb25nPjxiciAv Picubi4NCgkJCScJCQkJPGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibm9h cnRpY2xlcyIgdmFsdWU9IjEiJy4oKCRwcmVmWydub2FydGljbGVzJ10gPT0gMSkgPyAnIGNo ZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4nIC8+IERvblwndCBpbmNsdWRlIGFydGljbGVzIGlu IHNpdGVtYXA8L2xhYmVsPjxiciAvPicubi4NCgkJCScJCQkJPGxhYmVsPjxpbnB1dCB0eXBl PSJjaGVja2JveCIgbmFtZT0iYXJ0aWNsZXN0YXR1cyIgdmFsdWU9IjUiJy4oKCRwcmVmWydh cnRpY2xlc3RhdHVzJ10gPT0gNSkgPyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4nIC8+ IEV4Y2x1ZGUgc3RpY2t5IGFydGljbGVzPC9sYWJlbD48YnIgLz4nLm4uDQoJCQknCQkJCTxs YWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImFydGljbGVmdXR1cmUiIHZhbHVl PSIxIicuKCgkcHJlZlsnYXJ0aWNsZWZ1dHVyZSddID09IDEpID8gJyBjaGVja2VkPSJjaGVj a2VkIicgOiAnJykuJyAvPiBFeGNsdWRlIGZ1dHVyZSBhcnRpY2xlczwvbGFiZWw+PGJyIC8+ Jy5uLg0KCQkJJwkJCQk8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJhcnRp Y2xlcGFzdCIgdmFsdWU9IjEiJy4oKCRwcmVmWydhcnRpY2xlcGFzdCddID09IDEpID8gJyBj aGVja2VkPSJjaGVja2VkIicgOiAnJykuJyAvPiBFeGNsdWRlIHBhc3QgYXJ0aWNsZXM8L2xh YmVsPjxiciAvPicubi4NCgkJCScJCQkJPGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIg bmFtZT0iYXJ0aWNsZWV4cGlyZWQiIHZhbHVlPSIxIicuKCgkcHJlZlsnYXJ0aWNsZWV4cGly ZWQnXSA9PSAxKSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLicgLz4gRXhjbHVkZSBl eHBpcmVkIGFydGljbGVzPC9sYWJlbD4nLm4uDQoJCQknCQkJPC9kaXY+Jy5uLg0KCQkJDQoJ CQknCQk8L2Rpdj4nLm4uDQoJCQkNCgkJCScJCTxwPjxzdHJvbmc+QWR2YW5jZWQgc2V0dGlu Z3M8L3N0cm9uZz48L3A+Jy5uLg0KCQkJDQoJCQknCQk8cCB0aXRsZT0iQ2xpY2sgdG8gZXhw YW5kIiBjbGFzcz0icmFoX3NpdGVtYXBfaGVhZGluZyI+Jy5uLg0KCQkJJwkJCSsgPHNwYW4+ Q29tcHJlc3Npb24gbWV0aG9kczwvc3Bhbj4nLm4uDQoJCQknCQk8L3A+Jy5uLg0KCQkJDQoJ CQknCQk8ZGl2IGNsYXNzPSJyYWhfc2l0ZW1hcF9tb3JlIj4nLm4uDQoJCQkNCgkJCScJCQk8 cCBjbGFzcz0icmFoX3NpdGVtYXBfcGFyYWdyYXBoIj48c3Ryb25nPkNvbXByZXNzaW9uLjwv c3Ryb25nPiBXaXRoIHRoZXNlIHNldHRpbmdzIHlvdSBjYW4gY29udHJvbCBjb21wcmVzc2lv biBhbmQgZXZlbiB0dXJuIGl0IG9mZiBpZiBpdCBjYXVzZXMgcHJvYmxlbXMgb24geW91ciBz ZXJ2ZXIuIEl0IGlzIHJlY29tbWVkZWQgdG8gbGVhdmUgY29tcHJlc3Npb24gb24gaWYgcG9z c2libGUuIENvbXByZXNzaW9uIGxldmVsIDAgaXMgdGhlIG1pbGRlc3QgYW5kIDkgaXMgdGhl IG1heGltdW0gY29tcHJlc3Npb24uPC9wPicubi4NCgkJCScJCQk8cD4nLm4uDQoJCQknCQkJ CTxsYWJlbCBmb3I9InJhaF9zaXRlbWFwX2NvbXByZXNzIj5Vc2UgR3ppcCBjb21wcmVzc2lv bjo8L2xhYmVsPjxiciAvPicubi4NCgkJCQ0KCQkJJwkJCQk8c2VsZWN0IG5hbWU9ImNvbXBy ZXNzIiBpZD0icmFoX3NpdGVtYXBfY29tcHJlc3MiPicubi4NCgkJCScJCQkJCTxvcHRpb24g dmFsdWU9IjEiJy4oKCRwcmVmWydjb21wcmVzcyddID09IDEpID8gJyBzZWxlY3RlZD0ic2Vs ZWN0ZWQiJyA6ICcnKS4nPlllczwvb3B0aW9uPicubi4NCgkJCScJCQkJCTxvcHRpb24gdmFs dWU9IjAiJy4oKCRwcmVmWydjb21wcmVzcyddID09IDApID8gJyBzZWxlY3RlZD0ic2VsZWN0 ZWQiJyA6ICcnKS4nPk5vPC9vcHRpb24+Jy5uLg0KCQkJJwkJCQk8L3NlbGVjdD4nLm4uDQoJ CQkNCgkJCScJCQk8L3A+Jy5uLg0KCQkJJwkJCTxwPicubi4NCgkJCScJCQkJPGxhYmVsIGZv cj0icmFoX3NpdGVtYXBfY29tcHJlc3Npb25fbGV2ZWwiPkNvbXByZXNzaW9uIGxldmVsOjwv bGFiZWw+PGJyIC8+Jy5uLg0KCQkJDQoJCQknCQkJCTxzZWxlY3QgbmFtZT0iY29tcHJlc3Np b25fbGV2ZWwiIGlkPSJyYWhfc2l0ZW1hcF9jb21wcmVzc2lvbl9sZXZlbCI+Jy5uLg0KCQkJ JwkJCQkJPG9wdGlvbiB2YWx1ZT0iMCInLigoJHByZWZbJ2NvbXByZXNzaW9uX2xldmVsJ10g PT0gMCkgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycpLic+MDwvb3B0aW9uPicubi4N CgkJCScJCQkJCTxvcHRpb24gdmFsdWU9IjEiJy4oKCRwcmVmWydjb21wcmVzc2lvbl9sZXZl bCddID09IDEpID8gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnKS4nPjE8L29wdGlvbj4n Lm4uDQoJCQknCQkJCQk8b3B0aW9uIHZhbHVlPSIyIicuKCgkcHJlZlsnY29tcHJlc3Npb25f bGV2ZWwnXSA9PSAyKSA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJykuJz4yPC9vcHRp b24+Jy5uLg0KCQkJJwkJCQkJPG9wdGlvbiB2YWx1ZT0iMyInLigoJHByZWZbJ2NvbXByZXNz aW9uX2xldmVsJ10gPT0gMykgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycpLic+Mzwv b3B0aW9uPicubi4NCgkJCScJCQkJCTxvcHRpb24gdmFsdWU9IjQiJy4oKCRwcmVmWydjb21w cmVzc2lvbl9sZXZlbCddID09IDQpID8gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnKS4n PjQ8L29wdGlvbj4nLm4uDQoJCQknCQkJCQk8b3B0aW9uIHZhbHVlPSI1IicuKCgkcHJlZlsn Y29tcHJlc3Npb25fbGV2ZWwnXSA9PSA1KSA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAn JykuJz41PC9vcHRpb24+Jy5uLg0KCQkJJwkJCQkJPG9wdGlvbiB2YWx1ZT0iNiInLigoJHBy ZWZbJ2NvbXByZXNzaW9uX2xldmVsJ10gPT0gNikgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCIn IDogJycpLic+Njwvb3B0aW9uPicubi4NCgkJCScJCQkJCTxvcHRpb24gdmFsdWU9IjciJy4o KCRwcmVmWydjb21wcmVzc2lvbl9sZXZlbCddID09IDcpID8gJyBzZWxlY3RlZD0ic2VsZWN0 ZWQiJyA6ICcnKS4nPjc8L29wdGlvbj4nLm4uDQoJCQknCQkJCQk8b3B0aW9uIHZhbHVlPSI4 IicuKCgkcHJlZlsnY29tcHJlc3Npb25fbGV2ZWwnXSA9PSA4KSA/ICcgc2VsZWN0ZWQ9InNl bGVjdGVkIicgOiAnJykuJz44PC9vcHRpb24+Jy5uLg0KCQkJJwkJCQkJPG9wdGlvbiB2YWx1 ZT0iOSInLigoJHByZWZbJ2NvbXByZXNzaW9uX2xldmVsJ10gPT0gOSkgPyAnIHNlbGVjdGVk PSJzZWxlY3RlZCInIDogJycpLic+OTwvb3B0aW9uPicubi4NCgkJCScJCQkJPC9zZWxlY3Q+ Jy5uLg0KCQkJDQoJCQknCQkJPC9wPicubi4NCgkJCQ0KCQkJJwkJCTxwPicubi4NCgkJCScJ CQkJPGxhYmVsIGZvcj0icmFoX3NpdGVtYXBfemxpYl9vdXRwdXQiPlNldCB6bGliIG91dHB1 dCBjb21wcmVzc2lvbiBvZmYuIElmIHNldCB0byBubywgY29uZmlndXJhdGlvbiBpcyBub3Qg bW9kaWZpZWQ6PC9sYWJlbD48YnIgLz4nLm4uDQoJCQkNCgkJCScJCQkJPHNlbGVjdCBuYW1l PSJ6bGliX291dHB1dCIgaWQ9InJhaF9zaXRlbWFwX3psaWJfb3V0cHV0Ij4nLm4uDQoJCQkn CQkJCQk8b3B0aW9uIHZhbHVlPSIxIicuKCgkcHJlZlsnemxpYl9vdXRwdXQnXSA9PSAxKSA/ ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJykuJz5ZZXM8L29wdGlvbj4nLm4uDQoJCQkn CQkJCQk8b3B0aW9uIHZhbHVlPSIwIicuKCgkcHJlZlsnemxpYl9vdXRwdXQnXSA9PSAwKSA/ ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJykuJz5Obzwvb3B0aW9uPicubi4NCgkJCScJ CQkJPC9zZWxlY3Q+Jy5uLg0KCQkJDQoJCQknCQkJPC9wPicubi4NCgkJCScJCTwvZGl2Picu bi4NCgkJCQ0KCQkJDQoJCQknCQk8cCB0aXRsZT0iQ2xpY2sgdG8gZXhwYW5kIiBjbGFzcz0i cmFoX3NpdGVtYXBfaGVhZGluZyI+Jy5uLg0KCQkJJwkJCSsgPHNwYW4+T3ZlcnJpZGUgdGlt ZXN0YW1wIGZvcm1hdDwvc3Bhbj4nLm4uDQoJCQknCQk8L3A+Jy5uLg0KCQkJDQoJCQknCQk8 ZGl2IGNsYXNzPSJyYWhfc2l0ZW1hcF9tb3JlIj4nLm4uDQoJCQkNCgkJCScJCQk8cCBjbGFz cz0icmFoX3NpdGVtYXBfcGFyYWdyYXBoIj48c3Ryb25nPlRpbWVzdGFtcHMuPC9zdHJvbmc+ IEN1c3RvbWl6ZSB0aGUgZGF0ZSBmb3JtYXQgdXNlZCBpbiBsYXN0IG1vZGlmaWVkIHRpbWVz dGFtcHMuIFVzZSA8YSBocmVmPSJodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24u ZGF0ZS5waHAiPmRhdGUoKTwvYT4gc3RyaW5nIHZhbHVlcy4gSWYgdW5zZXQgKGxlZnQgZW1w dHkpIGRlZmF1bHQgSVNPIDg2MDEgZGF0ZSAoPGNvZGU+YzwvY29kZT4pIGlzIHVzZWQuIFVz ZSB0aGlzIHNldHRpbmcgaWYgeW91IHdhbnQgdG8gaGFyZC1jb2RlL292ZXJyaWRlIHRpbWVz dGFtcHMsIHRpbWV6b25lcyBvciBpZiB5b3VyIHNlcnZlciBkb2VzblwndCBzdXBwb3J0IDxj b2RlPmM8L2NvZGU+IGZvcm1hdC48L3A+Jy5uLg0KCQkJDQoJCQknCQkJPHA+Jy5uLg0KCQkJ JwkJCQk8bGFiZWwgZm9yPSJyYWhfc2l0ZW1hcF90aW1lc3RhbXBmb3JtYXQiPkZvcm1hdDo8 L2xhYmVsPjxiciAvPicubi4NCgkJCScJCQkJPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJl ZGl0IiBzdHlsZT0id2lkdGg6IDk0MHB4OyIgbmFtZT0idGltZXN0YW1wZm9ybWF0IiBpZD0i cmFoX3NpdGVtYXBfdGltZXN0YW1wZm9ybWF0IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJz KCRwcmVmWyd0aW1lc3RhbXBmb3JtYXQnXSkuJyIgLz4nLm4uDQoJCQknCQkJPC9wPicubi4N CgkJCQ0KCQkJJwkJPC9kaXY+Jy5uLg0KCQkJDQoJCQknCQk8cCB0aXRsZT0iQ2xpY2sgdG8g ZXhwYW5kIiBjbGFzcz0icmFoX3NpdGVtYXBfaGVhZGluZyI+Jy5uLg0KCQkJJwkJCSsgPHNw YW4+T3ZlcnJpZGUgcGVybWxpbmsgZm9ybWF0czwvc3Bhbj4nLm4uDQoJCQknCQk8L3A+Jy5u Lg0KCQkJDQoJCQknCQk8ZGl2IGNsYXNzPSJyYWhfc2l0ZW1hcF9tb3JlIj4nLm4uDQoJCQkN CgkJCScJCQk8cCBjbGFzcz0icmFoX3NpdGVtYXBfcGFyYWdyYXBoIj48c3Ryb25nPlBlcm1s aW5rcy48L3N0cm9uZz4gV2l0aCB0aGVzZSBzZXR0aW5ncyB5b3UgY2FuIG1ha2UgdGhlIFNp dGVtYXBcJ3MgVVJMcyB0byBtYXRjaCB5b3VyIG93biBVUkwgcmV3cml0aW5nIHJ1bGVzLCBv ciBwZXJtbGlua3MgbWFkZSBieSBhIDxlbT5jdXN0b20gcGVybWxpbmsgcnVsZTwvZW0+IHBs dWdpbi4gWW91IGNhbiBsZWF2ZSB0aGVzZSBmaWVsZHMgZW1wdHksIGlmIHVzaW5nIFRYUFwn cyBpbmJ1aWxkIHBlcm1saW5rIHJ1bGVzLiBOb3RlIHRoYXQgdGhlc2Ugc2V0dGluZyBkbyBu b3QgcmV3cml0ZSBUWFBcJ3MgcGVybWxpbmtzIGZvciB5b3UsIHVzZSBvbmx5IGZvciBtYXRj aGluZyBub3QgcmV3cml0aW5nITwvcD4nLm4uDQoJCQknCQkJPHA+Jy5uLg0KCQkJJwkJCQk8 bGFiZWwgZm9yPSJyYWhfc2l0ZW1hcF9wZXJtbGlua19jYXRlZ29yeSI+Q2F0ZWdvcnkgVVJM czo8L2xhYmVsPjxiciAvPicubi4NCgkJCScJCQkJPGlucHV0IHR5cGU9InRleHQiIGNsYXNz PSJlZGl0IiBuYW1lPSJwZXJtbGlua19jYXRlZ29yeSIgaWQ9InJhaF9zaXRlbWFwX3Blcm1s aW5rX2NhdGVnb3J5IiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRwcmVmWydwZXJtbGlu a19jYXRlZ29yeSddKS4nIiAvPicubi4NCgkJCScJCQk8L3A+Jy5uLg0KCQkJJwkJCTxwPicu bi4NCgkJCScJCQkJPGxhYmVsIGZvcj0icmFoX3NpdGVtYXBfcGVybWxpbmtfc2VjdGlvbiI+ U2VjdGlvbiBVUkxzOjwvbGFiZWw+PGJyIC8+Jy5uLg0KCQkJJwkJCQk8aW5wdXQgdHlwZT0i dGV4dCIgY2xhc3M9ImVkaXQiIG5hbWU9InBlcm1saW5rX3NlY3Rpb24iIGlkPSJyYWhfc2l0 ZW1hcF9wZXJtbGlua19zZWN0aW9uIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRwcmVm WydwZXJtbGlua19zZWN0aW9uJ10pLiciIC8+Jy5uLg0KCQkJJwkJCTwvcD4nLm4uDQoJCQkn CQkJPHA+Jy5uLg0KCQkJJwkJCQk8bGFiZWwgZm9yPSJyYWhfc2l0ZW1hcF9wZXJtbGlua19h cnRpY2xlIj5BcnRpY2xlIFVSTHM6PC9sYWJlbD48YnIgLz4nLm4uDQoJCQknCQkJCTxpbnB1 dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZWRpdCIgbmFtZT0icGVybWxpbmtfYXJ0aWNsZSIgaWQ9 InJhaF9zaXRlbWFwX3Blcm1saW5rX2FydGljbGUiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hh cnMoJHByZWZbJ3Blcm1saW5rX2FydGljbGUnXSkuJyIgLz4nLm4uDQoJCQknCQkJPC9wPicu bi4NCgkJCQ0KCQkJJwkJPC9kaXY+Jy5uLg0KCQkJDQoJCQknCQk8aW5wdXQgdHlwZT0iaGlk ZGVuIiBuYW1lPSJldmVudCIgdmFsdWU9InJhaF9zaXRlbWFwIiAvPicubi4NCgkJCScJCTxp bnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InN0ZXAiIHZhbHVlPSJyYWhfc2l0ZW1hcF9zYXZl IiAvPicubi4NCgkJCQ0KCQkJJwkJPHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Iicu Z1R4dCgnc2F2ZScpLiciIGNsYXNzPSJwdWJsaXNoIiAvPjwvcD4nLm4uDQoJCQkNCgkJCScJ PC9mb3JtPicsDQoJCQkNCgkJCSdyYWhfc2l0ZW1hcCcsDQoJCQknTWFuYWdlIHlvdXIgc2l0 ZW1hcCcsDQoJCQknU2l0ZW1hcC5vcmcgU2l0ZW1hcHMnLA0KCQkJJG1lc3NhZ2UNCgkJCQ0K CQkpOw0KCX0NCg0KLyoqDQoJUGFuZWwsIGxpc3RzIGN1c3RvbSBVUkxzDQoqLw0KDQoJZnVu Y3Rpb24gcmFoX3NpdGVtYXBfY3VzdG9tX2xpc3QoJG1lc3NhZ2U9JycpIHsNCg0KCQkkb3V0 W10gPSANCgkJCScJPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249ImluZGV4LnBocCI+Jy5u Lg0KCQkJJwkJPHRhYmxlIGlkPSJsaXN0IiBjbGFzcz0ibGlzdCByYWhfc2l0ZW1hcF90YWJs ZSIgIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4nLm4uDQoJ CQknCQkJPHRyPicubi4NCgkJCScJCQkJPHRoPlVSTDwvdGg+Jy5uLg0KCQkJJwkJCQk8dGg+ TGFzdE1vZDwvdGg+Jy5uLg0KCQkJJwkJCQk8dGg+SW5jbHVkZSBMYXN0TW9kPC90aD4nLm4u DQoJCQknCQkJCTx0aD5WaWV3PC90aD4nLm4uDQoJCQknCQkJCTx0aD4mIzE2MDs8L3RoPicu bi4NCgkJCScJCQk8L3RyPicubjsNCgkJDQoJCSRycyA9DQoJCQlzYWZlX3Jvd3MoDQoJCQkJ J3VybCxwb3N0ZWQsaW5jbHVkZScsDQoJCQkJJ3JhaF9zaXRlbWFwJywNCgkJCQkiMT0xIG9y ZGVyIGJ5IHBvc3RlZCBkZXNjIg0KCQkJKTsNCgkJDQoJCWlmKCRycykgew0KCQkJZm9yZWFj aCgkcnMgYXMgJGEpIHsNCgkJCQkkdXJpID0gcmFoX3NpdGVtYXBfdXJpKCRhWyd1cmwnXSwx KTsNCgkJCQkkb3V0W10gPSANCgkJCQkJJwkJCTx0cj4nLm4uDQoJCQkJCScJCQkJPHRkPjxh IGhyZWY9Ij9ldmVudD1yYWhfc2l0ZW1hcCZhbXA7c3RlcD1yYWhfc2l0ZW1hcF9jdXN0b21f Zm9ybSZhbXA7ZWRpdD0nLnVybGVuY29kZSgkYVsndXJsJ10pLiciPicuJHVyaS4nPC9hPjwv dGQ+Jy5uLg0KCQkJCQknCQkJCTx0ZD4nLiRhWydwb3N0ZWQnXS4nPC90ZD4nLm4uDQoJCQkJ CScJCQkJPHRkPicuKCgkYVsnaW5jbHVkZSddID09IDEpID8gJ1llcycgOiAnTm8nKS4nPC90 ZD4nLm4uDQoJCQkJCScJCQkJPHRkPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSInLmh0bWxz cGVjaWFsY2hhcnMoJHVyaSkuJyI+Jy5nVHh0KCd2aWV3JykuJzwvYT48L3RkPicubi4NCgkJ CQkJJwkJCQk8dGQ+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzZWxlY3RlZFtdIiB2 YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRhWyd1cmwnXSkuJyIgLz48L3RkPicubi4NCgkJ CQkJJwkJCTwvdHI+Jy5uOw0KCQkJfQ0KCQl9IGVsc2UgDQoJCQkkb3V0W10gPSAgJwkJCTx0 cj48dGQgY29sc3Bhbj0iNSI+Tm8gY3VzdG9tIFVSTHMgZm91bmQuPC90ZD48L3RyPicubjsN CgkJDQoJCSRvdXRbXSA9ICANCgkJCScJCTwvdGFibGU+Jy5uLg0KCQkJJwkJPHAgaWQ9InJh aF9zaXRlbWFwX3N0ZXAiPicubi4NCgkJCScJCQk8c2VsZWN0IG5hbWU9InN0ZXAiPicubi4N CgkJCScJCQkJPG9wdGlvbiB2YWx1ZT0iIj5XaXRoIHNlbGVjdGVkLi4uPC9vcHRpb24+Jy5u Lg0KCQkJJwkJCQk8b3B0aW9uIHZhbHVlPSJyYWhfc2l0ZW1hcF9kZWxldGUiPkRlbGV0ZTwv b3B0aW9uPicubi4NCgkJCScJCQk8L3NlbGVjdD4nLm4uDQoJCQknCQkJPGlucHV0IHR5cGU9 InN1Ym1pdCIgY2xhc3M9InNtYWxsZXJib3giIHZhbHVlPSJHbyIgLz4nLm4uDQoJCQknCQk8 L3A+Jy5uLg0KCQkJJwkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZXZlbnQiIHZhbHVl PSJyYWhfc2l0ZW1hcCIgLz4nLm4uDQoJCQknCTwvZm9ybT4nLm47DQoJCQ0KCQlyYWhfc2l0 ZW1hcF9oZWFkZXIoDQoJCQkkb3V0LA0KCQkJJ3JhaF9zaXRlbWFwJywNCgkJCSdMaXN0IG9m IGN1c3RvbSBVUkxzJywNCgkJCSdTaXRlbWFwJywNCgkJCSRtZXNzYWdlDQoJCSk7DQoJfQ0K DQovKioNCglQYW5lbCB0byBhZGQgY3VzdG9tIFVSTHMNCiovDQoNCglmdW5jdGlvbiByYWhf c2l0ZW1hcF9jdXN0b21fZm9ybSgkbWVzc2FnZT0nJykgew0KCQkNCgkJJGVkaXQgPSBncHMo J2VkaXQnKTsNCgkJDQoJCWlmKCRlZGl0KSB7DQoJCQkNCgkJCSRycyA9IA0KCQkJCXNhZmVf cm93KA0KCQkJCQknKicsDQoJCQkJCSdyYWhfc2l0ZW1hcCcsDQoJCQkJCSJ1cmw9JyIuZG9T bGFzaCgkZWRpdCkuIiciDQoJCQkJKTsNCgkJCQ0KCQkJaWYoISRycykgew0KCQkJCXJhaF9z aXRlbWFwX2N1c3RvbV9saXN0KCdTZWxlY3Rpb24gbm90IGZvdW5kLicpOw0KCQkJCXJldHVy bjsNCgkJCX0NCgkJCQ0KCQkJZXh0cmFjdCgkcnMpOw0KCQkNCgkJfQ0KCQkNCgkJaWYoIWlz c2V0KCRycykpDQoJCQlleHRyYWN0KGdwc2EoYXJyYXkoDQoJCQkJJ3VybCcsJ2luY2x1ZGUn LCdwb3N0ZWQnDQoJCQkpKSk7DQoJCQ0KCQlyYWhfc2l0ZW1hcF9oZWFkZXIoDQoJCQknCTxm b3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSJpbmRleC5waHAiPicubi4NCgkJCScJCTxwPicu bi4NCgkJCScJCQk8bGFiZWwgZm9yPSJyYWhfc2l0ZW1hcF91cmwiPlVSTDo8L2xhYmVsPjxi ciAvPicubi4NCgkJCScJCQk8aW5wdXQgaWQ9InJhaF9zaXRlbWFwX3VybCIgY2xhc3M9ImVk aXQiIHR5cGU9InRleHQiIG5hbWU9InVybCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygk dXJsKS4nIiAvPicubi4NCgkJCScJCTwvcD4nLm4uDQoJCQknCQk8cD4nLm4uDQoJCQknCQkJ PGxhYmVsIGZvcj0icmFoX3NpdGVtYXBfcG9zdGVkIj5MYXN0TW9kIChZWVlZLW1tLWRkIEhI Ok1NOlNTKS4gTGVhdmUgZW1wdHkgdG8gdXNlIGN1cnJlbnQgdGltZTo8L2xhYmVsPjxiciAv Picubi4NCgkJCScJCQk8aW5wdXQgaWQ9InJhaF9zaXRlbWFwX3Bvc3RlZCIgY2xhc3M9ImVk aXQiIHR5cGU9InRleHQiIG5hbWU9InBvc3RlZCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFy cygkcG9zdGVkKS4nIiAvPicubi4NCgkJCScJCTwvcD4nLm4uDQoJCQknCQk8cD4nLm4uDQoJ CQknCQkJPGxhYmVsIGZvcj0icmFoX3NpdGVtYXBfbGFzdG1vZCI+SW5jbHVkZSBMYXN0TW9k OjwvbGFiZWw+PGJyIC8+Jy5uLg0KCQkJJwkJCTxzZWxlY3QgaWQ9InJhaF9zaXRlbWFwX2xh c3Rtb2QiIG5hbWU9ImluY2x1ZGUiPicubi4NCgkJCScJCQkJCTxvcHRpb24gdmFsdWU9IjAi Jy4oKCRpbmNsdWRlID09IDApID8gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnKS4nPicu Z1R4dCgnbm8nKS4nIChSZWNvbW1lbmRlZCk8L29wdGlvbj4nLm4uDQoJCQknCQkJCQk8b3B0 aW9uIHZhbHVlPSIxIicuKCgkaW5jbHVkZSA9PSAxKSA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVk IicgOiAnJykuJz4nLmdUeHQoJ3llcycpLic8L29wdGlvbj4nLm4uDQoJCQknCQkJPC9zZWxl Y3Q+Jy5uLg0KCQkJJwkJPC9wPicubi4NCgkJCScJCTxwPjxpbnB1dCB0eXBlPSJzdWJtaXQi IHZhbHVlPSInLmdUeHQoJ3NhdmUnKS4nIiBjbGFzcz0icHVibGlzaCIgLz48L3A+Jy5uLg0K CQkJDQoJCQkoKCRlZGl0KSA/IA0KCQkJCScJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9 ImVkaXQiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJGVkaXQpLiciIC8+JyA6ICcnDQoJ CQkpLg0KCQkJDQoJCQknCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJldmVudCIgdmFs dWU9InJhaF9zaXRlbWFwIiAvPicubi4NCgkJCScJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5h bWU9InN0ZXAiIHZhbHVlPSJyYWhfc2l0ZW1hcF9jdXN0b21fc2F2ZSIgLz4nLm4uDQoJCQkN CgkJCScJPC9mb3JtPicNCgkJCQ0KCQkJLCdyYWhfc2l0ZW1hcCcsDQoJCQknQWRkIGEgbmV3 IGN1c3RvbSBVUkwnLA0KCQkJJ1NpdGVtYXAnLA0KCQkJJG1lc3NhZ2UNCgkJCQ0KCQkpOw0K CQkNCgl9DQoNCi8qKg0KCVNhdmVzIGN1c3RvbSBVUkwNCiovDQoNCglmdW5jdGlvbiByYWhf c2l0ZW1hcF9jdXN0b21fc2F2ZSgpIHsNCgkJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXko DQoJCQkndXJsJywNCgkJCSdwb3N0ZWQnLA0KCQkJJ2luY2x1ZGUnLA0KCQkJJ3Jlc2V0JywN CgkJCSdlZGl0Jw0KCQkpKSkpOw0KCQkNCgkJaWYoZW1wdHkoJHBvc3RlZCkgb3IgJHJlc2V0 ID09IDEpDQoJCQkkcG9zdGVkID0gJ3Bvc3RlZD1ub3coKSc7DQoJCWVsc2UgDQoJCQkkcG9z dGVkID0gInBvc3RlZD0nJHBvc3RlZCciOw0KCQkNCgkJaWYoISRlZGl0ICYmIHNhZmVfY291 bnQoJ3JhaF9zaXRlbWFwJywidXJsPSckdXJsJyIpICE9IDApIHsNCgkJCXJhaF9zaXRlbWFw X2N1c3RvbV9mb3JtKCdVUkwgYWxyZWFkeSBleGlzdHMuJyk7DQoJCQlyZXR1cm47DQoJCX0N CgkJDQoJCWlmKCRlZGl0ICYmIHNhZmVfY291bnQoJ3JhaF9zaXRlbWFwJywidXJsPSckZWRp dCciKSA9PSAxKSB7DQoJCQkNCgkJCWlmKCR1cmwgIT0gJGVkaXQgJiYgc2FmZV9jb3VudCgn cmFoX3NpdGVtYXAnLCJ1cmw9JyR1cmwnIikgPT0gMSkgew0KCQkJCXJhaF9zaXRlbWFwX2N1 c3RvbV9mb3JtKCdOZXcgVVJMIGFscmVhZHkgZXhpc3RzLicpOw0KCQkJCXJldHVybjsNCgkJ CX0NCgkJCQ0KCQkJc2FmZV91cGRhdGUoDQoJCQkJJ3JhaF9zaXRlbWFwJywNCgkJCQkiJHBv c3RlZCwNCgkJCQlpbmNsdWRlPSckaW5jbHVkZScsDQoJCQkJdXJsPSckdXJsJyIsDQoJCQkJ InVybD0nJGVkaXQnIg0KCQkJKTsNCgkJCQ0KCQkJcmFoX3NpdGVtYXBfY3VzdG9tX2xpc3Qo J1VSTCB1cGRhdGVkLicpOw0KCQkJcmV0dXJuOw0KCQkJDQoJCX0NCgkJDQoJCXNhZmVfaW5z ZXJ0KA0KCQkJJ3JhaF9zaXRlbWFwJywNCgkJCSJ1cmw9JyR1cmwnLA0KCQkJJHBvc3RlZCwN CgkJCWluY2x1ZGU9JyRpbmNsdWRlJyINCgkJKTsNCgkJDQoJCXJhaF9zaXRlbWFwX2N1c3Rv bV9saXN0KCdVUkwgYWRkZWQuJyk7DQoJCXJldHVybjsNCgl9DQoNCi8qKg0KCU91dHB1dHMg dGhlIHBhbmVsJ3MgQ1NTIGFuZCBKYXZhU2NyaXB0IHRvIHBhZ2UncyA8aGVhZD4gc2VnbWVu dA0KKi8NCg0KCWZ1bmN0aW9uIHJhaF9zaXRlbWFwX2hlYWQoKSB7DQoJCQ0KCQlnbG9iYWwg JGV2ZW50Ow0KCQkNCgkJaWYoJGV2ZW50ICE9ICdyYWhfc2l0ZW1hcCcpDQoJCQlyZXR1cm47 DQoJCQ0KCQllY2hvIDw8PEVPRg0KCQkJPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkJCQkj cmFoX3NpdGVtYXBfY29udGFpbmVyIHsNCgkJCQkJd2lkdGg6IDk1MHB4Ow0KCQkJCQltYXJn aW46IDAgYXV0bzsNCgkJCQl9DQoJCQkJI3JhaF9zaXRlbWFwX2NvbnRhaW5lciAjcmFoX3Np dGVtYXBfc3RlcCB7DQoJCQkJCXRleHQtYWxpZ246IHJpZ2h0Ow0KCQkJCQlwYWRkaW5nLXRv cDogMTBweDsNCgkJCQl9DQoJCQkJI3JhaF9zaXRlbWFwX2NvbnRhaW5lciAucmFoX3NpdGVt YXBfdGFibGUgew0KCQkJCQl3aWR0aDogMTAwJTsNCgkJCQl9DQoJCQkJI3JhaF9zaXRlbWFw X2NvbnRhaW5lciAucmFoX3NpdGVtYXBfY29sdW1uIHsNCgkJCQkJd2lkdGg6IDMxNXB4Ow0K CQkJCQlmbG9hdDogbGVmdDsNCgkJCQkJZGlzcGxheTogaW5saW5lOw0KCQkJCQlwYWRkaW5n OiAwIDAgMTBweCAwOw0KCQkJCX0NCgkJCQkjcmFoX3NpdGVtYXBfY29udGFpbmVyIC5yYWhf c2l0ZW1hcF9oZWFkaW5nIHsNCgkJCQkJZm9udC13ZWlnaHQ6IDkwMDsNCgkJCQkJcGFkZGlu ZzogNXB4IDA7DQoJCQkJCW1hcmdpbjogMCAwIDEwcHggMDsNCgkJCQkJYm9yZGVyLXRvcDog MXB4IHNvbGlkICNjY2M7DQoJCQkJCWJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOw0K CQkJCX0NCgkJCQkjcmFoX3NpdGVtYXBfY29udGFpbmVyIC5yYWhfc2l0ZW1hcF9oZWFkaW5n IHNwYW4gew0KCQkJCQljdXJzb3I6IHBvaW50ZXI7DQoJCQkJCWNvbG9yOiAjOTYzOw0KCQkJ CX0NCgkJCQkjcmFoX3NpdGVtYXBfY29udGFpbmVyIC5yYWhfc2l0ZW1hcF9oZWFkaW5nIHNw YW46aG92ZXIgew0KCQkJCQl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCgkJCQl9DQoJ CQkJI3JhaF9zaXRlbWFwX2NvbnRhaW5lciAucmFoX3NpdGVtYXBfbW9yZSB7DQoJCQkJCW92 ZXJmbG93OiBoaWRkZW47DQoJCQkJfQ0KCQkJCSNyYWhfc2l0ZW1hcF9jb250YWluZXIgaW5w dXQuZWRpdCB7DQoJCQkJCXdpZHRoOiA5NDBweDsNCgkJCQl9DQoJCQkJI3JhaF9zaXRlbWFw X3psaWJfb3V0cHV0LA0KCQkJCSNyYWhfc2l0ZW1hcF9jb21wcmVzc2lvbl9sZXZlbCwNCgkJ CQkjcmFoX3NpdGVtYXBfY29tcHJlc3MsDQoJCQkJI3JhaF9zaXRlbWFwX2xhc3Rtb2Qgew0K CQkJCQl3aWR0aDogNDUwcHg7DQoJCQkJfQ0KCQkJCS5yYWhfc2l0ZW1hcF9wYXJhZ3JhcGgg ew0KCQkJCQltYXJnaW46IDAgMCAxMHB4IDA7DQoJCQkJCXBhZGRpbmc6IDA7DQoJCQkJfQ0K CQkJPC9zdHlsZT4NCgkJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkJCQkk KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KCQkJCQkkKCcucmFoX3NpdGVtYXBfbW9y ZScpLmhpZGUoKTsNCgkJCQkJJCgnLnJhaF9zaXRlbWFwX2hlYWRpbmcnKS5jbGljayhmdW5j dGlvbigpew0KCQkJCQkJJCh0aGlzKS5uZXh0KCdkaXYucmFoX3NpdGVtYXBfbW9yZScpLnNs aWRlVG9nZ2xlKCk7DQoJCQkJCX0pOw0KCQkJCX0pOw0KCQkJPC9zY3JpcHQ+DQpFT0Y7DQoJ fQ0KDQovKioNCglUaGUgcGFuZWwncyBuYXZpZ2F0aW9uIGJhcg0KKi8NCg0KCWZ1bmN0aW9u IHJhaF9zaXRlbWFwX2hlYWRlcigkY29udGVudD0nJywkdGl0bGU9J3JhaF9zaXRlbWFwJywk bXNnPSdNYW5hZ2UgeW91ciBzaXRlbWFwJywkcGFnZXRvcD0nJywkbWVzc2FnZT0nJykgew0K CQkNCgkJcGFnZXRvcCgkcGFnZXRvcCwkbWVzc2FnZSk7DQoJCQ0KCQlpZihpc19hcnJheSgk Y29udGVudCkpDQoJCQkkY29udGVudCA9IGltcGxvZGUoJycsJGNvbnRlbnQpOw0KCQkNCgkJ ZWNobyANCgkJCW4uDQoJCQknCTxkaXYgaWQ9InJhaF9zaXRlbWFwX2NvbnRhaW5lciI+Jy5u Lg0KCQkJJwkJPGgxPjxzdHJvbmc+Jy4kdGl0bGUuJzwvc3Ryb25nPiB8ICcuJG1zZy4nPC9o MT4nLm4uDQoJCQknCQk8cCBpZD0icmFoX3NpdGVtYXBfbmF2Ij4nLg0KCQkJCQknICYjMTg3 OyA8YSBocmVmPSI/ZXZlbnQ9cmFoX3NpdGVtYXAiPlByZWZlcmVuY2VzPC9hPicuDQoJCQkJ CScgJiMxODc7IDxhIGhyZWY9Ij9ldmVudD1yYWhfc2l0ZW1hcCZhbXA7c3RlcD1yYWhfc2l0 ZW1hcF9jdXN0b21fZm9ybSI+QWRkIGN1c3RvbSBVUkw8L2E+Jy4NCgkJCQkJJyAmIzE4Nzsg PGEgaHJlZj0iP2V2ZW50PXJhaF9zaXRlbWFwJmFtcDtzdGVwPXJhaF9zaXRlbWFwX2N1c3Rv bV9saXN0Ij5MaXN0IG9mIGN1c3RvbSBVUkxzPC9hPicuDQoJCQkJCScgJiMxODc7IDxhIHRh cmdldD0iX2JsYW5rIiBocmVmPSInLmh1Lic/cmFoX3NpdGVtYXA9c2l0ZW1hcCI+VmlldyB0 aGUgc2l0ZW1hcDwvYT4nLg0KCQkJCQknPC9wPicubi4NCgkJCSRjb250ZW50Lm4uCQ0KCQkJ Jwk8L2Rpdj4nLm47DQoJfQ0KDQovKioNCglCdWlsZHMgdGhlIHJlcXVpcmVkIGluIGFycmF5 IGZvciBTUUwgc3RhdGVtZW50cw0KKi8NCg0KCWZ1bmN0aW9uIHJhaF9zaXRlbWFwX2luKCRm aWVsZD0nJywkYXJyYXk9JycsJGRlZmF1bHQ9JycsJHNxbD0nIG5vdCBpbicpIHsNCgkJDQoJ CWlmKGVtcHR5KCRhcnJheSkgJiYgZW1wdHkoJGRlZmF1bHQpKQ0KCQkJcmV0dXJuOw0KCQkN CgkJaWYoIWlzX2FycmF5KCRhcnJheSkpDQoJCQkkYXJyYXkgPSBleHBsb2RlKCcsJywkYXJy YXkpOw0KCQkNCgkJaWYoIWVtcHR5KCRkZWZhdWx0KSkgew0KCQkJJGRlZmF1bHQgPSBleHBs b2RlKCcsJywkZGVmYXVsdCk7DQoJCQkkYXJyYXkgPSANCgkJCQlhcnJheV9tZXJnZSgNCgkJ CQkJJGFycmF5LA0KCQkJCQkkZGVmYXVsdA0KCQkJCSk7DQoJCX0NCgkJDQoJCWZvcmVhY2go JGFycmF5IGFzICR2YWx1ZSkgDQoJCQkkb3V0W10gPSAiJyIuZG9TbGFzaCh0cmltKCR2YWx1 ZSkpLiInIjsNCgkJDQoJCWlmKCFpc3NldCgkb3V0KSkNCgkJCXJldHVybjsNCgkNCgkJcmV0 dXJuIA0KCQkJJGZpZWxkIC4gJHNxbCAuICcoJyAuIGltcGxvZGUoJywnLCRvdXQpIC4gJykn Ow0KCQkNCgl9DQoNCi8qKg0KCURlZmF1bHQgc2V0dGluZ3MNCiovDQoNCglmdW5jdGlvbiBy YWhfc2l0ZW1hcF9wcmVmX2ZpZWxkcygpIHsNCgkJcmV0dXJuDQoJCQlhcnJheSgNCgkJCQkn bm9hcnRpY2xlcycgPT4gJycsDQoJCQkJJ25vc2VjdGlvbnMnID0+ICcnLA0KCQkJCSdub2Nh dGVnb3JpZXMnID0+ICcnLA0KCQkJCSdhcnRpY2xlY2F0ZWdvcmllcycgPT4gJycsDQoJCQkJ J2FydGljbGVzZWN0aW9ucycgPT4gJycsDQoJCQkJJ3NlY3Rpb25zJyA9PiAnJywNCgkJCQkn Y2F0ZWdvcmllcycgPT4gJycsDQoJCQkJJ25vZmlsZScgPT4gMSwNCgkJCQknbm9pbWFnZScg PT4gMSwNCgkJCQknbm9saW5rJyA9PiAxLA0KCQkJCSdhcnRpY2xlc3RhdHVzJyA9PiAnJywN CgkJCQknYXJ0aWNsZWZ1dHVyZScgPT4gJycsDQoJCQkJJ2FydGljbGVwYXN0JyA9PiAnJywN CgkJCQknYXJ0aWNsZWV4cGlyZWQnID0+ICcnLA0KCQkJCSdwZXJtbGlua19jYXRlZ29yeScg PT4gJycsDQoJCQkJJ3Blcm1saW5rX3NlY3Rpb24nID0+ICcnLA0KCQkJCSdwZXJtbGlua19h cnRpY2xlJyA9PiAnJywNCgkJCQkndGltZXN0YW1wZm9ybWF0JyA9PiAnYycsDQoJCQkJJ2Nv bXByZXNzJyA9PiAxLA0KCQkJCSdjb21wcmVzc2lvbl9sZXZlbCcgPT4gOSwNCgkJCQknemxp Yl9vdXRwdXQnID0+IDANCgkJCSk7DQoJfQ0KDQovKioNCglSZXR1cm5zIHByZWZlcmVuY2Vz IGFzIGFuIGFycmF5DQoqLw0KDQoJZnVuY3Rpb24gcmFoX3NpdGVtYXBfcHJlZnMoKSB7DQoJ CQ0KCQkkb3V0ID0gYXJyYXkoKTsNCgkJDQoJCSRycyA9IA0KCQkJc2FmZV9yb3dzKA0KCQkJ CSduYW1lLHZhbHVlJywNCgkJCQkncmFoX3NpdGVtYXBfcHJlZnMnLA0KCQkJCScxPTEnDQoJ CQkpOw0KCQkNCgkJZm9yZWFjaCgkcnMgYXMgJHJvdykNCgkJCSRvdXRbJHJvd1snbmFtZSdd XSA9ICRyb3dbJ3ZhbHVlJ107DQoJCQkNCgkJcmV0dXJuICRvdXQ7DQoJCQ0KCX0NCg0KLyoq DQoJQnVpbGQgdGhlIGN1c3RvbSBVUkxzDQoqLw0KDQoJZnVuY3Rpb24gcmFoX3NpdGVtYXBf dXJpKCR1cmk9JycsJGVzY2FwZT0wKSB7DQoJCQ0KCQlpZigNCgkJCXN1YnN0cigkdXJpLDAs NykgIT0gJ2h0dHA6Ly8nICYmIA0KCQkJc3Vic3RyKCR1cmksMCw4KSAhPSAnaHR0cHM6Ly8n ICYmDQoJCQlzdWJzdHIoJHVyaSwwLDYpICE9ICdmdHA6Ly8nICYmDQoJCQlzdWJzdHIoJHVy aSwwLDcpICE9ICdmdHBzOi8vJyAmJiANCgkJCXN1YnN0cigkdXJpLDAsNCkgIT0gJ3d3dy4n DQoJCSkNCgkJCSR1cmkgPSAgaHUgLiAkdXJpOw0KCQkNCgkJZWxzZSBpZihzdWJzdHIoJHVy aSwwLDQpID09ICd3d3cuJykNCgkJCSR1cmkgPSAgJ2h0dHA6Ly8nIC4gJHVyaTsNCgkJDQoJ CWlmKCRlc2NhcGUgPT0gMSkNCgkJCSR1cmkgPSBodG1sc3BlY2lhbGNoYXJzKCR1cmkpOw0K CQkNCgkJcmV0dXJuICR1cmk7DQoJfQ0KDQovKioNCglJbnN0YWxsZXIuIENyZWF0ZXMgdGFi bGVzIGFuZCBhZGRzIHRoZSBkZWZhdWx0IHJvd3MNCiovDQoNCglmdW5jdGlvbiByYWhfc2l0 ZW1hcF9pbnN0YWxsKCkgew0KCQlzYWZlX3F1ZXJ5KA0KCQkJIkNSRUFURSBUQUJMRSBJRiBO T1QgRVhJU1RTICIuc2FmZV9wZngoJ3JhaF9zaXRlbWFwJykuIiAoDQoJCQkJYHVybGAgVkFS Q0hBUigyNTUpIE5PVCBOVUxMLA0KCQkJCWBwb3N0ZWRgIERBVEVUSU1FIE5PVCBOVUxMLA0K CQkJCWBpbmNsdWRlYCBJTlQoMSkgTk9UIE5VTEwsDQoJCQkJUFJJTUFSWSBLRVkoYHVybGAp DQoJCQkpIg0KCQkpOw0KCQlzYWZlX3F1ZXJ5KA0KCQkJIkNSRUFURSBUQUJMRSBJRiBOT1Qg RVhJU1RTICIuc2FmZV9wZngoJ3JhaF9zaXRlbWFwX3ByZWZzJykuIiAoDQoJCQkJYG5hbWVg IFZBUkNIQVIoMjU1KSBOT1QgTlVMTCBERUZBVUxUICcnLA0KCQkJCWB2YWx1ZWAgTE9OR1RF WFQgTk9UIE5VTEwgREVGQVVMVCAnJywNCgkJCQlQUklNQVJZIEtFWShgbmFtZWApDQoJCQkp Ig0KCQkpOw0KCQkNCgkJZm9yZWFjaChyYWhfc2l0ZW1hcF9wcmVmX2ZpZWxkcygpIGFzICRr ZXkgPT4gJHZhbCkgew0KCQkJaWYoDQoJCQkJc2FmZV9jb3VudCgNCgkJCQkJJ3JhaF9zaXRl bWFwX3ByZWZzJywNCgkJCQkJIm5hbWU9JyIuZG9TbGFzaCgka2V5KS4iJyINCgkJCQkpID09 IDANCgkJCSkgew0KCQkJCXNhZmVfaW5zZXJ0KA0KCQkJCQkncmFoX3NpdGVtYXBfcHJlZnMn LA0KCQkJCQkibmFtZT0nIi5kb1NsYXNoKCRrZXkpLiInLCB2YWx1ZT0nIi5kb1NsYXNoKCR2 YWwpLiInIg0KCQkJCSk7DQoJCQl9DQoJCX0NCgl9DQoNCi8qKg0KCUJ1aWxkcyB0aGUgbGlz dCBvZiBmaWx0ZXJzDQoqLw0KDQoJZnVuY3Rpb24gcmFoX3NpdGVtYXBfbGlzdGluZygkbGFi ZWw9JycsJGZpZWxkPScnLCR0YWJsZT0nJywkd2hlcmU9JycpIHsNCgkJDQoJCSRwcmVmID0g DQoJCQlyYWhfc2l0ZW1hcF9wcmVmcygpOw0KCQkNCgkJJGV4Y2x1ZGUgPSBleHBsb2RlKCcs JywkcHJlZlskZmllbGRdKTsNCgkJDQoJCSRycyA9IA0KCQkJc2FmZV9yb3dzKA0KCQkJCSdu YW1lLHRpdGxlJy4oKCR0YWJsZSA9PSAndHhwX2NhdGVnb3J5JykgPyAnLHR5cGUnIDogJycp LA0KCQkJCSR0YWJsZSwNCgkJCQkiJHdoZXJlIG9yZGVyIGJ5ICIuKCgkdGFibGUgPT0gJ3R4 cF9jYXRlZ29yeScpID8gJ3R5cGUgYXNjLCAnIDogJycpLiIgbmFtZSBhc2MiDQoJCQkpOw0K CQkNCgkJJG91dFtdID0gDQoJCQknCQkJCQk8ZGl2IGNsYXNzPSJyYWhfc2l0ZW1hcF9jb2x1 bW4iPicubi4NCgkJCScJCQkJCQk8c3Ryb25nPicuJGxhYmVsLic8L3N0cm9uZz48YnIgLz4n Lm47DQoJCQ0KCQlpZigkcnMpew0KCQkJZm9yZWFjaCgkcnMgYXMgJGEpIHsNCgkJCQkNCgkJ CQkkbmFtZSA9ICRhWyduYW1lJ107DQoJCQkJJHRpdGxlID0gJGFbJ3RpdGxlJ107DQoJCQkJ DQoJCQkJaWYoJGZpZWxkID09ICdjYXRlZ29yaWVzJykgew0KCQkJCQkkbmFtZSA9ICRhWyd0 eXBlJ10uJ198fF8nLiRhWyduYW1lJ107DQoJCQkJCSR0aXRsZSA9IHVjZmlyc3QoJGFbJ3R5 cGUnXSkuJGFbJ3RpdGxlJ107DQoJCQkJfQ0KDQoJCQkJJG91dFtdID0gDQoJCQkJCScJCQkJ CQk8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSInLiRmaWVsZC4nW10iIHZh bHVlPSInLiRuYW1lLiciJy4oKGluX2FycmF5KCRuYW1lLCRleGNsdWRlKSkgPyAnIGNoZWNr ZWQ9ImNoZWNrZWQiJyA6ICcnKS4nIC8+ICcuJHRpdGxlIC4nPC9sYWJlbD48YnIgLz4nLm47 DQoJCQl9DQoJCX0gZWxzZSAkb3V0W10gPSAnCQkJCQkJTm90aGluZyBmb3VuZC4nLm47DQoJ CSRvdXRbXSA9IA0KCQkJJwkJCQkJPC9kaXY+Jy5uOw0KCQlyZXR1cm4gaW1wbG9kZSgnJywk b3V0KTsNCgl9DQoNCi8qKg0KCVNhdmVzIHByZWZlcmVuY2VzDQoqLw0KDQoJZnVuY3Rpb24g cmFoX3NpdGVtYXBfc2F2ZSgpIHsNCgkJZm9yZWFjaChyYWhfc2l0ZW1hcF9wcmVmX2ZpZWxk cygpIGFzICRrZXkgPT4gJHZhbCkgew0KCQkJJHBzID0gcHMoJGtleSk7DQoJCQkNCgkJCWlm KGlzX2FycmF5KCRwcykpDQoJCQkJJHBzID0gaW1wbG9kZSgnLCcsJHBzKTsNCgkJCQ0KCQkJ c2FmZV91cGRhdGUoDQoJCQkJJ3JhaF9zaXRlbWFwX3ByZWZzJywNCgkJCQkidmFsdWU9JyIu ZG9TbGFzaCh0cmltKCRwcykpLiInIiwNCgkJCQkibmFtZT0nIi4ka2V5LiInIg0KCQkJKTsN CgkJfQ0KCQlyYWhfc2l0ZW1hcF9saXN0KCdTaXRlbWFwIHByZWZlcmVuY2VzIHNhdmVkJyk7 DQoJfQ0KDQovKioNCglEZWxldGVzIGN1c3RvbSBVUklzDQoqLw0KDQoJZnVuY3Rpb24gcmFo X3NpdGVtYXBfZGVsZXRlKCkgew0KCQkNCgkJJHNlbGVjdGVkID0gcHMoJ3NlbGVjdGVkJyk7 DQoJCQ0KCQlpZighaXNfYXJyYXkoJHNlbGVjdGVkKSkgew0KCQkJcmFoX3NpdGVtYXBfY3Vz dG9tX2xpc3QoJ05vdGhpbmcgc2VsZWN0ZWQnKTsNCgkJCXJldHVybjsNCgkJfQ0KCQkNCgkJ Zm9yZWFjaCgkc2VsZWN0ZWQgYXMgJG5hbWUpIA0KCQkJc2FmZV9kZWxldGUoDQoJCQkJJ3Jh aF9zaXRlbWFwJywNCgkJCQkidXJsPSciLmRvU2xhc2goJG5hbWUpLiInIg0KCQkJKTsNCgkJ DQoJCXJhaF9zaXRlbWFwX2N1c3RvbV9saXN0KCdTZWxlY3Rpb24gZGVsZXRlZCcpOw0KCX0i O3M6NDoidHlwZSI7czoxOiIxIjtzOjU6ImZsYWdzIjtzOjE6IjAiO3M6NToib3JkZXIiO3M6 MToiNSI7czozOiJtZDUiO3M6MzI6ImJjZDQ1NjhiYjE5YmFkY2I4ZDU0NDFkMjU0YTE5MWIy Ijt9