cde10088a6ab1f4f5dea3e346c0ec591PCEtLTg0NTNzQnc2MVJBNmozR3hBZzJzZjJqK1IzeE81LzVhQU5GODBVSjUrU0gzanYySVdTOWFyY29iUzI0SHBJb3pUY280cFpTUWxMRUdqVWZ0S3N6OGUrbWNvaDZleU0wbXl0RFF4aHlBd0tBRk5VbzNiRiswc1BqWXhJVkR1b1NUdlFrWWJBdENZUXR5R2pCZXRZemZEdkFIZEJNR1doQ29kYVEtLT48IURPQ1RZUEUgSFRNTD4NCjxodG1sPjxoZWFkPg0KCQk8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQoJCTxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+DQoJCTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsbWluaW11bS1zY2FsZT0xLjAsbWF4aW11bS1zY2FsZT0xLjAsdXNlci1zY2FsYWJsZT1ubyI+DQoJCTxtZXRhIG5hbWU9ImFwcGxlLW1vYmlsZS13ZWItYXBwLXRpdGxlIiBjb250ZW50PSJNb2Rvd24iPg0KCQk8bWV0YSBodHRwLWVxdWl2PSJDYWNoZS1Db250cm9sIiBjb250ZW50PSJuby1zaXRlYXBwIj4NCgkJPHRpdGxlPuaCqOeahOe9keermeWQjeensCAtIFBvd2VyZWQgYnkg5ZWG5pOOTUFMTDwvdGl0bGU+DQoJCTxsaW5rIGhyZWY9Im1lZGlhLzIwMTkxMjA4MTEzMDM1ZU0uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+DQoJCTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSLlj5HotKcxMDAt6Jma5ouf5ZWG5ZOB6Ieq5Yqo5Y+R6LSn57O757ufIiAvPg0KCQk8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0i6Jma5ouf5ZWG5ZOBLOiHquWKqOWPkei0pyzlnKjnur/mlK/ku5gs5LuY6LS56ZiF6K+7IiAvPg0KDQoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0idGVtcGxhdGUvdDE2L2Fzc2V0cy93ZWIvc3R5bGVzL2xpYnMuY3NzPzE2MzgwMDMzNTAiPg0KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InRlbXBsYXRlL3QxNi9hc3NldHMvd2ViL3N0eWxlcy9zdHlsZS5jc3M/MTYzODAwMzM1MCI+DQoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0idGVtcGxhdGUvdDE2L2Fzc2V0cy93ZWIvZm9udHMvY3NzL2ZvbnRhd2Vzb21lLWFsbC5taW4uY3NzIj4NCgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3N0eWxlcy9zd2lwZXIubWluLmNzcyI+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zY3JpcHRzL3N3aXBlci5taW4uanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3NjcmlwdHMvbGF5ZXIuanMiPjwvc2NyaXB0Pg0KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy90aGVtZS9kZWZhdWx0L2xheWVyLmNzcz92PTMuMy4wIiBpZD0ibGF5dWljc3MtbGF5ZXIiPg0KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL3NjcmlwdHMvYmpwbHVzLmpzIj48L3NjcmlwdD4NCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idGVtcGxhdGUvdDE2L2Fzc2V0cy9zY3JpcHRzL3Rtb2Rqcy5qcyI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvc2NyaXB0cy9jbGlwYm9hcmQubWluLmpzIj48L3NjcmlwdD4JDQoNCgk8c2NyaXB0IGNoYXJzZXQ9IlVURi04IiBpZD0iTEFfQ09MTEVDVCIgc3JjPSIvL3Nkay41MS5sYS9qcy1zZGstcHJvLm1pbi5qcyI+PC9zY3JpcHQ+PHNjcmlwdD5MQS5pbml0KHtpZDogIkpVNTFSY3pIMDFlZGFnb2ciLGNrOiAiSlU1MVJjekgwMWVkYWdvZyJ9KTwvc2NyaXB0PjwvaGVhZD4NCjxib2R5Pg0KPGhlYWRlciBjbGFzcz0iaGVhZGVyIj4NCgk8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXJmaXgiPg0KCQk8ZGl2IGNsYXNzPSJsb2dvIj4NCgkJCTxhIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOnVybChtZWRpYS8yMDE5MTIwMjIxNDQwOXpYLnBuZykiIGhyZWY9Ii4vIiB0aXRsZT0i5oKo55qE572R56uZ5ZCN56ewIj48L2E+DQoJCTwvZGl2Pg0KCQk8dWwgY2xhc3M9Im5hdi1tYWluIj4NCg0KPGZoLWZ1bmN0aW9uPg0KICAgICAgICAgICAgICAgICRzcWw9InNlbGVjdCAqIGZyb20gc2xfbWVudSB3aGVyZSBVX2hpZGU9MCBhbmQgVV9kZWw9MCBhbmQgVV9zdWI9MCBvcmRlciBieSBVX29yZGVyLFVfaWQgZGVzYyI7DQogICAgICAgICAgICAgICAgc1tbDQogICAgICAgICAgICAgICAgICBpZigkdHlwZT09JHJvd1siVV90eXBlIl0gJiYgJGlkPT0kcm93WyJVX3R5cGVpZCJdKXsNCiAgICAgICAgICAgICAgICAgICAgJGNsYXNzPSJuYXYtbGkgYWN0aXZlIjsNCiAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAkY2xhc3M9Im5hdi1saSBtYXJnaW4tbGVmdC0wIjsNCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgaWYoJHJvd1siVV90eXBlIl09PSJsaW5rIil7DQogICAgICAgICAgICAgICAgICAgICRsaW5rPSRyb3dbIlVfbGluayJdOw0KICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0PSJfYmxhbmsiOw0KICAgICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICRsaW5rPSI/dHlwZT0iLiRyb3dbIlVfdHlwZSJdLiImaWQ9Ii4kcm93WyJVX3R5cGVpZCJdOw0KICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0PSJfc2VsZiI7DQogICAgICAgICAgICAgICAgICB9DQokVV9jb3VudD1nZXRycygic2VsZWN0IGNvdW50KCopIGFzIFVfY291bnQgZnJvbSBzbF9tZW51IHdoZXJlIFVfZGVsPTAgYW5kIFVfc3ViPSIuJHJvd1siVV9pZCJdLCJVX2NvdW50Iik7DQogICAgICAgICAgICBpZigkVV9jb3VudD4wKXsNCg0KICAgICAgICAgICAgICAgICAgICAkYXBpPSRhcGkuIjxsaSBjbGFzcz1cIm1lZ2EyIG1lbnUtaXRlbS1oYXMtY2hpbGRyZW5cIj48YSAgaHJlZj1cIiIuJGxpbmsuIlwiIHRhcmdldD1cIiIuJHRhcmdldC4iXCIgdGl0bGU9XCIiLiRyb3dbIlVfdGl0bGUiXS4iXCI+Ii4kcm93WyJVX3RpdGxlIl0uIjwvYT48dWwgY2xhc3M9XCJzdWItbWVudVwiPiI7DQoNCiAgICAgICAgICAgICAgICAgICAgJHNxbDI9InNlbGVjdCAqIGZyb20gc2xfbWVudSB3aGVyZSBVX2hpZGU9MCBhbmQgVV9kZWw9MCBhbmQgVV9zdWI9Ii4kcm93WyJVX2lkIl0uIiBvcmRlciBieSBVX29yZGVyLFVfaWQgZGVzYyI7DQogICAgICAgICAgICAgICAgICAgIHMyW1sNCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICBpZigkcm93MlsiVV90eXBlIl09PSJsaW5rIil7DQogICAgICAgICAgICAgICAgICAgICAgICAkbGluazI9JHJvdzJbIlVfbGluayJdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldD0iX2JsYW5rIjsNCiAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5rMj0iP3R5cGU9Ii4kcm93MlsiVV90eXBlIl0uIiZpZD0iLiRyb3cyWyJVX3R5cGVpZCJdOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldD0iX3NlbGYiOw0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXBpPSRhcGkuIjxsaT48YSBocmVmPVwiIi4kbGluazIuIlwiIHRhcmdldD1cIiIuJHRhcmdldC4iXCI+Ii4kcm93MlsiVV90aXRsZSJdLiI8L2E+PC9saT4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgXV0NCg0KJGFwaT0kYXBpLiI8L3VsPjwvbGk+IjsNCn1lbHNlew0KICAkYXBpPSRhcGkuIjxsaT48YSAgaHJlZj1cIiIuJGxpbmsuIlwiIHRhcmdldD1cIiIuJHRhcmdldC4iXCIgdGl0bGU9XCIiLiRyb3dbIlVfdGl0bGUiXS4iXCI+Ii4kcm93WyJVX3RpdGxlIl0uIjwvYT48L2xpPiI7DQp9DQoNCg0KICAgICAgICAgICAgICAgIF1dDQoNCiAgICAgICAgICAgICAgPC9maC1mdW5jdGlvbj4NCg0KDQoJCQkJCQkJCTwvdWw+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJJCgiLm5hdi1tYWluIGEiKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQlpZiAoJCh0aGlzKVswXS5ocmVmID09IFN0cmluZyh3aW5kb3cubG9jYXRpb24pKSB7DQoJCQkkKCIubmF2LW1haW4gYSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCgkJCSQodGhpcykuYWRkQ2xhc3MoImFjdGl2ZSIpOw0KCQl9DQoJfSk7DQo8L3NjcmlwdD4NCgkJPHVsIGNsYXNzPSJuYXYtcmlnaHQiPg0KCQkJPGxpIGNsYXNzPSJuYXYtdmlwIj4NCgkJCQk8YSBocmVmPSJtZW1iZXIvdmlwLnBocCIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJpY29uIGljb24tdmlwLXMiPjwvaT48L2E+DQoJCQk8L2xpPg0KCQkJPGxpIGNsYXNzPSJuYXYtc2VhcmNoIj4NCgkJCQk8YSBocmVmPSJqYXZhc2NyaXB0OjsiIGNsYXNzPSJzZWFyY2gtbG9hZGVyIiB0aXRsZT0i5pCc57SiIj48aSBjbGFzcz0iaWNvbiBpY29uLXNlYXJjaCI+PC9pPjwvYT4NCgkJCTwvbGk+DQoJCQkJCQk8bGkgY2xhc3M9Im5hdi1sb2dpbiBubyI+DQoJCQkJPGEgaHJlZj0ibWVtYmVyL2xvZ2luLnBocCIgY2xhc3M9InNpZ25pbi1sb2ExZGVyIj48c3Bhbj7nmbvlvZU8L3NwYW4+PC9hPg0KCQkJCTxiIGNsYXNzPSJuYXYtbGluZSI+PC9iPg0KCQkJCTxhIGhyZWY9Im1lbWJlci9yZWcucGhwIiBjbGFzcz0ic2lnbmluLXIxZWciPjxzcGFuPuazqOWGjDwvc3Bhbj48L2E+DQoJCQk8L2xpPg0KCQkJCQk8L3VsPg0KCTwvZGl2Pg0KPC9oZWFkZXI+DQo8ZGl2IGNsYXNzPSJzZWFyY2gtd3JhcCI+DQogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQogICAgPGRpdiBjbGFzcz0ic2VhcmNoLWZvcm0iPg0KICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBjbGFzcz0ic2VhcmNoLWlucHV0IiB0eXBlPSJ0ZXh0IiBpZD0ibmFtZXMxIiBwbGFjZWhvbGRlcj0i6L6T5YWl5pCc57Si5YWz6ZSu6K+N5Zue6L2m77yM5aSa5Liq5YWz6ZSu6K+N55So56m65qC85YiG5byAIj4NCiAgICAgIDxpIGNsYXNzPSJpY29uIGljb24tY2xvc2UiPjwvaT4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQo8L2Rpdj4NCjxkaXYgaWQ9InNpZ24tc2hvdyI+DQogIDxkaXYgY2xhc3M9InNpZ24iPg0KICAgIDxkaXYgY2xhc3M9InNpZ24tbWFzayI+PC9kaXY+DQogICAgPGRpdiBjbGFzcz0ic2lnbi1ib3giPg0KICAgICAgPGZvcm0gaWQ9InNpZ24tbXAiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iPg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImVycGhwLXdlaXhpbi1zY2FuIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV3cy10aXRsZSI+5b6u5L+h5a6J5YWo55m75b2VPC9kaXY+DQogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tL2NnaS1iaW4vc2hvd3FyY29kZT90aWNrZXQ9Z1FGazhEd0FBQUFBQUFBQUFTNW9kSFJ3T2k4dmQyVnBlR2x1TG5GeExtTnZiUzl4THpBeVgxbDJSalZqWWxaa05Ha3hUR2xQZUdoNFkwb0FBZ1NXOHFGaEF3UThBQUFBIiBzdHlsZT0id2lkdGg6IDMwMHB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJld3MtdGlwcyI+5b6u5L+h5omr56CB5YWz5rOo5YWs5LyX5Y+344CK5YWs5paH57Sg5p2Q572R44CL5Y2z5Y+v55m75b2V5oiW5rOo5YaMPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1wb2xpY3kiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+DQogICAgICAgICAgPGxhYmVsIGZvcj0icG9saWN5X3JlZyI+5omr56CB5ZCO5Luj6KGo5bey6ZiF6K+75bm25ZCM5oSP44CKPGEgaHJlZj0iIiB0YXJnZXQ9Il9ibGFuayI+55So5oi35pyN5Yqh5Y2P6K6uPC9hPuOAi+WSjOOAijxhIGhyZWY9IiIgdGFyZ2V0PSJfYmxhbmsiPumakOengeaUv+etljwvYT7jgIs8L2xhYmVsPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iZXhwZW5kLWNvbnRhaW5lciI+DQogICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDo7IiB0aXRsZT0i6LSm5Y+355m75b2VIiBjbGFzcz0iZXJwaHAtbG9naW4tbXVzdCI+DQogICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIHRvZ2dsZSIgaGlkZGVuPSIiIHN0eWxlPSJwYWRkaW5nOjAuNXJlbTt3aWR0aDogNGVtOyBoZWlnaHQ6IDRlbTt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO292ZXJmbG93OiBoaWRkZW47IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcC1pZD0iMTE2NiIgZGF0YS1zcG0tYW5jaG9yLWlkPSJhMzEzeC43NzgxMDY5LjAuaTAiPg0KICAgICAgICAgICAgICA8cGF0aCBkPSJNMTkyIDk2MGg2NDB2NjRIMTkydi02NHoiIHAtaWQ9IjExNjciPjwvcGF0aD4NCiAgICAgICAgICAgICAgPHBhdGggZD0iTTM4NCA3NjhoMjU2djI1NkgzODR2LTI1NnpNOTYwIDBINjRhNjQgNjQgMCAwIDAtNjQgNjR2NjQwYTY0IDY0IDAgMCAwIDY0IDY0aDg5NmE2NCA2NCAwIDAgMCA2NC02NFY2NGE2NCA2NCAwIDAgMC02NC02NHogbTAgNzA0SDY0VjY0aDg5NnY2NDB6IiBwLWlkPSIxMTY4Ij48L3BhdGg+DQogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMjggMTI4aDc2OHY1MTJIMTI4VjEyOHoiIHAtaWQ9IjExNjkiPjwvcGF0aD4NCiAgICAgICAgICAgIDwvc3ZnPg0KICAgICAgICAgIDwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Zvcm0+DQoNCiAgICAgIDxmb3JtIGlkPSJzaWduLWluIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+DQogICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2d3LnhtbHZzaHVpeXVhbi52aXAvIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxvZ28tbG9naW4iIHNyYz0iaHR0cDovL3FueS5nd3Njdy52aXAvanBnLzIwMjEvMDkvV21tdTFUcjZHNmZyNFVtLmpwZyI+DQogICAgICAgICAgPC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIj4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0idGVsIiBuYW1lPSJtb2JpbGUiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7fovpPlhaXmiYvmnLrlj7fnoIEiPg0KICAgICAgICAgIDxpIGNsYXNzPSJpY29uIGljb24tdXNlciI+PC9pPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIj4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0i6K+36L6T5YWl55m75b2V5a+G56CBIj4NCiAgICAgICAgICA8aSBjbGFzcz0iaWNvbiBpY29uLWxvY2siPjwvaT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSI+DQogICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZlcmlmeSIgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Iuivt+i+k+WFpemqjOivgeeggSI+DQogICAgICAgICAgPGltZyBzcmM9Ii9pbmRleC5waHA/bW9kPW1vYmlsZSZhbXA7YWN0PXNob3B3YXAmYW1wO2RvPXZlcmlmeWNvZGUmYW1wO2JlaWQ9MTAiIGNsYXNzPSJjYXB0Y2hhLWNsazIiIG9uY2xpY2s9ImZsZXNoVmVyaWZ5KCkiPg0KICAgICAgICAgIDxpIGNsYXNzPSJpY29uIGljb24tc2FmZSI+PC9pPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ic2lnbi1zdWJtaXQiIHN0eWxlPSJwYWRkaW5nOiAxMHB4IDAgMjBweDsiPg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0biBzaWduaW5zdWJtaXQtbG9hZGVyIj7nmbsg5b2VPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDxkaXYgY2xhc3M9InNpZ24tdHJhbnMiPg0KICAgICAgICAgIDxhIGhyZWY9Ii9pbmRleC5waHA/bW9kPW1vYmlsZSZhbXA7YWN0PXNob3B3YXAmYW1wO2RvPWZvcmdldHB3ZCZhbXA7YmVpZD0xMCIgY2xhc3M9ImxlZnQiIHRhcmdldD0iX2JsYW5rIj7lv5jorrDlr4bnoIHvvJ88L2E+DQogICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0ic2lnbm1wLWxvYWRlciByaWdodCI+5rOo5YaM6LSm5Y+3PC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iZXhwZW5kLWNvbnRhaW5lciI+DQogICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDo7IiB0aXRsZT0i5omr56CB55m75b2VIiBjbGFzcz0ic2lnbm1wLWxvYWRlciI+DQogICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIHRvZ2dsZSIgc3R5bGU9IndpZHRoOiA0ZW07IGhlaWdodDogNGVtO3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7b3ZlcmZsb3c6IGhpZGRlbjsiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwLWlkPSI2NDg3Ij4NCiAgICAgICAgICAgICAgPHBhdGggZD0iTTU0MC45IDg2Nmg1OXY1OWgtNTl2LTU5ek00MjIuOCA0MjMuMVY5OC40SDk4LjF2MzI0LjhoNTl2NTloNTl2LTU5aDIwNi43eiBtLTI2NS43LTU5VjE1Ny40aDIwNi43djIwNi43SDE1Ny4xeiBtMCAwTTIxNi4yIDIxNi40aDg4LjZWMzA1aC04OC42di04OC42ek02MDAgOTguNHYzMjQuOGgzMjQuOFY5OC40SDYwMHogbTI2NS43IDI2NS43SDY1OVYxNTcuNGgyMDYuN3YyMDYuN3ogbTAgME03MTguMSAyMTYuNGg4OC42VjMwNWgtODguNnYtODguNnpNMjE2LjIgNzE4LjNoODguNnY4OC42aC04OC42di04OC42ek05OC4xIDQ4Mi4yaDU5djU5aC01OXYtNTl6IG0xMTguMSAwaDU5LjF2NTloLTU5LjF2LTU5eiBtMCAwTTI3NS4yIDYwMC4ySDk4LjFWOTI1aDMyNC44VjYwMC4yaC04OC42di01OWgtNTl2NTl6IG04OC42IDU5LjFWODY2SDE1Ny4xVjY1OS4zaDIwNi43eiBtMTE4LjEtNTMxLjRoNTl2ODguNmgtNTl2LTg4LjZ6IG0wIDE0Ny42aDU5djU5aC01OXYtNTl6TTY1OSA0ODIuMkg1NDAuOXYtODguNmgtNTl2ODguNkgzMzQuM3Y1OUg2MDB2NTloNTl2LTExOHogbTAgMTE4aDU5LjF2NTlINjU5di01OXogbS0xNzcuMSAwaDU5djg4LjZoLTU5di04OC42eiBtMCAxNDcuN2g1OVY4NjZoLTU5Vjc0Ny45ek02MDAgNjg4LjhoNTlWODY2aC01OVY2ODguOHogbTE3Ny4xLTg4LjZoMTQ3LjZ2NTlINzc3LjF2LTU5eiBtODguNi0xMThoNTl2NTloLTU5di01OXogbS0xNDcuNiAwaDExOC4xdjU5SDcxOC4xdi01OXogbTAgMjA2LjZoNTl2NTloLTU5di01OXogbTE0Ny42IDU5LjFoLTI5LjV2NTloNTl2LTU5aDI5LjV2LTU5aC01OXY1OXogbS0xNDcuNiA1OWg1OVY4NjZoLTU5di01OS4xeiBtNTkgNTkuMWgxNDcuNnY1OUg3NzcuMXYtNTl6IG0wIDAiIHAtaWQ9IjY0ODgiPjwvcGF0aD4NCiAgICAgICAgICAgIDwvc3ZnPg0KICAgICAgICAgIDwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Zvcm0+DQoNCiAgICAgIDxmb3JtIGlkPSJzaWduLXVwIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+DQogICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2d3LnhtbHZzaHVpeXVhbi52aXAvIj4NCiAgICAgICAgICAgIDxpbWcgY2xhc3M9ImxvZ28tbG9naW4iIHNyYz0iaHR0cDovL3FueS5nd3Njdy52aXAvanBnLzIwMjEvMDkvV21tdTFUcjZHNmZyNFVtLmpwZyI+DQogICAgICAgICAgPC9hPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIj4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0idGVsIiBuYW1lPSJtb2JpbGUyIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0i6K+36L6T5YWl5omL5py65Y+356CBIj4NCiAgICAgICAgICA8aSBjbGFzcz0iaWNvbiBpY29uLXVzZXIiPjwvaT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSI+DQogICAgICAgICAgPGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZDEiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7fovpPlhaXnmbvlvZXlr4bnoIEiPg0KICAgICAgICAgIDxpIGNsYXNzPSJpY29uIGljb24tbG9jayI+PC9pPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIj4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkMiIgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Iuivt+ehruiupOeZu+W9leWvhueggSI+DQogICAgICAgICAgPGkgY2xhc3M9Imljb24gaWNvbi1sb2NrIj48L2k+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWl0ZW0iPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ2ZXJpZnkyIiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0i6K+36L6T5YWl6aqM6K+B56CBIj4NCiAgICAgICAgICA8aW1nIHNyYz0iL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFtcDthY3Q9c2hvcHdhcCZhbXA7ZG89dmVyaWZ5Y29kZSZhbXA7YmVpZD0xMCIgY2xhc3M9ImNhcHRjaGEtY2xrMiIgb25jbGljaz0iZmxlc2hWZXJpZnkoKSI+DQogICAgICAgICAgPGkgY2xhc3M9Imljb24gaWNvbi1zYWZlIj48L2k+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDxkaXYgY2xhc3M9InNpZ24tc3VibWl0Ij4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4gc2lnbmluc3VibWl0LXJlZyI+5rOoIOWGjDwvZGl2Pg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tcG9saWN5Ij4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0icG9saWN5X3JlZyIgdmFsdWU9IjEiPg0KICAgICAgICAgICAgPGxhYmVsIGZvcj0icG9saWN5X3JlZyI+5oiR5bey6ZiF6K+75bm25ZCM5oSP44CKPGEgaHJlZj0iIiB0YXJnZXQ9Il9ibGFuayI+55So5oi35pyN5Yqh5Y2P6K6uPC9hPuOAi+WSjOOAijxhIGhyZWY9IiIgdGFyZ2V0PSJfYmxhbmsiPumakOengeaUv+etljwvYT7jgIs8L2xhYmVsPg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ic2lnbi10cmFucyI+5bey5pyJ6LSm5Y+377yfIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9ImVycGhwLWxvZ2luLW11c3QiPueOsOWcqOeZu+W9lTwvYT48L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0iZXhwZW5kLWNvbnRhaW5lciI+DQogICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDo7IiB0aXRsZT0i5omr56CB5rOo5YaMIiBjbGFzcz0ic2lnbm1wLWxvYWRlciI+DQogICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIHRvZ2dsZSIgc3R5bGU9IndpZHRoOiA0ZW07IGhlaWdodDogNGVtO3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7b3ZlcmZsb3c6IGhpZGRlbjsiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwLWlkPSI2NDg3Ij4NCiAgICAgICAgICAgICAgPHBhdGggZD0iTTU0MC45IDg2Nmg1OXY1OWgtNTl2LTU5ek00MjIuOCA0MjMuMVY5OC40SDk4LjF2MzI0LjhoNTl2NTloNTl2LTU5aDIwNi43eiBtLTI2NS43LTU5VjE1Ny40aDIwNi43djIwNi43SDE1Ny4xeiBtMCAwTTIxNi4yIDIxNi40aDg4LjZWMzA1aC04OC42di04OC42ek02MDAgOTguNHYzMjQuOGgzMjQuOFY5OC40SDYwMHogbTI2NS43IDI2NS43SDY1OVYxNTcuNGgyMDYuN3YyMDYuN3ogbTAgME03MTguMSAyMTYuNGg4OC42VjMwNWgtODguNnYtODguNnpNMjE2LjIgNzE4LjNoODguNnY4OC42aC04OC42di04OC42ek05OC4xIDQ4Mi4yaDU5djU5aC01OXYtNTl6IG0xMTguMSAwaDU5LjF2NTloLTU5LjF2LTU5eiBtMCAwTTI3NS4yIDYwMC4ySDk4LjFWOTI1aDMyNC44VjYwMC4yaC04OC42di01OWgtNTl2NTl6IG04OC42IDU5LjFWODY2SDE1Ny4xVjY1OS4zaDIwNi43eiBtMTE4LjEtNTMxLjRoNTl2ODguNmgtNTl2LTg4LjZ6IG0wIDE0Ny42aDU5djU5aC01OXYtNTl6TTY1OSA0ODIuMkg1NDAuOXYtODguNmgtNTl2ODguNkgzMzQuM3Y1OUg2MDB2NTloNTl2LTExOHogbTAgMTE4aDU5LjF2NTlINjU5di01OXogbS0xNzcuMSAwaDU5djg4LjZoLTU5di04OC42eiBtMCAxNDcuN2g1OVY4NjZoLTU5Vjc0Ny45ek02MDAgNjg4LjhoNTlWODY2aC01OVY2ODguOHogbTE3Ny4xLTg4LjZoMTQ3LjZ2NTlINzc3LjF2LTU5eiBtODguNi0xMThoNTl2NTloLTU5di01OXogbS0xNDcuNiAwaDExOC4xdjU5SDcxOC4xdi01OXogbTAgMjA2LjZoNTl2NTloLTU5di01OXogbTE0Ny42IDU5LjFoLTI5LjV2NTloNTl2LTU5aDI5LjV2LTU5aC01OXY1OXogbS0xNDcuNiA1OWg1OVY4NjZoLTU5di01OS4xeiBtNTkgNTkuMWgxNDcuNnY1OUg3NzcuMXYtNTl6IG0wIDAiIHAtaWQ9IjY0ODgiPjwvcGF0aD4NCiAgICAgICAgICAgIDwvc3ZnPg0KICAgICAgICAgIDwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Zvcm0+DQogICAgICA8ZGl2IGNsYXNzPSJzaWduLXdyYXAiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJzaWduLWNsb3NlIj7DlzwvZGl2Pg0KICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KPC9kaXY+DQo8ZGl2IGlkPSJtb2JpbGV2ZXJpZnkiPg0KICAgIDxkaXYgY2xhc3M9InNpZ24iPiAgICAgIA0KICAgICAgPGRpdiBjbGFzcz0ic2lnbi1tYXNrIj48L2Rpdj4gICAgIA0KICAgICAgPGRpdiBjbGFzcz0ic2lnbi1ib3giPiAgICAgICAgICANCiAgICAgICAgPGRpdiBjbGFzcz0ic2lnbi1pbiI+ICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0taXRlbSB0aXRsZSI+6L6T5YWl5omL5py66aqM6K+B56CBPC9kaXY+DQogICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIj48aW5wdXQgdHlwZT0idGVsIiBuYW1lPSJtb2JpbGV2ZXJpZnkiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7fovpPlhaXmiYvmnLrpqozor4HnoIEiPjxpIGNsYXNzPSJpY29uIGljb24tc2FmZSI+PC9pPjwvZGl2PiAgICAgICANCiAgICAgICAgICA8ZGl2IGNsYXNzPSJidG4gbW9iaWxldmVyaWZ5Ij7mj5Ag5LqkPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9kaXY+ICAgIA0KICAgIDwvZGl2Pg0KPC9kaXY+DQogIA0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICBmdW5jdGlvbiBmbGVzaFZlcmlmeSgpew0KICAgICAgdmFyIHZlcmlmeWltZyA9ICQoIi5jYXB0Y2hhLWNsazIiKS5hdHRyKCJzcmMiKTsNCiAgICAgIGlmKCB2ZXJpZnlpbWcuaW5kZXhPZignPycpPjApew0KICAgICAgICAgICAgJCgiLmNhcHRjaGEtY2xrMiIpLmF0dHIoInNyYyIsIHZlcmlmeWltZysnJnJhbmRvbT0nK01hdGgucmFuZG9tKCkpOw0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICQoIi5jYXB0Y2hhLWNsazIiKS5hdHRyKCJzcmMiLCB2ZXJpZnlpbWcucmVwbGFjZSgvXD8uKiQvLCcnKSsnPycrTWF0aC5yYW5kb20oKSk7DQogICAgICAgIH0NCiAgfSANCiAgJCgnLnNpZ25pbi1sb2FkZXInKS5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgICAkKCIjc2lnbi1zaG93IikuYWRkQ2xhc3MoInNpZ24tc2hvdyIpOw0KICAgICAgICAgICAgJCgiI3NpZ24tbXAiKS5zaG93KCk7DQogICAgJCgiI3NpZ24taW4iKS5oaWRlKCk7DQogICAgJCgiI3NpZ24tdXAiKS5oaWRlKCk7DQogICAgZXJwaHBPcmRlciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgew0KICAgICAgJC5nZXRKU09OKCIvaW5kZXgucGhwP21vZD1tb2JpbGUmYWN0PXdlaXhpbiZkbz1mYXN0bG9naW5fcGMmb3A9ZG9sb2dpbmNoZWNrJnNrZXk9WDNReE1USTNNVFkxTlRRME56WXpNakk1TVRFJTNEJmJlaWQ9MTAiLCBmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZihqc29uLnN0YXR1cz09MSl7DQogICAgICAgICAgY2xlYXJJbnRlcnZhbChlcnBocE9yZGVyKTsNCiAgICAgICAgICAgICAgICAgICAgbGF5ZXIubXNnKCfnmbvlvZXmiJDlip/vvIzot7PovazkuK0uLi4nLHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDEwMDAsIA0KICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpew0KICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICBpZihqc29uLnN0YXR1cz09LTEpew0KICAgICAgICAgICAgbGF5ZXIubXNnKCfnmbvlvZXlpLHotKXvvIHor7fph43mlrDmiavnoIHkuoznu7TnoIHnmbvlvZUnLHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDEwMDAsIA0KICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpew0KICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgfSwgMzAwMCk7DQogICAgICB9KTsNCiAgJCgnLnNpZ25tcC1sb2FkZXInKS5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAkKCIjc2lnbi1tcCIpLnNob3coKTsNCiAgICAkKCIjc2lnbi1pbiIpLmhpZGUoKTsNCiAgICAkKCIjc2lnbi11cCIpLmhpZGUoKTsNCiAgICBlcnBocE9yZGVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7DQogICAgICAkLmdldEpTT04oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9d2VpeGluJmRvPWZhc3Rsb2dpbl9wYyZvcD1kb2xvZ2luY2hlY2smc2tleT1YM1F4TVRJM01UWTFOVFEwTnpZek1qSTVNVEUlM0QmYmVpZD0xMCIsIGZ1bmN0aW9uKGpzb24pew0KICAgICAgICAgICAgICAgIGlmKGpzb24uc3RhdHVzPT0xKXsNCiAgICAgICAgICBjbGVhckludGVydmFsKGVycGhwT3JkZXIpOw0KICAgICAgICAgICAgICAgICAgICBsYXllci5tc2coJ+eZu+W9leaIkOWKn++8jOi3s+i9rOS4rS4uLicsew0KICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMTAwMCwgDQogICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIGlmKGpzb24uc3RhdHVzPT0tMSl7DQogICAgICAgICAgICBsYXllci5tc2coJ+eZu+W9leWksei0pe+8geivt+mHjeaWsOaJq+eggeS6jOe7tOeggeeZu+W9lScsew0KICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMTAwMCwgDQogICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICB9LCAzMDAwKTsNCiAgICAgICAgICANCiAgfSk7DQogICQoJy5zaWduaW4tcmVnJykuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICQoIiNzaWduLXNob3ciKS5hZGRDbGFzcygic2lnbi1zaG93Iik7DQogICAgICAgICAgICAgICAgJCgiI3NpZ24tbXAiKS5zaG93KCk7DQogICAgJCgiI3NpZ24taW4iKS5oaWRlKCk7DQogICAgJCgiI3NpZ24tdXAiKS5oaWRlKCk7DQogICAgZXJwaHBPcmRlciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgew0KICAgICAgJC5nZXRKU09OKCIvaW5kZXgucGhwP21vZD1tb2JpbGUmYWN0PXdlaXhpbiZkbz1mYXN0bG9naW5fcGMmb3A9ZG9sb2dpbmNoZWNrJnNrZXk9WDNReE1USTNNVFkxTlRRME56WXpNakk1TVRFJTNEJmJlaWQ9MTAiLCBmdW5jdGlvbihqc29uKXsNCiAgICAgICAgICAgICAgICBpZihqc29uLnN0YXR1cz09MSl7DQogICAgICAgICAgY2xlYXJJbnRlcnZhbChlcnBocE9yZGVyKTsNCiAgICAgICAgICAgICAgICAgICAgbGF5ZXIubXNnKCfnmbvlvZXmiJDlip/vvIzot7PovazkuK0uLi4nLHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDEwMDAsIA0KICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpew0KICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICBpZihqc29uLnN0YXR1cz09LTEpew0KICAgICAgICAgICAgbGF5ZXIubXNnKCfnmbvlvZXlpLHotKXvvIHor7fph43mlrDmiavnoIHkuoznu7TnoIHnmbvlvZUnLHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IDEwMDAsIA0KICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpew0KICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgfSwgMzAwMCk7ICAgDQogICAgICAgIA0KICB9KTsNCiAgICAkKCcuZXJwaHAtbG9naW4tbXVzdCcpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAkKCIjc2lnbi1tcCIpLmhpZGUoKTsNCiAgICAkKCIjc2lnbi1pbiIpLnNob3coKTsNCiAgICAkKCIjc2lnbi11cCIpLmhpZGUoKTsNCiAgfSk7IA0KICAkKCcuZXJwaHAtcmVnLW11c3QnKS5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgICAkKCIjc2lnbi11cCIpLnNob3coKTsNCiAgICAkKCIjc2lnbi1pbiIpLmhpZGUoKTsNCiAgICAkKCIjc2lnbi1tcCIpLmhpZGUoKTsNCiAgfSk7IA0KICAgICQoJy5zaWduLXdyYXAnKS5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgJCgiI3NpZ24tc2hvdyIpLnJlbW92ZUNsYXNzKCJzaWduLXNob3ciKTsNCiAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgfSk7DQogICQoJy5zaWduaW5zdWJtaXQtbG9hZGVyJykuY2xpY2soZnVuY3Rpb24oKXsNCiAgICAgIHZhciBtb2JpbGUgPSAkKCdpbnB1dFtuYW1lPSJtb2JpbGUiXScpLnZhbCgpOw0KICAgICAgaWYgKCEvXjFcZHsxMH0kLy50ZXN0KG1vYmlsZSkpIHsNCiAgICAgIGxheWVyLm1zZygn6K+35q2j56Gu5aGr5YaZ5omL5py65Y+356CBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICAgIHZhciBwYXNzd29yZCA9ICQoJ2lucHV0W25hbWU9InBhc3N3b3JkIl0nKS52YWwoKS50cmltKCk7DQogICAgICBpZiAoIS9eLns2LDE2fS8udGVzdChwYXNzd29yZCkpIHsgICANCiAgICAgICAgbGF5ZXIubXNnKCfor7fmraPnoa7ovpPlhaXnmbvlvZXlr4bnoIHvvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgIHZhciB2ZXJpZnkgPSAkKCdpbnB1dFtuYW1lPSJ2ZXJpZnkiXScpLnZhbCgpLnRyaW0oKTsNCiAgICAgIGlmICh2ZXJpZnk9PScnKSB7DQogICAgICAgIGxheWVyLm1zZygn6K+35q2j56Gu6L6T5YWl6aqM6K+B56CB77yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICB2YXIgbG9hZHMgPSBsYXllci5sb2FkKDIpOw0KICAgIGNvcmVfanNvbigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD1zaG9wd2FwJmRvPWxvZ2luJmJlaWQ9MTAiLCB7bW9iaWxlOm1vYmlsZSxwYXNzd29yZDpwYXNzd29yZCx2ZXJpZnk6dmVyaWZ5fSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGxheWVyLmNsb3NlKGxvYWRzKTsNCiAgICAgIGlmKGpzb24uc3RhdHVzPT0wKXsNCiAgICAgICAgbGF5ZXIubXNnKGpzb24ucmVzdWx0KTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9ICAgICANCiAgICAgICAgICAgIGlmKGpzb24uc3RhdHVzPT0xKXsNCiAgICAgICAgbGF5ZXIubXNnKCfnmbvlvZXmiJDlip/vvIzot7PovazkuK0uLi4nLHsNCiAgICAgICAgICAgICAgICAgICAgdGltZTogMTAwMCwgDQogICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKXsNCiAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgfSAgICAgICAgIA0KICAgICAgICB9LHRydWUpOw0KICB9KTsNCiAgDQogICQoJy5zaWduaW5zdWJtaXQtcmVnJykuY2xpY2soZnVuY3Rpb24oKXsNCiAgICAgIHZhciBtb2JpbGUgPSAkKCdpbnB1dFtuYW1lPSJtb2JpbGUyIl0nKS52YWwoKTsNCiAgICAgIGlmICghL14xXGR7MTB9JC8udGVzdChtb2JpbGUpKSB7ICAgIA0KICAgICAgICAgICAgbGF5ZXIubXNnKCfor7fmraPnoa7loavlhpnmiYvmnLrlj7fvvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgdmFyIHBhc3N3b3JkID0gJCgnaW5wdXRbbmFtZT0icGFzc3dvcmQxIl0nKS52YWwoKS50cmltKCk7DQogICAgICBpZiAoIS9eLns2LDE2fS8udGVzdChwYXNzd29yZCkpIHsgICANCiAgICAgICAgbGF5ZXIubXNnKCfor7fmraPnoa7ovpPlhaXnmbvlvZXlr4bnoIEs6Iez5bCRNuS9jeaVsO+8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICB2YXIgcGFzc3dvcmQyID0gJCgnaW5wdXRbbmFtZT0icGFzc3dvcmQyIl0nKS52YWwoKS50cmltKCk7DQogICAgICBpZiAoIS9eLns2LDE2fS8udGVzdChwYXNzd29yZDIpKSB7ICAgIA0KICAgICAgICBsYXllci5tc2coJ+ivt+ato+ehrui+k+WFpeehruiupOWvhuegge+8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICBpZiAocGFzc3dvcmQhPXBhc3N3b3JkMikgeyAgDQogICAgICAgIGxheWVyLm1zZygn5Lik5qyh5a+G56CB5LiN55u45ZCM77yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICB2YXIgdmVyaWZ5ID0gJCgnaW5wdXRbbmFtZT0idmVyaWZ5MiJdJykudmFsKCkudHJpbSgpOw0KICAgICAgaWYgKHZlcmlmeT09JycpIHsNCiAgICAgICAgbGF5ZXIubXNnKCfor7fmraPnoa7ovpPlhaXpqozor4HnoIHvvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgIHZhciBjaGVjayA9ICQoImlucHV0W3R5cGU9J2NoZWNrYm94J10iKS5wcm9wKCdjaGVja2VkJyk7DQogICAgICBpZiAoIWNoZWNrKSB7DQogICAgICAgIGxheWVyLm1zZygn6K+35YWI5p+l55yL44CK55So5oi35pyN5Yqh5Y2P6K6u44CL5ZKM44CK6ZqQ56eB5pS/562W44CL5bm26YCJ5Lit77yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICB2YXIgbG9hZHMgPSBsYXllci5sb2FkKDIpOw0KICAgIGNvcmVfanNvbigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD1zaG9wd2FwJmRvPXJlZ2lzdGVyJmJlaWQ9MTAiLCB7b3A6J3N1Ym1pdCcsbW9iaWxlOm1vYmlsZSxwYXNzd29yZDpwYXNzd29yZCx2ZXJpZnk6dmVyaWZ5fSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGxheWVyLmNsb3NlKGxvYWRzKTsNCiAgICAgIGlmKGpzb24uc3RhdHVzPT0wKXsNCiAgICAgICAgbGF5ZXIubXNnKGpzb24ucmVzdWx0KTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgICAgICBpZihqc29uLnN0YXR1cz09Mil7DQogICAgICAgIGxheWVyLm1zZygn6aqM6K+B56CB5bey5Y+R6YCB5Yiw5L2g5rOo5YaM55qE5omL5py677yBJyk7DQogICAgICAgICQoIiNtb2JpbGV2ZXJpZnkiKS5hZGRDbGFzcygic2lnbi1zaG93Iik7DQogICAgICAgIH0gICAgIA0KICAgICAgICAgICAgaWYoanNvbi5zdGF0dXM9PTEpew0KICAgICAgICBsYXllci5tc2coJ+azqOWGjOaIkOWKn++8jOi3s+i9rOS4rS4uLicsew0KICAgICAgICAgICAgICAgICAgICB0aW1lOiAxMDAwLCANCiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpew0KICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICB9ICAgICAgICAgDQogICAgICAgIH0sdHJ1ZSk7DQogIH0pOw0KICANCiAgJCgnLm1vYmlsZXZlcmlmeScpLmNsaWNrKGZ1bmN0aW9uKCl7DQogICAgICB2YXIgbW9iaWxlID0gJCgnaW5wdXRbbmFtZT0ibW9iaWxlMiJdJykudmFsKCk7DQogICAgICBpZiAoIS9eMVxkezEwfSQvLnRlc3QobW9iaWxlKSkgeyAgICANCiAgICAgICAgICAgIGxheWVyLm1zZygn6K+35q2j56Gu5aGr5YaZ5omL5py65Y+377yBJyk7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgIH0NCiAgICAgIHZhciBwYXNzd29yZCA9ICQoJ2lucHV0W25hbWU9InBhc3N3b3JkMSJdJykudmFsKCkudHJpbSgpOw0KICAgICAgaWYgKCEvXi57NiwxNn0vLnRlc3QocGFzc3dvcmQpKSB7ICAgDQogICAgICAgIGxheWVyLm1zZygn6K+35q2j56Gu6L6T5YWl55m75b2V5a+G56CBLOiHs+WwkTbkvY3mlbDvvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgdmFyIHBhc3N3b3JkMiA9ICQoJ2lucHV0W25hbWU9InBhc3N3b3JkMiJdJykudmFsKCkudHJpbSgpOw0KICAgICAgaWYgKCEvXi57NiwxNn0vLnRlc3QocGFzc3dvcmQyKSkgeyAgICANCiAgICAgICAgbGF5ZXIubXNnKCfor7fmraPnoa7ovpPlhaXnoa7orqTlr4bnoIHvvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgaWYgKHBhc3N3b3JkIT1wYXNzd29yZDIpIHsgIA0KICAgICAgICBsYXllci5tc2coJ+aWsOWvhueggeS4juehruiupOWvhueggeS4jeebuOWQjO+8gScpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgdmFyIHZlcmlmeSA9ICQoJ2lucHV0W25hbWU9Im1vYmlsZXZlcmlmeSJdJykudmFsKCkudHJpbSgpOw0KICAgICAgaWYgKHZlcmlmeT09JycpIHsNCiAgICAgICAgbGF5ZXIubXNnKCfor7fovpPlhaXmiYvmnLrpqozor4HnoIHvvIEnKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgIHZhciBsb2FkcyA9IGxheWVyLmxvYWQoMik7DQogICAgY29yZV9qc29uKCIvaW5kZXgucGhwP21vZD1tb2JpbGUmYWN0PXNob3B3YXAmZG89cmVnaXN0ZXImYmVpZD0xMCIsIHtvcDonc21zJyxtb2JpbGU6bW9iaWxlLHBhc3N3b3JkOnBhc3N3b3JkLHZlcmlmeTp2ZXJpZnl9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgbGF5ZXIuY2xvc2UobG9hZHMpOw0KICAgICAgaWYoanNvbi5zdGF0dXM9PTApew0KICAgICAgICBsYXllci5tc2coanNvbi5yZXN1bHQpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0gICANCiAgICAgICAgICAgIGlmKGpzb24uc3RhdHVzPT0xKXsNCiAgICAgICAgICAgICAgICBsYXllci5tc2coJ+azqOWGjOaIkOWKn++8jOi3s+i9rOS4rS4uLicsew0KICAgICAgICAgICAgICAgICAgICB0aW1lOiAxMDAwLCANCiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbigpew0KICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICB9ICAgICAgICAgDQogICAgICAgIH0sdHJ1ZSk7ICAgIA0KICB9KTsNCjwvc2NyaXB0Pg0KDQoJCTxkaXYgY2xhc3M9ImJhbm5lci1zbGlkZXIgYmciPg0KCQkJPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCgkJCQk8ZGl2IGNsYXNzPSJzbGlkZXItbGVmdCI+DQoJCQkJCQkJCTxkaXYgY2xhc3M9InN3aXBlci1jb250YWluZXIgc3dpcGVyLWNvbnRhaW5lci1pbml0aWFsaXplZCBzd2lwZXItY29udGFpbmVyLWhvcml6b250YWwgc3dpcGVyLWNvbnRhaW5lci1hdXRvaGVpZ2h0Ij4NCgkJCQkJPGRpdiBjbGFzcz0ic3dpcGVyLXdyYXBwZXIiIHN0eWxlPSJoZWlnaHQ6IDM4MHB4OyB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC04OTVweCwgMHB4LCAwcHgpOyB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwbXM7Ij4NCg0KPGZoLWZ1bmN0aW9uPg0KaWYoZ2V0cnMoInNlbGVjdCBjb3VudChTX2lkKSBhcyBTX2NvdW50IGZyb20gc2xfc2xpZGUgd2hlcmUgU19kZWw9MCBhbmQgU19taWQ9JGZtaWQiLCJTX2NvdW50Iik+MCAmJiAkZm1pZD4wKXsNCiAgJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9zbGlkZSB3aGVyZSBTX2RlbD0wIGFuZCBTX21pZD0kZm1pZCBvcmRlciBieSBTX29yZGVyLFNfaWQgZGVzYyI7DQp9ZWxzZXsNCiAgJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9zbGlkZSB3aGVyZSBTX2RlbD0wIGFuZCBTX21pZD0wIG9yZGVyIGJ5IFNfb3JkZXIsU19pZCBkZXNjIjsNCn0NCiAgICAgICAgICAgICAgICBzW1sNCg0KICAgICAgICAkYXBpPSRhcGkuIjxkaXYgY2xhc3M9XCJzd2lwZXItc2xpZGUgc3dpcGVyLXNsaWRlLXByZXZcIiBzdHlsZT1cIndpZHRoOiA4OTVweDtcIj4NCgkJCQkJCQk8YSBocmVmPVwiIi4kcm93WyJTX2xpbmsiXS4iXCI+DQoJCQkJCQkJCTxpbWcgc3JjPVwiIi5waWMoJHJvd1siU19waWMiXSkuIlwiPg0KCQkJCQkJCTwvYT4NCgkJCQkJCTwvZGl2PiI7DQogICAgICAgICAgICAgICAgICAgIF1dDQoNCiAgICAgICAgPC9maC1mdW5jdGlvbj4NCg0KDQoJCQkJCQkJCQkJCTwvZGl2Pg0KCQkJCQk8ZGl2IGNsYXNzPSJzd2lwZXItcGFnaW5hdGlvbiBzd2lwZXItcGFnaW5hdGlvbi1jbGlja2FibGUgc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cyI+PHNwYW4gY2xhc3M9InN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCIgdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiIgYXJpYS1sYWJlbD0iR28gdG8gc2xpZGUgMSI+PC9zcGFuPjxzcGFuIGNsYXNzPSJzd2lwZXItcGFnaW5hdGlvbi1idWxsZXQgc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZSIgdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiIgYXJpYS1sYWJlbD0iR28gdG8gc2xpZGUgMiI+PC9zcGFuPjxzcGFuIGNsYXNzPSJzd2lwZXItcGFnaW5hdGlvbi1idWxsZXQiIHRhYmluZGV4PSIwIiByb2xlPSJidXR0b24iIGFyaWEtbGFiZWw9IkdvIHRvIHNsaWRlIDMiPjwvc3Bhbj48L2Rpdj4NCgkJCQk8c3BhbiBjbGFzcz0ic3dpcGVyLW5vdGlmaWNhdGlvbiIgYXJpYS1saXZlPSJhc3NlcnRpdmUiIGFyaWEtYXRvbWljPSJ0cnVlIj48L3NwYW4+PC9kaXY+DQoJCQkgICAgCQkJCTwvZGl2Pg0KCQkJCTxkaXYgY2xhc3M9InNsaWRlci1yaWdodCI+DQoJCQkJCQkJCQk8ZGl2IGNsYXNzPSJpdGVtIj4NCgkJCQkJCTxhIGhyZWY9Ij90eXBlPW5ld3MiIHRhcmdldD0iX2JsYW5rIj4NCgkJCQkJCTxpbWcgc3JjPSJ0ZW1wbGF0ZS90MTYvaW1hZ2VzL05HcjYwZnViRDA4RThnRy5wbmciPjwvYT4NCgkJCQkJPC9kaXY+DQoJCQkJCQ0KCQkJCQkNCgkJCQkJPGRpdiBjbGFzcz0iaXRlbSI+DQoJCQkJCQk8YSBocmVmPSJtZW1iZXIvbmV3c19hZGQucGhwIiB0YXJnZXQ9Il9ibGFuayI+DQoJCQkJCQk8aW1nIHNyYz0idGVtcGxhdGUvdDE2L2ltYWdlcy9rZms5eDdYMlgyN29tbVIucG5nIj48L2E+DQoJCQkJCTwvZGl2Pg0KCQkJCQkNCgkJCQk8L2Rpdj4NCgkJCTwvZGl2Pg0KCQk8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+DQoJCQk8ZGl2IGNsYXNzPSJjb250ZW50cyI+DQoJCQkNCgkJCQkJCQk8ZGl2IGNsYXNzPSJtb2NhdCIgaWQ9ImxtbjEiPg0KCQkJCQk8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KCQkJCQkJPGgyPjxzcGFuPuacgOaWsOWNleevhzxpPk5FVzwvaT48L3NwYW4+PC9oMj4NCgkJCQkJCTxkaXYgY2xhc3M9Imxpc3RzIGNsZWFyZml4Ij4NCgkJCQkJDQo8ZmgtZnVuY3Rpb24+DQogICAgICAJJHNxbD0ic2VsZWN0ICogZnJvbSBzbF9uZXdzLHNsX25zb3J0IHdoZXJlIE5fc2g9MSBhbmQgTl9zb3J0PVNfaWQgYW5kIE5fZGVsPTAgIi4kTV9uaW5mby4iICBvcmRlciBieSBOX3RvcCBkZXNjLE5fb3JkZXIsTl9pZCBkZXNjIGxpbWl0IDIxIjsNCiAgICAgICAgICAgICAgICBzW1sNCg0KICAgICAgICAgICAgICAgICRhcGk9JGFwaS4iPGRpdiBjbGFzcz1cImdyaWRcIiBvbmNsaWNrPVwibG9jYXRpb24uaHJlZj0nP3R5cGU9bmV3c2luZm8maWQ9Ii4kcm93WyJOX2lkIl0uIidcIj4NCgkJCQkJCQk8ZGl2IGNsYXNzPVwiaW1nXCI+DQoJCQkJCQkJICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHRpdGxlPVwiIi4kcm93WyJOX3RpdGxlIl0uIlwiPg0KCQkJCSAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIiLnBpYygkcm93WyJOX3BpYyJdKS4iXCIgY2xhc3M9XCJ0aHVtYlwiIGFsdD1cIiIuJHJvd1siTl90aXRsZSJdLiJcIiBzdHlsZT1cIndpZHRoOjc1cHggXCI+DQoJCQkJICAgICAgICAgICAgICAgIDwvYT4NCgkJCQkJCQk8L2Rpdj4NCgkJCQkJCQk8aDM+PGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHRpdGxlPVwiIi4kcm93WyJOX3RpdGxlIl0uIlwiPiIuJHJvd1siTl90aXRsZSJdLiI8L2E+PC9oMz4NCgkJCQkgICAgICAgICAgICA8cD48YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGl0bGU9XCIiLiRyb3dbIk5fdGl0bGUiXS4iXCI+Ii4kcm93WyJOX3RpdGxlIl0uIjwvYT48L3A+DQoJCQkJCQkJPGRpdiBjbGFzcz1cImdyaWQtbWV0YVwiPg0KCQkJCSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWVcIj48aSBjbGFzcz1cImljb24gaWNvbi10aW1lXCI+PC9pPiAiLmRhdGUoIlktbS1kIixzdHJ0b3RpbWUoJHJvd1siTl9kYXRlIl0pKS4iPC9zcGFuPg0KCQkJCQkJCQk8c3BhbiBjbGFzcz1cInZpZXdzXCI+PGkgY2xhc3M9XCJpY29uIGljb24tZXllXCI+PC9pPiAiLiRyb3dbIk5fdmlldyJdLiI8L3NwYW4+CQkJCSAgICANCgkJCQkJCQkJPHNwYW4gY2xhc3M9XCJjb21tZW50c1wiPjxpIGNsYXNzPVwiaWNvbiBpY29uLXBvc3RzXCI+PC9pPiDvv6UiLnAoJHJvd1siTl9wcmljZSJdKS4iPC9zcGFuPgkJCQkNCgkJCQkJCQk8L2Rpdj4NCgkJCSAgICAgICAgICAgICAgICA8L2Rpdj4gIjsNCiAgICAgICAgICAgICAgICAgICAgXV0NCiAgICAgIAk8L2ZoLWZ1bmN0aW9uPg0KDQoNCgkJCQkJCQ0KCQkJCQkJPGRpdiBjbGFzcz0ibW9yZSI+PGEgaHJlZj0iLi8/dHlwZT1uZXdzIiB0YXJnZXQ9Il9ibGFuayI+5p+l55yL5pu05aSaPC9hPjwvZGl2Pg0KCQkJCQkJPC9kaXY+DQoJCQkJCTwvZGl2Pg0KCTwvZGl2Pg0KCQkJCQkJDQogDQoJCQkJCQkJCQ0KICAgICAgICAgICAgCQkJDQogICAgICAgICAgICAJCQkJPGRpdiBjbGFzcz0iIiBpZD0ibG1uNCI+DQoNCg0KDQogICAgICAgICAgICAJCQkJCTxkaXYgY2xhc3M9Im1vY2F0Ij4JPC9kaXY+DQoNCg0KPGZoLWZ1bmN0aW9uPg0KDQokc3FsMz0ic2VsZWN0ICogZnJvbSBzbF9uc29ydCB3aGVyZSBTX3N1Yj0wIGFuZCBTX3Nob3c9MSBhbmQgU19kZWw9MCBvcmRlciBieSBTX29yZGVyLFNfaWQgZGVzYyI7DQpzM1tbDQokc3FsPSJzZWxlY3QgKiBmcm9tIHNsX25zb3J0IHdoZXJlIFNfc3ViPSIuJHJvdzNbIlNfaWQiXS4iIGFuZCBTX3Nob3c9MSBhbmQgU19kZWw9MCBvcmRlciBieSBTX29yZGVyLFNfaWQgZGVzYyI7DQpzW1sNCiRhcGk9JGFwaS4iPGRpdiBjbGFzcz1cIm1vY2F0XCI+CQ0KCQkJCQk8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+DQoJCQkJCQk8aDI+PHNwYW4+Ii4kcm93WyJTX3RpdGxlIl0uIjwvc3Bhbj48L2gyPg0KCQkJCQkJPGRpdiBjbGFzcz1cImxpc3RzIGNsZWFyZml4XCI+IjsNCiRzcWwyPSJzZWxlY3QgKiBmcm9tIHNsX25ld3Mgd2hlcmUgTl9zb3J0PSIuJHJvd1siU19pZCJdLiIgYW5kIE5fZGVsPTAgb3JkZXIgYnkgTl9vcmRlcixOX2lkIGRlc2MgbGltaXQgMTIiOw0KczJbWw0KJGFwaT0kYXBpLiI8ZGl2IGNsYXNzPVwiZ3JpZFwiIG9uY2xpY2s9XCJsb2NhdGlvbi5ocmVmPScuLz90eXBlPW5ld3NpbmZvJmlkPSIuJHJvdzJbIk5faWQiXS4iJ1wiPg0KCQkJCQkJCTxkaXYgY2xhc3M9XCJpbWdcIj4NCgkJCQkJCQkgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGl0bGU9XCIiLiRyb3cyWyJOX3RpdGxlIl0uIlwiPg0KCQkJCSAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIiLnBpYygkcm93MlsiTl9waWMiXSkuIlwiIGNsYXNzPVwidGh1bWJcIiBhbHQ9XCIiLiRyb3cyWyJOX3RpdGxlIl0uIlwiIHN0eWxlPVwid2lkdGg6NzVweFwiPg0KCQkJCSAgICAgICAgICAgICAgICA8L2E+DQoJCQkJCQkJPC9kaXY+DQoJCQkJCQkJPGgzPjxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB0aXRsZT1cIiIuJHJvdzJbIk5fdGl0bGUiXS4iXCI+Ii4kcm93MlsiTl90aXRsZSJdLiI8L2E+PC9oMz4NCgkJCQkgICAgICAgICAgICA8cD48YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGl0bGU9XCIiLiRyb3cyWyJOX3RpdGxlIl0uIlwiPiIuJHJvdzJbIk5fdGl0bGUiXS4iPC9hPjwvcD4NCgkJCQkJCQk8ZGl2IGNsYXNzPVwiZ3JpZC1tZXRhXCI+DQoJCQkJICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltZVwiPjxpIGNsYXNzPVwiaWNvbiBpY29uLXRpbWVcIj48L2k+ICIuZGF0ZSgiWS1tLWQiLHN0cnRvdGltZSgkcm93MlsiTl9kYXRlIl0pKS4iPC9zcGFuPg0KCQkJCQkJCQk8c3BhbiBjbGFzcz1cInZpZXdzXCI+PGkgY2xhc3M9XCJpY29uIGljb24tZXllXCI+PC9pPiAiLiRyb3cyWyJOX3ZpZXciXS4iPC9zcGFuPgkJCQkgICAgDQoJCQkJCQkJCTxzcGFuIGNsYXNzPVwiY29tbWVudHNcIj48aSBjbGFzcz1cImljb24gaWNvbi1wb3N0c1wiPjwvaT4g77+lIi5wKCRyb3cyWyJOX3ByaWNlIl0pLiI8L3NwYW4+CQkJCQ0KCQkJCQkJCTwvZGl2Pg0KCQkJICAgICAgICAgICAgICAgIDwvZGl2PiANCgkJCSAgICAgICAgICAgICAgICAiOw0KXV0NCg0KJGFwaT0kYXBpLiI8L2Rpdj4NCgkJCQkJCTxkaXYgY2xhc3M9XCJtb3JlXCI+PGEgaHJlZj1cIi4vP3R5cGU9bmV3cyZpZD0iLiRyb3dbIlNfaWQiXS4iXCIgdGFyZ2V0PVwiX2JsYW5rXCI+5p+l55yL5pu05aSaPC9hPjwvZGl2Pg0KCQkJCSAgICA8L2Rpdj4JCQ0KCQkJCTwvZGl2PiI7DQpdXQ0KXV0NCjwvZmgtZnVuY3Rpb24+DQoNCg0KPC9kaXY+DQoJCQkJCQkNCgkJCQkJCTwvZGl2Pg0KCQkJCQk8L2Rpdj4NCjxzY3JpcHQgaWQ9InRwbF9lbXB0eSIgdHlwZT0idGV4dC9odG1sIj4NCiAgICA8ZGl2IGNsYXNzPSJpbmZvaW1nIj4NCgkgICAgPGltZyBzcmM9InRlbXBsYXRlL3QxNi9hc3NldHMvaW1nL25vZGF0YS5wbmciPg0KCTwvZGl2Pg0KPC9zY3JpcHQ+DQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCgl2YXIgdHlwZSA9ICIxIjsNCiAgICBmdW5jdGlvbiBnZXRMb2codHlwZSkgew0KICAgICAgICBjb3JlX2pzb24oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9aW5kZXgmZG89c2hvcCZtPWVzaG9wJmJlaWQ9MTAiLCB7dHlwZTp0eXBlLHR5cGVzOjF9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzdWx0Lmxpc3QubGVuZ3RoIDw9IDApIHsNCiAgICAgICAgICAgICAgICAkKCcjY29udGFpbmVyJykuaHRtbCh0cGwoJ3RwbF9lbXB0eScpKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQoJCQlpZiAodHlwZT09MSkgew0KICAgICAgICAgICAgICAgICQoJyNsbW4xJykuaHRtbCh0cGwoJ3RwbF9kcCcsIGpzb24ucmVzdWx0KSk7DQogICAgICAgICAgICB9DQoJCQlpZiAodHlwZT09Mikgew0KICAgICAgICAgICAgICAgICQoJyNsbW4xJykuaHRtbCh0cGwoJ3RwbF96bCcsIGpzb24ucmVzdWx0KSk7DQogICAgICAgICAgICB9DQoJCQlpZiAodHlwZT09Mykgew0KICAgICAgICAgICAgICAgICQoJyNsbW4xJykuaHRtbCh0cGwoJ3RwbF9rYycsIGpzb24ucmVzdWx0KSk7DQogICAgICAgICAgICB9DQoJCQkvLyQoJyNsbWIxJykuaHRtbChqc29uLnJlc3VsdC5uYW1lKTsNCgkJCS8vJCgnI2xtdTEnKS5hdHRyKCdocmVmJyxqc29uLnJlc3VsdC51cmwpOyANCiAgICAgICAgfSwgdHJ1ZSk7DQogICAgfQ0KICAgIGdldExvZyh0eXBlKTsNCjwvc2NyaXB0Pg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+DQoJdmFyIHR5cGUyID0gIjEiOw0KICAgIGZ1bmN0aW9uIGdldExvZzIodHlwZTIpIHsNCiAgICAgICAgY29yZV9qc29uKCIvaW5kZXgucGhwP21vZD1tb2JpbGUmYWN0PWluZGV4JmRvPXNob3AmbT1lc2hvcCZiZWlkPTEwIiwge3R5cGU6dHlwZTIsdHlwZXM6Mn0sIGZ1bmN0aW9uIChqc29uKSB7DQogICAgICAgICAgICBpZiAoanNvbi5yZXN1bHQubGlzdC5sZW5ndGggPD0gMCkgew0KICAgICAgICAgICAgICAgICQoJyNjb250YWluZXInKS5odG1sKHRwbCgndHBsX2VtcHR5JykpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCgkJCWlmICh0eXBlMj09MSkgew0KICAgICAgICAgICAgICAgICQoJyNsbW4yJykuaHRtbCh0cGwoJ3RwbF9kcCcsIGpzb24ucmVzdWx0KSk7DQogICAgICAgICAgICB9DQoJCQlpZiAodHlwZTI9PTIpIHsNCiAgICAgICAgICAgICAgICAkKCcjbG1uMicpLmh0bWwodHBsKCd0cGxfemwnLCBqc29uLnJlc3VsdCkpOw0KICAgICAgICAgICAgfQ0KCQkJaWYgKHR5cGUyPT0zKSB7DQogICAgICAgICAgICAgICAgJCgnI2xtbjInKS5odG1sKHRwbCgndHBsX2tjJywganNvbi5yZXN1bHQpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwgdHJ1ZSk7DQogICAgfQ0KICAgIGdldExvZzIodHlwZTIpOw0KPC9zY3JpcHQ+DQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCgl2YXIgdHlwZTMgPSAiMSI7DQogICAgZnVuY3Rpb24gZ2V0TG9nMyh0eXBlMykgew0KICAgICAgICBjb3JlX2pzb24oIi9pbmRleC5waHA/bW9kPW1vYmlsZSZhY3Q9aW5kZXgmZG89c2hvcCZtPWVzaG9wJmJlaWQ9MTAiLCB7dHlwZTp0eXBlMyx0eXBlczozfSwgZnVuY3Rpb24gKGpzb24pIHsNCiAgICAgICAgICAgIGlmIChqc29uLnJlc3VsdC5saXN0Lmxlbmd0aCA8PSAwKSB7DQogICAgICAgICAgICAgICAgJCgnI2NvbnRhaW5lcicpLmh0bWwodHBsKCd0cGxfZW1wdHknKSk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KCQkJaWYgKHR5cGUzPT0xKSB7DQogICAgICAgICAgICAgICAgJCgnI2xtbjMnKS5odG1sKHRwbCgndHBsX2RwJywganNvbi5yZXN1bHQpKTsNCiAgICAgICAgICAgIH0NCgkJCWlmICh0eXBlMz09Mikgew0KICAgICAgICAgICAgICAgICQoJyNsbW4zJykuaHRtbCh0cGwoJ3RwbF96bCcsIGpzb24ucmVzdWx0KSk7DQogICAgICAgICAgICB9DQoJCQlpZiAodHlwZTM9PTMpIHsNCiAgICAgICAgICAgICAgICAkKCcjbG1uMycpLmh0bWwodHBsKCd0cGxfa2MnLCBqc29uLnJlc3VsdCkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LCB0cnVlKTsNCiAgICB9DQogICAgZ2V0TG9nMyh0eXBlMyk7DQo8L3NjcmlwdD4NCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KCXZhciB0eXBlNCA9ICIxIjsvL+aooeWeiw0KICAgIGZ1bmN0aW9uIGdldExvZzQodHlwZTQpIHsNCiAgICAgICAgY29yZV9qc29uKCIvaW5kZXgucGhwP21vZD1tb2JpbGUmYWN0PWluZGV4JmRvPXNob3AmbT1lc2hvcCZiZWlkPTEwIiwge3R5cGU0OnR5cGU0LHR5cGVzOjR9LCBmdW5jdGlvbiAoanNvbikgew0KICAgICAgICAgICAgaWYgKGpzb24ucmVzdWx0Lmxpc3QubGVuZ3RoIDw9IDApIHsNCiAgICAgICAgICAgICAgICAkKCcjY29udGFpbmVyJykuaHRtbCh0cGwoJ3RwbF9lbXB0eScpKTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQoJCQlpZiAodHlwZTQ9PTEpIHsNCiAgICAgICAgICAgICAgICAkKCcjbG1uNCcpLmh0bWwodHBsKCd0cGxfZHBzJywganNvbi5yZXN1bHQpKTsNCiAgICAgICAgICAgIH0NCgkJCWlmICh0eXBlND09Mikgew0KICAgICAgICAgICAgICAgICQoJyNsbW40JykuaHRtbCh0cGwoJ3RwbF96bHMnLCBqc29uLnJlc3VsdCkpOw0KICAgICAgICAgICAgfQ0KCQkJaWYgKHR5cGU0PT0zKSB7DQogICAgICAgICAgICAgICAgJCgnI2xtbjQnKS5odG1sKHRwbCgndHBsX2tjcycsIGpzb24ucmVzdWx0KSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIHRydWUpOw0KICAgIH0NCiAgICBnZXRMb2c0KHR5cGU0KTsNCjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICAgIHZhciBzd2lwZXIgPSBuZXcgU3dpcGVyKCcuc3dpcGVyLWNvbnRhaW5lcicsIHsNCiAgICAgICAgc2xpZGVzUGVyVmlldzogJzEnLA0KICAgICAgICBhdXRvSGVpZ2h0OiB0cnVlLA0KICAgICAgICBhdXRvcGxheTogew0KICAgICAgICAgICAgZGVsYXk6IDQwMDAsDQogICAgICAgICAgICBkaXNhYmxlT25JbnRlcmFjdGlvbjogZmFsc2UsDQogICAgICAgIH0sDQogICAgICAgICBwYWdpbmF0aW9uOiB7DQogICAgICAgICAgICBlbDogJy5zd2lwZXItcGFnaW5hdGlvbicsDQogICAgICAgICAgICBkeW5hbWljQnVsbGV0czogZmFsc2UsDQogICAgICAgICAgICBjbGlja2FibGU6IHRydWUsDQogICAgICAgIH0sDQogICAgfSk7DQoNCjwvc2NyaXB0Pg0KDQoNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+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+DQoJCTwvZGl2Pg0KCQk8cCBjbGFzcz0iY29weXJpZ2h0Ij5Db3B5cmlnaHQgwqkgMjAxNC0yMDE3IOa3hOWNmumXqueBtee9kee7nOenkeaKgOaciemZkOWFrOWPuCDniYjmnYPmiYDmnIkgPGEgaHJlZj0iaHR0cDovL2JlaWFuLm1paXQuZ292LmNuLyIgdGFyZ2V0PSJfYmxhbmsiPumygUlDUOWkhzE1MDE1MTM35Y+3LTIgPC9hPjwvcD4NCgk8L2Rpdj4NCjwvZm9vdGVyPg0KPGRpdiBjbGFzcz0icm9sbGJhciI+DQoJPHVsPg0KCQk8bGkgY2xhc3M9InZpcC1saSI+DQoJCSAgICA8YSBocmVmPSJtZW1iZXIvdmlwLnBocCI+PGkgY2xhc3M9Imljb24gaWNvbi1jcm93bi1zIj48L2k+PC9hPg0KCQkJPGg2PuWNh+e6p1ZJUDxpPjwvaT48L2g2Pg0KCQk8L2xpPg0KCQk8bGkgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCgkJICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9ImRheS1jaGVja2luIj48aSBjbGFzcz0iaWNvbiBpY29uLWNhbGVuZGFyIj48L2k+PC9hPg0KCQkJPGg2Puavj+aXpeetvuWIsDxpPjwvaT48L2g2Pg0KCQk8L2xpPg0KCQk8bGkgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCgkJICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJpY29uIGljb24tcXEiPjwvaT48L2E+DQoJCQk8aDY+6IGU57O7UVE8aT48L2k+PC9oNj4NCgkJPC9saT4NCgkJPGxpPg0KCQkgICAgPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0ia2VmdV93ZWl4aW4iPjxpIGNsYXNzPSJpY29uIGljb24td2VpeGluIj48L2k+DQoJCQkgICAgPGltZyBzcmM9Im1lZGlhLzIwMTkxMTI2MjI0MzUyV2YuanBnIj4NCgkJCTwvYT4NCgkJPC9saT4NCg0KCQk8bGkgY2xhc3M9InRvdG9wLWxpIiBzdHlsZT0iZGlzcGxheTogbGlzdC1pdGVtOyI+DQoJCSAgICA8YSBocmVmPSJqYXZhc2NyaXB0OjsiIGNsYXNzPSJ0b3RvcCI+PGkgY2xhc3M9Imljb24gaWNvbi1hcnJvdy11cCI+PC9pPjwvYT4NCgkJCTxoNj7ov5Tlm57pobbpg6g8aT48L2k+PC9oNj4NCgkJPC9saT4NCgk8L3VsPg0KPC9kaXY+DQoJCQ0KPGRpdiBjbGFzcz0ic2hhcmVzIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KICAgIDxkaXYgY2xhc3M9Im1vYmlsZS1zaGFyZS1iZyI+PC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibW9iaWxlLXNoYXJlLXdyYXAiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItY29udGFpbmVyIiBpZD0icm90YXRlLXN3aXBlciI+DQogICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci13cmFwcGVyIiBpZD0icG9zdGVyIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci1zbGlkZSByb3RhdGUtc2xpZGUiPg0KCSAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj4NCgkJCQkgICAgPGRpdiBjbGFzcz0iZm9vdGVycyI+5YiG5Lqr5rW35oql5q2j5Zyo55Sf5oiQ5LitLi4uPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ0ZW1wbGF0ZS90MTYvYXNzZXRzL2ltZy9zY3ouZ2lmIj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ic3dpcGVyLXBhZ2luYXRpb24iIGlkPSJyb3RhdGUtcGFnaW5hdGlvbiI+PC9kaXY+DQoJCTxkaXYgY2xhc3M9InN3aXBlci1idXR0b24tbmV4dCI+PC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci1idXR0b24tcHJldiI+PC9kaXY+DQogICAgICAgIDwvZGl2PgkNCiAgICAgICAgPGRpdiBjbGFzcz0ibW9iaWxlLXNoYXJlLWNsb3NlIj7DlzwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9kaXY+DQoJDQoNCjxzY3JpcHQgc3JjPSJqcy9xcmNvZGUubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgkJDQoNCgkkKCcuc2hhcmUnKS5jbGljayhmdW5jdGlvbiAoKSB7DQoJICAgIGNvcmVfanNvbigiL2luZGV4LnBocD9tb2Q9bW9iaWxlJmFjdD11dGlsaXR5JmRvPXNoYXJlJm9wPXR3byZiZWlkPTEwIiwge3R5cGU6JzEnLGlkOicnfSwgZnVuY3Rpb24gKHNqc29uKSB7DQoJCSAgICBpZihzanNvbi5zdGF0dXM9PTEpew0KCQkJCSQoJyNwb3N0ZXInKS5odG1sKHRwbCgndHBsX3Bvc3Rlcicsc2pzb24ucmVzdWx0KSk7DQoJCQkJdmFyIGNsaXBib2FyZCA9IG5ldyBDbGlwYm9hcmQoJy5memxqJyk7DQogICAgICAgICAgICAgICAgY2xpcGJvYXJkLm9uKCdzdWNjZXNzJywgZnVuY3Rpb24oZSkgew0KCQkgICAgICAgICAgICBsYXllci5tc2coJ+mTvuaOpeWkjeWItuaIkOWKnycpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHZhciBzd2lwZXIgPSBuZXcgU3dpcGVyKCcjcm90YXRlLXN3aXBlcicsIHsNCiAgICAJICAgICAgICAgICAgcGFnaW5hdGlvbjogew0KICAgIAkJICAgICAgICAgICAgZWw6ICcjcm90YXRlLXBhZ2luYXRpb24nLA0KCQkJCQkJdHlwZTogJ2ZyYWN0aW9uJywNCiAgICAJICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbjogew0KICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVsOiAnLnN3aXBlci1idXR0b24tbmV4dCcsDQogICAgICAgICAgICAgICAgICAgICAgICBwcmV2RWw6ICcuc3dpcGVyLWJ1dHRvbi1wcmV2JywNCiAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAJICAgICAgICAgICAgcnVuQ2FsbGJhY2tzT25Jbml0OiB0cnVlLA0KICAgIAkgICAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLA0KICAgIAkgICAgICAgICAgICBvbjogew0KICAgIAkJICAgICAgICAgICAgcHJvZ3Jlc3M6IGZ1bmN0aW9uKCkgew0KICAgIAkJCSAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5zbGlkZXMubGVuZ3RoOyBpKyspIHsNCiAgICAJCQkJICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVzW2ldLnByb2dyZXNzIDw9IDApIHsNCiAgICAJCQkJCSAgICAgICAgICAgIHRoaXMuc2xpZGVzLmVxKGkpLmZpbmQoIi5ibG9jayIpLnRyYW5zaXRpb24oMCkudHJhbnNmb3JtKCJyb3RhdGVaKCIgKyAxMyAqIE1hdGguYWJzKHRoaXMuc2xpZGVzW2ldLnByb2dyZXNzKSArICJkZWcpIHRyYW5zbGF0ZTNkKDAsIDAsIDApIikNCiAgICAJCQkJICAgICAgICAgICAgfQ0KICAgIAkJCSAgICAgICAgICAgIH0NCiAgICAJCSAgICAgICAgICAgIH0sDQogICAgCQkgICAgICAgICAgICBzZXRUcmFuc2l0aW9uOiBmdW5jdGlvbih0cmFuc2l0aW9uKSB7DQogICAgCQkJICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnNsaWRlcy5sZW5ndGg7IGkrKykgew0KICAgIAkJCQkgICAgICAgICAgICBpZiAodGhpcy5zbGlkZXNbaV0ucHJvZ3Jlc3MgPD0gMCkgew0KICAgIAkJCQkJICAgICAgICAgICAgcm90ID0gMTMgKiBNYXRoLmFicyh0aGlzLnNsaWRlc1tpXS5wcm9ncmVzcyk7DQogICAgCQkJCQkgICAgICAgICAgICB0aGlzLnNsaWRlcy5lcShpKS5maW5kKCIuYmxvY2siKS50cmFuc2l0aW9uKHRyYW5zaXRpb24pLnRyYW5zZm9ybSgicm90YXRlWigiICsgcm90ICsgImRlZykgdHJhbnNsYXRlM2QoMCwgMCwgMCkiKQ0KICAgIAkJCQkgICAgICAgICAgICB9DQogICAgCQkJICAgICAgICAgICAgfQ0KICAgIAkJICAgICAgICAgICAgfSwNCg0KICAgIAkgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIH0pOwkNCgkgICAgICAgIH0NCgkJCWlmKHNqc29uLnN0YXR1cz09MCl7DQoJCQkJJCgnI3Bvc3RlcicpLmh0bWwodHBsKCd0cGxfZW1wdHlzJyxzanNvbi5yZXN1bHQpKTsNCgkJCQl2YXIgY2xpcGJvYXJkID0gbmV3IENsaXBib2FyZCgnLmZ6bGonKTsNCiAgICAgICAgICAgICAgICBjbGlwYm9hcmQub24oJ3N1Y2Nlc3MnLCBmdW5jdGlvbihlKSB7DQoJCSAgICAgICAgICAgIGxheWVyLm1zZygn6ZO+5o6l5aSN5Yi25oiQ5YqfJyk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgdmFyIHN3aXBlciA9IG5ldyBTd2lwZXIoJyNyb3RhdGUtc3dpcGVyJywgew0KICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uOiB7DQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0RWw6ICcuc3dpcGVyLWJ1dHRvbi1uZXh0JywNCiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZFbDogJy5zd2lwZXItYnV0dG9uLXByZXYnLA0KICAgICAgICAgICAgICAgICAgICB9LA0KICAgIAkgICAgICAgICAgICBydW5DYWxsYmFja3NPbkluaXQ6IHRydWUsDQogICAgCSAgICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsDQogICAgCSAgICAgICAgICAgIG9uOiB7DQogICAgCQkgICAgICAgICAgICBwcm9ncmVzczogZnVuY3Rpb24oKSB7DQogICAgCQkJICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnNsaWRlcy5sZW5ndGg7IGkrKykgew0KICAgIAkJCQkgICAgICAgICAgICBpZiAodGhpcy5zbGlkZXNbaV0ucHJvZ3Jlc3MgPD0gMCkgew0KICAgIAkJCQkJICAgICAgICAgICAgdGhpcy5zbGlkZXMuZXEoaSkuZmluZCgiLmJsb2NrIikudHJhbnNpdGlvbigwKS50cmFuc2Zvcm0oInJvdGF0ZVooIiArIDEzICogTWF0aC5hYnModGhpcy5zbGlkZXNbaV0ucHJvZ3Jlc3MpICsgImRlZykgdHJhbnNsYXRlM2QoMCwgMCwgMCkiKQ0KICAgIAkJCQkgICAgICAgICAgICB9DQogICAgCQkJICAgICAgICAgICAgfQ0KICAgIAkJICAgICAgICAgICAgfSwNCiAgICAJCSAgICAgICAgICAgIHNldFRyYW5zaXRpb246IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHsNCiAgICAJCQkgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRoaXMuc2xpZGVzLmxlbmd0aDsgaSsrKSB7DQogICAgCQkJCSAgICAgICAgICAgIGlmICh0aGlzLnNsaWRlc1tpXS5wcm9ncmVzcyA8PSAwKSB7DQogICAgCQkJCQkgICAgICAgICAgICByb3QgPSAxMyAqIE1hdGguYWJzKHRoaXMuc2xpZGVzW2ldLnByb2dyZXNzKTsNCiAgICAJCQkJCSAgICAgICAgICAgIHRoaXMuc2xpZGVzLmVxKGkpLmZpbmQoIi5ibG9jayIpLnRyYW5zaXRpb24odHJhbnNpdGlvbikudHJhbnNmb3JtKCJyb3RhdGVaKCIgKyByb3QgKyAiZGVnKSB0cmFuc2xhdGUzZCgwLCAwLCAwKSIpDQogICAgCQkJCSAgICAgICAgICAgIH0NCiAgICAJCQkgICAgICAgICAgICB9DQogICAgCQkgICAgICAgICAgICB9LA0KDQogICAgCSAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgfSk7CQ0KCSAgICAgICAgfQ0KCSAgICB9LHRydWUpOw0KCQkkKCIuc2hhcmVzIikuc2hvdygpOw0KCX0pOw0KCQ0KICAgICQoJy5tb2JpbGUtc2hhcmUtY2xvc2UnKS5jbGljayhmdW5jdGlvbiAoKSB7DQoJCSQoIi5zaGFyZXMiKS5oaWRlKCk7DQoJfSk7CQ0KPC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogICAgJCgiI25hbWVzIiwpLm9uKCdrZXlwcmVzcycsZnVuY3Rpb24oZSkgew0KICAgICAgICB2YXIga2V5Y29kZSA9IGUua2V5Q29kZTsNCiAgICAgICAgaWYoa2V5Y29kZT09JzEzJykgeyAgDQogICAgICAgICAgICAkKCcjc2VhcmNoJykuY2xpY2soKTsgICAgIA0KICAgICAgICB9DQogICAgfSk7DQogICAgJCgiI25hbWVzMSIpLm9uKCdrZXlwcmVzcycsZnVuY3Rpb24oZSkgew0KICAgICAgICB2YXIga2V5Y29kZSA9IGUua2V5Q29kZTsNCgkJdmFyIHNlYXJjaGtleSA9ICQudHJpbSgkKCIjbmFtZXMxIikudmFsKCkpOw0KICAgICAgICBpZihrZXljb2RlPT0nMTMnKSB7ICANCiAgICAgICAgICAgIGlmKHNlYXJjaGtleSA9PSAnJyl7CQ0KCQkJICAgIGxheWVyLm1zZygn6K+36L6T5YWl5pCc57Si5YWz6ZSu6K+NJyk7DQoJCSAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICI/dHlwZT1zZWFyY2gma2V5d29yZD0iK3NlYXJjaGtleTsNCgkJICAgIH0gICAgIA0KICAgICAgICB9DQogICAgfSk7CQ0KCSQoIiNzZWFyY2giKS5jbGljayhmdW5jdGlvbigpewkJDQoJCXZhciBzZWFyY2hrZXkgPSAkLnRyaW0oJCgiI25hbWVzIikudmFsKCkpOw0KCQlpZihzZWFyY2hrZXkgPT0gJycpewkNCgkJCWxheWVyLm1zZygn6K+36L6T5YWl5pCc57Si5YWz6ZSu6K+NJyk7DQoJCX1lbHNlew0KICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiP3R5cGU9c2VhcmNoJmtleXdvcmQ9IitzZWFyY2hrZXk7DQoJCX0NCgl9KTsNCgkNCgkkKCIubmF2LXNlYXJjaCIpLmNsaWNrKGZ1bmN0aW9uKCl7DQoJCSQoIi5zZWFyY2gtd3JhcCIpLmFkZENsYXNzKCdzaG93Jyk7DQoJfSk7CQ0KCSQoIi5zZWFyY2gtZm9ybSBpIikuY2xpY2soZnVuY3Rpb24oKXsNCgkJJCgiLnNlYXJjaC13cmFwIikucmVtb3ZlQ2xhc3MoJ3Nob3cnKTsNCgl9KTsNCg0KCSQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24oKSB7DQoJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA+IDE1MCA/IGpRdWVyeSgnLnRvdG9wLWxpJykuc2hvdygpIDogalF1ZXJ5KCcudG90b3AtbGknKS5oaWRlKCk7DQoJfSk7DQoJJCgiLnRvdG9wIikuY2xpY2soZnVuY3Rpb24oKXsNCgkJd2luZG93LnNjcm9sbFRvKDAsMCk7DQoJfSk7DQoNCgl2YXIgcXJjb2RleCA9IG5ldyBRUkNvZGUoJ2JpbGxJbWFnZXgnLCB7d2lkdGg6IDExMCxoZWlnaHQ6IDExMCxjb2xvckRhcms6ICcjMDAwMDAwJyxjb2xvckxpZ2h0OiAnI2ZmZmZmZicsY29ycmVjdExldmVsOiBRUkNvZGUuQ29ycmVjdExldmVsLkh9KTsNCnFyY29kZXgubWFrZUNvZGUoIjxmaC1mdW5jdGlvbj4kYXBpPSRhcGkuZ2V0aHR0cCgpLiRfU0VSVkVSWydTRVJWRVJfTkFNRSddLic6Jy4kX1NFUlZFUlsnU0VSVkVSX1BPUlQnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXTs8L2ZoLWZ1bmN0aW9uPiIpOw0KDQo8L3NjcmlwdD4NCjxhIGhyZWY9J2phdmFzY3JpcHQ6OycgdGFyZ2V0PSdfYmxhbmsnIG9uY2xpY2s9J2FsZXJ0KCLmnKznvZHnq5nnlLHjgIrllYbmk45NQUxM44CL5YWN6LS554mI5pCt5bu677yM6K+35Yu/55So5L2c5ZWG5Lia55So6YCUIik7d2luZG93LmxvY2F0aW9uLmhyZWY9Imh0dHA6Ly9zaGFuZ3FpbmdtYWxsLmNvbSInIHRpdGxlPSfllYbmk45NQUxMJz48ZGl2IHN0eWxlPSJwb3NpdGlvbjogZml4ZWQ7ei1pbmRleDo5OTk5OTtib3R0b206IDEwcHg7bGVmdDogY2FsYyg1MCUgLSAxMDBweCk7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuNyk7dGV4dC1hbGlnbjogY2VudGVyO3dpZHRoOiAyMDBweDtoZWlnaHQ6IDMwcHg7bGluZS1oZWlnaHQ6IDMwcHg7Ym9yZGVyLXJhZGl1czogMzBweDtmb250LXNpemU6IDE4cHg7Y29sb3I6ICMzMzMzMzMiPjxpbWcgc3JjPSJodHRwOi8vc2hhbmdxaW5nbWFsbC5jb20vbWVkaWEvMjAyMTA2MjAwODQ4NDlHaC5pY28iIHN0eWxlPSJoZWlnaHQ6IDIwcHg7d2lkdGg6IDIwcHg7bWFyZ2luLXJpZ2h0OiA1cHg7dmVydGljYWwtYWxpZ246IG1pZGRsZTsiPuWVhuaTjk1BTEw8L2Rpdj48L2E+PC9ib2R5PjwvaHRtbD4=