{"title":"R\u00e9servez votre Pixcube maintenant","nolayout":false,"breadcrumbs":[{"url":"http:\/\/www.pixcube.fr\/","name":"Pixcube","title":"Pixcube"},{"url":"http:\/\/www.pixcube.fr\/reserver\/","name":"R\u00e9servez votre Pixcube","title":"R\u00e9servez votre Pixcube"}],"content":"PCEtLSBTdGFydCBDdXN0b20gTW9kdWxlIENsZW0gLS0+IDxzY3JpcHQ+JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKCQkJCSQoImJvZHkiKS5yZW1vdmVDbGFzcygiZGVmYXVsdCIpLmFkZENsYXNzKCJyZXNlcnZlciIpLmF0dHIoImlkIiwicGFnZXNfcnVuX3Jlc2VydmVyIik7CgkJCX0pOzwvc2NyaXB0PjxzY3JpcHQ+JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKCQkJCQkJJCgibmF2Lm5hdmJhci1maXhlZC10b3AiKS5hZnRlcignJyk7CgkJCQkJfSk7PC9zY3JpcHQ+DTxzY3JpcHQ+DS8qKgoqIEphdmFzY3JpcHQgRmlsZSA6IFBpeGN1YmUgQm9va2luZwoqLwoKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKCQoJLy8gQWRkaW5nIG9wdGlvbnMKCSQoJy5qc19hZGRfb3B0aW9uJykuY2xpY2soZnVuY3Rpb24oKXsKCQl2YXIgb3B0aW9uX2lkID0gJCh0aGlzKS5hdHRyKCdkYXRhLWlkJyk7CgkJaWYgKG9wdGlvbl9pZCl7CgkJCWFkZE9yUmVtb3ZlT3B0aW9uKG9wdGlvbl9pZCk7CgkJfQkJCgl9KTsKCQoJLy8gTGF1bmNoIHNlYXJjaCBmb3JtCgkkKCcjanNfc2VuZF9zZWFyY2gnKS5jbGljayhmdW5jdGlvbihlKXsKCQlwcm9jZXNzU2VhcmNoRm9ybSgpOwoJfSk7CgkKCS8vIEF1dG9jb21wbGV0ZSBjaXR5IGZpZWxkCgkkKCcjanNfbG9jYXRpb25fc3RyJykua2V5dXAoZnVuY3Rpb24ocil7CgkJdmFyIHR5cGVkID0gJCh0aGlzKS52YWwoKTsKCQkkKCcjanNfdHlwZWFoZWFkX3RhcmdldCcpLmh0bWwoJzxpbWcgc3JjPSJodHRwczovL3BpeGN1YmUuYXdlbHR5LmZyL3N0YXRpYy9pbS9sYXlvdXQvbG9hZGVyLmdpZiIgYWx0PSJDaGFyZ2VtZW50Li4uIiBzdHlsZT0iZGlzcGxheTpibG9jazttYXJnaW46MTJweCIgLz4nKS5zaG93KCk7CgkJZGVsYXkoZnVuY3Rpb24oKXsKCQkJJC5wb3N0KCdodHRwczovL3BpeGN1YmUuYXdlbHR5LmZyL2FqYXgvZ2V0Y2l0eWJ5bmFtZScsIHt0eXBlZDp0eXBlZH0sIGZ1bmN0aW9uKHIpewoJCQkJCgkJCQkvLyBEZWNvZGUgcmVzdWx0aW5nIEpTT04KCQkJCXZhciByZXN1bHRpbmcgPSBKU09OLnBhcnNlKHIpOwoJCQkJdmFyIHR5cGVhaGVhZF9jb250ZW50ID0gcmVzdWx0aW5nLnR5cGVhaGVhZDsKCQkJCXZhciBkdXJhdGlvbl9jb250ZW50ID0gcmVzdWx0aW5nLmR1cmF0aW9uOwoJCQkJdmFyIGhvdXJfY29udGVudCA9IHJlc3VsdGluZy5ob3VyOwoJCQkJCQkJCQoJCQkJJCgnI2pzX3R5cGVhaGVhZF90YXJnZXQnKS5odG1sKHR5cGVhaGVhZF9jb250ZW50KTsKCQkJCSQoJyNqc19kdXJhdGlvbicpLmh0bWwoZHVyYXRpb25fY29udGVudCk7CgkJCQkkKCcjanNfaG91cicpLmh0bWwoaG91cl9jb250ZW50KTsKCQkJCQoJCQkJaWYgKHR5cGVkPT0iIikKCQkJCXsKCQkJCQkkKCcjanNfdHlwZWFoZWFkX3RhcmdldCcpLmh0bWwoJycpOwoJCQkJCSQoJyNqc19ob3VyJykuaHRtbCgnPG9wdGlvbiB2YWx1ZT0iMCI+LTwvb3B0aW9uPicpOwoJCQkJCSQoJyNqc19kdXJhdGlvbicpLmh0bWwoJzxvcHRpb24gdmFsdWU9IjAiPi08L29wdGlvbj4nKTsKCQkJCQkkKCcjanNfZHVyYXRpb24nKS5hdHRyKCdkaXNhYmxlZCcsIHRydWUpOwoJCQkJCSQoJyNqc19ob3VyJykuYXR0cignZGlzYWJsZWQnLCB0cnVlKTsKCQkJCX0KCQkJfSk7CgkJfSwgMjAwICk7Cgl9KTsKCQoJLy8gQ2xpY2sgb24gYSBjaXR5IG5hbWUgKHR5cGVhaGVhZCkKCSQoJyNqc190eXBlYWhlYWRfdGFyZ2V0Jykub24oJ2NsaWNrJywnbGkudHlwZWFoZWFkX2l0ZW1fY2l0eScsIGZ1bmN0aW9uKHIpewoJCXZhciBjaXR5X2lkID0gJCh0aGlzKS5hdHRyKCdkYXRhLWlkJyk7CgkJdmFyIGNpdHlfbmFtZSA9ICQodGhpcykuYXR0cignZGF0YS1uYW1lJyk7CgoJCS8vIFNldHMgZmllbGRzCgkJJCgnI2pzX2xvY2F0aW9uX3N0cicpLnZhbChjaXR5X25hbWUpOwoJCSQoJyNqc19sb2NhdGlvbicpLnZhbChjaXR5X2lkKTsKCQkkKCcjanNfdHlwZWFoZWFkX3RhcmdldCcpLmhpZGUoKTsKCQkKCQkvLyBEaXNwbGF5cyBsb2FkaW5nIGluIGR1cmF0aW9uIGFuZCBob3VyIGZpZWxkcwoJCSQoJyNqc19kdXJhdGlvbicpLmh0bWwoJzxvcHRpb24gdmFsdWU9IkNoYXJnZW1lbnQuLi4iPjwvb3B0aW9uPicpOwoJCSQoJyNqc19ob3VyJykuaHRtbCgnPG9wdGlvbiB2YWx1ZT0iQ2hhcmdlbWVudC4uLiI+PC9vcHRpb24+Jyk7CgkJCgkJLy8gU2V0cyBhbiBhc3luY2hyb25vdXMgcmVxdWVzdCB0byBnZXQgZHVyYXRpb24gYW5kIHN0YXJ0IHRpbWUsIGRlcGVuZGluZyBvbiB0aGUgbG9jYXRpb24KCQkkLnBvc3QoJ2h0dHBzOi8vcGl4Y3ViZS5hd2VsdHkuZnIvYWpheC9nZXRkeW5hbWljZm9ybWZpZWxkcycsIHtjaXR5X2lkOmNpdHlfaWR9LCBmdW5jdGlvbihyKXsKCQkJCgkJCS8vIERlY29kZSByZXN1bHRpbmcgSlNPTgoJCQl2YXIgcmVzdWx0aW5nID0gSlNPTi5wYXJzZShyKTsKCQkJdmFyIGR1cmF0aW9uX2NvbnRlbnQgPSByZXN1bHRpbmcuZHVyYXRpb247CgkJCXZhciBob3VyX2NvbnRlbnQgPSByZXN1bHRpbmcuaG91cjsKCgkJCSQoJyNqc19kdXJhdGlvbicpLmh0bWwoZHVyYXRpb25fY29udGVudCk7CgkJCSQoJyNqc19ob3VyJykuaHRtbChob3VyX2NvbnRlbnQpOwoJCQkKCQkJaWYgKCFkdXJhdGlvbl9jb250ZW50Lm1hdGNoKC92YWx1ZVw9XCIwXCIvaSkgJiYgIWhvdXJfY29udGVudC5tYXRjaCgvdmFsdWVcPVwiMFwiL2kpKQoJCQl7CgkJCQkvLyBFbmFibGVzIGZpZWxkcwoJCQkJJCgnI2pzX2R1cmF0aW9uJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKCQkJCSQoJyNqc19ob3VyJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8vIERpc2FibGVzIGZpZWxkcwoJCQkJJCgnI2pzX2R1cmF0aW9uJykuYXR0cignZGlzYWJsZWQnLCB0cnVlKTsKCQkJCSQoJyNqc19ob3VyJykuYXR0cignZGlzYWJsZWQnLCB0cnVlKTsKCQkJfQoJCX0pOwoJCQoJCSQoJyNqc19kYXknKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOwoJfSk7CgkKCS8vIFNlbGVjdGluZyBkYXkgLyBpZiB3ZWVrZW5kIGFuZCB0cmFuc3BvcnRlciA6IGRpZmZlcmVudCBtb2RhbGl0aWVzCgkkKCcjanNfZGF5JykuY2hhbmdlKGZ1bmN0aW9uKCl7CgkJdmFyIGRheSA9ICQodGhpcykudmFsKCk7CgkJdmFyIGxvY2F0aW9uID0gJCgnI2pzX2xvY2F0aW9uJykudmFsKCk7CgkJaWYgKGRheS5tYXRjaCgvXlswLTldezJ9XC9bMC05XXsyfVwvWzAtOV17NH0kL2kpICYmIGxvY2F0aW9uICE9ICcnICYmIGxvY2F0aW9uICE9ICcwJyAmJiBsb2NhdGlvbiAhPSB1bmRlZmluZWQpCgkJewoJCQkkLnBvc3QoJ2h0dHBzOi8vcGl4Y3ViZS5hd2VsdHkuZnIvYWpheC9zZXR3ZWVrZGF5Jywge2RheTpkYXksIGxvY2F0aW9uOmxvY2F0aW9ufSwgZnVuY3Rpb24ocil7CgkJCQlpZiAociAhPSAnJyl7CgkJCQkJdmFyIHJlc3VsdGluZyA9IEpTT04ucGFyc2Uocik7CgkJCQkJdmFyIGR1cmF0aW9uX2NvbnRlbnQgPSByZXN1bHRpbmcuZHVyYXRpb247CgkJCQkJdmFyIGhvdXJfY29udGVudCA9IHJlc3VsdGluZy5ob3VyOwoJCQkJCSQoJyNqc19kdXJhdGlvbicpLmh0bWwoZHVyYXRpb25fY29udGVudCk7CgkJCQkJJCgnI2pzX2hvdXInKS5odG1sKGhvdXJfY29udGVudCk7CgkJCQl9CgkJCX0pOwoJCX0KCX0pOwoJCgkKCS8vIEZpcnN0IHBhZ2UgKHJlc3VsdHMpIHByb2Nlc3MKCSQoJ2EuYnRuX3NlbmRfYm9va2luZycpLmNsaWNrKGZ1bmN0aW9uKGUpewoJCXZhciBlbWFpbCA9ICQoJyNqc19maWVsZF9lbWFpbCcpLnZhbCgpOwoJCXZhciBwaG9uZSA9ICQoJyNqc19maWVsZF9waG9uZScpLnZhbCgpOwoJCWlmIChlbWFpbCA9PSAnJyB8fCBwaG9uZSA9PSAnJykKCQl7CgkJCWFsZXJ0KCdWZXVpbGxleiByZW5zZWlnbmVyIHZvdHJlIGFkcmVzc2UgZS1tYWlsIGV0IHZvdHJlIG51bcOpcm8gZGUgdMOpbMOpcGhvbmUgYWZpbiBxdWUgbm91cyBwdWlzc2lvbnMgdm91cyByZWNvbnRhY3Rlci4nKTsKCQl9CgkJZWxzZQoJCXsKCQkJLy8gUGlja3MgYWxsIHZhcmlhYmxlcwoJCQl2YXIgcGNfY29sb3IgPSAkKCcjY29sb3JpcycpLnZhbCgpOwoJCQl2YXIgaGlkZGVuX2pzX2R1cmF0aW9uID0gJCgnI2hpZGRlbl9qc19kdXJhdGlvbicpLnZhbCgpOwoJCQl2YXIgaGlkZGVuX2pzX3RyYW5zcG9ydCA9ICQoJyNoaWRkZW5fanNfdHJhbnNwb3J0JykudmFsKCk7CgkJCXZhciBoaWRkZW5fanNfZnJvbV9jaXR5ID0gJCgnI2hpZGRlbl9qc19mcm9tX2NpdHknKS52YWwoKTsKCQkJdmFyIGhpZGRlbl9qc190b19jaXR5ID0gJCgnI2hpZGRlbl9qc190b19jaXR5JykudmFsKCk7CgkJCXZhciBoaWRkZW5fanNfdHJhdmVsX2Rpc3RhbmNlID0gJCgnI2hpZGRlbl9qc190cmF2ZWxfZGlzdGFuY2UnKS52YWwoKTsKCQkJdmFyIGhpZGRlbl9qc19jaXR5ID0gJCgnI2hpZGRlbl9qc19jaXR5JykudmFsKCk7CgkJCXZhciBoaWRkZW5fanNfcXVhbnRpdHkgPSAkKCcjaGlkZGVuX2pzX3F1YW50aXR5JykudmFsKCk7CgkJCXZhciBoaWRkZW5fanNfZGF0ZSA9ICQoJyNoaWRkZW5fanNfZGF0ZScpLnZhbCgpOwoJCQl2YXIgaGlkZGVuX2pzX3BhcnRuZXIgPSAkKCcjaGlkZGVuX2pzX3BhcnRuZXInKS52YWwoKTsKCQkJdmFyIGhpZGRlbl9qc19ob3VyID0gJCgnI2hpZGRlbl9qc19ob3VyJykudmFsKCk7CgkJCXZhciBqc19vcHRpb25zX2VuY29kZWQgPSAkKCcjanNfb3B0aW9uc19lbmNvZGVkJykudmFsKCk7CgkJCXZhciBqc19wcmljZV90b3RhbF9vcHRpb25zID0gJCgnI2pzX3ByaWNlX3RvdGFsX29wdGlvbnMnKS52YWwoKTsKCQkJdmFyIGpzX3ByaWNlX2RlbGl2ZXJ5ID0gJCgnI2pzX3ByaWNlX2RlbGl2ZXJ5JykudmFsKCk7CgkJCXZhciBqc19wcmljZV9yZW50YWwgPSAkKCcjanNfcHJpY2VfcmVudGFsJykudmFsKCk7CgkJCXZhciBqc19wcmljZV90b3RhbCA9ICQoJyNqc19wcmljZV90b3RhbCcpLnZhbCgpOwoJCQkKCQkJJC5wb3N0KCdodHRwczovL3BpeGN1YmUuYXdlbHR5LmZyL2FqYXgvc2F2ZV9vZmZlcicsIHtlbWFpbDplbWFpbCxwaG9uZTpwaG9uZSxwY19jb2xvcjpwY19jb2xvciwgaGlkZGVuX2pzX2R1cmF0aW9uOmhpZGRlbl9qc19kdXJhdGlvbiwKCQkJCWhpZGRlbl9qc190cmFuc3BvcnQ6aGlkZGVuX2pzX3RyYW5zcG9ydCxoaWRkZW5fanNfZnJvbV9jaXR5OmhpZGRlbl9qc19mcm9tX2NpdHksaGlkZGVuX2pzX3RvX2NpdHk6aGlkZGVuX2pzX3RvX2NpdHksCgkJCQloaWRkZW5fanNfdHJhdmVsX2Rpc3RhbmNlOmhpZGRlbl9qc190cmF2ZWxfZGlzdGFuY2UsaGlkZGVuX2pzX2NpdHk6aGlkZGVuX2pzX2NpdHksaGlkZGVuX2pzX3F1YW50aXR5OmhpZGRlbl9qc19xdWFudGl0eSwKCQkJCWhpZGRlbl9qc19kYXRlOmhpZGRlbl9qc19kYXRlLGhpZGRlbl9qc19ob3VyOmhpZGRlbl9qc19ob3VyLGhpZGRlbl9qc19wYXJ0bmVyOmhpZGRlbl9qc19wYXJ0bmVyLGpzX29wdGlvbnNfZW5jb2RlZDpqc19vcHRpb25zX2VuY29kZWQsanNfcHJpY2VfdG90YWxfb3B0aW9uczpqc19wcmljZV90b3RhbF9vcHRpb25zLAoJCQkJanNfcHJpY2VfZGVsaXZlcnk6anNfcHJpY2VfZGVsaXZlcnksanNfcHJpY2VfcmVudGFsOmpzX3ByaWNlX3JlbnRhbCxqc19wcmljZV90b3RhbDpqc19wcmljZV90b3RhbH0sIGZ1bmN0aW9uKHIpewoJCQkJCgkJCQkJaWYgKHBhcnNlSW50KHIpID4gMCl7CgkJCQkJCQoJCQkJCQkvKioKCQkJCQkJICogQGRlcHJlY2F0ZWQKCQkJCQkJKiAkKCcuanNfaGlkZV9zZW50Jykuc2xpZGVVcCgpOwoJCQkJCQkqICQoJyNzZW5kX2NvbmZpcm1fbXNnJykuc2hvdygpOwoJCQkJCQkqLwoJCQkJCQkKCQkJCQkJLy8gU2VuZHMgdG8gbmV4dCBwYWdlIChzdW1tYXJ5KQoJCQkJCQlsb2NhdGlvbi5ocmVmID0gJy9yZXNlcnZlci9zdW1tYXJ5LycrcisnLyc7CgkJCQkJCQoJCQkJCX0gZWxzZSB7CgkJCQkJCWFsZXJ0KCdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSBsb3JzIGRlIGxcJ2Vudm9pIGRlIHZvdHJlIGRlbWFuZGUgZGUgcsOpc2VydmF0aW9uLiBOb3VzIHZvdXMgaW52aXRvbnMgw6Agbm91cyBjb250YWN0ZXIgcGFyIHTDqWzDqXBob25lIG91IHZpYSBsYSBydWJyaXF1ZSBDb250YWN0LicpCgkJCQkJfQoJCQkJCQoJCQl9KTsKCQl9Cgl9KTsKCQoJLy8gU2VuZCBtZSB0aGUgcmVzdWx0cyBieSBlbWFpbAoJJCgnI2pzX3NlbmRtZV9lbWFpbCcpLmNsaWNrKGZ1bmN0aW9uKGUpewoJCSQoJyNteWVtYWlsX2Jsb2NrJykuc2xpZGVUb2dnbGUoKTsKCX0pOwoJCgkkKCcjanNfbXllbWFpbF9zZW5kJykuY2xpY2soZnVuY3Rpb24oZSl7CgkJdmFyIGVtYWlsID0gJCgnI2pzX215ZW1haWxfZmllbGQnKS52YWwoKTsKCQlpZiAoZW1haWwgPT0gJycgfHwgIWVtYWlsLm1hdGNoKC8uK1xALisvKSl7CgkJCWFsZXJ0KCdWZXVpbGxleiByZW5zZWlnbmVyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLicpOwoJCX0gZWxzZSB7CgkJCS8vIFBpY2tzIGFsbCB2YXJpYWJsZXMKCQkJdmFyIHBjX2NvbG9yID0gJCgnI2NvbG9yaXMnKS52YWwoKTsKCQkJdmFyIGhpZGRlbl9qc19kdXJhdGlvbiA9ICQoJyNoaWRkZW5fanNfZHVyYXRpb24nKS52YWwoKTsKCQkJdmFyIGhpZGRlbl9qc190cmFuc3BvcnQgPSAkKCcjaGlkZGVuX2pzX3RyYW5zcG9ydCcpLnZhbCgpOwoJCQl2YXIgaGlkZGVuX2pzX2Zyb21fY2l0eSA9ICQoJyNoaWRkZW5fanNfZnJvbV9jaXR5JykudmFsKCk7CgkJCXZhciBoaWRkZW5fanNfdG9fY2l0eSA9ICQoJyNoaWRkZW5fanNfdG9fY2l0eScpLnZhbCgpOwoJCQl2YXIgaGlkZGVuX2pzX3RyYXZlbF9kaXN0YW5jZSA9ICQoJyNoaWRkZW5fanNfdHJhdmVsX2Rpc3RhbmNlJykudmFsKCk7CgkJCXZhciBoaWRkZW5fanNfY2l0eSA9ICQoJyNoaWRkZW5fanNfY2l0eScpLnZhbCgpOwoJCQl2YXIgaGlkZGVuX2pzX3F1YW50aXR5ID0gJCgnI2hpZGRlbl9qc19xdWFudGl0eScpLnZhbCgpOwoJCQl2YXIgaGlkZGVuX2pzX2RhdGUgPSAkKCcjaGlkZGVuX2pzX2RhdGUnKS52YWwoKTsKCQkJdmFyIGhpZGRlbl9qc19wYXJ0bmVyID0gJCgnI2hpZGRlbl9qc19wYXJ0bmVyJykudmFsKCk7CgkJCXZhciBoaWRkZW5fanNfaG91ciA9ICQoJyNoaWRkZW5fanNfaG91cicpLnZhbCgpOwoJCQl2YXIganNfb3B0aW9uc19lbmNvZGVkID0gJCgnI2pzX29wdGlvbnNfZW5jb2RlZCcpLnZhbCgpOwoJCQl2YXIganNfcHJpY2VfdG90YWxfb3B0aW9ucyA9ICQoJyNqc19wcmljZV90b3RhbF9vcHRpb25zJykudmFsKCk7CgkJCXZhciBqc19wcmljZV9kZWxpdmVyeSA9ICQoJyNqc19wcmljZV9kZWxpdmVyeScpLnZhbCgpOwoJCQl2YXIganNfcHJpY2VfcmVudGFsID0gJCgnI2pzX3ByaWNlX3JlbnRhbCcpLnZhbCgpOwoJCQl2YXIganNfcHJpY2VfdG90YWwgPSAkKCcjanNfcHJpY2VfdG90YWwnKS52YWwoKTsKCQkJCgkJCXZhciBwaG9uZSA9ICctJzsKCQkJCgkJCSQucG9zdCgnaHR0cHM6Ly9waXhjdWJlLmF3ZWx0eS5mci9hamF4L3NlbmRfbXllbWFpbCcsIHtlbWFpbDplbWFpbCxwaG9uZTpwaG9uZSxwY19jb2xvcjpwY19jb2xvciwgaGlkZGVuX2pzX2R1cmF0aW9uOmhpZGRlbl9qc19kdXJhdGlvbiwKCQkJCWhpZGRlbl9qc190cmFuc3BvcnQ6aGlkZGVuX2pzX3RyYW5zcG9ydCxoaWRkZW5fanNfZnJvbV9jaXR5OmhpZGRlbl9qc19mcm9tX2NpdHksaGlkZGVuX2pzX3RvX2NpdHk6aGlkZGVuX2pzX3RvX2NpdHksCgkJCQloaWRkZW5fanNfdHJhdmVsX2Rpc3RhbmNlOmhpZGRlbl9qc190cmF2ZWxfZGlzdGFuY2UsaGlkZGVuX2pzX2NpdHk6aGlkZGVuX2pzX2NpdHksaGlkZGVuX2pzX3F1YW50aXR5OmhpZGRlbl9qc19xdWFudGl0eSwKCQkJCWhpZGRlbl9qc19kYXRlOmhpZGRlbl9qc19kYXRlLGhpZGRlbl9qc19ob3VyOmhpZGRlbl9qc19ob3VyLGhpZGRlbl9qc19wYXJ0bmVyOmhpZGRlbl9qc19wYXJ0bmVyLGpzX29wdGlvbnNfZW5jb2RlZDpqc19vcHRpb25zX2VuY29kZWQsanNfcHJpY2VfdG90YWxfb3B0aW9uczpqc19wcmljZV90b3RhbF9vcHRpb25zLAoJCQkJanNfcHJpY2VfZGVsaXZlcnk6anNfcHJpY2VfZGVsaXZlcnksanNfcHJpY2VfcmVudGFsOmpzX3ByaWNlX3JlbnRhbCxqc19wcmljZV90b3RhbDpqc19wcmljZV90b3RhbH0sIGZ1bmN0aW9uKHIpewoJCQkJCgkJCQkJaWYgKHIgPT0gJ29rJyl7CgkJCQkJCSQoJyNteWVtYWlsX2Jsb2NrJykuc2xpZGVVcCgpOwoJCQkJCQkkKCcjc2VuZF9jb25maXJtX215ZW1haWwnKS5zaG93KCk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJYWxlcnQoJ1VuZSBlcnJldXIgZXN0IHN1cnZlbnVlIGxvcnMgZGUgbFwnZW52b2kgZGUgbFwnZW1haWwuIE5vdXMgdm91cyBpbnZpdG9ucyDDoCB2w6lyaWZpZXIgcXVlIHRvdXMgbGVzIGNoYW1wcyBzb250IHJlbnNlaWduw6lzIGV0IHLDqWVzc2F5ZXIuJykKCQkJCQl9CgkJCQkJCgkJCX0pOwoJCX0KCX0pOwoJCgkvLyBQcmludCBwYWdlIChvciBQREYpCgkkKCdhLmpzX3ByaW50X3BhZ2UnKS5jbGljayhmdW5jdGlvbigpewoJCQoJCS8vIFBpY2tzIGFsbCB2YXJpYWJsZXMKCQl2YXIgcGNfY29sb3IgPSAkKCcjY29sb3JpcycpLnZhbCgpOwoJCXZhciBoaWRkZW5fanNfZHVyYXRpb24gPSAkKCcjaGlkZGVuX2pzX2R1cmF0aW9uJykudmFsKCk7CgkJdmFyIGhpZGRlbl9qc190cmFuc3BvcnQgPSAkKCcjaGlkZGVuX2pzX3RyYW5zcG9ydCcpLnZhbCgpOwoJCXZhciBoaWRkZW5fanNfZnJvbV9jaXR5ID0gJCgnI2hpZGRlbl9qc19mcm9tX2NpdHknKS52YWwoKTsKCQl2YXIgaGlkZGVuX2pzX3RvX2NpdHkgPSAkKCcjaGlkZGVuX2pzX3RvX2NpdHknKS52YWwoKTsKCQl2YXIgaGlkZGVuX2pzX3RyYXZlbF9kaXN0YW5jZSA9ICQoJyNoaWRkZW5fanNfdHJhdmVsX2Rpc3RhbmNlJykudmFsKCk7CgkJdmFyIGhpZGRlbl9qc19jaXR5ID0gJCgnI2hpZGRlbl9qc19jaXR5JykudmFsKCk7CgkJdmFyIGhpZGRlbl9qc19xdWFudGl0eSA9ICQoJyNoaWRkZW5fanNfcXVhbnRpdHknKS52YWwoKTsKCQl2YXIgaGlkZGVuX2pzX2RhdGUgPSAkKCcjaGlkZGVuX2pzX2RhdGUnKS52YWwoKTsKCQl2YXIgaGlkZGVuX2pzX2hvdXIgPSAkKCcjaGlkZGVuX2pzX2hvdXInKS52YWwoKTsKCQl2YXIgaGlkZGVuX2pzX3BhcnRuZXIgPSAkKCcjaGlkZGVuX2pzX3BhcnRuZXInKS52YWwoKTsKCQl2YXIganNfb3B0aW9uc19lbmNvZGVkID0gJCgnI2pzX29wdGlvbnNfZW5jb2RlZCcpLnZhbCgpOwoJCXZhciBqc19wcmljZV90b3RhbF9vcHRpb25zID0gJCgnI2pzX3ByaWNlX3RvdGFsX29wdGlvbnMnKS52YWwoKTsKCQl2YXIganNfcHJpY2VfZGVsaXZlcnkgPSAkKCcjanNfcHJpY2VfZGVsaXZlcnknKS52YWwoKTsKCQl2YXIganNfcHJpY2VfcmVudGFsID0gJCgnI2pzX3ByaWNlX3JlbnRhbCcpLnZhbCgpOwoJCXZhciBqc19wcmljZV90b3RhbCA9ICQoJyNqc19wcmljZV90b3RhbCcpLnZhbCgpOwoJCQoJCXZhciBwaG9uZSA9ICctJzsKCQl2YXIgZW1haWwgPSAnLSc7CgkJdmFyIGRlc3RpbmF0aW9uX3VyaSA9ICQodGhpcykuYXR0cignZGF0YS1kZXN0aW5hdGlvbicpOwoJCQoJCSQucG9zdCgnaHR0cHM6Ly9waXhjdWJlLmF3ZWx0eS5mci9hamF4L3NhdmVfb2ZmZXInLCB7ZW1haWw6ZW1haWwscGhvbmU6cGhvbmUscGNfY29sb3I6cGNfY29sb3IsIGhpZGRlbl9qc19kdXJhdGlvbjpoaWRkZW5fanNfZHVyYXRpb24sCgkJCWhpZGRlbl9qc190cmFuc3BvcnQ6aGlkZGVuX2pzX3RyYW5zcG9ydCxoaWRkZW5fanNfZnJvbV9jaXR5OmhpZGRlbl9qc19mcm9tX2NpdHksaGlkZGVuX2pzX3RvX2NpdHk6aGlkZGVuX2pzX3RvX2NpdHksCgkJCWhpZGRlbl9qc190cmF2ZWxfZGlzdGFuY2U6aGlkZGVuX2pzX3RyYXZlbF9kaXN0YW5jZSxoaWRkZW5fanNfY2l0eTpoaWRkZW5fanNfY2l0eSxoaWRkZW5fanNfcXVhbnRpdHk6aGlkZGVuX2pzX3F1YW50aXR5LAoJCQloaWRkZW5fanNfZGF0ZTpoaWRkZW5fanNfZGF0ZSxoaWRkZW5fanNfaG91cjpoaWRkZW5fanNfaG91cixoaWRkZW5fanNfcGFydG5lcjpoaWRkZW5fanNfcGFydG5lcixqc19vcHRpb25zX2VuY29kZWQ6anNfb3B0aW9uc19lbmNvZGVkLGpzX3ByaWNlX3RvdGFsX29wdGlvbnM6anNfcHJpY2VfdG90YWxfb3B0aW9ucywKCQkJanNfcHJpY2VfZGVsaXZlcnk6anNfcHJpY2VfZGVsaXZlcnksanNfcHJpY2VfcmVudGFsOmpzX3ByaWNlX3JlbnRhbCxqc19wcmljZV90b3RhbDpqc19wcmljZV90b3RhbH0sIGZ1bmN0aW9uKHIpewoJCQkKCQkJCWlmIChyICE9ICcnICYmIGRlc3RpbmF0aW9uX3VyaSAhPSAnL3Jlc2VydmVyL2dldHBkZi8nKXsKCQkJCQlsb2NhdGlvbi5ocmVmID0gZGVzdGluYXRpb25fdXJpK3I7CgkJCQl9CgkJCQllbHNlewoJCQkJCS8vIElmIFBERiBwYWdlCgkJCQkJaWYgKHIgIT0gJycgJiYgZGVzdGluYXRpb25fdXJpID09ICcvcmVzZXJ2ZXIvZ2V0cGRmLycpewoJCQkJCQkvKnZhciB3aW4gPSB3aW5kb3cub3BlbihkZXN0aW5hdGlvbl91cmkrcik7CgkJCQkJCXdpbi5mb2N1cygpOyovCgkJCQkJCWxvY2F0aW9uLmhyZWYgPSBkZXN0aW5hdGlvbl91cmkrcjsKCQkJCQl9CgkJCQl9CgkJfSk7CgkJCgl9KTsKCQoJLyoqCgkgKiBSZWluaXRpYWxpemUgb3B0aW9ucwoJICovCgkkKCcjanNfb3B0aW9uX3RleHQnKS5vbignY2xpY2snLCdhLnJlc2V0X29wdGlvbnMnLCBmdW5jdGlvbigpewoJCSQuZWFjaChqc19nbG9iYWxfcGl4Y3ViZV9vcHRpb25zLCBmdW5jdGlvbihpbmRleCx2YWx1ZSl7CgkJCS8vIEFERCBIRVJFIElGIE9USEVSIE9QVElPTlMgV0lUSCAiZGVmYXVsdF9pbmNsdWRlZCIgU0VUIEFUIDEgSU4gREIKCQkJaWYgKHZhbHVlICE9IDEgJiYgdmFsdWUgIT0gMil7CgkJCQlhZGRPclJlbW92ZU9wdGlvbih2YWx1ZSk7CgkJCX0KCQl9KTsKCX0pOwoJCgkvKioKCSAqIFBhcnRuZXIgY29kZSBtYW5hZ2VtZW50CgkgKi8KCSQoJyNqc190b3RhbF9jb250ZW50Jykub24oJ2NsaWNrJywgJyNidXR0b25fcGFydG5lcmNvZGUnLCBmdW5jdGlvbihlKXsKCQl2YXIgY29kZSA9ICQoJyNmaWVsZF9wYXJ0bmVyY29kZScpLnZhbCgpOwoJCWlmIChjb2RlID09ICcnKXsKCQkJYWxlcnQoJ0F1Y3VuIGNvZGUgcGFydGVuYWlyZSByZW5zZWlnbsOpLicpOwoJCX0gZWxzZSB7CgkJCS8vIEFkZGluZyBhIGNvZGUKCQkJaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2pzX2FkZF9wYXJ0bmVyJykpCgkJCXsKCQkJCSQucG9zdCgnaHR0cHM6Ly9waXhjdWJlLmF3ZWx0eS5mci9hamF4L2FkZF9wYXJ0bmVyY29kZScsIHtjb2RlOmNvZGV9LCBmdW5jdGlvbihyKXsKCQkJCQlpZiAociA9PSAnbm8nKXsKCQkJCQkJYWxlcnQoJ0NlIGNvZGUgcGFydGVuYWlyZSBuXCdhIHBhcyDDqXTDqSByZWNvbm51LCBhc3N1cmV6LXZvdXMgZGUgbFwnYXZvaXIgY29ycmVjdGVtZW50IHJlbnNlaWduw6kuJyk7CgkJCQkJCSQoJyNmaWVsZF9wYXJ0bmVyY29kZScpLmNzcygnYm9yZGVyJywnMXB4IHNvbGlkICNjYzMzMDAnKTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkKCcjZmllbGRfcGFydG5lcmNvZGUnKS5jc3MoJ2JvcmRlcicsJzFweCBzb2xpZCAjMDNkMTAzJyk7CgkJCQkJCXZhciBjb2RlX2RhdGEgPSBKU09OLnBhcnNlKHIpOwoJCQkJCQkKCQkJCQkJLy8gVXBkYXRpbmcgVVJMIHRocm91Z2ggSFRNTDUgSGlzdG9yeSBBUEkKCQkJCQkJdmFyIGN1cnJlbnRfYnJvd3Nlcl91cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKCQkJCQkJdmFyIG5ld191cmwgPSBjdXJyZW50X2Jyb3dzZXJfdXJsLnJlcGxhY2UoL3BhcnRuZXJcPShbXlwmXSopXCYvaSwgJycpOwoJCQkJCQluZXdfdXJsID0gbmV3X3VybC5yZXBsYWNlKC9xdWFudGl0eT0oWzAtOV0rKVwmLywgJ3F1YW50aXR5PSQxJnBhcnRuZXI9Jytjb2RlX2RhdGEuY29kZSsnJicpOwoJCQkJCQkvLyBQdXNoZXMgbmV3IFVSTCBpbiBicm93c2VyJ3MgYWRkcmVzcyBiYXIKCQkJCQkJd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKCJQaXhjdWJlIEJvb2tpbmcgSGlzdG9yeSBPYmplY3QiLCAiUGl4Y3ViZSBMb2NhdGlvbiIsIG5ld191cmwpOwoJCQkJCQkKCQkJCQkJJCgnI2hpZGRlbl9qc19wYXJ0bmVyJykudmFsKGNvZGVfZGF0YS5jb2RlKTsKCQkJCQkJJCgnI2J1dHRvbl9wYXJ0bmVyY29kZScpLnRleHQoJ1JldGlyZXInKS5yZW1vdmVDbGFzcygnanNfYWRkX3BhcnRuZXInKS5hZGRDbGFzcygnanNfcmVtb3ZlX3BhcnRuZXInKTsKCQkJCQkJYWRkT3JSZW1vdmVPcHRpb24obnVsbCwgdHJ1ZSk7CgkJCQkJfQoJCQkJfSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvLyBSZW1vdmluZyBhIGNvZGUKCQkJCSQoJyNoaWRkZW5fanNfcGFydG5lcicpLnZhbCgnJyk7CgkJCQkkKCcjYnV0dG9uX3BhcnRuZXJjb2RlJykudGV4dCgnQWpvdXRlcicpLnJlbW92ZUNsYXNzKCdqc19yZW1vdmVfcGFydG5lcicpLmFkZENsYXNzKCdqc19hZGRfcGFydG5lcicpOwoJCQkJdmFyIGN1cnJlbnRfYnJvd3Nlcl91cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKCQkJCXZhciBuZXdfdXJsID0gY3VycmVudF9icm93c2VyX3VybC5yZXBsYWNlKC9wYXJ0bmVyXD0oW15cJl0qKVwmL2ksICcnKTsKCQkJCXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSgiUGl4Y3ViZSBCb29raW5nIEhpc3RvcnkgT2JqZWN0IiwgIlBpeGN1YmUgTG9jYXRpb24iLCBuZXdfdXJsKTsKCQkJCWFkZE9yUmVtb3ZlT3B0aW9uKG51bGwsIHRydWUpOwoJCQl9CgkJfQoJfSk7CgkKCS8qKgoJICogU2VuZCBmaW5hbCBib29raW5nIHByb2Nlc3MKCSAqLwoJJCgnI2J0bl92YWxpZGF0ZV9ib29raW5nJykuY2xpY2soZnVuY3Rpb24oZSl7CgoJCXZhciBjb21wYW55ID0gJCgnI2ZpZWxkX2NvbXBhbnknKS52YWwoKTsKCQl2YXIgZmlyc3RuYW1lID0gJCgnI2ZpZWxkX2ZpcnN0bmFtZScpLnZhbCgpOwoJCXZhciBsYXN0bmFtZSA9ICQoJyNmaWVsZF9sYXN0bmFtZScpLnZhbCgpOwoJCXZhciBlbWFpbCA9ICQoJyNmaWVsZF9lbWFpbCcpLnZhbCgpOwoJCXZhciBlbWFpbDIgPSAkKCcjZmllbGRfZW1haWwyJykudmFsKCk7CgkJdmFyIHBob25lID0gJCgnI2ZpZWxkX3Bob25lJykudmFsKCk7CgkJdmFyIGNvbW1lbnQgPSAkKCcjY29tbWVudCcpLnZhbCgpOwoJCXZhciBib29rX2lkID0gJCgnI2pzX2Jvb2tfaWQnKS52YWwoKTsKCQl2YXIgYWNjZXB0X3JlY2VpdmUgPSAndHJ1ZSc7CgkJaWYgKCQoJyNjYnhfdmFsaWRhdGVfb2ZmZXJzX2xhYmVsJykucGFyZW50KCdsYWJlbCcpLmhhc0NsYXNzKCdoYXMtZW1wdHknKSl7CgkJCWFjY2VwdF9yZWNlaXZlID0gJ2ZhbHNlJzsKCQl9CgoJCWlmIChlbWFpbCAhPSBlbWFpbDIpewoJCQlhbGVydCgnTGVzIGFkcmVzc2VzIGUtbWFpbCBzYWlzaWVzIG5lIGNvcnJlc3BvbmRlbnQgcGFzLicpOwoJCX0KCQlpZiAoZmlyc3RuYW1lID09ICcnIHx8IGxhc3RuYW1lID09ICcnIHx8IGVtYWlsID09ICcnIHx8IGVtYWlsMiA9PSAnJyB8fCBwaG9uZSA9PSAnJykKCQl7CgkJCWFsZXJ0KCdWZXVpbGxleiB2w6lyaWZpZXIgcXVlIHRvdXMgbGVzIGNoYW1wcyBuw6ljZXNzYWlyZXMgc29udCByZW5zZWlnbsOpcy4nKTsKCQl9CgkJZWxzZQoJCXsKCQkJJC5wb3N0KCdodHRwczovL3BpeGN1YmUuYXdlbHR5LmZyL2FqYXgvdmFsaWRhdGVfYm9va2luZycsIHtjb21wYW55OmNvbXBhbnksZmlyc3RuYW1lOmZpcnN0bmFtZSxsYXN0bmFtZTpsYXN0bmFtZSwKCQkJCWVtYWlsOmVtYWlsLGVtYWlsMjplbWFpbDIscGhvbmU6cGhvbmUsY29tbWVudDpjb21tZW50LGJvb2tfaWQ6Ym9va19pZCxhY2NlcHRfcmVjZWl2ZTphY2NlcHRfcmVjZWl2ZX0sIGZ1bmN0aW9uKHIpewoJCQkJCWlmIChyID09ICdvaycpewoJCQkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvcmVzZXJ2ZXIvZW5kJzsKCQkJCQkJcmV0dXJuOwoJCQkJCX0gZWxzZSB7CgkJCQkJCWFsZXJ0KCdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSBwZW5kYW50IGxcJ2VucmVnaXN0cmVtZW50LiBWw6lyaWZpZXogcXVlIHRvdXMgbGVzIGNoYW1wcyBzb250IHJlbnNlaWduw6lzIGV0IGVzc2F5ZXogw6Agbm91dmVhdS4nKQoJCQkJCX0KCQkJCX0pOwoJCX0KCX0pOwoJCgkKCS8qKgoJICogTW9kYWwgKG1vcmUgaW5mbyBhYm91dCBvcHRpb24pCgkgKi8KCSQoJ2Rpdi5vcHRpb25fbW9yZV9pbmZvID4gYScpLmNsaWNrKGZ1bmN0aW9uKCl7CgkJdmFyIG9wdGlvbl9pZCA9ICQodGhpcykuYXR0cignZGF0YS1vcHRpb25pZCcpOwoKCQkvLyBHZXQgQ29udGVudCBmcm9tIERCCgkJJC5wb3N0KCdodHRwczovL3BpeGN1YmUuYXdlbHR5LmZyL2FqYXgvZ2V0b3B0aW9uX3BvcHVwJywge29wdGlvbl9pZDpvcHRpb25faWR9LCBmdW5jdGlvbihyKXsKCQkJICQubW9kYWwoe2NvbnRlbnQ6cn0pOwoJCX0pOwoJfSk7CgkKfSk7CgovKioKICogQWRkIG9yIHJlbW92ZSBhbiBvcHRpb24KICogQHBhcmFtIG5vbl9kZXN0cnVjdGl2ZSA6IE9ubHkgYWRkcyBvcHRpb24sIG5vIHJlbW92YWwgKHVzZWQgZm9yIG9uLWxvYWQgaW5pdGlhbGl6YXRpb24pCiAqLwpmdW5jdGlvbiBhZGRPclJlbW92ZU9wdGlvbihvcHRpb25faWQsIG5vbl9kZXN0cnVjdGl2ZSA9IGZhbHNlKXsKCSQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CgkJCgkJJCgnI2pzX29wdGlvbl90ZXh0JykudGV4dCgnJyk7CgkJb3B0aW9uX2lkID0gcGFyc2VJbnQob3B0aW9uX2lkKTsKCQkKCQlpZiAoJC5pbkFycmF5KCBvcHRpb25faWQsIGpzX2dsb2JhbF9waXhjdWJlX29wdGlvbnMgKSA9PSAtMSl7CgkJCQoJCQkvLyBBZGRpbmcgYW4gb3B0aW9uCgkJCWlmICghbm9uX2Rlc3RydWN0aXZlKQoJCQl7CgkJCQlqc19nbG9iYWxfcGl4Y3ViZV9vcHRpb25zLnB1c2gob3B0aW9uX2lkKTsKCQkJfQoJCQkKCQkJLy8gQ2hhbmdpbmcgbGFiZWwKCQkJJCgnI2pzX2xhYmVsX2J0bl8nK29wdGlvbl9pZCkudGV4dCgnQWpvdXTDqScpOwoJCQkkKCcjanNfbGFiZWxfYnRuXycrb3B0aW9uX2lkKS5wYXJlbnQoJ2xhYmVsJykuYWRkQ2xhc3MoJ2hhcy1lbXB0eScpOwoJCQkkKCcjanNfbGFiZWxfYnRuXycrb3B0aW9uX2lkKS5wYXJlbnRzKCdkaXYuY29sdW1uJykuYWRkQ2xhc3MoJ2lzX3NlbGVjdGVkJyk7CgkJCQoJCX0gZWxzZSB7CgkJCQoJCQkvLyBSZW1vdmluZyBhbiBvcHRpb24KCQkJaWYgKCFub25fZGVzdHJ1Y3RpdmUpCgkJCXsKCQkJCWpzX2dsb2JhbF9waXhjdWJlX29wdGlvbnMgPSBqUXVlcnkuZ3JlcChqc19nbG9iYWxfcGl4Y3ViZV9vcHRpb25zLCBmdW5jdGlvbih2YWx1ZSkgewoJCQkJCSAgcmV0dXJuIHZhbHVlICE9IG9wdGlvbl9pZDsKCQkJCX0pOwoJCQl9CgkJCQoJCQkvLyBDaGFuZ2luZyBsYWJlbAoJCQkkKCcjanNfbGFiZWxfYnRuXycrb3B0aW9uX2lkKS50ZXh0KCdBam91dGVyJyk7CgkJCSQoJyNqc19sYWJlbF9idG5fJytvcHRpb25faWQpLnBhcmVudCgnbGFiZWwnKS5yZW1vdmVDbGFzcygnaGFzLWVtcHR5Jyk7CgkJCSQoJyNqc19sYWJlbF9idG5fJytvcHRpb25faWQpLnBhcmVudHMoJ2Rpdi5jb2x1bW4nKS5yZW1vdmVDbGFzcygnaXNfc2VsZWN0ZWQnKTsKCQl9CgkJCgkJLy8gUGFyc2UgSlNPTiBhbmQgYWRkIGl0IHRvIGdsb2JhbCBpbnB1dCB2YXIKCQkvLyAobWFrZXMgSlNPTiBmcm9tIGFycmF5IHRoZW4gZW5jb2RlcyBiYXNlNjQpCgkJJCgnI2pzX29wdGlvbnNfZW5jb2RlZCcpLnZhbChidG9hKEpTT04uc3RyaW5naWZ5KGpzX2dsb2JhbF9waXhjdWJlX29wdGlvbnMpKSk7CgkJCgkJLy8gQWRkaW5nIG9wdGlvbnMgaW4gIlZvcyBPcHRpb25zIgoJCXZhciBiYXNlNjRfb3B0aW9ucyA9ICQoJyNqc19vcHRpb25zX2VuY29kZWQnKS52YWwoKTsKCQkKCQkvLyBVcGRhdGluZyBVUkwgdGhyb3VnaCAgSFRNTDUgSGlzdG9yeSBBUEkKCQl2YXIgY3VycmVudF9icm93c2VyX3VybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwoJCXZhciBuZXdfb3B0aW9uX3VybCA9IGN1cnJlbnRfYnJvd3Nlcl91cmwucmVwbGFjZSgvb3B0aW9uc1w9KFteXCZdKilcJi9pLCAnb3B0aW9ucz0nK2Jhc2U2NF9vcHRpb25zKycmJyk7CgkJLy8gUHVzaGVzIG5ldyBVUkwgaW4gYnJvd3NlcidzIGFkZHJlc3MgYmFyCgkJd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKCJQaXhjdWJlIEJvb2tpbmcgSGlzdG9yeSBPYmplY3QiLCAiUGl4Y3ViZSBMb2NhdGlvbiIsIG5ld19vcHRpb25fdXJsKTsKCQkKCQkvLyBEaXNwbGF5cyBsb2FkaW5nIGljb24KCQkkKCcjanNfbG9hZGVyX2ljb24nKS5zaG93KCk7CgkJCgkJLy8gTnVtYmVyIG9mIGhvdXJzIGZvciBmb3JmZWl0YXJ5IG9wdGlvbnMKCQl2YXIgbmJfaG91cnMgPSAkKCcjaGlkZGVuX2pzX2R1cmF0aW9uJykudmFsKCk7CgkJCgkJLy8gT3RoZXIgdXNlZCB2YXJpYWJsZXMgaW4gaGlkZGVuIGlucHV0cwoJCXZhciBoaWRkZW5fanNfdHJhbnNwb3J0ID0gJCgnI2hpZGRlbl9qc190cmFuc3BvcnQnKS52YWwoKTsKCQl2YXIgaGlkZGVuX2pzX2Zyb21fY2l0eSA9ICQoJyNoaWRkZW5fanNfZnJvbV9jaXR5JykudmFsKCk7CgkJdmFyIGhpZGRlbl9qc190cmF2ZWxfZGlzdGFuY2UgPSAkKCcjaGlkZGVuX2pzX3RyYXZlbF9kaXN0YW5jZScpLnZhbCgpOwoJCXZhciBoaWRkZW5fanNfdG9fY2l0eSA9ICQoJyNoaWRkZW5fanNfdG9fY2l0eScpLnZhbCgpOwoJCXZhciBoaWRkZW5fanNfcGFydG5lciA9ICQoJyNoaWRkZW5fanNfcGFydG5lcicpLnZhbCgpOwoJCXZhciBoaWRkZW5fanNfcXVhbnRpdHkgPSAkKCcjaGlkZGVuX2pzX3F1YW50aXR5JykudmFsKCk7CgkJdmFyIGhpZGRlbl9qc19kYXRlID0gJCgnI2hpZGRlbl9qc19kYXRlJykudmFsKCk7CgkJCgkJJC5wb3N0KCdodHRwczovL3BpeGN1YmUuYXdlbHR5LmZyL2FqYXgvcGFyc2VvcHRpb25zJywge2Jhc2U2NF9vcHRpb25zOmJhc2U2NF9vcHRpb25zLG5iX2hvdXJzOm5iX2hvdXJzLGhpZGRlbl9qc19kYXRlOmhpZGRlbl9qc19kYXRlLAoJCQloaWRkZW5fanNfdHJhbnNwb3J0OmhpZGRlbl9qc190cmFuc3BvcnQsaGlkZGVuX2pzX2Zyb21fY2l0eTpoaWRkZW5fanNfZnJvbV9jaXR5LGhpZGRlbl9qc19wYXJ0bmVyOmhpZGRlbl9qc19wYXJ0bmVyLGhpZGRlbl9qc190cmF2ZWxfZGlzdGFuY2U6aGlkZGVuX2pzX3RyYXZlbF9kaXN0YW5jZSwKCQkJaGlkZGVuX2pzX3RvX2NpdHk6aGlkZGVuX2pzX3RvX2NpdHksaGlkZGVuX2pzX3F1YW50aXR5OmhpZGRlbl9qc19xdWFudGl0eX0sIGZ1bmN0aW9uKHIpewoJCQkKCQkJLy8gRGVjb2RlIHJlc3VsdGluZyBKU09OCgkJCS8vIFsncm93X29wdGlvbnMnXSAsIFsncm93X3RvdGFsJ10KCQkJdmFyIHJvd3MgPSBKU09OLnBhcnNlKHIpOwoJCQkKCQkJJCgnI2pzX2xvYWRlcl9pY29uJykuaGlkZSgpOwoJCQkkKCcjanNfb3B0aW9uX3RleHQnKS5odG1sKHJvd3NbJ3Jvd19vcHRpb25zJ10pOwoJCQkkKCcjanNfdG90YWxfY29udGVudCcpLmh0bWwocm93c1sncm93X3RvdGFsJ10pOwoJCX0pOwoJCQoJfSk7Cn0KCgovKioKICogUHJvY2VzcyBjdXJyZW50bHkgaW5pdGlhbGl6ZWQgb3B0aW9ucwogKiBpbiBnbG9iYWwgdmFyIGpzX2dsb2JhbF9waXhjdWJlX29wdGlvbnMKICovCmZ1bmN0aW9uIHByb2Nlc3NDdXJyZW50T3B0aW9ucygpCnsKCWFkZE9yUmVtb3ZlT3B0aW9uKG51bGwsIHRydWUpOwoJaWYgKGpzX2dsb2JhbF9waXhjdWJlX29wdGlvbnMgIT0gdW5kZWZpbmVkKXsKCQlqc19nbG9iYWxfcGl4Y3ViZV9vcHRpb25zLmZvckVhY2goZnVuY3Rpb24odil7CgkJCSQoJyNqc19sYWJlbF9idG5fJyt2KS50ZXh0KCdBam91dMOpJyk7CgkJCSQoJyNqc19sYWJlbF9idG5fJyt2KS5wYXJlbnQoJ2xhYmVsJykuYWRkQ2xhc3MoJ2hhcy1lbXB0eScpOwoJCQkkKCcjanNfbGFiZWxfYnRuXycrdikucGFyZW50cygnZGl2LmNvbHVtbicpLmFkZENsYXNzKCdpc19zZWxlY3RlZCcpOwoJCX0pOwoJfQp9CgovKioKICogU2V0cyBzcGVjaWZpYyBib2R5IGNsYXNzIGlmIGZvcm0gcGFnZQogKi8KZnVuY3Rpb24gc2V0Qm9keUNsYXNzKG15Y2xhc3MgPSBudWxsKXsKCSQoJ2JvZHknKS5yZW1vdmVDbGFzcygncmVzZXJ2ZXInKS5hZGRDbGFzcyhteWNsYXNzKTsKfQoKLyoqCiAqIFByb2Nlc3MgcmVzZWFyY2ggZm9ybSAoZmllbGRzKSBhbmQgcmVkaXJlY3RzIHRvIHJlc3VsdCBwYWdlCiAqLwpmdW5jdGlvbiBwcm9jZXNzU2VhcmNoRm9ybSgpewoJLy8gUmV0cmlldmUgZm9ybSB2YWx1ZXMKCXZhciBsb2NhdGlvbiA9ICQoJyNqc19sb2NhdGlvbicpLnZhbCgpOwoJdmFyIGRheSA9ICQoJyNqc19kYXknKS52YWwoKTsKCXZhciBkdXJhdGlvbiA9ICQoJyNqc19kdXJhdGlvbicpLnZhbCgpOwoJdmFyIGhvdXIgPSAkKCcjanNfaG91cicpLnZhbCgpOwoJdmFyIHF1YW50aXR5ID0gJCgnI2pzX3F1YW50aXR5JykudmFsKCk7CgkKCS8vIFRyYW5zZm9ybXMgRlIgZGF0ZSBpbiBJU08gZGF0ZQoJaWYgKGRheS5tYXRjaCgvXlswLTldezJ9XC9bMC05XXsyfVwvWzAtOV17NH0kL2kpKQoJewoJCXZhciBpc29fZGF5ID0gZGF5LnNwbGl0KCcvJyk7CgkJZGF5ID0gaXNvX2RheVsyXSsnLScraXNvX2RheVsxXSsnLScraXNvX2RheVswXTsKCX0KCQkKCWlmIChsb2NhdGlvbiAhPSB1bmRlZmluZWQgJiYgZGF5ICE9IHVuZGVmaW5lZCAmJiBkdXJhdGlvbiAhPSB1bmRlZmluZWQgJiYgaG91ciAhPSB1bmRlZmluZWQgJiYgcXVhbnRpdHkgIT0gdW5kZWZpbmVkCgkJCSYmIGxvY2F0aW9uICE9ICcnICYmIGRheS5tYXRjaCgvXlswLTldezR9XC1bMC05XXsyfVwtWzAtOV17Mn0kL2kpICYmIGR1cmF0aW9uICE9ICcwJyAmJiBob3VyICE9ICcwJyl7CgkJCgkJLy8gQnVpbGRpbmcgcmVzdWx0cyBVUkwKCQl2YXIgdXJsID0gJy9yZXNlcnZlci8\/b3B0aW9ucz1XekVzTWwwPSZjaXR5PScrbG9jYXRpb24rJyZxdWFudGl0eT0nK3F1YW50aXR5KycmZGF0ZT0nK2RheSsnJmR1cmF0aW9uPScrZHVyYXRpb24rJyZob3VyPScraG91cjsKCQkKCQkvLyBSZWRpcmVjdAoJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsOwoJCXJldHVybjsKCQkKCX0gZWxzZSB7CgkJLy8gRmllbGRzIG1pc3NpbmcKCQlhbGVydCgnVsOpcmlmaWV6IHF1ZSB2b3VzIGF2ZXogYmllbiBzw6lsZWN0aW9ubsOpIHVuZSB2aWxsZSBkYW5zIGxlcyBzdWdnZXN0aW9ucyBhZmZpY2jDqWVzLCBldCBxdWUgdG91cyBsZXMgY2hhbXBzIHNvbnQgYmllbiByZW5zZWlnbsOpcy4nKTsKCX0KfQoKLyoqCiAqIERlbGF5aW5nCiAqIFVzZWQgZm9yIHR5cGVhaGVhZAogKi8KdmFyIGRlbGF5ID0gKGZ1bmN0aW9uKCl7CiAgdmFyIHRpbWVyID0gMDsKICByZXR1cm4gZnVuY3Rpb24oY2FsbGJhY2ssIG1zKXsKICAgIGNsZWFyVGltZW91dCAodGltZXIpOwogICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCBtcyk7CiAgfTsKfSkoKTsKCi8qKgogKiBFT0YgSmF2YXNjcmlwdCBQaXhjdWJlIEJvb2tpbmcgCiAqLw08L3NjcmlwdD4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNwaXhjdWJlX2Jvb2tpbmdfZm9ybV93cmFwcGVyIGxhYmVsewoJZGlzcGxheTpibG9jazsKfQojdHlwZWFoZWFkX3dyYXBwZXJ7Cglwb3NpdGlvbjpyZWxhdGl2ZTsKfQojanNfdHlwZWFoZWFkX3RhcmdldHsKCWRpc3BsYXk6bm9uZTsKCXBvc2l0aW9uOmFic29sdXRlOwoJYmFja2dyb3VuZDp3aGl0ZTsKCXotaW5kZXg6MTAwMDsKCWJvcmRlcjoxcHggc29saWQgI0NDQzsKfQp1bC50eXBlYWhlYWRfcmVzdWx0ewoJbGlzdC1zdHlsZS10eXBlOm5vbmU7CgltYXJnaW46MDsgcGFkZGluZzowOwp9CnVsLnR5cGVhaGVhZF9yZXN1bHQgPiBsaXsKCXBhZGRpbmc6NHB4IDhweDsKCWJvcmRlci1ib3R0b206MXB4IHNvbGlkICNDQ0M7Cn0KdWwudHlwZWFoZWFkX3Jlc3VsdCA+IGxpOmxhc3QtY2hpbGR7Cglib3JkZXI6bm9uZTsKfQkKdWwudHlwZWFoZWFkX3Jlc3VsdCA+IGxpLnR5cGVhaGVhZF9pdGVtX2NpdHl7CgljdXJzb3I6cG9pbnRlcjsKfQp1bC50eXBlYWhlYWRfcmVzdWx0ID4gbGkudHlwZWFoZWFkX2l0ZW1fY2l0eTpob3ZlcnsKCWJhY2tncm91bmQ6I0VFRTsKfQojdWktZGF0ZXBpY2tlci1kaXZ7Cgl6LWluZGV4OjEwMDAwIWltcG9ydGFudDsKfQkKPC9zdHlsZT4KCjxzY3JpcHQ+JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtzZXRCb2R5Q2xhc3MoJ2Zvcm1fcmVzZXJ2ZXInKTt9KTs8L3NjcmlwdD4KCjxkaXYgaWQ9ImZvcm1fd3JhcHBlcl9jb250YWluZXIiPgoKCTxkaXYgaWQ9InBpeGN1YmVfYm9va2luZ19mb3JtX3dyYXBwZXIiIGNsYXNzPSJjb250YWluZXIgd2l0aG91dC1zaWRlYmFyIj4KCQoJCQoJPGRpdiBpZD0iZm9ybV9oZWFkaW5nIj4KCQk8aDE+UsOpc2VydmV6IGVuIGxpZ25lPC9oMT4KCQk8c3Bhbj5NYWludGVuYW50Ljwvc3Bhbj4KCTwvZGl2PgoJCgk8cCBjbGFzcz0iZm9ybV9oZWFkaW5nX3N1YnRpdGxlIj5Wb3RyZSByw6lzZXJ2YXRpb24gUGl4Y3ViZSA6PC9wPgoJCQoJCTxkaXYgaWQ9ImZvcm1fZmlyc3Rfd3JhcHBlciI+CgkJCTxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAgY29udHJvbC10eXBlLXRleHQgY29udHJvbC1jaXR5IGJvcmRlci1yIj4KCQkJCTxsYWJlbCBmb3I9ImpzX2xvY2F0aW9uIj5Pw7k8L2xhYmVsPgoJCQkJPGRpdiBjbGFzcz0iY29udHJvbHMiIGlkPSJ0eXBlYWhlYWRfd3JhcHBlciI+CgkJCQkJPGlucHV0IHR5cGU9InRleHQiIGlkPSJqc19sb2NhdGlvbl9zdHIiIHBsYWNlaG9sZGVyPSJTw6lsZWN0aW9ubmV6IHVuZSB2aWxsZSIgdmFsdWU9IiIgLz4KCQkJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ianNfbG9jYXRpb24iIHZhbHVlPSIiIC8+CgkJCQkJPGRpdiBpZD0ianNfdHlwZWFoZWFkX3RhcmdldCI+PC9kaXY+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+CgkJCQoJCQk8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIGNvbnRyb2wtdHlwZS1kYXRlcGlja2VyIGNvbnRyb2wtZGF5Ij4KCQkJCTxsYWJlbCBmb3I9ImpzX2RheSI+UXVhbmQ8L2xhYmVsPgoJCQkJPGlucHV0IHR5cGU9InRleHQiIGlkPSJqc19kYXkiIGRpc2FibGVkPgoJCQk8L2Rpdj4KCQk8L2Rpdj4KCQkJCgkJPGRpdiBpZD0iZm9ybV9zZWNvbmRfd3JhcHBlciI+CgkJCTxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAgY29udHJvbC10eXBlLXNlbGVjdCBjb250cm9sLWR1cmF0aW9uIGJvcmRlci1yIj4KCQkJCTxsYWJlbCBmb3I9ImpzX2R1cmF0aW9uIj5EdXLDqWU8L2xhYmVsPgoJCQkJPGRpdiBjbGFzcz0iY29udHJvbHMiPgoJCQkJCTxzZWxlY3QgaWQ9ImpzX2R1cmF0aW9uIiBkaXNhYmxlZD4KCQkJCQkJPG9wdGlvbiB2YWx1ZT0iMCI+LTwvb3B0aW9uPgoJCQkJCQkJCQkJCTwvc2VsZWN0PgoJCQkJPC9kaXY+CgkJCTwvZGl2PgoJCQkKCQkJPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCBjb250cm9sLXR5cGUtc2VsZWN0IGNvbnRyb2wtaG91ciBib3JkZXItciI+CgkJCQk8bGFiZWwgZm9yPSJqc19ob3VyIj5Ew6lidXQ8L2xhYmVsPgoJCQkJPGRpdiBjbGFzcz0iY29udHJvbHMiPgoJCQkJCgkJCQkJPHNlbGVjdCBpZD0ianNfaG91ciIgZGlzYWJsZWQ+CgkJCQkJCTxvcHRpb24gdmFsdWU9IjAiPi08L29wdGlvbj4KCQkJCQkJCQkJCQk8L3NlbGVjdD4KCQkJCTwvZGl2PgoJCQk8L2Rpdj4KCQkJCgkJCTxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAgY29udHJvbC10eXBlLXNlbGVjdCBjb250cm9sLXF1YW50aXR5IGJvcmRlci1yIj4KCQkJCTxsYWJlbCBmb3I9ImpzX3F1YW50aXR5Ij5QaXhjdWJlKHMpPC9sYWJlbD4KCQkJCTxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KCQkJCQk8c2VsZWN0IGlkPSJqc19xdWFudGl0eSI+CgkJCQkJCTxvcHRpb24gdmFsdWU9IjEiPjE8L29wdGlvbj4KCQkJCQkJPG9wdGlvbiB2YWx1ZT0iMiI+Mjwvb3B0aW9uPgoJCQkJCQk8b3B0aW9uIHZhbHVlPSIzIj4zPC9vcHRpb24+CgkJCQkJPC9zZWxlY3Q+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+CgkJCQoJCQk8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIGZvcm0tYWN0aW9ucyBjb250cm9sLXNlbmQiPgoJCQkJPGRpdiBjbGFzcz0iY29udHJvbHMiPgoJCQkJCTxidXR0b24gaWQ9ImpzX3NlbmRfc2VhcmNoIj5FbnZveWVyPC9idXR0b24+CgkJCQk8L2Rpdj4KCQkJPC9kaXY+CgkJPC9kaXY+CgkJCgk8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJsaXZyYWlzb24tem9uZSI+Cgk8aDIgY2xhc3M9ImxpdnJhaXNvbi16b25lLXRpdGxlIHRleHQtY2VudGVyIj48c3Bhbj5ab25lIGRlIGxpdnJhaXNvbjwvc3Bhbj48L2gyPgoJPGRpdiBjbGFzcz0ibWFwLWNvbnRhaW5lciI+CgkJPGltZyBzcmM9Ii9tZWRpYXMvaW1hZ2VzL21hcC1saXZyYWlzb24ucG5nIiBjbGFzcz0ibWFwLWxpdnJhaXNvbiIgYWx0PSJab25lIGRlIGxpdnJhaXNvbiBkdSBQaXhjdWJlIj4KCTwvZGl2Pgo8L2Rpdj4KIDwhLS0gLy8gRW5kIEN1c3RvbSBNb2R1bGUgQ2xlbSAtLT4="}