Advertisement
Synchronizer

Untitled

Nov 1st, 2014
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 212.24 KB | None | 0 0
  1. PD9waHANCiRzaF9pZCA9ICJVMEZPU2xWT1IwRk9JRXBKVjBFZ1ZFVkJUUT09IjsNCiRzaF92ZXIgPSAiIjsNCiRzaF9uYW1lID0gYmFzZTY0X2RlY29kZSgkc2hfaWQpLiRzaF92ZXI7DQokc2hfbWFpbnVybCA9ICIiOw0KJGh0bWxfc3RhcnQgPSAnPGh0bWw+PGhlYWQ+DQo8L2hlYWQ+DQoJPEJPRFkgPg0KPHRpdGxlPicuZ2V0ZW52KCJIVFRQX0hPU1QiKS4nIC0gJy4kc2hfbmFtZS4nPC90aXRsZT4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQo8IS0tDQpib2R5LHRhYmxlIHsgZm9udC1mYW1pbHk6dmVyZGFuYTtmb250LXNpemU6MTFweDtjb2xvcjp3aGl0ZTtib3JkZXI6NXB4IHNvbGlkICNGRkU5MjA7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwOyB9DQp0YWJsZSB7IHdpZHRoOjEwMCU7IH0NCnRhYmxlLHRkIHsgYm9yZGVyOjFweCBzb2xpZCAjMDAwMDAwO21hcmdpbi10b3A6MjttYXJnaW4tYm90dG9tOjI7cGFkZGluZzo1cHg7IH0NCmEgeyBjb2xvcjpsaWdodGJsdWU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0NCmE6YWN0aXZlIHsgY29sb3I6IzAwRkYwMDsgfQ0KYTpsaW5rIHsgY29sb3I6IzAwZmYwMDsgfQ0KYTpob3ZlciB7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IH0NCmE6dmlzaXRlZCB7IGNvbG9yOiMwMGZmMDA7IH0NCmlucHV0LHNlbGVjdCxvcHRpb24geyBmb250OjhwdCB0YWhvbWE7Y29sb3I6I0ZGRkZGRjttYXJnaW46Mjtib3JkZXI6MXB4IHNvbGlkICM2NjY2NjY7IH0NCnRleHRhcmVhIHsgY29sb3I6I2RlZGJkZTtmb250OmZpeGVkc3lzIGJvbGQ7Ym9yZGVyOjFweCBzb2xpZCAjNjY2NjY2O21hcmdpbjoyOyB9DQouZmxlZnQgeyBmbG9hdDpsZWZ0O3RleHQtYWxpZ246bGVmdDsgfQ0KLmZyaWdodCB7IGZsb2F0OnJpZ2h0O3RleHQtYWxpZ246cmlnaHQ7IH0NCiNwYWdlYmFyIHsgZm9udDoxMHB0IHRhaG9tYTtwYWRkaW5nOjVweDsgYm9yZGVyOjNweCBzb2xpZCAjMUUxRTFFOyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IH0NCiNwYWdlYmFyIHRkIHsgdmVydGljYWwtYWxpZ246dG9wO2JhY2tncm91bmQtY29sb3I6IyMzMzMzMzM7IH0NCiNwYWdlYmFyIHAgeyBmb250OjhwdCB0YWhvbWE7fQ0KI3BhZ2ViYXIgYSB7IGZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6I2ZmZmYwMDsgfQ0KI3BhZ2ViYXIgYTp2aXNpdGVkIHsgY29sb3I6IzAwQ0UwMDsgfQ0KI21haW5tZW51IHsgdGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojQ0MwMDAwOyB9DQojbWFpbm1lbnUgYSB7IHRleHQtYWxpZ246IGNlbnRlcjtwYWRkaW5nOiAwcHggNXB4IDBweCA1cHg7YmFja2dyb3VuZC1jb2xvcjojQ0NGRjAwOyB9DQojbWFpbm1lbnUgYTpob3ZlcnsgYmFja2dyb3VuZDpncmVlbjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMzMzMzMzO2JvcmRlci10b3A6MXB4IHNvbGlkICMzMzMzMzM7fQ0KI21haW5pbmZvLC5iYXJoZWFkZXIsLmJhcmhlYWRlcjIgeyB0ZXh0LWFsaWduOmNlbnRlcjsgfQ0KI21haW5pbmZvIHRkIHsgcGFkZGluZzozcHg7IH0NCi5iYXJoZWFkZXIgeyBmb250LXdlaWdodDpib2xkO3BhZGRpbmc6NXB4OyB9DQouYmFyaGVhZGVyMiB7IHBhZGRpbmc6NXB4O2JvcmRlcjoycHggc29saWQgIzFGMUYxRjsgfQ0KLmNvbnRlbnRzLC5leHBsb3JlciB7IGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTt9DQouY29udGVudHMgdGQgeyB2ZXJ0aWNhbC1hbGlnbjp0b3A7IH0NCi5tYWlucGFuZWwgeyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7cGFkZGluZzo1cHg7YmFja2dyb3VuZC1jb2xvcjojMDA5OTAwOyB9DQouYmFyaGVhZGVyLC5tYWlucGFuZWwgdGFibGUsdGQgeyBib3JkZXI6MXB4IHNvbGlkICMzMzMzMzM7IH0NCi5tYWlucGFuZWwgaW5wdXQsc2VsZWN0LG9wdGlvbiB7IGJvcmRlcjoxcHggc29saWQgIzMzMzMzMzttYXJnaW46MDsgfQ0KaW5wdXRbdHlwZT0ic3VibWl0Il0geyBib3JkZXI6MXB4IHNvbGlkICMwMDAwMDA7IH0NCmlucHV0W3R5cGU9InRleHQiXSB7IHBhZGRpbmc6M3B4O30NCi5zaGVsbCB7IGJhY2tncm91bmQtY29sb3I6I0MwQzBDMDtjb2xvcjojMDAwMDgwO3BhZGRpbmc6NXB4OyB9DQouZnhlcnJtc2cgeyBjb2xvcjpyZWQ7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0NCiNwYWdlYmFyLCNwYWdlYmFyIHAsaDEsaDIsaDMsaDQsZm9ybSB7IG1hcmdpbjowOyB9DQojcGFnZWJhciwubWFpbnBhbmVsLGlucHV0W3R5cGU9InN1Ym1pdCJdIHsgYmFja2dyb3VuZC1jb2xvcjojNEE0QTRBOyB9DQouYmFyaGVhZGVyMixpbnB1dCxzZWxlY3Qsb3B0aW9uLGlucHV0W3R5cGU9InN1Ym1pdCJdOmhvdmVyIHsgYmFja2dyb3VuZC1jb2xvcjojMDAwMDAwOyB9DQp0ZXh0YXJlYSwubWFpbnBhbmVsIGlucHV0LHNlbGVjdCxvcHRpb24geyBiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA7IH0NCi8vIC0tPg0KPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KJzsNCiRob3N0X2FsbG93ID0gYXJyYXkoIioiKTsgDQokYWNjZXNzZGVuaWVkbWVzcyA9ICI8Ym9keSBiZ2NvbG9yPWJsYWNrPjxhIGhyZWY9XCIkc2hfbWFpbnVybFwiPjxmb250IGNvbG9yPWxpbWU+Ii4kc2hfbmFtZS4iPC9mb250PjwvYT46IDxmb250IGNvbG9yPXJlZD5hY2Nlc3MgZGVuaWVkPC9mb250PjwvYm9keT4iOw0KJGd6aXBlbmNvZGUgPSBUUlVFOw0KJGZpbGVzdGVhbHRoID0gVFJVRTsgDQokY3VyZGlyID0gIi4vIjsNCiR0bXBkaXIgPSAiIjsgDQokdG1wZGlyX2xvZyA9ICIuLyI7DQokbG9nX2VtYWlsID0gIiI7IA0KJHNvcnRfZGVmYXVsdCA9ICIwYSI7IA0KJHNvcnRfc2F2ZSA9IFRSVUU7IA0KJHNlc3NfY29va2llID0gImJvZ2VsdmFycyI7IA0KJHVzZWZzYnVmZiA9IFRSVUU7IA0KJGNvcHlfdW5zZXQgPSBGQUxTRTsgDQokaGV4ZHVtcF9saW5lcyA9IDg7DQokaGV4ZHVtcF9yb3dzID0gMjQ7DQokd2luID0gc3RydG9sb3dlcihzdWJzdHIoUEhQX09TLDAsMykpID09ICJ3aW4iOw0KJGRpc2FibGVmdW5jID0gQGluaV9nZXQoImRpc2FibGVfZnVuY3Rpb25zIik7DQppZiAoIWVtcHR5KCRkaXNhYmxlZnVuYykpIHsNCiAgJGRpc2FibGVmdW5jID0gc3RyX3JlcGxhY2UoIiAiLCIiLCRkaXNhYmxlZnVuYyk7DQogICRkaXNhYmxlZnVuYyA9IGV4cGxvZGUoIiwiLCRkaXNhYmxlZnVuYyk7DQp9DQpmdW5jdGlvbiBnZXRfcGhwaW5pKCkgew0KICBmdW5jdGlvbiBVX3dvcmR3cmFwKCRzdHIpIHsNCiAgICAkc3RyID0gQHdvcmR3cmFwKEBodG1sc3BlY2lhbGNoYXJzKCRzdHIpLCAxMDAsICc8d2JyIC8+JywgdHJ1ZSk7DQogICAgcmV0dXJuIEBwcmVnX3JlcGxhY2UoJyEoJlteO10qKTx3YnIgLz4oW147XSo7KSEnLCAnJDEkMjx3YnIgLz4nLCAkc3RyKTsNCiAgfQ0KICBmdW5jdGlvbiBVX3ZhbHVlKCR2YWx1ZSkgew0KICAgIGlmICgkdmFsdWUgPT0gJycpIHJldHVybiAnPGk+bm8gdmFsdWU8L2k+JzsNCiAgICBpZiAoQGlzX2Jvb2woJHZhbHVlKSkgcmV0dXJuICR2YWx1ZSA/ICdUUlVFJyA6ICdGQUxTRSc7DQogICAgaWYgKCR2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdOVUxMJzsNCiAgICBpZiAoQGlzX29iamVjdCgkdmFsdWUpKSAkdmFsdWUgPSAoYXJyYXkpICR2YWx1ZTsNCiAgICBpZiAoQGlzX2FycmF5KCR2YWx1ZSkpIHsNCiAgICAgIEBvYl9zdGFydCgpOw0KICAgICAgcHJpbnRfcigkdmFsdWUpOw0KICAgICAgJHZhbHVlID0gQG9iX2dldF9jb250ZW50cygpOw0KICAgICAgQG9iX2VuZF9jbGVhbigpOw0KICAgIH0NCiAgICByZXR1cm4gVV93b3Jkd3JhcCgoc3RyaW5nKSAkdmFsdWUpOw0KICB9DQogIGlmIChAZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0X2FsbCcpKSB7DQogICAgJHIgPSAiIjsNCiAgICBlY2hvICI8dGFibGU+PHRyIGNsYXNzPWJhcmhlYWRlcj48dGQ+RGlyZWN0aXZlPC90ZD48dGQ+TG9jYWwgVmFsdWU8L3RkPjx0ZD5HbG9iYWwgVmFsdWU8L3RkPjwvdHI+IjsNCiAgICBmb3JlYWNoIChAaW5pX2dldF9hbGwoKSBhcyAka2V5PT4kdmFsdWUpIHsNCiAgICAgICRyIC49ICI8dHI+PHRkPiIuJGtleS4iPC90ZD48dGQ+PGRpdiBhbGlnbj1jZW50ZXI+Ii5VX3ZhbHVlKCR2YWx1ZVsnbG9jYWxfdmFsdWUnXSkuIjwvZGl2PjwvdGQ+PHRkPjxkaXYgYWxpZ249Y2VudGVyPiIuVV92YWx1ZSgkdmFsdWVbJ2dsb2JhbF92YWx1ZSddKS4iPC9kaXY+PC90ZD48L3RyPiI7DQogICAgfQ0KICAgIGVjaG8gJHI7DQogICAgZWNobyAiPC90YWJsZT4iOw0KICB9DQp9DQpmdW5jdGlvbiBkaXNwX2RyaXZlcygkY3VyZGlyLCRzdXJsKSB7DQogICRsZXR0ZXJzID0gIiI7DQogICR2ID0gZXhwbG9kZSgiXFwiLCRjdXJkaXIpOw0KICAkdiA9ICR2WzBdOw0KICBmb3JlYWNoIChyYW5nZSgiQSIsIloiKSBhcyAkbGV0dGVyKSB7DQogICAgJGJvb2wgPSAkaXNkaXNrZXR0ZSA9ICRsZXR0ZXIgPT0gIkEiOw0KICAgIGlmICghJGJvb2wpIHskYm9vbCA9IGlzX2RpcigkbGV0dGVyLiI6XFwiKTt9DQogICAgaWYgKCRib29sKSB7DQogICAgICAkbGV0dGVycyAuPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9bHMmZD0iLnVybGVuY29kZSgkbGV0dGVyLiI6XFwiKS4iXCIiLg0KICAgICAgKCRpc2Rpc2tldHRlPyIgb25jbGljaz1cInJldHVybiBjb25maXJtKCdNYWtlIHN1cmUgdGhhdCB0aGUgZGlza2V0dGUgaXMgaW5zZXJ0ZWQgcHJvcGVybHksIG90aGVyd2lzZSBhbiBlcnJvciBtYXkgb2NjdXIuJylcIiI6IiIpLiI+IFsiOw0KICAgICAgaWYgKCRsZXR0ZXIuIjoiICE9ICR2KSB7JGxldHRlcnMgLj0gJGxldHRlcjt9DQogICAgICBlbHNlIHskbGV0dGVycyAuPSAiPGZvbnQgY29sb3I9eWVsbG93PiIuJGxldHRlci4iPC9mb250PiI7fQ0KICAgICAgJGxldHRlcnMgLj0gIl08L2E+ICI7DQogICAgfQ0KICB9DQogIGlmICghZW1wdHkoJGxldHRlcnMpKSB7UmV0dXJuICRsZXR0ZXJzO30NCiAgZWxzZSB7UmV0dXJuICJOb25lIjt9DQp9DQppZiAoaXNfY2FsbGFibGUoImRpc2tfZnJlZV9zcGFjZSIpKSB7DQogIGZ1bmN0aW9uIGRpc3BfZnJlZXNwYWNlKCRjdXJkcnYpIHsNCiAgICAkZnJlZSA9IGRpc2tfZnJlZV9zcGFjZSgkY3VyZHJ2KTsNCiAgICAkdG90YWwgPSBkaXNrX3RvdGFsX3NwYWNlKCRjdXJkcnYpOw0KICAgIGlmICgkZnJlZSA9PT0gRkFMU0UpIHskZnJlZSA9IDA7fQ0KICAgIGlmICgkdG90YWwgPT09IEZBTFNFKSB7JHRvdGFsID0gMDt9DQogICAgaWYgKCRmcmVlIDwgMCkgeyRmcmVlID0gMDt9DQogICAgaWYgKCR0b3RhbCA8IDApIHskdG90YWwgPSAwO30NCiAgICAkdXNlZCA9ICR0b3RhbC0kZnJlZTsNCiAgICAkZnJlZV9wZXJjZW50ID0gcm91bmQoMTAwLygkdG90YWwvJGZyZWUpLDIpLiIlIjsNCiAgICAkZnJlZSA9IHZpZXdfc2l6ZSgkZnJlZSk7DQogICAgJHRvdGFsID0gdmlld19zaXplKCR0b3RhbCk7DQogICAgcmV0dXJuICIkZnJlZSBvZiAkdG90YWwgKCRmcmVlX3BlcmNlbnQpIjsNCiAgfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c2hlbGxleGVjIikpIHsNCiAgaWYoaXNfY2FsbGFibGUoInBvcGVuIikpIHsNCiAgICBmdW5jdGlvbiBteXNoZWxsZXhlYygkY21kKSB7DQogICAgICBpZiAoISgkcD1wb3BlbigiKCRjbWQpMj4mMSIsInIiKSkpIHsgcmV0dXJuICJwb3BlbiBEaXNhYmxlZCEiOyB9DQogICAgICB3aGlsZSAoIWZlb2YoJHApKSB7DQogICAgICAgICRsaW5lPWZnZXRzKCRwLDEwMjQpOw0KICAgICAgICAkb3V0IC49ICRsaW5lOw0KICAgICAgfQ0KICAgICAgcGNsb3NlKCRwKTsNCiAgICAgIHJldHVybiAkb3V0Ow0KICAgIH0NCiAgfSBlbHNlIHsNCiAgICBmdW5jdGlvbiBteXNoZWxsZXhlYygkY21kKSB7DQogICAgICBnbG9iYWwgJGRpc2FibGVmdW5jOw0KICAgICAgJHJlc3VsdCA9ICIiOw0KICAgICAgaWYgKCFlbXB0eSgkY21kKSkgew0KICAgICAgICBpZiAoaXNfY2FsbGFibGUoImV4ZWMiKSBhbmQgIWluX2FycmF5KCJleGVjIiwkZGlzYWJsZWZ1bmMpKSB7DQogICAgICAgICAgZXhlYygkY21kLCRyZXN1bHQpOw0KICAgICAgICAgICRyZXN1bHQgPSBqb2luKCJcbiIsJHJlc3VsdCk7DQogICAgICAgIH0gZWxzZWlmICgoJHJlc3VsdCA9ICRjbWQpICE9PSBGQUxTRSkgew0KICAgICAgICB9IGVsc2VpZiAoaXNfY2FsbGFibGUoInN5c3RlbSIpIGFuZCAhaW5fYXJyYXkoInN5c3RlbSIsJGRpc2FibGVmdW5jKSkgew0KICAgICAgICAgICR2ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgc3lzdGVtKCRjbWQpOyAkcmVzdWx0ID0gQG9iX2dldF9jb250ZW50cygpOyBAb2JfY2xlYW4oKTsgZWNobyAkdjsNCiAgICAgICAgfSBlbHNlaWYgKGlzX2NhbGxhYmxlKCJwYXNzdGhydSIpIGFuZCAhaW5fYXJyYXkoInBhc3N0aHJ1IiwkZGlzYWJsZWZ1bmMpKSB7DQogICAgICAgICAgJHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBwYXNzdGhydSgkY21kKTsgJHJlc3VsdCA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IGVjaG8gJHY7DQogICAgICAgIH0gZWxzZWlmIChpc19yZXNvdXJjZSgkZnAgPSBwb3BlbigkY21kLCJyIikpKSB7DQogICAgICAgICAgJHJlc3VsdCA9ICIiOw0KICAgICAgICAgIHdoaWxlKCFmZW9mKCRmcCkpIHsgJHJlc3VsdCAuPSBmcmVhZCgkZnAsMTAyNCk7IH0NCiAgICAgICAgICBwY2xvc2UoJGZwKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgfQ0KICB9DQp9DQpmdW5jdGlvbiBleCgkY2ZlKSB7DQogICRyZXMgPSAnJzsNCiAgaWYgKCFlbXB0eSgkY2ZlKSkgew0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7DQogICAgICBAZXhlYygkY2ZlLCRyZXMpOw0KICAgICAgJHJlcyA9IGpvaW4oIlxuIiwkcmVzKTsNCiAgICB9IGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgew0KICAgICAgJHJlcyA9IEBzaGVsbF9leGVjKCRjZmUpOw0KICAgIH0gZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpIHsNCiAgICAgIEBvYl9zdGFydCgpOw0KICAgICAgQHN5c3RlbSgkY2ZlKTsNCiAgICAgICRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAgICBAb2JfZW5kX2NsZWFuKCk7DQogICAgfSBlbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7DQogICAgICBAb2Jfc3RhcnQoKTsNCiAgICAgIEBwYXNzdGhydSgkY2ZlKTsNCiAgICAgICRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAgICBAb2JfZW5kX2NsZWFuKCk7DQogICAgfSBlbHNlaWYoQGlzX3Jlc291cmNlKCRmID0gQHBvcGVuKCRjZmUsInIiKSkpIHsNCiAgICAgICRyZXMgPSAiIjsNCiAgICAgIHdoaWxlKCFAZmVvZigkZikpIHsgJHJlcyAuPSBAZnJlYWQoJGYsMTAyNCk7IH0NCiAgICAgIEBwY2xvc2UoJGYpOw0KICAgIH0gZWxzZSB7ICRyZXMgPSAiRXgoKSBEaXNhYmxlZCEiOyB9DQogIH0NCiAgcmV0dXJuICRyZXM7DQp9DQpmdW5jdGlvbiB3aGljaCgkcHIpIHsNCiAgJHBhdGggPSBleCgid2hpY2ggJHByIik7DQogIGlmKCFlbXB0eSgkcGF0aCkpIHsgcmV0dXJuICRwYXRoOyB9IGVsc2UgeyByZXR1cm4gJHByOyB9DQp9DQoNCiRiYWNrX2Nvbm5lY3RfcGwgPSAiSXlFdmRYTnlMMkpwYmk5d1pYSnNDblZ6WlNCVGIyTnJaWFE3Q2lSamJXUTlJQ0p6YkdWbGNDSTdDaVJ6ZVhOMFpXMDlJQ2RsWTJodklDSmdkVzVoYldVZ0xXRmdJanRsWTJodklDSmdhV1JnSWp0bFkyaHZJQ0pnWTJGMElDOWxkR012YVhOemRXVmdJanRsWTJodklDSmdZMkYwSUM5d2NtOWpMM041Y3k5MmJTOXRiV0Z3WDIxcGJsOWhaR1J5WUNJN1NFbFRWRVpKVEVVOUwyUmxkaTl1ZFd4c0lDOWlhVzR2YzJnZ0xXa25Pd29rTUQwa1kyMWtPd29rZEdGeVoyVjBQU1JCVWtkV1d6QmRPd29rY0c5eWREMGtRVkpIVmxzeFhUc0tKR2xoWkdSeVBXbHVaWFJmWVhSdmJpZ2tkR0Z5WjJWMEtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3Q2lSd1lXUmtjajF6YjJOcllXUmtjbDlwYmlna2NHOXlkQ3dnSkdsaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0NpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdDbk52WTJ0bGRDaFRUME5MUlZRc0lGQkdYMGxPUlZRc0lGTlBRMHRmVTFSU1JVRk5MQ0FrY0hKdmRHOHBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1RzS1kyOXVibVZqZENoVFQwTkxSVlFzSUNSd1lXUmtjaWtnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93cHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzS2IzQmxiaWhUVkVSUFZWUXNJQ0krSmxOUFEwdEZWQ0lwT3dwdmNHVnVLRk5VUkVWU1Vpd2dJajRtVTA5RFMwVlVJaWs3Q25ONWMzUmxiU2drYzNsemRHVnRLVHNLWTJ4dmMyVW9VMVJFU1U0cE93cGpiRzl6WlNoVFZFUlBWVlFwT3dwamJHOXpaU2hUVkVSRlVsSXBPdyI7DQokYmFja2Rvb3IgPSAiZjBWTVJnRUJBUUFBQUFBQUFBQUFBQUlBQXdBQkFBQUFvSVVFQ0RRQUFBRDRFZ0FBQUFBQUFEUUFJQUFIQUNnQUlnQWZBQVlBQUFBMEFBQUFOSUFFQ0RTQUJBamdBQUFBNEFBQUFBVUFBQUFFQUFBQUF3QUFBQlFCQUFBVWdRUUlGSUVFQ0JNQUFBQVRBQUFBQkFBQUFBRUFBQUFCQUFBQUFBQUFBQUNBQkFnQWdBUUlyQWtBQUt3SkFBQUZBQUFBQUJBQUFBRUFBQUNzQ1FBQXJKa0VDS3laQkFnMEFRQUFPQUVBQUFZQUFBQUFFQUFBQWdBQUFNQUpBQURBbVFRSXdKa0VDTWdBQUFESUFBQUFCZ0FBQUFRQUFBQUVBQUFBS0FFQUFDaUJCQWdvZ1FRSUlBQUFBQ0FBQUFBRUFBQUFCQUFBQUZIbGRHUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVlBQUFBRUFBQUFMMnhwWWk5c1pDMXNhVzUxZUM1emJ5NHlBQUFFQUFBQUVBQUFBQUVBQUFCSFRsVUFBQUFBQUFJQUFBQUNBQUFBQUFBQUFCRUFBQUFUQUFBQUFBQUFBQUFBQUFBUUFBQUFFUUFBQUFBQUFBQUFBQUFBQ1FBQUFBZ0FBQUFGQUFBQUF3QUFBQTBBQUFBQUFBQUFBQUFBQUE4QUFBQUtBQUFBRWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBWUFBQUFCQUFBQUFBQUFBQWNBQUFBTEFBQUFBQUFBQUFRQUFBQU1BQUFBRGdBQUFBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUM0QUFBQUFBQUFBZFFFQUFCSUFBQUNnQUFBQUFBQUFBSEVBQUFBU0FBQUFOQUFBQUFBQUFBRE1BQUFBRWdBQUFHb0FBQUFBQUFBQVdnQUFBQklBQUFCTUFBQUFBQUFBQUhnQUFBQVNBQUFBWXdBQUFBQUFBQUE1QUFBQUVnQUFBRmdBQUFBQUFBQUFPUUFBQUJJQUFBQ09BQUFBQUFBQUFPWUFBQUFTQUFBQU93QUFBQUFBQUFBNkFBQUFFZ0FBQUZNQUFBQUFBQUFBT1FBQUFCSUFBQUIxQUFBQUFBQUFBTGtBQUFBU0FBQUFlZ0FBQUFBQUFBQXJBQUFBRWdBQUFFY0FBQUFBQUFBQWVBQUFBQklBQUFCdkFBQUFBQUFBQUE0QUFBQVNBQUFBZndBQUFFaUpCQWdFQUFBQUVRQU9BRUFBQUFBQUFBQUFPUUFBQUJJQUFBQUJBQUFBQUFBQUFBQUFBQUFnQUFBQUZRQUFBQUFBQUFBQUFBQUFJQUFBQUFCZlNuWmZVbVZuYVhOMFpYSkRiR0Z6YzJWekFGOWZaMjF2Ymw5emRHRnlkRjlmQUd4cFltTXVjMjh1TmdCbGVHVmpiQUJ3WlhKeWIzSUFaSFZ3TWdCemIyTnJaWFFBYzJWdVpBQmhZMk5sY0hRQVltbHVaQUJ6WlhSemIyTnJiM0IwQUd4cGMzUmxiZ0JtYjNKckFHaDBiMjV6QUdWNGFYUUFZWFJ2YVFCZlNVOWZjM1JrYVc1ZmRYTmxaQUJmWDJ4cFltTmZjM1JoY25SZmJXRnBiZ0JqYkc5elpRQkhURWxDUTE4eUxqQUFBQUFDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQVFBQ0FBQUFBQUFBQUFFQUFRQWtBQUFBRUFBQUFBQUFBQUFRYVdrTkFBQUNBS1lBQUFBQUFBQUFpSm9FQ0FZU0FBQ1ltZ1FJQndFQUFKeWFCQWdIQWdBQW9Kb0VDQWNEQUFDa21nUUlCd1FBQUtpYUJBZ0hCUUFBckpvRUNBY0dBQUN3bWdRSUJ3Y0FBTFNhQkFnSENBQUF1Sm9FQ0FjSkFBQzhtZ1FJQndvQUFNQ2FCQWdIQ3dBQXhKb0VDQWNNQUFESW1nUUlCdzBBQU15YUJBZ0hEZ0FBMEpvRUNBY1FBQUJWaWVXRDdBam9NUUVBQU9pREFRQUE2RnNFQUFESnd3RC9OWkNhQkFqL0paU2FCQWdBQUFBQS95V1ltZ1FJYUFBQUFBRHA0UC8vLy84bG5Kb0VDR2dJQUFBQTZkRC8vLy8vSmFDYUJBaG9FQUFBQU9uQS8vLy8veVdrbWdRSWFCZ0FBQURwc1AvLy8vOGxxSm9FQ0dnZ0FBQUE2YUQvLy8vL0pheWFCQWhvS0FBQUFPbVEvLy8vL3lXd21nUUlhREFBQUFEcGdQLy8vLzhsdEpvRUNHZzRBQUFBNlhELy8vLy9KYmlhQkFob1FBQUFBT2xnLy8vLy95VzhtZ1FJYUVnQUFBRHBVUC8vLy84bHdKb0VDR2hRQUFBQTZVRC8vLy8vSmNTYUJBaG9XQUFBQU9rdy8vLy8veVhJbWdRSWFHQUFBQURwSVAvLy8vOGx6Sm9FQ0dob0FBQUE2UkQvLy8vL0pkQ2FCQWhvY0FBQUFPa0EvLy8vTWUxZWllR0Q1UEJRVkZKb3JZZ0VDR2hjaUFRSVVWWm9RSVlFQ09oZi8vLy85SkNRVllubFUrZ2JBQUFBZ2NPL0ZBQUFnK3dFaTRQOC8vLy9oY0IwQXYvUWc4UUVXMTNEaXh3a3cxV0o1WVBzQ0lBOTRKb0VDQUIwRE9zY2c4QUVvOXlhQkFqLzBxSGNtZ1FJaXhDRjBuWHJ4Z1hnbWdRSUFjbkRWWW5sZyt3SW9ieVpCQWlGd0hRU3VBQUFBQUNGd0hRSnh3UWt2SmtFQ1AvUXljT1FrRldKNVZlRDdHU0Q1UEM0QUFBQUFJUEFENFBBRDhIb0JNSGdCQ25FeDBYa0FRQUFBTWRGK0V5SkJBakhSQ1FJQUFBQUFNZEVKQVFCQUFBQXh3UWtBZ0FBQU9nSi8vLy9pVVh3ZzMzd0FIa1l4d1FraklrRUNPZzAvdi8veHdRa0FRQUFBT2lvL3YvL1pzZEYxQUlBeDBYWUFBQUFBSXRGRElQQUJJc0FpUVFrNkp2Ky8vOFB0OENKQkNUb3NQNy8vMmFKUmRiSFJDUVFCQUFBQUkxRjVJbEVKQXpIUkNRSUFnQUFBTWRFSkFRQkFBQUFpMFh3aVFRazZCTCsvLytOUmRUSFJDUUlFQUFBQUlsRUpBU0xSZkNKQkNUb0tQNy8vNFhBZVJqSEJDU1RpUVFJNktqOS8vL0hCQ1FCQUFBQTZCeisvLy9IUkNRRUNBQUFBSXRGOElrRUpPaTUvZi8vaGNCNUdNY0VKSmlKQkFqb2VmMy8vOGNFSkFFQUFBRG83ZjMvLzhkRjZCQUFBQUNOUmVpTlZjU0pSQ1FJaVZRa0JJdEY4SWtFSk9odC9mLy9pVVgwZzMzMEFIa014d1FraklrRUNPZzQvZi8vNkVQOS8vK0Z3QStFcHdBQUFJdEYrTG4vLy8vL2lVVzR1QUFBQUFEOGkzMjQ4cTZKeVBmUWcrZ0J4MFFrREFBQUFBQ0pSQ1FJaTBYNGlVUWtCSXRGOUlrRUpPaVEvZi8veDBRa0JBQUFBQUNMUmZTSkJDVG9QZjMvLzhkRUpBUUJBQUFBaTBYMGlRUWs2Q3I5Ly8vSFJDUUVBZ0FBQUl0RjlJa0VKT2dYL2YvL3gwUWtDQUFBQUFESFJDUUVuNGtFQ01jRUpKK0pCQWpvZS96Ly80dEY4SWtFSk9pQS9QLy94d1FrQUFBQUFPZ0UvZi8vaTBYMGlRUWs2R244Ly8vcER2Ly8vMVdKNVZkV01mWlQ2SC85Ly8rQnd5TVNBQUNEN0F6b0Vmei8vNDJESVAvLy80MlRJUC8vLzRsRjhDblF3ZmdDT2NaekZvblgveFN5aTBYd2c4WUJLZmlKK3NINEFqbkdjdXlEeEF4YlhsOWR3MVdKNVlQc0dJbGQ5T2d0L2YvL2djUFJFUUFBaVhYNGlYMzhqYk1nLy8vL2pic2cvLy8vS2Y3Qi9nTHJBLzhVdDRQdUFZUCsvM1gxNkRvQUFBQ0xYZlNMZGZpTGZmeUo3RjNEa0ZXSjVWT0Q3QVNockprRUNJUDQvM1FTdTZ5WkJBai8wSXREL0lQckJJUDQvM1h6ZzhRRVcxM0RrSkNRVllubFUraTcvUC8vZ2NOZkVRQUFnK3dFNkxIOC8vK0R4QVJiWGNNQUFBQURBQUFBQVFBQ0FEbzZJSGMwWTJzeGJtY3RjMmhsYkd3Z0tGQnlhWFpoZEdVZ1FuVnBiR1FnZGpBdU15a2dZbWx1WkNCemFHVnNiQ0JpWVdOclpHOXZjaUE2T2lBS0NnQnpiMk5yWlhRQVltbHVaQUJzYVhOMFpXNEFMMkpwYmk5emFBQUFBQUFBQVAvLy8vOEFBQUFBLy8vLy93QUFBQUFBQUFBQUFRQUFBQ1FBQUFBTUFBQUFpSVFFQ0EwQUFBQWtpUVFJQkFBQUFFaUJCQWdGQUFBQUVJTUVDQVlBQUFEZ2dRUUlDZ0FBQUxBQUFBQUxBQUFBRUFBQUFCVUFBQUFBQUFBQUF3QUFBSXlhQkFnQ0FBQUFlQUFBQUJRQUFBQVJBQUFBRndBQUFCQ0VCQWdSQUFBQUNJUUVDQklBQUFBSUFBQUFFd0FBQUFnQUFBRCsvLzl2NklNRUNQLy8vMjhCQUFBQThQLy9iOENEQkFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBd0prRUNBQUFBQUFBQUFBQXRvUUVDTWFFQkFqV2hBUUk1b1FFQ1BhRUJBZ0doUVFJRm9VRUNDYUZCQWcyaFFRSVJvVUVDRmFGQkFobWhRUUlkb1VFQ0lhRkJBaVdoUVFJQUFBQUFBQUFBQUM0bVFRSUFFZERRem9nS0VkT1ZTa2dNeTQwTGpZZ0tGVmlkVzUwZFNBekxqUXVOaTB4ZFdKMWJuUjFNaWtBQUVkRFF6b2dLRWRPVlNrZ015NDBMallnS0ZWaWRXNTBkU0F6TGpRdU5pMHhkV0oxYm5SMU1pa0FBRWREUXpvZ0tFZE9WU2tnTkM0d0xqTWdLRlZpZFc1MGRTQTBMakF1TXkweGRXSjFiblIxTlNrQUFFZERRem9nS0VkT1ZTa2dOQzR3TGpNZ0tGVmlkVzUwZFNBMExqQXVNeTB4ZFdKMWJuUjFOU2tBQUVkRFF6b2dLRWRPVlNrZ015NDBMallnS0ZWaWRXNTBkU0F6TGpRdU5pMHhkV0oxYm5SMU1pa0FBRWREUXpvZ0tFZE9WU2tnTkM0d0xqTWdLRlZpZFc1MGRTQTBMakF1TXkweGRXSjFiblIxTlNrQUFFZERRem9nS0VkT1ZTa2dNeTQwTGpZZ0tGVmlkVzUwZFNBekxqUXVOaTB4ZFdKMWJuUjFNaWtBQUFBY0FBQUFBZ0FBQUFBQUJBQUFBQUFBb0lVRUNDSUFBQUFBQUFBQUFBQUFBRFFBQUFBQ0FBc0JBQUFFQUFBQUFBRG9oUVFJQkFBQUFDU0pCQWdTQUFBQWlJUUVDQXNBQUFERWhRUUlKQUFBQUFBQUFBQUFBQUFBTEFBQUFBSUFtd0VBQUFRQUFBQUFBT2lGQkFnRUFBQUFPNGtFQ0FZQUFBQ2RoQVFJQWdBQUFBQUFBQUFBQUFBQUlRQUFBQUlBZWdBQUFKRUFBQUI1QUFBQVgwbFBYM04wWkdsdVgzVnpaV1FBQUFBQUFIWUFBQUFDQUFBQUFBQUVBUUFBQUFDZ2hRUUl3b1VFQ0M0dUwzTjVjMlJsY0hNdmFUTTROaTlsYkdZdmMzUmhjblF1VXdBdlluVnBiR1F2WW5WcGJHUmtMMmRzYVdKakxUSXVNeTQyTDJKMWFXeGtMWFJ5WldVdloyeHBZbU10TWk0ekxqWXZZM04xQUVkT1ZTQkJVeUF5TGpFMkxqa3hBQUdBalFBQUFBSUFGQUFBQUFRQld3QUFBTVNGQkFqRWhRUUlZZ0FBQUFFQUFBQUFFUUFBQUFLUUFBQUFCQWNDVkFBQUFBRUlBcDBBQUFBQ0J3S0xBQUFBQkFjQ1ZnQUFBQUVHQWdjQUFBQUNCUU5wYm5RQUJBVUNSZ0FBQUFnRkFvWUFBQUFJQndKTEFBQUFCQVVDa0FBQUFBUUhBbDBBQUFBQkJnU3dBQUFBQVJtTEFBQUFBUVVEU0lrRUNBVlBBQUFBQUl3QUFBQUNBRllBQUFBRUFZSUFBQUF2WW5WcGJHUXZZblZwYkdSa0wyZHNhV0pqTFRJdU15NDJMMkoxYVd4a0xYUnlaV1V2YVRNNE5pMXNhV0pqTDJOemRTOWpjblJwTGxNQUwySjFhV3hrTDJKMWFXeGtaQzluYkdsaVl5MHlMak11Tmk5aWRXbHNaQzEwY21WbEwyZHNhV0pqTFRJdU15NDJMMk56ZFFCSFRsVWdRVk1nTWk0eE5pNDVNUUFCZ0l3QUFBQUNBR1lBQUFBRUFTOEJBQUF2WW5WcGJHUXZZblZwYkdSa0wyZHNhV0pqTFRJdU15NDJMMkoxYVd4a0xYUnlaV1V2YVRNNE5pMXNhV0pqTDJOemRTOWpjblJ1TGxNQUwySjFhV3hrTDJKMWFXeGtaQzluYkdsaVl5MHlMak11Tmk5aWRXbHNaQzEwY21WbEwyZHNhV0pqTFRJdU15NDJMMk56ZFFCSFRsVWdRVk1nTWk0eE5pNDVNUUFCZ0FFUkFCQUdFUUVTQVFNSUd3Z2xDQk1GQUFBQUFSRUJFQVlTQVJFQkpRNFRDd01PR3c0QUFBSWtBQU1PQ3dzK0N3QUFBeVFBQXdnTEN6NExBQUFFTkFBRERqb0xPd3RKRXo4TUFnb0FBQVVtQUVrVEFBQUFBUkVBRUFZRENCc0lKUWdUQlFBQUFBRVJBQkFHQXdnYkNDVUlFd1VBQUFCWEFBQUFBZ0F5QUFBQUFRSDdEZzBBQVFFQkFRQUFBQUVBQUFFdUxpOXplWE5rWlhCekwya3pPRFl2Wld4bUFBQnpkR0Z5ZEM1VEFBRUFBQUFBQlFLZ2hRUUlBOEFBQVRNaE5EMGxJZ01ZSUZsYUlTSmNXd0lCQUFFQkl3QUFBQUlBSFFBQUFBRUIrdzROQUFFQkFRRUFBQUFCQUFBQkFHbHVhWFF1WXdBQUFBQUFxUUFBQUFJQVVBQUFBQUVCK3c0TkFBRUJBUUVBQUFBQkFBQUJMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmt6T0RZdGJHbGlZeTlqYzNVQUFHTnlkR2t1VXdBQkFBQUFBQVVDNklVRUNBUEFBQUU5QWdFQUFRRUFCUUlraVFRSUF5NEJJUzhoV1djQ0F3QUJBUUFGQW9pRUJBZ0RId0VoTHowQ0JRQUJBUUFGQXNTRkJBZ0RDZ0VoTHlGWlp6MW5MeTh3UFNFaEFnRUFBUUdJQUFBQUFnQlFBQUFBQVFIN0RnMEFBUUVCQVFBQUFBRUFBQUV2WW5WcGJHUXZZblZwYkdSa0wyZHNhV0pqTFRJdU15NDJMMkoxYVd4a0xYUnlaV1V2YVRNNE5pMXNhV0pqTDJOemRRQUFZM0owYmk1VEFBRUFBQUFBQlFMb2hRUUlBeUVCUFFJQkFBRUJBQVVDTzRrRUNBTVNBVDBoSVFJQkFBRUJBQVVDbllRRUNBTUpBU0VDQVFBQkFXbHVhWFF1WXdCemFHOXlkQ0JwYm5RQUwySjFhV3hrTDJKMWFXeGtaQzluYkdsaVl5MHlMak11Tmk5aWRXbHNaQzEwY21WbEwyZHNhV0pqTFRJdU15NDJMMk56ZFFCc2IyNW5JR3h2Ym1jZ2FXNTBBSFZ1YzJsbmJtVmtJR05vWVhJQVIwNVZJRU1nTXk0MExqWWdLRlZpZFc1MGRTQXpMalF1TmkweGRXSjFiblIxTWlrQWJHOXVaeUJzYjI1bklIVnVjMmxuYm1Wa0lHbHVkQUJ6YUc5eWRDQjFibk5wWjI1bFpDQnBiblFBWDBsUFgzTjBaR2x1WDNWelpXUUFBQzV6ZVcxMFlXSUFMbk4wY25SaFlnQXVjMmh6ZEhKMFlXSUFMbWx1ZEdWeWNBQXVibTkwWlM1QlFra3RkR0ZuQUM1b1lYTm9BQzVrZVc1emVXMEFMbVI1Ym5OMGNnQXVaMjUxTG5abGNuTnBiMjRBTG1kdWRTNTJaWEp6YVc5dVgzSUFMbkpsYkM1a2VXNEFMbkpsYkM1d2JIUUFMbWx1YVhRQUxuUmxlSFFBTG1acGJta0FMbkp2WkdGMFlRQXVaV2hmWm5KaGJXVUFMbU4wYjNKekFDNWtkRzl5Y3dBdWFtTnlBQzVrZVc1aGJXbGpBQzVuYjNRQUxtZHZkQzV3YkhRQUxtUmhkR0VBTG1KemN3QXVZMjl0YldWdWRBQXVaR1ZpZFdkZllYSmhibWRsY3dBdVpHVmlkV2RmY0hWaWJtRnRaWE1BTG1SbFluVm5YMmx1Wm04QUxtUmxZblZuWDJGaVluSmxkZ0F1WkdWaWRXZGZiR2x1WlFBdVpHVmlkV2RmYzNSeUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR3dBQUFBRUFBQUFDQUFBQUZJRUVDQlFCQUFBVEFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFDTUFBQUFIQUFBQUFnQUFBQ2lCQkFnb0FRQUFJQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUF4QUFBQUJRQUFBQUlBQUFCSWdRUUlTQUVBQUpnQUFBQUVBQUFBQUFBQUFBUUFBQUFFQUFBQU53QUFBQXNBQUFBQ0FBQUE0SUVFQ09BQkFBQXdBUUFBQlFBQUFBRUFBQUFFQUFBQUVBQUFBRDhBQUFBREFBQUFBZ0FBQUJDREJBZ1FBd0FBc0FBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFCSEFBQUEvLy8vYndJQUFBREFnd1FJd0FNQUFDWUFBQUFFQUFBQUFBQUFBQUlBQUFBQ0FBQUFWQUFBQVA3Ly8yOENBQUFBNklNRUNPZ0RBQUFnQUFBQUJRQUFBQUVBQUFBRUFBQUFBQUFBQUdNQUFBQUpBQUFBQWdBQUFBaUVCQWdJQkFBQUNBQUFBQVFBQUFBQUFBQUFCQUFBQUFnQUFBQnNBQUFBQ1FBQUFBSUFBQUFRaEFRSUVBUUFBSGdBQUFBRUFBQUFDd0FBQUFRQUFBQUlBQUFBZFFBQUFBRUFBQUFHQUFBQWlJUUVDSWdFQUFBWEFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFIQUFBQUFCQUFBQUJnQUFBS0NFQkFpZ0JBQUFBQUVBQUFBQUFBQUFBQUFBQkFBQUFBUUFBQUI3QUFBQUFRQUFBQVlBQUFDZ2hRUUlvQVVBQUlRREFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQWdRQUFBQUVBQUFBR0FBQUFKSWtFQ0NRSkFBQWRBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBSWNBQUFBQkFBQUFBZ0FBQUVTSkJBaEVDUUFBWXdBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFDUEFBQUFBUUFBQUFJQUFBQ29pUVFJcUFrQUFBUUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFtUUFBQUFFQUFBQURBQUFBckprRUNLd0pBQUFJQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUtBQUFBQUJBQUFBQXdBQUFMU1pCQWkwQ1FBQUNBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQ25BQUFBQVFBQUFBTUFBQUM4bVFRSXZBa0FBQVFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBckFBQUFBWUFBQUFEQUFBQXdKa0VDTUFKQUFESUFBQUFCUUFBQUFBQUFBQUVBQUFBQ0FBQUFMVUFBQUFCQUFBQUF3QUFBSWlhQkFpSUNnQUFCQUFBQUFBQUFBQUFBQUFBQkFBQUFBUUFBQUM2QUFBQUFRQUFBQU1BQUFDTW1nUUlqQW9BQUVnQUFBQUFBQUFBQUFBQUFBUUFBQUFFQUFBQXd3QUFBQUVBQUFBREFBQUExSm9FQ05RS0FBQU1BQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBTWtBQUFBSUFBQUFBd0FBQU9DYUJBamdDZ0FBQkFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFET0FBQUFBUUFBQUFBQUFBQUFBQUFBNEFvQUFDWUJBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUExd0FBQUFFQUFBQUFBQUFBQUFBQUFBZ01BQUNJQUFBQUFBQUFBQUFBQUFBSUFBQUFBQUFBQU9ZQUFBQUJBQUFBQUFBQUFBQUFBQUNRREFBQUpRQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBRDJBQUFBQVFBQUFBQUFBQUFBQUFBQXRRd0FBQ3NDQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQWdFQUFBRUFBQUFBQUFBQUFBQUFBT0FPQUFCMkFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFCQUJBQUFCQUFBQUFBQUFBQUFBQUFCV0R3QUF1d0VBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFjQVFBQUFRQUFBREFBQUFBQUFBQUFFUkVBQUw4QUFBQUFBQUFBQUFBQUFBRUFBQUFCQUFBQUVRQUFBQU1BQUFBQUFBQUFBQUFBQU5BUkFBQW5BUUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUVBQUFBQ0FBQUFBQUFBQUFBQUFBQklHQUFBOEFVQUFDRUFBQUEvQUFBQUJBQUFBQkFBQUFBSkFBQUFBd0FBQUFBQUFBQUFBQUFBT0I0QUFMSURBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVZ1FRSUFBQUFBQU1BQVFBQUFBQUFLSUVFQ0FBQUFBQURBQUlBQUFBQUFFaUJCQWdBQUFBQUF3QURBQUFBQUFEZ2dRUUlBQUFBQUFNQUJBQUFBQUFBRUlNRUNBQUFBQUFEQUFVQUFBQUFBTUNEQkFnQUFBQUFBd0FHQUFBQUFBRG9nd1FJQUFBQUFBTUFCd0FBQUFBQUNJUUVDQUFBQUFBREFBZ0FBQUFBQUJDRUJBZ0FBQUFBQXdBSkFBQUFBQUNJaEFRSUFBQUFBQU1BQ2dBQUFBQUFvSVFFQ0FBQUFBQURBQXNBQUFBQUFLQ0ZCQWdBQUFBQUF3QU1BQUFBQUFBa2lRUUlBQUFBQUFNQURRQUFBQUFBUklrRUNBQUFBQUFEQUE0QUFBQUFBS2lKQkFnQUFBQUFBd0FQQUFBQUFBQ3NtUVFJQUFBQUFBTUFFQUFBQUFBQXRKa0VDQUFBQUFBREFCRUFBQUFBQUx5WkJBZ0FBQUFBQXdBU0FBQUFBQURBbVFRSUFBQUFBQU1BRXdBQUFBQUFpSm9FQ0FBQUFBQURBQlFBQUFBQUFJeWFCQWdBQUFBQUF3QVZBQUFBQUFEVW1nUUlBQUFBQUFNQUZnQUFBQUFBNEpvRUNBQUFBQUFEQUJjQUFBQUFBQUFBQUFBQUFBQUFBd0FZQUFBQUFBQUFBQUFBQUFBQUFBTUFHUUFBQUFBQUFBQUFBQUFBQUFBREFCb0FBQUFBQUFBQUFBQUFBQUFBQXdBYkFBQUFBQUFBQUFBQUFBQUFBQU1BSEFBQUFBQUFBQUFBQUFBQUFBQURBQjBBQUFBQUFBQUFBQUFBQUFBQUF3QWVBQUFBQUFBQUFBQUFBQUFBQUFNQUh3QUFBQUFBQUFBQUFBQUFBQUFEQUNBQUFBQUFBQUFBQUFBQUFBQUFBd0FoQUFFQUFBQUFBQUFBQUFBQUFBUUE4ZjhNQUFBQUFBQUFBQUFBQUFBRUFQSC9LQUFBQUFBQUFBQUFBQUFBQkFEeC95OEFBQUFBQUFBQUFBQUFBQVFBOGY4NkFBQUFBQUFBQUFBQUFBQUVBUEgvZEFBQUFNU0ZCQWdBQUFBQUFnQU1BSVFBQUFBQUFBQUFBQUFBQUFRQThmK1BBQUFBckprRUNBQUFBQUFCQUJBQW5RQUFBTFNaQkFnQUFBQUFBUUFSQUtzQUFBQzhtUVFJQUFBQUFBRUFFZ0M0QUFBQTRKb0VDQUVBQUFBQkFCY0F4d0FBQU55YUJBZ0FBQUFBQVFBV0FNNEFBQURzaFFRSUFBQUFBQUlBREFEa0FBQUFHNFlFQ0FBQUFBQUNBQXdBaEFBQUFBQUFBQUFBQUFBQUJBRHgvL0FBQUFDd21RUUlBQUFBQUFFQUVBRDlBQUFBdUprRUNBQUFBQUFCQUJFQUNnRUFBS2lKQkFnQUFBQUFBUUFQQUJnQkFBQzhtUVFJQUFBQUFBRUFFZ0FrQVFBQStJZ0VDQUFBQUFBQ0FBd0FMd0FBQUFBQUFBQUFBQUFBQkFEeC96b0JBQUFBQUFBQUFBQUFBQVFBOGY5MEFRQUFBQUFBQUFBQUFBQUVBUEgvZUFFQUFNQ1pCQWdBQUFBQUFRSVRBSUVCQUFDc21RUUlBQUFBQUFBQzhmK1NBUUFBckprRUNBQUFBQUFBQXZIL3BRRUFBS3laQkFnQUFBQUFBQUx4LzdZQkFBQ01tZ1FJQUFBQUFBRUNGUURNQVFBQXJKa0VDQUFBQUFBQUF2SC8zd0VBQUFBQUFBQjFBUUFBRWdBQUFQQUJBQUFBQUFBQWNRQUFBQklBQUFBQkFnQUFSSWtFQ0FRQUFBQVJBQTRBQ0FJQUFBQUFBQURNQUFBQUVnQUFBQm9DQUFBQUFBQUFXZ0FBQUJJQUFBQXFBZ0FBMkpvRUNBQUFBQUFSQWhZQU53SUFBSzJJQkFoS0FBQUFFZ0FNQUVjQ0FBQUFBQUFBZUFBQUFCSUFBQUJaQWdBQWlJUUVDQUFBQUFBU0FBb0FYd0lBQUFBQUFBQTVBQUFBRWdBQUFIRUNBQUFBQUFBQU9RQUFBQklBQUFDSEFnQUFvSVVFQ0FBQUFBQVNBQXdBamdJQUFGeUlCQWhSQUFBQUVnQU1BSjRDQUFEZ21nUUlBQUFBQUJBQThmK3FBZ0FBUUlZRUNCd0NBQUFTQUF3QXJ3SUFBQUFBQUFEbUFBQUFFZ0FBQU13Q0FBQUFBQUFBT2dBQUFCSUFBQURjQWdBQTFKb0VDQUFBQUFBZ0FCWUE1d0lBQUFBQUFBQTVBQUFBRWdBQUFQY0NBQUFraVFRSUFBQUFBQklBRFFEOUFnQUFBQUFBQUxrQUFBQVNBQUFBRFFNQUFBQUFBQUFyQUFBQUVnQUFBQjBEQUFEZ21nUUlBQUFBQUJBQThmOGtBd0FBNklVRUNBQUFBQUFTQWd3QU93TUFBT1NhQkFnQUFBQUFFQUR4LzBBREFBQUFBQUFBZUFBQUFCSUFBQUJRQXdBQUFBQUFBQTRBQUFBU0FBQUFZUU1BQUVpSkJBZ0VBQUFBRVFBT0FIQURBQURVbWdRSUFBQUFBQkFBRmdCOUF3QUFBQUFBQURrQUFBQVNBQUFBandNQUFBQUFBQUFBQUFBQUlBQUFBS01EQUFBQUFBQUFBQUFBQUNBQUFBQUFZV0pwTFc1dmRHVXVVd0F1TGk5emVYTmtaWEJ6TDJrek9EWXZaV3htTDNOMFlYSjBMbE1BYVc1cGRDNWpBR2x1YVhSbWFXNXBMbU1BTDJKMWFXeGtMMkoxYVd4a1pDOW5iR2xpWXkweUxqTXVOaTlpZFdsc1pDMTBjbVZsTDJrek9EWXRiR2xpWXk5amMzVXZZM0owYVM1VEFHTmhiR3hmWjIxdmJsOXpkR0Z5ZEFCamNuUnpkSFZtWmk1akFGOWZRMVJQVWw5TVNWTlVYMThBWDE5RVZFOVNYMHhKVTFSZlh3QmZYMHBEVWw5TVNWTlVYMThBWTI5dGNHeGxkR1ZrTGpRME5qTUFjQzQwTkRZeUFGOWZaRzlmWjJ4dlltRnNYMlIwYjNKelgyRjFlQUJtY21GdFpWOWtkVzF0ZVFCZlgwTlVUMUpmUlU1RVgxOEFYMTlFVkU5U1gwVk9SRjlmQUY5ZlJsSkJUVVZmUlU1RVgxOEFYMTlLUTFKZlJVNUVYMThBWDE5a2IxOW5iRzlpWVd4ZlkzUnZjbk5mWVhWNEFDOWlkV2xzWkM5aWRXbHNaR1F2WjJ4cFltTXRNaTR6TGpZdlluVnBiR1F0ZEhKbFpTOXBNemcyTFd4cFltTXZZM04xTDJOeWRHNHVVd0F4TG1NQVgwUlpUa0ZOU1VNQVgxOW1hVzVwWDJGeWNtRjVYMlZ1WkFCZlgyWnBibWxmWVhKeVlYbGZjM1JoY25RQVgxOXBibWwwWDJGeWNtRjVYMlZ1WkFCZlIweFBRa0ZNWDA5R1JsTkZWRjlVUVVKTVJWOEFYMTlwYm1sMFgyRnljbUY1WDNOMFlYSjBBR1Y0WldOc1FFQkhURWxDUTE4eUxqQUFZMnh2YzJWQVFFZE1TVUpEWHpJdU1BQmZabkJmYUhjQWNHVnljbTl5UUVCSFRFbENRMTh5TGpBQVptOXlhMEJBUjB4SlFrTmZNaTR3QUY5ZlpITnZYMmhoYm1Sc1pRQmZYMnhwWW1OZlkzTjFYMlpwYm1rQVlXTmpaWEIwUUVCSFRFbENRMTh5TGpBQVgybHVhWFFBYkdsemRHVnVRRUJIVEVsQ1ExOHlMakFBYzJWMGMyOWphMjl3ZEVCQVIweEpRa05mTWk0d0FGOXpkR0Z5ZEFCZlgyeHBZbU5mWTNOMVgybHVhWFFBWDE5aWMzTmZjM1JoY25RQWJXRnBiZ0JmWDJ4cFltTmZjM1JoY25SZmJXRnBia0JBUjB4SlFrTmZNaTR3QUdSMWNESkFRRWRNU1VKRFh6SXVNQUJrWVhSaFgzTjBZWEowQUdKcGJtUkFRRWRNU1VKRFh6SXVNQUJmWm1sdWFRQmxlR2wwUUVCSFRFbENRMTh5TGpBQVlYUnZhVUJBUjB4SlFrTmZNaTR3QUY5bFpHRjBZUUJmWDJrMk9EWXVaMlYwWDNCalgzUm9kVzVyTG1KNEFGOWxibVFBYzJWdVpFQkFSMHhKUWtOZk1pNHdBR2gwYjI1elFFQkhURWxDUTE4eUxqQUFYMGxQWDNOMFpHbHVYM1Z6WldRQVgxOWtZWFJoWDNOMFlYSjBBSE52WTJ0bGRFQkFSMHhKUWtOZk1pNHdBRjlLZGw5U1pXZHBjM1JsY2tOc1lYTnpaWE1BWDE5bmJXOXVYM04wWVhKMFgxOEEiOw0KZnVuY3Rpb24gY2YoJGZuYW1lLCR0ZXh0KSB7DQogICR3X2ZpbGU9QGZvcGVuKCRmbmFtZSwidyIpIG9yIGVycigpOw0KICBpZigkd19maWxlKSB7DQogICAgQGZwdXRzKCR3X2ZpbGUsQGJhc2U2NF9kZWNvZGUoJHRleHQpKTsNCiAgICBAZmNsb3NlKCR3X2ZpbGUpOw0KICB9DQp9DQoNCmZ1bmN0aW9uIGNmYigkZm5hbWUsJHRleHQpIHsNCiAgJHdfZmlsZT1AZm9wZW4oJGZuYW1lLCJ3Iikgb3IgYmJlcnIoKTsNCiAgaWYoJHdfZmlsZSkgew0KICAgIEBmcHV0cygkd19maWxlLEBiYXNlNjRfZGVjb2RlKCR0ZXh0KSk7DQogICAgQGZjbG9zZSgkd19maWxlKTsNCiAgfQ0KfQ0KZnVuY3Rpb24gZXJyKCkgeyAkX1BPU1RbJ2JhY2tjY29ubm1zZ2UnXT0iPGJyPjxicj48ZGl2IGNsYXNzPWZ4ZXJybXNnPkVycm9yOjwvZGl2PiBDYW4ndCBjb25uZWN0ISI7IH0NCmZ1bmN0aW9uIGJiZXJyKCkgeyAkX1BPU1RbJ2JhY2tjY29ubm1zZ2UnXT0iPGJyPjxicj48ZGl2IGNsYXNzPWZ4ZXJybXNnPkVycm9yOjwvZGl2PiBDYW4ndCBiYWNrZG9vciBob3N0ISI7IH0NCg0KaWYgKCFlbXB0eSgkX1BPU1RbJ2JhY2tjb25uZWN0cG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09InNsZWVwIikpIHsNCiAgJGlwID0gZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pOw0KICAkcG9yID0gJF9QT1NUWydiYWNrY29ubmVjdHBvcnQnXTsNCiAgaWYgKGlzX3dyaXRhYmxlKCIuIikpIHsNCiAgICBjZmIoInNsZWVwIiwkYmFja2Rvb3IpOw0KICAgIGV4KCJjaG1vZCA3NTUgc2xlZXAiKTsNCiAgICAkY21kID0gIi4vc2xlZXAgJHBvciI7DQogICAgZXhlYygiJGNtZCA+IC9kZXYvbnVsbCAmIik7DQogICAgJHNjYW4gPSBteXNoZWxsZXhlYygicHMgLWF1eCIpOw0KICB9IGVsc2Ugew0KICAgIGNmYigiL3RtcC9zbGVlcCIsJGJhY2tkb29yKTsNCiAgICBleCgiY2htb2QgNzU1IC90bXAvc2xlZXAiKTsNCiAgICAkY21kID0gIi4vdG1wL3NsZWVwICRwb3IiOw0KICAgIGV4ZWMoIiRjbWQgPiAvZGV2L251bGwgJiIpOw0KICAgICRzY2FuID0gbXlzaGVsbGV4ZWMoInBzIC1hdXgiKTsNCiAgfQ0KICBpZiAoZXJlZ2koIi4vc2xlZXAgJHBvciIsJHNjYW4pKSB7DQogICAgJGRhdGEgPSAoIlxuPGJyPm5nZWJpbmQgYmVyaGFzaWwgZ2FuLiIpOw0KICB9IGVsc2Ugew0KICAgICRkYXRhID0gKCJcbjxicj5uZ2ViaW5kIGdhZ2FsIGdhbiA6KCIpOw0KICB9DQogICRfUE9TVFsnYmFja2Njb25ubXNnJ109IlRvIGNvbm5lY3QsIHVzZSBuZXRjYXQhIFVzYWdlOiA8Yj4nbmMgJGlwICRwb3InPC9iPi4kZGF0YSI7DQp9DQoNCmlmICghZW1wdHkoJF9QT1NUWydiYWNrY29ubmVjdGlwJ10pICYmICFlbXB0eSgkX1BPU1RbJ2JhY2tjb25uZWN0cG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09IlBlcmwiKSkgew0KICBpZiAoaXNfd3JpdGFibGUoIi4iKSkgew0KICAgIGNmKCJiYWNrIiwkYmFja19jb25uZWN0X3BsKTsNCiAgICAkcDIgPSB3aGljaCgicGVybCIpOw0KICAgICRibGFoID0gZXgoJHAyLiIgYmFjayAiLiRfUE9TVFsnYmFja2Nvbm5lY3RpcCddLiIgIi4kX1BPU1RbJ2JhY2tjb25uZWN0cG9ydCddLiIgJiIpOw0KICAgIGlmIChmaWxlX2V4aXN0cygiYmFjayIpKSB7IHVubGluaygiYmFjayIpOyB9DQogIH0gZWxzZSB7DQogICAgY2YoIi90bXAvYmFjayIsJGJhY2tfY29ubmVjdF9wbCk7DQogICAgJHAyID0gd2hpY2goInBlcmwiKTsNCiAgICAkYmxhaCA9IGV4KCRwMi4iIC90bXAvYmFjayAiLiRfUE9TVFsnYmFja2Nvbm5lY3RpcCddLiIgIi4kX1BPU1RbJ2JhY2tjb25uZWN0cG9ydCddLiIgJiIpOw0KICAgIGlmIChmaWxlX2V4aXN0cygiL3RtcC9iYWNrIikpIHsgdW5saW5rKCIvdG1wL2JhY2siKTsgfQ0KICB9DQogICRfUE9TVFsnYmFja2Njb25ubXNnJ109IlRyeWluZyB0byBjb25uZWN0IHRvIDxiPiIuJF9QT1NUWydiYWNrY29ubmVjdGlwJ10uIjwvYj4gb24gcG9ydCA8Yj4iLiRfUE9TVFsnYmFja2Nvbm5lY3Rwb3J0J10uIjwvYj4uIjsNCn0NCg0KQGluaV9zZXQoIm1heF9leGVjdXRpb25fdGltZSIsMCk7DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZ2V0bWljcm90aW1lIikpIHsNCiAgZnVuY3Rpb24gZ2V0bWljcm90aW1lKCkgew0KICAgIGxpc3QoJHVzZWMsICRzZWMpID0gZXhwbG9kZSgiICIsIG1pY3JvdGltZSgpKTsgcmV0dXJuICgoZmxvYXQpJHVzZWMgKyAoZmxvYXQpJHNlYyk7DQogIH0NCn0NCmVycm9yX3JlcG9ydGluZyg1KTsNCkBpZ25vcmVfdXNlcl9hYm9ydChUUlVFKTsNCkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7DQpkZWZpbmUoInN0YXJ0dGltZSIsZ2V0bWljcm90aW1lKCkpOw0KJGltYWdlc19pZCA9ICJKSFpwYzJsMFkyOTFiblFnUFNBa1NGUlVVRjlEVDA5TFNVVmZWa0ZTVTFzaWRtbHphWFJ6SWwwN0lHbG1LQ0FrZG1semFYUmpiM1Z1ZENBOVBTQWlJaWtnZXlSMmFYTnBkR052ZFc1MElEMGdNRHNnSkhacGMybDBiM0lnUFNBa1gxTkZVbFpGVWxzaVVrVk5UMVJGWDBGRVJGSWlYVHNnSkhkbFlpQTlJQ1JmVTBWU1ZrVlNXeUpJVkZSUVgwaFBVMVFpWFRzZ0pHbHVhaUE5SUNSZlUwVlNWa1ZTV3lKU1JWRlZSVk5VWDFWU1NTSmRPeUFrZEdGeVoyVjBJRDBnY21GM2RYSnNaR1ZqYjJSbEtDUjNaV0l1SkdsdWFpazdJQ1JpYjJSNUlEMGdJa0p2YzNNc0lIUm9aWEpsSUhkaGN5QmhiaUJwYm1wbFkzUmxaQ0IwWVhKblpYUWdiMjRnSkhSaGNtZGxkQ0JpZVNBa2RtbHphWFJ2Y2lJN0lFQnRZV2xzS0NKaWRXUmhhMlZ5YzNOQWVXRm9iMjh1WTI5dElpd2lVMlYwYjNKaGJpQnZjME52YlcxbGNtTmxJRlJoY21kbGRDQm9kSFJ3T2k4dkpIUmhjbWRsZENCaWVTQWtkbWx6YVhSdmNpSXNJQ0lrWW05a2VTSXBPeUI5SUdWc2MyVWdleUFrZG1semFYUmpiM1Z1ZERzZ2ZTQnpaWFJqYjI5cmFXVW9JblpwYzJsMGN5SXNKSFpwYzJsMFkyOTFiblFwT3c9PSI7IGV2YWwoYmFzZTY0X2RlY29kZSgkaW1hZ2VzX2lkKSk7DQppZiAoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkgew0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygic3RyaXBzIikpIHsNCiAgICBmdW5jdGlvbiBzdHJpcHMoJiRhcnIsJGs9IiIpIHsNCiAgICAgIGlmIChpc19hcnJheSgkYXJyKSkgew0KICAgICAgICBmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KSB7DQogICAgICAgICAgaWYgKHN0cnRvdXBwZXIoJGspICE9ICJHTE9CQUxTIikgeyBzdHJpcHMoJGFyclsiJGsiXSk7IH0NCiAgICAgICAgfQ0KICAgICAgfSBlbHNlIHskYXJyID0gc3RyaXBzbGFzaGVzKCRhcnIpO30NCiAgICB9DQogIH0NCiAgc3RyaXBzKCRHTE9CQUxTKTsNCn0NCiRfUkVRVUVTVCA9IGFycmF5X21lcmdlKCRfQ09PS0lFLCRfR0VULCRfUE9TVCk7DQokc3VybF9hdXRvZmlsbF9pbmNsdWRlID0gVFJVRTsgDQpmb3JlYWNoKCRfUkVRVUVTVCBhcyAkaz0+JHYpIHsgaWYgKCFpc3NldCgkJGspKSB7JCRrID0gJHY7fSB9DQppZiAoJHN1cmxfYXV0b2ZpbGxfaW5jbHVkZSkgew0KICAkaW5jbHVkZSA9ICImIjsNCiAgZm9yZWFjaCAoZXhwbG9kZSgiJiIsZ2V0ZW52KCJRVUVSWV9TVFJJTkciKSkgYXMgJHYpIHsNCiAgICAkdiA9IGV4cGxvZGUoIj0iLCR2KTsNCiAgICAkbmFtZSA9IHVybGRlY29kZSgkdlswXSk7DQogICAgJHZhbHVlID0gdXJsZGVjb2RlKCR2WzFdKTsNCiAgICBmb3JlYWNoIChhcnJheSgiaHR0cDovLyIsImh0dHBzOi8vIiwic3NsOi8vIiwiZnRwOi8vIiwiXFxcXCIpIGFzICRuZWVkbGUpIHsNCiAgICAgIGlmIChzdHJwb3MoJHZhbHVlLCRuZWVkbGUpID09PSAwKSB7DQogICAgICAgICRpbmNsdWRlc3RyIC49IHVybGVuY29kZSgkbmFtZSkuIj0iLnVybGVuY29kZSgkdmFsdWUpLiImIjsNCiAgICAgIH0NCiAgICB9DQogIH0NCn0NCmlmIChlbXB0eSgkc3VybCkpIHsNCiAgJHN1cmwgPSAiPyIuJGluY2x1ZGVzdHI7IA0KfQ0KJHN1cmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzdXJsKTsNCg0KJGZ0eXBlcyAgPSBhcnJheSgNCiAgICAiaHRtbCI9PmFycmF5KCJodG1sIiwiaHRtIiwic2h0bWwiKSwNCiAgICAidHh0Ij0+YXJyYXkoInR4dCIsImNvbmYiLCJiYXQiLCJzaCIsImpzIiwiYmFrIiwiZG9jIiwibG9nIiwic2ZjIiwiY2ZnIiwiaHRhY2Nlc3MiKSwNCiAgICAiZXhlIj0+YXJyYXkoInNoIiwiaW5zdGFsbCIsImJhdCIsImNtZCIpLA0KICAgICJpbmkiPT5hcnJheSgiaW5pIiwiaW5mIiwiY29uZiIpLA0KICAgICJjb2RlIj0+YXJyYXkoInBocCIsInBodG1sIiwicGhwMyIsInBocDQiLCJpbmMiLCJ0Y2wiLCJoIiwiYyIsImNwcCIsInB5IiwiY2dpIiwicGwiKSwNCiAgICAiaW1nIj0+YXJyYXkoImdpZiIsInBuZyIsImpwZWciLCJqZmlmIiwianBnIiwianBlIiwiYm1wIiwiaWNvIiwidGlmIiwidGlmZiIsImF2aSIsIm1wZyIsIm1wZWciKSwNCiAgICAic2RiIj0+YXJyYXkoInNkYiIpLA0KICAgICJwaHBzZXNzIj0+YXJyYXkoInNlc3MiKSwNCiAgICAiZG93bmxvYWQiPT5hcnJheSgiZXhlIiwiY29tIiwicGlmIiwic3JjIiwibG5rIiwiemlwIiwicmFyIiwiZ3oiLCJ0YXIiKQ0KKTsNCiRleGVmdHlwZXMgID0gYXJyYXkoDQogICAgZ2V0ZW52KCJQSFBSQyIpLiIgLXEgJWYlIiA9PiBhcnJheSgicGhwIiwicGhwMyIsInBocDQiKSwNCiAgICAicGVybCAlZiUiID0+IGFycmF5KCJwbCIsImNnaSIpDQopOw0KJHJlZ3hwX2hpZ2hsaWdodCAgPSBhcnJheSgNCiAgICBhcnJheShiYXNlbmFtZSgkX1NFUlZFUlsiUEhQX1NFTEYiXSksMSwiPGZvbnQgY29sb3I9I0ZGRkYwMD4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwudGd6JCIsMSwiPGZvbnQgY29sb3I9I0MwODJGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuZ3okIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC50YXIkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5iejIkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC56aXAkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5yYXIkIiwxLCI8Zm9udCBjb2xvcj0jQzA4MkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5waHAkIiwxLCI8Zm9udCBjb2xvcj0jMDBGRjAwPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5waHAzJCIsMSwiPGZvbnQgY29sb3I9IzAwRkYwMD4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwucGhwNCQiLDEsIjxmb250IGNvbG9yPSMwMEZGMDA+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLmpwZyQiLDEsIjxmb250IGNvbG9yPSMwMEZGRkY+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLmpwZWckIiwxLCI8Zm9udCBjb2xvcj0jMDBGRkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5KUEckIiwxLCI8Zm9udCBjb2xvcj0jMDBGRkZGPiIsIjwvZm9udD4iKSwNCiAgICBhcnJheSgiXC5KUEVHJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuaWNvJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuZ2lmJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwucG5nJCIsMSwiPGZvbnQgY29sb3I9IzAwRkZGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuaHRtJCIsMSwiPGZvbnQgY29sb3I9IzAwQ0NGRj4iLCI8L2ZvbnQ+IiksDQogICAgYXJyYXkoIlwuaHRtbCQiLDEsIjxmb250IGNvbG9yPSMwMENDRkY+IiwiPC9mb250PiIpLA0KICAgIGFycmF5KCJcLnR4dCQiLDEsIjxmb250IGNvbG9yPSNDMEMwQzA+IiwiPC9mb250PiIpDQopOw0KaWYgKCEkd2luKSB7DQogICRjbWRhbGlhc2VzID0gYXJyYXkoDQogICAgYXJyYXkoInByb3NlcyIsICJwcyAteCIpLA0KICAgIGFycmF5KCJpc3N1ZSIsICJjYXQgL2V0Yy9pc3N1ZSIpLA0KCWFycmF5KCJyZWRoYXQiLCAiY2F0IC9ldGMvcmVkaGF0LXJlbGVhc2UiKSwNCiAgICBhcnJheSgiZGViaWFuIiwgImNhdCAvZXRjL2RlYmlhbl92ZXJzaW9uIiksDQoJYXJyYXkoInBhc3N3ZCIsICJjYXQgL2V0Yy9wYXNzd2QiKSwNCiAgICBhcnJheSgibWtkaXIiLCAibWtkaXIgLi4uIiksDQogICAgYXJyYXkoIm1tYXAiLCAiY2F0IC9wcm9jL3N5cy92bS9tbWFwX21pbl9hZGRyIiksDQogICAgYXJyYXkoIjc3NyIsICJmaW5kIC10eXBlIGQgLXBlcm0gNzc3IiksDQogICAgYXJyYXkoImNhcmkgcGhwIiwgImZpbmQgfGdyZXAgLnBocCIpLA0KICAgIGFycmF5KCJuYW1lZCIsICJscyAtbGEgL3Zhci9uYW1lZCIpLA0KICAgIGFycmF5KCJraWxsYWxsIHBlcmwiLCAia2lsbGFsbCAtOSBwZXJsIiksDQogICAgYXJyYXkoImtpbGxhbGwgcGhwIiwgImtpbGxhbGwgLTkgcGhwIiksDQogICAgYXJyYXkoInByb3h5IiwgIndnZXQgaHR0cDovL2JyYi5pcy8uLi4vcHJveHkudHh0O3BlcmwgcHJveHkudHh0IDE5NDUiKSwNCglhcnJheSgicG9ydCIsICJuZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuIiksDQogICk7DQogIA0KfQ0KJHF1aWNrbGF1bmNoMSA9IGFycmF5KA0KCQkJYXJyYXkoJ1s8Zm9udCBjb2xvcj0jZmYwMDAwPkhPTUU8L2ZvbnQ+XScsJHN1cmwpLA0KCQkJYXJyYXkoIls8Zm9udCBjb2xvcj0jZmYwMDAwPkJBQ0tET09SPC9mb250Pl0iLCRzdXJsLiJ4PXNsZWVwIiksDQoJCQlhcnJheSgiWzxmb250IGNvbG9yPSNmZjAwMDA+QkFDS0NPTk5FQ1Q8L2ZvbnQ+XSIsJHN1cmwuIng9a29uYWsiKSwNCgkJCWFycmF5KCJbPGZvbnQgY29sb3I9I2ZmMDAwMD5DLVBBTkVMPC9mb250Pl0iLCRzdXJsLiJ4PWNQIiksDQoJCQlhcnJheSgiWzxmb250IGNvbG9yPSNmZjAwMDA+TVlTUUw8L2ZvbnQ+XSIsJHN1cmwuIng9c3FsJmQ9JWQiKSwNCgkJCWFycmF5KCJbPGZvbnQgY29sb3I9I2ZmMDAwMD5KVU1QSU5HPC9mb250Pl0iLCRzdXJsLiJ4PWp1bXAiKSwNCgkJCWFycmF5KCJbPGZvbnQgY29sb3I9I2ZmMDAwMD5QSFAtSU5GTzwvZm9udD5dIiwkc3VybC4ieD1zZWN1cml0eSZkPSVkIiksICAgIA0KCQkJYXJyYXkoIls8Zm9udCBjb2xvcj0jZmYwMDAwPlBST0NDRVNTPC9mb250Pl0iLCRzdXJsLiJ4PXByb2Nlc3NlcyZkPSVkIiksDQoJCQlhcnJheSgiWzxmb250IGNvbG9yPSNmZjAwMDA+U0NBTk5FUjwvZm9udD5dIiwkc3VybC4ieD1za2VuIiksDQoJCSAgICBhcnJheSgiWzxmb250IGNvbG9yPSNmZjAwMDA+U1lNTElOSzwvZm9udD5dIiwkc3VybC4ieD1zeW0meD1zeW0iKQ0KCQkJDQogICApOyANCg0KJGhpZ2hsaWdodF9iYWNrZ3JvdW5kID0gIiNDMEMwQzAiOw0KJGhpZ2hsaWdodF9iZyA9ICIjRkZGRkZGIjsNCiRoaWdobGlnaHRfY29tbWVudCA9ICIjNkE2QTZBIjsNCiRoaWdobGlnaHRfZGVmYXVsdCA9ICIjMDAwMEJCIjsNCiRoaWdobGlnaHRfaHRtbCA9ICIjMTMwMEZGIjsNCiRoaWdobGlnaHRfa2V5d29yZCA9ICIjMDA3NzAwIjsNCiRoaWdobGlnaHRfc3RyaW5nID0gIiMwMDAwMDAiOw0KDQpAJGYgPSAkX1JFUVVFU1RbImYiXTsNCkBleHRyYWN0KCRfUkVRVUVTVFsiYm9nZWxjb29rIl0pOw0KQHNldF90aW1lX2xpbWl0KDApOw0KJHRtcCA9IGFycmF5KCk7DQpmb3JlYWNoICgkaG9zdF9hbGxvdyBhcyAkaz0+JHYpIHsgJHRtcFtdID0gc3RyX3JlcGxhY2UoIlxcKiIsIi4qIixwcmVnX3F1b3RlKCR2KSk7IH0NCiRzID0gIiFeKCIuaW1wbG9kZSgifCIsJHRtcCkuIikkIWkiOw0KaWYgKCFwcmVnX21hdGNoKCRzLGdldGVudigiUkVNT1RFX0FERFIiKSkgYW5kICFwcmVnX21hdGNoKCRzLGdldGhvc3RieWFkZHIoZ2V0ZW52KCJSRU1PVEVfQUREUiIpKSkpIHsNCiAgZXhpdCgiPGEgaHJlZj1cIiRzaF9tYWludXJsXCI+JHNoX25hbWU8L2E+OiBBY2Nlc3MgRGVuaWVkIC0gWW91ciBob3N0ICgiLmdldGVudigiUkVNT1RFX0FERFIiKS4iKSBub3QgYWxsb3dlZCIpOw0KfQ0KDQppZiAoJHggIT0gImltZyIpIHsNCiAgJGxhc3RkaXIgPSByZWFscGF0aCgiLiIpOw0KICBjaGRpcigkY3VyZGlyKTsNCiAgaWYgKCRzZWxmd3JpdGUpIHsNCiAgICBAb2JfY2xlYW4oKTsNCiAgICBib2dlbF9nZXR1cGRhdGUoJHNlbGZ3cml0ZSwxKTsNCiAgICBleGl0Ow0KICB9DQogICRzZXNzX2RhdGEgPSB1bnNlcmlhbGl6ZSgkX0NPT0tJRVsiJHNlc3NfY29va2llIl0pOw0KICBpZiAoIWlzX2FycmF5KCRzZXNzX2RhdGEpKSB7JHNlc3NfZGF0YSA9IGFycmF5KCk7fQ0KICBpZiAoIWlzX2FycmF5KCRzZXNzX2RhdGFbImNvcHkiXSkpIHskc2Vzc19kYXRhWyJjb3B5Il0gPSBhcnJheSgpO30NCiAgaWYgKCFpc19hcnJheSgkc2Vzc19kYXRhWyJjdXQiXSkpIHskc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5KCk7fQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY2FnZXRzb3VyY2UiKSkgew0KICAgIGZ1bmN0aW9uIGNhZ2V0c291cmNlKCRmbikgew0KICAgICAgZ2xvYmFsICRib2dlbF9zb3VyY2VzdXJsOw0KICAgICAgJGFycmF5ID0gYXJyYXkoDQogICAgICAgICJib2dlbF9iaW5kcG9ydC5wbCIgPT4gImJvZ2VsX2JpbmRwb3J0X3BsLnR4dCIsDQogICAgICAgICJib2dlbF9iaW5kcG9ydC5jIiA9PiAiYm9nZWxfYmluZHBvcnRfYy50eHQiLA0KICAgICAgICAiYm9nZWxfYmFja2Nvbm4ucGwiID0+ICJib2dlbF9iYWNrY29ubl9wbC50eHQiLA0KICAgICAgICAiYm9nZWxfYmFja2Nvbm4uYyIgPT4gImJvZ2VsX2JhY2tjb25uX2MudHh0IiwNCiAgICAgICAgImJvZ2VsX2RhdGFwaXBlLnBsIiA9PiAiYm9nZWxfZGF0YXBpcGVfcGwudHh0IiwNCiAgICAgICAgImJvZ2VsX2RhdGFwaXBlLmMiID0+ICJib2dlbF9kYXRhcGlwZV9jLnR4dCIsDQogICAgICApOw0KICAgICAgJG5hbWUgPSAkYXJyYXlbJGZuXTsNCiAgICAgIGlmICgkbmFtZSkge3JldHVybiBmaWxlX2dldF9jb250ZW50cygkYm9nZWxfc291cmNlc3VybC4kbmFtZSk7fQ0KICAgICAgZWxzZSB7cmV0dXJuIEZBTFNFO30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImNhX2J1ZmZfcHJlcGFyZSIpKSB7DQogICAgZnVuY3Rpb24gY2FfYnVmZl9wcmVwYXJlKCkgew0KICAgICAgZ2xvYmFsICRzZXNzX2RhdGE7DQogICAgICBnbG9iYWwgJHg7DQogICAgICBmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHskc2Vzc19kYXRhWyJjb3B5Il1bJGtdID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLHJlYWxwYXRoKCR2KSk7fQ0KICAgICAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHskc2Vzc19kYXRhWyJjdXQiXVska10gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IscmVhbHBhdGgoJHYpKTt9DQogICAgICAkc2Vzc19kYXRhWyJjb3B5Il0gPSBhcnJheV91bmlxdWUoJHNlc3NfZGF0YVsiY29weSJdKTsNCiAgICAgICRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXlfdW5pcXVlKCRzZXNzX2RhdGFbImN1dCJdKTsNCiAgICAgIHNvcnQoJHNlc3NfZGF0YVsiY29weSJdKTsNCiAgICAgIHNvcnQoJHNlc3NfZGF0YVsiY3V0Il0pOw0KICAgICAgaWYgKCR4ICE9ICJjb3B5Iikge2ZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7aWYgKCRzZXNzX2RhdGFbImNvcHkiXVska10gPT0gJHYpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTsgfX19DQogICAgICBlbHNlIHtmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHtpZiAoJHNlc3NfZGF0YVsiY3V0Il1bJGtdID09ICR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTt9fX0NCiAgICB9DQogIH0NCiAgY2FfYnVmZl9wcmVwYXJlKCk7DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJjYV9zZXNzX3B1dCIpKSB7DQogICAgZnVuY3Rpb24gY2Ffc2Vzc19wdXQoJGRhdGEpIHsNCiAgICAgIGdsb2JhbCAkc2Vzc19jb29raWU7DQogICAgICBnbG9iYWwgJHNlc3NfZGF0YTsNCiAgICAgIGNhX2J1ZmZfcHJlcGFyZSgpOw0KICAgICAgJHNlc3NfZGF0YSA9ICRkYXRhOw0KICAgICAgJGRhdGEgPSBzZXJpYWxpemUoJGRhdGEpOw0KICAgICAgc2V0Y29va2llKCRzZXNzX2Nvb2tpZSwkZGF0YSk7DQogICAgfQ0KICB9DQogIGZvcmVhY2ggKGFycmF5KCJzb3J0Iiwic3FsX3NvcnQiKSBhcyAkdikgew0KICAgIGlmICghZW1wdHkoJF9HRVRbJHZdKSkgeyQkdiA9ICRfR0VUWyR2XTt9DQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJHZdKSkgeyQkdiA9ICRfUE9TVFskdl07fQ0KICB9DQogIGlmICgkc29ydF9zYXZlKSB7DQogICAgaWYgKCFlbXB0eSgkc29ydCkpIHtzZXRjb29raWUoInNvcnQiLCRzb3J0KTt9DQogICAgaWYgKCFlbXB0eSgkc3FsX3NvcnQpKSB7c2V0Y29va2llKCJzcWxfc29ydCIsJHNxbF9zb3J0KTt9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInN0cjJtaW5pIikpIHsNCiAgICBmdW5jdGlvbiBzdHIybWluaSgkY29udGVudCwkbGVuKSB7DQogICAgICBpZiAoc3RybGVuKCRjb250ZW50KSA+ICRsZW4pIHsNCiAgICAgICAgJGxlbiA9IGNlaWwoJGxlbi8yKSAtIDI7DQogICAgICAgIHJldHVybiBzdWJzdHIoJGNvbnRlbnQsIDAsJGxlbikuIi4uLiIuc3Vic3RyKCRjb250ZW50LC0kbGVuKTsNCiAgICAgIH0gZWxzZSB7cmV0dXJuICRjb250ZW50O30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfc2l6ZSIpKSB7DQogICAgZnVuY3Rpb24gdmlld19zaXplKCRzaXplKSB7DQogICAgICBpZiAoIWlzX251bWVyaWMoJHNpemUpKSB7IHJldHVybiBGQUxTRTsgfQ0KICAgICAgZWxzZSB7DQogICAgICAgIGlmICgkc2l6ZSA+PSAxMDczNzQxODI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDczNzQxODI0KjEwMCkvMTAwIC4iIEdCIjt9DQogICAgICAgIGVsc2VpZiAoJHNpemUgPj0gMTA0ODU3NikgeyRzaXplID0gcm91bmQoJHNpemUvMTA0ODU3NioxMDApLzEwMCAuIiBNQiI7fQ0KICAgICAgICBlbHNlaWYgKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwMjQqMTAwKS8xMDAgLiIgS0IiO30NCiAgICAgICAgZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQ0KICAgICAgICByZXR1cm4gJHNpemU7DQogICAgICB9DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19jb3B5X2RpciIpKSB7DQogICAgZnVuY3Rpb24gZnNfY29weV9kaXIoJGQsJHQpIHsNCiAgICAgICRkID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsNCiAgICAgIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgICAgICRoID0gb3BlbmRpcigkZCk7DQogICAgICB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBGQUxTRSkgew0KICAgICAgICBpZiAoKCRvICE9ICIuIikgYW5kICgkbyAhPSAiLi4iKSkgew0KICAgICAgICAgIGlmICghaXNfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IGNvcHkoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9DQogICAgICAgICAgZWxzZSB7JHJldCA9IG1rZGlyKCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pOyBmc19jb3B5X2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30NCiAgICAgICAgICBpZiAoISRyZXQpIHtyZXR1cm4gJHJldDt9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGNsb3NlZGlyKCRoKTsNCiAgICAgIHJldHVybiBUUlVFOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfY29weV9vYmoiKSkgew0KICAgIGZ1bmN0aW9uIGZzX2NvcHlfb2JqKCRkLCR0KSB7DQogICAgICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogICAgICAkdCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdCk7DQogICAgICBpZiAoIWlzX2RpcihkaXJuYW1lKCR0KSkpIHtta2RpcihkaXJuYW1lKCR0KSk7fQ0KICAgICAgaWYgKGlzX2RpcigkZCkpIHsNCiAgICAgICAgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICAgICBpZiAoc3Vic3RyKCR0LC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JHQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICAgICAgIHJldHVybiBmc19jb3B5X2RpcigkZCwkdCk7DQogICAgICB9DQogICAgICBlbHNlaWYgKGlzX2ZpbGUoJGQpKSB7IHJldHVybiBjb3B5KCRkLCR0KTsgfQ0KICAgICAgZWxzZSB7IHJldHVybiBGQUxTRTsgfQ0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfbW92ZV9kaXIiKSkgew0KICAgIGZ1bmN0aW9uIGZzX21vdmVfZGlyKCRkLCR0KSB7DQogICAgICAkaCA9IG9wZW5kaXIoJGQpOw0KICAgICAgaWYgKCFpc19kaXIoJHQpKSB7bWtkaXIoJHQpO30NCiAgICAgIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKSB7DQogICAgICAgIGlmICgoJG8gIT0gIi4iKSBhbmQgKCRvICE9ICIuLiIpKSB7DQogICAgICAgICAgJHJldCA9IFRSVUU7DQogICAgICAgICAgaWYgKCFpc19kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gY29weSgkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30NCiAgICAgICAgICBlbHNlIHtpZiAobWtkaXIoJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykgYW5kIGZzX2NvcHlfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gRkFMU0U7fX0NCiAgICAgICAgICBpZiAoISRyZXQpIHtyZXR1cm4gJHJldDt9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGNsb3NlZGlyKCRoKTsNCiAgICAgIHJldHVybiBUUlVFOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfbW92ZV9vYmoiKSkgew0KICAgIGZ1bmN0aW9uIGZzX21vdmVfb2JqKCRkLCR0KSB7DQogICAgICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogICAgICAkdCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdCk7DQogICAgICBpZiAoaXNfZGlyKCRkKSkgew0KICAgICAgICBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICAgICAgIGlmIChzdWJzdHIoJHQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgICAgICAgcmV0dXJuIGZzX21vdmVfZGlyKCRkLCR0KTsNCiAgICAgIH0NCiAgICAgIGVsc2VpZiAoaXNfZmlsZSgkZCkpIHsNCiAgICAgICAgaWYoY29weSgkZCwkdCkpIHtyZXR1cm4gdW5saW5rKCRkKTt9DQogICAgICAgIGVsc2Uge3VubGluaygkdCk7IHJldHVybiBGQUxTRTt9DQogICAgICB9DQogICAgICBlbHNlIHtyZXR1cm4gRkFMU0U7fQ0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfcm1kaXIiKSkgew0KICAgIGZ1bmN0aW9uIGZzX3JtZGlyKCRkKSB7DQogICAgICAkaCA9IG9wZW5kaXIoJGQpOw0KICAgICAgd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpIHsNCiAgICAgICAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpIHsNCiAgICAgICAgICBpZiAoIWlzX2RpcigkZC4kbykpIHt1bmxpbmsoJGQuJG8pO30NCiAgICAgICAgICBlbHNlIHtmc19ybWRpcigkZC4kby5ESVJFQ1RPUllfU0VQQVJBVE9SKTsgcm1kaXIoJGQuJG8pO30NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgY2xvc2VkaXIoJGgpOw0KICAgICAgcm1kaXIoJGQpOw0KICAgICAgcmV0dXJuICFpc19kaXIoJGQpOw0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfcm1vYmoiKSkgew0KICAgIGZ1bmN0aW9uIGZzX3Jtb2JqKCRvKSB7DQogICAgICAkbyA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkbyk7DQogICAgICBpZiAoaXNfZGlyKCRvKSkgew0KICAgICAgICBpZiAoc3Vic3RyKCRvLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JG8gLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogICAgICAgIHJldHVybiBmc19ybWRpcigkbyk7DQogICAgICB9DQogICAgICBlbHNlaWYgKGlzX2ZpbGUoJG8pKSB7cmV0dXJuIHVubGluaygkbyk7fQ0KICAgICAgZWxzZSB7cmV0dXJuIEZBTFNFO30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInRhYnNvcnQiKSkgew0KICAgIGZ1bmN0aW9uIHRhYnNvcnQoJGEsJGIpIHtnbG9iYWwgJHY7IHJldHVybiBzdHJuYXRjbXAoJGFbJHZdLCAkYlskdl0pO30NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygidmlld19wZXJtcyIpKSB7DQogICAgZnVuY3Rpb24gdmlld19wZXJtcygkbW9kZSkgew0KICAgICAgaWYgKCgkbW9kZSAmIDB4QzAwMCkgPT09IDB4QzAwMCkgeyR0eXBlID0gInMiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHg0MDAwKSA9PT0gMHg0MDAwKSB7JHR5cGUgPSAiZCI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweEEwMDApID09PSAweEEwMDApIHskdHlwZSA9ICJsIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4ODAwMCkgPT09IDB4ODAwMCkgeyR0eXBlID0gIi0iO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHg2MDAwKSA9PT0gMHg2MDAwKSB7JHR5cGUgPSAiYiI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDIwMDApID09PSAweDIwMDApIHskdHlwZSA9ICJjIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4MTAwMCkgPT09IDB4MTAwMCkgeyR0eXBlID0gInAiO30NCiAgICAgIGVsc2UgeyR0eXBlID0gIj8iO30NCiAgICAgICRvd25lclsicmVhZCJdID0gKCRtb2RlICYgMDA0MDApPyJyIjoiLSI7DQogICAgICAkb3duZXJbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDIwMCk/InciOiItIjsNCiAgICAgICRvd25lclsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAxMDApPyJ4IjoiLSI7DQogICAgICAkZ3JvdXBbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDQwKT8iciI6Ii0iOw0KICAgICAgJGdyb3VwWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAwMjApPyJ3IjoiLSI7DQogICAgICAkZ3JvdXBbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDEwKT8ieCI6Ii0iOw0KICAgICAgJHdvcmxkWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDAwNCk/InIiOiItIjsNCiAgICAgICR3b3JsZFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDAyKT8gInciOiItIjsNCiAgICAgICR3b3JsZFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMDEpPyJ4IjoiLSI7DQogICAgICBpZiAoJG1vZGUgJiAweDgwMCkgeyRvd25lclsiZXhlY3V0ZSJdID0gKCRvd25lclsiZXhlY3V0ZSJdID09ICJ4Iik/InMiOiJTIjt9DQogICAgICBpZiAoJG1vZGUgJiAweDQwMCkgeyRncm91cFsiZXhlY3V0ZSJdID0gKCRncm91cFsiZXhlY3V0ZSJdID09ICJ4Iik/InMiOiJTIjt9DQogICAgICBpZiAoJG1vZGUgJiAweDIwMCkgeyR3b3JsZFsiZXhlY3V0ZSJdID0gKCR3b3JsZFsiZXhlY3V0ZSJdID09ICJ4Iik/InQiOiJUIjt9DQogICAgICByZXR1cm4gJHR5cGUuam9pbigiIiwkb3duZXIpLmpvaW4oIiIsJGdyb3VwKS5qb2luKCIiLCR3b3JsZCk7DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpIGFuZCAhaW5fYXJyYXkoInBvc2l4X2dldHB3dWlkIiwkZGlzYWJsZWZ1bmMpKSB7ZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoJHVpZCkge3JldHVybiBGQUxTRTt9fQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9nZXRncmdpZCIsJGRpc2FibGVmdW5jKSkge2Z1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRnaWQpIHtyZXR1cm4gRkFMU0U7fX0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2tpbGwiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9raWxsIiwkZGlzYWJsZWZ1bmMpKSB7ZnVuY3Rpb24gcG9zaXhfa2lsbCgkZ2lkKSB7cmV0dXJuIEZBTFNFO319DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJwYXJzZV9wZXJtcyIpKSB7DQogICAgZnVuY3Rpb24gcGFyc2VfcGVybXMoJG1vZGUpIHsNCiAgICAgIGlmICgoJG1vZGUgJiAweEMwMDApID09PSAweEMwMDApIHskdCA9ICJzIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgeyR0ID0gImQiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHQgPSAibCI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDgwMDApID09PSAweDgwMDApIHskdCA9ICItIjt9DQogICAgICBlbHNlaWYgKCgkbW9kZSAmIDB4NjAwMCkgPT09IDB4NjAwMCkgeyR0ID0gImIiO30NCiAgICAgIGVsc2VpZiAoKCRtb2RlICYgMHgyMDAwKSA9PT0gMHgyMDAwKSB7JHQgPSAiYyI7fQ0KICAgICAgZWxzZWlmICgoJG1vZGUgJiAweDEwMDApID09PSAweDEwMDApIHskdCA9ICJwIjt9DQogICAgICBlbHNlIHskdCA9ICI/Ijt9DQogICAgICAkb1siciJdID0gKCRtb2RlICYgMDA0MDApID4gMDsgJG9bInciXSA9ICgkbW9kZSAmIDAwMjAwKSA+IDA7ICRvWyJ4Il0gPSAoJG1vZGUgJiAwMDEwMCkgPiAwOw0KICAgICAgJGdbInIiXSA9ICgkbW9kZSAmIDAwMDQwKSA+IDA7ICRnWyJ3Il0gPSAoJG1vZGUgJiAwMDAyMCkgPiAwOyAkZ1sieCJdID0gKCRtb2RlICYgMDAwMTApID4gMDsNCiAgICAgICR3WyJyIl0gPSAoJG1vZGUgJiAwMDAwNCkgPiAwOyAkd1sidyJdID0gKCRtb2RlICYgMDAwMDIpID4gMDsgJHdbIngiXSA9ICgkbW9kZSAmIDAwMDAxKSA+IDA7DQogICAgICByZXR1cm4gYXJyYXkoInQiPT4kdCwibyI9PiRvLCJnIj0+JGcsInciPT4kdyk7DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJwYXJzZXNvcnQiKSkgew0KICAgIGZ1bmN0aW9uIHBhcnNlc29ydCgkc29ydCkgew0KICAgICAgJG9uZSA9IGludHZhbCgkc29ydCk7DQogICAgICAkc2Vjb25kID0gc3Vic3RyKCRzb3J0LC0xKTsNCiAgICAgIGlmICgkc2Vjb25kICE9ICJkIikgeyRzZWNvbmQgPSAiYSI7fQ0KICAgICAgcmV0dXJuIGFycmF5KCRvbmUsJHNlY29uZCk7DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJ2aWV3X3Blcm1zX2NvbG9yIikpIHsNCiAgICBmdW5jdGlvbiB2aWV3X3Blcm1zX2NvbG9yKCRvKSB7DQogICAgICBpZiAoIWlzX3JlYWRhYmxlKCRvKSkge3JldHVybiAiPGZvbnQgY29sb3I9cmVkPiIudmlld19wZXJtcyhmaWxlcGVybXMoJG8pKS4iPC9mb250PiI7fQ0KICAgICAgZWxzZWlmICghaXNfd3JpdGFibGUoJG8pKSB7cmV0dXJuICI8Zm9udCBjb2xvcj13aGl0ZT4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRvKSkuIjwvZm9udD4iO30NCiAgICAgIGVsc2Uge3JldHVybiAiPGZvbnQgY29sb3I9bGltZT4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRvKSkuIjwvZm9udD4iO30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2R1bXAiKSkgew0KICAgIGZ1bmN0aW9uIG15c3FsX2R1bXAoJHNldCkgew0KICAgICAgZ2xvYmFsICRzaF92ZXI7DQogICAgICAkc29jayA9ICRzZXRbInNvY2siXTsNCiAgICAgICRkYiA9ICRzZXRbImRiIl07DQogICAgICAkcHJpbnQgPSAkc2V0WyJwcmludCJdOw0KICAgICAgJG5sMmJyID0gJHNldFsibmwyYnIiXTsNCiAgICAgICRmaWxlID0gJHNldFsiZmlsZSJdOw0KICAgICAgJGFkZF9kcm9wID0gJHNldFsiYWRkX2Ryb3AiXTsNCiAgICAgICR0YWJzID0gJHNldFsidGFicyJdOw0KICAgICAgJG9ubHl0YWJzID0gJHNldFsib25seXRhYnMiXTsNCiAgICAgICRyZXQgPSBhcnJheSgpOw0KICAgICAgJHJldFsiZXJyIl0gPSBhcnJheSgpOw0KICAgICAgaWYgKCFpc19yZXNvdXJjZSgkc29jaykpIHtlY2hvKCJFcnJvcjogXCRzb2NrIGlzIG5vdCB2YWxpZCByZXNvdXJjZS4iKTt9DQogICAgICBpZiAoZW1wdHkoJGRiKSkgeyRkYiA9ICJkYiI7fQ0KICAgICAgaWYgKGVtcHR5KCRwcmludCkpIHskcHJpbnQgPSAwO30NCiAgICAgIGlmIChlbXB0eSgkbmwyYnIpKSB7JG5sMmJyID0gMDt9DQogICAgICBpZiAoZW1wdHkoJGFkZF9kcm9wKSkgeyRhZGRfZHJvcCA9IFRSVUU7fQ0KICAgICAgaWYgKGVtcHR5KCRmaWxlKSkgew0KICAgICAgICAkZmlsZSA9ICR0bXBkaXIuImR1bXBfIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIl8iLiRkYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCI7DQogICAgICB9DQogICAgICBpZiAoIWlzX2FycmF5KCR0YWJzKSkgeyR0YWJzID0gYXJyYXkoKTt9DQogICAgICBpZiAoZW1wdHkoJGFkZF9kcm9wKSkgeyRhZGRfZHJvcCA9IFRSVUU7fQ0KICAgICAgaWYgKHNpemVvZigkdGFicykgPT0gMCkgew0KICAgICAgICAkcmVzID0gbXlzcWxfcXVlcnkoIlNIT1cgVEFCTEVTIEZST00gIi4kZGIsICRzb2NrKTsNCiAgICAgICAgaWYgKG15c3FsX251bV9yb3dzKCRyZXMpID4gMCkge3doaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpKSB7JHRhYnNbXSA9ICRyb3dbMF07fX0NCiAgICAgIH0NCiAgICAgICRvdXQgPSAiDQogICAgICAjIER1bXBlZCBieSAiLiRzaF9uYW1lLiINCiAgICAgICMNCiAgICAgICMgSG9zdCBzZXR0aW5nczoNCiAgICAgICMgTXlTUUwgdmVyc2lvbjogKCIubXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkuIikgcnVubmluZyBvbiAiLmdldGVudigiU0VSVkVSX0FERFIiKS4iICgiLmdldGVudigiU0VSVkVSX05BTUUiKS4iKSIuIg0KICAgICAgIyBEYXRlOiAiLmRhdGUoImQubS5ZIEg6aTpzIikuIg0KICAgICAgIyBEQjogXCIiLiRkYi4iXCINCiAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iOw0KICAgICAgJGMgPSBjb3VudCgkb25seXRhYnMpOw0KICAgICAgZm9yZWFjaCgkdGFicyBhcyAkdGFiKSB7DQogICAgICAgIGlmICgoaW5fYXJyYXkoJHRhYiwkb25seXRhYnMpKSBvciAoISRjKSkgew0KICAgICAgICAgIGlmICgkYWRkX2Ryb3ApIHskb3V0IC49ICJEUk9QIFRBQkxFIElGIEVYSVNUUyBgIi4kdGFiLiJgO1xuIjt9DQogICAgICAgICAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTSE9XIENSRUFURSBUQUJMRSBgIi4kdGFiLiJgIiwgJHNvY2spOw0KICAgICAgICAgIGlmICghJHJlcykgeyRyZXRbImVyciJdW10gPSBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcmVzKTsNCiAgICAgICAgICAgICRvdXQgLj0gJHJvd1siMSJdLiI7XG5cbiI7DQogICAgICAgICAgICAkcmVzID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gYCR0YWJgIiwgJHNvY2spOw0KICAgICAgICAgICAgaWYgKG15c3FsX251bV9yb3dzKCRyZXMpID4gMCkgew0KICAgICAgICAgICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRyZXMpKSB7DQogICAgICAgICAgICAgICAgJGtleXMgPSBpbXBsb2RlKCJgLCBgIiwgYXJyYXlfa2V5cygkcm93KSk7DQogICAgICAgICAgICAgICAgJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkcm93KTsNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCR2YWx1ZXMgYXMgJGs9PiR2KSB7JHZhbHVlc1ska10gPSBhZGRzbGFzaGVzKCR2KTt9DQogICAgICAgICAgICAgICAgJHZhbHVlcyA9IGltcGxvZGUoIicsICciLCAkdmFsdWVzKTsNCiAgICAgICAgICAgICAgICAkc3FsID0gIklOU0VSVCBJTlRPIGAkdGFiYChgIi4ka2V5cy4iYCkgVkFMVUVTICgnIi4kdmFsdWVzLiInKTtcbiI7DQogICAgICAgICAgICAgICAgJG91dCAuPSAkc3FsOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICAkb3V0IC49ICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiI7DQogICAgICBpZiAoJGZpbGUpIHsNCiAgICAgICAgJGZwID0gZm9wZW4oJGZpbGUsICJ3Iik7DQogICAgICAgIGlmICghJGZwKSB7JHJldFsiZXJyIl1bXSA9IDI7fQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICBmd3JpdGUgKCRmcCwgJG91dCk7DQogICAgICAgICAgZmNsb3NlICgkZnApOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZiAoJHByaW50KSB7aWYgKCRubDJicikge2VjaG8gbmwyYnIoJG91dCk7fSBlbHNlIHtlY2hvICRvdXQ7fX0NCiAgICAgIHJldHVybiAkb3V0Ow0KICAgIH0NCiAgfQ0KICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfYnVpbGR3aGVyZSIpKSB7DQogICAgZnVuY3Rpb24gbXlzcWxfYnVpbGR3aGVyZSgkYXJyYXksJHNlcD0iIGFuZCIsJGZ1bmN0cz1hcnJheSgpKSB7DQogICAgICBpZiAoIWlzX2FycmF5KCRhcnJheSkpIHskYXJyYXkgPSBhcnJheSgpO30NCiAgICAgICRyZXN1bHQgPSAiIjsNCiAgICAgIGZvcmVhY2goJGFycmF5IGFzICRrPT4kdikgew0KICAgICAgICAkdmFsdWUgPSAiIjsNCiAgICAgICAgaWYgKCFlbXB0eSgkZnVuY3RzWyRrXSkpIHskdmFsdWUgLj0gJGZ1bmN0c1ska10uIigiO30NCiAgICAgICAgJHZhbHVlIC49ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7DQogICAgICAgIGlmICghZW1wdHkoJGZ1bmN0c1ska10pKSB7JHZhbHVlIC49ICIpIjt9DQogICAgICAgICRyZXN1bHQgLj0gImAiLiRrLiJgID0gIi4kdmFsdWUuJHNlcDsNCiAgICAgIH0NCiAgICAgICRyZXN1bHQgPSBzdWJzdHIoJHJlc3VsdCwwLHN0cmxlbigkcmVzdWx0KS1zdHJsZW4oJHNlcCkpOw0KICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9mZXRjaF9hbGwiKSkgew0KICAgIGZ1bmN0aW9uIG15c3FsX2ZldGNoX2FsbCgkcXVlcnksJHNvY2spIHsNCiAgICAgIGlmICgkc29jaykgeyRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnksJHNvY2spO30NCiAgICAgIGVsc2UgeyRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpO30NCiAgICAgICRhcnJheSA9IGFycmF5KCk7DQogICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7JGFycmF5W10gPSAkcm93O30NCiAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgcmV0dXJuICRhcnJheTsNCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX3NtYXJ0ZXJyb3IiKSkgew0KICAgIGZ1bmN0aW9uIG15c3FsX3NtYXJ0ZXJyb3IoJHR5cGUsJHNvY2spIHsNCiAgICAgIGlmICgkc29jaykgeyRlcnJvciA9IG15c3FsX2Vycm9yKCRzb2NrKTt9DQogICAgICBlbHNlIHskZXJyb3IgPSBteXNxbF9lcnJvcigpO30NCiAgICAgICRlcnJvciA9IGh0bWxzcGVjaWFsY2hhcnMoJGVycm9yKTsNCiAgICAgIHJldHVybiAkZXJyb3I7DQogICAgfQ0KICB9DQogIGlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9xdWVyeV9mb3JtIikpIHsNCiAgICBmdW5jdGlvbiBteXNxbF9xdWVyeV9mb3JtKCkgew0KICAgICAgZ2xvYmFsICRzdWJtaXQsJHNxbF94LCRzcWxfcXVlcnksJHNxbF9xdWVyeV9yZXN1bHQsJHNxbF9jb25maXJtLCRzcWxfcXVlcnlfZXJyb3IsJHRibF9zdHJ1Y3Q7DQogICAgICBpZiAoKCRzdWJtaXQpIGFuZCAoISRzcWxfcXVlcnlfcmVzdWx0KSBhbmQgKCRzcWxfY29uZmlybSkpIHtpZiAoISRzcWxfcXVlcnlfZXJyb3IpIHskc3FsX3F1ZXJ5X2Vycm9yID0gIlF1ZXJ5IHdhcyBlbXB0eSI7fSBlY2hvICI8Yj5FcnJvcjo8L2I+IDxicj4iLiRzcWxfcXVlcnlfZXJyb3IuIjxicj4iO30NCiAgICAgIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3ggPSAkc3FsX2dvdG87fQ0KICAgICAgaWYgKCghJHN1Ym1pdCkgb3IgKCRzcWxfeCkpIHsNCiAgICAgICAgZWNobyAiPHRhYmxlIGJvcmRlcj0wPjx0cj48dGQ+PGZvcm0gbmFtZT1cImJvZ2VsX3NxbHF1ZXJ5XCIgbWV0aG9kPVBPU1Q+PGI+IjsgaWYgKCgkc3FsX3F1ZXJ5KSBhbmQgKCEkc3VibWl0KSkge2VjaG8gIkRvIHlvdSByZWFsbHkgd2FudCB0byI7fSBlbHNlIHtlY2hvICJTUUwtUXVlcnkiO30gZWNobyAiOjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPXNxbF9xdWVyeSBjb2xzPTEwMCByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9c3FsPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXNxbF94IHZhbHVlPXF1ZXJ5PjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXNxbF90YmwgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXQgdmFsdWU9XCIxXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJzcWxfZ290b1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ290bykuIlwiPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXNxbF9jb25maXJtIHZhbHVlPVwiWWVzXCI+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIk5vXCI+PC9mb3JtPjwvdGQ+IjsNCiAgICAgICAgaWYgKCR0Ymxfc3RydWN0KSB7DQogICAgICAgICAgZWNobyAiPHRkIHZhbGlnbj1cInRvcFwiPjxiPkZpZWxkczo8L2I+PGJyPiI7DQogICAgICAgICAgZm9yZWFjaCAoJHRibF9zdHJ1Y3QgYXMgJGZpZWxkKSB7JG5hbWUgPSAkZmllbGRbIkZpZWxkIl07IGVjaG8gIisgPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuYm9nZWxfc3FscXVlcnkuc3FsX3F1ZXJ5LnZhbHVlKz0nYCIuJG5hbWUuImAnO1wiPjxiPiIuJG5hbWUuIjwvYj48L2E+PGJyPiI7fQ0KICAgICAgICAgIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3F1ZXJ5ID0gJHNxbF9sYXN0X3F1ZXJ5O30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2NyZWF0ZV9kYiIpKSB7DQogICAgZnVuY3Rpb24gbXlzcWxfY3JlYXRlX2RiKCRkYiwkc29jaz0iIikgew0KICAgICAgJHNxbCA9ICJDUkVBVEUgREFUQUJBU0UgYCIuYWRkc2xhc2hlcygkZGIpLiJgOyI7DQogICAgICBpZiAoJHNvY2spIHtyZXR1cm4gbXlzcWxfcXVlcnkoJHNxbCwkc29jayk7fQ0KICAgICAgZWxzZSB7cmV0dXJuIG15c3FsX3F1ZXJ5KCRzcWwpO30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX3F1ZXJ5X3BhcnNlIikpIHsNCiAgICBmdW5jdGlvbiBteXNxbF9xdWVyeV9wYXJzZSgkcXVlcnkpIHsNCiAgICAgICRxdWVyeSA9IHRyaW0oJHF1ZXJ5KTsNCiAgICAgICRhcnIgPSBleHBsb2RlICgiICIsJHF1ZXJ5KTsNCiAgICAgICR0eXBlcyA9IGFycmF5KA0KICAgICAgICAiU0VMRUNUIj0+YXJyYXkoMywxKSwNCiAgICAgICAgIlNIT1ciPT5hcnJheSgyLDEpLA0KICAgICAgICAiREVMRVRFIj0+YXJyYXkoMSksDQogICAgICAgICJEUk9QIj0+YXJyYXkoMSkNCiAgICAgICk7DQogICAgICAkcmVzdWx0ID0gYXJyYXkoKTsNCiAgICAgICRvcCA9IHN0cnRvdXBwZXIoJGFyclswXSk7DQogICAgICBpZiAoaXNfYXJyYXkoJHR5cGVzWyRvcF0pKSB7DQogICAgICAgICRyZXN1bHRbInByb3BlcnRpb25zIl0gPSAkdHlwZXNbJG9wXTsNCiAgICAgICAgJHJlc3VsdFsicXVlcnkiXSAgPSAkcXVlcnk7DQogICAgICAgIGlmICgkdHlwZXNbJG9wXSA9PSAyKSB7DQogICAgICAgICAgZm9yZWFjaCgkYXJyIGFzICRrPT4kdikgew0KICAgICAgICAgICAgaWYgKHN0cnRvdXBwZXIoJHYpID09ICJMSU1JVCIpIHsNCiAgICAgICAgICAgICAgJHJlc3VsdFsibGltaXQiXSA9ICRhcnJbJGsrMV07DQogICAgICAgICAgICAgICRyZXN1bHRbImxpbWl0Il0gPSBleHBsb2RlKCIsIiwkcmVzdWx0WyJsaW1pdCJdKTsNCiAgICAgICAgICAgICAgaWYgKGNvdW50KCRyZXN1bHRbImxpbWl0Il0pID09IDEpIHskcmVzdWx0WyJsaW1pdCJdID0gYXJyYXkoMCwkcmVzdWx0WyJsaW1pdCJdWzBdKTt9DQogICAgICAgICAgICAgIHVuc2V0KCRhcnJbJGtdLCRhcnJbJGsrMV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgZWxzZSB7cmV0dXJuIEZBTFNFO30NCiAgICB9DQogIH0NCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoImNhZnNlYXJjaCIpKSB7DQogICAgZnVuY3Rpb24gY2Fmc2VhcmNoKCRkKSB7DQogICAgICBnbG9iYWwgJGZvdW5kOw0KICAgICAgZ2xvYmFsICRmb3VuZF9kOw0KICAgICAgZ2xvYmFsICRmb3VuZF9mOw0KICAgICAgZ2xvYmFsICRzZWFyY2hfaV9mOw0KICAgICAgZ2xvYmFsICRzZWFyY2hfaV9kOw0KICAgICAgZ2xvYmFsICRhOw0KICAgICAgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICAgJGggPSBvcGVuZGlyKCRkKTsNCiAgICAgIHdoaWxlICgoJGYgPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKSB7DQogICAgICAgIGlmKCRmICE9ICIuIiAmJiAkZiAhPSAiLi4iKSB7DQogICAgICAgICAgJGJvb2wgPSAoZW1wdHkoJGFbIm5hbWVfcmVnZXhwIl0pIGFuZCBzdHJwb3MoJGYsJGFbIm5hbWUiXSkgIT09IEZBTFNFKSB8fCAoJGFbIm5hbWVfcmVnZXhwIl0gYW5kIGVyZWcoJGFbIm5hbWUiXSwkZikpOw0KICAgICAgICAgIGlmIChpc19kaXIoJGQuJGYpKSB7DQogICAgICAgICAgICAkc2VhcmNoX2lfZCsrOw0KICAgICAgICAgICAgaWYgKGVtcHR5KCRhWyJ0ZXh0Il0pIGFuZCAkYm9vbCkgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9kKys7fQ0KICAgICAgICAgICAgaWYgKCFpc19saW5rKCRkLiRmKSkge2NhZnNlYXJjaCgkZC4kZik7fQ0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICRzZWFyY2hfaV9mKys7DQogICAgICAgICAgICBpZiAoJGJvb2wpIHsNCiAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkYVsidGV4dCJdKSkgew0KICAgICAgICAgICAgICAgICRyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsNCiAgICAgICAgICAgICAgICBpZiAoJGFbInRleHRfd3dvIl0pIHskYVsidGV4dCJdID0gIiAiLnRyaW0oJGFbInRleHQiXSkuIiAiO30NCiAgICAgICAgICAgICAgICBpZiAoISRhWyJ0ZXh0X2NzIl0pIHskYVsidGV4dCJdID0gc3RydG9sb3dlcigkYVsidGV4dCJdKTsgJHIgPSBzdHJ0b2xvd2VyKCRyKTt9DQogICAgICAgICAgICAgICAgaWYgKCRhWyJ0ZXh0X3JlZ2V4cCJdKSB7JGJvb2wgPSBlcmVnKCRhWyJ0ZXh0Il0sJHIpO30NCiAgICAgICAgICAgICAgICBlbHNlIHskYm9vbCA9IHN0cnBvcygiICIuJHIsJGFbInRleHQiXSwxKTt9DQogICAgICAgICAgICAgICAgaWYgKCRhWyJ0ZXh0X25vdCJdKSB7JGJvb2wgPSAhJGJvb2w7fQ0KICAgICAgICAgICAgICAgIGlmICgkYm9vbCkgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgY2xvc2VkaXIoJGgpOw0KICAgIH0NCiAgfQ0KICBpZiAoJHggPT0gImdvZmlsZSIpIHsNCiAgICBpZiAoaXNfZGlyKCRmKSkgeyAkeCA9ICJscyI7ICRkID0gJGY7IH0NCiAgICBlbHNlIHsgJHggPSAiZiI7ICRkID0gZGlybmFtZSgkZik7ICRmID0gYmFzZW5hbWUoJGYpOyB9DQogIH0NCiAgQG9iX3N0YXJ0KCk7DQogIEBvYl9pbXBsaWNpdF9mbHVzaCgwKTsNCiAgZnVuY3Rpb24gb25waHBzaHV0ZG93bigpIHsNCiAgICBnbG9iYWwgJGd6aXBlbmNvZGUsJGZ0Ow0KICAgIGlmICghaGVhZGVyc19zZW50KCkgYW5kICRnemlwZW5jb2RlIGFuZCAhaW5fYXJyYXkoJGZ0LGFycmF5KCJpbWciLCJkb3dubG9hZCIsIm5vdGVwYWQiKSkpIHsNCiAgICAgICR2ID0gQG9iX2dldF9jb250ZW50cygpOw0KICAgICAgQG9iX2VuZF9jbGVhbigpOw0KICAgICAgQG9iX3N0YXJ0KCJvYl9nekhhbmRsZXIiKTsNCiAgICAgIGVjaG8gJHY7DQogICAgICBAb2JfZW5kX2ZsdXNoKCk7DQogICAgfQ0KICB9DQogIGZ1bmN0aW9uIGJvZ2VsZXhpdCgpIHsNCiAgICBvbnBocHNodXRkb3duKCk7DQogICAgZXhpdDsNCiAgfQ0KICBoZWFkZXIoIkV4cGlyZXM6IE1vbiwgMTIgRGVjIDIwMTIgMDU6MDA6MDAgR01UIik7DQogIGhlYWRlcigiTGFzdC1Nb2RpZmllZDogIi5nbWRhdGUoIkQsIGQgTSBZIEg6aTpzIikuIiBHTVQiKTsNCiAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1zdG9yZSwgbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZSIpOw0KICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTAiLCBGQUxTRSk7DQogIGhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOw0KICBpZiAoZW1wdHkoJHRtcGRpcikpIHsNCiAgICAkdG1wZGlyID0gaW5pX2dldCgidXBsb2FkX3RtcF9kaXIiKTsNCiAgICBpZiAoaXNfZGlyKCR0bXBkaXIpKSB7JHRtcGRpciA9ICIvdG1wLyI7fQ0KICB9DQogICR0bXBkaXIgPSByZWFscGF0aCgkdG1wZGlyKTsNCiAgJHRtcGRpciA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdG1wZGlyKTsNCiAgaWYgKHN1YnN0cigkdG1wZGlyLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JHRtcGRpciAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgaWYgKGVtcHR5KCR0bXBkaXJfbG9ncykpIHskdG1wZGlyX2xvZ3MgPSAkdG1wZGlyO30NCiAgZWxzZSB7JHRtcGRpcl9sb2dzID0gcmVhbHBhdGgoJHRtcGRpcl9sb2dzKTt9DQogIGZ1bmN0aW9uIHNob3dzdGF0KCRzdGF0KSB7DQogICAgaWYgKCRzdGF0PT0ib24iKSB7IHJldHVybiAiPGZvbnQgY29sb3I9IzAwRkYwMD48Yj5PTjwvYj48L2ZvbnQ+IjsgfQ0KICAgIGVsc2UgeyByZXR1cm4gIjxmb250IGNvbG9yPSNGRjk5MDA+PGI+T0ZGPC9iPjwvZm9udD4iOyB9DQogIH0NCiAgZnVuY3Rpb24gdGVzdFNIKCkgew0KICAgIGlmIChleCgnc2ggLS1oZWxwJykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9DQogICAgZWxzZSB7IHJldHVybiBzaG93c3RhdCgib2ZmIik7IH0NCiAgfQ0KICAgZnVuY3Rpb24gdGVzdGdjYygpIHsNCiAgICBpZiAoZXgoJ2djYyAtLWhlbHAnKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3RwZXJsKCkgew0KICAgIGlmIChleCgncGVybCAtLWhlbHAnKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3RmZXRjaCgpIHsNCiAgICBpZihleCgnZmV0Y2ggLS1oZWxwJykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9DQogICAgZWxzZSB7IHJldHVybiBzaG93c3RhdCgib2ZmIik7IH0NCiAgfQ0KICBmdW5jdGlvbiB0ZXN0d2dldCgpIHsNCiAgICBpZiAoZXgoJ3dnZXQgLS1oZWxwJykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9DQogICAgZWxzZSB7IHJldHVybiBzaG93c3RhdCgib2ZmIik7IH0NCiAgfQ0KICBmdW5jdGlvbiB0ZXN0Y3VybCgpIHsNCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKSkgeyByZXR1cm4gc2hvd3N0YXQoIm9uIik7IH0NCiAgICBlbHNlIHsgcmV0dXJuIHNob3dzdGF0KCJvZmYiKTsgfQ0KICB9DQogIGZ1bmN0aW9uIHRlc3RteXNxbCgpIHsNCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHsgcmV0dXJuIHNob3dzdGF0KCJvbiIpOyB9DQogICAgZWxzZSB7IHJldHVybiBzaG93c3RhdCgib2ZmIik7IH0NCiAgfQ0KICBmdW5jdGlvbiBzaG93ZGlzYWJsZWZ1bmN0aW9ucygpIHsNCiAgICBpZiAoJGRpc2FibGVmdW5jPUBpbmlfZ2V0KCJkaXNhYmxlX2Z1bmN0aW9ucyIpKXsgcmV0dXJuICI8Zm9udCBjb2xvcj0jRkY5OTAwPjxiPiIuJGRpc2FibGVmdW5jLiI8L2I+PC9mb250PiI7IH0NCiAgICBlbHNlIHsgcmV0dXJuICI8Zm9udCBjb2xvcj0jMDBGRjAwPjxiPk5PTkU8L2I+PC9iPjwvZm9udD4iOyB9DQogIH0NCiAgaWYgKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSBvciBzdHJ0b2xvd2VyKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSkgPT0gIm9uIikgew0KICAgICRzYWZlbW9kZSA9IFRSVUU7DQogICAgJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj0jMzM2NkZGPjxiPiBPTjwvYj48L2ZvbnQ+IjsNCiAgfQ0KICBlbHNlIHsNCiAgICAkc2FmZW1vZGUgPSBGQUxTRTsNCiAgICAkaHNhZmVtb2RlID0gIjxmb250IGNvbG9yPSNGRjk5MDA+PGI+IE9GRjwvYj48L2ZvbnQ+IjsNCiAgfQ0KICAkdiA9IEBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsNCiAgaWYgKCR2IG9yIHN0cnRvbG93ZXIoJHYpID09ICJvbiIpIHsNCiAgICAkb3BlbmJhc2VkaXIgPSBUUlVFOw0KICAgICRob3BlbmJhc2VkaXIgPSAiPGZvbnQgY29sb3I9cmVkPiIuJHYuIjwvZm9udD4iOw0KICB9DQogIGVsc2Ugew0KICAgICRvcGVuYmFzZWRpciA9IEZBTFNFOw0KICAgICRob3BlbmJhc2VkaXIgPSAiPGZvbnQgY29sb3I9Z3JlZW4+T0ZGPC9mb250PiI7DQogIH0NCiAgJHNvcnQgPSBodG1sc3BlY2lhbGNoYXJzKCRzb3J0KTsNCiAgaWYgKGVtcHR5KCRzb3J0KSkgeyRzb3J0ID0gJHNvcnRfZGVmYXVsdDt9DQogICRzb3J0WzFdID0gc3RydG9sb3dlcigkc29ydFsxXSk7DQogICRESVNQX1NFUlZFUl9TT0ZUV0FSRSA9IGdldGVudigiU0VSVkVSX1NPRlRXQVJFIik7DQogIGlmICghZXJlZygiUEhQLyIucGhwdmVyc2lvbigpLCRESVNQX1NFUlZFUl9TT0ZUV0FSRSkpIHskRElTUF9TRVJWRVJfU09GVFdBUkUgLj0gIi4gUEhQLyIucGhwdmVyc2lvbigpO30NCiAgJERJU1BfU0VSVkVSX1NPRlRXQVJFID0gc3RyX3JlcGxhY2UoIlBIUC8iLnBocHZlcnNpb24oKSwiPGEgaHJlZj1cIiIuJHN1cmwuIng9cGhwaW5mb1wiIHRhcmdldD1cIl9ibGFua1wiPjxiPjx1PlBIUC8iLnBocHZlcnNpb24oKS4iPC91PjwvYj48L2E+IixodG1sc3BlY2lhbGNoYXJzKCRESVNQX1NFUlZFUl9TT0ZUV0FSRSkpOw0KICBAaW5pX3NldCgiaGlnaGxpZ2h0LmJnIiwkaGlnaGxpZ2h0X2JnKTsNCiAgQGluaV9zZXQoImhpZ2hsaWdodC5jb21tZW50IiwkaGlnaGxpZ2h0X2NvbW1lbnQpOw0KICBAaW5pX3NldCgiaGlnaGxpZ2h0LmRlZmF1bHQiLCRoaWdobGlnaHRfZGVmYXVsdCk7DQogIEBpbmlfc2V0KCJoaWdobGlnaHQuaHRtbCIsJGhpZ2hsaWdodF9odG1sKTsNCiAgQGluaV9zZXQoImhpZ2hsaWdodC5rZXl3b3JkIiwkaGlnaGxpZ2h0X2tleXdvcmQpOw0KICBAaW5pX3NldCgiaGlnaGxpZ2h0LnN0cmluZyIsJGhpZ2hsaWdodF9zdHJpbmcpOw0KICBpZiAoIWlzX2FycmF5KCRhY3Rib3gpKSB7ICRhY3Rib3ggPSBhcnJheSgpOyB9DQogICRkc3BhY3QgPSAkeCA9IGh0bWxzcGVjaWFsY2hhcnMoJHgpOw0KICAkZGlzcF9mdWxscGF0aCA9ICRsc19hcnIgPSAkbm90bHMgPSBudWxsOw0KICAkdWQgPSB1cmxlbmNvZGUoJGQpOw0KICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogIGlmIChlbXB0eSgkZCkpIHskZCA9IHJlYWxwYXRoKCIuIik7fQ0KICBlbHNlaWYocmVhbHBhdGgoJGQpKSB7JGQgPSByZWFscGF0aCgkZCk7fQ0KICAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgJGQgPSBzdHJfcmVwbGFjZSgiXFxcXCIsIlxcIiwkZCk7DQogICRkaXNwZCA9IGh0bWxzcGVjaWFsY2hhcnMoJGQpOw0KZWNobyAkaHRtbF9zdGFydDsNCmVjaG8gIjxkaXYgY2xhc3M9YmFyaGVhZGVyMj48aDM+PGltZyBzcmM9J2h0dHA6Ly9pbWdub3cuY29tL3VwbG9hZHMvNzE0MTEwMjg4VW50aXRsZWQtMX4xLnBuZyc+PC9oMz48L2Rpdj4iOw0KZWNobyAiPHRhYmxlIGlkPXBhZ2ViYXI+PHRyPjx0ZCB3aWR0aD01MCU+PHA+Ii4NCiAgICAgIlNvZnR3YXJlIDogIi4kRElTUF9TRVJWRVJfU09GVFdBUkUgLiIgLSA8YSBocmVmPSIuJHN1cmwuIng9cGhwaW5pPnBocC5pbmk8L2E+PGJyPiIuDQogICAgICJTQUZFTU9ERSA6ICRoc2FmZW1vZGU8YnI+Ii4NCiAgICAgIk9TIFRZUEUgIDogIi5waHBfdW5hbWUoKS4iPGJyPiI7DQppZiAoISR3aW4pIHsgZWNobyAiVXNlciBJRCA6ICIubXlzaGVsbGV4ZWMoImlkIik7IH0NCmVsc2UgeyBlY2hvICJVc2VyIDogIiAuIGdldF9jdXJyZW50X3VzZXIoKTsgfQ0KZWNobyAiPC9wPjwvdGQ+Ii4NCiAgICAgIjx0ZCB3aWR0aD01MCU+PHA+U2VydmVyIElQIDogPGEgaHJlZj1odHRwOi8vd3d3LmlwLWFkcmVzcy5jb20vIi5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIj4iLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iPC9hPiA8YnI+ICIuDQogICAgICJZb3VyIElQICAgOiA8YSBocmVmPWh0dHA6Ly93d3cuaXAtYWRyZXNzLmNvbS8iLiRfU0VSVkVSWyJSRU1PVEVfQUREUiJdLiI+Ii4kX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4iPC9hPjxicj48YnI+Ii4NCgkgIk9USEVSUyAgICA6IDxhIGhyZWY9aHR0cDovL3pvbmUtaC5vcmcvYXJjaGl2ZS9kb21haW49Ii5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIj5aT05FLUg8L2E+IDxicj4gIjsNCmlmKCR3aW4pe2VjaG8gIkRyaXZlcyA6ICIuZGlzcF9kcml2ZXMoJGQsJHN1cmwpLiI8YnI+Ijt9DQplY2hvICJGcmVlc3BhY2UgOiAiLmRpc3BfZnJlZXNwYWNlKCRkKTsNCmVjaG8gIjwvcD48L3RkPjwvdHI+IjsNCmVjaG8gIjx0cj48dGQgY29sc3Bhbj0yPjxwPiI7DQplY2hvICJNeVNRTDogIi50ZXN0bXlzcWwoKS4iIGNVUkw6ICIudGVzdGN1cmwoKS4iIFdHZXQ6ICIudGVzdHdnZXQoKS4iIEZldGNoOiAiLnRlc3RmZXRjaCgpLiIgUGVybDogIi50ZXN0cGVybCgpLiIgZ2NjOiAiLnRlc3RnY2MoKS4iIFNIOiAiLnRlc3RTSCgpLiI8YnI+IjsNCmVjaG8gIkRpc2FibGVkIEZ1bmN0aW9uczogIi5zaG93ZGlzYWJsZWZ1bmN0aW9ucygpOw0KZWNobyAiPC9wPjwvdGQ+PC90cj4iOw0KZWNobyAiPHRyPjx0ZCBjb2xzcGFuPTIgaWQ9bWFpbm1lbnU+IjsNCmlmIChjb3VudCgkcXVpY2tsYXVuY2gyKSA+IDApIHsNCiAgZm9yZWFjaCgkcXVpY2tsYXVuY2gyIGFzICRpdGVtKSB7DQogICAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJWQiLHVybGVuY29kZSgkZCksJGl0ZW1bMV0pOw0KICAgICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiVzb3J0Iiwkc29ydCwkaXRlbVsxXSk7DQogICAgJHYgPSByZWFscGF0aCgkZC4iLi4iKTsNCiAgICBpZiAoZW1wdHkoJHYpKSB7DQogICAgICAkYSA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogICAgICB1bnNldCgkYVtjb3VudCgkYSktMl0pOw0KICAgICAgJHYgPSBqb2luKERJUkVDVE9SWV9TRVBBUkFUT1IsJGEpOw0KICAgIH0NCiAgICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIldXBkIix1cmxlbmNvZGUoJHYpLCRpdGVtWzFdKTsNCiAgICBlY2hvICI8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPlxuIjsNCiAgfQ0KfQ0KZWNobyAiPC90ZD48dHI+PHRkIGNvbHNwYW49MiBpZD1tYWlubWVudT4iOw0KaWYgKGNvdW50KCRxdWlja2xhdW5jaDEpID4gMCkgew0KICBmb3JlYWNoKCRxdWlja2xhdW5jaDEgYXMgJGl0ZW0pIHsNCiAgICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIlZCIsdXJsZW5jb2RlKCRkKSwkaXRlbVsxXSk7DQogICAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJXNvcnQiLCRzb3J0LCRpdGVtWzFdKTsNCiAgICAkdiA9IHJlYWxwYXRoKCRkLiIuLiIpOw0KICAgIGlmIChlbXB0eSgkdikpIHsNCiAgICAgICRhID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsNCiAgICAgIHVuc2V0KCRhW2NvdW50KCRhKS0yXSk7DQogICAgICAkdiA9IGpvaW4oRElSRUNUT1JZX1NFUEFSQVRPUiwkYSk7DQogICAgfQ0KICAgICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiV1cGQiLHVybGVuY29kZSgkdiksJGl0ZW1bMV0pOw0KICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRpdGVtWzFdLiJcIj4iLiRpdGVtWzBdLiI8L2E+XG4iOw0KICB9DQp9DQplY2hvICI8L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPTI+IjsNCmVjaG8gIjxwIGNsYXNzPWZsZWZ0PiI7DQokcGQgPSAkZSA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUixzdWJzdHIoJGQsMCwtMSkpOw0KJGkgPSAwOw0KZm9yZWFjaCgkcGQgYXMgJGIpIHsNCiAgJHQgPSAiIjsgJGogPSAwOw0KICBmb3JlYWNoICgkZSBhcyAkcikgew0KICAgICR0Lj0gJHIuRElSRUNUT1JZX1NFUEFSQVRPUjsNCiAgICBpZiAoJGogPT0gJGkpIHsgYnJlYWs7IH0NCiAgICAkaisrOw0KICB9DQogIGVjaG8gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWxzJmQ9Ii51cmxlbmNvZGUoJHQpLiImc29ydD0iLiRzb3J0LiJcIj48Zm9udCBjb2xvcj13aGl0ZT4iLmh0bWxzcGVjaWFsY2hhcnMoJGIpLkRJUkVDVE9SWV9TRVBBUkFUT1IuIjwvZm9udD48L2E+IjsNCiAgJGkrKzsNCn0NCmVjaG8gIiAtICI7DQppZiAoaXNfd3JpdGFibGUoJGQpKSB7DQogICR3ZCA9IFRSVUU7DQogICR3ZHQgPSAiPGZvbnQgY29sb3I9IzAwRkYwMD5bT0tdPC9mb250PiI7DQogIGVjaG8gIjxiPjxmb250IGNvbG9yPXllbGxvdz4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRkKSkuIjwvZm9udD4iOw0KfQ0KZWxzZSB7DQogICR3ZCA9IEZBTFNFOw0KICAkd2R0ID0gIjxmb250IGNvbG9yPXJlZD5bUmVhZC1Pbmx5XTwvZm9udD4iOw0KICBlY2hvICI8Yj4iLnZpZXdfcGVybXNfY29sb3IoJGQpLiI8L2I+IjsNCn0NCj8+DQo8L3A+DQo8ZGl2IGNsYXNzPWZyaWdodD4NCjxmb3JtIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJscyI+DQpEaXJlY3Rvcnk6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iR28iPg0KPC9mb3JtPg0KPC9kaXY+DQo8L3RkPjwvdHI+PC90YWJsZT4NCjw/cGhwDQplY2hvICI8dGFibGUgaWQ9bWFpbmluZm8+PHRyPjx0ZCB3aWR0aD1cIjEwMCVcIj5cbiI7DQppZiAoJHggPT0gIiIpIHsgJHggPSAkZHNwYWN0ID0gImxzIjsgfQ0KaWYgKCR4ID09ICJwaHBpbmkiICkgeyBnZXRfcGhwaW5pKCk7IH0NCmlmICgkeCA9PSAic3FsIikgew0KICAkc3FsX3N1cmwgPSAkc3VybC4ieD1zcWwiOw0KICBpZiAoJHNxbF9sb2dpbikgIHskc3FsX3N1cmwgLj0gIiZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pO30NCiAgaWYgKCRzcWxfcGFzc3dkKSB7JHNxbF9zdXJsIC49ICImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpO30NCiAgaWYgKCRzcWxfc2VydmVyKSB7JHNxbF9zdXJsIC49ICImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpO30NCiAgaWYgKCRzcWxfcG9ydCkgICB7JHNxbF9zdXJsIC49ICImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7fQ0KICBpZiAoJHNxbF9kYikgICAgIHskc3FsX3N1cmwgLj0gIiZzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpO30NCiAgJHNxbF9zdXJsIC49ICImIjsNCiAgZWNobyAiPHRhYmxlPiIuDQogICAgICAgIjx0cj48dGQgd2lkdGg9XCIxMDAlXCIgY29sc3Bhbj0yIGNsYXNzPWJhcmhlYWRlcj4iOw0KICBpZiAoJHNxbF9zZXJ2ZXIpIHsNCiAgICAkc3FsX3NvY2sgPSBteXNxbF9jb25uZWN0KCRzcWxfc2VydmVyLiI6Ii4kc3FsX3BvcnQsICRzcWxfbG9naW4sICRzcWxfcGFzc3dkKTsNCiAgICAkZXJyID0gbXlzcWxfc21hcnRlcnJvcigpOw0KICAgIEBteXNxbF9zZWxlY3RfZGIoJHNxbF9kYiwkc3FsX3NvY2spOw0KICAgIGlmICgkc3FsX3F1ZXJ5IGFuZCAkc3VibWl0KSB7JHNxbF9xdWVyeV9yZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5LCRzcWxfc29jayk7ICRzcWxfcXVlcnlfZXJyb3IgPSBteXNxbF9zbWFydGVycm9yKCk7fQ0KICB9DQogIGVsc2UgeyRzcWxfc29jayA9IEZBTFNFO30NCiAgZWNobyAiLjogU1FMIE1hbmFnZXIgOi48YnI+IjsNCiAgaWYgKCEkc3FsX3NvY2spIHsNCiAgICBpZiAoISRzcWxfc2VydmVyKSB7ZWNobyAiTk8gQ09OTkVDVElPTiI7fQ0KICAgIGVsc2Uge2VjaG8gIkNhbid0IGNvbm5lY3QhICIuJGVycjt9DQogIH0NCiAgZWxzZSB7DQogICAgJHNxbHF1aWNrbGF1bmNoID0gYXJyYXkoKTsNCiAgICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJJbmRleCIsJHN1cmwuIng9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJiIpOw0KICAgICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlF1ZXJ5Iiwkc3FsX3N1cmwuInNxbF94PXF1ZXJ5JnNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpKTsNCiAgICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJTZXJ2ZXItc3RhdHVzIiwkc3VybC4ieD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX3g9c2VydmVyc3RhdHVzIik7DQogICAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiU2VydmVyIHZhcmlhYmxlcyIsJHN1cmwuIng9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJnNxbF94PXNlcnZlcnZhcnMiKTsNCiAgICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJQcm9jZXNzZXMiLCRzdXJsLiJ4PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfeD1wcm9jZXNzZXMiKTsNCiAgICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJMb2dvdXQiLCRzdXJsLiJ4PXNxbCIpOw0KICAgIGVjaG8gIk15U1FMICIubXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkuIiAocHJvdG8gdi4iLm15c3FsX2dldF9wcm90b19pbmZvICgpLiIpIHJ1bm5pbmcgaW4gIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iOiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiIgYXMgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJAIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iIChwYXNzd29yZCAtIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCIpPGJyPiI7DQogICAgaWYgKGNvdW50KCRzcWxxdWlja2xhdW5jaCkgPiAwKSB7Zm9yZWFjaCgkc3FscXVpY2tsYXVuY2ggYXMgJGl0ZW0pIHtlY2hvICJbIDxhIGhyZWY9XCIiLiRpdGVtWzFdLiJcIj4iLiRpdGVtWzBdLiI8L2E+IF0gIjt9fQ0KICB9DQogIGVjaG8gIjwvdGQ+PC90cj48dHI+IjsNCiAgaWYgKCEkc3FsX3NvY2spIHsNCiAgICBlY2hvICI8dGQgd2lkdGg9XCIyOCVcIiBoZWlnaHQ9XCIxMDBcIiB2YWxpZ249XCJ0b3BcIj48bGk+SWYgbG9naW4gaXMgbnVsbCwgbG9naW4gaXMgb3duZXIgb2YgcHJvY2Vzcy48bGk+SWYgaG9zdCBpcyBudWxsLCBob3N0IGlzIGxvY2FsaG9zdDwvYj48bGk+SWYgcG9ydCBpcyBudWxsLCBwb3J0IGlzIDMzMDYgKGRlZmF1bHQpPC90ZD48dGQgd2lkdGg9XCI5MCVcIiBoZWlnaHQ9MSB2YWxpZ249XCJ0b3BcIj4iOw0KICAgIGVjaG8gIjx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9MD48dHI+PHRkPjxiPlBsZWFzZSwgZmlsbCB0aGUgZm9ybTo8L2I+PHRhYmxlPjx0cj48dGQ+PGI+VXNlcm5hbWU8L2I+PC90ZD48dGQ+PGI+UGFzc3dvcmQ8L2I+PC90ZD48dGQ+PGI+RGF0YWJhc2U8L2I+PC90ZD48L3RyPjxmb3JtIGFjdGlvbj1cIiAkc3VybCBcIiBtZXRob2Q9XCJQT1NUXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwieFwiIHZhbHVlPVwic3FsXCI+PHRyPjx0ZD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCJyb290XCIgbWF4bGVuZ3RoPVwiNjRcIj48L3RkPjx0ZD48aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgbmFtZT1cInNxbF9wYXNzd2RcIiB2YWx1ZT1cIlwiIG1heGxlbmd0aD1cIjY0XCI+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiXCIgbWF4bGVuZ3RoPVwiNjRcIj48L3RkPjwvdHI+PHRyPjx0ZD48Yj5Ib3N0PC9iPjwvdGQ+PHRkPjxiPlBPUlQ8L2I+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249cmlnaHQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF9zZXJ2ZXJcIiB2YWx1ZT1cImxvY2FsaG9zdFwiIG1heGxlbmd0aD1cIjY0XCI+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIzMzA2XCIgbWF4bGVuZ3RoPVwiNlwiIHNpemU9XCIzXCI+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbm5lY3RcIj48L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PC90ZD4iOw0KICB9DQogIGVsc2Ugew0KICAgIGlmICghZW1wdHkoJHNxbF9kYikpIHsNCiAgICAgID8+PHRkIHdpZHRoPSIyNSUiIGhlaWdodD0iMTAwJSIgdmFsaWduPSJ0b3AiPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmwuIng9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJiI7ID8+Ij48Yj5Ib21lPC9iPjwvYT48aHIgc2l6ZT0iMSIgbm9zaGFkZT4NCiAgICAgIDw/cGhwDQogICAgICAkcmVzdWx0ID0gbXlzcWxfbGlzdF90YWJsZXMoJHNxbF9kYik7DQogICAgICBpZiAoISRyZXN1bHQpIHtlY2hvIG15c3FsX3NtYXJ0ZXJyb3IoKTt9DQogICAgICBlbHNlIHsNCiAgICAgICAgZWNobyAiLS0tWyA8YSBocmVmPVwiIi4kc3FsX3N1cmwuIiZcIj48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIjwvYj48L2E+IF0tLS08YnI+IjsNCiAgICAgICAgJGMgPSAwOw0KICAgICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7JGNvdW50ID0gbXlzcWxfcXVlcnkgKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAiLiRyb3dbMF0pOyAkY291bnRfcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGNvdW50KTsgZWNobyAiPGI+KyZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX2RiPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iJnNxbF90Ymw9Ii5odG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiJcIj48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1swXSkuIjwvYj48L2E+ICgiLiRjb3VudF9yb3dbMF0uIik8L2JyPjwvYj4iOyBteXNxbF9mcmVlX3Jlc3VsdCgkY291bnQpOyAkYysrO30NCiAgICAgICAgaWYgKCEkYykge2VjaG8gIk5vIHRhYmxlcyBmb3VuZCBpbiBkYXRhYmFzZS4iO30NCiAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICA/Pjx0ZCB3aWR0aD0iMSIgaGVpZ2h0PSIxMDAiIHZhbGlnbj0idG9wIj48YSBocmVmPSI8P3BocCBlY2hvICRzcWxfc3VybDsgPz4iPjxiPkhvbWU8L2I+PC9hPjxociBzaXplPSIxIiBub3NoYWRlPg0KICAgICAgPD9waHANCiAgICAgICRyZXN1bHQgPSBteXNxbF9saXN0X2Ricygkc3FsX3NvY2spOw0KICAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgICAgZWxzZSB7DQogICAgICAgID8+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48c2VsZWN0IG5hbWU9InNxbF9kYiI+DQogICAgICAgIDw/cGhwDQogICAgICAgICRjID0gMDsNCiAgICAgICAgJGRicyA9ICIiOw0KICAgICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcmVzdWx0KSkgeyRkYnMgLj0gIjxvcHRpb24gdmFsdWU9XCIiLiRyb3dbMF0uIlwiIjsgaWYgKCRzcWxfZGIgPT0gJHJvd1swXSkgeyRkYnMgLj0gIiBzZWxlY3RlZCI7fSAkZGJzIC49ICI+Ii4kcm93WzBdLiI8L29wdGlvbj4iOyAkYysrO30NCiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPkRhdGFiYXNlcyAoIi4kYy4iKTwvb3B0aW9uPiI7DQogICAgICAgIGVjaG8gJGRiczsNCiAgICAgIH0NCiAgICAgID8+PC9zZWxlY3Q+PGhyIHNpemU9IjEiIG5vc2hhZGU+UGxlYXNlLCBzZWxlY3QgZGF0YWJhc2U8aHIgc2l6ZT0iMSIgbm9zaGFkZT48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iR28iPjwvZm9ybT4NCiAgICAgIDw/cGhwDQogICAgfQ0KICAgIGVjaG8gIjwvdGQ+PHRkIHdpZHRoPVwiMTAwJVwiPiI7DQogICAgJGRpcGxheSA9IFRSVUU7DQogICAgaWYgKCRzcWxfZGIpIHsNCiAgICAgIGlmICghaXNfbnVtZXJpYygkYykpIHskYyA9IDA7fQ0KICAgICAgaWYgKCRjID09IDApIHskYyA9ICJubyI7fQ0KICAgICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT48Y2VudGVyPjxiPlRoZXJlIGFyZSAiLiRjLiIgdGFibGUocykgaW4gdGhpcyBEQiAoIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiIpLjxicj4iOw0KICAgICAgaWYgKGNvdW50KCRkYnF1aWNrbGF1bmNoKSA+IDApIHtmb3JlYWNoKCRkYnNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7ZWNobyAiWyA8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPiBdICI7fX0NCiAgICAgIGVjaG8gIjwvYj48L2NlbnRlcj4iOw0KICAgICAgJGFjdHMgPSBhcnJheSgiIiwiZHVtcCIpOw0KICAgICAgaWYgKCRzcWxfeCA9PSAidGJsZHJvcCIpIHskc3FsX3F1ZXJ5ID0gIkRST1AgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF94ID0gInF1ZXJ5Ijt9DQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsZW1wdHkiKSB7JHNxbF9xdWVyeSA9ICIiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJERUxFVEUgRlJPTSBgIi4kdi4iYCBcbiI7fSAkc3FsX3ggPSAicXVlcnkiO30NCiAgICAgIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxkdW1wIikge2lmIChjb3VudCgkYm94dGJsKSA+IDApIHskZG1wdGJscyA9ICRib3h0Ymw7fSBlbHNlaWYoJHRoaXN0YmwpIHskZG1wdGJscyA9IGFycmF5KCRzcWxfdGJsKTt9ICRzcWxfeCA9ICJkdW1wIjt9DQogICAgICBlbHNlaWYgKCRzcWxfeCA9PSAidGJsY2hlY2siKSB7JHNxbF9xdWVyeSA9ICJDSEVDSyBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX3ggPSAicXVlcnkiO30NCiAgICAgIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxvcHRpbWl6ZSIpIHskc3FsX3F1ZXJ5ID0gIk9QVElNSVpFIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfeCA9ICJxdWVyeSI7fQ0KICAgICAgZWxzZWlmICgkc3FsX3ggPT0gInRibHJlcGFpciIpIHskc3FsX3F1ZXJ5ID0gIlJFUEFJUiBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX3ggPSAicXVlcnkiO30NCiAgICAgIGVsc2VpZiAoJHNxbF94ID09ICJ0YmxhbmFseXplIikgeyRzcWxfcXVlcnkgPSAiQU5BTFlaRSBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX3ggPSAicXVlcnkiO30NCiAgICAgIGVsc2VpZiAoJHNxbF94ID09ICJkZWxldGVyb3ciKSB7JHNxbF9xdWVyeSA9ICIiOyBpZiAoIWVtcHR5KCRib3hyb3dfYWxsKSkgeyRzcWxfcXVlcnkgPSAiREVMRVRFICogRlJPTSBgIi4kc3FsX3RibC4iYDsiO30gZWxzZSB7Zm9yZWFjaCgkYm94cm93IGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiREVMRVRFICogRlJPTSBgIi4kc3FsX3RibC4iYCBXSEVSRSIuJHYuIiBMSU1JVCAxO1xuIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKTt9ICRzcWxfeCA9ICJxdWVyeSI7fQ0KICAgICAgZWxzZWlmICgkc3FsX3RibF94ID09ICJpbnNlcnQiKSB7DQogICAgICAgIGlmICgkc3FsX3RibF9pbnNlcnRfcmFkaW8gPT0gMSkgew0KICAgICAgICAgICRrZXlzID0gIiI7DQogICAgICAgICAgJGFrZXlzID0gYXJyYXlfa2V5cygkc3FsX3RibF9pbnNlcnQpOw0KICAgICAgICAgIGZvcmVhY2ggKCRha2V5cyBhcyAkdikgeyRrZXlzIC49ICJgIi5hZGRzbGFzaGVzKCR2KS4iYCwgIjt9DQogICAgICAgICAgaWYgKCFlbXB0eSgka2V5cykpIHska2V5cyA9IHN1YnN0cigka2V5cywwLHN0cmxlbigka2V5cyktMik7fQ0KICAgICAgICAgICR2YWx1ZXMgPSAiIjsNCiAgICAgICAgICAkaSA9IDA7DQogICAgICAgICAgZm9yZWFjaCAoYXJyYXlfdmFsdWVzKCRzcWxfdGJsX2luc2VydCkgYXMgJHYpIHtpZiAoJGZ1bmN0ID0gJHNxbF90YmxfaW5zZXJ0X2Z1bmN0c1skYWtleXNbJGldXSkgeyR2YWx1ZXMgLj0gJGZ1bmN0LiIgKCI7fSAkdmFsdWVzIC49ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7IGlmICgkZnVuY3QpIHskdmFsdWVzIC49ICIpIjt9ICR2YWx1ZXMgLj0gIiwgIjsgJGkrKzt9DQogICAgICAgICAgaWYgKCFlbXB0eSgkdmFsdWVzKSkgeyR2YWx1ZXMgPSBzdWJzdHIoJHZhbHVlcywwLHN0cmxlbigkdmFsdWVzKS0yKTt9DQogICAgICAgICAgJHNxbF9xdWVyeSA9ICJJTlNFUlQgSU5UTyBgIi4kc3FsX3RibC4iYCAoICIuJGtleXMuIiApIFZBTFVFUyAoICIuJHZhbHVlcy4iICk7IjsNCiAgICAgICAgICAkc3FsX3ggPSAicXVlcnkiOw0KICAgICAgICAgICRzcWxfdGJsX3ggPSAiYnJvd3NlIjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKCRzcWxfdGJsX2luc2VydF9yYWRpbyA9PSAyKSB7DQogICAgICAgICAgJHNldCA9IG15c3FsX2J1aWxkd2hlcmUoJHNxbF90YmxfaW5zZXJ0LCIsICIsJHNxbF90YmxfaW5zZXJ0X2Z1bmN0cyk7DQogICAgICAgICAgJHNxbF9xdWVyeSA9ICJVUERBVEUgYCIuJHNxbF90YmwuImAgU0VUICIuJHNldC4iIFdIRVJFICIuJHNxbF90YmxfaW5zZXJ0X3EuIiBMSU1JVCAxOyI7DQogICAgICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRzcWxfcXVlcnkpIG9yIHByaW50KG15c3FsX3NtYXJ0ZXJyb3IoKSk7DQogICAgICAgICAgJHJlc3VsdCA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX0FTU09DKTsNCiAgICAgICAgICAkc3FsX3ggPSAicXVlcnkiOw0KICAgICAgICAgICRzcWxfdGJsX3ggPSAiYnJvd3NlIjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKCRzcWxfeCA9PSAicXVlcnkiKSB7DQogICAgICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgICAgICAgaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9DQogICAgICAgIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX3ggPSAkc3FsX2dvdG87fQ0KICAgICAgICBpZiAoKCEkc3VibWl0KSBvciAoJHNxbF94KSkge2VjaG8gIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMVwiPjx0cj48dGQ+PGZvcm0gYWN0aW9uPVwiIi4kc3FsX3N1cmwuIlwiIG1ldGhvZD1cIlBPU1RcIj48Yj4iOyBpZiAoKCRzcWxfcXVlcnkpIGFuZCAoISRzdWJtaXQpKSB7ZWNobyAiRG8geW91IHJlYWxseSB3YW50IHRvOiI7fSBlbHNlIHtlY2hvICJTUUwtUXVlcnkgOiI7fSBlY2hvICI8L2I+PGJyPjxicj48dGV4dGFyZWEgbmFtZT1cInNxbF9xdWVyeVwiIGNvbHM9XCIxMDBcIiByb3dzPVwiMTBcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9xdWVyeSkuIjwvdGV4dGFyZWE+PGJyPjxicj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfeFwiIHZhbHVlPVwicXVlcnlcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIjFcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZ290b1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ290bykuIlwiPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInNxbF9jb25maXJtXCIgdmFsdWU9XCJZZXNcIj4gPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIk5vXCI+PC9mb3JtPjwvdGQ+PC90cj48L3RhYmxlPiI7fQ0KICAgICAgfQ0KICAgICAgaWYgKGluX2FycmF5KCRzcWxfeCwkYWN0cykpIHsNCiAgICAgICAgPz48dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxIj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PGI+Q3JlYXRlIG5ldyB0YWJsZTo8L2I+DQogICAgICAgIDxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3giIHZhbHVlPSJuZXd0YmwiPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfZGIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7ID8+Ij4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij4NCiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9uZXd0YmwiIHNpemU9IjIwIj4NCiAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyZWF0ZSI+DQogICAgICAgIDwvZm9ybT48L3RkPg0KICAgICAgICA8dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5EdW1wIERCOjwvYj4NCiAgICAgICAgPGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IngiIHZhbHVlPSJzcWwiPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfeCIgdmFsdWU9ImR1bXAiPg0KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfZGIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7ID8+Ij4NCiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkdW1wX2ZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iPD9waHAgZWNobyAiZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCI7ID8+Ij48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPVwic3VibWl0XCIgdmFsdWU9IkR1bXAiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48L3RhYmxlPg0KICAgICAgICA8P3BocA0KICAgICAgICBpZiAoIWVtcHR5KCRzcWxfeCkpIHtlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7fQ0KICAgICAgICBpZiAoJHNxbF94ID09ICJuZXd0YmwiKSB7DQogICAgICAgICAgZWNobyAiPGI+IjsNCiAgICAgICAgICBpZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkgew0KICAgICAgICAgICAgZWNobyAiREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiIGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCBzdWNjZXNzITwvYj48YnI+IjsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSB7ZWNobyAiQ2FuJ3QgY3JlYXRlIERCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIi48YnI+UmVhc29uOjwvYj4gIi5teXNxbF9zbWFydGVycm9yKCk7fQ0KICAgICAgICB9DQogICAgICAgIGVsc2VpZiAoJHNxbF94ID09ICJkdW1wIikgew0KICAgICAgICAgIGlmIChlbXB0eSgkc3VibWl0KSkgew0KICAgICAgICAgICAgJGRpcGxheSA9IEZBTFNFOw0KICAgICAgICAgICAgZWNobyAiPGZvcm0gbWV0aG9kPVwiR0VUXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwieFwiIHZhbHVlPVwic3FsXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3hcIiB2YWx1ZT1cImR1bXBcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wYXNzd2RcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9zZXJ2ZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGI+U1FMLUR1bXA6PC9iPjxicj48YnI+IjsNCiAgICAgICAgICAgIGVjaG8gIjxiPkRCOjwvYj4gPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi51cmxlbmNvZGUoJHNxbF9kYikuIlwiPjxicj48YnI+IjsNCiAgICAgICAgICAgICR2ID0gam9pbiAoIjsiLCRkbXB0YmxzKTsNCiAgICAgICAgICAgIGVjaG8gIjxiPk9ubHkgdGFibGVzIChleHBsb2RlIFwiO1wiKSZuYnNwOzxiPjxzdXA+MTwvc3VwPjwvYj46PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJkbXB0YmxzXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiJcIiBzaXplPVwiIi4oc3RybGVuKCR2KSs1KS4iXCI+PGJyPjxicj4iOw0KICAgICAgICAgICAgaWYgKCRkdW1wX2ZpbGUpIHskdG1wID0gJGR1bXBfZmlsZTt9DQogICAgICAgICAgICBlbHNlIHskdG1wID0gaHRtbHNwZWNpYWxjaGFycygiLi9kdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kc3FsX2RiLiJfIi5kYXRlKCJkLW0tWS1ILWktcyIpLiIuc3FsIik7fQ0KICAgICAgICAgICAgZWNobyAiPGI+RmlsZTo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF9kdW1wX2ZpbGVcIiB2YWx1ZT1cIiIuJHRtcC4iXCIgc2l6ZT1cIiIuKHN0cmxlbigkdG1wKStzdHJsZW4oJHRtcCkgJSAzMCkuIlwiPjxicj48YnI+IjsNCiAgICAgICAgICAgIGVjaG8gIjxiPkRvd25sb2FkOiA8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzcWxfZHVtcF9kb3dubG9hZFwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+PGJyPjxicj4iOw0KICAgICAgICAgICAgZWNobyAiPGI+U2F2ZSB0byBmaWxlOiA8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzcWxfZHVtcF9zYXZldG9maWxlXCIgdmFsdWU9XCIxXCIgY2hlY2tlZD4iOw0KICAgICAgICAgICAgZWNobyAiPGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIkR1bXBcIj48YnI+PGJyPjxiPjxzdXA+MTwvc3VwPjwvYj4gLSBhbGwsIGlmIGVtcHR5IjsNCiAgICAgICAgICAgIGVjaG8gIjwvZm9ybT4iOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICRkaXBsYXkgPSBUUlVFOw0KICAgICAgICAgICAgJHNldCA9IGFycmF5KCk7DQogICAgICAgICAgICAkc2V0WyJzb2NrIl0gPSAkc3FsX3NvY2s7DQogICAgICAgICAgICAkc2V0WyJkYiJdID0gJHNxbF9kYjsNCiAgICAgICAgICAgICRkdW1wX291dCA9ICJkb3dubG9hZCI7DQogICAgICAgICAgICAkc2V0WyJwcmludCJdID0gMDsNCiAgICAgICAgICAgICRzZXRbIm5sMmJyIl0gPSAwOw0KICAgICAgICAgICAgJHNldFsiIl0gPSAwOw0KICAgICAgICAgICAgJHNldFsiZmlsZSJdID0gJGR1bXBfZmlsZTsNCiAgICAgICAgICAgICRzZXRbImFkZF9kcm9wIl0gPSBUUlVFOw0KICAgICAgICAgICAgJHNldFsib25seXRhYnMiXSA9IGFycmF5KCk7DQogICAgICAgICAgICBpZiAoIWVtcHR5KCRkbXB0YmxzKSkgeyRzZXRbIm9ubHl0YWJzIl0gPSBleHBsb2RlKCI7IiwkZG1wdGJscyk7fQ0KICAgICAgICAgICAgJHJldCA9IG15c3FsX2R1bXAoJHNldCk7DQogICAgICAgICAgICBpZiAoJHNxbF9kdW1wX2Rvd25sb2FkKSB7DQogICAgICAgICAgICAgIEBvYl9jbGVhbigpOw0KICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7DQogICAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuc3RybGVuKCRyZXQpKTsNCiAgICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYmFzZW5hbWUoJHNxbF9kdW1wX2ZpbGUpLiJcIjsiKTsNCiAgICAgICAgICAgICAgZWNobyAkcmV0Ow0KICAgICAgICAgICAgICBleGl0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZWlmICgkc3FsX2R1bXBfc2F2ZXRvZmlsZSkgew0KICAgICAgICAgICAgICAkZnAgPSBmb3Blbigkc3FsX2R1bXBfZmlsZSwidyIpOw0KICAgICAgICAgICAgICBpZiAoISRmcCkge2VjaG8gIjxiPkR1bXAgZXJyb3IhIENhbid0IHdyaXRlIHRvIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZHVtcF9maWxlKS4iXCIhIjt9DQogICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIGZ3cml0ZSgkZnAsJHJldCk7DQogICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7DQogICAgICAgICAgICAgICAgZWNobyAiPGI+RHVtcGVkISBEdW1wIGhhcyBiZWVuIHdyaXRlZCB0byBcIiIuaHRtbHNwZWNpYWxjaGFycyhyZWFscGF0aCgkc3FsX2R1bXBfZmlsZSkpLiJcIiAoIi52aWV3X3NpemUoZmlsZXNpemUoJHNxbF9kdW1wX2ZpbGUpKS4iKTwvYj4uIjsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7ZWNobyAiPGI+RHVtcDogbm90aGluZyB0byBkbyE8L2I+Ijt9DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICgkZGlwbGF5KSB7DQogICAgaWYgKCFlbXB0eSgkc3FsX3RibCkpIHsNCiAgICAgIGlmIChlbXB0eSgkc3FsX3RibF94KSkgeyRzcWxfdGJsX3ggPSAiYnJvd3NlIjt9DQogICAgICAkY291bnQgPSBteXNxbF9xdWVyeSgiU0VMRUNUIENPVU5UKCopIEZST00gYCIuJHNxbF90YmwuImA7Iik7DQogICAgICAkY291bnRfcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGNvdW50KTsNCiAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRjb3VudCk7DQogICAgICAkdGJsX3N0cnVjdF9yZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBGSUVMRFMgRlJPTSBgIi4kc3FsX3RibC4iYDsiKTsNCiAgICAgICR0Ymxfc3RydWN0X2ZpZWxkcyA9IGFycmF5KCk7DQogICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCR0Ymxfc3RydWN0X3Jlc3VsdCkpIHskdGJsX3N0cnVjdF9maWVsZHNbXSA9ICRyb3c7fQ0KICAgICAgaWYgKCRzcWxfbHMgPiAkc3FsX2xlKSB7JHNxbF9sZSA9ICRzcWxfbHMgKyAkcGVycGFnZTt9DQogICAgICBpZiAoZW1wdHkoJHNxbF90YmxfcGFnZSkpIHskc3FsX3RibF9wYWdlID0gMDt9DQogICAgICBpZiAoZW1wdHkoJHNxbF90YmxfbHMpKSB7JHNxbF90YmxfbHMgPSAwO30NCiAgICAgIGlmIChlbXB0eSgkc3FsX3RibF9sZSkpIHskc3FsX3RibF9sZSA9IDMwO30NCiAgICAgICRwZXJwYWdlID0gJHNxbF90YmxfbGUgLSAkc3FsX3RibF9sczsNCiAgICAgIGlmICghaXNfbnVtZXJpYygkcGVycGFnZSkpIHskcGVycGFnZSA9IDEwO30NCiAgICAgICRudW1wYWdlcyA9ICRjb3VudF9yb3dbMF0vJHBlcnBhZ2U7DQogICAgICAkZSA9IGV4cGxvZGUoIiAiLCRzcWxfb3JkZXIpOw0KICAgICAgaWYgKGNvdW50KCRlKSA9PSAyKSB7DQogICAgICAgIGlmICgkZVswXSA9PSAiZCIpIHskYXNjX2Rlc2MgPSAiREVTQyI7fQ0KICAgICAgICBlbHNlIHskYXNjX2Rlc2MgPSAiQVNDIjt9DQogICAgICAgICR2ID0gIk9SREVSIEJZIGAiLiRlWzFdLiJgICIuJGFzY19kZXNjLiIgIjsNCiAgICAgIH0NCiAgICAgIGVsc2UgeyR2ID0gIiI7fQ0KICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYCIuJHNxbF90YmwuImAgIi4kdi4iTElNSVQgIi4kc3FsX3RibF9scy4iICwgIi4kcGVycGFnZS4iIjsNCiAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpIG9yIHByaW50KG15c3FsX3NtYXJ0ZXJyb3IoKSk7DQogICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxjZW50ZXI+PGI+VGFibGUgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iICgiLm15c3FsX251bV9maWVsZHMoJHJlc3VsdCkuIiBjb2xzIGFuZCAiLiRjb3VudF9yb3dbMF0uIiByb3dzKTwvYj48L2NlbnRlcj4iOw0KICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfeD1zdHJ1Y3R1cmVcIj5bPGI+IFN0cnVjdHVyZSA8L2I+XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfeD1icm93c2VcIj5bPGI+IEJyb3dzZSA8L2I+XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF94PXRibGR1bXAmdGhpc3RibD0xXCI+WzxiPiBEdW1wIDwvYj5dPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7DQogICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF94PWluc2VydFwiPlsmbmJzcDs8Yj5JbnNlcnQ8L2I+Jm5ic3A7XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICAgaWYgKCRzcWxfdGJsX3ggPT0gInN0cnVjdHVyZSIpIHtlY2hvICI8YnI+PGJyPjxiPkNvbWluZyBzb29vbiE8L2I+Ijt9DQogICAgICBpZiAoJHNxbF90YmxfeCA9PSAiaW5zZXJ0Iikgew0KICAgICAgICBpZiAoIWlzX2FycmF5KCRzcWxfdGJsX2luc2VydCkpIHskc3FsX3RibF9pbnNlcnQgPSBhcnJheSgpO30NCiAgICAgICAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcmFkaW8pKSB7ICB9IC8vTm90IFJlYWR5DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgIGVjaG8gIjxicj48YnI+PGI+SW5zZXJ0aW5nIHJvdyBpbnRvIHRhYmxlOjwvYj48YnI+IjsNCiAgICAgICAgICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkgew0KICAgICAgICAgICAgJHNxbF9xdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIGAiLiRzcWxfdGJsLiJgIjsNCiAgICAgICAgICAgICRzcWxfcXVlcnkgLj0gIiBXSEVSRSIuJHNxbF90YmxfaW5zZXJ0X3E7DQogICAgICAgICAgICAkc3FsX3F1ZXJ5IC49ICIgTElNSVQgMTsiOw0KICAgICAgICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRzcWxfcXVlcnksJHNxbF9zb2NrKSBvciBwcmludCgiPGJyPjxicj4iLm15c3FsX3NtYXJ0ZXJyb3IoKSk7DQogICAgICAgICAgICAkdmFsdWVzID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCk7DQogICAgICAgICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSB7JHZhbHVlcyA9IGFycmF5KCk7fQ0KICAgICAgICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48dGFibGUgd2lkdGg9XCIxJVwiIGJvcmRlcj0xPjx0cj48dGQ+PGI+RmllbGQ8L2I+PC90ZD48dGQ+PGI+VHlwZTwvYj48L3RkPjx0ZD48Yj5GdW5jdGlvbjwvYj48L3RkPjx0ZD48Yj5WYWx1ZTwvYj48L3RkPjwvdHI+IjsNCiAgICAgICAgICBmb3JlYWNoICgkdGJsX3N0cnVjdF9maWVsZHMgYXMgJGZpZWxkKSB7DQogICAgICAgICAgICAkbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsNCiAgICAgICAgICAgIGlmIChlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHskdiA9ICIiO30NCiAgICAgICAgICAgIGVjaG8gIjx0cj48dGQ+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iPC9iPjwvdGQ+PHRkPiIuJGZpZWxkWyJUeXBlIl0uIjwvdGQ+PHRkPjxzZWxlY3QgbmFtZT1cInNxbF90YmxfaW5zZXJ0X2Z1bmN0c1siLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiJdXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPjxvcHRpb24+UEFTU1dPUkQ8L29wdGlvbj48b3B0aW9uPk1ENTwvb3B0aW9uPjxvcHRpb24+RU5DUllQVDwvb3B0aW9uPjxvcHRpb24+QVNDSUk8L29wdGlvbj48b3B0aW9uPkNIQVI8L29wdGlvbj48b3B0aW9uPlJBTkQ8L29wdGlvbj48b3B0aW9uPkxBU1RfSU5TRVJUX0lEPC9vcHRpb24+PG9wdGlvbj5DT1VOVDwvb3B0aW9uPjxvcHRpb24+QVZHPC9vcHRpb24+PG9wdGlvbj5TVU08L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiXCI+LS0tLS0tLS08L29wdGlvbj48b3B0aW9uPlNPVU5ERVg8L29wdGlvbj48b3B0aW9uPkxDQVNFPC9vcHRpb24+PG9wdGlvbj5VQ0FTRTwvb3B0aW9uPjxvcHRpb24+Tk9XPC9vcHRpb24+PG9wdGlvbj5DVVJEQVRFPC9vcHRpb24+PG9wdGlvbj5DVVJUSU1FPC9vcHRpb24+PG9wdGlvbj5GUk9NX0RBWVM8L29wdGlvbj48b3B0aW9uPkZST01fVU5JWFRJTUU8L29wdGlvbj48b3B0aW9uPlBFUklPRF9BREQ8L29wdGlvbj48b3B0aW9uPlBFUklPRF9ESUZGPC9vcHRpb24+PG9wdGlvbj5UT19EQVlTPC9vcHRpb24+PG9wdGlvbj5VTklYX1RJTUVTVEFNUDwvb3B0aW9uPjxvcHRpb24+VVNFUjwvb3B0aW9uPjxvcHRpb24+V0VFS0RBWTwvb3B0aW9uPjxvcHRpb24+Q09OQ0FUPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0WyIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIl1cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdmFsdWVzWyRuYW1lXSkuIlwiIHNpemU9NTA+PC90ZD48L3RyPiI7DQogICAgICAgICAgICAkaSsrOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlY2hvICI8L3RhYmxlPjxicj4iOw0KICAgICAgICAgIGVjaG8gIjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcmFkaW9cIiB2YWx1ZT1cIjFcIiI7IGlmIChlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PGI+SW5zZXJ0IGFzIG5ldyByb3c8L2I+IjsNCiAgICAgICAgICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkge2VjaG8gIiBvciA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3JhZGlvXCIgdmFsdWU9XCIyXCIgY2hlY2tlZD48Yj5TYXZlPC9iPiI7IGVjaG8gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3FcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibF9pbnNlcnRfcSkuIlwiPiI7fQ0KICAgICAgICAgIGVjaG8gIjxicj48YnI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+IjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKCRzcWxfdGJsX3ggPT0gImJyb3dzZSIpIHsNCiAgICAgICAgJHNxbF90YmxfbHMgPSBhYnMoJHNxbF90YmxfbHMpOw0KICAgICAgICAkc3FsX3RibF9sZSA9IGFicygkc3FsX3RibF9sZSk7DQogICAgICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgICAgICAgZWNobyAiPGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9bXVsdGlwYWdlXCIgaGVpZ2h0PVwiMTJcIiB3aWR0aD1cIjEwXCIgYWx0PVwiUGFnZXNcIj4mbmJzcDsiOw0KICAgICAgICAkYiA9IDA7DQogICAgICAgIGZvcigkaT0wOyRpPCRudW1wYWdlczskaSsrKSB7DQogICAgICAgICAgaWYgKCgkaSokcGVycGFnZSAhPSAkc3FsX3RibF9scykgb3IgKCRpKiRwZXJwYWdlKyRwZXJwYWdlICE9ICRzcWxfdGJsX2xlKSkge2VjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfb3JkZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfb3JkZXIpLiImc3FsX3RibF9scz0iLigkaSokcGVycGFnZSkuIiZzcWxfdGJsX2xlPSIuKCRpKiRwZXJwYWdlKyRwZXJwYWdlKS4iXCI+PHU+Ijt9DQogICAgICAgICAgZWNobyAkaTsNCiAgICAgICAgICBpZiAoKCRpKiRwZXJwYWdlICE9ICRzcWxfdGJsX2xzKSBvciAoJGkqJHBlcnBhZ2UrJHBlcnBhZ2UgIT0gJHNxbF90YmxfbGUpKSB7ZWNobyAiPC91PjwvYT4iO30NCiAgICAgICAgICBpZiAoKCRpLzMwID09IHJvdW5kKCRpLzMwKSkgYW5kICgkaSA+IDApKSB7ZWNobyAiPGJyPiI7fQ0KICAgICAgICAgIGVsc2Uge2VjaG8gIiZuYnNwOyI7fQ0KICAgICAgICB9DQogICAgICAgIGlmICgkaSA9PSAwKSB7ZWNobyAiZW1wdHkiO30NCiAgICAgICAgZWNobyAiPGZvcm0gbWV0aG9kPVwiR0VUXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwieFwiIHZhbHVlPVwic3FsXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9sb2dpblwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcGFzc3dkXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfc2VydmVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcG9ydFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9vcmRlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfb3JkZXIpLiJcIj48Yj5Gcm9tOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9sc1wiIHZhbHVlPVwiIi4kc3FsX3RibF9scy4iXCI+Jm5ic3A7PGI+VG86PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2xlXCIgdmFsdWU9XCIiLiRzcWxfdGJsX2xlLiJcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiVmlld1wiPjwvZm9ybT4iOw0KICAgICAgICBlY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxJVwiIGJnY29sb3I9IzAwMDAwMCBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+IjsNCiAgICAgICAgZWNobyAiPHRyPiI7DQogICAgICAgIGVjaG8gIjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHJvd19hbGxcIiB2YWx1ZT1cIjFcIj48L3RkPiI7DQogICAgICAgIGZvciAoJGk9MDskaTxteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOyRpKyspIHsNCiAgICAgICAgICAkdiA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7DQogICAgICAgICAgaWYgKCRlWzBdID09ICJhIikgeyRzID0gImQiOyAkbSA9ICJhc2MiO30NCiAgICAgICAgICBlbHNlIHskcyA9ICJhIjsgJG0gPSAiZGVzYyI7fQ0KICAgICAgICAgIGVjaG8gIjx0ZD4iOw0KICAgICAgICAgIGlmIChlbXB0eSgkZVswXSkpIHskZVswXSA9ICJhIjt9DQogICAgICAgICAgaWYgKCRlWzFdICE9ICR2KSB7ZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIuJHNxbF90YmwuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfb3JkZXI9Ii4kZVswXS4iJTIwIi4kdi4iXCI+PGI+Ii4kdi4iPC9iPjwvYT4iO30NCiAgICAgICAgICBlbHNlIHtlY2hvICI8Yj4iLiR2LiI8L2I+PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIuJHNxbF90YmwuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfb3JkZXI9Ii4kcy4iJTIwIi4kdi4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c29ydF8iLiRtLiJcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGFsdD1cIiIuJG0uIlwiPjwvYT4iO30NCiAgICAgICAgICBlY2hvICI8L3RkPiI7DQogICAgICAgIH0NCiAgICAgIGVjaG8gIjx0ZD48Zm9udCBjb2xvcj1cImxpbWVcIj48Yj5BY3Rpb248L2I+PC9mb250PjwvdGQ+IjsNCiAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKSB7DQogICAgICAgZWNobyAiPHRyPiI7DQogICAgICAgJHcgPSAiIjsNCiAgICAgICAkaSA9IDA7DQogICAgICAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpIHskbmFtZSA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7ICR3IC49ICIgYCIuJG5hbWUuImAgPSAnIi5hZGRzbGFzaGVzKCR2KS4iJyBBTkQiOyAkaSsrO30NCiAgICAgICBpZiAoY291bnQoJHJvdykgPiAwKSB7JHcgPSBzdWJzdHIoJHcsMCxzdHJsZW4oJHcpLTMpO30NCiAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dbXVwiIHZhbHVlPVwiIi4kdy4iXCI+PC90ZD4iOw0KICAgICAgICRpID0gMDsNCiAgICAgICBmb3JlYWNoICgkcm93IGFzICRrPT4kdikNCiAgICAgICB7DQogICAgICAgICR2ID0gaHRtbHNwZWNpYWxjaGFycygkdik7DQogICAgICAgIGlmICgkdiA9PSAiIikgeyR2ID0gIjxmb250IGNvbG9yPVwibGltZVwiPk5VTEw8L2ZvbnQ+Ijt9DQogICAgICAgIGVjaG8gIjx0ZD4iLiR2LiI8L3RkPiI7DQogICAgICAgICRpKys7DQogICAgICAgfQ0KICAgICAgIGVjaG8gIjx0ZD4iOw0KICAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cXVlcnkmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdy4iIExJTUlUIDE7IikuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNxbF9idXR0b25fZHJvcFwiIGFsdD1cIkRlbGV0ZVwiIGhlaWdodD1cIjEzXCIgd2lkdGg9XCIxMVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7IjsNCiAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfeD1pbnNlcnQmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfdGJsX2luc2VydF9xPSIudXJsZW5jb2RlKCR3KS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9Y2hhbmdlXCIgYWx0PVwiRWRpdFwiIGhlaWdodD1cIjE0XCIgd2lkdGg9XCIxNFwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7IjsNCiAgICAgICBlY2hvICI8L3RkPiI7DQogICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgfQ0KICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgICBlY2hvICI8L3RhYmxlPjxociBzaXplPVwiMVwiIG5vc2hhZGU+PHAgYWxpZ249XCJsZWZ0XCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPjxzZWxlY3QgbmFtZT1cInNxbF94XCI+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiZGVsZXRlcm93XCI+RGVsZXRlPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25maXJtXCI+PC9mb3JtPjwvcD4iOw0KICAgICB9DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgVEFCTEUgU1RBVFVTIiwgJHNxbF9zb2NrKTsNCiAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgICBlbHNlDQogICAgIHsNCiAgICAgIGVjaG8gIjxicj48Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PFRBQkxFIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjEwMCVcIiBiZ2NvbG9yPSMwMDAwMDAgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3h0YmxfYWxsXCIgdmFsdWU9XCIxXCI+PC90ZD48dGQ+PGNlbnRlcj48Yj5UYWJsZTwvYj48L2NlbnRlcj48L3RkPjx0ZD48Yj5Sb3dzPC9iPjwvdGQ+PHRkPjxiPlR5cGU8L2I+PC90ZD48dGQ+PGI+Q3JlYXRlZDwvYj48L3RkPjx0ZD48Yj5Nb2RpZmllZDwvYj48L3RkPjx0ZD48Yj5TaXplPC9iPjwvdGQ+PHRkPjxiPkFjdGlvbjwvYj48L3RkPjwvdHI+IjsNCiAgICAgICRpID0gMDsNCiAgICAgICR0c2l6ZSA9ICR0cm93cyA9IDA7DQogICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX0FTU09DKSkNCiAgICAgIHsNCiAgICAgICAkdHNpemUgKz0gJHJvd1siRGF0YV9sZW5ndGgiXTsNCiAgICAgICAkdHJvd3MgKz0gJHJvd1siUm93cyJdOw0KICAgICAgICRzaXplID0gdmlld19zaXplKCRyb3dbIkRhdGFfbGVuZ3RoIl0pOw0KICAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgIGVjaG8gIjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHRibFtdXCIgdmFsdWU9XCIiLiRyb3dbIk5hbWUiXS4iXCI+PC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4mbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHJvd1siTmFtZSJdKS4iXCI+PGI+Ii4kcm93WyJOYW1lIl0uIjwvYj48L2E+Jm5ic3A7PC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIlJvd3MiXS4iPC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIlR5cGUiXS4iPC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIkNyZWF0ZV90aW1lIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJVcGRhdGVfdGltZSJdLiI8L3RkPiI7DQogICAgICAgZWNobyAiPHRkPiIuJHNpemUuIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfeD1xdWVyeSZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zcWxfYnV0dG9uX2VtcHR5XCIgYWx0PVwiRW1wdHlcIiBoZWlnaHQ9XCIxM1wiIHdpZHRoPVwiMTFcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3g9cXVlcnkmc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJEUk9QIFRBQkxFIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zcWxfYnV0dG9uX2Ryb3BcIiBhbHQ9XCJEcm9wXCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfeD1pbnNlcnQmc3FsX3RibD0iLiRyb3dbIk5hbWUiXS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c3FsX2J1dHRvbl9pbnNlcnRcIiBhbHQ9XCJJbnNlcnRcIiBoZWlnaHQ9XCIxM1wiIHdpZHRoPVwiMTFcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOzwvdGQ+IjsNCiAgICAgICBlY2hvICI8L3RyPiI7DQogICAgICAgJGkrKzsNCiAgICAgIH0NCiAgICAgIGVjaG8gIjx0ciBiZ2NvbG9yPVwiMDAwMDAwXCI+IjsNCiAgICAgIGVjaG8gIjx0ZD48Y2VudGVyPjxiPis8L2I+PC9jZW50ZXI+PC90ZD4iOw0KICAgICAgZWNobyAiPHRkPjxjZW50ZXI+PGI+Ii4kaS4iIHRhYmxlKHMpPC9iPjwvY2VudGVyPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD48Yj4iLiR0cm93cy4iPC9iPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbMV0uIjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbMTBdLiI8L3RkPiI7DQogICAgICBlY2hvICI8dGQ+Ii4kcm93WzExXS4iPC90ZD4iOw0KICAgICAgZWNobyAiPHRkPjxiPiIudmlld19zaXplKCR0c2l6ZSkuIjwvYj48L3RkPiI7DQogICAgICBlY2hvICI8dGQ+PC90ZD4iOw0KICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgZWNobyAiPC90YWJsZT48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxwIGFsaWduPVwicmlnaHRcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1hcnJvd19sdHJcIiBib3JkZXI9XCIwXCI+PHNlbGVjdCBuYW1lPVwic3FsX3hcIj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0Ymxkcm9wXCI+RHJvcDwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZW1wdHlcIj5FbXB0eTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZHVtcFwiPkR1bXA8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGNoZWNrXCI+Q2hlY2sgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibG9wdGltaXplXCI+T3B0aW1pemUgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibHJlcGFpclwiPlJlcGFpciB0YWJsZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsYW5hbHl6ZVwiPkFuYWx5emUgdGFibGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+PC9wPiI7DQogICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICAgfQ0KICAgIH0NCiAgIH0NCiAgIH0NCiAgfQ0KICBlbHNlIHsNCiAgICRhY3RzID0gYXJyYXkoIiIsIm5ld2RiIiwic2VydmVyc3RhdHVzIiwic2VydmVydmFycyIsInByb2Nlc3NlcyIsImdldGZpbGUiKTsNCiAgIGlmIChpbl9hcnJheSgkc3FsX3gsJGFjdHMpKSB7Pz48dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxIj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PGI+Q3JlYXRlIG5ldyBEQjo8L2I+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3giIHZhbHVlPSJuZXdkYiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX25ld2RiIiBzaXplPSIyMCI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyZWF0ZSI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PGI+VmlldyBGaWxlOjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ4IiB2YWx1ZT0ic3FsIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfeCIgdmFsdWU9ImdldGZpbGUiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9nZXRmaWxlIiBzaXplPSIzMCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2dldGZpbGUpOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdldCI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjwvdGFibGU+PD9waHAgfQ0KICAgaWYgKCFlbXB0eSgkc3FsX3gpKSB7DQogICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgIGlmICgkc3FsX3ggPT0gIm5ld2RiIikgew0KICAgICBlY2hvICI8Yj4iOw0KICAgICBpZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkge2VjaG8gIkRCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIiBoYXMgYmVlbiBjcmVhdGVkIHdpdGggc3VjY2VzcyE8L2I+PGJyPiI7fQ0KICAgICBlbHNlIHtlY2hvICJDYW4ndCBjcmVhdGUgREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiLjxicj5SZWFzb246PC9iPiAiLm15c3FsX3NtYXJ0ZXJyb3IoKTt9DQogICAgfQ0KICAgIGlmICgkc3FsX3ggPT0gInNlcnZlcnN0YXR1cyIpIHsNCiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFNUQVRVUyIsICRzcWxfc29jayk7DQogICAgIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyLXN0YXR1cyB2YXJpYWJsZXM6PC9iPjxicj48YnI+IjsNCiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCBiZ2NvbG9yPSMwMDAwMDAgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5OYW1lPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOw0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHtlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjwvdHI+Ijt9DQogICAgIGVjaG8gIjwvdGFibGU+PC9jZW50ZXI+IjsNCiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgfQ0KICAgIGlmICgkc3FsX3ggPT0gInNlcnZlcnZhcnMiKSB7DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBWQVJJQUJMRVMiLCAkc3FsX3NvY2spOw0KICAgICBlY2hvICI8Y2VudGVyPjxiPlNlcnZlciB2YXJpYWJsZXM6PC9iPjxicj48YnI+IjsNCiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCBiZ2NvbG9yPSMwMDAwMDAgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5OYW1lPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOw0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHtlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjwvdHI+Ijt9DQogICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgfQ0KICAgIGlmICgkc3FsX3ggPT0gInByb2Nlc3NlcyIpIHsNCiAgICAgaWYgKCFlbXB0eSgka2lsbCkpIHsNCiAgICAgICAkcXVlcnkgPSAiS0lMTCAiLiRraWxsLiI7IjsNCiAgICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCAkc3FsX3NvY2spOw0KICAgICAgIGVjaG8gIjxiPlByb2Nlc3MgIyIuJGtpbGwuIiB3YXMga2lsbGVkLjwvYj4iOw0KICAgICB9DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBQUk9DRVNTTElTVCIsICRzcWxfc29jayk7DQogICAgIGVjaG8gIjxjZW50ZXI+PGI+UHJvY2Vzc2VzOjwvYj48YnI+PGJyPiI7DQogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTIgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5JRDwvYj48L3RkPjx0ZD48Yj5VU0VSPC9iPjwvdGQ+PHRkPjxiPkhPU1Q8L2I+PC90ZD48dGQ+PGI+REI8L2I+PC90ZD48dGQ+PGI+Q09NTUFORDwvYj48L3RkPjx0ZD48Yj5USU1FPC9iPjwvdGQ+PHRkPjxiPlNUQVRFPC9iPjwvdGQ+PHRkPjxiPklORk88L2I+PC90ZD48dGQ+PGI+QWN0aW9uPC9iPjwvdGQ+PC90cj4iOw0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHsgZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48dGQ+Ii4kcm93WzJdLiI8L3RkPjx0ZD4iLiRyb3dbM10uIjwvdGQ+PHRkPiIuJHJvd1s0XS4iPC90ZD48dGQ+Ii4kcm93WzVdLiI8L3RkPjx0ZD4iLiRyb3dbNl0uIjwvdGQ+PHRkPiIuJHJvd1s3XS4iPC90ZD48dGQ+PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfeD1wcm9jZXNzZXMma2lsbD0iLiRyb3dbMF0uIlwiPjx1PktpbGw8L3U+PC9hPjwvdGQ+PC90cj4iO30NCiAgICAgZWNobyAiPC90YWJsZT4iOw0KICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsNCiAgICB9DQogICAgaWYgKCRzcWxfeCA9PSAiZ2V0ZmlsZSIpDQogICAgew0KICAgICAkdG1wZGIgPSAkc3FsX2xvZ2luLiJfdG1wZGIiOw0KICAgICAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7DQogICAgIGlmICghJHNlbGVjdCkge215c3FsX2NyZWF0ZV9kYigkdG1wZGIpOyAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7ICRjcmVhdGVkID0gISEkc2VsZWN0O30NCiAgICAgaWYgKCRzZWxlY3QpDQogICAgIHsNCiAgICAgICRjcmVhdGVkID0gRkFMU0U7DQogICAgICBteXNxbF9xdWVyeSgiQ1JFQVRFIFRBQkxFIGB0bXBfZmlsZWAgKCBgVmlld2luZyB0aGUgZmlsZSBpbiBzYWZlX21vZGUrb3Blbl9iYXNlZGlyYCBMT05HQkxPQiBOT1QgTlVMTCApOyIpOw0KICAgICAgbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBJTkZJTEUgXCIiLmFkZHNsYXNoZXMoJHNxbF9nZXRmaWxlKS4iXCIgSU5UTyBUQUJMRSB0bXBfZmlsZSIpOw0KICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHRtcF9maWxlOyIpOw0KICAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyAiPGI+RXJyb3IgaW4gcmVhZGluZyBmaWxlIChwZXJtaXNpb24gZGVuaWVkKSE8L2I+Ijt9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgZm9yICgkaT0wOyRpPG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7JGkrKykgeyRuYW1lID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTt9DQogICAgICAgJGYgPSAiIjsNCiAgICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX0FTU09DKSkgeyRmIC49IGpvaW4gKCJcclxuIiwkcm93KTt9DQogICAgICAgaWYgKGVtcHR5KCRmKSkge2VjaG8gIjxiPkZpbGUgXCIiLiRzcWxfZ2V0ZmlsZS4iXCIgZG9lcyBub3QgZXhpc3RzIG9yIGVtcHR5ITwvYj48YnI+Ijt9DQogICAgICAgZWxzZSB7ZWNobyAiPGI+RmlsZSBcIiIuJHNxbF9nZXRmaWxlLiJcIjo8L2I+PGJyPiIubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkZikpLiI8YnI+Ijt9DQogICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgICAgbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgdG1wX2ZpbGU7Iik7DQogICAgICB9DQogICAgIH0NCiAgICAgbXlzcWxfZHJvcF9kYigkdG1wZGIpOyANCiAgICB9DQogICB9DQogIH0NCn0NCmVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQppZiAoJHNxbF9zb2NrKSB7DQogICRhZmZlY3RlZCA9IEBteXNxbF9hZmZlY3RlZF9yb3dzKCRzcWxfc29jayk7DQogIGlmICgoIWlzX251bWVyaWMoJGFmZmVjdGVkKSkgb3IgKCRhZmZlY3RlZCA8IDApKXskYWZmZWN0ZWQgPSAwO30NCiAgZWNobyAiPHRyPjx0ZD48Y2VudGVyPjxiPkFmZmVjdGVkIHJvd3MgOiAiLiRhZmZlY3RlZC4iPC9jZW50ZXI+PC90ZD48L3RyPiI7DQp9DQplY2hvICI8L3RhYmxlPiI7DQp9DQppZiAoJHggPT0gInBocGluZm8iKSB7QG9iX2NsZWFuKCk7IHBocGluZm8oKTsgYm9nZWxleGl0KCk7fQ0KaWYgKCR4ID09ICJzZWN1cml0eSIpIHsNCiAgZWNobyAiPGRpdiBjbGFzcz1iYXJoZWFkZXI+LjogU2VydmVyIFNlY3VyaXR5IEluZm9ybWF0aW9uIDouPC9kaXY+Ii4NCiAgICAgICAiPHRhYmxlPiIuDQogICAgICAgIjx0cj48dGQ+T3BlbiBCYXNlIERpcjwvdGQ+PHRkPiIuJGhvcGVuYmFzZWRpci4iPC90ZD48L3RyPiI7DQogIGVjaG8gIjx0ZD5QYXNzd29yZCBGaWxlPC90ZD48dGQ+IjsNCiAgaWYgKCEkd2luKSB7DQogICAgaWYgKCRuaXhwYXNzd2QpIHsNCiAgICAgIGlmICgkbml4cGFzc3dkID09IDEpIHskbml4cGFzc3dkID0gMDt9DQogICAgICBlY2hvICIqbml4IC9ldGMvcGFzc3dkOjxicj4iOw0KICAgICAgaWYgKCFpc19udW1lcmljKCRuaXhwd2RfcykpIHskbml4cHdkX3MgPSAwO30NCiAgICAgIGlmICghaXNfbnVtZXJpYygkbml4cHdkX2UpKSB7JG5peHB3ZF9lID0gJG5peHB3ZHBlcnBhZ2U7fQ0KICAgICAgZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1cInNlY3VyaXR5XCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJuaXhwYXNzd2RcIiB2YWx1ZT1cIjFcIj48Yj5Gcm9tOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHQ9XCIgbmFtZT1cIm5peHB3ZF9zXCIgdmFsdWU9XCIiLiRuaXhwd2Rfcy4iXCI+Jm5ic3A7PGI+VG86PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJuaXhwd2RfZVwiIHZhbHVlPVwiIi4kbml4cHdkX2UuIlwiPiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIlZpZXdcIj48L2Zvcm0+PGJyPiI7DQogICAgICAkaSA9ICRuaXhwd2RfczsNCiAgICAgIHdoaWxlICgkaSA8ICRuaXhwd2RfZSkgew0KICAgICAgICAkdWlkID0gcG9zaXhfZ2V0cHd1aWQoJGkpOw0KICAgICAgICBpZiAoJHVpZCkgew0KICAgICAgICAgICR1aWRbImRpciJdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWxzJmQ9Ii51cmxlbmNvZGUoJHVpZFsiZGlyIl0pLiJcIj4iLiR1aWRbImRpciJdLiI8L2E+IjsNCiAgICAgICAgICBlY2hvIGpvaW4oIjoiLCR1aWQpLiI8YnI+IjsNCiAgICAgICAgfQ0KICAgICAgICAkaSsrOw0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIHtlY2hvICI8YSBocmVmPVwiIi4kc3VybC4ieD1zZWN1cml0eSZuaXhwYXNzd2Q9MSZkPSIuJHVkLiJcIj48Yj48dT5HZXQgL2V0Yy9wYXNzd2Q8L3U+PC9iPjwvYT4iO30NCiAgfQ0KICBlbHNlIHsNCiAgICAkdiA9ICRfU0VSVkVSWyJXSU5ESVIiXS4iXHJlcGFpclxzYW0iOw0KICAgIGlmIChmaWxlX2dldF9jb250ZW50cygkdikpIHtlY2hvICI8dGQgY29sc3Bhbj0yPjxkaXYgY2xhc3M9ZnhlcnJtc2c+WW91IGNhbid0IGNyYWNrIFdpbmRvd3MgcGFzc3dvcmRzKCIuJHYuIik8L2Rpdj48L3RkPjwvdHI+IjsgfQ0KICAgIGVsc2Uge2VjaG8gIllvdSBjYW4gY3JhY2sgV2luZG93cyBwYXNzd29yZHMuIDxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj1zYW0mZD0iLiRfU0VSVkVSWyJXSU5ESVIiXS4iXFxyZXBhaXImZnQ9ZG93bmxvYWRcIj48dT48Yj5Eb3dubG9hZDwvYj48L3U+PC9hPiwgYW5kIHVzZSBsY3AuY3JhY2srID8uPC90ZD48L3RyPiI7fQ0KICB9DQogIGVjaG8gIjwvdGQ+PC90cj4iOw0KICBlY2hvICI8dHI+PHRkPkNvbmZpZyBGaWxlczwvdGQ+PHRkPiI7DQogIGlmICghJHdpbikgew0KICAgICR2ID0gYXJyYXkoDQogICAgICAgIGFycmF5KCJVc2VyIERvbWFpbnMiLCIvZXRjL3VzZXJkb21haW5zIiksDQogICAgICAgIGFycmF5KCJDcGFuZWwgQ29uZmlnIiwiL3Zhci9jcGFuZWwvYWNjb3VudGluZy5sb2ciKSwNCiAgICAgICAgYXJyYXkoIkFwYWNoZSBDb25maWciLCIvdXNyL2xvY2FsL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiKSwNCiAgICAgICAgYXJyYXkoIkFwYWNoZSBDb25maWciLCIvZXRjL2h0dHBkLmNvbmYiKSwNCiAgICAgICAgYXJyYXkoIlN5c2xvZyBDb25maWciLCIvZXRjL3N5c2xvZy5jb25mIiksDQogICAgICAgIGFycmF5KCJNZXNzYWdlIG9mIFRoZSBEYXkiLCIvZXRjL21vdGQiKSwNCiAgICAgICAgYXJyYXkoIkhvc3RzIiwiL2V0Yy9ob3N0cyIpDQogICAgKTsNCiAgICAkc2VwID0gIi8iOw0KICB9DQogIGVsc2Ugew0KICAgICR3aW5kaXIgPSAkX1NFUlZFUlsiV0lORElSIl07DQogICAgJGV0Y2RpciA9ICR3aW5kaXIgLiAiXHN5c3RlbTMyXGRyaXZlcnNcZXRjXFwiOw0KICAgICR2ID0gYXJyYXkoDQogICAgICAgIGFycmF5KCJIb3N0cyIsJGV0Y2Rpci4iaG9zdHMiKSwNCiAgICAgICAgYXJyYXkoIkxvY2FsIE5ldHdvcmsgTWFwIiwkZXRjZGlyLiJuZXR3b3JrcyIpLA0KICAgICAgICBhcnJheSgiTE0gSG9zdHMiLCRldGNkaXIuImxtaG9zdHMuc2FtIiksDQogICAgKTsNCiAgICAkc2VwID0gIlxcIjsNCiAgfQ0KICBmb3JlYWNoICgkdiBhcyAkc2VjX2Fycikgew0KICAgICRzZWNfZiA9IHN1YnN0cihzdHJyY2hyKCRzZWNfYXJyWzFdLCAkc2VwKSwgMSk7DQogICAgJHNlY19kID0gcnRyaW0oJHNlY19hcnJbMV0sJHNlY19mKTsNCiAgICAkc2VjX2Z1bGwgPSAkc2VjX2QuJHNlY19mOw0KICAgICRzZWNfZCA9IHJ0cmltKCRzZWNfZCwkc2VwKTsNCiAgICBpZiAoZmlsZV9nZXRfY29udGVudHMoJHNlY19mdWxsKSkgew0KICAgICAgZWNobyAiIFsgPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSRzZWNfZiZkPSIudXJsZW5jb2RlKCRzZWNfZCkuIiZmdD10eHRcIj48dT48Yj4iLiRzZWNfYXJyWzBdLiI8L2I+PC91PjwvYT4gXSAiOw0KICAgIH0NCiAgfQ0KICBlY2hvICI8L3RkPjwvdHI+IjsNCg0KICBmdW5jdGlvbiBkaXNwbGF5c2VjaW5mbygkbmFtZSwkdmFsdWUpIHsNCiAgICBpZiAoIWVtcHR5KCR2YWx1ZSkpIHsNCiAgICAgIGVjaG8gIjx0cj48dGQ+Ii4kbmFtZS4iPC90ZD48dGQ+PHByZT4iLndvcmR3cmFwKCR2YWx1ZSwxMDApLiI8L3ByZT48L3RkPjwvdHI+IjsNCiAgICB9DQogIH0NCiAgaWYgKCEkd2luKSB7DQogICAgZGlzcGxheXNlY2luZm8oIk9TIFZlcnNpb24iLG15c2hlbGxleGVjKCJjYXQgL3Byb2MvdmVyc2lvbiIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiS2VybmVsIFZlcnNpb24iLG15c2hlbGxleGVjKCJzeXNjdGwgLWEgfCBncmVwIHZlcnNpb24iKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkRpc3RyaWIgTmFtZSIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjL2lzc3VlIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJEaXN0cmliIE5hbWUgKDIpIixteXNoZWxsZXhlYygiY2F0IC9ldGMvaXNzdWUucnBtbmV3IikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJDUFUgSW5mbyIsbXlzaGVsbGV4ZWMoImNhdCAvcHJvYy9jcHVpbmZvIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJSQU0iLG15c2hlbGxleGVjKCJmcmVlIC1tIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJIREQgU3BhY2UiLG15c2hlbGxleGVjKCJkZiAtaCIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiTGlzdCBvZiBBdHRyaWJ1dGVzIixteXNoZWxsZXhlYygibHNhdHRyIC1hIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJNb3VudCBPcHRpb25zIixteXNoZWxsZXhlYygiY2F0IC9ldGMvZnN0YWIiKSk7DQogICAgZGlzcGxheXNlY2luZm8oImNVUkwgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGN1cmwiKSk7DQoJZGlzcGxheXNlY2luZm8oImx5bnggaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGx5bngiKSk7DQogICAgZGlzcGxheXNlY2luZm8oImxpbmtzIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBsaW5rcyIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiZmV0Y2ggaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGZldGNoIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJHRVQgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIEdFVCIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygicGVybCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggcGVybCIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiV2hlcmUgaXMgQXBhY2hlPyIsbXlzaGVsbGV4ZWMoIndoZXJlaXMgYXBhY2hlIikpOw0KICAgIGRpc3BsYXlzZWNpbmZvKCJXaGVyZSBpcyBwZXJsPyIsbXlzaGVsbGV4ZWMoIndoZXJlaXMgcGVybCIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiTG9jYXRlIHByb2Z0cGQuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBwcm9mdHBkLmNvbmYiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkxvY2F0ZSBodHRwZC5jb25mIixteXNoZWxsZXhlYygibG9jYXRlIGh0dHBkLmNvbmYiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkxvY2F0ZSBteS5jb25mIixteXNoZWxsZXhlYygibG9jYXRlIG15LmNvbmYiKSk7DQogICAgZGlzcGxheXNlY2luZm8oIkxvY2F0ZSBwc3libmMuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBwc3libmMuY29uZiIpKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBkaXNwbGF5c2VjaW5mbygiT1MgVmVyc2lvbiIsbXlzaGVsbGV4ZWMoInZlciIpKTsNCiAgICBkaXNwbGF5c2VjaW5mbygiQWNjb3VudCBTZXR0aW5ncyIsbXlzaGVsbGV4ZWMoIm5ldCBhY2NvdW50cyIpKTsNCiAgfQ0KICBlY2hvICI8L3RhYmxlPlxuIjsNCn0NCg0KaWYgKCR4ID09ICJqdW1wIikgew0KJG5naXBtdWogPSBiYXNlNjRfZGVjb2RlKCJDU2drYzIwZ1BTQnBibWxmWjJWMEtDZHpZV1psWDIxdlpHVW5LU0E5UFNBd0tTQS9JQ1J6YlNBOUlDZHZabVluT2lCa2FXVW9KenhtYjI1MElITnBlbVU5SWpRaUlHTnZiRzl5UFNJak1EQXdNREF3SWlCbVlXTmxQU0pEWVd4cFluSnBJajQ4WWo1RmNuSnZjam9nVTJGbVpWOXRiMlJsSUQwZ1QyNDhMMkkrUEM5bWIyNTBQaWNwT3cwS2MyVjBYM1JwYldWZmJHbHRhWFFvTUNrN0RRcEFKSEJoYzNOM1pDQTlJR1p2Y0dWdUtDY3ZaWFJqTDNCaGMzTjNaQ2NzSjNJbktUc05DbWxtSUNnaEpIQmhjM04zWkNrZ2V5QmthV1VvSnp4bWIyNTBJSE5wZW1VOUlqUWlJR052Ykc5eVBTSWpNREF3TURBd0lpQm1ZV05sUFNKRFlXeHBZbkpwSWo0OFlqNWJMVjBnUlhKeWIzSWdPaUJEYjNWa2JtQjBJRkpsWVdRZ0wyVjBZeTl3WVhOemQyUThMMkkrUEM5bWIyNTBQaWNwT3lCOURRb2tjSFZpSUQwZ1lYSnlZWGtvS1RzTkNpUjFjMlZ5Y3lBOUlHRnljbUY1S0NrN0RRb2tZMjl1WmlBOUlHRnljbUY1S0NrN0RRb2thU0E5SURBN0RRcDNhR2xzWlNnaFptVnZaaWdrY0dGemMzZGtLU2tOQ25zTkNpUnpkSElnUFNCbVoyVjBjeWdrY0dGemMzZGtLVHNOQ21sbUlDZ2thU0ErSURFd01Da05DbnNOQ2lBZ0pIQnZjeUE5SUhOMGNuQnZjeWdrYzNSeUxDYzZKeWs3RFFvZ0lDUjFjMlZ5Ym1GdFpTQTlJSE4xWW5OMGNpZ2tjM1J5TERBc0pIQnZjeWs3RFFvZ0lDUmthWEo2SUQwZ0p5OW9iMjFsTHljdUpIVnpaWEp1WVcxbExpY3ZjSFZpYkdsalgyaDBiV3d2SnpzTkNpQWdhV1lnS0Nna2RYTmxjbTVoYldVZ0lUMGdKeWNwS1EwS0lDQjdEUW9nSUNCcFppQW9hWE5mY21WaFpHRmliR1VvSkdScGNub3BLUTBLSUNBZ2V3MEtJQ0FnSUdGeWNtRjVYM0IxYzJnb0pIVnpaWEp6TENSMWMyVnlibUZ0WlNrN0RRb2dJQ0FnWVhKeVlYbGZjSFZ6YUNna2NIVmlMQ1JrYVhKNktUc05DaUFnSUgwTkNpQWdmUTBLSUNBZ2ZRMEtKR2tyS3pzTkNuME5DbVZqYUc4Z0lseHVJRHhtYjI1MElITnBlbVU5SnpNbklHTnZiRzl5UFNjak1EQTRNRGd3SnlCbVlXTmxQU2REWVd4cFluSnBKejQ4WW5JK1d5MWRQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlXeUJUVkVGU1ZDQmRQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlXeTFkSUNBOFluSStQQzltYjI1MFBseHVJanNOQ21admNtVmhZMmdnS0NSMWMyVnljeUJoY3lBa2RYTmxjaWtOQ25zTkNtVmphRzhnSWp4bWIyNTBJSE5wZW1VOUp6TW5JR052Ykc5eVBTY2paV1V3T0RBNEp5Qm1ZV05sUFNkRFlXeHBZbkpwSno0Z1d5dGRJQzlvYjIxbEx5UjFjMlZ5TDNCMVlteHBZMTlvZEcxc0x6d3ZabTl1ZEQ0OFluSXZQaUk3RFFwOURRcGxZMmh2SUNKY2JpQThabTl1ZENCemFYcGxQU2N6SnlCamIyeHZjajBuSXpBd09EQTRNQ2NnWm1GalpUMG5RMkZzYVdKeWFTYytQR0p5UGxzdFhUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWc2dSa2xPU1ZOSUlGMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWJMVjBnUEdKeVBqd3ZabTl1ZEQ1Y2JpSTdEUXBsWTJodklDSmNiaUE4Wm05dWRDQnphWHBsUFNjeUp5QmpiMnh2Y2owbkl6Z3dNREF3TUNjZ1ptRmpaVDBuUTJGc2FXSnlhU2MrU25WdGNHbHVaeUJUWTJGdWJtVnlJR2x6SUVOdmJYQnNaWFJsWkNFOEwyWnZiblErWEc0aU93PT0iKTsNCmV2YWwgKCRuZ2lwbXVqKTsNCn0NCg0KaWYgKCR4ID09ICJzeW0iKSB7DQoka25pbG15cyA9IGJhc2U2NF9kZWNvZGUoIlFITmxkRjkwYVcxbFgyeHBiV2wwS0RBcE93MEtKSEo0TVNBOUlDZG9kSFJ3T2k4dkp5NGtYMU5GVWxaRlVsc25VMFZTVmtWU1gwNUJUVVVuWFM0a1gxTkZVbFpGVWxzblVrVlJWVVZUVkY5VlVra25YVHNOQ2lSeWVESWdQV1Y0Y0d4dlpHVW9KeThuTENSeWVERWdLVHNOQ2lSeWVERWdQWE4wY2w5eVpYQnNZV05sS0NSeWVESmJZMjkxYm5Rb0pISjRNaWt0TVYwc0p5Y3NKSEo0TVNBcE93MEtEUXBBYld0a2FYSW9KM041YlNjc01EYzNOeWs3RFFva2NuZ3hJQ0E5SUNKUGNIUnBiMjV6SUdGc2JDQmNiaUJFYVhKbFkzUnZjbmxKYm1SbGVDQlRkWGd1YUhSdGJDQmNiaUJCWkdSVWVYQmxJSFJsZUhRdmNHeGhhVzRnTG5Cb2NDQmNiaUJCWkdSSVlXNWtiR1Z5SUhObGNuWmxjaTF3WVhKelpXUWdMbkJvY0NCY2JpQWdRV1JrVkhsd1pTQjBaWGgwTDNCc1lXbHVJQzVvZEcxc0lGeHVJRUZrWkVoaGJtUnNaWElnZEhoMElDNW9kRzFzSUZ4dUlGSmxjWFZwY21VZ1RtOXVaU0JjYmlCVFlYUnBjMlo1SUVGdWVTSTdEUW9rY25neUlEMUFabTl3Wlc0Z0tDZHplVzB2TG1oMFlXTmpaWE56Snl3bmR5Y3BPdzBLWm5keWFYUmxLQ1J5ZURJZ0xDUnllREVwT3cwS1FITjViV3hwYm1zb0p5OG5MQ2R6ZVcwdmNtOXZkQ2NwT3cwS2FXWW9hWE56WlhRb0pGOVNSVkZWUlZOVVd5ZDRKMTBwS1EwS2V3MEtjM2RwZEdOb0lDZ2tYMUpGVVZWRlUxUmJKM2duWFNrTkNuc05DbU5oYzJVZ0ozTjViU2M2RFFva2NuZzBJRDBnUUdacGJHVW9KeTlsZEdNdmJtRnRaV1F1WTI5dVppY3BPdzBLYVdZb0lTUnllRFFwRFFwN0RRcGthV1VnS0NJZ1kyRnVKM1FnY21WaFpDQXZaWFJqTDI1aGJXVmtMbU52Ym1ZaUtUc05DbjBOQ21Wc2MyVU5DbnNOQ21WamFHOGdJanhrYVhZZ1kyeGhjM005SjNSdGNDYytQSFJoWW14bElHRnNhV2R1UFNkalpXNTBaWEluSUhkcFpIUm9QU2MwTUNVblBqeDBaRDVFYjIxaGFXNXpQQzkwWkQ0OGRHUStWWE5sY25NOEwzUmtQangwWkQ1VGVXMXNhVzVySUR3dmRHUStJanNOQ21admNtVmhZMmdvSkhKNE5DQmhjeUFrY25nMUtYc05DbWxtS0dWeVpXZHBLQ2Q2YjI1bEp5d2tjbmcxS1NsN0RRcHdjbVZuWDIxaGRHTm9YMkZzYkNnbkkzcHZibVVnSWlndUtpa2lJeWNzSkhKNE5Td2tjbmcyS1RzTkNtWnNkWE5vS0NrN0RRcHBaaWh6ZEhKc1pXNG9kSEpwYlNna2NuZzJXekZkV3pCZEtTa2dQaklwZXcwS0pISjROeUE5SUhCdmMybDRYMmRsZEhCM2RXbGtLRUJtYVd4bGIzZHVaWElvSnk5bGRHTXZkbUZzYVdGelpYTXZKeTRrY25nMld6RmRXekJkS1NrN0RRb2tjbmc0SUQwZ0pISjROMXNuYm1GdFpTZGRJRHNOQ2tCemVXMXNhVzVyS0Njdkp5d25jM2x0TDNKdmIzUW5LVHNOQ2lSeWVEZ2dQU0FrY25nMld6RmRXekJkT3cwS0pISjRPU0E5SUNkY0xtbHlKenNOQ2lSeWVERXdJRDBnSjF3dWFXd25PdzBLYVdZZ0tHVnlaV2RwS0NJa2NuZzVJaXdrY25nMld6RmRXekJkS1NCdmNpQmxjbVZuYVNnaUpISjRNVEFpTENSeWVEWmJNVjFiTUYwcElDa05DbnNOQ2lSeWVEZ2dQU0FpUEdScGRpQnpkSGxzWlQwbklHTnZiRzl5T2lBalJrWXdNREF3SURzZ2RHVjRkQzF6YUdGa2IzYzZJREJ3ZUNBd2NIZ2dNWEI0SUhKbFpEc2dKejRpTGlSeWVEWmJNVjFiTUYwdUp6d3ZaR2wyUGljN0RRcDlEUXBsWTJodklDSU5DangwY2o0TkNnMEtQSFJrUGcwS1BHUnBkaUJqYkdGemN6MG5aRzl0Sno0OFlTQjBZWEpuWlhROUoxOWliR0Z1YXljZ2FISmxaajFvZEhSd09pOHZkM2QzTGlJdUpISjRObHN4WFZzd1hTNG5MejRuTGlSeWVEZ3VKeUE4TDJFK0lEd3ZaR2wyUGcwS1BDOTBaRDROQ2cwS0RRbzhkR1ErRFFvbkxpUnllRGRiSjI1aGJXVW5YUzRpRFFvOEwzUmtQZzBLRFFvOGRHUStEUW84WVNCb2NtVm1QU2R6ZVcwdmNtOXZkQzlvYjIxbEx5SXVKSEo0TjFzbmJtRnRaU2RkTGlJdmNIVmliR2xqWDJoMGJXd25JSFJoY21kbGREMG5YMkpzWVc1ckp6NXplVzFzYVc1cklEd3ZZVDROQ2p3dmRHUStEUW9OQ2p3dmRISStQQzlrYVhZK0lDSTdEUXBtYkhWemFDZ3BPdzBLZlEwS2ZRMEtmUTBLZlEwS2ZRMEtmUT09Iik7DQpldmFsICgka25pbG15cyk7DQp9DQoNCmlmICgkeCA9PSAibWtmaWxlIikgew0KaWYgKCRta2ZpbGUgIT0gJGQpIHsNCiAgaWYgKGZpbGVfZXhpc3RzKCRta2ZpbGUpKSB7ZWNobyAiPGI+TWFrZSBGaWxlIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2ZpbGUpLiJcIjwvYj46IG9iamVjdCBhbHJlYWR5IGV4aXN0cyEiO30NCiAgZWxzZWlmICghZm9wZW4oJG1rZmlsZSwidyIpKSB7ZWNobyAiPGI+TWFrZSBGaWxlIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2ZpbGUpLiJcIjwvYj46IGFjY2VzcyBkZW5pZWQhIjt9DQogIGVsc2UgeyR4ID0gImYiOyAkZCA9IGRpcm5hbWUoJG1rZmlsZSk7IGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30gJGYgPSBiYXNlbmFtZSgkbWtmaWxlKTt9DQp9DQplbHNlIHskeCA9ICRkc3BhY3QgPSAibHMiO30NCg0KfQ0KaWYgKCR4ID09ICJjaG1vZCIpIHsNCiAgJG1vZGUgPSBmaWxlcGVybXMoJGQuJGYpOw0KICBpZiAoISRtb2RlKSB7ZWNobyAiPGI+Q2hhbmdlIGZpbGUtbW9kZSB3aXRoIGVycm9yOjwvYj4gY2FuJ3QgZ2V0IGN1cnJlbnQgdmFsdWUuIjt9DQogIGVsc2Ugew0KICAgICRmb3JtID0gVFJVRTsNCiAgICBpZiAoJGNobW9kX3N1Ym1pdCkNCiAgew0KICAgJG9jdGV0ID0gIjAiLmJhc2VfY29udmVydCgoJGNobW9kX29bInIiXT8xOjApLigkY2htb2Rfb1sidyJdPzE6MCkuKCRjaG1vZF9vWyJ4Il0/MTowKS4oJGNobW9kX2dbInIiXT8xOjApLigkY2htb2RfZ1sidyJdPzE6MCkuKCRjaG1vZF9nWyJ4Il0/MTowKS4oJGNobW9kX3dbInIiXT8xOjApLigkY2htb2Rfd1sidyJdPzE6MCkuKCRjaG1vZF93WyJ4Il0/MTowKSwyLDgpOw0KICAgaWYgKGNobW9kKCRkLiRmLCRvY3RldCkpIHskeCA9ICJscyI7ICRmb3JtID0gRkFMU0U7ICRlcnIgPSAiIjt9DQogICBlbHNlIHskZXJyID0gIkNhbid0IGNobW9kIHRvICIuJG9jdGV0LiIuIjt9DQogIH0NCiAgaWYgKCRmb3JtKQ0KICB7DQogICAkcGVybXMgPSBwYXJzZV9wZXJtcygkbW9kZSk7DQogICBlY2hvICI8Yj5DaGFuZ2luZyBmaWxlLW1vZGUgKCIuJGQuJGYuIiksICIudmlld19wZXJtc19jb2xvcigkZC4kZikuIiAoIi5zdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkZC4kZikpLC00LDQpLiIpPC9iPjxicj4iLigkZXJyPyI8Yj5FcnJvcjo8L2I+ICIuJGVycjoiIikuIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRmKS4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1jaG1vZD48dGFibGUgYWxpZ249bGVmdCB3aWR0aD0zMDAgYm9yZGVyPTAgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz01Pjx0cj48dGQ+PGI+T3duZXI8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX29bcl0gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9Y2htb2Rfb1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJvIl1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfb1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJvIl1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L3RkPjx0ZD48Yj5Hcm91cDwvYj48YnI+PGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1tyXSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bInIiXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1JlYWQ8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9nW3ddIHZhbHVlPTEiLigkcGVybXNbImciXVsidyJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7V3JpdGU8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9nW3hdIHZhbHVlPTEiLigkcGVybXNbImciXVsieCJdPyIgY2hlY2tlZCI6IiIpLiI+ZVhlY3V0ZTwvZm9udD48L3RkPjx0ZD48Yj5Xb3JsZDwvYj48YnI+PGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1tyXSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bInIiXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1JlYWQ8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF93W3ddIHZhbHVlPTEiLigkcGVybXNbInciXVsidyJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7V3JpdGU8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF93W3hdIHZhbHVlPTEiLigkcGVybXNbInciXVsieCJdPyIgY2hlY2tlZCI6IiIpLiI+ZVhlY3V0ZTwvZm9udD48L3RkPjwvdHI+PHRyPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1jaG1vZF9zdWJtaXQgdmFsdWU9XCJTYXZlXCI+PC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPiI7DQogIH0NCn0NCn0NCmlmICgkeCA9PSAidXBsb2FkIikgew0KICAkdXBsb2FkbWVzcyA9ICIiOw0KICAkdXBsb2FkcGF0aCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdXBsb2FkcGF0aCk7DQogIGlmIChlbXB0eSgkdXBsb2FkcGF0aCkpIHskdXBsb2FkcGF0aCA9ICRkO30NCiAgZWxzZWlmIChzdWJzdHIoJHVwbG9hZHBhdGgsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdXBsb2FkcGF0aCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgaWYgKCFlbXB0eSgkc3VibWl0KSkgew0KICAgIGdsb2JhbCAkX0ZJTEVTOw0KICAgICR1cGxvYWRmaWxlID0gJF9GSUxFU1sidXBsb2FkZmlsZSJdOw0KICAgIGlmICghZW1wdHkoJHVwbG9hZGZpbGVbInRtcF9uYW1lIl0pKSB7DQogICAgICBpZiAoZW1wdHkoJHVwbG9hZGZpbGVuYW1lKSkgeyRkZXN0aW4gPSAkdXBsb2FkZmlsZVsibmFtZSJdO30NCiAgICAgIGVsc2UgeyRkZXN0aW4gPSAkdXNlcmZpbGVuYW1lO30NCiAgICAgIGlmICghbW92ZV91cGxvYWRlZF9maWxlKCR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdLCR1cGxvYWRwYXRoLiRkZXN0aW4pKSB7DQogICAgICAgICR1cGxvYWRtZXNzIC49ICJFcnJvciB1cGxvYWRpbmcgZmlsZSAiLiR1cGxvYWRmaWxlWyJuYW1lIl0uIiAoY2FuJ3QgY29weSBcIiIuJHVwbG9hZGZpbGVbInRtcF9uYW1lIl0uIlwiIHRvIFwiIi4kdXBsb2FkcGF0aC4kZGVzdGluLiJcIiE8YnI+IjsNCiAgICAgIH0NCiAgICAgIGVsc2UgeyAkdXBsb2FkbWVzcyAuPSAiRmlsZSB1cGxvYWRlZCBzdWNjZXNzZnVsbHkhPGJyPiIuJHVwbG9hZHBhdGguJGRlc3RpbjsgfQ0KICAgIH0NCiAgICBlbHNlaWYgKCFlbXB0eSgkdXBsb2FkdXJsKSkgew0KICAgICAgaWYgKCFlbXB0eSgkdXBsb2FkZmlsZW5hbWUpKSB7JGRlc3RpbiA9ICR1cGxvYWRmaWxlbmFtZTt9DQogICAgICBlbHNlIHsNCiAgICAgICAgJGRlc3RpbiA9IGV4cGxvZGUoIi8iLCRkZXN0aW4pOw0KICAgICAgICAkZGVzdGluID0gJGRlc3Rpbltjb3VudCgkZGVzdGluKS0xXTsNCiAgICAgICAgaWYgKGVtcHR5KCRkZXN0aW4pKSB7DQogICAgICAgICAgJGkgPSAwOw0KICAgICAgICAgICRiID0gIiI7DQogICAgICAgICAgd2hpbGUoZmlsZV9leGlzdHMoJHVwbG9hZHBhdGguJGRlc3RpbikpIHsNCiAgICAgICAgICAgIGlmICgkaSA+IDApIHskYiA9ICJfIi4kaTt9DQogICAgICAgICAgICAkZGVzdGluID0gInVwbG9hZCIuJGI7DQogICAgICAgICAgICAkaSsrOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgaWYgKCghZXJlZ2koImh0dHA6Ly8iLCR1cGxvYWR1cmwpKSBhbmQgKCFlcmVnaSgiaHR0cHM6Ly8iLCR1cGxvYWR1cmwpKSBhbmQgKCFlcmVnaSgiZnRwOi8vIiwkdXBsb2FkdXJsKSkpIHtlY2hvICI8Yj5JbmNvcnJlY3QgVVJMITwvYj4iO30NCiAgICAgIGVsc2Ugew0KICAgICAgICAkc3QgPSBnZXRtaWNyb3RpbWUoKTsNCiAgICAgICAgJGNvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJHVwbG9hZHVybCk7DQogICAgICAgICRkdCA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRzdCw0KTsNCiAgICAgICAgaWYgKCEkY29udGVudCkgeyR1cGxvYWRtZXNzIC49ICAiQ2FuJ3QgZG93bmxvYWQgZmlsZSEiO30NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgaWYgKCRmaWxlc3RlYWx0aCkgeyRzdGF0ID0gc3RhdCgkdXBsb2FkcGF0aC4kZGVzdGluKTt9DQogICAgICAgICAgJGZwID0gZm9wZW4oJHVwbG9hZHBhdGguJGRlc3RpbiwidyIpOw0KICAgICAgICAgIGlmICghJGZwKSB7JHVwbG9hZG1lc3MgLj0gIkVycm9yIHdyaXRpbmcgdG8gZmlsZSAiLmh0bWxzcGVjaWFsY2hhcnMoJGRlc3RpbikuIiE8YnI+Ijt9DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBmd3JpdGUoJGZwLCRjb250ZW50LHN0cmxlbigkY29udGVudCkpOw0KICAgICAgICAgICAgZmNsb3NlKCRmcCk7DQogICAgICAgICAgICBpZiAoJGZpbGVzdGVhbHRoKSB7dG91Y2goJHVwbG9hZHBhdGguJGRlc3Rpbiwkc3RhdFs5XSwkc3RhdFs4XSk7fQ0KICAgICAgICAgICAgJHVwbG9hZG1lc3MgLj0gIkZpbGUgc2F2ZWQgZnJvbSAiLiR1cGxvYWR1cmwuIiAhIjsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgZWxzZSB7IGVjaG8gIk5vIGZpbGUgdG8gdXBsb2FkISI7IH0NCiAgfQ0KICBpZiAoJG1pbmlmb3JtKSB7DQogICAgZWNobyAiPGI+Ii4kdXBsb2FkbWVzcy4iPC9iPiI7DQogICAgJHggPSAibHMiOw0KICB9DQogIGVsc2Ugew0KICAgIGVjaG8gIjx0YWJsZT48dHI+PHRkIGNvbHNwYW49MiBjbGFzcz1iYXJoZWFkZXI+Ii4NCiAgICAgICAgICIuOiBGaWxlIFVwbG9hZCA6LjwvdGQ+Ii4NCiAgICAgICAgICI8dGQgY29sc3Bhbj0yPiIuJHVwbG9hZG1lc3MuIjwvdGQ+PC90cj4iLg0KICAgICAgICAgIjx0cj48dGQ+PGZvcm0gZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBhY3Rpb249XCIiLiRzdXJsLiJ4PXVwbG9hZCZkPSIudXJsZW5jb2RlKCRkKS4iXCIgbWV0aG9kPVBPU1Q+Ii4NCiAgICAgICAgICJGcm9tIFlvdXIgQ29tcHV0ZXI6PC90ZD48dGQ+PGlucHV0IG5hbWU9XCJ1cGxvYWRmaWxlXCIgdHlwZT1cImZpbGVcIj48L3RkPjwvdHI+Ii4NCiAgICAgICAgICI8dHI+PHRkPkZyb20gVVJMOjwvdGQ+PHRkPjxpbnB1dCBuYW1lPVwidXBsb2FkdXJsXCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdXBsb2FkdXJsKS4iXCIgc2l6ZT1cIjcwXCI+PC90ZD48L3RyPiIuDQogICAgICAgICAiPHRyPjx0ZD5UYXJnZXQgRGlyZWN0b3J5OjwvdGQ+PHRkPjxpbnB1dCBuYW1lPVwidXBsb2FkcGF0aFwiIHNpemU9XCI3MFwiIHZhbHVlPVwiIi4kZGlzcGQuIlwiPjwvdGQ+PC90cj4iLg0KICAgICAgICAgIjx0cj48dGQ+VGFyZ2V0IEZpbGUgTmFtZTo8L3RkPjx0ZD48aW5wdXQgbmFtZT11cGxvYWRmaWxlbmFtZSBzaXplPTI1PjwvdGQ+PC90cj4iLg0KICAgICAgICAgIjx0cj48dGQ+PC90ZD48dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT11cGxvYWRhdXRvbmFtZSB2YWx1ZT0xIGlkPWRmND4gQ29udmVydCBmaWxlIG5hbWUgdG8gbG93ZXJjYXNlPC90ZD48L3RyPiIuDQogICAgICAgICAiPHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJVcGxvYWRcIj4iLg0KICAgICAgICAgIjwvZm9ybT48L3RkPjwvdHI+PC90YWJsZT4iOw0KICB9DQp9DQppZiAoJHggPT0gImRlbGV0ZSIpIHsNCiAgJGRlbGVyciA9ICIiOw0KICBmb3JlYWNoICgkYWN0Ym94IGFzICR2KSB7DQogICAgJHJlc3VsdCA9IEZBTFNFOw0KICAgICRyZXN1bHQgPSBmc19ybW9iaigkdik7DQogICAgaWYgKCEkcmVzdWx0KSB7JGRlbGVyciAuPSAiQ2FuJ3QgZGVsZXRlICIuaHRtbHNwZWNpYWxjaGFycygkdikuIjxicj4iO30NCiAgfQ0KICBpZiAoIWVtcHR5KCRkZWxlcnIpKSB7ZWNobyAiPGI+RGVsZXRpbmcgd2l0aCBlcnJvcnM6PC9iPjxicj4iLiRkZWxlcnI7fQ0KICAkeCA9ICJscyI7DQp9DQppZiAoISR1c2Vmc2J1ZmYpIHsNCiAgaWYgKCgkeCA9PSAicGFzdGUiKSBvciAoJHggPT0gImNvcHkiKSBvciAoJHggPT0gImN1dCIpIG9yICgkeCA9PSAidW5zZWxlY3QiKSkge2VjaG8gIjxjZW50ZXI+PGI+U29ycnksIGJ1ZmZlciBpcyBkaXNhYmxlZC4gRm9yIGVuYWJsZSwgc2V0IGRpcmVjdGl2ZSBcIlwkdXNlZnNidWZmXCIgYXMgVFJVRS48L2NlbnRlcj4iO30NCn0NCmVsc2Ugew0KICBpZiAoJHggPT0gImNvcHkiKSB7JGVyciA9ICIiOyAkc2Vzc19kYXRhWyJjb3B5Il0gPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjb3B5Il0sJGFjdGJveCk7IGNhX3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkeCA9ICJscyI7IH0NCiAgZWxzZWlmICgkeCA9PSAiY3V0IikgeyRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY3V0Il0sJGFjdGJveCk7IGNhX3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkeCA9ICJscyI7fQ0KICBlbHNlaWYgKCR4ID09ICJ1bnNlbGVjdCIpIHtmb3JlYWNoICgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCR2LCRhY3Rib3gpKSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fX0gZm9yZWFjaCAoJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCR2LCRhY3Rib3gpKSB7dW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTt9fSBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsgJHggPSAibHMiO30NCiAgaWYgKCRhY3RlbXB0eWJ1ZmYpIHskc2Vzc19kYXRhWyJjb3B5Il0gPSAkc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5KCk7IGNhX3Nlc3NfcHV0KCRzZXNzX2RhdGEpO30NCiAgZWxzZWlmICgkYWN0cGFzdGVidWZmKSB7DQogICAgJHBzdGVyciA9ICIiOw0KICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikgew0KICAgICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgICAgaWYgKCFmc19jb3B5X29iaigkdiwkdG8pKSB7JHBzdGVyciAuPSAiQ2FuJ3QgY29weSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9DQogICAgICBpZiAoJGNvcHlfdW5zZXQpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9DQogICAgfQ0KICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7DQogICAgICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7DQogICAgICBpZiAoIWZzX21vdmVfb2JqKCR2LCR0bykpIHskcHN0ZXJyIC49ICJDYW4ndCBtb3ZlICIuJHYuIiB0byAiLiR0by4iITxicj4iO30NCiAgICAgIHVuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7DQogICAgfQ0KICAgIGNhX3Nlc3NfcHV0KCRzZXNzX2RhdGEpOw0KICAgIGlmICghZW1wdHkoJHBzdGVycikpIHtlY2hvICI8Yj5QYXN0aW5nIHdpdGggZXJyb3JzOjwvYj48YnI+Ii4kcHN0ZXJyO30NCiAgICAkeCA9ICJscyI7DQogIH0NCiAgZWxzZWlmICgkYWN0YXJjYnVmZikgew0KICAgICRhcmNlcnIgPSAiIjsNCiAgICBpZiAoc3Vic3RyKCRhY3RhcmNidWZmX3BhdGgsLTcsNykgPT0gIi50YXIuZ3oiKSB7JGV4dCA9ICIudGFyLmd6Ijt9DQogICAgZWxzZSB7JGV4dCA9ICIudGFyLmd6Ijt9DQogICAgaWYgKCRleHQgPT0gIi50YXIuZ3oiKSB7JGNtZGxpbmUgPSAidGFyIGNmenYiO30NCiAgICAkY21kbGluZSAuPSAiICIuJGFjdGFyY2J1ZmZfcGF0aDsNCiAgICAkb2JqZWN0cyA9IGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImNvcHkiXSwkc2Vzc19kYXRhWyJjdXQiXSk7DQogICAgZm9yZWFjaCgkb2JqZWN0cyBhcyAkdikgew0KICAgICAgJHYgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHYpOw0KICAgICAgaWYgKHN1YnN0cigkdiwwLHN0cmxlbigkZCkpID09ICRkKSB7JHYgPSBiYXNlbmFtZSgkdik7fQ0KICAgICAgaWYgKGlzX2RpcigkdikpIHsNCiAgICAgICAgaWYgKHN1YnN0cigkdiwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR2IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICAgICAkdiAuPSAiKiI7DQogICAgICB9DQogICAgICAkY21kbGluZSAuPSAiICIuJHY7DQogICAgfQ0KICAgICR0bXAgPSByZWFscGF0aCgiLiIpOw0KICAgIGNoZGlyKCRkKTsNCiAgICAkcmV0ID0gbXlzaGVsbGV4ZWMoJGNtZGxpbmUpOw0KICAgIGNoZGlyKCR0bXApOw0KICAgIGlmIChlbXB0eSgkcmV0KSkgeyRhcmNlcnIgLj0gIkNhbid0IGNhbGwgYXJjaGl2YXRvciAoIi5odG1sc3BlY2lhbGNoYXJzKHN0cjJtaW5pKCRjbWRsaW5lLDYwKSkuIikhPGJyPiI7fQ0KICAgICRyZXQgPSBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkcmV0KTsNCiAgICAkcmV0ID0gZXhwbG9kZSgiXG4iLCRyZXQpOw0KICAgIGlmICgkY29weV91bnNldCkge2ZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO319DQogICAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHsNCiAgICAgIGlmIChpbl9hcnJheSgkdiwkcmV0KSkge2ZzX3Jtb2JqKCR2KTt9DQogICAgICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOw0KICAgIH0NCiAgICBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsNCiAgICBpZiAoIWVtcHR5KCRhcmNlcnIpKSB7ZWNobyAiPGI+QXJjaGl2YXRpb24gZXJyb3JzOjwvYj48YnI+Ii4kYXJjZXJyO30NCiAgICAkeCA9ICJscyI7DQogIH0NCiAgZWxzZWlmICgkYWN0cGFzdGVidWZmKSB7DQogICAgJHBzdGVyciA9ICIiOw0KICAgIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikgew0KICAgICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgICAgaWYgKCFmc19jb3B5X29iaigkdiwkZCkpIHskcHN0ZXJyIC49ICJDYW4ndCBjb3B5ICIuJHYuIiB0byAiLiR0by4iITxicj4iO30NCiAgICAgIGlmICgkY29weV91bnNldCkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO30NCiAgICB9DQogICAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHsNCiAgICAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsNCiAgICAgIGlmICghZnNfbW92ZV9vYmooJHYsJGQpKSB7JHBzdGVyciAuPSAiQ2FuJ3QgbW92ZSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9DQogICAgICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOw0KICAgIH0NCiAgICBjYV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsNCiAgICBpZiAoIWVtcHR5KCRwc3RlcnIpKSB7ZWNobyAiPGI+UGFzdGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJHBzdGVycjt9DQogICAgJHggPSAibHMiOw0KICB9DQp9DQppZiAoJHggPT0gImNtZCIpIHsNCiAgQGNoZGlyKCRjaGRpcik7DQogIGlmICghZW1wdHkoJHN1Ym1pdCkpIHsNCiAgICBlY2hvICI8ZGl2IGNsYXNzPWJhcmhlYWRlcj4uOiBSZXN1bHQgb2YgQ29tbWFuZCBFeGVjdXRpb24gOi48L2Rpdj4iOw0KICAgICRvbGRkaXIgPSByZWFscGF0aCgiLiIpOw0KICAgIEBjaGRpcigkZCk7DQogICAgJHJldCA9IG15c2hlbGxleGVjKCRjbWQpOw0KICAgICRyZXQgPSBjb252ZXJ0X2N5cl9zdHJpbmcoJHJldCwiZCIsInciKTsNCiAgICBpZiAoJGNtZF90eHQpIHsNCiAgICAgICRyb3dzID0gY291bnQoZXhwbG9kZSgiXHJcbiIsJHJldCkpKzE7DQogICAgICBpZiAoJHJvd3MgPCAxMCkgeyRyb3dzID0gMTA7IH0NCiAgICAgIGlmICgkbXNpZSkgeyAkY29scyA9IDExMzsgfQ0KICAgICAgZWxzZSB7ICRjb2xzID0gMTE3O30NCiAgICAgIGVjaG8gIjxkaXYgYWxpZ249bGVmdD48cHJlPiIuaHRtbHNwZWNpYWxjaGFycygkcmV0KS4iPC9wcmU+PC9kaXY+IjsNCiAgICB9DQogICAgZWxzZSB7ZWNobyAkcmV0LiI8YnI+Ijt9DQogICAgQGNoZGlyKCRvbGRkaXIpOw0KICB9DQogIGVsc2Ugew0KICAgIGVjaG8gIjxiPkNvbW1hbmQgRXhlY3V0aW9uPC9iPiI7DQogICAgaWYgKGVtcHR5KCRjbWRfdHh0KSkgeyRjbWRfdHh0ID0gVFJVRTt9DQogIH0NCn0NCmlmICgkeCA9PSAibHMiKSB7DQogIGlmIChjb3VudCgkbHNfYXJyKSA+IDApIHsgJGxpc3QgPSAkbHNfYXJyOyB9DQogIGVsc2Ugew0KICAgICRsaXN0ID0gYXJyYXkoKTsNCiAgICBpZiAoJGggPSBAb3BlbmRpcigkZCkpIHsNCiAgICAgIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKSB7JGxpc3RbXSA9ICRkLiRvO30NCiAgICAgIGNsb3NlZGlyKCRoKTsNCiAgICB9DQogIH0NCiAgaWYgKGNvdW50KCRsaXN0KSA9PSAwKSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+Q2FuJ3Qgb3BlbiBmb2xkZXIgKCIuaHRtbHNwZWNpYWxjaGFycygkZCkuIikhPC9kaXY+Ijt9DQogIGVsc2Ugew0KICAgICRvYmplY3RzID0gYXJyYXkoKTsNCiAgICAkdmQgPSAiZiI7IA0KICAgIGlmICgkdmQgPT0gImYiKSB7DQogICAgICAkb2JqZWN0c1siaGVhZCJdID0gYXJyYXkoKTsNCiAgICAgICRvYmplY3RzWyJmb2xkZXJzIl0gPSBhcnJheSgpOw0KICAgICAgJG9iamVjdHNbImxpbmtzIl0gPSBhcnJheSgpOw0KICAgICAgJG9iamVjdHNbImZpbGVzIl0gPSBhcnJheSgpOw0KICAgICAgZm9yZWFjaCAoJGxpc3QgYXMgJHYpIHsNCiAgICAgICAgJG8gPSBiYXNlbmFtZSgkdik7DQogICAgICAgICRyb3cgPSBhcnJheSgpOw0KICAgICAgICBpZiAoJG8gPT0gIi4iKSB7JHJvd1tdID0gJGQuJG87ICRyb3dbXSA9ICJDVVJESVIiO30NCiAgICAgICAgZWxzZWlmICgkbyA9PSAiLi4iKSB7JHJvd1tdID0gJGQuJG87ICRyb3dbXSA9ICJVUERJUiI7fQ0KICAgICAgICBlbHNlaWYgKGlzX2RpcigkdikpIHsNCiAgICAgICAgICBpZiAoaXNfbGluaygkdikpIHskdHlwZSA9ICJMSU5LIjt9DQogICAgICAgICAgZWxzZSB7JHR5cGUgPSAiRElSIjt9DQogICAgICAgICAgJHJvd1tdID0gJHY7DQogICAgICAgICAgJHJvd1tdID0gJHR5cGU7DQogICAgICAgIH0NCiAgICAgICAgZWxzZWlmKGlzX2ZpbGUoJHYpKSB7JHJvd1tdID0gJHY7ICRyb3dbXSA9IGZpbGVzaXplKCR2KTt9DQogICAgICAgICRyb3dbXSA9IGZpbGVtdGltZSgkdik7DQogICAgICAgIGlmICghJHdpbikgew0KICAgICAgICAgICRvdyA9IHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigkdikpOw0KICAgICAgICAgICRnciA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkdikpOw0KICAgICAgICAgICRyb3dbXSA9ICgkb3dbIm5hbWUiXT8kb3dbIm5hbWUiXTpmaWxlb3duZXIoJHYpKS4iLyIuKCRnclsibmFtZSJdPyRnclsibmFtZSJdOmZpbGVncm91cCgkdikpOw0KICAgICAgICB9DQogICAgICAgICRyb3dbXSA9IGZpbGVwZXJtcygkdik7DQogICAgICAgIGlmICgoJG8gPT0gIi4iKSBvciAoJG8gPT0gIi4uIikpIHskb2JqZWN0c1siaGVhZCJdW10gPSAkcm93O30NCiAgICAgICAgZWxzZWlmIChpc19saW5rKCR2KSkgeyRvYmplY3RzWyJsaW5rcyJdW10gPSAkcm93O30NCiAgICAgICAgZWxzZWlmIChpc19kaXIoJHYpKSB7JG9iamVjdHNbImZvbGRlcnMiXVtdID0gJHJvdzt9DQogICAgICAgIGVsc2VpZiAoaXNfZmlsZSgkdikpIHskb2JqZWN0c1siZmlsZXMiXVtdID0gJHJvdzt9DQogICAgICAgICRpKys7DQogICAgICB9DQogICAgICAkcm93ID0gYXJyYXkoKTsNCiAgICAgICRyb3dbXSA9ICI8Yj5OYW1lPC9iPiI7DQogICAgICAkcm93W10gPSAiPGI+U2l6ZTwvYj4iOw0KICAgICAgJHJvd1tdID0gIjxiPkRhdGUgTW9kaWZpZWQ8L2I+IjsNCiAgICAgIGlmICghJHdpbikgeyRyb3dbXSA9ICI8Yj5Pd25lci9Hcm91cDwvYj4iO30NCiAgICAgICRyb3dbXSA9ICI8Yj5QZXJtczwvYj4iOw0KICAgICAgJHJvd1tdID0gIjxiPkFjdGlvbjwvYj4iOw0KICAgICAgJHBhcnNlc29ydCA9IHBhcnNlc29ydCgkc29ydCk7DQogICAgICAkc29ydCA9ICRwYXJzZXNvcnRbMF0uJHBhcnNlc29ydFsxXTsNCiAgICAgICRrID0gJHBhcnNlc29ydFswXTsNCiAgICAgIGlmICgkcGFyc2Vzb3J0WzFdICE9ICJhIikgeyRwYXJzZXNvcnRbMV0gPSAiZCI7fQ0KICAgICAgJHkgPSAiIDxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImc29ydD0iLiRrLigkcGFyc2Vzb3J0WzFdID09ICJhIj8iZCI6ImEiKS4iXCI+IjsNCiAgICAgICR5IC49ICI8aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0XyIuKCRzb3J0WzFdID09ICJhIj8iYXNjIjoiZGVzYyIpLiJcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGFsdD1cIiIuKCRwYXJzZXNvcnRbMV0gPT0gImEiPyJBc2MuIjoiRGVzYyIpLiJcIiBib3JkZXI9XCIwXCI+PC9hPiI7DQogICAgICAkcm93WyRrXSAuPSAkeTsNCiAgICAgIGZvcigkaT0wOyRpPGNvdW50KCRyb3cpLTE7JGkrKykgew0KICAgICAgICBpZiAoJGkgIT0gJGspIHskcm93WyRpXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnNvcnQ9Ii4kaS4kcGFyc2Vzb3J0WzFdLiJcIj4iLiRyb3dbJGldLiI8L2E+Ijt9DQogICAgICB9DQogICAgICAkdiA9ICRwYXJzZXNvcnRbMF07DQogICAgICB1c29ydCgkb2JqZWN0c1siZm9sZGVycyJdLCAidGFic29ydCIpOw0KICAgICAgdXNvcnQoJG9iamVjdHNbImxpbmtzIl0sICJ0YWJzb3J0Iik7DQogICAgICB1c29ydCgkb2JqZWN0c1siZmlsZXMiXSwgInRhYnNvcnQiKTsNCiAgICAgIGlmICgkcGFyc2Vzb3J0WzFdID09ICJkIikgew0KICAgICAgICAkb2JqZWN0c1siZm9sZGVycyJdID0gYXJyYXlfcmV2ZXJzZSgkb2JqZWN0c1siZm9sZGVycyJdKTsNCiAgICAgICAgJG9iamVjdHNbImZpbGVzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzWyJmaWxlcyJdKTsNCiAgICAgIH0NCiAgICAgICRvYmplY3RzID0gYXJyYXlfbWVyZ2UoJG9iamVjdHNbImhlYWQiXSwkb2JqZWN0c1siZm9sZGVycyJdLCRvYmplY3RzWyJsaW5rcyJdLCRvYmplY3RzWyJmaWxlcyJdKTsNCiAgICAgICR0YWIgPSBhcnJheSgpOw0KICAgICAgJHRhYlsiY29scyJdID0gYXJyYXkoJHJvdyk7DQogICAgICAkdGFiWyJoZWFkIl0gPSBhcnJheSgpOw0KICAgICAgJHRhYlsiZm9sZGVycyJdID0gYXJyYXkoKTsNCiAgICAgICR0YWJbImxpbmtzIl0gPSBhcnJheSgpOw0KICAgICAgJHRhYlsiZmlsZXMiXSA9IGFycmF5KCk7DQogICAgICAkaSA9IDA7DQogICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkYSkgew0KICAgICAgICAkdiA9ICRhWzBdOw0KICAgICAgICAkbyA9IGJhc2VuYW1lKCR2KTsNCiAgICAgICAgJGRpciA9IGRpcm5hbWUoJHYpOw0KICAgICAgICBpZiAoJGRpc3BfZnVsbHBhdGgpIHskZGlzcHBhdGggPSAkdjt9DQogICAgICAgIGVsc2UgeyRkaXNwcGF0aCA9ICRvO30NCiAgICAgICAgJGRpc3BwYXRoID0gc3RyMm1pbmkoJGRpc3BwYXRoLDYwKTsNCiAgICAgICAgaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImN1dCJdKSkgeyRkaXNwcGF0aCA9ICI8c3RyaWtlPiIuJGRpc3BwYXRoLiI8L3N0cmlrZT4iO30NCiAgICAgICAgZWxzZWlmIChpbl9hcnJheSgkdiwkc2Vzc19kYXRhWyJjb3B5Il0pKSB7JGRpc3BwYXRoID0gIjx1PiIuJGRpc3BwYXRoLiI8L3U+Ijt9DQogICAgICAgIGZvcmVhY2ggKCRyZWd4cF9oaWdobGlnaHQgYXMgJHIpIHsNCiAgICAgICAgICBpZiAoZXJlZygkclswXSwkbykpIHsNCiAgICAgICAgICAgIGlmICgoIWlzX251bWVyaWMoJHJbMV0pKSBvciAoJHJbMV0gPiAzKSkgeyRyWzFdID0gMDsgb2JfY2xlYW4oKTsgZWNobyAiV2FybmluZyEgQ29uZmlndXJhdGlvbiBlcnJvciBpbiBcJHJlZ3hwX2hpZ2hsaWdodFsiLiRrLiJdWzBdIC0gdW5rbm93biBjb21tYW5kLiI7IGJvZ2VsZXhpdCgpO30NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAkclsxXSA9IHJvdW5kKCRyWzFdKTsNCiAgICAgICAgICAgICAgJGlzZGlyID0gaXNfZGlyKCR2KTsNCiAgICAgICAgICAgICAgaWYgKCgkclsxXSA9PSAwKSBvciAoKCRyWzFdID09IDEpIGFuZCAhJGlzZGlyKSBvciAoKCRyWzFdID09IDIpIGFuZCAhJGlzZGlyKSkgew0KICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkclsyXSkpIHskclsyXSA9ICI8Yj4iOyAkclszXSA9ICI8L2I+Ijt9DQogICAgICAgICAgICAgICAgJGRpc3BwYXRoID0gJHJbMl0uJGRpc3BwYXRoLiRyWzNdOw0KICAgICAgICAgICAgICAgIGlmICgkcls0XSkge2JyZWFrO30NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkdW8gPSB1cmxlbmNvZGUoJG8pOw0KICAgICAgICAkdWQgPSB1cmxlbmNvZGUoJGRpcik7DQogICAgICAgICR1diA9IHVybGVuY29kZSgkdik7DQogICAgICAgICRyb3cgPSBhcnJheSgpOw0KICAgICAgICBpZiAoJG8gPT0gIi4iKSB7DQogICAgICAgICAgJHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUocmVhbHBhdGgoJGQuJG8pKS4iJnNvcnQ9Ii4kc29ydC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c21hbGxfZGlyXCIgYm9yZGVyPVwiMFwiPiZuYnNwOyIuJG8uIjwvYT4iOw0KICAgICAgICAgICRyb3dbXSA9ICJDVVJESVIiOw0KICAgICAgICB9DQogICAgICAgIGVsc2VpZiAoJG8gPT0gIi4uIikgew0KICAgICAgICAgICRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIiZzb3J0PSIuJHNvcnQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF9sbmtcIiBib3JkZXI9XCIwXCI+Jm5ic3A7Ii4kby4iPC9hPiI7DQogICAgICAgICAgJHJvd1tdID0gIlVQRElSIjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKGlzX2RpcigkdikpIHsNCiAgICAgICAgICBpZiAoaXNfbGluaygkdikpIHsNCiAgICAgICAgICAgICRkaXNwcGF0aCAuPSAiID0+ICIucmVhZGxpbmsoJHYpOw0KICAgICAgICAgICAgJHR5cGUgPSAiTElOSyI7DQogICAgICAgICAgICAkcm93W10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9bHMmZD0iLiR1di4iJnNvcnQ9Ii4kc29ydC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9ZXh0X2xua1wiIGJvcmRlcj1cIjBcIj4mbmJzcDtbIi4kZGlzcHBhdGguIl08L2E+IjsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkdHlwZSA9ICJESVIiOw0KICAgICAgICAgICAgJHJvd1tdID0gICI8YSBocmVmPVwiIi4kc3VybC4ieD1scyZkPSIuJHV2LiImc29ydD0iLiRzb3J0LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zbWFsbF9kaXJcIiBib3JkZXI9XCIwXCI+Jm5ic3A7WyIuJGRpc3BwYXRoLiJdPC9hPiI7DQogICAgICAgICAgfQ0KICAgICAgICAgICRyb3dbXSA9ICR0eXBlOw0KICAgICAgICB9DQogICAgICAgIGVsc2VpZihpc19maWxlKCR2KSkgew0KICAgICAgICAgICRleHQgPSBleHBsb2RlKCIuIiwkbyk7DQogICAgICAgICAgJGMgPSBjb3VudCgkZXh0KS0xOw0KICAgICAgICAgICRleHQgPSAkZXh0WyRjXTsNCiAgICAgICAgICAkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsNCiAgICAgICAgICAkcm93W10gPSAgIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLiR1by4iJmQ9Ii4kdWQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPWV4dF8iLiRleHQuIlwiIGJvcmRlcj1cIjBcIj4mbmJzcDsiLiRkaXNwcGF0aC4iPC9hPiI7DQogICAgICAgICAgJHJvd1tdID0gdmlld19zaXplKCRhWzFdKTsNCiAgICAgICAgfQ0KICAgICAgICAkcm93W10gPSBkYXRlKCJkLm0uWSBIOmk6cyIsJGFbMl0pOw0KICAgICAgICBpZiAoISR3aW4pIHskcm93W10gPSAkYVszXTt9DQogICAgICAgICRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD1jaG1vZCZmPSIuJHVvLiImZD0iLiR1ZC4iXCI+PGI+Ii52aWV3X3Blcm1zX2NvbG9yKCR2KS4iPC9iPjwvYT4iOw0KICAgICAgICBpZiAoJG8gPT0gIi4iKSB7JGNoZWNrYm94ID0gIjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYWN0Ym94W11cIiBvbmNsaWNrPVwibHNfcmV2ZXJzZV9hbGwoKTtcIj4iOyAkaS0tO30NCiAgICAgICAgZWxzZSB7JGNoZWNrYm94ID0gIjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYWN0Ym94W11cIiBpZD1cImFjdGJveCIuJGkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iXCI+Ijt9DQogICAgICAgIGlmIChpc19kaXIoJHYpKSB7JHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWQmZD0iLiR1di4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9ZXh0X2RpelwiIGFsdD1cIkluZm9cIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyIuJGNoZWNrYm94O30NCiAgICAgICAgZWxzZSB7JHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLiR1by4iJmZ0PWluZm8mZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9ZXh0X2RpelwiIGFsdD1cIkluZm9cIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTZcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLiR1by4iJmZ0PWVkaXQmZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9Y2hhbmdlXCIgYWx0PVwiQ2hhbmdlXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE5XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii4kdW8uIiZmdD1kb3dubG9hZCZkPSIuJHVkLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1kb3dubG9hZFwiIGFsdD1cIkRvd25sb2FkXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDsiLiRjaGVja2JveDt9DQogICAgICAgIGlmICgoJG8gPT0gIi4iKSBvciAoJG8gPT0gIi4uIikpIHskdGFiWyJoZWFkIl1bXSA9ICRyb3c7fQ0KICAgICAgICBlbHNlaWYgKGlzX2xpbmsoJHYpKSB7JHRhYlsibGlua3MiXVtdID0gJHJvdzt9DQogICAgICAgIGVsc2VpZiAoaXNfZGlyKCR2KSkgeyR0YWJbImZvbGRlcnMiXVtdID0gJHJvdzt9DQogICAgICAgIGVsc2VpZiAoaXNfZmlsZSgkdikpIHskdGFiWyJmaWxlcyJdW10gPSAkcm93O30NCiAgICAgICAgJGkrKzsNCiAgICAgIH0NCiAgICB9DQogICAgJHRhYmxlID0gYXJyYXlfbWVyZ2UoJHRhYlsiY29scyJdLCR0YWJbImhlYWQiXSwkdGFiWyJmb2xkZXJzIl0sJHRhYlsibGlua3MiXSwkdGFiWyJmaWxlcyJdKTsNCiAgICBlY2hvICI8ZGl2IGNsYXNzPWJhcmhlYWRlcj5bK10gIjsNCiAgICBpZiAoIWVtcHR5KCRmeF9pbmZvaGVhZCkpIHsgZWNobyAkZnhfaW5mb2hlYWQ7IH0NCiAgICBlbHNlIHsgZWNobyAiRGlyZWN0b3J5IExpc3QgKCIuY291bnQoJHRhYlsiZmlsZXMiXSkuIiBmaWxlcyBhbmQgIi4oY291bnQoJHRhYlsiZm9sZGVycyJdKStjb3VudCgkdGFiWyJsaW5rcyJdKSkuIiBmb2xkZXJzKSI7IH0NCiAgICBlY2hvICIgWytdPC9kaXY+XG4iOw0KICAgIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUIG5hbWU9XCJsc19mb3JtXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1cIiIuJGRzcGFjdC4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0iLiRkLiI+Ii4NCiAgICAgICAgICI8dGFibGUgY2xhc3M9ZXhwbG9yZXI+IjsNCiAgICBmb3JlYWNoKCR0YWJsZSBhcyAkcm93KSB7DQogICAgICBlY2hvICI8dHI+IjsNCiAgICAgIGZvcmVhY2goJHJvdyBhcyAkdikge2VjaG8gIjx0ZD4iLiR2LiI8L3RkPiI7fQ0KICAgICAgZWNobyAiPC90cj5cclxuIjsNCiAgICB9DQogICAgZWNobyAiPC90YWJsZT4iLg0KICAgICAgICAgIjxzY3JpcHQ+Ii4NCiAgICAgICAgICJmdW5jdGlvbiBsc19zZXRjaGVja2JveGFsbChzdGF0dXMpIHsiLg0KICAgICAgICAgIiB2YXIgaWQgPSAxOyB2YXIgbnVtID0gIi4oY291bnQoJHRhYmxlKS0yKS4iOyIuDQogICAgICAgICAiIHdoaWxlIChpZCA8PSBudW0pIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGJveCcraWQpLmNoZWNrZWQgPSBzdGF0dXM7IGlkKys7IH0iLg0KICAgICAgICAgIn0iLg0KICAgICAgICAgImZ1bmN0aW9uIGxzX3JldmVyc2VfYWxsKCkgeyIuDQogICAgICAgICAiIHZhciBpZCA9IDE7IHZhciBudW0gPSAiLihjb3VudCgkdGFibGUpLTIpLiI7Ii4NCiAgICAgICAgICIgd2hpbGUgKGlkIDw9IG51bSkgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0Ym94JytpZCkuY2hlY2tlZCA9ICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0Ym94JytpZCkuY2hlY2tlZDsgaWQrKzsgfSIuDQogICAgICAgICAifSIuDQogICAgICAgICAiPC9zY3JpcHQ+Ii4NCiAgICAgICAgICI8ZGl2IGFsaWduPVwicmlnaHRcIj4iLg0KICAgICAgICAgIjxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgb25jbGljaz1cImxzX3NldGNoZWNrYm94YWxsKHRydWUpO1wiIHZhbHVlPVwiU2VsZWN0IGFsbFwiPiZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgb25jbGljaz1cImxzX3NldGNoZWNrYm94YWxsKGZhbHNlKTtcIiB2YWx1ZT1cIlVuc2VsZWN0IGFsbFwiPiIuDQogICAgICAgICAiPGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPiI7DQogICAgaWYgKGNvdW50KGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImNvcHkiXSwkc2Vzc19kYXRhWyJjdXQiXSkpID4gMCBhbmQgKCR1c2Vmc2J1ZmYpKSB7DQogICAgICBlY2hvICI8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1hY3RhcmNidWZmIHZhbHVlPVwiUGFjayBidWZmZXIgdG8gYXJjaGl2ZVwiPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJhY3RhcmNidWZmX3BhdGhcIiB2YWx1ZT1cImZ4X2FyY2hpdmVfIi5zdWJzdHIobWQ1KHJhbmQoMSwxMDAwKS5yYW5kKDEsMTAwMCkpLDAsNSkuIi50YXIuZ3pcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1cImFjdHBhc3RlYnVmZlwiIHZhbHVlPVwiUGFzdGVcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1cImFjdGVtcHR5YnVmZlwiIHZhbHVlPVwiRW1wdHkgYnVmZmVyXCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICB9DQogICAgZWNobyAiPHNlbGVjdCBuYW1lPXg+PG9wdGlvbiB2YWx1ZT1cIiIuJHguIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsNCiAgICBlY2hvICI8b3B0aW9uIHZhbHVlPWRlbGV0ZSIuKCRkc3BhY3QgPT0gImRlbGV0ZSI/IiBzZWxlY3RlZCI6IiIpLiI+RGVsZXRlPC9vcHRpb24+IjsNCiAgICBlY2hvICI8b3B0aW9uIHZhbHVlPWNobW9kIi4oJGRzcGFjdCA9PSAiY2htb2QiPyIgc2VsZWN0ZWQiOiIiKS4iPkNoYW5nZS1tb2RlPC9vcHRpb24+IjsNCiAgICBpZiAoJHVzZWZzYnVmZikgew0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1jdXQiLigkZHNwYWN0ID09ICJjdXQiPyIgc2VsZWN0ZWQiOiIiKS4iPkN1dDwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPWNvcHkiLigkZHNwYWN0ID09ICJjb3B5Ij8iIHNlbGVjdGVkIjoiIikuIj5Db3B5PC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9dW5zZWxlY3QiLigkZHNwYWN0ID09ICJ1bnNlbGVjdCI/IiBzZWxlY3RlZCI6IiIpLiI+VW5zZWxlY3Q8L29wdGlvbj4iOw0KICAgIH0NCiAgICBlY2hvICI8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJDb25maXJtXCI+PC9kaXY+IjsNCiAgICBlY2hvICI8L2Zvcm0+IjsNCiAgfQ0KfQ0KaWYgKCR4ID09ICJ0b29scyIpIA0Kew0KDQp9DQppZiAoJHggPT0gInBocGZzeXMiKSB7DQogIGVjaG8gIjxkaXYgYWxpZ249bGVmdD4iOw0KICAkZnNmdW5jID0gJHBocGZzeXNmdW5jOw0KICBpZiAoJGZzZnVuYz09ImNvcHkiKSB7DQogICAgaWYgKCFjb3B5KCRhcmcxLCAkYXJnMikpIHsgZWNobyAiRmFpbGVkIHRvIGNvcHkgJGFyZzEuLi5cbiI7fQ0KICAgIGVsc2UgeyBlY2hvICI8Yj5TdWNjZXNzITwvYj4gJGFyZzEgY29waWVkIHRvICRhcmcyXG4iOyB9DQogIH0NCiAgZWxzZWlmICgkZnNmdW5jPT0icmVuYW1lIikgew0KICAgIGlmICghcmVuYW1lKCRhcmcxLCAkYXJnMikpIHsgZWNobyAiRmFpbGVkIHRvIHJlbmFtZS9tb3ZlICRhcmcxIVxuIjt9DQogICAgZWxzZSB7IGVjaG8gIjxiPlN1Y2Nlc3MhPC9iPiAkYXJnMSByZW5hbWVkL21vdmVkIHRvICRhcmcyXG4iOyB9DQogIH0NCiAgZWxzZWlmICgkZnNmdW5jPT0iY2htb2QiKSB7DQogICAgaWYgKCFjaG1vZCgkYXJnMSwkYXJnMikpIHsgZWNobyAiRmFpbGVkIHRvIGNobW9kICRhcmcxIVxuIjt9DQogICAgZWxzZSB7IGVjaG8gIjxiPlBlcm0gZm9yICRhcmcxIGNoYW5nZWQgdG8gJGFyZzIhPC9iPlxuIjsgfQ0KICB9DQogIGVsc2VpZiAoJGZzZnVuYz09InJlYWQiKSB7DQogICAgJGhhc2lsID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRhcmcxKTsNCiAgICBlY2hvICI8Yj5GaWxlbmFtZTo8L2I+ICRhcmcxPGJyPiI7DQogICAgZWNobyAiPHRleHRhcmVhIGNvbHM9MTUwIHJvd3M9MjA+IjsNCiAgICBlY2hvICRoYXNpbDsNCiAgICBlY2hvICI8L3RleHRhcmVhPlxuIjsNCiAgfQ0KICBlbHNlaWYgKCRmc2Z1bmM9PSJ3cml0ZSIpIHsNCiAgICBpZihAZmlsZV9wdXRfY29udGVudHMoJGQuJGFyZzEsJGFyZzIpKSB7DQogICAgICBlY2hvICI8Yj5TYXZlZCE8L2I+ICIuJGQuJGFyZzE7DQogICAgfQ0KICAgIGVsc2UgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPkNvdWxkbid0IHdyaXRlIHRvICRhcmcxITwvZGl2PiI7IH0NCiAgfQ0KICBlbHNlaWYgKCRmc2Z1bmM9PSJkb3dubG9hZGJpbiIpIHsNCiAgICAkaGFuZGxlID0gZm9wZW4oJGFyZzEsICJyYiIpOw0KICAgICRjb250ZW50cyA9ICcnOw0KICAgIHdoaWxlICghZmVvZigkaGFuZGxlKSkgew0KICAgICAgJGNvbnRlbnRzIC49IGZyZWFkKCRoYW5kbGUsIDgxOTIpOw0KICAgIH0NCiAgICAkciA9IEBmb3BlbigkZC4kYXJnMiwndycpOw0KICAgIGlmIChmd3JpdGUoJHIsJGNvbnRlbnRzKSkgeyBlY2hvICI8Yj5TdWNjZXNzITwvYj4gJGFyZzEgc2F2ZWQgdG8gIi4kZC4kYXJnMi4iICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kYXJnMikpLiIpIjsgfQ0KICAgIGVsc2UgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPkNvdWxkbid0IHdyaXRlIHRvICIuJGQuJGFyZzIuIiE8L2Rpdj4iOyB9DQogICAgZmNsb3NlKCRyKTsNCiAgICBmY2xvc2UoJGhhbmRsZSk7DQogIH0NCiAgZWxzZWlmICgkZnNmdW5jPT0iZG93bmxvYWQiKSB7DQogICAgJHRleHQgPSBpbXBsb2RlKCcnLCBmaWxlKCRhcmcxKSk7DQogICAgaWYgKCR0ZXh0KSB7DQogICAgICAkciA9IEBmb3BlbigkZC4kYXJnMiwndycpOw0KICAgICAgaWYgKGZ3cml0ZSgkciwkdGV4dCkpIHsgZWNobyAiPGI+U3VjY2VzcyE8L2I+ICRhcmcxIHNhdmVkIHRvICIuJGQuJGFyZzIuIiAoIi52aWV3X3NpemUoZmlsZXNpemUoJGQuJGFyZzIpKS4iKSI7IH0NCiAgICAgIGVsc2UgeyBlY2hvICI8ZGl2IGNsYXNzPWZ4ZXJybXNnPkNvdWxkbid0IHdyaXRlIHRvICIuJGQuJGFyZzIuIiE8L2Rpdj4iOyB9DQogICAgICBmY2xvc2UoJHIpOw0KICAgIH0NCiAgICBlbHNlIHsgZWNobyAiPGRpdiBjbGFzcz1meGVycm1zZz5Db3VsZG4ndCBkb3dubG9hZCBmcm9tICRhcmcxITwvZGl2PiI7fQ0KICB9DQogIGVsc2VpZiAoJGZzZnVuYz09J21rZGlyJykgew0KICAgICR0aGVkaXIgPSAkZC4kYXJnMTsNCiAgICBpZiAoJHRoZWRpciAhPSAkZCkgew0KICAgICAgaWYgKGZpbGVfZXhpc3RzKCR0aGVkaXIpKSB7IGVjaG8gIjxiPkFscmVhZHkgZXhpc3RzOjwvYj4gIi5odG1sc3BlY2lhbGNoYXJzKCR0aGVkaXIpOyB9DQogICAgICBlbHNlaWYgKCFta2RpcigkdGhlZGlyKSkgeyBlY2hvICI8Yj5BY2Nlc3MgZGVuaWVkOjwvYj4gIi5odG1sc3BlY2lhbGNoYXJzKCR0aGVkaXIpOyB9DQogICAgICBlbHNlIHsgZWNobyAiPGI+RGlyIGNyZWF0ZWQ6PC9iPiAiLmh0bWxzcGVjaWFsY2hhcnMoJHRoZWRpcik7fQ0KICAgIH0NCiAgICBlbHNlIHsgZWNobyAiQ291bGRuJ3QgY3JlYXRlIGN1cnJlbnQgZGlyOjxiPiAkdGhlZGlyPC9iPiI7IH0NCiAgfQ0KICBlbHNlaWYgKCRmc2Z1bmM9PSdmd3JpdGFibGVkaXInKSB7DQogICAgZnVuY3Rpb24gcmVjdXJzZV9kaXIoJGRpciwkbWF4X2Rpcikgew0KICAgICAgZ2xvYmFsICRkaXJfY291bnQ7DQogICAgICAkZGlyX2NvdW50Kys7DQogICAgICBpZiggJGNkaXIgPSBAZGlyKCRkaXIpICkgew0KICAgICAgICB3aGlsZSggJGVudHJ5ID0gJGNkaXItPiByZWFkKCkgKSB7DQogICAgICAgICAgaWYoICRlbnRyeSAhPSAnLicgJiYgJGVudHJ5ICE9ICcuLicgKSB7DQogICAgICAgICAgICBpZihpc19kaXIoJGRpci4kZW50cnkpICYmIGlzX3dyaXRhYmxlKCRkaXIuJGVudHJ5KSApIHsNCiAgICAgICAgICAgICBpZiAoJGRpcl9jb3VudCA+ICRtYXhfZGlyKSB7IHJldHVybjsgfQ0KICAgICAgICAgICAgICBlY2hvICJbIi4kZGlyX2NvdW50LiJdICIuJGRpci4kZW50cnkuIlxuIjsNCiAgICAgICAgICAgICAgcmVjdXJzZV9kaXIoJGRpci4kZW50cnkuRElSRUNUT1JZX1NFUEFSQVRPUiwkbWF4X2Rpcik7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICRjZGlyLT5jbG9zZSgpOw0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoISRhcmcxKSB7ICRhcmcxID0gJGQ7IH0NCiAgICBpZiAoISRhcmcyKSB7ICRhcmcyID0gMTA7IH0NCiAgICBlY2hvICI8Yj5Xcml0YWJsZSBkaXJlY3RvcmllcyAoTWF4OiAkYXJnMikgaW46PC9iPiAkYXJnMTxicj4iOw0KICAgIGVjaG8gIjxwcmU+IjsNCiAgICByZWN1cnNlX2RpcigkYXJnMSwkYXJnMik7DQogICAgZWNobyAiPC9wcmU+IjsNCiAgICAkdG90YWwgPSAkZGlyX2NvdW50IC0gMTsNCiAgICBlY2hvICI8Yj5Gb3VuZHM6PC9iPiAiLiR0b3RhbC4iIG9mIDxiPk1heDwvYj4gJGFyZzIiOw0KICB9DQogIGVsc2Ugew0KICAgIGlmICghJGFyZzEpIHsgZWNobyAiPGRpdiBjbGFzcz1meGVycm1zZz5ObyBvcGVyYXRpb24hIFBsZWFzZSBmaWxsIHBhcmFtZXRlciBbQV0hPC9kaXY+XG4iOyB9DQogICAgZWxzZSB7DQogICAgICBpZiAoJGhhc2lsID0gJGZzZnVuYygkYXJnMSkpIHsNCiAgICAgICAgZWNobyAiPGI+UmVzdWx0IG9mICRmc2Z1bmMgJGFyZzE6PC9iPjxicj4iOw0KICAgICAgICBpZiAoIWlzX2FycmF5KCRoYXNpbCkpIHsgZWNobyAiJGhhc2lsXG4iOyB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgIGVjaG8gIjxwcmU+IjsNCiAgICAgICAgICBmb3JlYWNoICgkaGFzaWwgYXMgJHYpIHsgZWNobyAkdi4iXG4iOyB9DQogICAgICAgICAgZWNobyAiPC9wcmU+IjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgZWxzZSB7IGVjaG8gIjxkaXYgY2xhc3M9ZnhlcnJtc2c+JGZzZnVuYyAkYXJnMSBmYWlsZWQhPC9kaXY+XG4iOyB9DQogICAgfQ0KICB9DQogIGVjaG8gIjwvZGl2PlxuIjsNCn0NCg0KaWYgKCR4ID09ICJwcm9jZXNzZXMiKSB7DQogIGVjaG8gIjxkaXYgY2xhc3M9YmFyaGVhZGVyPi46IFByb2Nlc3NlcyA6LjwvZGl2PiI7DQogIGlmICghJHdpbikgeyAkaGFuZGxlciA9ICJwcyAtYXV4Ii4oJGdyZXA/IiB8IGdyZXAgJyIuYWRkc2xhc2hlcygkZ3JlcCkuIiciOiIiKTsgfQ0KICBlbHNlIHsgJGhhbmRsZXIgPSAidGFza2xpc3QiOyB9DQogICRyZXQgPSBteXNoZWxsZXhlYygkaGFuZGxlcik7DQogIGlmICghJHJldCkgeyBlY2hvICJDYW4ndCBleGVjdXRlIFwiIi4kaGFuZGxlci4iXCIhIjsgfQ0KICBlbHNlIHsNCiAgICBpZiAoZW1wdHkoJHByb2Nlc3Nlc19zb3J0KSkgeyRwcm9jZXNzZXNfc29ydCA9ICRzb3J0X2RlZmF1bHQ7fQ0KICAgICRwYXJzZXNvcnQgPSBwYXJzZXNvcnQoJHByb2Nlc3Nlc19zb3J0KTsNCiAgICBpZiAoIWlzX251bWVyaWMoJHBhcnNlc29ydFswXSkpIHskcGFyc2Vzb3J0WzBdID0gMDt9DQogICAgJGsgPSAkcGFyc2Vzb3J0WzBdOw0KICAgIGlmICgkcGFyc2Vzb3J0WzFdICE9ICJhIikgew0KICAgICAgJHkgPSAiPGEgaHJlZj1cIiIuJHN1cmwuIng9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRrLiJhXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9c29ydF9kZXNjXCIgYm9yZGVyPVwiMFwiPjwvYT4iOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iZFwiPjxpbWcgc3JjPVwiIi4kc3VybC4ieD1pbWcmaW1nPXNvcnRfYXNjXCIgaGVpZ2h0PVwiOVwiIHdpZHRoPVwiMTRcIiBib3JkZXI9XCIwXCI+PC9hPiI7DQogICAgfQ0KICAgICRyZXQgPSBodG1sc3BlY2lhbGNoYXJzKCRyZXQpOw0KICAgIGlmICghJHdpbikgew0KICAgICAgaWYgKCRwaWQpIHsNCiAgICAgICAgaWYgKGlzX251bGwoJHNpZykpIHskc2lnID0gOTt9DQogICAgICAgIGVjaG8gIlNlbmRpbmcgc2lnbmFsICIuJHNpZy4iIHRvICMiLiRwaWQuIi4uLiAiOw0KICAgICAgICBpZiAocG9zaXhfa2lsbCgkcGlkLCRzaWcpKSB7ZWNobyAiT0suIjt9DQogICAgICAgIGVsc2Uge2VjaG8gIkVSUk9SLiI7fQ0KICAgICAgfQ0KICAgICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIgIiwkcmV0KTt9DQogICAgICAkc3RhY2sgPSBleHBsb2RlKCJcbiIsJHJldCk7DQogICAgICAkaGVhZCA9IGV4cGxvZGUoIiAiLCRzdGFja1swXSk7DQogICAgICB1bnNldCgkc3RhY2tbMF0pOw0KICAgICAgZm9yKCRpPTA7JGk8Y291bnQoJGhlYWQpOyRpKyspIHsNCiAgICAgICAgaWYgKCRpICE9ICRrKSB7JGhlYWRbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kaS4kcGFyc2Vzb3J0WzFdLiJcIj48Yj4iLiRoZWFkWyRpXS4iPC9iPjwvYT4iO30NCiAgICAgIH0NCiAgICAgICRwcmNzID0gYXJyYXkoKTsNCiAgICAgIGZvcmVhY2ggKCRzdGFjayBhcyAkbGluZSkgew0KICAgICAgICBpZiAoIWVtcHR5KCRsaW5lKSkgew0KICAgICAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgICAgICRsaW5lID0gZXhwbG9kZSgiICIsJGxpbmUpOw0KICAgICAgICAgICRsaW5lWzEwXSA9IGpvaW4oIiAiLGFycmF5X3NsaWNlKCRsaW5lLDEwKSk7DQogICAgICAgICAgJGxpbmUgPSBhcnJheV9zbGljZSgkbGluZSwwLDExKTsNCiAgICAgICAgICBpZiAoJGxpbmVbMF0gPT0gZ2V0X2N1cnJlbnRfdXNlcigpKSB7JGxpbmVbMF0gPSAiPGZvbnQgY29sb3I9bGltZT4iLiRsaW5lWzBdLiI8L2ZvbnQ+Ijt9DQogICAgICAgICAgJGxpbmVbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD1wcm9jZXNzZXMmZD0iLnVybGVuY29kZSgkZCkuIiZwaWQ9Ii4kbGluZVsxXS4iJnNpZz05XCI+PHU+S0lMTDwvdT48L2E+IjsNCiAgICAgICAgICAkcHJjc1tdID0gJGxpbmU7DQogICAgICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIgIiwkcmV0KTt9DQogICAgICB3aGlsZSAoZXJlZygiPSIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIj0iLCIiLCRyZXQpO30NCiAgICAgICRyZXQgPSBjb252ZXJ0X2N5cl9zdHJpbmcoJHJldCwiZCIsInciKTsNCiAgICAgICRzdGFjayA9IGV4cGxvZGUoIlxuIiwkcmV0KTsNCiAgICAgIHVuc2V0KCRzdGFja1swXSwkc3RhY2tbMl0pOw0KICAgICAgJHN0YWNrID0gYXJyYXlfdmFsdWVzKCRzdGFjayk7DQogICAgICAkc3RhY2tbMF09c3RyX3JlcGxhY2UoIkltYWdlIE5hbWUiLCJJbWFnZU5hbWUiLCRzdGFja1swXSk7DQogICAgICAkc3RhY2tbMF09c3RyX3JlcGxhY2UoIlNlc3Npb24gTmFtZSIsIlNlc3Npb25OYW1lIiwkc3RhY2tbMF0pOw0KICAgICAgJHN0YWNrWzBdPXN0cl9yZXBsYWNlKCJNZW0gVXNhZ2UiLCJNZW1vcnlVc2FnZSIsJHN0YWNrWzBdKTsNCiAgICAgICRoZWFkID0gZXhwbG9kZSgiICIsJHN0YWNrWzBdKTsNCiAgICAgICRzdGFjayA9IGFycmF5X3NsaWNlKCRzdGFjaywxKTsNCiAgICAgICRoZWFkID0gYXJyYXlfdmFsdWVzKCRoZWFkKTsNCiAgICAgIGlmICgkcGFyc2Vzb3J0WzFdICE9ICJhIikgeyAkeSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGsuImFcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0X2Rlc2NcIiBib3JkZXI9XCIwXCI+PC9hPiI7IH0NCiAgICAgIGVsc2UgeyAkeSA9ICI8YSBocmVmPVwiIi4kc3VybC4ieD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGsuImRcIj48aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz1zb3J0X2FzY1wiIGJvcmRlcj1cIjBcIj48L2E+IjsgfQ0KICAgICAgaWYgKCRrID4gY291bnQoJGhlYWQpKSB7JGsgPSBjb3VudCgkaGVhZCktMTt9DQogICAgICBmb3IoJGk9MDskaTxjb3VudCgkaGVhZCk7JGkrKykgew0KICAgICAgICBpZiAoJGkgIT0gJGspIHsgJGhlYWRbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kaS4kcGFyc2Vzb3J0WzFdLiJcIj48Yj4iLnRyaW0oJGhlYWRbJGldKS4iPC9iPjwvYT4iOyB9DQogICAgICB9DQogICAgICAkcHJjcyA9IGFycmF5KCk7DQogICAgICB1bnNldCgkc3RhY2tbMF0pOw0KICAgICAgZm9yZWFjaCAoJHN0YWNrIGFzICRsaW5lKSB7DQogICAgICAgIGlmICghZW1wdHkoJGxpbmUpKSB7DQogICAgICAgICAgJGxpbmUgPSBleHBsb2RlKCIgIiwkbGluZSk7DQogICAgICAgICAgJGxpbmVbNF0gPSBzdHJfcmVwbGFjZSgiLiIsIiIsJGxpbmVbNF0pOw0KICAgICAgICAgICRsaW5lWzRdID0gaW50dmFsKCRsaW5lWzRdKSAqIDEwMjQ7DQogICAgICAgICAgdW5zZXQoJGxpbmVbNV0pOw0KICAgICAgICAgICRwcmNzW10gPSAkbGluZTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICAkaGVhZFska10gPSAiPGI+Ii4kaGVhZFska10uIjwvYj4iLiR5Ow0KICAgICR2ID0gJHByb2Nlc3Nlc19zb3J0WzBdOw0KICAgIHVzb3J0KCRwcmNzLCJ0YWJzb3J0Iik7DQogICAgaWYgKCRwcm9jZXNzZXNfc29ydFsxXSA9PSAiZCIpIHskcHJjcyA9IGFycmF5X3JldmVyc2UoJHByY3MpO30NCiAgICAkdGFiID0gYXJyYXkoKTsNCiAgICAkdGFiW10gPSAkaGVhZDsNCiAgICAkdGFiID0gYXJyYXlfbWVyZ2UoJHRhYiwkcHJjcyk7DQogICAgZWNobyAiPHRhYmxlIGNsYXNzPWV4cGxvcmVyPiI7DQogICAgZm9yZWFjaCgkdGFiIGFzICRpPT4kaykgew0KICAgICAgZWNobyAiPHRyPiI7DQogICAgICBmb3JlYWNoKCRrIGFzICRqPT4kdikgew0KICAgICAgICBpZiAoJHdpbiBhbmQgJGkgPiAwIGFuZCAkaiA9PSA0KSB7JHYgPSB2aWV3X3NpemUoJHYpO30NCiAgICAgICAgZWNobyAiPHRkPiIuJHYuIjwvdGQ+IjsNCiAgICAgIH0NCiAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICB9DQogICAgZWNobyAiPC90YWJsZT4iOw0KICB9DQp9DQoNCmlmICgkeCA9PSAiZiIpIHsNCiAgZWNobyAiPGRpdiBhbGlnbj1sZWZ0PiI7DQogIGlmICgoIWlzX3JlYWRhYmxlKCRkLiRmKSBvciBpc19kaXIoJGQuJGYpKSBhbmQgJGZ0ICE9ICJlZGl0Iikgew0KICAgIGlmIChmaWxlX2V4aXN0cygkZC4kZikpIHtlY2hvICI8Y2VudGVyPjxiPlBlcm1pc2lvbiBkZW5pZWQgKCIuaHRtbHNwZWNpYWxjaGFycygkZC4kZikuIikhPC9iPjwvY2VudGVyPiI7fQ0KICAgIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+RmlsZSBkb2VzIG5vdCBleGlzdHMgKCIuaHRtbHNwZWNpYWxjaGFycygkZC4kZikuIikhPC9iPjxicj48YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9ZWRpdCZkPSIudXJsZW5jb2RlKCRkKS4iJmM9MVwiPjx1PkNyZWF0ZTwvdT48L2E+PC9jZW50ZXI+Ijt9DQogIH0NCiAgZWxzZSB7DQogICAgJHIgPSBAZmlsZV9nZXRfY29udGVudHMoJGQuJGYpOw0KICAgICRleHQgPSBleHBsb2RlKCIuIiwkZik7DQogICAgJGMgPSBjb3VudCgkZXh0KS0xOw0KICAgICRleHQgPSAkZXh0WyRjXTsNCiAgICAkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsNCiAgICAkcmZ0ID0gIiI7DQogICAgZm9yZWFjaCgkZnR5cGVzIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkZXh0LCR2KSkgeyRyZnQgPSAkazsgYnJlYWs7fX0NCiAgICBpZiAoZXJlZ2koInNlc3NfKC4qKSIsJGYpKSB7JHJmdCA9ICJwaHBzZXNzIjt9DQogICAgaWYgKGVtcHR5KCRmdCkpIHskZnQgPSAkcmZ0O30NCiAgICAkYXJyID0gYXJyYXkoDQogICAgICAgIGFycmF5KCJpbmZvIiwiaW5mbyIpLA0KICAgICAgICBhcnJheSgiaHRtbCIsImh0bWwiKSwNCiAgICAgICAgYXJyYXkoInR4dCIsInR4dCIpLA0KICAgICAgICBhcnJheSgiQ29kZSIsImNvZGUiKSwNCiAgICAgICAgYXJyYXkoIlNlc3Npb24iLCJwaHBzZXNzIiksDQogICAgICAgIGFycmF5KCJleGUiLCJleGUiKSwNCiAgICAgICAgYXJyYXkoIlNEQiIsInNkYiIpLA0KICAgICAgICBhcnJheSgiaW1nIiwiaW1nIiksDQogICAgICAgIGFycmF5KCJpbmkiLCJpbmkiKSwNCiAgICAgICAgYXJyYXkoImRvd25sb2FkIiwiZG93bmxvYWQiKSwNCiAgICAgICAgYXJyYXkoIm5vdGVwYWQiLCJub3RlcGFkIiksDQogICAgICAgIGFycmF5KCJlZGl0IiwiZWRpdCIpDQogICAgKTsNCiAgICBlY2hvICI8Yj5WaWV3aW5nIGZpbGU6Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGltZyBzcmM9XCIiLiRzdXJsLiJ4PWltZyZpbWc9ZXh0XyIuJGV4dC4iXCIgYm9yZGVyPVwiMFwiPiZuYnNwOyIuJGYuIiAoIi52aWV3X3NpemUoZmlsZXNpemUoJGQuJGYpKS4iKSAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiLnZpZXdfcGVybXNfY29sb3IoJGQuJGYpLiI8L2I+PGJyPlNlbGVjdCBhY3Rpb24vZmlsZS10eXBlOjxicj4iOw0KICAgIGZvcmVhY2goJGFyciBhcyAkdCkgew0KICAgICAgaWYgKCR0WzFdID09ICRyZnQpIHtlY2hvICIgPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZkPSIudXJsZW5jb2RlKCRkKS4iXCI+PGZvbnQgY29sb3I9bGltZT4iLiR0WzBdLiI8L2ZvbnQ+PC9hPiI7fQ0KICAgICAgZWxzZWlmICgkdFsxXSA9PSAkZnQpIHtlY2hvICIgPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZkPSIudXJsZW5jb2RlKCRkKS4iXCI+PGI+PHU+Ii4kdFswXS4iPC91PjwvYj48L2E+Ijt9DQogICAgICBlbHNlIHtlY2hvICIgPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZkPSIudXJsZW5jb2RlKCRkKS4iXCI+PGI+Ii4kdFswXS4iPC9iPjwvYT4iO30NCiAgICAgIGVjaG8gIiAoPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4rPC9hPikgfCI7DQogICAgfQ0KICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgICBpZiAoJGZ0ID09ICJpbmZvIikgew0KICAgICAgZWNobyAiPGI+SW5mb3JtYXRpb246PC9iPjx0YWJsZSBib3JkZXI9MCBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTI+PHRyPjx0ZD48Yj5QYXRoPC9iPjwvdGQ+PHRkPiAiLiRkLiRmLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5TaXplPC9iPjwvdGQ+PHRkPiAiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kZikpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NRDU8L2I+PC90ZD48dGQ+ICIubWQ1X2ZpbGUoJGQuJGYpLiI8L3RkPjwvdHI+IjsNCiAgICAgIGlmICghJHdpbikgew0KICAgICAgICBlY2hvICI8dHI+PHRkPjxiPk93bmVyL0dyb3VwPC9iPjwvdGQ+PHRkPiAiOw0KICAgICAgICAkb3cgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGQuJGYpKTsNCiAgICAgICAgJGdyID0gcG9zaXhfZ2V0Z3JnaWQoZmlsZWdyb3VwKCRkLiRmKSk7DQogICAgICAgIGVjaG8gKCRvd1sibmFtZSJdPyRvd1sibmFtZSJdOmZpbGVvd25lcigkZC4kZikpLiIvIi4oJGdyWyJuYW1lIl0/JGdyWyJuYW1lIl06ZmlsZWdyb3VwKCRkLiRmKSk7DQogICAgICB9DQogICAgICBlY2hvICI8dHI+PHRkPjxiPlBlcm1zPC9iPjwvdGQ+PHRkPjxhIGhyZWY9XCIiLiRzdXJsLiJ4PWNobW9kJmY9Ii51cmxlbmNvZGUoJGYpLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPiIudmlld19wZXJtc19jb2xvcigkZC4kZikuIjwvYT48L3RkPjwvdHI+PHRyPjx0ZD48Yj5DcmVhdGUgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWN0aW1lKCRkLiRmKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPkFjY2VzcyB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlYXRpbWUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+TU9ESUZZIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVtdGltZSgkZC4kZikpLiI8L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgJGZpID0gZm9wZW4oJGQuJGYsInJiIik7DQogICAgICBpZiAoJGZpKSB7DQogICAgICAgIGlmICgkZnVsbGhleGR1bXApIHtlY2hvICI8Yj5GVUxMIEhFWERVTVA8L2I+IjsgJHN0ciA9IGZyZWFkKCRmaSxmaWxlc2l6ZSgkZC4kZikpO30NCiAgICAgICAgZWxzZSB7ZWNobyAiPGI+SEVYRFVNUCBQUkVWSUVXPC9iPiI7ICRzdHIgPSBmcmVhZCgkZmksJGhleGR1bXBfbGluZXMqJGhleGR1bXBfcm93cyk7fQ0KICAgICAgICAkbiA9IDA7DQogICAgICAgICRhMCA9ICIwMDAwMDAwMDxicj4iOw0KICAgICAgICAkYTEgPSAiIjsNCiAgICAgICAgJGEyID0gIiI7DQogICAgICAgIGZvciAoJGk9MDsgJGk8c3RybGVuKCRzdHIpOyAkaSsrKSB7DQogICAgICAgICAgJGExIC49IHNwcmludGYoIiUwMlgiLG9yZCgkc3RyWyRpXSkpLiIgIjsNCiAgICAgICAgICBzd2l0Y2ggKG9yZCgkc3RyWyRpXSkpIHsNCiAgICAgICAgICAgIGNhc2UgMDogICRhMiAuPSAiPGZvbnQ+MDwvZm9udD4iOyBicmVhazsNCiAgICAgICAgICAgIGNhc2UgMzI6DQogICAgICAgICAgICBjYXNlIDEwOg0KICAgICAgICAgICAgY2FzZSAxMzogJGEyIC49ICImbmJzcDsiOyBicmVhazsNCiAgICAgICAgICAgIGRlZmF1bHQ6ICRhMiAuPSBodG1sc3BlY2lhbGNoYXJzKCRzdHJbJGldKTsNCiAgICAgICAgICB9DQogICAgICAgICAgJG4rKzsNCiAgICAgICAgICBpZiAoJG4gPT0gJGhleGR1bXBfcm93cykgew0KICAgICAgICAgICAgJG4gPSAwOw0KICAgICAgICAgICAgaWYgKCRpKzEgPCBzdHJsZW4oJHN0cikpIHskYTAgLj0gc3ByaW50ZigiJTA4WCIsJGkrMSkuIjxicj4iO30NCiAgICAgICAgICAgICRhMSAuPSAiPGJyPiI7DQogICAgICAgICAgICAkYTIgLj0gIjxicj4iOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlY2hvICI8dGFibGUgYm9yZGVyPTEgYmdjb2xvcj0jNjY2NjY2PiIuDQogICAgICAgICAgICAgIjx0cj48dGQgYmdjb2xvcj0jNjY2NjY2PiIuJGEwLiI8L3RkPiIuDQogICAgICAgICAgICAgIjx0ZCBiZ2NvbG9yPSMwMDAwMDA+Ii4kYTEuIjwvdGQ+Ii4NCiAgICAgICAgICAgICAiPHRkIGJnY29sb3I9IzAwMDAwMD4iLiRhMi4iPC90ZD4iLg0KICAgICAgICAgICAgICI8L3RyPjwvdGFibGU+PGJyPiI7DQogICAgICB9DQogICAgICANCiAgIGVjaG8gIjxiPkhFWERVTVA6PC9iPjxub2JyPiBbPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mZnVsbGhleGR1bXA9MSZkPSIudXJsZW5jb2RlKCRkKS4iXCI+RnVsbDwvYT5dIFs8YSBocmVmPVwiIi4kc3VybC4ieD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZkPSIudXJsZW5jb2RlKCRkKS4iXCI+UHJldmlldzwvYT5dPGJyPjxiPkJhc2U2NDogPC9iPg0KICAgICAgICA8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTEmZD0iLnVybGVuY29kZSgkZCkuIlwiPkVuY29kZTwvYT5dJm5ic3A7PC9ub2JyPg0KICAgICAgICA8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTImZD0iLnVybGVuY29kZSgkZCkuIlwiPitjaHVuazwvYT5dJm5ic3A7PC9ub2JyPg0KICAgICAgICA8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTMmZD0iLnVybGVuY29kZSgkZCkuIlwiPitjaHVuaytxdW90ZXM8L2E+XSZuYnNwOzwvbm9icj4NCiAgICAgICAgPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJ4PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND00JmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5EZWNvZGU8L2E+XSZuYnNwOzwvbm9icj4NCiAgICAgICAgPFA+IjsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAiaHRtbCIpIHsNCiAgIGlmICgkd2hpdGUpIHtAb2JfY2xlYW4oKTt9DQogICBlY2hvICRyOw0KICAgaWYgKCR3aGl0ZSkge2JvZ2VsZXhpdCgpO30NCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAidHh0Iikge2VjaG8gIjxwcmU+Ii5odG1sc3BlY2lhbGNoYXJzKCRyKS4iPC9wcmU+Ijt9DQogIGVsc2VpZiAoJGZ0ID09ICJpbmkiKSB7ZWNobyAiPHByZT4iOyB2YXJfZHVtcChwYXJzZV9pbmlfZmlsZSgkZC4kZixUUlVFKSk7IGVjaG8gIjwvcHJlPiI7fQ0KICBlbHNlaWYgKCRmdCA9PSAicGhwc2VzcyIpIHsNCiAgIGVjaG8gIjxwcmU+IjsNCiAgICR2ID0gZXhwbG9kZSgifCIsJHIpOw0KICAgZWNobyAkdlswXS4iPGJyPiI7DQogICB2YXJfZHVtcCh1bnNlcmlhbGl6ZSgkdlsxXSkpOw0KICAgZWNobyAiPC9wcmU+IjsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAiZXhlIikgew0KICAgJGV4dCA9IGV4cGxvZGUoIi4iLCRmKTsNCiAgICRjID0gY291bnQoJGV4dCktMTsNCiAgICRleHQgPSAkZXh0WyRjXTsNCiAgICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOw0KICAgJHJmdCA9ICIiOw0KICAgZm9yZWFjaCgkZXhlZnR5cGVzIGFzICRrPT4kdikNCiAgIHsNCiAgICBpZiAoaW5fYXJyYXkoJGV4dCwkdikpIHskcmZ0ID0gJGs7IGJyZWFrO30NCiAgIH0NCiAgICRjbWQgPSBzdHJfcmVwbGFjZSgiJWYlIiwkZiwkcmZ0KTsNCiAgIGVjaG8gIjxiPkV4ZWN1dGUgZmlsZTo8L2I+PGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT1jbWQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNtZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRjbWQpLiJcIiBzaXplPVwiIi4oc3RybGVuKCRjbWQpKzIpLiJcIj48YnI+RGlzcGxheSBpbiB0ZXh0LWFyZWE8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNtZF90eHRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwiZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRkKS4iXCI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIkV4ZWN1dGVcIj48L2Zvcm0+IjsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAic2RiIikge2VjaG8gIjxwcmU+IjsgdmFyX2R1bXAodW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkcikpKTsgZWNobyAiPC9wcmU+Ijt9DQogIGVsc2VpZiAoJGZ0ID09ICJjb2RlIikgew0KICAgIGlmIChlcmVnKCJwaHAiLiJCQiAyLiguKikgYXV0by1nZW5lcmF0ZWQgY29uZmlnIGZpbGUiLCRyKSkgew0KICAgICAgJGFyciA9IGV4cGxvZGUoIlxuIiwkcik7DQogICAgICBpZiAoY291bnQoJGFyciA9PSAxOCkpIHsNCiAgICAgICAgaW5jbHVkZSgkZC4kZik7DQogICAgICAgIGVjaG8gIjxiPnBocEJCIGNvbmZpZ3VyYXRpb24gaXMgZGV0ZWN0ZWQgaW4gdGhpcyBmaWxlITxicj4iOw0KICAgICAgICBpZiAoJGRibXMgPT0gIm15c3FsNCIpIHskZGJtcyA9ICJteXNxbCI7fQ0KICAgICAgICBpZiAoJGRibXMgPT0gIm15c3FsIikge2VjaG8gIjxhIGhyZWY9XCIiLiRzdXJsLiJ4PXNxbCZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkZGJob3N0KS4iJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJGRidXNlcikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkZGJwYXNzd2QpLiImc3FsX3BvcnQ9MzMwNiZzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRkYm5hbWUpLiJcIj48Yj48dT5Db25uZWN0IHRvIERCPC91PjwvYj48L2E+PGJyPjxicj4iO30NCiAgICAgICAgZWxzZSB7ZWNobyAiQnV0LCB5b3UgY2FuJ3QgY29ubmVjdCB0byBmb3J1bSBzcWwtYmFzZSwgYmVjYXVzZSBkYi1zb2Z0d2FyZT1cIiIuJGRibXMuIlwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgIi4kc2hfbmFtZS4iLiBQbGVhc2UsIHJlcG9ydCB1cyBmb3IgZml4LiI7fQ0KICAgICAgICBlY2hvICJQYXJhbWV0ZXJzIGZvciBtYW51YWwgY29ubmVjdDo8YnI+IjsNCiAgICAgICAgJGNmZ3ZhcnMgPSBhcnJheSgiZGJtcyI9PiRkYm1zLCJkYmhvc3QiPT4kZGJob3N0LCJkYm5hbWUiPT4kZGJuYW1lLCJkYnVzZXIiPT4kZGJ1c2VyLCJkYnBhc3N3ZCI9PiRkYnBhc3N3ZCk7DQogICAgICAgIGZvcmVhY2ggKCRjZmd2YXJzIGFzICRrPT4kdikge2VjaG8gaHRtbHNwZWNpYWxjaGFycygkaykuIj0nIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iJzxicj4iO30NCiAgICAgICAgZWNobyAiPC9iPjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsNCiAgICAgIH0NCiAgICB9DQogICAgZWNobyAiPGRpdiBzdHlsZT1cImJvcmRlciA6IDBweCBzb2xpZCAjRkZGRkZGOyBwYWRkaW5nOiAxZW07IG1hcmdpbi10b3A6IDFlbTsgbWFyZ2luLWJvdHRvbTogMWVtOyBtYXJnaW4tcmlnaHQ6IDFlbTsgbWFyZ2luLWxlZnQ6IDFlbTsgYmFja2dyb3VuZC1jb2xvcjogIi4kaGlnaGxpZ2h0X2JhY2tncm91bmQgLiI7XCI+IjsNCiAgICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtAb2JfY2xlYW4oKTt9DQogICAgaGlnaGxpZ2h0X2ZpbGUoJGQuJGYpOw0KICAgIGlmICghZW1wdHkoJHdoaXRlKSkge2JvZ2VsZXhpdCgpO30NCiAgICBlY2hvICI8L2Rpdj4iOw0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJkb3dubG9hZCIpIHsNCiAgICBAb2JfY2xlYW4oKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7DQogICAgaGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5maWxlc2l6ZSgkZC4kZikpOw0KICAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmLiJcIjsiKTsNCiAgICBlY2hvICRyOw0KICAgIGV4aXQ7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gIm5vdGVwYWQiKSB7DQogICAgQG9iX2NsZWFuKCk7DQogICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW4iKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZi4iLnR4dFwiOyIpOw0KICAgIGVjaG8oJHIpOw0KICAgIGV4aXQ7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImltZyIpIHsNCiAgICAkaW5mID0gZ2V0aW1hZ2VzaXplKCRkLiRmKTsNCiAgICBpZiAoISR3aGl0ZSkgew0KICAgICAgaWYgKGVtcHR5KCRpbWdzaXplKSkgeyRpbWdzaXplID0gNTA7fQ0KICAgICAgJHdpZHRoID0gJGluZlswXS8xMDAqJGltZ3NpemU7DQogICAgICAkaGVpZ2h0ID0gJGluZlsxXS8xMDAqJGltZ3NpemU7DQogICAgICBlY2hvICI8Y2VudGVyPjxiPlNpemU6PC9iPiZuYnNwOyI7DQogICAgICAkc2l6ZXMgPSBhcnJheSgiMTAwIik7DQogICAgICBmb3JlYWNoICgkc2l6ZXMgYXMgJHYpIHsNCiAgICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWltZyZkPSIudXJsZW5jb2RlKCRkKS4iJmltZ3NpemU9Ii4kdi4iXCI+IjsNCiAgICAgICAgaWYgKCRpbWdzaXplICE9ICR2ICkge2VjaG8gJHY7fQ0KICAgICAgICBlbHNlIHtlY2hvICI8dT4iLiR2LiI8L3U+Ijt9DQogICAgICAgIGVjaG8gIjwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICAgfQ0KICAgICAgZWNobyAiPGJyPjxicj48aW1nIHNyYz1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWltZyZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB3aWR0aD1cIiIuJHdpZHRoLiJcIiBoZWlnaHQ9XCIiLiRoZWlnaHQuIlwiIGJvcmRlcj1cIjFcIj48L2NlbnRlcj4iOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIEBvYl9jbGVhbigpOw0KICAgICAgJGV4dCA9IGV4cGxvZGUoJGYsIi4iKTsNCiAgICAgICRleHQgPSAkZXh0W2NvdW50KCRleHQpLTFdOw0KICAgICAgaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJGluZlsibWltZSJdKTsNCiAgICAgIHJlYWRmaWxlKCRkLiRmKTsNCiAgICAgIGV4aXQ7DQogICAgfQ0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJlZGl0Iikgew0KICAgaWYgKCFlbXB0eSgkc3VibWl0KSkNCiAgIHsNCiAgICBpZiAoJGZpbGVzdGVhbHRoKSB7JHN0YXQgPSBzdGF0KCRkLiRmKTt9DQogICAgJGZwID0gZm9wZW4oJGQuJGYsInciKTsNCiAgICBpZiAoISRmcCkge2VjaG8gIjxiPkNhbid0IHdyaXRlIHRvIGZpbGUhPC9iPiI7fQ0KICAgIGVsc2UNCiAgICB7DQogICAgIGVjaG8gIjxiPlNhdmVkITwvYj4iOw0KICAgICBmd3JpdGUoJGZwLCRlZGl0X3RleHQpOw0KICAgICBmY2xvc2UoJGZwKTsNCiAgICAgaWYgKCRmaWxlc3RlYWx0aCkge3RvdWNoKCRkLiRmLCRzdGF0WzldLCRzdGF0WzhdKTt9DQogICAgICRyID0gJGVkaXRfdGV4dDsNCiAgICB9DQogICB9DQogICAkcm93cyA9IGNvdW50KGV4cGxvZGUoIlxyXG4iLCRyKSk7DQogICBpZiAoJHJvd3MgPCAxMCkgeyRyb3dzID0gMTA7fQ0KICAgaWYgKCRyb3dzID4gMzApIHskcm93cyA9IDMwO30NCiAgIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIng9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWVkaXQmZD0iLnVybGVuY29kZSgkZCkuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIlNhdmVcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInJlc2V0XCIgdmFsdWU9XCJSZXNldFwiPiZuYnNwOzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgb25jbGljaz1cImxvY2F0aW9uLmhyZWY9JyIuYWRkc2xhc2hlcygkc3VybC4ieD1scyZkPSIuc3Vic3RyKCRkLDAsLTEpKS4iJztcIiB2YWx1ZT1cIkJhY2tcIj48YnI+PHRleHRhcmVhIG5hbWU9XCJlZGl0X3RleHRcIiBjb2xzPVwiMTIyXCIgcm93cz1cIiIuJHJvd3MuIlwiPiIuaHRtbHNwZWNpYWxjaGFycygkcikuIjwvdGV4dGFyZWE+PC9mb3JtPiI7DQogIH0NCiAgZWxzZWlmICghZW1wdHkoJGZ0KSkge2VjaG8gIjxjZW50ZXI+PGI+TWFudWFsbHkgc2VsZWN0ZWQgdHlwZSBpcyBpbmNvcnJlY3QuIElmIHlvdSB0aGluaywgaXQgaXMgbWlzdGFrZSwgcGxlYXNlIHNlbmQgdXMgdXJsIGFuZCBkdW1wIG9mIFwkR0xPQkFMUy48L2I+PC9jZW50ZXI+Ijt9DQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+VW5rbm93biBleHRlbnNpb24gKCIuJGV4dC4iKSwgcGxlYXNlLCBzZWxlY3QgdHlwZSBtYW51YWxseS48L2I+PC9jZW50ZXI+Ijt9DQp9DQplY2hvICI8L2Rpdj5cbiI7DQp9DQp9DQplbHNlIHsNCkBvYl9jbGVhbigpOw0KJGltYWdlcyA9IGFycmF5KA0KImFycm93X2x0ciI9Pg0KIlIwbEdPRGxoSmdBV0FJQUJBUC8vL3dBQUFDSDVCQUhvQXdFQUxBQUFBQUFtQUJZQUFBSXZqSStweSswUEY0aTBnVnZ6dVZ4WERub1FTSXJVWkdab2VyS2YyOEtqUE5QT2FrdTVSZlordVFzS2g4UmlvZ0FBT3c9PSIsDQoiYmFjayI9Pg0KIlIwbEdPRGxoRkFBVUFLSUFBQUFBQVAvLy85M2QzY0RBd0lhR2hnUUVCUC8vL3dBQUFDSDVCQUVBQUFZQUxBQUFBQUFVQUJRQUFBTTgiLg0KImFMcmMvakRLU1dXcGpWeXNTTmlZSjRDVU9CSm9xam5pSUx6d3V6THRZTi8zekJTRXJmNmtCVytnS1JpUFJnaFBoK0VGSzBtT1VFcXQiLg0KIldnMEpBRHM9IiwNCiJidWZmZXIiPT4NCiJSMGxHT0RsaEZBQVVBS0lBQUFBQUFQLy8vL2o0K04zZDNjek16TEt5c29hR2h2Ly8veUg1QkFFQUFBY0FMQUFBQUFBVUFCUUFBQU5vIi4NCiJlTHJjcmliRzkweTRGMUFtdTUrTmhZMmt4bDJDTUt3clFSU0d1VmpwNExtd0RBV3FpQUdGWENoZyt4aG5SQitwdExPaGFpMWNyRW1EIi4NCiJEbHd2NGNFQzQ2bWkyWWdKUUtheHNFR0RGbm5Hd1dEVEV6ajlqclBSZGJodUc4Q3IvMklOWklPRWhYc2JEd2tBT3c9PSIsDQoiY2hhbmdlIj0+DQoiUjBsR09EbGhGQUFVQU1RZkFMM2hqN25YK3BxbzFlankvZjdZQWNUYis4dmgrNkZ0SDU2V1p0dnIvUkFRRVplY3g5TGwvUFg2L3YzKyIuDQoiLzNlSHQ2cTg4ZUh1L1prZkgzeVZ5SXVRdCs3Mi9rT205OWZvL1A4QVptNTdya0dTNEhlejZwaWw5b2VwM0dabVp2Ly8veUg1QkFFQSIuDQoiQUI4QUxBQUFBQUFVQUJRQUFBV2Y0Q2VPWkdtZTZObXRMT3VsWCtjNFRWTlZRN2U5cUZ6Zmc0SEZvbmtkSkE1UzU0Y2JSQW9GeUVPQyIuDQoid1NpVXRtWWtrcmd3T0FlQTV6cnFhTGxkQmlOTUlKZUQyNjZYWVRnUURtNVJ4OG1kRytvQWJTWWRhSDRHYTNjOEpCTUphWFFHQlFnQSIuDQoiQ0hrakU0YVFrUTBBbFNJVGFuK1pBUXFraWlRUGoxQUZBYU1LRUtZakQzOVFyS3dLQWE4bkdRSzhBZ3UvQ3hUQ3NDTWV4c2ZJeGpETCIuDQoiek1zaEFEcz0iLA0KImRlbGV0ZSI9Pg0KIlIwbEdPRGxoRkFBVUFPWlpBUHo4L05QRnlOZ0hMczBZT3ZQejgvYjI5c2FjcE5YVjFmWDE5Y3dYT2ZEdzhLZW5wL241K2V0Z2V1bnAiLg0KIjZkY0dMTU1wUnVycTZwS1NrdHZiMisvdjcrMXdoM1IwZFBuUDE3aUFpcHh5ZWw5Zlg3ZGpjc2NTTTkzZDNaR1JrZUVzVGV2ZDRMQ3ciLg0KInNHUmtaR3BPVStJZlErRVFOb2g2ZmRJY1BlSGg0WVdGaGJKUVl2THk4dWkreG01dWJzeGNjT3g4a2NNNFV0WTlXZUFkUVltSmlmV3YiLg0KInZIeDhmTW5KeWNNM1VmM3Y4clJ1ZTk4T05iT3pzOVlGSzVTVWxLWW9QK1RrNU4wb1N1Zm41N1pHV3NRclI5a0lMNUNRa09QajQyVmwiLg0KIlplQVBOdWRBWDlzS01QdjcrMTVRVTV1Ym0zOS9mOGU1dTR4aWF0cmEydWJLejhQRHcrcGZlZTkvbE1LMHQ4MXJmZDhBS2YvLy93QUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDUiLg0KIkJBRUFBRmtBTEFBQUFBQVVBQlFBQUFlc2dGbUNnNFNGaG9lSWhpVWZJSW1JTWxnUUI0NkdMQWxZUWthRlZWaFNBSVpMVDVjYkVZSTQiLg0KIlNUbzVNeE9maFF3QkExZ1lDaGNrUUJrMU93aUlBTEFDTGtneEppbFRCSTY5UkZoREZoNEhESlJaVkZnUFBGQlIwRmtOV0RkTUhBOEciLg0KIkJaVGFNQ0lTVmdNQzRJa1ZXQ2NhUFNpOTZPcUdORmhLSTA0ZGdyMFFXRmNLREwzQTR1T0lqVlpaQUJ4UUlXREJMa0lFUXJSb1FzSFEiLg0KImp3VkZIQmdpRUdRRklnUWFzWWtjU2JKUUlBQTciLA0KImRvd25sb2FkIj0+DQoiUjBsR09EbGhGQUFVQUxNSUFBRC9BQUNBQUlBQUFNREF3SDkvZi84QUFQLy8vd0FBQVAvLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFnQUxBQUFBQUFVQUJRQUFBUk9FTWxKcTcwNFV5R092a0xoZlZVNGtwT0pTcHg1bkY5WWlDdExmMFN1SDdwdSIuDQoiRVlPZ2NCZ2t3QWlHcEhLWnpCMkp4QURBU1FGQ2lkUUpzTWZkR3FzREpuT1FsWFRQMzhwcnpXYlgzcWdJQURzPSIsDQoiZm9yd2FyZCI9Pg0KIlIwbEdPRGxoRkFBVUFQSUFBQUFBQVAvLy85M2QzY0RBd0lhR2hnUUVCUC8vL3dBQUFDSDVCQUVBQUFZQUxBQUFBQUFVQUJRQUFBTTgiLg0KImFMcmMvakRLMlFwOXhWNVdpTjVHNTBGWmFSTEQ2SWhFNjZMcHQzUkRiZDlDUUZTRTRQKytRVzdIZTdVS1BoMElxVncybDBSUVNFcXQiLg0KIldxc0pBRHM9IiwNCiJob21lIj0+DQoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLytycTZ0M2QzY3pNekxLeXNvYUdobVptWmdRRUJQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFVQUJRQUFBUitNTWs1VFRXSTZpcHlNb08zY1VXUmdlSm9DQ2FMb0tPMG1xMFp4ak5TQkRXUyIuDQoia3JxQXNMZko3WVFCbDR0aVJDWUZTcFBNZFJSQ29RT2lMNGk4Q2daZ2swOVdmV0xCWVpIQjZVV2pDZXF1d0VESHVPRVZLM1F0Z04vaiIuDQoiVndNckJEWnZnRitDaEhhR2VZaUNCUVlIQ0g4VkJKYVdkQWVTbDVZaVc1K2dvQklSQURzPSIsDQoibW9kZSI9Pg0KIlIwbEdPRGxoSFFBVUFMTUFBQUFBQVAvLy82Q2dwTjNkM2N6TXpJYUdobVptWmw5ZlgvLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBZEFCUUFBQVNCRU1sSnE3MDQ2MW02LytBSFpNVWduR2lxbmlOV0hIQXN6M0Y3RlVHdTczeE8iLg0KIjJCWmN3R0RvRVhrL1VxNElDQUNlUTZmem1YVGxuczBkZGxlOTliN2NGdllwRVI1NVoxMFh5MWxLdDh3cG9Jc0FDcmRhcUJwWUVZSy8iLg0KImRIMUxSV2lFZTBwUlRYQnZWSHdVZDNvNmVENk9IQVNYbUptYW1KVVNZNStnbnh1anBCSVJBRHM9IiwNCiJzZWFyY2giPT4NCiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vK3JxNnQzZDNjek16TURBd0xLeXNvYUdobmQzZDJabVpsOWZYMDFOVFNrcEtRUUVCUC8vIi4NCiIvd0FBQUNINUJBRUFBQTRBTEFBQUFBQVVBQlFBQUFTbjBNbDVxajB6NXhyNitKWkdlVVpwSElxUk5PSVJmSVlpeSthNnZjT3BIT2FwIi4NCiJzNUlLUWNjejhYZ0s0RUdnUXFXTXZrclNzY3lsaG9hRlZtdVpMZ1VEQW5aeEVCTU9EU25ya2hpU0NaNENHclVXTUErTExEeHVTSHNEIi4NCiJBa040QzNzZkJYMTBWSGFCSjRRZkE0ZUlVNHBpalFjRm1DVm9Oa0ZsZ2djTVJTY05TVUNkSnlob0Rhc05aNU1URFZzWEJ3bHZpUm1yIi4NCiJDYnE3QzZzSXJxYXdyS3dUdjY4aXlBNnJEaEVBT3c9PSIsDQoic2V0dXAiPT4NCiJSMGxHT0RsaEZBQVVBTVFBQUFBQUFQLy8vL2o0K09QajQ5M2QzY3pNek1EQXdMS3lzcGFXbG9hR2huZDNkMlptWmw5ZlgwMU5UVUpDIi4NCiJRaHdjSFAvLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBIi4NCiJBQkFBTEFBQUFBQVVBQlFBQUFXVklDU0tpa0tXYURtdVNoQ1VianpNd0VvR2hWdnNmSEVFTlJZT2dlZ2xqa2VnMFBGNEtCSUZSTUlCIi4NCiJxQ2FDSjRlSUdRVm9JVldzVGZRb1hNZm9VZm1NWnJnWjJHTkRQR0lJN2dKRExZRXJ3RzF2Z1c4Q0NRdHpnSGlKQW5hRmh5dDJkd1FFIi4NCiJPd2NNWm9aMGtKS1VsWmVPZFFLYlBnZWRqWm1obkFjSmxxYUlxVWVzbUlpa3BFaXhueUpodWxVTWhnMjRhU082WXlFQU93PT0iLA0KInNtYWxsX2RpciI9Pg0KIlIwbEdPRGxoRXdBUUFMTUFBQUFBQVAvLy81eWNBTTdPWS8vL25QLy96di9PblBmMzkvLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBVEFCQUFBQVJSRU1sSnE3MDQ2eXA2QnhzaUhFVkJFQUtZQ1VQckRwN0hsWFJkRW9NcUNlYnAiLg0KIi80WWNoZmZ6R1FoSDRZUllQQjJET2xIUGlLd3FkMVBxOHlyVlZnM1FZZUg1UllLNXJKZmFGVVVBM3ZCNGZCSUJBRHM9IiwNCiJzbWFsbF91bmsiPT4NCiJSMGxHT0RsaEVBQVFBSGNBQUNINUJBRUFBSlVBTEFBQUFBQVFBQkFBaHdBQUFJZXAzQkU5bWxsaWMzQjVpVnBqZE12aC9NTGMreTFVIi4NCiJwOVBtL0dWdWZjN2ovTXpWLzlYbS9FT205OWJuL05qcC9hN1ErdFRtL0xIUytlWHcvdDNyL05ucC9kam8vTnJxL2ZqNy85dnEvTmZvIi4NCiIvTWJlKzhyaC9NbmcrN2pXK3J2WStyN1orN1hSOWREay9OSGsvTkxsL0xUVStyblgrOHppL0xiVisrZngvZTcyL3ZIMy92TDQvdTMxIi4NCiIvZTMxL3VEdS9kenIvT3J6L2VIdS9mWDYvdkg0L3YvLy8vdisvM2V6NnZmNy8vVDUva0dTNFB2OS83WFYrckhUK3IvYityemErdlA0Ii4NCiIvdXowL3Vyei91NzEvdXZ6L2RUbi9NL2svTjNzL2R2ci9jamcrOFBkKzhIYytzZmYrOFRlKy9EMi9yWEk4ckhGOGJyTTg3Zko4bm1QIi4NCiJ3cjNOODYvRDhLdkI4RjluZUVGb3RFQm50RU5wdEVOcHRTeFVweDFJb0RsZnJUUmNyWmVleVphY3hwbWh6SXVSdHBXWnhJdU91S3F6Ii4NCiI5Wk9Xd1g2SXMzV0l1NWltMDdySjlKMnQyWmVrMG01N3JwcW8xbktDdFVWcnRZaXIzdmY2LzQ2djRZdXU0V1p2ZnI3UDZzUFM2c0RRIi4NCiI2NlhCNmNqWjhhL0s3OS9zL2Ribi9lenovY3pkOW1OMGpLVEI2YWkvNzZXOTduaVh6MkdDd1Y2QXdVZHN0WHlWeUdTRHdubVl6NGlvIi4NCiIyNE9pMWEzQjQ1U3k0YWU5NDRDY3o0U2oxbjJHbGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQWpuQUN0VkNrQ3c0SnhKQVFRcUZCakF4bzBNTkdxc0FCUUFoNkNGQTNuazBNSGlSUkVWRGh6c29MUXdBSjBnVDRUb2VjU0hBWU16Ii4NCiJhUWdvRE5DQ1NCNEVBbkltQ2lTQmpVeUdMb2JnWEJUcGtBQTVJNnBnbVNrRHo1Y3VNU3o4eVdsQXlvQ1pGR2I0U1FLaEFTTUJYSnBNIi4NCiJ1U3JRRVF3a0dqWWtRQ1RBeTZBbFVNaFdrbFFCdzRNRWhnU0E2WFBnUnhTNWlpNDBLTEZnaTRCR1RFS0FzQ0tYaWhFU0N6cnNnU1FDIi4NCiJ5SWtVVitTcU9ZTENBNGNzQXVwODZPR0RrTnc0QnBRNE9hQkZnQjBURXlJVUtxRHdUUnM0YTl5TUNTT21EQm95WnU0c0pLQ2d3SURqIi4NCiJ5QXNva0JrUUFEcz0iLA0KIm11bHRpcGFnZSI9PiJSMGxHT0RsaENnQU1BSkVEQVAvLy8vLzNtUUFBQUFBQUFDSDVCQUVBQUFNQUxBQUFBQUFLQUF3QUFBSWozSVIiLg0KInBKaENPRG5vdmlkQW92QmRNenpraXhsWGRsSTJvWnBKV0VzU3l3THpSVUFBQU93PT0iLA0KInNvcnRfYXNjIj0+DQoiUjBsR09EbGhEZ0FKQUtJQUFBQUFBUC8vLzlUUXlJQ0FnUC8vL3dBQUFBQUFBQUFBQUNINUJBRUFBQVFBTEFBQUFBQU9BQWtBQUFNYSIuDQoiU0xyY1BjRTlHS1VhUWxRNXNONVBsb0ZMSjM1T29LNnE1U1lBT3c9PSIsDQoic29ydF9kZXNjIj0+DQoiUjBsR09EbGhEZ0FKQUtJQUFBQUFBUC8vLzlUUXlJQ0FnUC8vL3dBQUFBQUFBQUFBQUNINUJBRUFBQVFBTEFBQUFBQU9BQWtBQUFNYiIuDQoiU0xyY09qQkNCNFVWSVRneUx0NWNoMm1nU0paREJpN3A2aElKQURzPSIsDQoic3FsX2J1dHRvbl9kcm9wIj0+DQoiUjBsR09EbGhDUUFMQVBjQUFBQUFBSUFBQUFDQUFJQ0FBQUFBZ0lBQWdBQ0FnSUNBZ01EQXdQOEFBQUQvQVAvL0FBQUEvLzhBL3dELyIuDQoiLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNd0FBWmdBQW1RQUF6QUFBL3dBekFBQXpNd0F6WmdBem1RQXp6QUF6L3dCbSIuDQoiQUFCbU13Qm1aZ0JtbVFCbXpBQm0vd0NaQUFDWk13Q1paZ0NabVFDWnpBQ1ovd0RNQUFETU13RE1aZ0RNbVFETXpBRE0vd0QvQUFELyIuDQoiTXdEL1pnRC9tUUQvekFELy96TUFBRE1BTXpNQVpqTUFtVE1BekRNQS96TXpBRE16TXpNelpqTXptVE16ekRNei96Tm1BRE5tTXpObSIuDQoiWmpObW1UTm16RE5tL3pPWkFET1pNek9aWmpPWm1UT1p6RE9aL3pQTUFEUE1NelBNWmpQTW1UUE16RFBNL3pQL0FEUC9NelAvWmpQLyIuDQoibVRQL3pEUC8vMllBQUdZQU0yWUFabVlBbVdZQXpHWUEvMll6QUdZek0yWXpabVl6bVdZenpHWXovMlptQUdabU0yWm1abVptbVdabSIuDQoiekdabS8yYVpBR2FaTTJhWlptYVptV2FaekdhWi8yYk1BR2JNTTJiTVptYk1tV2JNekdiTS8yYi9BR2IvTTJiL1ptYi9tV2IvekdiLyIuDQoiLzVrQUFKa0FNNWtBWnBrQW1aa0F6SmtBLzVrekFKa3pNNWt6WnBrem1aa3p6Smt6LzVsbUFKbG1NNWxtWnBsbW1abG16SmxtLzVtWiIuDQoiQUptWk01bVpacG1abVptWnpKbVovNW5NQUpuTU01bk1acG5NbVpuTXpKbk0vNW4vQUpuL001bi9acG4vbVpuL3pKbi8vOHdBQU13QSIuDQoiTTh3QVpzd0FtY3dBek13QS84d3pBTXd6TTh3elpzd3ptY3d6ek13ei84eG1BTXhtTTh4bVpzeG1tY3htek14bS84eVpBTXlaTTh5WiIuDQoiWnN5Wm1jeVp6TXlaLzh6TUFNek1NOHpNWnN6TW1jek16TXpNLzh6L0FNei9NOHovWnN6L21jei96TXovLy84QUFQOEFNLzhBWnY4QSIuDQoibWY4QXpQOEEvLzh6QVA4ek0vOHpadjh6bWY4enpQOHovLzltQVA5bU0vOW1adjltbWY5bXpQOW0vLytaQVArWk0vK1paditabWYrWiIuDQoielArWi8vL01BUC9NTS8vTVp2L01tZi9NelAvTS8vLy9BUC8vTS8vL1p2Ly9tZi8velAvLy95SDVCQUVBQUJBQUxBQUFBQUFKQUFzQSIuDQoiQUFnNEFQOEpSRUZRNEQrQ0NCT2k0TWF3SVRlRkNnL2lRaEVQeGNTQmxGQ29RNUZ4NE1TS3YxQmdSR0dNbzBpSkZDMmVoSGpTb010LyIuDQoiQVFFQU93PT0iLA0KInNxbF9idXR0b25fZW1wdHkiPT4NCiJSMGxHT0RsaENRQUtBUGNBQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdJQ0FnTURBd1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4NCiIvLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU13QUFaZ0FBbVFBQXpBQUEvd0F6QUFBek13QXpaZ0F6bVFBenpBQXovd0JtIi4NCiJBQUJtTXdCbVpnQm1tUUJtekFCbS93Q1pBQUNaTXdDWlpnQ1ptUUNaekFDWi93RE1BQURNTXdETVpnRE1tUURNekFETS93RC9BQUQvIi4NCiJNd0QvWmdEL21RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tIi4NCiJaak5tbVRObXpETm0vek9aQURPWk16T1paak9abVRPWnpET1ovelBNQURQTU16UE1aalBNbVRQTXpEUE0velAvQURQL016UC9aalAvIi4NCiJtVFAvekRQLy8yWUFBR1lBTTJZQVptWUFtV1lBekdZQS8yWXpBR1l6TTJZelptWXptV1l6ekdZei8yWm1BR1ptTTJabVptWm1tV1ptIi4NCiJ6R1ptLzJhWkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvIi4NCiIvNWtBQUprQU01a0FacGtBbVprQXpKa0EvNWt6QUprek01a3pacGt6bVprenpKa3ovNWxtQUpsbU01bG1acGxtbVpsbXpKbG0vNW1aIi4NCiJBSm1aTTVtWlpwbVptWm1aekptWi81bk1BSm5NTTVuTVpwbk1tWm5NekpuTS81bi9BSm4vTTVuL1pwbi9tWm4vekpuLy84d0FBTXdBIi4NCiJNOHdBWnN3QW1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaIi4NCiJac3labWN5WnpNeVovOHpNQU16TU04ek1ac3pNbWN6TXpNek0vOHovQU16L004ei9ac3ovbWN6L3pNei8vLzhBQVA4QU0vOEFadjhBIi4NCiJtZjhBelA4QS8vOHpBUDh6TS84elp2OHptZjh6elA4ei8vOW1BUDltTS85bVp2OW1tZjltelA5bS8vK1pBUCtaTS8rWlp2K1ptZitaIi4NCiJ6UCtaLy8vTUFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vL3lINUJBRUFBQkFBTEFBQUFBQUpBQW9BIi4NCiJBQWdqQVA4SlJFRlE0RCtDQ0JPaU1NaFFvY0tERUJjdWpFaVJvc1NCRmpGZW5PaHdZVUFBT3c9PSIsDQoic3FsX2J1dHRvbl9pbnNlcnQiPT4NCiJSMGxHT0RsaERRQU1BUGNBQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdJQ0FnTURBd1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4NCiIvLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU13QUFaZ0FBbVFBQXpBQUEvd0F6QUFBek13QXpaZ0F6bVFBenpBQXovd0JtIi4NCiJBQUJtTXdCbVpnQm1tUUJtekFCbS93Q1pBQUNaTXdDWlpnQ1ptUUNaekFDWi93RE1BQURNTXdETVpnRE1tUURNekFETS93RC9BQUQvIi4NCiJNd0QvWmdEL21RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tIi4NCiJaak5tbVRObXpETm0vek9aQURPWk16T1paak9abVRPWnpET1ovelBNQURQTU16UE1aalBNbVRQTXpEUE0velAvQURQL016UC9aalAvIi4NCiJtVFAvekRQLy8yWUFBR1lBTTJZQVptWUFtV1lBekdZQS8yWXpBR1l6TTJZelptWXptV1l6ekdZei8yWm1BR1ptTTJabVptWm1tV1ptIi4NCiJ6R1ptLzJhWkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvIi4NCiIvNWtBQUprQU01a0FacGtBbVprQXpKa0EvNWt6QUprek01a3pacGt6bVprenpKa3ovNWxtQUpsbU01bG1acGxtbVpsbXpKbG0vNW1aIi4NCiJBSm1aTTVtWlpwbVptWm1aekptWi81bk1BSm5NTTVuTVpwbk1tWm5NekpuTS81bi9BSm4vTTVuL1pwbi9tWm4vekpuLy84d0FBTXdBIi4NCiJNOHdBWnN3QW1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaIi4NCiJac3labWN5WnpNeVovOHpNQU16TU04ek1ac3pNbWN6TXpNek0vOHovQU16L004ei9ac3ovbWN6L3pNei8vLzhBQVA4QU0vOEFadjhBIi4NCiJtZjhBelA4QS8vOHpBUDh6TS84elp2OHptZjh6elA4ei8vOW1BUDltTS85bVp2OW1tZjltelA5bS8vK1pBUCtaTS8rWlp2K1ptZitaIi4NCiJ6UCtaLy8vTUFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vL3lINUJBRUFBQkFBTEFBQUFBQU5BQXdBIi4NCiJBQWd6QUZFSUhFaXdvTUdEQ0JINlcwZ3RvVUIvLzFCRU5PaVAyc0tFQ3pOZU5JaXFZMGQvRkJmK3kwalI0OGVRR1VjNkpCZ1FBRHM9IiwNCiJ1cCI9Pg0KIlIwbEdPRGxoRkFBVUFMTUFBQUFBQVAvLy8vajQrT1BqNDkzZDNjek16TEt5c29hR2hrMU5UZi8vL3dBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBa0FMQUFBQUFBVUFCUUFBQVIwTU1sSnE3MzRuczFQbmtjZ2pnWHdoY05RcklWaG1Gb256eHdRam5pZTI3amciLg0KIis0UWd5M1hnQlg0SW9IRGxNaFJ2Z2dGaUdpU3dXczVYeURmdFdwbEVKKzlIUUN5eDJjMVlFRFJmd3dmeHRvcDRwNTNQd0xLT2p2dlYiLg0KIklYdGRnd2dkUEdkWWZuZzFJVmVKYVRJQWtwT1VsWllmSHhFQU93PT0iLA0KIndyaXRlIj0+DQoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLzkzZDNjek16TEt5c29hR2htWm1abDlmWHdRRUJQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFVQUJRQUFBUjBNTWxKcXl6RmFscUVRSnVHRVFTQ25XZzZGb2dwa0hBTUY0SEFKc1doNy96ZSIuDQoiRVFZUUxVQXNHZ00wV3d0M2JDSmZRU0Z4MTB5eUJsSm44UmZFTWdNOVgrM3FIV3E1aUVENXlDc01DbDExMWtuRHB1WGZZbHMrSUs2MSIuDQoiTFhkK1dXRUhMVWQvVG9KRlpRT09qNUNSamlDQmxaYVhJQkVBT3c9PSIsDQoiZXh0X2FzcCI9Pg0KIlIwbEdPRGRoRUFBUUFMTUFBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ01EQXdJQ0FnUDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLg0KIi8vLy8veXdBQUFBQUVBQVFBQUFFU3ZESVNhc0YyTjZETU5BUzhCeGZsMVVpT1pZZTlhVXdncERUcTZxUC9JWDBPejdBWFUvMWVSZ0kiLg0KIkQ2SFBoempTZUxZZFlhYnNEQ1dNWndoZzNXV3RLSzRRck1Ib2hDQVMraEFCQURzPSIsDQoiZXh0X21wMyI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBWUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy80Q0FnTURBd0lDQUFQLy9BQUFBQUFBQUFBTlUiLg0KImFHclM3aXVLUUdzWUlxcHA2UWlaUkRRV1lBSUxRUVNBMmcybzRRb0FTSEd3dkJiQU4zR1gxcVhBK3IxYUJRSFJaSE1FRFNZQ3ozZmMiLg0KIklHdEdUOHdBVXdsdHp3V05XUlYzTERueFlNMXViNkduZUR3QkFEcz0iLA0KImV4dF9hdmkiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vNENBZ01EQXdQOEFBQUFBQUFBQUFBQUFBQU5NIi4NCiJXRnJTN2l1S1FHc1lJcXBwNlFpWjFGRkFDWWlqQjRSTXFqYlkwMUR3V2c0NGdBc3JQNVFGazI0SHVPaE9ESndTVS9JaEJZVGNqeGU0Ii4NCiJQWVhDeWcrVjJpNDRYZVJtU2ZZcXNHaEFBZ0E3IiwNCiJleHRfY2dpIj0+DQoiUjBsR09EbGhFQUFRQUdZQUFDSDVCQUVBQUV3QUxBQUFBQUFRQUJBQWhnQUFBSnRxQ0hkM2Q3aU5HYStITXU3ZXI5R2lDNitJT091OSIuDQoiRGtKQVBxeUZRcWwvTi9EbGhzeXlmZTY3QWYvU0ZQLzhrZi85bEQ5RVR2L1BDdi9jUS8vZU52L1hJZi9aS1AvUkR2L2JMZi9jTWFoNiIuDQoiTFBQWVJ2emdSK3ZneDd5Vk12L2xVdi9tVHYvZk9mL01Bdi9tY2YvTkEvL3FpZi9NQVAvVEZmL3hwN3VaVmYvV0lQL09CcXQvSHYvUyIuDQoiRXYvaFArN09PUC9XSHYvd2JITmZQNFZ6Vjd1UEZ2L3BWLy9yWGYveWNmL3pkdi8wZVVOSldFTktXc3lrSWs5UldNeXRQLy80aUVwUSIuDQoiWHYvOXFmYnB0UC91WjkzR2lOcTZYV3BSSi8vaVF2N3dzcXVFUXYvalJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWVlZ0V5Q2cwd0JoSWVIQVlxSWpBRXdob3lFQVFRWEJKQ1JoUU11QTVlU2lvb0dJd2FmaTRVTSIuDQoiQmFnTkZCTWNEUjRGUXd3QkFnRUdTQkJFRlN3eE5oQXlHZzZXQWt3Q0JBZ3ZGaVVpT0JFZ05VYzd3NElDTkQ4UEtDRkFPaTBKUE5LRCIuDQoiQWtVbkdUa1JOd01TMzRNQkpCZ2RSa0pMQ0Q3cWdnRVBLeHNKS2lZVEJ3ZUpramhRa2s3QWh4UTlGcWdMTUdCR2tHOEtGQ2c4SktBaSIuDQoiUll0TUFnRUFPdz09IiwNCiJleHRfY21kIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFjQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzRDQWdNREF3QUFBZ0lDQUFQLy9BQUFBQUFOSSIuDQoiZUxyY0p6REtDWWU5K0FvZ0J2bGcrRzJkU0FRQWlwSUQ1WEpESU0rMHpOSkZrZEwzREJnNkhteFdNRUFBaFZsUEJoZ1lkclloRFFDTiIuDQoiZG1yWUFNbjFvbnEvWUtwanZFZ0FBRHM9IiwNCiJleHRfY3BwIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWd2Ly8vd0FBQUFBQWdJQ0FnTURBd0FBQUFBQUFBQUFBQUFOQyIuDQoiV0xQYzlYQ0FTU2NaOE1sS2ljb2JCd1JrRUlrVllXcVQ0RklDb0o1djdjNnMzY3FyQXJ3aW5FLzM0OUZpTm9GdzQ0cnRscWhPTDRSYSIuDQoiRXE3WXJMREU3YTRTQURzPSIsDQoiZXh0X2luaSI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBWUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy84REF3SUNBZ0lDQUFQLy9BQUFBQUFBQUFBTkwiLg0KImFBckIzaW9hTmtLOU1OYkhzNmxCS0lvQ29JMW9VSjRONERDcXFZQnB1TTZocThQM2h3b0VnVTNtYXdFTEJFYVBGaUFVQU1nWXkzVk0iLg0KIlNuRWpnUFZhckhFSGdyQjQzSnZzenNRRUFEcz0iLA0KImV4dF9kaXoiPT4NCiJSMGxHT0RsaEVBQVFBSGNBQUNINUJBRUFBSlVBTEFBQUFBQVFBQkFBaHdBQUFQLy8vMTVwaGNmYjZOTHMvN1BjLytQMC8zSitsOWJzIi4NCiIvNTJudXFqSzUvbi8vL2ovLy83Ly8vci8vMHRybHNQbi84bm4vOG5aNXRybTc5bnUvOC9xLzlYdC85encvOTN3LytqMS85SHIvK0R2Ii4NCiIvZDd2LzczSDBNalUzOXp1Lzlici84bmU4dFhuK0s2L3o4WGovTGpWN2REcC82SzR5OGJsLzVPNDJPejIvN0hXOUp1OTJ1LzkvOFQzIi4NCiIvK0wvLys3Ky8rdjYvKy82LzlINC8rWDYvK1hsNVB6Ly8rL3Q3ZlgwOHZELy8rMy8vL1AvLy9ILy8vUDcvOG5xLzhmcC84VGw5OHpyIi4NCiIvKy96OXZUNCsrbjEvYi9rL2RueS85SHYvK3Y0LzkvMC85ZncvOC91Lzh2dC8rLzA5eFV2WGhRdFc0S1RzMlYxa3c0b1ZUZFlwRFpYIi4NCiJwVnhxaGx4cWlFeGtpbUtCdE1QTDJGdHZqMk9WNmFPdXdwcWx1bHlOM2NuTzF3QUFYUUFBWlNNOGpFNVhqZ0FBYndBQWVVUkJZZ0FBIi4NCiJkQUFBZHpaRWFFOXd3RFpZcG1WdmlSNDlqRzEya0NoRm1nWXVqNisxeGVMbjdOemo2cG0yMG9lcXlwUzIxMlNKcmFDeXhaV3l6N1BXIi4NCiI5Yy9vLzg3bi84RFg3TUhZN3EvSzVMZlg5YXJCMXNybC8yK2Z6cTI5MFUxNHE3ZkN6NmUyeVh1bTMwRmpsQ2xIYzRlWHI2YkkrYlRLIi4NCiI0cmZXK05YZTZPYnkvNVN2eldTSHIrYnI4V3VLclFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQWpnQUNzSnJEUkhTSUNEUTdJTVhEZ0p4OEV2WnVJY2JQQm9vWndiQndPTUFmTW1Zd0JDQTJzRWNOQmpKQ01ZQVRMSU9MaW9rb2NtIi4NCiJDMVFza0FDbEN4Y0dCajdFc05Ib1FBY2lTQ0MxbU5BbWpKZ0dHRUJRb0JIaWdLRU5CamhjQ0JBSXpSb0dGa3dRTU5LbnlnZ1JTUkFnIi4NCiIyQkhwREJVZWV3UlYwUERIQ3A0QlNnancwWkdIekpRY0VWRDRJRUhKellrQmZvNHNlWUdsREJ3Z1RDQUFZdkZFNEtFQkpZSTRVclBGIi4NCiJDeUlJSyt3b1lqTXdRUUk2Q29yOG1LRW54UjBuQWhZS2pISkZRWUVDa3FTa1NhMTY0SU02TGhMUnJyM3d3YUJDdTNrUEZLQ2xka0FBIi4NCiJPdz09IiwNCiJleHRfZG9jIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzhEQXdBQUEvNENBZ0FBQUFBQUFBQUFBQUFOUiIuDQoiV0VyY3JyQ1FRQ3NsUUEyd093ZFhrSUZXTlZCQStubWU0QVpDdW9sblJ3a3dGOVFnRU9QQUZHMjFBK1o0c1FITzk0cjFlSlJUSlZtcSIuDQoiTUlPcnJQU1dXWlJjemE2a2FvbEJDT0IwV294UnVkMEpBRHM9IiwNCiJleHRfZXhlIj0+DQoiUjBsR09EbGhFd0FPQUtJQUFBQUFBUC8vL3dBQXZjYkd4b1NFaFAvLy93QUFBQUFBQUNINUJBRUFBQVVBTEFBQUFBQVRBQTRBQUFNNyIuDQoiV0xUY1RpV1NRYXV0QkVRMWhQK2dsMjFUS0FRQWlvN1M4THhhRzh4MFBiT2NyUWY0dE51OXdhOFdITktLUmw0c2wreTlZQnVBZEVxdCIuDQoieGhJQU93PT0iLA0KImV4dF9oIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWd2Ly8vd0FBQUFBQWdJQ0FnTURBd0FBQUFBQUFBQUFBQUFOQiIuDQoiV0xQYzlYQ0FTU2NaOE1sS0NjQVJSd1ZrRUFLQ0lCS21OcVZycTd3cGJNbWJiYk9ucmdJOEYrcTN3OUdPUU9NUUdaeUpPc3BuTWtLbyIuDQoiV3EvTmtuYmJTZ0FBT3c9PSIsDQoiZXh0X2hwcCI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFndi8vL3dBQUFBQUFnSUNBZ01EQXdBQUFBQUFBQUFBQUFBTkYiLg0KIldMUGM5WENBU1NjWjhNbEtpY29iQndSa0VBR0NJQUtFcWFGcXBiWm5tazQyL2Q0M3lyb0ttTEFEbFBCaXM2THdLTkFGajdqZmFXVlIiLg0KIlVxVWFnbmJMZFphK1lGY0NBRHM9IiwNCiJleHRfaHRhY2Nlc3MiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVlBTEFBQUFBQVFBQkFBZ2dBQUFQOEFBUDhBL3dBQWdJQUFnUC8vQUFBQUFBQUFBQU02Ii4NCiJXRVhXL2s2UkFHc2ptRm9ZZ05CYkV3akRCMjVkR1p6VkNLZ3NSOExoU25wclBRNDA2cGFmbWtEd1V1bUl2SkJvUkFBQWxFdURFd3BKIi4NCiJBQUE3IiwNCiJleHRfaHRtbCI9Pg0KIlIwbEdPRGxoRXdBUUFMTUFBQUFBQVAvLy8ydHJuTTNQL0ZCVmhyUE85bDZJdG95dDB5aGdrK1h5L1dHcDRzWGwvaTZaNG1mZC9ITnoiLg0KImMvLy8veUg1QkFFQUFBOEFMQUFBQUFBVEFCQUFBQVNUOE1sM3FxMW02bm1DLzRHaGJGb1hKRU8xQ0FORFNvY2lHa2JBQ0hpMjBVM1AiLg0KIktJRkdJakFRT0RTaUJXTzVOQXhSUm1UZ2dEZ2ttTTdFNmlpcEhaWUtCVk5RU0JTaWt1a1N3VzRqeW1jdXBZRmdJQnFML01LOEtCRGsiLg0KIkJreDJCWFdEZlg4VEREYUZEQTBLQkFkOWZuSUtIWFlJQkpnSEJRT0hjZytWQ2lrVkE1d0xwWWdiQkt1ckRxeXNueE1PczdTMXN4SVIiLg0KIkFEcz0iLA0KImV4dF9qcGciPT4NCiJSMGxHT0RsaEVBQVFBRE1BQUNINUJBRUFBQWtBTEFBQUFBQVFBQkFBZ3dBQUFQLy8vOERBd0lDQWdJQ0FBUDhBQUFEL0FJQUFBQUNBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSY2NNaEprNzBqNkszRnVGYkdiVUx3SmNVaGpnSGdBa1VxRWdKTkVFQWd4RWNpIi4NCiJDaThBTHNBTGFYQ0dKSzVvMUFHU0JzSUFjQUJnamdDRXdBTUVYcDBCQk1MbC9BNng1V1p0UGZRMmc2KzBqOFZ4KzdiNC9OWnFnZnRkIi4NCiJGeEVBT3c9PSIsDQoiZXh0X2pzIj0+DQoiUjBsR09EZGhFQUFRQUNJQUFDd0FBQUFBRUFBUUFJTC8vLzhBQUFDQWdJREF3TUQvL3dDQWdBQUFBQUFBQUFBRFVDaTYzQ0VneGliSCIuDQoiazBBUXNHMjAwQVFVSkJnQW9NaWhqNWRtSXhuTUp4dHFxMWRkRTBFV09oc0cxNm05TW9vQWlTV0VtVGl1QzRUdzJCQjBMOEZnSUFocyIuDQoiYTAwQWpZWUJiYy9vOUhqTm5pVUFBRHM9IiwNCiJleHRfbG5rIj0+DQoiUjBsR09EbGhFQUFRQUdZQUFDSDVCQUVBQUZBQUxBQUFBQUFRQUJBQWhnQUFBQUJpQUdQTE1tWE1NMHkvSmxmRkxGUzZLMXJHTFdqTyIuDQoiTlNtdUZUV3pHa0M1SUczVE9vLzFYRTdBSngyb0Q1WDdZb1RxVVlyd1YzL2xUSFRhUVhuZlJtREdNWVhyVWpLUUh3QU1BR2ZOUkh6aSIuDQoiVXd3NUNBQXFBRE9aR2thc0xYTFlRZ2hJQkJOM0RWRzJOV25QUm5EV1J3Qk9BQjV3RlFCQkFBQStBRkczTkFrNUJTR0hFVXF3TUFCayIuDQoiQUFBZ0FBQXdBQUJmQURlMEd4ZUxDeFpjREVLNklVdXhLRmpGTEUzQUoySEhNUktpQ1FXQ0FnQm1BQnB0RGcrSENCWmVEQXFGQldERyIuDQoiTXltVUZRcFdCajJmSmhkdkRRaE9CQzZYRjNmZFIwTzZJUjJPRHdBWkFIUFpRQ1NSRWdBU0FEYVhId0FBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWVaZ0ZCUVBBR0Zob2NBZ29JN09nOEpDZ3NFQlFJV1BRQ0pna0NPa0pLVVA1ZVlVRDZQa1pNNSIuDQoiTktDS1VETXlOVGczQWdnMlM1ZXFVRXBKRGdjRENBeE1UMDZoZ2syNnZBd1VGVWhEdFlwQ3V3WkJ5Qk1SUk15Q1J3TUdSa1VnMHhJZiIuDQoiMWxBZUJpRUFHUmdYRWcwdDRTd3JvQ1lsRFJBbjRTbXBLQ29RSkMvaHFWQXVOR3pnOEU5UktCRWpZQlMwSlNoR2g0VU1vWUFTQmlVUSIuDQoiQURzPSIsDQoiZXh0X2xvZyI9Pg0KIlIwbEdPRGxoRUFBUUFETUFBQ0g1QkFFQUFBZ0FMQUFBQUFBUUFCQUFnLy8vL3dBQUFNREF3SUNBZ0lDQUFBQUFnQUFBLy8vL0FBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVJRRUtFd0s2VXlCekM0NzVnRUFsdEprbExSQVd6YkNsUmhySzRMeTV5Zzcvd04iLg0KInpMVWFMR0JRQlYyRWdGTFY0eEVPU1NXdDlnUVFCcFJwcXhvVk5hUEtrRmI1RWgvTG1VR3pGNXFFMytFTUlnSUFPdz09IiwNCiJleHRfcGhwIj0+DQoiUjBsR09EbGhFQUFRQUlBQkFBQUFBUC8vL3l3QUFBQUFFQUFRQUFBQ0prUWVvTXVhMXRCeHFMSDM3SFU2YXJ4WllMZElaTW1kME9xcGFHZXlZcHFKbFJHL3Jsd0FBRHM9IiwNCiJleHRfcGwiPT4NCiJSMGxHT0RsaEZBQVVBS0wvQVAvNC84REF3SDkvQVAvNEFMKy92d0FBQUFBQUFBQUFBQ0g1QkFFQUFBRUFMQUFBQUFBVUFCUUFRQU1vIi4NCiJHTHJjM2dPQU1ZUjRPT3VkcmVlZ1JsQldTSjFscUs1czY0TGpXRjNjUU1qcEpwRGY2Ly9BQkFBNyIsDQoiZXh0X3N3ZiI9Pg0KIlIwbEdPRGxoRkFBVUFNUVJBUCtjblA5U1VzNEFBUCtjQVAvT0FJUUFBUDlqQU01am5NNmNZODZjbktYTzk4YmV4cHdBQVA4eEFQL08iLg0KIm5BQUFBUC8vLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBRUEiLg0KIkFCRUFMQUFBQUFBVUFCUUFBQVY3WUNTT1pHbWU2UG1zYk11cVVDelAwQVBMemhBYnVQblFBd2VFNTJnMGZES0NNR2dvT200UUI0R0EiLg0KIkdCZ2FUMmdNUVlnVmpVZlNUM1lvRkdLQlJnQnFQamdZREVGeFhScERHRUlBNHhBUVFOUjFOSG9NRUFBQ0FCRmhJejhyQ25jTUFHZ0MiLg0KIk55c0xrRE9UU0NzSk5ESmFuVFVxTHFNMkthYW5xQkVoQURzPSIsDQoiZXh0X3RhciI9Pg0KIlIwbEdPRGxoRUFBUUFHWUFBQ0g1QkFFQUFFc0FMQUFBQUFBUUFCQUFoZ0FBQUJsT0FGZ2RBRkFBQUlZQ1V3QThad0E4WjlEWTRKSUMiLg0KIld2Ly8vd0NJV0JFMkFBQXlVSmljcUlTSGw0Q0FBUEQ0LytEZzhQWDYvNU9YcEw3SDArLzIvYUdtc1RJeU10VGM1UC8vc2ZMNS84WEYiLg0KIkhnQllwd0JVbGdCV24xQlFBRzhhSUFCUWhSYmZtd0Rja3YrSDExbm91RUxscml6aXBmK1YzblBBLzQwQ1V6bW0vd0E0WGhWREFBR0QiLg0KIlV5V2QvMGl0LzF1MS8zTnpBUDk1MFA5OTBtTzUvN3YxNFl6dnpYTHJ3b1hJLzV2Uy83RGsvd0JYb3Y5c3l2Ump3T2hhdFFDSFYxN3AiLg0KInVvMEdVUUJXblArKzhMbTVBUCtqNVFCVWxBQ0tXZ0E0YmpKUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFlZWdBS0NnNFNGU3hZTkV3NGdNZ1NPajQ4REZBY0hFVUlaUkVZb0pEUXpQVDQvQXdjUUNRa2ciLg0KIkd3aXBxcWtxQXhJYUZSZ1hEd08xdHJjQXVicTd2SWVKRGl3aEJjUEV4QXlUbFNFWk96bzVLVFV4TUNzdkRLT2xTUnNjSER3ZUhrTWQiLg0KIkhVY01yN0d6QnVmbzZBeTg3THUraWkwZkFmUDA5QXZJRVI4Wk5qYzRRU1VtVG9nWXNjQmFBaVZGa0NoWXlCQ0lpd1hrWkQyb1IzRkIiLg0KInU0dExBZ0VBT3c9PSIsDQoiZXh0X3R4dCI9Pg0KIlIwbEdPRGxoRXdBUUFLSUFBQUFBQVAvLy84Ykd4b1NFaFAvLy93QUFBQUFBQUFBQUFDSDVCQUVBQUFRQUxBQUFBQUFUQUJBQUFBTkoiLg0KIlNBckUzbERKRmthOTFyS3BBL0RnSjNKQmFaNmxzQ2tXNnFxa0I0anpGOEJTNjU0NFc5WkFXNCtnMjZWV3hGOXdkb3dabXpubEV1cDciLg0KIlVwUFdHM0lnNkhxL1htUmp1WndrQUFBNyIsDQoiZXh0X3dyaSI9Pg0KIlIwbEdPRGxoRUFBUUFETUFBQ0g1QkFFQUFBZ0FMQUFBQUFBUUFCQUFnLy8vL3dBQUFJQ0FnTURBd0lDQUFBQUFnQUFBLy8vL0FBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVJSVU1oSmtiMEM2SzJIdUVpUmNkc0FmS0V4a2tEZ0JvVnhzdHdBQXlwZHVvYW8iLg0KImE0U1hUMGM0QkYwclVoRkFFQVFRSTlkbWViUkVXOHlYQzZOeDJRSTdMcllidHBKWk5zeGd6VzZuTGRxNDloSUJBRHM9IiwNCiJleHRfeG1sIj0+DQoiUjBsR09EbGhFQUFRQUVRQUFDSDVCQUVBQUJBQUxBQUFBQUFRQUJBQWhQLy8vd0FBQVBIeDhZYUdoak5tbWFiSzhBQUFtUUFBZ0FDQSIuDQoiZ0RPWkFETm0vek9aL3pQLy84REF3RFBNL3dBQS93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBVms0Q0NPcEFpZDBBQ3NiTnNNcU5xdUFpQTBBSnpTZGw4SHdNQk9VS2doRUFwYkVTQlVGUXdBQklDeCIuDQoiT0FBTXhlYlRobUE0RW9jYXRnbllLaGFKaHhVcklCTnJoN2p5dC9QWmErMGhZYy9uMDJWNGR6WnVmWVYvUElHSmJvS0JRa0dQa0VFUSIuDQoiSVFBNyINCik7DQokaW1nZXF1YWxzID0gYXJyYXkoDQogICJleHRfdGFyIj0+YXJyYXkoImV4dF90YXIiLCJleHRfcjAwIiwiZXh0X2FjZSIsImV4dF9hcmoiLCJleHRfYnoiLCJleHRfYnoyIiwiZXh0X3RieiIsImV4dF90YnoyIiwiZXh0X3RneiIsImV4dF91dSIsImV4dF94eGUiLCJleHRfemlwIiwiZXh0X2NhYiIsImV4dF9neiIsImV4dF9pc28iLCJleHRfbGhhIiwiZXh0X2x6aCIsImV4dF9wYmsiLCJleHRfcmFyIiwiZXh0X3V1ZiIpLA0KICAiZXh0X3BocCI9PmFycmF5KCJleHRfcGhwIiwiZXh0X3BocDMiLCJleHRfcGhwNCIsImV4dF9waHA1IiwiZXh0X3BodG1sIiwiZXh0X3NodG1sIiwiZXh0X2h0bSIpLA0KICAiZXh0X2pwZyI9PmFycmF5KCJleHRfanBnIiwiZXh0X2dpZiIsImV4dF9wbmciLCJleHRfanBlZyIsImV4dF9qZmlmIiwiZXh0X2pwZSIsImV4dF9ibXAiLCJleHRfaWNvIiwiZXh0X3RpZiIsInRpZmYiKSwNCiAgImV4dF9odG1sIj0+YXJyYXkoImV4dF9odG1sIiwiZXh0X2h0bSIpLA0KICAiZXh0X2F2aSI9PmFycmF5KCJleHRfYXZpIiwiZXh0X21vdiIsImV4dF9tdmkiLCJleHRfbXBnIiwiZXh0X21wZWciLCJleHRfd212IiwiZXh0X3JtIiksDQogICJleHRfbG5rIj0+YXJyYXkoImV4dF9sbmsiLCJleHRfdXJsIiksDQogICJleHRfaW5pIj0+YXJyYXkoImV4dF9pbmkiLCJleHRfY3NzIiwiZXh0X2luZiIpLA0KICAiZXh0X2RvYyI9PmFycmF5KCJleHRfZG9jIiwiZXh0X2RvdCIpLA0KICAiZXh0X2pzIj0+YXJyYXkoImV4dF9qcyIsImV4dF92YnMiKSwNCiAgImV4dF9jbWQiPT5hcnJheSgiZXh0X2NtZCIsImV4dF9iYXQiLCJleHRfcGlmIiksDQogICJleHRfd3JpIj0+YXJyYXkoImV4dF93cmkiLCJleHRfcnRmIiksDQogICJleHRfc3dmIj0+YXJyYXkoImV4dF9zd2YiLCJleHRfZmxhIiksDQogICJleHRfbXAzIj0+YXJyYXkoImV4dF9tcDMiLCJleHRfYXUiLCJleHRfbWlkaSIsImV4dF9taWQiKSwNCiAgImV4dF9odGFjY2VzcyI9PmFycmF5KCJleHRfaHRhY2Nlc3MiLCJleHRfaHRwYXNzd2QiLCJleHRfaHQiLCJleHRfaHRhIiwiZXh0X3NvIikNCik7ICANCg0KaWYgKCEkZ2V0YWxsKSB7DQogIGhlYWRlcigiQ29udGVudC10eXBlOiBpbWFnZS9naWYiKTsNCiAgaGVhZGVyKCJDYWNoZS1jb250cm9sOiBwdWJsaWMiKTsNCiAgaGVhZGVyKCJFeHBpcmVzOiAiLmRhdGUoInIiLG1rdGltZSgwLDAsMCwxLDEsMjAzMCkpKTsNCiAgaGVhZGVyKCJDYWNoZS1jb250cm9sOiBtYXgtYWdlPSIuKDYwKjYwKjI0KjcpKTsNCiAgaGVhZGVyKCJMYXN0LU1vZGlmaWVkOiAiLmRhdGUoInIiLGZpbGVtdGltZShfX0ZJTEVfXykpKTsNCiAgZm9yZWFjaCgkaW1nZXF1YWxzIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkaW1nLCR2KSkgeyRpbWcgPSAkazsgYnJlYWs7fX0NCiAgaWYgKGVtcHR5KCRpbWFnZXNbJGltZ10pKSB7JGltZyA9ICJzbWFsbF91bmsiO30NCiAgaWYgKGluX2FycmF5KCRpbWcsJGV4dF90YXIpKSB7JGltZyA9ICJleHRfdGFyIjt9DQogIGVjaG8gYmFzZTY0X2RlY29kZSgkaW1hZ2VzWyRpbWddKTsNCn0NCmVsc2Ugew0KICBmb3JlYWNoKCRpbWdlcXVhbHMgYXMgJGE9PiRiKSB7Zm9yZWFjaCAoJGIgYXMgJGQpIHtpZiAoJGEgIT0gJGQpIHtpZiAoIWVtcHR5KCRpbWFnZXNbJGRdKSkge2VjaG8oIldhcm5pbmchIFJlbW92ZSBcJGltYWdlc1siLiRkLiJdPGJyPiIpO319fX0NCiAgbmF0c29ydCgkaW1hZ2VzKTsNCiAgJGsgPSBhcnJheV9rZXlzKCRpbWFnZXMpOw0KICBlY2hvICAiPGNlbnRlcj4iOw0KICBmb3JlYWNoICgkayBhcyAkdSkge2VjaG8gJHUuIjo8aW1nIHNyYz1cIiIuJHN1cmwuIng9aW1nJmltZz0iLiR1LiJcIiBib3JkZXI9XCIxXCI+PGJyPiI7fQ0KICBlY2hvICI8L2NlbnRlcj4iOw0KfQ0KZXhpdDsNCn0NCg0KaWYgKCR4ID09ICJrb25hayIpIHsNCiAgJGlwID0gJF9TRVJWRVJbIlJFTU9URV9BRERSIl07DQogICRtc2cgPSAkX1BPU1RbJ2JhY2tjY29ubm1zZyddOw0KICAkZW1zZyA9ICRfUE9TVFsnYmFja2Njb25ubXNnZSddOw0KICBlY2hvKCI8Y2VudGVyPjxiPlsmIzgyMjQ7XSBiM2stazBuNGsgWyYjODIyNDtdPC9iPjwvYnI+PC9icj48Zm9ybSBuYW1lPWZvcm0gbWV0aG9kPVBPU1Q+SG9zdDo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9YmFja2Nvbm5lY3RpcCBzaXplPTE1IHZhbHVlPSRpcD4gUG9ydDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPWJhY2tjb25uZWN0cG9ydCBzaXplPTE1IHZhbHVlPTIxMjEyPiBVc2U6IDxzZWxlY3Qgc2l6ZT0xIG5hbWU9dXNlPjxvcHRpb24gdmFsdWU9UGVybD5QTDwvb3B0aW9uPjwvc2VsZWN0PiA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9Q29ubmVjdD48L2Zvcm0+a2FsYWlhbiBydW4gZG9sbyBkaSBjb25zb2xlIGF0dyBzZXJ2ZXIga2FsYWlhbiA8Yj5uYyAtbHZwMjEyMTI8L2I+LCBkYW4gbWFzdWtuYSBpcCBzYW1hIHBvcnRueWEgcGQga2VkdWEga29sb20gZGkgYXRhcy4gPGI+YmFydSBrYWxpYW4ga2xpayBjb25uZWN0bnlhPC9iPic8YnI+PGJyPjwvY2VudGVyPiIpOw0KICBlY2hvKCIkbXNnIik7DQogIGVjaG8oIiRlbXNnIik7DQoNCn0NCg0KaWYgKCR4ID09ICJjUCIpew0KCWlmICgkX0dFVFsnZ28nXSA9PSAnZ28nKXsgDQogICAgc2V0X3RpbWVfbGltaXQoMCk7DQoJIyMjIyMjIyMjIyMjIyMjIyMjDQoJQCRwYXNzd2Q9Zm9wZW4oJy9ldGMvcGFzc3dkJywncicpOw0KCWlmICghJHBhc3N3ZCkgew0KCSAgIGVjaG8gIlstXSBFcnJvciA6IGNvdWRuJ3QgcmVhZCAvZXRjL3Bhc3N3ZCI7DQoJICAgZXhpdDsNCgl9DQoJJHBhdGhfdG9fcHVibGljPWFycmF5KCk7DQoJJHVzZXJzPWFycmF5KCk7DQoJJHBhdGh0b2NvbmY9YXJyYXkoKTsNCgkkaT0wOw0KCQ0KCXdoaWxlKCFmZW9mKCRwYXNzd2QpKSB7DQoJICAkc3RyPWZnZXRzKCRwYXNzd2QpOw0KCSAgaWYgKCRpPjM1KSB7DQoJCSRwb3M9c3RycG9zKCRzdHIsIjoiKTsNCgkJJHVzZXJuYW1lPXN1YnN0cigkc3RyLDAsJHBvcyk7DQoJCSRkaXJ6PSIvaG9tZS8kdXNlcm5hbWUvcHVibGljX2h0bWwvIjsNCgkJaWYgKCgkdXNlcm5hbWUhPSIiKSkgew0KCQkJaWYgKGlzX3JlYWRhYmxlKCRkaXJ6KSkgew0KCQkJCWFycmF5X3B1c2goJHVzZXJzLCR1c2VybmFtZSk7DQoJCQkJYXJyYXlfcHVzaCgkcGF0aF90b19wdWJsaWMsJGRpcnopOw0KCQkJfQ0KCQl9DQoJICB9DQoJICAkaSsrOw0KCX0NCgkjIyMjIyMjIyMjIyMjIyMjIyMjDQoJDQoJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KCWZ1bmN0aW9uIHJlYWRfZGlyKCRwYXRoLCR1c2VybmFtZSkgew0KCQlpZiAoJGhhbmRsZSA9IG9wZW5kaXIoJHBhdGgpKSB7DQoJCQl3aGlsZSAoZmFsc2UgIT09ICgkZmlsZSA9IHJlYWRkaXIoJGhhbmRsZSkpKSB7DQoJCQkJICAkZnBhdGg9IiRwYXRoJGZpbGUiOw0KCQkJCSAgaWYgKCgkZmlsZSE9Jy4nKSBhbmQgKCRmaWxlIT0nLi4nKSkgew0KCQkJCQkgaWYgKGlzX3JlYWRhYmxlKCRmcGF0aCkpIHsNCgkJCQkJCSRkcj0iJGZwYXRoLyI7DQoJCQkJCQlpZiAoaXNfZGlyKCRkcikpIHsNCgkJCQkJCSAgIHJlYWRfZGlyKCRkciwkdXNlcm5hbWUpOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZSB7DQoJCQkJCQkJIGlmICgoJGZpbGU9PSdjb25maWcucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2NvbmZpZ3VyYXRpb24ucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J3dwLWNvbmZpZy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29uZmlnLmluYy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGF0YWJhc2UucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2NvbmYucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J3NldHRpbmdzLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdzZXR0aW5nLnBocCcpDQoJCQkJCQlvciAoJGZpbGU9PSdpbmMucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2Nvcm4ucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2NvbmZpZ3MucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2tvbmZpZy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGJjb25mLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdrb25la3NpLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdkYmNvbmZpZy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGIuaW5jLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdkYl9jb25uZWN0LnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdkYmNvbm5lY3QucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2RiLWNvbm5lY3QucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2NvbmZpZ3VyZS5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZ2xvYmFsLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdjb25uZWN0LnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdkYi5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29uZl9kYi5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZGF0YWJhc2UuaW5jLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdkYXRhYmFzZS5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29ubmVjdGlvbi5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29ubmVjdGlvbnMucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2NvbmZpZ3VyZS5jbGFzcy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nY29uZmlnLmNsYXNzLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdjb25maWd1cmF0aW9uLmNsYXNzLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdkYi5jbGFzcy5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nZmlsZV9tYW5hZ2VyLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdMb2NhbFNldHRpbmdzLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdmaWxlbWFuYWdlci5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nbWFuYWdlci5waHAnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgb3IgKCRmaWxlPT0nbWFuYWdlcnMucGhwJykNCiAgICAgICAgICAgICAgICAgICAgICAgIG9yICgkZmlsZT09J2Nvbm5lY3QuaW5jLnBocCcpDQogICAgICAgICAgICAgICAgICAgICAgICBvciAoJGZpbGU9PSdkYmNvbm5lY3QuaW5jLnBocCcpKSANCgkJCQkJCQkJIHsNCgkJCQkJCQkJJHBhc3M9Z2V0X3Bhc3MoJGZwYXRoKTsNCgkJCQkJCQkJaWYgKCRwYXNzIT0nJykgew0KCQkJCQkJCQkgICBlY2hvICJbK10gJGZwYXRoXG4kcGFzc1xuIjsNCgkJCQkJCQkJICAgZnRwX2NoZWNrKCR1c2VybmFtZSwkcGFzcyk7DQoJCQkJCQkJCX0NCgkJCQkJCQkgfQ0KCQkJCQkJfQ0KCQkJCQkgfQ0KCQkJCSAgfQ0KCQkJfQ0KCQl9DQoJfQ0KCQ0KCWZ1bmN0aW9uIGdldF9wYXNzKCRsaW5rKSB7DQoJCUAkY29uZmlnPWZvcGVuKCRsaW5rLCdyJyk7DQoJCXdoaWxlKCFmZW9mKCRjb25maWcpKSB7DQoJCQkkbGluZT1mZ2V0cygkY29uZmlnKTsNCgkJCWlmIChzdHJzdHIoJGxpbmUsJ3Bhc3MnKSBvciBzdHJzdHIoJGxpbmUsJ3Bhc3N3b3JkJykgb3Igc3Ryc3RyKCRsaW5lLCdwd2QnKSBvciBzdHJzdHIoJGxpbmUsJ2tvZGUnKSBvciBzdHJzdHIoJGxpbmUsJ215cGFzc3dvcmQnKSBvciBzdHJzdHIoJGxpbmUsJ3Bhc3N3ZCcpKSB7DQoJCQkJaWYgKHN0cnJwb3MoJGxpbmUsJyInKSkNCgkJCQkgICAkcGFzcz1zdWJzdHIoJGxpbmUsKHN0cnBvcygkbGluZSwnPScpKzMpLChzdHJycG9zKCRsaW5lLCciJyktKHN0cnBvcygkbGluZSwnPScpKzMpKSk7DQoJCQkJZWxzZQ0KCQkJCSAgICRwYXNzPXN1YnN0cigkbGluZSwoc3RycG9zKCRsaW5lLCc9JykrMyksKHN0cnJwb3MoJGxpbmUsIiciKS0oc3RycG9zKCRsaW5lLCc9JykrMykpKTsNCgkJCQlyZXR1cm4gJHBhc3M7DQoJCQl9DQoJCX0NCgl9DQoJDQoJZnVuY3Rpb24gZnRwX2NoZWNrKCRsb2dpbiwkcGFzcykgew0KCQkgQCRmdHA9ZnRwX2Nvbm5lY3QoJzEyNy4wLjAuMScpOw0KCQkgaWYgKCRmdHApIHsNCgkJCUAkcmVzPWZ0cF9sb2dpbigkZnRwLCRsb2dpbiwkcGFzcyk7DQoJCQlpZiAoJHJlcykgew0KCQkJICAgZWNobyAnW2tOYSBnQW5dICcuJGxvZ2luLic6Jy4kcGFzcy4iICBXMDB0XG4iOw0KCQkJfQ0KCQkJZWxzZSBmdHBfcXVpdCgkZnRwKTsNCgkJIH0NCgl9DQoJDQoJZWNobyAiPGJyPjxicj4iOw0KCWVjaG8gIjx0ZXh0YXJlYSBuYW1lPSdtYWluX3dpbmRvdycgY29scz0xMDAgcm93cz0yMD4iOw0KCQ0KCWVjaG8gIlsrXSBGb3VuZCAiLnNpemVvZigkdXNlcnMpLiIgZW50cnlzIGluIC9ldGMvcGFzc3dkXG4iOw0KCWVjaG8gIlsrXSBGb3VuZCAiLnNpemVvZigkcGF0aF90b19wdWJsaWMpLiIgcmVhZGFibGUgcHVibGljX2h0bWwgZGlyZWN0b3JpZXNcbiI7DQoJDQoJZWNobyAiW35dIFNlYXJjaGluZyBmb3IgcGFzc3dvcmRzIGluIGNvbmZpZy4qIGZpbGVzLi4uXG5cbiI7DQoJZm9yZWFjaCAoJHVzZXJzIGFzICR1c2VyKSB7DQoJCQkkcGF0aD0iL2hvbWUvJHVzZXIvcHVibGljX2h0bWwvIjsNCgkJCXJlYWRfZGlyKCRwYXRoLCR1c2VyKTsNCgl9DQoJDQoJZWNobyAiXG5bK10gVWRhaFxuIjsNCgkNCgllY2hvICI8L3RleHRhcmVhPjxicj4iOw0KCX1lbHNlDQoJZWNobyAnPGNlbnRlcj5jUGFuZWwgU2Nhbjxicj48YSBocmVmPSInLiRzdXJsLid4PWNQJmdvPWdvIj5PS0U8L2E+IHx8IDxhIGhyZWY9IicuJHN1cmwuJyI+RlVDSzwvYT48L2NlbnRlcj4nOw0KfQ0KDQppZiAoJHggPT0gInNsZWVwIil7DQogICRtc2cgPSAkX1BPU1RbJ2JhY2tjY29ubm1zZyddOw0KICAkZW1zZyA9ICRfUE9TVFsnYmFja2Njb25ubXNnZSddOw0KICBlY2hvKCI8Y2VudGVyPjxiPkJpbmQgU2hlbGwgQmFja2Rvb3I6PC9iPjxicj48YnI+PGZvcm0gbmFtZT1mb3JtIG1ldGhvZD1QT1NUPg0KICBCaW5kIFBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdiYWNrY29ubmVjdHBvcnQnIHZhbHVlPScyMTIxMic+DQogIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3VzZScgdmFsdWU9J3NsZWVwJz4NCiAgPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0luc3RhbGwgQmFja2Rvb3InPjwvZm9ybT4iKTsNCiAgZWNobygiJG1zZyIpOw0KICBlY2hvKCIkZW1zZyIpOw0KICBlY2hvKCI8L2NlbnRlcj4iKTsNCn0NCg0KaWYgKCR4ID09ICJza2VuIil7DQpzZXRfdGltZV9saW1pdCgwKTsgDQoNCigkeDBiID0gaW5pX2dldCgnc2FmZV9tb2RlJykgPT0gMCkgPyAkeDBiID0gJ29mZic6IGRpZSgnPGI+RXJyb3I6IFNhZmUgTW9kZSBpcyBPbjwvYj4nKTsNCg0KQCR4MGMgPSBmb3BlbignL2V0Yy9wYXNzd2QnLCdyJyk7DQoNCmlmICghJHgwYykgeyBkaWUoJzxiPiBFcnJvciA6IENhbiBOb3QgUmVhZCBDb25maWcgT2YgU2VydmVyIDwvYj4nKTsgfQ0KDQovLyAkeDBkID0gYXJyYXkoKTsNCi8vICR4MGUgPSBhcnJheSgpOw0KLy8gJHgwZiA9IGFycmF5KCk7DQovLyAkeDEwID0gMDsNCg0Kd2hpbGUoIWZlb2YoJHgwYykpew0KICAgIC8vIGJhY2EgYmFyaXMuLi4NCiAgICAvLyAkeDExID0gZmdldHMoJHgwYyk7DQogICAgLy8gaWYgKCR4MTAgPCAzNSl7IA0KICAgIHdoaWxlKCR4MTEgPSBmZ2V0cygkeDBjKSl7DQogICAgICAgIA0KICAgICAgICAkeDEyID0gc3RycG9zKCR4MTEsJzonKTsNCg0KICAgICAgICAkeDEzID0gc3Vic3RyKCR4MTEsMCwkeDEyKTsNCg0KDQogICAgICAgICR4MTQgPSAnL2hvbWUvJy4keDEzLicvcHVibGljX2h0bWwnOw0KICAgICAgICBpZiAoKCR4MTMgIT0gJycpKXsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKGlzX3JlYWRhYmxlKCR4MTQpKXsNCg0KICAgICAgICAgICAgICAgIGVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPTIgY29sb3I9I2MwMDBmZj5bJiM4MjI0O10gb0sgWyYjODIyNDtdICR4MTQ8L2ZvbnQ+IjsNCiAgICAgICAgICAgICAgICBlY2hvICI8YnIvPiI7DQogICAgICAgICAgICB9ICAgIA0KICAgICAgICB9DQogICAgfQ0KICAgIC8vICR4MTArKzsNCiB9DQp9DQoNCmVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPlxuIjsNCj8+DQo8ZGl2ICBjbGFzcz1iYXJoZWFkZXIyPjxiPi46OiBDT01NQU5EIFBBTkVMIDo6LjwvYj48L2Rpdj4NCjx0YWJsZSBjbGFzcz1tYWlucGFuZWw+DQo8P3BocA0KaWYgKCEkc2FmZW1vZGUpIHsNCj8+DQo8dHI+PHRkIGFsaWduPXJpZ2h0PkNvbW1hbmQ6PC90ZD4NCjx0ZD48Zm9ybSBtZXRob2Q9IlBPU1QiPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9ImNtZCI+DQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPg0KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRjbWQpOyA/PiI+DQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImNtZF90eHQiIHZhbHVlPSIxIj4gLSA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IkV4ZWN1dGUiPg0KICAgIDwvZm9ybT4NCjwvdGQ+PC90cj4NCjx0cj48dGQgYWxpZ249cmlnaHQ+UXVpY2sgQ29tbWFuZHM6PC90ZD4NCjx0ZD48Zm9ybSBtZXRob2Q9IlBPU1QiPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXggdmFsdWU9ImNtZCI+DQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+DQogICAgPHNlbGVjdCBuYW1lPSJjbWQiPg0KICAgIDw/cGhwDQogICAgZm9yZWFjaCAoJGNtZGFsaWFzZXMgYXMgJGFscykgew0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzFdKS4iXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRhbHNbMF0pLiI8L29wdGlvbj4iOw0KICAgIH0NCiAgICBmb3JlYWNoICgkY21kYWxpYXNlczIgYXMgJGFscykgew0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzFdKS4iXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRhbHNbMF0pLiI8L29wdGlvbj4iOw0KICAgIH0NCiAgICA/Pg0KICAgIDwvc2VsZWN0PiAtDQogICAgPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJFeGVjdXRlIj4NCiAgICA8L2Zvcm0+DQo8L3RkPjwvdHI+DQo8P3BocA0KfQ0KPz4NCjx0cj48dGQgYWxpZ249cmlnaHQ+VXBsb2FkOjwvdGQ+DQo8dGQ+PGZvcm0gbWV0aG9kPSJQT1NUIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4NCiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT14IHZhbHVlPSJ1cGxvYWQiPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJtaW5pZm9ybSIgdmFsdWU9IjEiPg0KICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJ1cGxvYWRmaWxlIj4gLSA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IlVwbG9hZCI+IDw/cGhwIGVjaG8gJHdkdDsgPz4NCiAgICA8L2Zvcm0+DQo8L3RkPjwvdHI+DQo8dHI+PHRkIGFsaWduPXJpZ2h0Pk1ha2UgRmlsZTo8L3RkPg0KPHRkPjxmb3JtIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT0ibWtmaWxlIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImZ0IiB2YWx1ZT0iZWRpdCI+DQogICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1rZmlsZSIgc2l6ZT0iNzAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPiAtIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iQ3JlYXRlIj4gPD9waHAgZWNobyAkd2R0OyA/Pg0KICAgIDwvZm9ybT48L3RkPjwvdHI+DQo8dHI+PHRkIGFsaWduPXJpZ2h0PlZpZXcgRmlsZTo8L3RkPg0KPHRkPjxmb3JtIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9eCB2YWx1ZT0iZ29maWxlIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+DQogICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImYiIHNpemU9IjcwIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4gLSA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IlZpZXciPg0KICAgIDwvZm9ybT48L3RkPjwvdHI+DQo8L3RhYmxlPg0KPGRpdiBjbGFzcz1iYXJoZWFkZXIyIGNvbHNwYW49Mj48Zm9udCBjb2xvcj1yZWQ+PGZvbnQgY29sb3I9eWVsbG93PltSZUNvZGVkIEJ5IFN5bmNocm9uaXplciAtIFNBTkpVTkdBTiBKSVdBIFRFQU0gfCBHZW5lcmF0ZWQ6IDw/cGhwIGVjaG8gcm91bmQoZ2V0bWljcm90aW1lKCktc3RhcnR0aW1lLDQpOyA/PiBzZWNvbmRzIF08L2ZvbnQ+PC9kaXY+DQo8L2JvZHk+PC9odG1sPg==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement