Robin sauveur des fruits remastered
Les remaster étant à la mode, il était nécessaire de mettre au goût du jour ce "Légendaire" jeu datant du début 2000. Vous y incarnerez robin des bois qui souhaite récupérer de la nourriture pour on se sais trop quelle raison. Vous devrez sauter sur les différentes plates-formes pour atteindre les aliments tant convoités et dans certains cas, vous devrez combattre adroitement les ennemies qui s'opposeront à votre quête. Chaque niveau demeure un délire en soit puisque rien n'est cohérent dans ce jeu qui possède en tous environs 20 niveaux.
Ce projet est actuellement en développement.
Ly8gPHNjcmlwdD4NCgkJCXZhciBkb2N1bWVudFBhZGRpbmcgPSAyMDsNCgkJCXZhciBkb2N1bWVudExhYmVsSGVpZ2h0ID0gMDsNCgkJCXZhciBtYXhIZWlnaHQ7DQoJCQl2YXIgZG9jdW1lbnRzVG1wU2Nyb2xsID0ge307DQoJCQl2YXIgZG9jdW1lbnRzQ3VycmVudCA9ICdtYWluJzsNCgkJCXZhciBkb2N1bWVudFRwbCA9IHsNCgkJCQkvLyBzaG93IHRoZSBkb2N1bWVudHMgc2VsZWN0b3INCgkJCQlzaG93TWFpbjogZnVuY3Rpb24oZWxlbWVudCkgew0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5kb2N1bWVudHMtY29udGFpbmVyJykuZmluZCgnLmRvY3VtZW50JykuZmFkZWRTbGlkZVVwKDQwMCk7DQoJCQkJCSQoZWxlbWVudCkucGFyZW50cygnLmRvY3VtZW50cy1jb250YWluZXInKS5maW5kKCcuZG9jdW1lbnRzJykuZmFkZWRTbGlkZURvd24oNDAwKTsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZG9jdW1lbnRzLWNvbnRhaW5lcicpLmZpbmQoJy5kb2N1bWVudHMtc2hvdycpLmZhZGVkU2xpZGVVcCg0MDApOw0KCQkJCQkvLyQoJ2JvZHknKS5zY3JvbGxUbyhkb2N1bWVudHNUbXBTY3JvbGwsIDUwMCk7DQoJCQkJCS8vZG9jdW1lbnRzQ3VycmVudCA9ICdtYWluJzsNCgkJCQkJZG9jdW1lbnRUcGwuc3RvcmVTY3JvbGwoJ21haW4nKTsNCgkJCQl9LA0KDQoJCQkJLy8gc2hvdyB0aGUgZG9jdW1lbnRzIHNlbGVjdG9yDQoJCQkJc2hvd0RvY3VtZW50OiBmdW5jdGlvbihlbGVtZW50LCBpZCkgew0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5kb2N1bWVudHMtY29udGFpbmVyJykuZmluZCgnLmRvY3VtZW50cycpLmZhZGVkU2xpZGVVcCg0MDApOw0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5kb2N1bWVudHMtY29udGFpbmVyJykuZmluZCgnLmRvY3VtZW50cy1zaG93JykuZmFkZWRTbGlkZURvd24oNDAwKTsNCg0KDQoJCQkJCSQoZWxlbWVudCkucGFyZW50cygnLmRvY3VtZW50cy1jb250YWluZXInKS5maW5kKCcuZG9jdW1lbnQnKS5ub3QoJyNkb2N1bWVudF8nK2lkKS5mYWRlZFNsaWRlVXAoNDAwKTsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZG9jdW1lbnRzLWNvbnRhaW5lcicpLmZpbmQoJyNkb2N1bWVudF8nK2lkKS5mYWRlZFNsaWRlRG93big0MDAsIGZ1bmN0aW9uKCkge2RvY3VtZW50VHBsLnN0b3JlU2Nyb2xsKGlkKTt9KTsNCgkJCQl9LA0KDQoJCQkJc3RvcmVTY3JvbGw6IGZ1bmN0aW9uKHRhcmdldCkgew0KCQkJCQlkb2N1bWVudHNUbXBTY3JvbGxbZG9jdW1lbnRzQ3VycmVudF0gPSAkKCAnYm9keScgKS5zY3JvbGxUb3AoKTsNCgkJCQkJLy9jb25zb2xlLmxvZygnc3RvcmUgJytkb2N1bWVudHNDdXJyZW50KTsNCgkJCQkJaWYgKHR5cGVvZiBkb2N1bWVudHNUbXBTY3JvbGxbdGFyZ2V0XSA9PT0gInVuZGVmaW5lZCIgfHwgdHJ1ZSkgew0KCQkJCQkJJCgnYm9keScpLnNjcm9sbFRvKCQoJyNkb2N1bWVudF8nK3RhcmdldCksIDUwMCk7DQoJCQkJCQkvL2NvbnNvbGUubG9nKCdsb2FkICcrJyNkb2N1bWVudF8nK3RhcmdldCk7DQoJCQkJCX0NCgkJCQkJZWxzZQl7DQoJCQkJCQkkKCdib2R5Jykuc2Nyb2xsVG8oZG9jdW1lbnRzVG1wU2Nyb2xsW3RhcmdldF0sIDUwMCk7DQoJCQkJCQkvL2NvbnNvbGUubG9nKCdsb2FkICcrdGFyZ2V0KTsNCgkJCQkJfQ0KCQkJCQlkb2N1bWVudHNDdXJyZW50ID0gdGFyZ2V0Ow0KCQkJCX0sDQoNCgkJCQl1cGRhdGVIZWlnaHQ6IGZ1bmN0aW9uKCkgew0KCQkJCQkkKCcuZG9jdW1lbnRzLCAuZG9jdW1lbnQtZ3JvdXAnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCgkJCQkJCWlmICgkKHRoaXMpLmRhdGEoJ3RpbGUtd2lkdGgnKSkgew0KCQkJCQkJCXZhciBkb2N1bWVudHNXaWR0aCA9ICQodGhpcykud2lkdGgoKTsNCgkJCQkJCQlpZiAoIWRvY3VtZW50c1dpZHRoKSB7DQoJCQkJCQkJCWRvY3VtZW50c1dpZHRoID0gJCh0aGlzKS5wYXJlbnRzKCcuZG9jdW1lbnRzLWNvbnRhaW5lcicpLndpZHRoKCk7DQoJCQkJCQkJfQ0KCQkJCQkJCWlmIChkb2N1bWVudHNXaWR0aCA+IDEwMCkgew0KCQkJCQkJCQl2YXIgbnVtYmVyQ29sID0gTWF0aC5jZWlsKGRvY3VtZW50c1dpZHRoIC8gJCh0aGlzKS5kYXRhKCd0aWxlLXdpZHRoJykpOw0KCQkJCQkJCQltYXhIZWlnaHQgPSAoZG9jdW1lbnRzV2lkdGggLyBudW1iZXJDb2wpIC8gJCh0aGlzKS5kYXRhKCd0aWxlLXdpZHRoJykgKiAkKHRoaXMpLmRhdGEoJ3RpbGUtaGVpZ2h0JykgLSAoZG9jdW1lbnRQYWRkaW5nICogMik7DQoNCgkJCQkJCQkJJCh0aGlzKS5maW5kKCcuZG9jdW1lbnRzLWJsb2NrJykuY3NzKCd3aWR0aCcsICgxMDAgLyBudW1iZXJDb2wpICsgJyUnKS5jc3MoJ3BhZGRpbmcnLCBkb2N1bWVudFBhZGRpbmcgKyAncHgnKTsNCgkJCQkJCQkJJCh0aGlzKS5kYXRhKCdjb2wnLCBudW1iZXJDb2wpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfSk7DQoNCgkJCQkJJCgnLmRvY3VtZW50LWdyb3VwOnZpc2libGUnKS5jc3MoJ3dpZHRoJywgJ2NhbGMoMTAwJSArICcrKGRvY3VtZW50UGFkZGluZyoyKSsncHgpJykuY3NzKCdtYXJnaW5MZWZ0JywgJy0nK2RvY3VtZW50UGFkZGluZysncHgnKTsNCg0KCQkJCQkkKCcuZG9jdW1lbnRzLWltZycpLmhlaWdodChwYXJzZUludChtYXhIZWlnaHQpKTsNCg0KCQkJCQkkKCcuZG9jdW1lbnQtZ3JvdXAnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCgkJCQkJCWlmICgkKHRoaXMpLmRhdGEoJ3ByZXNlbnRhdGlvbicpKSB7DQoJCQkJCQkJJCh0aGlzKS5maW5kKCcuZG9jdW1lbnRzLWxlZ2VuZCcpLmNzcygnb3ZlcmZsb3cnLCAnaGlkZGVuJykuY3NzKCd3aGl0ZS1zcGFjZScsICdub3dyYXAnKS5jc3MoJ3RleHQtb3ZlcmZsb3cnLCAnZWxsaXBzaXMnKTsNCg0KCQkJCQkJCWlmICgkKHRoaXMpLmRhdGEoJ2NvbCcpID4gNCApIHsNCgkJCQkJCQkJJCh0aGlzKS5oZWlnaHQocGFyc2VJbnQobWF4SGVpZ2h0K2RvY3VtZW50TGFiZWxIZWlnaHQrKGRvY3VtZW50UGFkZGluZyoyKSkpLmNzcygnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2UgaWYgKCQodGhpcykuZGF0YSgnY29sJykgPT0gNCB8fCAkKHRoaXMpLmRhdGEoJ2NvbCcpID09IDMgKSB7DQoJCQkJCQkJCSQodGhpcykuaGVpZ2h0KHBhcnNlSW50KChtYXhIZWlnaHQrZG9jdW1lbnRMYWJlbEhlaWdodCsoZG9jdW1lbnRQYWRkaW5nKjIpKSoyKSkuY3NzKCdvdmVyZmxvdycsICdoaWRkZW4nKTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxzZSB7DQoJCQkJCQkJCSQodGhpcykuaGVpZ2h0KCdhdXRvJyk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9KTsNCg0KCQkJCX0sDQoNCgkJCQl1cGRhdGVWaXNpYmxlOiBmdW5jdGlvbihkb2N1bWVudCkgew0KCQkJCQlpZiAoIWRvY3VtZW50KSBkb2N1bWVudCA9ICQoJy5kb2N1bWVudHMtY29udGFpbmVyJyk7DQoJCQkJCWVsc2UgZG9jdW1lbnQgPSAkKGRvY3VtZW50KTsNCg0KCQkJCQlkb2N1bWVudC5maW5kKCcuZG9jdW1lbnRzLWltZzp2aXNpYmxlJykuZWFjaChmdW5jdGlvbiAoKSB7DQoJCQkJCQlpZiAoJCh0aGlzKS5kYXRhKCdzcmMnKSkgew0KCQkJCQkJCSQodGhpcykuYWRkQ2xhc3MoJ3RyYW5zcGFyZW50Jyk7DQoJCQkJCQkJJCh0aGlzKS5hdHRyKCdzcmMnLCAkKHRoaXMpLmRhdGEoJ3NyYycpKTsNCgkJCQkJCQkvLyQodGhpcykuY3NzKCdiYWNrZ3JvdW5kRmljaGllcicsICd1cmwoJyskKHRoaXMpLmRhdGEoJ3NyYycpKycpJyk7DQoJCQkJCQkJdmFyIGN1cnJlbnRJbWcgPSAkKHRoaXMpDQoJCQkJCQkJJCgnPGltZy8+JykuYXR0cignc3JjJywgJCh0aGlzKS5kYXRhKCdzcmMnKSkub24oJ2xvYWQnLCBmdW5jdGlvbigpIHsNCgkJCQkJCQkJJCh0aGlzKS5yZW1vdmUoKTsgLy8gcHJldmVudCBtZW1vcnkgbGVha3MgYXMgQGJlbndlZXQgc3VnZ2VzdGVkDQoJCQkJCQkJCWN1cnJlbnRJbWcuY3NzKCdiYWNrZ3JvdW5kRmljaGllcicsICd1cmwoJyskKHRoaXMpLmF0dHIoJ3NyYycpKycpJyk7DQoJCQkJCQkJCWN1cnJlbnRJbWcucmVtb3ZlQ2xhc3MoJ3RyYW5zcGFyZW50Jyk7DQoJCQkJCQkJfSk7DQoJCQkJCQkJJCh0aGlzKS5kYXRhKCdzcmMnLCBudWxsKTsNCgkJCQkJCX0NCgkJCQkJfSk7DQoJCQkJfSwNCg0KCQkJCWRhdGFSZXF1ZXN0OiBmdW5jdGlvbigpIHsNCgkJCQkJJCgnLmRvY3VtZW50c1tkYXRhLWV4dGVybmFsXScpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQkJCQl2YXIgY3VycmVudERvY3VtZW50ID0gdGhpczsNCgkJCQkJCXZhciByZXF1ZXN0ID0gJC5hamF4KHsNCgkJCQkJCQl1cmw6ICQodGhpcykuZGF0YSgnZXh0ZXJuYWwnKSwNCgkJCQkJCQl0eXBlOiAiR0VUIiwNCgkJCQkJCQlkYXRhVHlwZTogImpzb24iLA0KCQkJCQkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsNCgkJCQkJCQkJZG9jdW1lbnRUcGwuZGF0YUltcG9ydChjdXJyZW50RG9jdW1lbnQsIGRhdGEuZGF0YSwgdHJ1ZSk7DQoJCQkJCQkJfQ0KCQkJCQkJfSk7DQoJCQkJCX0pOw0KCQkJCX0sDQoNCgkJCQlkYXRhSW1wb3J0OiBmdW5jdGlvbihkb2N1bWVudCwgZGF0YSwgcmVmcmVzaCkgew0KCQkJCQl2YXIgZGVmYXVsdFdpZHRoID0gJChkb2N1bWVudCkuZmluZCgnLmRvY3VtZW50LWdyb3VwJykuZGF0YSgndGlsZS13aWR0aCcpDQoJCQkJCXZhciBkZWZhdWx0SGVpZ2h0ID0gJChkb2N1bWVudCkuZmluZCgnLmRvY3VtZW50LWdyb3VwJykuZGF0YSgndGlsZS1oZWlnaHQnKQ0KCQkJCQl2YXIgZ2FsaWQgPSAkKGRvY3VtZW50KS5kYXRhKCdpZCcpOw0KCQkJCQl2YXIgaHRtbCA9ICcnOw0KDQoJCQkJCS8vIGNoYW5nZSBmaWNoaWVyIGNvdmVyDQoJCQkJCWlmIChkYXRhLnVybF90aCkgew0KCQkJCQkJdmFyIGdhbExpbmsgPSAkKCcuZG9jdW1lbnRzLWxpbmtbZGF0YS1pZD0nICsgZ2FsaWQgKyAnXScpOw0KCQkJCQkJZ2FsTGluay5maW5kKCcuZG9jdW1lbnRzLWltZycpLmF0dHIoJ2RhdGEtc3JjJywgZGF0YS51cmxfdGgpLmF0dHIoJ3NyYycsIGRhdGEudXJsX3RoKS5kYXRhKCdzcmMnLCBkYXRhLnVybF90aCk7DQoJCQkJCQlkb2N1bWVudFRwbC51cGRhdGVWaXNpYmxlKGdhbExpbmspOw0KCQkJCQl9DQoNCgkJCQkJLy8gYWRkIGRvY3VtZW50cw0KCQkJCQlpZiAoZGF0YS5jaGlsZHMpIHsNCgkJCQkJCWZvciAodmFyIGkgPSAwLCBsZW4gPSBkYXRhLmNoaWxkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgew0KCQkJCQkJCWl0ZW0gPSBkYXRhLmNoaWxkc1tpXTsNCgkJCQkJCQlpZiAoaXRlbS5hY3RpZiAmJiAhaXRlbS5wYXNzd29yZF9jb2RlKSB7DQoJCQkJCQkJCXZhciBsYWJlbCA9IGl0ZW0ubmFtZTsNCgkJCQkJCQkJdmFyIHRodW1iID0gaXRlbS51cmxfdGg7DQoJCQkJCQkJCXZhciBpbWcgPSBpdGVtLnVybDsNCgkJCQkJCQkJdmFyIGlkID0gJChkb2N1bWVudCkuZGF0YSgnaWQnKSArICdfJyArIGl0ZW0uaWQ7DQoNCgkJCQkJCQkJLy8gY3JlYXRlIGRvY3VtZW50DQoJCQkJCQkJCXZhciBnYWwgPSAkKCc8ZGl2IGNsYXNzPSJkb2N1bWVudHMiIGlkPSJkb2N1bWVudF8nICsgaWQgKyAnIiBkYXRhLWlkPSInICsgaWQgKyAnIiBzdHlsZT0iZGlzcGxheTpub25lOyI+PGRpdiBjbGFzcz0iZG9jdW1lbnQtaGVhZGVyIj48aDI+JyArIGxhYmVsICsgJzwvaDI+PC9kaXY+PGRpdiBjbGFzcz0iZG9jdW1lbnQtZ3JvdXAiIGFsaWduPSJsZWZ0IiBjbGFzcz0iZG9jdW1lbnQtZ3JvdXAiIGRhdGEtdGlsZS13aWR0aD0iJyArIGRlZmF1bHRXaWR0aCArICciIGRhdGEtdGlsZS1oZWlnaHQ9IicgKyBkZWZhdWx0SGVpZ2h0ICsgJyIgZGF0YS1wcmVzZW50YXRpb249IiI+PC9kaXY+PC9kaXY+Jyk7DQoJCQkJCQkJCSQoJy5kb2N1bWVudHMtY29udGFpbmVyJykuYXBwZW5kKGdhbCk7DQoNCgkJCQkJCQkJLy8gZ28gYmFjayBidG4NCgkJCQkJCQkJdmFyIGJhY2sgPSAnPGEgZGF0YS1pZD0iJyArIGdhbGlkICsgJyIgY2FwdGlvbj0iUmV0b3VyIiBkYXRhLWNhcHRpb249IlJldG91ciIgY2xhc3M9ImRvY3VtZW50cy1saW5rIHBhcmVudCIgZGF0YS1pZD0iJyArIGdhbGlkICsgJyIgPjxkaXYgc3R5bGU9IiBkaXNwbGF5OmlubGluZS1ibG9jazsgem9vbToxOyB2ZXJ0aWNhbC1hbGlnbjp0b3A7IHRleHQtYWxpZ246Y2VudGVyOyB3aWR0aDonICsgZGVmYXVsdFdpZHRoICsgJ3B4OyBvdmVyZmxvdzpoaWRkZW47ICIgY2xhc3M9ImRvY3VtZW50cy1ibG9jayIgY2xhc3M9ImltZ2RpdiIgPiA8ZGl2IGNsYXNzPSJkb2N1bWVudHMtYmxvY2staW5zaWRlIj4gPHNwYW4gYm9yZGVyPSIwIiBkYXRhLXNyYz0ianMvYmxhbmsuZ2lmIiBhbHQ9IlJldG91ciIgY2xhc3M9ImRvY3VtZW50cy1pbWcgaW1nX3RoIiBzdHlsZT0id2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgaGVpZ2h0OicgKyBkZWZhdWx0SGVpZ2h0ICsgJ3B4OyAiPiA8L3NwYW4+IDxkaXYgY2xhc3M9ImRvY3VtZW50cy1sZWdlbmQgbGVnZW5kZSIgc3R5bGU9Im1pbi1oZWlnaHQ6MjVweDsgdGV4dC1hbGlnbjpjZW50ZXI7Ij48c3Bhbj4gUmV0b3VyIDwvc3Bhbj48L2Rpdj48L2Rpdj48L2Rpdj48L2E+JzsNCgkJCQkJCQkJZ2FsLmZpbmQoJy5kb2N1bWVudC1ncm91cCcpLmFwcGVuZChiYWNrKTsNCg0KCQkJCQkJCQkvLyBnbyB0byBkb2N1bWVudCBidG4NCgkJCQkJCQkJaHRtbCArPSAnPGEgZGF0YS1pZD0iJyArIGlkICsgJyIgY2FwdGlvbj0iJyArIGxhYmVsICsgJyIgZGF0YS1jYXB0aW9uPSInICsgbGFiZWwgKyAnIiBjbGFzcz0iZG9jdW1lbnRzLWxpbmsgRG9jdW1lbnREb3NzaWVyIiBkYXRhLWlkPSInICsgaWQgKyAnIiA+PGRpdiBzdHlsZT0iIGRpc3BsYXk6aW5saW5lLWJsb2NrOyB6b29tOjE7IHZlcnRpY2FsLWFsaWduOnRvcDsgdGV4dC1hbGlnbjpjZW50ZXI7IHdpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IG92ZXJmbG93OmhpZGRlbjsgIiBjbGFzcz0iZG9jdW1lbnRzLWJsb2NrIiBjbGFzcz0iaW1nZGl2IiA+IDxkaXYgY2xhc3M9ImRvY3VtZW50cy1ibG9jay1pbnNpZGUiPiA8c3BhbiBib3JkZXI9IjAiIGRhdGEtc3JjPSInICsgdGh1bWIgKyAnIiBhbHQ9IicgKyBsYWJlbCArICciIGNsYXNzPSJkb2N1bWVudHMtaW1nIGltZ190aCIgc3R5bGU9IndpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IGhlaWdodDonICsgZGVmYXVsdEhlaWdodCArICdweDsgIj4gPC9zcGFuPiA8ZGl2IGNsYXNzPSJkb2N1bWVudHMtbGVnZW5kIGxlZ2VuZGUiIHN0eWxlPSJtaW4taGVpZ2h0OjI1cHg7IHRleHQtYWxpZ246Y2VudGVyOyI+PHNwYW4+JyArIGxhYmVsICsgJzwvc3Bhbj48L2Rpdj48L2Rpdj48L2Rpdj48L2E+JzsNCg0KCQkJCQkJCQlkb2N1bWVudFRwbC5kYXRhSW1wb3J0KGdhbCwgaXRlbSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoNCgkJCQkJLy8gYWRkIGZpY2hpZXJzDQoJCQkJCWlmIChkYXRhLmZpY2hpZXJzKSB7DQoJCQkJCQlmb3IgKHZhciBpID0gMCwgbGVuID0gZGF0YS5maWNoaWVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykgew0KCQkJCQkJCWl0ZW0gPSBkYXRhLmZpY2hpZXJzW2ldOw0KCQkJCQkJCWlmIChpdGVtLmFjdGlmICYmICFpdGVtLnBhc3N3b3JkX2NvZGUpIHsNCgkJCQkJCQkJdmFyIGxhYmVsID0gaXRlbS5uYW1lOw0KCQkJCQkJCQl2YXIgdGh1bWIgPSBpdGVtLnVybF90aDsNCgkJCQkJCQkJdmFyIGltZyA9IGl0ZW0udXJsOw0KCQkJCQkJCQl2YXIgaWQgPSAkKGRvY3VtZW50KS5kYXRhKCdpZCcpICsgJ18nICsgaXRlbS5pZDsNCgkJCQkJCQkJaHRtbCArPSAnPGEgaHJlZj0iJyArIGltZyArICciIGNsYXNzPSJpbWdib3giIHJlbD0iZ2FsbGVyeV8nICsgZ2FsaWQgKyAnIiBkYXRhLWZhbmN5Ym94PSJnYWxsZXJ5XycgKyBnYWxpZCArICciIGNhcHRpb249IicgKyBsYWJlbCArICciIGRhdGEtY2FwdGlvbj0iJyArIGxhYmVsICsgJyIgY2xhc3M9ImRvY3VtZW50cy1saW5rIERvY3VtZW50RmljaGllciIgZGF0YS1pZD0iJyArIGlkICsgJyI+PGRpdiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7em9vbToxO3ZlcnRpY2FsLWFsaWduOnRvcDt0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgb3ZlcmZsb3c6aGlkZGVuOyAiY2xhc3M9ImRvY3VtZW50cy1ibG9jayJjbGFzcz0iaW1nZGl2Ij48ZGl2IGNsYXNzPSJkb2N1bWVudHMtYmxvY2staW5zaWRlIj48c3BhbiBib3JkZXI9IjAiIGRhdGEtc3JjPSInICsgdGh1bWIgKyAnIiBhbHQ9IicgKyBsYWJlbCArICciIGNsYXNzPSJkb2N1bWVudHMtaW1nIGltZ190aCIgc3R5bGU9IndpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IGhlaWdodDonICsgZGVmYXVsdEhlaWdodCArICdweDsgIj48L3NwYW4+PGRpdiBjbGFzcz0iZG9jdW1lbnRzLWxlZ2VuZCBsZWdlbmRlIiBzdHlsZT0ibWluLWhlaWdodDoyNXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsiPjxzcGFuPicgKyBsYWJlbCArICc8L3NwYW4+PC9kaXY+PC9kaXY+PC9kaXY+PC9hPic7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoNCgkJCQkJJChkb2N1bWVudCkuZmluZCgnLmRvY3VtZW50LWdyb3VwJykuYXBwZW5kKGh0bWwpOw0KDQoJCQkJCWRvY3VtZW50VHBsLmJpbmQoJChkb2N1bWVudCkpOw0KDQoJCQkJCWlmIChyZWZyZXNoKSB7DQoJCQkJCQlkb2N1bWVudFRwbC51cGRhdGVWaXNpYmxlKCk7DQoJCQkJCQlkb2N1bWVudFRwbC51cGRhdGVIZWlnaHQoKTsNCgkJCQkJfQ0KCQkJCX0sDQoNCgkJCQliaW5kOiBmdW5jdGlvbihkb2N1bWVudCkgew0KCQkJCQlpZiAoIWRvY3VtZW50KSBkb2N1bWVudCA9ICQoJy5kb2N1bWVudHMtY29udGFpbmVyJyk7DQoJCQkJCWVsc2UgZG9jdW1lbnQgPSAkKGRvY3VtZW50KTsNCg0KDQoJCQkJCWRvY3VtZW50LmZpbmQoJy5kb2N1bWVudHMtaW1nJykuYWRkQ2xhc3MoJ3RyYW5zcGFyZW50Jyk7DQoNCgkJCQkJZG9jdW1lbnQuZmluZCgnLmRvY3VtZW50cy1pbWcnKS5ub3QoIjp2aXNpYmxlIikuZWFjaChmdW5jdGlvbiAoKSB7DQoJCQkJCQlpZiAoISQodGhpcykuZGF0YSgic3JjIikpIHsNCgkJCQkJCQkkKHRoaXMpLmRhdGEoInNyYyIsIHRoaXMuc3JjKTsNCgkJCQkJCQl0aGlzLnNyYyA9ICJqcy9ibGFuay5naWYiOw0KCQkJCQkJfQ0KCQkJCQl9KTsNCg0KCQkJCQl2YXIgZG9jdW1lbnRzTGluayA9IGRvY3VtZW50LmZpbmQoJy5kb2N1bWVudHMtbGluazpub3QoLmJpbmRlZCknKTsNCgkJCQkJZG9jdW1lbnRzTGluay5hZGRDbGFzcygnYmluZGVkJyk7DQoJCQkJCWRvY3VtZW50c0xpbmsuY2xpY2soZnVuY3Rpb24oKSB7DQoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGRvY3VtZW50VHBsLnVwZGF0ZVZpc2libGUoKTsgfSwgMTAwKTsNCgkJCQkJfSk7DQoNCg0KCQkJCQkvLyBDb250ZW51IGRlIGRvY3VtZW50DQoJCQkJCWRvY3VtZW50c0xpbmsuZmlsdGVyKCc6bm90KC5zZWN1cmUpJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCQkJCQlkb2N1bWVudFRwbC5zaG93RG9jdW1lbnQodGhpcywgJCh0aGlzKS5kYXRhKCdpZCcpKTsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfSk7DQoNCgkJCQkJLy8gQWNj77+9cyBzZWN1cmUNCgkJCQkJZG9jdW1lbnRzTGluay5maWx0ZXIoJy5zZWN1cmUnKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCQkJCXdpbmRvdy5zZWN1cmVBY2Nlc3NJdGVtKCQodGhpcykuZGF0YSgnaWQnKSk7DQoJCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCX0pOw0KCQkJCX0NCg0KCQkJfTsNCg0KCQkJd2luZG93LmRvY3VtZW50VHBsID0gZG9jdW1lbnRUcGw7DQoNCgkJCXdpbmRvdy5yZXBvcnRJdGVtID0gZnVuY3Rpb24oaWQpIHsNCiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtZXJpYyhpZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgaWQgPSBpZC5kYXRhKCdpZCcpOw0KICAgICAgICAgICAgICAgIH0NCg0KCQkJCSQud2luZG93KHsNCgkJCQkJaWQ6ICdyZXBvcnRJdGVtJytpZCwNCgkJCQkJdGl0bGU6ICdSZXBvcnRlciB1biBwcm9ibGVtZSBhdmVjIHVuZSBmaWNoaWVyJywNCgkJCQkJdXJsOiAnYWRtaW4vZG9jdW1lbnRzL2ZpY2hpZXIvcmVwb3J0LycraWQrJz9vdXRwdXQ9dGV4dCcsDQoJCQkJCWljb246ICdzdGF0dXMtd2FybmluZycsDQoJCQkJCW1ldGhvZDogJ2FqYXgnLA0KCQkJCQltYXhXaWR0aDogLTEsCQkgLy8gdGhlIG1pbmltdW0gd2lkdGgsIGlmIC0xIG1lYW5zIG5vIGNoZWNraW5nDQoJCQkJCW1heEhlaWdodDogLTEsCQkgLy8gdGhlIG1pbmltdW0gaGVpZ2h0LCBpZiAtMSBtZWFucyBubyBjaGVja2luZw0KCQkJCQlzaG93Rm9vdGVyOiBmYWxzZSwNCgkJCQkJbWF4aW1pemFibGU6IGZhbHNlLA0KCQkJCQljbG9zYWJsZTogdHJ1ZSwNCgkJCQkJbWluaW1pemFibGU6IGZhbHNlLA0KCQkJCQlzaG93TW9kYWw6IHRydWUsDQoJCQkJCXdpZHRoOiA5MDAsDQoJCQkJCWhlaWdodDogNTc1LA0KCQkJCQljaGVja0JvdW5kYXJ5OiB0cnVlLA0KCQkJCQl3aXRoaW5Ccm93c2VyV2luZG93OiBmYWxzZSwNCgkJCQkJb25JZnJhbWVFbmQ6IGZ1bmN0aW9uKCkge30sDQoJCQkJCW9uQ2xvc2U6IGZ1bmN0aW9uKCkgew0KCQkJCQkJYnJvd3NlckFjdGlvblJ1bigncmVmcmVzaCcpOw0KCQkJCQl9DQoJCQkJfSk7DQoJCQl9Ow0KICAgICAgICAgICAgd2luZG93LnNlY3VyZUFjY2Vzc0l0ZW0gPSBmdW5jdGlvbihpZCkgew0KICAgICAgICAgICAgICAgICQud2luZG93KHsNCiAgICAgICAgICAgICAgICAgICAgaWQ6ICdzZWN1cmVBY2Nlc3NJdGVtJytpZCwNCiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdBY2MmZWdyYXZlO3MgcyZlYWN1dGU7Y3VyaXMmZWFjdXRlOycsDQogICAgICAgICAgICAgICAgICAgIHVybDogJ2FkbWluL2RvY3VtZW50cy9maWNoaWVyL3VubG9jay8nK2lkLA0KICAgICAgICAgICAgICAgICAgICBpY29uOiAnaW1nLXNraW4vc2V0cy9pbWFnaWNhbC1wcm8vbWVkaXVtL3NlY3VyZS1rZXkucG5nJywNCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnYWpheCcsDQogICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAtMSwJCSAvLyB0aGUgbWluaW11bSB3aWR0aCwgaWYgLTEgbWVhbnMgbm8gY2hlY2tpbmcNCiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAtMSwJCSAvLyB0aGUgbWluaW11bSBoZWlnaHQsIGlmIC0xIG1lYW5zIG5vIGNoZWNraW5nDQogICAgICAgICAgICAgICAgICAgIHNob3dGb290ZXI6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiB0cnVlLA0KCQkJCQltaW5pbWl6YWJsZTogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIHNob3dNb2RhbDogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDU2MCwNCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1NTAsDQogICAgICAgICAgICAgICAgICAgIGNoZWNrQm91bmRhcnk6IHRydWUsDQogICAgICAgICAgICAgICAgICAgIHdpdGhpbkJyb3dzZXJXaW5kb3c6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICBvbklmcmFtZUVuZDogZnVuY3Rpb24oKSB7fSwNCiAgICAgICAgICAgICAgICAgICAgb25DbG9zZTogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyQWN0aW9uUnVuKCdyZWZyZXNoJyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH07DQoNCgkJCSQoIHdpbmRvdyApLnJlc2l6ZShmdW5jdGlvbigpIHsNCgkJCQlkb2N1bWVudFRwbC51cGRhdGVIZWlnaHQoKTsNCgkJCX0pOw0KDQoJCQkkKGZ1bmN0aW9uICgpIHsNCgkJCQlkb2N1bWVudFRwbC5iaW5kKCk7DQoJCQkJZG9jdW1lbnRUcGwudXBkYXRlVmlzaWJsZSgpOw0KCQkJCWRvY3VtZW50VHBsLnVwZGF0ZUhlaWdodCgpOw0KCQkJfSk7DQoNCgkJCSQod2luZG93KS5sb2FkKGZ1bmN0aW9uKCkgew0KCQkJCWRvY3VtZW50VHBsLnVwZGF0ZUhlaWdodCgpOw0KCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgZG9jdW1lbnRUcGwudXBkYXRlSGVpZ2h0KCk7IH0sIDUwMCk7DQoJCQkJc2V0VGltZW91dChmdW5jdGlvbigpeyBkb2N1bWVudFRwbC51cGRhdGVIZWlnaHQoKTsgfSwgMTAwMCk7DQoNCgkJCQlkb2N1bWVudFRwbC5kYXRhUmVxdWVzdCgpOw0KCQkJfSk7DQoNCg0KCQkJLy88L3NjcmlwdD4KLy8gPHNjcmlwdD4NCgkJCXZhciBnYWxlcmllUGFkZGluZyA9IDEwOw0KCQkJdmFyIGdhbGVyaWVMYWJlbEhlaWdodCA9IDMwOw0KCQkJdmFyIG1heEhlaWdodDsNCgkJCXZhciBnYWxlcmllc1RtcFNjcm9sbCA9IHt9Ow0KCQkJdmFyIGdhbGVyaWVzQ3VycmVudCA9ICdtYWluJzsNCgkJCXZhciBnYWxlcmllVHBsID0gew0KCQkJCS8vIHNob3cgdGhlIGdhbGVyaWVzIHNlbGVjdG9yDQoJCQkJc2hvd01haW46IGZ1bmN0aW9uKGVsZW1lbnQpIHsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykuZmluZCgnLmdhbGVyaWUnKS5mYWRlZFNsaWRlVXAoNDAwKTsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykuZmluZCgnLmdhbGVyaWVzJykuZmFkZWRTbGlkZURvd24oNDAwKTsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykuZmluZCgnLmdhbGVyaWVzLXNob3cnKS5mYWRlZFNsaWRlVXAoNDAwKTsNCgkJCQkJLy8kKCdib2R5Jykuc2Nyb2xsVG8oZ2FsZXJpZXNUbXBTY3JvbGwsIDUwMCk7DQoJCQkJCS8vZ2FsZXJpZXNDdXJyZW50ID0gJ21haW4nOw0KCQkJCQlnYWxlcmllVHBsLnN0b3JlU2Nyb2xsKCdtYWluJyk7DQoJCQkJfSwNCg0KCQkJCS8vIHNob3cgdGhlIGdhbGVyaWVzIHNlbGVjdG9yDQoJCQkJc2hvd0dhbGVyaWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGlkKSB7DQoJCQkJCSQoZWxlbWVudCkucGFyZW50cygnLmdhbGVyaWVzLWNvbnRhaW5lcicpLmZpbmQoJy5nYWxlcmllcycpLmZhZGVkU2xpZGVVcCg0MDApOw0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5nYWxlcmllcy1jb250YWluZXInKS5maW5kKCcuZ2FsZXJpZXMtc2hvdycpLmZhZGVkU2xpZGVEb3duKDQwMCk7DQoNCg0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5nYWxlcmllcy1jb250YWluZXInKS5maW5kKCcuZ2FsZXJpZScpLm5vdCgnI2dhbGVyaWVfJytpZCkuZmFkZWRTbGlkZVVwKDQwMCk7DQoJCQkJCSQoZWxlbWVudCkucGFyZW50cygnLmdhbGVyaWVzLWNvbnRhaW5lcicpLmZpbmQoJyNnYWxlcmllXycraWQpLmZhZGVkU2xpZGVEb3duKDQwMCwgZnVuY3Rpb24oKSB7Z2FsZXJpZVRwbC5zdG9yZVNjcm9sbChpZCk7fSk7DQoJCQkJfSwNCg0KCQkJCXN0b3JlU2Nyb2xsOiBmdW5jdGlvbih0YXJnZXQpIHsNCgkJCQkJZ2FsZXJpZXNUbXBTY3JvbGxbZ2FsZXJpZXNDdXJyZW50XSA9ICQoICdib2R5JyApLnNjcm9sbFRvcCgpOw0KCQkJCQkvL2NvbnNvbGUubG9nKCdzdG9yZSAnK2dhbGVyaWVzQ3VycmVudCk7DQoJCQkJCWlmICh0eXBlb2YgZ2FsZXJpZXNUbXBTY3JvbGxbdGFyZ2V0XSA9PT0gInVuZGVmaW5lZCIgfHwgdHJ1ZSkgew0KCQkJCQkJJCgnYm9keScpLnNjcm9sbFRvKCQoJyNnYWxlcmllXycrdGFyZ2V0KSwgNTAwKTsNCgkJCQkJCS8vY29uc29sZS5sb2coJ2xvYWQgJysnI2dhbGVyaWVfJyt0YXJnZXQpOw0KCQkJCQl9DQoJCQkJCWVsc2UJew0KCQkJCQkJJCgnYm9keScpLnNjcm9sbFRvKGdhbGVyaWVzVG1wU2Nyb2xsW3RhcmdldF0sIDUwMCk7DQoJCQkJCQkvL2NvbnNvbGUubG9nKCdsb2FkICcrdGFyZ2V0KTsNCgkJCQkJfQ0KCQkJCQlnYWxlcmllc0N1cnJlbnQgPSB0YXJnZXQ7DQoJCQkJfSwNCg0KCQkJCXVwZGF0ZUhlaWdodDogZnVuY3Rpb24oKSB7DQoJCQkJCSQoJy5nYWxlcmllcywgLmdhbGVyaWUtZ3JvdXAnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCgkJCQkJCWlmICgkKHRoaXMpLmRhdGEoJ3RpbGUtd2lkdGgnKSkgew0KCQkJCQkJCXZhciBnYWxlcmllc1dpZHRoID0gJCh0aGlzKS53aWR0aCgpOw0KCQkJCQkJCWlmICghZ2FsZXJpZXNXaWR0aCkgew0KCQkJCQkJCQlnYWxlcmllc1dpZHRoID0gJCh0aGlzKS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykud2lkdGgoKTsNCgkJCQkJCQl9DQoJCQkJCQkJaWYgKGdhbGVyaWVzV2lkdGggPiAxMDApIHsNCgkJCQkJCQkJdmFyIG51bWJlckNvbCA9IE1hdGguY2VpbChnYWxlcmllc1dpZHRoIC8gJCh0aGlzKS5kYXRhKCd0aWxlLXdpZHRoJykpOw0KCQkJCQkJCQltYXhIZWlnaHQgPSAoZ2FsZXJpZXNXaWR0aCAvIG51bWJlckNvbCkgLyAkKHRoaXMpLmRhdGEoJ3RpbGUtd2lkdGgnKSAqICQodGhpcykuZGF0YSgndGlsZS1oZWlnaHQnKTsNCg0KCQkJCQkJCQkkKHRoaXMpLmZpbmQoJy5nYWxlcmllcy1ibG9jaycpLmNzcygnd2lkdGgnLCAoMTAwIC8gbnVtYmVyQ29sKSArICclJykuY3NzKCdwYWRkaW5nJywgZ2FsZXJpZVBhZGRpbmcgKyAncHgnKTsNCgkJCQkJCQkJJCh0aGlzKS5kYXRhKCdjb2wnLCBudW1iZXJDb2wpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfSk7DQoNCgkJCQkJJCgnLmdhbGVyaWUtZ3JvdXA6dmlzaWJsZScpLmNzcygnd2lkdGgnLCAnY2FsYygxMDAlICsgJysoZ2FsZXJpZVBhZGRpbmcqMikrJ3B4KScpLmNzcygnbWFyZ2luTGVmdCcsICctJytnYWxlcmllUGFkZGluZysncHgnKTsNCg0KCQkJCQkkKCcuZ2FsZXJpZXMtaW1nJykuaGVpZ2h0KHBhcnNlSW50KG1heEhlaWdodCkpOw0KDQoJCQkJCSQoJy5nYWxlcmllLWdyb3VwJykuZWFjaChmdW5jdGlvbiAoKSB7DQoJCQkJCQlpZiAoJCh0aGlzKS5kYXRhKCdwcmVzZW50YXRpb24nKSkgew0KCQkJCQkJCSQodGhpcykuZmluZCgnLmdhbGVyaWVzLWxlZ2VuZCcpLmNzcygnb3ZlcmZsb3cnLCAnaGlkZGVuJykuY3NzKCd3aGl0ZS1zcGFjZScsICdub3dyYXAnKS5jc3MoJ3RleHQtb3ZlcmZsb3cnLCAnZWxsaXBzaXMnKTsNCg0KCQkJCQkJCWlmICgkKHRoaXMpLmRhdGEoJ2NvbCcpID4gNCApIHsNCgkJCQkJCQkJJCh0aGlzKS5oZWlnaHQocGFyc2VJbnQobWF4SGVpZ2h0K2dhbGVyaWVMYWJlbEhlaWdodCsoZ2FsZXJpZVBhZGRpbmcqMikpKS5jc3MoJ292ZXJmbG93JywgJ2hpZGRlbicpOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlIGlmICgkKHRoaXMpLmRhdGEoJ2NvbCcpID09IDQgfHwgJCh0aGlzKS5kYXRhKCdjb2wnKSA9PSAzICkgew0KCQkJCQkJCQkkKHRoaXMpLmhlaWdodChwYXJzZUludCgobWF4SGVpZ2h0K2dhbGVyaWVMYWJlbEhlaWdodCsoZ2FsZXJpZVBhZGRpbmcqMikpKjIpKS5jc3MoJ292ZXJmbG93JywgJ2hpZGRlbicpOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlIHsNCgkJCQkJCQkJJCh0aGlzKS5oZWlnaHQoJ2F1dG8nKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0pOw0KDQoJCQkJfSwNCg0KCQkJCXVwZGF0ZVZpc2libGU6IGZ1bmN0aW9uKGdhbGVyaWUpIHsNCgkJCQkJaWYgKCFnYWxlcmllKSBnYWxlcmllID0gJCgnLmdhbGVyaWVzLWNvbnRhaW5lcicpOw0KCQkJCQllbHNlIGdhbGVyaWUgPSAkKGdhbGVyaWUpOw0KDQoJCQkJCWdhbGVyaWUuZmluZCgnLmdhbGVyaWVzLWltZzp2aXNpYmxlJykuZWFjaChmdW5jdGlvbiAoKSB7DQoJCQkJCQlpZiAoJCh0aGlzKS5kYXRhKCdzcmMnKSkgew0KCQkJCQkJCSQodGhpcykuYWRkQ2xhc3MoJ3RyYW5zcGFyZW50Jyk7DQoJCQkJCQkJJCh0aGlzKS5hdHRyKCdzcmMnLCAkKHRoaXMpLmRhdGEoJ3NyYycpKTsNCgkJCQkJCQkvLyQodGhpcykuY3NzKCdiYWNrZ3JvdW5kSW1hZ2UnLCAndXJsKCcrJCh0aGlzKS5kYXRhKCdzcmMnKSsnKScpOw0KCQkJCQkJCXZhciBjdXJyZW50SW1nID0gJCh0aGlzKQ0KCQkJCQkJCSQoJzxpbWcvPicpLmF0dHIoJ3NyYycsICQodGhpcykuZGF0YSgnc3JjJykpLm9uKCdsb2FkJywgZnVuY3Rpb24oKSB7DQoJCQkJCQkJCSQodGhpcykucmVtb3ZlKCk7IC8vIHByZXZlbnQgbWVtb3J5IGxlYWtzIGFzIEBiZW53ZWV0IHN1Z2dlc3RlZA0KCQkJCQkJCQljdXJyZW50SW1nLmNzcygnYmFja2dyb3VuZEltYWdlJywgJ3VybCgnKyQodGhpcykuYXR0cignc3JjJykrJyknKTsNCgkJCQkJCQkJY3VycmVudEltZy5yZW1vdmVDbGFzcygndHJhbnNwYXJlbnQnKTsNCgkJCQkJCQl9KTsNCgkJCQkJCQkkKHRoaXMpLmRhdGEoJ3NyYycsIG51bGwpOw0KCQkJCQkJfQ0KCQkJCQl9KTsNCgkJCQl9LA0KDQoJCQkJZGF0YVJlcXVlc3Q6IGZ1bmN0aW9uKCkgew0KCQkJCQkkKCcuZ2FsZXJpZXNbZGF0YS1leHRlcm5hbF0nKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQkJCQkJdmFyIGN1cnJlbnRHYWxlcmllID0gdGhpczsNCgkJCQkJCXZhciByZXF1ZXN0ID0gJC5hamF4KHsNCgkJCQkJCQl1cmw6ICQodGhpcykuZGF0YSgnZXh0ZXJuYWwnKSwNCgkJCQkJCQl0eXBlOiAiR0VUIiwNCgkJCQkJCQlkYXRhVHlwZTogImpzb24iLA0KCQkJCQkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsNCgkJCQkJCQkJZ2FsZXJpZVRwbC5kYXRhSW1wb3J0KGN1cnJlbnRHYWxlcmllLCBkYXRhLmRhdGEsIHRydWUpOw0KCQkJCQkJCX0NCgkJCQkJCX0pOw0KCQkJCQl9KTsNCgkJCQl9LA0KDQoJCQkJZGF0YUltcG9ydDogZnVuY3Rpb24oZ2FsZXJpZSwgZGF0YSwgcmVmcmVzaCkgew0KCQkJCQl2YXIgZGVmYXVsdFdpZHRoID0gJChnYWxlcmllKS5maW5kKCcuZ2FsZXJpZS1ncm91cCcpLmRhdGEoJ3RpbGUtd2lkdGgnKQ0KCQkJCQl2YXIgZGVmYXVsdEhlaWdodCA9ICQoZ2FsZXJpZSkuZmluZCgnLmdhbGVyaWUtZ3JvdXAnKS5kYXRhKCd0aWxlLWhlaWdodCcpDQoJCQkJCXZhciBnYWxpZCA9ICQoZ2FsZXJpZSkuZGF0YSgnaWQnKTsNCgkJCQkJdmFyIGh0bWwgPSAnJzsNCg0KCQkJCQkvLyBjaGFuZ2UgaW1hZ2UgY292ZXINCgkJCQkJaWYgKGRhdGEudXJsX3RoKSB7DQoJCQkJCQl2YXIgZ2FsTGluayA9ICQoJy5nYWxlcmllcy1saW5rW2RhdGEtaWQ9JyArIGdhbGlkICsgJ10nKTsNCgkJCQkJCWdhbExpbmsuZmluZCgnLmdhbGVyaWVzLWltZycpLmF0dHIoJ2RhdGEtc3JjJywgZGF0YS51cmxfdGgpLmF0dHIoJ3NyYycsIGRhdGEudXJsX3RoKS5kYXRhKCdzcmMnLCBkYXRhLnVybF90aCk7DQoJCQkJCQlnYWxlcmllVHBsLnVwZGF0ZVZpc2libGUoZ2FsTGluayk7DQoJCQkJCX0NCg0KCQkJCQkvLyBhZGQgZ2FsZXJpZXMNCgkJCQkJaWYgKGRhdGEuY2hpbGRzKSB7DQoJCQkJCQlmb3IgKHZhciBpID0gMCwgbGVuID0gZGF0YS5jaGlsZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsNCgkJCQkJCQlpdGVtID0gZGF0YS5jaGlsZHNbaV07DQoJCQkJCQkJaWYgKGl0ZW0uYWN0aWYgJiYgIWl0ZW0ucGFzc3dvcmRfY29kZSkgew0KCQkJCQkJCQl2YXIgbGFiZWwgPSBpdGVtLm5hbWU7DQoJCQkJCQkJCXZhciB0aHVtYiA9IGl0ZW0udXJsX3RoOw0KCQkJCQkJCQl2YXIgaW1nID0gaXRlbS51cmw7DQoJCQkJCQkJCXZhciBpZCA9ICQoZ2FsZXJpZSkuZGF0YSgnaWQnKSArICdfJyArIGl0ZW0uaWQ7DQoNCgkJCQkJCQkJLy8gY3JlYXRlIGdhbGVyaWUNCgkJCQkJCQkJdmFyIGdhbCA9ICQoJzxkaXYgY2xhc3M9ImdhbGVyaWVzIiBpZD0iZ2FsZXJpZV8nICsgaWQgKyAnIiBkYXRhLWlkPSInICsgaWQgKyAnIiBzdHlsZT0iZGlzcGxheTpub25lOyI+PGRpdiBjbGFzcz0iZ2FsZXJpZS1oZWFkZXIiPjxoMj4nICsgbGFiZWwgKyAnPC9oMj48L2Rpdj48ZGl2IGNsYXNzPSJnYWxlcmllLWdyb3VwIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImdhbGVyaWUtZ3JvdXAiIGRhdGEtdGlsZS13aWR0aD0iJyArIGRlZmF1bHRXaWR0aCArICciIGRhdGEtdGlsZS1oZWlnaHQ9IicgKyBkZWZhdWx0SGVpZ2h0ICsgJyIgZGF0YS1wcmVzZW50YXRpb249IiI+PC9kaXY+PC9kaXY+Jyk7DQoJCQkJCQkJCSQoJy5nYWxlcmllcy1jb250YWluZXInKS5hcHBlbmQoZ2FsKTsNCg0KCQkJCQkJCQkvLyBnbyBiYWNrIGJ0bg0KCQkJCQkJCQl2YXIgYmFjayA9ICc8YSBkYXRhLWlkPSInICsgZ2FsaWQgKyAnIiBjYXB0aW9uPSJSZXRvdXIiIGRhdGEtY2FwdGlvbj0iUmV0b3VyIiBjbGFzcz0iZ2FsZXJpZXMtbGluayBwYXJlbnQiIGRhdGEtaWQ9IicgKyBnYWxpZCArICciID48ZGl2IHN0eWxlPSIgZGlzcGxheTppbmxpbmUtYmxvY2s7IHpvb206MTsgdmVydGljYWwtYWxpZ246dG9wOyB0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgb3ZlcmZsb3c6aGlkZGVuOyAiIGNsYXNzPSJnYWxlcmllcy1ibG9jayIgY2xhc3M9ImltZ2RpdiIgPiA8ZGl2IGNsYXNzPSJnYWxlcmllcy1ibG9jay1pbnNpZGUiPiA8c3BhbiBib3JkZXI9IjAiIGRhdGEtc3JjPSJ0aGVtZXMvYmtzL2ltZy9wYXJlbnQucG5nIiBhbHQ9IlJldG91ciIgY2xhc3M9ImdhbGVyaWVzLWltZyBpbWdfdGgiIHN0eWxlPSJ3aWR0aDonICsgZGVmYXVsdFdpZHRoICsgJ3B4OyBoZWlnaHQ6JyArIGRlZmF1bHRIZWlnaHQgKyAncHg7ICI+IDwvc3Bhbj4gPGRpdiBjbGFzcz0iZ2FsZXJpZXMtbGVnZW5kIGxlZ2VuZGUiIHN0eWxlPSJtaW4taGVpZ2h0OjI1cHg7IHRleHQtYWxpZ246Y2VudGVyOyI+PHNwYW4+IFJldG91ciA8L3NwYW4+PC9kaXY+PC9kaXY+PC9kaXY+PC9hPic7DQoJCQkJCQkJCWdhbC5maW5kKCcuZ2FsZXJpZS1ncm91cCcpLmFwcGVuZChiYWNrKTsNCg0KCQkJCQkJCQkvLyBnbyB0byBnYWxlcmllIGJ0bg0KCQkJCQkJCQlodG1sICs9ICc8YSBkYXRhLWlkPSInICsgaWQgKyAnIiBjYXB0aW9uPSInICsgbGFiZWwgKyAnIiBkYXRhLWNhcHRpb249IicgKyBsYWJlbCArICciIGNsYXNzPSJnYWxlcmllcy1saW5rIEdhbGVyaWVBbGJ1bSIgZGF0YS1pZD0iJyArIGlkICsgJyIgPjxkaXYgc3R5bGU9IiBkaXNwbGF5OmlubGluZS1ibG9jazsgem9vbToxOyB2ZXJ0aWNhbC1hbGlnbjp0b3A7IHRleHQtYWxpZ246Y2VudGVyOyB3aWR0aDonICsgZGVmYXVsdFdpZHRoICsgJ3B4OyBvdmVyZmxvdzpoaWRkZW47ICIgY2xhc3M9ImdhbGVyaWVzLWJsb2NrIiBjbGFzcz0iaW1nZGl2IiA+IDxkaXYgY2xhc3M9ImdhbGVyaWVzLWJsb2NrLWluc2lkZSI+IDxzcGFuIGJvcmRlcj0iMCIgZGF0YS1zcmM9IicgKyB0aHVtYiArICciIGFsdD0iJyArIGxhYmVsICsgJyIgY2xhc3M9ImdhbGVyaWVzLWltZyBpbWdfdGgiIHN0eWxlPSJ3aWR0aDonICsgZGVmYXVsdFdpZHRoICsgJ3B4OyBoZWlnaHQ6JyArIGRlZmF1bHRIZWlnaHQgKyAncHg7ICI+IDwvc3Bhbj4gPGRpdiBjbGFzcz0iZ2FsZXJpZXMtbGVnZW5kIGxlZ2VuZGUiIHN0eWxlPSJtaW4taGVpZ2h0OjI1cHg7IHRleHQtYWxpZ246Y2VudGVyOyI+PHNwYW4+JyArIGxhYmVsICsgJzwvc3Bhbj48L2Rpdj48L2Rpdj48L2Rpdj48L2E+JzsNCg0KCQkJCQkJCQlnYWxlcmllVHBsLmRhdGFJbXBvcnQoZ2FsLCBpdGVtKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCQkvLyBhZGQgaW1hZ2VzDQoJCQkJCWlmIChkYXRhLmltYWdlcykgew0KCQkJCQkJZm9yICh2YXIgaSA9IDAsIGxlbiA9IGRhdGEuaW1hZ2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7DQoJCQkJCQkJaXRlbSA9IGRhdGEuaW1hZ2VzW2ldOw0KCQkJCQkJCWlmIChpdGVtLmFjdGlmICYmICFpdGVtLnBhc3N3b3JkX2NvZGUpIHsNCgkJCQkJCQkJdmFyIGxhYmVsID0gaXRlbS5uYW1lOw0KCQkJCQkJCQl2YXIgdGh1bWIgPSBpdGVtLnVybF90aDsNCgkJCQkJCQkJdmFyIGltZyA9IGl0ZW0udXJsOw0KCQkJCQkJCQl2YXIgaWQgPSAkKGdhbGVyaWUpLmRhdGEoJ2lkJykgKyAnXycgKyBpdGVtLmlkOw0KCQkJCQkJCQlodG1sICs9ICc8YSBocmVmPSInICsgaW1nICsgJyIgY2xhc3M9ImltZ2JveCIgcmVsPSJnYWxsZXJ5XycgKyBnYWxpZCArICciIGRhdGEtZmFuY3lib3g9ImdhbGxlcnlfJyArIGdhbGlkICsgJyIgY2FwdGlvbj0iJyArIGxhYmVsICsgJyIgZGF0YS1jYXB0aW9uPSInICsgbGFiZWwgKyAnIiBjbGFzcz0iZ2FsZXJpZXMtbGluayBHYWxlcmllSW1hZ2UiIGRhdGEtaWQ9IicgKyBpZCArICciPjxkaXYgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWJsb2NrO3pvb206MTt2ZXJ0aWNhbC1hbGlnbjp0b3A7dGV4dC1hbGlnbjpjZW50ZXI7IHdpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IG92ZXJmbG93OmhpZGRlbjsgImNsYXNzPSJnYWxlcmllcy1ibG9jayJjbGFzcz0iaW1nZGl2Ij48ZGl2IGNsYXNzPSJnYWxlcmllcy1ibG9jay1pbnNpZGUiPjxzcGFuIGJvcmRlcj0iMCIgZGF0YS1zcmM9IicgKyB0aHVtYiArICciIGFsdD0iJyArIGxhYmVsICsgJyIgY2xhc3M9ImdhbGVyaWVzLWltZyBpbWdfdGgiIHN0eWxlPSJ3aWR0aDonICsgZGVmYXVsdFdpZHRoICsgJ3B4OyBoZWlnaHQ6JyArIGRlZmF1bHRIZWlnaHQgKyAncHg7ICI+PC9zcGFuPjxkaXYgY2xhc3M9ImdhbGVyaWVzLWxlZ2VuZCBsZWdlbmRlIiBzdHlsZT0ibWluLWhlaWdodDoyNXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsiPjxzcGFuPicgKyBsYWJlbCArICc8L3NwYW4+PC9kaXY+PC9kaXY+PC9kaXY+PC9hPic7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoNCgkJCQkJJChnYWxlcmllKS5maW5kKCcuZ2FsZXJpZS1ncm91cCcpLmFwcGVuZChodG1sKTsNCg0KCQkJCQlnYWxlcmllVHBsLmJpbmQoJChnYWxlcmllKSk7DQoNCgkJCQkJaWYgKHJlZnJlc2gpIHsNCgkJCQkJCWdhbGVyaWVUcGwudXBkYXRlVmlzaWJsZSgpOw0KCQkJCQkJZ2FsZXJpZVRwbC51cGRhdGVIZWlnaHQoKTsNCgkJCQkJfQ0KCQkJCX0sDQoNCgkJCQliaW5kOiBmdW5jdGlvbihnYWxlcmllKSB7DQoJCQkJCWlmICghZ2FsZXJpZSkgZ2FsZXJpZSA9ICQoJy5nYWxlcmllcy1jb250YWluZXInKTsNCgkJCQkJZWxzZSBnYWxlcmllID0gJChnYWxlcmllKTsNCg0KDQoJCQkJCWdhbGVyaWUuZmluZCgnLmdhbGVyaWVzLWltZycpLmFkZENsYXNzKCd0cmFuc3BhcmVudCcpOw0KDQoJCQkJCWdhbGVyaWUuZmluZCgnLmdhbGVyaWVzLWltZycpLm5vdCgiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uICgpIHsNCgkJCQkJCWlmICghJCh0aGlzKS5kYXRhKCJzcmMiKSkgew0KCQkJCQkJCSQodGhpcykuZGF0YSgic3JjIiwgdGhpcy5zcmMpOw0KCQkJCQkJCXRoaXMuc3JjID0gImpzL2JsYW5rLmdpZiI7DQoJCQkJCQl9DQoJCQkJCX0pOw0KDQoJCQkJCXZhciBnYWxlcmllc0xpbmsgPSBnYWxlcmllLmZpbmQoJy5nYWxlcmllcy1saW5rOm5vdCguYmluZGVkKScpOw0KCQkJCQlnYWxlcmllc0xpbmsuYWRkQ2xhc3MoJ2JpbmRlZCcpOw0KCQkJCQlnYWxlcmllc0xpbmsuY2xpY2soZnVuY3Rpb24oKSB7DQoJCQkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGdhbGVyaWVUcGwudXBkYXRlVmlzaWJsZSgpOyB9LCAxMDApOw0KCQkJCQl9KTsNCg0KDQoJCQkJCS8vIENvbnRlbnUgZGUgZ2FsZXJpZQ0KCQkJCQlnYWxlcmllc0xpbmsuZmlsdGVyKCc6bm90KC5zZWN1cmUpJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCQkJCQlnYWxlcmllVHBsLnNob3dHYWxlcmllKHRoaXMsICQodGhpcykuZGF0YSgnaWQnKSk7DQoJCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCX0pOw0KDQoJCQkJCS8vIEFjY++/vXMgc2VjdXJlDQoJCQkJCWdhbGVyaWVzTGluay5maWx0ZXIoJy5zZWN1cmUnKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCQkJCXdpbmRvdy5zZWN1cmVBY2Nlc3NJdGVtKCQodGhpcykuZGF0YSgnaWQnKSk7DQoJCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCX0pOw0KCQkJCX0NCg0KCQkJfTsNCg0KCQkJd2luZG93LmdhbGVyaWVUcGwgPSBnYWxlcmllVHBsOw0KDQoJCQl3aW5kb3cucmVwb3J0SXRlbSA9IGZ1bmN0aW9uKGlkKSB7DQogICAgICAgICAgICAgICAgaWYgKCFpc051bWVyaWMoaWQpKSB7DQogICAgICAgICAgICAgICAgICAgIGlkID0gaWQuZGF0YSgnaWQnKTsNCiAgICAgICAgICAgICAgICB9DQoNCgkJCQkkLndpbmRvdyh7DQoJCQkJCWlkOiAncmVwb3J0SXRlbScraWQsDQoJCQkJCXRpdGxlOiAnUmVwb3J0ZXIgdW4gcHJvYmxlbWUgYXZlYyB1bmUgaW1hZ2UnLA0KCQkJCQl1cmw6ICdhZG1pbi9nYWxlcmllcy9pbWFnZS9yZXBvcnQvJytpZCsnP291dHB1dD10ZXh0JywNCgkJCQkJaWNvbjogJ3N0YXR1cy13YXJuaW5nJywNCgkJCQkJbWV0aG9kOiAnYWpheCcsDQoJCQkJCW1heFdpZHRoOiAtMSwJCSAvLyB0aGUgbWluaW11bSB3aWR0aCwgaWYgLTEgbWVhbnMgbm8gY2hlY2tpbmcNCgkJCQkJbWF4SGVpZ2h0OiAtMSwJCSAvLyB0aGUgbWluaW11bSBoZWlnaHQsIGlmIC0xIG1lYW5zIG5vIGNoZWNraW5nDQoJCQkJCXNob3dGb290ZXI6IGZhbHNlLA0KCQkJCQltYXhpbWl6YWJsZTogZmFsc2UsDQoJCQkJCWNsb3NhYmxlOiB0cnVlLA0KCQkJCQltaW5pbWl6YWJsZTogZmFsc2UsDQoJCQkJCXNob3dNb2RhbDogdHJ1ZSwNCgkJCQkJd2lkdGg6IDkwMCwNCgkJCQkJaGVpZ2h0OiA1NzUsDQoJCQkJCWNoZWNrQm91bmRhcnk6IHRydWUsDQoJCQkJCXdpdGhpbkJyb3dzZXJXaW5kb3c6IGZhbHNlLA0KCQkJCQlvbklmcmFtZUVuZDogZnVuY3Rpb24oKSB7fSwNCgkJCQkJb25DbG9zZTogZnVuY3Rpb24oKSB7DQoJCQkJCQlicm93c2VyQWN0aW9uUnVuKCdyZWZyZXNoJyk7DQoJCQkJCX0NCgkJCQl9KTsNCgkJCX07DQogICAgICAgICAgICB3aW5kb3cuc2VjdXJlQWNjZXNzSXRlbSA9IGZ1bmN0aW9uKGlkKSB7DQogICAgICAgICAgICAgICAgJC53aW5kb3coew0KICAgICAgICAgICAgICAgICAgICBpZDogJ3NlY3VyZUFjY2Vzc0l0ZW0nK2lkLA0KICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0FjYyZlZ3JhdmU7cyBzJmVhY3V0ZTtjdXJpcyZlYWN1dGU7JywNCiAgICAgICAgICAgICAgICAgICAgdXJsOiAnYWRtaW4vZ2FsZXJpZXMvaW1hZ2UvdW5sb2NrLycraWQsDQogICAgICAgICAgICAgICAgICAgIGljb246ICdpbWctc2tpbi9zZXRzL2ltYWdpY2FsLXByby9tZWRpdW0vc2VjdXJlLWtleS5wbmcnLA0KICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdhamF4JywNCiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IC0xLAkJIC8vIHRoZSBtaW5pbXVtIHdpZHRoLCBpZiAtMSBtZWFucyBubyBjaGVja2luZw0KICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IC0xLAkJIC8vIHRoZSBtaW5pbXVtIGhlaWdodCwgaWYgLTEgbWVhbnMgbm8gY2hlY2tpbmcNCiAgICAgICAgICAgICAgICAgICAgc2hvd0Zvb3RlcjogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsDQoJCQkJCW1pbmltaXphYmxlOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgc2hvd01vZGFsOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICB3aWR0aDogNTYwLA0KICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDU1MCwNCiAgICAgICAgICAgICAgICAgICAgY2hlY2tCb3VuZGFyeTogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgd2l0aGluQnJvd3NlcldpbmRvdzogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIG9uSWZyYW1lRW5kOiBmdW5jdGlvbigpIHt9LA0KICAgICAgICAgICAgICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJBY3Rpb25SdW4oJ3JlZnJlc2gnKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfTsNCg0KCQkJJCggd2luZG93ICkucmVzaXplKGZ1bmN0aW9uKCkgew0KCQkJCWdhbGVyaWVUcGwudXBkYXRlSGVpZ2h0KCk7DQoJCQl9KTsNCg0KCQkJJChmdW5jdGlvbiAoKSB7DQoJCQkJZ2FsZXJpZVRwbC5iaW5kKCk7DQoJCQkJZ2FsZXJpZVRwbC51cGRhdGVWaXNpYmxlKCk7DQoJCQkJZ2FsZXJpZVRwbC51cGRhdGVIZWlnaHQoKTsNCgkJCX0pOw0KDQoJCQkkKHdpbmRvdykubG9hZChmdW5jdGlvbigpIHsNCgkJCQlnYWxlcmllVHBsLnVwZGF0ZUhlaWdodCgpOw0KCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgZ2FsZXJpZVRwbC51cGRhdGVIZWlnaHQoKTsgfSwgNTAwKTsNCgkJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGdhbGVyaWVUcGwudXBkYXRlSGVpZ2h0KCk7IH0sIDEwMDApOw0KDQoJCQkJZ2FsZXJpZVRwbC5kYXRhUmVxdWVzdCgpOw0KCQkJfSk7DQoNCg0KCQkJLy88L3NjcmlwdD4=