fec60059ad4f42499355d8c67e26cd17PCEtLTZkZGJpbktTdzZjVjN2cDVzUHhreWJkbDZnVUF3WU1oeUlyRFkxM1lkNHBnN2plMFVuWlNGekJXMGVnYUlscjFTYTIyN1Zva09ZNG5NWUltVWl0ZkhFeUhmWVF4Q01EM3ZTRjNKdFc5c1c2dENZNUh4SERmT0NnQ3A4UWlBZjdyR3JwcWJ1V0lLWnRDRnZJWTB2L2U5VEtvcWErRWt0UHg3SU0tLT48ZmgtZnVuY3Rpb24+DQokQz1nZXRycygic2VsZWN0ICogZnJvbSBzbF9jb25maWciKTsNCiRDX3BfZGlzY291bnQ9JENbIkNfcF9kaXNjb3VudCJdOw0KJENfbl9kaXNjb3VudD0kQ1siQ19uX2Rpc2NvdW50Il07DQokQ19jX2Rpc2NvdW50PSRDWyJDX2NfZGlzY291bnQiXTsNCiRDX3BfZGlzY291bnQyPSRDWyJDX3BfZGlzY291bnQyIl07DQokQ19uX2Rpc2NvdW50Mj0kQ1siQ19uX2Rpc2NvdW50MiJdOw0KJENfY19kaXNjb3VudDI9JENbIkNfY19kaXNjb3VudDIiXTsNCiRkaXJ4PWRpcm5hbWUoZGlybmFtZShfX0ZJTEVfXykpLiIvIjsNCiRjb25maWc9anNvbl9kZWNvZGUoZmlsZV9nZXRfY29udGVudHMoJGRpcnguImNvbm4vY29uZmlnLmpzb24iKSk7DQppZigkY29uZmlnLT5uZXdzPT0iIil7DQoJJG5ld3Nfc2hvdz0idHJ1ZSI7DQp9ZWxzZXsNCgkkbmV3c19zaG93PSRjb25maWctPm5ld3M7DQp9DQoNCmlmKCRjb25maWctPnByb2R1Y3Q9PSIiKXsNCgkkcHJvZHVjdF9zaG93PSJ0cnVlIjsNCn1lbHNlew0KCSRwcm9kdWN0X3Nob3c9JGNvbmZpZy0+cHJvZHVjdDsNCn0NCg0KaWYoJGNvbmZpZy0+Y291cnNlPT0iIil7DQoJJGNvdXJzZV9zaG93PSJ0cnVlIjsNCn1lbHNlew0KCSRjb3Vyc2Vfc2hvdz0kY29uZmlnLT5jb3Vyc2U7DQp9DQo8L2ZoLWZ1bmN0aW9uPg0KPCFET0NUWVBFIEhUTUw+DQo8aHRtbD48aGVhZD4NCgkJPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KCQk8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPg0KCQk8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLG1pbmltdW0tc2NhbGU9MS4wLG1heGltdW0tc2NhbGU9MS4wLHVzZXItc2NhbGFibGU9bm8iPg0KCQk8bWV0YSBuYW1lPSJhcHBsZS1tb2JpbGUtd2ViLWFwcC10aXRsZSIgY29udGVudD0iTW9kb3duIj4NCgkJPG1ldGEgaHR0cC1lcXVpdj0iQ2FjaGUtQ29udHJvbCIgY29udGVudD0ibm8tc2l0ZWFwcCI+DQoJCTx0aXRsZT7lvIDpgJpWSVAgLSDmgqjnmoTnvZHnq5nlkI3np7AgLSBQb3dlcmVkIGJ5IOWPkei0pzEwMDwvdGl0bGU+DQoJCTxsaW5rIGhyZWY9Im1lZGlhLzIwMTkxMjA4MTEzMDM1ZU0uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+DQoJCTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSLlj5HotKcxMDAt6Jma5ouf5ZWG5ZOB6Ieq5Yqo5Y+R6LSn57O757ufIiAvPg0KCQk8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0i6Jma5ouf5ZWG5ZOBLOiHquWKqOWPkei0pyzlnKjnur/mlK/ku5gs5LuY6LS56ZiF6K+7IiAvPg0KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InRlbXBsYXRlL3QxNi9hc3NldHMvd2ViL3N0eWxlcy9saWJzLmNzcz8xNjUyNzA1NjA2Ij4NCgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3dlYi9zdHlsZXMvc3R5bGUuY3NzPzE2NTI3MDU2MDYiPg0KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InRlbXBsYXRlL3QxNi9hc3NldHMvc3R5bGVzL2ZvbnRzL2Nzcy9mb250YXdlc29tZS1hbGwubWluLmNzcyI+DQoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zdHlsZXMvc3dpcGVyLm1pbi5jc3MiPg0KDQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zY3JpcHRzL3N3aXBlci5taW4uanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3NjcmlwdHMvbGF5ZXIuanMiPjwvc2NyaXB0Pg0KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy90aGVtZS9kZWZhdWx0L2xheWVyLmNzcz92PTMuMy4wIiBpZD0ibGF5dWljc3MtbGF5ZXIiPg0KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3NjcmlwdHMvYmpwbHVzLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zY3JpcHRzL3Rtb2Rqcy5qcyI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy9jbGlwYm9hcmQubWluLmpzIj48L3NjcmlwdD4NCgkJPHN0eWxlPg0KICAgICAgICAuYWN0aXZlcyB7DQogICAgICAgICAgICBjb2xvcjogI2ZlODEwMyFpbXBvcnRhbnQ7CQ0KICAgICAgICB9DQoJCS5hY3RpdmVzOmFmdGVyLGgyOmFmdGVyLGEuYWN0aXZlczphZnRlciB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmU4MTAzIWltcG9ydGFudDsNCiAgICAgICAgfQ0KCQkuY2F0OmFmdGVyIHsNCiAgICAgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICNmZTgxMDMhaW1wb3J0YW50Ow0KICAgICAgICB9DQoJCS5hY3RpdmUsLmJnLWNvbG9yLC5vbiB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmU4MTAzIWltcG9ydGFudDsNCgkJCWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCgkJLm5hdnRhYiAuYWN0aXZlIHsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjZmU4MTAzIWltcG9ydGFudDsNCgkgICAgfQ0KCQkuYm9yZGVyLWNvbG9yLC5jaGVja291dC1vcHRpb24tbGlzdCAuc2VsZWN0ZWQgew0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2ZlODEwMyFpbXBvcnRhbnQ7DQogICAgICAgICAgICBjb2xvcjogI2ZlODEwMyFpbXBvcnRhbnQ7DQogICAgICAgIH0NCgkJLnRhYmxlLXRpdGxlIHsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjZmU4MTAzIWltcG9ydGFudDsNCiAgICAgICAgfQ0KCQlhOmhvdmVyIHsNCgkgICAgICAgIGNvbG9yOiAjZmU4MTAzIWltcG9ydGFudDsNCiAgICAgICAgfQ0KCQkuZXJwaHBkb3duLWJveC10aXBzIHsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAjZmU4MTAzIWltcG9ydGFudDsNCiAgICAgICAgIH0NCiAgICAgICAgIC52aXB7Y29sb3I6ICNmZjAwMDA7fQ0KICAgICAgICAgLnZpcDJ7Y29sb3I6ICNmZjY2MDA7fQ0KICAgICAgICA8L3N0eWxlPg0KCQk8c2NyaXB0Pg0KCSAgICAgICAgLy9kb2N1bWVudC5vbmNvbnRleHRtZW51PW5ldyBGdW5jdGlvbigiZXZlbnQucmV0dXJuVmFsdWU9ZmFsc2UiKTsgIA0KCSAgICAgICAgLy9kb2N1bWVudC5vbnNlbGVjdHN0YXJ0PW5ldyBGdW5jdGlvbigiZXZlbnQucmV0dXJuVmFsdWU9ZmFsc2UiKTsgDQoJCTwvc2NyaXB0Pg0KCTxzY3JpcHQgY2hhcnNldD0iVVRGLTgiIGlkPSJMQV9DT0xMRUNUIiBzcmM9Ii8vc2RrLjUxLmxhL2pzLXNkay1wcm8ubWluLmpzIj48L3NjcmlwdD48c2NyaXB0PkxBLmluaXQoe2lkOiAiSlU1MVJjekgwMWVkYWdvZyIsY2s6ICJKVTUxUmN6SDAxZWRhZ29nIn0pPC9zY3JpcHQ+PC9oZWFkPg0KPGJvZHk+CQ0KDQoJPGhlYWRlciBjbGFzcz0iaGVhZGVyIj4NCgk8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXJmaXgiPg0KCQk8ZGl2IGNsYXNzPSJsb2dvIj4NCgkJCTxhIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOnVybChtZWRpYS8yMDE5MTIwMjIxNDQwOXpYLnBuZykiIGhyZWY9Ii4vIiB0aXRsZT0i5oKo55qE572R56uZ5ZCN56ewIj48L2E+DQoJCTwvZGl2Pg0KCQk8dWwgY2xhc3M9Im5hdi1tYWluIj4NCg0KPGZoLWZ1bmN0aW9uPg0KICAgICAgICAgICAgICAgICRzcWw9InNlbGVjdCAqIGZyb20gc2xfbWVudSB3aGVyZSBVX2hpZGU9MCBhbmQgVV9kZWw9MCBhbmQgVV9zdWI9MCBvcmRlciBieSBVX29yZGVyLFVfaWQgZGVzYyI7DQogICAgICAgICAgICAgICAgc1tbDQogICAgICAgICAgICAgICAgICBpZigkdHlwZT09JHJvd1siVV90eXBlIl0gJiYgJGlkPT0kcm93WyJVX3R5cGVpZCJdKXsNCiAgICAgICAgICAgICAgICAgICAgJGNsYXNzPSJuYXYtbGkgYWN0aXZlIjsNCiAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAkY2xhc3M9Im5hdi1saSBtYXJnaW4tbGVmdC0wIjsNCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgaWYoJHJvd1siVV90eXBlIl09PSJsaW5rIil7DQogICAgICAgICAgICAgICAgICAgICRsaW5rPSRyb3dbIlVfbGluayJdOw0KICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0PSJfYmxhbmsiOw0KICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICRsaW5rPSI/dHlwZT0iLiRyb3dbIlVfdHlwZSJdLiImaWQ9Ii4kcm93WyJVX3R5cGVpZCJdOw0KICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0PSJfc2VsZiI7DQogICAgICAgICAgICAgICAgICB9DQokVV9jb3VudD1nZXRycygic2VsZWN0IGNvdW50KCopIGFzIFVfY291bnQgZnJvbSBzbF9tZW51IHdoZXJlIFVfZGVsPTAgYW5kIFVfc3ViPSIuJHJvd1siVV9pZCJdLCJVX2NvdW50Iik7DQogICAgICAgICAgICBpZigkVV9jb3VudD4wKXsNCg0KICAgICAgICAgICAgICAgICAgICAkYXBpPSRhcGkuIjxsaSBjbGFzcz1cIm1lZ2EyIG1lbnUtaXRlbS1oYXMtY2hpbGRyZW5cIj48YSAgaHJlZj1cIiIuJGxpbmsuIlwiIHRhcmdldD1cIiIuJHRhcmdldC4iXCIgdGl0bGU9XCIiLiRyb3dbIlVfdGl0bGUiXS4iXCI+Ii4kcm93WyJVX3RpdGxlIl0uIjwvYT48dWwgY2xhc3M9XCJzdWItbWVudVwiPiI7DQoNCiAgICAgICAgICAgICAgICAgICAgJHNxbDI9InNlbGVjdCAqIGZyb20gc2xfbWVudSB3aGVyZSBVX2hpZGU9MCBhbmQgVV9kZWw9MCBhbmQgVV9zdWI9Ii4kcm93WyJVX2lkIl0uIiBvcmRlciBieSBVX29yZGVyLFVfaWQgZGVzYyI7DQogICAgICAgICAgICAgICAgICAgIHMyW1sNCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICBpZigkcm93MlsiVV90eXBlIl09PSJsaW5rIil7DQogICAgICAgICAgICAgICAgICAgICAgICAkbGluazI9JHJvdzJbIlVfbGluayJdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldD0iX2JsYW5rIjsNCiAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rMj0iP3R5cGU9Ii4kcm93MlsiVV90eXBlIl0uIiZpZD0iLiRyb3cyWyJVX3R5cGVpZCJdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldD0iX3NlbGYiOw0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXBpPSRhcGkuIjxsaT48YSBocmVmPVwiIi4kbGluazIuIlwiIHRhcmdldD1cIiIuJHRhcmdldC4iXCI+Ii4kcm93MlsiVV90aXRsZSJdLiI8L2E+PC9saT4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgXV0NCg0KJGFwaT0kYXBpLiI8L3VsPjwvbGk+IjsNCn1lbHNlew0KICAkYXBpPSRhcGkuIjxsaT48YSAgaHJlZj1cIiIuJGxpbmsuIlwiIHRhcmdldD1cIiIuJHRhcmdldC4iXCIgdGl0bGU9XCIiLiRyb3dbIlVfdGl0bGUiXS4iXCI+Ii4kcm93WyJVX3RpdGxlIl0uIjwvYT48L2xpPiI7DQp9DQoNCg0KICAgICAgICAgICAgICAgIF1dDQoNCiAgICAgICAgICAgICAgPC9maC1mdW5jdGlvbj4NCg0KDQoJCQkJCQkJCTwvdWw+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJJCgiLm5hdi1tYWluIGEiKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQlpZiAoJCh0aGlzKVswXS5ocmVmID09IFN0cmluZyh3aW5kb3cubG9jYXRpb24pKSB7DQoJCQkkKCIubmF2LW1haW4gYSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCgkJCSQodGhpcykuYWRkQ2xhc3MoImFjdGl2ZSIpOw0KCQl9DQoJfSk7DQo8L3NjcmlwdD4NCgkJPHVsIGNsYXNzPSJuYXYtcmlnaHQiPg0KCQkJPGxpIGNsYXNzPSJuYXYtdmlwIj4NCgkJCQk8YSBocmVmPSIuLz90eXBlPXZpcCI+PGkgY2xhc3M9Imljb24gaWNvbi12aXAtcyI+PC9pPjwvYT4NCgkJCTwvbGk+DQoJCQk8bGkgY2xhc3M9Im5hdi1zZWFyY2giPg0KCQkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9InNlYXJjaC1sb2FkZXIiIHRpdGxlPSLmkJzntKIiPjxpIGNsYXNzPSJpY29uIGljb24tc2VhcmNoIj48L2k+PC9hPg0KCQkJPC9saT4NCg0KICAgICAgPGZoLWZ1bmN0aW9uPg0KICAgICAgaWYoJF9TRVNTSU9OWyJNX2xvZ2luIl09PSIiKXsNCiAgICAgICAgJGFwaT0iPGxpIGNsYXNzPVwibmF2LWxvZ2luIG5vXCI+DQogICAgICAgIDxhIGhyZWY9XCJtZW1iZXIvbG9naW4ucGhwP2Zyb209Ii51cmxlbmNvZGUoIi4uLz90eXBlPSR0eXBlJmlkPSRpZCIpLiJcIiBjbGFzcz1cInNpZ25pbi1sb2ExZGVyXCI+PHNwYW4+55m75b2VPC9zcGFuPjwvYT4NCiAgICAgICAgPGIgY2xhc3M9XCJuYXYtbGluZVwiPjwvYj4NCiAgICAgICAgPGEgaHJlZj1cIm1lbWJlci9yZWcucGhwP2Zyb209Ii51cmxlbmNvZGUoIi4uLz90eXBlPSR0eXBlJmlkPSRpZCIpLiJcIiBjbGFzcz1cInNpZ25pbi1yMWVnXCI+PHNwYW4+5rOo5YaMPC9zcGFuPjwvYT4NCiAgICAgIDwvbGk+IjsNCiAgICAgIH1lbHNlew0KICAgICAgICAkYXBpPSI8bGkgY2xhc3M9XCJuYXYtbG9naW4gbm9cIj4NCiAgICAgICAgPGEgaHJlZj1cIm1lbWJlclwiIGNsYXNzPVwic2lnbmluLWxvYTFkZXJcIj48c3Bhbj4iLiRfU0VTU0lPTlsiTV9sb2dpbiJdLiI8L3NwYW4+PC9hPg0KICAgICAgICA8YiBjbGFzcz1cIm5hdi1saW5lXCI+PC9iPg0KICAgICAgICA8YSBocmVmPVwibWVtYmVyL2xvZ2luLnBocD9hY3Rpb249dW5sb2dpblwiIGNsYXNzPVwic2lnbmluLXIxZWdcIj48c3Bhbj7pgIDlh7o8L3NwYW4+PC9hPg0KICAgICAgPC9saT4iOw0KICAgICAgfQ0KICAgICAgPC9maC1mdW5jdGlvbj4NCg0KCQkJCQk8L3VsPg0KCTwvZGl2Pg0KPC9oZWFkZXI+DQoNCjxkaXYgY2xhc3M9InNlYXJjaC13cmFwIj4NCiAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtZm9ybSI+DQogICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPSJvZmYiIGNsYXNzPSJzZWFyY2gtaW5wdXQiIHR5cGU9InRleHQiIGlkPSJuYW1lczEiIHBsYWNlaG9sZGVyPSLovpPlhaXmkJzntKLlhbPplK7or43lm57ovabvvIzlpJrkuKrlhbPplK7or43nlKjnqbrmoLzliIblvIAiPg0KICAgICAgPGkgY2xhc3M9Imljb24gaWNvbi1jbG9zZSI+PC9pPg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCjwvZGl2Pg0KPHN0eWxlPg0KLm1haW4gew0KICAgIGJhY2tncm91bmQ6ICNmOWY5Zjk7Ow0KfQ0KLmNvbnRlbnQtd3JhcCB7DQogICAgbWFyZ2luOiAwOw0KICAgIGZsb2F0OiBub25lOw0KfQ0KLnZpcC1kZXNjIHsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgZm9udC1zaXplOiAxNHB4Ow0KICAgIGNvbG9yOiAjOGE5MmE5Ow0KICAgIG1hcmdpbi1ib3R0b206IDMwcHg7DQp9DQoudmlwLWFydGljbGUgew0KCWJhY2tncm91bmQ6ICNmZmY7DQoJcGFkZGluZzogMzBweCAyMHB4IDJweDsNCgltYXJnaW4tYm90dG9tOiAyMHB4Ow0KCWJvcmRlci1yYWRpdXM6IDNweDsNCgltYXJnaW46IC01MHB4IGF1dG8gNTBweDsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDIxMSwyMTcsMjI4LC40KTsNCiAgICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KPC9zdHlsZT4NCjxkaXYgY2xhc3M9Im1haW4iPg0KCTxpbWcgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3dlYi9pbWFnZXMvdmlwX2JnX3BjLmpwZyIgd2lkdGg9IjEwMCUiPg0KCTxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQoJCTxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcCBjbGVhcmZpeCI+DQoJCQk8ZGl2IGNsYXNzPSJjb250ZW50Ij4NCgkJCQk8YXJ0aWNsZSBjbGFzcz0idmlwLWFydGljbGUiPg0KCQkJCQk8aGVhZGVyIGNsYXNzPSJhcnRpY2xlLWhlYWRlciI+DQoJCQkJCQk8aDEgY2xhc3M9ImFydGljbGUtdGl0bGUgY2VudGVyIj5WSVDlpZfppJA8L2gxPg0KCQkJCQkJPGRpdiBjbGFzcz0idmlwLWRlc2MiPg0KCQkJCQkJCTxwIGNsYXNzPSJhY3RpdmVzIj7omZrmi5/kuqflk4HvvIzkuIDnu4/mlK/ku5jvvIzmpoLkuI3pgIDmrL7vvIE8L3A+DQoJCQkJCQk8L2Rpdj4NCgkJCQkJPC9oZWFkZXI+DQoJCQkJCQkJCQkJICAgIDxkaXYgY2xhc3M9InZpcC1jb250ZW50IGNsZWFyZml4IiBpZD0iY29udGFpbmVyIj4NCgkgICAgPGRpdiBjbGFzcz0idmlwLWl0ZW0gaXRlbS0xIj4NCgkJCTxoNj7msLjkuYXkvJrlkZg8L2g2Pg0KCQkJPHNwYW4gY2xhc3M9InByaWNlIj48c21hbGw+77+lPC9zbWFsbD48ZmgtZnVuY3Rpb24+JGFwaT0kQ1siQ192aXAwIl07PC9maC1mdW5jdGlvbj48L3NwYW4+DQoJCQk8cCBjbGFzcz0iYm9yZGVyLWRlY29yIj48c3BhbiBjbGFzcz0iYWN0aXZlIj7ml6DpmZDmnJ88L3NwYW4+PC9wPg0KCQkJPHVsPg0KCQkJCTxsaT48ZGVsPuWOn+S7t++/pTxmaC1mdW5jdGlvbj4kYXBpPSRDWyJDX3ZpcDAiXSoxMDs8L2ZoLWZ1bmN0aW9uPjwvZGVsPjwvbGk+DQoJCQkJPGxpIGNsYXNzPSJhY3RpdmVzIj7mtLvliqjnu5PmnZ/mgaLlpI3vv6U8ZmgtZnVuY3Rpb24+JGFwaT0kQ1siQ192aXAwIl0qMTA7PC9maC1mdW5jdGlvbj48L2xpPg0KCQkJPC91bD4gDQoNCgkJCTxhIGhyZWY9Im1lbWJlci92aXAucGhwP2FjdGlvbj12aXAmdmlwbG9uZz05OTkiIGRhdGEtZ2lkPSIyMzUiIGNsYXNzPSJidG4gYnRuLXNtYWxsIGJ0bi12aXAtYWN0aW9uIj7nq4vljbPlvIDpgJo8L2E+DQoNCgkJCTxkaXYgY2xhc3M9InZpcC10aXBzLWJveCI+PHNwYW4gY2xhc3M9ImFjdGl2ZXMiPjxlbSBjbGFzcz0iYWN0aXZlcyI+ODAlPC9lbT7nmoTkurrpgInmi6nor6XlpZfppJA8L3NwYW4+PC9kaXY+DQoJCTwvZGl2Pg0KICAgIA0KCSAgICA8ZGl2IGNsYXNzPSJ2aXAtaXRlbSBpdGVtLTIiPg0KCQkJPGg2PuS4gOW5tOS8muWRmDwvaDY+DQoJCQk8c3BhbiBjbGFzcz0icHJpY2UiPjxzbWFsbD7vv6U8L3NtYWxsPjxmaC1mdW5jdGlvbj4kYXBpPSRDWyJDX3ZpcDEyIl07PC9maC1mdW5jdGlvbj48L3NwYW4+DQoJCQk8cCBjbGFzcz0iYm9yZGVyLWRlY29yIj48c3BhbiBjbGFzcz0iYWN0aXZlIj4zNjXlpKk8L3NwYW4+PC9wPg0KCQkJPHVsPg0KCQkJCTxsaT48ZGVsPuWOn+S7t++/pTxmaC1mdW5jdGlvbj4kYXBpPSRDWyJDX3ZpcDEyIl0qMTA7PC9maC1mdW5jdGlvbj48L2RlbD48L2xpPg0KCQkJCTxsaSBjbGFzcz0iYWN0aXZlcyI+5rS75Yqo57uT5p2f5oGi5aSN77+lPGZoLWZ1bmN0aW9uPiRhcGk9JENbIkNfdmlwMTIiXSoxMDs8L2ZoLWZ1bmN0aW9uPjwvbGk+DQoJCQk8L3VsPiANCgkJCTxhIGhyZWY9Im1lbWJlci92aXAucGhwP2FjdGlvbj12aXAmdmlwbG9uZz0xMiIgZGF0YS1naWQ9IjExIiBjbGFzcz0iYnRuIGJ0bi1zbWFsbCBidG4tdmlwLWFjdGlvbiI+56uL5Y2z5byA6YCaPC9hPg0KCQkJDQoJCTwvZGl2Pg0KICAgIA0KCSAgICA8ZGl2IGNsYXNzPSJ2aXAtaXRlbSBpdGVtLTMiPg0KCQkJPGg2PuS4gOS4quaciOS8muWRmDwvaDY+DQoJCQk8c3BhbiBjbGFzcz0icHJpY2UiPjxzbWFsbD7vv6U8L3NtYWxsPjxmaC1mdW5jdGlvbj4kYXBpPSRDWyJDX3ZpcDEiXTs8L2ZoLWZ1bmN0aW9uPjwvc3Bhbj4NCgkJCTxwIGNsYXNzPSJib3JkZXItZGVjb3IiPjxzcGFuIGNsYXNzPSJhY3RpdmUiPjMx5aSpPC9zcGFuPjwvcD4NCgkJCTx1bD4NCgkJCQk8bGk+PGRlbD7ljp/ku7fvv6U8ZmgtZnVuY3Rpb24+JGFwaT0kQ1siQ192aXAxIl0qMTA7PC9maC1mdW5jdGlvbj48L2RlbD48L2xpPg0KCQkJCTxsaSBjbGFzcz0iYWN0aXZlcyI+5rS75Yqo57uT5p2f5oGi5aSN77+lPGZoLWZ1bmN0aW9uPiRhcGk9JENbIkNfdmlwMSJdKjEwOzwvZmgtZnVuY3Rpb24+PC9saT4NCgkJCTwvdWw+IA0KCQkJPGEgaHJlZj0ibWVtYmVyL3ZpcC5waHA/YWN0aW9uPXZpcCZ2aXBsb25nPTEiIGRhdGEtZ2lkPSIxMCIgY2xhc3M9ImJ0biBidG4tc21hbGwgYnRuLXZpcC1hY3Rpb24iPueri+WNs+W8gOmAmjwvYT4NCgkJCQ0KCQk8L2Rpdj4NCiAgICA8L2Rpdj4NCgkJCQkJCQkJCTwvYXJ0aWNsZT4NCgkJCTwvZGl2Pg0KCQk8L2Rpdj4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxlPSJwYWRkaW5nLXRvcDogMzBweDsiPg0KCQk8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXAiPg0KCQkJPGRpdiBjbGFzcz0iY29udGVudCI+DQoJCQkJPGRpdiBjbGFzcz0idmlwLWFydGljbGUiPg0KCQkJCQk8aGVhZGVyIGNsYXNzPSJhcnRpY2xlLWhlYWRlciI+DQoJCQkJCQk8aDEgY2xhc3M9ImFydGljbGUtdGl0bGUgY2VudGVyIGFjdGl2ZXMiPlZJUOadg+ebijwvaDE+DQoJCQkJCTwvaGVhZGVyPg0KCQkJCQk8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KCQkJCQkJPGRpdiBjbGFzcz0iaXRlbXMiPg0KCQkJCQkJCTxkaXYgY2xhc3M9ImFydGljbGUtY29udGVudCIgaWQ9InZpcF9jb250ZW50Ij4NCg0KCQkJCQkJCQk8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWNvbmRlbnNlZCI+DQoJCQkJCQkJCSA8dGhlYWQ+DQoJCQkJCQkJCQk8dHI+DQoJCQkJCQkJCQkJPHRoPueJueadgzwvdGg+DQoJCQkJCQkJCQkJPHRoPuaZrumAmuS8muWRmDwvdGg+DQoJCQkJCQkJCQkJPHRoIGNsYXNzPSJ2aXAiPlZJUOS8muWRmDwvdGg+DQoJCQkJCQkJCQkJPHRoIGNsYXNzPSJ2aXAyIj7msLjkuYVWSVDkvJrlkZg8L3RoPg0KCQkJCQkJCQkJPC90cj4NCgkJCQkJCQkJCTwvdGhlYWQ+DQoJCQkJCQkJCQk8dGJvZHk+DQoJCQkJCQkJCQk8dHI+PHRkPue6ouWQjeaYvuekujwvdGQ+PHRkPuaXoDwvdGQ+PHRkIGNsYXNzPSJ2aXAiPuaciTwvdGQ+PHRkIGNsYXNzPSJ2aXAyIj7mnIk8L3RkPjwvdHI+DQoJCQkJCQkJCQk8dHI+PHRkPlZJUOWwiui0teWbvuaghzwvdGQ+PHRkPuaXoDwvdGQ+PHRkIGNsYXNzPSJ2aXAiPuaciTwvdGQ+PHRkIGNsYXNzPSJ2aXAyIj7mnIk8L3RkPjwvdHI+DQoNCgkJCQkJCQkJCTxmaC1mdW5jdGlvbj5pZigkcHJvZHVjdF9zaG93PT0idHJ1ZSIpew0KCQkJCQkJCQkJJGFwaT0kYXBpLic8dHI+PHRkPui0reS5sOWVhuWTgTwvdGQ+PHRkPuaXoOaKmOaJozwvdGQ+PHRkIGNsYXNzPSJ2aXAiPic7DQoJCQkJCQkJCQlpZigkQ19wX2Rpc2NvdW50PT0xMCl7DQoJCQkJCQkJCQkJJGQ9IuaXoOaKmOaJoyI7DQoJCQkJCQkJCQl9ZWxzZXsNCgkJCQkJCQkJCQlpZigkQ19wX2Rpc2NvdW50PT0wKXsNCgkJCQkJCQkJCQkJJGQ9IuWFjei0uSI7DQoJCQkJCQkJCQkJfWVsc2V7DQoJCQkJCQkJCQkJCSRkPSRDX3BfZGlzY291bnQuIuaKmCI7DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJICRhcGk9JGFwaS4kZDsNCgkJCQkJCQkJCSAkYXBpPSRhcGkuJzwvdGQ+PHRkIGNsYXNzPSJ2aXAyIj4nOw0KDQoJCQkJCQkJCQlpZigkQ19wX2Rpc2NvdW50Mj09MTApew0KCQkJCQkJCQkJCSRkPSLml6DmipjmiaMiOw0KCQkJCQkJCQkJfWVsc2V7DQoJCQkJCQkJCQkJaWYoJENfcF9kaXNjb3VudDI9PTApew0KCQkJCQkJCQkJCQkkZD0i5YWN6LS5IjsNCgkJCQkJCQkJCQl9ZWxzZXsNCgkJCQkJCQkJCQkJJGQ9JENfcF9kaXNjb3VudDIuIuaKmCI7DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJICRhcGk9JGFwaS4kZDsNCgkJCQkJCQkJCSAkYXBpPSRhcGkuJzwvdGQ+PC90cj4nOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJaWYoJG5ld3Nfc2hvdz09InRydWUiKXsNCgkJCQkJCQkJCQkkYXBpPSRhcGkuJzx0cj48dGQ+5LuY6LS56ZiF6K+7PC90ZD48dGQ+5peg5oqY5omjPC90ZD48dGQgY2xhc3M9InZpcCI+JzsNCg0KCQkJCQkJCQkJaWYoJENfbl9kaXNjb3VudD09MTApew0KCQkJCQkJCQkJCSRkPSLml6DmipjmiaMiOw0KCQkJCQkJCQkJfWVsc2V7DQoJCQkJCQkJCQkJaWYoJENfbl9kaXNjb3VudD09MCl7DQoJCQkJCQkJCQkJCSRkPSLlhY3otLkiOw0KCQkJCQkJCQkJCX1lbHNlew0KCQkJCQkJCQkJCQkkZD0kQ19uX2Rpc2NvdW50LiLmipgiOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJCSAkYXBpPSRhcGkuJGQ7DQoJCQkJCQkJCQkgJGFwaT0kYXBpLic8L3RkPjx0ZCBjbGFzcz0idmlwMiI+JzsNCgkJCQkJCQkJCWlmKCRDX25fZGlzY291bnQyPT0xMCl7DQoJCQkJCQkJCQkJJGQ9IuaXoOaKmOaJoyI7DQoJCQkJCQkJCQl9ZWxzZXsNCgkJCQkJCQkJCQlpZigkQ19uX2Rpc2NvdW50Mj09MCl7DQoJCQkJCQkJCQkJCSRkPSLlhY3otLkiOw0KCQkJCQkJCQkJCX1lbHNlew0KCQkJCQkJCQkJCQkkZD0kQ19uX2Rpc2NvdW50Mi4i5oqYIjsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQkgJGFwaT0kYXBpLiRkOw0KCQkJCQkJCQkJICRhcGk9JGFwaS4nPC90ZD48L3RyPic7DQoJCQkJCQkJCQkgfQ0KCQkJCQkJCQkJaWYoJGNvdXJzZV9zaG93PT0idHJ1ZSIpew0KCQkJCQkJCQkJCSRhcGk9JGFwaS4nPHRyPjx0ZD7lnKjnur/or77nqIs8L3RkPjx0ZD7ml6DmipjmiaM8L3RkPjx0ZCBjbGFzcz0idmlwIj4nOw0KCQkJCQkJCQkJCQ0KCQkJCQkJCQkJaWYoJENfY19kaXNjb3VudD09MTApew0KCQkJCQkJCQkJCSRkPSLml6DmipjmiaMiOw0KCQkJCQkJCQkJfWVsc2V7DQoJCQkJCQkJCQkJaWYoJENfY19kaXNjb3VudD09MCl7DQoJCQkJCQkJCQkJCSRkPSLlhY3otLkiOw0KCQkJCQkJCQkJCX1lbHNlew0KCQkJCQkJCQkJCQkkZD0kQ19jX2Rpc2NvdW50LiLmipgiOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJCSAkYXBpPSRhcGkuJGQ7DQoJCQkJCQkJCQkgJGFwaT0kYXBpLic8L3RkPjx0ZCBjbGFzcz0idmlwMiI+JzsNCgkJCQkJCQkJCSANCgkJCQkJCQkJCWlmKCRDX2NfZGlzY291bnQyPT0xMCl7DQoJCQkJCQkJCQkJJGQ9IuaXoOaKmOaJoyI7DQoJCQkJCQkJCQl9ZWxzZXsNCgkJCQkJCQkJCQlpZigkQ19jX2Rpc2NvdW50Mj09MCl7DQoJCQkJCQkJCQkJCSRkPSLlhY3otLkiOw0KCQkJCQkJCQkJCX1lbHNlew0KCQkJCQkJCQkJCQkkZD0kQ19jX2Rpc2NvdW50Mi4i5oqYIjsNCgkJCQkJCQkJCQl9DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQkgJGFwaT0kYXBpLiRkOw0KCQkJCQkJCQkJICRhcGk9JGFwaS4nPC90ZD48L3RyPic7DQoJCQkJCQkJCQkgfQ0KCQkJCQkJCQkJPC9maC1mdW5jdGlvbj4NCgkJCQkJCQkJCTwvdGJvZHk+DQoJCQkJCQkJCTwvdGFibGU+DQoNCgkJCQkJCQk8L2Rpdj4NCgkJCQkJCTwvZGl2Pg0KCQkJCQk8L2Rpdj4NCgkJCQk8L2Rpdj4NCgkJCTwvZGl2Pg0KCQk8L2Rpdj4NCgk8L2Rpdj4NCg0KCTxkaXYgY2xhc3M9InZpcC13aHkiPg0KCQk8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KCQkJPGgyPjxzcGFuPuaIkeS7rOeahOS8mOWKvzwvc3Bhbj48L2gyPg0KCQkJPHAgY2xhc3M9ImRlc2MiPuS4gOebtOiiq+aooeS7v++8jOS7juacquiiq+i2hei2ijwvcD4NCgkJCTxkaXYgY2xhc3M9Iml0ZW1zIGNsZWFyZml4Ij4NCgkJCQk8ZGl2IGNsYXNzPSJpdGVtIj4NCgkJCQkJPHNwYW4gY2xhc3M9ImFjdGl2ZSI+PGkgY2xhc3M9ImZhIGZhLWFycm93LXVwIj48L2k+PC9zcGFuPg0KCQkJCQk8ZGl2Pg0KCQkJCQkJPGg0PuabtOaWsOWPiuaXtjwvaDQ+DQoJCQkJCQk8cD7kuJPkurrkuIrkvKDvvIzmr4/lpKnmm7TmlrA8L3A+DQoJCQkJCTwvZGl2Pg0KCQkJCTwvZGl2Pg0KCQkJCTxkaXYgY2xhc3M9Iml0ZW0iPg0KCQkJCQk8c3BhbiBjbGFzcz0iYWN0aXZlIj48aSBjbGFzcz0iZmEgZmEtYm94ZXMiPjwvaT48L3NwYW4+DQoJCQkJCTxkaXY+DQoJCQkJCQk8aDQ+57K+6YCJ6LWE5rqQPC9oND4NCgkJCQkJCTxwPuWQhOexu+i1hOa6kO+8jOa7oei2s+mcgOaxgjwvcD4NCgkJCQkJPC9kaXY+DQoJCQkJPC9kaXY+DQoJCQkJPGRpdiBjbGFzcz0iaXRlbSI+DQoJCQkJCTxzcGFuIGNsYXNzPSJhY3RpdmUiPjxpIGNsYXNzPSJmYSBmYS1jbG91ZC1kb3dubG9hZC1hbHQiPjwvaT48L3NwYW4+DQoJCQkJCTxkaXY+DQoJCQkJCQk8aDQ+6auY6YCf5LiL6L29PC9oND4NCgkJCQkJCTxwPuS4k+Wxnue9keebmO+8jOaegemAn+S9k+mqjDwvcD4NCgkJCQkJPC9kaXY+DQoJCQkJPC9kaXY+DQoJCQkJPGRpdiBjbGFzcz0iaXRlbSI+DQoJCQkJCTxzcGFuIGNsYXNzPSJhY3RpdmUiPjxpIGNsYXNzPSJmYSBmYS11c2VyLWNsb2NrIj48L2k+PC9zcGFuPg0KCQkJCQk8ZGl2Pg0KCQkJCQkJPGg0Pjd4MjRo5pyN5YqhPC9oND4NCgkJCQkJCTxwPuS4k+S6uuWuouacje+8jOmaj+aXtuiBlOezuzwvcD4NCgkJCQkJPC9kaXY+DQoJCQkJPC9kaXY+DQoJCQk8L2Rpdj4NCgkJPC9kaXY+DQoJPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0id3BwYXktY3VzdG9tLW1vZGFsLWJveCBwYXl0eXBlIj4NCgk8ZGl2IGNsYXNzPSJ3cHBheS1tb2RhbCI+DQoJCTxkaXYgY2xhc3M9ImxheXVpLWxheWVyLXRpdGxlIj7or7fpgInmi6nmlK/ku5jmlrnlvI88L2Rpdj4NCgkJPGRpdiBjbGFzcz0ibGF5dWktbGF5ZXItc2V0d2luIj4NCgkJICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9ImxheXVpLWxheWVyLWljbyBsYXl1aS1sYXllci1jbG9zZTEiPjwvYT4NCgkJPC9kaXY+DQoJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJnaWQiIHZhbHVlPSIiPg0KCQk8ZGl2IGNsYXNzPSJ3cHBheS1saXN0Ij4NCgkJCTx0YWJsZSB3aWR0aD0iMTAwJSI+DQoJCQkJPHRib2R5Pjx0cj4NCgkJCQkJPHRkIGNsYXNzPSJ3cHBheS1saXN0LXRiIj7lkI3np7DvvJo8c3BhbiBpZD0ic25hbWUiIGNsYXNzPSJhY3RpdmVzIj7msLjkuYXkvJrlkZg8L3NwYW4+PC90ZD4NCgkJCQk8L3RyPg0KCQkJCTx0cj4NCgkJCQkJPHRkIGNsYXNzPSJ3cHBheS1saXN0LXRiIj7ph5Hpop3vvJo8c3BhbiBpZD0ic21vbmV5IiBjbGFzcz0iYWN0aXZlcyI+Mzk4LjAwPC9zcGFuPjwvdGQ+DQoJCQkJPC90cj4NCgkJCTwvdGJvZHk+PC90YWJsZT4JCQkJCQkJDQoJICAgIDwvZGl2PgkJDQoJCTxkaXYgY2xhc3M9ImVycGhwLXdwcGF5LXFyY29kZSBtb2JhbnR1LXdwcGF5Ij4NCgkJCQkJPGRpdiBjbGFzcz0ic2F2ZXBheSBlcnBocGRvd24tdHlwZS1saW5rIGJnLXBob25lIiBkYXRhLWNvZGU9Inh1bmh1cGF5Ij48aSBjbGFzcz0iaWNvbiBpY29uLXh1bmh1cGF5LWNvbG9yIj48L2k+IOW+ruS/oeaUr+S7mDE8L2Rpdj4NCgkJCQk8L2Rpdj4NCgkJPGRpdiBjbGFzcz0id3BwYXktZGVzYyI+6Jma5ouf5Lqn5ZOB77yM5LiA57uP5pSv5LuY77yM5qaC5LiN6YCA5qy+77yBPC9kaXY+DQoJPC9kaXY+DQo8L2Rpdj4NCg0KDQoNCjxzY3JpcHQgaWQ9InRwbF9lbXB0eSIgdHlwZT0idGV4dC9odG1sIj4NCiAgICA8ZGl2IGNsYXNzPSJpbmZvaW1nIj4NCgkgICAgPGltZyBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvL2ltZy9ub2RhdGEucG5nIj4NCgk8L2Rpdj4NCjwvc2NyaXB0Pg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQoJZnVuY3Rpb24gZ3JvdXBzKGlkKXsNCgkgICAgY29yZV9qc29uKCIvaW5kZXgucGhwP21vZD1tb2JpbGUmYWN0PWdyb3VwJmRvPW1lbWJlciZvcD1wb3N0Jm09ZXNob3AmYmVpZD0xMCIsIHtpZDppZH0sIGZ1bmN0aW9uIChtanNvbikgewkNCgkJICAgIGlmKG1qc29uLnN0YXR1cz09MSl7DQoJCQkJJCgnI3NuYW1lJykuaHRtbChtanNvbi5yZXN1bHQuZ3JvdXBzLmdyb3VwbmFtZSk7DQoJCQkJJCgnI3Ntb25leScpLmh0bWwobWpzb24ucmVzdWx0Lmdyb3Vwcy5ncm91cG1vbmV5KTsNCgkJCQkkKCIjZ2ltZyIpLmF0dHIoJ3NyYycsbWpzb24ucmVzdWx0Lmdyb3Vwcy5ncm91cGltZykNCgkJCQkkKCcjdmlwX2NvbnRlbnQnKS5odG1sKG1qc29uLnJlc3VsdC5ncm91cHMudmlwX2NvbnRlbnQpOwkJCQkNCgkJICAgIH0NCgkgICAgfSx0cnVlKTsNCgl9CQ0KCQ0KICAgIGZ1bmN0aW9uIGdldExvZygpIHsNCiAgICAgICAgY29yZV9qc29uKCIvaW5kZXgucGhwP21vZD1tb2JpbGUmYWN0PWdyb3VwJmRvPW1lbWJlciZtPWVzaG9wJmJlaWQ9MTAiLCB7cGFnZTogMX0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXN1bHQubGlzdC5sZW5ndGggPD0gMCkgew0KICAgICAgICAgICAgICAgICQoJyNjb250YWluZXInKS5odG1sKHRwbCgndHBsX2VtcHR5JykpOwkJCQkNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkKCcjY29udGFpbmVyJykuaHRtbCh0cGwoJ3RwbF9sb2cnLCBqc29uLnJlc3VsdCkpOw0KCQkJZ3JvdXBzKGpzb24ucmVzdWx0LnRpZCk7DQoJCQkkKCcuYnRuLXZpcC1hY3Rpb24nKS51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCQkJZ3JvdXBzKCQodGhpcykuZGF0YSgnZ2lkJykpOw0KCQkJCSQoJyNnaWQnKS52YWwoJCh0aGlzKS5kYXRhKCdnaWQnKSk7DQoJCQkJJCgiLnBheXR5cGUiKS5zaG93KCk7DQoJICAgICAgICB9KTsNCiAgICAgICAgfSwgdHJ1ZSk7DQogICAgfQ0KICAgIGdldExvZygpOwkNCjwvc2NyaXB0Pg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQoJJCgnLmxheXVpLWxheWVyLWljbycpLnVuYmluZCgnY2xpY2snKS5jbGljayhmdW5jdGlvbigpIHsNCgkJJCgiLnBheXR5cGUiKS5oaWRlKCk7DQoJfSk7CQ0KCQ0KCSQoJy5zYXZlcGF5JykuY2xpY2soZnVuY3Rpb24gKCkgew0KCQl2YXIgZ2lkID0gJCgnI2dpZCcpLnZhbCgpOw0KCQl2YXIgcHR5cGUgPSAkKHRoaXMpLmRhdGEoJ2NvZGUnKTsNCgkJaWYgKGdpZCA9PSAnJyB8fCBwdHlwZSA9PSAnJykgew0KCQkJbGF5ZXIubXNnKCfor7fliLfmlrDph43or5UhJyk7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0JCQ0KCQljb3JlX2pzb24oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9Y29uZmlybSZkbz1vcmRlciZvcD1jb25maXJtJm09ZXNob3AmYmVpZD0xMCIsIHtwdHlwZTpwdHlwZSxnaWQ6Z2lkLGd0eXBlOjR9LCBmdW5jdGlvbiAocGpzb24pIHsNCgkJCWlmIChwanNvbi5zdGF0dXMgPT0gMCl7DQoJCQkJdGlwX3Nob3cocGpzb24ucmVzdWx0KTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQlpZiAocGpzb24uc3RhdHVzID09IDIpew0KCQkJCSQoIi5wYXl0eXBlIikuaGlkZSgpOw0KCQkJCWxheWVyLm1zZygn6K+35YWI55m75b2VJyk7CQkJCQ0KCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQoJCQkgICAgICAgICQoJy5zaWduaW4tbG9hZGVyJykuY2xpY2soKTsNCgkJICAgICAgICB9LCAxMDAwKTsJCQkJDQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQkJaWYgKHBqc29uLnN0YXR1cyA9PSAxKXsNCgkJCQlpZiAocHR5cGUgPT0gJ3h1bmh1cGF5Jyl7DQoJCQkJCWxheWVyLm1zZyhwanNvbi5yZXN1bHQubXNnLHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDEwMDAsIA0KICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpew0KCQkJCQkgICAgbG9jYXRpb24uaHJlZiA9IHBqc29uLnJlc3VsdC51cmw7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkgICAgfQ0KCQkJCWlmIChwdHlwZSA9PSAnY3JlZGl0Jyl7DQoJCQkJCWxheWVyLm1zZyhwanNvbi5yZXN1bHQubXNnLHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDEwMDAsIA0KICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpew0KCQkJCQkgICAgbG9jYXRpb24uaHJlZiA9IHBqc29uLnJlc3VsdC51cmw7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkgICAgfQ0KCQkJCWxheWVyLm1zZyhwanNvbi5yZXN1bHQubXNnLHsNCiAgICAgICAgICAgICAgICAgICAgdGltZTogMTAwMCwgDQogICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsNCgkJCQkgICAgbGF5ZXIub3Blbih7DQogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAyLA0KICAgICAgICAgICAgICAgICAgICAgICAgYXJlYTogWyczMzBweCcsICc0ODBweCddLA0KICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplOmZhbHNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHBqc29uLnJlc3VsdC51cmwgKyAnJnR5cGU9MScNCiAgICAgICAgICAgICAgICAgICAgfSk7DQoJCQkJfSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgDQoJCQl9DQoJCQlsYXllci5tc2coJ+ivt+WIt+aWsOmHjeivlSEnKTsNCgkJfSwgdHJ1ZSk7DQoJfSk7DQo8L3NjcmlwdD4NCg0KDQoNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoud2lkZ2V0LWJvdHRvbS1sb2dvIC5mb290ZXItbG9nbyBpbWd7d2lkdGg6IGF1dG99DQo8L3N0eWxlPg0KPGZvb3RlciBjbGFzcz0iZm9vdGVyIj4NCgk8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KCQk8ZGl2IGNsYXNzPSJmb290ZXItd2lkZ2V0cyI+DQoJCQk8ZGl2IGNsYXNzPSJmb290ZXItd2lkZ2V0IHdpZGdldC1ib3R0b20gd2lkZ2V0LWJvdHRvbS1sb2dvIj4NCgkJCQk8c3BhbiBjbGFzcz0iZm9vdGVyLWxvZ28gbGVmdCI+DQoJCQkJICAgIDxpbWcgc3JjPSJtZWRpYS8yMDE5MTEyNjIyNDM1MldmLmpwZyIgYWx0PSLmgqjnmoTnvZHnq5nlkI3np7AiPg0KCQkJCQk8cD7lvq7kv6HniYg8L3A+DQoJCQkJPC9zcGFuPgkJCQ0KCQkJICAgIDxzcGFuIGNsYXNzPSJmb290ZXItbG9nbyBtb2JpbGUiPg0KDQoJCQkgICAgCTxkaXYgIGlkPSJiaWxsSW1hZ2V4IiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOiB0b3A7YmFja2dyb3VuZDogI2ZmZjtwYWRkaW5nOiA1cHggNXB4IDAgNXB4O3dpZHRoOiAxMjBweDtoZWlnaHQ6IDEyMHB4Ij48L2Rpdj4NCg0KCQkJCQk8cD7miYvmnLrniYg8L3A+DQoJCQkJPC9zcGFuPg0KCQkJPC9kaXY+DQoJCQk8ZGl2IGNsYXNzPSJmb290ZXItd2lkZ2V0IHdpZGdldC1ib3R0b20iPg0KCQkJCTxoMz7lhbPkuo48L2gzPg0KCQkJCTxkaXYgY2xhc3M9ImZvb3Rlci13aWRnZXQtY29udGVudCI+DQoJCQkJCTx1bD4NCgkJCQkJCTxmaC1mdW5jdGlvbj4NCgkJCQkJCQkkc3FsPSJzZWxlY3QgKiBmcm9tIHNsX3RleHQgd2hlcmUgVF9kZWw9MCI7DQoJCQkJCQkJc1tbDQoJCQkJCQkJCSRhcGk9JGFwaS4iPGxpPjxhIGhyZWY9XCI/dHlwZT10ZXh0JmlkPSIuJHJvd1siVF9pZCJdLiJcIj4iLiRyb3dbIlRfdGl0bGUiXS4iPC9hPjwvbGk+IjsNCgkJCQkJCQldXQ0KCQkJCQkJPC9maC1mdW5jdGlvbj4NCg0KCQkJCQkJCQkJCTwvdWw+DQoJCQkJPC9kaXY+DQoJCQk8L2Rpdj4NCgkJCTxkaXYgY2xhc3M9ImZvb3Rlci13aWRnZXQgd2lkZ2V0LWJvdHRvbSI+DQoJCQkJPGgzPuWIhuexuzwvaDM+DQoJCQkJPGRpdiBjbGFzcz0iZm9vdGVyLXdpZGdldC1jb250ZW50Ij4NCgkJCQkJPHVsPg0KCQkJCQkJPGZoLWZ1bmN0aW9uPg0KCQkJCQkJCSRzcWw9InNlbGVjdCAqIGZyb20gc2xfbnNvcnQgd2hlcmUgU19zdWI9MCBhbmQgU19kZWw9MCBvcmRlciBieSBTX29yZGVyLFNfaWQgZGVzYyI7DQoJCQkJCQkJc1tbDQoJCQkJCQkJCSRhcGk9JGFwaS4iPGxpPjxhIGhyZWY9XCI/dHlwZT1uZXdzJmlkPSIuJHJvd1siU19pZCJdLiJcIj4iLiRyb3dbIlNfdGl0bGUiXS4iPC9hPjwvbGk+IjsNCgkJCQkJCQldXQ0KCQkJCQkJPC9maC1mdW5jdGlvbj4NCg0KCQkJCQkJCQkJCTwvdWw+DQoJCQkJPC9kaXY+DQoJCQk8L2Rpdj4NCgkJCTxkaXYgY2xhc3M9ImZvb3Rlci13aWRnZXQgd2lkZ2V0LWJvdHRvbSB3aWRnZXQtYm90dG9tLXNlYXJjaCI+DQoJCQkJPGgzPuaQnOe0ojwvaDM+DQoJCQkJPGRpdiBjbGFzcz0iZm9vdGVyLXdpZGdldC1jb250ZW50Ij4NCgkJCQkJPGRpdiBjbGFzcz0ic2VhcmNoZm9ybSBjbGVhcmZpeCI+DQoJCQkJCQk8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Im5hbWVzIiBwbGFjZWhvbGRlcj0i6L6T5YWl5YWz6ZSu6K+N77yM5aSa5Liq5YWz6ZSu6K+N55So56m65qC85YiG5byAIj4NCgkJCQkJCTxidXR0b24gaWQ9InNlYXJjaCIgdHlwZT0ic3VibWl0Ij48aSBjbGFzcz0iaWNvbiBpY29uLXNlYXJjaCI+PC9pPjwvYnV0dG9uPg0KCQkJCQk8L2Rpdj4NCgkJCQkJPHA+5Y+R6LSnMTAwLeiZmuaLn+WVhuWTgeiHquWKqOWPkei0p+ezu+e7nzwvcD4NCgkJCQk8L2Rpdj4NCgkJCTwvZGl2Pg0KCQk8L2Rpdj4NCgkJPGRpdiBjbGFzcz0iZm9vdGVyLWxpbmtzIj4NCgkJCTx1bD4NCgkJCQk8bGk+5Y+L5oOF6ZO+5o6l77yaPC9saT4NCgkJCQk8ZmgtZnVuY3Rpb24+DQogICAgICAgICRzcWw9InNlbGVjdCAqIGZyb20gc2xfbGluayB3aGVyZSBMX2RlbD0wIG9yZGVyIGJ5IExfaWQgZGVzYyI7DQogICAgICAgIHNbWyRhcGk9JGFwaS4iPGxpPjxhIGhyZWY9XCIiLiRyb3dbIkxfbGluayJdLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4iLiRyb3dbIkxfdGl0bGUiXS4iPC9hPjwvbGk+IjtdXQ0KICAgICAgICA8L2ZoLWZ1bmN0aW9uPg0KCQkJCQkJCTwvdWw+DQoJCTwvZGl2Pg0KCQk8cCBjbGFzcz0iY29weXJpZ2h0Ij5Db3B5cmlnaHQgwqkgMjAxNC0yMDE3IOa3hOWNmumXqueBtee9kee7nOenkeaKgOaciemZkOWFrOWPuCDniYjmnYPmiYDmnIkgPGEgaHJlZj0iaHR0cHM6Ly9iZWlhbi5taWl0Lmdvdi5jbi8iIHRhcmdldD0iX2JsYW5rIj7psoFJQ1DlpIcxNTAxNTEzN+WPty0yIDwvYT48L3A+DQoJPC9kaXY+DQo8L2Zvb3Rlcj4NCjxkaXYgY2xhc3M9InJvbGxiYXIiPg0KCTx1bD4NCgkJPGxpIGNsYXNzPSJ2aXAtbGkiPg0KCQkgICAgPGEgaHJlZj0ibWVtYmVyL3ZpcC5waHAiPjxpIGNsYXNzPSJpY29uIGljb24tY3Jvd24tcyI+PC9pPjwvYT4NCgkJCTxoNj7ljYfnuqdWSVA8aT48L2k+PC9oNj4NCgkJPC9saT4NCgkJPGxpIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQoJCSAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIGNsYXNzPSJkYXktY2hlY2tpbiI+PGkgY2xhc3M9Imljb24gaWNvbi1jYWxlbmRhciI+PC9pPjwvYT4NCgkJCTxoNj7mr4/ml6Xnrb7liLA8aT48L2k+PC9oNj4NCgkJPC9saT4NCgkJPGxpIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQoJCSAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIHRhcmdldD0iX2JsYW5rIj48aSBjbGFzcz0iaWNvbiBpY29uLXFxIj48L2k+PC9hPg0KCQkJPGg2PuiBlOezu1FRPGk+PC9pPjwvaDY+DQoJCTwvbGk+DQoJCTxsaT4NCgkJICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9ImtlZnVfd2VpeGluIj48aSBjbGFzcz0iaWNvbiBpY29uLXdlaXhpbiI+PC9pPg0KCQkJICAgIDxpbWcgc3JjPSJtZWRpYS8yMDE5MTEyNjIyNDM1MldmLmpwZyI+DQoJCQk8L2E+DQoJCTwvbGk+DQoNCgkJPGxpIGNsYXNzPSJ0b3RvcC1saSIgc3R5bGU9ImRpc3BsYXk6IGxpc3QtaXRlbTsiPg0KCQkgICAgPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0idG90b3AiPjxpIGNsYXNzPSJpY29uIGljb24tYXJyb3ctdXAiPjwvaT48L2E+DQoJCQk8aDY+6L+U5Zue6aG26YOoPGk+PC9pPjwvaDY+DQoJCTwvbGk+DQoJPC91bD4NCjwvZGl2Pg0KCQkNCjxkaXYgY2xhc3M9InNoYXJlcyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCiAgICA8ZGl2IGNsYXNzPSJtb2JpbGUtc2hhcmUtYmciPjwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9Im1vYmlsZS1zaGFyZS13cmFwIj4NCiAgICAgICAgPGRpdiBjbGFzcz0ic3dpcGVyLWNvbnRhaW5lciIgaWQ9InJvdGF0ZS1zd2lwZXIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItd3JhcHBlciIgaWQ9InBvc3RlciI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItc2xpZGUgcm90YXRlLXNsaWRlIj4NCgkgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+DQoJCQkJICAgIDxkaXYgY2xhc3M9ImZvb3RlcnMiPuWIhuS6q+a1t+aKpeato+WcqOeUn+aIkOS4rS4uLjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9pbWcvc2N6LmdpZiI+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci1wYWdpbmF0aW9uIiBpZD0icm90YXRlLXBhZ2luYXRpb24iPjwvZGl2Pg0KCQk8ZGl2IGNsYXNzPSJzd2lwZXItYnV0dG9uLW5leHQiPjwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItYnV0dG9uLXByZXYiPjwvZGl2Pg0KICAgICAgICA8L2Rpdj4JDQogICAgICAgIDxkaXYgY2xhc3M9Im1vYmlsZS1zaGFyZS1jbG9zZSI+w5c8L2Rpdj4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0KCQ0KDQo8c2NyaXB0IHNyYz0ianMvcXJjb2RlLm1pbi5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4JCQ0KDQoJJCgnLnNoYXJlJykuY2xpY2soZnVuY3Rpb24gKCkgew0KCSAgICBjb3JlX2pzb24oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9dXRpbGl0eSZkbz1zaGFyZSZvcD10d28mYmVpZD0xMCIsIHt0eXBlOicxJyxpZDonJ30sIGZ1bmN0aW9uIChzanNvbikgew0KCQkgICAgaWYoc2pzb24uc3RhdHVzPT0xKXsNCgkJCQkkKCcjcG9zdGVyJykuaHRtbCh0cGwoJ3RwbF9wb3N0ZXInLHNqc29uLnJlc3VsdCkpOw0KCQkJCXZhciBjbGlwYm9hcmQgPSBuZXcgQ2xpcGJvYXJkKCcuZnpsaicpOw0KICAgICAgICAgICAgICAgIGNsaXBib2FyZC5vbignc3VjY2VzcycsIGZ1bmN0aW9uKGUpIHsNCgkJICAgICAgICAgICAgbGF5ZXIubXNnKCfpk77mjqXlpI3liLbmiJDlip8nKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB2YXIgc3dpcGVyID0gbmV3IFN3aXBlcignI3JvdGF0ZS1zd2lwZXInLCB7DQogICAgCSAgICAgICAgICAgIHBhZ2luYXRpb246IHsNCiAgICAJCSAgICAgICAgICAgIGVsOiAnI3JvdGF0ZS1wYWdpbmF0aW9uJywNCgkJCQkJCXR5cGU6ICdmcmFjdGlvbicsDQogICAgCSAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbDogJy5zd2lwZXItYnV0dG9uLW5leHQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgcHJldkVsOiAnLnN3aXBlci1idXR0b24tcHJldicsDQogICAgICAgICAgICAgICAgICAgIH0sDQogICAgCSAgICAgICAgICAgIHJ1bkNhbGxiYWNrc09uSW5pdDogdHJ1ZSwNCiAgICAJICAgICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSwNCiAgICAJICAgICAgICAgICAgb246IHsNCiAgICAJCSAgICAgICAgICAgIHByb2dyZXNzOiBmdW5jdGlvbigpIHsNCiAgICAJCQkgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRoaXMuc2xpZGVzLmxlbmd0aDsgaSsrKSB7DQogICAgCQkJCSAgICAgICAgICAgIGlmICh0aGlzLnNsaWRlc1tpXS5wcm9ncmVzcyA8PSAwKSB7DQogICAgCQkJCQkgICAgICAgICAgICB0aGlzLnNsaWRlcy5lcShpKS5maW5kKCIuYmxvY2siKS50cmFuc2l0aW9uKDApLnRyYW5zZm9ybSgicm90YXRlWigiICsgMTMgKiBNYXRoLmFicyh0aGlzLnNsaWRlc1tpXS5wcm9ncmVzcykgKyAiZGVnKSB0cmFuc2xhdGUzZCgwLCAwLCAwKSIpDQogICAgCQkJCSAgICAgICAgICAgIH0NCiAgICAJCQkgICAgICAgICAgICB9DQogICAgCQkgICAgICAgICAgICB9LA0KICAgIAkJICAgICAgICAgICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24odHJhbnNpdGlvbikgew0KICAgIAkJCSAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5zbGlkZXMubGVuZ3RoOyBpKyspIHsNCiAgICAJCQkJICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVzW2ldLnByb2dyZXNzIDw9IDApIHsNCiAgICAJCQkJCSAgICAgICAgICAgIHJvdCA9IDEzICogTWF0aC5hYnModGhpcy5zbGlkZXNbaV0ucHJvZ3Jlc3MpOw0KICAgIAkJCQkJICAgICAgICAgICAgdGhpcy5zbGlkZXMuZXEoaSkuZmluZCgiLmJsb2NrIikudHJhbnNpdGlvbih0cmFuc2l0aW9uKS50cmFuc2Zvcm0oInJvdGF0ZVooIiArIHJvdCArICJkZWcpIHRyYW5zbGF0ZTNkKDAsIDAsIDApIikNCiAgICAJCQkJICAgICAgICAgICAgfQ0KICAgIAkJCSAgICAgICAgICAgIH0NCiAgICAJCSAgICAgICAgICAgIH0sDQoNCiAgICAJICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICB9KTsJDQoJICAgICAgICB9DQoJCQlpZihzanNvbi5zdGF0dXM9PTApew0KCQkJCSQoJyNwb3N0ZXInKS5odG1sKHRwbCgndHBsX2VtcHR5cycsc2pzb24ucmVzdWx0KSk7DQoJCQkJdmFyIGNsaXBib2FyZCA9IG5ldyBDbGlwYm9hcmQoJy5memxqJyk7DQogICAgICAgICAgICAgICAgY2xpcGJvYXJkLm9uKCdzdWNjZXNzJywgZnVuY3Rpb24oZSkgew0KCQkgICAgICAgICAgICBsYXllci5tc2coJ+mTvuaOpeWkjeWItuaIkOWKnycpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHZhciBzd2lwZXIgPSBuZXcgU3dpcGVyKCcjcm90YXRlLXN3aXBlcicsIHsNCiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbjogew0KICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVsOiAnLnN3aXBlci1idXR0b24tbmV4dCcsDQogICAgICAgICAgICAgICAgICAgICAgICBwcmV2RWw6ICcuc3dpcGVyLWJ1dHRvbi1wcmV2JywNCiAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAJICAgICAgICAgICAgcnVuQ2FsbGJhY2tzT25Jbml0OiB0cnVlLA0KICAgIAkgICAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLA0KICAgIAkgICAgICAgICAgICBvbjogew0KICAgIAkJICAgICAgICAgICAgcHJvZ3Jlc3M6IGZ1bmN0aW9uKCkgew0KICAgIAkJCSAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5zbGlkZXMubGVuZ3RoOyBpKyspIHsNCiAgICAJCQkJICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVzW2ldLnByb2dyZXNzIDw9IDApIHsNCiAgICAJCQkJCSAgICAgICAgICAgIHRoaXMuc2xpZGVzLmVxKGkpLmZpbmQoIi5ibG9jayIpLnRyYW5zaXRpb24oMCkudHJhbnNmb3JtKCJyb3RhdGVaKCIgKyAxMyAqIE1hdGguYWJzKHRoaXMuc2xpZGVzW2ldLnByb2dyZXNzKSArICJkZWcpIHRyYW5zbGF0ZTNkKDAsIDAsIDApIikNCiAgICAJCQkJICAgICAgICAgICAgfQ0KICAgIAkJCSAgICAgICAgICAgIH0NCiAgICAJCSAgICAgICAgICAgIH0sDQogICAgCQkgICAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbih0cmFuc2l0aW9uKSB7DQogICAgCQkJICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnNsaWRlcy5sZW5ndGg7IGkrKykgew0KICAgIAkJCQkgICAgICAgICAgICBpZiAodGhpcy5zbGlkZXNbaV0ucHJvZ3Jlc3MgPD0gMCkgew0KICAgIAkJCQkJICAgICAgICAgICAgcm90ID0gMTMgKiBNYXRoLmFicyh0aGlzLnNsaWRlc1tpXS5wcm9ncmVzcyk7DQogICAgCQkJCQkgICAgICAgICAgICB0aGlzLnNsaWRlcy5lcShpKS5maW5kKCIuYmxvY2siKS50cmFuc2l0aW9uKHRyYW5zaXRpb24pLnRyYW5zZm9ybSgicm90YXRlWigiICsgcm90ICsgImRlZykgdHJhbnNsYXRlM2QoMCwgMCwgMCkiKQ0KICAgIAkJCQkgICAgICAgICAgICB9DQogICAgCQkJICAgICAgICAgICAgfQ0KICAgIAkJICAgICAgICAgICAgfSwNCg0KICAgIAkgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIH0pOwkNCgkgICAgICAgIH0NCgkgICAgfSx0cnVlKTsNCgkJJCgiLnNoYXJlcyIpLnNob3coKTsNCgl9KTsNCgkNCiAgICAkKCcubW9iaWxlLXNoYXJlLWNsb3NlJykuY2xpY2soZnVuY3Rpb24gKCkgew0KCQkkKCIuc2hhcmVzIikuaGlkZSgpOw0KCX0pOwkNCjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICAgICQoIiNuYW1lcyIsKS5vbigna2V5cHJlc3MnLGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgdmFyIGtleWNvZGUgPSBlLmtleUNvZGU7DQogICAgICAgIGlmKGtleWNvZGU9PScxMycpIHsgIA0KICAgICAgICAgICAgJCgnI3NlYXJjaCcpLmNsaWNrKCk7ICAgICANCiAgICAgICAgfQ0KICAgIH0pOw0KICAgICQoIiNuYW1lczEiKS5vbigna2V5cHJlc3MnLGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgdmFyIGtleWNvZGUgPSBlLmtleUNvZGU7DQoJCXZhciBzZWFyY2hrZXkgPSAkLnRyaW0oJCgiI25hbWVzMSIpLnZhbCgpKTsNCiAgICAgICAgaWYoa2V5Y29kZT09JzEzJykgeyAgDQogICAgICAgICAgICBpZihzZWFyY2hrZXkgPT0gJycpewkNCgkJCSAgICBsYXllci5tc2coJ+ivt+i+k+WFpeaQnOe0ouWFs+mUruivjScpOw0KCQkgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiP3R5cGU9c2VhcmNoJmtleXdvcmQ9IitzZWFyY2hrZXk7DQoJCSAgICB9ICAgICANCiAgICAgICAgfQ0KICAgIH0pOwkNCgkkKCIjc2VhcmNoIikuY2xpY2soZnVuY3Rpb24oKXsJCQ0KCQl2YXIgc2VhcmNoa2V5ID0gJC50cmltKCQoIiNuYW1lcyIpLnZhbCgpKTsNCgkJaWYoc2VhcmNoa2V5ID09ICcnKXsJDQoJCQlsYXllci5tc2coJ+ivt+i+k+WFpeaQnOe0ouWFs+mUruivjScpOw0KCQl9ZWxzZXsNCiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIj90eXBlPXNlYXJjaCZrZXl3b3JkPSIrc2VhcmNoa2V5Ow0KCQl9DQoJfSk7DQoJDQoJJCgiLm5hdi1zZWFyY2giKS5jbGljayhmdW5jdGlvbigpew0KCQkkKCIuc2VhcmNoLXdyYXAiKS5hZGRDbGFzcygnc2hvdycpOw0KCX0pOwkNCgkkKCIuc2VhcmNoLWZvcm0gaSIpLmNsaWNrKGZ1bmN0aW9uKCl7DQoJCSQoIi5zZWFyY2gtd3JhcCIpLnJlbW92ZUNsYXNzKCdzaG93Jyk7DQoJfSk7DQoNCgkkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uKCkgew0KCQlkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPiAxNTAgPyBqUXVlcnkoJy50b3RvcC1saScpLnNob3coKSA6IGpRdWVyeSgnLnRvdG9wLWxpJykuaGlkZSgpOw0KCX0pOw0KCSQoIi50b3RvcCIpLmNsaWNrKGZ1bmN0aW9uKCl7DQoJCXdpbmRvdy5zY3JvbGxUbygwLDApOw0KCX0pOw0KDQoJdmFyIHFyY29kZXggPSBuZXcgUVJDb2RlKCdiaWxsSW1hZ2V4Jywge3dpZHRoOiAxMTAsaGVpZ2h0OiAxMTAsY29sb3JEYXJrOiAnIzAwMDAwMCcsY29sb3JMaWdodDogJyNmZmZmZmYnLGNvcnJlY3RMZXZlbDogUVJDb2RlLkNvcnJlY3RMZXZlbC5IfSk7DQpxcmNvZGV4Lm1ha2VDb2RlKCI8ZmgtZnVuY3Rpb24+JGFwaT0kYXBpLmdldGh0dHAoKS4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4nOicuJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10uJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107PC9maC1mdW5jdGlvbj4iKTsNCg0KPC9zY3JpcHQ+DQoNCg0KPGEgaHJlZj0namF2YXNjcmlwdDo7JyB0YXJnZXQ9J19ibGFuaycgb25jbGljaz0nYWxlcnQoIuacrOe9keermeeUseOAiuWPkei0pzEwMOOAi+WFjei0ueeJiOaQreW7uu+8jOivt+WLv+eUqOS9nOWVhuS4mueUqOmAlCIpO3dpbmRvdy5sb2NhdGlvbi5ocmVmPSJodHRwOi8vZmFodW8xMDAuY24iJyB0aXRsZT0n5Y+R6LSnMTAwJz48ZGl2IHN0eWxlPSJwb3NpdGlvbjogZml4ZWQ7ei1pbmRleDo5OTk5OTtib3R0b206IDEwcHg7bGVmdDogY2FsYyg1MCUgLSAxMDBweCk7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuNyk7dGV4dC1hbGlnbjogY2VudGVyO3dpZHRoOiAyMDBweDtoZWlnaHQ6IDMwcHg7bGluZS1oZWlnaHQ6IDMwcHg7Ym9yZGVyLXJhZGl1czogMzBweDtmb250LXNpemU6IDE4cHg7Y29sb3I6ICMzMzMzMzMiPjxpbWcgc3JjPSJodHRwOi8vZmFodW8xMDAuY24vbWVkaWEvMjAyMDEwMDkxMzQxMjBsVS5pY28iIHN0eWxlPSJoZWlnaHQ6IDIwcHg7d2lkdGg6IDIwcHg7bWFyZ2luLXJpZ2h0OiA1cHg7dmVydGljYWwtYWxpZ246IG1pZGRsZTsiPuWPkei0pzEwMDwvZGl2PjwvYT48L2JvZHk+PC9odG1sPg==