Fred
0.1.1
OTRS GmbH
http://otrs.org/
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
Improved output.
First version especially for testing and as proof of concept.
A tool to support the developer by his development.
Ein Entwicklertool welches dem Entwickler zur Laufzeit bei der Entwicklung unterstützen soll.
2.2.x
2007-02-28 15:36:01
opms.otrs.com
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9PdXRwdXRGaWx0ZXJGcmVkLnBtCiMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyAkSWQ6IE91dHB1dEZpbHRlckZyZWQucG0sdiAxLjMgMjAwNy8wMi8yOCAxNDoyMjo0MyBtYXJ0aW4gRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpPdXRwdXRGaWx0ZXJGcmVkOwoKdXNlIHN0cmljdDsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSAnJFJldmlzaW9uOiAxLjMgJCc7CiRWRVJTSU9OID1+IHMvXlwkLio6XFcoLiopXFcuKz8kLyQxLzsKCnN1YiBuZXcgewogICAgbXkgJFR5cGUgPSBzaGlmdDsKICAgIG15ICVQYXJhbSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzICgkU2VsZiwgJFR5cGUpOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBmb3JlYWNoIChxdyhDb25maWdPYmplY3QgTG9nT2JqZWN0KSkgewogICAgICAgICRTZWxmLT57JF99ID0gJFBhcmFteyRffSB8fCBkaWUgIkdvdCBubyAkXyEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CiAgICBteSAkVGV4dCA9ICcnOwogICAgbXkgJEhvbWUgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSG9tZScpOwoKICAgICMgZG8gbm90aW5nIG9uIHJlZGlyZWN0cwogICAgaWYgKCR7JFBhcmFte0RhdGF9fSA9fiAvXlN0YXR1czogMzAyIE1vdmVkL21pICYmICR7JFBhcmFte0RhdGF9fSA9fiAvXmxvY2F0aW9uOi9taSAmJiBsZW5ndGgoJHskUGFyYW17RGF0YX19KSA8IDgwMCApIHsKICAgICAgICAjIGRvIG5vdGhpbmcKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIENoZWNrIHRoZSBIVE1MLU91dHB1dCB3aXRoIEhUTUw6OkxpbnQKICAgIGlmICgkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJlZDo6SFRNTENoZWNrJykpIHsKICAgICAgICB1c2UgSFRNTDo6TGludDsKICAgICAgICBteSAkSFRNTFRleHQgPSAnJzsKICAgICAgICBteSAkSFRNTExpbnRPYmplY3QgPSBIVE1MOjpMaW50LT5uZXcoIG9ubHlfdHlwZXMgPT4gSFRNTDo6TGludDo6RXJyb3I6OlNUUlVDVFVSRSApOwogICAgICAgICRIVE1MTGludE9iamVjdC0+cGFyc2UgKCR7JFBhcmFte0RhdGF9fSk7CgogICAgICAgIG15ICRFcnJvckNvdW50ZXIgPSAkSFRNTExpbnRPYmplY3QtPmVycm9yczsKICAgICAgICBmb3JlYWNoIG15ICRFcnJvciAoJEhUTUxMaW50T2JqZWN0LT5lcnJvcnMpIHsKICAgICAgICAgICAgbXkgJFN0cmluZyAuPSAkRXJyb3ItPmFzX3N0cmluZzsKICAgICAgICAgICAgaWYgKCRTdHJpbmcgIX4gL0ludmFsaWQgY2hhcmFjdGVyIC4rIHNob3VsZCBiZSB3cml0dGVuIGFzIC8pIHsKICAgICAgICAgICAgICAgICRIVE1MVGV4dCAuPSAgJFN0cmluZyAuICJcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRIVE1MVGV4dCkgewogICAgICAgICAgICAkVGV4dCAuPSAkU2VsZi0+X0hUTUxRdW90ZSgKICAgICAgICAgICAgICAgIFRleHQgPT4gJEhUTUxUZXh0LAogICAgICAgICAgICAgICAgVGl0bGUgPT4gIkhUTUwtQ2hlY2tlciIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgU2VhcmNoIGZvciBzdGRlcnIgbWVzc2FnZXMKICAgIGlmICgkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJlZDo6U1RERVJSTG9nJykpIHsKICAgICAgICBpZiAob3BlbiAoT1VUUFVULCAiPCAiLiRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdIb21lJykuIi92YXIvZnJlZC5sb2ciKSkgewogICAgICAgICAgICBteSAkRXJyb3JMb2dUZXh0ID0gJyc7CiAgICAgICAgICAgIG15IEBSb3cgPSA8T1VUUFVUPjsKICAgICAgICAgICAgbXkgQFJldmVyc2VSb3cgPSByZXZlcnNlKEBSb3cpOwogICAgICAgICAgICBmb3JlYWNoIChAUmV2ZXJzZVJvdykgewogICAgICAgICAgICAgICAgaWYgKCRfID1+IC9GUkVELykgewogICAgICAgICAgICAgICAgICAgIGxhc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkRXJyb3JMb2dUZXh0IC49ICRfOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwcmludCBTVERFUlIgIkZSRURcbiI7CgogICAgICAgICAgICBjbG9zZSAoT1VUUFVUKTsKCiAgICAgICAgICAgIGlmICgkRXJyb3JMb2dUZXh0KSB7CiAgICAgICAgICAgICAgICAkVGV4dCAuPSAkU2VsZi0+X0hUTUxRdW90ZSgKICAgICAgICAgICAgICAgICAgICBUZXh0ID0+ICRFcnJvckxvZ1RleHQsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gIlNUREVSUiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgIyBTZWFyY2ggZm9yIGFwYWNoZSBlcnJvcmxvZyB3YXJuaW5nCiAgICBpZiAoJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZyZWQ6OkFwYWNoZUVycm9ybG9nV2FybmluZ3MnKSkgewogICAgICAgIGlmIChvcGVuIChPVVRQVVQsICI8IC92YXIvbG9nL2FwYWNoZTIvZXJyb3JfbG9nIikpIHsKICAgICAgICAgICAgbXkgJEVycm9yTG9nVGV4dCA9ICcnOwogICAgICAgICAgICBteSBAUm93ID0gPE9VVFBVVD47CiAgICAgICAgICAgIG15IEBSZXZlcnNlUm93ID0gcmV2ZXJzZShAUm93KTsKICAgICAgICAgICAgZm9yZWFjaCAoQFJldmVyc2VSb3cpIHsKICAgICAgICAgICAgICAgIGlmICgkXyA9fiAvRlJFRC8pIHsKICAgICAgICAgICAgICAgICAgICBsYXN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJEVycm9yTG9nVGV4dCAuPSAkXzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpbnQgU1RERVJSICJGUkVEXG4iOwoKICAgICAgICAgICAgY2xvc2UgKE9VVFBVVCk7CgogICAgICAgICAgICBpZiAoJEVycm9yTG9nVGV4dCkgewogICAgICAgICAgICAgICAgJFRleHQgLj0gJFNlbGYtPl9IVE1MUXVvdGUoCiAgICAgICAgICAgICAgICAgICAgVGV4dCA9PiAkRXJyb3JMb2dUZXh0LAogICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICJBcGFjaGUyIGVycm9yX2xvZyIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgIyB1c2UgdGhlIGN2cyBjaGVja3MKICAgIGlmICgkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJlZDo6Q1ZTRmlsdGVyJykpIHsKICAgICAgICBteSAkUGF0aFRvQ1ZTRmlsdGVyID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ZyZWQ6OlBhdGhUb0NWU0ZpbHRlcicpOwogICAgICAgIGlmICgkeyRQYXJhbXtEYXRhfX0gPX4gL05vdGlmeS4rP0FjdGlvbi4rP3ZhbHVlPSIoLis/KSI+Lio/JC9teHMpIHsKICAgICAgICAgICAgbXkgJEFjdGlvbiA9ICQxOwogICAgICAgICAgICBteSAkRmlsdGVyVGV4dCA9ICcnOwogICAgICAgICAgICBpZiAoLWUgIiRIb21lL0tlcm5lbC9Nb2R1bGVzLyRBY3Rpb24ucG0iKSB7CiAgICAgICAgICAgICAgICBpZiAob3BlbiAoT1VUUFVULCAicGVybCAkUGF0aFRvQ1ZTRmlsdGVyL2ZpbHRlci1leHRlbmRlZC5wbCAkSG9tZS9LZXJuZWwvTW9kdWxlcyAkSG9tZS9LZXJuZWwvTW9kdWxlcy8kQWN0aW9uLnBtIHwiKSkgewogICAgICAgICAgICAgICAgICAgIG15ICRNZXJnZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDxPVVRQVVQ+KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkXyF+IC9eTk9USUNFLykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZpbHRlclRleHQgLj0gJF87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTWVyZ2UgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGNsb3NlIChPVVRQVVQpOwogICAgICAgICAgICAgICAgICAgIGlmICgkTWVyZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEZpbHRlclRleHQgPSAkQWN0aW9uIC4gIi5wbVxuIiAuICRGaWx0ZXJUZXh0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJFN5c3RlbU1vZHVsZSA9ICcnOwogICAgICAgICAgICBpZiAoJEFjdGlvbiA9fiAvKEFnZW50fEFkbWlufEN1c3RvbWVyfFB1YmxpYykoLispJC8pIHsKICAgICAgICAgICAgICAgICRTeXN0ZW1Nb2R1bGUgPSAkMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKC1lICIkSG9tZS9LZXJuZWwvU3lzdGVtLyRTeXN0ZW1Nb2R1bGUucG0iKSB7CiAgICAgICAgICAgICAgICBpZiAob3BlbiAoT1VUUFVULCAicGVybCAkUGF0aFRvQ1ZTRmlsdGVyL2ZpbHRlci1leHRlbmRlZC5wbCAkSG9tZS9LZXJuZWwvU3lzdGVtICRIb21lL0tlcm5lbC9TeXN0ZW0vJFN5c3RlbU1vZHVsZS5wbSB8IikpIHsKICAgICAgICAgICAgICAgICAgICBteSAkTWVyZ2UgPSAwOwogICAgICAgICAgICAgICAgICAgIHdoaWxlICg8T1VUUFVUPikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJF8hfiAvXk5PVElDRS8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGaWx0ZXJUZXh0IC49ICRfOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE1lcmdlID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjbG9zZSAoT1VUUFVUKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJE1lcmdlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRGaWx0ZXJUZXh0ID0gJFN5c3RlbU1vZHVsZSAuICIucG1cbiIgLiAkRmlsdGVyVGV4dDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRGaWx0ZXJUZXh0KSB7CiAgICAgICAgICAgICAgICAkVGV4dCAuPSAkU2VsZi0+X0hUTUxRdW90ZSgKICAgICAgICAgICAgICAgICAgICBUZXh0ID0+ICRGaWx0ZXJUZXh0LAogICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICJmaWx0ZXItZXh0ZW5kZWQucGwiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIGlmICgkVGV4dCkgewogICAgICAgIGlmICgkeyRQYXJhbXtEYXRhfX0gPX4gcy8oXDxib2R5KHwuKz8pXD4pLyQxXG4kVGV4dFxuXG5cblxuL214KSB7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX0hUTUxRdW90ZSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CiAgICBteSAkT3V0cHV0ID0gJyc7CiAgICAkUGFyYW17VGV4dH0gPX4gcy8mLyZhbXA7L2c7CiAgICAkUGFyYW17VGV4dH0gPX4gcy88LyZsdDsvZzsKICAgICRQYXJhbXtUZXh0fSA9fiBzLz4vJmd0Oy9nOwogICAgJFBhcmFte1RleHR9ID1+IHMvXG4vXG5cPGJyXD4vZzsKICAgICMgc2hvd24gbWVzc2FnZQogICAgJE91dHB1dCAuPSAiPHRhYmxlIGJnY29sb3I9XCIjMDAwMDAwXCIgY2VsbHNwYWNpbmc9XCIzXCIgY2VsbHBhZGRpbmc9XCIwXCIgd2lkdGg9XCIxMDAlXCI+XG4iOwogICAgJE91dHB1dCAuPSAiPHRyPlxuIjsKICAgICRPdXRwdXQgLj0gIjx0ZCBiZ2NvbG9yPVwiYmEwZjBmXCI+XG4iOwogICAgJE91dHB1dCAuPSAiPHRhYmxlIGJnY29sb3I9XCIjZmZmZmZmXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIyXCIgd2lkdGg9XCIxMDAlXCI+XG4iOwogICAgJE91dHB1dCAuPSAiPHRyPlxuIjsKICAgICRPdXRwdXQgLj0gIjx0ZCBiZ2NvbG9yPVwiYmEwZjBmXCI+XG4iOwogICAgJE91dHB1dCAuPSAiPGI+PGZvbnQgY29sb3I9XCIjZmZmZmZmXCI+RnJlZDogJFBhcmFte1RpdGxlfTwvZm9udD48L2I+XG4iOwogICAgJE91dHB1dCAuPSAiPC90ZD5cbiI7CiAgICAkT3V0cHV0IC49ICI8L3RyPlxuIjsKICAgICRPdXRwdXQgLj0gIjx0cj5cbiI7CiAgICAkT3V0cHV0IC49ICI8dGQ+XG4iOwogICAgJE91dHB1dCAuPSAiPGZvbnQgc2l6ZT1cIi0yXCI+IiAuICRQYXJhbXtUZXh0fSAuIjwvZm9udD4iOwogICAgJE91dHB1dCAuPSAiPC90ZD5cbiI7CiAgICAkT3V0cHV0IC49ICI8L3RyPlxuIjsKICAgICRPdXRwdXQgLj0gIjwvdGFibGU+XG4iOwogICAgJE91dHB1dCAuPSAiPC90ZD5cbiI7CiAgICAkT3V0cHV0IC49ICI8L3RyPlxuIjsKICAgICRPdXRwdXQgLj0gIjwvdGFibGU+XG4iOwogICAgIyBqdXN0IGEgc21hbGwgc3BhY2UKICAgICRPdXRwdXQgLj0gIjx0YWJsZSBjZWxsc3BhY2luZz1cIjFcIiBjZWxscGFkZGluZz1cIjBcIiB3aWR0aD1cIjEwMCVcIj5cbiI7CiAgICAkT3V0cHV0IC49ICI8dHI+XG4iOwogICAgJE91dHB1dCAuPSAiPHRkPlxuIjsKICAgICRPdXRwdXQgLj0gIjwvdGQ+XG4iOwogICAgJE91dHB1dCAuPSAiPC90cj5cbiI7CiAgICAkT3V0cHV0IC49ICI8L3RhYmxlPlxuIjsKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iQXBwbGljYXRpb24iPgogICAgPENWUz4kSWQ6IEZyZWQueG1sLHYgMS4yIDIwMDcvMDIvMjcgMjA6NDg6MzggbWFydGluIEV4cCAkPC9DVlM+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6T3V0cHV0OjpGaWx0ZXJDb250ZW50IyMjRnJlZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPlN1YnNjcmliZSB0aGUgb3V0cHV0IGZpbHRlciBhdCB0aGUgc3lzdGVtLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5NZWxkZXQgZGVuIE91dHB1dEZpbHRlckZyZWQgYW0gU3lzdGVtIGFuLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyZWQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok91dHB1dEZpbHRlckZyZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlYnVnIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPCEtLQogICAgICAgICRTZWxmLT57J0Zyb250ZW5kOjpPdXRwdXQ6OkZpbHRlckNvbnRlbnQnfS0+eydGcmVkJ30gPSB7CiAgICAgICAgICAgIE1vZHVsZSA9PiAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok91dHB1dEZpbHRlckZyZWQnLAogICAgICAgICAgICBEZWJ1ZyA9PiAwLAogICAgICAgIH07CiAgICAtLT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyZWQ6OkhUTUxDaGVjayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPlR1cm4gb24gaWYgeW91IHdhbnQgYW4gcmVhbHRpbWUgSFRNTC1jaGVja2VyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5IaWVyIGFrdGl2aWVyZW4gd2VubiB6dXIgTGF1ZnplaXQgZWluIEhUTUwtQ2hlY2tlciBhdXNnZWb8aHJ0IHdlcmRlbiBzb2xsLiBXSUNIVElHOiBEYXMgQ3Bhbi1Nb2R1bCBIVE1MOjpsaW50IGlzdCBoaWVyZvxyIG5vdHdlbmRpZyE8L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmVkPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyZWQ6OlNUREVSUkxvZyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPlR1cm4gb24gaWYgeW91IHdhbnQgYW4gcmVhbHRpbWUgSFRNTC1jaGVja2VyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5IaWVyIGFrdGl2aWVyZW4gd2VubiB6dXIgTGF1ZnplaXQgZWluIEhUTUwtQ2hlY2tlciBhdXNnZWb8aHJ0IHdlcmRlbiBzb2xsLiBXSUNIVElHOiBEYXMgQ3Bhbi1Nb2R1bCBIVE1MOjpsaW50IGlzdCBoaWVyZvxyIG5vdHdlbmRpZyE8L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmVkPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyZWQ6OkFwYWNoZUVycm9ybG9nV2FybmluZ3MiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5UdXJuIG9uIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgQXBhY2hlIGVycm9ycy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJkZSI+SGllciBha3RpdmllcmVuIHdlbm4gbWFuIHp1ciBMYXVmemVpdCBkaWUgQXBhY2hlIEVycm9ycyBzZWhlbiB3aWxsLiBXSUNIVElHOiBEZXIgT1RSUy1TeXN0ZW1iZW51dGVyIGJyYXVjaHQgTGVzZXJlY2h0ZSBhdWYgZGFzIEFwYWNoZSBFcnJvcl9sb2chISE8L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmVkPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyZWQ6OkNWU0ZpbHRlciIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPlR1cm4gb24gaWYgeW91IHdhbnQgdG8gYWxsb3cgdGhlIENWU0ZpbHRlciByZWFsdGltZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJkZSI+SGllciBha3RpdmllcmVuIHVtIHp1ciBMYXVmemVpdCBiZXJlaXRzIGRpZSBDVlMtRmlsdGVyIHp1IHRlc3Rlbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmVkPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyZWQ6OlBhdGhUb0NWU0ZpbHRlciIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPlBhdGggdG8gdGhlIGN2cyBmaWx0ZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZGUiPlBmYWQgenVtIENWUy1GaWx0ZXIuIEJlaW0gQ1ZTLUZpbHRlciBoYW5kZWx0IGVzIHNpY2ggdW0gZGllIGZpbHRlci1leHRlbmRlZC5wbCBkZXMgQ1ZTUk9PVC1SZXBvc2l0aW9yeSBkZXMgaW50ZXJuZW4gQ1ZTLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyZWQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4vaG9tZS90ci9zcmMvQ1ZTUk9PVC1pbnQ8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+Cg==
IyAtLQojIEFBQUZyZWQucG0gLSB0aGUgY29uZmlnIHRvIGJpbmQgU1RERVJSIHRvIGFuIGxvZyBmaWxlIHVzYWJsZSBmb3IgZnJlZAojIENvcHlyaWdodCAoQykgMjAwMy0yMDA3IE9UUlMgR21iSCwgaHR0cDovL290cnMuY29tLwojIC0tCiMgJElkOiBBQUFGcmVkLnBtLHYgMS4xIDIwMDcvMDIvMjcgMjA6NDg6MzggbWFydGluIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLnR4dC4KIyAtLQoKICAgIGlmICgkRU5We0hUVFBfVVNFUl9BR0VOVH0pIHsKICAgICAgICAjIGNoZWNrIGxvZyBmaWxlIHNpemUKICAgICAgICBteSAkU2l6ZSA9IC1zICRTZWxmLT57SG9tZX0uIi92YXIvZnJlZC5sb2ciOwogICAgICAgIGlmICgkU2l6ZSA+IDIwKjEwMjQqMTAyNCkgewogICAgICAgICAgICB1bmxpbmsgJFNlbGYtPntIb21lfS4iL3Zhci9mcmVkLmxvZyI7CiAgICAgICAgfQogICAgICAgICMgY3JlYXRlIHRtcCBmaWxlIGhhbmRsZQogICAgICAgIG9wZW4oT0xET1VULCAiPiZTVERFUlIiKTsKICAgICAgICAjIG1vdmUgU1RET1VUIHRvIHRtcCBmaWxlCiAgICAgICAgaWYgKCFvcGVuKFNUREVSUiwgIj4+ICIuJFNlbGYtPntIb21lfS4iL3Zhci9mcmVkLmxvZyIpKSB7CiAgICAgICAgICAgIHByaW50IFNUREVSUiAiRVJST1I6IENhbid0IHdyaXRlICRTZWxmLT57SG9tZX0vdmFyL2ZyZWQubG9nOiAkISI7CiAgICAgICAgfQogICAgICAgICMgcmVzdG9yZSBTVERPVVQgZmlsZSBoYW5kbGUKIyAgICAgICBvcGVuKFNURE9VVCwgIj4mT0xET1VUIik7CiAgICAgICAgY2xvc2UoT0xET1VUKTsKICAgIH0KCjE7Cg==