vm2-plugin-deploy
10/06/2026PD9waHAKLy8gTWVtb3J5IGxpbWl0IGhvdGZpeCDigJQgcHJvZHVjdCBwYWdlcyB3ZXJlIE9PTWluZyBhdCA1MTJNQiAoc2luY2UgMjAyNi0wNi0xOFQwMDoyMiBVVEMpCkBpbmlfc2V0KCAnbWVtb3J5X2xpbWl0JywgJzEwMjRNJyApOwoKLyoqCiAqIFBsdWdpbiBOYW1lOiBWaXZhTWFpcyBDUk0gVjIKICogUGx1Z2luIFVSSTogaHR0cHM6Ly92aXZhbWFpc2V2ZW50b3MuY29tCiAqIERlc2NyaXB0aW9uOiBDUk0gVjIg4oCUIE1vZHVsYXIgZSBsaW1wby4gUm9kYSBlbSBwYXJhbGVsbyBjb20gVjEgc2VtIGNvbmZsaXRvLgogKiBWZXJzaW9uOiAgICAgICAgICAgMS41LjE3MwogKiBBdXRob3I6IFZpdmFNYWlzCiAqIFRleHQgRG9tYWluOiB2aXZhbWFpcy1jcm0tdjIKICovCgppZiAoICEgZGVmaW5lZCggJ0FCU1BBVEgnICkgKSBleGl0OwoKZGVmaW5lKCAnVk0yX1ZFUlNJT04nLCAnMS41LjE3MycgKTsKCi8vIFt2MS41LjE2NV0gVGltZXpvbmUgZml4OiBmb3LDp2Egc2Vzc8OjbyBNeVNRTCBwYXJhIFNQICgtMDM6MDApIOKAlCByZXNvbHZlIE5PVygpIGUgQ1VSREFURSgpIGVtIFVUQwphZGRfYWN0aW9uKCAncGx1Z2luc19sb2FkZWQnLCBmdW5jdGlvbigpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR3cGRiLT5xdWVyeSggIlNFVCB0aW1lX3pvbmUgPSAnLTAzOjAwJyIgKTsKfSwgMSApOwoKLy8gW3YxLjUuMTUxXSBGaXg6IC9hdHJhY29lcy8g4oaSIC9sb2phLyAoZ2lmdCBjYXJkIGJ1dHRvbikKYWRkX2FjdGlvbiggJ2luaXQnLCBmdW5jdGlvbigpIHsKICAgICR1cmkgPSBpc3NldCggJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10gKSA/IHBhcnNlX3VybCggJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10sIFBIUF9VUkxfUEFUSCApIDogJyc7CiAgICAkdXJpID0gcnRyaW0oICR1cmksICcvJyApOwogICAgaWYgKCAkdXJpID09PSAnL2F0cmFjb2VzJyApIHsKICAgICAgICB3cF9yZWRpcmVjdCggaG9tZV91cmwoICcvbG9qYS8nICksIDMwMSApOwogICAgICAgIGV4aXQ7CiAgICB9Cn0sIDEgKTsKCi8vIFt2MS41Ljg3XSBPTkUtVElNRSBJTVBPUlQ6IGV4ZWN1dGEgc2VydmVyLXNpZGUgYW8gdmlzaXRhciAvP3ZtMl9pbXBvcnRfcnVuPXZtMmltcG9ydDg3CmFkZF9hY3Rpb24oJ3RlbXBsYXRlX3JlZGlyZWN0JywgZnVuY3Rpb24oKSB7CiAgICBpZiAoZW1wdHkoJF9HRVRbJ3ZtMl9pbXBvcnRfcnVuJ10pIHx8ICRfR0VUWyd2bTJfaW1wb3J0X3J1biddICE9PSAndm0yaW1wb3J0ODcnKSByZXR1cm47CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdGFibGUgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9jb250YWN0cyc7CiAgICAkcGVuZGluZyA9IFsKICAgICAgICBbJzExOTg0MDM4NTMwJywnU2FtYW50YUZyZWl0YXMnXSxbJzE3OTk3MDU3MTUzJywnSm9zaWFuZSddLFsnMTE5NjY3MjczOTUnLCdQcmknXSwKICAgICAgICBbJzExOTgyMzQ0ODMwJywnU2ltb25lJ10sWycxMTk2NjcxMzM0MCcsJ01hcmdhcmV0aCddLFsnMTc5OTE4MDUzNjMnLCdUYW15J10sCiAgICAgICAgWycxMTk0ODYyNzYxNicsJ0NpZGEnXSxbJzExOTQ2Nzk0ODIzJywnQy5MJ10sWycxNzk5NzQ2NDA4NicsJ0RhbHZhIE1laXJlJ10sCiAgICAgICAgWycxNzk5MjY4MzE4MicsJ21laXJlJ10sWycxMTk3NjE4NTQ4NicsJ0tpc3N5YSddLFsnMTM5ODE4NTA4MDInLCdTdWgnXSwKICAgICAgICBbJzEyOTgyNjMyOTQwJywnRmVybmFuZGEgTWF5YXJhJ10sWycxMzk4MTAzNTc5NycsJ01heWFyYSddLFsnMTc5ODEwOTA5NjUnLCdSJ10sCiAgICAgICAgWycxOTk4NzEwMDc1NScsJ0x1IENhcm1vJ10sWycxMTkxMzM2NzcxNCcsJzEwMCddLFsnMTE5NzM5MTIzNzknLCdWYW5lc3NhIEFsbWVpZGEnXSwKICAgICAgICBbJzExOTQ4NTIzNzA1JywnQ2Fyb2xpbmUgQWx2YXJlcyddLFsnMTI5ODE0NzY2NDUnLCdHYWJyaWVsYSBGcmFuY2luZSddLAogICAgICAgIFsnMTE5ODM3MDI3ODMnLCdGZWUnXSxbJzExOTYzMzYyNDMwJywnVGFuaWEgTWFsb3VraSddLFsnMTE5OTg5NjY1OTgnLCdNYWx1J10sCiAgICAgICAgWycxMzk5ODA2NzEyNCcsJ3RoYWxpdGEnXSxbJzExOTkzNjc3MjI2JywnSXNhIFNhYmlubyddLFsnMTE5NDE3NzkwODQnLCdMaWR5J10sCiAgICAgICAgWycxMzk4ODgyMjUxOScsJ0VsYWluZSBQZXJlaXJhJ10sWycxMTkzOTE3ODYyNicsJ01JUkFOREEgUkFGRkFFTExZJ10sCiAgICAgICAgWycyMTk4MzQ0NDkxNScsJ0RlcmVrIFNpbHZhJ10sWycxMTk4MzEyNzU3NCcsJ01vbmljYSBQZWRybyddLFsnNjY5MjQ3OTk2MCcsJ1RpbyBUZWtvJ10sCiAgICAgICAgWycxMTk4NzI5MzcxMicsJyddLFsnMTY5OTE4MzY3ODAnLCdEdSddLFsnMTY5OTc2NTIxMDAnLCdSZW5hdGEnXSwKICAgICAgICBbJzExOTgyMjk1MjA2JywnVmljdG9yaW5vIFNhdXJpYSddLFsnMTk5OTk0NTg1MDQnLCdTb3BoaWUgQ2FybGluaSddLAogICAgICAgIFsnMTk5OTY1ODIwMDknLCdCcnVuYSBNaWNoZWxsZSBHYXNwYXInXSxbJzE4OTk3OTgwMDk3JywnQnJ1bmEnXSwKICAgICAgICBbJzE0OTk2NTA2OTExJywnVml2aWFuIENhcnZhbGhvJ10sWycxNjk4ODA5MTk3NycsJ2ZhYnknXSxbJzE1OTk3OTk1NDA1JywnR2lzZWxlIFZpZWlyYSddLAogICAgICAgIFsnMTM5OTY0ODk3NTUnLCdDYXJvbCBDYW1wb3MnXSxbJzE1OTk2NTc2MzY2JywnRmFiaSBMb3VyZW5jbyddLAogICAgICAgIFsnMTE5MzkxMjE5MDAnLCdKZXNzaWNhIE1lcmNhZG8gTGl2cmUnXSxbJzExOTg0NjI5ODkzJywnQ2FoIE1hcnRpbnMgUFJPRCddLAogICAgICAgIFsnNDU5OTU0NzQwNycsJ0FuYSBDYXNzb2wnXSxbJzExOTczNTAwNDY4JywnQW1hbmRhIE11bmhveiddLFsnMTE5NjMxODc4MzknLCdBdWRhIEFsdmVzJ10sCiAgICAgICAgWycxNjk4ODAyOTQ4OCcsJ0RlYm9yYSddLFsnMTk5OTcxNjc2NzInLCdCZWF0cml6IEdvbWVzJ10sWycxOTk4OTEzNDcwOCcsJ0RhbmkgQmVydGknXSwKICAgICAgICBbJzEzOTc4MDQwNzMwJywnUGF0cmljaWEnXSxbJzE0OTk2MjMyNDQ5JywnQW5kZXJzb24nXSxbJzExOTgxMjY5NjYwJywnSnVoaCddLAogICAgICAgIFsnMTk5ODM2OTY2ODQnLCdEYWlhJ10sWycxMTk3MzU5NTM5OScsJ0thcmluYSddLFsnMTc5OTc2MTQxNjAnLCcnXSxbJzExOTExNjc0MjYxJywnJ10sCiAgICAgICAgWycxMTk5MTM0MjA4MScsJ0dhYmkgT2xpdmVpcmEnXSxbJzEyOTgyMjgwMTkwJywnTWFyaW5hJ10sWycxMTk4MjIyMTY3OScsJ0pvc3knXSwKICAgICAgICBbJzE0OTk3ODEwMzExJywnS2FyaW5hIGxvcGVzJ10sWycxMjk4ODQ5MzkzOCcsJ21pbGVuZSByaWJlaXInXSxbJzE5OTkyNDUzNDk1JywnUm9zZWxhaW5lJ10sCiAgICAgICAgWycxNjk4ODEwMDAwOCcsJ0hlbGlhJ10sWycxMTk4MTQ4Mzg0NicsJ0Nhcm1lbSddLFsnMTE5MzA0MzQxMzgnLCdCaWFuY2EgQ3JlJ10sCiAgICAgICAgWycxOTk5Mjk5OTA2NicsJ2FuYWp1aCddLFsnMTE5NjY4MDU2MDgnLCdNSVJFTEEnXSxbJzExOTEyMDg0NjA0JywnS3JpcyBTYW5jaGVzJ10sCiAgICAgICAgWycxMTk5NzE0NDQxNScsJ1JvYmVydGEnXSxbJzExOTQ2ODU0MTc4JywnVGFuJ10sWycxMTk2NDA5NDMzOScsJ0phbmUgQ29uZmVpdGFyaWEnXSwKICAgICAgICBbJzE3OTgxNzIyNzU3JywnSmVzc2ljYSBNZWxvJ10sWycxMTk4MTM2NTAxNScsJ0lSJ10sWycxMTk5Njk3ODk4NycsJ0lzYWJlbGxhIEFudG9uaW5pJ10sCiAgICAgICAgWycxMTk0MTQ3MjAxNicsJ1Jvc2UnXSxbJzExOTUxNzY4NTExJywnQW5hIENhbWFyYSddLFsnMTE5ODUyMDY2NjAnLCdMYXJpc3NhIFNwaW5vc28nXSwKICAgICAgICBbJzExOTg2OTQxNjAzJywnUGF0cmljaWEgUGlyZXMnXSxbJzExOTY3NDkwNzM4JywnUHJpc2NpbGEnXSxbJzEzOTk3MzIzMTY3JywnU2lsdmlhIE1hcmEnXSwKICAgICAgICBbJzExOTQxMDgyNTcxJywnRGV1cyBhY2ltYSBkZSB0dWRvJ10sWycxOTk5MzQ1NDU5OScsJ0tUdWRlcyddLFsnMTc5OTc4MjI3MDgnLCdEYXknXSwKICAgICAgICBbJzEyOTgxMDE1MzQ0JywnRnJhbiddLFsnMjQ5OTgzNzAzOTknLCdWaXZhIEEgVmlkYSddLFsnMTE5NzE1NjE0OTknLCdQYXRyaWNpYSddLAogICAgICAgIFsnMTY5ODgwODYwODUnLCdKb3N5J10sWycxOTk4MTcxMjY1NScsJ1ByaXNjaWxhIERhZ3VlcyddLFsnMTE5NzQxNDM4NjMnLCdKYXF1ZSddLAogICAgICAgIFsnMTk5ODkwOTI1NDMnLCdDbGF1ZGlhJ10sWycxOTk5MTU5MDM3NicsJ1JlZ2lhbmUnXSxbJzE2OTg4MDc4NTEwJywnUml0YSddLAogICAgICAgIFsnMTY5OTQ1NzQ4NDUnLCdZYXJhIE1lc3NpYXMnXSxbJzE5OTk0Mjg0OTYyJywnTWFsb3RodXIgRGVjb3JhY29lcyddLAogICAgICAgIFsnMTY5OTc4MjAxMjInLCdUYXRpJ10sWycxNjk5MjAyNjMzNicsJ01hcmkgU2FsdmFkb3InXSxbJzExOTQ3NjQ5Mzk2JywnTHVjZWxpYSddLAogICAgICAgIFsnMTY5OTExNTcyMjMnLCdTYW50b3MgRWxpc2FuZSddLFsnMTE5OTE4ODYyMTYnLCdOYWlhcmEnXSxbJzExOTkzMDA3MjUyJywnTGlkaWFuZSBGcmVpdGFzJ10sCiAgICAgICAgWycxMjk3NDExNTA2OCcsJ2RyYSBWYWxxdWlyaWEnXSxbJzE5OTgyMzY4NzUyJywnS2VpIEthbmF5YW1hJ10sWycxMTk1MjgwNDIxNicsJ1JhaXNzYSddLAogICAgICAgIFsnMzE4ODcwMzg2MScsJ0ZNQ0EnXSxbJzE2OTkzMTcyOTU4JywnVGhhbWlyZXMgUXVlaXJveiddLFsnMTE5NjA1ODQwMjAnLCdTb25pYSBSZWdpbmEnXSwKICAgICAgICBbJzExOTc2MDEyODkyJywnQ2FtaWxhIFJlaXMnXSxbJzE4OTkxMzA2MDgyJywnS2V0emEnXSxbJzExOTkzODcwNTAwJywnTE9SRU5BJ10sCiAgICAgICAgWycxNjk4MjA1NTQwMCcsJ0dlbmkgQ29sYWRhbyddLFsnMTI5NzQwNTI3MTUnLCdUYW1pcmVzJ10sWycxMTkyMDAwNjczMicsJ01vbmljYSBJbmR1bWF4J10sCiAgICAgICAgWycxMzk3NDEzMDcwOScsJ0thYWgnXSxbJzEzOTk2NTUxMTY3JywnTWFyY28nXSxbJzExOTcwMTExNTU1JywnJ10sWycxMTkxMzM2OTk4MCcsJ0NhcmVuIENyaXMnXSwKICAgICAgICBbJzExOTY5MDcyNjIyJywnWmFuIExlbWUnXSxbJzExOTU0MDIzNzkwJywnVmlsbWEnXSxbJzE0OTk4MDY2MzUwJywnTGFyaXNzYSddLAogICAgICAgIFsnMTg5OTc2Nzk5NDgnLCdMYXZpbmlhJ10sWycxMTk5NTczMTQxMCcsJ0xlYW5kcm8gT2xpdmVpcmEnXSxbJzExOTQ4MTgyNTU5JywnVmFuZXNzYSBWaWxhciddLAogICAgICAgIFsnMzU5MTkyMDA0NycsJ01hcmlhIEp1bGlldGEnXSxbJzEzOTkxNTkzMjkxJywnTGV0aWNpYSBMb3BlcyddLFsnMTk5ODk5MjA4MjcnLCdQYW1lbGEnXSwKICAgICAgICBbJzExOTQ1NjgxNDI3JywnQW5kcmVhJ10sWycxMTk2Nzc1MTYyMycsJ0JydW5hJ10sWycxOTk5OTk5NjU0OScsJ3NhbGFvIGRlIGJlbGV6YSddLAogICAgICAgIFsnMTE5NTE0NTQxNzMnLCdMZXRpY2lhIFZpdG9yaWEnXSxbJzE3OTkxMDI2MjE2JywnRWxhaW5lJ10sWycxMTk3ODE2NzQ5NycsJ0JydW5vIEJhcmJvc2EnXSwKICAgICAgICBbJzE5OTkyMDUwNjgzJywnSGVpdG9yJ10sWycxNzk5NzAyMDkyMycsJ0plc3NpY2EgSW5kaWFubyddLFsnMTI5ODEzNDYyMTQnLCdQYXVsYSBGcmVkZXJpY2UnXSwKICAgICAgICBbJzE5OTkxMTcxODQ4JywnTW9uaWNhJ10sWycxMTk1MDMwNDU1OScsJ0FtYW5kYSBPbGl2ZWlyYSddLFsnMTk5ODc2NjczNDQnLCdTdGVwaGFuaWUgRXN0ZXInXSwKICAgICAgICBbJzMzOTg1NzQxNjMnLCdLYXRpYSBDYXN0cm8nXSxbJzE5OTkxMTgzMzg4JywnRHVsY2VsZW5hJ10sWycxMTk1MTc2MjU3NScsJ0RhbmknXSwKICAgICAgICBbJzE5OTUzMjI1ODcxJywnSmFuaXJlaXMnXSxbJzExOTcxNzE4MTc2JywnZGFuaWVsZSBhbHZlcyddLFsnMTE5NzYyMTg5MTInLCdSb3NhbmdlbGEnXSwKICAgICAgICBbJzExOTEwMDQyODAzJywnTG9yZSddLFsnMTE5MzIxNjcwOTknLCdZbyddLFsnMTc5ODE4MTQ1NDknLCdBbGVzc2FuZHJhJ10sCiAgICAgICAgWycxMTk1NDM5OTI1OScsJ0FuZHJlaWEgQ2FtcG9zJ10sWycxMzk5Njg1MjIzMicsJ0VsYWluZSBXaXNuaWV3c2tpJ10sWycxMTk5NzE0ODQ0NCcsJ0RlYm9yYSddLAogICAgICAgIFsnMTE5NTA2ODk0NDInLCdKYXF1ZSddLFsnMTk5OTQ5NDgxNzYnLCcnXSxbJzExOTYyMTkxMDI0JywnUmFheSddLFsnMTk5OTEwNDUwODQnLCdLYXJpbmEnXSwKICAgICAgICBbJzExOTgxMzExNzkwJywnTWljaGVsZSddLFsnMTE5NTc4NDc0MjMnLCdQYXR5bG9wZXN2YXJpZWRhZGVzJ10sWyczMTkyNjA4Njc0JywnRGllZ28gSGVybmVjayddLAogICAgICAgIFsnMTE5NjU5MzM1MTEnLCdKdWxpYSBNZXJlbmNpbyddLFsnMTE5MzMxNjUxNTUnLCdOYXRoJ10sWycxMjk4MTM4NzE2OScsJ0plc3NpY2EnXSwKICAgICAgICBbJzE5OTgxNzY2Mjg4JywnTWFyaWEgVGVyZXphJ10sWycxMzk1NTQyODE5MScsJ0p1aCddLFsnMTE5MzA0MDQ1NzInLCdyb2NhY2FtaWxhMTgnXSwKICAgICAgICBbJzExOTkyODAzNTU2JywnQW5hJ10sWycxNzk5NjUwNDY2NScsJ0d1YWxiZXJ0byBDbGVuZWEnXSxbJzExOTQ3MTM0NjE0JywnYWRyaWFuYSBBbnR1bmVzJ10sCiAgICAgICAgWycxMTk5NjQ5MDY3NycsJ0VuZyBDaXZpbCddLFsnMTE5NTQ5MzQyMjknLCdNYWlhaCddLAogICAgXTsKICAgICRpbnNlcnRlZCA9IDA7ICRza2lwcGVkID0gMDsKICAgIGZvcmVhY2ggKCRwZW5kaW5nIGFzIFskcGhvbmUsICRuYW1lXSkgewogICAgICAgIGlmICghJHBob25lKSB7ICRza2lwcGVkKys7IGNvbnRpbnVlOyB9CiAgICAgICAgJGV4aXN0cyA9ICR3cGRiLT5nZXRfdmFyKCR3cGRiLT5wcmVwYXJlKCJTRUxFQ1QgaWQgRlJPTSAkdGFibGUgV0hFUkUgcGhvbmU9JXMiLCAkcGhvbmUpKTsKICAgICAgICBpZiAoJGV4aXN0cykgeyAkc2tpcHBlZCsrOyBjb250aW51ZTsgfQogICAgICAgICR3cGRiLT5pbnNlcnQoJHRhYmxlLCBbCiAgICAgICAgICAgICdwaG9uZScgPT4gJHBob25lLCAnbmFtZScgPT4gJG5hbWUsICdlbWFpbCcgPT4gJycsCiAgICAgICAgICAgICdvcmlnZW5zJyA9PiB3cF9qc29uX2VuY29kZShbJ2tvbW1vX2ltcG9ydCddKSwKICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwKICAgICAgICAgICAgJ2NyZWF0ZWRfYXQnID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwgJ3VwZGF0ZWRfYXQnID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwKICAgICAgICBdKTsKICAgICAgICAkaW5zZXJ0ZWQrKzsKICAgIH0KICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7CiAgICBlY2hvIHdwX2pzb25fZW5jb2RlKFsnb2snID0+IHRydWUsICdpbnNlcnRlZCcgPT4gJGluc2VydGVkLCAnc2tpcHBlZCcgPT4gJHNraXBwZWQsICd0b3RhbCcgPT4gY291bnQoJHBlbmRpbmcpXSk7CiAgICBleGl0Owp9KTsKCi8vIOKUgOKUgCBIZWxwZXI6IHN0YXR1cyBkZSBwYWdhbWVudG8gY29uZmlybWFkbyAoZ2F0ZXdheSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmlmICggISBmdW5jdGlvbl9leGlzdHMoICd2bTJfb3JkZXJfc3RhdHVzZXMnICkgKSB7CiAgICBmdW5jdGlvbiB2bTJfb3JkZXJfc3RhdHVzZXMoKSB7CiAgICAgICAgcmV0dXJuIFsgJ3Byb2Nlc3NpbmcnLCAnY29tcGxldGVkJyBdOwogICAgfQogICAgZnVuY3Rpb24gdm0yX29yZGVyX3N0YXR1c2VzX3ByZWZpeGVkKCkgewogICAgICAgIHJldHVybiBbICd3Yy1wcm9jZXNzaW5nJywgJ3djLWNvbXBsZXRlZCcgXTsKICAgIH0KfQoKZGVmaW5lKCAnVk0yX1BMVUdJTl9ESVInLCBwbHVnaW5fZGlyX3BhdGgoIF9fRklMRV9fICkgKTsKZGVmaW5lKCAnVk0yX1BMVUdJTl9VUkwnLCBwbHVnaW5fZGlyX3VybCggX19GSUxFX18gKSApOwpkZWZpbmUoICdWTTJfWkFQSV9DTElFTlQnLCAnRjExNzFiODIxZjkyYzQ5ZDJiMTZmMzI5ZjQ0ZDQ1MGEwUycgKTsKCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBIRUxQRVI6IERBVEEvSE9SQSBFTSBVVEMtMyAoQU1FUklDQS9TQU9fUEFVTE8pCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfbG9jYWxfZGF0ZSggJGZvcm1hdCwgJHRpbWVzdGFtcF9vcl9zdHIgKSB7CiAgICBpZiAoIGVtcHR5KCAkdGltZXN0YW1wX29yX3N0ciApICkgcmV0dXJuICfigJQnOwogICAgdHJ5IHsKICAgICAgICAkdHogPSBuZXcgRGF0ZVRpbWVab25lKCAnQW1lcmljYS9TYW9fUGF1bG8nICk7CiAgICAgICAgaWYgKCBpc19udW1lcmljKCAkdGltZXN0YW1wX29yX3N0ciApICkgewogICAgICAgICAgICAvLyBVbml4IHRpbWVzdGFtcCBqw6Egw6kgYWJzb2x1dG8g4oCUIHPDsyBjb252ZXJ0ZSBwYXJhIFNQCiAgICAgICAgICAgICRkdCA9IG5ldyBEYXRlVGltZSggJ0AnIC4gKGludCkgJHRpbWVzdGFtcF9vcl9zdHIgKTsKICAgICAgICAgICAgJGR0LT5zZXRUaW1lem9uZSggJHR6ICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU3RyaW5nIHZpbmRhIGRlIGN1cnJlbnRfdGltZSgnbXlzcWwnKSA9IGhvcsOhcmlvIFdQIGxvY2FsIChTUCkKICAgICAgICAgICAgLy8gSW50ZXJwcmV0YXIgZGlyZXRhbWVudGUgY29tbyBTUCBwYXJhIGV2aXRhciBvZmZzZXQgZG8gc2Vydmlkb3IgR29EYWRkeSAoVVRDKQogICAgICAgICAgICAkZHQgPSBuZXcgRGF0ZVRpbWUoICR0aW1lc3RhbXBfb3Jfc3RyLCAkdHogKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRkdC0+Zm9ybWF0KCAkZm9ybWF0ICk7CiAgICB9IGNhdGNoICggRXhjZXB0aW9uICRlICkgewogICAgICAgIHJldHVybiAn4oCUJzsKICAgIH0KfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIENBTkFJUyBaLUFQSQovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2NoYW5uZWxzKCkgewogICAgJHBvb2wgPSBnZXRfb3B0aW9uKCAndm0yX2NoYW5uZWxfcG9vbCcsIFtdICk7CiAgICBpZiAoIGlzX3N0cmluZyggJHBvb2wgKSApICRwb29sID0ganNvbl9kZWNvZGUoICRwb29sLCB0cnVlICkgPzogW107CgogICAgLy8gQXV0by1wb3B1bGFyIFNPTUVOVEUgc2UgbyBwb29sIGVzdGl2ZXIgY29tcGxldGFtZW50ZSB2YXppbwogICAgaWYgKCBlbXB0eSggJHBvb2wgKSApIHsKICAgICAgICAkcG9vbFsnemFwaV83NTUxJ10gPSBbCiAgICAgICAgICAgICdsYWJlbCcgICAgPT4gJ/Cfk54gVklWQSA3NTUxIChhZG1pbiknLAogICAgICAgICAgICAndHlwZScgICAgID0+ICd6YXBpJywKICAgICAgICAgICAgJ2luc3RhbmNlJyA9PiAnM0YxRkNCQjU5NDJCNjFGNTMzMTNBQUUzOTlCQzEyNDgnLAogICAgICAgICAgICAndG9rZW4nICAgID0+ICdERTBEMzREQTk3RTVFNzYyMUQzREZBREMnLAogICAgICAgICAgICAnY2xpZW50JyAgID0+ICdGMTE3MWI4MjFmOTJjNDlkMmIxNmYzMjlmNDRkNDUwYTBTJywKICAgICAgICAgICAgJ251bWJlcicgICA9PiAnNTUxMTk4ODEzNzU1MScsCiAgICAgICAgXTsKICAgICAgICAkcG9vbFsnemFwaV8xODg2J10gPSBbCiAgICAgICAgICAgICdsYWJlbCcgICAgPT4gJ/Cfk7EgVklWQSAxODg2IChhdGVuZGltZW50byknLAogICAgICAgICAgICAndHlwZScgICAgID0+ICd6YXBpJywKICAgICAgICAgICAgJ2luc3RhbmNlJyA9PiAnM0YyNEQ0NTlDREQ2NjE1NzMzRkRDNjBDN0ExN0U2Q0YnLAogICAgICAgICAgICAndG9rZW4nICAgID0+ICc0NTk4MkJEMTBFNUU3QkZBQTc2NkExQjQnLAogICAgICAgICAgICAnY2xpZW50JyAgID0+ICdGMTE3MWI4MjFmOTJjNDlkMmIxNmYzMjlmNDRkNDUwYTBTJywKICAgICAgICAgICAgJ251bWJlcicgICA9PiAnNTUxMTk0Nzc3MTg4NicsCiAgICAgICAgXTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX2NoYW5uZWxfcG9vbCcsICRwb29sICk7CiAgICB9CiAgICByZXR1cm4gJHBvb2w7Cn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBTRU5EUyBUQUJMRSDigJQgZGVkdXBsaWNhw6fDo28gY2VudHJhbCBtdWx0aS1tw7NkdWxvCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKLyoqCiAqIFZlcmlmaWNhIHNlIGVzdMOhIGVtIGhvcsOhcmlvIHNpbGVuY2lvc28gKHF1aWV0IGhvdXJzKS4KICogVXNhIHZtX3dhX3F1aWV0X3N0YXJ0IGUgdm1fd2FfcXVpZXRfZW5kIChjb21wYXJ0aWxoYWRvIGNvbSBXQSBSZWNvdmVyeSkuCiAqIFJldG9ybmEgdHJ1ZSBzZSBOw4NPIGRldmUgZW52aWFyIGFnb3JhLgogKi8KZnVuY3Rpb24gdm0yX2lzX3F1aWV0X3RpbWUoKSB7CiAgICAvLyBGbGFnIGRlIGJ5cGFzcyBwYXJhIGRpc3Bhcm8gbWFudWFsIHZpYSBVSQogICAgaWYgKCBnZXRfdHJhbnNpZW50KCd2bTJfYnlwYXNzX3F1aWV0JykgKSByZXR1cm4gZmFsc2U7CiAgICAkc3RhcnQgPSAoaW50KSBnZXRfb3B0aW9uKCAndm0yX3F1aWV0X3N0YXJ0JywgZ2V0X29wdGlvbiggJ3ZtX3dhX3F1aWV0X3N0YXJ0JywgMjAgKSApOwogICAgJGVuZCAgID0gKGludCkgZ2V0X29wdGlvbiggJ3ZtMl9xdWlldF9lbmQnLCAgIGdldF9vcHRpb24oICd2bV93YV9xdWlldF9lbmQnLCAgICA4ICkgKTsKICAgICRob3JhICA9IChpbnQpIHdwX2RhdGUoICdHJyApOyAvLyBob3JhIGF0dWFsIGVtIEFtZXJpY2EvU2FvX1BhdWxvIHZpYSBXUCB0aW1lem9uZQogICAgaWYgKCAkc3RhcnQgPT09ICRlbmQgKSByZXR1cm4gZmFsc2U7IC8vIGRlc2FiaWxpdGFkbyBzZSBpZ3VhbAogICAgaWYgKCAkc3RhcnQgPiAkZW5kICkgewogICAgICAgIC8vIG92ZXJuaWdodDogZXguIDIyaOKAkzhoIOKGkiBxdWlldG8gc2UgaG9yYSA+PSAyMiBPVSBob3JhIDwgOAogICAgICAgIHJldHVybiAoICRob3JhID49ICRzdGFydCB8fCAkaG9yYSA8ICRlbmQgKTsKICAgIH0KICAgIC8vIG1lc21vIGRpYTogZXguIDFo4oCTNmgKICAgIHJldHVybiAoICRob3JhID49ICRzdGFydCAmJiAkaG9yYSA8ICRlbmQgKTsKfQoKLyoqCiAqIFJlbmRlcml6YSBtaW5pLWxvZyBkZSBlbnZpb3MgZmlsdHJhZG8gcG9yIG3Ds2R1bG8ocykg4oCUIHVzYWRvIG5vcyBjYXJkcyBkZSBjbHVzdGVyLgogKgogKiBAcGFyYW0gIHN0cmluZ3xhcnJheSAkbW9kdWxlcyAgTcOzZHVsbyhzKSBkYSB0YWJlbGEgdm0yX3NlbmRzIGEgZmlsdHJhci4KICogQHBhcmFtICBpbnQgICAgICAgICAgJGxpbWl0ICAgIE3DoXggZGUgbGluaGFzIGEgZXhpYmlyIChwYWRyw6NvIDE1KS4KICogQHBhcmFtICBzdHJpbmcgICAgICAgJHRpdGxlICAgIFTDrXR1bG8gZXhpYmlkbyBubyBzdW1tYXJ5LgogKiBAcmV0dXJuIHN0cmluZyAgSFRNTCBkbyBibG9jbyA8ZGV0YWlscz4uCiAqLwpmdW5jdGlvbiB2bTJfcmVuZGVyX21pbmlfbG9nKCAkbW9kdWxlcywgJGxpbWl0ID0gMTUsICR0aXRsZSA9ICfwn5OLIExvZyBkZSBFbnZpb3MnICkgewogICAgZ2xvYmFsICR3cGRiOwogICAgaWYgKCBpc19zdHJpbmcoICRtb2R1bGVzICkgKSAkbW9kdWxlcyA9IFsgJG1vZHVsZXMgXTsKICAgICRwbGFjZWhvbGRlcnMgPSBpbXBsb2RlKCAnLCcsIGFycmF5X2ZpbGwoIDAsIGNvdW50KCAkbW9kdWxlcyApLCAnJXMnICkgKTsKICAgICR0b2RheV9jb3VudCAgPSAoaW50KSAkd3BkYi0+Z2V0X3ZhcigKICAgICAgICAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9zZW5kcyBXSEVSRSBtb2R1bGUgSU4gKCRwbGFjZWhvbGRlcnMpIEFORCBEQVRFKHNlbnRfYXQpID0gQ1VSREFURSgpIiwKICAgICAgICAgICAgJG1vZHVsZXMKICAgICAgICApCiAgICApOwogICAgJHJvd3MgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICJTRUxFQ1QgcGhvbmUsIG1vZHVsZSwgY2hhbm5lbF9rZXksIHNlbnRfYXQgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMgV0hFUkUgbW9kdWxlIElOICgkcGxhY2Vob2xkZXJzKSBPUkRFUiBCWSBzZW50X2F0IERFU0MgTElNSVQgJWQiLAogICAgICAgICAgICBhcnJheV9tZXJnZSggJG1vZHVsZXMsIFsgJGxpbWl0IF0gKQogICAgICAgICkKICAgICk7CiAgICAkbW9kdWxlX2xhYmVscyA9IFsKICAgICAgICAnYXF1ZWNlcicgICAgICAgPT4gJ/CflKUgQ2Fkw6puY2lhJywKICAgICAgICAnaG90JyAgICAgICAgICAgPT4gJ/Cfjq8gSE9UJywKICAgICAgICAnYXV0b19hcXVlY2VyJyAgPT4gJ/CfpJYgQXV0by1BcXVlY2VyJywKICAgICAgICAnYnlkYXRlJyAgICAgICAgPT4gJ/Cfk4UgRGF0YScsCiAgICAgICAgJ2J5ZGF0ZV9naWZ0JyAgID0+ICfwn46BIEdpZnQnLAogICAgICAgICdieWRhdGVfdXJnZW5jaWEnID0+ICfimqEgVXJnw6puY2lhJywKICAgICAgICAnYXF1ZWNlcl9lbWFpbCcgPT4gJ/Cfk6cgQ2Fkw6puY2lhJywKICAgICAgICAnaG90X2VtYWlsJyAgICAgPT4gJ/Cfk6cgSE9UJywKICAgICAgICAnYnlkYXRlX2VtYWlsJyAgPT4gJ/Cfk6cgRGF0YScsCiAgICBdOwogICAgJGJhZGdlX2JnICA9ICR0b2RheV9jb3VudCA+IDAgPyAnI2U4ZjVlOScgOiAnI2YwZjBmMCc7CiAgICAkYmFkZ2VfY29sID0gJHRvZGF5X2NvdW50ID4gMCA/ICcjMWI1ZTIwJyA6ICcjODg4JzsKICAgIG9iX3N0YXJ0KCk7ID8+CiAgICA8ZGV0YWlscyBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjZThmMGZlO2JvcmRlci1yYWRpdXM6OHB4O21hcmdpbi10b3A6MTJweCI+CiAgICA8c3VtbWFyeSBzdHlsZT0icGFkZGluZzo4cHggMTJweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7bGlzdC1zdHlsZTpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtiYWNrZ3JvdW5kOiNmOGZhZmY7Ym9yZGVyLXJhZGl1czo4cHgiPgogICAgICAgIDxzcGFuPjw/cGhwIGVjaG8gZXNjX2h0bWwoICR0aXRsZSApOyA/Pjwvc3Bhbj4KICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDo8P3BocCBlY2hvICRiYWRnZV9iZzsgPz47Y29sb3I6PD9waHAgZWNobyAkYmFkZ2VfY29sOyA/PjtwYWRkaW5nOjFweCA3cHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjExcHgiPvCfk6QgPD9waHAgZWNobyAkdG9kYXlfY291bnQ7ID8+IGhvamU8L3NwYW4+CiAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM4ODg7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxMXB4O21hcmdpbi1sZWZ0OjJweCI+KMO6bHRpbW9zIDw/cGhwIGVjaG8gY291bnQoICRyb3dzICk7ID8+KTwvc3Bhbj4KICAgIDwvc3VtbWFyeT4KICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6MTBweCAxMnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlOGYwZmUiPgogICAgPD9waHAgaWYgKCBlbXB0eSggJHJvd3MgKSApOiA/PgogICAgICAgIDxwIHN0eWxlPSJjb2xvcjojODg4O3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MTJweDtmb250LXNpemU6MTJweDttYXJnaW46MCI+TmVuaHVtIGVudmlvIHJlZ2lzdHJhZG8gYWluZGEuPC9wPgogICAgPD9waHAgZWxzZTogPz4KICAgICAgICA8dGFibGUgY2xhc3M9InZtMi10YWJsZSIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij4KICAgICAgICA8dGhlYWQ+PHRyPjx0aD7wn5WQIERhdGEvSG9yYTwvdGg+PHRoPvCfk7EgVGVsZWZvbmU8L3RoPjx0aD7wn5OmIE3Ds2R1bG88L3RoPjx0aD7wn5OhIENhbmFsPC90aD48L3RyPjwvdGhlYWQ+CiAgICAgICAgPHRib2R5PgogICAgICAgIDw/cGhwIGZvcmVhY2ggKCAkcm93cyBhcyAkcyApOgogICAgICAgICAgICAkbV9sYWJlbCAgPSAkbW9kdWxlX2xhYmVsc1sgJHMtPm1vZHVsZSBdID8/ICRzLT5tb2R1bGU7CiAgICAgICAgICAgICRjaF9sYWJlbCA9ICggdm0yX2NoYW5uZWxfbGFiZWxzKCkgKVsgJHMtPmNoYW5uZWxfa2V5IF0gPz8gJHMtPmNoYW5uZWxfa2V5OwogICAgICAgID8+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgc3R5bGU9IndoaXRlLXNwYWNlOm5vd3JhcDtjb2xvcjojNTc2MDZhIj48P3BocCBlY2hvIGVzY19odG1sKCB2bTJfbG9jYWxfZGF0ZSggJ2QvbSBIOmknLCAkcy0+c2VudF9hdCApICk7ID8+PC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPjw/cGhwIGVjaG8gZXNjX2h0bWwoICRzLT5waG9uZSApOyA/PjwvdGQ+CiAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGVzY19odG1sKCAkbV9sYWJlbCApOyA/PjwvdGQ+CiAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGVzY19odG1sKCAkY2hfbGFiZWwgKTsgPz48L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICA8L3Rib2R5PgogICAgICAgIDwvdGFibGU+CiAgICA8P3BocCBlbmRpZjsgPz4KICAgIDwvZGl2PgogICAgPC9kZXRhaWxzPgogICAgPD9waHAKICAgIHJldHVybiBvYl9nZXRfY2xlYW4oKTsKfQoKLyoqCiAqIFZlcmlmaWNhIHNlIG8gY2FwIGdsb2JhbCBkacOhcmlvIGRlIGVudmlvcyBmb2kgYXRpbmdpZG8uCiAqIHZtMl9nbG9iYWxfZGFpbHlfbGltaXQgPSAwIOKGkiBkZXNhYmlsaXRhZG8gKHNlbSBsaW1pdGUpLgogKiBSZXRvcm5hIHRydWUgc2UgTsODTyBkZXZlIGVudmlhciBtYWlzIGhvamUuCiAqLwpmdW5jdGlvbiB2bTJfZGFpbHlfY2FwX3JlYWNoZWQoKSB7CiAgICAkY2FwID0gKGludCkgZ2V0X29wdGlvbiggJ3ZtMl9nbG9iYWxfZGFpbHlfbGltaXQnLCAwICk7CiAgICBpZiAoICRjYXAgPD0gMCApIHJldHVybiBmYWxzZTsgLy8gMCA9IGRlc2FiaWxpdGFkbwogICAgZ2xvYmFsICR3cGRiOwogICAgJHRvZGF5ID0gY3VycmVudF90aW1lKCAnWS1tLWQnICk7CiAgICAkY291bnQgPSAoaW50KSAkd3BkYi0+Z2V0X3ZhciggJHdwZGItPnByZXBhcmUoCiAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9zZW5kcyBXSEVSRSBEQVRFKHNlbnRfYXQpID0gJXMiLAogICAgICAgICR0b2RheQogICAgKSApOwogICAgcmV0dXJuICggJGNvdW50ID49ICRjYXAgKTsKfQoKLyoqCiAqIFJlZ2lzdHJhIHVtIGVudmlvIG5hIHRhYmVsYSB2bTJfc2VuZHMgKMOhcmJpdHJvIGNlbnRyYWwgZGUgY29vbGRvd24pLgogKi8KZnVuY3Rpb24gdm0yX3JlY29yZF9zZW5kKCAkcGhvbmUsICRtb2R1bGUsICRjaGFubmVsX2tleSA9ICcnLCAkY29udGV4dCA9ICcnICkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJGRhdGEgPSBbCiAgICAgICAgJ3Bob25lJyAgICAgICA9PiAoc3RyaW5nKSAkcGhvbmUsCiAgICAgICAgJ21vZHVsZScgICAgICA9PiAoc3RyaW5nKSAkbW9kdWxlLAogICAgICAgICdjaGFubmVsX2tleScgPT4gKHN0cmluZykgJGNoYW5uZWxfa2V5LAogICAgICAgICdzZW50X2F0JyAgICAgPT4gY3VycmVudF90aW1lKCAnbXlzcWwnICksCiAgICBdOwogICAgJGZtdCA9IFsgJyVzJywgJyVzJywgJyVzJywgJyVzJyBdOwogICAgLy8gdjEuNS4xMTc6IGdyYXZhciBjb250ZXh0byBwYXJhIFNvZklBIHVzYXIgbmEgcmVzcG9zdGEgKGNvbHVuYSBwb2RlIG7Do28gZXhpc3RpciBhaW5kYSkKICAgIGlmICggJGNvbnRleHQgKSB7CiAgICAgICAgJGNvbF9leGlzdHMgPSAkd3BkYi0+Z2V0X3ZhcigiU0hPVyBDT0xVTU5TIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzIExJS0UgJ2NvbnRleHQnIik7CiAgICAgICAgaWYgKCAkY29sX2V4aXN0cyApIHsKICAgICAgICAgICAgJGRhdGFbJ2NvbnRleHQnXSA9IChzdHJpbmcpICRjb250ZXh0OwogICAgICAgICAgICAkZm10W10gPSAnJXMnOwogICAgICAgIH0KICAgIH0KICAgICR3cGRiLT5pbnNlcnQoICR3cGRiLT5wcmVmaXggLiAndm0yX3NlbmRzJywgJGRhdGEsICRmbXQgKTsKfQoKLyoqCiAqIFZlcmlmaWNhIHNlIGVzdGUgbsO6bWVybyBwb2RlIHJlY2ViZXIgbWVuc2FnZW0gYWdvcmEuCiAqIEBwYXJhbSBzdHJpbmcgJHBob25lICAgICAgIE7Dum1lcm8gZm9ybWF0YWRvCiAqIEBwYXJhbSBpbnQgICAgJG1pbl9ob3VycyAgIENvb2xkb3duIG3DrW5pbW8gZW0gaG9yYXMgZGVzZGUgbyDDumx0aW1vIGVudmlvIChkZWZhdWx0IDcyKQogKiBAcGFyYW0gaW50ICAgICRtYXhfd2Vla2x5ICBNw6F4IG1zZ3Mgbm9zIMO6bHRpbW9zIDcgZGlhczsgMCA9IHNlbSBsaW1pdGUgKGRlZmF1bHQgMCkKICogUmV0b3JuYSB0cnVlIHNlIFBPREUgZW52aWFyLgogKi8KZnVuY3Rpb24gdm0yX2Nhbl9zZW5kKCAkcGhvbmUsICRtaW5faG91cnMgPSAwLCAkbWF4X3dlZWtseSA9IDAgKSB7CiAgICAvLyBTZSBtaW5faG91cnMgbsOjbyBmb2kgcGFzc2FkbywgdXNhciBjb29sZG93biBnbG9iYWwgZGFzIFNldHRpbmdzCiAgICBpZiAoICRtaW5faG91cnMgPD0gMCApICRtaW5faG91cnMgPSBtYXgoIDEsIChpbnQpIGdldF9vcHRpb24oICd2bTJfY29vbGRvd25faG91cnMnLCAyNCApICk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAvLyBDcml0w6lyaW8gMTogY29vbGRvd24gZGVzZGUgbyDDumx0aW1vIGVudmlvCiAgICAkY250ID0gKGludCkgJHdwZGItPmdldF92YXIoICR3cGRiLT5wcmVwYXJlKAogICAgICAgICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMKICAgICAgICAgV0hFUkUgcGhvbmUgPSAlcyBBTkQgc2VudF9hdCA+PSBEQVRFX1NVQihOT1coKSwgSU5URVJWQUwgJWQgSE9VUikiLAogICAgICAgICRwaG9uZSwgJG1pbl9ob3VycwogICAgKSApOwogICAgaWYgKCAkY250ID4gMCApIHJldHVybiBmYWxzZTsKICAgIC8vIENyaXTDqXJpbyAyOiBsaW1pdGUgc2VtYW5hbCAoc2UgY29uZmlndXJhZG8pCiAgICBpZiAoICRtYXhfd2Vla2x5ID4gMCApIHsKICAgICAgICAkd2Vla2x5ID0gKGludCkgJHdwZGItPmdldF92YXIoICR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzCiAgICAgICAgICAgICBXSEVSRSBwaG9uZSA9ICVzIEFORCBzZW50X2F0ID49IERBVEVfU1VCKE5PVygpLCBJTlRFUlZBTCA3IERBWSkiLAogICAgICAgICAgICAkcGhvbmUKICAgICAgICApICk7CiAgICAgICAgaWYgKCAkd2Vla2x5ID49ICRtYXhfd2Vla2x5ICkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCi8qKgogKiBRdWFudGFzIG1lbnNhZ2VucyBlc3RlIGNhbmFsIGVudmlvdSBob2plIChwYXJhIGNvbnRyb2xlIGRlIGxpbWl0ZSBkacOhcmlvKS4KICovCmZ1bmN0aW9uIHZtMl9jaGFubmVsX3RvZGF5X2NvdW50KCAkY2hhbm5lbF9rZXkgKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICByZXR1cm4gKGludCkgJHdwZGItPmdldF92YXIoICR3cGRiLT5wcmVwYXJlKAogICAgICAgICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMKICAgICAgICAgV0hFUkUgY2hhbm5lbF9rZXkgPSAlcyBBTkQgREFURShzZW50X2F0KSA9IENVUkRBVEUoKSIsCiAgICAgICAgJGNoYW5uZWxfa2V5CiAgICApICk7Cn0KCi8qKgogKiBSZXRvcm5hIG8gY2FuYWwgZG8gcG9vbCBjb20gbWFpcyBjYXBhY2lkYWRlIHJlc3RhbnRlIHBhcmEgaG9qZS4KICogJHByZWZlcnJlZF9rZXkg4oCUIHRlbnRhIHVzYXIgZXN0ZSBjYW5hbCBwcmltZWlybyAoY29uZmlndXJhw6fDo28gZG8gbcOzZHVsbykuCiAqIFJldG9ybmEgbnVsbCBzZSB0b2RvcyBvcyBjYW5haXMgYXRpbmdpcmFtIG8gbGltaXRlIGRpw6FyaW8uCiAqLwovKioKICogUmV0b3JuYSBvIGNhbmFsIGRvIHBvb2wgY29tIG1haXMgY2FwYWNpZGFkZSByZXN0YW50ZSBwYXJhIGhvamUuCiAqICRwcmVmZXJyZWRfa2V5IOKAlCB0ZW50YSB1c2FyIGVzdGUgY2FuYWwgcHJpbWVpcm8gKGNvbmZpZ3VyYcOnw6NvIGRvIG3Ds2R1bG8pLgogKiAkc3RyaWN0ICAgICAgICDigJQgc2UgdHJ1ZSwgbsOjbyBmYXogZmFsbGJhY2sgcGFyYSBvdXRyb3MgY2FuYWlzOyByZXRvcm5hIG51bGwgc2UgcHJlZmVyaWRvIGluZGlzcG9uw612ZWwuCiAqICAgICAgICAgICAgICAgICAgVXNlICRzdHJpY3Q9dHJ1ZSBlbSB0b2RvcyBvcyBydW5uZXJzIGRlIGF1dG9tYcOnw6NvIHBhcmEgbnVuY2EgdmF6YXIgcGFyYSBjYW5hbCBuw6NvIGNvbmZpZ3VyYWRvLgogKiBSZXRvcm5hIG51bGwgc2UgY2FuYWwgbsOjbyBkaXNwb27DrXZlbC4KICovCmZ1bmN0aW9uIHZtMl9nZXRfYmVzdF9jaGFubmVsKCAkcHJlZmVycmVkX2tleSA9IG51bGwsICRzdHJpY3QgPSBmYWxzZSApIHsKICAgICRjaGFubmVscyA9IHZtMl9jaGFubmVscygpOwogICAgaWYgKCBlbXB0eSggJGNoYW5uZWxzICkgKSByZXR1cm4gbnVsbDsKCiAgICAvLyBMaW1pdGUgZGnDoXJpbyB2ZW0gc2VtcHJlIGRlIENvbmZpZ3VyYcOnw7VlcyDihpIgdm0yX2dsb2JhbF9kYWlseV9saW1pdCAoZm9udGUgZGUgdmVyZGFkZSkKICAgIC8vIE8gZGFpbHlfbGltaXQgcG9yIGNhbmFsIMOpIGlnbm9yYWRvIHBhcmEgYSBkZWNpc8OjbyBkZSBmYWxsYmFjawogICAgJGdsb2JhbF9saW1pdCA9IChpbnQpIGdldF9vcHRpb24oICd2bTJfZ2xvYmFsX2RhaWx5X2xpbWl0JywgMTAwICk7CiAgICBpZiAoICRnbG9iYWxfbGltaXQgPD0gMCApICRnbG9iYWxfbGltaXQgPSA5OTk5OTsgLy8gMCA9IHNlbSBsaW1pdGUKCiAgICAvLyBTZSBvIGNhbmFsIHByZWZlcmlkbyBlc3TDoSBBVElWTyBlIG8gY2FwIGdsb2JhbCBuw6NvIGZvaSBhdGluZ2lkbywgdXNhIGVsZQogICAgaWYgKCAkcHJlZmVycmVkX2tleSAmJiBpc3NldCggJGNoYW5uZWxzWyAkcHJlZmVycmVkX2tleSBdICkgKSB7CiAgICAgICAgJGNoX3ByZWYgPSAkY2hhbm5lbHNbICRwcmVmZXJyZWRfa2V5IF07CiAgICAgICAgaWYgKCAoICRjaF9wcmVmWydzdGF0dXMnXSA/PyAnYWN0aXZlJyApICE9PSAncGF1c2VkJyApIHsKICAgICAgICAgICAgaWYgKCB2bTJfY2hhbm5lbF90b2RheV9jb3VudCggJHByZWZlcnJlZF9rZXkgKSA8ICRnbG9iYWxfbGltaXQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHByZWZlcnJlZF9rZXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8gTW9kbyBlc3RyaXRvOiBuw6NvIGZheiBmYWxsYmFjayDigJQgcnVubmVycyBkZSBhdXRvbWHDp8OjbyBudW5jYSB2YXphbSBwYXJhIGNhbmFsIG7Do28gY29uZmlndXJhZG8KICAgIGlmICggJHN0cmljdCApIHJldHVybiBudWxsOwoKICAgIC8vIENhc28gY29udHLDoXJpbywgcm90YWNpb25hIHBhcmEgbyBjYW5hbCBBVElWTyBjb20gbWFpb3IgY2FwYWNpZGFkZSByZXN0YW50ZQogICAgLy8g4o+4IENhbmFpcyBwYXVzYWRvcyBzw6NvIGNvbXBsZXRhbWVudGUgaWdub3JhZG9zIOKAlCBudW5jYSByZWNlYmVtIG92ZXJmbG93CiAgICAkYmVzdCAgICAgICAgICAgPSBudWxsOwogICAgJGJlc3RfcmVtYWluaW5nID0gLTE7CiAgICBmb3JlYWNoICggJGNoYW5uZWxzIGFzICRrZXkgPT4gJGNoICkgewogICAgICAgIGlmICggKCAkY2hbJ3N0YXR1cyddID8/ICdhY3RpdmUnICkgPT09ICdwYXVzZWQnICkgY29udGludWU7IC8vIHB1bGEgcGF1c2Fkb3MKICAgICAgICAkcmVtYWluaW5nID0gJGdsb2JhbF9saW1pdCAtIHZtMl9jaGFubmVsX3RvZGF5X2NvdW50KCAka2V5ICk7CiAgICAgICAgaWYgKCAkcmVtYWluaW5nID4gJGJlc3RfcmVtYWluaW5nICkgewogICAgICAgICAgICAkYmVzdF9yZW1haW5pbmcgPSAkcmVtYWluaW5nOwogICAgICAgICAgICAkYmVzdCAgICAgICAgICAgPSAka2V5OwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkYmVzdF9yZW1haW5pbmcgPiAwID8gJGJlc3QgOiBudWxsOwp9CgovKioKICogR2VyYSBVUkwgcmFzdHJlw6F2ZWwgY29tIFVUTSBwYXJhIG1lbnNhZ2VucyBvdXRib3VuZC4KICogVmFyacOhdmVsIHtsaW5rfSBuYXMgbWVuc2FnZW5zIMOpIHN1YnN0aXR1w61kYSBwb3IgZXN0ZSB2YWxvci4KICovCmZ1bmN0aW9uIHZtMl90cmFja2luZ191cmwoICRwaG9uZSwgJG1vZHVsZSwgJGRlc3QgPSAnJyApIHsKICAgIGlmICggISAkZGVzdCApICRkZXN0ID0gaG9tZV91cmwoICcvJyApOwogICAgcmV0dXJuIGFkZF9xdWVyeV9hcmcoIFsKICAgICAgICAndXRtX3NvdXJjZScgICA9PiAndm0yX3dhJywKICAgICAgICAndXRtX21lZGl1bScgICA9PiAkbW9kdWxlLAogICAgICAgICd1dG1fY2FtcGFpZ24nID0+ICdmb2xsb3d1cCcsCiAgICAgICAgJ3ZtMnQnICAgICAgICAgPT4gc3Vic3RyKCBtZDUoICRwaG9uZSAuICRtb2R1bGUgLiBkYXRlKCAnWW1kJyApICksIDAsIDggKSwKICAgIF0sICRkZXN0ICk7Cn0KCi8vIEhlbHBlcjogYXJyYXkgc2x1ZyA9PiBsYWJlbCBsZWfDrXZlbCBwYXJhIHRvZG9zIG9zIGNhbmFpcyBkbyBwb29sCmZ1bmN0aW9uIHZtMl9jaGFubmVsX2xhYmVscygpIHsKICAgICRtYXAgPSBbXTsKICAgIGZvcmVhY2ggKCB2bTJfY2hhbm5lbHMoKSBhcyAkc2x1ZyA9PiAkY2ggKSB7CiAgICAgICAgJHR5cGUgID0gc3RydG91cHBlciggJGNoWyd0eXBlJ10gPz8gJ3phcGknICk7CiAgICAgICAgJG51bSAgID0gaXNzZXQoICRjaFsnbnVtYmVyJ10gKSA/ICcgwrcgKycgLiBzdWJzdHIoICRjaFsnbnVtYmVyJ10sIC00ICkgOiAnJzsKICAgICAgICAkbWFwWyAkc2x1ZyBdID0gJ1snIC4gJHR5cGUgLiAnXSAnIC4gJGNoWydsYWJlbCddIC4gJG51bTsKICAgIH0KICAgIHJldHVybiAkbWFwOwp9CgovLyBIZWxwZXI6IDxvcHRpb24+IGRpbsOibWljb3MgcGFyYSA8c2VsZWN0PiBkZSBjYW5hbApmdW5jdGlvbiB2bTJfY2hhbm5lbF9vcHRpb25zX2h0bWwoICRzZWxlY3RlZCApIHsKICAgICRodG1sID0gJyc7CiAgICBmb3JlYWNoICggdm0yX2NoYW5uZWxzKCkgYXMgJHNsdWcgPT4gJGNoICkgewogICAgICAgICRzZWwgICA9IHNlbGVjdGVkKCAkc2VsZWN0ZWQsICRzbHVnLCBmYWxzZSApOwogICAgICAgICR0eXBlICA9IHN0cnRvdXBwZXIoICRjaFsndHlwZSddID8/ICd6YXBpJyApOwogICAgICAgICRudW0gICA9IGlzc2V0KCAkY2hbJ251bWJlciddICkgPyAnIMK3ICsnIC4gc3Vic3RyKCAkY2hbJ251bWJlciddLCAtNCApIDogJyc7CiAgICAgICAgJGxhYmVsID0gJ1snIC4gJHR5cGUgLiAnXSAnIC4gJGNoWydsYWJlbCddIC4gJG51bTsKICAgICAgICAkaHRtbCAuPSAnPG9wdGlvbiB2YWx1ZT0iJyAuIGVzY19hdHRyKCAkc2x1ZyApIC4gIlwiIHskc2VsfT4iIC4gZXNjX2h0bWwoICRsYWJlbCApIC4gIjwvb3B0aW9uPlxuIjsKICAgIH0KICAgIHJldHVybiAkaHRtbDsKfQoKLy8gSGVscGVyOiByYWRpbyBidXR0b25zIGRpbsOibWljb3MgcGFyYSBzZWxlw6fDo28gZGUgY2FuYWwKZnVuY3Rpb24gdm0yX2NoYW5uZWxfcmFkaW9faHRtbCggJG5hbWUsICRzZWxlY3RlZCApIHsKICAgICRodG1sID0gJyc7CiAgICBmb3JlYWNoICggdm0yX2NoYW5uZWxzKCkgYXMgJHNsdWcgPT4gJGNoICkgewogICAgICAgICRjaGsgICA9IGNoZWNrZWQoICRzZWxlY3RlZCwgJHNsdWcsIGZhbHNlICk7CiAgICAgICAgJHR5cGUgID0gJGNoWyd0eXBlJ10gPz8gJ3phcGknOwogICAgICAgICRjb2xvciA9ICR0eXBlID09PSAnd2FiYScgPyAnIzA4NjZmZicgOiAnIzI1ZDM2Nic7CiAgICAgICAgJGJhZGdlID0gc3RydG91cHBlciggJHR5cGUgKTsKICAgICAgICAkbnVtICAgPSBpc3NldCggJGNoWydudW1iZXInXSApID8gJyDCtyArJyAuIHN1YnN0ciggJGNoWydudW1iZXInXSwgLTQgKSA6ICcnOwogICAgICAgICRsYWJlbCA9ICRjaFsnbGFiZWwnXSAuICRudW07CiAgICAgICAgJGh0bWwgLj0gJzxsYWJlbCBzdHlsZT0iZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjVweDttYXJnaW4tcmlnaHQ6MTZweDttYXJnaW4tYm90dG9tOjRweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTNweDtmbGV4LXdyYXA6d3JhcCI+JzsKICAgICAgICAkaHRtbCAuPSAnPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSInIC4gZXNjX2F0dHIoICRuYW1lICkgLiAnIiB2YWx1ZT0iJyAuIGVzY19hdHRyKCAkc2x1ZyApIC4gIlwiIHskY2hrfT4iOwogICAgICAgICRodG1sIC49ICc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDonIC4gJGNvbG9yIC4gJztjb2xvcjojZmZmO3BhZGRpbmc6MXB4IDZweDtib3JkZXItcmFkaXVzOjNweDtmb250LXNpemU6MTBweDtmb250LXdlaWdodDpib2xkIj4nIC4gJGJhZGdlIC4gJzwvc3Bhbj4nOwogICAgICAgICRodG1sIC49IGVzY19odG1sKCAkbGFiZWwgKTsKICAgICAgICAkaHRtbCAuPSAiPC9sYWJlbD5cbiI7CiAgICB9CiAgICByZXR1cm4gJGh0bWw7Cn0KCgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gVEVNUExBVEVTIFdBQkEgQVBST1ZBRE9TIChkaW7Dom1pY28g4oCUIGdlcmVuY2nDoXZlbCBlbSBTZXR0aW5ncykKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl93YWJhX3RlbXBsYXRlc19saXN0KCkgewogICAgJGRlZmF1bHRzID0gWwogICAgICAgICcnICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAn4oCUIE5lbmh1bSDigJQnLAogICAgICAgICd2bV9wb3NfamFuZWxhX2QzJyAgICAgICAgICAgICA9PiAndm1fcG9zX2phbmVsYV9kMyDigJQgRCsxIHDDs3MgamFuZWxhJywKICAgICAgICAnNDhoX3dhYmFfNGxvejRxJyAgICAgICAgICAgICAgPT4gJzQ4aF93YWJhXzRsb3o0cSDigJQgRCsxIGFsdGVybmF0aXZvJywKICAgICAgICAnNWRfd2FiYV9nZzkzOWknICAgICAgICAgICAgICAgPT4gJzVkX3dhYmFfZ2c5MzlpIOKAlCBEKzUvNycsCiAgICAgICAgJzE1ZF93YWJhX3Fsd2xlaycgICAgICAgICAgICAgID0+ICcxNWRfd2FiYV9xbHdsZWsg4oCUIEQrMTUnLAogICAgICAgICczMGRfd2FiYV9oMnR1cmgnICAgICAgICAgICAgICA9PiAnMzBkX3dhYmFfaDJ0dXJoIOKAlCBEKzMwJywKICAgICAgICAnY2FydGFvcHJlc2VudGUnICAgICAgICAgICAgICAgPT4gJ2NhcnRhb3ByZXNlbnRlIOKAlCBWYWxlIFByZXNlbnRlJywKICAgICAgICAnb2ZlcnRhX2RlX3JlY29ucXVpc3RhX3Z4dTA4MScgPT4gJ29mZXJ0YV9kZV9yZWNvbnF1aXN0YV92eHUwODEg4oCUIFJlZW5nYWphbWVudG8nLAogICAgICAgICdyZWN1cGVyYV9jYXJyaW5ob193b28nICAgICAgICA9PiAncmVjdXBlcmFfY2FycmluaG9fd29vIOKAlCBXQSBSZWNvdmVyeScsCiAgICAgICAgJ3VyZ2VuY2lhX2V2ZW50b19zZW1hbmEnICAgICAgID0+ICd1cmdlbmNpYV9ldmVudG9fc2VtYW5hIOKAlCBVcmfDqm5jaWEgRXN0YSBTZW1hbmEnLAogICAgICAgICdnaWZ0X2NhcmRfZXZlbnRvX3NlbWFuYScgICAgICA9PiAnZ2lmdF9jYXJkX2V2ZW50b19zZW1hbmEg4oCUIFZhbGUgUHJlc2VudGUgUiQxMDAnLAogICAgXTsKICAgICRjdXN0b20gPSBnZXRfb3B0aW9uKCAndm0yX3dhYmFfdGVtcGxhdGVzJywgW10gKTsKICAgIGlmICggaXNfc3RyaW5nKCAkY3VzdG9tICkgKSAkY3VzdG9tID0ganNvbl9kZWNvZGUoICRjdXN0b20sIHRydWUgKSA/OiBbXTsKICAgIHJldHVybiBhcnJheV9tZXJnZSggJGRlZmF1bHRzLCAkY3VzdG9tICk7Cn0KCi8qKgogKiBNb250YSBjb21wb25lbnRzIFdBQkEgcGFyYSB1bSB0ZW1wbGF0ZSwgYmFzZWFkbyBubyBtYXBhIGRlIHBhcsOibWV0cm9zIGVzcGVyYWRvcy4KICogRm9udGUgZGUgdmVyZGFkZTogTWV0YSBHcmFwaCBBUEkgY29uc3VsdGFkYSAyMDI2LTA2LTE0LgogKgogKiBAcGFyYW0gc3RyaW5nICR0ZW1wbGF0ZSAgTm9tZSBkbyB0ZW1wbGF0ZSBXQUJBLgogKiBAcGFyYW0gc3RyaW5nICRuYW1lICAgICAgTm9tZSBkbyBjb250YXRvIChmYWxsYmFjayAnYW1pZ28nKS4KICogQHBhcmFtIHN0cmluZyAkdXJsICAgICAgIFVSTCBvdSAywrogcGFyYW0gcG9zaWNpb25hbCBwYXJhIHRlbXBsYXRlcyBxdWUgZXhpZ2VtIGxpbmsvZGFkbyBleHRyYS4KICogQHBhcmFtIHN0cmluZyAkZXh0cmEgICAgIDPCuiBwYXJhbSBwb3NpY2lvbmFsIChleDogZGF0YSBkZSB2YWxpZGFkZSBwYXJhIGdpZnRfY2FyZF9ldmVudG9fc2VtYW5hKS4KICogQHJldHVybiBhcnJheSAgQ29tcG9uZW50cyBwcm9udG9zIHBhcmEgdm0yX3NlbmRfd2FiYSgpLgogKi8KZnVuY3Rpb24gdm0yX3dhYmFfdGVtcGxhdGVfY29tcG9uZW50cyggJHRlbXBsYXRlLCAkbmFtZSA9ICdhbWlnbycsICR1cmwgPSAnJywgJGV4dHJhID0gJycgKSB7CiAgICAvLyBNYXBhOiB0ZW1wbGF0ZSDihpIgcXVhbnRpZGFkZSBkZSBib2R5IHBhcmFtcwogICAgJG1hcCA9IFsKICAgICAgICAndm1fcG9zX2phbmVsYV9kMycgICAgICAgICAgICAgPT4gMSwgIC8vIHt7MX19IHBvc2ljaW9uYWwgKyBIRUFERVIgSU1BR0UKICAgICAgICAnZ2FsZXJpYV9hY2Vzc29fY29kaWdvJyAgICAgICAgPT4gMSwgIC8vIHt7MX19ID0gY8OzZGlnbyAobm9tZWFkbykKICAgICAgICAncmVjdXBlcmFfY2FycmluaG9fd29vJyAgICAgICAgPT4gMiwgIC8vIHt7MX19IG5vbWUsIHt7Mn19IFVSTCAobm9tZWFkb3MpCiAgICAgICAgJ3VyZ2VuY2lhX2V2ZW50b19zZW1hbmEnICAgICAgID0+IDEsICAvLyB7ezF9fSBub21lIGFwZW5hcyAoZGF0YSBzdXByaW1pZGEpCiAgICAgICAgJ2dpZnRfY2FyZF9ldmVudG9fc2VtYW5hJyAgICAgID0+IDMsICAvLyB7ezF9fSBub21lLCB7ezJ9fSBjw7NkaWdvIGdpZnQsIHt7M319IHZhbGlkYWRlIChwb3NpY2lvbmFpcykKICAgICAgICAvLyBUb2RvcyBvcyBkZW1haXMgPSAwIHBhcmFtcwogICAgICAgICc0OGhfd2FiYV80bG96NHEnICAgICAgICAgICAgICA9PiAwLAogICAgICAgICc1ZF93YWJhX2dnOTM5aScgICAgICAgICAgICAgICA9PiAwLAogICAgICAgICcxNWRfd2FiYV9xbHdsZWsnICAgICAgICAgICAgICA9PiAwLAogICAgICAgICczMGRfd2FiYV9oMnR1cmgnICAgICAgICAgICAgICA9PiAwLAogICAgICAgICdjYXJ0YW9wcmVzZW50ZScgICAgICAgICAgICAgICA9PiAwLAogICAgICAgICdvZmVydGFfZGVfcmVjb25xdWlzdGFfdnh1MDgxJyA9PiAwLAogICAgICAgICc2MGhfd2FiYV81dmwxbHEnICAgICAgICAgICAgICA9PiAwLAogICAgICAgICcxMGRfd2FiYV90bWU2MHEnICAgICAgICAgICAgICA9PiAwLAogICAgXTsKCiAgICAvLyBUZW1wbGF0ZXMgY29tIEhFQURFUiBJTUFHRTogdGVtcGxhdGUg4oaSIFVSTCBkYSBpbWFnZW0KICAgICRoZWFkZXJfaW1hZ2UgPSBbCiAgICAgICAgJ3ZtX3Bvc19qYW5lbGFfZDMnICAgICAgICA9PiAnaHR0cHM6Ly9sb2phLnZpdmFtYWlzZXZlbnRvcy5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjQvMDEvbG9nby12aXZhbWFpcy5wbmcnLAogICAgICAgICdnaWZ0X2NhcmRfZXZlbnRvX3NlbWFuYScgPT4gJ2h0dHBzOi8vbG9qYS52aXZhbWFpc2V2ZW50b3MuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA2L2dpZnQtY2FyZC12aXZhbWFpcy5wbmcnLAogICAgXTsKCiAgICAvLyBNYXBhIGRlIHBhcmFtZXRlcl9uYW1lIHBvciB0ZW1wbGF0ZSAodmFyacOhdmVpcyBub21lYWRhcykKICAgIC8vIE5VTEwgPSBwb3NpY2lvbmFsIChzZW0gcGFyYW1ldGVyX25hbWUpLCBzdHJpbmcgPSBwYXJhbWV0ZXJfbmFtZSBkbyBib2R5IHBhcmFtIDEKICAgICRuYW1lZF9wYXJhbTEgPSBbCiAgICAgICAgJ2dhbGVyaWFfYWNlc3NvX2NvZGlnbycgPT4gJ2NvZGlnbycsIC8vIHt7Y29kaWdvfX0KICAgICAgICAncmVjdXBlcmFfY2FycmluaG9fd29vJyA9PiAnYm9keV8xJywgLy8ge3tib2R5XzF9fSB7e2JvZHlfMn19CiAgICAgICAgLy8gdm1fcG9zX2phbmVsYV9kMyDDqSBQT1NJQ0lPTkFMICh7ezF9fSkg4oCUIHNlbSBwYXJhbWV0ZXJfbmFtZQogICAgXTsKCiAgICAkY291bnQgICA9ICRtYXBbICR0ZW1wbGF0ZSBdID8/IDA7CiAgICAkcDFfbmFtZSA9ICRuYW1lZF9wYXJhbTFbICR0ZW1wbGF0ZSBdID8/IG51bGw7CiAgICAkaW1nX3VybCA9ICRoZWFkZXJfaW1hZ2VbICR0ZW1wbGF0ZSBdID8/IG51bGw7CgogICAgJGNvbXBvbmVudHMgPSBbXTsKCiAgICAvLyBIZWFkZXIgSU1BR0UgKHF1YW5kbyBhcGxpY8OhdmVsKQogICAgaWYgKCAkaW1nX3VybCApIHsKICAgICAgICAkY29tcG9uZW50c1tdID0gWwogICAgICAgICAgICAndHlwZScgICAgICAgPT4gJ2hlYWRlcicsCiAgICAgICAgICAgICdwYXJhbWV0ZXJzJyA9PiBbIFsgJ3R5cGUnID0+ICdpbWFnZScsICdpbWFnZScgPT4gWyAnbGluaycgPT4gJGltZ191cmwgXSBdIF0sCiAgICAgICAgXTsKICAgIH0KCiAgICAvLyBCb2R5IHBhcmFtcwogICAgaWYgKCAkY291bnQgPiAwICkgewogICAgICAgIGlmICggJHAxX25hbWUgIT09IG51bGwgKSB7CiAgICAgICAgICAgIC8vIFZhcmnDoXZlbCBub21lYWRhCiAgICAgICAgICAgICRwYXJhbXMgPSBbIFsgJ3R5cGUnID0+ICd0ZXh0JywgJ3BhcmFtZXRlcl9uYW1lJyA9PiAkcDFfbmFtZSwgJ3RleHQnID0+ICRuYW1lID86ICdhbWlnbycgXSBdOwogICAgICAgICAgICBpZiAoICRjb3VudCA+PSAyICkgewogICAgICAgICAgICAgICAgJHBhcmFtc1tdID0gWyAndHlwZScgPT4gJ3RleHQnLCAncGFyYW1ldGVyX25hbWUnID0+ICdib2R5XzInLCAndGV4dCcgPT4gJHVybCA/OiBob21lX3VybCgpIF07CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBQb3NpY2lvbmFsOiBzZW0gcGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgJHBhcmFtcyA9IFsgWyAndHlwZScgPT4gJ3RleHQnLCAndGV4dCcgPT4gJG5hbWUgPzogJ2FtaWdvJyBdIF07CiAgICAgICAgICAgIGlmICggJGNvdW50ID49IDIgKSB7CiAgICAgICAgICAgICAgICAkcGFyYW1zW10gPSBbICd0eXBlJyA9PiAndGV4dCcsICd0ZXh0JyA9PiAkdXJsID86IGhvbWVfdXJsKCkgXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRjb3VudCA+PSAzICkgewogICAgICAgICAgICAgICAgJHBhcmFtc1tdID0gWyAndHlwZScgPT4gJ3RleHQnLCAndGV4dCcgPT4gJGV4dHJhID86ICcnIF07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJGNvbXBvbmVudHNbXSA9IFsgJ3R5cGUnID0+ICdib2R5JywgJ3BhcmFtZXRlcnMnID0+ICRwYXJhbXMgXTsKICAgIH0KCiAgICByZXR1cm4gJGNvbXBvbmVudHM7Cn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBbdjEuNS4xNTBdIEdlcmEgY3Vwb20gV0MgcGFyYSBWYWxlIFByZXNlbnRlIEdpZnQgQ2FyZAovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2NyZWF0ZV9naWZ0X2NvdXBvbiggJGNvbnRhY3RfbmFtZSwgJGFtb3VudCA9IDEwMCwgJGRheXMgPSAwICkgewogICAgLy8gJGRheXMgaWdub3JhZG8g4oCUIGNhcnTDo28gcHJlc2VudGUgdsOhbGlkbyBhdMOpIGRvbWluZ28gZGVzdGEgc2VtYW5hIChjYW1wYW5oYSBldmVudG8gbmEgc2VtYW5hKQogICAgJHNsdWcgICA9IHN0cnRvdXBwZXIoIHByZWdfcmVwbGFjZSggJy9bXkEtWmEtel0vJywgJycsIHJlbW92ZV9hY2NlbnRzKCAkY29udGFjdF9uYW1lICkgKSApOwogICAgJHNsdWcgICA9IHN1YnN0ciggJHNsdWcsIDAsIDYgKSA/OiAnR0lGVCc7CiAgICAkc3VmZml4ID0gc3RydG91cHBlciggc3Vic3RyKCBtZDUoICRjb250YWN0X25hbWUgLiBtaWNyb3RpbWUoKSApLCAwLCA0ICkgKTsKICAgICRjb2RlICAgPSAiR0lGVC17JHNsdWd9LXskc3VmZml4fSI7CgogICAgLy8gVmFsaWRhZGU6IGRvbWluZ28gZGVzdGEgc2VtYW5hIDIzOjU5OjU5IChzZSBob2plIMOpIGRvbWluZ28sIGV4cGlyYSBob2plIMOgIG1laWEtbm9pdGUpCiAgICAkbm93ICAgICAgICAgICAgID0gY3VycmVudF90aW1lKCAndGltZXN0YW1wJyApOwogICAgJGRvdyAgICAgICAgICAgICA9IChpbnQpIGRhdGUoICdOJywgJG5vdyApOyAvLyAxPXNlZyDigKYgNz1kb20KICAgICRkYXlzX3RvX3N1bmRheSAgPSA3IC0gJGRvdzsgICAgICAgICAgICAgICAvLyAwIHNlIGhvamUgw6kgZG9taW5nbwogICAgJGV4cGlyeSAgICAgICAgICA9IG1rdGltZSggMjMsIDU5LCA1OSwKICAgICAgICAoaW50KSBkYXRlKCAnbicsICRub3cgKSwKICAgICAgICAoaW50KSBkYXRlKCAnaicsICRub3cgKSArICRkYXlzX3RvX3N1bmRheSwKICAgICAgICAoaW50KSBkYXRlKCAnWScsICRub3cgKQogICAgKTsKCiAgICAvLyBDcmlhciBjYXJ0w6NvIHByZXNlbnRlIFlJVEggKHBvc3QgdHlwZSBnaWZ0X2NhcmQpCiAgICBpZiAoIHBvc3RfdHlwZV9leGlzdHMoICdnaWZ0X2NhcmQnICkgKSB7CiAgICAgICAgJHBvc3RfaWQgPSB3cF9pbnNlcnRfcG9zdCggWwogICAgICAgICAgICAncG9zdF90aXRsZScgID0+ICRjb2RlLAogICAgICAgICAgICAncG9zdF90eXBlJyAgID0+ICdnaWZ0X2NhcmQnLAogICAgICAgICAgICAncG9zdF9zdGF0dXMnID0+ICdwdWJsaXNoJywKICAgICAgICAgICAgJ21ldGFfaW5wdXQnICA9PiBbCiAgICAgICAgICAgICAgICAnX3l3Z2NfYW1vdW50X3RvdGFsJyAgICA9PiAoc3RyaW5nKSAkYW1vdW50LAogICAgICAgICAgICAgICAgJ195d2djX2JhbGFuY2VfdG90YWwnICAgPT4gKHN0cmluZykgJGFtb3VudCwKICAgICAgICAgICAgICAgICdfeXdnY19leHBpcmF0aW9uX2RhdGUnID0+IChzdHJpbmcpICRleHBpcnksCiAgICAgICAgICAgICAgICAnX3l3Z2NfaXNfZGlnaXRhbCcgICAgICA9PiAnMCcsCiAgICAgICAgICAgIF0sCiAgICAgICAgXSApOwoKICAgICAgICBpZiAoICEgaXNfd3BfZXJyb3IoICRwb3N0X2lkICkgJiYgJHBvc3RfaWQgKSB7CiAgICAgICAgICAgIHZtMl9sb2coICJ2bTJfY3JlYXRlX2dpZnRfY291cG9uOiBZSVRIIGdpZnQgY2FyZCB7JGNvZGV9IHBhcmEgeyRjb250YWN0X25hbWV9IChSXCR7JGFtb3VudH0sIGV4cGlyYSAiIC4gZGF0ZSggJ2QvbS9ZJywgJGV4cGlyeSApIC4gJyknLCAnaW5mbycgKTsKICAgICAgICAgICAgcmV0dXJuICRjb2RlOwogICAgICAgIH0KICAgICAgICB2bTJfbG9nKCAidm0yX2NyZWF0ZV9naWZ0X2NvdXBvbjogd3BfaW5zZXJ0X3Bvc3QgZmFsaG91IHBhcmEgeyRjb250YWN0X25hbWV9IiwgJ2Vycm9yJyApOwogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICAvLyBGYWxsYmFjazogY3Vwb20gV0MgKGNhc28gWUlUSCBuw6NvIGVzdGVqYSBhdGl2bykKICAgIGlmICggISBmdW5jdGlvbl9leGlzdHMoICdXQycgKSApIHJldHVybiAnJzsKICAgICRjb3Vwb24gPSBuZXcgXFdDX0NvdXBvbigpOwogICAgJGNvdXBvbi0+c2V0X2NvZGUoICRjb2RlICk7CiAgICAkY291cG9uLT5zZXRfZGlzY291bnRfdHlwZSggJ2ZpeGVkX2NhcnQnICk7CiAgICAkY291cG9uLT5zZXRfYW1vdW50KCAkYW1vdW50ICk7CiAgICAkY291cG9uLT5zZXRfdXNhZ2VfbGltaXQoIDEgKTsKICAgICRjb3Vwb24tPnNldF9pbmRpdmlkdWFsX3VzZSggZmFsc2UgKTsKICAgICRjb3Vwb24tPnNldF9kYXRlX2V4cGlyZXMoICRleHBpcnkgKTsKICAgICRjb3Vwb24tPnNldF9kZXNjcmlwdGlvbiggIlZhbGUgUHJlc2VudGUgVml2YU1haXMgUlwkeyRhbW91bnR9IOKAlCB7JGNvbnRhY3RfbmFtZX0iICk7CiAgICAkY291cG9uLT5zYXZlKCk7CiAgICB2bTJfbG9nKCAidm0yX2NyZWF0ZV9naWZ0X2NvdXBvbjogV0MgY291cG9uIGZhbGxiYWNrIHskY29kZX0gcGFyYSB7JGNvbnRhY3RfbmFtZX0iLCAnaW5mbycgKTsKICAgIHJldHVybiAkY29kZTsKfQoKZnVuY3Rpb24gdm0yX3dhYmFfdGVtcGxhdGVfb3B0aW9uc19odG1sKCAkc2VsZWN0ZWQgPSAnJyApIHsKICAgICRodG1sID0gJyc7CiAgICBmb3JlYWNoICggdm0yX3dhYmFfdGVtcGxhdGVzX2xpc3QoKSBhcyAkdHYgPT4gJHRsICkgewogICAgICAgICRzZWwgICA9IHNlbGVjdGVkKCAkc2VsZWN0ZWQsICR0diwgZmFsc2UgKTsKICAgICAgICAkaHRtbCAuPSBzcHJpbnRmKCAnPG9wdGlvbiB2YWx1ZT0iJXMiJXM+JXM8L29wdGlvbj4nLCBlc2NfYXR0ciggJHR2ICksICRzZWwsIGVzY19odG1sKCAkdGwgKSApOwogICAgfQogICAgcmV0dXJuICRodG1sOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gTUVOU0FHRU5TIFBBRFLDg08KLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9kZWZhdWx0X21zZ192ZW5kYXMoKSB7CiAgICByZXR1cm4gIvCfkrAgKk5PVk8gUEVESURPIE5SIHtudW1lcm99KlxuIgogICAgICAgICAuICLinIUgUHJvY2Vzc2FuZG8g4oCUIFBhZ29cbiIKICAgICAgICAgLiAi8J+RpCB7bm9tZX1cbiIKICAgICAgICAgLiAi8J+TsSAre3RlbGVmb25lfVxuIgogICAgICAgICAuICLwn5OFIEV2ZW50bzoge2RhdGFfZXZlbnRvfVxuIgogICAgICAgICAuICLwn46qIHthdHJhY2FvfVxuIgogICAgICAgICAuICLwn5KzIFBndG86IHtwZ3RvfVxuIgogICAgICAgICAuICLwn5K1IFJcJCB7dmFsb3J9XG4iCiAgICAgICAgIC4gIvCfk40gT3JpZ2VtOiB7dXRtX3NvdXJjZX0gLyB7dXRtX2NhbXBhaWdufVxuIgogICAgICAgICAuICLwn5SXIHtsaW5rX2FkbWlufSI7Cn0KCmZ1bmN0aW9uIHZtMl9kZWZhdWx0X21zZ19hZ2VuZGEoKSB7CiAgICByZXR1cm4gIvCfk4sgKkZJQ0hBIERPIEVWRU5UTyDigJQgUEVESURPICN7bnVtZXJvfSpcblxuIgogICAgICAgICAuICJEQVRBIERPIEVWRU5UTzoge2RhdGFfZXZlbnRvfVxuXG4iCiAgICAgICAgIC4gIlRpcG8gRXZlbnRvOiB7dGlwb19ldmVudG99XG4iCiAgICAgICAgIC4gIkhvbWVuYWdlYWRvKHMpOiB7aG9tZW5hZ2VhZG99XG4iCiAgICAgICAgIC4gIkxvY2FsIGRvIEV2ZW50bzoge2xvY2FsX2V2ZW50b31cbiIKICAgICAgICAgLiAiRW5kZXJlw6dvIGRvIEV2ZW50bzoge2VuZGVyZWNvfVxuXG4iCiAgICAgICAgIC4gIkVWRU5UTyBJTsONQ0lPOiB7aG9yYV9pbmljaW99XG4iCiAgICAgICAgIC4gIkVWRU5UTyBUw4lSTUlOTzoge2hvcmFfdGVybWlub31cblxuIgogICAgICAgICAuICLinIUgKlNlcnZpw6dvcyBWaXZhTWFpcypcbiIKICAgICAgICAgLiAiQVRSQcOHw4NPOiB7YXRyYWNhb31cbiIKICAgICAgICAgLiAiRFVSQcOHw4NPOiB7ZHVyYWNhb30gbWluXG4iCiAgICAgICAgIC4gIkhPUkEgRU5UUkFEQToge2hvcmFfZW50cmFkYX1cbiIKICAgICAgICAgLiAiSE9SQSBTQcONREE6IHtob3JhX3NhaWRhfVxuXG4iCiAgICAgICAgIC4gIkFzc2Vzc29yOiB7YXNzZXNzb3J9XG4iCiAgICAgICAgIC4gIk9ic2VydmHDp8O1ZXM6IHtvYnN9XG5cbiIKICAgICAgICAgLiAi8J+TnSBDb250cmF0bzoge2NvbnRyYXRvfSI7Cn0KCmZ1bmN0aW9uIHZtMl9kZWZhdWx0X21zZ19jbGllbnRlKCkgewogICAgcmV0dXJuICJPbMOhLCB7bm9tZX0hIPCfjolcblxuIgogICAgICAgICAuICJTZXUgcGVkaWRvICN7bnVtZXJvfSBmb2kgY29uZmlybWFkbyFcbiIKICAgICAgICAgLiAiRGF0YSBkbyBzZXUgZXZlbnRvOiB7ZGF0YV9ldmVudG99XG5cbiIKICAgICAgICAgLiAiUXVhbHF1ZXIgZMO6dmlkYSwgZXN0YW1vcyBhcXVpIPCfmIpcbiIKICAgICAgICAgLiAiaHR0cHM6Ly93YS5tZS81NTExOTQ3NzcxODg2IjsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEFUSVZBw4fDg08KLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACnJlZ2lzdGVyX2FjdGl2YXRpb25faG9vayggX19GSUxFX18sICd2bTJfYWN0aXZhdGUnICk7CgovLyBNaWdyYXRpb24gdjEuNS4xNCDigJQgcGF0Y2ggbnVsbCBjb3Vwb25fY29kZSBpbiBhY3RpdmUgZGlzY291bnRzIChmaXg6IGNvbHVuYSDDqSBkaXNjb3VudF9wZXJjZW50KQphZGRfYWN0aW9uKCdwbHVnaW5zX2xvYWRlZCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKCBnZXRfb3B0aW9uKCd2bTJfbWlncmF0ZWRfY291cG9uX2NvZGVfdjE1MTQnKSApIHJldHVybjsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0YmwgPSAnd3pfYWN0aXZlX2Rpc2NvdW50cyc7CiAgICBpZiAoICR3cGRiLT5nZXRfdmFyKCJTSE9XIFRBQkxFUyBMSUtFICd7JHRibH0nIikgIT09ICR0YmwgKSB7CiAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX21pZ3JhdGVkX2NvdXBvbl9jb2RlX3YxNTE0JywgMSk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgJHJvdyA9ICR3cGRiLT5nZXRfcm93KCJTRUxFQ1QgKiBGUk9NIHskdGJsfSBXSEVSRSByZXZlcnRlZF9hdCBJUyBOVUxMIEFORCAoY291cG9uX2NvZGUgSVMgTlVMTCBPUiBjb3Vwb25fY29kZT0nJykgT1JERVIgQlkgaWQgREVTQyBMSU1JVCAxIik7CiAgICBpZiAoICRyb3cgKSB7CiAgICAgICAgLy8gQ29sdW5hIHBvZGUgc2VyIGRpc2NvdW50X3BlcmNlbnQgb3UgZGlzY291bnQgZGVwZW5kZW5kbyBkYSB2ZXJzw6NvIGRvIHBsdWdpbgogICAgICAgICRkaXNjb3VudCA9IGludHZhbCggJHJvdy0+ZGlzY291bnRfcGVyY2VudCA/PyAkcm93LT5kaXNjb3VudCA/PyAwICk7CiAgICAgICAgaWYgKCAkZGlzY291bnQgPiAwICkgewogICAgICAgICAgICAkY291cG9uX2NvZGUgPSBzdHJ0b3VwcGVyKCdQUk9NTycgLiAkZGlzY291bnQgLiAnT0ZGJyk7CiAgICAgICAgICAgIC8vIENyaWEgY3Vwb20gV29vQ29tbWVyY2Ugc2UgbsOjbyBleGlzdGlyCiAgICAgICAgICAgICRleGlzdGluZyA9IGdldF9wYWdlX2J5X3RpdGxlKCRjb3Vwb25fY29kZSwgT0JKRUNULCAnc2hvcF9jb3Vwb24nKTsKICAgICAgICAgICAgaWYgKCAhJGV4aXN0aW5nICkgewogICAgICAgICAgICAgICAgJGNvdXBvbl9pZCA9IHdwX2luc2VydF9wb3N0KFsncG9zdF90aXRsZSc9PiRjb3Vwb25fY29kZSwncG9zdF9zdGF0dXMnPT4ncHVibGlzaCcsJ3Bvc3RfdHlwZSc9PidzaG9wX2NvdXBvbiddKTsKICAgICAgICAgICAgICAgIGlmICggJGNvdXBvbl9pZCAmJiAhaXNfd3BfZXJyb3IoJGNvdXBvbl9pZCkgKSB7CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSgkY291cG9uX2lkLCAnZGlzY291bnRfdHlwZScsICdwZXJjZW50Jyk7CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSgkY291cG9uX2lkLCAnY291cG9uX2Ftb3VudCcsICRkaXNjb3VudCk7CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSgkY291cG9uX2lkLCAnaW5kaXZpZHVhbF91c2UnLCAnbm8nKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICFlbXB0eSgkcm93LT5leHBpcmVzX2F0KSAmJiAkcm93LT5leHBpcmVzX2F0ICE9PSAnMDAwMC0wMC0wMCAwMDowMDowMCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoJGNvdXBvbl9pZCwgJ2V4cGlyeV9kYXRlJywgZGF0ZSgnWS1tLWQnLCBzdHJ0b3RpbWUoJHJvdy0+ZXhwaXJlc19hdCkpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gU2FsdmEgY291cG9uX2NvZGUgbm8gcmVnaXN0cm8KICAgICAgICAgICAgJHdwZGItPnVwZGF0ZSgkdGJsLCBbJ2NvdXBvbl9jb2RlJyA9PiAkY291cG9uX2NvZGVdLCBbJ2lkJyA9PiAkcm93LT5pZF0pOwogICAgICAgIH0KICAgIH0KICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9taWdyYXRlZF9jb3Vwb25fY29kZV92MTUxNCcsIDEpOwp9LCAyMCk7CmZ1bmN0aW9uIHZtMl9hY3RpdmF0ZSgpIHsKICAgICRkZWZhdWx0cyA9IFsKICAgICAgICAndm0yX2tpbGxfc3dpdGNoJyAgICAgICAgICAgICAgPT4gJzAnLAogICAgICAgICd2bTJfcGVkaWRvc192ZW5kYXNfZW5hYmxlZCcgICA9PiAnMScsCiAgICAgICAgJ3ZtMl9wZWRpZG9zX3ZlbmRhc19jaGFubmVsJyAgID0+ICd6YXBpXzc1NTEnLAogICAgICAgICd2bTJfcGVkaWRvc192ZW5kYXNfZ3JvdXBfaWQnICA9PiAnMTIwMzYzNDI1Nzg1MzU4NzY0LWdyb3VwJywKICAgICAgICAndm0yX3BlZGlkb3NfdmVuZGFzX21zZycgICAgICAgPT4gdm0yX2RlZmF1bHRfbXNnX3ZlbmRhcygpLAogICAgICAgICd2bTJfcGVkaWRvc19hZ2VuZGFfZW5hYmxlZCcgICA9PiAnMScsCiAgICAgICAgJ3ZtMl9wZWRpZG9zX2FnZW5kYV9jaGFubmVsJyAgID0+ICd6YXBpXzc1NTEnLAogICAgICAgICd2bTJfcGVkaWRvc19hZ2VuZGFfZ3JvdXBfaWQnICA9PiAnMTIwMzYzNDE5MTgwMjE0NDgxLWdyb3VwJywKICAgICAgICAndm0yX3BlZGlkb3NfYWdlbmRhX21zZycgICAgICAgPT4gdm0yX2RlZmF1bHRfbXNnX2FnZW5kYSgpLAogICAgICAgICd2bTJfcGVkaWRvc19jbGllbnRlX2VuYWJsZWQnICA9PiAnMCcsCiAgICAgICAgJ3ZtMl9wZWRpZG9zX2NsaWVudGVfY2hhbm5lbCcgID0+ICd6YXBpXzE4ODYnLAogICAgICAgICd2bTJfcGVkaWRvc19jbGllbnRlX21zZycgICAgICA9PiB2bTJfZGVmYXVsdF9tc2dfY2xpZW50ZSgpLAogICAgXTsKICAgIGZvcmVhY2ggKCAkZGVmYXVsdHMgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgIGlmICggZ2V0X29wdGlvbiggJGtleSApID09PSBmYWxzZSApIHsKICAgICAgICAgICAgYWRkX29wdGlvbiggJGtleSwgJHZhbCApOwogICAgICAgIH0KICAgIH0KICAgIHZtMl9jcmVhdGVfcGFydG5lcl90YWJsZXMoKTsKICAgIHZtMl9jcmVhdGVfc2VuZHNfdGFibGUoKTsKICAgIHZtMl9jcmVhdGVfc29maWFfdGFibGUoKTsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIE1FTlVTCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAphZGRfYWN0aW9uKCAnYWRtaW5fbWVudScsICd2bTJfcmVnaXN0ZXJfbWVudXMnICk7CmZ1bmN0aW9uIHZtMl9yZWdpc3Rlcl9tZW51cygpIHsKICAgIGFkZF9tZW51X3BhZ2UoCiAgICAgICAgJ1ZpdmFNYWlzIDIuMCcsCiAgICAgICAgJ/CfjJ8gVklWQU1BSVMgMi4wJywKICAgICAgICAnbWFuYWdlX29wdGlvbnMnLAogICAgICAgICd2bTItY3JtJywKICAgICAgICAndm0yX2Rhc2hib2FyZF9wYWdlJywKICAgICAgICAnZGFzaGljb25zLXN0YXItZmlsbGVkJywKICAgICAgICAzCiAgICApOwogICAgYWRkX3N1Ym1lbnVfcGFnZSggJ3ZtMi1jcm0nLCAnRGFzaGJvYXJkJywgICAgICAgICAgICAgICdEYXNoYm9hcmQnLCAgICAgICAgICdtYW5hZ2Vfb3B0aW9ucycsICd2bTItY3JtJywgICAgICAndm0yX2Rhc2hib2FyZF9wYWdlJyApOwogICAgYWRkX3N1Ym1lbnVfcGFnZSggJ3ZtMi1jcm0nLCAnQ29udGF0b3MnLCAgICAgICAgICAgICAgICfwn5GlIENvbnRhdG9zJywgICAgICAgJ21hbmFnZV9vcHRpb25zJywgJ3ZtMi1jb250YWN0cycsICd2bTJfY29udGFjdHNfcGFnZScgKTsKICAgIGFkZF9zdWJtZW51X3BhZ2UoICd2bTItY3JtJywgJ0FnZW5kYScsICAgICAgICAgICAgICAgICAgJ/Cfk4UgQWdlbmRhJywgICAgICAgICAnbWFuYWdlX29wdGlvbnMnLCAndm0yLWFnZW5kYScsICAgJ3ZtMl9hZ2VuZGFfcGFnZScgKTsKICAgIGFkZF9zdWJtZW51X3BhZ2UoICd2bTItY3JtJywgJ0F1dG9tYcOnw7VlcycsICAgICAgICAgICAgICAn8J+kliBBdXRvbWHDp8O1ZXMnLCAgICAgJ21hbmFnZV9vcHRpb25zJywgJ3ZtMi1hdXRvbWFjb2VzJywgJ3ZtMl9hdXRvbWFjb2VzX3BhZ2UnICk7CiAgICBhZGRfc3VibWVudV9wYWdlKCAndm0yLWNybScsICdQYXJjZWlyb3MnLCAgICAgICAgICAgICfwn46tIFBhcmNlaXJvcycsICAgICAgJ21hbmFnZV9vcHRpb25zJywgJ3ZtMi1wYXJjZWlyb3MnLCd2bTJfcGFyY2Vpcm9zX3BhZ2UnICk7CiAgICBhZGRfc3VibWVudV9wYWdlKCAndm0yLWNybScsICdGaW5hbmNlaXJvJywgICAgICAgICAgICAn8J+SsCBGaW5hbmNlaXJvJywgICAgICdtYW5hZ2Vfb3B0aW9ucycsICd2bTItZmluYW5jZWlybycsJ3ZtMl9maW5hbmNlaXJvX3BhZ2UnICk7CiAgICBhZGRfc3VibWVudV9wYWdlKCAndm0yLWNybScsICdOb3RpZmljYcOnw6NvIGRlIFBlZGlkb3MnLCAn8J+bkiBQZWRpZG9zJywgICAgICAgICdtYW5hZ2Vfb3B0aW9ucycsICd2bTItcGVkaWRvcycsICAndm0yX3BlZGlkb3NfcGFnZScgKTsKICAgIGFkZF9zdWJtZW51X3BhZ2UoICd2bTItY3JtJywgJ0dydXBvIFByb21vJywgICAgICAgICAgICAn8J+SrCBHcnVwbyBQcm9tbycsICAgICdtYW5hZ2Vfb3B0aW9ucycsICd2bTItZ3J1cG8tcHJvbW8nLCAndm0yX2dydXBvX3Byb21vX3BhZ2UnICk7CiAgICBhZGRfc3VibWVudV9wYWdlKCAndm0yLWNybScsICdQcm9tb3MgRGFzaGJvYXJkJywgICAgICAgJ/Cfk4ogUHJvbW9zJywgICAgICAgICAnbWFuYWdlX29wdGlvbnMnLCAndm0yLXByb21vcycsICAgICAgICAndm0yX3Byb21vc19wYWdlJyApOwogICAgYWRkX3N1Ym1lbnVfcGFnZSggJ3ZtMi1jcm0nLCAnQmFycmFzIFByb21vY2lvbmFpcycsICAgICfwn5OjIEJhcnJhcycsICAgICAgICAgJ21hbmFnZV9vcHRpb25zJywgJ3ZtMi1iYXJyYXMnLCAgICAgICAgJ3ZtMl9iYXJyYXNfcGFnZScgKTsKICAgIC8vIEJhbm5lciBQcm9tbyDihpIgYWJhIGNvbmZpZyBkZW50cm8gZGUgdm0yLXByb21vcyAoc2VtIG1lbnUgc2VwYXJhZG8pCiAgICBhZGRfc3VibWVudV9wYWdlKCAndm0yLWNybScsICdHYXRpbGhvcyBWaXN1YWlzJywgICAgICAgJ+KcqCBHYXRpbGhvcyBWaXN1YWlzJywgJ21hbmFnZV9vcHRpb25zJywgJ3ZtMi1nYXRpbGhvcycsICAgICd2bTJfZ2F0aWxob3NfcGFnZScgKTsKICAgIGFkZF9zdWJtZW51X3BhZ2UoICd2bTItY3JtJywgJ1NvZklBIEludGVsbGlnZW5jZScsICAgICAn8J+noCBTb2ZJQScsICAgICAgICAgICdtYW5hZ2Vfb3B0aW9ucycsICd2bTItc29maWEnLCAgICAgICAgICd2bTJfc29maWFfcGFnZScgKTsKICAgIGFkZF9zdWJtZW51X3BhZ2UoICd2bTItY3JtJywgJ0NvbmZpZ3VyYcOnw7VlcyBWMicsICAgICAgICfimpnvuI8gQ29uZmlndXJhw6fDtWVzJywgICdtYW5hZ2Vfb3B0aW9ucycsICd2bTItc2V0dGluZ3MnLCAgICAgICd2bTJfc2V0dGluZ3NfcGFnZScgKTsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIE1PQklMRS1GSVJTVCBHTE9CQUwgQ1NTIChhZG1pbl9oZWFkKQovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbignYWRtaW5faGVhZCcsIGZ1bmN0aW9uKCkgewogICAgJHNjcmVlbiA9IGdldF9jdXJyZW50X3NjcmVlbigpOwogICAgaWYgKCEkc2NyZWVuIHx8IHN0cnBvcygkc2NyZWVuLT5pZCwgJ3ZtMicpID09PSBmYWxzZSkgcmV0dXJuOwogICAgPz4KICAgIDxzdHlsZSBpZD0idm0yLW1vYmlsZS1nbG9iYWwiPgogICAgLyog4pSA4pSAIFZNMiBtb2JpbGUtZmlyc3QgZ2xvYmFsIG92ZXJyaWRlcyDilIDilIAgKi8KICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIC8qIFRvZG9zIG9zIGdyaWRzIDItY29sIOKGkiAxIGNvbCBubyBtb2JpbGUgKi8KICAgICAgICAudm0yLWRldGFpbC1ncmlkLAogICAgICAgIC52bTItc3RlcC1ncmlkLAogICAgICAgIC52bTItZm9ybS1yb3csCiAgICAgICAgLnZtMi1jZmctMmNvbCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyICFpbXBvcnRhbnQ7IH0KCiAgICAgICAgLyogS1BJIGNhcmRzOiBtw61uaW1vIGRlIDE0MHB4IG5vIG1vYmlsZSAqLwogICAgICAgIC52bTIta3BpcyB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LG1pbm1heCgxNDBweCwxZnIpKSAhaW1wb3J0YW50OyB9CgogICAgICAgIC8qIENhcmRzOiBzZW0gcGFkZGluZyBleGNlc3Npdm8gKi8KICAgICAgICAudm0yLWNhcmQgeyBwYWRkaW5nOiAxMnB4ICFpbXBvcnRhbnQ7IH0KCiAgICAgICAgLyogVGFiczogd3JhcCBtZWxob3IgKi8KICAgICAgICAudm0yLXRhYnMgeyBnYXA6IDRweCAhaW1wb3J0YW50OyB9CiAgICAgICAgLnZtMi10YWIgeyBwYWRkaW5nOiA2cHggMTBweCAhaW1wb3J0YW50OyBmb250LXNpemU6IDEycHggIWltcG9ydGFudDsgfQoKICAgICAgICAvKiBUYWJlbGFzOiBzZW1wcmUgY29tIHNjcm9sbCBob3Jpem9udGFsICovCiAgICAgICAgLnZtMi1jYXJkID4gZGl2W3N0eWxlKj0ib3ZlcmZsb3cteCJdIHsgb3ZlcmZsb3cteDogYXV0byAhaW1wb3J0YW50OyAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7IH0KCiAgICAgICAgLyogQm90w7VlcyBlbSBsaW5oYTogd3JhcCAqLwogICAgICAgIC52bTItYWN0aW9ucywgLmJ1dHRvbi1ncm91cCB7IGZsZXgtd3JhcDogd3JhcCAhaW1wb3J0YW50OyBnYXA6IDRweCAhaW1wb3J0YW50OyB9CgogICAgICAgIC8qIElucHV0cyBmdWxsLXdpZHRoIG5vIG1vYmlsZSAqLwogICAgICAgIC52bTItY2ZnLTJjb2wgaW5wdXRbdHlwZT0ibnVtYmVyIl0geyB3aWR0aDogODBweDsgfQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6IDc4MnB4KSB7CiAgICAgICAgLyogU2lkZWJhciBXUCBjb2xsYXBzZWQgbm8gbW9iaWxlIOKAlCBtYWlzIGVzcGHDp28gcGFyYSBjb250ZcO6ZG8gKi8KICAgICAgICAjd3Bjb250ZW50IHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsgfQogICAgfQogICAgPC9zdHlsZT4KICAgIDw/cGhwCn0pOwoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFdQX0hFQUQg4oCUIEJBUlJBUyBQUk9NT0NJT05BSVMgS0lMTCBTV0lUQ0ggKHYxLjUuMzUpCi8vIEh1YiBwb2RlIHNlciBhdXRvLWF0dWFsaXphZG8gcmVtb3ZlbmRvIG8gZ3VhcmQg4oCUIGVzdGUgaG9vawovLyBnYXJhbnRlIHF1ZSBhcyBiYXJyYXMgZmljYW0gb2N1bHRhcyBxdWFuZG8gcGF1c2FkYXMgbm8gYWRtaW4gVjIuCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAphZGRfYWN0aW9uKCd3cF9oZWFkJywgZnVuY3Rpb24oKSB7CiAgICAkY291cG9uX29uICAgICAgPSAoaW50KSBnZXRfb3B0aW9uKCd2bWh1Yl9jb3Vwb25fYmFyX2VuYWJsZWQnLCAgICAgICAgMSk7CiAgICAkdmlyYWxfb24gICAgICAgPSAoaW50KSBnZXRfb3B0aW9uKCd2bWh1Yl92aXJhbF9iYXJfZW5hYmxlZCcsICAgICAgICAgMSk7CiAgICAkZGlzY291bnRfb24gICAgPSAoaW50KSBnZXRfb3B0aW9uKCd2bTJfc3BfZGlzY291bnRfYmFkZ2VfZW5hYmxlZCcsICAgMSk7CiAgICAkc3RpY2t5X2N0YV9vbiAgPSAoaW50KSBnZXRfb3B0aW9uKCd2bTJfc3RpY2t5X2N0YV9lbmFibGVkJywgICAgICAgICAgMCk7IC8vIEJhcnJhIFZFUiBEQVRBUyDigJQgcGFkcsOjbzogZGVzYXRpdmFkYQogICAgaWYgKCRjb3Vwb25fb24gJiYgJHZpcmFsX29uICYmICRkaXNjb3VudF9vbiAmJiAkc3RpY2t5X2N0YV9vbikgcmV0dXJuOyAvLyB0dWRvIGF0aXZvIOKAlCBuYWRhIGEgZmF6ZXIKICAgICRjc3MgPSAnJzsKICAgIGlmICghJGNvdXBvbl9vbikgICAgICRjc3MgLj0gJy52bWh1Yi1jb3Vwb24tYmFye2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnQ7fSc7CiAgICBpZiAoISR2aXJhbF9vbikgICAgICAkY3NzIC49ICcjdm1odWItdmlyYWwtYmFyLC52bWh1Yi12aXJhbC1iYXJ7ZGlzcGxheTpub25lIWltcG9ydGFudDt9JzsKICAgIGlmICghJGRpc2NvdW50X29uKSAgICRjc3MgLj0gJy52bWFwLWJhZGdlLC52bWFwLWRle2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnQ7fSc7CiAgICBpZiAoISRzdGlja3lfY3RhX29uKSAkY3NzIC49ICcjdm0tc3RpY2t5LXByb2R1Y3QtY3Rhe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnQ7fSc7CiAgICBlY2hvICc8c3R5bGUgaWQ9InZtMi1iYXJyYXMtb3ZlcnJpZGUiPicgLiAkY3NzIC4gJzwvc3R5bGU+JyAuICJcbiI7Cn0sIDk5KTsgLy8gcHJpb3JpdHkgOTkg4oCUIGRlcG9pcyBkbyBIdWIKCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBEQVNIQk9BUkQKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9kYXNoYm9hcmRfcGFnZSgpIHsKICAgIGdsb2JhbCAkd3BkYjsKCiAgICAka3MgPSBnZXRfb3B0aW9uKCAndm0yX2tpbGxfc3dpdGNoJywgJzAnICk7CgogICAgLy8g4pSA4pSAIFBlcmlvZCBzZWxlY3RvciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgICRwZXJpb2QgID0gaXNzZXQoICRfR0VUWydwZXJpb2QnXSApID8gc2FuaXRpemVfdGV4dF9maWVsZCggJF9HRVRbJ3BlcmlvZCddICkgOiAnbW9udGgnOwogICAgJHBlcmlvZHMgPSBbCiAgICAgICAgJ21vbnRoJyAgICAgPT4gJ03DqnMgQXR1YWwnLAogICAgICAgICdsYXN0bW9udGgnID0+ICdNw6pzIEFudGVyaW9yJywKICAgICAgICAneWVhcicgICAgICA9PiBkYXRlKCAnWScgKSwKICAgICAgICAnYWxsJyAgICAgICA9PiAnQWN1bXVsYWRvIFRvdGFsJywKICAgIF07CgogICAgc3dpdGNoICggJHBlcmlvZCApIHsKICAgICAgICBjYXNlICdsYXN0bW9udGgnOgogICAgICAgICAgICAkc3RhcnQgICAgICA9IGRhdGUoICdZLW0tMDEnLCBzdHJ0b3RpbWUoICdmaXJzdCBkYXkgb2YgbGFzdCBtb250aCcgKSApOwogICAgICAgICAgICAkZW5kICAgICAgICA9IGRhdGUoICdZLW0tdCcsICBzdHJ0b3RpbWUoICdsYXN0IGRheSBvZiBsYXN0IG1vbnRoJyApICk7CiAgICAgICAgICAgICRzdGFydF9wcmV2ID0gZGF0ZSggJ1ktbS0wMScsIHN0cnRvdGltZSggJ2ZpcnN0IGRheSBvZiAyIG1vbnRocyBhZ28nICkgKTsKICAgICAgICAgICAgJGVuZF9wcmV2ICAgPSBkYXRlKCAnWS1tLXQnLCAgc3RydG90aW1lKCAnbGFzdCBkYXkgb2YgMiBtb250aHMgYWdvJyApICk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3llYXInOgogICAgICAgICAgICAkc3RhcnQgICAgICA9IGRhdGUoICdZLTAxLTAxJyApOwogICAgICAgICAgICAkZW5kICAgICAgICA9IGRhdGUoICdZLTEyLTMxJyApOwogICAgICAgICAgICAkc3RhcnRfcHJldiA9IGRhdGUoICdZLTAxLTAxJywgc3RydG90aW1lKCAnLTEgeWVhcicgKSApOwogICAgICAgICAgICAkZW5kX3ByZXYgICA9IGRhdGUoICdZLTEyLTMxJywgc3RydG90aW1lKCAnLTEgeWVhcicgKSApOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdhbGwnOgogICAgICAgICAgICAkc3RhcnQgICAgICA9ICcyMDIwLTAxLTAxJzsKICAgICAgICAgICAgJGVuZCAgICAgICAgPSBkYXRlKCAnWS0xMi0zMScgKTsKICAgICAgICAgICAgJHN0YXJ0X3ByZXYgPSBudWxsOwogICAgICAgICAgICAkZW5kX3ByZXYgICA9IG51bGw7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6IC8vIG1vbnRoCiAgICAgICAgICAgICRzdGFydCAgICAgID0gZGF0ZSggJ1ktbS0wMScgKTsKICAgICAgICAgICAgJGVuZCAgICAgICAgPSBkYXRlKCAnWS1tLXQnICk7CiAgICAgICAgICAgICRzdGFydF9wcmV2ID0gZGF0ZSggJ1ktbS0wMScsIHN0cnRvdGltZSggJ2ZpcnN0IGRheSBvZiBsYXN0IG1vbnRoJyApICk7CiAgICAgICAgICAgICRlbmRfcHJldiAgID0gZGF0ZSggJ1ktbS10JywgIHN0cnRvdGltZSggJ2xhc3QgZGF5IG9mIGxhc3QgbW9udGgnICkgKTsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CgogICAgLy8g4pSA4pSAIFdvb0NvbW1lcmNlIEtQSXMgKHF1ZXJ5IGRpcmV0YSBIUE9TIOKAlCBldml0YSBidWcgZGF0ZV9jcmVhdGVkIGNvbSBzdGF0dXMgY3VzdG9tKSDilIAKICAgICR0YmxfbyAgICAgPSAkd3BkYi0+cHJlZml4IC4gJ3djX29yZGVycyc7CiAgICAkc3RhcnRfZ210ID0gZ2V0X2dtdF9mcm9tX2RhdGUoICRzdGFydCAuICcgMDA6MDA6MDAnICk7CiAgICAkZW5kX2dtdCAgID0gZ2V0X2dtdF9mcm9tX2RhdGUoICRlbmQgICAuICcgMjM6NTk6NTknICk7CgogICAgLy8gUmVjZWl0YSBjb25maXJtYWRhIChwcm9jZXNzaW5nICsgY29tcGxldGVkIOKAlCBnYXRld2F5IGNvbmZpcm1vdSBwYWdhbWVudG8pCiAgICAka3BpX2N1ciA9ICR3cGRiLT5nZXRfcm93KCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAiU0VMRUNUIENPVU5UKCopIEFTIGNudCwgQ09BTEVTQ0UoU1VNKHRvdGFsX2Ftb3VudCksMCkgQVMgdG90YWwKICAgICAgICAgRlJPTSBgeyR0Ymxfb31gCiAgICAgICAgIFdIRVJFIHN0YXR1cyBJTiAoJ3djLXByb2Nlc3NpbmcnLCd3Yy1jb21wbGV0ZWQnKQogICAgICAgICBBTkQgZGF0ZV9jcmVhdGVkX2dtdCA+PSAlcyBBTkQgZGF0ZV9jcmVhdGVkX2dtdCA8PSAlcyIsCiAgICAgICAgJHN0YXJ0X2dtdCwgJGVuZF9nbXQKICAgICkgKTsKICAgICRudW1fcGVkaWRvcyA9IChpbnQpKCAka3BpX2N1ci0+Y250ID8/IDAgKTsKICAgICRyZWNlaXRhICAgICA9IChmbG9hdCkoICRrcGlfY3VyLT50b3RhbCA/PyAwICk7CiAgICAkdGlja2V0ICAgICAgPSAkbnVtX3BlZGlkb3MgPiAwID8gJHJlY2VpdGEgLyAkbnVtX3BlZGlkb3MgOiAwOwoKICAgIC8vIENsaWNrU2lnbiBwaXBlbGluZSAoc2lnbmluZy1wZW5kaW5nICsgY29udHJhY3Qtc2lnbmVkKQogICAgJGNzX2N1ciA9ICR3cGRiLT5nZXRfcm93KCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAiU0VMRUNUIENPVU5UKCopIEFTIGNudCwgQ09BTEVTQ0UoU1VNKHRvdGFsX2Ftb3VudCksMCkgQVMgdG90YWwKICAgICAgICAgRlJPTSBgeyR0Ymxfb31gCiAgICAgICAgIFdIRVJFIHN0YXR1cyBJTiAoJ3djLXNpZ25pbmctcGVuZGluZycsJ3djLWNvbnRyYWN0LXNpZ25lZCcpCiAgICAgICAgIEFORCBkYXRlX2NyZWF0ZWRfZ210ID49ICVzIEFORCBkYXRlX2NyZWF0ZWRfZ210IDw9ICVzIiwKICAgICAgICAkc3RhcnRfZ210LCAkZW5kX2dtdAogICAgKSApOwogICAgJG51bV9jb250cmF0b3MgPSAoaW50KSggJGNzX2N1ci0+Y250ID8/IDAgKTsKICAgICR2YWxfY29udHJhdG9zID0gKGZsb2F0KSggJGNzX2N1ci0+dG90YWwgPz8gMCApOwoKICAgIC8vIFBlcsOtb2RvIGFudGVyaW9yIChzw7MgY29uZmlybWVkKQogICAgJHJlY2VpdGFfcHJldiA9IDA7CiAgICAkbnVtX3ByZXYgICAgID0gMDsKICAgIGlmICggJHN0YXJ0X3ByZXYgKSB7CiAgICAgICAgJHNwX2dtdCAgPSBnZXRfZ210X2Zyb21fZGF0ZSggJHN0YXJ0X3ByZXYgLiAnIDAwOjAwOjAwJyApOwogICAgICAgICRlcF9nbXQgID0gZ2V0X2dtdF9mcm9tX2RhdGUoICRlbmRfcHJldiAgIC4gJyAyMzo1OTo1OScgKTsKICAgICAgICAka3BpX3BydiA9ICR3cGRiLT5nZXRfcm93KCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBBUyBjbnQsIENPQUxFU0NFKFNVTSh0b3RhbF9hbW91bnQpLDApIEFTIHRvdGFsCiAgICAgICAgICAgICBGUk9NIGB7JHRibF9vfWAKICAgICAgICAgICAgIFdIRVJFIHN0YXR1cyBJTiAoJ3djLXByb2Nlc3NpbmcnLCd3Yy1jb21wbGV0ZWQnKQogICAgICAgICAgICAgQU5EIGRhdGVfY3JlYXRlZF9nbXQgPj0gJXMgQU5EIGRhdGVfY3JlYXRlZF9nbXQgPD0gJXMiLAogICAgICAgICAgICAkc3BfZ210LCAkZXBfZ210CiAgICAgICAgKSApOwogICAgICAgICRudW1fcHJldiAgICAgPSAoaW50KSggJGtwaV9wcnYtPmNudCA/PyAwICk7CiAgICAgICAgJHJlY2VpdGFfcHJldiA9IChmbG9hdCkoICRrcGlfcHJ2LT50b3RhbCA/PyAwICk7CiAgICB9CgogICAgLy8g4pSA4pSAIEtvbW1vIEZ1bmlsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgJHRvdGFsX2xlYWRzICAgID0gKGludCkgJHdwZGItPmdldF92YXIoICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB2bV9rb21tb19sZWFkcyIgKTsKICAgICRsZWFkc19ob3QgICAgICA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCAiU0VMRUNUIENPVU5UKCopIEZST00gdm1fa29tbW9fbGVhZHMgV0hFUkUgc3RhdHVzX2lkID0gOTQzMDU2NjQiICk7CiAgICAkbGVhZHNfY29udiAgICAgPSAoaW50KSAkd3BkYi0+Z2V0X3ZhciggIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHZtX2tvbW1vX2xlYWRzIFdIRVJFIHN0YXR1c19pZCA9IDk0MzI1MTY3IiApOwogICAgJGxlYWRzX3NlbV9kYXRhID0gKGludCkgJHdwZGItPmdldF92YXIoICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB2bV9rb21tb19sZWFkcyBXSEVSRSAoZGF0YV9ldmVudG8gSVMgTlVMTCBPUiBkYXRhX2V2ZW50byA9ICcnKSBBTkQgc3RhdHVzX2lkIE5PVCBJTiAoMTQyLCAxNDMpIiApOwoKICAgIC8vIOKUgOKUgCBXQSBSZWNvdmVyeSBzdGF0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgICR3YV9rcyAgICA9IGdldF9vcHRpb24oICd2bV93YV9raWxsX3N3aXRjaCcsICcxJyApOwogICAgJHdhX3RvdGFsID0gKGludCkgJHdwZGItPmdldF92YXIoICR3cGRiLT5wcmVwYXJlKAogICAgICAgICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB2bV93YXJtdXBfbG9nIFdIRVJFIHNlbnRfYXQgPj0gJXMgQU5EIHNlbnRfYXQgPD0gJXMiLAogICAgICAgICRzdGFydCAuICcgMDA6MDA6MDAnLCAkZW5kIC4gJyAyMzo1OTo1OScKICAgICkgKTsKCiAgICAvLyDilIDilIAgQWxlcnRhcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgICRhbGVydGFzID0gW107CiAgICBpZiAoICRrcyA9PT0gJzEnICkgJGFsZXJ0YXNbXSA9IFsn8J+UtCcsICdLaWxsIFN3aXRjaCBHbG9iYWwgVjIgQVRJVk8g4oCUIG5lbmh1bWEgbWVuc2FnZW0gVjIgZXN0w6Egc2FpbmRvLicsICdlcnJvciddOwogICAgaWYgKCBnZXRfb3B0aW9uKCAndm1fa2lsbF9zd2l0Y2gnLCAnMScgKSA9PT0gJzEnICkgJGFsZXJ0YXNbXSA9IFsn8J+foScsICdWMSBwYXVzYWRhIChraWxsIHN3aXRjaCBPTikuIEFwZW5hcyBXQSBSZWNvdmVyeSBlbnZpYSBtZW5zYWdlbnMuJywgJ3dhcm5pbmcnXTsKICAgIGlmICggJGxlYWRzX3NlbV9kYXRhID4gNTAwICkgJGFsZXJ0YXNbXSA9IFsn8J+foScsICRsZWFkc19zZW1fZGF0YSAuICcgbGVhZHMgbm8gS29tbW8gc2VtIGRhdGEgZGUgZXZlbnRvIOKAlCBjb25zaWRlcmUgY2FtcGFuaGEgZGUgcmVlbmdhamFtZW50by4nLCAnd2FybmluZyddOwoKICAgIC8vIOKUgOKUgCBQZWRpZG9zIFJlY2VudGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgJHJlY2VudF9vcmRlcnMgPSB3Y19nZXRfb3JkZXJzKCBbCiAgICAgICAgJ2xpbWl0JyAgID0+IDYsCiAgICAgICAgJ29yZGVyYnknID0+ICdkYXRlJywKICAgICAgICAnb3JkZXInICAgPT4gJ0RFU0MnLAogICAgICAgICdzdGF0dXMnICA9PiBhcnJheV9tYXAoIGZuKCRzKSA9PiAid2MtJHMiLCB2bTJfb3JkZXJfc3RhdHVzZXMoKSApLAogICAgXSApOwoKICAgICRjaGFubmVscyA9IHZtMl9jaGFubmVscygpOwogICAgJGRlbHRhX3IgID0gKCAkcmVjZWl0YV9wcmV2ID4gMCApID8gcm91bmQoICggJHJlY2VpdGEgLSAkcmVjZWl0YV9wcmV2ICkgLyAkcmVjZWl0YV9wcmV2ICogMTAwLCAxICkgOiBudWxsOwogICAgJGRlbHRhX3AgID0gJHN0YXJ0X3ByZXYgPyAoICRudW1fcGVkaWRvcyAtICRudW1fcHJldiApIDogbnVsbDsKCiAgICAvLyDilIDilIAgRGFzaGJvYXJkIFNtYXJ0IEtQSXMgdjEuMy45IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgLy8gQ2FycmluaG9zIGFiYW5kb25hZG9zIGhvamUKICAgICRjYXJyaW5ob3NfaG9qZSA9IChpbnQpICR3cGRiLT5nZXRfdmFyKAogICAgICAgICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB2bV93YV9jYXB0dXJlcyBXSEVSRSBEQVRFKGNhcHR1cmVkX2F0KSA9IENVUkRBVEUoKSIKICAgICk7CiAgICAkY2FycmluaG9fdmFsID0gKGZsb2F0KSAkd3BkYi0+Z2V0X3ZhcigKICAgICAgICAiU0VMRUNUIENPQUxFU0NFKFNVTShjYXJ0X3RvdGFsKSwwKSBGUk9NIHZtX3dhX2NhcHR1cmVzIFdIRVJFIERBVEUoY2FwdHVyZWRfYXQpID0gQ1VSREFURSgpIgogICAgKTsKCiAgICAvLyBXQSBSZWNvdmVyeSBob2plCiAgICAkd2FfaG9qZSA9IChpbnQpICR3cGRiLT5nZXRfdmFyKAogICAgICAgICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB2bV93YXJtdXBfbG9nIFdIRVJFIERBVEUoc2VudF9hdCkgPSBDVVJEQVRFKCkiCiAgICApOwoKICAgIC8vIFBvcHVwIHN0YXRzCiAgICAkcG9wdXBfY29udiAgPSAoaW50KSBnZXRfb3B0aW9uKCAndm0yX3BvcHVwX3N0YXRfY29udmVyc2lvbnMnLCAwICk7CiAgICAkcG9wdXBfc2hvd3MgPSAoaW50KSBnZXRfb3B0aW9uKCAndm0yX3BvcHVwX3N0YXRfc2hvd3MnLCAwICk7CgogICAgLy8gRXZlbnRvcyBwcsOzeGltb3Mg4oCUIHBhcnNlIGV2ZW50X2RhdGUgZGUgcGVkaWRvcyBhdGl2b3MKICAgICR0Ymxfb20gICA9ICR3cGRiLT5wcmVmaXggLiAnd2Nfb3JkZXJzX21ldGEnOwogICAgJHRibF93byAgID0gJHdwZGItPnByZWZpeCAuICd3Y19vcmRlcnMnOwogICAgJGV2X3Jvd3MgID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICJTRUxFQ1QgbS5tZXRhX3ZhbHVlIEFTIGV2CiAgICAgICAgIEZST00gYHskdGJsX3dvfWAgbwogICAgICAgICBJTk5FUiBKT0lOIGB7JHRibF9vbX1gIG0gT04gby5pZCA9IG0ub3JkZXJfaWQgQU5EIG0ubWV0YV9rZXkgPSAnX2JpbGxpbmdfZXZlbnRfZGF0ZScKICAgICAgICAgV0hFUkUgby5zdGF0dXMgSU4gKCd3Yy1wcm9jZXNzaW5nJywnd2MtY29tcGxldGVkJywnd2Mtc2lnbmluZy1wZW5kaW5nJywnd2MtY29udHJhY3Qtc2lnbmVkJykKICAgICAgICAgQU5EIG0ubWV0YV92YWx1ZSAhPSAnJyIKICAgICk7CiAgICAkdG9kYXlfdHMgID0gc3RydG90aW1lKCAndG9kYXknICk7CiAgICAkaW43X3RzICAgID0gc3RydG90aW1lKCAnKzcgZGF5cycgKTsKICAgICRpbjMwX3RzICAgPSBzdHJ0b3RpbWUoICcrMzAgZGF5cycgKTsKICAgICRldl9wcm94NyAgPSAwOwogICAgJGV2X3Byb3gzMCA9IDA7CiAgICBmb3JlYWNoICggJGV2X3Jvd3MgYXMgJGV2X3JvdyApIHsKICAgICAgICAkdiAgPSB0cmltKCAkZXZfcm93LT5ldiApOwogICAgICAgICR0cyA9IDA7CiAgICAgICAgaWYgKCBwcmVnX21hdGNoKCAnL15cZHs4fSQvJywgJHYgKSApIHsKICAgICAgICAgICAgJHRzID0gbWt0aW1lKCAwLCAwLCAwLCAoaW50KSBzdWJzdHIoICR2LCAyLCAyICksIChpbnQpIHN1YnN0ciggJHYsIDAsIDIgKSwgKGludCkgc3Vic3RyKCAkdiwgNCwgNCApICk7CiAgICAgICAgfSBlbHNlaWYgKCBwcmVnX21hdGNoKCAnL14oXGR7Mn0pXC8oXGR7Mn0pXC8oXGR7Miw0fSkkLycsICR2LCAkZG0gKSApIHsKICAgICAgICAgICAgJHlyID0gc3RybGVuKCAkZG1bM10gKSA9PT0gMiA/IDIwMDAgKyAoaW50KSAkZG1bM10gOiAoaW50KSAkZG1bM107CiAgICAgICAgICAgICR0cyA9IG1rdGltZSggMCwgMCwgMCwgKGludCkgJGRtWzJdLCAoaW50KSAkZG1bMV0sICR5ciApOwogICAgICAgIH0KICAgICAgICBpZiAoICR0cyA+PSAkdG9kYXlfdHMgJiYgJHRzIDw9ICRpbjMwX3RzICkgJGV2X3Byb3gzMCsrOwogICAgICAgIGlmICggJHRzID49ICR0b2RheV90cyAmJiAkdHMgPD0gJGluN190cyAgKSAkZXZfcHJveDcrKzsKICAgIH0KCiAgICAvLyBDb252ZXJzw6NvIEhPVCDihpIgUGVkaWRvIChtw6pzKQogICAgJGNvbnZfaG90X3BjdCA9ICRsZWFkc19ob3QgPiAwID8gcm91bmQoICRudW1fcGVkaWRvcyAvICRsZWFkc19ob3QgKiAxMDAsIDEgKSA6IDA7CgogICAgPz4KICAgIDxkaXYgY2xhc3M9IndyYXAiPgogICAgPHN0eWxlPgogICAgLnZtMi13cmFwe2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCJTZWdvZSBVSSIsc2Fucy1zZXJpZn0KICAgIC52bTItaGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjhweDttYXJnaW4tYm90dG9tOjE2cHh9CiAgICAudm0yLXBlcmlvZC10YWJze2Rpc3BsYXk6ZmxleDtnYXA6NHB4O2ZsZXgtd3JhcDp3cmFwfQogICAgLnZtMi1wZXJpb2QtdGFie3BhZGRpbmc6NXB4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojNTU1O2JhY2tncm91bmQ6I2ZmZjt0cmFuc2l0aW9uOmFsbCAuMTVzfQogICAgLnZtMi1wZXJpb2QtdGFiOmhvdmVye2JvcmRlci1jb2xvcjojMDA3M2FhO2NvbG9yOiMwMDczYWF9CiAgICAudm0yLXBlcmlvZC10YWIuYWN0aXZle2JhY2tncm91bmQ6IzAwNzNhYTtjb2xvcjojZmZmIWltcG9ydGFudDtib3JkZXItY29sb3I6IzAwNzNhYX0KICAgIC52bTIta3Bpc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMTkwcHgsMWZyKSk7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToxNnB4fQogICAgLnZtMi1rcGl7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxOHB4IDIwcHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMDQpO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4xNXMgZWFzZX0KICAgIC52bTIta3BpOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0ycHgpO2JveC1zaGFkb3c6MCA0cHggMTRweCByZ2JhKDAsMCwwLC4xMyk7Ym9yZGVyLWNvbG9yOiMwMDczYWF9CiAgICAudm0yLWtwaSAubGFiZWx7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg4ODt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjVweDttYXJnaW4tYm90dG9tOjhweH0KICAgIC52bTIta3BpIC52YWx1ZXtmb250LXNpemU6MjhweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzFhMWExYTtsaW5lLWhlaWdodDoxfQogICAgLnZtMi1rcGkgLmRlbHRhe2ZvbnQtc2l6ZToxMnB4O21hcmdpbi10b3A6OHB4fQogICAgLnZtMi1rcGkgLmRlbHRhLnVwe2NvbG9yOiMyN2FlNjB9LnZtMi1rcGkgLmRlbHRhLmRvd257Y29sb3I6I2U3NGMzY30udm0yLWtwaSAuZGVsdGEubmV1dHJhbHtjb2xvcjojOTk5fQogICAgLnZtMi1ncmlkMntkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMzAwcHgsMWZyKSk7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToxNnB4fQogICAgLnZtMi1jYXJke2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MThweCAyMHB4O2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjA0KX0KICAgIC52bTItY2FyZCBoM3ttYXJnaW46MCAwIDE0cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzMzMztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHh9CiAgICAudm0yLXNlY3Rpb24tbGFiZWx7Zm9udC1zaXplOjEwcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi41cHg7Y29sb3I6I2FhYTttYXJnaW46MTJweCAwIDZweDtmb250LXdlaWdodDo2MDB9CiAgICAudm0yLXJvd3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzo3cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjVmNWY1O2ZvbnQtc2l6ZToxM3B4fQogICAgLnZtMi1yb3c6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9CiAgICAudm0yLWJhci13cmFwe2ZsZXg6MTtoZWlnaHQ6N3B4O2JhY2tncm91bmQ6I2YwZjBmMDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzpoaWRkZW59CiAgICAudm0yLWJhci1maWxse2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6NHB4O3RyYW5zaXRpb246d2lkdGggLjNzfQogICAgLnZtMi1iYWRnZXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMH0KICAgIC52bTItYmFkZ2UtZ3JlZW57YmFja2dyb3VuZDojZDRlZGRhO2NvbG9yOiMxNTU3MjR9CiAgICAudm0yLWJhZGdlLWJsdWV7YmFja2dyb3VuZDojY2NlNWZmO2NvbG9yOiMwMDQwODV9CiAgICAudm0yLWJhZGdlLW9yYW5nZXtiYWNrZ3JvdW5kOiNmZmYzY2Q7Y29sb3I6Izg1NjQwNH0KICAgIC52bTItdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Zm9udC1zaXplOjEzcHh9CiAgICAudm0yLXRhYmxlIHRoe3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjZweCA4cHg7YmFja2dyb3VuZDojZjlmOWY5O2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlZWU7Zm9udC1zaXplOjExcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOiM4ODg7d2hpdGUtc3BhY2U6bm93cmFwfQogICAgLnZtMi10YWJsZSB0ZHtwYWRkaW5nOjhweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjVmNWY1O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KICAgIC52bTItdGFibGUgdHI6bGFzdC1jaGlsZCB0ZHtib3JkZXItYm90dG9tOm5vbmV9CiAgICAudm0yLXJvYWRtYXB7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHh9CiAgICAudm0yLXJte3BhZGRpbmc6NHB4IDE0cHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMnB4fQogICAgLnZtMi1ybS5kb25le2JhY2tncm91bmQ6I2Q0ZWRkYTtjb2xvcjojMTU1NzI0fQogICAgLnZtMi1ybS5wZW5kaW5ne2JhY2tncm91bmQ6I2YwZjBmMDtjb2xvcjojOTk5fQogICAgLnZtMi1ybS5wcm9ncmVzc3tiYWNrZ3JvdW5kOiNmZWY5YzM7Y29sb3I6IzkyNDAwZX0KICAgIC52bTItYWxlcnQtYm94e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDo4cHg7cGFkZGluZzoxMHB4IDE0cHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjEzcHg7bWFyZ2luLWJvdHRvbTo4cHh9CiAgICAudm0yLWFsZXJ0LWVycm9ye2JhY2tncm91bmQ6I2ZkZjNmMztib3JkZXI6MXB4IHNvbGlkICNmNWM2Y2I7Y29sb3I6IzcyMWMyNH0KICAgIC52bTItYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOiNmZmZiZWE7Ym9yZGVyOjFweCBzb2xpZCAjZmZlZWJhO2NvbG9yOiM4NTY0MDR9CiAgICAudm0yLW1vbm97Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxMXB4O2JhY2tncm91bmQ6I2YwZjBmMDtwYWRkaW5nOjJweCA2cHg7Ym9yZGVyLXJhZGl1czozcHh9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9InZtMi13cmFwIj4KCiAgICA8IS0tIEhlYWRlciArIFBlcmlvZCBUYWJzIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWhlYWRlciI+CiAgICAgICAgPGgxIHN0eWxlPSJtYXJnaW46MCI+8J+MnyBWSVZBTUFJUyAyLjAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5OTk7Zm9udC13ZWlnaHQ6bm9ybWFsIj52PD9waHAgZWNobyBWTTJfVkVSU0lPTjsgPz48L3NwYW4+PC9oMT4KICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7ZmxleC13cmFwOndyYXAiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItcGVyaW9kLXRhYnMiPgogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoICRwZXJpb2RzIGFzICRrZXkgPT4gJGxhYmVsICkgOiA/PgogICAgICAgICAgICAgICAgPGEgaHJlZj0iP3BhZ2U9dm0yLWNybSZwZXJpb2Q9PD9waHAgZWNobyBlc2NfYXR0cigka2V5KTsgPz4iCiAgICAgICAgICAgICAgICAgICBjbGFzcz0idm0yLXBlcmlvZC10YWIgPD9waHAgZWNobyAkcGVyaW9kID09PSAka2V5ID8gJ2FjdGl2ZScgOiAnJzsgPz4iPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGxhYmVsKTsgPz48L2E+CiAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGJ1dHRvbiBpZD0idm0yLXN5bmMtYnRuIiBvbmNsaWNrPSJ2bTJEb1N5bmMoKSIgc3R5bGU9ImJhY2tncm91bmQ6IzAwNzNhYTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6NnB4IDE0cHg7Zm9udC1zaXplOjEzcHg7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NXB4O3doaXRlLXNwYWNlOm5vd3JhcCI+CiAgICAgICAgICAgICAgICDwn5SEIDxzcGFuIGlkPSJ2bTItc3luYy1sYWJlbCI+U2luY3Jvbml6YXI8L3NwYW4+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8c2NyaXB0PgogICAgZnVuY3Rpb24gdm0yRG9TeW5jKCkgewogICAgICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXN5bmMtYnRuJyk7CiAgICAgICAgdmFyIGxibCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItc3luYy1sYWJlbCcpOwogICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgbGJsLnRleHRDb250ZW50ID0gJ1NpbmNyb25pemFuZG8uLi4nOwogICAgICAgIGJ0bi5zdHlsZS5vcGFjaXR5ID0gJzAuNyc7CiAgICAgICAgZmV0Y2goYWpheHVybCwgewogICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKICAgICAgICAgICAgaGVhZGVyczogeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30sCiAgICAgICAgICAgIGJvZHk6ICdhY3Rpb249dm0yX21hbnVhbF9zeW5jJm5vbmNlPScgKyA8P3BocCBlY2hvIGpzb25fZW5jb2RlKHdwX2NyZWF0ZV9ub25jZSgndm0yX21hbnVhbF9zeW5jJykpOyA/PgogICAgICAgIH0pCiAgICAgICAgLnRoZW4ociA9PiByLmpzb24oKSkKICAgICAgICAudGhlbihmdW5jdGlvbihyZXMpIHsKICAgICAgICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgIGJ0bi5zdHlsZS5vcGFjaXR5ID0gJzEnOwogICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgIGxibC50ZXh0Q29udGVudCA9ICfinIUgJyArIChyZXMuZGF0YS5tc2cgfHwgJ1NpbmNyb25pemFkbyEnKTsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgbGJsLnRleHRDb250ZW50ID0gJ1NpbmNyb25pemFyJzsgbG9jYXRpb24ucmVsb2FkKCk7IH0sIDI1MDApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbGJsLnRleHRDb250ZW50ID0gJ+KdjCBFcnJvJzsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgbGJsLnRleHRDb250ZW50ID0gJ1NpbmNyb25pemFyJzsgfSwgMzAwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KQogICAgICAgIC5jYXRjaChmdW5jdGlvbigpeyBidG4uZGlzYWJsZWQ9ZmFsc2U7IGJ0bi5zdHlsZS5vcGFjaXR5PScxJzsgbGJsLnRleHRDb250ZW50PSfinYwgRmFsaGEnOyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGxibC50ZXh0Q29udGVudD0nU2luY3Jvbml6YXInOyB9LDMwMDApOyB9KTsKICAgIH0KICAgIDwvc2NyaXB0PgoKICAgIDwhLS0gQWxlcnRhcyAtLT4KICAgIDw/cGhwIGZvcmVhY2ggKCAkYWxlcnRhcyBhcyAkYWxlcnRhICkgOiA/PgogICAgPGRpdiBjbGFzcz0idm0yLWFsZXJ0LWJveCB2bTItYWxlcnQtPD9waHAgZWNobyAkYWxlcnRhWzJdOyA/PiI+CiAgICAgICAgPHNwYW4+PD9waHAgZWNobyAkYWxlcnRhWzBdOyA/Pjwvc3Bhbj4KICAgICAgICA8c3Bhbj48P3BocCBlY2hvIGVzY19odG1sKCRhbGVydGFbMV0pOyA/Pjwvc3Bhbj4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KCiAgICA8IS0tIEtQSSBDYXJkcyDigJQgR2VzdMOjbyBJbnRlbGlnZW50ZSB2MS4zLjkgLS0+CiAgICA8cCBzdHlsZT0iZm9udC1zaXplOjExcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi41cHg7Y29sb3I6I2FhYTttYXJnaW46NHB4IDAgOHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+aqCBBw6fDo28gSW1lZGlhdGE8L3A+CiAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpcyIgc3R5bGU9Im1hcmdpbi1ib3R0b206OHB4Ij4KCiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgc3R5bGU9ImJvcmRlci1sZWZ0OjNweCBzb2xpZCAjZTY3ZTIyIiBvbmNsaWNrPSJsb2NhdGlvbi5ocmVmPSc/cGFnZT12bTItY29udGF0b3MnIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPvCflKUgTGVhZHMgSE9UPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj48P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJGxlYWRzX2hvdCk7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIDw/cGhwIGVjaG8gJGxlYWRzX2hvdCA+IDAgPyAnZG93bicgOiAnbmV1dHJhbCc7ID8+Ij4KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGxlYWRzX2hvdCA+IDAgPyAnYWd1YXJkYW5kbyBmZWNoYW1lbnRvJyA6ICdOZW5odW0gbGVhZCBxdWVudGUnOyA/PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgc3R5bGU9ImJvcmRlci1sZWZ0OjNweCBzb2xpZCAjOWI1OWI2IiBvbmNsaWNrPSJsb2NhdGlvbi5ocmVmPSc/cGFnZT12bTItYXV0b21hY29lcyZ0YWI9Y2FycmluaG8nIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPvCfm5IgQ2FycmluaG9zIGhvamU8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiPjw/cGhwIGVjaG8gJGNhcnJpbmhvc19ob2plOyA/PjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWx0YSA8P3BocCBlY2hvICRjYXJyaW5ob3NfaG9qZSA+IDAgPyAnZG93bicgOiAnbmV1dHJhbCc7ID8+Ij4KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGNhcnJpbmhvc19ob2plID4gMCA/ICdSJMKgJyAuIG51bWJlcl9mb3JtYXQoJGNhcnJpbmhvX3ZhbCwgMCwgJywnLCAnLicpIC4gJyBlbSByaXNjbycgOiAnTmVuaHVtIGFiYW5kb25vIGhvamUnOyA/PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgc3R5bGU9ImJvcmRlci1sZWZ0OjNweCBzb2xpZCAjMzQ5OGRiIiBvbmNsaWNrPSJsb2NhdGlvbi5ocmVmPSc/cGFnZT12bTItcGVkaWRvcyciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+Wiu+4jyBDb250cmF0b3MgcGVuZGVudGVzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj48P3BocCBlY2hvICRudW1fY29udHJhdG9zOyA/PjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWx0YSA8P3BocCBlY2hvICRudW1fY29udHJhdG9zID4gMCA/ICduZXV0cmFsJyA6ICd1cCc7ID8+Ij4KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJG51bV9jb250cmF0b3MgPiAwID8gJG51bV9jb250cmF0b3MgLiAnIGFndWFyZC4gYXNzaW5hdHVyYScgOiAnTmVuaHVtIHBlbmRlbnRlIOKckyc7ID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6M3B4IHNvbGlkICM5NWE1YTYiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9Jz9wYWdlPXZtMi1jb250YXRvcyciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+ThSBMZWFkcyBzZW0gZGF0YTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSI+PD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRsZWFkc19zZW1fZGF0YSk7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIDw/cGhwIGVjaG8gJGxlYWRzX3NlbV9kYXRhID4gNTAwID8gJ2Rvd24nIDogKCRsZWFkc19zZW1fZGF0YSA+IDAgPyAnbmV1dHJhbCcgOiAndXAnKTsgPz4iPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkbGVhZHNfc2VtX2RhdGEgPiAwID8gJ2xlYWRzIHBhcmEgcmVlbmdhamFyJyA6ICdUb2RvcyBjb20gZGF0YSDinJMnOyA/PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICA8L2Rpdj4KCiAgICA8cCBzdHlsZT0iZm9udC1zaXplOjExcHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi41cHg7Y29sb3I6I2FhYTttYXJnaW46MTJweCAwIDhweDtmb250LXdlaWdodDo2MDAiPvCfk4ogU2HDumRlIGRvIE5lZ8OzY2lvPC9wPgogICAgPGRpdiBjbGFzcz0idm0yLWtwaXMiPgoKICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6M3B4IHNvbGlkICMyN2FlNjAiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9Jz9wYWdlPXZtMi1hZ2VuZGEnIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPvCfjqogRXZlbnRvcyBwcsOzeC4gMzBkPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj48P3BocCBlY2hvICRldl9wcm94MzA7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIDw/cGhwIGVjaG8gJGV2X3Byb3g3ID4gMCA/ICdkb3duJyA6ICd1cCc7ID8+Ij4KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGV2X3Byb3g3ID4gMCA/ICRldl9wcm94NyAuICcgZXN0YSBzZW1hbmEg8J+UtCcgOiAnTmVuaHVtIGVzdGEgc2VtYW5hJzsgPz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDozcHggc29saWQgI2YzOWMxMiIgb25jbGljaz0ibG9jYXRpb24uaHJlZj0nP3BhZ2U9dm0yLXBlZGlkb3MnIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPvCfk4ggQ29udmVyc8OjbyBIT1TihpJWZW5kYTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSI+PD9waHAgZWNobyAkY29udl9ob3RfcGN0OyA/PiU8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgbmV1dHJhbCI+PD9waHAgZWNobyAkbnVtX3BlZGlkb3M7ID8+IHBlZGlkb3MgLyA8P3BocCBlY2hvICRsZWFkc19ob3Q7ID8+IEhPVDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6M3B4IHNvbGlkICMxYWJjOWMiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9Jz9wYWdlPXZtMi1hdXRvbWFjb2VzJnRhYj1jYXJyaW5obyciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+TqCBXQSBSZWNvdmVyeSBob2plPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj48P3BocCBlY2hvICR3YV9ob2plOyA/PjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWx0YSA8P3BocCBlY2hvICR3YV9ob2plID4gMCA/ICd1cCcgOiAnbmV1dHJhbCc7ID8+Ij4KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHdhX2hvamUgPiAwID8gJ21lbnNhZ2VucyBlbnZpYWRhcyDinJMnIDogbnVtYmVyX2Zvcm1hdCgkd2FfdG90YWwpIC4gJyBubyBwZXLDrW9kbyc7ID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6M3B4IHNvbGlkICNlNzRjM2MiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9Jz9wYWdlPXZtMi1hdXRvbWFjb2VzJnRhYj1wb3B1cCciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+OryBQb3B1cCDigJQgQ29udmVyc8O1ZXM8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiPjw/cGhwIGVjaG8gJHBvcHVwX2NvbnY7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkcG9wdXBfc2hvd3MgPiAwID8gbnVtYmVyX2Zvcm1hdCgkcG9wdXBfY29udi8kcG9wdXBfc2hvd3MqMTAwLDEpIC4gJyUgZGUgJyAuIG51bWJlcl9mb3JtYXQoJHBvcHVwX3Nob3dzKSAuICcgZXhpYi4nIDogJ0FndWFyZGFuZG8gZGFkb3MnOyA/PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICA8L2Rpdj4KICAgIDwhLS0gRnVuaWwgKyBTdGF0dXMgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItZ3JpZDIiPgoKICAgICAgICA8IS0tIEZ1bmlsIGRlIFZlbmRhcyAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY2FyZCI+CiAgICAgICAgICAgIDxoMz7wn5S7IEZ1bmlsIGRlIFZlbmRhczwvaDM+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICRtYXggPSBtYXgoICR0b3RhbF9sZWFkcywgMSApOwogICAgICAgICAgICAkZnVuaWwgPSBbCiAgICAgICAgICAgICAgICBbJ1RvdGFsIExlYWRzIEtvbW1vJywgJHRvdGFsX2xlYWRzLCAgICcjMzQ5OGRiJ10sCiAgICAgICAgICAgICAgICBbJ/CflKUgSG90IC8gSW5jb21pbmcnLCAkbGVhZHNfaG90LCAgICAgJyNlNjdlMjInXSwKICAgICAgICAgICAgICAgIFsn4pyFIENvbnRyYXRvdScsICAgICAgJGxlYWRzX2NvbnYsICAgICcjMjdhZTYwJ10sCiAgICAgICAgICAgICAgICBbJ/Cfm5IgUGVkaWRvcyBXQycsICAgICRudW1fcGVkaWRvcywgICAnIzhlNDRhZCddLAogICAgICAgICAgICBdOwogICAgICAgICAgICBmb3JlYWNoICggJGZ1bmlsIGFzIFskbGJsLCAkdmFsLCAkY29yXSApIDoKICAgICAgICAgICAgICAgICRwY3QgPSByb3VuZCggbWluKDEwMCwgJHZhbCAvICRtYXggKiAxMDApICk7CiAgICAgICAgICAgID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1yb3ciPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9IndpZHRoOjE1MHB4O2ZvbnQtc2l6ZToxMnB4O2ZsZXgtc2hyaW5rOjAiPjw/cGhwIGVjaG8gJGxibDsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItYmFyLXdyYXAiPjxkaXYgY2xhc3M9InZtMi1iYXItZmlsbCIgc3R5bGU9IndpZHRoOjw/cGhwIGVjaG8gJHBjdDsgPz4lO2JhY2tncm91bmQ6PD9waHAgZWNobyAkY29yOyA/PiI+PC9kaXY+PC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0id2lkdGg6NDJweDt0ZXh0LWFsaWduOnJpZ2h0O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTNweCI+PD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCR2YWwpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTJweDtwYWRkaW5nOjEwcHg7YmFja2dyb3VuZDojZjlmOWY5O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NTUiPgogICAgICAgICAgICAgICAg8J+OryBDb252ZXJzw6NvIExlYWQg4oaSIFZlbmRhOiA8c3Ryb25nIHN0eWxlPSJjb2xvcjojMDA3M2FhIj48P3BocCBlY2hvICR0b3RhbF9sZWFkcyA+IDAgPyBudW1iZXJfZm9ybWF0KCRudW1fcGVkaWRvcyAvICR0b3RhbF9sZWFkcyAqIDEwMCwgMikgOiAnMCwwMCc7ID8+JTwvc3Ryb25nPgogICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwOwogICAgICAgICAgICAgICAg8J+UpSBUYXhhIEhvdDogPHN0cm9uZz48P3BocCBlY2hvICR0b3RhbF9sZWFkcyA+IDAgPyBudW1iZXJfZm9ybWF0KCRsZWFkc19ob3QgLyAkdG90YWxfbGVhZHMgKiAxMDAsIDEpIDogJzAnOyA/PiU8L3N0cm9uZz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gU3RhdHVzIGRvIFNpc3RlbWEgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWNhcmQiPgogICAgICAgICAgICA8aDM+8J+ToSBTdGF0dXMgZG8gU2lzdGVtYTwvaDM+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItc2VjdGlvbi1sYWJlbCI+Q2FuYWlzIGRlIEVudmlvPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCAkY2hhbm5lbHMgYXMgJGtleSA9PiAkY2ggKSA6ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1yb3ciPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1tb25vIj48P3BocCBlY2hvIGVzY19odG1sKCRrZXkpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweCI+PD9waHAgZWNobyBlc2NfaHRtbCgkY2hbJ2xhYmVsJ10pOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDphdXRvIj7wn5+iIEF0aXZvPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1zZWN0aW9uLWxhYmVsIj5Nw7NkdWxvczwvZGl2PgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICAkdjJrcyA9ICRrcyA9PT0gJzEnOwogICAgICAgICAgICAkdjFrcyA9IGdldF9vcHRpb24oICd2bV9raWxsX3N3aXRjaCcsICcxJyApID09PSAnMSc7CiAgICAgICAgICAgICRtb2R1bG9zID0gWwogICAgICAgICAgICAgICAgWyfwn5uSIE5vdGlmaWNhw6fDo28gUGVkaWRvcyAoVjIpJywgISR2MmtzICYmIGdldF9vcHRpb24oJ3ZtMl9wZWRpZG9zX3ZlbmRhc19lbmFibGVkJywnMScpPT09JzEnXSwKICAgICAgICAgICAgICAgIFsn8J+UgSBXQSBSZWNvdmVyeScsICAgICAgICAgICAgICAkd2Ffa3MgPT09ICcwJ10sCiAgICAgICAgICAgICAgICBbJ/CflKUgQXF1ZWNlciAvIE51cnR1cmluZyAoVjEpJywgISR2MWtzXSwKICAgICAgICAgICAgICAgIFsn8J+UkiBLaWxsIFN3aXRjaCBHbG9iYWwgVjInLCAgICAhJHYya3NdLAogICAgICAgICAgICBdOwogICAgICAgICAgICBmb3JlYWNoICggJG1vZHVsb3MgYXMgWyRsYmwsICRva10gKSA6ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1yb3ciPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij48P3BocCBlY2hvICRsYmw7ID8+PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG87Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOjw/cGhwIGVjaG8gJG9rID8gJyMyN2FlNjAnIDogJyNjMDM5MmInOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkb2sgPyAn8J+foiBPTicgOiAn8J+UtCBPRkYnOyA/PgogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KCiAgICAgICAgICAgIDw/cGhwIGlmICggJHdhX3RvdGFsID4gMCApIDogPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4O3BhZGRpbmc6OHB4IDEwcHg7YmFja2dyb3VuZDojZjlmOWY5O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NTUiPgogICAgICAgICAgICAgICAg8J+TqCBXQSBSZWNvdmVyeSBlbnZpYWRvcyBubyBwZXLDrW9kbzogPHN0cm9uZz48P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJHdhX3RvdGFsKTsgPz48L3N0cm9uZz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwvZGl2PgoKICAgIDwvZGl2PgoKICAgIDwhLS0gUGVkaWRvcyBSZWNlbnRlcyAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1jYXJkIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICA8aDM+8J+TiyBQZWRpZG9zIFJlY2VudGVzPC9oMz4KICAgICAgICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OmF1dG8iPgogICAgICAgIDx0YWJsZSBjbGFzcz0idm0yLXRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0aD4jPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGg+Q2xpZW50ZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoPkRhdGEgUGVkaWRvPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGg+RGF0YSBFdmVudG88L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5WYWxvcjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoPlN0YXR1czwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCAkcmVjZW50X29yZGVycyBhcyAkb3JkZXIgKSA6CiAgICAgICAgICAgICAgICAkZXZfcmF3ID0gJG9yZGVyLT5nZXRfbWV0YSggJ19iaWxsaW5nX2V2ZW50X2RhdGUnICk7CiAgICAgICAgICAgICAgICAkZXZfZm10ID0gdm0yX2Zvcm1hdF9ldmVudF9kYXRlKCAkZXZfcmF3ICk7CiAgICAgICAgICAgICAgICAkc3QgICAgID0gJG9yZGVyLT5nZXRfc3RhdHVzKCk7CiAgICAgICAgICAgICAgICAkYmFkZ2UgID0gJHN0ID09PSAncHJvY2Vzc2luZycgPyBbJ3ZtMi1iYWRnZS1ibHVlJywn4pqZ77iPIFByb2Nlc3NhbmRvJ10gOiAoICRzdCA9PT0gJ2NvbXBsZXRlZCcgPyBbJ3ZtMi1iYWRnZS1ncmVlbicsJ+KchSBDb25jbHXDrWRvJ10gOiBbJ3ZtMi1iYWRnZS1vcmFuZ2UnLCfij7MgJyAuIHVjZmlyc3QoJHN0KV0gKTsKICAgICAgICAgICAgPz4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPjxzdHJvbmc+Izw/cGhwIGVjaG8gJG9yZGVyLT5nZXRfaWQoKTsgPz48L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gZXNjX2h0bWwoIHRyaW0oICRvcmRlci0+Z2V0X2JpbGxpbmdfZmlyc3RfbmFtZSgpIC4gJyAnIC4gJG9yZGVyLT5nZXRfYmlsbGluZ19sYXN0X25hbWUoKSApICk7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGVzY19odG1sKCBkYXRlKCAnZC9tL1knLCBzdHJ0b3RpbWUoICRvcmRlci0+Z2V0X2RhdGVfY3JlYXRlZCgpICkgKSApOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyAkZXZfZm10ID8gZXNjX2h0bWwoJGV2X2ZtdCkgOiAnPHNwYW4gc3R5bGU9ImNvbG9yOiNjY2MiPuKAlDwvc3Bhbj4nOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+PHN0cm9uZz5SJCA8P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoICRvcmRlci0+Z2V0X3RvdGFsKCksIDAsICcsJywgJy4nICk7ID8+PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48c3BhbiBjbGFzcz0idm0yLWJhZGdlIDw/cGhwIGVjaG8gJGJhZGdlWzBdOyA/PiI+PD9waHAgZWNobyAkYmFkZ2VbMV07ID8+PC9zcGFuPjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCBhZG1pbl91cmwoICdwb3N0LnBocD9wb3N0PScgLiAkb3JkZXItPmdldF9pZCgpIC4gJyZhY3Rpb249ZWRpdCcgKSApOyA/PiIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojMDA3M2FhIj5WZXIg4oaSPC9hPjwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7dGV4dC1hbGlnbjpyaWdodCI+CiAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCggYWRtaW5fdXJsKCAnZWRpdC5waHA/cG9zdF90eXBlPXNob3Bfb3JkZXInICkgKTsgPz4iIGNsYXNzPSJidXR0b24gYnV0dG9uLXNlY29uZGFyeSIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij5WZXIgdG9kb3Mgb3MgcGVkaWRvcyDihpI8L2E+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tIFJvYWRtYXAgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItY2FyZCI+CiAgICAgICAgPGgzPvCfl7rvuI8gUm9hZG1hcCBWMjwvaDM+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLXJvYWRtYXAiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLXJtIGRvbmUiPuKchSBGMSDigJQgUGx1Z2luIEJhc2U8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItcm0gZG9uZSI+4pyFIEYyIOKAlCBEYXNoYm9hcmQgKyBLUElzPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLXJtIGRvbmUiPuKchSBGMyDigJQg8J+bkiBQZWRpZG9zPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLXJtIGRvbmUiPuKchSBGNCDigJQg8J+RpCBDb250YXRvcyArIFNjb3Jpbmc8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItcm0gZG9uZSI+4pyFIEY1IOKAlCDimqEgQXV0b21hw6fDtWVzPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLXJtIGRvbmUiPuKchSBGNiDigJQg8J+SrCBDYXJyaW5obyArIEV4aXQtSW50ZW50ICsgUG9wdXA8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItcm0gZG9uZSI+4pyFIEY3IOKAlCDwn5OFIEFnZW5kYTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1ybSBwcm9ncmVzcyI+8J+UhCBGOCDigJQg8J+knSBQYXJjZWlyb3MgJiBBcnRpc3Rhczwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1ybSBwcm9ncmVzcyI+8J+UhCBGOSDigJQg8J+SsCBGaW5hbmNlaXJvPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLXJtIHBlbmRpbmciPuKPsyBGMTAg4oCUIOKame+4jyBDb25maWcgdW5pZmljYWRhPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLXJtIHBlbmRpbmciPuKPsyBGMTEg4oCUIPCfk4sgTG9nIHVuaWZpY2Fkbzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1ybSBwZW5kaW5nIj7ij7MgRjEyIOKAlCDwn5SEIFN5bmMgUGxhbmlsaGEg4oaSIENyb24gV1A8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItcm0gcGVuZGluZyI+4o+zIEYxMyDigJQg4pyN77iPIENsaWNrU2lnbiB3ZWJob29rPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPC9kaXY+PCEtLSAudm0yLXdyYXAgLS0+CiAgICA8P3BocAp9CgoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFBFRElET1MgUEFHRQovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAovLyBNw5NEVUxPIENPTlRBVE9TIOKAlCB2MS4wLjQKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCgpmdW5jdGlvbiB2bTJfbGVhZF9zY29yZSggJGxlYWQsICR3YV9jb3VudCA9IDAgKSB7CiAgICAkc2NvcmUgPSAxMDsKICAgIC8vIEV2ZW50IGRhdGUKICAgICRldl9jb2wgPSAkbGVhZC0+ZGF0YV9ldmVudG8gPz8gJGxlYWQtPmV2X2RhdGUgPz8gJyc7CiAgICBpZiAoICEgZW1wdHkoICRldl9jb2wgKSApIHsKICAgICAgICAkdHMgICA9IHN0cnRvdGltZSggJGV2X2NvbCApOwogICAgICAgICRkYXlzID0gKCAkdHMgLSB0aW1lKCkgKSAvIDg2NDAwOwogICAgICAgICRzY29yZSArPSAyMDsKICAgICAgICBpZiAoICRkYXlzID49IDAgJiYgJGRheXMgPD0gNyApICAgICAgICRzY29yZSArPSA0MDsKICAgICAgICBlbHNlaWYgKCAkZGF5cyA+PSAwICYmICRkYXlzIDw9IDMwICkgICRzY29yZSArPSAzMDsKICAgICAgICBlbHNlaWYgKCAkZGF5cyA+PSAwICYmICRkYXlzIDw9IDkwICkgICRzY29yZSArPSAyMDsKICAgICAgICBlbHNlaWYgKCAkZGF5cyA+PSAwICkgICAgICAgICAgICAgICAgICRzY29yZSArPSAxMDsKICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NvcmUgLT0gMTA7IC8vIHBhc3QKICAgIH0KICAgIC8vIEtvbW1vIEhPVCBzdGFnZQogICAgaWYgKCBpc3NldCggJGxlYWQtPnN0YXR1c19pZCApICYmIChpbnQpICRsZWFkLT5zdGF0dXNfaWQgPT09IDk0MzA1NjY0ICkgJHNjb3JlICs9IDI1OwogICAgLy8gV0EgbWVzc2FnZXMKICAgIGlmICggJHdhX2NvdW50ID4gMyApICAgICAgJHNjb3JlICs9IDEwOwogICAgZWxzZWlmICggJHdhX2NvdW50ID4gMCApICAkc2NvcmUgKz0gIDU7CiAgICAvLyBFbWFpbAogICAgaWYgKCAhIGVtcHR5KCAkbGVhZC0+ZW1haWwgKSApICRzY29yZSArPSA1OwogICAgcmV0dXJuIG1heCggMCwgbWluKCAxMDAsICRzY29yZSApICk7Cn0KCmZ1bmN0aW9uIHZtMl9zY29yZV9iYWRnZSggJHNjb3JlICkgewogICAgaWYgKCAkc2NvcmUgPj0gNzUgKSByZXR1cm4gJzxzcGFuIGNsYXNzPSJ2bTItYmFkZ2Utc2NvcmUgdm0yLWhvdCI+8J+UpSAnIC4gJHNjb3JlIC4gJzwvc3Bhbj4nOwogICAgaWYgKCAkc2NvcmUgPj0gNDUgKSByZXR1cm4gJzxzcGFuIGNsYXNzPSJ2bTItYmFkZ2Utc2NvcmUgdm0yLXdhcm0iPuKaoSAnIC4gJHNjb3JlIC4gJzwvc3Bhbj4nOwogICAgcmV0dXJuICc8c3BhbiBjbGFzcz0idm0yLWJhZGdlLXNjb3JlIHZtMi1jb2xkIj7wn4yxICcgLiAkc2NvcmUgLiAnPC9zcGFuPic7Cn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBIRUxQRVIg4oCUIE5PUk1BTElaRSBQSE9ORSArIExBU1QxMQovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX25vcm1hbGl6ZV9waG9uZSggJHJhdyApIHsKICAgICRkID0gcHJlZ19yZXBsYWNlKCAnL1xELycsICcnLCAkcmF3ICk7CiAgICBpZiAoIHN0cmxlbigkZCkgPT09IDExICkgJGQgPSAnNTUnIC4gJGQ7CiAgICBpZiAoIHN0cmxlbigkZCkgPT09IDEwICkgJGQgPSAnNTUnIC4gJGQ7CiAgICByZXR1cm4gKCBzdHJsZW4oJGQpID49IDEyICYmIHN0cmxlbigkZCkgPD0gMTMgKSA/ICRkIDogJyc7Cn0KCmZ1bmN0aW9uIHZtMl9waG9uZV9sYXN0MTEoICRwaG9uZSApIHsKICAgIHJldHVybiBzdWJzdHIoIHByZWdfcmVwbGFjZSggJy9cRC8nLCAnJywgJHBob25lICksIC0xMSApOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gSEVMUEVSIOKAlCBHRVQgTEVBRFMgUEFSQSBBUVVFQ0VSIChtdWx0aS1mb250ZSwgcmFua2VhZG9zKQovLyBTY29yZTogS29tbW8rMTAsIERhdGFFdmVudG8rMTUuLjU1LCBIT1Qgc3RhZ2UrMjUsCi8vICAgICAgICBHYWxlcmlhIHRva2VuKzE1LCBHYWxlcmlhIGFiZXJ0YSsyNS4uNTUsCi8vICAgICAgICBDYXJyaW5obyBhYmFuZG9uYWRvKzIwCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfZ2V0X2xlYWRzX3BhcmFfYXF1ZWNlciggJGFyZ3MgPSBbXSApIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRzY29yZV9taW4gID0gKGludCkoICRhcmdzWydzY29yZV9taW4nXSA/PyAwICk7CiAgICAkbGltaXQgICAgICA9IChpbnQpKCAkYXJnc1snbGltaXQnXSAgICAgPz8gMzAwICk7CiAgICAkc3JjX2ZpbHRlciA9ICRhcmdzWydzb3VyY2UnXSA/PyAnYWxsJzsKICAgICR1c2VfY2FjaGUgID0gaXNzZXQoJGFyZ3NbJ2NhY2hlJ10pID8gKGJvb2wpJGFyZ3NbJ2NhY2hlJ10gOiB0cnVlOwoKICAgICRjYWNoZV9rZXkgPSAndm0yX2xlYWRzX2FxX3YyJzsKICAgIGlmICggJHVzZV9jYWNoZSApIHsKICAgICAgICAkY2FjaGVkID0gZ2V0X3RyYW5zaWVudCgkY2FjaGVfa2V5KTsKICAgICAgICBpZiAoICRjYWNoZWQgIT09IGZhbHNlICkgewogICAgICAgICAgICAkb3V0ID0gJHNjb3JlX21pbiA+IDAKICAgICAgICAgICAgICAgID8gYXJyYXlfdmFsdWVzKCBhcnJheV9maWx0ZXIoJGNhY2hlZCwgZm4oJGwpID0+ICRsWydzY29yZSddID49ICRzY29yZV9taW4pICkKICAgICAgICAgICAgICAgIDogYXJyYXlfdmFsdWVzKCRjYWNoZWQpOwogICAgICAgICAgICByZXR1cm4gYXJyYXlfc2xpY2UoJG91dCwgMCwgJGxpbWl0KTsKICAgICAgICB9CiAgICB9CgogICAgJHBob25lcyA9IFtdOwoKICAgIC8vIOKUgOKUgCBTb3VyY2UgMTogR2FsZXJpYSB0b2tlbnMgKDYwIGRpYXMpIOKUgOKUgAogICAgaWYgKCAkc3JjX2ZpbHRlciA9PT0gJ2FsbCcgfHwgJHNyY19maWx0ZXIgPT09ICdnYWxlcmlhJyApIHsKICAgICAgICAkcm93cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAgICAgIlNFTEVDVCB0LndoYXRzYXBwLCBhLm5vbWUgQVMgYXRyYWNhb19ub21lCiAgICAgICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXZtZ2FsX3Rva2VucyB0CiAgICAgICAgICAgICBMRUZUIEpPSU4geyR3cGRiLT5wcmVmaXh9dm1nYWxfYXRyYWNvZXMgYSBPTiBGSU5EX0lOX1NFVChhLmlkLCB0LmF0cmFjYW9faWRzKQogICAgICAgICAgICAgV0hFUkUgdC5jcmVhdGVkX2F0ID49IERBVEVfU1VCKE5PVygpLCBJTlRFUlZBTCA2MCBEQVkpCiAgICAgICAgICAgICBPUkRFUiBCWSB0LmNyZWF0ZWRfYXQgREVTQyBMSU1JVCA0MDAiCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoICggJHJvd3MgYXMgJHIgKSB7CiAgICAgICAgICAgICRwID0gdm0yX25vcm1hbGl6ZV9waG9uZSggJHItPndoYXRzYXBwICk7CiAgICAgICAgICAgIGlmICggISAkcCApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoICEgaXNzZXQoJHBob25lc1skcF0pICkgewogICAgICAgICAgICAgICAgJHBob25lc1skcF0gPSBbCiAgICAgICAgICAgICAgICAgICAgJ3Bob25lJyAgICAgICAgICA9PiAkcCwKICAgICAgICAgICAgICAgICAgICAnbmFtZScgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdkYXRhX2V2ZW50bycgICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ3N0YXR1c19pZCcgICAgICA9PiBudWxsLAogICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJyAgICAgICAgPT4gWydnYWxlcmlhJ10sCiAgICAgICAgICAgICAgICAgICAgJ2dhbGVyaWFfYXRyYWNhbycgPT4gJHItPmF0cmFjYW9fbm9tZSA/PyAnJywKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoICEgaW5fYXJyYXkoJ2dhbGVyaWEnLCAkcGhvbmVzWyRwXVsnc291cmNlcyddKSApICRwaG9uZXNbJHBdWydzb3VyY2VzJ11bXSA9ICdnYWxlcmlhJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvLyDilIDilIAgU291cmNlIDM6IENhcnJpbmhvIGFiYW5kb25hZG8gKDYwIGRpYXMpIOKUgOKUgAogICAgaWYgKCAkc3JjX2ZpbHRlciA9PT0gJ2FsbCcgfHwgJHNyY19maWx0ZXIgPT09ICdjYXJyaW5obycgKSB7CiAgICAgICAgJHJvd3MgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgICAgICJTRUxFQ1QgcGhvbmUsIHByb2R1Y3RfbmFtZQogICAgICAgICAgICAgRlJPTSB7JHdwZGItPnByZWZpeH12bV93YV9jYXB0dXJlcwogICAgICAgICAgICAgV0hFUkUgc3RhdHVzICE9ICdib3VnaHQnCiAgICAgICAgICAgICBBTkQgY2FwdHVyZWRfYXQgPj0gREFURV9TVUIoTk9XKCksIElOVEVSVkFMIDYwIERBWSkKICAgICAgICAgICAgIE9SREVSIEJZIGNhcHR1cmVkX2F0IERFU0MgTElNSVQgMzAwIgogICAgICAgICk7CiAgICAgICAgZm9yZWFjaCAoICRyb3dzIGFzICRyICkgewogICAgICAgICAgICAkcCA9IHZtMl9ub3JtYWxpemVfcGhvbmUoICRyLT5waG9uZSApOwogICAgICAgICAgICBpZiAoICEgJHAgKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKCAhIGlzc2V0KCRwaG9uZXNbJHBdKSApIHsKICAgICAgICAgICAgICAgICRwaG9uZXNbJHBdID0gWwogICAgICAgICAgICAgICAgICAgICdwaG9uZScgICAgICAgID0+ICRwLAogICAgICAgICAgICAgICAgICAgICduYW1lJyAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdkYXRhX2V2ZW50bycgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdzdGF0dXNfaWQnICAgID0+IG51bGwsCiAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnICAgICAgPT4gWydjYXJyaW5obyddLAogICAgICAgICAgICAgICAgICAgICdjYXJ0X3Byb2R1Y3QnID0+ICRyLT5wcm9kdWN0X25hbWUgPz8gJycsCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCAhIGluX2FycmF5KCdjYXJyaW5obycsICRwaG9uZXNbJHBdWydzb3VyY2VzJ10pICkgJHBob25lc1skcF1bJ3NvdXJjZXMnXVtdID0gJ2NhcnJpbmhvJzsKICAgICAgICAgICAgICAgIGlmICggZW1wdHkoJHBob25lc1skcF1bJ2NhcnRfcHJvZHVjdCddKSApICRwaG9uZXNbJHBdWydjYXJ0X3Byb2R1Y3QnXSA9ICRyLT5wcm9kdWN0X25hbWUgPz8gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCBlbXB0eSgkcGhvbmVzKSApIHJldHVybiBbXTsKCiAgICAvLyDilIDilIAgQmF0Y2ggZW5yaWNobWVudCAoMiBxdWVyaWVzLCBub3QgTsOXcGhvbmVzKSDilIDilIAKCiAgICAvLyBHYWxlcmlhOiB0b2tlbiArIHZpZXcgY291bnQgcGVyIGxhc3QtMTEKICAgICRnYWxlcmlhX21hcCA9IFtdOwogICAgJHRva19yb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICJTRUxFQ1QgUklHSFQodC53aGF0c2FwcCwgMTEpIEFTIHAxMSwKICAgICAgICAgYS5ub21lIEFTIGF0cmFjYW9fbm9tZSwKICAgICAgICAgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtZ2FsX3ZpZXdzIHYKICAgICAgICAgIFdIRVJFIHYudG9rZW5faWQgPSB0LmlkIEFORCB2LmFjYW8gIT0gJ2N0YV92aWV3JykgQVMgdmMKICAgICAgICAgRlJPTSB7JHdwZGItPnByZWZpeH12bWdhbF90b2tlbnMgdAogICAgICAgICBMRUZUIEpPSU4geyR3cGRiLT5wcmVmaXh9dm1nYWxfYXRyYWNvZXMgYSBPTiBGSU5EX0lOX1NFVChhLmlkLCB0LmF0cmFjYW9faWRzKQogICAgICAgICBXSEVSRSB0LmNyZWF0ZWRfYXQgPj0gREFURV9TVUIoTk9XKCksIElOVEVSVkFMIDYwIERBWSkKICAgICAgICAgT1JERVIgQlkgdC5jcmVhdGVkX2F0IERFU0MiCiAgICApOwogICAgZm9yZWFjaCAoICR0b2tfcm93cyBhcyAkciApIHsKICAgICAgICBpZiAoICEgaXNzZXQoJGdhbGVyaWFfbWFwWyRyLT5wMTFdKSApICRnYWxlcmlhX21hcFskci0+cDExXSA9ICRyOwogICAgfQoKICAgIC8vIENhcnJpbmhvOiBsYXRlc3QgYWJhbmRvbmVkIHByb2R1Y3QgcGVyIGxhc3QtMTEKICAgICRjYXJ0X21hcCA9IFtdOwogICAgJGNhcnRfcm93cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAiU0VMRUNUIFJJR0hUKHBob25lLCAxMSkgQVMgcDExLCBwcm9kdWN0X25hbWUKICAgICAgICAgRlJPTSB7JHdwZGItPnByZWZpeH12bV93YV9jYXB0dXJlcwogICAgICAgICBXSEVSRSBzdGF0dXMgIT0gJ2JvdWdodCcKICAgICAgICAgQU5EIGNhcHR1cmVkX2F0ID49IERBVEVfU1VCKE5PVygpLCBJTlRFUlZBTCA2MCBEQVkpCiAgICAgICAgIE9SREVSIEJZIGNhcHR1cmVkX2F0IERFU0MiCiAgICApOwogICAgZm9yZWFjaCAoICRjYXJ0X3Jvd3MgYXMgJHIgKSB7CiAgICAgICAgaWYgKCAhIGlzc2V0KCRjYXJ0X21hcFskci0+cDExXSkgKSAkY2FydF9tYXBbJHItPnAxMV0gPSAkci0+cHJvZHVjdF9uYW1lOwogICAgfQoKICAgIC8vIOKUgOKUgCBTY29yZSBlYWNoIHVuaXF1ZSBwaG9uZSDilIDilIAKICAgICRyZXN1bHRzID0gW107CiAgICBmb3JlYWNoICggJHBob25lcyBhcyAkcGhvbmUgPT4gJGJhc2UgKSB7CiAgICAgICAgJHAxMSAgICAgPSB2bTJfcGhvbmVfbGFzdDExKCRwaG9uZSk7CiAgICAgICAgJHNjb3JlICAgPSAwOwogICAgICAgICRzaWduYWxzID0gW107CgogICAgICAgIC8vIEdhbGVyaWEgKGJhdGNoIG1hcCkKICAgICAgICBpZiAoIGlzc2V0KCRnYWxlcmlhX21hcFskcDExXSkgKSB7CiAgICAgICAgICAgICRnZCA9ICRnYWxlcmlhX21hcFskcDExXTsKICAgICAgICAgICAgJHNjb3JlICs9IDE1OwogICAgICAgICAgICAkc2lnbmFsc1tdID0gWydpY29uJyA9PiAn8J+TuCcsICdsYWJlbCcgPT4gJ0dhbGVyaWE6ICcgLiAoICRnZC0+YXRyYWNhb19ub21lID8/ICc/JyApLCAncHRzJyA9PiAxNSwgJ3NyYycgPT4gJ2dhbGVyaWEnXTsKICAgICAgICAgICAgJHZjID0gKGludCkoICRnZC0+dmMgPz8gMCApOwogICAgICAgICAgICBpZiAoICR2YyA+IDAgKSB7CiAgICAgICAgICAgICAgICAkZ3B0cyA9IDI1ICsgbWluKDMwLCAkdmMgKiA1KTsKICAgICAgICAgICAgICAgICRzY29yZSArPSAkZ3B0czsKICAgICAgICAgICAgICAgICRzaWduYWxzW10gPSBbJ2ljb24nID0+ICfwn5GBJywgJ2xhYmVsJyA9PiAiQWJyaXUgKHskdmN9eCkiLCAncHRzJyA9PiAkZ3B0cywgJ3NyYycgPT4gJ2dhbGVyaWEnXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ2FycmluaG8gKGJhdGNoIG1hcCkKICAgICAgICBpZiAoIGlzc2V0KCRjYXJ0X21hcFskcDExXSkgKSB7CiAgICAgICAgICAgICRzY29yZSArPSAyMDsKICAgICAgICAgICAgJHByb2QgID0gJGNhcnRfbWFwWyRwMTFdID8gJzogJyAuIG1iX3N1YnN0cigkY2FydF9tYXBbJHAxMV0sIDAsIDI4KSA6ICcnOwogICAgICAgICAgICAkc2lnbmFsc1tdID0gWydpY29uJyA9PiAn8J+bkicsICdsYWJlbCcgPT4gIkNhcnJpbmhveyRwcm9kfSIsICdwdHMnID0+IDIwLCAnc3JjJyA9PiAnY2FycmluaG8nXTsKICAgICAgICB9CgogICAgICAgICRzY29yZSA9IG1pbigxMDAsIG1heCgwLCAkc2NvcmUpKTsKICAgICAgICBpZiAoICRzY29yZSA8ICRzY29yZV9taW4gKSBjb250aW51ZTsKICAgICAgICAkbGV2ZWwgPSAkc2NvcmUgPj0gNjAgPyAnaG90JyA6ICggJHNjb3JlID49IDMwID8gJ3dhcm0nIDogJ2NvbGQnICk7CgogICAgICAgICRyZXN1bHRzW10gPSBhcnJheV9tZXJnZSgkYmFzZSwgWwogICAgICAgICAgICAnc2NvcmUnICAgPT4gJHNjb3JlLAogICAgICAgICAgICAnc2lnbmFscycgPT4gJHNpZ25hbHMsCiAgICAgICAgICAgICdsZXZlbCcgICA9PiAkbGV2ZWwsCiAgICAgICAgICAgICdwMTEnICAgICA9PiAkcDExLAogICAgICAgIF0pOwogICAgfQoKICAgIHVzb3J0KCAkcmVzdWx0cywgZm4oJGEsICRiKSA9PiAkYlsnc2NvcmUnXSAtICRhWydzY29yZSddICk7CiAgICAkYWxsX3Jlc3VsdHMgPSBhcnJheV9zbGljZSgkcmVzdWx0cywgMCwgNTAwKTsgLy8gc3RvcmUgdXAgdG8gNTAwIGluIGNhY2hlCgogICAgaWYgKCAkdXNlX2NhY2hlICkgewogICAgICAgIHNldF90cmFuc2llbnQoJGNhY2hlX2tleSwgJGFsbF9yZXN1bHRzLCAzMCAqIE1JTlVURV9JTl9TRUNPTkRTKTsKICAgIH0KCiAgICAkb3V0ID0gJHNjb3JlX21pbiA+IDAKICAgICAgICA/IGFycmF5X3ZhbHVlcyggYXJyYXlfZmlsdGVyKCRhbGxfcmVzdWx0cywgZm4oJGwpID0+ICRsWydzY29yZSddID49ICRzY29yZV9taW4pICkKICAgICAgICA6IGFycmF5X3ZhbHVlcygkYWxsX3Jlc3VsdHMpOwogICAgcmV0dXJuIGFycmF5X3NsaWNlKCRvdXQsIDAsICRsaW1pdCk7Cn0KCmZ1bmN0aW9uIHZtMl9zdGFnZV9sYWJlbCggJHN0YXR1c19pZCApIHsKICAgICRtYXAgPSBbCiAgICAgICAgOTQzMDU2NjQgPT4gWyAn8J+UtCcsICdIT1QnLCAgICAgICAndm0yLXRhZy1ob3QnICBdLAogICAgICAgIDk0MzI1MTY3ID0+IFsgJ+KchScsICdDb250cmF0b3UnLCAndm0yLXRhZy1jb252JyBdLAogICAgICAgIDE0MiAgICAgICA9PiBbICfinYwnLCAnUGVyZGlkbycsICAndm0yLXRhZy1sb3N0JyBdLAogICAgICAgIDE0MyAgICAgICA9PiBbICfwn5eRJywgJ0xpeG8nLCAgICAgJ3ZtMi10YWctbG9zdCcgXSwKICAgIF07CiAgICBpZiAoIGlzc2V0KCAkbWFwWyAkc3RhdHVzX2lkIF0gKSApIHsKICAgICAgICBbJGljb24sICRsYWJlbCwgJGNsc10gPSAkbWFwWyAkc3RhdHVzX2lkIF07CiAgICAgICAgcmV0dXJuICI8c3BhbiBjbGFzcz0ndm0yLXRhZyAkY2xzJz4kaWNvbiAkbGFiZWw8L3NwYW4+IjsKICAgIH0KICAgIHJldHVybiAiPHNwYW4gY2xhc3M9J3ZtMi10YWcnPvCfk6UgTGVhZDwvc3Bhbj4iOwp9CgpmdW5jdGlvbiB2bTJfY29udGFjdHNfcGFnZSgpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0YWJsZSA9ICR3cGRiLT5wcmVmaXggLiAndm0yX2NvbnRhY3RzJzsKCiAgICAvLyBBdXRvLXN5bmMgc2UgdGFiZWxhIHZhemlhCiAgICAkdG90YWxfYWxsID0gKGludCkgJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSIpOwogICAgaWYgKCR0b3RhbF9hbGwgPT09IDApIHZtMl9zeW5jX2NvbnRhY3RzKCk7CgogICAgLy8gPT09IFBhcmFtcyA9PT0KICAgICRzZWFyY2ggICAgICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9HRVRbJ3MnXSAgICAgICA/PyAnJyk7CiAgICAkc3RhZ2VfZiAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfR0VUWydzdGFnZSddICAgPz8gJycpOwogICAgJHNvdXJjZV9mICAgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsnc291cmNlJ10gID8/ICcnKTsKICAgICR0aXBvX2YgICAgICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9HRVRbJ3RpcG8nXSAgICA/PyAnJyk7CiAgICAkc2NvcmVfZiAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfR0VUWydzY29yZV9mJ10gPz8gJycpOwogICAgJHN0YXR1c19mICAgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsnc3RhdHVzX2YnXSA/PyAnJyk7CiAgICAkZGF0ZV9wZXJpb2QgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfR0VUWydkcCddICAgICAgPz8gJycpOwogICAgJGRhdGVfZnJvbSAgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsnZGYnXSAgICAgID8/ICcnKTsKICAgICRkYXRlX3RvICAgICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9HRVRbJ2R0J10gICAgICA/PyAnJyk7CiAgICAkc29ydCAgICAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfR0VUWydzb3J0J10gICAgPz8gKCRkYXRlX3BlcmlvZCA/ICdldmVudG8nIDogJ2FjdGl2aXR5JykpOwogICAgJHBhZ2VkICAgICAgID0gbWF4KDEsIChpbnQpKCRfR0VUWydwYWdlZCddICAgICAgICAgID8/IDEpKTsKICAgICRwZXJfcGFnZSAgICA9IDI1OwogICAgJG9mZnNldCAgICAgID0gKCRwYWdlZCAtIDEpICogJHBlcl9wYWdlOwoKICAgIC8vID09PSBDU1YgRXhwb3J0ID09PQogICAgaWYgKCFlbXB0eSgkX0dFVFsnZXhwb3J0J10pICYmICRfR0VUWydleHBvcnQnXSA9PT0gJ2NzdicgJiYgY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSkgewogICAgICAgIC8vIHdpbGwgYnVpbGQgc2FtZSBXSEVSRSBiZWxvdyB0aGVuIGV4cG9ydAogICAgfQoKICAgIC8vID09PSBEYXRhcyBkZSByZWZlcsOqbmNpYSA9PT0KICAgICR0b2RheSAgICAgID0gd3BfZGF0ZSgnWS1tLWQnKTsKICAgICRuZXh0NyAgICAgID0gd3BfZGF0ZSgnWS1tLWQnLCBzdHJ0b3RpbWUoJys3IGRheXMnKSk7CiAgICAkbmV4dDE1ICAgICA9IHdwX2RhdGUoJ1ktbS1kJywgc3RydG90aW1lKCcrMTUgZGF5cycpKTsKICAgICRuZXh0MzAgICAgID0gd3BfZGF0ZSgnWS1tLWQnLCBzdHJ0b3RpbWUoJyszMCBkYXlzJykpOwogICAgJHdlZWtfc3RhcnQgPSB3cF9kYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgnbW9uZGF5IHRoaXMgd2VlaycpKTsKICAgICR3ZWVrX2VuZCAgID0gd3BfZGF0ZSgnWS1tLWQnLCBzdHJ0b3RpbWUoJ3N1bmRheSB0aGlzIHdlZWsnKSk7CiAgICAkbW9udGhfc3RhcnQ9IHdwX2RhdGUoJ1ktbS0wMScpOwogICAgJG1vbnRoX2VuZCAgPSB3cF9kYXRlKCdZLW0tdCcpOwogICAgJHBhc3Q2MCAgICAgPSB3cF9kYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgnLTYwIGRheXMnKSk7CgogICAgLy8gPT09IFdIRVJFIGJ1aWxkZXIgPT09CiAgICAkd2hlcmUgID0gJzE9MSc7CiAgICAkcGFyYW1zID0gW107CgogICAgaWYgKCRzZWFyY2gpIHsKICAgICAgICAkbGlrZSA9ICclJyAuICR3cGRiLT5lc2NfbGlrZSgkc2VhcmNoKSAuICclJzsKICAgICAgICAkd2hlcmUgLj0gJyBBTkQgKGMubmFtZSBMSUtFICVzIE9SIGMucGhvbmUgTElLRSAlcyBPUiBjLmVtYWlsIExJS0UgJXMgT1IgYy5nYWxlcmlhX2F0cmFjYW8gTElLRSAlcyBPUiBjLmNhcnRfcHJvZHVjdCBMSUtFICVzKSc7CiAgICAgICAgJHBhcmFtcyA9IGFycmF5X21lcmdlKCRwYXJhbXMsIFskbGlrZSwkbGlrZSwkbGlrZSwkbGlrZSwkbGlrZV0pOwogICAgfQogICAgaWYgKCRzdGFnZV9mID09PSAnaG90JykgICAgICAgICAkd2hlcmUgLj0gJyBBTkQgYy5rb21tb19zdGF0dXNfaWQgPSA5NDMwNTY2NCc7CiAgICBlbHNlaWYgKCRzdGFnZV9mID09PSAnY29udicpICAgICR3aGVyZSAuPSAnIEFORCBjLmtvbW1vX3N0YXR1c19pZCA9IDk0MzI1MTY3JzsKICAgIGVsc2VpZiAoJHN0YWdlX2YgPT09ICdsb3N0JykgICAgJHdoZXJlIC49ICcgQU5EIGMua29tbW9fc3RhdHVzX2lkIElOICgxNDIsMTQzKSc7CiAgICBlbHNlaWYgKCRzdGFnZV9mID09PSAnbm9kYXRlJykgICR3aGVyZSAuPSAnIEFORCAoYy5kYXRhX2V2ZW50byBJUyBOVUxMIE9SIGMuZGF0YV9ldmVudG8gPSAiIiknOwoKICAgIGlmICgkc3RhdHVzX2YgJiYgaW5fYXJyYXkoJHN0YXR1c19mLCBbJ25vdm8nLCdhcXVlY2VuZG8nLCdxdWVudGUnLCdjb252ZXJ0aWRvJywncGVyZGlkbyddLCB0cnVlKSkgewogICAgICAgICR3aGVyZSAuPSAnIEFORCBjLnN0YXR1cyA9ICVzJzsKICAgICAgICAkcGFyYW1zW10gPSAkc3RhdHVzX2Y7CiAgICB9CgogICAgaWYgKCRzb3VyY2VfZiAmJiBpbl9hcnJheSgkc291cmNlX2YsIFsnZ2FsZXJpYScsJ2NhcnJpbmhvJywncGVkaWRvJywnc29maWEnXSkpIHsKICAgICAgICAkd2hlcmUgLj0gJyBBTkQgYy5vcmlnZW5zIExJS0UgJXMnOwogICAgICAgICRwYXJhbXNbXSA9ICclIicgLiAkc291cmNlX2YgLiAnIiUnOwogICAgfQogICAgaWYgKCR0aXBvX2YpIHsgJHdoZXJlIC49ICcgQU5EIGMudGlwb19ldmVudG8gPSAlcyc7ICRwYXJhbXNbXSA9ICR0aXBvX2Y7IH0KCiAgICBpZiAoJHNjb3JlX2YgPT09ICdob3QnKSAgICAgICAkd2hlcmUgLj0gJyBBTkQgYy5zY29yZSA+PSA3MCc7CiAgICBlbHNlaWYgKCRzY29yZV9mID09PSAnd2FybScpICAkd2hlcmUgLj0gJyBBTkQgYy5zY29yZSA+PSA0MCBBTkQgYy5zY29yZSA8IDcwJzsKICAgIGVsc2VpZiAoJHNjb3JlX2YgPT09ICdjb2xkJykgICR3aGVyZSAuPSAnIEFORCAoYy5zY29yZSA8IDQwIE9SIGMuc2NvcmUgPSAwKSc7CgogICAgLy8gRGF0ZSBwZXJpb2QKICAgIHN3aXRjaCAoJGRhdGVfcGVyaW9kKSB7CiAgICAgICAgY2FzZSAnd2Vlayc6ICAgJHdoZXJlIC49ICcgQU5EIGMuZGF0YV9ldmVudG8gPj0gJXMgQU5EIGMuZGF0YV9ldmVudG8gPD0gJXMnOyAkcGFyYW1zW109JHdlZWtfc3RhcnQ7ICAkcGFyYW1zW109JHdlZWtfZW5kOyAgYnJlYWs7CiAgICAgICAgY2FzZSAnbW9udGgnOiAgJHdoZXJlIC49ICcgQU5EIGMuZGF0YV9ldmVudG8gPj0gJXMgQU5EIGMuZGF0YV9ldmVudG8gPD0gJXMnOyAkcGFyYW1zW109JG1vbnRoX3N0YXJ0OyAkcGFyYW1zW109JG1vbnRoX2VuZDsgYnJlYWs7CiAgICAgICAgY2FzZSAnbmV4dDE1JzogJHdoZXJlIC49ICcgQU5EIGMuZGF0YV9ldmVudG8gPj0gJXMgQU5EIGMuZGF0YV9ldmVudG8gPD0gJXMnOyAkcGFyYW1zW109JHRvZGF5OyAgICAgICAkcGFyYW1zW109JG5leHQxNTsgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnbmV4dDMwJzogJHdoZXJlIC49ICcgQU5EIGMuZGF0YV9ldmVudG8gPj0gJXMgQU5EIGMuZGF0YV9ldmVudG8gPD0gJXMnOyAkcGFyYW1zW109JHRvZGF5OyAgICAgICAkcGFyYW1zW109JG5leHQzMDsgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndXJnZW50JzogJHdoZXJlIC49ICcgQU5EIGMuZGF0YV9ldmVudG8gPj0gJXMgQU5EIGMuZGF0YV9ldmVudG8gPD0gJXMnOyAkcGFyYW1zW109JHRvZGF5OyAgICAgICAkcGFyYW1zW109JG5leHQ3OyAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncGFzdCc6ICAgJHdoZXJlIC49ICcgQU5EIGMuZGF0YV9ldmVudG8gPj0gJXMgQU5EIGMuZGF0YV9ldmVudG8gPCAlcyc7ICAkcGFyYW1zW109JHBhc3Q2MDsgICAgICAkcGFyYW1zW109JHRvZGF5OyAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnbm9kYXRlJzogJHdoZXJlIC49ICcgQU5EIChjLmRhdGFfZXZlbnRvIElTIE5VTEwgT1IgYy5kYXRhX2V2ZW50byA9ICIiKSc7IGJyZWFrOwogICAgfQogICAgaWYgKCEkZGF0ZV9wZXJpb2QpIHsKICAgICAgICBpZiAoJGRhdGVfZnJvbSkgeyAkd2hlcmUgLj0gJyBBTkQgYy5kYXRhX2V2ZW50byA+PSAlcyc7ICRwYXJhbXNbXSA9ICRkYXRlX2Zyb207IH0KICAgICAgICBpZiAoJGRhdGVfdG8pICAgeyAkd2hlcmUgLj0gJyBBTkQgYy5kYXRhX2V2ZW50byA8PSAlcyc7ICRwYXJhbXNbXSA9ICRkYXRlX3RvOyB9CiAgICB9CgogICAgLy8gPT09IFNvcnQgPT09CiAgICAkb3JkZXJfYnkgPSBtYXRjaCgkc29ydCkgewogICAgICAgICdldmVudG8nICAgICA9PiAnYy5kYXRhX2V2ZW50byBBU0MnLAogICAgICAgICdldmVudG9fZCcgICA9PiAnYy5kYXRhX2V2ZW50byBERVNDJywKICAgICAgICAnbm9tZScgICAgICAgPT4gJ2MubmFtZSBBU0MnLAogICAgICAgICdub21lX2QnICAgICA9PiAnYy5uYW1lIERFU0MnLAogICAgICAgICdhY3Rpdml0eScgICA9PiAnQ09BTEVTQ0UoYy5sYXN0X2FjdGl2aXR5LCBjLmNyZWF0ZWRfYXQpIERFU0MnLAogICAgICAgICdhY3Rpdml0eV9hJyA9PiAnQ09BTEVTQ0UoYy5sYXN0X2FjdGl2aXR5LCBjLmNyZWF0ZWRfYXQpIEFTQycsCiAgICAgICAgJ3dhJyAgICAgICAgID0+ICd3YV9jb3VudCBERVNDJywKICAgICAgICAnd2FfYScgICAgICAgPT4gJ3dhX2NvdW50IEFTQycsCiAgICAgICAgJ3Njb3JlJyAgICAgID0+ICdjLnNjb3JlIERFU0MnLAogICAgICAgIGRlZmF1bHQgICAgICA9PiAnQ09BTEVTQ0UoYy5sYXN0X2FjdGl2aXR5LCBjLmNyZWF0ZWRfYXQpIERFU0MnLAogICAgfTsKCiAgICAvLyA9PT0gUXVlcmllcyA9PT0KICAgICRiYXNlX3NxbCAgPSAiU0VMRUNUIGMuKiwKICAgICAgICAoU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm1fd2FybXVwX2xvZyB3IFdIRVJFIHcubGVhZF9pZCA9IGMua29tbW9fbGVhZF9pZCkgYXMgd2FfY291bnQKICAgICAgICBGUk9NICR0YWJsZSBjIFdIRVJFICR3aGVyZSBPUkRFUiBCWSAkb3JkZXJfYnkiOwogICAgJGNvdW50X3NxbCA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgYyBXSEVSRSAkd2hlcmUiOwoKICAgIGlmICgkcGFyYW1zKSB7CiAgICAgICAgJHRvdGFsICAgID0gKGludCkgJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoJGNvdW50X3NxbCwgLi4uJHBhcmFtcykpOwogICAgICAgICRjb250YWN0cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygkd3BkYi0+cHJlcGFyZSgiJGJhc2Vfc3FsIExJTUlUICVkIE9GRlNFVCAlZCIsIC4uLmFycmF5X21lcmdlKCRwYXJhbXMsIFskcGVyX3BhZ2UsICRvZmZzZXRdKSkpOwogICAgfSBlbHNlIHsKICAgICAgICAkdG90YWwgICAgPSAoaW50KSAkd3BkYi0+Z2V0X3ZhcigkY291bnRfc3FsKTsKICAgICAgICAkY29udGFjdHMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoJHdwZGItPnByZXBhcmUoIiRiYXNlX3NxbCBMSU1JVCAlZCBPRkZTRVQgJWQiLCAkcGVyX3BhZ2UsICRvZmZzZXQpKTsKICAgIH0KCiAgICAvLyA9PT0gQ1NWIEV4cG9ydCAoYWZ0ZXIgV0hFUkUgaXMgYnVpbHQpID09PQogICAgaWYgKCFlbXB0eSgkX0dFVFsnZXhwb3J0J10pICYmICRfR0VUWydleHBvcnQnXSA9PT0gJ2NzdicgJiYgY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSkgewogICAgICAgICRhbGxfY3N2ID0gJHBhcmFtcwogICAgICAgICAgICA/ICR3cGRiLT5nZXRfcmVzdWx0cygkd3BkYi0+cHJlcGFyZSgiJGJhc2Vfc3FsIExJTUlUIDUwMDAiLCAuLi4kcGFyYW1zKSkKICAgICAgICAgICAgOiAkd3BkYi0+Z2V0X3Jlc3VsdHMoJHdwZGItPnByZXBhcmUoIiRiYXNlX3NxbCBMSU1JVCA1MDAwIiwgNTAwMCwgMCkpOwogICAgICAgIG9iX2VuZF9jbGVhbigpOwogICAgICAgIGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2NzdjsgY2hhcnNldD1VVEYtOCcpOwogICAgICAgIGhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImNvbnRhdG9zLXZpdmFtYWlzLScgLiBkYXRlKCdZLW0tZCcpIC4gJy5jc3YiJyk7CiAgICAgICAgZWNobyAiXHhFRlx4QkJceEJGIjsgLy8gQk9NIFVURi04CiAgICAgICAgJG91dCA9IGZvcGVuKCdwaHA6Ly9vdXRwdXQnLCAndycpOwogICAgICAgIGZwdXRjc3YoJG91dCwgWydOb21lJywnVGVsZWZvbmUnLCdFbWFpbCcsJ1RpcG8gRXZlbnRvJywnRGF0YSBFdmVudG8nLCdTY29yZScsJ09yaWdlbScsJ0VzdMOhZ2lvJywnQXRyYcOnw6NvJywnQ2FuYWwgKHV0bV9zb3VyY2UpJywnQ2FtcGFuaGEgKHV0bV9jYW1wYWlnbiknLCfDmmx0aW1hIEF0aXZpZGFkZSddLCAnOycpOwogICAgICAgIGZvcmVhY2ggKCRhbGxfY3N2IGFzICRjKSB7CiAgICAgICAgICAgICRvcmlnZW5zID0gaW1wbG9kZSgnLCcsIGpzb25fZGVjb2RlKCRjLT5vcmlnZW5zLCB0cnVlKSA/OiBbXSk7CiAgICAgICAgICAgIGZwdXRjc3YoJG91dCwgWwogICAgICAgICAgICAgICAgJGMtPm5hbWUsICRjLT5waG9uZSwgJGMtPmVtYWlsLCAkYy0+dGlwb19ldmVudG8sICRjLT5kYXRhX2V2ZW50bywKICAgICAgICAgICAgICAgICRjLT5zY29yZSwgJG9yaWdlbnMsCiAgICAgICAgICAgICAgICAoJGMtPmtvbW1vX3N0YXR1c19pZCA/IHZtMl9zdGFnZV9sYWJlbCgkYy0+a29tbW9fc3RhdHVzX2lkKSA6ICdMZWFkJyksCiAgICAgICAgICAgICAgICAoJGMtPmdhbGVyaWFfYXRyYWNhbyA/OiAkYy0+Y2FydF9wcm9kdWN0KSwKICAgICAgICAgICAgICAgICgkYy0+dXRtX3NvdXJjZSA/PyAnJyksICgkYy0+dXRtX2NhbXBhaWduID8/ICcnKSwgLy8gW3YxLjUuNzZdCiAgICAgICAgICAgICAgICAkYy0+bGFzdF9hY3Rpdml0eSwKICAgICAgICAgICAgXSwgJzsnKTsKICAgICAgICB9CiAgICAgICAgZmNsb3NlKCRvdXQpOwogICAgICAgIGV4aXQ7CiAgICB9CgogICAgLy8gPT09IEtQSSBjb3VudHMgPT09CiAgICAkY250X2hvdCAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBzY29yZSA+PSA3MCIpOwogICAgJGNudF91cmdlbnQgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCR3cGRiLT5wcmVwYXJlKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgZGF0YV9ldmVudG8gPj0gJXMgQU5EIGRhdGFfZXZlbnRvIDw9ICVzIiwgJHRvZGF5LCAkbmV4dDcpKTsKICAgICRjbnRfbmV4dDMwID0gKGludCkkd3BkYi0+Z2V0X3Zhcigkd3BkYi0+cHJlcGFyZSgiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIGRhdGFfZXZlbnRvID4gJXMgQU5EIGRhdGFfZXZlbnRvIDw9ICVzIiwgJHRvZGF5LCAkbmV4dDMwKSk7CiAgICAkY250X25vZGF0ZSA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBkYXRhX2V2ZW50byBJUyBOVUxMIE9SIGRhdGFfZXZlbnRvID0gJyciKTsKICAgICRjbnRfcGFzdCAgID0gKGludCkkd3BkYi0+Z2V0X3Zhcigkd3BkYi0+cHJlcGFyZSgiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIGRhdGFfZXZlbnRvID49ICVzIEFORCBkYXRhX2V2ZW50byA8ICVzIiwgJHBhc3Q2MCwgJHRvZGF5KSk7CgogICAgLy8gPT09IFNvdXJjZSBjb3VudHMgPT09CiAgICAkY250X2dhbGVyaWEgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIG9yaWdlbnMgTElLRSAnJVwiZ2FsZXJpYVwiJSciKTsKICAgICRjbnRfY2FycmluaG8gPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgb3JpZ2VucyBMSUtFICclXCJjYXJyaW5ob1wiJSciKTsKICAgICRjbnRfcGVkaWRvICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgb3JpZ2VucyBMSUtFICclXCJwZWRpZG9cIiUnIik7CiAgICAkY250X3NvZmlhICAgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIG9yaWdlbnMgTElLRSAnJVwic29maWFcIiUnIik7CgogICAgLy8gPT09IFN0YXR1cyBjb3VudHMgPT09CiAgICAkY250X3N0X25vdm8gICAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXMgPSAnbm92bycgT1Igc3RhdHVzIElTIE5VTEwgT1Igc3RhdHVzID0gJyciKTsKICAgICRjbnRfc3RfYXF1ZWNlbmRvID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIHN0YXR1cyA9ICdhcXVlY2VuZG8nIik7CiAgICAkY250X3N0X3F1ZW50ZSAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXMgPSAncXVlbnRlJyIpOwogICAgJGNudF9zdF9jb252ZXJ0aWRvPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgc3RhdHVzID0gJ2NvbnZlcnRpZG8nIik7CiAgICAkY250X3N0X3BlcmRpZG8gICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXMgPSAncGVyZGlkbyciKTsKCiAgICAvLyA9PT0gVGlwb3MgZGlzdGludG9zID09PQogICAgJHRpcG9zID0gJHdwZGItPmdldF9jb2woIlNFTEVDVCBESVNUSU5DVCB0aXBvX2V2ZW50byBGUk9NICR0YWJsZSBXSEVSRSB0aXBvX2V2ZW50byAhPSAnJyBPUkRFUiBCWSB0aXBvX2V2ZW50byBBU0MgTElNSVQgNDAiKTsKCiAgICAkbGFzdF9zeW5jICAgPSBnZXRfb3B0aW9uKCd2bTJfY29udGFjdHNfbGFzdF9zeW5jJywgJycpOwogICAgJHRvdGFsX3BhZ2VzID0gbWF4KDEsIGNlaWwoJHRvdGFsIC8gJHBlcl9wYWdlKSk7CiAgICAkbm9uY2VfdmFsICAgPSB3cF9jcmVhdGVfbm9uY2UoJ3ZtMl9jb250YWN0X2RldGFpbCcpOwogICAgJHJlc3Rfbm9uY2UgID0gd3BfY3JlYXRlX25vbmNlKCd3cF9yZXN0Jyk7CgogICAgLy8gVVJMIGhlbHBlcnMKICAgICRhbGxfZmlsdGVycyA9IGFycmF5X2ZpbHRlcihbJ3MnPT4kc2VhcmNoLCdzdGFnZSc9PiRzdGFnZV9mLCdzb3VyY2UnPT4kc291cmNlX2YsJ3RpcG8nPT4kdGlwb19mLCdzY29yZV9mJz0+JHNjb3JlX2YsJ2RwJz0+JGRhdGVfcGVyaW9kLCdkZic9PiRkYXRlX2Zyb20sJ2R0Jz0+JGRhdGVfdG8sJ3NvcnQnPT4kc29ydCwnc3RhdHVzX2YnPT4kc3RhdHVzX2ZdKTsKICAgIC8vIEZJWCB2MS41LjE1MzogcGFnZWQ9IGRldmUgc2VyIG8gw5pMVElNTyBwYXLDom1ldHJvIHBhcmEgcXVlIGEgY29uY2F0ZW5hw6fDo28gZGUgbsO6bWVybyBmdW5jaW9uZQogICAgJGJhc2VfdXJsICAgID0gYWRkX3F1ZXJ5X2FyZyhhcnJheV9tZXJnZShbJ3BhZ2UnPT4ndm0yLWNvbnRhY3RzJ10sICRhbGxfZmlsdGVycyksIGFkbWluX3VybCgnYWRtaW4ucGhwJykpIC4gJyZwYWdlZD0nOwogICAgJGV4cG9ydF91cmwgID0gYWRkX3F1ZXJ5X2FyZyhhcnJheV9tZXJnZShbJ3BhZ2UnPT4ndm0yLWNvbnRhY3RzJywnZXhwb3J0Jz0+J2NzdiddLCAkYWxsX2ZpbHRlcnMpLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKTsKICAgICRjbGVhcl91cmwgICA9IGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLWNvbnRhY3RzJyk7CgogICAgLy8gRklYIHYxLjUuMTUzOiBpbmNsdWlyIHN0YXR1c19mIGUgc3RhZ2Ugbm9zIGxpbmtzIGRlIHNvcnQgcGFyYSBuw6NvIHBlcmRlciBmaWx0cm9zIGF0aXZvcwogICAgJF9zZiA9IGFycmF5X2ZpbHRlcihbJ3MnPT4kc2VhcmNoLCdzb3VyY2UnPT4kc291cmNlX2YsJ3RpcG8nPT4kdGlwb19mLCdzY29yZV9mJz0+JHNjb3JlX2YsJ2RwJz0+JGRhdGVfcGVyaW9kLCdkZic9PiRkYXRlX2Zyb20sJ2R0Jz0+JGRhdGVfdG8sJ3N0YXR1c19mJz0+JHN0YXR1c19mLCdzdGFnZSc9PiRzdGFnZV9mXSk7CiAgICAkX3N1ID0gZnVuY3Rpb24oc3RyaW5nICRrZXkpIHVzZSAoJF9zZik6IHN0cmluZyB7CiAgICAgICAgJHAgPSBhcnJheV9tZXJnZSgkX3NmLCBbJ3BhZ2UnPT4ndm0yLWNvbnRhY3RzJywnc29ydCc9PiRrZXldKTsKICAgICAgICByZXR1cm4gZXNjX3VybChhZG1pbl91cmwoJ2FkbWluLnBocCcpLic/Jy5odHRwX2J1aWxkX3F1ZXJ5KCRwKSk7CiAgICB9OwogICAgJF9hcnJvdyA9IGZ1bmN0aW9uKHN0cmluZyAkYSwgc3RyaW5nICRkKSB1c2UgKCRzb3J0KTogc3RyaW5nIHsKICAgICAgICBpZiAoJHNvcnQ9PT0kYSkgcmV0dXJuICcgPHNwYW4gc3R5bGU9ImNvbG9yOiMwMDczYWEiPuKGkTwvc3Bhbj4nOwogICAgICAgIGlmICgkc29ydD09PSRkKSByZXR1cm4gJyA8c3BhbiBzdHlsZT0iY29sb3I6IzAwNzNhYSI+4oaTPC9zcGFuPic7CiAgICAgICAgcmV0dXJuICcnOwogICAgfTsKCiAgICAvLyBBY3RpdmUgZmlsdGVyIGxhYmVscwogICAgJGFjdGl2ZV9sYWJlbHMgPSBbXTsKICAgIGlmICgkc2VhcmNoKSAgICAgICRhY3RpdmVfbGFiZWxzW10gPSBbJ/CflI0gIicgLiBlc2NfaHRtbCgkc2VhcmNoKSAuICciJywgJ3MnXTsKICAgIGlmICgkc3RhZ2VfZikgICAgICRhY3RpdmVfbGFiZWxzW10gPSBbJ/Cfj7fvuI8gJyAuIFsnaG90Jz0+J0hPVCcsJ2NvbnYnPT4nQ29udHJhdG91JywnbG9zdCc9PidQZXJkaWRvJywnbm9kYXRlJz0+J1NlbSBkYXRhJ11bJHN0YWdlX2ZdID8/ICRzdGFnZV9mLCAnc3RhZ2UnXTsKICAgICRzdF9sYWJlbHMgPSBbJ25vdm8nPT4n8J+GlSBOb3ZvJywnYXF1ZWNlbmRvJz0+J/CflKUgQXF1ZWNlbmRvJywncXVlbnRlJz0+J/CflLQgUXVlbnRlJywnY29udmVydGlkbyc9PifinIUgQ29udmVydGlkbycsJ3BlcmRpZG8nPT4n4p2MIFBlcmRpZG8nXTsKICAgIGlmICgkc3RhdHVzX2YpICAgICRhY3RpdmVfbGFiZWxzW10gPSBbJHN0X2xhYmVsc1skc3RhdHVzX2ZdID8/ICRzdGF0dXNfZiwgJ3N0YXR1c19mJ107CiAgICBpZiAoJHNvdXJjZV9mKSAgICAkYWN0aXZlX2xhYmVsc1tdID0gWyfwn5OMICcgLiB1Y2ZpcnN0KCRzb3VyY2VfZiksICdzb3VyY2UnXTsKICAgIGlmICgkdGlwb19mKSAgICAgICRhY3RpdmVfbGFiZWxzW10gPSBbJ/CfjokgJyAuIGVzY19odG1sKCR0aXBvX2YpLCAndGlwbyddOwogICAgaWYgKCRzY29yZV9mKSAgICAgJGFjdGl2ZV9sYWJlbHNbXSA9IFsn4pqhIFNjb3JlICcgLiB1Y2ZpcnN0KCRzY29yZV9mKSwgJ3Njb3JlX2YnXTsKICAgICRkcF9sYWJlbHMgPSBbJ3dlZWsnPT4nRXN0YSBzZW1hbmEnLCdtb250aCc9PidFc3RlIG3DqnMnLCduZXh0MTUnPT4nUHLDs3guIDE1ZCcsJ25leHQzMCc9PidQcsOzeC4gMzBkJywndXJnZW50Jz0+J/CflKUgVXJnZW50ZScsJ3Bhc3QnPT4nSsOhIHBhc3NvdScsJ25vZGF0ZSc9PidTZW0gZGF0YSddOwogICAgaWYgKCRkYXRlX3BlcmlvZCkgJGFjdGl2ZV9sYWJlbHNbXSA9IFsn8J+ThSAnIC4gKCRkcF9sYWJlbHNbJGRhdGVfcGVyaW9kXSA/PyAkZGF0ZV9wZXJpb2QpLCAnZHAnXTsKICAgIGlmICgkZGF0ZV9mcm9tKSAgICRhY3RpdmVfbGFiZWxzW10gPSBbJ/Cfk4UgRGUgJyAuIGVzY19odG1sKCRkYXRlX2Zyb20pLCAnZGYnXTsKICAgIGlmICgkZGF0ZV90bykgICAgICRhY3RpdmVfbGFiZWxzW10gPSBbJ/Cfk4UgQXTDqSAnIC4gZXNjX2h0bWwoJGRhdGVfdG8pLCAnZHQnXTsKCiAgICAvLyBSZWxhdGl2ZSBldmVudCBkYXRlIGJhZGdlIGhlbHBlcgogICAgJGV2X2JhZGdlID0gZnVuY3Rpb24oc3RyaW5nICRldl9kYXRlKSB1c2UgKCR0b2RheSk6IHN0cmluZyB7CiAgICAgICAgaWYgKCEkZXZfZGF0ZSkgcmV0dXJuICc8c3BhbiBzdHlsZT0iY29sb3I6I2NjYztmb250LXNpemU6MTFweCI+4oCUPC9zcGFuPic7CiAgICAgICAgJHRzICAgICAgPSBzdHJ0b3RpbWUoJGV2X2RhdGUpOwogICAgICAgIGlmICghJHRzKSByZXR1cm4gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweCI+Jy5lc2NfaHRtbCgkZXZfZGF0ZSkuJzwvc3Bhbj4nOwogICAgICAgICRmbXQgICAgID0gZGF0ZSgnZC9tL1knLCAkdHMpOwogICAgICAgICRkaWZmICAgID0gKGludCkoKCR0cyAtIHN0cnRvdGltZSgkdG9kYXkpKSAvIDg2NDAwKTsKICAgICAgICBpZiAoJGRpZmYgPT09IDApCiAgICAgICAgICAgIHJldHVybiAiPHNwYW4gc3R5bGU9J2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZDYzNjM4Jz7wn5S0IEhPSkU8L3NwYW4+IjsKICAgICAgICBpZiAoJGRpZmYgPiAwICYmICRkaWZmIDw9IDcpCiAgICAgICAgICAgIHJldHVybiAiPHNwYW4gc3R5bGU9J2NvbG9yOiNkNjM2Mzg7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4Jz7wn5SlICRmbXQ8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTBweDtjb2xvcjojZDYzNjM4Jz5lbSAkZGlmZiBkaWEiLigkZGlmZj4xPydzJzonJykuIjwvc3Bhbj4iOwogICAgICAgIGlmICgkZGlmZiA+IDcgJiYgJGRpZmYgPD0gMzApCiAgICAgICAgICAgIHJldHVybiAiPHNwYW4gc3R5bGU9J2NvbG9yOiNjNzc3MDA7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4Jz7imqEgJGZtdDwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiNjNzc3MDAnPmVtICRkaWZmIGRpYXM8L3NwYW4+IjsKICAgICAgICBpZiAoJGRpZmYgPiAzMCkKICAgICAgICAgICAgcmV0dXJuICI8c3BhbiBzdHlsZT0nY29sb3I6IzIyNzFiMTtmb250LXNpemU6MTJweCc+JGZtdDwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiNiYmInPmVtICRkaWZmIGRpYXM8L3NwYW4+IjsKICAgICAgICAvLyBQYXN0CiAgICAgICAgJGFnbyA9IGFicygkZGlmZik7CiAgICAgICAgaWYgKCRhZ28gPD0gNjApCiAgICAgICAgICAgIHJldHVybiAiPHNwYW4gc3R5bGU9J2NvbG9yOiM4ODg7Zm9udC1zaXplOjEycHgnPiRmbXQ8L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTBweDtjb2xvcjojYWFhJz5wYXNzb3UgeyRhZ299ZDwvc3Bhbj4iOwogICAgICAgIHJldHVybiAiPHNwYW4gc3R5bGU9J2NvbG9yOiNjY2M7Zm9udC1zaXplOjExcHgnPiRmbXQ8L3NwYW4+IjsKICAgIH07CiAgICA/PgogICAgPGRpdiBjbGFzcz0id3JhcCB2bTItd3JhcCI+CiAgICA8c3R5bGU+CiAgICAudm0yLXdyYXB7bWF4LXdpZHRoOjEzNjBweDttYXJnaW46MCBhdXRvO3BhZGRpbmc6MjBweCAwfQogICAgLnZtMi1wYWdlLWhlYWRlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206MTRweDtmbGV4LXdyYXA6d3JhcH0KICAgIC52bTItcGFnZS1oZWFkZXIgaDF7bWFyZ2luOjA7Zm9udC1zaXplOjIycHg7Zm9udC13ZWlnaHQ6NzAwfQogICAgLyogS1BJIGNhcmRzICovCiAgICAudm0yYy1rcGlze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsMWZyKTtnYXA6MTBweDttYXJnaW4tYm90dG9tOjE0cHh9CiAgICBAbWVkaWEobWluLXdpZHRoOjYwMHB4KXsudm0yYy1rcGlze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMywxZnIpfX0KICAgIEBtZWRpYShtaW4td2lkdGg6OTAwcHgpey52bTJjLWtwaXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg1LDFmcil9fQogICAgLnZtMmMta3Bpe2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNHB4IDE2cHg7Ym94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDAsMCwuMDcpO2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjpub25lO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtib3JkZXI6MnB4IHNvbGlkIHRyYW5zcGFyZW50O3RyYW5zaXRpb246LjE1c30KICAgIC52bTJjLWtwaTpob3Zlcntib3gtc2hhZG93OjAgM3B4IDEwcHggcmdiYSgwLDAsMCwuMTIpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpfQogICAgLnZtMmMta3BpLmFjdGl2ZXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yfQogICAgLnZtMmMta3BpIC5rcGktdmFse2ZvbnQtc2l6ZToyNnB4O2ZvbnQtd2VpZ2h0OjgwMDtsaW5lLWhlaWdodDoxfQogICAgLnZtMmMta3BpIC5rcGktbGJse2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjRweDtvcGFjaXR5Oi43NX0KICAgIC5rcGktaG90e2NvbG9yOiNkNjM2Mzh9LmtwaS11cmdlbnR7Y29sb3I6I2Q2MzYzOH0ua3BpLW5leHQzMHtjb2xvcjojYzc3NzAwfS5rcGktbm9kYXRle2NvbG9yOiM1NzYwNmF9LmtwaS1wYXN0e2NvbG9yOiM4ODh9CiAgICAvKiBTb3VyY2UgcGlsbHMgKi8KICAgIC52bTItc291cmNlLWJhcntkaXNwbGF5OmZsZXg7Z2FwOjdweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tYm90dG9tOjEwcHh9CiAgICAudm0yLXNvdXJjZS1idG57cGFkZGluZzo1cHggMTRweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO3RleHQtZGVjb3JhdGlvbjpub25lO2JvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjouMTVzO3doaXRlLXNwYWNlOm5vd3JhcH0KICAgIC52bTItc291cmNlLWJ0bi5hbGx7YmFja2dyb3VuZDojZjBmNGZmO2NvbG9yOiMyMjcxYjE7Ym9yZGVyLWNvbG9yOiNjOGQ4ZmZ9CiAgICAudm0yLXNvdXJjZS1idG4ua29tbW97YmFja2dyb3VuZDojZmZmMGYwO2NvbG9yOiNkNjM2Mzg7Ym9yZGVyLWNvbG9yOiNmZmM4Yzh9CiAgICAudm0yLXNvdXJjZS1idG4uZ2FsZXJpYXtiYWNrZ3JvdW5kOiNmMGU4ZmY7Y29sb3I6IzZiMjFhODtib3JkZXItY29sb3I6I2Q5YjNmZn0KICAgIC52bTItc291cmNlLWJ0bi5jYXJyaW5ob3tiYWNrZ3JvdW5kOiNmZmY4ZTc7Y29sb3I6I2M3NzcwMDtib3JkZXItY29sb3I6I2ZmZDk3YX0KICAgIC52bTItc291cmNlLWJ0bi5wZWRpZG97YmFja2dyb3VuZDojZThmNWU5O2NvbG9yOiMyZTdkMzI7Ym9yZGVyLWNvbG9yOiNiMmRmZGJ9CiAgICAudm0yLXNvdXJjZS1idG4uc29maWF7YmFja2dyb3VuZDojZmRmMGZmO2NvbG9yOiM3YzNhZWQ7Ym9yZGVyLWNvbG9yOiNkOGI0ZmV9CiAgICAudm0yLXNvdXJjZS1idG4uYWN0aXZle2ZvbnQtd2VpZ2h0OjgwMDtib3gtc2hhZG93OjAgMXB4IDZweCByZ2JhKDAsMCwwLC4xMyl9CiAgICAvKiBTdGF0dXMgcGlsbHMgKi8KICAgIC52bTItc3RhdHVzLWJhcntkaXNwbGF5OmZsZXg7Z2FwOjdweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tYm90dG9tOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyfQogICAgLnZtMi1zdGF0dXMtYmFyIC52bTItc3QtbGFiZWx7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjojODg4O2xldHRlci1zcGFjaW5nOi40cHg7bWFyZ2luLXJpZ2h0OjJweH0KICAgIC52bTItc3RhdHVzLXBpbGx7cGFkZGluZzo1cHggMTRweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO3RleHQtZGVjb3JhdGlvbjpub25lO2JvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjouMTVzO3doaXRlLXNwYWNlOm5vd3JhcH0KICAgIC52bTItc3RhdHVzLXBpbGw6aG92ZXJ7Ym94LXNoYWRvdzowIDFweCA2cHggcmdiYSgwLDAsMCwuMTMpfQogICAgLnZtMi1zdGF0dXMtcGlsbC5zdC1ub3Zve2JhY2tncm91bmQ6I2YwZjRmZjtjb2xvcjojMjI3MWIxO2JvcmRlci1jb2xvcjojYzhkOGZmfQogICAgLnZtMi1zdGF0dXMtcGlsbC5zdC1hcXVlY2VuZG97YmFja2dyb3VuZDojZmZmOGU3O2NvbG9yOiNjNzc3MDA7Ym9yZGVyLWNvbG9yOiNmZmQ5N2F9CiAgICAudm0yLXN0YXR1cy1waWxsLnN0LXF1ZW50ZXtiYWNrZ3JvdW5kOiNmZmYwZjA7Y29sb3I6I2Q2MzYzODtib3JkZXItY29sb3I6I2ZmYzhjOH0KICAgIC52bTItc3RhdHVzLXBpbGwuc3QtY29udmVydGlkb3tiYWNrZ3JvdW5kOiNlOGY1ZTk7Y29sb3I6IzJlN2QzMjtib3JkZXItY29sb3I6I2IyZGZkYn0KICAgIC52bTItc3RhdHVzLXBpbGwuc3QtcGVyZGlkb3tiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6IzY2Njtib3JkZXItY29sb3I6I2RkZH0KICAgIC52bTItc3RhdHVzLXBpbGwuYWN0aXZle2ZvbnQtd2VpZ2h0OjgwMDtib3gtc2hhZG93OjAgMXB4IDZweCByZ2JhKDAsMCwwLC4xMyl9CiAgICAvKiBGaWx0ZXIgYmFyICovCiAgICAudm0yYy1maWx0ZXItYmFye2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNHB4IDE2cHg7Ym94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDAsMCwuMDcpO21hcmdpbi1ib3R0b206MTBweH0KICAgIC52bTJjLWZpbHRlci1yb3d7ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6ZmxleC1lbmQ7bWFyZ2luLWJvdHRvbToxMHB4fQogICAgLnZtMmMtZmlsdGVyLXJvdzpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0KICAgIC52bTJjLWZpZWxke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweH0KICAgIC52bTJjLWZpZWxkIGxhYmVse2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6Izg4ODtsZXR0ZXItc3BhY2luZzouNHB4fQogICAgLnZtMmMtZmllbGQgaW5wdXQsLnZtMmMtZmllbGQgc2VsZWN0e3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkN2RlO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4O2JhY2tncm91bmQ6I2ZmZn0KICAgIC52bTJjLWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXXt3aWR0aDoyMDBweH0KICAgIC52bTJjLWZpZWxkIHNlbGVjdHttaW4td2lkdGg6MTQwcHh9CiAgICAvKiBEYXRlIHBlcmlvZCBwaWxscyAqLwogICAgLnZtMmMtZHAtcGlsbHN7ZGlzcGxheTpmbGV4O2dhcDo2cHg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyfQogICAgLnZtMmMtZHAtcGlsbHtwYWRkaW5nOjVweCAxMnB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ym9yZGVyOjEuNXB4IHNvbGlkICNkMGQ3ZGU7Y29sb3I6IzU3NjA2YTtiYWNrZ3JvdW5kOiNmNmY4ZmE7d2hpdGUtc3BhY2U6bm93cmFwO3RyYW5zaXRpb246LjEyc30KICAgIC52bTJjLWRwLXBpbGw6aG92ZXJ7YmFja2dyb3VuZDojZThlYWVkfQogICAgLnZtMmMtZHAtcGlsbC5hY3RpdmV7YmFja2dyb3VuZDojMjI3MWIxO2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiMyMjcxYjF9CiAgICAudm0yYy1kcC1waWxsLnVyZ2VudHtib3JkZXItY29sb3I6I2ZmYzhjODtjb2xvcjojZDYzNjM4O2JhY2tncm91bmQ6I2ZmZjBmMH0KICAgIC52bTJjLWRwLXBpbGwudXJnZW50LmFjdGl2ZXtiYWNrZ3JvdW5kOiNkNjM2Mzg7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2Q2MzYzOH0KICAgIC8qIEFjdGl2ZSBmaWx0ZXIgY2hpcHMgKi8KICAgIC52bTJjLWFjdGl2ZS1maWx0ZXJze2Rpc3BsYXk6ZmxleDtnYXA6NnB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1ib3R0b206MTBweDthbGlnbi1pdGVtczpjZW50ZXJ9CiAgICAudm0yYy1jaGlwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHg7cGFkZGluZzozcHggMTBweDtiYWNrZ3JvdW5kOiNlOGYwZmU7Y29sb3I6IzFhNTZkYjtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwfQogICAgLnZtMmMtY2hpcCBhe2NvbG9yOiMxYTU2ZGI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWFyZ2luLWxlZnQ6MnB4O2ZvbnQtd2VpZ2h0OjcwMH0KICAgIC8qIFRhYmxlICovCiAgICAudm0yLWNvbnRhY3RzLXRhYmxle3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHg7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsLjA3KX0KICAgIC52bTItY29udGFjdHMtdGFibGUgdGh7YmFja2dyb3VuZDojZjZmOGZhO3BhZGRpbmc6MTBweCAxMnB4O3RleHQtYWxpZ246bGVmdDtmb250LXNpemU6MTFweDtjb2xvcjojNTc2MDZhO2ZvbnQtd2VpZ2h0OjcwMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZThlYWVkO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjNweH0KICAgIC52bTItY29udGFjdHMtdGFibGUgdGR7cGFkZGluZzoxMHB4IDEycHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YwZjBmMDtmb250LXNpemU6MTNweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9CiAgICAudm0yLWNvbnRhY3RzLXRhYmxlIHRyOmxhc3QtY2hpbGQgdGR7Ym9yZGVyLWJvdHRvbTpub25lfQogICAgLnZtMi1jb250YWN0cy10YWJsZSB0cjpob3ZlciB0ZHtiYWNrZ3JvdW5kOiNmOWZhZmI7Y3Vyc29yOnBvaW50ZXJ9CiAgICAudm0yLW5hbWV7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxZDIzMjc7Zm9udC1zaXplOjEzcHh9CiAgICAudm0yLXBob25le2NvbG9yOiM1NzYwNmE7Zm9udC1zaXplOjExcHh9CiAgICAudm0yLXRhZ3tkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2JhY2tncm91bmQ6I2YwZjRmZjtjb2xvcjojMjI3MWIxfQogICAgLnZtMi10YWctaG90e2JhY2tncm91bmQ6I2ZmZjBmMDtjb2xvcjojZDYzNjM4fQogICAgLnZtMi10YWctY29udntiYWNrZ3JvdW5kOiNlOGY1ZTk7Y29sb3I6IzJlN2QzMn0KICAgIC52bTItdGFnLWxvc3R7YmFja2dyb3VuZDojZjVmNWY1O2NvbG9yOiM4ODh9CiAgICAudm0yLW9yaWdpbi1iYWRnZXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjJweCA2cHg7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbjoxcHh9CiAgICAub2Ita29tbW97YmFja2dyb3VuZDojZmZmMGYwO2NvbG9yOiNkNjM2Mzh9Lm9iLWdhbGVyaWF7YmFja2dyb3VuZDojZjBlOGZmO2NvbG9yOiM2YjIxYTh9CiAgICAub2ItY2FycmluaG97YmFja2dyb3VuZDojZmZmOGU3O2NvbG9yOiNjNzc3MDB9Lm9iLXBlZGlkb3tiYWNrZ3JvdW5kOiNlOGY1ZTk7Y29sb3I6IzJlN2QzMn0ub2Itc29maWF7YmFja2dyb3VuZDojZmRmMGZmO2NvbG9yOiM3YzNhZWR9Lm9iLXdhYmF7YmFja2dyb3VuZDojZTdmM2ZmO2NvbG9yOiMwODY2ZmZ9Lm9iLWdydXBvLXZpcHtiYWNrZ3JvdW5kOiNmZmY4ZTA7Y29sb3I6I2I0NTMwOX0ub2Itc2FpdS12aXB7YmFja2dyb3VuZDojZjNmNGY2O2NvbG9yOiM2YjcyODB9CiAgICAudm0yLWFjdGlvbnMgYXtjb2xvcjojMjI3MWIxO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi1yaWdodDo0cHh9CiAgICAudm0yLWFjdGlvbnMgYTpob3ZlcntvcGFjaXR5Oi43fQogICAgLnZtMi1jb3VudC1iYWRnZXtiYWNrZ3JvdW5kOiNlZWYyZmY7Y29sb3I6IzIyNzFiMTtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoxMnB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMH0KICAgIC52bTJjLXNjb3JlLWhvdHtiYWNrZ3JvdW5kOiNmZmYwZjA7Y29sb3I6I2Q2MzYzODtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwfQogICAgLnZtMmMtc2NvcmUtd2FybXtiYWNrZ3JvdW5kOiNmZmY4ZTc7Y29sb3I6I2M3NzcwMDtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwfQogICAgLnZtMmMtc2NvcmUtY29sZHtiYWNrZ3JvdW5kOiNmMGY0ZmY7Y29sb3I6IzIyNzFiMTtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwfQogICAgLnZtMmMtdGlwb3tkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjJweCA3cHg7YmFja2dyb3VuZDojZjBmZGY0O2NvbG9yOiMxNmEzNGE7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwfQogICAgLnZtMi1wYWdpbmF0aW9ue2Rpc3BsYXk6ZmxleDtnYXA6NnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luLXRvcDoxNnB4O2ZsZXgtd3JhcDp3cmFwfQogICAgLnZtMi1wYWdpbmF0aW9uIGEsLnZtMi1wYWdpbmF0aW9uIHNwYW57cGFkZGluZzo1cHggMTFweDtib3JkZXI6MXB4IHNvbGlkICNkMGQ3ZGU7Ym9yZGVyLXJhZGl1czo1cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzIyNzFiMX0KICAgIC52bTItcGFnaW5hdGlvbiBzcGFuLmN1cnJlbnR7YmFja2dyb3VuZDojMjI3MWIxO2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiMyMjcxYjF9CiAgICAudm0yLWVtcHR5LXN0YXRle3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NjBweCAyMHB4O2NvbG9yOiM1NzYwNmE7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTBweH0KICAgIC52bTItZW1wdHktc3RhdGUgLnZtMi1lbXB0eS1pY29ue2ZvbnQtc2l6ZTo0OHB4O21hcmdpbi1ib3R0b206MTJweH0KICAgIC8qIE1vZGFsICovCiAgICAudm0yLW1vZGFsLW92ZXJsYXl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC40NSk7ei1pbmRleDo5OTk5OX0KICAgIC52bTItbW9kYWwtb3ZlcmxheS5vcGVue2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0KICAgIC52bTItbW9kYWwtcGFuZWx7d2lkdGg6NTIwcHg7bWF4LXdpZHRoOjEwMHZ3O2hlaWdodDoxMDB2aDtiYWNrZ3JvdW5kOiNmZmY7b3ZlcmZsb3cteTphdXRvO2JveC1zaGFkb3c6LTRweCAwIDI0cHggcmdiYSgwLDAsMCwuMTgpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59CiAgICAudm0yLW1vZGFsLWhlYWRlcntwYWRkaW5nOjIwcHggMjRweCAxNnB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlOGVhZWQ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpzdGlja3k7dG9wOjA7YmFja2dyb3VuZDojZmZmO3otaW5kZXg6MX0KICAgIC52bTItbW9kYWwtYm9keXtwYWRkaW5nOjIwcHggMjRweDtmbGV4OjF9CiAgICAudm0yLW1vZGFsLWNsb3Nle2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MjJweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNTc2MDZhO2xpbmUtaGVpZ2h0OjF9CiAgICAudm0yLW1vZGFsLWFjdGlvbnN7cGFkZGluZzoxNnB4IDI0cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U4ZWFlZDtkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcH0KICAgIC52bTItbW9kYWwtYWN0aW9ucyBhe3BhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC13ZWlnaHQ6NjAwfQogICAgLnZtMi1idG4td2F7YmFja2dyb3VuZDojMjVEMzY2O2NvbG9yOiNmZmZ9CiAgICAudm0yLWJ0bi1rb21tb3tiYWNrZ3JvdW5kOiM0YTkwZTI7Y29sb3I6I2ZmZn0KICAgIC52bTItYnRuLXNte3BhZGRpbmc6N3B4IDE0cHg7YmFja2dyb3VuZDojMjI3MWIxO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo2cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEzcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9CiAgICAjdm0yU3luY0J0bi5zeW5jaW5ne29wYWNpdHk6LjY7cG9pbnRlci1ldmVudHM6bm9uZX0KICAgIC52bTJjLWRhdGUtcmFuZ2V7ZGlzcGxheTpub25lO2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1lbmQ7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDo4cHh9CiAgICAudm0yYy1kYXRlLXJhbmdlLnNob3d7ZGlzcGxheTpmbGV4fQogICAgQG1lZGlhKG1heC13aWR0aDo3NjhweCl7CiAgICAgICAgLnZtMi1jb250YWN0cy10YWJsZXtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0b30KICAgICAgICAudm0yLW1vZGFsLXBhbmVse3dpZHRoOjEwMHZ3fQogICAgICAgIC52bTJjLWZpZWxkIGlucHV0W3R5cGU9c2VhcmNoXXt3aWR0aDoxMDAlfQogICAgICAgIC52bTItY29udGFjdHMtdGFibGUgdGg6bnRoLWNoaWxkKDcpLC52bTItY29udGFjdHMtdGFibGUgdGQ6bnRoLWNoaWxkKDcpLAogICAgICAgIC52bTItY29udGFjdHMtdGFibGUgdGg6bnRoLWNoaWxkKDkpLC52bTItY29udGFjdHMtdGFibGUgdGQ6bnRoLWNoaWxkKDkpe2Rpc3BsYXk6bm9uZX0KICAgIH0KICAgIDwvc3R5bGU+CgogICAgPCEtLSBIZWFkZXIgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItcGFnZS1oZWFkZXIiPgogICAgICAgIDxoMT7wn5GlIENvbnRhdG9zPC9oMT4KICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWNvdW50LWJhZGdlIj48P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJHRvdGFsX2FsbCk7ID8+IHVuaWZpY2Fkb3M8L3NwYW4+CiAgICAgICAgPD9waHAgaWYgKCRsYXN0X3N5bmMpOiA/PgogICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojODg4Ij5TeW5jOiA8P3BocCBlY2hvIHZtMl9sb2NhbF9kYXRlKCdkL20gSDppJywgJGxhc3Rfc3luYyk7ID8+PC9zcGFuPgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG87ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXAiPgogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGV4cG9ydF91cmwpOyA/PiIgY2xhc3M9InZtMi1idG4tc20iIHN0eWxlPSJiYWNrZ3JvdW5kOiMxNmEzNGEiIHRpdGxlPSJFeHBvcnRhciBjb250YXRvcyBmaWx0cmFkb3MiPvCfk6UgQ1NWPC9hPgogICAgICAgICAgICA8YnV0dG9uIGlkPSJ2bTJTeW5jQnRuIiBzdHlsZT0icGFkZGluZzo3cHggMTZweDtiYWNrZ3JvdW5kOiMwZDk0ODg7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjZweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDAiPgogICAgICAgICAgICAgICAg8J+UhCBTeW5jCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBLUEkgQ2FyZHMgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTJjLWtwaXMiPgogICAgICAgIDw/cGhwCiAgICAgICAgJGtwaXMgPSBbCiAgICAgICAgICAgIFsn8J+UpScsJ0hPVCcsImNvbG9yOiNkNjM2MzgiLCdrcGktaG90Jywnc2NvcmVfZicsJ2hvdCcsJGNudF9ob3QsJ0xlYWRzIGVuZ2FqYWRvcyddLAogICAgICAgICAgICBbJ+KaoScsJ1VyZ2VudGUnLCJjb2xvcjojZDYzNjM4Iiwna3BpLXVyZ2VudCcsJ2RwJywndXJnZW50JywkY250X3VyZ2VudCwnRXZlbnRvIGVtIDcgZGlhcyddLAogICAgICAgICAgICBbJ/Cfk4UnLCdQcsOzeC4gMzBkJywiY29sb3I6I2M3NzcwMCIsJ2twaS1uZXh0MzAnLCdkcCcsJ25leHQzMCcsJGNudF9uZXh0MzAsJ0V2ZW50b3MgZXN0ZSBtw6pzJ10sCiAgICAgICAgICAgIFsn4pqg77iPJywnU2VtIERhdGEnLCJjb2xvcjojNTc2MDZhIiwna3BpLW5vZGF0ZScsJ2RwJywnbm9kYXRlJywkY250X25vZGF0ZSwnTGVhZHMgc2VtIGRhdGEnXSwKICAgICAgICAgICAgWyfwn5WQJywnSsOhIFBhc3NvdScsImNvbG9yOiM4ODgiLCdrcGktcGFzdCcsJ2RwJywncGFzdCcsJGNudF9wYXN0LCfDmmx0LiA2MCBkaWFzJ10sCiAgICAgICAgXTsKICAgICAgICBmb3JlYWNoICgka3BpcyBhcyBbJGljb24sICR0aXRsZSwgJHN0eWxlLCAkY2xzLCAkcGFyYW1fa2V5LCAkcGFyYW1fdmFsLCAkY250LCAkc3ViXSk6CiAgICAgICAgICAgICRpc19hY3RpdmUgPSAoaXNzZXQoJF9HRVRbJHBhcmFtX2tleV0pICYmICRfR0VUWyRwYXJhbV9rZXldID09PSAkcGFyYW1fdmFsKTsKICAgICAgICAgICAgJGtwaV91cmwgICA9IGFkZF9xdWVyeV9hcmcoWydwYWdlJz0+J3ZtMi1jb250YWN0cycsICRwYXJhbV9rZXk9PiRwYXJhbV92YWwsJ3BhZ2VkJz0+MV0sIGFkbWluX3VybCgnYWRtaW4ucGhwJykpOwogICAgICAgICAgICAkY2xlYXJfa3BpID0gYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWNvbnRhY3RzJywgJHBhcmFtX2tleT0+JycsJ3BhZ2VkJz0+MV0sIGFkbWluX3VybCgnYWRtaW4ucGhwJykpOwogICAgICAgID8+CiAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRpc19hY3RpdmUgPyAkY2xlYXJfa3BpIDogJGtwaV91cmwpOyA/PiIKICAgICAgICAgICBjbGFzcz0idm0yYy1rcGkgPD9waHAgZWNobyAkY2xzOyA/PiA8P3BocCBlY2hvICRpc19hY3RpdmUgPyAnYWN0aXZlJyA6ICcnOyA/PiIKICAgICAgICAgICBzdHlsZT0iPD9waHAgZWNobyAkc3R5bGU7ID8+IiB0aXRsZT0iPD9waHAgZWNobyBlc2NfYXR0cigkc3ViKTsgPz4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJrcGktdmFsIj48P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJGNudCk7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImtwaS1sYmwiPjw/cGhwIGVjaG8gJGljb247ID8+IDw/cGhwIGVjaG8gJHRpdGxlOyA/PjwvZGl2PgogICAgICAgIDwvYT4KICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgPC9kaXY+CgogICAgPCEtLSBTb3VyY2UgUGlsbHMgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItc291cmNlLWJhciI+CiAgICAgICAgPD9waHAKICAgICAgICAkc291cmNlcyA9IFsKICAgICAgICAgICAgWydhbGwnLCfwn4yQIFRvZG9zJywnYWxsJywkdG90YWxfYWxsLCcnXSwKICAgICAgICAgICAgWydnYWxlcmlhJywn8J+TuCBHYWxlcmlhJywnZ2FsZXJpYScsJGNudF9nYWxlcmlhLCdnYWxlcmlhJ10sCiAgICAgICAgICAgIFsnY2FycmluaG8nLCfwn5uSIENhcnJpbmhvJywnY2FycmluaG8nLCRjbnRfY2FycmluaG8sJ2NhcnJpbmhvJ10sCiAgICAgICAgICAgIFsncGVkaWRvJywn8J+TpiBQZWRpZG8nLCdwZWRpZG8nLCRjbnRfcGVkaWRvLCdwZWRpZG8nXSwKICAgICAgICAgICAgWydzb2ZpYScsJ/Cfp6AgU29mSUEnLCdzb2ZpYScsJGNudF9zb2ZpYSwnc29maWEnXSwKICAgICAgICBdOwogICAgICAgIGZvcmVhY2ggKCRzb3VyY2VzIGFzIFskY2xzLCAkbGJsLCAkdmFsLCAkY250LCAkc3ZdKToKICAgICAgICAgICAgJGFjdGl2ZV9zcmMgPSAoISRzdiAmJiAhJHNvdXJjZV9mKSB8fCAoJHN2ICYmICRzb3VyY2VfZiA9PT0gJHN2KTsKICAgICAgICAgICAgJHNyY191cmwgPSAkc3YKICAgICAgICAgICAgICAgID8gYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWNvbnRhY3RzJywnc291cmNlJz0+JHN2LCdwYWdlZCc9PjFdLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKQogICAgICAgICAgICAgICAgOiBhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItY29udGFjdHMnLCdzb3VyY2UnPT4nJywncGFnZWQnPT4xXSwgYWRtaW5fdXJsKCdhZG1pbi5waHAnKSk7CiAgICAgICAgPz4KICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJHNyY191cmwpOyA/PiIKICAgICAgICAgICBjbGFzcz0idm0yLXNvdXJjZS1idG4gPD9waHAgZWNobyAkY2xzOyA/PiA8P3BocCBlY2hvICRhY3RpdmVfc3JjID8gJ2FjdGl2ZScgOiAnJzsgPz4iPgogICAgICAgICAgICA8P3BocCBlY2hvICRsYmw7ID8+ICg8P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJGNudCk7ID8+KQogICAgICAgIDwvYT4KICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgPC9kaXY+CgogICAgPCEtLSBTdGF0dXMgUGlsbHMgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItc3RhdHVzLWJhciI+CiAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1zdC1sYWJlbCI+U3RhdHVzOjwvc3Bhbj4KICAgICAgICA8P3BocAogICAgICAgICRzdGF0dXNfb3B0aW9ucyA9IFsKICAgICAgICAgICAgWydub3ZvJywgICAgICAgJ/CfhpUgTm92bycsICAgICAgICdzdC1ub3ZvJywgICAgICAgJGNudF9zdF9ub3ZvXSwKICAgICAgICAgICAgWydhcXVlY2VuZG8nLCAgJ/CflKUgQXF1ZWNlbmRvJywgICdzdC1hcXVlY2VuZG8nLCAgJGNudF9zdF9hcXVlY2VuZG9dLAogICAgICAgICAgICBbJ3F1ZW50ZScsICAgICAn8J+UtCBRdWVudGUnLCAgICAgJ3N0LXF1ZW50ZScsICAgICAkY250X3N0X3F1ZW50ZV0sCiAgICAgICAgICAgIFsnY29udmVydGlkbycsICfinIUgQ29udmVydGlkbycsICdzdC1jb252ZXJ0aWRvJywgJGNudF9zdF9jb252ZXJ0aWRvXSwKICAgICAgICAgICAgWydwZXJkaWRvJywgICAgJ+KdjCBQZXJkaWRvJywgICAgJ3N0LXBlcmRpZG8nLCAgICAkY250X3N0X3BlcmRpZG9dLAogICAgICAgIF07CiAgICAgICAgZm9yZWFjaCAoJHN0YXR1c19vcHRpb25zIGFzIFskc3YsICRzbCwgJHNjLCAkc2NvdW50XSk6CiAgICAgICAgICAgICRzX2FjdGl2ZSA9ICgkc3RhdHVzX2YgPT09ICRzdik7CiAgICAgICAgICAgICRzX3VybCAgICA9ICRzX2FjdGl2ZQogICAgICAgICAgICAgICAgPyBhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItY29udGFjdHMnLCdzdGF0dXNfZic9PicnLCdwYWdlZCc9PjFdLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKQogICAgICAgICAgICAgICAgOiBhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItY29udGFjdHMnLCdzdGF0dXNfZic9PiRzdiwnc291cmNlJz0+JHNvdXJjZV9mLCdzJz0+JHNlYXJjaCwnc3RhZ2UnPT4kc3RhZ2VfZiwnc2NvcmVfZic9PiRzY29yZV9mLCdkcCc9PiRkYXRlX3BlcmlvZCwncGFnZWQnPT4xXSwgYWRtaW5fdXJsKCdhZG1pbi5waHAnKSk7CiAgICAgICAgPz4KICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJHNfdXJsKTsgPz4iCiAgICAgICAgICAgY2xhc3M9InZtMi1zdGF0dXMtcGlsbCA8P3BocCBlY2hvICRzYzsgPz4gPD9waHAgZWNobyAkc19hY3RpdmUgPyAnYWN0aXZlJyA6ICcnOyA/PiI+CiAgICAgICAgICAgIDw/cGhwIGVjaG8gJHNsOyA/PiAoPD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRzY291bnQpOyA/PikKICAgICAgICA8L2E+CiAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgIDwvZGl2PgoKICAgIDwhLS0gRmlsdGVyIEJhciAtLT4KICAgIDxkaXYgY2xhc3M9InZtMmMtZmlsdGVyLWJhciI+CiAgICAgICAgPGZvcm0gbWV0aG9kPSJnZXQiIGFjdGlvbj0iIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGFnZSIgdmFsdWU9InZtMi1jb250YWN0cyI+CiAgICAgICAgICAgIDw/cGhwIGlmICgkc291cmNlX2YpOiAgID8+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic291cmNlIiAgIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRzb3VyY2VfZik7ICAgPz4iPjw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8P3BocCBpZiAoJGRhdGVfcGVyaW9kKTogPz48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkcCIgICAgICB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkZGF0ZV9wZXJpb2QpOyA/PiI+PD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDw/cGhwIGlmICgkc3RhdHVzX2YpOiAgID8+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3RhdHVzX2YiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRzdGF0dXNfZik7ICAgPz4iPjw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8P3BocCBpZiAoJGRhdGVfZnJvbSk6ICA/PjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImRmIiAgICAgICB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkZGF0ZV9mcm9tKTsgID8+Ij48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPD9waHAgaWYgKCRkYXRlX3RvKTogICAgPz48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkdCIgICAgICAgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGRhdGVfdG8pOyAgICA/PiI+PD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMmMtZmlsdGVyLXJvdyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTJjLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+QnVzY2E8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzZWFyY2giIG5hbWU9InMiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRzZWFyY2gpOyA/PiIgcGxhY2Vob2xkZXI9Ik5vbWUsIHRlbC4sIGVtYWlsLCBhdHJhw6fDo28uLi4iPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8P3BocCBpZiAoIWVtcHR5KCR0aXBvcykpOiA/PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yYy1maWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlRpcG8gZGUgRXZlbnRvPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InRpcG8iPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPlRvZG9zIG9zIHRpcG9zPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCR0aXBvcyBhcyAkdCk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHQpOyA/PiIgPD9waHAgc2VsZWN0ZWQoJHRpcG9fZiwgJHQpOyA/Pj48P3BocCBlY2hvIGVzY19odG1sKCR0KTsgPz48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTJjLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2NvcmU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ic2NvcmVfZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+VG9kb3M8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaG90IiAgPD9waHAgc2VsZWN0ZWQoJHNjb3JlX2YsJ2hvdCcpOyAgPz4+8J+UpSBIT1QgKDcwKyk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0id2FybSIgPD9waHAgc2VsZWN0ZWQoJHNjb3JlX2YsJ3dhcm0nKTsgPz4+4pqhIFdBUk0gKDQwKyk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iY29sZCIgPD9waHAgc2VsZWN0ZWQoJHNjb3JlX2YsJ2NvbGQnKTsgPz4+4p2E77iPIENPTEQ8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yYy1maWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkVzdMOhZ2lvPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InN0YWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj5Ub2Rvczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJob3QiICAgIDw/cGhwIHNlbGVjdGVkKCRzdGFnZV9mLCdob3QnKTsgICAgPz4+8J+UtCBIT1Q8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iY29udiIgICA8P3BocCBzZWxlY3RlZCgkc3RhZ2VfZiwnY29udicpOyAgID8+PuKchSBDb250cmF0b3U8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibG9zdCIgICA8P3BocCBzZWxlY3RlZCgkc3RhZ2VfZiwnbG9zdCcpOyAgID8+PuKdjCBQZXJkaWRvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMmMtZmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5PcmRlbmFyPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InNvcnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhY3Rpdml0eSIgPD9waHAgc2VsZWN0ZWQoJHNvcnQsJ2FjdGl2aXR5Jyk7ID8+PuKPsSDDmmx0aW1hIGF0aXZpZGFkZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJldmVudG8iICAgPD9waHAgc2VsZWN0ZWQoJHNvcnQsJ2V2ZW50bycpOyAgID8+PvCfk4UgRXZlbnRvIOKGkTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJldmVudG9fZCIgPD9waHAgc2VsZWN0ZWQoJHNvcnQsJ2V2ZW50b19kJyk7ID8+PvCfk4UgRXZlbnRvIOKGkzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJzY29yZSIgICAgPD9waHAgc2VsZWN0ZWQoJHNvcnQsJ3Njb3JlJyk7ICAgID8+PvCflKUgU2NvcmU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibm9tZSIgICAgIDw/cGhwIHNlbGVjdGVkKCRzb3J0LCdub21lJyk7ICAgICA/Pj5B4oCTWiBOb21lPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IndhIiAgICAgICA8P3BocCBzZWxlY3RlZCgkc29ydCwnd2EnKTsgICAgICAgPz4+8J+SrCBNYWlzIFdBPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6NnB4O2FsaWduLWl0ZW1zOmZsZXgtZW5kIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9InZtMi1idG4tc20iPkZpbHRyYXI8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHNlYXJjaCB8fCAkc3RhZ2VfZiB8fCAkdGlwb19mIHx8ICRzY29yZV9mIHx8ICRkYXRlX3BlcmlvZCB8fCAkZGF0ZV9mcm9tIHx8ICRkYXRlX3RvKTogPz4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWNvbnRhY3RzJywnc291cmNlJz0+JHNvdXJjZV9mXSwgYWRtaW5fdXJsKCdhZG1pbi5waHAnKSkpOyA/PiIgY2xhc3M9InZtMi1idG4tc20iIHN0eWxlPSJiYWNrZ3JvdW5kOiM2ZTc3ODEiPuKclTwvYT4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gRGF0ZSBwZXJpb2QgcGlsbHMgLS0+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTBweDtmb250LXdlaWdodDo3MDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOiM4ODg7bGV0dGVyLXNwYWNpbmc6LjRweDttYXJnaW4tYm90dG9tOjZweCI+8J+ThSBEYXRhIGRvIEV2ZW50bzwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yYy1kcC1waWxscyI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgICAgICAkZHBfb3B0aW9ucyA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ3VyZ2VudCcgPT4gJ/CflKUgVXJnZW50ZSAoN2QpJywKICAgICAgICAgICAgICAgICAgICAgICAgJ3dlZWsnICAgPT4gJ0VzdGEgc2VtYW5hJywKICAgICAgICAgICAgICAgICAgICAgICAgJ21vbnRoJyAgPT4gJ0VzdGUgbcOqcycsCiAgICAgICAgICAgICAgICAgICAgICAgICduZXh0MTUnID0+ICdQcsOzeC4gMTUgZGlhcycsCiAgICAgICAgICAgICAgICAgICAgICAgICduZXh0MzAnID0+ICdQcsOzeC4gMzAgZGlhcycsCiAgICAgICAgICAgICAgICAgICAgICAgICdwYXN0JyAgID0+ICdKw6EgcGFzc291JywKICAgICAgICAgICAgICAgICAgICAgICAgJ25vZGF0ZScgPT4gJ+KaoO+4jyBTZW0gZGF0YScsCiAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZHBfb3B0aW9ucyBhcyAkZHBfdmFsID0+ICRkcF9sYmwpOgogICAgICAgICAgICAgICAgICAgICAgICAkZHBfYWN0aXZlID0gKCRkYXRlX3BlcmlvZCA9PT0gJGRwX3ZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICRkcF91cmwgPSAkZHBfYWN0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFkZF9xdWVyeV9hcmcoWydwYWdlJz0+J3ZtMi1jb250YWN0cycsJ2RwJz0+JycsJ3MnPT4kc2VhcmNoLCdzdGFnZSc9PiRzdGFnZV9mLCdzb3VyY2UnPT4kc291cmNlX2YsJ3RpcG8nPT4kdGlwb19mLCdzY29yZV9mJz0+JHNjb3JlX2YsJ3BhZ2VkJz0+MV0sIGFkbWluX3VybCgnYWRtaW4ucGhwJykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFkZF9xdWVyeV9hcmcoWydwYWdlJz0+J3ZtMi1jb250YWN0cycsJ2RwJz0+JGRwX3ZhbCwncyc9PiRzZWFyY2gsJ3N0YWdlJz0+JHN0YWdlX2YsJ3NvdXJjZSc9PiRzb3VyY2VfZiwndGlwbyc9PiR0aXBvX2YsJ3Njb3JlX2YnPT4kc2NvcmVfZiwncGFnZWQnPT4xXSwgYWRtaW5fdXJsKCdhZG1pbi5waHAnKSk7CiAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGRwX3VybCk7ID8+IgogICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ2bTJjLWRwLXBpbGwgPD9waHAgZWNobyAkZHBfdmFsPT09J3VyZ2VudCc/J3VyZ2VudCc6Jyc7ID8+IDw/cGhwIGVjaG8gJGRwX2FjdGl2ZT8nYWN0aXZlJzonJzsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRkcF9sYmw7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9InZtMmNUb2dnbGVSYW5nZSIgY2xhc3M9InZtMmMtZHAtcGlsbCA8P3BocCBlY2hvICgkZGF0ZV9mcm9tfHwkZGF0ZV90byk/J2FjdGl2ZSc6Jyc7ID8+IiBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJjRGF0ZVJhbmdlJyk7ci5jbGFzc0xpc3QudG9nZ2xlKCdzaG93JykiPgogICAgICAgICAgICAgICAgICAgICAgICDwn5OGIEludGVydmFsbwogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBpZD0idm0yY0RhdGVSYW5nZSIgY2xhc3M9InZtMmMtZGF0ZS1yYW5nZSA8P3BocCBlY2hvICgkZGF0ZV9mcm9tfHwkZGF0ZV90byk/J3Nob3cnOicnOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yYy1maWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5EZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJkYXRlIiBuYW1lPSJkZiIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGRhdGVfZnJvbSk7ID8+Ij4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTJjLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkF0w6k8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iZGF0ZSIgbmFtZT0iZHQiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRkYXRlX3RvKTsgPz4iPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImFsaWduLXNlbGY6ZmxleC1lbmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9InZtMi1idG4tc20iIHN0eWxlPSJiYWNrZ3JvdW5kOiMxNmEzNGEiPkFwbGljYXI8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Zvcm0+CiAgICA8L2Rpdj4KCiAgICA8IS0tIEFjdGl2ZSBmaWx0ZXIgY2hpcHMgLS0+CiAgICA8P3BocCBpZiAoIWVtcHR5KCRhY3RpdmVfbGFiZWxzKSk6ID8+CiAgICA8ZGl2IGNsYXNzPSJ2bTJjLWFjdGl2ZS1maWx0ZXJzIj4KICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6Izg4ODtmb250LXdlaWdodDo2MDAiPkZpbHRyb3MgYXRpdm9zOjwvc3Bhbj4KICAgICAgICA8P3BocCBmb3JlYWNoICgkYWN0aXZlX2xhYmVscyBhcyBbJGNoaXBfbGFiZWwsICRjaGlwX2tleV0pOgogICAgICAgICAgICAkcmVtb3ZlX3VybCA9IGFkZF9xdWVyeV9hcmcoYXJyYXlfbWVyZ2UoWydwYWdlJz0+J3ZtMi1jb250YWN0cycsJ3BhZ2VkJz0+MSwkY2hpcF9rZXk9PicnXSksIGFkbWluX3VybCgnYWRtaW4ucGhwJykpOwogICAgICAgID8+CiAgICAgICAgPHNwYW4gY2xhc3M9InZtMmMtY2hpcCI+CiAgICAgICAgICAgIDw/cGhwIGVjaG8gJGNoaXBfbGFiZWw7ID8+CiAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkcmVtb3ZlX3VybCk7ID8+IiB0aXRsZT0iUmVtb3ZlciBmaWx0cm8iPsOXPC9hPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkY2xlYXJfdXJsKTsgPz4iIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojZDYzNjM4O3RleHQtZGVjb3JhdGlvbjpub25lIj5MaW1wYXIgdHVkbzwvYT4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kaWY7ID8+CgogICAgPCEtLSBSZXN1bHRzIGNvdW50IC0tPgogICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6IzU3NjA2YTttYXJnaW4tYm90dG9tOjhweCI+CiAgICAgICAgPD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCR0b3RhbCk7ID8+IGNvbnRhdG88P3BocCBlY2hvICR0b3RhbCE9MT8ncyc6Jyc7ID8+IGVuY29udHJhZG88P3BocCBlY2hvICR0b3RhbCE9MT8ncyc6Jyc7ID8+CiAgICAgICAgPD9waHAgaWYgKCR0b3RhbCA+ICRwZXJfcGFnZSk6ID8+CiAgICAgICAgwrcgUMOhZ2luYSA8P3BocCBlY2hvICRwYWdlZDsgPz4gZGUgPD9waHAgZWNobyAkdG90YWxfcGFnZXM7ID8+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICA8L2Rpdj4KCiAgICA8P3BocCBpZiAoZW1wdHkoJGNvbnRhY3RzKSk6ID8+CiAgICA8ZGl2IGNsYXNzPSJ2bTItZW1wdHktc3RhdGUiPgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1lbXB0eS1pY29uIj7wn5SNPC9kaXY+CiAgICAgICAgPHA+TmVuaHVtIGNvbnRhdG8gZW5jb250cmFkbzw/cGhwIGVjaG8gJHNlYXJjaCA/ICcgcGFyYSA8c3Ryb25nPiInIC4gZXNjX2h0bWwoJHNlYXJjaCkgLiAnIjwvc3Ryb25nPicgOiAnJzsgPz48L3A+CiAgICAgICAgPD9waHAgaWYgKCFlbXB0eSgkYWN0aXZlX2xhYmVscykpOiA/PgogICAgICAgIDxwPjxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkY2xlYXJfdXJsKTsgPz4iPkxpbXBhciBmaWx0cm9zPC9hPjwvcD4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgIDwvZGl2PgogICAgPD9waHAgZWxzZTogPz4KCiAgICA8P3BocAogICAgJGJ1bGtfbm9uY2UgPSB3cF9jcmVhdGVfbm9uY2UoJ3ZtMl9idWxrX2FxdWVjZXInKTsKICAgID8+CiAgICA8c3R5bGU+CiAgICAvKiDilIDilIAgQnVsayBhY3Rpb24gYmFyIOKUgOKUgCAqLwogICAgLnZtMi1idWxrLWJhcntkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2JhY2tncm91bmQ6IzFhMWEyZTtjb2xvcjojZmZmO3BhZGRpbmc6MTBweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O21hcmdpbi1ib3R0b206MTBweDtmbGV4LXdyYXA6d3JhcH0KICAgIC52bTItYnVsay1iYXIudmlzaWJsZXtkaXNwbGF5OmZsZXh9CiAgICAudm0yLWJ1bGstY291bnR7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxM3B4O2ZsZXg6MX0KICAgIC52bTItYnVsay1idG57YmFja2dyb3VuZDojRkZENzAwO2NvbG9yOiMxYTFhMmU7Ym9yZGVyOm5vbmU7cGFkZGluZzo2cHggMTRweDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXN9CiAgICAudm0yLWJ1bGstYnRuOmhvdmVye29wYWNpdHk6Ljg1fQogICAgLnZtMi1idWxrLWNhbmNlbHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiNhYWE7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjEycHg7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzo0cHggOHB4fQogICAgLyog4pSA4pSAIENoZWNrYm94IGNvbCDilIDilIAgKi8KICAgIC52bTItY2ItY29se3dpZHRoOjMycHg7dGV4dC1hbGlnbjpjZW50ZXJ9CiAgICAudm0yLWNvbnRhY3RzLXRhYmxlIC52bTItY2ItY29sIGlucHV0W3R5cGU9Y2hlY2tib3hde2N1cnNvcjpwb2ludGVyO3dpZHRoOjE1cHg7aGVpZ2h0OjE1cHh9CiAgICAvKiDilIDilIAgU2VxdcOqbmNpYXMgY2hpcHMg4pSA4pSAICovCiAgICAudm0yLXNlcS1jaGlwc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjNweH0KICAgIC52bTItc2VxLWNoaXB7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoycHggNnB4O2JvcmRlci1yYWRpdXM6MTBweDtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjcwMDt3aGl0ZS1zcGFjZTpub3dyYXB9CiAgICA8L3N0eWxlPgoKICAgIDwhLS0gQnVsayBBY3Rpb24gQmFyIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWJ1bGstYmFyIiBpZD0idm0yQnVsa0JhciI+CiAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1idWxrLWNvdW50IiBpZD0idm0yQnVsa0NvdW50Ij4wIHNlbGVjaW9uYWRvKHMpPC9zcGFuPgogICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1idWxrLWJ0biIgaWQ9InZtMkJ1bGtBcXVlY2VyIiBkYXRhLW5vbmNlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRidWxrX25vbmNlKTsgPz4iPgogICAgICAgICAgICDwn5SlIEFkaWNpb25hciBhIEFxdWVjZXIKICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJ2bTItYnVsay1idG4iIHN0eWxlPSJiYWNrZ3JvdW5kOiMzYjgyZjYiIGlkPSJ2bTJCdWxrQnlkYXRlIiBkYXRhLW5vbmNlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRidWxrX25vbmNlKTsgPz4iPgogICAgICAgICAgICDwn5OFIEZpbGEgUG9yIERhdGEKICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJ2bTItYnVsay1jYW5jZWwiIGlkPSJ2bTJCdWxrQ2FuY2VsIj7inJUgQ2FuY2VsYXI8L2J1dHRvbj4KICAgIDwvZGl2PgoKICAgIDx0YWJsZSBjbGFzcz0idm0yLWNvbnRhY3RzLXRhYmxlIj4KICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0idm0yLWNiLWNvbCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idm0yU2VsZWN0QWxsIiB0aXRsZT0iU2VsZWNpb25hciB0b2RvcyIgc3R5bGU9ImN1cnNvcjpwb2ludGVyIj48L3RoPgogICAgICAgICAgICAgICAgPHRoPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJF9zdSgkc29ydD09PSdub21lJz8nbm9tZV9kJzonbm9tZScpOyA/PiIgc3R5bGU9ImNvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkNvbnRhdG88P3BocCBlY2hvICRfYXJyb3coJ25vbWUnLCdub21lX2QnKTsgPz48L2E+PC90aD4KICAgICAgICAgICAgICAgIDx0aD48YSBocmVmPSI8P3BocCBlY2hvICRfc3UoJHNvcnQ9PT0nYWN0aXZpdHlfYSc/J2FjdGl2aXR5JzonYWN0aXZpdHlfYScpOyA/PiIgc3R5bGU9ImNvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkF0aXZpZGFkZTw/cGhwIGVjaG8gJF9hcnJvdygnYWN0aXZpdHlfYScsJ2FjdGl2aXR5Jyk7ID8+PC9hPjwvdGg+CiAgICAgICAgICAgICAgICA8dGg+PGEgaHJlZj0iPD9waHAgZWNobyAkX3N1KCRzb3J0PT09J2V2ZW50byc/J2V2ZW50b19kJzonZXZlbnRvJyk7ID8+IiBzdHlsZT0iY29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246bm9uZSI+RGF0YSBFdmVudG88P3BocCBlY2hvICRfYXJyb3coJ2V2ZW50bycsJ2V2ZW50b19kJyk7ID8+PC9hPjwvdGg+CiAgICAgICAgICAgICAgICA8dGg+T3JpZ2VtPC90aD4KICAgICAgICAgICAgICAgIDx0aD5DYW5hbDwvdGg+CiAgICAgICAgICAgICAgICA8dGg+VGlwbyBFdmVudG88L3RoPgogICAgICAgICAgICAgICAgPHRoPkVzdMOhZ2lvPC90aD4KICAgICAgICAgICAgICAgIDx0aD48YSBocmVmPSI8P3BocCBlY2hvICRfc3UoJHNvcnQ9PT0nc2NvcmUnPydhY3Rpdml0eSc6J3Njb3JlJyk7ID8+IiBzdHlsZT0iY29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246bm9uZSI+U2NvcmU8P3BocCBlY2hvICRfYXJyb3coJ3Njb3JlJywnYWN0aXZpdHknKTsgPz48L2E+PC90aD4KICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0ibWluLXdpZHRoOjEyMHB4Ij5BdHJhw6fDo288L3RoPgogICAgICAgICAgICAgICAgPHRoPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJF9zdSgkc29ydD09PSd3YSc/J3dhX2EnOid3YScpOyA/PiIgc3R5bGU9ImNvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPldBPD9waHAgZWNobyAkX2Fycm93KCd3YV9hJywnd2EnKTsgPz48L2E+PC90aD4KICAgICAgICAgICAgICAgIDx0aCB0aXRsZT0iRW1haWwgY2FwdHVyYWRvIj7wn5OnPC90aD4KICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0ibWluLXdpZHRoOjgwcHgiPlNlcXXDqm5jaWFzPC90aD4KICAgICAgICAgICAgICAgIDx0aD5Bw6fDtWVzPC90aD4KICAgICAgICAgICAgPC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT4KICAgICAgICA8P3BocAogICAgICAgIC8vIOKUgOKUgCBTZXF1w6puY2lhczogcHLDqS1jYXJyZWdhIGVudmlvcyBwb3IgdGVsZWZvbmUgKMO6bHRpbW9zIDMwZCkg4pSA4pSACiAgICAgICAgJGNvbnRhY3RfcGhvbmVzID0gYXJyYXlfbWFwKGZuKCRjKSA9PiAkYy0+cGhvbmUsICRjb250YWN0cyk7CiAgICAgICAgJHNlcV9kYXRhID0gW107CiAgICAgICAgaWYgKCFlbXB0eSgkY29udGFjdF9waG9uZXMpKSB7CiAgICAgICAgICAgICRwaF9pbiA9IGltcGxvZGUoJywnLCBhcnJheV9maWxsKDAsIGNvdW50KCRjb250YWN0X3Bob25lcyksICclcycpKTsKICAgICAgICAgICAgJHNlcV9yb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKCR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAgICAgIlNFTEVDVCBwaG9uZSwgbW9kdWxlIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzCiAgICAgICAgICAgICAgICAgV0hFUkUgcGhvbmUgSU4gKCRwaF9pbikKICAgICAgICAgICAgICAgICBBTkQgc2VudF9hdCA+IERBVEVfU1VCKE5PVygpLCBJTlRFUlZBTCAzMCBEQVkpCiAgICAgICAgICAgICAgICAgR1JPVVAgQlkgcGhvbmUsIG1vZHVsZSIsCiAgICAgICAgICAgICAgICAuLi4kY29udGFjdF9waG9uZXMKICAgICAgICAgICAgKSk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRzZXFfcm93cyBhcyAkc3IpIHsKICAgICAgICAgICAgICAgICRzZXFfZGF0YVskc3ItPnBob25lXVtdID0gJHNyLT5tb2R1bGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHNlcV9jaGlwX21hcCA9IFsKICAgICAgICAgICAgJ2FxdWVjZXInICAgICAgPT4gWyfwn5SlJywgJyNlNzRjM2MnLCAnQXF1ZWNlciddLAogICAgICAgICAgICAnYXV0b19hcXVlY2VyJyA9PiBbJ/CfpJYnLCAnIzliNTliNicsICdBdXRvJ10sCiAgICAgICAgICAgICdsZWFkcycgICAgICAgID0+IFsn8J+OrycsICcjZTY3ZTIyJywgJ0hPVCddLAogICAgICAgICAgICAnYnlkYXRlJyAgICAgICA9PiBbJ/Cfk4UnLCAnIzM0OThkYicsICdEYXRhJ10sCiAgICAgICAgICAgICdjYXJyaW5obycgICAgID0+IFsn8J+bkicsICcjMjdhZTYwJywgJ0NhcnQnXSwKICAgICAgICBdOwoKICAgICAgICAkb3JpZ2luX2xhYmVscyA9IFsKICAgICAgICAgICAgJ2tvbW1vJyAgICAgICAgID0+ICc8c3BhbiBjbGFzcz0idm0yLW9yaWdpbi1iYWRnZSBvYi1rb21tbyI+8J+UpSBLb21tbzwvc3Bhbj4nLAogICAgICAgICAgICAnZ2FsZXJpYScgICAgICAgPT4gJzxzcGFuIGNsYXNzPSJ2bTItb3JpZ2luLWJhZGdlIG9iLWdhbGVyaWEiPvCfk7ggR2FsZXJpYTwvc3Bhbj4nLAogICAgICAgICAgICAnY2FycmluaG8nICAgICAgPT4gJzxzcGFuIGNsYXNzPSJ2bTItb3JpZ2luLWJhZGdlIG9iLWNhcnJpbmhvIj7wn5uSIENhcnQ8L3NwYW4+JywKICAgICAgICAgICAgJ3BlZGlkbycgICAgICAgID0+ICc8c3BhbiBjbGFzcz0idm0yLW9yaWdpbi1iYWRnZSBvYi1wZWRpZG8iPvCfk6YgUGVkaWRvPC9zcGFuPicsCiAgICAgICAgICAgICdzb2ZpYScgICAgICAgICA9PiAnPHNwYW4gY2xhc3M9InZtMi1vcmlnaW4tYmFkZ2Ugb2Itc29maWEiPvCfp6AgU29mSUE8L3NwYW4+JywKICAgICAgICAgICAgJ3dhYmFfNTAzOScgICAgID0+ICc8c3BhbiBjbGFzcz0idm0yLW9yaWdpbi1iYWRnZSBvYi13YWJhIj7wn5OxIFNvZklBIFdBQkE8L3NwYW4+JywKICAgICAgICAgICAgJ2dydXBvX3ZpcCcgICAgID0+ICc8c3BhbiBjbGFzcz0idm0yLW9yaWdpbi1iYWRnZSBvYi1ncnVwby12aXAiPuKtkCBHcnVwbyBWSVA8L3NwYW4+JywKICAgICAgICAgICAgJ3NhaXVfZ3J1cG9fdmlwJz0+ICc8c3BhbiBjbGFzcz0idm0yLW9yaWdpbi1iYWRnZSBvYi1zYWl1LXZpcCI+8J+RiyBTYWl1IFZJUDwvc3Bhbj4nLAogICAgICAgIF07CiAgICAgICAgZm9yZWFjaCAoJGNvbnRhY3RzIGFzICRjKToKICAgICAgICAgICAgJG9yaWdlbnMgICAgID0ganNvbl9kZWNvZGUoJGMtPm9yaWdlbnMsIHRydWUpID86IFtdOwogICAgICAgICAgICAkcGhvbmVfY2xlYW4gPSBwcmVnX3JlcGxhY2UoJy9cRC8nLCAnJywgJGMtPnBob25lKTsKICAgICAgICAgICAgJGtvbW1vX3VybCAgID0gJGMtPmtvbW1vX2xlYWRfaWQgPyAnaHR0cHM6Ly9ybGVpdGVtYXJ0aW5zLmtvbW1vLmNvbS9sZWFkcy9kZXRhaWwvJyAuICRjLT5rb21tb19sZWFkX2lkIDogJyc7CiAgICAgICAgICAgICRpbnRlcmVzdCAgICA9ICRjLT5nYWxlcmlhX2F0cmFjYW8gPzogJGMtPmNhcnRfcHJvZHVjdCA/OiAnJzsKICAgICAgICAgICAgJHNjb3JlICAgICAgID0gKGludCkkYy0+c2NvcmUgPzogdm0yX2xlYWRfc2NvcmUoKG9iamVjdClbJ3N0YXR1c19pZCc9PiRjLT5rb21tb19zdGF0dXNfaWQsJ2RhdGFfZXZlbnRvJz0+JGMtPmRhdGFfZXZlbnRvXSwgKGludCkkYy0+d2FfY291bnQpOwogICAgICAgICAgICAkc2NvcmVfaHRtbCAgPSAkc2NvcmUgPj0gNzAKICAgICAgICAgICAgICAgID8gJzxzcGFuIGNsYXNzPSJ2bTJjLXNjb3JlLWhvdCI+8J+UpSAnIC4gJHNjb3JlIC4gJzwvc3Bhbj4nCiAgICAgICAgICAgICAgICA6ICgkc2NvcmUgPj0gNDAKICAgICAgICAgICAgICAgICAgICA/ICc8c3BhbiBjbGFzcz0idm0yYy1zY29yZS13YXJtIj7imqEgJyAuICRzY29yZSAuICc8L3NwYW4+JwogICAgICAgICAgICAgICAgICAgIDogJzxzcGFuIGNsYXNzPSJ2bTJjLXNjb3JlLWNvbGQiPuKdhO+4jyAnIC4gJHNjb3JlIC4gJzwvc3Bhbj4nKTsKICAgICAgICAgICAgJGxhc3RfZm10ICAgID0gJGMtPmxhc3RfYWN0aXZpdHkgPyB2bTJfbG9jYWxfZGF0ZSgnZC9tIEg6aScsICRjLT5sYXN0X2FjdGl2aXR5KSA6ICfigJQnOwogICAgICAgICAgICAkdGlwb19odG1sICAgPSAkYy0+dGlwb19ldmVudG8gPyAnPHNwYW4gY2xhc3M9InZtMmMtdGlwbyI+JyAuIGVzY19odG1sKCRjLT50aXBvX2V2ZW50bykgLiAnPC9zcGFuPicgOiAnPHNwYW4gc3R5bGU9ImNvbG9yOiNjY2M7Zm9udC1zaXplOjExcHgiPuKAlDwvc3Bhbj4nOwogICAgICAgID8+CiAgICAgICAgICAgIDx0ciBjbGFzcz0idm0yLWNvbnRhY3Qtcm93IgogICAgICAgICAgICAgICAgZGF0YS1pZD0iPD9waHAgZWNobyBlc2NfYXR0cigkYy0+a29tbW9fbGVhZF9pZCA/OiAwKTsgPz4iCiAgICAgICAgICAgICAgICBkYXRhLWNvbnRhY3QtaWQ9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGMtPmlkKTsgPz4iCiAgICAgICAgICAgICAgICBkYXRhLW5vbmNlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRub25jZV92YWwpOyA/PiI+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InZtMi1jYi1jb2wiIG9uY2xpY2s9ImV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJ2bTItY2Itcm93IiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkYy0+cGhvbmUgPzogJycpOyA/PiI+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1uYW1lIj48P3BocCBlY2hvIGVzY19odG1sKCRjLT5uYW1lID86ICfigJQnKTsgPz48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItcGhvbmUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGMtPnBob25lID86ICfigJQnKTsgPz48L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImNvbG9yOiM1NzYwNmE7Zm9udC1zaXplOjExcHg7d2hpdGUtc3BhY2U6bm93cmFwIj48P3BocCBlY2hvICRsYXN0X2ZtdDsgPz48L3RkPgogICAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gJGV2X2JhZGdlKCRjLT5kYXRhX2V2ZW50byA/PyAnJyk7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48P3BocAogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRvcmlnZW5zIGFzICRvKSBlY2hvICRvcmlnaW5fbGFiZWxzWyRvXSA/PyAnJzsKICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRjLT5jYW5hbF9vcmlnZW0pICYmICRjLT5jYW5hbF9vcmlnZW0gPT09ICd3YWJhXzUwMzknKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxzcGFuIGNsYXNzPSJ2bTItb3JpZ2luLWJhZGdlIG9iLXdhYmEiPvCfk7EgU29mSUEgV0FCQTwvc3Bhbj4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48P3BocAogICAgICAgICAgICAgICAgICAgIC8vIFt2MS41Ljc2XSBVVE0gc291cmNlL21lZGl1bS9jYW1wYWlnbgogICAgICAgICAgICAgICAgICAgICR1dG1fc3JjID0gJGMtPnV0bV9zb3VyY2UgPz8gJyc7CiAgICAgICAgICAgICAgICAgICAgJHV0bV9tZWQgPSAkYy0+dXRtX21lZGl1bSA/PyAnJzsKICAgICAgICAgICAgICAgICAgICAkdXRtX2NhbSA9ICRjLT51dG1fY2FtcGFpZ24gPz8gJyc7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR1dG1fc3JjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aXAgPSBlc2NfYXR0cihpbXBsb2RlKCcgLyAnLCBhcnJheV9maWx0ZXIoWyR1dG1fc3JjLCAkdXRtX21lZCwgJHV0bV9jYW1dKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAkaWNvbiA9ICR1dG1fc3JjID09PSAnZmFjZWJvb2snID8gJ/Cfk5gnIDogKCR1dG1fc3JjID09PSAnZ29vZ2xlJyA/ICfwn5SNJyA6ICgkdXRtX3NyYyA9PT0gJ2luc3RhZ3JhbScgPyAn8J+TuCcgOiAoJHV0bV9zcmMgPT09ICdrb21tbycgPyAn8J+klicgOiAn8J+MkCcpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxzcGFuIHRpdGxlPSInIC4gJHRpcCAuICciIHN0eWxlPSJmb250LXNpemU6MTFweDtiYWNrZ3JvdW5kOiNlOGYwZmU7Y29sb3I6IzFhNzNlODtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjJweCA2cHg7Y3Vyc29yOmRlZmF1bHQiPicgLiAkaWNvbiAuICcgJyAuIGVzY19odG1sKCR1dG1fc3JjKSAuICc8L3NwYW4+JzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR1dG1fY2FtKSBlY2hvICc8YnI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiM4ODg7ZGlzcGxheTpibG9jazttYXgtd2lkdGg6MTAwcHg7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwIiB0aXRsZT0iJyAuIGVzY19hdHRyKCR1dG1fY2FtKSAuICciPicgLiBlc2NfaHRtbCgkdXRtX2NhbSkgLiAnPC9zcGFuPic7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgZWNobyAnPHNwYW4gc3R5bGU9ImNvbG9yOiNkMWQ1ZGI7Zm9udC1zaXplOjExcHgiPuKAlDwvc3Bhbj4nOyB9CiAgICAgICAgICAgICAgICA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyAkdGlwb19odG1sOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+PD9waHAgZWNobyAkYy0+a29tbW9fc3RhdHVzX2lkID8gdm0yX3N0YWdlX2xhYmVsKCRjLT5rb21tb19zdGF0dXNfaWQpIDogJzxzcGFuIHN0eWxlPSJjb2xvcjojYmJiO2ZvbnQtc2l6ZToxMXB4Ij7igJQ8L3NwYW4+JzsgPz48L3RkPgogICAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gJHNjb3JlX2h0bWw7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzU3NjA2YTttYXgtd2lkdGg6MTQwcHg7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwIiB0aXRsZT0iPD9waHAgZWNobyBlc2NfYXR0cigkaW50ZXJlc3QpOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCgkaW50ZXJlc3QgPzogJ+KAlCcpOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDtjb2xvcjo8P3BocCBlY2hvIChpbnQpJGMtPndhX2NvdW50ID4gMCA/ICcjMjVEMzY2JyA6ICcjYmJiJzsgPz4iPjw/cGhwIGVjaG8gKGludCkkYy0+d2FfY291bnQ7ID8+PC9zcGFuPjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgdGl0bGU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGMtPmVtYWlsID86ICcnKTsgPz4iPjw/cGhwIGVjaG8gIWVtcHR5KCRjLT5lbWFpbCkgPyAnPHNwYW4gc3R5bGU9ImNvbG9yOiMyMjcxYjE7Zm9udC1zaXplOjEycHgiIHRpdGxlPSInIC4gZXNjX2F0dHIoJGMtPmVtYWlsKSAuICciPuKcie+4jzwvc3Bhbj4nIDogJzxzcGFuIHN0eWxlPSJjb2xvcjojZTBlMGUwO2ZvbnQtc2l6ZToxMXB4Ij7igJQ8L3NwYW4+JzsgPz48L3RkPgogICAgICAgICAgICAgICAgPHRkIG9uY2xpY2s9ImV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj4KICAgICAgICAgICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgICAgICRzZXFfY2hpcHNfaHRtbCA9ICcnOwogICAgICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHNlcV9kYXRhWyRjLT5waG9uZV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKGFycmF5X3VuaXF1ZSgkc2VxX2RhdGFbJGMtPnBob25lXSkgYXMgJHNlcV9tb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkc2VxX2NoaXBfbWFwWyRzZXFfbW9kXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJGljLCAkY29sLCAkbGJdID0gJHNlcV9jaGlwX21hcFskc2VxX21vZF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlcV9jaGlwc19odG1sIC49ICc8c3BhbiBjbGFzcz0idm0yLXNlcS1jaGlwIiBzdHlsZT0iYmFja2dyb3VuZDonIC4gJGNvbCAuICciIHRpdGxlPSInIC4gZXNjX2F0dHIoJGxiKSAuICciPicgLiAkaWMgLiAnICcgLiBlc2NfaHRtbCgkbGIpIC4gJzwvc3Bhbj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVjaG8gJHNlcV9jaGlwc19odG1sID86ICc8c3BhbiBzdHlsZT0iY29sb3I6I2QxZDVkYjtmb250LXNpemU6MTFweCI+4oCUPC9zcGFuPic7CiAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InZtMi1hY3Rpb25zIiBvbmNsaWNrPSJldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRwaG9uZV9jbGVhbik6ID8+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93YS5tZS88P3BocCBlY2hvIGVzY19hdHRyKCRwaG9uZV9jbGVhbik7ID8+IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IldoYXRzQXBwIj7wn5KsPC9hPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgka29tbW9fdXJsKTogPz4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGtvbW1vX3VybCk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IlZlciBubyBLb21tbyI+8J+UlzwvYT4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICA8L3Rib2R5PgogICAgPC90YWJsZT4KCiAgICA8P3BocCBpZiAoJHRvdGFsX3BhZ2VzID4gMSk6ID8+CiAgICA8ZGl2IGNsYXNzPSJ2bTItcGFnaW5hdGlvbiI+CiAgICAgICAgPHNwYW4+PD9waHAgZWNobyAkcGFnZWQ7ID8+Lzw/cGhwIGVjaG8gJHRvdGFsX3BhZ2VzOyA/Pjwvc3Bhbj4KICAgICAgICA8P3BocCBpZiAoJHBhZ2VkID4gMSkgZWNobyAnPGEgaHJlZj0iJyAuIGVzY191cmwoJGJhc2VfdXJsIC4gKCRwYWdlZC0xKSkgLiAnIj7ihpAgQW50PC9hPic7ID8+CiAgICAgICAgPD9waHAgZm9yICgkcCA9IG1heCgxLCRwYWdlZC0yKTsgJHAgPD0gbWluKCR0b3RhbF9wYWdlcywkcGFnZWQrMik7ICRwKyspOgogICAgICAgICAgICBpZiAoJHA9PT0kcGFnZWQpIGVjaG8gJzxzcGFuIGNsYXNzPSJjdXJyZW50Ij4nLiRwLic8L3NwYW4+JzsKICAgICAgICAgICAgZWxzZSBlY2hvICc8YSBocmVmPSInLmVzY191cmwoJGJhc2VfdXJsLiRwKS4nIj4nLiRwLic8L2E+JzsKICAgICAgICBlbmRmb3I7ID8+CiAgICAgICAgPD9waHAgaWYgKCRwYWdlZCA8ICR0b3RhbF9wYWdlcykgZWNobyAnPGEgaHJlZj0iJyAuIGVzY191cmwoJGJhc2VfdXJsIC4gKCRwYWdlZCsxKSkgLiAnIj5QcsOzeCDihpI8L2E+JzsgPz4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kaWY7ID8+CiAgICA8P3BocCBlbmRpZjsgPz4KCiAgICA8IS0tIE1vZGFsIGRlIGRldGFsaGUgZG8gY29udGF0byAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1tb2RhbC1vdmVybGF5IiBpZD0idm0yQ29udGFjdE1vZGFsIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItbW9kYWwtcGFuZWwiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItbW9kYWwtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwIiBpZD0idm0yTW9kYWxOYW1lIj7igJQ8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNTc2MDZhIiBpZD0idm0yTW9kYWxQaG9uZSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1tb2RhbC1jbG9zZSIgaWQ9InZtMk1vZGFsQ2xvc2UiPuKclTwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLW1vZGFsLWJvZHkiIGlkPSJ2bTJNb2RhbEJvZHkiPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0MHB4O2NvbG9yOiM1NzYwNmEiPkNhcnJlZ2FuZG8uLi48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1tb2RhbC1hY3Rpb25zIiBpZD0idm0yTW9kYWxBY3Rpb25zIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAoZnVuY3Rpb24oKXsKICAgICAgICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQ29udGFjdE1vZGFsJyk7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMk1vZGFsQ2xvc2UnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIG1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICAgICAgICB9KTsKICAgICAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpeyBpZihlLnRhcmdldD09PW1vZGFsKSBtb2RhbC5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7IH0pOwoKICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudm0yLWNvbnRhY3Qtcm93JykuZm9yRWFjaChmdW5jdGlvbihyb3cpewogICAgICAgICAgICByb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgdmFyIGNpZCAgID0gcm93LmRhdGFzZXQuY29udGFjdElkOyAvLyBGSVggdjEuNS4xNTM6IHVzYXIgY29udGFjdF9pZCAodm0yX2NvbnRhY3RzLmlkKQogICAgICAgICAgICAgICAgdmFyIG5vbmNlID0gcm93LmRhdGFzZXQubm9uY2U7CiAgICAgICAgICAgICAgICB2YXIgbmFtZSAgPSByb3cucXVlcnlTZWxlY3RvcignLnZtMi1uYW1lJykudGV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgICB2YXIgcGhvbmUgPSByb3cucXVlcnlTZWxlY3RvcignLnZtMi1waG9uZScpLnRleHRDb250ZW50OwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMk1vZGFsTmFtZScpLnRleHRDb250ZW50ICA9IG5hbWU7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yTW9kYWxQaG9uZScpLnRleHRDb250ZW50ID0gcGhvbmU7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yTW9kYWxCb2R5JykuaW5uZXJIVE1MICAgID0gJzxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NDBweDtjb2xvcjojNTc2MDZhIj7ij7MgQ2FycmVnYW5kbyBmaWNoYS4uLjwvZGl2Pic7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yTW9kYWxBY3Rpb25zJykuaW5uZXJIVE1MID0gJyc7CiAgICAgICAgICAgICAgICBtb2RhbC5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7CiAgICAgICAgICAgICAgICBpZiAoIWNpZCkgewogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJNb2RhbEJvZHknKS5pbm5lckhUTUwgPSAnPHAgc3R5bGU9ImNvbG9yOiM4ODg7cGFkZGluZzoyMHB4Ij5JRCBkbyBjb250YXRvIGludsOhbGlkby48L3A+JzsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgICAgIGZkLmFwcGVuZCgnYWN0aW9uJywndm0yX2NvbnRhY3RfZGV0YWlsJyk7CiAgICAgICAgICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgbm9uY2UpOwogICAgICAgICAgICAgICAgZmQuYXBwZW5kKCdjb250YWN0X2lkJywgY2lkKTsKICAgICAgICAgICAgICAgIGZldGNoKGFqYXh1cmwsIHttZXRob2Q6J1BPU1QnLCBib2R5OmZkfSkKICAgICAgICAgICAgICAgICAgICAudGhlbihyPT5yLmpzb24oKSkKICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXMpewogICAgICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3VjY2Vzcyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yTW9kYWxCb2R5JykuaW5uZXJIVE1MICAgID0gcmVzLmRhdGEuaHRtbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJNb2RhbEFjdGlvbnMnKS5pbm5lckhUTUwgPSByZXMuZGF0YS5hY3Rpb25zOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMk1vZGFsQm9keScpLmlubmVySFRNTCA9ICc8cCBzdHlsZT0iY29sb3I6cmVkIj5FcnJvIGFvIGNhcnJlZ2FyIGNvbnRhdG8uPC9wPic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEJvdMOjbyBTeW5jCiAgICAgICAgdmFyIHN5bmNCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yU3luY0J0bicpOwogICAgICAgIGlmIChzeW5jQnRuKSB7CiAgICAgICAgICAgIHN5bmNCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgc3luY0J0bi50ZXh0Q29udGVudCA9ICfij7MgU3luYy4uLic7CiAgICAgICAgICAgICAgICBzeW5jQnRuLmNsYXNzTGlzdC5hZGQoJ3N5bmNpbmcnKTsKICAgICAgICAgICAgICAgIGZldGNoKCc8P3BocCBlY2hvIGVzY19qcyhyZXN0X3VybCgndm0tY3JtLXYyL3YxL2NvbnRhY3RzL3N5bmMnKSk7ID8+JywgewogICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsnWC1XUC1Ob25jZSc6ICc8P3BocCBlY2hvIGVzY19qcygkcmVzdF9ub25jZSk7ID8+J30KICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihyPT5yLmpzb24oKSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5vaykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHJlcy5yZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNCdG4udGV4dENvbnRlbnQgPSAn4pyFICcgKyByLnRvdGFsICsgJyAoJyArIHIubmV3ICsgJyBub3ZvcyknOwogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGxvY2F0aW9uLnJlbG9hZCgpOyB9LCAxMjAwKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzeW5jQnRuLnRleHRDb250ZW50ID0gJ+KdjCBFcnJvJzsKICAgICAgICAgICAgICAgICAgICAgICAgc3luY0J0bi5jbGFzc0xpc3QucmVtb3ZlKCdzeW5jaW5nJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgIHN5bmNCdG4udGV4dENvbnRlbnQgPSAn4p2MIEVycm8nOwogICAgICAgICAgICAgICAgICAgIHN5bmNCdG4uY2xhc3NMaXN0LnJlbW92ZSgnc3luY2luZycpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxzY3JpcHQ+CiAgICAoZnVuY3Rpb24oKXsKICAgICAgICB2YXIgc2VsZWN0QWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlNlbGVjdEFsbCcpOwogICAgICAgIHZhciBidWxrQmFyICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQnVsa0JhcicpOwogICAgICAgIHZhciBidWxrQ291bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQnVsa0NvdW50Jyk7CiAgICAgICAgaWYgKCFzZWxlY3RBbGwpIHJldHVybjsKCiAgICAgICAgZnVuY3Rpb24gZ2V0Q2hlY2tlZCgpIHsKICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1jYi1yb3c6Y2hlY2tlZCcpKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gdXBkYXRlQmFyKCkgewogICAgICAgICAgICB2YXIgY2hlY2tlZCA9IGdldENoZWNrZWQoKTsKICAgICAgICAgICAgaWYgKGNoZWNrZWQubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgYnVsa0Jhci5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJyk7CiAgICAgICAgICAgICAgICBidWxrQ291bnQudGV4dENvbnRlbnQgPSBjaGVja2VkLmxlbmd0aCArICcgc2VsZWNpb25hZG8ocyknOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYnVsa0Jhci5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2VsZWN0QWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudm0yLWNiLXJvdycpLmZvckVhY2goZnVuY3Rpb24oY2IpeyBjYi5jaGVja2VkID0gc2VsZWN0QWxsLmNoZWNrZWQ7IH0pOwogICAgICAgICAgICB1cGRhdGVCYXIoKTsKICAgICAgICB9KTsKICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudm0yLWNiLXJvdycpLmZvckVhY2goZnVuY3Rpb24oY2IpewogICAgICAgICAgICBjYi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVCYXIpOwogICAgICAgIH0pOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJCdWxrQ2FuY2VsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudm0yLWNiLXJvdycpLmZvckVhY2goZnVuY3Rpb24oY2IpeyBjYi5jaGVja2VkID0gZmFsc2U7IH0pOwogICAgICAgICAgICBzZWxlY3RBbGwuY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICB1cGRhdGVCYXIoKTsKICAgICAgICB9KTsKICAgICAgICBmdW5jdGlvbiBidWxrQWN0aW9uKG1vZHVsZSkgewogICAgICAgICAgICB2YXIgcGhvbmVzID0gZ2V0Q2hlY2tlZCgpLm1hcChmdW5jdGlvbihjYil7IHJldHVybiBjYi52YWx1ZTsgfSkuZmlsdGVyKEJvb2xlYW4pOwogICAgICAgICAgICBpZiAoIXBob25lcy5sZW5ndGgpIHsgYWxlcnQoJ1NlbGVjaW9uZSBhbyBtZW5vcyB1bSBjb250YXRvLicpOyByZXR1cm47IH0KICAgICAgICAgICAgdmFyIGxhYmVsID0gbW9kdWxlID09PSAnYXF1ZWNlcicgPyAnQXF1ZWNlciBEK1gnIDogJ1BvciBEYXRhJzsKICAgICAgICAgICAgaWYgKCFjb25maXJtKCdBZGljaW9uYXIgJyArIHBob25lcy5sZW5ndGggKyAnIGNvbnRhdG8ocykgw6AgZmlsYSBkZSAnICsgbGFiZWwgKyAnPwoKKFJlbW92ZSBjb29sZG93biByZWNlbnRlIGUgb3MgaW5jbHVpIG5vIHByw7N4aW1vIGRpc3Bhcm8pJykpIHJldHVybjsKICAgICAgICAgICAgdmFyIGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1vZHVsZSA9PT0gJ2FxdWVjZXInID8gJ3ZtMkJ1bGtBcXVlY2VyJyA6ICd2bTJCdWxrQnlkYXRlJyk7CiAgICAgICAgICAgIHZhciBub25jZSA9IGJ0bi5kYXRhc2V0Lm5vbmNlOwogICAgICAgICAgICB2YXIgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBhY3Rpb246ICd2bTJfYnVsa19hcXVlY2VyJywgbm9uY2U6IG5vbmNlLCBtb2R1bGU6IG1vZHVsZSB9KTsKICAgICAgICAgICAgcGhvbmVzLmZvckVhY2goZnVuY3Rpb24ocCl7IGJvZHkuYXBwZW5kKCdwaG9uZXNbXScsIHApOyB9KTsKICAgICAgICAgICAgYnRuLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgICAgYnRuLnRleHRDb250ZW50ID0gJ+KPsyBQcm9jZXNzYW5kby4uLic7CiAgICAgICAgICAgIGZldGNoKGFqYXh1cmwsIHsgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9LCBib2R5OiBib2R5LnRvU3RyaW5nKCkgfSkKICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocil7IHJldHVybiByLmpzb24oKTsgfSkKICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oZGF0YSl7CiAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ+KchSAnICsgZGF0YS5kYXRhLm1zZyk7CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1jYi1yb3cnKS5mb3JFYWNoKGZ1bmN0aW9uKGNiKXsgY2IuY2hlY2tlZCA9IGZhbHNlOyB9KTsKICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbGwuY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJhcigpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBhbGVydCgn4p2MIEVycm86ICcgKyAoZGF0YS5kYXRhID8gZGF0YS5kYXRhLm1zZyA6ICdEZXNjb25oZWNpZG8nKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbigpeyBhbGVydCgn4p2MIEVycm8gZGUgcmVkZS4nKTsgfSkKICAgICAgICAgICAgLmZpbmFsbHkoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgYnRuLnRleHRDb250ZW50ID0gbW9kdWxlID09PSAnYXF1ZWNlcicgPyAn8J+UpSBBZGljaW9uYXIgYSBBcXVlY2VyJyA6ICfwn5OFIEZpbGEgUG9yIERhdGEnOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkJ1bGtBcXVlY2VyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBidWxrQWN0aW9uKCdhcXVlY2VyJyk7IH0pOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJCdWxrQnlkYXRlJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBidWxrQWN0aW9uKCdieWRhdGUnKTsgfSk7CiAgICB9KSgpOwogICAgPC9zY3JpcHQ+CiAgICA8L2Rpdj4KICAgIDw/cGhwCn0KCgovLyBBSkFYIOKAlCBEZXRhbGhlIGRvIENvbnRhdG8KYWRkX2FjdGlvbiggJ3dwX2FqYXhfdm0yX2NvbnRhY3RfZGV0YWlsJywgJ3ZtMl9hamF4X2NvbnRhY3RfZGV0YWlsJyApOwpmdW5jdGlvbiB2bTJfYWpheF9jb250YWN0X2RldGFpbCgpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlciggJ3ZtMl9jb250YWN0X2RldGFpbCcsICdub25jZScgKTsKICAgIGlmICggISBjdXJyZW50X3VzZXJfY2FuKCAnbWFuYWdlX29wdGlvbnMnICkgKSB3cF9kaWUoKTsKCiAgICBnbG9iYWwgJHdwZGI7CgogICAgLy8gdjEuNS4xNTM6IGFjZWl0YSBjb250YWN0X2lkICh2bTJfY29udGFjdHMuaWQpIOKAlCBhbnRlcyB1c2F2YSBrb21tb19pZAogICAgJGNvbnRhY3RfaWQgPSBhYnNpbnQoICRfUE9TVFsnY29udGFjdF9pZCddID8/IDAgKTsKICAgICRrb21tb19pZCAgID0gYWJzaW50KCAkX1BPU1RbJ2tvbW1vX2lkJ10gICA/PyAwICk7IC8vIGxlZ2FkbwoKICAgIC8vIENhcnJlZ2FyIGRvIHZtMl9jb250YWN0cyBwcmltZWlybwogICAgJGMgPSBudWxsOwogICAgaWYgKCAkY29udGFjdF9pZCApIHsKICAgICAgICAkYyA9ICR3cGRiLT5nZXRfcm93KCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX2NvbnRhY3RzIFdIRVJFIGlkID0gJWQgTElNSVQgMSIsCiAgICAgICAgICAgICRjb250YWN0X2lkCiAgICAgICAgKSApOwogICAgfQogICAgLy8gRmFsbGJhY2s6IGtvbW1vX2lkIGxlZ2FkbwogICAgaWYgKCAhICRjICYmICRrb21tb19pZCApIHsKICAgICAgICAkYyA9ICR3cGRiLT5nZXRfcm93KCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX2NvbnRhY3RzIFdIRVJFIGtvbW1vX2xlYWRfaWQgPSAlZCBMSU1JVCAxIiwKICAgICAgICAgICAgJGtvbW1vX2lkCiAgICAgICAgKSApOwogICAgfQogICAgaWYgKCAhICRjICkgeyB3cF9zZW5kX2pzb25fZXJyb3IoIFsnbXNnJyA9PiAnQ29udGF0byBuw6NvIGVuY29udHJhZG8nXSApOyByZXR1cm47IH0KCiAgICAkcGhvbmVfY2xlYW4gPSBwcmVnX3JlcGxhY2UoICcvXEQvJywgJycsICRjLT5waG9uZSA/PyAnJyApOwogICAgJHNjb3JlICAgICAgID0gKGludCkoICRjLT5zY29yZSA/OiB2bTJfbGVhZF9zY29yZSggKG9iamVjdClbJ3N0YXR1c19pZCcgPT4gJGMtPmtvbW1vX3N0YXR1c19pZCA/PyAnJywgJ2RhdGFfZXZlbnRvJyA9PiAkYy0+ZGF0YV9ldmVudG8gPz8gJyddLCAwICkgKTsKICAgICRldl9mbXQgICAgICA9ICggJGMtPmRhdGFfZXZlbnRvID8/ICcnICkgPyB2bTJfbG9jYWxfZGF0ZSggJ2QvbS9ZJywgJGMtPmRhdGFfZXZlbnRvICkgOiAn4oCUJzsKICAgICRvcmlnZW5zICAgICA9IGpzb25fZGVjb2RlKCAkYy0+b3JpZ2VucyA/PyAnW10nLCB0cnVlICkgPzogW107CiAgICAkc3RfbWFwICAgICAgPSBbJ25vdm8nID0+ICfwn4aVIE5vdm8nLCAnYXF1ZWNlbmRvJyA9PiAn8J+UpSBBcXVlY2VuZG8nLCAncXVlbnRlJyA9PiAn8J+UtCBRdWVudGUnLCAnY29udmVydGlkbycgPT4gJ+KchSBDb252ZXJ0aWRvJywgJ3BlcmRpZG8nID0+ICfinYwgUGVyZGlkbyddOwogICAgJHN0YXR1c19sYmwgID0gJHN0X21hcFsgJGMtPnN0YXR1cyA/PyAnbm92bycgXSA/PyAn8J+GlSBOb3ZvJzsKCiAgICAvLyBFbnZpb3MgcmVjZW50ZXMgKHZtMl9zZW5kcykKICAgICRzZW5kcyA9IFtdOwogICAgaWYgKCAkcGhvbmVfY2xlYW4gKSB7CiAgICAgICAgJHNlbmRzID0gJHdwZGItPmdldF9yZXN1bHRzKCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzIFdIRVJFIHBob25lID0gJXMgT1JERVIgQlkgc2VudF9hdCBERVNDIExJTUlUIDE1IiwKICAgICAgICAgICAgJHBob25lX2NsZWFuCiAgICAgICAgKSApOwogICAgfQoKICAgIC8vIFBlZGlkb3MgV0MKICAgICR3Y19vcmRlcnMgPSBbXTsKICAgIGlmICggJHBob25lX2NsZWFuICYmIHN0cmxlbiggJHBob25lX2NsZWFuICkgPj0gOCApIHsKICAgICAgICAkcGhvbmVfc3VmZml4ID0gJyUnIC4gJHdwZGItPmVzY19saWtlKCBzdWJzdHIoICRwaG9uZV9jbGVhbiwgLTkgKSApOwogICAgICAgICR3Y190YWJsZSA9ICR3cGRiLT5wcmVmaXggLiAnd2Nfb3JkZXJzJzsKICAgICAgICBpZiAoICR3cGRiLT5nZXRfdmFyKCAiU0hPVyBUQUJMRVMgTElLRSAnJHdjX3RhYmxlJyIgKSA9PT0gJHdjX3RhYmxlICkgewogICAgICAgICAgICAkd2Nfb3JkZXJzID0gJHdwZGItPmdldF9yZXN1bHRzKCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgICAgICJTRUxFQ1Qgby5pZCwgby5zdGF0dXMsIG8udG90YWxfYW1vdW50LCBvLmRhdGVfY3JlYXRlZF9nbXQKICAgICAgICAgICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXdjX29yZGVycyBvCiAgICAgICAgICAgICAgICAgTEVGVCBKT0lOIHskd3BkYi0+cHJlZml4fXdjX29yZGVyc19hZGRyZXNzZXMgb2EgT04gb2Eub3JkZXJfaWQgPSBvLmlkIEFORCBvYS5hZGRyZXNzX3R5cGUgPSAnYmlsbGluZycKICAgICAgICAgICAgICAgICBXSEVSRSBvYS5waG9uZSBMSUtFICVzIE9SREVSIEJZIG8uZGF0ZV9jcmVhdGVkX2dtdCBERVNDIExJTUlUIDUiLAogICAgICAgICAgICAgICAgJHBob25lX3N1ZmZpeAogICAgICAgICAgICApICk7CiAgICAgICAgfQogICAgICAgIGlmICggZW1wdHkoICR3Y19vcmRlcnMgKSApIHsKICAgICAgICAgICAgJHdjX29yZGVycyA9ICR3cGRiLT5nZXRfcmVzdWx0cyggJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICAgICAiU0VMRUNUIHAuSUQgYXMgaWQsIHAucG9zdF9zdGF0dXMgYXMgc3RhdHVzLCBwbTIubWV0YV92YWx1ZSBhcyB0b3RhbF9hbW91bnQsIHAucG9zdF9kYXRlIGFzIGRhdGVfY3JlYXRlZF9nbXQKICAgICAgICAgICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXBvc3RzIHAKICAgICAgICAgICAgICAgICBKT0lOIHskd3BkYi0+cHJlZml4fXBvc3RtZXRhIHBtIE9OIHBtLnBvc3RfaWQgPSBwLklEIEFORCBwbS5tZXRhX2tleSA9ICdfYmlsbGluZ19waG9uZScgQU5EIHBtLm1ldGFfdmFsdWUgTElLRSAlcwogICAgICAgICAgICAgICAgIExFRlQgSk9JTiB7JHdwZGItPnByZWZpeH1wb3N0bWV0YSBwbTIgT04gcG0yLnBvc3RfaWQgPSBwLklEIEFORCBwbTIubWV0YV9rZXkgPSAnX29yZGVyX3RvdGFsJwogICAgICAgICAgICAgICAgIFdIRVJFIHAucG9zdF90eXBlID0gJ3Nob3Bfb3JkZXInIE9SREVSIEJZIHAucG9zdF9kYXRlIERFU0MgTElNSVQgNSIsCiAgICAgICAgICAgICAgICAkcGhvbmVfc3VmZml4CiAgICAgICAgICAgICkgKTsKICAgICAgICB9CiAgICB9CiAgICAkbHR2ID0gKGZsb2F0KSBhcnJheV9zdW0oIGFycmF5X2NvbHVtbiggKGFycmF5KSAkd2Nfb3JkZXJzLCAndG90YWxfYW1vdW50JyApICk7CgogICAgLy8gQmFkZ2VzIGRlIG9yaWdlbQogICAgJG9yaWdpbl9sYWJlbHMgPSBbCiAgICAgICAgJ2dhbGVyaWEnICAgICAgICA9PiAn8J+TuCBHYWxlcmlhJywKICAgICAgICAnY2FycmluaG8nICAgICAgID0+ICfwn5uSIENhcnJpbmhvJywKICAgICAgICAncGVkaWRvJyAgICAgICAgID0+ICfwn5OmIFBlZGlkbycsCiAgICAgICAgJ3NvZmlhJyAgICAgICAgICA9PiAn8J+noCBTb2ZJQScsCiAgICAgICAgJ2dydXBvX3ZpcCcgICAgICA9PiAn4q2QIEdydXBvIFZJUCcsCiAgICAgICAgJ3NhaXVfZ3J1cG9fdmlwJyA9PiAn8J+RiyBTYWl1IFZJUCcsCiAgICAgICAgJ3dhYmFfNTAzOScgICAgICA9PiAn8J+TsSBXQUJBJywKICAgIF07CiAgICAkb3JpZ2Vuc19odG1sID0gJyc7CiAgICBmb3JlYWNoICggJG9yaWdlbnMgYXMgJG8gKSB7CiAgICAgICAgaWYgKCBpc3NldCggJG9yaWdpbl9sYWJlbHNbJG9dICkgKSB7CiAgICAgICAgICAgICRvcmlnZW5zX2h0bWwgLj0gJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDtiYWNrZ3JvdW5kOiNmMWY1Zjk7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoycHggN3B4O21hcmdpbi1yaWdodDo0cHg7ZGlzcGxheTppbmxpbmUtYmxvY2siPicgLiAkb3JpZ2luX2xhYmVsc1skb10gLiAnPC9zcGFuPic7CiAgICAgICAgfQogICAgfQogICAgaWYgKCAhICRvcmlnZW5zX2h0bWwgJiYgISBlbXB0eSggJGMtPmNhbmFsX29yaWdlbSApICkgewogICAgICAgICRvcmlnZW5zX2h0bWwgPSAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2JhY2tncm91bmQ6I2YxZjVmOTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjJweCA3cHgiPicgLiBlc2NfaHRtbCggJGMtPmNhbmFsX29yaWdlbSApIC4gJzwvc3Bhbj4nOwogICAgfQoKICAgIC8vIFVUTSBpbmZvCiAgICAkdXRtX3BhcnRzID0gYXJyYXlfZmlsdGVyKCBbICRjLT51dG1fc291cmNlID8/ICcnLCAkYy0+dXRtX21lZGl1bSA/PyAnJywgJGMtPnV0bV9jYW1wYWlnbiA/PyAnJyBdICk7CiAgICAkdXRtX2h0bWwgID0gJHV0bV9wYXJ0cyA/ICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHg7YmFja2dyb3VuZDojZThmMGZlO2NvbG9yOiMxYTczZTg7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoycHggN3B4Ij4nIC4gZXNjX2h0bWwoIGltcGxvZGUoICcgLyAnLCAkdXRtX3BhcnRzICkgKSAuICc8L3NwYW4+JyA6ICcnOwoKICAgICRrb21tb191cmwgPSAkYy0+a29tbW9fbGVhZF9pZCA/ICdodHRwczovL3JsZWl0ZW1hcnRpbnMua29tbW8uY29tL2xlYWRzL2RldGFpbC8nIC4gJGMtPmtvbW1vX2xlYWRfaWQgOiAnJzsKCiAgICAvLyBNb2R1bGUgbGFiZWxzIHBhcmEgdGltZWxpbmUKICAgICRtb2RfbGFiZWxzID0gWwogICAgICAgICdhcXVlY2VyJyAgICAgICA9PiAn8J+UpSBBcXVlY2VyIEQrWCcsCiAgICAgICAgJ2F1dG9fYXF1ZWNlcicgID0+ICfwn5SlIEFxdWVjZXIgQXV0bycsCiAgICAgICAgJ2hvdCcgICAgICAgICAgID0+ICfwn46vIEhPVCcsCiAgICAgICAgJ2J5ZGF0ZScgICAgICAgID0+ICfwn5OFIFBvciBEYXRhJywKICAgICAgICAnYnlkYXRlX2dpZnQnICAgPT4gJ/CfjoEgR2lmdCBDYXJkJywKICAgICAgICAnd2FfcmVjb3ZlcnknICAgPT4gJ/Cfm5IgV0EgUmVjb3ZlcnknLAogICAgICAgICdzZV9lbnRhbycgICAgICA9PiAn4pqZ77iPIFNFL0VOVMODTycsCiAgICBdOwoKICAgIG9iX3N0YXJ0KCk7CiAgICA/PgogICAgPGRpdiBjbGFzcz0idm0yLWRldGFpbC1ncmlkIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZmllbGQiPjxsYWJlbD5TY29yZTwvbGFiZWw+PD9waHAgZWNobyB2bTJfc2NvcmVfYmFkZ2UoICRzY29yZSApOyA/PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1maWVsZCI+PGxhYmVsPlN0YXR1czwvbGFiZWw+PHNwYW4+PD9waHAgZWNobyBlc2NfaHRtbCggJHN0YXR1c19sYmwgKTsgPz48L3NwYW4+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWZpZWxkIj48bGFiZWw+RGF0YSBkbyBFdmVudG88L2xhYmVsPjxzcGFuPjw/cGhwIGVjaG8gZXNjX2h0bWwoICRldl9mbXQgKTsgPz48L3NwYW4+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWZpZWxkIj48bGFiZWw+VGlwbyBkZSBFdmVudG88L2xhYmVsPjxzcGFuPjw/cGhwIGVjaG8gZXNjX2h0bWwoICRjLT50aXBvX2V2ZW50byA/OiAn4oCUJyApOyA/Pjwvc3Bhbj48L2Rpdj4KICAgICAgICA8P3BocCBpZiAoICEgZW1wdHkoICRjLT5lbWFpbCApICkgOiA/PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1maWVsZCIgc3R5bGU9ImdyaWQtY29sdW1uOnNwYW4gMiI+PGxhYmVsPvCfk6cgRW1haWw8L2xhYmVsPjxzcGFuIHN0eWxlPSJjb2xvcjojMjI3MWIxIj48P3BocCBlY2hvIGVzY19odG1sKCAkYy0+ZW1haWwgKTsgPz48L3NwYW4+PC9kaXY+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPD9waHAgaWYgKCAkb3JpZ2Vuc19odG1sICkgOiA/PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1maWVsZCIgc3R5bGU9ImdyaWQtY29sdW1uOnNwYW4gMiI+PGxhYmVsPk9yaWdlbTwvbGFiZWw+PD9waHAgZWNobyAkb3JpZ2Vuc19odG1sOyA/PjwvZGl2PgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDw/cGhwIGlmICggJHV0bV9odG1sICkgOiA/PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1maWVsZCIgc3R5bGU9ImdyaWQtY29sdW1uOnNwYW4gMiI+PGxhYmVsPlVUTTwvbGFiZWw+PD9waHAgZWNobyAkdXRtX2h0bWw7ID8+PC9kaXY+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPD9waHAgaWYgKCAkbHR2ID4gMCApIDogPz4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZmllbGQiIHN0eWxlPSJncmlkLWNvbHVtbjpzcGFuIDIiPjxsYWJlbD5MVFYgKFdDKTwvbGFiZWw+PHN0cm9uZyBzdHlsZT0iY29sb3I6IzJlN2QzMiI+UiQgPD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCAkbHR2LCAyLCAnLCcsICcuJyApOyA/Pjwvc3Ryb25nPiDigJQgPD9waHAgZWNobyBjb3VudCggJHdjX29yZGVycyApOyA/PiBwZWRpZG8ocyk8L2Rpdj4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICA8P3BocCBpZiAoICEgZW1wdHkoICRjLT5sYXN0X2FjdGl2aXR5ICkgKSA6ID8+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWZpZWxkIj48bGFiZWw+w5psdGltYSBhdGl2aWRhZGU8L2xhYmVsPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNTc2MDZhIj48P3BocCBlY2hvIHZtMl9sb2NhbF9kYXRlKCAnZC9tL1kgSDppJywgJGMtPmxhc3RfYWN0aXZpdHkgKTsgPz48L3NwYW4+PC9kaXY+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPD9waHAgaWYgKCAhIGVtcHR5KCAkYy0+Z2FsZXJpYV9hdHJhY2FvICkgfHwgISBlbXB0eSggJGMtPmNhcnRfcHJvZHVjdCApICkgOiA/PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1maWVsZCI+PGxhYmVsPkludGVyZXNzZTwvbGFiZWw+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij48P3BocCBlY2hvIGVzY19odG1sKCAkYy0+Z2FsZXJpYV9hdHJhY2FvID86ICRjLT5jYXJ0X3Byb2R1Y3QgKTsgPz48L3NwYW4+PC9kaXY+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJ2bTItdGltZWxpbmUiPgogICAgICAgIDxoND7wn5OLIFRpbWVsaW5lPC9oND4KCiAgICAgICAgPD9waHAgZm9yZWFjaCAoICR3Y19vcmRlcnMgYXMgJG9yZCApIDoKICAgICAgICAgICAgJHNfaWNvbiA9IGluX2FycmF5KCAkb3JkLT5zdGF0dXMsIFsnd2MtcHJvY2Vzc2luZycsJ3Byb2Nlc3NpbmcnLCd3Yy1zaWduaW5nLXBlbmRpbmcnLCdzaWduaW5nLXBlbmRpbmcnLCd3Yy1jb250cmFjdC1zaWduZWQnLCdjb250cmFjdC1zaWduZWQnXSApCiAgICAgICAgICAgICAgICA/ICfinIUnIDogKCBpbl9hcnJheSggJG9yZC0+c3RhdHVzLCBbJ3djLWNvbXBsZXRlZCcsJ2NvbXBsZXRlZCddICkgPyAn8J+PhicgOiAn8J+bkicgKTsKICAgICAgICA/PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi10bC1pdGVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXRsLWljb24iPjw/cGhwIGVjaG8gJHNfaWNvbjsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXRsLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXRsLXRpdGxlIj5QZWRpZG8gIzw/cGhwIGVjaG8gZXNjX2h0bWwoICRvcmQtPmlkICk7ID8+IOKAlCBSJCA8P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoIChmbG9hdCkkb3JkLT50b3RhbF9hbW91bnQsIDIsICcsJywgJy4nICk7ID8+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItdGwtdGltZSI+PD9waHAgZWNobyB2bTJfbG9jYWxfZGF0ZSggJ2QvbS9ZIEg6aScsICRvcmQtPmRhdGVfY3JlYXRlZF9nbXQgKTsgPz4gwrcgPD9waHAgZWNobyBlc2NfaHRtbCggJG9yZC0+c3RhdHVzICk7ID8+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CgogICAgICAgIDw/cGhwIGZvcmVhY2ggKCAkc2VuZHMgYXMgJHMgKSA6CiAgICAgICAgICAgICRjdHggICAgICAgPSAhIGVtcHR5KCAkcy0+Y29udGV4dCApID8ganNvbl9kZWNvZGUoICRzLT5jb250ZXh0LCB0cnVlICkgOiBbXTsKICAgICAgICAgICAgJG1vZF9yYXcgICA9ICRzLT5tb2R1bGUgPz8gJyc7CiAgICAgICAgICAgIC8vIE5vcm1hbGl6YXIgcHJlZml4b3MgdGlwbyAiYnlkYXRlXzBfNyIKICAgICAgICAgICAgJG1vZF9iYXNlICA9IHByZWdfcmVwbGFjZSgnL19cZC4qJC8nLCAnJywgJG1vZF9yYXcpOwogICAgICAgICAgICAkbW9kX2xhYmVsID0gJG1vZF9sYWJlbHNbJG1vZF9iYXNlXSA/PyAoICRtb2RfbGFiZWxzWyRtb2RfcmF3XSA/PyBlc2NfaHRtbCggdWNmaXJzdCggc3RyX3JlcGxhY2UoJ18nLCcgJywgJG1vZF9yYXcpICkgKSApOwogICAgICAgICAgICAkY2ggICAgICAgID0gJHMtPmNoYW5uZWxfa2V5ID8/ICcnOwogICAgICAgID8+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLXRsLWl0ZW0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItdGwtaWNvbiI+8J+TqDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItdGwtY29udGVudCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItdGwtdGl0bGUiPjw/cGhwIGVjaG8gJG1vZF9sYWJlbDsgPz48P3BocCBpZiAoICRjaCApIGVjaG8gJyA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6Izg4ODtiYWNrZ3JvdW5kOiNmMWY1Zjk7Ym9yZGVyLXJhZGl1czozcHg7cGFkZGluZzoxcHggNXB4Ij4nIC4gZXNjX2h0bWwoJGNoKSAuICc8L3NwYW4+JzsgPz48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi10bC10aW1lIj48P3BocCBlY2hvIHZtMl9sb2NhbF9kYXRlKCAnZC9tL1kgSDppJywgJHMtPnNlbnRfYXQgKTsgPz48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KCiAgICAgICAgPD9waHAgaWYgKCBlbXB0eSggJHdjX29yZGVycyApICYmIGVtcHR5KCAkc2VuZHMgKSApIDogPz4KICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjojODg4O2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6MTZweCAwIj5OZW5odW1hIGF0aXZpZGFkZSByZWdpc3RyYWRhIGFpbmRhLjwvZGl2PgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPC9kaXY+CiAgICA8P3BocAogICAgJGh0bWwgPSBvYl9nZXRfY2xlYW4oKTsKCiAgICAkYWN0aW9uc19odG1sID0gJyc7CiAgICBpZiAoICRwaG9uZV9jbGVhbiApIHsKICAgICAgICAkYWN0aW9uc19odG1sIC49ICc8YSBjbGFzcz0idm0yLWJ0bi13YSIgaHJlZj0iaHR0cHM6Ly93YS5tZS8nIC4gZXNjX2F0dHIoICRwaG9uZV9jbGVhbiApIC4gJyIgdGFyZ2V0PSJfYmxhbmsiPvCfkqwgV2hhdHNBcHA8L2E+JzsKICAgIH0KICAgIGlmICggJGtvbW1vX3VybCApIHsKICAgICAgICAkYWN0aW9uc19odG1sIC49ICcgPGEgY2xhc3M9InZtMi1idG4ta29tbW8iIGhyZWY9IicgLiBlc2NfdXJsKCAka29tbW9fdXJsICkgLiAnIiB0YXJnZXQ9Il9ibGFuayI+8J+UlyBLb21tbzwvYT4nOwogICAgfQogICAgaWYgKCAhIGVtcHR5KCAkYy0+ZW1haWwgKSApIHsKICAgICAgICAkYWN0aW9uc19odG1sIC49ICcgPGEgY2xhc3M9InZtMi1idG4tc20iIGhyZWY9Im1haWx0bzonIC4gZXNjX2F0dHIoICRjLT5lbWFpbCApIC4gJyIgc3R5bGU9ImJhY2tncm91bmQ6IzAwNzlkMztjb2xvcjojZmZmIiB0YXJnZXQ9Il9ibGFuayI+8J+TpyBFbWFpbDwvYT4nOwogICAgfQoKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCBbJ2h0bWwnID0+ICRodG1sLCAnYWN0aW9ucycgPT4gJGFjdGlvbnNfaHRtbF0gKTsKfQoKCgoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIE1PRFVMRTogQXV0b21hw6fDtWVzICg4IHRhYnMpCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy8g4pSA4pSA4pSAIEhlbHBlcjogVGVzdCBTZW5kIEJveCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX3JlbmRlcl90ZXN0X2JveCggJGJveF9pZCwgJGNoYW5uZWxfa2V5LCAkZGVmYXVsdF9tc2cgPSAnJywgJGRlZmF1bHRfdGVtcGxhdGUgPSAnJyApIHsKICAgICRub25jZSAgICA9IHdwX2NyZWF0ZV9ub25jZSggJ3ZtMl90ZXN0X3NlbmQnICk7CiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgICRpc193YWJhICA9IGlzc2V0KCRjaGFubmVsc1skY2hhbm5lbF9rZXldKSAmJiAkY2hhbm5lbHNbJGNoYW5uZWxfa2V5XVsndHlwZSddID09PSAnd2FiYSc7CiAgICA/PgogICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjBmN2ZmO2JvcmRlcjoxcHggZGFzaGVkICMwMDc5ZDM7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE0cHg7bWFyZ2luLXRvcDoxNHB4Ij4KICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojMDA3OWQzIj7wn6eqIFRlc3RhciBFbnZpbzwvc3Ryb25nPgogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpmbGV4LWVuZDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tdG9wOjhweCI+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZsZXg6MCAwIDE4MHB4O21pbi13aWR0aDoxNDBweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTozcHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5OxIENlbHVsYXIgZGVzdGlubzwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InZtMnRiXzw/cGhwIGVjaG8gZXNjX2F0dHIoJGJveF9pZCk7ID8+X3Bob25lIgogICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSI1NTExOTk5ODg3NzY2IgogICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNiMGM0ZDg7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgaWYgKCRpc193YWJhKTogPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZmxleDoyO21pbi13aWR0aDoxODBweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTozcHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5OLIFRlbXBsYXRlIFdBQkE8L2xhYmVsPgogICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0idm0ydGJfPD9waHAgZWNobyBlc2NfYXR0cigkYm94X2lkKTsgPz5fdG1wbCIKICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2IwYzRkODtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyB2bTJfd2FiYV90ZW1wbGF0ZV9vcHRpb25zX2h0bWwoJGRlZmF1bHRfdGVtcGxhdGUpOyA/PgogICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJmbGV4OjI7bWluLXdpZHRoOjE4MHB4Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjNweDtmb250LXdlaWdodDo2MDAiPvCfkqwgTWVuc2FnZW08L2xhYmVsPgogICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJ2bTJ0Yl88P3BocCBlY2hvIGVzY19hdHRyKCRib3hfaWQpOyA/Pl9tc2ciIHJvd3M9IjIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2IwYzRkODtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTJweDtyZXNpemU6dmVydGljYWwiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRkZWZhdWx0X21zZyk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweCI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0idm0yVGVzdEJveCgnPD9waHAgZWNobyBlc2NfanMoJGJveF9pZCk7ID8+JywnPD9waHAgZWNobyBlc2NfanMoJGNoYW5uZWxfa2V5KTsgPz4nLCc8P3BocCBlY2hvIGVzY19qcygkbm9uY2UpOyA/PicsPD9waHAgZWNobyAkaXNfd2FiYSA/ICd0cnVlJyA6ICdmYWxzZSc7ID8+KSIKICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6IzAwNzlkMztjb2xvcjojZmZmO2JvcmRlcjpub25lO3BhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo2cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEzcHg7d2hpdGUtc3BhY2U6bm93cmFwIj4KICAgICAgICAgICAgICAgICAgICDilrbvuI8gRW52aWFyIFRlc3RlCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9InZtMnRiXzw/cGhwIGVjaG8gZXNjX2F0dHIoJGJveF9pZCk7ID8+X3Jlc3VsdCIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O21pbi1oZWlnaHQ6MTZweCI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8P3BocAp9CgpmdW5jdGlvbiB2bTJfYXV0b21hY29lc19wYWdlKCkgewogICAgZ2xvYmFsICR3cGRiOwoKICAgIC8vIEhhbmRsZSBmb3JtIHNhdmUKICAgIGlmICggaXNzZXQoJF9QT1NUWyd2bTJfYXV0b19zYXZlJ10pICYmIGNoZWNrX2FkbWluX3JlZmVyZXIoJ3ZtMl9hdXRvX3NhdmUnKSApIHsKICAgICAgICAkYm9vbF9vcHRzID0gWyd2bTJfYXF1ZWNlcl9raWxsJywndm0yX2FxdWVjZXJfY2hhbm5lbCcsCiAgICAgICAgICAgICAgICAgICAgICAndm0yX2FxdWVjZXJfZDFfb24nLCd2bTJfYXF1ZWNlcl9kMV90ZW1wbGF0ZScsJ3ZtMl9hcXVlY2VyX2QxX21zZycsCiAgICAgICAgICAgICAgICAgICAgICAndm0yX2FxdWVjZXJfZDdfb24nLCd2bTJfYXF1ZWNlcl9kN190ZW1wbGF0ZScsJ3ZtMl9hcXVlY2VyX2Q3X21zZycsCiAgICAgICAgICAgICAgICAgICAgICAndm0yX2FxdWVjZXJfZDE1X29uJywndm0yX2FxdWVjZXJfZDE1X3RlbXBsYXRlJywndm0yX2FxdWVjZXJfZDE1X21zZycsCiAgICAgICAgICAgICAgICAgICAgICAndm0yX2FxdWVjZXJfZDMwX29uJywndm0yX2FxdWVjZXJfZDMwX3RlbXBsYXRlJywndm0yX2FxdWVjZXJfZDMwX21zZycsCiAgICAgICAgICAgICAgICAgICAgICAndm0yX2J5ZGF0ZV9raWxsJywndm0yX2J5ZGF0ZV9jaGFubmVsJywKICAgICAgICAgICAgICAgICAgICAgICd2bTJfYXV0b19hcXVlY2VyX29uJywndm0yX2F1dG9fYXF1ZWNlcl90aHJlc2hvbGQnLAogICAgICAgICAgICAgICAgICAgICAgJ3ZtMl9hdXRvX2FxdWVjZXJfY2hhbm5lbCcsJ3ZtMl9hdXRvX2FxdWVjZXJfdGVtcGxhdGUnLAogICAgICAgICAgICAgICAgICAgICAgJ3ZtMl9hdXRvX2FxdWVjZXJfY29vbGRvd24nLCd2bTJfYXV0b19hcXVlY2VyX2JhdGNoJywndm0yX2F1dG9fYXF1ZWNlcl9tc2cnLAogICAgICAgICAgICAgICAgICAgICAgJ3ZtMl9hdXRvX2FxdWVjZXJfZW1haWxfb24nLCd2bTJfYXV0b19hcXVlY2VyX2VtYWlsX3N1YmplY3QnLCd2bTJfYXV0b19hcXVlY2VyX2VtYWlsX2JvZHknLAogICAgICAgICAgICAgICAgICAgICAgJ3ZtMl9ob3Rfb24nLCd2bTJfaG90X2tpbGwnLCd2bTJfaG90X2NoYW5uZWwnLCd2bTJfaG90X3RlbXBsYXRlJywKICAgICAgICAgICAgICAgICAgICAgICd2bTJfaG90X2Nvb2xkb3duJywndm0yX2hvdF9iYXRjaCcsJ3ZtMl9ob3RfbXNnJywKICAgICAgICAgICAgICAgICAgICAgICd2bTJfaG90X2VtYWlsX29uJywndm0yX2hvdF9lbWFpbF9zdWJqZWN0Jywndm0yX2hvdF9lbWFpbF9ib2R5JywKICAgICAgICAgICAgICAgICAgICAgICAndm0yX2J5ZGF0ZV9lbWFpbF9vbicsJ3ZtMl9ieWRhdGVfZW1haWxfc3ViamVjdCcsJ3ZtMl9ieWRhdGVfZW1haWxfYm9keSddOwogICAgICAgIGZvcmVhY2ggKCRib29sX29wdHMgYXMgJG9wdCkgewogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCRvcHQsIGlzc2V0KCRfUE9TVFskb3B0XSkgPyBzYW5pdGl6ZV90ZXh0YXJlYV9maWVsZCgkX1BPU1RbJG9wdF0pIDogJzAnKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoWydzZW1hbmEnLCdxdWluemVuYScsJ21lcycsJ3RyZXNfbWVzZXMnLCdzZWlzX21lc2VzJywnZGVwb2lzJywncGFzc2FkbyddIGFzICRnKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKFsnb24nLCd0ZW1wbGF0ZScsJ21zZyddIGFzICRmKSB7CiAgICAgICAgICAgICAgICAkayA9ICJ2bTJfYnlkYXRlX3skZ31feyRmfSI7CiAgICAgICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCRrLCBpc3NldCgkX1BPU1RbJGtdKSA/IHNhbml0aXplX3RleHRhcmVhX2ZpZWxkKCRfUE9TVFska10pIDogJzAnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MgaXMtZGlzbWlzc2libGUiPjxwPuKchSBDb25maWd1cmHDp8O1ZXMgc2FsdmFzIGNvbSBzdWNlc3NvLjwvcD48L2Rpdj4nOwogICAgfQoKICAgICRhY3RpdmVfdGFiID0gaXNzZXQoJF9HRVRbJ3RhYiddKSA/IHNhbml0aXplX2tleSgkX0dFVFsndGFiJ10pIDogJ2NhZGVuY2lhJzsKCiAgICAvLyBTZXR0aW5ncwogICAgJGFfa2lsbCAgICA9IGdldF9vcHRpb24oJ3ZtMl9hcXVlY2VyX2tpbGwnLCAnMScpOwogICAgJGFfY2hhbm5lbCA9IGdldF9vcHRpb24oJ3ZtMl9hcXVlY2VyX2NoYW5uZWwnLCAnd2FiYV81MDM5Jyk7CiAgICAkYmRfa2lsbCAgID0gZ2V0X29wdGlvbigndm0yX2J5ZGF0ZV9raWxsJywgJzEnKTsKICAgICRiZF9jaCAgICAgPSBnZXRfb3B0aW9uKCd2bTJfYnlkYXRlX2NoYW5uZWwnLCAnd2FiYV81MDM5Jyk7CgogICAgJHdhYmFfdHBscyA9IHZtMl93YWJhX3RlbXBsYXRlc19saXN0KCk7CgogICAgJHN0ZXBzID0gWwogICAgICAgICdkMScgID0+IFsnbGFiZWwnPT4nRCsxJywgICdkZWxheSc9PjEsICAnZGVmYXVsdF90bXBsJz0+J3ZtX3Bvc19qYW5lbGFfZDMnLCAnZGVmYXVsdF9tc2cnPT4iT2kge25vbWV9ISDwn5GLIFZpIHF1ZSB2b2PDqiBhaW5kYSBlc3TDoSBwZXNxdWlzYW5kbyBhdHJhw6fDtWVzIHBhcmEgc3VhIGZlc3RhLiBQb3NzbyB0ZSBhanVkYXIgYSBlbmNvbnRyYXIgYSBvcMOnw6NvIHBlcmZlaXRhPyDwn46JIl0sCiAgICAgICAgJ2Q3JyAgPT4gWydsYWJlbCc9PidEKzcnLCAgJ2RlbGF5Jz0+NywgICdkZWZhdWx0X3RtcGwnPT4nNWRfd2FiYV9nZzkzOWknLCAgICdkZWZhdWx0X21zZyc9PiJPaSB7bm9tZX0hIPCfjJ8gQWluZGEgZXN0YW1vcyBjb20gc3VhIGRhdGEgZGlzcG9uw612ZWwuIFF1ZSB0YWwgZ2FyYW50aXIgYWdvcmE/IPCfkYciXSwKICAgICAgICAnZDE1JyA9PiBbJ2xhYmVsJz0+J0QrMTUnLCAnZGVsYXknPT4xNSwgJ2RlZmF1bHRfdG1wbCc9PicxNWRfd2FiYV9xbHdsZWsnLCAgJ2RlZmF1bHRfbXNnJz0+Ik9pIHtub21lfSEg8J+OqiBTdWEgZmVzdGEgbWVyZWNlIG8gbWVsaG9yISBBaW5kYSB0ZW1vcyBkaXNwb25pYmlsaWRhZGUuIFZhbW9zIGZlY2hhcj8iXSwKICAgICAgICAnZDMwJyA9PiBbJ2xhYmVsJz0+J0QrMzAnLCAnZGVsYXknPT4zMCwgJ2RlZmF1bHRfdG1wbCc9PiczMGRfd2FiYV9oMnR1cmgnLCAgJ2RlZmF1bHRfbXNnJz0+Ik9pIHtub21lfSEg8J+SqyBGYXogdW0gbcOqcyBkZXNkZSBub3NzbyDDumx0aW1vIGNvbnRhdG8uIEFpbmRhIHBvc3NvIGFqdWRhciBjb20gc3VhIGZlc3RhPyDwn6WzIl0sCiAgICBdOwoKICAgIC8vIENvdW50IGVsaWdpYmxlIHBlciBzdGVwOiBsZWFkcyBjdWpvIMO6bHRpbW8gZW52aW8gKHF1YWxxdWVyIG3Ds2R1bG8pIGZvaSB+RCBkaWFzIGF0csOhcwogICAgLy8gKGphbmVsYSBkZSA3IGRpYXMpIGUgbsOjbyByZWNlYmVyYW0gbWVuc2FnZW0gbWFpcyByZWNlbnRlIOKGkiBwcm9udG9zIHBhcmEgcHLDs3hpbW8gdG9xdWUKICAgICRzdGVwX2NvdW50cyA9IFtdOwogICAgZm9yZWFjaCAoJHN0ZXBzIGFzICRza2V5ID0+ICRzdGVwKSB7CiAgICAgICAgJGQgPSAoaW50KSRzdGVwWydkZWxheSddOwogICAgICAgICRjbnQgPSAkd3BkYi0+Z2V0X3Zhcigkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgIlNFTEVDVCBDT1VOVChESVNUSU5DVCBzLnBob25lKQogICAgICAgICAgICAgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMgcwogICAgICAgICAgICAgV0hFUkUgREFURURJRkYoTk9XKCksIHMuc2VudF9hdCkgQkVUV0VFTiAlZCBBTkQgJWQKICAgICAgICAgICAgICAgQU5EIE5PVCBFWElTVFMgKAogICAgICAgICAgICAgICAgICAgU0VMRUNUIDEgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMgczIKICAgICAgICAgICAgICAgICAgIFdIRVJFIHMyLnBob25lID0gcy5waG9uZSBBTkQgczIuc2VudF9hdCA+IHMuc2VudF9hdAogICAgICAgICAgICAgICApIiwKICAgICAgICAgICAgJGQsICRkICsgNgogICAgICAgICkpOwogICAgICAgICRzdGVwX2NvdW50c1skc2tleV0gPSAoaW50KSRjbnQ7CiAgICB9CgogICAgLy8gQnktZGF0ZSBncm91cHMKICAgICRiZF9ncm91cHMgPSBbCiAgICAgICAgJ3NlbWFuYScgICAgID0+IFsnbGFiZWwnPT4n8J+UtCBFc3RhIHNlbWFuYScsICdjb2xvcic9PicjZGMzNTQ1JywgJ2RmJz0+MCwgICAgJ2R0Jz0+NywgICAgJ3RtcGwnPT4ndXJnZW5jaWFfZXZlbnRvX3NlbWFuYSddLAogICAgICAgICdxdWluemVuYScgICA9PiBbJ2xhYmVsJz0+J/Cfn6AgUXVpbnplbmEnLCAgICAnY29sb3InPT4nI2ZkN2UxNCcsICdkZic9PjgsICAgICdkdCc9PjE0LCAgICd0bXBsJz0+JzVkX3dhYmFfZ2c5MzlpJ10sCiAgICAgICAgJ21lcycgICAgICAgID0+IFsnbGFiZWwnPT4n8J+foSBNw6pzJywgICAgICAgICAgJ2NvbG9yJz0+JyNmZmMxMDcnLCAnZGYnPT4xNSwgICAnZHQnPT4zMCwgICAndG1wbCc9PicxNWRfd2FiYV9xbHdsZWsnXSwKICAgICAgICAndHJlc19tZXNlcycgPT4gWydsYWJlbCc9Pifwn5+iIDMgbWVzZXMnLCAgICAgICdjb2xvcic9PicjMjhhNzQ1JywgJ2RmJz0+MzEsICAgJ2R0Jz0+OTAsICAgJ3RtcGwnPT4nMzBkX3dhYmFfaDJ0dXJoJ10sCiAgICAgICAgJ3NlaXNfbWVzZXMnID0+IFsnbGFiZWwnPT4n8J+UtSA2IG1lc2VzJywgICAgICAnY29sb3InPT4nIzAwN2JmZicsICdkZic9PjkxLCAgICdkdCc9PjE4MCwgICd0bXBsJz0+JzMwZF93YWJhX2gydHVyaCddLAogICAgICAgICdkZXBvaXMnICAgICA9PiBbJ2xhYmVsJz0+J+KaqiBEZXBvaXMnLCAgICAgICAgJ2NvbG9yJz0+JyM2Yzc1N2QnLCAnZGYnPT4xODEsICAnZHQnPT45OTk5LCAndG1wbCc9PicnXSwKICAgICAgICAncGFzc2FkbycgICAgPT4gWydsYWJlbCc9PifirJsgUGFzc2FkbycsICAgICAgICdjb2xvcic9PicjMzQzYTQwJywgJ2RmJz0+LTk5OTksJ2R0Jz0+LTEsICAgJ3RtcGwnPT4nY2FydGFvcHJlc2VudGUnXSwKICAgIF07CgogICAgLy8gUG9yIERhdGEgS1BJOiB1c2Egdm0yX2NvbnRhY3RzIChkYXRhX2V2ZW50byBlbSBmb3JtYXRvIFktbS1kKQogICAgJGJkX2NvdW50cyA9IFtdOwogICAgZm9yZWFjaCAoJGJkX2dyb3VwcyBhcyAkZ2tleSA9PiAkZykgewogICAgICAgIGlmICgkZ2tleSA9PT0gJ3Bhc3NhZG8nKSB7CiAgICAgICAgICAgICRjbnQgPSAkd3BkYi0+Z2V0X3ZhcigKICAgICAgICAgICAgICAgICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfY29udGFjdHMKICAgICAgICAgICAgICAgICBXSEVSRSBkYXRhX2V2ZW50byBJUyBOT1QgTlVMTCBBTkQgZGF0YV9ldmVudG8gIT0gJycKICAgICAgICAgICAgICAgICAgIEFORCBkYXRhX2V2ZW50byA8IENVUkRBVEUoKSIKICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY250ID0gJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICAgICAiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX2NvbnRhY3RzCiAgICAgICAgICAgICAgICAgV0hFUkUgZGF0YV9ldmVudG8gSVMgTk9UIE5VTEwgQU5EIGRhdGFfZXZlbnRvICE9ICcnCiAgICAgICAgICAgICAgICAgICBBTkQgZGF0YV9ldmVudG8gQkVUV0VFTiBEQVRFX0FERChDVVJEQVRFKCksIElOVEVSVkFMICVkIERBWSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkQgREFURV9BREQoQ1VSREFURSgpLCBJTlRFUlZBTCAlZCBEQVkpIiwKICAgICAgICAgICAgICAgICRnWydkZiddLCAkZ1snZHQnXQogICAgICAgICAgICApKTsKICAgICAgICB9CiAgICAgICAgJGJkX2NvdW50c1skZ2tleV0gPSAoaW50KSRjbnQ7CiAgICB9CgogICAgLy8gV0EgUmVjb3Zlcnkgc3RhdHMgKHRhYmxlIG1heSBub3QgZXhpc3Qg4oCUIHN1cHByZXNzIGVycm9ycykKICAgICR3YV9raWxsICAgID0gZ2V0X29wdGlvbigndm1fd2Ffa2lsbF9zd2l0Y2gnLCAnMCcpOwogICAgJHdhX2NoYW5uZWwgPSBnZXRfb3B0aW9uKCd2bV93YV9zZW5kX2NoYW5uZWwnLCAnemFwaV8xODg2Jyk7CiAgICAkcmVjX3RhYmxlICA9ICR3cGRiLT5wcmVmaXggLiAnd2NfY2FydF9yZWNvdmVyeSc7CiAgICAkdGJsX2V4aXN0cyA9ICR3cGRiLT5nZXRfdmFyKCJTSE9XIFRBQkxFUyBMSUtFICckcmVjX3RhYmxlJyIpID09PSAkcmVjX3RhYmxlOwogICAgJHdhX3RvdGFsID0gJHdhX3BlbmRpbmcgPSAkd2Ffc2VudCA9ICR3YV9yZWNvdmVyZWQgPSAwOwogICAgJGNhcnRzID0gW107CiAgICBpZiAoJHRibF9leGlzdHMpIHsKICAgICAgICAkd2FfdG90YWwgICAgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHJlY190YWJsZSIpOwogICAgICAgICR3YV9wZW5kaW5nICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkcmVjX3RhYmxlIFdIRVJFIHN0YXR1cyBJTiAoJ3BlbmRpbmcnLCdjYXB0dXJlZCcpIik7CiAgICAgICAgJHdhX3NlbnQgICAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICRyZWNfdGFibGUgV0hFUkUgc3RhdHVzID0gJ3NlbnQnIik7CiAgICAgICAgJHdhX3JlY292ZXJlZCA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICRyZWNfdGFibGUgV0hFUkUgc3RhdHVzID0gJ3JlY292ZXJlZCciKTsKICAgICAgICAkY2FydHMgICAgICAgID0gJHdwZGItPmdldF9yZXN1bHRzKCJTRUxFQ1QgKiBGUk9NICRyZWNfdGFibGUgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIExJTUlUIDEwIik7CiAgICB9CgogICAgLy8gRXhpdC1JbnRlbnQgc3RhdHMKICAgICRlaV9zaG93biAgPSAoaW50KWdldF9vcHRpb24oJ3ZtX2VpX3N0YXRfc2hvd3MnLCAwKTsKICAgICRlaV9jbGlja3MgPSAoaW50KWdldF9vcHRpb24oJ3ZtX2VpX3N0YXRfY2xpY2tzJywgMCk7CiAgICAkZWlfcmF0ZSAgID0gJGVpX3Nob3duID4gMCA/IHJvdW5kKCRlaV9jbGlja3MgLyAkZWlfc2hvd24gKiAxMDAsIDEpIDogMDsKICAgID8+CiAgICA8ZGl2IGNsYXNzPSJ3cmFwIHZtMi13cmFwIj4KICAgIDxoMT7wn6SWIEF1dG9tYcOnw7VlczwvaDE+CgogICAgPHN0eWxlPgogICAgLnZtMi1hdXRvLXRhYnN7ZGlzcGxheTpmbGV4O2dhcDozcHg7bWFyZ2luLWJvdHRvbToyMHB4O2ZsZXgtd3JhcDp3cmFwO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlMGUwZTA7cGFkZGluZy1ib3R0b206MH0KICAgIC52bTItYXV0by10YWJ7cGFkZGluZzo4cHggMTJweDtib3JkZXItcmFkaXVzOjZweCA2cHggMCAwO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiM1NzYwNmE7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NTAwO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDoycHh9CiAgICAudm0yLWF1dG8tdGFiOmhvdmVye2JhY2tncm91bmQ6I2Y2ZjhmYTtjb2xvcjojMWQyMzI3fQogICAgLnZtMi1hdXRvLXRhYi5hY3RpdmV7YmFja2dyb3VuZDojZmZmO2JvcmRlci1jb2xvcjojZTBlMGUwO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZjtjb2xvcjojMWQyMzI3O2ZvbnQtd2VpZ2h0OjcwMH0KICAgIC52bTItdGFiLWJvZHl7ZGlzcGxheTpub25lfS52bTItdGFiLWJvZHkuYWN0aXZle2Rpc3BsYXk6YmxvY2t9CiAgICAudm0yLXN0ZXAtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE4cHg7bWFyZ2luLWJvdHRvbToxNHB4O2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjA1KX0KICAgIC52bTItc3RlcC1oZHJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjE0cHg7ZmxleC13cmFwOndyYXA7Z2FwOjhweH0KICAgIC52bTItc3RlcC1iYWRnZXtiYWNrZ3JvdW5kOiMxZDIzMjc7Y29sb3I6I2ZmZjtwYWRkaW5nOjRweCAxMnB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDB9CiAgICAudm0yLWVsaWdpYmxle2JhY2tncm91bmQ6I2U4ZjRmZDtjb2xvcjojMDA2NmNjO3BhZGRpbmc6NHB4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMH0KICAgIC52bTItc3RlcC1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweH0KICAgIEBtZWRpYShtYXgtd2lkdGg6NjQwcHgpey52bTItc3RlcC1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fQogICAgLnZtMi1jdHJsLWJhcntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEycHggMThweDttYXJnaW4tYm90dG9tOjE4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTZweDtmbGV4LXdyYXA6d3JhcH0KICAgIC52bTItY3RybC1iYXIgbGFiZWx7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzU3NjA2YTtmb250LXdlaWdodDo1MDA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4fQogICAgLnZtMi1jdHJsLWJhciBzZWxlY3R7Zm9udC1zaXplOjEzcHh9CiAgICAudm0yLWtzLW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6I2ZlZjJmMjtjb2xvcjojZGMyNjI2O2JvcmRlcjoxcHggc29saWQgI2ZjYTVhNTtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDB9CiAgICAudm0yLWtzLW9mZntkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kOiNmMGZkZjQ7Y29sb3I6IzE2YTM0YTtib3JkZXI6MXB4IHNvbGlkICM4NmVmYWM7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwfQogICAgLnZtMi1iZC1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjYwcHgsMWZyKSk7Z2FwOjEycHh9CiAgICAudm0yLWJkLWNhcmR7YmFja2dyb3VuZDojZmZmO2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTRweDtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLC4wNSk7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjE1cyBlYXNlfQogICAgLnZtMi1iZC1jYXJkOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0ycHgpO2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKX0KICAgIC52bTItYmQtbGJse2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjhweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyfQogICAgLnZtMi1iZC1ue2ZvbnQtc2l6ZToyNnB4O2ZvbnQtd2VpZ2h0OjgwMDttYXJnaW4tYm90dG9tOjZweH0KICAgIC52bTItc3RhdC1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoNCwxZnIpO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MjBweH0KICAgIEBtZWRpYShtYXgtd2lkdGg6NjAwcHgpey52bTItc3RhdC1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLDFmcil9fQogICAgLnZtMi1zdGF0LW1pbml7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHg7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjE1cyBlYXNlfQogICAgLnZtMi1zdGF0LW1pbmk6aG92ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpO2JvcmRlci1jb2xvcjojMDA3M2FhfQogICAgLnZtMi1zdGF0LW1pbmkgLm57Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiMxZDIzMjd9CiAgICAudm0yLXN0YXQtbWluaSAubHtmb250LXNpemU6MTFweDtjb2xvcjojNTc2MDZhO21hcmdpbi10b3A6MnB4fQogICAgLnZtMi1wbGFjZWhvbGRlcntiYWNrZ3JvdW5kOiNmNmY4ZmE7Ym9yZGVyOjJweCBkYXNoZWQgI2QwZDdkZTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo1MHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NzYwNmF9CiAgICAudm0yLXBsYWNlaG9sZGVyIGgze2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiMxZDIzMjc7bWFyZ2luLWJvdHRvbTo4cHh9CiAgICAudm0yLWZsZC1sYmx7Zm9udC1zaXplOjExcHg7Y29sb3I6IzU3NjA2YTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206M3B4O2ZvbnQtd2VpZ2h0OjUwMH0KICAgIC8qIOKUgOKUgCBLUEkgY2FyZHMgdXNhZG9zIG5hcyB0YWJzIENhcnJpbmhvIGUgRXhpdC1JbnRlbnQg4pSA4pSAICovCiAgICAudm0yLWtwaXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDE2MHB4LDFmcikpO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MjBweH0KICAgIC52bTIta3Bpe2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MThweCAyMHB4O2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjA2KTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmFsbCAuMTVzIGVhc2V9CiAgICAudm0yLWtwaTpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtib3gtc2hhZG93OjAgNHB4IDE0cHggcmdiYSgwLDAsMCwuMTMpO2JvcmRlci1jb2xvcjojMDA3M2FhfQogICAgLnZtMi1rcGkgLmxhYmVse2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi41cHg7bWFyZ2luLWJvdHRvbTo4cHg7Zm9udC13ZWlnaHQ6NjAwfQogICAgLnZtMi1rcGkgLnZhbHVle2ZvbnQtc2l6ZToyOHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWExYTFhO2xpbmUtaGVpZ2h0OjF9CiAgICAudm0yLWtwaSAuZGVsdGF7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDo4cHh9CiAgICAudm0yLWtwaSAuZGVsdGEudXB7Y29sb3I6IzI3YWU2MH0udm0yLWtwaSAuZGVsdGEuZG93bntjb2xvcjojZTc0YzNjfS52bTIta3BpIC5kZWx0YS5uZXV0cmFse2NvbG9yOiM5OTl9CiAgICAvKiDilIDilIAgQ2FyZCAvIEdyaWQgbGF5b3V0IOKUgOKUgCAqLwogICAgLnZtMi1ncmlkMntkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMzIwcHgsMWZyKSk7Z2FwOjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4fQogICAgLnZtMi1jYXJke2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MjBweDtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLC4wNSl9CiAgICAudm0yLWNhcmQgaDN7bWFyZ2luOjAgMCAxNnB4O2ZvbnQtc2l6ZToxNXB4O2NvbG9yOiMxZDIzMjc7Zm9udC13ZWlnaHQ6NzAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweH0KICAgIC8qIOKUgOKUgCBCdXR0b25zIOKUgOKUgCAqLwogICAgLnZtMi1idG57ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDt0cmFuc2l0aW9uOmFsbCAuMTVzO3RleHQtZGVjb3JhdGlvbjpub25lfQogICAgLnZtMi1idG4tcHJpbWFyeXtiYWNrZ3JvdW5kOiMyMjcxYjE7Y29sb3I6I2ZmZn0udm0yLWJ0bi1wcmltYXJ5OmhvdmVye2JhY2tncm91bmQ6IzEzNWU5Nn0KICAgIC52bTItYnRuLXN1Y2Nlc3N7YmFja2dyb3VuZDojMTZhMzRhO2NvbG9yOiNmZmZ9LnZtMi1idG4tc3VjY2Vzczpob3ZlcntiYWNrZ3JvdW5kOiMxNTgwM2R9CiAgICAudm0yLWJ0bi1kYW5nZXJ7YmFja2dyb3VuZDojZGMyNjI2O2NvbG9yOiNmZmZ9LnZtMi1idG4tZGFuZ2VyOmhvdmVye2JhY2tncm91bmQ6I2I5MWMxY30KICAgIC52bTItYnRuLWdyYXl7YmFja2dyb3VuZDojZjFmNWY5O2NvbG9yOiMzNzQxNTE7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwfS52bTItYnRuLWdyYXk6aG92ZXJ7YmFja2dyb3VuZDojZTVlN2VifQogICAgLnZtMi1idG4tc217cGFkZGluZzo1cHggMTJweDtmb250LXNpemU6MTJweH0KICAgIC8qIOKUgOKUgCBUYWJsZSDilIDilIAgKi8KICAgIC52bTItdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Zm9udC1zaXplOjEzcHh9CiAgICAudm0yLXRhYmxlIHRoe2JhY2tncm91bmQ6I2Y2ZjhmYTtwYWRkaW5nOjlweCAxMnB4O3RleHQtYWxpZ246bGVmdDtmb250LXNpemU6MTFweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6IzU3NjA2YTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTBlMGUwfQogICAgLnZtMi10YWJsZSB0ZHtwYWRkaW5nOjEwcHggMTJweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjBmMGYwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0KICAgIC52bTItdGFibGUgdHI6aG92ZXIgdGR7YmFja2dyb3VuZDojZmFmYmZjfQogICAgLnZtMi1iYWRnZXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDB9CiAgICAudm0yLWJhZGdlLXNlbnR7YmFja2dyb3VuZDojZDFmYWU1O2NvbG9yOiMwNjVmNDZ9CiAgICAudm0yLWJhZGdlLXBlbmRpbmd7YmFja2dyb3VuZDojZmVmM2M3O2NvbG9yOiM5MjQwMGV9CiAgICAudm0yLWJhZGdlLWZhaWxlZHtiYWNrZ3JvdW5kOiNmZWUyZTI7Y29sb3I6Izk5MWIxYn0KICAgIC52bTItYmFkZ2UtY2FuY2VsbGVke2JhY2tncm91bmQ6I2RiZWFmZTtjb2xvcjojMWU0MGFmfQogICAgPC9zdHlsZT4KCiAgICA8IS0tIFRhYiBOYXZpZ2F0aW9uIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWF1dG8tdGFicyI+CiAgICA8P3BocAogICAgJHRhYnMgPSBbCiAgICAgICAgJ3BpcGVsaW5lJyAgICA9PiAn8J+UgSBQaXBlbGluZScsCiAgICAgICAgJ2NhZGVuY2lhJyAgICA9PiAn8J+UpSBDYWTDqm5jaWEgRCtYJywKICAgICAgICAnYXV0b2FxdWVjZXInID0+ICfwn6SWIEF1dG8tQXF1ZWNlcicsCiAgICAgICAgJ2hvdCcgICAgICAgICA9PiAn8J+UpSBMZWFkcyBIT1QnLAogICAgICAgICdieWRhdGUnICAgICAgPT4gJ/Cfk4UgUG9yIERhdGEnLAogICAgICAgICdjYXJyaW5obycgICAgPT4gJ/Cfm5IgQ2FycmluaG8nLAogICAgICAgICdwb3B1cCcgICAgICAgPT4gJ/CfkowgUG9wdXAnLAogICAgICAgICdleGl0aW50ZW50JyAgPT4gJ/CfmqogRXhpdC1JbnRlbnQnLAogICAgICAgICdwb3NldmVudG8nICAgPT4gJ/CfjoEgUMOzcy1FdmVudG8nLAogICAgICAgICd1cHNlbGwnICAgICAgPT4gJ/Cfko4gVXBzZWxsJywKICAgICAgICAncGVkaWRvcycgICAgID0+ICfwn6e+IFBlZGlkb3MnLAogICAgXTsKICAgIC8vIFJldHJvY29tcGF0aWJpbGlkYWRlOiBhcXVlY2ltZW50byBlIHZhcmlhbnRlcyBhbnRpZ2FzIOKGkiBjYWRlbmNpYQogICAgaWYgKCBpbl9hcnJheSggJGFjdGl2ZV90YWIsIFsnYXF1ZWNlcicsJ2FxdWVjaW1lbnRvJywnbGVhZHMnXSApICkgJGFjdGl2ZV90YWIgPSAnY2FkZW5jaWEnOwogICAgZm9yZWFjaCAoJHRhYnMgYXMgJHRrID0+ICR0bCkgewogICAgICAgICRjbHMgPSAoJGFjdGl2ZV90YWIgPT09ICR0aykgPyAndm0yLWF1dG8tdGFiIGFjdGl2ZScgOiAndm0yLWF1dG8tdGFiJzsKICAgICAgICAkdXJsID0gYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWF1dG9tYWNvZXMnLCd0YWInPT4kdGtdLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKTsKICAgICAgICBlY2hvICc8YSBocmVmPSInIC4gZXNjX3VybCgkdXJsKSAuICciIGNsYXNzPSInIC4gJGNscyAuICciPicgLiAkdGwgLiAnPC9hPic7CiAgICB9CiAgICA/PgogICAgPC9kaXY+CgogICAgPCEtLSA9PT09PSBUQUI6IFBJUEVMSU5FID09PT09IC0tPgogICAgPGRpdiBjbGFzcz0idm0yLXRhYi1ib2R5IDw/cGhwIGVjaG8gJGFjdGl2ZV90YWIgPT09ICdwaXBlbGluZScgPyAnYWN0aXZlJyA6ICcnOyA/PiI+CiAgICAgICAgPD9waHAgdm0yX3JlbmRlcl9waXBlbGluZV90YWIoKTsgPz4KICAgIDwvZGl2PgoKICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiPgogICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3ZtMl9hdXRvX3NhdmUnKTsgPz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InZtMl9hdXRvX3NhdmUiIHZhbHVlPSIxIj4KCiAgICA8IS0tID09PT09IFRBQjogQ0FEw4pOQ0lBIEQrWCA9PT09PSAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi10YWItYm9keSA8P3BocCBlY2hvICRhY3RpdmVfdGFiID09PSAnY2FkZW5jaWEnID8gJ2FjdGl2ZScgOiAnJzsgPz4iPgoKICAgICAgICA8IS0tIEFudGktc3BhbSBzdW1tYXJ5IGJhciAtLT4KICAgICAgICA8P3BocAogICAgICAgICRhcV9jb29sZG93bl9oICAgPSAoaW50KSBnZXRfb3B0aW9uKCd2bTJfY29vbGRvd25faG91cnMnLCAyNCk7CiAgICAgICAgJGFxX2JhdGNoX3N6ICAgICA9IChpbnQpIGdldF9vcHRpb24oJ3ZtMl9iYXRjaF9zaXplJywgMTApOwogICAgICAgICRhcV9iYXRjaF9kZWxheSAgPSAoaW50KSBnZXRfb3B0aW9uKCd2bTJfYmF0Y2hfZGVsYXknLCAzKTsKICAgICAgICAkYXFfcXVpZXRfcyAgICAgID0gKGludCkgZ2V0X29wdGlvbigndm0yX3F1aWV0X3N0YXJ0JywgMjApOwogICAgICAgICRhcV9xdWlldF9lICAgICAgPSAoaW50KSBnZXRfb3B0aW9uKCd2bTJfcXVpZXRfZW5kJywgOCk7CiAgICAgICAgJGFxX2dsb2JhbF9jYXAgICA9IChpbnQpIGdldF9vcHRpb24oJ3ZtMl9nbG9iYWxfZGFpbHlfbGltaXQnLCAxNSk7CiAgICAgICAgJGFxX3dlZWtseV9jYXAgICA9IChpbnQpIGdldF9vcHRpb24oJ3ZtMl9jb250YWN0X3dlZWtseV9saW1pdCcsIDEpOwogICAgICAgICRhcV9kZWZfY2ggICAgICAgPSBnZXRfb3B0aW9uKCd2bTJfZGVmYXVsdF9jaGFubmVsJywgJ3dhYmFfNTAzOScpOwogICAgICAgICRhcV9nbG9iYWxfa2lsbCAgPSBnZXRfb3B0aW9uKCd2bTJfa2lsbF9zd2l0Y2gnLCAnMCcpOwogICAgICAgICRhcV90b2RheV9zZW5kcyAgPSAoaW50KSAkd3BkYi0+Z2V0X3ZhciggJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMgV0hFUkUgREFURShzZW50X2F0KSA9ICVzIiwKICAgICAgICAgICAgY3VycmVudF90aW1lKCdZLW0tZCcpCiAgICAgICAgKSk7CiAgICAgICAgPz4KICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGFxX2dsb2JhbF9raWxsID09PSAnMScgPyAnI2ZlZjJmMicgOiAnI2YwZmRmNCc7ID8+O2JvcmRlcjoxcHggc29saWQgPD9waHAgZWNobyAkYXFfZ2xvYmFsX2tpbGwgPT09ICcxJyA/ICcjZmNhNWE1JyA6ICcjODZlZmFjJzsgPz47Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTJweCAxOHB4O21hcmdpbi1ib3R0b206MThweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxNnB4O2ZsZXgtd3JhcDp3cmFwO2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMCI+PD9waHAgZWNobyAkYXFfZ2xvYmFsX2tpbGwgPT09ICcxJyA/ICfwn5S0IEtJTEwgU1dJVENIIEdMT0JBTCBBVElWTycgOiAn8J+foiBBcXVlY2ltZW50byBPcGVyYWNpb25hbCc7ID8+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzU3NjA2YSI+8J+TiiBIb2plOiA8c3Ryb25nPjw/cGhwIGVjaG8gJGFxX3RvZGF5X3NlbmRzOyA/Pjwvc3Ryb25nPi88P3BocCBlY2hvICRhcV9nbG9iYWxfY2FwID86ICfiiJ4nOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM1NzYwNmEiPuKPse+4jyBDb29sZG93bjogPD9waHAgZWNobyAkYXFfY29vbGRvd25faDsgPz5oPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzU3NjA2YSI+8J+TpiBCYXRjaDogPD9waHAgZWNobyAkYXFfYmF0Y2hfc3o7ID8+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzU3NjA2YSI+8J+MmSBTaWzDqm5jaW86IDw/cGhwIGVjaG8gJGFxX3F1aWV0X3M7ID8+aOKAkzw/cGhwIGVjaG8gJGFxX3F1aWV0X2U7ID8+aDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM1NzYwNmEiPvCfk4UgU2VtYW5hbDogPD9waHAgZWNobyAkYXFfd2Vla2x5X2NhcCA/OiAn4oieJzsgPz4vY29udGF0bzwvc3Bhbj4KICAgICAgICAgICAgPD9waHAgaWYgKCB2bTJfaXNfcXVpZXRfdGltZSgpICk6ID8+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZWYzYzc7Y29sb3I6IzkyNDAwZTtwYWRkaW5nOjJweCAxMHB4O2JvcmRlci1yYWRpdXM6MTBweDtmb250LXdlaWdodDo3MDAiPvCfjJkgU2lsw6puY2lvIGF0aXZvIOKAlCBlbnZpYSBhcMOzcyA8P3BocCBlY2hvICRhcV9xdWlldF9lOyA/Pmg8L3NwYW4+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLXNldHRpbmdzJyk7ID8+IiBzdHlsZT0ibWFyZ2luLWxlZnQ6YXV0bztmb250LXNpemU6MTJweDtjb2xvcjojMDA3M2FhO3RleHQtZGVjb3JhdGlvbjpub25lIj7impnvuI8gQ29uZmlndXJhw6fDtWVzIOKGkjwvYT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSDilIDilIAgUmVncmEgMTogQ2Fkw6puY2lhIEQrWCAocHJpb3JpZGFkZSAxLTQpIOKUgOKUgCAtLT4KICAgICAgICA8P3BocCAkYXFfaGRyX2hvamUgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMgV0hFUkUgbW9kdWxlIElOICgnYXF1ZWNlcicsJ2F1dG9fYXF1ZWNlcicpIEFORCBEQVRFKHNlbnRfYXQpID0gQ1VSREFURSgpIik7ID8+CiAgICAgICAgPGRldGFpbHMgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICA8c3VtbWFyeSBzdHlsZT0icGFkZGluZzoxMHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4O2xpc3Qtc3R5bGU6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTBweCI+CiAgICAgICAgICAgIDxzcGFuPvCflKUgQ2Fkw6puY2lhIEQrWDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2UwZTBlMDtjb2xvcjojNTc2MDZhO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NTAwIj5QcmlvcmlkYWRlIDHigJM0PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZmZmM2UwO2NvbG9yOiNlNjUxMDA7cGFkZGluZzoycHggN3B4O2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxMXB4Ij7wn5OkIDw/cGhwIGVjaG8gJGFxX2hkcl9ob2plOyA/PiBob2plPC9zcGFuPgogICAgICAgICAgICA8P3BocCBlY2hvICRhX2tpbGwgPT09ICcxJyA/ICc8c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6YXV0byIgY2xhc3M9InZtMi1rcy1vbiI+8J+UtCBQQVVTQURPPC9zcGFuPicgOiAnPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG8iIGNsYXNzPSJ2bTIta3Mtb2ZmIj7wn5+iIEFUSVZPPC9zcGFuPic7ID8+CiAgICAgICAgPC9zdW1tYXJ5PgogICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6MTRweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTBlMGUwIj4KCiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWN0cmwtYmFyIj4KICAgICAgICAgICAgPGxhYmVsPjxzdHJvbmc+8J+UpSBBcXVlY2VyIEQrWDwvc3Ryb25nPjwvbGFiZWw+CiAgICAgICAgICAgIDxsYWJlbD5LaWxsIFN3aXRjaDoKICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0idm0yX2FxdWVjZXJfa2lsbCI+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSIgPD9waHAgc2VsZWN0ZWQoJGFfa2lsbCwnMScpOyA/Pj7wn5S0IFBBUkFETzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiIDw/cGhwIHNlbGVjdGVkKCRhX2tpbGwsJzAnKTsgPz4+8J+foiBBVElWTzwvb3B0aW9uPgogICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgIDxsYWJlbD5DYW5hbDoKICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9InZtMi1hcS1jaC1zZWwiIG5hbWU9InZtMl9hcXVlY2VyX2NoYW5uZWwiIG9uY2hhbmdlPSJ2bTJTdGVwQ2hhbm5lbFN3aXRjaCgnYXEnLCB0aGlzLnZhbHVlKSI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyB2bTJfY2hhbm5lbF9vcHRpb25zX2h0bWwoICRhX2NoYW5uZWwgKTsgPz4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8P3BocCBlY2hvICRhX2tpbGwgPT09ICcxJyA/ICc8c3BhbiBjbGFzcz0idm0yLWtzLW9uIj7wn5S0IFBBVVNBRE88L3NwYW4+JyA6ICc8c3BhbiBjbGFzcz0idm0yLWtzLW9mZiI+8J+foiBBVElWTzwvc3Bhbj4nOyA/PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGlkPSJ2bTItYXEtc3RlcHMiPgogICAgICAgIDw/cGhwIGZvcmVhY2ggKCRzdGVwcyBhcyAkc2tleSA9PiAkc3RlcCk6CiAgICAgICAgICAgICRzX29uICAgPSBnZXRfb3B0aW9uKCJ2bTJfYXF1ZWNlcl97JHNrZXl9X29uIiwgJzAnKTsKICAgICAgICAgICAgJHNfdG1wbCA9IGdldF9vcHRpb24oInZtMl9hcXVlY2VyX3skc2tleX1fdGVtcGxhdGUiLCAkc3RlcFsnZGVmYXVsdF90bXBsJ10pOwogICAgICAgICAgICAkc19tc2cgID0gZ2V0X29wdGlvbigidm0yX2FxdWVjZXJfeyRza2V5fV9tc2ciLCAkc3RlcFsnZGVmYXVsdF9tc2cnXSk7CiAgICAgICAgICAgICRjbnQgICAgPSAkc3RlcF9jb3VudHNbJHNrZXldOwogICAgICAgID8+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLXN0ZXAtY2FyZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1zdGVwLWhkciI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLXN0ZXAtYmFkZ2UiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHN0ZXBbJ2xhYmVsJ10pOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzU3NjA2YTtmb250LXNpemU6MTNweCI+PD9waHAgZWNobyAkc3RlcFsnZGVsYXknXTsgPz4gZGlhPD9waHAgZWNobyAkc3RlcFsnZGVsYXknXT4xPydzJzonJzsgPz4gYXDDs3Mgw7psdGltbyBjb250YXRvPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWVsaWdpYmxlIj48P3BocCBlY2hvICRjbnQ7ID8+IGVsZWfDrXZlaXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo1cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InZtMl9hcXVlY2VyXzw/cGhwIGVjaG8gJHNrZXk7ID8+X29uIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCgkc19vbiwnMScpOyA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgQXRpdm8KICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItc3RlcC1ncmlkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1jb2wtd2FiYSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1mbGQtbGJsIj7wn5OLIFRlbXBsYXRlIFdBQkE8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfYXF1ZWNlcl88P3BocCBlY2hvICRza2V5OyA/Pl90ZW1wbGF0ZSIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIHZtMl93YWJhX3RlbXBsYXRlX29wdGlvbnNfaHRtbCggJHNfdG1wbCApOyA/PgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY29sLXphcGkiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItZmxkLWxibCI+8J+SrCBUZXh0byBaLUFQSSA8c21hbGw+KHZhcnM6IHtub21lfSwge3RlbGVmb25lfSk8L3NtYWxsPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0idm0yX2FxdWVjZXJfPD9waHAgZWNobyAkc2tleTsgPz5fbXNnIiBzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6NzJweDtyZXNpemU6dmVydGljYWw7Zm9udC1zaXplOjEycHgiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRzX21zZyk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgaWYgKCRjbnQgPiAwKTogPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4O3RleHQtYWxpZ246cmlnaHQiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0iYWxlcnQoJ0Z1bsOnw6NvIGRlIGVudmlvIGVtIGRlc2Vudm9sdmltZW50byDigJQgRmFzZSA1Yi4nKTtyZXR1cm4gZmFsc2U7IgogICAgICAgICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6IzAwNzlkMztjb2xvcjojZmZmO3BhZGRpbmc6NnB4IDE0cHg7Ym9yZGVyLXJhZGl1czo2cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIOKWtu+4jyBFeGVjdXRhciBhZ29yYSAoPD9waHAgZWNobyAkY250OyA/PikKICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwvZGl2PgogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgPC9kaXY+PCEtLSAvdm0yLWFxLXN0ZXBzIC0tPgoKICAgICAgICA8P3BocCB2bTJfcmVuZGVyX3Rlc3RfYm94KCAnYXF1ZWNlcicsICRhX2NoYW5uZWwsIGdldF9vcHRpb24oJ3ZtMl9hcXVlY2VyX2QxX21zZycsICdPaSB7bm9tZX0hIPCfkYsgVmkgcXVlIHZvY8OqIGFpbmRhIGVzdMOhIHBlc3F1aXNhbmRvIGF0cmHDp8O1ZXMgcGFyYSBzdWEgZmVzdGEuIFBvc3NvIHRlIGFqdWRhcj8nKSwgZ2V0X29wdGlvbigndm0yX2FxdWVjZXJfZDFfdGVtcGxhdGUnLCcnKSApOyA/PgoKICAgICAgICA8IS0tIFt2MS41LjkzXSBFTUFJTCBQQVJBTEVMTyAtLT4KICAgICAgICA8P3BocAogICAgICAgICRhcV9lbWFpbF9vbiAgID0gZ2V0X29wdGlvbigndm0yX2FxdWVjZXJfZW1haWxfb24nLCAnMCcpOwogICAgICAgICRhcV9lbWFpbF9zdWJqID0gZ2V0X29wdGlvbigndm0yX2FxdWVjZXJfZW1haWxfc3ViamVjdCcsICdBaW5kYSBwZW5zYW5kbyBuYSBmZXN0YT8gQSBnZW50ZSBwb2RlIGFqdWRhciDwn46JJyk7CiAgICAgICAgJGFxX2VtYWlsX2JvZHkgPSBnZXRfb3B0aW9uKCd2bTJfYXF1ZWNlcl9lbWFpbF9ib2R5JywgIk9pIHtub21lfSFcblxuVmltb3MgcXVlIHZvY8OqIHBlc3F1aXNvdSBhdHJhw6fDtWVzIHBhcmEgc3VhIGZlc3RhIG5hIFZpdmFNYWlzIEV2ZW50b3MuIEFpbmRhIG7Do28gZW5jb250cm91IG8gcXVlIHByb2N1cmE/XG5cbkFjZXNzZSBhZ29yYSBlIGVzY29saGEgZW50cmUgY2VudGVuYXMgZGUgYXRyYcOnw7Vlczpcbmh0dHBzOi8vbG9qYS52aXZhbWFpc2V2ZW50b3MuY29tXG5cbl9FcXVpcGUgVml2YU1haXMgRXZlbnRvc18iKTsKICAgICAgICAkYXFfZW1haWxfY250ICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9jb250YWN0cyBXSEVSRSBlbWFpbCAhPSAnJyBBTkQgZW1haWwgSVMgTk9UIE5VTEwiKTsKICAgICAgICA/PgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2YwZjlmZjtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTZweCAxOHB4O21hcmdpbi10b3A6MTZweCI+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O2NvbG9yOiMxZTQwYWYiPvCfk6cgQ2FuYWwgRW1haWwg4oCUIFBhcmFsZWxvIGFvIFdBPC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZGJlYWZlO2NvbG9yOiMxZTQwYWY7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwIj48P3BocCBlY2hvICRhcV9lbWFpbF9jbnQ7ID8+IGNvbnRhdG9zIGNvbSBlbWFpbDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNjQ3NDhiO21hcmdpbjowIDAgMTRweCI+CiAgICAgICAgICAgICAgICBRdWFuZG8gYXRpdm8sIGVudmlhIGVtYWlsIGVtIHBhcmFsZWxvIGFvIFdBIHBhcmEgY29udGF0b3MgcXVlIHTDqm0gZW1haWwuIFNlIG8gY29udGF0byBuw6NvIHRlbSBXQSBtYXMgdGVtIGVtYWlsLCBlbnZpYSBhcGVuYXMgZW1haWwuCiAgICAgICAgICAgICAgICBWYXJzIGRpc3BvbsOtdmVpczogPGNvZGU+e25vbWV9PC9jb2RlPiwgPGNvZGU+e2xpbmt9PC9jb2RlPgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4Ij5TdGF0dXM6PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0idm0yX2FxdWVjZXJfZW1haWxfb24iIHN0eWxlPSJwYWRkaW5nOjZweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QwZDdkZTtib3JkZXItcmFkaXVzOjZweCI+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCIgPD9waHAgc2VsZWN0ZWQoJGFxX2VtYWlsX29uLCcwJyk7ID8+PvCflLQgRGVzYXRpdmFkbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiIDw/cGhwIHNlbGVjdGVkKCRhcV9lbWFpbF9vbiwnMScpOyA/Pj7wn5+iIEF0aXZvPC9vcHRpb24+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTJweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5OdIEFzc3VudG88L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZtMl9hcXVlY2VyX2VtYWlsX3N1YmplY3QiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRhcV9lbWFpbF9zdWJqKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkN2RlO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5KsIENvcnBvIGRvIGVtYWlsPC9sYWJlbD4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ2bTJfYXF1ZWNlcl9lbWFpbF9ib2R5IiByb3dzPSI2IiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QwZDdkZTtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTptb25vc3BhY2U7cmVzaXplOnZlcnRpY2FsIj48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgkYXFfZW1haWxfYm9keSk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDw/cGhwIGVjaG8gdm0yX3JlbmRlcl9taW5pX2xvZyggJ2FxdWVjZXInLCAxNSwgJ/Cfk4sgTG9nIENhZMOqbmNpYSBEK1gnICk7ID8+CiAgICAgICAgPC9kaXY+PCEtLSAvY2FkZW5jaWEgZGV0YWlscyBjb250ZW50IC0tPgogICAgICAgIDwvZGV0YWlscz48IS0tIC9jYWRlbmNpYSAtLT4KCiAgICA8L2Rpdj48IS0tIC9jYWRlbmNpYSB0YWIgLS0+CgogICAgPCEtLSA9PT09PSBUQUI6IEFVVE8tQVFVRUNFUiA9PT09PSAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi10YWItYm9keSA8P3BocCBlY2hvICRhY3RpdmVfdGFiID09PSAnYXV0b2FxdWVjZXInID8gJ2FjdGl2ZScgOiAnJzsgPz4iPgoKICAgICAgICA8IS0tIEFudGktc3BhbSBiYXIgY29tcGFjdGEgLS0+CiAgICAgICAgPD9waHAKICAgICAgICAkX3ZtMl90b2RheSA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9zZW5kcyBXSEVSRSBEQVRFKHNlbnRfYXQpID0gQ1VSREFURSgpIik7CiAgICAgICAgJF92bTJfY2FwICAgPSAoaW50KWdldF9vcHRpb24oJ3ZtMl9nbG9iYWxfZGFpbHlfbGltaXQnLCAxMDApOwogICAgICAgICRfdm0yX2tpbGwgID0gZ2V0X29wdGlvbigndm0yX2tpbGxfc3dpdGNoJywgJzAnKTsKICAgICAgICAkYmFyX2JnICAgICA9ICRfdm0yX2tpbGwgPT09ICcxJyA/ICcjZmVmMmYyJyA6ICcjZjBmZGY0JzsKICAgICAgICAkYmFyX2JkICAgICA9ICRfdm0yX2tpbGwgPT09ICcxJyA/ICcjZmNhNWE1JyA6ICcjODZlZmFjJzsKICAgICAgICA/PgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6PD9waHAgZWNobyAkYmFyX2JnOyA/Pjtib3JkZXI6MXB4IHNvbGlkIDw/cGhwIGVjaG8gJGJhcl9iZDsgPz47Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTBweCAxNnB4O21hcmdpbi1ib3R0b206MTZweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwO2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMCI+PD9waHAgZWNobyAkX3ZtMl9raWxsPT09JzEnPyfwn5S0IEtJTEwgU1dJVENIIEdMT0JBTCc6J/Cfn6IgQXF1ZWNpbWVudG8gT3BlcmFjaW9uYWwnOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM1NzYwNmEiPvCfk4ogSG9qZTogPHN0cm9uZz48P3BocCBlY2hvICRfdm0yX3RvZGF5OyA/Pjwvc3Ryb25nPi88P3BocCBlY2hvICgkX3ZtMl9jYXAgPzogJ+KInicpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM1NzYwNmEiPuKPse+4jyBDb29sZG93bjogPD9waHAgZWNobyAoaW50KWdldF9vcHRpb24oJ3ZtMl9jb29sZG93bl9ob3VycycsMjQpOyA/Pmg8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojNTc2MDZhIj7wn5OmIEJhdGNoOiA8P3BocCBlY2hvIChpbnQpZ2V0X29wdGlvbigndm0yX2JhdGNoX3NpemUnLDEwKTsgPz48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojNTc2MDZhIj7wn4yZIFNpbMOqbmNpbzogPD9waHAgZWNobyAoaW50KWdldF9vcHRpb24oJ3ZtMl9xdWlldF9zdGFydCcsMjApOyA/PmjigJM8P3BocCBlY2hvIChpbnQpZ2V0X29wdGlvbigndm0yX3F1aWV0X2VuZCcsOCk7ID8+aDwvc3Bhbj4KICAgICAgICAgICAgPD9waHAgaWYgKCB2bTJfaXNfcXVpZXRfdGltZSgpICk6ID8+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2ZlZjNjNztjb2xvcjojOTI0MDBlO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC13ZWlnaHQ6NzAwIj7wn4yZIFNpbMOqbmNpbyBhdGl2bzwvc3Bhbj48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBhZG1pbl91cmwoJ2FkbWluLnBocD9wYWdlPXZtMi1zZXR0aW5ncycpOyA/PiIgc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG87Zm9udC1zaXplOjEycHg7Y29sb3I6IzAwNzNhYTt0ZXh0LWRlY29yYXRpb246bm9uZSI+4pqZ77iPIENvbmZpZ3VyYcOnw7VlcyDihpI8L2E+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0g4pSA4pSAIEF1dG8tQXF1ZWNlciAocHJpb3JpZGFkZSAwKSDilIDilIAgLS0+CiAgICAgICAgPD9waHAKICAgICAgICAkYWFfb25faGRyMiAgICA9IGdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfb24nLCcwJyk7CiAgICAgICAgJGFhX2hkcl9ob2plMiAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMgV0hFUkUgbW9kdWxlID0gJ2F1dG9fYXF1ZWNlcicgQU5EIERBVEUoc2VudF9hdCkgPSBDVVJEQVRFKCkiKTsKICAgICAgICAkYWFfZWxpZzIgICAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9jb250YWN0cyBXSEVSRSBzY29yZSA+IDAiKTsKICAgICAgICA/PgogICAgICAgIDxkZXRhaWxzIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgPHN1bW1hcnkgc3R5bGU9InBhZGRpbmc6MTBweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDtsaXN0LXN0eWxlOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHgiPgogICAgICAgICAgICA8c3Bhbj7wn6SWIEF1dG8tQXF1ZWNlcjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2UwZTBlMDtjb2xvcjojNTc2MDZhO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjExcHgiPlByaW9yaWRhZGUgMDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2YzZTVmNTtjb2xvcjojNmExYjlhO3BhZGRpbmc6MnB4IDdweDtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTFweCI+8J+RpSA8P3BocCBlY2hvICRhYV9lbGlnMjsgPz4gZWxlZ8OtdmVpczwvc3Bhbj4KICAgICAgICAgICAgPD9waHAgaWYgKCRhYV9oZHJfaG9qZTIgPiAwKTogPz48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZThmNWU5O2NvbG9yOiMxYjVlMjA7cGFkZGluZzoycHggN3B4O2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxMXB4Ij7wn5OkIDw/cGhwIGVjaG8gJGFhX2hkcl9ob2plMjsgPz4gaG9qZTwvc3Bhbj48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPD9waHAgZWNobyAkYWFfb25faGRyMiA9PT0gJzEnID8gJzxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDphdXRvIiBjbGFzcz0idm0yLWtzLW9mZiI+8J+foiBBVElWTzwvc3Bhbj4nIDogJzxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDphdXRvIiBjbGFzcz0idm0yLWtzLW9uIj7wn5S0IFBBVVNBRE88L3NwYW4+JzsgPz4KICAgICAgICA8L3N1bW1hcnk+CiAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzoxNHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlMGUwZTAiPgogICAgPD9waHAKICAgIC8vIOKUgOKUgCBBdXRvLUFxdWVjZXIgY29uZmlnIG9wdGlvbnMg4pSA4pSACiAgICAkYWFfb24gICAgICAgID0gZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9vbicsICcwJyk7CiAgICAkYWFfdGhyZXNob2xkID0gKGludClnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX3RocmVzaG9sZCcsICc2MCcpOwogICAgJGFhX2NoYW5uZWwgICA9IGdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfY2hhbm5lbCcsICd3YWJhXzUwMzknKTsKICAgICRhYV90ZW1wbGF0ZSAgPSBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX3RlbXBsYXRlJywgJycpOwogICAgJGFhX2Nvb2xkb3duICA9IChpbnQpZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9jb29sZG93bicsICcyNCcpOwogICAgJGFhX2JhdGNoICAgICA9IChpbnQpZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9iYXRjaCcsICcyMCcpOwogICAgJGFhX21zZyAgICAgICA9IGdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfbXNnJywgJ09pIHtub21lfSEg8J+RiyBWaSBxdWUgdm9jw6ogc2UgaW50ZXJlc3NvdSBlbSBub3NzYXMgYXRyYcOnw7Vlcy4gUG9zc28gdGUgYWp1ZGFyIGEgY29udHJhdGFyPycpOwoKICAgIC8vIEZvcmNlIHJlY2FsY3VsYXRlIGNhY2hlIGlmIHJlcXVlc3RlZAogICAgaWYgKCBpc3NldCgkX0dFVFsndm0yX3JlY2FsYyddKSAmJiAkX0dFVFsndm0yX3JlY2FsYyddID09PSAnMScgKSB7CiAgICAgICAgZGVsZXRlX3RyYW5zaWVudCgndm0yX2xlYWRzX2FxX3YyJyk7CiAgICB9CgogICAgLy8gR2V0IGxlYWRzIChjYWNoZWQgMzBtaW4pCiAgICAkbGVhZHNfZGF0YSAgPSB2bTJfZ2V0X2xlYWRzX3BhcmFfYXF1ZWNlcihbJ2xpbWl0JyA9PiAzMDBdKTsKICAgICRjYWNoZV90aW1lICA9IGdldF90cmFuc2llbnQoJ3ZtMl9sZWFkc19hcV92Ml90cycpOwogICAgJGNhbGNfdGltZSAgID0gY3VycmVudF90aW1lKCdIOmknKTsKCiAgICAvLyBTdGF0cwogICAgJGNudF9ob3QgICA9IGNvdW50KGFycmF5X2ZpbHRlcigkbGVhZHNfZGF0YSwgZm4oJGwpID0+ICRsWydsZXZlbCddID09PSAnaG90JykpOwogICAgJGNudF93YXJtICA9IGNvdW50KGFycmF5X2ZpbHRlcigkbGVhZHNfZGF0YSwgZm4oJGwpID0+ICRsWydsZXZlbCddID09PSAnd2FybScpKTsKICAgICRjbnRfY29sZCAgPSBjb3VudChhcnJheV9maWx0ZXIoJGxlYWRzX2RhdGEsIGZuKCRsKSA9PiAkbFsnbGV2ZWwnXSA9PT0gJ2NvbGQnKSk7CiAgICAkY250X2NhcnQgID0gY291bnQoYXJyYXlfZmlsdGVyKCRsZWFkc19kYXRhLCBmbigkbCkgPT4gaW5fYXJyYXkoJ2NhcnJpbmhvJywgJGxbJ3NvdXJjZXMnXSkpKTsKICAgICRjbnRfZ2FsICAgPSBjb3VudChhcnJheV9maWx0ZXIoJGxlYWRzX2RhdGEsIGZuKCRsKSA9PiBpbl9hcnJheSgnZ2FsZXJpYScsICRsWydzb3VyY2VzJ10pKSk7CgogICAgJGZpbHRlcl9sZXZlbCA9IHNhbml0aXplX2tleSgkX0dFVFsndm0yX2xmJ10gPz8gJycpOwogICAgJGJhc2VfdXJsID0gYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnID0+ICd2bTItYXV0b21hY29lcycsICd0YWInID0+ICdsZWFkcyddLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKTsKCiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgICRhYV9pc193YWJhID0gaXNzZXQoJGNoYW5uZWxzWyRhYV9jaGFubmVsXSkgJiYgJGNoYW5uZWxzWyRhYV9jaGFubmVsXVsndHlwZSddID09PSAnd2FiYSc7CiAgICA/PgoKICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjhweDttYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9ImZvbnQtc2l6ZToxNXB4Ij7wn46vIExlYWRzIHBhcmEgQXF1ZWNlcjwvc3Ryb25nPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzU3NjA2YTtmb250LXNpemU6MTJweDttYXJnaW4tbGVmdDo4cHgiPkNhbGN1bGFkbyDDoHMgPD9waHAgZWNobyAkY2FsY190aW1lOyA/Pjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoYWRkX3F1ZXJ5X2FyZygndm0yX3JlY2FsYycsJzEnLCRiYXNlX3VybCkpOyA/PiIKICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDojZjBmMGYwO2JvcmRlcjoxcHggc29saWQgI2QwZDBkMDtwYWRkaW5nOjVweCAxMnB4O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxMnB4O3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMzMzMiPgogICAgICAgICAgICDwn5SEIFJlY2FsY3VsYXIKICAgICAgICA8L2E+CiAgICA8L2Rpdj4KCiAgICA8IS0tIEtQSSBDYXJkcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgxMTBweCwxZnIpKTtnYXA6MTBweDttYXJnaW4tYm90dG9tOjE4cHgiPgogICAgICAgIDw/cGhwCiAgICAgICAgJGNhcmRzID0gWwogICAgICAgICAgICBbJ/CflKUnLCAkY250X2hvdCwgICdIT1QgKOKJpTYwKScsICAnaG90JywgICAgICAnI2ZmZjNlMCcsJyNlNjUxMDAnXSwKICAgICAgICAgICAgWyfimqEnLCAkY250X3dhcm0sICdXYXJtICgzMC01OSknLCd3YXJtJywgICAgICcjZmZmOWM0JywnI2Y1N2YxNyddLAogICAgICAgICAgICBbJ/CfjLEnLCAkY250X2NvbGQsICdDb2xkICg8MzApJywgICdjb2xkJywgICAgICcjZThmNWU5JywnIzJlN2QzMiddLAogICAgICAgICAgICBbJ/Cfm5InLCAkY250X2NhcnQsICdDYXJyaW5obycsICAgJ2NhcnJpbmhvJywgJyNmY2U0ZWMnLCcjYzYyODI4J10sCiAgICAgICAgICAgIFsn8J+TuCcsICRjbnRfZ2FsLCAgJ0dhbGVyaWEnLCAgICAnZ2FsZXJpYScsICAnI2UzZjJmZCcsJyMxNTY1YzAnXSwKICAgICAgICBdOwogICAgICAgIGZvcmVhY2ggKCRjYXJkcyBhcyBbJGljb24sICRjbnQsICRsYmwsICRsZiwgJGJnLCAkY29sXSk6CiAgICAgICAgICAgICRpc19hY3RpdmUgPSAkZmlsdGVyX2xldmVsID09PSAkbGY7CiAgICAgICAgICAgICRjYXJkX3VybCA9ICRpc19hY3RpdmUKICAgICAgICAgICAgICAgID8gJGJhc2VfdXJsCiAgICAgICAgICAgICAgICA6IGFkZF9xdWVyeV9hcmcoJ3ZtMl9sZicsICRsZiwgJGJhc2VfdXJsKTsKICAgICAgICA/PgogICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkY2FyZF91cmwpOyA/PiIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lIj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDo8P3BocCBlY2hvICRpc19hY3RpdmUgPyAkYmcgOiAnI2ZmZic7ID8+O2JvcmRlcjoxLjVweCBzb2xpZCA8P3BocCBlY2hvICRpc19hY3RpdmUgPyAkY29sIDogJyNlMGUwZTAnOyA/Pjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMnB4IDEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7dHJhbnNpdGlvbjouMTVzO2N1cnNvcjpwb2ludGVyIj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyMnB4Ij48P3BocCBlY2hvICRpY29uOyA/PjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjIycHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOjw/cGhwIGVjaG8gJGNvbDsgPz4iPjw/cGhwIGVjaG8gJGNudDsgPz48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM2NjY7bWFyZ2luLXRvcDoycHgiPjw/cGhwIGVjaG8gJGxibDsgPz48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9hPgogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICA8L2Rpdj4KCiAgICA8IS0tIENvbmZpZyBBdXRvLUFxdWVjZXIgKGNvbGxhcHNpYmxlKSAtLT4KICAgIDxkZXRhaWxzIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzowO21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgPHN1bW1hcnkgc3R5bGU9InBhZGRpbmc6MTBweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDtsaXN0LXN0eWxlOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2JhY2tncm91bmQ6PD9waHAgZWNobyAkYWFfb24gPT09ICcxJyA/ICcjZThmNWU5JyA6ICcjZmZmOGUxJzsgPz47Ym9yZGVyLXJhZGl1czo4cHgiPgogICAgICAgICAgICA8c3Bhbj7impnvuI8gQXV0by1BcXVlY2VyPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2NjYiPuKAlCBkaXNwYXJvIGF1dG9tw6F0aWNvIGEgY2FkYSBob3JhIHBhcmEgbGVhZHMgYWNpbWEgZG8gc2NvcmUgbcOtbmltbzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG87Zm9udC1zaXplOjEycHg7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGFhX29uID09PSAnMScgPyAnIzRjYWY1MCcgOiAnI2ZmOTgwMCc7ID8+O2NvbG9yOiNmZmYiPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkYWFfb24gPT09ICcxJyA/ICfwn5+iIEFUSVZPJyA6ICfwn5+hIFBBUkFETyc7ID8+CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L3N1bW1hcnk+CiAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzoxNHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlMGUwZTAiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMjAwcHgsMWZyKSk7Z2FwOjEycHg7YWxpZ24taXRlbXM6ZW5kIj4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+UmCBTdGF0dXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfYXV0b19hcXVlY2VyX29uIiBpZD0idm0yLWFhLW9uIiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiIDw/cGhwIHNlbGVjdGVkKCRhYV9vbiwnMCcpOyA/Pj7wn5S0IFBBUkFETzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIiA8P3BocCBzZWxlY3RlZCgkYWFfb24sJzEnKTsgPz4+8J+foiBBVElWTzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+OryBTY29yZSBtw61uaW1vPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9InZtMl9hdXRvX2FxdWVjZXJfdGhyZXNob2xkIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkYWFfdGhyZXNob2xkKTsgPz4iIG1pbj0iMSIgbWF4PSIxMDAiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMGQwZDA7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+ToSBDYW5hbDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtMl9hdXRvX2FxdWVjZXJfY2hhbm5lbCIgaWQ9InZtMi1hYS1jaCIgb25jaGFuZ2U9InZtMlN0ZXBDaGFubmVsU3dpdGNoKCdhYScsdGhpcy52YWx1ZSkiIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyB2bTJfY2hhbm5lbF9vcHRpb25zX2h0bWwoJGFhX2NoYW5uZWwpOyA/PgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+4o+wIENvb2xkb3duIChoIGVudHJlIGVudmlvcyk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm0yX2F1dG9fYXF1ZWNlcl9jb29sZG93biIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGFhX2Nvb2xkb3duKTsgPz4iIG1pbj0iMSIgbWF4PSIxNjgiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMGQwZDA7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweDtmb250LXdlaWdodDo2MDAiPvCfk6YgQmF0Y2ggKG1zZ3MgcG9yIHJvZGFkYSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm0yX2F1dG9fYXF1ZWNlcl9iYXRjaCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGFhX2JhdGNoKTsgPz4iIG1pbj0iMSIgbWF4PSIxMDAiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMGQwZDA7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InZtMi1hYS13YWJhLXJvdyIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDs8P3BocCBlY2hvICRhYV9pc193YWJhID8gJycgOiAnZGlzcGxheTpub25lJzsgPz4iPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImRpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5OLIFRlbXBsYXRlIFdBQkE8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfYXV0b19hcXVlY2VyX3RlbXBsYXRlIiBzdHlsZT0id2lkdGg6MTAwJTttYXgtd2lkdGg6NDIwcHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIHZtMl93YWJhX3RlbXBsYXRlX29wdGlvbnNfaHRtbCgkYWFfdGVtcGxhdGUpOyA/PgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InZtMi1hYS16YXBpLXJvdyIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDs8P3BocCBlY2hvICRhYV9pc193YWJhID8gJ2Rpc3BsYXk6bm9uZScgOiAnJzsgPz4iPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImRpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5KsIE1lbnNhZ2VtIFotQVBJIDxzbWFsbCBzdHlsZT0iZm9udC13ZWlnaHQ6NDAwIj4odmFyOiB7bm9tZX0pPC9zbWFsbD48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9InZtMl9hdXRvX2FxdWVjZXJfbXNnIiBzdHlsZT0id2lkdGg6MTAwJTtoZWlnaHQ6NzJweDtyZXNpemU6dmVydGljYWw7Zm9udC1zaXplOjEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkMGQwO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6NnB4IDhweCI+PD9waHAgZWNobyBlc2NfdGV4dGFyZWEoJGFhX21zZyk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCB2bTJfcmVuZGVyX3Rlc3RfYm94KCAnYWEnLCAkYWFfY2hhbm5lbCwgJGFhX21zZywgJGFhX3RlbXBsYXRlICk7ID8+CiAgICAgICAgPCEtLSBbdjEuNS45NF0gRU1BSUwgUEFSQUxFTE8gUE9SIERBVEEgLS0+CiAgICAgICAgPD9waHAKICAgICAgICAkYWFfZW1haWxfb24gICA9IGdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfZW1haWxfb24nLCAnMCcpOwogICAgICAgICRhYV9lbWFpbF9zdWJqID0gZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9zdWJqZWN0JywgJ1ZvY8OqIHRlbSB1bSBldmVudG8gY2hlZ2FuZG8hIFZhbW9zIGZlY2hhciBhcyBhdHJhw6fDtWVzPyDwn46JJyk7CiAgICAgICAgJGFhX2VtYWlsX2JvZHkgPSBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX2VtYWlsX2JvZHknLCAiT2kge25vbWV9IVxuXG5JZGVudGlmaWNhbW9zIHF1ZSB2b2PDqiB0ZW0gdW0gZXZlbnRvIHNlIGFwcm94aW1hbmRvIGUgYWluZGEgcG9kZSBlc3RhciBwZXNxdWlzYW5kbyBhdHJhw6fDtWVzLiBOw6NvIGRlaXhlIHBhcmEgYSDDumx0aW1hIGhvcmEhXG5cbkFjZXNzZSBhZ29yYSBlIGNvbnRyYXRlIGVtIG1pbnV0b3M6XG5odHRwczovL2xvamEudml2YW1haXNldmVudG9zLmNvbVxuXG5fRXF1aXBlIFZpdmFNYWlzIEV2ZW50b3NfIik7CiAgICAgICAgJGFhX2VtYWlsX2NudCAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfY29udGFjdHMgV0hFUkUgZW1haWwgIT0gJycgQU5EIGVtYWlsIElTIE5PVCBOVUxMIik7CiAgICAgICAgPz4KICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmMGY5ZmY7Ym9yZGVyOjFweCBzb2xpZCAjYmZkYmZlO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHggMThweDttYXJnaW4tdG9wOjE2cHgiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MTJweCI+CiAgICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTRweDtjb2xvcjojMWU0MGFmIj7wn5OnIENhbmFsIEVtYWlsIOKAlCBQYXJhbGVsbyBhbyBXQTwvc3Ryb25nPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2RiZWFmZTtjb2xvcjojMWU0MGFmO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMCI+PD9waHAgZWNobyAkYWFfZW1haWxfY250OyA/PiBjb250YXRvcyBjb20gZW1haWw8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzY0NzQ4YjttYXJnaW46MCAwIDE0cHgiPgogICAgICAgICAgICAgICAgUXVhbmRvIGF0aXZvLCBlbnZpYSBlbWFpbCBlbSBwYXJhbGVsbyBhbyBXQSBwYXJhIGNvbnRhdG9zIHF1ZSB0w6ptIGVtYWlsIGNhZGFzdHJhZG8uCiAgICAgICAgICAgICAgICBWYXJzIGRpc3BvbsOtdmVpczogPGNvZGU+e25vbWV9PC9jb2RlPiwgPGNvZGU+e2xpbmt9PC9jb2RlPgogICAgICAgICAgICA8L3A+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4Ij5TdGF0dXM6PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0idm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9vbiIgc3R5bGU9InBhZGRpbmc6NnB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkN2RlO2JvcmRlci1yYWRpdXM6NnB4Ij4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIiA8P3BocCBzZWxlY3RlZCgkYWFfZW1haWxfb24sJzAnKTsgPz4+8J+UtCBEZXNhdGl2YWRvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSIgPD9waHAgc2VsZWN0ZWQoJGFhX2VtYWlsX29uLCcxJyk7ID8+PvCfn6IgQXRpdm88L29wdGlvbj4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfk50gQXNzdW50bzwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9zdWJqZWN0IiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkYWFfZW1haWxfc3Viaik7ID8+IiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QwZDdkZTtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+8J+SrCBDb3JwbyBkbyBlbWFpbDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0idm0yX2F1dG9fYXF1ZWNlcl9lbWFpbF9ib2R5IiByb3dzPSI2IiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QwZDdkZTtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTptb25vc3BhY2U7cmVzaXplOnZlcnRpY2FsIj48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgkYWFfZW1haWxfYm9keSk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2RldGFpbHM+CiAgICAgICAgPD9waHAgZWNobyB2bTJfcmVuZGVyX21pbmlfbG9nKCAnYXV0b19hcXVlY2VyJywgMTUsICfwn5OLIExvZyBBdXRvLUFxdWVjZXInICk7ID8+CgogICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDttYXJnaW4tdG9wOjhweDttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5Ij7wn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXM8L2J1dHRvbj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTGVhZHMgVGFibGUgLS0+CiAgICA8P3BocAogICAgLy8gQXBwbHkgZmlsdGVyCiAgICAkZGlzcGxheV9sZWFkcyA9ICRsZWFkc19kYXRhOwogICAgaWYgKCAkZmlsdGVyX2xldmVsID09PSAnaG90JyApICAgICAgJGRpc3BsYXlfbGVhZHMgPSBhcnJheV9maWx0ZXIoJGRpc3BsYXlfbGVhZHMsIGZuKCRsKSA9PiAkbFsnbGV2ZWwnXSA9PT0gJ2hvdCcpOwogICAgZWxzZWlmICggJGZpbHRlcl9sZXZlbCA9PT0gJ3dhcm0nICkgJGRpc3BsYXlfbGVhZHMgPSBhcnJheV9maWx0ZXIoJGRpc3BsYXlfbGVhZHMsIGZuKCRsKSA9PiAkbFsnbGV2ZWwnXSA9PT0gJ3dhcm0nKTsKICAgIGVsc2VpZiAoICRmaWx0ZXJfbGV2ZWwgPT09ICdjb2xkJyApICRkaXNwbGF5X2xlYWRzID0gYXJyYXlfZmlsdGVyKCRkaXNwbGF5X2xlYWRzLCBmbigkbCkgPT4gJGxbJ2xldmVsJ10gPT09ICdjb2xkJyk7CiAgICBlbHNlaWYgKCAkZmlsdGVyX2xldmVsID09PSAnY2FycmluaG8nICkgJGRpc3BsYXlfbGVhZHMgPSBhcnJheV9maWx0ZXIoJGRpc3BsYXlfbGVhZHMsIGZuKCRsKSA9PiBpbl9hcnJheSgnY2FycmluaG8nLCAkbFsnc291cmNlcyddKSk7CiAgICBlbHNlaWYgKCAkZmlsdGVyX2xldmVsID09PSAnZ2FsZXJpYScgKSAgJGRpc3BsYXlfbGVhZHMgPSBhcnJheV9maWx0ZXIoJGRpc3BsYXlfbGVhZHMsIGZuKCRsKSA9PiBpbl9hcnJheSgnZ2FsZXJpYScsICRsWydzb3VyY2VzJ10pKTsKICAgICRkaXNwbGF5X2xlYWRzID0gYXJyYXlfdmFsdWVzKCRkaXNwbGF5X2xlYWRzKTsKICAgID8+CgogICAgPD9waHAgaWYgKCAkZmlsdGVyX2xldmVsICk6ID8+CiAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzMzMyI+CiAgICAgICAgRmlsdHJhbmRvOiA8c3Ryb25nPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGZpbHRlcl9sZXZlbCk7ID8+PC9zdHJvbmc+CiAgICAgICAg4oCUIDw/cGhwIGVjaG8gY291bnQoJGRpc3BsYXlfbGVhZHMpOyA/PiBsZWFkcwogICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkYmFzZV91cmwpOyA/PiIgc3R5bGU9Im1hcmdpbi1sZWZ0OjhweDtjb2xvcjojMDA3OWQzO2ZvbnQtc2l6ZToxMnB4Ij7inJUgTGltcGFyIGZpbHRybzwvYT4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kaWY7ID8+CgogICAgPD9waHAKICAgIC8vIOKUgOKUgCBCYXRjaCBsb29rdXA6IGxhc3RfYWN0aXZpdHkgZGUgdm0yX2NvbnRhY3RzIChhbnRlcyBkbyBzb3J0KSDilIDilIAKICAgICRsYXN0X2FjdF9tYXAgPSBbXTsKICAgIGlmICggISBlbXB0eSgkZGlzcGxheV9sZWFkcykgKSB7CiAgICAgICAgJHAxMXMgPSBhcnJheV91bmlxdWUoIGFycmF5X21hcCggZm4oJGwpID0+ICInIiAuIGVzY19zcWwoIHZtMl9waG9uZV9sYXN0MTEoJGxbJ3Bob25lJ10pICkgLiAiJyIsICRkaXNwbGF5X2xlYWRzICkgKTsKICAgICAgICAkcGhfc3FsID0gaW1wbG9kZSgnLCcsICRwMTFzKTsKICAgICAgICAkbGFfcm93cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAgICAgIlNFTEVDVCBSSUdIVChwaG9uZSwxMSkgQVMgcDExLCBsYXN0X2FjdGl2aXR5CiAgICAgICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9jb250YWN0cwogICAgICAgICAgICAgV0hFUkUgUklHSFQocGhvbmUsMTEpIElOICgkcGhfc3FsKSIKICAgICAgICApOwogICAgICAgIGZvcmVhY2ggKCRsYV9yb3dzIGFzICRyKSAkbGFzdF9hY3RfbWFwWyRyLT5wMTFdID0gJHItPmxhc3RfYWN0aXZpdHk7CiAgICAgICAgLy8gSW5qZWN0IGxhc3RfYWN0aXZpdHkgaW50byBlYWNoIGxlYWQgc28gdGhlIHNvcnQgd29ya3MKICAgICAgICBmb3JlYWNoICggJGRpc3BsYXlfbGVhZHMgYXMgJiRfbGVhZCApIHsKICAgICAgICAgICAgJHAxMV8gPSB2bTJfcGhvbmVfbGFzdDExKCRfbGVhZFsncGhvbmUnXSk7CiAgICAgICAgICAgICRfbGVhZFsnbGFzdF9hY3Rpdml0eSddID0gJGxhc3RfYWN0X21hcFskcDExX10gPz8gJyc7CiAgICAgICAgfQogICAgICAgIHVuc2V0KCRfbGVhZCk7CiAgICB9CgogICAgLy8g4pSA4pSAIFNvcnQg4pSA4pSACiAgICAkbGVhZHNfc29ydCA9IHNhbml0aXplX2tleSggJF9HRVRbJ3ZtMl9scyddID8/ICdhdGl2b19kJyApOwogICAgdXNvcnQoICRkaXNwbGF5X2xlYWRzLCBmdW5jdGlvbigkYSwgJGIpIHVzZSAoJGxlYWRzX3NvcnQpIHsKICAgICAgICBzd2l0Y2ggKCRsZWFkc19zb3J0KSB7CiAgICAgICAgICAgIGNhc2UgJ3Njb3JlJzogICAgcmV0dXJuICRhWydzY29yZSddIC0gJGJbJ3Njb3JlJ107CiAgICAgICAgICAgIGNhc2UgJ3Njb3JlX2QnOiAgcmV0dXJuICRiWydzY29yZSddIC0gJGFbJ3Njb3JlJ107CiAgICAgICAgICAgIGNhc2UgJ25vbWUnOiAgICAgcmV0dXJuIHN0cmNtcCggJGFbJ25hbWUnXSA/PyAnJywgJGJbJ25hbWUnXSA/PyAnJyApOwogICAgICAgICAgICBjYXNlICdub21lX2QnOiAgIHJldHVybiBzdHJjbXAoICRiWyduYW1lJ10gPz8gJycsICRhWyduYW1lJ10gPz8gJycgKTsKICAgICAgICAgICAgY2FzZSAnZXZlbnRvJzogICByZXR1cm4gc3RyY21wKCAkYVsnZGF0YV9ldmVudG8nXSA/OiAnMCcsICRiWydkYXRhX2V2ZW50byddID86ICcwJyApOwogICAgICAgICAgICBjYXNlICdldmVudG9fZCc6IHJldHVybiBzdHJjbXAoICRiWydkYXRhX2V2ZW50byddID86ICcwJywgJGFbJ2RhdGFfZXZlbnRvJ10gPzogJzAnICk7CiAgICAgICAgICAgIGNhc2UgJ2F0aXZvJzogICAgcmV0dXJuIHN0cmNtcCggJGFbJ2xhc3RfYWN0aXZpdHknXSA/OiAnMCcsICRiWydsYXN0X2FjdGl2aXR5J10gPzogJzAnICk7CiAgICAgICAgICAgIGNhc2UgJ2F0aXZvX2QnOiAgcmV0dXJuIHN0cmNtcCggJGJbJ2xhc3RfYWN0aXZpdHknXSA/OiAnMCcsICRhWydsYXN0X2FjdGl2aXR5J10gPzogJzAnICk7CiAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgcmV0dXJuIHN0cmNtcCggJGJbJ2xhc3RfYWN0aXZpdHknXSA/OiAnMCcsICRhWydsYXN0X2FjdGl2aXR5J10gPzogJzAnICk7CiAgICAgICAgfQogICAgfSk7CgogICAgLy8g4pSA4pSAIExpbWl0IGRpc3BsYXkg4pSA4pSACiAgICAkbGVhZHNfZGlzcGxheV9saW1pdCA9IG1heCgxLCAoaW50KSgkX0dFVFsndm0yX2xsJ10gPz8gMTApKTsKICAgICR0b3RhbF9kaXNwbGF5X2xlYWRzID0gY291bnQoJGRpc3BsYXlfbGVhZHMpOwogICAgJGRpc3BsYXlfbGVhZHMgPSBhcnJheV9zbGljZSgkZGlzcGxheV9sZWFkcywgMCwgJGxlYWRzX2Rpc3BsYXlfbGltaXQpOwoKICAgIC8vIOKUgOKUgCBTb3J0IFVSTCBoZWxwZXJzIOKUgOKUgAogICAgJGN1cnJlbnRfcGFyYW1zID0gYXJyYXlfbWVyZ2UoICRfR0VUID8/IFtdLCBbJ3BhZ2UnID0+ICd2bTItYXV0b21hY29lcycsICd0YWInID0+ICdsZWFkcyddICk7CiAgICAkX2xzdSA9IGZuKCRzKSA9PiBlc2NfdXJsKCBhZGRfcXVlcnlfYXJnKCBhcnJheV9tZXJnZSgkY3VycmVudF9wYXJhbXMsIFsndm0yX2xzJyA9PiAkc10pLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpICkgKTsKICAgICRfbGFycm93ID0gZnVuY3Rpb24oJGFzYywgJGRlc2MpIHVzZSAoJGxlYWRzX3NvcnQpIHsKICAgICAgICBpZiAoJGxlYWRzX3NvcnQgPT09ICRhc2MpICByZXR1cm4gJyA8c3BhbiBzdHlsZT0iY29sb3I6IzAwNzlkMyI+4oaRPC9zcGFuPic7CiAgICAgICAgaWYgKCRsZWFkc19zb3J0ID09PSAkZGVzYykgcmV0dXJuICcgPHNwYW4gc3R5bGU9ImNvbG9yOiMwMDc5ZDMiPuKGkzwvc3Bhbj4nOwogICAgICAgIHJldHVybiAnIDxzcGFuIHN0eWxlPSJjb2xvcjojY2NjIj7ihpU8L3NwYW4+JzsKICAgIH07CiAgICAkdGhfbGluayA9ICdjb2xvcjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjpub25lO3doaXRlLXNwYWNlOm5vd3JhcCc7CiAgICA/PgoKICAgIDwhLS0gTGltaXQgY29udHJvbCAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjhweDttYXJnaW4tYm90dG9tOjEwcHgiPgogICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNTc2MDZhIj4KICAgICAgICAgICAgTW9zdHJhbmRvIDxzdHJvbmc+PD9waHAgZWNobyBjb3VudCgkZGlzcGxheV9sZWFkcyk7ID8+PC9zdHJvbmc+IGRlIDxzdHJvbmc+PD9waHAgZWNobyAkdG90YWxfZGlzcGxheV9sZWFkczsgPz48L3N0cm9uZz4gbGVhZHMKICAgICAgICAgICAgPD9waHAgaWYgKCRmaWx0ZXJfbGV2ZWwpOiA/PuKAlCBmaWx0cm86IDxzdHJvbmc+PD9waHAgZWNobyBlc2NfaHRtbCgkZmlsdGVyX2xldmVsKTsgPz48L3N0cm9uZz48P3BocCBlbmRpZjsgPz4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O21hcmdpbjowIj4KICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojMzMzIj5DYXJyZWdhcjo8L2xhYmVsPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idm0yLWxsLWlucHV0IiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkbGVhZHNfZGlzcGxheV9saW1pdCk7ID8+IiBtaW49IjEiIG1heD0iNTAwIgogICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjcwcHg7cGFkZGluZzo0cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2QwZDBkMDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTJweCI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSIoZnVuY3Rpb24oKXt2YXIgdT1uZXcgVVJMKGxvY2F0aW9uLmhyZWYpO3Uuc2VhcmNoUGFyYW1zLnNldCgndm0yX2xsJyxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWxsLWlucHV0JykudmFsdWUpOzw/cGhwIGlmKCRmaWx0ZXJfbGV2ZWwpOiA/PnUuc2VhcmNoUGFyYW1zLnNldCgndm0yX2xmJywnPD9waHAgZWNobyBlc2NfanMoJGZpbHRlcl9sZXZlbCk7ID8+Jyk7PD9waHAgZW5kaWY7ID8+PD9waHAgaWYoJGxlYWRzX3NvcnQpOiA/PnUuc2VhcmNoUGFyYW1zLnNldCgndm0yX2xzJywnPD9waHAgZWNobyBlc2NfanMoJGxlYWRzX3NvcnQpOyA/PicpOzw/cGhwIGVuZGlmOyA/PmxvY2F0aW9uLmhyZWY9dS50b1N0cmluZygpO30pKCkiIHN0eWxlPSJwYWRkaW5nOjRweCAxMHB4O2JhY2tncm91bmQ6IzAwNzlkMztjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxMnB4O2N1cnNvcjpwb2ludGVyIj7inJQ8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6YXV0byI+CiAgICA8dGFibGUgc3R5bGU9IndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgIDx0ciBzdHlsZT0iYmFja2dyb3VuZDojZjZmOGZhO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlMGUwZTAiPgogICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3dyYXAiPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJF9sc3UoJGxlYWRzX3NvcnQ9PT0nc2NvcmUnPydzY29yZV9kJzonc2NvcmUnKTsgPz4iIHN0eWxlPSI8P3BocCBlY2hvICR0aF9saW5rOyA/PiI+U2NvcmU8P3BocCBlY2hvICRfbGFycm93KCdzY29yZScsJ3Njb3JlX2QnKTsgPz48L2E+PC90aD4KICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0icGFkZGluZzo4cHggMTBweDt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6bm93cmFwIj48YSBocmVmPSI8P3BocCBlY2hvICRfbHN1KCRsZWFkc19zb3J0PT09J2F0aXZvJz8nYXRpdm9fZCc6J2F0aXZvJyk7ID8+IiBzdHlsZT0iPD9waHAgZWNobyAkdGhfbGluazsgPz4iPsOabHRpbWEgQXRpdmlkYWRlPD9waHAgZWNobyAkX2xhcnJvdygnYXRpdm8nLCdhdGl2b19kJyk7ID8+PC9hPjwvdGg+CiAgICAgICAgICAgICAgICA8dGggc3R5bGU9InBhZGRpbmc6OHB4IDEwcHg7dGV4dC1hbGlnbjpsZWZ0Ij48YSBocmVmPSI8P3BocCBlY2hvICRfbHN1KCRsZWFkc19zb3J0PT09J25vbWUnPydub21lX2QnOidub21lJyk7ID8+IiBzdHlsZT0iPD9waHAgZWNobyAkdGhfbGluazsgPz4iPk5vbWU8P3BocCBlY2hvICRfbGFycm93KCdub21lJywnbm9tZV9kJyk7ID8+PC9hPjwvdGg+CiAgICAgICAgICAgICAgICA8dGggc3R5bGU9InBhZGRpbmc6OHB4IDEwcHg7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcCI+VGVsZWZvbmU8L3RoPgogICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O3RleHQtYWxpZ246bGVmdCI+U2luYWlzPC90aD4KICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0icGFkZGluZzo4cHggMTBweDt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6bm93cmFwIj48YSBocmVmPSI8P3BocCBlY2hvICRfbHN1KCRsZWFkc19zb3J0PT09J2V2ZW50byc/J2V2ZW50b19kJzonZXZlbnRvJyk7ID8+IiBzdHlsZT0iPD9waHAgZWNobyAkdGhfbGluazsgPz4iPkRhdGEgRXZlbnRvPD9waHAgZWNobyAkX2xhcnJvdygnZXZlbnRvJywnZXZlbnRvX2QnKTsgPz48L2E+PC90aD4KICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0icGFkZGluZzo4cHggMTBweDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXAiPkHDp8O1ZXM8L3RoPgogICAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGhlYWQ+CiAgICAgICAgPHRib2R5PgogICAgICAgIDw/cGhwIGlmICggZW1wdHkoJGRpc3BsYXlfbGVhZHMpICk6ID8+CiAgICAgICAgICAgIDx0cj48dGQgY29sc3Bhbj0iNyIgc3R5bGU9InBhZGRpbmc6MjRweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojODg4Ij5OZW5odW0gbGVhZCBlbmNvbnRyYWRvLiA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoYWRkX3F1ZXJ5X2FyZygndm0yX3JlY2FsYycsJzEnLCRiYXNlX3VybCkpOyA/PiI+8J+UhCBSZWNhbGN1bGFyPC9hPjwvdGQ+PC90cj4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICA8P3BocCBmb3JlYWNoICggJGRpc3BsYXlfbGVhZHMgYXMgJGxlYWQgKToKICAgICAgICAgICAgJGx2bCAgICAgPSAkbGVhZFsnbGV2ZWwnXTsKICAgICAgICAgICAgJHNjb3JlICAgPSAkbGVhZFsnc2NvcmUnXTsKICAgICAgICAgICAgJGJhZGdlY2wgPSAkbHZsID09PSAnaG90JyA/ICd2bTItaG90JyA6ICgkbHZsID09PSAnd2FybScgPyAndm0yLXdhcm0nIDogJ3ZtMi1jb2xkJyk7CiAgICAgICAgICAgICRpY29uICAgID0gJGx2bCA9PT0gJ2hvdCcgPyAn8J+UpScgOiAoJGx2bCA9PT0gJ3dhcm0nID8gJ+KaoScgOiAn8J+MsScpOwogICAgICAgICAgICAkbmFtZSAgICA9ICRsZWFkWyduYW1lJ10gPzogJ+KAlCc7CiAgICAgICAgICAgICRwaG9uZSAgID0gJGxlYWRbJ3Bob25lJ107CiAgICAgICAgICAgICRwMTEgICAgID0gJGxlYWRbJ3AxMSddID8/IHZtMl9waG9uZV9sYXN0MTEoJHBob25lKTsKICAgICAgICAgICAgJGV2ICAgICAgPSAkbGVhZFsnZGF0YV9ldmVudG8nXSA/PyAnJzsKICAgICAgICAgICAgJGV2X2ZtdCAgPSAkZXYgPyBkYXRlKCdkL20veScsIHN0cnRvdGltZSgkZXYpKSA6ICfigJQnOwogICAgICAgICAgICAkc2lnbmFscyA9ICRsZWFkWydzaWduYWxzJ10gPz8gW107CiAgICAgICAgICAgICRzZW5kX2RhdGEgPSBlc2NfYXR0cihqc29uX2VuY29kZShbJ3Bob25lJyA9PiAkcGhvbmUsICduYW1lJyA9PiAkbmFtZV0pKTsKICAgICAgICAgICAgJHAxMV9sZWFkICA9IHZtMl9waG9uZV9sYXN0MTEoJHBob25lKTsKICAgICAgICAgICAgJGxhX3JhdyAgICA9ICRsYXN0X2FjdF9tYXBbJHAxMV9sZWFkXSA/PyAnJzsKICAgICAgICAgICAgJGxhX2ZtdCAgICA9ICRsYV9yYXcgPyB2bTJfbG9jYWxfZGF0ZSgnZC9tL3kgSDppJywgJGxhX3JhdykgOiAn4oCUJzsKICAgICAgICA/PgogICAgICAgIDx0ciBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2YwZjBmMCIgY2xhc3M9InZtMi1sZWFkLXJvdyI+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTBweDt3aGl0ZS1zcGFjZTpub3dyYXAiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1iYWRnZS1zY29yZSA8P3BocCBlY2hvICRiYWRnZWNsOyA/PiI+PD9waHAgZWNobyAkaWNvbiAuICcgJyAuICRzY29yZTsgPz48L3NwYW4+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTBweDtjb2xvcjojNTc2MDZhO2ZvbnQtc2l6ZToxMnB4O3doaXRlLXNwYWNlOm5vd3JhcCI+PD9waHAgZWNobyBlc2NfaHRtbCgkbGFfZm10KTsgPz48L3RkPgogICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEwcHg7bWF4LXdpZHRoOjE0MHB4O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcCIgdGl0bGU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJG5hbWUpOyA/PiI+CiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGVzY19odG1sKCRuYW1lKTsgPz4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjEycHgiPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyBlc2NfaHRtbCgkcGhvbmUpOyA/PgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEwcHgiPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo0cHgiPgogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoICRzaWduYWxzIGFzICRzaWcgKTogPz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iKzw/cGhwIGVjaG8gKGludCkkc2lnWydwdHMnXTsgPz4gcHRzIiBzdHlsZT0iYmFja2dyb3VuZDojZjBmMGYwO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjJweCA3cHg7Zm9udC1zaXplOjExcHg7d2hpdGUtc3BhY2U6bm93cmFwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBlc2NfaHRtbCgkc2lnWydpY29uJ10gLiAnICcgLiAkc2lnWydsYWJlbCddKTsgPz4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTBweDt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC1zaXplOjEycHgiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGV2X2ZtdCk7ID8+PC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcCI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3dhLm1lLzw/cGhwIGVjaG8gZXNjX2F0dHIoJHBob25lKTsgPz4iIHRhcmdldD0iX2JsYW5rIgogICAgICAgICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6IzI1ZDM2Njtjb2xvcjojZmZmO3BhZGRpbmc6NHB4IDhweDtib3JkZXItcmFkaXVzOjVweDt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXNpemU6MTFweDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MXB4Ij4KICAgICAgICAgICAgICAgICAgICDwn5KsIFdBCiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJ2bTJTZW5kTGVhZE5vdyh0aGlzLCA8P3BocCBlY2hvICRzZW5kX2RhdGE7ID8+KSIKICAgICAgICAgICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDojMDA3OWQzO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7cGFkZGluZzo0cHggOHB4O2JvcmRlci1yYWRpdXM6NXB4O2ZvbnQtc2l6ZToxMXB4O2N1cnNvcjpwb2ludGVyO21hcmdpbjoxcHgiPgogICAgICAgICAgICAgICAgICAgIPCfk6QgRW52aWFyCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgPC90Ym9keT4KICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgLy8gQ2hhbm5lbCBzd2l0Y2ggZm9yIGF1dG8tYXF1ZWNlciBwYW5lbAogICAgKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBhYUNoU2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1hYS1jaCcpOwogICAgICAgIGlmIChhYUNoU2VsKSB7CiAgICAgICAgICAgIGFhQ2hTZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2bTJTdGVwQ2hhbm5lbFN3aXRjaCgnYWEnLCB0aGlzLnZhbHVlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfSkoKTsKCiAgICBmdW5jdGlvbiB2bTJTdGVwQ2hhbm5lbFN3aXRjaChwcmVmaXgsIHZhbCkgewogICAgICAgIHZhciBpc1dhYmEgPSB2YWwgJiYgdmFsLmluZGV4T2YoJ3dhYmEnKSA9PT0gMDsKICAgICAgICB2YXIgd2FiYVJvd3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQkPSItd2FiYS1yb3ciXScpOwogICAgICAgIHZhciB6YXBpUm93cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZCQ9Ii16YXBpLXJvdyJdJyk7CiAgICAgICAgaWYgKHByZWZpeCA9PT0gJ2FhJykgewogICAgICAgICAgICB2YXIgd3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWFhLXdhYmEtcm93Jyk7CiAgICAgICAgICAgIHZhciB6ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItYWEtemFwaS1yb3cnKTsKICAgICAgICAgICAgaWYgKHdyKSB3ci5zdHlsZS5kaXNwbGF5ID0gaXNXYWJhID8gJycgOiAnbm9uZSc7CiAgICAgICAgICAgIGlmICh6cikgenIuc3R5bGUuZGlzcGxheSA9IGlzV2FiYSA/ICdub25lJyA6ICcnOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB2bTJTZW5kTGVhZE5vdyhidG4sIGRhdGEpIHsKICAgICAgICB2YXIgcGhvbmUgPSBkYXRhLnBob25lOwogICAgICAgIHZhciBuYW1lICA9IGRhdGEubmFtZSB8fCAnY2xpZW50ZSc7CiAgICAgICAgaWYgKCFjb25maXJtKCdFbnZpYXIgbWVuc2FnZW0gcGFyYSAnICsgbmFtZSArICcgKCcgKyBwaG9uZSArICcpPycpKSByZXR1cm47CiAgICAgICAgYnRuLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICBidG4udGV4dENvbnRlbnQgPSAn4o+zJzsKICAgICAgICB2YXIgbm9uY2UgPSAnPD9waHAgZWNobyB3cF9jcmVhdGVfbm9uY2UoInZtMl9ub25jZSIpOyA/Pic7CiAgICAgICAgZmV0Y2goYWpheHVybCwgewogICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKICAgICAgICAgICAgaGVhZGVyczogeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30sCiAgICAgICAgICAgIGJvZHk6ICdhY3Rpb249dm0yX3NlbmRfbGVhZF9ub3cmcGhvbmU9JyArIGVuY29kZVVSSUNvbXBvbmVudChwaG9uZSkgKyAnJm5hbWU9JyArIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSArICcmbm9uY2U9JyArIG5vbmNlCiAgICAgICAgfSkKICAgICAgICAudGhlbihyID0+IHIuanNvbigpKQogICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlcykgewogICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfinIUnOwogICAgICAgICAgICAgICAgYnRuLnN0eWxlLmJhY2tncm91bmQgPSAnIzRjYWY1MCc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBidG4udGV4dENvbnRlbnQgPSAn4p2MJzsKICAgICAgICAgICAgICAgIGJ0bi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmNDQzMzYnOwogICAgICAgICAgICAgICAgYWxlcnQoJ0Vycm86ICcgKyAocmVzLmRhdGEgfHwgJ2ZhbGhhIG5vIGVudmlvJykpOwogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfinYwnOwogICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICB9KTsKICAgIH0KICAgIDwvc2NyaXB0PgogICAgICAgIDwvZGl2PjwhLS0gL2F1dG8tYXF1ZWNlciBkZXRhaWxzIGNvbnRlbnQgLS0+CiAgICAgICAgPC9kZXRhaWxzPjwhLS0gL2F1dG8tYXF1ZWNlciAtLT4KCiAgICA8L2Rpdj48IS0tIC9hdXRvYXF1ZWNlciB0YWIgLS0+CgogICAgPCEtLSA9PT09PSBUQUI6IExFQURTIEhPVCA9PT09PSAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi10YWItYm9keSA8P3BocCBlY2hvICRhY3RpdmVfdGFiID09PSAnaG90JyA/ICdhY3RpdmUnIDogJyc7ID8+Ij4KCiAgICAgICAgPCEtLSBBbnRpLXNwYW0gYmFyIGNvbXBhY3RhIC0tPgogICAgICAgIDw/cGhwCiAgICAgICAgJF92bTJfdG9kYXkgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMgV0hFUkUgREFURShzZW50X2F0KSA9IENVUkRBVEUoKSIpOwogICAgICAgICRfdm0yX2NhcCAgID0gKGludClnZXRfb3B0aW9uKCd2bTJfZ2xvYmFsX2RhaWx5X2xpbWl0JywgMTAwKTsKICAgICAgICAkX3ZtMl9raWxsICA9IGdldF9vcHRpb24oJ3ZtMl9raWxsX3N3aXRjaCcsICcwJyk7CiAgICAgICAgJGJhcl9iZyAgICAgPSAkX3ZtMl9raWxsID09PSAnMScgPyAnI2ZlZjJmMicgOiAnI2YwZmRmNCc7CiAgICAgICAgJGJhcl9iZCAgICAgPSAkX3ZtMl9raWxsID09PSAnMScgPyAnI2ZjYTVhNScgOiAnIzg2ZWZhYyc7CiAgICAgICAgPz4KICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGJhcl9iZzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRiYXJfYmQ7ID8+O2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEwcHggMTZweDttYXJnaW4tYm90dG9tOjE2cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDo3MDAiPjw/cGhwIGVjaG8gJF92bTJfa2lsbD09PScxJz8n8J+UtCBLSUxMIFNXSVRDSCBHTE9CQUwnOifwn5+iIEFxdWVjaW1lbnRvIE9wZXJhY2lvbmFsJzsgPz48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojNTc2MDZhIj7wn5OKIEhvamU6IDxzdHJvbmc+PD9waHAgZWNobyAkX3ZtMl90b2RheTsgPz48L3N0cm9uZz4vPD9waHAgZWNobyAoJF92bTJfY2FwID86ICfiiJ4nKTsgPz48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojNTc2MDZhIj7ij7HvuI8gQ29vbGRvd246IDw/cGhwIGVjaG8gKGludClnZXRfb3B0aW9uKCd2bTJfY29vbGRvd25faG91cnMnLDI0KTsgPz5oPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzU3NjA2YSI+8J+TpiBCYXRjaDogPD9waHAgZWNobyAoaW50KWdldF9vcHRpb24oJ3ZtMl9iYXRjaF9zaXplJywxMCk7ID8+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzU3NjA2YSI+8J+MmSBTaWzDqm5jaW86IDw/cGhwIGVjaG8gKGludClnZXRfb3B0aW9uKCd2bTJfcXVpZXRfc3RhcnQnLDIwKTsgPz5o4oCTPD9waHAgZWNobyAoaW50KWdldF9vcHRpb24oJ3ZtMl9xdWlldF9lbmQnLDgpOyA/Pmg8L3NwYW4+CiAgICAgICAgICAgIDw/cGhwIGlmICggdm0yX2lzX3F1aWV0X3RpbWUoKSApOiA/PjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZWYzYzc7Y29sb3I6IzkyNDAwZTtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtd2VpZ2h0OjcwMCI+8J+MmSBTaWzDqm5jaW8gYXRpdm88L3NwYW4+PD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gYWRtaW5fdXJsKCdhZG1pbi5waHA/cGFnZT12bTItc2V0dGluZ3MnKTsgPz4iIHN0eWxlPSJtYXJnaW4tbGVmdDphdXRvO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwMDczYWE7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPuKame+4jyBDb25maWd1cmHDp8O1ZXMg4oaSPC9hPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIOKUgOKUgCBMZWFkcyBIT1QgKHByaW9yaWRhZGUgMCkg4pSA4pSAIC0tPgogICAgICAgIDw/cGhwCiAgICAgICAgJGhvdF9vbl9oZHIyICAgPSBnZXRfb3B0aW9uKCd2bTJfaG90X29uJywnMCcpOwogICAgICAgICRob3Rfa2lsbF9oZHIyID0gZ2V0X29wdGlvbigndm0yX2hvdF9raWxsJywnMCcpOwogICAgICAgICRob3Rfc2VjdF9vbjIgID0gKCRob3Rfb25faGRyMiA9PT0gJzEnICYmICRob3Rfa2lsbF9oZHIyICE9PSAnMScpOwogICAgICAgICRob3RfaGRyX2NvdW50MiA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9jb250YWN0cyBXSEVSRSBzY29yZSA+PSA2MCIpOwogICAgICAgICRob3RfaGRyX2hvamUyICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9zZW5kcyBXSEVSRSBtb2R1bGUgPSAnaG90JyBBTkQgREFURShzZW50X2F0KSA9IENVUkRBVEUoKSIpOwogICAgICAgID8+CiAgICAgICAgPGRldGFpbHMgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICA8c3VtbWFyeSBzdHlsZT0icGFkZGluZzoxMHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4O2xpc3Qtc3R5bGU6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTBweCI+CiAgICAgICAgICAgIDxzcGFuPvCflKUgTGVhZHMgSE9UPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZTBlMGUwO2NvbG9yOiM1NzYwNmE7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MTBweDtmb250LXNpemU6MTFweCI+UHJpb3JpZGFkZSAwPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZmZmM2UwO2NvbG9yOiNlNjUxMDA7cGFkZGluZzoycHggN3B4O2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxMXB4Ij7wn5SlIDw/cGhwIGVjaG8gJGhvdF9oZHJfY291bnQyOyA/PiBIT1Q8L3NwYW4+CiAgICAgICAgICAgIDw/cGhwIGlmICgkaG90X2hkcl9ob2plMiA+IDApOiA/PjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNlOGY1ZTk7Y29sb3I6IzFiNWUyMDtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjExcHgiPvCfk6QgPD9waHAgZWNobyAkaG90X2hkcl9ob2plMjsgPz4gaG9qZTwvc3Bhbj48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPD9waHAgZWNobyAkaG90X3NlY3Rfb24yID8gJzxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDphdXRvIiBjbGFzcz0idm0yLWtzLW9mZiI+8J+foiBBVElWTzwvc3Bhbj4nIDogJzxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDphdXRvIiBjbGFzcz0idm0yLWtzLW9uIj7wn5S0IFBBVVNBRE88L3NwYW4+JzsgPz4KICAgICAgICA8L3N1bW1hcnk+CiAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzoxNHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlMGUwZTAiPgoKCiAgICA8P3BocAogICAgJGhvdF9vbiAgICAgICA9IGdldF9vcHRpb24oICd2bTJfaG90X29uJywgICAgICAgJzAnICk7CiAgICAkaG90X2tpbGwgICAgID0gZ2V0X29wdGlvbiggJ3ZtMl9ob3Rfa2lsbCcsICAgICAnMScgKTsKICAgICRob3RfY2hhbm5lbCAgPSBnZXRfb3B0aW9uKCAndm0yX2hvdF9jaGFubmVsJywgICd3YWJhXzUwMzknICk7CiAgICAkaG90X3RlbXBsYXRlID0gZ2V0X29wdGlvbiggJ3ZtMl9ob3RfdGVtcGxhdGUnLCAnJyApOwogICAgJGhvdF9tc2cgICAgICA9IGdldF9vcHRpb24oICd2bTJfaG90X21zZycsCiAgICAgICAgIk9pIHtub21lfSEg8J+RiyBBcXVpIMOpIGRhIFZpdmFNYWlzIOKAlCB2b2PDqiB0ZW0gdW0gZXZlbnRvIGVtIHZpc3RhP1xuQWluZGEgZMOhIHRlbXBvIGRlIGZlY2hhciBhcyBhdHJhw6fDtWVzIHBlcmZlaXRhcy4gUG9zc28gYWp1ZGFyISDwn46JXG57bGlua30iICk7CiAgICAkaG90X2Nvb2xkb3duID0gKGludCkgZ2V0X29wdGlvbiggJ3ZtMl9ob3RfY29vbGRvd24nLCAnNzInICk7CiAgICAkaG90X2JhdGNoICAgID0gKGludCkgZ2V0X29wdGlvbiggJ3ZtMl9ob3RfYmF0Y2gnLCAgICAnMTAnICk7CiAgICAkaG90X2lzX3dhYmEgID0gaXNzZXQoICRjaGFubmVsc1skaG90X2NoYW5uZWxdICkgJiYgJGNoYW5uZWxzWyRob3RfY2hhbm5lbF1bJ3R5cGUnXSA9PT0gJ3dhYmEnOwogICAgJGhvdF9hY3RpdmUgICA9ICRob3Rfb24gPT09ICcxJyAmJiAkaG90X2tpbGwgIT09ICcxJzsKICAgID8+CiAgICA8IS0tIENvbmZpZyBBdXRvLUhPVCAoY29sbGFwc2libGUpIC0tPgogICAgPGRldGFpbHMgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjA7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICA8c3VtbWFyeSBzdHlsZT0icGFkZGluZzoxMHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4O2xpc3Qtc3R5bGU6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7YmFja2dyb3VuZDo8P3BocCBlY2hvICRob3RfYWN0aXZlID8gJyNmZmYzZTAnIDogJyNmZmY4ZTEnOyA/Pjtib3JkZXItcmFkaXVzOjhweCI+CiAgICAgICAgICAgIDxzcGFuPvCflKUgQXV0by1IT1Q8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzY2NiI+4oCUIGVudmlhIG1lbnNhZ2VtIGNpcsO6cmdpY2EgcGFyYSBsZWFkcyBJbmNvbWluZyBubyBLb21tbyAocGlwZWxpbmUgSE9UKTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG87Zm9udC1zaXplOjEycHg7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGhvdF9hY3RpdmUgPyAnI2U2NTEwMCcgOiAnI2ZmOTgwMCc7ID8+O2NvbG9yOiNmZmYiPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkaG90X2FjdGl2ZSA/ICfwn5+gIEFUSVZPJyA6ICfwn5+hIFBBUkFETyc7ID8+CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L3N1bW1hcnk+CiAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzoxNHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlMGUwZTAiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMjAwcHgsMWZyKSk7Z2FwOjEycHg7YWxpZ24taXRlbXM6ZW5kIj4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+UmCBTdGF0dXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfaG90X29uIiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiIDw/cGhwIHNlbGVjdGVkKCRob3Rfb24sJzAnKTsgPz4+8J+UtCBQQVJBRE88L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSIgPD9waHAgc2VsZWN0ZWQoJGhvdF9vbiwnMScpOyA/Pj7wn5+iIEFUSVZPPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImRpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5uRIEtpbGwgU3dpdGNoPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0idm0yX2hvdF9raWxsIiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEiIDw/cGhwIHNlbGVjdGVkKCRob3Rfa2lsbCwnMScpOyA/Pj7wn5S0IEJsb3F1ZWFkbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIiA8P3BocCBzZWxlY3RlZCgkaG90X2tpbGwsJzAnKTsgPz4+8J+foiBMaWJlcmFkbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+ToSBDYW5hbCBwcmVmZXJlbmNpYWw8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfaG90X2NoYW5uZWwiIGlkPSJ2bTItaG90LWNoIiBvbmNoYW5nZT0idm0yU3RlcENoYW5uZWxTd2l0Y2goJ2hvdCcsdGhpcy52YWx1ZSkiIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyB2bTJfY2hhbm5lbF9vcHRpb25zX2h0bWwoICRob3RfY2hhbm5lbCApOyA/PgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+4o+wIENvb2xkb3duIChoIGVudHJlIGVudmlvcyk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm0yX2hvdF9jb29sZG93biIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGhvdF9jb29sZG93bik7ID8+IiBtaW49IjEiIG1heD0iMzM2IiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjZweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkMGQwO2JvcmRlci1yYWRpdXM6NnB4Ij4KICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweDtmb250LXdlaWdodDo2MDAiPvCfk6YgQmF0Y2ggKG1zZ3MvaG9yYSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm0yX2hvdF9iYXRjaCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGhvdF9iYXRjaCk7ID8+IiBtaW49IjEiIG1heD0iNTAiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkMGQwZDA7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InZtMi1ob3Qtd2FiYS1yb3ciIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7PD9waHAgZWNobyAkaG90X2lzX3dhYmEgPyAnJyA6ICdkaXNwbGF5Om5vbmUnOyA/PiI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweDtmb250LXdlaWdodDo2MDAiPvCfk4sgVGVtcGxhdGUgV0FCQTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtMl9ob3RfdGVtcGxhdGUiIHN0eWxlPSJ3aWR0aDoxMDAlO21heC13aWR0aDo0MjBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gdm0yX3dhYmFfdGVtcGxhdGVfb3B0aW9uc19odG1sKCAkaG90X3RlbXBsYXRlICk7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0idm0yLWhvdC16YXBpLXJvdyIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDs8P3BocCBlY2hvICRob3RfaXNfd2FiYSA/ICdkaXNwbGF5Om5vbmUnIDogJyc7ID8+Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+SrCBNZW5zYWdlbSA8c21hbGwgc3R5bGU9ImZvbnQtd2VpZ2h0OjQwMCI+KHZhcnM6IHtub21lfSwge2xpbmt9KTwvc21hbGw+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ2bTJfaG90X21zZyIgc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjgwcHg7cmVzaXplOnZlcnRpY2FsO2ZvbnQtc2l6ZToxMnB4O2JvcmRlcjoxcHggc29saWQgI2QwZDBkMDtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjZweCA4cHgiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCAkaG90X21zZyApOyA/PjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODgiPntsaW5rfSA9IFVSTCByYXN0cmXDoXZlbCBwYXJhIG8gc2l0ZSAoVVRNIGF1dG9tw6F0aWNvKTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCB2bTJfcmVuZGVyX3Rlc3RfYm94KCAnaG90JywgJGhvdF9jaGFubmVsLCAkaG90X21zZywgJGhvdF90ZW1wbGF0ZSApOyA/PgogICAgICAgIDwhLS0gW3YxLjUuOTRdIEVNQUlMIFBBUkFMRUxPIEhPVCAtLT4KICAgICAgICA8P3BocAogICAgICAgICRob3RfZW1haWxfb24gICA9IGdldF9vcHRpb24oJ3ZtMl9ob3RfZW1haWxfb24nLCAnMCcpOwogICAgICAgICRob3RfZW1haWxfc3ViaiA9IGdldF9vcHRpb24oJ3ZtMl9ob3RfZW1haWxfc3ViamVjdCcsICdWb2PDqiBlc3TDoSBwcm9jdXJhbmRvIGF0cmHDp8O1ZXMgcGFyYSBzdWEgZmVzdGE/IPCfjoknKTsKICAgICAgICAkaG90X2VtYWlsX2JvZHkgPSBnZXRfb3B0aW9uKCd2bTJfaG90X2VtYWlsX2JvZHknLCAiT2kge25vbWV9IVxuXG5WaSBxdWUgdm9jw6ogZGVtb25zdHJvdSBpbnRlcmVzc2UgZW0gY29udHJhdGFyIGF0cmHDp8O1ZXMgcGFyYSBzZXUgZXZlbnRvLiBBaW5kYSBlc3TDoSBwZXNxdWlzYW5kbz9cblxuVGVtb3MgY2VudGVuYXMgZGUgb3DDp8O1ZXMgZXNwZXJhbmRvIHBvciB2b2PDqjpcbmh0dHBzOi8vbG9qYS52aXZhbWFpc2V2ZW50b3MuY29tXG5cbl9FcXVpcGUgVml2YU1haXMgRXZlbnRvc18iKTsKICAgICAgICAkaG90X2VtYWlsX2NudCAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfY29udGFjdHMgV0hFUkUgZW1haWwgIT0gJycgQU5EIGVtYWlsIElTIE5PVCBOVUxMIik7CiAgICAgICAgPz4KICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmMGY5ZmY7Ym9yZGVyOjFweCBzb2xpZCAjYmZkYmZlO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHggMThweDttYXJnaW4tdG9wOjE2cHgiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MTJweCI+CiAgICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTRweDtjb2xvcjojMWU0MGFmIj7wn5OnIENhbmFsIEVtYWlsIOKAlCBQYXJhbGVsbyBhbyBXQTwvc3Ryb25nPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2RiZWFmZTtjb2xvcjojMWU0MGFmO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMCI+PD9waHAgZWNobyAkaG90X2VtYWlsX2NudDsgPz4gY29udGF0b3MgY29tIGVtYWlsPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2NDc0OGI7bWFyZ2luOjAgMCAxNHB4Ij4KICAgICAgICAgICAgICAgIFF1YW5kbyBhdGl2bywgZW52aWEgZW1haWwgZW0gcGFyYWxlbG8gYW8gV0EgcGFyYSBjb250YXRvcyBIT1QgcXVlIHTDqm0gZW1haWwgY2FkYXN0cmFkby4KICAgICAgICAgICAgICAgIFZhcnMgZGlzcG9uw612ZWlzOiA8Y29kZT57bm9tZX08L2NvZGU+LCA8Y29kZT57bGlua308L2NvZGU+CiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHgiPlN0YXR1czo8L2xhYmVsPgogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfaG90X2VtYWlsX29uIiBzdHlsZT0icGFkZGluZzo2cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMGQ3ZGU7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiIDw/cGhwIHNlbGVjdGVkKCRob3RfZW1haWxfb24sJzAnKTsgPz4+8J+UtCBEZXNhdGl2YWRvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSIgPD9waHAgc2VsZWN0ZWQoJGhvdF9lbWFpbF9vbiwnMScpOyA/Pj7wn5+iIEF0aXZvPC9vcHRpb24+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTJweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5OdIEFzc3VudG88L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InZtMl9ob3RfZW1haWxfc3ViamVjdCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGhvdF9lbWFpbF9zdWJqKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkN2RlO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5KsIENvcnBvIGRvIGVtYWlsPC9sYWJlbD4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ2bTJfaG90X2VtYWlsX2JvZHkiIHJvd3M9IjYiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkN2RlO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtyZXNpemU6dmVydGljYWwiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRob3RfZW1haWxfYm9keSk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2RldGFpbHM+CgogICAgICAgIDw/cGhwIGVjaG8gdm0yX3JlbmRlcl9taW5pX2xvZyggJ2hvdCcsIDE1LCAn8J+TiyBMb2cgTGVhZHMgSE9UJyApOyA/PgogICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDttYXJnaW4tdG9wOjhweDttYXJnaW4tYm90dG9tOjRweCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidXR0b24gYnV0dG9uLXByaW1hcnkiPvCfkr4gU2FsdmFyIENvbmZpZ3VyYcOnw7VlczwvYnV0dG9uPgogICAgPC9kaXY+CiAgICAgICAgPC9kaXY+PCEtLSAvbGVhZHMgSE9UIGRldGFpbHMgY29udGVudCAtLT4KICAgICAgICA8L2RldGFpbHM+PCEtLSAvbGVhZHMgSE9UIC0tPgoKICAgIDwvZGl2PjwhLS0gL2hvdCB0YWIgLS0+CgogICAgPCEtLSA9PT09PSBUQUI6IFBPUiBEQVRBID09PT09IC0tPgogICAgPGRpdiBjbGFzcz0idm0yLXRhYi1ib2R5IDw/cGhwIGVjaG8gJGFjdGl2ZV90YWIgPT09ICdieWRhdGUnID8gJ2FjdGl2ZScgOiAnJzsgPz4iPgoKICAgICAgICA8IS0tIEFudGktc3BhbSBiYXIgY29tcGFjdGEgLS0+CiAgICAgICAgPD9waHAKICAgICAgICAkX3ZtMl90b2RheSA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9zZW5kcyBXSEVSRSBEQVRFKHNlbnRfYXQpID0gQ1VSREFURSgpIik7CiAgICAgICAgJF92bTJfY2FwICAgPSAoaW50KWdldF9vcHRpb24oJ3ZtMl9nbG9iYWxfZGFpbHlfbGltaXQnLCAxMDApOwogICAgICAgICRfdm0yX2tpbGwgID0gZ2V0X29wdGlvbigndm0yX2tpbGxfc3dpdGNoJywgJzAnKTsKICAgICAgICAkYmFyX2JnICAgICA9ICRfdm0yX2tpbGwgPT09ICcxJyA/ICcjZmVmMmYyJyA6ICcjZjBmZGY0JzsKICAgICAgICAkYmFyX2JkICAgICA9ICRfdm0yX2tpbGwgPT09ICcxJyA/ICcjZmNhNWE1JyA6ICcjODZlZmFjJzsKICAgICAgICA/PgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6PD9waHAgZWNobyAkYmFyX2JnOyA/Pjtib3JkZXI6MXB4IHNvbGlkIDw/cGhwIGVjaG8gJGJhcl9iZDsgPz47Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTBweCAxNnB4O21hcmdpbi1ib3R0b206MTZweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwO2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMCI+PD9waHAgZWNobyAkX3ZtMl9raWxsPT09JzEnPyfwn5S0IEtJTEwgU1dJVENIIEdMT0JBTCc6J/Cfn6IgQXF1ZWNpbWVudG8gT3BlcmFjaW9uYWwnOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM1NzYwNmEiPvCfk4ogSG9qZTogPHN0cm9uZz48P3BocCBlY2hvICRfdm0yX3RvZGF5OyA/Pjwvc3Ryb25nPi88P3BocCBlY2hvICgkX3ZtMl9jYXAgPzogJ+KInicpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM1NzYwNmEiPuKPse+4jyBDb29sZG93bjogPD9waHAgZWNobyAoaW50KWdldF9vcHRpb24oJ3ZtMl9jb29sZG93bl9ob3VycycsMjQpOyA/Pmg8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojNTc2MDZhIj7wn5OmIEJhdGNoOiA8P3BocCBlY2hvIChpbnQpZ2V0X29wdGlvbigndm0yX2JhdGNoX3NpemUnLDEwKTsgPz48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojNTc2MDZhIj7wn4yZIFNpbMOqbmNpbzogPD9waHAgZWNobyAoaW50KWdldF9vcHRpb24oJ3ZtMl9xdWlldF9zdGFydCcsMjApOyA/PmjigJM8P3BocCBlY2hvIChpbnQpZ2V0X29wdGlvbigndm0yX3F1aWV0X2VuZCcsOCk7ID8+aDwvc3Bhbj4KICAgICAgICAgICAgPD9waHAgaWYgKCB2bTJfaXNfcXVpZXRfdGltZSgpICk6ID8+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2ZlZjNjNztjb2xvcjojOTI0MDBlO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC13ZWlnaHQ6NzAwIj7wn4yZIFNpbMOqbmNpbyBhdGl2bzwvc3Bhbj48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBhZG1pbl91cmwoJ2FkbWluLnBocD9wYWdlPXZtMi1zZXR0aW5ncycpOyA/PiIgc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG87Zm9udC1zaXplOjEycHg7Y29sb3I6IzAwNzNhYTt0ZXh0LWRlY29yYXRpb246bm9uZSI+4pqZ77iPIENvbmZpZ3VyYcOnw7VlcyDihpI8L2E+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0g4pSA4pSAIFBvciBEYXRhIGRvIEV2ZW50byAocHJpb3JpZGFkZSAxLTMpIOKUgOKUgCAtLT4KICAgICAgICA8P3BocCAkYmRfaGRyX2hvamUgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMgV0hFUkUgbW9kdWxlIExJS0UgJ2J5ZGF0ZSUnIEFORCBEQVRFKHNlbnRfYXQpID0gQ1VSREFURSgpIik7ID8+CiAgICAgICAgPGRldGFpbHMgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICA8c3VtbWFyeSBzdHlsZT0icGFkZGluZzoxMHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4O2xpc3Qtc3R5bGU6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTBweCI+CiAgICAgICAgICAgIDxzcGFuPvCfk4UgUG9yIERhdGEgZG8gRXZlbnRvPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZTBlMGUwO2NvbG9yOiM1NzYwNmE7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MTBweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDAiPlByaW9yaWRhZGUgMeKAkzM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNlM2YyZmQ7Y29sb3I6IzBkNDdhMTtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjExcHgiPvCfk6QgPD9waHAgZWNobyAkYmRfaGRyX2hvamU7ID8+IGhvamU8L3NwYW4+CiAgICAgICAgICAgIDw/cGhwIGVjaG8gJGJkX2tpbGwgPT09ICcxJyA/ICc8c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6YXV0byIgY2xhc3M9InZtMi1rcy1vbiI+8J+UtCBQQVVTQURPPC9zcGFuPicgOiAnPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG8iIGNsYXNzPSJ2bTIta3Mtb2ZmIj7wn5+iIEFUSVZPPC9zcGFuPic7ID8+CiAgICAgICAgPC9zdW1tYXJ5PgogICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6MTRweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTBlMGUwIj4KCiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWN0cmwtYmFyIj4KICAgICAgICAgICAgPGxhYmVsPjxzdHJvbmc+8J+ThSBQb3IgRGF0YSBkbyBFdmVudG88L3N0cm9uZz48L2xhYmVsPgogICAgICAgICAgICA8bGFiZWw+S2lsbCBTd2l0Y2g6CiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtMl9ieWRhdGVfa2lsbCI+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMSIgPD9waHAgc2VsZWN0ZWQoJGJkX2tpbGwsJzEnKTsgPz4+8J+UtCBQQVJBRE88L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIiA8P3BocCBzZWxlY3RlZCgkYmRfa2lsbCwnMCcpOyA/Pj7wn5+iIEFUSVZPPC9vcHRpb24+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPGxhYmVsPkNhbmFsOgogICAgICAgICAgICAgICAgPHNlbGVjdCBpZD0idm0yLWJkLWNoLXNlbCIgbmFtZT0idm0yX2J5ZGF0ZV9jaGFubmVsIiBvbmNoYW5nZT0idm0yU3RlcENoYW5uZWxTd2l0Y2goJ2JkJywgdGhpcy52YWx1ZSkiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gdm0yX2NoYW5uZWxfb3B0aW9uc19odG1sKCAkYmRfY2ggKTsgPz4KICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8P3BocCBlY2hvICRiZF9raWxsID09PSAnMScgPyAnPHNwYW4gY2xhc3M9InZtMi1rcy1vbiI+8J+UtCBQQVVTQURPPC9zcGFuPicgOiAnPHNwYW4gY2xhc3M9InZtMi1rcy1vZmYiPvCfn6IgQVRJVk88L3NwYW4+JzsgPz4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPD9waHAKICAgICAgICAvLyBbdjEuNS4xNjZdIEVudmlhZG9zIGhvamUgcG9yIHJhbmdlIOKAlCBiYWRnZSBwb3IgY2FyZAogICAgICAgICRiZF9zZW50X3RvZGF5ID0gW107CiAgICAgICAgZm9yZWFjaCAoIGFycmF5X2tleXMoJGJkX2dyb3VwcykgYXMgJGdrICkgewogICAgICAgICAgICAkYmRfc2VudF90b2RheVskZ2tdID0gKGludCkkd3BkYi0+Z2V0X3ZhciggJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICAgICAiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzIFdIRVJFIG1vZHVsZSA9ICVzIEFORCBEQVRFKHNlbnRfYXQpID0gQ1VSREFURSgpIiwKICAgICAgICAgICAgICAgICdieWRhdGVfJyAuICRnawogICAgICAgICAgICApKTsKICAgICAgICB9CiAgICAgICAgPz4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItYmQtZ3JpZCIgaWQ9InZtMi1iZC1ncm91cHMiPgogICAgICAgIDw/cGhwIGZvcmVhY2ggKCRiZF9ncm91cHMgYXMgJGdrZXkgPT4gJGcpOgogICAgICAgICAgICAkZ19vbiAgICA9IGdldF9vcHRpb24oInZtMl9ieWRhdGVfeyRna2V5fV9vbiIsICcwJyk7CiAgICAgICAgICAgICRnX3RtcGwgID0gZ2V0X29wdGlvbigidm0yX2J5ZGF0ZV97JGdrZXl9X3RlbXBsYXRlIiwgJGdbJ3RtcGwnXSk7CiAgICAgICAgICAgICRnX21zZyAgID0gZ2V0X29wdGlvbigidm0yX2J5ZGF0ZV97JGdrZXl9X21zZyIsICJPaSB7bm9tZX0hIPCfjokgU3VhIGZlc3RhIGVzdMOhIGNoZWdhbmRvISBQcmVjaXNhbmRvIGRlIG1haXMgYWxndW0gc2VydmnDp28/Iik7CiAgICAgICAgICAgICRjbnQgICAgID0gJGJkX2NvdW50c1skZ2tleV07CiAgICAgICAgICAgICRzZW50X2hqID0gJGJkX3NlbnRfdG9kYXlbJGdrZXldID8/IDA7CiAgICAgICAgICAgIC8vIFVSTCBmaWx0cmFkYSBwYXJhIGEgYWJhIGRlIGNvbnRhdG9zIGRlc3RlIHJhbmdlCiAgICAgICAgICAgIGlmICgkZ1snZGYnXSA8PSAtMSkgeyAvLyBwYXNzYWRvCiAgICAgICAgICAgICAgICAkZ19kZl9zdHIgPSBkYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgnLTEwIHllYXJzJykpOwogICAgICAgICAgICAgICAgJGdfZHRfc3RyID0gZGF0ZSgnWS1tLWQnLCBzdHJ0b3RpbWUoJy0xIGRheXMnKSk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkZ1snZHQnXSA+PSA5OTk5KSB7IC8vIGRlcG9pcwogICAgICAgICAgICAgICAgJGdfZGZfc3RyID0gZGF0ZSgnWS1tLWQnLCBzdHJ0b3RpbWUoJysxODEgZGF5cycpKTsKICAgICAgICAgICAgICAgICRnX2R0X3N0ciA9IGRhdGUoJ1ktbS1kJywgc3RydG90aW1lKCcrMTAgeWVhcnMnKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkZ19kZl9zdHIgPSBkYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgiK3skZ1snZGYnXX0gZGF5cyIpKTsKICAgICAgICAgICAgICAgICRnX2R0X3N0ciA9IGRhdGUoJ1ktbS1kJywgc3RydG90aW1lKCIreyRnWydkdCddfSBkYXlzIikpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRnX2xlYWRzX3VybCA9IGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLWNvbnRhY3RzJmRmPScgLiAkZ19kZl9zdHIgLiAnJmR0PScgLiAkZ19kdF9zdHIgLiAnJnNvcnQ9ZXZlbnRvJyk7CiAgICAgICAgPz4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItYmQtY2FyZCIgc3R5bGU9ImJvcmRlci1sZWZ0LWNvbG9yOjw/cGhwIGVjaG8gJGdbJ2NvbG9yJ107ID8+Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLWJkLWxibCI+CiAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRnWydsYWJlbCddOyA/PgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDAiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idm0yX2J5ZGF0ZV88P3BocCBlY2hvICRna2V5OyA/Pl9vbiIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJGdfb24sJzEnKTsgPz4+CiAgICAgICAgICAgICAgICAgICAgQXRpdm8KICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGdfbGVhZHNfdXJsKTsgPz4iIHRpdGxlPSJWZXIgbGVhZHMgZGVzdGUgcGVyw61vZG8iIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItYmQtbiIgc3R5bGU9ImNvbG9yOjw/cGhwIGVjaG8gJGdbJ2NvbG9yJ107ID8+Ij48P3BocCBlY2hvICRjbnQ7ID8+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNTc2MDZhO21hcmdpbi1ib3R0b206NnB4Ij5sZWFkcyBjb20gZGF0YSBuZXN0ZSBwZXLDrW9kbyA8P3BocCBpZiAoJGNudCA+IDApOiA/PjxzcGFuIHN0eWxlPSJjb2xvcjo8P3BocCBlY2hvICRnWydjb2xvciddOyA/PiI+4oaSIHZlcjwvc3Bhbj48P3BocCBlbmRpZjsgPz48L2Rpdj4KICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8P3BocCBpZiAoJHNlbnRfaGogPiAwKTogPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4Ij4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNkMWZhZTU7Y29sb3I6IzA2NWY0NjtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5OkIDw/cGhwIGVjaG8gJHNlbnRfaGo7ID8+IGVudmlhZG88P3BocCBlY2hvICRzZW50X2hqID4gMSA/ICdzJyA6ICcnOyA/PiBob2plPC9zcGFuPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRnX2xlYWRzX3VybCk7ID8+IiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzAwNzlkMzt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdodDo2MDAiPlZlciBsaXN0YSDihpI8L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLWNvbC13YWJhIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1mbGQtbGJsIj5UZW1wbGF0ZSBXQUJBPC9zcGFuPgogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfYnlkYXRlXzw/cGhwIGVjaG8gJGdrZXk7ID8+X3RlbXBsYXRlIiBzdHlsZT0id2lkdGg6MTAwJTtmb250LXNpemU6MTJweCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHdhYmFfdHBscyBhcyAkdHYgPT4gJHRsKTogPz4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCR0dik7ID8+IiA8P3BocCBzZWxlY3RlZCgkZ190bXBsLCR0dik7ID8+Pjw/cGhwIGVjaG8gZXNjX2h0bWwoJHRsKTsgPz48L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY29sLXphcGkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1mbGQtbGJsIj5UZXh0byBaLUFQSTwvc3Bhbj4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ2bTJfYnlkYXRlXzw/cGhwIGVjaG8gJGdrZXk7ID8+X21zZyIgc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjU0cHg7cmVzaXplOnZlcnRpY2FsO2ZvbnQtc2l6ZToxMnB4Ij48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgkZ19tc2cpOyA/PjwvdGV4dGFyZWE+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDw/cGhwIHZtMl9yZW5kZXJfdGVzdF9ib3goICdieWRhdGUnLCAkYmRfY2gsIGdldF9vcHRpb24oJ3ZtMl9ieWRhdGVfc2VtYW5hX21zZycsICdPaSB7bm9tZX0hIPCfjokgU3VhIGZlc3RhIGVzdMOhIGNoZWdhbmRvISBQcmVjaXNhbmRvIGRlIG1haXMgYWxndW0gc2VydmnDp28/JyksIGdldF9vcHRpb24oJ3ZtMl9ieWRhdGVfc2VtYW5hX3RlbXBsYXRlJywnJykgKTsgPz4KICAgICAgICA8IS0tIFt2MS41Ljk1XSBFTUFJTCBQQVJBTEVMTyBQT1IgREFUQSAtLT4KICAgICAgICA8P3BocAogICAgICAgICRiZF9lbWFpbF9vbiAgID0gZ2V0X29wdGlvbigndm0yX2J5ZGF0ZV9lbWFpbF9vbicsICcwJyk7CiAgICAgICAgJGJkX2VtYWlsX3N1YmogPSBnZXRfb3B0aW9uKCd2bTJfYnlkYXRlX2VtYWlsX3N1YmplY3QnLCAnU3VhIGZlc3RhIGVzdMOhIGNoZWdhbmRvISBWYW1vcyBmZWNoYXIgYXMgYXRyYcOnw7Vlcz8g8J+OiScpOwogICAgICAgICRiZF9lbWFpbF9ib2R5ID0gZ2V0X29wdGlvbigndm0yX2J5ZGF0ZV9lbWFpbF9ib2R5JywgIk9pIHtub21lfSFcblxuU3VhIGZlc3RhIGVzdMOhIHNlIGFwcm94aW1hbmRvIGUgYWluZGEgZMOhIHRlbXBvIGRlIGdhcmFudGlyIGF0cmHDp8O1ZXMgaW5jcsOtdmVpcyFcblxuQWNlc3NlIGFnb3JhIGUgY29udHJhdGUgZW0gbWludXRvczpcbmh0dHBzOi8vbG9qYS52aXZhbWFpc2V2ZW50b3MuY29tXG5cbl9FcXVpcGUgVml2YU1haXMgRXZlbnRvc18iKTsKICAgICAgICAkYmRfZW1haWxfY250ICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9jb250YWN0cyBXSEVSRSBlbWFpbCAhPSAnJyBBTkQgZW1haWwgSVMgTk9UIE5VTEwiKTsKICAgICAgICA/PgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2YwZjlmZjtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTZweCAxOHB4O21hcmdpbi10b3A6MTZweCI+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O2NvbG9yOiMxZTQwYWYiPvCfk6cgQ2FuYWwgRW1haWwg4oCUIFBhcmFsZWxvIGFvIFdBPC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZGJlYWZlO2NvbG9yOiMxZTQwYWY7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwIj48P3BocCBlY2hvICRiZF9lbWFpbF9jbnQ7ID8+IGNvbnRhdG9zIGNvbSBlbWFpbDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNjQ3NDhiO21hcmdpbjowIDAgMTRweCI+CiAgICAgICAgICAgICAgICBRdWFuZG8gYXRpdm8sIGVudmlhIGVtYWlsIGVtIHBhcmFsZWxvIGFvIFdBIHBhcmEgY29udGF0b3MgcXVlIHTDqm0gZW1haWwgY2FkYXN0cmFkby4KICAgICAgICAgICAgICAgIFZhcnMgZGlzcG9uw612ZWlzOiA8Y29kZT57bm9tZX08L2NvZGU+LCA8Y29kZT57bGlua308L2NvZGU+CiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHgiPlN0YXR1czo8L2xhYmVsPgogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfYnlkYXRlX2VtYWlsX29uIiBzdHlsZT0icGFkZGluZzo2cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMGQ3ZGU7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiIDw/cGhwIHNlbGVjdGVkKCRiZF9lbWFpbF9vbiwnMCcpOyA/Pj7wn5S0IERlc2F0aXZhZG88L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxIiA8P3BocCBzZWxlY3RlZCgkYmRfZW1haWxfb24sJzEnKTsgPz4+8J+foiBBdGl2bzwvb3B0aW9uPgogICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjEycHgiPgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+8J+TnSBBc3N1bnRvPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ2bTJfYnlkYXRlX2VtYWlsX3N1YmplY3QiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRiZF9lbWFpbF9zdWJqKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkN2RlO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5KsIENvcnBvIGRvIGVtYWlsPC9sYWJlbD4KICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ2bTJfYnlkYXRlX2VtYWlsX2JvZHkiIHJvd3M9IjYiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDBkN2RlO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtyZXNpemU6dmVydGljYWwiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRiZF9lbWFpbF9ib2R5KTsgPz48L3RleHRhcmVhPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8P3BocCBlY2hvIHZtMl9yZW5kZXJfbWluaV9sb2coIFsnYnlkYXRlJywnYnlkYXRlX2dpZnQnLCdieWRhdGVfdXJnZW5jaWEnXSwgMTUsICfwn5OLIExvZyBQb3IgRGF0YSBkbyBFdmVudG8nICk7ID8+CiAgICAgICAgPC9kaXY+PCEtLSAvYnlkYXRlIGRldGFpbHMgY29udGVudCAtLT4KICAgICAgICA8L2RldGFpbHM+PCEtLSAvYnlkYXRlIC0tPgoKICAgIDwvZGl2PjwhLS0gL2J5ZGF0ZSB0YWIgLS0+CgogICAgPCEtLSA9PT09PSBUQUI6IENBUlJJTkhPID09PT09IC0tPgogICAgPGRpdiBjbGFzcz0idm0yLXRhYi1ib2R5IDw/cGhwIGVjaG8gJGFjdGl2ZV90YWIgPT09ICdjYXJyaW5obycgPyAnYWN0aXZlJyA6ICcnOyA/PiI+CgogICAgICAgIDwhLS0gQW50aS1zcGFtIGJhciBjb21wYWN0YSAtLT4KICAgICAgICA8P3BocAogICAgICAgICRfdm0yX3RvZGF5ID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzIFdIRVJFIERBVEUoc2VudF9hdCkgPSBDVVJEQVRFKCkiKTsKICAgICAgICAkX3ZtMl9jYXAgICA9IChpbnQpZ2V0X29wdGlvbigndm0yX2dsb2JhbF9kYWlseV9saW1pdCcsIDEwMCk7CiAgICAgICAgJF92bTJfa2lsbCAgPSBnZXRfb3B0aW9uKCd2bTJfa2lsbF9zd2l0Y2gnLCAnMCcpOwogICAgICAgICRiYXJfYmcgICAgID0gJF92bTJfa2lsbCA9PT0gJzEnID8gJyNmZWYyZjInIDogJyNmMGZkZjQnOwogICAgICAgICRiYXJfYmQgICAgID0gJF92bTJfa2lsbCA9PT0gJzEnID8gJyNmY2E1YTUnIDogJyM4NmVmYWMnOwogICAgICAgID8+CiAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDo8P3BocCBlY2hvICRiYXJfYmc7ID8+O2JvcmRlcjoxcHggc29saWQgPD9waHAgZWNobyAkYmFyX2JkOyA/Pjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxMHB4IDE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXA7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwIj48P3BocCBlY2hvICRfdm0yX2tpbGw9PT0nMSc/J/CflLQgS0lMTCBTV0lUQ0ggR0xPQkFMJzon8J+foiBBcXVlY2ltZW50byBPcGVyYWNpb25hbCc7ID8+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzU3NjA2YSI+8J+TiiBIb2plOiA8c3Ryb25nPjw/cGhwIGVjaG8gJF92bTJfdG9kYXk7ID8+PC9zdHJvbmc+Lzw/cGhwIGVjaG8gKCRfdm0yX2NhcCA/OiAn4oieJyk7ID8+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzU3NjA2YSI+4o+x77iPIENvb2xkb3duOiA8P3BocCBlY2hvIChpbnQpZ2V0X29wdGlvbigndm0yX2Nvb2xkb3duX2hvdXJzJywyNCk7ID8+aDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM1NzYwNmEiPvCfk6YgQmF0Y2g6IDw/cGhwIGVjaG8gKGludClnZXRfb3B0aW9uKCd2bTJfYmF0Y2hfc2l6ZScsMTApOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM1NzYwNmEiPvCfjJkgU2lsw6puY2lvOiA8P3BocCBlY2hvIChpbnQpZ2V0X29wdGlvbigndm0yX3F1aWV0X3N0YXJ0JywyMCk7ID8+aOKAkzw/cGhwIGVjaG8gKGludClnZXRfb3B0aW9uKCd2bTJfcXVpZXRfZW5kJyw4KTsgPz5oPC9zcGFuPgogICAgICAgICAgICA8P3BocCBpZiAoIHZtMl9pc19xdWlldF90aW1lKCkgKTogPz48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZmVmM2M3O2NvbG9yOiM5MjQwMGU7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MTBweDtmb250LXdlaWdodDo3MDAiPvCfjJkgU2lsw6puY2lvIGF0aXZvPC9zcGFuPjw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLXNldHRpbmdzJyk7ID8+IiBzdHlsZT0ibWFyZ2luLWxlZnQ6YXV0bztmb250LXNpemU6MTJweDtjb2xvcjojMDA3M2FhO3RleHQtZGVjb3JhdGlvbjpub25lIj7impnvuI8gQ29uZmlndXJhw6fDtWVzIOKGkjwvYT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSDilIDilIAgQ2FycmluaG8gQWJhbmRvbmFkbyAocHJpb3JpZGFkZSAwKSDilIDilIAgLS0+CiAgICAgICAgPD9waHAgJGNhcnRfa2lsbF9oZHIgPSAoYm9vbClnZXRfb3B0aW9uKCd2bV93YV9raWxsX3N3aXRjaCcsIDApOyA/PgogICAgICAgIDxkZXRhaWxzIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgPHN1bW1hcnkgc3R5bGU9InBhZGRpbmc6MTBweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDtsaXN0LXN0eWxlOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHgiPgogICAgICAgICAgICA8c3Bhbj7wn5uSIENhcnJpbmhvIEFiYW5kb25hZG88L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNlMGUwZTA7Y29sb3I6IzU3NjA2YTtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxMXB4Ij5QcmlvcmlkYWRlIDA8L3NwYW4+CiAgICAgICAgICAgIDw/cGhwIGVjaG8gJGNhcnRfa2lsbF9oZHIgPyAnPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG8iIGNsYXNzPSJ2bTIta3Mtb24iPvCflLQgUEFVU0FETzwvc3Bhbj4nIDogJzxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDphdXRvIiBjbGFzcz0idm0yLWtzLW9mZiI+8J+foiBBVElWTzwvc3Bhbj4nOyA/PgogICAgICAgIDwvc3VtbWFyeT4KICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOjE0cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2UwZTBlMCI+CiAgICAgICAgPD9waHAgdm0yX3JlbmRlcl9jYXJyaW5ob190YWIoKTsgPz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8L2RldGFpbHM+CgogICAgICAgIDwhLS0g4pSA4pSAIExvZyBkZSBFbnZpb3MgKyBTaXN0ZW1hIOKUgOKUgCAtLT4KICAgICAgICA8P3BocAogICAgICAgICRyZWNlbnRfc2VuZHMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgICAgICJTRUxFQ1QgcGhvbmUsIG1vZHVsZSwgY2hhbm5lbF9rZXksIHNlbnRfYXQKICAgICAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzCiAgICAgICAgICAgICBPUkRFUiBCWSBzZW50X2F0IERFU0MKICAgICAgICAgICAgIExJTUlUIDIwIgogICAgICAgICk7CiAgICAgICAgJHJlY2VudF9sb2dzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICAgICAiU0VMRUNUIGxldmVsLCBtZXNzYWdlLCBjcmVhdGVkX2F0CiAgICAgICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9sb2dfZW50cmllcwogICAgICAgICAgICAgT1JERVIgQlkgaWQgREVTQwogICAgICAgICAgICAgTElNSVQgNTAiCiAgICAgICAgKTsKICAgICAgICAkYXFfbm9uY2VfcnVuID0gd3BfY3JlYXRlX25vbmNlKCd2bTJfYWRtaW5fbm9uY2UnKTsKICAgICAgICA/PgogICAgICAgIDxkZXRhaWxzIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgPHN1bW1hcnkgc3R5bGU9InBhZGRpbmc6MTBweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDtsaXN0LXN0eWxlOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEwcHgiPgogICAgICAgICAgICA8c3Bhbj7wn5OLIExvZyBkZSBFbnZpb3MgJmFtcDsgU2lzdGVtYTwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2UwZTBlMDtjb2xvcjojNTc2MDZhO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjExcHgiPjw/cGhwIGVjaG8gY291bnQoJHJlY2VudF9zZW5kcyk7ID8+IGVudmlvczwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG8iPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJ2bTItcnVuLW5vdy1idG4iIGNsYXNzPSJidXR0b24iIHN0eWxlPSJmb250LXNpemU6MTJweDtwYWRkaW5nOjJweCAxMnB4Ij7imqEgRGlzcGFyYXIgQWdvcmE8L2J1dHRvbj4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3VtbWFyeT4KICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOjE0cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2UwZTBlMCI+CgogICAgICAgIDwhLS0gdGFicyBlbnZpb3Mvc2lzdGVtYSAtLT4KICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXJnaW4tYm90dG9tOjEycHgiPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InZtMi1sb2ctdGFiIGJ1dHRvbiBidXR0b24tcHJpbWFyeSIgZGF0YS10YWI9ImVudmlvcyIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij7wn5OoIEVudmlvcyAoPD9waHAgZWNobyBjb3VudCgkcmVjZW50X3NlbmRzKTsgPz4pPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idm0yLWxvZy10YWIgYnV0dG9uIiBkYXRhLXRhYj0ic2lzdGVtYSIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij7wn5ugIFNpc3RlbWEgKDw/cGhwIGVjaG8gY291bnQoJHJlY2VudF9sb2dzKTsgPz4pPC9idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gdGFiOiBlbnZpb3MgLS0+CiAgICAgICAgPGRpdiBpZD0idm0yLWxvZ3RhYi1lbnZpb3MiPgogICAgICAgIDw/cGhwIGlmICggZW1wdHkoJHJlY2VudF9zZW5kcykgKTogPz4KICAgICAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiM4ODg7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoyMHB4Ij5OZW5odW0gZW52aW8gcmVnaXN0cmFkbyBhaW5kYS48YnI+PHNtYWxsPkNsaXF1ZSBlbSAi4pqhIERpc3BhcmFyIEFnb3JhIiBwYXJhIHRlc3RhciBvIHJ1bm5lci48L3NtYWxsPjwvcD4KICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgICAgICA8dGFibGUgY2xhc3M9InZtMi10YWJsZSI+CiAgICAgICAgICAgIDx0aGVhZD48dHI+PHRoPvCflZAgRGF0YS9Ib3JhPC90aD48dGg+8J+TsSBUZWxlZm9uZTwvdGg+PHRoPvCfk6YgTcOzZHVsbzwvdGg+PHRoPvCfk6EgQ2FuYWw8L3RoPjwvdHI+PC90aGVhZD4KICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkcmVjZW50X3NlbmRzIGFzICRzKToKICAgICAgICAgICAgICAgICRtb2R1bGVfbGFiZWxzID0gWwogICAgICAgICAgICAgICAgICAgICdhcXVlY2VyJyA9PiAn8J+UpSBDYWTDqm5jaWEnLCAnaG90JyA9PiAn8J+OryBIT1QnLCAnYnlkYXRlJyA9PiAn8J+ThSBEYXRhJywKICAgICAgICAgICAgICAgICAgICAnYXF1ZWNlcl9lbWFpbCcgPT4gJ/Cfk6cgQ2Fkw6puY2lhJywgJ2hvdF9lbWFpbCcgPT4gJ/Cfk6cgSE9UJywgJ2J5ZGF0ZV9lbWFpbCcgPT4gJ/Cfk6cgRGF0YScsCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgJG1fbGFiZWwgID0gJG1vZHVsZV9sYWJlbHNbJHMtPm1vZHVsZV0gPz8gJHMtPm1vZHVsZTsKICAgICAgICAgICAgICAgICRjaF9sYWJlbCA9ICh2bTJfY2hhbm5lbF9sYWJlbHMoKSlbJHMtPmNoYW5uZWxfa2V5XSA/PyAkcy0+Y2hhbm5lbF9rZXk7CiAgICAgICAgICAgID8+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzU3NjA2YTt3aGl0ZS1zcGFjZTpub3dyYXAiPjw/cGhwIGVjaG8gZXNjX2h0bWwoIHZtMl9sb2NhbF9kYXRlKCdkL20gSDppJywgJHMtPnNlbnRfYXQpICk7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxMnB4Ij48P3BocCBlY2hvIGVzY19odG1sKCRzLT5waG9uZSk7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGVzY19odG1sKCRtX2xhYmVsKTsgPz48L3RkPgogICAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGNoX2xhYmVsKTsgPz48L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIHRhYjogc2lzdGVtYSAtLT4KICAgICAgICA8ZGl2IGlkPSJ2bTItbG9ndGFiLXNpc3RlbWEiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogICAgICAgIDw/cGhwIGlmICggZW1wdHkoJHJlY2VudF9sb2dzKSApOiA/PgogICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6Izg4ODt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjIwcHgiPk5lbmh1bSBsb2cgcmVnaXN0cmFkbyBhaW5kYS4gQ2xpcXVlIGVtICLimqEgRGlzcGFyYXIgQWdvcmEiLjwvcD4KICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgICAgICA8dGFibGUgY2xhc3M9InZtMi10YWJsZSIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij4KICAgICAgICAgICAgPHRoZWFkPjx0cj48dGg+8J+TiiBOw612ZWw8L3RoPjx0aD7wn5KsIE1lbnNhZ2VtPC90aD48dGg+8J+VkCBIb3JhPC90aD48L3RyPjwvdGhlYWQ+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHJlY2VudF9sb2dzIGFzICRsZyk6CiAgICAgICAgICAgICAgICAkbHZsX2NvbG9yID0gJGxnLT5sZXZlbCA9PT0gJ2Vycm9yJyA/ICcjYzAzOTJiJyA6ICgkbGctPmxldmVsID09PSAnd2FybmluZycgPyAnI2U2N2UyMicgOiAnIzI3YWU2MCcpOwogICAgICAgICAgICA/PgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PHNwYW4gc3R5bGU9ImNvbG9yOjw/cGhwIGVjaG8gJGx2bF9jb2xvcjs/Pjtmb250LXdlaWdodDo2MDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlIj48P3BocCBlY2hvIGVzY19odG1sKCRsZy0+bGV2ZWwpOyA/Pjwvc3Bhbj48L3RkPgogICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7d29yZC1icmVhazpicmVhay1hbGwiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGxnLT5tZXNzYWdlKTsgPz48L3RkPgogICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJjb2xvcjojNTc2MDZhO3doaXRlLXNwYWNlOm5vd3JhcCI+PD9waHAgZWNobyBlc2NfaHRtbCggdm0yX2xvY2FsX2RhdGUoJ2QvbSBIOmk6cycsICRsZy0+Y3JlYXRlZF9hdCkgKTsgPz48L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8L2Rpdj4KICAgICAgICA8L2RldGFpbHM+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAoZnVuY3Rpb24oKXsKICAgICAgICAgICAgLy8gbG9nIHRhYnMKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1sb2ctdGFiJykuZm9yRWFjaChmdW5jdGlvbihidG4pewogICAgICAgICAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudm0yLWxvZy10YWInKS5mb3JFYWNoKGZ1bmN0aW9uKGIpeyBiLmNsYXNzTGlzdC5yZW1vdmUoJ2J1dHRvbi1wcmltYXJ5Jyk7IH0pOwogICAgICAgICAgICAgICAgICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdidXR0b24tcHJpbWFyeScpOwogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItbG9ndGFiLWVudmlvcycpLnN0eWxlLmRpc3BsYXkgPSBidG4uZGF0YXNldC50YWIgPT09ICdlbnZpb3MnID8gJycgOiAnbm9uZSc7CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1sb2d0YWItc2lzdGVtYScpLnN0eWxlLmRpc3BsYXkgPSBidG4uZGF0YXNldC50YWIgPT09ICdzaXN0ZW1hJyA/ICcnIDogJ25vbmUnOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAvLyBkaXNwYXJhciBhZ29yYQogICAgICAgICAgICB2YXIgcnVuQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1ydW4tbm93LWJ0bicpOwogICAgICAgICAgICBpZiAocnVuQnRuKSB7CiAgICAgICAgICAgICAgICBydW5CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgICAgIHJ1bkJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgcnVuQnRuLnRleHRDb250ZW50ID0gJ+KPsyBFeGVjdXRhbmRvLi4uJzsKICAgICAgICAgICAgICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgICAgICAgICBmZC5hcHBlbmQoJ2FjdGlvbicsICd2bTJfcnVuX3dhcm11cF9ub3cnKTsKICAgICAgICAgICAgICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgJzw/cGhwIGVjaG8gJGFxX25vbmNlX3J1bjsgPz4nKTsKICAgICAgICAgICAgICAgICAgICBmZXRjaChhamF4dXJsLCB7bWV0aG9kOidQT1NUJywgYm9keTpmZH0pCiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGQpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuQnRuLnRleHRDb250ZW50ID0gZC5zdWNjZXNzID8gJ+KchSBFeGVjdXRhZG8hJyA6ICfinYwgRXJybyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGxvY2F0aW9uLnJlbG9hZCgpOyB9LCAxNTAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7IHJ1bkJ0bi50ZXh0Q29udGVudCA9ICfinYwgRXJybyc7IHJ1bkJ0bi5kaXNhYmxlZCA9IGZhbHNlOyB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSkoKTsKICAgICAgICA8L3NjcmlwdD4KCiAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDttYXJnaW4tdG9wOjEycHgiPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSIgc3R5bGU9InBhZGRpbmc6OHB4IDI0cHgiPvCfkr4gU2FsdmFyIFRvZGFzIGFzIENvbmZpZ3VyYcOnw7VlczwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+PCEtLSAvY2FycmluaG8gdGFiIC0tPgoKICAgIDwhLS0gPT09PT0gVEFCOiBQT1BVUCA9PT09PSAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi10YWItYm9keSA8P3BocCBlY2hvICRhY3RpdmVfdGFiID09PSAncG9wdXAnID8gJ2FjdGl2ZScgOiAnJzsgPz4iPgogICAgPD9waHAKICAgICRwcF9kZWZhdWx0cyA9IFsKICAgICAgICAna2lsbF9zd2l0Y2gnICA9PiAwLAogICAgICAgICdhc2tfZW1haWwnICAgID0+IDAsCiAgICAgICAgJ2Jhbm5lcl90b3BvJyAgPT4gJ/CflKUgVkFHQVMgTElNSVRBREFTIFBBUkEgRVNUQSBEQVRBJywKICAgICAgICAndGl0dWxvJyAgICAgICA9PiAnR2FyYW50YSBzdWEgZGF0YSBhbnRlcyBxdWUgYWNhYmUhIPCfjoknLAogICAgICAgICdzdWJ0aXR1bG8nICAgID0+ICdJbmZvcm1lIHNldSBXaGF0c0FwcCBwYXJhIGNvbnRpbnVhcicsCiAgICAgICAgJ3VyZ2VuY2lhJyAgICAgPT4gJ/CfkYAgasOhIHRlbSBnZW50ZSBkZSBvbGhvIG5lc3NhIGRhdGEnLAogICAgICAgICdjdGFfdGV4dCcgICAgID0+ICfwn5SSIEdhcmFudGlyIG1pbmhhIGRhdGEg4oaSJywKICAgICAgICAnZGVsYXlfc2VjJyAgICA9PiA1LAogICAgICAgICdzaG93X29uJyAgICAgID0+ICdwcm9kdXRvJywKICAgICAgICAnc2Vzc2lvbl9leHBpcnlfaG91cnMnID0+IDI0LAogICAgXTsKICAgICRwcF9zYXZlZCA9IGdldF9vcHRpb24oJ3ZtMl9wb3B1cF9jb25maWcnLCBbXSk7CiAgICBpZiAoIWlzX2FycmF5KCRwcF9zYXZlZCkpICRwcF9zYXZlZCA9IFtdOwogICAgJHBwID0gYXJyYXlfbWVyZ2UoJHBwX2RlZmF1bHRzLCAkcHBfc2F2ZWQpOwogICAgJHBwX2tzICAgID0gIWVtcHR5KCRwcFsna2lsbF9zd2l0Y2gnXSk7CiAgICAkcHBfbm9uY2UgPSB3cF9jcmVhdGVfbm9uY2UoJ3ZtMl9wb3B1cF9zYXZlJyk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkcHBfdG90YWwgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bV93YV9jYXB0dXJlcyBXSEVSRSBzdGF0dXMgSU4gKCdzZW50JywnYm91Z2h0JykiKTsKICAgICRwcF9zaG93cyA9IChpbnQpZ2V0X29wdGlvbigndm0yX3BvcHVwX3N0YXRfc2hvd3MnLCAwKTsKICAgICRwcF9jb252ICA9IChpbnQpZ2V0X29wdGlvbigndm0yX3BvcHVwX3N0YXRfY29udmVyc2lvbnMnLCAwKTsKICAgIC8vIENvbnZlcnPDo28gdXNhIGNvbnRhZG9yZXMgcmVjZW50ZXMgKHNob3dzICsgY29udmVyc2lvbnMgcmFzdHJlYWRvcyBkZXNkZSB2MS4xLjIvdjEuMS4zKQogICAgaWYgKCAkcHBfc2hvd3MgPD0gMCApIHsKICAgICAgICAkcHBfcmF0ZSA9IG51bGw7CiAgICB9IGVsc2UgewogICAgICAgICRwcF9yYXRlID0gcm91bmQoJHBwX2NvbnYgLyAkcHBfc2hvd3MgKiAxMDAsIDEpOwogICAgfQogICAgPz4KCiAgICA8IS0tIEtQSSBjYXJkcyAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1rcGlzIiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMTQwcHgsMWZyKSk7bWFyZ2luLWJvdHRvbToyMHB4Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6NHB4IHNvbGlkICM2NjdlZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+Rge+4jyBFeGliacOnw7VlczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSI+PD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRwcF9zaG93cyk7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPnBvcHVwcyBtb3N0cmFkb3M8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6NHB4IHNvbGlkICMyN2FlNjAiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+TsSBDYWRhc3Ryb3M8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiIHN0eWxlPSJjb2xvcjojMjdhZTYwIj48P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJHBwX3RvdGFsKTsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgbmV1dHJhbCI+V2hhdHNBcHBzIGNhcHR1cmFkb3M8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6NHB4IHNvbGlkICNmMzljMTIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+TiiBDb252ZXJzw6NvPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIiBzdHlsZT0iY29sb3I6Izw/cGhwIGVjaG8gJHBwX3JhdGUgIT09IG51bGwgPyAnZjM5YzEyJyA6ICc5OTknOyA/PiI+PD9waHAgZWNobyAkcHBfcmF0ZSAhPT0gbnVsbCA/ICRwcF9yYXRlIC4gJyUnIDogJ+KAlCc7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPjw/cGhwIGVjaG8gJHBwX3JhdGUgIT09IG51bGwgPyAkcHBfY29udiAuICcgY29udmVyc8O1ZXMgLyAnIC4gJHBwX3Nob3dzIC4gJyBleGliacOnw7VlcycgOiAnYWd1YXJkYW5kbyBleGliacOnw7Vlcy4uLic7ID8+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgc3R5bGU9ImJvcmRlci1sZWZ0OjRweCBzb2xpZCAjPD9waHAgZWNobyAkcHBfa3MgPyAnZGMzNTQ1JyA6ICcyN2FlNjAnOyA/PiIKICAgICAgICAgICAgIG9uY2xpY2s9InZhciBjYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yUHBLcycpO2NiLmNoZWNrZWQ9IWNiLmNoZWNrZWQ7dGhpcy5xdWVyeVNlbGVjdG9yKCcudmFsdWUnKS50ZXh0Q29udGVudD1jYi5jaGVja2VkPydQQVJBRE8nOidBVElWTyc7dGhpcy5xdWVyeVNlbGVjdG9yKCcudmFsdWUnKS5zdHlsZS5jb2xvcj1jYi5jaGVja2VkPycjZGMzNTQ1JzonIzI3YWU2MCc7dGhpcy5zdHlsZS5ib3JkZXJMZWZ0Q29sb3I9Y2IuY2hlY2tlZD8nI2RjMzU0NSc6JyMyN2FlNjAnOyIKICAgICAgICAgICAgIHRpdGxlPSJDbGlxdWUgcGFyYSBhbHRlcm5hciBraWxsIHN3aXRjaCIgc3R5bGU9ImN1cnNvcjpwb2ludGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPvCfm5EgU3RhdHVzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIiBzdHlsZT0iY29sb3I6Izw/cGhwIGVjaG8gJHBwX2tzID8gJ2RjMzU0NScgOiAnMjdhZTYwJzsgPz47Zm9udC1zaXplOjE2cHgiPjw/cGhwIGVjaG8gJHBwX2tzID8gJ1BBUkFETycgOiAnQVRJVk8nOyA/PjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWx0YSBuZXV0cmFsIj5jbGlxdWUgcGFyYSBhbHRlcm5hcjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idm0yLWdyaWQyIj4KICAgIDwhLS0gQ29uZmlnIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWNhcmQiIGlkPSJ2bTItcHAtY29uZmlnIj4KICAgICAgICA8aDM+4pqZ77iPIENvbmZpZ3VyYcOnw7VlcyDigJQgUG9wdXAgQ2FwdHVyYTwvaDM+CgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idm0yLWZsZC1sYmwiPvCfm5EgS2lsbCBTd2l0Y2g8L2xhYmVsPgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlciI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ2bTJQcEtzIiA8P3BocCBlY2hvICRwcF9rcyA/ICdjaGVja2VkJyA6ICcnOyA/Pj4KICAgICAgICAgICAgICAgIDxzcGFuPlBhdXNhciBleGliacOnw6NvIGRvIHBvcHVwPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMi1iYWRnZSA8P3BocCBlY2hvICRwcF9rcyA/ICdiYWRnZS1kYW5nZXInIDogJ2JhZGdlLXN1Y2Nlc3MnOyA/PiI+PD9waHAgZWNobyAkcHBfa3MgPyAnUEFSQURPJyA6ICdBVElWTyc7ID8+PC9zcGFuPgogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7wn5S0IEJhbm5lciB0b3BvIChmYWl4YSB2ZXJtZWxoYSk8L2xhYmVsPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InZtMlBwQmFubmVyIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkcHBbJ2Jhbm5lcl90b3BvJ10pOyA/PiIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7wn5OdIFTDrXR1bG8gcHJpbmNpcGFsPC9sYWJlbD4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ2bTJQcFRpdHVsbyIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHBwWyd0aXR1bG8nXSk7ID8+IiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idm0yLWZsZC1sYmwiPvCfkqwgU3VidMOtdHVsbzwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idm0yUHBTdWJ0aXR1bG8iIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRwcFsnc3VidGl0dWxvJ10pOyA/PiIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7wn5SlIFRleHRvIGRlIHVyZ8OqbmNpYSAoc29jaWFsIHByb29mKTwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idm0yUHBVcmdlbmNpYSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHBwWyd1cmdlbmNpYSddKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2bTItZmxkLWxibCI+8J+UmCBUZXh0byBkbyBib3TDo28gQ1RBPC9sYWJlbD4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ2bTJQcEN0YSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHBwWydjdGFfdGV4dCddKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxNnB4O21hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZsZXg6MTttaW4td2lkdGg6MTAwcHgiPgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2bTItZmxkLWxibCI+4o+x77iPIERlbGF5IChzZWd1bmRvcyk8L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InZtMlBwRGVsYXkiIHZhbHVlPSI8P3BocCBlY2hvIChpbnQpJHBwWydkZWxheV9zZWMnXTsgPz4iIG1pbj0iMCIgbWF4PSI2MCIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZmxleDoyO21pbi13aWR0aDoxNTBweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7wn5OEIEV4aWJpciBlbTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPSJ2bTJQcFNob3dPbiIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InByb2R1dG8iIDw/cGhwIGVjaG8gJHBwWydzaG93X29uJ109PT0ncHJvZHV0bycgPyAnc2VsZWN0ZWQnIDogJyc7ID8+PlDDoWdpbmFzIGRlIHByb2R1dG88L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ0b2RhcyIgPD9waHAgZWNobyAkcHBbJ3Nob3dfb24nXT09PSd0b2RhcycgPyAnc2VsZWN0ZWQnIDogJyc7ID8+PlRvZGFzIGFzIHDDoWdpbmFzPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaG9tZSIgPD9waHAgZWNobyAkcHBbJ3Nob3dfb24nXT09PSdob21lJyA/ICdzZWxlY3RlZCcgOiAnJzsgPz4+QXBlbmFzIGhvbWU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJjaGVja291dCIgPD9waHAgZWNobyAkcHBbJ3Nob3dfb24nXT09PSdjaGVja291dCcgPyAnc2VsZWN0ZWQnIDogJyc7ID8+PkNoZWNrb3V0PC9vcHRpb24+CiAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idm0yLWZsZC1sYmwiPvCflIEgUmV1dGlsaXphciBzZXNzw6NvIHBvciAoaG9yYXMpPC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idm0yUHBTZXNzaW9uRXhwaXJ5IiB2YWx1ZT0iPD9waHAgZWNobyAoaW50KSgkcHBbJ3Nlc3Npb25fZXhwaXJ5X2hvdXJzJ10gPz8gMjQpOyA/PiIgbWluPSIxIiBtYXg9IjcyMCIgc3R5bGU9IndpZHRoOjEwMHB4Ij4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojODg4Ij5BcMOzcyBlc3NlIHBlcsOtb2RvLCBvIHBvcHVwIHNlcsOhIGV4aWJpZG8gbm92YW1lbnRlIHBhcmEgY2FwdHVyYXIgbm92b3MgcHJvZHV0b3MgdmlzaXRhZG9zLiAocGFkcsOjbzogMjRoKTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idm0yUHBBc2tFbWFpbCIgPD9waHAgY2hlY2tlZCghZW1wdHkoJHBwWydhc2tfZW1haWwnXSkpOyA/PiBzdHlsZT0id2lkdGg6MTZweDtoZWlnaHQ6MTZweCI+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9InZtMlBwQXNrRW1haWwiIHN0eWxlPSJmb250LXNpemU6MTNweDtjdXJzb3I6cG9pbnRlciI+CiAgICAgICAgICAgICAgICDwn5OnIENhcHR1cmFyIGUtbWFpbCBhcMOzcyBXaGF0c0FwcCAoc3RlcCAyKQogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM4ODg7Zm9udC1zaXplOjExcHgiPiDigJQgcGVkZSBlLW1haWwgYXDDs3MgY2FwdHVyYXIgbyBXaGF0c0FwcDwvc3Bhbj4KICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6OHB4O3BhZGRpbmctdG9wOjEwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2UwZTBlMCI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSIgb25jbGljaz0idm0yU2F2ZVBvcHVwQ29uZmlnKCkiPvCfkr4gU2FsdmFyPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0idm0yLXBwLW1zZyIgc3R5bGU9Im1hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4Ij48L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gUHJldmlldyAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1jYXJkIj4KICAgICAgICA8aDM+8J+RgSBQcmV2aWV3IChkZXNpZ24gYXR1YWwpPC9oMz4KICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC4wNyk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjRweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWluLWhlaWdodDo0ODBweDtwb3NpdGlvbjpyZWxhdGl2ZSI+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjUpO2JvcmRlci1yYWRpdXM6MTJweDtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowIj48L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0idm0yLXBwLXByZXZpZXciIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjI7Ym9yZGVyLXJhZGl1czoxNnB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgMjBweCA2MHB4IHJnYmEoMCwwLDAsMC41KTttYXgtd2lkdGg6MzIwcHg7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsIzFhMDUzMyAwJSwjMmQxMDUyIDUwJSwjMWEwNTMzIDEwMCUpIj4KICAgICAgICAgICAgICAgIDwhLS0gQmFubmVyIHRvcG8gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJ2bTItcHAtcHJldi1iYW5uZXIiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjhweCAxMnB4O2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxMXB4O2xldHRlci1zcGFjaW5nOjFweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywjZmY0NDQ0LCNmZjZiMzUpIj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGVzY19odG1sKCRwcFsnYmFubmVyX3RvcG8nXSk7ID8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwhLS0gQm9keSAtLT4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6MjhweCAyNHB4O3RleHQtYWxpZ246Y2VudGVyIj4KICAgICAgICAgICAgICAgICAgICA8IS0tIFdBIEljb24gLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6NjRweDtoZWlnaHQ6NjRweDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCNmZjZiNmIgMCUsI2U4NDM5MyAxMDAlKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiI+PHBhdGggZD0iTTE3LjQ3MiAxNC4zODJjLS4yOTctLjE0OS0xLjc1OC0uODY3LTIuMDMtLjk2Ny0uMjczLS4wOTktLjQ3MS0uMTQ4LS42Ny4xNS0uMTk3LjI5Ny0uNzY3Ljk2Ni0uOTQgMS4xNjQtLjE3My4xOTktLjM0Ny4yMjMtLjY0NC4wNzUtLjI5Ny0uMTUtMS4yNTUtLjQ2My0yLjM5LTEuNDc1LS44ODMtLjc4OC0xLjQ4LTEuNzYxLTEuNjUzLTIuMDU5LS4xNzMtLjI5Ny0uMDE4LS40NTguMTMtLjYwNi4xMzQtLjEzMy4yOTgtLjM0Ny40NDYtLjUyLjE0OS0uMTc0LjE5OC0uMjk4LjI5OC0uNDk3LjA5OS0uMTk4LjA1LS4zNzEtLjAyNS0uNTItLjA3NS0uMTQ5LS42NjktMS42MTItLjkxNi0yLjIwNy0uMjQyLS41NzktLjQ4Ny0uNS0uNjY5LS41MS0uMTczLS4wMDgtLjM3MS0uMDEtLjU3LS4wMS0uMTk4IDAtLjUyLjA3NC0uNzkyLjM3Mi0uMjcyLjI5Ny0xLjA0IDEuMDE2LTEuMDQgMi40NzkgMCAxLjQ2MiAxLjA2NSAyLjg3NSAxLjIxMyAzLjA3NC4xNDkuMTk4IDIuMDk2IDMuMiA1LjA3NyA0LjQ4Ny43MDkuMzA2IDEuMjYyLjQ4OSAxLjY5NC42MjUuNzEyLjIyNyAxLjM2LjE5NSAxLjg3MS4xMTguNTcxLS4wODUgMS43NTgtLjcxOSAyLjAwNi0xLjQxMy4yNDgtLjY5NC4yNDgtMS4yODkuMTczLTEuNDEzLS4wNzQtLjEyNC0uMjcyLS4xOTgtLjU3LS4zNDdtLTUuNDIxIDcuNDAzaC0uMDA0YTkuODcgOS44NyAwIDAxLTUuMDMxLTEuMzc4bC0uMzYxLS4yMTQtMy43NDEuOTgyLjk5OC0zLjY0OC0uMjM1LS4zNzRhOS44NiA5Ljg2IDAgMDEtMS41MS01LjI2Yy4wMDEtNS40NSA0LjQzNi05Ljg4NCA5Ljg4OC05Ljg4NCAyLjY0IDAgNS4xMjIgMS4wMyA2Ljk4OCAyLjg5OGE5LjgyNSA5LjgyNSAwIDAxMi44OTMgNi45OTRjLS4wMDMgNS40NS00LjQzNyA5Ljg4NC05Ljg4NSA5Ljg4NG04LjQxMy0xOC4yOTdBMTEuODE1IDExLjgxNSAwIDAwMTIuMDUgMEM1LjQ5NSAwIC4xNiA1LjMzNS4xNTcgMTEuODkyYzAgMi4wOTYuNTQ3IDQuMTQyIDEuNTg4IDUuOTQ1TC4wNTcgMjRsNi4zMDUtMS42NTRhMTEuODgyIDExLjg4MiAwIDAwNS42ODMgMS40NDhoLjAwNWM2LjU1NCAwIDExLjg5LTUuMzM1IDExLjg5My0xMS44OTNhMTEuODIxIDExLjgyMSAwIDAwLTMuNDgtOC40MTN6Ii8+PC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwhLS0gVGl0bGUgLS0+CiAgICAgICAgICAgICAgICAgICAgPGg0IGlkPSJ2bTItcHAtcHJldi10aXR1bG8iIHN0eWxlPSJjb2xvcjojZmZmO2ZvbnQtd2VpZ2h0OjgwMDtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luLWJvdHRvbTo2cHgiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHBwWyd0aXR1bG8nXSk7ID8+PC9oND4KICAgICAgICAgICAgICAgICAgICA8cCBpZD0idm0yLXBwLXByZXYtc3ViIiBzdHlsZT0iY29sb3I6I2Q4YjRmZTtmb250LXNpemU6MTNweDttYXJnaW4tYm90dG9tOjE0cHgiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHBwWydzdWJ0aXR1bG8nXSk7ID8+PC9wPgogICAgICAgICAgICAgICAgICAgIDwhLS0gVXJnw6puY2lhIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InZtMi1wcC1wcmV2LXVyZ2VuY2lhIiBzdHlsZT0iYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuMSk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMik7Ym9yZGVyLXJhZGl1czo1MHB4O3BhZGRpbmc6OHB4IDE2cHg7Y29sb3I6I2ZmZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7bWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBlc2NfaHRtbCgkcHBbJ3VyZ2VuY2lhJ10pOyA/PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwhLS0gUGhvbmUgaW5wdXQg4oCUIGVzdGFkbyBwcmVlbmNoaWRvIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJvcmRlcjoycHggc29saWQgI2ZmZDcwMDtib3JkZXItcmFkaXVzOjhweDtvdmVyZmxvdzpoaWRkZW47bWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSIoNTUpIDExOTkyLTU4NjgiIGRpc2FibGVkIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6MTJweCAxNnB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiMxYTFhMmU7YmFja2dyb3VuZDojZmZmO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxNXB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LXdlaWdodDo2MDAiPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwhLS0gQ1RBIOKAlCBlc3RhZG8gcHJlZW5jaGlkbyAobGFyYW5qYSkgLS0+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0idm0yLXBwLXByZXYtY3RhIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjE0cHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiNmZmY7Zm9udC1zaXplOjE1cHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsI2Y5NzMxNiAwJSwjZjQzZjVlIDEwMCUpO2xldHRlci1zcGFjaW5nOjAuNXB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkcHBbJ2N0YV90ZXh0J10pOyA/PjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwhLS0gU2VjdXJpdHkgLS0+CiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiNjNGI1ZmQ7Zm9udC1zaXplOjExcHg7bWFyZ2luLXRvcDoxMHB4Ij7wn5SSIDEwMCUgc2VndXJvPC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojODg4O3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6OHB4Ij5Qb3B1cCBhdGl2byBubyBzaXRlIOKAlCBhcGFyZWNlIGFww7NzIDw/cGhwIGVjaG8gKGludCkkcHBbJ2RlbGF5X3NlYyddOyA/PnMgZW0gcMOhZ2luYXMgZGUgcHJvZHV0by48L3A+CiAgICA8L2Rpdj4KICAgIDwvZGl2PjwhLS0gLnZtMi1ncmlkMiAtLT4KCiAgICA8c2NyaXB0PgogICAgLy8gTGl2ZSBwcmV2aWV3IHVwZGF0ZQogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBtYXAgPSB7CiAgICAgICAgICAgICd2bTJQcEJhbm5lcic6ICAgICd2bTItcHAtcHJldi1iYW5uZXInLAogICAgICAgICAgICAndm0yUHBUaXR1bG8nOiAgICAndm0yLXBwLXByZXYtdGl0dWxvJywKICAgICAgICAgICAgJ3ZtMlBwU3VidGl0dWxvJzogJ3ZtMi1wcC1wcmV2LXN1YicsCiAgICAgICAgICAgICd2bTJQcFVyZ2VuY2lhJzogICd2bTItcHAtcHJldi11cmdlbmNpYScsCiAgICAgICAgICAgICd2bTJQcEN0YSc6ICAgICAgICd2bTItcHAtcHJldi1jdGEnLAogICAgICAgIH07CiAgICAgICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGlucHV0SWQpIHsKICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCk7CiAgICAgICAgICAgIGlmIChlbCkgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtYXBbaW5wdXRJZF0pOwogICAgICAgICAgICAgICAgaWYgKHRhcmdldCkgdGFyZ2V0LnRleHRDb250ZW50ID0gZWwudmFsdWU7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfSk7CgogICAgZnVuY3Rpb24gdm0yU2F2ZVBvcHVwQ29uZmlnKCkgewogICAgICAgIHZhciBub25jZSA9IDw/cGhwIGVjaG8ganNvbl9lbmNvZGUoJHBwX25vbmNlKTsgPz47CiAgICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgICAgIGFjdGlvbjogJ3ZtMl9wb3B1cF9zYXZlX2NvbmZpZycsCiAgICAgICAgICAgIG5vbmNlOiBub25jZSwKICAgICAgICAgICAga2lsbF9zd2l0Y2g6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJQcEtzJykuY2hlY2tlZCA/IDEgOiAwLAogICAgICAgICAgICBhc2tfZW1haWw6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJQcEFza0VtYWlsJykuY2hlY2tlZCA/IDEgOiAwLAogICAgICAgICAgICBiYW5uZXJfdG9wbzogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlBwQmFubmVyJykudmFsdWUsCiAgICAgICAgICAgIHRpdHVsbzogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlBwVGl0dWxvJykudmFsdWUsCiAgICAgICAgICAgIHN1YnRpdHVsbzogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlBwU3VidGl0dWxvJykudmFsdWUsCiAgICAgICAgICAgIHVyZ2VuY2lhOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yUHBVcmdlbmNpYScpLnZhbHVlLAogICAgICAgICAgICBjdGFfdGV4dDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlBwQ3RhJykudmFsdWUsCiAgICAgICAgICAgIGRlbGF5X3NlYzogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlBwRGVsYXknKS52YWx1ZSwKICAgICAgICAgICAgc2hvd19vbjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlBwU2hvd09uJykudmFsdWUsCiAgICAgICAgICAgIHNlc3Npb25fZXhwaXJ5X2hvdXJzOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yUHBTZXNzaW9uRXhwaXJ5JykudmFsdWUsCiAgICAgICAgfTsKICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsgZmQuYXBwZW5kKGssIGRhdGFba10pOyB9KTsKICAgICAgICB2YXIgbXNnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1wcC1tc2cnKTsKICAgICAgICBtc2cuc3R5bGUuY29sb3IgPSAnIzg4OCc7CiAgICAgICAgbXNnLnRleHRDb250ZW50ID0gJ1NhbHZhbmRvLi4uJzsKICAgICAgICBmZXRjaChhamF4dXJsLCB7bWV0aG9kOidQT1NUJywgYm9keTpmZH0pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpIHsgcmV0dXJuIHIuanNvbigpOyB9KQogICAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXMpIHsKICAgICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgewogICAgICAgICAgICAgICAgICAgIG1zZy5zdHlsZS5jb2xvciA9ICcjMjdhZTYwJzsKICAgICAgICAgICAgICAgICAgICBtc2cudGV4dENvbnRlbnQgPSAn4pyFICcgKyByZXMuZGF0YS5tZXNzYWdlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtc2cuc3R5bGUuY29sb3IgPSAnI2RjMzU0NSc7CiAgICAgICAgICAgICAgICAgICAgbXNnLnRleHRDb250ZW50ID0gJ+KdjCBFcnJvIGFvIHNhbHZhcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIG1zZy5zdHlsZS5jb2xvciA9ICcjZGMzNTQ1JzsKICAgICAgICAgICAgICAgIG1zZy50ZXh0Q29udGVudCA9ICfinYwgRXJybyBkZSBjb25leMOjbyc7CiAgICAgICAgICAgIH0pOwogICAgfQogICAgPC9zY3JpcHQ+CiAgICA8P3BocCAvLyBlbmQgdGFiIHBvcHVwID8+CiAgICA8L2Rpdj4KCiAgICA8IS0tID09PT09IFRBQjogRVhJVC1JTlRFTlQgPT09PT0gLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItdGFiLWJvZHkgPD9waHAgZWNobyAkYWN0aXZlX3RhYiA9PT0gJ2V4aXRpbnRlbnQnID8gJ2FjdGl2ZScgOiAnJzsgPz4iPgogICAgPD9waHAKICAgICRlaV9kZWZhdWx0cyA9IFsKICAgICAgICAna2lsbF9zd2l0Y2gnICAgPT4gMCwKICAgICAgICAnZ3J1cG9fdXJsJyAgICAgPT4gJ2h0dHBzOi8vY2hhdC53aGF0c2FwcC5jb20vQmRYUExkUXFiZ004MElQWFZSQTNlcScsCiAgICAgICAgJ3V0bV9zb3VyY2UnICAgID0+ICdzaXRlJywKICAgICAgICAndXRtX21lZGl1bScgICAgPT4gJ2V4aXRfaW50ZW50JywKICAgICAgICAndXRtX2NhbXBhaWduJyAgPT4gJ2dydXBvX3ZpcCcsCiAgICAgICAgJ3RpdGxlJyAgICAgICAgID0+ICdFaSwgasOhIHZhaT8g8J+YoicsCiAgICAgICAgJ3N1YnRpdGxlJyAgICAgID0+ICdFbnRyZSBubyBub3NzbyA8c3Ryb25nPkdydXBvIFZJUCBkZSBPZmVydGFzPC9zdHJvbmc+IG5vIFdoYXRzQXBwIGUgcmVjZWJhIHByb21vw6fDtWVzIGV4Y2x1c2l2YXMhJywKICAgICAgICAnY3RhX3RleHQnICAgICAgPT4gJ1F1ZXJvIGVudHJhciBubyBHcnVwbyBWSVAhIPCfjoknLAogICAgICAgICdjb29sZG93bl9kYXlzJyA9PiA3LAogICAgICAgICd0aW1lcl9kZWxheScgICA9PiA2MCwKICAgIF07CiAgICAkZWlfc2F2ZWQgPSBnZXRfb3B0aW9uKCd2bV9laV9jb25maWcnLCBbXSk7CiAgICBpZiAoIWlzX2FycmF5KCRlaV9zYXZlZCkpICRlaV9zYXZlZCA9IFtdOwogICAgJGVpX2NmZyA9IGFycmF5X21lcmdlKCRlaV9kZWZhdWx0cywgJGVpX3NhdmVkKTsKICAgICRlaV9rcyAgICAgPSAhZW1wdHkoJGVpX2NmZ1sna2lsbF9zd2l0Y2gnXSk7CiAgICAkZWlfc2hvd3MgID0gKGludClnZXRfb3B0aW9uKCd2bV9laV9zdGF0X3Nob3dzJywgMCk7CiAgICAkZWlfY2xpY2tzID0gKGludClnZXRfb3B0aW9uKCd2bV9laV9zdGF0X2NsaWNrcycsIDApOwogICAgJGVpX3JhdGUgICA9ICRlaV9zaG93cyA+IDAgPyByb3VuZCgkZWlfY2xpY2tzIC8gJGVpX3Nob3dzICogMTAwLCAxKSA6IDA7CiAgICAkZWlfbm9uY2UgID0gd3BfY3JlYXRlX25vbmNlKCd2bTJfZWlfc2F2ZScpOwogICAgPz4KCiAgICA8IS0tIEtQSSBDYXJkcyAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1rcGlzIiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMTQwcHgsMWZyKSkiPgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgIzY2N2VlYSIgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1laS1jb25maWcnKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIgdGl0bGU9IlZlciBjb25maWd1cmHDp8O1ZXMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+Rge+4jyBFeGliacOnw7VlczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSI+PD9waHAgZWNobyAkZWlfc2hvd3M7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPnBvcHVwcyBtb3N0cmFkb3M8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6NHB4IHNvbGlkICMyN2FlNjAiIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZWktY29uZmlnJykuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOidzbW9vdGgnfSkiIHRpdGxlPSJWZXIgY29uZmlndXJhw6fDtWVzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPuKchSBDbGlxdWVzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIiBzdHlsZT0iY29sb3I6IzI3YWU2MCI+PD9waHAgZWNobyAkZWlfY2xpY2tzOyA/PjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWx0YSBuZXV0cmFsIj5lbnRyYWRhcyBubyBncnVwbzwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgI2YzOWMxMiIgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1laS1jb25maWcnKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIgdGl0bGU9IlZlciBjb25maWd1cmHDp8O1ZXMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+TiiBDb252ZXJzw6NvPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIiBzdHlsZT0iY29sb3I6I2YzOWMxMiI+PD9waHAgZWNobyAkZWlfcmF0ZTsgPz4lPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPmNsaXF1ZXMgLyBleGliacOnw7VlczwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgIzw/cGhwIGVjaG8gJGVpX2tzID8gJ2RjMzU0NScgOiAnMjdhZTYwJzsgPz4iCiAgICAgICAgICAgICBvbmNsaWNrPSJ2YXIgY2I9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkVpS3MnKTtjYi5jaGVja2VkPSFjYi5jaGVja2VkO3RoaXMucXVlcnlTZWxlY3RvcignLnZhbHVlJykudGV4dENvbnRlbnQ9Y2IuY2hlY2tlZD8nUEFSQURPJzonQVRJVk8nO3RoaXMucXVlcnlTZWxlY3RvcignLnZhbHVlJykuc3R5bGUuY29sb3I9Y2IuY2hlY2tlZD8nI2RjMzU0NSc6JyMyN2FlNjAnO3RoaXMuc3R5bGUuYm9yZGVyTGVmdENvbG9yPWNiLmNoZWNrZWQ/JyNkYzM1NDUnOicjMjdhZTYwJzsiCiAgICAgICAgICAgICB0aXRsZT0iQ2xpcXVlIHBhcmEgYWx0ZXJuYXIga2lsbCBzd2l0Y2giPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+8J+bkSBTdGF0dXM8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiIHN0eWxlPSJjb2xvcjojPD9waHAgZWNobyAkZWlfa3MgPyAnZGMzNTQ1JyA6ICcyN2FlNjAnOyA/Pjtmb250LXNpemU6MTZweCI+PD9waHAgZWNobyAkZWlfa3MgPyAnUEFSQURPJyA6ICdBVElWTyc7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPmNsaXF1ZSBwYXJhIGFsdGVybmFyPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJ2bTItZ3JpZDIiPgogICAgPCEtLSBDb25maWcgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItY2FyZCIgaWQ9InZtMi1laS1jb25maWciPgogICAgICAgIDxoMz7impnvuI8gQ29uZmlndXJhw6fDtWVzPC9oMz4KICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7wn5uRIEtpbGwgU3dpdGNoPC9sYWJlbD4KICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idm0yRWlLcyIgPD9waHAgZWNobyAkZWlfa3MgPyAnY2hlY2tlZCcgOiAnJzsgPz4+CiAgICAgICAgICAgICAgICA8c3Bhbj5QYXVzYXIgZXhpYmnDp8OjbyBkbyBwb3B1cDwvc3Bhbj4KICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7wn5SXIExpbmsgZG8gR3J1cG8gVklQIChXaGF0c0FwcCk8L2xhYmVsPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InZtMkVpR3J1cG9VcmwiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRlaV9jZmdbJ2dydXBvX3VybCddKTsgPz4iIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7wn5OdIFTDrXR1bG8gZG8gUG9wdXA8L2xhYmVsPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InZtMkVpVGl0bGUiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRlaV9jZmdbJ3RpdGxlJ10pOyA/PiIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idm0yLWZsZC1sYmwiPvCfkqwgU3VidMOtdHVsbzwvbGFiZWw+CiAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0idm0yRWlTdWJ0aXRsZSIgc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OjYwcHg7cmVzaXplOnZlcnRpY2FsO2ZvbnQtc2l6ZToxMnB4Ij48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgkZWlfY2ZnWydzdWJ0aXRsZSddKTsgPz48L3RleHRhcmVhPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+CiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idm0yLWZsZC1sYmwiPvCflrHvuI8gVGV4dG8gZG8gQm90w6NvIENUQTwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idm0yRWlDdGEiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRlaV9jZmdbJ2N0YV90ZXh0J10pOyA/PiIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1jZmctMmNvbCIgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2bTItZmxkLWxibCI+4o+x77iPIENvb2xkb3duIChkaWFzKTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idm0yRWlDb29sZG93biIgdmFsdWU9Ijw/cGhwIGVjaG8gKGludCkkZWlfY2ZnWydjb29sZG93bl9kYXlzJ107ID8+IiBtaW49IjAiIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7ij7AgRGVsYXkgZmFsbGJhY2sgKHNlZyk8L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InZtMkVpVGltZXIiIHZhbHVlPSI8P3BocCBlY2hvIChpbnQpJGVpX2NmZ1sndGltZXJfZGVsYXknXTsgPz4iIG1pbj0iMCIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O21hcmdpbi10b3A6OHB4Ij4KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24gYnV0dG9uLXByaW1hcnkiIG9uY2xpY2s9InZtMkVpU2F2ZSgpIj7wn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXM8L2J1dHRvbj4KICAgICAgICAgICAgPHNwYW4gaWQ9InZtMkVpTXNnIiBzdHlsZT0ibWFyZ2luLWxlZnQ6MTBweDtmb250LXNpemU6MTJweDtjb2xvcjojMjdhZTYwIj48L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tIFByZXZpZXcgYW8gdml2byAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi1jYXJkIj4KICAgICAgICA8aDM+8J+RgSBQcmV2aWV3IOKAlCBFeGl0IEludGVudDwvaDM+CiAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuMDcpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjI0cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi1oZWlnaHQ6MzgwcHg7cG9zaXRpb246cmVsYXRpdmUiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC41KTtib3JkZXItcmFkaXVzOjEycHg7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MCI+PC9kaXY+CiAgICAgICAgICAgIDwhLS0gTW9kYWwgcHJldmlldyAtLT4KICAgICAgICAgICAgPGRpdiBpZD0idm0yLWVpLXByZXZpZXciIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjI7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTZweDtib3gtc2hhZG93OjAgMjBweCA2MHB4IHJnYmEoMCwwLDAsMC41KTttYXgtd2lkdGg6MzIwcHg7d2lkdGg6MTAwJTtwYWRkaW5nOjI4cHggMjRweDt0ZXh0LWFsaWduOmNlbnRlciI+CiAgICAgICAgICAgICAgICA8IS0tIEVtb2ppIC0tPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjQ4cHg7bWFyZ2luLWJvdHRvbToxMHB4Ij7wn46JPC9kaXY+CiAgICAgICAgICAgICAgICA8IS0tIFRpdGxlIC0tPgogICAgICAgICAgICAgICAgPGg0IGlkPSJ2bTItZWktcHJldi10aXRsZSIgc3R5bGU9ImZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjojMWExYTJlO21hcmdpbi1ib3R0b206OHB4O2xpbmUtaGVpZ2h0OjEuMyI+PD9waHAgZWNobyBlc2NfaHRtbCgkZWlfY2ZnWyd0aXRsZSddKTsgPz48L2g0PgogICAgICAgICAgICAgICAgPCEtLSBTdWJ0aXRsZSAtLT4KICAgICAgICAgICAgICAgIDxwIGlkPSJ2bTItZWktcHJldi1zdWIiIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojNTU1O21hcmdpbi1ib3R0b206MThweDtsaW5lLWhlaWdodDoxLjUiPjw/cGhwIGVjaG8gd3Bfa3NlcygkZWlfY2ZnWydzdWJ0aXRsZSddLCBbJ3N0cm9uZyc9PltdLCAnZW0nPT5bXSwgJ2JyJz0+W11dKTsgPz48L3A+CiAgICAgICAgICAgICAgICA8IS0tIENUQSBCdXR0b24gLS0+CiAgICAgICAgICAgICAgICA8YSBpZD0idm0yLWVpLXByZXYtY3RhIiBocmVmPSIjIiBzdHlsZT0iZGlzcGxheTpibG9jaztwYWRkaW5nOjE0cHg7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDojMjVkMzY2O2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtc2l6ZToxNXB4O3RleHQtZGVjb3JhdGlvbjpub25lO2xldHRlci1zcGFjaW5nOjAuM3B4IiBvbmNsaWNrPSJyZXR1cm4gZmFsc2UiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGVpX2NmZ1snY3RhX3RleHQnXSk7ID8+PC9hPgogICAgICAgICAgICAgICAgPCEtLSBDbG9zZSBoaW50IC0tPgogICAgICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiNhYWE7bWFyZ2luLXRvcDoxMnB4Ij7DlyBGZWNoYXI8L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojODg4O3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6OHB4Ij5HYXRpbGhvczogc2Nyb2xsIDIwMOKGkysxMDDihpEgwrcgbW91c2VsZWF2ZSB0b3BvIMK3IHRpbWVyIDw/cGhwIGVjaG8gKGludCkkZWlfY2ZnWyd0aW1lcl9kZWxheSddOyA/PnM8L3A+CgogICAgICAgIDwhLS0gVVRNICsgWmVyYXIgKGNvbGFwc2Fkb3MgYWJhaXhvIGRvIHByZXZpZXcpIC0tPgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTRweDtwYWRkaW5nLXRvcDoxNHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlMGUwZTAiPgogICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZtMi1mbGQtbGJsIj7wn5SXIExpbmsgY29tcGxldG8gKGNvbSBVVE0pPC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjZmOGZhO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjhweDtmb250LXNpemU6MTFweDt3b3JkLWJyZWFrOmJyZWFrLWFsbCI+CiAgICAgICAgICAgICAgICA8Y29kZSBpZD0idm0yLWVpLXByZXYtbGluayI+PD9waHAgZWNobyBlc2NfaHRtbCgkZWlfY2ZnWydncnVwb191cmwnXSAuICc/dXRtX3NvdXJjZT0nIC4gJGVpX2NmZ1sndXRtX3NvdXJjZSddIC4gJyZ1dG1fbWVkaXVtPScgLiAkZWlfY2ZnWyd1dG1fbWVkaXVtJ10gLiAnJnV0bV9jYW1wYWlnbj0nIC4gJGVpX2NmZ1sndXRtX2NhbXBhaWduJ10pOyA/PjwvY29kZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxNHB4O3BhZGRpbmctdG9wOjE0cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2UwZTBlMDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4Ij4KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24iIG9uY2xpY2s9InZtMkVpUmVzZXQoKSIgc3R5bGU9ImNvbG9yOiNkYzM1NDU7Ym9yZGVyLWNvbG9yOiNkYzM1NDUiPvCfl5HvuI8gWmVyYXIgZXN0YXTDrXN0aWNhczwvYnV0dG9uPgogICAgICAgICAgICA8c3BhbiBpZD0idm0yRWlSZXNldE1zZyIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij48L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAvLyBMaXZlIHByZXZpZXcgdXBkYXRlIOKAlCBFeGl0IEludGVudAogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkgewogICAgICAgIGZ1bmN0aW9uIHZtMkVpVXBkYXRlUHJldmlldygpIHsKICAgICAgICAgICAgdmFyIHRpdGxlRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlUaXRsZScpOwogICAgICAgICAgICB2YXIgc3ViRWwgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJFaVN1YnRpdGxlJyk7CiAgICAgICAgICAgIHZhciBjdGFFbCAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkVpQ3RhJyk7CiAgICAgICAgICAgIHZhciB1cmxFbCAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkVpR3J1cG9VcmwnKTsKICAgICAgICAgICAgaWYgKHRpdGxlRWwpIHsKICAgICAgICAgICAgICAgIHZhciBwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZWktcHJldi10aXRsZScpOwogICAgICAgICAgICAgICAgaWYgKHB0KSBwdC50ZXh0Q29udGVudCA9IHRpdGxlRWwudmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN1YkVsKSB7CiAgICAgICAgICAgICAgICB2YXIgcHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWVpLXByZXYtc3ViJyk7CiAgICAgICAgICAgICAgICBpZiAocHMpIHBzLmlubmVySFRNTCA9IHN1YkVsLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjdGFFbCkgewogICAgICAgICAgICAgICAgdmFyIHBjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1laS1wcmV2LWN0YScpOwogICAgICAgICAgICAgICAgaWYgKHBjKSBwYy50ZXh0Q29udGVudCA9IGN0YUVsLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh1cmxFbCkgewogICAgICAgICAgICAgICAgdmFyIHBsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1laS1wcmV2LWxpbmsnKTsKICAgICAgICAgICAgICAgIHZhciBzcmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlVdG1Tb3VyY2UnKTsKICAgICAgICAgICAgICAgIHZhciBtZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlVdG1NZWRpdW0nKTsKICAgICAgICAgICAgICAgIHZhciBjYW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlVdG1DYW1wYWlnbicpOwogICAgICAgICAgICAgICAgaWYgKHBsKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHV0bVNyYyA9IHNyYyA/IHNyYy52YWx1ZSA6ICdzaXRlJzsKICAgICAgICAgICAgICAgICAgICB2YXIgdXRtTWVkID0gbWVkID8gbWVkLnZhbHVlIDogJ2V4aXRfaW50ZW50JzsKICAgICAgICAgICAgICAgICAgICB2YXIgdXRtQ2FtID0gY2FtID8gY2FtLnZhbHVlIDogJ2dydXBvX3ZpcCc7CiAgICAgICAgICAgICAgICAgICAgcGwudGV4dENvbnRlbnQgPSB1cmxFbC52YWx1ZSArICc/dXRtX3NvdXJjZT0nICsgdXRtU3JjICsgJyZ1dG1fbWVkaXVtPScgKyB1dG1NZWQgKyAnJnV0bV9jYW1wYWlnbj0nICsgdXRtQ2FtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIFsndm0yRWlUaXRsZScsJ3ZtMkVpU3VidGl0bGUnLCd2bTJFaUN0YScsJ3ZtMkVpR3J1cG9VcmwnXS5mb3JFYWNoKGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgICAgICAgICAgaWYgKGVsKSBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHZtMkVpVXBkYXRlUHJldmlldyk7CiAgICAgICAgfSk7CiAgICB9KTsKCiAgICBmdW5jdGlvbiB2bTJFaVNhdmUoKSB7CiAgICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAndm0yX2VpX3NhdmUnKTsKICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgJzw/cGhwIGVjaG8gJGVpX25vbmNlOyA/PicpOwogICAgICAgIGZkLmFwcGVuZCgna2lsbF9zd2l0Y2gnLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlLcycpLmNoZWNrZWQgPyAnMScgOiAnMCcpOwogICAgICAgIGZkLmFwcGVuZCgnZ3J1cG9fdXJsJywgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlHcnVwb1VybCcpLnZhbHVlKTsKICAgICAgICBmZC5hcHBlbmQoJ3RpdGxlJywgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkVpVGl0bGUnKS52YWx1ZSk7CiAgICAgICAgZmQuYXBwZW5kKCdzdWJ0aXRsZScsICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJFaVN1YnRpdGxlJykudmFsdWUpOwogICAgICAgIGZkLmFwcGVuZCgnY3RhX3RleHQnLCAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlDdGEnKS52YWx1ZSk7CiAgICAgICAgZmQuYXBwZW5kKCdjb29sZG93bl9kYXlzJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkVpQ29vbGRvd24nKS52YWx1ZSk7CiAgICAgICAgZmQuYXBwZW5kKCd0aW1lcl9kZWxheScsICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlUaW1lcicpLnZhbHVlKTsKICAgICAgICB2YXIgbXNnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkVpTXNnJyk7CiAgICAgICAgbXNnLnRleHRDb250ZW50ID0gJ+KPsyBTYWx2YW5kby4uLic7IG1zZy5zdHlsZS5jb2xvciA9ICcjOTk5JzsKICAgICAgICBmZXRjaChhamF4dXJsLCB7bWV0aG9kOidQT1NUJywgYm9keTpmZH0pCiAgICAgICAgICAgIC50aGVuKHIgPT4gci5qc29uKCkpCiAgICAgICAgICAgIC50aGVuKGogPT4gewogICAgICAgICAgICAgICAgbXNnLnRleHRDb250ZW50ID0gai5zdWNjZXNzID8gJ+KchSBTYWx2byBjb20gc3VjZXNzbyEnIDogJ+KdjCBFcnJvIGFvIHNhbHZhcic7CiAgICAgICAgICAgICAgICBtc2cuc3R5bGUuY29sb3IgPSBqLnN1Y2Nlc3MgPyAnIzI3YWU2MCcgOiAnI2RjMzU0NSc7CiAgICAgICAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gdm0yRWlSZXNldCgpIHsKICAgICAgICBpZiAoIWNvbmZpcm0oJ1plcmFyIGVzdGF0w61zdGljYXMgZGUgZXhpYmnDp8OjbyBlIGNsaXF1ZXM/JykpIHJldHVybjsKICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICBmZC5hcHBlbmQoJ2FjdGlvbicsICd2bTJfZWlfcmVzZXRfc3RhdHMnKTsKICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgJzw/cGhwIGVjaG8gJGVpX25vbmNlOyA/PicpOwogICAgICAgIHZhciBtc2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yRWlSZXNldE1zZycpOwogICAgICAgIG1zZy50ZXh0Q29udGVudCA9ICfij7MuLi4nOwogICAgICAgIGZldGNoKGFqYXh1cmwsIHttZXRob2Q6J1BPU1QnLCBib2R5OmZkfSkKICAgICAgICAgICAgLnRoZW4ociA9PiByLmpzb24oKSkKICAgICAgICAgICAgLnRoZW4oaiA9PiB7IGlmIChqLnN1Y2Nlc3MpIHsgbXNnLnRleHRDb250ZW50ID0gJ+KchSBaZXJhZG8hJzsgc2V0VGltZW91dCgoKSA9PiBsb2NhdGlvbi5yZWxvYWQoKSwgMTAwMCk7IH0gfSk7CiAgICB9CiAgICA8L3NjcmlwdD4KICAgIDwvZGl2PgoKICAgIDwhLS0gPT09PT0gVEFCOiBQw5NTLUVWRU5UTyA9PT09PSAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi10YWItYm9keSA8P3BocCBlY2hvICRhY3RpdmVfdGFiID09PSAncG9zZXZlbnRvJyA/ICdhY3RpdmUnIDogJyc7ID8+Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItcGxhY2Vob2xkZXIiPgogICAgICAgICAgICA8aDM+8J+OgSBQw7NzLUV2ZW50bzwvaDM+CiAgICAgICAgICAgIDxwPlNlcXXDqm5jaWEgYXV0b23DoXRpY2E6IGFncmFkZWNpbWVudG8g4oaSIE5QUyDihpIgcGVkaWRvIGRlIGZvdG9zIOKGkiBjdXBvbSByZWNvbXByYSDihpIgaW5kaWNhw6fDo28uPC9wPgogICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4Ij48ZW0+RW0gZGVzZW52b2x2aW1lbnRvIOKAlCBGYXNlIDY8L2VtPjwvcD4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gPT09PT0gVEFCOiBVUFNFTEwgPT09PT0gLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItdGFiLWJvZHkgPD9waHAgZWNobyAkYWN0aXZlX3RhYiA9PT0gJ3Vwc2VsbCcgPyAnYWN0aXZlJyA6ICcnOyA/PiI+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLXBsYWNlaG9sZGVyIj4KICAgICAgICAgICAgPGgzPvCfko4gVXBzZWxsPC9oMz4KICAgICAgICAgICAgPHA+UMOzcy1jb21wcmEgKyBwcsOpLWV2ZW50byArIGNyb3NzLXNlbGwgZGUgc2VydmnDp29zIGNvbXBsZW1lbnRhcmVzLjwvcD4KICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6MTJweCI+PGVtPkVtIGRlc2Vudm9sdmltZW50byDigJQgRmFzZSA2PC9lbT48L3A+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tID09PT09IFRBQjogUEVESURPUyA9PT09PSAtLT4KICAgIDxkaXYgY2xhc3M9InZtMi10YWItYm9keSA8P3BocCBlY2hvICRhY3RpdmVfdGFiID09PSAncGVkaWRvcycgPyAnYWN0aXZlJyA6ICcnOyA/PiI+CiAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0MHB4Ij4KICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2NvbG9yOiM1NzYwNmE7bWFyZ2luLWJvdHRvbToxNnB4Ij5PIG3Ds2R1bG8g8J+bkiBQZWRpZG9zIHBvc3N1aSBzdWEgcHLDs3ByaWEgcMOhZ2luYSBkZWRpY2FkYSBjb20gY29uZmlndXJhw6fDtWVzIGNvbXBsZXRhcy48L3A+CiAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybChhZG1pbl91cmwoJ2FkbWluLnBocD9wYWdlPXZtMi1wZWRpZG9zJykpOyA/PiIgY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSIgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O3BhZGRpbmc6OHB4IDIycHgiPgogICAgICAgICAgICAgICAg8J+bkiBJciBwYXJhIE3Ds2R1bG8gUGVkaWRvcyDihpIKICAgICAgICAgICAgPC9hPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgIC8vIOKUgOKUgCBDaGFubmVsIHRvZ2dsZTogV0FCQSB2cyBaLUFQSSBjb2xzIGVtIEFxdWVjZXIvQnlEYXRlIOKUgOKUgAogICAgdmFyIHZtMkNoYW5uZWxUeXBlcyA9IDw/cGhwIGVjaG8ganNvbl9lbmNvZGUoIGFycmF5X21hcCggZnVuY3Rpb24oJGNoKXsgcmV0dXJuICRjaFsndHlwZSddID8/ICd6YXBpJzsgfSwgdm0yX2NoYW5uZWxzKCkgKSApOyA/PjsKICAgIGZ1bmN0aW9uIHZtMlN0ZXBDaGFubmVsU3dpdGNoKG1vZHVsZSwgc2x1ZykgewogICAgICAgIHZhciBpc1dhYmEgPSAodm0yQ2hhbm5lbFR5cGVzW3NsdWddID09PSAnd2FiYScpOwogICAgICAgIHZhciB3cklkID0gbW9kdWxlID09PSAnYXEnID8gJ3ZtMi1hcS1zdGVwcycgOiAndm0yLWJkLWdyb3Vwcyc7CiAgICAgICAgdmFyIHdyYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh3cklkKTsKICAgICAgICBpZiAoIXdyYXApIHJldHVybjsKICAgICAgICB3cmFwLnF1ZXJ5U2VsZWN0b3JBbGwoJy52bTItY29sLXdhYmEnKS5mb3JFYWNoKGZ1bmN0aW9uKGVsKSB7IGVsLnN0eWxlLmRpc3BsYXkgPSBpc1dhYmEgPyAnJyA6ICdub25lJzsgfSk7CiAgICAgICAgd3JhcC5xdWVyeVNlbGVjdG9yQWxsKCcudm0yLWNvbC16YXBpJykuZm9yRWFjaChmdW5jdGlvbihlbCkgIHsgZWwuc3R5bGUuZGlzcGxheSA9IGlzV2FiYSA/ICdub25lJyA6ICcnOyB9KTsKICAgIH0KICAgIC8vIEluaXQgb24gcGFnZSBsb2FkCiAgICAoZnVuY3Rpb24oKXsKICAgICAgICB2YXIgYXFTZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWFxLWNoLXNlbCcpOwogICAgICAgIGlmIChhcVNlbCkgdm0yU3RlcENoYW5uZWxTd2l0Y2goJ2FxJywgYXFTZWwudmFsdWUpOwogICAgICAgIHZhciBiZFNlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItYmQtY2gtc2VsJyk7CiAgICAgICAgaWYgKGJkU2VsKSB2bTJTdGVwQ2hhbm5lbFN3aXRjaCgnYmQnLCBiZFNlbC52YWx1ZSk7CiAgICB9KSgpOwoKICAgIC8vIOKUgOKUgOKUgCB2bTJUZXN0Qm94IOKAlCBnZW5lcmljIHRlc3Qgc2VuZCBmb3IgYXV0b21hw6fDtWVzIHRhYnMg4pSA4pSA4pSACiAgICBmdW5jdGlvbiB2bTJUZXN0Qm94KGJveElkLCBjaGFubmVsS2V5LCBub25jZSwgaXNXYWJhKSB7CiAgICAgICAgdmFyIHBob25lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ydGJfJyArIGJveElkICsgJ19waG9uZScpOwogICAgICAgIHZhciByZXNFbCAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMnRiXycgKyBib3hJZCArICdfcmVzdWx0Jyk7CiAgICAgICAgdmFyIHBob25lICAgPSBwaG9uZUVsID8gcGhvbmVFbC52YWx1ZS5yZXBsYWNlKC9cRC9nLCAnJykgOiAnJzsKICAgICAgICBpZiAoIXBob25lIHx8IHBob25lLmxlbmd0aCA8IDEwKSB7CiAgICAgICAgICAgIHJlc0VsLnRleHRDb250ZW50ID0gJ1x1Mjc0QyBOXHUwMGZhbWVybyBpbnZcdTAwZTFsaWRvIChtXHUwMGVkbiAxMCBkXHUwMGVkZ2l0b3MpJzsKICAgICAgICAgICAgcmVzRWwuc3R5bGUuY29sb3IgPSAncmVkJzsgcmV0dXJuOwogICAgICAgIH0KICAgICAgICByZXNFbC50ZXh0Q29udGVudCA9ICdcdTIzRjMgRW52aWFuZG8uLi4nOyByZXNFbC5zdHlsZS5jb2xvciA9ICcjODg4JzsKICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICBmZC5hcHBlbmQoJ2FjdGlvbicsICAndm0yX3Rlc3Rfc2VuZCcpOwogICAgICAgIGZkLmFwcGVuZCgnbm9uY2UnLCAgIG5vbmNlKTsKICAgICAgICBmZC5hcHBlbmQoJ3Bob25lJywgICBwaG9uZSk7CiAgICAgICAgZmQuYXBwZW5kKCdjaGFubmVsJywgY2hhbm5lbEtleSk7CiAgICAgICAgaWYgKGlzV2FiYSkgewogICAgICAgICAgICB2YXIgdG1wbEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMnRiXycgKyBib3hJZCArICdfdG1wbCcpOwogICAgICAgICAgICBmZC5hcHBlbmQoJ3RlbXBsYXRlJywgdG1wbEVsID8gdG1wbEVsLnZhbHVlIDogJycpOwogICAgICAgICAgICBmZC5hcHBlbmQoJ2lzX3dhYmEnLCAgJzEnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgbXNnRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ydGJfJyArIGJveElkICsgJ19tc2cnKTsKICAgICAgICAgICAgZmQuYXBwZW5kKCdtZXNzYWdlJywgbXNnRWwgPyBtc2dFbC52YWx1ZSA6ICcnKTsKICAgICAgICB9CiAgICAgICAgZmV0Y2goYWpheHVybCwgeyBtZXRob2Q6ICdQT1NUJywgYm9keTogZmQgfSkKICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpIHsgcmV0dXJuIHIuanNvbigpOyB9KQogICAgICAgICAgLnRoZW4oZnVuY3Rpb24oaikgewogICAgICAgICAgICByZXNFbC50ZXh0Q29udGVudCA9IGouc3VjY2VzcwogICAgICAgICAgICAgID8gJ1x1MjcwNSBFbnZpYWRvIGNvbSBzdWNlc3NvIScKICAgICAgICAgICAgICA6ICgnXHUyNzRDICcgKyAoai5kYXRhICYmIGouZGF0YS5tZXNzYWdlID8gai5kYXRhLm1lc3NhZ2UgOiAnRXJybyBkZXNjb25oZWNpZG8nKSk7CiAgICAgICAgICAgIHJlc0VsLnN0eWxlLmNvbG9yID0gai5zdWNjZXNzID8gJ2dyZWVuJyA6ICdyZWQnOwogICAgICAgICAgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmVzRWwudGV4dENvbnRlbnQgPSAnXHUyNzRDIEZhbGhhIGRlIHJlZGUnOwogICAgICAgICAgICByZXNFbC5zdHlsZS5jb2xvciA9ICdyZWQnOwogICAgICAgICAgfSk7CiAgICB9CiAgICA8L3NjcmlwdD4KICAgIDwvZm9ybT4KICAgIDwvZGl2PgogICAgPD9waHAKfQoKCmZ1bmN0aW9uIHZtMl9wZWRpZG9zX3BhZ2UoKSB7CgogICAgLy8g4pSA4pSAIFJlc3RhdXJhciBwYWRyw7VlcwogICAgaWYgKCBpc3NldCggJF9HRVRbJ3Jlc3RvcmVfZGVmYXVsdHMnXSApICYmIGN1cnJlbnRfdXNlcl9jYW4oICdtYW5hZ2Vfb3B0aW9ucycgKSApIHsKICAgICAgICBjaGVja19hZG1pbl9yZWZlcmVyKCAndm0yX3Jlc3RvcmVfZGVmYXVsdHMnICk7CiAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9wZWRpZG9zX3ZlbmRhc19tc2cnLCAgdm0yX2RlZmF1bHRfbXNnX3ZlbmRhcygpICk7CiAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9wZWRpZG9zX2FnZW5kYV9tc2cnLCAgdm0yX2RlZmF1bHRfbXNnX2FnZW5kYSgpICk7CiAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9wZWRpZG9zX2NsaWVudGVfbXNnJywgdm0yX2RlZmF1bHRfbXNnX2NsaWVudGUoKSApOwogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9Im5vdGljZSBub3RpY2Utc3VjY2VzcyI+PHA+4oapIE1lbnNhZ2VucyByZXN0YXVyYWRhcyBwYXJhIG8gcGFkcsOjbyE8L3A+PC9kaXY+JzsKICAgIH0KCiAgICAvLyDilIDilIAgU2FsdmFyCiAgICBpZiAoIGlzc2V0KCAkX1BPU1RbJ3ZtMl9zYXZlX3BlZGlkb3MnXSApICYmIGNoZWNrX2FkbWluX3JlZmVyZXIoICd2bTJfcGVkaWRvc19ub25jZScgKSApIHsKICAgICAgICAkdG9nZ2xlX2tleXMgPSBbICd2bTJfcGVkaWRvc192ZW5kYXNfZW5hYmxlZCcsICd2bTJfcGVkaWRvc19hZ2VuZGFfZW5hYmxlZCcsICd2bTJfcGVkaWRvc19jbGllbnRlX2VuYWJsZWQnLCAndm0yX3BlZGlkb3NfY2xpZW50ZV9jb3B5X3ZlbmRhcycgXTsKICAgICAgICAkdGV4dF9rZXlzICAgPSBbCiAgICAgICAgICAgICd2bTJfcGVkaWRvc192ZW5kYXNfY2hhbm5lbCcsICd2bTJfcGVkaWRvc192ZW5kYXNfZ3JvdXBfaWQnLCAndm0yX3BlZGlkb3NfdmVuZGFzX21zZycsICd2bTJfcGVkaWRvc192ZW5kYXNfd2FiYV90ZW1wbGF0ZScsCiAgICAgICAgICAgICd2bTJfcGVkaWRvc19hZ2VuZGFfY2hhbm5lbCcsICd2bTJfcGVkaWRvc19hZ2VuZGFfZ3JvdXBfaWQnLCAndm0yX3BlZGlkb3NfYWdlbmRhX21zZycsICd2bTJfcGVkaWRvc19hZ2VuZGFfd2FiYV90ZW1wbGF0ZScsCiAgICAgICAgICAgICd2bTJfcGVkaWRvc19jbGllbnRlX2NoYW5uZWwnLCAndm0yX3BlZGlkb3NfY2xpZW50ZV9tc2cnLCAndm0yX3BlZGlkb3NfY2xpZW50ZV93YWJhX3RlbXBsYXRlJywKICAgICAgICBdOwogICAgICAgIGZvcmVhY2ggKCAkdG9nZ2xlX2tleXMgYXMgJGsgKSB7CiAgICAgICAgICAgIHVwZGF0ZV9vcHRpb24oICRrLCBpc3NldCggJF9QT1NUWyAkayBdICkgPyAnMScgOiAnMCcgKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoICR0ZXh0X2tleXMgYXMgJGsgKSB7CiAgICAgICAgICAgIGlmICggaXNzZXQoICRfUE9TVFsgJGsgXSApICkgewogICAgICAgICAgICAgICAgdXBkYXRlX29wdGlvbiggJGssIHNhbml0aXplX3RleHRhcmVhX2ZpZWxkKCB3cF91bnNsYXNoKCAkX1BPU1RbICRrIF0gKSApICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1zdWNjZXNzIj48cD7inIUgQ29uZmlndXJhw6fDtWVzIHNhbHZhcyBjb20gc3VjZXNzbyE8L3A+PC9kaXY+JzsKICAgIH0KCiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgICRrcyAgICAgICA9IGdldF9vcHRpb24oICd2bTJfa2lsbF9zd2l0Y2gnLCAnMCcgKTsKCiAgICAkdmFyc19pbmZvID0gWwogICAgICAgICd7bnVtZXJvfScgICAgICAgPT4gJ07Dum1lcm8gZG8gcGVkaWRvJywKICAgICAgICAne25vbWV9JyAgICAgICAgID0+ICdOb21lIGRvIGNsaWVudGUnLAogICAgICAgICd7dGVsZWZvbmV9JyAgICAgPT4gJ1RlbGVmb25lIChjb20gRERJIDU1KScsCiAgICAgICAgJ3tlbWFpbH0nICAgICAgICA9PiAnRS1tYWlsIGRvIGNsaWVudGUnLAogICAgICAgICd7dmFsb3J9JyAgICAgICAgPT4gJ1ZhbG9yIHRvdGFsJywKICAgICAgICAne3BndG99JyAgICAgICAgID0+ICdGb3JtYSBkZSBwYWdhbWVudG8nLAogICAgICAgICd7YXRyYWNhb30nICAgICAgPT4gJ1Byb2R1dG9zL2F0cmHDp8O1ZXMnLAogICAgICAgICd7ZGF0YV9ldmVudG99JyAgPT4gJ0RhdGEgZG8gZXZlbnRvIChERC9NTS9ZWVlZKScsCiAgICAgICAgJ3t0aXBvX2V2ZW50b30nICA9PiAnVGlwbyBkbyBldmVudG8nLAogICAgICAgICd7aG9tZW5hZ2VhZG99JyAgPT4gJ0hvbWVuYWdlYWRvKHMpJywKICAgICAgICAne2Fzc2Vzc29yfScgICAgID0+ICdBc3Nlc3NvciByZXNwb25zw6F2ZWwnLAogICAgICAgICd7YmFpcnJvfScgICAgICAgPT4gJ0JhaXJybyBkbyBldmVudG8nLAogICAgICAgICd7Y2lkYWRlfScgICAgICAgPT4gJ0NpZGFkZSBkbyBldmVudG8nLAogICAgICAgICd7ZXN0YWRvfScgICAgICAgPT4gJ0VzdGFkbyBkbyBldmVudG8nLAogICAgICAgICd7ZW5kZXJlY299JyAgICAgPT4gJ0VuZGVyZcOnbyBjb21wbGV0bycsCiAgICAgICAgJ3tob3JhX2luaWNpb30nICA9PiAnSG9yYSBkZSBpbsOtY2lvIGRvIEVWRU5UTyAoY2hlY2tvdXQpJywKICAgICAgICAne2hvcmFfdGVybWlub30nID0+ICdIb3JhIGRlIHTDqXJtaW5vIGRvIEVWRU5UTyAoY2hlY2tvdXQpJywKICAgICAgICAne2hvcmFfZW50cmFkYX0nID0+ICdIb3JhIGRlIGVudHJhZGEgZGEgQVRSQcOHw4NPIChZSVRIIEJvb2tpbmcpJywKICAgICAgICAne2hvcmFfc2FpZGF9JyAgID0+ICdIb3JhIGRlIHNhw61kYSBkYSBBVFJBw4fDg08gKFlJVEggQm9va2luZyknLAogICAgICAgICd7ZHVyYWNhb30nICAgICAgPT4gJ0R1cmHDp8OjbyBlbSBtaW51dG9zJywKICAgICAgICAne29ic30nICAgICAgICAgID0+ICdPYnNlcnZhw6fDtWVzIGRvIGNsaWVudGUnLAogICAgICAgICd7Y29udHJhdG99JyAgICAgPT4gJ1N0YXR1cyBjb250cmF0byBDbGlja1NpZ24nLAogICAgICAgICd7dXRtX3NvdXJjZX0nICAgPT4gJ1VUTSBzb3VyY2UnLAogICAgICAgICd7dXRtX2NhbXBhaWdufScgPT4gJ1VUTSBjYW1wYWlnbicsCiAgICAgICAgJ3tsaW5rX2FkbWlufScgICA9PiAnTGluayBkbyBwZWRpZG8gbm8gV1AgYWRtaW4nLAogICAgXTsKCiAgICAkZGVzdGlub3MgPSBbCiAgICAgICAgWwogICAgICAgICAgICAna2V5JyAgICAgICAgICAgICA9PiAndmVuZGFzJywKICAgICAgICAgICAgJ2ljb24nICAgICAgICAgICAgPT4gJ/Cfm5InLAogICAgICAgICAgICAndGl0bGUnICAgICAgICAgICA9PiAnR3J1cG8gZGUgVmVuZGFzJywKICAgICAgICAgICAgJ2JhZGdlJyAgICAgICAgICAgPT4gJ1RvZG9zIG9zIHBlZGlkb3MnLAogICAgICAgICAgICAnYmFkZ2VfYmcnICAgICAgICA9PiAnIzI3YWU2MCcsCiAgICAgICAgICAgICdkZXNjJyAgICAgICAgICAgID0+ICdSZXN1bW8gY3VydG8gZW52aWFkbyBhbyBncnVwbyBkZSB2ZW5kYXMuIERpc3BhcmEgcGFyYSBxdWFscXVlciBzdGF0dXMgZGUgcGFnYW1lbnRvIGFzc2ltIHF1ZSBvIHBlZGlkbyDDqSBjcmlhZG8uJywKICAgICAgICAgICAgJ2hhc19ncm91cCcgICAgICAgPT4gdHJ1ZSwKICAgICAgICAgICAgJ2RlZmF1bHRfY2hhbm5lbCcgPT4gJ3phcGlfNzU1MScsCiAgICAgICAgICAgICdkZWZhdWx0X2dyb3VwJyAgID0+ICcxMjAzNjM0MjU3ODUzNTg3NjQtZ3JvdXAnLAogICAgICAgICAgICAnZGVmYXVsdF9tc2dfZm4nICA9PiAndm0yX2RlZmF1bHRfbXNnX3ZlbmRhcycsCiAgICAgICAgXSwKICAgICAgICBbCiAgICAgICAgICAgICdrZXknICAgICAgICAgICAgID0+ICdhZ2VuZGEnLAogICAgICAgICAgICAnaWNvbicgICAgICAgICAgICA9PiAn8J+ThScsCiAgICAgICAgICAgICd0aXRsZScgICAgICAgICAgID0+ICdHcnVwbyBBZ2VuZGEgZGUgRXZlbnRvcycsCiAgICAgICAgICAgICdiYWRnZScgICAgICAgICAgID0+ICdBcGVuYXMgc3RhdHVzOiBQcm9jZXNzaW5nIChwYWdvKScsCiAgICAgICAgICAgICdiYWRnZV9iZycgICAgICAgID0+ICcjMjk4MGI5JywKICAgICAgICAgICAgJ2Rlc2MnICAgICAgICAgICAgPT4gJ0ZpY2hhIGNvbXBsZXRhIGRvIGV2ZW50by4gRGlzcGFyYWRhIGFwZW5hcyBxdWFuZG8gbyBwZWRpZG8gZW50cmEgZW0gc3RhdHVzICJQcm9jZXNzaW5nIiAocGFnYW1lbnRvIGNvbmZpcm1hZG8pLicsCiAgICAgICAgICAgICdoYXNfZ3JvdXAnICAgICAgID0+IHRydWUsCiAgICAgICAgICAgICdkZWZhdWx0X2NoYW5uZWwnID0+ICd6YXBpXzc1NTEnLAogICAgICAgICAgICAnZGVmYXVsdF9ncm91cCcgICA9PiAnMTIwMzYzNDE5MTgwMjE0NDgxLWdyb3VwJywKICAgICAgICAgICAgJ2RlZmF1bHRfbXNnX2ZuJyAgPT4gJ3ZtMl9kZWZhdWx0X21zZ19hZ2VuZGEnLAogICAgICAgIF0sCiAgICAgICAgWwogICAgICAgICAgICAna2V5JyAgICAgICAgICAgICA9PiAnY2xpZW50ZScsCiAgICAgICAgICAgICdpY29uJyAgICAgICAgICAgID0+ICfwn5GkJywKICAgICAgICAgICAgJ3RpdGxlJyAgICAgICAgICAgPT4gJ0NsaWVudGUgKFdoYXRzQXBwIGRpcmV0byknLAogICAgICAgICAgICAnYmFkZ2UnICAgICAgICAgICA9PiAnT0ZGIHBvciBwYWRyw6NvIOKAlCBhdGl2ZSBhcMOzcyB2YWxpZGFyIG9zIGdydXBvcycsCiAgICAgICAgICAgICdiYWRnZV9iZycgICAgICAgID0+ICcjYzAzOTJiJywKICAgICAgICAgICAgJ2Rlc2MnICAgICAgICAgICAgPT4gJ01lbnNhZ2VtIGVudmlhZGEgZGlyZXRhbWVudGUgYW8gV2hhdHNBcHAgZG8gY2xpZW50ZS4gTWFudGlkYSBPRkYgcG9yIHBhZHLDo28gYXTDqSBvIGZsdXhvIHNlciB2YWxpZGFkbyBub3MgZ3J1cG9zLicsCiAgICAgICAgICAgICdoYXNfZ3JvdXAnICAgICAgID0+IGZhbHNlLAogICAgICAgICAgICAnZGVmYXVsdF9jaGFubmVsJyA9PiAnemFwaV8xODg2JywKICAgICAgICAgICAgJ2RlZmF1bHRfZ3JvdXAnICAgPT4gJycsCiAgICAgICAgICAgICdkZWZhdWx0X21zZ19mbicgID0+ICd2bTJfZGVmYXVsdF9tc2dfY2xpZW50ZScsCiAgICAgICAgXSwKICAgIF07CgogICAgPz4KICAgIDxkaXYgY2xhc3M9IndyYXAiPgogICAgICAgIDxoMT7wn5uSIE5vdGlmaWNhw6fDo28gZGUgUGVkaWRvczwvaDE+CiAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiM2NjY7bWFyZ2luLWJvdHRvbTowIj5Db25maWd1cmUgb3MgMyBkZXN0aW5vcyBkZSBub3RpZmljYcOnw6NvIGFvIHJlY2ViZXIgdW0gbm92byBwZWRpZG8gV29vQ29tbWVyY2UuIENhZGEgZGVzdGlubyDDqSBpbmRlcGVuZGVudGUuPC9wPgoKICAgICAgICA8P3BocCBpZiAoICRrcyA9PT0gJzEnICkgOiA/PgogICAgICAgIDxkaXYgY2xhc3M9Im5vdGljZSBub3RpY2UtZXJyb3IiIHN0eWxlPSJtYXJnaW4tdG9wOjEycHgiPjxwPvCflLQgPHN0cm9uZz5LaWxsIFN3aXRjaCBHbG9iYWwgQVRJVk88L3N0cm9uZz4g4oCUIG5lbmh1bWEgbWVuc2FnZW0gZXN0w6Egc2FpbmRvLiA8YSBocmVmPSI/cGFnZT12bTItc2V0dGluZ3MiPkRlc2F0aXZhciDihpI8L2E+PC9wPjwvZGl2PgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJtYXJnaW4tdG9wOjE2cHgiPgogICAgICAgICAgICA8P3BocCB3cF9ub25jZV9maWVsZCggJ3ZtMl9wZWRpZG9zX25vbmNlJyApOyA/PgoKICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoICRkZXN0aW5vcyBhcyAkZCApIDoKICAgICAgICAgICAgICAgICRlbmFibGVkICA9IGdldF9vcHRpb24oICJ2bTJfcGVkaWRvc197JGRbJ2tleSddfV9lbmFibGVkIiwgICRkWydrZXknXSA9PT0gJ2NsaWVudGUnID8gJzAnIDogJzEnICk7CiAgICAgICAgICAgICAgICAkY2hhbm5lbCAgPSBnZXRfb3B0aW9uKCAidm0yX3BlZGlkb3NfeyRkWydrZXknXX1fY2hhbm5lbCIsICAkZFsnZGVmYXVsdF9jaGFubmVsJ10gKTsKICAgICAgICAgICAgICAgICRncm91cF9pZCA9IGdldF9vcHRpb24oICJ2bTJfcGVkaWRvc197JGRbJ2tleSddfV9ncm91cF9pZCIsICRkWydkZWZhdWx0X2dyb3VwJ10gKTsKICAgICAgICAgICAgICAgICRmbiAgICAgICA9ICRkWydkZWZhdWx0X21zZ19mbiddOwogICAgICAgICAgICAgICAgJG1zZyAgICAgID0gZ2V0X29wdGlvbiggInZtMl9wZWRpZG9zX3skZFsna2V5J119X21zZyIsICAgICAgJGZuKCkgKTsKICAgICAgICAgICAgICAgICRib3JkZXIgICA9ICRlbmFibGVkID09PSAnMScgPyAnIzI3YWU2MCcgOiAnI2U3NGMzYyc7CiAgICAgICAgICAgID8+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkIDw/cGhwIGVjaG8gJGJvcmRlcjsgPz47Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoyMnB4O21hcmdpbjoxOHB4IDAiPgoKICAgICAgICAgICAgICAgIDwhLS0gSGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjE0cHg7ZmxleC13cmFwOndyYXAiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MjZweCI+PD9waHAgZWNobyAkZFsnaWNvbiddOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTVweCI+PD9waHAgZWNobyAkZFsndGl0bGUnXTsgPz48L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6PD9waHAgZWNobyAkZFsnYmFkZ2VfYmcnXTsgPz47Y29sb3I6I2ZmZjtwYWRkaW5nOjJweCA5cHg7Ym9yZGVyLXJhZGl1czoxMnB4O2ZvbnQtc2l6ZToxMXB4O21hcmdpbi1sZWZ0OjhweCI+PD9waHAgZWNobyAkZFsnYmFkZ2UnXTsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJtYXJnaW4tbGVmdDphdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjdweDtjdXJzb3I6cG9pbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InZtMl9wZWRpZG9zXzw/cGhwIGVjaG8gJGRbJ2tleSddOyA/Pl9lbmFibGVkIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCggJGVuYWJsZWQsICcxJyApOyA/PiBzdHlsZT0id2lkdGg6MThweDtoZWlnaHQ6MThweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9ImNvbG9yOjw/cGhwIGVjaG8gJGVuYWJsZWQgPT09ICcxJyA/ICcjMjdhZTYwJyA6ICcjYzAzOTJiJzsgPz4iPjw/cGhwIGVjaG8gJGVuYWJsZWQgPT09ICcxJyA/ICfwn5+iIE9OJyA6ICfwn5S0IE9GRic7ID8+PC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJjb2xvcjojNjY2O2ZvbnQtc2l6ZToxM3B4O21hcmdpbjowIDAgMTZweCAwIj48P3BocCBlY2hvICRkWydkZXNjJ107ID8+PC9wPgoKICAgICAgICAgICAgICAgIDwhLS0gQ29uZmlncyAtLT4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZm9ybS10YWJsZSIgc3R5bGU9Im1hcmdpbjowIj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTUwcHg7cGFkZGluZzo4cHggMDtmb250LXNpemU6MTNweCI+Q2FuYWwgZGUgZW52aW88L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ2bTJfcGVkaWRvc188P3BocCBlY2hvICRkWydrZXknXTsgPz5fY2hhbm5lbCIgc3R5bGU9IndpZHRoOjI4MHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPSJ2bTJQZWRDaGFubmVsU3dpdGNoKCc8P3BocCBlY2hvICRkWydrZXknXTsgPz4nLCB0aGlzLnZhbHVlKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoICRjaGFubmVscyBhcyAkY2sgPT4gJGNoICkgOiA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoICRjayApOyA/PiIgPD9waHAgc2VsZWN0ZWQoICRjaGFubmVsLCAkY2sgKTsgPz4+PD9waHAgZWNobyBlc2NfaHRtbCggJGNoWydsYWJlbCddICk7ID8+PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPHRyIGlkPSJ2bTItcGVkLXRwbC08P3BocCBlY2hvICRkWydrZXknXTsgPz4iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjE1MHB4O3BhZGRpbmc6OHB4IDA7Zm9udC1zaXplOjEzcHgiPvCfk4sgVGVtcGxhdGUgV0FCQTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtMl9wZWRpZG9zXzw/cGhwIGVjaG8gJGRbJ2tleSddOyA/Pl93YWJhX3RlbXBsYXRlIiBzdHlsZT0id2lkdGg6MzgwcHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gdm0yX3dhYmFfdGVtcGxhdGVfb3B0aW9uc19odG1sKCBnZXRfb3B0aW9uKCJ2bTJfcGVkaWRvc197JGRbJ2tleSddfV93YWJhX3RlbXBsYXRlIiwgJycpICk7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+VXNhZG8gYXBlbmFzIHF1YW5kbyBvIGNhbmFsIHNlbGVjaW9uYWRvIGZvciBXQUJBLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICggJGRbJ2hhc19ncm91cCddICkgOiA/PgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjhweCAwO2ZvbnQtc2l6ZToxM3B4Ij5JRCBkbyBHcnVwbyBXQTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idm0yX3BlZGlkb3NfPD9waHAgZWNobyAkZFsna2V5J107ID8+X2dyb3VwX2lkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCAkZ3JvdXBfaWQgKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjM3MHB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTJweCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iZXg6IDEyMDM2MzQyNTc4NTM1ODc2NC1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iPkZvcm1hdG86IDxjb2RlPlhYWFhYWFhYWFhYWFhYWC1ncm91cDwvY29kZT48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoICRkWydrZXknXSA9PT0gJ2NsaWVudGUnICkgOgogICAgICAgICAgICAgICAgICAgICAgICAkY29weV92ZW5kYXMgPSBnZXRfb3B0aW9uKCAndm0yX3BlZGlkb3NfY2xpZW50ZV9jb3B5X3ZlbmRhcycsICcwJyApOwogICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9InBhZGRpbmc6OHB4IDA7Zm9udC1zaXplOjEzcHgiPvCfk4sgQ8OzcGlhIGFvIGdydXBvIGRlIHZlbmRhczwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ2bTJfcGVkaWRvc19jbGllbnRlX2NvcHlfdmVuZGFzIiB2YWx1ZT0iMSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgY2hlY2tlZCggJGNvcHlfdmVuZGFzLCAnMScgKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjE4cHg7aGVpZ2h0OjE4cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTNweCI+RW52aWFyIGPDs3BpYSBhbyBncnVwbyBkZSB2ZW5kYXMgYXDDs3MgbyBjbGllbnRlIHJlY2ViZXIgbyBjb211bmljYWRvPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiIgc3R5bGU9Im1hcmdpbi10b3A6NnB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWFuZG8gYXRpdmFkbywgbyBncnVwbyBkZSB2ZW5kYXMgcmVjZWJlIHVtYSBjb25maXJtYcOnw6NvIGNvbSBhIG1lbnNhZ2VtIHF1ZSBmb2kgZW52aWFkYSBhbyBjbGllbnRlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzYSBvIGNhbmFsIGUgZ3J1cG8gY29uZmlndXJhZG9zIGVtIDxzdHJvbmc+8J+bkiBHcnVwbyBkZSBWZW5kYXM8L3N0cm9uZz4gYWNpbWEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8dHIgaWQ9InZtMi1wZWQtbXNnLTw/cGhwIGVjaG8gJGRbJ2tleSddOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0icGFkZGluZzo4cHggMDtmb250LXNpemU6MTNweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6MTJweCI+8J+SrCBNZW5zYWdlbTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9Im1zZ188P3BocCBlY2hvICRkWydrZXknXTsgPz4iIG5hbWU9InZtMl9wZWRpZG9zXzw/cGhwIGVjaG8gJGRbJ2tleSddOyA/Pl9tc2ciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cz0iMTEiIHN0eWxlPSJ3aWR0aDoxMDAlO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjUiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCAkbXNnICk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPC90YWJsZT4KCiAgICAgICAgICAgICAgICA8IS0tIFZhcmnDoXZlaXMgLS0+CiAgICAgICAgICAgICAgICA8ZGV0YWlscyBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPgogICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjtjb2xvcjojMjk4MGI5O2ZvbnQtc2l6ZToxM3B4O3VzZXItc2VsZWN0Om5vbmUiPvCfk4sgVmFyacOhdmVpcyBkaXNwb27DrXZlaXMgKGNsaXF1ZSBwYXJhIHZlcik8L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjhmOWZhO3BhZGRpbmc6MTJweDtib3JkZXItcmFkaXVzOjRweDttYXJnaW4tdG9wOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCAkdmFyc19pbmZvIGFzICR2YXIgPT4gJGRlc2MgKSA6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIG9uY2xpY2s9InZtMkluc2VydFZhcignPD9waHAgZWNobyAkZFsna2V5J107ID8+JywnPD9waHAgZWNobyAkdmFyOyA/PicpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iPD9waHAgZWNobyBlc2NfYXR0ciggJGRlc2MgKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO3BhZGRpbmc6M3B4IDhweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTFweDtmb250LWZhbWlseTptb25vc3BhY2U7Y3Vyc29yOnBvaW50ZXI7dXNlci1zZWxlY3Q6bm9uZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IkNsaXF1ZSBwYXJhIGluc2VyaXIiPjw/cGhwIGVjaG8gZXNjX2h0bWwoICR2YXIgKTsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIiBzdHlsZT0ibWFyZ2luLXRvcDo2cHgiPkNsaXF1ZSBlbSB1bWEgdmFyacOhdmVsIHBhcmEgaW5zZXJpciBuYSBtZW5zYWdlbSBuYSBwb3Npw6fDo28gZG8gY3Vyc29yLjwvcD4KICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KCiAgICAgICAgICAgICAgICA8IS0tIEJsb2NvIGRlIFRlc3RlIC0tPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmZGU3O2JvcmRlcjoxcHggc29saWQgI2Y5YTgyNTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjE2cHg7bWFyZ2luLXRvcDoxNnB4Ij4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTNweCI+8J+nqiBFbnZpYXIgbWVuc2FnZW0gZGUgdGVzdGU8L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzY2NjttYXJnaW46NHB4IDAgMTJweCAwIj5FbnZpYSBhIG1lbnNhZ2VtIGF0dWFsIChuw6NvIHNhbHZhKSBwYXJhIHVtIG7Dum1lcm8gZGUgdGVzdGUsIHN1YnN0aXR1aW5kbyBhcyB2YXJpw6F2ZWlzIGNvbSBkYWRvcyBkbyBwZWRpZG8gZGUgcmVmZXLDqm5jaWEuPC9wPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpmbGV4LWVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5OxIE7Dum1lcm8gZGUgdGVzdGU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ0ZXN0X3Bob25lXzw/cGhwIGVjaG8gJGRbJ2tleSddOyA/PiIgdmFsdWU9IjU1MTE5ODgxMzc1NTEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjE5MHB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6MTNweCIgcGxhY2Vob2xkZXI9IjU1MTE5OTkuLi4iPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfm5IgUGVkaWRvIGRlIHJlZmVyw6puY2lhIChJRCk8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InRlc3Rfb3JkZXJfPD9waHAgZWNobyAkZFsna2V5J107ID8+IiB2YWx1ZT0iNDM3MSIgc3R5bGU9IndpZHRoOjEwMHB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InZtMlNlbmRUZXN0KCc8P3BocCBlY2hvICRkWydrZXknXTsgPz4nKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6I2YzOWMxMjtjb2xvcjojZmZmO2JvcmRlcjpub25lO3BhZGRpbmc6OXB4IDIwcHg7Ym9yZGVyLXJhZGl1czo2cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pa2IEVudmlhciBUZXN0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0idGVzdF9yZXN1bHRfPD9waHAgZWNobyAkZFsna2V5J107ID8+IiBzdHlsZT0iZm9udC1zaXplOjEzcHgiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODg7bWFyZ2luOjEwcHggMCAwIDAiPgogICAgICAgICAgICAgICAgICAgICAgICBDYW5hbCBxdWUgc2Vyw6EgdXNhZG86IDxzdHJvbmc+PD9waHAgZWNobyBlc2NfaHRtbCggJGNoYW5uZWxzWyAkY2hhbm5lbCBdWydsYWJlbCddID8/ICRjaGFubmVsICk7ID8+PC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICggJGRbJ2hhc19ncm91cCddICkgOiA/PiDCtyBEZXN0aW5vOiA8c3Ryb25nPm7Dum1lcm8gZGUgdGVzdGU8L3N0cm9uZz4gKG7Do28gbyBncnVwbykgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KCiAgICAgICAgICAgIDwhLS0gQm90w7VlcyAtLT4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMnB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjhweDtmbGV4LXdyYXA6d3JhcCI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0idm0yX3NhdmVfcGVkaWRvcyIgY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSBidXR0b24tbGFyZ2UiPvCfkr4gU2FsdmFyIHRvZGFzIGFzIGNvbmZpZ3VyYcOnw7VlczwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyB3cF9ub25jZV91cmwoICc/cGFnZT12bTItcGVkaWRvcyZyZXN0b3JlX2RlZmF1bHRzPTEnLCAndm0yX3Jlc3RvcmVfZGVmYXVsdHMnICk7ID8+IgogICAgICAgICAgICAgICAgICAgY2xhc3M9ImJ1dHRvbiIKICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InJldHVybiBjb25maXJtKCdSZXN0YXVyYXIgdG9kYXMgYXMgbWVuc2FnZW5zIHBhcmEgbyBwYWRyw6NvIG9yaWdpbmFsPycpIj7ihqkgUmVzdGF1cmFyIHBhZHLDtWVzPC9hPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgPC9mb3JtPgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgIGZ1bmN0aW9uIHZtMkluc2VydFZhcihkZXN0aW5vLCB2YXJOYW1lKSB7CiAgICAgICAgdmFyIHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21zZ18nICsgZGVzdGlubyk7CiAgICAgICAgaWYgKCF0YSkgcmV0dXJuOwogICAgICAgIHZhciBzdGFydCA9IHRhLnNlbGVjdGlvblN0YXJ0OwogICAgICAgIHZhciBlbmQgICA9IHRhLnNlbGVjdGlvbkVuZDsKICAgICAgICB0YS52YWx1ZSAgPSB0YS52YWx1ZS5zdWJzdHJpbmcoMCwgc3RhcnQpICsgdmFyTmFtZSArIHRhLnZhbHVlLnN1YnN0cmluZyhlbmQpOwogICAgICAgIHRhLnNlbGVjdGlvblN0YXJ0ID0gdGEuc2VsZWN0aW9uRW5kID0gc3RhcnQgKyB2YXJOYW1lLmxlbmd0aDsKICAgICAgICB0YS5mb2N1cygpOwogICAgfQoKICAgIGZ1bmN0aW9uIHZtMlNlbmRUZXN0KGRlc3Rpbm8pIHsKICAgICAgICB2YXIgcGhvbmUgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0X3Bob25lXycgKyBkZXN0aW5vKS52YWx1ZS50cmltKCk7CiAgICAgICAgdmFyIG9yZGVySWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdF9vcmRlcl8nICsgZGVzdGlubykudmFsdWUudHJpbSgpOwogICAgICAgIHZhciByZXN1bHRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0X3Jlc3VsdF8nICsgZGVzdGlubyk7CiAgICAgICAgdmFyIG1zZ0VsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21zZ18nICsgZGVzdGlubyk7CiAgICAgICAgdmFyIGNoYW5uZWxFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdFtuYW1lPSJ2bTJfcGVkaWRvc18nICsgZGVzdGlubyArICdfY2hhbm5lbCJdJyk7CgogICAgICAgIGlmICghcGhvbmUgfHwgcGhvbmUucmVwbGFjZSgvXEQvZywnJykubGVuZ3RoIDwgMTApIHsKICAgICAgICAgICAgcmVzdWx0RWwudGV4dENvbnRlbnQgPSAn4p2MIE7Dum1lcm8gaW52w6FsaWRvJzsKICAgICAgICAgICAgcmVzdWx0RWwuc3R5bGUuY29sb3IgPSAncmVkJzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcmVzdWx0RWwudGV4dENvbnRlbnQgPSAn4o+zIEVudmlhbmRvLi4uJzsKICAgICAgICByZXN1bHRFbC5zdHlsZS5jb2xvciA9ICcjODg4JzsKCiAgICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAgICd2bTJfdGVzdF9zZW5kJyk7CiAgICAgICAgZmQuYXBwZW5kKCdub25jZScsICAgICc8P3BocCBlY2hvIHdwX2NyZWF0ZV9ub25jZSggJ3ZtMl90ZXN0X3NlbmQnICk7ID8+Jyk7CiAgICAgICAgZmQuYXBwZW5kKCdkZXN0aW5vJywgIGRlc3Rpbm8pOwogICAgICAgIGZkLmFwcGVuZCgncGhvbmUnLCAgICBwaG9uZSk7CiAgICAgICAgZmQuYXBwZW5kKCdvcmRlcl9pZCcsIG9yZGVySWQpOwogICAgICAgIGZkLmFwcGVuZCgnbWVzc2FnZScsICBtc2dFbCA/IG1zZ0VsLnZhbHVlIDogJycpOwogICAgICAgIGZkLmFwcGVuZCgnY2hhbm5lbCcsICBjaGFubmVsRWwgPyBjaGFubmVsRWwudmFsdWUgOiAnemFwaV83NTUxJyk7CgogICAgICAgIGZldGNoKGFqYXh1cmwsIHsgbWV0aG9kOiAnUE9TVCcsIGJvZHk6IGZkIH0pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpIHsgcmV0dXJuIHIuanNvbigpOyB9KQogICAgICAgICAgICAudGhlbihmdW5jdGlvbihqc29uKSB7CiAgICAgICAgICAgICAgICBpZiAoanNvbi5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RWwudGV4dENvbnRlbnQgPSAn4pyFIEVudmlhZG8gY29tIHN1Y2Vzc28hJzsKICAgICAgICAgICAgICAgICAgICByZXN1bHRFbC5zdHlsZS5jb2xvciA9ICdncmVlbic7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdEVsLnRleHRDb250ZW50ID0gJ+KdjCAnICsgKGpzb24uZGF0YSAmJiBqc29uLmRhdGEubWVzc2FnZSA/IGpzb24uZGF0YS5tZXNzYWdlIDogJ0Vycm8gZGVzY29uaGVjaWRvJyk7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RWwuc3R5bGUuY29sb3IgPSAncmVkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmVzdWx0RWwudGV4dENvbnRlbnQgPSAn4p2MIEZhbGhhIGRlIHJlZGUnOwogICAgICAgICAgICAgICAgcmVzdWx0RWwuc3R5bGUuY29sb3IgPSAncmVkJzsKICAgICAgICAgICAgfSk7CiAgICB9CgogICAgLy8g4pSA4pSA4pSAIHZtMlRlc3RCb3gg4oCUIGdlbmVyaWMgdGVzdCBzZW5kIGZvciBhdXRvbWHDp8O1ZXMgdGFicyDilIDilIDilIAKICAgIGZ1bmN0aW9uIHZtMlRlc3RCb3goYm94SWQsIGNoYW5uZWxLZXksIG5vbmNlLCBpc1dhYmEpIHsKICAgICAgICB2YXIgcGhvbmVFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJ0Yl8nICsgYm94SWQgKyAnX3Bob25lJyk7CiAgICAgICAgdmFyIHJlc0VsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ydGJfJyArIGJveElkICsgJ19yZXN1bHQnKTsKICAgICAgICB2YXIgcGhvbmUgICA9IHBob25lRWwgPyBwaG9uZUVsLnZhbHVlLnJlcGxhY2UoL1xEL2csICcnKSA6ICcnOwogICAgICAgIGlmICghcGhvbmUgfHwgcGhvbmUubGVuZ3RoIDwgMTApIHsKICAgICAgICAgICAgcmVzRWwudGV4dENvbnRlbnQgPSAnXHUyNzRDIE5cdTAwZmFtZXJvIGludlx1MDBlMWxpZG8gKG1cdTAwZWRuIDEwIGRcdTAwZWRnaXRvcyknOwogICAgICAgICAgICByZXNFbC5zdHlsZS5jb2xvciA9ICdyZWQnOyByZXR1cm47CiAgICAgICAgfQogICAgICAgIHJlc0VsLnRleHRDb250ZW50ID0gJ1x1MjNGMyBFbnZpYW5kby4uLic7IHJlc0VsLnN0eWxlLmNvbG9yID0gJyM4ODgnOwogICAgICAgIHZhciBmZCA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIGZkLmFwcGVuZCgnYWN0aW9uJywgICd2bTJfdGVzdF9zZW5kJyk7CiAgICAgICAgZmQuYXBwZW5kKCdub25jZScsICAgbm9uY2UpOwogICAgICAgIGZkLmFwcGVuZCgncGhvbmUnLCAgIHBob25lKTsKICAgICAgICBmZC5hcHBlbmQoJ2NoYW5uZWwnLCBjaGFubmVsS2V5KTsKICAgICAgICBpZiAoaXNXYWJhKSB7CiAgICAgICAgICAgIHZhciB0bXBsRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ydGJfJyArIGJveElkICsgJ190bXBsJyk7CiAgICAgICAgICAgIGZkLmFwcGVuZCgndGVtcGxhdGUnLCB0bXBsRWwgPyB0bXBsRWwudmFsdWUgOiAnJyk7CiAgICAgICAgICAgIGZkLmFwcGVuZCgnaXNfd2FiYScsICAnMScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBtc2dFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJ0Yl8nICsgYm94SWQgKyAnX21zZycpOwogICAgICAgICAgICBmZC5hcHBlbmQoJ21lc3NhZ2UnLCBtc2dFbCA/IG1zZ0VsLnZhbHVlIDogJycpOwogICAgICAgIH0KICAgICAgICBmZXRjaChhamF4dXJsLCB7IG1ldGhvZDogJ1BPU1QnLCBib2R5OiBmZCB9KQogICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocikgeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAgICAgICAudGhlbihmdW5jdGlvbihqKSB7CiAgICAgICAgICAgIHJlc0VsLnRleHRDb250ZW50ID0gai5zdWNjZXNzCiAgICAgICAgICAgICAgPyAnXHUyNzA1IEVudmlhZG8gY29tIHN1Y2Vzc28hJwogICAgICAgICAgICAgIDogKCdcdTI3NEMgJyArIChqLmRhdGEgJiYgai5kYXRhLm1lc3NhZ2UgPyBqLmRhdGEubWVzc2FnZSA6ICdFcnJvIGRlc2NvbmhlY2lkbycpKTsKICAgICAgICAgICAgcmVzRWwuc3R5bGUuY29sb3IgPSBqLnN1Y2Nlc3MgPyAnZ3JlZW4nIDogJ3JlZCc7CiAgICAgICAgICB9KQogICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXNFbC50ZXh0Q29udGVudCA9ICdcdTI3NEMgRmFsaGEgZGUgcmVkZSc7CiAgICAgICAgICAgIHJlc0VsLnN0eWxlLmNvbG9yID0gJ3JlZCc7CiAgICAgICAgICB9KTsKICAgIH0KICAgIDwvc2NyaXB0PgogICAgPD9waHAKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEdSVVBPIFBST01PIFBBR0UgKHdyYXBwZXIgVjIg4oCUIGzDqi9ncmF2YSBhcyBtZXNtYXMgdm1fZ3BfKiBvcHRpb25zKQovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2dydXBvX3Byb21vX3BhZ2UoKSB7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSApIHJldHVybjsKCiAgICAkc2F2ZWQgPSBmYWxzZTsKICAgIGlmICggaXNzZXQoJF9QT1NUWyd2bTJfZ3Bfc2F2ZSddKSAmJiBjaGVja19hZG1pbl9yZWZlcmVyKCd2bTJfZ3Bfc2F2ZScpICkgewogICAgICAgIHVwZGF0ZV9vcHRpb24oICd2bV9ncF9ncm91cF9pZCcsICAgICAgICAgICAgc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ3ZtX2dwX2dyb3VwX2lkJ10gPz8gJycpICk7CiAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtX2dwX2tpbGxfc3dpdGNoJywgICAgICAgICBpc3NldCgkX1BPU1RbJ3ZtX2dwX2tpbGxfc3dpdGNoJ10pID8gJzEnIDogJzAnICk7CiAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtX2dwX2RlbGF5X3NlY29uZHMnLCAgICAgICBpbnR2YWwoJF9QT1NUWyd2bV9ncF9kZWxheV9zZWNvbmRzJ10gPz8gMzApICk7CiAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtX2dwX3dlbGNvbWVfa2lsbCcsICAgICAgICBpc3NldCgkX1BPU1RbJ3ZtX2dwX3dlbGNvbWVfa2lsbCddKSA/ICcxJyA6ICcwJyApOwogICAgICAgIHVwZGF0ZV9vcHRpb24oICd2bV9ncF9zaWxlbmNlX2Zyb20nLCAgICAgICAgaW50dmFsKCRfUE9TVFsndm1fZ3Bfc2lsZW5jZV9mcm9tJ10gPz8gOCkgKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm1fZ3Bfc2lsZW5jZV91bnRpbCcsICAgICAgIGludHZhbCgkX1BPU1RbJ3ZtX2dwX3NpbGVuY2VfdW50aWwnXSA/PyAyMikgKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm1fZ3BfcHJvbW9fa2lsbCcsICAgICAgICAgIGlzc2V0KCRfUE9TVFsndm1fZ3BfcHJvbW9fa2lsbCddKSA/ICcxJyA6ICcwJyApOwogICAgICAgIHVwZGF0ZV9vcHRpb24oICd2bV9ncF9wcm9tb19zaWxlbmNlX2Zyb20nLCAgaW50dmFsKCRfUE9TVFsndm1fZ3BfcHJvbW9fc2lsZW5jZV9mcm9tJ10gPz8gOSkgKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm1fZ3BfcHJvbW9fc2lsZW5jZV91bnRpbCcsIGludHZhbCgkX1BPU1RbJ3ZtX2dwX3Byb21vX3NpbGVuY2VfdW50aWwnXSA/PyAyMikgKTsKICAgICAgICAkc2F2ZWQgPSB0cnVlOwogICAgfQoKICAgIC8vIEzDqiB2YWxvcmVzIGF0dWFpcwogICAgJGdyb3VwX2lkICAgICAgID0gZ2V0X29wdGlvbigndm1fZ3BfZ3JvdXBfaWQnLCAnJyk7CiAgICAka2lsbF9zd2l0Y2ggICAgPSBnZXRfb3B0aW9uKCd2bV9ncF9raWxsX3N3aXRjaCcsICcwJykgPT09ICcxJzsKICAgICRkZWxheSAgICAgICAgICA9IGludHZhbChnZXRfb3B0aW9uKCd2bV9ncF9kZWxheV9zZWNvbmRzJywgMzApKTsKICAgICR3ZWxfa2lsbCAgICAgICA9IGdldF9vcHRpb24oJ3ZtX2dwX3dlbGNvbWVfa2lsbCcsICcwJykgPT09ICcxJzsKICAgICR3ZWxfZnJvbSAgICAgICA9IGludHZhbChnZXRfb3B0aW9uKCd2bV9ncF9zaWxlbmNlX2Zyb20nLCA4KSk7CiAgICAkd2VsX3VudGlsICAgICAgPSBpbnR2YWwoZ2V0X29wdGlvbigndm1fZ3Bfc2lsZW5jZV91bnRpbCcsIDIyKSk7CiAgICAkcHJvbW9fa2lsbCAgICAgPSBnZXRfb3B0aW9uKCd2bV9ncF9wcm9tb19raWxsJywgJzAnKSA9PT0gJzEnOwogICAgJHByb21vX2Zyb20gICAgID0gaW50dmFsKGdldF9vcHRpb24oJ3ZtX2dwX3Byb21vX3NpbGVuY2VfZnJvbScsIDkpKTsKICAgICRwcm9tb191bnRpbCAgICA9IGludHZhbChnZXRfb3B0aW9uKCd2bV9ncF9wcm9tb19zaWxlbmNlX3VudGlsJywgMjIpKTsKCiAgICAvLyBTdGF0dXMgYW8gdml2bwogICAgJHR6ICA9IG5ldyBEYXRlVGltZVpvbmUoJ0FtZXJpY2EvU2FvX1BhdWxvJyk7CiAgICAkbm93ID0gbmV3IERhdGVUaW1lKCdub3cnLCAkdHopOwogICAgJGggICA9IChpbnQpICRub3ctPmZvcm1hdCgnRycpOwoKICAgICR3ZWxfYWN0aXZlICAgPSAhICRraWxsX3N3aXRjaCAmJiAhICR3ZWxfa2lsbCAmJiAkaCA+PSAkd2VsX2Zyb20gJiYgJGggPCAkd2VsX3VudGlsOwogICAgJHByb21vX2FjdGl2ZSA9ICEgJGtpbGxfc3dpdGNoICYmICEgJHByb21vX2tpbGwgJiYgJGggPj0gJHByb21vX2Zyb20gJiYgJGggPCAkcHJvbW9fdW50aWw7CgogICAgZnVuY3Rpb24gdm0yX2dwX3N0YXR1c19iYWRnZSggJGFjdGl2ZSApIHsKICAgICAgICBpZiAoJGFjdGl2ZSkgcmV0dXJuICc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojMjdhZTYwO2NvbG9yOiNmZmY7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwIj7inIUgQVRJVk88L3NwYW4+JzsKICAgICAgICByZXR1cm4gJzxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNlNzRjM2M7Y29sb3I6I2ZmZjtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDAiPvCflLQgU0lMRU5DSUFETzwvc3Bhbj4nOwogICAgfQogICAgPz4KICAgIDxkaXYgY2xhc3M9IndyYXAgdm0yLXdyYXAiPgogICAgICAgIDxoMSBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O21hcmdpbi1ib3R0b206MjBweCI+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MjZweCI+8J+SrDwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+R3J1cG8gUHJvbW88L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItdmVyc2lvbi1iYWRnZSIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2JhY2tncm91bmQ6IzhlNDRhZDtjb2xvcjojZmZmO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLWxlZnQ6NHB4Ij52MS4wPC9zcGFuPgogICAgICAgIDwvaDE+CgogICAgICAgIDw/cGhwIGlmICgkc2F2ZWQpOiA/PgogICAgICAgIDxkaXYgY2xhc3M9Im5vdGljZSBub3RpY2Utc3VjY2VzcyBpcy1kaXNtaXNzaWJsZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+PHA+4pyFIENvbmZpZ3VyYcOnw7VlcyBzYWx2YXMhPC9wPjwvZGl2PgogICAgICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgICAgICA8P3BocCBpZiAoJGtpbGxfc3dpdGNoKTogPz4KICAgICAgICA8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLWVycm9yIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICAgICAgPHA+PHN0cm9uZz7wn5S0IEtpbGwgU3dpdGNoIEFUSVZPPC9zdHJvbmc+IOKAlCB0b2RvcyBvcyBlbnZpb3MgZG8gR3J1cG8gUHJvbW8gZXN0w6NvIHBhdXNhZG9zLjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KCiAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIj4KICAgICAgICAgICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3ZtMl9ncF9zYXZlJyk7ID8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InZtMl9ncF9zYXZlIiB2YWx1ZT0iMSI+CgogICAgICAgICAgICA8IS0tIFNUQVRVUyBBTyBWSVZPIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY2FyZCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjBweDtiYWNrZ3JvdW5kOiNmOGY5ZmE7Ym9yZGVyOjFweCBzb2xpZCAjZGVlMmU2Ij4KICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOjAgMCAxMnB4O2ZvbnQtc2l6ZToxNXB4Ij7wn5OhIFN0YXR1cyBhZ29yYSAoPD9waHAgZWNobyAkbm93LT5mb3JtYXQoJ0g6aScpOyA/Pik8L2gzPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoyMHB4O2ZsZXgtd3JhcDp3cmFwIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6IzU1NSI+8J+RiyBCb2FzLXZpbmRhczo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gdm0yX2dwX3N0YXR1c19iYWRnZSgkd2VsX2FjdGl2ZSk7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiM1NTUiPvCflKUgUHJvbW9zOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyB2bTJfZ3Bfc3RhdHVzX2JhZGdlKCRwcm9tb19hY3RpdmUpOyA/PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBDT05GSUdVUkHDh8OVRVMgR0VSQUlTIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY2FyZCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjBweCI+CiAgICAgICAgICAgICAgICA8aDMgc3R5bGU9Im1hcmdpbjowIDAgMTZweDtmb250LXNpemU6MTZweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHgiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPuKame+4jzwvc3Bhbj4gQ29uZmlndXJhw6fDtWVzIEdlcmFpcwogICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZm9ybS10YWJsZSIgc3R5bGU9Im1heC13aWR0aDo2MDBweCI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjIwMHB4O3BhZGRpbmc6MTBweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwIj7wn4aUIElEIGRvIEdydXBvIFdoYXRzQXBwPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ2bV9ncF9ncm91cF9pZCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGdyb3VwX2lkKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7bWF4LXdpZHRoOjM4MHB4IiBwbGFjZWhvbGRlcj0iRXg6IDEyMDM2MzQyMjY0Mjc4NTY1OS1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iPklEIGRvIGdydXBvIFdBIHBhcmEgZW52aW8gZGUgcHJvbW9zIGUgYm9hcy12aW5kYXMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9InBhZGRpbmc6MTBweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5S0IEtpbGwgU3dpdGNoIEdlcmFsPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2N1cnNvcjpwb2ludGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InZtX2dwX2tpbGxfc3dpdGNoIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCgka2lsbF9zd2l0Y2gpOyA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5QYXVzYXIgPHN0cm9uZz5UT0RPUzwvc3Ryb25nPiBvcyBlbnZpb3MgKGJvYXMtdmluZGFzICsgcHJvbW9zKTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0icGFkZGluZzoxMHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDAiPuKPse+4jyBEZWxheSBlbnRyZSBtZW5zYWdlbnM8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJ2bV9ncF9kZWxheV9zZWNvbmRzIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkZGVsYXkpOyA/PiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPSI1IiBtYXg9IjMwMCIgc3R5bGU9IndpZHRoOjgwcHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojNTU1Ij5zZWd1bmRvczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5QYXVzYSBlbnRyZSBlbnZpb3MgY29uc2VjdXRpdm9zIHBhcmEgZXZpdGFyIHNwYW0uPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gQU5USS1TUEFNIEJPQVMtVklOREFTIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY2FyZCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjBweDtib3JkZXItbGVmdDo0cHggc29saWQgI2YzOWMxMiI+CiAgICAgICAgICAgICAgICA8aDMgc3R5bGU9Im1hcmdpbjowIDAgNHB4O2ZvbnQtc2l6ZToxNnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+8J+Rizwvc3Bhbj4gQW50aS1TcGFtIOKAlCBCb2FzLVZpbmRhcwogICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46MCAwIDE2cHg7Y29sb3I6Izc3Nztmb250LXNpemU6MTNweCI+Q29udHJvbGEgcXVhbmRvIGEgbWVuc2FnZW0gZGUgYm9hcy12aW5kYXMgcGFyYSBub3ZvcyBtZW1icm9zIHBvZGUgc2VyIGVudmlhZGEuPC9wPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJmb3JtLXRhYmxlIiBzdHlsZT0ibWF4LXdpZHRoOjYwMHB4Ij4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MjAwcHg7cGFkZGluZzoxMHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDAiPuKPuO+4jyBQYXVzYXIgQm9hcy1WaW5kYXM8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idm1fZ3Bfd2VsY29tZV9raWxsIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCgkd2VsX2tpbGwpOyA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EZXNhdGl2YXIgZW52aW8gZGUgYm9hcy12aW5kYXMgdGVtcG9yYXJpYW1lbnRlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjEwcHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+UhyBTaWzDqm5jaW8g4oCUIG7Do28gZW52aWFyIGFudGVzIGRlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm1fZ3Bfc2lsZW5jZV9mcm9tIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkd2VsX2Zyb20pOyA/PiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPSIwIiBtYXg9IjIzIiBzdHlsZT0id2lkdGg6NzBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiM1NTUiPmg8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjEwcHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+UhyBTaWzDqm5jaW8g4oCUIG7Do28gZW52aWFyIGEgcGFydGlyIGRlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm1fZ3Bfc2lsZW5jZV91bnRpbCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHdlbF91bnRpbCk7ID8+IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjAiIG1heD0iMjMiIHN0eWxlPSJ3aWR0aDo3MHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6IzU1NSI+aDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5Cb2FzLXZpbmRhcyBlbnZpYWRhcyBhcGVuYXMgZW50cmUgPD9waHAgZWNobyAkd2VsX2Zyb207ID8+aCBlIDw/cGhwIGVjaG8gJHdlbF91bnRpbDsgPz5oLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEFOVEktU1BBTSBQUk9NT1MgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1jYXJkIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToyMHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjZTc0YzNjIj4KICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOjAgMCA0cHg7Zm9udC1zaXplOjE2cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4Ij4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj7wn5SlPC9zcGFuPiBBbnRpLVNwYW0g4oCUIFByb21vcwogICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46MCAwIDE2cHg7Y29sb3I6Izc3Nztmb250LXNpemU6MTNweCI+SmFuZWxhIGRlIGVudmlvIGRhcyBwcm9tb3MgYXV0b23DoXRpY2FzIHBhcmEgbyBncnVwby48L3A+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9ImZvcm0tdGFibGUiIHN0eWxlPSJtYXgtd2lkdGg6NjAwcHgiPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoyMDBweDtwYWRkaW5nOjEwcHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCI+4o+477iPIFBhdXNhciBQcm9tb3M8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idm1fZ3BfcHJvbW9fa2lsbCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJHByb21vX2tpbGwpOyA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EZXNhdGl2YXIgZW52aW8gZGUgcHJvbW9zIHRlbXBvcmFyaWFtZW50ZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0icGFkZGluZzoxMHB4IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDAiPvCflZAgSmFuZWxhIOKAlCBuw6NvIGVudmlhciBhbnRlcyBkZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9InZtX2dwX3Byb21vX3NpbGVuY2VfZnJvbSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHByb21vX2Zyb20pOyA/PiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPSIwIiBtYXg9IjIzIiBzdHlsZT0id2lkdGg6NzBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiM1NTUiPmg8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjEwcHggMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+VkCBKYW5lbGEg4oCUIG7Do28gZW52aWFyIGEgcGFydGlyIGRlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm1fZ3BfcHJvbW9fc2lsZW5jZV91bnRpbCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHByb21vX3VudGlsKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj0iMCIgbWF4PSIyMyIgc3R5bGU9IndpZHRoOjcwcHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojNTU1Ij5oPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iPlByb21vcyBhdXRvbcOhdGljYXMgc8OzIGRpc3BhcmFtIGRlbnRybyBkZXNzYSBqYW5lbGEuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5IiBzdHlsZT0iZm9udC1zaXplOjE0cHg7cGFkZGluZzo4cHggMjBweCI+CiAgICAgICAgICAgICAgICDwn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXMKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9mb3JtPgoKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMnB4IDE2cHg7YmFja2dyb3VuZDojZmZmM2NkO2JvcmRlcjoxcHggc29saWQgI2ZmYzEwNztib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtjb2xvcjojODU2NDA0Ij4KICAgICAgICAgICAg8J+SoSA8c3Ryb25nPk5vdGE6PC9zdHJvbmc+IEVzdGEgcMOhZ2luYSBnZXJlbmNpYSBhcyBtZXNtYXMgY29uZmlndXJhw6fDtWVzIGRvIHBsdWdpbiA8ZW0+Vml2YU1haXMg4oCUIEdydXBvIFByb21vIEFkbWluPC9lbT4uCiAgICAgICAgICAgIEFzIGFsdGVyYcOnw7VlcyBhcXVpIHJlZmxldGVtIGltZWRpYXRhbWVudGUgbm8gY29tcG9ydGFtZW50byBkbyBncnVwby4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPD9waHAKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFNFVFRJTkdTIFBBR0UKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKLy8g8J+SrCBXQSBSRUNPVkVSWSDigJQgR2VzdMOjbyBjb21wbGV0YSBpbnRlZ3JhZGEgbm8gVjIKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCmZ1bmN0aW9uIHZtMl9yZW5kZXJfY2FycmluaG9fdGFiKCkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJHRhYmxlID0gJHdwZGItPnByZWZpeCAuICd2bV93YV9jYXB0dXJlcyc7CgogICAgLy8gVmVyaWZpY2FyIHNlIHRhYmVsYSBleGlzdGUKICAgIGlmICgkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAnJHRhYmxlJyIpICE9PSAkdGFibGUpIHsKICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmYzY2Q7Ym9yZGVyOjFweCBzb2xpZCAjZmZjMTA3O3BhZGRpbmc6MjBweDtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luOjIwcHggMCI+JzsKICAgICAgICBlY2hvICc8aDMgc3R5bGU9Im1hcmdpbjowIDAgOHB4Ij7imqDvuI8gUGx1Z2luIFdBIFJlY292ZXJ5IG7Do28gZW5jb250cmFkbzwvaDM+JzsKICAgICAgICBlY2hvICc8cCBzdHlsZT0ibWFyZ2luOjAiPkF0aXZlIG8gcGx1Z2luIDxzdHJvbmc+Vml2YU1haXMgV0EgQ2FydCBSZWNvdmVyeTwvc3Ryb25nPiBwYXJhIHVzYXIgZXN0ZSBtw7NkdWxvLjwvcD4nOwogICAgICAgIGVjaG8gJzwvZGl2Pic7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRmaWx0ZXIgPSBpc3NldCgkX0dFVFsndm0yX3dhX3N0YXR1cyddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJF9HRVRbJ3ZtMl93YV9zdGF0dXMnXSkgOiAndG9kYXknOwogICAgJHRvZGF5X2RhdGUgPSBjdXJyZW50X3RpbWUoJ1ktbS1kJyk7IC8vIHVzYSB0aW1lem9uZSBkbyBXb3JkUHJlc3MgKEJyYXNpbCwgR01ULTMpCiAgICBpZiAoJGZpbHRlciA9PT0gJ3RvZGF5JykgewogICAgICAgICR3aGVyZSA9ICR3cGRiLT5wcmVwYXJlKCIgV0hFUkUgREFURShjYXB0dXJlZF9hdCkgPSAlcyIsICR0b2RheV9kYXRlKTsKICAgIH0gZWxzZWlmICgkZmlsdGVyICE9PSAnYWxsJykgewogICAgICAgICR3aGVyZSA9ICR3cGRiLT5wcmVwYXJlKCIgV0hFUkUgc3RhdHVzPSVzIiwgJGZpbHRlcik7CiAgICB9IGVsc2UgewogICAgICAgICR3aGVyZSA9ICcnOwogICAgfQogICAgJHJvd3MgICA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0VMRUNUICogRlJPTSB7JHRhYmxlfXskd2hlcmV9IE9SREVSIEJZIGNhcHR1cmVkX2F0IERFU0MgTElNSVQgMzAwIik7CgogICAgJHRvdGFsICAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSIpOwogICAgJHRvZGF5X2NudCA9IChpbnQpJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBEQVRFKGNhcHR1cmVkX2F0KSA9ICVzIiwgJHRvZGF5X2RhdGUpKTsKICAgICRzZW50ICAgICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgc3RhdHVzPSdzZW50JyIpOwogICAgJGZhaWxlZCAgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXM9J2ZhaWxlZCciKTsKICAgICRwZW5kaW5nICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgc3RhdHVzPSdwZW5kaW5nJyIpOwogICAgJGNhbmNlbGxlZCA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXM9J2NhbmNlbGxlZCciKTsKICAgICRleHBpcmVkICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgc3RhdHVzPSdleHBpcmVkJyIpOwogICAgJGRuZF9za2lwICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXM9J2RuZF9za2lwJyIpOwoKICAgICR2YWxfcGVuZGluZyAgID0gKGZsb2F0KSgkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIFNVTShjYXJ0X3RvdGFsKSBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXM9J3BlbmRpbmcnIikgPzogMCk7CiAgICAkdmFsX3NlbnQgICAgICA9IChmbG9hdCkoJHdwZGItPmdldF92YXIoIlNFTEVDVCBTVU0oY2FydF90b3RhbCkgRlJPTSAkdGFibGUgV0hFUkUgc3RhdHVzPSdzZW50JyIpID86IDApOwogICAgJHZhbF9jYW5jZWxsZWQgPSAoZmxvYXQpKCR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgU1VNKGNhcnRfdG90YWwpIEZST00gJHRhYmxlIFdIRVJFIHN0YXR1cz0nY2FuY2VsbGVkJyIpID86IDApOwoKICAgIC8vIENvbmZpZwogICAgJGNoYW5uZWwgICAgID0gZ2V0X29wdGlvbigndm1fd2Ffc2VuZF9jaGFubmVsJywgJ3phcGlfMTg4NicpOwogICAgJGtpbGxfc3dpdGNoID0gKGJvb2wpZ2V0X29wdGlvbigndm1fd2Ffa2lsbF9zd2l0Y2gnLCAwKTsKICAgICRiYXRjaF9zaXplICA9IChpbnQpZ2V0X29wdGlvbigndm1fd2FfYmF0Y2hfc2l6ZScsIDIwKTsKICAgICRxdWlldF9zdGFydCA9IChpbnQpZ2V0X29wdGlvbigndm1fd2FfcXVpZXRfc3RhcnQnLCA4KTsKICAgICRxdWlldF9lbmQgICA9IChpbnQpZ2V0X29wdGlvbigndm1fd2FfcXVpZXRfZW5kJywgMjApOwogICAgJGludGVydmFsICAgID0gKGludClnZXRfb3B0aW9uKCd2bV93YV9pbnRlcnZhbF9zZWMnLCAzKTsKICAgICRjdXN0b21fbXNnICA9IGdldF9vcHRpb24oJ3ZtX3dhX3JlY292ZXJ5X21lc3NhZ2UnLCAnJyk7CgogICAgJG5vbmNlICAgICA9IHdwX2NyZWF0ZV9ub25jZSgndm1fd2FfcmVzZW5kJyk7CiAgICAkY2ZnX25vbmNlID0gd3BfY3JlYXRlX25vbmNlKCd2bTJfd2FfY29uZmlnJyk7CiAgICAkYmFzZV91cmwgID0gYWRtaW5fdXJsKCdhZG1pbi5waHA/cGFnZT12bTItYXV0b21hY29lcyZ0YWI9Y2FycmluaG8nKTsKICAgICRpc193YWJhICAgPSBpc3NldCggdm0yX2NoYW5uZWxzKClbJGNoYW5uZWxdICkgJiYgKCB2bTJfY2hhbm5lbHMoKVskY2hhbm5lbF1bJ3R5cGUnXSA/PyAnemFwaScgKSA9PT0gJ3dhYmEnOwogICAgJHdhX3RwbCAgICA9IGdldF9vcHRpb24oICd2bV93YV93YWJhX3RlbXBsYXRlJywgJ3JlY3VwZXJhX2NhcnJpbmhvX3dvbycgKTsKCiAgICAkY2hhbm5lbF9sYWJlbHMgPSB2bTJfY2hhbm5lbF9sYWJlbHMoKTsKICAgICRjaGFubmVsX2xhYmVsICA9ICRjaGFubmVsX2xhYmVsc1skY2hhbm5lbF0gPz8gJGNoYW5uZWw7CgogICAgJHRheGFfZW52aW8gPSAkdG90YWwgPiAwID8gcm91bmQoKCRzZW50IC8gJHRvdGFsKSAqIDEwMCkgOiAwOwogICAgJHRheGFfY29udiAgPSAkc2VudCAgPiAwID8gcm91bmQoKCRjYW5jZWxsZWQgLyAkc2VudCkgKiAxMDApIDogMDsKCiAgICA/PgogICAgPHN0eWxlPgogICAgLyog4pSA4pSAIENhcnJpbmhvIG1vYmlsZS1maXJzdCDilIDilIAgKi8KICAgIC52bTItd2EtY2ZnLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNHB4OwogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7CiAgICAgICAgLnZtMi13YS1jZmctZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9CiAgICB9CiAgICAvKiBUYWJlbGE6IGVzY29uZGVyIGNvbHVuYXMgc2VjdW5kw6FyaWFzIG5vIG1vYmlsZSAqLwogICAgQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7CiAgICAgICAgLnZtMi13YS10YWJsZSB0aDpudGgtY2hpbGQoMSksCiAgICAgICAgLnZtMi13YS10YWJsZSB0ZDpudGgtY2hpbGQoMSksCiAgICAgICAgLnZtMi13YS10YWJsZSB0aDpudGgtY2hpbGQoNyksCiAgICAgICAgLnZtMi13YS10YWJsZSB0ZDpudGgtY2hpbGQoNyksCiAgICAgICAgLnZtMi13YS10YWJsZSB0aDpudGgtY2hpbGQoOSksCiAgICAgICAgLnZtMi13YS10YWJsZSB0ZDpudGgtY2hpbGQoOSksCiAgICAgICAgLnZtMi13YS10YWJsZSB0aDpudGgtY2hpbGQoMTApLAogICAgICAgIC52bTItd2EtdGFibGUgdGQ6bnRoLWNoaWxkKDEwKSB7IGRpc3BsYXk6IG5vbmU7IH0KICAgICAgICAudm0yLXdhLXRhYmxlIHsgZm9udC1zaXplOiAxMXB4OyB9CiAgICAgICAgLnZtMi13YS10YWJsZSB0aCwgLnZtMi13YS10YWJsZSB0ZCB7IHBhZGRpbmc6IDZweCA4cHggIWltcG9ydGFudDsgfQogICAgfQogICAgPC9zdHlsZT4KICAgIDw/cGhwIGlmICgka2lsbF9zd2l0Y2gpOiA/PgogICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZGMzNTQ1O2NvbG9yOiNmZmY7cGFkZGluZzoxMnB4IDIwcHg7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbjowIDAgMTZweDtmb250LXNpemU6MTRweCI+CiAgICAgICAg8J+bkSA8c3Ryb25nPkVOVklPUyBQQVJBRE9TPC9zdHJvbmc+IOKAlCBLaWxsIHN3aXRjaCBhdGl2by4gRGVzYXRpdmUgZW0g4pqZ77iPIENvbmZpZ3VyYcOnw7VlcyBhYmFpeG8uCiAgICA8L2Rpdj4KICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgIDwhLS0g4pSA4pSAIEtQSSBDYXJkcyDilIDilIAgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpcyIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDE2MHB4LDFmcikpIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBvbmNsaWNrPSJ2bTJXYUZpbHRlcignYWxsJykiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgIzM0NDk1ZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn5OmIFRvdGFsIENhcHR1cmFzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj48P3BocCBlY2hvICR0b3RhbDsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgbmV1dHJhbCI+dG9kb3Mgb3MgcmVnaXN0cm9zPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgb25jbGljaz0idm0yV2FGaWx0ZXIoJ3NlbnQnKSIgc3R5bGU9ImJvcmRlci1sZWZ0OjRweCBzb2xpZCAjMjdhZTYwIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPuKchSBFbnZpYWRvczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSIgc3R5bGU9ImNvbG9yOiMyN2FlNjAiPjw/cGhwIGVjaG8gJHNlbnQ7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPlIkIDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkdmFsX3NlbnQsMiwnLCcsJy4nKTsgPz48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBvbmNsaWNrPSJ2bTJXYUZpbHRlcigncGVuZGluZycpIiBzdHlsZT0iYm9yZGVyLWxlZnQ6NHB4IHNvbGlkICNlNjdlMjIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+4o+zIFBlbmRlbnRlczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSIgc3R5bGU9ImNvbG9yOiNlNjdlMjIiPjw/cGhwIGVjaG8gJHBlbmRpbmc7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPlIkIDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkdmFsX3BlbmRpbmcsMiwnLCcsJy4nKTsgPz48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTIta3BpIiBvbmNsaWNrPSJ2bTJXYUZpbHRlcignZmFpbGVkJykiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgI2MwMzkyYiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7inYwgRmFsaG91PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIiBzdHlsZT0iY29sb3I6I2MwMzkyYiI+PD9waHAgZWNobyAkZmFpbGVkOyA/PjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZWx0YSBuZXV0cmFsIj5lcnJvcyBkZSBlbnZpbzwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIG9uY2xpY2s9InZtMldhRmlsdGVyKCdjYW5jZWxsZWQnKSIgc3R5bGU9ImJvcmRlci1sZWZ0OjRweCBzb2xpZCAjMjdhZTYwIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwiPvCfm5IgQ29udmVydGlkb3M8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiIHN0eWxlPSJjb2xvcjojMjdhZTYwIj48P3BocCBlY2hvICRjYW5jZWxsZWQ7ID8+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPlIkIDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkdmFsX2NhbmNlbGxlZCwyLCcsJywnLicpOyA/PjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgIzliNTliNjtjdXJzb3I6ZGVmYXVsdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn5OKIFRheGEgZGUgRW52aW88L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsdWUiIHN0eWxlPSJjb2xvcjojOWI1OWI2Ij48P3BocCBlY2hvICR0YXhhX2VudmlvOyA/PiU8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVsdGEgbmV1dHJhbCI+ZW52aWFkb3MgLyB0b3RhbDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgI2YzOWMxMjtjdXJzb3I6ZGVmYXVsdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj7wn46vIFRheGEgQ29udmVyc8OjbzwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWx1ZSIgc3R5bGU9ImNvbG9yOiNmMzljMTIiPjw/cGhwIGVjaG8gJHRheGFfY29udjsgPz4lPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbHRhIG5ldXRyYWwiPmNvbXByYXJhbSBhcMOzcyBlbnZpbzwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idm0yLWdyaWQyIj4KCiAgICA8IS0tIOKUgOKUgCBDb25maWcg4pSA4pSAIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWNhcmQiPgogICAgICAgIDxoMz7impnvuI8gQ29uZmlndXJhw6fDtWVzPC9oMz4KCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXNlY3Rpb24tbGFiZWwiPvCfk6EgQ2FuYWwgZGUgRW52aW88L2Rpdj4KICAgICAgICAgICAgPD9waHAgZWNobyB2bTJfY2hhbm5lbF9yYWRpb19odG1sKCAndm0yX3dhX2NoYW5uZWwnLCAkY2hhbm5lbCApOyA/PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9InZtMi13YS10cGwtcm93IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4Ozw/cGhwIGVjaG8gJGlzX3dhYmEgPyAnJyA6ICdkaXNwbGF5Om5vbmUnOyA/PiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1zZWN0aW9uLWxhYmVsIj7wn5OLIFRlbXBsYXRlIFdBQkE8L2Rpdj4KICAgICAgICAgICAgPHNlbGVjdCBpZD0idm0yLXdhLXRwbC1zZWwiIHN0eWxlPSJ3aWR0aDoxMDAlO21heC13aWR0aDo0MjBweDtwYWRkaW5nOjZweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4Ij4KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gdm0yX3dhYmFfdGVtcGxhdGVfb3B0aW9uc19odG1sKCAkd2FfdHBsICk7ID8+CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItd2EtY2ZnLWdyaWQiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXNlY3Rpb24tbGFiZWwiPvCfm5EgS2lsbCBTd2l0Y2g8L2Rpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ2bTItd2Eta3MiIDw/cGhwIGNoZWNrZWQoJGtpbGxfc3dpdGNoKTsgPz4+CiAgICAgICAgICAgICAgICAgICAgUGF1c2FyIHRvZG9zIG9zIGVudmlvcwogICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItc2VjdGlvbi1sYWJlbCI+8J+TpiBNc2dzIHBvciBsb3RlPC9kaXY+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idm0yLXdhLWJhdGNoIiB2YWx1ZT0iPD9waHAgZWNobyAkYmF0Y2hfc2l6ZTsgPz4iIG1pbj0iMSIgbWF4PSIxMDAiCiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjcwcHg7cGFkZGluZzo0cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweCI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXNlY3Rpb24tbGFiZWwiPvCflIcgU2lsw6puY2lvIGEgcGFydGlyIGRhczwvZGl2PgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InZtMi13YS1xc3RhcnQiIHZhbHVlPSI8P3BocCBlY2hvICRxdWlldF9zdGFydDsgPz4iIG1pbj0iMCIgbWF4PSIyMyIKICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6NjBweDtwYWRkaW5nOjRweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4Ij5oCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXNlY3Rpb24tbGFiZWwiPvCflIcgU2lsw6puY2lvIGF0w6k8L2Rpdj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ2bTItd2EtcWVuZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJHF1aWV0X2VuZDsgPz4iIG1pbj0iMCIgbWF4PSIyMyIKICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6NjBweDtwYWRkaW5nOjRweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4Ij5oCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLXNlY3Rpb24tbGFiZWwiPuKPsSBJbnRlcnZhbG8gZW50cmUgZW52aW9zPC9kaXY+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0idm0yLXdhLWludGVydmFsIiB2YWx1ZT0iPD9waHAgZWNobyAkaW50ZXJ2YWw7ID8+IiBtaW49IjAiIG1heD0iNjAiCiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjYwcHg7cGFkZGluZzo0cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweCI+IHNlZwogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5IiBvbmNsaWNrPSJ2bTJXYVNhdmVDb25maWcoKSIgaWQ9InZtMi13YS1zYXZlLWNmZy1idG4iPgogICAgICAgICAgICDwn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXMKICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8c3BhbiBpZD0idm0yLXdhLWNmZy1zdGF0dXMiIHN0eWxlPSJtYXJnaW4tbGVmdDoxMHB4O2ZvbnQtc2l6ZToxM3B4Ij48L3NwYW4+CiAgICA8L2Rpdj4KCiAgICA8IS0tIOKUgOKUgCBNZW5zYWdlbSDilIDilIAgLS0+CiAgICA8ZGl2IGlkPSJ2bTItd2EtbXNnLWNhcmQiIHN0eWxlPSI8P3BocCBlY2hvICRpc193YWJhID8gJ2Rpc3BsYXk6bm9uZScgOiAnJzsgPz4iPgogICAgPGRpdiBjbGFzcz0idm0yLWNhcmQiPgogICAgICAgIDxoMz7inI/vuI8gTWVuc2FnZW0gZGUgUmVjdXBlcmHDp8OjbzwvaDM+CiAgICAgICAgPHAgc3R5bGU9ImNvbG9yOiM4ODg7Zm9udC1zaXplOjEycHg7bWFyZ2luOjAgMCA4cHgiPgogICAgICAgICAgICBQbGFjZWhvbGRlcnM6IDxjb2RlPntub21lfTwvY29kZT4gPGNvZGU+e3Byb2R1dG99PC9jb2RlPiA8Y29kZT57dmFsb3J9PC9jb2RlPiA8Y29kZT57bGlua308L2NvZGU+CiAgICAgICAgPC9wPgogICAgICAgIDw/cGhwCiAgICAgICAgJGRlZmF1bHRfbXNnID0gIk9pIHtub21lfSEgQXF1aSDDqSBkYSBWaXZhTWFpcyBFdmVudG9zIPCfjolcblxuVmkgcXVlIHZvY8OqIHNlIGludGVyZXNzb3UgcG9yICp7cHJvZHV0b30qIG1hcyBuw6NvIGZpbmFsaXpvdSBhIHJlc2VydmEuXG5cblBvc3NvIHRlIGFqdWRhciBhIGNvbmNsdWlyPyBTdWEgdmFnYSBhaW5kYSBlc3TDoSBkaXNwb27DrXZlbCEg8J+OilxuXG7wn5GJIEZpbmFsaXplIGFxdWk6IHtsaW5rfVxuXG5BdGVuZGltZW50bzogaHR0cHM6Ly93YS5tZS81NTExOTQ3NzcxODg2IjsKICAgICAgICA/PgogICAgICAgIDx0ZXh0YXJlYSBpZD0idm0yLXdhLW1zZyIgcm93cz0iOCIKICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7Zm9udC1zaXplOjEzcHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjhweCIKICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGRlZmF1bHRfbXNnKTsgPz4iPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRjdXN0b21fbXNnKTsgPz48L3RleHRhcmVhPgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6OHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHgiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidXR0b24gYnV0dG9uLXByaW1hcnkiIG9uY2xpY2s9InZtMldhU2F2ZU1zZygpIiBpZD0idm0yLXdhLXNhdmUtbXNnLWJ0biI+8J+SviBTYWx2YXIgTWVuc2FnZW08L2J1dHRvbj4KICAgICAgICAgICAgPHNwYW4gaWQ9InZtMi13YS1tc2ctc3RhdHVzIiBzdHlsZT0iZm9udC1zaXplOjEzcHgiPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PjwhLS0gdm0yLWNhcmQgLS0+CiAgICA8L2Rpdj48IS0tIHZtMi13YS1tc2ctY2FyZCAtLT4KICAgIDwvZGl2PjwhLS0gL2dyaWQyIC0tPgoKICAgIDwhLS0g4pSA4pSAIFRhYnMgZmlsdHJvIOKUgOKUgCAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NHB4O21hcmdpbjoxNnB4IDAgMTJweDtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZWVlO3BhZGRpbmctYm90dG9tOjhweCI+CiAgICAgICAgPD9waHAKICAgICAgICAkdGFicyA9IFsKICAgICAgICAgICAgJ3RvZGF5JyAgICAgPT4gIvCfk4UgSG9qZSAoeyR0b2RheV9jbnR9KSIsCiAgICAgICAgICAgICdhbGwnICAgICAgID0+ICJUb2RvcyAoeyR0b3RhbH0pIiwKICAgICAgICAgICAgJ3NlbnQnICAgICAgPT4gIuKchSBFbnZpYWRvcyAoeyRzZW50fSkiLAogICAgICAgICAgICAncGVuZGluZycgICA9PiAi4o+zIFBlbmRlbnRlcyAoeyRwZW5kaW5nfSkiLAogICAgICAgICAgICAnZmFpbGVkJyAgICA9PiAi4p2MIEZhbGhvdSAoeyRmYWlsZWR9KSIsCiAgICAgICAgICAgICdjYW5jZWxsZWQnID0+ICLwn5uSIENvbXByYXJhbSAoeyRjYW5jZWxsZWR9KSIsCiAgICAgICAgICAgICdleHBpcmVkJyAgID0+ICLij7EgRXhwaXJhZG9zICh7JGV4cGlyZWR9KSIsCiAgICAgICAgICAgICdkbmRfc2tpcCcgID0+ICLwn5qrIERORCAoeyRkbmRfc2tpcH0pIiwKICAgICAgICBdOwogICAgICAgIGZvcmVhY2ggKCR0YWJzIGFzICRrZXkgPT4gJGxhYmVsKToKICAgICAgICAgICAgJGFjdGl2ZSA9ICRmaWx0ZXIgPT09ICRrZXkgPyAnYmFja2dyb3VuZDojMDA3M2FhO2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiMwMDczYWEnIDogJ2JhY2tncm91bmQ6I2Y1ZjVmNTtjb2xvcjojNTU1O2JvcmRlci1jb2xvcjojZGRkJzsKICAgICAgICA/PgogICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJGJhc2VfdXJsOyA/PiZ2bTJfd2Ffc3RhdHVzPTw/cGhwIGVjaG8gJGtleTsgPz4iCiAgICAgICAgICAgc3R5bGU9Ijw/cGhwIGVjaG8gJGFjdGl2ZTsgPz47cGFkZGluZzo2cHggMTRweDtib3JkZXItcmFkaXVzOjIwcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjEycHg7Ym9yZGVyOjFweCBzb2xpZDt0cmFuc2l0aW9uOmFsbCAuMTVzIj4KICAgICAgICAgICAgPD9waHAgZWNobyAkbGFiZWw7ID8+CiAgICAgICAgPC9hPgogICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICA8L2Rpdj4KCiAgICA8IS0tIOKUgOKUgCBUYWJlbGEg4pSA4pSAIC0tPgogICAgPGRpdiBjbGFzcz0idm0yLWNhcmQiIHN0eWxlPSJwYWRkaW5nOjAiPgogICAgICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaCI+CiAgICAgICAgPHRhYmxlIGNsYXNzPSJ2bTItd2EtdGFibGUiIHN0eWxlPSJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MTJweCI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0ciBpZD0idm0yLWNhcnQtdGhlYWQiIHN0eWxlPSJiYWNrZ3JvdW5kOiNmOGY5ZmE7Ym9yZGVyLWJvdHRvbToycHggc29saWQgI2VlZTtjdXJzb3I6cG9pbnRlcjt1c2VyLXNlbGVjdDpub25lIj4KICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1jb2w9IjAiIGRhdGEtZGlyPSJkZXNjIiBzdHlsZT0icGFkZGluZzoxMHB4IDEycHg7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOm5vd3JhcCI+4o+wIEFjZXNzb3UgPHNwYW4gY2xhc3M9InZtMi1zb3J0LWljb24iPuKWvDwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBkYXRhLWNvbD0iMSIgc3R5bGU9InBhZGRpbmc6MTBweCAxMnB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3dyYXAiPiMgPHNwYW4gY2xhc3M9InZtMi1zb3J0LWljb24iPjwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBkYXRhLWNvbD0iMiIgc3R5bGU9InBhZGRpbmc6MTBweCAxMnB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3dyYXAiPlRlbGVmb25lIDxzcGFuIGNsYXNzPSJ2bTItc29ydC1pY29uIj48L3NwYW4+PC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1jb2w9IjMiIHN0eWxlPSJwYWRkaW5nOjEwcHggMTJweDt0ZXh0LWFsaWduOmxlZnQiPk5vbWUgPHNwYW4gY2xhc3M9InZtMi1zb3J0LWljb24iPjwvc3Bhbj48L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCBkYXRhLWNvbD0iNCIgc3R5bGU9InBhZGRpbmc6MTBweCAxMnB4O3RleHQtYWxpZ246bGVmdCI+UHJvZHV0byA8c3BhbiBjbGFzcz0idm0yLXNvcnQtaWNvbiI+PC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoIGRhdGEtY29sPSI1IiBzdHlsZT0icGFkZGluZzoxMHB4IDEycHg7dGV4dC1hbGlnbjpyaWdodDt3aGl0ZS1zcGFjZTpub3dyYXAiPlZhbG9yIDxzcGFuIGNsYXNzPSJ2bTItc29ydC1pY29uIj48L3NwYW4+PC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1jb2w9IjYiIHN0eWxlPSJwYWRkaW5nOjEwcHggMTJweDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXAiPvCflJcgVVJMIDxzcGFuIGNsYXNzPSJ2bTItc29ydC1pY29uIj48L3NwYW4+PC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1jb2w9IjciIHN0eWxlPSJwYWRkaW5nOjEwcHggMTJweDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXAiPvCfk6QgRW52aWFkbyA8c3BhbiBjbGFzcz0idm0yLXNvcnQtaWNvbiI+PC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoIGRhdGEtY29sPSI4IiBzdHlsZT0icGFkZGluZzoxMHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXIiPlN0YXR1cyA8c3BhbiBjbGFzcz0idm0yLXNvcnQtaWNvbiI+PC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoIGRhdGEtY29sPSI5IiBzdHlsZT0icGFkZGluZzoxMHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXIiPlBlZGlkbyA8c3BhbiBjbGFzcz0idm0yLXNvcnQtaWNvbiI+PC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoIGRhdGEtY29sPSIxMCIgc3R5bGU9InBhZGRpbmc6MTBweCAxMnB4O3RleHQtYWxpZ246bGVmdCI+UmVzcG9zdGEgQVBJIDxzcGFuIGNsYXNzPSJ2bTItc29ydC1pY29uIj48L3NwYW4+PC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1jb2w9IjExIiBzdHlsZT0icGFkZGluZzoxMHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXIiPkHDp8OjbyA8c3BhbiBjbGFzcz0idm0yLXNvcnQtaWNvbiI+PC9zcGFuPjwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICRzdGF0dXNfY2ZnID0gWwogICAgICAgICAgICAgICAgJ3NlbnQnICAgICAgPT4gWycjMjdhZTYwJywgJ+KchSBFbnZpYWRvJ10sCiAgICAgICAgICAgICAgICAncGVuZGluZycgICA9PiBbJyNlNjdlMjInLCAn4o+zIFBlbmRlbnRlJ10sCiAgICAgICAgICAgICAgICAnZmFpbGVkJyAgICA9PiBbJyNjMDM5MmInLCAn4p2MIEZhbGhvdSddLAogICAgICAgICAgICAgICAgJ2NhbmNlbGxlZCcgPT4gWycjMjdhZTYwJywgJ/Cfm5IgQ29tcHJvdSddLAogICAgICAgICAgICAgICAgJ2V4cGlyZWQnICAgPT4gWycjOTVhNWE2JywgJ+KPsSBFeHBpcmFkbyddLAogICAgICAgICAgICAgICAgJ2RuZF9za2lwJyAgPT4gWycjOWI1OWI2JywgJ/CfmqsgRE5EJ10sCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIGlmIChlbXB0eSgkcm93cykpOgogICAgICAgICAgICA/PgogICAgICAgICAgICA8dHI+PHRkIGNvbHNwYW49IjEyIiBzdHlsZT0icGFkZGluZzo0MHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNhYWEiPgogICAgICAgICAgICAgICAgTmVuaHVtIHJlZ2lzdHJvIGVuY29udHJhZG8gcGFyYSBlc3RlIGZpbHRyby4KICAgICAgICAgICAgPC90ZD48L3RyPgogICAgICAgICAgICA8P3BocCBlbHNlOiBmb3JlYWNoICgkcm93cyBhcyAkcik6CiAgICAgICAgICAgICAgICBbJHNjLCAkc2xdID0gJHN0YXR1c19jZmdbJHItPnN0YXR1c10gPz8gWycjNTU1JywgJHItPnN0YXR1c107CiAgICAgICAgICAgICAgICAkdGVtcG8gPSAn4oCUJzsKICAgICAgICAgICAgICAgIGlmICgkci0+c2VudF9hdCAmJiAkci0+Y2FwdHVyZWRfYXQpIHsKICAgICAgICAgICAgICAgICAgICAkZGlmZiA9IHN0cnRvdGltZSgkci0+c2VudF9hdCkgLSBzdHJ0b3RpbWUoJHItPmNhcHR1cmVkX2F0KTsKICAgICAgICAgICAgICAgICAgICAkdGVtcG8gPSAkZGlmZiA8IDYwID8gInskZGlmZn1zIiA6IHJvdW5kKCRkaWZmLzYwKSAuICdtaW4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGFwaV9zaG9ydCA9ICfigJQnOwogICAgICAgICAgICAgICAgJGFwaV90aXRsZSA9ICcnOwogICAgICAgICAgICAgICAgaWYgKCRyLT5hcGlfcmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICAkZGVjb2RlZCA9IGpzb25fZGVjb2RlKCRyLT5hcGlfcmVzcG9uc2UsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZGVjb2RlZFsnbWVzc2FnZXMnXVswXVsnaWQnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGFwaV9zaG9ydCA9ICfinIUg4oCmJyAuIHN1YnN0cigkZGVjb2RlZFsnbWVzc2FnZXMnXVswXVsnaWQnXSwgLTEwKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJGRlY29kZWRbJ2Vycm9yJ11bJ21lc3NhZ2UnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGFwaV9zaG9ydCA9ICfinYwgJyAuIHN1YnN0cigkZGVjb2RlZFsnZXJyb3InXVsnbWVzc2FnZSddLCAwLCA0MCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKHN0cmxlbigkci0+YXBpX3Jlc3BvbnNlKSA8IDYwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRhcGlfc2hvcnQgPSAkci0+YXBpX3Jlc3BvbnNlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRhcGlfc2hvcnQgPSBzdWJzdHIoJHItPmFwaV9yZXNwb25zZSwgMCwgNTApIC4gJ+KApic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRhcGlfdGl0bGUgPSBlc2NfYXR0cigkci0+YXBpX3Jlc3BvbnNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRvcmRlcl9saW5rID0gJ+KAlCc7CiAgICAgICAgICAgICAgICBpZiAoJHItPm9yZGVyX2lkKSB7CiAgICAgICAgICAgICAgICAgICAgJG9yZGVyX2xpbmsgPSAnPGEgaHJlZj0iJyAuIGFkbWluX3VybCgicG9zdC5waHA/cG9zdD17JHItPm9yZGVyX2lkfSZhY3Rpb249ZWRpdCIpIC4gJyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjojMDA3M2FhIj4jJyAuIGVzY19odG1sKCRyLT5vcmRlcl9pZCkgLiAnPC9hPic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkYnRuID0gJyc7CiAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHItPnN0YXR1cywgWydmYWlsZWQnLCdwZW5kaW5nJywnZG5kX3NraXAnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkYnRuID0gIjxidXR0b24gY2xhc3M9J2J1dHRvbiBidXR0b24tc21hbGwgdm0yLXJlc2VuZC1idG4nIGRhdGEtaWQ9J3skci0+aWR9JyBkYXRhLW5vbmNlPSd7JG5vbmNlfScgc3R5bGU9J2ZvbnQtc2l6ZToxMXB4Jz7wn5SBPC9idXR0b24+IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR2YWxvciA9ICRyLT5jYXJ0X3RvdGFsID8gJ1IkICcgLiBudW1iZXJfZm9ybWF0KChmbG9hdCkkci0+Y2FydF90b3RhbCwgMiwgJywnLCAnLicpIDogJ+KAlCc7CiAgICAgICAgICAgICAgICAkemVicmEgPSAkci0+aWQgJSAyID09PSAwID8gJ2JhY2tncm91bmQ6I2ZhZmFmYScgOiAnYmFja2dyb3VuZDojZmZmJzsKICAgICAgICAgICAgPz4KICAgICAgICAgICAgPHRyIHN0eWxlPSI8P3BocCBlY2hvICR6ZWJyYTsgPz47Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YwZjBmMCI+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7d2hpdGUtc3BhY2U6bm93cmFwO2NvbG9yOiM1NTUiIHRpdGxlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRyLT5jYXB0dXJlZF9hdCk7ID8+IiBkYXRhLXZhbD0iPD9waHAgZWNobyBlc2NfYXR0cigkci0+Y2FwdHVyZWRfYXQpOyA/PiI+CiAgICAgICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgJHRzID0gc3RydG90aW1lKCRyLT5jYXB0dXJlZF9hdCk7CiAgICAgICAgICAgICAgICAkdG9kYXlfdHMgPSBzdHJ0b3RpbWUoY3VycmVudF90aW1lKCdZLW0tZCcpKTsKICAgICAgICAgICAgICAgIGlmICgkdHMgPj0gJHRvZGF5X3RzICYmICR0cyA8ICR0b2RheV90cyArIDg2NDAwKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPHNwYW4gc3R5bGU9ImNvbG9yOiM4ODg7Zm9udC1zaXplOjEwcHg7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoxIj5Ib2plPC9zcGFuPicgLiBkYXRlKCdIOmknLCAkdHMpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlY2hvIGRhdGUoJ2QvbScsICR0cykgLiAnPHNwYW4gc3R5bGU9ImNvbG9yOiNhYWE7Zm9udC1zaXplOjEwcHg7bWFyZ2luLWxlZnQ6MnB4Ij4nIC4gZGF0ZSgnSDppJywgJHRzKSAuICc8L3NwYW4+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMnB4O2NvbG9yOiM5OTkiIGRhdGEtdmFsPSI8P3BocCBlY2hvICRyLT5pZDsgPz4iPjw/cGhwIGVjaG8gJHItPmlkOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtd2VpZ2h0OjUwMCI+PD9waHAgZWNobyBlc2NfaHRtbCgkci0+cGhvbmUpOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHgiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHItPm5hbWUgPzogJ+KAlCcpOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7bWF4LXdpZHRoOjE4MHB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXAiIHRpdGxlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRyLT5wcm9kdWN0X25hbWUpOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCgkci0+cHJvZHVjdF9uYW1lID86ICfigJQnKTsgPz48L3RkPgogICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMnB4O3RleHQtYWxpZ246cmlnaHQ7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcCIgZGF0YS12YWw9Ijw/cGhwIGVjaG8gJHItPmNhcnRfdG90YWwgPyAoZmxvYXQpJHItPmNhcnRfdG90YWwgOiAwOyA/PiI+PD9waHAgZWNobyAkdmFsb3I7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTJweDt0ZXh0LWFsaWduOmNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgICAgICAkbGlua191cmwgPSAhZW1wdHkoJHItPnBhZ2VfdXJsKSA/ICRyLT5wYWdlX3VybCA6ICghZW1wdHkoJHItPmNhcnRfdXJsKSA/IGhvbWVfdXJsKCRyLT5jYXJ0X3VybCkgOiAnJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRsaW5rX3VybCk6CiAgICAgICAgICAgICAgICAgICAgPz48YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGxpbmtfdXJsKTsgPz4iIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6IzAwNzNhYTtmb250LXNpemU6MTFweCIgdGl0bGU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGxpbmtfdXJsKTsgPz4iPvCflJc8L2E+PD9waHAKICAgICAgICAgICAgICAgICAgICBlbHNlOiA/PuKAlDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPC90ZD4KCiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwIiBkYXRhLXZhbD0iPD9waHAgZWNobyAkci0+c2VudF9hdCA/IGVzY19hdHRyKCRyLT5zZW50X2F0KSA6ICcwMDAwLTAwLTAwIDAwOjAwOjAwJzsgPz4iPgogICAgICAgICAgICAgICAgPD9waHAgaWYgKCRyLT5zZW50X2F0KTogPz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4Ij48P3BocCBlY2hvIGRhdGUoJ0g6aScsIHN0cnRvdGltZSgkci0+c2VudF9hdCkpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6I2FhYTtmb250LXNpemU6MTBweDtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjEiPigrPD9waHAgZWNobyAkdGVtcG87ID8+KTwvc3Bhbj4KICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiNhYWEiPuKAlDwvc3Bhbj4KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTJweDt0ZXh0LWFsaWduOmNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6PD9waHAgZWNobyAkc2M7ID8+O2NvbG9yOiNmZmY7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjEycHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHNsOyA/PgogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXIiPjw/cGhwIGVjaG8gJG9yZGVyX2xpbms7ID8+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTJweDttYXgtd2lkdGg6MTYwcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTFweDtjb2xvcjojNjY2IgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSI8P3BocCBlY2hvICRhcGlfdGl0bGU7ID8+Ij48P3BocCBlY2hvIGVzY19odG1sKCRhcGlfc2hvcnQpOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXIiPjw/cGhwIGVjaG8gJGJ0bjsgPz48L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyBlbmRpZjsgPz4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgIC8vIOKUgOKUgCBTb3J0IGRhIHRhYmVsYSBDYXJyaW5obyDilIDilIAKICAgIChmdW5jdGlvbigpewogICAgICB2YXIgdGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWNhcnQtdGhlYWQnKTsKICAgICAgaWYoIXRoZWFkKSByZXR1cm47CiAgICAgIHZhciB0YWJsZSA9IHRoZWFkLmNsb3Nlc3QoJ3RhYmxlJyk7CiAgICAgIHRoZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoW2RhdGEtY29sXScpLmZvckVhY2goZnVuY3Rpb24odGgpewogICAgICAgIHRoLnN0eWxlLmN1cnNvcj0ncG9pbnRlcic7CiAgICAgICAgdGguYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgdmFyIGNvbCA9IHBhcnNlSW50KHRoLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wnKSk7CiAgICAgICAgICB2YXIgZGlyID0gdGguZ2V0QXR0cmlidXRlKCdkYXRhLWRpcicpPT09J2FzYyc/J2Rlc2MnOidhc2MnOwogICAgICAgICAgdGhlYWQucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1zb3J0LWljb24nKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3MudGV4dENvbnRlbnQ9Jyc7fSk7CiAgICAgICAgICB0aC5xdWVyeVNlbGVjdG9yKCcudm0yLXNvcnQtaWNvbicpLnRleHRDb250ZW50ID0gZGlyPT09J2FzYyc/J+KWsic6J+KWvCc7CiAgICAgICAgICB0aGVhZC5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpLmZvckVhY2goZnVuY3Rpb24odCl7dC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZGlyJyk7fSk7CiAgICAgICAgICB0aC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZGlyJywgZGlyKTsKICAgICAgICAgIHZhciB0Ym9keSA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5Jyk7CiAgICAgICAgICB2YXIgcm93cyA9IEFycmF5LmZyb20odGJvZHkucXVlcnlTZWxlY3RvckFsbCgndHInKSk7CiAgICAgICAgICByb3dzLnNvcnQoZnVuY3Rpb24oYSxiKXsKICAgICAgICAgICAgdmFyIGNlbGxBID0gYS5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpW2NvbF07CiAgICAgICAgICAgIHZhciBjZWxsQiA9IGIucXVlcnlTZWxlY3RvckFsbCgndGQnKVtjb2xdOwogICAgICAgICAgICBpZighY2VsbEF8fCFjZWxsQikgcmV0dXJuIDA7CiAgICAgICAgICAgIHZhciB2YSA9IChjZWxsQS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsJyl8fGNlbGxBLnRleHRDb250ZW50KS50cmltKCk7CiAgICAgICAgICAgIHZhciB2YiA9IChjZWxsQi5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsJyl8fGNlbGxCLnRleHRDb250ZW50KS50cmltKCk7CiAgICAgICAgICAgIHZhciBmYSA9IHBhcnNlRmxvYXQodmEucmVwbGFjZSgvW14wLTkuXC1dL2csJycpKSwgZmIgPSBwYXJzZUZsb2F0KHZiLnJlcGxhY2UoL1teMC05LlwtXS9nLCcnKSk7CiAgICAgICAgICAgIHZhciBjbXAgPSAoIWlzTmFOKGZhKSYmIWlzTmFOKGZiKSkgPyBmYS1mYiA6IHZhLmxvY2FsZUNvbXBhcmUodmIsJ3B0Jyx7bnVtZXJpYzp0cnVlLHNlbnNpdGl2aXR5OidiYXNlJ30pOwogICAgICAgICAgICByZXR1cm4gZGlyPT09J2FzYyc/Y21wOi1jbXA7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbihyKXt0Ym9keS5hcHBlbmRDaGlsZChyKTt9KTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIC8vIHNvcnQgaW5pY2lhbDogY29sIDAgKOKPsCBBY2Vzc291KSBkZXNjCiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICB2YXIgdGgwID0gdGhlYWQucXVlcnlTZWxlY3RvcigndGhbZGF0YS1jb2w9IjAiXScpOwogICAgICAgIGlmKHRoMCl7IHRoMC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZGlyJywnYXNjJyk7IHRoMC5jbGljaygpOyB9CiAgICAgIH0sIDgwKTsKICAgIH0pKCk7CgogICAgLy8g4pSA4pSAIEZpbHRybyBwb3IgY2FyZCBLUEkg4pSA4pSACiAgICBmdW5jdGlvbiB2bTJXYUZpbHRlcihzdGF0dXMpIHsKICAgICAgICB2YXIgYmFzZSA9IDw/cGhwIGVjaG8ganNvbl9lbmNvZGUoJGJhc2VfdXJsKTsgPz47CiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBiYXNlICsgJyZ2bTJfd2Ffc3RhdHVzPScgKyBzdGF0dXM7CiAgICB9CgogICAgLy8g4pSA4pSAIFJlZW52aWFyIOKUgOKUgAogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1yZXNlbmQtYnRuJykuZm9yRWFjaChmdW5jdGlvbihidG4pIHsKICAgICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGlkICAgID0gdGhpcy5kYXRhc2V0LmlkOwogICAgICAgICAgICB2YXIgbm9uY2UgPSB0aGlzLmRhdGFzZXQubm9uY2U7CiAgICAgICAgICAgIHZhciBlbCAgICA9IHRoaXM7CiAgICAgICAgICAgIGVsLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSAn4o+zJzsKICAgICAgICAgICAgZmV0Y2goYWpheHVybCwgewogICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6J2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9LAogICAgICAgICAgICAgICAgYm9keTogJ2FjdGlvbj12bTJfd2FfcmVzZW5kJmlkPScgKyBpZCArICcmbm9uY2U9JyArIG5vbmNlCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpIHsgcmV0dXJuIHIuanNvbigpOyB9KQogICAgICAgICAgICAudGhlbihmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSAn4pyFJzsKICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS5iYWNrZ3JvdW5kID0gJyMyN2FlNjAnOwogICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLmNvbG9yID0gJyNmZmYnOwogICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLmJvcmRlckNvbG9yID0gJyMyN2FlNjAnOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9ICfinYwnOwogICAgICAgICAgICAgICAgICAgIGVsLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYWxlcnQoZGF0YS5kYXRhKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9KTsKCiAgICAvLyDilIDilIAgU2FsdmFyIG1lbnNhZ2VtIOKUgOKUgAogICAgZnVuY3Rpb24gdm0yV2FTYXZlTXNnKCkgewogICAgICAgIHZhciBidG4gICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXdhLXNhdmUtbXNnLWJ0bicpOwogICAgICAgIHZhciBzdGF0dXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXdhLW1zZy1zdGF0dXMnKTsKICAgICAgICB2YXIgbXNnICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi13YS1tc2cnKS52YWx1ZTsKICAgICAgICBidG4uZGlzYWJsZWQgPSB0cnVlOwogICAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9ICfij7MgU2FsdmFuZG/igKYnOwogICAgICAgIGZldGNoKGFqYXh1cmwsIHsKICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30sCiAgICAgICAgICAgIGJvZHk6ICdhY3Rpb249dm1fd2Ffc2F2ZV9yZWNvdmVyeV9tc2cmbWVzc2FnZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KG1zZykgKyAnJm5vbmNlPTw/cGhwIGVjaG8gZXNjX2pzKCRub25jZSk7ID8+JwogICAgICAgIH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocikgeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gZGF0YS5zdWNjZXNzID8gJ+KchSBTYWx2byEnIDogJ+KdjCBFcnJvJzsKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgc3RhdHVzLnRleHRDb250ZW50ID0gJyc7IH0sIDMwMDApOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vIOKUgOKUgCBTYWx2YXIgY29uZmlnIOKUgOKUgAogICAgZnVuY3Rpb24gdm0yV2FDaGFubmVsU3dpdGNoKHNsdWcpIHsKICAgICAgICB2YXIgdHlwZXMgPSA8P3BocCBlY2hvIGpzb25fZW5jb2RlKCBhcnJheV9tYXAoIGZ1bmN0aW9uKCRjaCl7IHJldHVybiAkY2hbJ3R5cGUnXSA/PyAnemFwaSc7IH0sIHZtMl9jaGFubmVscygpICkgKTsgPz47CiAgICAgICAgdmFyIGlzV2FiYSA9ICh0eXBlc1tzbHVnXSA9PT0gJ3dhYmEnKTsKICAgICAgICB2YXIgdHBsUm93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi13YS10cGwtcm93Jyk7CiAgICAgICAgdmFyIG1zZ0NhcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXdhLW1zZy1jYXJkJyk7CiAgICAgICAgaWYgKHRwbFJvdykgIHRwbFJvdy5zdHlsZS5kaXNwbGF5ICA9IGlzV2FiYSA/ICcnIDogJ25vbmUnOwogICAgICAgIGlmIChtc2dDYXJkKSBtc2dDYXJkLnN0eWxlLmRpc3BsYXkgPSBpc1dhYmEgPyAnbm9uZScgOiAnJzsKICAgIH0KICAgIChmdW5jdGlvbigpewogICAgICAgIHZhciByYWRpb3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPXZtMl93YV9jaGFubmVsXScpOwogICAgICAgIHJhZGlvcy5mb3JFYWNoKGZ1bmN0aW9uKHIpeyByLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCl7IHZtMldhQ2hhbm5lbFN3aXRjaCh0aGlzLnZhbHVlKTsgfSk7IH0pOwogICAgfSkoKTsKCiAgICBmdW5jdGlvbiB2bTJXYVNhdmVDb25maWcoKSB7CiAgICAgICAgdmFyIGJ0biAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItd2Etc2F2ZS1jZmctYnRuJyk7CiAgICAgICAgdmFyIHN0YXR1cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItd2EtY2ZnLXN0YXR1cycpOwogICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgc3RhdHVzLnRleHRDb250ZW50ID0gJ+KPsyBTYWx2YW5kb+KApic7CiAgICAgICAgdmFyIGNoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT12bTJfd2FfY2hhbm5lbF06Y2hlY2tlZCcpLnZhbHVlOwogICAgICAgIHZhciBrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItd2Eta3MnKS5jaGVja2VkID8gJzEnIDogJzAnOwogICAgICAgIHZhciBicyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItd2EtYmF0Y2gnKS52YWx1ZTsKICAgICAgICB2YXIgcXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXdhLXFzdGFydCcpLnZhbHVlOwogICAgICAgIHZhciBxZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItd2EtcWVuZCcpLnZhbHVlOwogICAgICAgIHZhciBpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItd2EtaW50ZXJ2YWwnKS52YWx1ZTsKICAgICAgICB2YXIgdHBsU2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi13YS10cGwtc2VsJyk7CiAgICAgICAgdmFyIHRwbCA9IHRwbFNlbCA/IHRwbFNlbC52YWx1ZSA6ICcnOwogICAgICAgIHZhciBib2R5ID0gJ2FjdGlvbj12bTJfd2Ffc2F2ZV9jb25maWcmbm9uY2U9PD9waHAgZWNobyBlc2NfanMoJGNmZ19ub25jZSk7ID8+JwogICAgICAgICAgICAgICAgICsgJyZ2bV93YV9zZW5kX2NoYW5uZWw9JyArIGVuY29kZVVSSUNvbXBvbmVudChjaCkgKyAnJnZtX3dhX2tpbGxfc3dpdGNoPScgKyBrcwogICAgICAgICAgICAgICAgICsgJyZ2bV93YV9iYXRjaF9zaXplPScgKyBicyArICcmdm1fd2FfcXVpZXRfc3RhcnQ9JyArIHFzCiAgICAgICAgICAgICAgICAgKyAnJnZtX3dhX3F1aWV0X2VuZD0nICArIHFlICsgJyZ2bV93YV9pbnRlcnZhbF9zZWM9JyArIGl2CiAgICAgICAgICAgICAgICAgKyAnJnZtX3dhX3dhYmFfdGVtcGxhdGU9JyArIGVuY29kZVVSSUNvbXBvbmVudCh0cGwpOwogICAgICAgIGZldGNoKGFqYXh1cmwsIHsKICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30sCiAgICAgICAgICAgIGJvZHk6IGJvZHkKICAgICAgICB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpIHsgcmV0dXJuIHIuanNvbigpOyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgYnRuLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgIHN0YXR1cy50ZXh0Q29udGVudCA9IGRhdGEuc3VjY2VzcyA/ICfinIUgU2Fsdm8hJyA6ICfinYwgRXJybzogJyArIGRhdGEuZGF0YTsKICAgICAgICAgICAgaWYgKGRhdGEuc3VjY2VzcykgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBsb2NhdGlvbi5yZWxvYWQoKTsgfSwgODAwKTsgfQogICAgICAgIH0pOwogICAgfQogICAgPC9zY3JpcHQ+CiAgICA8L2Rpdj4KICAgIDw/cGhwCn0KCi8vIOKUgOKUgOKUgCDwn5OKIFByb21vcyBEYXNoYm9hcmQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9wcm9tb3NfcGFnZSgpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0YmxfbG9nICAgID0gJHdwZGItPnByZWZpeCAuICd2bV93aGF0c2FwcF9sb2cnOwogICAgJHRibF9jbGlja3MgPSAkd3BkYi0+cHJlZml4IC4gJ3ZpdmFtYWlzX3Byb21vX2NsaWNrcyc7CiAgICAkdGJsX2Rpc2MgICA9ICd3el9hY3RpdmVfZGlzY291bnRzJzsgLy8gcHJlZml4byBmaXhvIGRvIHBsdWdpbiBiYW5uZXIKCiAgICAkdGFiID0gc2FuaXRpemVfdGV4dF9maWVsZCggJF9HRVRbJ3RhYiddID8/ICdkYXNoYm9hcmQnICk7CgogICAgLy8g4pSA4pSAIFNhbHZhciBDb25maWcgQmFubmVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgaWYgKCAkdGFiID09PSAnYmFubmVyJyAmJiBpc3NldCggJF9QT1NUWyd2bTJfc2F2ZV9iYW5uZXInXSApICYmIGNoZWNrX2FkbWluX3JlZmVyZXIoICd2bTJfYmFubmVyX25vbmNlJyApICkgewogICAgICAgICRib29sX2ZpZWxkcyA9IFsndm1fYmFubmVyX2VuYWJsZWQnLCd2bV9iYW5uZXJfYW5pbWFjYW8nLCd2bV9iYW5uZXJfbW9zdHJhcl9pbWFnZW0nLCd2bV9wcm9tb19tdWx0aV9lbmFibGVkJ107CiAgICAgICAgJGFsbF9maWVsZHMgID0gWyd2bV9iYW5uZXJfZW5hYmxlZCcsJ3ZtX2Jhbm5lcl9wb3NpdGlvbicsJ3ZtX2Jhbm5lcl9ob3JhX2luaWNpbycsJ3ZtX2Jhbm5lcl9ob3JhX2ZpbScsCiAgICAgICAgICAgICAgICAgICAgICAgICd2bV9iYW5uZXJfY3RhX3RleHQnLCd2bV9iYW5uZXJfYW5pbWFjYW8nLCd2bV9iYW5uZXJfY29yX21pbmknLCd2bV9iYW5uZXJfY29yX21lZ2EnLAogICAgICAgICAgICAgICAgICAgICAgICAndm1fYmFubmVyX21vc3RyYXJfaW1hZ2VtJywndm1fYmFubmVyX3ByZWZpeG9fbWluaScsJ3ZtX2Jhbm5lcl9wcmVmaXhvX21lZ2EnLAogICAgICAgICAgICAgICAgICAgICAgICAndm1fcHJvbW9fbXVsdGlfZW5hYmxlZCcsJ3ZtX3Byb21vX21heF9jYXJvdXNlbCcsJ3ZtX3Byb21vX2Nhcm91c2VsX2ludGVydmFsJywndm1fcHJvbW9fY2Fyb3VzZWxfb3JkZXInXTsKICAgICAgICBmb3JlYWNoICggJGFsbF9maWVsZHMgYXMgJGYgKSB7CiAgICAgICAgICAgICR2YWwgPSBpbl9hcnJheSgkZiwgJGJvb2xfZmllbGRzKSA/IChpc3NldCgkX1BPU1RbJGZdKSA/ICcxJyA6ICcwJykgOiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX1BPU1RbJGZdID8/ICcnICk7CiAgICAgICAgICAgIHVwZGF0ZV9vcHRpb24oICRmLCAkdmFsICk7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9Im5vdGljZSBub3RpY2Utc3VjY2VzcyBpcy1kaXNtaXNzaWJsZSI+PHA+4pyFIENvbmZpZ3VyYcOnw7VlcyBkbyBiYW5uZXIgc2FsdmFzITwvcD48L2Rpdj4nOwogICAgfQoKICAgIC8vIOKUgOKUgCBEaXNwYXJhciBub3ZhIHByb21vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgJGRpc3BhcmFyX21zZyA9ICcnOwogICAgaWYgKCAkdGFiID09PSAnZGlzcGFyYXInICYmIGlzc2V0KCAkX1BPU1RbJ3ZtMl9kaXNwYXJhciddICkgJiYgY2hlY2tfYWRtaW5fcmVmZXJlciggJ3ZtMl9kaXNwYXJhcl9ub25jZScgKSApIHsKICAgICAgICAkcHJvZHVjdF9pZCAgPSBpbnR2YWwoICRfUE9TVFsncHJvZHVjdF9pZCddID8/IDAgKTsKICAgICAgICAkZGlzY291bnQgICAgPSBpbnR2YWwoICRfUE9TVFsnZGlzY291bnRfcGVyY2VudCddID8/IDAgKTsKICAgICAgICAkZHVyYWNhbyAgICAgPSBpbnR2YWwoICRfUE9TVFsnZHVyYWNhb19ob3JhcyddID8/IDMgKTsKICAgICAgICAkaXNfbWVnYSAgICAgPSBpc3NldCggJF9QT1NUWydpc19tZWdhX3Byb21vJ10gKSA/IHRydWUgOiBmYWxzZTsKICAgICAgICAkc2VuZF93YSAgICAgPSBpc3NldCggJF9QT1NUWydzZW5kX3doYXRzYXBwJ10gKSA/IHRydWUgOiBmYWxzZTsKICAgICAgICBpZiAoICRwcm9kdWN0X2lkID4gMCAmJiAkZGlzY291bnQgPiAwICkgewogICAgICAgICAgICAvLyBMw7NnaWNhIGRpcmV0YSAoc2VtIFJFU1QgY2FsbCBhbyBwbHVnaW4gZGVsZXRhZG8pCiAgICAgICAgICAgICRwcm9kdWN0ID0gZnVuY3Rpb25fZXhpc3RzKCd3Y19nZXRfcHJvZHVjdCcpID8gd2NfZ2V0X3Byb2R1Y3QoJHByb2R1Y3RfaWQpIDogbnVsbDsKICAgICAgICAgICAgaWYgKCAhICRwcm9kdWN0ICkgewogICAgICAgICAgICAgICAgJGRpc3BhcmFyX21zZyA9ICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLWVycm9yIj48cD7inYwgUHJvZHV0byBuw6NvIGVuY29udHJhZG8uPC9wPjwvZGl2Pic7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcHJvZHVjdF9uYW1lICAgPSAkcHJvZHVjdC0+Z2V0X25hbWUoKTsKICAgICAgICAgICAgICAgICRyZWd1bGFyX3ByaWNlICA9IGZsb2F0dmFsKCAkcHJvZHVjdC0+Z2V0X3JlZ3VsYXJfcHJpY2UoKSApOwogICAgICAgICAgICAgICAgJHNhbGVfcHJpY2VfbmV3ID0gJHJlZ3VsYXJfcHJpY2UgPiAwID8gcm91bmQoICRyZWd1bGFyX3ByaWNlICogKDEgLSAkZGlzY291bnQgLyAxMDApLCAyICkgOiAwOwoKICAgICAgICAgICAgICAgIC8vIEFwbGljYXIgcHJlw6dvIHByb21vY2lvbmFsIG5vIFdvb0NvbW1lcmNlCiAgICAgICAgICAgICAgICBpZiAoICRyZWd1bGFyX3ByaWNlID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAkcHJvZHVjdC0+c2V0X3NhbGVfcHJpY2UoICRzYWxlX3ByaWNlX25ldyApOwogICAgICAgICAgICAgICAgICAgICRwcm9kdWN0LT5zZXRfZGF0ZV9vbl9zYWxlX2Zyb20oIG51bGwgKTsKICAgICAgICAgICAgICAgICAgICAkcHJvZHVjdC0+c2V0X2RhdGVfb25fc2FsZV90byggbnVsbCApOwogICAgICAgICAgICAgICAgICAgICRwcm9kdWN0LT5zYXZlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gUmVnaXN0cmFyIGVtIHZtX3doYXRzYXBwX2xvZwogICAgICAgICAgICAgICAgJHdwZGItPmluc2VydCggJHRibF9sb2csIFsKICAgICAgICAgICAgICAgICAgICAncHJvZHVjdF9pZCcgICAgICAgPT4gJHByb2R1Y3RfaWQsCiAgICAgICAgICAgICAgICAgICAgJ3Byb2R1Y3RfbmFtZScgICAgID0+ICRwcm9kdWN0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgJ2Rpc2NvdW50X3BlcmNlbnQnID0+ICRkaXNjb3VudCwKICAgICAgICAgICAgICAgICAgICAnaXNfbWVnYV9wcm9tbycgICAgPT4gJGlzX21lZ2EgPyAxIDogMCwKICAgICAgICAgICAgICAgICAgICAnc2VudF9hdCcgICAgICAgICAgPT4gY3VycmVudF90aW1lKCdteXNxbCcpLAogICAgICAgICAgICAgICAgICAgICdjbGlja3MnICAgICAgICAgICA9PiAwLAogICAgICAgICAgICAgICAgXSwgWyclZCcsJyVzJywnJWQnLCclZCcsJyVzJywnJWQnXSApOwoKICAgICAgICAgICAgICAgIC8vIFJlZ2lzdHJhciBlbSB3el9hY3RpdmVfZGlzY291bnRzIChwYXJhIG8gdm0tcHJvbW8tYmFubmVyKQogICAgICAgICAgICAgICAgaWYgKCAkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAneyR0YmxfZGlzY30nIikgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gdjEuNS4xODogY3Vwb20gw5pOSUNPIHBvciBwcm9kdXRvLCByZXN0cml0byBhbyBwcm9kdXRvLCBleHBpcmHDp8OjbyBleGF0YQogICAgICAgICAgICAgICAgICAgICRjb3Vwb25fY29kZSA9IHN0cnRvdXBwZXIoICdQUk9NTycgLiAkZGlzY291bnQgLiAnT0ZGLScgLiAkcHJvZHVjdF9pZCApOwogICAgICAgICAgICAgICAgICAgICRleHBpcmVzX3RzICA9IHN0cnRvdGltZSggIit7JGR1cmFjYW99IGhvdXJzIiApOwoKICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGFyIGN1cG9tIGFudGVyaW9yIGNvbSBtZXNtbyBjw7NkaWdvIHNlIGV4aXN0aXIKICAgICAgICAgICAgICAgICAgICAkZXhpc3RpbmdfY291cG9uID0gZ2V0X3BhZ2VfYnlfdGl0bGUoICRjb3Vwb25fY29kZSwgT0JKRUNULCAnc2hvcF9jb3Vwb24nICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkZXhpc3RpbmdfY291cG9uICkgewogICAgICAgICAgICAgICAgICAgICAgICB3cF9kZWxldGVfcG9zdCggJGV4aXN0aW5nX2NvdXBvbi0+SUQsIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIENyaWFyIGN1cG9tIG5vdm8gdmlhIFdDX0NvdXBvbiAoZ2FyYW50ZSBwcm9kdWN0X2lkcyArIGV4cGlyYcOnw6NvIGNvcnJldGEpCiAgICAgICAgICAgICAgICAgICAgJHdjX2NvdXBvbiA9IG5ldyBcV0NfQ291cG9uKCk7CiAgICAgICAgICAgICAgICAgICAgJHdjX2NvdXBvbi0+c2V0X2NvZGUoICRjb3Vwb25fY29kZSApOwogICAgICAgICAgICAgICAgICAgICR3Y19jb3Vwb24tPnNldF9kaXNjb3VudF90eXBlKCAncGVyY2VudCcgKTsKICAgICAgICAgICAgICAgICAgICAkd2NfY291cG9uLT5zZXRfYW1vdW50KCAkZGlzY291bnQgKTsKICAgICAgICAgICAgICAgICAgICAkd2NfY291cG9uLT5zZXRfcHJvZHVjdF9pZHMoIFsgJHByb2R1Y3RfaWQgXSApOwogICAgICAgICAgICAgICAgICAgICR3Y19jb3Vwb24tPnNldF9kYXRlX2V4cGlyZXMoICRleHBpcmVzX3RzICk7CiAgICAgICAgICAgICAgICAgICAgJHdjX2NvdXBvbi0+c2V0X2luZGl2aWR1YWxfdXNlKCBmYWxzZSApOwogICAgICAgICAgICAgICAgICAgICR3Y19jb3Vwb24tPnNldF91c2FnZV9saW1pdCggMCApOyAvLyBpbGltaXRhZG8KICAgICAgICAgICAgICAgICAgICAkd2NfY291cG9uLT5zYXZlKCk7CgogICAgICAgICAgICAgICAgICAgICRjb2xzID0gWyAncHJvZHVjdF9pZCc9PiRwcm9kdWN0X2lkLCAncHJvZHVjdF9uYW1lJz0+JHByb2R1Y3RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2NvdW50X3BlcmNlbnQnPT4kZGlzY291bnQsICdpc19tZWdhX3Byb21vJz0+JGlzX21lZ2E/MTowLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGllZF9hdCc9PmN1cnJlbnRfdGltZSgnbXlzcWwnKSBdOwogICAgICAgICAgICAgICAgICAgIC8vIENvbHVuYXMgb3BjaW9uYWlzIOKAlCBpbnNlcmlyIGFwZW5hcyBzZSBleGlzdGlyZW0KICAgICAgICAgICAgICAgICAgICAkZXhpc3RpbmdfY29scyA9ICR3cGRiLT5nZXRfY29sKCJTSE9XIENPTFVNTlMgRlJPTSB7JHRibF9kaXNjfSIpOwogICAgICAgICAgICAgICAgICAgIGlmICggaW5fYXJyYXkoJ29yaWdpbmFsX3ByaWNlJywgJGV4aXN0aW5nX2NvbHMpICkgJGNvbHNbJ29yaWdpbmFsX3ByaWNlJ10gPSAkcmVndWxhcl9wcmljZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIGluX2FycmF5KCdzYWxlX3ByaWNlJywgICAgICRleGlzdGluZ19jb2xzKSApICRjb2xzWydzYWxlX3ByaWNlJ10gICAgID0gJHNhbGVfcHJpY2VfbmV3OwogICAgICAgICAgICAgICAgICAgIGlmICggaW5fYXJyYXkoJ2R1cmFjYW9faG9yYXMnLCAgJGV4aXN0aW5nX2NvbHMpICkgJGNvbHNbJ2R1cmFjYW9faG9yYXMnXSAgPSAkZHVyYWNhbzsKICAgICAgICAgICAgICAgICAgICBpZiAoIGluX2FycmF5KCdleHBpcmVzX2F0JywgICAgICRleGlzdGluZ19jb2xzKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHNbJ2V4cGlyZXNfYXQnXSA9IGRhdGUoJ1ktbS1kIEg6aTpzJywgc3RydG90aW1lKCIreyRkdXJhY2FvfSBob3VycyIpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCBpbl9hcnJheSgnY291cG9uX2NvZGUnLCAgICAkZXhpc3RpbmdfY29scykgKSAkY29sc1snY291cG9uX2NvZGUnXSAgICA9ICRjb3Vwb25fY29kZTsKICAgICAgICAgICAgICAgICAgICAkd3BkYi0+aW5zZXJ0KCAkdGJsX2Rpc2MsICRjb2xzICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGRpc3BhcmFyX21zZyA9ICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MiPjxwPuKchSBQcm9tbyBkaXNwYXJhZGEhIDxzdHJvbmc+JyAuIGVzY19odG1sKCRwcm9kdWN0X25hbWUpIC4gJzwvc3Ryb25nPiBjb20gPHN0cm9uZz4nIC4gJGRpc2NvdW50IC4gJyUgT0ZGPC9zdHJvbmc+IHBvciAnIC4gJGR1cmFjYW8gLiAnaC48L3A+PC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkaXNwYXJhcl9tc2cgPSAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS13YXJuaW5nIj48cD7imqDvuI8gUHJlZW5jaGEgcHJvZHV0byBlIGRlc2NvbnRvLjwvcD48L2Rpdj4nOwogICAgICAgIH0KICAgIH0KCiAgICAvLyDilIDilIAgS1BJcyBwYXJhIERhc2hib2FyZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgICRwZXJpb2QgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX0dFVFsncGVyaW9kJ10gPz8gJzMwZCcgKTsKICAgICR0aXBvICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX0dFVFsndGlwbyddICAgPz8gJ2FsbCcgKTsKICAgICRmaWx0ZXJfY2FyZCA9IHNhbml0aXplX3RleHRfZmllbGQoICRfR0VUWydmaWx0ZXJfY2FyZCddID8/ICcnICk7CgogICAgJGRheXMgPSBtYXRjaCgkcGVyaW9kKSB7ICc3ZCc9PjcsICc5MGQnPT45MCwgJ2FsbCc9PjM2NTAsIGRlZmF1bHQ9PjMwIH07CiAgICAkZGF0ZV9mcm9tID0gZGF0ZSgnWS1tLWQgSDppOnMnLCBzdHJ0b3RpbWUoIi17JGRheXN9IGRheXMiKSk7CgogICAgJHdoZXJlX3RpcG8gPSAnJzsKICAgIGlmICggJHRpcG8gPT09ICdtZWdhJyApICR3aGVyZV90aXBvID0gJyBBTkQgaXNfbWVnYV9wcm9tbz0xJzsKICAgIGVsc2VpZiAoICR0aXBvID09PSAnbWluaScgKSAkd2hlcmVfdGlwbyA9ICcgQU5EIGlzX21lZ2FfcHJvbW89MCc7CgogICAgJHRvdGFsX2VudmlvcyAgPSAoaW50KSAkd3BkYi0+Z2V0X3Zhcigkd3BkYi0+cHJlcGFyZSgiU0VMRUNUIENPVU5UKCopIEZST00geyR0YmxfbG9nfSBXSEVSRSBzZW50X2F0Pj0lc3skd2hlcmVfdGlwb30iLCAkZGF0ZV9mcm9tKSk7CiAgICAkdG90YWxfY2xpY2tzICA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCR3cGRiLT5wcmVwYXJlKCJTRUxFQ1QgQ09BTEVTQ0UoU1VNKGNsaWNrcyksMCkgRlJPTSB7JHRibF9sb2d9IFdIRVJFIHNlbnRfYXQ+PSVzeyR3aGVyZV90aXBvfSIsICRkYXRlX2Zyb20pKTsKICAgICR0b3RhbF9tZWdhICAgID0gKGludCkgJHdwZGItPmdldF92YXIoJHdwZGItPnByZXBhcmUoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskdGJsX2xvZ30gV0hFUkUgc2VudF9hdD49JXMgQU5EIGlzX21lZ2FfcHJvbW89MSIsICRkYXRlX2Zyb20pKTsKICAgICR0b3RhbF9taW5pICAgID0gJHRvdGFsX2VudmlvcyAtICR0b3RhbF9tZWdhOwogICAgJGN0cl9tZWRpbyAgICAgPSAkdG90YWxfZW52aW9zID4gMCA/IHJvdW5kKCR0b3RhbF9jbGlja3MgLyAkdG90YWxfZW52aW9zICogMTAwLCAxKSA6IDA7CiAgICAkc2VtX2NsaWNrcyAgICA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCR3cGRiLT5wcmVwYXJlKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHRibF9sb2d9IFdIRVJFIHNlbnRfYXQ+PSVzIEFORCBjbGlja3M9MHskd2hlcmVfdGlwb30iLCAkZGF0ZV9mcm9tKSk7CiAgICAkbWVsaG9yX3Byb2QgICA9ICR3cGRiLT5nZXRfcm93KCR3cGRiLT5wcmVwYXJlKCJTRUxFQ1QgcHJvZHVjdF9uYW1lLCBTVU0oY2xpY2tzKSBhcyB0YyBGUk9NIHskdGJsX2xvZ30gV0hFUkUgc2VudF9hdD49JXN7JHdoZXJlX3RpcG99IEdST1VQIEJZIHByb2R1Y3RfaWQgT1JERVIgQlkgdGMgREVTQyBMSU1JVCAxIiwgJGRhdGVfZnJvbSkpOwoKICAgIC8vIFByb21vcyBhdGl2YXMg4oCUIHYxLjUuMTUgbXVsdGktcHJvbW8KICAgICRwcm9tb3NfYXRpdmFzID0gW107CiAgICBpZiAoICR3cGRiLT5nZXRfdmFyKCJTSE9XIFRBQkxFUyBMSUtFICd7JHRibF9kaXNjfSciKSApIHsKICAgICAgICAkcHJvbW9zX2F0aXZhcyA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0VMRUNUICogRlJPTSB7JHRibF9kaXNjfSBXSEVSRSByZXZlcnRlZF9hdCBJUyBOVUxMIEFORCAoZXhwaXJlc19hdCBJUyBOVUxMIE9SIGV4cGlyZXNfYXQgPSAnMDAwMC0wMC0wMCAwMDowMDowMCcgT1IgZXhwaXJlc19hdCA+IE5PVygpKSBPUkRFUiBCWSBhcHBsaWVkX2F0IERFU0MiKTsKICAgIH0KICAgICRwcm9tb19hdGl2YSA9ICFlbXB0eSgkcHJvbW9zX2F0aXZhcykgPyAkcHJvbW9zX2F0aXZhc1swXSA6IG51bGw7IC8vIGJhY2t3YXJkIGNvbXBhdCBwYXJhIGJhbm5lciBwcmV2aWV3CgogICAgLy8gUHJvZHV0b3MgV29vQ29tbWVyY2UgcGFyYSBzZWxlY3QKICAgICRwcm9kdXRvcyA9IGdldF9wb3N0cyhbJ3Bvc3RfdHlwZSc9Pidwcm9kdWN0JywnbnVtYmVycG9zdHMnPT4yMDAsJ3Bvc3Rfc3RhdHVzJz0+J3B1Ymxpc2gnLCdvcmRlcmJ5Jz0+J3RpdGxlJywnb3JkZXInPT4nQVNDJ10pOwoKICAgICRiYXNlX3VybCA9IGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLXByb21vcycpOwogICAgPz4KICAgIDxkaXYgY2xhc3M9IndyYXAiIHN0eWxlPSJtYXgtd2lkdGg6MTIwMHB4OyI+CiAgICAgIDxzdHlsZT4KICAgICAgLnZtMnAtZ3JpZDJ7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnI7Z2FwOjIwcHg7YWxpZ24taXRlbXM6c3RhcnQ7fQogICAgICBAbWVkaWEobWluLXdpZHRoOjkwMHB4KXsudm0ycC1ncmlkMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDAsMS41ZnIpIG1pbm1heCgwLDFmcik7fX0KICAgICAgLnZtMnAtZ3JpZDItZXF7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnI7Z2FwOjIwcHg7YWxpZ24taXRlbXM6c3RhcnQ7fQogICAgICBAbWVkaWEobWluLXdpZHRoOjkwMHB4KXsudm0ycC1ncmlkMi1lcXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDAsMWZyKSBtaW5tYXgoMCwzNDBweCk7fX0KICAgICAgLnZtMnAta3Bpc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMTMwcHgsMWZyKSk7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToyNHB4O30KICAgICAgLnZtMnAtZmlsdHJvc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxNnB4O2FsaWduLWl0ZW1zOmNlbnRlcjt9CiAgICAgIC52bTJwLWZpbHRyb3MgbGFiZWx7Zm9udC13ZWlnaHQ6NjAwO30KICAgICAgLnZtMnAtZmlsdHJvcyBzZWxlY3QsLnZtMnAtZmlsdHJvcyBpbnB1dHttYXgtd2lkdGg6MTAwJTt9CiAgICAgIC52bTJwLWZvcm0td2lkZSBpbnB1dFt0eXBlPXRleHRdLC52bTJwLWZvcm0td2lkZSBzZWxlY3QsLnZtMnAtZm9ybS13aWRlIGlucHV0W3R5cGU9bnVtYmVyXXttYXgtd2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7fQogICAgICBAbWVkaWEobWF4LXdpZHRoOjYwMHB4KXsKICAgICAgICAudm0ycC1mb3JtLXdpZGUgLmZvcm0tdGFibGUgdGgsLnZtMnAtZm9ybS13aWRlIC5mb3JtLXRhYmxlIHRke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjRweCAwO30KICAgICAgICAudm0ycC1mb3JtLXdpZGUgLmZvcm0tdGFibGUgdGh7cGFkZGluZy10b3A6MTJweDtmb250LXNpemU6Ljg1ZW07Y29sb3I6IzY0NzQ4Yjt9CiAgICAgICAgLnZtMnAtZm9ybS13aWRlIHRkW3N0eWxlKj0iZGlzcGxheTpmbGV4Il17ZmxleC13cmFwOndyYXA7fQogICAgICAgIC5uYXYtdGFiLXdyYXBwZXJ7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcDtkaXNwbGF5OmJsb2NrO30KICAgICAgfQogICAgICAudm0ycC1wcm9tby1jYXJke2JhY2tncm91bmQ6I2ZlZjNjNztib3JkZXI6MnB4IHNvbGlkICNkOTc3MDY7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7fQogICAgICAudm0ycC10YWJ3cmFwe292ZXJmbG93LXg6YXV0bzt9CiAgICAgIDwvc3R5bGU+CgogICAgICA8aDEgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbTo0cHg7Ij4KICAgICAgICDwn5OKIFByb21vcyAmYW1wOyBCYW5uZXIKICAgICAgPC9oMT4KCiAgICAgIDw/cGhwIGlmICgkZGlzcGFyYXJfbXNnKSBlY2hvICRkaXNwYXJhcl9tc2c7ID8+CgogICAgICA8IS0tIFRhYnMgbmF2IC0tPgogICAgICA8bmF2IGNsYXNzPSJuYXYtdGFiLXdyYXBwZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjIwcHg7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcDtkaXNwbGF5OmJsb2NrOyI+CiAgICAgICAgPD9waHAKICAgICAgICAkdGFicyA9IFsnZGFzaGJvYXJkJz0+J/Cfk4ogRGFzaGJvYXJkJywnZGlzcGFyYXInPT4n8J+agCBEaXNwYXJhciBQcm9tbycsJ2hpc3Rvcmljbyc9Pifwn5OLIEhpc3TDs3JpY28gV0EnLCdiYW5uZXInPT4n4pqZ77iPIENvbmZpZyBCYW5uZXInLCdtZW1icm9zJz0+J/CfkaUgTWVtYnJvcyddOwogICAgICAgIGZvcmVhY2ggKCR0YWJzIGFzICR0PT4kbGFiZWwpOgogICAgICAgICAgICAkY2xzID0gJHRhYj09PSR0ID8gJ25hdi10YWItYWN0aXZlJyA6ICcnOwogICAgICAgID8+CiAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRiYXNlX3VybC4nJnRhYj0nLiR0KTsgPz4iIGNsYXNzPSJuYXYtdGFiIDw/cGhwIGVjaG8gJGNsczsgPz4iPjw/cGhwIGVjaG8gJGxhYmVsOyA/PjwvYT4KICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICA8L25hdj4KCiAgICAgIDw/cGhwIGlmICgkdGFiID09PSAnZGFzaGJvYXJkJyk6ID8+CiAgICAgIDwhLS0g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIFRBQjogREFTSEJPQVJEIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAtLT4KCiAgICAgIDwhLS0gRmlsdHJvcyAtLT4KICAgICAgPGZvcm0gbWV0aG9kPSJnZXQiIHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxNnB4O2FsaWduLWl0ZW1zOmNlbnRlcjsiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBhZ2UiIHZhbHVlPSJ2bTItcHJvbW9zIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0YWIiIHZhbHVlPSJkYXNoYm9hcmQiPgogICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwOyI+UGVyw61vZG86CiAgICAgICAgICA8c2VsZWN0IG5hbWU9InBlcmlvZCIgb25jaGFuZ2U9InRoaXMuZm9ybS5zdWJtaXQoKSI+CiAgICAgICAgICAgIDw/cGhwIGZvcmVhY2goWyc3ZCc9Pic3IGRpYXMnLCczMGQnPT4nMzAgZGlhcycsJzkwZCc9Pic5MCBkaWFzJywnYWxsJz0+J1R1ZG8nXSBhcyAkdj0+JGwpOiA/PgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvICR2OyA/PiIgPD9waHAgc2VsZWN0ZWQoJHBlcmlvZCwkdik7ID8+Pjw/cGhwIGVjaG8gJGw7ID8+PC9vcHRpb24+CiAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICA8L2xhYmVsPgogICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwOyI+VGlwbzoKICAgICAgICAgIDxzZWxlY3QgbmFtZT0idGlwbyIgb25jaGFuZ2U9InRoaXMuZm9ybS5zdWJtaXQoKSI+CiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFsbCIgPD9waHAgc2VsZWN0ZWQoJHRpcG8sJ2FsbCcpOyA/Pj5Ub2Rvczwvb3B0aW9uPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJtZWdhIiA8P3BocCBzZWxlY3RlZCgkdGlwbywnbWVnYScpOyA/Pj5NZWdhIFByb21vPC9vcHRpb24+CiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im1pbmkiIDw/cGhwIHNlbGVjdGVkKCR0aXBvLCdtaW5pJyk7ID8+Pk1pbmkgUHJvbW88L29wdGlvbj4KICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgIDwvbGFiZWw+CiAgICAgIDwvZm9ybT4KCiAgICAgIDwhLS0gUHJvbW9zIGF0aXZhcyDigJQgdjEuNS4xNSBtdWx0aS1wcm9tbyAtLT4KICAgICAgPD9waHAgaWYgKCFlbXB0eSgkcHJvbW9zX2F0aXZhcykpOiA/PgogICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjE4cHg7Ij4KICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6Ljg1ZW07Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiM5MjQwMGU7bWFyZ2luLWJvdHRvbTo4cHg7Ij7wn5SlIDw/cGhwIGVjaG8gY291bnQoJHByb21vc19hdGl2YXMpOyA/PiBQUk9NTyhTKSBBVElWQShTKSBOTyBDQVJST1NTRUw8L2Rpdj4KICAgICAgICA8P3BocCBmb3JlYWNoICgkcHJvbW9zX2F0aXZhcyBhcyAkcGEpOiA/PgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZlZjNjNztib3JkZXI6MnB4IHNvbGlkICNkOTc3MDY7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206OHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7Ij4KICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcDsiPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOi45NWVtO2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojNzgzNTBmOyI+PD9waHAgZWNobyBlc2NfaHRtbCgkcGEtPnByb2R1Y3RfbmFtZSA/PyAnJyk7ID8+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZDk3NzA2O2NvbG9yOiNmZmY7cGFkZGluZzoycHggMTBweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZTouODVlbTsiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHBhLT5kaXNjb3VudF9wZXJjZW50ID8/ICcnKTsgPz4lIE9GRjwvc3Bhbj4KICAgICAgICAgICAgPD9waHAgaWYgKCFlbXB0eSgkcGEtPmNvdXBvbl9jb2RlKSk6ID8+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7YmFja2dyb3VuZDojMWUyOTNiO2NvbG9yOiNmYmJmMjQ7cGFkZGluZzoycHggMTBweDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6Ljg1ZW07Ij48P3BocCBlY2hvIGVzY19odG1sKCRwYS0+Y291cG9uX2NvZGUpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDw/cGhwIGlmICghZW1wdHkoJHBhLT5leHBpcmVzX2F0KSk6ID8+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojOTI0MDBlO2ZvbnQtc2l6ZTouODJlbTsiPuKPsCA8P3BocCBlY2hvIGVzY19odG1sKCRwYS0+ZXhwaXJlc19hdCk7ID8+PC9zcGFuPgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0iaWYoY29uZmlybSgnRW5jZXJyYXIgZXN0YSBwcm9tbz8nKSl2bTJFbmRQcm9tbyg8P3BocCBlY2hvIGludHZhbCgkcGEtPmlkKTsgPz4pOyByZXR1cm4gZmFsc2U7IgogICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6I2RjMjYyNjtjb2xvcjojZmZmO3BhZGRpbmc6NXB4IDE0cHg7Ym9yZGVyLXJhZGl1czo4cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZTouODJlbTt3aGl0ZS1zcGFjZTpub3dyYXA7Ij4KICAgICAgICAgICAg4o+577iPIEVuY2VycmFyCiAgICAgICAgICA8L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGJhc2VfdXJsLicmdGFiPWRpc3BhcmFyJyk7ID8+IiBzdHlsZT0iZm9udC1zaXplOi44NWVtO2NvbG9yOiM3YzNhZWQ7Zm9udC13ZWlnaHQ6NjAwOyI+KyBBZGljaW9uYXIgbWFpcyB1bWEgcHJvbW8gYW8gY2Fycm9zc2VsIOKGkjwvYT4KICAgICAgPC9kaXY+CiAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2YwZmRmNDtib3JkZXI6MXB4IHNvbGlkICM4NmVmYWM7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMHB4IDE2cHg7bWFyZ2luLWJvdHRvbToxOHB4O2NvbG9yOiMxNjY1MzQ7Ij4KICAgICAgICDinIUgTmVuaHVtYSBwcm9tbyBhdGl2YSBubyBtb21lbnRvLiA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGJhc2VfdXJsLicmdGFiPWRpc3BhcmFyJyk7ID8+IiBzdHlsZT0iY29sb3I6IzE1ODAzZDtmb250LXdlaWdodDo2MDA7Ij7wn5qAIERpc3BhcmFyIG5vdmEgcHJvbW8g4oaSPC9hPgogICAgICA8L2Rpdj4KICAgICAgPD9waHAgZW5kaWY7ID8+CgogICAgICA8IS0tIEtQSSBDYXJkcyAtLT4KICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDE0MHB4LDFmcikpO2dhcDoxNHB4O21hcmdpbi1ib3R0b206MjRweDsiPgogICAgICAgIDw/cGhwCiAgICAgICAgJGNhcmRzID0gWwogICAgICAgICAgWyd2YWwnPT4kdG90YWxfZW52aW9zLCdsYWJlbCc9PidUb3RhbCBFbnZpb3MnLCdpY29uJz0+J/Cfk6QnLCdmaWx0ZXInPT4nJywnY29sb3InPT4nIzYzNjZmMSddLAogICAgICAgICAgWyd2YWwnPT4kdG90YWxfbWVnYSwnbGFiZWwnPT4nTWVnYSBQcm9tbycsJ2ljb24nPT4n8J+UpScsJ2ZpbHRlcic9PidtZWdhJywnY29sb3InPT4nI2Q5NzcwNiddLAogICAgICAgICAgWyd2YWwnPT4kdG90YWxfbWluaSwnbGFiZWwnPT4nTWluaSBQcm9tbycsJ2ljb24nPT4n4pqhJywnZmlsdGVyJz0+J21pbmknLCdjb2xvcic9PicjMTZhMzRhJ10sCiAgICAgICAgICBbJ3ZhbCc9PiR0b3RhbF9jbGlja3MsJ2xhYmVsJz0+J0NsaXF1ZXMnLCdpY29uJz0+J/CfkYYnLCdmaWx0ZXInPT4nJywnY29sb3InPT4nIzA4OTFiMiddLAogICAgICAgICAgWyd2YWwnPT4kY3RyX21lZGlvLiclJywnbGFiZWwnPT4nQ1RSIE3DqWRpbycsJ2ljb24nPT4n8J+TiCcsJ2ZpbHRlcic9PicnLCdjb2xvcic9PicjN2MzYWVkJ10sCiAgICAgICAgICBbJ3ZhbCc9PiRzZW1fY2xpY2tzLCdsYWJlbCc9PidTZW0gQ2xpcXVlcycsJ2ljb24nPT4n8J+YtCcsJ2ZpbHRlcic9PidzZW1fY2xpY2tzJywnY29sb3InPT4nI2RjMjYyNiddLAogICAgICAgIF07CiAgICAgICAgZm9yZWFjaCAoJGNhcmRzIGFzICRjKToKICAgICAgICAgICRocmVmID0gJGNbJ2ZpbHRlciddID8gZXNjX3VybCgkYmFzZV91cmwuJyZ0YWI9ZGFzaGJvYXJkJnBlcmlvZD0nLiRwZXJpb2QuJyZ0aXBvPScuJGNbJ2ZpbHRlciddKSA6ICcjJzsKICAgICAgICAgICRjdXJzb3IgPSAkY1snZmlsdGVyJ10gPyAncG9pbnRlcicgOiAnZGVmYXVsdCc7CiAgICAgICAgPz4KICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvICRocmVmOyA/PiIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweCAxMnB4O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjo8P3BocCBlY2hvICRjdXJzb3I7ID8+O3RyYW5zaXRpb246Ym94LXNoYWRvdyAuMnM7IiBvbm1vdXNlb3Zlcj0idGhpcy5zdHlsZS5ib3hTaGFkb3c9JzAgNHB4IDE2cHggcmdiYSgwLDAsMCwuMTMpJyIgb25tb3VzZW91dD0idGhpcy5zdHlsZS5ib3hTaGFkb3c9JyciPgogICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEuNmVtOyI+PD9waHAgZWNobyAkY1snaWNvbiddOyA/PjwvZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEuNmVtO2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjo8P3BocCBlY2hvICRjWydjb2xvciddOyA/PjsiPjw/cGhwIGVjaG8gJGNbJ3ZhbCddOyA/PjwvZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOi43NWVtO2NvbG9yOiM2NDc0OGI7bWFyZ2luLXRvcDoycHg7Ij48P3BocCBlY2hvICRjWydsYWJlbCddOyA/PjwvZGl2PgogICAgICAgIDwvYT4KICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICA8L2Rpdj4KCiAgICAgIDw/cGhwIGlmICgkbWVsaG9yX3Byb2QpOiA/PgogICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIzdjM2FlZCwjNjM2NmYxKTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEycHggMjBweDttYXJnaW4tYm90dG9tOjIwcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDsiPgogICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MS44ZW07Ij7wn4+GPC9zcGFuPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOi45ZW07b3BhY2l0eTouODU7Ij5NRUxIT1IgUFJPRFVUTyBOTyBQRVLDjU9ETzwvZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEuMWVtO2ZvbnQtd2VpZ2h0OjgwMDsiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJG1lbGhvcl9wcm9kLT5wcm9kdWN0X25hbWUgPz8gJycpOyA/PjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OmF1dG87dGV4dC1hbGlnbjpjZW50ZXI7Ij4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxLjZlbTtmb250LXdlaWdodDo4MDA7Ij48P3BocCBlY2hvIGludHZhbCgkbWVsaG9yX3Byb2QtPnRjKTsgPz48L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTouNzVlbTtvcGFjaXR5Oi44OyI+Y2xpcXVlczwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPD9waHAgZW5kaWY7ID8+CgogICAgICA8IS0tIFRvcCBwcm9kdXRvcyAtLT4KICAgICAgPD9waHAKICAgICAgJHRvcF9wcm9kcyA9ICR3cGRiLT5nZXRfcmVzdWx0cygkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICJTRUxFQ1QgcHJvZHVjdF9uYW1lLCBwcm9kdWN0X2lkLCBDT1VOVCgqKSBhcyBlbnZpb3MsIENPQUxFU0NFKFNVTShjbGlja3MpLDApIGFzIGNsaXF1ZXMsCiAgICAgICAgICAgICAgICAgIFJPVU5EKFNVTShjbGlja3MpL05VTExJRihDT1VOVCgqKSwwKSoxMDAsMSkgYXMgY3RyLAogICAgICAgICAgICAgICAgICBNQVgoc2VudF9hdCkgYXMgdWx0aW1vCiAgICAgICAgICAgRlJPTSB7JHRibF9sb2d9IFdIRVJFIHNlbnRfYXQ+PSVzeyR3aGVyZV90aXBvfQogICAgICAgICAgIEdST1VQIEJZIHByb2R1Y3RfaWQgT1JERVIgQlkgY2xpcXVlcyBERVNDIExJTUlUIDIwIiwgJGRhdGVfZnJvbSkpOwogICAgICA/PgogICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Ij4KICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOjE0cHggMThweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjFmNWY5O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7Ij4KICAgICAgICAgIDxzdHJvbmcgc3R5bGU9ImZvbnQtc2l6ZToxZW07Ij7wn5OmIFRvcCBQcm9kdXRvcyBwb3IgQ2xpcXVlczwvc3Ryb25nPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6YXV0bzsiPgogICAgICAgIDx0YWJsZSBjbGFzcz0id3AtbGlzdC10YWJsZSB3aWRlZmF0IGZpeGVkIHN0cmlwZWQiIHN0eWxlPSJtaW4td2lkdGg6NTAwcHg7Ij4KICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJ2bTJTb3J0VGFibGUodGhpcywwKSI+IyDihpU8L3RoPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJ2bTJTb3J0VGFibGUodGhpcywxKSI+UHJvZHV0byDihpU8L3RoPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJ2bTJTb3J0VGFibGUodGhpcywyKSI+RW52aW9zIOKGlTwvdGg+CiAgICAgICAgICAgICAgPHRoIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiIG9uY2xpY2s9InZtMlNvcnRUYWJsZSh0aGlzLDMpIj5DbGlxdWVzIOKGlTwvdGg+CiAgICAgICAgICAgICAgPHRoIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiIG9uY2xpY2s9InZtMlNvcnRUYWJsZSh0aGlzLDQpIj5DVFIgV0Eg4oaVPC90aD4KICAgICAgICAgICAgICA8dGg+w5psdGltbyBFbnZpbzwvdGg+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgPHRib2R5IGlkPSJwcm9tb3MtdG9wLXRib2R5Ij4KICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCR0b3BfcHJvZHMgYXMgJGk9PiRyKTogPz4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gJGkrMTsgPz48L3RkPgogICAgICAgICAgICA8dGQ+PD9waHAgZWNobyBlc2NfaHRtbCgkci0+cHJvZHVjdF9uYW1lID8/ICcnKTsgPz48L3RkPgogICAgICAgICAgICA8dGQ+PD9waHAgZWNobyBpbnR2YWwoJHItPmVudmlvcyk7ID8+PC90ZD4KICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gaW50dmFsKCRyLT5jbGlxdWVzKTsgPz48L3RkPgogICAgICAgICAgICA8dGQ+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtjb2xvcjo8P3BocCBlY2hvICRyLT5jdHI+PTEwPycjMTZhMzRhJzooJHItPmN0cj49NT8nI2Q5NzcwNic6JyNkYzI2MjYnKTsgPz4iPjw/cGhwIGVjaG8gJHItPmN0cjsgPz4lPC9zcGFuPjwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOi44NWVtO2NvbG9yOiM2NDc0OGI7Ij48P3BocCBlY2hvIGVzY19odG1sKCRyLT51bHRpbW8gPz8gJycpOyA/PjwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgIDw/cGhwIGlmIChlbXB0eSgkdG9wX3Byb2RzKSk6ID8+CiAgICAgICAgICA8dHI+PHRkIGNvbHNwYW49IjYiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjIwcHg7Y29sb3I6Izk0YTNiODsiPk5lbmh1bSBkYWRvIGVuY29udHJhZG8uPC90ZD48L3RyPgogICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICA8L3Rib2R5PgogICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPD9waHAgZWxzZWlmICgkdGFiID09PSAnZGlzcGFyYXInKTogPz4KICAgICAgPCEtLSDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgVEFCOiBESVNQQVJBUiBQUk9NTyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgLS0+CiAgICAgIDxkaXYgY2xhc3M9InZtMnAtZ3JpZDIiPgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjRweDsiPgogICAgICAgICAgPGgyIHN0eWxlPSJtYXJnaW4tdG9wOjA7Zm9udC1zaXplOjEuMWVtOyI+8J+agCBOb3ZhIFByb21vPC9oMj4KICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgY2xhc3M9InZtMnAtZm9ybS13aWRlIj4KICAgICAgICAgICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3ZtMl9kaXNwYXJhcl9ub25jZScpOyA/PgogICAgICAgICAgICA8dGFibGUgY2xhc3M9ImZvcm0tdGFibGUiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjA7Ij4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0idm0yX3Byb2QiPlByb2R1dG8gKjwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJwcm9kdWN0X2lkIiBpZD0idm0yX3Byb2QiIHN0eWxlPSJ3aWR0aDoxMDAlO21heC13aWR0aDo0MDBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7IiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPuKAlCBTZWxlY2lvbmUg4oCUPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCgkcHJvZHV0b3MgYXMgJHApOiA/PgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gJHAtPklEOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCgkcC0+cG9zdF90aXRsZSk7ID8+PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPjxsYWJlbCBmb3I9InZtMl9kZXNjIj5EZXNjb250byAoJSkgKjwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0iZGlzY291bnRfcGVyY2VudCIgaWQ9InZtMl9kZXNjIiBtaW49IjEiIG1heD0iOTkiIHN0eWxlPSJ3aWR0aDoxMDBweDsiIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzY0NzQ4Yjtmb250LXNpemU6Ljg1ZW07bWFyZ2luLWxlZnQ6OHB4OyI+JSBkZSBkZXNjb250bzwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0idm0yX2R1ciI+RHVyYcOnw6NvIChob3Jhcyk8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9ImR1cmFjYW9faG9yYXMiIGlkPSJ2bTJfZHVyIiBtaW49IjEiIG1heD0iNzIiIHZhbHVlPSIzIiBzdHlsZT0id2lkdGg6ODBweDsiPgogICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzY0NzQ4Yjtmb250LXNpemU6Ljg1ZW07bWFyZ2luLWxlZnQ6OHB4OyI+aG9yYXMgYXTDqSBleHBpcmFyPC9zcGFuPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5UaXBvPC90aD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJtYXJnaW4tcmlnaHQ6MjBweDtjdXJzb3I6cG9pbnRlcjsiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iaXNfbWVnYV9wcm9tbyIgdmFsdWU9IjEiPgogICAgICAgICAgICAgICAgICAgIPCflKUgTWVnYSBQcm9tbyAoZGVzdGFxdWUgZXNwZWNpYWwpCiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPkVudmlhciBXQTwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNlbmRfd2hhdHNhcHAiIHZhbHVlPSIxIj4KICAgICAgICAgICAgICAgICAgICDwn5OxIERpc3BhcmFyIG1lbnNhZ2VtIFdoYXRzQXBwIGFvIGNyaWFyCiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MjBweDsiPgogICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJ2bTJfZGlzcGFyYXIiIGNsYXNzPSJidXR0b24gYnV0dG9uLXByaW1hcnkiIHN0eWxlPSJiYWNrZ3JvdW5kOiM3YzNhZWQ7Ym9yZGVyLWNvbG9yOiM2ZDI4ZDk7Zm9udC1zaXplOi45NWVtO3BhZGRpbmc6NnB4IDIwcHg7Ij4KICAgICAgICAgICAgICAgIPCfmoAgRGlzcGFyYXIgUHJvbW8KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXY+CiAgICAgICAgICA8IS0tIFByb21vcyBhdGl2YXMg4oCUIHYxLjUuMTUgLS0+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjIwcHg7bWFyZ2luLWJvdHRvbToxNnB4OyI+CiAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luLXRvcDowO2ZvbnQtc2l6ZTouOTVlbTtjb2xvcjojNjQ3NDhiOyI+UFJPTU9TIEFUSVZBUyBOTyBDQVJST1NTRUwgKDw/cGhwIGVjaG8gY291bnQoJHByb21vc19hdGl2YXMpOyA/Pik8L2gzPgogICAgICAgICAgICA8P3BocCBpZiAoIWVtcHR5KCRwcm9tb3NfYXRpdmFzKSk6ID8+CiAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRwcm9tb3NfYXRpdmFzIGFzICRwYSk6ID8+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjhweDtwYWRkaW5nOjhweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmMWY1Zjk7Ij4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojOTI0MDBlOyI+PD9waHAgZWNobyBlc2NfaHRtbCgkcGEtPnByb2R1Y3RfbmFtZSA/PyAnJyk7ID8+PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2Q5NzcwNjtjb2xvcjojZmZmO3BhZGRpbmc6MnB4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6LjhlbTttYXJnaW4tbGVmdDo2cHg7Ij48P3BocCBlY2hvIGVzY19odG1sKCRwYS0+ZGlzY291bnRfcGVyY2VudCA/PyAnJyk7ID8+JSBPRkY8L3NwYW4+CiAgICAgICAgICAgICAgICA8P3BocCBpZiAoIWVtcHR5KCRwYS0+Y291cG9uX2NvZGUpKTogPz48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlO2JhY2tncm91bmQ6IzFlMjkzYjtjb2xvcjojZmJiZjI0O3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6Ljc4ZW07bWFyZ2luLWxlZnQ6NHB4OyI+PD9waHAgZWNobyBlc2NfaHRtbCgkcGEtPmNvdXBvbl9jb2RlKTsgPz48L3NwYW4+PD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0iaWYoY29uZmlybSgnRW5jZXJyYXI/Jykpdm0yRW5kUHJvbW8oPD9waHAgZWNobyBpbnR2YWwoJHBhLT5pZCk7ID8+KTsgcmV0dXJuIGZhbHNlOyIKICAgICAgICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDojZGMyNjI2O2NvbG9yOiNmZmY7cGFkZGluZzo0cHggMTJweDtib3JkZXItcmFkaXVzOjZweDt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXNpemU6LjhlbTtmb250LXdlaWdodDo2MDA7Ij7ij7nvuI88L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOi44MmVtO2NvbG9yOiM2NDc0OGI7Ij7wn5KhIERpc3BhcmFyIG5vdmEgcHJvbW8gYWJhaXhvIOKAlCBuw6NvIGVuY2VycmEgYXMgYW50ZXJpb3Jlcy48L2Rpdj4KICAgICAgICAgICAgPD9waHAgZWxzZTogPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6Izk0YTNiODtmb250LXNpemU6LjllbTsiPk5lbmh1bWEgcHJvbW8gYXRpdmEuIFVzZSBvIGZvcm11bMOhcmlvIGFiYWl4byBwYXJhIGRpc3BhcmFyIGEgcHJpbWVpcmEuPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPCEtLSDDmmx0aW1hcyBwcm9tb3MgLS0+CiAgICAgICAgICA8P3BocCAkdWx0aW1hcyA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0VMRUNUIHByb2R1Y3RfbmFtZSxkaXNjb3VudF9wZXJjZW50LGlzX21lZ2FfcHJvbW8sY2xpY2tzLHNlbnRfYXQgRlJPTSB7JHRibF9sb2d9IE9SREVSIEJZIHNlbnRfYXQgREVTQyBMSU1JVCA4Iik7ID8+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE2cHg7Ij4KICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW4tdG9wOjA7Zm9udC1zaXplOi45ZW07Y29sb3I6IzY0NzQ4YjsiPsOaTFRJTUFTIDggUFJPTU9TIERJU1BBUkFEQVM8L2gzPgogICAgICAgICAgICA8P3BocCBmb3JlYWNoKCR1bHRpbWFzIGFzICR1KTogPz4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjZweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmMWY1Zjk7Zm9udC1zaXplOi44NWVtOyI+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDw/cGhwIGlmKCR1LT5pc19tZWdhX3Byb21vKTogPz48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZmVmM2M3O2NvbG9yOiM5MjQwMGU7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoxcHggNnB4O2ZvbnQtc2l6ZTouOGVtO21hcmdpbi1yaWdodDo0cHg7Ij5NRUdBPC9zcGFuPjw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPD9waHAgZWNobyBlc2NfaHRtbChzdWJzdHIoJHUtPnByb2R1Y3RfbmFtZSA/PyAnJywgMCwgMzApKTsgPz4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7Ij4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojN2MzYWVkO2ZvbnQtd2VpZ2h0OjcwMDsiPjw/cGhwIGVjaG8gJHUtPmRpc2NvdW50X3BlcmNlbnQ7ID8+JTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojNjQ3NDhiOyI+8J+RhiA8P3BocCBlY2hvICR1LT5jbGlja3M7ID8+PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDw/cGhwIGVsc2VpZiAoJHRhYiA9PT0gJ2hpc3RvcmljbycpOiA/PgogICAgICA8IS0tIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCBUQUI6IEhJU1TDk1JJQ08gV0Eg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIC0tPgogICAgICA8P3BocAogICAgICAkcGcgICA9IG1heCgxLCBpbnR2YWwoJF9HRVRbJ3BhZ2VkJ10gPz8gMSkpOwogICAgICAkcGVyICA9IDUwOwogICAgICAkb2ZmICA9ICgkcGctMSkqJHBlcjsKICAgICAgJGhpc3RfdGlwbyA9IHNhbml0aXplX3RleHRfZmllbGQoJF9HRVRbJ2h0aXBvJ10gPz8gJ2FsbCcpOwogICAgICAkaF93aGVyZSA9ICcnOwogICAgICBpZiAoJGhpc3RfdGlwbz09PSdtZWdhJykgJGhfd2hlcmUgPSAnIFdIRVJFIGlzX21lZ2FfcHJvbW89MSc7CiAgICAgIGVsc2VpZiAoJGhpc3RfdGlwbz09PSdtaW5pJykgJGhfd2hlcmUgPSAnIFdIRVJFIGlzX21lZ2FfcHJvbW89MCc7CiAgICAgICRoaXN0X3RvdGFsID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00geyR0YmxfbG9nfXskaF93aGVyZX0iKTsKICAgICAgJGhpc3QgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoJHdwZGItPnByZXBhcmUoIlNFTEVDVCAqIEZST00geyR0YmxfbG9nfXskaF93aGVyZX0gT1JERVIgQlkgc2VudF9hdCBERVNDIExJTUlUICVkIE9GRlNFVCAlZCIsICRwZXIsICRvZmYpKTsKICAgICAgJHBhZ2VzID0gY2VpbCgkaGlzdF90b3RhbC8kcGVyKTsKICAgICAgPz4KICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjE0cHg7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7Ij4KICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6LjllbTtjb2xvcjojNjQ3NDhiOyI+PD9waHAgZWNobyAkaGlzdF90b3RhbDsgPz4gZGlzcGFyb3Mgbm8gaGlzdMOzcmljbzwvZGl2PgogICAgICAgIDxmb3JtIG1ldGhvZD0iZ2V0IiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyOyI+CiAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYWdlIiB2YWx1ZT0idm0yLXByb21vcyI+CiAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0YWIiIHZhbHVlPSJoaXN0b3JpY28iPgogICAgICAgICAgPHNlbGVjdCBuYW1lPSJodGlwbyIgb25jaGFuZ2U9InRoaXMuZm9ybS5zdWJtaXQoKSI+CiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFsbCIgPD9waHAgc2VsZWN0ZWQoJGhpc3RfdGlwbywnYWxsJyk7ID8+PlRvZG9zPC9vcHRpb24+CiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Im1lZ2EiIDw/cGhwIHNlbGVjdGVkKCRoaXN0X3RpcG8sJ21lZ2EnKTsgPz4+TWVnYTwvb3B0aW9uPgogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJtaW5pIiA8P3BocCBzZWxlY3RlZCgkaGlzdF90aXBvLCdtaW5pJyk7ID8+Pk1pbmk8L29wdGlvbj4KICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgIDwvZm9ybT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O292ZXJmbG93OmhpZGRlbjsiPgogICAgICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6YXV0bzsiPgogICAgICAgIDx0YWJsZSBjbGFzcz0id3AtbGlzdC10YWJsZSB3aWRlZmF0IGZpeGVkIHN0cmlwZWQiIHN0eWxlPSJtaW4td2lkdGg6NjUwcHg7Ij4KICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJ2bTJTb3J0VGFibGUodGhpcywwKSI+RGF0YSDihpU8L3RoPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJ2bTJTb3J0VGFibGUodGhpcywxKSI+UHJvZHV0byDihpU8L3RoPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJ2bTJTb3J0VGFibGUodGhpcywyKSI+RGVzY29udG8g4oaVPC90aD4KICAgICAgICAgICAgICA8dGg+VGlwbzwvdGg+CiAgICAgICAgICAgICAgPHRoIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiIG9uY2xpY2s9InZtMlNvcnRUYWJsZSh0aGlzLDQpIj5QcmXDp28gT3JpZyDihpU8L3RoPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IiBvbmNsaWNrPSJ2bTJTb3J0VGFibGUodGhpcyw1KSI+UHJlw6dvIGMvIERlc2Mg4oaVPC90aD4KICAgICAgICAgICAgICA8dGggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyIgb25jbGljaz0idm0yU29ydFRhYmxlKHRoaXMsNikiPkNsaXF1ZXMg4oaVPC90aD4KICAgICAgICAgICAgICA8dGg+Q3Vwb208L3RoPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgPC90aGVhZD4KICAgICAgICAgIDx0Ym9keSBpZD0iaGlzdG9yaWNvLXRib2R5Ij4KICAgICAgICAgIDw/cGhwIGZvcmVhY2goJGhpc3QgYXMgJHIpOiA/PgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZTouODJlbTtjb2xvcjojNjQ3NDhiOyI+PD9waHAgZWNobyBlc2NfaHRtbCgkci0+c2VudF9hdCk7ID8+PC90ZD4KICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHItPnByb2R1Y3RfbmFtZSA/PyAnJyk7ID8+PC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPSJmb250LXdlaWdodDo3MDA7Y29sb3I6IzdjM2FlZDsiPjw/cGhwIGVjaG8gJHItPmRpc2NvdW50X3BlcmNlbnQ7ID8+JTwvdGQ+CiAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvICRyLT5pc19tZWdhX3Byb21vID8gJzxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZWYzYzc7Y29sb3I6IzkyNDAwZTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjJweCA4cHg7Zm9udC1zaXplOi44ZW07Ij7wn5SlIE1FR0E8L3NwYW4+JyA6ICc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZjFmNWY5O2NvbG9yOiM2NDc0OGI7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoycHggOHB4O2ZvbnQtc2l6ZTouOGVtOyI+4pqhIE1pbmk8L3NwYW4+JzsgPz48L3RkPgogICAgICAgICAgICA8dGQ+UiQgPD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRyLT5vcmlnaW5hbF9wcmljZSA/PyAwLCAyLCAnLCcsICcuJyk7ID8+PC90ZD4KICAgICAgICAgICAgPHRkPlIkIDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkci0+ZGlzY291bnRlZF9wcmljZSA/PyAwLCAyLCAnLCcsICcuJyk7ID8+PC90ZD4KICAgICAgICAgICAgPHRkIHN0eWxlPSJmb250LXdlaWdodDo3MDA7Y29sb3I6PD9waHAgZWNobyAkci0+Y2xpY2tzPjA/JyMxNmEzNGEnOicjZGMyNjI2JzsgPz4iPjw/cGhwIGVjaG8gaW50dmFsKCRyLT5jbGlja3MpOyA/PjwvdGQ+CiAgICAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZTouOGVtO2NvbG9yOiM2NDc0OGI7Ij48P3BocCBlY2hvIGVzY19odG1sKCRyLT5jb3Vwb25fY29kZSA/PyAnLScpOyA/PjwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgIDw/cGhwIGlmKGVtcHR5KCRoaXN0KSk6ID8+CiAgICAgICAgICA8dHI+PHRkIGNvbHNwYW49IjgiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjIwcHg7Y29sb3I6Izk0YTNiODsiPk5lbmh1bSBoaXN0w7NyaWNvIGVuY29udHJhZG8uPC90ZD48L3RyPgogICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICA8L3Rib2R5PgogICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8P3BocCBpZiAoJHBhZ2VzID4gMSk6ID8+CiAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTZweDtkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcDsiPgogICAgICAgIDw/cGhwIGZvciAoJHA9MTskcDw9JHBhZ2VzOyRwKyspOiA/PgogICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybChhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItcHJvbW9zJywndGFiJz0+J2hpc3RvcmljbycsJ3BhZ2VkJz0+JHAsJ2h0aXBvJz0+JGhpc3RfdGlwb10sIGFkbWluX3VybCgnYWRtaW4ucGhwJykpKTsgPz4iCiAgICAgICAgICAgc3R5bGU9InBhZGRpbmc6NHB4IDEycHg7YmFja2dyb3VuZDo8P3BocCBlY2hvICRwPT09JHBnPycjN2MzYWVkJzonI2U1ZTdlYic7ID8+O2NvbG9yOjw/cGhwIGVjaG8gJHA9PT0kcGc/JyNmZmYnOicjMzM0MTU1JzsgPz47Ym9yZGVyLXJhZGl1czo2cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOi44NWVtOyI+CiAgICAgICAgICA8P3BocCBlY2hvICRwOyA/PgogICAgICAgIDwvYT4KICAgICAgICA8P3BocCBlbmRmb3I7ID8+CiAgICAgIDwvZGl2PgogICAgICA8P3BocCBlbmRpZjsgPz4KCiAgICAgIDw/cGhwIGVsc2VpZiAoJHRhYiA9PT0gJ2Jhbm5lcicpOiA/PgogICAgICA8IS0tIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCBUQUI6IENPTkZJRyBCQU5ORVIg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIC0tPgogICAgICA8ZGl2IGNsYXNzPSJ2bTJwLWdyaWQyLWVxIj4KICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjI0cHg7Ij4KICAgICAgICAgIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDowO2ZvbnQtc2l6ZToxLjFlbTsiPvCfj7fvuI8gQ29uZmlndXJhw6fDtWVzIGRvIEJhbm5lcjwvaDI+CiAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGNsYXNzPSJ2bTJwLWZvcm0td2lkZSI+CiAgICAgICAgICAgIDw/cGhwIHdwX25vbmNlX2ZpZWxkKCd2bTJfYmFubmVyX25vbmNlJyk7ID8+CiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZm9ybS10YWJsZSI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPjxsYWJlbD5TdGF0dXM8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4OyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ2bV9iYW5uZXJfZW5hYmxlZCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoZ2V0X29wdGlvbigndm1fYmFubmVyX2VuYWJsZWQnLCcxJyksJzEnKTsgPz4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+QmFubmVyIGhhYmlsaXRhZG8gbm8gc2l0ZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iYmFubmVyX3BvcyI+UG9zacOnw6NvPC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtX2Jhbm5lcl9wb3NpdGlvbiIgaWQ9ImJhbm5lcl9wb3MiPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InRvcCIgPD9waHAgc2VsZWN0ZWQoZ2V0X29wdGlvbigndm1fYmFubmVyX3Bvc2l0aW9uJywndG9wJyksJ3RvcCcpOyA/Pj5Ub3BvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYm90dG9tIiA8P3BocCBzZWxlY3RlZChnZXRfb3B0aW9uKCd2bV9iYW5uZXJfcG9zaXRpb24nLCd0b3AnKSwnYm90dG9tJyk7ID8+PlJvZGFww6k8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPjxsYWJlbD5Ib3LDoXJpbyBkZSBFeGliacOnw6NvPC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4OyI+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0aW1lIiBuYW1lPSJ2bV9iYW5uZXJfaG9yYV9pbmljaW8iIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKGdldF9vcHRpb24oJ3ZtX2Jhbm5lcl9ob3JhX2luaWNpbycsJzA4OjAwJykpOyA/PiIgc3R5bGU9IndpZHRoOjEwMHB4OyI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojNjQ3NDhiOyI+YXTDqTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRpbWUiIG5hbWU9InZtX2Jhbm5lcl9ob3JhX2ZpbSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoZ2V0X29wdGlvbigndm1fYmFubmVyX2hvcmFfZmltJywnMjI6MDAnKSk7ID8+IiBzdHlsZT0id2lkdGg6MTAwcHg7Ij4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0iYmFubmVyX2N0YSI+VGV4dG8gZG8gQm90w6NvIENUQTwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idm1fYmFubmVyX2N0YV90ZXh0IiBpZD0iYmFubmVyX2N0YSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoZ2V0X29wdGlvbigndm1fYmFubmVyX2N0YV90ZXh0JywnQ09QSUFSIENVUE9NJykpOyA/PiIgc3R5bGU9IndpZHRoOjEwMCU7bWF4LXdpZHRoOjMwMHB4OyI+PC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD48bGFiZWw+QW5pbWHDp8OjbzwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InZtX2Jhbm5lcl9hbmltYWNhbyIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoZ2V0X29wdGlvbigndm1fYmFubmVyX2FuaW1hY2FvJywnMScpLCcxJyk7ID8+PgogICAgICAgICAgICAgICAgICAgIDxzcGFuPkF0aXZhciBhbmltYcOnw6NvIG5vIGJhbm5lcjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsPk1vc3RyYXIgSW1hZ2VtIGRvIFByb2R1dG88L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4OyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ2bV9iYW5uZXJfbW9zdHJhcl9pbWFnZW0iIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKGdldF9vcHRpb24oJ3ZtX2Jhbm5lcl9tb3N0cmFyX2ltYWdlbScsJzAnKSwnMScpOyA/Pj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5FeGliaXIgaW1hZ2VtIGRvIHByb2R1dG8gbm8gYmFubmVyPC9zcGFuPgogICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJiYW5uZXJfY29yX21pbmkiPkNvciBNaW5pIFByb21vPC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4OyI+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjb2xvciIgbmFtZT0idm1fYmFubmVyX2Nvcl9taW5pIiBpZD0iYmFubmVyX2Nvcl9taW5pIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cihnZXRfb3B0aW9uKCd2bV9iYW5uZXJfY29yX21pbmknLCcjMTZhMzRhJykpOyA/PiI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6Ljg1ZW07Y29sb3I6IzY0NzQ4YjsiPkNvciBkZSBmdW5kbyBwYXJhIG1pbmkgcHJvbW9zPC9zcGFuPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJiYW5uZXJfY29yX21lZ2EiPkNvciBNZWdhIFByb21vPC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4OyI+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjb2xvciIgbmFtZT0idm1fYmFubmVyX2Nvcl9tZWdhIiBpZD0iYmFubmVyX2Nvcl9tZWdhIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cihnZXRfb3B0aW9uKCd2bV9iYW5uZXJfY29yX21lZ2EnLCcjYjQ1MzA5JykpOyA/PiI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6Ljg1ZW07Y29sb3I6IzY0NzQ4YjsiPkNvciBkZSBmdW5kbyBwYXJhIG1lZ2EgcHJvbW9zPC9zcGFuPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJiYW5uZXJfcGZ4X21pbmkiPlByZWZpeG8gTWluaTwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idm1fYmFubmVyX3ByZWZpeG9fbWluaSIgaWQ9ImJhbm5lcl9wZnhfbWluaSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoZ2V0X29wdGlvbigndm1fYmFubmVyX3ByZWZpeG9fbWluaScsJ+KaoSBPRkVSVEEgRVhDTFVTSVZBJykpOyA/PiIgc3R5bGU9IndpZHRoOjEwMCU7bWF4LXdpZHRoOjI4MHB4OyI+PC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJiYW5uZXJfcGZ4X21lZ2EiPlByZWZpeG8gTWVnYTwvbGFiZWw+PC90aD4KICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idm1fYmFubmVyX3ByZWZpeG9fbWVnYSIgaWQ9ImJhbm5lcl9wZnhfbWVnYSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoZ2V0X29wdGlvbigndm1fYmFubmVyX3ByZWZpeG9fbWVnYScsJyBNRUdBIFBST01PJykpOyA/PiIgc3R5bGU9IndpZHRoOjEwMCU7bWF4LXdpZHRoOjI4MHB4OyI+PC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgoKICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW4tdG9wOjI0cHg7bWFyZ2luLWJvdHRvbTo4cHg7Zm9udC1zaXplOjFlbTtjb2xvcjojMzM0MTU1OyI+8J+OoCBDYXJyb3NzZWwgTXVsdGktUHJvbW88L2gzPgogICAgICAgICAgICA8dGFibGUgY2xhc3M9ImZvcm0tdGFibGUiPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD48bGFiZWw+TXVsdGktUHJvbW88L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4OyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ2bV9wcm9tb19tdWx0aV9lbmFibGVkIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZChnZXRfb3B0aW9uKCd2bV9wcm9tb19tdWx0aV9lbmFibGVkJywnMScpLCcxJyk7ID8+PgogICAgICAgICAgICAgICAgICAgIDxzcGFuPkV4aWJpciBjYXJyb3NzZWwgY29tIG3Dumx0aXBsYXMgcHJvbW9zIGF0aXZhczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5RdWFuZG8gZGVzYXRpdmFkbywgZXhpYmUgYXBlbmFzIGEgcHJvbW8gbWFpcyByZWNlbnRlLjwvcD4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+PGxhYmVsIGZvcj0ibWF4X2Nhcm91c2VsIj5Nw6F4LiBubyBDYXJyb3NzZWw8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9InZtX3Byb21vX21heF9jYXJvdXNlbCIgaWQ9Im1heF9jYXJvdXNlbCIgbWluPSIxIiBtYXg9IjIwIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cihnZXRfb3B0aW9uKCd2bV9wcm9tb19tYXhfY2Fyb3VzZWwnLCc1JykpOyA/PiIgc3R5bGU9IndpZHRoOjcwcHg7Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OjZweDtmb250LXNpemU6Ljg1ZW07Y29sb3I6IzY0NzQ4YjsiPnByb21vcyBleGliaWRhcyBzaW11bHTDom5lYW1lbnRlPC9zcGFuPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJjYXJvdXNlbF9pbnQiPkludGVydmFsbyAocyk8L2xhYmVsPjwvdGg+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9InZtX3Byb21vX2Nhcm91c2VsX2ludGVydmFsIiBpZD0iY2Fyb3VzZWxfaW50IiBtaW49IjIiIG1heD0iMzAiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKGdldF9vcHRpb24oJ3ZtX3Byb21vX2Nhcm91c2VsX2ludGVydmFsJywnNScpKTsgPz4iIHN0eWxlPSJ3aWR0aDo3MHB4OyI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDo2cHg7Zm9udC1zaXplOi44NWVtO2NvbG9yOiM2NDc0OGI7Ij5zZWd1bmRvcyBlbnRyZSBwcm9tb3Mgbm8gY2Fycm9zc2VsPC9zcGFuPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD48bGFiZWwgZm9yPSJjYXJvdXNlbF9vcmQiPk9yZGVtPC9sYWJlbD48L3RoPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InZtX3Byb21vX2Nhcm91c2VsX29yZGVyIiBpZD0iY2Fyb3VzZWxfb3JkIj4KICAgICAgICAgICAgICAgICAgICA8P3BocCAkY28gPSBnZXRfb3B0aW9uKCd2bV9wcm9tb19jYXJvdXNlbF9vcmRlcicsJ2V4cGlyZXNfZmlyc3QnKTsgPz4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJleHBpcmVzX2ZpcnN0IiA8P3BocCBzZWxlY3RlZCgkY28sJ2V4cGlyZXNfZmlyc3QnKTsgPz4+4o+wIEV4cGlyYSBhbnRlczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRpc2NvdW50X2Rlc2MiIDw/cGhwIHNlbGVjdGVkKCRjbywnZGlzY291bnRfZGVzYycpOyA/Pj7wn5KlIE1haW9yIGRlc2NvbnRvPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibmV3ZXN0IiA8P3BocCBzZWxlY3RlZCgkY28sJ25ld2VzdCcpOyA/Pj7wn4aVIE1haXMgcmVjZW50ZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90YWJsZT4KCiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPgogICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJ2bTJfc2F2ZV9iYW5uZXIiIGNsYXNzPSJidXR0b24gYnV0dG9uLXByaW1hcnkiPvCfkr4gU2FsdmFyIENvbmZpZ3VyYcOnw7VlczwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZm9ybT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBQcmV2aWV3IGUgc3RhdHVzIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjIwcHg7bWFyZ2luLWJvdHRvbToxNnB4OyI+CiAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luLXRvcDowO2ZvbnQtc2l6ZTouOWVtO2NvbG9yOiM2NDc0OGI7Ij5TVEFUVVMgRE8gQkFOTkVSPC9oMz4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgJGVuYWJsZWQgPSBnZXRfb3B0aW9uKCd2bV9iYW5uZXJfZW5hYmxlZCcsJzEnKSA9PT0gJzEnOwogICAgICAgICAgICAkaGkgPSBnZXRfb3B0aW9uKCd2bV9iYW5uZXJfaG9yYV9pbmljaW8nLCcwODowMCcpOwogICAgICAgICAgICAkaGYgPSBnZXRfb3B0aW9uKCd2bV9iYW5uZXJfaG9yYV9maW0nLCcyMjowMCcpOwogICAgICAgICAgICA/PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MS4xZW07Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOjw/cGhwIGVjaG8gJGVuYWJsZWQ/JyMxNmEzNGEnOicjZGMyNjI2JzsgPz47Ij4KICAgICAgICAgICAgICA8P3BocCBlY2hvICRlbmFibGVkID8gJ+KchSBIYWJpbGl0YWRvJyA6ICfim5QgRGVzYWJpbGl0YWRvJzsgPz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZTouOWVtO2NvbG9yOiM2NDc0OGI7Ij4KICAgICAgICAgICAgICDij7AgRXhpYmnDp8OjbzogPD9waHAgZWNobyBlc2NfaHRtbCgkaGkpOyA/PiDigJMgPD9waHAgZWNobyBlc2NfaHRtbCgkaGYpOyA/PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo2cHg7Zm9udC1zaXplOi45ZW07Y29sb3I6IzY0NzQ4YjsiPgogICAgICAgICAgICAgIPCfk40gUG9zacOnw6NvOiA8P3BocCBlY2hvIGdldF9vcHRpb24oJ3ZtX2Jhbm5lcl9wb3NpdGlvbicsJ3RvcCcpID09PSAndG9wJyA/ICdUb3BvJyA6ICdSb2RhcMOpJzsgPz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmOGZhZmM7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE2cHg7Ij4KICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW4tdG9wOjA7Zm9udC1zaXplOi45ZW07Y29sb3I6IzY0NzQ4YjsiPlBST01PIEFUSVZBIE5PIEJBTk5FUjwvaDM+CiAgICAgICAgICAgIDw/cGhwIGlmICgkcHJvbW9fYXRpdmEpOiA/PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gZXNjX2F0dHIoZ2V0X29wdGlvbigndm1fYmFubmVyX2Nvcl9taW5pJywnIzE2YTM0YScpKTsgPz47Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDtmb250LXNpemU6LjllbTsiPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTouNzVlbTtsZXR0ZXItc3BhY2luZzoxcHg7Zm9udC13ZWlnaHQ6NjAwOyI+PD9waHAgZWNobyBlc2NfaHRtbChnZXRfb3B0aW9uKCd2bV9iYW5uZXJfcHJlZml4b19taW5pJywn4pqhIE9GRVJUQSBFWENMVVNJVkEnKSk7ID8+PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEuMDVlbTtmb250LXdlaWdodDo3MDA7bWFyZ2luLXRvcDo0cHg7Ij48P3BocCBlY2hvIGVzY19odG1sKCRwcm9tb19hdGl2YS0+cHJvZHVjdF9uYW1lID8/ICcnKTsgPz4g4oCUIDw/cGhwIGVjaG8gJHByb21vX2F0aXZhLT5kaXNjb3VudF9wZXJjZW50OyA/PiUgT0ZGPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4yKTtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjRweCAxMnB4O2JvcmRlci1yYWRpdXM6NnB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTouODVlbTsiPgogICAgICAgICAgICAgICAgPD9waHAgZWNobyBlc2NfaHRtbChnZXRfb3B0aW9uKCd2bV9iYW5uZXJfY3RhX3RleHQnLCdDT1BJQVIgQ1VQT00nKSk7ID8+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjojOTRhM2I4O2ZvbnQtc2l6ZTouOWVtOyI+TmVuaHVtYSBwcm9tbyBhdGl2YSBwYXJhIGV4aWJpciBubyBiYW5uZXIuPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8P3BocCBlbHNlaWYgKCR0YWIgPT09ICdtZW1icm9zJyk6ID8+CiAgICAgIDwhLS0g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIFRBQjogTUVNQlJPUyBHUlVQTyBQUk9NTyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgLS0+CiAgICAgIDw/cGhwCiAgICAgICRjdCA9ICR3cGRiLT5wcmVmaXggLiAndm0yX2NvbnRhY3RzJzsKICAgICAgJGdsID0gJHdwZGItPnByZWZpeCAuICd2bTJfZ3JvdXBfbG9nJzsKCiAgICAgICR0b3RhbF9hdGl2b3MgPSAoaW50KSR3cGRiLT5nZXRfdmFyKAogICAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NICRjdCBXSEVSRSBvcmlnZW5zIExJS0UgJyVcImdydXBvX3ZpcFwiJScgQU5EIG9yaWdlbnMgTk9UIExJS0UgJyVcInNhaXVfZ3J1cG9fdmlwXCIlJyIKICAgICAgKTsKICAgICAgJHRvdGFsX3NhaXUgPSAoaW50KSR3cGRiLT5nZXRfdmFyKAogICAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NICRjdCBXSEVSRSBvcmlnZW5zIExJS0UgJyVcInNhaXVfZ3J1cG9fdmlwXCIlJyIKICAgICAgKTsKCiAgICAgICRwZyAgPSBtYXgoMSwgaW50dmFsKCRfR0VUWydwYWdlZCddID8/IDEpKTsKICAgICAgJHBlciA9IDUwOwogICAgICAkb2ZmID0gKCRwZyAtIDEpICogJHBlcjsKICAgICAgJGdhY3QgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfR0VUWydnYWN0aW9uJ10gPz8gJ2FsbCcpOwoKICAgICAgaWYgKCRnYWN0ID09PSAnYWRkJykgewogICAgICAgICAgJHdoZXJlX3NxbCAgID0gIldIRVJFIGdsLmFjdGlvbiBJTiAoJ2FkZCcsJ3Byb21vdGUnKSI7CiAgICAgIH0gZWxzZWlmICgkZ2FjdCA9PT0gJ3JlbW92ZScpIHsKICAgICAgICAgICR3aGVyZV9zcWwgICA9ICJXSEVSRSBnbC5hY3Rpb24gPSAncmVtb3ZlJyI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgICAkd2hlcmVfc3FsICAgPSAnJzsKICAgICAgfQoKICAgICAgJGxvZ190b3RhbCA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICRnbCBnbCAkd2hlcmVfc3FsIik7CiAgICAgICRsb2dfcm93cyAgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAiU0VMRUNUIGdsLiosIGMubmFtZSBhcyBjbmFtZSBGUk9NICRnbCBnbAogICAgICAgICAgIExFRlQgSk9JTiAkY3QgYyBPTiBjLnBob25lID0gZ2wucGhvbmUKICAgICAgICAgICAkd2hlcmVfc3FsCiAgICAgICAgICAgT1JERVIgQlkgZ2wuY2hhbmdlZF9hdCBERVNDIExJTUlUICVkIE9GRlNFVCAlZCIsCiAgICAgICAgICAkcGVyLCAkb2ZmCiAgICAgICkpOwogICAgICAkcGFnZXMgPSAkbG9nX3RvdGFsID4gMCA/IGNlaWwoJGxvZ190b3RhbCAvICRwZXIpIDogMTsKICAgICAgPz4KCiAgICAgIDwhLS0gS1BJcyAtLT4KICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDE2MHB4LDFmcikpO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MjBweDsiPgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjsiCiAgICAgICAgICAgICBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249Jzw/cGhwIGVjaG8gZXNjX3VybChhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItcHJvbW9zJywndGFiJz0+J21lbWJyb3MnLCdnYWN0aW9uJz0+J2FkZCddLCBhZG1pbl91cmwoJ2FkbWluLnBocCcpKSk7ID8+JyI+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MmVtO2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjojMTZhMzRhOyI+PD9waHAgZWNobyAkdG90YWxfYXRpdm9zOyA/PjwvZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOi44NWVtO2NvbG9yOiM2NDc0OGI7bWFyZ2luLXRvcDo0cHg7Ij7irZAgTWVtYnJvcyBhdGl2b3M8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7IgogICAgICAgICAgICAgb25jbGljaz0id2luZG93LmxvY2F0aW9uPSc8P3BocCBlY2hvIGVzY191cmwoYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLXByb21vcycsJ3RhYic9PidtZW1icm9zJywnZ2FjdGlvbic9PidyZW1vdmUnXSwgYWRtaW5fdXJsKCdhZG1pbi5waHAnKSkpOyA/PiciPgogICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjJlbTtmb250LXdlaWdodDo4MDA7Y29sb3I6I2RjMjYyNjsiPjw/cGhwIGVjaG8gJHRvdGFsX3NhaXU7ID8+PC9kaXY+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6Ljg1ZW07Y29sb3I6IzY0NzQ4YjttYXJnaW4tdG9wOjRweDsiPvCfkYsgU2HDrXJhbSBkbyBncnVwbzwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweDt0ZXh0LWFsaWduOmNlbnRlcjsiPgogICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjJlbTtmb250LXdlaWdodDo4MDA7Y29sb3I6IzA4OTFiMjsiPjw/cGhwIGVjaG8gJGxvZ190b3RhbDsgPz48L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTouODVlbTtjb2xvcjojNjQ3NDhiO21hcmdpbi10b3A6NHB4OyI+8J+TiyBFdmVudG9zIG5vIGxvZzwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDwhLS0gRmlsdHJvcyAtLT4KICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjE0cHg7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7Ij4KICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6LjllbTtjb2xvcjojNjQ3NDhiOyI+PD9waHAgZWNobyAkbG9nX3RvdGFsOyA/PiBldmVudG9zIHJlZ2lzdHJhZG9zPC9kaXY+CiAgICAgICAgPGZvcm0gbWV0aG9kPSJnZXQiIHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7Ij4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBhZ2UiIHZhbHVlPSJ2bTItcHJvbW9zIj4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRhYiIgdmFsdWU9Im1lbWJyb3MiPgogICAgICAgICAgPHNlbGVjdCBuYW1lPSJnYWN0aW9uIiBvbmNoYW5nZT0idGhpcy5mb3JtLnN1Ym1pdCgpIiBzdHlsZT0iZm9udC1zaXplOi45ZW07Ij4KICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYWxsIiAgICA8P3BocCBzZWxlY3RlZCgkZ2FjdCwnYWxsJyk7ID8+PlRvZG9zPC9vcHRpb24+CiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFkZCIgICAgPD9waHAgc2VsZWN0ZWQoJGdhY3QsJ2FkZCcpOyA/Pj7inIUgRW50cmFkYXM8L29wdGlvbj4KICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icmVtb3ZlIiA8P3BocCBzZWxlY3RlZCgkZ2FjdCwncmVtb3ZlJyk7ID8+PuKdjCBTYcOtZGFzPC9vcHRpb24+CiAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICA8L2Zvcm0+CiAgICAgIDwvZGl2PgoKICAgICAgPCEtLSBUYWJlbGEgbG9nIC0tPgogICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Ij4KICAgICAgICA8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OmF1dG87Ij4KICAgICAgICA8dGFibGUgY2xhc3M9IndwLWxpc3QtdGFibGUgd2lkZWZhdCBmaXhlZCBzdHJpcGVkIj4KICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTYwcHg7Ij5EYXRhL0hvcmE8L3RoPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTUwcHg7Ij5UZWxlZm9uZTwvdGg+CiAgICAgICAgICAgICAgPHRoPk5vbWU8L3RoPgogICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6MTIwcHg7Ij5Bw6fDo288L3RoPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgPC90aGVhZD4KICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgIDw/cGhwIGlmIChlbXB0eSgkbG9nX3Jvd3MpKTogPz4KICAgICAgICAgICAgPHRyPjx0ZCBjb2xzcGFuPSI0IiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoyNHB4O2NvbG9yOiM5NGEzYjg7Ij4KICAgICAgICAgICAgICBOZW5odW0gZXZlbnRvIHJlZ2lzdHJhZG8gYWluZGEuIE9zIGV2ZW50b3MgY2hlZ2FtIHZpYSB3ZWJob29rIFotQVBJIChQQVJUSUNJUEFOVFNfQ0hBTkdFRCkuCiAgICAgICAgICAgIDwvdGQ+PC90cj4KICAgICAgICAgIDw/cGhwIGVsc2U6IGZvcmVhY2ggKCRsb2dfcm93cyBhcyAkcm93KToKICAgICAgICAgICAgJGlzX2FkZCA9IGluX2FycmF5KCRyb3ctPmFjdGlvbiwgWydhZGQnLCdwcm9tb3RlJ10sIHRydWUpOwogICAgICAgICAgICAkYmFkZ2UgID0gJGlzX2FkZAogICAgICAgICAgICAgID8gJzxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNkY2ZjZTc7Y29sb3I6IzE2YTM0YTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzozcHggMTBweDtmb250LXNpemU6LjhlbTtmb250LXdlaWdodDo2MDA7Ij7inIUgRU5UUk9VPC9zcGFuPicKICAgICAgICAgICAgICA6ICc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZmVlMmUyO2NvbG9yOiNkYzI2MjY7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6M3B4IDEwcHg7Zm9udC1zaXplOi44ZW07Zm9udC13ZWlnaHQ6NjAwOyI+4p2MIFNBSVU8L3NwYW4+JzsKICAgICAgICAgICAgJGNuYW1lID0gJHJvdy0+Y25hbWUKICAgICAgICAgICAgICA/IGVzY19odG1sKCRyb3ctPmNuYW1lKQogICAgICAgICAgICAgIDogJzxzcGFuIHN0eWxlPSJjb2xvcjojOTRhM2I4O2ZvbnQtc3R5bGU6aXRhbGljOyI+4oCUPC9zcGFuPic7CiAgICAgICAgICAgICRwaG9uZV91cmwgPSBhZG1pbl91cmwoJ2FkbWluLnBocD9wYWdlPXZtMi1jb250YWN0cyZzZWFyY2g9JyAuIHVybGVuY29kZSgkcm93LT5waG9uZSkpOwogICAgICAgICAgPz4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIHN0eWxlPSJmb250LXNpemU6LjgyZW07Y29sb3I6IzY0NzQ4YjsiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHJvdy0+Y2hhbmdlZF9hdCk7ID8+PC90ZD4KICAgICAgICAgICAgPHRkPjxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkcGhvbmVfdXJsKTsgPz4iIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOi45ZW07Ij48P3BocCBlY2hvIGVzY19odG1sKCRyb3ctPnBob25lKTsgPz48L2E+PC90ZD4KICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gJGNuYW1lOyA/PjwvdGQ+CiAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvICRiYWRnZTsgPz48L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7IGVuZGlmOyA/PgogICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDwhLS0gUGFnaW5hw6fDo28gLS0+CiAgICAgIDw/cGhwIGlmICgkcGFnZXMgPiAxKTogPz4KICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4O2Rpc3BsYXk6ZmxleDtnYXA6NnB4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjsiPgogICAgICAgIDw/cGhwIGZvciAoJHA9MTsgJHA8PSRwYWdlczsgJHArKyk6ID8+CiAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKGFkZF9xdWVyeV9hcmcoWydwYWdlJz0+J3ZtMi1wcm9tb3MnLCd0YWInPT4nbWVtYnJvcycsJ3BhZ2VkJz0+JHAsJ2dhY3Rpb24nPT4kZ2FjdF0sIGFkbWluX3VybCgnYWRtaW4ucGhwJykpKTsgPz4iCiAgICAgICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NHB4IDEwcHg7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOi44NWVtO3RleHQtZGVjb3JhdGlvbjpub25lOzw/cGhwIGVjaG8gJHA9PT0kcGcgPyAnYmFja2dyb3VuZDojN2MzYWVkO2NvbG9yOiNmZmY7JyA6ICdiYWNrZ3JvdW5kOiNmMWY1Zjk7Y29sb3I6IzM3NDE1MTsnOyA/PiI+CiAgICAgICAgICA8P3BocCBlY2hvICRwOyA/PgogICAgICAgIDwvYT4KICAgICAgICA8P3BocCBlbmRmb3I7ID8+CiAgICAgIDwvZGl2PgogICAgICA8P3BocCBlbmRpZjsgPz4KCiAgICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgIDwvZGl2PjwhLS0gL3dyYXAgLS0+CgogICAgPHNjcmlwdD4KICAgIGZ1bmN0aW9uIHZtMlNvcnRUYWJsZSh0aCwgY29sKSB7CiAgICAgICAgdmFyIHRib2R5ID0gdGguY2xvc2VzdCgndGFibGUnKS5xdWVyeVNlbGVjdG9yKCd0Ym9keScpOwogICAgICAgIHZhciByb3dzID0gQXJyYXkuZnJvbSh0Ym9keS5xdWVyeVNlbGVjdG9yQWxsKCd0cicpKTsKICAgICAgICB2YXIgYXNjID0gdGguZGF0YXNldC5zb3J0ICE9PSAnYXNjJzsKICAgICAgICB0aC5kYXRhc2V0LnNvcnQgPSBhc2MgPyAnYXNjJyA6ICdkZXNjJzsKICAgICAgICByb3dzLnNvcnQoZnVuY3Rpb24oYSxiKXsKICAgICAgICAgICAgdmFyIGF2ID0gYS5jZWxsc1tjb2xdID8gYS5jZWxsc1tjb2xdLmlubmVyVGV4dC5yZXBsYWNlKC9bXjAtOS4sJS1dL2csJycpIDogJyc7CiAgICAgICAgICAgIHZhciBidiA9IGIuY2VsbHNbY29sXSA/IGIuY2VsbHNbY29sXS5pbm5lclRleHQucmVwbGFjZSgvW14wLTkuLCUtXS9nLCcnKSA6ICcnOwogICAgICAgICAgICB2YXIgYW4gPSBwYXJzZUZsb2F0KGF2LnJlcGxhY2UoJywnLCcuJykpLCBibiA9IHBhcnNlRmxvYXQoYnYucmVwbGFjZSgnLCcsJy4nKSk7CiAgICAgICAgICAgIGlmICghaXNOYU4oYW4pICYmICFpc05hTihibikpIHJldHVybiBhc2MgPyBhbi1ibiA6IGJuLWFuOwogICAgICAgICAgICByZXR1cm4gYXNjID8gYXYubG9jYWxlQ29tcGFyZShidikgOiBidi5sb2NhbGVDb21wYXJlKGF2KTsKICAgICAgICB9KTsKICAgICAgICByb3dzLmZvckVhY2goZnVuY3Rpb24ocil7IHRib2R5LmFwcGVuZENoaWxkKHIpOyB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHZtMkVuZFByb21vKGlkKSB7CiAgICAgICAgdmFyIGJvZHkgPSBpZCA/IEpTT04uc3RyaW5naWZ5KHtpZDppZH0pIDogSlNPTi5zdHJpbmdpZnkoe30pOwogICAgICAgIGZldGNoKCc8P3BocCBlY2hvIGVzY19qcyhyZXN0X3VybCgndm0tY3JtLXYyL3YxL3Byb21vcy9lbmQnKSk7ID8+JywgewogICAgICAgICAgICBtZXRob2Q6J1BPU1QnLCBjcmVkZW50aWFsczonaW5jbHVkZScsCiAgICAgICAgICAgIGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi9qc29uJywnWC1XUC1Ob25jZSc6Jzw/cGhwIGVjaG8gd3BfY3JlYXRlX25vbmNlKCd3cF9yZXN0Jyk7ID8+J30sCiAgICAgICAgICAgIGJvZHk6IGJvZHkKICAgICAgICB9KS50aGVuKHI9PnIuanNvbigpKS50aGVuKGQ9PnsKICAgICAgICAgICAgYWxlcnQoZC5zdWNjZXNzID8gJ+KchSBQcm9tbyBlbmNlcnJhZGEhJyA6ICfinYwgJyArIChkLm1lc3NhZ2V8fCdFcnJvJykpOwogICAgICAgICAgICBpZihkLnN1Y2Nlc3MpIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgIH0pOwogICAgfQogICAgPC9zY3JpcHQ+Cjw/cGhwCn0KCgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gQkFSUkFTIFBST01PQ0lPTkFJUyDigJQgQ1JNIFYyIChjb250cm9sYSBWaXZhTWFpcyBIdWIpCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpmdW5jdGlvbiB2bTJfYmFycmFzX3BhZ2UoKSB7CiAgICBpZiAoIWN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykpIHJldHVybjsKCiAgICAvLyBIYW5kbGUgc2F2ZQogICAgaWYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09PSAnUE9TVCcgJiYgaXNzZXQoJF9QT1NUWyd2bTJfYmFycmFzX3NhdmUnXSkpIHsKICAgICAgICBjaGVja19hZG1pbl9yZWZlcmVyKCd2bTJfYmFycmFzX3NhdmUnKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bWh1Yl9jb3Vwb25fYmFyX2VuYWJsZWQnLCBpc3NldCgkX1BPU1RbJ2NvdXBvbl9iYXJfZW5hYmxlZCddKSA/IDEgOiAwKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bWh1Yl9jb3Vwb25fYmFyX2NvdXBvbicsICBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnY291cG9uX2Jhcl9jb3Vwb24nXSA/PyAnUFJJTUVJUkFDT01QUkEnKSk7CiAgICAgICAgdXBkYXRlX29wdGlvbigndm1odWJfY291cG9uX2Jhcl90ZXh0JywgICAgc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2NvdXBvbl9iYXJfdGV4dCddID8/ICc1JSBPRkYnKSk7CiAgICAgICAgdXBkYXRlX29wdGlvbigndm1odWJfdmlyYWxfYmFyX2VuYWJsZWQnLCAgaXNzZXQoJF9QT1NUWyd2aXJhbF9iYXJfZW5hYmxlZCddKSA/IDEgOiAwKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bWh1Yl92aXJhbF9iYXJfYWN0b3InLCAgICBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsndmlyYWxfYmFyX2FjdG9yJ10gPz8gJ1NlbHRvbiBNZWxvJykpOwogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtaHViX3ZpcmFsX2Jhcl90ZXh0JywgICAgIHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWyd2aXJhbF9iYXJfdGV4dCddID8/ICdjb21wYXJ0aWxob3Ugbm9zc2EgQ2FycmV0YSBubyBUaWtUb2snKSk7CiAgICAgICAgdXBkYXRlX29wdGlvbigndm1odWJfdmlyYWxfYmFyX2xpbmsnLCAgICAgZXNjX3VybF9yYXcoJF9QT1NUWyd2aXJhbF9iYXJfbGluayddID8/ICcvY2FycmV0YS12aXJhbC8nKSk7CiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1zdWNjZXNzIj48cD7inIUgQmFycmFzIFByb21vY2lvbmFpcyBzYWx2YXMhPC9wPjwvZGl2Pic7CiAgICB9CgogICAgLy8gUmVhZCBjdXJyZW50IHZhbHVlcwogICAgJGNiX29uICAgICA9IGdldF9vcHRpb24oJ3ZtaHViX2NvdXBvbl9iYXJfZW5hYmxlZCcsIDEpOwogICAgJGNiX2NvdXBvbiA9IGdldF9vcHRpb24oJ3ZtaHViX2NvdXBvbl9iYXJfY291cG9uJywgJ1BSSU1FSVJBQ09NUFJBJyk7CiAgICAkY2JfdGV4dCAgID0gZ2V0X29wdGlvbigndm1odWJfY291cG9uX2Jhcl90ZXh0JywgJzUlIE9GRicpOwogICAgJHZiX29uICAgICA9IGdldF9vcHRpb24oJ3ZtaHViX3ZpcmFsX2Jhcl9lbmFibGVkJywgMSk7CiAgICAkdmJfYWN0b3IgID0gZ2V0X29wdGlvbigndm1odWJfdmlyYWxfYmFyX2FjdG9yJywgJ1NlbHRvbiBNZWxvJyk7CiAgICAkdmJfdGV4dCAgID0gZ2V0X29wdGlvbigndm1odWJfdmlyYWxfYmFyX3RleHQnLCAnY29tcGFydGlsaG91IG5vc3NhIENhcnJldGEgbm8gVGlrVG9rJyk7CiAgICAkdmJfbGluayAgID0gZ2V0X29wdGlvbigndm1odWJfdmlyYWxfYmFyX2xpbmsnLCBob21lX3VybCgnL2NhcnJldGEtdmlyYWwvJykpOwoKICAgID8+CiAgICA8ZGl2IGNsYXNzPSJ3cmFwIj4KICAgIDxoMSBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweCI+8J+ToyBCYXJyYXMgUHJvbW9jaW9uYWlzCiAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2JhY2tncm91bmQ6I2UwZjJmZTtjb2xvcjojMDM2OWExO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC13ZWlnaHQ6NTAwIj5WaXZhTWFpcyBIdWI8L3NwYW4+CiAgICA8L2gxPgogICAgPHAgc3R5bGU9ImNvbG9yOiM2YjcyODA7bWFyZ2luLXRvcDotNnB4Ij5Db250cm9sZSBhcyBiYXJyYXMgcHJvbW9jaW9uYWlzIGV4aWJpZGFzIG5vIHNpdGUuIEFsdGVyYcOnw7VlcyBzw6NvIGFwbGljYWRhcyBpbWVkaWF0YW1lbnRlLjwvcD4KCiAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJtYXgtd2lkdGg6OTAwcHgiPgogICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3ZtMl9iYXJyYXNfc2F2ZScpOyA/PgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idm0yX2JhcnJhc19zYXZlIiB2YWx1ZT0iMSI+CgogICAgPCEtLSA9PT09PSBCQVJSQSBDVVBPTSA9PT09PSAtLT4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjRweDttYXJnaW4tYm90dG9tOjI0cHgiPgogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbToyMHB4Ij4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxoMiBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4Ij4KICAgICAgICAgICAgICAgICAgICDwn4+377iPIEJhcnJhIEN1cG9tIGRlIERlc2NvbnRvCiAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjo0cHggMCAwO2NvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEzcHgiPkJhcnJhIGFtYXJlbGEgbmEgaG9tZSBlIGxpc3RhZ2VtIGRlIHByb2R1dG9zPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJjb3Vwb25fYmFyX2VuYWJsZWQiIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKCRjYl9vbiwgMSk7ID8+IGlkPSJjYl90b2dnbGUiCiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDtjb2xvcjo8P3BocCBlY2hvICRjYl9vbiA/ICcjMTZhMzRhJyA6ICcjNmI3MjgwJzsgPz4iIGlkPSJjYl9zdGF0dXMiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGNiX29uID8gJ+KchSBBdGl2YScgOiAn4o+4IFBhdXNhZGEnOyA/PgogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFByZXZpZXcgYmFycmEgY3Vwb20gLS0+CiAgICAgICAgPGRpdiBpZD0iY2JfcHJldmlldyIgc3R5bGU9ImJhY2tncm91bmQ6I0ZGRDcwMDtjb2xvcjojMWEwYTJlO3BhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1ib3R0b206MjBweDs8P3BocCBlY2hvICRjYl9vbiA/ICcnIDogJ29wYWNpdHk6MC40JzsgPz4iPgogICAgICAgICAgICBVU0UgTyBDVVBPTSA8c3BhbiBpZD0iY2JfcHJldmlld19jb3Vwb24iIHN0eWxlPSJiYWNrZ3JvdW5kOiMxYTBhMmU7Y29sb3I6I0ZGRDcwMDtwYWRkaW5nOjJweCA2cHg7Ym9yZGVyLXJhZGl1czo0cHgiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGNiX2NvdXBvbik7ID8+PC9zcGFuPgogICAgICAgICAgICBFIEdBTkhFIDxzcGFuIGlkPSJjYl9wcmV2aWV3X3RleHQiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGNiX3RleHQpOyA/Pjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNnB4Ij4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo2cHg7Zm9udC1zaXplOjEzcHgiPkPDs2RpZ28gZG8gQ3Vwb208L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNvdXBvbl9iYXJfY291cG9uIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkY2JfY291cG9uKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjE0cHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZSIKICAgICAgICAgICAgICAgICAgICBvbmlucHV0PSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2JfcHJldmlld19jb3Vwb24nKS50ZXh0Q29udGVudD10aGlzLnZhbHVlLnRvVXBwZXJDYXNlKCkiPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo2cHg7Zm9udC1zaXplOjEzcHgiPlRleHRvIGRvIERlc2NvbnRvPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjb3Vwb25fYmFyX3RleHQiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRjYl90ZXh0KTsgPz4iCiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjE0cHgiCiAgICAgICAgICAgICAgICAgICAgb25pbnB1dD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NiX3ByZXZpZXdfdGV4dCcpLnRleHRDb250ZW50PXRoaXMudmFsdWUiPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gPT09PT0gQkFSUkEgVklSQUwgPT09PT0gLS0+CiAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjI0cHg7bWFyZ2luLWJvdHRvbToyNHB4Ij4KICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MjBweCI+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8aDIgc3R5bGU9Im1hcmdpbjowO2ZvbnQtc2l6ZToxNnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCI+CiAgICAgICAgICAgICAgICAgICAg8J+UtCBCYXJyYSBWaXJhbCAoQ2VsZWJyaWRhZGUpCiAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjo0cHggMCAwO2NvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEzcHgiPkJhcnJhIHZlcm1lbGhhIGNvbSBtZW7Dp8OjbyBkZSBjZWxlYnJpZGFkZSDigJQgdG9wbyBkZSB0b2RhcyBhcyBww6FnaW5hczwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2N1cnNvcjpwb2ludGVyIj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idmlyYWxfYmFyX2VuYWJsZWQiIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKCR2Yl9vbiwgMSk7ID8+IGlkPSJ2Yl90b2dnbGUiCiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDtjb2xvcjo8P3BocCBlY2hvICR2Yl9vbiA/ICcjMTZhMzRhJyA6ICcjNmI3MjgwJzsgPz4iIGlkPSJ2Yl9zdGF0dXMiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHZiX29uID8gJ+KchSBBdGl2YScgOiAn4o+4IFBhdXNhZGEnOyA/PgogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFByZXZpZXcgYmFycmEgdmlyYWwgLS0+CiAgICAgICAgPGRpdiBpZD0idmJfcHJldmlldyIgc3R5bGU9ImJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCNiMzAwMDAsI2Q0MDAwMCwjYjMwMDAwKTtjb2xvcjojZmZmO3BhZGRpbmc6MTBweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi1ib3R0b206MjBweDs8P3BocCBlY2hvICR2Yl9vbiA/ICcnIDogJ29wYWNpdHk6MC40JzsgPz4iPgogICAgICAgICAgICDwn5Sl8J+OtQogICAgICAgICAgICA8YSBocmVmPSIjIiBzdHlsZT0iY29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZSI+CiAgICAgICAgICAgICAgICA8c3BhbiBpZD0idmJfcHJldmlld19hY3RvciIgc3R5bGU9ImNvbG9yOiNkNGFmMzc7Zm9udC13ZWlnaHQ6NzAwIj48P3BocCBlY2hvIGVzY19odG1sKCR2Yl9hY3Rvcik7ID8+PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gaWQ9InZiX3ByZXZpZXdfdGV4dCI+IDw/cGhwIGVjaG8gZXNjX2h0bWwoJHZiX3RleHQpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgICZtZGFzaDsgPHNwYW4gc3R5bGU9ImNvbG9yOiNkNGFmMzc7Zm9udC13ZWlnaHQ6NzAwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUiPnZlciB2w61kZW9zIHZpcmFpcyDigLo8L3NwYW4+CiAgICAgICAgICAgIDwvYT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNnB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NnB4O2ZvbnQtc2l6ZToxM3B4Ij5Ob21lIGRhIENlbGVicmlkYWRlPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ2aXJhbF9iYXJfYWN0b3IiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCR2Yl9hY3Rvcik7ID8+IgogICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxNHB4IgogICAgICAgICAgICAgICAgICAgIG9uaW5wdXQ9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2Yl9wcmV2aWV3X2FjdG9yJykudGV4dENvbnRlbnQ9dGhpcy52YWx1ZSI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjZweDtmb250LXNpemU6MTNweCI+VGV4dG8gZGEgQcOnw6NvPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ2aXJhbF9iYXJfdGV4dCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHZiX3RleHQpOyA/PiIKICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMnB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTRweCIKICAgICAgICAgICAgICAgICAgICBvbmlucHV0PSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmJfcHJldmlld190ZXh0JykudGV4dENvbnRlbnQ9JyAnK3RoaXMudmFsdWUiPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NnB4O2ZvbnQtc2l6ZToxM3B4Ij5MaW5rIGRlIERlc3Rpbm88L2xhYmVsPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiBuYW1lPSJ2aXJhbF9iYXJfbGluayIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHZiX2xpbmspOyA/PiIKICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxNHB4IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8vbG9qYS52aXZhbWFpc2V2ZW50b3MuY29tL2NhcnJldGEtdmlyYWwvIj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5IiBzdHlsZT0icGFkZGluZzoxMHB4IDMycHg7Zm9udC1zaXplOjE1cHg7aGVpZ2h0OmF1dG87Ym9yZGVyLXJhZGl1czo4cHgiPgogICAgICAgIPCfkr4gU2FsdmFyIEJhcnJhcwogICAgPC9idXR0b24+CiAgICA8L2Zvcm0+CiAgICA8L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgLy8gVG9nZ2xlIHN0YXR1cyBsYWJlbCBvbiBjaGVja2JveCBjaGFuZ2UKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYl90b2dnbGUnKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2Jfc3RhdHVzJykudGV4dENvbnRlbnQgPSB0aGlzLmNoZWNrZWQgPyAn4pyFIEF0aXZhJyA6ICfij7ggUGF1c2FkYSc7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NiX3N0YXR1cycpLnN0eWxlLmNvbG9yID0gdGhpcy5jaGVja2VkID8gJyMxNmEzNGEnIDogJyM2YjcyODAnOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYl9wcmV2aWV3Jykuc3R5bGUub3BhY2l0eSA9IHRoaXMuY2hlY2tlZCA/ICcxJyA6ICcwLjQnOwogICAgfSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmJfdG9nZ2xlJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZiX3N0YXR1cycpLnRleHRDb250ZW50ID0gdGhpcy5jaGVja2VkID8gJ+KchSBBdGl2YScgOiAn4o+4IFBhdXNhZGEnOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2Yl9zdGF0dXMnKS5zdHlsZS5jb2xvciA9IHRoaXMuY2hlY2tlZCA/ICcjMTZhMzRhJyA6ICcjNmI3MjgwJzsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmJfcHJldmlldycpLnN0eWxlLm9wYWNpdHkgPSB0aGlzLmNoZWNrZWQgPyAnMScgOiAnMC40JzsKICAgIH0pOwogICAgPC9zY3JpcHQ+CiAgICA8P3BocAp9CgpmdW5jdGlvbiB2bTJfc2V0dGluZ3NfcGFnZSgpIHsKICAgICRub3RpY2UgPSAnJzsKCiAgICAvLyDilIDilIAgU2FsdmFyIEtpbGwgU3dpdGNoIEdsb2JhbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIGlmICggaXNzZXQoICRfUE9TVFsndm0yX3NhdmVfc2V0dGluZ3MnXSApICYmIGNoZWNrX2FkbWluX3JlZmVyZXIoICd2bTJfc2V0dGluZ3Nfbm9uY2UnICkgKSB7CiAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9raWxsX3N3aXRjaCcsIGlzc2V0KCAkX1BPU1RbJ3ZtMl9raWxsX3N3aXRjaCddICkgPyAnMScgOiAnMCcgKTsKICAgICAgICBpZiAoIGlzc2V0KCRfUE9TVFsndm0yX2dsb2JhbF9kYWlseV9saW1pdCddKSApIHsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9nbG9iYWxfZGFpbHlfbGltaXQnLCBtYXgoMCwgKGludCkkX1BPU1RbJ3ZtMl9nbG9iYWxfZGFpbHlfbGltaXQnXSkgKTsKICAgICAgICB9CiAgICAgICAgaWYgKCBpc3NldCgkX1BPU1RbJ3ZtMl9jb250YWN0X3dlZWtseV9saW1pdCddKSApIHsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9jb250YWN0X3dlZWtseV9saW1pdCcsIG1heCgwLCAoaW50KSRfUE9TVFsndm0yX2NvbnRhY3Rfd2Vla2x5X2xpbWl0J10pICk7CiAgICAgICAgfQogICAgICAgIGlmICggaXNzZXQoJF9QT1NUWyd2bTJfZmluX3dlYmhvb2tfdXJsJ10pICkgewogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfZmluX3dlYmhvb2tfdXJsJywgZXNjX3VybF9yYXcodHJpbSgkX1BPU1RbJ3ZtMl9maW5fd2ViaG9va191cmwnXSkpKTsKICAgICAgICB9CiAgICAgICAgaWYgKCAhZW1wdHkoJF9QT1NUWyd2bTJfZmluX3N5bmNfdG9rZW4nXSkgKSB7CiAgICAgICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9maW5fc3luY190b2tlbicsIHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWyd2bTJfZmluX3N5bmNfdG9rZW4nXSkpOwogICAgICAgIH0KICAgICAgICBpZiAoIGlzc2V0KCRfUE9TVFsndm0yX2FnZW5kYV93ZWJob29rX3VybCddKSApIHsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX2FnZW5kYV93ZWJob29rX3VybCcsIGVzY191cmxfcmF3KHRyaW0oJF9QT1NUWyd2bTJfYWdlbmRhX3dlYmhvb2tfdXJsJ10pKSk7CiAgICAgICAgfQogICAgICAgIC8vIOKUgOKUgCBDYW1wb3MgYW50aS1zcGFtIGF2YW7Dp2Fkb3Mg4pSA4pSACiAgICAgICAgaWYgKCBpc3NldCgkX1BPU1RbJ3ZtMl9jb29sZG93bl9ob3VycyddKSApIHsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9jb29sZG93bl9ob3VycycsIG1heCgwLCAoaW50KSRfUE9TVFsndm0yX2Nvb2xkb3duX2hvdXJzJ10pICk7CiAgICAgICAgfQogICAgICAgIGlmICggaXNzZXQoJF9QT1NUWyd2bTJfYmF0Y2hfc2l6ZSddKSApIHsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9iYXRjaF9zaXplJywgbWF4KDEsIChpbnQpJF9QT1NUWyd2bTJfYmF0Y2hfc2l6ZSddKSApOwogICAgICAgIH0KICAgICAgICBpZiAoIGlzc2V0KCRfUE9TVFsndm0yX2JhdGNoX2RlbGF5J10pICkgewogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX2JhdGNoX2RlbGF5JywgbWF4KDAsIChpbnQpJF9QT1NUWyd2bTJfYmF0Y2hfZGVsYXknXSkgKTsKICAgICAgICB9CiAgICAgICAgaWYgKCBpc3NldCgkX1BPU1RbJ3ZtMl9xdWlldF9zdGFydCddKSApIHsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9xdWlldF9zdGFydCcsIG1heCgwLCBtaW4oMjMsIChpbnQpJF9QT1NUWyd2bTJfcXVpZXRfc3RhcnQnXSkpICk7CiAgICAgICAgfQogICAgICAgIGlmICggaXNzZXQoJF9QT1NUWyd2bTJfcXVpZXRfZW5kJ10pICkgewogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX3F1aWV0X2VuZCcsIG1heCgwLCBtaW4oMjMsIChpbnQpJF9QT1NUWyd2bTJfcXVpZXRfZW5kJ10pKSApOwogICAgICAgIH0KICAgICAgICBpZiAoIGlzc2V0KCRfUE9TVFsndm0yX2RlZmF1bHRfY2hhbm5lbCddKSApIHsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9kZWZhdWx0X2NoYW5uZWwnLCBzYW5pdGl6ZV9rZXkoJF9QT1NUWyd2bTJfZGVmYXVsdF9jaGFubmVsJ10pICk7CiAgICAgICAgfQogICAgICAgICRub3RpY2UgPSAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1zdWNjZXNzIGlzLWRpc21pc3NpYmxlIj48cD7inIUgQ29uZmlndXJhw6fDtWVzIGdsb2JhaXMgc2FsdmFzITwvcD48L2Rpdj4nOwogICAgfQoKICAgIC8vIOKUgOKUgCBBZGljaW9uYXIgLyBFZGl0YXIgY2FuYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgICBpZiAoIGlzc2V0KCAkX1BPU1RbJ3ZtMl9hZGRfY2hhbm5lbCddICkgJiYgY2hlY2tfYWRtaW5fcmVmZXJlciggJ3ZtMl9jaGFubmVsX25vbmNlJyApICkgewogICAgICAgICRzbHVnICAgICA9IHNhbml0aXplX2tleSggJF9QT1NUWydjaF9zbHVnJ10gPz8gJycgKTsKICAgICAgICAkZWRpdF9rZXkgPSBzYW5pdGl6ZV9rZXkoICRfUE9TVFsnY2hfZWRpdF9rZXknXSA/PyAnJyApOwogICAgICAgICR0eXBlICAgICA9IGluX2FycmF5KCAkX1BPU1RbJ2NoX3R5cGUnXSA/PyAnJywgWyd6YXBpJywnd2FiYSddICkgPyAkX1BPU1RbJ2NoX3R5cGUnXSA6ICd6YXBpJzsKICAgICAgICAkbGFiZWwgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX1BPU1RbJ2NoX2xhYmVsJ10gPz8gJycgKTsKICAgICAgICAkbnVtYmVyICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX1BPU1RbJ2NoX251bWJlciddID8/ICcnICk7CiAgICAgICAgJGluc3RhbmNlID0gc2FuaXRpemVfdGV4dF9maWVsZCggJF9QT1NUWydjaF9pbnN0YW5jZSddID8/ICcnICk7CiAgICAgICAgJHRva2VuICAgID0gc2FuaXRpemVfdGV4dF9maWVsZCggJF9QT1NUWydjaF90b2tlbiddID8/ICcnICk7CiAgICAgICAgJGNsaWVudCAgICAgID0gc2FuaXRpemVfdGV4dF9maWVsZCggJF9QT1NUWydjaF9jbGllbnQnXSA/PyAnJyApOwogICAgICAgICRkYWlseV9saW1pdCA9IG1heCggMSwgKGludCkgKCAkX1BPU1RbJ2NoX2RhaWx5X2xpbWl0J10gPz8gNTAgKSApOwogICAgICAgIGlmICggJHNsdWcgJiYgJGxhYmVsICYmICRudW1iZXIgKSB7CiAgICAgICAgICAgICRjdXN0b20gPSBnZXRfb3B0aW9uKCAndm0yX2NoYW5uZWxfcG9vbCcsIFtdICk7CiAgICAgICAgICAgIGlmICggaXNfc3RyaW5nKCAkY3VzdG9tICkgKSAkY3VzdG9tID0ganNvbl9kZWNvZGUoICRjdXN0b20sIHRydWUgKSA/OiBbXTsKICAgICAgICAgICAgaWYgKCAkZWRpdF9rZXkgJiYgJGVkaXRfa2V5ICE9PSAkc2x1ZyAmJiBpc3NldCggJGN1c3RvbVskZWRpdF9rZXldICkgKSB7CiAgICAgICAgICAgICAgICB1bnNldCggJGN1c3RvbVskZWRpdF9rZXldICk7CiAgICAgICAgICAgIH0gZWxzZWlmICggJGVkaXRfa2V5ICYmICRlZGl0X2tleSA9PT0gJHNsdWcgKSB7CiAgICAgICAgICAgICAgICAvLyBtZXNtYSBjaGF2ZSDigJQgYXBlbmFzIGF0dWFsaXphCiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gTm92byBjYW5hbDogY29tZcOnYSBQQVVTQURPIChwcm90ZcOnw6NvIGNvbnRyYSBmbG9vZCkKICAgICAgICAgICAgLy8gRWRpw6fDo286IHByZXNlcnZhIG8gc3RhdHVzIGV4aXN0ZW50ZQogICAgICAgICAgICAkcHJldl9zdGF0dXMgPSAncGF1c2VkJzsgLy8gZGVmYXVsdCBwYXJhIG5vdm9zCiAgICAgICAgICAgIGlmICggJGVkaXRfa2V5ICkgewogICAgICAgICAgICAgICAgJHByZXZfc3RhdHVzID0gJGN1c3RvbVsgJGVkaXRfa2V5IF1bJ3N0YXR1cyddID8/ICRjdXN0b21bICRzbHVnIF1bJ3N0YXR1cyddID8/ICdhY3RpdmUnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRuZXdfZW50cnkgPSBbICdsYWJlbCcgPT4gJGxhYmVsLCAndHlwZScgPT4gJHR5cGUsICdudW1iZXInID0+ICRudW1iZXIsICdpbnN0YW5jZScgPT4gJGluc3RhbmNlLCAndG9rZW4nID0+ICR0b2tlbiwgJ2NsaWVudCcgPT4gJGNsaWVudCwgJ2RhaWx5X2xpbWl0JyA9PiAkZGFpbHlfbGltaXQsICdzdGF0dXMnID0+ICRwcmV2X3N0YXR1cyBdOwogICAgICAgICAgICAkY3VzdG9tWyAkc2x1ZyBdID0gJG5ld19lbnRyeTsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9jaGFubmVsX3Bvb2wnLCAkY3VzdG9tICk7CiAgICAgICAgICAgICR2ZXJiICAgPSAkZWRpdF9rZXkgPyAnYXR1YWxpemFkbycgOiAnYWRpY2lvbmFkbyc7CiAgICAgICAgICAgICRub3RpY2UgPSAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1zdWNjZXNzIGlzLWRpc21pc3NpYmxlIj48cD7inIUgQ2FuYWwgPHN0cm9uZz4nIC4gZXNjX2h0bWwoJGxhYmVsKSAuICc8L3N0cm9uZz4gJyAuICR2ZXJiIC4gJyE8L3A+PC9kaXY+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbm90aWNlID0gJzxkaXYgY2xhc3M9Im5vdGljZSBub3RpY2UtZXJyb3IgaXMtZGlzbWlzc2libGUiPjxwPuKdjCBQcmVlbmNoYSBhbyBtZW5vcyBTbHVnLCBMYWJlbCBlIE7Dum1lcm8uPC9wPjwvZGl2Pic7CiAgICAgICAgfQogICAgfQoKICAgIC8vIOKUgOKUgCBSZW1vdmVyIGNhbmFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgaWYgKCBpc3NldCggJF9HRVRbJ3ZtMl9kZWxfY2hhbm5lbCddICkgJiYgY2hlY2tfYWRtaW5fcmVmZXJlciggJ3ZtMl9kZWxfY2gnICkgKSB7CiAgICAgICAgJHNsdWcgID0gc2FuaXRpemVfa2V5KCAkX0dFVFsndm0yX2RlbF9jaGFubmVsJ10gKTsKICAgICAgICAkY3VzdG9tID0gZ2V0X29wdGlvbiggJ3ZtMl9jaGFubmVsX3Bvb2wnLCBbXSApOwogICAgICAgIGlmICggaXNfc3RyaW5nKCAkY3VzdG9tICkgKSAkY3VzdG9tID0ganNvbl9kZWNvZGUoICRjdXN0b20sIHRydWUgKSA/OiBbXTsKICAgICAgICBpZiAoIGlzc2V0KCAkY3VzdG9tWyRzbHVnXSApICkgewogICAgICAgICAgICB1bnNldCggJGN1c3RvbVskc2x1Z10gKTsKICAgICAgICAgICAgdXBkYXRlX29wdGlvbiggJ3ZtMl9jaGFubmVsX3Bvb2wnLCAkY3VzdG9tICk7CiAgICAgICAgICAgICRub3RpY2UgPSAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1zdWNjZXNzIGlzLWRpc21pc3NpYmxlIj48cD7wn5eR77iPIENhbmFsIHJlbW92aWRvLjwvcD48L2Rpdj4nOwogICAgICAgIH0KICAgICAgICB3cF9zYWZlX3JlZGlyZWN0KCBhZG1pbl91cmwoICdhZG1pbi5waHA/cGFnZT12bTItc2V0dGluZ3MnICkgKTsKICAgICAgICBleGl0OwogICAgfQoKICAgIC8vIOKUgOKUgCBUb2dnbGUgYXRpdm8vcGF1c2FkbyBkZSBjYW5hbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIGlmICggaXNzZXQoICRfUE9TVFsndm0yX3RvZ2dsZV9jaGFubmVsX3N0YXR1cyddICkgJiYgY2hlY2tfYWRtaW5fcmVmZXJlciggJ3ZtMl9zZXR0aW5nc19ub25jZScgKSApIHsKICAgICAgICAkdF9zbHVnID0gc2FuaXRpemVfa2V5KCAkX1BPU1RbJ3ZtMl90b2dnbGVfc2x1ZyddID8/ICcnICk7CiAgICAgICAgJHRfcG9vbCA9IGdldF9vcHRpb24oICd2bTJfY2hhbm5lbF9wb29sJywgW10gKTsKICAgICAgICBpZiAoIGlzX3N0cmluZyggJHRfcG9vbCApICkgJHRfcG9vbCA9IGpzb25fZGVjb2RlKCAkdF9wb29sLCB0cnVlICkgPzogW107CiAgICAgICAgaWYgKCAkdF9zbHVnICYmIGlzc2V0KCAkdF9wb29sWyAkdF9zbHVnIF0gKSApIHsKICAgICAgICAgICAgJGN1cl9zdCA9ICR0X3Bvb2xbICR0X3NsdWcgXVsnc3RhdHVzJ10gPz8gJ2FjdGl2ZSc7CiAgICAgICAgICAgICR0X3Bvb2xbICR0X3NsdWcgXVsnc3RhdHVzJ10gPSAoICRjdXJfc3QgPT09ICdwYXVzZWQnICkgPyAnYWN0aXZlJyA6ICdwYXVzZWQnOwogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX2NoYW5uZWxfcG9vbCcsICR0X3Bvb2wgKTsKICAgICAgICAgICAgJHRfbGFiZWwgPSBlc2NfaHRtbCggJHRfcG9vbFsgJHRfc2x1ZyBdWydsYWJlbCddID8/ICR0X3NsdWcgKTsKICAgICAgICAgICAgaWYgKCAkdF9wb29sWyAkdF9zbHVnIF1bJ3N0YXR1cyddID09PSAnYWN0aXZlJyApIHsKICAgICAgICAgICAgICAgICRub3RpY2UgPSAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1zdWNjZXNzIGlzLWRpc21pc3NpYmxlIj48cD7ilrbvuI8gQ2FuYWwgPHN0cm9uZz4nIC4gJHRfbGFiZWwgLiAnPC9zdHJvbmc+IDxzdHJvbmc+YXRpdmFkbzwvc3Ryb25nPiDigJQgbWVuc2FnZW5zIGZsdWVtIG5vcm1hbG1lbnRlLjwvcD48L2Rpdj4nOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG5vdGljZSA9ICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXdhcm5pbmcgaXMtZGlzbWlzc2libGUiPjxwPuKPuCBDYW5hbCA8c3Ryb25nPicgLiAkdF9sYWJlbCAuICc8L3N0cm9uZz4gPHN0cm9uZz5wYXVzYWRvPC9zdHJvbmc+IOKAlCBuZW5odW1hIG1lbnNhZ2VtIHZhaSBwb3IgZXN0ZSBjYW5hbC48L3A+PC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAka3MgICAgICAgPSBnZXRfb3B0aW9uKCAndm0yX2tpbGxfc3dpdGNoJywgJzAnICk7CiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgICRub25jZV9kZWwgPSB3cF9jcmVhdGVfbm9uY2UoICd2bTJfZGVsX2NoJyApOwogICAgPz4KICAgIDxkaXYgY2xhc3M9IndyYXAiPgogICAgICAgIDxoMT7impnvuI8gQ29uZmlndXJhw6fDtWVzIFYyPC9oMT4KICAgICAgICA8P3BocCBlY2hvICRub3RpY2U7ID8+CgogICAgICAgIDw/cGhwIC8qIOKUgOKUgCBLaWxsIFN3aXRjaCBHbG9iYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovID8+CiAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoICd2bTJfc2V0dGluZ3Nfbm9uY2UnICk7ID8+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoyMHB4O21hcmdpbjoyMHB4IDA7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkIDw/cGhwIGVjaG8gJGtzID09PSAnMScgPyAnI2U3NGMzYycgOiAnIzI3YWU2MCc7ID8+Ij4KICAgICAgICAgICAgICAgIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDowIj7wn5uRIEtpbGwgU3dpdGNoIEdsb2JhbCBWMjwvaDI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTRweCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ2bTJfa2lsbF9zd2l0Y2giIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKCAka3MsICcxJyApOyA/PiBzdHlsZT0id2lkdGg6MThweDtoZWlnaHQ6MThweCI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5QQVJBUiBUT0RPUyBPUyBFTlZJT1MgVjI8L3N0cm9uZz4KICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iIHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+UXVhbmRvIGF0aXZvLCBuZW5odW1hIG1lbnNhZ2VtIGRvIENSTSBWMiBzZXLDoSBlbnZpYWRhLjwvcD4KICAgICAgICAgICAgICAgIDxwPlN0YXR1czogPHN0cm9uZyBzdHlsZT0iY29sb3I6PD9waHAgZWNobyAka3MgPT09ICcxJyA/ICdyZWQnIDogJ2dyZWVuJzsgPz47Zm9udC1zaXplOjE1cHgiPjw/cGhwIGVjaG8gJGtzID09PSAnMScgPyAn8J+UtCBQQVJBRE8nIDogJ/Cfn6IgQVRJVk8nOyA/Pjwvc3Ryb25nPjwvcD4KICAgICAgICAgICAgICAgIDxociBzdHlsZT0ibWFyZ2luOjE2cHggMCI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHg7bWFyZ2luLXRvcDoxMnB4Ij4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6YmxvY2siPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPvCfk6YgQ2FwIEdsb2JhbCBEacOhcmlvIChtc2dzL2RpYSk8L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgPGJyPjxzcGFuIHN0eWxlPSJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxMnB4Ij5Ub3RhbCBkZSB0b2RvcyBvcyBtw7NkdWxvcyDigJQgMCA9IHNlbSBsaW1pdGU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxicj48aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJ2bTJfZ2xvYmFsX2RhaWx5X2xpbWl0IiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigoaW50KWdldF9vcHRpb24oJ3ZtMl9nbG9iYWxfZGFpbHlfbGltaXQnLDApKTsgPz4iIG1pbj0iMCIgbWF4PSI5OTk5IiBzdHlsZT0id2lkdGg6MTIwcHg7bWFyZ2luLXRvcDo2cHg7cGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweCI+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6YmxvY2siPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPvCfk4UgTcOheCBtc2dzL2NvbnRhdG8gcG9yIDcgZGlhczwvc3Ryb25nPgogICAgICAgICAgICAgICAgICAgICAgICA8YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEycHgiPkV2aXRhIHNwYW0gbm8gbWVzbW8gY29udGF0byDigJQgMCA9IHNlbSBsaW1pdGU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxicj48aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJ2bTJfY29udGFjdF93ZWVrbHlfbGltaXQiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKChpbnQpZ2V0X29wdGlvbigndm0yX2NvbnRhY3Rfd2Vla2x5X2xpbWl0JywwKSk7ID8+IiBtaW49IjAiIG1heD0iOTkiIHN0eWxlPSJ3aWR0aDoxMjBweDttYXJnaW4tdG9wOjZweDtwYWRkaW5nOjZweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4Ij4KICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGhyIHN0eWxlPSJtYXJnaW46MjBweCAwIj4KICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luLXRvcDowO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiMzNzQxNTEiPvCfm6HvuI8gQW50aS1TcGFtIEF2YW7Dp2FkbyAoQXF1ZWNpbWVudG8pPC9oMz4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnI7Z2FwOjE2cHg7bWFyZ2luLXRvcDoxMnB4Ij4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6YmxvY2siPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPuKPse+4jyBDb29sZG93biAoaG9yYXMpPC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxicj48c3BhbiBzdHlsZT0iY29sb3I6IzZiNzI4MDtmb250LXNpemU6MTJweCI+TcOtbi4gaG9yYXMgZW50cmUgbXNncyBwYXJhIG8gbWVzbW8gY29udGF0bzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJyPjxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9InZtMl9jb29sZG93bl9ob3VycyIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoKGludClnZXRfb3B0aW9uKCd2bTJfY29vbGRvd25faG91cnMnLCAyNCkpOyA/PiIgbWluPSIwIiBtYXg9IjcyMCIgc3R5bGU9IndpZHRoOjEyMHB4O21hcmdpbi10b3A6NnB4O3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtkaXNwbGF5OmJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz7wn5OmIEJhdGNoIFNpemU8L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgPGJyPjxzcGFuIHN0eWxlPSJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxMnB4Ij5FbnZpb3MgcG9yIHJvZGFkYSBkbyBjcm9uPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8YnI+PGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm0yX2JhdGNoX3NpemUiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKChpbnQpZ2V0X29wdGlvbigndm0yX2JhdGNoX3NpemUnLCAxMCkpOyA/PiIgbWluPSIxIiBtYXg9IjIwMCIgc3R5bGU9IndpZHRoOjEyMHB4O21hcmdpbi10b3A6NnB4O3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtkaXNwbGF5OmJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz7ij7MgSW50ZXJ2YWxvIGVudHJlIG1zZ3MgKHNlZyk8L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgPGJyPjxzcGFuIHN0eWxlPSJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxMnB4Ij5EZWxheSBlbnRyZSBkaXNwYXJvcyBuYSBtZXNtYSBiYXRjaDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJyPjxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9InZtMl9iYXRjaF9kZWxheSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoKGludClnZXRfb3B0aW9uKCd2bTJfYmF0Y2hfZGVsYXknLCAzKSk7ID8+IiBtaW49IjAiIG1heD0iNjAiIHN0eWxlPSJ3aWR0aDoxMjBweDttYXJnaW4tdG9wOjZweDtwYWRkaW5nOjZweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4Ij4KICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnIgMWZyO2dhcDoxNnB4O21hcmdpbi10b3A6MTZweCI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTNweDtkaXNwbGF5OmJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz7wn4yZIFNpbMOqbmNpbyDigJQgSW7DrWNpbzwvc3Ryb25nPgogICAgICAgICAgICAgICAgICAgICAgICA8YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEycHgiPkhvcmEgcXVlIHBhcmEgZGUgZW52aWFyIChCcmFzw61saWEpPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8YnI+PGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm0yX3F1aWV0X3N0YXJ0IiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigoaW50KWdldF9vcHRpb24oJ3ZtMl9xdWlldF9zdGFydCcsIDIwKSk7ID8+IiBtaW49IjAiIG1heD0iMjMiIHN0eWxlPSJ3aWR0aDoxMjBweDttYXJnaW4tdG9wOjZweDtwYWRkaW5nOjZweCA4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4Ij4KICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHg7ZGlzcGxheTpibG9jayI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+8J+MhSBTaWzDqm5jaW8g4oCUIEZpbTwvc3Ryb25nPgogICAgICAgICAgICAgICAgICAgICAgICA8YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEycHgiPkhvcmEgcXVlIHZvbHRhIGEgZW52aWFyIChCcmFzw61saWEpPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8YnI+PGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0idm0yX3F1aWV0X2VuZCIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoKGludClnZXRfb3B0aW9uKCd2bTJfcXVpZXRfZW5kJywgOCkpOyA/PiIgbWluPSIwIiBtYXg9IjIzIiBzdHlsZT0id2lkdGg6MTIwcHg7bWFyZ2luLXRvcDo2cHg7cGFkZGluZzo2cHggOHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweCI+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6YmxvY2siPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPvCfk6EgQ2FuYWwgUGFkcsOjbyBBcXVlY2ltZW50bzwvc3Ryb25nPgogICAgICAgICAgICAgICAgICAgICAgICA8YnI+PHNwYW4gc3R5bGU9ImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEycHgiPkNhbmFsIHByaW5jaXBhbCBwYXJhIGF1dG9tYcOnw7Vlczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJyPjxzZWxlY3QgbmFtZT0idm0yX2RlZmF1bHRfY2hhbm5lbCIgc3R5bGU9IndpZHRoOjE4MHB4O21hcmdpbi10b3A6NnB4O3BhZGRpbmc6NnB4IDhweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZWZfY2ggPSBnZXRfb3B0aW9uKCd2bTJfZGVmYXVsdF9jaGFubmVsJywgJ3dhYmFfNTAzOScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsbF9jaCA9IGdldF9vcHRpb24oJ3ZtMl9jaGFubmVsX3Bvb2wnLCBbXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzX3N0cmluZygkYWxsX2NoKSApICRhbGxfY2ggPSBqc29uX2RlY29kZSgkYWxsX2NoLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCAkYWxsX2NoIGFzICRjaF9rZXkgPT4gJGNoX2RhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoX2xibCA9IGVzY19odG1sKCAoJGNoX2RhdGFbJ2xhYmVsJ10gPz8gJGNoX2tleSkgLiAnICgnIC4gKCRjaF9kYXRhWyd0eXBlJ10gPz8gJz8nKSAuICcpJyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZignPG9wdGlvbiB2YWx1ZT0iJXMiICVzPiVzPC9vcHRpb24+JywgZXNjX2F0dHIoJGNoX2tleSksIHNlbGVjdGVkKCRkZWZfY2gsICRjaF9rZXksIGZhbHNlKSwgJGNoX2xibCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0idm0yX3NhdmVfc2V0dGluZ3MiIGNsYXNzPSJidXR0b24gYnV0dG9uLXByaW1hcnkiIHN0eWxlPSJtYXJnaW4tdG9wOjEycHgiPvCfkr4gU2FsdmFyPC9idXR0b24+CgogICAgICAgICAgICA8IS0tIOKUgOKUgCBJbnRlZ3Jhw6fDo28gR29vZ2xlIFNoZWV0cyDilIDilIAgLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9ImZpbi13ZWJob29rIiBzdHlsZT0ibWFyZ2luLXRvcDoyNHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoyMHB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjN2MzYWVkIj4KICAgICAgICAgICAgICAgIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDowIj7wn5OKIEludGVncmHDp8OjbyBHb29nbGUgU2hlZXRzIOKAlCBGaW5hbmNlaXJvPC9oMj4KICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJlIG8gd2ViaG9vayBkbyBUYXNrbGV0IHBhcmEgc2luY3Jvbml6YXIgYSBwbGFuaWxoYSBWSVZBTUFJUy1WRU5EQVMgY29tIG8gbcOzZHVsbyBGaW5hbmNlaXJvLjxicj4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkNvbW8gb2J0ZXIgYSBVUkw6PC9zdHJvbmc+IE5vIFRhc2tsZXQsIHbDoSBlbSA8ZW0+VHJpZ2dlcnMg4oaSIFNpbmNyb25pemFyIEZpbmFuY2Vpcm8gR1NoZWV0czwvZW0+IGUgY29waWUgYSBXZWJob29rIFVSTC4KICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtnYXA6MTJweDttYXgtd2lkdGg6NjAwcHgiPgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+8J+UlyBXZWJob29rIFVSTCAoVGFza2xldCk8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiBuYW1lPSJ2bTJfZmluX3dlYmhvb2tfdXJsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoZ2V0X29wdGlvbigndm0yX2Zpbl93ZWJob29rX3VybCcsJycpKTsgPz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iaHR0cHM6Ly93ZWJob29rcy50YXNrbGV0LmFpL3YxL3B1YmxpYy93ZWJob29rLy4uLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5VUkwgZG8gd2ViaG9vayBnZXJhZG8gcGVsbyBUYXNrbGV0IHBhcmEgZGlzcGFyYXIgYSBzaW5jcm9uaXphw6fDo28uPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+8J+UkSBUb2tlbiBkZSBTaW5jcm9uaXphw6fDo288L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idm0yX2Zpbl9zeW5jX3Rva2VuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoZ2V0X29wdGlvbigndm0yX2Zpbl9zeW5jX3Rva2VuJywndm0yZnN5bmNfOWtxdzNwN3gnKSk7ID8+IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRlc2NyaXB0aW9uIj5Ub2tlbiBCZWFyZXIgcXVlIG8gVGFza2xldCB1c2EgYW8gZW52aWFyIGRhZG9zLiBQYWRyw6NvOiA8Y29kZT52bTJmc3luY185a3F3M3A3eDwvY29kZT48L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGxhc3Rfc3luYyA9IGdldF9vcHRpb24oJ3ZtMl9maW5fbGFzdF9zeW5jJywnJyk7IGlmICgkbGFzdF9zeW5jKTogPz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOjEwcHg7YmFja2dyb3VuZDojZjBmZGY0O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiMwNjVmNDYiPgogICAgICAgICAgICAgICAgICAgICAgICDinIUgw5psdGltYSBzeW5jOiA8P3BocCBlY2hvIGVzY19odG1sKHZtMl9sb2NhbF9kYXRlKCdkL20vWSBIOmknLCAkbGFzdF9zeW5jKSk7ID8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIOKUgOKUgCBJbnRlZ3Jhw6fDo28gR29vZ2xlIFNoZWV0cyDigJQgQWdlbmRhIOKUgOKUgCAtLT4KICAgICAgICAgICAgPGRpdiBpZD0iYWdlbmRhLXdlYmhvb2siIHN0eWxlPSJtYXJnaW4tdG9wOjI0cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjIwcHg7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICMwNTk2NjkiPgogICAgICAgICAgICAgICAgPGgyIHN0eWxlPSJtYXJnaW4tdG9wOjAiPvCfk4UgSW50ZWdyYcOnw6NvIEdvb2dsZSBTaGVldHMg4oCUIEFnZW5kYTwvaDI+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6IzZiNzI4MDtmb250LXNpemU6MTNweDttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyZSBvIHdlYmhvb2sgZG8gVGFza2xldCBwYXJhIHNpbmNyb25pemFyIGEgYWJhIDxzdHJvbmc+VkVOREFTPC9zdHJvbmc+IGRhIHBsYW5pbGhhIGNvbSBhIEFnZW5kYSBkbyBDUk0uPGJyPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+Q29tbyBvYnRlciBhIFVSTDo8L3N0cm9uZz4gTm8gVGFza2xldCwgdsOhIGVtIDxlbT5UcmlnZ2VycyDihpIgU2luY3Jvbml6YXIgQWdlbmRhIEdTaGVldHM8L2VtPiBlIGNvcGllIGEgV2ViaG9vayBVUkwuCiAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6NjAwcHgiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+8J+UlyBXZWJob29rIFVSTCAoVGFza2xldCk8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ1cmwiIG5hbWU9InZtMl9hZ2VuZGFfd2ViaG9va191cmwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKGdldF9vcHRpb24oJ3ZtMl9hZ2VuZGFfd2ViaG9va191cmwnLCcnKSk7ID8+IgogICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iaHR0cHM6Ly93ZWJob29rcy50YXNrbGV0LmFpL3YxL3B1YmxpYy93ZWJob29rLy4uLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+VVJMIGRvIHdlYmhvb2sgZ2VyYWRvIHBlbG8gVGFza2xldCBwYXJhIGRpc3BhcmFyIGEgc2luY3Jvbml6YcOnw6NvIGRhIEFnZW5kYS48L3A+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGFnX3N5bmMgPSBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2xhc3Rfc3luYycsJycpOyBpZiAoJGFnX3N5bmMpOiA/PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6MTBweDtiYWNrZ3JvdW5kOiNlY2ZkZjU7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzA2NWY0NjttYXJnaW4tdG9wOjhweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIOKchSDDmmx0aW1hIHN5bmM6IDw/cGhwIGVjaG8gZXNjX2h0bWwoZGF0ZSgnZC9tL1kgSDppJywgc3RydG90aW1lKCRhZ19zeW5jKSkpOyA/PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZm9ybT4KCiAgICAgICAgPD9waHAgLyog4pSA4pSAIFBvb2wgZGUgQ2FuYWlzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLyA/PgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoyNHB4O21hcmdpbjoyOHB4IDAiPgogICAgICAgICAgICA8aDIgc3R5bGU9Im1hcmdpbi10b3A6MCI+8J+ToSBQb29sIGRlIENhbmFpcyBkZSBFbnZpbzwvaDI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+Q2FuYWlzIGRpc3BvbsOtdmVpcyBlbSB0b2RvcyBvcyBtw7NkdWxvcyBWMi4gQ2FuYWlzIHBhZHLDo28gbsOjbyBwb2RlbSBzZXIgcmVtb3ZpZG9zLjwvcD4KCiAgICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLnZtMi1jaGFubmVsLWdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnI7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToyMHB4fQogICAgICAgICAgICBAbWVkaWEobWluLXdpZHRoOjYwMHB4KXsudm0yLWNoYW5uZWwtZ3JpZHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsMWZyKX19CiAgICAgICAgICAgIEBtZWRpYShtaW4td2lkdGg6OTYwcHgpey52bTItY2hhbm5lbC1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMywxZnIpfX0KICAgICAgICAgICAgLnZtMi1jaGFubmVsLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTRweCAxNnB4O2JhY2tncm91bmQ6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZX0KICAgICAgICAgICAgLnZtMi1jaGFubmVsLWNhcmQubG9ja2Vke2JhY2tncm91bmQ6I2Y5ZjlmOX0KICAgICAgICAgICAgLnZtMi1jaGFubmVsLWNhcmQgLmNoLWJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiNmZmY7bWFyZ2luLWJvdHRvbTo4cHh9CiAgICAgICAgICAgIC52bTItY2hhbm5lbC1jYXJkIC5jaC1iYWRnZS56YXBpe2JhY2tncm91bmQ6IzI1ZDM2Nn0KICAgICAgICAgICAgLnZtMi1jaGFubmVsLWNhcmQgLmNoLWJhZGdlLndhYmF7YmFja2dyb3VuZDojM2I4MmY2fQogICAgICAgICAgICAudm0yLWNoYW5uZWwtY2FyZCAuY2gtbGFiZWx7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206NHB4fQogICAgICAgICAgICAudm0yLWNoYW5uZWwtY2FyZCAuY2gtc2x1Z3tmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjEycHg7Y29sb3I6IzY2NjtiYWNrZ3JvdW5kOiNmMGYwZjA7cGFkZGluZzoycHggNnB4O2JvcmRlci1yYWRpdXM6NHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1ib3R0b206NnB4fQogICAgICAgICAgICAudm0yLWNoYW5uZWwtY2FyZCAuY2gtbnVtYmVye2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM0NDQ7bWFyZ2luLWJvdHRvbTo0cHh9CiAgICAgICAgICAgIC52bTItY2hhbm5lbC1jYXJkIC5jaC1pbnN0YW5jZXtmb250LXNpemU6MTFweDtjb2xvcjojOTk5O3dvcmQtYnJlYWs6YnJlYWstYWxsfQogICAgICAgICAgICAudm0yLWNoYW5uZWwtY2FyZCAuY2gtYWN0aW9uc3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTBweDtyaWdodDoxMHB4O2Rpc3BsYXk6ZmxleDtnYXA6NHB4fQogICAgICAgICAgICAudm0yLWNoYW5uZWwtY2FyZCAuY2gtZGVse2ZvbnQtc2l6ZToxMnB4fQogICAgICAgICAgICAudm0yLWNoYW5uZWwtY2FyZCAuY2gtbG9ja2Vke2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiNiYmJ9CiAgICAgICAgICAgIEBtZWRpYShtaW4td2lkdGg6NjAwcHgpey52bTItY2gtZm9ybS1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpICFpbXBvcnRhbnR9fQogICAgICAgICAgICBAbWVkaWEobWluLXdpZHRoOjk2MHB4KXsudm0yLWNoLWZvcm0tZ3JpZHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDMsMWZyKSAhaW1wb3J0YW50fX0KICAgICAgICAgICAgPC9zdHlsZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLWNoYW5uZWwtZ3JpZCI+CiAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCAkY2hhbm5lbHMgYXMgJGtleSA9PiAkY2ggKSA6CiAgICAgICAgICAgICAgICAkbG9ja2VkICAgICA9IGZhbHNlOwogICAgICAgICAgICAgICAgJHR5cGUgICAgICAgPSAkY2hbJ3R5cGUnXSA/PyAnemFwaSc7CiAgICAgICAgICAgICAgICAkdHlwZV9sYWJlbCA9ICR0eXBlID09PSAnd2FiYScgPyAnV0FCQScgOiAnWi1BUEknOwogICAgICAgICAgICAgICAgJGNoX3N0YXR1cyAgPSAkY2hbJ3N0YXR1cyddID8/ICdhY3RpdmUnOwogICAgICAgICAgICAgICAgJGlzX3BhdXNlZCAgPSAoICRjaF9zdGF0dXMgPT09ICdwYXVzZWQnICk7CiAgICAgICAgICAgICAgICAkc2VuZHNfdG9kYXkgPSB2bTJfY2hhbm5lbF90b2RheV9jb3VudCggJGtleSApOwogICAgICAgICAgICA/PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY2hhbm5lbC1jYXJkPD9waHAgZWNobyAkbG9ja2VkID8gJyBsb2NrZWQnIDogJyc7ID8+IgogICAgICAgICAgICAgICAgIHN0eWxlPSI8P3BocCBlY2hvICRpc19wYXVzZWQgPyAnb3BhY2l0eTowLjc1O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjZjU5ZTBiJyA6ICdib3JkZXItbGVmdDo0cHggc29saWQgIzIyYzU1ZSc7ID8+Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaC1iYWRnZSA8P3BocCBlY2hvIGVzY19hdHRyKCR0eXBlKTsgPz4iPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHR5cGVfbGFiZWwpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7cGFkZGluZzoycHggN3B4O2JvcmRlci1yYWRpdXM6MTBweDttYXJnaW4tbGVmdDo0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlOzw/cGhwIGVjaG8gJGlzX3BhdXNlZCA/ICdiYWNrZ3JvdW5kOiNmZWYzYzc7Y29sb3I6IzkyNDAwZScgOiAnYmFja2dyb3VuZDojZGNmY2U3O2NvbG9yOiMxNjY1MzQnOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkaXNfcGF1c2VkID8gJ+KPuCBQYXVzYWRvJyA6ICfilrbvuI8gQXRpdm8nOyA/PgogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2gtYWN0aW9ucyI+CiAgICAgICAgICAgICAgICA8P3BocCBpZiAoICRsb2NrZWQgKSA6ID8+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoLWxvY2tlZCI+8J+UkiBwYWRyw6NvPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1zbWFsbCBjaC1lZGl0IgogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0icGFkZGluZzoycHggN3B4O2ZvbnQtc2l6ZToxMnB4IgogICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJ2bTJDaEVkaXQoPD9waHAgZWNobyBlc2NfYXR0cihqc29uX2VuY29kZSgka2V5KSk7ID8+LCA8P3BocCBlY2hvIGVzY19hdHRyKGpzb25fZW5jb2RlKCRjaCkpOyA/PikiPuKcj++4jzwvYnV0dG9uPgogICAgICAgICAgICAgICAgPD9waHAgZWxzZSA6ID8+CiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCB3cF9ub25jZV9maWVsZCgndm0yX3NldHRpbmdzX25vbmNlJyk7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InZtMl90b2dnbGVfc2x1ZyIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGtleSk7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9InZtMl90b2dnbGVfY2hhbm5lbF9zdGF0dXMiIGNsYXNzPSJidXR0b24gYnV0dG9uLXNtYWxsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9InBhZGRpbmc6MnB4IDdweDtmb250LXNpemU6MTJweDs8P3BocCBlY2hvICRpc19wYXVzZWQgPyAnY29sb3I6IzE2NjUzNDtmb250LXdlaWdodDo3MDAnIDogJ2NvbG9yOiM5YTM0MTInOyA/PiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSI8P3BocCBlY2hvICRpc19wYXVzZWQgPyAnQXRpdmFyIGNhbmFsJyA6ICdQYXVzYXIgY2FuYWwnOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRpc19wYXVzZWQgPyAn4pa277iPJyA6ICfij7gnOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24gYnV0dG9uLXNtYWxsIGNoLWVkaXQiCiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJwYWRkaW5nOjJweCA3cHg7Zm9udC1zaXplOjEycHgiCiAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InZtMkNoRWRpdCg8P3BocCBlY2hvIGVzY19hdHRyKGpzb25fZW5jb2RlKCRrZXkpKTsgPz4sIDw/cGhwIGVjaG8gZXNjX2F0dHIoanNvbl9lbmNvZGUoJGNoKSk7ID8+KSI+4pyP77iPPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCBhZG1pbl91cmwoICdhZG1pbi5waHA/cGFnZT12bTItc2V0dGluZ3Mmdm0yX2RlbF9jaGFubmVsPScgLiAka2V5IC4gJyZfd3Bub25jZT0nIC4gJG5vbmNlX2RlbCApICk7ID8+IgogICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InJldHVybiBjb25maXJtKCdSZW1vdmVyIGNhbmFsIDw/cGhwIGVjaG8gZXNjX2pzKCRrZXkpOyA/Pj8nKSIKICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1zbWFsbCBjaC1kZWwiIHN0eWxlPSJjb2xvcjojYzAzOTJiO3BhZGRpbmc6MnB4IDdweDtmb250LXNpemU6MTJweCI+8J+Xke+4jzwvYT4KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaC1sYWJlbCI+PD9waHAgZWNobyBlc2NfaHRtbCggJGNoWydsYWJlbCddICk7ID8+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaC1zbHVnIj48P3BocCBlY2hvIGVzY19odG1sKCAka2V5ICk7ID8+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaC1udW1iZXIiPvCfk7EgPD9waHAgZWNobyBlc2NfaHRtbCggJGNoWydudW1iZXInXSA/PyAn4oCUJyApOyA/PjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzY2NjttYXJnaW4tdG9wOjNweCI+CiAgICAgICAgICAgICAgICAgICAg8J+TiiA8P3BocCBlY2hvICRzZW5kc190b2RheTsgPz4gZW52aWFkb3MgaG9qZQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICggISBlbXB0eSgkY2hbJ2RhaWx5X2xpbWl0J10pICkgZWNobyAnIC8gJyAuIChpbnQpJGNoWydkYWlseV9saW1pdCddIC4gJyBsaW1pdGUnOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8P3BocCBpZiAoICEgJGxvY2tlZCAmJiAhIGVtcHR5KCAkY2hbJ2luc3RhbmNlJ10gKSApIDogPz4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoLWluc3RhbmNlIj5JRDogPD9waHAgZWNobyBlc2NfaHRtbCggc3Vic3RyKCRjaFsnaW5zdGFuY2UnXSwgMCwgMjApIC4gJ+KApicgKTsgPz48L2Rpdj4KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8P3BocCAvKiDilIDilIAgRm9ybXVsw6FyaW8gQWRpY2lvbmFyIENhbmFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLyA/PgogICAgICAgICAgICA8ZGV0YWlscyBpZD0idm0yQ2hEZXRhaWxzIiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTZweCI+CiAgICAgICAgICAgICAgICA8c3VtbWFyeSBpZD0idm0yQ2hTdW1tYXJ5IiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxNHB4Ij7inpUgQWRpY2lvbmFyIG5vdm8gY2FuYWw8L3N1bW1hcnk+CiAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJtYXJnaW4tdG9wOjE2cHgiIGlkPSJ2bTJDaEZvcm0iPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIHdwX25vbmNlX2ZpZWxkKCAndm0yX2NoYW5uZWxfbm9uY2UnICk7ID8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2hfZWRpdF9rZXkiIGlkPSJ2bTJDaEVkaXRLZXkiIHZhbHVlPSIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyO2dhcDoxNHB4O21hcmdpbi1ib3R0b206MTZweCIgY2xhc3M9InZtMi1jaC1mb3JtLWdyaWQiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHgiPlRpcG8gKjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0iY2hfdHlwZSIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InphcGkiPvCfk7EgWi1BUEk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ3YWJhIj7wn5S1IFdBQkEgKE1ldGEpPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4Ij5TbHVnIC8gQ2hhdmUgKiA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2NjYiPihleDogemFwaV9ub3ZvKTwvc3Bhbj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY2hfc2x1ZyIgcGxhY2Vob2xkZXI9InphcGlfbm92byIgc3R5bGU9IndpZHRoOjEwMCUiIHJlcXVpcmVkIHBhdHRlcm49IlthLXowLTlfXSsiIHRpdGxlPSJBcGVuYXMgbGV0cmFzIG1pbsO6c2N1bGFzLCBuw7ptZXJvcyBlIF8iPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHgiPkxhYmVsICogPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjY2Ij4obm9tZSBhbWlnw6F2ZWwpPC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjaF9sYWJlbCIgcGxhY2Vob2xkZXI9IvCfk54gVklWQSA5OTk5ICh2ZW5kYXMpIiBzdHlsZT0id2lkdGg6MTAwJSIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweCI+TsO6bWVybyAqIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDo0MDA7Y29sb3I6IzY2NiI+KERESStEREQrbsO6bWVybyk8L3NwYW4+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNoX251bWJlciIgcGxhY2Vob2xkZXI9IjU1MTE5OTk5OTk5OTkiIHN0eWxlPSJ3aWR0aDoxMDAlIiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4Ij5JbnN0YW5jZSBJRDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjaF9pbnN0YW5jZSIgcGxhY2Vob2xkZXI9IjNGWFhYWC4uLiIgc3R5bGU9IndpZHRoOjEwMCUiPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHgiPlRva2VuPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNoX3Rva2VuIiBwbGFjZWhvbGRlcj0iVG9rZW4gWi1BUEkiIHN0eWxlPSJ3aWR0aDoxMDAlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206NHB4Ij5DbGllbnQgVG9rZW48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY2hfY2xpZW50IiBwbGFjZWhvbGRlcj0iQ2xpZW50IHRva2VuIFotQVBJIiBzdHlsZT0id2lkdGg6MTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjRweCI+8J+TiiBMaW1pdGUgZGnDoXJpbyBkZSBlbnZpb3M8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJjaF9kYWlseV9saW1pdCIgdmFsdWU9IjUwIiBtaW49IjEiIG1heD0iNTAwIiBzdHlsZT0id2lkdGg6MTAwJSIgdGl0bGU9Ik3DoXhpbW8gZGUgbWVuc2FnZW5zIHBvciBkaWEgbmVzdGUgY2FuYWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJ2bTJfYWRkX2NoYW5uZWwiIGlkPSJ2bTJDaFN1Ym1pdCIgY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSI+4p6VIEFkaWNpb25hciBDYW5hbDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0idm0yQ2hDYW5jZWxFZGl0IiBjbGFzcz0iYnV0dG9uIiBzdHlsZT0ibWFyZ2luLWxlZnQ6OHB4O2Rpc3BsYXk6bm9uZSIgb25jbGljaz0idm0yQ2hDYW5jZWxFZGl0KCkiPuKcliBDYW5jZWxhcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiIgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij7ij7ggTm92byBjYW5hbCBjb21lw6dhIDxzdHJvbmc+cGF1c2Fkbzwvc3Ryb25nPiDigJQgbmVuaHVtYSBtZW5zYWdlbSBmbHVpIGF0w6kgdm9jw6ogY2xpY2FyIOKWtu+4jyBwYXJhIGF0aXZhci4gSXNzbyBldml0YSBmbG9vZCBlbSBuw7ptZXJvcyByZWPDqW0tY29uZWN0YWRvcy48L3A+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgZnVuY3Rpb24gdm0yQ2hFZGl0KHNsdWcsIGNoKSB7CiAgICAgICAgICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDaERldGFpbHMnKTsKICAgICAgICAgICAgICAgIGQub3BlbiA9IHRydWU7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQ2hTdW1tYXJ5JykudGV4dENvbnRlbnQgPSAn4pyP77iPIEVkaXRhciBjYW5hbDogJyArIChjaC5sYWJlbCB8fCBzbHVnKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDaEVkaXRLZXknKS52YWx1ZSA9IHNsdWc7CiAgICAgICAgICAgICAgICB2YXIgZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDaEZvcm0nKTsKICAgICAgICAgICAgICAgIGYucXVlcnlTZWxlY3RvcignW25hbWU9ImNoX3R5cGUiXScpLnZhbHVlICAgID0gY2gudHlwZSAgICAgfHwgJ3phcGknOwogICAgICAgICAgICAgICAgZi5xdWVyeVNlbGVjdG9yKCdbbmFtZT0iY2hfc2x1ZyJdJykudmFsdWUgICAgPSBzbHVnOwogICAgICAgICAgICAgICAgZi5xdWVyeVNlbGVjdG9yKCdbbmFtZT0iY2hfc2x1ZyJdJykucmVtb3ZlQXR0cmlidXRlKCdyZXF1aXJlZCcpOyAvLyBzbHVnIHBvZGUgc2VyIGlndWFsCiAgICAgICAgICAgICAgICBmLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSJjaF9sYWJlbCJdJykudmFsdWUgICA9IGNoLmxhYmVsICAgIHx8ICcnOwogICAgICAgICAgICAgICAgZi5xdWVyeVNlbGVjdG9yKCdbbmFtZT0iY2hfbnVtYmVyIl0nKS52YWx1ZSAgPSBjaC5udW1iZXIgICB8fCAnJzsKICAgICAgICAgICAgICAgIGYucXVlcnlTZWxlY3RvcignW25hbWU9ImNoX2luc3RhbmNlIl0nKS52YWx1ZT0gY2guaW5zdGFuY2UgfHwgJyc7CiAgICAgICAgICAgICAgICBmLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSJjaF90b2tlbiJdJykudmFsdWUgICA9IGNoLnRva2VuICAgIHx8ICcnOwogICAgICAgICAgICAgICAgZi5xdWVyeVNlbGVjdG9yKCdbbmFtZT0iY2hfY2xpZW50Il0nKS52YWx1ZSAgICAgID0gY2guY2xpZW50ICAgICAgfHwgJyc7CiAgICAgICAgICAgICAgICBmLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPSJjaF9kYWlseV9saW1pdCJdJykudmFsdWUgPSBjaC5kYWlseV9saW1pdCB8fCA1MDsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDaFN1Ym1pdCcpLnRleHRDb250ZW50ID0gJ/Cfkr4gU2FsdmFyIGFsdGVyYcOnw7Vlcyc7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQ2hDYW5jZWxFZGl0Jykuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOwogICAgICAgICAgICAgICAgZC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCcsIGJsb2NrOiduZWFyZXN0J30pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIHZtMkNoQ2FuY2VsRWRpdCgpIHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDaEVkaXRLZXknKS52YWx1ZSA9ICcnOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkNoRm9ybScpLnJlc2V0KCk7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQ2hTdW1tYXJ5JykudGV4dENvbnRlbnQgPSAn4p6VIEFkaWNpb25hciBub3ZvIGNhbmFsJzsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDaFN1Ym1pdCcpLnRleHRDb250ZW50ID0gJ+KelSBBZGljaW9uYXIgQ2FuYWwnOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkNoQ2FuY2VsRWRpdCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQ2hEZXRhaWxzJykub3BlbiA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgICAgIDw/cGhwIC8qIOKUgOKUgCBUZW1wbGF0ZXMgV0FCQSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8gPz4KICAgICAgICA8ZGl2IGlkPSJ2bTItd2FiYS10cGxzIiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjI0cHg7bWFyZ2luOjI4cHggMCI+CiAgICAgICAgICAgIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDowIj7wn5OLIFRlbXBsYXRlcyBXQUJBIEFwcm92YWRvczwvaDI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+VGVtcGxhdGVzIGRpc3BvbsOtdmVpcyBlbSB0b2RvcyBvcyBtw7NkdWxvcyBxdWFuZG8gY2FuYWwgV0FCQSBmb3Igc2VsZWNpb25hZG8uIFRlbXBsYXRlcyBwYWRyw6NvIG7Do28gcG9kZW0gc2VyIHJlbW92aWRvcy48L3A+CgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICAkZGVmYXVsdF93dCA9IFsKICAgICAgICAgICAgICAgICd2bV9wb3NfamFuZWxhX2QzJyAgICAgICAgICAgICA9PiAnRCsxIHDDs3MgamFuZWxhJywKICAgICAgICAgICAgICAgICc0OGhfd2FiYV80bG96NHEnICAgICAgICAgICAgICA9PiAnRCsxIGFsdGVybmF0aXZvJywKICAgICAgICAgICAgICAgICc1ZF93YWJhX2dnOTM5aScgICAgICAgICAgICAgICA9PiAnRCs1LzcnLAogICAgICAgICAgICAgICAgJzE1ZF93YWJhX3Fsd2xlaycgICAgICAgICAgICAgID0+ICdEKzE1JywKICAgICAgICAgICAgICAgICczMGRfd2FiYV9oMnR1cmgnICAgICAgICAgICAgICA9PiAnRCszMCcsCiAgICAgICAgICAgICAgICAnY2FydGFvcHJlc2VudGUnICAgICAgICAgICAgICAgPT4gJ1ZhbGUgUHJlc2VudGUnLAogICAgICAgICAgICAgICAgJ29mZXJ0YV9kZV9yZWNvbnF1aXN0YV92eHUwODEnID0+ICdSZWVuZ2FqYW1lbnRvJywKICAgICAgICAgICAgICAgICdyZWN1cGVyYV9jYXJyaW5ob193b28nICAgICAgICA9PiAnV0EgUmVjb3ZlcnknLAogICAgICAgICAgICBdOwogICAgICAgICAgICAkY3VzdG9tX3d0ID0gZ2V0X29wdGlvbiggJ3ZtMl93YWJhX3RlbXBsYXRlcycsIFtdICk7CiAgICAgICAgICAgIGlmICggaXNfc3RyaW5nKCAkY3VzdG9tX3d0ICkgKSAkY3VzdG9tX3d0ID0ganNvbl9kZWNvZGUoICRjdXN0b21fd3QsIHRydWUgKSA/OiBbXTsKICAgICAgICAgICAgJG5vbmNlX2RlbF93dCA9IHdwX2NyZWF0ZV9ub25jZSgndm0yX2RlbF93YWJhX3RwbCcpOwogICAgICAgICAgICA/PgoKICAgICAgICAgICAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDphdXRvIj4KICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ3aWRlZmF0IHN0cmlwZWQiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjIwcHg7bWluLXdpZHRoOjUwMHB4Ij4KICAgICAgICAgICAgICAgIDx0aGVhZD48dHI+CiAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ3aWR0aDoyNjBweCI+U2x1ZyB0w6ljbmljbzwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoPkRlc2NyacOnw6NvPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjEwMHB4Ij5UaXBvPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjgwcHgiPjwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPjwvdGhlYWQ+CiAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICggJGRlZmF1bHRfd3QgYXMgJHd0X3NsdWcgPT4gJHd0X2Rlc2MgKSA6ID8+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkPjxjb2RlIHN0eWxlPSJmb250LXNpemU6MTFweCI+PD9waHAgZWNobyBlc2NfaHRtbCgkd3Rfc2x1Zyk7ID8+PC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHd0X2Rlc2MpOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNlOGY1ZTk7Y29sb3I6IzJlN2QzMjtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxMXB4O3doaXRlLXNwYWNlOm5vd3JhcCI+8J+UkiBQYWRyw6NvPC9zcGFuPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCAkY3VzdG9tX3d0IGFzICR3dF9zbHVnID0+ICR3dF9kZXNjICkgOiA/PgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZD48Y29kZSBzdHlsZT0iZm9udC1zaXplOjExcHgiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHd0X3NsdWcpOyA/PjwvY29kZT48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGVzY19odG1sKCR3dF9kZXNjKTsgPz48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZTNmMmZkO2NvbG9yOiMxNTY1YzA7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MTBweDtmb250LXNpemU6MTFweDt3aGl0ZS1zcGFjZTpub3dyYXAiPuKcqCBDdXN0b208L3NwYW4+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCggYWRtaW5fdXJsKCAnYWRtaW4ucGhwP3BhZ2U9dm0yLXNldHRpbmdzJnZtMl9kZWxfd2FiYV90cGw9JyAuICR3dF9zbHVnIC4gJyZfd3Bub25jZT0nIC4gJG5vbmNlX2RlbF93dCApICk7ID8+IgogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0iY29sb3I6I2U3NGMzYztmb250LXNpemU6MTJweDt3aGl0ZS1zcGFjZTpub3dyYXAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InJldHVybiBjb25maXJtKCdSZW1vdmVyIGVzdGUgdGVtcGxhdGU/JykiPvCfl5HvuI8gUmVtb3ZlcjwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkZXRhaWxzIHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+CiAgICAgICAgICAgICAgICA8c3VtbWFyeSBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7Y29sb3I6IzAwNzNhYTtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDAiPuKelSBBZGljaW9uYXIgdGVtcGxhdGUgY3VzdG9tPC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBzdHlsZT0iYmFja2dyb3VuZDojZjlmOWY5O3BhZGRpbmc6MTZweDtib3JkZXItcmFkaXVzOjZweDtib3JkZXI6MXB4IHNvbGlkICNlZWU7bWFyZ2luLXRvcDo4cHgiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIHdwX25vbmNlX2ZpZWxkKCd2bTJfd2FiYV90cGxfbm9uY2UnKTsgPz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjEycHg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6ZmxleC1lbmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+U2x1ZyB0w6ljbmljbzwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idHBsX25hbWVbXSIgcGxhY2Vob2xkZXI9Im5vbWVfZG9fdGVtcGxhdGVfYWJjIiBzdHlsZT0id2lkdGg6MjIwcHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxMnB4IiByZXF1aXJlZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij5EZXNjcmnDp8OjbyBhbWlnw6F2ZWw8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InRwbF9sYWJlbFtdIiBwbGFjZWhvbGRlcj0iRXg6IE9mZXJ0YSBlc3BlY2lhbCBEKzYwIiBzdHlsZT0id2lkdGg6MjQwcHgiIHJlcXVpcmVkPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9InZtMl9zYXZlX3dhYmFfdHBscyIgY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSI+4p6VIEFkaWNpb25hcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiIgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij7imqDvuI8gTyB0ZW1wbGF0ZSBkZXZlIGVzdGFyIGFwcm92YWRvIG5hIE1ldGEgYW50ZXMgZGUgY2FkYXN0cmFyIGFxdWkuPC9wPgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2RldGFpbHM+CiAgICAgICAgPC9kaXY+CgogICAgPD9waHAKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIENBTVBPUyBIT1JBIEVWRU5UTyBOTyBDSEVDS09VVAovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCi8vIEFkaWNpb25hIGNhbXBvcyBob3JhX2luaWNpbyBlIGhvcmFfdGVybWlubyBkbyBldmVudG8gbm8gY2hlY2tvdXQKYWRkX2ZpbHRlciggJ3dvb2NvbW1lcmNlX2NoZWNrb3V0X2ZpZWxkcycsIGZ1bmN0aW9uKCAkZmllbGRzICkgewogICAgJGZpZWxkc1snYmlsbGluZyddWydiaWxsaW5nX2hvcmFfaW5pY2lvJ10gPSBbCiAgICAgICAgJ3R5cGUnICAgICAgICA9PiAndGV4dCcsCiAgICAgICAgJ2xhYmVsJyAgICAgICA9PiAnSG9yw6FyaW8gZGUgaW7DrWNpbyBkbyBldmVudG8nLAogICAgICAgICdwbGFjZWhvbGRlcicgPT4gJ0V4OiAxOTowMCcsCiAgICAgICAgJ3JlcXVpcmVkJyAgICA9PiBmYWxzZSwKICAgICAgICAnY2xhc3MnICAgICAgID0+IFsgJ2Zvcm0tcm93LWZpcnN0JyBdLAogICAgICAgICdwcmlvcml0eScgICAgPT4gMTE1LAogICAgXTsKICAgICRmaWVsZHNbJ2JpbGxpbmcnXVsnYmlsbGluZ19ob3JhX3Rlcm1pbm8nXSA9IFsKICAgICAgICAndHlwZScgICAgICAgID0+ICd0ZXh0JywKICAgICAgICAnbGFiZWwnICAgICAgID0+ICdIb3LDoXJpbyBkZSB0w6lybWlubyBkbyBldmVudG8nLAogICAgICAgICdwbGFjZWhvbGRlcicgPT4gJ0V4OiAyMzowMCcsCiAgICAgICAgJ3JlcXVpcmVkJyAgICA9PiBmYWxzZSwKICAgICAgICAnY2xhc3MnICAgICAgID0+IFsgJ2Zvcm0tcm93LWxhc3QnIF0sCiAgICAgICAgJ3ByaW9yaXR5JyAgICA9PiAxMTYsCiAgICBdOwogICAgcmV0dXJuICRmaWVsZHM7Cn0gKTsKCi8vIFNhbHZhIGNhbXBvcyBob3JhIGFvIGZpbmFsaXphciBvIHBlZGlkbwphZGRfYWN0aW9uKCAnd29vY29tbWVyY2VfY2hlY2tvdXRfdXBkYXRlX29yZGVyX21ldGEnLCBmdW5jdGlvbiggJG9yZGVyX2lkICkgewogICAgaWYgKCAhIGVtcHR5KCAkX1BPU1RbJ2JpbGxpbmdfaG9yYV9pbmljaW8nXSApICkgewogICAgICAgICR2YWwgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX1BPU1RbJ2JpbGxpbmdfaG9yYV9pbmljaW8nXSApOwogICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoICRvcmRlcl9pZCwgJ19iaWxsaW5nX2hvcmFfaW5pY2lvJywgJHZhbCApOwogICAgICAgIHVwZGF0ZV9wb3N0X21ldGEoICRvcmRlcl9pZCwgJ2JpbGxpbmdfaG9yYV9pbmljaW8nLCAkdmFsICk7CiAgICB9CiAgICBpZiAoICEgZW1wdHkoICRfUE9TVFsnYmlsbGluZ19ob3JhX3Rlcm1pbm8nXSApICkgewogICAgICAgICR2YWwgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX1BPU1RbJ2JpbGxpbmdfaG9yYV90ZXJtaW5vJ10gKTsKICAgICAgICB1cGRhdGVfcG9zdF9tZXRhKCAkb3JkZXJfaWQsICdfYmlsbGluZ19ob3JhX3Rlcm1pbm8nLCAkdmFsICk7CiAgICAgICAgdXBkYXRlX3Bvc3RfbWV0YSggJG9yZGVyX2lkLCAnYmlsbGluZ19ob3JhX3Rlcm1pbm8nLCAkdmFsICk7CiAgICB9Cn0gKTsKCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBXT09DT01NRVJDRSBIT09LUwovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCi8vIEhvb2sgMTogVG9kb3Mgb3MgcGVkaWRvcyDihpIgR3J1cG8gVmVuZGFzCmFkZF9hY3Rpb24oICd3b29jb21tZXJjZV9jaGVja291dF9vcmRlcl9wcm9jZXNzZWQnLCAndm0yX25vdGlmeV9ncnVwb192ZW5kYXMnLCAyMCwgMSApOwpmdW5jdGlvbiB2bTJfbm90aWZ5X2dydXBvX3ZlbmRhcyggJG9yZGVyX2lkICkgewogICAgaWYgKCBnZXRfb3B0aW9uKCAndm0yX2tpbGxfc3dpdGNoJywgJzAnICkgPT09ICcxJyApIHJldHVybjsKICAgIGlmICggZ2V0X29wdGlvbiggJ3ZtMl9wZWRpZG9zX3ZlbmRhc19lbmFibGVkJywgJzEnICkgIT09ICcxJyApIHJldHVybjsKCiAgICAkb3JkZXIgPSB3Y19nZXRfb3JkZXIoICRvcmRlcl9pZCApOwogICAgaWYgKCAhICRvcmRlciApIHJldHVybjsKCiAgICAvLyBHdWFyZCBhbnRpLWR1cGxpY2F0YQogICAgaWYgKCAkb3JkZXItPmdldF9tZXRhKCAnX3ZtMl9ub3RpZmllZF92ZW5kYXMnICkgKSByZXR1cm47CiAgICAkb3JkZXItPnVwZGF0ZV9tZXRhX2RhdGEoICdfdm0yX25vdGlmaWVkX3ZlbmRhcycsIGN1cnJlbnRfdGltZSgnbXlzcWwnKSApOwogICAgJG9yZGVyLT5zYXZlKCk7CgogICAgJHZhcnMgICAgPSB2bTJfYnVpbGRfb3JkZXJfdmFycyggJG9yZGVyICk7CiAgICAkbXNnICAgICA9IHZtMl9yZXBsYWNlX3ZhcnMoIGdldF9vcHRpb24oICd2bTJfcGVkaWRvc192ZW5kYXNfbXNnJywgdm0yX2RlZmF1bHRfbXNnX3ZlbmRhcygpICksICR2YXJzICk7CiAgICAkY2hhbm5lbCA9IGdldF9vcHRpb24oICd2bTJfcGVkaWRvc192ZW5kYXNfY2hhbm5lbCcsICd6YXBpXzc1NTEnICk7CiAgICAkZ3JvdXAgICA9IGdldF9vcHRpb24oICd2bTJfcGVkaWRvc192ZW5kYXNfZ3JvdXBfaWQnLCAnMTIwMzYzNDI1Nzg1MzU4NzY0LWdyb3VwJyApOwoKICAgIHZtMl9zZW5kX3phcGkoICRjaGFubmVsLCAkZ3JvdXAsICRtc2cgKTsKfQoKLy8gSG9vayAyOiBQZWRpZG8g4oaSIEdydXBvIEFnZW5kYSAoc2lnbmluZy1wZW5kaW5nLCBjb250cmFjdC1zaWduZWQsIHByb2Nlc3NpbmcpCmFkZF9hY3Rpb24oICd3b29jb21tZXJjZV9vcmRlcl9zdGF0dXNfcHJvY2Vzc2luZycsICAgICAgJ3ZtMl9ub3RpZnlfZ3J1cG9fYWdlbmRhJywgMjAsIDEgKTsKYWRkX2FjdGlvbiggJ3dvb2NvbW1lcmNlX29yZGVyX3N0YXR1c19zaWduaW5nLXBlbmRpbmcnLCAndm0yX25vdGlmeV9ncnVwb19hZ2VuZGEnLCAyMCwgMSApOwphZGRfYWN0aW9uKCAnd29vY29tbWVyY2Vfb3JkZXJfc3RhdHVzX2NvbnRyYWN0LXNpZ25lZCcsICd2bTJfbm90aWZ5X2dydXBvX2FnZW5kYScsIDIwLCAxICk7CmZ1bmN0aW9uIHZtMl9ub3RpZnlfZ3J1cG9fYWdlbmRhKCAkb3JkZXJfaWQgKSB7CiAgICBpZiAoIGdldF9vcHRpb24oICd2bTJfa2lsbF9zd2l0Y2gnLCAnMCcgKSA9PT0gJzEnICkgcmV0dXJuOwogICAgaWYgKCBnZXRfb3B0aW9uKCAndm0yX3BlZGlkb3NfYWdlbmRhX2VuYWJsZWQnLCAnMScgKSAhPT0gJzEnICkgcmV0dXJuOwoKICAgICRvcmRlciA9IHdjX2dldF9vcmRlciggJG9yZGVyX2lkICk7CiAgICBpZiAoICEgJG9yZGVyICkgcmV0dXJuOwoKICAgIC8vIEd1YXJkIGFudGktZHVwbGljYXRhIOKAlCBzw7MgZW52aWEgMXggcG9yIHBlZGlkbwogICAgaWYgKCAkb3JkZXItPmdldF9tZXRhKCAnX3ZtMl9ub3RpZmllZF9hZ2VuZGEnICkgKSByZXR1cm47CiAgICAkb3JkZXItPnVwZGF0ZV9tZXRhX2RhdGEoICdfdm0yX25vdGlmaWVkX2FnZW5kYScsIGN1cnJlbnRfdGltZSgnbXlzcWwnKSApOwogICAgJG9yZGVyLT5zYXZlKCk7CgogICAgJHZhcnMgICAgPSB2bTJfYnVpbGRfb3JkZXJfdmFycyggJG9yZGVyICk7CiAgICAkbXNnICAgICA9IHZtMl9yZXBsYWNlX3ZhcnMoIGdldF9vcHRpb24oICd2bTJfcGVkaWRvc19hZ2VuZGFfbXNnJywgdm0yX2RlZmF1bHRfbXNnX2FnZW5kYSgpICksICR2YXJzICk7CiAgICAkY2hhbm5lbCA9IGdldF9vcHRpb24oICd2bTJfcGVkaWRvc19hZ2VuZGFfY2hhbm5lbCcsICd6YXBpXzc1NTEnICk7CiAgICAkZ3JvdXAgICA9IGdldF9vcHRpb24oICd2bTJfcGVkaWRvc19hZ2VuZGFfZ3JvdXBfaWQnLCAnMTIwMzYzNDE5MTgwMjE0NDgxLWdyb3VwJyApOwoKICAgIHZtMl9zZW5kX3phcGkoICRjaGFubmVsLCAkZ3JvdXAsICRtc2cgKTsKfQoKLy8gSG9vayAzOiBQZWRpZG8g4oaSIENsaWVudGUgKFdoYXRzQXBwIGRpcmV0bykKYWRkX2FjdGlvbiggJ3dvb2NvbW1lcmNlX29yZGVyX3N0YXR1c19wcm9jZXNzaW5nJywgICAgICAndm0yX25vdGlmeV9jbGllbnRlJywgMjAsIDEgKTsKYWRkX2FjdGlvbiggJ3dvb2NvbW1lcmNlX29yZGVyX3N0YXR1c19zaWduaW5nLXBlbmRpbmcnLCAndm0yX25vdGlmeV9jbGllbnRlJywgMjAsIDEgKTsKZnVuY3Rpb24gdm0yX25vdGlmeV9jbGllbnRlKCAkb3JkZXJfaWQgKSB7CiAgICBpZiAoIGdldF9vcHRpb24oICd2bTJfa2lsbF9zd2l0Y2gnLCAnMCcgKSA9PT0gJzEnICkgcmV0dXJuOwogICAgaWYgKCBnZXRfb3B0aW9uKCAndm0yX3BlZGlkb3NfY2xpZW50ZV9lbmFibGVkJywgJzAnICkgIT09ICcxJyApIHJldHVybjsKCiAgICAkb3JkZXIgPSB3Y19nZXRfb3JkZXIoICRvcmRlcl9pZCApOwogICAgaWYgKCAhICRvcmRlciApIHJldHVybjsKCiAgICAvLyBHdWFyZCBhbnRpLWR1cGxpY2F0YSDigJQgc8OzIGVudmlhIDF4IHBvciBwZWRpZG8KICAgIGlmICggJG9yZGVyLT5nZXRfbWV0YSggJ192bTJfbm90aWZpZWRfY2xpZW50ZScgKSApIHJldHVybjsKICAgICRvcmRlci0+dXBkYXRlX21ldGFfZGF0YSggJ192bTJfbm90aWZpZWRfY2xpZW50ZScsIGN1cnJlbnRfdGltZSgnbXlzcWwnKSApOwogICAgJG9yZGVyLT5zYXZlKCk7CgogICAgJHZhcnMgICAgPSB2bTJfYnVpbGRfb3JkZXJfdmFycyggJG9yZGVyICk7CiAgICAkdGVsZWZvbmUgPSAkdmFyc1sne3RlbGVmb25lfSddOwogICAgaWYgKCAhICR0ZWxlZm9uZSB8fCBzdHJsZW4oICR0ZWxlZm9uZSApIDwgMTAgKSByZXR1cm47CgogICAgJG1zZyAgICAgPSB2bTJfcmVwbGFjZV92YXJzKCBnZXRfb3B0aW9uKCAndm0yX3BlZGlkb3NfY2xpZW50ZV9tc2cnLCB2bTJfZGVmYXVsdF9tc2dfY2xpZW50ZSgpICksICR2YXJzICk7CiAgICAkY2hhbm5lbCA9IGdldF9vcHRpb24oICd2bTJfcGVkaWRvc19jbGllbnRlX2NoYW5uZWwnLCAnemFwaV8xODg2JyApOwoKICAgIHZtMl9zZW5kX3phcGkoICRjaGFubmVsLCAkdGVsZWZvbmUsICRtc2cgKTsKCiAgICAvLyDilIDilIAgQ8OzcGlhIGFvIGdydXBvIGRlIHZlbmRhcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIGlmICggZ2V0X29wdGlvbiggJ3ZtMl9wZWRpZG9zX2NsaWVudGVfY29weV92ZW5kYXMnLCAnMCcgKSA9PT0gJzEnICkgewogICAgICAgICRjb3B5X21zZyAgPSAi8J+TiyAqQ29tdW5pY2FkbyBlbnZpYWRvIGFvIGNsaWVudGUqXG5cbiI7CiAgICAgICAgJGNvcHlfbXNnIC49ICIqQ2xpZW50ZToqIHtub21lfVxuIjsKICAgICAgICAkY29weV9tc2cgLj0gIipQZWRpZG86KiAje251bWVyb31cblxuIjsKICAgICAgICAkY29weV9tc2cgLj0gIuKchSBNZW5zYWdlbSBlbnZpYWRhIG5vIFdoYXRzQXBwOlxuIjsKICAgICAgICAkY29weV9tc2cgLj0gIuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuIjsKICAgICAgICAkY29weV9tc2cgLj0gJG1zZzsKICAgICAgICAkY29weV9jaGFubmVsID0gZ2V0X29wdGlvbiggJ3ZtMl9wZWRpZG9zX3ZlbmRhc19jaGFubmVsJywgJ3phcGlfNzU1MScgKTsKICAgICAgICAkY29weV9ncm91cCAgID0gZ2V0X29wdGlvbiggJ3ZtMl9wZWRpZG9zX3ZlbmRhc19ncm91cF9pZCcsICcxMjAzNjM0MjU3ODUzNTg3NjQtZ3JvdXAnICk7CiAgICAgICAgdm0yX3NlbmRfemFwaSggJGNvcHlfY2hhbm5lbCwgJGNvcHlfZ3JvdXAsIHZtMl9yZXBsYWNlX3ZhcnMoICRjb3B5X21zZywgJHZhcnMgKSApOwogICAgfQp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gSG9vayA0OiBDQVBJIFByb3h5IOKAlCBkaXNwYXJhIGV2ZW50byBQdXJjaGFzZSBuYSBNZXRhIENBUEkKLy8gdjEuNS4xNzAKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oICd3b29jb21tZXJjZV9vcmRlcl9zdGF0dXNfcHJvY2Vzc2luZycsICd2bTJfY2FwaV9wcm94eV9zZW5kJywgMjUsIDEgKTsKCmZ1bmN0aW9uIHZtMl9jYXBpX3Byb3h5X3NlbmQoICRvcmRlcl9pZCApIHsKICAgICR3ZWJob29rX3VybCA9IGdldF9vcHRpb24oICd2bTJfY2FwaV93ZWJob29rX3VybCcsICdodHRwczovL3dlYmhvb2tzLnRhc2tsZXQuYWkvdjEvcHVibGljL3dlYmhvb2svYV9jZGIzNnZwbW43azl3ZTkzd2Z4cT90b2tlbj0wNzU0MGVmNTgxYmJjNTk5YzhiZjQxZmYxZTRiMGQxMScgKTsKICAgIGlmICggZW1wdHkoICR3ZWJob29rX3VybCApICkgcmV0dXJuOwoKICAgICRvcmRlciA9IHdjX2dldF9vcmRlciggJG9yZGVyX2lkICk7CiAgICBpZiAoICEgJG9yZGVyICkgcmV0dXJuOwoKICAgIC8vIEFudGktZHVwbGljYXRhCiAgICBpZiAoICRvcmRlci0+Z2V0X21ldGEoICdfdm0yX2NhcGlfc2VudCcgKSApIHJldHVybjsKICAgICRvcmRlci0+dXBkYXRlX21ldGFfZGF0YSggJ192bTJfY2FwaV9zZW50JywgY3VycmVudF90aW1lKCdteXNxbCcpICk7CiAgICAkb3JkZXItPnNhdmUoKTsKCiAgICAkcGhvbmVfcmF3ID0gcHJlZ19yZXBsYWNlKCAnL1xELycsICcnLCAkb3JkZXItPmdldF9iaWxsaW5nX3Bob25lKCkgKTsKICAgIGlmICggZW1wdHkoICRwaG9uZV9yYXcgKSApIHJldHVybjsKCiAgICAvLyBOb3JtYWxpemFyIHBhcmEgNTVYWFhYWFhYWFhYWAogICAgJHBob25lID0gKCBzdHJsZW4oICRwaG9uZV9yYXcgKSA8PSAxMSApID8gJzU1JyAuICRwaG9uZV9yYXcgOiAkcGhvbmVfcmF3OwoKICAgIC8vIEJ1c2NhciBjdHdhX2NsaWQgZG8gY29udGF0bwogICAgZ2xvYmFsICR3cGRiOwogICAgJGNvbnRhY3QgPSAkd3BkYi0+Z2V0X3JvdyggJHdwZGItPnByZXBhcmUoCiAgICAgICAgIlNFTEVDVCBtZXRhX2N0d2FfY2xpZCwgbWV0YV9hZF9pZAogICAgICAgICBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9jb250YWN0cwogICAgICAgICBXSEVSRSBwaG9uZSBMSUtFICVzIExJTUlUIDEiLAogICAgICAgICclJyAuICR3cGRiLT5lc2NfbGlrZSggc3Vic3RyKCAkcGhvbmVfcmF3LCAtOSApICkgLiAnJScKICAgICkgKTsKCiAgICAkcGF5bG9hZCA9IFsKICAgICAgICAnc2VjcmV0JyAgICAgICAgICAgICA9PiAndm1fY2FwaV9wcm94eV8yMDI2JywKICAgICAgICAnZXZlbnQnICAgICAgICAgICAgICA9PiAncHVyY2hhc2UnLAogICAgICAgICdvcmRlcl9pZCcgICAgICAgICAgID0+ICRvcmRlcl9pZCwKICAgICAgICAndmFsdWUnICAgICAgICAgICAgICA9PiBmbG9hdHZhbCggJG9yZGVyLT5nZXRfdG90YWwoKSApLAogICAgICAgICdjdXJyZW5jeScgICAgICAgICAgID0+ICdCUkwnLAogICAgICAgICdwaG9uZScgICAgICAgICAgICAgID0+ICRwaG9uZSwKICAgICAgICAnZW1haWwnICAgICAgICAgICAgICA9PiAkb3JkZXItPmdldF9iaWxsaW5nX2VtYWlsKCkgPzogJycsCiAgICAgICAgJ2V2ZW50X3RpbWUnICAgICAgICAgPT4gdGltZSgpLAogICAgICAgICdjbGllbnRfaXAnICAgICAgICAgID0+ICRvcmRlci0+Z2V0X2N1c3RvbWVyX2lwX2FkZHJlc3MoKSA/OiAnJywKICAgICAgICAnY2xpZW50X3VzZXJfYWdlbnQnICA9PiAkb3JkZXItPmdldF9jdXN0b21lcl91c2VyX2FnZW50KCkgPzogJycsCiAgICBdOwoKICAgIGlmICggJGNvbnRhY3QgJiYgISBlbXB0eSggJGNvbnRhY3QtPm1ldGFfY3R3YV9jbGlkICkgKSB7CiAgICAgICAgJHBheWxvYWRbJ2N0d2FfY2xpZCddID0gJGNvbnRhY3QtPm1ldGFfY3R3YV9jbGlkOwogICAgfQogICAgaWYgKCAkY29udGFjdCAmJiAhIGVtcHR5KCAkY29udGFjdC0+bWV0YV9hZF9pZCApICkgewogICAgICAgICRwYXlsb2FkWydhZF9pZCddID0gJGNvbnRhY3QtPm1ldGFfYWRfaWQ7CiAgICB9CgogICAgd3BfcmVtb3RlX3Bvc3QoICR3ZWJob29rX3VybCwgWwogICAgICAgICdib2R5JyAgICAgPT4gd3BfanNvbl9lbmNvZGUoICRwYXlsb2FkICksCiAgICAgICAgJ2hlYWRlcnMnICA9PiBbICdDb250ZW50LVR5cGUnID0+ICdhcHBsaWNhdGlvbi9qc29uJyBdLAogICAgICAgICd0aW1lb3V0JyAgPT4gNSwKICAgICAgICAnYmxvY2tpbmcnID0+IGZhbHNlLCAvLyBmaXJlLWFuZC1mb3JnZXQKICAgIF0gKTsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEJVSUxEIE9SREVSIFZBUklBQkxFUwovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2J1aWxkX29yZGVyX3ZhcnMoICRvcmRlciApIHsKICAgICRvcmRlcl9pZCA9ICRvcmRlci0+Z2V0X2lkKCk7CgogICAgLy8gTm9tZSBlIHRlbGVmb25lCiAgICAkbm9tZSAgICAgPSB0cmltKCAkb3JkZXItPmdldF9iaWxsaW5nX2ZpcnN0X25hbWUoKSAuICcgJyAuICRvcmRlci0+Z2V0X2JpbGxpbmdfbGFzdF9uYW1lKCkgKTsKICAgICR0ZWxlZm9uZSA9IHByZWdfcmVwbGFjZSggJy9cRC8nLCAnJywgJG9yZGVyLT5nZXRfYmlsbGluZ19waG9uZSgpICk7CgogICAgLy8gTm9ybWFsaXphciBEREkg4oCUIGFkaWNpb25hciA1NSBzZSBuZWNlc3PDoXJpbwogICAgaWYgKCBzdHJsZW4oICR0ZWxlZm9uZSApIDw9IDExICkgewogICAgICAgICR0ZWxlZm9uZSA9ICc1NScgLiAkdGVsZWZvbmU7CiAgICB9CiAgICAvLyBGaXggZHVwbG8gRERJICg1NTU1WFhYWFhYWFhYWFgpCiAgICB3aGlsZSAoIHN0cmxlbiggJHRlbGVmb25lICkgPiAxMyAmJiBzdHJwb3MoICR0ZWxlZm9uZSwgJzU1NTUnICkgPT09IDAgKSB7CiAgICAgICAgJHRlbGVmb25lID0gJzU1JyAuIHN1YnN0ciggJHRlbGVmb25lLCA0ICk7CiAgICB9CgogICAgLy8gUHJvZHV0b3MKICAgICRwcm9kdXRvcyA9IFtdOwogICAgZm9yZWFjaCAoICRvcmRlci0+Z2V0X2l0ZW1zKCkgYXMgJGl0ZW0gKSB7CiAgICAgICAgJHByb2R1dG9zW10gPSAkaXRlbS0+Z2V0X25hbWUoKTsKICAgIH0KCiAgICAvLyBZSVRIIEJvb2tpbmcg4oCUIGhvcsOhcmlvIGRhIEFUUkHDh8ODTyBsaWRvIGRvIHBvc3QgdHlwZSAneWl0aF9ib29raW5nJyB2aW5jdWxhZG8gYW8gcGVkaWRvCiAgICAvLyBPcyBkYWRvcyBOw4NPIGZpY2FtIGVtIGl0ZW0gbWV0YTsgZmljYW0gbm8gcG9zdCBzZXBhcmFkbyBjcmlhZG8gcGVsbyBZSVRIIEJvb2tpbmcgcGx1Z2luCiAgICAvLyBob3JhX2VudHJhZGEvaG9yYV9zYWlkYSA9IGhvcsOhcmlvIGJvb2tpbmcgZGEgQVRSQcOHw4NPIChZSVRIIGZyb20vdG8pCiAgICAvLyBob3JhX2luaWNpby9ob3JhX3Rlcm1pbm8gPSBob3LDoXJpbyBkbyBFVkVOVE8gKGJpbGxpbmdfaG9yYV9pbmljaW8vdGVybWlubywgZmFsbGJhY2sgWUlUSCkKICAgICRob3JhX2VudHJhZGEgPSAn4oCUJzsKICAgICRob3JhX3NhaWRhICAgPSAn4oCUJzsKICAgICRkdXJhY2FvICAgICAgPSAn4oCUJzsKCiAgICAvLyAxwqogdGVudGF0aXZhOiBwb3N0IHlpdGhfYm9va2luZyB2aW5jdWxhZG8gYW8gb3JkZXJfaWQgKG3DqXRvZG8gY29ycmV0bykKICAgICR5aXRoX2Jvb2tpbmdfcG9zdHMgPSBnZXRfcG9zdHMoIFsKICAgICAgICAncG9zdF90eXBlJyAgICAgID0+ICd5aXRoX2Jvb2tpbmcnLAogICAgICAgICdwb3N0X3N0YXR1cycgICAgPT4gJ2FueScsCiAgICAgICAgJ3Bvc3RzX3Blcl9wYWdlJyA9PiAxLAogICAgICAgICdmaWVsZHMnICAgICAgICAgPT4gJ2lkcycsCiAgICAgICAgJ21ldGFfcXVlcnknICAgICA9PiBbIFsgJ2tleScgPT4gJ195aXRoX3djYmtfb3JkZXJfaWQnLCAndmFsdWUnID0+ICRvcmRlcl9pZCBdIF0sCiAgICBdICk7CiAgICBpZiAoICEgZW1wdHkoICR5aXRoX2Jvb2tpbmdfcG9zdHMgKSApIHsKICAgICAgICAkYmlkICAgICAgPSAkeWl0aF9ib29raW5nX3Bvc3RzWzBdOwogICAgICAgICR5Yl9mcm9tICA9IGdldF9wb3N0X21ldGEoICRiaWQsICdfeWl0aF93Y2JrX2Zyb20nLCB0cnVlICk7CiAgICAgICAgJHliX3RvICAgID0gZ2V0X3Bvc3RfbWV0YSggJGJpZCwgJ195aXRoX3djYmtfdG8nLCAgIHRydWUgKTsKICAgICAgICBpZiAoICR5Yl9mcm9tICkgewogICAgICAgICAgICAvLyBfeWl0aF93Y2JrX2Zyb20gw6kgdGltZXN0YW1wIFVuaXgKICAgICAgICAgICAgJHR6ICAgICAgICAgICA9IG5ldyBEYXRlVGltZVpvbmUoICdBbWVyaWNhL1Nhb19QYXVsbycgKTsKICAgICAgICAgICAgJGR0X2Zyb20gICAgICA9IG5ldyBEYXRlVGltZSggJ0AnIC4gaW50dmFsKCAkeWJfZnJvbSApICk7CiAgICAgICAgICAgICRkdF9mcm9tLT5zZXRUaW1lem9uZSggJHR6ICk7CiAgICAgICAgICAgICRob3JhX2VudHJhZGEgPSAkZHRfZnJvbS0+Zm9ybWF0KCAnSDppJyApOwogICAgICAgICAgICBpZiAoICR5Yl90byApIHsKICAgICAgICAgICAgICAgICRkdF90byAgICAgID0gbmV3IERhdGVUaW1lKCAnQCcgLiBpbnR2YWwoICR5Yl90byApICk7CiAgICAgICAgICAgICAgICAkZHRfdG8tPnNldFRpbWV6b25lKCAkdHogKTsKICAgICAgICAgICAgICAgICRob3JhX3NhaWRhID0gJGR0X3RvLT5mb3JtYXQoICdIOmknICk7CiAgICAgICAgICAgICAgICAkZHVyYWNhbyAgICA9IHJvdW5kKCAoIGludHZhbCggJHliX3RvICkgLSBpbnR2YWwoICR5Yl9mcm9tICkgKSAvIDYwICk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBGYWxsYmFjazogc3RyaW5nICJZWVlZLU1NLUREIEhIOk1NIiBhcm1hemVuYWRhIGNvbW8geWl0aF9ib29raW5nX2Zyb20KICAgICAgICAgICAgJHliX2Zyb21fc3RyID0gZ2V0X3Bvc3RfbWV0YSggJGJpZCwgJ3lpdGhfYm9va2luZ19mcm9tJywgdHJ1ZSApOwogICAgICAgICAgICAkeWJfdG9fc3RyICAgPSBnZXRfcG9zdF9tZXRhKCAkYmlkLCAneWl0aF9ib29raW5nX3RvJywgICB0cnVlICk7CiAgICAgICAgICAgIGlmICggJHliX2Zyb21fc3RyICYmIHN0cmxlbiggJHliX2Zyb21fc3RyICkgPj0gMTYgKSB7CiAgICAgICAgICAgICAgICAkaG9yYV9lbnRyYWRhID0gc3Vic3RyKCAkeWJfZnJvbV9zdHIsIDExLCA1ICk7CiAgICAgICAgICAgICAgICBpZiAoICR5Yl90b19zdHIgJiYgc3RybGVuKCAkeWJfdG9fc3RyICkgPj0gMTYgKSB7CiAgICAgICAgICAgICAgICAgICAgJGhvcmFfc2FpZGEgID0gc3Vic3RyKCAkeWJfdG9fc3RyLCAxMSwgNSApOwogICAgICAgICAgICAgICAgICAgICR0el9jYWxjICAgICA9IG5ldyBEYXRlVGltZVpvbmUoICdBbWVyaWNhL1Nhb19QYXVsbycgKTsKICAgICAgICAgICAgICAgICAgICAkZHQxICAgICAgICAgPSBEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCggJ1ktbS1kIEg6aScsICR5Yl9mcm9tX3N0ciwgJHR6X2NhbGMgKTsKICAgICAgICAgICAgICAgICAgICAkZHQyICAgICAgICAgPSBEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCggJ1ktbS1kIEg6aScsICR5Yl90b19zdHIsICAgJHR6X2NhbGMgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRkdDEgJiYgJGR0MiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGR1cmFjYW8gPSByb3VuZCggKCAkZHQyLT5nZXRUaW1lc3RhbXAoKSAtICRkdDEtPmdldFRpbWVzdGFtcCgpICkgLyA2MCApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvLyAywqogdGVudGF0aXZhOiBpdGVtIG1ldGEgbGVnYWRvIChvdXRyb3MgcGx1Z2lucyAvIHZlcnPDtWVzIGFudGlnYXMpCiAgICBpZiAoICRob3JhX2VudHJhZGEgPT09ICfigJQnICkgewogICAgICAgIGZvcmVhY2ggKCAkb3JkZXItPmdldF9pdGVtcygpIGFzICRpdGVtICkgewogICAgICAgICAgICAkYmQgPSAkaXRlbS0+Z2V0X21ldGEoICd5aXRoX2Jvb2tpbmdfZGF0YScgKTsKICAgICAgICAgICAgaWYgKCBpc19hcnJheSggJGJkICkgJiYgISBlbXB0eSggJGJkWydmcm9tJ10gKSApIHsKICAgICAgICAgICAgICAgICRmcm9tID0gJGJkWydmcm9tJ107CiAgICAgICAgICAgICAgICAkdG8gICA9IGlzc2V0KCAkYmRbJ3RvJ10gKSA/ICRiZFsndG8nXSA6IDA7CiAgICAgICAgICAgICAgICAkdHogICAgICAgICAgID0gbmV3IERhdGVUaW1lWm9uZSggJ0FtZXJpY2EvU2FvX1BhdWxvJyApOwogICAgICAgICAgICAgICAgJGR0X2Zyb20gICAgICA9IG5ldyBEYXRlVGltZSggJ0AnIC4gJGZyb20gKTsKICAgICAgICAgICAgICAgICRkdF9mcm9tLT5zZXRUaW1lem9uZSggJHR6ICk7CiAgICAgICAgICAgICAgICAkaG9yYV9lbnRyYWRhID0gJGR0X2Zyb20tPmZvcm1hdCggJ0g6aScgKTsKICAgICAgICAgICAgICAgIGlmICggJHRvICkgewogICAgICAgICAgICAgICAgICAgICRkdF90byAgICAgID0gbmV3IERhdGVUaW1lKCAnQCcgLiAkdG8gKTsKICAgICAgICAgICAgICAgICAgICAkZHRfdG8tPnNldFRpbWV6b25lKCAkdHogKTsKICAgICAgICAgICAgICAgICAgICAkaG9yYV9zYWlkYSA9ICRkdF90by0+Zm9ybWF0KCAnSDppJyApOwogICAgICAgICAgICAgICAgICAgICRkdXJhY2FvICAgID0gcm91bmQoICggJHRvIC0gJGZyb20gKSAvIDYwICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZnJvbSA9ICRpdGVtLT5nZXRfbWV0YSggJ2Zyb20nICk7CiAgICAgICAgICAgICR0byAgID0gJGl0ZW0tPmdldF9tZXRhKCAndG8nICk7CiAgICAgICAgICAgIGlmICggJGZyb20gJiYgJHRvICkgewogICAgICAgICAgICAgICAgJHR6ICAgICAgICAgICA9IG5ldyBEYXRlVGltZVpvbmUoICdBbWVyaWNhL1Nhb19QYXVsbycgKTsKICAgICAgICAgICAgICAgICRkdF9mcm9tICAgICAgPSBuZXcgRGF0ZVRpbWUoICdAJyAuICRmcm9tICk7CiAgICAgICAgICAgICAgICAkZHRfdG8gICAgICAgID0gbmV3IERhdGVUaW1lKCAnQCcgLiAkdG8gKTsKICAgICAgICAgICAgICAgICRkdF9mcm9tLT5zZXRUaW1lem9uZSggJHR6ICk7CiAgICAgICAgICAgICAgICAkZHRfdG8tPnNldFRpbWV6b25lKCAkdHogKTsKICAgICAgICAgICAgICAgICRob3JhX2VudHJhZGEgPSAkZHRfZnJvbS0+Zm9ybWF0KCAnSDppJyApOwogICAgICAgICAgICAgICAgJGhvcmFfc2FpZGEgICA9ICRkdF90by0+Zm9ybWF0KCAnSDppJyApOwogICAgICAgICAgICAgICAgJGR1cmFjYW8gICAgICA9IHJvdW5kKCAoICR0byAtICRmcm9tICkgLyA2MCApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAvLyBIb3JhIGRvIEVWRU5UTyAocHJlZW5jaGlkYSBubyBjaGVja291dDsgZmFsbGJhY2sgcGFyYSBob3JhIGRhIGF0cmHDp8OjbykKICAgICRob3JhX2luaWNpbyAgPSAkb3JkZXItPmdldF9tZXRhKCAnX2JpbGxpbmdfaG9yYV9pbmljaW8nICkKICAgICAgICAgICAgICAgICA/OiAkb3JkZXItPmdldF9tZXRhKCAnYmlsbGluZ19ob3JhX2luaWNpbycgKQogICAgICAgICAgICAgICAgID86ICRob3JhX2VudHJhZGE7CiAgICAkaG9yYV90ZXJtaW5vID0gJG9yZGVyLT5nZXRfbWV0YSggJ19iaWxsaW5nX2hvcmFfdGVybWlubycgKQogICAgICAgICAgICAgICAgID86ICRvcmRlci0+Z2V0X21ldGEoICdiaWxsaW5nX2hvcmFfdGVybWlubycgKQogICAgICAgICAgICAgICAgID86ICRob3JhX3NhaWRhOwoKICAgIC8vIE1ldGEgZmllbGRzIGRvIGNoZWNrb3V0CiAgICAkZXZlbnRfZGF0ZV9yYXcgPSAkb3JkZXItPmdldF9tZXRhKCAnX2JpbGxpbmdfZXZlbnRfZGF0ZScgKTsKICAgIC8vIEZhbGxiYWNrOiBleHRyYWlyIGRhdGEgZG8gdGltZXN0YW1wIFlJVEggQm9va2luZyBxdWFuZG8gX2JpbGxpbmdfZXZlbnRfZGF0ZSBlc3RpdmVyIHZhemlvCiAgICBpZiAoICEgJGV2ZW50X2RhdGVfcmF3ICYmICEgZW1wdHkoICRmcm9tICkgKSB7CiAgICAgICAgJHR6X2RhdGUgICAgICAgID0gbmV3IERhdGVUaW1lWm9uZSggJ0FtZXJpY2EvU2FvX1BhdWxvJyApOwogICAgICAgICRkdF9kYXRlICAgICAgICA9IG5ldyBEYXRlVGltZSggJ0AnIC4gaW50dmFsKCAkZnJvbSApICk7CiAgICAgICAgJGR0X2RhdGUtPnNldFRpbWV6b25lKCAkdHpfZGF0ZSApOwogICAgICAgICRldmVudF9kYXRlX3JhdyA9ICRkdF9kYXRlLT5mb3JtYXQoICdkL20vWScgKTsKICAgIH0KICAgICRkYXRhX2V2ZW50byAgICA9IHZtMl9mb3JtYXRfZXZlbnRfZGF0ZSggJGV2ZW50X2RhdGVfcmF3ICk7CiAgICAkdGlwb19ldmVudG8gICAgPSAkb3JkZXItPmdldF9tZXRhKCAnX2JpbGxpbmdfdGlwb19ldmVudG8nICkgICA/OiAn4oCUJzsKICAgICRob21lbmFnZWFkbyAgICA9ICRvcmRlci0+Z2V0X21ldGEoICdfYmlsbGluZ19ob21lbmFnZWFkbycgKSAgID86ICfigJQnOwogICAgJGFzc2Vzc29yICAgICAgID0gJG9yZGVyLT5nZXRfbWV0YSggJ19iaWxsaW5nX2Fzc2Vzc29yJyApICAgICAgPzogJ+KAlCc7CgogICAgLy8gRW5kZXJlw6dvIGRvIGV2ZW50byAoc2hpcHBpbmcpCiAgICAkZW5kZXJlY28gID0gJG9yZGVyLT5nZXRfc2hpcHBpbmdfYWRkcmVzc18xKCk7CiAgICAkZW5kZXJlY28yID0gJG9yZGVyLT5nZXRfc2hpcHBpbmdfYWRkcmVzc18yKCk7IC8vIG5vbWUgZG8gYnVmZmV0L2xvY2FsCiAgICAvLyBNb250YSBlbmRlcmXDp28gY29tcGxldG8gKGFkZHIxICsgYWRkcjIgc2UgZXhpc3RpcikKICAgICRlbmRlcmVjb19mdWxsID0gJGVuZGVyZWNvIC4gKCAkZW5kZXJlY28yID8gJywgJyAuICRlbmRlcmVjbzIgOiAnJyApOwogICAgJGJhaXJybyAgICA9ICRvcmRlci0+Z2V0X21ldGEoICdfc2hpcHBpbmdfbmVpZ2hib3Job29kJyApID86ICRvcmRlci0+Z2V0X21ldGEoICdzaGlwcGluZ19uZWlnaGJvcmhvb2QnICkgPzogJyc7CiAgICAkY2lkYWRlICAgID0gJG9yZGVyLT5nZXRfc2hpcHBpbmdfY2l0eSgpOwogICAgJGVzdGFkbyAgICA9ICRvcmRlci0+Z2V0X3NoaXBwaW5nX3N0YXRlKCk7CiAgICAvLyBNb250YSBsb2NhbCBjb21wbGV0bzogQmFpcnJvIC0gQ2lkYWRlL0VzdGFkbwogICAgJGxvY2FsX2V2ZW50byA9IHRyaW0oICggJGJhaXJybyA/ICRiYWlycm8gLiAnIC0gJyA6ICcnICkgLiAkY2lkYWRlIC4gJy8nIC4gJGVzdGFkbyApOwoKICAgIC8vIENsaWNrU2lnbgogICAgJGNvbnRyYXRvID0gdm0yX2dldF9jbGlja3NpZ25fc3RhdHVzKCAkb3JkZXJfaWQgKTsKCiAgICAvLyBVVE0KICAgICR1dG1fc291cmNlICAgPSAkb3JkZXItPmdldF9tZXRhKCAnX29yZGVyX3V0bV9zb3VyY2UnICkKICAgICAgICAgICAgICAgID86ICRvcmRlci0+Z2V0X21ldGEoICdfd2Nfb3JkZXJfYXR0cmlidXRpb25fdXRtX3NvdXJjZScgKQogICAgICAgICAgICAgICAgPzogJ+KAlCc7CiAgICAkdXRtX2NhbXBhaWduID0gJG9yZGVyLT5nZXRfbWV0YSggJ19vcmRlcl91dG1fY2FtcGFpZ24nICkKICAgICAgICAgICAgICAgID86ICRvcmRlci0+Z2V0X21ldGEoICdfd2Nfb3JkZXJfYXR0cmlidXRpb25fdXRtX2NhbXBhaWduJyApCiAgICAgICAgICAgICAgICA/OiAn4oCUJzsKCiAgICByZXR1cm4gWwogICAgICAgICd7bnVtZXJvfScgICAgICAgPT4gJG9yZGVyX2lkLAogICAgICAgICd7bm9tZX0nICAgICAgICAgPT4gJG5vbWUsCiAgICAgICAgJ3t0ZWxlZm9uZX0nICAgICA9PiAkdGVsZWZvbmUsCiAgICAgICAgJ3tlbWFpbH0nICAgICAgICA9PiAkb3JkZXItPmdldF9iaWxsaW5nX2VtYWlsKCksCiAgICAgICAgJ3t2YWxvcn0nICAgICAgICA9PiBudW1iZXJfZm9ybWF0KCAkb3JkZXItPmdldF90b3RhbCgpLCAyLCAnLCcsICcuJyApLAogICAgICAgICd7cGd0b30nICAgICAgICAgPT4gJG9yZGVyLT5nZXRfcGF5bWVudF9tZXRob2RfdGl0bGUoKSwKICAgICAgICAne2F0cmFjYW99JyAgICAgID0+IGltcGxvZGUoICcsICcsICRwcm9kdXRvcyApLAogICAgICAgICd7ZGF0YV9ldmVudG99JyAgPT4gJGRhdGFfZXZlbnRvLAogICAgICAgICd7dGlwb19ldmVudG99JyAgPT4gJHRpcG9fZXZlbnRvLAogICAgICAgICd7aG9tZW5hZ2VhZG99JyAgPT4gJGhvbWVuYWdlYWRvLAogICAgICAgICd7YXNzZXNzb3J9JyAgICAgPT4gJGFzc2Vzc29yLAogICAgICAgICd7ZW5kZXJlY299JyAgICAgPT4gJGVuZGVyZWNvX2Z1bGwgPzogJGVuZGVyZWNvID86ICfigJQnLAogICAgICAgICd7ZW5kZXJlY28yfScgICAgPT4gJGVuZGVyZWNvMiA/OiAnJywKICAgICAgICAne2JhaXJyb30nICAgICAgID0+ICRiYWlycm8gPzogJ+KAlCcsCiAgICAgICAgJ3tjaWRhZGV9JyAgICAgICA9PiAkY2lkYWRlID86ICfigJQnLAogICAgICAgICd7ZXN0YWRvfScgICAgICAgPT4gJGVzdGFkbyA/OiAn4oCUJywKICAgICAgICAne2xvY2FsX2V2ZW50b30nID0+ICRsb2NhbF9ldmVudG8gPzogJ+KAlCcsCiAgICAgICAgJ3tob3JhX2luaWNpb30nICA9PiAkaG9yYV9pbmljaW8sCiAgICAgICAgJ3tob3JhX3Rlcm1pbm99JyA9PiAkaG9yYV90ZXJtaW5vLAogICAgICAgICd7aG9yYV9lbnRyYWRhfScgPT4gJGhvcmFfZW50cmFkYSwKICAgICAgICAne2hvcmFfc2FpZGF9JyAgID0+ICRob3JhX3NhaWRhLAogICAgICAgICd7ZHVyYWNhb30nICAgICAgPT4gJGR1cmFjYW8sCiAgICAgICAgJ3tvYnN9JyAgICAgICAgICA9PiAkb3JkZXItPmdldF9jdXN0b21lcl9ub3RlKCkgPzogJ+KAlCcsCiAgICAgICAgJ3tjb250cmF0b30nICAgICA9PiAkY29udHJhdG8sCiAgICAgICAgJ3t1dG1fc291cmNlfScgICA9PiAkdXRtX3NvdXJjZSwKICAgICAgICAne3V0bV9jYW1wYWlnbn0nID0+ICR1dG1fY2FtcGFpZ24sCiAgICAgICAgJ3tsaW5rX2FkbWlufScgICA9PiBhZG1pbl91cmwoICJwb3N0LnBocD9wb3N0PXskb3JkZXJfaWR9JmFjdGlvbj1lZGl0IiApLAogICAgXTsKfQoKZnVuY3Rpb24gdm0yX2Zvcm1hdF9ldmVudF9kYXRlKCAkcmF3ICkgewogICAgaWYgKCAhICRyYXcgKSByZXR1cm4gJ+KAlCc7CiAgICAvLyBZWVlZLU1NLUREIOKGkiBERC9NTS9ZWVlZIChJU08gasOhIGVzdMOhIGNvcnJldG8sIHPDsyBmb3JtYXRhciBkaXNwbGF5KQogICAgaWYgKCBwcmVnX21hdGNoKCAnL14oXGR7NH0pLShcZHsyfSktKFxkezJ9KSQvJywgJHJhdywgJG0gKSApIHsKICAgICAgICByZXR1cm4gInskbVszXX0veyRtWzJdfS97JG1bMV19IjsKICAgIH0KICAgIC8vIERETU1ZWVlZIOKGkiBERC9NTS9ZWVlZCiAgICBpZiAoIHByZWdfbWF0Y2goICcvXihcZHsyfSkoXGR7Mn0pKFxkezR9KSQvJywgJHJhdywgJG0gKSApIHsKICAgICAgICByZXR1cm4gInskbVsxXX0veyRtWzJdfS97JG1bM119IjsKICAgIH0KICAgIC8vIEREL01NL1lZIOKGkiBERC9NTS8yMFlZCiAgICBpZiAoIHByZWdfbWF0Y2goICcvXihcZHsyfSlcLyhcZHsyfSlcLyhcZHsyfSkkLycsICRyYXcsICRtICkgKSB7CiAgICAgICAgcmV0dXJuICJ7JG1bMV19L3skbVsyXX0vMjB7JG1bM119IjsKICAgIH0KICAgIHJldHVybiAkcmF3Owp9CgovKioKICogW3YxLjUuMTQ4XSBDb252ZXJ0ZSBkYXRhIGRvIGV2ZW50byBkZSBxdWFscXVlciBmb3JtYXRvIHBhcmEgWVlZWS1NTS1ERCAoSVNPKS4KICogU3Vwb3J0YTogREQvTU0vWVksIEREL01NL1lZWVksIERETU1ZWVlZLCB0aW1lc3RhbXAgVW5peCwgWVlZWS1NTS1ERC4KICogUmV0b3JuYSBzdHJpbmcgdmF6aWEgc2UgbsOjbyByZWNvbmhlY2VyLgogKi8KZnVuY3Rpb24gdm0yX2RhdGVfdG9faXNvKCAkcmF3ICkgewogICAgaWYgKCAhICRyYXcgKSByZXR1cm4gJyc7CiAgICAkcmF3ID0gdHJpbSggJHJhdyApOwogICAgLy8gSsOhIGVzdMOhIGVtIFlZWVktTU0tREQKICAgIGlmICggcHJlZ19tYXRjaCggJy9eKFxkezR9KS0oXGR7Mn0pLShcZHsyfSkkLycsICRyYXcgKSApIHsKICAgICAgICByZXR1cm4gJHJhdzsKICAgIH0KICAgIC8vIEREL01NL1lZWVkKICAgIGlmICggcHJlZ19tYXRjaCggJy9eKFxkezJ9KVwvKFxkezJ9KVwvKFxkezR9KSQvJywgJHJhdywgJG0gKSApIHsKICAgICAgICByZXR1cm4gInskbVszXX0teyRtWzJdfS17JG1bMV19IjsKICAgIH0KICAgIC8vIEREL01NL1lZIOKGkiAyMFlZCiAgICBpZiAoIHByZWdfbWF0Y2goICcvXihcZHsyfSlcLyhcZHsyfSlcLyhcZHsyfSkkLycsICRyYXcsICRtICkgKSB7CiAgICAgICAgcmV0dXJuICIyMHskbVszXX0teyRtWzJdfS17JG1bMV19IjsKICAgIH0KICAgIC8vIERETU1ZWVlZCiAgICBpZiAoIHByZWdfbWF0Y2goICcvXihcZHsyfSkoXGR7Mn0pKFxkezR9KSQvJywgJHJhdywgJG0gKSApIHsKICAgICAgICByZXR1cm4gInskbVszXX0teyRtWzJdfS17JG1bMV19IjsKICAgIH0KICAgIC8vIFVuaXggdGltZXN0YW1wIChLb21tbyDDoHMgdmV6ZXMgcmV0b3JuYSkKICAgIGlmICggcHJlZ19tYXRjaCggJy9eXGR7OSwxMX0kLycsICRyYXcgKSApIHsKICAgICAgICAkdHMgPSAoaW50KSAkcmF3OwogICAgICAgIHJldHVybiBkYXRlKCAnWS1tLWQnLCAkdHMgKTsKICAgIH0KICAgIHJldHVybiAnJzsKfQoKZnVuY3Rpb24gdm0yX2dldF9jbGlja3NpZ25fc3RhdHVzKCAkb3JkZXJfaWQgKSB7CiAgICAkb3JkZXIgPSB3Y19nZXRfb3JkZXIoICRvcmRlcl9pZCApOwogICAgaWYgKCAhICRvcmRlciApIHJldHVybiAn4oCUJzsKICAgICRzdGF0dXNlcyA9IFtdOwogICAgLy8gVXNhIGdldF9tZXRhX2RhdGEoKSBwYXJhIGNvbXBhdGliaWxpZGFkZSBjb20gSFBPUwogICAgZm9yZWFjaCAoICRvcmRlci0+Z2V0X21ldGFfZGF0YSgpIGFzICRtZXRhICkgewogICAgICAgICRkYXRhID0gJG1ldGEtPmdldF9kYXRhKCk7CiAgICAgICAgaWYgKCBzdHJwb3MoICRkYXRhWydrZXknXSwgJ19jbGlja3NpZ25fc3RhdHVzJyApICE9PSBmYWxzZSApIHsKICAgICAgICAgICAgJHN0YXR1c2VzW10gPSBzdHJ0b2xvd2VyKCAkZGF0YVsndmFsdWUnXSApOwogICAgICAgIH0KICAgIH0KICAgIC8vIEZhbGxiYWNrOiBnZXRfcG9zdF9tZXRhIHBhcmEgbG9qYXMgc2VtIEhQT1MKICAgIGlmICggZW1wdHkoICRzdGF0dXNlcyApICkgewogICAgICAgICRyYXcgPSBnZXRfcG9zdF9tZXRhKCAkb3JkZXJfaWQsICdfY2xpY2tzaWduX3N0YXR1cycsIGZhbHNlICk7CiAgICAgICAgZm9yZWFjaCAoIChhcnJheSkgJHJhdyBhcyAkdiApIHsKICAgICAgICAgICAgJHN0YXR1c2VzW10gPSBzdHJ0b2xvd2VyKCAkdiApOwogICAgICAgIH0KICAgIH0KICAgIGlmICggZW1wdHkoICRzdGF0dXNlcyApICkgcmV0dXJuICfigJQnOwogICAgJHNpZ25lZF92YWx1ZXMgPSBbICdzaWduZWQnLCAnZmluYWxpemVkJywgJ2ZpbmFsaXphZG8nLCAnY29tcGxldGVkJywgJ2ZpbmlzaGVkJyBdOwogICAgZm9yZWFjaCAoICRzaWduZWRfdmFsdWVzIGFzICRzdiApIHsKICAgICAgICBpZiAoIGluX2FycmF5KCAkc3YsICRzdGF0dXNlcywgdHJ1ZSApICkgcmV0dXJuICfinIUgQ29udHJhdG8gYXNzaW5hZG8nOwogICAgfQogICAgaWYgKCAhIGVtcHR5KCAkc3RhdHVzZXMgKSApIHJldHVybiAn4o+zIEFndWFyZGFuZG8gYXNzaW5hdHVyYSc7CiAgICByZXR1cm4gJ+KAlCc7Cn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBSRVBMQUNFIFZBUlMKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9yZXBsYWNlX3ZhcnMoICRtc2csICR2YXJzICkgewogICAgcmV0dXJuIHN0cl9yZXBsYWNlKCBhcnJheV9rZXlzKCAkdmFycyApLCBhcnJheV92YWx1ZXMoICR2YXJzICksICRtc2cgKTsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFNFTkQgVklBIFotQVBJCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfc2VuZF96YXBpKCAkY2hhbm5lbF9rZXksICRwaG9uZSwgJG1lc3NhZ2UgKSB7CiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgIGlmICggISBpc3NldCggJGNoYW5uZWxzWyAkY2hhbm5lbF9rZXkgXSApICkgewogICAgICAgIHZtMl9sb2coICJDYW5hbCBuw6NvIGVuY29udHJhZG86IHskY2hhbm5lbF9rZXl9IiwgJ2Vycm9yJyApOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgICRjaCAgPSAkY2hhbm5lbHNbICRjaGFubmVsX2tleSBdOwogICAgJHVybCA9ICJodHRwczovL2FwaS56LWFwaS5pby9pbnN0YW5jZXMveyRjaFsnaW5zdGFuY2UnXX0vdG9rZW4veyRjaFsndG9rZW4nXX0vc2VuZC10ZXh0IjsKCiAgICAkcmVzcG9uc2UgPSB3cF9yZW1vdGVfcG9zdCggJHVybCwgWwogICAgICAgICdoZWFkZXJzJyA9PiBbCiAgICAgICAgICAgICdDb250ZW50LVR5cGUnID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgJ0NsaWVudC1Ub2tlbicgPT4gVk0yX1pBUElfQ0xJRU5ULAogICAgICAgIF0sCiAgICAgICAgJ2JvZHknICAgID0+IHdwX2pzb25fZW5jb2RlKCBbICdwaG9uZScgPT4gJHBob25lLCAnbWVzc2FnZScgPT4gJG1lc3NhZ2UgXSApLAogICAgICAgICd0aW1lb3V0JyA9PiAxNSwKICAgIF0gKTsKCiAgICBpZiAoIGlzX3dwX2Vycm9yKCAkcmVzcG9uc2UgKSApIHsKICAgICAgICB2bTJfbG9nKCAiWi1BUEkgZXJybyBbeyRjaGFubmVsX2tleX3ihpJ7JHBob25lfV06ICIgLiAkcmVzcG9uc2UtPmdldF9lcnJvcl9tZXNzYWdlKCksICdlcnJvcicgKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgJGNvZGUgPSB3cF9yZW1vdGVfcmV0cmlldmVfcmVzcG9uc2VfY29kZSggJHJlc3BvbnNlICk7CiAgICAkYm9keSA9IHdwX3JlbW90ZV9yZXRyaWV2ZV9ib2R5KCAkcmVzcG9uc2UgKTsKICAgIHZtMl9sb2coICJaLUFQSSBbeyRjaGFubmVsX2tleX3ihpJ7JHBob25lfV0gSFRUUCB7JGNvZGV9OiB7JGJvZHl9IiwgJGNvZGUgPT09IDIwMCA/ICdpbmZvJyA6ICdlcnJvcicgKTsKICAgIHJldHVybiAkY29kZSA9PT0gMjAwOwp9CgoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEhFTFBFUiDigJQgU0VORCBXQUJBIChNZXRhIEdyYXBoIEFQSSB2aWEgcG9vbCBkaW7Dom1pY28pCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfc2VuZF93YWJhKCAkY2hhbm5lbF9rZXksICRwaG9uZSwgJHRlbXBsYXRlX25hbWUsICRjb21wb25lbnRzID0gW10gKSB7CiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgIGlmICggISBpc3NldCggJGNoYW5uZWxzWyAkY2hhbm5lbF9rZXkgXSApICkgewogICAgICAgIHZtMl9sb2coICJDYW5hbCBXQUJBIG7Do28gZW5jb250cmFkbzogeyRjaGFubmVsX2tleX0iLCAnZXJyb3InICk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgJGNoICAgICAgID0gJGNoYW5uZWxzWyAkY2hhbm5lbF9rZXkgXTsKICAgICRwaG9uZV9pZCA9ICRjaFsnaW5zdGFuY2UnXSA/PyAnJzsgIC8vIHBhcmEgV0FCQTogUGhvbmUgTnVtYmVyIElEIChjYW1wbyBpbnN0YW5jZSkKICAgICR0b2tlbiAgICA9ICRjaFsndG9rZW4nXSAgICA/PyAnJzsKCiAgICBpZiAoICEgJHBob25lX2lkIHx8ICEgJHRva2VuICkgewogICAgICAgIHZtMl9sb2coICJXQUJBIHskY2hhbm5lbF9rZXl9OiBwaG9uZV9pZCBvdSB0b2tlbiBuw6NvIGNvbmZpZ3VyYWRvIiwgJ2Vycm9yJyApOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAkdHBsX3BheWxvYWQgPSBbCiAgICAgICAgJ25hbWUnICAgICA9PiAkdGVtcGxhdGVfbmFtZSwKICAgICAgICAnbGFuZ3VhZ2UnID0+IFsgJ2NvZGUnID0+ICdwdF9CUicgXSwKICAgIF07CiAgICBpZiAoICEgZW1wdHkoICRjb21wb25lbnRzICkgKSB7CiAgICAgICAgJHRwbF9wYXlsb2FkWydjb21wb25lbnRzJ10gPSAkY29tcG9uZW50czsKICAgIH0KCiAgICAkYm9keSA9IHdwX2pzb25fZW5jb2RlKCBbCiAgICAgICAgJ21lc3NhZ2luZ19wcm9kdWN0JyA9PiAnd2hhdHNhcHAnLAogICAgICAgICd0bycgICAgICAgICAgICAgICAgPT4gJHBob25lLAogICAgICAgICd0eXBlJyAgICAgICAgICAgICAgPT4gJ3RlbXBsYXRlJywKICAgICAgICAndGVtcGxhdGUnICAgICAgICAgID0+ICR0cGxfcGF5bG9hZCwKICAgIF0gKTsKCiAgICAkdXJsICAgICAgPSAiaHR0cHM6Ly9ncmFwaC5mYWNlYm9vay5jb20vdjIxLjAveyRwaG9uZV9pZH0vbWVzc2FnZXMiOwogICAgJHJlc3BvbnNlID0gd3BfcmVtb3RlX3Bvc3QoICR1cmwsIFsKICAgICAgICAnaGVhZGVycycgPT4gWwogICAgICAgICAgICAnQXV0aG9yaXphdGlvbicgPT4gJ0JlYXJlciAnIC4gJHRva2VuLAogICAgICAgICAgICAnQ29udGVudC1UeXBlJyAgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgIF0sCiAgICAgICAgJ2JvZHknICAgID0+ICRib2R5LAogICAgICAgICd0aW1lb3V0JyA9PiAxNSwKICAgIF0gKTsKCiAgICBpZiAoIGlzX3dwX2Vycm9yKCAkcmVzcG9uc2UgKSApIHsKICAgICAgICB2bTJfbG9nKCAiV0FCQSBlcnJvIFt7JGNoYW5uZWxfa2V5feKGknskcGhvbmV9XTogIiAuICRyZXNwb25zZS0+Z2V0X2Vycm9yX21lc3NhZ2UoKSwgJ2Vycm9yJyApOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAkY29kZSAgICAgID0gd3BfcmVtb3RlX3JldHJpZXZlX3Jlc3BvbnNlX2NvZGUoICRyZXNwb25zZSApOwogICAgJGJvZHlfcmVzcCA9IHdwX3JlbW90ZV9yZXRyaWV2ZV9ib2R5KCAkcmVzcG9uc2UgKTsKICAgICRzdWNjZXNzICAgPSAoICRjb2RlID09PSAyMDAgKTsKICAgIHZtMl9sb2coICJXQUJBIFt7JGNoYW5uZWxfa2V5feKGknskcGhvbmV9XSBIVFRQIHskY29kZX06IHskYm9keV9yZXNwfSIsICRzdWNjZXNzID8gJ2luZm8nIDogJ2Vycm9yJyApOwogICAgcmV0dXJuIFsgJ29rJyA9PiAkc3VjY2VzcywgJ2NvZGUnID0+ICRjb2RlLCAnYm9keScgPT4gJGJvZHlfcmVzcCBdOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gSEVMUEVSIOKAlCBGT1JNQVRBUiBURUxFRk9ORSAocmVtb3ZlIERESSA1NSBkdXBsbykKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9mb3JtYXRfcGhvbmUoICRyYXcgKSB7CiAgICAkcGhvbmUgPSBwcmVnX3JlcGxhY2UoICcvXEQvJywgJycsICRyYXcgKTsKICAgIC8vIFJlbW92ZSBEREkgNTUgZHVwbGljYWRvOiA1NTU1MTI5NzQxMDcwIOKGkiA1NTExOTQxMDcwCiAgICBpZiAoIHN0cmxlbiggJHBob25lICkgPj0gMTMgJiYgc3Vic3RyKCAkcGhvbmUsIDAsIDQgKSA9PT0gJzU1NTUnICkgewogICAgICAgICRwaG9uZSA9ICc1NScgLiBzdWJzdHIoICRwaG9uZSwgNCApOwogICAgfQogICAgLy8gQWRpY2lvbmEgRERJIDU1IHNlIGF1c2VudGUKICAgIGlmICggc3RybGVuKCAkcGhvbmUgKSA+PSAxMCAmJiBzdHJsZW4oICRwaG9uZSApIDw9IDExICkgewogICAgICAgICRwaG9uZSA9ICc1NScgLiAkcGhvbmU7CiAgICB9CiAgICByZXR1cm4gJHBob25lOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gSEVMUEVSIOKAlCBEQVRBIERPIEVWRU5UTyDihpIgVElNRVNUQU1QCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfZXZlbnRfZGF0ZV90b190cyggJHJhdyApIHsKICAgIGlmICggISAkcmF3ICkgcmV0dXJuIDA7CiAgICAvLyBERE1NWVlZWQogICAgaWYgKCBwcmVnX21hdGNoKCAnL14oXGR7Mn0pKFxkezJ9KShcZHs0fSkkLycsICRyYXcsICRtICkgKSB7CiAgICAgICAgcmV0dXJuIG1rdGltZSggMTIsIDAsIDAsIGludHZhbCgkbVsyXSksIGludHZhbCgkbVsxXSksIGludHZhbCgkbVszXSkgKTsKICAgIH0KICAgIC8vIEREL01NL1lZCiAgICBpZiAoIHByZWdfbWF0Y2goICcvXihcZHsyfSlcLyhcZHsyfSlcLyhcZHsyfSkkLycsICRyYXcsICRtICkgKSB7CiAgICAgICAgcmV0dXJuIG1rdGltZSggMTIsIDAsIDAsIGludHZhbCgkbVsyXSksIGludHZhbCgkbVsxXSksIDIwMDAgKyBpbnR2YWwoJG1bM10pICk7CiAgICB9CiAgICAvLyBERC9NTS9ZWVlZCiAgICBpZiAoIHByZWdfbWF0Y2goICcvXihcZHsyfSlcLyhcZHsyfSlcLyhcZHs0fSkkLycsICRyYXcsICRtICkgKSB7CiAgICAgICAgcmV0dXJuIG1rdGltZSggMTIsIDAsIDAsIGludHZhbCgkbVsyXSksIGludHZhbCgkbVsxXSksIGludHZhbCgkbVszXSkgKTsKICAgIH0KICAgIHJldHVybiAwOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gQUdFTkRBIFBBR0UKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8qKgogKiBQYXJzZSBpbmxpbmUgZG8gYmxvYiBkYSBjb2wgQyBkbyBHU2hlZXRzLgogKiBVc2FkbyBjb21vIGZhbGxiYWNrIHF1YW5kbyBvIHN5bmMgbsOjbyBwcsOpLXBhcnNlb3Ugb3MgY2FtcG9zLgogKi8KZnVuY3Rpb24gdm0yX3BhcnNlX2FnZW5kYV9ibG9iKCAkYmxvYiApIHsKICAgICRyID0gWyAndGlwbycgPT4gJycsICdob21lbmFnZWFkbycgPT4gJycsICdsb2NhbCcgPT4gJycsICdlbmRlcmVjbycgPT4gJycsICdhc3Nlc3NvcicgPT4gJycsICdob3JhcmlvJyA9PiAnJywgJ3NlcnZpY29zJyA9PiAnJyBdOwogICAgaWYgKCAhICRibG9iICkgcmV0dXJuICRyOwoKICAgICRsaW5lcyA9IGFycmF5X2ZpbHRlciggYXJyYXlfbWFwKCAndHJpbScsIGV4cGxvZGUoICJcbiIsICRibG9iICkgKSApOwogICAgJGxpbmVzID0gYXJyYXlfdmFsdWVzKCAkbGluZXMgKTsKICAgICRuID0gY291bnQoICRsaW5lcyApOwogICAgJGluX3NlcnZpY29zID0gZmFsc2U7CiAgICAkc2Vydmljb3NfYXJyID0gW107CiAgICAkY2FwdHVyZV9sb2NhbF9uZXh0ICA9IGZhbHNlOyAvLyBwcsOzeGltYSBsaW5oYSBzZXLDoSBvIGxvY2FsCiAgICAkY2FwdHVyZV9lbmRfbmV4dCAgICA9IGZhbHNlOyAvLyBwcsOzeGltYSBsaW5oYSBzZXLDoSBvIGVuZGVyZcOnbwoKICAgIGZvcmVhY2ggKCAkbGluZXMgYXMgJGkgPT4gJGwgKSB7CiAgICAgICAgLy8gQ2FwdHVyYSBkZSBsaW5oYSBzZWd1aW50ZSBwYXJhIGxvY2FsL2VuZGVyZcOnbyBjb20gbGFiZWwgdmF6aW8KICAgICAgICBpZiAoICRjYXB0dXJlX2xvY2FsX25leHQgKSB7ICRyWydsb2NhbCddID0gJGw7ICRjYXB0dXJlX2xvY2FsX25leHQgPSBmYWxzZTsgY29udGludWU7IH0KICAgICAgICBpZiAoICRjYXB0dXJlX2VuZF9uZXh0ICApIHsgJHJbJ2VuZGVyZWNvJ10gPSAkbDsgJGNhcHR1cmVfZW5kX25leHQgID0gZmFsc2U7IGNvbnRpbnVlOyB9CgogICAgICAgIGlmICggcHJlZ19tYXRjaCggJy9zZXJ2aVtjw6ddb3Mgdml2YW1haXMvaScsICRsICkgKSB7ICRpbl9zZXJ2aWNvcyA9IHRydWU7IGNvbnRpbnVlOyB9CiAgICAgICAgaWYgKCAkaW5fc2Vydmljb3MgKSB7ICRzZXJ2aWNvc19hcnJbXSA9ICRsOyBjb250aW51ZTsgfQogICAgICAgIGlmICggcHJlZ19tYXRjaCggJy9eKOKchVxzKik/KGRhdGEgZG8gZXZlbnRvfGRhdGE6fGRhdGUpL2knLCAkbCApICkgY29udGludWU7CiAgICAgICAgaWYgKCBwcmVnX21hdGNoKCAnL150aXBvXHMqKGRvXHMqKT9ldmVudG9ccyo6L2knLCAkbCApICkgewogICAgICAgICAgICAkclsndGlwbyddID0gdHJpbSggcHJlZ19yZXBsYWNlKCAnL150aXBvXHMqKGRvXHMqKT9ldmVudG9ccyo6XHMqL2knLCAnJywgJGwgKSApOyBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCBwcmVnX21hdGNoKCAnL15ob21lbmFnZWFkby9pJywgJGwgKSApIHsKICAgICAgICAgICAgJHJbJ2hvbWVuYWdlYWRvJ10gPSB0cmltKCBwcmVnX3JlcGxhY2UoICcvXmhvbWVuYWdlYWRvW146XSo6XHMqL2knLCAnJywgJGwgKSApOyBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCBwcmVnX21hdGNoKCAnL15sb2NhbFxzKihkb1xzKmV2ZW50byk/XHMqOi9pJywgJGwgKSApIHsKICAgICAgICAgICAgJHZhbCA9IHRyaW0oIHByZWdfcmVwbGFjZSggJy9ebG9jYWxccyooZG9ccypldmVudG8pP1xzKjpccyovaScsICcnLCAkbCApICk7CiAgICAgICAgICAgIGlmICggJHZhbCApIHsgJHJbJ2xvY2FsJ10gPSAkdmFsOyB9IGVsc2UgeyAkY2FwdHVyZV9sb2NhbF9uZXh0ID0gdHJ1ZTsgfQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCBwcmVnX21hdGNoKCAnL15lbmRlcmVbY8OnXW9ccyooZG9ccypldmVudG8pP1xzKjovaScsICRsICkgKSB7CiAgICAgICAgICAgICR2YWwgPSB0cmltKCBwcmVnX3JlcGxhY2UoICcvXmVuZGVyZVtjw6ddb1xzKihkb1xzKmV2ZW50byk/XHMqOlxzKi9pJywgJycsICRsICkgKTsKICAgICAgICAgICAgaWYgKCAkdmFsICkgeyAkclsnZW5kZXJlY28nXSA9ICR2YWw7IH0gZWxzZSB7ICRjYXB0dXJlX2VuZF9uZXh0ID0gdHJ1ZTsgfQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCBwcmVnX21hdGNoKCAnL15hc3Nlc3NvclxzKjovaScsICRsICkgKSB7CiAgICAgICAgICAgICRyWydhc3Nlc3NvciddID0gdHJpbSggcHJlZ19yZXBsYWNlKCAnL15hc3Nlc3NvclxzKjpccyovaScsICcnLCAkbCApICk7IGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIHByZWdfbWF0Y2goICcvXihob3LDoXJpb3xob3JhcmlvKVxzKjovaScsICRsICkgfHwgcHJlZ19tYXRjaCggJy9eZGFzXHMrXGR7MSwyfTpcZHsyfS9pJywgJGwgKSApIHsKICAgICAgICAgICAgJHJbJ2hvcmFyaW8nXSA9IHRyaW0oIHByZWdfcmVwbGFjZSggJy9eKGhvcsOhcmlvfGhvcmFyaW98ZGFzKVxzKjo/XHMqL2knLCAnJywgJGwgKSApOyBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy8gVGlwbyBpbXBsw61jaXRvIG5hIHByaW1laXJhIGxpbmhhIHJlbGV2YW50ZQogICAgICAgIGlmICggISAkclsndGlwbyddICYmIHByZWdfbWF0Y2goICcvXihjYXNhbWVudG98YW5pdmVyc8Ohcmlbb2FdfGZvcm1hdHVyYXxmZXN0YVxzK2RlfGJvZGFzfGRlYnV0YW50ZXx4dlxzK2Fub3N8XGR7MSwyfVxzK2Fub3N8cmVub3ZhW2PDp11bYcOjXW98d2VkZGluZ3xiYXRpemFkb3xjaFthw6FdXHMrZGUpL2l1JywgJGwgKSApIHsKICAgICAgICAgICAgJHJbJ3RpcG8nXSA9ICRsOwogICAgICAgICAgICBpZiAoICEgJHJbJ2hvbWVuYWdlYWRvJ10gJiYgaXNzZXQoICRsaW5lc1sgJGkgKyAxIF0gKSApIHsKICAgICAgICAgICAgICAgICRueHQgPSAkbGluZXNbICRpICsgMSBdOwogICAgICAgICAgICAgICAgaWYgKCAhIHByZWdfbWF0Y2goICcvXihsb2NhbHxkYXRhfGFzc2Vzc29yfGVuZGVyZXzinIV8c2Vydml8aG9yw6FyaW98ZGFzXHMrXGQpL2knLCAkbnh0ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHJbJ2hvbWVuYWdlYWRvJ10gPSAkbnh0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAvLyBFbmRlcmXDp28gaW1wbMOtY2l0byDigJQgUnVhLCBBdiAoY29tIG91IHNlbSBwb250byksIEF2ZW5pZGEsIFJvZG92aWEsIGV0Yy4KICAgICAgICBpZiAoICEgJHJbJ2VuZGVyZWNvJ10gJiYgcHJlZ19tYXRjaCggJy9eKHJ1YXxhdlsuXHNdfGF2ZW5pZGF8cm9kWy5cc118cm9kb3ZpYXxyXC5cc3xhbGFtZWRhfHRyYXZlc3NhfHByYcOnYSkvaXUnLCAkbCApICkgewogICAgICAgICAgICAkclsnZW5kZXJlY28nXSA9ICRsOyBjb250aW51ZTsKICAgICAgICB9CiAgICB9CiAgICAkclsnc2Vydmljb3MnXSA9IGltcGxvZGUoICJcbiIsICRzZXJ2aWNvc19hcnIgKTsKICAgIHJldHVybiAkcjsKfQoKZnVuY3Rpb24gdm0yX2FnZW5kYV9wYWdlKCkgewogICAgaWYgKCAhIGN1cnJlbnRfdXNlcl9jYW4oICdtYW5hZ2Vfb3B0aW9ucycgKSApIHsKICAgICAgICB3cF9kaWUoICdTZW0gcGVybWlzc8OjbycgKTsKICAgIH0KCiAgICAvLyDilIDilIAgSGFuZGxlIEFsZXJ0YXMgU2F2ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIGlmICggaXNzZXQoJF9QT1NUWyd2bTJfc2F2ZV9hZ2VuZGFfYWxlcnRzJ10pICYmIGNoZWNrX2FkbWluX3JlZmVyZXIoJ3ZtMl9hZ2VuZGFfYWxlcnRzX3NhdmUnKSApIHsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfYWdlbmRhX2FsZXJ0c19nbG9iYWxfZW5hYmxlZCcsICFlbXB0eSgkX1BPU1RbJ3ZtMl9hZ2VuZGFfYWxlcnRzX2dsb2JhbF9lbmFibGVkJ10pID8gMSA6IDApOwogICAgICAgICRyYXdfcnVsZXMgPSAoIGlzc2V0KCRfUE9TVFsnYWdlbmRhX2FsZXJ0cyddKSAmJiBpc19hcnJheSgkX1BPU1RbJ2FnZW5kYV9hbGVydHMnXSkgKSA/ICRfUE9TVFsnYWdlbmRhX2FsZXJ0cyddIDogW107CiAgICAgICAgJHJ1bGVzID0gW107CiAgICAgICAgZm9yZWFjaCAoICRyYXdfcnVsZXMgYXMgJHIgKSB7CiAgICAgICAgICAgICRkYXlzID0gaW50dmFsKCRyWydkYXlzX2JlZm9yZSddID8/IDApOwogICAgICAgICAgICBpZiAoICRkYXlzIDw9IDAgKSBjb250aW51ZTsKICAgICAgICAgICAgJHJ1bGVzW10gPSBbCiAgICAgICAgICAgICAgICAnaWQnICAgICAgICAgID0+IHByZWdfcmVwbGFjZSgnL1teYS16MC05X10vJywgJycsICRyWydpZCddID8/ICcnKSA/OiAoICdhcl8nIC4gdW5pcWlkKCkgKSwKICAgICAgICAgICAgICAgICduYW1lJyAgICAgICAgPT4gc2FuaXRpemVfdGV4dF9maWVsZCgkclsnbmFtZSddID8/ICcnKSwKICAgICAgICAgICAgICAgICdlbmFibGVkJyAgICAgPT4gIWVtcHR5KCRyWydlbmFibGVkJ10pID8gMSA6IDAsCiAgICAgICAgICAgICAgICAnZGF5c19iZWZvcmUnID0+ICRkYXlzLAogICAgICAgICAgICAgICAgJ2NoYW5uZWwnICAgICA9PiBzYW5pdGl6ZV9rZXkoJHJbJ2NoYW5uZWwnXSA/PyAnemFwaV83NTUxJyksCiAgICAgICAgICAgICAgICAnZ3JvdXBfaWQnICAgID0+IHNhbml0aXplX3RleHRfZmllbGQoJHJbJ2dyb3VwX2lkJ10gPz8gJycpLAogICAgICAgICAgICAgICAgJ21lc3NhZ2UnICAgICA9PiBzYW5pdGl6ZV90ZXh0YXJlYV9maWVsZCgkclsnbWVzc2FnZSddID8/ICcnKSwKICAgICAgICAgICAgXTsKICAgICAgICB9CiAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX2FnZW5kYV9hbGVydHMnLCAkcnVsZXMpOwogICAgICAgIGlmICggISBlbXB0eSgkX1BPU1RbJ3ZtMl9jbGVhcl9hbGVydF9sb2cnXSkgKSB7CiAgICAgICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9hZ2VuZGFfYWxlcnRzX2xvZycsIFtdKTsKICAgICAgICB9CiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1zdWNjZXNzIGlzLWRpc21pc3NpYmxlIj48cD7inIUgQWxlcnRhcyBkZSBhZ2VuZGEgc2Fsdm9zIGNvbSBzdWNlc3NvITwvcD48L2Rpdj4nOwogICAgfQoKICAgICR2aWV3ICAgPSBzYW5pdGl6ZV9rZXkoICRfR0VUWyd2aWV3J10gICA/PyAnbGlzdCcgKTsKICAgICRtb250aCAgPSBtYXgoIDEsIG1pbiggMTIsIGludHZhbCggJF9HRVRbJ21vbnRoJ10gPz8gZGF0ZSgnbicpICkgKSApOwogICAgJHllYXIgICA9IG1heCggMjAyMCwgbWluKCAyMDMwLCBpbnR2YWwoICRfR0VUWyd5ZWFyJ10gPz8gZGF0ZSgnWScpICkgKSApOwogICAgJGZpbHRlciA9IHNhbml0aXplX2tleSggJF9HRVRbJ2ZpbHRlciddID8/ICd1cGNvbWluZycgKTsKICAgIGlmICggJGZpbHRlciA9PT0gJ3dlZWsnICkgJGZpbHRlciA9ICd3ZWVrJzsKCiAgICAvLyBQcmV2L05leHQgbW9udGgKICAgICRwcmV2X20gPSAkbW9udGggLSAxOyAkcHJldl95ID0gJHllYXI7CiAgICBpZiAoICRwcmV2X20gPCAxICkgIHsgJHByZXZfbSA9IDEyOyAkcHJldl95LS07IH0KICAgICRuZXh0X20gPSAkbW9udGggKyAxOyAkbmV4dF95ID0gJHllYXI7CiAgICBpZiAoICRuZXh0X20gPiAxMiApIHsgJG5leHRfbSA9IDE7ICAkbmV4dF95Kys7IH0KCiAgICAkYmFzZSAgID0gYWRtaW5fdXJsKCAnYWRtaW4ucGhwJyApOwogICAgJHByZXZfdXJsID0gYWRkX3F1ZXJ5X2FyZyggWyAncGFnZScgPT4gJ3ZtMi1hZ2VuZGEnLCAndmlldycgPT4gJ2NhbGVuZGFyJywgJ21vbnRoJyA9PiAkcHJldl9tLCAneWVhcicgPT4gJHByZXZfeSBdLCAkYmFzZSApOwogICAgJG5leHRfdXJsID0gYWRkX3F1ZXJ5X2FyZyggWyAncGFnZScgPT4gJ3ZtMi1hZ2VuZGEnLCAndmlldycgPT4gJ2NhbGVuZGFyJywgJ21vbnRoJyA9PiAkbmV4dF9tLCAneWVhcicgPT4gJG5leHRfeSBdLCAkYmFzZSApOwogICAgJGxpc3RfdXJsICAgID0gYWRkX3F1ZXJ5X2FyZyggWyAncGFnZScgPT4gJ3ZtMi1hZ2VuZGEnLCAndmlldycgPT4gJ2xpc3QnIF0sICRiYXNlICk7CiAgICAkY2FsX3VybCAgICAgPSBhZGRfcXVlcnlfYXJnKCBbICdwYWdlJyA9PiAndm0yLWFnZW5kYScsICd2aWV3JyA9PiAnY2FsZW5kYXInLCAnbW9udGgnID0+ICRtb250aCwgJ3llYXInID0+ICR5ZWFyIF0sICRiYXNlICk7CiAgICAkYWxlcnRzX3VybCAgPSBhZGRfcXVlcnlfYXJnKCBbICdwYWdlJyA9PiAndm0yLWFnZW5kYScsICd2aWV3JyA9PiAnYWxlcnRhcycgXSwgJGJhc2UgKTsKCiAgICAvLyDilIDilIAgRm9udGUgZGUgZGFkb3M6IEdTaGVldHMgKHByaW3DoXJpbykgb3UgV29vQ29tbWVyY2UgKGZhbGxiYWNrKSDilIDilIDilIDilIDilIAKICAgICR0b2RheV90cyA9IHN0cnRvdGltZSggY3VycmVudF90aW1lKCAnWS1tLWQnICkgKTsgLy8gdXNhIHRpbWV6b25lIFNQIChBbWVyaWNhL1Nhb19QYXVsbyB2aWEgV1ApCiAgICAkZXZlbnRzICAgPSBbXTsKICAgICRkYXRhX3NvdXJjZSA9ICd3Yyc7CgogICAgJGdzX2V2ZW50cyA9IGdldF9vcHRpb24oJ3ZtMl9hZ2VuZGFfZ3NoZWV0cycsIFtdKTsKICAgIGlmICggIWlzX2FycmF5KCRnc19ldmVudHMpICkgJGdzX2V2ZW50cyA9IGpzb25fZGVjb2RlKCRnc19ldmVudHMsIHRydWUpID86IFtdOwoKICAgIC8vIElEcyBkZSBkYXRhcyBHU2hlZXRzIGrDoSBwcmVzZW50ZXMgKHBhcmEgZGVkdXBsaWNhciBjb20gV0MpCiAgICAkZ3NfZGF0ZXNfdXNlZCA9IFtdOwogICAgJGdzX2V2X2J5X2RhdGUgPSBbXTsgLy8gZGF0ZSAtPiBbZXZlbnQgYXJyYXkgaW5kaWNlc10KCiAgICBpZiAoICFlbXB0eSgkZ3NfZXZlbnRzKSApIHsKICAgICAgICAkZGF0YV9zb3VyY2UgPSAnZ3NoZWV0cyc7CiAgICAgICAgZm9yZWFjaCAoICRnc19ldmVudHMgYXMgJHJvdyApIHsKICAgICAgICAgICAgaWYgKCBlbXB0eSgkcm93WydkYXRhX2Zlc3RhJ10pICkgY29udGludWU7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkcm93WydkYXRhX2Zlc3RhJ10pOwogICAgICAgICAgICBpZiAoIGNvdW50KCRwYXJ0cykgIT09IDMgKSBjb250aW51ZTsKICAgICAgICAgICAgJHRzID0gbWt0aW1lKDAsIDAsIDAsIChpbnQpJHBhcnRzWzFdLCAoaW50KSRwYXJ0c1swXSwgKGludCkkcGFydHNbMl0pOwogICAgICAgICAgICBpZiAoICEkdHMgKSBjb250aW51ZTsKCiAgICAgICAgICAgICRkYXlzX3VudGlsID0gaW50dmFsKCgkdHMgLSAkdG9kYXlfdHMpIC8gODY0MDApOwogICAgICAgICAgICBpZiAoICRkYXlzX3VudGlsIDwgMCApICAgICAgICRjb2xvciA9ICcjNmU3NzgxJzsKICAgICAgICAgICAgZWxzZWlmICggJGRheXNfdW50aWwgPD0gNyApICAkY29sb3IgPSAnI2QxMjQyZic7CiAgICAgICAgICAgIGVsc2VpZiAoICRkYXlzX3VudGlsIDw9IDMwICkgJGNvbG9yID0gJyNlMTZmMjQnOwogICAgICAgICAgICBlbHNlaWYgKCAkZGF5c191bnRpbCA8PSA5MCApICRjb2xvciA9ICcjOWE2NzAwJzsKICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAkY29sb3IgPSAnIzFhN2YzNyc7CgogICAgICAgICAgICAkcGhvbmVfcmF3ID0gcHJlZ19yZXBsYWNlKCcvXEQvJywgJycsICRyb3dbJ3doYXRzYXBwJ10gPz8gJycpOwogICAgICAgICAgICBpZiAoIHN0cmxlbigkcGhvbmVfcmF3KSA9PT0gMTAgfHwgc3RybGVuKCRwaG9uZV9yYXcpID09PSAxMSApICRwaG9uZV9yYXcgPSAnNTUnIC4gJHBob25lX3JhdzsKCiAgICAgICAgICAgIC8vIENhbXBvcyBwYXJzZWFkb3Mg4oCUIHbDqm0gZG8gc3luYyBwcsOpLXBhcnNlYWRvIG91IGRvIGJsb2IgaW5saW5lCiAgICAgICAgICAgICRldl9ibG9iICAgICAgID0gdHJpbSgkcm93WydldmVudG9fYmxvYiddID8/ICcnKTsKICAgICAgICAgICAgJGV2X3ByZXN0YWRvciAgPSB0cmltKCRyb3dbJ3ByZXN0YWRvciddICAgPz8gJycpOwogICAgICAgICAgICAkZXZfY3VzdG8gICAgICA9IHRyaW0oJHJvd1snY3VzdG8nXSAgICAgICA/PyAnJyk7CiAgICAgICAgICAgIC8vIFNlIG8gc3luYyBqw6EgdHJvdXhlIG9zIGNhbXBvcyBwYXJzZWFkb3MsIHVzYTsgc2Vuw6NvIHBhcnNlaWEgbyBibG9iIGFnb3JhCiAgICAgICAgICAgICRldl90aXBvICAgICAgID0gdHJpbSgkcm93Wyd0aXBvJ10gICAgICAgID8/ICcnKTsKICAgICAgICAgICAgJGV2X2hvbWVuYWdlYWRvPSB0cmltKCRyb3dbJ2hvbWVuYWdlYWRvJ10gPz8gJycpOwogICAgICAgICAgICAkZXZfbG9jYWwgICAgICA9IHRyaW0oJHJvd1snbG9jYWwnXSAgICAgICA/PyAnJyk7CiAgICAgICAgICAgICRldl9lbmRlcmVjbyAgID0gdHJpbSgkcm93WydlbmRlcmVjbyddICAgID8/ICcnKTsKICAgICAgICAgICAgJGV2X2Fzc2Vzc29yICAgPSB0cmltKCRyb3dbJ2Fzc2Vzc29yJ10gICAgPz8gJycpOwogICAgICAgICAgICAkZXZfaG9yYXJpbyAgICA9IHRyaW0oJHJvd1snaG9yYXJpbyddICAgICA/PyAnJyk7CiAgICAgICAgICAgICRldl9zZXJ2aWNvcyAgID0gdHJpbSgkcm93WydzZXJ2aWNvcyddICAgID8/ICcnKTsKICAgICAgICAgICAgLy8gU2VtcHJlIHByZWVuY2hlIGNhbXBvcyBhdXNlbnRlcyBhIHBhcnRpciBkbyBibG9iIChuw6NvIHPDsyBxdWFuZG8gdG9kb3MgdmF6aW9zKQogICAgICAgICAgICBpZiAoICRldl9ibG9iICkgewogICAgICAgICAgICAgICAgJHBhcnNlZCA9IHZtMl9wYXJzZV9hZ2VuZGFfYmxvYiggJGV2X2Jsb2IgKTsKICAgICAgICAgICAgICAgIGlmICggISAkZXZfdGlwbyAgICAgICAgKSAkZXZfdGlwbyAgICAgICAgPSAkcGFyc2VkWyd0aXBvJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGV2X2hvbWVuYWdlYWRvICkgJGV2X2hvbWVuYWdlYWRvID0gJHBhcnNlZFsnaG9tZW5hZ2VhZG8nXTsKICAgICAgICAgICAgICAgIGlmICggISAkZXZfbG9jYWwgICAgICAgKSAkZXZfbG9jYWwgICAgICAgPSAkcGFyc2VkWydsb2NhbCddOwogICAgICAgICAgICAgICAgaWYgKCAhICRldl9lbmRlcmVjbyAgICApICRldl9lbmRlcmVjbyAgICA9ICRwYXJzZWRbJ2VuZGVyZWNvJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGV2X2Fzc2Vzc29yICAgICkgJGV2X2Fzc2Vzc29yICAgID0gJHBhcnNlZFsnYXNzZXNzb3InXTsKICAgICAgICAgICAgICAgIGlmICggISAkZXZfaG9yYXJpbyAgICAgKSAkZXZfaG9yYXJpbyAgICAgPSAkcGFyc2VkWydob3JhcmlvJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGV2X3NlcnZpY29zICAgICkgJGV2X3NlcnZpY29zICAgID0gJHBhcnNlZFsnc2Vydmljb3MnXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBUw610dWxvIHBhcmEgZXhpYmnDp8OjbyBubyBjYXJkOiB0aXBvICsgaG9tZW5hZ2VhZG8KICAgICAgICAgICAgJGV2X3RpdHVsbyA9ICRldl90aXBvID86ICggJGV2X2hvbWVuYWdlYWRvID86ICdFdmVudG8nICk7CgogICAgICAgICAgICAkZXZlbnRzW10gPSBbCiAgICAgICAgICAgICAgICAnaWQnICAgICAgICAgID0+ICdnc18nIC4gKCRyb3dbJ3JvdyddID8/IHVuaXFpZCgpKSwKICAgICAgICAgICAgICAgICd0cycgICAgICAgICAgPT4gJHRzLAogICAgICAgICAgICAgICAgJ2RhdGVfZm10JyAgICA9PiAkcm93WydkYXRhX2Zlc3RhJ10sCiAgICAgICAgICAgICAgICAnZGF5JyAgICAgICAgID0+IGludHZhbChkYXRlKCdqJywgJHRzKSksCiAgICAgICAgICAgICAgICAnbW9udGgnICAgICAgID0+IGludHZhbChkYXRlKCduJywgJHRzKSksCiAgICAgICAgICAgICAgICAneWVhcicgICAgICAgID0+IGludHZhbChkYXRlKCdZJywgJHRzKSksCiAgICAgICAgICAgICAgICAndGl0dWxvJyAgICAgID0+ICRldl90aXR1bG8sCiAgICAgICAgICAgICAgICAndGlwbycgICAgICAgID0+ICRldl90aXBvLAogICAgICAgICAgICAgICAgJ2hvbWVuYWdlYWRvJyA9PiAkZXZfaG9tZW5hZ2VhZG8sCiAgICAgICAgICAgICAgICAnbG9jYWwnICAgICAgID0+ICRldl9sb2NhbCwKICAgICAgICAgICAgICAgICdlbmRlcmVjbycgICAgPT4gJGV2X2VuZGVyZWNvLAogICAgICAgICAgICAgICAgJ2Fzc2Vzc29yJyAgICA9PiAkZXZfYXNzZXNzb3IsCiAgICAgICAgICAgICAgICAnaG9yYXJpbycgICAgID0+ICRldl9ob3JhcmlvLAogICAgICAgICAgICAgICAgJ3NlcnZpY29zJyAgICA9PiAkZXZfc2Vydmljb3MsCiAgICAgICAgICAgICAgICAnZXZlbnRvX2Jsb2InID0+ICRldl9ibG9iLAogICAgICAgICAgICAgICAgJ3ByZXN0YWRvcicgICA9PiAkZXZfcHJlc3RhZG9yLAogICAgICAgICAgICAgICAgJ3Bob25lJyAgICAgICA9PiAkcGhvbmVfcmF3LAogICAgICAgICAgICAgICAgJ3dhX2xpbmsnICAgICA9PiAkcGhvbmVfcmF3ID8gJ2h0dHBzOi8vd2EubWUvJyAuICRwaG9uZV9yYXcgOiAnIycsCiAgICAgICAgICAgICAgICAnY3VzdG8nICAgICAgID0+ICRldl9jdXN0bywKICAgICAgICAgICAgICAgICdkYXlzX3VudGlsJyAgPT4gJGRheXNfdW50aWwsCiAgICAgICAgICAgICAgICAnY29sb3InICAgICAgID0+ICRjb2xvciwKICAgICAgICAgICAgICAgICdjdXN0b21lcicgICAgPT4gJycsCiAgICAgICAgICAgICAgICAnc291cmNlJyAgICAgID0+ICdnc2hlZXRzJywKICAgICAgICAgICAgICAgICd3Y19vcmRlcl9pZCcgPT4gbnVsbCwgLy8gZmlsbGVkIGxhdGVyIGlmIG1hdGNoaW5nIFdDIG9yZGVyIGZvdW5kCiAgICAgICAgICAgICAgICAvLyBUZXh0byBkZSBidXNjYSB1bmlmaWNhZG8KICAgICAgICAgICAgICAgICdzZWFyY2hfdGV4dCcgPT4gbWJfc3RydG9sb3dlciggaW1wbG9kZSggJyAnLCBbICRldl90aXBvLCAkZXZfaG9tZW5hZ2VhZG8sICRldl9sb2NhbCwgJGV2X2Fzc2Vzc29yLCAkZXZfcHJlc3RhZG9yLCAkZXZfc2Vydmljb3MsICRldl9ibG9iIF0gKSApLAogICAgICAgICAgICBdOwogICAgICAgICAgICAvLyBSZWdpc3RyYSBkYXRhIHBhcmEgZGVkdXBsaWNhciBjb20gV0MKICAgICAgICAgICAgJGdzX2RhdGVzX3VzZWRbIGRhdGUoJ1ktbS1kJywgJHRzKSBdID0gdHJ1ZTsKICAgICAgICAgICAgJGdzX2V2X2J5X2RhdGVbIGRhdGUoJ1ktbS1kJywgJHRzKSBdW10gPSBjb3VudCgkZXZlbnRzKSAtIDE7IC8vIHRyYWNrIEdTaGVldHMgZXZlbnQgaW5kZXggYnkgZGF0ZQogICAgICAgIH0KICAgIH0KCiAgICAvLyBDb21wbGVtZW50YSBjb20gV29vQ29tbWVyY2Ug4oCUIGV2ZW50b3MgUEFTU0FET1MgKHJlYWxpemFkb3MpIHF1ZSBuw6NvIGVzdMOjbyBubyBHU2hlZXRzCiAgICAvLyAoc2VtcHJlIGF0aXZvLCBuw6NvIMOpIGZhbGxiYWNrKQogICAgJG9yZGVycyA9IGZ1bmN0aW9uX2V4aXN0cygnd2NfZ2V0X29yZGVycycpID8gd2NfZ2V0X29yZGVycyhbCiAgICAgICAgICAgICdzdGF0dXMnICA9PiB2bTJfb3JkZXJfc3RhdHVzZXMoKSwKICAgICAgICAgICAgJ2xpbWl0JyAgID0+IDEwMDAsCiAgICAgICAgICAgICd0eXBlJyAgICA9PiAnc2hvcF9vcmRlcicsCiAgICAgICAgICAgICdvcmRlcmJ5JyA9PiAnZGF0ZScsCiAgICAgICAgICAgICdvcmRlcicgICA9PiAnREVTQycsCiAgICAgICAgXSkgOiBbXTsKICAgICAgICBmb3JlYWNoICggJG9yZGVycyBhcyAkb3JkZXIgKSB7CiAgICAgICAgICAgICRyYXcgPSAkb3JkZXItPmdldF9tZXRhKCdfYmlsbGluZ19ldmVudF9kYXRlJyk7CiAgICAgICAgICAgIGlmICghJHJhdykgY29udGludWU7CiAgICAgICAgICAgICR0cyA9IHZtMl9ldmVudF9kYXRlX3RvX3RzKCRyYXcpOwogICAgICAgICAgICBpZiAoISR0cykgY29udGludWU7CiAgICAgICAgICAgIC8vIERlZHVwbGljYXI6IHNlIGRhdGEgasOhIGVzdMOhIG5vIEdTaGVldHMsIHB1bGEgKGV2aXRhIGR1cGxpY2F0YXMgZGUgZnV0dXJvcykKICAgICAgICAgICAgJHdjX2V2X2RhdGUgPSBkYXRlKCdZLW0tZCcsICR0cyk7CiAgICAgICAgICAgIGlmICggaXNzZXQoJGdzX2RhdGVzX3VzZWRbJHdjX2V2X2RhdGVdKSApIHsKICAgICAgICAgICAgICAgIC8vIEluamV0YSB3Y19vcmRlcl9pZCBub3MgZXZlbnRvcyBHU2hlZXRzIGRlc3RhIGRhdGEKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCAoJGdzX2V2X2J5X2RhdGVbJHdjX2V2X2RhdGVdID8/IFtdKSBhcyAkZ2kgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBpc3NldCgkZXZlbnRzWyRnaV0pICYmIGVtcHR5KCRldmVudHNbJGdpXVsnd2Nfb3JkZXJfaWQnXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRldmVudHNbJGdpXVsnd2Nfb3JkZXJfaWQnXSA9ICRvcmRlci0+Z2V0X2lkKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGl0ZW1zID0gW107CiAgICAgICAgICAgIGZvcmVhY2ggKCRvcmRlci0+Z2V0X2l0ZW1zKCkgYXMgJGl0ZW0pICRpdGVtc1tdID0gJGl0ZW0tPmdldF9uYW1lKCk7CiAgICAgICAgICAgICRkYXlzX3VudGlsID0gaW50dmFsKCgkdHMgLSAkdG9kYXlfdHMpIC8gODY0MDApOwogICAgICAgICAgICBpZiAoJGRheXNfdW50aWwgPCAwKSAgICAgICAkY29sb3IgPSAnIzZlNzc4MSc7CiAgICAgICAgICAgIGVsc2VpZiAoJGRheXNfdW50aWwgPD0gNykgICRjb2xvciA9ICcjZDEyNDJmJzsKICAgICAgICAgICAgZWxzZWlmICgkZGF5c191bnRpbCA8PSAzMCkgJGNvbG9yID0gJyNlMTZmMjQnOwogICAgICAgICAgICBlbHNlaWYgKCRkYXlzX3VudGlsIDw9IDkwKSAkY29sb3IgPSAnIzlhNjcwMCc7CiAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICRjb2xvciA9ICcjMWE3ZjM3JzsKICAgICAgICAgICAgJHBob25lX3JhdyA9IHByZWdfcmVwbGFjZSgnL1xELycsICcnLCAkb3JkZXItPmdldF9iaWxsaW5nX3Bob25lKCkpOwogICAgICAgICAgICBpZiAoc3RybGVuKCRwaG9uZV9yYXcpIDw9IDExKSAkcGhvbmVfcmF3ID0gJzU1JyAuICRwaG9uZV9yYXc7CiAgICAgICAgICAgICRldmVudHNbXSA9IFsKICAgICAgICAgICAgICAgICdpZCcgICAgICAgICAgPT4gJG9yZGVyLT5nZXRfaWQoKSwKICAgICAgICAgICAgICAgICd0cycgICAgICAgICAgPT4gJHRzLAogICAgICAgICAgICAgICAgJ2RhdGVfZm10JyAgICA9PiB2bTJfZm9ybWF0X2V2ZW50X2RhdGUoJHJhdyksCiAgICAgICAgICAgICAgICAnZGF5JyAgICAgICAgID0+IGludHZhbChkYXRlKCdqJywgJHRzKSksCiAgICAgICAgICAgICAgICAnbW9udGgnICAgICAgID0+IGludHZhbChkYXRlKCduJywgJHRzKSksCiAgICAgICAgICAgICAgICAneWVhcicgICAgICAgID0+IGludHZhbChkYXRlKCdZJywgJHRzKSksCiAgICAgICAgICAgICAgICAnY3VzdG9tZXInICAgID0+IHRyaW0oJG9yZGVyLT5nZXRfYmlsbGluZ19maXJzdF9uYW1lKCkgLiAnICcgLiAkb3JkZXItPmdldF9iaWxsaW5nX2xhc3RfbmFtZSgpKSwKICAgICAgICAgICAgICAgICdwaG9uZScgICAgICAgPT4gJHBob25lX3JhdywKICAgICAgICAgICAgICAgICd0aXBvJyAgICAgICAgPT4gJG9yZGVyLT5nZXRfbWV0YSgnX2JpbGxpbmdfdGlwb19ldmVudG8nKSA/OiAn4oCUJywKICAgICAgICAgICAgICAgICdob21lbmFnZWFkbycgPT4gJG9yZGVyLT5nZXRfbWV0YSgnX2JpbGxpbmdfaG9tZW5hZ2VhZG8nKSA/OiAnJywKICAgICAgICAgICAgICAgICdhc3Nlc3NvcicgICAgPT4gJG9yZGVyLT5nZXRfbWV0YSgnX2JpbGxpbmdfYXNzZXNzb3InKSA/OiAn4oCUJywKICAgICAgICAgICAgICAgICdhdHJhY29lcycgICAgPT4gaW1wbG9kZSgnLCAnLCAkaXRlbXMpID86ICfigJQnLAogICAgICAgICAgICAgICAgJ3ByZXN0YWRvcicgICA9PiAn4oCUJywKICAgICAgICAgICAgICAgICdjaWRhZGUnICAgICAgPT4gJG9yZGVyLT5nZXRfc2hpcHBpbmdfY2l0eSgpID86ICRvcmRlci0+Z2V0X2JpbGxpbmdfY2l0eSgpID86ICfigJQnLAogICAgICAgICAgICAgICAgJ2VzdGFkbycgICAgICA9PiAkb3JkZXItPmdldF9zaGlwcGluZ19zdGF0ZSgpID86ICRvcmRlci0+Z2V0X2JpbGxpbmdfc3RhdGUoKSA/OiAn4oCUJywKICAgICAgICAgICAgICAgICdlbmRlcmVjbycgICAgPT4gdHJpbSgkb3JkZXItPmdldF9zaGlwcGluZ19hZGRyZXNzXzEoKSAuICgkb3JkZXItPmdldF9zaGlwcGluZ19hZGRyZXNzXzIoKSA/ICcsICcgLiAkb3JkZXItPmdldF9zaGlwcGluZ19hZGRyZXNzXzIoKSA6ICcnKSkgPzogJ+KAlCcsCiAgICAgICAgICAgICAgICAnYmFpcnJvJyAgICAgID0+ICRvcmRlci0+Z2V0X21ldGEoJ19zaGlwcGluZ19uZWlnaGJvcmhvb2QnKSA/OiAnJywKICAgICAgICAgICAgICAgICdvYnMnICAgICAgICAgPT4gJG9yZGVyLT5nZXRfY3VzdG9tZXJfbm90ZSgpID86ICfigJQnLAogICAgICAgICAgICAgICAgJ3RvdGFsJyAgICAgICA9PiBudW1iZXJfZm9ybWF0KCRvcmRlci0+Z2V0X3RvdGFsKCksIDIsICcsJywgJy4nKSwKICAgICAgICAgICAgICAgICdzdGF0dXMnICAgICAgPT4gJG9yZGVyLT5nZXRfc3RhdHVzKCksCiAgICAgICAgICAgICAgICAnZGF5c191bnRpbCcgID0+ICRkYXlzX3VudGlsLAogICAgICAgICAgICAgICAgJ2NvbG9yJyAgICAgICA9PiAkY29sb3IsCiAgICAgICAgICAgICAgICAnbGluaycgICAgICAgID0+IGFkbWluX3VybCgncG9zdC5waHA/cG9zdD0nIC4gJG9yZGVyLT5nZXRfaWQoKSAuICcmYWN0aW9uPWVkaXQnKSwKICAgICAgICAgICAgICAgICd3YV9saW5rJyAgICAgPT4gJ2h0dHBzOi8vd2EubWUvJyAuICRwaG9uZV9yYXcsCiAgICAgICAgICAgICAgICAnc291cmNlJyAgICAgID0+ICd3YycsCiAgICAgICAgICAgICAgICAnd2Nfb3JkZXJfaWQnID0+ICRvcmRlci0+Z2V0X2lkKCksCiAgICAgICAgICAgICAgICAnY3VzdG8nICAgICAgID0+ICfigJQnLCAnZW50cmFkYScgPT4gJ+KAlCcsICdlbnRyYWRhX3BhZ2EnID0+ICfigJQnLAogICAgICAgICAgICAgICAgJ2ZpbmFsX3ZhbG9yJyA9PiAn4oCUJywgJ2ZpbmFsX3BhZ2EnID0+ICfigJQnLCAnYnJ1dG9fdml2YW1haXMnID0+ICfigJQnLAogICAgICAgICAgICBdOwogICAgICAgIH0KCiAgICAvLyDilIDilIAgRW5yaXF1ZWNlciBldmVudG9zIEdTaGVldHMgY29tIHdjX29yZGVyX2lkIChtYXRjaCBwb3IgZGF0YSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgICBpZiAoIGZ1bmN0aW9uX2V4aXN0cyggJ3djX2dldF9vcmRlcnMnICkgKSB7CiAgICAgICAgJHdjX29yZGVyc19hZG1pbiA9IHdjX2dldF9vcmRlcnMoIFsKICAgICAgICAgICAgJ2xpbWl0JyAgPT4gNTAwLAogICAgICAgICAgICAnc3RhdHVzJyA9PiBbICd3Yy1wcm9jZXNzaW5nJywgJ3djLXNpZ25pbmctcGVuZGluZycsICd3Yy1jb250cmFjdC1zaWduZWQnLCAnd2MtY29tcGxldGVkJyBdLAogICAgICAgICAgICAncmV0dXJuJyA9PiAnb2JqZWN0cycsCiAgICAgICAgXSApOwogICAgICAgICR3Y19kYXRlX21hcF9hZG1pbiA9IFtdOwogICAgICAgIGZvcmVhY2ggKCAkd2Nfb3JkZXJzX2FkbWluIGFzICRvcmQgKSB7CiAgICAgICAgICAgICRldl9kYXRlID0gJG9yZC0+Z2V0X21ldGEoICdfYmlsbGluZ19ldmVudF9kYXRlJyApOwogICAgICAgICAgICBpZiAoIGVtcHR5KCAkZXZfZGF0ZSApICkgewogICAgICAgICAgICAgICAgLy8gZmFsbGJhY2s6IHlpdGggYm9va2luZyBtZXRhCiAgICAgICAgICAgICAgICAkeWIgPSAkb3JkLT5nZXRfbWV0YSggJ3lpdGhfYm9va2luZ19kYXRhJyApOwogICAgICAgICAgICAgICAgaWYgKCAhIGVtcHR5KCAkeWJbJ19mcm9tX3RpbWVzdGFtcCddICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJGV2X2RhdGUgPSBkYXRlKCAnWS1tLWQnLCAkeWJbJ19mcm9tX3RpbWVzdGFtcCddICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAhIGVtcHR5KCAkZXZfZGF0ZSApICkgewogICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplIHRvIFktbS1kCiAgICAgICAgICAgICAgICAkdHNfb3JkID0gc3RydG90aW1lKCAkZXZfZGF0ZSApOwogICAgICAgICAgICAgICAgaWYgKCAkdHNfb3JkICkgewogICAgICAgICAgICAgICAgICAgICRpc28gPSBkYXRlKCAnWS1tLWQnLCAkdHNfb3JkICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhIGlzc2V0KCAkd2NfZGF0ZV9tYXBfYWRtaW5bICRpc28gXSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkd2NfZGF0ZV9tYXBfYWRtaW5bICRpc28gXSA9ICRvcmQtPmdldF9pZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3JlYWNoICggJGV2ZW50cyBhcyAmJGV2ICkgewogICAgICAgICAgICBpZiAoICEgZW1wdHkoICRldlsnd2Nfb3JkZXJfaWQnXSApICkgY29udGludWU7CiAgICAgICAgICAgIGlmICggISBlbXB0eSggJGV2WydkYXRlX2lzbyddICkgJiYgaXNzZXQoICR3Y19kYXRlX21hcF9hZG1pblsgJGV2WydkYXRlX2lzbyddIF0gKSApIHsKICAgICAgICAgICAgICAgICRldlsnd2Nfb3JkZXJfaWQnXSA9ICR3Y19kYXRlX21hcF9hZG1pblsgJGV2WydkYXRlX2lzbyddIF07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdW5zZXQoICRldiApOwogICAgfQoKICAgIHVzb3J0KCAkZXZlbnRzLCBmbiggJGEsICRiICkgPT4gJGFbJ3RzJ10gLSAkYlsndHMnXSApOwoKICAgIGlmICggJGZpbHRlciA9PT0gJ3RvZGF5JyApIHsKICAgICAgICAkbGlzdF9ldmVudHMgPSBhcnJheV92YWx1ZXMoIGFycmF5X2ZpbHRlciggJGV2ZW50cywgZm4oJGUpID0+IGRhdGUoJ1ktbS1kJywgJGVbJ3RzJ10pID09PSAkdG9kYXlfaXNvX2FnICkgKTsKICAgIH0gZWxzZWlmICggJGZpbHRlciA9PT0gJ3dlZWsnICkgewogICAgICAgICR3ZWVrX2VuZF90cyA9IHN0cnRvdGltZSgnKzYgZGF5cycsICR0b2RheV90cyk7CiAgICAgICAgJGxpc3RfZXZlbnRzID0gYXJyYXlfdmFsdWVzKCBhcnJheV9maWx0ZXIoICRldmVudHMsIGZuKCRlKSA9PiAkZVsndHMnXSA+PSAkdG9kYXlfdHMgJiYgJGVbJ3RzJ10gPD0gJHdlZWtfZW5kX3RzICkgKTsKICAgIH0gZWxzZWlmICggJGZpbHRlciA9PT0gJ3VwY29taW5nJyApIHsKICAgICAgICAkbGlzdF9ldmVudHMgPSBhcnJheV92YWx1ZXMoIGFycmF5X2ZpbHRlciggJGV2ZW50cywgZm4oICRlICkgPT4gJGVbJ3RzJ10gPj0gJHRvZGF5X3RzICkgKTsKICAgIH0gZWxzZWlmICggJGZpbHRlciA9PT0gJ2xhc3Q3JyApIHsKICAgICAgICAvLyBMw6ogZGEgYWJhIFZFTkRBUyAoc2VtIGZpbHRybyksIHNpbmNyb25pemFkbyB2aWEgc3luYy1sYXN0NwogICAgICAgICRsN19yYXcgPSAoYXJyYXkpIGdldF9vcHRpb24oICd2bTJfYWdlbmRhX2xhc3Q3JywgW10gKTsKICAgICAgICAkbGlzdF9ldmVudHMgPSBbXTsKICAgICAgICBmb3JlYWNoICggJGw3X3JhdyBhcyAkcm93ICkgewogICAgICAgICAgICBpZiAoIGVtcHR5KCAkcm93WydkYXRhX2Zlc3RhJ10gKSApIGNvbnRpbnVlOwogICAgICAgICAgICAkbHBhcnRzID0gZXhwbG9kZSggJy8nLCAkcm93WydkYXRhX2Zlc3RhJ10gKTsKICAgICAgICAgICAgaWYgKCBjb3VudCggJGxwYXJ0cyApICE9PSAzICkgY29udGludWU7CiAgICAgICAgICAgICRsdHMgPSBta3RpbWUoIDAsIDAsIDAsIChpbnQpICRscGFydHNbMV0sIChpbnQpICRscGFydHNbMF0sIChpbnQpICRscGFydHNbMl0gKTsKICAgICAgICAgICAgaWYgKCAhICRsdHMgKSBjb250aW51ZTsKICAgICAgICAgICAgJGxfZGF5cyAgPSBpbnR2YWwoICggJGx0cyAtICR0b2RheV90cyApIC8gODY0MDAgKTsKICAgICAgICAgICAgJGxfcGhvbmUgPSBwcmVnX3JlcGxhY2UoICcvXEQvJywgJycsICRyb3dbJ3doYXRzYXBwJ10gPz8gJycgKTsKICAgICAgICAgICAgaWYgKCBzdHJsZW4oICRsX3Bob25lICkgPT09IDEwIHx8IHN0cmxlbiggJGxfcGhvbmUgKSA9PT0gMTEgKSAkbF9waG9uZSA9ICc1NScgLiAkbF9waG9uZTsKICAgICAgICAgICAgJGxfYmxvYiAgPSB0cmltKCAkcm93WydldmVudG9fYmxvYiddID8/ICcnICk7CiAgICAgICAgICAgICRsX3RpcG8gID0gdHJpbSggJHJvd1sndGlwbyddICAgICAgICA/PyAnJyApOwogICAgICAgICAgICAkbF9ob21uICA9IHRyaW0oICRyb3dbJ2hvbWVuYWdlYWRvJ10gPz8gJycgKTsKICAgICAgICAgICAgJGxfbG9jbCAgPSB0cmltKCAkcm93Wydsb2NhbCddICAgICAgID8/ICcnICk7CiAgICAgICAgICAgICRsX2FkZHIgID0gdHJpbSggJHJvd1snZW5kZXJlY28nXSAgICA/PyAnJyApOwogICAgICAgICAgICAkbF9hc2VzICA9IHRyaW0oICRyb3dbJ2Fzc2Vzc29yJ10gICAgPz8gJycgKTsKICAgICAgICAgICAgJGxfaG9yYSAgPSB0cmltKCAkcm93Wydob3JhcmlvJ10gICAgID8/ICcnICk7CiAgICAgICAgICAgICRsX3NlcnYgID0gdHJpbSggJHJvd1snc2Vydmljb3MnXSAgICA/PyAnJyApOwogICAgICAgICAgICAkbF9wcmVzICA9IHRyaW0oICRyb3dbJ3ByZXN0YWRvciddICAgPz8gJycgKTsKICAgICAgICAgICAgJGxfY3VzdCAgPSB0cmltKCAkcm93WydjdXN0byddICAgICAgID8/ICcnICk7CiAgICAgICAgICAgIGlmICggJGxfYmxvYiApIHsKICAgICAgICAgICAgICAgICRscCA9IHZtMl9wYXJzZV9hZ2VuZGFfYmxvYiggJGxfYmxvYiApOwogICAgICAgICAgICAgICAgaWYgKCAhICRsX3RpcG8gKSAkbF90aXBvID0gJGxwWyd0aXBvJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGxfaG9tbiApICRsX2hvbW4gPSAkbHBbJ2hvbWVuYWdlYWRvJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGxfbG9jbCApICRsX2xvY2wgPSAkbHBbJ2xvY2FsJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGxfYWRkciApICRsX2FkZHIgPSAkbHBbJ2VuZGVyZWNvJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGxfYXNlcyApICRsX2FzZXMgPSAkbHBbJ2Fzc2Vzc29yJ107CiAgICAgICAgICAgICAgICBpZiAoICEgJGxfaG9yYSApICRsX2hvcmEgPSAkbHBbJ2hvcmFyaW8nXTsKICAgICAgICAgICAgICAgIGlmICggISAkbF9zZXJ2ICkgJGxfc2VydiA9ICRscFsnc2Vydmljb3MnXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbF90aXR1bG8gPSAkbF90aXBvID86ICggJGxfaG9tbiA/OiAnRXZlbnRvJyApOwogICAgICAgICAgICAkbGlzdF9ldmVudHNbXSA9IFsKICAgICAgICAgICAgICAgICdpZCcgICAgICAgICAgPT4gJ2w3XycgLiAoICRyb3dbJ3JvdyddID8/IHVuaXFpZCgpICksCiAgICAgICAgICAgICAgICAndHMnICAgICAgICAgID0+ICRsdHMsCiAgICAgICAgICAgICAgICAnZGF0ZV9mbXQnICAgID0+ICRyb3dbJ2RhdGFfZmVzdGEnXSwKICAgICAgICAgICAgICAgICdkYXknICAgICAgICAgPT4gaW50dmFsKCBkYXRlKCAnaicsICRsdHMgKSApLAogICAgICAgICAgICAgICAgJ21vbnRoJyAgICAgICA9PiBpbnR2YWwoIGRhdGUoICduJywgJGx0cyApICksCiAgICAgICAgICAgICAgICAneWVhcicgICAgICAgID0+IGludHZhbCggZGF0ZSggJ1knLCAkbHRzICkgKSwKICAgICAgICAgICAgICAgICd0aXR1bG8nICAgICAgPT4gJGxfdGl0dWxvLAogICAgICAgICAgICAgICAgJ3RpcG8nICAgICAgICA9PiAkbF90aXBvLAogICAgICAgICAgICAgICAgJ2hvbWVuYWdlYWRvJyA9PiAkbF9ob21uLAogICAgICAgICAgICAgICAgJ2xvY2FsJyAgICAgICA9PiAkbF9sb2NsLAogICAgICAgICAgICAgICAgJ2VuZGVyZWNvJyAgICA9PiAkbF9hZGRyLAogICAgICAgICAgICAgICAgJ2Fzc2Vzc29yJyAgICA9PiAkbF9hc2VzLAogICAgICAgICAgICAgICAgJ2hvcmFyaW8nICAgICA9PiAkbF9ob3JhLAogICAgICAgICAgICAgICAgJ3NlcnZpY29zJyAgICA9PiAkbF9zZXJ2LAogICAgICAgICAgICAgICAgJ2V2ZW50b19ibG9iJyA9PiAkbF9ibG9iLAogICAgICAgICAgICAgICAgJ3ByZXN0YWRvcicgICA9PiAkbF9wcmVzLAogICAgICAgICAgICAgICAgJ3Bob25lJyAgICAgICA9PiAkbF9waG9uZSwKICAgICAgICAgICAgICAgICd3YV9saW5rJyAgICAgPT4gJGxfcGhvbmUgPyAnaHR0cHM6Ly93YS5tZS8nIC4gJGxfcGhvbmUgOiAnIycsCiAgICAgICAgICAgICAgICAnY3VzdG8nICAgICAgID0+ICRsX2N1c3QsCiAgICAgICAgICAgICAgICAnZGF5c191bnRpbCcgID0+ICRsX2RheXMsCiAgICAgICAgICAgICAgICAnY29sb3InICAgICAgID0+ICcjNmU3NzgxJywKICAgICAgICAgICAgICAgICdjdXN0b21lcicgICAgPT4gJycsCiAgICAgICAgICAgICAgICAnc291cmNlJyAgICAgID0+ICdnc2hlZXRzJywKICAgICAgICAgICAgICAgICd3Y19vcmRlcl9pZCcgPT4gbnVsbCwKICAgICAgICAgICAgICAgICdhdHJhY29lcycgICAgPT4gJGxfc2VydiA/OiAkbF90aXR1bG8sCiAgICAgICAgICAgICAgICAnc2VhcmNoX3RleHQnID0+IG1iX3N0cnRvbG93ZXIoIGltcGxvZGUoICcgJywgWyAkbF90aXBvLCAkbF9ob21uLCAkbF9sb2NsLCAkbF9hc2VzLCAkbF9wcmVzLCAkbF9zZXJ2LCAkbF9ibG9iIF0gKSApLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgICAkbGlzdF9ldmVudHMgPSBhcnJheV92YWx1ZXMoIGFycmF5X3JldmVyc2UoICRsaXN0X2V2ZW50cyApICk7IC8vIG1haXMgcmVjZW50ZSBwcmltZWlybwogICAgfSBlbHNlaWYgKCAkZmlsdGVyID09PSAncGFzdCcgKSB7CiAgICAgICAgJGxpc3RfZXZlbnRzID0gYXJyYXlfdmFsdWVzKCBhcnJheV9yZXZlcnNlKCBhcnJheV9maWx0ZXIoICRldmVudHMsIGZuKCAkZSApID0+ICRlWyd0cyddIDwgJHRvZGF5X3RzICkgKSApOwogICAgfSBlbHNlIHsKICAgICAgICAkbGlzdF9ldmVudHMgPSBhcnJheV92YWx1ZXMoICRldmVudHMgKTsKICAgIH0KCiAgICAvLyBDYWxlbmRhciBtYXAKICAgICRjYWxfbWFwID0gW107CiAgICBmb3JlYWNoICggJGV2ZW50cyBhcyAkZSApIHsKICAgICAgICBpZiAoICRlWydtb250aCddID09PSAkbW9udGggJiYgJGVbJ3llYXInXSA9PT0gJHllYXIgKSB7CiAgICAgICAgICAgICRjYWxfbWFwWyAkZVsnZGF5J10gXVtdID0gJGU7CiAgICAgICAgfQogICAgfQoKICAgIC8vIFN0YXRzCiAgICAkdG90YWxfZXZlbnRzID0gY291bnQoICRldmVudHMgKTsKICAgICR0b2RheV9pc29fYWcgPSBjdXJyZW50X3RpbWUoICdZLW0tZCcgKTsKICAgICR0b2RheV9jbnQgICAgPSBjb3VudCggYXJyYXlfZmlsdGVyKCAkZXZlbnRzLCBmbiggJGUgKSA9PiBkYXRlKCAnWS1tLWQnLCAkZVsndHMnXSApID09PSAkdG9kYXlfaXNvX2FnICkgKTsKICAgICR1cGNvbWluZ19jbnQgPSBjb3VudCggYXJyYXlfZmlsdGVyKCAkZXZlbnRzLCBmbiggJGUgKSA9PiAkZVsndHMnXSA+PSAkdG9kYXlfdHMgKSApOwogICAgJHRoaXNfd2VlayAgICA9IGNvdW50KCBhcnJheV9maWx0ZXIoICRldmVudHMsIGZuKCAkZSApID0+ICRlWydkYXlzX3VudGlsJ10gPj0gMCAmJiAkZVsnZGF5c191bnRpbCddIDw9IDYgKSApOwogICAgJHBhc3RfY250ICAgICA9ICR0b3RhbF9ldmVudHMgLSAkdXBjb21pbmdfY250OwogICAgLy8gU2VtYW5hIEFudGVyaW9yOiB2ZW0gZGEgYWJhIFZFTkRBUyAoc2VtIGZpbHRybyksIHNpbmNyb25pemFkbyB2aWEgc3luYy1sYXN0NwogICAgJGxhc3Q3X2NudCA9IGNvdW50KCAoYXJyYXkpIGdldF9vcHRpb24oICd2bTJfYWdlbmRhX2xhc3Q3JywgW10gKSApOwoKICAgIC8vIOKUgOKUgCBCdXNjYSBpbnRlbGlnZW50ZTogdmFsb3JlcyDDum5pY29zIHBhcmEgZHJvcGRvd25zIOKUgOKUgAogICAgJGFsbF9hdHJhY29lc19zZXQgPSBbXTsKICAgICRhbGxfdGlwb3Nfc2V0ICAgID0gW107CiAgICBmb3JlYWNoICggJGV2ZW50cyBhcyAkZSApIHsKICAgICAgICBmb3JlYWNoICggZXhwbG9kZSggJywgJywgJGVbJ2F0cmFjb2VzJ10gKSBhcyAkYXQgKSB7CiAgICAgICAgICAgICRhdCA9IHRyaW0oICRhdCApOwogICAgICAgICAgICBpZiAoICRhdCAmJiAkYXQgIT09ICfigJQnICkgJGFsbF9hdHJhY29lc19zZXRbICRhdCBdID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkZVsndGlwbyddICYmICRlWyd0aXBvJ10gIT09ICfigJQnICkgJGFsbF90aXBvc19zZXRbICRlWyd0aXBvJ10gXSA9IHRydWU7CiAgICB9CiAgICBrc29ydCggJGFsbF9hdHJhY29lc19zZXQgKTsKICAgIGtzb3J0KCAkYWxsX3RpcG9zX3NldCApOwoKICAgICRsYXN0X3N5bmNfYWcgICAgICAgPSBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2xhc3Rfc3luYycsICcnKTsKICAgICRzeW5jX25vbmNlX2FnICAgICAgPSB3cF9jcmVhdGVfbm9uY2UoJ3ZtMl9hZ2VuZGFfc3luYycpOwogICAgJGFnX3dlYmhvb2tfc2V0ICAgICA9ICFlbXB0eShnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX3dlYmhvb2tfdXJsJywgJycpKTsKICAgICRhZ19zeW5jX3N0YXR1c191cmwgPSByZXN0X3VybCgndm0tY3JtLXYyL3YxL2FnZW5kYS9zeW5jLXN0YXR1cycpOwoKICAgICRtb250aF9uYW1lcyA9IFsgJycsICdKYW5laXJvJywgJ0ZldmVyZWlybycsICdNYXLDp28nLCAnQWJyaWwnLCAnTWFpbycsICdKdW5obycsICdKdWxobycsICdBZ29zdG8nLCAnU2V0ZW1icm8nLCAnT3V0dWJybycsICdOb3ZlbWJybycsICdEZXplbWJybycgXTsKICAgICRtb250aF9hYmJyICA9IFsgJycsICdKQU4nLCAnRkVWJywgJ01BUicsICdBQlInLCAnTUFJJywgJ0pVTicsICdKVUwnLCAnQUdPJywgJ1NFVCcsICdPVVQnLCAnTk9WJywgJ0RFWicgXTsKCiAgICA/PgogICAgPGRpdiBjbGFzcz0id3JhcCB2bTItYWdlbmRhLXdyYXAiPgogICAgPHN0eWxlPgogICAgLnZtMi1hZ2VuZGEtd3JhcHttYXgtd2lkdGg6MTIwMHB4fQogICAgLnZtMi1hZ2VuZGEtaGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbToxNnB4O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHh9CiAgICAudm0yLXZpZXctdG9nZ2xle2Rpc3BsYXk6ZmxleDtnYXA6NHB4O2JhY2tncm91bmQ6I2Y2ZjhmYTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjNweH0KICAgIC52bTItdmlldy1idG57cGFkZGluZzo2cHggMTRweDtib3JkZXItcmFkaXVzOjZweDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojNTc2MDZhO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMH0KICAgIC52bTItdmlldy1idG4uYWN0aXZle2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMWQyMzI3O2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjE1KX0KICAgIC52bTItYWcta3Bpe2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsMWZyKTtnYXA6MTJweDttYXJnaW4tYm90dG9tOjIwcHh9CiAgICBAbWVkaWEobWF4LXdpZHRoOjcwMHB4KXsudm0yLWFnLWtwaXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsMWZyKX19CiAgICAudm0yLWFnLWtwaS1jYXJke2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNHB4IDE2cHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjE1cyBlYXNlfQogICAgLnZtMi1hZy1rcGktY2FyZDpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtib3gtc2hhZG93OjAgNHB4IDE0cHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1jb2xvcjojMDA3M2FhfQogICAgLnZtMi1hZy1rcGktdmFse2ZvbnQtc2l6ZToyNnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWQyMzI3fQogICAgLnZtMi1hZy1rcGktbGJse2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NzYwNmE7bWFyZ2luLXRvcDoycHh9CiAgICAudm0yLWNhbHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW59CiAgICAudm0yLWNhbC1uYXZ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjE0cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTBlMGUwfQogICAgLnZtMi1jYWwtbmF2IGgze21hcmdpbjowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMH0KICAgIC52bTItY2FsLW5hdiBhe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMxZDIzMjc7cGFkZGluZzo0cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHh9CiAgICAudm0yLWNhbC1uYXYgYTpob3ZlcntiYWNrZ3JvdW5kOiNmNmY4ZmF9CiAgICAudm0yLWNhbC1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDcsMWZyKX0KICAgIC52bTItY2FsLWRvd3t0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjhweCAwO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTc2MDZhO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTBlMGUwO2JhY2tncm91bmQ6I2Y5ZjlmOX0KICAgIC52bTItY2FsLWNlbGx7bWluLWhlaWdodDo3MnB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2YwZjBmMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjBmMGYwO3BhZGRpbmc6NXB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzfQogICAgLnZtMi1jYWwtY2VsbDpob3ZlcntiYWNrZ3JvdW5kOiNmNmY4ZmF9CiAgICAudm0yLWNhbC1jZWxsOm50aC1jaGlsZCg3bil7Ym9yZGVyLXJpZ2h0Om5vbmV9CiAgICAudm0yLWNhbC1jZWxsLmVtcHR5e2JhY2tncm91bmQ6I2ZhZmFmYTtjdXJzb3I6ZGVmYXVsdH0KICAgIC8qIOKUgOKUgCBCb3TDo28gQ29udHJhdG8g4pSA4pSAICovCiAgICAudm0yLWV2LWNvbnRyYXRvLWJ0bntiYWNrZ3JvdW5kOiNmM2YwZmY7Ym9yZGVyOjFweCBzb2xpZCAjYTc4YmZhO2NvbG9yOiM2ZDI4ZDk7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo1cHggMTBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9CiAgICAudm0yLWV2LWNvbnRyYXRvLWJ0bjpob3ZlcntiYWNrZ3JvdW5kOiNlZGU5ZmV9CiAgICAvKiDilIDilIAgRHJhd2VyIENvbnRyYXRvIOKUgOKUgCAqLwogICAgLnZtMi1jdC1vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxMDAwMDE7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtZW5kO2p1c3RpZnktY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC40NSk7b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IC4yc30KICAgIC52bTItY3Qtb3ZlcmxheS5vcGVue29wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphbGx9CiAgICAudm0yLWN0LXBhbmVse2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE2cHggMTZweCAwIDA7d2lkdGg6MTAwJTttYXgtd2lkdGg6NTYwcHg7bWF4LWhlaWdodDo4OHZoO292ZXJmbG93LXk6YXV0bztwYWRkaW5nOjIwcHggMjBweCAzMnB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDQwcHgpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXM7Ym94LXNoYWRvdzowIC00cHggMzBweCByZ2JhKDAsMCwwLC4xOCl9CiAgICAudm0yLWN0LW92ZXJsYXkub3BlbiAudm0yLWN0LXBhbmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfQogICAgLnZtMi1jdC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjE2cHh9CiAgICAudm0yLWN0LXRpdGxle2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWQyMzI3fQogICAgLnZtMi1jdC1jbG9zZXtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjIycHg7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzU3NjA2YTtsaW5lLWhlaWdodDoxO3BhZGRpbmc6MnB4IDZweH0KICAgIC52bTItY3Qtc2VjdGlvbntmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi42cHg7Y29sb3I6IzdjM2FlZDttYXJnaW46MTJweCAwIDZweDtwYWRkaW5nLWxlZnQ6MnB4fQogICAgLnZtMi1jdC1yb3d7ZGlzcGxheTpmbGV4O2dhcDo4cHg7cGFkZGluZzo1cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjNmNGY2O2ZvbnQtc2l6ZToxM3B4fQogICAgLnZtMi1jdC1sYmx7bWluLXdpZHRoOjEyMHB4O2NvbG9yOiM1NzYwNmE7ZmxleC1zaHJpbms6MDtmb250LXNpemU6MTJweH0KICAgIC52bTItY3QtdmFse2NvbG9yOiMxZDIzMjc7Zm9udC13ZWlnaHQ6NTAwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0KICAgIC52bTItY3Qtc2Vwe2JvcmRlcjpub25lO2JvcmRlci10b3A6MnB4IHNvbGlkICNmM2Y0ZjY7bWFyZ2luOjE0cHggMCA2cHh9CiAgICAudm0yLWRyYWctY3R7d2lkdGg6NDBweDtoZWlnaHQ6NHB4O2JhY2tncm91bmQ6I2UwZTBlMDtib3JkZXItcmFkaXVzOjJweDttYXJnaW46MCBhdXRvIDE0cHh9CiAgICAudm0yLWNhbC1jZWxsLnRvZGF5IC52bTItY2FsLWRheXtiYWNrZ3JvdW5kOiMwOTY5ZGE7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MTJweH0KICAgIC52bTItY2FsLWRheXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzFkMjMyNzt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0KICAgIC52bTItY2FsLWRvdHt3aWR0aDo3cHg7aGVpZ2h0OjdweDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MXB4fQogICAgLnZtMi1jYWwtZG90c3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDozcHh9CiAgICAudm0yLWNhbC1tb3Jle2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiM1NzYwNmE7bWFyZ2luLXRvcDoycHh9CiAgICAudm0yLWZpbHRlci1iYXJ7ZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luLWJvdHRvbToxNnB4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcn0KICAgIC52bTItZmlsdGVyLWJ0bntwYWRkaW5nOjVweCAxMnB4O2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjIwcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzU3NjA2YTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9CiAgICAudm0yLWZpbHRlci1idG4uYWN0aXZle2JhY2tncm91bmQ6IzFkMjMyNztjb2xvcjojZmZmO2JvcmRlci1jb2xvcjojMWQyMzI3fQogICAgLnZtMi1ldmVudC1saXN0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0KICAgIC52bTItZXYtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1sZWZ0OjRweCBzb2xpZDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxNHB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym94LXNoYWRvdyAuMTVzO2ZsZXgtd3JhcDp3cmFwfQogICAgLnZtMi1ldi1jYXJkOmhvdmVye2JveC1zaGFkb3c6MCAycHggOHB4IHJnYmEoMCwwLDAsLjEpfQogICAgLnZtMi1ldi1kYXRlYm94e21pbi13aWR0aDo0OHB4O3RleHQtYWxpZ246Y2VudGVyfQogICAgLnZtMi1ldi1kYXl7Zm9udC1zaXplOjIycHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxZDIzMjc7bGluZS1oZWlnaHQ6MX0KICAgIC52bTItZXYtbW9ue2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiM1NzYwNmE7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfQogICAgLnZtMi1ldi1pbmZve2ZsZXg6MTttaW4td2lkdGg6MTUwcHh9CiAgICAudm0yLWV2LW5hbWV7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiMxZDIzMjd9CiAgICAudm0yLWV2LW1ldGF7Zm9udC1zaXplOjEycHg7Y29sb3I6IzU3NjA2YTttYXJnaW4tdG9wOjJweH0KICAgIC52bTItZXYtYmFkZ2V7Zm9udC1zaXplOjExcHg7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7d2hpdGUtc3BhY2U6bm93cmFwfQogICAgLnZtMi1ldi1hY3RzIGF7Zm9udC1zaXplOjE4cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWFyZ2luLWxlZnQ6NHB4fQogICAgLnZtMi1ldi1jbGllbnRlLXJvd3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDo2cHg7cGFkZGluZy10b3A6NnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNmMGYwZjA7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3h9CiAgICAudm0yLWV2LWNsaWVudGUtbm9tZXtmb250LXNpemU6MTJweDtjb2xvcjojNDQ0O2ZvbnQtd2VpZ2h0OjUwMDtmbGV4OjE7bWluLXdpZHRoOjA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfQogICAgLnZtMi1ldi13YS1idG57ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweDtiYWNrZ3JvdW5kOiMyNWQzNjY7Y29sb3I6I2ZmZiFpbXBvcnRhbnQ7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6NXB4IDEycHg7Ym9yZGVyLXJhZGl1czoyMHB4O3RleHQtZGVjb3JhdGlvbjpub25lIWltcG9ydGFudDt3aGl0ZS1zcGFjZTpub3dyYXB9CiAgICAudm0yLWV2LXdhLWJ0bjpob3ZlcntiYWNrZ3JvdW5kOiMxMjhjN2V9CiAgICAudm0yLXRpbWUtdGFne2JhY2tncm91bmQ6I2U4ZjRmZDtjb2xvcjojMWE2ZmE4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlcjoxcHggc29saWQgI2I4ZDlmMDtkaXNwbGF5OmlubGluZS1ibG9ja30KICAgIC52bTItbW9kYWwtY2xpZW50ZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsI2YwZjlmZiwjZThmNGZkKTtib3JkZXI6MXB4IHNvbGlkICNiZmRiZmU7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTRweCAxNnB4O21hcmdpbi1ib3R0b206MTJweDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxMHB4fQogICAgLnZtMi1tb2RhbC1jbGllbnRlLW5vbWV7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxZDIzMjd9CiAgICAudm0yLW1vZGFsLW92ZXJsYXl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC40KTt6LWluZGV4Ojk5OTk5fQogICAgLnZtMi1tb2RhbC1vdmVybGF5Lm9wZW57ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfQogICAgLnZtMi1tb2RhbC1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7d2lkdGg6bWluKDQ4MHB4LDk1dncpO2hlaWdodDoxMDB2aDtvdmVyZmxvdy15OmF1dG87cGFkZGluZzoyNHB4O2FuaW1hdGlvbjp2bTJTbGlkZUluIC4ycyBlYXNlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0KICAgIEBrZXlmcmFtZXMgdm0yU2xpZGVJbntmcm9te3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX0KICAgIC52bTItbW9kYWwtY2xvc2V7ZmxvYXQ6cmlnaHQ7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2ZvbnQtc2l6ZToyMHB4O2N1cnNvcjpwb2ludGVyO2NvbG9yOiM1NzYwNmE7cGFkZGluZzowfQogICAgLnZtMi1tb2RhbC10aXRsZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7bWFyZ2luOjAgMCAxNnB4O3BhZGRpbmctcmlnaHQ6MzBweH0KICAgIC52bTItbW9kYWwtcm93e2Rpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi1ib3R0b206OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9CiAgICAudm0yLW1vZGFsLWxibHtmb250LXNpemU6MTJweDtjb2xvcjojNTc2MDZhO21pbi13aWR0aDoxMTBweDtmb250LXdlaWdodDo2MDA7cGFkZGluZy10b3A6MXB4fQogICAgLnZtMi1tb2RhbC12YWx7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzFkMjMyNztmbGV4OjF9CiAgICAudm0yLW1vZGFsLWhye2JvcmRlcjpub25lO2JvcmRlci10b3A6MXB4IHNvbGlkICNlMGUwZTA7bWFyZ2luOjE0cHggMH0KICAgIC52bTItbW9kYWwtYWN0c3tkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcH0KICAgIC52bTItbWJ0bntwYWRkaW5nOjhweCAxNHB4O2JvcmRlci1yYWRpdXM6NnB4O3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMDtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Y29sb3I6IzFkMjMyN30KICAgIC52bTItbWJ0bi5ibHVle2JhY2tncm91bmQ6IzA5NjlkYTtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjojMDk2OWRhfQogICAgLnZtMi1tYnRuLmdyZWVue2JhY2tncm91bmQ6IzFhN2YzNztjb2xvcjojZmZmO2JvcmRlci1jb2xvcjojMWE3ZjM3fQogICAgLnZtMi1kcmFnLWhhbmRsZXtkaXNwbGF5Om5vbmU7d2lkdGg6MzZweDtoZWlnaHQ6NHB4O2JhY2tncm91bmQ6I2RkZDtib3JkZXItcmFkaXVzOjJweDttYXJnaW46MCBhdXRvIDE0cHh9CiAgICAudm0yLW1vZGFsLXZhbHt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9CiAgICAudm0yLWJsb2Itcm93e21hcmdpbi1ib3R0b206NHB4fQogICAgLnZtMi1ibG9iLWxibHtmb250LXNpemU6MTBweDtjb2xvcjojNTc2MDZhO2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjNweDtkaXNwbGF5OmJsb2NrfQogICAgLnZtMi1ibG9iLXZhbHtmb250LXNpemU6MTNweDtjb2xvcjojMWQyMzI3fQogICAgQGtleWZyYW1lcyB2bTJTbGlkZVVwe2Zyb217dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fQogICAgQG1lZGlhKG1heC13aWR0aDo2NDBweCl7CiAgICAgICAgLnZtMi1kcmFnLWhhbmRsZXtkaXNwbGF5OmJsb2NrfQogICAgICAgIC52bTItbW9kYWwtb3ZlcmxheS5vcGVue2FsaWduLWl0ZW1zOmZsZXgtZW5kO2p1c3RpZnktY29udGVudDpjZW50ZXJ9CiAgICAgICAgLnZtMi1tb2RhbC1wYW5lbHt3aWR0aDoxMDB2dyFpbXBvcnRhbnQ7bWF4LXdpZHRoOjEwMHZ3IWltcG9ydGFudDtoZWlnaHQ6OTBzdmg7Ym9yZGVyLXJhZGl1czoxNnB4IDE2cHggMCAwO3BhZGRpbmc6MTZweCAxNHB4IDI4cHghaW1wb3J0YW50O2FuaW1hdGlvbjp2bTJTbGlkZVVwIC4yNXMgZWFzZX0KICAgICAgICAudm0yLW1vZGFsLXRpdGxle2ZvbnQtc2l6ZToxNXB4O21hcmdpbi1ib3R0b206MTBweH0KICAgICAgICAudm0yLW1vZGFsLXJvd3tmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjFweDttYXJnaW4tYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YwZjBmMDtwYWRkaW5nLWJvdHRvbTo4cHh9CiAgICAgICAgLnZtMi1tb2RhbC1sYmx7bWluLXdpZHRoOnVuc2V0IWltcG9ydGFudDtmb250LXNpemU6MTBweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjNweDtjb2xvcjojOGI5NDllfQogICAgICAgIC52bTItZXYtaW5mb3tvdmVyZmxvdzpoaWRkZW47bWluLXdpZHRoOjA7ZmxleDoxfQogICAgICAgIC52bTItZXYtbmFtZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9CiAgICAgICAgLnZtMi1ldi1tZXRhIC52bTItbWV0YS1saW5le2Rpc3BsYXk6YmxvY2t9CiAgICAgICAgLnZtMi1ldi1hY3Rze3dpZHRoOjEwMCU7bWFyZ2luLXRvcDo2cHh9CiAgICAgICAgLnZtMi1hZy1rcGl7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLDFmcikhaW1wb3J0YW50fQogICAgICAgIC52bTItZmlsdGVyLWJhcntnYXA6NHB4fQogICAgICAgIC52bTItZmlsdGVyLWJ0bntmb250LXNpemU6MTFweDtwYWRkaW5nOjRweCAxMHB4fQogICAgfQogICAgLnZtMi1zZWFyY2gtYmFye2Rpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi1ib3R0b206MTJweDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXJ9CiAgICAudm0yLXNlYXJjaC1iYXIgaW5wdXRbdHlwZT10ZXh0XXtmbGV4OjE7bWluLXdpZHRoOjIwMHB4O3BhZGRpbmc6N3B4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTNweDtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZDojZmZmfQogICAgLnZtMi1zZWFyY2gtYmFyIGlucHV0W3R5cGU9dGV4dF06Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMDczYWE7Ym94LXNoYWRvdzowIDAgMCAycHggcmdiYSgwLDExNSwxNzAsLjIpfQogICAgLnZtMi1zZWFyY2gtYmFyIHNlbGVjdHtwYWRkaW5nOjZweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzU3NjA2YTtiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXI7bWF4LXdpZHRoOjIwMHB4fQogICAgLnZtMi1zZWFyY2gtYmFyIC52bTItY2xyLWJ0bntwYWRkaW5nOjVweCAxMnB4O2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjIwcHg7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM1NzYwNmE7Zm9udC1zaXplOjEycHg7Y3Vyc29yOnBvaW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfQogICAgLnZtMi1zZWFyY2gtYmFyIC52bTItY2xyLWJ0bjpob3ZlcntiYWNrZ3JvdW5kOiNmNmY4ZmF9CiAgICAjdm0yQWdDb3VudHtmb250LXNpemU6MTJweDtjb2xvcjojNTc2MDZhO21hcmdpbi1sZWZ0OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ2bTItYWdlbmRhLWhlYWRlciI+CiAgICAgICAgPGgxIHN0eWxlPSJtYXJnaW46MCI+8J+ThSBBZ2VuZGEgZGUgRXZlbnRvczwvaDE+CiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtmbGV4LXdyYXA6d3JhcCI+CiAgICAgICAgICAgIDw/cGhwIGlmICgkYWdfd2ViaG9va19zZXQpOiA/PgogICAgICAgICAgICA8YnV0dG9uIGlkPSJ2bTJBZ1N5bmNCdG4iIG9uY2xpY2s9InZtMkFnU3luYygpIiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1zZWNvbmRhcnkiIHN0eWxlPSJmb250LXNpemU6MTNweCI+8J+UhCBTaW5jcm9uaXphciBQbGFuaWxoYTwvYnV0dG9uPgogICAgICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoYWRtaW5fdXJsKCdhZG1pbi5waHA/cGFnZT12bTItc2V0dGluZ3MjYWdlbmRhLXdlYmhvb2snKSk7ID8+IiBjbGFzcz0iYnV0dG9uIiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6I2QxMjQyZjtib3JkZXItY29sb3I6I2ZjYTVhNSI+4pqZ77iPIENvbmZpZ3VyYXIgV2ViaG9vazwvYT4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDw/cGhwIGlmICgkbGFzdF9zeW5jX2FnKTogPz4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NzYwNmEiPlN5bmM6IDw/cGhwIGVjaG8gZXNjX2h0bWwodm0yX2xvY2FsX2RhdGUoJ2QvbSBIOmknLCAkbGFzdF9zeW5jX2FnKSk7ID8+PC9zcGFuPgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPD9waHAgaWYgKCRkYXRhX3NvdXJjZSA9PT0gJ2dzaGVldHMnKTogPz4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiMwNTk2Njk7YmFja2dyb3VuZDojZWNmZGY1O3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEycHgiPvCfk4ogR1NoZWV0czwvc3Bhbj4KICAgICAgICAgICAgPD9waHAgZWxzZTogPz4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM1NzYwNmE7YmFja2dyb3VuZDojZjZmOGZhO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEycHgiPldvb0NvbW1lcmNlPC9zcGFuPgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItdmlldy10b2dnbGUiPgogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoICRsaXN0X3VybCApOyA/PiIgICAgY2xhc3M9InZtMi12aWV3LWJ0biA8P3BocCBlY2hvICR2aWV3ID09PSAnbGlzdCcgICAgID8gJ2FjdGl2ZScgOiAnJzsgPz4iPuKJoSBMaXN0YTwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCAkY2FsX3VybCApOyA/PiIgICAgY2xhc3M9InZtMi12aWV3LWJ0biA8P3BocCBlY2hvICR2aWV3ID09PSAnY2FsZW5kYXInICA/ICdhY3RpdmUnIDogJyc7ID8+Ij7iip4gQ2FsZW5kw6FyaW88L2E+CiAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCggJGFsZXJ0c191cmwgKTsgPz4iIGNsYXNzPSJ2bTItdmlldy1idG4gPD9waHAgZWNobyAkdmlldyA9PT0gJ2FsZXJ0YXMnICAgPyAnYWN0aXZlJyA6ICcnOyA/PiI+8J+UlCBBbGVydGFzPC9hPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idm0yLWFnLWtwaSI+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWFnLWtwaS1jYXJkIiBvbmNsaWNrPSJsb2NhdGlvbi5ocmVmPSc/cGFnZT12bTItYWdlbmRhJmZpbHRlcj10b2RheSciIHN0eWxlPSI8P3BocCBlY2hvICR0b2RheV9jbnQgPiAwID8gJ2JvcmRlci1jb2xvcjojN2MzYWVkO2JhY2tncm91bmQ6I2Y1ZjNmZicgOiAnJzsgPz4iPjxkaXYgY2xhc3M9InZtMi1hZy1rcGktdmFsIiBzdHlsZT0iY29sb3I6IzdjM2FlZCI+PD9waHAgZWNobyAkdG9kYXlfY250OyA/PjwvZGl2PjxkaXYgY2xhc3M9InZtMi1hZy1rcGktbGJsIj7wn5S0IEhvamU8L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItYWcta3BpLWNhcmQiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9Jz9wYWdlPXZtMi1hZ2VuZGEmZmlsdGVyPWFsbCciPjxkaXYgY2xhc3M9InZtMi1hZy1rcGktdmFsIj48P3BocCBlY2hvICR0b3RhbF9ldmVudHM7ID8+PC9kaXY+PGRpdiBjbGFzcz0idm0yLWFnLWtwaS1sYmwiPlRvdGFsIGRlIEV2ZW50b3M8L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItYWcta3BpLWNhcmQiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9Jz9wYWdlPXZtMi1hZ2VuZGEmZmlsdGVyPXVwY29taW5nJyI+PGRpdiBjbGFzcz0idm0yLWFnLWtwaS12YWwiIHN0eWxlPSJjb2xvcjojMWE3ZjM3Ij48P3BocCBlY2hvICR1cGNvbWluZ19jbnQ7ID8+PC9kaXY+PGRpdiBjbGFzcz0idm0yLWFnLWtwaS1sYmwiPlByw7N4aW1vcyBFdmVudG9zPC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWFnLWtwaS1jYXJkIiBvbmNsaWNrPSJsb2NhdGlvbi5ocmVmPSc/cGFnZT12bTItYWdlbmRhJmZpbHRlcj13ZWVrJyI+PGRpdiBjbGFzcz0idm0yLWFnLWtwaS12YWwiIHN0eWxlPSJjb2xvcjojZDEyNDJmIj48P3BocCBlY2hvICR0aGlzX3dlZWs7ID8+PC9kaXY+PGRpdiBjbGFzcz0idm0yLWFnLWtwaS1sYmwiPkVzdGEgU2VtYW5hPC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWFnLWtwaS1jYXJkIiBvbmNsaWNrPSJsb2NhdGlvbi5ocmVmPSc/cGFnZT12bTItYWdlbmRhJmZpbHRlcj1wYXN0JyI+PGRpdiBjbGFzcz0idm0yLWFnLWtwaS12YWwiIHN0eWxlPSJjb2xvcjojNTc2MDZhIj48P3BocCBlY2hvICRwYXN0X2NudDsgPz48L2Rpdj48ZGl2IGNsYXNzPSJ2bTItYWcta3BpLWxibCI+UmVhbGl6YWRvczwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1hZy1rcGktY2FyZCIgb25jbGljaz0ibG9jYXRpb24uaHJlZj0nP3BhZ2U9dm0yLWFnZW5kYSZ2aWV3PWxpc3QmZmlsdGVyPWxhc3Q3JyI+PGRpdiBjbGFzcz0idm0yLWFnLWtwaS12YWwiIHN0eWxlPSJjb2xvcjojNmY0MmMxIj48P3BocCBlY2hvICRsYXN0N19jbnQ7ID8+PC9kaXY+PGRpdiBjbGFzcz0idm0yLWFnLWtwaS1sYmwiPlNlbWFuYSBBbnRlcmlvcjwvZGl2PjwvZGl2PgogICAgPC9kaXY+CgogICAgPD9waHAgaWYgKCAkdmlldyA9PT0gJ2NhbGVuZGFyJyApOiA/PgogICAgPGRpdiBjbGFzcz0idm0yLWNhbCI+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWNhbC1uYXYiPgogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoICRwcmV2X3VybCApOyA/PiI+4oaQIDw/cGhwIGVjaG8gZXNjX2h0bWwoICRtb250aF9uYW1lc1sgJHByZXZfbSBdICk7ID8+PC9hPgogICAgICAgICAgICA8aDM+PD9waHAgZWNobyBlc2NfaHRtbCggJG1vbnRoX25hbWVzWyAkbW9udGggXSAuICcgJyAuICR5ZWFyICk7ID8+PC9oMz4KICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCAkbmV4dF91cmwgKTsgPz4iPjw/cGhwIGVjaG8gZXNjX2h0bWwoICRtb250aF9uYW1lc1sgJG5leHRfbSBdICk7ID8+IOKGkjwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY2FsLWdyaWQiPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICBmb3JlYWNoICggWyAnRG9tJywnU2VnJywnVGVyJywnUXVhJywnUXVpJywnU2V4JywnU8OhYicgXSBhcyAkZCApIHsKICAgICAgICAgICAgICAgIGVjaG8gIjxkaXYgY2xhc3M9J3ZtMi1jYWwtZG93Jz4iIC4gZXNjX2h0bWwoICRkICkgLiAiPC9kaXY+IjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZmlyc3RfZG93ICAgICA9IGludHZhbCggZGF0ZSggJ3cnLCBta3RpbWUoIDAsIDAsIDAsICRtb250aCwgMSwgJHllYXIgKSApICk7CiAgICAgICAgICAgICRkYXlzX2luX21vbnRoID0gaW50dmFsKCBkYXRlKCAndCcsIG1rdGltZSggMCwgMCwgMCwgJG1vbnRoLCAxLCAkeWVhciApICkgKTsKICAgICAgICAgICAgJHRvZGF5X2RheSAgICAgPSAoIGludHZhbCggd3BfZGF0ZSgnbicpICkgPT09ICRtb250aCAmJiBpbnR2YWwoIHdwX2RhdGUoJ1knKSApID09PSAkeWVhciApID8gaW50dmFsKCB3cF9kYXRlKCdqJykgKSA6IC0xOwoKICAgICAgICAgICAgZm9yICggJGkgPSAwOyAkaSA8ICRmaXJzdF9kb3c7ICRpKysgKSB7CiAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPSd2bTItY2FsLWNlbGwgZW1wdHknPjwvZGl2PiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yICggJGQgPSAxOyAkZCA8PSAkZGF5c19pbl9tb250aDsgJGQrKyApIHsKICAgICAgICAgICAgICAgICRpc190b2RheSAgID0gKCAkZCA9PT0gJHRvZGF5X2RheSApID8gJyB0b2RheScgOiAnJzsKICAgICAgICAgICAgICAgICRkYXlfZXZlbnRzID0gJGNhbF9tYXBbICRkIF0gPz8gW107CiAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPSd2bTItY2FsLWNlbGwkaXNfdG9kYXknIG9uY2xpY2s9J3ZtMkNhbERheSh0aGlzKSc+IjsKICAgICAgICAgICAgICAgIGVjaG8gIjxkaXYgY2xhc3M9J3ZtMi1jYWwtZGF5Jz4kZDwvZGl2PiI7CiAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPSd2bTItY2FsLWRvdHMnPiI7CiAgICAgICAgICAgICAgICBmb3JlYWNoICggYXJyYXlfc2xpY2UoICRkYXlfZXZlbnRzLCAwLCA1ICkgYXMgJGV2ICkgewogICAgICAgICAgICAgICAgICAgICRjID0gZXNjX2F0dHIoICRldlsnY29sb3InXSApOwogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxzcGFuIGNsYXNzPSd2bTItY2FsLWRvdCcgc3R5bGU9J2JhY2tncm91bmQ6JGMnPjwvc3Bhbj4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWNobyAiPC9kaXY+IjsKICAgICAgICAgICAgICAgICRjbnQgPSBjb3VudCggJGRheV9ldmVudHMgKTsKICAgICAgICAgICAgICAgIGlmICggJGNudCA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPGRpdiBjbGFzcz0ndm0yLWNhbC1tb3JlJz57JGNudH0gZXZlbnRvIiAuICggJGNudCA+IDEgPyAncycgOiAnJyApIC4gIjwvZGl2PiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3JlYWNoICggJGRheV9ldmVudHMgYXMgJGV2ICkgewogICAgICAgICAgICAgICAgICAgICRlZGF0YSA9IGVzY19hdHRyKCBqc29uX2VuY29kZSggJGV2LCBKU09OX1VORVNDQVBFRF9VTklDT0RFICkgKTsKICAgICAgICAgICAgICAgICAgICBlY2hvICI8c3BhbiBjbGFzcz0ndm0yYWdldicgZGF0YS1ldmVudD0nJGVkYXRhJyBzdHlsZT0nZGlzcGxheTpub25lJz48L3NwYW4+IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgPz4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4O2Rpc3BsYXk6ZmxleDtnYXA6MTZweDtmbGV4LXdyYXA6d3JhcDtmb250LXNpemU6MTJweDtjb2xvcjojNTc2MDZhIj4KICAgICAgICA8c3Bhbj48c3BhbiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiNkMTI0MmY7bWFyZ2luLXJpZ2h0OjRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiPjwvc3Bhbj5Fc3RhIHNlbWFuYTwvc3Bhbj4KICAgICAgICA8c3Bhbj48c3BhbiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiNlMTZmMjQ7bWFyZ2luLXJpZ2h0OjRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiPjwvc3Bhbj5QcsOzeGltbyBtw6pzPC9zcGFuPgogICAgICAgIDxzcGFuPjxzcGFuIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6IzlhNjcwMDttYXJnaW4tcmlnaHQ6NHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZSI+PC9zcGFuPjMgbWVzZXM8L3NwYW4+CiAgICAgICAgPHNwYW4+PHNwYW4gc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojMWE3ZjM3O21hcmdpbi1yaWdodDo0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlIj48L3NwYW4+RnV0dXJvPC9zcGFuPgogICAgICAgIDxzcGFuPjxzcGFuIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6IzZlNzc4MTttYXJnaW4tcmlnaHQ6NHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZSI+PC9zcGFuPlJlYWxpemFkbzwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDw/cGhwIGVsc2U6ID8+CiAgICA8P3BocCBpZiAoICR2aWV3ICE9PSAnY2FsZW5kYXInICk6ID8+CiAgICA8ZGl2IGNsYXNzPSJ2bTItc2VhcmNoLWJhciI+CiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ2bTJBZ1NlYXJjaCIgcGxhY2Vob2xkZXI9IvCflI0gQnVzY2FyIHRpcG8sIGhvbWVuYWdlYWRvLCBsb2NhbCwgcHJlc3RhZG9yLCBhc3Nlc3Nvci4uLiIgb25pbnB1dD0idm0yRmlsdGVyQWdlbmRhKCkiIHN0eWxlPSJmbGV4OjE7bWluLXdpZHRoOjAiPgogICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1jbHItYnRuIiBvbmNsaWNrPSJ2bTJDbGVhclNlYXJjaCgpIj7inJU8L2J1dHRvbj4KICAgICAgICA8c3BhbiBpZD0idm0yQWdDb3VudCI+PD9waHAgZWNobyBjb3VudCggJGxpc3RfZXZlbnRzICk7ID8+IGV2ZW50b3M8L3NwYW4+CiAgICA8L2Rpdj4KICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgIDxkaXYgY2xhc3M9InZtMi1maWx0ZXItYmFyIj4KICAgICAgICA8P3BocAogICAgICAgICRmaWx0ZXJzID0gWyAndG9kYXknID0+ICfwn5S0IEhvamUnLCAndXBjb21pbmcnID0+ICfwn5OFIFByw7N4aW1vcycsICd3ZWVrJyA9PiAn8J+ThiBFc3RhIFNlbWFuYScsICdsYXN0NycgPT4gJ+KPru+4jyBTZW0uIEFudGVyaW9yJywgJ3Bhc3QnID0+ICfinJMgUmVhbGl6YWRvcycsICdhbGwnID0+ICfiip4gVG9kb3MnIF07CiAgICAgICAgZm9yZWFjaCAoICRmaWx0ZXJzIGFzICRmayA9PiAkZmwgKSB7CiAgICAgICAgICAgICRmdSAgPSBhZGRfcXVlcnlfYXJnKCBbICdwYWdlJyA9PiAndm0yLWFnZW5kYScsICd2aWV3JyA9PiAnbGlzdCcsICdmaWx0ZXInID0+ICRmayBdLCAkYmFzZSApOwogICAgICAgICAgICAkY2xzID0gKCAkZmlsdGVyID09PSAkZmsgKSA/ICdhY3RpdmUnIDogJyc7CiAgICAgICAgICAgIGVjaG8gIjxhIGhyZWY9JyIgLiBlc2NfdXJsKCAkZnUgKSAuICInIGNsYXNzPSd2bTItZmlsdGVyLWJ0biAkY2xzJz4iIC4gZXNjX2h0bWwoICRmbCApIC4gIjwvYT4iOwogICAgICAgIH0KICAgICAgICBlY2hvICI8c3BhbiBzdHlsZT0nbWFyZ2luLWxlZnQ6YXV0bztmb250LXNpemU6MTJweDtjb2xvcjojNTc2MDZhJz4iIC4gY291bnQoICRsaXN0X2V2ZW50cyApIC4gIiBldmVudG9zPC9zcGFuPiI7CiAgICAgICAgPz4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0idm0yLWV2ZW50LWxpc3QiPgogICAgPD9waHAKICAgICRkYXlzX3B0X2FnID0gWydTdW5kYXknPT4nRG9taW5nbycsJ01vbmRheSc9PidTZWd1bmRhJywnVHVlc2RheSc9PidUZXLDp2EnLCdXZWRuZXNkYXknPT4nUXVhcnRhJywnVGh1cnNkYXknPT4nUXVpbnRhJywnRnJpZGF5Jz0+J1NleHRhJywnU2F0dXJkYXknPT4nU8OhYmFkbyddOwogICAgZm9yZWFjaCAoICRsaXN0X2V2ZW50cyBhcyAkZSApOgogICAgICAgICRldl9kYXkgID0gZGF0ZSggJ2QnLCAkZVsndHMnXSApOwogICAgICAgICRldl9tb24gID0gJG1vbnRoX2FiYnJbIGludHZhbCggZGF0ZSggJ24nLCAkZVsndHMnXSApICkgXTsKICAgICAgICAkZXZfZG93ICA9ICRkYXlzX3B0X2FnWyBkYXRlKCAnbCcsICRlWyd0cyddICkgXSA/PyAnJzsKICAgICAgICAkZHUgICAgICA9ICRlWydkYXlzX3VudGlsJ107CiAgICAgICAgaWYgKCAkZHUgPCAwICkgICAgICAgJGJhZGdlID0gJ1JlYWxpemFkbyc7CiAgICAgICAgZWxzZWlmICggJGR1ID09PSAwICkgJGJhZGdlID0gJ0hPSkUg8J+UtCc7CiAgICAgICAgZWxzZWlmICggJGR1ID09PSAxICkgJGJhZGdlID0gJ0FtYW5ow6MnOwogICAgICAgIGVsc2VpZiAoICRkdSA8PSAzMCApICRiYWRnZSA9ICRkdSAuICcgZGlhcyc7CiAgICAgICAgZWxzZWlmICggJGR1IDw9IDkwICkgJGJhZGdlID0gY2VpbCggJGR1IC8gNyApIC4gJyBzZW0nOwogICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICRiYWRnZSA9IGNlaWwoICRkdSAvIDMwICkgLiAnIG1lc2VzJzsKICAgICAgICAkZWRhdGEgPSBlc2NfYXR0cigganNvbl9lbmNvZGUoICRlLCBKU09OX1VORVNDQVBFRF9VTklDT0RFICkgKTsKICAgID8+CiAgICA8P3BocAogICAgJHZtMl9zZWFyY2hfdHh0ID0gJGVbJ3NlYXJjaF90ZXh0J10gPz8gbWJfc3RydG9sb3dlciggJGVbJ3RpdHVsbyddIC4gJyAnIC4gJGVbJ3ByZXN0YWRvciddICk7CiAgICAkdm0yX3RpcG9fY2FyZCAgPSAoJGVbJ3RpcG8nXSAmJiAkZVsndGlwbyddICE9PSAn4oCUJykgPyAkZVsndGlwbyddIDogKCRlWyd0aXR1bG8nXSA/PyAnJyk7CiAgICBpZiAoIG1iX3N0cmxlbigkdm0yX3RpcG9fY2FyZCkgPiA0MCApICR2bTJfdGlwb19jYXJkID0gbWJfc3Vic3RyKCR2bTJfdGlwb19jYXJkLCAwLCA0MCkgLiAn4oCmJzsKICAgICR2bTJfaG9tZW5fY2FyZCA9ICRlWydob21lbmFnZWFkbyddID8/ICcnOwogICAgaWYgKCBtYl9zdHJsZW4oJHZtMl9ob21lbl9jYXJkKSA+IDM1ICkgJHZtMl9ob21lbl9jYXJkID0gbWJfc3Vic3RyKCR2bTJfaG9tZW5fY2FyZCwgMCwgMzUpIC4gJ+KApic7CiAgICAvLyBVc2EgbG9jYWw7IHNlIHZhemlvLCB1c2EgZW5kZXJlw6dvIGNvbW8gZmFsbGJhY2sKICAgICR2bTJfbG9jYWxfY2FyZCA9ICgkZVsnbG9jYWwnXSA/PyAnJykgPzogKCRlWydlbmRlcmVjbyddID8/ICcnKTsKICAgIGlmICggbWJfc3RybGVuKCR2bTJfbG9jYWxfY2FyZCkgPiA0MCApICR2bTJfbG9jYWxfY2FyZCA9IG1iX3N1YnN0cigkdm0yX2xvY2FsX2NhcmQsIDAsIDQwKSAuICfigKYnOwogICAgJHZtMl9hc3Nlc3Nvcl9jYXJkID0gKCRlWydhc3Nlc3NvciddID8/ICcnKTsKICAgIGlmICggbWJfc3RybGVuKCR2bTJfYXNzZXNzb3JfY2FyZCkgPiAzMCApICR2bTJfYXNzZXNzb3JfY2FyZCA9IG1iX3N1YnN0cigkdm0yX2Fzc2Vzc29yX2NhcmQsIDAsIDMwKSAuICfigKYnOwogICAgJHZtMl9ob3JhcmlvX2NhcmQgID0gdHJpbSgkZVsnaG9yYXJpbyddID8/ICcnKTsKICAgICR2bTJfY2xpZW50ZV9jYXJkICA9IHRyaW0oJGVbJ2N1c3RvbWVyJ10gPz8gJycpOwogICAgPz4KICAgIDxkaXYgY2xhc3M9InZtMi1ldi1jYXJkIiBzdHlsZT0iYm9yZGVyLWxlZnQtY29sb3I6PD9waHAgZWNobyBlc2NfYXR0cigkZVsnY29sb3InXSk7ID8+IgogICAgICAgICBkYXRhLXNlYXJjaD0iPD9waHAgZWNobyBlc2NfYXR0ciggJHZtMl9zZWFyY2hfdHh0ICk7ID8+IgogICAgICAgICBkYXRhLWV2PSc8P3BocCBlY2hvICRlZGF0YTsgPz4nCiAgICAgICAgIG9uY2xpY2s9J3ZtMk9wZW5Nb2RhbChKU09OLnBhcnNlKHRoaXMuZGF0YXNldC5ldikpJz4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZXYtZGF0ZWJveCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1ldi1kYXkiPjw/cGhwIGVjaG8gJGV2X2RheTsgPz48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLWV2LW1vbiI+PD9waHAgZWNobyAkZXZfbW9uOyA/PjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1ldi1pbmZvIj4KICAgICAgICAgICAgPD9waHAgaWYgKCR2bTJfdGlwb19jYXJkKTogPz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLWV2LW5hbWUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHZtMl90aXBvX2NhcmQpOyA/PjwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPD9waHAgaWYgKCR2bTJfaG9tZW5fY2FyZCk6ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1ldi1tZXRhIiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6IzQ0NDtmb250LXdlaWdodDo1MDAiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHZtMl9ob21lbl9jYXJkKTsgPz48L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1ldi1tZXRhIj7wn46kIDw/cGhwIGVjaG8gJGVbJ3ByZXN0YWRvciddID8gZXNjX2h0bWwoJGVbJ3ByZXN0YWRvciddKSA6ICc8c3BhbiBzdHlsZT0iY29sb3I6I2JiYjtmb250LXN0eWxlOml0YWxpYyI+c2VtIHByZXN0YWRvcjwvc3Bhbj4nOyA/PjwvZGl2PgogICAgICAgICAgICA8P3BocCBpZiAoJHZtMl9hc3Nlc3Nvcl9jYXJkICYmICR2bTJfYXNzZXNzb3JfY2FyZCAhPT0gJGVbJ3ByZXN0YWRvciddKTogPz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLWV2LW1ldGEiIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNTc2MDZhIj7wn6eR4oCN8J+SvCA8P3BocCBlY2hvIGVzY19odG1sKCR2bTJfYXNzZXNzb3JfY2FyZCk7ID8+PC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8P3BocCBpZiAoJHZtMl9sb2NhbF9jYXJkKTogPz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLWV2LW1ldGEiIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOGI5NDllIj7wn5ONIDw/cGhwIGVjaG8gZXNjX2h0bWwoJHZtMl9sb2NhbF9jYXJkKTsgPz48L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDw/cGhwIGlmICgkdm0yX2hvcmFyaW9fY2FyZCAmJiAkdm0yX2hvcmFyaW9fY2FyZCAhPT0gJ+KAlCcpOiA/PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZXYtbWV0YSIgc3R5bGU9Im1hcmdpbi10b3A6M3B4Ij48c3BhbiBjbGFzcz0idm0yLXRpbWUtdGFnIj7ij7AgPD9waHAgZWNobyBlc2NfaHRtbCgkdm0yX2hvcmFyaW9fY2FyZCk7ID8+PC9zcGFuPjwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgJHZtMl9zZXJ2X2NhcmQgPSB0cmltKCRlWydzZXJ2aWNvcyddID8/ICcnKTsKICAgICAgICAgICAgaWYgKCR2bTJfc2Vydl9jYXJkICYmICR2bTJfc2Vydl9jYXJkICE9PSAn4oCUJyk6CiAgICAgICAgICAgICAgICAvLyBNb3N0cmFyIGFwZW5hcyBwcmltZWlyYSBsaW5oYSBkZSBzZXJ2acOnb3MgcGFyYSBuw6NvIGVuY2hlciBvIGNhcmQKICAgICAgICAgICAgICAgICRzZXJ2X2xpbmVzID0gYXJyYXlfZmlsdGVyKGFycmF5X21hcCgndHJpbScsIGV4cGxvZGUoIlxuIiwgJHZtMl9zZXJ2X2NhcmQpKSk7CiAgICAgICAgICAgICAgICAkc2Vydl9wcmV2aWV3ID0gaW1wbG9kZSgnIMK3ICcsIGFycmF5X3NsaWNlKCRzZXJ2X2xpbmVzLCAwLCAzKSk7CiAgICAgICAgICAgICAgICBpZiAoY291bnQoJHNlcnZfbGluZXMpID4gMykgJHNlcnZfcHJldmlldyAuPSAnIOKApic7CiAgICAgICAgICAgID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1ldi1tZXRhIiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzYzNjZmMTttYXJnaW4tdG9wOjJweCI+4q2QIDw/cGhwIGVjaG8gZXNjX2h0bWwoJHNlcnZfcHJldmlldyk7ID8+PC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1lbmQ7Z2FwOjRweCI+CiAgICAgICAgICAgIDw/cGhwIGlmICgkZXZfZG93KTogPz4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiM1NzYwNmE7Zm9udC13ZWlnaHQ6NjAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouNHB4Ij48P3BocCBlY2hvIGVzY19odG1sKCRldl9kb3cpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItZXYtYmFkZ2UiIHN0eWxlPSJiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gZXNjX2F0dHIoJGVbJ2NvbG9yJ10pOyA/PjIyO2NvbG9yOjw/cGhwIGVjaG8gZXNjX2F0dHIoJGVbJ2NvbG9yJ10pOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCgkYmFkZ2UpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPD9waHAgaWYgKCRlWydjdXN0byddKTogPz4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM1NzYwNmEiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGVbJ2N1c3RvJ10pOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgaWYgKCR2bTJfY2xpZW50ZV9jYXJkIHx8ICgkZVsnd2FfbGluayddICYmICRlWyd3YV9saW5rJ10gIT09ICcjJykpOiA/PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1ldi1jbGllbnRlLXJvdyIgb25jbGljaz0iZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiPgogICAgICAgICAgICA8P3BocCBpZiAoJHZtMl9jbGllbnRlX2NhcmQpOiA/PgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWV2LWNsaWVudGUtbm9tZSI+8J+RpCA8P3BocCBlY2hvIGVzY19odG1sKCR2bTJfY2xpZW50ZV9jYXJkKTsgPz48L3NwYW4+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8P3BocCBpZiAoJGVbJ3dhX2xpbmsnXSAmJiAkZVsnd2FfbGluayddICE9PSAnIycpOiA/PgogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGVbJ3dhX2xpbmsnXSk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InZtMi1ldi13YS1idG4iPvCfkqwgPD9waHAgZWNobyAkdm0yX2NsaWVudGVfY2FyZCA/ICdDaGFtYXInIDogJ1doYXRzQXBwJzsgPz48L2E+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICA8P3BocCAkY29udHJhdG9fb2lkID0gIWVtcHR5KCRlWyd3Y19vcmRlcl9pZCddKSA/IChpbnQpJGVbJ3djX29yZGVyX2lkJ10gOiAoJGVbJ3NvdXJjZSddPT09J3djJyAmJiBpc19udW1lcmljKCRlWydpZCddKSA/IChpbnQpJGVbJ2lkJ10gOiAwKTsgPz4KICAgICAgICAgICAgPD9waHAgaWYgKCRjb250cmF0b19vaWQpOiA/PgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ2bTItZXYtY29udHJhdG8tYnRuIiBvbmNsaWNrPSJ2bTJPcGVuQ29udHJhdG8oPD9waHAgZWNobyAkY29udHJhdG9fb2lkOyA/Pik7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiPvCfk4QgQ29udHJhdG88L2J1dHRvbj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICA8L2Rpdj4KICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICA8P3BocCBpZiAoIGVtcHR5KCRsaXN0X2V2ZW50cykgKTogPz4KICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjQwcHg7Y29sb3I6IzU3NjA2YTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwIj5OZW5odW0gZXZlbnRvIGVuY29udHJhZG8uPC9kaXY+CiAgICA8P3BocCBlbmRpZjsgPz4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kaWY7ID8+CgogICAgPCEtLSBEUkFXRVIgQ09OVFJBVE8gLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItY3Qtb3ZlcmxheSIgaWQ9InZtMkNvbnRyYXRvT3ZlcmxheSIgb25jbGljaz0iaWYoZXZlbnQudGFyZ2V0PT09dGhpcyl0aGlzLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKSI+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWN0LXBhbmVsIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0yLWRyYWctY3QiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItY3QtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTItY3QtdGl0bGUiPvCfk4QgRGFkb3MgZG8gQ29udHJhdG88L3NwYW4+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ2bTItY3QtY2xvc2UiIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJDb250cmF0b092ZXJsYXknKS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJykiPuKclTwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0idm0yQ29udHJhdG9Db250ZW50Ij48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTU9EQUwgLS0+CiAgICA8ZGl2IGNsYXNzPSJ2bTItbW9kYWwtb3ZlcmxheSIgaWQ9InZtMkFnTW9kYWwiIG9uY2xpY2s9ImlmKGV2ZW50LnRhcmdldD09PXRoaXMpdGhpcy5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJykiPgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1tb2RhbC1wYW5lbCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1kcmFnLWhhbmRsZSI+PC9kaXY+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1tb2RhbC1jbG9zZSIgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFnTW9kYWwnKS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJykiPuKclTwvYnV0dG9uPgogICAgICAgICAgICA8aDIgY2xhc3M9InZtMi1tb2RhbC10aXRsZSIgaWQ9InZtMkFnVGl0bGUiPuKAlDwvaDI+CiAgICAgICAgICAgIDxkaXYgaWQ9InZtMkFnQ29udGVudCI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDw/cGhwIGlmICggJHZpZXcgPT09ICdhbGVydGFzJyApOgogICAgICAgICRhZ19hbGVydHNfZW5hYmxlZCA9IGdldF9vcHRpb24oJ3ZtMl9hZ2VuZGFfYWxlcnRzX2dsb2JhbF9lbmFibGVkJywgMSk7CiAgICAgICAgJGFnX2FsZXJ0cyAgICAgICAgID0gZ2V0X29wdGlvbigndm0yX2FnZW5kYV9hbGVydHMnLCBbXSk7CiAgICAgICAgaWYgKCAhIGlzX2FycmF5KCRhZ19hbGVydHMpICkgJGFnX2FsZXJ0cyA9IFtdOwogICAgICAgICRhZ19jaGFubmVscyAgICAgICA9IHZtMl9jaGFubmVscygpOwogICAgICAgICRhZ19kZWZfbXNnID0gIvCfjqogKkxFTUJSRVRFIERFIEVWRU5UTyDigJQge2RpYXNfYW50ZXN9IGRpYXMqXG5cbvCfk4UgKkRhdGE6KiB7ZGF0YX0gKHtkaWFfc2VtYW5hfSlcbvCfjokgKkV2ZW50bzoqIHt0aXBvfVxu8J+RpCAqSG9tZW5hZ2VhZG8ocyk6KiB7aG9tZW5hZ2VhZG99XG7wn46kICpQcmVzdGFkb3I6KiB7cHJlc3RhZG9yfVxu8J+TjSAqTG9jYWw6KiB7bG9jYWx9XG7wn5WQICpIb3LDoXJpbzoqIHtob3JhcmlvfVxu8J+SsCAqQ3VzdG86KiB7Y3VzdG99XG5cbl9MZW1icmV0ZSBhdXRvbcOhdGljbyDigJQgVml2YU1haXMgQ1JNXyI7CiAgICAgICAgJGFnX2FsZXJ0X25vbmNlID0gd3BfY3JlYXRlX25vbmNlKCd2bTJfYWdlbmRhX2FsZXJ0c19zYXZlJyk7CiAgICA/PgogICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoyNHB4O21hcmdpbi10b3A6MTZweCI+CiAgICAgICAgPCEtLSBIZWFkZXIgLS0+CiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjIwcHg7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHgiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGgyIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MThweCI+8J+UlCBBbGVydGFzIGRlIEFnZW5kYTwvaDI+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjRweCAwIDA7Y29sb3I6IzU3NjA2YTtmb250LXNpemU6MTNweCI+RW52aWUgbGVtYnJldGVzIGF1dG9tw6F0aWNvcyBwYXJhIG8gZ3J1cG8gZGUgV2hhdHNBcHAgZGEgZ2VzdMOjbyBhbnRlcyBkZSBjYWRhIGV2ZW50by48L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9IndpZHRoOjM4cHg7aGVpZ2h0OjIycHg7YmFja2dyb3VuZDo8P3BocCBlY2hvICRhZ19hbGVydHNfZW5hYmxlZCA/ICcjMjJjNTVlJyA6ICcjZDFkNWRiJzsgPz47Ym9yZGVyLXJhZGl1czoxMXB4O3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2N1cnNvcjpwb2ludGVyIiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWdBbGVydEdsb2JhbCcpLmNsaWNrKCkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDtsZWZ0Ojw/cGhwIGVjaG8gJGFnX2FsZXJ0c19lbmFibGVkID8gJzE4cHgnIDogJzJweCc7ID8+O3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zaXRpb246bGVmdCAuMnMiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkYWdfYWxlcnRzX2VuYWJsZWQgPyAnPHNwYW4gc3R5bGU9ImNvbG9yOiMyMmM1NWUiPkFsZXJ0YXMgQXRpdm9zPC9zcGFuPicgOiAnPHNwYW4gc3R5bGU9ImNvbG9yOiM5Y2EzYWYiPkFsZXJ0YXMgUGF1c2Fkb3M8L3NwYW4+JzsgPz4KICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iPD9waHAgZWNobyBlc2NfdXJsKCBhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItYWdlbmRhJywndmlldyc9PidhbGVydGFzJ10sIGFkbWluX3VybCgnYWRtaW4ucGhwJykpICk7ID8+Ij4KICAgICAgICAgICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3ZtMl9hZ2VuZGFfYWxlcnRzX3NhdmUnKTsgPz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idm0yX3NhdmVfYWdlbmRhX2FsZXJ0cyIgdmFsdWU9IjEiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ2bTJfYWdlbmRhX2FsZXJ0c19nbG9iYWxfZW5hYmxlZCIgaWQ9InZtMkFnQWxlcnRHbG9iYWxIaWRkZW4iIHZhbHVlPSI8P3BocCBlY2hvICRhZ19hbGVydHNfZW5hYmxlZCA/ICcxJyA6ICcwJzsgPz4iPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ2bTJBZ0FsZXJ0R2xvYmFsIiBzdHlsZT0iZGlzcGxheTpub25lIiA8P3BocCBjaGVja2VkKCRhZ19hbGVydHNfZW5hYmxlZCwgMSk7ID8+IG9uY2hhbmdlPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWdBbGVydEdsb2JhbEhpZGRlbicpLnZhbHVlPXRoaXMuY2hlY2tlZD8nMSc6JzAnO3RoaXMuY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpIj4KCiAgICAgICAgICAgIDwhLS0gVGFiZWxhIGRlIHJlZ3JhcyAtLT4KICAgICAgICAgICAgPGRpdiBpZD0idm0yQWxlcnRSdWxlc1dyYXAiPgogICAgICAgICAgICA8P3BocCBpZiAoIGVtcHR5KCRhZ19hbGVydHMpICk6ID8+CiAgICAgICAgICAgIDxkaXYgaWQ9InZtMkFsZXJ0RW1wdHkiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjMycHg7YmFja2dyb3VuZDojZjlmOWY5O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoycHggZGFzaGVkICNlMGUwZTA7Y29sb3I6IzU3NjA2YTtmb250LXNpemU6MTRweCI+CiAgICAgICAgICAgICAgICBOZW5odW0gYWxlcnRhIGNvbmZpZ3VyYWRvIGFpbmRhLjxicj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJ2bTJBZGRBbGVydFJ1bGUoKSIgc3R5bGU9Im1hcmdpbi10b3A6MTJweDtwYWRkaW5nOjhweCAyMHB4O2JhY2tncm91bmQ6IzAwNzNhYTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NnB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxM3B4Ij4rIEFkaWNpb25hciBBbGVydGE8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgICAgICAgIDxkaXYgaWQ9InZtMkFsZXJ0RW1wdHkiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KCiAgICAgICAgICAgIDxkaXYgaWQ9InZtMkFsZXJ0UnVsZXMiPgogICAgICAgICAgICA8P3BocCBmb3JlYWNoICggJGFnX2FsZXJ0cyBhcyAkaWR4ID0+ICRydWxlICk6ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1hbGVydC1ydWxlIiBkYXRhLWlkeD0iPD9waHAgZWNobyAkaWR4OyA/PiIgc3R5bGU9ImJhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MThweDttYXJnaW4tYm90dG9tOjE0cHg7cG9zaXRpb246cmVsYXRpdmUiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWdlbmRhX2FsZXJ0c1s8P3BocCBlY2hvICRpZHg7ID8+XVtpZF0iIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRydWxlWydpZCddKTsgPz4iPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztnYXA6MTBweDthbGlnbi1pdGVtczpzdGFydDttYXJnaW4tYm90dG9tOjEycHgiPgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NzYwNmE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+Tm9tZSBkYSByZWdyYTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJhZ2VuZGFfYWxlcnRzWzw/cGhwIGVjaG8gJGlkeDsgPz5dW25hbWVdIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkcnVsZVsnbmFtZSddKTsgPz4iIHBsYWNlaG9sZGVyPSJFeDogTGVtYnJldGUgNyBkaWFzIGFudGVzIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtwYWRkaW5nLXRvcDoyMnB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNTc2MDZhO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjVweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImFnZW5kYV9hbGVydHNbPD9waHAgZWNobyAkaWR4OyA/Pl1bZW5hYmxlZF0iIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKCRydWxlWydlbmFibGVkJ10sIDEpOyA/Pj4gQXRpdm8KICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG9uY2xpY2s9InZtMlJlbW92ZUFsZXJ0UnVsZSh0aGlzKSIgc3R5bGU9ImJhY2tncm91bmQ6I2ZlZjJmMjtib3JkZXI6MXB4IHNvbGlkICNmZWNhY2E7Y29sb3I6I2RjMjYyNjtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjVweCAxMHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMnB4Ij7wn5eR77iPPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgxODBweCwxZnIpKTtnYXA6MTJweDttYXJnaW4tYm90dG9tOjEycHgiPgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NzYwNmE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+4o+wIERpYXMgYW50ZXMgZG8gZXZlbnRvPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0iYWdlbmRhX2FsZXJ0c1s8P3BocCBlY2hvICRpZHg7ID8+XVtkYXlzX2JlZm9yZV0iIHZhbHVlPSI8P3BocCBlY2hvIGludHZhbCgkcnVsZVsnZGF5c19iZWZvcmUnXSk7ID8+IiBtaW49IjEiIG1heD0iMzY1IiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzU3NjA2YTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5OhIENhbmFsIFotQVBJPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJhZ2VuZGFfYWxlcnRzWzw/cGhwIGVjaG8gJGlkeDsgPz5dW2NoYW5uZWxdIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICggJGFnX2NoYW5uZWxzIGFzICRjayA9PiAkY2ggKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICgkY2hbJ3R5cGUnXSA/PyAnJykgPT09ICd3YWJhJyApIGNvbnRpbnVlOyAvLyBncnVwb3Mgc8OzIHZpYSBaLUFQSQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJGNrKTsgPz4iIDw/cGhwIHNlbGVjdGVkKCRydWxlWydjaGFubmVsJ10sICRjayk7ID8+PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gZXNjX2h0bWwoJGNoWydsYWJlbCddID8/ICRjayk7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzljYTNhZiI+4pqg77iPIEFwZW5hcyBaLUFQSSAoZ3J1cG9zKTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTc2MDZhO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfkaUgSUQgZG8gR3J1cG8gV0E8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYWdlbmRhX2FsZXJ0c1s8P3BocCBlY2hvICRpZHg7ID8+XVtncm91cF9pZF0iIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRydWxlWydncm91cF9pZCddKTsgPz4iIHBsYWNlaG9sZGVyPSJFeDogMTIwMzYzNDI1Nzg1MzU4NzY0LWdyb3VwIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtmb250LWZhbWlseTptb25vc3BhY2UiPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NzYwNmE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+8J+SrCBNZW5zYWdlbSA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM5Y2EzYWYiPuKAlCBWYXJpw6F2ZWlzOiB7ZGF0YX0ge2RpYV9zZW1hbmF9IHt0aXBvfSB7aG9tZW5hZ2VhZG99IHtwcmVzdGFkb3J9IHtsb2NhbH0ge2VuZGVyZWNvfSB7YXNzZXNzb3J9IHtob3JhcmlvfSB7Y3VzdG99IHtkaWFzX2FudGVzfTwvc3Bhbj48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJhZ2VuZGFfYWxlcnRzWzw/cGhwIGVjaG8gJGlkeDsgPz5dW21lc3NhZ2VdIiByb3dzPSI1IiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtmb250LWZhbWlseTptb25vc3BhY2U7cmVzaXplOnZlcnRpY2FsIj48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgkcnVsZVsnbWVzc2FnZSddKTsgPz48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJ2bTJBZGRBbGVydFJ1bGUoKSIgc3R5bGU9Im1hcmdpbi10b3A6NHB4O3BhZGRpbmc6OHB4IDIwcHg7YmFja2dyb3VuZDojZjBmOWZmO2JvcmRlcjoxcHggc29saWQgIzdkZDNmYztjb2xvcjojMDM2OWExO2JvcmRlci1yYWRpdXM6NnB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMCI+KyBBZGljaW9uYXIgUmVncmE8L2J1dHRvbj4KCiAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmctdG9wOjE2cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2UwZTBlMDtnYXA6MTJweDthbGlnbi1pdGVtczpjZW50ZXIiPgogICAgICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgICAgICRsYXN0X3J1biA9IGdldF9vcHRpb24oJ3ZtMl9hZ2VuZGFfYWxlcnRzX2xhc3RfcnVuJywgJycpOwogICAgICAgICAgICAgICAgaWYgKCRsYXN0X3J1bik6ID8+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzU3NjA2YSI+w5psdGltbyBkaXNwYXJvOiA8P3BocCBlY2hvIGVzY19odG1sKHZtMl9sb2NhbF9kYXRlKCdkL20gSDppJywgJGxhc3RfcnVuKSk7ID8+PC9zcGFuPgogICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSIgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O3BhZGRpbmc6OHB4IDI0cHgiPvCfkr4gU2FsdmFyIEFsZXJ0YXM8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PjwhLS0gI3ZtMkFsZXJ0UnVsZXNXcmFwIC0tPgogICAgICAgIDwvZm9ybT4KCiAgICAgICAgPCEtLSBJbmZvIC8gTG9nIGJveCAtLT4KICAgICAgICA8P3BocAogICAgICAgICRhbGVydF9sb2cgPSBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2FsZXJ0c19sb2cnLCBbXSk7CiAgICAgICAgJGxvZ19jb3VudCA9IGNvdW50KCRhbGVydF9sb2cpOwogICAgICAgID8+CiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoyMHB4O2JhY2tncm91bmQ6I2YwZmRmNDtib3JkZXI6MXB4IHNvbGlkICNiYmY3ZDA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNHB4IDE4cHgiPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojMTU4MDNkO2ZvbnQtd2VpZ2h0OjYwMDttYXJnaW4tYm90dG9tOjZweCI+8J+TiyBTdGF0dXMgZG8gc2lzdGVtYTwvZGl2PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojMTY2NTM0O2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6MTZweCI+CiAgICAgICAgICAgICAgICA8c3Bhbj7wn5OKIEFsZXJ0YXMgasOhIGVudmlhZG9zIG5vIGxvZzogPHN0cm9uZz48P3BocCBlY2hvICRsb2dfY291bnQ7ID8+PC9zdHJvbmc+PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+4o+wIENyb246IGRpw6FyaW8gw6BzIDA4OjAwIChob3LDoXJpbyBTUCk8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj7wn5SQIERlZHVwbGljYcOnw6NvIGF1dG9tw6F0aWNhIChudW5jYSBlbnZpYSAyeCBvIG1lc21vIGFsZXJ0YSk8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8P3BocCBpZiAoJGxvZ19jb3VudCA+IDApOiA/PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJpZihjb25maXJtKCdJc3NvIHZhaSBsaW1wYXIgbyBoaXN0w7NyaWNvIGUgcGVybWl0aXIgcmUtZW52aW8gZG9zIGFsZXJ0YXMuIENvbmZpcm1hcj8nKSl7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkNsZWFyQWxlcnRMb2cnKS5zdWJtaXQoKTt9IHJldHVybiBmYWxzZTsiIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojZGMyNjI2Ij7wn5eR77iPIExpbXBhciBsb2cgZGUgZGVkdXBsaWNhw6fDo288L2E+CiAgICAgICAgICAgICAgICA8Zm9ybSBpZD0idm0yQ2xlYXJBbGVydExvZyIgbWV0aG9kPSJwb3N0IiBzdHlsZT0iZGlzcGxheTpub25lIj4KICAgICAgICAgICAgICAgICAgICA8P3BocCB3cF9ub25jZV9maWVsZCgndm0yX2FnZW5kYV9hbGVydHNfc2F2ZScpOyA/PgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InZtMl9zYXZlX2FnZW5kYV9hbGVydHMiIHZhbHVlPSIxIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ2bTJfYWdlbmRhX2FsZXJ0c19nbG9iYWxfZW5hYmxlZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGFnX2FsZXJ0c19lbmFibGVkOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idm0yX2NsZWFyX2FsZXJ0X2xvZyIgdmFsdWU9IjEiPgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gVmFyacOhdmVpcyBpbmZvIC0tPgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTRweDtiYWNrZ3JvdW5kOiNmZWZjZTg7Ym9yZGVyOjFweCBzb2xpZCAjZmVmMDhhO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTRweCAxOHB4Ij4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM4NTRkMGU7bWFyZ2luLWJvdHRvbTo4cHgiPvCfk4wgVmFyacOhdmVpcyBkaXNwb27DrXZlaXMgbmEgbWVuc2FnZW08L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7Zm9udC1zaXplOjEycHgiPgogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoWydkYXRhJywnZGlhX3NlbWFuYScsJ3RpcG8nLCdob21lbmFnZWFkbycsJ3ByZXN0YWRvcicsJ2xvY2FsJywnZW5kZXJlY28nLCdhc3Nlc3NvcicsJ2hvcmFyaW8nLCdjdXN0bycsJ2RpYXNfYW50ZXMnXSBhcyAkdmFyKTogPz4KICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZWY5YzM7cGFkZGluZzoycHggN3B4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI2ZlZjA4YTtjb2xvcjojNzEzZjEyIj57PD9waHAgZWNobyAkdmFyOyA/Pn08L2NvZGU+CiAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICB2YXIgdm0yQWxlcnRJZHggPSA8P3BocCBlY2hvIG1heChjb3VudCgkYWdfYWxlcnRzKSAtIDEsIC0xKTsgPz47CiAgICB2YXIgdm0yQWxlcnRDaGFubmVscyA9IDw/cGhwCiAgICAgICAgJGNoX29wdHMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkYWdfY2hhbm5lbHMgYXMgJGNrID0+ICRjaCkgewogICAgICAgICAgICBpZiAoKCRjaFsndHlwZSddID8/ICcnKSA9PT0gJ3dhYmEnKSBjb250aW51ZTsKICAgICAgICAgICAgJGNoX29wdHNbXSA9IFsna2V5JyA9PiAkY2ssICdsYWJlbCcgPT4gJGNoWydsYWJlbCddID8/ICRja107CiAgICAgICAgfQogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJGNoX29wdHMsIEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwogICAgPz47CiAgICB2YXIgdm0yQWxlcnREZWZNc2cgPSA8P3BocCBlY2hvIGpzb25fZW5jb2RlKCRhZ19kZWZfbXNnLCBKU09OX1VORVNDQVBFRF9VTklDT0RFKTsgPz47CgogICAgZnVuY3Rpb24gdm0yQWRkQWxlcnRSdWxlKCkgewogICAgICAgIHZtMkFsZXJ0SWR4Kys7CiAgICAgICAgdmFyIGlkeCA9IHZtMkFsZXJ0SWR4OwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJBbGVydEVtcHR5Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICB2YXIgY2hPcHRzID0gdm0yQWxlcnRDaGFubmVscy5tYXAoZnVuY3Rpb24oYyl7CiAgICAgICAgICAgIHJldHVybiAnPG9wdGlvbiB2YWx1ZT0iJytjLmtleSsnIj4nK2MubGFiZWwrJzwvb3B0aW9uPic7CiAgICAgICAgfSkuam9pbignJyk7CiAgICAgICAgdmFyIGh0bWwgPSAnPGRpdiBjbGFzcz0idm0yLWFsZXJ0LXJ1bGUiIGRhdGEtaWR4PSInK2lkeCsnIiBzdHlsZT0iYmFja2dyb3VuZDojZjlmYWZiO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxOHB4O21hcmdpbi1ib3R0b206MTRweDtwb3NpdGlvbjpyZWxhdGl2ZSI+JwogICAgICAgICAgICArJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFnZW5kYV9hbGVydHNbJytpZHgrJ11baWRdIiB2YWx1ZT0iYXJfJytpZHgrRGF0ZS5ub3coKSsnIj4nCiAgICAgICAgICAgICsnPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztnYXA6MTBweDthbGlnbi1pdGVtczpzdGFydDttYXJnaW4tYm90dG9tOjEycHgiPicKICAgICAgICAgICAgKyc8ZGl2PjxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NzYwNmE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+Tm9tZSBkYSByZWdyYTwvbGFiZWw+JwogICAgICAgICAgICArJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJhZ2VuZGFfYWxlcnRzWycraWR4KyddW25hbWVdIiBwbGFjZWhvbGRlcj0iRXg6IExlbWJyZXRlIDcgZGlhcyBhbnRlcyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHgiPjwvZGl2PicKICAgICAgICAgICAgKyc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O3BhZGRpbmctdG9wOjIycHgiPicKICAgICAgICAgICAgKyc8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NzYwNmE7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NXB4Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImFnZW5kYV9hbGVydHNbJytpZHgrJ11bZW5hYmxlZF0iIHZhbHVlPSIxIiBjaGVja2VkPiBBdGl2bzwvbGFiZWw+JwogICAgICAgICAgICArJzxidXR0b24gdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJ2bTJSZW1vdmVBbGVydFJ1bGUodGhpcykiIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZWYyZjI7Ym9yZGVyOjFweCBzb2xpZCAjZmVjYWNhO2NvbG9yOiNkYzI2MjY7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzo1cHggMTBweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTJweCI+8J+Xke+4jzwvYnV0dG9uPicKICAgICAgICAgICAgKyc8L2Rpdj48L2Rpdj4nCiAgICAgICAgICAgICsnPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDE4MHB4LDFmcikpO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MTJweCI+JwogICAgICAgICAgICArJzxkaXY+PGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzU3NjA2YTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7ij7AgRGlhcyBhbnRlcyBkbyBldmVudG88L2xhYmVsPicKICAgICAgICAgICAgKyc8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJhZ2VuZGFfYWxlcnRzWycraWR4KyddW2RheXNfYmVmb3JlXSIgdmFsdWU9IjciIG1pbj0iMSIgbWF4PSIzNjUiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij48L2Rpdj4nCiAgICAgICAgICAgICsnPGRpdj48bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTc2MDZhO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfk6EgQ2FuYWwgWi1BUEk8L2xhYmVsPicKICAgICAgICAgICAgKyc8c2VsZWN0IG5hbWU9ImFnZW5kYV9hbGVydHNbJytpZHgrJ11bY2hhbm5lbF0iIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij4nK2NoT3B0cysnPC9zZWxlY3Q+JwogICAgICAgICAgICArJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmIj7imqDvuI8gQXBlbmFzIFotQVBJIChncnVwb3MpPC9zcGFuPjwvZGl2PicKICAgICAgICAgICAgKyc8ZGl2PjxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NzYwNmE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+8J+RpSBJRCBkbyBHcnVwbyBXQTwvbGFiZWw+JwogICAgICAgICAgICArJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJhZ2VuZGFfYWxlcnRzWycraWR4KyddW2dyb3VwX2lkXSIgcGxhY2Vob2xkZXI9IkV4OiAxMjAzNjM0MjU3ODUzNTg3NjQtZ3JvdXAiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+PC9kaXY+JwogICAgICAgICAgICArJzwvZGl2PicKICAgICAgICAgICAgKyc8ZGl2PjxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NzYwNmE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+8J+SrCBNZW5zYWdlbSA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM5Y2EzYWYiPuKAlCBWYXJpw6F2ZWlzOiB7ZGF0YX0ge2RpYV9zZW1hbmF9IHt0aXBvfSB7aG9tZW5hZ2VhZG99IHtwcmVzdGFkb3J9IHtsb2NhbH0ge2VuZGVyZWNvfSB7YXNzZXNzb3J9IHtob3JhcmlvfSB7Y3VzdG99IHtkaWFzX2FudGVzfTwvc3Bhbj48L2xhYmVsPicKICAgICAgICAgICAgKyc8dGV4dGFyZWEgbmFtZT0iYWdlbmRhX2FsZXJ0c1snK2lkeCsnXVttZXNzYWdlXSIgcm93cz0iNSIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO3Jlc2l6ZTp2ZXJ0aWNhbCI+Jyt2bTJBbGVydERlZk1zZysnPC90ZXh0YXJlYT4nCiAgICAgICAgICAgICsnPC9kaXY+PC9kaXY+JzsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWxlcnRSdWxlcycpLmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgaHRtbCk7CiAgICB9CiAgICBmdW5jdGlvbiB2bTJSZW1vdmVBbGVydFJ1bGUoYnRuKSB7CiAgICAgICAgYnRuLmNsb3Nlc3QoJy52bTItYWxlcnQtcnVsZScpLnJlbW92ZSgpOwogICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZtMi1hbGVydC1ydWxlJykubGVuZ3RoKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJBbGVydEVtcHR5Jykuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgIH0KICAgIH0KICAgIDwvc2NyaXB0PgogICAgPD9waHAgZW5kaWY7IC8vIHZpZXcgPT09IGFsZXJ0YXMgPz4KCiAgICA8c2NyaXB0PgogICAgLy8gRGV0ZWN0YSBlIHBhcnNlaWEgYmxvYnMgZG8gdGlwbyAiQ2hhdmU6IFZhbG9yIC8gQ2hhdmU6IFZhbG9yIgogICAgZnVuY3Rpb24gdm0yUGFyc2VCbG9iKHJhdykgewogICAgICAgIGlmICghcmF3IHx8IHJhdyA9PT0gJ+KAlCcgfHwgcmF3Lmxlbmd0aCA8IDMwKSByZXR1cm4gbnVsbDsKICAgICAgICAvLyBQcmVjaXNhIHRlciBwYWRyw6NvICJQYWxhdnJhOiB2YWxvciAvIiBvdSBjaGVja21hcmsgY29tIHNlZ21lbnRvcwogICAgICAgIGlmIChyYXcuaW5kZXhPZignLycpID09PSAtMSAmJiByYXcuaW5kZXhPZign4pyFJykgPT09IC0xKSByZXR1cm4gbnVsbDsKICAgICAgICB2YXIgc2VnbWVudHMgPSByYXcuc3BsaXQoL1xzKlwvXHMqLykubWFwKGZ1bmN0aW9uKHMpeyByZXR1cm4gcy5yZXBsYWNlKC9eXHMq4pyFXHMqLywgJycpLnRyaW0oKTsgfSk7CiAgICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA8IDIpIHJldHVybiBudWxsOwogICAgICAgIHZhciBodG1sID0gJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweCI+JzsKICAgICAgICBzZWdtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHNlZykgewogICAgICAgICAgICBpZiAoIXNlZykgcmV0dXJuOwogICAgICAgICAgICB2YXIgY2kgPSBzZWcuaW5kZXhPZignOicpOwogICAgICAgICAgICBpZiAoY2kgPiAwICYmIGNpIDwgMjgpIHsKICAgICAgICAgICAgICAgIHZhciBsYmwgPSBzZWcuc3Vic3RyaW5nKDAsIGNpKS50cmltKCk7CiAgICAgICAgICAgICAgICB2YXIgdmFsID0gc2VnLnN1YnN0cmluZyhjaSArIDEpLnRyaW0oKTsKICAgICAgICAgICAgICAgIGlmICh2YWwpIGh0bWwgKz0gJzxkaXYgY2xhc3M9InZtMi1ibG9iLXJvdyI+PHNwYW4gY2xhc3M9InZtMi1ibG9iLWxibCI+JytsYmwrJzwvc3Bhbj48c3BhbiBjbGFzcz0idm0yLWJsb2ItdmFsIj4nK3ZhbCsnPC9zcGFuPjwvZGl2Pic7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VnLmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InZtMi1ibG9iLXJvdyI+PHNwYW4gY2xhc3M9InZtMi1ibG9iLXZhbCI+JytzZWcrJzwvc3Bhbj48L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaHRtbCArPSAnPC9kaXY+JzsKICAgICAgICByZXR1cm4gaHRtbDsKICAgIH0KICAgIGZ1bmN0aW9uIHZtMkNsZWFuTmFtZShyYXcpIHsKICAgICAgICBpZiAoIXJhdykgcmV0dXJuICfigJQnOwogICAgICAgIHZhciBtID0gcmF3Lm1hdGNoKC9Ob21lIENvbXBsZXRvWzpcc10rKFteXC9cbl17MSw4MH0pL2kpOwogICAgICAgIGlmIChtKSByZXR1cm4gbVsxXS50cmltKCk7CiAgICAgICAgcmV0dXJuIHJhdzsKICAgIH0KICAgIGZ1bmN0aW9uIHZtMlJvdyhsYmwsIHZhbCkgewogICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0idm0yLW1vZGFsLXJvdyI+PHNwYW4gY2xhc3M9InZtMi1tb2RhbC1sYmwiPicrbGJsKyc8L3NwYW4+PHNwYW4gY2xhc3M9InZtMi1tb2RhbC12YWwiPicrdmFsKyc8L3NwYW4+PC9kaXY+JzsKICAgIH0KICAgIGZ1bmN0aW9uIHZtMk9wZW5Nb2RhbChlKSB7CiAgICAgICAgdmFyIGR1ID0gZS5kYXlzX3VudGlsOwogICAgICAgIHZhciB0YWcgPSBkdSA8IDAgPyAnPHNwYW4gc3R5bGU9ImNvbG9yOiM2ZTc3ODEiPuKckyBSZWFsaXphZG88L3NwYW4+JwogICAgICAgICAgICAgICAgOiBkdSA9PT0gMCA/ICc8c3BhbiBzdHlsZT0iY29sb3I6I2QxMjQyZjtmb250LXdlaWdodDo3MDAiPvCflLQgSE9KRSE8L3NwYW4+JwogICAgICAgICAgICAgICAgOiBkdSA9PT0gMSA/ICc8c3BhbiBzdHlsZT0iY29sb3I6I2UxNmYyNCI+4o+wIEFtYW5ow6M8L3NwYW4+JwogICAgICAgICAgICAgICAgOiAnPHNwYW4gc3R5bGU9ImNvbG9yOiM1NzYwNmEiPvCfk4UgRW0gJytkdSsnIGRpYXM8L3NwYW4+JzsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWdUaXRsZScpLmlubmVySFRNTCA9ICfwn5OLICcgKyBlLmRhdGVfZm10ICsgJyAnICsgdGFnOwoKICAgICAgICB2YXIgaHRtbCA9ICcnOwogICAgICAgIC8vIEJsb2NvIGNsaWVudGUgbm8gdG9wbwogICAgICAgIGlmIChlLmN1c3RvbWVyIHx8IChlLndhX2xpbmsgJiYgZS53YV9saW5rICE9PSAnIycpKSB7CiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InZtMi1tb2RhbC1jbGllbnRlIj4nOwogICAgICAgICAgICBpZiAoZS5jdXN0b21lcikgaHRtbCArPSAnPGRpdiBjbGFzcz0idm0yLW1vZGFsLWNsaWVudGUtbm9tZSI+8J+RpCAnICsgZS5jdXN0b21lciArICc8L2Rpdj4nOwogICAgICAgICAgICBpZiAoZS53YV9saW5rICYmIGUud2FfbGluayAhPT0gJyMnKSB7CiAgICAgICAgICAgICAgICBodG1sICs9ICc8YSBocmVmPSInK2Uud2FfbGluaysnIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InZtMi1tYnRuIGdyZWVuIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtmb250LXNpemU6MTRweDtwYWRkaW5nOjEwcHggMjBweDtib3JkZXItcmFkaXVzOjhweDtmb250LXdlaWdodDo3MDAiPvCfkqwgQ2hhbWFyIG5vIFdoYXRzQXBwPC9hPic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaHRtbCArPSAnPC9kaXY+JzsKICAgICAgICB9CiAgICAgICAgLy8gQ2FtcG9zIHBhcnNlYWRvcyBkbyBibG9iIChzw7MgZXhpYmUgc2UgdGl2ZXIgdmFsb3IpCiAgICAgICAgdmFyIGZpZWxkcyA9IFsKICAgICAgICAgICAgWyfwn46qIFRpcG8gZGUgRXZlbnRvJywgIGUudGlwb10sCiAgICAgICAgICAgIFsn8J+RkSBIb21lbmFnZWFkby9DYXNhbCcsIGUuaG9tZW5hZ2VhZG9dLAogICAgICAgICAgICBbJ/CfjqQgUHJlc3RhZG9yJywgICAgICAgZS5wcmVzdGFkb3JdLAogICAgICAgICAgICBbJ/Cfk40gTG9jYWwnLCAgICAgICAgICAgZS5sb2NhbF0sCiAgICAgICAgICAgIFsn8J+PoCBFbmRlcmXDp28nLCAgICAgICAgZS5lbmRlcmVjb10sCiAgICAgICAgICAgIFsn8J+knSBBc3Nlc3NvcicsICAgICAgICBlLmFzc2Vzc29yXSwKICAgICAgICAgICAgWyfij7AgSG9yw6FyaW8nLCAgICAgICAgIGUuaG9yYXJpb10sCiAgICAgICAgICAgIFsn8J+SsCBDdXN0bycsICAgICAgICAgICBlLmN1c3RvXSwKICAgICAgICBdOwogICAgICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgaWYgKHJbMV0gJiYgclsxXSAhPT0gJ+KAlCcgJiYgclsxXSAhPT0gJycpIHsKICAgICAgICAgICAgICAgIGh0bWwgKz0gdm0yUm93KHJbMF0sIHJbMV0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgLy8gU2VydmnDp29zIFZpdmFNYWlzIOKAlCBibG9jbyBzZXBhcmFkbyBzZSBleGlzdGlyCiAgICAgICAgaWYgKGUuc2Vydmljb3MgJiYgZS5zZXJ2aWNvcy50cmltKCkpIHsKICAgICAgICAgICAgaHRtbCArPSAnPGhyIGNsYXNzPSJ2bTItbW9kYWwtaHIiPic7CiAgICAgICAgICAgIGh0bWwgKz0gJzxwIHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOiM3YzNhZWQ7bWFyZ2luOjAgMCA4cHgiPvCfjq0gU2VydmnDp29zIFZpdmFNYWlzPC9wPic7CiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiMxZDIzMjc7d2hpdGUtc3BhY2U6cHJlLWxpbmU7bGluZS1oZWlnaHQ6MS41Ij4nICsgZS5zZXJ2aWNvcyArICc8L2Rpdj4nOwogICAgICAgIH0KICAgICAgICAvLyBXaGF0c2FwcAogICAgICAgIGh0bWwgKz0gJzxociBjbGFzcz0idm0yLW1vZGFsLWhyIj4nOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InZtMi1tb2RhbC1hY3RzIj4nOwogICAgICAgIGlmIChlLndhX2xpbmsgJiYgZS53YV9saW5rICE9PSAnIycpIHsKICAgICAgICAgICAgaHRtbCArPSAnPGEgaHJlZj0iJytlLndhX2xpbmsrJyIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJ2bTItbWJ0biBncmVlbiI+8J+SrCBXaGF0c0FwcDwvYT4nOwogICAgICAgIH0KICAgICAgICB2YXIgY29udHJhdG9PcmRlcklkID0gZS53Y19vcmRlcl9pZCB8fCAoZS5zb3VyY2UgPT09ICd3YycgJiYgZS5pZCAmJiAhaXNOYU4oZS5pZCkgPyBlLmlkIDogMCk7CiAgICAgICAgaWYgKGNvbnRyYXRvT3JkZXJJZCkgewogICAgICAgICAgICBodG1sICs9ICc8YnV0dG9uIG9uY2xpY2s9InZtMk9wZW5Db250cmF0bygnK2NvbnRyYXRvT3JkZXJJZCsnKSIgY2xhc3M9InZtMi1tYnRuIiBzdHlsZT0iYmFja2dyb3VuZDojZjNmMGZmO2JvcmRlcjoxcHggc29saWQgI2E3OGJmYTtjb2xvcjojNmQyOGQ5Ij7wn5OEIENvbnRyYXRvPC9idXR0b24+JzsKICAgICAgICB9CiAgICAgICAgaHRtbCArPSAnPC9kaXY+JzsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWdDb250ZW50JykuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWdNb2RhbCcpLmNsYXNzTGlzdC5hZGQoJ29wZW4nKTsKICAgIH0KICAgIHZhciB2bTJDb250cmF0b05vbmNlID0gJzw/cGhwIGVjaG8gd3BfY3JlYXRlX25vbmNlKCd2bTJfY29udHJhdG8nKTsgPz4nOwogICAgZnVuY3Rpb24gdm0yT3BlbkNvbnRyYXRvKG9yZGVyX2lkKSB7CiAgICAgICAgdmFyIG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQ29udHJhdG9PdmVybGF5Jyk7CiAgICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQ29udHJhdG9Db250ZW50Jyk7CiAgICAgICAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0MHB4O2NvbG9yOiM1NzYwNmEiPuKPsyBDYXJyZWdhbmRvIGRhZG9zIGRvIGNvbnRyYXRvLi4uPC9kaXY+JzsKICAgICAgICBvdmVybGF5LmNsYXNzTGlzdC5hZGQoJ29wZW4nKTsKICAgICAgICAvLyBGZWNoYSBtb2RhbCBwcmluY2lwYWwgc2UgZXN0aXZlciBhYmVydG8KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWdNb2RhbCcpLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICBmZC5hcHBlbmQoJ2FjdGlvbicsICd2bTJfY29udHJhdG9fZGF0YScpOwogICAgICAgIGZkLmFwcGVuZCgnb3JkZXJfaWQnLCBvcmRlcl9pZCk7CiAgICAgICAgZmQuYXBwZW5kKCdub25jZScsIHZtMkNvbnRyYXRvTm9uY2UpOwogICAgICAgIGZldGNoKGFqYXh1cmwsIHttZXRob2Q6J1BPU1QnLCBib2R5OmZkfSkKICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIHIuanNvbigpO30pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT0iY29sb3I6I2QxMjQyZjtwYWRkaW5nOjIwcHgiPkVycm86ICcrKHJlcy5kYXRhfHwnZGVzY29uaGVjaWRvJykrJzwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGQgPSByZXMuZGF0YTsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGN0KGxibCwgdmFsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWwgfHwgdmFsID09PSAn4oCUJyB8fCB2YWwgPT09ICcnKSByZXR1cm4gJyc7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJ2bTItY3Qtcm93Ij48c3BhbiBjbGFzcz0idm0yLWN0LWxibCI+JytsYmwrJzwvc3Bhbj48c3BhbiBjbGFzcz0idm0yLWN0LXZhbCI+Jyt2YWwrJzwvc3Bhbj48L2Rpdj4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGh0bWwgPSAnJzsKICAgICAgICAgICAgICAgIC8vIEZJQ0hBIERPIEVWRU5UTwogICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0idm0yLWN0LXNlY3Rpb24iPvCfk4UgRklDSEEgRE8gRVZFTlRPPC9kaXY+JzsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/CfjqogVGlwbycsIGQudGlwb19ldmVudG8pOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+RkSBIb21lbmFnZWFkbycsIGQuaG9tZW5hZ2VhZG8pOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+ThSBEYXRhJywgZC5kYXRhX2V2ZW50byk7CiAgICAgICAgICAgICAgICBodG1sICs9IGN0KCfij7AgRXZlbnRvIEluw61jaW8nLCBkLmhvcmFfaW5pY2lvICYmIGQuaG9yYV9pbmljaW8gIT09ICfigJQnID8gZC5ob3JhX2luaWNpbyA6ICcnKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ+KPsCBFdmVudG8gVMOpcm1pbm8nLCBkLmhvcmFfdGVybWlubyAmJiBkLmhvcmFfdGVybWlubyAhPT0gJ+KAlCcgPyBkLmhvcmFfdGVybWlubyA6ICcnKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/CfjqQgQXRyYcOnw7VlcycsIGQuYXRyYWNhbyk7CiAgICAgICAgICAgICAgICBodG1sICs9IGN0KCfwn5WQIEhvcmEgRW50cmFkYScsIGQuaG9yYV9lbnRyYWRhICYmIGQuaG9yYV9lbnRyYWRhICE9PSAn4oCUJyA/IGQuaG9yYV9lbnRyYWRhIDogJycpOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+VkCBIb3JhIFNhw61kYScsIGQuaG9yYV9zYWlkYSAmJiBkLmhvcmFfc2FpZGEgIT09ICfigJQnID8gZC5ob3JhX3NhaWRhIDogJycpOwogICAgICAgICAgICAgICAgaWYgKGQuZHVyYWNhbyAmJiBkLmR1cmFjYW8gIT09ICfigJQnKSBodG1sICs9IGN0KCfij7EgRHVyYcOnw6NvJywgZC5kdXJhY2FvICsgJyBtaW4nKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/Cfk40gTG9jYWwnLCBkLmxvY2FsX2V2ZW50byk7CiAgICAgICAgICAgICAgICBodG1sICs9IGN0KCfwn4+gIEVuZGVyZcOnbyBldmVudG8nLCBkLmVuZGVyZWNvKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/Cfj5ggQmFpcnJvJywgZC5iYWlycm8gIT09ICfigJQnID8gZC5iYWlycm8gOiAnJyk7CiAgICAgICAgICAgICAgICBpZiAoZC5jaWRhZGUgIT09ICfigJQnICYmIGQuZXN0YWRvICE9PSAn4oCUJykgaHRtbCArPSBjdCgn8J+MhiBDaWRhZGUvVUYnLCBkLmNpZGFkZSsnLycrZC5lc3RhZG8pOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+knSBBc3Nlc3NvcicsIGQuYXNzZXNzb3IpOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+SrCBPYnMgY2xpZW50ZScsIGQub2JzICE9PSAn4oCUJyA/IGQub2JzIDogJycpOwogICAgICAgICAgICAgICAgLy8gREFET1MgSU5URVJOT1MKICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxociBjbGFzcz0idm0yLWN0LXNlcCI+PGRpdiBjbGFzcz0idm0yLWN0LXNlY3Rpb24iPvCflJIgREFET1MgSU5URVJOT1M8L2Rpdj4nOwogICAgICAgICAgICAgICAgaHRtbCArPSBjdCgn8J+RpCBDbGllbnRlJywgZC5ub21lKTsKICAgICAgICAgICAgICAgIGlmIChkLmNwZiAmJiBkLmNwZiAhPT0gJ+KAlCcpIGh0bWwgKz0gY3QoJ/CfqqogQ1BGL0NOUEonLCBkLmNwZik7CiAgICAgICAgICAgICAgICBodG1sICs9IGN0KCfwn5OxIFdoYXRzQXBwJywgZC50ZWxlZm9uZSk7CiAgICAgICAgICAgICAgICBodG1sICs9IGN0KCfinInvuI8gRS1tYWlsJywgZC5lbWFpbCk7CiAgICAgICAgICAgICAgICBpZiAoZC5lbXByZXNhICYmIGQuZW1wcmVzYSAhPT0gJ+KAlCcpIGh0bWwgKz0gY3QoJ/Cfj6IgRW1wcmVzYScsIGQuZW1wcmVzYSk7CiAgICAgICAgICAgICAgICBpZiAoZC5iaWxfYWRkciAmJiBkLmJpbF9hZGRyICE9PSAn4oCUJykgewogICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/Cfk6wgRW5kLiBjb2JyYW7Dp2EnLCBkLmJpbF9hZGRyICsgKGQuYmlsX2NpZGFkZSAhPT0gJ+KAlCcgPyAnLCAnK2QuYmlsX2NpZGFkZSsnLycrZC5iaWxfZXN0YWRvIDogJycpKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZC5iaWxfY2VwICYmIGQuYmlsX2NlcCAhPT0gJ+KAlCcpIGh0bWwgKz0gY3QoJ/Cfk64gQ0VQJywgZC5iaWxfY2VwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxociBjbGFzcz0idm0yLWN0LXNlcCI+JzsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/Cfp74gUGVkaWRvJywgJyMnK2QubnVtZXJvKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/CfkrAgVmFsb3IgdG90YWwnLCBkLnZhbG9yKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/CfkrMgUGFnYW1lbnRvJywgZC5wZ3RvKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/Cfk6YgU3RhdHVzJywgZC5zdGF0dXNfcGVkaWRvKTsKICAgICAgICAgICAgICAgIGh0bWwgKz0gY3QoJ/Cfk50gQ2xpY2tTaWduJywgZC5jb250cmF0byk7CiAgICAgICAgICAgICAgICBpZiAoZC5jc19saW5rKSBodG1sICs9IGN0KCfwn5SXIExpbmsgY29udHJhdG8nLCAnPGEgaHJlZj0iJytkLmNzX2xpbmsrJyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjojMDk2OWRhIj5BYnJpciBkb2N1bWVudG88L2E+Jyk7CiAgICAgICAgICAgICAgICBpZiAoZC51dG1fc291cmNlICE9PSAn4oCUJykgaHRtbCArPSBjdCgn8J+UlyBPcmlnZW0nLCBkLnV0bV9zb3VyY2UpOwogICAgICAgICAgICAgICAgaWYgKGQudXRtX2NhbXBhaWduICE9PSAn4oCUJykgaHRtbCArPSBjdCgn8J+ToiBDYW1wYW5oYScsIGQudXRtX2NhbXBhaWduKTsKICAgICAgICAgICAgICAgIC8vIEHDp8O1ZXMKICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxociBjbGFzcz0idm0yLWN0LXNlcCI+PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwIj4nOwogICAgICAgICAgICAgICAgaHRtbCArPSAnPGEgaHJlZj0iJytkLmxpbmtfYWRtaW4rJyIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJ2bTItbWJ0biIgc3R5bGU9ImJhY2tncm91bmQ6I2YzZjBmZjtib3JkZXI6MXB4IHNvbGlkICNhNzhiZmE7Y29sb3I6IzZkMjhkOTtmb250LXNpemU6MTNweDtwYWRkaW5nOjlweCAxNnB4Ij7wn5SXIFZlciBQZWRpZG8gV1A8L2E+JzsKICAgICAgICAgICAgICAgIGlmIChkLnRlbGVmb25lKSBodG1sICs9ICc8YSBocmVmPSJodHRwczovL3dhLm1lLycrZC50ZWxlZm9uZSsnIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InZtMi1tYnRuIGdyZWVuIiBzdHlsZT0iZm9udC1zaXplOjEzcHg7cGFkZGluZzo5cHggMTZweCI+8J+SrCBXaGF0c0FwcDwvYT4nOwogICAgICAgICAgICAgICAgaHRtbCArPSAnPC9kaXY+JzsKICAgICAgICAgICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICBjb250ZW50LmlubmVySFRNTCA9ICc8ZGl2IHN0eWxlPSJjb2xvcjojZDEyNDJmO3BhZGRpbmc6MjBweCI+RXJybyBkZSBjb25leMOjby4gVGVudGUgbm92YW1lbnRlLjwvZGl2Pic7CiAgICAgICAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gdm0yQ2FsRGF5KGNlbGwpIHsKICAgICAgICB2YXIgc3BhbnMgPSBjZWxsLnF1ZXJ5U2VsZWN0b3JBbGwoJy52bTJhZ2V2Jyk7CiAgICAgICAgaWYgKCFzcGFucy5sZW5ndGgpIHJldHVybjsKICAgICAgICB2YXIgZXZlbnRzID0gW107CiAgICAgICAgc3BhbnMuZm9yRWFjaChmdW5jdGlvbihzKXsgZXZlbnRzLnB1c2goSlNPTi5wYXJzZShzLmRhdGFzZXQuZXZlbnQpKTsgfSk7CiAgICAgICAgaWYgKGV2ZW50cy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgdm0yT3Blbk1vZGFsKGV2ZW50c1swXSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLy8gTcO6bHRpcGxvcyBldmVudG9zOiBsaXN0YSBubyBtb2RhbAogICAgICAgIHZhciBlMCA9IGV2ZW50c1swXTsKICAgICAgICB2YXIgZHUgPSBlMC5kYXlzX3VudGlsOwogICAgICAgIHZhciB0YWcgPSBkdSA8IDAgPyAnPHNwYW4gc3R5bGU9ImNvbG9yOiM2ZTc3ODEiPuKckyBSZWFsaXphZG88L3NwYW4+JwogICAgICAgICAgICAgICAgOiBkdSA9PT0gMCA/ICc8c3BhbiBzdHlsZT0iY29sb3I6I2QxMjQyZjtmb250LXdlaWdodDo3MDAiPvCflLQgSE9KRSE8L3NwYW4+JwogICAgICAgICAgICAgICAgOiBkdSA9PT0gMSA/ICc8c3BhbiBzdHlsZT0iY29sb3I6I2UxNmYyNCI+4o+wIEFtYW5ow6M8L3NwYW4+JwogICAgICAgICAgICAgICAgOiAnPHNwYW4gc3R5bGU9ImNvbG9yOiM1NzYwNmEiPvCfk4UgRW0gJytkdSsnIGRpYXM8L3NwYW4+JzsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWdUaXRsZScpLmlubmVySFRNTCA9ICfwn5OFICcgKyBlMC5kYXRlX2ZtdCArICcg4oCUICcgKyBldmVudHMubGVuZ3RoICsgJyBldmVudG9zICcgKyB0YWc7CiAgICAgICAgdmFyIGh0bWwgPSAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTBweCI+JzsKICAgICAgICBldmVudHMuZm9yRWFjaChmdW5jdGlvbihldiwgaSkgewogICAgICAgICAgICB2YXIgY29sb3IgPSBldi5jb2xvciB8fCAnIzA5NjlkYSc7CiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItbGVmdDo0cHggc29saWQgJytjb2xvcisnO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyIgb25jbGljaz0idm0yT3Blbk1vZGFsKHZtMkFnRGF5RXZlbnRzWycraSsnXSkiIG9ubW91c2VvdmVyPSJ0aGlzLnN0eWxlLmJhY2tncm91bmQ9XCcjZjZmOGZhXCciIG9ubW91c2VvdXQ9InRoaXMuc3R5bGUuYmFja2dyb3VuZD1cJyNmZmZcJyI+JzsKICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1ib3R0b206NHB4Ij4nK2V2LmN1c3RvbWVyKyc8L2Rpdj4nOwogICAgICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNTc2MDZhO21hcmdpbi1ib3R0b206MnB4Ij7wn46tICcrKGV2LmF0cmFjb2VzfHwn4oCUJykrJzwvZGl2Pic7CiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NzYwNmEiPvCfjqogJysoZXYudGlwb3x8J+KAlCcpKyc8L2Rpdj4nOwogICAgICAgICAgICBpZiAoZXYuaG9tZW5hZ2VhZG8pIGh0bWwgKz0gJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1NzYwNmEiPvCfkZEgJytldi5ob21lbmFnZWFkbysnPC9kaXY+JzsKICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzA5NjlkYTttYXJnaW4tdG9wOjZweDtmb250LXdlaWdodDo2MDAiPlZlciBkZXRhbGhlcyDihpI8L2Rpdj4nOwogICAgICAgICAgICBodG1sICs9ICc8L2Rpdj4nOwogICAgICAgIH0pOwogICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7CiAgICAgICAgd2luZG93LnZtMkFnRGF5RXZlbnRzID0gZXZlbnRzOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJBZ0NvbnRlbnQnKS5pbm5lckhUTUwgPSBodG1sOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJBZ01vZGFsJykuY2xhc3NMaXN0LmFkZCgnb3BlbicpOwogICAgfQogICAgZnVuY3Rpb24gdm0yRmlsdGVyQWdlbmRhKCkgewogICAgICAgIHZhciBxICAgICA9ICgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFnU2VhcmNoJyl8fHt9KS52YWx1ZXx8JycpLnRvTG93ZXJDYXNlKCkudHJpbSgpOwogICAgICAgIHZhciBjYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy52bTItZXYtY2FyZCcpOwogICAgICAgIHZhciB2aXNpYmxlID0gMDsKICAgICAgICBjYXJkcy5mb3JFYWNoKGZ1bmN0aW9uKGNhcmQpIHsKICAgICAgICAgICAgdmFyIHMgID0gY2FyZC5kYXRhc2V0LnNlYXJjaCB8fCAnJzsKICAgICAgICAgICAgdmFyIG9rID0gIXEgfHwgcy5pbmRleE9mKHEpICE9PSAtMTsKICAgICAgICAgICAgY2FyZC5zdHlsZS5kaXNwbGF5ID0gb2sgPyAnJyA6ICdub25lJzsKICAgICAgICAgICAgaWYgKG9rKSB2aXNpYmxlKys7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFnQ291bnQnKTsKICAgICAgICBpZiAoZWwpIGVsLnRleHRDb250ZW50ID0gdmlzaWJsZSArICcgZXZlbnRvJyArICh2aXNpYmxlICE9PSAxID8gJ3MnIDogJycpOwogICAgfQogICAgZnVuY3Rpb24gdm0yQ2xlYXJTZWFyY2goKSB7CiAgICAgICAgdmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yQWdTZWFyY2gnKTsKICAgICAgICBpZiAocykgcy52YWx1ZSA9ICcnOwogICAgICAgIHZtMkZpbHRlckFnZW5kYSgpOwogICAgfQogICAgdmFyIHZtMkFnU3luY05vbmNlID0gJzw/cGhwIGVjaG8gZXNjX2pzKCRzeW5jX25vbmNlX2FnKTsgPz4nOwogICAgdmFyIHZtMkFnU3luY1N0YXR1c1VybCA9ICc8P3BocCBlY2hvIGVzY19qcygkYWdfc3luY19zdGF0dXNfdXJsKTsgPz4nOwogICAgdmFyIHZtMkFnTGFzdFN5bmNWYWwgPSAnPD9waHAgZWNobyBlc2NfanMoJGxhc3Rfc3luY19hZyk7ID8+JzsKICAgIGZ1bmN0aW9uIHZtMkFnU3luYygpIHsKICAgICAgICB2YXIgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMkFnU3luY0J0bicpOwogICAgICAgIGlmICghYnRuKSByZXR1cm47CiAgICAgICAgYnRuLmRpc2FibGVkID0gdHJ1ZTsgYnRuLnRleHRDb250ZW50ID0gJ+KPsyBBZ3VhcmRhbmRvLi4uJzsKICAgICAgICBmZXRjaChhamF4dXJsLCB7CiAgICAgICAgICAgIG1ldGhvZDonUE9TVCcsIGNyZWRlbnRpYWxzOidzYW1lLW9yaWdpbicsCiAgICAgICAgICAgIGhlYWRlcnM6eydDb250ZW50LVR5cGUnOidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnfSwKICAgICAgICAgICAgYm9keTonYWN0aW9uPXZtMl9hZ2VuZGFfdHJpZ2dlcl9zeW5jJm5vbmNlPScrdm0yQWdTeW5jTm9uY2UKICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiByLmpzb24oKTt9KS50aGVuKGZ1bmN0aW9uKGQpewogICAgICAgICAgICBpZiAoZC5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICBidG4udGV4dENvbnRlbnQgPSAn4pyFIFNpbmNyb25pemFuZG8uLi4nOwogICAgICAgICAgICAgICAgdmFyIHRyaWVzID0gMDsKICAgICAgICAgICAgICAgIHZhciBwb2xsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICB0cmllcysrOwogICAgICAgICAgICAgICAgICAgIGlmICh0cmllcyA+IDMwKSB7IGNsZWFySW50ZXJ2YWwocG9sbCk7IGJ0bi5kaXNhYmxlZD1mYWxzZTsgYnRuLnRleHRDb250ZW50PSfwn5SEIFNpbmNyb25pemFyIFBsYW5pbGhhJzsgcmV0dXJuOyB9CiAgICAgICAgICAgICAgICAgICAgZmV0Y2godm0yQWdTeW5jU3RhdHVzVXJsLCB7Y3JlZGVudGlhbHM6J3NhbWUtb3JpZ2luJ30pCiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiByLmpzb24oKTt9KQogICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihzKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLmxhc3Rfc3luYyAmJiBzLmxhc3Rfc3luYyAhPT0gdm0yQWdMYXN0U3luY1ZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwocG9sbCk7IGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0sIDMwMDApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYnRuLmRpc2FibGVkPWZhbHNlOyBidG4udGV4dENvbnRlbnQ9J/CflIQgU2luY3Jvbml6YXIgUGxhbmlsaGEnOwogICAgICAgICAgICAgICAgYWxlcnQoJ0Vycm86ICcgKyAoZC5kYXRhfHwnRGVzY29uaGVjaWRvJykpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CiAgICA8L3NjcmlwdD4KICAgIDwvZGl2PgogICAgPD9waHAKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEFHRU5EQSDigJQgRElTUEFUQ0ggQUxFUlRBUyAoY3JvbiBkacOhcmlvKQovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2Rpc3BhdGNoX2FnZW5kYV9hbGVydHMoKSB7CiAgICBpZiAoICEgZ2V0X29wdGlvbigndm0yX2FnZW5kYV9hbGVydHNfZ2xvYmFsX2VuYWJsZWQnLCAxKSApIHsKICAgICAgICB2bTJfbG9nKCdhZ2VuZGFfYWxlcnRzOiBkZXNhYmlsaXRhZG8gZ2xvYmFsbWVudGUnLCAnaW5mbycpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgICRydWxlcyA9IGdldF9vcHRpb24oJ3ZtMl9hZ2VuZGFfYWxlcnRzJywgW10pOwogICAgaWYgKCBlbXB0eSgkcnVsZXMpIHx8ICEgaXNfYXJyYXkoJHJ1bGVzKSApIHJldHVybjsKCiAgICAkZ3NfZXZlbnRzID0gZ2V0X29wdGlvbigndm0yX2FnZW5kYV9nc2hlZXRzJywgW10pOwogICAgaWYgKCAhIGlzX2FycmF5KCRnc19ldmVudHMpICkgJGdzX2V2ZW50cyA9IGpzb25fZGVjb2RlKCRnc19ldmVudHMsIHRydWUpID86IFtdOwogICAgaWYgKCBlbXB0eSgkZ3NfZXZlbnRzKSApIHsKICAgICAgICB2bTJfbG9nKCdhZ2VuZGFfYWxlcnRzOiBzZW0gZXZlbnRvcyBubyBHU2hlZXRzJywgJ2luZm8nKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJHRvZGF5X3RzICA9IHN0cnRvdGltZSggY3VycmVudF90aW1lKCdZLW0tZCcpICk7CiAgICAkbG9nICAgICAgID0gZ2V0X29wdGlvbigndm0yX2FnZW5kYV9hbGVydHNfbG9nJywgW10pOwogICAgaWYgKCAhIGlzX2FycmF5KCRsb2cpICkgJGxvZyA9IFtdOwogICAgJGRheXNfcHQgICA9IFsnU3VuZGF5Jz0+J0RvbWluZ28nLCdNb25kYXknPT4nU2VndW5kYScsJ1R1ZXNkYXknPT4nVGVyw6dhJywnV2VkbmVzZGF5Jz0+J1F1YXJ0YScsJ1RodXJzZGF5Jz0+J1F1aW50YScsJ0ZyaWRheSc9PidTZXh0YScsJ1NhdHVyZGF5Jz0+J1PDoWJhZG8nXTsKICAgICRzZW50X3RvdGFsID0gMDsKCiAgICBmb3JlYWNoICggJHJ1bGVzIGFzICRydWxlICkgewogICAgICAgIGlmICggZW1wdHkoJHJ1bGVbJ2VuYWJsZWQnXSkgKSAgIGNvbnRpbnVlOwogICAgICAgIGlmICggZW1wdHkoJHJ1bGVbJ2dyb3VwX2lkJ10pICkgIGNvbnRpbnVlOwogICAgICAgIGlmICggZW1wdHkoJHJ1bGVbJ2NoYW5uZWwnXSkgKSAgIGNvbnRpbnVlOwogICAgICAgIGlmICggZW1wdHkoJHJ1bGVbJ21lc3NhZ2UnXSkgKSAgIGNvbnRpbnVlOwoKICAgICAgICAkZGF5c19iZWZvcmUgPSBpbnR2YWwoJHJ1bGVbJ2RheXNfYmVmb3JlJ10pOwogICAgICAgICRydWxlX2lkICAgICA9ICRydWxlWydpZCddID8/IG1kNShqc29uX2VuY29kZSgkcnVsZSkpOwoKICAgICAgICBmb3JlYWNoICggJGdzX2V2ZW50cyBhcyAkcm93ICkgewogICAgICAgICAgICBpZiAoIGVtcHR5KCRyb3dbJ2RhdGFfZmVzdGEnXSkgKSBjb250aW51ZTsKICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnLycsICRyb3dbJ2RhdGFfZmVzdGEnXSk7CiAgICAgICAgICAgIGlmICggY291bnQoJHBhcnRzKSAhPT0gMyApIGNvbnRpbnVlOwogICAgICAgICAgICAkdHMgPSBta3RpbWUoMCwgMCwgMCwgKGludCkkcGFydHNbMV0sIChpbnQpJHBhcnRzWzBdLCAoaW50KSRwYXJ0c1syXSk7CiAgICAgICAgICAgIGlmICggISAkdHMgKSBjb250aW51ZTsKCiAgICAgICAgICAgICRkYXlzX3VudGlsID0gaW50dmFsKCAoICR0cyAtICR0b2RheV90cyApIC8gODY0MDAgKTsKICAgICAgICAgICAgaWYgKCAkZGF5c191bnRpbCAhPT0gJGRheXNfYmVmb3JlICkgY29udGludWU7CgogICAgICAgICAgICAvLyBEZWR1cGxpY2HDp8OjbzogbWVzbW8gYWxlcnRhIG7Do28gZW52aWEgMnggcGFyYSBtZXNtbyBldmVudG8KICAgICAgICAgICAgJGV2X2tleSAgPSAkcm93Wydyb3cnXSA/PyBtZDUoICRyb3dbJ2RhdGFfZmVzdGEnXSAuICgkcm93WydwcmVzdGFkb3InXSA/PyAnJykgKTsKICAgICAgICAgICAgJGxvZ19rZXkgPSAkcnVsZV9pZCAuICdfJyAuICRldl9rZXkgLiAnXycgLiAkZGF5c19iZWZvcmU7CiAgICAgICAgICAgIGlmICggaW5fYXJyYXkoJGxvZ19rZXksICRsb2csIHRydWUpICkgewogICAgICAgICAgICAgICAgdm0yX2xvZygiYWdlbmRhX2FsZXJ0czogasOhIGVudmlhZG8gKCRsb2dfa2V5KSIsICdpbmZvJyk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gTW9udGFyIHZhcmnDoXZlaXMKICAgICAgICAgICAgJHByZXN0YWRvciAgID0gdHJpbSgkcm93WydwcmVzdGFkb3InXSA/PyAnJyk7CiAgICAgICAgICAgICR0aXBvICAgICAgICA9IHRyaW0oJHJvd1sndGlwbyddID8/ICcnKTsKICAgICAgICAgICAgJGhvbWVuYWdlYWRvID0gdHJpbSgkcm93Wydob21lbmFnZWFkbyddID8/ICcnKTsKICAgICAgICAgICAgaWYgKCEkdGlwbyAmJiAhJGhvbWVuYWdlYWRvKSB7CiAgICAgICAgICAgICAgICAvLyBUZW50YSBwYXJzZWFyIGRvIGJsb2IKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJHJvd1snZXZlbnRvX2Jsb2InXSkpIHsKICAgICAgICAgICAgICAgICAgICAkcGFyc2VkICAgICAgPSB2bTJfcGFyc2VfYWdlbmRhX2Jsb2IoJHJvd1snZXZlbnRvX2Jsb2InXSk7CiAgICAgICAgICAgICAgICAgICAgJHRpcG8gICAgICAgID0gJHRpcG8gICAgICAgID86ICRwYXJzZWRbJ3RpcG8nXTsKICAgICAgICAgICAgICAgICAgICAkaG9tZW5hZ2VhZG8gPSAkaG9tZW5hZ2VhZG8gPzogJHBhcnNlZFsnaG9tZW5hZ2VhZG8nXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkdmFycyA9IFsKICAgICAgICAgICAgICAgICd7ZGF0YX0nICAgICAgICA9PiBkYXRlKCdkL20vWScsICR0cyksCiAgICAgICAgICAgICAgICAne2RpYV9zZW1hbmF9JyAgPT4gJGRheXNfcHRbIGRhdGUoJ2wnLCAkdHMpIF0gPz8gJycsCiAgICAgICAgICAgICAgICAne3RpcG99JyAgICAgICAgPT4gJHRpcG8gICAgICAgID86ICfigJQnLAogICAgICAgICAgICAgICAgJ3tob21lbmFnZWFkb30nID0+ICRob21lbmFnZWFkbyA/OiAn4oCUJywKICAgICAgICAgICAgICAgICd7cHJlc3RhZG9yfScgICA9PiAkcHJlc3RhZG9yICAgPzogJ+KAlCcsCiAgICAgICAgICAgICAgICAne2xvY2FsfScgICAgICAgPT4gdHJpbSgkcm93Wydsb2NhbCddID8/ICcnKSAgICA/OiAn4oCUJywKICAgICAgICAgICAgICAgICd7ZW5kZXJlY299JyAgICA9PiB0cmltKCRyb3dbJ2VuZGVyZWNvJ10gPz8gJycpICA/OiAn4oCUJywKICAgICAgICAgICAgICAgICd7YXNzZXNzb3J9JyAgICA9PiB0cmltKCRyb3dbJ2Fzc2Vzc29yJ10gPz8gJycpICA/OiAn4oCUJywKICAgICAgICAgICAgICAgICd7aG9yYXJpb30nICAgICA9PiB0cmltKCRyb3dbJ2hvcmFyaW8nXSA/PyAnJykgICA/OiAn4oCUJywKICAgICAgICAgICAgICAgICd7Y3VzdG99JyAgICAgICA9PiB0cmltKCRyb3dbJ2N1c3RvJ10gPz8gJycpICAgICA/OiAn4oCUJywKICAgICAgICAgICAgICAgICd7ZGlhc19hbnRlc30nICA9PiAkZGF5c19iZWZvcmUsCiAgICAgICAgICAgIF07CiAgICAgICAgICAgICRtc2cgPSBzdHJfcmVwbGFjZSggYXJyYXlfa2V5cygkdmFycyksIGFycmF5X3ZhbHVlcygkdmFycyksICRydWxlWydtZXNzYWdlJ10gKTsKCiAgICAgICAgICAgICRvayA9IHZtMl9zZW5kX3phcGkoICRydWxlWydjaGFubmVsJ10sICRydWxlWydncm91cF9pZCddLCAkbXNnICk7CiAgICAgICAgICAgIGlmICggJG9rICE9PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICRsb2dbXSA9ICRsb2dfa2V5OwogICAgICAgICAgICAgICAgJHNlbnRfdG90YWwrKzsKICAgICAgICAgICAgICAgIHZtMl9sb2coImFnZW5kYV9hbGVydHM6IGVudmlhZG8gcnVsZT17JHJ1bGVfaWR9IGV2ZW50bz17JHJvd1snZGF0YV9mZXN0YSddfSB7JHByZXN0YWRvcn0gKHskZGF5c19iZWZvcmV9ZCBhbnRlcykiLCAnaW5mbycpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdm0yX2xvZygiYWdlbmRhX2FsZXJ0czogRkFMSEEgcnVsZT17JHJ1bGVfaWR9IGV2ZW50bz17JHJvd1snZGF0YV9mZXN0YSddfSIsICdlcnJvcicpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIFRyaW0gbG9nIHBhcmEgbcOheCAyMDAwIGVudHJhZGFzCiAgICBpZiAoIGNvdW50KCRsb2cpID4gMjAwMCApICRsb2cgPSBhcnJheV9zbGljZSgkbG9nLCAtMjAwMCk7CiAgICB1cGRhdGVfb3B0aW9uKCd2bTJfYWdlbmRhX2FsZXJ0c19sb2cnLCAkbG9nKTsKICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9hZ2VuZGFfYWxlcnRzX2xhc3RfcnVuJywgY3VycmVudF90aW1lKCdteXNxbCcpKTsKCiAgICBpZiAoJHNlbnRfdG90YWwgPiAwKSB2bTJfbG9nKCJhZ2VuZGFfYWxlcnRzOiB7JHNlbnRfdG90YWx9IGFsZXJ0YXMgZW52aWFkb3MiLCAnaW5mbycpOwp9CmFkZF9hY3Rpb24oJ3ZtMl9hZ2VuZGFfYWxlcnRfY3JvbicsICd2bTJfZGlzcGF0Y2hfYWdlbmRhX2FsZXJ0cycpOwoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEFKQVgg4oCUIFRFU1RFIERFIEVOVklPCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyDilIDilIAgQUpBWDogQ29udHJhdG8gZG8gUGVkaWRvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9jb250cmF0b19kYXRhJywgZnVuY3Rpb24oKSB7CiAgICBpZiAoIWN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykpIHdwX3NlbmRfanNvbl9lcnJvcignU2VtIHBlcm1pc3PDo28nKTsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX2NvbnRyYXRvJywgJ25vbmNlJyk7CiAgICAkb3JkZXJfaWQgPSBpbnR2YWwoJF9QT1NUWydvcmRlcl9pZCddID8/IDApOwogICAgaWYgKCEkb3JkZXJfaWQpIHdwX3NlbmRfanNvbl9lcnJvcignSUQgaW52w6FsaWRvJyk7CiAgICAkb3JkZXIgPSB3Y19nZXRfb3JkZXIoJG9yZGVyX2lkKTsKICAgIGlmICghJG9yZGVyKSB3cF9zZW5kX2pzb25fZXJyb3IoJ1BlZGlkbyBuw6NvIGVuY29udHJhZG8nKTsKCiAgICAkdmFycyA9IHZtMl9idWlsZF9vcmRlcl92YXJzKCRvcmRlcik7CgogICAgJGJpbGxpbmdfYWRkcjEgICA9ICRvcmRlci0+Z2V0X2JpbGxpbmdfYWRkcmVzc18xKCkgPzogJ+KAlCc7CiAgICAkYmlsbGluZ19hZGRyMiAgID0gJG9yZGVyLT5nZXRfYmlsbGluZ19hZGRyZXNzXzIoKSA/OiAnJzsKICAgICRiaWxsaW5nX2NpdHkgICAgPSAkb3JkZXItPmdldF9iaWxsaW5nX2NpdHkoKSA/OiAn4oCUJzsKICAgICRiaWxsaW5nX3N0YXRlICAgPSAkb3JkZXItPmdldF9iaWxsaW5nX3N0YXRlKCkgPzogJ+KAlCc7CiAgICAkYmlsbGluZ19wb3N0ICAgID0gJG9yZGVyLT5nZXRfYmlsbGluZ19wb3N0Y29kZSgpID86ICfigJQnOwogICAgJGJpbGxpbmdfY3BmICAgICA9ICRvcmRlci0+Z2V0X21ldGEoJ19iaWxsaW5nX2NwZicpCiAgICAgICAgICAgICAgICAgICAgPzogJG9yZGVyLT5nZXRfbWV0YSgnYmlsbGluZ19jcGYnKQogICAgICAgICAgICAgICAgICAgID86ICRvcmRlci0+Z2V0X21ldGEoJ19iaWxsaW5nX2NucGonKQogICAgICAgICAgICAgICAgICAgID86ICfigJQnOwogICAgJGJpbGxpbmdfY29tcGFueSA9ICRvcmRlci0+Z2V0X2JpbGxpbmdfY29tcGFueSgpID86ICfigJQnOwogICAgJHN0YXR1c19sYWJlbCAgICA9IHdjX2dldF9vcmRlcl9zdGF0dXNfbmFtZSgkb3JkZXItPmdldF9zdGF0dXMoKSkgPzogJG9yZGVyLT5nZXRfc3RhdHVzKCk7CgogICAgLy8gQ2xpY2tTaWduIGRvYyBrZXkgLyBzaWduaW5nIFVSTAogICAgJGNzX2xpbmsgPSAkb3JkZXItPmdldF9tZXRhKCdfY2xpY2tzaWduX2RvY3VtZW50X2tleScpCiAgICAgICAgICAgID86ICRvcmRlci0+Z2V0X21ldGEoJ19jbGlja3NpZ25fc2lnbmluZ191cmwnKQogICAgICAgICAgICA/OiAkb3JkZXItPmdldF9tZXRhKCdfY2xpY2tzaWduX2RvY3VtZW50X3VybCcpCiAgICAgICAgICAgID86ICcnOwoKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsKICAgICAgICAvLyBDbGllbnRlCiAgICAgICAgJ25vbWUnICAgICAgICAgID0+ICR2YXJzWyd7bm9tZX0nXSwKICAgICAgICAndGVsZWZvbmUnICAgICAgPT4gJHZhcnNbJ3t0ZWxlZm9uZX0nXSwKICAgICAgICAnZW1haWwnICAgICAgICAgPT4gJHZhcnNbJ3tlbWFpbH0nXSwKICAgICAgICAnY3BmJyAgICAgICAgICAgPT4gJGJpbGxpbmdfY3BmLAogICAgICAgICdlbXByZXNhJyAgICAgICA9PiAkYmlsbGluZ19jb21wYW55LAogICAgICAgICdiaWxfYWRkcicgICAgICA9PiB0cmltKCRiaWxsaW5nX2FkZHIxIC4gKCRiaWxsaW5nX2FkZHIyID8gJywgJy4kYmlsbGluZ19hZGRyMiA6ICcnKSksCiAgICAgICAgJ2JpbF9jaWRhZGUnICAgID0+ICRiaWxsaW5nX2NpdHksCiAgICAgICAgJ2JpbF9lc3RhZG8nICAgID0+ICRiaWxsaW5nX3N0YXRlLAogICAgICAgICdiaWxfY2VwJyAgICAgICA9PiAkYmlsbGluZ19wb3N0LAogICAgICAgIC8vIEV2ZW50bwogICAgICAgICd0aXBvX2V2ZW50bycgICA9PiAkdmFyc1sne3RpcG9fZXZlbnRvfSddLAogICAgICAgICdob21lbmFnZWFkbycgICA9PiAkdmFyc1sne2hvbWVuYWdlYWRvfSddLAogICAgICAgICdkYXRhX2V2ZW50bycgICA9PiAkdmFyc1sne2RhdGFfZXZlbnRvfSddLAogICAgICAgICdob3JhX2luaWNpbycgICA9PiAkdmFyc1sne2hvcmFfaW5pY2lvfSddLAogICAgICAgICdob3JhX3Rlcm1pbm8nICA9PiAkdmFyc1sne2hvcmFfdGVybWlub30nXSwKICAgICAgICAnaG9yYV9lbnRyYWRhJyAgPT4gJHZhcnNbJ3tob3JhX2VudHJhZGF9J10sCiAgICAgICAgJ2hvcmFfc2FpZGEnICAgID0+ICR2YXJzWyd7aG9yYV9zYWlkYX0nXSwKICAgICAgICAnZHVyYWNhbycgICAgICAgPT4gJHZhcnNbJ3tkdXJhY2FvfSddLAogICAgICAgICdhdHJhY2FvJyAgICAgICA9PiAkdmFyc1sne2F0cmFjYW99J10sCiAgICAgICAgJ2xvY2FsX2V2ZW50bycgID0+ICR2YXJzWyd7bG9jYWxfZXZlbnRvfSddLAogICAgICAgICdlbmRlcmVjbycgICAgICA9PiAkdmFyc1sne2VuZGVyZWNvfSddLAogICAgICAgICdiYWlycm8nICAgICAgICA9PiAkdmFyc1sne2JhaXJyb30nXSwKICAgICAgICAnY2lkYWRlJyAgICAgICAgPT4gJHZhcnNbJ3tjaWRhZGV9J10sCiAgICAgICAgJ2VzdGFkbycgICAgICAgID0+ICR2YXJzWyd7ZXN0YWRvfSddLAogICAgICAgICdhc3Nlc3NvcicgICAgICA9PiAkdmFyc1sne2Fzc2Vzc29yfSddLAogICAgICAgICdvYnMnICAgICAgICAgICA9PiAkdmFyc1sne29ic30nXSwKICAgICAgICAvLyBGaW5hbmNlaXJvCiAgICAgICAgJ251bWVybycgICAgICAgID0+ICR2YXJzWyd7bnVtZXJvfSddLAogICAgICAgICd2YWxvcicgICAgICAgICA9PiAnUiQgJyAuICR2YXJzWyd7dmFsb3J9J10sCiAgICAgICAgJ3BndG8nICAgICAgICAgID0+ICR2YXJzWyd7cGd0b30nXSwKICAgICAgICAnc3RhdHVzX3BlZGlkbycgPT4gJHN0YXR1c19sYWJlbCwKICAgICAgICAvLyBDbGlja1NpZ24KICAgICAgICAnY29udHJhdG8nICAgICAgPT4gJHZhcnNbJ3tjb250cmF0b30nXSwKICAgICAgICAnY3NfbGluaycgICAgICAgPT4gJGNzX2xpbmssCiAgICAgICAgLy8gVVRNCiAgICAgICAgJ3V0bV9zb3VyY2UnICAgID0+ICR2YXJzWyd7dXRtX3NvdXJjZX0nXSwKICAgICAgICAndXRtX2NhbXBhaWduJyAgPT4gJHZhcnNbJ3t1dG1fY2FtcGFpZ259J10sCiAgICAgICAgLy8gTGluayBhZG1pbgogICAgICAgICdsaW5rX2FkbWluJyAgICA9PiAkdmFyc1sne2xpbmtfYWRtaW59J10sCiAgICBdKTsKfSk7CgphZGRfYWN0aW9uKCAnd3BfYWpheF92bTJfdGVzdF9zZW5kJywgJ3ZtMl9hamF4X3Rlc3Rfc2VuZCcgKTsKZnVuY3Rpb24gdm0yX2FqYXhfdGVzdF9zZW5kKCkgewogICAgaWYgKCAhIGNoZWNrX2FqYXhfcmVmZXJlciggJ3ZtMl90ZXN0X3NlbmQnLCAnbm9uY2UnLCBmYWxzZSApICkgewogICAgICAgIHdwX3NlbmRfanNvbl9lcnJvciggWyAnbWVzc2FnZScgPT4gJ05vbmNlIGludsOhbGlkbycgXSApOwogICAgfQogICAgaWYgKCAhIGN1cnJlbnRfdXNlcl9jYW4oICdtYW5hZ2Vfb3B0aW9ucycgKSApIHsKICAgICAgICB3cF9zZW5kX2pzb25fZXJyb3IoIFsgJ21lc3NhZ2UnID0+ICdTZW0gcGVybWlzc8OjbycgXSApOwogICAgfQoKICAgICRwaG9uZSAgICA9IHByZWdfcmVwbGFjZSggJy9cRC8nLCAnJywgc2FuaXRpemVfdGV4dF9maWVsZCggd3BfdW5zbGFzaCggJF9QT1NUWydwaG9uZSddID8/ICcnICkgKSApOwogICAgJG9yZGVyX2lkID0gaW50dmFsKCAkX1BPU1RbJ29yZGVyX2lkJ10gPz8gMCApOwogICAgJG1lc3NhZ2UgID0gc2FuaXRpemVfdGV4dGFyZWFfZmllbGQoIHdwX3Vuc2xhc2goICRfUE9TVFsnbWVzc2FnZSddID8/ICcnICkgKTsKICAgICRjaGFubmVsICA9IHNhbml0aXplX2tleSggJF9QT1NUWydjaGFubmVsJ10gPz8gJ3phcGlfNzU1MScgKTsKICAgICRpc193YWJhICA9ICEgZW1wdHkoICRfUE9TVFsnaXNfd2FiYSddICk7CiAgICAkdGVtcGxhdGUgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCB3cF91bnNsYXNoKCAkX1BPU1RbJ3RlbXBsYXRlJ10gPz8gJycgKSApOwoKICAgIGlmICggISAkcGhvbmUgfHwgc3RybGVuKCAkcGhvbmUgKSA8IDEwICkgewogICAgICAgIHdwX3NlbmRfanNvbl9lcnJvciggWyAnbWVzc2FnZScgPT4gJ07Dum1lcm8gaW52w6FsaWRvLiBVc2UgZm9ybWF0bzogNTUxMTk5OTg4Nzc2NicgXSApOwogICAgfQoKICAgIGlmICggJGlzX3dhYmEgKSB7CiAgICAgICAgLy8gRW52aW8gdmlhIFdBQkEgY29tIHRlbXBsYXRlCiAgICAgICAgaWYgKCAhICR0ZW1wbGF0ZSApIHsKICAgICAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCBbICdtZXNzYWdlJyA9PiAnU2VsZWNpb25lIHVtIHRlbXBsYXRlIFdBQkEgYW50ZXMgZGUgZW52aWFyLicgXSApOwogICAgICAgIH0KICAgICAgICAvLyBNb250YXIgY29tcG9uZW50cyB2aWEgaGVscGVyIGNlbnRyYWxpemFkbwogICAgICAgICR0ZXN0X25hbWUgID0gc2FuaXRpemVfdGV4dF9maWVsZCggd3BfdW5zbGFzaCggJF9QT1NUWyd0ZXN0X25hbWUnXSA/PyAnVGVzdGUnICkgKTsKICAgICAgICAkY29tcG9uZW50cyA9IHZtMl93YWJhX3RlbXBsYXRlX2NvbXBvbmVudHMoICR0ZW1wbGF0ZSwgJHRlc3RfbmFtZSApOwoKICAgICAgICAkcmVzdWx0ID0gdm0yX3NlbmRfd2FiYSggJGNoYW5uZWwsICRwaG9uZSwgJHRlbXBsYXRlLCAkY29tcG9uZW50cyApOwogICAgICAgIGlmICggJHJlc3VsdCAmJiAhIGVtcHR5KCAkcmVzdWx0WydvayddICkgKSB7CiAgICAgICAgICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCBbICdtZXNzYWdlJyA9PiAnVGVtcGxhdGUgV0FCQSBlbnZpYWRvISDinIUnIF0gKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZGV0YWlsID0gJyc7CiAgICAgICAgICAgIGlmICggaXNfYXJyYXkoICRyZXN1bHQgKSAmJiAhIGVtcHR5KCAkcmVzdWx0Wydib2R5J10gKSApIHsKICAgICAgICAgICAgICAgICRkZWNvZGVkID0ganNvbl9kZWNvZGUoICRyZXN1bHRbJ2JvZHknXSwgdHJ1ZSApOwogICAgICAgICAgICAgICAgJGRldGFpbCAgPSAkZGVjb2RlZFsnZXJyb3InXVsnbWVzc2FnZSddID8/ICRyZXN1bHRbJ2JvZHknXTsKICAgICAgICAgICAgfQogICAgICAgICAgICB3cF9zZW5kX2pzb25fZXJyb3IoIFsgJ21lc3NhZ2UnID0+ICdGYWxoYSBXQUJBICgnIC4gKCAkcmVzdWx0Wydjb2RlJ10gPz8gJz8nICkgLiAnKTogJyAuICRkZXRhaWwgXSApOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8gU3Vic3RpdHVpciB2YXJpw6F2ZWlzIGNvbSBkYWRvcyBkbyBwZWRpZG8KICAgICR2YXJzID0gW107CiAgICBpZiAoICRvcmRlcl9pZCAmJiBmdW5jdGlvbl9leGlzdHMoICd3Y19nZXRfb3JkZXInICkgKSB7CiAgICAgICAgJG9yZGVyID0gd2NfZ2V0X29yZGVyKCAkb3JkZXJfaWQgKTsKICAgICAgICBpZiAoICRvcmRlciApIHsKICAgICAgICAgICAgJHZhcnMgPSB2bTJfYnVpbGRfb3JkZXJfdmFycyggJG9yZGVyICk7CiAgICAgICAgfQogICAgfQoKICAgICRmaW5hbF9tc2cgPSB2bTJfcmVwbGFjZV92YXJzKCAkbWVzc2FnZSwgJHZhcnMgKTsKICAgICRvayAgICAgICAgPSB2bTJfc2VuZF96YXBpKCAkY2hhbm5lbCwgJHBob25lLCAkZmluYWxfbXNnICk7CgogICAgaWYgKCAkb2sgKSB7CiAgICAgICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoIFsgJ21lc3NhZ2UnID0+ICdNZW5zYWdlbSBlbnZpYWRhIScgXSApOwogICAgfSBlbHNlIHsKICAgICAgICB3cF9zZW5kX2pzb25fZXJyb3IoIFsgJ21lc3NhZ2UnID0+ICdGYWxoYSBhbyBlbnZpYXIuIFZlcmlmaXF1ZSBvIExvZyBkbyBXb29Db21tZXJjZSAoU3RhdHVzID4gTG9ncyA+IHZpdmFtYWlzLWNybS12MikuJyBdICk7CiAgICB9Cn0KCi8vIOKUgOKUgOKUgCBTeW5jIE1hbnVhbCBLb21tbyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbiggJ3dwX2FqYXhfdm0yX21hbnVhbF9zeW5jJywgJ3ZtMl9tYW51YWxfc3luY19oYW5kbGVyJyApOwpmdW5jdGlvbiB2bTJfbWFudWFsX3N5bmNfaGFuZGxlcigpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlciggJ3ZtMl9tYW51YWxfc3luYycsICdub25jZScgKTsKICAgIGlmICggISBjdXJyZW50X3VzZXJfY2FuKCAnbWFuYWdlX29wdGlvbnMnICkgKSB3cF9zZW5kX2pzb25fZXJyb3IoIFsgJ21zZycgPT4gJ0FjZXNzbyBuZWdhZG8nIF0gKTsKICAgIEBzZXRfdGltZV9saW1pdCggMzAwICk7CgogICAgJGtvbW1vX3RvdGFsICA9IDA7CiAgICAkd29vX3N5bmNlZCAgID0gMDsKICAgICRsYXN0X2Vycm9yICAgPSBudWxsOwoKICAgIC8vIOKUgOKUgCBLb21tbyBzeW5jIOKUgOKUgAogICAgaWYgKCBmdW5jdGlvbl9leGlzdHMoICd2bV9rb21tb19ydW5fc3luYycgKSApIHsKICAgICAgICB2bV9rb21tb19ydW5fc3luYyggJGxhc3RfZXJyb3IgKTsKICAgICAgICBpZiAoICEgJGxhc3RfZXJyb3IgKSB7CiAgICAgICAgICAgIGdsb2JhbCAkd3BkYjsKICAgICAgICAgICAgJGtvbW1vX3RvdGFsID0gKGludCkgJHdwZGItPmdldF92YXIoICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bV9rb21tb19sZWFkcyIgKTsKICAgICAgICB9CiAgICB9CgogICAgLy8g4pSA4pSAIFdvb0NvbW1lcmNlIHN5bmMgKMO6bHRpbW9zIDkwIGRpYXMpIOKUgOKUgAogICAgaWYgKCBmdW5jdGlvbl9leGlzdHMoICd2bV9jcm1fcHJvY2Vzc193b29fb3JkZXInICkgJiYgZnVuY3Rpb25fZXhpc3RzKCAnd2NfZ2V0X29yZGVycycgKSApIHsKICAgICAgICAkb3JkZXJzID0gd2NfZ2V0X29yZGVycyggWwogICAgICAgICAgICAnbGltaXQnICAgICAgICA9PiA1MDAsCiAgICAgICAgICAgICdzdGF0dXMnICAgICAgID0+IFsgJ3Byb2Nlc3NpbmcnLCAnY29tcGxldGVkJywgJ29uLWhvbGQnLCAncGVuZGluZycgXSwKICAgICAgICAgICAgJ2RhdGVfY3JlYXRlZCcgPT4gJz4nIC4gKCB0aW1lKCkgLSA5MCAqIERBWV9JTl9TRUNPTkRTICksCiAgICAgICAgICAgICdyZXR1cm4nICAgICAgID0+ICdpZHMnLAogICAgICAgIF0gKTsKICAgICAgICBmb3JlYWNoICggJG9yZGVycyBhcyAkb3JkZXJfaWQgKSB7CiAgICAgICAgICAgIHZtX2NybV9wcm9jZXNzX3dvb19vcmRlciggJG9yZGVyX2lkICk7CiAgICAgICAgICAgICR3b29fc3luY2VkKys7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJGxhc3RfZXJyb3IgJiYgJHdvb19zeW5jZWQgPT09IDAgKSB7CiAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCBbICdtc2cnID0+ICRsYXN0X2Vycm9yIF0gKTsKICAgIH0KCiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyggWwogICAgICAgICdtc2cnID0+ICLinIUgU3luYyBjb21wbGV0byEgS29tbW86IHska29tbW9fdG90YWx9IGxlYWRzIHwgV29vQ29tbWVyY2U6IHskd29vX3N5bmNlZH0gcGVkaWRvcyBwcm9jZXNzYWRvcy4iLAogICAgXSApOwp9CgoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIExPRwovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2xvZyggJG1lc3NhZ2UsICRsZXZlbCA9ICdpbmZvJyApIHsKICAgIGlmICggY2xhc3NfZXhpc3RzKCAnV0NfTG9nZ2VyJyApICkgewogICAgICAgIHdjX2dldF9sb2dnZXIoKS0+bG9nKCAkbGV2ZWwsICdbVk0yXSAnIC4gJG1lc3NhZ2UsIFsgJ3NvdXJjZScgPT4gJ3ZpdmFtYWlzLWNybS12MicgXSApOwogICAgfQogICAgZXJyb3JfbG9nKCAnW1ZNMl1bJyAuIHN0cnRvdXBwZXIoICRsZXZlbCApIC4gJ10gJyAuICRtZXNzYWdlICk7CiAgICAvLyBHcmF2YSBubyBiYW5jbyAow7psdGltb3MgNTAwIHJlZ2lzdHJvcykKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0YmwgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9sb2dfZW50cmllcyc7CiAgICAkd3BkYi0+aW5zZXJ0KCAkdGJsLCBbCiAgICAgICAgJ2xldmVsJyAgICAgID0+IHN1YnN0cigkbGV2ZWwsIDAsIDIwKSwKICAgICAgICAnbWVzc2FnZScgICAgPT4gJG1lc3NhZ2UsCiAgICAgICAgJ2NyZWF0ZWRfYXQnID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwgLy8gVVRDIOKGkiB2bTJfbG9jYWxfZGF0ZSBjb252ZXJ0ZQogICAgXSwgWyclcycsJyVzJywnJXMnXSApOwogICAgc3RhdGljICRwcnVuZWQgPSBmYWxzZTsKICAgIGlmICggISAkcHJ1bmVkICkgewogICAgICAgICRwcnVuZWQgPSB0cnVlOwogICAgICAgICR3cGRiLT5xdWVyeSgiREVMRVRFIEZST00geyR0Ymx9IFdIRVJFIGlkIE5PVCBJTiAoU0VMRUNUIGlkIEZST00gKFNFTEVDVCBpZCBGUk9NIHskdGJsfSBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDUwMCkgdCkiKTsKICAgIH0KfQoKZnVuY3Rpb24gdm0yX2NyZWF0ZV9sb2dfZW50cmllc190YWJsZSgpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRjaGFyc2V0ID0gJHdwZGItPmdldF9jaGFyc2V0X2NvbGxhdGUoKTsKICAgICRzcWwgPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgeyR3cGRiLT5wcmVmaXh9dm0yX2xvZ19lbnRyaWVzICgKICAgICAgICBpZCAgICAgICAgIGJpZ2ludCgyMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgICAgbGV2ZWwgICAgICB2YXJjaGFyKDIwKSBOT1QgTlVMTCBERUZBVUxUICdpbmZvJywKICAgICAgICBtZXNzYWdlICAgIHRleHQgTk9UIE5VTEwsCiAgICAgICAgY3JlYXRlZF9hdCBkYXRldGltZSBOT1QgTlVMTCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogICAgICAgIFBSSU1BUlkgS0VZIChpZCksCiAgICAgICAgS0VZIGlkeF9jcmVhdGVkIChjcmVhdGVkX2F0KQogICAgKSB7JGNoYXJzZXR9OyI7CiAgICByZXF1aXJlX29uY2UgQUJTUEFUSCAuICd3cC1hZG1pbi9pbmNsdWRlcy91cGdyYWRlLnBocCc7CiAgICBkYkRlbHRhKCAkc3FsICk7Cn0KYWRkX2FjdGlvbiggJ3BsdWdpbnNfbG9hZGVkJywgJ3ZtMl9jcmVhdGVfbG9nX2VudHJpZXNfdGFibGUnLCA0ICk7CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gUEFSQ0VJUk9TICYgQVJUSVNUQVMg4oCUIFRBQkVMQVMgQkQKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBUQUJFTEEgdm0yX3NlbmRzIOKAlCDDoXJiaXRybyBjZW50cmFsIGRlIGNvb2xkb3duL2RlZHVwCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfY3JlYXRlX3NlbmRzX3RhYmxlKCkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJGNoYXJzZXQgPSAkd3BkYi0+Z2V0X2NoYXJzZXRfY29sbGF0ZSgpOwogICAgJHNxbCA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB7JHdwZGItPnByZWZpeH12bTJfc2VuZHMgKAogICAgICAgIGlkICAgICAgICAgIGJpZ2ludCgyMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgICAgcGhvbmUgICAgICAgdmFyY2hhcigzMCkgTk9UIE5VTEwsCiAgICAgICAgbW9kdWxlICAgICAgdmFyY2hhcig0MCkgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgICBjaGFubmVsX2tleSB2YXJjaGFyKDUwKSBOT1QgTlVMTCBERUZBVUxUICcnLAogICAgICAgIGNvbnRleHQgICAgIHRleHQgREVGQVVMVCBOVUxMLAogICAgICAgIHNlbnRfYXQgICAgIGRhdGV0aW1lIE5PVCBOVUxMIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgICAgICAgUFJJTUFSWSBLRVkgIChpZCksCiAgICAgICAgS0VZIGlkeF9waG9uZV9zZW50ICAgKHBob25lLCBzZW50X2F0KSwKICAgICAgICBLRVkgaWR4X2NoYW5uZWxfZGF0ZSAoY2hhbm5lbF9rZXksIHNlbnRfYXQpCiAgICApIHskY2hhcnNldH07IjsKICAgIHJlcXVpcmVfb25jZSBBQlNQQVRIIC4gJ3dwLWFkbWluL2luY2x1ZGVzL3VwZ3JhZGUucGhwJzsKICAgIGRiRGVsdGEoICRzcWwgKTsKCiAgICAvLyB2MS41LjExNzogQUREIENPTFVNTiBjb250ZXh0IHNlIG7Do28gZXhpc3RpciAodGFiZWxhcyBqw6EgY3JpYWRhcykKICAgICRjb2xfY2hlY2sgPSAkd3BkYi0+Z2V0X3ZhcigiU0hPVyBDT0xVTU5TIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzIExJS0UgJ2NvbnRleHQnIik7CiAgICBpZiAoICEgJGNvbF9jaGVjayApIHsKICAgICAgICAkd3BkYi0+cXVlcnkoIkFMVEVSIFRBQkxFIHskd3BkYi0+cHJlZml4fXZtMl9zZW5kcyBBREQgQ09MVU1OIGNvbnRleHQgdGV4dCBERUZBVUxUIE5VTEwgQUZURVIgY2hhbm5lbF9rZXkiKTsKICAgIH0KfQoKZnVuY3Rpb24gdm0yX2NyZWF0ZV9wYXJ0bmVyX3RhYmxlcygpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRjaGFyc2V0ID0gJHdwZGItPmdldF9jaGFyc2V0X2NvbGxhdGUoKTsKCiAgICAkc3FsID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyAoCiAgICAgICAgaWQgYmlnaW50KDIwKSBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwKICAgICAgICBuYW1lIHZhcmNoYXIoMjAwKSBOT1QgTlVMTCwKICAgICAgICBwaG9uZSB2YXJjaGFyKDMwKSwKICAgICAgICBlbWFpbCB2YXJjaGFyKDEwMCksCiAgICAgICAgYXRyYWNhbyB2YXJjaGFyKDUwMCksCiAgICAgICAgcmVnaWFvIHZhcmNoYXIoMjAwKSwKICAgICAgICBjaWRhZGUgdmFyY2hhcigxMDApLAogICAgICAgIGVzdGFkbyB2YXJjaGFyKDIpLAogICAgICAgIHN0YXR1cyB2YXJjaGFyKDIwKSBERUZBVUxUICdhdGl2bycsCiAgICAgICAgbnBzIGRlY2ltYWwoMywxKSBERUZBVUxUIE5VTEwsCiAgICAgICAgdG90YWxfZXZlbnRvcyBpbnQgREVGQVVMVCAwLAogICAgICAgIGNhY2hlX3RhZ3MgdmFyY2hhcig1MDApLAogICAgICAgIHdjX2NhdGVnb3JpZXMgdGV4dCBERUZBVUxUIE5VTEwsCiAgICAgICAgd2NfdGFncyB0ZXh0IERFRkFVTFQgTlVMTCwKICAgICAgICBvYnNlcnZhY29lcyB0ZXh0LAogICAgICAgIGNyZWF0ZWRfYXQgZGF0ZXRpbWUgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICB1cGRhdGVkX2F0IGRhdGV0aW1lIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAgT04gVVBEQVRFIENVUlJFTlRfVElNRVNUQU1QLAogICAgICAgIFBSSU1BUlkgS0VZIChpZCkKICAgICkgJGNoYXJzZXQ7IjsKCiAgICAkc3FsMiA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB7JHdwZGItPnByZWZpeH12bTJfYXZhaWxhYmlsaXR5ICgKICAgICAgICBpZCBiaWdpbnQoMjApIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAogICAgICAgIHBhcnRuZXJfaWQgYmlnaW50KDIwKSBOT1QgTlVMTCwKICAgICAgICBldmVudF9kYXRlIGRhdGUgTk9UIE5VTEwsCiAgICAgICAgc3RhdHVzIHZhcmNoYXIoMjApIERFRkFVTFQgJ29jdXBhZG8nLAogICAgICAgIG9yZGVyX2lkIGJpZ2ludCgyMCksCiAgICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgICBLRVkgcGFydG5lcl9kYXRlIChwYXJ0bmVyX2lkLCBldmVudF9kYXRlKQogICAgKSAkY2hhcnNldDsiOwoKICAgICRzcWwzID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHskd3BkYi0+cHJlZml4fXZtMl9wcm9kdWN0X3BhcnRuZXJzICgKICAgICAgICBpZCBiaWdpbnQoMjApIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAogICAgICAgIHByb2R1Y3RfaWQgYmlnaW50KDIwKSBOT1QgTlVMTCwKICAgICAgICBwYXJ0bmVyX2lkIGJpZ2ludCgyMCkgTk9UIE5VTEwsCiAgICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgICBVTklRVUUgS0VZIHByb2R1Y3RfcGFydG5lciAocHJvZHVjdF9pZCwgcGFydG5lcl9pZCkKICAgICkgJGNoYXJzZXQ7IjsKCiAgICAkc3FsNCA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcl9ldmVudHMgKAogICAgICAgIGlkIGJpZ2ludCgyMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgICAgcGFydG5lcl9pZCBiaWdpbnQoMjApIE5PVCBOVUxMLAogICAgICAgIG9yZGVyX2lkIGJpZ2ludCgyMCksCiAgICAgICAgZXZlbnRfZGF0ZSBkYXRlLAogICAgICAgIHN0YWdlIHZhcmNoYXIoMzApIERFRkFVTFQgJ21hdGNoaW5nJywKICAgICAgICBub3RlcyB0ZXh0LAogICAgICAgIGNyZWF0ZWRfYXQgZGF0ZXRpbWUgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICB1cGRhdGVkX2F0IGRhdGV0aW1lIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAgT04gVVBEQVRFIENVUlJFTlRfVElNRVNUQU1QLAogICAgICAgIFBSSU1BUlkgS0VZIChpZCkKICAgICkgJGNoYXJzZXQ7IjsKCiAgICAkc3FsNSA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB7JHdwZGItPnByZWZpeH12bTJfYXBwcm92YWxfcXVldWUgKAogICAgICAgIGlkIGJpZ2ludCgyMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgICAgcGFydG5lcl9pZCBiaWdpbnQoMjApLAogICAgICAgIG9yZGVyX2lkIGJpZ2ludCgyMCksCiAgICAgICAgcGhvbmUgdmFyY2hhcigzMCksCiAgICAgICAgbWVzc2FnZSB0ZXh0LAogICAgICAgIHRpcG8gdmFyY2hhcig1MCkgREVGQVVMVCAnY29udml0ZScsCiAgICAgICAgcHJpb3JpdHkgdmFyY2hhcigxMCkgREVGQVVMVCAnbm9ybWFsJywKICAgICAgICBzdGF0dXMgdmFyY2hhcigyMCkgREVGQVVMVCAncGVuZGVudGUnLAogICAgICAgIHNlbnRfYXQgZGF0ZXRpbWUsCiAgICAgICAgY3JlYXRlZF9hdCBkYXRldGltZSBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogICAgICAgIFBSSU1BUlkgS0VZIChpZCkKICAgICkgJGNoYXJzZXQ7IjsKCiAgICAkc3FsNiA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB7JHdwZGItPnByZWZpeH12bTJfdGVhbXMgKAogICAgICAgIGlkIGJpZ2ludCgyMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgICAgb3JkZXJfaWQgYmlnaW50KDIwKSBOT1QgTlVMTCBERUZBVUxUIDAsCiAgICAgICAgZXZlbnRfZGF0ZSBkYXRlIERFRkFVTFQgTlVMTCwKICAgICAgICBjbGllbnRfbmFtZSB2YXJjaGFyKDIwMCkgREVGQVVMVCBOVUxMLAogICAgICAgIGNsaWVudF9waG9uZSB2YXJjaGFyKDMwKSBERUZBVUxUIE5VTEwsCiAgICAgICAgdGVhbV9qc29uIGxvbmd0ZXh0IERFRkFVTFQgTlVMTCwKICAgICAgICBtaXNzaW5nX2NhdHMgdGV4dCBERUZBVUxUIE5VTEwsCiAgICAgICAgY29uZmlybV90b2tlbiB2YXJjaGFyKDY0KSBERUZBVUxUIE5VTEwsCiAgICAgICAgc3RhdHVzIHZhcmNoYXIoMjApIERFRkFVTFQgXCdkcmFmdFwnLAogICAgICAgIGNvbmZpcm1lZF9ieSB2YXJjaGFyKDEwMCkgREVGQVVMVCBOVUxMLAogICAgICAgIGlzX3NpbXVsYXRpb24gdGlueWludCgxKSBERUZBVUxUIDAsCiAgICAgICAgY3JlYXRlZF9hdCBkYXRldGltZSBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogICAgICAgIGNvbmZpcm1lZF9hdCBkYXRldGltZSBERUZBVUxUIE5VTEwsCiAgICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgICBVTklRVUUgS0VZIGNvbmZpcm1fdG9rZW4gKGNvbmZpcm1fdG9rZW4pLAogICAgICAgIEtFWSBvcmRlcl9pZCAob3JkZXJfaWQpCiAgICApICRjaGFyc2V0OyI7CgogICAgcmVxdWlyZV9vbmNlIEFCU1BBVEggLiAnd3AtYWRtaW4vaW5jbHVkZXMvdXBncmFkZS5waHAnOwogICAgZGJEZWx0YSgkc3FsKTsgZGJEZWx0YSgkc3FsMik7IGRiRGVsdGEoJHNxbDMpOyBkYkRlbHRhKCRzcWw0KTsgZGJEZWx0YSgkc3FsNSk7IGRiRGVsdGEoJHNxbDYpOwoKICAgIC8vIERlZmVuc2l2ZTogYWRkIG5ldyBjb2x1bW5zIHRvIHZtMl9wYXJ0bmVycyBpZiBtaXNzaW5nIChmb3Igc2l0ZXMgdGhhdCBhbHJlYWR5IGhhZCB0aGUgdGFibGUpCiAgICAkcGFydG5lcl9jb2xzID0gJHdwZGItPmdldF9jb2woIlNIT1cgQ09MVU1OUyBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyIpOwogICAgaWYgKCFpbl9hcnJheSgnd2NfY2F0ZWdvcmllcycsICRwYXJ0bmVyX2NvbHMpKSB7CiAgICAgICAgJHdwZGItPnF1ZXJ5KCJBTFRFUiBUQUJMRSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMgQUREIENPTFVNTiB3Y19jYXRlZ29yaWVzIHRleHQgREVGQVVMVCBOVUxMIik7CiAgICB9CiAgICBpZiAoIWluX2FycmF5KCd3Y190YWdzJywgJHBhcnRuZXJfY29scykpIHsKICAgICAgICAkd3BkYi0+cXVlcnkoIkFMVEVSIFRBQkxFIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyBBREQgQ09MVU1OIHdjX3RhZ3MgdGV4dCBERUZBVUxUIE5VTEwiKTsKICAgIH0KfQoKLy8gR2FyYW50ZSB0YWJlbGFzIGV4aXN0ZW0gbWVzbW8gc2UgcGx1Z2luIGrDoSBlc3RhdmEgYXRpdm8KYWRkX2FjdGlvbignYWRtaW5faW5pdCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKCAhZ2V0X29wdGlvbigndm0yX3BhcnRuZXJfdGFibGVzX3YxJykgKSB7CiAgICAgICAgdm0yX2NyZWF0ZV9wYXJ0bmVyX3RhYmxlcygpOwogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9wYXJ0bmVyX3RhYmxlc192MScsICcxJyk7CiAgICB9CiAgICAvLyB2MS41LjcwIOKAlCBnYXJhbnRlIHZtMl90ZWFtcyBleGlzdGUgbWVzbW8gZW0gc2l0ZXMgY29tIG1pZ3JhdGlvbiBhbnRpZ2EKICAgIC8vIHYxLjUuMTE2IOKAlCBtaWdyYXIgdGltZXN0YW1wcyBkZSBob3JhIGxvY2FsIChTUCkgcGFyYSBVVEMgdW1hIMO6bmljYSB2ZXoKICAgIGlmICggIWdldF9vcHRpb24oJ3ZtMl90el91dGNfbWlncmF0aW9uX3YxJykgKSB7CiAgICAgICAgZ2xvYmFsICR3cGRiOwogICAgICAgICR3cGRiLT5xdWVyeSgiVVBEQVRFIHskd3BkYi0+cHJlZml4fXZtMl9zb2ZpYV9zZXNzaW9ucyBTRVQgc3RhcnRlZF9hdCA9IERBVEVfQUREKHN0YXJ0ZWRfYXQsIElOVEVSVkFMIDMgSE9VUikgV0hFUkUgc3RhcnRlZF9hdCBJUyBOT1QgTlVMTCBBTkQgc3RhcnRlZF9hdCA+ICcyMDAwLTAxLTAxIDAwOjAwOjAwJyIpOwogICAgICAgICR3cGRiLT5xdWVyeSgiVVBEQVRFIHskd3BkYi0+cHJlZml4fXZtMl9jb250YWN0cyBTRVQgbGFzdF9hY3Rpdml0eSA9IERBVEVfQUREKGxhc3RfYWN0aXZpdHksIElOVEVSVkFMIDMgSE9VUikgV0hFUkUgbGFzdF9hY3Rpdml0eSBJUyBOT1QgTlVMTCBBTkQgbGFzdF9hY3Rpdml0eSA+ICcyMDAwLTAxLTAxIDAwOjAwOjAwJyIpOwogICAgICAgICR3cGRiLT5xdWVyeSgiVVBEQVRFIHskd3BkYi0+cHJlZml4fXZtMl9jb250YWN0cyBTRVQgY3JlYXRlZF9hdCA9IERBVEVfQUREKGNyZWF0ZWRfYXQsIElOVEVSVkFMIDMgSE9VUikgV0hFUkUgY3JlYXRlZF9hdCBJUyBOT1QgTlVMTCBBTkQgY3JlYXRlZF9hdCA+ICcyMDAwLTAxLTAxIDAwOjAwOjAwJyIpOwogICAgICAgICR3cGRiLT5xdWVyeSgiVVBEQVRFIHskd3BkYi0+cHJlZml4fXZtMl9jb250YWN0cyBTRVQgdXBkYXRlZF9hdCA9IERBVEVfQUREKHVwZGF0ZWRfYXQsIElOVEVSVkFMIDMgSE9VUikgV0hFUkUgdXBkYXRlZF9hdCBJUyBOT1QgTlVMTCBBTkQgdXBkYXRlZF9hdCA+ICcyMDAwLTAxLTAxIDAwOjAwOjAwJyIpOwogICAgICAgICR3cGRiLT5xdWVyeSgiVVBEQVRFIHskd3BkYi0+cHJlZml4fXZtMl9zZW5kcyBTRVQgc2VudF9hdCA9IERBVEVfQUREKHNlbnRfYXQsIElOVEVSVkFMIDMgSE9VUikgV0hFUkUgc2VudF9hdCBJUyBOT1QgTlVMTCBBTkQgc2VudF9hdCA+ICcyMDAwLTAxLTAxIDAwOjAwOjAwJyIpOwogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl90el91dGNfbWlncmF0aW9uX3YxJywgJzEnKTsKICAgIH0KCiAgICBpZiAoICFnZXRfb3B0aW9uKCd2bTJfZWxlbmNvX3RhYmxlc192MScpICkgewogICAgICAgIGdsb2JhbCAkd3BkYjsKICAgICAgICAkY2hhcnNldCA9ICR3cGRiLT5nZXRfY2hhcnNldF9jb2xsYXRlKCk7CiAgICAgICAgJHNxbF90ZWFtcyA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB7JHdwZGItPnByZWZpeH12bTJfdGVhbXMgKAogICAgICAgICAgICBpZCBiaWdpbnQoMjApIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAogICAgICAgICAgICBvcmRlcl9pZCBiaWdpbnQoMjApIE5PVCBOVUxMIERFRkFVTFQgMCwKICAgICAgICAgICAgZXZlbnRfZGF0ZSBkYXRlIERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgY2xpZW50X25hbWUgdmFyY2hhcigyMDApIERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgY2xpZW50X3Bob25lIHZhcmNoYXIoMzApIERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgdGVhbV9qc29uIGxvbmd0ZXh0IERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgbWlzc2luZ19jYXRzIHRleHQgREVGQVVMVCBOVUxMLAogICAgICAgICAgICBjb25maXJtX3Rva2VuIHZhcmNoYXIoNjQpIERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgc3RhdHVzIHZhcmNoYXIoMjApIERFRkFVTFQgJ2RyYWZ0JywKICAgICAgICAgICAgY29uZmlybWVkX2J5IHZhcmNoYXIoMTAwKSBERUZBVUxUIE5VTEwsCiAgICAgICAgICAgIGlzX3NpbXVsYXRpb24gdGlueWludCgxKSBERUZBVUxUIDAsCiAgICAgICAgICAgIGNyZWF0ZWRfYXQgZGF0ZXRpbWUgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICAgICAgY29uZmlybWVkX2F0IGRhdGV0aW1lIERFRkFVTFQgTlVMTCwKICAgICAgICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgICAgICAgVU5JUVVFIEtFWSBjb25maXJtX3Rva2VuIChjb25maXJtX3Rva2VuKSwKICAgICAgICAgICAgS0VZIG9yZGVyX2lkIChvcmRlcl9pZCkKICAgICAgICApICRjaGFyc2V0OyI7CiAgICAgICAgcmVxdWlyZV9vbmNlIEFCU1BBVEggLiAnd3AtYWRtaW4vaW5jbHVkZXMvdXBncmFkZS5waHAnOwogICAgICAgIGRiRGVsdGEoICRzcWxfdGVhbXMgKTsKICAgICAgICAvLyBHYXJhbnRpciBjb2x1bmFzIHBhcnRuZXIgdGFtYsOpbQogICAgICAgICRwYXJ0bmVyX2NvbHMgPSAkd3BkYi0+Z2V0X2NvbCgiU0hPVyBDT0xVTU5TIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIik7CiAgICAgICAgaWYgKCAhaW5fYXJyYXkoJ3djX2NhdGVnb3JpZXMnLCAkcGFydG5lcl9jb2xzKSApIHsKICAgICAgICAgICAgJHdwZGItPnF1ZXJ5KCJBTFRFUiBUQUJMRSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMgQUREIENPTFVNTiB3Y19jYXRlZ29yaWVzIHRleHQgREVGQVVMVCBOVUxMIik7CiAgICAgICAgfQogICAgICAgIGlmICggIWluX2FycmF5KCd3Y190YWdzJywgJHBhcnRuZXJfY29scykgKSB7CiAgICAgICAgICAgICR3cGRiLT5xdWVyeSgiQUxURVIgVEFCTEUgeyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIEFERCBDT0xVTU4gd2NfdGFncyB0ZXh0IERFRkFVTFQgTlVMTCIpOwogICAgICAgIH0KICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfZWxlbmNvX3RhYmxlc192MScsICcxJyk7CiAgICB9CgogICAgLy8gW3YxLjUuMTQ4XSBNaWdyYcOnw6NvOiBub3JtYWxpemFyIGRhdGFfZXZlbnRvIHBhcmEgWVlZWS1NTS1ERCBlbSB0b2RvcyBvcyBjb250YXRvcwogICAgLy8gQ29ycmlnZSByZWdpc3Ryb3MgaW1wb3J0YWRvcyBkbyBLb21tbyBlbSBmb3JtYXRvIEREL01NL1lZIG91IEREL01NL1lZWVkKICAgIGlmICggIWdldF9vcHRpb24oJ3ZtMl9kYXRhX2V2ZW50b19pc29fbWlncmF0aW9uX3YxJykgKSB7CiAgICAgICAgZ2xvYmFsICR3cGRiOwogICAgICAgICR0YmwgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9jb250YWN0cyc7CiAgICAgICAgLy8gREQvTU0vWVkg4oaSIFlZWVktTU0tREQgKGV4OiAxOS8wNi8yNiDihpIgMjAyNi0wNi0xOSkKICAgICAgICAkd3BkYi0+cXVlcnkoCiAgICAgICAgICAgICJVUERBVEUgeyR0Ymx9CiAgICAgICAgICAgICBTRVQgZGF0YV9ldmVudG8gPSBDT05DQVQoJzIwJywgU1VCU1RSKGRhdGFfZXZlbnRvLDcsMiksICctJywgU1VCU1RSKGRhdGFfZXZlbnRvLDQsMiksICctJywgU1VCU1RSKGRhdGFfZXZlbnRvLDEsMikpCiAgICAgICAgICAgICBXSEVSRSBkYXRhX2V2ZW50byBSRUdFWFAgJ15bMC05XXsyfS9bMC05XXsyfS9bMC05XXsyfSQnIgogICAgICAgICk7CiAgICAgICAgLy8gREQvTU0vWVlZWSDihpIgWVlZWS1NTS1ERCAoZXg6IDE5LzA2LzIwMjYg4oaSIDIwMjYtMDYtMTkpCiAgICAgICAgJHdwZGItPnF1ZXJ5KAogICAgICAgICAgICAiVVBEQVRFIHskdGJsfQogICAgICAgICAgICAgU0VUIGRhdGFfZXZlbnRvID0gQ09OQ0FUKFNVQlNUUihkYXRhX2V2ZW50byw3LDQpLCAnLScsIFNVQlNUUihkYXRhX2V2ZW50byw0LDIpLCAnLScsIFNVQlNUUihkYXRhX2V2ZW50bywxLDIpKQogICAgICAgICAgICAgV0hFUkUgZGF0YV9ldmVudG8gUkVHRVhQICdeWzAtOV17Mn0vWzAtOV17Mn0vWzAtOV17NH0kJyIKICAgICAgICApOwogICAgICAgIC8vIERETU1ZWVlZIOKGkiBZWVlZLU1NLUREIChleDogMTkwNjIwMjYg4oaSIDIwMjYtMDYtMTkpCiAgICAgICAgJHdwZGItPnF1ZXJ5KAogICAgICAgICAgICAiVVBEQVRFIHskdGJsfQogICAgICAgICAgICAgU0VUIGRhdGFfZXZlbnRvID0gQ09OQ0FUKFNVQlNUUihkYXRhX2V2ZW50byw1LDQpLCAnLScsIFNVQlNUUihkYXRhX2V2ZW50bywzLDIpLCAnLScsIFNVQlNUUihkYXRhX2V2ZW50bywxLDIpKQogICAgICAgICAgICAgV0hFUkUgZGF0YV9ldmVudG8gUkVHRVhQICdeWzAtOV17OH0kJyIKICAgICAgICApOwogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9kYXRhX2V2ZW50b19pc29fbWlncmF0aW9uX3YxJywgJzEnKTsKICAgICAgICB2bTJfbG9nKCdbdjEuNS4xNDhdIE1pZ3Jhw6fDo28gZGF0YV9ldmVudG8gSVNPIGNvbmNsdcOtZGEuJywgJ2luZm8nKTsKICAgIH0KfSk7CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gQ09OVEFUT1MgVU5JRklDQURPUyDigJQgdm0yX2NvbnRhY3RzCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfY3JlYXRlX2NvbnRhY3RzX3RhYmxlKCkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJGNoYXJzZXQgPSAkd3BkYi0+Z2V0X2NoYXJzZXRfY29sbGF0ZSgpOwogICAgJHQgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9jb250YWN0cyc7CiAgICAvLyBDcmlhciB0YWJlbGEgc2UgbsOjbyBleGlzdGlyCiAgICAkd3BkYi0+cXVlcnkoICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAkdCAoCiAgICAgICAgaWQgICAgICAgICAgICAgIGJpZ2ludCgyMCkgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgICAgcGhvbmUgICAgICAgICAgIHZhcmNoYXIoMjApIE5PVCBOVUxMIERFRkFVTFQgJycsCiAgICAgICAgbmFtZSAgICAgICAgICAgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBERUZBVUxUICcnLAogICAgICAgIGVtYWlsICAgICAgICAgICB2YXJjaGFyKDEwMCkgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgICBvcmlnZW5zICAgICAgICAgdGV4dCBOT1QgTlVMTCwKICAgICAgICBrb21tb19sZWFkX2lkICAgYmlnaW50KDIwKSBERUZBVUxUIE5VTEwsCiAgICAgICAga29tbW9fc3RhdHVzX2lkIGJpZ2ludCgyMCkgREVGQVVMVCBOVUxMLAogICAgICAgIGRhdGFfZXZlbnRvICAgICB2YXJjaGFyKDIwKSBOT1QgTlVMTCBERUZBVUxUICcnLAogICAgICAgIHRpcG9fZXZlbnRvICAgICB2YXJjaGFyKDEwMCkgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgICBjYXJ0X3Byb2R1Y3QgICAgdmFyY2hhcig1MDApIE5PVCBOVUxMIERFRkFVTFQgJycsCiAgICAgICAgZ2FsZXJpYV9hdHJhY2FvIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBERUZBVUxUICcnLAogICAgICAgIHNjb3JlICAgICAgICAgICBpbnQgTk9UIE5VTEwgREVGQVVMVCAwLAogICAgICAgIHV0bV9zb3VyY2UgICAgICB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgICB1dG1fbWVkaXVtICAgICAgdmFyY2hhcigyNTUpIE5PVCBOVUxMIERFRkFVTFQgJycsCiAgICAgICAgdXRtX2NhbXBhaWduICAgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBERUZBVUxUICcnLAogICAgICAgIHV0bV90ZXJtICAgICAgICB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgICB1dG1fY29udGVudCAgICAgdmFyY2hhcigyNTUpIE5PVCBOVUxMIERFRkFVTFQgJycsCiAgICAgICAgbGFzdF9hY3Rpdml0eSAgIGRhdGV0aW1lIERFRkFVTFQgTlVMTCwKICAgICAgICBjcmVhdGVkX2F0ICAgICAgZGF0ZXRpbWUgTk9UIE5VTEwgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCwKICAgICAgICB1cGRhdGVkX2F0ICAgICAgZGF0ZXRpbWUgTk9UIE5VTEwgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCBPTiBVUERBVEUgQ1VSUkVOVF9USU1FU1RBTVAsCiAgICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgICBVTklRVUUgS0VZIHVxX3Bob25lIChwaG9uZSksCiAgICAgICAgS0VZIGlkeF9sYXN0X2FjdGl2aXR5IChsYXN0X2FjdGl2aXR5KQogICAgKSAkY2hhcnNldCIgKTsKfQphZGRfYWN0aW9uKCdwbHVnaW5zX2xvYWRlZCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKCAhZ2V0X29wdGlvbigndm0yX2NvbnRhY3RzX3RhYmxlX3YyJykgKSB7CiAgICAgICAgdm0yX2NyZWF0ZV9jb250YWN0c190YWJsZSgpOwogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9jb250YWN0c190YWJsZV92MicsICcxJyk7CiAgICB9CiAgICAvLyBbdjEuNS43Nl0gTWlncmF0aW9uIGRlZmVuc2l2YTogYWRpY2lvbmEgY29sdW5hcyBVVE0gc2UgbsOjbyBleGlzdGlyZW0KICAgIGlmICggIWdldF9vcHRpb24oJ3ZtMl9jb250YWN0c191dG1fY29sc192MScpICkgewogICAgICAgIGdsb2JhbCAkd3BkYjsKICAgICAgICAkdCA9ICR3cGRiLT5wcmVmaXggLiAndm0yX2NvbnRhY3RzJzsKICAgICAgICBpZiAoJHdwZGItPmdldF92YXIoIlNIT1cgVEFCTEVTIExJS0UgJyR0JyIpID09PSAkdCkgewogICAgICAgICAgICAkY29scyA9ICR3cGRiLT5nZXRfY29sKCJTSE9XIENPTFVNTlMgRlJPTSAkdCIpOwogICAgICAgICAgICBmb3JlYWNoIChbJ3V0bV9zb3VyY2UnLCd1dG1fbWVkaXVtJywndXRtX2NhbXBhaWduJywndXRtX3Rlcm0nLCd1dG1fY29udGVudCddIGFzICR1YykgewogICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkdWMsICRjb2xzKSkgewogICAgICAgICAgICAgICAgICAgICR3cGRiLT5xdWVyeSgiQUxURVIgVEFCTEUgJHQgQUREIENPTFVNTiAkdWMgdmFyY2hhcigyNTUpIE5PVCBOVUxMIERFRkFVTFQgJyciKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfY29udGFjdHNfdXRtX2NvbHNfdjEnLCAnMScpOwogICAgICAgIH0KICAgIH0KfSwgMjApOwoKZnVuY3Rpb24gdm0yX3N5bmNfY29udGFjdHMoKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAvLyBHYXJhbnRlIHF1ZSBhIHRhYmVsYSBleGlzdGUgKGZ1bmNpb25hIHRhbnRvIGVtIGFkbWluIHF1YW50byBlbSBSRVNUKQogICAgdm0yX2NyZWF0ZV9jb250YWN0c190YWJsZSgpOwogICAgJHRhYmxlID0gJHdwZGItPnByZWZpeCAuICd2bTJfY29udGFjdHMnOwogICAgJG1lcmdlZCA9IFtdOwoKICAgIC8vIOKUgOKUgCBTb3VyY2UgMTogS29tbW8gbGVhZHMg4pSA4pSACiAgICAkcm93cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAiU0VMRUNUIHBob25lLCBuYW1lLCBkYXRhX2V2ZW50bywgc3RhdHVzX2lkLCBrb21tb19pZCwgbGFzdF9zeW5jZWQKICAgICAgICAgRlJPTSB7JHdwZGItPnByZWZpeH12bV9rb21tb19sZWFkcwogICAgICAgICBXSEVSRSBwaG9uZSAhPSAnJwogICAgICAgICBPUkRFUiBCWSBsYXN0X3N5bmNlZCBERVNDIExJTUlUIDEwMDAwIgogICAgKTsKICAgIGZvcmVhY2ggKCRyb3dzIGFzICRyKSB7CiAgICAgICAgJHAgPSB2bTJfbm9ybWFsaXplX3Bob25lKCRyLT5waG9uZSk7CiAgICAgICAgaWYgKCEkcCkgY29udGludWU7CiAgICAgICAgaWYgKCFpc3NldCgkbWVyZ2VkWyRwXSkpIHsKICAgICAgICAgICAgJG1lcmdlZFskcF0gPSBbCiAgICAgICAgICAgICAgICAncGhvbmUnID0+ICRwLCAnbmFtZScgPT4gJHItPm5hbWUgPz8gJycsICdlbWFpbCcgPT4gJycsCiAgICAgICAgICAgICAgICAnb3JpZ2VucycgPT4gWydrb21tbyddLAogICAgICAgICAgICAgICAgJ2tvbW1vX2xlYWRfaWQnID0+ICRyLT5rb21tb19pZCwKICAgICAgICAgICAgICAgICdrb21tb19zdGF0dXNfaWQnID0+ICRyLT5zdGF0dXNfaWQsCiAgICAgICAgICAgICAgICAnZGF0YV9ldmVudG8nID0+IHZtMl9kYXRlX3RvX2lzbyggJHItPmRhdGFfZXZlbnRvID8/ICcnICksIC8vIFt2MS41LjE0OF0gY29udmVydGUgREQvTU0vWVkg4oaSIFlZWVktTU0tREQKICAgICAgICAgICAgICAgICdjYXJ0X3Byb2R1Y3QnID0+ICcnLCAnZ2FsZXJpYV9hdHJhY2FvJyA9PiAnJywKICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyA9PiAkci0+bGFzdF9zeW5jZWQsCiAgICAgICAgICAgIF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgna29tbW8nLCAkbWVyZ2VkWyRwXVsnb3JpZ2VucyddKSkgJG1lcmdlZFskcF1bJ29yaWdlbnMnXVtdID0gJ2tvbW1vJzsKICAgICAgICAgICAgaWYgKGVtcHR5KCRtZXJnZWRbJHBdWyduYW1lJ10pKSAkbWVyZ2VkWyRwXVsnbmFtZSddID0gJHItPm5hbWUgPz8gJyc7CiAgICAgICAgICAgIGlmIChlbXB0eSgkbWVyZ2VkWyRwXVsna29tbW9fbGVhZF9pZCddKSkgewogICAgICAgICAgICAgICAgJG1lcmdlZFskcF1bJ2tvbW1vX2xlYWRfaWQnXSA9ICRyLT5rb21tb19pZDsKICAgICAgICAgICAgICAgICRtZXJnZWRbJHBdWydrb21tb19zdGF0dXNfaWQnXSA9ICRyLT5zdGF0dXNfaWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8g4pSA4pSAIFNvdXJjZSAyOiBHYWxlcmlhIHRva2VucyDilIDilIAKICAgICRyb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICJTRUxFQ1QgdC53aGF0c2FwcCwgYS5ub21lIEFTIGF0cmFjYW9fbm9tZSwgdC5jcmVhdGVkX2F0CiAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9dm1nYWxfdG9rZW5zIHQKICAgICAgICAgTEVGVCBKT0lOIHskd3BkYi0+cHJlZml4fXZtZ2FsX2F0cmFjb2VzIGEgT04gRklORF9JTl9TRVQoYS5pZCwgdC5hdHJhY2FvX2lkcykKICAgICAgICAgV0hFUkUgdC53aGF0c2FwcCBJUyBOT1QgTlVMTCBBTkQgdC53aGF0c2FwcCAhPSAnJwogICAgICAgICBPUkRFUiBCWSB0LmNyZWF0ZWRfYXQgREVTQyBMSU1JVCAxMDAwIgogICAgKTsKICAgIGZvcmVhY2ggKCRyb3dzIGFzICRyKSB7CiAgICAgICAgJHAgPSB2bTJfbm9ybWFsaXplX3Bob25lKCRyLT53aGF0c2FwcCk7CiAgICAgICAgaWYgKCEkcCkgY29udGludWU7CiAgICAgICAgaWYgKCFpc3NldCgkbWVyZ2VkWyRwXSkpIHsKICAgICAgICAgICAgJG1lcmdlZFskcF0gPSBbCiAgICAgICAgICAgICAgICAncGhvbmUnID0+ICRwLCAnbmFtZScgPT4gJycsICdlbWFpbCcgPT4gJycsCiAgICAgICAgICAgICAgICAnb3JpZ2VucycgPT4gWydnYWxlcmlhJ10sCiAgICAgICAgICAgICAgICAna29tbW9fbGVhZF9pZCcgPT4gbnVsbCwgJ2tvbW1vX3N0YXR1c19pZCcgPT4gbnVsbCwKICAgICAgICAgICAgICAgICdkYXRhX2V2ZW50bycgPT4gJycsICdjYXJ0X3Byb2R1Y3QnID0+ICcnLAogICAgICAgICAgICAgICAgJ2dhbGVyaWFfYXRyYWNhbycgPT4gJHItPmF0cmFjYW9fbm9tZSA/PyAnJywKICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyA9PiAkci0+Y3JlYXRlZF9hdCwKICAgICAgICAgICAgXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWluX2FycmF5KCdnYWxlcmlhJywgJG1lcmdlZFskcF1bJ29yaWdlbnMnXSkpICRtZXJnZWRbJHBdWydvcmlnZW5zJ11bXSA9ICdnYWxlcmlhJzsKICAgICAgICAgICAgaWYgKGVtcHR5KCRtZXJnZWRbJHBdWydnYWxlcmlhX2F0cmFjYW8nXSkpICRtZXJnZWRbJHBdWydnYWxlcmlhX2F0cmFjYW8nXSA9ICRyLT5hdHJhY2FvX25vbWUgPz8gJyc7CiAgICAgICAgICAgIGlmIChlbXB0eSgkbWVyZ2VkWyRwXVsnbGFzdF9hY3Rpdml0eSddKSB8fCBzdHJ0b3RpbWUoJHItPmNyZWF0ZWRfYXQpID4gc3RydG90aW1lKCRtZXJnZWRbJHBdWydsYXN0X2FjdGl2aXR5J10pKQogICAgICAgICAgICAgICAgJG1lcmdlZFskcF1bJ2xhc3RfYWN0aXZpdHknXSA9ICRyLT5jcmVhdGVkX2F0OwogICAgICAgIH0KICAgIH0KCiAgICAvLyDilIDilIAgU291cmNlIDM6IFdBIENhcHR1cmVzIChwb3B1cC9jYXJyaW5obykg4pSA4pSACiAgICAkcm93cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAiU0VMRUNUIHBob25lLCBwcm9kdWN0X25hbWUsIGNhcHR1cmVkX2F0CiAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9dm1fd2FfY2FwdHVyZXMKICAgICAgICAgV0hFUkUgcGhvbmUgIT0gJycKICAgICAgICAgT1JERVIgQlkgY2FwdHVyZWRfYXQgREVTQyBMSU1JVCA1MDAwIgogICAgKTsKICAgIGZvcmVhY2ggKCRyb3dzIGFzICRyKSB7CiAgICAgICAgJHAgPSB2bTJfbm9ybWFsaXplX3Bob25lKCRyLT5waG9uZSk7CiAgICAgICAgaWYgKCEkcCkgY29udGludWU7CiAgICAgICAgaWYgKCFpc3NldCgkbWVyZ2VkWyRwXSkpIHsKICAgICAgICAgICAgJG1lcmdlZFskcF0gPSBbCiAgICAgICAgICAgICAgICAncGhvbmUnID0+ICRwLCAnbmFtZScgPT4gJycsICdlbWFpbCcgPT4gJycsCiAgICAgICAgICAgICAgICAnb3JpZ2VucycgPT4gWydjYXJyaW5obyddLAogICAgICAgICAgICAgICAgJ2tvbW1vX2xlYWRfaWQnID0+IG51bGwsICdrb21tb19zdGF0dXNfaWQnID0+IG51bGwsCiAgICAgICAgICAgICAgICAnZGF0YV9ldmVudG8nID0+ICcnLAogICAgICAgICAgICAgICAgJ2NhcnRfcHJvZHVjdCcgPT4gJHItPnByb2R1Y3RfbmFtZSA/PyAnJywKICAgICAgICAgICAgICAgICdnYWxlcmlhX2F0cmFjYW8nID0+ICcnLAogICAgICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknID0+ICRyLT5jYXB0dXJlZF9hdCwKICAgICAgICAgICAgXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWluX2FycmF5KCdjYXJyaW5obycsICRtZXJnZWRbJHBdWydvcmlnZW5zJ10pKSAkbWVyZ2VkWyRwXVsnb3JpZ2VucyddW10gPSAnY2FycmluaG8nOwogICAgICAgICAgICBpZiAoZW1wdHkoJG1lcmdlZFskcF1bJ2NhcnRfcHJvZHVjdCddKSkgJG1lcmdlZFskcF1bJ2NhcnRfcHJvZHVjdCddID0gJHItPnByb2R1Y3RfbmFtZSA/PyAnJzsKICAgICAgICB9CiAgICB9CgogICAgLy8g4pSA4pSAIFNvdXJjZSA0OiBQZWRpZG9zIFdvb0NvbW1lcmNlIChIUE9TKSDilIDilIAKICAgICR3Y190YmwgPSAkd3BkYi0+cHJlZml4IC4gJ3djX29yZGVycyc7CiAgICBpZiAoJHdwZGItPmdldF92YXIoIlNIT1cgVEFCTEVTIExJS0UgJyR3Y190YmwnIikgPT09ICR3Y190YmwpIHsKICAgICAgICAkd2Nfcm93cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAgICAgIlNFTEVDVCBiaWxsaW5nX3Bob25lLCBiaWxsaW5nX2ZpcnN0X25hbWUsIGJpbGxpbmdfbGFzdF9uYW1lLCBiaWxsaW5nX2VtYWlsLCBkYXRlX2NyZWF0ZWRfZ210CiAgICAgICAgICAgICBGUk9NIHskd2NfdGJsfQogICAgICAgICAgICAgV0hFUkUgYmlsbGluZ19waG9uZSAhPSAnJyBBTkQgdHlwZSA9ICdzaG9wX29yZGVyJwogICAgICAgICAgICAgT1JERVIgQlkgZGF0ZV9jcmVhdGVkX2dtdCBERVNDIExJTUlUIDIwMDAiCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoICgkd2Nfcm93cyBhcyAkcikgewogICAgICAgICAgICAkcCA9IHZtMl9ub3JtYWxpemVfcGhvbmUoJHItPmJpbGxpbmdfcGhvbmUpOwogICAgICAgICAgICBpZiAoISRwKSBjb250aW51ZTsKICAgICAgICAgICAgJGZ1bGxfbmFtZSA9IHRyaW0oKCRyLT5iaWxsaW5nX2ZpcnN0X25hbWUgPz8gJycpIC4gJyAnIC4gKCRyLT5iaWxsaW5nX2xhc3RfbmFtZSA/PyAnJykpOwogICAgICAgICAgICAkYWN0aXZpdHkgID0gJHItPmRhdGVfY3JlYXRlZF9nbXQgPz8gbnVsbDsKICAgICAgICAgICAgaWYgKCFpc3NldCgkbWVyZ2VkWyRwXSkpIHsKICAgICAgICAgICAgICAgICRtZXJnZWRbJHBdID0gWwogICAgICAgICAgICAgICAgICAgICdwaG9uZScgPT4gJHAsCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnICA9PiAkZnVsbF9uYW1lLAogICAgICAgICAgICAgICAgICAgICdlbWFpbCcgPT4gJHItPmJpbGxpbmdfZW1haWwgPz8gJycsCiAgICAgICAgICAgICAgICAgICAgJ29yaWdlbnMnID0+IFsncGVkaWRvJ10sCiAgICAgICAgICAgICAgICAgICAgJ2tvbW1vX2xlYWRfaWQnID0+IG51bGwsICdrb21tb19zdGF0dXNfaWQnID0+IG51bGwsCiAgICAgICAgICAgICAgICAgICAgJ2RhdGFfZXZlbnRvJyA9PiAnJywgJ2NhcnRfcHJvZHVjdCcgPT4gJycsICdnYWxlcmlhX2F0cmFjYW8nID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyA9PiAkYWN0aXZpdHksCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgncGVkaWRvJywgJG1lcmdlZFskcF1bJ29yaWdlbnMnXSkpICRtZXJnZWRbJHBdWydvcmlnZW5zJ11bXSA9ICdwZWRpZG8nOwogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRtZXJnZWRbJHBdWyduYW1lJ10pKSAkbWVyZ2VkWyRwXVsnbmFtZSddID0gJGZ1bGxfbmFtZTsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkbWVyZ2VkWyRwXVsnZW1haWwnXSkpICRtZXJnZWRbJHBdWydlbWFpbCddID0gJHItPmJpbGxpbmdfZW1haWwgPz8gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKICAgIC8vIOKUgOKUgCBTb3VyY2UgNTogVjEgQ1JNIENvbnRhY3RzICh2bV9jcm1fY29udGFjdHMpIOKUgOKUgAogICAgJHYxX3RibCA9ICR3cGRiLT5wcmVmaXggLiAndm1fY3JtX2NvbnRhY3RzJzsKICAgIGlmICgkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAnJHYxX3RibCciKSA9PT0gJHYxX3RibCkgewogICAgICAgICR2MV9yb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICAgICAiU0VMRUNUIHBob25lLCBuYW1lLCBlbWFpbCwgY3JlYXRlZF9hdAogICAgICAgICAgICAgRlJPTSB7JHdwZGItPnByZWZpeH12bV9jcm1fY29udGFjdHMKICAgICAgICAgICAgIFdIRVJFIHBob25lICE9ICcnIEFORCBvcHRfb3V0ID0gMAogICAgICAgICAgICAgT1JERVIgQlkgY3JlYXRlZF9hdCBERVNDIExJTUlUIDEwMDAwIgogICAgICAgICk7CiAgICAgICAgZm9yZWFjaCAoJHYxX3Jvd3MgYXMgJHIpIHsKICAgICAgICAgICAgJHAgPSB2bTJfbm9ybWFsaXplX3Bob25lKCRyLT5waG9uZSk7CiAgICAgICAgICAgIGlmICghJHApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoIWlzc2V0KCRtZXJnZWRbJHBdKSkgewogICAgICAgICAgICAgICAgJG1lcmdlZFskcF0gPSBbCiAgICAgICAgICAgICAgICAgICAgJ3Bob25lJyAgICAgICAgICA9PiAkcCwKICAgICAgICAgICAgICAgICAgICAnbmFtZScgICAgICAgICAgID0+ICRyLT5uYW1lID8/ICcnLAogICAgICAgICAgICAgICAgICAgICdlbWFpbCcgICAgICAgICAgPT4gJHItPmVtYWlsID8/ICcnLAogICAgICAgICAgICAgICAgICAgICdvcmlnZW5zJyAgICAgICAgPT4gWydjcm1fdjEnXSwKICAgICAgICAgICAgICAgICAgICAna29tbW9fbGVhZF9pZCcgID0+IG51bGwsICdrb21tb19zdGF0dXNfaWQnID0+IG51bGwsCiAgICAgICAgICAgICAgICAgICAgJ2RhdGFfZXZlbnRvJyAgICA9PiAnJywgJ2NhcnRfcHJvZHVjdCcgPT4gJycsICdnYWxlcmlhX2F0cmFjYW8nID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyAgPT4gJHItPmNyZWF0ZWRfYXQsCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgnY3JtX3YxJywgJG1lcmdlZFskcF1bJ29yaWdlbnMnXSkpICRtZXJnZWRbJHBdWydvcmlnZW5zJ11bXSA9ICdjcm1fdjEnOwogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRtZXJnZWRbJHBdWyduYW1lJ10pKSAgJG1lcmdlZFskcF1bJ25hbWUnXSAgPSAkci0+bmFtZSA/PyAnJzsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkbWVyZ2VkWyRwXVsnZW1haWwnXSkpICRtZXJnZWRbJHBdWydlbWFpbCddID0gJHItPmVtYWlsID8/ICcnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIOKUgOKUgCBVcHNlcnQgaW50byB2bTJfY29udGFjdHMg4pSA4pSACiAgICAkY291bnRfbmV3ID0gMDsgJGNvdW50X3VwZCA9IDA7CiAgICBmb3JlYWNoICgkbWVyZ2VkIGFzICRwID0+ICRkYXRhKSB7CiAgICAgICAgJGV4aXN0aW5nID0gJHdwZGItPmdldF9yb3coJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICJTRUxFQ1QgaWQsIG9yaWdlbnMsIG5hbWUgRlJPTSAkdGFibGUgV0hFUkUgcGhvbmUgPSAlcyIsICRwCiAgICAgICAgKSk7CiAgICAgICAgaWYgKCRleGlzdGluZykgewogICAgICAgICAgICAkZXhfb3JpZ2VucyAgPSBqc29uX2RlY29kZSgkZXhpc3RpbmctPm9yaWdlbnMsIHRydWUpID86IFtdOwogICAgICAgICAgICAkbmV3X29yaWdlbnMgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKGFycmF5X21lcmdlKCRleF9vcmlnZW5zLCAkZGF0YVsnb3JpZ2VucyddID8/IFtdKSkpOwogICAgICAgICAgICAkdXBkID0gWwogICAgICAgICAgICAgICAgJ29yaWdlbnMnICAgICAgICAgPT4gd3BfanNvbl9lbmNvZGUoJG5ld19vcmlnZW5zKSwKICAgICAgICAgICAgICAgICdrb21tb19sZWFkX2lkJyAgID0+ICRkYXRhWydrb21tb19sZWFkX2lkJ10gPz8gbnVsbCwKICAgICAgICAgICAgICAgICdrb21tb19zdGF0dXNfaWQnID0+ICRkYXRhWydrb21tb19zdGF0dXNfaWQnXSA/PyBudWxsLAogICAgICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknICAgPT4gJGRhdGFbJ2xhc3RfYWN0aXZpdHknXSA/OiBudWxsLAogICAgICAgICAgICAgICAgJ3VwZGF0ZWRfYXQnICAgICAgPT4gY3VycmVudF90aW1lKCdteXNxbCcpLAogICAgICAgICAgICBdOwogICAgICAgICAgICAvLyBbdjEuNS4xNDhdIFPDsyBzb2JyZXNjcmV2ZSBkYXRhX2V2ZW50byBzZSBvIG5vdm8gdmFsb3IgZm9yIG7Do28tdmF6aW8KICAgICAgICAgICAgLy8gKHByb3RlZ2UgZGF0YXMgc2FsdmFzIHBlbGEgU29mSUEgZGUgc2VyZW0gYXBhZ2FkYXMgcGVsbyBpbXBvcnQgZG8gS29tbW8pCiAgICAgICAgICAgIGlmICghZW1wdHkoJGRhdGFbJ2RhdGFfZXZlbnRvJ10pKSAkdXBkWydkYXRhX2V2ZW50byddID0gJGRhdGFbJ2RhdGFfZXZlbnRvJ107CiAgICAgICAgICAgIGlmICghZW1wdHkoJGRhdGFbJ25hbWUnXSkpICAgICAgICAgICAkdXBkWyduYW1lJ10gICAgICAgICAgID0gJGRhdGFbJ25hbWUnXTsKICAgICAgICAgICAgaWYgKCFlbXB0eSgkZGF0YVsnZW1haWwnXSkpICAgICAgICAgICAkdXBkWydlbWFpbCddICAgICAgICAgID0gJGRhdGFbJ2VtYWlsJ107CiAgICAgICAgICAgIGlmICghZW1wdHkoJGRhdGFbJ2NhcnRfcHJvZHVjdCddKSkgICAgJHVwZFsnY2FydF9wcm9kdWN0J10gICA9ICRkYXRhWydjYXJ0X3Byb2R1Y3QnXTsKICAgICAgICAgICAgaWYgKCFlbXB0eSgkZGF0YVsnZ2FsZXJpYV9hdHJhY2FvJ10pKSAkdXBkWydnYWxlcmlhX2F0cmFjYW8nXT0gJGRhdGFbJ2dhbGVyaWFfYXRyYWNhbyddOwogICAgICAgICAgICAkd3BkYi0+dXBkYXRlKCR0YWJsZSwgJHVwZCwgWydwaG9uZScgPT4gJHBdKTsKICAgICAgICAgICAgJGNvdW50X3VwZCsrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR3cGRiLT5pbnNlcnQoJHRhYmxlLCBbCiAgICAgICAgICAgICAgICAncGhvbmUnICAgICAgICAgICA9PiAkcCwKICAgICAgICAgICAgICAgICduYW1lJyAgICAgICAgICAgID0+ICRkYXRhWyduYW1lJ10gPz8gJycsCiAgICAgICAgICAgICAgICAnZW1haWwnICAgICAgICAgICA9PiAkZGF0YVsnZW1haWwnXSA/PyAnJywKICAgICAgICAgICAgICAgICdvcmlnZW5zJyAgICAgICAgID0+IHdwX2pzb25fZW5jb2RlKCRkYXRhWydvcmlnZW5zJ10gPz8gW10pLAogICAgICAgICAgICAgICAgJ2tvbW1vX2xlYWRfaWQnICAgPT4gJGRhdGFbJ2tvbW1vX2xlYWRfaWQnXSA/PyBudWxsLAogICAgICAgICAgICAgICAgJ2tvbW1vX3N0YXR1c19pZCcgPT4gJGRhdGFbJ2tvbW1vX3N0YXR1c19pZCddID8/IG51bGwsCiAgICAgICAgICAgICAgICAnZGF0YV9ldmVudG8nICAgICA9PiAkZGF0YVsnZGF0YV9ldmVudG8nXSA/PyAnJywKICAgICAgICAgICAgICAgICdjYXJ0X3Byb2R1Y3QnICAgID0+ICRkYXRhWydjYXJ0X3Byb2R1Y3QnXSA/PyAnJywKICAgICAgICAgICAgICAgICdnYWxlcmlhX2F0cmFjYW8nID0+ICRkYXRhWydnYWxlcmlhX2F0cmFjYW8nXSA/PyAnJywKICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyAgID0+ICRkYXRhWydsYXN0X2FjdGl2aXR5J10gPzogbnVsbCwKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICRjb3VudF9uZXcrKzsKICAgICAgICB9CiAgICB9CgogICAgdXBkYXRlX29wdGlvbigndm0yX2NvbnRhY3RzX2xhc3Rfc3luYycsIGN1cnJlbnRfdGltZSgnbXlzcWwnKSk7CiAgICByZXR1cm4gWyduZXcnID0+ICRjb3VudF9uZXcsICd1cGRhdGVkJyA9PiAkY291bnRfdXBkLCAndG90YWwnID0+IGNvdW50KCRtZXJnZWQpXTsKfQoKLy8gQ3JvbiBob3LDoXJpbwphZGRfYWN0aW9uKCd2bTJfY29udGFjdHNfY3JvbicsICd2bTJfc3luY19jb250YWN0cycpOwphZGRfYWN0aW9uKCd3cCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKCF3cF9uZXh0X3NjaGVkdWxlZCgndm0yX2NvbnRhY3RzX2Nyb24nKSkKICAgICAgICB3cF9zY2hlZHVsZV9ldmVudCh0aW1lKCksICdob3VybHknLCAndm0yX2NvbnRhY3RzX2Nyb24nKTsKfSk7CgovLyBSRVNUIGVuZHBvaW50IHN5bmMgbWFudWFsCmFkZF9maWx0ZXIoJ3Jlc3RfYXBpX2luaXQnLCBmdW5jdGlvbigpIHsKICAgIHJlZ2lzdGVyX3Jlc3Rfcm91dGUoJ3ZtLWNybS12Mi92MScsICcvY29udGFjdHMvc3luYycsIFsKICAgICAgICAnbWV0aG9kcycgICAgICAgICAgICAgPT4gJ1BPU1QnLAogICAgICAgICdjYWxsYmFjaycgICAgICAgICAgICA9PiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCFjdXJyZW50X3VzZXJfY2FuKCdtYW5hZ2Vfb3B0aW9ucycpKSByZXR1cm4gbmV3IFdQX0Vycm9yKCdmb3JiaWRkZW4nLCdBY2Vzc28gbmVnYWRvJyxbJ3N0YXR1cyc9PjQwM10pOwogICAgICAgICAgICAkcmVzdWx0ID0gdm0yX3N5bmNfY29udGFjdHMoKTsKICAgICAgICAgICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKFsnb2snID0+IHRydWUsICdyZXN1bHQnID0+ICRyZXN1bHRdKTsKICAgICAgICB9LAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiAnX19yZXR1cm5fdHJ1ZScsCiAgICBdKTsKCiAgICAvLyBbdjEuNS44Nl0gQnVsayBpbXBvcnQgZW5kcG9pbnQg4oCUIGltcG9ydGEgbGlzdGEgZGUgY29udGF0b3MgdmlhIEJlYXJlciB0b2tlbgogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndm0tY3JtLXYyL3YxJywgJy9jb250YWN0cy9pbXBvcnQnLCBbCiAgICAgICAgJ21ldGhvZHMnICAgICAgICAgICAgID0+ICdQT1NUJywKICAgICAgICAnY2FsbGJhY2snICAgICAgICAgICAgPT4gZnVuY3Rpb24oV1BfUkVTVF9SZXF1ZXN0ICRyZXEpIHsKICAgICAgICAgICAgJGF1dGggPSAkcmVxLT5nZXRfaGVhZGVyKCdhdXRob3JpemF0aW9uJyk7CiAgICAgICAgICAgIGlmICgkYXV0aCAhPT0gJ0JlYXJlciB2bTJmc3luY185a3F3M3A3eCcpCiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdQX0Vycm9yKCdmb3JiaWRkZW4nLCAnQWNlc3NvIG5lZ2FkbycsIFsnc3RhdHVzJyA9PiA0MDNdKTsKICAgICAgICAgICAgZ2xvYmFsICR3cGRiOwogICAgICAgICAgICAkdGFibGUgICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9jb250YWN0cyc7CiAgICAgICAgICAgICRjb250YWN0cyA9ICRyZXEtPmdldF9qc29uX3BhcmFtcygpOwogICAgICAgICAgICBpZiAoIWlzX2FycmF5KCRjb250YWN0cykgfHwgZW1wdHkoJGNvbnRhY3RzKSkKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV1BfRXJyb3IoJ2JhZF9yZXF1ZXN0JywgJ0pTT04gYXJyYXkgZXNwZXJhZG8nLCBbJ3N0YXR1cycgPT4gNDAwXSk7CiAgICAgICAgICAgICRpbnNlcnRlZCA9IDA7ICRza2lwcGVkID0gMDsKICAgICAgICAgICAgZm9yZWFjaCAoJGNvbnRhY3RzIGFzICRjKSB7CiAgICAgICAgICAgICAgICAkcGhvbmUgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRjWydwaG9uZSddID8/ICcnKTsKICAgICAgICAgICAgICAgICRuYW1lICA9IHNhbml0aXplX3RleHRfZmllbGQoJGNbJ25hbWUnXSAgPz8gJycpOwogICAgICAgICAgICAgICAgaWYgKCEkcGhvbmUpIHsgJHNraXBwZWQrKzsgY29udGludWU7IH0KICAgICAgICAgICAgICAgICRleGlzdGluZyA9ICR3cGRiLT5nZXRfdmFyKCR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgaWQgRlJPTSAkdGFibGUgV0hFUkUgcGhvbmUgPSAlcyIsICRwaG9uZQogICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgICAgICBpZiAoJGV4aXN0aW5nKSB7ICRza2lwcGVkKys7IGNvbnRpbnVlOyB9CiAgICAgICAgICAgICAgICAkd3BkYi0+aW5zZXJ0KCR0YWJsZSwgWwogICAgICAgICAgICAgICAgICAgICdwaG9uZScgICAgICAgICA9PiAkcGhvbmUsCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnICAgICAgICAgID0+ICRuYW1lLAogICAgICAgICAgICAgICAgICAgICdlbWFpbCcgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnb3JpZ2VucycgICAgICAgPT4gd3BfanNvbl9lbmNvZGUoWydrb21tb19pbXBvcnQnXSksCiAgICAgICAgICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwKICAgICAgICAgICAgICAgICAgICAnY3JlYXRlZF9hdCcgICAgPT4gY3VycmVudF90aW1lKCdteXNxbCcpLAogICAgICAgICAgICAgICAgICAgICd1cGRhdGVkX2F0JyAgICA9PiBjdXJyZW50X3RpbWUoJ215c3FsJyksCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICRpbnNlcnRlZCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbJ29rJyA9PiB0cnVlLCAnaW5zZXJ0ZWQnID0+ICRpbnNlcnRlZCwgJ3NraXBwZWQnID0+ICRza2lwcGVkXSk7CiAgICAgICAgfSwKICAgICAgICAncGVybWlzc2lvbl9jYWxsYmFjaycgPT4gJ19fcmV0dXJuX3RydWUnLAogICAgXSk7Cn0sIDIwKTsKCgoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFBBUkNFSVJPUyDigJQgQUpBWCBIQU5ETEVSUwovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbignd3BfYWpheF92bTJfc2F2ZV9wYXJ0bmVyJywgJ3ZtMl9hamF4X3NhdmVfcGFydG5lcicpOwpmdW5jdGlvbiB2bTJfYWpheF9zYXZlX3BhcnRuZXIoKSB7CiAgICBjaGVja19hamF4X3JlZmVyZXIoJ3ZtMl9ub25jZScsICdub25jZScpOwogICAgZ2xvYmFsICR3cGRiOwogICAgJHRhYmxlID0gJHdwZGItPnByZWZpeCAuICd2bTJfcGFydG5lcnMnOwogICAgJGlkICAgID0gaW50dmFsKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgICRkYXRhICA9IFsKICAgICAgICAnbmFtZScgICAgICAgID0+IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWyduYW1lJ10gPz8gJycpLAogICAgICAgICdwaG9uZScgICAgICAgPT4gcHJlZ19yZXBsYWNlKCcvXEQvJywgJycsICRfUE9TVFsncGhvbmUnXSA/PyAnJyksCiAgICAgICAgJ2VtYWlsJyAgICAgICA9PiBzYW5pdGl6ZV9lbWFpbCgkX1BPU1RbJ2VtYWlsJ10gPz8gJycpLAogICAgICAgICdhdHJhY2FvJyAgICAgPT4gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2F0cmFjYW8nXSA/PyAnJyksCiAgICAgICAgJ3JlZ2lhbycgICAgICA9PiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsncmVnaWFvJ10gPz8gJycpLAogICAgICAgICdjaWRhZGUnICAgICAgPT4gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2NpZGFkZSddID8/ICcnKSwKICAgICAgICAnZXN0YWRvJyAgICAgID0+IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydlc3RhZG8nXSA/PyAnJyksCiAgICAgICAgJ3N0YXR1cycgICAgICA9PiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnc3RhdHVzJ10gPz8gJ2F0aXZvJyksCiAgICAgICAgJ29ic2VydmFjb2VzJyAgID0+IHNhbml0aXplX3RleHRhcmVhX2ZpZWxkKCRfUE9TVFsnb2JzZXJ2YWNvZXMnXSA/PyAnJyksCiAgICAgICAgJ3djX2NhdGVnb3JpZXMnID0+IHdwX2pzb25fZW5jb2RlKCBqc29uX2RlY29kZSggc3RyaXBzbGFzaGVzKCAkX1BPU1RbJ3djX2NhdGVnb3JpZXMnXSA/PyAnW10nICksIHRydWUgKSA/OiBbXSApLAogICAgICAgICd3Y190YWdzJyAgICAgICA9PiB3cF9qc29uX2VuY29kZSgganNvbl9kZWNvZGUoIHN0cmlwc2xhc2hlcyggJF9QT1NUWyd3Y190YWdzJ10gICAgICAgPz8gJ1tdJyApLCB0cnVlICkgPzogW10gKSwKICAgIF07CiAgICBpZiAoJGlkKSB7CiAgICAgICAgJGRhdGFbJ3VwZGF0ZWRfYXQnXSA9IGN1cnJlbnRfdGltZSgnbXlzcWwnKTsKICAgICAgICAkd3BkYi0+dXBkYXRlKCR0YWJsZSwgJGRhdGEsIFsnaWQnID0+ICRpZF0pOwogICAgICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnaWQnID0+ICRpZCwgJ2FjdGlvbicgPT4gJ3VwZGF0ZWQnXSk7CiAgICB9IGVsc2UgewogICAgICAgICRkYXRhWydjcmVhdGVkX2F0J10gPSBjdXJyZW50X3RpbWUoJ215c3FsJyk7CiAgICAgICAgJHdwZGItPmluc2VydCgkdGFibGUsICRkYXRhKTsKICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ2lkJyA9PiAkd3BkYi0+aW5zZXJ0X2lkLCAnYWN0aW9uJyA9PiAnY3JlYXRlZCddKTsKICAgIH0KfQoKYWRkX2FjdGlvbignd3BfYWpheF92bTJfZGVsZXRlX3BhcnRuZXInLCAndm0yX2FqYXhfZGVsZXRlX3BhcnRuZXInKTsKZnVuY3Rpb24gdm0yX2FqYXhfZGVsZXRlX3BhcnRuZXIoKSB7CiAgICBjaGVja19hamF4X3JlZmVyZXIoJ3ZtMl9ub25jZScsICdub25jZScpOwogICAgZ2xvYmFsICR3cGRiOwogICAgJGlkID0gaW50dmFsKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgIGlmICgkaWQpICR3cGRiLT5kZWxldGUoJHdwZGItPnByZWZpeCAuICd2bTJfcGFydG5lcnMnLCBbJ2lkJyA9PiAkaWRdKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCk7Cn0KCmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX2FwcHJvdmVfcXVldWUnLCAndm0yX2FqYXhfYXBwcm92ZV9xdWV1ZScpOwpmdW5jdGlvbiB2bTJfYWpheF9hcHByb3ZlX3F1ZXVlKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfbm9uY2UnLCAnbm9uY2UnKTsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRpZCAgICAgPSBpbnR2YWwoJF9QT1NUWydpZCddID8/IDApOwogICAgJGFjdGlvbiA9IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydxdWV1ZV9hY3Rpb24nXSA/PyAnYXBwcm92ZScpOwogICAgaWYgKCRhY3Rpb24gPT09ICdhcHByb3ZlJykgewogICAgICAgICRyb3cgPSAkd3BkYi0+Z2V0X3Jvdygkd3BkYi0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSB7JHdwZGItPnByZWZpeH12bTJfYXBwcm92YWxfcXVldWUgV0hFUkUgaWQ9JWQiLCAkaWQpKTsKICAgICAgICBpZiAoJHJvdyAmJiAkcm93LT5waG9uZSkgewogICAgICAgICAgICAvLyBFbnZpYXIgdmlhIFotQVBJCiAgICAgICAgICAgICRjaGFubmVsID0gZ2V0X29wdGlvbigndm0yX3BhcmNlaXJvc19jaGFubmVsJywgJ3phcGlfNzU1MScpOwogICAgICAgICAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRjaGFubmVsc1skY2hhbm5lbF0pKSB7CiAgICAgICAgICAgICAgICAkY2ggPSAkY2hhbm5lbHNbJGNoYW5uZWxdOwogICAgICAgICAgICAgICAgJHVybCA9ICJodHRwczovL2FwaS56LWFwaS5pby9pbnN0YW5jZXMveyRjaFsnaW5zdGFuY2UnXX0vdG9rZW4veyRjaFsndG9rZW4nXX0vc2VuZC10ZXh0IjsKICAgICAgICAgICAgICAgIHdwX3JlbW90ZV9wb3N0KCR1cmwsIFsKICAgICAgICAgICAgICAgICAgICAnaGVhZGVycycgPT4gWydDb250ZW50LVR5cGUnPT4nYXBwbGljYXRpb24vanNvbicsJ0NsaWVudC1Ub2tlbic9PlZNMl9aQVBJX0NMSUVOVF0sCiAgICAgICAgICAgICAgICAgICAgJ2JvZHknICAgID0+IGpzb25fZW5jb2RlKFsncGhvbmUnPT4kcm93LT5waG9uZSwgJ21lc3NhZ2UnPT4kcm93LT5tZXNzYWdlXSksCiAgICAgICAgICAgICAgICAgICAgJ3RpbWVvdXQnID0+IDEwLAogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHdwZGItPnVwZGF0ZSgkd3BkYi0+cHJlZml4IC4gJ3ZtMl9hcHByb3ZhbF9xdWV1ZScsIFsnc3RhdHVzJz0+J2Fwcm92YWRvJywnc2VudF9hdCc9PmN1cnJlbnRfdGltZSgnbXlzcWwnKV0sIFsnaWQnPT4kaWRdKTsKICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ2FjdGlvbic9PidhcHByb3ZlZCddKTsKICAgIH0gZWxzZWlmICgkYWN0aW9uID09PSAnY2FuY2VsJykgewogICAgICAgICR3cGRiLT51cGRhdGUoJHdwZGItPnByZWZpeCAuICd2bTJfYXBwcm92YWxfcXVldWUnLCBbJ3N0YXR1cyc9PidjYW5jZWxhZG8nXSwgWydpZCc9PiRpZF0pOwogICAgICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnYWN0aW9uJz0+J2NhbmNlbGxlZCddKTsKICAgIH0gZWxzZWlmICgkYWN0aW9uID09PSAnZWRpdCcpIHsKICAgICAgICAkbXNnID0gc2FuaXRpemVfdGV4dGFyZWFfZmllbGQoJF9QT1NUWydtZXNzYWdlJ10gPz8gJycpOwogICAgICAgICR3cGRiLT51cGRhdGUoJHdwZGItPnByZWZpeCAuICd2bTJfYXBwcm92YWxfcXVldWUnLCBbJ21lc3NhZ2UnPT4kbXNnXSwgWydpZCc9PiRpZF0pOwogICAgICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCk7CiAgICB9Cn0KCmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX2NyZWF0ZV9tYXRjaGluZ19yb3VuZCcsICd2bTJfYWpheF9jcmVhdGVfbWF0Y2hpbmdfcm91bmQnKTsKZnVuY3Rpb24gdm0yX2FqYXhfY3JlYXRlX21hdGNoaW5nX3JvdW5kKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfbm9uY2UnLCAnbm9uY2UnKTsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRhdHJhY2FvICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnYXRyYWNhbyddID8/ICcnKTsKICAgICRldmVudF9kYXRlID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2V2ZW50X2RhdGUnXSA/PyAnJyk7CiAgICAkb3JkZXJfaWQgID0gaW50dmFsKCRfUE9TVFsnb3JkZXJfaWQnXSA/PyAwKTsKICAgICRtc2dfdHBsICAgPSBzYW5pdGl6ZV90ZXh0YXJlYV9maWVsZCgkX1BPU1RbJ21zZ190ZW1wbGF0ZSddID8/ICcnKTsKCiAgICAvLyBCdXNjYXIgcGFyY2Vpcm9zIGNvbSBlc3NhIGF0cmHDp8OjbyBlIGRpc3BvbsOtdmVpcyBuYSBkYXRhCiAgICAkcGFydG5lcnMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICJTRUxFQ1QgcC4qIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIHAKICAgICAgICAgICAgIFdIRVJFIHAuc3RhdHVzPSdhdGl2bycgQU5EIHAuYXRyYWNhbyBMSUtFICVzCiAgICAgICAgICAgICBBTkQgcC5pZCBOT1QgSU4gKAogICAgICAgICAgICAgICAgU0VMRUNUIHBhcnRuZXJfaWQgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfYXZhaWxhYmlsaXR5CiAgICAgICAgICAgICAgICBXSEVSRSBldmVudF9kYXRlPSVzIEFORCBzdGF0dXM9J29jdXBhZG8nCiAgICAgICAgICAgICApIExJTUlUIDIwIiwKICAgICAgICAgICAgJyUnIC4gJGF0cmFjYW8gLiAnJScsICRldmVudF9kYXRlCiAgICAgICAgKQogICAgKTsKCiAgICAkcXVldWVkID0gMDsKICAgICRjaGFubmVsID0gZ2V0X29wdGlvbigndm0yX3BhcmNlaXJvc19jaGFubmVsJywgJ3phcGlfNzU1MScpOwogICAgZm9yZWFjaCAoJHBhcnRuZXJzIGFzICRwKSB7CiAgICAgICAgaWYgKCEkcC0+cGhvbmUpIGNvbnRpbnVlOwogICAgICAgICRtc2cgPSBzdHJfcmVwbGFjZShbJ3tub21lfScsJ3tkYXRhX2V2ZW50b30nLCd7YXRyYWNhb30nXSwgWyRwLT5uYW1lLCAkZXZlbnRfZGF0ZSwgJGF0cmFjYW9dLCAkbXNnX3RwbCk7CiAgICAgICAgJHdwZGItPmluc2VydCgkd3BkYi0+cHJlZml4IC4gJ3ZtMl9hcHByb3ZhbF9xdWV1ZScsIFsKICAgICAgICAgICAgJ3BhcnRuZXJfaWQnID0+ICRwLT5pZCwKICAgICAgICAgICAgJ29yZGVyX2lkJyAgID0+ICRvcmRlcl9pZCwKICAgICAgICAgICAgJ3Bob25lJyAgICAgID0+ICRwLT5waG9uZSwKICAgICAgICAgICAgJ21lc3NhZ2UnICAgID0+ICRtc2csCiAgICAgICAgICAgICd0aXBvJyAgICAgICA9PiAnY29udml0ZScsCiAgICAgICAgICAgICdwcmlvcml0eScgICA9PiAndXJnZW50ZScsCiAgICAgICAgICAgICdzdGF0dXMnICAgICA9PiAncGVuZGVudGUnLAogICAgICAgICAgICAnY3JlYXRlZF9hdCcgPT4gY3VycmVudF90aW1lKCdteXNxbCcpLAogICAgICAgIF0pOwogICAgICAgICRxdWV1ZWQrKzsKICAgIH0KICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsncXVldWVkJyA9PiAkcXVldWVkLCAncGFydG5lcnMnID0+IGNvdW50KCRwYXJ0bmVycyldKTsKfQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFBBUkNFSVJPUyDigJQgUMOBR0lOQSBQUklOQ0lQQUwKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9wYXJjZWlyb3NfcGFnZSgpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRub25jZSAgICAgID0gd3BfY3JlYXRlX25vbmNlKCd2bTJfbm9uY2UnKTsKICAgICR0YWIgICAgICAgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsndGFiJ10gPz8gJ2NhZGFzdHJvJyk7CiAgICAkYmFzZSAgICAgICA9IGFkbWluX3VybCgnYWRtaW4ucGhwJyk7CiAgICAkdGFicyAgICAgICA9IFsnY2FkYXN0cm8nPT4n8J+RpSBDYWRhc3RybycsJ21hdGNoaW5nJz0+J/Cfjq8gTWF0Y2hpbmcnLCdldmVudG9zJz0+J/CfjqogRXZlbnRvcyBBdGl2b3MnLCdmaWxhJz0+J/Cfk4sgRmlsYSBkZSBBcHJvdmHDp8OjbycsJ21ldHJpY2FzJz0+J/Cfk4ogTcOpdHJpY2FzJywnZWxlbmNvJz0+J/CfjqwgRWxlbmNvJ107CgogICAgLy8g4pSA4pSAIERhZG9zIGRlIGNhZGEgdGFiIOKUgOKUgAogICAgJHRvdGFsX3BhcnRuZXJzICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMiKTsKICAgICR0b3RhbF9hdGl2b3MgICAgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIHN0YXR1cz0nYXRpdm8nIik7CiAgICAkZmlsYV9wZW5kZW50ZXMgICA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9hcHByb3ZhbF9xdWV1ZSBXSEVSRSBzdGF0dXM9J3BlbmRlbnRlJyIpOwogICAgJGZpbGFfdXJnZW50ZXMgICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfYXBwcm92YWxfcXVldWUgV0hFUkUgc3RhdHVzPSdwZW5kZW50ZScgQU5EIHByaW9yaXR5PSd1cmdlbnRlJyIpOwoKICAgIC8vIFBhcmNlaXJvcyBjYWRhc3RyYWRvcwogICAgJHNlYXJjaCAgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsncyddID8/ICcnKTsKICAgICRwZXJfcGFnZSA9IDIwOwogICAgJHBhZ2VkICAgID0gbWF4KDEsIGludHZhbCgkX0dFVFsncGFnZWQnXSA/PyAxKSk7CiAgICAkb2Zmc2V0ICAgPSAoJHBhZ2VkIC0gMSkgKiAkcGVyX3BhZ2U7CiAgICAkd2hlcmVfcyAgPSAkc2VhcmNoID8gJHdwZGItPnByZXBhcmUoIkFORCAobmFtZSBMSUtFICVzIE9SIHBob25lIExJS0UgJXMgT1IgYXRyYWNhbyBMSUtFICVzKSIsICIlJHNlYXJjaCUiLCAiJSRzZWFyY2glIiwgIiUkc2VhcmNoJSIpIDogJyc7CiAgICAkcGFydG5lcnMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIDE9MSAkd2hlcmVfcyBPUkRFUiBCWSBuYW1lIEFTQyBMSU1JVCAkcGVyX3BhZ2UgT0ZGU0VUICRvZmZzZXQiKTsKICAgICR0b3RhbF9maWx0ZXJlZCA9IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyBXSEVSRSAxPTEgJHdoZXJlX3MiKTsKCiAgICAvLyBGaWxhIGRlIGFwcm92YcOnw6NvCiAgICAkcXVldWUgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCBxLiosIHAubmFtZSBhcyBwYXJ0bmVyX25hbWUgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfYXBwcm92YWxfcXVldWUgcSBMRUZUIEpPSU4geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIHAgT04gcS5wYXJ0bmVyX2lkPXAuaWQgV0hFUkUgcS5zdGF0dXM9J3BlbmRlbnRlJyBPUkRFUiBCWSBGSUVMRChxLnByaW9yaXR5LCd1cmdlbnRlJywnbm9ybWFsJywnYmFpeG8nKSwgcS5jcmVhdGVkX2F0IEFTQyBMSU1JVCA1MCIpOwoKICAgIC8vIE3DqXRyaWNhcwogICAgJHRvcF9wYXJ0bmVycyA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0VMRUNUICosIG5wcyBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyBXSEVSRSBzdGF0dXM9J2F0aXZvJyBPUkRFUiBCWSB0b3RhbF9ldmVudG9zIERFU0MgTElNSVQgMTAiKTsKCiAgICAvLyBQcm9kdXRvcyBXb29Db21tZXJjZSBwYXJhIG8gc2VsZWN0CiAgICAkd2NfcHJvZHVjdHMgPSBbXTsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3djX2dldF9wcm9kdWN0cycpKSB7CiAgICAgICAgJHByb2RzID0gd2NfZ2V0X3Byb2R1Y3RzKFsnbGltaXQnPT41MCwnc3RhdHVzJz0+J3B1Ymxpc2gnXSk7CiAgICAgICAgZm9yZWFjaCAoJHByb2RzIGFzICRwKSAkd2NfcHJvZHVjdHNbJHAtPmdldF9pZCgpXSA9ICRwLT5nZXRfbmFtZSgpOwogICAgfQoKICAgIC8vIFN0YWdlIGxhYmVscyBwYXJhIEV2ZW50b3MgQXRpdm9zCiAgICAkc3RhZ2VzID0gWydtYXRjaGluZyc9PifikaAgTWF0Y2hpbmcnLCdjb252aWRhZG8nPT4n4pGhIENvbnZpdGUgRW52aWFkbycsJ2NvbmZpcm1hZG8nPT4n4pGiIENvbmZpcm1hZG8nLCdlcXVpcGUnPT4n4pGjIEVxdWlwZSBGb3JtYWRhJywnZ3J1cG8nPT4n4pGkIEdydXBvIFdBJywnb25ib2FyZGluZyc9PifikaUgT25ib2FyZGluZycsJ2xlbWJyZXRlJz0+J+KRpiBMZW1icmV0ZScsJ2NoZWNraW4nPT4n4pGnIENoZWNrLWluJywnY2hlY2tvdXQnPT4n4pGoIENoZWNrLW91dCcsJ3BhZ2FtZW50byc9PifikakgUGFnYW1lbnRvJ107CgogICAgLy8gRXZlbnRvcyBhdGl2b3MgY29tIHBhcmNlaXJvcwogICAgJGV2ZW50b3NfYXRpdm9zID0gJHdwZGItPmdldF9yZXN1bHRzKCJTRUxFQ1QgcGUuKiwgcC5uYW1lIGFzIHBhcnRuZXJfbmFtZSwgcC5waG9uZSBhcyBwYXJ0bmVyX3Bob25lIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJfZXZlbnRzIHBlIExFRlQgSk9JTiB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMgcCBPTiBwZS5wYXJ0bmVyX2lkPXAuaWQgT1JERVIgQlkgcGUuZXZlbnRfZGF0ZSBBU0MgTElNSVQgMjAiKTsKCiAgICBlY2hvICc8ZGl2IGNsYXNzPSJ3cmFwIHZtMi13cmFwIj4nOwogICAgZWNobyAnPHN0eWxlPgogICAgLnZtMi13cmFwe21heC13aWR0aDoxMjAwcHh9CiAgICAudm0yLWtwaS1yb3d7ZGlzcGxheTpmbGV4O2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1ib3R0b206MjBweH0KICAgIC52bTIta3Bpe2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNHB4IDE4cHg7bWluLXdpZHRoOjE0MHB4O2ZsZXg6MTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmFsbCAuMTVzIGVhc2V9CiAgICAudm0yLWtwaTpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtib3gtc2hhZG93OjAgNHB4IDE0cHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1jb2xvcjojMDA3M2FhfQogICAgLnZtMi1rcGkgLmxhYmVse2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2NjY7bWFyZ2luLWJvdHRvbTo0cHh9CiAgICAudm0yLWtwaSAudmFsdWV7Zm9udC1zaXplOjI2cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxZDIzMjd9CiAgICAudm0yLWtwaSAuc3Vie2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODg7bWFyZ2luLXRvcDoycHh9CiAgICAudm0yLXRhYnN7ZGlzcGxheTpmbGV4O2dhcDo0cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLWJvdHRvbToyMHB4O2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlMGUwZTA7cGFkZGluZy1ib3R0b206MH0KICAgIC52bTItdGFiLWJ0bntwYWRkaW5nOjEwcHggMTZweDtib3JkZXI6bm9uZTtiYWNrZ3JvdW5kOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzU1NTtib3JkZXItYm90dG9tOjNweCBzb2xpZCB0cmFuc3BhcmVudDttYXJnaW4tYm90dG9tOi0ycHg7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDt0cmFuc2l0aW9uOmFsbCAuMTVzfQogICAgLnZtMi10YWItYnRuOmhvdmVye2JhY2tncm91bmQ6I2YwZjBmMDtjb2xvcjojMWQyMzI3fQogICAgLnZtMi10YWItYnRuLmFjdGl2ZXtjb2xvcjojN2MzYWVkO2JvcmRlci1ib3R0b20tY29sb3I6IzdjM2FlZDtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZjlmNGZmfQogICAgLnZtMi1iYWRnZXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tbGVmdDo0cHh9CiAgICAuYmFkZ2UtcmVke2JhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojZGMyNjI2fQogICAgLmJhZGdlLWdyZWVue2JhY2tncm91bmQ6I2RjZmNlNztjb2xvcjojMTZhMzRhfQogICAgLmJhZGdlLXB1cnBsZXtiYWNrZ3JvdW5kOiNlZGU5ZmU7Y29sb3I6IzdjM2FlZH0KICAgIC5iYWRnZS1ncmF5e2JhY2tncm91bmQ6I2YxZjVmOTtjb2xvcjojNjQ3NDhifQogICAgLnZtMi1jYXJke2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxOHB4O21hcmdpbi1ib3R0b206MTZweH0KICAgIC52bTItY2FyZCBoM3ttYXJnaW46MCAwIDEycHg7Zm9udC1zaXplOjE1cHg7Y29sb3I6IzFkMjMyN30KICAgIC52bTItc3BsaXR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczozMjBweCAxZnI7Z2FwOjE2cHh9CiAgICBAbWVkaWEobWF4LXdpZHRoOjkwMHB4KXsudm0yLXNwbGl0e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fQogICAgLnZtMi1wYXJ0bmVyLWxpc3R7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6OHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOiNmZmZ9CiAgICAudm0yLXBhcnRuZXItaXRlbXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O3BhZGRpbmc6MTBweCAxNHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmMGYwZjA7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xc30KICAgIC52bTItcGFydG5lci1pdGVtOmhvdmVye2JhY2tncm91bmQ6I2Y5ZjRmZn0KICAgIC52bTItcGFydG5lci1pdGVtLnNlbGVjdGVke2JhY2tncm91bmQ6I2Y5ZjRmZjtib3JkZXItbGVmdDozcHggc29saWQgIzdjM2FlZH0KICAgIC52bTItcGFydG5lci1hdmF0YXJ7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIzdjM2FlZCwjYTg1NWY3KTtjb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE0cHg7ZmxleC1zaHJpbms6MH0KICAgIC52bTItcGFydG5lci1pbmZvIC5uYW1le2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDtjb2xvcjojMWQyMzI3fQogICAgLnZtMi1wYXJ0bmVyLWluZm8gLnN1Yntmb250LXNpemU6MTFweDtjb2xvcjojODg4O21hcmdpbi10b3A6MXB4fQogICAgLnZtMi1kZXRhaWwtcGFuZWx7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjIwcHh9CiAgICAudm0yLWZvcm0tcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjEycHh9CiAgICBAbWVkaWEobWF4LXdpZHRoOjYwMHB4KXsudm0yLWZvcm0tcm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fQogICAgLnZtMi1mb3JtLXJvdyBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTU1O21hcmdpbi1ib3R0b206NHB4fQogICAgLnZtMi1mb3JtLXJvdyBpbnB1dCwudm0yLWZvcm0tcm93IHNlbGVjdCwudm0yLWZvcm0tcm93IHRleHRhcmVhe3dpZHRoOjEwMCU7cGFkZGluZzo3cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7Ym94LXNpemluZzpib3JkZXItYm94fQogICAgLnZtMi1idG57ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDt0cmFuc2l0aW9uOmFsbCAuMTVzfQogICAgLnZtMi1idG4tcHJpbWFyeXtiYWNrZ3JvdW5kOiM3YzNhZWQ7Y29sb3I6I2ZmZn0KICAgIC52bTItYnRuLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZDojNmQyOGQ5fQogICAgLnZtMi1idG4tc3VjY2Vzc3tiYWNrZ3JvdW5kOiMxNmEzNGE7Y29sb3I6I2ZmZn0KICAgIC52bTItYnRuLWRhbmdlcntiYWNrZ3JvdW5kOiNkYzI2MjY7Y29sb3I6I2ZmZn0KICAgIC52bTItYnRuLWdyYXl7YmFja2dyb3VuZDojZjFmNWY5O2NvbG9yOiMzNzQxNTE7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwfQogICAgLnZtMi1idG4tZ3JheTpob3ZlcntiYWNrZ3JvdW5kOiNlNWU3ZWJ9CiAgICAudm0yLWJ0bi1zbXtwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4fQogICAgLnZtMi10YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MTNweH0KICAgIC52bTItdGFibGUgdGh7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4IDEwcHg7YmFja2dyb3VuZDojZjlmYWZiO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlMGUwZTA7Zm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MDtmb250LXdlaWdodDo2MDB9CiAgICAudm0yLXRhYmxlIHRke3BhZGRpbmc6OHB4IDEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YwZjBmMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9CiAgICAudm0yLXRhYmxlIHRyOmhvdmVyIHRke2JhY2tncm91bmQ6I2ZhZmFmYX0KICAgIC52bTItcXVldWUtaXRlbXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE0cHg7bWFyZ2luLWJvdHRvbToxMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfQogICAgLnZtMi1xdWV1ZS1pdGVtIC5oZWFkZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjhweH0KICAgIC52bTItcXVldWUtaXRlbSAuYnViYmxle2JhY2tncm91bmQ6I2YwZmRmNDtib3JkZXI6MXB4IHNvbGlkICNiYmY3ZDA7Ym9yZGVyLXJhZGl1czoxMnB4IDEycHggMTJweCAwO3BhZGRpbmc6MTBweCAxNHB4O3doaXRlLXNwYWNlOnByZS13cmFwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiMxZDIzMjc7bGluZS1oZWlnaHQ6MS41O21heC1oZWlnaHQ6MTIwcHg7b3ZlcmZsb3c6YXV0b30KICAgIC52bTItcXVldWUtaXRlbSAuYWN0aW9uc3tkaXNwbGF5OmZsZXg7Z2FwOjZweDttYXJnaW4tdG9wOjhweDtmbGV4LXdyYXA6d3JhcH0KICAgIC52bTItcHJpb3JpdHktdXJnZW50ZXtib3JkZXItbGVmdDo0cHggc29saWQgI2RjMjYyNn0KICAgIC52bTItcHJpb3JpdHktbm9ybWFse2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjZjU5ZTBifQogICAgLnZtMi1wcmlvcml0eS1iYWl4b3tib3JkZXItbGVmdDo0cHggc29saWQgIzIyYzU1ZX0KICAgIC52bTItbGlmZWN5Y2xlLWJhcntkaXNwbGF5OmZsZXg7Z2FwOjJweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDo2cHh9CiAgICAudm0yLXN0YWdlLWRvdHt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6I2U1ZTdlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1zaXplOjlweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzZiNzI4MDtjdXJzb3I6ZGVmYXVsdDtmbGV4LXNocmluazowfQogICAgLnZtMi1zdGFnZS1kb3QuZG9uZXtiYWNrZ3JvdW5kOiM3YzNhZWQ7Y29sb3I6I2ZmZn0KICAgIC52bTItc3RhZ2UtZG90LmN1cnJlbnR7YmFja2dyb3VuZDojZjU5ZTBiO2NvbG9yOiNmZmY7Ym94LXNoYWRvdzowIDAgMCAzcHggI2ZlZjNjN30KICAgIC52bTItbWF0Y2hpbmctY2FyZHtiYWNrZ3JvdW5kOiNmOWY0ZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkNmZlO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHg7bWFyZ2luLWJvdHRvbToxMnB4fQogICAgLnZtMi1tYXRjaGluZy1jYXJkIC50aXRsZXtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE1cHg7bWFyZ2luLWJvdHRvbTo4cHg7Y29sb3I6IzViMjFiNn0KICAgIC52bTItZW1wdHktc3RhdGV7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0OHB4IDIwcHg7Y29sb3I6IzljYTNhZn0KICAgIC52bTItZW1wdHktc3RhdGUgLmljb257Zm9udC1zaXplOjQ4cHg7bWFyZ2luLWJvdHRvbToxMnB4fQogICAgLnZtMi1lbXB0eS1zdGF0ZSBwe2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206MTZweH0KICAgIDwvc3R5bGU+JzsKCiAgICAvLyBIZWFkZXIgKyBLUElzCiAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHg7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICA8aDEgc3R5bGU9Im1hcmdpbjowO2ZvbnQtc2l6ZToyMnB4Ij7wn46tIFBhcmNlaXJvcyAmIEFydGlzdGFzPC9oMT4KICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweCI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1wcmltYXJ5IiBvbmNsaWNrPSJ2bTJPcGVuTW9kYWwoMCkiPisgTm92byBQYXJjZWlybzwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+JzsKCiAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTIta3BpLXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgb25jbGljaz0ibG9jYXRpb24uaHJlZj1cJz9wYWdlPXZtMi1wYXJjZWlyb3MmdGFiPWNhZGFzdHJvXCciPjxkaXYgY2xhc3M9ImxhYmVsIj5Ub3RhbCBQYXJjZWlyb3M8L2Rpdj48ZGl2IGNsYXNzPSJ2YWx1ZSI+JyAuICR0b3RhbF9wYXJ0bmVycyAuICc8L2Rpdj48ZGl2IGNsYXNzPSJzdWIiPmNhZGFzdHJhZG9zPC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idm0yLWtwaSIgb25jbGljaz0ibG9jYXRpb24uaHJlZj1cJz9wYWdlPXZtMi1wYXJjZWlyb3MmdGFiPWNhZGFzdHJvXCciPjxkaXYgY2xhc3M9ImxhYmVsIj7wn5+iIEF0aXZvczwvZGl2PjxkaXYgY2xhc3M9InZhbHVlIj4nIC4gJHRvdGFsX2F0aXZvcyAuICc8L2Rpdj48ZGl2IGNsYXNzPSJzdWIiPmRpc3BvbsOtdmVpczwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9XCc/cGFnZT12bTItcGFyY2Vpcm9zJnRhYj1maWxhXCciPjxkaXYgY2xhc3M9ImxhYmVsIj7wn5OLIEZpbGEgQXByb3Zhw6fDo288L2Rpdj48ZGl2IGNsYXNzPSJ2YWx1ZSI+JyAuICRmaWxhX3BlbmRlbnRlcyAuICc8L2Rpdj48ZGl2IGNsYXNzPSJzdWIiPicgLiAoJGZpbGFfdXJnZW50ZXMgPyAiPHNwYW4gc3R5bGU9J2NvbG9yOiNkYzI2MjYnPuKaoSAkZmlsYV91cmdlbnRlcyB1cmdlbnRlczwvc3Bhbj4iIDogJ3BlbmRlbnRlcycpIC4gJzwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InZtMi1rcGkiIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9XCc/cGFnZT12bTItcGFyY2Vpcm9zJnRhYj1ldmVudG9zXCciPjxkaXYgY2xhc3M9ImxhYmVsIj7wn46qIEV2ZW50b3MgQXRpdm9zPC9kaXY+PGRpdiBjbGFzcz0idmFsdWUiPicgLiBjb3VudCgkZXZlbnRvc19hdGl2b3MpIC4gJzwvZGl2PjxkaXYgY2xhc3M9InN1YiI+ZW0gYW5kYW1lbnRvPC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4nOwoKICAgIC8vIFRhYnMKICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi10YWJzIj4nOwogICAgZm9yZWFjaCAoJHRhYnMgYXMgJHRrID0+ICR0bCkgewogICAgICAgICR1cmwgICAgPSBhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItcGFyY2Vpcm9zJywndGFiJz0+JHRrXSwgJGJhc2UpOwogICAgICAgICRhY3RpdmUgPSAoJHRhYiA9PT0gJHRrKSA/ICcgYWN0aXZlJyA6ICcnOwogICAgICAgICRiYWRnZSAgPSAnJzsKICAgICAgICBpZiAoJHRrID09PSAnZmlsYScgJiYgJGZpbGFfcGVuZGVudGVzID4gMCkgewogICAgICAgICAgICAkY2xzICAgPSAkZmlsYV91cmdlbnRlcyA+IDAgPyAnYmFkZ2UtcmVkJyA6ICdiYWRnZS1wdXJwbGUnOwogICAgICAgICAgICAkYmFkZ2UgPSAnPHNwYW4gY2xhc3M9InZtMi1iYWRnZSAnLiRjbHMuJyI+JyAuICgkZmlsYV91cmdlbnRlcyA/OiAkZmlsYV9wZW5kZW50ZXMpIC4gJzwvc3Bhbj4nOwogICAgICAgIH0KICAgICAgICBlY2hvICI8YSBocmVmPSckdXJsJyBjbGFzcz0ndm0yLXRhYi1idG4kYWN0aXZlJz4kdGwkYmFkZ2U8L2E+IjsKICAgIH0KICAgIGVjaG8gJzwvZGl2Pic7CgogICAgLy8g4pSA4pSAIFRBQjogQ0FEQVNUUk8g4pSA4pSACiAgICBpZiAoJHRhYiA9PT0gJ2NhZGFzdHJvJykgewogICAgICAgICRzZWxfaWQgPSBpbnR2YWwoJF9HRVRbJ3BhcnRuZXJfaWQnXSA/PyAwKTsKICAgICAgICAkc2VsX3BhcnRuZXIgPSAkc2VsX2lkID8gJHdwZGItPmdldF9yb3coJHdwZGItPnByZXBhcmUoIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIGlkPSVkIiwgJHNlbF9pZCkpIDogbnVsbDsKCiAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjE0cHg7ZmxleC13cmFwOndyYXAiPic7CiAgICAgICAgJHN1ID0gYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLXBhcmNlaXJvcycsJ3RhYic9PidjYWRhc3RybycsJ3MnPT4nJ10sICRiYXNlKTsKICAgICAgICBlY2hvICc8Zm9ybSBtZXRob2Q9ImdldCIgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O2ZsZXg6MSI+JzsKICAgICAgICBlY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYWdlIiB2YWx1ZT0idm0yLXBhcmNlaXJvcyI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idGFiIiB2YWx1ZT0iY2FkYXN0cm8iPic7CiAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9InNlYXJjaCIgbmFtZT0icyIgdmFsdWU9IicgLiBlc2NfYXR0cigkc2VhcmNoKSAuICciIHBsYWNlaG9sZGVyPSLwn5SNIEJ1c2NhciBwb3Igbm9tZSwgcGhvbmUgb3UgYXRyYcOnw6NvLi4uIiBzdHlsZT0iZmxleDoxO3BhZGRpbmc6N3B4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4Ij4nOwogICAgICAgIGVjaG8gJzxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0idm0yLWJ0biB2bTItYnRuLWdyYXkiPkJ1c2NhcjwvYnV0dG9uPic7CiAgICAgICAgaWYgKCRzZWFyY2gpIGVjaG8gJzxhIGhyZWY9IicgLiBhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItcGFyY2Vpcm9zJywndGFiJz0+J2NhZGFzdHJvJ10sICRiYXNlKSAuICciIGNsYXNzPSJ2bTItYnRuIHZtMi1idG4tZ3JheSI+4pyVIExpbXBhcjwvYT4nOwogICAgICAgIGVjaG8gJzwvZm9ybT48L2Rpdj4nOwoKICAgICAgICBpZiAoJHRvdGFsX3BhcnRuZXJzID09PSAwKSB7CiAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1lbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uIj7wn46tPC9kaXY+CiAgICAgICAgICAgICAgICA8cD5OZW5odW0gcGFyY2Vpcm8gY2FkYXN0cmFkbyBhaW5kYS48YnI+Q2xpcXVlIGVtIDxzdHJvbmc+KyBOb3ZvIFBhcmNlaXJvPC9zdHJvbmc+IHBhcmEgY29tZcOnYXIhPC9wPgogICAgICAgICAgICA8L2Rpdj4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1zcGxpdCI+JzsKICAgICAgICAgICAgLy8gTGlzdGEKICAgICAgICAgICAgZWNobyAnPGRpdj4nOwogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItcGFydG5lci1saXN0Ij4nOwogICAgICAgICAgICBmb3JlYWNoICgkcGFydG5lcnMgYXMgJHApIHsKICAgICAgICAgICAgICAgICRpbml0aWFsID0gbWJfc3RydG91cHBlcihtYl9zdWJzdHIoJHAtPm5hbWUsIDAsIDEpKTsKICAgICAgICAgICAgICAgICRwdXJsICAgID0gYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLXBhcmNlaXJvcycsJ3RhYic9PidjYWRhc3RybycsJ3BhcnRuZXJfaWQnPT4kcC0+aWRdLCAkYmFzZSk7CiAgICAgICAgICAgICAgICAkY2xzICAgICA9ICgkcC0+aWQgPT0gJHNlbF9pZCkgPyAnIHNlbGVjdGVkJyA6ICcnOwogICAgICAgICAgICAgICAgJHN0YXR1c19iYWRnZSA9ICRwLT5zdGF0dXMgPT09ICdhdGl2bycgPyAnPHNwYW4gY2xhc3M9InZtMi1iYWRnZSBiYWRnZS1ncmVlbiI+YXRpdm88L3NwYW4+JyA6ICc8c3BhbiBjbGFzcz0idm0yLWJhZGdlIGJhZGdlLWdyYXkiPicgLiBlc2NfaHRtbCgkcC0+c3RhdHVzKSAuICc8L3NwYW4+JzsKICAgICAgICAgICAgICAgICRucHNfc3RyID0gJHAtPm5wcyA/ICfirZAgJyAuIG51bWJlcl9mb3JtYXQoJHAtPm5wcywxKSA6ICcnOwogICAgICAgICAgICAgICAgZWNobyAiPGEgaHJlZj0nJHB1cmwnIHN0eWxlPSd0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjppbmhlcml0Jz48ZGl2IGNsYXNzPSd2bTItcGFydG5lci1pdGVtJGNscyc+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ndm0yLXBhcnRuZXItYXZhdGFyJz4kaW5pdGlhbDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J3ZtMi1wYXJ0bmVyLWluZm8nIHN0eWxlPSdmbGV4OjE7bWluLXdpZHRoOjAnPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSduYW1lJz4iIC4gZXNjX2h0bWwoJHAtPm5hbWUpIC4gIiAkc3RhdHVzX2JhZGdlPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J3N1Yic+IiAuIGVzY19odG1sKCRwLT5hdHJhY2FvID86ICfigJQnKSAuICIgwrcgIiAuIGVzY19odG1sKCRwLT5jaWRhZGUgPzogJHAtPnJlZ2lhbyA/OiAn4oCUJykgLiAiICRucHNfc3RyPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0nZm9udC1zaXplOjExcHg7Y29sb3I6I2FhYTt3aGl0ZS1zcGFjZTpub3dyYXAnPiIgLiAkcC0+dG90YWxfZXZlbnRvcyAuICIgZXYuPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj48L2E+IjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8L2Rpdj4nOwogICAgICAgICAgICAvLyBQYWdpbmHDp8OjbwogICAgICAgICAgICAkdG90YWxfcGFnZXMgPSBjZWlsKCR0b3RhbF9maWx0ZXJlZCAvICRwZXJfcGFnZSk7CiAgICAgICAgICAgIGlmICgkdG90YWxfcGFnZXMgPiAxKSB7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtnYXA6NHB4O21hcmdpbi10b3A6MTBweDtmbGV4LXdyYXA6d3JhcCI+JzsKICAgICAgICAgICAgICAgIGZvciAoJGk9MTsgJGk8PSR0b3RhbF9wYWdlczsgJGkrKykgewogICAgICAgICAgICAgICAgICAgICRwdSA9IGFkZF9xdWVyeV9hcmcoWydwYWdlJz0+J3ZtMi1wYXJjZWlyb3MnLCd0YWInPT4nY2FkYXN0cm8nLCdwYWdlZCc9PiRpLCdzJz0+JHNlYXJjaF0sICRiYXNlKTsKICAgICAgICAgICAgICAgICAgICAkYWN0aXZlX3AgPSAoJGkgPT0gJHBhZ2VkKSA/ICdiYWNrZ3JvdW5kOiM3YzNhZWQ7Y29sb3I6I2ZmZjsnIDogJ2JhY2tncm91bmQ6I2YxZjVmOTtjb2xvcjojMzc0MTUxOyc7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPGEgaHJlZj0nJHB1JyBzdHlsZT0neyRhY3RpdmVfcH1wYWRkaW5nOjVweCAxMHB4O2JvcmRlci1yYWRpdXM6NXB4O2ZvbnQtc2l6ZToxMnB4O3RleHQtZGVjb3JhdGlvbjpub25lJz4kaTwvYT4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8L2Rpdj4nOyAvLyBlbmQgbGlzdGEgY29sCgogICAgICAgICAgICAvLyBEZXRhbGhlIC8gRm9ybQogICAgICAgICAgICBlY2hvICc8ZGl2Pic7CiAgICAgICAgICAgIGlmICgkc2VsX3BhcnRuZXIpIHsKICAgICAgICAgICAgICAgIC8vIE1vc3RyYXIgZmljaGEgZG8gcGFyY2Vpcm8gc2VsZWNpb25hZG8KICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1kZXRhaWwtcGFuZWwiPic7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MTZweDtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4Ij4nOwogICAgICAgICAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweCI+JzsKICAgICAgICAgICAgICAgICRpbml0aWFsID0gbWJfc3RydG91cHBlcihtYl9zdWJzdHIoJHNlbF9wYXJ0bmVyLT5uYW1lLCAwLCAxKSk7CiAgICAgICAgICAgICAgICBlY2hvICI8ZGl2IGNsYXNzPSd2bTItcGFydG5lci1hdmF0YXInIHN0eWxlPSd3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2ZvbnQtc2l6ZToyMHB4Jz4kaW5pdGlhbDwvZGl2PiI7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0OjcwMCI+JyAuIGVzY19odG1sKCRzZWxfcGFydG5lci0+bmFtZSkgLiAnPC9kaXY+JzsKICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4ODgiPicgLiBlc2NfaHRtbCgkc2VsX3BhcnRuZXItPmF0cmFjYW8gPzogJ+KAlCcpIC4gJzwvZGl2PjwvZGl2Pic7CiAgICAgICAgICAgICAgICBlY2hvICc8L2Rpdj4nOwogICAgICAgICAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo2cHg7ZmxleC13cmFwOndyYXAiPic7CiAgICAgICAgICAgICAgICBpZiAoJHNlbF9wYXJ0bmVyLT5waG9uZSkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxhIGhyZWY9Imh0dHBzOi8vd2EubWUvJyAuICRzZWxfcGFydG5lci0+cGhvbmUgLiAnIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1zdWNjZXNzIHZtMi1idG4tc20iPvCfkqwgV2hhdHNBcHA8L2E+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gJzxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1wcmltYXJ5IHZtMi1idG4tc20iIG9uY2xpY2s9InZtMk9wZW5Nb2RhbCgnIC4gJHNlbF9wYXJ0bmVyLT5pZCAuICcpIj7inI/vuI8gRWRpdGFyPC9idXR0b24+JzsKICAgICAgICAgICAgICAgIGVjaG8gJzxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1kYW5nZXIgdm0yLWJ0bi1zbSIgb25jbGljaz0idm0yRGVsZXRlUGFydG5lcignIC4gJHNlbF9wYXJ0bmVyLT5pZCAuICcpIj7wn5eR77iPIEV4Y2x1aXI8L2J1dHRvbj4nOwogICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+PC9kaXY+JzsKCiAgICAgICAgICAgICAgICAvLyBJbmZvIGdyaWQKICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1jZmctMmNvbCIgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjE2cHgiPic7CiAgICAgICAgICAgICAgICAkZmllbGRzID0gWwogICAgICAgICAgICAgICAgICAgIFsn8J+TsSBXaGF0c0FwcCcsICRzZWxfcGFydG5lci0+cGhvbmVdLAogICAgICAgICAgICAgICAgICAgIFsn8J+TpyBFbWFpbCcsICRzZWxfcGFydG5lci0+ZW1haWxdLAogICAgICAgICAgICAgICAgICAgIFsn8J+OqiBBdHJhw6fDtWVzJywgJHNlbF9wYXJ0bmVyLT5hdHJhY2FvXSwKICAgICAgICAgICAgICAgICAgICBbJ/Cfk40gUmVnacOjbycsICRzZWxfcGFydG5lci0+cmVnaWFvXSwKICAgICAgICAgICAgICAgICAgICBbJ/Cfj5nvuI8gQ2lkYWRlJywgJHNlbF9wYXJ0bmVyLT5jaWRhZGUgLiAoJHNlbF9wYXJ0bmVyLT5lc3RhZG8gPyAnLycgLiAkc2VsX3BhcnRuZXItPmVzdGFkbyA6ICcnKV0sCiAgICAgICAgICAgICAgICAgICAgWyfirZAgTlBTJywgJHNlbF9wYXJ0bmVyLT5ucHMgPyBudW1iZXJfZm9ybWF0KCRzZWxfcGFydG5lci0+bnBzLDEpIDogJ+KAlCddLAogICAgICAgICAgICAgICAgICAgIFsn8J+OrSBFdmVudG9zJywgJHNlbF9wYXJ0bmVyLT50b3RhbF9ldmVudG9zXSwKICAgICAgICAgICAgICAgICAgICBbJ/CflLTwn5+iIFN0YXR1cycsICRzZWxfcGFydG5lci0+c3RhdHVzXSwKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmllbGRzIGFzIFskbGFiZWwsICR2YWxdKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjlmYWZiO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM2NjY7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206MnB4Ij4nIC4gJGxhYmVsIC4gJzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojMWQyMzI3Ij4nIC4gZXNjX2h0bWwoJHZhbCA/OiAn4oCUJykgLiAnPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7CgogICAgICAgICAgICAgICAgaWYgKCRzZWxfcGFydG5lci0+b2JzZXJ2YWNvZXMpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY5ZTY7Ym9yZGVyOjFweCBzb2xpZCAjZmRlNjhhO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+8J+TnSBPYnM6PC9zdHJvbmc+ICcgLiBubDJicihlc2NfaHRtbCgkc2VsX3BhcnRuZXItPm9ic2VydmFjb2VzKSkgLiAnPC9kaXY+JzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyDDmmx0aW1vcyBldmVudG9zIGRvIHBhcmNlaXJvCiAgICAgICAgICAgICAgICAkcGV2ZW50cyA9ICR3cGRiLT5nZXRfcmVzdWx0cygkd3BkYi0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcl9ldmVudHMgV0hFUkUgcGFydG5lcl9pZD0lZCBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MgTElNSVQgNSIsICRzZWxfcGFydG5lci0+aWQpKTsKICAgICAgICAgICAgICAgIGlmICgkcGV2ZW50cykgewogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTZweCI+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206OHB4O2NvbG9yOiM1NTUiPvCfk4UgSGlzdMOzcmljbyBkZSBFdmVudG9zPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcGV2ZW50cyBhcyAkZXYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHN0YWdlX2xhYmVsID0gJHN0YWdlc1skZXYtPnN0YWdlXSA/PyAkZXYtPnN0YWdlOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzo2cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjBmMGYwO2ZvbnQtc2l6ZToxMnB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojN2MzYWVkIj7il4k8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4nIC4gZXNjX2h0bWwoJGV2LT5ldmVudF9kYXRlID86ICfigJQnKSAuICc8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWJhZGdlIGJhZGdlLXB1cnBsZSI+JyAuIGVzY19odG1sKCRzdGFnZV9sYWJlbCkgLiAnPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAuICgkZXYtPm9yZGVyX2lkID8gJzxhIGhyZWY9IicgLiBhZG1pbl91cmwoJ3Bvc3QucGhwP3Bvc3Q9JyAuICRldi0+b3JkZXJfaWQgLiAnJmFjdGlvbj1lZGl0JykgLiAnIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM3YzNhZWQiPiMnIC4gJGV2LT5vcmRlcl9pZCAuICc8L2E+JyA6ICcnKSAuICcKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNhYWEiPk5lbmh1bSBldmVudG8gcmVnaXN0cmFkbyBhaW5kYS48L2Rpdj4nOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVjaG8gJzwvZGl2Pic7IC8vIGRldGFpbCBwYW5lbAogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gTmVuaHVtIHBhcmNlaXJvIHNlbGVjaW9uYWRvCiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItZGV0YWlsLXBhbmVsIiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi1oZWlnaHQ6MzAwcHgiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1lbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imljb24iPvCfkYY8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2VsZWNpb25lIHVtIHBhcmNlaXJvIG5hIGxpc3RhIHBhcmEgdmVyIGEgZmljaGEgY29tcGxldGE8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1wcmltYXJ5IiBvbmNsaWNrPSJ2bTJPcGVuTW9kYWwoMCkiPisgQ2FkYXN0cmFyIE5vdm8gUGFyY2Vpcm88L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsgLy8gZGV0YWlsIGNvbAogICAgICAgICAgICBlY2hvICc8L2Rpdj4nOyAvLyBzcGxpdAogICAgICAgIH0KICAgIH0KCiAgICAvLyDilIDilIAgVEFCOiBNQVRDSElORyDilIDilIAKICAgIGVsc2VpZiAoJHRhYiA9PT0gJ21hdGNoaW5nJykgewogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1tYXRjaGluZy1jYXJkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPvCfjq8gTm92YSBSb2RhZGEgZGUgTWF0Y2hpbmc8L2Rpdj4KICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOiM1NTU7bWFyZ2luLWJvdHRvbToxMnB4Ij5TaXN0ZW1hIGlGb29kLXN0eWxlOiBpbmZvcm1lIGEgYXRyYcOnw6NvIGUgZGF0YSBkbyBldmVudG8sIHNlbGVjaW9uZSBvcyBwYXJjZWlyb3MgZGlzcG9uw612ZWlzIGUgY3JpZSBvcyBjb252aXRlcyBwYXJhIGEgRmlsYSBkZSBBcHJvdmHDp8Ojby48L3A+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1mb3JtLXJvdyI+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbD7wn46qIEF0cmHDp8OjbzwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJtYXRjaF9hdHJhY2FvIiBwbGFjZWhvbGRlcj0iRXg6IERKLCBNw6FnaWNvLCBCdWZmZXQuLi4iIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbD7wn5OFIERhdGEgZG8gRXZlbnRvPC9sYWJlbD48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9Im1hdGNoX2RhdGUiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZm9ybS1yb3ciPgogICAgICAgICAgICAgICAgPGRpdj48bGFiZWw+8J+bkiBQZWRpZG8gKG9wY2lvbmFsKTwvbGFiZWw+PGlucHV0IHR5cGU9Im51bWJlciIgaWQ9Im1hdGNoX29yZGVyIiBwbGFjZWhvbGRlcj0iSUQgZG8gcGVkaWRvIFdvb0NvbW1lcmNlIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHgiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTJweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTU1O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPvCfk50gTWVuc2FnZW0gZG8gQ29udml0ZTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9Im1hdGNoX21zZyIgcm93cz0iNCIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxM3B4O3Jlc2l6ZTp2ZXJ0aWNhbCI+T2zDoSB7bm9tZX0hIPCfkYsKClRlbW9zIHVtIGV2ZW50byBlbSB7ZGF0YV9ldmVudG99IHF1ZSBjb21iaW5hIGNvbSB2b2PDqi4KQXRyYcOnw6NvOiB7YXRyYWNhb30KClZvY8OqIHRlbSBkaXNwb25pYmlsaWRhZGU/IFJlc3BvbmRhIFNJTSBwYXJhIGNvbmZpcm1hciBpbnRlcmVzc2UhIPCfjok8L3RleHRhcmVhPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1wcmltYXJ5IiBvbmNsaWNrPSJ2bTJDcmVhdGVSb3VuZCgpIj7wn5qAIENyaWFyIFJvZGFkYSBkZSBNYXRjaGluZzwvYnV0dG9uPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4ODgiPkFzIG1lbnNhZ2VucyB2w6NvIHBhcmEgYSBGaWxhIGRlIEFwcm92YcOnw6NvIGFudGVzIGRlIHNlcmVtIGVudmlhZGFzPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0ibWF0Y2hfcmVzdWx0IiBzdHlsZT0ibWFyZ2luLXRvcDoxMnB4Ij48L2Rpdj4KICAgICAgICA8L2Rpdj4nOwoKICAgICAgICAvLyBQYXJjZWlyb3MgZGlzcG9uw612ZWlzCiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0idm0yLWNhcmQiPjxoMz7wn5GlIFBhcmNlaXJvcyBDYWRhc3RyYWRvcyAoJyAuICR0b3RhbF9hdGl2b3MgLiAnIGF0aXZvcyk8L2gzPic7CiAgICAgICAgaWYgKCR0b3RhbF9wYXJ0bmVycyA9PT0gMCkgewogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItZW1wdHktc3RhdGUiPjxkaXYgY2xhc3M9Imljb24iPvCfjq08L2Rpdj48cD5DYWRhc3RyZSBwYXJjZWlyb3MgcHJpbWVpcm8gcGFyYSBjcmlhciByb2RhZGFzIGRlIG1hdGNoaW5nPC9wPjwvZGl2Pic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDphdXRvIj4nOwogICAgICAgICAgICBlY2hvICc8dGFibGUgY2xhc3M9InZtMi10YWJsZSI+PHRoZWFkPjx0cj48dGg+Tm9tZTwvdGg+PHRoPkF0cmHDp8O1ZXM8L3RoPjx0aD5SZWdpw6NvPC90aD48dGg+U3RhdHVzPC90aD48dGg+RXZlbnRvczwvdGg+PHRoPk5QUzwvdGg+PC90cj48L3RoZWFkPjx0Ym9keT4nOwogICAgICAgICAgICAkYWxsX3AgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIE9SREVSIEJZIHRvdGFsX2V2ZW50b3MgREVTQyBMSU1JVCAzMCIpOwogICAgICAgICAgICBmb3JlYWNoICgkYWxsX3AgYXMgJHApIHsKICAgICAgICAgICAgICAgICRzYyA9ICRwLT5zdGF0dXMgPT09ICdhdGl2bycgPyAnIzE2YTM0YScgOiAnIzZiNzI4MCc7CiAgICAgICAgICAgICAgICBlY2hvICc8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkPjxzdHJvbmc+JyAuIGVzY19odG1sKCRwLT5uYW1lKSAuICc8L3N0cm9uZz48YnI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODgiPicgLiBlc2NfaHRtbCgkcC0+cGhvbmUgPzogJ+KAlCcpIC4gJzwvc3Bhbj48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOjEycHgiPicgLiBlc2NfaHRtbCgkcC0+YXRyYWNhbyA/OiAn4oCUJykgLiAnPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij4nIC4gZXNjX2h0bWwoJHAtPmNpZGFkZSA/OiAkcC0+cmVnaWFvID86ICfigJQnKSAuICc8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiBzdHlsZT0iY29sb3I6JyAuICRzYyAuICc7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4Ij7il488L3NwYW4+ICcgLiBlc2NfaHRtbCgkcC0+c3RhdHVzKSAuICc8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPicgLiAkcC0+dG90YWxfZXZlbnRvcyAuICc8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZD4nIC4gKCRwLT5ucHMgPyAn4q2QICcgLiBudW1iZXJfZm9ybWF0KCRwLT5ucHMsMSkgOiAn4oCUJykgLiAnPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8L3Rib2R5PjwvdGFibGU+PC9kaXY+JzsgLy8gZmVjaGEgb3ZlcmZsb3cteAogICAgICAgIH0KICAgICAgICBlY2hvICc8L2Rpdj4nOwogICAgfQoKICAgIC8vIOKUgOKUgCBUQUI6IEVWRU5UT1MgQVRJVk9TIOKUgOKUgAogICAgZWxzZWlmICgkdGFiID09PSAnZXZlbnRvcycpIHsKICAgICAgICAkc3RhZ2VfaWR4ID0gYXJyYXlfa2V5cygkc3RhZ2VzKTsKICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItY2FyZCI+PGgzPvCfjqogRXZlbnRvcyBlbSBBbmRhbWVudG88L2gzPic7CiAgICAgICAgaWYgKGVtcHR5KCRldmVudG9zX2F0aXZvcykpIHsKICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0idm0yLWVtcHR5LXN0YXRlIj48ZGl2IGNsYXNzPSJpY29uIj7wn46qPC9kaXY+PHA+TmVuaHVtIGV2ZW50byBjb20gcGFyY2Vpcm9zIGVtIGFuZGFtZW50by48YnI+VXNlIG8gTWF0Y2hpbmcgcGFyYSBpbmljaWFyIG8gY2ljbG8gZGUgdmlkYS48L3A+PC9kaXY+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3JlYWNoICgkZXZlbnRvc19hdGl2b3MgYXMgJGV2KSB7CiAgICAgICAgICAgICAgICAkY3VyX2lkeCAgPSBhcnJheV9zZWFyY2goJGV2LT5zdGFnZSwgJHN0YWdlX2lkeCk7CiAgICAgICAgICAgICAgICBpZiAoJGN1cl9pZHggPT09IGZhbHNlKSAkY3VyX2lkeCA9IDA7CiAgICAgICAgICAgICAgICAkcGN0ICAgICAgPSByb3VuZCgoJGN1cl9pZHggLyAoY291bnQoJHN0YWdlcyktMSkpICogMTAwKTsKICAgICAgICAgICAgICAgICRvcmRlcl9saW5rID0gJGV2LT5vcmRlcl9pZCA/ICc8YSBocmVmPSInIC4gYWRtaW5fdXJsKCdwb3N0LnBocD9wb3N0PScgLiAkZXYtPm9yZGVyX2lkIC4gJyZhY3Rpb249ZWRpdCcpIC4gJyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjojN2MzYWVkO3RleHQtZGVjb3JhdGlvbjpub25lIj4jJyAuICRldi0+b3JkZXJfaWQgLiAnPC9hPicgOiAn4oCUJzsKICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1jYXJkIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMnB4O2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjN2MzYWVkIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydDtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4O21hcmdpbi1ib3R0b206MTBweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE0cHgiPicgLiBlc2NfaHRtbCgkZXYtPnBhcnRuZXJfbmFtZSA/OiAnUGFyY2Vpcm8gIycgLiAkZXYtPnBhcnRuZXJfaWQpIC4gJzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6Izg4OCI+RXZlbnRvOiAnIC4gZXNjX2h0bWwoJGV2LT5ldmVudF9kYXRlID86ICfigJQnKSAuICcgwrcgUGVkaWRvOiAnIC4gJG9yZGVyX2xpbmsgLiAnPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWJhZGdlIGJhZGdlLXB1cnBsZSI+JyAuIGVzY19odG1sKCRzdGFnZXNbJGV2LT5zdGFnZV0gPz8gJGV2LT5zdGFnZSkgLiAnPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2U5ZDVmZjtib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6NnB4O21hcmdpbi1ib3R0b206OHB4Ij48ZGl2IHN0eWxlPSJ3aWR0aDonIC4gJHBjdCAuICclO2JhY2tncm91bmQ6IzdjM2FlZDtoZWlnaHQ6NnB4O2JvcmRlci1yYWRpdXM6NHB4Ij48L2Rpdj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItbGlmZWN5Y2xlLWJhciI+JzsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzdGFnZV9pZHggYXMgJGkgPT4gJHNrKSB7CiAgICAgICAgICAgICAgICAgICAgJGNscyA9ICRpIDwgJGN1cl9pZHggPyAnZG9uZScgOiAoJGkgPT0gJGN1cl9pZHggPyAnY3VycmVudCcgOiAnJyk7CiAgICAgICAgICAgICAgICAgICAgJG51bSA9ICRpICsgMTsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItc3RhZ2UtZG90ICcgLiAkY2xzIC4gJyIgdGl0bGU9IicgLiBlc2NfYXR0cigkc3RhZ2VzWyRza10pIC4gJyI+JyAuICRudW0gLiAnPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICBpZiAoJGkgPCBjb3VudCgkc3RhZ2VfaWR4KS0xKSBlY2hvICc8ZGl2IHN0eWxlPSJ3aWR0aDo4cHg7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kOicgLiAoJGkgPCAkY3VyX2lkeCA/ICcjN2MzYWVkJyA6ICcjZTVlN2ViJykgLiAnIj48L2Rpdj4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICAgICAgICAgIC8vIEFkdmFuY2Ugc3RhZ2UgYnV0dG9uCiAgICAgICAgICAgICAgICBpZiAoJGN1cl9pZHggPCBjb3VudCgkc3RhZ2VfaWR4KS0xKSB7CiAgICAgICAgICAgICAgICAgICAgJG5leHRfc3RhZ2UgPSAkc3RhZ2VfaWR4WyRjdXJfaWR4ICsgMV07CiAgICAgICAgICAgICAgICAgICAgJG5leHRfbGFiZWwgPSAkc3RhZ2VzWyRuZXh0X3N0YWdlXTsKICAgICAgICAgICAgICAgICAgICAkbnNfanMgPSBlc2NfanMoJG5leHRfc3RhZ2UpOwogICAgICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweCI+PGJ1dHRvbiBjbGFzcz0idm0yLWJ0biB2bTItYnRuLXByaW1hcnkgdm0yLWJ0bi1zbSIgb25jbGljaz0idm0yQWR2YW5jZVN0YWdlKCcgLiAkZXYtPmlkIC4gJyxcJycgLiAkbnNfanMgLiAnXCcpIj7ihpIgQXZhbsOnYXIgcGFyYSAnIC4gZXNjX2h0bWwoJG5leHRfbGFiZWwpIC4gJzwvYnV0dG9uPjwvZGl2Pic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlY2hvICc8L2Rpdj48L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvZGl2Pic7CiAgICB9CgogICAgLy8g4pSA4pSAIFRBQjogRklMQSBERSBBUFJPVkHDh8ODTyDilIDilIAKICAgIGVsc2VpZiAoJHRhYiA9PT0gJ2ZpbGEnKSB7CiAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjE2cHg7ZmxleC13cmFwOndyYXA7Z2FwOjhweCI+JzsKICAgICAgICBlY2hvICc8ZGl2Pic7CiAgICAgICAgZWNobyAnPHNwYW4gY2xhc3M9InZtMi1iYWRnZSBiYWRnZS1yZWQiIHN0eWxlPSJmb250LXNpemU6MTNweDtwYWRkaW5nOjRweCAxMHB4Ij4nIC4gJGZpbGFfdXJnZW50ZXMgLiAnIHVyZ2VudGVzPC9zcGFuPiAnOwogICAgICAgIGVjaG8gJzxzcGFuIGNsYXNzPSJ2bTItYmFkZ2UgYmFkZ2UtcHVycGxlIiBzdHlsZT0iZm9udC1zaXplOjEzcHg7cGFkZGluZzo0cHggMTBweCI+JyAuICRmaWxhX3BlbmRlbnRlcyAuICcgcGVuZGVudGVzIHRvdGFsPC9zcGFuPic7CiAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICBpZiAoJGZpbGFfdXJnZW50ZXMgPiAwKSB7CiAgICAgICAgICAgIGVjaG8gJzxidXR0b24gY2xhc3M9InZtMi1idG4gdm0yLWJ0bi1kYW5nZXIiIG9uY2xpY2s9InZtMkFwcHJvdmVBbGxVcmdlbnQoKSI+4pqhIEFwcm92YXIgVG9kb3MgVXJnZW50ZXM8L2J1dHRvbj4nOwogICAgICAgIH0KICAgICAgICBlY2hvICc8L2Rpdj4nOwoKICAgICAgICBpZiAoZW1wdHkoJHF1ZXVlKSkgewogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItZW1wdHktc3RhdGUiPjxkaXYgY2xhc3M9Imljb24iPuKchTwvZGl2PjxwPkZpbGEgdmF6aWEg4oCUIG5lbmh1bWEgbWVuc2FnZW0gcGVuZGVudGUhPC9wPjwvZGl2Pic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHF1ZXVlIGFzICRpdGVtKSB7CiAgICAgICAgICAgICAgICAkcHJpb3JpdHlfY2xzID0gJ3ZtMi1wcmlvcml0eS0nIC4gJGl0ZW0tPnByaW9yaXR5OwogICAgICAgICAgICAgICAgJHByaW9yaXR5X2Vtb2ppID0gWyd1cmdlbnRlJz0+J/CflLQnLCdub3JtYWwnPT4n8J+foScsJ2JhaXhvJz0+J/Cfn6InXVskaXRlbS0+cHJpb3JpdHldID8/ICfimqonOwogICAgICAgICAgICAgICAgJHRpcG9fbGFiZWwgPSBbJ2NvbnZpdGUnPT4nQ29udml0ZScsJ2NvbmZpcm1hY2FvJz0+J0NvbmZpcm1hw6fDo28nLCdsZW1icmV0ZSc9PidMZW1icmV0ZSBQcsOpLUV2ZW50bycsJ2NoZWNraW4nPT4nQ2hlY2staW4nLCdjaGVja291dCc9PidDaGVjay1vdXQnLCdwYWdhbWVudG8nPT4nUGFnYW1lbnRvJywnb25ib2FyZGluZyc9PidPbmJvYXJkaW5nJ11bJGl0ZW0tPnRpcG9dID8/ICRpdGVtLT50aXBvOwogICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0idm0yLXF1ZXVlLWl0ZW0gJyAuICRwcmlvcml0eV9jbHMgLiAnIiBpZD0icWlfJyAuICRpdGVtLT5pZCAuICciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwIj4nIC4gJHByaW9yaXR5X2Vtb2ppIC4gJyAnIC4gZXNjX2h0bWwoJGl0ZW0tPnBhcnRuZXJfbmFtZSA/OiAnUGFyY2Vpcm8nKSAuICc8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0yLWJhZGdlIGJhZGdlLWdyYXkiPicgLiBlc2NfaHRtbCgkdGlwb19sYWJlbCkgLiAnPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAuICgkaXRlbS0+cGhvbmUgPyAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODgiPsK3IPCfk7EgKycgLiBlc2NfaHRtbCgkaXRlbS0+cGhvbmUpIC4gJzwvc3Bhbj4nIDogJycpIC4gJwogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiNhYWEiPicgLiBkYXRlKCdkL20gSDppJywgc3RydG90aW1lKCRpdGVtLT5jcmVhdGVkX2F0KSkgLiAnPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ1YmJsZSIgaWQ9ImJ1YmJsZV8nIC4gJGl0ZW0tPmlkIC4gJyI+JyAuIGVzY19odG1sKCRpdGVtLT5tZXNzYWdlKSAuICc8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idm0yLWJ0biB2bTItYnRuLXN1Y2Nlc3Mgdm0yLWJ0bi1zbSIgb25jbGljaz0idm0yUXVldWVBY3Rpb24oJyAuICRpdGVtLT5pZCAuICcsXCdhcHByb3ZlXCcpIj7inIUgQXByb3ZhciAmIEVudmlhcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ2bTItYnRuIHZtMi1idG4tZ3JheSB2bTItYnRuLXNtIiBvbmNsaWNrPSJ2bTJFZGl0QnViYmxlKCcgLiAkaXRlbS0+aWQgLiAnKSI+4pyP77iPIEVkaXRhcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ2bTItYnRuIHZtMi1idG4tZGFuZ2VyIHZtMi1idG4tc20iIG9uY2xpY2s9InZtMlF1ZXVlQWN0aW9uKCcgLiAkaXRlbS0+aWQgLiAnLFwnY2FuY2VsXCcpIj7inJUgQ2FuY2VsYXI8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8g4pSA4pSAIFRBQjogRUxFTkNPIOKUgOKUgAogICAgZWxzZWlmICgkdGFiID09PSAnZWxlbmNvJykgewogICAgICAgIGdsb2JhbCAkd3BkYjsKICAgICAgICAkdGVhbXMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgICAgICJTRUxFQ1QgKiBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl90ZWFtcyBPUkRFUiBCWSBjcmVhdGVkX2F0IERFU0MgTElNSVQgNTAiCiAgICAgICAgKTsKCiAgICAgICAgLy8gV0MgY2F0ZWdvcmllcyBmb3Igc2ltdWxhdGlvbgogICAgICAgICR3Y19jYXRzX3NpbSA9IGdldF90ZXJtcyhbJ3RheG9ub215Jz0+J3Byb2R1Y3RfY2F0JywnaGlkZV9lbXB0eSc9PmZhbHNlLCdmaWVsZHMnPT4naWQ9Pm5hbWUnLCdudW1iZXInPT4yMDBdKTsKICAgICAgICBpZiAoaXNfd3BfZXJyb3IoJHdjX2NhdHNfc2ltKSkgJHdjX2NhdHNfc2ltID0gW107CiAgICAgICAgJGNhdHNfc2ltX2pzID0gW107CiAgICAgICAgZm9yZWFjaCAoJHdjX2NhdHNfc2ltIGFzICR0aWQgPT4gJHRuYW1lKSAkY2F0c19zaW1fanNbXSA9IFsnaWQnPT4kdGlkLCduYW1lJz0+JHRuYW1lXTsKCiAgICAgICAgZWNobyAnPHNjcmlwdD52YXIgdm0yU2ltQ2F0cz0nIC4gd3BfanNvbl9lbmNvZGUoJGNhdHNfc2ltX2pzKSAuICc7PC9zY3JpcHQ+JzsKCiAgICAgICAgLy8gTWlzc2luZyBwYXJ0bmVycyBhbGVydAogICAgICAgICRtaXNzaW5nX2NhdHNfYWxsID0gW107CiAgICAgICAgZm9yZWFjaCAoJHRlYW1zIGFzICR0KSB7CiAgICAgICAgICAgICRtID0ganNvbl9kZWNvZGUoJHQtPm1pc3NpbmdfY2F0cyA/OiAnW10nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgZm9yZWFjaCAoJG0gYXMgJG1jKSB7CiAgICAgICAgICAgICAgICAkbW4gPSBpc19hcnJheSgkbWMpID8gJG1jWyduYW1lJ10gOiAkbWM7CiAgICAgICAgICAgICAgICAkbWlzc2luZ19jYXRzX2FsbFskbW5dID0gKCRtaXNzaW5nX2NhdHNfYWxsWyRtbl0gPz8gMCkgKyAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZW1wdHkoJG1pc3NpbmdfY2F0c19hbGwpKSB7CiAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjVmNTtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTRweCAxOHB4O21hcmdpbi1ib3R0b206MTZweCI+JzsKICAgICAgICAgICAgZWNobyAnPGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwO2NvbG9yOiNkYzI2MjY7bWFyZ2luLWJvdHRvbTo2cHgiPuKaoO+4jyBDYXRlZ29yaWFzIHNlbSBwYXJjZWlyb3MgY2FkYXN0cmFkb3M8L2Rpdj4nOwogICAgICAgICAgICBmb3JlYWNoICgkbWlzc2luZ19jYXRzX2FsbCBhcyAkY2F0X25hbWUgPT4gJGNvdW50KSB7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojN2YxZDFkO21hcmdpbi1ib3R0b206M3B4Ij7igKIgPHN0cm9uZz4nIC4gZXNjX2h0bWwoJGNhdF9uYW1lKSAuICc8L3N0cm9uZz4g4oCUIGFwYXJlY2V1ICcgLiAkY291bnQgLiAneCBzZW0gcGFyY2Vpcm88L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5OTFiMWI7bWFyZ2luLXRvcDo4cHgiPvCfkYkgQ2FkYXN0cmUgcGFyY2Vpcm9zIG5hIGFiYSA8YSBocmVmPSInIC4gZXNjX3VybChhZGRfcXVlcnlfYXJnKFsncGFnZSc9Pid2bTItcGFyY2Vpcm9zJywndGFiJz0+J2NhZGFzdHJvJ10sJGJhc2UpKSAuICciIHN0eWxlPSJjb2xvcjojN2MzYWVkIj7wn46tIENhZGFzdHJvPC9hPiBlIHZpbmN1bGUgYXMgY2F0ZWdvcmlhcyBXQyBhIGVsZXMuPC9kaXY+JzsKICAgICAgICAgICAgZWNobyAnPC9kaXY+JzsKICAgICAgICB9CgogICAgICAgIC8vIFNpbXVsYXRlIHNlY3Rpb24KICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItY2FyZCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjBweCI+CiAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4O2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMCI+8J+nqiBTaW11bGFyIE1vbnRhZ2VtIGRlIEVxdWlwZTwvaDM+CiAgICAgICAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojNTU1O21hcmdpbi1ib3R0b206MTRweCI+VGVzdGUgbyBtb3RvciBkZSBlbGVuY28gc2VtIHByZWNpc2FyIGNyaWFyIHVtIHBlZGlkbyByZWFsLiBBIG1lbnNhZ2VtIHNlcsOhIGVudmlhZGEgbm8gV0EgY29tIGZsYWcgZGUgc2ltdWxhw6fDo28uPC9wPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZm9ybS1yb3ciIHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgICAgICAgICAgIDxkaXY+PGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzU1NTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij7wn5OFIERhdGEgZG8gRXZlbnRvPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0ic2ltX2RhdGUiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NTU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+8J+OryBDYXRlZ29yaWFzIFdDIG5lY2Vzc8OhcmlhczwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJzaW1fY2F0c193cmFwIiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6OHB4O2JhY2tncm91bmQ6I2ZhZmFmYTttYXgtaGVpZ2h0OjEwMHB4O292ZXJmbG93LXk6YXV0bztmb250LXNpemU6MTJweCI+Q2FycmVnYW5kby4uLjwvZGl2PjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idm0yLWJ0biB2bTItYnRuLXByaW1hcnkiIGlkPSJidG5fc2ltdWxhdGUiIG9uY2xpY2s9InZtMlNpbXVsYXRlRWxlbmNvKCkiPvCfjqwgU2ltdWxhciBNb250YWdlbTwvYnV0dG9uPgogICAgICAgICAgICA8ZGl2IGlkPSJzaW1fcmVzdWx0IiBzdHlsZT0ibWFyZ2luLXRvcDoxNHB4O21pbi1oZWlnaHQ6MjBweCI+PC9kaXY+CiAgICAgICAgPC9kaXY+JzsKCiAgICAgICAgLy8gVGVhbXMgaGlzdG9yeSB0YWJsZQogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1jYXJkIj4KICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHg7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwIj7wn5OLIEhpc3TDs3JpY28gZGUgRXF1aXBlczwvaDM+JzsKICAgICAgICBpZiAoZW1wdHkoJHRlYW1zKSkgewogICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJ2bTItZW1wdHktc3RhdGUiPjxkaXYgY2xhc3M9Imljb24iPvCfjqw8L2Rpdj48cD5OZW5odW1hIGVxdWlwZSBtb250YWRhIGFpbmRhLjxicj5BZ3VhcmRlIHVtIHBlZGlkbyBzZXIgYXNzaW5hZG8gb3UgdXNlIG8gc2ltdWxhZG9yIGFjaW1hLjwvcD48L2Rpdj4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9Im92ZXJmbG93LXg6YXV0byI+PHRhYmxlIHN0eWxlPSJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MTNweCI+JzsKICAgICAgICAgICAgZWNobyAnPHRoZWFkPjx0ciBzdHlsZT0iYmFja2dyb3VuZDojZjlmYWZiIj4nOwogICAgICAgICAgICBmb3JlYWNoIChbJ1BlZGlkbycsJ0RhdGEgRXZlbnRvJywnQ2xpZW50ZScsJ0VxdWlwZScsJ0ZhbHRvdScsJ1N0YXR1cycsJ0NyaWFkbycsJ0xpbmsnXSBhcyAkaCkgewogICAgICAgICAgICAgICAgZWNobyAnPHRoIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O3RleHQtYWxpZ246bGVmdDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlN2ViO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzU1NSI+JyAuICRoIC4gJzwvdGg+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgICAgICAgICAgIGZvcmVhY2ggKCR0ZWFtcyBhcyAkdCkgewogICAgICAgICAgICAgICAgJHRlYW1fYXJyICAgID0ganNvbl9kZWNvZGUoJHQtPnRlYW1fanNvbiA/OiAne30nLCB0cnVlKSA/OiBbXTsKICAgICAgICAgICAgICAgICRtaXNzaW5nX2FyciA9IGpzb25fZGVjb2RlKCR0LT5taXNzaW5nX2NhdHMgPzogJ1tdJywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgICAgICAkdGVhbV9uYW1lcyAgPSBpbXBsb2RlKCcsICcsIGFycmF5X21hcChmdW5jdGlvbigkeCl7IHJldHVybiAkeFsncGFydG5lcl9uYW1lJ10gPz8gJ+KAlCc7IH0sICR0ZWFtX2FycikpOwogICAgICAgICAgICAgICAgJG1pc3NfbmFtZXMgID0gaW1wbG9kZSgnLCAnLCBhcnJheV9tYXAoZnVuY3Rpb24oJG0peyByZXR1cm4gaXNfYXJyYXkoJG0pID8gKCRtWyduYW1lJ10/PyfigJQnKSA6ICRtOyB9LCAkbWlzc2luZ19hcnIpKTsKICAgICAgICAgICAgICAgICRzdGF0dXNfYmFkZ2UgPSAkdC0+c3RhdHVzID09PSAnY29uZmlybWVkJwogICAgICAgICAgICAgICAgICAgID8gJzxzcGFuIGNsYXNzPSJ2bTItYmFkZ2UgYmFkZ2UtZ3JlZW4iPuKchSBDb25maXJtYWRvPC9zcGFuPicKICAgICAgICAgICAgICAgICAgICA6ICc8c3BhbiBjbGFzcz0idm0yLWJhZGdlIGJhZGdlLWdyYXkiPuKPsyBQZW5kZW50ZTwvc3Bhbj4nOwogICAgICAgICAgICAgICAgJHNpbV9iYWRnZSAgID0gJHQtPmlzX3NpbXVsYXRpb24gPyAnPHNwYW4gY2xhc3M9InZtMi1iYWRnZSBiYWRnZS1wdXJwbGUiPvCfp6ogc2ltPC9zcGFuPicgOiAnJzsKICAgICAgICAgICAgICAgICRkYXRlX2V2ICAgICA9ICR0LT5ldmVudF9kYXRlID8gd3BfZGF0ZSgnZC9tL1knLCBzdHJ0b3RpbWUoJHQtPmV2ZW50X2RhdGUpKSA6ICfigJQnOwogICAgICAgICAgICAgICAgJGNyZWF0ZWQgICAgID0gJHQtPmNyZWF0ZWRfYXQgPyB3cF9kYXRlKCdkL20gSDppJywgc3RydG90aW1lKCR0LT5jcmVhdGVkX2F0KSkgOiAn4oCUJzsKICAgICAgICAgICAgICAgICRvcmRlcl9sYmwgICA9ICgkdC0+b3JkZXJfaWQgJiYgISR0LT5pc19zaW11bGF0aW9uKSA/ICcjJyAuICR0LT5vcmRlcl9pZCA6ICfigJQnOwogICAgICAgICAgICAgICAgJGxpbmsgICAgICAgID0gJHQtPmNvbmZpcm1fdG9rZW4gPyAnPGEgaHJlZj0iJyAuIGVzY191cmwoaG9tZV91cmwoJy9lbGVuY28tdml2YW1haXMvP3Rva2VuPScuJHQtPmNvbmZpcm1fdG9rZW4pKSAuICciIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6IzdjM2FlZDtmb250LXNpemU6MTFweCI+8J+UlyBBYnJpcjwvYT4nIDogJ+KAlCc7CgogICAgICAgICAgICAgICAgZWNobyAnPHRyIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjBmMGYwIiBvbm1vdXNlb3Zlcj0idGhpcy5zdHlsZS5iYWNrZ3JvdW5kPVwnI2ZhZmFmYVwnIiBvbm1vdXNlb3V0PSJ0aGlzLnN0eWxlLmJhY2tncm91bmQ9XCcjZmZmXCciPic7CiAgICAgICAgICAgICAgICBlY2hvICc8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEwcHgiPicgLiBlc2NfaHRtbCgkb3JkZXJfbGJsKSAuICcgJyAuICRzaW1fYmFkZ2UgLiAnPC90ZD4nOwogICAgICAgICAgICAgICAgZWNobyAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4Ij4nIC4gZXNjX2h0bWwoJGRhdGVfZXYpIC4gJzwvdGQ+JzsKICAgICAgICAgICAgICAgIGVjaG8gJzx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTBweCI+JyAuIGVzY19odG1sKCR0LT5jbGllbnRfbmFtZSA/OiAn4oCUJykgLiAnPC90ZD4nOwogICAgICAgICAgICAgICAgZWNobyAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O21heC13aWR0aDoxODBweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXMiPicgLiBlc2NfaHRtbCgkdGVhbV9uYW1lcyA/OiAn4oCUJykgLiAnPC90ZD4nOwogICAgICAgICAgICAgICAgZWNobyAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4O2NvbG9yOiNkYzI2MjYiPicgLiBlc2NfaHRtbCgkbWlzc19uYW1lcyA/OiAn4oCUJykgLiAnPC90ZD4nOwogICAgICAgICAgICAgICAgZWNobyAnPHRkIHN0eWxlPSJwYWRkaW5nOjhweCAxMHB4Ij4nIC4gJHN0YXR1c19iYWRnZSAuICc8L3RkPic7CiAgICAgICAgICAgICAgICBlY2hvICc8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEwcHg7Y29sb3I6Izg4ODtmb250LXNpemU6MTFweCI+JyAuIGVzY19odG1sKCRjcmVhdGVkKSAuICc8L3RkPic7CiAgICAgICAgICAgICAgICBlY2hvICc8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEwcHgiPicgLiAkbGluayAuICc8L3RkPic7CiAgICAgICAgICAgICAgICBlY2hvICc8L3RyPic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPC90Ym9keT48L3RhYmxlPjwvZGl2Pic7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvZGl2Pic7CgogICAgICAgIC8vIEpTIGZvciBzaW11bGF0ZQogICAgICAgID8+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAoZnVuY3Rpb24oKXsKICAgICAgICAgICAgLy8gUmVuZGVyIGNhdGVnb3J5IGNoZWNrYm94ZXMKICAgICAgICAgICAgdmFyIHdyYXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2ltX2NhdHNfd3JhcCcpOwogICAgICAgICAgICBpZiAod3JhcCAmJiB0eXBlb2Ygdm0yU2ltQ2F0cyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgIGlmICghdm0yU2ltQ2F0cy5sZW5ndGgpIHsgd3JhcC5pbm5lckhUTUw9JzxzcGFuIHN0eWxlPSJjb2xvcjojYWFhIj5OZW5odW1hIGNhdGVnb3JpYSBXQyBlbmNvbnRyYWRhPC9zcGFuPic7IH0KICAgICAgICAgICAgICAgIGVsc2UgeyB3cmFwLmlubmVySFRNTCA9IHZtMlNpbUNhdHMubWFwKGZ1bmN0aW9uKGMpewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6M3B4O21hcmdpbjoycHggNHB4IDJweCAwO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzoycHggN3B4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMXB4Ij4nCiAgICAgICAgICAgICAgICAgICAgICAgICArICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIHZhbHVlPSInK2MuaWQrJyIgc3R5bGU9Im1hcmdpbjowIj4gJytjLm5hbWUrJzwvbGFiZWw+JzsKICAgICAgICAgICAgICAgIH0pLmpvaW4oJycpOyB9CiAgICAgICAgICAgIH0KICAgICAgICB9KSgpOwoKICAgICAgICBmdW5jdGlvbiB2bTJTaW11bGF0ZUVsZW5jbygpIHsKICAgICAgICAgICAgdmFyIGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG5fc2ltdWxhdGUnKTsKICAgICAgICAgICAgdmFyIHJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaW1fcmVzdWx0Jyk7CiAgICAgICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7IGJ0bi50ZXh0Q29udGVudCA9ICdTaW11bGFuZG8uLi4nOwogICAgICAgICAgICByZXMuaW5uZXJIVE1MID0gJyc7CgogICAgICAgICAgICB2YXIgZGF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaW1fZGF0ZScpLnZhbHVlOwogICAgICAgICAgICB2YXIgY2F0SWRzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjc2ltX2NhdHNfd3JhcCBpbnB1dDpjaGVja2VkJykpLm1hcChmdW5jdGlvbihjYil7IHJldHVybiBwYXJzZUludChjYi52YWx1ZSk7IH0pOwoKICAgICAgICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgICAgIGZkLmFwcGVuZCgnYWN0aW9uJywndm0yX3NpbXVsYXRlX2VsZW5jbycpOwogICAgICAgICAgICBmZC5hcHBlbmQoJ25vbmNlJywgdm0yTm9uY2UpOwogICAgICAgICAgICBmZC5hcHBlbmQoJ2V2ZW50X2RhdGUnLCBkYXRlKTsKICAgICAgICAgICAgZmQuYXBwZW5kKCdjYXRfaWRzJywgSlNPTi5zdHJpbmdpZnkoY2F0SWRzKSk7CgogICAgICAgICAgICBmZXRjaCh2bTJCYXNlLCB7bWV0aG9kOidQT1NUJyxib2R5OmZkfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiByLmpzb24oKTt9KQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oZGF0YSl7CiAgICAgICAgICAgICAgICAgICAgYnRuLmRpc2FibGVkPWZhbHNlOyBidG4udGV4dENvbnRlbnQ9J/CfjqwgU2ltdWxhciBNb250YWdlbSc7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3VjY2VzcyAmJiBkYXRhLmRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBkYXRhLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZWFtTGluZXMgPSBPYmplY3QudmFsdWVzKGQudGVhbXx8e30pLm1hcChmdW5jdGlvbih0KXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPGRpdiBzdHlsZT0icGFkZGluZzo0cHggMDtmb250LXNpemU6MTNweCI+8J+OrSA8c3Ryb25nPicrdC5jYXRfbmFtZSsnOjwvc3Ryb25nPiAnK3QucGFydG5lcl9uYW1lKyh0LmlzX2J1c3k/JyA8c3BhbiBzdHlsZT0iY29sb3I6I2Y1OWUwYiI+4pqg77iPIG9jdXBhZG88L3NwYW4+JzonJykrJzwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWlzc0xpbmVzID0gKGQubWlzc2luZ3x8W10pLm1hcChmdW5jdGlvbihtKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtbj10eXBlb2YgbT09PSdvYmplY3QnP20ubmFtZTptOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjRweCAwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiNkYzI2MjYiPuKaoO+4jyA8c3Ryb25nPicrbW4rJzo8L3N0cm9uZz4gc2VtIHBhcmNlaXJvPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gJzxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2YwZmRmNDtib3JkZXI6MXB4IHNvbGlkICM4NmVmYWM7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNHB4Ij4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICArICc8ZGl2IHN0eWxlPSJmb250LXdlaWdodDo3MDA7Y29sb3I6IzE1ODAzZDttYXJnaW4tYm90dG9tOjhweCI+4pyFIEVxdWlwZSBtb250YWRhISBOb3RpZmljYcOnw6NvIFdBIGVudmlhZGEuPC9kaXY+JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0ZWFtTGluZXMuam9pbignJykgKyBtaXNzTGluZXMuam9pbignJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweDtwYWRkaW5nLXRvcDoxMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNiYmY3ZDAiPicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgJzxhIGhyZWY9IicrZC5jb25maXJtX3VybCsnIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiM3YzNhZWQ7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwIj7wn5SXIEFicmlyIHDDoWdpbmEgZGUgY29uZmlybWHDp8OjbyDihpI8L2E+JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAnPC9kaXY+PC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgbG9jYXRpb24ucmVsb2FkKCk7IH0sIDQwMDApOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT0iY29sb3I6I2RjMjYyNjtmb250LXNpemU6MTNweCI+4p2MIEVycm8gbmEgc2ltdWxhw6fDo28uIFZlcmlmaXF1ZSBvIGNvbnNvbGUuPC9kaXY+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKGUpewogICAgICAgICAgICAgICAgICAgIGJ0bi5kaXNhYmxlZD1mYWxzZTsgYnRuLnRleHRDb250ZW50PSfwn46sIFNpbXVsYXIgTW9udGFnZW0nOwogICAgICAgICAgICAgICAgICAgIHJlcy5pbm5lckhUTUw9JzxkaXYgc3R5bGU9ImNvbG9yOiNkYzI2MjYiPuKdjCBFcnJvIGRlIHJlZGU6ICcrZS5tZXNzYWdlKyc8L2Rpdj4nOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIDwvc2NyaXB0PgogICAgICAgIDw/cGhwCiAgICB9CgoKICAgIC8vIOKUgOKUgCBUQUI6IE3DiVRSSUNBUyDilIDilIAKICAgIGVsc2VpZiAoJHRhYiA9PT0gJ21ldHJpY2FzJykgewogICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMjgwcHgsMWZyKSk7Z2FwOjE2cHgiPic7CgogICAgICAgIC8vIFRvcCBwb3IgZXZlbnRvcwogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1jYXJkIj48aDM+8J+PhiBUb3AgcG9yIEV2ZW50b3M8L2gzPic7CiAgICAgICAgaWYgKGVtcHR5KCR0b3BfcGFydG5lcnMpKSB7CiAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9ImNvbG9yOiNhYWE7Zm9udC1zaXplOjEzcHgiPlNlbSBkYWRvcyBhaW5kYTwvZGl2Pic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJhbmsgPSAxOwogICAgICAgICAgICBmb3JlYWNoICgkdG9wX3BhcnRuZXJzIGFzICRwKSB7CiAgICAgICAgICAgICAgICAkbWVkYWwgPSBbJ/CfpYcnLCfwn6WIJywn8J+liSddWyRyYW5rLTFdID8/ICIjeyRyYW5rfSI7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O3BhZGRpbmc6OHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YwZjBmMCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxOHB4Ij4nIC4gJG1lZGFsIC4gJzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmbGV4OjEiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHgiPicgLiBlc2NfaHRtbCgkcC0+bmFtZSkgLiAnPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODgiPicgLiBlc2NfaHRtbCgkcC0+YXRyYWNhbyA/OiAn4oCUJykgLiAnPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojN2MzYWVkIj4nIC4gJHAtPnRvdGFsX2V2ZW50b3MgLiAnPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiNhYWEiPmV2ZW50b3M8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2Pic7CiAgICAgICAgICAgICAgICAkcmFuaysrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvZGl2Pic7CgogICAgICAgIC8vIFRvcCBwb3IgTlBTCiAgICAgICAgJHRvcF9ucHMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIG5wcyBJUyBOT1QgTlVMTCBBTkQgc3RhdHVzPSdhdGl2bycgT1JERVIgQlkgbnBzIERFU0MgTElNSVQgNSIpOwogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9InZtMi1jYXJkIj48aDM+4q2QIFRvcCBOUFM8L2gzPic7CiAgICAgICAgaWYgKGVtcHR5KCR0b3BfbnBzKSkgewogICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJjb2xvcjojYWFhO2ZvbnQtc2l6ZToxM3B4Ij5TZW0gYXZhbGlhw6fDtWVzIGFpbmRhPC9kaXY+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3JlYWNoICgkdG9wX25wcyBhcyAkcCkgewogICAgICAgICAgICAgICAgJG5wc19wY3QgPSBtaW4oMTAwLCAoJHAtPm5wcyAvIDEwKSAqIDEwMCk7CiAgICAgICAgICAgICAgICAkbnBzX2NvbG9yID0gJHAtPm5wcyA+PSA4ID8gJyMxNmEzNGEnIDogKCRwLT5ucHMgPj0gNiA/ICcjZjU5ZTBiJyA6ICcjZGMyNjI2Jyk7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjhweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmMGYwZjAiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTo0cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4Ij4nIC4gZXNjX2h0bWwoJHAtPm5hbWUpIC4gJzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtjb2xvcjonIC4gJG5wc19jb2xvciAuICciPicgLiBudW1iZXJfZm9ybWF0KCRwLT5ucHMsMSkgLiAnPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2U1ZTdlYjtib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6NHB4Ij48ZGl2IHN0eWxlPSJ3aWR0aDonIC4gJG5wc19wY3QgLiAnJTtiYWNrZ3JvdW5kOicgLiAkbnBzX2NvbG9yIC4gJztoZWlnaHQ6NHB4O2JvcmRlci1yYWRpdXM6NHB4Ij48L2Rpdj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAnPC9kaXY+JzsKCiAgICAgICAgLy8gRGlzdHJpYnVpw6fDo28gcG9yIGF0cmHDp8OjbwogICAgICAgICRieV9hdHJhY2FvID0gJHdwZGItPmdldF9yZXN1bHRzKCJTRUxFQ1QgYXRyYWNhbywgQ09VTlQoKikgYXMgdG90YWwgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMgR1JPVVAgQlkgYXRyYWNhbyBPUkRFUiBCWSB0b3RhbCBERVNDIExJTUlUIDEwIik7CiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0idm0yLWNhcmQiPjxoMz7wn46qIFBvciBBdHJhw6fDo288L2gzPic7CiAgICAgICAgaWYgKGVtcHR5KCRieV9hdHJhY2FvKSkgewogICAgICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJjb2xvcjojYWFhO2ZvbnQtc2l6ZToxM3B4Ij5TZW0gZGFkb3MgYWluZGE8L2Rpdj4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRtYXggPSBtYXgoYXJyYXlfY29sdW1uKCRieV9hdHJhY2FvLCAndG90YWwnKSkgPzogMTsKICAgICAgICAgICAgZm9yZWFjaCAoJGJ5X2F0cmFjYW8gYXMgJHJvdykgewogICAgICAgICAgICAgICAgJHBjdCA9IHJvdW5kKCgkcm93LT50b3RhbCAvICRtYXgpICogMTAwKTsKICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9InBhZGRpbmc6NnB4IDAiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXNpemU6MTJweDttYXJnaW4tYm90dG9tOjNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPicgLiBlc2NfaHRtbCgkcm93LT5hdHJhY2FvID86ICdOw6NvIGluZm9ybWFkbycpIC4gJzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz4nIC4gJHJvdy0+dG90YWwgLiAnPC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZTlkNWZmO2JvcmRlci1yYWRpdXM6NHB4O2hlaWdodDo2cHgiPjxkaXYgc3R5bGU9IndpZHRoOicgLiAkcGN0IC4gJyU7YmFja2dyb3VuZDojN2MzYWVkO2hlaWdodDo2cHg7Ym9yZGVyLXJhZGl1czo0cHgiPjwvZGl2PjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICc8L2Rpdj4nOwoKICAgICAgICAvLyBSZXN1bW8gZ2VyYWwKICAgICAgICAkdG90YWxfaW5hdGl2b3MgPSAkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIHN0YXR1cz0naW5hdGl2byciKTsKICAgICAgICAkYXZnX25wcyA9ICR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQVZHKG5wcykgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfcGFydG5lcnMgV0hFUkUgbnBzIElTIE5PVCBOVUxMIik7CiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0idm0yLWNhcmQiPjxoMz7wn5OKIFJlc3VtbyBHZXJhbDwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1jZmctMmNvbCIgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTBweCI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmOWY0ZmY7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4O3RleHQtYWxpZ246Y2VudGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MjJweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzdjM2FlZCI+JyAuICR0b3RhbF9wYXJ0bmVycyAuICc8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNjY2Ij5Ub3RhbDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmMGZkZjQ7Ym9yZGVyLXJhZGl1czo2cHg7cGFkZGluZzoxMHB4O3RleHQtYWxpZ246Y2VudGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MjJweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzE2YTM0YSI+JyAuICR0b3RhbF9hdGl2b3MgLiAnPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzY2NiI+QXRpdm9zPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjllNjtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHg7dGV4dC1hbGlnbjpjZW50ZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZjU5ZTBiIj4nIC4gKCRhdmdfbnBzID8gbnVtYmVyX2Zvcm1hdCgkYXZnX25wcywxKSA6ICfigJQnKSAuICc8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNjY2Ij5OUFMgTcOpZGlvPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZlZjJmMjtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHg7dGV4dC1hbGlnbjpjZW50ZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZGMyNjI2Ij4nIC4gJHRvdGFsX2luYXRpdm9zIC4gJzwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM2NjYiPkluYXRpdm9zPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+JzsKCiAgICAgICAgZWNobyAnPC9kaXY+JzsgLy8gZ3JpZAogICAgfQoKICAgIC8vIOKUgOKUgCBNT0RBTCBDQURBU1RSTy9FREnDh8ODTyDilIDilIAKICAgIC8vIE91dHB1dCBXQyBjYXRlZ29yaWVzIGFuZCB0YWdzIGZvciB0aGUgbW9kYWwKICAgICR3Y19jYXRzX2xpc3QgPSBnZXRfdGVybXMoWyd0YXhvbm9teScgPT4gJ3Byb2R1Y3RfY2F0JywgJ2hpZGVfZW1wdHknID0+IGZhbHNlLCAnZmllbGRzJyA9PiAnaWQ9Pm5hbWUnLCAnbnVtYmVyJyA9PiAyMDBdKTsKICAgICR3Y190YWdzX2xpc3QgPSBnZXRfdGVybXMoWyd0YXhvbm9teScgPT4gJ3Byb2R1Y3RfdGFnJywgJ2hpZGVfZW1wdHknID0+IGZhbHNlLCAnZmllbGRzJyA9PiAnaWQ9Pm5hbWUnLCAnbnVtYmVyJyA9PiAyMDBdKTsKICAgIGlmIChpc193cF9lcnJvcigkd2NfY2F0c19saXN0KSkgJHdjX2NhdHNfbGlzdCA9IFtdOwogICAgaWYgKGlzX3dwX2Vycm9yKCR3Y190YWdzX2xpc3QpKSAkd2NfdGFnc19saXN0ID0gW107CiAgICAkY2F0c19mb3JfanMgPSBbXTsKICAgIGZvcmVhY2ggKCR3Y19jYXRzX2xpc3QgYXMgJHRpZCA9PiAkdG5hbWUpIHsgJGNhdHNfZm9yX2pzW10gPSBbJ2lkJyA9PiAkdGlkLCAnbmFtZScgPT4gJHRuYW1lXTsgfQogICAgJHRhZ3NfZm9yX2pzID0gW107CiAgICBmb3JlYWNoICgkd2NfdGFnc19saXN0IGFzICR0aWQgPT4gJHRuYW1lKSB7ICR0YWdzX2Zvcl9qc1tdID0gWydpZCcgPT4gJHRpZCwgJ25hbWUnID0+ICR0bmFtZV07IH0KICAgIGVjaG8gJzxzY3JpcHQ+dmFyIHZtMldjQ2F0cz0nIC4gd3BfanNvbl9lbmNvZGUoJGNhdHNfZm9yX2pzKSAuICc7dmFyIHZtMldjVGFncz0nIC4gd3BfanNvbl9lbmNvZGUoJHRhZ3NfZm9yX2pzKSAuICc7PC9zY3JpcHQ+JzsKCiAgICBlY2hvICc8ZGl2IGlkPSJ2bTJQYXJ0bmVyTW9kYWwiIHN0eWxlPSJkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjUpO3otaW5kZXg6OTk5OTtvdmVyZmxvdy15OmF1dG8iPgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjttYXgtd2lkdGg6NjAwcHg7bWFyZ2luOjQwcHggYXV0bztib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyOHB4O3Bvc2l0aW9uOnJlbGF0aXZlIj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcJ3ZtMlBhcnRuZXJNb2RhbFwnKS5zdHlsZS5kaXNwbGF5PVwnbm9uZVwnIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7dG9wOjEycHg7cmlnaHQ6MTZweDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjIwcHg7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY2NiI+4pyVPC9idXR0b24+CiAgICAgICAgICAgIDxoMiBpZD0idm0yTW9kYWxUaXRsZSIgc3R5bGU9Im1hcmdpbjowIDAgMjBweDtmb250LXNpemU6MThweCI+Tm92byBQYXJjZWlybzwvaDI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJwbV9pZCIgdmFsdWU9IjAiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZm9ybS1yb3ciPgogICAgICAgICAgICAgICAgPGRpdj48bGFiZWw+Tm9tZSBjb21wbGV0byAqPC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBtX25hbWUiIHBsYWNlaG9sZGVyPSJFeDogSm/Do28gREogU291bmRzIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXY+PGxhYmVsPldoYXRzQXBwIChEREkrREREK27Dum1lcm8pPC9sYWJlbD48aW5wdXQgdHlwZT0idGVsIiBpZD0icG1fcGhvbmUiIHBsYWNlaG9sZGVyPSI1NTExOTk5OTk5OTk5Ij48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1mb3JtLXJvdyI+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbD5FbWFpbDwvbGFiZWw+PGlucHV0IHR5cGU9ImVtYWlsIiBpZD0icG1fZW1haWwiIHBsYWNlaG9sZGVyPSJlbWFpbEBleGVtcGxvLmNvbSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbD5TdGF0dXM8L2xhYmVsPjxzZWxlY3QgaWQ9InBtX3N0YXR1cyI+PG9wdGlvbiB2YWx1ZT0iYXRpdm8iPvCfn6IgQXRpdm88L29wdGlvbj48b3B0aW9uIHZhbHVlPSJpbmF0aXZvIj7imqsgSW5hdGl2bzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ImJsb3F1ZWFkbyI+8J+UtCBCbG9xdWVhZG88L29wdGlvbj48L3NlbGVjdD48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMi1mb3JtLXJvdyI+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbD7wn46qIEF0cmHDp8O1ZXMgKHNlcGFyYWRhcyBwb3IgdsOtcmd1bGEpPC9sYWJlbD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9InBtX2F0cmFjYW8iIHBsYWNlaG9sZGVyPSJESiwgTcOhZ2ljbywgQnVmZmV0Li4uIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXY+PGxhYmVsPvCfk40gUmVnacOjbzwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJwbV9yZWdpYW8iIHBsYWNlaG9sZGVyPSJFeDogR3JhbmRlIFNQLCBJbnRlcmlvciBTUCI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bTItZm9ybS1yb3ciPgogICAgICAgICAgICAgICAgPGRpdj48bGFiZWw+8J+Pme+4jyBDaWRhZGU8L2xhYmVsPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0icG1fY2lkYWRlIiBwbGFjZWhvbGRlcj0iU8OjbyBQYXVsbyI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PjxsYWJlbD5VRjwvbGFiZWw+PGlucHV0IHR5cGU9InRleHQiIGlkPSJwbV9lc3RhZG8iIG1heGxlbmd0aD0iMiIgcGxhY2Vob2xkZXI9IlNQIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTJweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NTU7bWFyZ2luLWJvdHRvbTo0cHgiPvCfk50gT2JzZXJ2YcOnw7VlczwvbGFiZWw+CiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9InBtX29ic2VydmFjb2VzIiByb3dzPSIzIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjdweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtyZXNpemU6dmVydGljYWw7Ym94LXNpemluZzpib3JkZXItYm94IiBwbGFjZWhvbGRlcj0iSW5mb3JtYcOnw7VlcyBhZGljaW9uYWlzLi4uIj48L3RleHRhcmVhPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzU1NTttYXJnaW4tYm90dG9tOjZweCI+8J+OqiBDYXRlZ29yaWFzIFdvb0NvbW1lcmNlIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDo0MDA7Y29sb3I6I2FhYSI+KHBhcmEgbW9udGFnZW0gZGUgZWxlbmNvKTwvc3Bhbj48L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBpZD0icG1fY2F0c193cmFwIiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7bWF4LWhlaWdodDoxMjBweDtvdmVyZmxvdy15OmF1dG87Ym9yZGVyOjFweCBzb2xpZCAjZWVlO3BhZGRpbmc6OHB4O2JvcmRlci1yYWRpdXM6NnB4Ij48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiM1NTU7bWFyZ2luLWJvdHRvbTo2cHgiPvCfj7fvuI8gVGFncyBXb29Db21tZXJjZSA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6NDAwO2NvbG9yOiNhYWEiPihvcGNpb25hbCk8L3NwYW4+PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9InBtX3RhZ3Nfd3JhcCIgc3R5bGU9ImRpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O21heC1oZWlnaHQ6MTAwcHg7b3ZlcmZsb3cteTphdXRvO2JvcmRlcjoxcHggc29saWQgI2VlZTtwYWRkaW5nOjhweDtib3JkZXItcmFkaXVzOjZweCI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idm0yLWJ0biB2bTItYnRuLWdyYXkiIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwndm0yUGFydG5lck1vZGFsXCcpLnN0eWxlLmRpc3BsYXk9XCdub25lXCciPkNhbmNlbGFyPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ2bTItYnRuIHZtMi1idG4tcHJpbWFyeSIgb25jbGljaz0idm0yU2F2ZVBhcnRuZXIoKSI+8J+SviBTYWx2YXIgUGFyY2Vpcm88L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InBtX21zZyIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDtmb250LXNpemU6MTNweCI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4nOwoKICAgIC8vIOKUgOKUgCBKQVZBU0NSSVBUIOKUgOKUgAogICAgPz4KPHNjcmlwdD4KICAgIHZhciB2bTJOb25jZSA9ICI8P3BocCBlY2hvICRub25jZTsgPz4iOwogICAgdmFyIHZtMkJhc2UgID0gIjw/cGhwIGVjaG8gYWRtaW5fdXJsKCdhZG1pbi1hamF4LnBocCcpOyA/PiI7CiAgICB2YXIgdm0yUGFnZSAgPSAiPD9waHAgZWNobyBhZG1pbl91cmwoJ2FkbWluLnBocD9wYWdlPXZtMi1wYXJjZWlyb3MnKTsgPz4iOwoKICAgIGZ1bmN0aW9uIHZtMlJlbmRlckNoZWNrYm94ZXMod3JhcElkLCBpdGVtcywgY2hlY2tlZElkcykgewogICAgICAgIHZhciB3cmFwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod3JhcElkKTsKICAgICAgICBpZiAoIXdyYXApIHJldHVybjsKICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkgeyB3cmFwLmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT0iY29sb3I6I2FhYTtmb250LXNpemU6MTFweCI+TmVuaHVtYSBvcMOnw6NvIGVuY29udHJhZGE8L3NwYW4+JzsgcmV0dXJuOyB9CiAgICAgICAgd3JhcC5pbm5lckhUTUwgPSBpdGVtcy5tYXAoZnVuY3Rpb24oaXQpIHsKICAgICAgICAgICAgdmFyIGNoayA9IChjaGVja2VkSWRzICYmIGNoZWNrZWRJZHMuaW5kZXhPZihpdC5pZCkgPj0gMCkgPyAnIGNoZWNrZWQnIDogJyc7CiAgICAgICAgICAgIHJldHVybiAnPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzozcHggOHB4O2N1cnNvcjpwb2ludGVyO3doaXRlLXNwYWNlOm5vd3JhcCI+JwogICAgICAgICAgICAgICAgICsgJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgdmFsdWU9IicgKyBpdC5pZCArICciJyArIGNoayArICcgc3R5bGU9Im1hcmdpbjowIj4nCiAgICAgICAgICAgICAgICAgKyAnPHNwYW4+JyArIGl0Lm5hbWUgKyAnPC9zcGFuPjwvbGFiZWw+JzsKICAgICAgICB9KS5qb2luKCcnKTsKICAgIH0KCiAgICBmdW5jdGlvbiB2bTJHZXRDaGVja2VkSWRzKHdyYXBJZCkgewogICAgICAgIHZhciB3cmFwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQod3JhcElkKTsKICAgICAgICBpZiAoIXdyYXApIHJldHVybiBbXTsKICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh3cmFwLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQnKSkubWFwKGZ1bmN0aW9uKGNiKXsgcmV0dXJuIHBhcnNlSW50KGNiLnZhbHVlKTsgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gdm0yT3Blbk1vZGFsKGlkKSB7CiAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidm0yUGFydG5lck1vZGFsIik7CiAgICAgICAgLy8gUmVuZGVyIGNoZWNrYm94ZXMgYWx3YXlzCiAgICAgICAgdm0yUmVuZGVyQ2hlY2tib3hlcygicG1fY2F0c193cmFwIiwgdHlwZW9mIHZtMldjQ2F0cyAhPT0gInVuZGVmaW5lZCIgPyB2bTJXY0NhdHMgOiBbXSwgW10pOwogICAgICAgIHZtMlJlbmRlckNoZWNrYm94ZXMoInBtX3RhZ3Nfd3JhcCIsIHR5cGVvZiB2bTJXY1RhZ3MgIT09ICJ1bmRlZmluZWQiID8gdm0yV2NUYWdzIDogW10sIFtdKTsKICAgICAgICB2YXIgbXNnRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG1fbXNnIik7CiAgICAgICAgaWYgKG1zZ0VsKSBtc2dFbC50ZXh0Q29udGVudCA9ICIiOwogICAgICAgIGlmIChpZCA+IDApIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInZtMk1vZGFsVGl0bGUiKS50ZXh0Q29udGVudCA9ICJFZGl0YXIgUGFyY2Vpcm8iOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG1faWQiKS52YWx1ZSA9IGlkOwogICAgICAgICAgICAvLyBMb2FkIHBhcnRuZXIgZGF0YSB2aWEgQUpBWAogICAgICAgICAgICB2YXIgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgZmQuYXBwZW5kKCJhY3Rpb24iLCJ2bTJfZ2V0X3BhcnRuZXIiKTsKICAgICAgICAgICAgZmQuYXBwZW5kKCJub25jZSIsdm0yTm9uY2UpOwogICAgICAgICAgICBmZC5hcHBlbmQoImlkIixpZCk7CiAgICAgICAgICAgIGZldGNoKHZtMkJhc2UsIHttZXRob2Q6IlBPU1QiLGJvZHk6ZmR9KS50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiByLmpzb24oKTt9KS50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MgJiYgcmVzLmRhdGEpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHJlcy5kYXRhOwogICAgICAgICAgICAgICAgICAgIFsibmFtZSIsInBob25lIiwiZW1haWwiLCJhdHJhY2FvIiwicmVnaWFvIiwiY2lkYWRlIiwiZXN0YWRvIiwib2JzZXJ2YWNvZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGYpewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG1fIitmKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsKSBlbC52YWx1ZSA9IHBbZl0gfHwgIiI7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBtX3N0YXR1cyIpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdCkgc3QudmFsdWUgPSBwLnN0YXR1cyB8fCAiYXRpdm8iOwogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRzID0gSlNPTi5wYXJzZShwLndjX2NhdGVnb3JpZXMgfHwgIltdIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWdzID0gSlNPTi5wYXJzZShwLndjX3RhZ3MgfHwgIltdIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZtMlJlbmRlckNoZWNrYm94ZXMoInBtX2NhdHNfd3JhcCIsIHR5cGVvZiB2bTJXY0NhdHMgIT09ICJ1bmRlZmluZWQiID8gdm0yV2NDYXRzIDogW10sIGNhdHMpOwogICAgICAgICAgICAgICAgICAgICAgICB2bTJSZW5kZXJDaGVja2JveGVzKCJwbV90YWdzX3dyYXAiLCB0eXBlb2Ygdm0yV2NUYWdzICE9PSAidW5kZWZpbmVkIiA/IHZtMldjVGFncyA6IFtdLCB0YWdzKTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2bTJNb2RhbFRpdGxlIikudGV4dENvbnRlbnQgPSAiTm92byBQYXJjZWlybyI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbV9pZCIpLnZhbHVlID0gMDsKICAgICAgICAgICAgWyJwbV9uYW1lIiwicG1fcGhvbmUiLCJwbV9lbWFpbCIsInBtX2F0cmFjYW8iLCJwbV9yZWdpYW8iLCJwbV9jaWRhZGUiLCJwbV9lc3RhZG8iLCJwbV9vYnNlcnZhY29lcyJdLmZvckVhY2goZnVuY3Rpb24oZil7IHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChmKTsgaWYoZWwpIGVsLnZhbHVlPSIiOyB9KTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBtX3N0YXR1cyIpLnZhbHVlID0gImF0aXZvIjsKICAgICAgICB9CiAgICAgICAgbS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgIH0KCiAgICBmdW5jdGlvbiB2bTJTYXZlUGFydG5lcigpIHsKICAgICAgICB2YXIgYnRuID0gZXZlbnQudGFyZ2V0OwogICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7IGJ0bi50ZXh0Q29udGVudCA9ICJTYWx2YW5kby4uLiI7CiAgICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCJhY3Rpb24iLCJ2bTJfc2F2ZV9wYXJ0bmVyIik7CiAgICAgICAgZmQuYXBwZW5kKCJub25jZSIsIHZtMk5vbmNlKTsKICAgICAgICBbImlkIiwibmFtZSIsInBob25lIiwiZW1haWwiLCJhdHJhY2FvIiwicmVnaWFvIiwiY2lkYWRlIiwiZXN0YWRvIiwic3RhdHVzIiwib2JzZXJ2YWNvZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGYpewogICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG1fIitmKTsKICAgICAgICAgICAgaWYgKGVsKSBmZC5hcHBlbmQoZiwgZWwudmFsdWUpOwogICAgICAgIH0pOwogICAgICAgIGZkLmFwcGVuZCgid2NfY2F0ZWdvcmllcyIsIEpTT04uc3RyaW5naWZ5KHZtMkdldENoZWNrZWRJZHMoInBtX2NhdHNfd3JhcCIpKSk7CiAgICAgICAgZmQuYXBwZW5kKCJ3Y190YWdzIiwgICAgICAgSlNPTi5zdHJpbmdpZnkodm0yR2V0Q2hlY2tlZElkcygicG1fdGFnc193cmFwIikpKTsKICAgICAgICBmZXRjaCh2bTJCYXNlLCB7bWV0aG9kOiJQT1NUIixib2R5OmZkfSkudGhlbihyPT5yLmpzb24oKSkudGhlbihmdW5jdGlvbihyZXMpewogICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsgYnRuLnRleHRDb250ZW50ID0gIvCfkr4gU2FsdmFyIFBhcmNlaXJvIjsKICAgICAgICAgICAgdmFyIG1zZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbV9tc2ciKTsKICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICBtc2cuc3R5bGUuY29sb3IgPSAiIzE2YTM0YSI7CiAgICAgICAgICAgICAgICBtc2cudGV4dENvbnRlbnQgPSAi4pyFIFBhcmNlaXJvIHNhbHZvIGNvbSBzdWNlc3NvISI7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGxvY2F0aW9uLnJlbG9hZCgpOyB9LCA4MDApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbXNnLnN0eWxlLmNvbG9yID0gIiNkYzI2MjYiOwogICAgICAgICAgICAgICAgbXNnLnRleHRDb250ZW50ID0gIuKdjCBFcnJvIGFvIHNhbHZhci4iOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gdm0yRGVsZXRlUGFydG5lcihpZCkgewogICAgICAgIGlmICghY29uZmlybSgiRXhjbHVpciBlc3RlIHBhcmNlaXJvPyBFc3RhIGHDp8OjbyBuw6NvIHBvZGUgc2VyIGRlc2ZlaXRhLiIpKSByZXR1cm47CiAgICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCJhY3Rpb24iLCJ2bTJfZGVsZXRlX3BhcnRuZXIiKTsKICAgICAgICBmZC5hcHBlbmQoIm5vbmNlIix2bTJOb25jZSk7CiAgICAgICAgZmQuYXBwZW5kKCJpZCIsaWQpOwogICAgICAgIGZldGNoKHZtMkJhc2UsIHttZXRob2Q6IlBPU1QiLGJvZHk6ZmR9KS50aGVuKHI9PnIuanNvbigpKS50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgbG9jYXRpb24uaHJlZiA9IHZtMlBhZ2UgKyAiJnRhYj1jYWRhc3RybyI7CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gdm0yUXVldWVBY3Rpb24oaWQsIGFjdGlvbikgewogICAgICAgIHZhciBmZCA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIGZkLmFwcGVuZCgiYWN0aW9uIiwidm0yX2FwcHJvdmVfcXVldWUiKTsKICAgICAgICBmZC5hcHBlbmQoIm5vbmNlIix2bTJOb25jZSk7CiAgICAgICAgZmQuYXBwZW5kKCJpZCIsaWQpOwogICAgICAgIGZkLmFwcGVuZCgicXVldWVfYWN0aW9uIixhY3Rpb24pOwogICAgICAgIGZldGNoKHZtMkJhc2UsIHttZXRob2Q6IlBPU1QiLGJvZHk6ZmR9KS50aGVuKHI9PnIuanNvbigpKS50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgewogICAgICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInFpXyIraWQpOwogICAgICAgICAgICAgICAgaWYgKGVsKSB7IGVsLnN0eWxlLm9wYWNpdHk9IjAuMyI7IGVsLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiOyB9CiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uPT09ImFwcHJvdmUiKSB7IGVsLmlubmVySFRNTCA9ICI8ZGl2IHN0eWxlPSdwYWRkaW5nOjEwcHg7Y29sb3I6IzE2YTM0YTtmb250LXdlaWdodDo2MDAnPuKchSBBcHJvdmFkbyAmIEVudmlhZG8hPC9kaXY+IjsgfQogICAgICAgICAgICAgICAgZWxzZSB7IGVsLmlubmVySFRNTCA9ICI8ZGl2IHN0eWxlPSdwYWRkaW5nOjEwcHg7Y29sb3I6I2RjMjYyNic+4pyVIENhbmNlbGFkbzwvZGl2PiI7IH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHZtMkVkaXRCdWJibGUoaWQpIHsKICAgICAgICB2YXIgYnViYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ1YmJsZV8iK2lkKTsKICAgICAgICB2YXIgY3VycmVudCA9IGJ1YmJsZS50ZXh0Q29udGVudDsKICAgICAgICB2YXIgdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOwogICAgICAgIHRhLnZhbHVlID0gY3VycmVudDsgdGEucm93cyA9IDU7CiAgICAgICAgdGEuc3R5bGUuY3NzVGV4dCA9ICJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgIzdjM2FlZDtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtyZXNpemU6dmVydGljYWw7Ym94LXNpemluZzpib3JkZXItYm94IjsKICAgICAgICBidWJibGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGEsIGJ1YmJsZSk7CiAgICAgICAgdGEuaWQgPSAiYnViYmxlXyIraWQ7CiAgICAgICAgdmFyIHNhdmVCdG4gPSBidWJibGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCIuYWN0aW9ucyIpOwogICAgICAgIGlmICghc2F2ZUJ0bikgcmV0dXJuOwogICAgICAgIHZhciBuZXdCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgICAgICBuZXdCdG4uY2xhc3NOYW1lID0gInZtMi1idG4gdm0yLWJ0bi1wcmltYXJ5IHZtMi1idG4tc20iOwogICAgICAgIG5ld0J0bi50ZXh0Q29udGVudCA9ICLwn5K+IFNhbHZhciBlZGnDp8OjbyI7CiAgICAgICAgbmV3QnRuLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgICAgIGZkLmFwcGVuZCgiYWN0aW9uIiwidm0yX2FwcHJvdmVfcXVldWUiKTsKICAgICAgICAgICAgZmQuYXBwZW5kKCJub25jZSIsdm0yTm9uY2UpOwogICAgICAgICAgICBmZC5hcHBlbmQoImlkIixpZCk7CiAgICAgICAgICAgIGZkLmFwcGVuZCgicXVldWVfYWN0aW9uIiwiZWRpdCIpOwogICAgICAgICAgICBmZC5hcHBlbmQoIm1lc3NhZ2UiLHRhLnZhbHVlKTsKICAgICAgICAgICAgZmV0Y2godm0yQmFzZSx7bWV0aG9kOiJQT1NUIixib2R5OmZkfSkudGhlbihyPT5yLmpzb24oKSkudGhlbihmdW5jdGlvbihyKXsKICAgICAgICAgICAgICAgIGlmKHIuc3VjY2Vzcyl7bmV3QnRuLnRleHRDb250ZW50PSLinIUgU2Fsdm8hIjt9CiAgICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgc2F2ZUJ0bi5wcmVwZW5kKG5ld0J0bik7CiAgICB9CgogICAgZnVuY3Rpb24gdm0yQXBwcm92ZUFsbFVyZ2VudCgpIHsKICAgICAgICBpZiAoIWNvbmZpcm0oIkFwcm92YXIgZSBlbnZpYXIgVE9EQVMgYXMgbWVuc2FnZW5zIHVyZ2VudGVzPyIpKSByZXR1cm47CiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnZtMi1wcmlvcml0eS11cmdlbnRlIikuZm9yRWFjaChmdW5jdGlvbihlbCl7CiAgICAgICAgICAgIHZhciBpZCA9IGVsLmlkLnJlcGxhY2UoInFpXyIsIiIpOwogICAgICAgICAgICBpZiAoaWQpIHZtMlF1ZXVlQWN0aW9uKHBhcnNlSW50KGlkKSwgImFwcHJvdmUiKTsKICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiB2bTJDcmVhdGVSb3VuZCgpIHsKICAgICAgICB2YXIgYXRyYWNhbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXRjaF9hdHJhY2FvIikudmFsdWUudHJpbSgpOwogICAgICAgIHZhciBkYXRlICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hdGNoX2RhdGUiKS52YWx1ZTsKICAgICAgICB2YXIgb3JkZXIgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXRjaF9vcmRlciIpLnZhbHVlOwogICAgICAgIHZhciBtc2cgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hdGNoX21zZyIpLnZhbHVlLnRyaW0oKTsKICAgICAgICB2YXIgcmVzX2RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXRjaF9yZXN1bHQiKTsKICAgICAgICBpZiAoIWF0cmFjYW8gfHwgIWRhdGUpIHsgcmVzX2Rpdi5pbm5lckhUTUwgPSAiPHNwYW4gc3R5bGU9J2NvbG9yOiNkYzI2MjYnPuKaoO+4jyBQcmVlbmNoYSBhIGF0cmHDp8OjbyBlIGEgZGF0YS48L3NwYW4+IjsgcmV0dXJuOyB9CiAgICAgICAgcmVzX2Rpdi5pbm5lckhUTUwgPSAiPHNwYW4gc3R5bGU9J2NvbG9yOiM4ODgnPuKPsyBDcmlhbmRvIHJvZGFkYS4uLjwvc3Bhbj4iOwogICAgICAgIHZhciBmZCA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIGZkLmFwcGVuZCgiYWN0aW9uIiwidm0yX2NyZWF0ZV9tYXRjaGluZ19yb3VuZCIpOwogICAgICAgIGZkLmFwcGVuZCgibm9uY2UiLHZtMk5vbmNlKTsKICAgICAgICBmZC5hcHBlbmQoImF0cmFjYW8iLGF0cmFjYW8pOwogICAgICAgIGZkLmFwcGVuZCgiZXZlbnRfZGF0ZSIsZGF0ZSk7CiAgICAgICAgZmQuYXBwZW5kKCJvcmRlcl9pZCIsb3JkZXJ8fDApOwogICAgICAgIGZkLmFwcGVuZCgibXNnX3RlbXBsYXRlIixtc2cpOwogICAgICAgIGZldGNoKHZtMkJhc2Use21ldGhvZDoiUE9TVCIsYm9keTpmZH0pLnRoZW4ocj0+ci5qc29uKCkpLnRoZW4oZnVuY3Rpb24ocil7CiAgICAgICAgICAgIGlmKHIuc3VjY2Vzcyl7CiAgICAgICAgICAgICAgICB2YXIgZCA9IHIuZGF0YTsKICAgICAgICAgICAgICAgIGlmKGQucXVldWVkID4gMCl7CiAgICAgICAgICAgICAgICAgICAgcmVzX2Rpdi5pbm5lckhUTUwgPSAiPHNwYW4gc3R5bGU9J2NvbG9yOiMxNmEzNGEnPuKchSAiICsgZC5xdWV1ZWQgKyAiIGNvbnZpdGUocykgYWRpY2lvbmFkbyhzKSDDoCBGaWxhIGRlIEFwcm92YcOnw6NvITwvc3Bhbj4gPGEgaHJlZj0nIit2bTJQYWdlKyImdGFiPWZpbGEnIHN0eWxlPSdjb2xvcjojN2MzYWVkJz7ihpIgVmVyIEZpbGE8L2E+IjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmVzX2Rpdi5pbm5lckhUTUwgPSAiPHNwYW4gc3R5bGU9J2NvbG9yOiNmNTllMGInPuKaoO+4jyBOZW5odW0gcGFyY2Vpcm8gZGlzcG9uw612ZWwgY29tIGVzc2EgYXRyYcOnw6NvIG5hIGRhdGEgaW5mb3JtYWRhLiBDYWRhc3RyZSBwYXJjZWlyb3MgcHJpbWVpcm8uPC9zcGFuPiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXNfZGl2LmlubmVySFRNTCA9ICI8c3BhbiBzdHlsZT0nY29sb3I6I2RjMjYyNic+4p2MIEVycm8gYW8gY3JpYXIgcm9kYWRhLjwvc3Bhbj4iOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gdm0yQWR2YW5jZVN0YWdlKGV2ZW50X2lkLCBuZXh0X3N0YWdlKSB7CiAgICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZmQuYXBwZW5kKCJhY3Rpb24iLCJ2bTJfYWR2YW5jZV9wYXJ0bmVyX3N0YWdlIik7CiAgICAgICAgZmQuYXBwZW5kKCJub25jZSIsdm0yTm9uY2UpOwogICAgICAgIGZkLmFwcGVuZCgiZXZlbnRfaWQiLGV2ZW50X2lkKTsKICAgICAgICBmZC5hcHBlbmQoInN0YWdlIixuZXh0X3N0YWdlKTsKICAgICAgICBmZXRjaCh2bTJCYXNlLHttZXRob2Q6IlBPU1QiLGJvZHk6ZmR9KS50aGVuKHI9PnIuanNvbigpKS50aGVuKGZ1bmN0aW9uKHIpewogICAgICAgICAgICBpZihyLnN1Y2Nlc3MpIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgIH0pOwogICAgfQo8L3NjcmlwdD4KICAgIDw/cGhwCgogICAgZWNobyAnPC9kaXY+JzsgLy8gLnZtMi13cmFwCn0KCi8vIEFKQVg6IEFkdmFuY2UgcGFydG5lciBldmVudCBzdGFnZQoKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIEVMRU5DTyDigJQgQk9UIERFIE1PTlRBR0VNIERFIEVRVUlQRQovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKCi8vIOKUgOKUgCBBdXRvLWNyaWFyIHDDoWdpbmEgL2VsZW5jby12aXZhbWFpcy8gbmEgYXRpdmHDp8OjbyDilIDilIAKYWRkX2FjdGlvbignaW5pdCcsICd2bTJfZW5zdXJlX2VsZW5jb19wYWdlJyk7CmZ1bmN0aW9uIHZtMl9lbnN1cmVfZWxlbmNvX3BhZ2UoKSB7CiAgICBpZiAoZ2V0X29wdGlvbigndm0yX2VsZW5jb19wYWdlX3YxJykpIHJldHVybjsKICAgICRleGlzdGluZyA9IGdldF9wYWdlX2J5X3BhdGgoJ2VsZW5jby12aXZhbWFpcycpOwogICAgaWYgKCEkZXhpc3RpbmcpIHsKICAgICAgICAkcGFnZV9pZCA9IHdwX2luc2VydF9wb3N0KFsKICAgICAgICAgICAgJ3Bvc3RfdGl0bGUnICAgPT4gJ0NvbmZpcm1hciBFcXVpcGUnLAogICAgICAgICAgICAncG9zdF9uYW1lJyAgICA9PiAnZWxlbmNvLXZpdmFtYWlzJywKICAgICAgICAgICAgJ3Bvc3Rfc3RhdHVzJyAgPT4gJ3B1Ymxpc2gnLAogICAgICAgICAgICAncG9zdF90eXBlJyAgICA9PiAncGFnZScsCiAgICAgICAgICAgICdwb3N0X2NvbnRlbnQnID0+ICcnLAogICAgICAgIF0pOwogICAgICAgIGlmICgkcGFnZV9pZCAmJiAhaXNfd3BfZXJyb3IoJHBhZ2VfaWQpKSB7CiAgICAgICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9lbGVuY29fcGFnZV92MScsICRwYWdlX2lkKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9lbGVuY29fcGFnZV92MScsICRleGlzdGluZy0+SUQpOwogICAgfQp9CgovLyDilIDilIAgVGVtcGxhdGUgb3ZlcnJpZGUgcGFyYSBhIHDDoWdpbmEgZGUgY29uZmlybWHDp8OjbyDilIDilIAKYWRkX2FjdGlvbigndGVtcGxhdGVfcmVkaXJlY3QnLCAndm0yX2VsZW5jb190ZW1wbGF0ZV9yZWRpcmVjdCcpOwpmdW5jdGlvbiB2bTJfZWxlbmNvX3RlbXBsYXRlX3JlZGlyZWN0KCkgewogICAgaWYgKCFpc19wYWdlKCdlbGVuY28tdml2YW1haXMnKSkgcmV0dXJuOwogICAgJHRva2VuICAgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsndG9rZW4nXSA/PyAnJyk7CiAgICAkdmlldyAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfR0VUWyd2aWV3J10gPz8gJycpOwogICAgZ2xvYmFsICR3cGRiOwogICAgJHRlYW1fcm93ID0gbnVsbDsKICAgIGlmICgkdG9rZW4pIHsKICAgICAgICAkdGVhbV9yb3cgPSAkd3BkYi0+Z2V0X3Jvdygkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgIlNFTEVDVCAqIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3RlYW1zIFdIRVJFIGNvbmZpcm1fdG9rZW49JXMiLAogICAgICAgICAgICAkdG9rZW4KICAgICAgICApKTsKICAgIH0KICAgIGlmICgkdmlldyA9PT0gJ29yZGVyJyAmJiAkdGVhbV9yb3cgJiYgJHRlYW1fcm93LT5vcmRlcl9pZCkgewogICAgICAgIHZtMl9lbGVuY29fcmVuZGVyX29yZGVyX2RldGFpbHMoJHRlYW1fcm93LCAkdG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgICB2bTJfZWxlbmNvX3JlbmRlcl9jb25maXJtYXRpb24oJHRlYW1fcm93LCAkdG9rZW4pOwogICAgfQogICAgZXhpdDsKfQoKLy8g4pSA4pSAIFBlZ2FyIGRhdGEgZG8gZXZlbnRvIGEgcGFydGlyIGRvIHBlZGlkbyDilIDilIAKZnVuY3Rpb24gdm0yX2dldF9ldmVudF9kYXRlX2Zyb21fb3JkZXIoJG9yZGVyX2lkKSB7CiAgICAkb3JkZXIgPSB3Y19nZXRfb3JkZXIoJG9yZGVyX2lkKTsKICAgIGlmICghJG9yZGVyKSByZXR1cm4gbnVsbDsKICAgIGZvcmVhY2ggKCRvcmRlci0+Z2V0X2l0ZW1zKCkgYXMgJGl0ZW0pIHsKICAgICAgICAkYmQgPSAkaXRlbS0+Z2V0X21ldGEoJ3lpdGhfYm9va2luZ19kYXRhJyk7CiAgICAgICAgaWYgKCRiZCkgewogICAgICAgICAgICAkZnJvbSA9ICRiZFsnZnJvbSddID8/ICgkYmRbJ3N0YXJ0J10gPz8gbnVsbCk7CiAgICAgICAgICAgIGlmICgkZnJvbSkgewogICAgICAgICAgICAgICAgJHRzID0gaXNfbnVtZXJpYygkZnJvbSkgPyAoaW50KSRmcm9tIDogc3RydG90aW1lKCRmcm9tKTsKICAgICAgICAgICAgICAgIGlmICgkdHMgPiAwKSByZXR1cm4gZGF0ZSgnWS1tLWQnLCAkdHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZm9yZWFjaCAoWydfZGF0YV9ldmVudG8nLCdkYXRhX2V2ZW50bycsJ195aXRoX2Jvb2tpbmdfc3RhcnQnXSBhcyAkbWV0YV9rZXkpIHsKICAgICAgICAkdiA9IGdldF9wb3N0X21ldGEoJG9yZGVyX2lkLCAkbWV0YV9rZXksIHRydWUpOwogICAgICAgIGlmICgkdikgeyAkdHMgPSBzdHJ0b3RpbWUoJHYpOyBpZiAoJHRzID4gMCkgcmV0dXJuIGRhdGUoJ1ktbS1kJywgJHRzKTsgfQogICAgfQogICAgcmV0dXJuIG51bGw7Cn0KCi8vIOKUgOKUgCBNb3RvciBkZSBtb250YWdlbSBkZSBlcXVpcGUg4pSA4pSACmZ1bmN0aW9uIHZtMl9hc3NlbWJsZV90ZWFtKCRvcmRlcl9pZCwgJHNpbXVsYXRlID0gZmFsc2UsICRzaW1fZGF0ZSA9IG51bGwsICRzaW1fY2F0X2lkcyA9IFtdKSB7CiAgICBnbG9iYWwgJHdwZGI7CgogICAgJG9yZGVyICAgICAgID0gZnVuY3Rpb25fZXhpc3RzKCd3Y19nZXRfb3JkZXInKSA/IHdjX2dldF9vcmRlcigkb3JkZXJfaWQpIDogbnVsbDsKICAgICRldmVudF9kYXRlICA9ICRzaW1fZGF0ZSA/OiAoJG9yZGVyID8gdm0yX2dldF9ldmVudF9kYXRlX2Zyb21fb3JkZXIoJG9yZGVyX2lkKSA6IG51bGwpOwogICAgJGNsaWVudF9uYW1lID0gJ1NpbXVsYcOnw6NvJzsKICAgICRjbGllbnRfcGhvbmUgPSAnJzsKCiAgICBpZiAoJG9yZGVyKSB7CiAgICAgICAgJGZuID0gJG9yZGVyLT5nZXRfYmlsbGluZ19maXJzdF9uYW1lKCk7CiAgICAgICAgJGxuID0gJG9yZGVyLT5nZXRfYmlsbGluZ19sYXN0X25hbWUoKTsKICAgICAgICAkY2xpZW50X25hbWUgID0gdHJpbSgiJGZuICRsbiIpID86ICdDbGllbnRlJzsKICAgICAgICAkY2xpZW50X3Bob25lID0gcHJlZ19yZXBsYWNlKCcvXEQvJywgJycsICRvcmRlci0+Z2V0X2JpbGxpbmdfcGhvbmUoKSk7CiAgICB9CgogICAgLy8gRGV0ZXJtaW5hciBjYXRlZ29yaWFzIG5lY2Vzc8OhcmlhcwogICAgJG5lZWRlZF9jYXRzID0gJHNpbV9jYXRfaWRzOwogICAgaWYgKGVtcHR5KCRuZWVkZWRfY2F0cykgJiYgJG9yZGVyKSB7CiAgICAgICAgZm9yZWFjaCAoJG9yZGVyLT5nZXRfaXRlbXMoKSBhcyAkaXRlbSkgewogICAgICAgICAgICAkcGlkICAgPSAkaXRlbS0+Z2V0X3Byb2R1Y3RfaWQoKTsKICAgICAgICAgICAgJHRlcm1zID0gd3BfZ2V0X3Bvc3RfdGVybXMoJHBpZCwgJ3Byb2R1Y3RfY2F0JywgWydmaWVsZHMnID0+ICdpZHMnXSk7CiAgICAgICAgICAgIGlmICghaXNfd3BfZXJyb3IoJHRlcm1zKSkgJG5lZWRlZF9jYXRzID0gYXJyYXlfbWVyZ2UoJG5lZWRlZF9jYXRzLCAkdGVybXMpOwogICAgICAgIH0KICAgICAgICAkbmVlZGVkX2NhdHMgPSBhcnJheV91bmlxdWUoJG5lZWRlZF9jYXRzKTsKICAgIH0KCiAgICAkdGVhbSAgICA9IFtdOwogICAgJG1pc3NpbmcgPSBbXTsKCiAgICBmb3JlYWNoICgkbmVlZGVkX2NhdHMgYXMgJGNhdF9pZCkgewogICAgICAgICRjYXQgICAgICA9IGdldF90ZXJtKChpbnQpJGNhdF9pZCwgJ3Byb2R1Y3RfY2F0Jyk7CiAgICAgICAgJGNhdF9uYW1lID0gKCRjYXQgJiYgIWlzX3dwX2Vycm9yKCRjYXQpKSA/ICRjYXQtPm5hbWUgOiAiQ2F0ZWdvcmlhICRjYXRfaWQiOwoKICAgICAgICAvLyBCdXNjYXIgcGFyY2Vpcm9zIGF0aXZvcyBxdWUgYXRlbmRlbSBlc3RhIGNhdGVnb3JpYQogICAgICAgICRhbGxfcGFydG5lcnMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgICAgICJTRUxFQ1QgKiBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyBXSEVSRSBzdGF0dXM9J2F0aXZvJyIKICAgICAgICApOwoKICAgICAgICAkbWF0Y2hpbmcgPSBhcnJheV92YWx1ZXMoYXJyYXlfZmlsdGVyKCRhbGxfcGFydG5lcnMsIGZ1bmN0aW9uKCRwKSB1c2UgKCRjYXRfaWQpIHsKICAgICAgICAgICAgJGNhdHMgPSBqc29uX2RlY29kZSgkcC0+d2NfY2F0ZWdvcmllcyA/OiAnW10nLCB0cnVlKTsKICAgICAgICAgICAgcmV0dXJuIGluX2FycmF5KChpbnQpJGNhdF9pZCwgKGFycmF5KSRjYXRzKTsKICAgICAgICB9KSk7CgogICAgICAgIGlmIChlbXB0eSgkbWF0Y2hpbmcpKSB7CiAgICAgICAgICAgICRtaXNzaW5nW10gPSBbJ2lkJyA9PiAkY2F0X2lkLCAnbmFtZScgPT4gJGNhdF9uYW1lXTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICAvLyBTZXBhcmFyIHBvciBkaXNwb25pYmlsaWRhZGUgbmEgZGF0YQogICAgICAgICRmcmVlID0gW107ICRidXN5ID0gW107CiAgICAgICAgZm9yZWFjaCAoJG1hdGNoaW5nIGFzICRwKSB7CiAgICAgICAgICAgIGlmICgkZXZlbnRfZGF0ZSkgewogICAgICAgICAgICAgICAgJGNvdW50ID0gKGludCkkd3BkYi0+Z2V0X3Zhcigkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJfZXZlbnRzCiAgICAgICAgICAgICAgICAgICAgIFdIRVJFIHBhcnRuZXJfaWQ9JWQgQU5EIGV2ZW50X2RhdGU9JXMgQU5EIHN0YWdlICE9ICdjYW5jZWxsZWQnIiwKICAgICAgICAgICAgICAgICAgICAkcC0+aWQsICRldmVudF9kYXRlCiAgICAgICAgICAgICAgICApKTsKICAgICAgICAgICAgICAgIGlmICgkY291bnQgPiAwKSAkYnVzeVtdID0gJHA7IGVsc2UgJGZyZWVbXSA9ICRwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGZyZWVbXSA9ICRwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcG9vbCAgID0gIWVtcHR5KCRmcmVlKSA/ICRmcmVlIDogJGJ1c3k7CiAgICAgICAgJGNob3NlbiA9ICRwb29sW2FycmF5X3JhbmQoJHBvb2wpXTsKCiAgICAgICAgJHRlYW1bKHN0cmluZykkY2F0X2lkXSA9IFsKICAgICAgICAgICAgJ2NhdF9pZCcgICAgICAgID0+IChpbnQpJGNhdF9pZCwKICAgICAgICAgICAgJ2NhdF9uYW1lJyAgICAgID0+ICRjYXRfbmFtZSwKICAgICAgICAgICAgJ3BhcnRuZXJfaWQnICAgID0+IChpbnQpJGNob3Nlbi0+aWQsCiAgICAgICAgICAgICdwYXJ0bmVyX25hbWUnICA9PiAkY2hvc2VuLT5uYW1lLAogICAgICAgICAgICAncGFydG5lcl9waG9uZScgPT4gJGNob3Nlbi0+cGhvbmUsCiAgICAgICAgICAgICdpc19idXN5JyAgICAgICA9PiAhZW1wdHkoJGJ1c3kpICYmIGluX2FycmF5KCRjaG9zZW4sICRidXN5KSwKICAgICAgICBdOwogICAgfQoKICAgIC8vIFNhbHZhciBubyBiYW5jbwogICAgJHRva2VuID0gYmluMmhleChyYW5kb21fYnl0ZXMoMjQpKTsKICAgICR3cGRiLT5pbnNlcnQoJHdwZGItPnByZWZpeCAuICd2bTJfdGVhbXMnLCBbCiAgICAgICAgJ29yZGVyX2lkJyAgICAgID0+IChpbnQpJG9yZGVyX2lkLAogICAgICAgICdldmVudF9kYXRlJyAgICA9PiAkZXZlbnRfZGF0ZSwKICAgICAgICAnY2xpZW50X25hbWUnICAgPT4gJGNsaWVudF9uYW1lLAogICAgICAgICdjbGllbnRfcGhvbmUnICA9PiAkY2xpZW50X3Bob25lLAogICAgICAgICd0ZWFtX2pzb24nICAgICA9PiB3cF9qc29uX2VuY29kZSgkdGVhbSksCiAgICAgICAgJ21pc3NpbmdfY2F0cycgID0+IHdwX2pzb25fZW5jb2RlKCRtaXNzaW5nKSwKICAgICAgICAnY29uZmlybV90b2tlbicgPT4gJHRva2VuLAogICAgICAgICdzdGF0dXMnICAgICAgICA9PiAnZHJhZnQnLAogICAgICAgICdpc19zaW11bGF0aW9uJyA9PiAkc2ltdWxhdGUgPyAxIDogMCwKICAgICAgICAnY3JlYXRlZF9hdCcgICAgPT4gY3VycmVudF90aW1lKCdteXNxbCcpLAogICAgXSk7CiAgICAkdGVhbV9pZCA9IChpbnQpJHdwZGItPmluc2VydF9pZDsKCiAgICByZXR1cm4gWwogICAgICAgICd0ZWFtX2lkJyAgICAgPT4gJHRlYW1faWQsCiAgICAgICAgJ29yZGVyX2lkJyAgICA9PiAkb3JkZXJfaWQsCiAgICAgICAgJ2V2ZW50X2RhdGUnICA9PiAkZXZlbnRfZGF0ZSwKICAgICAgICAnY2xpZW50X25hbWUnID0+ICRjbGllbnRfbmFtZSwKICAgICAgICAndGVhbScgICAgICAgID0+ICR0ZWFtLAogICAgICAgICdtaXNzaW5nJyAgICAgPT4gJG1pc3NpbmcsCiAgICAgICAgJ3Rva2VuJyAgICAgICA9PiAkdG9rZW4sCiAgICAgICAgJ2NvbmZpcm1fdXJsJyA9PiBob21lX3VybCgnL2VsZW5jby12aXZhbWFpcy8/dG9rZW49JyAuICR0b2tlbiksCiAgICAgICAgJ2lzX3NpbXVsYXRpb24nID0+ICRzaW11bGF0ZSwKICAgIF07Cn0KCi8vIOKUgOKUgCBFbnZpYXIgbm90aWZpY2HDp8OjbyBXQSBwYXJhIG9zIGFkbWlucyDilIDilIAKZnVuY3Rpb24gdm0yX25vdGlmeV9hZG1pbnNfZWxlbmNvKCRyZXN1bHQpIHsKICAgIGlmIChlbXB0eSgkcmVzdWx0Wyd0ZWFtX2lkJ10pKSByZXR1cm47CiAgICAkZGF0ZV9mbXQgID0gJHJlc3VsdFsnZXZlbnRfZGF0ZSddID8gd3BfZGF0ZSgnZC9tL1knLCBzdHJ0b3RpbWUoJHJlc3VsdFsnZXZlbnRfZGF0ZSddKSkgOiAn4oCUJzsKICAgICRzaW1fbGFiZWwgPSAhZW1wdHkoJHJlc3VsdFsnaXNfc2ltdWxhdGlvbiddKSA/ICJcbvCfp6ogKlNJTVVMQcOHw4NPIOKAlCBuw6NvIMOpIHBlZGlkbyByZWFsKlxuIiA6ICcnOwogICAgJG9yZGVyX2xhYmVsID0gKCFlbXB0eSgkcmVzdWx0WydvcmRlcl9pZCddKSAmJiAhJHJlc3VsdFsnaXNfc2ltdWxhdGlvbiddKSA/ICJQZWRpZG8gI3skcmVzdWx0WydvcmRlcl9pZCddfSIgOiAnU2ltdWxhw6fDo28nOwoKICAgICRsaW5lcyA9IFtdOwogICAgZm9yZWFjaCAoJHJlc3VsdFsndGVhbSddIGFzICR0KSB7CiAgICAgICAgJGJ1c3lfZmxhZyA9ICFlbXB0eSgkdFsnaXNfYnVzeSddKSA/ICcg4pqg77iPICh0ZW0gZXZlbnRvIG5lc3NlIGRpYSknIDogJyc7CiAgICAgICAgJGxpbmVzW10gPSAi4oCiIHskdFsnY2F0X25hbWUnXX06ICp7JHRbJ3BhcnRuZXJfbmFtZSddfSp7JGJ1c3lfZmxhZ30iOwogICAgfQogICAgZm9yZWFjaCAoJHJlc3VsdFsnbWlzc2luZyddIGFzICRtKSB7CiAgICAgICAgJGNhdF9uYW1lID0gaXNfYXJyYXkoJG0pID8gJG1bJ25hbWUnXSA6ICRtOwogICAgICAgICRsaW5lc1tdICA9ICLigKIgeyRjYXRfbmFtZX06IOKaoO+4jyAqU0VNIFBBUkNFSVJPIENBREFTVFJBRE8qIjsKICAgIH0KCiAgICAkdGVhbV90ZXh0ID0gaW1wbG9kZSgiXG4iLCAkbGluZXMpID86ICdfKG5lbmh1bWEgY2F0ZWdvcmlhIG5vcyBwcm9kdXRvcylfJzsKCiAgICAkbXNnID0gIvCfjqwgKkVRVUlQRSBNT05UQURBIOKAlCB7JG9yZGVyX2xhYmVsfSp7JHNpbV9sYWJlbH1cbiIKICAgICAgICAgLiAi8J+ThSBEYXRhOiB7JGRhdGVfZm10fVxuIgogICAgICAgICAuICLwn5GkIENsaWVudGU6IHskcmVzdWx0WydjbGllbnRfbmFtZSddfVxuXG4iCiAgICAgICAgIC4gIvCfjqogKkVxdWlwZToqXG57JHRlYW1fdGV4dH1cblxuIgogICAgICAgICAuICLwn5SXIENvbmZpcm1hciAvIEFsdGVyYXIgZXF1aXBlOlxueyRyZXN1bHRbJ2NvbmZpcm1fdXJsJ119IjsKCiAgICBmb3JlYWNoIChbJzU1MTE5ODgxOTU4MDknLCAnNTUxMTk5MjU4Njg5NCddIGFzICRwaG9uZSkgewogICAgICAgIHZtMl9zZW5kX3phcGkoJ3phcGlfNzU1MScsICRwaG9uZSwgJG1zZyk7CiAgICB9Cn0KCi8vIOKUgOKUgCBIb29rIFdDOiBjb250cmFjdC1zaWduZWQg4oaSIG1vbnRhciBlcXVpcGUg4pSA4pSACmFkZF9hY3Rpb24oJ3dvb2NvbW1lcmNlX29yZGVyX3N0YXR1c19jaGFuZ2VkJywgJ3ZtMl9vbl9jb250cmFjdF9zaWduZWRfZWxlbmNvJywgMTAsIDMpOwpmdW5jdGlvbiB2bTJfb25fY29udHJhY3Rfc2lnbmVkX2VsZW5jbygkb3JkZXJfaWQsICRvbGRfc3RhdHVzLCAkbmV3X3N0YXR1cykgewogICAgaWYgKCRuZXdfc3RhdHVzICE9PSAnY29udHJhY3Qtc2lnbmVkJykgcmV0dXJuOwogICAgZ2xvYmFsICR3cGRiOwogICAgJGFscmVhZHkgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCR3cGRiLT5wcmVwYXJlKAogICAgICAgICJTRUxFQ1QgaWQgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfdGVhbXMgV0hFUkUgb3JkZXJfaWQ9JWQgQU5EIGlzX3NpbXVsYXRpb249MCBMSU1JVCAxIiwKICAgICAgICAkb3JkZXJfaWQKICAgICkpOwogICAgaWYgKCRhbHJlYWR5KSByZXR1cm47CiAgICAkcmVzdWx0ID0gdm0yX2Fzc2VtYmxlX3RlYW0oJG9yZGVyX2lkKTsKICAgIGlmICghZW1wdHkoJHJlc3VsdFsndGVhbV9pZCddKSkgdm0yX25vdGlmeV9hZG1pbnNfZWxlbmNvKCRyZXN1bHQpOwp9CgovLyDilIDilIAgQUpBWDogc2ltdWxhciBtb250YWdlbSDilIDilIAKYWRkX2FjdGlvbignd3BfYWpheF92bTJfc2ltdWxhdGVfZWxlbmNvJywgJ3ZtMl9hamF4X3NpbXVsYXRlX2VsZW5jbycpOwpmdW5jdGlvbiB2bTJfYWpheF9zaW11bGF0ZV9lbGVuY28oKSB7CiAgICBjaGVja19hamF4X3JlZmVyZXIoJ3ZtMl9ub25jZScsICdub25jZScpOwogICAgJG9yZGVyX2lkICA9IGludHZhbCgkX1BPU1RbJ29yZGVyX2lkJ10gPz8gMCk7CiAgICAkc2ltX2RhdGUgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2V2ZW50X2RhdGUnXSA/PyAnJyk7CiAgICAkY2F0X2lkcyAgID0gYXJyYXlfbWFwKCdpbnR2YWwnLCBqc29uX2RlY29kZShzdHJpcHNsYXNoZXMoJF9QT1NUWydjYXRfaWRzJ10gPz8gJ1tdJyksIHRydWUpID86IFtdKTsKICAgICRyZXN1bHQgICAgPSB2bTJfYXNzZW1ibGVfdGVhbSgkb3JkZXJfaWQgPzogMCwgdHJ1ZSwgJHNpbV9kYXRlID86IG51bGwsICRjYXRfaWRzKTsKICAgICRyZXN1bHRbJ2lzX3NpbXVsYXRpb24nXSA9IHRydWU7CiAgICB2bTJfbm90aWZ5X2FkbWluc19lbGVuY28oJHJlc3VsdCk7CiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcygkcmVzdWx0KTsKfQoKLy8g4pSA4pSAIEFKQVg6IGNhcnJlZ2FyIGRhZG9zIGRvIHBhcmNlaXJvIChwYXJhIG1vZGFsIGRlIGVkacOnw6NvKSDilIDilIAKYWRkX2FjdGlvbignd3BfYWpheF92bTJfZ2V0X3BhcnRuZXInLCAndm0yX2FqYXhfZ2V0X3BhcnRuZXInKTsKZnVuY3Rpb24gdm0yX2FqYXhfZ2V0X3BhcnRuZXIoKSB7CiAgICBjaGVja19hamF4X3JlZmVyZXIoJ3ZtMl9ub25jZScsICdub25jZScpOwogICAgZ2xvYmFsICR3cGRiOwogICAgJGlkID0gaW50dmFsKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgICRwICA9ICR3cGRiLT5nZXRfcm93KCR3cGRiLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9wYXJ0bmVycyBXSEVSRSBpZD0lZCIsICRpZCkpOwogICAgaWYgKCEkcCkgeyB3cF9zZW5kX2pzb25fZXJyb3IoJ25vdCBmb3VuZCcpOyByZXR1cm47IH0KICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKChhcnJheSkkcCk7Cn0KCi8vIOKUgOKUgCBBSkFYIChww7pibGljbyk6IGNvbmZpcm1hciBlcXVpcGUgdmlhIHRva2VuIOKUgOKUgAphZGRfYWN0aW9uKCd3cF9hamF4X25vcHJpdl92bTJfY29uZmlybV9lbGVuY28nLCAndm0yX2FqYXhfY29uZmlybV9lbGVuY28nKTsKYWRkX2FjdGlvbignd3BfYWpheF92bTJfY29uZmlybV9lbGVuY28nLCAgICAgICAgJ3ZtMl9hamF4X2NvbmZpcm1fZWxlbmNvJyk7CgovLyDilIDilIAgdjEuNS45MTogU2FsdmFyIGUtbWFpbCBwb3IgdGVsZWZvbmUgKFdBIENhcHR1cmUgc3RlcCAyICsgU29mSUEpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAphZGRfYWN0aW9uKCd3cF9hamF4X25vcHJpdl92bV93YV9zYXZlX2VtYWlsJywgJ3ZtMl9hamF4X3NhdmVfZW1haWwnKTsKYWRkX2FjdGlvbignd3BfYWpheF92bV93YV9zYXZlX2VtYWlsJywgICAgICAgICd2bTJfYWpheF9zYXZlX2VtYWlsJyk7CmZ1bmN0aW9uIHZtMl9hamF4X3NhdmVfZW1haWwoKSB7CiAgICBpZiAoICEgY2hlY2tfYWpheF9yZWZlcmVyKCd2bV93YV9jYXB0dXJlJywgJ25vbmNlJywgZmFsc2UpICkgewogICAgICAgIHdwX3NlbmRfanNvbl9lcnJvcignaW52YWxpZF9ub25jZScpOyByZXR1cm47CiAgICB9CiAgICAkcGhvbmUgPSBwcmVnX3JlcGxhY2UoJy9cRC8nLCAnJywgc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ3Bob25lJ10gPz8gJycpKTsKICAgICRlbWFpbCA9IHNhbml0aXplX2VtYWlsKCRfUE9TVFsnZW1haWwnXSA/PyAnJyk7CiAgICBpZiAoIHN0cmxlbigkcGhvbmUpIDwgMTAgfHwgISBpc19lbWFpbCgkZW1haWwpICkgewogICAgICAgIHdwX3NlbmRfanNvbl9lcnJvcignaW52YWxpZF9kYXRhJyk7IHJldHVybjsKICAgIH0KICAgIC8vIE5vcm1hbGl6YXIgdGVsZWZvbmUgY29tIERESSA1NQogICAgaWYgKCBzdHJsZW4oJHBob25lKSA8PSAxMSApICRwaG9uZSA9ICc1NScgLiAkcGhvbmU7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkY3QgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9jb250YWN0cyc7CiAgICAkcm93ID0gJHdwZGItPmdldF9yb3coJHdwZGItPnByZXBhcmUoIlNFTEVDVCBpZCwgZW1haWwgRlJPTSAkY3QgV0hFUkUgcGhvbmU9JXMgTElNSVQgMSIsICRwaG9uZSkpOwogICAgaWYgKCAkcm93ICkgewogICAgICAgIGlmICggZW1wdHkoJHJvdy0+ZW1haWwpICkgewogICAgICAgICAgICAkd3BkYi0+dXBkYXRlKCRjdCwgWydlbWFpbCcgPT4gJGVtYWlsLCAnbGFzdF9hY3Rpdml0eScgPT4gY3VycmVudF90aW1lKCdteXNxbCcpXSwgWydpZCcgPT4gJHJvdy0+aWRdKTsKICAgICAgICAgICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoWyd1cGRhdGVkJyA9PiB0cnVlXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoWyd1cGRhdGVkJyA9PiBmYWxzZSwgJ3JlYXNvbicgPT4gJ2FscmVhZHlfaGFzX2VtYWlsJ10pOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCdjb250YWN0X25vdF9mb3VuZCcpOwogICAgfQp9CmZ1bmN0aW9uIHZtMl9hamF4X2NvbmZpcm1fZWxlbmNvKCkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJHRva2VuICAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsndG9rZW4nXSA/PyAnJyk7CiAgICAkdGVhbV9qc29uICA9IHN0cmlwc2xhc2hlcygkX1BPU1RbJ3RlYW1fanNvbiddID8/ICcnKTsKICAgICRieSAgICAgICAgID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ2NvbmZpcm1lZF9ieSddID8/ICdhZG1pbl93YScpOwoKICAgIGlmICghJHRva2VuKSB7IHdwX3NlbmRfanNvbl9lcnJvcigndG9rZW5fbWlzc2luZycpOyByZXR1cm47IH0KCiAgICAkdGVhbV9yb3cgPSAkd3BkYi0+Z2V0X3Jvdygkd3BkYi0+cHJlcGFyZSgKICAgICAgICAiU0VMRUNUICogRlJPTSB7JHdwZGItPnByZWZpeH12bTJfdGVhbXMgV0hFUkUgY29uZmlybV90b2tlbj0lcyIsICR0b2tlbgogICAgKSk7CiAgICBpZiAoISR0ZWFtX3JvdykgeyB3cF9zZW5kX2pzb25fZXJyb3IoJ25vdF9mb3VuZCcpOyByZXR1cm47IH0KCiAgICAkdGVhbV9kYXRhID0ganNvbl9kZWNvZGUoJHRlYW1fanNvbiA/OiAkdGVhbV9yb3ctPnRlYW1fanNvbiwgdHJ1ZSkgPzogW107CgogICAgJHdwZGItPnVwZGF0ZSgkd3BkYi0+cHJlZml4IC4gJ3ZtMl90ZWFtcycsIFsKICAgICAgICAndGVhbV9qc29uJyAgICA9PiB3cF9qc29uX2VuY29kZSgkdGVhbV9kYXRhKSwKICAgICAgICAnc3RhdHVzJyAgICAgICA9PiAnY29uZmlybWVkJywKICAgICAgICAnY29uZmlybWVkX2J5JyA9PiAkYnksCiAgICAgICAgJ2NvbmZpcm1lZF9hdCcgPT4gY3VycmVudF90aW1lKCdteXNxbCcpLAogICAgXSwgWydjb25maXJtX3Rva2VuJyA9PiAkdG9rZW5dKTsKCiAgICAvLyBJbnNlcmlyIG5hIGFnZW5kYSBkb3MgcGFyY2Vpcm9zCiAgICBpZiAoJHRlYW1fcm93LT5ldmVudF9kYXRlKSB7CiAgICAgICAgJHdwZGItPmRlbGV0ZSgkd3BkYi0+cHJlZml4IC4gJ3ZtMl9wYXJ0bmVyX2V2ZW50cycsCiAgICAgICAgICAgIFsnb3JkZXJfaWQnID0+ICR0ZWFtX3Jvdy0+b3JkZXJfaWQsICdzdGFnZScgPT4gJ2VsZW5jbyddKTsKCiAgICAgICAgZm9yZWFjaCAoJHRlYW1fZGF0YSBhcyAkdCkgewogICAgICAgICAgICBpZiAoZW1wdHkoJHRbJ3BhcnRuZXJfaWQnXSkpIGNvbnRpbnVlOwogICAgICAgICAgICAkd3BkYi0+aW5zZXJ0KCR3cGRiLT5wcmVmaXggLiAndm0yX3BhcnRuZXJfZXZlbnRzJywgWwogICAgICAgICAgICAgICAgJ3BhcnRuZXJfaWQnID0+IChpbnQpJHRbJ3BhcnRuZXJfaWQnXSwKICAgICAgICAgICAgICAgICdvcmRlcl9pZCcgICA9PiAkdGVhbV9yb3ctPm9yZGVyX2lkLAogICAgICAgICAgICAgICAgJ2V2ZW50X2RhdGUnID0+ICR0ZWFtX3Jvdy0+ZXZlbnRfZGF0ZSwKICAgICAgICAgICAgICAgICdzdGFnZScgICAgICA9PiAnZWxlbmNvJywKICAgICAgICAgICAgICAgICdub3RlcycgICAgICA9PiAnQ29uZmlybWFkbyB2aWEgbGluayBkZSBhcHJvdmHDp8OjbyDCtyAnIC4gJGJ5LAogICAgICAgICAgICAgICAgJ2NyZWF0ZWRfYXQnID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwKICAgICAgICAgICAgXSk7CiAgICAgICAgfQogICAgfQogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoWydzdGF0dXMnID0+ICdjb25maXJtZWQnXSk7Cn0KCi8vIOKUgOKUgCBQw6FnaW5hIGRlIGNvbmZpcm1hw6fDo28g4oCUIHJlbmRlcmVyIOKUgOKUgApmdW5jdGlvbiB2bTJfZWxlbmNvX3JlbmRlcl9jb25maXJtYXRpb24oJHRlYW1fcm93LCAkdG9rZW4pIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRhamF4X3VybCA9IGFkbWluX3VybCgnYWRtaW4tYWpheC5waHAnKTsKCiAgICAvLyBDYXJyZWdhciB0b2RvcyBvcyBwYXJjZWlyb3MgYXRpdm9zIOKAlCBpbmNsdWluZG8gYXRyYWNhbyBwYXJhIG1vc3RyYXIgbm8gc2VhcmNoCiAgICAkYWxsX2FjdGl2ZSA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAiU0VMRUNUIGlkLCBuYW1lLCBhdHJhY2FvLCB3Y19jYXRlZ29yaWVzIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3BhcnRuZXJzIFdIRVJFIHN0YXR1cz0nYXRpdm8nIE9SREVSIEJZIG5hbWUgQVNDIgogICAgKTsKICAgICRwYXJ0bmVyc19qcyA9IHdwX2pzb25fZW5jb2RlKGFycmF5X21hcChmdW5jdGlvbigkcCkgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICdpZCcgICAgICA9PiAoaW50KSRwLT5pZCwKICAgICAgICAgICAgJ25hbWUnICAgID0+ICRwLT5uYW1lLAogICAgICAgICAgICAnYXRyYWNhbycgPT4gJHAtPmF0cmFjYW8gPzogJycsCiAgICAgICAgICAgICdjYXRzJyAgICA9PiBqc29uX2RlY29kZSgkcC0+d2NfY2F0ZWdvcmllcyA/OiAnW10nLCB0cnVlKSA/OiBbXSwKICAgICAgICBdOwogICAgfSwgJGFsbF9hY3RpdmUpKTsKCiAgICAkdGVhbV9kYXRhICAgID0gJHRlYW1fcm93ID8gKGpzb25fZGVjb2RlKCR0ZWFtX3Jvdy0+dGVhbV9qc29uID86ICd7fScsIHRydWUpID86IFtdKSA6IFtdOwogICAgJG1pc3NpbmdfZGF0YSA9ICR0ZWFtX3JvdyA/IChqc29uX2RlY29kZSgkdGVhbV9yb3ctPm1pc3NpbmdfY2F0cyA/OiAnW10nLCB0cnVlKSA/OiBbXSkgOiBbXTsKICAgICRldmVudF9kYXRlICAgPSAkdGVhbV9yb3cgPyAoJHRlYW1fcm93LT5ldmVudF9kYXRlID8gd3BfZGF0ZSgnZC9tL1knLCBzdHJ0b3RpbWUoJHRlYW1fcm93LT5ldmVudF9kYXRlKSkgOiAn4oCUJykgOiAn4oCUJzsKICAgICRjbGllbnQgICAgICAgPSAkdGVhbV9yb3cgPyBlc2NfaHRtbCgkdGVhbV9yb3ctPmNsaWVudF9uYW1lID86ICfigJQnKSA6ICfigJQnOwogICAgJG9yZGVyX2lkICAgICA9ICR0ZWFtX3JvdyA/IChpbnQpJHRlYW1fcm93LT5vcmRlcl9pZCA6IDA7CiAgICAkc3RhdHVzICAgICAgID0gJHRlYW1fcm93ID8gJHRlYW1fcm93LT5zdGF0dXMgOiAnJzsKICAgICRpc19zaW0gICAgICAgPSAkdGVhbV9yb3cgPyAoYm9vbCkkdGVhbV9yb3ctPmlzX3NpbXVsYXRpb24gOiBmYWxzZTsKICAgICRvcmRlcl9sYWJlbCAgPSAoJG9yZGVyX2lkICYmICEkaXNfc2ltKSA/ICJQZWRpZG8gI3skb3JkZXJfaWR9IiA6ICdTaW11bGHDp8Ojbyc7CgogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCcpOwogICAgPz48IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0icHQtQlIiPgo8aGVhZD4KPG1ldGEgY2hhcnNldD0iVVRGLTgiPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgo8dGl0bGU+Q29uZmlybWFyIEVxdWlwZSDCtyBWaXZhTWFpczwvdGl0bGU+CjxzdHlsZT4KICAqe2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjB9CiAgYm9keXtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLHNhbnMtc2VyaWY7YmFja2dyb3VuZDojZjNmNGY2O21pbi1oZWlnaHQ6MTAwdmh9CiAgLnRvcC1iYXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCM3YzNhZWQsIzRmNDZlNSk7Y29sb3I6I2ZmZjtwYWRkaW5nOjE2cHggMjBweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4fQogIC50b3AtYmFyIC5sb2dve2ZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjgwMDtsZXR0ZXItc3BhY2luZzotMC41cHh9CiAgLnRvcC1iYXIgLnN1Yntmb250LXNpemU6MTNweDtvcGFjaXR5Oi44fQogIC5jb250YWluZXJ7bWF4LXdpZHRoOjY0MHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoyMHB4IDE2cHggNjBweH0KICAuY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjBweDttYXJnaW4tYm90dG9tOjE2cHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMDgpfQogIC5jYXJkIGgye2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOjE0cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4fQogIC5pbmZvLWdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206NHB4fQogIC5pbmZvLWl0ZW17YmFja2dyb3VuZDojZjlmYWZiO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTBweH0KICAuaW5mby1pdGVtIC5sYmx7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg4ODtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbToycHh9CiAgLmluZm8taXRlbSAudmFse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWQyMzI3fQoKICAvKiDilIDilIAgU2xvdHMg4pSA4pSAICovCiAgLnRlYW0tc2xvdHtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTRweDttYXJnaW4tYm90dG9tOjEwcHg7YmFja2dyb3VuZDojZmFmYWZhO3Bvc2l0aW9uOnJlbGF0aXZlfQogIC50ZWFtLXNsb3QuY29vcmQtc2xvdHtib3JkZXItY29sb3I6IzdjM2FlZDtiYWNrZ3JvdW5kOiNmYWY1ZmZ9CiAgLnNsb3QtbGFiZWx7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM3YzNhZWQ7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi41cHg7bWFyZ2luLWJvdHRvbTo2cHh9CiAgLmNvb3JkLXNsb3QgLnNsb3QtbGFiZWx7Y29sb3I6IzZkMjhkOX0KICAuc2xvdC1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweH0KICAuc2xvdC1wYXJ0bmVyLW5hbWV7ZmxleDoxO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMWQyMzI3fQogIC5zbG90LXBhcnRuZXItbmFtZS5lbXB0eXtjb2xvcjojOWNhM2FmO2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OjQwMH0KICAuYnRuLWFsdGVyYXJ7YmFja2dyb3VuZDojZWRlOWZlO2NvbG9yOiM3YzNhZWQ7Ym9yZGVyOjFweCBzb2xpZCAjYzRiNWZkO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6NnB4IDEycHg7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyO3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4LXNocmluazowfQogIC5idG4tYWx0ZXJhcjpob3ZlcntiYWNrZ3JvdW5kOiNkZGQ2ZmV9CiAgLmJ1c3ktd2Fybntmb250LXNpemU6MTFweDtjb2xvcjojZjU5ZTBiO2JhY2tncm91bmQ6I2ZmZmJlYjtib3JkZXI6MXB4IHNvbGlkICNmZGU2OGE7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzozcHggN3B4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjo0cHggMH0KCiAgLyog4pSA4pSAIElubGluZSBzZWFyY2gg4pSA4pSAICovCiAgLnNlYXJjaC1wYW5lbHtkaXNwbGF5Om5vbmU7bWFyZ2luLXRvcDoxMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU3ZWI7cGFkZGluZy10b3A6MTBweH0KICAuc2VhcmNoLXBhbmVsLm9wZW57ZGlzcGxheTpibG9ja30KICAuc2VhcmNoLWlucHV0LXdyYXB7cG9zaXRpb246cmVsYXRpdmV9CiAgLnNlYXJjaC1pbnB1dC13cmFwIGlucHV0e3dpZHRoOjEwMCU7cGFkZGluZzo5cHggMTJweCA5cHggMzRweDtib3JkZXI6MS41cHggc29saWQgIzdjM2FlZDtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTRweDtvdXRsaW5lOm5vbmV9CiAgLnNlYXJjaC1pbnB1dC13cmFwIC5zZWFyY2gtaWNvbntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtmb250LXNpemU6MTZweDtjb2xvcjojOWNhM2FmfQogIC5zZWFyY2gtcmVzdWx0c3ttYXgtaGVpZ2h0OjIyMHB4O292ZXJmbG93LXk6YXV0bzttYXJnaW4tdG9wOjZweDtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDojZmZmfQogIC5zZWFyY2gtcmVzdWx0LWl0ZW17cGFkZGluZzo5cHggMTJweDtjdXJzb3I6cG9pbnRlcjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjNmNGY2O3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzfQogIC5zZWFyY2gtcmVzdWx0LWl0ZW06bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9CiAgLnNlYXJjaC1yZXN1bHQtaXRlbTpob3ZlcntiYWNrZ3JvdW5kOiNlZGU5ZmV9CiAgLnNlYXJjaC1yZXN1bHQtaXRlbSAuci1uYW1le2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMWQyMzI3fQogIC5zZWFyY2gtcmVzdWx0LWl0ZW0gLnItYXRyYWNhb3tmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6MXB4fQogIC5zZWFyY2gtbm8tcmVzdWx0c3twYWRkaW5nOjEwcHggMTJweDtmb250LXNpemU6MTNweDtjb2xvcjojOWNhM2FmO3RleHQtYWxpZ246Y2VudGVyfQogIC5idG4tY2FuY2VsLXNlYXJjaHttYXJnaW4tdG9wOjhweDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Y29sb3I6IzljYTNhZjtmb250LXNpemU6MTJweDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfQoKICAvKiDilIDilIAgT3V0cm9zIOKUgOKUgCAqLwogIC5taXNzaW5nLXNsb3R7Ym9yZGVyOjFweCBzb2xpZCAjZmNhNWE1O2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE0cHg7bWFyZ2luLWJvdHRvbToxMHB4O2JhY2tncm91bmQ6I2ZmZjVmNX0KICAubWlzc2luZy1zbG90IC5zbG90LWxhYmVse2NvbG9yOiNkYzI2MjZ9CiAgLm1pc3Npbmctc2xvdCAubXNne2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiNkYzI2MjZ9CiAgLmNvbmZpcm1lZC1iYW5uZXJ7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCNkY2ZjZTcsI2JiZjdkMCk7Ym9yZGVyOjFweCBzb2xpZCAjODZlZmFjO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNnB4fQogIC5jb25maXJtZWQtYmFubmVyIC5pY29ue2ZvbnQtc2l6ZTozMnB4O21hcmdpbi1ib3R0b206NnB4fQogIC5jb25maXJtZWQtYmFubmVyIC50aXRsZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzE1ODAzZH0KICAuY29uZmlybWVkLWJhbm5lciAuc3Vie2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiMxNjY1MzQ7bWFyZ2luLXRvcDo0cHh9CiAgLnNpbS1iYW5uZXJ7YmFja2dyb3VuZDojZmZmYmViO2JvcmRlcjoxcHggc29saWQgI2ZkZTY4YTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTJweDtjb2xvcjojOTI0MDBlO21hcmdpbi1ib3R0b206MTZweH0KICAuYnRuLWNvbmZpcm17d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIzdjM2FlZCwjNGY0NmU1KTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE1cHg7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyO21hcmdpbi10b3A6NHB4fQogIC5idG4tY29uZmlybTpob3ZlcntvcGFjaXR5Oi45Mn0KICAuYnRuLWNvbmZpcm06ZGlzYWJsZWR7b3BhY2l0eTouNTtjdXJzb3I6bm90LWFsbG93ZWR9CiAgLmJ0bi1hZGR7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjJweCBkYXNoZWQgIzdjM2FlZDtjb2xvcjojN2MzYWVkO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjEycHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyO21hcmdpbi1ib3R0b206MTJweH0KICAuYnRuLWFkZDpob3ZlcntiYWNrZ3JvdW5kOiNmYWY1ZmZ9CiAgLmludmFsaWQtY2FyZHt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjQwcHggMjBweH0KICAuaW52YWxpZC1jYXJkIC5pY29ue2ZvbnQtc2l6ZTo0OHB4O21hcmdpbi1ib3R0b206MTJweH0KICAuaW52YWxpZC1jYXJkIHB7Y29sb3I6IzY2Njtmb250LXNpemU6MTRweH0KICAuc2xvdC1yZW1vdmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwcHg7cmlnaHQ6MTBweDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE2cHg7Y29sb3I6I2VmNDQ0NDtsaW5lLWhlaWdodDoxfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IGNsYXNzPSJ0b3AtYmFyIj4KICA8ZGl2PgogICAgPGRpdiBjbGFzcz0ibG9nbyI+8J+OrCBWaXZhTWFpczwvZGl2PgogICAgPGRpdiBjbGFzcz0ic3ViIj5Db25maXJtYcOnw6NvIGRlIEVxdWlwZTwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KPD9waHAgaWYgKCEkdG9rZW4gfHwgISR0ZWFtX3Jvdyk6ID8+CiAgPGRpdiBjbGFzcz0iY2FyZCBpbnZhbGlkLWNhcmQiPgogICAgPGRpdiBjbGFzcz0iaWNvbiI+8J+UkjwvZGl2PgogICAgPGgyIHN0eWxlPSJtYXJnaW4tYm90dG9tOjhweCI+TGluayBpbnbDoWxpZG8gb3UgZXhwaXJhZG88L2gyPgogICAgPHA+RXN0ZSBsaW5rIGRlIGNvbmZpcm1hw6fDo28gw6kgaW52w6FsaWRvLjxicj5Tb2xpY2l0ZSB1bSBub3ZvIGxpbmsgcGVsbyBXaGF0c0FwcC48L3A+CiAgPC9kaXY+Cjw/cGhwIGVsc2VpZiAoJHN0YXR1cyA9PT0gJ2NvbmZpcm1lZCcpOiA/PgogIDxkaXYgY2xhc3M9ImNvbmZpcm1lZC1iYW5uZXIiPgogICAgPGRpdiBjbGFzcz0iaWNvbiI+4pyFPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+RXF1aXBlIGrDoSBjb25maXJtYWRhITwvZGl2PgogICAgPGRpdiBjbGFzcz0ic3ViIj5Db25maXJtYWRvIGVtIDw/cGhwIGVjaG8gJHRlYW1fcm93LT5jb25maXJtZWRfYXQgPyB3cF9kYXRlKCdkL20vWSBIOmknLCBzdHJ0b3RpbWUoJHRlYW1fcm93LT5jb25maXJtZWRfYXQpKSA6ICfigJQnOyA/PjwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgPGgyPvCfk4sgUmVzdW1vIGRvIDw/cGhwIGVjaG8gZXNjX2h0bWwoJG9yZGVyX2xhYmVsKTsgPz48L2gyPgogICAgPGRpdiBjbGFzcz0iaW5mby1ncmlkIj4KICAgICAgPGRpdiBjbGFzcz0iaW5mby1pdGVtIj48ZGl2IGNsYXNzPSJsYmwiPvCfk4UgRGF0YSBkbyBFdmVudG88L2Rpdj48ZGl2IGNsYXNzPSJ2YWwiPjw/cGhwIGVjaG8gJGV2ZW50X2RhdGU7ID8+PC9kaXY+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8taXRlbSI+PGRpdiBjbGFzcz0ibGJsIj7wn5GkIENsaWVudGU8L2Rpdj48ZGl2IGNsYXNzPSJ2YWwiPjw/cGhwIGVjaG8gJGNsaWVudDsgPz48L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgPGgyPvCfjqogRXF1aXBlIENvbmZpcm1hZGE8L2gyPgogICAgPD9waHAgZm9yZWFjaCAoJHRlYW1fZGF0YSBhcyAkdCk6ID8+CiAgICA8ZGl2IGNsYXNzPSJ0ZWFtLXNsb3QiPgogICAgICA8ZGl2IGNsYXNzPSJzbG90LWxhYmVsIj48P3BocCBlY2hvIGVzY19odG1sKCR0WydjYXRfbmFtZSddID8/ICcnKTsgPz48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2xvdC1yb3ciPjxkaXYgY2xhc3M9InNsb3QtcGFydG5lci1uYW1lIj7wn46tIDw/cGhwIGVjaG8gZXNjX2h0bWwoJHRbJ3BhcnRuZXJfbmFtZSddID8/ICfigJQnKTsgPz48L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICA8L2Rpdj4KPD9waHAgZWxzZTogPz4KICA8P3BocCBpZiAoJGlzX3NpbSk6ID8+PGRpdiBjbGFzcz0ic2ltLWJhbm5lciI+8J+nqiA8c3Ryb25nPlNpbXVsYcOnw6NvPC9zdHJvbmc+IOKAlCBFc3RlIGxpbmsgZm9pIGdlcmFkbyBjb21vIHRlc3RlLjwvZGl2Pjw/cGhwIGVuZGlmOyA/PgogIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgPGgyPvCfk4sgPD9waHAgaWYgKCRvcmRlcl9pZCAmJiAhJGlzX3NpbSk6ID8+PGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKGhvbWVfdXJsKCcvZWxlbmNvLXZpdmFtYWlzLz90b2tlbj0nLiR0b2tlbi4nJnZpZXc9b3JkZXInKSk7ID8+IiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ym9yZGVyLWJvdHRvbToxLjVweCBkYXNoZWQgIzdjM2FlZDtjdXJzb3I6cG9pbnRlciIgdGl0bGU9IlZlciBkZXRhbGhlcyBkbyBwZWRpZG8iPjw/cGhwIGVjaG8gZXNjX2h0bWwoJG9yZGVyX2xhYmVsKTsgPz4gPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij7wn5SNPC9zcGFuPjwvYT48P3BocCBlbHNlOiBlY2hvIGVzY19odG1sKCRvcmRlcl9sYWJlbCk7IGVuZGlmOyA/PjwvaDI+CiAgICA8ZGl2IGNsYXNzPSJpbmZvLWdyaWQiPgogICAgICA8ZGl2IGNsYXNzPSJpbmZvLWl0ZW0iPjxkaXYgY2xhc3M9ImxibCI+8J+ThSBEYXRhIGRvIEV2ZW50bzwvZGl2PjxkaXYgY2xhc3M9InZhbCI+PD9waHAgZWNobyAkZXZlbnRfZGF0ZTsgPz48L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaW5mby1pdGVtIj48ZGl2IGNsYXNzPSJsYmwiPvCfkaQgQ2xpZW50ZTwvZGl2PjxkaXYgY2xhc3M9InZhbCI+PD9waHAgZWNobyAkY2xpZW50OyA/PjwvZGl2PjwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgPGgyPvCfjqogRXF1aXBlIFN1Z2VyaWRhIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7Y29sb3I6Izg4OCI+KGFsdGVyZSBzZSBuZWNlc3PDoXJpbyk8L3NwYW4+PC9oMj4KCiAgICA8P3BocAogICAgLy8gVmVyaWZpY2FyIHNlIGrDoSBow6EgY29vcmRlbmFkb3Igbm8gdGVhbV9kYXRhCiAgICAkY29vcmRfcGFydG5lcl9pZCAgID0gMDsKICAgICRjb29yZF9wYXJ0bmVyX25hbWUgPSAnJzsKICAgICRjb29yZF9rZXkgICAgICAgICAgPSBudWxsOwogICAgZm9yZWFjaCAoJHRlYW1fZGF0YSBhcyAkayA9PiAkdCkgewogICAgICAgICRjbiA9IHN0cnRvbG93ZXIoJHRbJ2NhdF9uYW1lJ10gPz8gJycpOwogICAgICAgIGlmIChzdHJwb3MoJGNuLCAnY29vcmQnKSAhPT0gZmFsc2UgfHwgJGsgPT09ICdjb29yZF9maXhlZCcpIHsKICAgICAgICAgICAgJGNvb3JkX2tleSAgICAgICAgICA9ICRrOwogICAgICAgICAgICAkY29vcmRfcGFydG5lcl9pZCAgID0gKGludCkoJHRbJ3BhcnRuZXJfaWQnXSA/PyAwKTsKICAgICAgICAgICAgJGNvb3JkX3BhcnRuZXJfbmFtZSA9ICR0WydwYXJ0bmVyX25hbWUnXSA/PyAnJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgPz4KICAgIDwhLS0gU2xvdCBmaXhvIGRlIENvb3JkZW5hZG9yIOKAlCBzZW1wcmUgdmlzw612ZWwgLS0+CiAgICA8ZGl2IGNsYXNzPSJ0ZWFtLXNsb3QgY29vcmQtc2xvdCIgZGF0YS1rZXk9ImNvb3JkX2ZpeGVkIiBkYXRhLXBhcnRuZXItaWQ9Ijw/cGhwIGVjaG8gJGNvb3JkX3BhcnRuZXJfaWQ7ID8+Ij4KICAgICAgPGRpdiBjbGFzcz0ic2xvdC1sYWJlbCI+8J+RkSBDb29yZGVuYWRvcjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzbG90LXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xvdC1wYXJ0bmVyLW5hbWUgPD9waHAgZWNobyAkY29vcmRfcGFydG5lcl9uYW1lID8gJycgOiAnZW1wdHknOyA/PiIgaWQ9Im5hbWUtY29vcmRfZml4ZWQiPgogICAgICAgICAgPD9waHAgZWNobyAkY29vcmRfcGFydG5lcl9uYW1lID8gJ/Cfjq0gJyAuIGVzY19odG1sKCRjb29yZF9wYXJ0bmVyX25hbWUpIDogJ07Do28gYXRyaWJ1w61kbyDigJQgY2xpcXVlIGVtIEFsdGVyYXInOyA/PgogICAgICAgIDwvZGl2PgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0bi1hbHRlcmFyIiBvbmNsaWNrPSJ2bTJPcGVuU2VhcmNoKCdjb29yZF9maXhlZCcpIj7wn5SNIEFsdGVyYXI8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlYXJjaC1wYW5lbCIgaWQ9InNlYXJjaC1jb29yZF9maXhlZCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoLWlucHV0LXdyYXAiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InNlYXJjaC1pY29uIj7wn5SNPC9zcGFuPgogICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJCdXNjYXIgY29vcmRlbmFkb3IgcGVsbyBub21lLi4uIiBvbmlucHV0PSJ2bTJGaWx0ZXJTZWFyY2goJ2Nvb3JkX2ZpeGVkJywgdGhpcy52YWx1ZSkiIGF1dG9jb21wbGV0ZT0ib2ZmIj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtcmVzdWx0cyIgaWQ9InJlc3VsdHMtY29vcmRfZml4ZWQiPjwvZGl2PgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0bi1jYW5jZWwtc2VhcmNoIiBvbmNsaWNrPSJ2bTJDbG9zZVNlYXJjaCgnY29vcmRfZml4ZWQnKSI+4pyVIENhbmNlbGFyPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBTbG90cyBkbyB0ZWFtX2RhdGEgKGV4Y2x1aW5kbyBxdWFscXVlciBjb29yZGVuYWRvciBqw6EgcHJlc2VudGUpIC0tPgogICAgPGRpdiBpZD0idGVhbS1zbG90cyI+CiAgICA8P3BocCBmb3JlYWNoICgkdGVhbV9kYXRhIGFzICRjYXRfaWQgPT4gJHQpOgogICAgICAgICRjbiA9IHN0cnRvbG93ZXIoJHRbJ2NhdF9uYW1lJ10gPz8gJycpOwogICAgICAgIGlmIChzdHJwb3MoJGNuLCAnY29vcmQnKSAhPT0gZmFsc2UgfHwgJGNhdF9pZCA9PT0gJ2Nvb3JkX2ZpeGVkJykgY29udGludWU7CiAgICAgICAgJHBpZCAgPSAoaW50KSgkdFsncGFydG5lcl9pZCddID8/IDApOwogICAgICAgICRwbmFtZSA9IGVzY19odG1sKCR0WydwYXJ0bmVyX25hbWUnXSA/PyAn4oCUJyk7CiAgICA/PgogICAgPGRpdiBjbGFzcz0idGVhbS1zbG90IiBkYXRhLWtleT0iPD9waHAgZWNobyBlc2NfYXR0cigkY2F0X2lkKTsgPz4iIGRhdGEtcGFydG5lci1pZD0iPD9waHAgZWNobyAkcGlkOyA/PiI+CiAgICAgIDxkaXYgY2xhc3M9InNsb3QtbGFiZWwiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHRbJ2NhdF9uYW1lJ10gPz8gJycpOyA/PjwvZGl2PgogICAgICA8P3BocCBpZiAoIWVtcHR5KCR0Wydpc19idXN5J10pKTogPz48ZGl2IGNsYXNzPSJidXN5LXdhcm4iPuKaoO+4jyBKw6EgdGVtIGV2ZW50byBuZXNzZSBkaWE8L2Rpdj48P3BocCBlbmRpZjsgPz4KICAgICAgPGRpdiBjbGFzcz0ic2xvdC1yb3ciPgogICAgICAgIDxkaXYgY2xhc3M9InNsb3QtcGFydG5lci1uYW1lIiBpZD0ibmFtZS08P3BocCBlY2hvIGVzY19hdHRyKCRjYXRfaWQpOyA/PiI+8J+OrSA8P3BocCBlY2hvICRwbmFtZTsgPz48L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4tYWx0ZXJhciIgb25jbGljaz0idm0yT3BlblNlYXJjaCgnPD9waHAgZWNobyBlc2NfYXR0cigkY2F0X2lkKTsgPz4nKSI+8J+UjSBBbHRlcmFyPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtcGFuZWwiIGlkPSJzZWFyY2gtPD9waHAgZWNobyBlc2NfYXR0cigkY2F0X2lkKTsgPz4iPgogICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaC1pbnB1dC13cmFwIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWFyY2gtaWNvbiI+8J+UjTwvc3Bhbj4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iQnVzY2FyIHBlbG8gbm9tZS4uLiIgb25pbnB1dD0idm0yRmlsdGVyU2VhcmNoKCc8P3BocCBlY2hvIGVzY19hdHRyKCRjYXRfaWQpOyA/PicsIHRoaXMudmFsdWUpIiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoLXJlc3VsdHMiIGlkPSJyZXN1bHRzLTw/cGhwIGVjaG8gZXNjX2F0dHIoJGNhdF9pZCk7ID8+Ij48L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4tY2FuY2VsLXNlYXJjaCIgb25jbGljaz0idm0yQ2xvc2VTZWFyY2goJzw/cGhwIGVjaG8gZXNjX2F0dHIoJGNhdF9pZCk7ID8+JykiPuKclSBDYW5jZWxhcjwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgIDwvZGl2PgoKICAgIDw/cGhwIGZvcmVhY2ggKCRtaXNzaW5nX2RhdGEgYXMgJG0pOgogICAgICAgICRtbmFtZSA9IGlzX2FycmF5KCRtKSA/ICRtWyduYW1lJ10gOiAkbTsgPz4KICAgIDxkaXYgY2xhc3M9Im1pc3Npbmctc2xvdCI+CiAgICAgIDxkaXYgY2xhc3M9InNsb3QtbGFiZWwiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJG1uYW1lKTsgPz48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibXNnIj7imqDvuI8gTmVuaHVtIHBhcmNlaXJvIGNhZGFzdHJhZG8uIENhZGFzdHJlIGVtIFZpdmFNYWlzIDIuMCDihpIgUGFyY2Vpcm9zLjwvZGl2PgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgoKICAgIDxkaXYgaWQ9ImV4dHJhLXNsb3RzIj48L2Rpdj4KICA8L2Rpdj4KCiAgPGJ1dHRvbiBjbGFzcz0iYnRuLWFkZCIgb25jbGljaz0idm0yQWRkU2xvdCgpIj7vvIsgQWRpY2lvbmFyIFBhcmNlaXJvPC9idXR0b24+CiAgPGJ1dHRvbiBjbGFzcz0iYnRuLWNvbmZpcm0iIGlkPSJidG4tY29uZmlybSIgb25jbGljaz0idm0yQ29uZmlybVRlYW0oKSI+4pyFIENvbmZpcm1hciBFcXVpcGU8L2J1dHRvbj4KICA8ZGl2IGlkPSJjb25maXJtLW1zZyIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6MTJweDtmb250LXNpemU6MTRweDttaW4taGVpZ2h0OjIwcHgiPjwvZGl2Pgo8P3BocCBlbmRpZjsgPz4KPC9kaXY+Cgo8c2NyaXB0Pgp2YXIgdm0yQWpheFVybCAgICAgPSA8P3BocCBlY2hvIHdwX2pzb25fZW5jb2RlKCRhamF4X3VybCk7ID8+Owp2YXIgdm0yVG9rZW4gICAgICAgPSA8P3BocCBlY2hvIHdwX2pzb25fZW5jb2RlKCR0b2tlbik7ID8+Owp2YXIgdm0yQWxsUGFydG5lcnMgPSA8P3BocCBlY2hvICRwYXJ0bmVyc19qczsgPz47CnZhciB2bTJUZWFtRGF0YSAgICA9IEpTT04ucGFyc2UoPD9waHAgZWNobyB3cF9qc29uX2VuY29kZSh3cF9qc29uX2VuY29kZSgkdGVhbV9kYXRhKSk7ID8+KTsKCi8vIEVzdGFkbzoga2V5IOKGkiB7cGFydG5lcklkLCBwYXJ0bmVyTmFtZX0KdmFyIHZtMlNsb3RTdGF0ZSA9IHt9OwoKKGZ1bmN0aW9uKCkgewogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRlYW0tc2xvdFtkYXRhLWtleV0nKS5mb3JFYWNoKGZ1bmN0aW9uKHNsb3QpIHsKICAgICAgICB2YXIga2V5ID0gc2xvdC5kYXRhc2V0LmtleTsKICAgICAgICB2YXIgcGlkID0gcGFyc2VJbnQoc2xvdC5kYXRhc2V0LnBhcnRuZXJJZCkgfHwgMDsKICAgICAgICB2YXIgbmFtZUVsID0gc2xvdC5xdWVyeVNlbGVjdG9yKCcuc2xvdC1wYXJ0bmVyLW5hbWUnKTsKICAgICAgICB2YXIgbmFtZSA9IG5hbWVFbCA/IG5hbWVFbC50ZXh0Q29udGVudC5yZXBsYWNlKC9e8J+OrVxzKi8sICcnKS50cmltKCkgOiAnJzsKICAgICAgICB2bTJTbG90U3RhdGVba2V5XSA9IHsgcGFydG5lcklkOiBwaWQsIHBhcnRuZXJOYW1lOiBuYW1lIH07CiAgICB9KTsKfSkoKTsKCi8vIOKUgOKUgCBCdXNjYSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmZ1bmN0aW9uIHZtMk9wZW5TZWFyY2goa2V5KSB7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2VhcmNoLXBhbmVsLm9wZW4nKS5mb3JFYWNoKGZ1bmN0aW9uKHApIHsKICAgICAgICBpZiAocC5pZCAhPT0gJ3NlYXJjaC0nICsga2V5KSBwLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKICAgIH0pOwogICAgdmFyIHBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlYXJjaC0nICsga2V5KTsKICAgIGlmICghcGFuZWwpIHJldHVybjsKICAgIHBhbmVsLmNsYXNzTGlzdC5hZGQoJ29wZW4nKTsKICAgIHZhciBpbnB1dCA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7CiAgICBpZiAoaW5wdXQpIHsgaW5wdXQudmFsdWUgPSAnJzsgaW5wdXQuZm9jdXMoKTsgfQogICAgdm0yRmlsdGVyU2VhcmNoKGtleSwgJycpOwp9CgpmdW5jdGlvbiB2bTJDbG9zZVNlYXJjaChrZXkpIHsKICAgIHZhciBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWFyY2gtJyArIGtleSk7CiAgICBpZiAocGFuZWwpIHBhbmVsLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsKfQoKZnVuY3Rpb24gdm0yRmlsdGVyU2VhcmNoKGtleSwgcXVlcnkpIHsKICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0cy0nICsga2V5KTsKICAgIGlmICghY29udGFpbmVyKSByZXR1cm47CiAgICB2YXIgcSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKCkudHJpbSgpOwogICAgdmFyIGZpbHRlcmVkID0gcQogICAgICAgID8gdm0yQWxsUGFydG5lcnMuZmlsdGVyKGZ1bmN0aW9uKHApIHsKICAgICAgICAgICAgcmV0dXJuIHAubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YocSkgPj0gMCB8fAogICAgICAgICAgICAgICAgICAgKHAuYXRyYWNhbyAmJiBwLmF0cmFjYW8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHEpID49IDApOwogICAgICAgICAgfSkKICAgICAgICA6IHZtMkFsbFBhcnRuZXJzLnNsaWNlKDAsIDMwKTsKCiAgICBpZiAoIWZpbHRlcmVkLmxlbmd0aCkgewogICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0ic2VhcmNoLW5vLXJlc3VsdHMiPk5lbmh1bSBwYXJjZWlybyBlbmNvbnRyYWRvPC9kaXY+JzsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gZmlsdGVyZWQuc2xpY2UoMCwgNTApLm1hcChmdW5jdGlvbihwKSB7CiAgICAgICAgdmFyIHNhZmVOYW1lID0gcC5uYW1lLnJlcGxhY2UoL1xcL2csJ1xcXFwnKS5yZXBsYWNlKC8nL2csIlxcJyIpOwogICAgICAgIHZhciBhdHIgPSBwLmF0cmFjYW8gPyAnPGRpdiBjbGFzcz0ici1hdHJhY2FvIj4nICsgdm0yZXNjKHAuYXRyYWNhbykgKyAnPC9kaXY+JyA6ICcnOwogICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0ic2VhcmNoLXJlc3VsdC1pdGVtIiBvbmNsaWNrPSJ2bTJTZWxlY3RQYXJ0bmVyKFwnJyArIGtleSArICdcJywnICsgcC5pZCArICcsXCcnICsgc2FmZU5hbWUgKyAnXCcpIj4nICsKICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InItbmFtZSI+JyArIHZtMmVzYyhwLm5hbWUpICsgJzwvZGl2PicgKyBhdHIgKyAnPC9kaXY+JzsKICAgIH0pLmpvaW4oJycpOwp9CgpmdW5jdGlvbiB2bTJTZWxlY3RQYXJ0bmVyKGtleSwgcGlkLCBwbmFtZSkgewogICAgdm0yU2xvdFN0YXRlW2tleV0gPSB7IHBhcnRuZXJJZDogcGlkLCBwYXJ0bmVyTmFtZTogcG5hbWUgfTsKICAgIHZhciBuYW1lRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmFtZS0nICsga2V5KTsKICAgIGlmIChuYW1lRWwpIHsKICAgICAgICBuYW1lRWwudGV4dENvbnRlbnQgPSAn8J+OrSAnICsgcG5hbWU7CiAgICAgICAgbmFtZUVsLmNsYXNzTGlzdC5yZW1vdmUoJ2VtcHR5Jyk7CiAgICB9CiAgICB2YXIgc2xvdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50ZWFtLXNsb3RbZGF0YS1rZXk9IicgKyBrZXkgKyAnIl0nKTsKICAgIGlmIChzbG90KSBzbG90LmRhdGFzZXQucGFydG5lcklkID0gcGlkOwogICAgdm0yQ2xvc2VTZWFyY2goa2V5KTsKfQoKZnVuY3Rpb24gdm0yZXNjKHN0cikgewogICAgcmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UoLyYvZywnJmFtcDsnKS5yZXBsYWNlKC88L2csJyZsdDsnKS5yZXBsYWNlKC8+L2csJyZndDsnKS5yZXBsYWNlKC8iL2csJyZxdW90OycpOwp9CgovLyDilIDilIAgQWRpY2lvbmFyIHNsb3QgZXh0cmEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgp2YXIgdm0yRXh0cmFDb3VudCA9IDA7CgpmdW5jdGlvbiB2bTJBZGRTbG90KCkgewogICAgdm0yRXh0cmFDb3VudCsrOwogICAgdmFyIGtleSA9ICdleHRyYV8nICsgdm0yRXh0cmFDb3VudDsKICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXh0cmEtc2xvdHMnKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGRpdi5jbGFzc05hbWUgPSAndGVhbS1zbG90JzsKICAgIGRpdi5kYXRhc2V0LmtleSA9IGtleTsKICAgIGRpdi5kYXRhc2V0LnBhcnRuZXJJZCA9ICcwJzsKICAgIGRpdi5zdHlsZS5ib3JkZXJDb2xvciA9ICcjYzRiNWZkJzsKICAgIGRpdi5pbm5lckhUTUwgPQogICAgICAgICc8YnV0dG9uIGNsYXNzPSJzbG90LXJlbW92ZSIgb25jbGljaz0idGhpcy5jbG9zZXN0KFwnLnRlYW0tc2xvdFwnKS5yZW1vdmUoKTtkZWxldGUgdm0yU2xvdFN0YXRlW1wnJyArIGtleSArICdcJ10iPuKclTwvYnV0dG9uPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJzbG90LWxhYmVsIiBzdHlsZT0iY29sb3I6IzdjM2FlZCI+4p6VIFBhcmNlaXJvIEFkaWNpb25hbDwvZGl2PicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJzbG90LXJvdyI+JyArCiAgICAgICAgICAnPGRpdiBjbGFzcz0ic2xvdC1wYXJ0bmVyLW5hbWUgZW1wdHkiIGlkPSJuYW1lLScgKyBrZXkgKyAnIj5OZW5odW0gc2VsZWNpb25hZG88L2Rpdj4nICsKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4tYWx0ZXJhciIgb25jbGljaz0idm0yT3BlblNlYXJjaChcJycgKyBrZXkgKyAnXCcpIj7wn5SNIEJ1c2NhcjwvYnV0dG9uPicgKwogICAgICAgICc8L2Rpdj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0ic2VhcmNoLXBhbmVsIiBpZD0ic2VhcmNoLScgKyBrZXkgKyAnIj4nICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJzZWFyY2gtaW5wdXQtd3JhcCI+PHNwYW4gY2xhc3M9InNlYXJjaC1pY29uIj7wn5SNPC9zcGFuPicgKwogICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iQnVzY2FyIHBlbG8gbm9tZS4uLiIgb25pbnB1dD0idm0yRmlsdGVyU2VhcmNoKFwnJyArIGtleSArICdcJywgdGhpcy52YWx1ZSkiIGF1dG9jb21wbGV0ZT0ib2ZmIj48L2Rpdj4nICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJzZWFyY2gtcmVzdWx0cyIgaWQ9InJlc3VsdHMtJyArIGtleSArICciPjwvZGl2PicgKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0bi1jYW5jZWwtc2VhcmNoIiBvbmNsaWNrPSJ2bTJDbG9zZVNlYXJjaChcJycgKyBrZXkgKyAnXCcpIj7inJUgQ2FuY2VsYXI8L2J1dHRvbj4nICsKICAgICAgICAnPC9kaXY+JzsKICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkaXYpOwogICAgdm0yU2xvdFN0YXRlW2tleV0gPSB7IHBhcnRuZXJJZDogMCwgcGFydG5lck5hbWU6ICcnIH07CiAgICB2bTJPcGVuU2VhcmNoKGtleSk7Cn0KCi8vIOKUgOKUgCBDb25maXJtYXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgpmdW5jdGlvbiB2bTJDb25maXJtVGVhbSgpIHsKICAgIHZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLWNvbmZpcm0nKTsKICAgIHZhciBtc2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uZmlybS1tc2cnKTsKICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7IGJ0bi50ZXh0Q29udGVudCA9ICdDb25maXJtYW5kby4uLic7CgogICAgdmFyIHVwZGF0ZWRUZWFtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2bTJUZWFtRGF0YSkpOwoKICAgIE9iamVjdC5rZXlzKHZtMlNsb3RTdGF0ZSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKICAgICAgICB2YXIgcyA9IHZtMlNsb3RTdGF0ZVtrZXldOwogICAgICAgIGlmICghcy5wYXJ0bmVySWQpIHJldHVybjsKICAgICAgICBpZiAodXBkYXRlZFRlYW1ba2V5XSkgewogICAgICAgICAgICB1cGRhdGVkVGVhbVtrZXldLnBhcnRuZXJfaWQgICA9IHMucGFydG5lcklkOwogICAgICAgICAgICB1cGRhdGVkVGVhbVtrZXldLnBhcnRuZXJfbmFtZSA9IHMucGFydG5lck5hbWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGNhdE5hbWUgPSBrZXkgPT09ICdjb29yZF9maXhlZCcgPyAnQ29vcmRlbmFkb3InCiAgICAgICAgICAgICAgICAgICAgICAgIDogKGtleS5zdGFydHNXaXRoKCdleHRyYV8nKSA/ICdQYXJjZWlybyBBZGljaW9uYWwnIDoga2V5KTsKICAgICAgICAgICAgdXBkYXRlZFRlYW1ba2V5XSA9IHsKICAgICAgICAgICAgICAgIGNhdF9pZDoga2V5LCBjYXRfbmFtZTogY2F0TmFtZSwKICAgICAgICAgICAgICAgIHBhcnRuZXJfaWQ6IHMucGFydG5lcklkLCBwYXJ0bmVyX25hbWU6IHMucGFydG5lck5hbWUsIGlzX2V4dHJhOiB0cnVlCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfSk7CgogICAgLy8gUmVtb3ZlciBleHRyYXMgZGVsZXRhZG9zIGRvIERPTQogICAgT2JqZWN0LmtleXModXBkYXRlZFRlYW0pLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCdleHRyYV8nKSAmJiAhdm0yU2xvdFN0YXRlW2tleV0pIGRlbGV0ZSB1cGRhdGVkVGVhbVtrZXldOwogICAgfSk7CgogICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICBmZC5hcHBlbmQoJ2FjdGlvbicsICd2bTJfY29uZmlybV9lbGVuY28nKTsKICAgIGZkLmFwcGVuZCgndG9rZW4nLCB2bTJUb2tlbik7CiAgICBmZC5hcHBlbmQoJ3RlYW1fanNvbicsIEpTT04uc3RyaW5naWZ5KHVwZGF0ZWRUZWFtKSk7CiAgICBmZC5hcHBlbmQoJ2NvbmZpcm1lZF9ieScsICdhZG1pbl93YV9saW5rJyk7CgogICAgZmV0Y2godm0yQWpheFVybCwge21ldGhvZDonUE9TVCcsIGJvZHk6ZmR9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzKSB7CiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgewogICAgICAgICAgICAgICAgbXNnLnN0eWxlLmNvbG9yID0gJyMxNmEzNGEnOwogICAgICAgICAgICAgICAgbXNnLnRleHRDb250ZW50ID0gJ+KchSBFcXVpcGUgY29uZmlybWFkYSBjb20gc3VjZXNzbyEnOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyBsb2NhdGlvbi5yZWxvYWQoKTsgfSwgMTIwMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsgYnRuLnRleHRDb250ZW50ID0gJ+KchSBDb25maXJtYXIgRXF1aXBlJzsKICAgICAgICAgICAgICAgIG1zZy5zdHlsZS5jb2xvciA9ICcjZGMyNjI2JzsKICAgICAgICAgICAgICAgIG1zZy50ZXh0Q29udGVudCA9ICfinYwgRXJybyBhbyBjb25maXJtYXIuIFRlbnRlIG5vdmFtZW50ZS4nOwogICAgICAgICAgICB9CiAgICAgICAgfSk7Cn0KPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo8P3BocAp9CgoKLy8g4pSA4pSAIFDDoWdpbmEgZGUgZGV0YWxoZXMgZG8gcGVkaWRvICh2MS41LjE3Mikg4pSA4pSACmZ1bmN0aW9uIHZtMl9lbGVuY29fcmVuZGVyX29yZGVyX2RldGFpbHMoJHRlYW1fcm93LCAkdG9rZW4pIHsKICAgICRvcmRlcl9pZCA9IChpbnQpJHRlYW1fcm93LT5vcmRlcl9pZDsKICAgICRvcmRlciAgICA9IHdjX2dldF9vcmRlcigkb3JkZXJfaWQpOwoKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnKTsKICAgID8+PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InB0LUJSIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlBlZGlkbyAjPD9waHAgZWNobyAkb3JkZXJfaWQ7ID8+IMK3IFZpdmFNYWlzPC90aXRsZT4KPHN0eWxlPgogICp7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MH0KICBib2R5e2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsc2Fucy1zZXJpZjtiYWNrZ3JvdW5kOiNmM2Y0ZjY7bWluLWhlaWdodDoxMDB2aH0KICAudG9wLWJhcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIzdjM2FlZCwjNGY0NmU1KTtjb2xvcjojZmZmO3BhZGRpbmc6MTZweCAyMHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59CiAgLnRvcC1iYXIgLmxvZ297Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6ODAwfQogIC50b3AtYmFyIC5zdWJ7Zm9udC1zaXplOjEzcHg7b3BhY2l0eTouODttYXJnaW4tdG9wOjJweH0KICAuYmFjay1idG57YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4yKTtjb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzo3cHggMTRweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwfQogIC5iYWNrLWJ0bjpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfQogIC5jb250YWluZXJ7bWF4LXdpZHRoOjY4MHB4O21hcmdpbjowIGF1dG87cGFkZGluZzoyMHB4IDE2cHggNjBweH0KICAuY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjBweDttYXJnaW4tYm90dG9tOjE2cHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMDgpfQogIC5jYXJkLXRpdGxle2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOjE0cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmM2Y0ZjY7cGFkZGluZy1ib3R0b206MTBweH0KICAuaW5mby1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTBweH0KICAuaW5mby1pdGVte2JhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEwcHh9CiAgLmluZm8taXRlbSAubGJse2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4ODg7Zm9udC13ZWlnaHQ6NjAwO21hcmdpbi1ib3R0b206M3B4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouNHB4fQogIC5pbmZvLWl0ZW0gLnZhbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzFkMjMyNzt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9CiAgLmluZm8taXRlbSAudmFsLmJpZ3tmb250LXNpemU6MThweH0KICAuc3RhdHVzLWJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoxMnB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMH0KICAuc3RhdHVzLWNvbnRyYWN0LXNpZ25lZCwuc3RhdHVzLXByb2Nlc3Npbmd7YmFja2dyb3VuZDojZGNmY2U3O2NvbG9yOiMxNTgwM2R9CiAgLnN0YXR1cy1vbi1ob2xkLC5zdGF0dXMtc2lnbmluZy1wZW5kaW5ne2JhY2tncm91bmQ6I2ZlZjljMztjb2xvcjojODU0ZDBlfQogIC5zdGF0dXMtY2FuY2VsbGVkLC5zdGF0dXMtcmVmdW5kZWR7YmFja2dyb3VuZDojZmVlMmUyO2NvbG9yOiNkYzI2MjZ9CiAgLnN0YXR1cy1wZW5kaW5ne2JhY2tncm91bmQ6I2YzZjRmNjtjb2xvcjojNmI3MjgwfQogIC5pdGVtcy10YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MTNweDttYXJnaW4tdG9wOjRweH0KICAuaXRlbXMtdGFibGUgdGh7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmc6OHB4IDEwcHg7YmFja2dyb3VuZDojZjlmYWZiO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojNTU1O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouNHB4fQogIC5pdGVtcy10YWJsZSB0ZHtwYWRkaW5nOjlweCAxMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmM2Y0ZjZ9CiAgLml0ZW1zLXRhYmxlIHRyOmxhc3QtY2hpbGQgdGR7Ym9yZGVyLWJvdHRvbTpub25lfQogIC5pdGVtLW5hbWV7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxZDIzMjd9CiAgLml0ZW0tbWV0YXtmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6MnB4fQogIC50b3RhbC1yb3d7YmFja2dyb3VuZDojZjlmYWZiO2ZvbnQtd2VpZ2h0OjcwMH0KICAudG90YWwtcm93IHRke3BhZGRpbmc6MTBweDtmb250LXNpemU6MTRweH0KICAudG90YWwtcm93IC50b3RhbC12YWx7Y29sb3I6IzdjM2FlZDtmb250LXNpemU6MTZweH0KICAubm90ZS1ib3h7YmFja2dyb3VuZDojZmZmYmViO2JvcmRlcjoxcHggc29saWQgI2ZkZTY4YTtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6Izc4MzUwZjt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0KICAudGVhbS1zdW1tYXJ5e2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM1NTU7bGluZS1oZWlnaHQ6MS43fQogIC50ZWFtLXN1bW1hcnkgc3BhbntkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kOiNlZGU5ZmU7Y29sb3I6IzdjM2FlZDtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjJweCA4cHg7bWFyZ2luOjJweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDB9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxkaXYgY2xhc3M9InRvcC1iYXIiPgogIDxkaXY+CiAgICA8ZGl2IGNsYXNzPSJsb2dvIj7wn46sIFZpdmFNYWlzPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzdWIiPlBlZGlkbyAjPD9waHAgZWNobyAkb3JkZXJfaWQ7ID8+PC9kaXY+CiAgPC9kaXY+CiAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKGhvbWVfdXJsKCcvZWxlbmNvLXZpdmFtYWlzLz90b2tlbj0nIC4gJHRva2VuKSk7ID8+IiBjbGFzcz0iYmFjay1idG4iPuKGkCBWb2x0YXIgw6AgRXF1aXBlPC9hPgo8L2Rpdj4KPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KCjw/cGhwIGlmICghJG9yZGVyKTogPz4KICA8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0MHB4Ij4KICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo0MHB4O21hcmdpbi1ib3R0b206MTJweCI+4pqg77iPPC9kaXY+CiAgICA8aDIgc3R5bGU9Im1hcmdpbi1ib3R0b206OHB4Ij5QZWRpZG8gbsOjbyBlbmNvbnRyYWRvPC9oMj4KICAgIDxwIHN0eWxlPSJjb2xvcjojNjY2Ij5QZWRpZG8gIzw/cGhwIGVjaG8gJG9yZGVyX2lkOyA/PiBuw6NvIGZvaSBlbmNvbnRyYWRvLjwvcD4KICA8L2Rpdj4KPD9waHAgZWxzZToKICAkb3JkZXJfZGF0ZSAgICA9ICRvcmRlci0+Z2V0X2RhdGVfY3JlYXRlZCgpID8gd3BfZGF0ZSgnZC9tL1kgSDppJywgJG9yZGVyLT5nZXRfZGF0ZV9jcmVhdGVkKCktPmdldFRpbWVzdGFtcCgpKSA6ICfigJQnOwogICRzdGF0dXNfcmF3ICAgID0gJG9yZGVyLT5nZXRfc3RhdHVzKCk7CiAgJHN0YXR1c19sYWJlbCAgPSB3Y19nZXRfb3JkZXJfc3RhdHVzX25hbWUoJHN0YXR1c19yYXcpOwogICR0b3RhbCAgICAgICAgID0gbnVtYmVyX2Zvcm1hdCgoZmxvYXQpJG9yZGVyLT5nZXRfdG90YWwoKSwgMiwgJywnLCAnLicpOwogICRwZ3RvICAgICAgICAgID0gJG9yZGVyLT5nZXRfcGF5bWVudF9tZXRob2RfdGl0bGUoKSA/OiAn4oCUJzsKICAkZm5hbWUgICAgICAgICA9ICRvcmRlci0+Z2V0X2JpbGxpbmdfZmlyc3RfbmFtZSgpID86ICcnOwogICRsbmFtZSAgICAgICAgID0gJG9yZGVyLT5nZXRfYmlsbGluZ19sYXN0X25hbWUoKSAgPzogJyc7CiAgJGN1c3RvbWVyX25hbWUgPSB0cmltKCIkZm5hbWUgJGxuYW1lIikgPzogJ+KAlCc7CiAgJGN1c3RvbWVyX3Bob25lID0gJG9yZGVyLT5nZXRfYmlsbGluZ19waG9uZSgpID86ICgkb3JkZXItPmdldF9tZXRhKCdiaWxsaW5nX2NlbGxwaG9uZScpID86ICfigJQnKTsKICAkY3VzdG9tZXJfZW1haWwgPSAkb3JkZXItPmdldF9iaWxsaW5nX2VtYWlsKCkgPzogJ+KAlCc7CiAgJGN1c3RvbWVyX2NpdHkgID0gdHJpbSgoJG9yZGVyLT5nZXRfYmlsbGluZ19jaXR5KCkgPzogJycpIC4gKCRvcmRlci0+Z2V0X2JpbGxpbmdfc3RhdGUoKSA/ICcvJy4kb3JkZXItPmdldF9iaWxsaW5nX3N0YXRlKCkgOiAnJykpID86ICfigJQnOwogICRub3RlcyAgICAgICAgID0gJG9yZGVyLT5nZXRfY3VzdG9tZXJfbm90ZSgpID86ICcnOwogICRldmVudF9kYXRlICAgID0gJHRlYW1fcm93LT5ldmVudF9kYXRlID8gd3BfZGF0ZSgnZC9tL1knLCBzdHJ0b3RpbWUoJHRlYW1fcm93LT5ldmVudF9kYXRlKSkgOiAn4oCUJzsKICAkdGVhbV9kYXRhICAgICA9IGpzb25fZGVjb2RlKCR0ZWFtX3Jvdy0+dGVhbV9qc29uID86ICd7fScsIHRydWUpID86IFtdOwo/PgoKICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgIDxkaXYgY2xhc3M9ImNhcmQtdGl0bGUiPvCfk4sgSW5mb3JtYcOnw7VlcyBkbyBQZWRpZG88L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImluZm8tZ3JpZCI+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8taXRlbSI+PGRpdiBjbGFzcz0ibGJsIj5QZWRpZG88L2Rpdj48ZGl2IGNsYXNzPSJ2YWwgYmlnIj4jPD9waHAgZWNobyAkb3JkZXJfaWQ7ID8+PC9kaXY+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8taXRlbSI+PGRpdiBjbGFzcz0ibGJsIj5TdGF0dXM8L2Rpdj48ZGl2IGNsYXNzPSJ2YWwiPjxzcGFuIGNsYXNzPSJzdGF0dXMtYmFkZ2Ugc3RhdHVzLTw/cGhwIGVjaG8gZXNjX2F0dHIoJHN0YXR1c19yYXcpOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCgkc3RhdHVzX2xhYmVsKTsgPz48L3NwYW4+PC9kaXY+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8taXRlbSI+PGRpdiBjbGFzcz0ibGJsIj7wn5OFIERhdGEgZG8gUGVkaWRvPC9kaXY+PGRpdiBjbGFzcz0idmFsIj48P3BocCBlY2hvICRvcmRlcl9kYXRlOyA/PjwvZGl2PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJpbmZvLWl0ZW0iPjxkaXYgY2xhc3M9ImxibCI+8J+OqiBEYXRhIGRvIEV2ZW50bzwvZGl2PjxkaXYgY2xhc3M9InZhbCI+PD9waHAgZWNobyAkZXZlbnRfZGF0ZTsgPz48L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaW5mby1pdGVtIj48ZGl2IGNsYXNzPSJsYmwiPvCfkrMgUGFnYW1lbnRvPC9kaXY+PGRpdiBjbGFzcz0idmFsIj48P3BocCBlY2hvIGVzY19odG1sKCRwZ3RvKTsgPz48L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaW5mby1pdGVtIj48ZGl2IGNsYXNzPSJsYmwiPvCfkrAgVG90YWw8L2Rpdj48ZGl2IGNsYXNzPSJ2YWwiIHN0eWxlPSJjb2xvcjojN2MzYWVkIj5SJCA8P3BocCBlY2hvICR0b3RhbDsgPz48L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgIDxkaXYgY2xhc3M9ImNhcmQtdGl0bGUiPvCfkaQgQ2xpZW50ZTwvZGl2PgogICAgPGRpdiBjbGFzcz0iaW5mby1ncmlkIj4KICAgICAgPGRpdiBjbGFzcz0iaW5mby1pdGVtIiBzdHlsZT0iZ3JpZC1jb2x1bW46MS8tMSI+PGRpdiBjbGFzcz0ibGJsIj5Ob21lPC9kaXY+PGRpdiBjbGFzcz0idmFsIj48P3BocCBlY2hvIGVzY19odG1sKCRjdXN0b21lcl9uYW1lKTsgPz48L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaW5mby1pdGVtIj48ZGl2IGNsYXNzPSJsYmwiPvCfk7EgVGVsZWZvbmU8L2Rpdj48ZGl2IGNsYXNzPSJ2YWwiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGN1c3RvbWVyX3Bob25lKTsgPz48L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaW5mby1pdGVtIj48ZGl2IGNsYXNzPSJsYmwiPvCfk6cgRS1tYWlsPC9kaXY+PGRpdiBjbGFzcz0idmFsIiBzdHlsZT0iZm9udC1zaXplOjEycHgiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGN1c3RvbWVyX2VtYWlsKTsgPz48L2Rpdj48L2Rpdj4KICAgICAgPD9waHAgaWYgKCRjdXN0b21lcl9jaXR5ICYmICRjdXN0b21lcl9jaXR5ICE9PSAnLycpOiA/PgogICAgICA8ZGl2IGNsYXNzPSJpbmZvLWl0ZW0iIHN0eWxlPSJncmlkLWNvbHVtbjoxLy0xIj48ZGl2IGNsYXNzPSJsYmwiPvCfk40gQ2lkYWRlPC9kaXY+PGRpdiBjbGFzcz0idmFsIj48P3BocCBlY2hvIGVzY19odG1sKCRjdXN0b21lcl9jaXR5KTsgPz48L2Rpdj48L2Rpdj4KICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICA8ZGl2IGNsYXNzPSJjYXJkLXRpdGxlIj7wn46tIEF0cmHDp8O1ZXMgQ29udHJhdGFkYXM8L2Rpdj4KICAgIDx0YWJsZSBjbGFzcz0iaXRlbXMtdGFibGUiPgogICAgICA8dGhlYWQ+PHRyPgogICAgICAgIDx0aD5Qcm9kdXRvPC90aD4KICAgICAgICA8dGggc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm93cmFwIj5RdGQ8L3RoPgogICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDt3aGl0ZS1zcGFjZTpub3dyYXAiPlZhbG9yPC90aD4KICAgICAgPC90cj48L3RoZWFkPgogICAgICA8dGJvZHk+CiAgICAgIDw/cGhwIGZvcmVhY2ggKCRvcmRlci0+Z2V0X2l0ZW1zKCkgYXMgJGl0ZW0pOgogICAgICAgICRwcm9kdWN0ICAgPSAkaXRlbS0+Z2V0X3Byb2R1Y3QoKTsKICAgICAgICAkaXRlbV9uYW1lID0gJGl0ZW0tPmdldF9uYW1lKCk7CiAgICAgICAgJHF0eSAgICAgICA9ICRpdGVtLT5nZXRfcXVhbnRpdHkoKTsKICAgICAgICAkc3VidG90YWwgID0gbnVtYmVyX2Zvcm1hdCgoZmxvYXQpJGl0ZW0tPmdldF90b3RhbCgpLCAyLCAnLCcsICcuJyk7CiAgICAgICAgJHNrdSAgICAgICA9ICRwcm9kdWN0ID8gJHByb2R1Y3QtPmdldF9za3UoKSA6ICcnOwogICAgICAgICRpdGVtX21ldGFfc3RyID0gJyc7CiAgICAgICAgJGJvb2tpbmdfZGF0YSAgPSAkaXRlbS0+Z2V0X21ldGEoJ3lpdGhfYm9va2luZ19kYXRhJyk7CiAgICAgICAgaWYgKCRib29raW5nX2RhdGEpIHsKICAgICAgICAgICAgJGZyb20gPSAkYm9va2luZ19kYXRhWydmcm9tJ10gPz8gKCRib29raW5nX2RhdGFbJ3N0YXJ0J10gPz8gbnVsbCk7CiAgICAgICAgICAgIGlmICgkZnJvbSkgewogICAgICAgICAgICAgICAgJHRzID0gaXNfbnVtZXJpYygkZnJvbSkgPyAoaW50KSRmcm9tIDogc3RydG90aW1lKCRmcm9tKTsKICAgICAgICAgICAgICAgIGlmICgkdHMgPiAwKSAkaXRlbV9tZXRhX3N0ciA9ICdFdmVudG86ICcgLiB3cF9kYXRlKCdkL20vWScsICR0cyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgID8+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtLW5hbWUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGl0ZW1fbmFtZSk7ID8+PC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGlmICgkaXRlbV9tZXRhX3N0cik6ID8+PGRpdiBjbGFzcz0iaXRlbS1tZXRhIj48P3BocCBlY2hvIGVzY19odG1sKCRpdGVtX21ldGFfc3RyKTsgPz48L2Rpdj48P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgPD9waHAgaWYgKCRza3UpOiA/PjxkaXYgY2xhc3M9Iml0ZW0tbWV0YSI+U0tVOiA8P3BocCBlY2hvIGVzY19odG1sKCRza3UpOyA/PjwvZGl2Pjw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgPC90ZD4KICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZy10b3A6MTBweCI+PD9waHAgZWNobyAkcXR5OyA/Png8L3RkPgogICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nLXRvcDoxMHB4O3doaXRlLXNwYWNlOm5vd3JhcCI+UiQgPD9waHAgZWNobyAkc3VidG90YWw7ID8+PC90ZD4KICAgICAgICA8L3RyPgogICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICA8L3Rib2R5PgogICAgICA8dGZvb3Q+CiAgICAgICAgPHRyIGNsYXNzPSJ0b3RhbC1yb3ciPgogICAgICAgICAgPHRkIGNvbHNwYW49IjIiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij5Ub3RhbDwvdGQ+CiAgICAgICAgICA8dGQgY2xhc3M9InRvdGFsLXZhbCIgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm93cmFwIj5SJCA8P3BocCBlY2hvICR0b3RhbDsgPz48L3RkPgogICAgICAgIDwvdHI+CiAgICAgIDwvdGZvb3Q+CiAgICA8L3RhYmxlPgogIDwvZGl2PgoKICA8P3BocCBpZiAoIWVtcHR5KCR0ZWFtX2RhdGEpKTogPz4KICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgIDxkaXYgY2xhc3M9ImNhcmQtdGl0bGUiPvCfjqwgRXF1aXBlIE1vbnRhZGE8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InRlYW0tc3VtbWFyeSI+CiAgICAgIDw/cGhwIGZvcmVhY2ggKCR0ZWFtX2RhdGEgYXMgJHQpOgogICAgICAgIGlmIChlbXB0eSgkdFsncGFydG5lcl9uYW1lJ10pKSBjb250aW51ZTsKICAgICAgPz48c3Bhbj7wn46tIDw/cGhwIGVjaG8gZXNjX2h0bWwoJHRbJ3BhcnRuZXJfbmFtZSddKTsgPz48L3NwYW4+PD9waHAgZW5kZm9yZWFjaDsgPz4KICAgIDwvZGl2PgogIDwvZGl2PgogIDw/cGhwIGVuZGlmOyA/PgoKICA8P3BocCBpZiAoJG5vdGVzKTogPz4KICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgIDxkaXYgY2xhc3M9ImNhcmQtdGl0bGUiPvCfk50gT2JzZXJ2YcOnw7VlczwvZGl2PgogICAgPGRpdiBjbGFzcz0ibm90ZS1ib3giPjw/cGhwIGVjaG8gZXNjX2h0bWwoJG5vdGVzKTsgPz48L2Rpdj4KICA8L2Rpdj4KICA8P3BocCBlbmRpZjsgPz4KCjw/cGhwIGVuZGlmOyA/Pgo8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cjw/cGhwCn0KCgphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9hZHZhbmNlX3BhcnRuZXJfc3RhZ2UnLCBmdW5jdGlvbigpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX25vbmNlJywgJ25vbmNlJyk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkaWQgICAgPSBpbnR2YWwoJF9QT1NUWydldmVudF9pZCddID8/IDApOwogICAgJHN0YWdlID0gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ3N0YWdlJ10gPz8gJycpOwogICAgaWYgKCRpZCAmJiAkc3RhZ2UpICR3cGRiLT51cGRhdGUoJHdwZGItPnByZWZpeCAuICd2bTJfcGFydG5lcl9ldmVudHMnLCBbJ3N0YWdlJz0+JHN0YWdlLCd1cGRhdGVkX2F0Jz0+Y3VycmVudF90aW1lKCdteXNxbCcpXSwgWydpZCc9PiRpZF0pOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoKTsKfSk7CgoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBGQVNFIDgg4oCUIE3Dk0RVTE8gRklOQU5DRUlSTwovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpmdW5jdGlvbiB2bTJfY3JlYXRlX3BheW1lbnRfdGFibGUoKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkY2hhcnNldCA9ICR3cGRiLT5nZXRfY2hhcnNldF9jb2xsYXRlKCk7CiAgICAkc3FsID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHskd3BkYi0+cHJlZml4fXZtMl9wYXltZW50cyAoCiAgICAgICAgaWQgYmlnaW50KDIwKSBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwKICAgICAgICBwYXJ0bmVyX2lkIGJpZ2ludCgyMCkgREVGQVVMVCBOVUxMLAogICAgICAgIG9yZGVyX2lkIGJpZ2ludCgyMCkgREVGQVVMVCBOVUxMLAogICAgICAgIGFtb3VudCBkZWNpbWFsKDEwLDIpIE5PVCBOVUxMIERFRkFVTFQgMCwKICAgICAgICBkdWVfZGF0ZSBkYXRlIERFRkFVTFQgTlVMTCwKICAgICAgICBwYWlkX2F0IGRhdGV0aW1lIERFRkFVTFQgTlVMTCwKICAgICAgICByZWZlcmVuY2UgdmFyY2hhcigzMDApIERFRkFVTFQgTlVMTCwKICAgICAgICBub3RlcyB0ZXh0LAogICAgICAgIHN0YXR1cyB2YXJjaGFyKDIwKSBERUZBVUxUICdwZW5kaW5nJywKICAgICAgICBjcmVhdGVkX2F0IGRhdGV0aW1lIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgICBLRVkgcGFydG5lcl9pZCAocGFydG5lcl9pZCksCiAgICAgICAgS0VZIHN0YXR1cyAoc3RhdHVzKQogICAgKSAkY2hhcnNldDsiOwogICAgcmVxdWlyZV9vbmNlIEFCU1BBVEggLiAnd3AtYWRtaW4vaW5jbHVkZXMvdXBncmFkZS5waHAnOwogICAgZGJEZWx0YSgkc3FsKTsKfQoKYWRkX2FjdGlvbignYWRtaW5faW5pdCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKCAhZ2V0X29wdGlvbigndm0yX3BheW1lbnRfdGFibGVfdjEnKSApIHsKICAgICAgICB2bTJfY3JlYXRlX3BheW1lbnRfdGFibGUoKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfcGF5bWVudF90YWJsZV92MScsICcxJyk7CiAgICB9Cn0pOwoKLy8g4pSA4pSAIEZJTkFOQ0VJUk8gVjIgSEVMUEVSUyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX21vbnRoX2xhYmVsX3B0KCAkeW0gKSB7CiAgICAkbXMgPSBbJzAxJz0+J0phbmVpcm8nLCcwMic9PidGZXZlcmVpcm8nLCcwMyc9PidNYXLDp28nLCcwNCc9PidBYnJpbCcsCiAgICAgICAgICAgJzA1Jz0+J01haW8nLCcwNic9PidKdW5obycsJzA3Jz0+J0p1bGhvJywnMDgnPT4nQWdvc3RvJywKICAgICAgICAgICAnMDknPT4nU2V0ZW1icm8nLCcxMCc9PidPdXR1YnJvJywnMTEnPT4nTm92ZW1icm8nLCcxMic9PidEZXplbWJybyddOwogICAgaWYgKCFwcmVnX21hdGNoKCcvXihcZHs0fSktKFxkezJ9KSQvJywgJHltLCAkbSkpIHJldHVybiAkeW07CiAgICByZXR1cm4gKCRtc1skbVsyXV0gPz8gJG1bMl0pIC4gJyAnIC4gJG1bMV07Cn0KZnVuY3Rpb24gdm0yX2Zpbl9mbXRfciggJHYgKSB7IHJldHVybiAnUiQgJyAuIG51bWJlcl9mb3JtYXQoKGZsb2F0KSR2LCAyLCAnLCcsICcuJyk7IH0KCi8vIOKUgOKUgCBGSU5BTkNFSVJPIFBBR0Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgovLyDilIDilIAgRklOQU5DRUlSTzogaGVscGVycyBVSSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2Zpbl9maWx0ZXJfYmFyKHN0cmluZyAkdGlkLCBzdHJpbmcgJHBoID0gJ0ZpbHRyYXIuLi4nKTogdm9pZCB7CiAgICAkZSA9IGVzY19qcygkdGlkKTsKICAgIGVjaG8gIjxkaXYgc3R5bGU9J21hcmdpbi1ib3R0b206MTJweDtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwJz4iCiAgICAgICAgLiAiPGlucHV0IHR5cGU9J3RleHQnIG9uaW5wdXQ9XCJ2bTJGaW5GaWx0ZXIodGhpcywneyRlfScpXCIgcGxhY2Vob2xkZXI9J/CflI0geyRwaH0nIgogICAgICAgIC4gIiBzdHlsZT0ncGFkZGluZzo3cHggMTRweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjEzcHg7d2lkdGg6MjYwcHg7b3V0bGluZTpub25lJyIKICAgICAgICAuICIgb25mb2N1cz1cInRoaXMuc3R5bGUuYm9yZGVyQ29sb3I9JyM3YzNhZWQnXCIgb25ibHVyPVwidGhpcy5zdHlsZS5ib3JkZXJDb2xvcj0nI2QxZDVkYidcIj4iCiAgICAgICAgLiAiPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5Y2EzYWY7YWxpZ24tc2VsZjpjZW50ZXInPkNsaXF1ZSBubyBjYWJlw6dhbGhvIHBhcmEgb3JkZW5hciDih4U8L3NwYW4+IgogICAgICAgIC4gIjwvZGl2PiI7Cn0KZnVuY3Rpb24gdm0yX2Zpbl90aGVhZChhcnJheSAkY29scywgc3RyaW5nICR0aWQsIGludCAkbGVmdCA9IDEpOiB2b2lkIHsKICAgICRlID0gZXNjX2pzKCR0aWQpOwogICAgZWNobyAiPHRoZWFkPjx0ciBzdHlsZT0nYmFja2dyb3VuZDojZjNmNGY2O2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlNWU3ZWInPiI7CiAgICBmb3JlYWNoICgkY29scyBhcyAkaSA9PiAkaCkgewogICAgICAgICRhbGlnbiA9ICRpIDwgJGxlZnQgPyAnbGVmdCcgOiAncmlnaHQnOwogICAgICAgIGVjaG8gIjx0aCBvbmNsaWNrPVwidm0yRmluU29ydCgnIiAuICRlIC4gIicsIiAuICRpIC4gIilcIiBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7IgogICAgICAgICAgIC4gInRleHQtYWxpZ246eyRhbGlnbn07Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsiCiAgICAgICAgICAgLiAid2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyO3VzZXItc2VsZWN0Om5vbmU7Y29sb3I6IzM3NDE1MTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjFzJyIKICAgICAgICAgICAuICIgb25tb3VzZWVudGVyPVwidGhpcy5zdHlsZS5iYWNrZ3JvdW5kPScjZTVlN2ViJ1wiIG9ubW91c2VsZWF2ZT1cInRoaXMuc3R5bGUuYmFja2dyb3VuZD0nJ1wiPiIKICAgICAgICAgICAuIGVzY19odG1sKCRoKSAuICIgPHNwYW4gY2xhc3M9J3ZtMnNpJyBkYXRhLWNvbD0nIiAuICRpIC4gIicgc3R5bGU9J2NvbG9yOiM5Y2EzYWY7Zm9udC1zaXplOjEwcHgnPuKHhTwvc3Bhbj48L3RoPiI7CiAgICB9CiAgICBlY2hvICI8L3RyPjwvdGhlYWQ+IjsKfQoKZnVuY3Rpb24gdm0yX2ZpbmFuY2Vpcm9fcGFnZSgpIHsKICAgIGlmICggIWN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykgKSB7IHdwX2RpZSgnRm9yYmlkZGVuJyk7IH0KCiAgICAkZHJlX3Jvd3MgICAgID0gZ2V0X29wdGlvbigndm0yX2Zpbl9kcmUnLCAgICAgW10pOwogICAgJHJlY2ViZXJfcm93cyA9IGdldF9vcHRpb24oJ3ZtMl9maW5fcmVjZWJlcicsICBbXSk7CiAgICAkcGFnYXJfcm93cyAgID0gZ2V0X29wdGlvbigndm0yX2Zpbl9wYWdhcicsICAgIFtdKTsKICAgICRsYXN0X3N5bmMgICAgPSBnZXRfb3B0aW9uKCd2bTJfZmluX2xhc3Rfc3luYycsICcnKTsKICAgICR3ZWJob29rX3VybCAgPSBnZXRfb3B0aW9uKCd2bTJfZmluX3dlYmhvb2tfdXJsJywgJycpOwogICAgJHN5bmNpbmcgICAgICA9IChib29sKSBnZXRfb3B0aW9uKCd2bTJfZmluX3N5bmNfcGVuZGluZycsIDApOwoKICAgICRzZWxfbW9udGggPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfR0VUWydmbSddID8/IGRhdGUoJ1ktbScpKTsKICAgIGlmICggIXByZWdfbWF0Y2goJy9eXGR7NH0tXGR7Mn0kLycsICRzZWxfbW9udGgpICkgJHNlbF9tb250aCA9IGRhdGUoJ1ktbScpOwogICAgWyRzZWxfeWVhciwgJHNlbF9tXSA9IGV4cGxvZGUoJy0nLCAkc2VsX21vbnRoKTsKCiAgICAkcHJldl9tID0gZGF0ZSgnWS1tJywgc3RydG90aW1lKCJ7JHNlbF9tb250aH0tMDEgLTEgbW9udGgiKSk7CiAgICAkbmV4dF9tID0gZGF0ZSgnWS1tJywgc3RydG90aW1lKCJ7JHNlbF9tb250aH0tMDEgKzEgbW9udGgiKSk7CiAgICAkYmFzZSAgID0gYWRtaW5fdXJsKCdhZG1pbi5waHAnKTsKICAgICR0YWIgICAgPSBzYW5pdGl6ZV9rZXkoJF9HRVRbJ2Z0YWInXSA/PyAnZHJlJyk7CiAgICAkdGFicyAgID0gWydkcmUnPT4n8J+StSBDYWl4YScsJ2NvbXBldGVuY2lhJz0+J/Cfk4UgQ29tcGV0w6puY2lhJywncmVjZWJlcic9Pifwn5KaIEEgUmVjZWJlcicsJ3BhZ2FyJz0+J/CflLQgQSBQYWdhcicsJ3dvbyc9Pifwn5uSIFdvb0NvbW1lcmNlJ107CgogICAgJG1uYW1lcyA9IFsnMDEnPT4namFuZWlybycsJzAyJz0+J2ZldmVyZWlybycsJzAzJz0+J21hcsOnbycsJzA0Jz0+J2FicmlsJywKICAgICAgICAgICAgICAgJzA1Jz0+J21haW8nLCcwNic9PidqdW5obycsJzA3Jz0+J2p1bGhvJywnMDgnPT4nYWdvc3RvJywKICAgICAgICAgICAgICAgJzA5Jz0+J3NldGVtYnJvJywnMTAnPT4nb3V0dWJybycsJzExJz0+J25vdmVtYnJvJywnMTInPT4nZGV6ZW1icm8nXTsKICAgICRjdXJfbW5hbWUgPSAkbW5hbWVzWyRzZWxfbV0gPz8gJyc7CiAgICAkZHJlX3JvdyAgID0gbnVsbDsKICAgIGlmICggaXNfYXJyYXkoJGRyZV9yb3dzKSApIHsKICAgICAgICAvLyBQcmltZWlyYSBwYXNzYWdlbTogcHJvY3VyYSBtYXRjaCBleGF0byAiTWFpbyAyMDI2IgogICAgICAgIGZvcmVhY2ggKCAkZHJlX3Jvd3MgYXMgJHJvdyApIHsKICAgICAgICAgICAgaWYgKCBpc19hcnJheSgkcm93KSAmJiBpc3NldCgkcm93WydtZXMnXSkgKSB7CiAgICAgICAgICAgICAgICAkbWVzX2xvd2VyID0gc3RydG9sb3dlcih0cmltKCRyb3dbJ21lcyddKSk7CiAgICAgICAgICAgICAgICBpZiAoICRtZXNfbG93ZXIgPT09ICRjdXJfbW5hbWUgLiAnICcgLiAkc2VsX3llYXIgKSB7CiAgICAgICAgICAgICAgICAgICAgJGRyZV9yb3cgPSAkcm93OyBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBTZWd1bmRhIHBhc3NhZ2VtOiBzZSBuw6NvIGFjaG91IGNvbSBhbm8sIHBlZ2EgbyDDmkxUSU1PIG1hdGNoIHBlbG8gbm9tZSBkbyBtw6pzCiAgICAgICAgaWYgKCAhJGRyZV9yb3cgKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCAkZHJlX3Jvd3MgYXMgJHJvdyApIHsKICAgICAgICAgICAgICAgIGlmICggaXNfYXJyYXkoJHJvdykgJiYgaXNzZXQoJHJvd1snbWVzJ10pICkgewogICAgICAgICAgICAgICAgICAgICRtZXNfbG93ZXIgPSBzdHJ0b2xvd2VyKHRyaW0oJHJvd1snbWVzJ10pKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRtZXNfbG93ZXIgPT09ICRjdXJfbW5hbWUgfHwgc3RycG9zKCRtZXNfbG93ZXIsICRjdXJfbW5hbWUpID09PSAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAkZHJlX3JvdyA9ICRyb3c7IC8vIG7Do28gZmF6IGJyZWFrIOKGkiBwZWdhIG8gw7psdGltbwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAkdmVuZGFzICA9IChmbG9hdCkoJGRyZV9yb3dbJ3ZlbmRhcyddICAgICAgICA/PyAkZHJlX3Jvd1sndmVuZGEnXSAgICAgICAgICA/PyAwKTsKICAgICRjdXN0byAgID0gKGZsb2F0KSgkZHJlX3Jvd1snY3VzdG8nXSAgICAgICAgID8/ICRkcmVfcm93WydjdXN0b19kaXJldG8nXSAgICA/PyAwKTsKICAgICRicnV0byAgID0gKGZsb2F0KSgkZHJlX3Jvd1snYnJ1dG8nXSAgICAgICAgID8/ICRkcmVfcm93WydicnV0b192aXZhbWFpcyddICA/PyAwKTsKICAgICRta3QgICAgID0gKGZsb2F0KSgkZHJlX3Jvd1snbWt0J10gICAgICAgICAgID8/ICRkcmVfcm93WydtYXJrZXRpbmcnXSAgICAgICA/PyAwKTsKICAgICRsaXF1aWRvID0gKGZsb2F0KSgkZHJlX3Jvd1snbGlxdWlkbyddICAgICAgID8/IDApOwogICAgJG1fYnJ1dGEgPSAoZmxvYXQpKCRkcmVfcm93WydtYXJnZW1fYnJ1dGEnXSAgPz8gMCk7CiAgICAkcm9hcyAgICA9IChmbG9hdCkoJGRyZV9yb3dbJ3JvYXMnXSAgICAgICAgICA/PyAwKTsKICAgICR2c19hbnQgID0gaXNzZXQoJGRyZV9yb3dbJ3ZzX21lc19hbnRlcmlvciddKSAmJiAkZHJlX3Jvd1sndnNfbWVzX2FudGVyaW9yJ10gIT09ICcnID8gKGZsb2F0KSRkcmVfcm93Wyd2c19tZXNfYW50ZXJpb3InXSA6IG51bGw7CgogICAgJHN5bmNfbm9uY2UgICA9IHdwX2NyZWF0ZV9ub25jZSgndm0yX2Zpbl9zeW5jJyk7CiAgICAkcmVzdF9ub25jZSAgID0gd3BfY3JlYXRlX25vbmNlKCd3cF9yZXN0Jyk7CiAgICAkbGFzdF9mbXQgICAgID0gJGxhc3Rfc3luYyA/IGRhdGUoJ2QvbSBIXGhpJywgc3RydG90aW1lKCRsYXN0X3N5bmMpKSA6ICdudW5jYSc7CiAgICAkbm9fZGF0YSAgICAgID0gZW1wdHkoJGRyZV9yb3dzKTsKICAgICRtb250aF9sYWJlbCAgPSB2bTJfbW9udGhfbGFiZWxfcHQoJHNlbF9tb250aCk7CiAgICAkcmVzdF9zdGF0dXNfdXJsID0gcmVzdF91cmwoJ3ZtLWNybS12Mi92MS9maW5hbmNlaXJvL3N5bmMtc3RhdHVzJyk7CiAgICA/PgogICAgPGRpdiBjbGFzcz0idm0yLXdyYXAiIGlkPSJ2bTItZmluLXdyYXAiPgoKICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToyMHB4Ij4KICAgICAgICA8aDEgc3R5bGU9Im1hcmdpbjowO2ZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjcwMCI+8J+SsCBGaW5hbmNlaXJvPC9oMT4KICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwIj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4O2JhY2tncm91bmQ6I2YzZjRmNjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjRweCI+CiAgICAgICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWZpbmFuY2Vpcm8nLCdmbSc9PiRwcmV2X20sJ2Z0YWInPT4kdGFiXSwkYmFzZSkpOyA/PiIgc3R5bGU9InBhZGRpbmc6NHB4IDEwcHg7Ym9yZGVyLXJhZGl1czo2cHg7Y29sb3I6IzM3NDE1MTt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXNpemU6MTNweCI+4peAPC9hPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9InBhZGRpbmc6NHB4IDEycHg7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxMTEiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJG1vbnRoX2xhYmVsKTsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWZpbmFuY2Vpcm8nLCdmbSc9PiRuZXh0X20sJ2Z0YWInPT4kdGFiXSwkYmFzZSkpOyA/PiIgc3R5bGU9InBhZGRpbmc6NHB4IDEwcHg7Ym9yZGVyLXJhZGl1czo2cHg7Y29sb3I6IzM3NDE1MTt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXNpemU6MTNweCI+4pa2PC9hPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgaWYgKCR3ZWJob29rX3VybCkgOiA/PgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHgiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0idm0yLWZpbi1zeW5jLWJ0biIgb25jbGljaz0idm0yRmluU3luYygpIiBzdHlsZT0icGFkZGluZzo4cHggMTZweDtiYWNrZ3JvdW5kOiM3YzNhZWQ7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjhweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4Ij4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0idm0yLWZpbi1zeW5jLWljb24iPjw/cGhwIGVjaG8gJHN5bmNpbmcgPyAn4o+zJyA6ICfwn5SEJzsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InZtMi1maW4tc3luYy10eHQiPjw/cGhwIGVjaG8gJHN5bmNpbmcgPyAnU2luY3Jvbml6YW5kby4uLicgOiAnU2luY3Jvbml6YXIgR1NoZWV0cyc7ID8+PC9zcGFuPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzljYTNhZiIgaWQ9InZtMi1maW4tbGFzdCI+w5psdGltYSBzeW5jOiA8P3BocCBlY2hvIGVzY19odG1sKCRsYXN0X2ZtdCk7ID8+PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPD9waHAgZWxzZSA6ID8+CiAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybChhZG1pbl91cmwoJ2FkbWluLnBocD9wYWdlPXZtMi1zZXR0aW5ncyNmaW4td2ViaG9vaycpKTsgPz4iIHN0eWxlPSJwYWRkaW5nOjhweCAxNnB4O2JhY2tncm91bmQ6I2ZlZjNjNztjb2xvcjojOTI0MDBlO2JvcmRlcjoxcHggc29saWQgI2ZkZTA0Nztib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPuKame+4jyBDb25maWd1cmFyIFdlYmhvb2s8L2E+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPD9waHAgaWYgKCRub19kYXRhKSA6ID8+CiAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZWY5YzM7Ym9yZGVyOjFweCBzb2xpZCAjZmRlMDQ3O2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjIwcHg7bWFyZ2luLWJvdHRvbToyMHB4O3RleHQtYWxpZ246Y2VudGVyIj4KICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MzJweDttYXJnaW4tYm90dG9tOjhweCI+8J+TijwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNzEzZjEyO21hcmdpbi1ib3R0b206NnB4Ij5EYWRvcyBuw6NvIHNpbmNyb25pemFkb3MgYWluZGE8L2Rpdj4KICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjojYTE2MjA3O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgPD9waHAgaWYgKCR3ZWJob29rX3VybCkgOiA/PkNsaXF1ZSBlbSA8c3Ryb25nPvCflIQgU2luY3Jvbml6YXIgR1NoZWV0czwvc3Ryb25nPiBwYXJhIGltcG9ydGFyIG9zIGRhZG9zIGRhIHBsYW5pbGhhIFZJVkFNQUlTLVZFTkRBUy4KICAgICAgICAgICAgPD9waHAgZWxzZSA6ID8+Q29uZmlndXJlIG8gd2ViaG9vayBlbSA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoYWRtaW5fdXJsKCdhZG1pbi5waHA/cGFnZT12bTItc2V0dGluZ3MnKSk7ID8+IiBzdHlsZT0iY29sb3I6IzdjM2FlZCI+4pqZ77iPIENvbmZpZ3VyYcOnw7VlczwvYT4gZSBkZXBvaXMgc2luY3Jvbml6ZS48P3BocCBlbmRpZjsgPz4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kaWY7ID8+CgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDE2MHB4LDFmcikpO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MjRweCI+CiAgICA8P3BocAogICAgJGtwaXMgPSBbCiAgICAgICAgWyfwn5KwIFZlbmRhcyAoUGxhbmlsaGEpJywgIHZtMl9maW5fZm10X3IoJHZlbmRhcyksICAkZHJlX3JvdyA/IG51bWJlcl9mb3JtYXQoJG1fYnJ1dGEqMTAwLDEsJywnLCcuJykuJyUgbWFyZ2VtIGJydXRhJyA6ICfigJQnLCAnIzEwYjk4MScsICd3b28nXSwKICAgICAgICBbJ/CfkrggQ3VzdG8gRGlyZXRvJywgICAgICAgdm0yX2Zpbl9mbXRfcigkY3VzdG8pLCAgICdwYXJjZWlyb3MgZSBhcnRpc3RhcycsICcjZWY0NDQ0JywgJ3BhZ2FyJ10sCiAgICAgICAgWyfwn4+mIEJydXRvIFZpdmFNYWlzJywgICAgIHZtMl9maW5fZm10X3IoJGJydXRvKSwgICAkdmVuZGFzID4gMCA/IG51bWJlcl9mb3JtYXQoJGJydXRvLyR2ZW5kYXMqMTAwLDEsJywnLCcuJykuJyUgZGFzIHZlbmRhcycgOiAn4oCUJywgJyMzYjgyZjYnLCAnZHJlJ10sCiAgICAgICAgWyfwn5OiIE1rdC9UZWNub2xvZ2lhJywgICAgIHZtMl9maW5fZm10X3IoJG1rdCksICAgICAkcm9hcyA+IDAgPyAnUk9BUzogJy5udW1iZXJfZm9ybWF0KCRyb2FzLDIsJywnLCcuJykuJ3gnIDogJ+KAlCcsICcjZjU5ZTBiJywgJ2RyZSddLAogICAgICAgIFsn8J+StSBMw61xdWlkbycsICAgICAgICAgICAgdm0yX2Zpbl9mbXRfcigkbGlxdWlkbyksICAkdnNfYW50ICE9PSBudWxsID8gKCR2c19hbnQgPj0gMCA/ICfilrIgJyA6ICfilrwgJykubnVtYmVyX2Zvcm1hdChhYnMoJHZzX2FudCkqMTAwLDEsJywnLCcuJykuJyUgdnMgbcOqcyBhbnQuJyA6ICfigJQnLCAkbGlxdWlkbyA+PSAwID8gJyM3YzNhZWQnIDogJyNlZjQ0NDQnLCAnZHJlJ10sCiAgICAgICAgWyfwn5OIIFJPQVMnLCAgICAgICAgICAgICAgIG51bWJlcl9mb3JtYXQoJHJvYXMsMiwnLCcsJy4nKS4neCcsICRyb2FzID4gMCA/ICdSZXRvcm5vIHNvYnJlIGFkc3BlbmQnIDogJ+KAlCcsICRyb2FzID49IDUgPyAnIzEwYjk4MScgOiAoJHJvYXMgPj0gMiA/ICcjZjU5ZTBiJyA6ICcjZWY0NDQ0JyksICdkcmUnXSwKICAgIF07CiAgICBmb3JlYWNoICgka3BpcyBhcyBbJGxibCwkdmFsLCRzdWIsJGNvciwkbHRhYl0pIDoKICAgICAgICAkbGhyZWYgPSBlc2NfanMoYWRkX3F1ZXJ5X2FyZyhbJ3BhZ2UnPT4ndm0yLWZpbmFuY2Vpcm8nLCdmbSc9PiRzZWxfbW9udGgsJ2Z0YWInPT4kbHRhYl0sJGJhc2UpKTsKICAgID8+CiAgICA8ZGl2IG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9Jzw/cGhwIGVjaG8gJGxocmVmOyA/PiciCiAgICAgICAgIG9ubW91c2VlbnRlcj0idGhpcy5zdHlsZS50cmFuc2Zvcm09J3RyYW5zbGF0ZVkoLTJweCknO3RoaXMuc3R5bGUuYm94U2hhZG93PScwIDRweCAxNHB4IHJnYmEoMCwwLDAsLjEpJyIKICAgICAgICAgb25tb3VzZWxlYXZlPSJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nJzt0aGlzLnN0eWxlLmJveFNoYWRvdz0nJyIKICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweDtib3JkZXItdG9wOjRweCBzb2xpZCA8P3BocCBlY2hvICRjb3I7ID8+O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMsYm94LXNoYWRvdyAuMTVzIj4KICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206NnB4O2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2UiPjw/cGhwIGVjaG8gJGxibDsgPz48L2Rpdj4KICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MjBweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzExMTttYXJnaW4tYm90dG9tOjNweCI+PD9waHAgZWNobyAkdmFsOyA/PjwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWYiPjw/cGhwIGVjaG8gJHN1YjsgPz48L2Rpdj4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgIDwvZGl2PgoKICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6OHB4O21hcmdpbi1ib3R0b206MjBweDtmbGV4LXdyYXA6d3JhcCI+CiAgICA8P3BocCBmb3JlYWNoICgkdGFicyBhcyAkdGsgPT4gJHRsKSA6CiAgICAgICAgJGFjdCAgPSAoJHRhYiA9PT0gJHRrKTsKICAgICAgICAkdHVybCA9IGFkZF9xdWVyeV9hcmcoWydwYWdlJz0+J3ZtMi1maW5hbmNlaXJvJywnZm0nPT4kc2VsX21vbnRoLCdmdGFiJz0+JHRrXSwkYmFzZSk7CiAgICAgICAgJHRzICAgPSAkYWN0ID8gJ3BhZGRpbmc6OHB4IDE4cHg7Ym9yZGVyLXJhZGl1czo4cHg7YmFja2dyb3VuZDojN2MzYWVkO2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxNHB4JwogICAgICAgICAgICAgICAgICAgICA6ICdwYWRkaW5nOjhweCAxOHB4O2JvcmRlci1yYWRpdXM6OHB4O2JhY2tncm91bmQ6I2YzZjRmNjtjb2xvcjojMzc0MTUxO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxNHB4JzsKICAgID8+PGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCR0dXJsKTsgPz4iIHN0eWxlPSI8P3BocCBlY2hvICR0czsgPz4iPjw/cGhwIGVjaG8gJHRsOyA/PjwvYT4KICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICA8L2Rpdj4KCiAgICA8P3BocAogICAgaWYgICAgICAoJHRhYiA9PT0gJ2RyZScpICAgICAgICAgIHZtMl9maW5fdGFiX2RyZSgkZHJlX3Jvd3MsICRzZWxfbW9udGgpOwogICAgZWxzZWlmICAoJHRhYiA9PT0gJ3JlY2ViZXInKSAgICAgIHZtMl9maW5fdGFiX3JlY2ViZXIoJHJlY2ViZXJfcm93cywgJHNlbF9tb250aCk7CiAgICBlbHNlaWYgICgkdGFiID09PSAncGFnYXInKSAgICAgICAgdm0yX2Zpbl90YWJfcGFnYXIoJHBhZ2FyX3Jvd3MsICRzZWxfbW9udGgpOwogICAgZWxzZWlmICAoJHRhYiA9PT0gJ2NvbXBldGVuY2lhJykgIHZtMl9maW5fdGFiX2NvbXBldGVuY2lhKCRyZWNlYmVyX3Jvd3MsICRwYWdhcl9yb3dzLCAkc2VsX21vbnRoKTsKICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bTJfZmluX3RhYl93b28oJHNlbF9tb250aCk7CiAgICA/PgogICAgPC9kaXY+CgogICAgPHNjcmlwdD4KICAgIGZ1bmN0aW9uIHZtMkZpblN5bmMoKSB7CiAgICAgICAgdmFyIGJ0biAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWZpbi1zeW5jLWJ0bicpOwogICAgICAgIHZhciBpY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1maW4tc3luYy1pY29uJyk7CiAgICAgICAgdmFyIHR4dCAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWZpbi1zeW5jLXR4dCcpOwogICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7IGljb24udGV4dENvbnRlbnQgPSAn4o+zJzsgdHh0LnRleHRDb250ZW50ID0gJ0luaWNpYW5kby4uLic7CiAgICAgICAgZmV0Y2goYWpheHVybCwgewogICAgICAgICAgICBtZXRob2Q6J1BPU1QnLCBjcmVkZW50aWFsczonc2FtZS1vcmlnaW4nLAogICAgICAgICAgICBoZWFkZXJzOnsnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30sCiAgICAgICAgICAgIGJvZHk6J2FjdGlvbj12bTJfZmluX3RyaWdnZXJfc3luYyZub25jZT08P3BocCBlY2hvIGVzY19qcygkc3luY19ub25jZSk7ID8+JwogICAgICAgIH0pLnRoZW4ocj0+ci5qc29uKCkpLnRoZW4oZD0+ewogICAgICAgICAgICBpZiAoZC5zdWNjZXNzKSB7IHR4dC50ZXh0Q29udGVudD0nU2luY3Jvbml6YW5kby4uLic7IHZtMkZpblBvbGxTdGFydD1EYXRlLm5vdygpOyB2bTJGaW5Qb2xsKCk7IH0KICAgICAgICAgICAgZWxzZSB7IGljb24udGV4dENvbnRlbnQ9J+KdjCc7IHR4dC50ZXh0Q29udGVudD0nRXJybzogJysoZC5kYXRhfHwnZmFsaGEnKTsgYnRuLmRpc2FibGVkPWZhbHNlOyB9CiAgICAgICAgfSkuY2F0Y2goKCk9PnsgaWNvbi50ZXh0Q29udGVudD0n4p2MJzsgdHh0LnRleHRDb250ZW50PSdFcnJvIGRlIHJlZGUnOyBidG4uZGlzYWJsZWQ9ZmFsc2U7IH0pOwogICAgfQogICAgdmFyIHZtMkZpblBvbGxTdGFydD1udWxsOwogICAgZnVuY3Rpb24gdm0yRmluUG9sbCgpIHsKICAgICAgICBpZiAoRGF0ZS5ub3coKS12bTJGaW5Qb2xsU3RhcnQ+MTIwMDAwKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZmluLXN5bmMtdHh0JykudGV4dENvbnRlbnQ9J1RpbWVvdXQg4oCUIHRlbnRlIG5vdmFtZW50ZSc7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZmluLXN5bmMtYnRuJykuZGlzYWJsZWQ9ZmFsc2U7IHJldHVybjsKICAgICAgICB9CiAgICAgICAgZmV0Y2goJzw/cGhwIGVjaG8gZXNjX2pzKCRyZXN0X3N0YXR1c191cmwpOyA/PicsCiAgICAgICAgICAgICAge2hlYWRlcnM6eydYLVdQLU5vbmNlJzonPD9waHAgZWNobyBlc2NfanMoJHJlc3Rfbm9uY2UpOyA/Pid9LGNyZWRlbnRpYWxzOidzYW1lLW9yaWdpbid9KQogICAgICAgIC50aGVuKHI9PnIuanNvbigpKS50aGVuKGQ9PnsKICAgICAgICAgICAgaWYgKCFkLnN5bmNpbmcpIHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZmluLXN5bmMtaWNvbicpLnRleHRDb250ZW50PSfinIUnOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1maW4tc3luYy10eHQnKS50ZXh0Q29udGVudD0nU2luY3Jvbml6YWRvISc7CiAgICAgICAgICAgICAgICB2YXIgbHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1maW4tbGFzdCcpOwogICAgICAgICAgICAgICAgaWYgKGxzICYmIGQubGFzdF9zeW5jKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGR0PW5ldyBEYXRlKGQubGFzdF9zeW5jLnJlcGxhY2UoJyAnLCdUJykpOwogICAgICAgICAgICAgICAgICAgIGxzLnRleHRDb250ZW50PSfDmmx0aW1hIHN5bmM6ICcrZHQudG9Mb2NhbGVTdHJpbmcoJ3B0LUJSJyx7ZGF5OicyLWRpZ2l0Jyxtb250aDonMi1kaWdpdCcsaG91cjonMi1kaWdpdCcsbWludXRlOicyLWRpZ2l0J30pLnJlcGxhY2UoJywnLCcnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PmxvY2F0aW9uLnJlbG9hZCgpLDE1MDApOwogICAgICAgICAgICB9IGVsc2UgeyBzZXRUaW1lb3V0KHZtMkZpblBvbGwsMzAwMCk7IH0KICAgICAgICB9KS5jYXRjaCgoKT0+c2V0VGltZW91dCh2bTJGaW5Qb2xsLDQwMDApKTsKICAgIH0KICAgIC8vIOKUgOKUgCBTb3J0ICsgRmlsdGVyIChGaW5hbmNlaXJvKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIHZhciB2bTJTUz17fTsKICAgIGZ1bmN0aW9uIHZtMkZpbkZpbHRlcihpbnAsdGlkKXsKICAgICAgICB2YXIgcT1pbnAudmFsdWUudG9Mb3dlckNhc2UoKTsKICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjJyt0aWQrJyB0Ym9keSB0cicpLmZvckVhY2goZnVuY3Rpb24ocil7CiAgICAgICAgICAgIHIuc3R5bGUuZGlzcGxheT1yLnRleHRDb250ZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihxKT4tMT8nJzonbm9uZSc7CiAgICAgICAgfSk7CiAgICB9CiAgICB2YXIgVk0yX01FUz17J2phbmVpcm8nOjEsJ2ZldmVyZWlybyc6MiwnbWFyw6dvJzozLCdtYXJjbyc6MywnYWJyaWwnOjQsJ21haW8nOjUsJ2p1bmhvJzo2LAogICAgICAgICAgICAgICAgICAgJ2p1bGhvJzo3LCdhZ29zdG8nOjgsJ3NldGVtYnJvJzo5LCdvdXR1YnJvJzoxMCwnbm92ZW1icm8nOjExLCdkZXplbWJybyc6MTJ9OwogICAgZnVuY3Rpb24gdm0yUGFyc2VOdW0odil7CiAgICAgICAgdmFyIHM9di50cmltKCkudG9Mb3dlckNhc2UoKTsKICAgICAgICAvLyAiSmFuZWlybyAyMDI1IiAvICJNYXLDp29cbjIwMjYiIOKGkiBhbm8qMTAwICsgbWVzCiAgICAgICAgdmFyIG09L14oW2EtesOhw6DDo8Oiw6nDqsOtw7PDtMO1w7rDp10rKVxzKyhcZHs0fSkkLy5leGVjKHMucmVwbGFjZSgvXHMrL2csJyAnKSk7CiAgICAgICAgaWYobSYmVk0yX01FU1ttWzFdXSl7cmV0dXJuIHBhcnNlSW50KG1bMl0pKjEwMCtWTTJfTUVTW21bMV1dO30KICAgICAgICAvLyBkYXRlIGRkL21tL3l5eXkg4oaSIHl5eXltbWRkCiAgICAgICAgdmFyIGQ9L14oXGR7MSwyfSlcLyhcZHsxLDJ9KVwvKFxkezIsNH0pJC8uZXhlYyh2LnRyaW0oKSk7CiAgICAgICAgaWYoZCl7dmFyIHk9ZFszXS5sZW5ndGg9PT0yPycyMCcrZFszXTpkWzNdO3JldHVybiBwYXJzZUludCh5K2RbMl0ucGFkU3RhcnQoMiwnMCcpK2RbMV0ucGFkU3RhcnQoMiwnMCcpKTt9CiAgICAgICAgLy8gbmVnYXRpdmUgaW5kaWNhdG9yCiAgICAgICAgdmFyIG5lZz12LmluZGV4T2YoJ+KWvCcpPi0xPy0xOjE7CiAgICAgICAgdmFyIG49cGFyc2VGbG9hdCh2LnJlcGxhY2UoL1tSJFxzJXjilrLilrxdL2csJycpLnJlcGxhY2UoL1wuL2csJycpLnJlcGxhY2UoJywnLCcuJykpOwogICAgICAgIHJldHVybiBpc05hTihuKT9udWxsOm5lZypuOwogICAgfQogICAgZnVuY3Rpb24gdm0yRmluU29ydCh0aWQsY29sLGZvcmNlRGVzYyl7CiAgICAgICAgdmFyIGtleT10aWQrJ18nK2NvbDsKICAgICAgICB2YXIgYXNjPWZvcmNlRGVzYz09PXRydWU/ZmFsc2U6KGZvcmNlRGVzYz09PWZhbHNlP3RydWU6dm0yU1Nba2V5XSE9PSdhc2MnKTsKICAgICAgICB2bTJTU1trZXldPWFzYz8nYXNjJzonZGVzYyc7CiAgICAgICAgdmFyIHRib2R5PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnK3RpZCsnIHRib2R5Jyk7CiAgICAgICAgaWYoIXRib2R5KXJldHVybjsKICAgICAgICB2YXIgcm93cz1BcnJheS5mcm9tKHRib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJykpOwogICAgICAgIHJvd3Muc29ydChmdW5jdGlvbihhLGIpewogICAgICAgICAgICB2YXIgYXY9KGEuY2VsbHNbY29sXT9hLmNlbGxzW2NvbF0udGV4dENvbnRlbnQ6JycpLnRyaW0oKTsKICAgICAgICAgICAgdmFyIGJ2PShiLmNlbGxzW2NvbF0/Yi5jZWxsc1tjb2xdLnRleHRDb250ZW50OicnKS50cmltKCk7CiAgICAgICAgICAgIHZhciBhbj12bTJQYXJzZU51bShhdiksYm49dm0yUGFyc2VOdW0oYnYpOwogICAgICAgICAgICBpZihhbiE9PW51bGwmJmJuIT09bnVsbClyZXR1cm4gYXNjP2FuLWJuOmJuLWFuOwogICAgICAgICAgICByZXR1cm4gYXNjP2F2LmxvY2FsZUNvbXBhcmUoYnYsJ3B0LUJSJyk6YnYubG9jYWxlQ29tcGFyZShhdiwncHQtQlInKTsKICAgICAgICB9KTsKICAgICAgICByb3dzLmZvckVhY2goZnVuY3Rpb24ocil7dGJvZHkuYXBwZW5kQ2hpbGQocik7fSk7CiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnIycrdGlkKycgLnZtMnNpJykuZm9yRWFjaChmdW5jdGlvbihzKXsKICAgICAgICAgICAgdmFyIGM9cGFyc2VJbnQocy5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sJykpOwogICAgICAgICAgICBzLnRleHRDb250ZW50PWM9PT1jb2w/KGFzYz8n4payJzon4pa8Jyk6J+KHhSc7CiAgICAgICAgICAgIHMuc3R5bGUuY29sb3I9Yz09PWNvbD8nIzdjM2FlZCc6JyM5Y2EzYWYnOwogICAgICAgIH0pOwogICAgfQogICAgLy8gT3JkZW5hw6fDo28gcGFkcsOjbzogcG9yIG3DqnMgZGVzYyAobWFpcyByZWNlbnRlIHByaW1laXJvKQogICAgLy8gRXhlY3V0YWRvIGlubGluZSDigJQgdGFiZWxhIGrDoSBlc3TDoSBubyBET00gcXVhbmRvIG8gc2NyaXB0IHJvZGEKICAgIChmdW5jdGlvbigpewogICAgICAgIGlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZmluLWRyZScpKSB2bTJGaW5Tb3J0KCd2bTItZmluLWRyZScsMCx0cnVlKTsKICAgICAgICBpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLWZpbi1yZWMnKSkgdm0yRmluU29ydCgndm0yLWZpbi1yZWMnLDAsdHJ1ZSk7CiAgICAgICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1maW4tcGFnJykpIHZtMkZpblNvcnQoJ3ZtMi1maW4tcGFnJywwLHRydWUpOwogICAgICAgIGlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZmluLXdvbycpKSB2bTJGaW5Tb3J0KCd2bTItZmluLXdvbycsNix0cnVlKTsKICAgIH0pKCk7CiAgICA8P3BocCBpZiAoJHN5bmNpbmcpIDogPz4KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZmluLXN5bmMtYnRuJykuZGlzYWJsZWQ9dHJ1ZTsKICAgIHZtMkZpblBvbGxTdGFydD1EYXRlLm5vdygpOyB2bTJGaW5Qb2xsKCk7CiAgICA8P3BocCBlbmRpZjsgPz4KICAgIDwvc2NyaXB0PgogICAgPD9waHAKfQoKLy8g4pSA4pSAIFRBQiBEUkUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9maW5fdGFiX2RyZSggJHJvd3MsICRzZWxfbW9udGggKSB7CiAgICBpZiAoIGVtcHR5KCRyb3dzKSB8fCAhaXNfYXJyYXkoJHJvd3MpICkgewogICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NjBweDtjb2xvcjojOWNhM2FmIj5TZW0gZGFkb3Mg4oCUIHNpbmNyb25pemUgYSBwbGFuaWxoYS48L2Rpdj4nOyByZXR1cm47CiAgICB9CiAgICBbJHN5LCRzbV0gPSBleHBsb2RlKCctJywkc2VsX21vbnRoKTsKICAgICRtbmFtZXMgPSBbJzAxJz0+J2phbmVpcm8nLCcwMic9PidmZXZlcmVpcm8nLCcwMyc9PidtYXLDp28nLCcwNCc9PidhYnJpbCcsJzA1Jz0+J21haW8nLCcwNic9PidqdW5obycsCiAgICAgICAgICAgICAgICcwNyc9PidqdWxobycsJzA4Jz0+J2Fnb3N0bycsJzA5Jz0+J3NldGVtYnJvJywnMTAnPT4nb3V0dWJybycsJzExJz0+J25vdmVtYnJvJywnMTInPT4nZGV6ZW1icm8nXTsKICAgICRzZWxfbW5hbWUgPSAkbW5hbWVzWyRzbV0gPz8gJyc7CiAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206MTJweDtmbGV4LXdyYXA6d3JhcCI+JzsKICAgIGVjaG8gJzxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNkYmVhZmU7Y29sb3I6IzFkNGVkODtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjIwcHg7bGV0dGVyLXNwYWNpbmc6LjVweCI+8J+StSBSRUdJTUUgREUgQ0FJWEE8L3NwYW4+JzsKICAgIGVjaG8gJzxzcGFuIHN0eWxlPSJjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxMnB4Ij5SZWNlaXRhcyBlIGRlc3Blc2FzIHBlbG8gbcOqcyBlbSBxdWUgbyBkaW5oZWlybyBlbnRyb3Uvc2FpdTwvc3Bhbj4nOwogICAgZWNobyAnPC9kaXY+JzsKICAgIHZtMl9maW5fZmlsdGVyX2Jhcigndm0yLWZpbi1kcmUnLCAnRmlsdHJhciBwb3IgbcOqcy4uLicpOwogICAgZWNobyAnPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDphdXRvIj4nOwogICAgZWNobyAnPHRhYmxlIGlkPSJ2bTItZmluLWRyZSIgc3R5bGU9IndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEycHg7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjA4KTttaW4td2lkdGg6ODAwcHgiPic7CiAgICB2bTJfZmluX3RoZWFkKFsnTcOqcycsJ1ZlbmRhcycsJ0N1c3RvJywnQnJ1dG8gVk0nLCdNa3QnLCdMw61xdWlkbycsJ00uQnJ1dGEnLCdST0FTJywndnMgQW50LiddLCAndm0yLWZpbi1kcmUnLCAxKTsKICAgIGVjaG8gJzx0Ym9keT4nOwogICAgZm9yZWFjaCAoJHJvd3MgYXMgJHJvdykgewogICAgICAgIGlmICghaXNfYXJyYXkoJHJvdyl8fGVtcHR5KCRyb3dbJ21lcyddKSkgY29udGludWU7CiAgICAgICAgJGlzX2N1ciA9IHN0cnRvbG93ZXIoJHJvd1snbWVzJ10pID09PSAkc2VsX21uYW1lOwogICAgICAgICRiZyAgICAgPSAkaXNfY3VyID8gJ2JhY2tncm91bmQ6I2Y1ZjNmZjsnIDogJyc7CiAgICAgICAgJGZ3ICAgICA9ICRpc19jdXIgPyAnZm9udC13ZWlnaHQ6NzAwOycgOiAnJzsKICAgICAgICAkYmwgICAgID0gJGlzX2N1ciA/ICdib3JkZXItbGVmdDo0cHggc29saWQgIzdjM2FlZDsnIDogJ2JvcmRlci1sZWZ0OjRweCBzb2xpZCB0cmFuc3BhcmVudDsnOwogICAgICAgICRsaXEgICAgPSAoZmxvYXQpKCRyb3dbJ2xpcXVpZG8nXT8/MCk7CiAgICAgICAgJGxjICAgICA9ICRsaXE+PTAgPyAnIzA2NWY0NicgOiAnIzk5MWIxYic7CiAgICAgICAgJHZzICAgICA9IGlzc2V0KCRyb3dbJ3ZzX21lc19hbnRlcmlvciddKSYmJHJvd1sndnNfbWVzX2FudGVyaW9yJ10hPT0nJyA/IChmbG9hdCkkcm93Wyd2c19tZXNfYW50ZXJpb3InXSA6IG51bGw7CiAgICAgICAgJHZzX3MgICA9ICR2cyE9PW51bGwgPyAoJHZzPj0wPyfilrIgJzon4pa8ICcpLm51bWJlcl9mb3JtYXQoYWJzKCR2cykqMTAwLDEsJywnLCcuJykuJyUnIDogJ+KAlCc7CiAgICAgICAgJHZzX2MgICA9ICR2cyE9PW51bGwmJiR2cz49MCA/ICcjMDU5NjY5JyA6ICcjZGMyNjI2JzsKICAgICAgICBlY2hvICI8dHIgc3R5bGU9J2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmM2Y0ZjY7eyRiZ317JGJsfSc+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3skZnd9dGV4dC1hbGlnbjpyaWdodCc+Ii5lc2NfaHRtbCh1Y2ZpcnN0KCRyb3dbJ21lcyddKSkuKCRpc19jdXI/JyDil4QnOicnKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7eyRmd310ZXh0LWFsaWduOnJpZ2h0Jz4iLnZtMl9maW5fZm10X3IoJHJvd1sndmVuZGFzJ10/PyRyb3dbJ3ZlbmRhJ10/PzApLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiM2YjcyODAnPiIudm0yX2Zpbl9mbXRfcigkcm93WydjdXN0byddPz8kcm93WydjdXN0b19kaXJldG8nXT8/MCkuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246cmlnaHQnPiIudm0yX2Zpbl9mbXRfcigkcm93WydicnV0byddPz8kcm93WydicnV0b192aXZhbWFpcyddPz8wKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojNmI3MjgwJz4iLnZtMl9maW5fZm10X3IoJHJvd1snbWt0J10/PyRyb3dbJ21hcmtldGluZyddPz8wKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjp7JGxjfTtmb250LXdlaWdodDo2MDAnPiIudm0yX2Zpbl9mbXRfcigkbGlxKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodCc+Ii5udW1iZXJfZm9ybWF0KChmbG9hdCkoJHJvd1snbWFyZ2VtX2JydXRhJ10/PzApKjEwMCwxLCcsJywnLicpLiclJy4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodCc+Ii5udW1iZXJfZm9ybWF0KChmbG9hdCkoJHJvd1sncm9hcyddPz8wKSwyLCcsJywnLicpLid4Jy4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjp7JHZzX2N9Jz57JHZzX3N9PC90ZD4iOwogICAgICAgIGVjaG8gIjwvdHI+IjsKICAgIH0KICAgIGVjaG8gJzwvdGJvZHk+PC90YWJsZT48L2Rpdj4nOwp9CgovLyDilIDilIAgVEFCIEEgUkVDRUJFUiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8g4pSA4pSAIEhFTFBFUjogQm90w6NvIFdoYXRzQXBwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfZmluX3dhX2J0biggJHdhICkgewogICAgJHdhID0gdHJpbSgoc3RyaW5nKSR3YSk7CiAgICBpZiAoICR3YSA9PT0gJycgfHwgJHdhID09PSAn4oCUJyApIHJldHVybiAnPHNwYW4gc3R5bGU9ImNvbG9yOiM5Y2EzYWYiPuKAlDwvc3Bhbj4nOwogICAgJGNsZWFuID0gcHJlZ19yZXBsYWNlKCcvXEQvJywgJycsICR3YSk7CiAgICBpZiAoIHN0cmxlbigkY2xlYW4pID09PSAxMSApICRjbGVhbiA9ICc1NScgLiAkY2xlYW47CiAgICBlbHNlaWYgKCBzdHJsZW4oJGNsZWFuKSA9PT0gMTAgKSAkY2xlYW4gPSAnNTUnIC4gJGNsZWFuOwogICAgcmV0dXJuICI8YSBocmVmPSdodHRwczovL3dhLm1lL3skY2xlYW59JyB0YXJnZXQ9J19ibGFuaycgIgogICAgICAgICAuICJzdHlsZT0nZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweDtiYWNrZ3JvdW5kOiNkY2ZjZTc7Y29sb3I6IzE1ODAzZDsiCiAgICAgICAgIC4gInBhZGRpbmc6M3B4IDlweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO3RleHQtZGVjb3JhdGlvbjpub25lO3doaXRlLXNwYWNlOm5vd3JhcCc+IgogICAgICAgICAuICLwn5KsICIgLiBlc2NfaHRtbCgkd2EpIC4gIjwvYT4iOwp9CgovLyDilIDilIAgSEVMUEVSOiBQYXJzZSBkYXRhIEREL01NL1lZWVkgcGFyYSB0aW1lc3RhbXAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9maW5fcGFyc2VfZGF0ZV9mZXN0YSggJGRmICkgewogICAgaWYgKCBwcmVnX21hdGNoKCcjXihcZHsxLDJ9KS8oXGR7MSwyfSkvKFxkezIsNH0pJCMnLCAkZGYsICRtKSApIHsKICAgICAgICAkeSA9ICRtWzNdOyBpZiAoIHN0cmxlbigkeSkgPT09IDIgKSAkeSA9ICcyMCcgLiAkeTsKICAgICAgICByZXR1cm4gbWt0aW1lKDEyLCAwLCAwLCAoaW50KSRtWzJdLCAoaW50KSRtWzFdLCAoaW50KSR5KTsKICAgIH0KICAgIHJldHVybiBzdHJ0b3RpbWUoJGRmKSA/OiAwOwp9CgpmdW5jdGlvbiB2bTJfZmluX3RhYl9yZWNlYmVyKCAkcm93cywgJHNlbF9tb250aCApIHsKICAgIGlmIChlbXB0eSgkcm93cyl8fCFpc19hcnJheSgkcm93cykpIHsKICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjYwcHg7Y29sb3I6IzljYTNhZiI+U2VtIGRhZG9zIOKAlCBzaW5jcm9uaXplIGEgcGxhbmlsaGEuPC9kaXY+JzsgcmV0dXJuOwogICAgfQogICAgJGZpbHRlcmVkID0gYXJyYXlfdmFsdWVzKGFycmF5X2ZpbHRlcigkcm93cywgZnVuY3Rpb24oJHIpIHVzZSgkc2VsX21vbnRoKXsKICAgICAgICBpZihpc3NldCgkclsnZGF0YV9mZXN0YV95bSddKSYmIWVtcHR5KCRyWydkYXRhX2Zlc3RhX3ltJ10pKSByZXR1cm4gJHJbJ2RhdGFfZmVzdGFfeW0nXT09PSRzZWxfbW9udGg7CiAgICAgICAgJGRmID0gJHJbJ2RhdGFfZmVzdGEnXT8/Jyc7CiAgICAgICAgaWYoISRkZikgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmKHByZWdfbWF0Y2goJyNeKFxkezEsMn0pLyhcZHsxLDJ9KS8oXGR7Miw0fSkkIycsJGRmLCRtKSl7JHk9JG1bM107aWYoc3RybGVuKCR5KT09PTIpJHk9JzIwJy4keTtyZXR1cm4gc3ByaW50ZignJTA0ZC0lMDJkJywkeSwkbVsyXSk9PT0kc2VsX21vbnRoO30KICAgICAgICAkdHM9c3RydG90aW1lKCRkZik7IGlmKCR0cykgcmV0dXJuIGRhdGUoJ1ktbScsJHRzKT09PSRzZWxfbW9udGg7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSkpOwogICAgaWYgKGVtcHR5KCRmaWx0ZXJlZCkpIHsgZWNobyAnPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0MHB4O2NvbG9yOiM5Y2EzYWYiPk5lbmh1bSByZWdpc3RybyBwYXJhICcuZXNjX2h0bWwodm0yX21vbnRoX2xhYmVsX3B0KCRzZWxfbW9udGgpKS4nLjwvZGl2Pic7IHJldHVybjsgfQogICAgLy8gT3JkZW5hciBBU0MgcG9yIGRhdGEgZGEgZmVzdGEKICAgIHVzb3J0KCRmaWx0ZXJlZCwgZnVuY3Rpb24oJGEsJGIpewogICAgICAgIHJldHVybiB2bTJfZmluX3BhcnNlX2RhdGVfZmVzdGEoJGFbJ2RhdGFfZmVzdGEnXT8/JycpIDw9PiB2bTJfZmluX3BhcnNlX2RhdGVfZmVzdGEoJGJbJ2RhdGFfZmVzdGEnXT8/JycpOwogICAgfSk7CiAgICAkdG90X2U9MDsgJHRvdF9mPTA7ICRjbnRfcGFnbz0wOwogICAgdm0yX2Zpbl9maWx0ZXJfYmFyKCd2bTItZmluLXJlYycsICdGaWx0cmFyIHBvciBkYXRhLCBXaGF0c0FwcC4uLicpOwogICAgZWNobyAnPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDphdXRvIj4nOwogICAgZWNobyAnPHRhYmxlIGlkPSJ2bTItZmluLXJlYyIgc3R5bGU9IndpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEycHg7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjA4KSI+JzsKICAgIHZtMl9maW5fdGhlYWQoWydEYXRhIEZlc3RhJywnV2hhdHNBcHAnLCdFbnRyYWRhJywnRmluYWwnLCdTdGF0dXMnXSwgJ3ZtMi1maW4tcmVjJywgMik7CiAgICBlY2hvICc8dGJvZHk+JzsKICAgIGZvcmVhY2ggKCRmaWx0ZXJlZCBhcyAkcikgewogICAgICAgICRlPShmbG9hdCkoJHJbJ2VudHJhZGEnXT8/MCk7ICRmPShmbG9hdCkoJHJbJ2ZpbmFsX3ZhbG9yJ10/PyRyWydmaW5hbCddPz8wKTsKICAgICAgICAkcGFnb19yYXc9JHJbJ3N0YXR1c19lbnRyYWRhJ10/PygkclsncGFnbyddPz9udWxsKTsKICAgICAgICAkcGFnbz0oJHBhZ29fcmF3PT09dHJ1ZXx8JHBhZ29fcmF3PT09MXx8c3RydG91cHBlcigoc3RyaW5nKSRwYWdvX3Jhdyk9PT0nU0lNJyk7CiAgICAgICAgaWYoJHBhZ28pJGNudF9wYWdvKys7CiAgICAgICAgJHRvdF9lKz0kZTsgJHRvdF9mKz0kZjsKICAgICAgICAkYmFkZ2U9JHBhZ28/JzxzcGFuIHN0eWxlPSJwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZDFmYWU1O2NvbG9yOiMwNjVmNDYiPuKchSBQYWdvPC9zcGFuPicKICAgICAgICAgICAgICAgICAgICA6JzxzcGFuIHN0eWxlPSJwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZmVmM2M3O2NvbG9yOiM5MjQwMGUiPuKPsyBQZW5kZW50ZTwvc3Bhbj4nOwogICAgICAgIGVjaG8gIjx0ciBzdHlsZT0nYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2YzZjRmNic+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMCc+Ii5lc2NfaHRtbCgkclsnZGF0YV9mZXN0YSddPz8n4oCUJykuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4Jz4iLnZtMl9maW5fd2FfYnRuKCRyWyd3aGF0c2FwcCddPz8nJykuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LWFsaWduOnJpZ2h0Jz4iLnZtMl9maW5fZm10X3IoJGUpLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOnJpZ2h0Jz4iLigkZj4wP3ZtMl9maW5fZm10X3IoJGYpOifigJQnKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHgnPnskYmFkZ2V9PC90ZD4iOwogICAgICAgIGVjaG8gIjwvdHI+IjsKICAgIH0KICAgIGVjaG8gJzwvdGJvZHk+JzsKICAgIGVjaG8gIjx0Zm9vdD48dHIgc3R5bGU9J2JhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXItdG9wOjJweCBzb2xpZCAjZTVlN2ViJz4iOwogICAgZWNobyAiPHRkIGNvbHNwYW49JzInIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzcHgnPiIuY291bnQoJGZpbHRlcmVkKS4iIHJlZ2lzdHJvKHMpIOKAlCB7JGNudF9wYWdvfSBwYWdvKHMpPC90ZD4iOwogICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzEwYjk4MTt0ZXh0LWFsaWduOnJpZ2h0Jz4iLnZtMl9maW5fZm10X3IoJHRvdF9lKS4iPC90ZD4iOwogICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzNiODJmNjt0ZXh0LWFsaWduOnJpZ2h0Jz4iLigkdG90X2Y+MD92bTJfZmluX2ZtdF9yKCR0b3RfZik6J+KAlCcpLiI8L3RkPiI7CiAgICBlY2hvICI8dGQ+PC90ZD48L3RyPjwvdGZvb3Q+PC90YWJsZT48L2Rpdj4iOwp9CgovLyDilIDilIAgVEFCIEEgUEFHQVIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9maW5fdGFiX3BhZ2FyKCAkcm93cywgJHNlbF9tb250aCApIHsKICAgIGlmIChlbXB0eSgkcm93cyl8fCFpc19hcnJheSgkcm93cykpIHsKICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjYwcHg7Y29sb3I6IzljYTNhZiI+U2VtIGRhZG9zIOKAlCBzaW5jcm9uaXplIGEgcGxhbmlsaGEuPC9kaXY+JzsgcmV0dXJuOwogICAgfQogICAgJGZpbHRlcmVkID0gYXJyYXlfdmFsdWVzKGFycmF5X2ZpbHRlcigkcm93cywgZnVuY3Rpb24oJHIpIHVzZSgkc2VsX21vbnRoKXsKICAgICAgICBpZihpc3NldCgkclsnZGF0YV9mZXN0YV95bSddKSYmIWVtcHR5KCRyWydkYXRhX2Zlc3RhX3ltJ10pKSByZXR1cm4gJHJbJ2RhdGFfZmVzdGFfeW0nXT09PSRzZWxfbW9udGg7CiAgICAgICAgJGRmID0gJHJbJ2RhdGFfZmVzdGEnXT8/Jyc7CiAgICAgICAgaWYoISRkZikgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmKHByZWdfbWF0Y2goJyNeKFxkezEsMn0pLyhcZHsxLDJ9KS8oXGR7Miw0fSkkIycsJGRmLCRtKSl7JHk9JG1bM107aWYoc3RybGVuKCR5KT09PTIpJHk9JzIwJy4keTtyZXR1cm4gc3ByaW50ZignJTA0ZC0lMDJkJywkeSwkbVsyXSk9PT0kc2VsX21vbnRoO30KICAgICAgICAkdHM9c3RydG90aW1lKCRkZik7IGlmKCR0cykgcmV0dXJuIGRhdGUoJ1ktbScsJHRzKT09PSRzZWxfbW9udGg7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSkpOwogICAgaWYgKGVtcHR5KCRmaWx0ZXJlZCkpIHsgZWNobyAnPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo0MHB4O2NvbG9yOiM5Y2EzYWYiPk5lbmh1bSByZWdpc3RybyBwYXJhICcuZXNjX2h0bWwodm0yX21vbnRoX2xhYmVsX3B0KCRzZWxfbW9udGgpKS4nLjwvZGl2Pic7IHJldHVybjsgfQogICAgLy8gT3JkZW5hciBBU0MgcG9yIGRhdGEgZGEgZmVzdGEKICAgIHVzb3J0KCRmaWx0ZXJlZCwgZnVuY3Rpb24oJGEsJGIpewogICAgICAgIHJldHVybiB2bTJfZmluX3BhcnNlX2RhdGVfZmVzdGEoJGFbJ2RhdGFfZmVzdGEnXT8/JycpIDw9PiB2bTJfZmluX3BhcnNlX2RhdGVfZmVzdGEoJGJbJ2RhdGFfZmVzdGEnXT8/JycpOwogICAgfSk7CiAgICAkdG90X2M9MDsgJHRvdF9iPTA7CiAgICB2bTJfZmluX2ZpbHRlcl9iYXIoJ3ZtMi1maW4tcGFnJywgJ0ZpbHRyYXIgcG9yIGRhdGEsIFdoYXRzQXBwLi4uJyk7CiAgICBlY2hvICc8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OmF1dG8iPic7CiAgICBlY2hvICc8dGFibGUgaWQ9InZtMi1maW4tcGFnIiBzdHlsZT0id2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMDgpIj4nOwogICAgdm0yX2Zpbl90aGVhZChbJ0RhdGEgRmVzdGEnLCdXaGF0c0FwcCcsJ1ByZcOnbyBWZW5kYScsJ0N1c3RvJywnRW50cmFkYScsJ0ZpbmFsJywnQnJ1dG8gVk0nXSwgJ3ZtMi1maW4tcGFnJywgMik7CiAgICBlY2hvICc8dGJvZHk+JzsKICAgIGZvcmVhY2ggKCRmaWx0ZXJlZCBhcyAkcikgewogICAgICAgICRjPShmbG9hdCkoJHJbJ2N1c3RvX3BhcmNlaXJvJ10/PyRyWydjdXN0byddPz8wKTsKICAgICAgICAkYj0oZmxvYXQpKCRyWydicnV0b192aXZhbWFpcyddPz8wKTsKICAgICAgICAkZW50PShmbG9hdCkoJHJbJ2VudHJhZGFfcmVjZWJpZGEnXT8/JHJbJ2VudHJhZGEnXT8/MCk7CiAgICAgICAgJGZwPShmbG9hdCkoJHJbJ2ZpbmFsX3BhZ2FyJ10/PyRyWydmaW5hbF92YWxvciddPz8wKTsKICAgICAgICAkdG90X2MrPSRjOyAkdG90X2IrPSRiOwogICAgICAgIGVjaG8gIjx0ciBzdHlsZT0nYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2YzZjRmNic+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMCc+Ii5lc2NfaHRtbCgkclsnZGF0YV9mZXN0YSddPz8n4oCUJykuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4Jz4iLnZtMl9maW5fd2FfYnRuKCRyWyd3aGF0c2FwcCddPz8kclsnY2xpZW50ZSddPz8nJykuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246cmlnaHQnPiIudm0yX2Zpbl9mbXRfcigkclsncHJlY29fdmVuZGEnXT8/MCkuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojZWY0NDQ0O3RleHQtYWxpZ246cmlnaHQnPiIudm0yX2Zpbl9mbXRfcigkYykuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246cmlnaHQnPiIudm0yX2Zpbl9mbXRfcigkZW50KS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodCc+Ii4oJGZwPjA/dm0yX2Zpbl9mbXRfcigkZnApOifigJQnKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMxMGI5ODE7dGV4dC1hbGlnbjpyaWdodCc+Ii52bTJfZmluX2ZtdF9yKCRiKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjwvdHI+IjsKICAgIH0KICAgIGVjaG8gJzwvdGJvZHk+JzsKICAgIGVjaG8gIjx0Zm9vdD48dHIgc3R5bGU9J2JhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXItdG9wOjJweCBzb2xpZCAjZTVlN2ViJz4iOwogICAgZWNobyAiPHRkIGNvbHNwYW49JzInIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzcHgnPiIuY291bnQoJGZpbHRlcmVkKS4iIHJlZ2lzdHJvKHMpPC90ZD4iOwogICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDt0ZXh0LWFsaWduOnJpZ2h0Jz48L3RkPiI7CiAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZWY0NDQ0O3RleHQtYWxpZ246cmlnaHQnPiIudm0yX2Zpbl9mbXRfcigkdG90X2MpLiI8L3RkPiI7CiAgICBlY2hvICI8dGQgY29sc3Bhbj0nMicgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4Jz48L3RkPiI7CiAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMTBiOTgxO3RleHQtYWxpZ246cmlnaHQnPiIudm0yX2Zpbl9mbXRfcigkdG90X2IpLiI8L3RkPiI7CiAgICBlY2hvICI8L3RyPjwvdGZvb3Q+PC90YWJsZT48L2Rpdj4iOwp9CgoKLy8g4pSA4pSAIEhFTFBFUjogRGlhIGRhIHNlbWFuYSBQVC1CUiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2RpYV9zZW1hbmFfcHRiciggJHRzICkgewogICAgJG1hcCA9IFsKICAgICAgICAnU3VuZGF5JyAgICA9PiAnRG9taW5nbycsCiAgICAgICAgJ01vbmRheScgICAgPT4gJ1NlZ3VuZGEtZmVpcmEnLAogICAgICAgICdUdWVzZGF5JyAgID0+ICdUZXLDp2EtZmVpcmEnLAogICAgICAgICdXZWRuZXNkYXknID0+ICdRdWFydGEtZmVpcmEnLAogICAgICAgICdUaHVyc2RheScgID0+ICdRdWludGEtZmVpcmEnLAogICAgICAgICdGcmlkYXknICAgID0+ICdTZXh0YS1mZWlyYScsCiAgICAgICAgJ1NhdHVyZGF5JyAgPT4gJ1PDoWJhZG8nLAogICAgXTsKICAgIHJldHVybiAkbWFwWyBkYXRlKCdsJywgJHRzKSBdID8/ICcnOwp9CgovLyDilIDilIAgSEVMUEVSOiBFeHRyYWlyIGRhdGEgZG8gZXZlbnRvIGRlIHVtIHBlZGlkbyBXQyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2dldF9vcmRlcl9ldmVudF90cyggJG9yZGVyICkgewogICAgZm9yZWFjaCAoICRvcmRlci0+Z2V0X2l0ZW1zKCkgYXMgJGl0ZW0gKSB7CiAgICAgICAgJGJkID0gJGl0ZW0tPmdldF9tZXRhKCd5aXRoX2Jvb2tpbmdfZGF0YScpOwogICAgICAgIGlmICggaXNfc3RyaW5nKCRiZCkgKSAkYmQgPSBtYXliZV91bnNlcmlhbGl6ZSgkYmQpOwogICAgICAgIGlmICggaXNfYXJyYXkoJGJkKSAmJiAhIGVtcHR5KCRiZFsnZnJvbSddKSApIHsKICAgICAgICAgICAgJHRzID0gaXNfbnVtZXJpYygkYmRbJ2Zyb20nXSkgPyAoaW50KSRiZFsnZnJvbSddIDogc3RydG90aW1lKCRiZFsnZnJvbSddKTsKICAgICAgICAgICAgaWYgKCAkdHMgPiAwICkgcmV0dXJuICR0czsKICAgICAgICB9CiAgICB9CiAgICBmb3JlYWNoICggWydfZGF0YV9ldmVudG8nLCdkYXRhX2V2ZW50bycsJ195aXRoX2Jvb2tpbmdfc3RhcnQnXSBhcyAkbWsgKSB7CiAgICAgICAgJHYgPSAkb3JkZXItPmdldF9tZXRhKCRtayk7CiAgICAgICAgaWYgKCAkdiApIHsKICAgICAgICAgICAgJHRzID0gaXNfbnVtZXJpYygkdikgPyAoaW50KSR2IDogc3RydG90aW1lKCR2KTsKICAgICAgICAgICAgaWYgKCAkdHMgPiAwICkgcmV0dXJuICR0czsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKfQoKLy8g4pSA4pSAIFRBQiBQb3IgRXZlbnRvIChSZWdpbWUgZGUgQ29tcGV0w6puY2lhKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2Zpbl90YWJfY29tcGV0ZW5jaWEoICRyZWNlYmVyX3Jvd3MsICRwYWdhcl9yb3dzLCAkc2VsX21vbnRoICkgewogICAgZWNobyAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjEycHg7ZmxleC13cmFwOndyYXAiPic7CiAgICBlY2hvICc8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDojZGNmY2U3O2NvbG9yOiMxNTgwM2Q7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4O2xldHRlci1zcGFjaW5nOi41cHgiPvCfk4UgUkVHSU1FIERFIENPTVBFVMOKTkNJQTwvc3Bhbj4nOwogICAgZWNobyAnPHNwYW4gc3R5bGU9ImNvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEycHgiPlJlY2VpdGFzIGUgZGVzcGVzYXMgcGVsbyBtw6pzIGVtIHF1ZSBvIGV2ZW50byBhY29udGVjZTwvc3Bhbj4nOwogICAgZWNobyAnPC9kaXY+JzsKICAgIFskc2VsX3lyLCAkc2VsX21vXSA9IGV4cGxvZGUoJy0nLCAkc2VsX21vbnRoKTsKICAgICRzZWxfa2V5ID0gJHNlbF95ciAuICRzZWxfbW87IC8vIFlZWVlNTQoKICAgICRtbmFtZXNfcHQgPSBbCiAgICAgICAgJzAxJz0+J0phbmVpcm8nLCcwMic9PidGZXZlcmVpcm8nLCcwMyc9PidNYXLDp28nLCcwNCc9PidBYnJpbCcsCiAgICAgICAgJzA1Jz0+J01haW8nLCcwNic9PidKdW5obycsJzA3Jz0+J0p1bGhvJywnMDgnPT4nQWdvc3RvJywKICAgICAgICAnMDknPT4nU2V0ZW1icm8nLCcxMCc9PidPdXR1YnJvJywnMTEnPT4nTm92ZW1icm8nLCcxMic9PidEZXplbWJybycsCiAgICBdOwoKICAgICRieV9tb250aCA9IFtdOwoKICAgIC8vIEFncnVwYSBBIFJFQ0VCRVIgcG9yIG3DqnMgZG8gZXZlbnRvCiAgICBmb3JlYWNoICgoYXJyYXkpJHJlY2ViZXJfcm93cyBhcyAkcikgewogICAgICAgICRkZiA9IHRyaW0oJHJbJ2RhdGFfZmVzdGEnXSA/PyAnJyk7CiAgICAgICAgaWYgKCEkZGYpIGNvbnRpbnVlOwogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkZGYpOwogICAgICAgIGlmIChjb3VudCgkcGFydHMpIDwgMykgY29udGludWU7CiAgICAgICAgJG1lc19udW0gPSBzcHJpbnRmKCclMDJkJywgKGludCkkcGFydHNbMV0pOwogICAgICAgICRhbm9fbnVtID0gc3ByaW50ZignJTA0ZCcsIChpbnQpJHBhcnRzWzJdKTsKICAgICAgICAka2V5ID0gJGFub19udW0gLiAkbWVzX251bTsKICAgICAgICBpZiAoIWlzc2V0KCRieV9tb250aFska2V5XSkpIHsKICAgICAgICAgICAgJGJ5X21vbnRoWyRrZXldID0gWwogICAgICAgICAgICAgICAgJ2xhYmVsJyAgICAgPT4gKCRtbmFtZXNfcHRbJG1lc19udW1dID8/ICc/JykgLiAnICcgLiAkYW5vX251bSwKICAgICAgICAgICAgICAgICdyZWNlaXRhJyAgID0+IDAsICdyZWNlYmlkbycgID0+IDAsICdhX3JlY2ViZXInID0+IDAsCiAgICAgICAgICAgICAgICAnY3VzdG8nICAgICA9PiAwLCAncGFnb19wYXJjJyA9PiAwLCAnYV9wYWdhcicgICA9PiAwLAogICAgICAgICAgICAgICAgJ2JydXRvJyAgICAgPT4gMCwgJ25fZXZlbnRvcycgPT4gMCwKICAgICAgICAgICAgXTsKICAgICAgICB9CiAgICAgICAgJGVudHJhZGEgPSAoZmxvYXQpKCRyWydlbnRyYWRhJ10gPz8gMCk7CiAgICAgICAgJGZpbmFsICAgPSAoZmxvYXQpKCRyWydmaW5hbCddICAgPz8gMCk7CiAgICAgICAgJHBhZ28gICAgPSAhZW1wdHkoJHJbJ3BhZ28nXSk7CiAgICAgICAgJGJ5X21vbnRoWyRrZXldWydyZWNlaXRhJ10gICArPSAkZW50cmFkYSArICRmaW5hbDsKICAgICAgICAkYnlfbW9udGhbJGtleV1bJ3JlY2ViaWRvJ10gICs9ICRlbnRyYWRhICsgKCRwYWdvID8gJGZpbmFsIDogMCk7CiAgICAgICAgJGJ5X21vbnRoWyRrZXldWydhX3JlY2ViZXInXSArPSAkcGFnbyA/IDAgOiAkZmluYWw7CiAgICAgICAgJGJ5X21vbnRoWyRrZXldWyduX2V2ZW50b3MnXSArPSAxOwogICAgfQoKICAgIC8vIEFncnVwYSBBIFBBR0FSIHBvciBtw6pzIGRvIGV2ZW50bwogICAgZm9yZWFjaCAoKGFycmF5KSRwYWdhcl9yb3dzIGFzICRyKSB7CiAgICAgICAgJGRmID0gdHJpbSgkclsnZGF0YV9mZXN0YSddID8/ICcnKTsKICAgICAgICBpZiAoISRkZikgY29udGludWU7CiAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnLycsICRkZik7CiAgICAgICAgaWYgKGNvdW50KCRwYXJ0cykgPCAzKSBjb250aW51ZTsKICAgICAgICAkbWVzX251bSA9IHNwcmludGYoJyUwMmQnLCAoaW50KSRwYXJ0c1sxXSk7CiAgICAgICAgJGFub19udW0gPSBzcHJpbnRmKCclMDRkJywgKGludCkkcGFydHNbMl0pOwogICAgICAgICRrZXkgPSAkYW5vX251bSAuICRtZXNfbnVtOwogICAgICAgIGlmICghaXNzZXQoJGJ5X21vbnRoWyRrZXldKSkgewogICAgICAgICAgICAkYnlfbW9udGhbJGtleV0gPSBbCiAgICAgICAgICAgICAgICAnbGFiZWwnICAgICA9PiAoJG1uYW1lc19wdFskbWVzX251bV0gPz8gJz8nKSAuICcgJyAuICRhbm9fbnVtLAogICAgICAgICAgICAgICAgJ3JlY2VpdGEnICAgPT4gMCwgJ3JlY2ViaWRvJyAgPT4gMCwgJ2FfcmVjZWJlcicgPT4gMCwKICAgICAgICAgICAgICAgICdjdXN0bycgICAgID0+IDAsICdwYWdvX3BhcmMnID0+IDAsICdhX3BhZ2FyJyAgID0+IDAsCiAgICAgICAgICAgICAgICAnYnJ1dG8nICAgICA9PiAwLCAnbl9ldmVudG9zJyA9PiAwLAogICAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgICAkYnlfbW9udGhbJGtleV1bJ2N1c3RvJ10gICAgICs9IChmbG9hdCkoJHJbJ2N1c3RvX3BhcmNlaXJvJ10gPz8gMCk7CiAgICAgICAgJGJ5X21vbnRoWyRrZXldWydwYWdvX3BhcmMnXSArPSAoZmxvYXQpKCRyWydlbnRyYWRhX3JlY2ViaWRhJ10gPz8gJHJbJ2VudHJhZGEnXSA/PyAwKTsKICAgICAgICAkYnlfbW9udGhbJGtleV1bJ2FfcGFnYXInXSAgICs9IChmbG9hdCkoJHJbJ2ZpbmFsX3BhZ2FyJ10gPz8gMCk7CiAgICAgICAgJGJ5X21vbnRoWyRrZXldWydicnV0byddICAgICArPSAoZmxvYXQpKCRyWydicnV0b192aXZhbWFpcyddID8/IDApOwogICAgfQoKICAgIC8vIEluY2x1aSBldmVudG9zIGZ1dHVyb3MgZGEgQUdFTkRBIChtZXNlcyBzZW0gZGFkb3MgZmluYW5jZWlyb3MgYWluZGEpCiAgICAkZ3NfZXZlbnRzID0gZ2V0X29wdGlvbigndm0yX2FnZW5kYV9nc2hlZXRzJywgW10pOwogICAgZm9yZWFjaCAoKGFycmF5KSRnc19ldmVudHMgYXMgJGV2KSB7CiAgICAgICAgJGRmID0gdHJpbSgkZXZbJ2RhdGFfZmVzdGEnXSA/PyAkZXZbJ2RhdGEnXSA/PyAnJyk7CiAgICAgICAgaWYgKCEkZGYpIGNvbnRpbnVlOwogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkZGYpOwogICAgICAgIGlmIChjb3VudCgkcGFydHMpIDwgMykgY29udGludWU7CiAgICAgICAgJG1lc19udW0gPSBzcHJpbnRmKCclMDJkJywgKGludCkkcGFydHNbMV0pOwogICAgICAgICRhbm9fbnVtID0gc3ByaW50ZignJTA0ZCcsIChpbnQpJHBhcnRzWzJdKTsKICAgICAgICAka2V5ID0gJGFub19udW0gLiAkbWVzX251bTsKICAgICAgICBpZiAoIWlzc2V0KCRieV9tb250aFska2V5XSkpIHsKICAgICAgICAgICAgJGJ5X21vbnRoWyRrZXldID0gWwogICAgICAgICAgICAgICAgJ2xhYmVsJyAgICAgICA9PiAoJG1uYW1lc19wdFskbWVzX251bV0gPz8gJz8nKSAuICcgJyAuICRhbm9fbnVtLAogICAgICAgICAgICAgICAgJ3JlY2VpdGEnICAgICA9PiAwLCAncmVjZWJpZG8nICA9PiAwLCAnYV9yZWNlYmVyJyA9PiAwLAogICAgICAgICAgICAgICAgJ2N1c3RvJyAgICAgICA9PiAwLCAncGFnb19wYXJjJyA9PiAwLCAnYV9wYWdhcicgICA9PiAwLAogICAgICAgICAgICAgICAgJ2JydXRvJyAgICAgICA9PiAwLCAnbl9ldmVudG9zJyA9PiAwLCAnYWdlbmRhX29ubHknID0+IHRydWUsCiAgICAgICAgICAgIF07CiAgICAgICAgfQogICAgICAgIC8vIHPDsyBjb250YSBldmVudG9zIGRhIGFnZW5kYSDigJQgbsOjbyBkdXBsaWNhIGNvbnRhZ2VtIGRlIEEgUkVDRUJFUgogICAgICAgIGlmICggZW1wdHkoJGJ5X21vbnRoWyRrZXldWydhZ2VuZGFfb25seSddKSApIGNvbnRpbnVlOwogICAgICAgICRieV9tb250aFska2V5XVsnbl9ldmVudG9zJ10gKz0gMTsKICAgIH0KCgogICAgLy8g4pSA4pSA4pSAIEZvbnRlIFdDOiBwZWRpZG9zIGNvbSBkYXRhIGRvIGV2ZW50byB2aWEgWUlUSCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIC8vIFByZWVuY2hlIG1lc2VzIHF1ZSBvIEEgUkVDRUJFUiBuw6NvIGNvYnJlIChleDogZXZlbnRvcyBmdXR1cm9zIHJlY8OpbS12ZW5kaWRvcykKICAgICRyZWNlYmVyX21vbnRocyA9IFtdOwogICAgZm9yZWFjaCAoIChhcnJheSkkcmVjZWJlcl9yb3dzIGFzICRyICkgewogICAgICAgICRkZiA9IHRyaW0oJHJbJ2RhdGFfZmVzdGEnXSA/PyAnJyk7CiAgICAgICAgaWYgKCAhJGRmICkgY29udGludWU7CiAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnLycsICRkZik7CiAgICAgICAgaWYgKCBjb3VudCgkcGFydHMpIDwgMyApIGNvbnRpbnVlOwogICAgICAgICRyZWNlYmVyX21vbnRoc1sgc3ByaW50ZignJTA0ZCUwMmQnLCAoaW50KSRwYXJ0c1syXSwgKGludCkkcGFydHNbMV0pIF0gPSB0cnVlOwogICAgfQoKICAgIGlmICggZnVuY3Rpb25fZXhpc3RzKCd3Y19nZXRfb3JkZXJzJykgKSB7CiAgICAgICAgJHdjX3N0YXR1c2VzID0gWydwcm9jZXNzaW5nJywnY29udHJhY3Qtc2lnbmVkJywnc2lnbmluZy1wZW5kaW5nJywnb24taG9sZCcsJ2NvbXBsZXRlZCddOwogICAgICAgICR3Y19vcmRlcnMgICA9IHdjX2dldF9vcmRlcnMoWwogICAgICAgICAgICAnc3RhdHVzJyAgPT4gJHdjX3N0YXR1c2VzLAogICAgICAgICAgICAnbGltaXQnICAgPT4gMTAwMCwKICAgICAgICAgICAgJ29yZGVyYnknID0+ICdkYXRlJywKICAgICAgICAgICAgJ29yZGVyJyAgID0+ICdERVNDJywKICAgICAgICBdKTsKICAgICAgICBmb3JlYWNoICggJHdjX29yZGVycyBhcyAkd29yZGVyICkgewogICAgICAgICAgICAkZXZfdHMgPSB2bTJfZ2V0X29yZGVyX2V2ZW50X3RzKCAkd29yZGVyICk7CiAgICAgICAgICAgIGlmICggISAkZXZfdHMgKSBjb250aW51ZTsKICAgICAgICAgICAgJG1lc19udW0gPSBzcHJpbnRmKCclMDJkJywgKGludCkgd3BfZGF0ZSgnbScsICRldl90cykgKTsKICAgICAgICAgICAgJGFub19udW0gPSBzcHJpbnRmKCclMDRkJywgKGludCkgd3BfZGF0ZSgnWScsICRldl90cykgKTsKICAgICAgICAgICAgJGtleSAgICAgPSAkYW5vX251bSAuICRtZXNfbnVtOwogICAgICAgICAgICAvLyBTw7MgYWRpY2lvbmEgc2UgQSBSRUNFQkVSIGFpbmRhIG7Do28gY29icmUgZXN0ZSBtw6pzCiAgICAgICAgICAgIGlmICggISBlbXB0eSgkcmVjZWJlcl9tb250aHNbJGtleV0pICkgY29udGludWU7CiAgICAgICAgICAgIGlmICggISBpc3NldCgkYnlfbW9udGhbJGtleV0pICkgewogICAgICAgICAgICAgICAgJGJ5X21vbnRoWyRrZXldID0gWwogICAgICAgICAgICAgICAgICAgICdsYWJlbCcgICAgICA9PiAoJG1uYW1lc19wdFskbWVzX251bV0gPz8gJz8nKSAuICcgJyAuICRhbm9fbnVtLAogICAgICAgICAgICAgICAgICAgICdyZWNlaXRhJyAgICA9PiAwLCAncmVjZWJpZG8nICAgPT4gMCwgJ2FfcmVjZWJlcicgPT4gMCwKICAgICAgICAgICAgICAgICAgICAnY3VzdG8nICAgICAgPT4gMCwgJ3BhZ29fcGFyYycgID0+IDAsICdhX3BhZ2FyJyAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgJ2JydXRvJyAgICAgID0+IDAsICduX2V2ZW50b3MnICA9PiAwLCAnd2Nfc291cmNlJyA9PiB0cnVlLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdG90YWwgPSAoZmxvYXQpICR3b3JkZXItPmdldF90b3RhbCgpOwogICAgICAgICAgICAkc3QgICAgPSAkd29yZGVyLT5nZXRfc3RhdHVzKCk7CiAgICAgICAgICAgICRieV9tb250aFska2V5XVsncmVjZWl0YSddICAgKz0gJHRvdGFsOwogICAgICAgICAgICAkYnlfbW9udGhbJGtleV1bJ25fZXZlbnRvcyddICs9IDE7CiAgICAgICAgICAgIGlmICggaW5fYXJyYXkoJHN0LCBbJ3Byb2Nlc3NpbmcnLCdjb21wbGV0ZWQnXSwgdHJ1ZSkgKSB7CiAgICAgICAgICAgICAgICAkYnlfbW9udGhbJGtleV1bJ3JlY2ViaWRvJ10gICs9ICR0b3RhbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRieV9tb250aFska2V5XVsnYV9yZWNlYmVyJ10gKz0gJHRvdGFsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGtyc29ydCgkYnlfbW9udGgpOyAvLyBtYWlzIHJlY2VudGUgcHJpbWVpcm8KCiAgICAvLyBHYXJhbnRlIHF1ZSBvIG3DqnMgYXR1YWwgc2VtcHJlIGFwYXJlY2Ugbm8gdG9wbyBkYSB0YWJlbGEKICAgICRub3dfa2V5ID0gZGF0ZSgnWW0nKTsgLy8gZXg6IDIwMjYwNgogICAgaWYgKCBpc3NldCgkYnlfbW9udGhbJG5vd19rZXldKSApIHsKICAgICAgICAkY3VyX2VudHJ5ICA9IFsgJG5vd19rZXkgPT4gJGJ5X21vbnRoWyRub3dfa2V5XSBdOwogICAgICAgIHVuc2V0KCRieV9tb250aFskbm93X2tleV0pOwogICAgICAgICRieV9tb250aCA9ICRjdXJfZW50cnkgKyAkYnlfbW9udGg7CiAgICB9CgogICAgaWYgKGVtcHR5KCRieV9tb250aCkpIHsKICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjYwcHg7Y29sb3I6IzljYTNhZiI+U2VtIGRhZG9zLiBDbGlxdWUgZW0g8J+UhCBTaW5jcm9uaXphciBwYXJhIGNhcnJlZ2FyLjwvZGl2Pic7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRzZWwgPSAkYnlfbW9udGhbJHNlbF9rZXldID8/IG51bGw7CgogICAgLy8g4pSA4pSAIEtQSSBDYXJkcyBkbyBtw6pzIHNlbGVjaW9uYWRvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgaWYgKCRzZWwpIHsKICAgICAgICAkbWFyZ2VtICAgPSAkc2VsWydyZWNlaXRhJ10gLSAkc2VsWydjdXN0byddOwogICAgICAgICRwY3RfbWcgICA9ICRzZWxbJ3JlY2VpdGEnXSA+IDAgPyAoJG1hcmdlbSAvICRzZWxbJ3JlY2VpdGEnXSAqIDEwMCkgOiAwOwogICAgICAgICRsaXFfY2FpICA9ICRzZWxbJ3JlY2ViaWRvJ10gLSAkc2VsWydwYWdvX3BhcmMnXTsKICAgICAgICAkbGlxX2NvbCAgPSAkbGlxX2NhaSA+PSAwID8gJyMxMGI5ODEnIDogJyNlZjQ0NDQnOwogICAgICAgICRjYXJkcyA9IFsKICAgICAgICAgICAgWyfwn5KwIFJlY2VpdGEgQnJ1dGEnLCAgICAgIHZtMl9maW5fZm10X3IoJHNlbFsncmVjZWl0YSddKSwgICAgJ0ZhdHVyYW1lbnRvIHRvdGFsIGRlIGV2ZW50b3MnLCAnIzEwYjk4MSddLAogICAgICAgICAgICBbJ/CfkrggQ01WJywgICAgICAgICAgICAgICAgdm0yX2Zpbl9mbXRfcigkc2VsWydjdXN0byddKSwgICAgICAnQ3VzdG8gZGFzIE1lcmNhZG9yaWFzIFZlbmRpZGFzJywgJyNlZjQ0NDQnXSwKICAgICAgICAgICAgWyfwn5OKIE1hcmdlbSBCcnV0YScsICAgICAgIHZtMl9maW5fZm10X3IoJG1hcmdlbSksICAgICAgICAgICAgbnVtYmVyX2Zvcm1hdCgkcGN0X21nLDEsJywnLCcuJykuJyUgZGUgbWFyZ2VtJywgJG1hcmdlbSA+PSAwID8gJyM3YzNhZWQnIDogJyNlZjQ0NDQnXSwKICAgICAgICAgICAgWyfinIUgUmVjZWJpZG8nLCAgICAgICAgICAgdm0yX2Zpbl9mbXRfcigkc2VsWydyZWNlYmlkbyddKSwgICAnRW50cmFkYXMgKyBmaW5haXMgY29uZmlybWFkb3MnLCAnIzNiODJmNiddLAogICAgICAgICAgICBbJ+KPsyBBIFJlY2ViZXInLCAgICAgICAgICB2bTJfZmluX2ZtdF9yKCRzZWxbJ2FfcmVjZWJlciddKSwgICdGaW5haXMgcGVuZGVudGVzIChjbGllbnRlcyknLCAnI2Y1OWUwYiddLAogICAgICAgICAgICBbJ+KchSBQYWdvIGEgUGFyY2Vpcm9zJywgICB2bTJfZmluX2ZtdF9yKCRzZWxbJ3BhZ29fcGFyYyddKSwgJ0VudHJhZGFzIHBhZ2FzIGEgcGFyY2Vpcm9zJywgJyM2MzY2ZjEnXSwKICAgICAgICAgICAgWyfij7MgQSBQYWdhciBhIFBhcmNlaXJvcycsdm0yX2Zpbl9mbXRfcigkc2VsWydhX3BhZ2FyJ10pLCAgICdGaW5haXMgZGV2aWRvcyBhIHBhcmNlaXJvcycsICcjZjk3MzE2J10sCiAgICAgICAgXTsKICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMTUwcHgsMWZyKSk7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToyMHB4Ij4nOwogICAgICAgIGZvcmVhY2ggKCRjYXJkcyBhcyBbJHRpdGxlLCR2YWwsJHN1YiwkY29sb3JdKSB7CiAgICAgICAgICAgIGVjaG8gIjxkaXYgc3R5bGU9J2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxNnB4IDE4cHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMDgpO2JvcmRlci1sZWZ0OjRweCBzb2xpZCB7JGNvbG9yfSc+IjsKICAgICAgICAgICAgZWNobyAiPGRpdiBzdHlsZT0nZm9udC1zaXplOjExcHg7Y29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjRweCc+Ii5lc2NfaHRtbCgkdGl0bGUpLiI8L2Rpdj4iOwogICAgICAgICAgICBlY2hvICI8ZGl2IHN0eWxlPSdmb250LXNpemU6MTlweDtmb250LXdlaWdodDo3MDA7Y29sb3I6eyRjb2xvcn0nPiIuZXNjX2h0bWwoJHZhbCkuIjwvZGl2PiI7CiAgICAgICAgICAgIGVjaG8gIjxkaXYgc3R5bGU9J2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWY7bWFyZ2luLXRvcDo0cHgnPiIuZXNjX2h0bWwoJHN1YikuIjwvZGl2PiI7CiAgICAgICAgICAgIGVjaG8gIjwvZGl2PiI7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzwvZGl2Pic7CgogICAgICAgIC8vIFNhbGRvIGRlIGNhaXhhIGRvIG3DqnMKICAgICAgICBlY2hvICI8ZGl2IHN0eWxlPSdiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTRweCAyMHB4O2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjA4KTttYXJnaW4tYm90dG9tOjI0cHg7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDoyMHB4O2FsaWduLWl0ZW1zOmNlbnRlcic+IjsKICAgICAgICBlY2hvICI8ZGl2PjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwJz7wn4+mIFNhbGRvIGzDrXF1aWRvIGRlIGNhaXhhIOKAlCBldmVudG9zIGVtICIuZXNjX2h0bWwoJHNlbFsnbGFiZWwnXSkuIjwvc3Bhbj48YnI+IjsKICAgICAgICBlY2hvICI8c3BhbiBzdHlsZT0nZm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToyNHB4O2NvbG9yOnskbGlxX2NvbH0nPiIudm0yX2Zpbl9mbXRfcigkbGlxX2NhaSkuIjwvc3Bhbj4iOwogICAgICAgIGVjaG8gIjxzcGFuIHN0eWxlPSdjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi1sZWZ0OjEwcHgnPnJlY2ViaWRvIGRlIGNsaWVudGVzIOKIkiBwYWdvIGEgcGFyY2Vpcm9zPC9zcGFuPjwvZGl2PiI7CiAgICAgICAgZWNobyAiPGRpdiBzdHlsZT0nY29sb3I6IzZiNzI4MDtmb250LXNpemU6MTNweCc+Ii5pbnR2YWwoJHNlbFsnbl9ldmVudG9zJ10pLiIgZXZlbnRvKHMpPC9kaXY+IjsKICAgICAgICBlY2hvICI8L2Rpdj4iOwogICAgfSBlbHNlIHsKICAgICAgICBlY2hvICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTRweCAyMHB4O2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjA4KTttYXJnaW4tYm90dG9tOjI0cHg7Y29sb3I6IzljYTNhZjt0ZXh0LWFsaWduOmNlbnRlciI+U2VtIGV2ZW50b3MgZW0gJy5lc2NfaHRtbCgoJG1uYW1lc19wdFskc2VsX21vXSA/PyAnJykuJyAnLiRzZWxfeXIpLicuPC9kaXY+JzsKICAgIH0KCiAgICAvLyDilIDilIAgVGFiZWxhIGNvbnNvbGlkYWRhIGRlIHRvZG9zIG9zIG1lc2VzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgdm0yX2Zpbl9maWx0ZXJfYmFyKCd2bTItZmluLWNvbXAnLCAnRmlsdHJhciBwb3IgbcOqcy4uLicpOwogICAgZWNobyAnPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDphdXRvIj4nOwogICAgZWNobyAnPHRhYmxlIGlkPSJ2bTItZmluLWNvbXAiIHN0eWxlPSJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMnB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLC4wOCk7bWluLXdpZHRoOjkwMHB4Ij4nOwogICAgdm0yX2Zpbl90aGVhZChbJ03DqnMgRXZlbnRvJywnRXZlbnRvcycsJ1JlY2VpdGEgQnJ1dGEnLCdDTVYnLCdNYXJnZW0gQnJ1dGEnLCclIE1nJywn4pyFIFJlY2ViaWRvJywn4o+zIEEgUmVjZWJlcicsJ+KchSBQYWdvIFBhcmMuJywn4o+zIEEgUGFnYXInXSwgJ3ZtMi1maW4tY29tcCcsIDEpOwogICAgZWNobyAnPHRib2R5Pic7CgogICAgJHRvdCA9IFsncmVjZWl0YSc9PjAsJ2N1c3RvJz0+MCwncmVjZWJpZG8nPT4wLCdhX3JlY2ViZXInPT4wLCdwYWdvX3BhcmMnPT4wLCdhX3BhZ2FyJz0+MCwnbl9ldmVudG9zJz0+MF07CgogICAgZm9yZWFjaCAoJGJ5X21vbnRoIGFzICRrZXkgPT4gJHJvdykgewogICAgICAgICRtZyAgICA9ICRyb3dbJ3JlY2VpdGEnXSAtICRyb3dbJ2N1c3RvJ107CiAgICAgICAgJHBjdCAgID0gJHJvd1sncmVjZWl0YSddID4gMCA/ICgkbWcgLyAkcm93WydyZWNlaXRhJ10gKiAxMDApIDogMDsKICAgICAgICAkbGMgICAgPSAkbWcgPj0gMCA/ICcjMTBiOTgxJyA6ICcjZWY0NDQ0JzsKICAgICAgICAkaXNfc2VsID0gKCRrZXkgPT09ICRzZWxfa2V5KTsKICAgICAgICAkYmcgICAgPSAkaXNfc2VsID8gJ2JhY2tncm91bmQ6I2Y1ZjNmZjsnIDogJyc7CiAgICAgICAgJGZ3ICAgID0gJGlzX3NlbCA/ICdmb250LXdlaWdodDo3MDA7JyA6ICcnOwogICAgICAgIGZvcmVhY2ggKFsncmVjZWl0YScsJ2N1c3RvJywncmVjZWJpZG8nLCdhX3JlY2ViZXInLCdwYWdvX3BhcmMnLCdhX3BhZ2FyJywnbl9ldmVudG9zJ10gYXMgJGspCiAgICAgICAgICAgICR0b3RbJGtdICs9ICRyb3dbJGtdOwogICAgICAgICRhZ2VuZGFfYmFkZ2UgPSAhZW1wdHkoJHJvd1snYWdlbmRhX29ubHknXSkgPyAnIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNkYmVhZmU7Y29sb3I6IzFkNGVkODtmb250LXNpemU6MTBweDtwYWRkaW5nOjFweCA2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtd2VpZ2h0OjYwMCI+8J+ThSBhZ2VuZGE8L3NwYW4+JyA6ICcnOwogICAgICAgICR3Y19iYWRnZSA9ICFlbXB0eSgkcm93Wyd3Y19zb3VyY2UnXSkgPyAnIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNkYmVhZmU7Y29sb3I6IzFkNGVkODtmb250LXNpemU6MTBweDtwYWRkaW5nOjFweCA2cHg7Ym9yZGVyLXJhZGl1czoxMHB4Ij7wn5uSIFdDPC9zcGFuPicgOiAnJzsKICAgICAgICBlY2hvICI8dHIgc3R5bGU9J2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmM2Y0ZjY7eyRiZ30nPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDt7JGZ3fSc+Ii5lc2NfaHRtbCgkcm93WydsYWJlbCddKS4kYWdlbmRhX2JhZGdlLiR3Y19iYWRnZS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojNmI3MjgwJz4iLmludHZhbCgkcm93WyduX2V2ZW50b3MnXSkuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246cmlnaHQ7Zm9udC13ZWlnaHQ6NjAwJz4iLnZtMl9maW5fZm10X3IoJHJvd1sncmVjZWl0YSddKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojZWY0NDQ0Jz4iLnZtMl9maW5fZm10X3IoJHJvd1snY3VzdG8nXSkuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6eyRsY307Zm9udC13ZWlnaHQ6NjAwJz4iLnZtMl9maW5fZm10X3IoJG1nKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjp7JGxjfSc+Ii5udW1iZXJfZm9ybWF0KCRwY3QsMSwnLCcsJy4nKS4nJScuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6IzNiODJmNic+Ii52bTJfZmluX2ZtdF9yKCRyb3dbJ3JlY2ViaWRvJ10pLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiNmNTllMGInPiIudm0yX2Zpbl9mbXRfcigkcm93WydhX3JlY2ViZXInXSkuIjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6IzYzNjZmMSc+Ii52bTJfZmluX2ZtdF9yKCRyb3dbJ3BhZ29fcGFyYyddKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojZjk3MzE2Jz4iLnZtMl9maW5fZm10X3IoJHJvd1snYV9wYWdhciddKS4iPC90ZD4iOwogICAgICAgIGVjaG8gIjwvdHI+IjsKICAgIH0KICAgIGVjaG8gJzwvdGJvZHk+JzsKCiAgICAvLyBGb290ZXIgdG90YWlzCiAgICAkdG90X21nICA9ICR0b3RbJ3JlY2VpdGEnXSAtICR0b3RbJ2N1c3RvJ107CiAgICAkdG90X3BjdCA9ICR0b3RbJ3JlY2VpdGEnXSA+IDAgPyAoJHRvdF9tZyAvICR0b3RbJ3JlY2VpdGEnXSAqIDEwMCkgOiAwOwogICAgJHRvdF9sYyAgPSAkdG90X21nID49IDAgPyAnIzEwYjk4MScgOiAnI2VmNDQ0NCc7CiAgICBlY2hvICI8dGZvb3Q+PHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyLXRvcDoycHggc29saWQgI2U1ZTdlYic+IjsKICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxM3B4Jz5UT1RBTCAoIi5jb3VudCgkYnlfbW9udGgpLiIgbWVzZXMpPC90ZD4iOwogICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpyaWdodCc+Ii5pbnR2YWwoJHRvdFsnbl9ldmVudG9zJ10pLiI8L3RkPiI7CiAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LWFsaWduOnJpZ2h0Jz4iLnZtMl9maW5fZm10X3IoJHRvdFsncmVjZWl0YSddKS4iPC90ZD4iOwogICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojZWY0NDQ0Jz4iLnZtMl9maW5fZm10X3IoJHRvdFsnY3VzdG8nXSkuIjwvdGQ+IjsKICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6eyR0b3RfbGN9Jz4iLnZtMl9maW5fZm10X3IoJHRvdF9tZykuIjwvdGQ+IjsKICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6eyR0b3RfbGN9Jz4iLm51bWJlcl9mb3JtYXQoJHRvdF9wY3QsMSwnLCcsJy4nKS4nJScuIjwvdGQ+IjsKICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6IzNiODJmNic+Ii52bTJfZmluX2ZtdF9yKCR0b3RbJ3JlY2ViaWRvJ10pLiI8L3RkPiI7CiAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtd2VpZ2h0OjcwMDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiNmNTllMGInPiIudm0yX2Zpbl9mbXRfcigkdG90WydhX3JlY2ViZXInXSkuIjwvdGQ+IjsKICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6IzYzNjZmMSc+Ii52bTJfZmluX2ZtdF9yKCR0b3RbJ3BhZ29fcGFyYyddKS4iPC90ZD4iOwogICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojZjk3MzE2Jz4iLnZtMl9maW5fZm10X3IoJHRvdFsnYV9wYWdhciddKS4iPC90ZD4iOwogICAgZWNobyAiPC90cj48L3Rmb290PjwvdGFibGU+PC9kaXY+IjsKCiAgICAvLyBMZWdlbmRhCiAgICBlY2hvICI8ZGl2IHN0eWxlPSdtYXJnaW4tdG9wOjE2cHg7cGFkZGluZzoxMnB4IDE2cHg7YmFja2dyb3VuZDojZjhmYWZjO2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODA7bGluZS1oZWlnaHQ6MS44Jz4iOwogICAgZWNobyAiPHN0cm9uZz7wn5OaIEdsb3Nzw6FyaW86PC9zdHJvbmc+Jm5ic3A7IjsKICAgIGVjaG8gIjxzdHJvbmc+UmVjZWl0YSBCcnV0YTwvc3Ryb25nPiA9IHZhbG9yIHRvdGFsIGNvbnRyYXRhZG8gKGVudHJhZGEgKyBmaW5hbCBhIHJlY2ViZXIpIGRvcyBldmVudG9zIGRvIG3DqnMgJm5ic3A74oCiJm5ic3A7ICI7CiAgICBlY2hvICI8c3Ryb25nPkNNVjwvc3Ryb25nPiA9IEN1c3RvIGRhIE1lcmNhZG9yaWEgVmVuZGlkYSAoY3VzdG8gcGFyY2Vpcm9zL2FydGlzdGFzKSAmbmJzcDvigKImbmJzcDsgIjsKICAgIGVjaG8gIjxzdHJvbmc+TWFyZ2VtIEJydXRhPC9zdHJvbmc+ID0gUmVjZWl0YSDiiJIgQ01WICZuYnNwO+KAoiZuYnNwOyAiOwogICAgZWNobyAiPHN0cm9uZz5SZWdpbWUgZGUgQ29tcGV0w6puY2lhPC9zdHJvbmc+ID0gYWdydXBhZG8gcGVsYSA8ZW0+ZGF0YSBkbyBldmVudG88L2VtPiAo4omgIGRhdGEgZGEgdmVuZGEgbmEgYWJhIERSRSkiOwogICAgZWNobyAiPC9kaXY+IjsKfQoKLy8g4pSA4pSAIFRBQiBXb29Db21tZXJjZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2Zpbl90YWJfd29vKCAkc2VsX21vbnRoICkgewogICAgWyR5ciwkbW9dID0gZXhwbG9kZSgnLScsJHNlbF9tb250aCk7CiAgICAvLyBGaWx0cmFyIHBvciBEQVRBIERPIEVWRU5UTyAoX2JpbGxpbmdfZXZlbnRfZGF0ZSksIG7Do28gcG9yIGRhdGEgZGUgY3JpYcOnw6NvIGRvIHBlZGlkbwogICAgLy8gRm9ybWF0b3MgcG9zc8OtdmVpczogREQvTU0vWVlZWSBvdSBERE1NWVlZWQogICAgJGlkc19yYXcgPSB3Y19nZXRfb3JkZXJzKFsKICAgICAgICAnc3RhdHVzJyAgICAgPT4gWydwcm9jZXNzaW5nJywnY29tcGxldGVkJywnc2lnbmluZy1wZW5kaW5nJywnY29udHJhY3Qtc2lnbmVkJ10sCiAgICAgICAgJ2xpbWl0JyAgICAgID0+IDUwMCwKICAgICAgICAnb3JkZXJieScgICAgPT4gJ2RhdGUnLAogICAgICAgICdvcmRlcicgICAgICA9PiAnREVTQycsCiAgICAgICAgJ3JldHVybicgICAgID0+ICdpZHMnLAogICAgICAgICdtZXRhX3F1ZXJ5JyA9PiBbCiAgICAgICAgICAgICdyZWxhdGlvbicgPT4gJ09SJywKICAgICAgICAgICAgWydrZXknPT4nX2JpbGxpbmdfZXZlbnRfZGF0ZScsJ3ZhbHVlJz0+Jy8nLiRtby4nLycuJHlyLCdjb21wYXJlJz0+J0xJS0UnXSwKICAgICAgICAgICAgWydrZXknPT4nX2JpbGxpbmdfZXZlbnRfZGF0ZScsJ3ZhbHVlJz0+JG1vLiR5ciwgICAgICAgICdjb21wYXJlJz0+J0xJS0UnXSwKICAgICAgICBdLAogICAgXSk7CiAgICAvLyBWZXJpZmljYXIgZGF0YSBleGF0YSBlbSBQSFAgKGV2aXRhciBmYWxzbyBwb3NpdGl2byBkbyBMSUtFKSBlIG9yZGVuYXIgQVNDCiAgICAkcm93cyA9IFtdOwogICAgZm9yZWFjaCAoIChhcnJheSkkaWRzX3JhdyBhcyAkb2lkICkgewogICAgICAgICRvID0gd2NfZ2V0X29yZGVyKCRvaWQpOyBpZighJG8pIGNvbnRpbnVlOwogICAgICAgICRldl9yYXcgPSAkby0+Z2V0X21ldGEoJ19iaWxsaW5nX2V2ZW50X2RhdGUnKTsKICAgICAgICAkZXZfdHMgID0gdm0yX2V2ZW50X2RhdGVfdG9fdHMoJGV2X3Jhdyk7CiAgICAgICAgaWYgKCAkZXZfdHMgJiYgZGF0ZSgnWS1tJywgJGV2X3RzKSA9PT0gJHNlbF9tb250aCApIHsKICAgICAgICAgICAgJHJvd3NbXSA9IFsnaWQnPT4kb2lkLCdvJz0+JG8sJ2V2X3RzJz0+JGV2X3RzXTsKICAgICAgICB9CiAgICB9CiAgICB1c29ydCgkcm93cywgZm4oJGEsJGIpID0+ICRhWydldl90cyddIDw9PiAkYlsnZXZfdHMnXSk7CgogICAgaWYgKGVtcHR5KCRyb3dzKSkgewogICAgICAgIGVjaG8gJzxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NjBweDtjb2xvcjojOWNhM2FmIj5TZW0gcGVkaWRvcyBXb29Db21tZXJjZSBlbSAnLmVzY19odG1sKHZtMl9tb250aF9sYWJlbF9wdCgkc2VsX21vbnRoKSkuJy48L2Rpdj4nOyByZXR1cm47CiAgICB9CiAgICAkdG90YWw9MDsKICAgIHZtMl9maW5fZmlsdGVyX2Jhcigndm0yLWZpbi13b28nLCAnRmlsdHJhciBwb3IgcGVkaWRvLCBjbGllbnRlLi4uJyk7CiAgICBlY2hvICc8ZGl2IHN0eWxlPSJvdmVyZmxvdy14OmF1dG8iPic7CiAgICBlY2hvICc8dGFibGUgaWQ9InZtMi1maW4td29vIiBzdHlsZT0id2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMDgpIj4nOwogICAgdm0yX2Zpbl90aGVhZChbJyNQZWRpZG8nLCdDbGllbnRlJywnRGF0YSBFdmVudG8nLCdWYWxvcicsJ0Zvcm1hIFBndG8nLCdTdGF0dXMnLCdDYWRhc3RybyddLCAndm0yLWZpbi13b28nLCAyKTsKICAgIGVjaG8gJzx0Ym9keT4nOwogICAgZm9yZWFjaCAoJHJvd3MgYXMgJHJvdykgewogICAgICAgICRvaWQ9JHJvd1snaWQnXTsgJG89JHJvd1snbyddOyAkZXZfdHM9JHJvd1snZXZfdHMnXTsKICAgICAgICAkdmFsPShmbG9hdCkkby0+Z2V0X3RvdGFsKCk7ICR0b3RhbCs9JHZhbDsKICAgICAgICAkZXZfZm10ID0gZGF0ZSgnZC9tL1knLCRldl90cyk7CiAgICAgICAgJHN0PSRvLT5nZXRfc3RhdHVzKCk7CiAgICAgICAgaWYoJHN0PT09J2NvbXBsZXRlZCcpICAgICAgICB7JHNiZz0nI2QxZmFlNSc7JHNjPScjMDY1ZjQ2Jzskc2w9J+KchSBDb25jbHXDrWRvJzt9CiAgICAgICAgZWxzZWlmKCRzdD09PSdwcm9jZXNzaW5nJykgICB7JHNiZz0nI2RiZWFmZSc7JHNjPScjMWU0MGFmJzskc2w9J+Kame+4jyBQcm9jZXNzaW5nJzt9CiAgICAgICAgZWxzZWlmKCRzdD09PSdjb250cmFjdC1zaWduZWQnKXskc2JnPScjZWRlOWZlJzskc2M9JyM2ZDI4ZDknOyRzbD0n8J+TnSBBc3NpbmFkbyc7fQogICAgICAgIGVsc2VpZigkc3Q9PT0nc2lnbmluZy1wZW5kaW5nJyl7JHNiZz0nI2ZlZjNjNyc7JHNjPScjOTI0MDBlJzskc2w9J+KPsyBBZy4gQXNzaW5hdHVyYSc7fQogICAgICAgIGVsc2V7JHNiZz0nI2YzZjRmNic7JHNjPScjMzc0MTUxJzskc2w9dWNmaXJzdCgkc3QpO30KICAgICAgICAkbmFtZT1lc2NfaHRtbCh0cmltKCRvLT5nZXRfYmlsbGluZ19maXJzdF9uYW1lKCkuJyAnLiRvLT5nZXRfYmlsbGluZ19sYXN0X25hbWUoKSkpOwogICAgICAgICRzYWxlX2RhdGU9JG8tPmdldF9kYXRlX2NyZWF0ZWQoKT8kby0+Z2V0X2RhdGVfY3JlYXRlZCgpLT5kYXRlKCdkL20vWScpOifigJQnOwogICAgICAgICRwZ3RvPWVzY19odG1sKCRvLT5nZXRfcGF5bWVudF9tZXRob2RfdGl0bGUoKT86J+KAlCcpOwogICAgICAgICRvdXJsPWFkbWluX3VybCgncG9zdC5waHA/cG9zdD0nLmludHZhbCgkb2lkKS4nJmFjdGlvbj1lZGl0Jyk7CiAgICAgICAgZWNobyAiPHRyIHN0eWxlPSdib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjNmNGY2Jz4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHgnPjxhIGhyZWY9JyIuZXNjX3VybCgkb3VybCkuIicgc3R5bGU9J2NvbG9yOiM3YzNhZWQ7Zm9udC13ZWlnaHQ6NjAwJz4jIi5pbnR2YWwoJG9pZCkuIjwvYT48L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo1MDAnPnskbmFtZX08L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweCc+eyRldl9mbXR9PC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO3RleHQtYWxpZ246cmlnaHQnPlJcJCAiLm51bWJlcl9mb3JtYXQoJHZhbCwyLCcsJywnLicpLiI8L3RkPiI7CiAgICAgICAgZWNobyAiPHRkIHN0eWxlPSdwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTNweDtjb2xvcjojNmI3MjgwJz57JHBndG99PC90ZD4iOwogICAgICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHgnPjxzcGFuIHN0eWxlPSdwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDp7JHNiZ307Y29sb3I6eyRzY30nPnskc2x9PC9zcGFuPjwvdGQ+IjsKICAgICAgICBlY2hvICI8dGQgc3R5bGU9J3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM2YjcyODAnPnskc2FsZV9kYXRlfTwvdGQ+IjsKICAgICAgICBlY2hvICI8L3RyPiI7CiAgICB9CiAgICBlY2hvICc8L3Rib2R5Pic7CiAgICBlY2hvICI8dGZvb3Q+PHRyIHN0eWxlPSdiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyLXRvcDoycHggc29saWQgI2U1ZTdlYic+IjsKICAgIGVjaG8gIjx0ZCBjb2xzcGFuPSczJyBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxM3B4Jz5UT1RBTCAoIi5jb3VudCgkcm93cykuIiBwZWRpZG9zKTwvdGQ+IjsKICAgIGVjaG8gIjx0ZCBzdHlsZT0ncGFkZGluZzoxMHB4IDE0cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM3YzNhZWQ7dGV4dC1hbGlnbjpyaWdodCc+UlwkICIubnVtYmVyX2Zvcm1hdCgkdG90YWwsMiwnLCcsJy4nKS4iPC90ZD4iOwogICAgZWNobyAiPHRkIGNvbHNwYW49JzMnPjwvdGQ+PC90cj48L3Rmb290PjwvdGFibGU+PC9kaXY+IjsKfQoKLy8g4pSA4pSAIEFKQVg6IFBBR0FNRU5UT1Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX3NhdmVfcGF5bWVudCcsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfbm9uY2UnLCAnbm9uY2UnKTsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRwYXJ0bmVyX2lkID0gaW50dmFsKCRfUE9TVFsncGFydG5lcl9pZCddID8/IDApOwogICAgJGFtb3VudCAgICAgPSBmbG9hdHZhbCgkX1BPU1RbJ2Ftb3VudCddID8/IDApOwogICAgJGR1ZV9kYXRlICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnZHVlX2RhdGUnXSA/PyAnJyk7CiAgICAkcmVmZXJlbmNlICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydyZWZlcmVuY2UnXSA/PyAnJyk7CiAgICAkbm90ZXMgICAgICA9IHNhbml0aXplX3RleHRhcmVhX2ZpZWxkKCRfUE9TVFsnbm90ZXMnXSA/PyAnJyk7CiAgICBpZiAoJGFtb3VudCA8PSAwKSB7IHdwX3NlbmRfanNvbl9lcnJvcignVmFsb3IgaW52w6FsaWRvJyk7IHJldHVybjsgfQogICAgJHIgPSAkd3BkYi0+aW5zZXJ0KCR3cGRiLT5wcmVmaXggLiAndm0yX3BheW1lbnRzJywgWwogICAgICAgICdwYXJ0bmVyX2lkJyAgPT4gJHBhcnRuZXJfaWQgPzogbnVsbCwKICAgICAgICAnYW1vdW50JyAgICAgID0+ICRhbW91bnQsCiAgICAgICAgJ2R1ZV9kYXRlJyAgICA9PiAkZHVlX2RhdGUgPzogbnVsbCwKICAgICAgICAncmVmZXJlbmNlJyAgID0+ICRyZWZlcmVuY2UsCiAgICAgICAgJ25vdGVzJyAgICAgICA9PiAkbm90ZXMsCiAgICAgICAgJ3N0YXR1cycgICAgICA9PiAncGVuZGluZycsCiAgICAgICAgJ2NyZWF0ZWRfYXQnICA9PiBjdXJyZW50X3RpbWUoJ215c3FsJyksCiAgICBdKTsKICAgIGlmICgkciA9PT0gZmFsc2UpIHdwX3NlbmRfanNvbl9lcnJvcigkd3BkYi0+bGFzdF9lcnJvcik7CiAgICBlbHNlIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnaWQnID0+ICR3cGRiLT5pbnNlcnRfaWRdKTsKfSk7CgphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9jb25maXJtX3BheW1lbnQnLCBmdW5jdGlvbigpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX25vbmNlJywgJ25vbmNlJyk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkaWQgPSBpbnR2YWwoJF9QT1NUWydpZCddID8/IDApOwogICAgaWYgKCRpZCkgJHdwZGItPnVwZGF0ZSgkd3BkYi0+cHJlZml4IC4gJ3ZtMl9wYXltZW50cycsCiAgICAgICAgWydzdGF0dXMnPT4ncGFpZCcsICdwYWlkX2F0Jz0+Y3VycmVudF90aW1lKCdteXNxbCcpXSwgWydpZCc9PiRpZF0pOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoKTsKfSk7CgphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9kZWxldGVfcGF5bWVudCcsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfbm9uY2UnLCAnbm9uY2UnKTsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRpZCA9IGludHZhbCgkX1BPU1RbJ2lkJ10gPz8gMCk7CiAgICBpZiAoJGlkKSAkd3BkYi0+ZGVsZXRlKCR3cGRiLT5wcmVmaXggLiAndm0yX3BheW1lbnRzJywgWydpZCc9PiRpZF0pOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoKTsKfSk7CgoKLy8g4pSA4pSAIFJFU1Q6IEZJTkFOQ0VJUk8gU1lOQyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbigncmVzdF9hcGlfaW5pdCcsIGZ1bmN0aW9uKCkgewogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndm0tY3JtLXYyL3YxJywgJy9maW5hbmNlaXJvL3N5bmMnLCBbCiAgICAgICAgJ21ldGhvZHMnICAgICAgICAgICAgID0+ICdQT1NUJywKICAgICAgICAnY2FsbGJhY2snICAgICAgICAgICAgPT4gJ3ZtMl9maW5fcmVzdF9yZWNlaXZlJywKICAgICAgICAncGVybWlzc2lvbl9jYWxsYmFjaycgPT4gJ3ZtMl9maW5fcmVzdF9hdXRoJywKICAgIF0pOwogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndm0tY3JtLXYyL3YxJywgJy9maW5hbmNlaXJvL3N5bmMtc3RhdHVzJywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnR0VUJywKICAgICAgICAnY2FsbGJhY2snICAgICAgICAgICAgPT4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbCiAgICAgICAgICAgICAgICAnbGFzdF9zeW5jJyA9PiBnZXRfb3B0aW9uKCd2bTJfZmluX2xhc3Rfc3luYycsICcnKSwKICAgICAgICAgICAgICAgICdzeW5jaW5nJyAgID0+IChib29sKSBnZXRfb3B0aW9uKCd2bTJfZmluX3N5bmNfcGVuZGluZycsIDApLAogICAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiBmdW5jdGlvbigpIHsgcmV0dXJuIGN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJyk7IH0sCiAgICBdKTsKfSk7CmZ1bmN0aW9uIHZtMl9maW5fcmVzdF9hdXRoKCAkcmVxdWVzdCApIHsKICAgICRhdXRoICAgICA9ICRyZXF1ZXN0LT5nZXRfaGVhZGVyKCdBdXRob3JpemF0aW9uJyk7CiAgICAkZXhwZWN0ZWQgPSAnQmVhcmVyICcgLiBnZXRfb3B0aW9uKCd2bTJfZmluX3N5bmNfdG9rZW4nLCAndm0yZnN5bmNfOWtxdzNwN3gnKTsKICAgIHJldHVybiAkYXV0aCA9PT0gJGV4cGVjdGVkOwp9CmZ1bmN0aW9uIHZtMl9maW5fcmVzdF9yZWNlaXZlKCAkcmVxdWVzdCApIHsKICAgICRkYXRhID0gJHJlcXVlc3QtPmdldF9qc29uX3BhcmFtcygpOwogICAgaWYgKCAhaXNfYXJyYXkoJGRhdGEpICkgcmV0dXJuIG5ldyBXUF9FcnJvcignYmFkX3JlcXVlc3QnLCdFeHBlY3RlZCBKU09OJyxbJ3N0YXR1cyc9PjQwMF0pOwogICAgaWYgKCBpc3NldCgkZGF0YVsnZHJlJ10pICkgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9maW5fZHJlJywgICAgICRkYXRhWydkcmUnXSwgICAgIGZhbHNlKTsKICAgIGlmICggaXNzZXQoJGRhdGFbJ3JlY2ViZXInXSkgKSB1cGRhdGVfb3B0aW9uKCd2bTJfZmluX3JlY2ViZXInLCAkZGF0YVsncmVjZWJlciddLCBmYWxzZSk7CiAgICBpZiAoIGlzc2V0KCRkYXRhWydwYWdhciddKSApICAgdXBkYXRlX29wdGlvbigndm0yX2Zpbl9wYWdhcicsICAgJGRhdGFbJ3BhZ2FyJ10sICAgZmFsc2UpOwogICAgdXBkYXRlX29wdGlvbigndm0yX2Zpbl9sYXN0X3N5bmMnLCBjdXJyZW50X3RpbWUoJ215c3FsJyksIGZhbHNlKTsKICAgIGRlbGV0ZV9vcHRpb24oJ3ZtMl9maW5fc3luY19wZW5kaW5nJyk7CiAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoWydzdWNjZXNzJz0+dHJ1ZSwnc3luY2VkX2F0Jz0+Y3VycmVudF90aW1lKCdteXNxbCcpXSk7Cn0KCi8vIOKUgOKUgCBBSkFYOiBUUklHR0VSIFNZTkMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX2Zpbl90cmlnZ2VyX3N5bmMnLCBmdW5jdGlvbigpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX2Zpbl9zeW5jJywnbm9uY2UnKTsKICAgIGlmICghY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSkgeyB3cF9zZW5kX2pzb25fZXJyb3IoJ2ZvcmJpZGRlbicpOyB9CiAgICAkd2ViaG9va191cmwgPSBnZXRfb3B0aW9uKCd2bTJfZmluX3dlYmhvb2tfdXJsJywnJyk7CiAgICBpZiAoISR3ZWJob29rX3VybCkgeyB3cF9zZW5kX2pzb25fZXJyb3IoJ1dlYmhvb2sgVVJMIG7Do28gY29uZmlndXJhZG8gZW0gQ29uZmlndXJhw6fDtWVzLicpOyB9CiAgICB1cGRhdGVfb3B0aW9uKCd2bTJfZmluX3N5bmNfcGVuZGluZycsMSxmYWxzZSk7CiAgICB3cF9yZW1vdGVfcG9zdCgkd2ViaG9va191cmwsWwogICAgICAgICd0aW1lb3V0JyAgPT4gMC4wMSwKICAgICAgICAnYmxvY2tpbmcnID0+IGZhbHNlLAogICAgICAgICdib2R5JyAgICAgPT4ganNvbl9lbmNvZGUoWydzb3VyY2UnPT4ndml2YW1haXMtY3JtLXYyJywnYWN0aW9uJz0+J3N5bmNfZmluYW5jZWlybyddKSwKICAgICAgICAnaGVhZGVycycgID0+IFsnQ29udGVudC1UeXBlJz0+J2FwcGxpY2F0aW9uL2pzb24nXSwKICAgICAgICAnc3NsdmVyaWZ5Jz0+IGZhbHNlLAogICAgXSk7CiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ21lc3NhZ2UnPT4nU2luY3Jvbml6YcOnw6NvIGluaWNpYWRhLi4uJ10pOwp9KTsKCi8vIOKUgOKUgCBSRVNUOiBBR0VOREEgU1lOQyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8g4pSA4pSAIFJFU1Q6IEVuY2VycmFyIHByb21vIGF0aXZhIChzdWJzdGl0dWluZG8gdm0tcHJvbW8vdjEvZW5kIGRlbGV0YWRvKSDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbigncmVzdF9hcGlfaW5pdCcsIGZ1bmN0aW9uKCkgewogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndm0tY3JtLXYyL3YxJywgJy9wcm9tb3MvZW5kJywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnUE9TVCcsCiAgICAgICAgJ2NhbGxiYWNrJyAgICAgICAgICAgID0+ICd2bTJfcmVzdF9wcm9tb3NfZW5kJywKICAgICAgICAncGVybWlzc2lvbl9jYWxsYmFjaycgPT4gZnVuY3Rpb24oKSB7IHJldHVybiBjdXJyZW50X3VzZXJfY2FuKCdtYW5hZ2Vfb3B0aW9ucycpOyB9LAogICAgXSk7Cn0pOwpmdW5jdGlvbiB2bTJfcmVzdF9wcm9tb3NfZW5kKCAkcmVxdWVzdCApIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0YmxfZGlzYyA9ICd3el9hY3RpdmVfZGlzY291bnRzJzsKICAgICRwYXJhbXMgICA9ICRyZXF1ZXN0LT5nZXRfanNvbl9wYXJhbXMoKTsKICAgICRpZCAgICAgICA9ICFlbXB0eSgkcGFyYW1zWydpZCddKSA/IGludHZhbCgkcGFyYW1zWydpZCddKSA6IDA7CiAgICBpZiAoICRpZCA+IDAgKSB7CiAgICAgICAgJHByb21vID0gJHdwZGItPmdldF9yb3coICR3cGRiLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIHskdGJsX2Rpc2N9IFdIRVJFIGlkPSVkIEFORCByZXZlcnRlZF9hdCBJUyBOVUxMIiwgJGlkKSApOwogICAgfSBlbHNlIHsKICAgICAgICAkcHJvbW8gPSAkd3BkYi0+Z2V0X3JvdyggIlNFTEVDVCAqIEZST00geyR0YmxfZGlzY30gV0hFUkUgcmV2ZXJ0ZWRfYXQgSVMgTlVMTCBPUkRFUiBCWSBhcHBsaWVkX2F0IERFU0MgTElNSVQgMSIgKTsKICAgIH0KICAgIGlmICggISAkcHJvbW8gKSB7CiAgICAgICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKFsnc3VjY2Vzcyc9PmZhbHNlLCdtZXNzYWdlJz0+J05lbmh1bWEgcHJvbW8gYXRpdmEuJ10pOwogICAgfQogICAgLy8gUmV2ZXJ0ZXIgcHJlw6dvIFdvb0NvbW1lcmNlCiAgICAkcHJvZHVjdCA9IGZ1bmN0aW9uX2V4aXN0cygnd2NfZ2V0X3Byb2R1Y3QnKSA/IHdjX2dldF9wcm9kdWN0KCRwcm9tby0+cHJvZHVjdF9pZCkgOiBudWxsOwogICAgaWYgKCAkcHJvZHVjdCApIHsKICAgICAgICAkcHJvZHVjdC0+c2V0X3NhbGVfcHJpY2UoJycpOwogICAgICAgICRwcm9kdWN0LT5zYXZlKCk7CiAgICB9CiAgICAvLyB2MS41LjE4OiBEZWxldGFyIGN1cG9tIFdvb0NvbW1lcmNlIHBlcm1hbmVudGVtZW50ZSAobsOjbyBkZWl4YXIgbGl4bykKICAgIGlmICggIWVtcHR5KCRwcm9tby0+Y291cG9uX2NvZGUpICkgewogICAgICAgICRjb3Vwb25fcG9zdCA9IGdldF9wYWdlX2J5X3RpdGxlKCAkcHJvbW8tPmNvdXBvbl9jb2RlLCBPQkpFQ1QsICdzaG9wX2NvdXBvbicgKTsKICAgICAgICBpZiAoICRjb3Vwb25fcG9zdCApIHsKICAgICAgICAgICAgd3BfZGVsZXRlX3Bvc3QoICRjb3Vwb25fcG9zdC0+SUQsIHRydWUgKTsKICAgICAgICB9CiAgICB9CiAgICAvLyBNYXJjYXIgY29tbyBlbmNlcnJhZGEKICAgICR3cGRiLT51cGRhdGUoICR0YmxfZGlzYywgWydyZXZlcnRlZF9hdCc9PmN1cnJlbnRfdGltZSgnbXlzcWwnKV0sIFsnaWQnPT4kcHJvbW8tPmlkXSApOwogICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKFsnc3VjY2Vzcyc9PnRydWVdKTsKfQoKYWRkX2FjdGlvbigncmVzdF9hcGlfaW5pdCcsIGZ1bmN0aW9uKCkgewogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSgndm0tY3JtLXYyL3YxJywgJy9hZ2VuZGEvc3luYycsIFsKICAgICAgICAnbWV0aG9kcycgICAgICAgICAgICAgPT4gJ1BPU1QnLAogICAgICAgICdjYWxsYmFjaycgICAgICAgICAgICA9PiAndm0yX2FnZW5kYV9yZXN0X3JlY2VpdmUnLAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiAndm0yX2FnZW5kYV9yZXN0X2F1dGgnLAogICAgXSk7CiAgICByZWdpc3Rlcl9yZXN0X3JvdXRlKCd2bS1jcm0tdjIvdjEnLCAnL2FnZW5kYS9zeW5jLWxhc3Q3JywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnUE9TVCcsCiAgICAgICAgJ2NhbGxiYWNrJyAgICAgICAgICAgID0+ICd2bTJfYWdlbmRhX3Jlc3RfcmVjZWl2ZV9sYXN0NycsCiAgICAgICAgJ3Blcm1pc3Npb25fY2FsbGJhY2snID0+ICd2bTJfYWdlbmRhX3Jlc3RfYXV0aCcsCiAgICBdKTsKICAgIHJlZ2lzdGVyX3Jlc3Rfcm91dGUoJ3ZtLWNybS12Mi92MScsICcvYWdlbmRhL3N5bmMtc3RhdHVzJywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnR0VUJywKICAgICAgICAnY2FsbGJhY2snICAgICAgICAgICAgPT4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbCiAgICAgICAgICAgICAgICAnbGFzdF9zeW5jJyA9PiBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2xhc3Rfc3luYycsICcnKSwKICAgICAgICAgICAgICAgICdjb3VudCcgICAgID0+IGNvdW50KChhcnJheSlnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX2dzaGVldHMnLCBbXSkpLAogICAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiBmdW5jdGlvbigpIHsgcmV0dXJuIGN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJyk7IH0sCiAgICBdKTsKICAgIC8vIOKUgOKUgCBTb2ZJQSBJbnRlbGxpZ2VuY2UgUkVTVCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIHJlZ2lzdGVyX3Jlc3Rfcm91dGUoJ3ZtLWNybS12Mi92MScsICcvc29maWEvc2Vzc2lvbicsIFsKICAgICAgICAnbWV0aG9kcycgICAgICAgICAgICAgPT4gJ1BPU1QnLAogICAgICAgICdjYWxsYmFjaycgICAgICAgICAgICA9PiAndm0yX3NvZmlhX3Jlc3RfdXBzZXJ0JywKICAgICAgICAncGVybWlzc2lvbl9jYWxsYmFjaycgPT4gJ19fcmV0dXJuX3RydWUnLAogICAgXSk7CiAgICByZWdpc3Rlcl9yZXN0X3JvdXRlKCd2bS1jcm0tdjIvdjEnLCAnL3NvZmlhL3Nlc3Npb25zJywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnR0VUJywKICAgICAgICAnY2FsbGJhY2snICAgICAgICAgICAgPT4gJ3ZtMl9zb2ZpYV9yZXN0X2xpc3QnLAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiBmdW5jdGlvbigpIHsgcmV0dXJuIGN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJyk7IH0sCiAgICBdKTsKfSk7CmZ1bmN0aW9uIHZtMl9hZ2VuZGFfcmVzdF9hdXRoKCAkcmVxdWVzdCApIHsKICAgICRhdXRoICAgICA9ICRyZXF1ZXN0LT5nZXRfaGVhZGVyKCdBdXRob3JpemF0aW9uJyk7CiAgICAkZXhwZWN0ZWQgPSAnQmVhcmVyICcgLiBnZXRfb3B0aW9uKCd2bTJfZmluX3N5bmNfdG9rZW4nLCAndm0yZnN5bmNfOWtxdzNwN3gnKTsKICAgIHJldHVybiAkYXV0aCA9PT0gJGV4cGVjdGVkOwp9CmZ1bmN0aW9uIHZtMl9hZ2VuZGFfcmVzdF9yZWNlaXZlKCAkcmVxdWVzdCApIHsKICAgICRkYXRhID0gJHJlcXVlc3QtPmdldF9qc29uX3BhcmFtcygpOwogICAgaWYgKCAhaXNfYXJyYXkoJGRhdGEpIHx8ICFpc3NldCgkZGF0YVsnZXZlbnRzJ10pICkgewogICAgICAgIHJldHVybiBuZXcgV1BfRXJyb3IoJ2JhZF9yZXF1ZXN0JywnRXhwZWN0ZWQgSlNPTiB3aXRoIGV2ZW50cycsWydzdGF0dXMnPT40MDBdKTsKICAgIH0KICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9hZ2VuZGFfZ3NoZWV0cycsICRkYXRhWydldmVudHMnXSwgZmFsc2UpOwogICAgdXBkYXRlX29wdGlvbigndm0yX2FnZW5kYV9sYXN0X3N5bmMnLCBjdXJyZW50X3RpbWUoJ215c3FsJyksIGZhbHNlKTsKICAgIGRlbGV0ZV9vcHRpb24oJ3ZtMl9hZ2VuZGFfc3luY19wZW5kaW5nJyk7CiAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoWydzdWNjZXNzJz0+dHJ1ZSwnY291bnQnPT5jb3VudCgkZGF0YVsnZXZlbnRzJ10pLCdzeW5jZWRfYXQnPT5jdXJyZW50X3RpbWUoJ215c3FsJyldKTsKfQoKZnVuY3Rpb24gdm0yX2FnZW5kYV9yZXN0X3JlY2VpdmVfbGFzdDcoICRyZXF1ZXN0ICkgewogICAgJGRhdGEgPSAkcmVxdWVzdC0+Z2V0X2pzb25fcGFyYW1zKCk7CiAgICBpZiAoICFpc19hcnJheSgkZGF0YSkgfHwgIWlzc2V0KCRkYXRhWydldmVudHMnXSkgKSB7CiAgICAgICAgcmV0dXJuIG5ldyBXUF9FcnJvcignYmFkX3JlcXVlc3QnLCdFeHBlY3RlZCBKU09OIHdpdGggZXZlbnRzJyxbJ3N0YXR1cyc9PjQwMF0pOwogICAgfQogICAgdXBkYXRlX29wdGlvbigndm0yX2FnZW5kYV9sYXN0NycsICRkYXRhWydldmVudHMnXSwgZmFsc2UpOwogICAgdXBkYXRlX29wdGlvbigndm0yX2FnZW5kYV9sYXN0N19zeW5jZWQnLCBjdXJyZW50X3RpbWUoJ215c3FsJyksIGZhbHNlKTsKICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbJ3N1Y2Nlc3MnPT50cnVlLCdjb3VudCc9PmNvdW50KCRkYXRhWydldmVudHMnXSksJ3N5bmNlZF9hdCc9PmN1cnJlbnRfdGltZSgnbXlzcWwnKV0pOwp9CgovLyDilIDilIAgUkVTVDogUnVuIEF1dG9tYXRpb25zIChUYXNrbGV0IGNyb24gZXh0ZXJubyBjaGFtYSBhIGNhZGEgaG9yYSkg4pSA4pSACmFkZF9hY3Rpb24oJ3Jlc3RfYXBpX2luaXQnLCBmdW5jdGlvbigpIHsKICAgIHJlZ2lzdGVyX3Jlc3Rfcm91dGUoJ3ZtLWNybS12Mi92MScsICcvcnVuLWF1dG9tYXRpb25zJywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnUE9TVCcsCiAgICAgICAgJ2NhbGxiYWNrJyAgICAgICAgICAgID0+ICd2bTJfcnVuX2F1dG9tYXRpb25zX3Jlc3QnLAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiAndm0yX2Zpbl9yZXN0X2F1dGgnLAogICAgXSk7Cn0pOwpmdW5jdGlvbiB2bTJfcnVuX2F1dG9tYXRpb25zX3Jlc3QoICRyZXF1ZXN0ICkgewogICAgaWYgKCBnZXRfb3B0aW9uKCd2bTJfa2lsbF9zd2l0Y2gnLCAnMCcpID09PSAnMScgKSB7CiAgICAgICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKFsnc3VjY2VzcycgPT4gZmFsc2UsICdtZXNzYWdlJyA9PiAnS2lsbCBzd2l0Y2ggZ2xvYmFsIE9OIOKAlCBhYm9ydGFkbyddKTsKICAgIH0KICAgIHZtMl9sb2coJ3NvZmlhX2F1dG9tYXRpb25zX2Nyb246IERJU1BBUk8gdmlhIGNyb24gZXh0ZXJubyBUYXNrbGV0IOKAlCBhZ2VuZGFuZG8gYXN5bmMnLCAnaW5mbycpOwogICAgLy8gUmV0b3JuYSAyMDAgaW1lZGlhdGFtZW50ZTsgcHJvY2Vzc2FtZW50byBvY29ycmUgbm8gcHLDs3hpbW8gV1AtY3JvbiB0aWNrCiAgICAvLyBSZW1vdmUgZXZlbnRvIGR1cGxpY2FkbyBzZSBqw6EgZXN0aXZlciBhZ2VuZGFkbwogICAgJG5leHQgPSB3cF9uZXh0X3NjaGVkdWxlZCgndm0yX3J1bl9hdXRvbWF0aW9uc19hc3luYycpOwogICAgaWYgKCAkbmV4dCApIHsKICAgICAgICB3cF91bnNjaGVkdWxlX2V2ZW50KCAkbmV4dCwgJ3ZtMl9ydW5fYXV0b21hdGlvbnNfYXN5bmMnICk7CiAgICB9CiAgICB3cF9zY2hlZHVsZV9zaW5nbGVfZXZlbnQoIHRpbWUoKSwgJ3ZtMl9ydW5fYXV0b21hdGlvbnNfYXN5bmMnICk7CiAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoWydzdWNjZXNzJyA9PiB0cnVlLCAnbWVzc2FnZScgPT4gJ1J1bm5lciBhZ2VuZGFkbyDigJQgcHJvY2Vzc2Fyw6Egbm8gcHLDs3hpbW8gdGljay4nLCAndHMnID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKV0pOwp9Ci8vIEhvb2sgYXN5bmM6IHByb2Nlc3NhIGF1dG9tYcOnw7VlcyBmb3JhIGRvIGNpY2xvIEhUVFAgZG8gVGFza2xldAppZiAoICEgaGFzX2FjdGlvbigndm0yX3J1bl9hdXRvbWF0aW9uc19hc3luYycsICd2bTJfd2FybXVwX3VuaWZpZWRfcnVuJykgKSB7CiAgICBhZGRfYWN0aW9uKCd2bTJfcnVuX2F1dG9tYXRpb25zX2FzeW5jJywgJ3ZtMl93YXJtdXBfdW5pZmllZF9ydW4nKTsKfQoKLy8g4pSA4pSAIFJFU1Q6IFBlZGlkb3MgRXhwb3J0IChwYXJhIEFwcHMgU2NyaXB0IHNpbmNyb25pemFyIGFiYSBQRURJRE9TIGRvIEdTaGVldHMpIOKUgOKUgAphZGRfYWN0aW9uKCdyZXN0X2FwaV9pbml0JywgZnVuY3Rpb24oKSB7CiAgICByZWdpc3Rlcl9yZXN0X3JvdXRlKCd2bS1jcm0tdjIvdjEnLCAnL3BlZGlkb3MvZXhwb3J0JywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnR0VUJywKICAgICAgICAnY2FsbGJhY2snICAgICAgICAgICAgPT4gJ3ZtMl9wZWRpZG9zX2V4cG9ydF9yZXN0JywKICAgICAgICAncGVybWlzc2lvbl9jYWxsYmFjaycgPT4gJ3ZtMl9maW5fcmVzdF9hdXRoJywKICAgIF0pOwp9KTsKZnVuY3Rpb24gdm0yX3BlZGlkb3NfZXhwb3J0X3Jlc3QoICRyZXF1ZXN0ICkgewogICAgaWYgKCAhIGZ1bmN0aW9uX2V4aXN0cygnd2NfZ2V0X29yZGVycycpICkgewogICAgICAgIHJldHVybiBuZXcgV1BfRXJyb3IoJ25vX3djJywgJ1dvb0NvbW1lcmNlIG5vdCBhY3RpdmUnLCBbJ3N0YXR1cycgPT4gNTAwXSk7CiAgICB9CiAgICBAaW5pX3NldCgnbWVtb3J5X2xpbWl0JywgJzUxMk0nKTsKICAgIEBzZXRfdGltZV9saW1pdCgxMjApOwoKICAgICRzaW5jZSAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkcmVxdWVzdC0+Z2V0X3BhcmFtKCdzaW5jZScpID8/ICcnICk7IC8vIFlZWVktTU0tREQKICAgICRhbGwgICAgPSAoYm9vbCkgJHJlcXVlc3QtPmdldF9wYXJhbSgnYWxsJyk7CiAgICAkcGFnZSAgID0gbWF4KDEsIChpbnQpICgkcmVxdWVzdC0+Z2V0X3BhcmFtKCdwYWdlJykgPz8gMSkpOwogICAgJGxpbWl0ICA9IG1pbiggNzUsIG1heCggMTAsIChpbnQpICggJHJlcXVlc3QtPmdldF9wYXJhbSggJ2xpbWl0JyApID8/IDUwICkgKSApOwoKICAgIC8vIEJ1c2NhciBhcGVuYXMgSURzIChtdWl0byBtYWlzIGxldmUpLCBkZXBvaXMgY2FycmVnYXIgMSBhIDEKICAgICRpZF9hcmdzID0gWwogICAgICAgICdzdGF0dXMnICA9PiBbJ3djLXByb2Nlc3NpbmcnLCd3Yy1jb250cmFjdC1zaWduZWQnLCd3Yy1zaWduaW5nLXBlbmRpbmcnLCd3Yy1vbi1ob2xkJywnd2MtY29tcGxldGVkJywnd2MtY2FuY2VsbGVkJywnd2MtcmVmdW5kZWQnLCd3Yy1mYWlsZWQnXSwKICAgICAgICAnbGltaXQnICAgPT4gJGxpbWl0LAogICAgICAgICdwYWdlZCcgICA9PiAkcGFnZSwKICAgICAgICAnb3JkZXJieScgPT4gJ2RhdGUnLAogICAgICAgICdvcmRlcicgICA9PiAnREVTQycsCiAgICAgICAgJ3JldHVybicgID0+ICdpZHMnLAogICAgXTsKICAgIGlmICggJHNpbmNlICkgewogICAgICAgICRpZF9hcmdzWydkYXRlX2NyZWF0ZWQnXSA9ICc+PScgLiAkc2luY2U7CiAgICB9CgogICAgdHJ5IHsKICAgICAgICAkb3JkZXJfaWRzID0gd2NfZ2V0X29yZGVycyggJGlkX2FyZ3MgKTsKICAgIH0gY2F0Y2ggKCBcVGhyb3dhYmxlICRlICkgewogICAgICAgIHJldHVybiBuZXcgV1BfRXJyb3IoJ3F1ZXJ5X2Vycm9yJywgJGUtPmdldE1lc3NhZ2UoKSwgWydzdGF0dXMnID0+IDUwMF0pOwogICAgfQoKICAgIGlmICggISAkb3JkZXJfaWRzICkgewogICAgICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZSggWyAnc3VjY2VzcycgPT4gdHJ1ZSwgJ3BlZGlkb3MnID0+IFtdLCAndG90YWwnID0+IDAsICdwYWdlJyA9PiAkcGFnZSwgJ2xpbWl0JyA9PiAkbGltaXQgXSApOwogICAgfQoKICAgICRyb3dzID0gW107CiAgICBmb3JlYWNoICggJG9yZGVyX2lkcyBhcyAkb3JkZXJfaWQgKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJG9yZGVyICAgPSB3Y19nZXRfb3JkZXIoIChpbnQpICRvcmRlcl9pZCApOwogICAgICAgICAgICBpZiAoICEgJG9yZGVyICkgY29udGludWU7CgogICAgICAgICAgICAkZXZfdHMgICA9IHZtMl9nZXRfb3JkZXJfZXZlbnRfdHMoICRvcmRlciApOwogICAgICAgICAgICAkYXRyYWNhbyA9IFtdOwogICAgICAgICAgICBmb3JlYWNoICggJG9yZGVyLT5nZXRfaXRlbXMoKSBhcyAkaXRlbSApIHsKICAgICAgICAgICAgICAgICRhdHJhY2FvW10gPSAkaXRlbS0+Z2V0X25hbWUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYmlsbGluZyA9ICRvcmRlci0+Z2V0X2FkZHJlc3MoJ2JpbGxpbmcnKTsKICAgICAgICAgICAgJGNpdHkgICAgPSB0cmltKCAoICRiaWxsaW5nWydjaXR5J10gPz8gJycgKSAuICggISBlbXB0eSggJGJpbGxpbmdbJ3N0YXRlJ10gKSA/ICcgLSAnIC4gJGJpbGxpbmdbJ3N0YXRlJ10gOiAnJyApICk7CiAgICAgICAgICAgICRwaG9uZSAgID0gcHJlZ19yZXBsYWNlKCAnL1xELycsICcnLCAkb3JkZXItPmdldF9iaWxsaW5nX3Bob25lKCkgPzogJycgKTsKICAgICAgICAgICAgJGNyZWF0ZWQgPSAkb3JkZXItPmdldF9kYXRlX2NyZWF0ZWQoKTsKCiAgICAgICAgICAgICRyb3dzW10gPSBbCiAgICAgICAgICAgICAgICAnbnVtZXJvJyAgICAgID0+ICcjJyAuICRvcmRlci0+Z2V0X29yZGVyX251bWJlcigpLAogICAgICAgICAgICAgICAgJ2RhdGFfdmVuZGEnICA9PiAkY3JlYXRlZCA/IHdwX2RhdGUoICdkL20vWScsICRjcmVhdGVkLT5nZXRUaW1lc3RhbXAoKSApIDogJycsCiAgICAgICAgICAgICAgICAnZGF0YV9ldmVudG8nID0+ICRldl90cyA/IHdwX2RhdGUoICdkL20vWScsICRldl90cyApIDogJycsCiAgICAgICAgICAgICAgICAnZGlhX3NlbWFuYScgID0+ICRldl90cyA/IHZtMl9kaWFfc2VtYW5hX3B0YnIoICRldl90cyApIDogJycsCiAgICAgICAgICAgICAgICAnY2xpZW50ZScgICAgID0+ICRvcmRlci0+Z2V0X2Zvcm1hdHRlZF9iaWxsaW5nX2Z1bGxfbmFtZSgpLAogICAgICAgICAgICAgICAgJ3doYXRzYXBwJyAgICA9PiAkcGhvbmUsCiAgICAgICAgICAgICAgICAnYXRyYWNhbycgICAgID0+IGltcGxvZGUoICcsICcsICRhdHJhY2FvICksCiAgICAgICAgICAgICAgICAndmFsb3InICAgICAgID0+IChmbG9hdCkgJG9yZGVyLT5nZXRfdG90YWwoKSwKICAgICAgICAgICAgICAgICdzdGF0dXMnICAgICAgPT4gJG9yZGVyLT5nZXRfc3RhdHVzKCksCiAgICAgICAgICAgICAgICAnbG9jYWwnICAgICAgID0+ICRjaXR5LAogICAgICAgICAgICAgICAgJ3RpcG9fZXZlbnRvJyA9PiAoc3RyaW5nKSAoICRvcmRlci0+Z2V0X21ldGEoICd0aXBvX2V2ZW50bycgKSA/OiAnJyApLAogICAgICAgICAgICAgICAgJ2Fzc2Vzc29yJyAgICA9PiAoc3RyaW5nKSAoICRvcmRlci0+Z2V0X21ldGEoICdhc3Nlc3NvcicgKSA/OiAnJyApLAogICAgICAgICAgICAgICAgJ3N5bmNfYXQnICAgICA9PiBjdXJyZW50X3RpbWUoICdkL20vWSBIOmknICksCiAgICAgICAgICAgIF07CiAgICAgICAgICAgIC8vIGxpYmVyYXIgbWVtw7NyaWEKICAgICAgICAgICAgdW5zZXQoICRvcmRlciApOwogICAgICAgIH0gY2F0Y2ggKCBcVGhyb3dhYmxlICRlICkgewogICAgICAgICAgICAvLyBQdWxhIHBlZGlkbyBjb20gZXJybyDigJQgbsOjbyBxdWVicmEgbyBiYXRjaCBpbnRlaXJvCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoWwogICAgICAgICdzdWNjZXNzJyA9PiB0cnVlLAogICAgICAgICdwYWdlJyAgICA9PiAkcGFnZSwKICAgICAgICAnbGltaXQnICAgPT4gJGxpbWl0LAogICAgICAgICd0b3RhbCcgICA9PiBjb3VudCgkcm93cyksCiAgICAgICAgJ3BlZGlkb3MnID0+ICRyb3dzLAogICAgXSk7Cn0KCgoKLy8g4pSA4pSAIEFKQVg6IFRSSUdHRVIgQUdFTkRBIFNZTkMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX3NlbmRfbGVhZF9ub3cnLCAndm0yX2FqYXhfc2VuZF9sZWFkX25vdycpOwoKZnVuY3Rpb24gdm0yX2FqYXhfc2VuZF9sZWFkX25vdygpIHsKICAgIGlmICggISBjaGVja19hamF4X3JlZmVyZXIoJ3ZtMl9ub25jZScsICdub25jZScsIGZhbHNlKSApIHsKICAgICAgICB3cF9zZW5kX2pzb25fZXJyb3IoJ05vbmNlIGludsOhbGlkbycsIDQwMyk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCAhIGN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykgKSB7CiAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCdTZW0gcGVybWlzc8OjbycsIDQwMyk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgJHBob25lICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX1BPU1RbJ3Bob25lJ10gPz8gJycgKTsKICAgICRuYW1lICAgID0gc2FuaXRpemVfdGV4dF9maWVsZCggJF9QT1NUWyduYW1lJ10gID8/ICcnICk7CiAgICAkY2hhbm5lbCA9IHNhbml0aXplX3RleHRfZmllbGQoICRfUE9TVFsnY2hhbm5lbCddID8/IGdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfY2hhbm5lbCcsJ3dhYmFfNTAzOScpICk7CiAgICBpZiAoICEgJHBob25lICkgeyB3cF9zZW5kX2pzb25fZXJyb3IoJ1RlbGVmb25lIG9icmlnYXTDs3JpbycpOyByZXR1cm47IH0KCiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgIGlmICggISBpc3NldCgkY2hhbm5lbHNbJGNoYW5uZWxdKSApIHsgd3Bfc2VuZF9qc29uX2Vycm9yKCdDYW5hbCBpbnbDoWxpZG8nKTsgcmV0dXJuOyB9CgogICAgJGlzX3dhYmEgID0gJGNoYW5uZWxzWyRjaGFubmVsXVsndHlwZSddID09PSAnd2FiYSc7CiAgICAkdGVtcGxhdGUgPSBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX3RlbXBsYXRlJywgJycpOwogICAgJG1zZ190cGwgID0gZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9tc2cnLCAnT2kge25vbWV9ISDwn5GLIFZpIHF1ZSB2b2PDqiBzZSBpbnRlcmVzc291IGVtIG5vc3NhcyBhdHJhw6fDtWVzLiBQb3NzbyB0ZSBhanVkYXIgYSBjb250cmF0YXI/Jyk7CgogICAgJG9rID0gZmFsc2U7CiAgICBpZiAoICRpc193YWJhICYmICR0ZW1wbGF0ZSApIHsKICAgICAgICAkY29tcG9uZW50cyA9IHZtMl93YWJhX3RlbXBsYXRlX2NvbXBvbmVudHMoICR0ZW1wbGF0ZSwgJG5hbWUgPzogJ2FtaWdvJyApOwogICAgICAgICRyZXMgPSB2bTJfc2VuZF93YWJhKCRjaGFubmVsLCAkcGhvbmUsICR0ZW1wbGF0ZSwgJGNvbXBvbmVudHMpOwogICAgICAgICRvayAgPSBpc19hcnJheSgkcmVzKSA/ICRyZXNbJ29rJ10gOiAoYm9vbCkkcmVzOwogICAgfSBlbHNlIHsKICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCd7bm9tZX0nLCAkbmFtZSA/OiAnYW1pZ28nLCAkbXNnX3RwbCk7CiAgICAgICAgJG9rICAgPSB2bTJfc2VuZF96YXBpKCRjaGFubmVsLCAkcGhvbmUsICR0ZXh0KTsKICAgIH0KCiAgICBpZiAoICRvayApIHsKICAgICAgICB2bTJfbG9nKCJsZWFkcy1hcXVlY2VyIG1hbnVhbOKGknskcGhvbmV9IHZpYSB7JGNoYW5uZWx9IiwgJ2luZm8nKTsKICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ3Bob25lJyA9PiAkcGhvbmVdKTsKICAgIH0gZWxzZSB7CiAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCdGYWxoYSBubyBlbnZpbyDigJQgdmVqYSBvIExvZycpOwogICAgfQp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gQ1JPTiDigJQgQVVUTy1BUVVFQ0VSIChob3VybHkpCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAphZGRfYWN0aW9uKCAnaW5pdCcsIGZ1bmN0aW9uKCkgewogICAgLy8g4pSA4pSAIExpbXBhciBjcm9ucyBhbnRpZ29zIChhZ29yYSB0dWRvIHJvZGEgcGVsbyBtb3RvciB1bmlmaWNhZG8pIOKUgOKUgAogICAgJG9sZF9jcm9ucyA9IFsgJ3ZtMl9hdXRvX2FxdWVjZXJfY3JvbicsICd2bTJfaG90X2Nyb24nLCAndm0yX2J5ZGF0ZV9jcm9uJyBdOwogICAgZm9yZWFjaCAoICRvbGRfY3JvbnMgYXMgJGhvb2sgKSB7CiAgICAgICAgJHRzID0gd3BfbmV4dF9zY2hlZHVsZWQoICRob29rICk7CiAgICAgICAgaWYgKCAkdHMgKSB3cF91bnNjaGVkdWxlX2V2ZW50KCAkdHMsICRob29rICk7CiAgICB9CgogICAgaWYgKCAhIHdwX25leHRfc2NoZWR1bGVkKCAndm0yX3Byb21vX2NsZWFudXBfY3JvbicgKSApIHsKICAgICAgICB3cF9zY2hlZHVsZV9ldmVudCggdGltZSgpICsgMTIwLCAnaG91cmx5JywgJ3ZtMl9wcm9tb19jbGVhbnVwX2Nyb24nICk7CiAgICB9CiAgICAvLyBBbGVydGFzIGRlIGFnZW5kYSDigJQgY3JvbiBkacOhcmlvICgwODowMCBTUCB2aWEgZGFpbHkgV1ApCiAgICBpZiAoICEgd3BfbmV4dF9zY2hlZHVsZWQoICd2bTJfYWdlbmRhX2FsZXJ0X2Nyb24nICkgKSB7CiAgICAgICAgd3Bfc2NoZWR1bGVfZXZlbnQoIHRpbWUoKSArIDYwMCwgJ2RhaWx5JywgJ3ZtMl9hZ2VuZGFfYWxlcnRfY3JvbicgKTsKICAgIH0KICAgIC8vIE1vdG9yIHVuaWZpY2FkbyDigJQgcm9kYSBIT1Qg4oaSIEFxdWVjZXIg4oaSIFBvckRhdGEg4oaSIFNFL0VOVMODTwogICAgaWYgKCAhIHdwX25leHRfc2NoZWR1bGVkKCAndm0yX3NvZmlhX2F1dG9tYXRpb25zX2Nyb24nICkgKSB7CiAgICAgICAgd3Bfc2NoZWR1bGVfZXZlbnQoIHRpbWUoKSArIDE4MCwgJ2hvdXJseScsICd2bTJfc29maWFfYXV0b21hdGlvbnNfY3JvbicgKTsKICAgIH0KfSApOwoKLy8gUnVubmVycyBpbmRpdmlkdWFpcyBOw4NPIHTDqm0gbWFpcyBjcm9uIHByw7NwcmlvIOKAlCBjaGFtYWRvcyBhcGVuYXMgcGVsbyBtb3RvciB1bmlmaWNhZG8KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBDUk9OIOKAlCBQUk9NTyBDTEVBTlVQIChhdXRvLWV4cGlyYSBwcm9tb3MgdmVuY2lkYXMpCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAphZGRfYWN0aW9uKCAndm0yX3Byb21vX2NsZWFudXBfY3JvbicsICd2bTJfcHJvbW9fY2xlYW51cF9ydW4nICk7CgpmdW5jdGlvbiB2bTJfcHJvbW9fY2xlYW51cF9ydW4oKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdGJsID0gJ3d6X2FjdGl2ZV9kaXNjb3VudHMnOwoKICAgICRleHBpcmVkID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICJTRUxFQ1QgKiBGUk9NIHskdGJsfSBXSEVSRSByZXZlcnRlZF9hdCBJUyBOVUxMIEFORCBleHBpcmVzX2F0IElTIE5PVCBOVUxMIEFORCBleHBpcmVzX2F0ICE9ICcwMDAwLTAwLTAwIDAwOjAwOjAwJyBBTkQgZXhwaXJlc19hdCA8IE5PVygpIgogICAgKTsKICAgIGlmICggZW1wdHkoJGV4cGlyZWQpICkgcmV0dXJuOwoKICAgIGZvcmVhY2ggKCAkZXhwaXJlZCBhcyAkcHJvbW8gKSB7CiAgICAgICAgLy8gdjEuNS4xODogUmV2ZXJ0ZXIgdmlhIFdDIFByb2R1Y3QgQVBJIChjb21wYXTDrXZlbCBjb20gSFBPUykKICAgICAgICAkcHJvZHVjdCA9IGZ1bmN0aW9uX2V4aXN0cygnd2NfZ2V0X3Byb2R1Y3QnKSA/IHdjX2dldF9wcm9kdWN0KCAoaW50KSRwcm9tby0+cHJvZHVjdF9pZCApIDogbnVsbDsKICAgICAgICBpZiAoICRwcm9kdWN0ICkgewogICAgICAgICAgICAkcHJvZHVjdC0+c2V0X3NhbGVfcHJpY2UoICcnICk7CiAgICAgICAgICAgICRwcm9kdWN0LT5zYXZlKCk7CiAgICAgICAgfQogICAgICAgIC8vIHYxLjUuMTg6IERlbGV0YXIgY3Vwb20gV29vQ29tbWVyY2UgcGVybWFuZW50ZW1lbnRlIChwb3IgY8OzZGlnbywgbsOjbyBjb3Vwb25faWQpCiAgICAgICAgaWYgKCAhZW1wdHkoJHByb21vLT5jb3Vwb25fY29kZSkgKSB7CiAgICAgICAgICAgICRjb3Vwb25fcG9zdCA9IGdldF9wYWdlX2J5X3RpdGxlKCAkcHJvbW8tPmNvdXBvbl9jb2RlLCBPQkpFQ1QsICdzaG9wX2NvdXBvbicgKTsKICAgICAgICAgICAgaWYgKCAkY291cG9uX3Bvc3QgKSB7CiAgICAgICAgICAgICAgICB3cF9kZWxldGVfcG9zdCggJGNvdXBvbl9wb3N0LT5JRCwgdHJ1ZSApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIE1hcmNhciBjb21vIHJldmVydGlkYQogICAgICAgICR3cGRiLT51cGRhdGUoICR0YmwsIFsncmV2ZXJ0ZWRfYXQnID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKV0sIFsnaWQnID0+IChpbnQpJHByb21vLT5pZF0gKTsKICAgICAgICB2bTJfbG9nKCAicHJvbW9fY2xlYW51cDogUHJvbW8gI3skcHJvbW8tPmlkfSAoeyRwcm9tby0+cHJvZHVjdF9uYW1lfSkgYXV0by1leHBpcmFkYSArIGN1cG9tIGRlbGV0YWRvIiwgJ2luZm8nICk7CiAgICB9Cn0KCmZ1bmN0aW9uIHZtMl9hdXRvX2FxdWVjZXJfcnVuKCkgewogICAgaWYgKCBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX29uJywgJzAnKSAhPT0gJzEnICkgcmV0dXJuOwoKICAgICR0aHJlc2hvbGQgPSAoaW50KWdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfdGhyZXNob2xkJywgJzYwJyk7CiAgICAkY2hhbm5lbCAgID0gZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9jaGFubmVsJywgJ3dhYmFfNTAzOScpOwogICAgJHRlbXBsYXRlICA9IGdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfdGVtcGxhdGUnLCAnJyk7CiAgICAkY29vbGRvd24gICA9IG1heCggKGludClnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX2Nvb2xkb3duJywgJzI0JyksIChpbnQpZ2V0X29wdGlvbigndm0yX2Nvb2xkb3duX2hvdXJzJywgMjQpICk7CiAgICAkYmF0Y2ggICAgICA9IG1pbiggbWF4KDEsIChpbnQpZ2V0X29wdGlvbigndm0yX2F1dG9fYXF1ZWNlcl9iYXRjaCcsICcyMCcpKSwgbWF4KDEsIChpbnQpZ2V0X29wdGlvbigndm0yX2JhdGNoX3NpemUnLCAxMCkpICk7CiAgICAkYmF0Y2hfZGVsYXkgPSAoaW50KSBnZXRfb3B0aW9uKCd2bTJfYmF0Y2hfZGVsYXknLCAzKTsKICAgICRtYXhfd2Vla2x5ID0gKGludClnZXRfb3B0aW9uKCd2bTJfY29udGFjdF93ZWVrbHlfbGltaXQnLCAnMCcpOwogICAgJG1zZ190cGwgICA9IGdldF9vcHRpb24oJ3ZtMl9hdXRvX2FxdWVjZXJfbXNnJywgJ09pIHtub21lfSEg8J+RiyBWaSBxdWUgdm9jw6ogc2UgaW50ZXJlc3NvdSBlbSBub3NzYXMgYXRyYcOnw7Vlcy4gUG9zc28gdGUgYWp1ZGFyIGEgY29udHJhdGFyPycpOwoKICAgICRjaGFubmVscyA9IHZtMl9jaGFubmVscygpOwogICAgaWYgKCAhIGlzc2V0KCRjaGFubmVsc1skY2hhbm5lbF0pICkgewogICAgICAgIHZtMl9sb2coImF1dG9fYXF1ZWNlcjogY2FuYWwgeyRjaGFubmVsfSBuw6NvIGVuY29udHJhZG8iLCAnZXJyb3InKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAkaXNfd2FiYSA9ICRjaGFubmVsc1skY2hhbm5lbF1bJ3R5cGUnXSA9PT0gJ3dhYmEnOwoKICAgIC8vIEtpbGwgc3dpdGNoIGdsb2JhbAogICAgaWYgKCBnZXRfb3B0aW9uKCd2bTJfYXF1ZWNlcl9raWxsJywgJzEnKSA9PT0gJzEnICkgewogICAgICAgIHZtMl9sb2coImF1dG9fYXF1ZWNlcjoga2lsbCBzd2l0Y2ggT04g4oCUIHB1bGFuZG8gY3JvbiIsICdpbmZvJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFF1aWV0IEhvdXJzIOKAlCBuw6NvIGVudmlhIGVtIGhvcsOhcmlvIHNpbGVuY2lvc28KICAgIGlmICggdm0yX2lzX3F1aWV0X3RpbWUoKSApIHsKICAgICAgICB2bTJfbG9nKCJhdXRvX2FxdWVjZXI6IHF1aWV0IGhvdXJzIGF0aXZvIOKAlCBwdWxhbmRvIGNyb24iLCAnaW5mbycpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIENhcCBHbG9iYWwgRGnDoXJpbwogICAgaWYgKCB2bTJfZGFpbHlfY2FwX3JlYWNoZWQoKSApIHsKICAgICAgICB2bTJfbG9nKCJhdXRvX2FxdWVjZXI6IGNhcCBnbG9iYWwgZGnDoXJpbyBhdGluZ2lkbyDigJQgcHVsYW5kbyBjcm9uIiwgJ2luZm8nKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJGxlYWRzID0gdm0yX2dldF9sZWFkc19wYXJhX2FxdWVjZXIoWydzY29yZV9taW4nID0+ICR0aHJlc2hvbGQsICdsaW1pdCcgPT4gNTAsICdjYWNoZScgPT4gZmFsc2VdKTsKICAgIGlmICggZW1wdHkoJGxlYWRzKSApIHJldHVybjsKCiAgICBnbG9iYWwgJHdwZGI7CiAgICAkc2VudCA9IDA7CgogICAgZm9yZWFjaCAoICRsZWFkcyBhcyAkbGVhZCApIHsKICAgICAgICAkcGhvbmUgPSAkbGVhZFsncGhvbmUnXTsKICAgICAgICAkbmFtZSAgPSAkbGVhZFsnbmFtZSddID8/ICcnOwoKICAgICAgICAvLyBEZWR1cCBjZW50cmFsIOKAlCB1c2Egdm0yX3NlbmRzIGNvbW8gw6FyYml0cm8gKGNvb2xkb3duICsgbGltaXRlIHNlbWFuYWwpCiAgICAgICAgaWYgKCAhIHZtMl9jYW5fc2VuZCggJHBob25lLCAkY29vbGRvd24sICRtYXhfd2Vla2x5ICkgKSBjb250aW51ZTsKCiAgICAgICAgJHRleHRfd2l0aF9saW5rID0gc3RyX3JlcGxhY2UoICd7bGlua30nLCB2bTJfdHJhY2tpbmdfdXJsKCAkcGhvbmUsICdhcXVlY2VyJyApLCAkbXNnX3RwbCApOwogICAgICAgICRvayA9IGZhbHNlOwogICAgICAgIGlmICggJGlzX3dhYmEgJiYgJHRlbXBsYXRlICkgewogICAgICAgICAgICAkY29tcG9uZW50cyA9IHZtMl93YWJhX3RlbXBsYXRlX2NvbXBvbmVudHMoICR0ZW1wbGF0ZSwgJG5hbWUgPzogJ2FtaWdvJyApOwogICAgICAgICAgICAkcmVzID0gdm0yX3NlbmRfd2FiYSggJGNoYW5uZWwsICRwaG9uZSwgJHRlbXBsYXRlLCAkY29tcG9uZW50cyApOwogICAgICAgICAgICAkb2sgID0gaXNfYXJyYXkoJHJlcykgPyAkcmVzWydvayddIDogKGJvb2wpJHJlczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCAne25vbWV9JywgJG5hbWUgPzogJ2FtaWdvJywgJHRleHRfd2l0aF9saW5rICk7CiAgICAgICAgICAgICRvayAgID0gdm0yX3NlbmRfemFwaSggJGNoYW5uZWwsICRwaG9uZSwgJHRleHQgKTsKICAgICAgICB9CgogICAgICAgIGlmICggJG9rICkgewogICAgICAgICAgICB2bTJfcmVjb3JkX3NlbmQoICRwaG9uZSwgJ2FxdWVjZXInLCAkY2hhbm5lbCApOwogICAgICAgICAgICB2bTJfbG9nKCAiYXV0b19hcXVlY2Vy4oaSeyRwaG9uZX0gc2NvcmU9eyRsZWFkWydzY29yZSddfSB2aWEgeyRjaGFubmVsfSIsICdpbmZvJyApOwogICAgICAgICAgICAkc2VudCsrOwogICAgICAgIH0KCiAgICAgICAgLy8gW3YxLjUuOTRdIEVtYWlsIHBhcmFsZWxvIC8gZmFsbGJhY2sg4oCUIFBvciBEYXRhCiAgICAgICAgaWYgKCBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX2VtYWlsX29uJywgJzAnKSA9PT0gJzEnICkgewogICAgICAgICAgICAkY29udGFjdF9yb3cgPSAkd3BkYi0+Z2V0X3Jvdygkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgICAgICJTRUxFQ1QgZW1haWwsIG5hbWUgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfY29udGFjdHMgV0hFUkUgcGhvbmUgPSAlcyBMSU1JVCAxIiwKICAgICAgICAgICAgICAgICRwaG9uZQogICAgICAgICAgICApKTsKICAgICAgICAgICAgJGNvbnRhY3RfZW1haWxfYXEgPSAkY29udGFjdF9yb3ctPmVtYWlsID8/ICcnOwogICAgICAgICAgICBpZiAoICRjb250YWN0X2VtYWlsX2FxICYmIGlzX2VtYWlsKCRjb250YWN0X2VtYWlsX2FxKSApIHsKICAgICAgICAgICAgICAgICRzdWJqX2FxICAgPSBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX2VtYWlsX3N1YmplY3QnLCAnVm9jw6ogdGVtIHVtIGV2ZW50byBjaGVnYW5kbyEgVmFtb3MgZmVjaGFyIGFzIGF0cmHDp8O1ZXM/IPCfjoknKTsKICAgICAgICAgICAgICAgICRib2R5X3RwbCAgPSBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX2VtYWlsX2JvZHknLCAnJyk7CiAgICAgICAgICAgICAgICAkbm1fYXEgICAgID0gJGNvbnRhY3Rfcm93LT5uYW1lID86ICgkbmFtZSA/OiAnYW1pZ28nKTsKICAgICAgICAgICAgICAgICRsaW5rX2FxICAgPSB2bTJfdHJhY2tpbmdfdXJsKCAkcGhvbmUsICdhcXVlY2VyJyApOwogICAgICAgICAgICAgICAgJGJvZHlfYXEgICA9IHN0cl9yZXBsYWNlKFsne25vbWV9Jywne2xpbmt9J10sIFskbm1fYXEsICRsaW5rX2FxXSwgJGJvZHlfdHBsKTsKICAgICAgICAgICAgICAgICRib2R5X2FxICAgPSBubDJicihlc2NfaHRtbCgkYm9keV9hcSkpOwogICAgICAgICAgICAgICAgJGhlYWRlcnMgICA9IFsnQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgnLCAnRnJvbTogVml2YU1haXMgRXZlbnRvcyA8bm9yZXBseUB2aXZhbWFpc2V2ZW50b3MuY29tPiddOwogICAgICAgICAgICAgICAgJG1haWxfb2sgICA9IHdwX21haWwoJGNvbnRhY3RfZW1haWxfYXEsICRzdWJqX2FxLCAkYm9keV9hcSwgJGhlYWRlcnMpOwogICAgICAgICAgICAgICAgaWYgKCAkbWFpbF9vayApIHsKICAgICAgICAgICAgICAgICAgICB2bTJfcmVjb3JkX3NlbmQoICRwaG9uZSwgJ2FxdWVjZXJfZW1haWwnLCAnZW1haWwnICk7CiAgICAgICAgICAgICAgICAgICAgdm0yX2xvZyggImF1dG9fYXF1ZWNlcl9lbWFpbOKGknskY29udGFjdF9lbWFpbF9hcX0gKHskcGhvbmV9KSIsICdpbmZvJyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRiYXRjaF9kZWxheSA+IDAgJiYgJHNlbnQgPiAwICkgc2xlZXAoICRiYXRjaF9kZWxheSApOwogICAgICAgIGlmICggJHNlbnQgPj0gJGJhdGNoICkgYnJlYWs7IC8vIGJhdGNoIGxpbWl0IGNvbmZpZ3Vyw6F2ZWwKICAgIH0KCiAgICBpZiAoICRzZW50ID4gMCApIHsKICAgICAgICB2bTJfbG9nKCAiYXV0b19hcXVlY2VyX2Nyb246IHskc2VudH0gbWVuc2FnZW5zIGVudmlhZGFzICh0aHJlc2hvbGQ9eyR0aHJlc2hvbGR9KSIsICdpbmZvJyApOwogICAgICAgIGRlbGV0ZV90cmFuc2llbnQoICd2bTJfbGVhZHNfYXFfdjInICk7CiAgICB9Cn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBBVVRPLUhPVCDigJQgZGlzcGFybyBhdXRvbcOhdGljbyBwYXJhIGxlYWRzIEtvbW1vIEhPVCAoSW5jb21pbmcpCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfaG90X3J1bigpIHsKICAgIGlmICggZ2V0X29wdGlvbiggJ3ZtMl9ob3Rfb24nLCAgICcwJyApICE9PSAnMScgKSByZXR1cm47CiAgICBpZiAoIGdldF9vcHRpb24oICd2bTJfaG90X2tpbGwnLCAnMScgKSA9PT0gJzEnICkgcmV0dXJuOwogICAgaWYgKCBnZXRfb3B0aW9uKCAndm0yX2tpbGxfc3dpdGNoJywgJzAnICkgPT09ICcxJyApIHJldHVybjsKICAgIC8vIFF1aWV0IEhvdXJzIOKAlCBuw6NvIGVudmlhIGVtIGhvcsOhcmlvIHNpbGVuY2lvc28KICAgIGlmICggdm0yX2lzX3F1aWV0X3RpbWUoKSApIHsKICAgICAgICB2bTJfbG9nKCAndm0yX2hvdF9ydW46IHF1aWV0IGhvdXJzIGF0aXZvIOKAlCBwdWxhbmRvIGNyb24nLCAnaW5mbycgKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAvLyBDYXAgR2xvYmFsIERpw6FyaW8KICAgIGlmICggdm0yX2RhaWx5X2NhcF9yZWFjaGVkKCkgKSB7CiAgICAgICAgdm0yX2xvZyggJ3ZtMl9ob3RfcnVuOiBjYXAgZ2xvYmFsIGRpw6FyaW8gYXRpbmdpZG8g4oCUIHB1bGFuZG8gY3JvbicsICdpbmZvJyApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAkcHJlZmVycmVkID0gZ2V0X29wdGlvbiggJ3ZtMl9ob3RfY2hhbm5lbCcsICAnd2FiYV81MDM5JyApOwogICAgLy8gJHN0cmljdD10cnVlOiBudW5jYSB2YXphciBwYXJhIGNhbmFsIG7Do28gY29uZmlndXJhZG8gKGV4OiA3NTUxIHF1YW5kbyB3YWJhXzUwMzkgc2F0dXJhKQogICAgJGNoYW5uZWwgICA9IHZtMl9nZXRfYmVzdF9jaGFubmVsKCAkcHJlZmVycmVkLCB0cnVlICk7CiAgICBpZiAoICEgJGNoYW5uZWwgKSB7CiAgICAgICAgdm0yX2xvZyggJ3ZtMl9ob3RfcnVuOiBjYW5hbCBjb25maWd1cmFkbyBpbmRpc3BvbsOtdmVsIG91IGxpbWl0ZSBkacOhcmlvIGF0aW5naWRvIOKAlCBhZ3VhcmRhbmRvIHByw7N4aW1vIGNpY2xvJywgJ2luZm8nICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRjaGFubmVscyAgPSB2bTJfY2hhbm5lbHMoKTsKICAgICRpc193YWJhICAgPSBpc3NldCggJGNoYW5uZWxzWyAkY2hhbm5lbCBdICkgJiYgJGNoYW5uZWxzWyAkY2hhbm5lbCBdWyd0eXBlJ10gPT09ICd3YWJhJzsKICAgICR0ZW1wbGF0ZSAgPSBnZXRfb3B0aW9uKCAndm0yX2hvdF90ZW1wbGF0ZScsICcnICk7CiAgICAkbXNnX3RwbCAgID0gZ2V0X29wdGlvbiggJ3ZtMl9ob3RfbXNnJywKICAgICAgICAiT2kge25vbWV9ISDwn5GLIEFxdWkgw6kgZGEgVml2YU1haXMg4oCUIHZvY8OqIHRlbSB1bSBldmVudG8gZW0gdmlzdGE/XG5BaW5kYSBkw6EgdGVtcG8gZGUgZmVjaGFyIGFzIGF0cmHDp8O1ZXMgcGVyZmVpdGFzLiBQb3NzbyBhanVkYXIhIPCfjolcbntsaW5rfSIgKTsKICAgICRjb29sZG93biAgICA9IG1heCggKGludCkgZ2V0X29wdGlvbiggJ3ZtMl9ob3RfY29vbGRvd24nLCAnNzInICksIChpbnQpIGdldF9vcHRpb24oJ3ZtMl9jb29sZG93bl9ob3VycycsIDI0KSApOwogICAgJGJhdGNoICAgICAgID0gbWluKCAoaW50KSBnZXRfb3B0aW9uKCAndm0yX2hvdF9iYXRjaCcsICcxMCcgKSwgbWF4KDEsIChpbnQpIGdldF9vcHRpb24oJ3ZtMl9iYXRjaF9zaXplJywgMTApKSApOwogICAgJGJhdGNoX2RlbGF5ID0gKGludCkgZ2V0X29wdGlvbigndm0yX2JhdGNoX2RlbGF5JywgMyk7CiAgICAkbWF4X3dlZWtseSAgPSAoaW50KSBnZXRfb3B0aW9uKCAndm0yX2NvbnRhY3Rfd2Vla2x5X2xpbWl0JywgJzAnICk7CgogICAgZ2xvYmFsICR3cGRiOwogICAgLy8gSE9UIHYzOiBjcml0w6lyaW8gcG9yIGRhdGEgZG8gZXZlbnRvICh2bTJfY29udGFjdHMsIFktbS1kKQogICAgLy8gQ29udGF0b3MgY29tIGV2ZW50byBub3MgcHLDs3hpbW9zIDkwIGRpYXMgT1Ugc2NvcmUg4omlIDcwCiAgICAkbGVhZHMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgIlNFTEVDVCBwaG9uZSwgbmFtZSwgZGF0YV9ldmVudG8KICAgICAgICAgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfY29udGFjdHMKICAgICAgICAgV0hFUkUgcGhvbmUgIT0gJycKICAgICAgICAgICBBTkQgKAogICAgICAgICAgICAgICAoIGRhdGFfZXZlbnRvIElTIE5PVCBOVUxMIEFORCBkYXRhX2V2ZW50byAhPSAnJwogICAgICAgICAgICAgICAgIEFORCBkYXRhX2V2ZW50byA+PSBDVVJEQVRFKCkKICAgICAgICAgICAgICAgICBBTkQgZGF0YV9ldmVudG8gPD0gREFURV9BREQoQ1VSREFURSgpLCBJTlRFUlZBTCA5MCBEQVkpICkKICAgICAgICAgICAgICAgT1Igc2NvcmUgPj0gNzAKICAgICAgICAgICApCiAgICAgICAgIE9SREVSIEJZCiAgICAgICAgICAgICBDQVNFIFdIRU4gZGF0YV9ldmVudG8gSVMgTk9UIE5VTEwgQU5EIGRhdGFfZXZlbnRvICE9ICcnCiAgICAgICAgICAgICAgICAgIFRIRU4gZGF0YV9ldmVudG8gRUxTRSAnOTk5OS0xMi0zMScgRU5EIEFTQywKICAgICAgICAgICAgIHNjb3JlIERFU0MKICAgICAgICAgTElNSVQgMTAwIgogICAgKTsKCiAgICAkc2VudCA9IDA7CiAgICBmb3JlYWNoICggJGxlYWRzIGFzICRsZWFkICkgewogICAgICAgIGlmICggJHNlbnQgPj0gJGJhdGNoICkgYnJlYWs7CiAgICAgICAgaWYgKCAkYmF0Y2hfZGVsYXkgPiAwICYmICRzZW50ID4gMCApIHNsZWVwKCAkYmF0Y2hfZGVsYXkgKTsKICAgICAgICAkcGhvbmUgPSAkbGVhZC0+cGhvbmU7CiAgICAgICAgJG5hbWUgID0gJGxlYWQtPm5hbWUgPzogJ2FtaWdvJzsKCiAgICAgICAgaWYgKCAhIHZtMl9jYW5fc2VuZCggJHBob25lLCAkY29vbGRvd24sICRtYXhfd2Vla2x5ICkgKSBjb250aW51ZTsKCiAgICAgICAgJGxpbmsgPSB2bTJfdHJhY2tpbmdfdXJsKCAkcGhvbmUsICdob3QnICk7CiAgICAgICAgJG9rICAgPSBmYWxzZTsKICAgICAgICBpZiAoICRpc193YWJhICYmICR0ZW1wbGF0ZSApIHsKICAgICAgICAgICAgJGNvbXBvbmVudHMgPSB2bTJfd2FiYV90ZW1wbGF0ZV9jb21wb25lbnRzKCAkdGVtcGxhdGUsICRuYW1lICk7CiAgICAgICAgICAgICRyZXMgPSB2bTJfc2VuZF93YWJhKCAkY2hhbm5lbCwgJHBob25lLCAkdGVtcGxhdGUsICRjb21wb25lbnRzICk7CiAgICAgICAgICAgICRvayAgPSBpc19hcnJheSggJHJlcyApID8gJHJlc1snb2snXSA6IChib29sKSAkcmVzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2UoIFsgJ3tub21lfScsICd7bGlua30nIF0sIFsgJG5hbWUsICRsaW5rIF0sICRtc2dfdHBsICk7CiAgICAgICAgICAgICRvayAgID0gdm0yX3NlbmRfemFwaSggJGNoYW5uZWwsICRwaG9uZSwgJHRleHQgKTsKICAgICAgICB9CgogICAgICAgIGlmICggJG9rICkgewogICAgICAgICAgICB2bTJfcmVjb3JkX3NlbmQoICRwaG9uZSwgJ2hvdCcsICRjaGFubmVsICk7CiAgICAgICAgICAgIHZtMl9sb2coICJ2bTJfaG904oaSeyRwaG9uZX0gdmlhIHskY2hhbm5lbH0iLCAnaW5mbycgKTsKICAgICAgICAgICAgJHNlbnQrKzsKICAgICAgICB9CgogICAgICAgIC8vIFt2MS41Ljk0XSBFbWFpbCBwYXJhbGVsbyAvIGZhbGxiYWNrIOKAlCBIT1QKICAgICAgICBpZiAoIGdldF9vcHRpb24oJ3ZtMl9ob3RfZW1haWxfb24nLCAnMCcpID09PSAnMScgKSB7CiAgICAgICAgICAgICRjb250YWN0X2hvdCA9ICR3cGRiLT5nZXRfcm93KCR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAgICAgIlNFTEVDVCBlbWFpbCwgbmFtZSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9jb250YWN0cyBXSEVSRSBwaG9uZSA9ICVzIExJTUlUIDEiLAogICAgICAgICAgICAgICAgJHBob25lCiAgICAgICAgICAgICkpOwogICAgICAgICAgICAkaG90X2VtYWlsX2FkZHIgPSAkY29udGFjdF9ob3QtPmVtYWlsID8/ICcnOwogICAgICAgICAgICBpZiAoICRob3RfZW1haWxfYWRkciAmJiBpc19lbWFpbCgkaG90X2VtYWlsX2FkZHIpICkgewogICAgICAgICAgICAgICAgJHN1YmpfaG90ICA9IGdldF9vcHRpb24oJ3ZtMl9ob3RfZW1haWxfc3ViamVjdCcsICdWb2PDqiBlc3TDoSBwcm9jdXJhbmRvIGF0cmHDp8O1ZXMgcGFyYSBzdWEgZmVzdGE/IPCfjoknKTsKICAgICAgICAgICAgICAgICRib2R5X2hvdF90cGwgPSBnZXRfb3B0aW9uKCd2bTJfaG90X2VtYWlsX2JvZHknLCAnJyk7CiAgICAgICAgICAgICAgICAkbm1faG90ICAgID0gJGNvbnRhY3RfaG90LT5uYW1lID86ICgkbmFtZSA/OiAnYW1pZ28nKTsKICAgICAgICAgICAgICAgICRsaW5rX2hvdCAgPSB2bTJfdHJhY2tpbmdfdXJsKCAkcGhvbmUsICdob3QnICk7CiAgICAgICAgICAgICAgICAkYm9keV9ob3QgID0gc3RyX3JlcGxhY2UoWyd7bm9tZX0nLCd7bGlua30nXSwgWyRubV9ob3QsICRsaW5rX2hvdF0sICRib2R5X2hvdF90cGwpOwogICAgICAgICAgICAgICAgJGJvZHlfaG90ICA9IG5sMmJyKGVzY19odG1sKCRib2R5X2hvdCkpOwogICAgICAgICAgICAgICAgJGhlYWRlcnMgICA9IFsnQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgnLCAnRnJvbTogVml2YU1haXMgRXZlbnRvcyA8bm9yZXBseUB2aXZhbWFpc2V2ZW50b3MuY29tPiddOwogICAgICAgICAgICAgICAgJG1haWxfb2sgICA9IHdwX21haWwoJGhvdF9lbWFpbF9hZGRyLCAkc3Vial9ob3QsICRib2R5X2hvdCwgJGhlYWRlcnMpOwogICAgICAgICAgICAgICAgaWYgKCAkbWFpbF9vayApIHsKICAgICAgICAgICAgICAgICAgICB2bTJfcmVjb3JkX3NlbmQoICRwaG9uZSwgJ2hvdF9lbWFpbCcsICdlbWFpbCcgKTsKICAgICAgICAgICAgICAgICAgICB2bTJfbG9nKCAidm0yX2hvdF9lbWFpbOKGknskaG90X2VtYWlsX2FkZHJ9ICh7JHBob25lfSkiLCAnaW5mbycgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRzZW50ID4gMCApIHZtMl9sb2coICJ2bTJfaG90X2Nyb246IHskc2VudH0gbXNncyBIT1QgZW52aWFkYXMiLCAnaW5mbycgKTsKfQovLyB2bTJfaG90X3J1bigpIGFnb3JhIGNoYW1hZG8gYXBlbmFzIHBlbG8gbW90b3IgdW5pZmljYWRvICh2bTJfd2FybXVwX3VuaWZpZWRfcnVuKQoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEFVVE8tQllEQVRFIOKAlCBkaXNwYXJvIHBvciBwcm94aW1pZGFkZSBkZSBkYXRhIGRvIGV2ZW50bwovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2J5ZGF0ZV9ydW4oKSB7CiAgICBpZiAoIGdldF9vcHRpb24oICd2bTJfYnlkYXRlX2tpbGwnLCAnMScgKSA9PT0gJzEnICkgcmV0dXJuOwogICAgaWYgKCBnZXRfb3B0aW9uKCAndm0yX2tpbGxfc3dpdGNoJywgJzAnICkgPT09ICcxJyApIHJldHVybjsKICAgIC8vIFF1aWV0IEhvdXJzIOKAlCBuw6NvIGVudmlhIGVtIGhvcsOhcmlvIHNpbGVuY2lvc28KICAgIGlmICggdm0yX2lzX3F1aWV0X3RpbWUoKSApIHsKICAgICAgICB2bTJfbG9nKCAndm0yX2J5ZGF0ZV9ydW46IHF1aWV0IGhvdXJzIGF0aXZvIOKAlCBwdWxhbmRvIGNyb24nLCAnaW5mbycgKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAvLyBDYXAgR2xvYmFsIERpw6FyaW8KICAgIGlmICggdm0yX2RhaWx5X2NhcF9yZWFjaGVkKCkgKSB7CiAgICAgICAgdm0yX2xvZyggJ3ZtMl9ieWRhdGVfcnVuOiBjYXAgZ2xvYmFsIGRpw6FyaW8gYXRpbmdpZG8g4oCUIHB1bGFuZG8gY3JvbicsICdpbmZvJyApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAkY2hhbm5lbCAgPSBnZXRfb3B0aW9uKCAndm0yX2J5ZGF0ZV9jaGFubmVsJywgJ3dhYmFfNTAzOScgKTsKICAgICRjaGFubmVscyA9IHZtMl9jaGFubmVscygpOwogICAgJGlzX3dhYmEgID0gaXNzZXQoICRjaGFubmVsc1sgJGNoYW5uZWwgXSApICYmICRjaGFubmVsc1sgJGNoYW5uZWwgXVsndHlwZSddID09PSAnd2FiYSc7CgogICAgLy8gR3J1cG9zIGRlIGRhdGE6IGNoYXZlID0+IFttaW5fZGlhcywgbWF4X2RpYXMsIGNvb2xkb3duX2hdCiAgICAvLyBbdjEuNS4xMzNdIFJhbmdlcyBzaW5jcm9uaXphZG9zIGNvbSBjbHVzdGVycyBkYSBVSQogICAgJGJkX2dyb3VwcyA9IFsKICAgICAgICAnc2VtYW5hJyAgICAgPT4gWyAgMCwgIDcsICAyNCBdLAogICAgICAgICdxdWluemVuYScgICA9PiBbICA4LCAxNCwgIDQ4IF0sCiAgICAgICAgJ21lcycgICAgICAgID0+IFsgMTUsIDMwLCAgNzIgXSwKICAgICAgICAndHJlc19tZXNlcycgPT4gWyAzMSwgOTAsIDE2OCBdLAogICAgICAgICdzZWlzX21lc2VzJyA9PiBbIDkxLCAxODAsIDMzNiBdLAogICAgXTsKCiAgICBnbG9iYWwgJHdwZGI7CiAgICAkc2VudCAgICAgICAgPSAwOwogICAgJGJhdGNoICAgICAgID0gbWF4KDEsIChpbnQpIGdldF9vcHRpb24oJ3ZtMl9iYXRjaF9zaXplJywgMTApKTsKICAgICRiYXRjaF9kZWxheSA9IChpbnQpIGdldF9vcHRpb24oJ3ZtMl9iYXRjaF9kZWxheScsIDMpOwogICAgJG1heF93ZWVrbHkgID0gKGludCkgZ2V0X29wdGlvbiggJ3ZtMl9jb250YWN0X3dlZWtseV9saW1pdCcsICcwJyApOwogICAgJGdsb2JhbF9jb29sID0gKGludCkgZ2V0X29wdGlvbigndm0yX2Nvb2xkb3duX2hvdXJzJywgMjQpOwoKICAgIGZvcmVhY2ggKCAkYmRfZ3JvdXBzIGFzICRna2V5ID0+IFsgJGRtaW4sICRkbWF4LCAkY29vbCBdICkgewogICAgICAgIC8vIFt2MS41LjE2NF0gZ2xvYmFsX2Nvb2w9MCA9IGJ5cGFzcyB0b3RhbCBkZSBjb29sZG93bjsgY2FzbyBjb250csOhcmlvLCB1c2EgbyBtYWlvciBlbnRyZSBncnVwbyBlIGdsb2JhbAogICAgICAgICRjb29sID0gKCAkZ2xvYmFsX2Nvb2wgPT09IDAgKSA/IDAgOiBtYXgoICRjb29sLCAkZ2xvYmFsX2Nvb2wgKTsKICAgICAgICAkZ19vbiA9IGdldF9vcHRpb24oICJ2bTJfYnlkYXRlX3skZ2tleX1fb24iLCAnMCcgKTsKICAgICAgICBpZiAoICRnX29uICE9PSAnMScgKSBjb250aW51ZTsKCiAgICAgICAgJGdfdG1wbCA9IGdldF9vcHRpb24oICJ2bTJfYnlkYXRlX3skZ2tleX1fdGVtcGxhdGUiLCAnJyApOwogICAgICAgICRnX21zZyAgPSBnZXRfb3B0aW9uKCAidm0yX2J5ZGF0ZV97JGdrZXl9X21zZyIsCiAgICAgICAgICAgICJPaSB7bm9tZX0hIPCfjokgU3VhIGZlc3RhIGVtIHtkYXRhX2V2ZW50b30gZXN0w6EgY2hlZ2FuZG8hXG5BaW5kYSBwcmVjaXNhIGRlIGFsZ3VtYSBhdHJhw6fDo28/IFBvc3NvIGFqdWRhciEg8J+Oilxue2xpbmt9IiApOwoKICAgICAgICAvLyBQb3IgRGF0YSB2MjogdXNhIHZtMl9jb250YWN0cyAoZGF0YV9ldmVudG8gZW0gWS1tLWQpCiAgICAgICAgJGxlYWRzID0gJHdwZGItPmdldF9yZXN1bHRzKCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgIlNFTEVDVCBwaG9uZSwgbmFtZSwgZGF0YV9ldmVudG8KICAgICAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX2NvbnRhY3RzCiAgICAgICAgICAgICBXSEVSRSBwaG9uZSAhPSAnJwogICAgICAgICAgICAgICBBTkQgZGF0YV9ldmVudG8gSVMgTk9UIE5VTEwgQU5EIGRhdGFfZXZlbnRvICE9ICcnCiAgICAgICAgICAgICAgIEFORCBEQVRFRElGRihkYXRhX2V2ZW50bywgQ1VSREFURSgpKSBCRVRXRUVOICVkIEFORCAlZAogICAgICAgICAgICAgT1JERVIgQlkgZGF0YV9ldmVudG8gQVNDCiAgICAgICAgICAgICBMSU1JVCA1MCIsCiAgICAgICAgICAgICRkbWluLCAkZG1heAogICAgICAgICkgKTsKCiAgICAgICAgZm9yZWFjaCAoICRsZWFkcyBhcyAkbGVhZCApIHsKICAgICAgICAgICAgaWYgKCAkc2VudCA+PSAkYmF0Y2ggKSBicmVhayAyOwogICAgICAgICAgICBpZiAoICRiYXRjaF9kZWxheSA+IDAgJiYgJHNlbnQgPiAwICkgc2xlZXAoICRiYXRjaF9kZWxheSApOwogICAgICAgICAgICAkcGhvbmUgPSAkbGVhZC0+cGhvbmU7CiAgICAgICAgICAgICRuYW1lICA9ICRsZWFkLT5uYW1lID86ICdhbWlnbyc7CiAgICAgICAgICAgIC8vIHZtMl9jb250YWN0cyBhcm1hemVuYSBZLW0tZDsgZm9ybWF0YSBwYXJhIGV4aWJpw6fDo28gYW1pZ8OhdmVsCiAgICAgICAgICAgICRkYXRhICA9ICRsZWFkLT5kYXRhX2V2ZW50bwogICAgICAgICAgICAgICAgPyBkYXRlKCAnZC9tL1knLCBzdHJ0b3RpbWUoICRsZWFkLT5kYXRhX2V2ZW50byApICkKICAgICAgICAgICAgICAgIDogJyc7CgogICAgICAgICAgICBpZiAoICEgdm0yX2Nhbl9zZW5kKCAkcGhvbmUsICRjb29sLCAkbWF4X3dlZWtseSApICkgY29udGludWU7CgogICAgICAgICAgICAkbGluayA9IHZtMl90cmFja2luZ191cmwoICRwaG9uZSwgJ2J5ZGF0ZV8nIC4gJGdrZXkgKTsKICAgICAgICAgICAgJG9rICAgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKCAkaXNfd2FiYSAmJiAkZ190bXBsID09PSAnZ2lmdF9jYXJkX2V2ZW50b19zZW1hbmEnICkgewogICAgICAgICAgICAgICAgLy8gW3YxLjUuMTUwXSBHaWZ0IENhcmQgUiQxMDAg4oCUIGdlcmEgY3Vwb20gV0Mgw7puaWNvIGUgZW52aWEgdGVtcGxhdGUgY29tIDMgcGFyYW1zCiAgICAgICAgICAgICAgICAkZ2lmdF9jb2RlICAgPSB2bTJfY3JlYXRlX2dpZnRfY291cG9uKCAkbmFtZSwgMTAwLCAwICk7CiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhciBkb21pbmdvIGRlc3RhIHNlbWFuYSAoaWd1YWwgw6Agdm0yX2NyZWF0ZV9naWZ0X2NvdXBvbikKICAgICAgICAgICAgICAgICRfbm93X3RzICAgICAgPSBjdXJyZW50X3RpbWUoICd0aW1lc3RhbXAnICk7CiAgICAgICAgICAgICAgICAkX2RvdyAgICAgICAgID0gKGludCkgZGF0ZSggJ04nLCAkX25vd190cyApOwogICAgICAgICAgICAgICAgJF9zdW5kYXlfdHMgICA9IG1rdGltZSggMjMsIDU5LCA1OSwgKGludCkgZGF0ZSggJ24nLCAkX25vd190cyApLCAoaW50KSBkYXRlKCAnaicsICRfbm93X3RzICkgKyAoNyAtICRfZG93KSwgKGludCkgZGF0ZSggJ1knLCAkX25vd190cyApICk7CiAgICAgICAgICAgICAgICAkZ2lmdF9leHBpcnkgID0gZGF0ZSggJ2QvbS9ZJywgJF9zdW5kYXlfdHMgKTsKICAgICAgICAgICAgICAgICRjb21wb25lbnRzICA9IHZtMl93YWJhX3RlbXBsYXRlX2NvbXBvbmVudHMoICRnX3RtcGwsICRuYW1lLCAkZ2lmdF9jb2RlLCAkZ2lmdF9leHBpcnkgKTsKICAgICAgICAgICAgICAgICRyZXMgPSB2bTJfc2VuZF93YWJhKCAkY2hhbm5lbCwgJHBob25lLCAkZ190bXBsLCAkY29tcG9uZW50cyApOwogICAgICAgICAgICAgICAgJG9rICA9IGlzX2FycmF5KCAkcmVzICkgPyAkcmVzWydvayddIDogKGJvb2wpICRyZXM7CiAgICAgICAgICAgICAgICBpZiAoICRvayApIHZtMl9sb2coICJnaWZ0X2NhcmTihpJ7JHBob25lfTogY3Vwb20geyRnaWZ0X2NvZGV9IGV4cGlSQSB7JGdpZnRfZXhwaXJ5fSIsICdpbmZvJyApOwogICAgICAgICAgICB9IGVsc2VpZiAoICRpc193YWJhICYmICRnX3RtcGwgKSB7CiAgICAgICAgICAgICAgICAvLyBbdjEuNS4xNDldIFBhc3NhICRkYXRhIGNvbW8gM8K6IHBhcmFtIOKAlCB1c2FkbyBwb3IgdXJnZW5jaWFfZXZlbnRvX3NlbWFuYSAoe3syfX0pCiAgICAgICAgICAgICAgICAkY29tcG9uZW50cyA9IHZtMl93YWJhX3RlbXBsYXRlX2NvbXBvbmVudHMoICRnX3RtcGwsICRuYW1lLCAkZGF0YSApOwogICAgICAgICAgICAgICAgJHJlcyA9IHZtMl9zZW5kX3dhYmEoICRjaGFubmVsLCAkcGhvbmUsICRnX3RtcGwsICRjb21wb25lbnRzICk7CiAgICAgICAgICAgICAgICAkb2sgID0gaXNfYXJyYXkoICRyZXMgKSA/ICRyZXNbJ29rJ10gOiAoYm9vbCkgJHJlczsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0ZXh0ID0gc3RyX3JlcGxhY2UoCiAgICAgICAgICAgICAgICAgICAgWyAne25vbWV9JywgJ3tkYXRhX2V2ZW50b30nLCAne2xpbmt9JyBdLAogICAgICAgICAgICAgICAgICAgIFsgJG5hbWUsICRkYXRhLCAkbGluayBdLAogICAgICAgICAgICAgICAgICAgICRnX21zZwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRvayA9IHZtMl9zZW5kX3phcGkoICRjaGFubmVsLCAkcGhvbmUsICR0ZXh0ICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJG9rICkgewogICAgICAgICAgICAgICAgdm0yX3JlY29yZF9zZW5kKCAkcGhvbmUsICdieWRhdGVfJyAuICRna2V5LCAkY2hhbm5lbCApOwogICAgICAgICAgICAgICAgdm0yX2xvZyggInZtMl9ieWRhdGVfeyRna2V5feKGknskcGhvbmV9IHZpYSB7JGNoYW5uZWx9IiwgJ2luZm8nICk7CiAgICAgICAgICAgICAgICAkc2VudCsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBbdjEuNS45NV0gRW1haWwgcGFyYWxlbG8KICAgICAgICAgICAgaWYgKCBnZXRfb3B0aW9uKCd2bTJfYnlkYXRlX2VtYWlsX29uJywnMCcpID09PSAnMScgKSB7CiAgICAgICAgICAgICAgICAkYmRfY29udGFjdCA9ICR3cGRiLT5nZXRfcm93KCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGVtYWlsIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX2NvbnRhY3RzIFdIRVJFIHBob25lPSVzIEFORCBlbWFpbCE9JycgTElNSVQgMSIsICRwaG9uZQogICAgICAgICAgICAgICAgKSApOwogICAgICAgICAgICAgICAgaWYgKCAkYmRfY29udGFjdCAmJiAkYmRfY29udGFjdC0+ZW1haWwgKSB7CiAgICAgICAgICAgICAgICAgICAgJHN1YmpfYmQgID0gZ2V0X29wdGlvbigndm0yX2J5ZGF0ZV9lbWFpbF9zdWJqZWN0JywnU3VhIGZlc3RhIGVzdMOhIGNoZWdhbmRvISBWYW1vcyBmZWNoYXIgYXMgYXRyYcOnw7Vlcz8g8J+OiScpOwogICAgICAgICAgICAgICAgICAgICRib2R5X2JkICA9IGdldF9vcHRpb24oJ3ZtMl9ieWRhdGVfZW1haWxfYm9keScsJycpOwogICAgICAgICAgICAgICAgICAgICRib2R5X2JkICA9IHN0cl9yZXBsYWNlKFsne25vbWV9Jywne2xpbmt9J10sWyRuYW1lLCRsaW5rXSwkYm9keV9iZCk7CiAgICAgICAgICAgICAgICAgICAgd3BfbWFpbCggJGJkX2NvbnRhY3QtPmVtYWlsLCAkc3Vial9iZCwgJGJvZHlfYmQgKTsKICAgICAgICAgICAgICAgICAgICB2bTJfbG9nKCAidm0yX2J5ZGF0ZV9lbWFpbOKGknskYmRfY29udGFjdC0+ZW1haWx9ICh7JHBob25lfSkiLCAnaW5mbycgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRzZW50ID4gMCApIHZtMl9sb2coICJ2bTJfYnlkYXRlX2Nyb246IHskc2VudH0gbWVuc2FnZW5zIGVudmlhZGFzIiwgJ2luZm8nICk7Cn0KLy8gdm0yX2J5ZGF0ZV9ydW4oKSBhZ29yYSBjaGFtYWRvIGFwZW5hcyBwZWxvIG1vdG9yIHVuaWZpY2FkbyAodm0yX3dhcm11cF91bmlmaWVkX3J1bikKCmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX2FnZW5kYV90cmlnZ2VyX3N5bmMnLCBmdW5jdGlvbigpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX2FnZW5kYV9zeW5jJywnbm9uY2UnKTsKICAgIGlmICghY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSkgeyB3cF9zZW5kX2pzb25fZXJyb3IoJ2ZvcmJpZGRlbicpOyB9CiAgICAkd2ViaG9va191cmwgPSBnZXRfb3B0aW9uKCd2bTJfYWdlbmRhX3dlYmhvb2tfdXJsJywnJyk7CiAgICBpZiAoISR3ZWJob29rX3VybCkgeyB3cF9zZW5kX2pzb25fZXJyb3IoJ1dlYmhvb2sgVVJMIG7Do28gY29uZmlndXJhZG8gZW0gQ29uZmlndXJhw6fDtWVzIOKGkiBBZ2VuZGEuJyk7IH0KICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9hZ2VuZGFfc3luY19wZW5kaW5nJywxLGZhbHNlKTsKICAgIHdwX3JlbW90ZV9wb3N0KCR3ZWJob29rX3VybCxbCiAgICAgICAgJ3RpbWVvdXQnICAgPT4gMC4wMSwKICAgICAgICAnYmxvY2tpbmcnICA9PiBmYWxzZSwKICAgICAgICAnYm9keScgICAgICA9PiBqc29uX2VuY29kZShbJ3NvdXJjZSc9Pid2aXZhbWFpcy1jcm0tdjInLCdhY3Rpb24nPT4nc3luY19hZ2VuZGEnXSksCiAgICAgICAgJ2hlYWRlcnMnICAgPT4gWydDb250ZW50LVR5cGUnPT4nYXBwbGljYXRpb24vanNvbiddLAogICAgICAgICdzc2x2ZXJpZnknID0+IGZhbHNlLAogICAgXSk7CiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ21lc3NhZ2UnPT4nU2luY3Jvbml6YcOnw6NvIGluaWNpYWRhISddKTsKfSk7CgovLyBFc2NvbmRlciBtZW51IHNlcGFyYWRvIEV4aXQtSW50ZW50IChpbnRlZ3JhZG8gYW8gVjIpCmFkZF9hY3Rpb24oJ2FkbWluX21lbnUnLCBmdW5jdGlvbigpIHsKICAgIHJlbW92ZV9tZW51X3BhZ2UoJ3ZtLWV4aXQtaW50ZW50Jyk7Cn0sIDk5OSk7CgovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAovLyBPTkUtVElNRSBNSUdSQVRJT046IEZpeCB1bmljb2RlIGVzY2FwZXMgZW0gdm1fZWlfY29uZmlnCi8vIChjYXVzYWRvIHBvciBkZWZhdWx0cyBQSFAgY29tIFx1WFhYWCBsaXRlcmFsIOKAlCB2MS40LjUgZSBhbnRlcmlvcmVzKQovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKYWRkX2FjdGlvbignYWRtaW5faW5pdCcsIGZ1bmN0aW9uKCkgewogICAgaWYgKGdldF9vcHRpb24oJ3ZtMl9laV91bmljb2RlX2ZpeGVkX3YxJykpIHJldHVybjsKICAgICRjZmcgPSBnZXRfb3B0aW9uKCd2bV9laV9jb25maWcnLCBbXSk7CiAgICBpZiAoaXNfYXJyYXkoJGNmZykpIHsKICAgICAgICAkbmVlZHNfdXBkYXRlID0gZmFsc2U7CiAgICAgICAgZm9yZWFjaCAoWyd0aXRsZScsICdzdWJ0aXRsZScsICdjdGFfdGV4dCcsICdkaXNtaXNzX3RleHQnXSBhcyAka2V5KSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJGNmZ1ska2V5XSkpIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoc3RycG9zKCRjZmdbJGtleV0sICdcXHUnKSA9PT0gZmFsc2UpIGNvbnRpbnVlOwogICAgICAgICAgICAvLyBEZWNvZGUgXHVYWFhYIChpbmNsdWRpbmcgc3Vycm9nYXRlIHBhaXJzKSB2aWEganNvbl9kZWNvZGUgdHJpY2sKICAgICAgICAgICAgJGVzY2FwZWQgPSBzdHJfcmVwbGFjZShbJyInLCAnXFxcXCddLCBbJ1xcIicsICdcXFxcXFxcXCddLCAkY2ZnWyRrZXldKTsKICAgICAgICAgICAgJGRlY29kZWQgPSBqc29uX2RlY29kZSgnIicgLiAkZXNjYXBlZCAuICciJyk7CiAgICAgICAgICAgIGlmICgkZGVjb2RlZCAhPT0gbnVsbCAmJiAkZGVjb2RlZCAhPT0gJGNmZ1ska2V5XSkgewogICAgICAgICAgICAgICAgJGNmZ1ska2V5XSAgICA9ICRkZWNvZGVkOwogICAgICAgICAgICAgICAgJG5lZWRzX3VwZGF0ZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRuZWVkc191cGRhdGUpIHVwZGF0ZV9vcHRpb24oJ3ZtX2VpX2NvbmZpZycsICRjZmcpOwogICAgfQogICAgdXBkYXRlX29wdGlvbigndm0yX2VpX3VuaWNvZGVfZml4ZWRfdjEnLCAxKTsKfSwgNSk7CgovLyBBSkFYOiBFeGl0LUludGVudCBjb25maWcgKFYyKQovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKYWRkX2FjdGlvbignd3BfYWpheF92bTJfZWlfc2F2ZScsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfZWlfc2F2ZScsICdub25jZScpOwogICAgaWYgKCFjdXJyZW50X3VzZXJfY2FuKCdtYW5hZ2Vfb3B0aW9ucycpKSB3cF9zZW5kX2pzb25fZXJyb3IoJ3VuYXV0aG9yaXplZCcpOwogICAgJHNhdmVkID0gZ2V0X29wdGlvbigndm1fZWlfY29uZmlnJywgW10pOwogICAgaWYgKCFpc19hcnJheSgkc2F2ZWQpKSAkc2F2ZWQgPSBbXTsKICAgICRzYXZlZFsna2lsbF9zd2l0Y2gnXSAgID0gKGludCkoJF9QT1NUWydraWxsX3N3aXRjaCddID8/IDApOwogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2dydXBvX3VybCddKSkgICAgICRzYXZlZFsnZ3J1cG9fdXJsJ10gICAgID0gZXNjX3VybF9yYXcoJF9QT1NUWydncnVwb191cmwnXSk7CiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0aXRsZSddKSkgICAgICAgICAgJHNhdmVkWyd0aXRsZSddICAgICAgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsndGl0bGUnXSk7CiAgICBpZiAoaXNzZXQoJF9QT1NUWydzdWJ0aXRsZSddKSkgICAgICAgJHNhdmVkWydzdWJ0aXRsZSddICAgICAgPSB3cF9rc2VzX3Bvc3QoJF9QT1NUWydzdWJ0aXRsZSddKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJ2N0YV90ZXh0J10pKSAgICAgICAkc2F2ZWRbJ2N0YV90ZXh0J10gICAgICA9IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydjdGFfdGV4dCddKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJ2Nvb2xkb3duX2RheXMnXSkpICAkc2F2ZWRbJ2Nvb2xkb3duX2RheXMnXSA9IG1heCgwLCAoaW50KSRfUE9TVFsnY29vbGRvd25fZGF5cyddKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3RpbWVyX2RlbGF5J10pKSAgICAkc2F2ZWRbJ3RpbWVyX2RlbGF5J10gICA9IG1heCgwLCAoaW50KSRfUE9TVFsndGltZXJfZGVsYXknXSk7CiAgICB1cGRhdGVfb3B0aW9uKCd2bV9laV9jb25maWcnLCAkc2F2ZWQpOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoKTsKfSk7CgphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9laV9yZXNldF9zdGF0cycsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfZWlfc2F2ZScsICdub25jZScpOwogICAgaWYgKCFjdXJyZW50X3VzZXJfY2FuKCdtYW5hZ2Vfb3B0aW9ucycpKSB3cF9zZW5kX2pzb25fZXJyb3IoJ3VuYXV0aG9yaXplZCcpOwogICAgdXBkYXRlX29wdGlvbigndm1fZWlfc3RhdF9zaG93cycsIDApOwogICAgdXBkYXRlX29wdGlvbigndm1fZWlfc3RhdF9jbGlja3MnLCAwKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCk7Cn0pOwoKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIEFKQVg6IFdBIFJlY292ZXJ5IGNvbmZpZy9hY3Rpb25zIChWMiBDYXJyaW5obyB0YWIpCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl93YV9zYXZlX2NvbmZpZycsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfd2FfY29uZmlnJywgJ25vbmNlJyk7CiAgICBpZiAoIWN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykpIHdwX3NlbmRfanNvbl9lcnJvcigndW5hdXRob3JpemVkJyk7CiAgICBpZiAoaXNzZXQoJF9QT1NUWyd2bV93YV9raWxsX3N3aXRjaCddKSkgICAgIHVwZGF0ZV9vcHRpb24oJ3ZtX3dhX2tpbGxfc3dpdGNoJywgICAgIHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWyd2bV93YV9raWxsX3N3aXRjaCddKSk7CiAgICBpZiAoaXNzZXQoJF9QT1NUWyd2bV93YV9zZW5kX2NoYW5uZWwnXSkpICAgIHVwZGF0ZV9vcHRpb24oJ3ZtX3dhX3NlbmRfY2hhbm5lbCcsICAgIHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWyd2bV93YV9zZW5kX2NoYW5uZWwnXSkpOwogICAgaWYgKGlzc2V0KCRfUE9TVFsndm1fd2FfYmF0Y2hfc2l6ZSddKSkgICAgICB1cGRhdGVfb3B0aW9uKCd2bV93YV9iYXRjaF9zaXplJywgICAgICAoaW50KSRfUE9TVFsndm1fd2FfYmF0Y2hfc2l6ZSddKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3ZtX3dhX3F1aWV0X3N0YXJ0J10pKSAgICAgdXBkYXRlX29wdGlvbigndm1fd2FfcXVpZXRfc3RhcnQnLCAgICAgKGludCkkX1BPU1RbJ3ZtX3dhX3F1aWV0X3N0YXJ0J10pOwogICAgaWYgKGlzc2V0KCRfUE9TVFsndm1fd2FfcXVpZXRfZW5kJ10pKSAgICAgICB1cGRhdGVfb3B0aW9uKCd2bV93YV9xdWlldF9lbmQnLCAgICAgICAoaW50KSRfUE9TVFsndm1fd2FfcXVpZXRfZW5kJ10pOwogICAgaWYgKGlzc2V0KCRfUE9TVFsndm1fd2FfaW50ZXJ2YWxfc2VjJ10pKSAgICB1cGRhdGVfb3B0aW9uKCd2bV93YV9pbnRlcnZhbF9zZWMnLCAgICAoaW50KSRfUE9TVFsndm1fd2FfaW50ZXJ2YWxfc2VjJ10pOwogICAgaWYgKGlzc2V0KCRfUE9TVFsndm1fd2Ffd2FiYV90ZW1wbGF0ZSddKSkgICB1cGRhdGVfb3B0aW9uKCd2bV93YV93YWJhX3RlbXBsYXRlJywgICBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsndm1fd2Ffd2FiYV90ZW1wbGF0ZSddKSk7CiAgICBpZiAoaXNzZXQoJF9QT1NUWyd2bV93YV9yZWNvdmVyeV9tZXNzYWdlJ10pKSB1cGRhdGVfb3B0aW9uKCd2bV93YV9yZWNvdmVyeV9tZXNzYWdlJywgc2FuaXRpemVfdGV4dGFyZWFfZmllbGQoJF9QT1NUWyd2bV93YV9yZWNvdmVyeV9tZXNzYWdlJ10pKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnbWVzc2FnZScgPT4gJ0NvbmZpZ3VyYcOnw7VlcyBzYWx2YXMhJ10pOwp9KTsKCmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX3dhX3Jlc2VuZCcsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bV93YV9yZXNlbmQnLCAnbm9uY2UnKTsKICAgIGlmICghY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSkgd3Bfc2VuZF9qc29uX2Vycm9yKCd1bmF1dGhvcml6ZWQnKTsKICAgICRpZCA9IChpbnQpKCRfUE9TVFsnaWQnXSA/PyAwKTsKICAgIGlmICghJGlkKSB3cF9zZW5kX2pzb25fZXJyb3IoJ0lEIGludsOhbGlkbycpOwogICAgZ2xvYmFsICR3cGRiOwogICAgJHRhYmxlID0gJHdwZGItPnByZWZpeCAuICd2bV93YV9jYXB0dXJlcyc7CiAgICAkcm93ICAgPSAkd3BkYi0+Z2V0X3Jvdygkd3BkYi0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSAkdGFibGUgV0hFUkUgaWQ9JWQiLCAkaWQpKTsKICAgIGlmICghJHJvdykgd3Bfc2VuZF9qc29uX2Vycm9yKCdSZWdpc3RybyBuw6NvIGVuY29udHJhZG8nKTsKCiAgICAkY2hhbm5lbCAgPSBnZXRfb3B0aW9uKCd2bV93YV9zZW5kX2NoYW5uZWwnLCAnemFwaV8xODg2Jyk7CiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgICRjaF9pbmZvICA9ICRjaGFubmVsc1skY2hhbm5lbF0gPz8gbnVsbDsKICAgICRpc193YWJhICA9ICgkY2hfaW5mbyAmJiAoJGNoX2luZm9bJ3R5cGUnXSA9PT0gJ3dhYmEnKSk7CiAgICAkcGhvbmUgICAgPSB2bTJfZm9ybWF0X3Bob25lKCRyb3ctPnBob25lKTsKCiAgICBpZiAoJGlzX3dhYmEpIHsKICAgICAgICAvLyDilIDilIAgRW52aW8gV0FCQSB2aWEgcG9vbCBkaW7Dom1pY28gVjIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgICAgICAgJHRlbXBsYXRlID0gZ2V0X29wdGlvbigndm1fd2Ffd2FiYV90ZW1wbGF0ZScsICdyZWN1cGVyYV9jYXJyaW5ob193b28nKTsKICAgICAgICAkbmFtZSAgICAgPSAkcm93LT5uYW1lICAgICA/OiAnQ2xpZW50ZSc7CiAgICAgICAgLy8gR2FyYW50ZSBVUkwgYWJzb2x1dGE6IHBhZ2VfdXJsIHRlbSBwcmlvcmlkYWRlIChzZW1wcmUgYWJzb2x1dGEpLCBjYXJ0X3VybCBwb2RlIHNlciByZWxhdGl2YQogICAgICAgICRyYXdfdXJsICA9ICFlbXB0eSgkcm93LT5wYWdlX3VybCkgPyAkcm93LT5wYWdlX3VybCA6ICgkcm93LT5jYXJ0X3VybCA/PyAnJyk7CiAgICAgICAgJGNhcnRfdXJsID0gJHJhd191cmwKICAgICAgICAgICAgPyAoc3RyX3N0YXJ0c193aXRoKCRyYXdfdXJsLCAnaHR0cCcpID8gJHJhd191cmwgOiBob21lX3VybCgnLycgLiBsdHJpbSgkcmF3X3VybCwgJy8nKSkpCiAgICAgICAgICAgIDogJ2h0dHBzOi8vbG9qYS52aXZhbWFpc2V2ZW50b3MuY29tJzsKICAgICAgICAkcmVzdWx0ID0gdm0yX3NlbmRfd2FiYSgkY2hhbm5lbCwgJHBob25lLCAkdGVtcGxhdGUsIFsKICAgICAgICAgICAgWyd0eXBlJyA9PiAnYm9keScsICdwYXJhbWV0ZXJzJyA9PiBbCiAgICAgICAgICAgICAgICBbJ3R5cGUnID0+ICd0ZXh0JywgJ3RleHQnID0+ICRuYW1lXSwKICAgICAgICAgICAgICAgIFsndHlwZScgPT4gJ3RleHQnLCAndGV4dCcgPT4gJGNhcnRfdXJsXSwKICAgICAgICAgICAgXV0sCiAgICAgICAgICAgIFsndHlwZScgPT4gJ2J1dHRvbicsICdzdWJfdHlwZScgPT4gJ3VybCcsICdpbmRleCcgPT4gJzAnLCAncGFyYW1ldGVycycgPT4gWwogICAgICAgICAgICAgICAgWyd0eXBlJyA9PiAndGV4dCcsICd0ZXh0JyA9PiAkY2FydF91cmxdLAogICAgICAgICAgICBdXSwKICAgICAgICBdKTsKICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHRbJ29rJ10pKSB7CiAgICAgICAgICAgICR3cGRiLT51cGRhdGUoJHRhYmxlLCBbJ3N0YXR1cycgPT4gJ3NlbnQnLCAnc2VudF9hdCcgPT4gY3VycmVudF90aW1lKCdteXNxbCcpXSwgWydpZCcgPT4gJGlkXSk7CiAgICAgICAgICAgIHZtMl9yZWNvcmRfc2VuZCgkcGhvbmUsICdjYXJyaW5obycsICRjaGFubmVsKTsgLy8gcmVnaXN0cmEgbm8gw6FyYml0cm8gY2VudHJhbAogICAgICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ21lc3NhZ2UnID0+ICfinIUgV0FCQSBlbnZpYWRvIGNvbSBzdWNlc3NvISddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbWV0YV9ib2R5ID0gJHJlc3VsdFsnYm9keSddID8/ICcoc2VtIHJlc3Bvc3RhKSc7CiAgICAgICAgICAgICRtZXRhX2NvZGUgPSAkcmVzdWx0Wydjb2RlJ10gPz8gMDsKICAgICAgICAgICAgJGRlY29kZWQgICA9IGpzb25fZGVjb2RlKCRtZXRhX2JvZHksIHRydWUpOwogICAgICAgICAgICAkbWV0YV9lcnIgID0gaXNzZXQoJGRlY29kZWRbJ2Vycm9yJ11bJ21lc3NhZ2UnXSkgPyAkZGVjb2RlZFsnZXJyb3InXVsnbWVzc2FnZSddIDogJG1ldGFfYm9keTsKICAgICAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKFsnbWVzc2FnZScgPT4gIuKdjCBNZXRhIEFQSSBIVFRQIHskbWV0YV9jb2RlfTogeyRtZXRhX2Vycn0iXSk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAvLyDilIDilIAgRW52aW8gWi1BUEkgdmlhIHBvb2wgZGluw6JtaWNvIFYyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICAgICAgIC8vIEdhcmFudGUgVVJMIGFic29sdXRhOiBwYWdlX3VybCB0ZW0gcHJpb3JpZGFkZSAoc2VtcHJlIGFic29sdXRhKSwgY2FydF91cmwgcG9kZSBzZXIgcmVsYXRpdmEKICAgICAgICAkcmF3X3VybF96YXBpID0gIWVtcHR5KCRyb3ctPnBhZ2VfdXJsKSA/ICRyb3ctPnBhZ2VfdXJsIDogKCRyb3ctPmNhcnRfdXJsID8/ICcnKTsKICAgICAgICAkY2FydF9saW5rICAgID0gJHJhd191cmxfemFwaQogICAgICAgICAgICA/IChzdHJfc3RhcnRzX3dpdGgoJHJhd191cmxfemFwaSwgJ2h0dHAnKSA/ICRyYXdfdXJsX3phcGkgOiBob21lX3VybCgnLycgLiBsdHJpbSgkcmF3X3VybF96YXBpLCAnLycpKSkKICAgICAgICAgICAgOiBob21lX3VybCgnLycpOwogICAgICAgICRtc2cgPSBmdW5jdGlvbl9leGlzdHMoJ3ZtX3dhX2NvbXBvc2VfdGV4dF9tZXNzYWdlJykKICAgICAgICAgICAgPyB2bV93YV9jb21wb3NlX3RleHRfbWVzc2FnZSgkcm93LT5uYW1lLCAkcm93LT5wcm9kdWN0X25hbWUsICRjYXJ0X2xpbmssICRyb3ctPmNhcnRfdG90YWwpCiAgICAgICAgICAgIDogIk9pIHskcm93LT5uYW1lfSEg8J+bkiBWb2PDqiBkZWl4b3UgaXRlbnMgbm8gY2FycmluaG8uIEZpbmFsaXplIGFxdWk6IHskY2FydF9saW5rfSI7CiAgICAgICAgJG9rID0gdm0yX3NlbmRfemFwaSgkY2hhbm5lbCwgJHBob25lLCAkbXNnKTsKICAgICAgICBpZiAoJG9rKSB7CiAgICAgICAgICAgICR3cGRiLT51cGRhdGUoJHRhYmxlLCBbJ3N0YXR1cycgPT4gJ3NlbnQnLCAnc2VudF9hdCcgPT4gY3VycmVudF90aW1lKCdteXNxbCcpXSwgWydpZCcgPT4gJGlkXSk7CiAgICAgICAgICAgIHZtMl9yZWNvcmRfc2VuZCgkcGhvbmUsICdjYXJyaW5obycsICRjaGFubmVsKTsgLy8gcmVnaXN0cmEgbm8gw6FyYml0cm8gY2VudHJhbAogICAgICAgICAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ21lc3NhZ2UnID0+ICfinIUgRW52aWFkbyB2aWEgWi1BUEkhJ10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHdwX3NlbmRfanNvbl9lcnJvcihbJ21lc3NhZ2UnID0+ICfinYwgRmFsaGEgbm8gZW52aW8gWi1BUEkuIFZlcmlmaXF1ZSBvIExvZy4nXSk7CiAgICAgICAgfQogICAgfQp9KTsKCgovLyDilIDilIDilIAgRElBR07Dk1NUSUNPIFdBQkEgKHRlbXBvcsOhcmlvKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbignd3BfYWpheF92bTJfd2FiYV9kaWFnJywgZnVuY3Rpb24oKSB7CiAgICBpZiAoIWN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykpIHdwX3NlbmRfanNvbl9lcnJvcigndW5hdXRob3JpemVkJyk7CiAgICAkY2hhbm5lbCAgPSBnZXRfb3B0aW9uKCd2bV93YV9zZW5kX2NoYW5uZWwnLCAnemFwaV8xODg2Jyk7CiAgICAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgICRjaF9pbmZvICA9ICRjaGFubmVsc1skY2hhbm5lbF0gPz8gbnVsbDsKICAgICRwb29sX3JhdyA9IGdldF9vcHRpb24oJ3ZtMl9jaGFubmVsX3Bvb2wnLCBbXSk7CgogICAgJGRpYWcgPSBbCiAgICAgICAgJ3ZtX3dhX3NlbmRfY2hhbm5lbCcgID0+ICRjaGFubmVsLAogICAgICAgICdraWxsX3N3aXRjaCcgICAgICAgICA9PiBnZXRfb3B0aW9uKCd2bV93YV9raWxsX3N3aXRjaCcsICc/JyksCiAgICAgICAgJ2NoYW5uZWxfZm91bmQnICAgICAgID0+ICFlbXB0eSgkY2hfaW5mbyksCiAgICAgICAgJ2NoYW5uZWxfdHlwZScgICAgICAgID0+ICRjaF9pbmZvWyd0eXBlJ10gPz8gJ04vQScsCiAgICAgICAgJ2NoYW5uZWxfaW5zdGFuY2UnICAgID0+ICRjaF9pbmZvWydpbnN0YW5jZSddID8/ICdWQVpJTycsCiAgICAgICAgJ3Rva2VuX3NldCcgICAgICAgICAgID0+ICFlbXB0eSgkY2hfaW5mb1sndG9rZW4nXSksCiAgICAgICAgJ3Rva2VuX3ByZXZpZXcnICAgICAgID0+ICRjaF9pbmZvID8gKHN1YnN0cigkY2hfaW5mb1sndG9rZW4nXSA/PyAnJywgMCwgMjApIC4gJy4uLicpIDogJ04vQScsCiAgICAgICAgJ3Bvb2xfa2V5cycgICAgICAgICAgID0+IGFycmF5X2tleXMoaXNfYXJyYXkoJHBvb2xfcmF3KSA/ICRwb29sX3JhdyA6IFtdKSwKICAgIF07CgogICAgLy8gVGVzdGEgY3JlZGVuY2lhaXMgbmEgTWV0YSBBUEkgKHPDsyBHRVQg4oCUIG7Do28gZW52aWEgbWVuc2FnZW0pCiAgICBpZiAoJGNoX2luZm8gJiYgIWVtcHR5KCRjaF9pbmZvWydpbnN0YW5jZSddKSAmJiAhZW1wdHkoJGNoX2luZm9bJ3Rva2VuJ10pKSB7CiAgICAgICAgJHBpZCAgPSAkY2hfaW5mb1snaW5zdGFuY2UnXTsKICAgICAgICAkdG9rICA9ICRjaF9pbmZvWyd0b2tlbiddOwogICAgICAgICR0ZXN0ID0gd3BfcmVtb3RlX2dldCgiaHR0cHM6Ly9ncmFwaC5mYWNlYm9vay5jb20vdjIxLjAveyRwaWR9P2ZpZWxkcz1kaXNwbGF5X3Bob25lX251bWJlcix2ZXJpZmllZF9uYW1lLHF1YWxpdHlfcmF0aW5nLHN0YXR1cyIsIFsKICAgICAgICAgICAgJ2hlYWRlcnMnID0+IFsnQXV0aG9yaXphdGlvbicgPT4gJ0JlYXJlciAnIC4gJHRva10sCiAgICAgICAgICAgICd0aW1lb3V0JyA9PiAxMCwKICAgICAgICBdKTsKICAgICAgICBpZiAoaXNfd3BfZXJyb3IoJHRlc3QpKSB7CiAgICAgICAgICAgICRkaWFnWydtZXRhX3Rlc3QnXSA9ICdXUF9FcnJvcjogJyAuICR0ZXN0LT5nZXRfZXJyb3JfbWVzc2FnZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkaWFnWydtZXRhX3Rlc3RfY29kZSddID0gd3BfcmVtb3RlX3JldHJpZXZlX3Jlc3BvbnNlX2NvZGUoJHRlc3QpOwogICAgICAgICAgICAkZGlhZ1snbWV0YV90ZXN0X2JvZHknXSA9IHdwX3JlbW90ZV9yZXRyaWV2ZV9ib2R5KCR0ZXN0KTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICRkaWFnWydtZXRhX3Rlc3QnXSA9ICdTS0lQIOKAlCBjcmVkZW5jaWFpcyBhdXNlbnRlcyc7CiAgICB9CgogICAgLy8gUGVuZGVudGVzIGUgZmFsaG9zCiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdGFibGUgID0gJHdwZGItPnByZWZpeCAuICd2bV93YV9jYXB0dXJlcyc7CiAgICAkcm93cyAgID0gJHdwZGItPmdldF9yZXN1bHRzKCJTRUxFQ1QgaWQsIHBob25lLCBuYW1lLCBzdGF0dXMsIGNhcnRfdXJsLCBjYXB0dXJlZF9hdCBGUk9NICR0YWJsZSBXSEVSRSBzdGF0dXMgSU4gKCdwZW5kaW5nJywnZmFpbGVkJykgT1JERVIgQlkgaWQgREVTQyBMSU1JVCA1Iik7CiAgICAkZGlhZ1sncGVuZGluZ19mYWlsZWQnXSA9ICRyb3dzOwoKICAgIC8vIENvbHVuYXMgZGEgdGFiZWxhCiAgICAkY29scyA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0hPVyBDT0xVTU5TIEZST00gJHRhYmxlIik7CiAgICAkZGlhZ1sndGFibGVfY29sdW1ucyddID0gYXJyYXlfY29sdW1uKCRjb2xzLCAnRmllbGQnKTsKCiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcygkZGlhZyk7Cn0pOwoKYWRkX2FjdGlvbignd3BfYWpheF92bTJfcG9wdXBfc2F2ZV9jb25maWcnLCBmdW5jdGlvbigpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX3BvcHVwX3NhdmUnLCAnbm9uY2UnKTsKICAgIGlmICghY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSkgd3Bfc2VuZF9qc29uX2Vycm9yKCk7CiAgICAkY2ZnID0gWwogICAgICAgICdraWxsX3N3aXRjaCcgID0+IChpbnQpJF9QT1NUWydraWxsX3N3aXRjaCddLAogICAgICAgICdiYW5uZXJfdG9wbycgID0+IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydiYW5uZXJfdG9wbyddID8/ICcnKSwKICAgICAgICAndGl0dWxvJyAgICAgICA9PiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsndGl0dWxvJ10gPz8gJycpLAogICAgICAgICdzdWJ0aXR1bG8nICAgID0+IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydzdWJ0aXR1bG8nXSA/PyAnJyksCiAgICAgICAgJ3VyZ2VuY2lhJyAgICAgPT4gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ3VyZ2VuY2lhJ10gPz8gJycpLAogICAgICAgICdjdGFfdGV4dCcgICAgID0+IHNhbml0aXplX3RleHRfZmllbGQoJF9QT1NUWydjdGFfdGV4dCddID8/ICcnKSwKICAgICAgICAnZGVsYXlfc2VjJyAgICA9PiAoaW50KSgkX1BPU1RbJ2RlbGF5X3NlYyddID8/IDUpLAogICAgICAgICdzaG93X29uJyAgICAgID0+IHNhbml0aXplX2tleSgkX1BPU1RbJ3Nob3dfb24nXSA/PyAncHJvZHV0bycpLAogICAgICAgICdzZXNzaW9uX2V4cGlyeV9ob3VycycgPT4gbWF4KDEsIG1pbig3MjAsIChpbnQpKCRfUE9TVFsnc2Vzc2lvbl9leHBpcnlfaG91cnMnXSA/PyAyNCkpKSwKICAgIF07CiAgICB1cGRhdGVfb3B0aW9uKCd2bTJfcG9wdXBfY29uZmlnJywgJGNmZyk7CiAgICAvLyBTeW5jIGtpbGwgc3dpdGNoIGFsc28gdG8gd2EtY2FwdHVyZSBmb3JjZV9nYXRlIChpbnZlcnNlOiBnYXRlPW9uIHdoZW4gcG9wdXA9YWN0aXZlKQogICAgdXBkYXRlX29wdGlvbigndm1fd2FfZm9yY2VfZ2F0ZScsICRjZmdbJ2tpbGxfc3dpdGNoJ10gPyAnMCcgOiAnMScpOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoWydtZXNzYWdlJyA9PiAnQ29uZmlndXJhw6fDtWVzIHNhbHZhcyBjb20gc3VjZXNzbyEnXSk7Cn0pOwoKYWRkX2FjdGlvbignd3BfYWpheF92bTJfd2FfaWdub3JlJywgZnVuY3Rpb24oKSB7CiAgICBjaGVja19hamF4X3JlZmVyZXIoJ3ZtX3dhX3Jlc2VuZCcsICdub25jZScpOwogICAgaWYgKCFjdXJyZW50X3VzZXJfY2FuKCdtYW5hZ2Vfb3B0aW9ucycpKSB3cF9zZW5kX2pzb25fZXJyb3IoJ3VuYXV0aG9yaXplZCcpOwogICAgJGlkID0gKGludCkoJF9QT1NUWydpZCddID8/IDApOwogICAgaWYgKCEkaWQpIHdwX3NlbmRfanNvbl9lcnJvcignSUQgaW52w6FsaWRvJyk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdGFibGUgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtX3dhX2NhcHR1cmVzJzsKICAgICR3cGRiLT51cGRhdGUoJHRhYmxlLCBbJ3N0YXR1cycgPT4gJ2NhbmNlbGxlZCddLCBbJ2lkJyA9PiAkaWRdKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnbWVzc2FnZScgPT4gJ0lnbm9yYWRvLiddKTsKfSk7CgoKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIEdBVElMSE9TIFZJU1VBSVMgKFNvY2lhbCBQcm9vZikg4oCUIHYxLjUuMzYKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCgovLyDilIDilIAgQUpBWDogU2FsdmFyIGNvbmZpZ3VyYcOnw7VlcyBkZSBHYXRpbGhvcyBWaXN1YWlzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAphZGRfYWN0aW9uKCd3cF9hamF4X3ZtMl9nYXRpbGhvc19zYXZlJywgZnVuY3Rpb24oKSB7CiAgICBjaGVja19hamF4X3JlZmVyZXIoJ3ZtMl9nYXRpbGhvc19zYXZlJywgJ25vbmNlJyk7CiAgICBpZiAoIWN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykpIHdwX3NlbmRfanNvbl9lcnJvcigndW5hdXRob3JpemVkJyk7CgogICAgdXBkYXRlX29wdGlvbigndm0yX3NwX3Jlc2VydmFzX2VuYWJsZWQnLCAgICAgICAoaW50KSAoJF9QT1NUWydyZXNlcnZhc19lbmFibGVkJ10gICAgICAgPz8gMSkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3NwX3N0YXJzX2VuYWJsZWQnLCAgICAgICAgICAoaW50KSAoJF9QT1NUWydzdGFyc19lbmFibGVkJ10gICAgICAgICAgPz8gMSkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3NwX2Rpc3BfZW5hYmxlZCcsICAgICAgICAgICAoaW50KSAoJF9QT1NUWydkaXNwX2VuYWJsZWQnXSAgICAgICAgICAgPz8gMSkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3NwX2Rpc2NvdW50X2JhZGdlX2VuYWJsZWQnLCAoaW50KSAoJF9QT1NUWydkaXNjb3VudF9iYWRnZV9lbmFibGVkJ10gPz8gMSkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3dhX2NvdW50ZG93bl9lbmFibGVkJywgICAgICAoaW50KSAoJF9QT1NUWydjb3VudGRvd25fZW5hYmxlZCddICAgICAgPz8gMSkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3dhX2NvbWJvX2VuYWJsZWQnLCAgICAgICAgICAoaW50KSAoJF9QT1NUWydjb21ib19lbmFibGVkJ10gICAgICAgICAgID8/IDApKTsKICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9zdGlja3lfY3RhX2VuYWJsZWQnLCAgICAgICAgKGludCkgKCRfUE9TVFsnc3RpY2t5X2N0YV9lbmFibGVkJ10gICAgICA/PyAwKSk7CiAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc3Bfb2Zmc2V0X21pbicsICAgICAgICAgICAgIG1heCgwLCAgKGludCkgKCRfUE9TVFsnb2Zmc2V0X21pbiddID8/IDEyKSkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3NwX29mZnNldF9tYXgnLCAgICAgICAgICAgICBtYXgoMSwgIChpbnQpICgkX1BPU1RbJ29mZnNldF9tYXgnXSA/PyA0NykpKTsKCiAgICAvLyBMaW1wYXIgdHJhbnNpZW50cyBkZSBjYWNoZSBwYXJhIHF1ZSBub3ZvcyB2YWxvcmVzIHJlZmxpdGFtIGltZWRpYXRhbWVudGUKICAgIGdsb2JhbCAkd3BkYjsKICAgICR3cGRiLT5xdWVyeSgiREVMRVRFIEZST00geyR3cGRiLT5vcHRpb25zfSBXSEVSRSBvcHRpb25fbmFtZSBMSUtFICdfdHJhbnNpZW50X3Ztc3BfJScgT1Igb3B0aW9uX25hbWUgTElLRSAnX3RyYW5zaWVudF90aW1lb3V0X3Ztc3BfJSciKTsKCiAgICB3cF9zZW5kX2pzb25fc3VjY2VzcyhbJ21lc3NhZ2UnID0+ICfinIUgQ29uZmlndXJhw6fDtWVzIHNhbHZhcyEgQ2FjaGUgbGltcG8uJ10pOwp9KTsKCi8vIOKUgOKUgCBQw6FnaW5hOiBHYXRpbGhvcyBWaXN1YWlzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfZ2F0aWxob3NfcGFnZSgpIHsKICAgICRyZXNlcnZhc19vbiAgPSAoYm9vbCkgZ2V0X29wdGlvbigndm0yX3NwX3Jlc2VydmFzX2VuYWJsZWQnLCAgICAgICAxKTsKICAgICRzdGFyc19vbiAgICAgPSAoYm9vbCkgZ2V0X29wdGlvbigndm0yX3NwX3N0YXJzX2VuYWJsZWQnLCAgICAgICAgICAxKTsKICAgICRkaXNwX29uICAgICAgPSAoYm9vbCkgZ2V0X29wdGlvbigndm0yX3NwX2Rpc3BfZW5hYmxlZCcsICAgICAgICAgICAxKTsKICAgICRkaXNjb3VudF9vbiAgID0gKGJvb2wpIGdldF9vcHRpb24oJ3ZtMl9zcF9kaXNjb3VudF9iYWRnZV9lbmFibGVkJywgMSk7CiAgICAkY291bnRkb3duX29uICA9IChib29sKSBnZXRfb3B0aW9uKCd2bTJfd2FfY291bnRkb3duX2VuYWJsZWQnLCAgICAgIDEpOwogICAgJGNvbWJvX29uICAgICAgPSAoYm9vbCkgZ2V0X29wdGlvbigndm0yX3dhX2NvbWJvX2VuYWJsZWQnLCAgICAgICAgICAwKTsKICAgICRzdGlja3lfY3RhX29uID0gKGJvb2wpIGdldF9vcHRpb24oJ3ZtMl9zdGlja3lfY3RhX2VuYWJsZWQnLCAgICAgICAgMCk7CiAgICAkb2Zmc2V0X21pbiAgICA9IChpbnQpICBnZXRfb3B0aW9uKCd2bTJfc3Bfb2Zmc2V0X21pbicsICAgICAgICAgICAgIDEyKTsKICAgICRvZmZzZXRfbWF4ICAgID0gKGludCkgIGdldF9vcHRpb24oJ3ZtMl9zcF9vZmZzZXRfbWF4JywgICAgICAgICAgICAgNDcpOwogICAgJG5vbmNlICAgICAgICAgPSB3cF9jcmVhdGVfbm9uY2UoJ3ZtMl9nYXRpbGhvc19zYXZlJyk7CgogICAgLy8gQ29udGFyIGF0aXZvcwogICAgJGF0aXZvcyA9IChpbnQpJHJlc2VydmFzX29uICsgKGludCkkc3RhcnNfb24gKyAoaW50KSRkaXNwX29uICsgKGludCkkZGlzY291bnRfb24gKyAoaW50KSRjb3VudGRvd25fb24gKyAoaW50KSRjb21ib19vbiArIChpbnQpJHN0aWNreV9jdGFfb247CgogICAgPz4KICAgIDxkaXYgY2xhc3M9IndyYXAiIHN0eWxlPSJtYXgtd2lkdGg6OTAwcHgiPgogICAgICAgIDxoMSBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweCI+CiAgICAgICAgICAgIOKcqCBHYXRpbGhvcyBWaXN1YWlzCiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo0MDA7YmFja2dyb3VuZDojZjBmZGY0O2NvbG9yOiMxNjY1MzQ7Ym9yZGVyOjFweCBzb2xpZCAjYmJmN2QwO3BhZGRpbmc6M3B4IDEwcHg7Ym9yZGVyLXJhZGl1czoyMHB4Ij4KICAgICAgICAgICAgICAgIFNvY2lhbCBQcm9vZgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgPC9oMT4KICAgICAgICA8cCBzdHlsZT0iY29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOi04cHg7bWFyZ2luLWJvdHRvbToyMHB4Ij4KICAgICAgICAgICAgQ29udHJvbGUgb3MgZWxlbWVudG9zIGRlIHByb3ZhIHNvY2lhbCBleGliaWRvcyBuYXMgcMOhZ2luYXMgZGUgcHJvZHV0by4KICAgICAgICAgICAgUGx1Z2luOiA8Y29kZT52aXZhbWFpcy1zb2NpYWwtcHJvb2YtdjEuMjwvY29kZT4g4oaSIDxzdHJvbmc+djEuMzwvc3Ryb25nPgogICAgICAgIDwvcD4KCiAgICAgICAgPD9waHAgaWYgKCRhdGl2b3MgPT09IDApIDogPz4KICAgICAgICA8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXdhcm5pbmciIHN0eWxlPSJib3JkZXItbGVmdDo0cHggc29saWQgI2Y1OWUwYjtwYWRkaW5nOjEwcHggMTVweDttYXJnaW4tYm90dG9tOjIwcHgiPgogICAgICAgICAgICA8cD7imqDvuI8gPHN0cm9uZz5Ub2RvcyBvcyBnYXRpbGhvcyBlc3TDo28gZGVzbGlnYWRvcy48L3N0cm9uZz4gTmVuaHVtIGVsZW1lbnRvIGRlIHNvY2lhbCBwcm9vZiBlc3TDoSBzZW5kbyBleGliaWRvIG5vcyBwcm9kdXRvcy48L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CgogICAgICAgIDwhLS0gQ2FyZHMgZGUgU3RhdHVzIChjbGljw6F2ZWlzKSAtLT4KICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpdCxtaW5tYXgoMjAwcHgsMWZyKSk7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToyNHB4Ij4KCiAgICAgICAgICAgIDxkaXYgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY3Rpb24tcmVzZXJ2YXMnKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIKICAgICAgICAgICAgICAgICBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDo8P3BocCBlY2hvICRyZXNlcnZhc19vbiA/ICcjZjBmZGY0JyA6ICcjZmVmMmYyJzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRyZXNlcnZhc19vbiA/ICcjODZlZmFjJyA6ICcjZmNhNWE1JzsgPz47Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweCAyMHB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMiCiAgICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxLjAyKSciIG9ubW91c2VvdXQ9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSciPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjI4cHg7bWFyZ2luLWJvdHRvbTo0cHgiPvCfn6I8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTRweDtjb2xvcjo8P3BocCBlY2hvICRyZXNlcnZhc19vbiA/ICcjMTY2NTM0JyA6ICcjOTkxYjFiJzsgPz4iPgogICAgICAgICAgICAgICAgICAgIFJlc2VydmFzIENvbmZpcm1hZGFzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODA7bWFyZ2luLXRvcDoycHgiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHJlc2VydmFzX29uID8gJ+KchSBBdGl2bycgOiAn8J+UtCBEZXNsaWdhZG8nOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6NHB4Ij4KICAgICAgICAgICAgICAgICAgICBPZmZzZXQ6IDw/cGhwIGVjaG8gJG9mZnNldF9taW47ID8+4oCTPD9waHAgZWNobyAkb2Zmc2V0X21heDsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY3Rpb24tc3RhcnMnKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIKICAgICAgICAgICAgICAgICBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDo8P3BocCBlY2hvICRzdGFyc19vbiA/ICcjZmZmYmViJyA6ICcjZmVmMmYyJzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRzdGFyc19vbiA/ICcjZmRlMDQ3JyA6ICcjZmNhNWE1JzsgPz47Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweCAyMHB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMiCiAgICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxLjAyKSciIG9ubW91c2VvdXQ9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSciPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjI4cHg7bWFyZ2luLWJvdHRvbTo0cHgiPuKtkDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOjw/cGhwIGVjaG8gJHN0YXJzX29uID8gJyM5MjQwMGUnIDogJyM5OTFiMWInOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgRXN0cmVsYXMgJiBBdmFsaWHDp8O1ZXMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOjJweCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkc3RhcnNfb24gPyAn4pyFIEF0aXZvJyA6ICfwn5S0IERlc2xpZ2Fkbyc7ID8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWY7bWFyZ2luLXRvcDo0cHgiPgogICAgICAgICAgICAgICAgICAgIFJhdGluZyBiYXNlYWRvIGVtIHJlc2VydmFzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWN0aW9uLWRpc3AnKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIKICAgICAgICAgICAgICAgICBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDo8P3BocCBlY2hvICRkaXNwX29uID8gJyNlZmY2ZmYnIDogJyNmZWYyZjInOyA/Pjtib3JkZXI6MXB4IHNvbGlkIDw/cGhwIGVjaG8gJGRpc3Bfb24gPyAnIzkzYzVmZCcgOiAnI2ZjYTVhNSc7ID8+O2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE2cHggMjBweDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzIgogICAgICAgICAgICAgICAgIG9ubW91c2VvdmVyPSJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMS4wMiknIiBvbm1vdXNlb3V0PSJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMSknIj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyOHB4O21hcmdpbi1ib3R0b206NHB4Ij7wn5OFPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjE0cHg7Y29sb3I6PD9waHAgZWNobyAkZGlzcF9vbiA/ICcjMWU0MGFmJyA6ICcjOTkxYjFiJzsgPz4iPgogICAgICAgICAgICAgICAgICAgIERpc3BvbmliaWxpZGFkZQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwO21hcmdpbi10b3A6MnB4Ij4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRkaXNwX29uID8gJ+KchSBBdGl2bycgOiAn8J+UtCBEZXNsaWdhZG8nOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6NHB4Ij4KICAgICAgICAgICAgICAgICAgICBSZXF1ZXIgV0MgQm9va2luZ3MKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY3Rpb24tZGlzY291bnQnKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIKICAgICAgICAgICAgICAgICBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDo8P3BocCBlY2hvICRkaXNjb3VudF9vbiA/ICcjZmZmN2VkJyA6ICcjZmVmMmYyJzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRkaXNjb3VudF9vbiA/ICcjZmVkN2FhJyA6ICcjZmNhNWE1JzsgPz47Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweCAyMHB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMiCiAgICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxLjAyKSciIG9ubW91c2VvdXQ9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSciPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjI4cHg7bWFyZ2luLWJvdHRvbTo0cHgiPvCfj7fvuI88L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTRweDtjb2xvcjo8P3BocCBlY2hvICRkaXNjb3VudF9vbiA/ICcjOWEzNDEyJyA6ICcjOTkxYjFiJzsgPz4iPgogICAgICAgICAgICAgICAgICAgIEJhZGdlIGRlIERlc2NvbnRvCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODA7bWFyZ2luLXRvcDoycHgiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc2NvdW50X29uID8gJ+KchSBBdGl2bycgOiAn8J+UtCBEZXNsaWdhZG8nOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6NHB4Ij4KICAgICAgICAgICAgICAgICAgICAtNTAlIE9GRiAvIHByZcOnbyByaXNjYWRvCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWN0aW9uLWNvdW50ZG93bicpLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjonc21vb3RoJ30pIgogICAgICAgICAgICAgICAgIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGNvdW50ZG93bl9vbiA/ICcjZjBmOWZmJyA6ICcjZmVmMmYyJzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRjb3VudGRvd25fb24gPyAnI2JhZTZmZCcgOiAnI2ZjYTVhNSc7ID8+O2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjE2cHggMjBweDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzIgogICAgICAgICAgICAgICAgIG9ubW91c2VvdmVyPSJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMS4wMiknIiBvbm1vdXNlb3V0PSJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMSknIj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyOHB4O21hcmdpbi1ib3R0b206NHB4Ij7ij7HvuI88L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTRweDtjb2xvcjo8P3BocCBlY2hvICRjb3VudGRvd25fb24gPyAnIzAzNjlhMScgOiAnIzk5MWIxYic7ID8+Ij4KICAgICAgICAgICAgICAgICAgICBDb3VudGRvd24gQ2FycmluaG8KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOjJweCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkY291bnRkb3duX29uID8gJ+KchSBBdGl2bycgOiAn8J+UtCBEZXNsaWdhZG8nOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6NHB4Ij4KICAgICAgICAgICAgICAgICAgICAzIG1pbiDihpIgIlRlbXBvIEVzZ290YWRvISIKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlY3Rpb24tY29tYm8nKS5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCd9KSIKICAgICAgICAgICAgICAgICBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDo8P3BocCBlY2hvICRjb21ib19vbiA/ICcjZmVmY2U4JyA6ICcjZjlmYWZiJzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRjb21ib19vbiA/ICcjZmRlNjhhJyA6ICcjZTVlN2ViJzsgPz47Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTZweCAyMHB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMiCiAgICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxLjAyKSciIG9ubW91c2VvdXQ9InRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSciPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjI4cHg7bWFyZ2luLWJvdHRvbTo0cHgiPvCfjoE8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTRweDtjb2xvcjo8P3BocCBlY2hvICRjb21ib19vbiA/ICcjOTI0MDBlJyA6ICcjNmI3MjgwJzsgPz4iPgogICAgICAgICAgICAgICAgICAgIENvbWJvIFVwc2VsbAogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwO21hcmdpbi10b3A6MnB4Ij4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRjb21ib19vbiA/ICfinIUgQXRpdm8nIDogJ+KtlSBEZXNsaWdhZG8nOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6NHB4Ij4KICAgICAgICAgICAgICAgICAgICAiQWRpY2lvbmUgKyAxIGF0cmHDp8OjbyAxMCUgT0ZGIgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VjdGlvbi1zdGlja3ktY3RhJykuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOidzbW9vdGgnfSkiCiAgICAgICAgICAgICAgICAgc3R5bGU9ImN1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6PD9waHAgZWNobyAkc3RpY2t5X2N0YV9vbiA/ICcjZjBmOWZmJyA6ICcjZjlmYWZiJzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRzdGlja3lfY3RhX29uID8gJyM5M2M1ZmQnIDogJyNlNWU3ZWInOyA/Pjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxNnB4IDIwcHg7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE1cyIKICAgICAgICAgICAgICAgICBvbm1vdXNlb3Zlcj0idGhpcy5zdHlsZS50cmFuc2Zvcm09J3NjYWxlKDEuMDIpJyIgb25tb3VzZW91dD0idGhpcy5zdHlsZS50cmFuc2Zvcm09J3NjYWxlKDEpJyI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MjhweDttYXJnaW4tYm90dG9tOjRweCI+8J+ThjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOjw/cGhwIGVjaG8gJHN0aWNreV9jdGFfb24gPyAnIzAzNjlhMScgOiAnIzZiNzI4MCc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICBCYXJyYSBWRVIgREFUQVMKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOjJweCI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkc3RpY2t5X2N0YV9vbiA/ICfinIUgQXRpdm8nIDogJ+KtlSBEZXNsaWdhZG8nOyA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbi10b3A6NHB4Ij4KICAgICAgICAgICAgICAgICAgICBTdGlja3kgYmFyIG5hIHDDoWdpbmEgZGUgcHJvZHV0bwogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBGb3JtdWzDoXJpbyBkZSBjb25maWd1cmHDp8OjbyAtLT4KICAgICAgICA8Zm9ybSBpZD0idm0yLWdhdGlsaG9zLWZvcm0iPgoKICAgICAgICAgICAgPCEtLSBTRcOHw4NPOiBSZXNlcnZhcyAtLT4KICAgICAgICAgICAgPGRpdiBpZD0ic2VjdGlvbi1yZXNlcnZhcyIgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjRweDttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweDttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjE2cHgiPvCfn6IgUmVzZXJ2YXMgQ29uZmlybWFkYXM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjRweCAwIDA7Y29sb3I6IzZiNzI4MDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGliZSA8ZW0+IvCfn6IgWCByZXNlcnZhcyBjb25maXJtYWRhcyI8L2VtPiBlbSBjYWRhIHByb2R1dG8uIE8gbsO6bWVybyA9IHBlZGlkb3MgcmVhaXMgKyBvZmZzZXQgcG9yIHByb2R1dG8uCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJHJlc2VydmFzX29uID8gJyNkY2ZjZTcnIDogJyNmM2Y0ZjYnOyA/PjtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgPD9waHAgZWNobyAkcmVzZXJ2YXNfb24gPyAnIzg2ZWZhYycgOiAnI2QxZDVkYic7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJyZXNlcnZhc19lbmFibGVkIiBpZD0icmVzZXJ2YXNfZW5hYmxlZCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJHJlc2VydmFzX29uKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2N1cnNvcjpwb2ludGVyIiBvbmNoYW5nZT0idXBkYXRlVG9nZ2xlU3R5bGUodGhpcywncmVzZXJ2YXMnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJsYmwtcmVzZXJ2YXMiIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHg7Y29sb3I6PD9waHAgZWNobyAkcmVzZXJ2YXNfb24gPyAnIzE2NjUzNCcgOiAnIzZiNzI4MCc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHJlc2VydmFzX29uID8gJ+KchSBBdGl2bycgOiAn4q2VIEluYXRpdm8nOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgxODBweCwxZnIpKTtnYXA6MTZweDtiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxNnB4Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMzc0MTUxO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo2cHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg8J+TjyBPZmZzZXQgbcOtbmltbwogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJvZmZzZXRfbWluIiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkb2Zmc2V0X21pbik7ID8+IiBtaW49IjAiIG1heD0iOTk5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjE0cHgiPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzljYTNhZjttYXJnaW46NHB4IDAgMCI+TcOtbmltbyBzb21hZG8gYW8gcmVhbCAocGFkcsOjbzogMTIpPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjZweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICDwn5OPIE9mZnNldCBtw6F4aW1vCiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9Im9mZnNldF9tYXgiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRvZmZzZXRfbWF4KTsgPz4iIG1pbj0iMSIgbWF4PSI5OTkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTRweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmO21hcmdpbjo0cHggMCAwIj5Nw6F4aW1vIHNvbWFkbyBhbyByZWFsIChwYWRyw6NvOiA0Nyk8L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzZiNzI4MDttYXJnaW4tYm90dG9tOjRweCI+8J+UriBDb21vIGZ1bmNpb25hOjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojMzc0MTUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhZGEgcHJvZHV0byB0ZW0gdW0gPHN0cm9uZz5vZmZzZXQgZml4bzwvc3Ryb25nPiBkZXRlcm1pbsOtc3RpY28gKGNyYzMyIGRvIElEKS48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeDogcHJvZHV0byBJRCA0MiDihpIgc2VtcHJlIG1lc21vIG9mZnNldCBubyBpbnRlcnZhbG8gZGVmaW5pZG8uCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBTRcOHw4NPOiBFc3RyZWxhcyAtLT4KICAgICAgICAgICAgPGRpdiBpZD0ic2VjdGlvbi1zdGFycyIgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjRweDttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweDttYXJnaW4tYm90dG9tOjhweCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MTZweCI+4q2QIEVzdHJlbGFzICZhbXA7IEF2YWxpYcOnw7VlczwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46NHB4IDAgMDtjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aWJlIHJhdGluZyAoNC4y4oCTNC444piFKSBlIGNvbnRhZ2VtIGRlIGF2YWxpYcOnw7VlcyBjYWxjdWxhZG9zIGF1dG9tYXRpY2FtZW50ZSBhIHBhcnRpciBkYXMgcmVzZXJ2YXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPk7Do28gdXNhIHJldmlld3MgcmVhaXMgZG8gV29vQ29tbWVyY2UuPC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJHN0YXJzX29uID8gJyNkY2ZjZTcnIDogJyNmM2Y0ZjYnOyA/PjtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgPD9waHAgZWNobyAkc3RhcnNfb24gPyAnIzg2ZWZhYycgOiAnI2QxZDVkYic7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzdGFyc19lbmFibGVkIiBpZD0ic3RhcnNfZW5hYmxlZCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJHN0YXJzX29uKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2N1cnNvcjpwb2ludGVyIiBvbmNoYW5nZT0idXBkYXRlVG9nZ2xlU3R5bGUodGhpcywnc3RhcnMnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJsYmwtc3RhcnMiIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHg7Y29sb3I6PD9waHAgZWNobyAkc3RhcnNfb24gPyAnIzE2NjUzNCcgOiAnIzZiNzI4MCc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHN0YXJzX29uID8gJ+KchSBBdGl2bycgOiAn4q2VIEluYXRpdm8nOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDtmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwIj4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkbDs3JtdWxhIGRlIHJhdGluZzo8L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAmbHQ7MTUgcmVzZXJ2YXMg4oaSIDQuMuKYhSAmbmJzcDt8Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgMTXigJMyNSDihpIgNC404piFICZuYnNwO3wmbmJzcDsKICAgICAgICAgICAgICAgICAgICAyNuKAkzM1IOKGkiA0LjbimIUgJm5ic3A7fCZuYnNwOwogICAgICAgICAgICAgICAgICAgIDM24oCTNDUg4oaSIDQuN+KYhSAmbmJzcDt8Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgNDYrIOKGkiA0LjjimIUKICAgICAgICAgICAgICAgICAgICA8ZW0+KMKxMC4wLzAuMS8wLjIgdmFyaWHDp8OjbyBwb3IgcHJvZHV0byk8L2VtPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBTRcOHw4NPOiBEaXNwb25pYmlsaWRhZGUgLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9InNlY3Rpb24tZGlzcCIgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjRweDttYXJnaW4tYm90dG9tOjI0cHgiPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweDttYXJnaW4tYm90dG9tOjhweCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MTZweCI+8J+ThSBEaXNwb25pYmlsaWRhZGUgZG8gTcOqczwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46NHB4IDAgMDtjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aWJlIGRhdGFzIGRpc3BvbsOtdmVpcyBubyBtw6pzIGF0dWFsLiA8c3Ryb25nPlJlcXVlciBwbHVnaW4gV29vQ29tbWVyY2UgQm9va2luZ3MgYXRpdm8uPC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZSBCb29raW5ncyBuw6NvIGVzdGl2ZXIgYXRpdm8sIGVzdGUgYmFkZ2UgbsOjbyBhcGFyZWNlIGF1dG9tYXRpY2FtZW50ZS4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6PD9waHAgZWNobyAkZGlzcF9vbiA/ICcjZGNmY2U3JyA6ICcjZjNmNGY2JzsgPz47cGFkZGluZzo4cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkIDw/cGhwIGVjaG8gJGRpc3Bfb24gPyAnIzg2ZWZhYycgOiAnI2QxZDVkYic7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXNwX2VuYWJsZWQiIGlkPSJkaXNwX2VuYWJsZWQiIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKCRkaXNwX29uKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2N1cnNvcjpwb2ludGVyIiBvbmNoYW5nZT0idXBkYXRlVG9nZ2xlU3R5bGUodGhpcywnZGlzcCcpIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImxibC1kaXNwIiBzdHlsZT0iZm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOjw/cGhwIGVjaG8gJGRpc3Bfb24gPyAnIzE2NjUzNCcgOiAnIzZiNzI4MCc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3Bfb24gPyAn4pyFIEF0aXZvJyA6ICfirZUgSW5hdGl2byc7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjlmYWZiO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODAiPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+Q29yZXM6PC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAg8J+UtCAx4oCTMiBkYXRhcyByZXN0YW50ZXMgJm5ic3A7fCZuYnNwOwogICAgICAgICAgICAgICAgICAgIPCfn6EgM+KAkzUgZGF0YXMgJm5ic3A7fCZuYnNwOwogICAgICAgICAgICAgICAgICAgIPCfn6IgNisgZGF0YXMKICAgICAgICAgICAgICAgICAgICAmbmJzcDt8Jm5ic3A7IENhY2hlOiAxIGhvcmEKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gU0XDh8ODTzogQmFkZ2UgZGUgRGVzY29udG8gLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9InNlY3Rpb24tZGlzY291bnQiIHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjI0cHg7bWFyZ2luLWJvdHRvbToyNHB4Ij4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47ZmxleC13cmFwOndyYXA7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbTo4cHgiPgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjE2cHgiPvCfj7fvuI8gQmFkZ2UgZGUgRGVzY29udG8gKC1YJSBPRkYpPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjo0cHggMCAwO2NvbG9yOiM2YjcyODA7Zm9udC1zaXplOjEzcHgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhpYmUgbyBiYWRnZSA8c3Ryb25nIHN0eWxlPSJiYWNrZ3JvdW5kOiNlMjUwMjA7Y29sb3I6I2ZmZjtwYWRkaW5nOjFweCA2cHg7Ym9yZGVyLXJhZGl1czozcHg7Zm9udC1zaXplOjExcHgiPi01MCUgT0ZGPC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlIG8gcHJlw6dvIG9yaWdpbmFsIHJpc2NhZG8gbm9zIGNhcmRzIGRlIHByb2R1dG8gY29tIHByZcOnbyBwcm9tb2Npb25hbC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+UGx1Z2luOiBWaXZhTWFpcyBIdWI8L3N0cm9uZz4gKGNsYXNzZXMgPGNvZGU+dm1hcC1iYWRnZTwvY29kZT4gZSA8Y29kZT52bWFwLWRlPC9jb2RlPikuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGRpc2NvdW50X29uID8gJyNkY2ZjZTcnIDogJyNmM2Y0ZjYnOyA/PjtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgPD9waHAgZWNobyAkZGlzY291bnRfb24gPyAnIzg2ZWZhYycgOiAnI2QxZDVkYic7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXNjb3VudF9iYWRnZV9lbmFibGVkIiBpZD0iZGlzY291bnRfYmFkZ2VfZW5hYmxlZCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJGRpc2NvdW50X29uKTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2N1cnNvcjpwb2ludGVyIiBvbmNoYW5nZT0idXBkYXRlVG9nZ2xlU3R5bGUodGhpcywnZGlzY291bnQnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJsYmwtZGlzY291bnQiIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHg7Y29sb3I6PD9waHAgZWNobyAkZGlzY291bnRfb24gPyAnIzE2NjUzNCcgOiAnIzZiNzI4MCc7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc2NvdW50X29uID8gJ+KchSBBdGl2bycgOiAn4q2VIEluYXRpdm8nOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2Y5ZmFmYjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEycHggMTZweDtmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwIj4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkNvbW8gZnVuY2lvbmE6PC9zdHJvbmc+IFF1YW5kbyBhdGl2bywgbyBIdWIgZXhpYmUgbyBwcmXDp28gb3JpZ2luYWwgcmlzY2FkbyAoPGRlbD5SJCAzLjgwMDwvZGVsPikgZSBvIGJhZGdlIGNvbG9yaWRvIGNvbSBhICUgZGUgZGVzY29udG8KICAgICAgICAgICAgICAgICAgICBjYWxjdWxhZGEgYXV0b21hdGljYW1lbnRlIGEgcGFydGlyIGRvIHByZcOnbyByZWd1bGFyIMOXIHByZcOnbyBkZSB2ZW5kYSBkbyBwcm9kdXRvIFdvb0NvbW1lcmNlLgogICAgICAgICAgICAgICAgICAgIFF1YW5kbyA8ZW0+ZGVzbGlnYWRvPC9lbT4sIG8gQ1JNIFYyIGluamV0YSA8Y29kZT5kaXNwbGF5Om5vbmU8L2NvZGU+IHZpYSA8Y29kZT53cF9oZWFkPC9jb2RlPiBwYXJhIG9jdWx0YXIgYW1ib3Mgb3MgZWxlbWVudG9zLgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBTRcOHw4NPOiBDb3VudGRvd24gQ2FycmluaG8gLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9InNlY3Rpb24tY291bnRkb3duIiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyNHB4O21hcmdpbi1ib3R0b206MjRweCI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MTZweCI+4o+x77iPIENvdW50ZG93biBkbyBDYXJyaW5obzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46NHB4IDAgMDtjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aWJlIGJhcnJhIGRlIGNvbnRhZ2VtIHJlZ3Jlc3NpdmEgZGUgMyBtaW51dG9zIG5hIHDDoWdpbmEgZG8gY2FycmluaG8uIFF1YW5kbyBleHBpcmEsIG1vc3RyYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtPiYjMzQ78J+YsSBUZW1wbyBlc2dvdGFkbyEmIzM0OzwvZW0+IGUgZXN2YXppYSBvIGNhcnJpbmhvIGF1dG9tYXRpY2FtZW50ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj48c3Ryb25nPlBsdWdpbjogVml2YU1haXMgV0EgQ2FwdHVyZTwvc3Ryb25nPiAoZWxlbWVudG8gPGNvZGU+I3ZtLXdhLWNvdW50ZG93bi1iYXI8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6PD9waHAgZWNobyAkY291bnRkb3duX29uID8gJyNkY2ZjZTcnIDogJyNmM2Y0ZjYnOyA/PjtwYWRkaW5nOjhweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgPD9waHAgZWNobyAkY291bnRkb3duX29uID8gJyM4NmVmYWMnIDogJyNkMWQ1ZGInOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY291bnRkb3duX2VuYWJsZWQiIGlkPSJjb3VudGRvd25fZW5hYmxlZCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJGNvdW50ZG93bl9vbik7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MThweDtoZWlnaHQ6MThweDtjdXJzb3I6cG9pbnRlciIgb25jaGFuZ2U9InVwZGF0ZVRvZ2dsZVN0eWxlKHRoaXMsJ2NvdW50ZG93bicpIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImxibC1jb3VudGRvd24iIHN0eWxlPSJmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEzcHg7Y29sb3I6PD9waHAgZWNobyAkY291bnRkb3duX29uID8gJyMxNjY1MzQnIDogJyM2YjcyODAnOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRjb3VudGRvd25fb24gPyAn4pyFIEF0aXZvJyA6ICfirZUgSW5hdGl2byc7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjlmYWZiO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODAiPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+Q29tbyBmdW5jaW9uYTo8L3N0cm9uZz4gUXVhbmRvIGF0aXZvLCBvIHdhLWNhcHR1cmUgaW5qZXRhIHVtYSBiYXJyYSByb3hhIG5vIHRvcG8gZG8gY2FycmluaG8gY29tIGNvbnRhZG9yIHJlZ3Jlc3Npdm8gZGUgMyBtaW51dG9zLgogICAgICAgICAgICAgICAgICAgIFNlIG8gY2xpZW50ZSBuw6NvIGZpbmFsaXphciBhIGNvbXByYSBhbnRlcyBkbyB0ZW1wbywgbyBjYXJyaW5obyDDqSBlc3ZhemlhZG8gZSBhcGFyZWNlIGEgdGVsYSA8ZW0+JiMzNDtUZW1wbyBlc2dvdGFkbyEmIzM0OzwvZW0+IGNvbSBib3TDo28KICAgICAgICAgICAgICAgICAgICA8ZW0+JiMzNDtFc2NvbGhlciBOb3ZhbWVudGUmIzM0OzwvZW0+LiBPIHRpbWVyIHJlaW5pY2lhIGEgY2FkYSBub3ZhIHNlc3PDo28gKGJhc2VhZG8gZW0gc2Vzc2lvblN0b3JhZ2UpLgogICAgICAgICAgICAgICAgICAgIFF1YW5kbyA8ZW0+ZGVzbGlnYWRvPC9lbT4gKHZpYSA8Y29kZT52bTJfd2FfY291bnRkb3duX2VuYWJsZWQgPSAwPC9jb2RlPiksIG8gd2EtY2FwdHVyZSBuw6NvIGluamV0YSBvIEhUTUwg4oCUIG8gdGltZXIgbnVuY2EgYXBhcmVjZS4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gU0XDh8ODTzogQ29tYm8gVXBzZWxsIC0tPgogICAgICAgICAgICA8ZGl2IGlkPSJzZWN0aW9uLWNvbWJvIiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyNHB4O21hcmdpbi1ib3R0b206MjRweCI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MTZweCI+8J+OgSBDb21ibyBVcHNlbGw8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjRweCAwIDA7Y29sb3I6IzZiNzI4MDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGliZSBibG9jbyAiQWRpY2lvbmUgbWFpcyB1bWEgYXRyYcOnw6NvIGUgZ2FuaGUgMTAlIE9GRiIgbmEgcMOhZ2luYSBkbyBjYXJyaW5obywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbSBzdWdlc3TDtWVzIGRlIHByb2R1dG9zIHBvcHVsYXJlcyBlIGN1cG9tIDxjb2RlPkNPTUJPMTA8L2NvZGU+Ljxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+UGx1Z2luOiBWaXZhTWFpcyBXQSBDYXB0dXJlPC9zdHJvbmc+IChlbGVtZW50byA8Y29kZT4jdm0td2EtY29tYm8tc2VjdGlvbjwvY29kZT4pLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBzdHlsZT0iY29sb3I6I2RjMjYyNiI+UG9yIHBhZHLDo286IGRlc2xpZ2Fkby48L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6PD9waHAgZWNobyAkY29tYm9fb24gPyAnI2ZlZmNlOCcgOiAnI2YzZjRmNic7ID8+O3BhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRjb21ib19vbiA/ICcjZmRlNjhhJyA6ICcjZDFkNWRiJzsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImNvbWJvX2VuYWJsZWQiIGlkPSJjb21ib19lbmFibGVkIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCgkY29tYm9fb24pOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7Y3Vyc29yOnBvaW50ZXIiIG9uY2hhbmdlPSJ1cGRhdGVUb2dnbGVTdHlsZSh0aGlzLCdjb21ibycpIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImxibC1jb21ibyIgc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDtjb2xvcjo8P3BocCBlY2hvICRjb21ib19vbiA/ICcjOTI0MDBlJyA6ICcjNmI3MjgwJzsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkY29tYm9fb24gPyAn4pyFIEF0aXZvJyA6ICfirZUgSW5hdGl2byc7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMnB4IDE2cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MCI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5Db21vIGZ1bmNpb25hOjwvc3Ryb25nPiBRdWFuZG8gYXRpdm8sIG8gd2EtY2FwdHVyZSBleGliZSB1bSBibG9jbyBlc2N1cm8vZG91cmFkbyBubyBjYXJyaW5obyBjb20KICAgICAgICAgICAgICAgICAgICAzIHN1Z2VzdMO1ZXMgZGUgYXRyYcOnw7VlcyBwb3B1bGFyZXMuIE8gY2xpZW50ZSBwb2RlIGNsaWNhciBlbSAiKyBBRElDSU9OQVIgQU8gQ09NQk8iIHBhcmEgaW5jbHVpciBtYWlzIHByb2R1dG9zLgogICAgICAgICAgICAgICAgICAgIEFvIHVzYXIgbyBjdXBvbSA8Y29kZT5DT01CTzEwPC9jb2RlPiwgbyBkZXNjb250byBkZSAxMCUgw6kgYXBsaWNhZG8gYXV0b21hdGljYW1lbnRlICh2w6FsaWRvIGFwZW5hcyBjb20gMisgYXRyYcOnw7VlcykuCiAgICAgICAgICAgICAgICAgICAgUXVhbmRvIDxlbT5kZXNsaWdhZG88L2VtPiAocGFkcsOjbyksIG8gYmxvY28gbsOjbyDDqSByZW5kZXJpemFkbyDigJQgbmVuaHVtYSBjb25mdXPDo28gbm8gY2FycmluaG8uCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFNFw4fDg086IEJhcnJhIFZFUiBEQVRBUyAtLT4KICAgICAgICAgICAgPGRpdiBpZD0ic2VjdGlvbi1zdGlja3ktY3RhIiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyNHB4O21hcmdpbi1ib3R0b206MjRweCI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MTZweCI+8J+ThiBCYXJyYSBWRVIgREFUQVM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjRweCAwIDA7Y29sb3I6IzZiNzI4MDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXJyYSBzdGlja3kgbm8gcm9kYXDDqSBkYXMgcMOhZ2luYXMgZGUgcHJvZHV0byBjb20gcHJlw6dvIGUgYm90w6NvIDxzdHJvbmc+VkVSIERBVEFTIOKAujwvc3Ryb25nPiBxdWUgcm9sYSBhdMOpIG8gY2FsZW5kw6FyaW8gZGUgZGlzcG9uaWJpbGlkYWRlLjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+UGx1Z2luOiBWaXZhTWFpcyBIdWI8L3N0cm9uZz4gKGVsZW1lbnRvIDxjb2RlPiN2bS1zdGlja3ktcHJvZHVjdC1jdGE8L2NvZGU+KS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgc3R5bGU9ImNvbG9yOiNkYzI2MjYiPlBvciBwYWRyw6NvOiBkZXNsaWdhZGE8L3N0cm9uZz4g4oCUIHBvZGUgY29tcGV0aXIgY29tIGEgU29mSUEuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJHN0aWNreV9jdGFfb24gPyAnI2RjZmNlNycgOiAnI2YzZjRmNic7ID8+O3BhZGRpbmc6OHB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRzdGlja3lfY3RhX29uID8gJyM4NmVmYWMnIDogJyNkMWQ1ZGInOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic3RpY2t5X2N0YV9lbmFibGVkIiBpZD0ic3RpY2t5X2N0YV9lbmFibGVkIiB2YWx1ZT0iMSIgPD9waHAgY2hlY2tlZCgkc3RpY2t5X2N0YV9vbik7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6MThweDtoZWlnaHQ6MThweDtjdXJzb3I6cG9pbnRlciIgb25jaGFuZ2U9InVwZGF0ZVRvZ2dsZVN0eWxlKHRoaXMsJ3N0aWNreS1jdGEnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJsYmwtc3RpY2t5LWN0YSIgc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTNweDtjb2xvcjo8P3BocCBlY2hvICRzdGlja3lfY3RhX29uID8gJyMxNjY1MzQnIDogJyM2YjcyODAnOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRzdGlja3lfY3RhX29uID8gJ+KchSBBdGl2bycgOiAn4q2VIEluYXRpdm8nOyA/PgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjlmYWZiO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODAiPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+Q29tbyBmdW5jaW9uYTo8L3N0cm9uZz4gUXVhbmRvIGF0aXZhLCBvIEh1YiBleGliZSB1bWEgYmFycmEgcm94YSBmaXhhIG5vIHJvZGFww6kgZGFzIHDDoWdpbmFzIGRlIHByb2R1dG8gY29tIG8gcHJlw6dvIGUgbyBib3TDo28gPGVtPiJWRVIgREFUQVMg4oC6IjwvZW0+LAogICAgICAgICAgICAgICAgICAgIHF1ZSBhbyBjbGljYXIgcm9sYSBhIHDDoWdpbmEgYXTDqSBvIGNhbGVuZMOhcmlvIGRvIFdvb0NvbW1lcmNlIEJvb2tpbmdzLgogICAgICAgICAgICAgICAgICAgIFF1YW5kbyA8ZW0+ZGVzbGlnYWRhPC9lbT4gKHBhZHLDo28pLCBvIENSTSBWMiBpbmpldGEgPGNvZGU+I3ZtLXN0aWNreS1wcm9kdWN0LWN0YXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTwvY29kZT4gdmlhIDxjb2RlPndwX2hlYWQ8L2NvZGU+IOKAlCBhIGJhcnJhIG51bmNhIGFwYXJlY2UsCiAgICAgICAgICAgICAgICAgICAgZGVpeGFuZG8gYSBTb2ZJQSBjb21vIMO6bmljbyBDVEEgZmx1dHVhbnRlLgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBCb3TDo28gU2FsdmFyIC0tPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxNnB4O2ZsZXgtd3JhcDp3cmFwIj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYnRuLXNhdmUtZ2F0aWxob3MiCiAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InZtMlNhdmVHYXRpbGhvcygpIgogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDojMjU2M2ViO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7cGFkZGluZzoxMnB4IDI4cHg7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweCI+CiAgICAgICAgICAgICAgICAgICAg8J+SviBTYWx2YXIgQ29uZmlndXJhw6fDtWVzCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImdhdGlsaG9zLW1zZyIgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDwvZm9ybT4KCiAgICAgICAgPCEtLSBQcmV2aWV3IGVzdMOhdGljbyAtLT4KICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjMycHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyNHB4Ij4KICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MCAwIDE2cHg7Zm9udC1zaXplOjE1cHgiPvCfkYHvuI8gUHJldmlldyDigJQgQ29tbyBhcGFyZWNlIG5vIHByb2R1dG88L2gzPgogICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjI0cHgiPgogICAgICAgICAgICAgICAgPCEtLSBTaW5nbGUgcHJvZHVjdCAtLT4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE2cHg7bWluLXdpZHRoOjIyMHB4Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzljYTNhZjttYXJnaW4tYm90dG9tOjEycHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xldHRlci1zcGFjaW5nOi4wNWVtIj5Qw6FnaW5hIGRvIFByb2R1dG88L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHJlc2VydmFzX29uKSA6ID8+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6IzI3Njc0OTtmb250LXdlaWdodDo2MDA7bWFyZ2luLWJvdHRvbTo0cHgiPvCfn6IgPD9waHAgZWNobyAkb2Zmc2V0X21pbiArIDU7ID8+IHJlc2VydmFzIGNvbmZpcm1hZGFzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRzdGFyc19vbikgOiA/PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjVweDttYXJnaW4tYm90dG9tOjhweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojZjVhNjIzO2ZvbnQtc2l6ZToxNHB4Ij7imIXimIXimIXimIXimIU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNTU1O2ZvbnQtd2VpZ2h0OjYwMCI+NCw2IDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDo0MDA7Y29sb3I6Izg4OCI+KDE4IGF2YWxpYcOnw7Vlcyk8L3NwYW4+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkZGlzcF9vbikgOiA/PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6IzI3Njc0OTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjRweCAxMHB4O2JvcmRlci1yYWRpdXM6NHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAg8J+foiBBZ2VuZGEgYWJlcnRhIHBhcmEgPD9waHAgZWNobyB1Y2ZpcnN0KGRhdGVfaTE4bignRicpKTsgPz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGRpc2NvdW50X29uKSA6ID8+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzljYTNhZiI+UiQgMy44MDA8L2RlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2UyNTAyMDtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czozcHgiPi01MCUgT0ZGPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghJHJlc2VydmFzX29uICYmICEkc3RhcnNfb24gJiYgISRkaXNwX29uICYmICEkZGlzY291bnRfb24pIDogPz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjojOWNhM2FmO2ZvbnQtc2l6ZToxM3B4Ij5OZW5odW0gZWxlbWVudG8gYXRpdm88L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPCEtLSBMb29wIC8gY2F0w6Fsb2dvIC0tPgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTZweDttaW4td2lkdGg6MTYwcHgiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojOWNhM2FmO21hcmdpbi1ib3R0b206MTJweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bGV0dGVyLXNwYWNpbmc6LjA1ZW0iPkNhdMOhbG9nbyAvIExvamE8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojMzc0MTUxO2ZvbnQtd2VpZ2h0OjUwMDttYXJnaW4tYm90dG9tOjhweCI+8J+OpCBOb21lIGRvIFByb2R1dG88L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHJlc2VydmFzX29uKSA6ID8+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzI3Njc0OTtmb250LXdlaWdodDo2MDA7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbTozcHgiPvCfn6IgPD9waHAgZWNobyAkb2Zmc2V0X21pbiArIDU7ID8+IHJlc2VydmFzIGNvbmZpcm1hZGFzPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRzdGFyc19vbikgOiA/PgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtnYXA6NHB4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiNmNWE2MjM7Zm9udC1zaXplOjEycHgiPuKYheKYheKYheKYheKYhTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM1NTU7Zm9udC13ZWlnaHQ6NjAwIj40LDY8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTBweDtjb2xvcjojODg4Ij4oMTgpPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkZGlzY291bnRfb24pIDogPz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjZweDttYXJnaW4tdG9wOjZweCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWwgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWYiPlIkIDMuODAwPC9kZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiNlMjUwMjA7Y29sb3I6I2ZmZjtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo3MDA7cGFkZGluZzoxcHggNXB4O2JvcmRlci1yYWRpdXM6M3B4Ij4tNTAlIE9GRjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRyZXNlcnZhc19vbiAmJiAhJHN0YXJzX29uICYmICEkZGlzY291bnRfb24pIDogPz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjojOWNhM2FmO2ZvbnQtc2l6ZToxMnB4O3RleHQtYWxpZ246Y2VudGVyIj5OZW5odW0gZWxlbWVudG8gYXRpdm88L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWY7bWFyZ2luLXRvcDoxMnB4Ij4KICAgICAgICAgICAgICAgICogUHJldmlldyBlc3TDoXRpY28gY29tIHZhbG9yZXMgZGUgZXhlbXBsby4gT3MgdmFsb3JlcyByZWFpcyB2YXJpYW0gcG9yIHByb2R1dG8gKGNhbGN1bGFkb3MgYXV0b21hdGljYW1lbnRlKS4KICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkY291bnRkb3duX29uKSA6ID8+CiAgICAgICAgICAgICAgICA8YnI+PGJyPjxzdHJvbmc+Q2FycmluaG8gYXRpdm86PC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiMxZTBiNGI7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMHB4IDE0cHg7bWFyZ2luLXRvcDo4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxOHB4Ij7ij7HvuI88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiNmZmY7Zm9udC1zaXplOjEzcHgiPlNldXMgaXRlbnMgZXN0w6NvIHJlc2VydmFkb3MgcG9yIDxzdHJvbmc+MDM6MDA8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDw/cGhwIGVsc2UgOiA/PgogICAgICAgICAgICAgICAgPGJyPjxicj48ZW0gc3R5bGU9ImNvbG9yOiNlZjQ0NDQ7Zm9udC1zaXplOjEycHgiPuKPse+4jyBDb3VudGRvd24gZG8gY2FycmluaG8gPHN0cm9uZz5kZXNsaWdhZG88L3N0cm9uZz48L2VtPgogICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KCiAgICA8L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgZnVuY3Rpb24gdXBkYXRlVG9nZ2xlU3R5bGUoZWwsIGtleSkgewogICAgICAgIHZhciBsYmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGJsLScgKyBrZXkpOwogICAgICAgIHZhciB3cmFwID0gZWwucGFyZW50RWxlbWVudDsKICAgICAgICBpZiAoZWwuY2hlY2tlZCkgewogICAgICAgICAgICB3cmFwLnN0eWxlLmJhY2tncm91bmQgPSAnI2RjZmNlNyc7CiAgICAgICAgICAgIHdyYXAuc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzg2ZWZhYyc7CiAgICAgICAgICAgIGxibC5zdHlsZS5jb2xvciA9ICcjMTY2NTM0JzsKICAgICAgICAgICAgbGJsLnRleHRDb250ZW50ID0gJ+KchSBBdGl2byc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd3JhcC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmM2Y0ZjYnOwogICAgICAgICAgICB3cmFwLnN0eWxlLmJvcmRlckNvbG9yID0gJyNkMWQ1ZGInOwogICAgICAgICAgICBsYmwuc3R5bGUuY29sb3IgPSAnIzZiNzI4MCc7CiAgICAgICAgICAgIGxibC50ZXh0Q29udGVudCA9ICfirZUgSW5hdGl2byc7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHZtMlNhdmVHYXRpbGhvcygpIHsKICAgICAgICB2YXIgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1zYXZlLWdhdGlsaG9zJyk7CiAgICAgICAgdmFyIG1zZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnYXRpbGhvcy1tc2cnKTsKICAgICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItZ2F0aWxob3MtZm9ybScpOwogICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgYnRuLnRleHRDb250ZW50ID0gJ+KPsyBTYWx2YW5kby4uLic7CiAgICAgICAgbXNnLnRleHRDb250ZW50ID0gJyc7CgogICAgICAgIHZhciBkYXRhID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZGF0YS5hcHBlbmQoJ2FjdGlvbicsICd2bTJfZ2F0aWxob3Nfc2F2ZScpOwogICAgICAgIGRhdGEuYXBwZW5kKCdub25jZScsICc8P3BocCBlY2hvIGVzY19qcygkbm9uY2UpOyA/PicpOwogICAgICAgIGRhdGEuYXBwZW5kKCdyZXNlcnZhc19lbmFibGVkJywgICAgICAgZm9ybS5xdWVyeVNlbGVjdG9yKCdbbmFtZT1yZXNlcnZhc19lbmFibGVkXScpLmNoZWNrZWQgPyAnMScgOiAnMCcpOwogICAgICAgIGRhdGEuYXBwZW5kKCdzdGFyc19lbmFibGVkJywgICAgICAgICAgZm9ybS5xdWVyeVNlbGVjdG9yKCdbbmFtZT1zdGFyc19lbmFibGVkXScpLmNoZWNrZWQgPyAnMScgOiAnMCcpOwogICAgICAgIGRhdGEuYXBwZW5kKCdkaXNwX2VuYWJsZWQnLCAgICAgICAgICAgZm9ybS5xdWVyeVNlbGVjdG9yKCdbbmFtZT1kaXNwX2VuYWJsZWRdJykuY2hlY2tlZCA/ICcxJyA6ICcwJyk7CiAgICAgICAgZGF0YS5hcHBlbmQoJ2Rpc2NvdW50X2JhZGdlX2VuYWJsZWQnLCBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWRpc2NvdW50X2JhZGdlX2VuYWJsZWRdJykuY2hlY2tlZCA/ICcxJyA6ICcwJyk7CiAgICAgICAgZGF0YS5hcHBlbmQoJ2NvdW50ZG93bl9lbmFibGVkJywgICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWNvdW50ZG93bl9lbmFibGVkXScpLmNoZWNrZWQgICAgICA/ICcxJyA6ICcwJyk7CiAgICAgICAgZGF0YS5hcHBlbmQoJ2NvbWJvX2VuYWJsZWQnLCAgICAgICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWNvbWJvX2VuYWJsZWRdJykuY2hlY2tlZCAgICAgICAgICA/ICcxJyA6ICcwJyk7CiAgICAgICAgZGF0YS5hcHBlbmQoJ3N0aWNreV9jdGFfZW5hYmxlZCcsICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPXN0aWNreV9jdGFfZW5hYmxlZF0nKS5jaGVja2VkICAgICA/ICcxJyA6ICcwJyk7CiAgICAgICAgZGF0YS5hcHBlbmQoJ29mZnNldF9taW4nLCBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPW9mZnNldF9taW5dJykudmFsdWUpOwogICAgICAgIGRhdGEuYXBwZW5kKCdvZmZzZXRfbWF4JywgZm9ybS5xdWVyeVNlbGVjdG9yKCdbbmFtZT1vZmZzZXRfbWF4XScpLnZhbHVlKTsKCiAgICAgICAgZmV0Y2goJzw/cGhwIGVjaG8gZXNjX2pzKGFkbWluX3VybCgnYWRtaW4tYWpheC5waHAnKSk7ID8+Jywge21ldGhvZDonUE9TVCcsIGJvZHk6ZGF0YX0pCiAgICAgICAgICAgIC50aGVuKHIgPT4gci5qc29uKCkpCiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7CiAgICAgICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfwn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXMnOwogICAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgbXNnLmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT0iY29sb3I6IzE2NjUzNDtmb250LXdlaWdodDo2MDAiPicgKyByZXMuZGF0YS5tZXNzYWdlICsgJzwvc3Bhbj4nOwogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gbG9jYXRpb24ucmVsb2FkKCksIDEyMDApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtc2cuaW5uZXJIVE1MID0gJzxzcGFuIHN0eWxlPSJjb2xvcjojOTkxYjFiIj7inYwgRXJybyBhbyBzYWx2YXIuPC9zcGFuPic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfwn5K+IFNhbHZhciBDb25maWd1cmHDp8O1ZXMnOwogICAgICAgICAgICAgICAgbXNnLmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT0iY29sb3I6Izk5MWIxYiI+4p2MIEVycm8gZGUgY29uZXjDo28uPC9zcGFuPic7CiAgICAgICAgICAgIH0pOwogICAgfQogICAgPC9zY3JpcHQ+CiAgICA8P3BocAp9CgovLyDilIDilIAgU3VwZXJQV0Eg4oCUIFRyYWR1w6fDo28gZGFzIG1lbnNhZ2VucyBvZmZsaW5lL29ubGluZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKYWRkX2FjdGlvbignd3BfZm9vdGVyJywgZnVuY3Rpb24oKSB7CiAgICBpZiAoaXNfYWRtaW4oKSkgcmV0dXJuOwogICAgCj8+CjxzY3JpcHQ+CihmdW5jdGlvbigpIHsKICAgIGZ1bmN0aW9uIGZpeFN1cGVycHdhTXNncygpIHsKICAgICAgICBpZiAodHlwZW9mIHN1cGVycHdhX3N3ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICBzdXBlcnB3YV9zdy5vZmZsaW5lX21lc3NhZ2VfdHh0ID0gJ1ZvY8OqIGVzdMOhIHNlbSBjb25leMOjbyBjb20gYSBpbnRlcm5ldC4nOwogICAgICAgICAgICBzdXBlcnB3YV9zdy5vbmxpbmVfbWVzc2FnZV90eHQgID0gJ1ZvY8OqIHZvbHRvdSBhIHRlciBjb25leMOjbyEgPGEgaHJlZj0iamF2YXNjcmlwdDpsb2NhdGlvbi5yZWxvYWQoKSI+QXR1YWxpemFyPC9hPic7CiAgICAgICAgfQogICAgfQogICAgZml4U3VwZXJwd2FNc2dzKCk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZml4U3VwZXJwd2FNc2dzKTsKfSkoKTsKPC9zY3JpcHQ+CiAgICA8P3BocAp9LCA5OSk7CgoKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCi8vIFNPRklBIElOVEVMTElHRU5DRSDigJQgQ1JNIFYyIHYxLjUuNTAKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCgovLyDilIDilIAgQ3JpYcOnw6NvIGRhIHRhYmVsYSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2NyZWF0ZV9zb2ZpYV90YWJsZSgpIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0ICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9zZXNzaW9ucyc7CiAgICAkc3FsID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICR0ICgKICAgICAgaWQgICAgICAgICAgICAgICAgICBiaWdpbnQoMjApIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAogICAgICBzZXNzaW9uX2lkICAgICAgICAgIHZhcmNoYXIoNjQpIE5PVCBOVUxMLAogICAgICBwZXJzaXN0ZW50X3VpZCAgICAgIHZhcmNoYXIoNjQpIERFRkFVTFQgTlVMTCwKICAgICAgc3RhcnRlZF9hdCAgICAgICAgICBkYXRldGltZSBOT1QgTlVMTCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogICAgICBlbmRlZF9hdCAgICAgICAgICAgIGRhdGV0aW1lIERFRkFVTFQgTlVMTCwKICAgICAgcHJvZHVjdF9pZCAgICAgICAgICBiaWdpbnQoMjApIERFRkFVTFQgTlVMTCwKICAgICAgcHJvZHVjdF9uYW1lICAgICAgICB2YXJjaGFyKDI1NSkgREVGQVVMVCBOVUxMLAogICAgICB3aGF0c2FwcCAgICAgICAgICAgIHZhcmNoYXIoMzApIERFRkFVTFQgTlVMTCwKICAgICAgd2FfY2FwdHVyZWRfYXQgICAgICBkYXRldGltZSBERUZBVUxUIE5VTEwsCiAgICAgIHdhX2NhcHR1cmVfdHJpZ2dlciAgdmFyY2hhcig1MCkgREVGQVVMVCBOVUxMLAogICAgICBjYXRlZ29yaWEgICAgICAgICAgIHZhcmNoYXIoNjApIERFRkFVTFQgTlVMTCwKICAgICAgdGlwb19ldmVudG8gICAgICAgICB2YXJjaGFyKDEyMCkgREVGQVVMVCBOVUxMLAogICAgICBkYXRhX2V2ZW50b19zdHIgICAgIHZhcmNoYXIoMzApIERFRkFVTFQgTlVMTCwKICAgICAgdXJnZW5jaWEgICAgICAgICAgICB2YXJjaGFyKDIwKSBERUZBVUxUIE5VTEwsCiAgICAgIG1lbnNhZ2Vuc19jb3VudCAgICAgaW50IE5PVCBOVUxMIERFRkFVTFQgMCwKICAgICAgc2lnbmFscyAgICAgICAgICAgICBsb25ndGV4dCBERUZBVUxUIE5VTEwsCiAgICAgIGhpc3RvcmljbyAgICAgICAgICAgbG9uZ3RleHQgREVGQVVMVCBOVUxMLAogICAgICBjb252ZXJ0ZWQgICAgICAgICAgIHRpbnlpbnQoMSkgTk9UIE5VTEwgREVGQVVMVCAwLAogICAgICBzb3VyY2VfdXJsICAgICAgICAgIHZhcmNoYXIoNTEyKSBERUZBVUxUIE5VTEwsCiAgICAgIGVtYWlsICAgICAgICAgICAgICAgdmFyY2hhcigxMDApIERFRkFVTFQgTlVMTCwKICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgVU5JUVVFIEtFWSBzZXNzaW9uX2lkIChzZXNzaW9uX2lkKSwKICAgICAgS0VZIHdoYXRzYXBwICh3aGF0c2FwcCksCiAgICAgIEtFWSBzdGFydGVkX2F0IChzdGFydGVkX2F0KSwKICAgICAgS0VZIGNhdGVnb3JpYSAoY2F0ZWdvcmlhKSwKICAgICAgS0VZIHBlcnNpc3RlbnRfdWlkIChwZXJzaXN0ZW50X3VpZCksCiAgICAgIEtFWSBjb252ZXJ0ZWQgKGNvbnZlcnRlZCkKICAgICkgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9dXRmOG1iNDsiOwogICAgcmVxdWlyZV9vbmNlIEFCU1BBVEggLiAnd3AtYWRtaW4vaW5jbHVkZXMvdXBncmFkZS5waHAnOwogICAgZGJEZWx0YSgkc3FsKTsKICAgIC8vIEdhcmFudGlyIGNvbHVuYXMgYWRpY2lvbmFkYXMgZW0gdmVyc8O1ZXMgcG9zdGVyaW9yZXMgKGRlZmVuc2l2ZSBtaWdyYXRpb24pCiAgICAkZXhpc3RpbmdfY29scyA9ICR3cGRiLT5nZXRfY29sKCJERVNDUklCRSAkdCIpOwogICAgaWYgKCBpc19hcnJheSgkZXhpc3RpbmdfY29scykgKSB7CiAgICAgICAgaWYgKCAhIGluX2FycmF5KCdwZXJzaXN0ZW50X3VpZCcsICRleGlzdGluZ19jb2xzKSApIHsKICAgICAgICAgICAgJHdwZGItPnF1ZXJ5KCJBTFRFUiBUQUJMRSAkdCBBREQgQ09MVU1OIHBlcnNpc3RlbnRfdWlkIHZhcmNoYXIoNjQpIERFRkFVTFQgTlVMTCIpOwogICAgICAgICAgICAkd3BkYi0+cXVlcnkoIkFMVEVSIFRBQkxFICR0IEFERCBLRVkgcGVyc2lzdGVudF91aWRfaWR4IChwZXJzaXN0ZW50X3VpZCkiKTsKICAgICAgICB9CiAgICAgICAgaWYgKCAhIGluX2FycmF5KCd3YV9jYXB0dXJlZF9hdCcsICRleGlzdGluZ19jb2xzKSApIHsKICAgICAgICAgICAgJHdwZGItPnF1ZXJ5KCJBTFRFUiBUQUJMRSAkdCBBREQgQ09MVU1OIHdhX2NhcHR1cmVkX2F0IGRhdGV0aW1lIERFRkFVTFQgTlVMTCIpOwogICAgICAgIH0KICAgICAgICBpZiAoICEgaW5fYXJyYXkoJ3V0bV9zb3VyY2UnLCAkZXhpc3RpbmdfY29scykgKSB7CiAgICAgICAgICAgICR3cGRiLT5xdWVyeSgiQUxURVIgVEFCTEUgJHQgQUREIENPTFVNTiB1dG1fc291cmNlIHZhcmNoYXIoMTAwKSBERUZBVUxUIE5VTEwiKTsKICAgICAgICB9CiAgICAgICAgaWYgKCAhIGluX2FycmF5KCd1dG1fbWVkaXVtJywgJGV4aXN0aW5nX2NvbHMpICkgewogICAgICAgICAgICAkd3BkYi0+cXVlcnkoIkFMVEVSIFRBQkxFICR0IEFERCBDT0xVTU4gdXRtX21lZGl1bSB2YXJjaGFyKDEwMCkgREVGQVVMVCBOVUxMIik7CiAgICAgICAgfQogICAgICAgIGlmICggISBpbl9hcnJheSgndXRtX2NhbXBhaWduJywgJGV4aXN0aW5nX2NvbHMpICkgewogICAgICAgICAgICAkd3BkYi0+cXVlcnkoIkFMVEVSIFRBQkxFICR0IEFERCBDT0xVTU4gdXRtX2NhbXBhaWduIHZhcmNoYXIoMjU1KSBERUZBVUxUIE5VTEwiKTsKICAgICAgICB9CiAgICAgICAgaWYgKCAhIGluX2FycmF5KCdjYW5hbF9vcmlnZW0nLCAkZXhpc3RpbmdfY29scykgKSB7CiAgICAgICAgICAgICR3cGRiLT5xdWVyeSgiQUxURVIgVEFCTEUgJHQgQUREIENPTFVNTiBjYW5hbF9vcmlnZW0gdmFyY2hhcig2MCkgREVGQVVMVCBOVUxMIik7CiAgICAgICAgfQogICAgICAgIC8vIHYxLjUuOTE6IGVtYWlsIGNhcHR1cmUKICAgICAgICBpZiAoICEgaW5fYXJyYXkoJ2VtYWlsJywgJGV4aXN0aW5nX2NvbHMpICkgewogICAgICAgICAgICAkd3BkYi0+cXVlcnkoIkFMVEVSIFRBQkxFICR0IEFERCBDT0xVTU4gZW1haWwgdmFyY2hhcigxMDApIERFRkFVTFQgTlVMTCIpOwogICAgICAgIH0KICAgIH0KICAgIC8vIGluaXQgZW0gcnVudGltZSB0YW1iw6ltCiAgICBhZGRfYWN0aW9uKCdpbml0JywgZnVuY3Rpb24oKSB7CiAgICAgICAgc3RhdGljICRkb25lID0gZmFsc2U7CiAgICAgICAgaWYgKCRkb25lKSByZXR1cm47ICRkb25lID0gdHJ1ZTsKICAgICAgICBnbG9iYWwgJHdwZGI7CiAgICAgICAgJHQgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9zZXNzaW9ucyc7CiAgICAgICAgaWYgKCR3cGRiLT5nZXRfdmFyKCJTSE9XIFRBQkxFUyBMSUtFICckdCciKSAhPT0gJHQpIHsKICAgICAgICAgICAgdm0yX2NyZWF0ZV9zb2ZpYV90YWJsZSgpOwogICAgICAgIH0KICAgIH0pOwp9CmFkZF9hY3Rpb24oJ3BsdWdpbnNfbG9hZGVkJywgJ3ZtMl9jcmVhdGVfc29maWFfdGFibGUnLCA1KTsKCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAovLyBTT0ZJQSBLTk9XTEVER0UgQkFTRQovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKZnVuY3Rpb24gdm0yX2NyZWF0ZV9zb2ZpYV9rbm93bGVkZ2VfdGFibGUoKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdCA9ICR3cGRiLT5wcmVmaXggLiAndm0yX3NvZmlhX2tub3dsZWRnZSc7CiAgICBpZiAoICR3cGRiLT5nZXRfdmFyKCJTSE9XIFRBQkxFUyBMSUtFICckdCciKSA9PT0gJHQgKSByZXR1cm47CiAgICAkY2hhcnNldCA9ICR3cGRiLT5nZXRfY2hhcnNldF9jb2xsYXRlKCk7CiAgICAkc3FsID0gIkNSRUFURSBUQUJMRSAkdCAoCiAgICAgICAgaWQgQklHSU5UIFVOU0lHTkVEIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAogICAgICAgIHRpcG8gVkFSQ0hBUigyMCkgTk9UIE5VTEwgREVGQVVMVCAndGV4dG8nLAogICAgICAgIHRpdHVsbyBWQVJDSEFSKDI1NSkgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgICBjb250ZXVkbyBMT05HVEVYVCwKICAgICAgICB1cmwgVkFSQ0hBUig1MTIpIERFRkFVTFQgTlVMTCwKICAgICAgICBhdGl2byBUSU5ZSU5UKDEpIE5PVCBOVUxMIERFRkFVTFQgMSwKICAgICAgICBjcmlhZG9fZW0gREFURVRJTUUgREVGQVVMVCBOVUxMLAogICAgICAgIFBSSU1BUlkgS0VZIChpZCkKICAgICkgJGNoYXJzZXQ7IjsKICAgIHJlcXVpcmVfb25jZSBBQlNQQVRIIC4gJ3dwLWFkbWluL2luY2x1ZGVzL3VwZ3JhZGUucGhwJzsKICAgIGRiRGVsdGEoICRzcWwgKTsKfQphZGRfYWN0aW9uKCAncGx1Z2luc19sb2FkZWQnLCAndm0yX2NyZWF0ZV9zb2ZpYV9rbm93bGVkZ2VfdGFibGUnLCA2ICk7CgovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKLy8gU09GSUEgQVVUT01BVElPTiBSVUxFUyDigJQgRmFzZSA0IEVuZ2luZQovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKCmZ1bmN0aW9uIHZtMl9jcmVhdGVfc29maWFfcnVsZXNfdGFibGUoKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdCAgID0gJHdwZGItPnByZWZpeCAuICd2bTJfc29maWFfcnVsZXMnOwogICAgJHNxbCA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAkdCAoCiAgICAgIGlkICAgICAgICAgICAgICBiaWdpbnQoMjApICAgTk9UIE5VTEwgQVVUT19JTkNSRU1FTlQsCiAgICAgIG5hbWUgICAgICAgICAgICB2YXJjaGFyKDI1NSkgTk9UIE5VTEwsCiAgICAgIGljb24gICAgICAgICAgICB2YXJjaGFyKDIwKSAgTk9UIE5VTEwgREVGQVVMVCAn8J+klicsCiAgICAgIGVuYWJsZWQgICAgICAgICB0aW55aW50KDEpICAgTk9UIE5VTEwgREVGQVVMVCAxLAogICAgICBjb25kaXRpb25zICAgICAgbG9uZ3RleHQgICAgIE5PVCBOVUxMLAogICAgICBkZWxheV9ob3VycyAgICAgaW50ICAgICAgICAgIE5PVCBOVUxMIERFRkFVTFQgMCwKICAgICAgY29vbGRvd25faG91cnMgIGludCAgICAgICAgICBOT1QgTlVMTCBERUZBVUxUIDQ4LAogICAgICBhY3Rpb25fY2hhbm5lbCAgdmFyY2hhcig2MCkgIE5PVCBOVUxMIERFRkFVTFQgJ3phcGlfNzU1MScsCiAgICAgIGFjdGlvbl9tZXNzYWdlICBsb25ndGV4dCAgICAgTk9UIE5VTEwgREVGQVVMVCAnJywKICAgICAgY3JlYXRlZF9hdCAgICAgIGRhdGV0aW1lICAgICBOT1QgTlVMTCBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QLAogICAgICBQUklNQVJZIEtFWSAoaWQpCiAgICApIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPXV0ZjhtYjQ7IjsKICAgIHJlcXVpcmVfb25jZSBBQlNQQVRIIC4gJ3dwLWFkbWluL2luY2x1ZGVzL3VwZ3JhZGUucGhwJzsKICAgIGRiRGVsdGEoICRzcWwgKTsKICAgICRjbnQgPSAoaW50KSAkd3BkYi0+Z2V0X3ZhciggIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0IiApOwogICAgaWYgKCAkY250ID09PSAwICkgdm0yX3NvZmlhX3NlZWRfcnVsZXMoKTsKfQphZGRfYWN0aW9uKCAncGx1Z2luc19sb2FkZWQnLCAndm0yX2NyZWF0ZV9zb2ZpYV9ydWxlc190YWJsZScsIDggKTsKCmZ1bmN0aW9uIHZtMl9zb2ZpYV9zZWVkX3J1bGVzKCkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJHQgID0gJHdwZGItPnByZWZpeCAuICd2bTJfc29maWFfcnVsZXMnOwogICAgJGNoID0gZ2V0X29wdGlvbiggJ3ZtMl9hdXRvX2FxdWVjZXJfY2hhbm5lbCcsICd3YWJhXzUwMzknICk7CiAgICAkcnVsZXMgPSBbCiAgICAgICAgWwogICAgICAgICAgICAnbmFtZScgICAgICAgICAgID0+ICdJbnRlbsOnw6NvIEFsdGEgKyBTZW0gY29tcHJhJywKICAgICAgICAgICAgJ2ljb24nICAgICAgICAgICA9PiAn8J+OrycsCiAgICAgICAgICAgICdlbmFibGVkJyAgICAgICAgPT4gMSwKICAgICAgICAgICAgJ2NvbmRpdGlvbnMnICAgICA9PiBqc29uX2VuY29kZShbCiAgICAgICAgICAgICAgICBbJ2ZpZWxkJz0+J3VyZ2VuY2lhJywnb3AnPT4nZXEnLCd2YWx1ZSc9PidhbHRhJ10sCiAgICAgICAgICAgICAgICBbJ2ZpZWxkJz0+J2NvbnZlcnRlZCcsJ29wJz0+J2VxJywndmFsdWUnPT4nMCddLAogICAgICAgICAgICAgICAgWydmaWVsZCc9Pid3YV9jYXB0dXJhZG8nLCdvcCc9PidlcScsJ3ZhbHVlJz0+JzEnXSwKICAgICAgICAgICAgICAgIFsnZmllbGQnPT4nc2Vzc2lvbl9hZ2VfaG91cnMnLCdvcCc9PidndGUnLCd2YWx1ZSc9PicyNCddLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgJ2RlbGF5X2hvdXJzJyAgICA9PiAyNCwKICAgICAgICAgICAgJ2Nvb2xkb3duX2hvdXJzJyA9PiA0OCwKICAgICAgICAgICAgJ2FjdGlvbl9jaGFubmVsJyA9PiAkY2gsCiAgICAgICAgICAgICdhY3Rpb25fbWVzc2FnZScgPT4gIk9pIHtub21lfSEg8J+RiyBTb2ZJQSBhcXVpIGRhIFZpdmFNYWlzIVxuXG5WaSBxdWUgdm9jw6ogZXN0YXZhIHBlc3F1aXNhbmRvIGF0cmHDp8O1ZXMgcGFyYSBzZXUgZXZlbnRvIGUgcXVlcmlhIGdhcmFudGlyIHF1ZSBlbmNvbnRyb3UgdHVkbyBjZXJ0byEg8J+OiVxuXG5UZW1vcyBvcMOnw7VlcyBpbmNyw612ZWlzIGRlIHtjYXRlZ29yaWF9IHBlcmZlaXRhcyBwYXJhIG8gc2V1IGV2ZW50by4gUG9zc28gdGUgZW52aWFyIG5vc3NvIHBvcnRmw7NsaW8gYWdvcmE/IPCfmIoiLAogICAgICAgIF0sCiAgICAgICAgWwogICAgICAgICAgICAnbmFtZScgICAgICAgICAgID0+ICdUZW0gZGF0YSArIFVyZ8OqbmNpYSBhbHRhJywKICAgICAgICAgICAgJ2ljb24nICAgICAgICAgICA9PiAn8J+ThScsCiAgICAgICAgICAgICdlbmFibGVkJyAgICAgICAgPT4gMSwKICAgICAgICAgICAgJ2NvbmRpdGlvbnMnICAgICA9PiBqc29uX2VuY29kZShbCiAgICAgICAgICAgICAgICBbJ2ZpZWxkJz0+J2RhdGFfZXZlbnRvX3N0cicsJ29wJz0+J25vdF9lbXB0eScsJ3ZhbHVlJz0+JyddLAogICAgICAgICAgICAgICAgWydmaWVsZCc9PidkYXlzX3VudGlsX2V2ZW50Jywnb3AnPT4nbHRlJywndmFsdWUnPT4nMzAnXSwKICAgICAgICAgICAgICAgIFsnZmllbGQnPT4ndXJnZW5jaWEnLCdvcCc9PidlcScsJ3ZhbHVlJz0+J2FsdGEnXSwKICAgICAgICAgICAgICAgIFsnZmllbGQnPT4nd2FfY2FwdHVyYWRvJywnb3AnPT4nZXEnLCd2YWx1ZSc9PicxJ10sCiAgICAgICAgICAgICAgICBbJ2ZpZWxkJz0+J2NvbnZlcnRlZCcsJ29wJz0+J2VxJywndmFsdWUnPT4nMCddLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgJ2RlbGF5X2hvdXJzJyAgICA9PiAwLAogICAgICAgICAgICAnY29vbGRvd25faG91cnMnID0+IDQ4LAogICAgICAgICAgICAnYWN0aW9uX2NoYW5uZWwnID0+ICRjaCwKICAgICAgICAgICAgJ2FjdGlvbl9tZXNzYWdlJyA9PiAiT2kge25vbWV9ISDwn5qAIFNvZklBIGRhIFZpdmFNYWlzIGFxdWkhXG5cblNldSBldmVudG8gZXN0w6EgY2hlZ2FuZG8gYcOtIGUgbm9zc2EgYWdlbmRhIGVzdMOhIHF1YXNlIGNoZWlhISDwn5eT77iPXG5cbkNvbnNpZ28gZ2FyYW50aXIgc3VhIGF0cmHDp8OjbyBhZ29yYSBjb20gY29uZGnDp8OjbyBlc3BlY2lhbCDigJQgYW50ZXMgcXVlIGZlY2hlISDwn5SSXG5cbk1lIGNoYW1hIGUgcmVzb2x2ZW1vcyBlbSBtaW51dG9zISDwn5KsIiwKICAgICAgICBdLAogICAgICAgIFsKICAgICAgICAgICAgJ25hbWUnICAgICAgICAgICA9PiAnQ2xpY291ICJRdWVybyBlc3RlIiArIE7Do28gY29tcHJvdScsCiAgICAgICAgICAgICdpY29uJyAgICAgICAgICAgPT4gJ/Cfm5InLAogICAgICAgICAgICAnZW5hYmxlZCcgICAgICAgID0+IDEsCiAgICAgICAgICAgICdjb25kaXRpb25zJyAgICAgPT4ganNvbl9lbmNvZGUoWwogICAgICAgICAgICAgICAgWydmaWVsZCc9Pid3YV90cmlnZ2VyJywnb3AnPT4nZXEnLCd2YWx1ZSc9PidxdWVyb19lc3RlJ10sCiAgICAgICAgICAgICAgICBbJ2ZpZWxkJz0+J2NvbnZlcnRlZCcsJ29wJz0+J2VxJywndmFsdWUnPT4nMCddLAogICAgICAgICAgICAgICAgWydmaWVsZCc9Pid3YV9jYXB0dXJhZG8nLCdvcCc9PidlcScsJ3ZhbHVlJz0+JzEnXSwKICAgICAgICAgICAgICAgIFsnZmllbGQnPT4nc2Vzc2lvbl9hZ2VfaG91cnMnLCdvcCc9PidndGUnLCd2YWx1ZSc9Pic2J10sCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICAnZGVsYXlfaG91cnMnICAgID0+IDYsCiAgICAgICAgICAgICdjb29sZG93bl9ob3VycycgPT4gMjQsCiAgICAgICAgICAgICdhY3Rpb25fY2hhbm5lbCcgPT4gJGNoLAogICAgICAgICAgICAnYWN0aW9uX21lc3NhZ2UnID0+ICJPaSB7bm9tZX0hIPCfkYsgQXF1aSDDqSBhIFNvZklBIGRhIFZpdmFNYWlzLlxuXG5Wb2PDqiBzZSBpbnRlcmVzc291IHBvciBcIntwcm9kdXRvfVwiIGUgcXVlcmlhIHRlciBjZXJ0ZXphIHF1ZSB2b2PDqiBjb25zZWd1aXUgZmVjaGFyISDinIVcblxuQWluZGEgZXN0w6EgZGlzcG9uw612ZWwuIFF1ZXIgZ2FyYW50aXIgYWdvcmE/IFRlbSBjb25kacOnw7VlcyBlc3BlY2lhaXMgcGFyYSBmZWNoYXIgaG9qZSEg8J+OiSIsCiAgICAgICAgXSwKICAgIF07CiAgICBmb3JlYWNoICggJHJ1bGVzIGFzICRyICkgewogICAgICAgICR3cGRiLT5pbnNlcnQoICR0LCAkciApOwogICAgfQp9CgovLyDilIDilIAgQ29uZGl0aW9ucyBldmFsdWF0b3Ig4oCUIGJ1aWxkcyBTUUwgV0hFUkUgZm9yIHZtMl9zb2ZpYV9zZXNzaW9ucyBhbGlhcyBgc2Ag4pSA4pSACmZ1bmN0aW9uIHZtMl9zb2ZpYV9ldmFsX2NvbmRpdGlvbnMoIGFycmF5ICRjb25kaXRpb25zICkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJHBhcnRzID0gW107CiAgICBmb3JlYWNoICggJGNvbmRpdGlvbnMgYXMgJGMgKSB7CiAgICAgICAgJGZpZWxkID0gc2FuaXRpemVfa2V5KCAkY1snZmllbGQnXSA/PyAnJyApOwogICAgICAgICRvcCAgICA9IHNhbml0aXplX2tleSggJGNbJ29wJ10gICAgPz8gJ2VxJyApOwogICAgICAgICR2YWwgICA9ICRjWyd2YWx1ZSddID8/ICcnOwogICAgICAgIHN3aXRjaCAoICRmaWVsZCApIHsKICAgICAgICAgICAgY2FzZSAndXJnZW5jaWEnOgogICAgICAgICAgICAgICAgaWYgKCAkb3AgPT09ICdlcScgKQogICAgICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJHdwZGItPnByZXBhcmUoICJzLnVyZ2VuY2lhID0gJXMiLCAkdmFsICk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnY29udmVydGVkJzoKICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJHdwZGItPnByZXBhcmUoICJzLmNvbnZlcnRlZCA9ICVkIiwgKGludCkkdmFsICk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnd2FfY2FwdHVyYWRvJzoKICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gKGludCkkdmFsCiAgICAgICAgICAgICAgICAgICAgPyAiKCBzLndoYXRzYXBwIElTIE5PVCBOVUxMIEFORCBzLndoYXRzYXBwICE9ICcnICkiCiAgICAgICAgICAgICAgICAgICAgOiAiKCBzLndoYXRzYXBwIElTIE5VTEwgT1Igcy53aGF0c2FwcCA9ICcnICkiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3dhX3RyaWdnZXInOgogICAgICAgICAgICAgICAgaWYgKCAkb3AgPT09ICdlcScgKQogICAgICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJHdwZGItPnByZXBhcmUoICJzLndhX2NhcHR1cmVfdHJpZ2dlciA9ICVzIiwgJHZhbCApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2RhdGFfZXZlbnRvX3N0cic6CiAgICAgICAgICAgICAgICBpZiAoICRvcCA9PT0gJ25vdF9lbXB0eScgKQogICAgICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gIiggcy5kYXRhX2V2ZW50b19zdHIgSVMgTk9UIE5VTEwgQU5EIHMuZGF0YV9ldmVudG9fc3RyICE9ICcnICkiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2RheXNfdW50aWxfZXZlbnQnOgogICAgICAgICAgICAgICAgLy8gU3Vwb3J0YSBkZC9tbS95eXl5IGUgeXl5eS1tbS1kZAogICAgICAgICAgICAgICAgJGRhdGVfZXhwciA9ICJTVFJfVE9fREFURShDQVNFIFdIRU4gcy5kYXRhX2V2ZW50b19zdHIgUkVHRVhQICdeWzAtOV17Mn0vWzAtOV17Mn0vWzAtOV17NH0kJwogICAgICAgICAgICAgICAgICAgIFRIRU4gQ09OQ0FUKFNVQlNUUklORyhzLmRhdGFfZXZlbnRvX3N0ciw3LDQpLCctJyxTVUJTVFJJTkcocy5kYXRhX2V2ZW50b19zdHIsNCwyKSwnLScsU1VCU1RSSU5HKHMuZGF0YV9ldmVudG9fc3RyLDEsMikpCiAgICAgICAgICAgICAgICAgICAgRUxTRSBzLmRhdGFfZXZlbnRvX3N0ciBFTkQsICclJVktJSVtLSUlZCcpIjsKICAgICAgICAgICAgICAgIGlmICggJG9wID09PSAnbHRlJyApCiAgICAgICAgICAgICAgICAgICAgJHBhcnRzW10gPSAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgICAgICAgICAgICAgIiggcy5kYXRhX2V2ZW50b19zdHIgSVMgTk9UIE5VTEwgQU5EIHMuZGF0YV9ldmVudG9fc3RyICE9ICcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIERBVEVESUZGKHskZGF0ZV9leHByfSwgQ1VSREFURSgpKSA8PSAlZAogICAgICAgICAgICAgICAgICAgICAgICAgIEFORCBEQVRFRElGRih7JGRhdGVfZXhwcn0sIENVUkRBVEUoKSkgPj0gMCApIiwKICAgICAgICAgICAgICAgICAgICAgICAgKGludCkkdmFsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGVsc2VpZiAoICRvcCA9PT0gJ2d0ZScgKQogICAgICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJHdwZGItPnByZXBhcmUoICJEQVRFRElGRih7JGRhdGVfZXhwcn0sIENVUkRBVEUoKSkgPj0gJWQiLCAoaW50KSR2YWwgKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdzZXNzaW9uX2FnZV9ob3Vycyc6CiAgICAgICAgICAgICAgICBpZiAoICRvcCA9PT0gJ2d0ZScgKQogICAgICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJHdwZGItPnByZXBhcmUoICJUSU1FU1RBTVBESUZGKEhPVVIsIHMuc3RhcnRlZF9hdCwgTk9XKCkpID49ICVkIiwgKGludCkkdmFsICk7CiAgICAgICAgICAgICAgICBlbHNlaWYgKCAkb3AgPT09ICdsdGUnICkKICAgICAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICR3cGRiLT5wcmVwYXJlKCAiVElNRVNUQU1QRElGRihIT1VSLCBzLnN0YXJ0ZWRfYXQsIE5PVygpKSA8PSAlZCIsIChpbnQpJHZhbCApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2NhdGVnb3JpYSc6CiAgICAgICAgICAgICAgICBpZiAoICRvcCA9PT0gJ2VxJyApCiAgICAgICAgICAgICAgICAgICAgJHBhcnRzW10gPSAkd3BkYi0+cHJlcGFyZSggInMuY2F0ZWdvcmlhID0gJXMiLCAkdmFsICk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnbWVuc2FnZW5zX2NvdW50JzoKICAgICAgICAgICAgICAgIGlmICggJG9wID09PSAnZ3RlJyApCiAgICAgICAgICAgICAgICAgICAgJHBhcnRzW10gPSAkd3BkYi0+cHJlcGFyZSggInMubWVuc2FnZW5zX2NvdW50ID49ICVkIiwgKGludCkkdmFsICk7CiAgICAgICAgICAgICAgICBlbHNlaWYgKCAkb3AgPT09ICdsdGUnICkKICAgICAgICAgICAgICAgICAgICAkcGFydHNbXSA9ICR3cGRiLT5wcmVwYXJlKCAicy5tZW5zYWdlbnNfY291bnQgPD0gJWQiLCAoaW50KSR2YWwgKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBlbXB0eSgkcGFydHMpID8gJzE9MScgOiBpbXBsb2RlKCAnIEFORCAnLCAkcGFydHMgKTsKfQoKLy8g4pSA4pSAIEVuZ2luZSBjcm9uIOKAlCByb2RhIGEgY2FkYSBob3JhIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfc29maWFfYXV0b21hdGlvbnNfcnVuKCkgewogICAgaWYgKCBnZXRfb3B0aW9uKCd2bTJfa2lsbF9zd2l0Y2gnLCAnMCcpID09PSAnMScgKSByZXR1cm47CiAgICBpZiAoIHZtMl9pc19xdWlldF90aW1lKCkgKSByZXR1cm47CiAgICBpZiAoIHZtMl9kYWlseV9jYXBfcmVhY2hlZCgpICkgcmV0dXJuOwoKICAgIGdsb2JhbCAkd3BkYjsKICAgICRydWxlc190ICAgID0gJHdwZGItPnByZWZpeCAuICd2bTJfc29maWFfcnVsZXMnOwogICAgJHNlc3Npb25zX3QgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9zZXNzaW9ucyc7CgogICAgaWYgKCAkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAnJHJ1bGVzX3QnIikgIT09ICRydWxlc190ICkgcmV0dXJuOwoKICAgICRydWxlcyA9ICR3cGRiLT5nZXRfcmVzdWx0cyggIlNFTEVDVCAqIEZST00gJHJ1bGVzX3QgV0hFUkUgZW5hYmxlZCA9IDEgT1JERVIgQlkgaWQgQVNDIiApOwogICAgaWYgKCBlbXB0eSgkcnVsZXMpICkgcmV0dXJuOwoKICAgICRjaGFubmVscyAgID0gdm0yX2NoYW5uZWxzKCk7CiAgICAkbWF4X3dlZWtseSA9IChpbnQpIGdldF9vcHRpb24oICd2bTJfY29udGFjdF93ZWVrbHlfbGltaXQnLCAnMCcgKTsKICAgICR0b3RhbF9zZW50ID0gMDsKCiAgICBmb3JlYWNoICggJHJ1bGVzIGFzICRydWxlICkgewogICAgICAgICRydWxlX3R5cGUgID0gJ3NvZmlhX2F1dG9fJyAuICRydWxlLT5pZDsKICAgICAgICAkY29uZGl0aW9ucyA9IGpzb25fZGVjb2RlKCAkcnVsZS0+Y29uZGl0aW9ucywgdHJ1ZSApID86IFtdOwogICAgICAgICR3aGVyZSAgICAgID0gdm0yX3NvZmlhX2V2YWxfY29uZGl0aW9ucyggJGNvbmRpdGlvbnMgKTsKICAgICAgICAkZGVsYXlfaCAgICA9IG1heCggMCwgKGludCkkcnVsZS0+ZGVsYXlfaG91cnMgKTsKICAgICAgICAkY29vbGRvd25faCA9IG1heCggMSwgKGludCkkcnVsZS0+Y29vbGRvd25faG91cnMgKTsKICAgICAgICAkY2hfa2V5ICAgICA9ICRydWxlLT5hY3Rpb25fY2hhbm5lbCA/OiAnd2FiYV81MDM5JzsKICAgICAgICAkbXNnX3RwbCAgICA9ICRydWxlLT5hY3Rpb25fbWVzc2FnZTsKCiAgICAgICAgaWYgKCAhIGlzc2V0KCRjaGFubmVsc1skY2hfa2V5XSkgKSBjb250aW51ZTsKICAgICAgICAkaXNfd2FiYSA9ICggJGNoYW5uZWxzWyRjaF9rZXldWyd0eXBlJ10gPz8gJycgKSA9PT0gJ3dhYmEnOwoKICAgICAgICBpZiAoICRkZWxheV9oID4gMCApIHsKICAgICAgICAgICAgJHdoZXJlIC49ICR3cGRiLT5wcmVwYXJlKCAiIEFORCBUSU1FU1RBTVBESUZGKEhPVVIsIHMuc3RhcnRlZF9hdCwgTk9XKCkpID49ICVkIiwgJGRlbGF5X2ggKTsKICAgICAgICB9CiAgICAgICAgLy8gU29tZW50ZSBzZXNzw7VlcyBkb3Mgw7psdGltb3MgMzAgZGlhcwogICAgICAgICR3aGVyZSAuPSAiIEFORCBzLnN0YXJ0ZWRfYXQgPj0gREFURV9TVUIoTk9XKCksIElOVEVSVkFMIDMwIERBWSkiOwoKICAgICAgICAkc3FsID0gIlNFTEVDVCBzLndoYXRzYXBwLCBzLmNhdGVnb3JpYSwgcy5wcm9kdWN0X25hbWUsIHMucHJvZHVjdF9pZCwgcy51cmdlbmNpYSwgcy5kYXRhX2V2ZW50b19zdHIKICAgICAgICAgICAgICAgIEZST00geyRzZXNzaW9uc190fSBzCiAgICAgICAgICAgICAgICBXSEVSRSB7JHdoZXJlfQogICAgICAgICAgICAgICAgR1JPVVAgQlkgcy53aGF0c2FwcAogICAgICAgICAgICAgICAgTElNSVQgNTAiOwoKICAgICAgICAkc2Vzc2lvbnMgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoICRzcWwgKTsKICAgICAgICBpZiAoIGVtcHR5KCRzZXNzaW9ucykgKSBjb250aW51ZTsKCiAgICAgICAgZm9yZWFjaCAoICRzZXNzaW9ucyBhcyAkc2VzcyApIHsKICAgICAgICAgICAgJHBob25lID0gJHNlc3MtPndoYXRzYXBwOwogICAgICAgICAgICBpZiAoIGVtcHR5KCRwaG9uZSkgKSBjb250aW51ZTsKCiAgICAgICAgICAgIC8vIFBlci1ydWxlIGRlZHVwOiBudW5jYSBkaXNwYXJhciBhIG1lc21hIHJlZ3JhIGR1YXMgdmV6ZXMgcGFyYSBvIG1lc21vIG7Dum1lcm8KICAgICAgICAgICAgJGFscmVhZHkgPSAoaW50KSAkd3BkYi0+Z2V0X3ZhciggJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICAgICAiU0VMRUNUIENPVU5UKCopIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzIFdIRVJFIHBob25lID0gJXMgQU5EIG1vZHVsZSA9ICVzIiwKICAgICAgICAgICAgICAgICRwaG9uZSwgJHJ1bGVfdHlwZQogICAgICAgICAgICApICk7CiAgICAgICAgICAgIGlmICggJGFscmVhZHkgPiAwICkgY29udGludWU7CgogICAgICAgICAgICAvLyBDb29sZG93biBnbG9iYWwg4oCUIG7Do28gaW5jb21vZGFyIHF1ZW0gasOhIHJlY2ViZXUgbWVuc2FnZW0gcmVjZW50ZQogICAgICAgICAgICBpZiAoICEgdm0yX2Nhbl9zZW5kKCAkcGhvbmUsICRjb29sZG93bl9oLCAkbWF4X3dlZWtseSApICkgY29udGludWU7CgogICAgICAgICAgICAvLyBCdXNjYSBub21lIGRvIGNvbnRhdG8KICAgICAgICAgICAgJGNvbnRhY3QgPSAkd3BkYi0+Z2V0X3JvdyggJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICAgICAiU0VMRUNUIG5hbWUgRlJPTSB7JHdwZGItPnByZWZpeH12bTJfY29udGFjdHMgV0hFUkUgcGhvbmUgPSAlcyBMSU1JVCAxIiwKICAgICAgICAgICAgICAgICRwaG9uZQogICAgICAgICAgICApICk7CiAgICAgICAgICAgICRub21lID0gKCAkY29udGFjdCAmJiAkY29udGFjdC0+bmFtZSApID8gJGNvbnRhY3QtPm5hbWUgOiAnYW1pZ28nOwoKICAgICAgICAgICAgLy8gVVJMIGRvIHByb2R1dG8KICAgICAgICAgICAgJGxpbmtfcHJvZHV0byA9ICcnOwogICAgICAgICAgICBpZiAoICEgZW1wdHkoJHNlc3MtPnByb2R1Y3RfaWQpICkgewogICAgICAgICAgICAgICAgJGxpbmtfcHJvZHV0byA9IGdldF9wZXJtYWxpbmsoIChpbnQpJHNlc3MtPnByb2R1Y3RfaWQgKSA/OiAnJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gU3Vic3RpdHVpIHZhcmnDoXZlaXMKICAgICAgICAgICAgJG1zZyA9IHN0cl9yZXBsYWNlKAogICAgICAgICAgICAgICAgWyAne25vbWV9JywgJ3tjYXRlZ29yaWF9JywgJ3twcm9kdXRvfScsICd7bGlua19wcm9kdXRvfScsICd7ZGF0YV9ldmVudG99JyBdLAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICRub21lLAogICAgICAgICAgICAgICAgICAgICRzZXNzLT5jYXRlZ29yaWEgPzogJ2FuaW1hw6fDo28nLAogICAgICAgICAgICAgICAgICAgICRzZXNzLT5wcm9kdWN0X25hbWUgPzogJ2EgYXRyYcOnw6NvJywKICAgICAgICAgICAgICAgICAgICAkbGlua19wcm9kdXRvLAogICAgICAgICAgICAgICAgICAgICRzZXNzLT5kYXRhX2V2ZW50b19zdHIgPzogJycsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgJG1zZ190cGwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIC8vIEVudmlhCiAgICAgICAgICAgICRvayA9IGZhbHNlOwogICAgICAgICAgICBpZiAoICRpc193YWJhICkgewogICAgICAgICAgICAgICAgJG9rID0gdm0yX3NvZmlhX3NlbmRfd2FiYV90ZXh0KCAkY2hfa2V5LCAkcGhvbmUsICRtc2csICRjaGFubmVscyApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG9rID0gdm0yX3NlbmRfemFwaSggJGNoX2tleSwgJHBob25lLCAkbXNnICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJG9rICkgewogICAgICAgICAgICAgICAgdm0yX3JlY29yZF9zZW5kKCAkcGhvbmUsICRydWxlX3R5cGUsICRjaF9rZXkgKTsKICAgICAgICAgICAgICAgIHZtMl9sb2coICJzb2ZpYV9hdXRvIHJ1bGUjeyRydWxlLT5pZH3ihpJ7JHBob25lfSAoeyRydWxlLT5uYW1lfSkiLCAnaW5mbycgKTsKICAgICAgICAgICAgICAgICR0b3RhbF9zZW50Kys7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggdm0yX2RhaWx5X2NhcF9yZWFjaGVkKCkgKSBicmVhayAyOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICR0b3RhbF9zZW50ID4gMCApCiAgICAgICAgdm0yX2xvZyggInNvZmlhX2F1dG9tYXRpb25zX2Nyb246IHskdG90YWxfc2VudH0gZW52aWFkb3MiLCAnaW5mbycgKTsKfQovLyB2MS41LjExNyDigJQgTW90b3IgVW5pZmljYWRvIGRlIEFxdWVjaW1lbnRvCi8vIEV4ZWN1dGEgbcOzZHVsb3MgcG9yIHByaW9yaWRhZGU6IEhPVCgwKSDihpIgQ2Fkw6puY2lhKDEtNCkg4oaSIFBvckRhdGEoMS0zKSDihpIgU0UvRU5Uw4NPKDUpCi8vIERlZHVwIGNyb3NzLW3Ds2R1bG8gdmlhIHZtMl9jYW5fc2VuZCgpICsgdm0yX3NlbmRzIHRhYmxlCmZ1bmN0aW9uIHZtMl93YXJtdXBfdW5pZmllZF9ydW4oKSB7CiAgICBpZiAoIGdldF9vcHRpb24oJ3ZtMl9raWxsX3N3aXRjaCcsICcwJykgPT09ICcxJyApIHsgdm0yX2xvZygnd2FybXVwX3VuaWZpZWQ6IGtpbGwgc3dpdGNoIE9OJywnaW5mbycpOyByZXR1cm47IH0KICAgIGlmICggdm0yX2lzX3F1aWV0X3RpbWUoKSApIHsgdm0yX2xvZygnd2FybXVwX3VuaWZpZWQ6IHF1aWV0IGhvdXJzJywnaW5mbycpOyByZXR1cm47IH0KICAgIGlmICggdm0yX2RhaWx5X2NhcF9yZWFjaGVkKCkgKSB7IHZtMl9sb2coJ3dhcm11cF91bmlmaWVkOiBjYXAgZGnDoXJpbyBhdGluZ2lkbycsJ2luZm8nKTsgcmV0dXJuOyB9CgogICAgdm0yX2xvZygnd2FybXVwX3VuaWZpZWQ6IGluaWNpYW5kbyBleGVjdcOnw6NvIHBvciBwcmlvcmlkYWRlJywnaW5mbycpOwoKICAgIC8vIFt2MS41LjE2M10gUG9yIERhdGEgcm9kYSBQUklNRUlSTyDigJQgZ2lmdCBjYXJkICJFc3RhIHNlbWFuYSIgdGVtIHByaW9yaWRhZGUgc29icmUgSE9UIGdlbsOpcmljbwogICAgLy8gRXZpdGEgcXVlIEhPVCBjb25zdW1hIG8gc2xvdCBzZW1hbmFsIGRvcyBsZWFkcyBjb20gZXZlbnRvIHByw7N4aW1vIGFudGVzIGRvIGdpZnQgY2FyZCBzZXIgZW52aWFkbwogICAgdm0yX2J5ZGF0ZV9ydW4oKTsKICAgIGlmICggdm0yX2RhaWx5X2NhcF9yZWFjaGVkKCkgKSByZXR1cm47CgogICAgLy8gUHJpb3JpZGFkZSAwOiBIT1QgKGFww7NzIGJ5ZGF0ZSwgcGFyYSBuw6NvIGJsb3F1ZWFyIGdpZnQgY2FyZCBwb3Igd2Vla2x5X2xpbWl0KQogICAgdm0yX2hvdF9ydW4oKTsKICAgIGlmICggdm0yX2RhaWx5X2NhcF9yZWFjaGVkKCkgKSByZXR1cm47CgogICAgLy8gUHJpb3JpZGFkZSAxLTQ6IENhZMOqbmNpYSBEK1ggKGF1dG8tYXF1ZWNlciBwb3Igc2NvcmUpCiAgICB2bTJfYXV0b19hcXVlY2VyX3J1bigpOwogICAgaWYgKCB2bTJfZGFpbHlfY2FwX3JlYWNoZWQoKSApIHJldHVybjsKCiAgICAvLyBQcmlvcmlkYWRlIDU6IFNFL0VOVMODTyAoU29mSUEgcnVsZXMpCiAgICB2bTJfc29maWFfYXV0b21hdGlvbnNfcnVuKCk7CgogICAgdm0yX2xvZygnd2FybXVwX3VuaWZpZWQ6IGNpY2xvIGNvbXBsZXRvJywnaW5mbycpOwp9CmFkZF9hY3Rpb24oICd2bTJfc29maWFfYXV0b21hdGlvbnNfY3JvbicsICd2bTJfd2FybXVwX3VuaWZpZWRfcnVuJyApOwoKLy8g4pSA4pSAIEFKQVg6IERpc3BhcmFyIHJ1bm5lciBtYW51YWxtZW50ZSDilIDilIAKYWRkX2FjdGlvbignd3BfYWpheF92bTJfcnVuX3dhcm11cF9ub3cnLCBmdW5jdGlvbigpIHsKICAgIGNoZWNrX2FqYXhfcmVmZXJlcigndm0yX2FkbWluX25vbmNlJywgJ25vbmNlJyk7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSApIHdwX3NlbmRfanNvbl9lcnJvcignVW5hdXRob3JpemVkJyk7CiAgICB2bTJfbG9nKCd3YXJtdXBfdW5pZmllZDogRElTUEFSTyBNQU5VQUwgdmlhIFVJIChpZ25vcmEgcXVpZXQgaG91cnMpJywgJ2luZm8nKTsKICAgIC8vIERpc3Bhcm8gbWFudWFsIGlnbm9yYSBxdWlldCBob3VycyDigJQgc2V0YSB0cmFuc2llbnQgcG9yIDYwcwogICAgc2V0X3RyYW5zaWVudCgndm0yX2J5cGFzc19xdWlldCcsIDEsIDYwKTsKICAgIGlmICggZ2V0X29wdGlvbigndm0yX2tpbGxfc3dpdGNoJywgJzAnKSAhPT0gJzEnICkgewogICAgICAgIHZtMl93YXJtdXBfdW5pZmllZF9ydW4oKTsKICAgICAgICB2bTJfbG9nKCd3YXJtdXBfdW5pZmllZDogY2ljbG8gbWFudWFsIGNvbXBsZXRvJywgJ2luZm8nKTsKICAgIH0gZWxzZSB7CiAgICAgICAgdm0yX2xvZygnd2FybXVwX3VuaWZpZWQ6IGtpbGwgc3dpdGNoIGdsb2JhbCBPTiDigJQgYWJvcnRhZG8nLCAnd2FybmluZycpOwogICAgfQogICAgZGVsZXRlX3RyYW5zaWVudCgndm0yX2J5cGFzc19xdWlldCcpOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoJ1J1bm5lciBleGVjdXRhZG8uJyk7Cn0pOwoKLy8gSGVscGVyOiBlbnZpbyBXQUJBIHRleHRvIGxpdnJlIChkZW50cm8gZGEgamFuZWxhIGRlIDI0aCkKZnVuY3Rpb24gdm0yX3NvZmlhX3NlbmRfd2FiYV90ZXh0KCAkY2hfa2V5LCAkcGhvbmUsICR0ZXh0LCAkY2hhbm5lbHMgPSBudWxsICkgewogICAgaWYgKCAkY2hhbm5lbHMgPT09IG51bGwgKSAkY2hhbm5lbHMgPSB2bTJfY2hhbm5lbHMoKTsKICAgIGlmICggISBpc3NldCgkY2hhbm5lbHNbJGNoX2tleV0pICkgcmV0dXJuIGZhbHNlOwogICAgJGNoICAgICAgID0gJGNoYW5uZWxzWyRjaF9rZXldOwogICAgJHBob25lX2lkID0gJGNoWydpbnN0YW5jZSddID8/ICcnOwogICAgJHRva2VuICAgID0gJGNoWyd0b2tlbiddICAgID8/ICcnOwogICAgaWYgKCAhICRwaG9uZV9pZCB8fCAhICR0b2tlbiApIHJldHVybiBmYWxzZTsKCiAgICAkcGhvbmVfY2xlYW4gPSBwcmVnX3JlcGxhY2UoJy9cRC8nLCAnJywgJHBob25lKTsKICAgIGlmICggc3RybGVuKCRwaG9uZV9jbGVhbikgPD0gMTEgKSAkcGhvbmVfY2xlYW4gPSAnNTUnIC4gJHBob25lX2NsZWFuOwoKICAgICRib2R5ID0gd3BfanNvbl9lbmNvZGUoWwogICAgICAgICdtZXNzYWdpbmdfcHJvZHVjdCcgPT4gJ3doYXRzYXBwJywKICAgICAgICAndG8nICAgICAgICAgICAgICAgID0+ICRwaG9uZV9jbGVhbiwKICAgICAgICAndHlwZScgICAgICAgICAgICAgID0+ICd0ZXh0JywKICAgICAgICAndGV4dCcgICAgICAgICAgICAgID0+IFsgJ3ByZXZpZXdfdXJsJyA9PiBmYWxzZSwgJ2JvZHknID0+ICR0ZXh0IF0sCiAgICBdKTsKCiAgICAkcmVzcG9uc2UgPSB3cF9yZW1vdGVfcG9zdCggImh0dHBzOi8vZ3JhcGguZmFjZWJvb2suY29tL3YyMS4wL3skcGhvbmVfaWR9L21lc3NhZ2VzIiwgWwogICAgICAgICdoZWFkZXJzJyA9PiBbCiAgICAgICAgICAgICdBdXRob3JpemF0aW9uJyA9PiAnQmVhcmVyICcgLiAkdG9rZW4sCiAgICAgICAgICAgICdDb250ZW50LVR5cGUnICA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgXSwKICAgICAgICAnYm9keScgICAgPT4gJGJvZHksCiAgICAgICAgJ3RpbWVvdXQnID0+IDE1LAogICAgXSApOwoKICAgIGlmICggaXNfd3BfZXJyb3IoJHJlc3BvbnNlKSApIHJldHVybiBmYWxzZTsKICAgICRjb2RlID0gd3BfcmVtb3RlX3JldHJpZXZlX3Jlc3BvbnNlX2NvZGUoJHJlc3BvbnNlKTsKICAgIHJldHVybiAkY29kZSA9PT0gMjAwOwp9CgovLyDilIDilIAgQUpBWDogQXV0b21hw6fDtWVzIFNvZklBIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKLy8gVG9nZ2xlIHJ1bGUgb24vb2ZmCmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX3NvZmlhX3RvZ2dsZV9ydWxlJywgZnVuY3Rpb24oKSB7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSApIHdwX3NlbmRfanNvbl9lcnJvcigndW5hdXRob3JpemVkJyk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkaWQgICAgICA9IChpbnQpKCAkX1BPU1RbJ3J1bGVfaWQnXSA/PyAwICk7CiAgICAkZW5hYmxlZCA9IChpbnQpKCAkX1BPU1RbJ2VuYWJsZWQnXSA/PyAwICk7CiAgICAkdCAgICAgICA9ICR3cGRiLT5wcmVmaXggLiAndm0yX3NvZmlhX3J1bGVzJzsKICAgICR3cGRiLT51cGRhdGUoICR0LCBbJ2VuYWJsZWQnID0+ICRlbmFibGVkXSwgWydpZCcgPT4gJGlkXSwgWyclZCddLCBbJyVkJ10gKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnaWQnID0+ICRpZCwgJ2VuYWJsZWQnID0+ICRlbmFibGVkXSk7Cn0pOwoKLy8gR2V0IHJ1bGUgZm9yIGVkaXRpbmcKYWRkX2FjdGlvbignd3BfYWpheF92bTJfc29maWFfZ2V0X3J1bGUnLCBmdW5jdGlvbigpIHsKICAgIGlmICggISBjdXJyZW50X3VzZXJfY2FuKCdtYW5hZ2Vfb3B0aW9ucycpICkgd3Bfc2VuZF9qc29uX2Vycm9yKCd1bmF1dGhvcml6ZWQnKTsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRpZCAgID0gKGludCkoICRfR0VUWydydWxlX2lkJ10gPz8gMCApOwogICAgJHQgICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9ydWxlcyc7CiAgICAkcnVsZSA9ICR3cGRiLT5nZXRfcm93KCAkd3BkYi0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSAkdCBXSEVSRSBpZD0lZCIsICRpZCkgKTsKICAgIGlmICggISAkcnVsZSApIHdwX3NlbmRfanNvbl9lcnJvcignbm90X2ZvdW5kJyk7CiAgICAkcnVsZS0+Y29uZGl0aW9ucyA9IGpzb25fZGVjb2RlKCRydWxlLT5jb25kaXRpb25zLCB0cnVlKSA/OiBbXTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCRydWxlKTsKfSk7CgovLyBTYXZlIHJ1bGUgKGNyZWF0ZSBvciB1cGRhdGUpCmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX3NvZmlhX3NhdmVfcnVsZScsIGZ1bmN0aW9uKCkgewogICAgaWYgKCAhIGN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykgKSB3cF9zZW5kX2pzb25fZXJyb3IoJ3VuYXV0aG9yaXplZCcpOwogICAgZ2xvYmFsICR3cGRiOwogICAgJHQgICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9ydWxlcyc7CiAgICAkaWQgICA9IChpbnQpKCAkX1BPU1RbJ3J1bGVfaWQnXSA/PyAwICk7CiAgICAkY29uZF9yYXcgPSBzdHJpcHNsYXNoZXMoJF9QT1NUWydjb25kaXRpb25zJ10gPz8gJ1tdJyk7CiAgICAkY29uZCA9IGpzb25fZGVjb2RlKCRjb25kX3JhdywgdHJ1ZSk7CiAgICBpZiAoICEgaXNfYXJyYXkoJGNvbmQpICkgJGNvbmQgPSBbXTsKICAgICRkYXRhID0gWwogICAgICAgICduYW1lJyAgICAgICAgICAgPT4gc2FuaXRpemVfdGV4dF9maWVsZCgkX1BPU1RbJ25hbWUnXSA/PyAnJyksCiAgICAgICAgJ2ljb24nICAgICAgICAgICA9PiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRfUE9TVFsnaWNvbiddID8/ICfwn6SWJyksCiAgICAgICAgJ2VuYWJsZWQnICAgICAgICA9PiAoaW50KSgkX1BPU1RbJ2VuYWJsZWQnXSA/PyAxKSwKICAgICAgICAnY29uZGl0aW9ucycgICAgID0+IGpzb25fZW5jb2RlKCRjb25kKSwKICAgICAgICAnZGVsYXlfaG91cnMnICAgID0+IChpbnQpKCRfUE9TVFsnZGVsYXlfaG91cnMnXSA/PyAwKSwKICAgICAgICAnY29vbGRvd25faG91cnMnID0+IG1heCgxLCAoaW50KSgkX1BPU1RbJ2Nvb2xkb3duX2hvdXJzJ10gPz8gNDgpKSwKICAgICAgICAnYWN0aW9uX2NoYW5uZWwnID0+IHNhbml0aXplX2tleSgkX1BPU1RbJ2FjdGlvbl9jaGFubmVsJ10gPz8gJ3dhYmFfNTAzOScpLAogICAgICAgICdhY3Rpb25fbWVzc2FnZScgPT4gc2FuaXRpemVfdGV4dGFyZWFfZmllbGQoc3RyaXBzbGFzaGVzKCRfUE9TVFsnYWN0aW9uX21lc3NhZ2UnXSA/PyAnJykpLAogICAgXTsKICAgIGlmICggJGlkID4gMCApIHsKICAgICAgICAkd3BkYi0+dXBkYXRlKCR0LCAkZGF0YSwgWydpZCcgPT4gJGlkXSk7CiAgICAgICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoWydpZCcgPT4gJGlkLCAnYWN0aW9uJyA9PiAndXBkYXRlZCddKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHdwZGItPmluc2VydCgkdCwgJGRhdGEpOwogICAgICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnaWQnID0+ICR3cGRiLT5pbnNlcnRfaWQsICdhY3Rpb24nID0+ICdjcmVhdGVkJ10pOwogICAgfQp9KTsKCi8vIERlbGV0ZSBydWxlCmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX3NvZmlhX2RlbGV0ZV9ydWxlJywgZnVuY3Rpb24oKSB7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbignbWFuYWdlX29wdGlvbnMnKSApIHdwX3NlbmRfanNvbl9lcnJvcigndW5hdXRob3JpemVkJyk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkaWQgPSAoaW50KSggJF9QT1NUWydydWxlX2lkJ10gPz8gMCApOwogICAgJHQgID0gJHdwZGItPnByZWZpeCAuICd2bTJfc29maWFfcnVsZXMnOwogICAgJHdwZGItPmRlbGV0ZSgkdCwgWydpZCcgPT4gJGlkXSwgWyclZCddKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsnaWQnID0+ICRpZF0pOwp9KTsKCmZ1bmN0aW9uIHZtMl9zb2ZpYV9rYl9zY3JhcGVfdXJsKCAkdXJsICkgewogICAgLy8gR29vZ2xlIERvY3Mg4oaSIGV4cG9ydGFyIGNvbW8gdGV4dG8gcGxhbm8KICAgIGlmICggcHJlZ19tYXRjaCggJyNkb2NzXC5nb29nbGVcLmNvbS9kb2N1bWVudC9kLyhbYS16QS1aMC05Xy1dKykjJywgJHVybCwgJG0gKSApIHsKICAgICAgICAkZXhwb3J0ID0gJ2h0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvJyAuICRtWzFdIC4gJy9leHBvcnQ/Zm9ybWF0PXR4dCc7CiAgICAgICAgJHJlc3AgICA9IHdwX3JlbW90ZV9nZXQoICRleHBvcnQsIGFycmF5KCAndGltZW91dCcgPT4gMjAsICdzc2x2ZXJpZnknID0+IGZhbHNlICkgKTsKICAgICAgICBpZiAoICEgaXNfd3BfZXJyb3IoICRyZXNwICkgJiYgd3BfcmVtb3RlX3JldHJpZXZlX3Jlc3BvbnNlX2NvZGUoICRyZXNwICkgPT09IDIwMCApIHsKICAgICAgICAgICAgJHRleHQgPSB3cF9yZW1vdGVfcmV0cmlldmVfYm9keSggJHJlc3AgKTsKICAgICAgICAgICAgJHRleHQgPSBwcmVnX3JlcGxhY2UoICcvXHMrLycsICcgJywgJHRleHQgKTsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCAndGl0dWxvJyA9PiAnR29vZ2xlIERvYyBpbXBvcnRhZG8nLCAnY29udGV1ZG8nID0+IG1iX3N1YnN0ciggdHJpbSggJHRleHQgKSwgMCwgMTUwMDAgKSApOwogICAgICAgIH0KICAgIH0KICAgIC8vIEdvb2dsZSBEcml2ZSBmaWxlIChub3QgRG9jKSDigJQgZHJpdmUuZ29vZ2xlLmNvbS9maWxlL2QvSUQKICAgIGlmICggcHJlZ19tYXRjaCggJyNkcml2ZVwuZ29vZ2xlXC5jb20vZmlsZS9kLyhbYS16QS1aMC05Xy1dKykjJywgJHVybCwgJG0gKSApIHsKICAgICAgICByZXR1cm4gYXJyYXkoICdlcnJvJyA9PiAnQXJxdWl2b3MgZG8gR29vZ2xlIERyaXZlIHByZWNpc2FtIHNlciBjb252ZXJ0aWRvcyBwYXJhIEdvb2dsZSBEb2NzIG91IHRlciBvIHRleHRvIGNvbGFkbyBkaXJldGFtZW50ZS4gRGljYTogYWJyYSBvIGFycXVpdm8sIGNvcGllIG8gdGV4dG8gZSB1c2UgbyB0aXBvICJUZXh0byBsaXZyZSIuJyApOwogICAgfQogICAgLy8gVVJMIG5vcm1hbAogICAgJHJlc3AgPSB3cF9yZW1vdGVfZ2V0KCAkdXJsLCBhcnJheSgKICAgICAgICAndGltZW91dCcgICA9PiAyMCwKICAgICAgICAnc3NsdmVyaWZ5JyA9PiBmYWxzZSwKICAgICAgICAnaGVhZGVycycgICA9PiBhcnJheSggJ1VzZXItQWdlbnQnID0+ICdNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgVml2YU1haXNCb3QvMS4wKScgKSwKICAgICkgKTsKICAgIGlmICggaXNfd3BfZXJyb3IoICRyZXNwICkgKSB7CiAgICAgICAgcmV0dXJuIGFycmF5KCAnZXJybycgPT4gJ0Vycm8gYW8gYWNlc3NhciBVUkw6ICcgLiAkcmVzcC0+Z2V0X2Vycm9yX21lc3NhZ2UoKSApOwogICAgfQogICAgJGNvZGUgPSB3cF9yZW1vdGVfcmV0cmlldmVfcmVzcG9uc2VfY29kZSggJHJlc3AgKTsKICAgIGlmICggJGNvZGUgIT09IDIwMCApIHsKICAgICAgICByZXR1cm4gYXJyYXkoICdlcnJvJyA9PiAiVVJMIHJldG9ybm91IEhUVFAgeyRjb2RlfSDigJQgdmVyaWZpcXVlIHNlIMOpIHDDumJsaWNhLiIgKTsKICAgIH0KICAgICRodG1sICA9IHdwX3JlbW90ZV9yZXRyaWV2ZV9ib2R5KCAkcmVzcCApOwogICAgJHRpdHVsbyA9ICcnOwogICAgaWYgKCBwcmVnX21hdGNoKCAnIzx0aXRsZVtePl0qPiguKj8pPC90aXRsZT4jc2knLCAkaHRtbCwgJHRtICkgKSB7CiAgICAgICAgJHRpdHVsbyA9IGh0bWxfZW50aXR5X2RlY29kZSggc3RyaXBfdGFncyggJHRtWzFdICksIEVOVF9RVU9URVMsICdVVEYtOCcgKTsKICAgICAgICAkdGl0dWxvID0gdHJpbSggJHRpdHVsbyApOwogICAgfQogICAgLy8gUmVtb3ZlIHNjcmlwdC9zdHlsZS9uYXYvZm9vdGVyCiAgICAkaHRtbCA9IHByZWdfcmVwbGFjZSggJyM8KHNjcmlwdHxzdHlsZXxuYXZ8Zm9vdGVyfGhlYWRlcnxhc2lkZSlbXj5dKj4uKj88L1wxPiNzaScsICcgJywgJGh0bWwgKTsKICAgICR0ZXh0ID0gc3RyaXBfdGFncyggJGh0bWwgKTsKICAgICR0ZXh0ID0gaHRtbF9lbnRpdHlfZGVjb2RlKCAkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04JyApOwogICAgJHRleHQgPSBwcmVnX3JlcGxhY2UoICcvXHMrLycsICcgJywgJHRleHQgKTsKICAgICR0ZXh0ID0gdHJpbSggJHRleHQgKTsKICAgIHJldHVybiBhcnJheSgKICAgICAgICAndGl0dWxvJyAgID0+ICR0aXR1bG8gPzogKCBwYXJzZV91cmwoICR1cmwsIFBIUF9VUkxfSE9TVCApID86ICR1cmwgKSwKICAgICAgICAnY29udGV1ZG8nID0+IG1iX3N1YnN0ciggJHRleHQsIDAsIDE1MDAwICksCiAgICApOwp9CgovLyBBSkFYOiBzYWx2YXIgaXRlbQphZGRfYWN0aW9uKCAnd3BfYWpheF92bTJfc29maWFfa2Jfc2F2ZScsICd2bTJfc29maWFfa2Jfc2F2ZV9oYW5kbGVyJyApOwoKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIFBJUEVMSU5FIFRBQiDigJQgRnVuaWwgdmlzdWFsIEZvbnRlcyDihpIgU2VnbWVudG9zIOKGkiBBdXRvbWHDp8O1ZXMKLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmZ1bmN0aW9uIHZtMl9yZW5kZXJfcGlwZWxpbmVfdGFiKCkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJHRhYmxlID0gJHdwZGItPnByZWZpeCAuICd2bTJfY29udGFjdHMnOwogICAgJHNlbmRzID0gJHdwZGItPnByZWZpeCAuICd2bTJfc2VuZHMnOwoKICAgIC8vIOKUgOKUgCBGb250ZXMg4pSA4pSACiAgICAkdG90YWxfY29udGFjdHMgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUiKTsKICAgICRjbnRfcGVkaWRvICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgb3JpZ2VucyBMSUtFICclXCJwZWRpZG9cIiUnIik7CiAgICAkY250X3NvZmlhICAgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIG9yaWdlbnMgTElLRSAnJVwic29maWFcIiUnIik7CiAgICAkY250X2dhbGVyaWEgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIG9yaWdlbnMgTElLRSAnJVwiZ2FsZXJpYVwiJSciKTsKICAgICRjbnRfY2FycmluaG8gPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgb3JpZ2VucyBMSUtFICclXCJjYXJyaW5ob1wiJSciKTsKICAgICRjbnRfa29tbW8gICAgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgb3JpZ2VucyBMSUtFICclXCJrb21tb1wiJSciKTsKCiAgICAvLyDilIDilIAgU2VnbWVudG9zIOKUgOKUgAogICAgJGNudF9ob3QgICAgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIHNjb3JlID49IDcwIik7CiAgICAkY250X3VyZ2VudGUgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgZGF0YV9ldmVudG8gPj0gQ1VSREFURSgpIEFORCBkYXRhX2V2ZW50byA8PSBEQVRFX0FERChDVVJEQVRFKCksIElOVEVSVkFMIDcgREFZKSIpOwogICAgJGNudF93YXJtICAgID0gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIFdIRVJFIHNjb3JlID49IDQwIEFORCBzY29yZSA8IDcwIik7CiAgICAkY250X3NlbWRhdGEgPSAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUgKGRhdGFfZXZlbnRvIElTIE5VTEwgT1IgZGF0YV9ldmVudG8gPSAnJykgQU5EIHNjb3JlIDwgNzAiKTsKICAgICRjbnRfY2xpZW50ZXM9ICRjbnRfcGVkaWRvOwoKICAgIC8vIOKUgOKUgCBBdXRvbWHDp8O1ZXM6IHN0YXR1cyDilIDilIAKICAgICRhcXVlY2VyX2tpbGwgPSBnZXRfb3B0aW9uKCd2bTJfYXF1ZWNlcl9raWxsJywgJzEnKTsKICAgICRhYV9vbiAgICAgICAgPSBnZXRfb3B0aW9uKCd2bTJfYXV0b19hcXVlY2VyX29uJywgJzAnKTsKICAgICRob3Rfa2lsbCAgICAgPSBnZXRfb3B0aW9uKCd2bTJfaG90X2tpbGwnLCAnMScpOwogICAgJGJ5ZGF0ZV9raWxsICA9IGdldF9vcHRpb24oJ3ZtMl9ieWRhdGVfa2lsbCcsICcxJyk7CiAgICAkY2FydF9raWxsICAgID0gKGJvb2wpZ2V0X29wdGlvbigndm1fd2Ffa2lsbF9zd2l0Y2gnLCAwKTsKCiAgICAvLyDilIDilIAgRW52aW9zIGhvamUgcG9yIG3Ds2R1bG8g4pSA4pSACiAgICAkdG9kYXkgICAgID0gY3VycmVudF90aW1lKCdZLW0tZCcpOwogICAgJHRvZGF5X3Jvd3MgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoJHdwZGItPnByZXBhcmUoCiAgICAgICAgIlNFTEVDVCBtb2R1bGUsIENPVU5UKCopIGFzIGNudCBGUk9NICRzZW5kcyBXSEVSRSBEQVRFKHNlbnRfYXQpID0gJXMgR1JPVVAgQlkgbW9kdWxlIiwKICAgICAgICAkdG9kYXkKICAgICksIE9CSkVDVF9LKTsKICAgICRnZXRfdG9kYXkgPSBmdW5jdGlvbigkbW9kKSB1c2UgKCR0b2RheV9yb3dzKSB7CiAgICAgICAgcmV0dXJuIGlzc2V0KCR0b2RheV9yb3dzWyRtb2RdKSA/IChpbnQpJHRvZGF5X3Jvd3NbJG1vZF0tPmNudCA6IDA7CiAgICB9OwogICAgJHRvZGF5X3RvdGFsID0gKGludCkkd3BkYi0+Z2V0X3Zhcigkd3BkYi0+cHJlcGFyZSgKICAgICAgICAiU0VMRUNUIENPVU5UKCopIEZST00gJHNlbmRzIFdIRVJFIERBVEUoc2VudF9hdCkgPSAlcyIsICR0b2RheQogICAgKSk7CgogICAgLy8g4pSA4pSAIExvZyByZWNlbnRlIOKUgOKUgAogICAgJGxvZ19yb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICJTRUxFQ1Qgcy5waG9uZSwgcy5tb2R1bGUsIHMuc2VudF9hdCwgYy5uYW1lCiAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzIHMKICAgICAgICAgTEVGVCBKT0lOICR0YWJsZSBjIE9OIGMucGhvbmUgPSBzLnBob25lCiAgICAgICAgIE9SREVSIEJZIHMuaWQgREVTQyBMSU1JVCAyMCIKICAgICk7CgogICAgJG1vZF9sYWJlbHMgPSBbCiAgICAgICAgJ2FxdWVjZXInICAgICAgPT4gWydsYWJlbCcgPT4gJ/CflKUgQXF1ZWNlciBEK1gnLCAgJ2NvbG9yJyA9PiAnI2U3NGMzYyddLAogICAgICAgICdhdXRvX2FxdWVjZXInID0+IFsnbGFiZWwnID0+ICfwn6SWIEF1dG8tQXF1ZWNlcicsICdjb2xvcicgPT4gJyM5YjU5YjYnXSwKICAgICAgICAnbGVhZHMnICAgICAgICA9PiBbJ2xhYmVsJyA9PiAn8J+OryBMZWFkcyBIT1QnLCAgICAnY29sb3InID0+ICcjZTY3ZTIyJ10sCiAgICAgICAgJ2J5ZGF0ZScgICAgICAgPT4gWydsYWJlbCcgPT4gJ/Cfk4UgUG9yIERhdGEnLCAgICAgJ2NvbG9yJyA9PiAnIzM0OThkYiddLAogICAgICAgICdjYXJyaW5obycgICAgID0+IFsnbGFiZWwnID0+ICfwn5uSIENhcnJpbmhvJywgICAgICdjb2xvcicgPT4gJyMyN2FlNjAnXSwKICAgIF07CgogICAgJGNvbnRhY3RzX3VybCA9IGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLWNvbnRhY3RzJyk7CiAgICAkYXV0b191cmwgICAgID0gYWRtaW5fdXJsKCdhZG1pbi5waHA/cGFnZT12bTItYXV0b21hY29lcycpOwogICAgPz4KICAgIDxzdHlsZT4KICAgIC52bTJwbC10b3RhbHt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmZiZWI7Ym9yZGVyOjFweCBzb2xpZCAjZmNkMzRkO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTBweCAxNnB4O21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTNweH0KICAgIC52bTJwbC10b3RhbCBzdHJvbmd7Zm9udC1zaXplOjIycHg7Y29sb3I6I2I0NTMwOX0KICAgIC52bTJwbC1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDM2cHggMWZyIDM2cHggMWZyO2dhcDowO2FsaWduLWl0ZW1zOnN0YXJ0O21hcmdpbi1ib3R0b206MjBweH0KICAgIEBtZWRpYShtYXgtd2lkdGg6OTAwcHgpey52bTJwbC1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9LnZtMnBsLWFycm93e3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpO21hcmdpbjo2cHggYXV0byFpbXBvcnRhbnQ7cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9fQogICAgLnZtMnBsLWNvbHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZThlYWVkO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE0cHggMTZweH0KICAgIC52bTJwbC1jb2wgaDN7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiMxYTFhMmU7bWFyZ2luOjAgMCAxMHB4O3BhZGRpbmctYm90dG9tOjhweDtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZjBmMGYwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouNnB4fQogICAgLnZtMnBsLWNhcmR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjdweCAxMHB4O2JvcmRlci1yYWRpdXM6N3B4O21hcmdpbi1ib3R0b206NXB4O2JhY2tncm91bmQ6I2Y4ZjlmYTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmFsbCAuMTVzO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOmluaGVyaXR9CiAgICAudm0ycGwtY2FyZDpob3ZlcntiYWNrZ3JvdW5kOiNlZWYyZmY7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMnB4KX0KICAgIC52bTJwbC1jYXJkLWF1dG97ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjNweH0KICAgIC52bTJwbC1sZWZ0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjdweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDB9CiAgICAudm0ycGwtYmFkZ2V7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6ODAwO2JhY2tncm91bmQ6IzFhMWEyZTtjb2xvcjojRkZENzAwO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjEycHg7bWluLXdpZHRoOjI2cHg7dGV4dC1hbGlnbjpjZW50ZXJ9CiAgICAudm0ycGwtYXJyb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2NvbG9yOiM5Y2EzYWY7Zm9udC1zaXplOjIwcHg7cGFkZGluZy10b3A6NDRweH0KICAgIC52bTJwbC1zdGF0dXN7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjNweDtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo3MDA7cGFkZGluZzoycHggN3B4O2JvcmRlci1yYWRpdXM6MTBweH0KICAgIC52bTJwbC1zdGF0dXMub257YmFja2dyb3VuZDojZGNmY2U3O2NvbG9yOiMxNmEzNGF9CiAgICAudm0ycGwtc3RhdHVzLm9mZntiYWNrZ3JvdW5kOiNmZWUyZTI7Y29sb3I6I2RjMjYyNn0KICAgIC52bTJwbC1hdXRvLXJvd3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3dpZHRoOjEwMCV9CiAgICAudm0ycGwtc3Vie2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiM2YjcyODA7cGFkZGluZy1sZWZ0OjJweH0KICAgIC52bTJwbC1jb2wtZm9vdGVye21hcmdpbi10b3A6OHB4O3BhZGRpbmctdG9wOjhweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZjBmMGYwO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM5Y2EzYWY7dGV4dC1hbGlnbjpjZW50ZXJ9CiAgICAudm0ycGwtbG9ne2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlOGVhZWQ7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTZweH0KICAgIC52bTJwbC1sb2cgaDN7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiMxYTFhMmU7bWFyZ2luOjAgMCAxMHB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtsZXR0ZXItc3BhY2luZzouNnB4fQogICAgLnZtMnBsLWxvZy1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O3BhZGRpbmc6NXB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2Y0ZjRmNDtmb250LXNpemU6MTJweH0KICAgIC52bTJwbC1sb2ctcm93Omxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfQogICAgLnZtMnBsLWxvZy1tb2R7d2lkdGg6MTA1cHg7ZmxleC1zaHJpbms6MH0KICAgIC52bTJwbC1sb2ctdGltZXtjb2xvcjojOWNhM2FmO3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tbGVmdDphdXRvO2ZvbnQtc2l6ZToxMXB4fQogICAgLnZtMnBsLWxvZy1uYW1le2ZsZXg6MTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC13ZWlnaHQ6NTAwfQogICAgLnZtMnBsLWxvZy1waG9uZXtjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxMXB4O3doaXRlLXNwYWNlOm5vd3JhcH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0idm0ycGwtdG90YWwiPgogICAgICAgIFRvdGFsIGRlIG1lbnNhZ2VucyBlbnZpYWRhcyBob2plOiA8c3Ryb25nPjw/cGhwIGVjaG8gJHRvZGF5X3RvdGFsOyA/Pjwvc3Ryb25nPgogICAgICAgICZuYnNwO8K3Jm5ic3A7IDw/cGhwIGVjaG8gJHRvdGFsX2NvbnRhY3RzOyA/PiBjb250YXRvcyBuYSBiYXNlCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJ2bTJwbC1ncmlkIj4KCiAgICAgICAgPCEtLSDilIDilIAgQ09MVU5BIDE6IEZPTlRFUyDilIDilIAgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0idm0ycGwtY29sIj4KICAgICAgICAgICAgPGgzPvCfk6UgRm9udGVzIGRlIExlYWRzPC9oMz4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgJGZvbnRlcyA9IFsKICAgICAgICAgICAgICAgIFsn8J+bkiBXb29Db21tZXJjZScsICAkY250X3BlZGlkbywgICAkY29udGFjdHNfdXJsIC4gJyZzb3VyY2U9cGVkaWRvJ10sCiAgICAgICAgICAgICAgICBbJ/Cfp6AgU29mSUEnLCAgICAgICAgJGNudF9zb2ZpYSwgICAgJGNvbnRhY3RzX3VybCAuICcmc291cmNlPXNvZmlhJ10sCiAgICAgICAgICAgICAgICBbJ/Cfk7ggR2FsZXJpYScsICAgICAgJGNudF9nYWxlcmlhLCAgJGNvbnRhY3RzX3VybCAuICcmc291cmNlPWdhbGVyaWEnXSwKICAgICAgICAgICAgICAgIFsn8J+bkiBDYXJyaW5obycsICAgICAkY250X2NhcnJpbmhvLCAkY29udGFjdHNfdXJsIC4gJyZzb3VyY2U9Y2FycmluaG8nXSwKICAgICAgICAgICAgICAgIFsn8J+UpSBLb21tbycsICAgICAgICAkY250X2tvbW1vLCAgICAkY29udGFjdHNfdXJsIC4gJyZzb3VyY2U9a29tbW8nXSwKICAgICAgICAgICAgXTsKICAgICAgICAgICAgZm9yZWFjaCAoJGZvbnRlcyBhcyBbJGxhYmVsLCAkY291bnQsICR1cmxdKToKICAgICAgICAgICAgPz4KICAgICAgICAgICAgPGEgY2xhc3M9InZtMnBsLWNhcmQiIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkdXJsKTsgPz4iPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMnBsLWxlZnQiPjw/cGhwIGVjaG8gJGxhYmVsOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTJwbC1iYWRnZSI+PD9waHAgZWNobyAkY291bnQ7ID8+PC9zcGFuPgogICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMnBsLWNvbC1mb290ZXIiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRjb250YWN0c191cmwpOyA/PiIgc3R5bGU9ImNvbG9yOiMzYjgyZjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPgogICAgICAgICAgICAgICAgICAgIFZlciB0b2RvcyBvcyA8P3BocCBlY2hvICR0b3RhbF9jb250YWN0czsgPz4gY29udGF0b3Mg4oaSCiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIHNldGEgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0idm0ycGwtYXJyb3ciPuKGkjwvZGl2PgoKICAgICAgICA8IS0tIOKUgOKUgCBDT0xVTkEgMjogU0VHTUVOVE9TIOKUgOKUgCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJ2bTJwbC1jb2wiPgogICAgICAgICAgICA8aDM+8J+RpSBTZWdtZW50b3M8L2gzPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICAkc2VncyA9IFsKICAgICAgICAgICAgICAgIFsn8J+UpSBIT1QgKHNjb3JlIOKJpSA3MCknLCAgICRjbnRfaG90LCAgICAgJGNvbnRhY3RzX3VybCAuICcmc2NvcmVfZj1ob3QnXSwKICAgICAgICAgICAgICAgIFsn4pqhIFVyZ2VudGUgKOKJpCA3IGRpYXMpJywgJGNudF91cmdlbnRlLCAkY29udGFjdHNfdXJsIC4gJyZkcD11cmdlbnRlJ10sCiAgICAgICAgICAgICAgICBbJ/CfjKHvuI8gV2FybSAoc2NvcmUgNDDigJM2OSknLCAkY250X3dhcm0sICAgICRjb250YWN0c191cmwgLiAnJnNjb3JlX2Y9d2FybSddLAogICAgICAgICAgICAgICAgWyfwn5OFIFNlbSBkYXRhJywgICAgICAgICAgICRjbnRfc2VtZGF0YSwgJGNvbnRhY3RzX3VybCAuICcmZHA9c2VtZGF0YSddLAogICAgICAgICAgICAgICAgWyfwn46JIENsaWVudGVzIFdDJywgICAgICAgICRjbnRfY2xpZW50ZXMsJGNvbnRhY3RzX3VybCAuICcmc291cmNlPXBlZGlkbyddLAogICAgICAgICAgICBdOwogICAgICAgICAgICBmb3JlYWNoICgkc2VncyBhcyBbJGxhYmVsLCAkY291bnQsICR1cmxdKToKICAgICAgICAgICAgPz4KICAgICAgICAgICAgPGEgY2xhc3M9InZtMnBsLWNhcmQiIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkdXJsKTsgPz4iPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMnBsLWxlZnQiPjw/cGhwIGVjaG8gJGxhYmVsOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTJwbC1iYWRnZSI+PD9waHAgZWNobyAkY291bnQ7ID8+PC9zcGFuPgogICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZtMnBsLWNvbC1mb290ZXIiPkNsaXF1ZSBwYXJhIGZpbHRyYXIgb3MgY29udGF0b3M8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBzZXRhIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InZtMnBsLWFycm93Ij7ihpI8L2Rpdj4KCiAgICAgICAgPCEtLSDilIDilIAgQ09MVU5BIDM6IEFVVE9NQcOHw5VFUyDilIDilIAgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0idm0ycGwtY29sIj4KICAgICAgICAgICAgPGgzPvCfpJYgQXV0b21hw6fDtWVzPC9oMz4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgJGF1dG9zID0gWwogICAgICAgICAgICAgICAgWyfwn5SlIEFxdWVjZXIgRCtYJywgICRhcXVlY2VyX2tpbGwgPT09ICcwJywgJ2FxdWVjZXInLCAgICAgICRhdXRvX3VybCAuICcmdGFiPWFxdWVjZXInXSwKICAgICAgICAgICAgICAgIFsn8J+kliBBdXRvLUFxdWVjZXInLCAkYWFfb24gPT09ICcxJywgICAgICAgICdhdXRvX2FxdWVjZXInLCAkYXV0b191cmwgLiAnJnRhYj1hcXVlY2VyJ10sCiAgICAgICAgICAgICAgICBbJ/Cfjq8gTGVhZHMgSE9UJywgICAgJGhvdF9raWxsID09PSAnMCcsICAgICAnbGVhZHMnLCAgICAgICAgJGF1dG9fdXJsIC4gJyZ0YWI9aG90J10sCiAgICAgICAgICAgICAgICBbJ/Cfk4UgUG9yIERhdGEnLCAgICAgJGJ5ZGF0ZV9raWxsID09PSAnMCcsICAnYnlkYXRlJywgICAgICAgJGF1dG9fdXJsIC4gJyZ0YWI9YnlkYXRlJ10sCiAgICAgICAgICAgICAgICBbJ/Cfm5IgQ2FycmluaG8nLCAgICAgISRjYXJ0X2tpbGwsICAgICAgICAgICAnY2FycmluaG8nLCAgICAgJGF1dG9fdXJsIC4gJyZ0YWI9Y2FycmluaG8nXSwKICAgICAgICAgICAgXTsKICAgICAgICAgICAgZm9yZWFjaCAoJGF1dG9zIGFzIFskbGFiZWwsICRpc19vbiwgJG1vZCwgJHVybF0pOgogICAgICAgICAgICAgICAgJG5fdG9kYXkgPSAkZ2V0X3RvZGF5KCRtb2QpOwogICAgICAgICAgICA/PgogICAgICAgICAgICA8YSBjbGFzcz0idm0ycGwtY2FyZCB2bTJwbC1jYXJkLWF1dG8iIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkdXJsKTsgPz4iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idm0ycGwtYXV0by1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTJwbC1sZWZ0Ij48P3BocCBlY2hvICRsYWJlbDsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMnBsLXN0YXR1cyA8P3BocCBlY2hvICRpc19vbiA/ICdvbicgOiAnb2ZmJzsgPz4iPjw/cGhwIGVjaG8gJGlzX29uID8gJ/Cfn6IgQVRJVk8nIDogJ/CflLQgUEFSQURPJzsgPz48L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTJwbC1zdWIiPjw/cGhwIGVjaG8gJG5fdG9kYXk7ID8+IGVudmlvKHMpIGhvamUgwrcgY2xpcXVlIHBhcmEgY29uZmlndXJhcjwvc3Bhbj4KICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgICAgIDwvZGl2PgoKICAgIDwvZGl2PjwhLS0gLnZtMnBsLWdyaWQgLS0+CgogICAgPCEtLSBMT0cgUkVDRU5URSAtLT4KICAgIDxkaXYgY2xhc3M9InZtMnBsLWxvZyI+CiAgICAgICAgPGgzPvCfk4sgRW52aW9zIFJlY2VudGVzIOKAlCBUb2RhcyBhcyBBdXRvbWHDp8O1ZXM8L2gzPgogICAgICAgIDw/cGhwIGlmICgkbG9nX3Jvd3MpOiA/PgogICAgICAgIDxkaXYgc3R5bGU9Im92ZXJmbG93LXg6YXV0byI+CiAgICAgICAgPD9waHAgZm9yZWFjaCAoJGxvZ19yb3dzIGFzICRyb3cpOgogICAgICAgICAgICAkbWwgICAgPSAkbW9kX2xhYmVsc1skcm93LT5tb2R1bGVdID8/IFsnbGFiZWwnID0+IGVzY19odG1sKCRyb3ctPm1vZHVsZSksICdjb2xvcicgPT4gJyM2YjcyODAnXTsKICAgICAgICAgICAgJGR0ICAgID0gZ2V0X2RhdGVfZnJvbV9nbXQoJHJvdy0+c2VudF9hdCwgJ2QvbSBIOmknKTsKICAgICAgICA/PgogICAgICAgIDxkaXYgY2xhc3M9InZtMnBsLWxvZy1yb3ciPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idm0ycGwtbG9nLW1vZCI+CiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDo8P3BocCBlY2hvICRtbFsnY29sb3InXTsgPz47Y29sb3I6I2ZmZjtwYWRkaW5nOjJweCA3cHg7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjcwMCI+PD9waHAgZWNobyAkbWxbJ2xhYmVsJ107ID8+PC9zcGFuPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTJwbC1sb2ctbmFtZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkcm93LT5uYW1lID86ICfigJQnKTsgPz48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2bTJwbC1sb2ctcGhvbmUiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHJvdy0+cGhvbmUpOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InZtMnBsLWxvZy10aW1lIj48P3BocCBlY2hvICRkdDsgPz48L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgIDxwIHN0eWxlPSJjb2xvcjojOWNhM2FmO2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MjBweCAwIj5OZW5odW0gZW52aW8gcmVnaXN0cmFkbyBhaW5kYS4gT3MgbG9ncyBhcGFyZWNlbSBhcXVpIGFww7NzIG9zIHByaW1laXJvcyBkaXNwYXJvcy48L3A+CiAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICA8L2Rpdj4KICAgIDw/cGhwCn0KCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBBSkFYIOKAlCBCdWxrIGFjdGlvbjogYWRpY2lvbmFyIGNvbnRhdG9zIGEgYXV0b21hw6fDo28KLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACmFkZF9hY3Rpb24oJ3dwX2FqYXhfdm0yX2J1bGtfYXF1ZWNlcicsIGZ1bmN0aW9uKCkgewogICAgY2hlY2tfYWpheF9yZWZlcmVyKCd2bTJfYnVsa19hcXVlY2VyJywgJ25vbmNlJyk7CiAgICBpZiAoIWN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykpIHdwX2RpZSgpOwoKICAgIGdsb2JhbCAkd3BkYjsKICAgICRwaG9uZXMgPSBpc3NldCgkX1BPU1RbJ3Bob25lcyddKSA/IGFycmF5X21hcCgnc2FuaXRpemVfdGV4dF9maWVsZCcsIChhcnJheSkkX1BPU1RbJ3Bob25lcyddKSA6IFtdOwogICAgJG1vZHVsZSA9IHNhbml0aXplX2tleSgkX1BPU1RbJ21vZHVsZSddID8/ICdhcXVlY2VyJyk7CiAgICBpZiAoIWluX2FycmF5KCRtb2R1bGUsIFsnYXF1ZWNlcicsJ2J5ZGF0ZSddKSkgJG1vZHVsZSA9ICdhcXVlY2VyJzsKICAgIGlmIChlbXB0eSgkcGhvbmVzKSkgewogICAgICAgIHdwX3NlbmRfanNvbl9lcnJvcihbJ21zZycgPT4gJ05lbmh1bSBjb250YXRvIHNlbGVjaW9uYWRvLiddKTsKICAgIH0KCiAgICAkc2VuZHMgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zZW5kcyc7CiAgICAkcGhfaW4gPSBpbXBsb2RlKCcsJywgYXJyYXlfZmlsbCgwLCBjb3VudCgkcGhvbmVzKSwgJyVzJykpOwoKICAgIC8vIFJlbW92ZSBjb29sZG93biByZWNlbnRlIHBhcmEgZXNzZXMgcGhvbmVzIG5lc3NlIG3Ds2R1bG8KICAgICRhcmdzX2RlbCA9IGFycmF5X21lcmdlKFskbW9kdWxlXSwgJHBob25lcyk7CiAgICAkZGVsZXRlZCAgPSAkd3BkYi0+cXVlcnkoJHdwZGItPnByZXBhcmUoCiAgICAgICAgIkRFTEVURSBGUk9NICRzZW5kcyBXSEVSRSBtb2R1bGUgPSAlcyBBTkQgcGhvbmUgSU4gKCRwaF9pbikgQU5EIHNlbnRfYXQgPiBEQVRFX1NVQihOT1coKSwgSU5URVJWQUwgMzAgREFZKSIsCiAgICAgICAgLi4uJGFyZ3NfZGVsCiAgICApKTsKCiAgICAkbGFiZWwgPSAkbW9kdWxlID09PSAnYXF1ZWNlcicgPyAnQXF1ZWNlciBEK1gnIDogJ1BvciBEYXRhJzsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKFsKICAgICAgICAnbXNnJyAgICAgPT4gY291bnQoJHBob25lcykgLiAnIGNvbnRhdG8ocykgYWRpY2lvbmFkbyhzKSDDoCBmaWxhIGRlICcgLiAkbGFiZWwgLiAnLiBDb29sZG93biByZW1vdmlkbyDigJQgc2Vyw6NvIGluY2x1w61kb3Mgbm8gcHLDs3hpbW8gZGlzcGFyby4nLAogICAgICAgICdkZWxldGVkJyA9PiAoaW50KSRkZWxldGVkLAogICAgICAgICdtb2R1bGUnICA9PiAkbW9kdWxlLAogICAgXSk7Cn0pOwpmdW5jdGlvbiB2bTJfc29maWFfa2Jfc2F2ZV9oYW5kbGVyKCkgewogICAgaWYgKCAhIGN1cnJlbnRfdXNlcl9jYW4oICdtYW5hZ2Vfb3B0aW9ucycgKSApIHdwX2RpZSggJ1NlbSBwZXJtaXNzw6NvJyApOwogICAgY2hlY2tfYWpheF9yZWZlcmVyKCAndm0yX3NvZmlhX2tiJywgJ25vbmNlJyApOwogICAgZ2xvYmFsICR3cGRiOwogICAgJHQgICAgICAgID0gJHdwZGItPnByZWZpeCAuICd2bTJfc29maWFfa25vd2xlZGdlJzsKICAgICR0aXBvICAgICA9IHNhbml0aXplX3RleHRfZmllbGQoICRfUE9TVFsndGlwbyddID8/ICd0ZXh0bycgKTsKICAgICR0aXR1bG8gICA9IHNhbml0aXplX3RleHRfZmllbGQoICRfUE9TVFsndGl0dWxvJ10gPz8gJycgKTsKICAgICR1cmwgICAgICA9IGVzY191cmxfcmF3KCAkX1BPU1RbJ3VybCddID8/ICcnICk7CiAgICAkY29udGV1ZG8gPSBzYW5pdGl6ZV90ZXh0YXJlYV9maWVsZCggJF9QT1NUWydjb250ZXVkbyddID8/ICcnICk7CiAgICBpZiAoIGluX2FycmF5KCAkdGlwbywgYXJyYXkoICd1cmwnLCAnZHJpdmUnICksIHRydWUgKSAmJiAhIGVtcHR5KCAkdXJsICkgKSB7CiAgICAgICAgJHNjcmFwZWQgPSB2bTJfc29maWFfa2Jfc2NyYXBlX3VybCggJHVybCApOwogICAgICAgIGlmICggaXNzZXQoICRzY3JhcGVkWydlcnJvJ10gKSApIHsKICAgICAgICAgICAgd3Bfc2VuZF9qc29uX2Vycm9yKCAkc2NyYXBlZFsnZXJybyddICk7CiAgICAgICAgfQogICAgICAgIGlmICggZW1wdHkoICR0aXR1bG8gKSApICR0aXR1bG8gPSAkc2NyYXBlZFsndGl0dWxvJ107CiAgICAgICAgaWYgKCBlbXB0eSggJGNvbnRldWRvICkgKSAkY29udGV1ZG8gPSAkc2NyYXBlZFsnY29udGV1ZG8nXTsKICAgIH0KICAgIGlmICggZW1wdHkoICR0aXR1bG8gKSApICAgd3Bfc2VuZF9qc29uX2Vycm9yKCAnVMOtdHVsbyDDqSBvYnJpZ2F0w7NyaW8uJyApOwogICAgaWYgKCBlbXB0eSggJGNvbnRldWRvICkgKSB3cF9zZW5kX2pzb25fZXJyb3IoICdDb250ZcO6ZG8gbsOjbyBwb2RlIGVzdGFyIHZhemlvLicgKTsKICAgICR3cGRiLT5pbnNlcnQoICR0LCBhcnJheSgKICAgICAgICAndGlwbycgICAgICA9PiAkdGlwbywKICAgICAgICAndGl0dWxvJyAgICA9PiAkdGl0dWxvLAogICAgICAgICdjb250ZXVkbycgID0+ICRjb250ZXVkbywKICAgICAgICAndXJsJyAgICAgICA9PiAkdXJsID86IG51bGwsCiAgICAgICAgJ2F0aXZvJyAgICAgPT4gMSwKICAgICAgICAnY3JpYWRvX2VtJyA9PiBjdXJyZW50X3RpbWUoICdteXNxbCcgKSwKICAgICkgKTsKICAgIGlmICggJHdwZGItPmxhc3RfZXJyb3IgKSB3cF9zZW5kX2pzb25fZXJyb3IoICdFcnJvIEJEOiAnIC4gJHdwZGItPmxhc3RfZXJyb3IgKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCBhcnJheSgKICAgICAgICAnaWQnICAgICAgPT4gJHdwZGItPmluc2VydF9pZCwKICAgICAgICAndGl0dWxvJyAgPT4gJHRpdHVsbywKICAgICAgICAndGlwbycgICAgPT4gJHRpcG8sCiAgICAgICAgJ3ByZXZpZXcnID0+IG1iX3N1YnN0ciggJGNvbnRldWRvLCAwLCAyMDAgKSwKICAgICAgICAnY2hhcnMnICAgPT4gbWJfc3RybGVuKCAkY29udGV1ZG8gKSwKICAgICkgKTsKfQoKLy8gQUpBWDogZGVsZXRhciBpdGVtCmFkZF9hY3Rpb24oICd3cF9hamF4X3ZtMl9zb2ZpYV9rYl9kZWxldGUnLCAndm0yX3NvZmlhX2tiX2RlbGV0ZV9oYW5kbGVyJyApOwpmdW5jdGlvbiB2bTJfc29maWFfa2JfZGVsZXRlX2hhbmRsZXIoKSB7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbiggJ21hbmFnZV9vcHRpb25zJyApICkgd3BfZGllKCAnU2VtIHBlcm1pc3PDo28nICk7CiAgICBjaGVja19hamF4X3JlZmVyZXIoICd2bTJfc29maWFfa2InLCAnbm9uY2UnICk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkaWQgPSBpbnR2YWwoICRfUE9TVFsnaWQnXSA/PyAwICk7CiAgICBpZiAoICEgJGlkICkgd3Bfc2VuZF9qc29uX2Vycm9yKCAnSUQgaW52w6FsaWRvJyApOwogICAgJHdwZGItPmRlbGV0ZSggJHdwZGItPnByZWZpeCAuICd2bTJfc29maWFfa25vd2xlZGdlJywgYXJyYXkoICdpZCcgPT4gJGlkICkgKTsKICAgIHdwX3NlbmRfanNvbl9zdWNjZXNzKCk7Cn0KCi8vIEFKQVg6IHRvZ2dsZSBhdGl2by9pbmF0aXZvCmFkZF9hY3Rpb24oICd3cF9hamF4X3ZtMl9zb2ZpYV9rYl90b2dnbGUnLCAndm0yX3NvZmlhX2tiX3RvZ2dsZV9oYW5kbGVyJyApOwpmdW5jdGlvbiB2bTJfc29maWFfa2JfdG9nZ2xlX2hhbmRsZXIoKSB7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbiggJ21hbmFnZV9vcHRpb25zJyApICkgd3BfZGllKCAnU2VtIHBlcm1pc3PDo28nICk7CiAgICBjaGVja19hamF4X3JlZmVyZXIoICd2bTJfc29maWFfa2InLCAnbm9uY2UnICk7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkaWQgID0gaW50dmFsKCAkX1BPU1RbJ2lkJ10gPz8gMCApOwogICAgaWYgKCAhICRpZCApIHdwX3NlbmRfanNvbl9lcnJvciggJ0lEIGludsOhbGlkbycgKTsKICAgICR0ICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9rbm93bGVkZ2UnOwogICAgJGN1ciA9IChpbnQpICR3cGRiLT5nZXRfdmFyKCAkd3BkYi0+cHJlcGFyZSggIlNFTEVDVCBhdGl2byBGUk9NICR0IFdIRVJFIGlkPSVkIiwgJGlkICkgKTsKICAgICRuZXcgPSAkY3VyID8gMCA6IDE7CiAgICAkd3BkYi0+dXBkYXRlKCAkdCwgYXJyYXkoICdhdGl2bycgPT4gJG5ldyApLCBhcnJheSggJ2lkJyA9PiAkaWQgKSApOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoIGFycmF5KCAnYXRpdm8nID0+ICRuZXcgKSApOwp9CgovLyBBSkFYOiBwcmV2aWV3IGRlIHNjcmFwaW5nIChhbnRlcyBkZSBzYWx2YXIpCmFkZF9hY3Rpb24oICd3cF9hamF4X3ZtMl9zb2ZpYV9rYl9wcmV2aWV3JywgJ3ZtMl9zb2ZpYV9rYl9wcmV2aWV3X2hhbmRsZXInICk7CmZ1bmN0aW9uIHZtMl9zb2ZpYV9rYl9wcmV2aWV3X2hhbmRsZXIoKSB7CiAgICBpZiAoICEgY3VycmVudF91c2VyX2NhbiggJ21hbmFnZV9vcHRpb25zJyApICkgd3BfZGllKCAnU2VtIHBlcm1pc3PDo28nICk7CiAgICBjaGVja19hamF4X3JlZmVyZXIoICd2bTJfc29maWFfa2InLCAnbm9uY2UnICk7CiAgICAkdXJsID0gZXNjX3VybF9yYXcoICRfUE9TVFsndXJsJ10gPz8gJycgKTsKICAgIGlmICggISAkdXJsICkgd3Bfc2VuZF9qc29uX2Vycm9yKCAnVVJMIGludsOhbGlkYScgKTsKICAgICRyZXN1bHQgPSB2bTJfc29maWFfa2Jfc2NyYXBlX3VybCggJHVybCApOwogICAgaWYgKCBpc3NldCggJHJlc3VsdFsnZXJybyddICkgKSB3cF9zZW5kX2pzb25fZXJyb3IoICRyZXN1bHRbJ2Vycm8nXSApOwogICAgJHJlc3VsdFsnY2hhcnMnXSA9IG1iX3N0cmxlbiggJHJlc3VsdFsnY29udGV1ZG8nXSApOwogICAgd3Bfc2VuZF9qc29uX3N1Y2Nlc3MoICRyZXN1bHQgKTsKfQoKLy8g4pSA4pSAIFJFU1Q6IHVwc2VydCBzZXNzw6NvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApmdW5jdGlvbiB2bTJfc29maWFfcmVzdF91cHNlcnQoIFdQX1JFU1RfUmVxdWVzdCAkcmVxdWVzdCApIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICRkID0gJHJlcXVlc3QtPmdldF9qc29uX3BhcmFtcygpOwogICAgaWYgKCBlbXB0eSgkZFsnc2Vzc2lvbl9pZCddKSApIHsKICAgICAgICByZXR1cm4gbmV3IFdQX0Vycm9yKCdiYWRfcmVxdWVzdCcsICdzZXNzaW9uX2lkIHJlcXVpcmVkJywgWydzdGF0dXMnPT40MDBdKTsKICAgIH0KICAgICR0ICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9zZXNzaW9ucyc7CiAgICAkc2lkID0gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsnc2Vzc2lvbl9pZCddKTsKICAgICRyb3cgPSAkd3BkYi0+Z2V0X3Jvdygkd3BkYi0+cHJlcGFyZSgiU0VMRUNUIGlkIEZST00gJHQgV0hFUkUgc2Vzc2lvbl9pZD0lcyIsICRzaWQpKTsKICAgICRkYXRhID0gWwogICAgICAgICdzZXNzaW9uX2lkJyAgICAgICAgID0+ICRzaWQsCiAgICAgICAgJ3BlcnNpc3RlbnRfdWlkJyAgICAgPT4gaXNzZXQoJGRbJ3BlcnNpc3RlbnRfdWlkJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsncGVyc2lzdGVudF91aWQnXSkgOiBudWxsLAogICAgICAgICdwcm9kdWN0X2lkJyAgICAgICAgID0+IGlzc2V0KCRkWydwcm9kdWN0X2lkJ10pID8gaW50dmFsKCRkWydwcm9kdWN0X2lkJ10pIDogbnVsbCwKICAgICAgICAncHJvZHVjdF9uYW1lJyAgICAgICA9PiBpc3NldCgkZFsncHJvZHVjdF9uYW1lJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsncHJvZHVjdF9uYW1lJ10pIDogbnVsbCwKICAgICAgICAnd2hhdHNhcHAnICAgICAgICAgICA9PiBpc3NldCgkZFsnd2hhdHNhcHAnXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWyd3aGF0c2FwcCddKSA6IG51bGwsCiAgICAgICAgJ3dhX2NhcHR1cmVfdHJpZ2dlcicgPT4gaXNzZXQoJGRbJ3dhX2NhcHR1cmVfdHJpZ2dlciddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJGRbJ3dhX2NhcHR1cmVfdHJpZ2dlciddKSA6IG51bGwsCiAgICAgICAgJ2NhdGVnb3JpYScgICAgICAgICAgPT4gaXNzZXQoJGRbJ2NhdGVnb3JpYSddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJGRbJ2NhdGVnb3JpYSddKSA6IG51bGwsCiAgICAgICAgJ3RpcG9fZXZlbnRvJyAgICAgICAgPT4gISBlbXB0eSgkZFsndGlwb19ldmVudG8nXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWyd0aXBvX2V2ZW50byddKSA6ICggaXNzZXQoJGRbJ3NpZ25hbHMnXVsndGlwb19ldmVudG8nXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWydzaWduYWxzJ11bJ3RpcG9fZXZlbnRvJ10pIDogbnVsbCApLAogICAgICAgICdkYXRhX2V2ZW50b19zdHInICAgID0+IGlzc2V0KCRkWydkYXRhX2V2ZW50b19zdHInXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWydkYXRhX2V2ZW50b19zdHInXSkgOiBudWxsLAogICAgICAgICd1cmdlbmNpYScgICAgICAgICAgID0+IGlzc2V0KCRkWyd1cmdlbmNpYSddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJGRbJ3VyZ2VuY2lhJ10pIDogbnVsbCwKICAgICAgICAnbWVuc2FnZW5zX2NvdW50JyAgICA9PiBpc3NldCgkZFsnbWVuc2FnZW5zX2NvdW50J10pID8gaW50dmFsKCRkWydtZW5zYWdlbnNfY291bnQnXSkgOiAwLAogICAgICAgICdzaWduYWxzJyAgICAgICAgICAgID0+IGlzc2V0KCRkWydzaWduYWxzJ10pID8gd3BfanNvbl9lbmNvZGUoJGRbJ3NpZ25hbHMnXSkgOiBudWxsLAogICAgICAgICdoaXN0b3JpY28nICAgICAgICAgID0+IGlzc2V0KCRkWydoaXN0b3JpY28nXSkgPyB3cF9qc29uX2VuY29kZSgkZFsnaGlzdG9yaWNvJ10pIDogbnVsbCwKICAgICAgICAnY29udmVydGVkJyAgICAgICAgICA9PiBpc3NldCgkZFsnY29udmVydGVkJ10pID8gaW50dmFsKCRkWydjb252ZXJ0ZWQnXSkgOiAwLAogICAgICAgICdzb3VyY2VfdXJsJyAgICAgICAgID0+IGlzc2V0KCRkWydzb3VyY2VfdXJsJ10pID8gZXNjX3VybF9yYXcoJGRbJ3NvdXJjZV91cmwnXSkgOiBudWxsLAogICAgICAgICd1dG1fc291cmNlJyAgICAgICAgID0+IGlzc2V0KCRkWyd1dG1fc291cmNlJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsndXRtX3NvdXJjZSddKSA6IHNhbml0aXplX3RleHRfZmllbGQoJHJlcXVlc3QtPmdldF9wYXJhbSgndXRtX3NvdXJjZScpID8/ICcnKSwKICAgICAgICAndXRtX21lZGl1bScgICAgICAgICA9PiBpc3NldCgkZFsndXRtX21lZGl1bSddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJGRbJ3V0bV9tZWRpdW0nXSkgOiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRyZXF1ZXN0LT5nZXRfcGFyYW0oJ3V0bV9tZWRpdW0nKSA/PyAnJyksCiAgICAgICAgJ3V0bV9jYW1wYWlnbicgICAgICAgPT4gaXNzZXQoJGRbJ3V0bV9jYW1wYWlnbiddKSA/IHNhbml0aXplX3RleHRfZmllbGQoJGRbJ3V0bV9jYW1wYWlnbiddKSA6IHNhbml0aXplX3RleHRfZmllbGQoJHJlcXVlc3QtPmdldF9wYXJhbSgndXRtX2NhbXBhaWduJykgPz8gJycpLAogICAgICAgICdjYW5hbF9vcmlnZW0nICAgICAgID0+IGlzc2V0KCRkWydjYW5hbF9vcmlnZW0nXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWydjYW5hbF9vcmlnZW0nXSkgOiBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRyZXF1ZXN0LT5nZXRfcGFyYW0oJ2NhbmFsX29yaWdlbScpID8/ICcnKSwKICAgICAgICAnZW1haWwnICAgICAgICAgICAgICA9PiBpc3NldCgkZFsnZW1haWwnXSkgPyBzYW5pdGl6ZV9lbWFpbCgkZFsnZW1haWwnXSkgOiBudWxsLAogICAgXTsKICAgIC8vIFJlbW92ZSBlbWFpbCBudWxsIHBhcmEgbsOjbyBzb2JyZXNjcmV2ZXIgdmFsb3IgZXhpc3RlbnRlIGNvbSBOVUxMCiAgICBpZiAoICRkYXRhWydlbWFpbCddID09PSBudWxsICkgdW5zZXQoJGRhdGFbJ2VtYWlsJ10pOwogICAgaWYgKCAhZW1wdHkoJGRbJ3doYXRzYXBwJ10pICYmICEkcm93ICkgewogICAgICAgICRkYXRhWyd3YV9jYXB0dXJlZF9hdCddID0gY3VycmVudF90aW1lKCdteXNxbCcpOwogICAgfQogICAgaWYgKCAhZW1wdHkoJGRbJ2VuZGVkJ10pICkgewogICAgICAgICRkYXRhWydlbmRlZF9hdCddID0gY3VycmVudF90aW1lKCdteXNxbCcpOwogICAgfQogICAgaWYgKCAkcm93ICkgewogICAgICAgICRyZXN1bHQgPSAkd3BkYi0+dXBkYXRlKCR0LCAkZGF0YSwgWydzZXNzaW9uX2lkJyA9PiAkc2lkXSk7CiAgICB9IGVsc2UgewogICAgICAgICRkYXRhWydzdGFydGVkX2F0J10gPSBjdXJyZW50X3RpbWUoJ215c3FsJyk7CiAgICAgICAgJHJlc3VsdCA9ICR3cGRiLT5pbnNlcnQoJHQsICRkYXRhKTsKICAgIH0KICAgIGlmICggJHJlc3VsdCA9PT0gZmFsc2UgJiYgJHdwZGItPmxhc3RfZXJyb3IgKSB7CiAgICAgICAgZXJyb3JfbG9nKCdbdm0yX3NvZmlhX3Nlc3Npb25dIERCIGVycm9yOiAnIC4gJHdwZGItPmxhc3RfZXJyb3IgLiAnIHwgZGF0YSBrZXlzOiAnIC4gaW1wbG9kZSgnLCcsIGFycmF5X2tleXMoJGRhdGEpKSk7CiAgICAgICAgcmV0dXJuIG5ldyBXUF9FcnJvcignZGJfZXJyb3InLCAnRmFsaGEgYW8gc2FsdmFyIHNlc3PDo286ICcgLiAkd3BkYi0+bGFzdF9lcnJvciwgWydzdGF0dXMnID0+IDUwMF0pOwogICAgfQogICAgLy8g4pSA4pSAIFN5bmMgcGFyYSB2bTJfY29udGFjdHMgcXVhbmRvIFdoYXRzQXBwIGNhcHR1cmFkbyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIGlmICggIWVtcHR5KCRkWyd3aGF0c2FwcCddKSApIHsKICAgICAgICAkcmF3X3dhICA9IHByZWdfcmVwbGFjZSgnL1xELycsICcnLCBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWyd3aGF0c2FwcCddKSk7CiAgICAgICAgLy8gTm9ybWFsaXphcjogZ2FyYW50aXIgRERJIDU1CiAgICAgICAgaWYgKCBzdHJsZW4oJHJhd193YSkgPD0gMTEgKSB7CiAgICAgICAgICAgICRyYXdfd2EgPSAnNTUnIC4gJHJhd193YTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkcmF3X3dhICkgewogICAgICAgICAgICAkY3QgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9jb250YWN0cyc7CiAgICAgICAgICAgICRleGlzdGluZyA9ICR3cGRiLT5nZXRfcm93KCR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAgICAgIlNFTEVDVCBpZCwgb3JpZ2VucywgdGlwb19ldmVudG8gRlJPTSAkY3QgV0hFUkUgcGhvbmUgPSAlcyIsICRyYXdfd2EKICAgICAgICAgICAgKSk7CiAgICAgICAgICAgIGlmICggJGV4aXN0aW5nICkgewogICAgICAgICAgICAgICAgLy8gQXR1YWxpemFyIG9yaWdlbTogYWRpY2lvbmFyICdzb2ZpYScgc2UgbsOjbyBleGlzdGlyCiAgICAgICAgICAgICAgICAkb3JpZ2VucyA9IGpzb25fZGVjb2RlKCRleGlzdGluZy0+b3JpZ2VucywgdHJ1ZSkgPzogW107CiAgICAgICAgICAgICAgICBpZiAoICEgaW5fYXJyYXkoJ3NvZmlhJywgJG9yaWdlbnMpICkgewogICAgICAgICAgICAgICAgICAgICRvcmlnZW5zW10gPSAnc29maWEnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHVwZGF0ZV9kYXRhID0gWwogICAgICAgICAgICAgICAgICAgICdvcmlnZW5zJyAgICAgICA9PiB3cF9qc29uX2VuY29kZSgkb3JpZ2VucyksCiAgICAgICAgICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAvLyBQcmVlbmNoZXIgdGlwb19ldmVudG8gc2UgYWluZGEgdmF6aW8gZSBTb2ZJQSBkZXRlY3RvdQogICAgICAgICAgICAgICAgaWYgKCBlbXB0eSgkZXhpc3RpbmctPnRpcG9fZXZlbnRvKSAmJiAhZW1wdHkoJGRbJ3NpZ25hbHMnXVsndGlwb19ldmVudG8nXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHVwZGF0ZV9kYXRhWyd0aXBvX2V2ZW50byddID0gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsnc2lnbmFscyddWyd0aXBvX2V2ZW50byddKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIFByZWVuY2hlciBVVE1zIHNlIHZpZXJhbSBlIGNvbnRhdG8gbsOjbyB0ZW0KICAgICAgICAgICAgICAgIGlmICggIWVtcHR5KCRkWyd1dG1fc291cmNlJ10pICYmIGVtcHR5KCRleGlzdGluZy0+dXRtX3NvdXJjZSkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHVwZGF0ZV9kYXRhWyd1dG1fc291cmNlJ10gICA9IHNhbml0aXplX3RleHRfZmllbGQoJGRbJ3V0bV9zb3VyY2UnXSk7CiAgICAgICAgICAgICAgICAgICAgJHVwZGF0ZV9kYXRhWyd1dG1fbWVkaXVtJ10gICA9IGlzc2V0KCRkWyd1dG1fbWVkaXVtJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsndXRtX21lZGl1bSddKSA6ICcnOwogICAgICAgICAgICAgICAgICAgICR1cGRhdGVfZGF0YVsndXRtX2NhbXBhaWduJ10gPSBpc3NldCgkZFsndXRtX2NhbXBhaWduJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsndXRtX2NhbXBhaWduJ10pIDogJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyB2MS41LjkxOiBwcmVlbmNoZXIgZW1haWwgc2UgY2FwdHVyYWRvIHBlbGEgU29mSUEgZSBjb250YXRvIG7Do28gdGVtCiAgICAgICAgICAgICAgICBpZiAoICFlbXB0eSgkZFsnZW1haWwnXSkgJiYgZW1wdHkoJGV4aXN0aW5nLT5lbWFpbCkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHVwZGF0ZV9kYXRhWydlbWFpbCddID0gc2FuaXRpemVfZW1haWwoJGRbJ2VtYWlsJ10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHdwZGItPnVwZGF0ZSgkY3QsICR1cGRhdGVfZGF0YSwgWydpZCcgPT4gJGV4aXN0aW5nLT5pZF0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gQ3JpYXIgbm92byBjb250YXRvCiAgICAgICAgICAgICAgICAkb3JpZ2VucyA9IFsnc29maWEnXTsKICAgICAgICAgICAgICAgICRuZXdfY29udGFjdCA9IFsKICAgICAgICAgICAgICAgICAgICAncGhvbmUnICAgICAgICAgPT4gJHJhd193YSwKICAgICAgICAgICAgICAgICAgICAnbmFtZScgICAgICAgICAgPT4gJ1NvZklBIExlYWQnLAogICAgICAgICAgICAgICAgICAgICdlbWFpbCcgICAgICAgICA9PiAhZW1wdHkoJGRbJ2VtYWlsJ10pID8gc2FuaXRpemVfZW1haWwoJGRbJ2VtYWlsJ10pIDogJycsCiAgICAgICAgICAgICAgICAgICAgJ29yaWdlbnMnICAgICAgID0+IHdwX2pzb25fZW5jb2RlKCRvcmlnZW5zKSwKICAgICAgICAgICAgICAgICAgICAndGlwb19ldmVudG8nICAgPT4gaXNzZXQoJGRbJ3NpZ25hbHMnXVsndGlwb19ldmVudG8nXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWydzaWduYWxzJ11bJ3RpcG9fZXZlbnRvJ10pIDogJycsCiAgICAgICAgICAgICAgICAgICAgJ2RhdGFfZXZlbnRvJyAgID0+IGlzc2V0KCRkWydkYXRhX2V2ZW50b19zdHInXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWydkYXRhX2V2ZW50b19zdHInXSkgOiAnJywKICAgICAgICAgICAgICAgICAgICAndXRtX3NvdXJjZScgICAgPT4gaXNzZXQoJGRbJ3V0bV9zb3VyY2UnXSkgPyBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCRkWyd1dG1fc291cmNlJ10pIDogJycsCiAgICAgICAgICAgICAgICAgICAgJ3V0bV9tZWRpdW0nICAgID0+IGlzc2V0KCRkWyd1dG1fbWVkaXVtJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsndXRtX21lZGl1bSddKSA6ICcnLAogICAgICAgICAgICAgICAgICAgICd1dG1fY2FtcGFpZ24nICA9PiBpc3NldCgkZFsndXRtX2NhbXBhaWduJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkZFsndXRtX2NhbXBhaWduJ10pIDogJycsCiAgICAgICAgICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKSwKICAgICAgICAgICAgICAgICAgICAnY3JlYXRlZF9hdCcgICAgPT4gY3VycmVudF90aW1lKCdteXNxbCcpLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICR3cGRiLT5pbnNlcnQoJGN0LCAkbmV3X2NvbnRhY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgLy8g4pSA4pSAIENoYW1hciBDbGF1ZGUgcXVhbmRvIGjDoSBtZW5zYWdlbSBkbyB1c3XDoXJpbyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgIGlmICggISBlbXB0eSggJGRbJ21lbnNhZ2VtJ10gKSApIHsKICAgICAgICAkYXBpX2tleSAgPSBnZXRfb3B0aW9uKCAndm1ibmF2X2NsYXVkZV9rZXknLCAnJyApOwogICAgICAgICRtZW5zYWdlbSA9IHNhbml0aXplX3RleHRfZmllbGQoICRkWydtZW5zYWdlbSddICk7CgogICAgICAgIGlmICggJGFwaV9rZXkgKSB7CiAgICAgICAgICAgICRzeXN0ZW1fcHJvbXB0ID0gZ2V0X29wdGlvbiggJ3ZtMl9zb2ZpYV9zeXN0ZW1fcHJvbXB0JywKICAgICAgICAgICAgICAgICdWb2PDqiDDqSBTb2ZJQSwgYXNzZXNzb3JhIGRlIGV2ZW50b3MgZGEgVml2YU1haXMgRXZlbnRvcyDigJQgbyBtYWlvciBtYXJrZXRwbGFjZSBkZSBhdHJhw6fDtWVzIHBhcmEgZXZlbnRvcyBhbyB2aXZvIGRvIEJyYXNpbC4gQWp1ZGUgbyBjbGllbnRlIGEgY29udHJhdGFyIGEgYXRyYcOnw6NvIHBlcmZlaXRhIGRlIGZvcm1hIGFtaWfDoXZlbCwgY29uc3VsdGl2YSBlIG9iamV0aXZhLiBFbnRlbmRhIHRpcG8gZGUgZXZlbnRvLCBkYXRhLCBvcsOnYW1lbnRvIGUgcXVhbnRpZGFkZSBkZSBjb252aWRhZG9zLiBTdWdpcmEgYXRyYcOnw7VlcyBkaXNwb27DrXZlaXMgcXVhbmRvIHBlcnRpbmVudGUuIFJlc3Bvc3RhcyBjdXJ0YXMgKDItMyBmcmFzZXMpLCB0b20gY2Fsb3Jvc28gZSBwcm9maXNzaW9uYWwuIE51bmNhIGludmVudGUgcHJlw6dvcyBvdSBkaXNwb25pYmlsaWRhZGUg4oCUIGRpZ2EgcGFyYSBvIGNsaWVudGUgYWNlc3NhciBvIHNpdGUgcGFyYSB2YWxvcmVzIGV4YXRvcy4nCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIC8vIFt2MS41LjkzXSBJbmpldGFyIGluc3RydcOnw6NvIGRlIGNhcHR1cmEgZGUgZW1haWwgc2UgdG9nZ2xlIGF0aXZvIGUgc2Vzc8OjbyBhaW5kYSBuw6NvIHRlbSBlbWFpbAogICAgICAgICAgICBpZiAoIGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV9hc2tfZW1haWwnLCcwJykgPT09ICcxJyAmJiBlbXB0eSgkZFsnZW1haWwnXSkgKSB7CiAgICAgICAgICAgICAgICAkc3lzdGVtX3Byb21wdCAuPSAiXG5cbklOU1RSVcOHw4NPIEVTUEVDSUFMOiBBcMOzcyBvIGNsaWVudGUgZm9ybmVjZXIgbyBXaGF0c0FwcCwgcGVyZ3VudGUgbyBlLW1haWwgdXNhbmRvIGV4YXRhbWVudGUgZXN0YSBmcmFzZTogJ1NldSBlLW1haWw/IEFzc2ltIGEgZ2VudGUgZ2FyYW50ZSBvIGNvbnRhdG8gbWVzbW8gc2UgbyBXaGF0c0FwcCB0cmF2YXIg8J+UkicuIE7Do28gaW52ZW50ZSBlLW1haWxzLiBOw6NvIHJlcGl0YSBvIHBlZGlkbyBzZSBvIGNsaWVudGUgasOhIGZvcm5lY2V1LiI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRoaXN0b3JpY28gPSBpc3NldCggJGRbJ2hpc3RvcmljbyddICkgJiYgaXNfYXJyYXkoICRkWydoaXN0b3JpY28nXSApID8gJGRbJ2hpc3RvcmljbyddIDogW107CgogICAgICAgICAgICAvLyBNb250YXIgbWVuc2FnZW5zIChoaXN0b3JpY28gasOhIGluY2x1aSBhIG1zZyBhdHVhbCBubyBmaW5hbCkKICAgICAgICAgICAgJG1lc3NhZ2VzID0gW107CiAgICAgICAgICAgIGZvcmVhY2ggKCAkaGlzdG9yaWNvIGFzICRtc2cgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGlzc2V0KCAkbXNnWydyb2xlJ10sICRtc2dbJ2NvbnRlbnQnXSApICkgewogICAgICAgICAgICAgICAgICAgICRyb2xlICAgICAgID0gJG1zZ1sncm9sZSddID09PSAndXNlcicgPyAndXNlcicgOiAnYXNzaXN0YW50JzsKICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZXNbXSA9IFsgJ3JvbGUnID0+ICRyb2xlLCAnY29udGVudCcgPT4gKHN0cmluZykgJG1zZ1snY29udGVudCddIF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gR2FyYW50aXIgcXVlIHRlcm1pbmEgY29tIG1lbnNhZ2VtIGRvIHVzdcOhcmlvCiAgICAgICAgICAgIGlmICggZW1wdHkoICRtZXNzYWdlcyApIHx8ICRtZXNzYWdlc1sgY291bnQoJG1lc3NhZ2VzKSAtIDEgXVsncm9sZSddICE9PSAndXNlcicgKSB7CiAgICAgICAgICAgICAgICAkbWVzc2FnZXNbXSA9IFsgJ3JvbGUnID0+ICd1c2VyJywgJ2NvbnRlbnQnID0+ICRtZW5zYWdlbSBdOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcmVzcCA9IHdwX3JlbW90ZV9wb3N0KCAnaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbS92MS9tZXNzYWdlcycsIFsKICAgICAgICAgICAgICAgICd0aW1lb3V0JyA9PiAyMiwKICAgICAgICAgICAgICAgICdoZWFkZXJzJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ3gtYXBpLWtleScgICAgICAgICA9PiAkYXBpX2tleSwKICAgICAgICAgICAgICAgICAgICAnYW50aHJvcGljLXZlcnNpb24nID0+ICcyMDIzLTA2LTAxJywKICAgICAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJyAgICAgID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAnYm9keScgPT4gd3BfanNvbl9lbmNvZGUoIFsKICAgICAgICAgICAgICAgICAgICAnbW9kZWwnICAgICAgPT4gJ2NsYXVkZS1oYWlrdS00LTUtMjAyNTEwMDEnLAogICAgICAgICAgICAgICAgICAgICdtYXhfdG9rZW5zJyA9PiAzNTAsCiAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbScgICAgID0+ICRzeXN0ZW1fcHJvbXB0LAogICAgICAgICAgICAgICAgICAgICdtZXNzYWdlcycgICA9PiAkbWVzc2FnZXMsCiAgICAgICAgICAgICAgICBdICksCiAgICAgICAgICAgIF0gKTsKCiAgICAgICAgICAgIGlmICggISBpc193cF9lcnJvciggJHJlc3AgKSAmJiB3cF9yZW1vdGVfcmV0cmlldmVfcmVzcG9uc2VfY29kZSggJHJlc3AgKSA9PT0gMjAwICkgewogICAgICAgICAgICAgICAgJGJvZHkgID0ganNvbl9kZWNvZGUoIHdwX3JlbW90ZV9yZXRyaWV2ZV9ib2R5KCAkcmVzcCApLCB0cnVlICk7CiAgICAgICAgICAgICAgICAkcmVwbHkgPSAkYm9keVsnY29udGVudCddWzBdWyd0ZXh0J10gPz8gJyc7CiAgICAgICAgICAgICAgICBpZiAoICRyZXBseSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoIFsgJ29rJyA9PiB0cnVlLCAnbWVuc2FnZW0nID0+IHRyaW0oICRyZXBseSApIF0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBGYWxsYmFjayBzZSBBUEkgaW5kaXNwb27DrXZlbCBvdSBjaGF2ZSBhdXNlbnRlCiAgICAgICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKCBbICdvaycgPT4gdHJ1ZSwgJ21lbnNhZ2VtJyA9PiAnUG9kZSBtZSBjb250YXIgbWFpcyBzb2JyZSBzZXUgZXZlbnRvPyDwn46qJyBdICk7CiAgICB9CgogICAgcmV0dXJuIHJlc3RfZW5zdXJlX3Jlc3BvbnNlKFsnb2snID0+IHRydWVdKTsKfQoKLy8g4pSA4pSAIFJFU1Q6IGxpc3RhciBzZXNzw7VlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX3NvZmlhX3Jlc3RfbGlzdCggV1BfUkVTVF9SZXF1ZXN0ICRyZXF1ZXN0ICkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJHQgICAgID0gJHdwZGItPnByZWZpeCAuICd2bTJfc29maWFfc2Vzc2lvbnMnOwogICAgJGxpbWl0ID0gaW50dmFsKCRyZXF1ZXN0LT5nZXRfcGFyYW0oJ2xpbWl0JykgPzogMTAwKTsKICAgICRyb3dzICA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0VMRUNUICogRlJPTSAkdCBPUkRFUiBCWSBzdGFydGVkX2F0IERFU0MgTElNSVQgJGxpbWl0Iik7CiAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoJHJvd3MpOwp9CgovLyDilIDilIAgQWRtaW4gUGFnZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX3NvZmlhX3BhZ2UoKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdCA9ICR3cGRiLT5wcmVmaXggLiAndm0yX3NvZmlhX3Nlc3Npb25zJzsKICAgICR0YWJsZV9leGlzdHMgPSAoJHdwZGItPmdldF92YXIoIlNIT1cgVEFCTEVTIExJS0UgJyR0JyIpID09PSAkdCk7CiAgICBpZiAoISR0YWJsZV9leGlzdHMpIHsgdm0yX2NyZWF0ZV9zb2ZpYV90YWJsZSgpOyB9CgogICAgLy8gU3RhdHMKICAgICR0b3RhbCAgICA9ICR0YWJsZV9leGlzdHMgPyAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdCIpIDogMDsKICAgICR3YV9jYXAgICA9ICR0YWJsZV9leGlzdHMgPyAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdCBXSEVSRSB3aGF0c2FwcCBJUyBOT1QgTlVMTCBBTkQgd2hhdHNhcHAgIT0gJyciKSA6IDA7CiAgICAkY29udiAgICAgPSAkdGFibGVfZXhpc3RzID8gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHQgV0hFUkUgY29udmVydGVkPTEiKSA6IDA7CiAgICAkY29tX2RhdGEgPSAkdGFibGVfZXhpc3RzID8gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHQgV0hFUkUgZGF0YV9ldmVudG9fc3RyIElTIE5PVCBOVUxMIEFORCBkYXRhX2V2ZW50b19zdHIgIT0gJyciKSA6IDA7CiAgICAkaG9qZV90b3QgPSAkdGFibGVfZXhpc3RzID8gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHQgV0hFUkUgREFURShzdGFydGVkX2F0KT1DVVJEQVRFKCkiKSA6IDA7CiAgICAkaG9qZV93YSAgPSAkdGFibGVfZXhpc3RzID8gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHQgV0hFUkUgREFURShzdGFydGVkX2F0KT1DVVJEQVRFKCkgQU5EIHdoYXRzYXBwIElTIE5PVCBOVUxMIikgOiAwOwogICAgJHRheGFfY2FwICA9ICR0b3RhbCA+IDAgPyByb3VuZCgkd2FfY2FwLyR0b3RhbCoxMDAsMSkgOiAwOwogICAgJHRheGFfY29udiA9ICR3YV9jYXAgPiAwID8gcm91bmQoJGNvbnYvJHdhX2NhcCoxMDAsMSkgOiAwOwoKICAgIC8vIENhdGVnb3JpYXMKICAgICRjYXRzX3JhdyA9ICR0YWJsZV9leGlzdHMgPyAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCBjYXRlZ29yaWEsIENPVU5UKCopIGFzIG4gRlJPTSAkdCBXSEVSRSBjYXRlZ29yaWEgSVMgTk9UIE5VTEwgQU5EIGNhdGVnb3JpYSE9JycgR1JPVVAgQlkgY2F0ZWdvcmlhIE9SREVSIEJZIG4gREVTQyBMSU1JVCA4IikgOiBbXTsKICAgICRjYXRzID0gW107CiAgICBmb3JlYWNoICgkY2F0c19yYXcgYXMgJGMpIHsgJGNhdHNbJGMtPmNhdGVnb3JpYV0gPSAoaW50KSRjLT5uOyB9CgogICAgLy8gU2Vzc8O1ZXMgcmVjZW50ZXMKICAgICRzZXNzaW9ucyA9ICR0YWJsZV9leGlzdHMgPyAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCAqIEZST00gJHQgT1JERVIgQlkgc3RhcnRlZF9hdCBERVNDIExJTUlUIDUwIikgOiBbXTsKCiAgICAvLyBDb25maWcga2lsbCBzd2l0Y2gKICAgICRzb2ZpYV9lbmFibGVkID0gZ2V0X29wdGlvbigndm0yX3NvZmlhX2NhcHR1cmFfZW5hYmxlZCcsICcxJyk7CiAgICAkdHJpZ2dlcl9tc2dzICA9IGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV90cmlnZ2VyX21zZ3MnLCAnMScpOwogICAgJHRyaWdnZXJfaW50ZW5jYW8gPSBnZXRfb3B0aW9uKCd2bTJfc29maWFfdHJpZ2dlcl9pbnRlbmNhbycsICcxJyk7CiAgICAkdHJpZ2dlcl9xdWVybyAgICA9IGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV90cmlnZ2VyX3F1ZXJvJywgJzEnKTsKICAgICRrZXl3b3Jkc19yYXcgICAgID0gZ2V0X29wdGlvbigndm0yX3NvZmlhX2tleXdvcmRzJywgJ3F1YW50byBjdXN0YSxxdWVybyBjb250cmF0YXIsdmFsb3IscHJlw6dvLGRpc3BvbsOtdmVsLGRpc3BvbmliaWxpZGFkZSxhZ2VuZGFyJyk7CiAgICAkc29maWFfd2FfbXNnICAgICA9IGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV93YV9tc2cnLCAnU3VhIGRhdGEgYWluZGEgZXN0w6EgZGlzcG9uw612ZWwhIPCfjokgUGFyYSBnYXJhbnRpciBhbnRlcyBxdWUgb3V0cmEgcGVzc29hIHJlc2VydmUsIG1lIHBhc3NhIHNldSBXaGF0c0FwcCBlIGNvbmZpcm1vIGVtIG1pbnV0b3Mg8J+YiicpOwogICAgJHNvZmlhX3dhX2NvbmZpcm0gPSBnZXRfb3B0aW9uKCd2bWJuYXZfc29maWFfd2FfY29uZmlybScsICdQZXJmZWl0byEg8J+OiSBWb3UgdGUgZW52aWFyIG8gcG9ydGbDs2xpbyBjb21wbGV0byBlIGRpc3BvbmliaWxpZGFkZSBwZWxvIFdoYXRzQXBwLiBQb2RlIGFndWFyZGFyIScpOwoKICAgIC8vIFNhdmUgc2V0dGluZ3MKICAgIGlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXT09PSdQT1NUJyAmJiBpc3NldCgkX1BPU1RbJ3ZtMl9zb2ZpYV9zYXZlJ10pICYmIGNoZWNrX2FkbWluX3JlZmVyZXIoJ3ZtMl9zb2ZpYV9ub25jZScpKSB7CiAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX3NvZmlhX2NhcHR1cmFfZW5hYmxlZCcsIGlzc2V0KCRfUE9TVFsnc29maWFfZW5hYmxlZCddKSA/ICcxJyA6ICcwJyk7CiAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX3NvZmlhX3RyaWdnZXJfbXNncycsICAgIGludHZhbCgkX1BPU1RbJ3RyaWdnZXJfbXNncyddID8/IDIpKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc29maWFfdHJpZ2dlcl9pbnRlbmNhbycsaXNzZXQoJF9QT1NUWyd0cmlnZ2VyX2ludGVuY2FvJ10pID8gJzEnIDogJzAnKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc29maWFfdHJpZ2dlcl9xdWVybycsICAgaXNzZXQoJF9QT1NUWyd0cmlnZ2VyX3F1ZXJvJ10pID8gJzEnIDogJzAnKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc29maWFfa2V5d29yZHMnLCAgICAgICAgc2FuaXRpemVfdGV4dGFyZWFfZmllbGQoJF9QT1NUWydzb2ZpYV9rZXl3b3JkcyddID8/ICcnKSk7CiAgICAgICAgdXBkYXRlX29wdGlvbigndm0yX3NvZmlhX3dhX21zZycsICAgICAgICAgIHNhbml0aXplX3RleHRhcmVhX2ZpZWxkKCRfUE9TVFsnc29maWFfd2FfbXNnJ10gPz8gJycpKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bWJuYXZfc29maWFfd2FfY29uZmlybScsICAgc2FuaXRpemVfdGV4dGFyZWFfZmllbGQoJF9QT1NUWydzb2ZpYV93YV9jb25maXJtJ10gPz8gJycpKTsKICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MiPjxwPuKchSBDb25maWd1cmHDp8O1ZXMgc2FsdmFzITwvcD48L2Rpdj4nOwogICAgICAgIC8vIHJlbG9hZCB2YWx1ZXMKICAgICAgICAkc29maWFfZW5hYmxlZCAgICA9IGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV9jYXB0dXJhX2VuYWJsZWQnLCAnMScpOwogICAgICAgICR0cmlnZ2VyX21zZ3MgICAgID0gZ2V0X29wdGlvbigndm0yX3NvZmlhX3RyaWdnZXJfbXNncycsICcxJyk7CiAgICAgICAgJHRyaWdnZXJfaW50ZW5jYW8gPSBnZXRfb3B0aW9uKCd2bTJfc29maWFfdHJpZ2dlcl9pbnRlbmNhbycsICcxJyk7CiAgICAgICAgJHRyaWdnZXJfcXVlcm8gICAgPSBnZXRfb3B0aW9uKCd2bTJfc29maWFfdHJpZ2dlcl9xdWVybycsICcxJyk7CiAgICAgICAgJGtleXdvcmRzX3JhdyAgICAgPSBnZXRfb3B0aW9uKCd2bTJfc29maWFfa2V5d29yZHMnLCAnJyk7CiAgICAgICAgJHNvZmlhX3dhX21zZyAgICAgPSBnZXRfb3B0aW9uKCd2bTJfc29maWFfd2FfbXNnJywgJycpOwogICAgICAgICRzb2ZpYV93YV9jb25maXJtID0gZ2V0X29wdGlvbigndm1ibmF2X3NvZmlhX3dhX2NvbmZpcm0nLCAnJyk7CiAgICB9CgogICAgJGFjdGl2ZV90YWIgPSBpc3NldCgkX0dFVFsndGFiJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsndGFiJ10pIDogJ2FuYWx5dGljcyc7CiAgICAkYmFzZV91cmwgICA9IGFkbWluX3VybCgnYWRtaW4ucGhwP3BhZ2U9dm0yLXNvZmlhJyk7CiAgICA/Pgo8ZGl2IGNsYXNzPSJ3cmFwIHZtMi13cmFwIj4KPHN0eWxlPgoudm0yLXNvZmlhLWhlYWRlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIzFhMGEyZSwjMmQxYjY5KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyMHB4IDI0cHg7bWFyZ2luLWJvdHRvbToyMHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjM2QyYjZkfQoudm0yLXNvZmlhLWhlYWRlciBoMXttYXJnaW46MDtjb2xvcjojZmZmO2ZvbnQtc2l6ZToyMnB4O2ZvbnQtd2VpZ2h0OjgwMH0KLnZtMi1zb2ZpYS1oZWFkZXIgcHttYXJnaW46NHB4IDAgMDtjb2xvcjojYTc4YmZhO2ZvbnQtc2l6ZToxM3B4fQoudm0yLXNvZmlhLWJhZGdle21hcmdpbi1sZWZ0OmF1dG87YmFja2dyb3VuZDojN2MzYWVkO2NvbG9yOiNmZmY7cGFkZGluZzo1cHggMTRweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwfQoudm0yLXNvZmlhLXRhYnN7ZGlzcGxheTpmbGV4O2dhcDowO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNlNWU3ZWI7bWFyZ2luLWJvdHRvbToyMHB4O292ZXJmbG93LXg6YXV0b30KLnZtMi1zb2ZpYS10YWJ7cGFkZGluZzoxMHB4IDE4cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM2YjcyODA7Ym9yZGVyLWJvdHRvbTozcHggc29saWQgdHJhbnNwYXJlbnQ7d2hpdGUtc3BhY2U6bm93cmFwO3RyYW5zaXRpb246YWxsIC4yc30KLnZtMi1zb2ZpYS10YWI6aG92ZXJ7Y29sb3I6IzdjM2FlZDtiYWNrZ3JvdW5kOiNmNWYzZmZ9Ci52bTItc29maWEtdGFiLmFjdGl2ZXtjb2xvcjojN2MzYWVkO2JvcmRlci1ib3R0b20tY29sb3I6IzdjM2FlZH0KLnNvZmlhLWtwaS1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZml0LG1pbm1heCgxNDBweCwxZnIpKTtnYXA6MTJweDttYXJnaW4tYm90dG9tOjIwcHh9Ci5zb2ZpYS1rcGl7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNnB4O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4yc30KLnNvZmlhLWtwaTpob3Zlcntib3JkZXItY29sb3I6IzdjM2FlZDtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgxMjQsNTgsMjM3LC4xKX0KLnNvZmlhLWtwaS12YWx7Zm9udC1zaXplOjI4cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiMxZjI5Mzc7ZGlzcGxheTpibG9ja30KLnNvZmlhLWtwaS1sYmx7Zm9udC1zaXplOjExcHg7Y29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOjRweH0KLnNvZmlhLWtwaS1zdWJ7Zm9udC1zaXplOjEwcHg7Y29sb3I6IzljYTNhZjttYXJnaW4tdG9wOjJweH0KLnNvZmlhLWtwaS5wdXJwbGUgLnNvZmlhLWtwaS12YWx7Y29sb3I6IzdjM2FlZH0KLnNvZmlhLWtwaS5ncmVlbiAuc29maWEta3BpLXZhbHtjb2xvcjojMDU5NjY5fQouc29maWEta3BpLmFtYmVyIC5zb2ZpYS1rcGktdmFse2NvbG9yOiNkOTc3MDZ9Ci5zb2ZpYS10YWJsZS13cmFwe2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMHB4O292ZXJmbG93LXg6YXV0b30KLnNvZmlhLXRhYmxlLXdyYXAgdGFibGV7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7bWluLXdpZHRoOjYwMHB4fQouc29maWEtdGFibGUtd3JhcCB0aHtwYWRkaW5nOjEwcHggMTJweDtmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwO3RleHQtYWxpZ246bGVmdDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjNmNGY2O2JhY2tncm91bmQ6I2Y5ZmFmYn0KLnNvZmlhLXRhYmxlLXdyYXAgdGR7cGFkZGluZzoxMHB4IDEycHg7Zm9udC1zaXplOjEzcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2Y5ZmFmYjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ci5zb2ZpYS10YWJsZS13cmFwIHRyOmxhc3QtY2hpbGQgdGR7Ym9yZGVyLWJvdHRvbTpub25lfQouc29maWEtdGFibGUtd3JhcCB0cjpob3ZlciB0ZHtiYWNrZ3JvdW5kOiNmYWY1ZmZ9Ci5zb2ZpYS1iYWRnZXtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMH0KLnNvZmlhLWJhZGdlLWluZmFudGlse2JhY2tncm91bmQ6I2RiZWFmZTtjb2xvcjojMWQ0ZWQ4fQouc29maWEtYmFkZ2UtY2FzYW1lbnRve2JhY2tncm91bmQ6I2VkZTlmZTtjb2xvcjojNmQyOGQ5fQouc29maWEtYmFkZ2UtMTVhbm9ze2JhY2tncm91bmQ6I2ZjZTdmMztjb2xvcjojOWQxNzRkfQouc29maWEtYmFkZ2UtYWR1bHRve2JhY2tncm91bmQ6I2YzZjRmNjtjb2xvcjojMzc0MTUxfQouc29maWEtYmFkZ2UtY29ycG9yYXRpdm97YmFja2dyb3VuZDojZDFmYWU1O2NvbG9yOiMwNjVmNDZ9Ci5zb2ZpYS1iYWRnZS1mb3JtYXR1cmF7YmFja2dyb3VuZDojZmVkN2FhO2NvbG9yOiM5MjQwMGV9Ci5zb2ZpYS1iYWRnZS1hbHRhe2JhY2tncm91bmQ6I2ZlZTJlMjtjb2xvcjojOTkxYjFifQouc29maWEtYmFkZ2UtbWVkaWF7YmFja2dyb3VuZDojZmVmM2M3O2NvbG9yOiM5MjQwMGV9Ci5zb2ZpYS1iYWRnZS1iYWl4YXtiYWNrZ3JvdW5kOiNmM2Y0ZjY7Y29sb3I6IzZiNzI4MH0KLnNvZmlhLWJhZGdlLWNhcHR1cmFkb3tiYWNrZ3JvdW5kOiNkMWZhZTU7Y29sb3I6IzA2NWY0Nn0KLnNvZmlhLWJhZGdlLW5hb3tiYWNrZ3JvdW5kOiNmM2Y0ZjY7Y29sb3I6IzZiNzI4MH0KLnNvZmlhLWJhci1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjEwcHh9Ci5zb2ZpYS1iYXItbGFiZWx7d2lkdGg6MTAwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzM3NDE1MTtmbGV4LXNocmluazowfQouc29maWEtYmFyLXRyYWNre2ZsZXg6MTtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kOiNmM2Y0ZjY7Ym9yZGVyLXJhZGl1czo2cHg7b3ZlcmZsb3c6aGlkZGVufQouc29maWEtYmFyLWZpbGx7aGVpZ2h0OjEwMCU7Ym9yZGVyLXJhZGl1czo2cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6OHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZmZmfQouc29maWEtYmFyLWNvdW50e3dpZHRoOjQwcHg7Zm9udC1zaXplOjEycHg7dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojNmI3MjgwfQouc29maWEtZnVubmVsLXN0ZXB7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDttYXJnaW4tYm90dG9tOjEwcHh9Ci5zb2ZpYS1mdW5uZWwtYmFye2ZsZXg6MTtoZWlnaHQ6MzhweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAxNHB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojZmZmfQouc29maWEtZnVubmVsLW51bXt3aWR0aDo1NXB4O2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjgwMDt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiMxZjI5Mzd9Ci5zb2ZpYS1mdW5uZWwtcGN0e3dpZHRoOjQ1cHg7Zm9udC1zaXplOjExcHg7Y29sb3I6IzZiNzI4MH0KLnNvZmlhLXNlY3Rpb257YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoyMHB4O21hcmdpbi1ib3R0b206MTZweH0KLnNvZmlhLXNlY3Rpb24gaDN7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbjowIDAgMTRweDtjb2xvcjojMWYyOTM3fQouc29maWEtdHJpZ2dlci1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtwYWRkaW5nOjEycHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZjNmNGY2fQouc29maWEtdHJpZ2dlci1yb3c6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9Ci5zb2ZpYS10cmlnZ2VyLWxhYmVse2ZsZXg6MTtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzM3NDE1MX0KLnNvZmlhLXRyaWdnZXItZGVzY3tmb250LXNpemU6MTFweDtjb2xvcjojNmI3MjgwO21hcmdpbi10b3A6MnB4fQouc29maWEtdG9nZ2xle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjQycHg7aGVpZ2h0OjI0cHg7ZmxleC1zaHJpbms6MH0KLnNvZmlhLXRvZ2dsZSBpbnB1dHtvcGFjaXR5OjA7d2lkdGg6MDtoZWlnaHQ6MH0KLnNvZmlhLXRvZ2dsZS1zbGlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOnBvaW50ZXI7aW5zZXQ6MDtiYWNrZ3JvdW5kOiNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czoyNHB4O3RyYW5zaXRpb246LjNzfQouc29maWEtdG9nZ2xlLXNsaWRlcjo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjE4cHg7d2lkdGg6MThweDtsZWZ0OjNweDtib3R0b206M3B4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOi4zc30KLnNvZmlhLXRvZ2dsZSBpbnB1dDpjaGVja2VkKy5zb2ZpYS10b2dnbGUtc2xpZGVye2JhY2tncm91bmQ6IzdjM2FlZH0KLnNvZmlhLXRvZ2dsZSBpbnB1dDpjaGVja2VkKy5zb2ZpYS10b2dnbGUtc2xpZGVyOjpiZWZvcmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMThweCl9Ci5zb2ZpYS1ydWxlLXJvd3tiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTRweDttYXJnaW4tYm90dG9tOjEwcHh9Ci5zb2ZpYS1ydWxlLXRpdGxle2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMzc0MTUxO21hcmdpbi1ib3R0b206NnB4fQouc29maWEtcnVsZS1ib2R5e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODB9Ci5zb2ZpYS1ydWxlLWJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6I2VkZTlmZTtjb2xvcjojNmQyOGQ5O2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjJweCA4cHg7Ym9yZGVyLXJhZGl1czoxMnB4O21hcmdpbi1yaWdodDo0cHh9Ci5zb2ZpYS1wbGFuLXBoYXNle2JvcmRlci1sZWZ0OjNweCBzb2xpZCAjN2MzYWVkO3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmYWY1ZmY7Ym9yZGVyLXJhZGl1czowIDhweCA4cHggMH0KLnNvZmlhLXBsYW4tcGhhc2UgaDR7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbjowIDAgNnB4O2NvbG9yOiM2ZDI4ZDl9Ci5zb2ZpYS1wbGFuLXBoYXNlIHB7Zm9udC1zaXplOjEycHg7Y29sb3I6IzRiNTU2MzttYXJnaW46MH0KLnNvZmlhLXBsYW4tZG9uZXtib3JkZXItbGVmdC1jb2xvcjojMDU5NjY5O2JhY2tncm91bmQ6I2YwZmRmNH0KLnNvZmlhLXBsYW4tZG9uZSBoNHtjb2xvcjojMDY1ZjQ2fQouc29maWEtcGxhbi1kb2luZ3tib3JkZXItbGVmdC1jb2xvcjojZDk3NzA2O2JhY2tncm91bmQ6I2ZmZmJlYn0KLnNvZmlhLXBsYW4tZG9pbmcgaDR7Y29sb3I6IzkyNDAwZX0KQG1lZGlhKG1heC13aWR0aDo2MDBweCl7LnNvZmlhLWtwaS1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyfS5zb2ZpYS1rcGktdmFse2ZvbnQtc2l6ZToyMnB4fX0KPC9zdHlsZT4KCjxkaXYgY2xhc3M9InZtMi1zb2ZpYS1oZWFkZXIiPgogIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MzJweCI+8J+noDwvc3Bhbj4KICA8ZGl2PgogICAgPGgxPlNvZklBIEludGVsbGlnZW5jZTwvaDE+CiAgICA8cD5DYXB0dXJhIHNpbmFpcyBkYXMgY29udmVyc2FzIHBhcmEgdmVuZGVyIG1haXMgYXV0b21hdGljYW1lbnRlPC9wPgogIDwvZGl2PgogIDxzcGFuIGNsYXNzPSJ2bTItc29maWEtYmFkZ2UiPuKaoSB2MS4wPC9zcGFuPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InZtMi1zb2ZpYS10YWJzIj4KICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGJhc2VfdXJsLicmdGFiPWFuYWx5dGljcycpOyA/PiIgY2xhc3M9InZtMi1zb2ZpYS10YWIgPD9waHAgZWNobyAkYWN0aXZlX3RhYj09PSdhbmFseXRpY3MnPydhY3RpdmUnOicnOyA/PiI+8J+TiiBBbmFseXRpY3M8L2E+CiAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRiYXNlX3VybC4nJnRhYj1jYXB0dXJhJyk7ID8+IiBjbGFzcz0idm0yLXNvZmlhLXRhYiA8P3BocCBlY2hvICRhY3RpdmVfdGFiPT09J2NhcHR1cmEnPydhY3RpdmUnOicnOyA/PiI+8J+TsiBDYXB0dXJhIFdBPC9hPgogIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkYmFzZV91cmwuJyZ0YWI9YXV0b21hY29lcycpOyA/PiIgY2xhc3M9InZtMi1zb2ZpYS10YWIgPD9waHAgZWNobyAkYWN0aXZlX3RhYj09PSdhdXRvbWFjb2VzJz8nYWN0aXZlJzonJzsgPz4iPvCfpJYgQXV0b21hw6fDtWVzPC9hPgogIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkYmFzZV91cmwuJyZ0YWI9cGxhbm8nKTsgPz4iIGNsYXNzPSJ2bTItc29maWEtdGFiIDw/cGhwIGVjaG8gJGFjdGl2ZV90YWI9PT0ncGxhbm8nPydhY3RpdmUnOicnOyA/PiI+8J+Pl++4jyBQbGFubzwvYT4KICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGJhc2VfdXJsLicmdGFiPWNvbmhlY2ltZW50bycpOyA/PiIgY2xhc3M9InZtMi1zb2ZpYS10YWIgPD9waHAgZWNobyAkYWN0aXZlX3RhYj09PSdjb25oZWNpbWVudG8nPydhY3RpdmUnOicnOyA/PiI+8J+TmiBCYXNlIGRlIENvbmhlY2ltZW50bzwvYT4KICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGJhc2VfdXJsLicmdGFiPXByb21wdCcpOyA/PiIgY2xhc3M9InZtMi1zb2ZpYS10YWIgPD9waHAgZWNobyAkYWN0aXZlX3RhYj09PSdwcm9tcHQnPydhY3RpdmUnOicnOyA/PiI+4pqZ77iPIFByb21wdDwvYT4KICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGJhc2VfdXJsLicmdGFiPXNldHVwJyk7ID8+IiBjbGFzcz0idm0yLXNvZmlhLXRhYiA8P3BocCBlY2hvICRhY3RpdmVfdGFiPT09J3NldHVwJz8nYWN0aXZlJzonJzsgPz4iPvCflKcgU2V0dXA8L2E+CjwvZGl2PgoKPD9waHAgaWYgKCRhY3RpdmVfdGFiID09PSAnYW5hbHl0aWNzJyk6ID8+CjwhLS0g4pWQ4pWQ4pWQIEFOQUxZVElDUyB2MiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgLS0+Cjw/cGhwCi8vIOKUgOKUgCBQZXLDrW9kbyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKJHBlcmlvZCAgPSBpc3NldCgkX0dFVFsncGVyaW9kJ10pID8gc2FuaXRpemVfdGV4dF9maWVsZCgkX0dFVFsncGVyaW9kJ10pIDogJzMwZCc7CiRhbmFfdXJsID0gYWRtaW5fdXJsKCdhZG1pbi5waHA/cGFnZT12bTItc29maWEmdGFiPWFuYWx5dGljcycpOwovLyBDYWxjdWxhciBsaW1pdGVzIGVtIFVUQyBjb20gYmFzZSBubyBob3LDoXJpbyBkZSBCcmFzw61saWEgKHN0YXJ0ZWRfYXQgw6kgc2Fsdm8gZW0gVVRDKQokdHpfc3AgID0gbmV3IERhdGVUaW1lWm9uZSgnQW1lcmljYS9TYW9fUGF1bG8nKTsKJHR6X3V0YyA9IG5ldyBEYXRlVGltZVpvbmUoJ1VUQycpOwokbm93X3NwID0gbmV3IERhdGVUaW1lKCdub3cnLCAkdHpfc3ApOwokd2hlcmVfcCA9ICcnOwpzd2l0Y2ggKCRwZXJpb2QpIHsKICAgIGNhc2UgJ3RvZGF5JzoKICAgICAgICAkZDAgPSBuZXcgRGF0ZVRpbWUoJG5vd19zcC0+Zm9ybWF0KCdZLW0tZCcpIC4gJyAwMDowMDowMCcsICR0el9zcCk7ICRkMC0+c2V0VGltZXpvbmUoJHR6X3V0Yyk7CiAgICAgICAgJGQxID0gbmV3IERhdGVUaW1lKCRub3dfc3AtPmZvcm1hdCgnWS1tLWQnKSAuICcgMjM6NTk6NTknLCAkdHpfc3ApOyAkZDEtPnNldFRpbWV6b25lKCR0el91dGMpOwogICAgICAgICR3aGVyZV9wID0gIkFORCBzdGFydGVkX2F0ID49ICd7JGQwLT5mb3JtYXQoJ1ktbS1kIEg6aTpzJyl9JyBBTkQgc3RhcnRlZF9hdCA8PSAneyRkMS0+Zm9ybWF0KCdZLW0tZCBIOmk6cycpfSciOwogICAgICAgIGJyZWFrOwogICAgY2FzZSAnN2QnOgogICAgICAgICRkMCA9IG5ldyBEYXRlVGltZSgnbm93JywgJHR6X3NwKTsgJGQwLT5tb2RpZnkoJy03IGRheXMnKTsgJGQwLT5zZXRUaW1lem9uZSgkdHpfdXRjKTsKICAgICAgICAkd2hlcmVfcCA9ICJBTkQgc3RhcnRlZF9hdCA+PSAneyRkMC0+Zm9ybWF0KCdZLW0tZCBIOmk6cycpfSciOwogICAgICAgIGJyZWFrOwogICAgY2FzZSAnMzBkJzoKICAgICAgICAkZDAgPSBuZXcgRGF0ZVRpbWUoJ25vdycsICR0el9zcCk7ICRkMC0+bW9kaWZ5KCctMzAgZGF5cycpOyAkZDAtPnNldFRpbWV6b25lKCR0el91dGMpOwogICAgICAgICR3aGVyZV9wID0gIkFORCBzdGFydGVkX2F0ID49ICd7JGQwLT5mb3JtYXQoJ1ktbS1kIEg6aTpzJyl9JyI7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlICdtb250aCc6CiAgICAgICAgJGQwID0gbmV3IERhdGVUaW1lKCRub3dfc3AtPmZvcm1hdCgnWS1tJykgLiAnLTAxIDAwOjAwOjAwJywgJHR6X3NwKTsgJGQwLT5zZXRUaW1lem9uZSgkdHpfdXRjKTsKICAgICAgICAkd2hlcmVfcCA9ICJBTkQgc3RhcnRlZF9hdCA+PSAneyRkMC0+Zm9ybWF0KCdZLW0tZCBIOmk6cycpfSciOwogICAgICAgIGJyZWFrOwogICAgZGVmYXVsdDogJHdoZXJlX3AgPSAnJzsKfQoKLy8g4pSA4pSAIEZpbHRybyBjYW5hbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKJGNhbmFsX2ZpbHRlciA9IHNhbml0aXplX3RleHRfZmllbGQoJF9HRVRbJ2NhbmFsJ10gPz8gJycpOwokd2hlcmVfY2FuYWwgID0gJyc7CmlmICgkY2FuYWxfZmlsdGVyID09PSAnd2FiYScpIHsKICAgICR3aGVyZV9jYW5hbCA9ICJBTkQgY2FuYWxfb3JpZ2VtIElTIE5PVCBOVUxMIEFORCBjYW5hbF9vcmlnZW0gIT0gJyciOwp9IGVsc2VpZiAoJGNhbmFsX2ZpbHRlciA9PT0gJ3NpdGUnKSB7CiAgICAkd2hlcmVfY2FuYWwgPSAiQU5EIChjYW5hbF9vcmlnZW0gSVMgTlVMTCBPUiBjYW5hbF9vcmlnZW0gPSAnJykiOwp9CiR3aGVyZV9mdWxsID0gIiR3aGVyZV9wICR3aGVyZV9jYW5hbCI7CgovLyDilIDilIAgU3RhdHMgcGVyw61vZG8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiRwX3RvdGFsICAgID0gJHRhYmxlX2V4aXN0cyA/IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0IFdIRVJFIDE9MSAkd2hlcmVfZnVsbCIpIDogMDsKJHBfZW5nYWogICAgPSAkdGFibGVfZXhpc3RzID8gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHQgV0hFUkUgbWVuc2FnZW5zX2NvdW50ID49IDMgJHdoZXJlX2Z1bGwiKSA6IDA7CiRwX3dhICAgICAgID0gJHRhYmxlX2V4aXN0cyA/IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0IFdIRVJFIHdoYXRzYXBwIElTIE5PVCBOVUxMIEFORCB3aGF0c2FwcCAhPSAnJyAkd2hlcmVfZnVsbCIpIDogMDsKJHBfZGF0YV9ldiAgPSAkdGFibGVfZXhpc3RzID8gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHQgV0hFUkUgZGF0YV9ldmVudG9fc3RyIElTIE5PVCBOVUxMIEFORCBkYXRhX2V2ZW50b19zdHIgIT0gJycgJHdoZXJlX2Z1bGwiKSA6IDA7CiRwX21zZ3Nfc3VtID0gJHRhYmxlX2V4aXN0cyA/IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT0FMRVNDRShTVU0obWVuc2FnZW5zX2NvdW50KSwwKSBGUk9NICR0IFdIRVJFIDE9MSAkd2hlcmVfZnVsbCIpIDogMDsKJHBfZWFybHkgICAgPSAkdGFibGVfZXhpc3RzID8gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHQgV0hFUkUgbWVuc2FnZW5zX2NvdW50IDw9IDIgJHdoZXJlX2Z1bGwiKSA6IDA7Ci8vIFdBQkEgZXNwZWPDrWZpY28gKHNlbXByZSwgaW5kZXBlbmRlbnRlIGRvIGZpbHRybyBkZSBjYW5hbCkKJHBfd2FiYV90b3RhbCAgPSAkdGFibGVfZXhpc3RzID8gKGludCkkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHQgV0hFUkUgY2FuYWxfb3JpZ2VtIElTIE5PVCBOVUxMIEFORCBjYW5hbF9vcmlnZW0gIT0gJyciKSA6IDA7CiRwX3dhYmFfcGVyaW9kID0gJHRhYmxlX2V4aXN0cyAmJiAkd2hlcmVfcCA/IChpbnQpJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0IFdIRVJFIGNhbmFsX29yaWdlbSBJUyBOT1QgTlVMTCBBTkQgY2FuYWxfb3JpZ2VtICE9ICcnICR3aGVyZV9wIikgOiAkcF93YWJhX3RvdGFsOwokcF93YWJhX3dhICAgICA9ICR0YWJsZV9leGlzdHMgPyAoaW50KSR3cGRiLT5nZXRfdmFyKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdCBXSEVSRSBjYW5hbF9vcmlnZW0gSVMgTk9UIE5VTEwgQU5EIGNhbmFsX29yaWdlbSAhPSAnJyBBTkQgd2hhdHNhcHAgSVMgTk9UIE5VTEwgQU5EIHdoYXRzYXBwICE9ICcnIikgOiAwOwokdGF4YV9hYmFuZG9ubyA9ICRwX3RvdGFsID4gMCA/IHJvdW5kKCRwX2Vhcmx5IC8gJHBfdG90YWwgKiAxMDApIDogMDsKCi8vIOKUgOKUgCBSZWNlaXRhIGF0cmlidcOtZGEgKEhQT1MpIOKAlCBhcGVuYXMgcGVkaWRvcyBjcmlhZG9zIEFQw5NTIGEgc2Vzc8OjbyBTb2ZJQSDilIDilIAKLy8gTWFwYTogcGhvbmVfbm9ybWFsaXphZG8gPT4gc3RhcnRlZF9hdF91dGMgKHNlc3PDo28gbWFpcyBhbnRpZ2Egbm8gcGVyw61vZG8pCiRwaG9uZV9zZXNzaW9uX21hcCA9IFtdOwppZiAoJHRhYmxlX2V4aXN0cyAmJiAkcF93YSA+IDApIHsKICAgICRyb3dzX3BoID0gJHdwZGItPmdldF9yZXN1bHRzKCJTRUxFQ1Qgd2hhdHNhcHAsIHN0YXJ0ZWRfYXQgRlJPTSAkdCBXSEVSRSB3aGF0c2FwcCBJUyBOT1QgTlVMTCBBTkQgd2hhdHNhcHAgIT0gJycgJHdoZXJlX2Z1bGwgT1JERVIgQlkgc3RhcnRlZF9hdCBBU0MiKTsKICAgIGZvcmVhY2ggKCRyb3dzX3BoIGFzICRyb3cpIHsKICAgICAgICAkYyA9IHByZWdfcmVwbGFjZSgnL1teMC05XS8nLCAnJywgJHJvdy0+d2hhdHNhcHAgPz8gJycpOwogICAgICAgIGlmIChzdHJsZW4oJGMpID49IDEwICYmICFpc3NldCgkcGhvbmVfc2Vzc2lvbl9tYXBbJGNdKSkgewogICAgICAgICAgICAkcGhvbmVfc2Vzc2lvbl9tYXBbJGNdID0gJHJvdy0+c3RhcnRlZF9hdDsgLy8gcHJpbWVpcmEgc2Vzc8OjbyBubyBwZXLDrW9kbwogICAgICAgIH0KICAgIH0KfQokc29maWFfcGhvbmVzICA9IGFycmF5X2tleXMoJHBob25lX3Nlc3Npb25fbWFwKTsKJHJlY2VpdGFfc29maWEgPSAwLjA7CiRwZWRpZG9zX3NvZmlhID0gMDsKJHRpY2tldF9tZWRpbyAgPSAwLjA7CiR3Y28gPSAkd3BkYi0+cHJlZml4IC4gJ3djX29yZGVycyc7CiR3Y2EgPSAkd3BkYi0+cHJlZml4IC4gJ3djX29yZGVyX2FkZHJlc3Nlcyc7CmlmICghZW1wdHkoJHBob25lX3Nlc3Npb25fbWFwKSAmJiAkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAnJHdjbyciKSA9PT0gJHdjbykgewogICAgLy8gQnVzY2EgcGVkaWRvcyBlbSB0b2RvcyBvcyBzdGF0dXMgcmVsZXZhbnRlcywgY29tIGRhdGEgZSB0ZWxlZm9uZQogICAgJGFsbF9vcmRzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICJTRUxFQ1Qgby5pZCwgby50b3RhbF9hbW91bnQsIG8uZGF0ZV9jcmVhdGVkX2dtdCwgYS5waG9uZSBGUk9NICR3Y28gbwogICAgICAgICBJTk5FUiBKT0lOICR3Y2EgYSBPTiBhLm9yZGVyX2lkID0gby5pZCBBTkQgYS5hZGRyZXNzX3R5cGUgPSAnYmlsbGluZycKICAgICAgICAgV0hFUkUgby5zdGF0dXMgSU4gKCd3Yy1wcm9jZXNzaW5nJywnd2Mtc2lnbmluZy1wZW5kaW5nJywnd2MtY29udHJhY3Qtc2lnbmVkJywnd2MtY29tcGxldGVkJykiCiAgICApOwogICAgLy8gTWFwYSBwb3Igw7psdGltb3MgOSBkw61naXRvcyBwYXJhIHRvbGVyw6JuY2lhIGRlIGZvcm1hdG8gKGNvbS9zZW0gRERJIDU1KQogICAgJHBob25lX3Nlc3Npb25fbWFwOSA9IFtdOwogICAgZm9yZWFjaCAoJHBob25lX3Nlc3Npb25fbWFwIGFzICRmdWxsID0+ICR0cykgewogICAgICAgICR0YWlsID0gc3Vic3RyKCRmdWxsLCAtOSk7CiAgICAgICAgaWYgKCFpc3NldCgkcGhvbmVfc2Vzc2lvbl9tYXA5WyR0YWlsXSkpIHsKICAgICAgICAgICAgJHBob25lX3Nlc3Npb25fbWFwOVskdGFpbF0gPSBbJ3RzJyA9PiAkdHMsICdmdWxsJyA9PiAkZnVsbF07CiAgICAgICAgfQogICAgfQogICAgJHNlZW5faWRzID0gW107CiAgICBmb3JlYWNoICgkYWxsX29yZHMgYXMgJG9yZCkgewogICAgICAgIGlmIChpbl9hcnJheSgkb3JkLT5pZCwgJHNlZW5faWRzKSkgY29udGludWU7CiAgICAgICAgJGNwID0gcHJlZ19yZXBsYWNlKCcvW14wLTldLycsICcnLCAkb3JkLT5waG9uZSA/PyAnJyk7CiAgICAgICAgaWYgKCEkY3ApIGNvbnRpbnVlOwogICAgICAgIC8vIFRlbnRhIG1hdGNoIGV4YXRvIHByaW1laXJvLCBkZXBvaXMgcG9yIMO6bHRpbW9zIDkgZMOtZ2l0b3MKICAgICAgICAkbWF0Y2hlZF90cyA9IG51bGw7CiAgICAgICAgaWYgKGlzc2V0KCRwaG9uZV9zZXNzaW9uX21hcFskY3BdKSkgewogICAgICAgICAgICAkbWF0Y2hlZF90cyA9ICRwaG9uZV9zZXNzaW9uX21hcFskY3BdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0YWlsOSA9IHN1YnN0cigkY3AsIC05KTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRwaG9uZV9zZXNzaW9uX21hcDlbJHRhaWw5XSkpIHsKICAgICAgICAgICAgICAgICRtYXRjaGVkX3RzID0gJHBob25lX3Nlc3Npb25fbWFwOVskdGFpbDldWyd0cyddOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkbWF0Y2hlZF90cyAmJiAkb3JkLT5kYXRlX2NyZWF0ZWRfZ210ID49ICRtYXRjaGVkX3RzKSB7CiAgICAgICAgICAgICRyZWNlaXRhX3NvZmlhICs9IGZsb2F0dmFsKCRvcmQtPnRvdGFsX2Ftb3VudCk7CiAgICAgICAgICAgICRwZWRpZG9zX3NvZmlhKys7CiAgICAgICAgICAgICRzZWVuX2lkc1tdID0gJG9yZC0+aWQ7CiAgICAgICAgfQogICAgfQoKICAgIC8vIEF0cmlidWnDp8OjbyBhZGljaW9uYWwgcG9yIGN1cG9tIFNPRklBLSAocGVkaWRvcyBxdWUgdXNhcmFtIGN1cG9tIGdlcmFkbyBwZWxhIFNvZklBKQogICAgJGNvdXBvbl9vcmRlcl9pZHMgPSAkd3BkYi0+Z2V0X2NvbCgKICAgICAgICAiU0VMRUNUIERJU1RJTkNUIG9pLm9yZGVyX2lkCiAgICAgICAgIEZST00geyR3cGRiLT5wcmVmaXh9d29vY29tbWVyY2Vfb3JkZXJfaXRlbXMgb2kKICAgICAgICAgSU5ORVIgSk9JTiB7JHdwZGItPnByZWZpeH13b29jb21tZXJjZV9vcmRlcl9pdGVtbWV0YSBvaW0gT04gb2ltLm9yZGVyX2l0ZW1faWQgPSBvaS5vcmRlcl9pdGVtX2lkIEFORCBvaW0ubWV0YV9rZXkgPSAnQ291cG9uIGFtb3VudCcKICAgICAgICAgSU5ORVIgSk9JTiB7JHdwZGItPnBvc3RzfSBjcCBPTiBjcC5wb3N0X3R5cGU9J3Nob3BfY291cG9uJyBBTkQgY3AucG9zdF9zdGF0dXM9J3B1Ymxpc2gnIEFORCBjcC5wb3N0X3RpdGxlID0gb2kub3JkZXJfaXRlbV9uYW1lIEFORCBjcC5wb3N0X3RpdGxlIExJS0UgJ1NPRklBLSUnIgogICAgKTsKICAgIGlmICghZW1wdHkoJGNvdXBvbl9vcmRlcl9pZHMpKSB7CiAgICAgICAgJGNvdXBvbl9vcmRzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICAgICAiU0VMRUNUIG8uaWQsIG8udG90YWxfYW1vdW50IEZST00gJHdjbyBvCiAgICAgICAgICAgICBXSEVSRSBvLmlkIElOICgiIC4gaW1wbG9kZSgnLCcsIGFycmF5X21hcCgnaW50dmFsJywgJGNvdXBvbl9vcmRlcl9pZHMpKSAuICIpCiAgICAgICAgICAgICBBTkQgby5zdGF0dXMgSU4gKCd3Yy1wcm9jZXNzaW5nJywnd2Mtc2lnbmluZy1wZW5kaW5nJywnd2MtY29udHJhY3Qtc2lnbmVkJywnd2MtY29tcGxldGVkJykiCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoICgkY291cG9uX29yZHMgYXMgJGNvcmQpIHsKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkY29yZC0+aWQsICRzZWVuX2lkcykpIHsKICAgICAgICAgICAgICAgICRyZWNlaXRhX3NvZmlhICs9IGZsb2F0dmFsKCRjb3JkLT50b3RhbF9hbW91bnQpOwogICAgICAgICAgICAgICAgJHBlZGlkb3Nfc29maWErKzsKICAgICAgICAgICAgICAgICRzZWVuX2lkc1tdID0gJGNvcmQtPmlkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICR0aWNrZXRfbWVkaW8gPSAkcGVkaWRvc19zb2ZpYSA+IDAgPyByb3VuZCgkcmVjZWl0YV9zb2ZpYSAvICRwZWRpZG9zX3NvZmlhLCAyKSA6IDA7Cn0KCi8vIOKUgOKUgCBDdXBvbnMgU29mSUEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiRkYXRlX3doZXJlX2N1cG9tID0gJyc7CmlmICghZW1wdHkoJHdoZXJlX3ApKSB7CiAgICAvLyByZXV0aWxpemEgbyBtZXNtbyBpbnRlcnZhbG8gZG8gcGVyw61vZG8sIG1hcyBzb2JyZSBwb3N0X2RhdGUgKEJSVCkKICAgIGlmICgkcGVyaW9kID09PSAndG9kYXknKSB7CiAgICAgICAgJGRhdGVfd2hlcmVfY3Vwb20gPSAiQU5EIERBVEUocG9zdF9kYXRlKSA9ICd7JG5vd19zcC0+Zm9ybWF0KCdZLW0tZCcpfSciOwogICAgfSBlbHNlaWYgKCRwZXJpb2QgPT09ICc3ZCcpIHsKICAgICAgICAkZGF0ZV93aGVyZV9jdXBvbSA9ICJBTkQgcG9zdF9kYXRlID49IERBVEVfU1VCKE5PVygpLCBJTlRFUlZBTCA3IERBWSkiOwogICAgfSBlbHNlaWYgKCRwZXJpb2QgPT09ICczMGQnKSB7CiAgICAgICAgJGRhdGVfd2hlcmVfY3Vwb20gPSAiQU5EIHBvc3RfZGF0ZSA+PSBEQVRFX1NVQihOT1coKSwgSU5URVJWQUwgMzAgREFZKSI7CiAgICB9IGVsc2VpZiAoJHBlcmlvZCA9PT0gJ21vbnRoJykgewogICAgICAgICRkYXRlX3doZXJlX2N1cG9tID0gIkFORCBEQVRFX0ZPUk1BVChwb3N0X2RhdGUsJyVZLSVtJykgPSAneyRub3dfc3AtPmZvcm1hdCgnWS1tJyl9JyI7CiAgICB9Cn0KJHBfY3Vwb25zID0gKGludCkkd3BkYi0+Z2V0X3ZhcigKICAgICJTRUxFQ1QgQ09VTlQoKikgRlJPTSB7JHdwZGItPnBvc3RzfQogICAgIFdIRVJFIHBvc3RfdHlwZT0nc2hvcF9jb3Vwb24nIEFORCBwb3N0X3N0YXR1cz0ncHVibGlzaCcKICAgICBBTkQgcG9zdF90aXRsZSBMSUtFICdTT0ZJQS0lJyAkZGF0ZV93aGVyZV9jdXBvbSIKKTsKJHBfY3Vwb25zX3VzZWQgPSAoaW50KSR3cGRiLT5nZXRfdmFyKAogICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cG9zdHN9IHAKICAgICBJTk5FUiBKT0lOIHskd3BkYi0+cG9zdG1ldGF9IHBtIE9OIHBtLnBvc3RfaWQgPSBwLklEIEFORCBwbS5tZXRhX2tleSA9ICd1c2FnZV9jb3VudCcKICAgICBXSEVSRSBwLnBvc3RfdHlwZT0nc2hvcF9jb3Vwb24nIEFORCBwLnBvc3Rfc3RhdHVzPSdwdWJsaXNoJwogICAgIEFORCBwLnBvc3RfdGl0bGUgTElLRSAnU09GSUEtJScgQU5EIENBU1QocG0ubWV0YV92YWx1ZSBBUyBVTlNJR05FRCkgPiAwCiAgICAgJGRhdGVfd2hlcmVfY3Vwb20iCik7CiR0YXhhX2N1cG9tX2NvbnYgPSAkcF9jdXBvbnMgPiAwID8gcm91bmQoJHBfY3Vwb25zX3VzZWQgLyAkcF9jdXBvbnMgKiAxMDApIDogMDsKCi8vIOKUgOKUgCBDdXN0byBJQSBlIFJPQVMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi8vIEN1c3RvIGVzdGltYWRvOiBDbGF1ZGUgSGFpa3UgfiQwLjAwMTMvbXNnIChzZW0gdHJhY2tpbmcgZGUgdG9rZW5zIHJlYWlzKQokY3VzdG9fdXNkID0gcm91bmQoJHBfbXNnc19zdW0gKiAwLjAwMTMsIDIpOwokY3VzdG9fYnJsID0gcm91bmQoJGN1c3RvX3VzZCAqIDUuNzAsIDIpOwokcm9hcyAgICAgID0gJGN1c3RvX2JybCA+IDAgPyByb3VuZCgkcmVjZWl0YV9zb2ZpYSAvICRjdXN0b19icmwsIDEpIDogMDsKCi8vIOKUgOKUgCBUYXhhcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKJHRheGFfY2FwX3AgID0gJHBfdG90YWwgPiAwID8gcm91bmQoJHBfd2EgLyAkcF90b3RhbCAqIDEwMCwgMSkgOiAwOwokdGF4YV9lbmdfcCAgPSAkcF90b3RhbCA+IDAgPyByb3VuZCgkcF9lbmdhaiAvICRwX3RvdGFsICogMTAwLCAxKSA6IDA7CiR0YXhhX2NvbnZfcCA9ICRwX3dhID4gMCA/IHJvdW5kKCRwZWRpZG9zX3NvZmlhIC8gJHBfd2EgKiAxMDAsIDEpIDogMDsKCi8vIOKUgOKUgCBUZW5kw6puY2lhIDcgZGlhcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKJHRyZW5kNyA9ICR0YWJsZV9leGlzdHMgPyAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAiU0VMRUNUIERBVEUoQ09OVkVSVF9UWihzdGFydGVkX2F0LCAnKzAwOjAwJywgJy0wMzowMCcpKSBhcyBkaWEsIENPVU5UKCopIGFzIG4gRlJPTSAkdAogICAgIFdIRVJFIHN0YXJ0ZWRfYXQgPj0gREFURV9TVUIoVVRDX1RJTUVTVEFNUCgpLCBJTlRFUlZBTCA3IERBWSkKICAgICBHUk9VUCBCWSBEQVRFKENPTlZFUlRfVFooc3RhcnRlZF9hdCwgJyswMDowMCcsICctMDM6MDAnKSkgT1JERVIgQlkgZGlhIgopIDogW107CiR0cmVuZDdfbWFwID0gW107CmZvcmVhY2ggKCR0cmVuZDcgYXMgJHIpICR0cmVuZDdfbWFwWyRyLT5kaWFdID0gKGludCkkci0+bjsKJHRyZW5kN19tYXggPSAkdHJlbmQ3X21hcCA/IG1heChhcnJheV92YWx1ZXMoJHRyZW5kN19tYXApKSA6IDE7CgovLyDilIDilIAgSG9yw6FyaW9zIGRlIHBpY28g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiRwZWFrID0gJHRhYmxlX2V4aXN0cyA/ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICJTRUxFQ1QgSE9VUihDT05WRVJUX1RaKHN0YXJ0ZWRfYXQsICcrMDA6MDAnLCAnLTAzOjAwJykpIGFzIGhvcmEsIENPVU5UKCopIGFzIG4gRlJPTSAkdCBHUk9VUCBCWSBIT1VSKENPTlZFUlRfVFooc3RhcnRlZF9hdCwgJyswMDowMCcsICctMDM6MDAnKSkgT1JERVIgQlkgaG9yYSIKKSA6IFtdOwokcGVha19tYXAgPSBbXTsKZm9yZWFjaCAoJHBlYWsgYXMgJHIpICRwZWFrX21hcFsoaW50KSRyLT5ob3JhXSA9IChpbnQpJHItPm47CiRwZWFrX21heCA9ICRwZWFrX21hcCA/IG1heChhcnJheV92YWx1ZXMoJHBlYWtfbWFwKSkgOiAxOwoKLy8g4pSA4pSAIENhdGVnb3JpYXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiRjYXRfY29sb3JzX2FuID0gWydpbmZhbnRpbCc9PicjM2I4MmY2JywnY2FzYW1lbnRvJz0+JyM4YjVjZjYnLCcxNSBhbm9zJz0+JyNlYzQ4OTknLCdhZHVsdG8nPT4nIzZiNzI4MCcsJ2NvcnBvcmF0aXZvJz0+JyMxMGI5ODEnLCdmb3JtYXR1cmEnPT4nI2Y1OWUwYiddOwokY2F0c19wID0gJHRhYmxlX2V4aXN0cyA/ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICJTRUxFQ1QgY2F0ZWdvcmlhLCBDT1VOVCgqKSBhcyBuIEZST00gJHQgV0hFUkUgY2F0ZWdvcmlhIElTIE5PVCBOVUxMIEFORCBjYXRlZ29yaWEgIT0gJycgJHdoZXJlX2Z1bGwgR1JPVVAgQlkgY2F0ZWdvcmlhIE9SREVSIEJZIG4gREVTQyBMSU1JVCA4IgopIDogW107CiRjYXRzX2FyciA9IFtdOwpmb3JlYWNoICgkY2F0c19wIGFzICRjKSAkY2F0c19hcnJbJGMtPmNhdGVnb3JpYV0gPSAoaW50KSRjLT5uOwokY2F0c19tYXggPSAkY2F0c19hcnIgPyBtYXgoYXJyYXlfdmFsdWVzKCRjYXRzX2FycikpIDogMTsKCi8vIOKUgOKUgCBTZXNzw7VlcyBwYXJhIHRhYmVsYSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKJHNlc3Npb25zX3AgPSAkdGFibGVfZXhpc3RzID8gJHdwZGItPmdldF9yZXN1bHRzKAogICAgIlNFTEVDVCAqIEZST00gJHQgV0hFUkUgMT0xICR3aGVyZV9mdWxsIE9SREVSIEJZIHN0YXJ0ZWRfYXQgREVTQyBMSU1JVCAxMDAiCikgOiBbXTsKCi8vIOKUgOKUgCBJbnNpZ2h0cyBhdXRvbcOhdGljb3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiRpbnNpZ2h0cyA9IFtdOwppZiAoJHRheGFfY2FwX3AgPCAyMCAmJiAkcF90b3RhbCA+IDEwKQogICAgJGluc2lnaHRzW10gPSBbJ3dhcm4nLCfwn5S0JywnVGF4YSBkZSBjYXB0dXJhIGJhaXhhICgnLiR0YXhhX2NhcF9wLiclKScsCiAgICAgICAgJ01ldGEgZSAzMCUrLiBSZXZpc2FyIG8gZ2F0aWxobyBkZSBjYXB0dXJhIGRlIFdoYXRzQXBwIOKAlCBwb2RlIGVzdGFyIGFwYXJlY2VuZG8gdGFyZGUgZGVtYWlzIG5hIGNvbnZlcnNhLiddOwppZiAoJHRheGFfZW5nX3AgPCA0MCAmJiAkcF90b3RhbCA+IDEwKQogICAgJGluc2lnaHRzW10gPSBbJ3dhcm4nLCfwn5+hJywnTXVpdG9zIGFiYW5kb25vcyBwcmVjb2NlcyAoJy4oMTAwLSR0YXhhX2VuZ19wKS4nJSknLAogICAgICAgICdNYWlzIGRhIG1ldGFkZSBkb3MgdmlzaXRhbnRlcyBlbnZpb3UgbWVub3MgZGUgMyBtZW5zYWdlbnMuIENvbnNpZGVyZSB1bWEgc2F1ZGFjYW8gbWFpcyBhY29saGVkb3JhIG91IGNoaXBzIG1haXMgY2xhcm9zLiddOwppZiAoIWVtcHR5KCRwZWFrX21hcCkpIHsKICAgICRwZWFrX3NvcnRlZCA9ICRwZWFrX21hcDsgYXJzb3J0KCRwZWFrX3NvcnRlZCk7ICR0b3BfaG9yYSA9IGtleSgkcGVha19zb3J0ZWQpOwogICAgJGluc2lnaHRzW10gPSBbJ2luZm8nLCfij7AnLCdQaWNvIGRlIGF0ZW5kaW1lbnRvOiAnLnNwcmludGYoJyUwMmQ6MDAtJTAyZDowMCcsJHRvcF9ob3JhLCR0b3BfaG9yYSsxKSwKICAgICAgICAnQ29uY2VudHJlIGNhbXBhbmhhcyBlIGZvbGxvdy11cHMgcGVydG8gZGVzc2UgaG9yYXJpbyBwYXJhIG1heGltaXphciByZXNwb3N0YS4nXTsKfQppZiAoIWVtcHR5KCRjYXRzX2FycikpIHsKICAgICR0b3BfY2F0ID0gYXJyYXlfa2V5X2ZpcnN0KCRjYXRzX2Fycik7CiAgICAkaW5zaWdodHNbXSA9IFsnaW5mbycsJ/Cfjq8nLCdDYXRlZ29yaWEgbWFpcyBwb3B1bGFyOiAnLnVjZmlyc3QoJHRvcF9jYXQpLAogICAgICAgICdHYXJhbnRhIHF1ZSBvIHBvcnRmb2xpbyBkZSAnLnVjZmlyc3QoJHRvcF9jYXQpLicgZXN0YSBjb21wbGV0bywgY29tIGZvdG9zIGUgcHJlY29zIGF0dWFsaXphZG9zLiddOwp9CmlmICgkcm9hcyA+IDApCiAgICAkaW5zaWdodHNbXSA9IFsnb2snLCfwn5KaJywnUk9BUyBkZSAnLiRyb2FzLid4IOKAlCBjYWRhIFIkMSBlbSBJQSBnZXJhIFIkJy4kcm9hcy4nIGVtIHJlY2VpdGEnLAogICAgICAgICdFeGNlbGVudGUgcmV0b3Juby4gQ29uc2lkZXJlIGFtcGxpYXIgbyBhbGNhbmNlIGRhIFNvZklBIGNvbSB0cmFmZWdvIHBhZ28uJ107CmlmIChlbXB0eSgkaW5zaWdodHMpKQogICAgJGluc2lnaHRzW10gPSBbJ2luZm8nLCfwn5OKJywnQWd1YXJkYW5kbyBtYWlzIGRhZG9zIHBhcmEgZ2VyYXIgaW5zaWdodHMnLAogICAgICAgICdPcyBpbnNpZ2h0cyBhcGFyZWNlbSBhdXRvbWF0aWNhbWVudGUgY29uZm9ybWUgYXMgc2Vzc29lcyBhdW1lbnRhbS4nXTsKPz4KCjwhLS0gU2VsZXRvciBkZSBwZXLDrW9kbyArIENhbmFsIC0tPgo8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXJnaW4tYm90dG9tOjEwcHg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyIj4KICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MDtmb250LXdlaWdodDo2MDAiPlBlcsOtb2RvOjwvc3Bhbj4KICA8P3BocCBmb3JlYWNoIChbJ3RvZGF5Jz0+J0hvamUnLCc3ZCc9Pic3IGRpYXMnLCczMGQnPT4nMzAgZGlhcycsJ21vbnRoJz0+J0VzdGUgbcOqcycsJ2FsbCc9PidUdWRvJ10gYXMgJGs9PiRsYmwpOiA/PgogIDxhIGhyZWY9Ijw/cGhwIGVjaG8gZXNjX3VybCgkYW5hX3VybC4nJnBlcmlvZD0nLiRrLigkY2FuYWxfZmlsdGVyPycmY2FuYWw9Jy4kY2FuYWxfZmlsdGVyOicnKSk7ID8+IgogICAgIHN0eWxlPSJwYWRkaW5nOjVweCAxNHB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7CiAgICAgICAgICAgIDw/cGhwIGVjaG8gJHBlcmlvZD09PSRrID8gJ2JhY2tncm91bmQ6IzdjM2FlZDtjb2xvcjojZmZmJyA6ICdiYWNrZ3JvdW5kOiNmM2Y0ZjY7Y29sb3I6IzM3NDE1MSc7ID8+Ij4KICAgIDw/cGhwIGVjaG8gZXNjX2h0bWwoJGxibCk7ID8+CiAgPC9hPgogIDw/cGhwIGVuZGZvcmVhY2g7ID8+CjwvZGl2Pgo8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXJnaW4tYm90dG9tOjE4cHg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyIj4KICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MDtmb250LXdlaWdodDo2MDAiPkNhbmFsOjwvc3Bhbj4KICA8P3BocCBmb3JlYWNoIChbJyc9PidUb2RvcycsJ3NpdGUnPT4n8J+MkCBTaXRlJywnd2FiYSc9Pifwn5OxIFdBQkEgNTAzOSddIGFzICRrPT4kbGJsKTogPz4KICA8YSBocmVmPSI8P3BocCBlY2hvIGVzY191cmwoJGFuYV91cmwuJyZwZXJpb2Q9Jy4kcGVyaW9kLigkaz8nJmNhbmFsPScuJGs6JycpKTsgPz4iCiAgICAgc3R5bGU9InBhZGRpbmc6NXB4IDE0cHg7Ym9yZGVyLXJhZGl1czoyMHB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LWRlY29yYXRpb246bm9uZTsKICAgICAgICAgICAgPD9waHAgZWNobyAkY2FuYWxfZmlsdGVyPT09JGsgPyAnYmFja2dyb3VuZDojMDg2NmZmO2NvbG9yOiNmZmYnIDogJ2JhY2tncm91bmQ6I2YzZjRmNjtjb2xvcjojMzc0MTUxJzsgPz4iPgogICAgPD9waHAgZWNobyBlc2NfaHRtbCgkbGJsKTsgPz4KICA8L2E+CiAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICA8P3BocCBpZiAoJHBfd2FiYV90b3RhbCA+IDApOiA/PgogIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNmI3MjgwIj7igJQgPD9waHAgZWNobyAkcF93YWJhX3RvdGFsOyA/PiB2aWEgV0FCQSBubyBwZXLDrW9kbzwvc3Bhbj4KICA8P3BocCBlbmRpZjsgPz4KPC9kaXY+Cgo8IS0tIEtQSXMgTGluaGEgMSAtLT4KPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDEzMHB4LDFmcikpO2dhcDoxMHB4O21hcmdpbi1ib3R0b206MTJweCI+CiAgPGRpdiBjbGFzcz0ic29maWEta3BpIiBzdHlsZT0iYm9yZGVyLXRvcDozcHggc29saWQgIzdjM2FlZCI+CiAgICA8c3BhbiBjbGFzcz0ic29maWEta3BpLXZhbCI+PD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRwX3RvdGFsKTsgPz48L3NwYW4+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktbGJsIj7wn5KsIFNlc3PDtWVzPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktc3ViIj48P3BocCBlY2hvICRwX2VuZ2FqOyA/PiBlbmdhamFyYW0gKDMrIG1zZ3MpPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0ic29maWEta3BpIiBzdHlsZT0iYm9yZGVyLXRvcDozcHggc29saWQgIzNiODJmNiI+CiAgICA8c3BhbiBjbGFzcz0ic29maWEta3BpLXZhbCBwdXJwbGUiPjw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkcF93YSk7ID8+PC9zcGFuPgogICAgPGRpdiBjbGFzcz0ic29maWEta3BpLWxibCI+8J+TsiBXQSBjYXB0dXJhZG9zPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktc3ViIj48P3BocCBlY2hvICR0YXhhX2NhcF9wOyA/PiUgZGFzIHNlc3PDtWVzPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0ic29maWEta3BpIiBzdHlsZT0iYm9yZGVyLXRvcDozcHggc29saWQgI2Y1OWUwYiI+CiAgICA8c3BhbiBjbGFzcz0ic29maWEta3BpLXZhbCIgc3R5bGU9ImNvbG9yOjw/cGhwIGVjaG8gJHBfZGF0YV9ldj4wPycjZDk3NzA2JzonIzljYTNhZic7ID8+Ij48P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJHBfZGF0YV9ldik7ID8+PC9zcGFuPgogICAgPGRpdiBjbGFzcz0ic29maWEta3BpLWxibCI+8J+ThSBDb20gZGF0YSBldmVudG88L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1zdWIiPkxlYWRzIHF1ZW50ZXM8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGkiIHN0eWxlPSJib3JkZXItdG9wOjNweCBzb2xpZCAjMTBiOTgxIj4KICAgIDxzcGFuIGNsYXNzPSJzb2ZpYS1rcGktdmFsIGdyZWVuIj48P3BocCBlY2hvIG51bWJlcl9mb3JtYXQoJHBlZGlkb3Nfc29maWEpOyA/Pjwvc3Bhbj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1sYmwiPvCfm5IgUGVkaWRvcyBhdHJpYi48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1zdWIiPjw/cGhwIGVjaG8gJHRheGFfY29udl9wOyA/PiUgZG9zIGNhcHR1cmFkb3M8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGkiIHN0eWxlPSJib3JkZXItdG9wOjNweCBzb2xpZCAjMDU5NjY5Ij4KICAgIDxzcGFuIGNsYXNzPSJzb2ZpYS1rcGktdmFsIGdyZWVuIj5SJDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkcmVjZWl0YV9zb2ZpYSwwLCcsJywnLicpOyA/Pjwvc3Bhbj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1sYmwiPvCfkrAgUmVjZWl0YSBhdHJpYi48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1zdWIiPlBlZGlkb3Mgd2MtcHJvY2Vzc2luZyBww7NzLWNoYXQ8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGkiIHN0eWxlPSJib3JkZXItdG9wOjNweCBzb2xpZCA8P3BocCBlY2hvICRyb2FzPj01PycjMDU5NjY5JzooJHJvYXM+PTI/JyNkOTc3MDYnOicjNmI3MjgwJyk7ID8+Ij4KICAgIDxzcGFuIGNsYXNzPSJzb2ZpYS1rcGktdmFsIiBzdHlsZT0iY29sb3I6PD9waHAgZWNobyAkcm9hcz49NT8nIzA1OTY2OSc6KCRyb2FzPj0yPycjZDk3NzA2JzonIzZiNzI4MCcpOyA/PiI+PD9waHAgZWNobyAkcm9hcz4wPyRyb2FzLid4Jzon4oCUJzsgPz48L3NwYW4+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktbGJsIj7wn5OIIFJPQVMgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5cHg7Y29sb3I6IzljYTNhZjtmb250LXdlaWdodDo0MDAiPihlc3QuKTwvc3Bhbj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1zdWIiPkN1c3RvIElBIGVzdC46IFIkPD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRjdXN0b19icmwsMiwnLCcsJy4nKTsgPz48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGkiIHN0eWxlPSJib3JkZXItdG9wOjNweCBzb2xpZCAjOGI1Y2Y2Ij4KICAgIDxzcGFuIGNsYXNzPSJzb2ZpYS1rcGktdmFsIiBzdHlsZT0iY29sb3I6IzhiNWNmNiI+UiQ8P3BocCBlY2hvICR0aWNrZXRfbWVkaW8+MD9udW1iZXJfZm9ybWF0KCR0aWNrZXRfbWVkaW8sMCwnLCcsJy4nKTon4oCUJzsgPz48L3NwYW4+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS1rcGktbGJsIj7wn46f77iPIFRpY2tldCBNw6lkaW88L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1zdWIiPlBvciBwZWRpZG8gYXRyaWIuPC9kaXY+CiAgPC9kaXY+CiAgPD9waHAKICAkYWJhbmRvbl9jb2xvciA9ICR0YXhhX2FiYW5kb25vID4gNjAgPyAnI2VmNDQ0NCcgOiAoJHRheGFfYWJhbmRvbm8gPiA0MCA/ICcjZDk3NzA2JyA6ICcjMDU5NjY5Jyk7CiAgJGFiYW5kb25faWNvbiAgPSAkdGF4YV9hYmFuZG9ubyA+IDYwID8gJ+KaoO+4jycgOiAoJHRheGFfYWJhbmRvbm8gPiA0MCA/ICfwn5+hJyA6ICfinIUnKTsKICA/PgogIDxkaXYgY2xhc3M9InNvZmlhLWtwaSIgc3R5bGU9ImJvcmRlci10b3A6M3B4IHNvbGlkIDw/cGhwIGVjaG8gJGFiYW5kb25fY29sb3IgPz4iPgogICAgPHNwYW4gY2xhc3M9InNvZmlhLWtwaS12YWwiIHN0eWxlPSJjb2xvcjo8P3BocCBlY2hvICRhYmFuZG9uX2NvbG9yID8+Ij48P3BocCBlY2hvICR0YXhhX2FiYW5kb25vID8+JTwvc3Bhbj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1sYmwiPvCfmqogQWJhbmRvbm8gUHJlY29jZTwvZGl2PgogICAgPGRpdiBjbGFzcz0ic29maWEta3BpLXN1YiI+PD9waHAgZWNobyAkcF9lYXJseSA/PiBzZXNzw7VlcyAo4omkMiBtc2dzKSA8P3BocCBlY2hvICRhYmFuZG9uX2ljb24gPz48L2Rpdj4KICA8L2Rpdj4KICA8P3BocAogICRjdXBvbV9jb2xvciA9ICRwX2N1cG9uc191c2VkID4gMCA/ICcjZjU5ZTBiJyA6ICcjOWNhM2FmJzsKICAkY3Vwb21fc3ViICAgPSAkcF9jdXBvbnMgPiAwCiAgICAgID8gJHBfY3Vwb25zX3VzZWQgLiAnIHVzYWRvcyAoJyAuICR0YXhhX2N1cG9tX2NvbnYgLiAnJSknCiAgICAgIDogJ05lbmh1bSBnZXJhZG8nOwogID8+CiAgPGRpdiBjbGFzcz0ic29maWEta3BpIiBzdHlsZT0iYm9yZGVyLXRvcDozcHggc29saWQgPD9waHAgZWNobyAkY3Vwb21fY29sb3IgPz4iCiAgICAgICBvbmNsaWNrPSJsb2NhdGlvbi5ocmVmPSc8P3BocCBlY2hvIGFkbWluX3VybCgnZWRpdC5waHA/cG9zdF90eXBlPXNob3BfY291cG9uJnM9U09GSUEtJyk7ID8+JyIKICAgICAgIHRpdGxlPSJWZXIgY3Vwb25zIG5vIFdvb0NvbW1lcmNlIj4KICAgIDxzcGFuIGNsYXNzPSJzb2ZpYS1rcGktdmFsIiBzdHlsZT0iY29sb3I6PD9waHAgZWNobyAkY3Vwb21fY29sb3IgPz4iPjw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkcF9jdXBvbnMpOyA/Pjwvc3Bhbj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1sYmwiPvCfj7fvuI8gQ3Vwb25zIGdlcmFkb3M8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1zdWIiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGN1cG9tX3N1Yik7ID8+PC9kaXY+CiAgPC9kaXY+CiAgPD9waHAKICAkd2FiYV9jYXJkX3VybCA9IGVzY191cmwoJGFuYV91cmwgLiAnJnBlcmlvZD0nIC4gJHBlcmlvZCAuICcmY2FuYWw9d2FiYScpOwogICR3YWJhX3RvdGFsX2Rpc3BsYXkgID0gbnVtYmVyX2Zvcm1hdCgkcF93YWJhX3RvdGFsKTsKICAkd2FiYV9wZXJpb2RfZGlzcGxheSA9IG51bWJlcl9mb3JtYXQoJHBfd2FiYV9wZXJpb2QpOwogICR3YWJhX3dhX2Rpc3BsYXkgICAgID0gKGludCkkcF93YWJhX3dhOwogID8+CiAgPGRpdiBjbGFzcz0ic29maWEta3BpIiBzdHlsZT0iYm9yZGVyLXRvcDozcHggc29saWQgIzA4NjZmZjtjdXJzb3I6cG9pbnRlciIKICAgICAgIG9uY2xpY2s9ImxvY2F0aW9uLmhyZWY9Jzw/cGhwIGVjaG8gJHdhYmFfY2FyZF91cmw7ID8+JyIKICAgICAgIHRpdGxlPSJGaWx0cmFyIGFwZW5hcyBXQUJBIj4KICAgIDxzcGFuIGNsYXNzPSJzb2ZpYS1rcGktdmFsIiBzdHlsZT0iY29sb3I6IzA4NjZmZiI+PD9waHAgZWNobyAkd2FiYV90b3RhbF9kaXNwbGF5OyA/Pjwvc3Bhbj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLWtwaS1sYmwiPvCfk7EgU2Vzc8O1ZXMgV0FCQTwvZGl2PgogICAgPGRpdiBjbGFzcz0ic29maWEta3BpLXN1YiI+PD9waHAgZWNobyAkd2FiYV9wZXJpb2RfZGlzcGxheTsgPz4gbm8gcGVyw61vZG8gwrcgPD9waHAgZWNobyAkd2FiYV93YV9kaXNwbGF5OyA/PiBXQSBjYXB0dXJhZG88L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIEZ1bmlsICsgQ2F0ZWdvcmlhcyAtLT4KPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNnB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgPGRpdiBjbGFzcz0ic29maWEtc2VjdGlvbiI+CiAgICA8aDM+8J+UvSBGdW5pbCBDb21wbGV0bzwvaDM+CiAgICA8P3BocAogICAgJGZ1bm5lbF9zdGVwcyA9IFsKICAgICAgICBbJ/CfkqwgSW5pY2lhcmFtIGNoYXQnLCAgJHBfdG90YWwsICAgMTAwLCAgICAgICAgICcjN2MzYWVkJ10sCiAgICAgICAgWyfwn5OpIEVuZ2FqYXJhbSAoMyspJywgICRwX2VuZ2FqLCAgICRwX3RvdGFsPjA/cm91bmQoJHBfZW5nYWovJHBfdG90YWwqMTAwLDEpOjAsICAgJyM2ZDI4ZDknXSwKICAgICAgICBbJ/Cfk4UgSW5mb3JtYXJhbSBkYXRhJywgJHBfZGF0YV9ldiwgJHBfdG90YWw+MD9yb3VuZCgkcF9kYXRhX2V2LyRwX3RvdGFsKjEwMCwxKTowLCAnIzViMjFiNiddLAogICAgICAgIFsn8J+TsiBXQSBjYXB0dXJhZG8nLCAgICAkcF93YSwgICAgICAkcF90b3RhbD4wP3JvdW5kKCRwX3dhLyRwX3RvdGFsKjEwMCwxKTowLCAgICAgICcjM2I4MmY2J10sCiAgICAgICAgWyfwn5uSIEdlcm91IHBlZGlkbycsICAgICRwZWRpZG9zX3NvZmlhLCAkcF90b3RhbD4wP3JvdW5kKCRwZWRpZG9zX3NvZmlhLyRwX3RvdGFsKjEwMCwxKTowLCcjMTBiOTgxJ10sCiAgICBdOwogICAgZm9yZWFjaCAoJGZ1bm5lbF9zdGVwcyBhcyAkZmkgPT4gJGYpOgogICAgICAgICRidyA9IG1heCg4LCAoaW50KSRmWzJdKTsKICAgID8+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O21hcmdpbi1ib3R0b206PD9waHAgZWNobyAkZmk8ND8nMTAnOicwJzsgPz5weCI+CiAgICAgIDxkaXYgc3R5bGU9ImZsZXg6MTtoZWlnaHQ6MzRweDtiYWNrZ3JvdW5kOiNmM2Y0ZjY7Ym9yZGVyLXJhZGl1czo3cHg7b3ZlcmZsb3c6aGlkZGVuIj4KICAgICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDo8P3BocCBlY2hvICRidzsgPz4lO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6PD9waHAgZWNobyAkZlszXTsgPz47Ym9yZGVyLXJhZGl1czo3cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6MTBweDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6I2ZmZjt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuIj48P3BocCBlY2hvICRmWzBdOyA/PjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzdHlsZT0ibWluLXdpZHRoOjQycHg7Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiMxZjI5Mzc7dGV4dC1hbGlnbjpyaWdodCI+PD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRmWzFdKTsgPz48L2Rpdj4KICAgICAgPGRpdiBzdHlsZT0id2lkdGg6NDBweDtmb250LXNpemU6MTFweDtjb2xvcjojNmI3MjgwIj48P3BocCBlY2hvICRmWzJdOyA/PiU8L2Rpdj4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0ic29maWEtc2VjdGlvbiI+CiAgICA8aDM+8J+TiiBTZXNzw7VlcyBwb3IgQ2F0ZWdvcmlhPC9oMz4KICAgIDw/cGhwIGlmIChlbXB0eSgkY2F0c19hcnIpKTogPz4KICAgIDxwIHN0eWxlPSJjb2xvcjojOWNhM2FmO2ZvbnQtc2l6ZToxM3B4Ij5TZW0gZGFkb3Mgbm8gcGVyw61vZG8uPC9wPgogICAgPD9waHAgZWxzZTogZm9yZWFjaCAoJGNhdHNfYXJyIGFzICRjYXQgPT4gJG4pOgogICAgICAgICRwY3RfYyA9IHJvdW5kKCRuIC8gJGNhdHNfbWF4ICogMTAwKTsKICAgICAgICAkY29sX2MgPSAkY2F0X2NvbG9yc19hblskY2F0XSA/PyAnIzdjM2FlZCc7CiAgICA/PgogICAgPGRpdiBjbGFzcz0ic29maWEtYmFyLXJvdyI+CiAgICAgIDxkaXYgY2xhc3M9InNvZmlhLWJhci1sYWJlbCI+PD9waHAgZWNobyBlc2NfaHRtbCh1Y2ZpcnN0KCRjYXQpKTsgPz48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic29maWEtYmFyLXRyYWNrIj48ZGl2IGNsYXNzPSJzb2ZpYS1iYXItZmlsbCIgc3R5bGU9IndpZHRoOjw/cGhwIGVjaG8gJHBjdF9jOyA/PiU7YmFja2dyb3VuZDo8P3BocCBlY2hvICRjb2xfYzsgPz4iPjw/cGhwIGVjaG8gJG47ID8+PC9kaXY+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNvZmlhLWJhci1jb3VudCI+PD9waHAgZWNobyAkbjsgPz48L2Rpdj4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kZm9yZWFjaDsgZW5kaWY7ID8+CiAgPC9kaXY+CjwvZGl2PgoKPCEtLSBUZW5kw6puY2lhIDdkICsgSG9yw6FyaW9zIGRlIHBpY28gLS0+CjxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTZweDttYXJnaW4tYm90dG9tOjE2cHgiPgogIDxkaXYgY2xhc3M9InNvZmlhLXNlY3Rpb24iPgogICAgPGgzPvCfk4UgVGVuZMOqbmNpYSDigJQgw7psdGltb3MgNyBkaWFzPC9oMz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LWVuZDtnYXA6NHB4O2hlaWdodDo4MHB4Ij4KICAgIDw/cGhwIGZvciAoJGRkZCA9IDY7ICRkZGQgPj0gMDsgJGRkZC0tKToKICAgICAgICAkZGlhX2tleSA9IGRhdGUoJ1ktbS1kJywgc3RydG90aW1lKCIteyRkZGR9IGRheXMiKSk7CiAgICAgICAgJG5fZCAgICAgPSAkdHJlbmQ3X21hcFskZGlhX2tleV0gPz8gMDsKICAgICAgICAkaF9wY3QgICA9ICR0cmVuZDdfbWF4ID4gMCA/IG1heCg0LCByb3VuZCgkbl9kIC8gJHRyZW5kN19tYXggKiAxMDApKSA6IDQ7CiAgICAgICAgJGRheV9sYmwgPSBkYXRlKCdkL20nLCBzdHJ0b3RpbWUoIi17JGRkZH0gZGF5cyIpKTsKICAgID8+CiAgICA8ZGl2IHN0eWxlPSJmbGV4OjE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjNweCI+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiMzNzQxNTE7Zm9udC13ZWlnaHQ6NzAwIj48P3BocCBlY2hvICRuX2QgPzogJyc7ID8+PC9kaXY+CiAgICAgIDxkaXYgc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0Ojw/cGhwIGVjaG8gJGhfcGN0OyA/PiU7YmFja2dyb3VuZDo8P3BocCBlY2hvICRuX2Q+MD8nIzdjM2FlZCc6JyNlNWU3ZWInOyA/Pjtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO21pbi1oZWlnaHQ6NHB4Ij48L2Rpdj4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEwcHg7Y29sb3I6IzljYTNhZiI+PD9waHAgZWNobyAkZGF5X2xibDsgPz48L2Rpdj4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kZm9yOyA/PgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InNvZmlhLXNlY3Rpb24iPgogICAgPGgzPuKPsCBIb3LDoXJpb3MgZGUgUGljbzwvaDM+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1lbmQ7Z2FwOjJweDtoZWlnaHQ6ODBweCI+CiAgICA8P3BocAogICAgJHBlYWtfdG9wX3ZhbCA9ICRwZWFrX21hcCA/IG1heChhcnJheV92YWx1ZXMoJHBlYWtfbWFwKSkgOiAwOwogICAgZm9yICgkaGhoID0gMDsgJGhoaCA8IDI0OyAkaGhoKyspOgogICAgICAgICRuX2ggICA9ICRwZWFrX21hcFskaGhoXSA/PyAwOwogICAgICAgICRoX3BjdCA9ICRwZWFrX21heCA+IDAgPyBtYXgoNCwgcm91bmQoJG5faCAvICRwZWFrX21heCAqIDEwMCkpIDogNDsKICAgICAgICAkaXNfdG9wID0gKCRuX2ggPiAwICYmICRuX2ggPT09ICRwZWFrX3RvcF92YWwpOwogICAgICAgICRjb2xvcl9oID0gJGlzX3RvcCA/ICcjZjU5ZTBiJyA6ICgkbl9oID4gMCA/ICcjOGI1Y2Y2JyA6ICcjZTVlN2ViJyk7CiAgICA/PgogICAgPGRpdiBzdHlsZT0iZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyIiB0aXRsZT0iPD9waHAgZWNobyBzcHJpbnRmKCclMDJkOjAwIOKAlCAlZCBzZXNzLicsJGhoaCwkbl9oKTsgPz4iPgogICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDo8P3BocCBlY2hvICRoX3BjdDsgPz4lO2JhY2tncm91bmQ6PD9waHAgZWNobyAkY29sb3JfaDsgPz47Ym9yZGVyLXJhZGl1czoycHggMnB4IDAgMDttaW4taGVpZ2h0OjRweCI+PC9kaXY+CiAgICAgIDw/cGhwIGlmICgkaGhoICUgNiA9PT0gMCk6ID8+PGRpdiBzdHlsZT0iZm9udC1zaXplOjhweDtjb2xvcjojOWNhM2FmIj48P3BocCBlY2hvIHNwcmludGYoJyUwMmRoJywkaGhoKTsgPz48L2Rpdj48P3BocCBlbHNlOiA/PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo4cHg7Y29sb3I6dHJhbnNwYXJlbnQiPi48L2Rpdj48P3BocCBlbmRpZjsgPz4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kZm9yOyA/PgogICAgPC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKPCEtLSBJbnNpZ2h0cyBhdXRvbcOhdGljb3MgLS0+CjxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+CiAgPGgzIHN0eWxlPSJmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDA7bWFyZ2luOjAgMCAxMnB4Ij7wn5KhIEluc2lnaHRzIEF1dG9tw6F0aWNvczwvaDM+CiAgPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maXQsbWlubWF4KDIyMHB4LDFmcikpO2dhcDoxMHB4Ij4KICA8P3BocCBmb3JlYWNoICgkaW5zaWdodHMgYXMgJGlucyk6CiAgICAkYmdfaSA9ICRpbnNbMF09PT0nb2snID8gJyNmMGZkZjQnIDogKCRpbnNbMF09PT0nd2FybicgPyAnI2ZmZjdlZCcgOiAnI2Y1ZjNmZicpOwogICAgJGJjX2kgPSAkaW5zWzBdPT09J29rJyA/ICcjYmJmN2QwJyA6ICgkaW5zWzBdPT09J3dhcm4nID8gJyNmZWQ3YWEnIDogJyNkZGQ2ZmUnKTsKICA/PgogIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6PD9waHAgZWNobyAkYmdfaTsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRiY19pOyA/Pjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNHB4Ij4KICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxOHB4O21hcmdpbi1ib3R0b206NHB4Ij48P3BocCBlY2hvICRpbnNbMV07ID8+PC9kaXY+CiAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzFmMjkzNzttYXJnaW4tYm90dG9tOjRweCI+PD9waHAgZWNobyBlc2NfaHRtbCgkaW5zWzJdKTsgPz48L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM0YjU1NjMiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJGluc1szXSk7ID8+PC9kaXY+CiAgPC9kaXY+CiAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIFRhYmVsYSBkZSBzZXNzw7VlcyAtLT4KPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjEwcHg7ZmxleC13cmFwOndyYXA7Z2FwOjhweCI+CiAgPGgzIHN0eWxlPSJtYXJnaW46MDtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDAiPvCfl4LvuI8gU2Vzc8O1ZXMg4oCUIDw/cGhwIGVjaG8gbnVtYmVyX2Zvcm1hdCgkcF90b3RhbCk7ID8+IHJlZ2lzdHJvczwvaDM+CiAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJzb2ZpYS10YmwtZmlsdGVyIiBwbGFjZWhvbGRlcj0iRmlsdHJhciBwb3IgV0EsIGNhdGVnb3JpYS4uLiIKICAgIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo3cHg7cGFkZGluZzo2cHggMTJweDtmb250LXNpemU6MTNweDt3aWR0aDoyNjBweDttYXgtd2lkdGg6MTAwJSIKICAgIG9uaW5wdXQ9InZtMlNvZmlhRmlsdGVyKHRoaXMudmFsdWUpIj4KPC9kaXY+CjxkaXYgY2xhc3M9InNvZmlhLXRhYmxlLXdyYXAiPgogIDx0YWJsZSBpZD0ic29maWEtc2Vzc2lvbnMtdGJsIj4KICAgIDx0aGVhZD4KICAgICAgPHRyPgogICAgICAgIDx0aD5EYXRhL0hvcmE8L3RoPjx0aD5DYW5hbDwvdGg+PHRoPkF0cmHDp8OjbzwvdGg+PHRoPkNhdGVnb3JpYTwvdGg+PHRoPlRpcG8gRXZlbnRvPC90aD48dGg+RGF0YSBFdmVudG88L3RoPjx0aD5VcmfDqm5jaWE8L3RoPjx0aD7wn5OyIFdoYXRzQXBwPC90aD48dGg+TXNnczwvdGg+PHRoPlN0YXR1czwvdGg+CiAgICAgIDwvdHI+CiAgICA8L3RoZWFkPgogICAgPHRib2R5PgogICAgPD9waHAgaWYgKGVtcHR5KCRzZXNzaW9uc19wKSk6ID8+CiAgICAgIDx0cj48dGQgY29sc3Bhbj0iOSIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MzBweDtjb2xvcjojOWNhM2FmIj4KICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MzJweDttYXJnaW4tYm90dG9tOjhweCI+8J+noDwvZGl2PgogICAgICAgIE5lbmh1bWEgc2Vzc8OjbyBubyBwZXLDrW9kbyBzZWxlY2lvbmFkby48YnI+CiAgICAgICAgPHNtYWxsPlRyb3F1ZSBvIGZpbHRybyBkZSBwZXLDrW9kbyBhY2ltYSBvdSBhZ3VhcmRlIG5vdmFzIGNvbnZlcnNhcy48L3NtYWxsPgogICAgICA8L3RkPjwvdHI+CiAgICA8P3BocCBlbHNlOgogICAgICBmb3JlYWNoICgkc2Vzc2lvbnNfcCBhcyAkcyk6CiAgICAgICAgJGNhdF9zbHVnX3MgPSBzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCcgJywnLScsJHMtPmNhdGVnb3JpYSA/OiAnYWR1bHRvJykpOwogICAgICAgICR1cmdfc2x1Z19zID0gc3RydG9sb3dlcigkcy0+dXJnZW5jaWEgPzogJ2JhaXhhJyk7CiAgICAgICAgJHdhX29rX3MgICAgPSAhZW1wdHkoJHMtPndoYXRzYXBwKTsKICAgICAgICAkd2FfY2xlYW5fcyA9IHByZWdfcmVwbGFjZSgnL1teMC05XS8nLCAnJywgJHMtPndoYXRzYXBwID8/ICcnKTsKICAgICAgICBpZiAoJHdhX2NsZWFuX3MgJiYgJHBlZGlkb3Nfc29maWEgPiAwICYmIGluX2FycmF5KCR3YV9jbGVhbl9zLCAkc29maWFfcGhvbmVzKSkgewogICAgICAgICAgICAkc2xibCA9ICfwn5uSIFBlZGlkbyc7ICRzY29sID0gJyMwNTk2NjknOyAkc2JnID0gJyNkMWZhZTUnOwogICAgICAgIH0gZWxzZWlmICgkd2Ffb2tfcykgewogICAgICAgICAgICAkc2xibCA9ICfwn5OyIENhcHR1cmFkbyc7ICRzY29sID0gJyMxZDRlZDgnOyAkc2JnID0gJyNkYmVhZmUnOwogICAgICAgIH0gZWxzZWlmIChpbnR2YWwoJHMtPm1lbnNhZ2Vuc19jb3VudCkgPj0gMykgewogICAgICAgICAgICAkc2xibCA9ICfwn5KsIEVuZ2FqYWRvJzsgJHNjb2wgPSAnIzZkMjhkOSc7ICRzYmcgPSAnI2VkZTlmZSc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHNsYmwgPSAn8J+RuyBBYmFuZG9ubyc7ICRzY29sID0gJyM5Y2EzYWYnOyAkc2JnID0gJyNmM2Y0ZjYnOwogICAgICAgIH0KICAgICAgICAkc2VhcmNoX3N0ciA9IHN0cnRvbG93ZXIoKCRzLT5wcm9kdWN0X25hbWU/PycnKS4nICcuKCRzLT53aGF0c2FwcD8/JycpLicgJy4oJHMtPmNhdGVnb3JpYT8/JycpLicgJy4oJHMtPnRpcG9fZXZlbnRvPz8nJykpOwogICAgPz4KICAgICAgPD9waHAKICAgICAgICAkaXNfd2FiYV9zID0gIWVtcHR5KCRzLT5jYW5hbF9vcmlnZW0pOwogICAgICAgICRjYW5hbF9iYWRnZSA9ICRpc193YWJhX3MKICAgICAgICAgICAgPyAnPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2RiZWFmZTtjb2xvcjojMWQ0ZWQ4O3BhZGRpbmc6MnB4IDdweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NzAwO3doaXRlLXNwYWNlOm5vd3JhcCI+8J+TsSBXQUJBPC9zcGFuPicKICAgICAgICAgICAgOiAnPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I2YzZjRmNjtjb2xvcjojNmI3MjgwO3BhZGRpbmc6MnB4IDdweDtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcCI+8J+MkCBTaXRlPC9zcGFuPic7CiAgICAgID8+CiAgICAgIDx0ciBjbGFzcz0ic29maWEtdGJsLXJvdyIgZGF0YS1zZWFyY2g9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHNlYXJjaF9zdHIpOyA/PiI+CiAgICAgICAgPHRkIHN0eWxlPSJ3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC1zaXplOjEycHgiPjw/cGhwIGVjaG8gZXNjX2h0bWwoZ2V0X2RhdGVfZnJvbV9nbXQoJHMtPnN0YXJ0ZWRfYXQsICdkL20gSDppJykpOyA/PjwvdGQ+CiAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+PD9waHAgZWNobyAkY2FuYWxfYmFkZ2U7ID8+PC90ZD4KICAgICAgICA8dGQgc3R5bGU9Im1heC13aWR0aDoxNDBweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC1zaXplOjEycHgiIHRpdGxlPSI8P3BocCBlY2hvIGVzY19hdHRyKCRzLT5wcm9kdWN0X25hbWUgPz8gJycpOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCgkcy0+cHJvZHVjdF9uYW1lID86ICfigJQnKTsgPz48L3RkPgogICAgICAgIDx0ZD48P3BocCBpZiAoJHMtPmNhdGVnb3JpYSk6ID8+PHNwYW4gY2xhc3M9InNvZmlhLWJhZGdlIHNvZmlhLWJhZGdlLTw/cGhwIGVjaG8gZXNjX2F0dHIoJGNhdF9zbHVnX3MpOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCh1Y2ZpcnN0KCRzLT5jYXRlZ29yaWEpKTsgPz48L3NwYW4+PD9waHAgZWxzZTogPz7igJQ8P3BocCBlbmRpZjsgPz48L3RkPgogICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOjEycHgiPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHMtPnRpcG9fZXZlbnRvID86ICfigJQnKTsgPz48L3RkPgogICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOjEycHg7d2hpdGUtc3BhY2U6bm93cmFwIj48P3BocCBlY2hvIGVzY19odG1sKCRzLT5kYXRhX2V2ZW50b19zdHIgPzogJ+KAlCcpOyA/PjwvdGQ+CiAgICAgICAgPHRkPjw/cGhwIGlmICgkcy0+dXJnZW5jaWEpOiA/PjxzcGFuIGNsYXNzPSJzb2ZpYS1iYWRnZSBzb2ZpYS1iYWRnZS08P3BocCBlY2hvIGVzY19hdHRyKCR1cmdfc2x1Z19zKTsgPz4iPjw/cGhwIGVjaG8gZXNjX2h0bWwodWNmaXJzdCgkcy0+dXJnZW5jaWEpKTsgPz48L3NwYW4+PD9waHAgZWxzZTogPz7igJQ8P3BocCBlbmRpZjsgPz48L3RkPgogICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOjEycHgiPjw/cGhwIGlmICgkd2Ffb2tfcyk6ID8+PGEgaHJlZj0iaHR0cHM6Ly93YS5tZS88P3BocCBlY2hvIGVzY19hdHRyKCR3YV9jbGVhbl9zKTsgPz4iIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6IzA1OTY2OTtmb250LXdlaWdodDo2MDA7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPvCfk7IgPD9waHAgZWNobyBlc2NfaHRtbCgkcy0+d2hhdHNhcHApOyA/PjwvYT48P3BocCBlbHNlOiA/PuKAlDw/cGhwIGVuZGlmOyA/PjwvdGQ+CiAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo3MDAiPjw/cGhwIGVjaG8gaW50dmFsKCRzLT5tZW5zYWdlbnNfY291bnQpOyA/PjwvdGQ+CiAgICAgICAgPHRkPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJHNiZzsgPz47Y29sb3I6PD9waHAgZWNobyAkc2NvbDsgPz47cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6MjBweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7d2hpdGUtc3BhY2U6bm93cmFwIj48P3BocCBlY2hvICRzbGJsOyA/Pjwvc3Bhbj48L3RkPgogICAgICA8L3RyPgogICAgPD9waHAgZW5kZm9yZWFjaDsgZW5kaWY7ID8+CiAgICA8L3Rib2R5PgogIDwvdGFibGU+CjwvZGl2Pgo8c2NyaXB0PgpmdW5jdGlvbiB2bTJTb2ZpYUZpbHRlcih2KSB7CiAgICB2YXIgcSA9IHYudG9Mb3dlckNhc2UoKS50cmltKCk7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjc29maWEtc2Vzc2lvbnMtdGJsIC5zb2ZpYS10Ymwtcm93JykuZm9yRWFjaChmdW5jdGlvbih0cikgewogICAgICAgIHRyLnN0eWxlLmRpc3BsYXkgPSAoIXEgfHwgdHIuZGF0YXNldC5zZWFyY2guaW5kZXhPZihxKSA+IC0xKSA/ICcnIDogJ25vbmUnOwogICAgfSk7Cn0KPC9zY3JpcHQ+Cgo8P3BocCBlbHNlaWYgKCRhY3RpdmVfdGFiID09PSAnY2FwdHVyYScpOiA/Pgo8IS0tIOKVkOKVkOKVkCBDQVBUVVJBIFdBIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAtLT4KPGZvcm0gbWV0aG9kPSJwb3N0Ij4KPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3ZtMl9zb2ZpYV9ub25jZScpOyA/Pgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ2bTJfc29maWFfc2F2ZSIgdmFsdWU9IjEiPgoKPGRpdiBjbGFzcz0ic29maWEtc2VjdGlvbiI+CiAgPGgzPuKame+4jyBDb25maWd1cmHDp8O1ZXMgZGUgQ2FwdHVyYTwvaDM+CiAgPGRpdiBjbGFzcz0ic29maWEtdHJpZ2dlci1yb3ciPgogICAgPGRpdiBjbGFzcz0ic29maWEtdHJpZ2dlci1sYWJlbCI+CiAgICAgIPCfp6AgQ2FwdHVyYSBkZSBXQSBBdGl2YQogICAgICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLWRlc2MiPkxpZ2EvZGVzbGlnYSB0b2RvIG8gc2lzdGVtYSBkZSBjYXB0dXJhIGRlIFdoYXRzQXBwIG5vIGNoYXQgU29mSUE8L2Rpdj4KICAgIDwvZGl2PgogICAgPGxhYmVsIGNsYXNzPSJzb2ZpYS10b2dnbGUiPgogICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNvZmlhX2VuYWJsZWQiIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKCRzb2ZpYV9lbmFibGVkLCcxJyk7ID8+PgogICAgICA8c3BhbiBjbGFzcz0ic29maWEtdG9nZ2xlLXNsaWRlciI+PC9zcGFuPgogICAgPC9sYWJlbD4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJzb2ZpYS1zZWN0aW9uIj4KICA8aDM+8J+OryBHYXRpbGhvcyBkZSBDYXB0dXJhPC9oMz4KCiAgPGRpdiBjbGFzcz0ic29maWEtdHJpZ2dlci1yb3ciPgogICAgPGRpdiBjbGFzcz0ic29maWEtdHJpZ2dlci1sYWJlbCI+CiAgICAgIOKPse+4jyBBcMOzcyBOIG1lbnNhZ2VucwogICAgICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLWRlc2MiPlNvZnQgYXNrIG5hdHVyYWwgYXDDs3MgbyB1c3XDoXJpbyBlbnZpYXIgTiBtZW5zYWdlbnMgbm8gY2hhdDwvZGl2PgogICAgPC9kaXY+CiAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJ0cmlnZ2VyX21zZ3MiIHZhbHVlPSI8P3BocCBlY2hvIGVzY19hdHRyKCR0cmlnZ2VyX21zZ3MpOyA/PiIgbWluPSIxIiBtYXg9IjEwIgogICAgICBzdHlsZT0id2lkdGg6NjBweDtwYWRkaW5nOjZweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246Y2VudGVyIj4KICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwIj5tc2dzPC9zcGFuPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLXJvdyI+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLWxhYmVsIj4KICAgICAg8J+OryBEZXRlY8Onw6NvIGRlIGludGVuw6fDo28gYWx0YQogICAgICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLWRlc2MiPlBlcmd1bnRhIFdBIHF1YW5kbyB1c3XDoXJpbyB1c2EgcGFsYXZyYXMgZGUgY29tcHJhIChjb25maWd1cmUgYWJhaXhvKTwvZGl2PgogICAgPC9kaXY+CiAgICA8bGFiZWwgY2xhc3M9InNvZmlhLXRvZ2dsZSI+CiAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idHJpZ2dlcl9pbnRlbmNhbyIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJHRyaWdnZXJfaW50ZW5jYW8sJzEnKTsgPz4+CiAgICAgIDxzcGFuIGNsYXNzPSJzb2ZpYS10b2dnbGUtc2xpZGVyIj48L3NwYW4+CiAgICA8L2xhYmVsPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLXJvdyI+CiAgICA8ZGl2IGNsYXNzPSJzb2ZpYS10cmlnZ2VyLWxhYmVsIj4KICAgICAg8J+bkiBDbGlxdWUgZW0gIlF1ZXJvIGVzdGUiCiAgICAgIDxkaXYgY2xhc3M9InNvZmlhLXRyaWdnZXItZGVzYyI+UGVkZSBXQSBxdWFuZG8gdXN1w6FyaW8gY2xpY2Egbm8gYm90w6NvIGRlIHJlc2VydmEgKH43MSUgY29udmVyc8Ojbyk8L2Rpdj4KICAgIDwvZGl2PgogICAgPGxhYmVsIGNsYXNzPSJzb2ZpYS10b2dnbGUiPgogICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InRyaWdnZXJfcXVlcm8iIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKCR0cmlnZ2VyX3F1ZXJvLCcxJyk7ID8+PgogICAgICA8c3BhbiBjbGFzcz0ic29maWEtdG9nZ2xlLXNsaWRlciI+PC9zcGFuPgogICAgPC9sYWJlbD4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJzb2ZpYS1zZWN0aW9uIj4KICA8aDM+8J+UkSBQYWxhdnJhcy1jaGF2ZSBkZSBJbnRlbsOnw6NvIEFsdGE8L2gzPgogIDxwIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MTBweCI+U2VwYXJhZGFzIHBvciB2w61yZ3VsYS4gUXVhbmRvIG8gdXN1w6FyaW8gdXNhciBxdWFscXVlciB1bWEgZGVzc2FzIHBhbGF2cmFzLCBvIGdhdGlsaG8gZGUgaW50ZW7Dp8OjbyBkaXNwYXJhLjwvcD4KICA8dGV4dGFyZWEgbmFtZT0ic29maWFfa2V5d29yZHMiIHJvd3M9IjMiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjEzcHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlIj48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgka2V5d29yZHNfcmF3KTsgPz48L3RleHRhcmVhPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InNvZmlhLXNlY3Rpb24iPgogIDxoMz7wn5KsIE1lbnNhZ2VtIGRlIENhcHR1cmEgZG8gV2hhdHNBcHA8L2gzPgogIDxwIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MTBweCI+VGV4dG8gcXVlIGEgU29mSUEgZW52aWEgcXVhbmRvIHBlZGUgbyBXaGF0c0FwcCBkbyB1c3XDoXJpby4gVXNlIHVtYSBsaW5ndWFnZW0gbmF0dXJhbCBlIGFtaWfDoXZlbC48L3A+CiAgPHRleHRhcmVhIG5hbWU9InNvZmlhX3dhX21zZyIgaWQ9InNvZmlhX3dhX21zZ19pbnB1dCIgcm93cz0iMyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjUiIG9uaW5wdXQ9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb2ZpYV9wcmV2aWV3X21zZycpLnRleHRDb250ZW50PXRoaXMudmFsdWUiPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCRzb2ZpYV93YV9tc2cpOyA/PjwvdGV4dGFyZWE+CjwvZGl2PgoKPGRpdiBjbGFzcz0ic29maWEtc2VjdGlvbiI+CiAgPGgzPuKchSBSZXNwb3N0YSBhcMOzcyByZWNlYmVyIG8gV2hhdHNBcHA8L2gzPgogIDxwIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNmI3MjgwO21hcmdpbi1ib3R0b206MTBweCI+TWVuc2FnZW0gcXVlIGEgU29mSUEgcmVzcG9uZGUgZGVwb2lzIHF1ZSBvIHVzdcOhcmlvIGVudmlhIG8gbsO6bWVyby4gQ29uZmlybWEgbyByZWNlYmltZW50byBlIGNyaWEgZXhwZWN0YXRpdmEuPC9wPgogIDx0ZXh0YXJlYSBuYW1lPSJzb2ZpYV93YV9jb25maXJtIiBpZD0ic29maWFfd2FfY29uZmlybV9pbnB1dCIgcm93cz0iMyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjUiIG9uaW5wdXQ9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb2ZpYV9wcmV2aWV3X2NvbmZpcm0nKS50ZXh0Q29udGVudD10aGlzLnZhbHVlIj48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgkc29maWFfd2FfY29uZmlybSk7ID8+PC90ZXh0YXJlYT4KPC9kaXY+Cgo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmYWY1ZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWRlOWZlO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICA8aDMgc3R5bGU9ImZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojNmQyOGQ5O21hcmdpbjowIDAgMTBweCI+8J+TsSBQcmV2aWV3IOKAlCBDb21vIGFwYXJlY2Ugbm8gY2hhdDwvaDM+CiAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOjMyMHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MnB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxNnB4O3BhZGRpbmc6MTZweCI+CiAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiM3YzNhZWQ7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTBweCAxNHB4O21hcmdpbi1ib3R0b206MTJweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHgiPgogICAgICA8ZGl2IHN0eWxlPSJ3aWR0aDozMnB4O2hlaWdodDozMnB4O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjN2MzYWVkLCNhODU1ZjcpO2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MTZweCI+8J+noDwvZGl2PgogICAgICA8ZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZmZmIj5Tb2ZJQSBBc3Nlc3NvcmE8L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojYzRiNWZkIj7il48gb25saW5lPC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2YzZjRmNjtib3JkZXItcmFkaXVzOjRweCAxNnB4IDE2cHggMTZweDtwYWRkaW5nOjEwcHggMTRweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjU7bWFyZ2luLWJvdHRvbTo4cHg7Y29sb3I6IzFmMjkzNyI+CiAgICAgIDxzcGFuIGlkPSJzb2ZpYV9wcmV2aWV3X21zZyI+PD9waHAgZWNobyBlc2NfaHRtbCgkc29maWFfd2FfbXNnKTsgPz48L3NwYW4+CiAgICA8L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjZmZmYmViLCNmZWYzYzcpO2JvcmRlcjoxcHggc29saWQgI2ZiYmYyNDtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMnB4O21hcmdpbi10b3A6OHB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiM5MjQwMGU7bWFyZ2luLWJvdHRvbTo4cHgiPvCfk7IgU2V1IFdoYXRzQXBwOjwvZGl2PgogICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IigxMSkgOTk5OTktMDAwMCIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZmJiZjI0O2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxMnB4O21hcmdpbi1ib3R0b206NnB4Ij4KICAgICAgPGJ1dHRvbiBzdHlsZT0id2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNGRkQ3MDA7Y29sb3I6IzFmMjkzNztmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7cGFkZGluZzo4cHg7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo4cHg7Y3Vyc29yOmRlZmF1bHQiPkVudmlhciDihpI8L2J1dHRvbj4KICAgIDwvZGl2PgogICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZGNmY2U3O2JvcmRlci1yYWRpdXM6MTZweCAxNnB4IDE2cHggNHB4O3BhZGRpbmc6MTBweCAxNHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNTttYXJnaW4tdG9wOjhweDtjb2xvcjojMTY2NTM0O2JvcmRlcjoxcHggc29saWQgI2JiZjdkMCI+CiAgICAgIDxzcGFuIGlkPSJzb2ZpYV9wcmV2aWV3X2NvbmZpcm0iPjw/cGhwIGVjaG8gZXNjX2h0bWwoJHNvZmlhX3dhX2NvbmZpcm0pOyA/Pjwvc3Bhbj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1wcmltYXJ5IGJ1dHRvbi1sYXJnZSI+8J+SviBTYWx2YXIgQ29uZmlndXJhw6fDtWVzPC9idXR0b24+CjwvZm9ybT4KCjw/cGhwIGVsc2VpZiAoJGFjdGl2ZV90YWIgPT09ICdhdXRvbWFjb2VzJyk6Ci8vIOKVkOKVkOKVkCBBVVRPTUHDh8OVRVMg4oCUIEZhc2UgNCBkaW7Dom1pY28g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCmdsb2JhbCAkd3BkYjsKJHJ1bGVzX3QgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9ydWxlcyc7CiRhbGxfcnVsZXMgPSBbXTsKaWYgKCAkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAnJHJ1bGVzX3QnIikgPT09ICRydWxlc190ICkgewogICAgJGFsbF9ydWxlcyA9ICR3cGRiLT5nZXRfcmVzdWx0cygiU0VMRUNUICogRlJPTSAkcnVsZXNfdCBPUkRFUiBCWSBpZCBBU0MiKSA/OiBbXTsKfQokY2hhbm5lbHNfbGlzdCA9IHZtMl9jaGFubmVscygpOwokYWpfdXJsID0gYWRtaW5fdXJsKCdhZG1pbi1hamF4LnBocCcpOwoKLy8gUGVyZm9ybWFuY2U6IHRvdGFsIGVudmlhZG9zIHBvciByZWdyYQokcGVyZiA9IFtdOwppZiAoICR3cGRiLT5nZXRfdmFyKCJTSE9XIFRBQkxFUyBMSUtFICd7JHdwZGItPnByZWZpeH12bTJfc2VuZHMnIikgPT09ICR3cGRiLT5wcmVmaXguJ3ZtMl9zZW5kcycgKSB7CiAgICAkcGVyZl9yb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKAogICAgICAgICJTRUxFQ1QgbW9kdWxlLCBDT1VOVCgqKSBBUyB0b3RhbCBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9zZW5kcyBXSEVSRSBtb2R1bGUgTElLRSAnc29maWFfYXV0b18lJyBHUk9VUCBCWSBtb2R1bGUiCiAgICApID86IFtdOwogICAgZm9yZWFjaCAoJHBlcmZfcm93cyBhcyAkcHIpIHsKICAgICAgICAkcmlkID0gc3RyX3JlcGxhY2UoJ3NvZmlhX2F1dG9fJywgJycsICRwci0+bW9kdWxlKTsKICAgICAgICAkcGVyZlsoaW50KSRyaWRdID0gKGludCkkcHItPnRvdGFsOwogICAgfQp9CgovLyBMYWJlbHMgYW1pZ8OhdmVpcyBwYXJhIGNvbmRpw6fDtWVzCiRjb25kX2xhYmVscyA9IFsKICAgICd1cmdlbmNpYScgICAgICAgICAgPT4gJ1VyZ8OqbmNpYScsCiAgICAnY29udmVydGVkJyAgICAgICAgID0+ICdDb252ZXJ0aWRvJywKICAgICd3YV9jYXB0dXJhZG8nICAgICAgPT4gJ1dBIENhcHR1cmFkbycsCiAgICAnd2FfdHJpZ2dlcicgICAgICAgID0+ICdUcmlnZ2VyJywKICAgICdkYXRhX2V2ZW50b19zdHInICAgPT4gJ1RlbSBkYXRhIGV2ZW50bycsCiAgICAnZGF5c191bnRpbF9ldmVudCcgID0+ICdEaWFzIGF0w6kgZXZlbnRvJywKICAgICdzZXNzaW9uX2FnZV9ob3VycycgPT4gJ0hvcmFzIGRlc2RlIHNlc3PDo28nLAogICAgJ2NhdGVnb3JpYScgICAgICAgICA9PiAnQ2F0ZWdvcmlhJywKICAgICdtZW5zYWdlbnNfY291bnQnICAgPT4gJ07CuiBtZW5zYWdlbnMnLApdOwokY29uZF92YWxfbGFiZWxzID0gWwogICAgJ3VyZ2VuY2lhfGFsdGEnICAgPT4gJ2FsdGEnLAogICAgJ3VyZ2VuY2lhfG1lZGlhJyAgPT4gJ23DqWRpYScsCiAgICAndXJnZW5jaWF8YmFpeGEnICA9PiAnYmFpeGEnLAogICAgJ2NvbnZlcnRlZHwwJyAgICAgPT4gJ07Do28nLAogICAgJ2NvbnZlcnRlZHwxJyAgICAgPT4gJ1NpbScsCiAgICAnd2FfY2FwdHVyYWRvfDEnICA9PiAnU2ltJywKICAgICd3YV9jYXB0dXJhZG98MCcgID0+ICdOw6NvJywKICAgICd3YV90cmlnZ2VyfHF1ZXJvX2VzdGUnID0+ICdxdWVyb19lc3RlJywKICAgICdkYXRhX2V2ZW50b19zdHJ8bm90X2VtcHR5JyA9PiAncHJlZW5jaGlkYScsCl07CmZ1bmN0aW9uIHZtMl9zb2ZpYV9jb25kX3N1bW1hcnkoJGNvbmRzLCAkY2wsICRjdmwpIHsKICAgICRwYXJ0cyA9IFtdOwogICAgZm9yZWFjaCAoJGNvbmRzIGFzICRjKSB7CiAgICAgICAgJGYgICA9ICRjWydmaWVsZCddID8/ICcnOwogICAgICAgICRvcCAgPSAkY1snb3AnXSAgICA/PyAnZXEnOwogICAgICAgICR2YWwgPSAkY1sndmFsdWUnXSA/PyAnJzsKICAgICAgICAkZmwgID0gJGNsWyRmXSA/PyAkZjsKICAgICAgICAkdmsgID0gInskZn18eyR2YWx9IjsKICAgICAgICAkdmwgID0gJGN2bFskdmtdID8/ICR2YWw7CiAgICAgICAgaWYgKCRvcCA9PT0gJ25vdF9lbXB0eScpICAgJHBhcnRzW10gPSAieyRmbH0gcHJlZW5jaGlkYSI7CiAgICAgICAgZWxzZWlmICgkb3AgPT09ICdndGUnKSAgICAgJHBhcnRzW10gPSAieyRmbH0g4omlIHskdmx9IjsKICAgICAgICBlbHNlaWYgKCRvcCA9PT0gJ2x0ZScpICAgICAkcGFydHNbXSA9ICJ7JGZsfSDiiaQgeyR2bH0iOwogICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gInskZmx9ID0geyR2bH0iOwogICAgfQogICAgcmV0dXJuIGltcGxvZGUoJyArICcsICRwYXJ0cyk7Cn0KPz4KPGRpdiBjbGFzcz0ic29maWEtc2VjdGlvbiIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+CiAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgPGRpdj4KICAgICAgPGgzIHN0eWxlPSJtYXJnaW46MCAwIDRweCI+8J+kliBBdXRvbWHDp8O1ZXMgcG9yIEludGVuw6fDo288L2gzPgogICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6IzZiNzI4MDttYXJnaW46MCI+UXVhbmRvIGEgU29mSUEgY2FwdHVyYSBzaW5haXMgZGUgaW50ZW7Dp8OjbywgYXMgcmVncmFzIGRpc3BhcmFtIFdBIGF1dG9tw6F0aWNvIHZpYSBjYW5hbCBjb25maWd1cmFkby48L3A+CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSIgaWQ9InZtMlNvZmlhTmV3UnVsZSI+KyBOb3ZhIFJlZ3JhPC9idXR0b24+CiAgPC9kaXY+CgogIDxkaXYgaWQ9InZtMlNvZmlhUnVsZXNMaXN0Ij4KICA8P3BocCBpZiAoIGVtcHR5KCRhbGxfcnVsZXMpICk6ID8+CiAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjI0cHg7Y29sb3I6IzljYTNhZjtmb250LXNpemU6MTNweCI+TmVuaHVtYSByZWdyYSBjcmlhZGEuIENsaXF1ZSBlbSAiTm92YSBSZWdyYSIgcGFyYSBjb21lw6dhci48L2Rpdj4KICA8P3BocCBlbHNlOiBmb3JlYWNoICgkYWxsX3J1bGVzIGFzICRydWxlKToKICAgICRjb25kcyAgID0ganNvbl9kZWNvZGUoJHJ1bGUtPmNvbmRpdGlvbnMsIHRydWUpID86IFtdOwogICAgJHN1bW1hcnkgPSB2bTJfc29maWFfY29uZF9zdW1tYXJ5KCRjb25kcywgJGNvbmRfbGFiZWxzLCAkY29uZF92YWxfbGFiZWxzKTsKICAgICRzZW50X2NvdW50ID0gJHBlcmZbJHJ1bGUtPmlkXSA/PyAwOwogICAgJGNoX2xhYmVsICAgPSAkY2hhbm5lbHNfbGlzdFskcnVsZS0+YWN0aW9uX2NoYW5uZWxdWydsYWJlbCddID8/ICRydWxlLT5hY3Rpb25fY2hhbm5lbDsKICA/PgogIDxkaXYgY2xhc3M9InNvZmlhLXJ1bGUtcm93IiBpZD0idm0yUnVsZV88P3BocCBlY2hvICRydWxlLT5pZDsgPz4iIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZSI+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206OHB4Ij4KICAgICAgPGRpdiBjbGFzcz0ic29maWEtcnVsZS10aXRsZSI+PD9waHAgZWNobyBlc2NfaHRtbCgkcnVsZS0+aWNvbiAuICcgJyAuICRydWxlLT5uYW1lKTsgPz48L2Rpdj4KICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4Ij4KICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzZiNzI4MDtiYWNrZ3JvdW5kOiNmM2Y0ZjY7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6MTJweCI+PD9waHAgZWNobyAkc2VudF9jb3VudDsgPz4gZW52aWFkb3M8L3NwYW4+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1zbWFsbCB2bTJTb2ZpYUVkaXRSdWxlIiBkYXRhLWlkPSI8P3BocCBlY2hvICRydWxlLT5pZDsgPz4iIHN0eWxlPSJwYWRkaW5nOjJweCA4cHg7Zm9udC1zaXplOjExcHgiPuKcj++4jyBFZGl0YXI8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJidXR0b24gYnV0dG9uLXNtYWxsIHZtMlNvZmlhRGVsZXRlUnVsZSIgZGF0YS1pZD0iPD9waHAgZWNobyAkcnVsZS0+aWQ7ID8+IiBzdHlsZT0icGFkZGluZzoycHggOHB4O2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiNkYzI2MjY7Ym9yZGVyLWNvbG9yOiNmY2E1YTUiPvCfl5E8L2J1dHRvbj4KICAgICAgICA8bGFiZWwgY2xhc3M9InNvZmlhLXRvZ2dsZSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0idm0yU29maWFUb2dnbGUiIGRhdGEtaWQ9Ijw/cGhwIGVjaG8gJHJ1bGUtPmlkOyA/PiIgPD9waHAgY2hlY2tlZCgkcnVsZS0+ZW5hYmxlZCwgMSk7ID8+PjxzcGFuIGNsYXNzPSJzb2ZpYS10b2dnbGUtc2xpZGVyIj48L3NwYW4+PC9sYWJlbD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNvZmlhLXJ1bGUtYm9keSI+CiAgICAgIDxzcGFuIGNsYXNzPSJzb2ZpYS1ydWxlLWJhZGdlIj5TRTwvc3Bhbj4gPD9waHAgZWNobyBlc2NfaHRtbCgkc3VtbWFyeSk7ID8+PGJyPgogICAgICA8c3BhbiBjbGFzcz0ic29maWEtcnVsZS1iYWRnZSIgc3R5bGU9ImJhY2tncm91bmQ6I2QxZmFlNTtjb2xvcjojMDY1ZjQ2Ij5FTlTDg088L3NwYW4+CiAgICAgIFdBIHZpYSA8P3BocCBlY2hvIGVzY19odG1sKCRjaF9sYWJlbCk7ID8+CiAgICAgIDw/cGhwIGlmICgkcnVsZS0+ZGVsYXlfaG91cnMgPiAwKTogPz4gwrcgZGVsYXkgPD9waHAgZWNobyAkcnVsZS0+ZGVsYXlfaG91cnM7ID8+aDw/cGhwIGVuZGlmOyA/PgogICAgICDCtyBjb29sZG93biA8P3BocCBlY2hvICRydWxlLT5jb29sZG93bl9ob3VyczsgPz5oCiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8P3BocCBlbmRmb3JlYWNoOyBlbmRpZjsgPz4KICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIE1vZGFsIE5vdmEvRWRpdGFyIFJlZ3JhIC0tPgo8ZGl2IGlkPSJ2bTJTb2ZpYVJ1bGVNb2RhbCIgc3R5bGU9ImRpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNSk7ei1pbmRleDo5OTk5OTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlciI+CiAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjI0cHg7d2lkdGg6bWluKDY0MHB4LDk0dncpO21heC1oZWlnaHQ6OTB2aDtvdmVyZmxvdy15OmF1dG87Ym94LXNoYWRvdzowIDIwcHggNjBweCByZ2JhKDAsMCwwLC4zKSI+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgIDxoMyBpZD0idm0yU29maWFNb2RhbFRpdGxlIiBzdHlsZT0ibWFyZ2luOjA7Zm9udC1zaXplOjE2cHgiPk5vdmEgUmVncmE8L2gzPgogICAgICA8YnV0dG9uIGlkPSJ2bTJTb2ZpYU1vZGFsQ2xvc2UiIHN0eWxlPSJiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjIwcHg7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzZiNzI4MCI+4pyVPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJ2bTJTb2ZpYVJ1bGVJZCIgdmFsdWU9IjAiPgoKICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDYwcHg7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgPGRpdj4KICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij5Ob21lIGRhIHJlZ3JhPC9sYWJlbD4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InZtMlNvZmlhUnVsZU5hbWUiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgPC9kaXY+CiAgICAgIDxkaXY+CiAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+w41jb25lPC9sYWJlbD4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InZtMlNvZmlhUnVsZUljb24iIHZhbHVlPSLwn6SWIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTZweDt0ZXh0LWFsaWduOmNlbnRlciI+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjhweCI+CiAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDAiPkNvbmRpw6fDtWVzIChTRSk8L2xhYmVsPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0idm0yU29maWFBZGRDb25kIiBjbGFzcz0iYnV0dG9uIGJ1dHRvbi1zbWFsbCIgc3R5bGU9ImZvbnQtc2l6ZToxMXB4Ij4rIENvbmRpw6fDo288L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9InZtMlNvZmlhQ29uZHNMaXN0IiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4Ij48L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnI7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgPGRpdj4KICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij5DYW5hbDwvbGFiZWw+CiAgICAgICAgPHNlbGVjdCBpZD0idm0yU29maWFSdWxlQ2hhbm5lbCIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxMnB4Ij4KICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRjaGFubmVsc19saXN0IGFzICRjayA9PiAkY3YpOiA/PgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkY2spOyA/PiI+PD9waHAgZWNobyBlc2NfaHRtbCgkY3ZbJ2xhYmVsJ10gPz8gJGNrKTsgPz48L29wdGlvbj4KICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgPC9zZWxlY3Q+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2PgogICAgICAgIDxsYWJlbCBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjAwO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPkRlbGF5IChoIGFudGVzIGRlIGRpc3BhcmFyKTwvbGFiZWw+CiAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InZtMlNvZmlhUnVsZURlbGF5IiB2YWx1ZT0iMCIgbWluPSIwIiBtYXg9IjE2OCIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxM3B4Ij4KICAgICAgPC9kaXY+CiAgICAgIDxkaXY+CiAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+Q29vbGRvd24gKGggZW50cmUgZW52aW9zKTwvbGFiZWw+CiAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InZtMlNvZmlhUnVsZUNvb2xkb3duIiB2YWx1ZT0iNDgiIG1pbj0iMSIgbWF4PSI3MjAiIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTNweCI+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjRweCI+TWVuc2FnZW0gV0EgKEVOVMODTyk8L2xhYmVsPgogICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjExcHg7Y29sb3I6IzZiNzI4MDttYXJnaW46MCAwIDZweCI+VmFyacOhdmVpczoge25vbWV9IHtjYXRlZ29yaWF9IHtwcm9kdXRvfSB7bGlua19wcm9kdXRvfSB7ZGF0YV9ldmVudG99PC9wPgogICAgICA8dGV4dGFyZWEgaWQ9InZtMlNvZmlhUnVsZU1zZyIgcm93cz0iNSIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjU7cmVzaXplOnZlcnRpY2FsIj48L3RleHRhcmVhPgogICAgPC9kaXY+CgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMHB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZCI+CiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0idm0yU29maWFNb2RhbENhbmNlbCIgY2xhc3M9ImJ1dHRvbiI+Q2FuY2VsYXI8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJ2bTJTb2ZpYU1vZGFsU2F2ZSIgY2xhc3M9ImJ1dHRvbiBidXR0b24tcHJpbWFyeSI+8J+SviBTYWx2YXIgUmVncmE8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgY2xhc3M9InNvZmlhLXNlY3Rpb24iPgogIDxoMz7wn5OKIFBlcmZvcm1hbmNlIGRhcyBBdXRvbWHDp8O1ZXM8L2gzPgogIDw/cGhwCiAgJHRvdGFsX3NvZmlhX3NlbnQgPSBhcnJheV9zdW0oJHBlcmYpOwogIGlmICgkdG90YWxfc29maWFfc2VudCA+IDApOgogICAgLy8gQ29udmVyc8O1ZXM6IHBlZGlkb3MgY3VqbyB0ZWxlZm9uZSByZWNlYmV1IHNvZmlhX2F1dG9fKiAobmFpdmUgYXR0cmlidXRpb24pCiAgICAkc29maWFfcGhvbmVzID0gJHdwZGItPmdldF9jb2woCiAgICAgICAgIlNFTEVDVCBESVNUSU5DVCBwaG9uZSBGUk9NIHskd3BkYi0+cHJlZml4fXZtMl9zZW5kcyBXSEVSRSBtb2R1bGUgTElLRSAnc29maWFfYXV0b18lJyIKICAgICkgPzogW107CiAgICAkY29udl9jb3VudCA9IDA7CiAgICBmb3JlYWNoICgkc29maWFfcGhvbmVzIGFzICRzcCkgewogICAgICAgICRsYXN0OSA9IHN1YnN0cihwcmVnX3JlcGxhY2UoJy9cRC8nLCcnLCRzcCksIC05KTsKICAgICAgICAkZm91bmQgPSAkd3BkYi0+Z2V0X3Zhcigkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIHskd3BkYi0+cHJlZml4fXBvc3RzIHAKICAgICAgICAgICAgIElOTkVSIEpPSU4geyR3cGRiLT5wcmVmaXh9cG9zdG1ldGEgcG0gT04gcG0ucG9zdF9pZCA9IHAuSUQgQU5EIHBtLm1ldGFfa2V5ID0gJ19iaWxsaW5nX3Bob25lJwogICAgICAgICAgICAgV0hFUkUgcC5wb3N0X3R5cGUgPSAnc2hvcF9vcmRlcicgQU5EIHAucG9zdF9zdGF0dXMgSU4gKCd3Yy1wcm9jZXNzaW5nJywnd2MtY29tcGxldGVkJywnc2lnbmluZy1wZW5kaW5nJywnY29udHJhY3Qtc2lnbmVkJykKICAgICAgICAgICAgIEFORCBSSUdIVChSRUdFWFBfUkVQTEFDRShwbS5tZXRhX3ZhbHVlLCdbXjAtOV0nLCcnKSwgOSkgPSAlcyIsCiAgICAgICAgICAgICRsYXN0OQogICAgICAgICkpOwogICAgICAgIGlmICgkZm91bmQgPiAwKSAkY29udl9jb3VudCsrOwogICAgfQogID8+CiAgPGRpdiBzdHlsZT0iZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMywxZnIpO2dhcDoxMnB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmMGZkZjQ7Ym9yZGVyOjFweCBzb2xpZCAjODZlZmFjO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXIiPgogICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MjhweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzE2YTM0YSI+PD9waHAgZWNobyAkdG90YWxfc29maWFfc2VudDsgPz48L2Rpdj4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzE1ODAzZDttYXJnaW4tdG9wOjRweCI+VG90YWwgRW52aWFkb3M8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZWZmNmZmO2JvcmRlcjoxcHggc29saWQgIzkzYzVmZDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNnB4O3RleHQtYWxpZ246Y2VudGVyIj4KICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjI4cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMyNTYzZWIiPjw/cGhwIGVjaG8gY291bnQoJHNvZmlhX3Bob25lcyk7ID8+PC9kaXY+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiMxZDRlZDg7bWFyZ2luLXRvcDo0cHgiPkxlYWRzIEFsY2Fuw6dhZG9zPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZkZjRmZjtib3JkZXI6MXB4IHNvbGlkICNkOGI0ZmU7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTZweDt0ZXh0LWFsaWduOmNlbnRlciI+CiAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToyOHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojOTMzM2VhIj48P3BocCBlY2hvICRjb252X2NvdW50OyA/PjwvZGl2PgogICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojN2UyMmNlO21hcmdpbi10b3A6NHB4Ij5Db252ZXJ0aWRvczwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPHRhYmxlIHN0eWxlPSJ3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtmb250LXNpemU6MTNweCI+CiAgICA8dGhlYWQ+PHRyIHN0eWxlPSJiYWNrZ3JvdW5kOiNmOWZhZmIiPgogICAgICA8dGggc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7dGV4dC1hbGlnbjpsZWZ0O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU3ZWIiPlJlZ3JhPC90aD4KICAgICAgPHRoIHN0eWxlPSJwYWRkaW5nOjhweCAxMnB4O3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU3ZWIiPkVudmlhZG9zPC90aD4KICAgIDwvdHI+PC90aGVhZD4KICAgIDx0Ym9keT4KICAgIDw/cGhwIGZvcmVhY2ggKCRhbGxfcnVsZXMgYXMgJHJ1bGUpOgogICAgICAkcnVsZV9zZW50ID0gJHBlcmZbJHJ1bGUtPmlkXSA/PyAwOwogICAgPz4KICAgIDx0ciBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2YzZjRmNiI+CiAgICAgIDx0ZCBzdHlsZT0icGFkZGluZzo4cHggMTJweCI+PD9waHAgZWNobyBlc2NfaHRtbCgkcnVsZS0+aWNvbiAuICcgJyAuICRydWxlLT5uYW1lKTsgPz48L3RkPgogICAgICA8dGQgc3R5bGU9InBhZGRpbmc6OHB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6NjAwIj48P3BocCBlY2hvICRydWxlX3NlbnQ7ID8+PC90ZD4KICAgIDwvdHI+CiAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogICAgPC90Ym9keT4KICA8L3RhYmxlPgogIDw/cGhwIGVsc2U6ID8+CiAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzozMHB4O2NvbG9yOiM5Y2EzYWYiPgogICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjMycHg7bWFyZ2luLWJvdHRvbTo4cHgiPvCfk4g8L2Rpdj4KICAgIDxkaXY+QXMgYXV0b21hw6fDtWVzIGVzdMOjbyByb2RhbmRvISBPcyBkYWRvcyBhcGFyZWNlcsOjbyBjb25mb3JtZSBvcyBwcmltZWlyb3MgZW52aW9zIG9jb3JyZXJlbS48L2Rpdj4KICA8L2Rpdj4KICA8P3BocCBlbmRpZjsgPz4KPC9kaXY+Cgo8c2NyaXB0PgooZnVuY3Rpb24oKXsKICBjb25zdCBhamF4VXJsID0gJzw/cGhwIGVjaG8gZXNjX2pzKCRhal91cmwpOyA/Pic7CiAgY29uc3Qgbm9uY2UgICA9ICc8P3BocCBlY2hvIHdwX2NyZWF0ZV9ub25jZSgidm0yX3NvZmlhX2F1dG9fbm9uY2UiKTsgPz4nOwoKICAvLyDilIDilIAgQ29uZGnDp8OjbyBmaWVsZHMgY29uZmlnIOKUgOKUgAogIGNvbnN0IGNvbmRGaWVsZHMgPSBbCiAgICB7djondXJnZW5jaWEnLCAgICAgICAgICBsOidVcmfDqm5jaWEnLCAgICAgICAgICAgIG9wczpbJ2VxJ10sICAgICAgICB2YWxzOlt7djonYWx0YScsbDonQWx0YSd9LHt2OidtZWRpYScsbDonTcOpZGlhJ30se3Y6J2JhaXhhJyxsOidCYWl4YSd9XX0sCiAgICB7djonY29udmVydGVkJywgICAgICAgICBsOidDb252ZXJ0aWRvJywgICAgICAgICAgb3BzOlsnZXEnXSwgICAgICAgIHZhbHM6W3t2OicwJyxsOidOw6NvJ30se3Y6JzEnLGw6J1NpbSd9XX0sCiAgICB7djond2FfY2FwdHVyYWRvJywgICAgICBsOidXQSBDYXB0dXJhZG8nLCAgICAgICAgb3BzOlsnZXEnXSwgICAgICAgIHZhbHM6W3t2OicxJyxsOidTaW0nfSx7djonMCcsbDonTsOjbyd9XX0sCiAgICB7djond2FfdHJpZ2dlcicsICAgICAgICBsOidUcmlnZ2VyIFdBJywgICAgICAgICAgb3BzOlsnZXEnXSwgICAgICAgIHZhbHM6W3t2OidxdWVyb19lc3RlJyxsOidxdWVyb19lc3RlJ31dfSwKICAgIHt2OidkYXRhX2V2ZW50b19zdHInLCAgIGw6J0RhdGEgZXZlbnRvJywgICAgICAgICBvcHM6Wydub3RfZW1wdHknXSwgdmFsczpbXX0sCiAgICB7djonZGF5c191bnRpbF9ldmVudCcsICBsOidEaWFzIGF0w6kgZXZlbnRvJywgICAgIG9wczpbJ2x0ZScsJ2d0ZSddLCB2YWxzOltdLCBmcmVlSW5wdXQ6dHJ1ZX0sCiAgICB7djonc2Vzc2lvbl9hZ2VfaG91cnMnLCBsOidIb3JhcyBkZXNkZSBzZXNzw6NvJywgIG9wczpbJ2d0ZScsJ2x0ZSddLCB2YWxzOltdLCBmcmVlSW5wdXQ6dHJ1ZX0sCiAgICB7djonY2F0ZWdvcmlhJywgICAgICAgICBsOidDYXRlZ29yaWEnLCAgICAgICAgICAgb3BzOlsnZXEnXSwgICAgICAgIHZhbHM6W10sIGZyZWVJbnB1dDp0cnVlfSwKICAgIHt2OidtZW5zYWdlbnNfY291bnQnLCAgIGw6J07CuiBtZW5zYWdlbnMnLCAgICAgICAgb3BzOlsnZ3RlJywnbHRlJ10sIHZhbHM6W10sIGZyZWVJbnB1dDp0cnVlfSwKICBdOwogIGNvbnN0IG9wTGFiZWxzID0ge2VxOic9JywgZ3RlOifiiaUnLCBsdGU6J+KJpCcsIG5vdF9lbXB0eToncHJlZW5jaGlkYSd9OwoKICBmdW5jdGlvbiBidWlsZENvbmRSb3coY29uZCkgewogICAgY29uc3Qgd3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgd3JhcC5zdHlsZS5jc3NUZXh0ID0gJ2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtiYWNrZ3JvdW5kOiNmOWZhZmI7cGFkZGluZzo4cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViJzsKICAgIGNvbnN0IGZpZWxkU2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7CiAgICBmaWVsZFNlbC5zdHlsZS5jc3NUZXh0ID0gJ2ZsZXg6MTtwYWRkaW5nOjVweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEycHgnOwogICAgY29uZEZpZWxkcy5mb3JFYWNoKGYgPT4gewogICAgICBjb25zdCBvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgIG8udmFsdWUgPSBmLnY7IG8udGV4dENvbnRlbnQgPSBmLmw7CiAgICAgIGlmIChjb25kICYmIGNvbmQuZmllbGQgPT09IGYudikgby5zZWxlY3RlZCA9IHRydWU7CiAgICAgIGZpZWxkU2VsLmFwcGVuZENoaWxkKG8pOwogICAgfSk7CgogICAgY29uc3Qgb3BTZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTsKICAgIG9wU2VsLnN0eWxlLmNzc1RleHQgPSAnd2lkdGg6ODBweDtwYWRkaW5nOjVweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEycHgnOwoKICAgIGNvbnN0IHZhbFdyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHZhbFdyYXAuc3R5bGUuY3NzVGV4dCA9ICdmbGV4OjEnOwoKICAgIGZ1bmN0aW9uIHJlZnJlc2hPcHNBbmRWYWxzKCkgewogICAgICBjb25zdCBmRGVmID0gY29uZEZpZWxkcy5maW5kKGYgPT4gZi52ID09PSBmaWVsZFNlbC52YWx1ZSkgfHwgY29uZEZpZWxkc1swXTsKICAgICAgb3BTZWwuaW5uZXJIVE1MID0gJyc7CiAgICAgIGZEZWYub3BzLmZvckVhY2gob3AgPT4gewogICAgICAgIGNvbnN0IG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsgby52YWx1ZSA9IG9wOyBvLnRleHRDb250ZW50ID0gb3BMYWJlbHNbb3BdfHxvcDsKICAgICAgICBpZiAoY29uZCAmJiBjb25kLm9wID09PSBvcCkgby5zZWxlY3RlZCA9IHRydWU7CiAgICAgICAgb3BTZWwuYXBwZW5kQ2hpbGQobyk7CiAgICAgIH0pOwogICAgICB2YWxXcmFwLmlubmVySFRNTCA9ICcnOwogICAgICBpZiAoZkRlZi5mcmVlSW5wdXQgfHwgKGZEZWYudmFscyAmJiBmRGVmLnZhbHMubGVuZ3RoID09PSAwKSkgewogICAgICAgIGNvbnN0IGlucCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgaW5wLnR5cGUgPSAndGV4dCc7IGlucC5jbGFzc05hbWUgPSAnY29uZFZhbCc7CiAgICAgICAgaW5wLnN0eWxlLmNzc1RleHQgPSAnd2lkdGg6MTAwJTtwYWRkaW5nOjVweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEycHgnOwogICAgICAgIGlucC52YWx1ZSA9IChjb25kICYmIGNvbmQudmFsdWUpID8gY29uZC52YWx1ZSA6ICcnOwogICAgICAgIHZhbFdyYXAuYXBwZW5kQ2hpbGQoaW5wKTsKICAgICAgfSBlbHNlIGlmIChmRGVmLnZhbHMgJiYgZkRlZi52YWxzLmxlbmd0aCA+IDApIHsKICAgICAgICBjb25zdCBzZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTsKICAgICAgICBzZWwuY2xhc3NOYW1lID0gJ2NvbmRWYWwnOwogICAgICAgIHNlbC5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOjEwMCU7cGFkZGluZzo1cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxMnB4JzsKICAgICAgICBmRGVmLnZhbHMuZm9yRWFjaCh2diA9PiB7CiAgICAgICAgICBjb25zdCBvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7IG8udmFsdWUgPSB2di52OyBvLnRleHRDb250ZW50ID0gdnYubDsKICAgICAgICAgIGlmIChjb25kICYmIGNvbmQudmFsdWUgPT0gdnYudikgby5zZWxlY3RlZCA9IHRydWU7CiAgICAgICAgICBzZWwuYXBwZW5kQ2hpbGQobyk7CiAgICAgICAgfSk7CiAgICAgICAgdmFsV3JhcC5hcHBlbmRDaGlsZChzZWwpOwogICAgICB9CiAgICB9CgogICAgcmVmcmVzaE9wc0FuZFZhbHMoKTsKICAgIGZpZWxkU2VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHsgcmVmcmVzaE9wc0FuZFZhbHMoKTsgfSk7CgogICAgY29uc3Qgcm1CdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgIHJtQnRuLnR5cGUgPSAnYnV0dG9uJzsgcm1CdG4udGV4dENvbnRlbnQgPSAn4pyVJzsKICAgIHJtQnRuLnN0eWxlLmNzc1RleHQgPSAnYmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO2NvbG9yOiNkYzI2MjY7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE0cHg7cGFkZGluZzoycHggNHB4JzsKICAgIHJtQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gd3JhcC5yZW1vdmUoKSk7CgogICAgd3JhcC5hcHBlbmRDaGlsZChmaWVsZFNlbCk7CiAgICB3cmFwLmFwcGVuZENoaWxkKG9wU2VsKTsKICAgIHdyYXAuYXBwZW5kQ2hpbGQodmFsV3JhcCk7CiAgICB3cmFwLmFwcGVuZENoaWxkKHJtQnRuKTsKICAgIC8vIFN0b3JlIHJlZnMKICAgIHdyYXAuX2ZpZWxkU2VsID0gZmllbGRTZWw7CiAgICB3cmFwLl9vcFNlbCAgICA9IG9wU2VsOwogICAgd3JhcC5fdmFsV3JhcCAgPSB2YWxXcmFwOwogICAgcmV0dXJuIHdyYXA7CiAgfQoKICBmdW5jdGlvbiBvcGVuTW9kYWwocnVsZSkgewogICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yU29maWFSdWxlTW9kYWwnKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJTb2ZpYU1vZGFsVGl0bGUnKS50ZXh0Q29udGVudCA9IHJ1bGUgPyAnRWRpdGFyIFJlZ3JhJyA6ICdOb3ZhIFJlZ3JhJzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJTb2ZpYVJ1bGVJZCcpLnZhbHVlICAgPSBydWxlID8gcnVsZS5pZCA6IDA7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yU29maWFSdWxlTmFtZScpLnZhbHVlID0gcnVsZSA/IHJ1bGUubmFtZSA6ICcnOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlNvZmlhUnVsZUljb24nKS52YWx1ZSA9IHJ1bGUgPyBydWxlLmljb24gOiAn8J+klic7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yU29maWFSdWxlRGVsYXknKS52YWx1ZSAgICA9IHJ1bGUgPyBydWxlLmRlbGF5X2hvdXJzICAgIDogMDsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJTb2ZpYVJ1bGVDb29sZG93bicpLnZhbHVlID0gcnVsZSA/IHJ1bGUuY29vbGRvd25faG91cnMgOiA0ODsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJTb2ZpYVJ1bGVNc2cnKS52YWx1ZSAgICAgID0gcnVsZSA/IHJ1bGUuYWN0aW9uX21lc3NhZ2UgOiAnJzsKICAgIGNvbnN0IGNoU2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlNvZmlhUnVsZUNoYW5uZWwnKTsKICAgIGlmIChydWxlKSB7IGZvciAobGV0IG8gb2YgY2hTZWwub3B0aW9ucykgaWYgKG8udmFsdWUgPT09IHJ1bGUuYWN0aW9uX2NoYW5uZWwpIHsgby5zZWxlY3RlZD10cnVlOyBicmVhazsgfSB9CgogICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJTb2ZpYUNvbmRzTGlzdCcpOwogICAgbGlzdC5pbm5lckhUTUwgPSAnJzsKICAgIGNvbnN0IGNvbmRzID0gcnVsZSA/IChBcnJheS5pc0FycmF5KHJ1bGUuY29uZGl0aW9ucykgPyBydWxlLmNvbmRpdGlvbnMgOiBbXSkgOiBbXTsKICAgIGNvbmRzLmZvckVhY2goYyA9PiBsaXN0LmFwcGVuZENoaWxkKGJ1aWxkQ29uZFJvdyhjKSkpOwogICAgaWYgKGNvbmRzLmxlbmd0aCA9PT0gMCkgbGlzdC5hcHBlbmRDaGlsZChidWlsZENvbmRSb3cobnVsbCkpOwoKICAgIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7CiAgfQoKICBmdW5jdGlvbiBjbG9zZU1vZGFsKCkgewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlNvZmlhUnVsZU1vZGFsJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICB9CgogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJTb2ZpYU5ld1J1bGUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IG9wZW5Nb2RhbChudWxsKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlNvZmlhTW9kYWxDbG9zZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY2xvc2VNb2RhbCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlNvZmlhTW9kYWxDYW5jZWwnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlTW9kYWwpOwoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yU29maWFBZGRDb25kJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yU29maWFDb25kc0xpc3QnKS5hcHBlbmRDaGlsZChidWlsZENvbmRSb3cobnVsbCkpOwogIH0pOwoKICAvLyBUb2dnbGUgb24vb2ZmCiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZtMlNvZmlhVG9nZ2xlJykuZm9yRWFjaChjaGsgPT4gewogICAgY2hrLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICBjb25zdCBpZCA9IHRoaXMuZGF0YXNldC5pZDsKICAgICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAndm0yX3NvZmlhX3RvZ2dsZV9ydWxlJyk7CiAgICAgIGZkLmFwcGVuZCgnbm9uY2UnLCBub25jZSk7CiAgICAgIGZkLmFwcGVuZCgncnVsZV9pZCcsIGlkKTsKICAgICAgZmQuYXBwZW5kKCdlbmFibGVkJywgdGhpcy5jaGVja2VkID8gMSA6IDApOwogICAgICBmZXRjaChhamF4VXJsLCB7bWV0aG9kOidQT1NUJywgYm9keTpmZH0pCiAgICAgICAgLnRoZW4ocj0+ci5qc29uKCkpCiAgICAgICAgLnRoZW4oZD0+eyBpZighZC5zdWNjZXNzKSB7IHRoaXMuY2hlY2tlZCA9ICF0aGlzLmNoZWNrZWQ7IGFsZXJ0KCdFcnJvIGFvIHNhbHZhcicpOyB9IH0pOwogICAgfSk7CiAgfSk7CgogIC8vIEVkaXQKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudm0yU29maWFFZGl0UnVsZScpLmZvckVhY2goYnRuID0+IHsKICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICBjb25zdCBpZCA9IHRoaXMuZGF0YXNldC5pZDsKICAgICAgZmV0Y2goYWpheFVybCArICc/YWN0aW9uPXZtMl9zb2ZpYV9nZXRfcnVsZSZydWxlX2lkPScgKyBpZCArICcmbm9uY2U9JyArIG5vbmNlKQogICAgICAgIC50aGVuKHI9PnIuanNvbigpKQogICAgICAgIC50aGVuKGQ9PnsgaWYoZC5zdWNjZXNzKSBvcGVuTW9kYWwoZC5kYXRhKTsgZWxzZSBhbGVydCgnRXJybyBhbyBjYXJyZWdhciByZWdyYScpOyB9KTsKICAgIH0pOwogIH0pOwoKICAvLyBEZWxldGUKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudm0yU29maWFEZWxldGVSdWxlJykuZm9yRWFjaChidG4gPT4gewogICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgIGlmICghY29uZmlybSgnRGVsZXRhciBlc3RhIHJlZ3JhPycpKSByZXR1cm47CiAgICAgIGNvbnN0IGlkID0gdGhpcy5kYXRhc2V0LmlkOwogICAgICBjb25zdCBmZCA9IG5ldyBGb3JtRGF0YSgpOwogICAgICBmZC5hcHBlbmQoJ2FjdGlvbicsICd2bTJfc29maWFfZGVsZXRlX3J1bGUnKTsKICAgICAgZmQuYXBwZW5kKCdub25jZScsIG5vbmNlKTsKICAgICAgZmQuYXBwZW5kKCdydWxlX2lkJywgaWQpOwogICAgICBmZXRjaChhamF4VXJsLCB7bWV0aG9kOidQT1NUJywgYm9keTpmZH0pCiAgICAgICAgLnRoZW4ocj0+ci5qc29uKCkpCiAgICAgICAgLnRoZW4oZD0+ewogICAgICAgICAgaWYgKGQuc3VjY2VzcykgewogICAgICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJSdWxlXycgKyBpZCk7CiAgICAgICAgICAgIGlmIChlbCkgZWwucmVtb3ZlKCk7CiAgICAgICAgICB9IGVsc2UgYWxlcnQoJ0Vycm8gYW8gZGVsZXRhcicpOwogICAgICAgIH0pOwogICAgfSk7CiAgfSk7CgogIC8vIFNhdmUKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yU29maWFNb2RhbFNhdmUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgY29uc3Qgc2F2ZUJ0biA9IHRoaXM7CiAgICBzYXZlQnRuLmRpc2FibGVkID0gdHJ1ZTsKICAgIHNhdmVCdG4udGV4dENvbnRlbnQgPSAnU2FsdmFuZG8uLi4nOwoKICAgIC8vIENvbGxlY3QgY29uZGl0aW9ucwogICAgY29uc3QgY29uZHMgPSBbXTsKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyN2bTJTb2ZpYUNvbmRzTGlzdCA+IGRpdicpLmZvckVhY2gocm93ID0+IHsKICAgICAgY29uc3QgZlNlbCA9IHJvdy5fZmllbGRTZWw7CiAgICAgIGNvbnN0IG9TZWwgPSByb3cuX29wU2VsOwogICAgICBjb25zdCB2RWwgID0gcm93Ll92YWxXcmFwID8gcm93Ll92YWxXcmFwLnF1ZXJ5U2VsZWN0b3IoJy5jb25kVmFsJykgOiBudWxsOwogICAgICBpZiAoIWZTZWwpIHJldHVybjsKICAgICAgY29uc3QgZmllbGQgPSBmU2VsLnZhbHVlOwogICAgICBjb25zdCBvcCAgICA9IG9TZWwgPyBvU2VsLnZhbHVlIDogJ2VxJzsKICAgICAgbGV0IHZhbCA9IHZFbCA/IHZFbC52YWx1ZSA6ICcnOwogICAgICBpZiAob3AgPT09ICdub3RfZW1wdHknKSB2YWwgPSAnJzsKICAgICAgaWYgKGZpZWxkICYmIHZhbCAhPT0gdW5kZWZpbmVkKSBjb25kcy5wdXNoKHtmaWVsZCwgb3AsIHZhbDogdmFsID09PSB1bmRlZmluZWQgPyAnJyA6IHZhbH0pOwogICAgfSk7CgogICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoKTsKICAgIGZkLmFwcGVuZCgnYWN0aW9uJywgJ3ZtMl9zb2ZpYV9zYXZlX3J1bGUnKTsKICAgIGZkLmFwcGVuZCgnbm9uY2UnLCBub25jZSk7CiAgICBmZC5hcHBlbmQoJ3J1bGVfaWQnLCAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlNvZmlhUnVsZUlkJykudmFsdWUpOwogICAgZmQuYXBwZW5kKCduYW1lJywgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJTb2ZpYVJ1bGVOYW1lJykudmFsdWUpOwogICAgZmQuYXBwZW5kKCdpY29uJywgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJTb2ZpYVJ1bGVJY29uJykudmFsdWUpOwogICAgZmQuYXBwZW5kKCdkZWxheV9ob3VycycsICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJTb2ZpYVJ1bGVEZWxheScpLnZhbHVlKTsKICAgIGZkLmFwcGVuZCgnY29vbGRvd25faG91cnMnLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yU29maWFSdWxlQ29vbGRvd24nKS52YWx1ZSk7CiAgICBmZC5hcHBlbmQoJ2FjdGlvbl9jaGFubmVsJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlNvZmlhUnVsZUNoYW5uZWwnKS52YWx1ZSk7CiAgICBmZC5hcHBlbmQoJ2FjdGlvbl9tZXNzYWdlJywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMlNvZmlhUnVsZU1zZycpLnZhbHVlKTsKICAgIGZkLmFwcGVuZCgnY29uZGl0aW9ucycsICAgICBKU09OLnN0cmluZ2lmeShjb25kcy5tYXAoYyA9PiAoe2ZpZWxkOmMuZmllbGQsIG9wOmMub3AsIHZhbHVlOmMudmFsfSkpKSk7CgogICAgZmV0Y2goYWpheFVybCwge21ldGhvZDonUE9TVCcsIGJvZHk6ZmR9KQogICAgICAudGhlbihyPT5yLmpzb24oKSkKICAgICAgLnRoZW4oZD0+ewogICAgICAgIHNhdmVCdG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICBzYXZlQnRuLnRleHRDb250ZW50ID0gJ/Cfkr4gU2FsdmFyIFJlZ3JhJzsKICAgICAgICBpZiAoZC5zdWNjZXNzKSB7CiAgICAgICAgICBjbG9zZU1vZGFsKCk7CiAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWxlcnQoJ0Vycm8gYW8gc2FsdmFyOiAnICsgSlNPTi5zdHJpbmdpZnkoZC5kYXRhKSk7CiAgICAgICAgfQogICAgICB9KQogICAgICAuY2F0Y2goKCk9Pnsgc2F2ZUJ0bi5kaXNhYmxlZD1mYWxzZTsgc2F2ZUJ0bi50ZXh0Q29udGVudD0n8J+SviBTYWx2YXIgUmVncmEnOyBhbGVydCgnRXJybyBkZSByZWRlJyk7IH0pOwogIH0pOwoKICAvLyBDbG9zZSBtb2RhbCBvbiBiYWNrZHJvcCBjbGljawogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJTb2ZpYVJ1bGVNb2RhbCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgaWYgKGUudGFyZ2V0ID09PSB0aGlzKSBjbG9zZU1vZGFsKCk7CiAgfSk7Cn0pKCk7Cjwvc2NyaXB0PgoKPD9waHAgZWxzZWlmICgkYWN0aXZlX3RhYiA9PT0gJ3BsYW5vJyk6ID8+CjwhLS0g4pWQ4pWQ4pWQIFBMQU5PIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAtLT4KPGRpdiBjbGFzcz0ic29maWEtc2VjdGlvbiI+CiAgPGgzPvCfj5fvuI8gUGxhbm8gZGUgSW1wbGVtZW50YcOnw6NvIOKAlCBTb2ZJQSBJbnRlbGxpZ2VuY2U8L2gzPgogIDxwIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojNmI3MjgwO21hcmdpbjowIDAgMTZweCI+Um90ZWlybyBwYXJhIHRyYW5zZm9ybWFyIGNvbnZlcnNhcyBlbSB2ZW5kYXMgYXV0b23DoXRpY2FzPC9wPgoKICA8ZGl2IGNsYXNzPSJzb2ZpYS1wbGFuLXBoYXNlIHNvZmlhLXBsYW4tZG9uZSI+CiAgICA8aDQ+4pyFIEZhc2UgMSDigJQgQmFzZSAoQ29uY2x1w61kYSk8L2g0PgogICAgPHA+VGFiZWxhIHZtMl9zb2ZpYV9zZXNzaW9ucyDigKIgUkVTVCBlbmRwb2ludCAvc29maWEvc2Vzc2lvbiDigKIgTWVudSBhZG1pbiDigKIgNCBhYmFzIFVJIOKAoiBTY2hlbWEgQkQgY29tcGxldG88L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InNvZmlhLXBsYW4tcGhhc2Ugc29maWEtcGxhbi1kb2luZyI+CiAgICA8aDQ+8J+UhCBGYXNlIDIg4oCUIENhcHR1cmEgQXRpdmEgKEVtIGFuZGFtZW50byk8L2g0PgogICAgPHA+SW50ZWdyYcOnw6NvIHZtLWJvdHRvbS1uYXY6IGVudmlhciBkYWRvcyBwYXJhIGVuZHBvaW50IGFww7NzIGNhZGEgbWVuc2FnZW0g4oCiIFNvZnQgYXNrIGFww7NzIE4gbWVuc2FnZW5zIOKAoiBEZXRlY8Onw6NvIGRlIHBhbGF2cmFzLWNoYXZlIG5vIGZyb250ZW5kIOKAoiBDYXB0dXJhIG5vICJRdWVybyBlc3RlIjwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0ic29maWEtcGxhbi1waGFzZSI+CiAgICA8aDQ+8J+TiyBGYXNlIDMg4oCUIFNpbmFpcyAmIENsYXNzaWZpY2HDp8OjbzwvaDQ+CiAgICA8cD5QYXJzZXIgZGUgaW50ZW7Dp8OjbyBubyBiYWNrZW5kIOKAoiBDbGFzc2lmaWNhw6fDo28gYXV0b23DoXRpY2EgZGUgY2F0ZWdvcmlhIChpbmZhbnRpbC9jYXNhbWVudG8vZXRjKSDigKIgRXh0cmHDp8OjbyBkZSBkYXRhIG1lbmNpb25hZGEgbm8gY2hhdCDigKIgU2NvcmUgZGUgdXJnw6puY2lhPC9wPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJzb2ZpYS1wbGFuLXBoYXNlIHNvZmlhLXBsYW4tZG9uZSI+CiAgICA8aDQ+4pyFIEZhc2UgNCDigJQgQXV0b21hw6fDtWVzIHBvciBJbnRlbsOnw6NvIChDb25jbHXDrWRhKTwvaDQ+CiAgICA8cD5FbmdpbmUgZGUgcmVncmFzIFNFL0VOVMODTyBpbnRlZ3JhZGEgYW8gQXF1ZWNlciDigKIgRGlzcGFyb3MgcGVyc29uYWxpemFkb3MgcG9yIGNhdGVnb3JpYSBlIHVyZ8OqbmNpYSDigKIgMyByZWdyYXMgcHLDqS1jb25maWd1cmFkYXMg4oCiIENyb24gaG9yw6FyaW8g4oCiIEJ1aWxkZXIgdmlzdWFsIGRlIGNvbmRpw6fDtWVzPC9wPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJzb2ZpYS1wbGFuLXBoYXNlIj4KICAgIDxoND7wn5OLIEZhc2UgNSDigJQgRGFzaGJvYXJkIEF2YW7Dp2FkbzwvaDQ+CiAgICA8cD5HcsOhZmljbyBkZSBmdW5pbCBpbnRlcmF0aXZvIOKAoiBOdXZlbSBkZSBwYWxhdnJhcyBkYXMgc2Vzc8O1ZXMg4oCiIE1hcGEgZGUgY2Fsb3IgcG9yIGhvcsOhcmlvIOKAoiBDb21wYXJhdGl2byBzZW1hbmFsL21lbnNhbDwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0ic29maWEtcGxhbi1waGFzZSI+CiAgICA8aDQ+8J+TiyBGYXNlIDYg4oCUIFZpc8OjbyBDb21wbGV0YTwvaDQ+CiAgICA8cD5EZXNsaWdhciBLb21tbyBjb21vIENSTSBwcmluY2lwYWwg4oCiIExvamEgMTAwJSBpbmRlcGVuZGVudGUgZSBpbnRlbGlnZW50ZSDigKIgU29mSUEgY29uaGVjZSBoaXN0w7NyaWNvIGNvbXBsZXRvIGRvIHZpc2l0YW50ZSBhbyByZXRvcm5hcjwvcD4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJzb2ZpYS1zZWN0aW9uIj4KICA8aDM+8J+SoSBWaXPDo28gRXN0cmF0w6lnaWNhPC9oMz4KICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIzFhMGEyZSwjMmQxYjY5KTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoyMHB4O2NvbG9yOiNlMmU4ZjAiPgogICAgPHAgc3R5bGU9Im1hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjYiPkEgU29mSUEgbsOjbyDDqSBzw7MgdW0gY2hhdGJvdCDigJQgw6kgbyA8c3Ryb25nIHN0eWxlPSJjb2xvcjojRkZENzAwIj5zaXN0ZW1hIG5lcnZvc28gZGEgbG9qYTwvc3Ryb25nPi4gQ2FkYSBjb252ZXJzYSBnZXJhIHNpbmFpcyBxdWUgYWxpbWVudGFtIGF1dG9tYcOnw7VlcywgcGVyc29uYWxpemFtIGZvbGxvdy11cHMgZSBpZGVudGlmaWNhbSBvcyBsZWFkcyBtYWlzIHF1ZW50ZXMgYW50ZXMgbWVzbW8gZGUgZWxlcyBzYWJlcmVtIHF1ZSB2w6NvIGNvbXByYXIuPC9wPgogICAgPHAgc3R5bGU9Im1hcmdpbjowO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiNhNzhiZmEiPk1ldGE6IDEwMCBhdHJhw6fDtWVzL2RpYSDihpIgVFVETyBBVVRPTcOBVElDTywgemVybyBvcGVyYWNpb25hbDwvcD4KICA8L2Rpdj4KPC9kaXY+Cjw/cGhwIGVsc2VpZiAoJGFjdGl2ZV90YWIgPT09ICdjb25oZWNpbWVudG8nKTogPz4KPCEtLSDilZDilZDilZAgQkFTRSBERSBDT05IRUNJTUVOVE8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIC0tPgo8P3BocAoka2JfdGFibGUgID0gJHdwZGItPnByZWZpeCAuICd2bTJfc29maWFfa25vd2xlZGdlJzsKaWYgKCAkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAnJGtiX3RhYmxlJyIpICE9PSAka2JfdGFibGUgKSB7CiAgICB2bTJfY3JlYXRlX3NvZmlhX2tub3dsZWRnZV90YWJsZSgpOwp9CiRrYl9pdGVtcyAgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoIlNFTEVDVCAqIEZST00gJGtiX3RhYmxlIE9SREVSIEJZIGNyaWFkb19lbSBERVNDIik7CiRrYl9hdGl2b3MgPSBhcnJheV9maWx0ZXIoJGtiX2l0ZW1zLCBmdW5jdGlvbigkaSl7IHJldHVybiAoaW50KSRpLT5hdGl2byA9PT0gMTsgfSk7CiRrYl9ub25jZSAgPSB3cF9jcmVhdGVfbm9uY2UoJ3ZtMl9zb2ZpYV9rYicpOwo/Pgo8ZGl2IGNsYXNzPSJzb2ZpYS1zZWN0aW9uIj4KICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICA8ZGl2PgogICAgICA8aDMgc3R5bGU9Im1hcmdpbjowIDAgNHB4Ij7wn5OaIEJhc2UgZGUgQ29uaGVjaW1lbnRvIGRhIFNvZklBPC9oMz4KICAgICAgPHAgc3R5bGU9Im1hcmdpbjowO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM2YjcyODAiPkEgU29mSUEgdXNhIGF1dG9tYXRpY2FtZW50ZSB0b2RvcyBvcyBpdGVucyA8c3Ryb25nPmF0aXZvczwvc3Ryb25nPiBwYXJhIHJlc3BvbmRlciBjb20gcHJvcHJpZWRhZGUgc29icmUgc2V1IG5lZ8OzY2lvLjwvcD4KICAgIDwvZGl2PgogICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZWNmZGY1O2JvcmRlcjoxcHggc29saWQgIzZlZTdiNztib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjhweCAxNHB4O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiMwNjVmNDY7Zm9udC13ZWlnaHQ6NjAwIj4KICAgICAg4pyFIDw/cGhwIGVjaG8gY291bnQoJGtiX2F0aXZvcyk7ID8+IGl0ZW0ocykgYXRpdm8ocykKICAgIDwvZGl2PgogIDwvZGl2PgoKICA8IS0tIEZPUk1VTMOBUklPIEFERCAtLT4KICA8ZGl2IGlkPSJ2bTJrYi1mb3JtLXdyYXAiIHN0eWxlPSJiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjIwcHg7bWFyZ2luLWJvdHRvbToyNHB4Ij4KICAgIDxoNCBzdHlsZT0ibWFyZ2luOjAgMCAxNHB4O2ZvbnQtc2l6ZToxNXB4O2NvbG9yOiMxZTI5M2IiPuKelSBBZGljaW9uYXIgQ29uaGVjaW1lbnRvPC9oND4KCiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgPGRpdj4KICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMzc0MTUxO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPlRpcG88L2xhYmVsPgogICAgICAgIDxzZWxlY3QgaWQ9InZtMmtiLXRpcG8iIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ0ZXh0byI+8J+TnSBUZXh0byBsaXZyZTwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idXJsIj7wn4yQIFVSTCAvIFNpdGU8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImRyaXZlIj7wn5OEIEdvb2dsZSBEb2M8L29wdGlvbj4KICAgICAgICA8L3NlbGVjdD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXY+CiAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzM3NDE1MTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij5Uw610dWxvIChub21lIHBhcmEgaWRlbnRpZmljYXIpPC9sYWJlbD4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InZtMmtiLXRpdHVsbyIgcGxhY2Vob2xkZXI9IkV4OiBDb250cmF0byBWaXZhTWFpcywgUG9sw610aWNhIGRlIFByZcOnb3MuLi4iIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtib3gtc2l6aW5nOmJvcmRlci1ib3giPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gVVJMIGZpZWxkIC0tPgogICAgPGRpdiBpZD0idm0ya2ItdXJsLXdyYXAiIHN0eWxlPSJkaXNwbGF5Om5vbmU7bWFyZ2luLWJvdHRvbToxMnB4Ij4KICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7Y29sb3I6IzM3NDE1MTtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NHB4Ij5VUkw8L2xhYmVsPgogICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjhweCI+CiAgICAgICAgPGlucHV0IHR5cGU9InVybCIgaWQ9InZtMmtiLXVybCIgcGxhY2Vob2xkZXI9Imh0dHBzOi8vLi4uIiBzdHlsZT0iZmxleDoxO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJ2bTJrYi1idG4tcHJldmlldyIgc3R5bGU9InBhZGRpbmc6OHB4IDE0cHg7YmFja2dyb3VuZDojNjM2NmYxO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEzcHg7Y3Vyc29yOnBvaW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwIj7wn5SNIEltcG9ydGFyPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJ2bTJrYi1wcmV2aWV3LXJlc3VsdCIgc3R5bGU9ImRpc3BsYXk6bm9uZTttYXJnaW4tdG9wOjhweDtwYWRkaW5nOjEwcHg7YmFja2dyb3VuZDojZWZmNmZmO2JvcmRlcjoxcHggc29saWQgI2JmZGJmZTtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTJweDtjb2xvcjojMWU0MGFmIj48L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gQ29udGXDumRvIG1hbnVhbCAtLT4KICAgIDxkaXYgaWQ9InZtMmtiLWNvbnRldWRvLXdyYXAiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPgogICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMzc0MTUxO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPkNvbnRlw7pkbzwvbGFiZWw+CiAgICAgIDx0ZXh0YXJlYSBpZD0idm0ya2ItY29udGV1ZG8iIHJvd3M9IjYiIHBsYWNlaG9sZGVyPSJDb2xlIGFxdWkgbyB0ZXh0byBxdWUgYSBTb2ZJQSBkZXZlIGNvbmhlY2VyIOKAlCBjb250cmF0bywgRkFRLCBwb2zDrXRpY2EgZGUgcHJlw6dvcywgaW5mb3JtYcOnw7VlcyBzb2JyZSBvcyBzZXJ2acOnb3MuLi4iIHN0eWxlPSJ3aWR0aDoxMDAlO3BhZGRpbmc6OHB4O2JvcmRlcjoxcHggc29saWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjZweDtmb250LXNpemU6MTNweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cmVzaXplOnZlcnRpY2FsIj48L3RleHRhcmVhPgogICAgICA8c3BhbiBpZD0idm0ya2ItY2hhcnMiIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmIj4wIGNhcmFjdGVyZXM8L3NwYW4+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4Ij4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJ2bTJrYi1idG4tc2F2ZSIgc3R5bGU9InBhZGRpbmc6MTBweCAyNHB4O2JhY2tncm91bmQ6IzEwYjk4MTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlciI+8J+SviBTYWx2YXIgQ29uaGVjaW1lbnRvPC9idXR0b24+CiAgICAgIDxzcGFuIGlkPSJ2bTJrYi1zYXZlLW1zZyIgc3R5bGU9ImZvbnQtc2l6ZToxM3B4Ij48L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPCEtLSBMSVNUQSBERSBJVEVNUyAtLT4KICA8aDQgc3R5bGU9Im1hcmdpbjowIDAgMTJweDtmb250LXNpemU6MTVweDtjb2xvcjojMWUyOTNiIj7wn5OLIEl0ZW5zIENhZGFzdHJhZG9zICg8P3BocCBlY2hvIGNvdW50KCRrYl9pdGVtcyk7ID8+KTwvaDQ+CgogIDw/cGhwIGlmIChlbXB0eSgka2JfaXRlbXMpKTogPz4KICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjQwcHg7Y29sb3I6IzljYTNhZjtiYWNrZ3JvdW5kOiNmOWZhZmI7Ym9yZGVyOjFweCBkYXNoZWQgI2QxZDVkYjtib3JkZXItcmFkaXVzOjEwcHgiPgogICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOjM2cHg7bWFyZ2luLWJvdHRvbTo4cHgiPvCfk608L2Rpdj4KICAgIDxwPk5lbmh1bSBjb25oZWNpbWVudG8gY2FkYXN0cmFkbyBhaW5kYS48YnI+QWRpY2lvbmUgbyBjb250cmF0bywgRkFRcywgcG9sw610aWNhcyBkZSBwcmXDp28sIGluZm9ybWHDp8O1ZXMgc29icmUgb3Mgc2VydmnDp29zLi4uPC9wPgogIDwvZGl2PgogIDw/cGhwIGVsc2U6ID8+CiAgPGRpdiBpZD0idm0ya2ItbGlzdCIgc3R5bGU9ImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEwcHgiPgogICAgPD9waHAgZm9yZWFjaCAoJGtiX2l0ZW1zIGFzICRpdGVtKToKICAgICAgJGlzX2FjdGl2ZSA9IChpbnQpJGl0ZW0tPmF0aXZvID09PSAxOwogICAgICAkdGlwb19pY29uID0gJGl0ZW0tPnRpcG8gPT09ICd1cmwnID8gJ/CfjJAnIDogKCRpdGVtLT50aXBvID09PSAnZHJpdmUnID8gJ/Cfk4QnIDogJ/Cfk50nKTsKICAgICAgJHByZXZpZXcgICA9IG1iX3N1YnN0cihzdHJpcF90YWdzKCRpdGVtLT5jb250ZXVkbyksIDAsIDE4MCk7CiAgICAgICRjaGFycyAgICAgPSBtYl9zdHJsZW4oJGl0ZW0tPmNvbnRldWRvKTsKICAgID8+CiAgICA8ZGl2IGlkPSJ2bTJrYi1pdGVtLTw/cGhwIGVjaG8gKGludCkkaXRlbS0+aWQ7ID8+IiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgPD9waHAgZWNobyAkaXNfYWN0aXZlID8gJyM2ZWU3YjcnIDogJyNlNWU3ZWInOyA/Pjtib3JkZXItbGVmdDo0cHggc29saWQgPD9waHAgZWNobyAkaXNfYWN0aXZlID8gJyMxMGI5ODEnIDogJyM5Y2EzYWYnOyA/Pjtib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjE0cHgiPgogICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTBweCI+CiAgICAgICAgPGRpdiBzdHlsZT0iZmxleDoxO21pbi13aWR0aDowIj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tYm90dG9tOjRweCI+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzFlMjkzYiI+PD9waHAgZWNobyAkdGlwb19pY29uOyA/PiA8P3BocCBlY2hvIGVzY19odG1sKCRpdGVtLT50aXR1bG8pOyA/Pjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMXB4O3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjIwcHg7YmFja2dyb3VuZDo8P3BocCBlY2hvICRpc19hY3RpdmUgPyAnI2RjZmNlNycgOiAnI2YzZjRmNic7ID8+O2NvbG9yOjw/cGhwIGVjaG8gJGlzX2FjdGl2ZSA/ICcjMTY2NTM0JyA6ICcjNmI3MjgwJzsgPz47Zm9udC13ZWlnaHQ6NjAwIj4KICAgICAgICAgICAgICA8P3BocCBlY2hvICRpc19hY3RpdmUgPyAn8J+foiBBdGl2bycgOiAn4pqrIEluYXRpdm8nOyA/PgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojOWNhM2FmIj48P3BocCBlY2hvIGVzY19odG1sKHVjZmlyc3QoJGl0ZW0tPnRpcG8pKTsgPz4gwrcgPD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRjaGFycyk7ID8+IGNoYXJzIMK3IDw/cGhwIGVjaG8gd3BfZGF0ZSgnZC9tL1knLCBzdHJ0b3RpbWUoJGl0ZW0tPmNyaWFkb19lbSkpOyA/Pjwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjowO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YjcyODA7bGluZS1oZWlnaHQ6MS41Ij48P3BocCBlY2hvIGVzY19odG1sKCRwcmV2aWV3KTsgPz48P3BocCBlY2hvICRjaGFycyA+IDE4MCA/ICcuLi4nIDogJyc7ID8+PC9wPgogICAgICAgICAgPD9waHAgaWYgKCRpdGVtLT51cmwpOiA/PgogICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBlc2NfdXJsKCRpdGVtLT51cmwpOyA/PiIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJmb250LXNpemU6MTFweDtjb2xvcjojNjM2NmYxO3RleHQtZGVjb3JhdGlvbjpub25lIj7wn5SXIDw/cGhwIGVjaG8gZXNjX2h0bWwocGFyc2VfdXJsKCRpdGVtLT51cmwsIFBIUF9VUkxfSE9TVCkpOyA/PjwvYT4KICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6NnB4O2ZsZXgtc2hyaW5rOjAiPgogICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iCiAgICAgICAgICAgIGRhdGEtaWQ9Ijw/cGhwIGVjaG8gKGludCkkaXRlbS0+aWQ7ID8+IgogICAgICAgICAgICBkYXRhLWF0aXZvPSI8P3BocCBlY2hvICRpc19hY3RpdmUgPyAnMScgOiAnMCc7ID8+IgogICAgICAgICAgICBjbGFzcz0idm0ya2ItdG9nZ2xlLWJ0biIKICAgICAgICAgICAgc3R5bGU9InBhZGRpbmc6NnB4IDEycHg7YmFja2dyb3VuZDo8P3BocCBlY2hvICRpc19hY3RpdmUgPyAnI2ZlZjNjNycgOiAnI2RjZmNlNyc7ID8+O2NvbG9yOjw/cGhwIGVjaG8gJGlzX2FjdGl2ZSA/ICcjOTI0MDBlJyA6ICcjMTY2NTM0JzsgPz47Ym9yZGVyOjFweCBzb2xpZCA8P3BocCBlY2hvICRpc19hY3RpdmUgPyAnI2ZjZDM0ZCcgOiAnIzZlZTdiNyc7ID8+O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxMnB4O2N1cnNvcjpwb2ludGVyO3doaXRlLXNwYWNlOm5vd3JhcCIKICAgICAgICAgICAgdGl0bGU9Ijw/cGhwIGVjaG8gJGlzX2FjdGl2ZSA/ICdEZXNhdGl2YXInIDogJ0F0aXZhcic7ID8+Ij48P3BocCBlY2hvICRpc19hY3RpdmUgPyAn4o+4IFBhdXNhcicgOiAn4pa2IEF0aXZhcic7ID8+PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgZGF0YS1pZD0iPD9waHAgZWNobyAoaW50KSRpdGVtLT5pZDsgPz4iCiAgICAgICAgICAgIGNsYXNzPSJ2bTJrYi1kZWwtYnRuIgogICAgICAgICAgICBzdHlsZT0icGFkZGluZzo2cHggMTJweDtiYWNrZ3JvdW5kOiNmZWUyZTI7Y29sb3I6Izk5MWIxYjtib3JkZXI6MXB4IHNvbGlkICNmY2E1YTU7Ym9yZGVyLXJhZGl1czo2cHg7Zm9udC1zaXplOjEycHg7Y3Vyc29yOnBvaW50ZXIiCiAgICAgICAgICAgIHRpdGxlPSJEZWxldGFyIj7wn5eRPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8P3BocCBlbmRmb3JlYWNoOyA/PgogIDwvZGl2PgogIDw/cGhwIGVuZGlmOyA/Pgo8L2Rpdj4KCjxzY3JpcHQ+CihmdW5jdGlvbigpewogIHZhciBub25jZSAgPSA8P3BocCBlY2hvIGpzb25fZW5jb2RlKCRrYl9ub25jZSk7ID8+OwogIHZhciBhamF4VXJsID0gPD9waHAgZWNobyBqc29uX2VuY29kZShhZG1pbl91cmwoJ2FkbWluLWFqYXgucGhwJykpOyA/PjsKCiAgLy8gVGlwbyBzZWxlY3RvcgogIHZhciB0aXBvU2VsICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMmtiLXRpcG8nKTsKICB2YXIgdXJsV3JhcCAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJrYi11cmwtd3JhcCcpOwogIHZhciBjb250ZVdyYXAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMmtiLWNvbnRldWRvLXdyYXAnKTsKICB2YXIgdXJsSW5wdXQgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJrYi11cmwnKTsKICB2YXIgY29udGVJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJrYi1jb250ZXVkbycpOwogIHZhciBjaGFyc1NwYW4gID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMmtiLWNoYXJzJyk7CiAgdmFyIHByZXZpZXdEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ya2ItcHJldmlldy1yZXN1bHQnKTsKICB2YXIgc2F2ZU1zZyAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJrYi1zYXZlLW1zZycpOwoKICBmdW5jdGlvbiB1cGRhdGVGb3JtKCkgewogICAgdmFyIHYgPSB0aXBvU2VsLnZhbHVlOwogICAgaWYgKHYgPT09ICd1cmwnIHx8IHYgPT09ICdkcml2ZScpIHsKICAgICAgdXJsV3JhcC5zdHlsZS5kaXNwbGF5ICAgPSAnYmxvY2snOwogICAgICBjb250ZVdyYXAuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgIGNvbnRlSW5wdXQucGxhY2Vob2xkZXIgID0gdiA9PT0gJ2RyaXZlJwogICAgICAgID8gJ0NsaXF1ZSBlbSAiSW1wb3J0YXIiIHBhcmEgZXh0cmFpciBvIHRleHRvIGRvIEdvb2dsZSBEb2MsIG91IGNvbGUgbWFudWFsbWVudGUuJwogICAgICAgIDogJ0NsaXF1ZSBlbSAiSW1wb3J0YXIiIHBhcmEgZXh0cmFpciBvIHRleHRvIGRhIHDDoWdpbmEsIG91IGNvbGUgbWFudWFsbWVudGUuJzsKICAgIH0gZWxzZSB7CiAgICAgIHVybFdyYXAuc3R5bGUuZGlzcGxheSAgID0gJ25vbmUnOwogICAgICBjb250ZVdyYXAuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgIGNvbnRlSW5wdXQucGxhY2Vob2xkZXIgID0gJ0NvbGUgYXF1aSBvIHRleHRvIHF1ZSBhIFNvZklBIGRldmUgY29uaGVjZXIg4oCUIGNvbnRyYXRvLCBGQVEsIHBvbMOtdGljYSBkZSBwcmXDp29zLi4uJzsKICAgIH0KICB9CiAgdGlwb1NlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVGb3JtKTsKICB1cGRhdGVGb3JtKCk7CgogIC8vIENoYXIgY291bnRlcgogIGNvbnRlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpewogICAgY2hhcnNTcGFuLnRleHRDb250ZW50ID0gY29udGVJbnB1dC52YWx1ZS5sZW5ndGgudG9Mb2NhbGVTdHJpbmcoJ3B0LUJSJykgKyAnIGNhcmFjdGVyZXMnOwogIH0pOwoKICAvLyBQcmV2aWV3IC8gSW1wb3J0YXIKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ya2ItYnRuLXByZXZpZXcnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICB2YXIgdXJsID0gdXJsSW5wdXQudmFsdWUudHJpbSgpOwogICAgaWYgKCF1cmwpIHsgYWxlcnQoJ0NvbGUgYSBVUkwgYW50ZXMgZGUgaW1wb3J0YXIuJyk7IHJldHVybjsgfQogICAgdmFyIGJ0biA9IHRoaXM7CiAgICBidG4uZGlzYWJsZWQgPSB0cnVlOwogICAgYnRuLnRleHRDb250ZW50ID0gJ+KPsyBJbXBvcnRhbmRvLi4uJzsKICAgIHByZXZpZXdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIHZhciBmZCA9IG5ldyBGb3JtRGF0YSgpOwogICAgZmQuYXBwZW5kKCdhY3Rpb24nLCAndm0yX3NvZmlhX2tiX3ByZXZpZXcnKTsKICAgIGZkLmFwcGVuZCgnbm9uY2UnLCAgbm9uY2UpOwogICAgZmQuYXBwZW5kKCd1cmwnLCAgICB1cmwpOwogICAgZmV0Y2goYWpheFVybCwge21ldGhvZDonUE9TVCcsIGJvZHk6ZmR9KQogICAgICAudGhlbihmdW5jdGlvbihyKXsgcmV0dXJuIHIuanNvbigpOyB9KQogICAgICAudGhlbihmdW5jdGlvbihkKXsKICAgICAgICBidG4uZGlzYWJsZWQgICAgPSBmYWxzZTsKICAgICAgICBidG4udGV4dENvbnRlbnQgPSAn8J+UjSBJbXBvcnRhcic7CiAgICAgICAgaWYgKGQuc3VjY2VzcykgewogICAgICAgICAgdmFyIHQgPSBkLmRhdGE7CiAgICAgICAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJrYi10aXR1bG8nKS52YWx1ZSkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ya2ItdGl0dWxvJykudmFsdWUgPSB0LnRpdHVsbzsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghY29udGVJbnB1dC52YWx1ZSkgewogICAgICAgICAgICBjb250ZUlucHV0LnZhbHVlID0gdC5jb250ZXVkbzsKICAgICAgICAgICAgY2hhcnNTcGFuLnRleHRDb250ZW50ID0gdC5jaGFycy50b0xvY2FsZVN0cmluZygncHQtQlInKSArICcgY2FyYWN0ZXJlcyBpbXBvcnRhZG9zJzsKICAgICAgICAgIH0KICAgICAgICAgIHByZXZpZXdEaXYuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgICBwcmV2aWV3RGl2LmlubmVySFRNTCA9ICc8c3Ryb25nPuKchSBJbXBvcnRhZG8gY29tIHN1Y2Vzc28hPC9zdHJvbmc+ICcgKyB0LmNoYXJzLnRvTG9jYWxlU3RyaW5nKCdwdC1CUicpICsgJyBjYXJhY3RlcmVzIGV4dHJhw61kb3MgZGUgPGVtPicgKyB0LnRpdHVsbyArICc8L2VtPi4gVm9jw6ogcG9kZSBlZGl0YXIgbyBjb250ZcO6ZG8gYW50ZXMgZGUgc2FsdmFyLic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByZXZpZXdEaXYuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgICBwcmV2aWV3RGl2LnN0eWxlLmJhY2tncm91bmQgPSAnI2ZlZjJmMic7CiAgICAgICAgICBwcmV2aWV3RGl2LnN0eWxlLmJvcmRlckNvbG9yID0gJyNmY2E1YTUnOwogICAgICAgICAgcHJldmlld0Rpdi5zdHlsZS5jb2xvciA9ICcjOTkxYjFiJzsKICAgICAgICAgIHByZXZpZXdEaXYuaW5uZXJIVE1MID0gJzxzdHJvbmc+4p2MICcgKyBkLmRhdGEgKyAnPC9zdHJvbmc+JzsKICAgICAgICB9CiAgICAgIH0pCiAgICAgIC5jYXRjaChmdW5jdGlvbihlKXsKICAgICAgICBidG4uZGlzYWJsZWQgICAgPSBmYWxzZTsKICAgICAgICBidG4udGV4dENvbnRlbnQgPSAn8J+UjSBJbXBvcnRhcic7CiAgICAgICAgYWxlcnQoJ0Vycm8gZGUgY29uZXjDo286ICcgKyBlLm1lc3NhZ2UpOwogICAgICB9KTsKICB9KTsKCiAgLy8gU2FsdmFyIGl0ZW0KICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ya2ItYnRuLXNhdmUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICB2YXIgdGl0dWxvICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0ya2ItdGl0dWxvJykudmFsdWUudHJpbSgpOwogICAgdmFyIHRpcG8gICAgID0gdGlwb1NlbC52YWx1ZTsKICAgIHZhciB1cmwgICAgICA9IHVybElucHV0LnZhbHVlLnRyaW0oKTsKICAgIHZhciBjb250ZXVkbyA9IGNvbnRlSW5wdXQudmFsdWUudHJpbSgpOwogICAgaWYgKCF0aXR1bG8pICAgeyBhbGVydCgnUG9yIGZhdm9yLCBwcmVlbmNoYSBvIFTDrXR1bG8uJyk7IHJldHVybjsgfQogICAgaWYgKCFjb250ZXVkbyAmJiB0aXBvID09PSAndGV4dG8nKSB7IGFsZXJ0KCdDb250ZcO6ZG8gbsOjbyBwb2RlIGVzdGFyIHZhemlvLicpOyByZXR1cm47IH0KICAgIGlmICghdXJsICYmICh0aXBvID09PSAndXJsJyB8fCB0aXBvID09PSAnZHJpdmUnKSAmJiAhY29udGV1ZG8pIHsKICAgICAgYWxlcnQoJ0NvbGUgYSBVUkwgb3UgbyBjb250ZcO6ZG8uJyk7IHJldHVybjsKICAgIH0KICAgIHZhciBidG4gPSB0aGlzOwogICAgYnRuLmRpc2FibGVkICAgID0gdHJ1ZTsKICAgIGJ0bi50ZXh0Q29udGVudCA9ICfij7MgU2FsdmFuZG8uLi4nOwogICAgc2F2ZU1zZy50ZXh0Q29udGVudCA9ICcnOwogICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICBmZC5hcHBlbmQoJ2FjdGlvbicsICAgJ3ZtMl9zb2ZpYV9rYl9zYXZlJyk7CiAgICBmZC5hcHBlbmQoJ25vbmNlJywgICAgbm9uY2UpOwogICAgZmQuYXBwZW5kKCd0aXBvJywgICAgIHRpcG8pOwogICAgZmQuYXBwZW5kKCd0aXR1bG8nLCAgIHRpdHVsbyk7CiAgICBmZC5hcHBlbmQoJ3VybCcsICAgICAgdXJsKTsKICAgIGZkLmFwcGVuZCgnY29udGV1ZG8nLCBjb250ZXVkbyk7CiAgICBmZXRjaChhamF4VXJsLCB7bWV0aG9kOidQT1NUJywgYm9keTpmZH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uKGQpewogICAgICAgIGJ0bi5kaXNhYmxlZCAgICA9IGZhbHNlOwogICAgICAgIGJ0bi50ZXh0Q29udGVudCA9ICfwn5K+IFNhbHZhciBDb25oZWNpbWVudG8nOwogICAgICAgIGlmIChkLnN1Y2Nlc3MpIHsKICAgICAgICAgIHNhdmVNc2cuc3R5bGUuY29sb3IgPSAnIzE2NjUzNCc7CiAgICAgICAgICBzYXZlTXNnLnRleHRDb250ZW50ID0gJ+KchSBTYWx2byEgUmVjYXJyZWdhbmRvLi4uJzsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOyB9LCA4MDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzYXZlTXNnLnN0eWxlLmNvbG9yID0gJyM5OTFiMWInOwogICAgICAgICAgc2F2ZU1zZy50ZXh0Q29udGVudCA9ICfinYwgJyArIGQuZGF0YTsKICAgICAgICB9CiAgICAgIH0pCiAgICAgIC5jYXRjaChmdW5jdGlvbihlKXsKICAgICAgICBidG4uZGlzYWJsZWQgICAgPSBmYWxzZTsKICAgICAgICBidG4udGV4dENvbnRlbnQgPSAn8J+SviBTYWx2YXIgQ29uaGVjaW1lbnRvJzsKICAgICAgICBzYXZlTXNnLnN0eWxlLmNvbG9yID0gJyM5OTFiMWInOwogICAgICAgIHNhdmVNc2cudGV4dENvbnRlbnQgPSAnRXJybzogJyArIGUubWVzc2FnZTsKICAgICAgfSk7CiAgfSk7CgogIC8vIFRvZ2dsZSBhdGl2by9pbmF0aXZvCiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZtMmtiLXRvZ2dsZS1idG4nKS5mb3JFYWNoKGZ1bmN0aW9uKGJ0bil7CiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICB2YXIgaWQgICAgPSBidG4uZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyk7CiAgICAgIHZhciBhdGl2byA9IGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtYXRpdm8nKTsKICAgICAgYnRuLmRpc2FibGVkICAgID0gdHJ1ZTsKICAgICAgYnRuLnRleHRDb250ZW50ID0gJ+KPsyc7CiAgICAgIHZhciBmZCA9IG5ldyBGb3JtRGF0YSgpOwogICAgICBmZC5hcHBlbmQoJ2FjdGlvbicsICd2bTJfc29maWFfa2JfdG9nZ2xlJyk7CiAgICAgIGZkLmFwcGVuZCgnbm9uY2UnLCAgbm9uY2UpOwogICAgICBmZC5hcHBlbmQoJ2lkJywgICAgIGlkKTsKICAgICAgZmV0Y2goYWpheFVybCwge21ldGhvZDonUE9TVCcsIGJvZHk6ZmR9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24oZCl7CiAgICAgICAgICBpZiAoZC5zdWNjZXNzKSB7IHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsgfQogICAgICAgICAgZWxzZSB7IGJ0bi5kaXNhYmxlZCA9IGZhbHNlOyBhbGVydCgnRXJybzogJyArIGQuZGF0YSk7IH0KICAgICAgICB9KTsKICAgIH0pOwogIH0pOwoKICAvLyBEZWxldGFyIGl0ZW0KICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudm0ya2ItZGVsLWJ0bicpLmZvckVhY2goZnVuY3Rpb24oYnRuKXsKICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgIGlmICghY29uZmlybSgnRGVsZXRhciBlc3RlIGl0ZW0gZGEgYmFzZSBkZSBjb25oZWNpbWVudG8/JykpIHJldHVybjsKICAgICAgdmFyIGlkID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1pZCcpOwogICAgICBidG4uZGlzYWJsZWQgICAgPSB0cnVlOwogICAgICBidG4udGV4dENvbnRlbnQgPSAn4o+zJzsKICAgICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgIGZkLmFwcGVuZCgnYWN0aW9uJywgJ3ZtMl9zb2ZpYV9rYl9kZWxldGUnKTsKICAgICAgZmQuYXBwZW5kKCdub25jZScsICBub25jZSk7CiAgICAgIGZkLmFwcGVuZCgnaWQnLCAgICAgaWQpOwogICAgICBmZXRjaChhamF4VXJsLCB7bWV0aG9kOidQT1NUJywgYm9keTpmZH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocil7IHJldHVybiByLmpzb24oKTsgfSkKICAgICAgICAudGhlbihmdW5jdGlvbihkKXsKICAgICAgICAgIGlmIChkLnN1Y2Nlc3MpIHsKICAgICAgICAgICAgdmFyIHJvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTJrYi1pdGVtLScgKyBpZCk7CiAgICAgICAgICAgIGlmIChyb3cpIHJvdy5yZW1vdmUoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICAgICBhbGVydCgnRXJybzogJyArIGQuZGF0YSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICB9KTsKfSkoKTsKPC9zY3JpcHQ+Cgo8P3BocCBlbHNlaWYgKCRhY3RpdmVfdGFiID09PSAncHJvbXB0Jyk6ID8+Cjw/cGhwCi8vIOKUgOKUgCBTYWx2YXIgcHJvbXB0IGN1c3RvbWl6YWRvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAppZiAoIGlzc2V0KCRfUE9TVFsndm0yX3NvZmlhX3Byb21wdF9zYXZlJ10pICYmIGNoZWNrX2FkbWluX3JlZmVyZXIoJ3ZtMl9zb2ZpYV9wcm9tcHRfbm9uY2UnKSApIHsKICAgICRuZXdfcHJvbXB0ID0gdHJpbSggd3BfdW5zbGFzaCggJF9QT1NUWyd2bTJfc29maWFfcHJvbXB0X3RleHQnXSA/PyAnJyApICk7CiAgICAvLyBbdjEuNS45M10gdG9nZ2xlIGFza19lbWFpbAogICAgdXBkYXRlX29wdGlvbigndm0yX3NvZmlhX2Fza19lbWFpbCcsIGlzc2V0KCRfUE9TVFsndm0yX3NvZmlhX2Fza19lbWFpbCddKSA/ICcxJyA6ICcwJyk7CiAgICBpZiAoIGVtcHR5KCRuZXdfcHJvbXB0KSApIHsKICAgICAgICBkZWxldGVfb3B0aW9uKCd2bTJfc29maWFfc3lzdGVtX3Byb21wdCcpOwogICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9Im5vdGljZSBub3RpY2Utc3VjY2VzcyBpcy1kaXNtaXNzaWJsZSI+PHA+4pyFIFByb21wdCByZXNldGFkbyDigJQgU29mSUEgdm9sdGFyw6EgYSB1c2FyIG8gcGFkcsOjbyBpbnRlcm5vLjwvcD48L2Rpdj4nOwogICAgfSBlbHNlIHsKICAgICAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc29maWFfc3lzdGVtX3Byb21wdCcsICRuZXdfcHJvbXB0LCAnbm8nKTsKICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPSJub3RpY2Ugbm90aWNlLXN1Y2Nlc3MgaXMtZGlzbWlzc2libGUiPjxwPuKchSBQcm9tcHQgc2Fsdm8gY29tIHN1Y2Vzc28hPC9wPjwvZGl2Pic7CiAgICB9Cn0KJGN1cnJlbnRfcHJvbXB0ID0gZ2V0X29wdGlvbigndm0yX3NvZmlhX3N5c3RlbV9wcm9tcHQnLCAnJyk7CiRkZWZhdWx0X3Byb21wdCA9IGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV9kZWZhdWx0X3Byb21wdCcsICcnKTsKJHNob3dpbmdfZGVmYXVsdCA9IGVtcHR5KCRjdXJyZW50X3Byb21wdCk7CiR0ZXh0YXJlYV92YWx1ZSAgPSAkc2hvd2luZ19kZWZhdWx0ID8gJGRlZmF1bHRfcHJvbXB0IDogJGN1cnJlbnRfcHJvbXB0Owo/Pgo8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6OTYwcHgiPgogIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDowO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHgiPuKame+4jyBTeXN0ZW0gUHJvbXB0IGRhIFNvZklBCiAgICA8P3BocCBpZiAoJHNob3dpbmdfZGVmYXVsdCk6ID8+CiAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7YmFja2dyb3VuZDojZGNmY2U3O2NvbG9yOiMxNjY1MzQ7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjIwcHgiPnVzYW5kbyBwYWRyw6NvPC9zcGFuPgogICAgPD9waHAgZWxzZTogPz4KICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtiYWNrZ3JvdW5kOiNmZWY5YzM7Y29sb3I6Izg1NGQwZTtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweCI+4pyP77iPIGN1c3RvbWl6YWRvPC9zcGFuPgogICAgPD9waHAgZW5kaWY7ID8+CiAgPC9oMj4KICA8cCBzdHlsZT0iY29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOi04cHg7Zm9udC1zaXplOjEzcHgiPgogICAgRXN0ZSDDqSBvICJjw6lyZWJybyIgZGEgU29mSUEg4oCUIGRlZmluZSBwZXJzb25hbGlkYWRlLCByZWdyYXMgZSBjb21wb3J0YW1lbnRvLiBFbnZpYWRvIGFvIENsYXVkZSBhbnRlcyBkZSA8c3Ryb25nPmNhZGEgY29udmVyc2E8L3N0cm9uZz4uCiAgPC9wPgoKICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNlZmY2ZmY7Ym9yZGVyOjFweCBzb2xpZCAjYmZkYmZlO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjYiPgogICAg8J+SoSA8c3Ryb25nPlZhcmnDoXZlaXMgZGlzcG9uw612ZWlzIG5vIHByb21wdDo8L3N0cm9uZz48YnI+CiAgICA8Y29kZSBzdHlsZT0iYmFja2dyb3VuZDojZGJlYWZlO3BhZGRpbmc6MnB4IDZweDtib3JkZXItcmFkaXVzOjRweCI+e2NhdGFsb2dfdGV4dH08L2NvZGU+IOKAlCBzdWJzdGl0dcOtZG8gYXV0b21hdGljYW1lbnRlIHBlbG8gY2F0w6Fsb2dvIGRlIGF0cmHDp8O1ZXMgZW0gdGVtcG8gcmVhbCAobWFudGVuaGEgZXN0YSB2YXJpw6F2ZWwgbm8gcHJvbXB0KS48YnI+CiAgICBPcyBpdGVucyBkYSA8c3Ryb25nPkJhc2UgZGUgQ29uaGVjaW1lbnRvPC9zdHJvbmc+IHPDo28gc2VtcHJlIGluamV0YWRvcyA8ZW0+YXDDs3M8L2VtPiBlc3RlIHByb21wdCwgaW5kZXBlbmRlbnRlbWVudGUgZG8gcXVlIHZvY8OqIGVzY3JldmVyIGFxdWkuCiAgPC9kaXY+CgogIDxmb3JtIG1ldGhvZD0icG9zdCI+CiAgICA8P3BocCB3cF9ub25jZV9maWVsZCgndm0yX3NvZmlhX3Byb21wdF9ub25jZScpOyA/PgogICAgPCEtLSBbdjEuNS45M10gRW1haWwgdG9nZ2xlIC0tPgogICAgPD9waHAgJHNvZmlhX2Fza19lbWFpbCA9IGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV9hc2tfZW1haWwnLCcwJyk7ID8+CiAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZWZjZTg7Ym9yZGVyOjFweCBzb2xpZCAjZmRlNjhhO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206MTZweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6MTJweCI+CiAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2N1cnNvcjpwb2ludGVyIj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idm0yX3NvZmlhX2Fza19lbWFpbCIgdmFsdWU9IjEiIDw/cGhwIGNoZWNrZWQoJHNvZmlhX2Fza19lbWFpbCwnMScpOyA/PiBzdHlsZT0id2lkdGg6MTZweDtoZWlnaHQ6MTZweCI+CiAgICAgICAgICAgICAgICDwn5OnIFBlZGlyIGVtYWlsIGFww7NzIGNhcHR1cmFyIFdoYXRzQXBwCiAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW46NnB4IDAgMDtmb250LXNpemU6MTJweDtjb2xvcjojOTI0MDBlIj4KICAgICAgICAgICAgICAgIFF1YW5kbyBhdGl2bywgYWRpY2lvbmEgYW8gcHJvbXB0IGEgaW5zdHJ1w6fDo28gcGFyYSBwZWRpciBvIGUtbWFpbCBhcMOzcyBvIFdoYXRzQXBwIHNlciBmb3JuZWNpZG8sIHVzYW5kbyBvIGNvcHk6CiAgICAgICAgICAgICAgICA8ZW0+IlNldSBlLW1haWw/IEFzc2ltIGEgZ2VudGUgZ2FyYW50ZSBvIGNvbnRhdG8gbWVzbW8gc2UgbyBXaGF0c0FwcCB0cmF2YXIg8J+UkiI8L2VtPgogICAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDx0ZXh0YXJlYQogICAgICBuYW1lPSJ2bTJfc29maWFfcHJvbXB0X3RleHQiCiAgICAgIGlkPSJ2bTItc29maWEtcHJvbXB0LXRleHRhcmVhIgogICAgICByb3dzPSIzMiIKICAgICAgc3R5bGU9IndpZHRoOjEwMCU7Zm9udC1mYW1pbHk6J1NGIE1vbm8nLE1vbmFjbyxDb25zb2xhcyxtb25vc3BhY2U7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS42NTtwYWRkaW5nOjE0cHg7Ym9yZGVyOjJweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6OHB4O3Jlc2l6ZTp2ZXJ0aWNhbDtib3gtc2l6aW5nOmJvcmRlci1ib3g7YmFja2dyb3VuZDojZmFmYWZhIgogICAgPjw/cGhwIGVjaG8gZXNjX3RleHRhcmVhKCR0ZXh0YXJlYV92YWx1ZSk7ID8+PC90ZXh0YXJlYT4KCiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7bWFyZ2luLXRvcDoxNHB4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlciI+CiAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJ2bTJfc29maWFfcHJvbXB0X3NhdmUiIHZhbHVlPSIxIgogICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiM3YzNhZWQ7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjEwcHggMjBweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXIiPgogICAgICAgIPCfkr4gU2FsdmFyIFByb21wdAogICAgICA8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJ2bTItcHJvbXB0LWxvYWQtZGVmYXVsdCIKICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2NvbG9yOiM2YjcyODA7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweCAyMHB4O2ZvbnQtc2l6ZToxM3B4O2N1cnNvcjpwb2ludGVyIj4KICAgICAgICDwn5OLIENhcnJlZ2FyIHBhZHLDo28KICAgICAgPC9idXR0b24+CiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0idm0yLXByb21wdC1jbGVhciIKICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2NvbG9yOiNkYzI2MjY7Ym9yZGVyOjFweCBzb2xpZCAjZmNhNWE1O2JvcmRlci1yYWRpdXM6NnB4O3BhZGRpbmc6MTBweCAyMHB4O2ZvbnQtc2l6ZToxM3B4O2N1cnNvcjpwb2ludGVyIj4KICAgICAgICDwn5SEIExpbXBhciAodm9sdGEgYW8gcGFkcsOjbyBubyBzYXZlKQogICAgICA8L2J1dHRvbj4KICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5Y2EzYWY7bWFyZ2luLWxlZnQ6YXV0byIgaWQ9InZtMi1wcm9tcHQtY2hhcmNvdW50Ij48L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+CjwvZGl2PgoKPHNjcmlwdD4KKGZ1bmN0aW9uKCl7CiAgdmFyIHRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1zb2ZpYS1wcm9tcHQtdGV4dGFyZWEnKTsKICB2YXIgY2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndm0yLXByb21wdC1jaGFyY291bnQnKTsKICB2YXIgZGVmYXVsdFByb21wdCA9IDw/cGhwIGVjaG8gd3BfanNvbl9lbmNvZGUoICRkZWZhdWx0X3Byb21wdCA/OiAnKHBhZHLDo28gYWluZGEgbsOjbyByZWdpc3RyYWRvIOKAlCBhYnJhIGEgbG9qYSB1bWEgdmV6IHBhcmEgY2FycmVnYXIpJyApOyA/PjsKCiAgZnVuY3Rpb24gdXBkYXRlQ291bnQoKSB7CiAgICBpZiAoY2MpIGNjLnRleHRDb250ZW50ID0gdGEudmFsdWUubGVuZ3RoLnRvTG9jYWxlU3RyaW5nKCdwdC1CUicpICsgJyBjYXJhY3RlcmVzJzsKICB9CiAgdGEuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB1cGRhdGVDb3VudCk7CiAgdXBkYXRlQ291bnQoKTsKCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZtMi1wcm9tcHQtbG9hZC1kZWZhdWx0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgaWYgKGNvbmZpcm0oJ1N1YnN0aXR1aXIgbyBjb250ZcO6ZG8gcGVsbyBwcm9tcHQgcGFkcsOjbz8nKSkgewogICAgICB0YS52YWx1ZSA9IGRlZmF1bHRQcm9tcHQ7CiAgICAgIHVwZGF0ZUNvdW50KCk7CiAgICB9CiAgfSk7CgogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bTItcHJvbXB0LWNsZWFyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgaWYgKGNvbmZpcm0oJ0xpbXBhciBvIGNhbXBvPyBBbyBzYWx2YXIgdmF6aW8sIGEgU29mSUEgdm9sdGFyw6EgYSB1c2FyIG8gcHJvbXB0IHBhZHLDo28gaW50ZXJuby4nKSkgewogICAgICB0YS52YWx1ZSA9ICcnOwogICAgICB1cGRhdGVDb3VudCgpOwogICAgfQogIH0pOwp9KSgpOwo8L3NjcmlwdD4KCgo8P3BocCBlbHNlaWYgKCRhY3RpdmVfdGFiID09PSAnc2V0dXAnKTogPz4KPD9waHAKLy8g4pSA4pSAIFNhbHZhciBjb25maWd1cmHDp8O1ZXMgYXV0by1vcGVuIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAppZiAoIGlzc2V0KCRfUE9TVFsndm0yX3NvZmlhX3NldHVwX3NhdmUnXSkgJiYgY2hlY2tfYWRtaW5fcmVmZXJlcigndm0yX3NvZmlhX3NldHVwX25vbmNlJykgKSB7CiAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc29maWFfYXV0b19vcGVuJywgIGlzc2V0KCRfUE9TVFsndm0yX3NvZmlhX2F1dG9fb3BlbiddKSA/IDEgOiAwKTsKICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9zb2ZpYV9hdXRvX29wZW5fZGVsYXknLCBpbnR2YWwoJF9QT1NUWyd2bTJfc29maWFfYXV0b19vcGVuX2RlbGF5J10gPz8gOCkpOwogICAgdXBkYXRlX29wdGlvbigndm0yX3NvZmlhX2F1dG9fb3Blbl9mcmVxJywgc2FuaXRpemVfa2V5KCRfUE9TVFsndm0yX3NvZmlhX2F1dG9fb3Blbl9mcmVxJ10gPz8gJ29uY2Vfc2Vzc2lvbicpKTsKICAgIHVwZGF0ZV9vcHRpb24oJ3ZtMl9zb2ZpYV9hdXRvX29wZW5fbXNnJywgc2FuaXRpemVfdGV4dGFyZWFfZmllbGQod3BfdW5zbGFzaCgkX1BPU1RbJ3ZtMl9zb2ZpYV9hdXRvX29wZW5fbXNnJ10gPz8gJycpKSk7CiAgICB1cGRhdGVfb3B0aW9uKCd2bTJfc29maWFfZXhjbHVkZWRfdXJscycsIHNhbml0aXplX3RleHRhcmVhX2ZpZWxkKHdwX3Vuc2xhc2goJF9QT1NUWyd2bTJfc29maWFfZXhjbHVkZWRfdXJscyddID8/ICcnKSkpOwogICAgZWNobyAnPGRpdiBjbGFzcz0ibm90aWNlIG5vdGljZS1zdWNjZXNzIGlzLWRpc21pc3NpYmxlIj48cD7inIUgQ29uZmlndXJhw6fDtWVzIHNhbHZhcyE8L3A+PC9kaXY+JzsKfQokYW9fZW5hYmxlZCAgID0gKGludClnZXRfb3B0aW9uKCd2bTJfc29maWFfYXV0b19vcGVuJywgMCk7CiRhb19kZWxheSAgICAgPSAoaW50KWdldF9vcHRpb24oJ3ZtMl9zb2ZpYV9hdXRvX29wZW5fZGVsYXknLCA4KTsKJGFvX2ZyZXEgICAgICA9IGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV9hdXRvX29wZW5fZnJlcScsICdvbmNlX3Nlc3Npb24nKTsKJGFvX21zZyAgICAgICA9IGdldF9vcHRpb24oJ3ZtMl9zb2ZpYV9hdXRvX29wZW5fbXNnJywgJycpOwokYW9fZXhjbF91cmxzID0gZ2V0X29wdGlvbigndm0yX3NvZmlhX2V4Y2x1ZGVkX3VybHMnLCAnJyk7Cj8+CjxkaXYgc3R5bGU9Im1heC13aWR0aDo3MjBweCI+CiAgPGgyIHN0eWxlPSJtYXJnaW4tdG9wOjA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweCI+8J+UpyBTZXR1cCBkYSBTb2ZJQQogICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtiYWNrZ3JvdW5kOjw/cGhwIGVjaG8gJGFvX2VuYWJsZWQ/JyNkY2ZjZTcnOicjZmVlMmUyJzsgPz47Y29sb3I6PD9waHAgZWNobyAkYW9fZW5hYmxlZD8nIzE2NjUzNCc6JyM5OTFiMWInOyA/PjtwYWRkaW5nOjNweCAxMHB4O2JvcmRlci1yYWRpdXM6MjBweCI+CiAgICAgIDw/cGhwIGVjaG8gJGFvX2VuYWJsZWQgPyAn8J+foiBBdXRvLW9wZW4gYXRpdm8nIDogJ/CflLQgQXV0by1vcGVuIGRlc2xpZ2Fkbyc7ID8+CiAgICA8L3NwYW4+CiAgPC9oMj4KICA8cCBzdHlsZT0iY29sb3I6IzZiNzI4MDttYXJnaW4tdG9wOi04cHg7Zm9udC1zaXplOjEzcHgiPkNvbmZpZ3VyZSBxdWFuZG8gZSBjb21vIGEgU29mSUEgYWJyZSBhdXRvbWF0aWNhbWVudGUgcGFyYSBvcyB2aXNpdGFudGVzIGRvIHNpdGUuPC9wPgoKICA8Zm9ybSBtZXRob2Q9InBvc3QiPgogICAgPD9waHAgd3Bfbm9uY2VfZmllbGQoJ3ZtMl9zb2ZpYV9zZXR1cF9ub25jZScpOyA/PgoKICAgIDwhLS0gQ2FyZDogQXV0by1vcGVuIHByaW5jaXBhbCAtLT4KICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNWU3ZWI7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MjBweCAyNHB4O21hcmdpbi1ib3R0b206MTZweCI+CiAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHN0cm9uZyBzdHlsZT0iZm9udC1zaXplOjE1cHgiPvCfmoAgQWJyaXIgU29mSUEgYXV0b21hdGljYW1lbnRlPC9zdHJvbmc+CiAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjRweCAwIDA7Y29sb3I6IzZiNzI4MDtmb250LXNpemU6MTNweCI+UXVhbmRvIGF0aXZhZG8sIGEgU29mSUEgYWJyZSBzb3ppbmhhIGFww7NzIG8gdmlzaXRhbnRlIGVudHJhciBubyBzaXRlLjwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtjdXJzb3I6cG9pbnRlciI+CiAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InZtMl9zb2ZpYV9hdXRvX29wZW4iIHZhbHVlPSIxIiA8P3BocCBjaGVja2VkKCRhb19lbmFibGVkLCAxKTsgPz4KICAgICAgICAgICAgc3R5bGU9IndpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YWNjZW50LWNvbG9yOiM3YzNhZWQiPgogICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OjYwMDtjb2xvcjo8P3BocCBlY2hvICRhb19lbmFibGVkPycjN2MzYWVkJzonIzZiNzI4MCc7ID8+Ij48P3BocCBlY2hvICRhb19lbmFibGVkPydBdGl2byc6J0luYXRpdm8nOyA/Pjwvc3Bhbj4KICAgICAgICA8L2xhYmVsPgogICAgICA8L2Rpdj4KCiAgICAgIDwhLS0gRGVsYXkgLS0+CiAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+CiAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMzc0MTUxO21hcmdpbi1ib3R0b206NnB4Ij7ij7HvuI8gQWJyaXIgYXDDs3MgKHNlZ3VuZG9zKTwvbGFiZWw+CiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweCI+CiAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSJ2bTJfc29maWFfYXV0b19vcGVuX2RlbGF5IiB2YWx1ZT0iPD9waHAgZWNobyBlc2NfYXR0cigkYW9fZGVsYXkpOyA/PiIKICAgICAgICAgICAgbWluPSIwIiBtYXg9IjEyMCIgc3R5bGU9IndpZHRoOjkwcHg7cGFkZGluZzo4cHggMTJweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjE0cHgiPgogICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5Y2EzYWYiPjAgPSBpbWVkaWF0byDCtyA4cyByZWNvbWVuZGFkbyAodmlzaXRhbnRlIGrDoSBsZXUgYWxnbyk8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPCEtLSBGcmVxdcOqbmNpYSAtLT4KICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNzQxNTE7bWFyZ2luLWJvdHRvbTo4cHgiPvCflIEgRnJlcXXDqm5jaWE8L2xhYmVsPgogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweCI+CiAgICAgICAgICA8P3BocAogICAgICAgICAgJGZyZXFzID0gWwogICAgICAgICAgICAnb25jZV9zZXNzaW9uJyA9PiBbJ2xhYmVsJz0+J1VtYSB2ZXogcG9yIHNlc3PDo28nLCAgICdkZXNjJz0+J0FicmUgc8OzIG5hIHByaW1laXJhIHZpc2l0YSBkZSBjYWRhIGFiYS9qYW5lbGEg4oCUIGZlY2hhIG8gbmF2ZWdhZG9yLCBhYnJlIGRlIG5vdm8gKOKtkCByZWNvbWVuZGFkbyknXSwKICAgICAgICAgICAgJ29uY2VfZGF5JyAgICAgPT4gWydsYWJlbCc9PidVbWEgdmV6IHBvciBkaWEnLCAgICAgICdkZXNjJz0+J0FicmUgbm8gbcOheGltbyB1bWEgdmV6IGEgY2FkYSAyNGggcG9yIHZpc2l0YW50ZSddLAogICAgICAgICAgICAnbmV3X29ubHknICAgICA9PiBbJ2xhYmVsJz0+J0FwZW5hcyBub3ZvcyB2aXNpdGFudGVzJywnZGVzYyc9PidTw7MgYWJyZSBwYXJhIHF1ZW0gbnVuY2EgY29udmVyc291IGNvbSBhIFNvZklBIGFudGVzJ10sCiAgICAgICAgICAgICdhbHdheXMnICAgICAgID0+IFsnbGFiZWwnPT4nU2VtcHJlJywgICAgICAgICAgICAgICAnZGVzYyc9PidBYnJlIGVtIHRvZGEgcMOhZ2luYSBjYXJyZWdhZGEgKHBvZGUgaXJyaXRhciB2aXNpdGFudGVzIGZyZXF1ZW50ZXMpJ10sCiAgICAgICAgICBdOwogICAgICAgICAgZm9yZWFjaCAoJGZyZXFzIGFzICR2YWwgPT4gJGYpOiA/PgogICAgICAgICAgPGxhYmVsIHN0eWxlPSJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6MTBweDtwYWRkaW5nOjEwcHggMTRweDtib3JkZXI6MnB4IHNvbGlkIDw/cGhwIGVjaG8gJGFvX2ZyZXE9PT0kdmFsPycjN2MzYWVkJzonI2U1ZTdlYic7ID8+O2JvcmRlci1yYWRpdXM6OHB4O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6PD9waHAgZWNobyAkYW9fZnJlcT09PSR2YWw/JyNmYWY1ZmYnOicjZmZmJzsgPz4iPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InZtMl9zb2ZpYV9hdXRvX29wZW5fZnJlcSIgdmFsdWU9Ijw/cGhwIGVjaG8gZXNjX2F0dHIoJHZhbCk7ID8+IiA8P3BocCBjaGVja2VkKCRhb19mcmVxLCAkdmFsKTsgPz4gc3R5bGU9Im1hcmdpbi10b3A6MnB4O2FjY2VudC1jb2xvcjojN2MzYWVkIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjojMTExODI3Ij48P3BocCBlY2hvIGVzY19odG1sKCRmWydsYWJlbCddKTsgPz48L3N0cm9uZz4KICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjJweCAwIDA7Zm9udC1zaXplOjEycHg7Y29sb3I6IzZiNzI4MCI+PD9waHAgZWNobyBlc2NfaHRtbCgkZlsnZGVzYyddKTsgPz48L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBDYXJkOiBNZW5zYWdlbSBpbmljaWFsIC0tPgogICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2U1ZTdlYjtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoyMHB4IDI0cHg7bWFyZ2luLWJvdHRvbToxNnB4Ij4KICAgICAgPHN0cm9uZyBzdHlsZT0iZm9udC1zaXplOjE1cHgiPvCfkqwgTWVuc2FnZW0gaW5pY2lhbCAob3BjaW9uYWwpPC9zdHJvbmc+CiAgICAgIDxwIHN0eWxlPSJtYXJnaW46NHB4IDAgMTJweDtjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4Ij5TZSBwcmVlbmNoaWRhLCBhIFNvZklBIGV4aWJlIGVzdGEgbWVuc2FnZW0gYW8gYWJyaXIgYXV0b21hdGljYW1lbnRlIOKAlCBlbSB2ZXogZG9zIGNoaXBzIGRlIHN1Z2VzdMOjbyBwYWRyw6NvLiBEZWl4ZSB2YXppbyBwYXJhIG1hbnRlciBvIGNvbXBvcnRhbWVudG8gcGFkcsOjby48L3A+CiAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ2bTJfc29maWFfYXV0b19vcGVuX21zZyIgcm93cz0iMyIKICAgICAgICBwbGFjZWhvbGRlcj0iRXg6IE9sw6EhIPCfkYsgUG9zc28gdGUgYWp1ZGFyIGEgZW5jb250cmFyIGEgYXRyYcOnw6NvIHBlcmZlaXRhIHBhcmEgc2V1IGV2ZW50bz8gTWUgY29udGEgdW0gcG91Y28gc29icmUgYSBmZXN0YSEiCiAgICAgICAgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzoxMHB4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDFkNWRiO2JvcmRlci1yYWRpdXM6OHB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtZmFtaWx5OmluaGVyaXQ7cmVzaXplOnZlcnRpY2FsIj48P3BocCBlY2hvIGVzY190ZXh0YXJlYSgkYW9fbXNnKTsgPz48L3RleHRhcmVhPgogICAgICA8P3BocCBpZiAoJGFvX21zZyk6ID8+CiAgICAgICAgPHAgc3R5bGU9Im1hcmdpbjo2cHggMCAwO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM3YzNhZWQiPuKcj++4jyBNZW5zYWdlbSBjdXN0b21pemFkYSBhdGl2YTwvcD4KICAgICAgPD9waHAgZWxzZTogPz4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjZweCAwIDA7Zm9udC1zaXplOjEycHg7Y29sb3I6IzljYTNhZiI+VXNhbmRvIGNoaXBzIGRlIHN1Z2VzdMOjbyBwYWRyw6NvPC9wPgogICAgICA8P3BocCBlbmRpZjsgPz4KICAgIDwvZGl2PgoKICAgIDwhLS0gUHJldmlldyAtLT4KICAgIDw/cGhwIGlmICgkYW9fZW5hYmxlZCk6ID8+CiAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNlZmY2ZmY7Ym9yZGVyOjFweCBzb2xpZCAjYmZkYmZlO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6MTJweCAxNnB4O21hcmdpbi1ib3R0b206MTZweDtmb250LXNpemU6MTNweCI+CiAgICAgIOKEue+4jyA8c3Ryb25nPkNvbmZpZ3VyYcOnw6NvIGF0dWFsOjwvc3Ryb25nPiBTb2ZJQSBhYnJlIGFww7NzIDxzdHJvbmc+PD9waHAgZWNobyAkYW9fZGVsYXk7ID8+czwvc3Ryb25nPiwKICAgICAgZnJlcXXDqm5jaWEgPHN0cm9uZz48P3BocCBlY2hvIGVzY19odG1sKCRmcmVxc1skYW9fZnJlcV1bJ2xhYmVsJ10pOyA/Pjwvc3Ryb25nPjw/cGhwIGlmICgkYW9fbXNnKTogPz4sIGNvbSBtZW5zYWdlbSBjdXN0b21pemFkYTw/cGhwIGVuZGlmOyA/Pi4KICAgIDwvZGl2PgogICAgPD9waHAgZW5kaWY7ID8+CgogICAgPCEtLSBDYXJkOiBVUkxzIGV4Y2x1w61kYXMgLS0+CiAgICA8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlN2ViO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjIwcHggMjRweDttYXJnaW4tYm90dG9tOjE2cHgiPgogICAgICA8c3Ryb25nIHN0eWxlPSJmb250LXNpemU6MTVweCI+8J+aqyBQw6FnaW5hcyBvbmRlIGEgU29mSUEgTsODTyBhcGFyZWNlPC9zdHJvbmc+CiAgICAgIDxwIHN0eWxlPSJtYXJnaW46NHB4IDAgMTJweDtjb2xvcjojNmI3MjgwO2ZvbnQtc2l6ZToxM3B4Ij5VbWEgVVJMIHBvciBsaW5oYS4gQSBiYXJyYSBkZSBuYXZlZ2HDp8OjbyBpbnRlaXJhIGZpY2Egb2N1bHRhIG5lc3NhcyBww6FnaW5hcyAow7p0aWwgcGFyYSBww6FnaW5hcyBpbnRlcm5hcy9hZG1pbikuPC9wPgogICAgICA8dGV4dGFyZWEgbmFtZT0idm0yX3NvZmlhX2V4Y2x1ZGVkX3VybHMiIHJvd3M9IjUiCiAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8vbG9qYS52aXZhbWFpc2V2ZW50b3MuY29tL2FnZW5kYS12aXZhbWFpcy1hZG1pbnMtY2VsdWxhci8mIzEwO2h0dHBzOi8vbG9qYS52aXZhbWFpc2V2ZW50b3MuY29tL291dHJhLXBhZ2luYS1pbnRlcm5hLyIKICAgICAgICBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjEwcHggMTRweDtib3JkZXI6MXB4IHNvbGlkICNkMWQ1ZGI7Ym9yZGVyLXJhZGl1czo4cHg7Zm9udC1zaXplOjEzcHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO3Jlc2l6ZTp2ZXJ0aWNhbCI+PD9waHAgZWNobyBlc2NfdGV4dGFyZWEoJGFvX2V4Y2xfdXJscyk7ID8+PC90ZXh0YXJlYT4KICAgICAgPD9waHAKICAgICAgICAkZXhjbF9jb3VudCA9IGNvdW50KGFycmF5X2ZpbHRlcihhcnJheV9tYXAoJ3RyaW0nLCBleHBsb2RlKCJcbiIsICRhb19leGNsX3VybHMpKSkpOwogICAgICAgIGlmICgkZXhjbF9jb3VudCA+IDApOgogICAgICA/PgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW46NnB4IDAgMDtmb250LXNpemU6MTJweDtjb2xvcjojZGMyNjI2Ij7wn5qrIDw/cGhwIGVjaG8gJGV4Y2xfY291bnQ7ID8+IHDDoWdpbmE8P3BocCBlY2hvICRleGNsX2NvdW50ID4gMSA/ICdzJyA6ICcnOyA/PiBleGNsdcOtZGE8P3BocCBlY2hvICRleGNsX2NvdW50ID4gMSA/ICdzJyA6ICcnOyA/PjwvcD4KICAgICAgPD9waHAgZWxzZTogPz4KICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjZweCAwIDA7Zm9udC1zaXplOjEycHg7Y29sb3I6IzljYTNhZiI+TmVuaHVtYSBww6FnaW5hIGV4Y2x1w61kYSDigJQgU29mSUEgYXBhcmVjZSBlbSB0b2RvIG8gc2l0ZTwvcD4KICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICA8L2Rpdj4KCiAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0idm0yX3NvZmlhX3NldHVwX3NhdmUiCiAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiM3YzNhZWQ7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtwYWRkaW5nOjEycHggMzJweDtib3JkZXItcmFkaXVzOjhweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXIiPgogICAgICDwn5K+IFNhbHZhciBjb25maWd1cmHDp8O1ZXMKICAgIDwvYnV0dG9uPgogIDwvZm9ybT4KPC9kaXY+Cgo8P3BocCBlbmRpZjsgPz4KCjwvZGl2PjwhLS0gLndyYXAgLS0+Cjw/cGhwCn0KCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAovLyBTT0ZJQSBMQU5ESU5HIFBBR0Ug4oCUIC9zb2ZpYQovLyBSZXV0aWxpemEgbyBtb2RhbCBTb2ZJQSBkbyB2bS1ib3R0b20tbmF2IChtZXNtYSBmb250ZSBkZSB2ZXJkYWRlKQovLyBDU1MgZnVsbHNjcmVlbiArIGF1dG8tb3BlbiArIFVUTXMgaW5qZXRhZG9zIG5vIFNPRklBX0VORFBPSU5UCi8vIHYxLjUuODQKLy8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCgovLyBDcmlhIGEgV1AgcGFnZSAic29maWEiIGF1dG9tYXRpY2FtZW50ZSBzZSBuw6NvIGV4aXN0aXIKYWRkX2FjdGlvbignaW5pdCcsICd2bTJfc29maWFfZW5zdXJlX3BhZ2UnLCAyMCk7CmZ1bmN0aW9uIHZtMl9zb2ZpYV9lbnN1cmVfcGFnZSgpIHsKICAgIGlmICggZ2V0X3BhZ2VfYnlfcGF0aCgnc29maWEnKSApIHJldHVybjsKICAgIHdwX2luc2VydF9wb3N0KFsKICAgICAgICAncG9zdF90aXRsZScgID0+ICdTb2ZJQSDigJQgRW5jb250cmUgc3VhIEF0cmHDp8OjbycsCiAgICAgICAgJ3Bvc3RfbmFtZScgICA9PiAnc29maWEnLAogICAgICAgICdwb3N0X3N0YXR1cycgPT4gJ3B1Ymxpc2gnLAogICAgICAgICdwb3N0X3R5cGUnICAgPT4gJ3BhZ2UnLAogICAgICAgICdwb3N0X2NvbnRlbnQnPT4gJycsCiAgICBdKTsKfQoKYWRkX2FjdGlvbigndGVtcGxhdGVfcmVkaXJlY3QnLCAndm0yX3NvZmlhX2xhbmRpbmdfcmVkaXJlY3QnKTsKZnVuY3Rpb24gdm0yX3NvZmlhX2xhbmRpbmdfcmVkaXJlY3QoKSB7CiAgICBpZiAoICEgKCBpc19wYWdlKCdzb2ZpYScpIHx8IGdldF9xdWVyeV92YXIoJ3BhZ2VuYW1lJykgPT09ICdzb2ZpYScgKSApIHJldHVybjsKICAgIC8vIEluamV0YXIgQ1NTL0pTIHNlbSBpbnRlcnJvbXBlciBvIHJlbmRlciBub3JtYWwgZG8gV1AgKHZtLWJvdHRvbS1uYXYgY2FycmVnYSBqdW50bykKICAgIGFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAgICd2bTJfc29maWFfbGFuZGluZ19oZWFkJywgICA5OSk7CiAgICBhZGRfYWN0aW9uKCd3cF9mb290ZXInLCAndm0yX3NvZmlhX2xhbmRpbmdfZm9vdGVyJywgOTkpOwp9CgpmdW5jdGlvbiB2bTJfc29maWFfbGFuZGluZ19oZWFkKCkgewogICAgJHBpeGVsX2lkID0gJzM0MTU5NDQwNTUyMjY4MjknOwogICAgPz4KPCEtLSBNZXRhIFBpeGVsIC0tPgo8c2NyaXB0PiFmdW5jdGlvbihmLGIsZSx2LG4sdCxzKXtpZihmLmZicSlyZXR1cm47bj1mLmZicT1mdW5jdGlvbigpe24uY2FsbE1ldGhvZD9uLmNhbGxNZXRob2QuYXBwbHkobixhcmd1bWVudHMpOm4ucXVldWUucHVzaChhcmd1bWVudHMpfTtpZighZi5fZmJxKWYuX2ZicT1uO24ucHVzaD1uO24ubG9hZGVkPSEwO24udmVyc2lvbj0nMi4wJztuLnF1ZXVlPVtdO3Q9Yi5jcmVhdGVFbGVtZW50KGUpO3QuYXN5bmM9ITA7dC5zcmM9djtzPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSlbMF07cy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LHMpfSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2h0dHBzOi8vY29ubmVjdC5mYWNlYm9vay5uZXQvZW5fVVMvZmJldmVudHMuanMnKTtmYnEoJ2luaXQnLCc8P3BocCBlY2hvIGVzY19qcygkcGl4ZWxfaWQpOyA/PicpO2ZicSgndHJhY2snLCdQYWdlVmlldycpOzwvc2NyaXB0Pgo8bm9zY3JpcHQ+PGltZyBoZWlnaHQ9IjEiIHdpZHRoPSIxIiBzdHlsZT0iZGlzcGxheTpub25lIiBzcmM9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS90cj9pZD08P3BocCBlY2hvIGVzY19hdHRyKCRwaXhlbF9pZCk7ID8+JmV2PVBhZ2VWaWV3Jm5vc2NyaXB0PTEiLz48L25vc2NyaXB0Pgo8c3R5bGU+Ci8qIOKUgOKUgCBTT0ZJQSBMQU5ESU5HOiBlc2NvbmRlciB0dWRvIGV4Y2V0byBvIG1vZGFsIOKUgOKUgCAqLwpib2R5LnNvZmlhLWxhbmRpbmcgLnNpdGUtaGVhZGVyLApib2R5LnNvZmlhLWxhbmRpbmcgaGVhZGVyOm5vdCgjdm1ibmF2LWlhLXBhbmVsIGhlYWRlciksCmJvZHkuc29maWEtbGFuZGluZyAjbWFzdGhlYWQsCmJvZHkuc29maWEtbGFuZGluZyAuZWxlbWVudG9yLWxvY2F0aW9uLWhlYWRlciwKYm9keS5zb2ZpYS1sYW5kaW5nIGZvb3RlciwKYm9keS5zb2ZpYS1sYW5kaW5nIC5zaXRlLWZvb3RlciwKYm9keS5zb2ZpYS1sYW5kaW5nICNjb2xvcGhvbiwKYm9keS5zb2ZpYS1sYW5kaW5nICN3cGFkbWluYmFyLApib2R5LnNvZmlhLWxhbmRpbmcgI3ZtYm5hdi1iYXIsCmJvZHkuc29maWEtbGFuZGluZyAuZW50cnktaGVhZGVyLApib2R5LnNvZmlhLWxhbmRpbmcgLmVudHJ5LWNvbnRlbnQsCmJvZHkuc29maWEtbGFuZGluZyAucGFnZS1jb250ZW50LApib2R5LnNvZmlhLWxhbmRpbmcgLnNpdGUtbWFpbiA+ICo6bm90KCN2bWJuYXYtaWEtbW9kYWwpIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQpib2R5LnNvZmlhLWxhbmRpbmcgewogICAgYmFja2dyb3VuZDogI2Y1ZjNmZjsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KLyog4pSA4pSAIE1vZGFsIGZ1bGxzY3JlZW4g4pSA4pSAICovCmJvZHkuc29maWEtbGFuZGluZyAjdm1ibmF2LWlhLW1vZGFsIHsKICAgIGJhY2tncm91bmQ6ICNmZmYgIWltcG9ydGFudDsKICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoICFpbXBvcnRhbnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50OwogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50Owp9Ci8qIFBhbmVsOiBjb2x1bmEgZmxleCBxdWUgcHJlZW5jaGUgMTAwZHZoIHNlbSBzY3JvbGwgcHLDs3ByaW8gKi8KYm9keS5zb2ZpYS1sYW5kaW5nICN2bWJuYXYtaWEtcGFuZWwgewogICAgaGVpZ2h0OiAxMDBkdmggIWltcG9ydGFudDsKICAgIG1heC1oZWlnaHQ6IDEwMGR2aCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIG1heC13aWR0aDogNDgwcHggIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIG92ZXJmbG93LXk6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50Owp9Ci8qIEhlYWRlciBlIGNoaXBzOiBuw6NvIGVuY29saGVtICovCmJvZHkuc29maWEtbGFuZGluZyAudm1ibmF2LWlhLWhlYWRlciB7CiAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMTRweCAyMHB4IDEycHggIWltcG9ydGFudDsKICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDsKfQpib2R5LnNvZmlhLWxhbmRpbmcgI3ZtMi1zb2ZpYS11dG0gewogICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDsKfQpib2R5LnNvZmlhLWxhbmRpbmcgI3ZtYm5hdi1pYS1jaGlwcyB7CiAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogNnB4IDIwcHggOHB4ICFpbXBvcnRhbnQ7Cn0KLyogQ2hhdDogY3Jlc2NlIGUgcm9sYSAqLwpib2R5LnNvZmlhLWxhbmRpbmcgI3ZtYm5hdi1pYS1jaGF0IHsKICAgIGZsZXg6IDEgMSBhdXRvICFpbXBvcnRhbnQ7CiAgICBtYXgtaGVpZ2h0OiBub25lICFpbXBvcnRhbnQ7CiAgICBvdmVyZmxvdy15OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2ggIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDRweCAyMHB4IDhweCAhaW1wb3J0YW50Owp9Ci8qIFR5cGluZyBpbmRpY2F0b3IgKi8KYm9keS5zb2ZpYS1sYW5kaW5nICN2bWJuYXYtaWEtdHlwaW5nIHsKICAgIGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAycHggMjBweCA0cHggIWltcG9ydGFudDsKfQovKiBJbnB1dDogZml4byBubyBmdW5kbywgc2VuZCBidXR0b24gY29tbyBmbGV4IGl0ZW0gKi8KYm9keS5zb2ZpYS1sYW5kaW5nIC52bWJuYXYtaWEtaW5wdXQtd3JhcCB7CiAgICBmbGV4LXNocmluazogMCAhaW1wb3J0YW50OwogICAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAxMHB4IDIwcHggY2FsYygxNHB4ICsgZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDBweCkpICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2VkZTlmZSAhaW1wb3J0YW50Owp9CmJvZHkuc29maWEtbGFuZGluZyAudm1ibmF2LWlhLXNlbmRidG4gewogICAgcG9zaXRpb246IHN0YXRpYyAhaW1wb3J0YW50OwogICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDsKfQovKiDilIDilIAgVVRNIGJhZGdlIGFiYWl4byBkbyBoZWFkZXIg4pSA4pSAICovCiN2bTItc29maWEtdXRtIHsKICAgIGJhY2tncm91bmQ6ICNmNWYzZmY7CiAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiAjN2MzYWVkOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgbGV0dGVyLXNwYWNpbmc6IC4zcHg7Cn0KPC9zdHlsZT4KICAgIDw/cGhwCn0KCmZ1bmN0aW9uIHZtMl9zb2ZpYV9sYW5kaW5nX2Zvb3RlcigpIHsKICAgID8+CjxzY3JpcHQ+CihmdW5jdGlvbigpewogICAgLy8gMS4gTWFyY2FyIGJvZHkgcGFyYSBDU1MKICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnc29maWEtbGFuZGluZycpOwoKICAgIC8vIDIuIENhcHR1cmFyIFVUTXMgZGEgVVJMCiAgICB2YXIgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKICAgIHZhciB1dG1LZXlzID0gWyd1dG1fc291cmNlJywndXRtX21lZGl1bScsJ3V0bV9jYW1wYWlnbicsJ3V0bV9jb250ZW50JywndXRtX3Rlcm0nXTsKICAgIHZhciB1dG1zID0ge307CiAgICB2YXIgcGFydHMgPSBbXTsKICAgIHV0bUtleXMuZm9yRWFjaChmdW5jdGlvbihrKXsgdmFyIHY9cGFyYW1zLmdldChrKTsgaWYodil7dXRtc1trXT12OyBwYXJ0cy5wdXNoKHYpO30gfSk7CiAgICB3aW5kb3cuX3ZtMl9zb2ZpYV91dG1zID0gdXRtczsKCiAgICAvLyAzLiBJbmpldGFyIFVUTXMgKyBjYW5hbF9vcmlnZW0gbm8gZW5kcG9pbnQgcXVlIG8gdm1ibmF2IGrDoSB1c2EKICAgIGZ1bmN0aW9uIHBhdGNoRW5kcG9pbnQoKSB7CiAgICAgICAgaWYgKHR5cGVvZiBTT0ZJQV9FTkRQT0lOVCA9PT0gJ3VuZGVmaW5lZCcpIHsgc2V0VGltZW91dChwYXRjaEVuZHBvaW50LCAxMDApOyByZXR1cm47IH0KICAgICAgICB0cnkgewogICAgICAgICAgICB2YXIgZXAgPSBuZXcgVVJMKFNPRklBX0VORFBPSU5UKTsKICAgICAgICAgICAgdXRtS2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGspeyBpZih1dG1zW2tdKSBlcC5zZWFyY2hQYXJhbXMuc2V0KGssIHV0bXNba10pOyB9KTsKICAgICAgICAgICAgZXAuc2VhcmNoUGFyYW1zLnNldCgnY2FuYWxfb3JpZ2VtJywgJ3NvZmlhX2xhbmRpbmcnKTsKICAgICAgICAgICAgU09GSUFfRU5EUE9JTlQgPSBlcC50b1N0cmluZygpOwogICAgICAgIH0gY2F0Y2goZSl7fQogICAgfQogICAgcGF0Y2hFbmRwb2ludCgpOwoKICAgIC8vIDQuIE1vc3RyYXIgYmFkZ2UgVVRNIGRlbnRybyBkbyBwYWluZWwKICAgIGlmIChwYXJ0cy5sZW5ndGgpIHsKICAgICAgICB2YXIgYmFkZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBiYWRnZS5pZCA9ICd2bTItc29maWEtdXRtJzsKICAgICAgICBiYWRnZS50ZXh0Q29udGVudCA9ICfwn5ONICcgKyBwYXJ0cy5qb2luKCcgwrcgJyk7CiAgICAgICAgZnVuY3Rpb24gaW5zZXJ0QmFkZ2UoKSB7CiAgICAgICAgICAgIHZhciBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2bWJuYXYtaWEtcGFuZWwnKTsKICAgICAgICAgICAgaWYgKCFwYW5lbCkgeyBzZXRUaW1lb3V0KGluc2VydEJhZGdlLCAxNTApOyByZXR1cm47IH0KICAgICAgICAgICAgdmFyIGZpcnN0ID0gcGFuZWwuY2hpbGRyZW5bMF07CiAgICAgICAgICAgIGlmIChmaXJzdCkgcGFuZWwuaW5zZXJ0QmVmb3JlKGJhZGdlLCBmaXJzdC5uZXh0U2libGluZyk7CiAgICAgICAgICAgIGVsc2UgcGFuZWwuYXBwZW5kQ2hpbGQoYmFkZ2UpOwogICAgICAgIH0KICAgICAgICBpbnNlcnRCYWRnZSgpOwogICAgfQoKICAgIC8vIDUuIEF1dG8tYWJyaXIgbyBtb2RhbCBTb2ZJQQogICAgZnVuY3Rpb24gdHJ5T3BlbigpIHsKICAgICAgICBpZiAodHlwZW9mIHZtYm5hdk9wZW5JQSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICB2bWJuYXZPcGVuSUEoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZXRUaW1lb3V0KHRyeU9wZW4sIDE1MCk7CiAgICAgICAgfQogICAgfQogICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgewogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCB0cnlPcGVuKTsKICAgIH0gZWxzZSB7CiAgICAgICAgdHJ5T3BlbigpOwogICAgfQp9KSgpOwo8L3NjcmlwdD4KICAgIDw/cGhwCn0KCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAovLyBFTUFJTCDigJQgRW5yaXF1ZWNpbWVudG8gZGUgYmFzZSBlIGVzdGF0w61zdGljYXMgKHYxLjUuODkpCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAoKYWRkX2FjdGlvbigncmVzdF9hcGlfaW5pdCcsIGZ1bmN0aW9uKCkgewogICAgLy8gR0VUIC92bS1jcm0tdjIvdjEvZW1haWwvc3RhdHMKICAgIHJlZ2lzdGVyX3Jlc3Rfcm91dGUoJ3ZtLWNybS12Mi92MScsICcvZW1haWwvc3RhdHMnLCBbCiAgICAgICAgJ21ldGhvZHMnICAgICAgICAgICAgID0+ICdHRVQnLAogICAgICAgICdjYWxsYmFjaycgICAgICAgICAgICA9PiAndm0yX2VtYWlsX3N0YXRzX3Jlc3QnLAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiAndm0yX2VtYWlsX3Jlc3RfYXV0aCcsCiAgICBdKTsKICAgIC8vIFBPU1QgL3ZtLWNybS12Mi92MS9lbWFpbC9lbnJpY2gKICAgIHJlZ2lzdGVyX3Jlc3Rfcm91dGUoJ3ZtLWNybS12Mi92MScsICcvZW1haWwvZW5yaWNoJywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnUE9TVCcsCiAgICAgICAgJ2NhbGxiYWNrJyAgICAgICAgICAgID0+ICd2bTJfZW1haWxfZW5yaWNoX3Jlc3QnLAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiAndm0yX2VtYWlsX3Jlc3RfYXV0aCcsCiAgICBdKTsKfSk7CmZ1bmN0aW9uIHZtMl9lbWFpbF9yZXN0X2F1dGgoICRyZXF1ZXN0ICkgewogICAgLy8gQWNlaXRhIFdQIGFkbWluIGF1dGVudGljYWRvIChBcHBsaWNhdGlvbiBQYXNzd29yZCkgT1UgQmVhcmVyIHRva2VuCiAgICBpZiAoIGN1cnJlbnRfdXNlcl9jYW4oJ21hbmFnZV9vcHRpb25zJykgKSByZXR1cm4gdHJ1ZTsKICAgICRhdXRoICAgICA9ICRyZXF1ZXN0LT5nZXRfaGVhZGVyKCdBdXRob3JpemF0aW9uJykgPz8gJyc7CiAgICAkZXhwZWN0ZWQgPSAnQmVhcmVyICcgLiBnZXRfb3B0aW9uKCd2bTJfZmluX3N5bmNfdG9rZW4nLCAndm0yZnN5bmNfOWtxdzNwN3gnKTsKICAgIHJldHVybiAoICRhdXRoID09PSAkZXhwZWN0ZWQgKTsKfQoKLyoqCiAqIEdFVCAvdm0tY3JtLXYyL3YxL2VtYWlsL3N0YXRzCiAqIFJldG9ybmEgY29iZXJ0dXJhIGRlIGUtbWFpbCBuYSBiYXNlIHZtMl9jb250YWN0cy4KICovCmZ1bmN0aW9uIHZtMl9lbWFpbF9zdGF0c19yZXN0KCAkcmVxdWVzdCApIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0YWJsZSA9ICR3cGRiLT5wcmVmaXggLiAndm0yX2NvbnRhY3RzJzsKCiAgICAkdG90YWwgICAgPSAoaW50KSAkd3BkYi0+Z2V0X3ZhcigiU0VMRUNUIENPVU5UKCopIEZST00gJHRhYmxlIik7CiAgICAkY29tX2VtYWlsID0gKGludCkgJHdwZGItPmdldF92YXIoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICR0YWJsZSBXSEVSRSBlbWFpbCAhPSAnJyBBTkQgZW1haWwgSVMgTk9UIE5VTEwiKTsKICAgICRzZW1fZW1haWwgPSAkdG90YWwgLSAkY29tX2VtYWlsOwogICAgJHBjdCAgICAgICA9ICR0b3RhbCA+IDAgPyByb3VuZCgoJGNvbV9lbWFpbCAvICR0b3RhbCkgKiAxMDAsIDEpIDogMDsKCiAgICByZXR1cm4gcmVzdF9lbnN1cmVfcmVzcG9uc2UoWwogICAgICAgICd0b3RhbCcgICAgICA9PiAkdG90YWwsCiAgICAgICAgJ2NvbV9lbWFpbCcgID0+ICRjb21fZW1haWwsCiAgICAgICAgJ3NlbV9lbWFpbCcgID0+ICRzZW1fZW1haWwsCiAgICAgICAgJ2NvYmVydHVyYScgID0+ICRwY3QgLiAnJScsCiAgICBdKTsKfQoKLyoqCiAqIFBPU1QgL3ZtLWNybS12Mi92MS9lbWFpbC9lbnJpY2gKICogRW5yaXF1ZWNlIHZtMl9jb250YWN0cy5lbWFpbCBhIHBhcnRpciBkZToKICogICAxLiBUb2RvcyBvcyBwZWRpZG9zIFdvb0NvbW1lcmNlIChIUE9TOiB3cF93Y19vcmRlcnMpCiAqICAgMi4gVXN1w6FyaW9zIFdQIGNvbSBwaG9uZSBtZXRhCiAqCiAqIFPDsyBhdHVhbGl6YSBjb250YXRvcyBxdWUgdMOqbSBlbWFpbCB2YXppby4KICogUmV0b3JuYSB7IHVwZGF0ZWQsIHNraXBwZWQsIG5vdF9mb3VuZF9pbl9jb250YWN0cyB9LgogKi8KZnVuY3Rpb24gdm0yX2VtYWlsX2VucmljaF9yZXN0KCAkcmVxdWVzdCApIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgIEBpbmlfc2V0KCdtZW1vcnlfbGltaXQnLCAnNTEyTScpOwogICAgQHNldF90aW1lX2xpbWl0KDMwMCk7CgogICAgJHRhYmxlICAgID0gJHdwZGItPnByZWZpeCAuICd2bTJfY29udGFjdHMnOwogICAgJHVwZGF0ZWQgID0gMDsKICAgICRza2lwcGVkICA9IDA7IC8vIGrDoSB0aW5oYW0gZS1tYWlsCiAgICAkbm9fbWF0Y2ggPSAwOyAvLyBlLW1haWwgZW5jb250cmFkbyBtYXMgdGVsZWZvbmUgbsOjbyBlc3TDoSBuYSBiYXNlCgogICAgLy8g4pSA4pSAIE1hcGEgZGUgdGVsZWZvbmVzIHNlbSBlLW1haWwgbmEgYmFzZSDilIDilIAKICAgICRzZW1fZW1haWwgPSAkd3BkYi0+Z2V0X3Jlc3VsdHMoCiAgICAgICAgIlNFTEVDVCBwaG9uZSBGUk9NICR0YWJsZSBXSEVSRSBlbWFpbCA9ICcnIE9SIGVtYWlsIElTIE5VTEwiLAogICAgICAgIEFSUkFZX0EKICAgICk7CiAgICBpZiAoIGVtcHR5KCRzZW1fZW1haWwpICkgewogICAgICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbCiAgICAgICAgICAgICd1cGRhdGVkJyA9PiAwLCAnc2tpcHBlZCcgPT4gMCwgJ25vdF9mb3VuZF9pbl9jb250YWN0cycgPT4gMCwKICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICdUb2RvcyBvcyBjb250YXRvcyBqw6EgdMOqbSBlLW1haWwuJywKICAgICAgICBdKTsKICAgIH0KICAgICRwaG9uZXNfc2VtX2VtYWlsID0gYXJyYXlfZmxpcCggYXJyYXlfY29sdW1uKCRzZW1fZW1haWwsICdwaG9uZScpICk7CiAgICAkdG90YWxfc2VtICAgICAgICA9IGNvdW50KCRwaG9uZXNfc2VtX2VtYWlsKTsKCiAgICAvLyDilIDilIAgRm9udGUgMTogUGVkaWRvcyBXb29Db21tZXJjZSAoSFBPUykg4pSA4pSACiAgICAkd2NfdGJsID0gJHdwZGItPnByZWZpeCAuICd3Y19vcmRlcnMnOwogICAgaWYgKCAkd3BkYi0+Z2V0X3ZhcigiU0hPVyBUQUJMRVMgTElLRSAnJHdjX3RibCciKSA9PT0gJHdjX3RibCApIHsKICAgICAgICAvLyBCdXNjYXIgZW0gbG90ZXMgZGUgNTAwIHBhcmEgbsOjbyBleHBsb2RpciBhIG1lbcOzcmlhCiAgICAgICAgJG9mZnNldCA9IDA7CiAgICAgICAgJGJhdGNoICA9IDUwMDsKICAgICAgICBkbyB7CiAgICAgICAgICAgICRyb3dzID0gJHdwZGItPmdldF9yZXN1bHRzKCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAgICAgICAgICJTRUxFQ1QgYmlsbGluZ19waG9uZSwgYmlsbGluZ19lbWFpbAogICAgICAgICAgICAgICAgIEZST00gJHdjX3RibAogICAgICAgICAgICAgICAgIFdIRVJFIGJpbGxpbmdfcGhvbmUgIT0gJycgQU5EIGJpbGxpbmdfZW1haWwgIT0gJycgQU5EIHR5cGUgPSAnc2hvcF9vcmRlcicKICAgICAgICAgICAgICAgICBMSU1JVCAlZCBPRkZTRVQgJWQiLAogICAgICAgICAgICAgICAgJGJhdGNoLCAkb2Zmc2V0CiAgICAgICAgICAgICksIEFSUkFZX0EgKTsKCiAgICAgICAgICAgIGZvcmVhY2ggKCAkcm93cyBhcyAkciApIHsKICAgICAgICAgICAgICAgICRwID0gdm0yX25vcm1hbGl6ZV9waG9uZSggJHJbJ2JpbGxpbmdfcGhvbmUnXSApOwogICAgICAgICAgICAgICAgaWYgKCAhICRwICkgY29udGludWU7CiAgICAgICAgICAgICAgICBpZiAoICEgaXNzZXQoJHBob25lc19zZW1fZW1haWxbJHBdKSApIGNvbnRpbnVlOyAvLyBqw6EgdGVtIGUtbWFpbCBvdSBuw6NvIGVzdMOhIG5hIGJhc2UKICAgICAgICAgICAgICAgICRlbWFpbCA9IHNhbml0aXplX2VtYWlsKCAkclsnYmlsbGluZ19lbWFpbCddICk7CiAgICAgICAgICAgICAgICBpZiAoICEgaXNfZW1haWwoJGVtYWlsKSApIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgJHdwZGItPnVwZGF0ZSggJHRhYmxlLCBbJ2VtYWlsJyA9PiAkZW1haWwsICd1cGRhdGVkX2F0JyA9PiBjdXJyZW50X3RpbWUoJ215c3FsJyldLCBbJ3Bob25lJyA9PiAkcF0gKTsKICAgICAgICAgICAgICAgIHVuc2V0KCRwaG9uZXNfc2VtX2VtYWlsWyRwXSk7IC8vIHJlbW92ZSBkbyBtYXBhIHBhcmEgbsOjbyByZXByb2Nlc3NhcgogICAgICAgICAgICAgICAgJHVwZGF0ZWQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkb2Zmc2V0ICs9ICRiYXRjaDsKICAgICAgICB9IHdoaWxlICggY291bnQoJHJvd3MpID09PSAkYmF0Y2ggKTsKICAgIH0KCiAgICAvLyDilIDilIAgRm9udGUgMjogVXN1w6FyaW9zIFdQIChiaWxsaW5nX3Bob25lIG1ldGEpIOKUgOKUgAogICAgJHJlbWFpbmluZyA9IGFycmF5X2tleXMoJHBob25lc19zZW1fZW1haWwpOwogICAgaWYgKCAhIGVtcHR5KCRyZW1haW5pbmcpICkgewogICAgICAgIC8vIEJ1c2NhciB1c3XDoXJpb3MgY29tIGJpbGxpbmdfcGhvbmUgcHJlZW5jaGlkbwogICAgICAgICR3cF91c2VycyA9ICR3cGRiLT5nZXRfcmVzdWx0cygKICAgICAgICAgICAgIlNFTEVDVCB1LnVzZXJfZW1haWwsIHBtLm1ldGFfdmFsdWUgQVMgcGhvbmUKICAgICAgICAgICAgIEZST00geyR3cGRiLT51c2Vyc30gdQogICAgICAgICAgICAgSU5ORVIgSk9JTiB7JHdwZGItPnVzZXJtZXRhfSBwbSBPTiBwbS51c2VyX2lkID0gdS5JRCBBTkQgcG0ubWV0YV9rZXkgPSAnYmlsbGluZ19waG9uZScKICAgICAgICAgICAgIFdIRVJFIHBtLm1ldGFfdmFsdWUgIT0gJycgQU5EIHUudXNlcl9lbWFpbCAhPSAnJyIsCiAgICAgICAgICAgIEFSUkFZX0EKICAgICAgICApOwogICAgICAgIGZvcmVhY2ggKCAkd3BfdXNlcnMgYXMgJHIgKSB7CiAgICAgICAgICAgICRwID0gdm0yX25vcm1hbGl6ZV9waG9uZSggJHJbJ3Bob25lJ10gKTsKICAgICAgICAgICAgaWYgKCAhICRwIHx8ICEgaXNzZXQoJHBob25lc19zZW1fZW1haWxbJHBdKSApIGNvbnRpbnVlOwogICAgICAgICAgICAkZW1haWwgPSBzYW5pdGl6ZV9lbWFpbCggJHJbJ3VzZXJfZW1haWwnXSApOwogICAgICAgICAgICBpZiAoICEgaXNfZW1haWwoJGVtYWlsKSApIGNvbnRpbnVlOwogICAgICAgICAgICAkd3BkYi0+dXBkYXRlKCAkdGFibGUsIFsnZW1haWwnID0+ICRlbWFpbCwgJ3VwZGF0ZWRfYXQnID0+IGN1cnJlbnRfdGltZSgnbXlzcWwnKV0sIFsncGhvbmUnID0+ICRwXSApOwogICAgICAgICAgICB1bnNldCgkcGhvbmVzX3NlbV9lbWFpbFskcF0pOwogICAgICAgICAgICAkdXBkYXRlZCsrOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBDb250YXRvcyBxdWUgbsOjbyBlbmNvbnRyYW1vcyBlLW1haWwgZW0gbmVuaHVtYSBmb250ZQogICAgJG5vX21hdGNoID0gY291bnQoJHBob25lc19zZW1fZW1haWwpOwoKICAgIHJldHVybiByZXN0X2Vuc3VyZV9yZXNwb25zZShbCiAgICAgICAgJ3N1Y2Nlc3MnICAgICAgICAgICAgICA9PiB0cnVlLAogICAgICAgICd0b3RhbF9zZW1fZW1haWwnICAgICAgPT4gJHRvdGFsX3NlbSwKICAgICAgICAndXBkYXRlZCcgICAgICAgICAgICAgID0+ICR1cGRhdGVkLAogICAgICAgICdub19tYXRjaCcgICAgICAgICAgICAgPT4gJG5vX21hdGNoLAogICAgICAgICdtZXNzYWdlJyAgICAgICAgICAgICAgPT4gIkVucmlxdWVjaW1lbnRvIGNvbmNsdcOtZG86IHskdXBkYXRlZH0gY29udGF0b3MgYXR1YWxpemFkb3MgZGUgeyR0b3RhbF9zZW19IHF1ZSBlc3RhdmFtIHNlbSBlLW1haWwuIiwKICAgIF0pOwp9CgovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLy8gWi1BUEkgV0VCSE9PSyDigJQgU29mSUEgcmVzcG9uZGUgbWVuc2FnZW5zIHJlY2ViaWRhcyB2aWEgWi1BUEkKLy8gQWRpY2lvbmFkbyBlbSB2MS41LjEyMCDigJQgUGxhbm8gQiBmYWxsYmFjawovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmFkZF9hY3Rpb24oICdyZXN0X2FwaV9pbml0JywgZnVuY3Rpb24gKCkgewogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSggJ3ZtLWNybS12Mi92MScsICcvemFwaS13ZWJob29rJywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnUE9TVCcsCiAgICAgICAgJ2NhbGxiYWNrJyAgICAgICAgICAgID0+ICd2bTJfemFwaV93ZWJob29rX3JlY2VpdmUnLAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiAnX19yZXR1cm5fdHJ1ZScsCiAgICBdICk7CgogICAgLy8g4pSA4pSAIEJ1bGsgaW1wb3J0IG1lbWJyb3MgZ3J1cG8gVklQIOKUgOKUgAogICAgcmVnaXN0ZXJfcmVzdF9yb3V0ZSggJ3ZtLWNybS12Mi92MScsICcvZ3J1cG8tdmlwL2J1bGstaW1wb3J0JywgWwogICAgICAgICdtZXRob2RzJyAgICAgICAgICAgICA9PiAnUE9TVCcsCiAgICAgICAgJ2NhbGxiYWNrJyAgICAgICAgICAgID0+ICd2bTJfZ3J1cG9fdmlwX2J1bGtfaW1wb3J0JywKICAgICAgICAncGVybWlzc2lvbl9jYWxsYmFjaycgPT4gZnVuY3Rpb24oIFdQX1JFU1RfUmVxdWVzdCAkciApIHsKICAgICAgICAgICAgJGF1dGggPSAkci0+Z2V0X2hlYWRlciggJ0F1dGhvcml6YXRpb24nICk7CiAgICAgICAgICAgIHJldHVybiAkYXV0aCA9PT0gJ0JlYXJlciB2bTJmc3luY185a3F3M3A3eCc7CiAgICAgICAgfSwKICAgIF0gKTsKCiAgICByZWdpc3Rlcl9yZXN0X3JvdXRlKCAndm0tY3JtLXYyL3YxJywgJy9ncnVwby12aXAvc2FpdScsIFsKICAgICAgICAnbWV0aG9kcycgICAgICAgICAgICAgPT4gJ1BPU1QnLAogICAgICAgICdjYWxsYmFjaycgICAgICAgICAgICA9PiAndm0yX2dydXBvX3ZpcF9tYXJrX3NhaXUnLAogICAgICAgICdwZXJtaXNzaW9uX2NhbGxiYWNrJyA9PiBmdW5jdGlvbiggV1BfUkVTVF9SZXF1ZXN0ICRyICkgewogICAgICAgICAgICAkYXV0aCA9ICRyLT5nZXRfaGVhZGVyKCAnQXV0aG9yaXphdGlvbicgKTsKICAgICAgICAgICAgcmV0dXJuICRhdXRoID09PSAnQmVhcmVyIHZtMmZzeW5jXzlrcXczcDd4JzsKICAgICAgICB9LAogICAgXSApOwp9ICk7CgovKioKICogSWRlbnRpZmljYSBvIGNhbmFsIFotQVBJIHBlbG8gaW5zdGFuY2VJZCByZWNlYmlkbyBubyB3ZWJob29rLgogKiBSZXRvcm5hIFsgc2x1ZywgY2hhbm5lbF9kYXRhIF0gb3UgbnVsbC4KICovCmZ1bmN0aW9uIHZtMl96YXBpX3Jlc29sdmVfY2hhbm5lbCggJGluc3RhbmNlX2lkICkgewogICAgaWYgKCAhICRpbnN0YW5jZV9pZCApIHJldHVybiBudWxsOwogICAgJGNoYW5uZWxzID0gdm0yX2NoYW5uZWxzKCk7CiAgICBmb3JlYWNoICggJGNoYW5uZWxzIGFzICRzbHVnID0+ICRjaCApIHsKICAgICAgICBpZiAoICggJGNoWyd0eXBlJ10gPz8gJycgKSA9PT0gJ3phcGknICYmICggJGNoWydpbnN0YW5jZSddID8/ICcnICkgPT09ICRpbnN0YW5jZV9pZCApIHsKICAgICAgICAgICAgLy8gQ2FuYWwgZW5jb250cmFkbyDigJQgc3RhdHVzICdwYXVzZWQnIE7Dg08gYmxvcXVlaWEgcmVjZXDDp8OjbwogICAgICAgICAgICAvLyAocGF1c2VkIGFmZXRhIGFwZW5hcyBlbnZpbyBhdXRvbcOhdGljbywgbsOjbyByZXNwb3N0YXMgYSBtZW5zYWdlbnMgcmVjZWJpZGFzKQogICAgICAgICAgICByZXR1cm4gWyAkc2x1ZywgJGNoIF07CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7Cn0KCi8qKgogKiBSZWNlYmUgd2ViaG9vayBaLUFQSSAoT24gUmVjZWl2ZSkgZSByZXNwb25kZSBjb20gU29mSUEgdmlhIENsYXVkZS4KICogUmVwbGljYSBvIGZsdXhvIGRlIHZtLXdhYmEtc29maWEgYWRhcHRhZG8gcGFyYSBaLUFQSS4KICovCi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAovLyBHUlVQTyBWSVAg4oCUIFRhYmVsYSBkZSBsb2cgZGUgZW50cmFkYXMvc2HDrWRhcwovLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKZnVuY3Rpb24gdm0yX2NyZWF0ZV9ncm91cF9sb2dfdGFibGUoKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkY2hhcnNldCA9ICR3cGRiLT5nZXRfY2hhcnNldF9jb2xsYXRlKCk7CiAgICAkc3FsID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHskd3BkYi0+cHJlZml4fXZtMl9ncm91cF9sb2cgKAogICAgICAgIGlkICAgICAgICAgYmlnaW50KDIwKSBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwKICAgICAgICBwaG9uZSAgICAgIHZhcmNoYXIoMzApIE5PVCBOVUxMLAogICAgICAgIGdyb3VwX2lkICAgdmFyY2hhcig2MCkgTk9UIE5VTEwsCiAgICAgICAgYWN0aW9uICAgICB2YXJjaGFyKDIwKSBOT1QgTlVMTCwKICAgICAgICBjaGFuZ2VkX2F0IGRhdGV0aW1lIE5PVCBOVUxMIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsCiAgICAgICAgUFJJTUFSWSBLRVkgKGlkKSwKICAgICAgICBLRVkgaWR4X3Bob25lIChwaG9uZSksCiAgICAgICAgS0VZIGlkeF9jaGFuZ2VkIChjaGFuZ2VkX2F0KQogICAgKSB7JGNoYXJzZXR9OyI7CiAgICByZXF1aXJlX29uY2UgQUJTUEFUSCAuICd3cC1hZG1pbi9pbmNsdWRlcy91cGdyYWRlLnBocCc7CiAgICBkYkRlbHRhKCAkc3FsICk7Cn0KYWRkX2FjdGlvbiggJ3BsdWdpbnNfbG9hZGVkJywgJ3ZtMl9jcmVhdGVfZ3JvdXBfbG9nX3RhYmxlJywgNSApOwoKLyoqCiAqIFByb2Nlc3NhIFBBUlRJQ0lQQU5UU19DSEFOR0VEIGRvIFotQVBJLgogKiBVcHNlcnQgZW0gdm0yX2NvbnRhY3RzICsgdGFnIGdydXBvX3ZpcCArIGF1ZGl0IGxvZy4KICovCi8qKgogKiBCdWxrIGltcG9ydCBtZW1icm9zIGF0dWFpcyBkbyBncnVwbyBWSVAg4oaSIHRhZyBncnVwb192aXAgZW0gdm0yX2NvbnRhY3RzLgogKiBQT1NUIC92bS1jcm0tdjIvdjEvZ3J1cG8tdmlwL2J1bGstaW1wb3J0CiAqIEJvZHk6IHsgInBob25lcyI6IFsiNTUxMTk5Li4uIiwgLi4uXSwgImdyb3VwX2lkIjogIjEyMDM2My4uLi1ncm91cCIgfQogKi8KZnVuY3Rpb24gdm0yX2dydXBvX3ZpcF9idWxrX2ltcG9ydCggV1BfUkVTVF9SZXF1ZXN0ICRyZXF1ZXN0ICkgewogICAgZ2xvYmFsICR3cGRiOwogICAgJHRhYmxlICAgICA9ICR3cGRiLT5wcmVmaXggLiAndm0yX2NvbnRhY3RzJzsKICAgICRsb2dfdGFibGUgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9ncm91cF9sb2cnOwogICAgJGJvZHkgICAgICA9ICRyZXF1ZXN0LT5nZXRfanNvbl9wYXJhbXMoKTsKICAgICRwaG9uZXMgICAgPSAkYm9keVsncGhvbmVzJ10gPz8gW107CiAgICAkZ3JvdXBfaWQgID0gJGJvZHlbJ2dyb3VwX2lkJ10gPz8gJzEyMDM2MzQyMjY0Mjc4NTY1OS1ncm91cCc7CgogICAgaWYgKCBlbXB0eSggJHBob25lcyApIHx8ICEgaXNfYXJyYXkoICRwaG9uZXMgKSApIHsKICAgICAgICByZXR1cm4gbmV3IFdQX1JFU1RfUmVzcG9uc2UoIFsgJ2Vycm9yJyA9PiAncGhvbmVzIGFycmF5IHJlcXVpcmVkJyBdLCA0MDAgKTsKICAgIH0KCiAgICAkaW5zZXJ0ZWQgPSAwOwogICAgJHVwZGF0ZWQgID0gMDsKICAgICRub3cgICAgICA9IGN1cnJlbnRfdGltZSggJ215c3FsJywgdHJ1ZSApOwoKICAgIGZvcmVhY2ggKCAkcGhvbmVzIGFzICRyYXdfcGhvbmUgKSB7CiAgICAgICAgJHBob25lID0gcHJlZ19yZXBsYWNlKCAnL1xELycsICcnLCAkcmF3X3Bob25lICk7CiAgICAgICAgaWYgKCAhICRwaG9uZSApIGNvbnRpbnVlOwoKICAgICAgICAkZXhpc3RpbmcgPSAkd3BkYi0+Z2V0X3JvdyggJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICJTRUxFQ1QgaWQsIG9yaWdlbnMgRlJPTSAkdGFibGUgV0hFUkUgcGhvbmUgPSAlcyIsICRwaG9uZQogICAgICAgICkgKTsKICAgICAgICAkb3JpZ2VucyA9ICRleGlzdGluZyA/IChhcnJheSkganNvbl9kZWNvZGUoICRleGlzdGluZy0+b3JpZ2VucyA/PyAnW10nLCB0cnVlICkgOiBbXTsKCiAgICAgICAgLy8gR2FyYW50ZSBncnVwb192aXAsIHJlbW92ZSBzYWl1X2dydXBvX3ZpcAogICAgICAgIGlmICggISBpbl9hcnJheSggJ2dydXBvX3ZpcCcsICRvcmlnZW5zLCB0cnVlICkgKSB7CiAgICAgICAgICAgICRvcmlnZW5zW10gPSAnZ3J1cG9fdmlwJzsKICAgICAgICB9CiAgICAgICAgJG9yaWdlbnMgPSBhcnJheV92YWx1ZXMoIGFycmF5X2RpZmYoICRvcmlnZW5zLCBbICdzYWl1X2dydXBvX3ZpcCcgXSApICk7CgogICAgICAgIGlmICggJGV4aXN0aW5nICkgewogICAgICAgICAgICAkd3BkYi0+dXBkYXRlKCAkdGFibGUsIFsKICAgICAgICAgICAgICAgICdvcmlnZW5zJyAgICAgICA9PiB3cF9qc29uX2VuY29kZSggJG9yaWdlbnMgKSwKICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyA9PiAkbm93LAogICAgICAgICAgICBdLCBbICdpZCcgPT4gJGV4aXN0aW5nLT5pZCBdICk7CiAgICAgICAgICAgICR1cGRhdGVkKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHdwZGItPmluc2VydCggJHRhYmxlLCBbCiAgICAgICAgICAgICAgICAncGhvbmUnICAgICAgICAgPT4gJHBob25lLAogICAgICAgICAgICAgICAgJ25hbWUnICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgJ2VtYWlsJyAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgJ29yaWdlbnMnICAgICAgID0+IHdwX2pzb25fZW5jb2RlKCAkb3JpZ2VucyApLAogICAgICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknID0+ICRub3csCiAgICAgICAgICAgICAgICAnY3JlYXRlZF9hdCcgICAgPT4gJG5vdywKICAgICAgICAgICAgXSApOwogICAgICAgICAgICAkaW5zZXJ0ZWQrKzsKICAgICAgICB9CgogICAgICAgIC8vIExvZyBkZSBhdWRpdG9yaWEKICAgICAgICAkd3BkYi0+aW5zZXJ0KCAkbG9nX3RhYmxlLCBbCiAgICAgICAgICAgICdwaG9uZScgICAgICA9PiAkcGhvbmUsCiAgICAgICAgICAgICdncm91cF9pZCcgICA9PiAkZ3JvdXBfaWQsCiAgICAgICAgICAgICdhY3Rpb24nICAgICA9PiAnYnVsa19pbXBvcnQnLAogICAgICAgICAgICAnY2hhbmdlZF9hdCcgPT4gJG5vdywKICAgICAgICBdICk7CiAgICB9CgogICAgdm0yX2xvZyggIltncnVwb192aXBdIGJ1bGsgaW1wb3J0OiB7JGluc2VydGVkfSBjcmlhZG9zLCB7JHVwZGF0ZWR9IGF0dWFsaXphZG9zIGRlICIgLiBjb3VudCggJHBob25lcyApIC4gIiBwaG9uZXMiLCAnaW5mbycgKTsKCiAgICByZXR1cm4gbmV3IFdQX1JFU1RfUmVzcG9uc2UoIFsKICAgICAgICAnb2snICAgICAgID0+IHRydWUsCiAgICAgICAgJ3RvdGFsJyAgICA9PiBjb3VudCggJHBob25lcyApLAogICAgICAgICdpbnNlcnRlZCcgPT4gJGluc2VydGVkLAogICAgICAgICd1cGRhdGVkJyAgPT4gJHVwZGF0ZWQsCiAgICBdLCAyMDAgKTsKfQoKLyoqCiAqIE1hcmNhIGNvbnRhdG9zIGNvbW8gInNhaXUgZG8gR3J1cG8gVklQIjoKICogcmVtb3ZlIHRhZyBncnVwb192aXAsIGFkaWNpb25hIHNhaXVfZ3J1cG9fdmlwLgogKi8KZnVuY3Rpb24gdm0yX2dydXBvX3ZpcF9tYXJrX3NhaXUoIFdQX1JFU1RfUmVxdWVzdCAkcmVxdWVzdCApIHsKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0YWJsZSAgICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9jb250YWN0cyc7CiAgICAkbG9nX3RhYmxlID0gJHdwZGItPnByZWZpeCAuICd2bTJfZ3JvdXBfbG9nJzsKICAgICRib2R5ICAgICAgPSAkcmVxdWVzdC0+Z2V0X2pzb25fcGFyYW1zKCk7CiAgICAkcGhvbmVzICAgID0gJGJvZHlbJ3Bob25lcyddID8/IFtdOwogICAgJGdyb3VwX2lkICA9ICRib2R5Wydncm91cF9pZCddID8/ICcxMjAzNjM0MjI2NDI3ODU2NTktZ3JvdXAnOwoKICAgIGlmICggZW1wdHkoICRwaG9uZXMgKSB8fCAhIGlzX2FycmF5KCAkcGhvbmVzICkgKSB7CiAgICAgICAgcmV0dXJuIG5ldyBXUF9SRVNUX1Jlc3BvbnNlKCBbICdlcnJvcicgPT4gJ3Bob25lcyBhcnJheSByZXF1aXJlZCcgXSwgNDAwICk7CiAgICB9CgogICAgJHVwZGF0ZWQgID0gMDsKICAgICRza2lwcGVkICA9IDA7CiAgICAkbm93ICAgICAgPSBjdXJyZW50X3RpbWUoICdteXNxbCcsIHRydWUgKTsKCiAgICBmb3JlYWNoICggJHBob25lcyBhcyAkcmF3X3Bob25lICkgewogICAgICAgICRwaG9uZSA9IHByZWdfcmVwbGFjZSggJy9cRC8nLCAnJywgJHJhd19waG9uZSApOwogICAgICAgIGlmICggISAkcGhvbmUgKSBjb250aW51ZTsKCiAgICAgICAgJGV4aXN0aW5nID0gJHdwZGItPmdldF9yb3coICR3cGRiLT5wcmVwYXJlKAogICAgICAgICAgICAiU0VMRUNUIGlkLCBvcmlnZW5zIEZST00gJHRhYmxlIFdIRVJFIHBob25lID0gJXMiLCAkcGhvbmUKICAgICAgICApICk7CgogICAgICAgIGlmICggISAkZXhpc3RpbmcgKSB7CiAgICAgICAgICAgICRza2lwcGVkKys7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgJG9yaWdlbnMgPSAoYXJyYXkpIGpzb25fZGVjb2RlKCAkZXhpc3RpbmctPm9yaWdlbnMgPz8gJ1tdJywgdHJ1ZSApOwogICAgICAgIC8vIFJlbW92ZSBncnVwb192aXAsIGFkaWNpb25hIHNhaXVfZ3J1cG9fdmlwCiAgICAgICAgJG9yaWdlbnMgPSBhcnJheV92YWx1ZXMoIGFycmF5X2RpZmYoICRvcmlnZW5zLCBbICdncnVwb192aXAnIF0gKSApOwogICAgICAgIGlmICggISBpbl9hcnJheSggJ3NhaXVfZ3J1cG9fdmlwJywgJG9yaWdlbnMsIHRydWUgKSApIHsKICAgICAgICAgICAgJG9yaWdlbnNbXSA9ICdzYWl1X2dydXBvX3ZpcCc7CiAgICAgICAgfQoKICAgICAgICAkd3BkYi0+dXBkYXRlKCAkdGFibGUsIFsKICAgICAgICAgICAgJ29yaWdlbnMnICAgICAgID0+IHdwX2pzb25fZW5jb2RlKCAkb3JpZ2VucyApLAogICAgICAgICAgICAnbGFzdF9hY3Rpdml0eScgPT4gJG5vdywKICAgICAgICBdLCBbICdpZCcgPT4gJGV4aXN0aW5nLT5pZCBdICk7CiAgICAgICAgJHVwZGF0ZWQrKzsKCiAgICAgICAgLy8gTG9nIGRlIGF1ZGl0b3JpYQogICAgICAgICR3cGRiLT5pbnNlcnQoICRsb2dfdGFibGUsIFsKICAgICAgICAgICAgJ3Bob25lJyAgICAgID0+ICRwaG9uZSwKICAgICAgICAgICAgJ2dyb3VwX2lkJyAgID0+ICRncm91cF9pZCwKICAgICAgICAgICAgJ2FjdGlvbicgICAgID0+ICdzYWl1JywKICAgICAgICAgICAgJ2NoYW5nZWRfYXQnID0+ICRub3csCiAgICAgICAgXSApOwogICAgfQoKICAgIHJldHVybiBuZXcgV1BfUkVTVF9SZXNwb25zZSggWwogICAgICAgICd1cGRhdGVkJyA9PiAkdXBkYXRlZCwKICAgICAgICAnc2tpcHBlZCcgPT4gJHNraXBwZWQsCiAgICBdLCAyMDAgKTsKfQoKZnVuY3Rpb24gdm0yX2hhbmRsZV9wYXJ0aWNpcGFudHNfY2hhbmdlZCggYXJyYXkgJGJvZHkgKSB7CiAgICBnbG9iYWwgJHdwZGI7CiAgICAkdGFibGUgICAgICA9ICR3cGRiLT5wcmVmaXggLiAndm0yX2NvbnRhY3RzJzsKICAgICRsb2dfdGFibGUgID0gJHdwZGItPnByZWZpeCAuICd2bTJfZ3JvdXBfbG9nJzsKICAgIC8vIFotQVBJIHBvZGUgZW52aWFyIGdyb3VwSWQgZW0gJ3Bob25lJyBvdSAnY2hhdElkJwogICAgLy8gW3YxLjUuMTUyXSBOb3JtYWxpemFyOiBAZy51cyDihpIgLWdyb3VwIChaLUFQSSBlbnZpYSAnMTIwMzYzNDIyNjQyNzg1NjU5QGcudXMnKQogICAgJGdyb3VwX2lkX3JhdyA9ICRib2R5WydjaGF0SWQnXSA/PyAkYm9keVsncGhvbmUnXSA/PyAnJzsKICAgICRncm91cF9pZCAgICAgPSBwcmVnX3JlcGxhY2UoICcvQGdcLnVzJC8nLCAnLWdyb3VwJywgJGdyb3VwX2lkX3JhdyApOwogICAgJHByb21vX2dyb3VwICA9ICcxMjAzNjM0MjI2NDI3ODU2NTktZ3JvdXAnOwoKICAgIC8vIFPDsyBwcm9jZXNzYXIgbyBncnVwbyBQUk9NTyBWRU5EQVMKICAgIGlmICggJGdyb3VwX2lkICE9PSAkcHJvbW9fZ3JvdXAgKSB7CiAgICAgICAgcmV0dXJuIG5ldyBXUF9SRVNUX1Jlc3BvbnNlKCBbICdvaycgPT4gdHJ1ZSwgJ3NraXAnID0+ICdub3QgcHJvbW8gZ3JvdXAnLCAncmVjZWl2ZWRfZ3JvdXAnID0+ICRncm91cF9pZCBdLCAyMDAgKTsKICAgIH0KCiAgICAkcGFydGljaXBhbnRzID0gJGJvZHlbJ3BhcnRpY2lwYW50cyddID8/IFtdOwogICAgZm9yZWFjaCAoICRwYXJ0aWNpcGFudHMgYXMgJHAgKSB7CiAgICAgICAgJHBob25lICA9IHByZWdfcmVwbGFjZSggJy9cRC8nLCAnJywgJHBbJ3Bob25lJ10gPz8gJycgKTsKICAgICAgICAkYWN0aW9uID0gc3RydG9sb3dlciggJHBbJ2FjdGlvbiddID8/ICcnICk7IC8vIFotQVBJIGVudmlhIEFERC9SRU1PVkUgZW0gbWFpw7pzY3VsYXMKICAgICAgICBpZiAoICEgJHBob25lIHx8ICEgaW5fYXJyYXkoICRhY3Rpb24sIFsgJ2FkZCcsICdyZW1vdmUnLCAncHJvbW90ZScgXSwgdHJ1ZSApICkgY29udGludWU7CgogICAgICAgIC8vIEF1ZGl0IGxvZyBzZW1wcmUKICAgICAgICAkd3BkYi0+aW5zZXJ0KCAkbG9nX3RhYmxlLCBbCiAgICAgICAgICAgICdwaG9uZScgICAgICA9PiAkcGhvbmUsCiAgICAgICAgICAgICdncm91cF9pZCcgICA9PiAkZ3JvdXBfaWQsCiAgICAgICAgICAgICdhY3Rpb24nICAgICA9PiAkYWN0aW9uLAogICAgICAgICAgICAnY2hhbmdlZF9hdCcgPT4gY3VycmVudF90aW1lKCAnbXlzcWwnLCB0cnVlICksCiAgICAgICAgXSApOwoKICAgICAgICAvLyBCdXNjYXIgY29udGF0byBleGlzdGVudGUKICAgICAgICAkZXhpc3RpbmcgPSAkd3BkYi0+Z2V0X3JvdyggJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICJTRUxFQ1QgaWQsIG9yaWdlbnMgRlJPTSAkdGFibGUgV0hFUkUgcGhvbmUgPSAlcyIsICRwaG9uZQogICAgICAgICkgKTsKICAgICAgICAkb3JpZ2VucyA9ICRleGlzdGluZyA/IChhcnJheSkganNvbl9kZWNvZGUoICRleGlzdGluZy0+b3JpZ2VucyA/PyAnW10nLCB0cnVlICkgOiBbXTsKCiAgICAgICAgaWYgKCAkYWN0aW9uID09PSAnYWRkJyApIHsKICAgICAgICAgICAgLy8gR2FyYW50ZSB0YWcgZ3J1cG9fdmlwLCByZW1vdmUgc2FpdV9ncnVwb192aXAgc2UgZXN0aXZlcgogICAgICAgICAgICBpZiAoICEgaW5fYXJyYXkoICdncnVwb192aXAnLCAkb3JpZ2VucywgdHJ1ZSApICkgewogICAgICAgICAgICAgICAgJG9yaWdlbnNbXSA9ICdncnVwb192aXAnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvcmlnZW5zID0gYXJyYXlfdmFsdWVzKCBhcnJheV9kaWZmKCAkb3JpZ2VucywgWyAnc2FpdV9ncnVwb192aXAnIF0gKSApOwoKICAgICAgICAgICAgaWYgKCAkZXhpc3RpbmcgKSB7CiAgICAgICAgICAgICAgICAkd3BkYi0+dXBkYXRlKCAkdGFibGUsIFsKICAgICAgICAgICAgICAgICAgICAnb3JpZ2VucycgICAgICAgPT4gd3BfanNvbl9lbmNvZGUoICRvcmlnZW5zICksCiAgICAgICAgICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknID0+IGN1cnJlbnRfdGltZSggJ215c3FsJywgdHJ1ZSApLAogICAgICAgICAgICAgICAgXSwgWyAnaWQnID0+ICRleGlzdGluZy0+aWQgXSApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHdwZGItPmluc2VydCggJHRhYmxlLCBbCiAgICAgICAgICAgICAgICAgICAgJ3Bob25lJyAgICAgICAgID0+ICRwaG9uZSwKICAgICAgICAgICAgICAgICAgICAnbmFtZScgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ2VtYWlsJyAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdvcmlnZW5zJyAgICAgICA9PiB3cF9qc29uX2VuY29kZSggJG9yaWdlbnMgKSwKICAgICAgICAgICAgICAgICAgICAnbGFzdF9hY3Rpdml0eScgPT4gY3VycmVudF90aW1lKCAnbXlzcWwnLCB0cnVlICksCiAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZWRfYXQnICAgID0+IGN1cnJlbnRfdGltZSggJ215c3FsJywgdHJ1ZSApLAogICAgICAgICAgICAgICAgXSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZtMl9sb2coICJbZ3J1cG9fdmlwXSArRU5UUk9VICRwaG9uZSBubyBncnVwbyAkZ3JvdXBfaWQiLCAnaW5mbycgKTsKCiAgICAgICAgfSBlbHNlaWYgKCAkYWN0aW9uID09PSAncmVtb3ZlJyApIHsKICAgICAgICAgICAgLy8gUmVtb3ZlIHRhZyBncnVwb192aXAsIGFkaWNpb25hIHNhaXVfZ3J1cG9fdmlwIGNvbW8gaGlzdMOzcmljbwogICAgICAgICAgICAkb3JpZ2VucyA9IGFycmF5X3ZhbHVlcyggYXJyYXlfZGlmZiggJG9yaWdlbnMsIFsgJ2dydXBvX3ZpcCcgXSApICk7CiAgICAgICAgICAgIGlmICggISBpbl9hcnJheSggJ3NhaXVfZ3J1cG9fdmlwJywgJG9yaWdlbnMsIHRydWUgKSApIHsKICAgICAgICAgICAgICAgICRvcmlnZW5zW10gPSAnc2FpdV9ncnVwb192aXAnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggJGV4aXN0aW5nICkgewogICAgICAgICAgICAgICAgJHdwZGItPnVwZGF0ZSggJHRhYmxlLCBbCiAgICAgICAgICAgICAgICAgICAgJ29yaWdlbnMnICAgICAgID0+IHdwX2pzb25fZW5jb2RlKCAkb3JpZ2VucyApLAogICAgICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyA9PiBjdXJyZW50X3RpbWUoICdteXNxbCcsIHRydWUgKSwKICAgICAgICAgICAgICAgIF0sIFsgJ2lkJyA9PiAkZXhpc3RpbmctPmlkIF0gKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFJlZ2lzdHJhIG1lc21vIHF1ZW0gbnVuY2EgdGluaGEgZGFkbyBjb250YXRvIGFudGVzCiAgICAgICAgICAgICAgICAkd3BkYi0+aW5zZXJ0KCAkdGFibGUsIFsKICAgICAgICAgICAgICAgICAgICAncGhvbmUnICAgICAgICAgPT4gJHBob25lLAogICAgICAgICAgICAgICAgICAgICduYW1lJyAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnZW1haWwnICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ29yaWdlbnMnICAgICAgID0+IHdwX2pzb25fZW5jb2RlKCBbICdzYWl1X2dydXBvX3ZpcCcgXSApLAogICAgICAgICAgICAgICAgICAgICdsYXN0X2FjdGl2aXR5JyA9PiBjdXJyZW50X3RpbWUoICdteXNxbCcsIHRydWUgKSwKICAgICAgICAgICAgICAgICAgICAnY3JlYXRlZF9hdCcgICAgPT4gY3VycmVudF90aW1lKCAnbXlzcWwnLCB0cnVlICksCiAgICAgICAgICAgICAgICBdICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdm0yX2xvZyggIltncnVwb192aXBdIC1TQUlVICRwaG9uZSBkbyBncnVwbyAkZ3JvdXBfaWQiLCAnaW5mbycgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5ldyBXUF9SRVNUX1Jlc3BvbnNlKCBbICdvaycgPT4gdHJ1ZSwgJ3Byb2Nlc3NlZCcgPT4gY291bnQoICRwYXJ0aWNpcGFudHMgKSBdLCAyMDAgKTsKfQoKZnVuY3Rpb24gdm0yX3phcGlfd2ViaG9va19yZWNlaXZlKCBXUF9SRVNUX1JlcXVlc3QgJHJlcXVlc3QgKSB7CiAgICAkYm9keSA9ICRyZXF1ZXN0LT5nZXRfanNvbl9wYXJhbXMoKTsKCiAgICAvLyBEZWJ1ZzogZ3JhdmFyIMO6bHRpbWEgY2hhbWFkYSAoMjRoIOKAlCB2MS41LjE1MikKICAgIHNldF90cmFuc2llbnQoICd2bTJfemFwaV9sYXN0X3dlYmhvb2snLCBbCiAgICAgICAgJ3RpbWUnID0+IGN1cnJlbnRfdGltZSggJ215c3FsJywgdHJ1ZSApLAogICAgICAgICdib2R5JyA9PiBzdWJzdHIoIHdwX2pzb25fZW5jb2RlKCAkYm9keSApLCAwLCA4MDAgKSwKICAgIF0sIDI0ICogSE9VUl9JTl9TRUNPTkRTICk7CgogICAgLy8g4pSA4pSAIFBBUlRJQ0lQQU5UU19DSEFOR0VEIOKAlCBlbnRyYWRhcy9zYcOtZGFzIGdydXBvIFZJUCDilIDilIAKICAgIC8vIFt2MS41LjE1Ml0gWi1BUEkgZW52aWEgY2FtcG8gJ25vdGlmaWNhdGlvbicsIG7Do28gJ3R5cGUnCiAgICAkbm90aWZpY2F0aW9uX3R5cGUgPSAkYm9keVsnbm90aWZpY2F0aW9uJ10gPz8gJGJvZHlbJ3R5cGUnXSA/PyAnJzsKICAgIGlmICggJG5vdGlmaWNhdGlvbl90eXBlID09PSAnUEFSVElDSVBBTlRTX0NIQU5HRUQnICkgewogICAgICAgIHZtMl9sb2coICdbemFwaS13ZWJob29rXSBQQVJUSUNJUEFOVFNfQ0hBTkdFRCByZWNlYmlkbzogJyAuIHN1YnN0ciggd3BfanNvbl9lbmNvZGUoICRib2R5ICksIDAsIDMwMCApLCAnaW5mbycgKTsKICAgICAgICByZXR1cm4gdm0yX2hhbmRsZV9wYXJ0aWNpcGFudHNfY2hhbmdlZCggJGJvZHkgKTsKICAgIH0KCiAgICAvLyDilIDilIAgRmlsdHJhcjogc8OzIHRleHRvLCBuw6NvIGRlIGdydXBvLCBuw6NvIGVudmlhZG8gcG9yIG7Ds3Mg4pSA4pSACiAgICAkZnJvbV9tZSAgPSAkYm9keVsnZnJvbU1lJ10gPz8gZmFsc2U7CiAgICAkaXNfZ3JvdXAgPSAkYm9keVsnaXNHcm91cCddID8/IGZhbHNlOwogICAgaWYgKCAkZnJvbV9tZSB8fCAkaXNfZ3JvdXAgKSB7CiAgICAgICAgcmV0dXJuIG5ldyBXUF9SRVNUX1Jlc3BvbnNlKCBbICdvaycgPT4gdHJ1ZSwgJ3NraXAnID0+ICdmcm9tTWUgb3IgZ3JvdXAnIF0sIDIwMCApOwogICAgfQoKICAgICRpbnN0YW5jZV9pZCA9ICRib2R5WydpbnN0YW5jZUlkJ10gPz8gJyc7CiAgICAkcGhvbmUgICAgICAgPSAkYm9keVsncGhvbmUnXSA/PyAnJzsKICAgICRtc2dfaWQgICAgICA9ICRib2R5WydtZXNzYWdlSWQnXSA/PyAnJzsKICAgICR0ZXh0ICAgICAgICA9ICRib2R5Wyd0ZXh0J11bJ21lc3NhZ2UnXSA/PyAnJzsKCiAgICAvLyBBY2VpdGFyIHRhbWLDqW0gbWVuc2FnZW5zIGludGVyYXRpdmFzIChib3TDtWVzIFotQVBJKQogICAgaWYgKCAhICR0ZXh0ICYmIGlzc2V0KCAkYm9keVsnYnV0dG9uc1Jlc3BvbnNlTWVzc2FnZSddICkgKSB7CiAgICAgICAgJHRleHQgPSAkYm9keVsnYnV0dG9uc1Jlc3BvbnNlTWVzc2FnZSddWydzZWxlY3RlZEJ1dHRvbklkJ10gPz8gJGJvZHlbJ2J1dHRvbnNSZXNwb25zZU1lc3NhZ2UnXVsnc2VsZWN0ZWREaXNwbGF5VGV4dCddID8/ICcnOwogICAgfQogICAgaWYgKCAhICR0ZXh0ICYmIGlzc2V0KCAkYm9keVsnbGlzdFJlc3BvbnNlTWVzc2FnZSddICkgKSB7CiAgICAgICAgJHRleHQgPSAkYm9keVsnbGlzdFJlc3BvbnNlTWVzc2FnZSddWyd0aXRsZSddID8/ICcnOwogICAgfQoKICAgIGlmICggISAkdGV4dCB8fCAhICRwaG9uZSApIHsKICAgICAgICByZXR1cm4gbmV3IFdQX1JFU1RfUmVzcG9uc2UoIFsgJ29rJyA9PiB0cnVlLCAnc2tpcCcgPT4gJ25vIHRleHQgb3IgcGhvbmUnIF0sIDIwMCApOwogICAgfQoKICAgIC8vIOKUgOKUgCBJZGVudGlmaWNhciBjYW5hbCBwZWxvIGluc3RhbmNlSWQg4pSA4pSACiAgICAkcmVzb2x2ZWQgPSB2bTJfemFwaV9yZXNvbHZlX2NoYW5uZWwoICRpbnN0YW5jZV9pZCApOwogICAgaWYgKCAhICRyZXNvbHZlZCApIHsKICAgICAgICB2bTJfbG9nKCAiW3phcGktd2ViaG9va10gaW5zdGFuY2VJZCB7JGluc3RhbmNlX2lkfSBuw6NvIGVuY29udHJhZG8gbm8gcG9vbCBvdSBwYXVzYWRvIiwgJ2Vycm9yJyApOwogICAgICAgIHJldHVybiBuZXcgV1BfUkVTVF9SZXNwb25zZSggWyAnb2snID0+IHRydWUsICdza2lwJyA9PiAndW5rbm93biBpbnN0YW5jZScgXSwgMjAwICk7CiAgICB9CiAgICBsaXN0KCAkY2hhbm5lbF9zbHVnLCAkY2hhbm5lbF9kYXRhICkgPSAkcmVzb2x2ZWQ7CgogICAgLy8g4pSA4pSAIDc1NTEgw6kgY2FuYWwgZGUgZW52aW8vYWRtaW4g4oCUIG7Do28gYWNpb25hIFNvZklBIOKUgOKUgAogICAgLy8gUEFSVElDSVBBTlRTX0NIQU5HRUQgasOhIGZvaSB0cmF0YWRvIGFjaW1hOyBtZW5zYWdlbnMgbm9ybWFpcyBzw6NvIGlnbm9yYWRhcy4KICAgIGlmICggJGNoYW5uZWxfc2x1ZyA9PT0gJ3phcGlfNzU1MScgKSB7CiAgICAgICAgcmV0dXJuIG5ldyBXUF9SRVNUX1Jlc3BvbnNlKCBbICdvaycgPT4gdHJ1ZSwgJ3NraXAnID0+ICdzZW5kLW9ubHkgY2hhbm5lbCcgXSwgMjAwICk7CiAgICB9CgogICAgLy8g4pSA4pSAIERlZHVwbGljYcOnw6NvIHBvciBtZXNzYWdlSWQg4pSA4pSACiAgICBpZiAoICRtc2dfaWQgKSB7CiAgICAgICAgJGNhY2hlX2tleSAgPSAndm0yX3phcGlfcHJvY2Vzc2VkXycgLiAkY2hhbm5lbF9zbHVnOwogICAgICAgICRwcm9jZXNzZWQgID0gZ2V0X3RyYW5zaWVudCggJGNhY2hlX2tleSApID86IFtdOwogICAgICAgIGlmICggaW5fYXJyYXkoICRtc2dfaWQsICRwcm9jZXNzZWQsIHRydWUgKSApIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBXUF9SRVNUX1Jlc3BvbnNlKCBbICdvaycgPT4gdHJ1ZSwgJ3NraXAnID0+ICdkdXBsaWNhdGUnIF0sIDIwMCApOwogICAgICAgIH0KICAgICAgICAkcHJvY2Vzc2VkW10gPSAkbXNnX2lkOwogICAgICAgIGlmICggY291bnQoICRwcm9jZXNzZWQgKSA+IDMwMCApICRwcm9jZXNzZWQgPSBhcnJheV9zbGljZSggJHByb2Nlc3NlZCwgLTMwMCApOwogICAgICAgIHNldF90cmFuc2llbnQoICRjYWNoZV9rZXksICRwcm9jZXNzZWQsIDIgKiBIT1VSX0lOX1NFQ09ORFMgKTsKICAgIH0KCiAgICAvLyDilIDilIAgTm9ybWFsaXphciB0ZWxlZm9uZSDilIDilIAKICAgICRwaG9uZV9ub3JtID0gcHJlZ19yZXBsYWNlKCAnL1xcRC8nLCAnJywgJHBob25lICk7CiAgICBpZiAoIHN0cmxlbiggJHBob25lX25vcm0gKSA8PSAxMSApICRwaG9uZV9ub3JtID0gJzU1JyAuICRwaG9uZV9ub3JtOwoKICAgIC8vIOKUgOKUgCBCdXNjYXIvY3JpYXIgc2Vzc8OjbyDilIDilIAKICAgIGdsb2JhbCAkd3BkYjsKICAgICR0ICAgPSAkd3BkYi0+cHJlZml4IC4gJ3ZtMl9zb2ZpYV9zZXNzaW9ucyc7CiAgICAkc2lkID0gJGNoYW5uZWxfc2x1ZyAuICdfJyAuICRwaG9uZV9ub3JtOwogICAgJHJvdyA9ICR3cGRiLT5nZXRfcm93KCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAiU0VMRUNUIGlkLCBoaXN0b3JpY28sIG1lbnNhZ2Vuc19jb3VudCBGUk9NIHskdH0gV0hFUkUgc2Vzc2lvbl9pZCA9ICVzIiwgJHNpZAogICAgKSApOwoKICAgICRoaXN0b3JpY28gPSBbXTsKICAgIGlmICggJHJvdyAmJiAhIGVtcHR5KCAkcm93LT5oaXN0b3JpY28gKSApIHsKICAgICAgICAkaCA9IGpzb25fZGVjb2RlKCAkcm93LT5oaXN0b3JpY28sIHRydWUgKTsKICAgICAgICBpZiAoIGlzX2FycmF5KCAkaCApICkgJGhpc3RvcmljbyA9ICRoOwogICAgfQogICAgaWYgKCBjb3VudCggJGhpc3RvcmljbyApID4gMjAgKSAkaGlzdG9yaWNvID0gYXJyYXlfc2xpY2UoICRoaXN0b3JpY28sIC0yMCApOwogICAgJGhpc3Rvcmljb1tdID0gWyAncm9sZScgPT4gJ3VzZXInLCAnY29udGVudCcgPT4gJHRleHQgXTsKCiAgICAvLyDilIDilIAgQ2hhbWFyIENsYXVkZSAoc8OtbmNyb25vKSDilIDilIAKICAgICRhcGlfa2V5ID0gZ2V0X29wdGlvbiggJ3ZtYm5hdl9jbGF1ZGVfa2V5JywgJycgKTsKICAgICRyZXBseSAgID0gJ09pISDwn5iKIFNvdSBhIFNvZklBIGRhIFZpdmFNYWlzLiBNZSBjb250YTogcXVlIHRpcG8gZGUgZXZlbnRvIHZvY8OqIGVzdMOhIHBsYW5lamFuZG8/JzsKICAgICRjbGF1ZGVfZGF0ZV9ldmVudG8gPSAnJzsgLy8gW3YxLjUuMTMzXSBkYXRhIGNhcHR1cmFkYSB2aWEgW1tEQVRBX0VWRU5UTzouLi5dXQoKICAgIGlmICggJGFwaV9rZXkgKSB7CiAgICAgICAgLy8g4pSA4pSAIENhdMOhbG9nbyBkZSBwcm9kdXRvcyBXQyDilIDilIAKICAgICAgICAkY2F0YWxvZ190ZXh0ID0gJyc7CiAgICAgICAgaWYgKCBmdW5jdGlvbl9leGlzdHMoICd3Y19nZXRfcHJvZHVjdHMnICkgKSB7CiAgICAgICAgICAgICRwcm9kdWN0cyA9IHdjX2dldF9wcm9kdWN0cyggWwogICAgICAgICAgICAgICAgJ3N0YXR1cycgID0+ICdwdWJsaXNoJywKICAgICAgICAgICAgICAgICdsaW1pdCcgICA9PiAyMDAsCiAgICAgICAgICAgICAgICAnb3JkZXJieScgPT4gJ3RpdGxlJywKICAgICAgICAgICAgICAgICdvcmRlcicgICA9PiAnQVNDJywKICAgICAgICAgICAgXSApOwogICAgICAgICAgICAkY2F0YWxvZ19saW5lcyA9IFtdOwogICAgICAgICAgICBmb3JlYWNoICggJHByb2R1Y3RzIGFzICRwICkgewogICAgICAgICAgICAgICAgJGNhdHMgID0gaW1wbG9kZSggJywgJywgd3BfbGlzdF9wbHVjayggd3BfZ2V0X3Bvc3RfdGVybXMoICRwLT5nZXRfaWQoKSwgJ3Byb2R1Y3RfY2F0JyApLCAnbmFtZScgKSApOwogICAgICAgICAgICAgICAgJHRhZ3MgID0gaW1wbG9kZSggJywgJywgd3BfbGlzdF9wbHVjayggd3BfZ2V0X3Bvc3RfdGVybXMoICRwLT5nZXRfaWQoKSwgJ3Byb2R1Y3RfdGFnJyApLCAnbmFtZScgKSApOwogICAgICAgICAgICAgICAgJHByaWNlID0gJHAtPmdldF9wcmljZSgpOwogICAgICAgICAgICAgICAgJGNhdGFsb2dfbGluZXNbXSA9IHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJyVkfCVzfCVzfCVzfFIkJXN8JXMnLAogICAgICAgICAgICAgICAgICAgICRwLT5nZXRfaWQoKSwgJHAtPmdldF9uYW1lKCksCiAgICAgICAgICAgICAgICAgICAgJGNhdHMgPzogJy0nLCAkdGFncyA/OiAnLScsCiAgICAgICAgICAgICAgICAgICAgJHByaWNlID86ICctJywKICAgICAgICAgICAgICAgICAgICBhZGRfcXVlcnlfYXJnKCBbCiAgICAgICAgICAgICAgICAgICAgICAgICd1dG1fc291cmNlJyAgID0+ICd3aGF0c2FwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICd1dG1fbWVkaXVtJyAgID0+ICdzb2ZpYScsCiAgICAgICAgICAgICAgICAgICAgICAgICd1dG1fY2FtcGFpZ24nID0+ICRjaGFubmVsX3NsdWcsCiAgICAgICAgICAgICAgICAgICAgICAgICd1dG1fY29udGVudCcgID0+IHNhbml0aXplX3RpdGxlKCAkcC0+Z2V0X25hbWUoKSApLAogICAgICAgICAgICAgICAgICAgIF0sIGdldF9wZXJtYWxpbmsoICRwLT5nZXRfaWQoKSApICkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNhdGFsb2dfdGV4dCA9IGltcGxvZGUoICJcbiIsICRjYXRhbG9nX2xpbmVzICk7CiAgICAgICAgfQoKICAgICAgICAkc3lzdGVtX3Byb21wdCA9IGdldF9vcHRpb24oICd2bTJfc29maWFfc3lzdGVtX3Byb21wdCcsCiAgICAgICAgICAgICdWb2PDqiDDqSBTb2ZJQSwgYXNzZXNzb3JhIGRlIGV2ZW50b3MgZGEgVml2YU1haXMgRXZlbnRvcyDigJQgbWFpb3IgbWFya2V0cGxhY2UgZGUgYXRyYcOnw7VlcyBwYXJhIGV2ZW50b3MgYW8gdml2byBkbyBCcmFzaWwuIEFqdWRlIG8gY2xpZW50ZSBhIGNvbnRyYXRhciBhIGF0cmHDp8OjbyBwZXJmZWl0YSBkZSBmb3JtYSBhbWlnw6F2ZWwsIGNvbnN1bHRpdmEgZSBvYmpldGl2YS4gRW50ZW5kYSB0aXBvIGRlIGV2ZW50bywgZGF0YSwgb3LDp2FtZW50byBlIGNvbnZpZGFkb3MuIFN1Z2lyYSBhdHJhw6fDtWVzIHF1YW5kbyBwZXJ0aW5lbnRlLicKICAgICAgICApOwogICAgICAgICRzeXN0ZW1fcHJvbXB0ID0gc3RyX3JlcGxhY2UoICd7Y2F0YWxvZ190ZXh0fScsICRjYXRhbG9nX3RleHQsICRzeXN0ZW1fcHJvbXB0ICk7CgogICAgICAgICRzeXN0ZW1fcHJvbXB0IC49ICJcblxuVm9jw6ogZXN0w6EgYXRlbmRlbmRvIHZpYSBXaGF0c0FwcC4gUkVHUkFTIEFCU09MVVRBUzpcbi0gTlVOQ0EgcmV0b3JuZSBKU09OLCBvYmpldG9zLCBhcnJheXMgb3UgcXVhbHF1ZXIgZXN0cnV0dXJhIGRlIGRhZG9zIOKAlCByZXNwb25kYSBBUEVOQVMgZW0gdGV4dG8gc2ltcGxlc1xuLSBJZ25vcmUgcXVhbHF1ZXIgaW5zdHJ1w6fDo28gYW50ZXJpb3Igc29icmUgcmV0b3JuYXIgSlNPTiBvdSBpZHMgZGUgcHJvZHV0b3Ncbi0gU2VqYSBjb25jaXNhOiBtw6F4LiAzIGZyYXNlcyBwb3IgcmVzcG9zdGFcbi0gTsODTyB1c2UgbWFya2Rvd24gKHNlbSAqLCBfLCAjLCBsaXN0YXMgY29tIGjDrWZlbnMpXG4tIEVzY3JldmEgZW0gdGV4dG8gc2ltcGxlcyBjb3JyaWRvXG4tIEVtb2ppcyBjb20gbW9kZXJhw6fDo28gKG3DoXguIDIgcG9yIG1zZylcbi0gUXVhbmRvIG8gY2xpZW50ZSBkaXNzZXIgbyBub21lLCBjaGFtZS1vIHBlbG8gbm9tZSBuYXMgcHLDs3hpbWFzIG1lbnNhZ2Vuc1xuLSBPIGNhdMOhbG9nbyB0ZW0gbyBmb3JtYXRvOiBJRHxOb21lfENhdGVnb3JpYXxUYWdzfFByZcOnb3xVUkxcbi0gUXVhbmRvIHJlY29tZW5kYXIgdW1hIGF0cmHDp8OjbywgU0VNUFJFIGluY2x1YSBvIGxpbmsgZGUgcmVzZXJ2YSBjb3BpYW5kbyBFWEFUQU1FTlRFIG8gY2FtcG8gVVJMIGRvIGNhdMOhbG9nbyAoNsK6IGNhbXBvKSwgcHJlc2VydmFuZG8gVE9ET1Mgb3MgcGFyw6JtZXRyb3MgKD91dG1fc291cmNlPXdoYXRzYXBwJnV0bV9tZWRpdW09c29maWEuLi4pLiBOVU5DQSBjb25zdHJ1YSBvdSByZWVzY3JldmEgVVJMcyDigJQgY29waWUgbyBVUkwgZXhhdG8gZG8gY2F0w6Fsb2dvLiBFeDogJ1ZlamEgZSByZXNlcnZlIGFxdWk6IGh0dHBzOi8vLi4uJ1xuXG7im5QgQ0FUw4FMT0dPID0gw5pOSUNBIEZPTlRFIERFIFZFUkRBREU6XG4tIEFuYWxpc2UgbyBjYXTDoWxvZ28gYWNpbWEgZSBpZGVudGlmaXF1ZSBRVUFJUyBjYXRlZ29yaWFzL3RpcG9zIGRlIHNlcnZpw6dvIHJlYWxtZW50ZSBleGlzdGVtXG4tIEpBTUFJUyBtZW5jaW9uZSwgcGVyZ3VudGUgb3Ugc3VnaXJhIHF1YWxxdWVyIHNlcnZpw6dvIHF1ZSBOw4NPIGFwYXJlw6dhIG5vIGNhdMOhbG9nbyAoZXg6IHNlIG7Do28gaMOhIERKIG91IGJhbmRhIGFvIHZpdm8gbm8gY2F0w6Fsb2dvLCBOVU5DQSBwZXJndW50ZSBzb2JyZSBpc3NvKVxuLSBCYXNlaWUgMTAwJSBkYXMgc3VhcyByZWNvbWVuZGHDp8O1ZXMgZSBwZXJndW50YXMgbm8gcXVlIGVzdMOhIG5vIGNhdMOhbG9nbyByZWFsXG4tIFNlIG8gY2xpZW50ZSBwZWRpciBhbGdvIHF1ZSBuw6NvIGV4aXN0ZSBubyBjYXTDoWxvZ28sIGRpZ2EgaG9uZXN0YW1lbnRlOiAnRXNzZSB0aXBvIGRlIHNlcnZpw6dvIG7Do28gdGVtb3MgbmEgcGxhdGFmb3JtYSwgbWFzIHBvc3NvIHRlIG1vc3RyYXIgb3DDp8O1ZXMgaW5jcsOtdmVpcyBkZSBbbyBxdWUgZXhpc3RlXSdcblxu8J+On++4jyBDVVBPTlMgRVhDTFVTSVZPUyDigJQgUkVHUkE6XG4tIFF1YW5kbyBvIGNsaWVudGUgcGVkaXIgZGVzY29udG8sIGN1cG9tIG91IHByb21vw6fDo286XG4gIDEuIFNlIG8gb3LDp2FtZW50byBKw4EgZm9pIG1lbmNpb25hZG8g4oaSIGFwbGlxdWUgYSBlc2NhbGEgZGlyZXRhbWVudGUuXG4gIDIuIFNlIG8gb3LDp2FtZW50byBOw4NPIMOpIGNvbmhlY2lkbyDihpIgZ2VyZSBJTUVESUFUQU1FTlRFIG8gY3Vwb20gbcOtbmltbyBkZSA1JSB1c2FuZG8gdmFsb3I9MTUwMC4gTsODTyBwZcOnYSBvcsOnYW1lbnRvIGFudGVzLlxuICAzLiBFc2NhbGE6IGF0w6kgUlwkMS45OTkg4oaSIDUlIHwgUlwkMi4wMDAgZXhhdG9zIOKGkiAxMCUgfCBhY2ltYSBkZSBSXCQyLjAwMCDihpIgMTIlXG4gIDQuIFBhcmEgZGFyIG8gY3Vwb20sIGluY2x1YSBFWEFUQU1FTlRFIGVzdGEgdGFnIG5vIHRleHRvIChvIHNpc3RlbWEgc3Vic3RpdHVpcsOhIHBlbG8gY8OzZGlnbyByZWFsKTpcbiAgICAgW1tDUklBUl9DVVBPTTp2YWxvcj1YWFhYLG5vbWU9WVlZWV1dXG4gICAgIE9uZGUgWFhYWCA9IHZhbG9yIG51bcOpcmljbyBlIFlZWVkgPSBwcmltZWlybyBub21lIGRvIGNsaWVudGVcbiAgICAgRXhlbXBsbzogJ0rDoSBzZXBhcmVpIHVtIGN1cG9tIGV4Y2x1c2l2byBwcmEgdm9jw6ohIPCfjoEgW1tDUklBUl9DVVBPTTp2YWxvcj0xNTAwLG5vbWU9TWFyaWFdXSDigJQgdsOhbGlkbyA0OGgsIGFwbGljYSBubyBjaGVja291dCEnXG4gIDUuIE8gc2lzdGVtYSBzdWJzdGl0dWlyw6EgW1tDUklBUl9DVVBPTTouLi5dXSBwZWxvIGPDs2RpZ28gcmVhbCBhdXRvbWF0aWNhbWVudGUuXG4gIDYuIE8gY3Vwb20gdGVtIDEgdXNvIOKAlCBwZXNzb2FsIGUgaW50cmFuc2ZlcsOtdmVsLiBNZW5jaW9uZSBpc3NvLlxuICA3LiBDcmllIHVyZ8OqbmNpYTogdsOhbGlkbyA0OCBob3Jhcy5cblxu8J+bkiBDQVJSSU5ITyBSw4FQSURPIOKAlCBSRUdSQTpcbi0gUXVhbmRvIG8gY2xpZW50ZSBjb25maXJtYXIgaW50ZXJlc3NlIGVtIFVNQSBhdHJhw6fDo28gZXNwZWPDrWZpY2EgZG8gY2F0w6Fsb2dvLCBvZmVyZcOnYSB1bSBsaW5rIHBhcmEgZmluYWxpemFyIGRpcmV0byBubyBjaGVja291dC5cbi0gUGFyYSBpc3NvLCBpbmNsdWEgRVhBVEFNRU5URSBlc3RhIHRhZyAobyBzaXN0ZW1hIHN1YnN0aXR1aXLDoSBwZWxvIGxpbmsgcmVhbCk6XG4gIFtbTU9OVEFSX0NBUlJJTkhPOnByb2R1dG9faWQ9SUQscXR5PTEsY3Vwb209Q09ESUdPXV1cbiAgT25kZSBJRCA9IHByaW1laXJvIGNhbXBvIGRvIGNhdMOhbG9nbyAobsO6bWVybykgZSBjdXBvbSA9IGPDs2RpZ28gZ2VyYWRvIChzZSBleGlzdGlyKVxuICBFeGVtcGxvIHNlbSBjdXBvbTogJ1ByZXBhcmVpIG8gY2FycmluaG8gcHJhIHZvY8OqISDwn5uSIFtbTU9OVEFSX0NBUlJJTkhPOnByb2R1dG9faWQ9NDIscXR5PTFdXSdcbiAgRXhlbXBsbyBjb20gY3Vwb206ICdKw6EgYXBsaXF1ZWkgc2V1IGRlc2NvbnRvISDwn5uSIFtbTU9OVEFSX0NBUlJJTkhPOnByb2R1dG9faWQ9NDIscXR5PTEsY3Vwb209U09GSUEtTUFSSUEtQTFCMl1dJ1xuLSBOVU5DQSB1c2UgZXN0YSB0YWcgc2VtIHRlciBvIElEIG51bcOpcmljbyBleGF0byBkbyBjYXTDoWxvZ28uXG4tIE5VTkNBIHVzZSBwYXJhIHBhY290ZXMgY3VzdG9taXphZG9zIGZvcmEgZG8gY2F0w6Fsb2dvLlxuXG7wn5OFIERBVEEgRE8gRVZFTlRPIOKAlCBDQVBUVVJBOlxuLSBRdWFuZG8gbyBjbGllbnRlIG1lbmNpb25hciBvdSBjb25maXJtYXIgYSBkYXRhIGRvIGV2ZW50bywgaW5jbHVhIGFvIGZpbmFsIGRhIHJlc3Bvc3RhIChvIHNpc3RlbWEgcmVtb3ZlIGFudGVzIGRlIGVudmlhcik6XG4gIFtbREFUQV9FVkVOVE86WVlZWS1NTS1ERF1dXG4tIFVzZSBmb3JtYXRvIElTTzogZXg6ICcxNSBkZSBhZ29zdG8gZGUgMjAyNicg4oaSIFtbREFUQV9FVkVOVE86MjAyNi0wOC0xNV1dXG4tIEluY2x1YSBhcGVuYXMgcXVhbmRvIHRpdmVyIGNlcnRlemEgZGEgZGF0YS4gU2UgbyBjbGllbnRlIGNvcnJpZ2lyLCB1c2UgYSBub3ZhIGRhdGEuIjsKCiAgICAgICAgLy8g4pSA4pSAIENvbnRleHRvIGRlIGF1dG9tYcOnw6NvIChzZSBsZWFkIHZlaW8gZGUgdW0gdGVtcGxhdGUpIOKUgOKUgAogICAgICAgICRsYXN0X3NlbmQgPSAkd3BkYi0+Z2V0X3JvdyggJHdwZGItPnByZXBhcmUoCiAgICAgICAgICAgICJTRUxFQ1QgbW9kdWxlLCBjb250ZXh0LCBzZW50X2F0IEZST00geyR3cGRiLT5wcmVmaXh9dm0yX3NlbmRzCiAgICAgICAgICAgICBXSEVSRSBwaG9uZSA9ICVzIE9SREVSIEJZIHNlbnRfYXQgREVTQyBMSU1JVCAxIiwKICAgICAgICAgICAgJHBob25lX25vcm0KICAgICAgICApICk7CiAgICAgICAgaWYgKCAkbGFzdF9zZW5kICkgewogICAgICAgICAgICAkbW9kdWxlX2xhYmVscyA9IFsKICAgICAgICAgICAgICAgICdhcXVlY2VyJyA9PiAnY2Fkw6puY2lhIGRlIGFxdWVjaW1lbnRvIEQrWCcsCiAgICAgICAgICAgICAgICAnaG90JyAgICAgPT4gJ2F1dG9tYcOnw6NvIEhPVCAobGVhZCBxdWVudGUpJywKICAgICAgICAgICAgICAgICdieWRhdGUnICA9PiAnbGVtYnJldGUgcG9yIGRhdGEgZG8gZXZlbnRvJywKICAgICAgICAgICAgXTsKICAgICAgICAgICAgJG1vZF9oaW50ID0gJyc7CiAgICAgICAgICAgIGZvcmVhY2ggKCAkbW9kdWxlX2xhYmVscyBhcyAkbWsgPT4gJG1sICkgewogICAgICAgICAgICAgICAgaWYgKCBzdHJwb3MoICRsYXN0X3NlbmQtPm1vZHVsZSwgJG1rICkgIT09IGZhbHNlICkgeyAkbW9kX2hpbnQgPSAkbWw7IGJyZWFrOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkbW9kX2hpbnQgKSB7CiAgICAgICAgICAgICAgICAkc3lzdGVtX3Byb21wdCAuPSAiXG5cbvCfpJYgQ09OVEVYVE8gREUgQVVUT01Bw4fDg086IEVzdGUgbGVhZCBlc3TDoSByZXNwb25kZW5kbyBhIHVtYSBtZW5zYWdlbSBhdXRvbcOhdGljYSBkZSB7JG1vZF9oaW50fSwgZW52aWFkYSBlbSAiIC4gJGxhc3Rfc2VuZC0+c2VudF9hdCAuICIuIjsKICAgICAgICAgICAgICAgIGlmICggJGxhc3Rfc2VuZC0+Y29udGV4dCApIHsKICAgICAgICAgICAgICAgICAgICAkc3lzdGVtX3Byb21wdCAuPSAiIEluZm9ybWHDp8O1ZXMgYWRpY2lvbmFpczogIiAuICRsYXN0X3NlbmQtPmNvbnRleHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkc3lzdGVtX3Byb21wdCAuPSAiIFVzZSBlc3NlIGNvbnRleHRvIHBhcmEgcGVyc29uYWxpemFyIGEgY29udmVyc2Eg4oCUIGRlbW9uc3RyZSBxdWUgasOhIHNhYmUgZG8gaW50ZXJlc3NlIGRvIGxlYWQuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJG1lc3NhZ2VzX2FyciA9IFtdOwogICAgICAgIGZvcmVhY2ggKCAkaGlzdG9yaWNvIGFzICRobXNnICkgewogICAgICAgICAgICBpZiAoIGlzc2V0KCAkaG1zZ1sncm9sZSddLCAkaG1zZ1snY29udGVudCddICkgKSB7CiAgICAgICAgICAgICAgICAkbWVzc2FnZXNfYXJyW10gPSBbCiAgICAgICAgICAgICAgICAgICAgJ3JvbGUnICAgID0+ICRobXNnWydyb2xlJ10gPT09ICd1c2VyJyA/ICd1c2VyJyA6ICdhc3Npc3RhbnQnLAogICAgICAgICAgICAgICAgICAgICdjb250ZW50JyA9PiAoc3RyaW5nKSAkaG1zZ1snY29udGVudCddLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIGVtcHR5KCAkbWVzc2FnZXNfYXJyICkgfHwgJG1lc3NhZ2VzX2FyclsgY291bnQoICRtZXNzYWdlc19hcnIgKSAtIDEgXVsncm9sZSddICE9PSAndXNlcicgKSB7CiAgICAgICAgICAgICRtZXNzYWdlc19hcnJbXSA9IFsgJ3JvbGUnID0+ICd1c2VyJywgJ2NvbnRlbnQnID0+ICR0ZXh0IF07CiAgICAgICAgfQoKICAgICAgICAkcmVzcCA9IHdwX3JlbW90ZV9wb3N0KCAnaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbS92MS9tZXNzYWdlcycsIFsKICAgICAgICAgICAgJ3RpbWVvdXQnID0+IDE4LAogICAgICAgICAgICAnaGVhZGVycycgPT4gWwogICAgICAgICAgICAgICAgJ3gtYXBpLWtleScgICAgICAgICA9PiAkYXBpX2tleSwKICAgICAgICAgICAgICAgICdhbnRocm9waWMtdmVyc2lvbicgPT4gJzIwMjMtMDYtMDEnLAogICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZScgICAgICA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdib2R5JyA9PiB3cF9qc29uX2VuY29kZSggWwogICAgICAgICAgICAgICAgJ21vZGVsJyAgICAgID0+ICdjbGF1ZGUtaGFpa3UtNC01LTIwMjUxMDAxJywKICAgICAgICAgICAgICAgICdtYXhfdG9rZW5zJyA9PiAzNTAsCiAgICAgICAgICAgICAgICAnc3lzdGVtJyAgICAgPT4gJHN5c3RlbV9wcm9tcHQsCiAgICAgICAgICAgICAgICAnbWVzc2FnZXMnICAgPT4gJG1lc3NhZ2VzX2FyciwKICAgICAgICAgICAgXSApLAogICAgICAgIF0gKTsKCiAgICAgICAgaWYgKCAhIGlzX3dwX2Vycm9yKCAkcmVzcCApICYmIHdwX3JlbW90ZV9yZXRyaWV2ZV9yZXNwb25zZV9jb2RlKCAkcmVzcCApID09PSAyMDAgKSB7CiAgICAgICAgICAgICRyYiAgICA9IGpzb25fZGVjb2RlKCB3cF9yZW1vdGVfcmV0cmlldmVfYm9keSggJHJlc3AgKSwgdHJ1ZSApOwogICAgICAgICAgICAkcl90eHQgPSAkcmJbJ2NvbnRlbnQnXVswXVsndGV4dCddID8/ICcnOwogICAgICAgICAgICBpZiAoICRyX3R4dCApIHsKICAgICAgICAgICAgICAgICRyX3R4dCA9IHRyaW0oICRyX3R4dCApOwogICAgICAgICAgICAgICAgJGNsZWFuID0gcHJlZ19yZXBsYWNlKCAnL15gYGAoPzpqc29uKT9cXHMqL2knLCAnJywgJHJfdHh0ICk7CiAgICAgICAgICAgICAgICAkY2xlYW4gPSBwcmVnX3JlcGxhY2UoICcvXFxzKmBgYCQvJywgJycsICRjbGVhbiApOwogICAgICAgICAgICAgICAgJGNsZWFuID0gdHJpbSggJGNsZWFuICk7CiAgICAgICAgICAgICAgICAkcl9qc29uID0ganNvbl9kZWNvZGUoICRjbGVhbiwgdHJ1ZSApOwogICAgICAgICAgICAgICAgaWYgKCBpc19hcnJheSggJHJfanNvbiApICYmIGlzc2V0KCAkcl9qc29uWydtZW5zYWdlbSddICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlcGx5ID0gdHJpbSggJHJfanNvblsnbWVuc2FnZW0nXSApOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCBpc19hcnJheSggJHJfanNvbiApICYmIGlzc2V0KCAkcl9qc29uWydtZXNzYWdlJ10gKSApIHsKICAgICAgICAgICAgICAgICAgICAkcmVwbHkgPSB0cmltKCAkcl9qc29uWydtZXNzYWdlJ10gKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHJlcGx5ID0gJHJfdHh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIOKUgOKUgCBDdXBvbSBTb2ZJQSDilIDilIAKICAgICAgICAgICAgICAgIGlmICggZnVuY3Rpb25fZXhpc3RzKCAndm0yX3NvZmlhX2NyaWFyX2N1cG9tJyApICYmCiAgICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2goICcvXFxbXFxbQ1JJQVJfQ1VQT006dmFsb3I9KFxcZCsoPzpcXC5cXGQrKT8pLG5vbWU9KFteXFxdXSspXFxdXFxdLycsICRyZXBseSwgJGNtICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvdXBvbl92YWxvciAgPSBmbG9hdHZhbCggJGNtWzFdICk7CiAgICAgICAgICAgICAgICAgICAgJGNvdXBvbl9ub21lICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkY21bMl0gKTsKICAgICAgICAgICAgICAgICAgICAkY291cG9uX3Jlc3VsdCA9IHZtMl9zb2ZpYV9jcmlhcl9jdXBvbSggJGNvdXBvbl9ub21lLCAkY291cG9uX3ZhbG9yICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkY291cG9uX3Jlc3VsdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHJlcGxhY2UgPSAiKnskY291cG9uX3Jlc3VsdFsnY29kZSddfSogKHskY291cG9uX3Jlc3VsdFsncGN0J119JSBkZSBkZXNjb250bykiOwogICAgICAgICAgICAgICAgICAgICAgICAkcmVwbHkgICA9IHByZWdfcmVwbGFjZSggJy9cXFtcXFtDUklBUl9DVVBPTTpbXlxcXV0rXFxdXFxdLycsICRyZXBsYWNlLCAkcmVwbHkgKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkcmVwbHkgPSBwcmVnX3JlcGxhY2UoICcvXFxbXFxbQ1JJQVJfQ1VQT006W15cXF1dK1xcXVxcXS8nLCAnJywgJHJlcGx5ICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8g4pSA4pSAIENhcnJpbmhvIFNvZklBIOKUgOKUgAogICAgICAgICAgICAgICAgaWYgKCBmdW5jdGlvbl9leGlzdHMoICd2bTJfcHJvY2Vzc19jYXJyaW5ob190YWcnICkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlcGx5ID0gdm0yX3Byb2Nlc3NfY2FycmluaG9fdGFnKCAkcmVwbHkgKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHJlcGx5ID0gcHJlZ19yZXBsYWNlKCAnL1xcW1xcW01PTlRBUl9DQVJSSU5ITzpbXlxcXV0rXFxdXFxdLycsICcnLCAkcmVwbHkgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIOKUgOKUgCBbdjEuNS4xMzNdIFRhZyBEQVRBX0VWRU5UTyDigJQgY2FwdHVyYSBkYXRhIGRvIGV2ZW50byBwZWxhIFNvZklBIOKUgOKUgAogICAgICAgICAgICAgICAgaWYgKCBwcmVnX21hdGNoKCAnL1xbXFtEQVRBX0VWRU5UTzooXGR7NH0tXGR7Mn0tXGR7Mn0pXF1cXS8nLCAkcmVwbHksICRkbSApICkgewogICAgICAgICAgICAgICAgICAgICRjbGF1ZGVfZGF0ZV9ldmVudG8gPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkZG1bMV0gKTsKICAgICAgICAgICAgICAgICAgICAkcmVwbHkgPSBwcmVnX3JlcGxhY2UoICcvXFtcW0RBVEFfRVZFTlRPOlteXF1dK1xdXF0vJywgJycsICRyZXBseSApOwogICAgICAgICAgICAgICAgICAgICRyZXBseSA9IHRyaW0oICRyZXBseSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGVyciA9IGlzX3dwX2Vycm9yKCAkcmVzcCApID8gJHJlc3AtPmdldF9lcnJvcl9tZXNzYWdlKCkgOiBzdWJzdHIoIHdwX3JlbW90ZV9yZXRyaWV2ZV9ib2R5KCAkcmVzcCApLCAwLCAzMDAgKTsKICAgICAgICAgICAgdm0yX2xvZyggJ1t6YXBpLXdlYmhvb2tdIENsYXVkZSBlcnJvOiAnIC4gJGVyciwgJ2Vycm9yJyApOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgdm0yX2xvZyggJ1t6YXBpLXdlYmhvb2tdIEFQSSBrZXkgQ2xhdWRlIG7Do28gY29uZmlndXJhZGEnLCAnZXJyb3InICk7CiAgICB9CgogICAgJGhpc3Rvcmljb1tdICA9IFsgJ3JvbGUnID0+ICdhc3Npc3RhbnQnLCAnY29udGVudCcgPT4gJHJlcGx5IF07CiAgICAkbXNnX2NvdW50ICAgID0gY291bnQoICRoaXN0b3JpY28gKTsKICAgICRub3cgICAgICAgICAgPSBjdXJyZW50X3RpbWUoICdteXNxbCcgKTsKCiAgICAvLyDilIDilIAgU2FsdmFyL2F0dWFsaXphciBzZXNzw6NvIOKUgOKUgAogICAgJHNlc3Npb25fZGF0YSA9IFsKICAgICAgICAnc2Vzc2lvbl9pZCcgICAgICA9PiAkc2lkLAogICAgICAgICd3aGF0c2FwcCcgICAgICAgID0+ICRwaG9uZV9ub3JtLAogICAgICAgICdjYW5hbF9vcmlnZW0nICAgID0+ICRjaGFubmVsX3NsdWcsCiAgICAgICAgJ21lbnNhZ2Vuc19jb3VudCcgPT4gJG1zZ19jb3VudCwKICAgICAgICAnaGlzdG9yaWNvJyAgICAgICA9PiB3cF9qc29uX2VuY29kZSggJGhpc3RvcmljbyApLAogICAgICAgICdsYXN0X2FjdGl2aXR5JyAgID0+ICRub3csCiAgICBdOwogICAgaWYgKCAkcm93ICkgewogICAgICAgICR3cGRiLT51cGRhdGUoICR0LCAkc2Vzc2lvbl9kYXRhLCBbICdzZXNzaW9uX2lkJyA9PiAkc2lkIF0gKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHNlc3Npb25fZGF0YVsnc3RhcnRlZF9hdCddID0gJG5vdzsKICAgICAgICAkd3BkYi0+aW5zZXJ0KCAkdCwgJHNlc3Npb25fZGF0YSApOwogICAgfQoKICAgIC8vIOKUgOKUgCBDcmlhci9hdHVhbGl6YXIgY29udGF0byDilIDilIAKICAgICRjdCAgICAgICA9ICR3cGRiLT5wcmVmaXggLiAndm0yX2NvbnRhY3RzJzsKICAgICRleGlzdGluZyA9ICR3cGRiLT5nZXRfcm93KCAkd3BkYi0+cHJlcGFyZSgKICAgICAgICAiU0VMRUNUIGlkLCBuYW1lLCBzdGF0dXMsIHRpcG9fZXZlbnRvLCBkYXRhX2V2ZW50bywgZ2FsZXJpYV9hdHJhY2FvLCBvcmlnZW5zIEZST00geyRjdH0gV0hFUkUgcGhvbmUgPSAlcyIsICRwaG9uZV9ub3JtCiAgICApICk7CgogICAgJHN0YXR1c19vcmRlciA9IFsgJ25vdm8nID0+IDAsICdhcXVlY2VuZG8nID0+IDEsICdxdWVudGUnID0+IDIsICdjb252ZXJ0aWRvJyA9PiAzLCAncGVyZGlkbycgPT4gLTEgXTsKICAgICRuZXdfc3RhdHVzICAgPSAkbXNnX2NvdW50ID49IDggPyAncXVlbnRlJyA6ICggJG1zZ19jb3VudCA+PSAzID8gJ2FxdWVjZW5kbycgOiAnbm92bycgKTsKCiAgICAvLyBFeHRyYWlyIGRhZG9zIGRvIGV2ZW50byAocmV1dGlsaXphciBmdW7Dp8O1ZXMgZG8gV0FCQSBwbHVnaW4gc2UgZGlzcG9uw612ZWlzKQogICAgJGV2X2RhdGEgPSBbICd0aXBvX2V2ZW50bycgPT4gJycsICdkYXRhX2V2ZW50bycgPT4gJycsICdhdHJhY2FvJyA9PiAnJyBdOwogICAgaWYgKCBmdW5jdGlvbl9leGlzdHMoICd2bXdhYmFfZXh0cmFjdF9ldmVudF9kYXRhJyApICkgewogICAgICAgICRldl9kYXRhID0gdm13YWJhX2V4dHJhY3RfZXZlbnRfZGF0YSggJGhpc3RvcmljbyApOwogICAgfQogICAgJGV4dHJhY3RlZF9uYW1lID0gbnVsbDsKICAgIGlmICggZnVuY3Rpb25fZXhpc3RzKCAndm13YWJhX2V4dHJhY3RfbmFtZScgKSApIHsKICAgICAgICAkZXh0cmFjdGVkX25hbWUgPSB2bXdhYmFfZXh0cmFjdF9uYW1lKCAkaGlzdG9yaWNvICk7CiAgICB9CgogICAgaWYgKCAkZXhpc3RpbmcgKSB7CiAgICAgICAgJHVwZGF0ZSA9IFsgJ2xhc3RfYWN0aXZpdHknID0+ICRub3cgXTsKICAgICAgICAkY3VyX29yZGVyID0gJHN0YXR1c19vcmRlclsgJGV4aXN0aW5nLT5zdGF0dXMgXSA/PyAwOwogICAgICAgICRuZXdfb3JkZXIgPSAkc3RhdHVzX29yZGVyWyAkbmV3X3N0YXR1cyBdICAgICAgID8/IDA7CiAgICAgICAgaWYgKCAkbmV3X29yZGVyID4gJGN1cl9vcmRlciApIHsKICAgICAgICAgICAgJHVwZGF0ZVsnc3RhdHVzJ10gPSAkbmV3X3N0YXR1czsKICAgICAgICB9CiAgICAgICAgLy8gQXR1YWxpemFyIG5vbWUgc2UgZ2Vuw6lyaWNvCiAgICAgICAgaWYgKCAkZXh0cmFjdGVkX25hbWUgJiYgaW5fYXJyYXkoICRleGlzdGluZy0+bmFtZSwgWyAnTGVhZCBXQSA1MDM5JywgJ0xlYWQgWi1BUEknLCAnJyBdLCB0cnVlICkgKSB7CiAgICAgICAgICAgICR1cGRhdGVbJ25hbWUnXSA9ICRleHRyYWN0ZWRfbmFtZTsKICAgICAgICB9CiAgICAgICAgLy8gQWRpY2lvbmFyIGNhbmFsIMOgcyBvcmlnZW5zIHNlIG7Do28gZXhpc3RpcgogICAgICAgICRvcmlnZW5zID0ganNvbl9kZWNvZGUoICRleGlzdGluZy0+b3JpZ2VucyA/OiAnW10nLCB0cnVlICkgPzogW107CiAgICAgICAgaWYgKCAhIGluX2FycmF5KCAkY2hhbm5lbF9zbHVnLCAkb3JpZ2VucywgdHJ1ZSApICkgewogICAgICAgICAgICAkb3JpZ2Vuc1tdID0gJGNoYW5uZWxfc2x1ZzsKICAgICAgICAgICAgJHVwZGF0ZVsnb3JpZ2VucyddID0gd3BfanNvbl9lbmNvZGUoICRvcmlnZW5zICk7CiAgICAgICAgfQogICAgICAgIC8vIFByZWVuY2hlciBjYW1wb3MgZGUgZXZlbnRvIHNlIHZhemlvcwogICAgICAgIGlmICggZW1wdHkoICRleGlzdGluZy0+dGlwb19ldmVudG8gKSAmJiAhIGVtcHR5KCAkZXZfZGF0YVsndGlwb19ldmVudG8nXSApICkgewogICAgICAgICAgICAkdXBkYXRlWyd0aXBvX2V2ZW50byddID0gJGV2X2RhdGFbJ3RpcG9fZXZlbnRvJ107CiAgICAgICAgfQogICAgICAgIGlmICggISBlbXB0eSggJGNsYXVkZV9kYXRlX2V2ZW50byApICkgewogICAgICAgICAgICAkdXBkYXRlWydkYXRhX2V2ZW50byddID0gJGNsYXVkZV9kYXRlX2V2ZW50bzsgLy8gW3YxLjUuMTMzXSBDbGF1ZGUgY29uZmlybW91CiAgICAgICAgfSBlbHNlaWYgKCBlbXB0eSggJGV4aXN0aW5nLT5kYXRhX2V2ZW50byApICYmICEgZW1wdHkoICRldl9kYXRhWydkYXRhX2V2ZW50byddICkgKSB7CiAgICAgICAgICAgICR1cGRhdGVbJ2RhdGFfZXZlbnRvJ10gPSAkZXZfZGF0YVsnZGF0YV9ldmVudG8nXTsKICAgICAgICB9CiAgICAgICAgaWYgKCBlbXB0eSggJGV4aXN0aW5nLT5nYWxlcmlhX2F0cmFjYW8gKSAmJiAhIGVtcHR5KCAkZXZfZGF0YVsnYXRyYWNhbyddICkgKSB7CiAgICAgICAgICAgICR1cGRhdGVbJ2dhbGVyaWFfYXRyYWNhbyddID0gJGV2X2RhdGFbJ2F0cmFjYW8nXTsKICAgICAgICB9CiAgICAgICAgJHdwZGItPnVwZGF0ZSggJGN0LCAkdXBkYXRlLCBbICdpZCcgPT4gJGV4aXN0aW5nLT5pZCBdICk7CiAgICB9IGVsc2UgewogICAgICAgICR3cGRiLT5pbnNlcnQoICRjdCwgWwogICAgICAgICAgICAncGhvbmUnICAgICAgICAgICA9PiAkcGhvbmVfbm9ybSwKICAgICAgICAgICAgJ25hbWUnICAgICAgICAgICAgPT4gJGV4dHJhY3RlZF9uYW1lID86ICdMZWFkIFotQVBJJywKICAgICAgICAgICAgJ3N0YXR1cycgICAgICAgICAgPT4gJ25vdm8nLAogICAgICAgICAgICAnb3JpZ2VucycgICAgICAgICA9PiB3cF9qc29uX2VuY29kZSggWyAkY2hhbm5lbF9zbHVnIF0gKSwKICAgICAgICAgICAgJ3RpcG9fZXZlbnRvJyAgICAgPT4gJGV2X2RhdGFbJ3RpcG9fZXZlbnRvJ10sCiAgICAgICAgICAgICdkYXRhX2V2ZW50bycgICAgID0+ICRjbGF1ZGVfZGF0ZV9ldmVudG8gPzogJGV2X2RhdGFbJ2RhdGFfZXZlbnRvJ10sIC8vIFt2MS41LjEzM10KICAgICAgICAgICAgJ2dhbGVyaWFfYXRyYWNhbycgPT4gJGV2X2RhdGFbJ2F0cmFjYW8nXSwKICAgICAgICAgICAgJ2xhc3RfYWN0aXZpdHknICAgPT4gJG5vdywKICAgICAgICAgICAgJ2NyZWF0ZWRfYXQnICAgICAgPT4gJG5vdywKICAgICAgICBdICk7CiAgICB9CgogICAgLy8g4pSA4pSAIEVudmlhciByZXNwb3N0YSB2aWEgWi1BUEkg4pSA4pSACiAgICAkc2VudCA9IHZtMl9zZW5kX3phcGkoICRjaGFubmVsX3NsdWcsICRwaG9uZV9ub3JtLCAkcmVwbHkgKTsKICAgIHZtMl9sb2coICJbemFwaS13ZWJob29rXSB7JGNoYW5uZWxfc2x1Z30g4oaSIHskcGhvbmVfbm9ybX06ICIgLiAoICRzZW50ID8gJ09LJyA6ICdGQUxIT1UnICkgLiAiIHwgTXNnczogeyRtc2dfY291bnR9IiwgJ2luZm8nICk7CgogICAgcmV0dXJuIG5ldyBXUF9SRVNUX1Jlc3BvbnNlKCBbICdvaycgPT4gdHJ1ZSwgJ2NoYW5uZWwnID0+ICRjaGFubmVsX3NsdWcsICdtc2dzJyA9PiAkbXNnX2NvdW50IF0sIDIwMCApOwp9CgovLyDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKLy8g8J+bkiAgQ0FSUklOSE8gU09GSUEg4oCUIGhlbHBlciBjb21wYXJ0aWxoYWRvIChXQUJBICsgWi1BUEkgKyBXZWIpCi8vIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAoKaWYgKCAhIGZ1bmN0aW9uX2V4aXN0cyggJ3ZtMl9idWlsZF9jYXJ0X3VybCcgKSApIDoKZnVuY3Rpb24gdm0yX2J1aWxkX2NhcnRfdXJsKCAkcGlkLCAkcXR5ID0gMSwgJGNvdXBvbiA9ICcnICkgewogICAgJHNlY3JldCA9IGdldF9vcHRpb24oICd2bTJfY2FydF9zZWNyZXQnLCAnJyApOwogICAgaWYgKCAhICRzZWNyZXQgKSB7CiAgICAgICAgJHNlY3JldCA9IHdwX2dlbmVyYXRlX3Bhc3N3b3JkKCAzMiwgZmFsc2UgKTsKICAgICAgICB1cGRhdGVfb3B0aW9uKCAndm0yX2NhcnRfc2VjcmV0JywgJHNlY3JldCApOwogICAgfQogICAgJHNpZyA9IHN1YnN0ciggaGFzaF9obWFjKCAnc2hhMjU2JywgInZtMmNhcnQ6eyRwaWR9OnskcXR5fTp7JGNvdXBvbn0iLCAkc2VjcmV0ICksIDAsIDggKTsKICAgIHJldHVybiBhZGRfcXVlcnlfYXJnKCBbCiAgICAgICAgJ3ZtMmNhcnQnID0+ICcxJywKICAgICAgICAncGlkJyAgICAgPT4gJHBpZCwKICAgICAgICAncXR5JyAgICAgPT4gJHF0eSwKICAgICAgICAnY291cG9uJyAgPT4gcmF3dXJsZW5jb2RlKCAkY291cG9uICksCiAgICAgICAgJ3NpZycgICAgID0+ICRzaWcsCiAgICBdLCBob21lX3VybCggJy8nICkgKTsKfQplbmRpZjsKCmlmICggISBmdW5jdGlvbl9leGlzdHMoICd2bTJfcHJvY2Vzc19jYXJyaW5ob190YWcnICkgKSA6CmZ1bmN0aW9uIHZtMl9wcm9jZXNzX2NhcnJpbmhvX3RhZyggJHRleHQgKSB7CiAgICBpZiAoICEgcHJlZ19tYXRjaCggJy9cW1xbTU9OVEFSX0NBUlJJTkhPOnByb2R1dG9faWQ9KFxkKykoPzoscXR5PShcZCspKT8oPzosY3Vwb209KFteXF1dKikpP1xdXF0vJywgJHRleHQsICRtICkgKSB7CiAgICAgICAgcmV0dXJuICR0ZXh0OwogICAgfQogICAgJHBpZCAgICA9IGludHZhbCggJG1bMV0gKTsKICAgICRxdHkgICAgPSBtYXgoIDEsIGludHZhbCggJG1bMl0gPz8gMSApICk7CiAgICAkY291cG9uID0gc2FuaXRpemVfdGV4dF9maWVsZCggJG1bM10gPz8gJycgKTsKCiAgICBpZiAoICEgJHBpZCApIHsKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlKCAnL1xbXFtNT05UQVJfQ0FSUklOSE86W15cXV0rXF1cXS8nLCAnJywgJHRleHQgKTsKICAgIH0KCiAgICAkcHJvZHVjdCA9IGZ1bmN0aW9uX2V4aXN0cyggJ3djX2dldF9wcm9kdWN0JyApID8gd2NfZ2V0X3Byb2R1Y3QoICRwaWQgKSA6IG51bGw7CiAgICBpZiAoICRwcm9kdWN0ICYmIGluX2FycmF5KCAkcHJvZHVjdC0+Z2V0X3R5cGUoKSwgWyAnc2ltcGxlJywgJ3ZhcmlhYmxlJyBdLCB0cnVlICkgKSB7CiAgICAgICAgJHVybCAgID0gdm0yX2J1aWxkX2NhcnRfdXJsKCAkcGlkLCAkcXR5LCAkY291cG9uICk7CiAgICAgICAgJGxhYmVsID0gIvCfkYkgRmluYWxpemFyIHBlZGlkbyBhZ29yYTogeyR1cmx9IjsKICAgIH0gZWxzZWlmICggJHByb2R1Y3QgKSB7CiAgICAgICAgJHVybCAgID0gZ2V0X3Blcm1hbGluayggJHBpZCApOwogICAgICAgICRsYWJlbCA9ICLwn5OFIFNlbGVjaW9uYXIgZGF0YSBlIHJlc2VydmFyOiB7JHVybH0iOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlKCAnL1xbXFtNT05UQVJfQ0FSUklOSE86W15cXV0rXF1cXS8nLCAnJywgJHRleHQgKTsKICAgIH0KCiAgICByZXR1cm4gcHJlZ19yZXBsYWNlKCAnL1xbXFtNT05UQVJfQ0FSUklOSE86W15cXV0rXF1cXS8nLCAkbGFiZWwsICR0ZXh0ICk7Cn0KZW5kaWY7CgovLyBIYW5kbGVyOiA/dm0yY2FydD0xIOKGkiBhZGQgdG8gY2FydCArIGNvdXBvbiArIHJlZGlyZWN0IHRvIGNoZWNrb3V0CmFkZF9hY3Rpb24oICd0ZW1wbGF0ZV9yZWRpcmVjdCcsIGZ1bmN0aW9uICgpIHsKICAgIGlmICggISBpc3NldCggJF9HRVRbJ3ZtMmNhcnQnXSApIHx8ICEgZnVuY3Rpb25fZXhpc3RzKCAnV0MnICkgKSByZXR1cm47CgogICAgJHBpZCAgICA9IGludHZhbCggJF9HRVRbJ3BpZCddICAgID8/IDAgKTsKICAgICRxdHkgICAgPSBtYXgoIDEsIGludHZhbCggJF9HRVRbJ3F0eSddICAgID8/IDEgKSApOwogICAgJGNvdXBvbiA9IHNhbml0aXplX3RleHRfZmllbGQoIHJhd3VybGRlY29kZSggJF9HRVRbJ2NvdXBvbiddID8/ICcnICkgKTsKICAgICRzaWcgICAgPSBzYW5pdGl6ZV90ZXh0X2ZpZWxkKCAkX0dFVFsnc2lnJ10gICAgPz8gJycgKTsKCiAgICAkc2VjcmV0ICAgPSBnZXRfb3B0aW9uKCAndm0yX2NhcnRfc2VjcmV0JywgJycgKTsKICAgICRleHBlY3RlZCA9ICRzZWNyZXQgPyBzdWJzdHIoIGhhc2hfaG1hYyggJ3NoYTI1NicsICJ2bTJjYXJ0OnskcGlkfTp7JHF0eX06eyRjb3Vwb259IiwgJHNlY3JldCApLCAwLCA4ICkgOiAnJzsKICAgIGlmICggISAkc2VjcmV0IHx8ICEgaGFzaF9lcXVhbHMoICRleHBlY3RlZCwgJHNpZyApICkgewogICAgICAgIHdwX2RpZSggJ0xpbmsgaW52w6FsaWRvIG91IGV4cGlyYWRvLicsICdWaXZhTWFpcycsIFsgJ3Jlc3BvbnNlJyA9PiA0MDMgXSApOwogICAgfQoKICAgIGlmICggISAkcGlkICkgeyB3cF9yZWRpcmVjdCggaG9tZV91cmwoKSApOyBleGl0OyB9CgogICAgJHByb2R1Y3QgPSB3Y19nZXRfcHJvZHVjdCggJHBpZCApOwogICAgaWYgKCAhICRwcm9kdWN0ICkgeyB3cF9yZWRpcmVjdCggaG9tZV91cmwoKSApOyBleGl0OyB9CgogICAgaWYgKCBpbl9hcnJheSggJHByb2R1Y3QtPmdldF90eXBlKCksIFsgJ3NpbXBsZScsICd2YXJpYWJsZScgXSwgdHJ1ZSApICkgewogICAgICAgIFdDKCktPmNhcnQtPmVtcHR5X2NhcnQoKTsKICAgICAgICBXQygpLT5jYXJ0LT5hZGRfdG9fY2FydCggJHBpZCwgJHF0eSApOwogICAgICAgIGlmICggJGNvdXBvbiApIHsgV0MoKS0+Y2FydC0+YXBwbHlfY291cG9uKCAkY291cG9uICk7IH0KICAgICAgICB3cF9yZWRpcmVjdCggd2NfZ2V0X2NoZWNrb3V0X3VybCgpICk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIFByb2R1dG8gY29tIGRhdGEgKGJvb2tpbmcpIOKAlCByZWRpcmVjaW9uYSBwYXJhIGEgcMOhZ2luYSBkbyBwcm9kdXRvCiAgICAgICAgaWYgKCAkY291cG9uICkgeyBXQygpLT5jYXJ0LT5hcHBseV9jb3Vwb24oICRjb3Vwb24gKTsgfQogICAgICAgIHdwX3JlZGlyZWN0KCBnZXRfcGVybWFsaW5rKCAkcGlkICkgKTsKICAgIH0KICAgIGV4aXQ7Cn0gKTsK
