Calendar 1.7.1 OTRS GmbH http://otrs.org/ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Updated to 2.2 framework. A web calendar. Ein Web Kalender. 2.2.x The Calendar Application will be found at the navigation bar to handle internal events. Die Kalender Applikation ist in der Navigationsleiste zu finden. Mit ihr koennen interne Termine verwaltet werden. 2007-06-28 01:08:50 opms.otrs.com PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iQXBwbGljYXRpb24iPgogICAgPENWUz4kSWQ6IENhbGVuZGFyLnhtbCx2IDEuOCAyMDA3LzAxLzE1IDIyOjE2OjU3IG1oIEV4cCAkPC9DVlM+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRDYWxlbmRhciIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPkFsbCBwYXJhbWV0ZXJzIGZvciB0aGUgQ2FsZW5kYXIgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZGUiPkFsbGUgUGFyYW1ldGVyIGRlcyBDYWxlbmRhci1PYmpla3RzIGltIEFnZW50LUludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5DYWxlbmRhcjwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkEgd2ViIGNhbGVuZGFyPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkNhbGVuZGFyPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPkNhbGVuZGFyPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkEgd2ViIGNhbGVuZGFyPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5DYWxlbmRhcjwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5NZW51PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz5JdGVtQXJlYTwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPEltYWdlPmNhbGVuZGFyLnBuZzwvSW1hZ2U+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50Q2FsZW5kYXI8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5DYWxlbmRhcjwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+YzwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjgwMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPlRvZGF5PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5Ub2RheTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8SW1hZ2U+dG9kYXkucG5nPC9JbWFnZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRDYWxlbmRhcjwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5DYWxlbmRhcjwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+bzwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjEwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+NSBEYXkgV2VlayBWaWV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT41IERheTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8SW1hZ2U+NWRheXMucG5nPC9JbWFnZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRDYWxlbmRhciZhbXA7Vmlldz1XZWVrNTwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5DYWxlbmRhcjwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+NTwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjExMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+NyBEYXkgV2VlayBWaWV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT43IERheTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8SW1hZ2U+N2RheXMucG5nPC9JbWFnZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRDYWxlbmRhciZhbXA7Vmlldz1XZWVrNzwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5DYWxlbmRhcjwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+NzwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjEyMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+MyBNb250aCBWaWV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT4zIE1vbnRoPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxJbWFnZT5tb250aC5wbmc8L0ltYWdlPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudENhbGVuZGFyJmFtcDtWaWV3PU1vbnRoPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+Q2FsZW5kYXI8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT4zPC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+MTMwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok5vdGlmeU1vZHVsZSMjIzgwLVNob3dDYWxlbmRhckV2ZW50cyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPlRoaXMgbW9kdWxlIGRpc3BsYXlzIGNhbGVuZGFyIGV2ZW50cyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5NaXQgZGllc2VtIE1vZHVsIHdlcmRlbiBLYWxlbmRlci1FaW50cuRnZSBpbSBBZ2VudC1JbnRlcmZhY2UgYW5nZXplaWd0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkNhbGVuZGFyPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVOb3RpZnk8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6Tm90aWZpY2F0aW9uQ2FsZW5kYXI8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+ IyAtLQojIEtlcm5lbC9TeXN0ZW0vQ2FsZW5kYXJFdmVudC5wbSAtIG1hbmFnZSBhbGwgY2FsZW5kYXIgZXZlbnRzCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IENhbGVuZGFyRXZlbnQucG0sdiAxLjEyIDIwMDcvMDEvMTUgMjI6MTY6NTggbWggRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDYWxlbmRhckV2ZW50OwoKdXNlIHN0cmljdDsKdXNlIERhdGU6OlBjYWxjIHF3KDphbGwpOwp1c2UgS2VybmVsOjpTeXN0ZW06OkVtYWlsOwoKdXNlIHZhcnMgcXcoQElTQSAkVkVSU0lPTik7CiRWRVJTSU9OID0gJyRSZXZpc2lvbjogMS4xMiAkJzsKJFZFUlNJT04gPX4gcy9eXCQuKjpcVyguKilcVy4rPyQvJDEvOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpDYWxlbmRhckV2ZW50IC0gY2FsZW5kYXIgZXZlbnQgbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBjYWxlbmRhciBldmVudCBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OkNvbmZpZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TG9nOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpEQjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6Q2FsZW5kYXJFdmVudDsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJFRpbWVPYmpldCA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICApOwogICAgbXkgJExvZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpMb2ctPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTWFpbk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpNYWluLT5uZXcoCiAgICAgICAgTG9nT2JqZWN0ID0+ICRMb2dPYmplY3QsCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCA9PiAkTWFpbk9iamVjdCwKICAgICAgICBMb2dPYmplY3QgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkQ2FsZW5kYXJFdmVudE9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpDYWxlbmRhckV2ZW50LT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ID0+ICRMb2dPYmplY3QsCiAgICAgICAgREJPYmplY3QgPT4gJERCT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgPT4gJE1haW5PYmplY3QsCiAgICAgICAgVGltZU9iamVjdCA9PiAkVGltZU9iamVjdCwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICRUeXBlID0gc2hpZnQ7CiAgICBteSAlUGFyYW0gPSBAXzsKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzICgkU2VsZiwgJFR5cGUpOwogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yZWFjaCAocXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IExvZ09iamVjdCBUaW1lT2JqZWN0IFVzZXJPYmplY3QpKSB7CiAgICAgICAgJFNlbGYtPnskX30gPSAkUGFyYW17JF99IHx8IGRpZSAiR290IG5vICRfISI7CiAgICB9CiAgICAkU2VsZi0+e1NlbmRtYWlsT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpFbWFpbC0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBFdmVudEFkZCgpCgpjcmVhdGVzIGEgbmV3IGV2ZW50CgogICAgbXkgJEV2ZW50SUQgPSAkQ2FsZW5kYXJFdmVudE9iamVjdC0+RXZlbnRBZGQoCiAgICAgICAgVGl0bGUgPT4gJ1NvbWUgVGl0bGUnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdTb21lIERlc2NyaXB0aW9uJywKICAgICAgICBMb2NhdGlvbiA9PiAnU29tZSBMb2NhdGlvbicsCiAgICAgICAgU3RhcnRUaW1lID0+ICcxOTc3LTEwLTI3IDIwOjE1OjAwJywKICAgICAgICBFbmRUaW1lID0+ICcxOTc3LTEwLTI3IDIxOjAwOjAwJywKICAgICAgICBTZXF1ZW5jZUVuZFRpbWUgPT4gJ05vcm1hbCcsICNZZWFybHkgV2Vla2x5IE1vbnRobHkKICAgICAgICBTdGF0ZSA9PiAnTWVldGluZycsCiAgICAgICAgUGFydGljaXBhbnRJRHMgPT4gWzEyMywgMSwgMiwgM10KICAgICAgICBPcmdhbml6ZXJJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgRXZlbnRBZGQgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICVQYXJhbSA9IEBfOwogICAgbXkgJURCUGFyYW0gPSAoKTsKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3JlYWNoIChxdyhUaXRsZSBEZXNjcmlwdGlvbiBMb2NhdGlvbiBTdGFydFRpbWUgRW5kVGltZSBTZXF1ZW5jZUVuZFRpbWUgU3RhdGUgUGFydGljaXBhbnRJRHMgT3JnYW5pemVySUQgVXNlcklEKSkgewogICAgICAgIGlmICghZGVmaW5lZCAoJFBhcmFteyRffSkpIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiTmVlZCAkXyEiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgICMgY2hlY2sgY29udGVudAogICAgaWYgKCFkZWZpbmVkKCRQYXJhbXtEZXNjcmlwdGlvbn0pKSB7CiAgICAgICAgJFBhcmFte0Rlc2NyaXB0aW9ufSA9ICctJzsKICAgIH0KICAgICMgZGIgcXVvdGUKICAgIGZvcmVhY2ggKHF3KFRpdGxlIERlc2NyaXB0aW9uIExvY2F0aW9uIFN0YXJ0VGltZSBFbmRUaW1lIFNlcXVlbmNlRW5kVGltZSBTZXF1ZW5jZVR5cGUgUmVtaW5kZXIgU3RhdGUpKSB7CiAgICAgICAgJERCUGFyYW17JF99ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRQYXJhbXskX30pOwogICAgfQogICAgZm9yZWFjaCAocXcoT3JnYW5pemVySUQgVXNlcklEKSkgewogICAgICAgICREQlBhcmFteyRffSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSgkUGFyYW17JF99LCAnSW50ZWdlcicpOwogICAgfQogICAgIyBzcWwKICAgIG15ICRTUUwgPSAiSU5TRVJUIElOVE8gY2FsZW5kYXJfZXZlbnQgIi4KICAgICAgICAiICh0aXRsZSwgY29udGVudCwgbG9jYXRpb24sIHN0YXJ0X3RpbWUsIGVuZF90aW1lLCBzZXF1ZW5jZV9lbmRfdGltZSwgc2VxdWVuY2VfdHlwZSwgIi4KICAgICAgICAiIHJlbWluZGVyLCBvd25lcl9pZCwgZXZlbnRfc3RhdHVzLCAiLgogICAgICAgICIgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgIi4KICAgICAgICAiIFZBTFVFUyAiLgogICAgICAgICIgKCckREJQYXJhbXtUaXRsZX0nLCAnJERCUGFyYW17RGVzY3JpcHRpb259JywgJyREQlBhcmFte0xvY2F0aW9ufScsICckREJQYXJhbXtTdGFydFRpbWV9JywgIi4KICAgICAgICAiICckREJQYXJhbXtFbmRUaW1lfScsICckREJQYXJhbXtTZXF1ZW5jZUVuZFRpbWV9JywgJyREQlBhcmFte1NlcXVlbmNlVHlwZX0nLCAiLgogICAgICAgICIgJyREQlBhcmFte1JlbWluZGVyfScsICREQlBhcmFte09yZ2FuaXplcklEfSwgJyREQlBhcmFte1N0YXRlfScsICIuCiAgICAgICAgIiBjdXJyZW50X3RpbWVzdGFtcCwgJERCUGFyYW17VXNlcklEfSwgY3VycmVudF90aW1lc3RhbXAsICREQlBhcmFte1VzZXJJRH0pIjsKICAgIGlmICgkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICRTUUwpKSB7CiAgICAgICAgbXkgJEV2ZW50SUQ7CiAgICAgICAgbXkgJFNRTCA9ICJTRUxFQ1QgaWQgRlJPTSBjYWxlbmRhcl9ldmVudCBXSEVSRSAiLgogICAgICAgICAgICAiIHN0YXJ0X3RpbWUgPSAnJERCUGFyYW17U3RhcnRUaW1lfScgQU5EIGVuZF90aW1lID0gJyREQlBhcmFte0VuZFRpbWV9JyBBTkQgIi4KICAgICAgICAgICAgIiBvd25lcl9pZCA9ICREQlBhcmFte09yZ2FuaXplcklEfSBBTkQgdGl0bGUgPSAnJERCUGFyYW17VGl0bGV9JyI7CiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoU1FMID0+ICRTUUwpOwogICAgICAgIHdoaWxlIChteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSkgewogICAgICAgICAgICAkRXZlbnRJRCA9ICRSb3dbMF07CiAgICAgICAgfQogICAgICAgICMgdXBkYXRlZCBkYgogICAgICAgIGZvcmVhY2ggbXkgJFBhcnRpY2lwYW50SUQgKEB7JFBhcmFte1BhcnRpY2lwYW50SURzfX0pIHsKICAgICAgICAgICAgJFBhcnRpY2lwYW50SUQgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJFBhcnRpY2lwYW50SUQpOwogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPIGNhbGVuZGFyX2V2ZW50X2ludm9sdmVkICIuCiAgICAgICAgICAgICAgICAgICAgIiAoZXZlbnRfaWQsIHVzZXJfaWQpIFZBTFVFUyAoJEV2ZW50SUQsICRQYXJ0aWNpcGFudElEKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICMgbm90aWZ5CiAgICAgICAgbXkgJGlDYWxlbmRhciA9ICRTZWxmLT5faUNhbGVuZGFyTWVzc2FnZSgKICAgICAgICAgICAgRXZlbnRJRCA9PiAkRXZlbnRJRCwKICAgICAgICAgICAgTWV0aG9kID0+ICdSRVFVRVNUJywKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgbXkgJE5vdGlmeSA9ICRTZWxmLT5fRW1haWxNZXNzYWdlKAogICAgICAgICAgICBFdmVudElEID0+ICRFdmVudElELAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoIG15ICRQYXJ0aWNpcGFudElEIChAeyRQYXJhbXtQYXJ0aWNpcGFudElEc319KSB7CiAgICAgICAgICAgICMgb3duZXIgbG9va3VwCiAgICAgICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFBhcnRpY2lwYW50SUQsCiAgICAgICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAjIHNlbmQgbm90aWZpY2F0aW9uCiAgICAgICAgICAgIGlmICgkVXNlcntVc2VyRW1haWx9KSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e1NlbmRtYWlsT2JqZWN0fS0+U2VuZCgKICAgICAgICAgICAgICAgICAgICBGcm9tID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdOb3RpZmljYXRpb25TZW5kZXJOYW1lJykuCiAgICAgICAgICAgICAgICAgICAgICAgICcgPCcuJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ05vdGlmaWNhdGlvblNlbmRlckVtYWlsJykuJz4nLAogICAgICAgICAgICAgICAgICAgIFRvID0+ICRVc2Vye1VzZXJFbWFpbH0sCiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAiW0V2ZW50L05ld10gJFBhcmFte1RpdGxlfSIsCiAgICAgICAgICAgICAgICAgICAgICAgICdSZXBseS1UbycgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ05vdGlmaWNhdGlvblNlbmRlckVtYWlsJyksCiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgQ2hhcnNldCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRGVmYXVsdENoYXJzZXQnKSB8fCAnaXNvLTg4NTktMScsCiAgICAgICAgICAgICAgICAgICAgQm9keSA9PiAkTm90aWZ5LAogICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSA9PiAiJFBhcmFte1RpdGxlfS5pY3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkaUNhbGVuZGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gInRleHQvY2FsZW5kYXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5jb2RpbmcgPT4gJ3BsYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkRXZlbnRJRDsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHJldHVybjsKICAgIH0KfQoKPWl0ZW0gRXZlbnRVcGRhdGUoKQoKdXBkYXRlcyBhbiBldmVudAoKICAgICRDYWxlbmRhckV2ZW50T2JqZWN0LT5FdmVudFVwZGF0ZSgKICAgICAgICBFdmVudElEID0+IDEyMywKICAgICAgICBUaXRsZSA9PiAnU29tZSBUaXRsZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NvbWUgRGVzY3JpcHRpb24nLAogICAgICAgIExvY2F0aW9uID0+ICdTb21lIExvY2F0aW9uJywKICAgICAgICBTdGFydFRpbWUgPT4gJzE5NzctMTAtMjcgMjA6MTU6MDAnLAogICAgICAgIEVuZFRpbWUgPT4gJzE5NzctMTAtMjcgMjE6MDA6MDAnLAogICAgICAgIFNlcXVlbmNlRW5kVGltZSA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSA9PiAnTWVldGluZycsCiAgICAgICAgUGFydGljaXBhbnRJRHMgPT4gWzEyMywgMSwgMiwgM10KICAgICAgICBPcmdhbml6ZXJJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgRXZlbnRVcGRhdGUgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICVQYXJhbSA9IEBfOwogICAgbXkgJURCUGFyYW0gPSAoKTsKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3JlYWNoIChxdyhFdmVudElEIFRpdGxlIERlc2NyaXB0aW9uIExvY2F0aW9uIFN0YXJ0VGltZSBFbmRUaW1lIFNlcXVlbmNlRW5kVGltZSBTZXF1ZW5jZVR5cGUgU3RhdGUgT3JnYW5pemVySUQgVXNlcklEKSkgewogICAgICAgIGlmICghZGVmaW5lZCAoJFBhcmFteyRffSkpIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiTmVlZCAkXyEiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgICMgY2hlY2sgY29udGVudAogICAgaWYgKCFkZWZpbmVkKCRQYXJhbXtEZXNjcmlwdGlvbn0pKSB7CiAgICAgICAgJFBhcmFte0Rlc2NyaXB0aW9ufSA9ICcnOwogICAgfQogICAgIyBkYiBxdW90ZQogICAgZm9yZWFjaCAocXcoVGl0bGUgRGVzY3JpcHRpb24gTG9jYXRpb24gU3RhcnRUaW1lIEVuZFRpbWUgU2VxdWVuY2VFbmRUaW1lIFNlcXVlbmNlVHlwZSBSZW1pbmRlciBTdGF0ZSkpIHsKICAgICAgICAkREJQYXJhbXskX30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJFBhcmFteyRffSk7CiAgICB9CiAgICBmb3JlYWNoIChxdyhFdmVudElEIE9yZ2FuaXplcklEIFVzZXJJRCkpIHsKICAgICAgICAkREJQYXJhbXskX30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJFBhcmFteyRffSwgJ0ludGVnZXInKTsKICAgIH0KICAgICMgc3FsCiAgICBteSAkU1FMID0gIlVQREFURSBjYWxlbmRhcl9ldmVudCBTRVQgIi4KICAgICAgICAiIHRpdGxlID0gJyREQlBhcmFte1RpdGxlfScsICIuCiAgICAgICAgIiBjb250ZW50ID0gJyREQlBhcmFte0Rlc2NyaXB0aW9ufScsICIuCiAgICAgICAgIiBsb2NhdGlvbiA9ICckREJQYXJhbXtMb2NhdGlvbn0nLCAiLgogICAgICAgICIgc3RhcnRfdGltZSA9ICckREJQYXJhbXtTdGFydFRpbWV9JywgIi4KICAgICAgICAiIGVuZF90aW1lID0gJyREQlBhcmFte0VuZFRpbWV9JywgIi4KICAgICAgICAiIHNlcXVlbmNlX3R5cGUgPSAnJERCUGFyYW17U2VxdWVuY2VUeXBlfScsICIuCiAgICAgICAgIiBzZXF1ZW5jZV9lbmRfdGltZSA9ICckREJQYXJhbXtTZXF1ZW5jZUVuZFRpbWV9JywgIi4KICAgICAgICAiIHJlbWluZGVyID0gJyREQlBhcmFte1JlbWluZGVyfScsICIuCiAgICAgICAgIiBvd25lcl9pZCA9ICREQlBhcmFte09yZ2FuaXplcklEfSwgIi4KICAgICAgICAiIGV2ZW50X3N0YXR1cyA9ICckREJQYXJhbXtTdGF0ZX0nLCAiLgogICAgICAgICIgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgIi4KICAgICAgICAiIGNoYW5nZV9ieSA9ICREQlBhcmFte1VzZXJJRH0gIi4KICAgICAgICAiIFdIRVJFICIuCiAgICAgICAgIiBpZCA9ICREQlBhcmFte0V2ZW50SUR9IjsKICAgIGlmICgkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICRTUUwpKSB7CiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIGNhbGVuZGFyX2V2ZW50X2ludm9sdmVkIFdIRVJFIGV2ZW50X2lkID0gJERCUGFyYW17RXZlbnRJRH0iLAogICAgICAgICk7CiAgICAgICAgIyB1cGRhdGVkIGRiCiAgICAgICAgZm9yZWFjaCBteSAkUGFydGljaXBhbnRJRCAoQHskUGFyYW17UGFydGljaXBhbnRJRHN9fSkgewogICAgICAgICAgICAkUGFydGljaXBhbnRJRCA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSgkUGFydGljaXBhbnRJRCk7CiAgICAgICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiSU5TRVJUIElOVE8gY2FsZW5kYXJfZXZlbnRfaW52b2x2ZWQgIi4KICAgICAgICAgICAgICAgICAgICAiIChldmVudF9pZCwgdXNlcl9pZCkgVkFMVUVTICgkREJQYXJhbXtFdmVudElEfSwgJFBhcnRpY2lwYW50SUQpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgIyBub3RpZnkKICAgICAgICBteSAkaUNhbGVuZGFyID0gJFNlbGYtPl9pQ2FsZW5kYXJNZXNzYWdlKAogICAgICAgICAgICBFdmVudElEID0+ICRQYXJhbXtFdmVudElEfSwKICAgICAgICAgICAgTWV0aG9kID0+ICdSRVFVRVNUJywKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgbXkgJE5vdGlmeSA9ICRTZWxmLT5fRW1haWxNZXNzYWdlKAogICAgICAgICAgICBFdmVudElEID0+ICRQYXJhbXtFdmVudElEfSwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgZm9yZWFjaCBteSAkUGFydGljaXBhbnRJRHMgKEB7JFBhcmFte1BhcnRpY2lwYW50SURzfX0pIHsKICAgICAgICAgICAgIyBvd25lciBsb29rdXAKICAgICAgICAgICAgbXkgJVVzZXIgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFydGljaXBhbnRJRHMsCiAgICAgICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAjIHNlbmQgbm90aWZpY2F0aW9uCiAgICAgICAgICAgIGlmICgkVXNlcntVc2VyRW1haWx9KSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e1NlbmRtYWlsT2JqZWN0fS0+U2VuZCgKICAgICAgICAgICAgICAgICAgICBGcm9tID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdOb3RpZmljYXRpb25TZW5kZXJOYW1lJykuCiAgICAgICAgICAgICAgICAgICAgICAgICcgPCcuJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ05vdGlmaWNhdGlvblNlbmRlckVtYWlsJykuJz4nLAogICAgICAgICAgICAgICAgICAgIFRvID0+ICRVc2Vye1VzZXJFbWFpbH0sCiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAiW0V2ZW50L1VwZGF0ZV0gJFBhcmFte1RpdGxlfSIsCiAgICAgICAgICAgICAgICAgICAgICAgICdSZXBseS1UbycgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ05vdGlmaWNhdGlvblNlbmRlckVtYWlsJyksCiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgQ2hhcnNldCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRGVmYXVsdENoYXJzZXQnKSB8fCAnaXNvLTg4NTktMScsCiAgICAgICAgICAgICAgICAgICAgQm9keSA9PiAkTm90aWZ5LAogICAgICAgICAgICAgICAgICAgIExvb3AgPT4gMSwKICAgICAgICAgICAgICAgICAgICBBdHRhY2htZW50ID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgPT4gIiRQYXJhbXtUaXRsZX0uaWNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJGlDYWxlbmRhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJ0ZXh0L2NhbGVuZGFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuY29kaW5nID0+ICdwbGFpbicsCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHJldHVybjsKICAgIH0KfQoKPWl0ZW0gRXZlbnRDYW5jZWwoKQoKZGVsZXRlcyBhbiBldmVudAoKICAgICRDYWxlbmRhckV2ZW50T2JqZWN0LT5FdmVudENhbmNlbCgKICAgICAgICBFdmVudElEID0+IDEyMywKICAgICAgICBVc2VySUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBFdmVudENhbmNlbCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yZWFjaCAocXcoRXZlbnRJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCFkZWZpbmVkICgkUGFyYW17JF99KSkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyhQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJOZWVkICRfISIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgIyBzZW5kIGRlbGV0ZSBub3RpZmljYXRpb24KICAgIG15ICVFdmVudCA9ICRTZWxmLT5FdmVudEdldCglUGFyYW0pOwogICAgIyBub3RpZnkKICAgIGlmICgkRXZlbnR7UGFydGljaXBhbnRJRHN9KSB7CiAgICAgICAgIyBub3RpZnkKICAgICAgICBteSAkaUNhbGVuZGFyID0gJFNlbGYtPl9pQ2FsZW5kYXJNZXNzYWdlKAogICAgICAgICAgICBFdmVudElEID0+ICRQYXJhbXtFdmVudElEfSwKICAgICAgICAgICAgTWV0aG9kID0+ICdDQU5DRUwnLAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBteSAkTm90aWZ5ID0gJFNlbGYtPl9FbWFpbE1lc3NhZ2UoCiAgICAgICAgICAgIEV2ZW50SUQgPT4gJFBhcmFte0V2ZW50SUR9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBmb3JlYWNoIG15ICRQYXJ0aWNpcGFudElEcyAoQHskRXZlbnR7UGFydGljaXBhbnRJRHN9fSkgewogICAgICAgICAgICAjIG93bmVyIGxvb2t1cAogICAgICAgICAgICBteSAlVXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRQYXJ0aWNpcGFudElEcywKICAgICAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICMgc2VuZCBub3RpZmljYXRpb24KICAgICAgICAgICAgaWYgKCRVc2Vye1VzZXJFbWFpbH0pIHsKICAgICAgICAgICAgICAgICRTZWxmLT57U2VuZG1haWxPYmplY3R9LT5TZW5kKAogICAgICAgICAgICAgICAgICAgIEZyb20gPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ05vdGlmaWNhdGlvblNlbmRlck5hbWUnKS4KICAgICAgICAgICAgICAgICAgICAgICAgJyA8Jy4kU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnTm90aWZpY2F0aW9uU2VuZGVyRW1haWwnKS4nPicsCiAgICAgICAgICAgICAgICAgICAgVG8gPT4gJFVzZXJ7VXNlckVtYWlsfSwKICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICJbRXZlbnQvQ2FuY2VsZWRdICRFdmVudHtUaXRsZX0iLAogICAgICAgICAgICAgICAgICAgICAgICAnUmVwbHktVG8nID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdOb3RpZmljYXRpb25TZW5kZXJFbWFpbCcpLAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIENoYXJzZXQgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0RlZmF1bHRDaGFyc2V0JykgfHwgJ2lzby04ODU5LTEnLAogICAgICAgICAgICAgICAgICAgIEJvZHkgPT4gIioqKiBbRXZlbnQvQ2FuY2VsZWRdICoqKlxuJE5vdGlmeSIsCiAgICAgICAgICAgICAgICAgICAgTG9vcCA9PiAxLAogICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSA9PiAiJEV2ZW50e1RpdGxlfS5pY3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkaUNhbGVuZGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gInRleHQvY2FsZW5kYXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5jb2RpbmcgPT4gJ3BsYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgIyBkYiBxdW90ZQogICAgZm9yZWFjaCAocXcoRXZlbnRJRCkpIHsKICAgICAgICAkUGFyYW17JF99ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRQYXJhbXskX30sICdJbnRlZ2VyJyk7CiAgICB9CiAgICAjIHNxbAogICAgaWYgKCRTZWxmLT57REJPYmplY3R9LT5EbyhTUUwgPT4gIkRFTEVURSBGUk9NIGNhbGVuZGFyX2V2ZW50IFdIRVJFIGlkID0gJFBhcmFte0V2ZW50SUR9IikpIHsKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gY2FsZW5kYXJfZXZlbnRfaW52b2x2ZWQgV0hFUkUgZXZlbnRfaWQgPSAkUGFyYW17RXZlbnRJRH0iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm47CiAgICB9Cn0KCj1pdGVtIEV2ZW50R2V0KCkKCmdldCBhbiBldmVudAoKICAgIG15ICVFdmVudCA9ICRDYWxlbmRhckV2ZW50T2JqZWN0LT5FdmVudEdldCgKICAgICAgICBFdmVudElEID0+IDEyMywKICAgICAgICBVc2VySUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBFdmVudEdldCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CiAgICBteSAlRGF0YSA9ICgpOwogICAgbXkgQFBhcnRpY2lwYW50SURzID0gKCk7CiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yZWFjaCAocXcoRXZlbnRJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCFkZWZpbmVkICgkUGFyYW17JF99KSkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyhQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJOZWVkICRfISIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgIyBkYiBxdW90ZQogICAgZm9yZWFjaCAocXcoRXZlbnRJRCkpIHsKICAgICAgICAkUGFyYW17JF99ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRQYXJhbXskX30sICdJbnRlZ2VyJyk7CiAgICB9CiAgICAjIHNxbCBmb3IgZXZlbnQKICAgIG15ICRTUUwgPSAiU0VMRUNUIHRpdGxlLCBjb250ZW50LCBsb2NhdGlvbiwgc3RhcnRfdGltZSwgZW5kX3RpbWUsIHNlcXVlbmNlX2VuZF90aW1lLCAiLgogICAgICAgICIgc2VxdWVuY2VfdHlwZSwgcmVtaW5kZXIsIG93bmVyX2lkLCBldmVudF9zdGF0dXMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkgIi4KICAgICAgICAiIEZST00gY2FsZW5kYXJfZXZlbnQgV0hFUkUgaWQgPSAkUGFyYW17RXZlbnRJRH0iOwogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoU1FMID0+ICRTUUwpOwogICAgd2hpbGUgKG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpKSB7CiAgICAgICAgJERhdGF7RXZlbnRJRH0gPSAkUGFyYW17RXZlbnRJRH07CiAgICAgICAgJERhdGF7VGl0bGV9ID0gJFJvd1swXSB8fCAnLSc7CiAgICAgICAgJERhdGF7RGVzY3JpcHRpb259ID0gJFJvd1sxXSB8fCAnJzsKICAgICAgICAkRGF0YXtMb2NhdGlvbn0gPSAkUm93WzJdIHx8ICcnOwogICAgICAgICREYXRhe1N0YXJ0VGltZX0gPSAkUm93WzNdIHx8ICcnOwogICAgICAgICREYXRhe0VuZFRpbWV9ID0gJFJvd1s0XSB8fCAnJzsKICAgICAgICAkRGF0YXtTZXF1ZW5jZUVuZFRpbWV9ID0gJFJvd1s1XTsKICAgICAgICAkRGF0YXtTZXF1ZW5jZVR5cGV9ID0gJFJvd1s2XSB8fCAnU2VxdWVuY2VUeXBlOjpOb25lJzsKICAgICAgICAkRGF0YXtSZW1pbmRlcn0gPSAkUm93WzddOwogICAgICAgICREYXRhe09yZ2FuaXplcklEfSA9ICRSb3dbOF07CiAgICAgICAgJERhdGF7U3RhdGV9ID0gJFJvd1s5XTsKICAgICAgICAkRGF0YXtDcmVhdGVUaW1lfSA9ICRSb3dbMTBdOwogICAgICAgICREYXRhe0NyZWF0ZUJ5fSA9ICRSb3dbMTFdOwogICAgICAgICREYXRhe0NoYW5nZVRpbWV9ID0gJFJvd1sxMl07CiAgICAgICAgJERhdGF7Q2hhbmdlQnl9ID0gJFJvd1sxM107CiAgICB9CiAgICBpZiAoISREYXRhe0V2ZW50SUR9KSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gIk5vIHN1Y2ggRXZlbnRJRCAkUGFyYW17RXZlbnRJRH0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgICMgc3FsIGZvciBpbnZvbHZlZAogICAgJFNRTCA9ICJTRUxFQ1QgdXNlcl9pZCAiLgogICAgICAgICIgRlJPTSBjYWxlbmRhcl9ldmVudF9pbnZvbHZlZCBXSEVSRSBldmVudF9pZCA9ICRQYXJhbXtFdmVudElEfSI7CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZShTUUwgPT4gJFNRTCk7CiAgICB3aGlsZSAobXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkpIHsKICAgICAgICBwdXNoIChAUGFydGljaXBhbnRJRHMsICRSb3dbMF0pOwogICAgfQogICAgJERhdGF7UGFydGljaXBhbnRJRHN9ID0gXEBQYXJ0aWNpcGFudElEczsKICAgIG15ICRTdGFydFRpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICBTdHJpbmcgPT4gJERhdGF7U3RhcnRUaW1lfSwKICAgICk7CiAgICAoCiAgICAgICAgJERhdGF7U3RhcnRTZWN9LAogICAgICAgICREYXRhe1N0YXJ0TWludXRlfSwKICAgICAgICAkRGF0YXtTdGFydEhvdXJ9LAogICAgICAgICREYXRhe1N0YXJ0RGF5fSwKICAgICAgICAkRGF0YXtTdGFydE1vbnRofSwKICAgICAgICAkRGF0YXtTdGFydFllYXJ9CiAgICApID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN0YXJ0VGltZSwKICAgICk7CgogICAgbXkgJEVuZFRpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICBTdHJpbmcgPT4gJERhdGF7RW5kVGltZX0sCiAgICApOwogICAgKAogICAgICAgICREYXRhe0VuZFNlY30sCiAgICAgICAgJERhdGF7RW5kTWludXRlfSwKICAgICAgICAkRGF0YXtFbmRIb3VyfSwKICAgICAgICAkRGF0YXtFbmREYXl9LAogICAgICAgICREYXRhe0VuZE1vbnRofSwKICAgICAgICAkRGF0YXtFbmRZZWFyfQogICAgKSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICBTeXN0ZW1UaW1lID0+ICRFbmRUaW1lLAogICAgKTsKICAgIGlmICgkRGF0YXtTZXF1ZW5jZUVuZFRpbWV9ICYmICREYXRhe1NlcXVlbmNlRW5kVGltZX0gIX4gL14wMDAwLykgewogICAgICAgIG15ICRTZXF1ZW5jZUVuZFRpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgU3RyaW5nID0+ICREYXRhe1NlcXVlbmNlRW5kVGltZX0sCiAgICAgICAgKTsKICAgICAgICAoCiAgICAgICAgICAgICREYXRhe1NlcXVlbmNlRW5kU2VjfSwKICAgICAgICAgICAgJERhdGF7U2VxdWVuY2VFbmRNaW51dGV9LAogICAgICAgICAgICAkRGF0YXtTZXF1ZW5jZUVuZEhvdXJ9LAogICAgICAgICAgICAkRGF0YXtTZXF1ZW5jZUVuZERheX0sCiAgICAgICAgICAgICREYXRhe1NlcXVlbmNlRW5kTW9udGh9LAogICAgICAgICAgICAkRGF0YXtTZXF1ZW5jZUVuZFllYXJ9CiAgICAgICAgKSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VxdWVuY2VFbmRUaW1lLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICglRGF0YSk7Cn0KCj1pdGVtIEV2ZW50cygpCgpnZXQgZXZlbnRzIGluIHRpbWUgc2xvdAoKICAgIG15ICVFdmVudCA9ICRDYWxlbmRhckV2ZW50T2JqZWN0LT5FdmVudHMoCiAgICAgICAgU3RhcnRUaW1lID0+ICcxOTc3LTEwLTI3IDIwOjE1OjAwJywKICAgICAgICBFbmRUaW1lID0+ICcxOTc3LTEwLTI3IDIxOjAwOjAwJywKICAgICAgICBVc2VySUQgPT4gMTIzLAogICAgKTsKCm9yIGdldCBldmVudHMgd2hlcmUgYXJyYXkgb2YgdXNlciBpZHMgYXJlIGludm9sZWQKCiAgICBteSAlRXZlbnQgPSAkQ2FsZW5kYXJFdmVudE9iamVjdC0+RXZlbnRzKAogICAgICAgIFN0YXJ0VGltZSA9PiAnMTk3Ny0xMC0yNyAyMDoxNTowMCcsCiAgICAgICAgRW5kVGltZSA9PiAnMTk3Ny0xMC0yNyAyMTowMDowMCcsCiAgICAgICAgVXNlcklEcyA9PiBbMTIzLCAzMywgMTFdLAogICAgICAgIFVzZXJJRCA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIEV2ZW50cyB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CiAgICBteSBARXZlbnRJRHMgPSAoKTsKICAgIG15ICVVc2VkID0gKCk7CiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yZWFjaCAocXcoU3RhcnRUaW1lIEVuZFRpbWUgVXNlcklEKSkgewogICAgICAgIGlmICghZGVmaW5lZCAoJFBhcmFteyRffSkpIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiTmVlZCAkXyEiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIG15ICRTdGFydFN5c3RlbVRpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICBTdHJpbmcgPT4gJFBhcmFte1N0YXJ0VGltZX0sCiAgICApOwogICAgbXkgJEVuZFN5c3RlbVRpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICBTdHJpbmcgPT4gJFBhcmFte0VuZFRpbWV9LAogICAgKTsKICAgIG15ICgkU1NlYywgJFNNaW4sICRTSG91ciwgJFNEYXksICRTTW9udGgsICRTWWVhcikgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU3RhcnRTeXN0ZW1UaW1lLAogICAgKTsKICAgIG15ICgkRVNlYywgJEVNaW4sICRFSG91ciwgJEVEYXksICRFTW9udGgsICRFWWVhcikgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkRW5kU3lzdGVtVGltZSwKICAgICk7CiAgICBteSAkRGVsdGEgPSBEZWx0YV9EYXlzKCRTWWVhciwgJFNNb250aCwgJFNEYXksICRFWWVhciwgJEVNb250aCwgJEVEYXkpOwoKICAgIGZvcmVhY2ggKDAuLiREZWx0YSkgewogICAgICAgIG15ICgkWWVhcjEsICRNb250aDEsICREYXkxKSA9IEFkZF9EZWx0YV9EYXlzKCRTWWVhciwgJFNNb250aCwgJFNEYXksICRfKTsKICAgICAgICBteSAoJFllYXIyLCAkTW9udGgyLCAkRGF5MikgPSBBZGRfRGVsdGFfRGF5cygkU1llYXIsICRTTW9udGgsICRTRGF5LCAkXyk7CiAgICAgICAgaWYgKCRfID09IDApIHsKICAgICAgICAgICAgJFBhcmFte1N0YXJ0VGltZX0gPSAiJFllYXIxLSRNb250aDEtJERheTEgJFNIb3VyOiRTTWluOiRTU2VjIjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQYXJhbXtTdGFydFRpbWV9ID0gIiRZZWFyMS0kTW9udGgxLSREYXkxIDAwOjAwOjAwIjsKICAgICAgICB9CiAgICAgICAgaWYgKCRfID09ICREZWx0YSkgewogICAgICAgICAgICAkUGFyYW17RW5kVGltZX0gPSAiJFllYXIyLSRNb250aDItJERheTIgJEVIb3VyOiRFTWluOiRFU2VjIjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQYXJhbXtFbmRUaW1lfSA9ICIkWWVhcjItJE1vbnRoMi0kRGF5MiAyMzo1OTo1OSI7CiAgICAgICAgfQogICAgICAgICMgZGIgcXVvdGUKICAgICAgICBmb3JlYWNoIChxdyhTdGFydFRpbWUgRW5kVGltZSkpIHsKICAgICAgICAgICAgJFBhcmFteyRffSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSgkUGFyYW17JF99KTsKICAgICAgICB9CiAgICAgICAgIyBzcWwKICAgICAgICBteSAkU1FMID0gIlNFTEVDVCBlLmlkLCBlLnRpdGxlLCBlLmNvbnRlbnQsIGUuc3RhcnRfdGltZSwgZS5lbmRfdGltZSwgZS5ldmVudF9zdGF0dXMgIi4KICAgICAgICAgICAgIiBGUk9NIGNhbGVuZGFyX2V2ZW50IGUgIjsKICAgICAgICBpZiAoJFBhcmFte1VzZXJJRHN9ICYmIEB7JFBhcmFte1VzZXJJRHN9fSkgewogICAgICAgICAgICAkU1FMIC49ICIgLCBjYWxlbmRhcl9ldmVudF9pbnZvbHZlZCBlaSAiOwogICAgICAgIH0KICAgICAgICAkU1FMIC49ICIgV0hFUkUgIi4KICAgICAgICAgICAgIiAoKGUuc3RhcnRfdGltZSA+PSAnJFBhcmFte1N0YXJ0VGltZX0nIEFORCBlLmVuZF90aW1lIDw9ICckUGFyYW17RW5kVGltZX0nKSAiLgogICAgICAgICAgICAiIE9SICIuCiAgICAgICAgICAgICIgKGUuc3RhcnRfdGltZSA+PSAnJFBhcmFte1N0YXJ0VGltZX0nIEFORCBlLnN0YXJ0X3RpbWUgPD0gJyRQYXJhbXtFbmRUaW1lfScpICIuCiAgICAgICAgICAgICIgT1IgIi4KICAgICAgICAgICAgIiAoZS5lbmRfdGltZSA+PSAnJFBhcmFte1N0YXJ0VGltZX0nIEFORCBlLmVuZF90aW1lIDw9ICckUGFyYW17RW5kVGltZX0nKSAiLgogICAgICAgICAgICAiIE9SICIuCiAgICAgICAgICAgICIgKGUuc3RhcnRfdGltZSA8PSAnJFBhcmFte1N0YXJ0VGltZX0nIEFORCBlLmVuZF90aW1lID49ICckUGFyYW17RW5kVGltZX0nKSkgIjsKICAgICAgICBpZiAoJFBhcmFte1VzZXJJRHN9ICYmIEB7JFBhcmFte1VzZXJJRHN9fSkgewogICAgICAgICAgICAkU1FMIC49ICIgQU5EIGUuaWQgPSBlaS5ldmVudF9pZCBBTkQgZWkudXNlcl9pZCBJTiAoIjsKICAgICAgICAgICAgbXkgJENvdW50ID0gMDsKICAgICAgICAgICAgZm9yZWFjaCAoQHskUGFyYW17VXNlcklEc319KSB7CiAgICAgICAgICAgICAgICBpZiAoJENvdW50KSB7CiAgICAgICAgICAgICAgICAgICAgJFNRTCAuPSAiLCAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJFNRTCAuPSAiJF8iOwogICAgICAgICAgICAgICAgJENvdW50Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFNRTCAuPSAiKSI7CiAgICAgICAgfQogICAgICAgICRTUUwgLj0gIiBPUkRFUiBCWSBlLnN0YXJ0X3RpbWUiOwoKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZShTUUwgPT4gJFNRTCk7CiAgICAgICAgd2hpbGUgKG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpKSB7CiAgICAgICAgICAgIGlmICghJFVzZWR7JFJvd1swXX0pIHsKICAgICAgICAgICAgICAgIG15ICVFdmVudCA9ICgKICAgICAgICAgICAgICAgICAgICBFdmVudElEID0+ICRSb3dbMF0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFJvd1sxXSB8fCAnLScsCiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJFJvd1syXSwKICAgICAgICAgICAgICAgICAgICBTdGFydFRpbWUgPT4gJFJvd1szXSwKICAgICAgICAgICAgICAgICAgICBFbmRUaW1lID0+ICRSb3dbNF0sCiAgICAgICAgICAgICAgICAgICAgU3RhdGUgPT4gJFJvd1s1XSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAkU3RhcnRUaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRFdmVudHtTdGFydFRpbWV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICRFbmRUaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRFdmVudHtFbmRUaW1lfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e1N0YXJ0U2VjfSwKICAgICAgICAgICAgICAgICAgICAkRXZlbnR7U3RhcnRNaW51dGV9LAogICAgICAgICAgICAgICAgICAgICRFdmVudHtTdGFydEhvdXJ9LAogICAgICAgICAgICAgICAgICAgICRFdmVudHtTdGFydERheX0sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e1N0YXJ0TW9udGh9LAogICAgICAgICAgICAgICAgICAgICRFdmVudHtTdGFydFllYXJ9CiAgICAgICAgICAgICAgICApID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFN0YXJ0VGltZSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e0VuZFNlY30sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e0VuZE1pbnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e0VuZEhvdXJ9LAogICAgICAgICAgICAgICAgICAgICRFdmVudHtFbmREYXl9LAogICAgICAgICAgICAgICAgICAgICRFdmVudHtFbmRNb250aH0sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e0VuZFllYXJ9CiAgICAgICAgICAgICAgICApID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJEVuZFRpbWUsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcHVzaCAoQEV2ZW50SURzLCBcJUV2ZW50KTsKICAgICAgICAgICAgICAgICRVc2VkeyRSb3dbMF19ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBteSAkU3lzdGVtVGltZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte1N0YXJ0VGltZX0sCiAgICAgICAgKTsKICAgICAgICBteSAoJFNTZWMsICRTTWluLCAkU0hvdXIsICRTRGF5LCAkU01vbnRoLCAkU1llYXIpID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTeXN0ZW1UaW1lLAogICAgICAgICk7CgogICAgICAgICRTUUwgPSAiU0VMRUNUIGUuaWQsIGUuc2VxdWVuY2VfdHlwZSwgZS50aXRsZSwgZS5jb250ZW50LCBlLnN0YXJ0X3RpbWUsIGUuZW5kX3RpbWUsIGUuZXZlbnRfc3RhdHVzICI7CiAgICAgICAgJFNRTCAuPSAiIEZST00gY2FsZW5kYXJfZXZlbnQgZSAiOwogICAgICAgIGlmICgkUGFyYW17VXNlcklEc30gJiYgQHskUGFyYW17VXNlcklEc319KSB7CiAgICAgICAgICAgICRTUUwgLj0gIiAsIGNhbGVuZGFyX2V2ZW50X2ludm9sdmVkIGVpICI7CiAgICAgICAgfQogICAgICAgICRTUUwgLj0gIiBXSEVSRSAiLgogICAgICAgICAgICAiICgoZS5zdGFydF90aW1lID49ICckUGFyYW17U3RhcnRUaW1lfScgQU5EIGUuc2VxdWVuY2VfZW5kX3RpbWUgPD0gJyRQYXJhbXtFbmRUaW1lfScpICIuCiAgICAgICAgICAgICIgT1IgIi4KICAgICAgICAgICAgIiAoZS5zdGFydF90aW1lID49ICckUGFyYW17U3RhcnRUaW1lfScgQU5EIGUuc3RhcnRfdGltZSA8PSAnJFBhcmFte0VuZFRpbWV9JykgIi4KICAgICAgICAgICAgIiBPUiAiLgogICAgICAgICAgICAiIChlLnNlcXVlbmNlX2VuZF90aW1lID49ICckUGFyYW17U3RhcnRUaW1lfScgQU5EIGUuc2VxdWVuY2VfZW5kX3RpbWUgPD0gJyRQYXJhbXtFbmRUaW1lfScpICIuCiAgICAgICAgICAgICIgT1IgIi4KICAgICAgICAgICAgIiAoZS5zdGFydF90aW1lIDw9ICckUGFyYW17U3RhcnRUaW1lfScgQU5EIGUuc2VxdWVuY2VfZW5kX3RpbWUgPj0gJyRQYXJhbXtFbmRUaW1lfScpKSAiOwogICAgICAgIGlmICgkUGFyYW17VXNlcklEc30gJiYgQHskUGFyYW17VXNlcklEc319KSB7CiAgICAgICAgICAgICRTUUwgLj0gIiBBTkQgZS5pZCA9IGVpLmV2ZW50X2lkIEFORCBlaS51c2VyX2lkIElOICgiOwogICAgICAgICAgICBteSAkQ291bnQgPSAwOwogICAgICAgICAgICBmb3JlYWNoIChAeyRQYXJhbXtVc2VySURzfX0pIHsKICAgICAgICAgICAgICAgIGlmICgkQ291bnQpIHsKICAgICAgICAgICAgICAgICAgICAkU1FMIC49ICIsICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkU1FMIC49ICIkXyI7CiAgICAgICAgICAgICAgICAkQ291bnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkU1FMIC49ICIpIjsKICAgICAgICB9CiAgICAgICAgJFNRTCAuPSAiIE9SREVSIEJZIGUuc3RhcnRfdGltZSI7CgogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKFNRTCA9PiAkU1FMKTsKICAgICAgICB3aGlsZSAobXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkpIHsKICAgICAgICAgICAgaWYgKCEkVXNlZHskUm93WzBdfSkgewogICAgICAgICAgICAgICAgbXkgJUV2ZW50ID0gKAogICAgICAgICAgICAgICAgICAgIEV2ZW50SUQgPT4gJFJvd1swXSwKICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PiAkUm93WzJdIHx8ICctJywKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAkUm93WzNdLAogICAgICAgICAgICAgICAgICAgIFN0YXJ0VGltZSA9PiAkUm93WzRdLAogICAgICAgICAgICAgICAgICAgIEVuZFRpbWUgPT4gJFJvd1s1XSwKICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiAkUm93WzZdLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICRTdGFydFRpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEV2ZW50e1N0YXJ0VGltZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbXkgJEVuZFRpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEV2ZW50e0VuZFRpbWV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICRUb3RhbCA9ICRFbmRUaW1lLSRTdGFydFRpbWU7CiAgICAgICAgICAgICAgICBteSAlRXZlbnRPbGQgPSAoKTsKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAkRXZlbnRPbGR7U3RhcnRTZWN9LAogICAgICAgICAgICAgICAgICAgICRFdmVudE9sZHtTdGFydE1pbnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50T2xke1N0YXJ0SG91cn0sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50T2xke1N0YXJ0RGF5fSwKICAgICAgICAgICAgICAgICAgICAkRXZlbnRPbGR7U3RhcnRNb250aH0sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50T2xke1N0YXJ0WWVhcn0KICAgICAgICAgICAgICAgICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU3RhcnRUaW1lLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAkRXZlbnR7U3RhcnRTZWN9LAogICAgICAgICAgICAgICAgICAgICRFdmVudHtTdGFydE1pbnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e1N0YXJ0SG91cn0sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e1N0YXJ0RGF5fSwKICAgICAgICAgICAgICAgICAgICAkRXZlbnR7U3RhcnRNb250aH0sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e1N0YXJ0WWVhcn0KICAgICAgICAgICAgICAgICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU3RhcnRUaW1lLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRFdmVudHtTdGFydERheX0gPSAkU0RheTsKICAgICAgICAgICAgICAgICRFdmVudHtTdGFydE1vbnRofSA9ICRTTW9udGg7CiAgICAgICAgICAgICAgICAkRXZlbnR7U3RhcnRZZWFyfSA9ICRTWWVhcjsKCiAgICAgICAgICAgICAgICBteSAkTmV3U3RhcnRUaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICIkRXZlbnR7U3RhcnRZZWFyfS0kRXZlbnR7U3RhcnRNb250aH0tJEV2ZW50e1N0YXJ0RGF5fSAkRXZlbnR7U3RhcnRIb3VyfTokRXZlbnR7U3RhcnRNaW51dGV9OiRFdmVudHtTdGFydFNlY30iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICROZXdFbmRUaW1lID0gJE5ld1N0YXJ0VGltZSskVG90YWw7CiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e0VuZFNlY30sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e0VuZE1pbnV0ZX0sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e0VuZEhvdXJ9LAogICAgICAgICAgICAgICAgICAgICRFdmVudHtFbmREYXl9LAogICAgICAgICAgICAgICAgICAgICRFdmVudHtFbmRNb250aH0sCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50e0VuZFllYXJ9CiAgICAgICAgICAgICAgICApID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJE5ld0VuZFRpbWUsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJEV2ZW50e1N0YXJ0VGltZX0gPSAiJEV2ZW50e1N0YXJ0WWVhcn0tJEV2ZW50e1N0YXJ0TW9udGh9LSRFdmVudHtTdGFydERheX0gJEV2ZW50e1N0YXJ0SG91cn06JEV2ZW50e1N0YXJ0TWludXRlfTokRXZlbnR7U3RhcnRTZWN9IjsKICAgICAgICAgICAgICAgICRFdmVudHtFbmRUaW1lfSA9ICIkRXZlbnR7RW5kWWVhcn0tJEV2ZW50e0VuZE1vbnRofS0kRXZlbnR7RW5kRGF5fSAkRXZlbnR7RW5kSG91cn06JEV2ZW50e0VuZE1pbnV0ZX06JEV2ZW50e0VuZFNlY30iOwoKICAgICAgICAgICAgICAgIGlmICgkUm93WzFdIGVxICdZZWFybHknICYmICRFdmVudE9sZHtTdGFydE1vbnRofSA9PSAkU01vbnRoICYmCiAgICAgICAgICAgICAgICAgICAgJEV2ZW50T2xke1N0YXJ0RGF5fSA9PSAkU0RheSAmJgogICAgICAgICAgICAgICAgICAgICgoJE5ld1N0YXJ0VGltZSA+PSAkU3RhcnRTeXN0ZW1UaW1lICYmICROZXdFbmRUaW1lIDw9ICRFbmRTeXN0ZW1UaW1lKSB8fAogICAgICAgICAgICAgICAgICAgICgkTmV3U3RhcnRUaW1lID49ICRTdGFydFN5c3RlbVRpbWUgJiYgJE5ld1N0YXJ0VGltZSA8PSAkRW5kU3lzdGVtVGltZSkgfHwKICAgICAgICAgICAgICAgICAgICAoJE5ld0VuZFRpbWUgPj0gJFN0YXJ0U3lzdGVtVGltZSAmJiAkTmV3RW5kVGltZSA8PSAkRW5kU3lzdGVtVGltZSkgfHwKICAgICAgICAgICAgICAgICAgICAoJE5ld1N0YXJ0VGltZSA8PSAkU3RhcnRTeXN0ZW1UaW1lICYmICROZXdFbmRUaW1lID49ICRFbmRTeXN0ZW1UaW1lKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCAoQEV2ZW50SURzLCBcJUV2ZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgJFVzZWR7JFJvd1swXX0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCRSb3dbMV0gPX4gL15XZWVrbHk6OiguKz8pJC8gJiYKICAgICAgICAgICAgICAgICAgICAoKCROZXdTdGFydFRpbWUgPj0gJFN0YXJ0U3lzdGVtVGltZSAmJiAkTmV3RW5kVGltZSA8PSAkRW5kU3lzdGVtVGltZSkgfHwKICAgICAgICAgICAgICAgICAgICAoJE5ld1N0YXJ0VGltZSA+PSAkU3RhcnRTeXN0ZW1UaW1lICYmICROZXdTdGFydFRpbWUgPD0gJEVuZFN5c3RlbVRpbWUpIHx8CiAgICAgICAgICAgICAgICAgICAgKCROZXdFbmRUaW1lID49ICRTdGFydFN5c3RlbVRpbWUgJiYgJE5ld0VuZFRpbWUgPD0gJEVuZFN5c3RlbVRpbWUpIHx8CiAgICAgICAgICAgICAgICAgICAgKCROZXdTdGFydFRpbWUgPD0gJFN0YXJ0U3lzdGVtVGltZSAmJiAkTmV3RW5kVGltZSA+PSAkRW5kU3lzdGVtVGltZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJENEb3cgPSAkMTsKICAgICAgICAgICAgICAgICAgICBteSAkRG93ID0gRGF5X29mX1dlZWtfQWJicmV2aWF0aW9uKERheV9vZl9XZWVrKCRTWWVhciwkU01vbnRoLCRTRGF5KSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCREb3cgZXEgJENEb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCAoQEV2ZW50SURzLCBcJUV2ZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgJFVzZWR7JFJvd1swXX0gPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICgkUm93WzFdID1+IC9eTW9udGhseTo6KC4rPyk6OiguKz8pJC8gJiYKICAgICAgICAgICAgICAgICAgICAoKCROZXdTdGFydFRpbWUgPj0gJFN0YXJ0U3lzdGVtVGltZSAmJiAkTmV3RW5kVGltZSA8PSAkRW5kU3lzdGVtVGltZSkgfHwKICAgICAgICAgICAgICAgICAgICAoJE5ld1N0YXJ0VGltZSA+PSAkU3RhcnRTeXN0ZW1UaW1lICYmICROZXdTdGFydFRpbWUgPD0gJEVuZFN5c3RlbVRpbWUpIHx8CiAgICAgICAgICAgICAgICAgICAgKCROZXdFbmRUaW1lID49ICRTdGFydFN5c3RlbVRpbWUgJiYgJE5ld0VuZFRpbWUgPD0gJEVuZFN5c3RlbVRpbWUpIHx8CiAgICAgICAgICAgICAgICAgICAgKCROZXdTdGFydFRpbWUgPD0gJFN0YXJ0U3lzdGVtVGltZSAmJiAkTmV3RW5kVGltZSA+PSAkRW5kU3lzdGVtVGltZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJENEb3cgPSAkMTsKICAgICAgICAgICAgICAgICAgICBteSAkRG93Q291bnQgPSAkMjsKICAgICAgICAgICAgICAgICAgICBteSAkRGF5cyA9IERheXNfaW5fTW9udGgoJFNZZWFyLCRTTW9udGgpOwogICAgICAgICAgICAgICAgICAgIG15ICREb3cgPSBEYXlfb2ZfV2Vla19BYmJyZXZpYXRpb24oRGF5X29mX1dlZWsoJFNZZWFyLCRTTW9udGgsJFNEYXkpKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJENEb3cgZXEgJERvdykgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkQ291bnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICREYXkgKDEuLiRTRGF5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkRG93ID0gRGF5X29mX1dlZWtfQWJicmV2aWF0aW9uKERheV9vZl9XZWVrKCRTWWVhciwkU01vbnRoLCREYXkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkQ0RvdyBlcSAkRG93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJENvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRDb3VudCA9PSAkRG93Q291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggKEBFdmVudElEcywgXCVFdmVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVXNlZHskUm93WzBdfSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gQEV2ZW50SURzOwoKfQoKc3ViIF9UaW1lU3RhbXAySVNPRGF0ZSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yZWFjaCAocXcoU3RyaW5nKSkgewogICAgICAgIGlmICghZGVmaW5lZCAoJFBhcmFteyRffSkpIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiTmVlZCAkXyEiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGlmICgkUGFyYW17U3RyaW5nfSA9fiAvKFxkXGRcZFxkKS0oXGRcZHxcZCktKFxkXGR8XGQpIChcZFxkfFxkKTooXGRcZHxcZCk6KFxkXGR8XGQpLykgewogICAgICAgIHJldHVybiAiJDEkMiQzVCQ0JDUkNiI7CiAgICB9CiAgICByZXR1cm47Cn0KCnN1YiBfaUNhbGVuZGFyUXVvdGUgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICVQYXJhbSA9IEBfOwogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvcmVhY2ggKHF3KFN0cmluZykpIHsKICAgICAgICBpZiAoIWRlZmluZWQgKCRQYXJhbXskX30pKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKFByaW9yaXR5ID0+ICdlcnJvcicsIE1lc3NhZ2UgPT4gIk5lZWQgJF8hIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICAkUGFyYW17U3RyaW5nfSA9fiBzL1xuL1xcbi87CiAgICAkUGFyYW17U3RyaW5nfSA9fiBzLywvXFwsLzsKICAgIHJldHVybiAkUGFyYW17U3RyaW5nfTsKfQoKc3ViIF9pQ2FsZW5kYXJNZXNzYWdlIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CiAgICBteSAlUGFyYW0gPSBAXzsKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3JlYWNoIChxdyhFdmVudElEIFVzZXJJRCBNZXRob2QpKSB7CiAgICAgICAgaWYgKCFkZWZpbmVkICgkUGFyYW17JF99KSkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyhQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJOZWVkICRfISIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgbXkgJUV2ZW50ID0gJFNlbGYtPkV2ZW50R2V0KCVQYXJhbSk7CiAgICBteSAlT3JnYW5pemVyID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgVXNlcklEID0+ICRFdmVudHtPcmdhbml6ZXJJRH0sCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CiAgICAjIGJ1aWxkIHZjYWxlbmRlciBhdHRhY2htZW50CiAgICBteSAkTWVzc2FnZSA9ICcnOwogICAgJE1lc3NhZ2UgLj0iQkVHSU46VkNBTEVOREFSXG4iOwogICAgJE1lc3NhZ2UgLj0iVkVSU0lPTjoyLjBcbiI7CiAgICAkTWVzc2FnZSAuPSJQUk9ESUQ6Ii4kU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJvZHVjdCcpLiIgQ2FsZW5kYXIgKCIuJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1ZlcnNpb24nKS4iKVxuIjsKICAgICRNZXNzYWdlIC49Ik1FVEhPRDoiLiRTZWxmLT5faUNhbGVuZGFyUXVvdGUoU3RyaW5nID0+ICRQYXJhbXtNZXRob2R9KS4iXG4iOwogICAgJE1lc3NhZ2UgLj0iQkVHSU46VkVWRU5UXG4iOwogICAgJE1lc3NhZ2UgLj0iVUlEOiAkRXZlbnR7RXZlbnRJRH0tXEAiLiRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGUUROJykuIlxuIjsKICAgICRNZXNzYWdlIC49Ik9SR0FOSVpFUjtDTj1cIiRPcmdhbml6ZXJ7VXNlckZpcnN0bmFtZX0gJE9yZ2FuaXplcntVc2VyTGFzdG5hbWV9XCI6TUFJTFRPOiRPcmdhbml6ZXJ7VXNlckVtYWlsfVxuIjsKICAgIGZvcmVhY2ggbXkgJFBhcnRpY2lwYW50SUQgKEB7JEV2ZW50e1BhcnRpY2lwYW50SURzfX0pIHsKICAgICAgICBteSAlVXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcnRpY2lwYW50SUQsCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkTWVzc2FnZSAuPSJBVFRFTkRFRTtST0xFPVJFUS1QQVJUSUNJUEFOVDtSU1ZQPVRSVUU6TUFJTFRPOiRVc2Vye1VzZXJFbWFpbH1cbiI7CiAgICB9CiAgICAkTWVzc2FnZSAuPSJTVU1NQVJZOiIuJFNlbGYtPl9pQ2FsZW5kYXJRdW90ZShTdHJpbmcgPT4gJEV2ZW50e1RpdGxlfSkuIlxuIjsKICAgICRNZXNzYWdlIC49IkRFU0NSSVBUSU9OOiIuJFNlbGYtPl9pQ2FsZW5kYXJRdW90ZShTdHJpbmcgPT4gJEV2ZW50e0Rlc2NyaXB0aW9ufSkuIlxuIjsKICAgICRNZXNzYWdlIC49IkxPQ0FUSU9OOiIuJFNlbGYtPl9pQ2FsZW5kYXJRdW90ZShTdHJpbmcgPT4gJEV2ZW50e0xvY2F0aW9ufSkuIlxuIjsKICAgICRNZXNzYWdlIC49IkNMQVNTOlBVQkxJQ1xuIjsKICAgICRNZXNzYWdlIC49IkRUU1RBUlQ6Ii4kU2VsZi0+X1RpbWVTdGFtcDJJU09EYXRlKFN0cmluZyA9PiAkRXZlbnR7U3RhcnRUaW1lfSkuIlxuIjsKICAgICRNZXNzYWdlIC49IkRURU5EOiIuJFNlbGYtPl9UaW1lU3RhbXAySVNPRGF0ZShTdHJpbmcgPT4gJEV2ZW50e0VuZFRpbWV9KS4iXG4iOwogICAgJE1lc3NhZ2UgLj0iRFRTVEFNUDoiLiRTZWxmLT5fVGltZVN0YW1wMklTT0RhdGUoU3RyaW5nID0+ICRTZWxmLT57VGltZU9iamVjdH0tPkN1cnJlbnRUaW1lc3RhbXAoKSkuIlxuIjsKICAgICRNZXNzYWdlIC49IkNBVEVHT1JJRVM6Ii4kU2VsZi0+X2lDYWxlbmRhclF1b3RlKFN0cmluZyA9PiAkRXZlbnR7U3RhdGV9KS4iXG4iOwogICAgJE1lc3NhZ2UgLj0iVFJBTlNQOk9QQVFVRVxuIjsKICAgICRNZXNzYWdlIC49IkVORDpWRVZFTlRcbiI7CiAgICAkTWVzc2FnZSAuPSJFTkQ6VkNBTEVOREFSXG4iOwogICAgcmV0dXJuICRNZXNzYWdlOwp9CgpzdWIgX0VtYWlsTWVzc2FnZSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yZWFjaCAocXcoRXZlbnRJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCFkZWZpbmVkICgkUGFyYW17JF99KSkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyhQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJOZWVkICRfISIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgbXkgJUV2ZW50ID0gJFNlbGYtPkV2ZW50R2V0KCVQYXJhbSk7CiAgICBteSAlT3JnYW5pemVyID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgVXNlcklEID0+ICRFdmVudHtPcmdhbml6ZXJJRH0sCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CiAgICBteSAlQ3VycmVudFVzZXIgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5HZXRVc2VyRGF0YSgKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CiAgICBteSAkTm90aWZ5ID0gIlRpdGxlOiAgICAgICAkRXZlbnR7VGl0bGV9XG4iOwogICAgJE5vdGlmeSAuPSAiTG9jYXRpb246ICAgICRFdmVudHtMb2NhdGlvbn1cbiI7CiAgICAkTm90aWZ5IC49ICJTdGFydDogICAgICAgJEV2ZW50e1N0YXJ0VGltZX1cbiI7CiAgICAkTm90aWZ5IC49ICJFbmQ6ICAgICAgICAgJEV2ZW50e0VuZFRpbWV9XG4iOwogICAgJE5vdGlmeSAuPSAiT3JnYW5pemVyOiAgICRPcmdhbml6ZXJ7VXNlckZpcnN0bmFtZX0gJE9yZ2FuaXplcntVc2VyTGFzdG5hbWV9ICgkT3JnYW5pemVye1VzZXJMb2dpbn0pXG4iOwogICAgJE5vdGlmeSAuPSAiVHlwZTogICAgICAgICRFdmVudHtTdGF0ZX1cbiI7CiAgICAkTm90aWZ5IC49ICJQYXJ0aWNpcGFudDogXG4iOwogICAgbXkgJFBhcnRpY2lwYW50ID0gJyc7CiAgICBmb3JlYWNoIG15ICRQYXJ0aWNpcGFudElEIChAeyRFdmVudHtQYXJ0aWNpcGFudElEc319KSB7CiAgICAgICAgIyBvd25lciBsb29rdXAKICAgICAgICBteSAlVXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRQYXJ0aWNpcGFudElELAogICAgICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwogICAgICAgICROb3RpZnkgLj0gIiAgICAgICAgICAgICBvICRVc2Vye1VzZXJGaXJzdG5hbWV9ICRVc2Vye1VzZXJMYXN0bmFtZX0gKCRVc2Vye1VzZXJMb2dpbn0pXG4iOwogICAgfQogICAgJE5vdGlmeSAuPSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKICAgICROb3RpZnkgLj0gIiRFdmVudHtEZXNjcmlwdGlvbn1cbiI7CiAgICAkTm90aWZ5IC49ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOwogICAgJE5vdGlmeSAuPSAiQnk6ICRDdXJyZW50VXNlcntVc2VyRmlyc3RuYW1lfSAkQ3VycmVudFVzZXJ7VXNlckxhc3RuYW1lfSAoJEN1cnJlbnRVc2Vye1VzZXJMb2dpbn0pXG4iOwogICAgcmV0dXJuICROb3RpZnk7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0LgoKPWN1dAoKPWhlYWQxIFZFUlNJT04KCiRSZXZpc2lvbjogMS4xMiAkICREYXRlOiAyMDA3LzAxLzE1IDIyOjE2OjU4ICQKCj1jdXQ= IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50Q2FsZW5kYXIucG0gLSBhIGNhbGVuZGFyCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFnZW50Q2FsZW5kYXIucG0sdiAxLjE3IDIwMDcvMDMvMDUgMDE6Mjk6MDAgbWFydGluIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50Q2FsZW5kYXI7Cgp1c2Ugc3RyaWN0Owp1c2UgRGF0ZTo6UGNhbGMgcXcoOmFsbCk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6Q2FsZW5kYXJFdmVudDsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSAnJFJldmlzaW9uOiAxLjE3ICQnOwokVkVSU0lPTiA9fiBzL15cJC4qOlxXKC4qKVxXLis/JC8kMS87CgpzdWIgbmV3IHsKICAgIG15ICRUeXBlID0gc2hpZnQ7CiAgICBteSAlUGFyYW0gPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyAoJFNlbGYsICRUeXBlKTsKCiAgICBmb3JlYWNoIChrZXlzICVQYXJhbSkgewogICAgICAgICRTZWxmLT57JF99ID0gJFBhcmFteyRffTsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBPcGplY3RzCiAgICBmb3JlYWNoIChxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCBUaW1lT2JqZWN0KSkgewogICAgICAgIGlmICghJFNlbGYtPnskX30pIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiKTsKICAgICAgICB9CiAgICB9CiAgICAjIG5lZWRlZCBvYmplY3RzCiAgICAkU2VsZi0+e0NhbGVuZGFyT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpDYWxlbmRhckV2ZW50LT5uZXcoJVBhcmFtKTsKICAgICMgY29uZmlnIG9wdGlvbnMKICAgICRTZWxmLT57Q0ZETn0gPSBbLTcsIC0yLCArMSwgKzM5LCArNDksICs1MCwgKzYwXTsKICAgICRTZWxmLT57Q0ZEfSA9IFsiUGFsbSBTdW5kYXkiLCAiRWFzdGVyIEZyaWRheSIsICJFYXN0ZXIgTW9uZGF5IiwgIkFzY2Vuc2lvbiBvZiBDaHJpc3QiLCAiV2hpdHN1bmRheSIsICJXaGl0bW9uZGF5IiwgIkZlYXN0IG9mIENvcnB1cyBDaHJpc3RpIl07CiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICVQYXJhbSA9IEBfOwogICAgbXkgJE91dHB1dDsKCiAgICAjIHBhcmFtIGluaXQuCiAgICAkU2VsZi0+e1ZpZXd9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICdWaWV3JykgfHwgJFNlbGYtPntDYWxlbmRhclZpZXd9IHx8ICdXZWVrNSc7CiAgICAkU2VsZi0+e1llYXJ9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICdZZWFyJykgfHwgJyc7CiAgICAkU2VsZi0+e01vbnRofSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAnTW9udGgnKSB8fCAnJzsKICAgICRTZWxmLT57RGF5fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAnRGF5JykgfHwgJyc7CiAgICAkU2VsZi0+e0JvZHl9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICdCb2R5JykgfHwgJyc7CiAgICAkU2VsZi0+e1ByaW50fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAnUHJpbnQnKSB8fCAnJzsKICAgICRTZWxmLT57TWVtYmVyc30gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gJ01lbWJlcnMnKSB8fCAkU2VsZi0+e0NhbGVuZGFyVmlld01lbWJlcnN9IHx8ICcnOwoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4KICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSA9PiAnQ2FsZW5kYXJWaWV3TWVtYmVycycsCiAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntNZW1iZXJzfSwKICAgICk7CiAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgPT4gJ0NhbGVuZGFyVmlldycsCiAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntWaWV3fSwKICAgICk7CiAgICAkU2VsZi0+e1VzZXJPYmplY3R9LT5TZXRQcmVmZXJlbmNlcygKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIEtleSA9PiAnQ2FsZW5kYXJWaWV3JywKICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e1ZpZXd9LAogICAgKTsKCiAgICAjIG11c3QgZmllbGRzLgogICAgIyBnZXQgdG9kYXkKICAgIG15ICgkU2VjLCAkTWluLCAkSG91ciwgJFREYXksICRUTW9udGgsICRUWWVhcikgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICApOwogICAgaWYgKCAhJFNlbGYtPntZZWFyfSApIHsKICAgICAgICAkU2VsZi0+e1llYXJ9ID0gJFRZZWFyOwogICAgfQogICAgaWYgKCAhJFNlbGYtPntNb250aH0gKSB7CiAgICAgICAgJFNlbGYtPntNb250aH0gPSAkVE1vbnRoOwogICAgfQogICAgaWYgKCAhJFNlbGYtPntEYXl9ICkgewogICAgICAgICRTZWxmLT57RGF5fSA9ICRURGF5OwogICAgfQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjcmVhdGUgbmV3IGV2ZW50CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoJFNlbGYtPntTdWJhY3Rpb259IGVxICdDcmVhdGUnKSB7CiAgICAgICAgbXkgJUZyb250ZW5kID0gKCk7CiAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CiAgICAgICAgZm9yZWFjaCAocXcoWWVhciBNb250aCBEYXkgSG91ciBNaW51dGUpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXsiU3RhcnQkXyJ9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICJTdGFydCRfIikgfHwgJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICRfKTsKICAgICAgICAgICAgJEdldFBhcmFteyJFbmQkXyJ9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICJFbmQkXyIpIHx8ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAkXyk7CiAgICAgICAgfQogICAgICAgIGlmICghZGVmaW5lZCgkR2V0UGFyYW17U3RhcnRIb3VyfSkpIHsKICAgICAgICAgICAgJEdldFBhcmFte1N0YXJ0SG91cn0gPSAnMDgnOwogICAgICAgIH0KICAgICAgICBpZiAoIWRlZmluZWQoJEdldFBhcmFte0VuZEhvdXJ9KSkgewogICAgICAgICAgICAkR2V0UGFyYW17RW5kSG91cn0gPSAnMDknOwogICAgICAgIH0KICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6Tm9uZSd9ID0gJ2NoZWNrZWQnOwogICAgICAgICRGcm9udGVuZHtTdGFydERhdGVTdHJpbmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgIEZvcm1hdCA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgICAgIFByZWZpeCA9PiAnU3RhcnQnLAojICAgICAgICAgICAgRGlmZlRpbWUgPT4gNjAqNjAsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgU3RhcnRNaW51dGUgPT4gJzAwJywKICAgICAgICApOwogICAgICAgICRGcm9udGVuZHtFbmREYXRlU3RyaW5nfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICAgICBGb3JtYXQgPT4gJ0RhdGVJbnB1dEZvcm1hdExvbmcnLAogICAgICAgICAgICBQcmVmaXggPT4gJ0VuZCcsCiMgICAgICAgICAgICBEaWZmVGltZSA9PiA2MCo2MCoyLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIEVuZE1pbnV0ZSA9PiAnMDAnLAogICAgICAgICk7CiAgICAgICAgJEZyb250ZW5ke1NlcXVlbmNlRW5kRGF0ZVN0cmluZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgWWVhckRpZmYgPT4gNTAsCiAgICAgICAgICAgIEZvcm1hdCA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgICAgIFByZWZpeCA9PiAnU2VxdWVuY2VFbmQnLAojICAgICAgICAgICAgRGlmZlRpbWUgPT4gNjAqNjAqMjQqMzY1KjEwLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIFNlcXVlbmNlRW5kWWVhciA9PiAnMjAzMCcsCiAgICAgICAgICAgIFNlcXVlbmNlRW5kSG91ciA9PiAnNTknLAogICAgICAgICAgICBTZXF1ZW5jZUVuZE1pbnV0ZSA9PiAnMDAnLAogICAgICAgICk7CiAgICAgICAgJEZyb250ZW5ke1N0YXRlfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3B0aW9uU3RyZ0hhc2hSZWYoCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgcHJpdmF0ZSA9PiAncHJpdmF0ZScsCiAgICAgICAgICAgICAgICBwdWJsaWMgPT4gJ3B1YmxpYycsCiAgICAgICAgICAgICAgICB2YWNhdGlvbiA9PiAndmFjYXRpb24nLAogICAgICAgICAgICAgICAgbWVldGluZyA9PiAnbWVldGluZycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE5hbWUgPT4gJ1N0YXRlJywKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17U3RhdGV9IHx8ICdwdWJsaWMnLAogICAgICAgICk7CiAgICAgICAgJEZyb250ZW5ke01vbnRobHlTdHJpbmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PcHRpb25TdHJnSGFzaFJlZigKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAxID0+ICcxLiBmaXJzdCcsCiAgICAgICAgICAgICAgICAyID0+ICcyLiBzZWNvbmQnLAogICAgICAgICAgICAgICAgMyA9PiAnMy4gdGhpcmQnLAogICAgICAgICAgICAgICAgNCA9PiAnNC4gZm91cnRoJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTmFtZSA9PiAnTW9udGhseVR5cGUnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtNb250aGx5VHlwZX0gfHwgJycsCiAgICAgICAgKTsKICAgICAgICAkRnJvbnRlbmR7UmVtaW5kZXJ9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PcHRpb25TdHJnSGFzaFJlZigKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAnJyA9PiAnLScsCiAgICAgICAgICAgICAgICAxNSA9PiAnMTUgTWludXRlcycsCiAgICAgICAgICAgICAgICAzMCA9PiAnMzAgTWludXRlcycsCiAgICAgICAgICAgICAgICA0NSA9PiAnNDUgTWludXRlcycsCiAgICAgICAgICAgICAgICA2MCA9PiAnMSBIb3VyJywKICAgICAgICAgICAgICAgIDEyMCA9PiAnMiBIb3VycycsCiAgICAgICAgICAgICAgICAyNDAgPT4gJzQgSG91cnMnLAogICAgICAgICAgICAgICAgMzYwMCA9PiAnMSBEYXknLAogICAgICAgICAgICB9LAogICAgICAgICAgICBOYW1lID0+ICdSZW1pbmRlcicsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1JlbWluZGVyfSB8fCAnJywKICAgICAgICApOwogICAgICAgIG15ICVTaG93blVzZXJzID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlckxpc3QoCiAgICAgICAgICAgIFR5cGUgPT4gJ0xvbmcnLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJEZyb250ZW5ke1BhcnRpY2lwYW50TGlzdH0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk9wdGlvblN0cmdIYXNoUmVmKAogICAgICAgICAgICBEYXRhID0+IFwlU2hvd25Vc2VycywKICAgICAgICAgICAgTmFtZSA9PiAnUGFydGljaXBhbnRJRHMnLAogICAgICAgICAgICBNdWx0aXBsZSA9PiAxLAogICAgICAgICAgICBTaXplID0+IDUsCiAgICAgICAgICAgIFNlbGVjdGVkSURSZWZBcnJheSA9PiBbJFNlbGYtPntVc2VySUR9XSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDcmVhdGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFllYXIgPT4gJFNlbGYtPntZZWFyfSwKICAgICAgICAgICAgICAgIE1vbnRoID0+ICRTZWxmLT57TW9udGh9LAogICAgICAgICAgICAgICAgRGF5ID0+ICRTZWxmLT57RGF5fSwKICAgICAgICAgICAgICAgICVGcm9udGVuZCwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKFRpdGxlID0+ICdOZXcnKTsKICAgICAgICAjIGJ1aWxkIE5hdmlnYXRpb25CYXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRDYWxlbmRhcicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGF5ID0+ICRTZWxmLT57RGF5fSwKICAgICAgICAgICAgICAgIE1vbnRoID0+ICRTZWxmLT57TW9udGh9LAogICAgICAgICAgICAgICAgWWVhciA9PiAkU2VsZi0+e1llYXJ9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjcmVhdGUgbmV3IGV2ZW50CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoJFNlbGYtPntTdWJhY3Rpb259IGVxICdDcmVhdGVBY3Rpb24nKSB7CiAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CiAgICAgICAgZm9yZWFjaCAocXcoWWVhciBNb250aCBEYXkgSG91ciBNaW51dGUpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXsiU3RhcnQkXyJ9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICJTdGFydCRfIik7CiAgICAgICAgICAgICRHZXRQYXJhbXsiRW5kJF8ifSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAiRW5kJF8iKTsKICAgICAgICAgICAgJEdldFBhcmFteyJTZXF1ZW5jZUVuZCRfIn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gIlNlcXVlbmNlRW5kJF8iKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAocXcoTW9udGggRGF5IEhvdXIgTWludXRlKSkgewogICAgICAgICAgICAkR2V0UGFyYW17IlN0YXJ0JF8ifSA9IHNwcmludGYoIiUwMmQiLCAkR2V0UGFyYW17IlN0YXJ0JF8ifSk7CiAgICAgICAgICAgICRHZXRQYXJhbXsiRW5kJF8ifSA9IHNwcmludGYoIiUwMmQiLCAkR2V0UGFyYW17IkVuZCRfIn0pOwogICAgICAgICAgICAkR2V0UGFyYW17IlNlcXVlbmNlRW5kJF8ifSA9IHNwcmludGYoIiUwMmQiLCAkR2V0UGFyYW17IlNlcXVlbmNlRW5kJF8ifSk7CiAgICAgICAgfQogICAgICAgICMgdHJhbnNmb3JtIHRpbWUgc2VsZWN0aW9uLCBzdXBwb3J0IHRpbWUgem9uZXMKICAgICAgICBteSAlVGltZVN0YXJ0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5UcmFuc2Zyb21EYXRlU2VsZWN0aW9uKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIFByZWZpeCA9PiAiU3RhcnQiLAogICAgICAgICk7CiAgICAgICAgbXkgJVRpbWVFbmQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPlRyYW5zZnJvbURhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgUHJlZml4ID0+ICJFbmQiLAogICAgICAgICk7CiAgICAgICAgbXkgJVRpbWVTZXF1ZW5jZUVuZCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+VHJhbnNmcm9tRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBQcmVmaXggPT4gIlNlcXVlbmNlRW5kIiwKICAgICAgICApOwogICAgICAgIGZvcmVhY2ggKHF3KFRpdGxlIERlc2NyaXB0aW9uIExvY2F0aW9uIFN0YXRlIFNlcXVlbmNlVHlwZSkpIHsKICAgICAgICAgICAgJEdldFBhcmFteyRffSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAkXyk7CiAgICAgICAgfQogICAgICAgICRHZXRQYXJhbXtTdGFydFRpbWV9ID0gIiRUaW1lU3RhcnR7U3RhcnRZZWFyfS0kVGltZVN0YXJ0e1N0YXJ0TW9udGh9LSRUaW1lU3RhcnR7U3RhcnREYXl9ICIuCiAgICAgICAgICAgICIkVGltZVN0YXJ0e1N0YXJ0SG91cn06JFRpbWVTdGFydHtTdGFydE1pbnV0ZX06MDAiOwogICAgICAgICRHZXRQYXJhbXtFbmRUaW1lfSA9ICIkVGltZUVuZHtFbmRZZWFyfS0kVGltZUVuZHtFbmRNb250aH0tJFRpbWVFbmR7RW5kRGF5fSAiLgogICAgICAgICAgICAiJFRpbWVFbmR7RW5kSG91cn06JFRpbWVFbmR7RW5kTWludXRlfTowMCI7CiAgICAgICAgJEdldFBhcmFte1NlcXVlbmNlRW5kVGltZX0gPSAiJFRpbWVTZXF1ZW5jZUVuZHtTZXF1ZW5jZUVuZFllYXJ9LSRUaW1lU2VxdWVuY2VFbmR7U2VxdWVuY2VFbmRNb250aH0tJFRpbWVTZXF1ZW5jZUVuZHtTZXF1ZW5jZUVuZERheX0gIi4KICAgICAgICAgICAgIiRUaW1lU2VxdWVuY2VFbmR7U2VxdWVuY2VFbmRIb3VyfTokVGltZVNlcXVlbmNlRW5ke1NlcXVlbmNlRW5kTWludXRlfTowMCI7CiAgICAgICAgbXkgQFBhcnRpY2lwYW50SURzID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldEFycmF5KFBhcmFtID0+ICdQYXJ0aWNpcGFudElEcycpOwogICAgICAgICRHZXRQYXJhbXtQYXJ0aWNpcGFudElEc30gPSBcQFBhcnRpY2lwYW50SURzOwogICAgICAgIGlmICgkU2VsZi0+e0NhbGVuZGFyT2JqZWN0fS0+RXZlbnRBZGQoJUdldFBhcmFtLCBPcmdhbml6ZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0pKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KE9QID0+ICRTZWxmLT57TGFzdFNjcmVlbk92ZXJ2aWV3fSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIGVycm9yIHNjcmVlbgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KICAgIH0KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZWRpdCBldmVudAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVXBkYXRlJykgewogICAgICAgIG15ICVGcm9udGVuZCA9ICgpOwogICAgICAgIG15ICVHZXRQYXJhbSA9ICgpOwogICAgICAgIGZvcmVhY2ggKHF3KEV2ZW50SUQpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskX30gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gJF8pOwogICAgICAgIH0KICAgICAgICAjIGdldCBldmVudAogICAgICAgIG15ICVFdmVudCA9ICRTZWxmLT57Q2FsZW5kYXJPYmplY3R9LT5FdmVudEdldCglR2V0UGFyYW0sIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0pOwogICAgICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgICAgIGlmICgkRXZlbnR7U3RhdGV9ID1+IC9wcml2YXRlL2kgJiYgJEV2ZW50e09yZ2FuaXplcklEfSBuZSAkU2VsZi0+e1VzZXJJRH0pIHsKICAgICAgICAgICAgbXkgJEhpdCA9IDA7CiAgICAgICAgICAgIGZvcmVhY2ggKEB7JEV2ZW50e09yZ2FuaXplcklEc319KSB7CiAgICAgICAgICAgICAgICBpZiAoJF8gZXEgJFNlbGYtPntVc2VySUR9KSB7CiAgICAgICAgICAgICAgICAgICAgJEhpdCA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCEkSGl0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob1Blcm1pc3Npb24oV2l0aEhlYWRlciA9PiAneWVzJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRFdmVudHtTZXF1ZW5jZVR5cGV9ID1+IC9eKE1vbnRobHk6Oi4uLik6OiguKz8pJC8pIHsKICAgICAgICAgICAgJEV2ZW50eydTZXF1ZW5jZVR5cGUnfSA9ICQxOwogICAgICAgICAgICAkRXZlbnR7J01vbnRobHlUeXBlJ30gPSAkMjsKICAgICAgICB9CiAgICAgICAgaWYgKCRFdmVudHtTZXF1ZW5jZVR5cGV9IGVxICdZZWFybHknKSB7CiAgICAgICAgICAgICRGcm9udGVuZHsnU2VxdWVuY2VUeXBlOjpZZWFybHknfSA9ICdjaGVja2VkJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCRFdmVudHtTZXF1ZW5jZVR5cGV9IGVxICdXZWVrbHk6Ok1vbicpIHsKICAgICAgICAgICAgJEZyb250ZW5keydTZXF1ZW5jZVR5cGU6OldlZWtseTo6TW9uJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnV2Vla2x5OjpUdWUnKSB7CiAgICAgICAgICAgICRGcm9udGVuZHsnU2VxdWVuY2VUeXBlOjpXZWVrbHk6OlR1ZSd9ID0gJ2NoZWNrZWQnOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoJEV2ZW50e1NlcXVlbmNlVHlwZX0gZXEgJ1dlZWtseTo6V2VkJykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6V2Vla2x5OjpXZWQnfSA9ICdjaGVja2VkJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCRFdmVudHtTZXF1ZW5jZVR5cGV9IGVxICdXZWVrbHk6OlRodScpIHsKICAgICAgICAgICAgJEZyb250ZW5keydTZXF1ZW5jZVR5cGU6OldlZWtseTo6VGh1J30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnV2Vla2x5OjpGcmknKSB7CiAgICAgICAgICAgICRGcm9udGVuZHsnU2VxdWVuY2VUeXBlOjpXZWVrbHk6OkZyaSd9ID0gJ2NoZWNrZWQnOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoJEV2ZW50e1NlcXVlbmNlVHlwZX0gZXEgJ1dlZWtseTo6U2F0JykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6V2Vla2x5OjpTYXQnfSA9ICdjaGVja2VkJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCRFdmVudHtTZXF1ZW5jZVR5cGV9IGVxICdXZWVrbHk6OlN1bicpIHsKICAgICAgICAgICAgJEZyb250ZW5keydTZXF1ZW5jZVR5cGU6OldlZWtseTo6U3VuJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6TW9uJykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6TW9uJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6VHVlJykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6VHVlJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6V2VkJykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6V2VkJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6VGh1JykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6VGh1J30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6RnJpJykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6RnJpJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6U2F0JykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6U2F0J30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6U3VuJykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6U3VuJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6Tm9uZSd9ID0gJ2NoZWNrZWQnOwogICAgICAgIH0KICAgICAgICAkRnJvbnRlbmR7U3RhcnREYXRlU3RyaW5nfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICAgICBGb3JtYXQgPT4gJ0RhdGVJbnB1dEZvcm1hdExvbmcnLAogICAgICAgICAgICBQcmVmaXggPT4gJ1N0YXJ0JywKICAgICAgICAgICAgJUV2ZW50LAogICAgICAgICk7CiAgICAgICAgJEZyb250ZW5ke0VuZERhdGVTdHJpbmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgIEZvcm1hdCA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgICAgIFByZWZpeCA9PiAnRW5kJywKICAgICAgICAgICAgJUV2ZW50LAogICAgICAgICk7CiAgICAgICAgJEZyb250ZW5ke1NlcXVlbmNlRW5kRGF0ZVN0cmluZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgRm9ybWF0ID0+ICdEYXRlSW5wdXRGb3JtYXRMb25nJywKICAgICAgICAgICAgUHJlZml4ID0+ICdTZXF1ZW5jZUVuZCcsCiAgICAgICAgICAgICVFdmVudCwKICAgICAgICAgICAgWWVhckRpZmYgPT4gNTAsCiAgICAgICAgKTsKICAgICAgICAkRnJvbnRlbmR7U3RhdGVTdHJpbmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PcHRpb25TdHJnSGFzaFJlZigKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBwcml2YXRlID0+ICdwcml2YXRlJywKICAgICAgICAgICAgICAgIHB1YmxpYyA9PiAncHVibGljJywKICAgICAgICAgICAgICAgIHZhY2F0aW9uID0+ICd2YWNhdGlvbicsCiAgICAgICAgICAgICAgICBtZWV0aW5nID0+ICdtZWV0aW5nJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTmFtZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRFdmVudHtTdGF0ZX0gfHwgJ3B1YmxpYycsCiAgICAgICAgKTsKICAgICAgICAkRnJvbnRlbmR7TW9udGhseVN0cmluZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk9wdGlvblN0cmdIYXNoUmVmKAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEuIGZpcnN0JywKICAgICAgICAgICAgICAgIDIgPT4gJzIuIHNlY29uZCcsCiAgICAgICAgICAgICAgICAzID0+ICczLiB0aGlyZCcsCiAgICAgICAgICAgICAgICA0ID0+ICc0LiBmb3VydGgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBOYW1lID0+ICdNb250aGx5VHlwZScsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJEV2ZW50e01vbnRobHlUeXBlfSB8fCAnJywKICAgICAgICApOwogICAgICAgICRGcm9udGVuZHtSZW1pbmRlclN0cmluZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk9wdGlvblN0cmdIYXNoUmVmKAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICcnID0+ICcgIC0gJywKICAgICAgICAgICAgICAgIDE1ID0+ICcgIDE1IE1pbnV0ZXMnLAogICAgICAgICAgICAgICAgMzAgPT4gJyAgMzAgTWludXRlcycsCiAgICAgICAgICAgICAgICA0NSA9PiAnICA0NSBNaW51dGVzJywKICAgICAgICAgICAgICAgIDYwID0+ICcgMSBIb3VyJywKICAgICAgICAgICAgICAgIDEyMCA9PiAnIDIgSG91cnMnLAogICAgICAgICAgICAgICAgMjQwID0+ICcgNCBIb3VycycsCiAgICAgICAgICAgICAgICA0ODAgPT4gJyA4IEhvdXJzJywKICAgICAgICAgICAgICAgIDM2MDAgPT4gJzEgRGF5JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTmFtZSA9PiAnUmVtaW5kZXInLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtSZW1pbmRlcn0gfHwgJycsCiAgICAgICAgKTsKICAgICAgICBteSAlU2hvd25Vc2VycyA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJMaXN0KAogICAgICAgICAgICBUeXBlID0+ICdMb25nJywKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwogICAgICAgICRGcm9udGVuZHtQYXJ0aWNpcGFudExpc3R9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PcHRpb25TdHJnSGFzaFJlZigKICAgICAgICAgICAgRGF0YSA9PiBcJVNob3duVXNlcnMsCiAgICAgICAgICAgIE5hbWUgPT4gJ1BhcnRpY2lwYW50SURzJywKICAgICAgICAgICAgTXVsdGlwbGUgPT4gMSwKICAgICAgICAgICAgU2l6ZSA9PiA1LAogICAgICAgICAgICBTZWxlY3RlZElEUmVmQXJyYXkgPT4gJEV2ZW50e1BhcnRpY2lwYW50SURzfSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdVcGRhdGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFllYXIgPT4gJFNlbGYtPntZZWFyfSwKICAgICAgICAgICAgICAgIE1vbnRoID0+ICRTZWxmLT57TW9udGh9LAogICAgICAgICAgICAgICAgRGF5ID0+ICRTZWxmLT57RGF5fSwKICAgICAgICAgICAgICAgICVGcm9udGVuZCwKICAgICAgICAgICAgICAgICVFdmVudCwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICMgY3JlYXRlZAogICAgICAgIGlmICgkRXZlbnR7Q3JlYXRlQnl9KSB7CiAgICAgICAgICAgIG15ICVDcmVhdGVCeSA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRFdmVudHtDcmVhdGVCeX0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdVcGRhdGVDcmVhdGVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVFdmVudCwKICAgICAgICAgICAgICAgICAgICAlQ3JlYXRlQnksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAjIGNoYW5nZWQKICAgICAgICBpZiAoJEV2ZW50e0NoYW5nZUJ5fSkgewogICAgICAgICAgICBteSAlQ2hhbmdlQnkgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkRXZlbnR7Q2hhbmdlQnl9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVXBkYXRlQ2hhbmdlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgJUNoYW5nZUJ5LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoVGl0bGUgPT4gJ0VkaXQnKTsKICAgICAgICAjIGJ1aWxkIE5hdmlnYXRpb25CYXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRDYWxlbmRhcicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGF5ID0+ICRTZWxmLT57RGF5fSwKICAgICAgICAgICAgICAgIE1vbnRoID0+ICRTZWxmLT57TW9udGh9LAogICAgICAgICAgICAgICAgWWVhciA9PiAkU2VsZi0+e1llYXJ9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB1cGRhdGUgZXZlbnQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICgkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1VwZGF0ZUFjdGlvbicpIHsKICAgICAgICBteSAlR2V0UGFyYW0gPSAoKTsKICAgICAgICBmb3JlYWNoIChxdyhZZWFyIE1vbnRoIERheSBIb3VyIE1pbnV0ZSkpIHsKICAgICAgICAgICAgJEdldFBhcmFteyJTdGFydCRfIn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gIlN0YXJ0JF8iKTsKICAgICAgICAgICAgJEdldFBhcmFteyJFbmQkXyJ9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICJFbmQkXyIpOwogICAgICAgICAgICAkR2V0UGFyYW17IlNlcXVlbmNlRW5kJF8ifSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAiU2VxdWVuY2VFbmQkXyIpOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoIChxdyhNb250aCBEYXkgSG91ciBNaW51dGUpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXsiU3RhcnQkXyJ9ID0gc3ByaW50ZigiJTAyZCIsICRHZXRQYXJhbXsiU3RhcnQkXyJ9KTsKICAgICAgICAgICAgJEdldFBhcmFteyJFbmQkXyJ9ID0gc3ByaW50ZigiJTAyZCIsICRHZXRQYXJhbXsiRW5kJF8ifSk7CiAgICAgICAgICAgICRHZXRQYXJhbXsiU2VxdWVuY2VFbmQkXyJ9ID0gc3ByaW50ZigiJTAyZCIsICRHZXRQYXJhbXsiU2VxdWVuY2VFbmQkXyJ9KTsKICAgICAgICB9CiAgICAgICAgIyB0cmFuc2Zvcm0gdGltZSBzZWxlY3Rpb24sIHN1cHBvcnQgdGltZSB6b25lcwogICAgICAgIG15ICVUaW1lU3RhcnQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPlRyYW5zZnJvbURhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgUHJlZml4ID0+ICJTdGFydCIsCiAgICAgICAgKTsKICAgICAgICBteSAlVGltZUVuZCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+VHJhbnNmcm9tRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBQcmVmaXggPT4gIkVuZCIsCiAgICAgICAgKTsKICAgICAgICBteSAlVGltZVNlcXVlbmNlRW5kID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5UcmFuc2Zyb21EYXRlU2VsZWN0aW9uKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIFByZWZpeCA9PiAiU2VxdWVuY2VFbmQiLAogICAgICAgICk7CiAgICAgICAgZm9yZWFjaCAocXcoRXZlbnRJRCBUaXRsZSBEZXNjcmlwdGlvbiBMb2NhdGlvbiBTdGF0ZSBTZXF1ZW5jZVR5cGUgQ2FuY2VsIE1vbnRobHlUeXBlKSkgewogICAgICAgICAgICAkR2V0UGFyYW17JF99ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICRfKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRHZXRQYXJhbXtTZXF1ZW5jZVR5cGV9ID1+IC9eTW9udGhseTo6LykgewogICAgICAgICAgICAkR2V0UGFyYW17U2VxdWVuY2VUeXBlfSAuPSAnOjonLiRHZXRQYXJhbXtNb250aGx5VHlwZX07CiAgICAgICAgfQogICAgICAgICMgY2hlY2sgZGVsZXRlCiAgICAgICAgaWYgKCRHZXRQYXJhbXtDYW5jZWx9KSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0mU3ViYWN0aW9uPUNhbmNlbCZFdmVudElEPSRHZXRQYXJhbXtFdmVudElEfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIG15IEBQYXJ0aWNpcGFudElEcyA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRBcnJheShQYXJhbSA9PiAnUGFydGljaXBhbnRJRHMnKTsKICAgICAgICAkR2V0UGFyYW17UGFydGljaXBhbnRJRHN9ID0gXEBQYXJ0aWNpcGFudElEczsKICAgICAgICAjIGNoZWNrIHBlcm1pc3Npb24KICAgICAgICBteSAlRXZlbnQgPSAkU2VsZi0+e0NhbGVuZGFyT2JqZWN0fS0+RXZlbnRHZXQoJUdldFBhcmFtLCBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9KTsKICAgICAgICBpZiAoJEV2ZW50e1N0YXRlfSA9fiAvcHJpdmF0ZS9pICYmICRFdmVudHtVc2VySUR9IG5lICRTZWxmLT57VXNlcklEfSkgewogICAgICAgICAgICBteSAkSGl0ID0gMDsKICAgICAgICAgICAgZm9yZWFjaCAoQHskRXZlbnR7UGFydGljaXBhbnRJRHN9fSkgewogICAgICAgICAgICAgICAgaWYgKCRfIGVxICRTZWxmLT57VXNlcklEfSkgewogICAgICAgICAgICAgICAgICAgICRIaXQgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghJEhpdCkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKFdpdGhIZWFkZXIgPT4gJ3llcycpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICMgYnVpbGQgZGF0ZSBzdGluZwogICAgICAgICRHZXRQYXJhbXtTdGFydFRpbWV9ID0gIiRUaW1lU3RhcnR7U3RhcnRZZWFyfS0kVGltZVN0YXJ0e1N0YXJ0TW9udGh9LSRUaW1lU3RhcnR7U3RhcnREYXl9ICIuCiAgICAgICAgICAgICIkVGltZVN0YXJ0e1N0YXJ0SG91cn06JFRpbWVTdGFydHtTdGFydE1pbnV0ZX06MDAiOwogICAgICAgICRHZXRQYXJhbXtFbmRUaW1lfSA9ICIkVGltZUVuZHtFbmRZZWFyfS0kVGltZUVuZHtFbmRNb250aH0tJFRpbWVFbmR7RW5kRGF5fSAiLgogICAgICAgICAgICAiJFRpbWVFbmR7RW5kSG91cn06JFRpbWVFbmR7RW5kTWludXRlfTowMCI7CiAgICAgICAgJEdldFBhcmFte1NlcXVlbmNlRW5kVGltZX0gPSAiJFRpbWVTZXF1ZW5jZUVuZHtTZXF1ZW5jZUVuZFllYXJ9LSRUaW1lU2VxdWVuY2VFbmR7U2VxdWVuY2VFbmRNb250aH0tJFRpbWVTZXF1ZW5jZUVuZHtTZXF1ZW5jZUVuZERheX0gIi4KICAgICAgICAgICAgIiRUaW1lU2VxdWVuY2VFbmR7U2VxdWVuY2VFbmRIb3VyfTokVGltZVNlcXVlbmNlRW5ke1NlcXVlbmNlRW5kTWludXRlfTowMCI7CiAgICAgICAgIyB1cGRhdGUgZXZlbnQKICAgICAgICBpZiAoJFNlbGYtPntDYWxlbmRhck9iamVjdH0tPkV2ZW50VXBkYXRlKCVHZXRQYXJhbSwgT3JnYW5pemVySUQgPT4gJFNlbGYtPntVc2VySUR9LCBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9KSkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdChPUCA9PiAkU2VsZi0+e0xhc3RTY3JlZW5PdmVydmlld30pOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBlcnJvciBzY3JlZW4KICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CiAgICB9CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGRlbGV0ZSBldmVudAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2FuY2VsJykgewogICAgICAgIG15ICVHZXRQYXJhbSA9ICgpOwogICAgICAgIGZvcmVhY2ggKHF3KEV2ZW50SUQpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskX30gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gJF8pOwogICAgICAgIH0KICAgICAgICBteSAlRXZlbnQgPSAkU2VsZi0+e0NhbGVuZGFyT2JqZWN0fS0+RXZlbnRHZXQoJUdldFBhcmFtLCBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9KTsKICAgICAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0NhbmNlbCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgJUV2ZW50LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKFRpdGxlID0+ICdDYW5jZWwnKTsKICAgICAgICAjIGJ1aWxkIE5hdmlnYXRpb25CYXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRDYWxlbmRhcicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgJUV2ZW50LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWxldGUgZXZlbnQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICgkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NhbmNlbEFjdGlvbicpIHsKICAgICAgICBteSAlR2V0UGFyYW0gPSAoKTsKICAgICAgICBmb3JlYWNoIChxdyhFdmVudElEKSkgewogICAgICAgICAgICAkR2V0UGFyYW17JF99ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICRfKTsKICAgICAgICB9CiAgICAgICAgIyBkZWxldGUgZXZlbnQKICAgICAgICBpZiAoJEdldFBhcmFte0V2ZW50SUR9KSB7CiAgICAgICAgICAgIGlmICgkU2VsZi0+e0NhbGVuZGFyT2JqZWN0fS0+RXZlbnRDYW5jZWwoJUdldFBhcmFtLCBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9KSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgZXJyb3Igc2NyZWVuCiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIGVycm9yIHNjcmVlbgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ05lZWQgRXZlbnRJRCcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzaG93IG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuCiAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICBpZiAoISRTZWxmLT57UHJpbnR9KSB7CiAgICAgICAgIyBzdGFydCB3aXRoIHBhZ2UgaGVhZGVyCiAgICAgICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKFRpdGxlID0+ICdPdmVydmlldycpOwogICAgICAgICMgYnVpbGQgTmF2aWdhdGlvbkJhcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QcmludEhlYWRlcigpOwogICAgfQogICAgIyBwcmludCB0aGUgbWFpbiB0YWJsZS4KICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4geyB9LAogICAgKTsKICAgIGlmICghJFNlbGYtPntQcmludH0pIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld01lbnUnLAogICAgICAgICAgICBEYXRhID0+IHsgfSwKICAgICAgICApOwogICAgfQogICAgbXkgJFJlcXVlc3RlZFVSTCA9ICRTZWxmLT57UmVxdWVzdGVkVVJMfTsKICAgICRSZXF1ZXN0ZWRVUkwgPX4gcy9cJk1lbWJlcnM9KE15fEFsbCkvL2c7CiAgICAkUmVxdWVzdGVkVVJMID1+IHMvTWVtYmVycz0oTXl8QWxsKS8vZzsKICAgIGlmICgkU2VsZi0+e01lbWJlcnN9IGVxICdBbGwnKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdNZW51TXknLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFJlcXVlc3RlZFVSTCA9PiAkUmVxdWVzdGVkVVJMLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld01lbnVBbGwnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFJlcXVlc3RlZFVSTCA9PiAkUmVxdWVzdGVkVVJMLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CiAgICBpZiAoJFNlbGYtPntWaWV3fSBlcSAnV2VlazUnKSB7CiAgICAgICAgIyBuYXZiYXIKICAgICAgICBteSAoJE5leHRZZWFyLCROZXh0TW9udGgsJE5leHREYXkpID0gQWRkX0RlbHRhX0RheXMoJFNlbGYtPntZZWFyfSwkU2VsZi0+e01vbnRofSwkU2VsZi0+e0RheX0sIDcpOwogICAgICAgIG15ICgkTGFzdFllYXIsJExhc3RNb250aCwkTGFzdERheSkgPSBBZGRfRGVsdGFfRGF5cygkU2VsZi0+e1llYXJ9LCRTZWxmLT57TW9udGh9LCRTZWxmLT57RGF5fSwgIi03Iik7CiAgICAgICAgaWYgKCEkU2VsZi0+e1ByaW50fSkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTGFzdFllYXIgPT4gJExhc3RZZWFyLAogICAgICAgICAgICAgICAgICAgIExhc3RNb250aCA9PiAkTGFzdE1vbnRoLAogICAgICAgICAgICAgICAgICAgIExhc3REYXkgPT4gJExhc3REYXksCiAgICAgICAgICAgICAgICAgICAgTmV4dFllYXIgPT4gJE5leHRZZWFyLAogICAgICAgICAgICAgICAgICAgIE5leHRNb250aCA9PiAkTmV4dE1vbnRoLAogICAgICAgICAgICAgICAgICAgIE5leHREYXkgPT4gJE5leHREYXksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAjIHNob3cgZGF5cwogICAgICAgIG15ICREb3cgPSBEYXlfb2ZfV2VlaygkU2VsZi0+e1llYXJ9LCRTZWxmLT57TW9udGh9LCRTZWxmLT57RGF5fSk7CiAgICAgICAgZm9yZWFjaCAoMS4uNSkgewogICAgICAgICAgICBteSAoJFllYXIsJE1vbnRoLCREYXkpID0gQWRkX0RlbHRhX0RheXMoJFNlbGYtPntZZWFyfSwkU2VsZi0+e01vbnRofSwkU2VsZi0+e0RheX0sICgkXy0kRG93KSk7CiAgICAgICAgICAgICRTZWxmLT5DYWxlbmRhclZpZXdEYXkoJFllYXIsJE1vbnRoLCREYXkpOwogICAgICAgIH0KICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50Q2FsZW5kYXInLAogICAgICAgICAgICBEYXRhID0+IHsgfSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCRTZWxmLT57Vmlld30gZXEgJ1dlZWs3JykgewogICAgICAgICMgbmF2YmFyCiAgICAgICAgbXkgKCROZXh0WWVhciwkTmV4dE1vbnRoLCROZXh0RGF5KSA9IEFkZF9EZWx0YV9EYXlzKCRTZWxmLT57WWVhcn0sJFNlbGYtPntNb250aH0sJFNlbGYtPntEYXl9LCA3KTsKICAgICAgICBteSAoJExhc3RZZWFyLCRMYXN0TW9udGgsJExhc3REYXkpID0gQWRkX0RlbHRhX0RheXMoJFNlbGYtPntZZWFyfSwkU2VsZi0+e01vbnRofSwkU2VsZi0+e0RheX0sICItNyIpOwogICAgICAgIGlmICghJFNlbGYtPntQcmludH0pIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIExhc3RZZWFyID0+ICRMYXN0WWVhciwKICAgICAgICAgICAgICAgICAgICBMYXN0TW9udGggPT4gJExhc3RNb250aCwKICAgICAgICAgICAgICAgICAgICBMYXN0RGF5ID0+ICRMYXN0RGF5LAogICAgICAgICAgICAgICAgICAgIE5leHRZZWFyID0+ICROZXh0WWVhciwKICAgICAgICAgICAgICAgICAgICBOZXh0TW9udGggPT4gJE5leHRNb250aCwKICAgICAgICAgICAgICAgICAgICBOZXh0RGF5ID0+ICROZXh0RGF5LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgIyBzaG93IGRheXMKICAgICAgICBteSAkRG93ID0gRGF5X29mX1dlZWsoJFNlbGYtPntZZWFyfSwkU2VsZi0+e01vbnRofSwkU2VsZi0+e0RheX0pOwogICAgICAgIGZvcmVhY2ggKDEuLjcpIHsKICAgICAgICAgICAgbXkgKCRZZWFyLCRNb250aCwkRGF5KSA9IEFkZF9EZWx0YV9EYXlzKCRTZWxmLT57WWVhcn0sJFNlbGYtPntNb250aH0sJFNlbGYtPntEYXl9LCAoJF8tJERvdykpOwogICAgICAgICAgICAkU2VsZi0+Q2FsZW5kYXJWaWV3RGF5KCRZZWFyLCRNb250aCwkRGF5KTsKICAgICAgICB9CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudENhbGVuZGFyJywKICAgICAgICAgICAgRGF0YSA9PiB7IH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICMgaGFuZGxlIHRoZSBvbmUgbW9udGggYmFjayBjYWxlbmRhciBkYXRhLgogICAgICAgIG15ICRNb250aExhc3QgPSAkU2VsZi0+e01vbnRofSAtMTsKICAgICAgICBteSAkWWVhckxhc3QgPSAkU2VsZi0+e1llYXJ9OwogICAgICAgIGlmICgkTW9udGhMYXN0IGVxIDApIHsKICAgICAgICAgICAgJE1vbnRoTGFzdCA9IDEyOwogICAgICAgICAgICAkWWVhckxhc3QgPSAkU2VsZi0+e1llYXJ9LTE7CiAgICAgICAgfQogICAgICAgICMgaGFuZGxlIHRoZSBtaWRkbGUgY2FsZW5kYXIgZGF0YS4KICAgICAgICBteSAkTW9udGhOZXh0ID0gJFNlbGYtPntNb250aH0gKzE7CiAgICAgICAgbXkgJFllYXJOZXh0ID0gJFNlbGYtPntZZWFyfTsKICAgICAgICBpZiAoJE1vbnRoTmV4dCBlcSAxMykgewogICAgICAgICAgICAkTW9udGhOZXh0ID0gMTsKICAgICAgICAgICAgJFllYXJOZXh0ID0gJFNlbGYtPntZZWFyfSsxOwogICAgICAgIH0KICAgICAgICAjIGhhbmRlbCB0aGUgcmlndGggY2FsZW5kYXIgZGF0YS4KICAgICAgICBteSAkTW9udGhOZXh0TmV4dCA9ICRTZWxmLT57TW9udGh9ICsyOwogICAgICAgIG15ICRZZWFyTmV4dE5leHQgPSAkU2VsZi0+e1llYXJ9OwogICAgICAgIGlmICgkTW9udGhOZXh0TmV4dCBlcSAxMykgewogICAgICAgICAgICAkTW9udGhOZXh0TmV4dCA9IDE7CiAgICAgICAgICAgICRZZWFyTmV4dE5leHQgPSAkU2VsZi0+e1llYXJ9KzE7CiAgICAgICAgfQogICAgICAgIGlmICgkTW9udGhOZXh0TmV4dCBlcSAxNCkgewogICAgICAgICAgICAkTW9udGhOZXh0TmV4dCA9IDI7CiAgICAgICAgICAgICRZZWFyTmV4dE5leHQgPSAkU2VsZi0+e1llYXJ9KzE7CiAgICAgICAgfQogICAgICAgICMgbmF2YmFyCiAgICAgICAgaWYgKCEkU2VsZi0+e1ByaW50fSkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTGFzdFllYXIgPT4gJFllYXJMYXN0LAogICAgICAgICAgICAgICAgICAgIExhc3RNb250aCA9PiAkTW9udGhMYXN0LAogICAgICAgICAgICAgICAgICAgIE5leHRZZWFyID0+ICRZZWFyTmV4dCwKICAgICAgICAgICAgICAgICAgICBOZXh0TW9udGggPT4gJE1vbnRoTmV4dCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRTZWxmLT5DYWxlbmRhclZpZXdNb250aCgkU2VsZi0+e1llYXJ9LCAkU2VsZi0+e01vbnRofSk7CiAgICAgICAgJFNlbGYtPkNhbGVuZGFyVmlld01vbnRoKCRZZWFyTmV4dCwgJE1vbnRoTmV4dCk7CiAgICAgICAgJFNlbGYtPkNhbGVuZGFyVmlld01vbnRoKCRZZWFyTmV4dE5leHQsICRNb250aE5leHROZXh0KTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50Q2FsZW5kYXInLAogICAgICAgICAgICBEYXRhID0+IHsgfSwKICAgICAgICApOwogICAgfQogICAgaWYgKCEkU2VsZi0+e1ByaW50fSkgewogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QcmludEZvb3RlcigpOwogICAgfQogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCnN1YiBDYWxlbmRhclZpZXdNb250aCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJFllYXIgPSBzaGlmdDsKICAgIG15ICRNb250aCA9IHNoaWZ0OwogICAgbXkgJE1vbnRoU3RyaW5nID0gTW9udGhfdG9fVGV4dCgkTW9udGgpOwogICAgIyBzdGFydCBvZiB0YWJsZS4KICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTW9udGgnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBNb250aFN0cmluZyA9PiAkTW9udGhTdHJpbmcsCiAgICAgICAgICAgIFllYXIgPT4gJFllYXIsCiAgICAgICAgfSwKICAgICk7CiAgICBteSAkT3V0cHV0ID0gJyc7CiAgICAjIGRheXMgcGVyIG1vbnRoLgogICAgbXkgJERheXMgPSBEYXlzX2luX01vbnRoKCRZZWFyLCRNb250aCk7CiAgICBmb3JlYWNoIG15ICREYXkgKDEuLiREYXlzKSB7CiAgICAgICAgbXkgJURhdGEgPSAkU2VsZi0+X0V2ZW50UHJlZmVyZW5jZXMoJFllYXIsJE1vbnRoLCREYXksMCwwLCRZZWFyLCRNb250aCwkRGF5LDIzLDU5KTsKICAgICAgICBteSAkRG93ID0gRGF5X29mX1dlZWsoJFllYXIsJE1vbnRoLCREYXkpOwogICAgICAgIG15ICREYXlTdHJpbmcgPSBEYXlfb2ZfV2Vla19BYmJyZXZpYXRpb24oJERvdyk7CiAgICAgICAgIyAkT3V0cHV0IC49IHRoZSByZXN1bHQgb2YgeCBkYXkuCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTW9udGhEYXknLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgWWVhciA9PiAkWWVhciwKICAgICAgICAgICAgICAgIE1vbnRoID0+ICRNb250aCwKICAgICAgICAgICAgICAgIERheSA9PiAkRGF5LAogICAgICAgICAgICAgICAgRGF5U3RyaW5nID0+ICREYXlTdHJpbmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICBteSAkTm90aW5nID0gMTsKICAgICAgICAjIGNyZWF0ZSBjbGFuZGFyIHdlZWsgb2YgeWVhci4KICAgICAgICBpZiAoJERvdyBlcSAxKSB7CiAgICAgICAgICAgICROb3RpbmcgPSAwOwogICAgICAgICAgICBteSAoJENhbGVuZGFyV2VlaywgJENhbGVuZGFyWWVhcikgPSBXZWVrX29mX1llYXIoJFllYXIsJE1vbnRoLCREYXkpOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTW9udGhXZWVrJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgIyBzaG93IGRheSBpbmZvCiAgICAgICAgaWYgKCREYXRhe0NGREV9KSB7CiAgICAgICAgICAgICROb3RpbmcgPSAwOwogICAgICAgICAgICBmb3JlYWNoIChAeyREYXRhe0NGREV9fSkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdNb250aE5vdGljZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEluZm8gPT4gJF8sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoQHskRGF0YXtFdmVudElEc319KSB7CiAgICAgICAgICAgICROb3RpbmcgPSAwOwogICAgICAgICAgICBteSAlRXZlbnQgPSAleyRffTsKICAgICAgICAgICAgbXkgJUV2ZW50T3JpZyA9ICRTZWxmLT57Q2FsZW5kYXJPYmplY3R9LT5FdmVudEdldCgKICAgICAgICAgICAgICAgIEV2ZW50SUQgPT4gJEV2ZW50e0V2ZW50SUR9LAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbXkgJFByZWZmaXggPSAnJzsKICAgICAgICAgICAgZm9yZWFjaCBteSAkUGFydGljaXBhbnRJRCAoQHskRXZlbnRPcmlne1BhcnRpY2lwYW50SURzfX0pIHsKICAgICAgICAgICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRQYXJ0aWNpcGFudElELAogICAgICAgICAgICAgICAgICAgIENhY2hlID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCRQcmVmZml4KSB7CiAgICAgICAgICAgICAgICAgICAgJFByZWZmaXggLj0gJywnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJFByZWZmaXggLj0gJFVzZXJ7VXNlckxvZ2lufTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJFByZWZmaXgpIHsKICAgICAgICAgICAgICAgICRFdmVudHtUaXRsZX0gPSAnKCcuJFByZWZmaXguJykgJy4kRXZlbnR7VGl0bGV9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkRXZlbnR7U3RhdGV9ID1+IC9wcml2YXRlL2kgJiYgJEV2ZW50e09yZ2FuaXplcklEfSBuZSAkU2VsZi0+e1VzZXJJRH0pIHsKICAgICAgICAgICAgICAgIG15ICRIaXQgPSAwOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoQHskRXZlbnRPcmlne1BhcnRpY2lwYW50SURzfX0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJF8gZXEgJFNlbGYtPntVc2VySUR9KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRIaXQgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghJEhpdCkgewogICAgICAgICAgICAgICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkRXZlbnR7T3JnYW5pemVySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTW9udGhFdmVudFByaXZhdGUnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVVc2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdNb250aEV2ZW50UHVibGljJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTW9udGhFdmVudFB1YmxpYycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVFdmVudCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAjIGhhbmRsZSBhIGVtdHkgY2VsbCAobm8gZXZlbnQpLgogICAgICAgIGlmICgkTm90aW5nKSB7CiAgICAgICAgICAgICROb3RpbmcgPSAwOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTW9udGhJbmZvJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEluZm8gPT4gJy0nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CgpzdWIgQ2FsZW5kYXJWaWV3RGF5IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CiAgICBteSAkWWVhciA9IHNoaWZ0OwogICAgbXkgJE1vbnRoID0gc2hpZnQ7CiAgICBteSAkRGF5ID0gc2hpZnQ7CiAgICBteSAkTW9udGhTdHJpbmcgPSBNb250aF90b19UZXh0KCRNb250aCk7CiAgICBteSAkRG93ID0gRGF5X29mX1dlZWsoJFllYXIsJE1vbnRoLCREYXkpOwogICAgbXkgJERheVN0cmluZyA9IERheV9vZl9XZWVrX0FiYnJldmlhdGlvbigkRG93KTsKICAgIG15ICRXaWR0aCA9IDA7CiAgICBpZiAoJFNlbGYtPntWaWV3fSBlcSAnV2VlazcnKSB7CiAgICAgICAgJFdpZHRoID0gaW50KDEwMC83KTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRXaWR0aCA9IGludCgxMDAvNSk7CiAgICB9CiAgICAjIHN0YXJ0IG9mIHRhYmxlLgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdEYXknLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBNb250aFN0cmluZyA9PiAkTW9udGhTdHJpbmcsCiAgICAgICAgICAgIERheVN0cmluZyA9PiAkRGF5U3RyaW5nLAogICAgICAgICAgICBEYXkgPT4gJERheSwKICAgICAgICAgICAgTW9udGggPT4gJE1vbnRoLAogICAgICAgICAgICBZZWFyID0+ICRZZWFyLAogICAgICAgICAgICBXaWR0aCA9PiAkV2lkdGgsCiAgICAgICAgfSwKICAgICk7CiAgICBteSAoJFN0YXJ0WWVhciwkU3RhcnRNb250aCwkU3RhcnREYXkpID0gQWRkX0RlbHRhX0RheXMoJFllYXIsJE1vbnRoLCREYXksICItJERvdyIpOwogICAgbXkgJE91dHB1dCA9ICcnOwogICAgIyBzaG93IGVhY2ggd2VlayBkYXkKICAgIGZvcmVhY2ggbXkgJEhvdXIgKDAuLjIzKSB7CiAgICAgICAgbXkgJURhdGEgPSAkU2VsZi0+X0V2ZW50UHJlZmVyZW5jZXMoJFllYXIsJE1vbnRoLCREYXksJEhvdXIsMCwkWWVhciwkTW9udGgsJERheSwkSG91ciw1OSk7CiAgICAgICAgIyAkT3V0cHV0IC49IHRoZSByZXN1bHQgb2YgeCBkYXkuCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRGF5SG91cicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICBZZWFyID0+ICRZZWFyLAogICAgICAgICAgICAgICAgTW9udGggPT4gJE1vbnRoLAogICAgICAgICAgICAgICAgRGF5ID0+ICREYXksCiAgICAgICAgICAgICAgICBIb3VyID0+ICRIb3VyLAogICAgICAgICAgICAgICAgTWludXRlID0+ICcwJywKICAgICAgICAgICAgICAgIERheVN0cmluZyA9PiAkRGF5U3RyaW5nLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgbXkgJE5vdGluZyA9IDE7CiAgICAgICAgIyBjcmVhdGUgY2xhbmRhciB3ZWVrIG9mIHllYXIuCiAgICAgICAgaWYgKCREb3cgZXEgMSAmJiAkSG91ciA9PSAwKSB7CiAgICAgICAgICAgICROb3RpbmcgPSAwOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRGF5V2VlaycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICMgc2hvdyBkYXkgaW5mbwogICAgICAgIGlmICgkRGF0YXtDRkRFfSkgewogICAgICAgICAgICAkTm90aW5nID0gMDsKICAgICAgICAgICAgZm9yZWFjaCAoQHskRGF0YXtDRkRFfX0pIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnRGF5Tm90aWNlJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyA9PiAkXywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3JlYWNoIChAeyREYXRhe0V2ZW50SURzfX0pIHsKICAgICAgICAgICAgJE5vdGluZyA9IDA7CiAgICAgICAgICAgIG15ICVFdmVudCA9ICV7JF99OwogICAgICAgICAgICBteSAlRXZlbnRPcmlnID0gJFNlbGYtPntDYWxlbmRhck9iamVjdH0tPkV2ZW50R2V0KAogICAgICAgICAgICAgICAgRXZlbnRJRCA9PiAkRXZlbnR7RXZlbnRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkUHJlZmZpeCA9ICcnOwogICAgICAgICAgICBmb3JlYWNoIG15ICRQYXJ0aWNpcGFudElEIChAeyRFdmVudE9yaWd7UGFydGljaXBhbnRJRHN9fSkgewogICAgICAgICAgICAgICAgbXkgJVVzZXIgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFBhcnRpY2lwYW50SUQsCiAgICAgICAgICAgICAgICAgICAgQ2FjaGUgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoJFByZWZmaXgpIHsKICAgICAgICAgICAgICAgICAgICAkUHJlZmZpeCAuPSAnLCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkUHJlZmZpeCAuPSAkVXNlcntVc2VyTG9naW59OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkUHJlZmZpeCkgewogICAgICAgICAgICAgICAgJEV2ZW50e1RpdGxlfSA9ICcoJy4kUHJlZmZpeC4nKSAnLiRFdmVudHtUaXRsZX07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRFdmVudHtTdGF0ZX0gPX4gL3ByaXZhdGUvaSAmJiAkRXZlbnR7T3JnYW5pemVySUR9IG5lICRTZWxmLT57VXNlcklEfSkgewogICAgICAgICAgICAgICAgbXkgJEhpdCA9IDA7CiAgICAgICAgICAgICAgICBmb3JlYWNoIChAeyRFdmVudE9yaWd7UGFydGljaXBhbnRJRHN9fSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkXyBlcSAkU2VsZi0+e1VzZXJJRH0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEhpdCA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCEkSGl0KSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJVVzZXIgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRFdmVudHtPcmdhbml6ZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIENhY2hlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdEYXlFdmVudFByaXZhdGUnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVVc2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdEYXlFdmVudFB1YmxpYycsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0RheUV2ZW50UHVibGljJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJUV2ZW50LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICMgaGFuZGxlIGEgZW10eSBjZWxsIChubyBldmVudCkuCiAgICAgICAgaWYgKCROb3RpbmcpIHsKICAgICAgICAgICAgJE5vdGluZyA9IDA7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdEYXlJbmZvJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEluZm8gPT4gJy0nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CgpzdWIgX0V2ZW50UHJlZmVyZW5jZXMgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICRTdGFydFllYXIgPSBzaGlmdDsKICAgIG15ICRTdGFydE1vbnRoID0gc3ByaW50ZigiJTAyZCIsc2hpZnQpOwogICAgbXkgJFN0YXJ0RGF5ID0gc3ByaW50ZigiJTAyZCIsc2hpZnQpOwogICAgbXkgJFN0YXJ0SG91ciA9IHNoaWZ0OwogICAgbXkgJFN0YXJ0TWludXRlID0gc2hpZnQ7CiAgICBteSAkRW5kWWVhciA9IHNoaWZ0OwogICAgbXkgJEVuZE1vbnRoID0gc3ByaW50ZigiJTAyZCIsc2hpZnQpOwogICAgbXkgJEVuZERheSA9IHNwcmludGYoIiUwMmQiLHNoaWZ0KTsKICAgIG15ICRFbmRIb3VyID0gc2hpZnQ7CiAgICBteSAkRW5kTWludXRlID0gc2hpZnQ7CgogICAgbXkgKCRTZWMsICRNaW4sICRIb3VyLCAkVERheSwgJFRNb250aCwgJFRZZWFyKSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICk7CiAgICBteSAoJENhbGVuZGFyV2VlaywgJENhbGVuZGFyWWVhcikgPSBXZWVrX29mX1llYXIoJFN0YXJ0WWVhciwkU3RhcnRNb250aCwkU3RhcnREYXkpOwogICAgbXkgQENGRE4gPSBAeyRTZWxmLT57Q0ZETn19OwogICAgbXkgQENGRCA9IEB7JFNlbGYtPntDRkR9fTsKICAgIG15ICRNb250aFN0cmluZyA9IE1vbnRoX3RvX1RleHQoJFN0YXJ0TW9udGgpOwogICAgbXkgJERvdyA9IERheV9vZl9XZWVrKCRTdGFydFllYXIsJFN0YXJ0TW9udGgsJFN0YXJ0RGF5KTsKICAgIG15ICREYXlTdHJpbmcgPSBEYXlfb2ZfV2Vla19BYmJyZXZpYXRpb24oJERvdyk7CiAgICBteSBAVXNlcklEcyA9ICgpOwogICAgaWYgKCRTZWxmLT57TWVtYmVyc30gZXEgJ0FsbCcpIHsKICAgICAgICBAVXNlcklEcyA9ICgpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgQFVzZXJJRHMgPSAoJFNlbGYtPntVc2VySUR9KTsKICAgIH0KICAgIG15IEBFdmVudElEcyA9ICRTZWxmLT57Q2FsZW5kYXJPYmplY3R9LT5FdmVudHMoCiAgICAgICAgU3RhcnRUaW1lID0+ICIkU3RhcnRZZWFyLSRTdGFydE1vbnRoLSRTdGFydERheSAkU3RhcnRIb3VyOiRTdGFydE1pbnV0ZTowMCIsCiAgICAgICAgRW5kVGltZSA9PiAiJEVuZFllYXItJEVuZE1vbnRoLSRFbmREYXkgJEVuZEhvdXI6JEVuZE1pbnV0ZTo1OSIsCiAgICAgICAgVXNlcklEcyA9PiBcQFVzZXJJRHMsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICAjIGhhbmRsZSB0aGUgY2ZkYHMKICAgIG15IEBDRkRFID0gKCk7CiAgICBteSAkVG1wVmFyID0gMDsKICAgIGZvcmVhY2ggKEBDRkROKSB7CiAgICAgICAgbXkgKCRDWWVhciwkQ01vbnRoLCRDRGF5KSA9IEFkZF9EZWx0YV9EYXlzKEVhc3Rlcl9TdW5kYXkoJFN0YXJ0WWVhciksICRTdGFydERheSk7CiAgICAgICAgaWYgKCIkQ1llYXIsJENNb250aCwkQ0RheSIgZXEgIiRTdGFydFllYXIsJFN0YXJ0TW9udGgsJFN0YXJ0RGF5IikgewogICAgICAgICAgICBwdXNoIChAQ0ZERSwgJENGRFskVG1wVmFyXSk7CiAgICAgICAgfQogICAgICAgICRUbXBWYXIrKzsKICAgIH0KICAgICMgaGFuZGVsIHRoZSAxc3QgbWF5ISEhCiAgICBteSAkVGltZVZhY2F0aW9uRGF5cyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lVmFjYXRpb25EYXlzJyk7CiAgICBteSAkVGltZVZhY2F0aW9uRGF5c09uZVRpbWUgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGltZVZhY2F0aW9uRGF5c09uZVRpbWUnKTsKICAgIGlmICgkVGltZVZhY2F0aW9uRGF5cy0+e2ludCgkU3RhcnRNb250aCl9LT57aW50KCRTdGFydERheSl9KSB7CiAgICAgICAgcHVzaCAoQENGREUsICRUaW1lVmFjYXRpb25EYXlzLT57aW50KCRTdGFydE1vbnRoKX0tPntpbnQoJFN0YXJ0RGF5KX0pOwogICAgfQogICAgaWYgKCRUaW1lVmFjYXRpb25EYXlzT25lVGltZS0+e2ludCgkU3RhcnRZZWFyKX0tPntpbnQoJFN0YXJ0TW9udGgpfS0+e2ludCgkU3RhcnREYXkpfSkgewogICAgICAgIHB1c2ggKEBDRkRFLCAkVGltZVZhY2F0aW9uRGF5c09uZVRpbWUtPntpbnQoJFN0YXJ0WWVhcil9LT57aW50KCRTdGFydE1vbnRoKX0tPntpbnQoJFN0YXJ0RGF5KX0pOwogICAgfQogICAgIyBoYW5kbGUgdGhlIHNhdCwgc3VuLCBjZmQgYW5kIHRvZGF5LgogICAgbXkgJENvdW50ZWRUaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+V29ya2luZ1RpbWUoCiAgICAgICAgU3RhcnRUaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPkRhdGUyU3lzdGVtVGltZSgKICAgICAgICAgICAgWWVhciA9PiAkU3RhcnRZZWFyLAogICAgICAgICAgICBNb250aCA9PiAkU3RhcnRNb250aCwKICAgICAgICAgICAgRGF5ID0+ICRTdGFydERheSwKICAgICAgICAgICAgSG91ciA9PiAkU3RhcnRIb3VyLAogICAgICAgICAgICBNaW51dGUgPT4gJFN0YXJ0TWludXRlLAogICAgICAgICAgICBTZWNvbmQgPT4gMCwKICAgICAgICApLAogICAgICAgIFN0b3BUaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPkRhdGUyU3lzdGVtVGltZSgKICAgICAgICAgICAgWWVhciA9PiAkRW5kWWVhciwKICAgICAgICAgICAgTW9udGggPT4gJEVuZE1vbnRoLAogICAgICAgICAgICBEYXkgPT4gJEVuZERheSwKICAgICAgICAgICAgSG91ciA9PiAkRW5kSG91ciwKICAgICAgICAgICAgTWludXRlID0+ICRFbmRNaW51dGUsCiAgICAgICAgICAgIFNlY29uZCA9PiAwLAogICAgICAgICksCiAgICApOwoKICAgIG15ICRDbGFzczsKICAgIGlmICgkQ291bnRlZFRpbWUpIHsKICAgICAgICBpZiAoJFREYXkgPT0gJFN0YXJ0RGF5ICYmICRUTW9udGggPT0gJFN0YXJ0TW9udGggJiYgJFRZZWFyID09ICRTdGFydFllYXIpIHsKICAgICAgICAgICAgJENsYXNzID0idG9kYXkiOwogICAgICAgIH0KICAgICAgICAjIGhpdCBzYXQgb3Igc3VuLgogICAgICAgIGVsc2lmICgkRG93IGVxIDYpIHsKICAgICAgICAgICAgJENsYXNzID0ic2F0dXJkYXkiOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoJERvdyBlcSA3KSB7CiAgICAgICAgICAgICRDbGFzcyA9InN1bmRheSI7CiAgICAgICAgfQogICAgICAgICMgaGl0IENGRC4KICAgICAgICBlbHNpZiAoQENGREUpIHsKICAgICAgICAgICAgJENsYXNzID0iaG9saWRheSI7CiAgICAgICAgfQogICAgICAgIGVsc2lmIChARXZlbnRJRHMpIHsKIyAgICAgICAgICAgICRDbGFzcyA9ImV2ZW50IjsKICAgICAgICAgICAgJENsYXNzID0id2Vla2RheSI7CiAgICAgICAgfQogICAgICAgICMgZWxzZSBzdGQgY29sb3IuCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRDbGFzcyA9IndlZWtkYXkiOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICgkVERheSA9PSAkU3RhcnREYXkgJiYgJFRNb250aCA9PSAkU3RhcnRNb250aCAmJiAkVFllYXIgPT0gJFN0YXJ0WWVhcikgewogICAgICAgICAgICAkQ2xhc3MgPSJ0b2RheW5vdGNvdW50ZWQiOwogICAgICAgIH0KICAgICAgICAjIGhpdCBzYXQgb3Igc3VuLgogICAgICAgIGVsc2lmICgkRG93IGVxIDYpIHsKICAgICAgICAgICAgJENsYXNzID0ic2F0dXJkYXkiOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoJERvdyBlcSA3KSB7CiAgICAgICAgICAgICRDbGFzcyA9InN1bmRheSI7CiAgICAgICAgfQogICAgICAgICMgaGl0IENGRC4KICAgICAgICBlbHNpZiAoQENGREUpIHsKICAgICAgICAgICAgJENsYXNzID0iaG9saWRheSI7CiAgICAgICAgfQogICAgICAgIGVsc2lmIChARXZlbnRJRHMpIHsKIyAgICAgICAgICAgICRDbGFzcyA9ImV2ZW50bm90Y291bnRlZCI7CiAgICAgICAgICAgICRDbGFzcyA9IndlZWtkYXlub3Rjb3VudGVkIjsKICAgICAgICB9CiAgICAgICAgIyBlbHNlIHN0ZCBjb2xvci4KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJENsYXNzID0id2Vla2RheW5vdGNvdW50ZWQiOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAoCiAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgIENhbGVuZGFyV2VlayA9PiAkQ2FsZW5kYXJXZWVrLAogICAgICAgIENGREUgPT4gXEBDRkRFLAogICAgICAgIEV2ZW50SURzID0+IFxARXZlbnRJRHMsCiAgICApOwp9CgoxOwo= IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9BZ2VudENhbGVuZGFyLnBtIC0gdGhlIGRlIGxhbmd1YWdlIGZvciBBZ2VudENhbGVuZGFyCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IGRlX0FnZW50Q2FsZW5kYXIucG0sdiAxLjggMjAwNy8wMS8xNSAyMjoxNjo1NyBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGVfQWdlbnRDYWxlbmRhcjsKCnVzZSBzdHJpY3Q7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NXJ30gPSAnS1cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9kYXknfSA9ICdIZXV0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb21vcnJvdyd9ID0gJ01vcmdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW5uaW5nJ30gPSAnTGF1ZmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZlYXN0IG9mIENvcnB1cyBDaHJpc3RpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1doaXRzdW5kYXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2hpdG1vbmRheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc2NlbnNpb24gb2YgQ2hyaXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzEgU3QuIE1heSd9ID0gJ0Vyc3RlciBNYWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hyaXN0bWFzJ30gPSAnV2VpaG5hY2h0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlyc3QgQ2hyaXN0bWFzIERheSd9ID0gJ0Vyc3RlciBXZWlobmFjaHRzdGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY29uZCBDaHJpc3RtYXMgRGF5J30gPSAnWndlaXRlciBXZWlobmFjaHRzdGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbHZlc3Rlcid9ID0gJ1NpbHZlc3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgWWVhclwncyBFdmUhJ30gPSAnTmV1IEphaHIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdKYW51YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmVicnVhcnknfSA9ICdGZWJydWFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcmNoJ30gPSAnTeRyeic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHJpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdW5lJ30gPSAnSnVuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdWx5J30gPSAnSnVsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdWd1c3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VwdGVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09jdG9iZXInfSA9ICdPa3RvYmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdmVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnRGV6ZW1iZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnNSBEYXknfSA9ICc1IFRhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnNyBEYXknfSA9ICc3IFRhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMyBNb250aCd9ID0gJzMgTW9uYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ9ZmZmVudGxpY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpdmF0ZSd9ID0gJ1ByaXZhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2YWNhdGlvbid9ID0gJ0ZyZWl6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J21lZXRpbmcnfSA9ICdNZWV0aW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBFdmVudC4uLid9ID0gJ05ldSAuLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydGljaXBhbnQnfSA9ICdUZWlsbmVobWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludm9sdmVkJ30gPSAnSW52b2x2aWVydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb25lJ30gPSAnS2VpbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2Vla2x5J30gPSAnV/ZjaGVudGxpY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGhseSd9ID0gJ01vbmF0bGljaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZZWFybHknfSA9ICdK5GhybGljaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXF1ZW5jZSd9ID0gJ1NlcXVlbnonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VxdWVuY2UgRW5kJ30gPSAnU2VxdWVuemVuZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMS4gZmlyc3QnfSA9ICcxLiBlcnN0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMi4gc2Vjb25kJ30gPSAnMi4gendlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyczLiB0aGlyZCd9ID0gJzMuIGRyaXR0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnNC4gZm91cnRoJ30gPSAnNC4gdmllcnRlbic7Cn0KCjE7 IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9mcl9BZ2VudENhbGVuZGFyLnBtIC0gdGhlIGZyIGxhbmd1YWdlIGZvciBBZ2VudENhbGVuZGFyCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IGZyX0FnZW50Q2FsZW5kYXIucG0sdiAxLjEgMjAwNy8wNi8yNyAyMzowMzowOSBtYXJ0aW4gRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZyX0FnZW50Q2FsZW5kYXI7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDVyd9ID0gJ3NlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb2RheSd9ID0gJ0F1am91cmRcJ2h1aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb21vcnJvdyd9ID0gJ0RlbWFpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW5uaW5nJ30gPSAnRW4gY291cnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmVhc3Qgb2YgQ29ycHVzIENocmlzdGknfSA9ICdWZW5kcmVkaSBkZSBQ4nF1ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2hpdHN1bmRheSd9ID0gJ1DicXVlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaGl0bW9uZGF5J30gPSAnTHVuZGkgZGUgUOJxdWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FzY2Vuc2lvbiBvZiBDaHJpc3QnfSA9ICdBc2NlbnNpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMSBTdC4gTWF5J30gPSAnMWVyIE1haSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaHJpc3RtYXMnfSA9ICdWZWlsbGUgZGUgTm/rbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaXJzdCBDaHJpc3RtYXMgRGF5J30gPSAnSm91ciBkZSBO9mVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY29uZCBDaHJpc3RtYXMgRGF5J30gPSAnTGVuZGVtYWluIGRlIE5v62wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2lsdmVzdGVyJ30gPSAnU3QgU2lsdmVzdGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBZZWFyXCdzIEV2ZSEnfSA9ICdOb3V2ZWxsZSBhbm7pZSAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdKYW52aWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZlYnJ1YXJ5J30gPSAnRul2cmllcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXJjaCd9ID0gJ01hcnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXByaWwnfSA9ICdBdnJpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdW5lJ30gPSAnSnVpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdWx5J30gPSAnSnVpbGxldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdWd1c3QnfSA9ICdBb/t0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcHRlbWJlcid9ID0gJ1NlcHRlbWJyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnT2N0b2JyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJ05vdmVtYnJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnRGVjZW1icmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnNSBEYXknfSA9ICc1IGpvdXJzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzcgRGF5J30gPSAnNyBqb3Vycyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyczIE1vbnRoJ30gPSAnMyBtb2lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ3B1YmxpYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcml2YXRlJ30gPSAnUHJpduknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmFjYXRpb24nfSA9ICdjb25n6XMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbWVldGluZyd9ID0gJ1LpdW5pb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IEV2ZW50Li4uJ30gPSAnTm91dmVsIOl26W5lbWVudCAuLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52b2x2ZWQnfSA9ICdDb25jZXJu6Sc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycnfSA9ICcnOwoKfQoxOwo= IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9pdF9BZ2VudENhbGVuZGFyLnBtIC0gdGhlIGl0IGxhbmd1YWdlIGZvciBBZ2VudENhbGVuZGFyCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IGl0X0FnZW50Q2FsZW5kYXIucG0sdiAxLjQgMjAwNy8wMS8xNSAyMjoxNjo1NyBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aXRfQWdlbnRDYWxlbmRhcjsKCnVzZSBzdHJpY3Q7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NXJ30gPSAnU2V0dGltYW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvZGF5J30gPSAnT2dnaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb21vcnJvdyd9ID0gJ0RvbWFuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW5uaW5nJ30gPSAnSW4gY29yc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmVhc3Qgb2YgQ29ycHVzIENocmlzdGknfSA9ICdDb3JwdXMgQ2hyaXN0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaGl0c3VuZGF5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1doaXRtb25kYXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNjZW5zaW9uIG9mIENocmlzdCd9ID0gJ0FzY2Vuc2lvbmUgZGkgQ3Jpc3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzEgU3QuIE1heSd9ID0gJ1ByaW1vIE1hZ2dpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaHJpc3RtYXMnfSA9ICdWaWdpbGlhIGRpIE5hdGFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaXJzdCBDaHJpc3RtYXMgRGF5J30gPSAnTmF0YWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY29uZCBDaHJpc3RtYXMgRGF5J30gPSAnU2FudG8gU3RlZmFubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWx2ZXN0ZXInfSA9ICdTYW4gU2lsdmVzdHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBZZWFyXCdzIEV2ZSEnfSA9ICdDYXBvZGFubm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSmFudWFyeSd9ID0gJ0dlbm5haW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmVicnVhcnknfSA9ICdGZWJicmFpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXJjaCd9ID0gJ01hcnpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heSd9ID0gJ01hZ2dpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHJpbCd9ID0gJ0FwcmlsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdW5lJ30gPSAnR2l1Z25vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bHknfSA9ICdMdWdsaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXVndXN0J30gPSAnQWdvc3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcHRlbWJlcid9ID0gJ1NldHRlbWJyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnT3R0b2JyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJ05vdmVtYnJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnRGljZW1icmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnNSBEYXknfSA9ICc1IEdpb3JuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyc3IERheSd9ID0gJzcgR2lvcm5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzMgTW9udGgnfSA9ICczIE1lc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAncHViYmxpY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpdmF0ZSd9ID0gJ3ByaXZhdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmFjYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbWVldGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRXZlbnQuLi4nfSA9ICdOdW92by4uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0aWNpcGFudCd9ID0gJ1BhcnRlY2lwYW50ZSc7Cn0KCjE7 IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9uYl9OT19BZ2VudENhbGVuZGFyLnBtIC0gdGhlIG5iIGxhbmd1YWdlIGZvciBBZ2VudENhbGVuZGFyCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IG5iX05PX0FnZW50Q2FsZW5kYXIucG0sdiAxLjQgMjAwNy8wMS8xNSAyMjoxNjo1NyBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmJfTk9fQWdlbnRDYWxlbmRhcjsKCnVzZSBzdHJpY3Q7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NXJ30gPSAnVWtlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvZGF5J30gPSAnSWRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb21vcnJvdyd9ID0gJ0ltb3JnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVubmluZyd9ID0gJ0z4cGVuZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmVhc3Qgb2YgQ29ycHVzIENocmlzdGknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2hpdHN1bmRheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaGl0bW9uZGF5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FzY2Vuc2lvbiBvZiBDaHJpc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMSBTdC4gTWF5J30gPSAnRvhyc3RlIG1haSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaHJpc3RtYXMnfSA9ICdKdWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlyc3QgQ2hyaXN0bWFzIERheSd9ID0gJ0b4cnN0ZSBqdWxlZGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY29uZCBDaHJpc3RtYXMgRGF5J30gPSAnQW5kcmUganVsZWRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWx2ZXN0ZXInfSA9ICdTaWx2ZXN0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFllYXJcJ3MgRXZlISd9ID0gJ055dHTlcnNhZnRlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSmFudWFyeSd9ID0gJ0phbnVhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSd9ID0gJ0ZlYnJ1YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFyY2gnfSA9ICdNYXJzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcmlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bmUnfSA9ICdKdW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bHknfSA9ICdKdWxpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1Z3VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXB0ZW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2N0b2Jlcid9ID0gJ09rdG9iZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm92ZW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjZW1iZXInfSA9ICdEZXNlbWJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyc1IERheSd9ID0gJzUgZGFnZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnNyBEYXknfSA9ICc3IGRhZ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzMgTW9udGgnfSA9ICczIG3lbmVkZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAnb2ZmZW50bGlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaXZhdGUnfSA9ICdwcml2YXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmFjYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbWVldGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRXZlbnQuLi4nfSA9ICdOeSAuLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydGljaXBhbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52b2x2ZWQnfSA9ICdJbnZvbHZlcnQoZSknOwp9CgoxOw== IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wdF9BZ2VudENhbGVuZGFyLnBtIC0gdGhlIHB0IGxhbmd1YWdlIGZvciBBZ2VudENhbGVuZGFyCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IHB0X0FnZW50Q2FsZW5kYXIucG0sdiAxLjMgMjAwNy8wMS8xNSAyMjoxNjo1NyBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfQWdlbnRDYWxlbmRhcjsKCnVzZSBzdHJpY3Q7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NXJ30gPSAnU2VtYW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvZGF5J30gPSAnSG9qZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb21vcnJvdyd9ID0gJ0FtYW5o4yc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW5uaW5nJ30gPSAnRW0gY3Vyc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmVhc3Qgb2YgQ29ycHVzIENocmlzdGknfSA9ICdDb3JwbyBkZSBDcmlzdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2hpdHN1bmRheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaGl0bW9uZGF5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FzY2Vuc2lvbiBvZiBDaHJpc3QnfSA9ICdBc2NlbnPjbyBkZSBDcmlzdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMSBTdC4gTWF5J30gPSAnUHJpbWVpcm8gZGUgTWFpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaHJpc3RtYXMnfSA9ICdW6XNwZXJhIGRlIE5hdGFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpcnN0IENocmlzdG1hcyBEYXknfSA9ICdOYXRhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWNvbmQgQ2hyaXN0bWFzIERheSd9ID0gJ1NhbnRvIEVzdOp2428nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2lsdmVzdGVyJ30gPSAnU+NvIFNpbHZlc3RyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgWWVhclwncyBFdmUhJ30gPSAnRmltIGRlIGFubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKYW51YXJ5J30gPSAnSmFuZWlybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSd9ID0gJ0ZldmVyZWlybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXJjaCd9ID0gJ01hcudvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heSd9ID0gJ01haW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXByaWwnfSA9ICdBYnJpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdW5lJ30gPSAnSnVuaG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVseSd9ID0gJ0p1bGhvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1Z3VzdCd9ID0gJ0Fnb3N0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXB0ZW1iZXInfSA9ICdTZXRlbWJybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnT3V0dWJybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJ05vdmVtYnJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnRGV6ZW1icm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnNSBEYXknfSA9ICc1IERpYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnNyBEYXknfSA9ICc3IERpYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMyBNb250aCd9ID0gJzMgTWVzZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAncPpibGljbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwcml2YXRlJ30gPSAncHJpdmFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2YWNhdGlvbid9ID0gJ2ZvbGdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J21lZXRpbmcnfSA9ICdyZXVuaeNvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBFdmVudC4uLid9ID0gJ05vdm8gRXZlbnRvLi4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnRpY2lwYW50J30gPSAnUGFydGljaXBhbnRlcyc7Cn0KCjE7 IyAtLQojIEFnZW50Q2FsZW5kYXIuZHRsIC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZ2VudENhbGVuZGFyCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFnZW50Q2FsZW5kYXIuZHRsLHYgMS4xNCAyMDA3LzAxLzE1IDIyOjE2OjU4IG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6Q3JlYXRlIC0tPgo8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICA8dHI+CiAgICA8dGQgY2xhc3M9Im1haW5oZWFkIj4KICAgICAgJEVudnsiQm94MCJ9JFRleHR7IkNhbGVuZGFyIn0kRW52eyJCb3gxIn0KICAgIDwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgY2xhc3M9Im1haW5ib2R5Ij4KICAgICAgPGJyPgogICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9ImNvbXBvc2UiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJDcmVhdGVBY3Rpb24iPgogICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI3MDAiIGFsaWduPSJjZW50ZXIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0iY29udGVudGhlYWQiPiRUZXh0eyJOZXcifTwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRib2R5Ij4KICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjAlIiBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlRpdGxlIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iODAlIiBjbGFzcz0iY29udGVudHZhbHVlIj4gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlRpdGxlIiB2YWx1ZT0iJFFEYXRheyJUaXRsZSJ9IiBzaXplPSI3MCI+PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IkxvY2F0aW9uIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkxvY2F0aW9uIiB2YWx1ZT0iJFFEYXRheyJMb2NhdGlvbiJ9IiBzaXplPSI3MCI+PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IkRlc2NyaXB0aW9uIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4gPHRleHRhcmVhIG5hbWU9IkRlc2NyaXB0aW9uIiByb3dzPSI2IiBjb2xzPSI3MCIgd3JhcD0iJEVudnsiQnJvd3NlcldyYXAifSI+JFFEYXRheyJEZXNjcmlwdGlvbiJ9PC90ZXh0YXJlYT48L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiU3RhcnQifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiAkRGF0YXsiU3RhcnREYXRlU3RyaW5nIn08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiRW5kIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4gJERhdGF7IkVuZERhdGVTdHJpbmcifTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJTdGF0ZSJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+ICREYXRheyJTdGF0ZSJ9PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlNlcXVlbmNlIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRUZXh0eyJOb25lIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9IiIgJERhdGF7IlNlcXVlbmNlVHlwZTo6Tm9uZSJ9PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFRleHR7IldlZWtseSJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiRUZXh0eyJNb24ifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iV2Vla2x5OjpNb24iICREYXRheyJTZXF1ZW5jZVR5cGU6OldlZWtseTo6TW9uIn0+CiRUZXh0eyJUdWUifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iV2Vla2x5OjpUdWUiICREYXRheyJTZXF1ZW5jZVR5cGU6OldlZWtseTo6VHVlIn0+CiRUZXh0eyJXZWQifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iV2Vla2x5OjpXZWQiICREYXRheyJTZXF1ZW5jZVR5cGU6OldlZWtseTo6V2VkIn0+CiRUZXh0eyJUaHUifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iV2Vla2x5OjpUaHUiICREYXRheyJTZXF1ZW5jZVR5cGU6OldlZWtseTo6VGh1In0+CiRUZXh0eyJGcmkifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iV2Vla2x5OjpGcmkiICREYXRheyJTZXF1ZW5jZVR5cGU6OldlZWtseTo6RnJpIn0+CiRUZXh0eyJTYXQifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iV2Vla2x5OjpTYXQiICREYXRheyJTZXF1ZW5jZVR5cGU6OldlZWtseTo6U2F0In0+CiRUZXh0eyJTdW4ifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iV2Vla2x5OjpTdW4iICREYXRheyJTZXF1ZW5jZVR5cGU6OldlZWtseTo6U3VuIn0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFRleHR7Ik1vbnRobHkifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgokRGF0YXsiTW9udGhseVN0cmluZyJ9CiRUZXh0eyJNb24ifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iTW9udGhseTo6TW9uIiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpNb250aGx5OjpNb24ifT4KJFRleHR7IlR1ZSJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJNb250aGx5OjpUdWUiICREYXRheyJTZXF1ZW5jZVR5cGU6Ok1vbnRobHk6OlR1ZSJ9PgokVGV4dHsiV2VkIn08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9Ik1vbnRobHk6OldlZCIgJERhdGF7IlNlcXVlbmNlVHlwZTo6TW9udGhseTo6V2VkIn0+CiRUZXh0eyJUaHUifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iTW9udGhseTo6VGh1IiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpNb250aGx5OjpUaHUifT4KJFRleHR7IkZyaSJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJNb250aGx5OjpGcmkiICREYXRheyJTZXF1ZW5jZVR5cGU6Ok1vbnRobHk6OkZyaSJ9PgokVGV4dHsiU2F0In08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9Ik1vbnRobHk6OlNhdCIgJERhdGF7IlNlcXVlbmNlVHlwZTo6TW9udGhseTo6U2F0In0+CiRUZXh0eyJTdW4ifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iTW9udGhseTo6U3VuIiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpNb250aGx5OjpTdW4ifT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kVGV4dHsiWWVhcmx5In06IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9IlllYXJseSIgJERhdGF7IlNlcXVlbmNlVHlwZTo6WWVhcmx5In0+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kVGV4dHsiU2VxdWVuY2UgRW5kIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kRGF0YXsiU2VxdWVuY2VFbmREYXRlU3RyaW5nIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiUGFydGljaXBhbnQifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiAkRGF0YXsiUGFydGljaXBhbnRMaXN0In08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KIyAgICAgICAgICAgICAgICA8dHI+CiMgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJSZW1pbmRlciJ9OiA8L3RkPgojICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiAkRGF0YXsiUmVtaW5kZXIifTwvdGQ+CiMgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Zm9vdGVyIj4KICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImJ1dHRvbiIgYWNjZXNza2V5PSJnIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiTmV3In0iPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgICA8L2Zvcm0+CiAgICAgIDxicj4KICAgIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6Q3JlYXRlIC0tPgo8IS0tIGR0bDpibG9jazpVcGRhdGUgLS0+Cjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiPgogIDx0cj4KICAgIDx0ZCBjbGFzcz0ibWFpbmhlYWQiPgogICAgICAkRW52eyJCb3gwIn0kVGV4dHsiQ2FsZW5kYXIifSRFbnZ7IkJveDEifQogICAgPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCBjbGFzcz0ibWFpbmJvZHkiPgogICAgICA8YnI+CiAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iY29tcG9zZSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlVwZGF0ZUFjdGlvbiI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRXZlbnRJRCIgdmFsdWU9IiRRRGF0YXsiRXZlbnRJRCJ9Ij4KICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iNzAwIiBhbGlnbj0iY2VudGVyIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiIgY2xhc3M9ImNvbnRlbnRoZWFkIj4kVGV4dHsiRWRpdCJ9PC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGJvZHkiPgogICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiVGl0bGUifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI4MCUiIGNsYXNzPSJjb250ZW50dmFsdWUiPiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iVGl0bGUiIHZhbHVlPSIkUURhdGF7IlRpdGxlIn0iIHNpemU9IjcwIj48L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiTG9jYXRpb24ifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTG9jYXRpb24iIHZhbHVlPSIkUURhdGF7IkxvY2F0aW9uIn0iIHNpemU9IjcwIj48L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiRGVzY3JpcHRpb24ifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiA8dGV4dGFyZWEgbmFtZT0iRGVzY3JpcHRpb24iIHJvd3M9IjYiIGNvbHM9IjcwIiB3cmFwPSIkRW52eyJCcm93c2VyV3JhcCJ9Ij4kUURhdGF7IkRlc2NyaXB0aW9uIn08L3RleHRhcmVhPjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJTdGFydCJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+ICREYXRheyJTdGFydERhdGVTdHJpbmcifTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJFbmQifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiAkRGF0YXsiRW5kRGF0ZVN0cmluZyJ9PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlN0YXRlIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4gJERhdGF7IlN0YXRlU3RyaW5nIn08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAg