{"remainingRequest":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\commandDispatch\\EventRegistration\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\commandDispatch\\EventRegistration\\index.vue","mtime":1754510950715},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\babel.config.js","mtime":1741314102158},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9yZWdlbmVyYXRvclJ1bnRpbWUuanMiOwppbXBvcnQgX2FzeW5jVG9HZW5lcmF0b3IgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZpbmQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7Ci8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCgppbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7CmltcG9ydCBQdWJTdWIgZnJvbSAncHVic3ViLWpzJzsKaW1wb3J0IHsgcmVmaW5lUmVxdWVzdEJvZHkgfSBmcm9tICdAL3V0aWxzL3JlcXVlc3RXcmFwcGVycyc7CmltcG9ydCB7IGdldFNjaGVkdWxpbmdQZXJzb24sIHRhYmxlQWRkLCB0YWJsZURldGFpbCwgdGFibGVFZGl0IH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2NvbW1hbmREaXNwYXRjaC9ldmVudFJlZ2lzdHJhdGlvbic7CmltcG9ydCB7IGRpY3Rpb25hcnlFc2NhcGUsIGdldERpY3Rpb25hcnlCeUNvZGUgfSBmcm9tICdAL3V0aWxzL2RpY3Rpb25hcnknOwppbXBvcnQgQXBwb2ludERpYWxvZyBmcm9tICcuL2NvbXBvbmVudHMvQXBwb2ludERpYWxvZyc7CmltcG9ydCBUcmFmZmljQ29udHJvbCBmcm9tICcuL2NvbXBvbmVudHMvVHJhZmZpY0NvbnRyb2wnOwppbXBvcnQgU2NoZWR1bGluZ0RpYWxvZyBmcm9tICcuL2NvbXBvbmVudHMvU2NoZWR1bGluZ0RpYWxvZyc7CmltcG9ydCBUcmFmZmljSmFtIGZyb20gJy4vY29tcG9uZW50cy9UcmFmZmljSmFtJzsKaW1wb3J0IEJhc2ljc0luZm8gZnJvbSAnLi9jb21wb25lbnRzL0Jhc2ljc0luZm8nOwppbXBvcnQgeyB0YWJsZURhdGEgYXMgcm9hZFNlY3Rpb25JbmZvSW50ZXIgfSBmcm9tICdAL2FwaS9wYXRyb2xBbmRSZXNjdWUvaW5mb01nbXRQYXRyb2xzUmVzY3Vlcy9yb2FkU2VjdGlvbkluZm8nOwppbXBvcnQgeyB0YWJsZURhdGEgYXMgdGVhbURhdGEgfSBmcm9tICdAL2FwaS9wYXRyb2xBbmRSZXNjdWUvaW5mb01nbXRQYXRyb2xzUmVzY3Vlcy9wYXRyb2xBbmRSZXNjdWVUZWFtc01nbXQnOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ0V2ZW50UmVnaXN0cmF0aW9uJywKICBjb21wb25lbnRzOiB7CiAgICBTY2hlZHVsaW5nRGlhbG9nOiBTY2hlZHVsaW5nRGlhbG9nLAogICAgQXBwb2ludERpYWxvZzogQXBwb2ludERpYWxvZywKICAgIFRyYWZmaWNDb250cm9sOiBUcmFmZmljQ29udHJvbCwKICAgIEJhc2ljc0luZm86IEJhc2ljc0luZm8sCiAgICBUcmFmZmljSmFtOiBUcmFmZmljSmFtCiAgfSwKICBwcm9wczogewogICAgY29tcG9uZW50TmFtZTogewogICAgICBkZWZhdWx0OiAnRWRpdEFkZFBhZ2UnLAogICAgICB0eXBlOiBTdHJpbmcKICAgIH0KICB9LAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBhY3RpdmVOYW1lOiAnYmFzaWNzJywKICAgICAgZm9ybUxvYWRpbmc6IHRydWUsCiAgICAgIGFwcG9pbnREaWFsb2c6IGZhbHNlLAogICAgICBzY2hlZHVsaW5nRGlhbG9nOiBmYWxzZSwKICAgICAgYWRkRWRpdEZvcm06IHsKICAgICAgICB0cmFmZmljQ29udHJvbHM6IFtdLAogICAgICAgIHRyYWZmaWNDb25nZXN0aW9uczogW10sCiAgICAgICAgY3JlYXRlQnk6ICcnIC8vIOeZu+iusOS6ugogICAgICB9LAogICAgICBhZGRFZGl0UnVsZXM6IHsKICAgICAgICBtZW1vOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn5LqL5Lu25o+P6L+w5LiN6IO95Li656m6JywKICAgICAgICAgIHRyaWdnZXI6IFsnY2hhbmdlJywgJ2JsdXInXQogICAgICAgIH1dLAogICAgICAgIGNyZWF0ZUJ5OiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn55m76K6w5Lq65LiN6IO95Li656m6JywKICAgICAgICAgIHRyaWdnZXI6IFsnY2hhbmdlJywgJ2JsdXInXQogICAgICAgIH1dCiAgICAgIH0sCiAgICAgIHNhdmVMb2FkaW5nOiBmYWxzZSwKICAgICAgLy8g5LiK5LygbG9hZGluZwogICAgICBpZDogJycsCiAgICAgIC8vIGlk5qCH6K+G56ymCiAgICAgIHJvYWRDaG9pY2VEaWFsb2c6IGZhbHNlLAogICAgICAvLyDmmK/lkKblsZXnpLrpgInmi6not6/mrrXlvLnlsYIKICAgICAgcm91dGVyRGF0YTogW10sCiAgICAgIC8vIOi3r+e6v+aVsOaNrgogICAgICBwdWJTdWI6IG51bGwsCiAgICAgIG1hcExvYWRpbmc6IHRydWUsCiAgICAgIC8vIOWcsOWbvuWKoOi9vWxvYWRpbmcKICAgICAgbWFwOiBudWxsLAogICAgICBtYXBEZWZhdWx0T3B0aW9uczogewogICAgICAgIGNlbnRlcjogWzEwNi41NTA3LCAyOS41NjQ3XSAvKuWcsOWbvuS4reW/g+eCuSovLAogICAgICAgIHpvb206IDkgLyrlnLDlm77pu5jorqTnvKnmlL7nrYnnuqcqLwogICAgICB9LAogICAgICBtYXJrZXJzOiBbXSwKICAgICAgdGVhbVRyZWVEYXRhOiBbXSwKICAgICAgLy8g5pWR5o+06Zif5LyN57uE57uH5qCRCiAgICAgIGV2ZW50R3JhZGVPcHRpb25zOiBbCiAgICAgIC8v5LqL5Lu2562J57qnCiAgICAgIHsKICAgICAgICBsYWJlbDogJzHnuqcnLAogICAgICAgIHZhbHVlOiAxCiAgICAgIH0sIHsKICAgICAgICBsYWJlbDogJzLnuqcnLAogICAgICAgIHZhbHVlOiAyCiAgICAgIH0sIHsKICAgICAgICBsYWJlbDogJzPnuqcnLAogICAgICAgIHZhbHVlOiAzCiAgICAgIH0sIHsKICAgICAgICBsYWJlbDogJzTnuqcnLAogICAgICAgIHZhbHVlOiA0CiAgICAgIH1dLAogICAgICB0YWJsZURhdGE6IFtdLAogICAgICByb2FkT3B0aW9uczogW10sCiAgICAgIGFsb25nUm91dGVJbmZvRGF0YTogW10sCiAgICAgIHRlYW1PcHRpb25zOiBbXSwKICAgICAgaW5zcGVjdE9wdGlvbnM6IFtdLAogICAgICBvcHRpb25zOiBbewogICAgICAgIGxhYmVsOiAn5ZCmJywKICAgICAgICB2YWx1ZTogMAogICAgICB9LCB7CiAgICAgICAgbGFiZWw6ICfmmK8nLAogICAgICAgIHZhbHVlOiAxCiAgICAgIH1dLAogICAgICBnZW5lcmF0ZWRPck5vdDogMCwKICAgICAgdGVhbUluZm86IHsKICAgICAgICB0ZWFtSWQ6ICcnLAogICAgICAgIHRlYW1GdWxsSWQ6ICcnCiAgICAgIH0sCiAgICAgIGJhc2VJbmZvOiB7fSwKICAgICAgdXNlckNoYW5nZWQ6IGZhbHNlLAogICAgICAvLyDnlKjmiLfmmK/lkKbnvJbovpFtZW1vCiAgICAgIGJhc2ljOiAnJywKICAgICAgLy8g5Z+65pys5oOF5Ya1CiAgICAgIG1lYXN1cmU6ICcnLAogICAgICAvLyDkuqTpgJrnrqHliLYKICAgICAgY2FzdWFsdGllczogJycsCiAgICAgIC8vIOWPl+S8pOaDheWGtQogICAgICB1c2VyT3B0aW9uczogW10sCiAgICAgIGlzU2hvd0FwcG9pbnQ6IHRydWUsCiAgICAgIHJvYWRJbmZvOiB7fQogICAgfTsKICB9LAogIHdhdGNoOiB7CiAgICBjb21wb25lbnROYW1lOiB7CiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIobmV3VmFsKSB7CiAgICAgICAgaWYgKG5ld1ZhbCA9PT0gdGhpcy4kb3B0aW9ucy5uYW1lKSB7CiAgICAgICAgICB0aGlzLm9wZW5QYWdlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuY2xvc2VQYWdlKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSwKICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkgewogICAgLy8gdGhpcy5nZXRPcmdUcmVlRGF0YSgpCiAgfSwKICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkgewogICAgdmFyIF90aGlzID0gdGhpczsKICAgIHRoaXMucHViU3ViID0gUHViU3ViLnN1YnNjcmliZSgnRWRpdEFkZFBhZ2UnLCBmdW5jdGlvbiAoXywgZGF0YSkgewogICAgICBpZiAoZGF0YS5pZCkgewogICAgICAgIF90aGlzLmlkID0gZGF0YS5pZDsKICAgICAgICBfdGhpcy5nZXREZXRhaWwoZGF0YS5pZCk7CiAgICAgIH0KICAgIH0pOwogICAgdGhpcy5nZXRSb2FkT3B0aW9ucygpOwogICAgdGhpcy5zZXROYXZCYXJXaWR0aCgpOwogICAgdGhpcy5zY3JvbGxUb05hdlN0eWxlKCk7CiAgICB0aGlzLiRidXMuJG9uKCdzeW5jaHJvbm91c0RhdGEnLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICBfdGhpcy50YWJDaGFuZ2UoJ2NvbnRyb2wnKTsKICAgIH0pOwogIH0sCiAgbWV0aG9kczogewogICAgaGFuZGxlTWVtb0NoYW5nZTogZnVuY3Rpb24gaGFuZGxlTWVtb0NoYW5nZShkYXRhKSB7CiAgICAgIGNvbnNvbGUubG9nKGRhdGEsICctLS0tLScpOwogICAgICBpZiAoZGF0YS5pc0FwcG9pbnQpIHsKICAgICAgICB0aGlzLmlzU2hvd0FwcG9pbnQgPSBmYWxzZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmlzU2hvd0FwcG9pbnQgPSB0cnVlOwogICAgICB9CiAgICAgIC8vIHJldHVybgogICAgICB2YXIgYmFzaWMgPSBkYXRhLmJhc2ljLAogICAgICAgIG1lYXN1cmUgPSBkYXRhLm1lYXN1cmUsCiAgICAgICAgY2FzdWFsdGllcyA9IGRhdGEuY2FzdWFsdGllczsKICAgICAgYmFzaWMgPyB0aGlzLmJhc2ljID0gYmFzaWMgOiAnJzsKICAgICAgbWVhc3VyZSA/IHRoaXMubWVhc3VyZSA9IG1lYXN1cmUgOiAnJzsKICAgICAgY2FzdWFsdGllcyA/IHRoaXMuY2FzdWFsdGllcyA9IGNhc3VhbHRpZXMgOiAnJzsKICAgICAgaWYgKCF0aGlzLnVzZXJDaGFuZ2VkKSB7CiAgICAgICAgdmFyIG1lbW9QYXJ0cyA9IFtdOwogICAgICAgIGlmICh0aGlzLmJhc2ljKSBtZW1vUGFydHMucHVzaCh0aGlzLmJhc2ljKTsKICAgICAgICBpZiAodGhpcy5tZWFzdXJlICYmIHRoaXMubWVhc3VyZSAhPT0gJ+aXoCcpIG1lbW9QYXJ0cy5wdXNoKHRoaXMubWVhc3VyZSk7CiAgICAgICAgaWYgKHRoaXMuY2FzdWFsdGllcykgbWVtb1BhcnRzLnB1c2godGhpcy5jYXN1YWx0aWVzKTsKICAgICAgICB2YXIgbWVtbyA9IG1lbW9QYXJ0cy5qb2luKCcsJykgKyAn44CCJzsKICAgICAgICB0aGlzLiRzZXQodGhpcy5hZGRFZGl0Rm9ybSwgJ21lbW8nLCBtZW1vKTsKICAgICAgfQogICAgfSwKICAgIGhhbmRsZVVzZXJDaGFuZ2VNZW1vOiBmdW5jdGlvbiBoYW5kbGVVc2VyQ2hhbmdlTWVtbygpIHsKICAgICAgdGhpcy51c2VyQ2hhbmdlZCA9IHRydWU7CiAgICB9LAogICAgLy8g6I635Y+WdGFiaXRlbeeahOWuveW6pgogICAgc2V0TmF2QmFyV2lkdGg6IGZ1bmN0aW9uIHNldE5hdkJhcldpZHRoKCkgewogICAgICB2YXIgdHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2Jhc2ljcyc7CiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgYWN0aXZlTmF2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiIuY29uY2F0KHR5cGUsICJOYXYiKSk7CiAgICAgICAgdmFyIGFjdGl2ZUJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3RpdmVCYXInKTsKICAgICAgICBhY3RpdmVCYXIuc3R5bGUud2lkdGggPSBhY3RpdmVOYXYub2Zmc2V0V2lkdGggKyAncHgnOwogICAgICAgIGFjdGl2ZUJhci5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWCgiLmNvbmNhdChhY3RpdmVOYXYub2Zmc2V0TGVmdCwgInB4KSIpOwogICAgICB9KTsKICAgIH0sCiAgICB0YWJDaGFuZ2U6IGZ1bmN0aW9uIHRhYkNoYW5nZSh0eXBlKSB7CiAgICAgIHRoaXMuc2V0TmF2QmFyV2lkdGgodHlwZSk7CiAgICAgIHZhciB0YXJnZXQgPSB0aGlzLiRyZWZzWyIiLmNvbmNhdCh0eXBlLCAiQ29udGVudCIpXS4kcmVmcy50YXJnZXRTZWN0aW9uOwogICAgICB0YXJnZXQuc2Nyb2xsSW50b1ZpZXcoewogICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJwogICAgICB9KTsKICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICB9LAogICAgLy8g5rua5Yqo6K6+572ubmF25qC35byPCiAgICBzY3JvbGxUb05hdlN0eWxlOiBmdW5jdGlvbiBzY3JvbGxUb05hdlN0eWxlKCkgewogICAgICB2YXIgX3RoaXMyID0gdGhpczsKICAgICAgdmFyIHRhcmdldCA9IHRoaXMuJHJlZnNbImJhc2ljc0NvbnRlbnQiXS4kcmVmcy50YXJnZXRTZWN0aW9uOwogICAgICB2YXIgdGFyZ2V0MSA9IHRoaXMuJHJlZnNbImNvbnRyb2xDb250ZW50Il0uJHJlZnMudGFyZ2V0U2VjdGlvbjsKICAgICAgdmFyIHRhcmdldDIgPSB0aGlzLiRyZWZzWyJqYW1Db250ZW50Il0uJHJlZnMudGFyZ2V0U2VjdGlvbjsKICAgICAgdmFyIGFyciA9IFt0YXJnZXQsIHRhcmdldDEsIHRhcmdldDJdOwogICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKGVudHJpZXMpIHsKICAgICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7CiAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHsKICAgICAgICAgICAgX3RoaXMyLmFjdGl2ZU5hbWUgPSBlbnRyeS50YXJnZXQuZGF0YXNldC5uYW1lOwogICAgICAgICAgICBfdGhpczIuc2V0TmF2QmFyV2lkdGgoZW50cnkudGFyZ2V0LmRhdGFzZXQubmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sIHsKICAgICAgICByb290OiBudWxsLAogICAgICAgIC8vIOm7mOiupOS4uuinhuWPowogICAgICAgIHJvb3RNYXJnaW46ICcwcHgnLAogICAgICAgIC8vIOagueWFg+e0oOeahOi+uei3nQogICAgICAgIHRocmVzaG9sZDogMC4zIC8vIOW9kyA1MCUg55qE5YWD57Sg6L+b5YWl6KeG5Y+j5pe26Kem5Y+RCiAgICAgIH0pOwogICAgICBvYnNlcnZlci5vYnNlcnZlKHRhcmdldCk7CiAgICAgIG9ic2VydmVyLm9ic2VydmUodGFyZ2V0MSk7CiAgICAgIG9ic2VydmVyLm9ic2VydmUodGFyZ2V0Mik7CiAgICB9LAogICAgZGljdGlvbmFyeUVzY2FwZTogZGljdGlvbmFyeUVzY2FwZSwKICAgIHNlbmRSZXNjdWVJbmZvOiBmdW5jdGlvbiBzZW5kUmVzY3VlSW5mbyhkYXRhKSB7CiAgICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgICB0aGlzLnRhYmxlRGF0YS5wdXNoKGRhdGEpOwogICAgfSwKICAgIGdldERpY3Rpb25hcnlCeUNvZGU6IGdldERpY3Rpb25hcnlCeUNvZGUsCiAgICAvLyDot6/mrrXmlbDmja7mn6Xor6IKICAgIGdldFJvYWRPcHRpb25zOiBmdW5jdGlvbiBnZXRSb2FkT3B0aW9ucygpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHsKICAgICAgICB2YXIgX3lpZWxkJHJvYWRTZWN0aW9uSW5mLCBfeWllbGQkcm9hZFNlY3Rpb25JbmYyLCByb3dzOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyOwogICAgICAgICAgICAgIHJldHVybiByb2FkU2VjdGlvbkluZm9JbnRlcih7CiAgICAgICAgICAgICAgICBwYWdlQmVhbjogewogICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogLTEKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIF95aWVsZCRyb2FkU2VjdGlvbkluZiA9IF9jb250ZXh0LnNlbnQ7CiAgICAgICAgICAgICAgX3lpZWxkJHJvYWRTZWN0aW9uSW5mMiA9IF95aWVsZCRyb2FkU2VjdGlvbkluZi5yb3dzOwogICAgICAgICAgICAgIHJvd3MgPSBfeWllbGQkcm9hZFNlY3Rpb25JbmYyID09PSB2b2lkIDAgPyBbXSA6IF95aWVsZCRyb2FkU2VjdGlvbkluZjI7CiAgICAgICAgICAgICAgY29uc29sZS5sb2cocm93cywgJ3Jvd3MnKTsKICAgICAgICAgICAgICBfdGhpczMucm9hZE9wdGlvbnMgPSByb3dzLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgaXRlbS5yb2FkTmFtZSA9IGl0ZW0ubmFtZSArICcgJyArIGl0ZW0uY29kZTsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVtOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGlmICghX3RoaXMzLmlkKSB7CiAgICAgICAgICAgICAgICBfdGhpczMuJHNldChfdGhpczMuYWRkRWRpdEZvcm0sICdyb2FkSWQnLCBfdGhpczMucm9hZE9wdGlvbnNbMF0uaWQpOwogICAgICAgICAgICAgICAgX3RoaXMzLnJvYWRDaGFuZ2UoX3RoaXMzLnJvYWRPcHRpb25zWzBdLmlkKTsKICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0VXNlckRhdGEodGhpcy5yb2FkT3B0aW9uc1swXS5vcmdJZCkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDot6/mrrXpgInmi6nlj5jljJYKICAgIHJvYWRDaGFuZ2U6IGZ1bmN0aW9uIHJvYWRDaGFuZ2UodmFsdWUpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoKSB7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF90aGlzNC5nZXRUZWFtRGF0YSh2YWx1ZSk7CiAgICAgICAgICAgICAgX3RoaXM0LmdldEluc3BlY3REYXRhKHZhbHVlKTsKICAgICAgICAgICAgICBfdGhpczQucm9hZEluZm8gPSBfdGhpczQucm9hZE9wdGlvbnMuZmluZChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IHZhbHVlOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIF90aGlzNC5hZGRFZGl0Rm9ybS5jcmVhdGVCeSA9ICcnOwogICAgICAgICAgICAgIC8vIHRhcmdldCAmJiB0YXJnZXQub3JnSWQgJiYgdGhpcy5nZXRVc2VyRGF0YSh0YXJnZXQub3JnSWQpIC8vICDojrflj5bmjpLnj63kv6Hmga8KICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUyKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgcmVnaXN0cmF0aW9uQ2hhbmdlOiBmdW5jdGlvbiByZWdpc3RyYXRpb25DaGFuZ2UoKSB7CiAgICAgIGlmICh0aGlzLnJvYWRJbmZvICYmIHRoaXMucm9hZEluZm8ub3JnSWQpIHsKICAgICAgICB0aGlzLmdldFVzZXJEYXRhKHRoaXMucm9hZEluZm8ub3JnSWQpOwogICAgICB9CiAgICB9LAogICAgZ2V0VXNlckRhdGE6IGZ1bmN0aW9uIGdldFVzZXJEYXRhKG9yZ0lkKSB7CiAgICAgIHZhciBfdGhpczUgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzKCkgewogICAgICAgIHZhciBxdWVyeSwgX3lpZWxkJGdldFNjaGVkdWxpbmdQLCBzdGF0ZSwgX3lpZWxkJGdldFNjaGVkdWxpbmdQMiwgdmFsdWU7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIHF1ZXJ5ID0gewogICAgICAgICAgICAgICAgb3JnSWQ6IG9yZ0lkCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDM7CiAgICAgICAgICAgICAgcmV0dXJuIGdldFNjaGVkdWxpbmdQZXJzb24ocXVlcnkpOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgX3lpZWxkJGdldFNjaGVkdWxpbmdQID0gX2NvbnRleHQzLnNlbnQ7CiAgICAgICAgICAgICAgc3RhdGUgPSBfeWllbGQkZ2V0U2NoZWR1bGluZ1Auc3RhdGU7CiAgICAgICAgICAgICAgX3lpZWxkJGdldFNjaGVkdWxpbmdQMiA9IF95aWVsZCRnZXRTY2hlZHVsaW5nUC52YWx1ZTsKICAgICAgICAgICAgICB2YWx1ZSA9IF95aWVsZCRnZXRTY2hlZHVsaW5nUDIgPT09IHZvaWQgMCA/IFtdIDogX3lpZWxkJGdldFNjaGVkdWxpbmdQMjsKICAgICAgICAgICAgICBpZiAoc3RhdGUpIHsKICAgICAgICAgICAgICAgIF90aGlzNS51c2VyT3B0aW9ucyA9IHZhbHVlOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfdGhpczUudXNlck9wdGlvbnMgPSBbXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKCFfdGhpczUudXNlck9wdGlvbnMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBfdGhpczUuJG1lc3NhZ2Uud2FybmluZygn5b2T5YmN5Yy65Z+f5LiL5rKh5pyJ5o6S54+t5Lq65ZGY77yM6K+35Li65b2T5YmN5Yy65Z+f5o6S54+t77yBJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlIDk6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTMpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5blt6Hmn6XmlZHmj7TpmJ/kvI3kv6Hmga8KICAgIGdldFRlYW1EYXRhOiBmdW5jdGlvbiBnZXRUZWFtRGF0YSh2YWx1ZSkgewogICAgICB2YXIgX3RoaXM2ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNCgpIHsKICAgICAgICB2YXIgX3lpZWxkJHRlYW1EYXRhLCBfeWllbGQkdGVhbURhdGEkcm93cywgcm93czsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ0LnByZXYgPSBfY29udGV4dDQubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAyOwogICAgICAgICAgICAgIHJldHVybiB0ZWFtRGF0YShyZWZpbmVSZXF1ZXN0Qm9keSh7CiAgICAgICAgICAgICAgICBxdWVyeXM6IFt7CiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0lOJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6ICdyLmlkXycsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdFUVVBTCcsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAndC50eXBlXycsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMicKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgfSksICdhZGRFZGl0Jyk7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBfeWllbGQkdGVhbURhdGEgPSBfY29udGV4dDQuc2VudDsKICAgICAgICAgICAgICBfeWllbGQkdGVhbURhdGEkcm93cyA9IF95aWVsZCR0ZWFtRGF0YS5yb3dzOwogICAgICAgICAgICAgIHJvd3MgPSBfeWllbGQkdGVhbURhdGEkcm93cyA9PT0gdm9pZCAwID8gW10gOiBfeWllbGQkdGVhbURhdGEkcm93czsKICAgICAgICAgICAgICBfdGhpczYudGVhbU9wdGlvbnMgPSByb3dzOwogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTQpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5blt6Hmn6XmlZHmj7TpmJ/kvI3kv6Hmga8KICAgIGdldEluc3BlY3REYXRhOiBmdW5jdGlvbiBnZXRJbnNwZWN0RGF0YSh2YWx1ZSkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNSgpIHsKICAgICAgICB2YXIgX3lpZWxkJHRlYW1EYXRhMiwgX3lpZWxkJHRlYW1EYXRhMiRyb3dzLCByb3dzOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNSQoX2NvbnRleHQ1KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDUucHJldiA9IF9jb250ZXh0NS5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDUubmV4dCA9IDI7CiAgICAgICAgICAgICAgcmV0dXJuIHRlYW1EYXRhKHJlZmluZVJlcXVlc3RCb2R5KHsKICAgICAgICAgICAgICAgIHF1ZXJ5czogW3sKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnSU4nLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJ3IuaWRfJywKICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0VRVUFMJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6ICd0LnR5cGVfJywKICAgICAgICAgICAgICAgICAgdmFsdWU6ICcxJwogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICB9KSwgJ2FkZEVkaXQnKTsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIF95aWVsZCR0ZWFtRGF0YTIgPSBfY29udGV4dDUuc2VudDsKICAgICAgICAgICAgICBfeWllbGQkdGVhbURhdGEyJHJvd3MgPSBfeWllbGQkdGVhbURhdGEyLnJvd3M7CiAgICAgICAgICAgICAgcm93cyA9IF95aWVsZCR0ZWFtRGF0YTIkcm93cyA9PT0gdm9pZCAwID8gW10gOiBfeWllbGQkdGVhbURhdGEyJHJvd3M7CiAgICAgICAgICAgICAgX3RoaXM3Lmluc3BlY3RPcHRpb25zID0gcm93czsKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU1KTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy8g6Zif5LyN6YCJ5oupCiAgICB0ZWFtSWRDaGFuZ2U6IGZ1bmN0aW9uIHRlYW1JZENoYW5nZSh0eXBlKSB7CiAgICAgIHZhciBfdGhpcyQkcmVmcywgX3RoaXMkJHJlZnMyOwogICAgICB0aGlzW3R5cGVdLnRlYW1GdWxsSWQgPSAoKF90aGlzJCRyZWZzID0gdGhpcy4kcmVmc1siIi5jb25jYXQodHlwZSwgIkNhc2NhZGVyIildKSA9PT0gbnVsbCB8fCBfdGhpcyQkcmVmcyA9PT0gdm9pZCAwIHx8IChfdGhpcyQkcmVmcyA9IF90aGlzJCRyZWZzLmdldENoZWNrZWROb2RlcygpWzBdKSA9PT0gbnVsbCB8fCBfdGhpcyQkcmVmcyA9PT0gdm9pZCAwIHx8IChfdGhpcyQkcmVmcyA9IF90aGlzJCRyZWZzLmRhdGEpID09PSBudWxsIHx8IF90aGlzJCRyZWZzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyQkcmVmcy5wYXRoKSB8fCAnJzsKICAgICAgdGhpc1t0eXBlXS50ZWFtSWQgPSAoKF90aGlzJCRyZWZzMiA9IHRoaXMuJHJlZnNbIiIuY29uY2F0KHR5cGUsICJDYXNjYWRlciIpXSkgPT09IG51bGwgfHwgX3RoaXMkJHJlZnMyID09PSB2b2lkIDAgfHwgKF90aGlzJCRyZWZzMiA9IF90aGlzJCRyZWZzMi5nZXRDaGVja2VkTm9kZXMoKVswXSkgPT09IG51bGwgfHwgX3RoaXMkJHJlZnMyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyQkcmVmczIudmFsdWUpIHx8ICcnOwogICAgfSwKICAgIC8vIOaJk+W8gOmhtemdouaJp+ihjAogICAgb3BlblBhZ2U6IGZ1bmN0aW9uIG9wZW5QYWdlKCkgewogICAgICB0aGlzLmdldFJvYWRPcHRpb25zKCk7CiAgICB9LAogICAgLy8g5bGV56S65by55bGCCiAgICBzaG93RGlhbG9nOiBmdW5jdGlvbiBzaG93RGlhbG9nKGRpYWxvZ05hbWUpIHsKICAgICAgaWYgKCFkaWFsb2dOYW1lKSByZXR1cm47CiAgICAgIHRoaXNbZGlhbG9nTmFtZSArICdEaWFsb2cnXSA9IHRydWU7CiAgICB9LAogICAgc2hvd0FwcG9pbnREaWFsb2c6IGZ1bmN0aW9uIHNob3dBcHBvaW50RGlhbG9nKCkgewogICAgICB2YXIgX3RoaXM4ID0gdGhpczsKICAgICAgdGhpcy5iYXNlSW5mbyA9IHRoaXMuJHJlZnMuYmFzaWNzQ29udGVudC5zZW5kQmFzZURhdGEoKTsKICAgICAgdGhpcy4kcmVmcy5hZGRFZGl0Rm9ybS52YWxpZGF0ZSgvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBfcmVmID0gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU2KHZhbGlkLCBvYmplY3QpIHsKICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNiQoX2NvbnRleHQ2KSB7CiAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Ni5wcmV2ID0gX2NvbnRleHQ2Lm5leHQpIHsKICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzOC4kbWVzc2FnZS53YXJuaW5nKCJcdTY3MDkiLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCArIChfdGhpczguYmFzZUluZm8uZmllbGROdW0gfHwgMCksICJcdTRFMkFcdTVCNTdcdTZCQjVcdTY3MkFcdTkwMUFcdThGQzdcdTY4MjFcdTlBOENcdUZGMENcdThCRjdcdTZCNjNcdTc4NkVcdTU4NkJcdTUxOTlcdTg4NjhcdTUzNTVcdTUxODVcdTVCQjlcdTMwMDIiKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBpZiAoX3RoaXM4LmJhc2VJbmZvLmZpZWxkTnVtKSB7CiAgICAgICAgICAgICAgICAgICAgX3RoaXM4LiRtZXNzYWdlLndhcm5pbmcoIlx1NjcwOSIuY29uY2F0KF90aGlzOC5iYXNlSW5mby5maWVsZE51bSwgIlx1NEUyQVx1NUI1N1x1NkJCNVx1NjcyQVx1OTAxQVx1OEZDN1x1NjgyMVx1OUE4Q1x1RkYwQ1x1OEJGN1x1NkI2M1x1Nzg2RVx1NTg2Qlx1NTE5OVx1ODg2OFx1NTM1NVx1NTE4NVx1NUJCOVx1MzAwMiIpKTsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBfdGhpczguYXBwb2ludERpYWxvZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDYuc3RvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlNik7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gsIF94MikgewogICAgICAgICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpOwogICAgfSwKICAgIG9mZlBhZ2U6IGZ1bmN0aW9uIG9mZlBhZ2UoKSB7CiAgICAgIHRoaXMuY2hhbmdlUGFnZSgnVGFibGVQYWdlJywgJ2VkaXQnKTsKICAgIH0sCiAgICAvLyDlhbPpl63pobXpnaLmiafooYwKICAgIGNsb3NlUGFnZTogZnVuY3Rpb24gY2xvc2VQYWdlKCkgewogICAgICB2YXIgX3RoaXM5ID0gdGhpczsKICAgICAgdmFyIHB1YlN1YiA9IHRoaXMucHViU3ViLAogICAgICAgIGFkZEVkaXRSdWxlcyA9IHRoaXMuYWRkRWRpdFJ1bGVzLAogICAgICAgIHJvYWRPcHRpb25zID0gdGhpcy5yb2FkT3B0aW9uczsKICAgICAgLy8g6YeN572u57uE5Lu25pWw5o2uCiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy4kZGF0YSwgdGhpcy4kb3B0aW9ucy5kYXRhLmNhbGwodGhpcyksIHsKICAgICAgICBwdWJTdWI6IHB1YlN1YiwKICAgICAgICBhZGRFZGl0UnVsZXM6IGFkZEVkaXRSdWxlcywKICAgICAgICByb2FkT3B0aW9uczogcm9hZE9wdGlvbnMKICAgICAgfSk7CiAgICAgIC8vIHRoaXMuJHJlZnMubWluZU1hcD8ucmVzZXRNYXAoXyA9PiB0aGlzLm1hcExvYWRpbmcgPSBmYWxzZSkgLy8g6YeN572u5Zyw5Zu+CiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7CiAgICAgICAgX3RoaXM5LiRyZWZzLmFkZEVkaXRGb3JtLiRlbC5zY3JvbGxUb3AgPSAwOwogICAgICAgIF90aGlzOS4kcmVmcy5hZGRFZGl0Rm9ybS5jbGVhclZhbGlkYXRlKCk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOiOt+WPluivpuaDhQogICAgZ2V0RGV0YWlsOiBmdW5jdGlvbiBnZXREZXRhaWwoaWQpIHsKICAgICAgdmFyIF90aGlzMTAgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU3KCkgewogICAgICAgIHZhciBfdGhpczEwJGFkZEVkaXRGb3JtLCBfdGhpczEwJGFkZEVkaXRGb3JtJHIsIHJvYWRJZCwgX3RoaXMxMCRhZGRFZGl0Rm9ybSRwLCBwZWdTVmFsLCBfdGhpczEwJGFkZEVkaXRGb3JtJHAyLCBwZWdFVmFsLCBzdGFydFBlZ0FyciwgZW5kUGVnQXJyOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNyQoX2NvbnRleHQ3KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDcucHJldiA9IF9jb250ZXh0Ny5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDcucHJldiA9IDA7CiAgICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSAzOwogICAgICAgICAgICAgIHJldHVybiB0YWJsZURldGFpbChpZCk7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICBfdGhpczEwLmFkZEVkaXRGb3JtID0gX2NvbnRleHQ3LnNlbnQ7CiAgICAgICAgICAgICAgX3RoaXMxMCRhZGRFZGl0Rm9ybSA9IF90aGlzMTAuYWRkRWRpdEZvcm0sIF90aGlzMTAkYWRkRWRpdEZvcm0kciA9IF90aGlzMTAkYWRkRWRpdEZvcm0ucm9hZElkLCByb2FkSWQgPSBfdGhpczEwJGFkZEVkaXRGb3JtJHIgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxMCRhZGRFZGl0Rm9ybSRyLCBfdGhpczEwJGFkZEVkaXRGb3JtJHAgPSBfdGhpczEwJGFkZEVkaXRGb3JtLnBlZ1NWYWwsIHBlZ1NWYWwgPSBfdGhpczEwJGFkZEVkaXRGb3JtJHAgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxMCRhZGRFZGl0Rm9ybSRwLCBfdGhpczEwJGFkZEVkaXRGb3JtJHAyID0gX3RoaXMxMCRhZGRFZGl0Rm9ybS5wZWdFVmFsLCBwZWdFVmFsID0gX3RoaXMxMCRhZGRFZGl0Rm9ybSRwMiA9PT0gdm9pZCAwID8gJycgOiBfdGhpczEwJGFkZEVkaXRGb3JtJHAyOwogICAgICAgICAgICAgIGlmIChwZWdTVmFsKSB7CiAgICAgICAgICAgICAgICBzdGFydFBlZ0FyciA9IHBlZ1NWYWwuc3BsaXQoJysnKTsKICAgICAgICAgICAgICAgIF90aGlzMTAuYWRkRWRpdEZvcm0uc3RhcnRQZWcgPSBzdGFydFBlZ0FyclswXS5zbGljZSgxKTsKICAgICAgICAgICAgICAgIF90aGlzMTAuYWRkRWRpdEZvcm0uc3RhcnRQZWdBZGQgPSBzdGFydFBlZ0FyclsxXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHBlZ0VWYWwpIHsKICAgICAgICAgICAgICAgIGVuZFBlZ0FyciA9IHBlZ0VWYWwuc3BsaXQoJysnKTsKICAgICAgICAgICAgICAgIF90aGlzMTAuYWRkRWRpdEZvcm0uZW5kUGVnID0gZW5kUGVnQXJyWzBdLnNsaWNlKDEpOwogICAgICAgICAgICAgICAgX3RoaXMxMC5hZGRFZGl0Rm9ybS5lbmRQZWdBZGQgPSBlbmRQZWdBcnJbMV07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF90aGlzMTAucm9hZENoYW5nZShyb2FkSWQpOwogICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgX2NvbnRleHQ3LnByZXYgPSA4OwogICAgICAgICAgICAgIF90aGlzMTAuZm9ybUxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LmZpbmlzaCg4KTsKICAgICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlNywgbnVsbCwgW1swLCwgOCwgMTFdXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOS/neWtmAogICAgaGFuZGxlU2F2ZTogZnVuY3Rpb24gaGFuZGxlU2F2ZSgpIHsKICAgICAgdmFyIF90aGlzMTEgPSB0aGlzOwogICAgICB2YXIgYmFzaWNlRGF0YSA9IHRoaXMuJHJlZnMuYmFzaWNzQ29udGVudC5zZW5kQmFzZURhdGEoKTsKICAgICAgY29uc29sZS5sb2coYmFzaWNlRGF0YSwgJ2Jhc2ljZURhdGEnKTsKICAgICAgdGhpcy4kcmVmcy5hZGRFZGl0Rm9ybS52YWxpZGF0ZSgvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBfcmVmMiA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlOCh2YWxpZCwgb2JqZWN0KSB7CiAgICAgICAgICB2YXIgZGF0YSwgbXlJbnRlckZhY2UsIF95aWVsZCRteUludGVyRmFjZSwgc3RhdGUsIG1lc3NhZ2UsIHZhbHVlOwogICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU4JChfY29udGV4dDgpIHsKICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ4LnByZXYgPSBfY29udGV4dDgubmV4dCkgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgICAgICAgICBfY29udGV4dDgubmV4dCA9IDQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX3RoaXMxMS4kbWVzc2FnZS53YXJuaW5nKCJcdTY3MDkiLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCArIChiYXNpY2VEYXRhLmZpZWxkTnVtIHx8IDApLCAiXHU0RTJBXHU1QjU3XHU2QkI1XHU2NzJBXHU5MDFBXHU4RkM3XHU2ODIxXHU5QThDXHVGRjBDXHU4QkY3XHU2QjYzXHU3ODZFXHU1ODZCXHU1MTk5XHU4ODY4XHU1MzU1XHU1MTg1XHU1QkI5XHUzMDAyIikpOwogICAgICAgICAgICAgICAgX2NvbnRleHQ4Lm5leHQgPSAyNDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgIGlmICghYmFzaWNlRGF0YS5maWVsZE51bSkgewogICAgICAgICAgICAgICAgICBfY29udGV4dDgubmV4dCA9IDg7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX3RoaXMxMS4kbWVzc2FnZS53YXJuaW5nKCJcdTY3MDkiLmNvbmNhdChiYXNpY2VEYXRhLmZpZWxkTnVtLCAiXHU0RTJBXHU1QjU3XHU2QkI1XHU2NzJBXHU5MDFBXHU4RkM3XHU2ODIxXHU5QThDXHVGRjBDXHU4QkY3XHU2QjYzXHU3ODZFXHU1ODZCXHU1MTk5XHU4ODY4XHU1MzU1XHU1MTg1XHU1QkI5XHUzMDAyIikpOwogICAgICAgICAgICAgICAgX2NvbnRleHQ4Lm5leHQgPSAyNDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgICAgIGlmICghX3RoaXMxMS5zYXZlTG9hZGluZykgewogICAgICAgICAgICAgICAgICBfY29udGV4dDgubmV4dCA9IDEwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDguYWJydXB0KCJyZXR1cm4iKTsKICAgICAgICAgICAgICBjYXNlIDEwOgogICAgICAgICAgICAgICAgX3RoaXMxMS5zYXZlTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShfdGhpczExLmFkZEVkaXRGb3JtKSk7CiAgICAgICAgICAgICAgICBteUludGVyRmFjZSA9IF90aGlzMTEuaWQgPyB0YWJsZUVkaXQgOiB0YWJsZUFkZDsKICAgICAgICAgICAgICAgIF9jb250ZXh0OC5wcmV2ID0gMTM7CiAgICAgICAgICAgICAgICBfY29udGV4dDgubmV4dCA9IDE2OwogICAgICAgICAgICAgICAgcmV0dXJuIG15SW50ZXJGYWNlKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZGF0YSksIGJhc2ljZURhdGEpKTsKICAgICAgICAgICAgICBjYXNlIDE2OgogICAgICAgICAgICAgICAgX3lpZWxkJG15SW50ZXJGYWNlID0gX2NvbnRleHQ4LnNlbnQ7CiAgICAgICAgICAgICAgICBzdGF0ZSA9IF95aWVsZCRteUludGVyRmFjZS5zdGF0ZTsKICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBfeWllbGQkbXlJbnRlckZhY2UubWVzc2FnZTsKICAgICAgICAgICAgICAgIHZhbHVlID0gX3lpZWxkJG15SW50ZXJGYWNlLnZhbHVlOwogICAgICAgICAgICAgICAgaWYgKHN0YXRlKSB7CiAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBfdGhpczExLmlkID8gJ+e8lui+kScgOiAn5paw5aKeJzsKICAgICAgICAgICAgICAgICAgX3RoaXMxMS4kbWVzc2FnZS5zdWNjZXNzKCJcdTRGRERcdTVCNThcdTYyMTBcdTUyOUYiKTsKICAgICAgICAgICAgICAgICAgX3RoaXMxMS4kcm91dGVyLnB1c2goewogICAgICAgICAgICAgICAgICAgIHBhdGg6ICcvcGxhdExheW91dC9wYXRyb2xBbmRSZXNjdWUvY29tbWFuZERpc3BhdGNoL0V2ZW50TWFuYWdlbWVudCcKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2FzZSAyMToKICAgICAgICAgICAgICAgIF9jb250ZXh0OC5wcmV2ID0gMjE7CiAgICAgICAgICAgICAgICBfdGhpczExLnNhdmVMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ4LmZpbmlzaCgyMSk7CiAgICAgICAgICAgICAgY2FzZSAyNDoKICAgICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0OC5zdG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIF9jYWxsZWU4LCBudWxsLCBbWzEzLCwgMjEsIDI0XV0pOwogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94MywgX3g0KSB7CiAgICAgICAgICByZXR1cm4gX3JlZjIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpOwogICAgfSwKICAgIGdldFRyYWZmaWNEYXRhOiBmdW5jdGlvbiBnZXRUcmFmZmljRGF0YShkYXRhKSB7CiAgICAgIHZhciBtZWFzdXJlOwogICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgY29uc29sZS5sb2coZGF0YSwgJ+S6pOmAmueuoeWItuaVsOaNricpOwogICAgICAgIHRoaXMuYWRkRWRpdEZvcm0udHJhZmZpY0NvbnRyb2xzID0gZGF0YTsKICAgICAgICB2YXIgY29udHJvbFRpbWUgPSBudWxsLAogICAgICAgICAgdHlwZUxpc3QgPSBbXTsKICAgICAgICB2YXIgc2luZ2xlVHlwZSA9IFsnMScsICczJywgJzUnXTsKICAgICAgICB2YXIgZ3pjcyA9IHRoaXMuZ2V0RGljdGlvbmFyeUJ5Q29kZSgnZ3pjcycpOwogICAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgaWYgKGl0ZW0uY29udHJvbFRpbWUpIHsKICAgICAgICAgICAgaWYgKGNvbnRyb2xUaW1lKSB7CiAgICAgICAgICAgICAgdmFyIHRlbXBUaW1lID0gbW9tZW50KGl0ZW0uY29udHJvbFRpbWUpOwogICAgICAgICAgICAgIGlmIChjb250cm9sVGltZS5pc0JlZm9yZSh0ZW1wVGltZSkpIHsKICAgICAgICAgICAgICAgIGNvbnRyb2xUaW1lID0gdGVtcFRpbWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnRyb2xUaW1lID0gbW9tZW50KGl0ZW0uY29udHJvbFRpbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaXRlbS5tZWFzdXJlVHlwZSkgewogICAgICAgICAgICBpZiAoc2luZ2xlVHlwZS5pbmNsdWRlcyhpdGVtLm1lYXN1cmVUeXBlKSkgewogICAgICAgICAgICAgIHZhciB0ZW1wVHlwZSA9IGRpY3Rpb25hcnlFc2NhcGUoJ2d6Y3MnLCBpdGVtLm1lYXN1cmVUeXBlKTsKICAgICAgICAgICAgICBpZiAoIXR5cGVMaXN0LmluY2x1ZGVzKHRlbXBUeXBlKSkgewogICAgICAgICAgICAgICAgdHlwZUxpc3QucHVzaCh0ZW1wVHlwZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ubWVhc3VyZUNvbnRlbnQpIHsKICAgICAgICAgICAgICB2YXIgdGFyZ2V0U3ViRGljdCA9IGd6Y3MuZmluZChmdW5jdGlvbiAoZGljdCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRpY3QudmFsdWUgPT09IGl0ZW0ubWVhc3VyZVR5cGU7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgdmFyIGd6Y3N4cU9wdGlvbnMgPSB0YXJnZXRTdWJEaWN0ICYmIHRhcmdldFN1YkRpY3QubG93ZXJEaWMgPyB0YXJnZXRTdWJEaWN0Lmxvd2VyRGljLmd6Y3N4cSA6IFtdOwogICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZUNvbnRlbnQuc3BsaXQoJywnKS5mb3JFYWNoKGZ1bmN0aW9uIChjb250ZW50KSB7CiAgICAgICAgICAgICAgICB2YXIgdGVtcFR5cGUgPSBnemNzeHFPcHRpb25zLmZpbmQoZnVuY3Rpb24gKGRpY3QpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3QudmFsdWUgPT09IGNvbnRlbnQ7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGlmICh0ZW1wVHlwZSAmJiAhdHlwZUxpc3QuaW5jbHVkZXModGVtcFR5cGUubmFtZSkpIHsKICAgICAgICAgICAgICAgICAgdHlwZUxpc3QucHVzaCh0ZW1wVHlwZS5uYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHZhciBmb3JtYXR0ZWRDb250cm9sVGltZSA9IGNvbnRyb2xUaW1lID8gIlx1RkYwQ1x1OTg4NFx1OEJBMSIuY29uY2F0KGNvbnRyb2xUaW1lLmZvcm1hdCgnTeaciETml6VISOaXtm1t5YiGJyksICJcdTYwNjJcdTU5MERcdTZCNjNcdTVFMzgiKSA6ICcnOwogICAgICAgIG1lYXN1cmUgPSAodHlwZUxpc3QubGVuZ3RoID8gdHlwZUxpc3Quam9pbign44CBJykgOiAnJykgKyBmb3JtYXR0ZWRDb250cm9sVGltZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtZWFzdXJlID0gJ+aXoCc7CiAgICAgIH0KICAgICAgdGhpcy5oYW5kbGVNZW1vQ2hhbmdlKHsKICAgICAgICBtZWFzdXJlOiBtZWFzdXJlCiAgICAgIH0pOwogICAgfSwKICAgIGdldEphbURhdGE6IGZ1bmN0aW9uIGdldEphbURhdGEoZGF0YSkgewogICAgICB2YXIgbWVhc3VyZTsKICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnNvbGUubG9nKGRhdGEsICfkuqTpgJrmi6XloLUnKTsKICAgICAgICB0aGlzLmFkZEVkaXRGb3JtLnRyYWZmaWNDb25nZXN0aW9ucyA9IGRhdGE7CiAgICAgICAgdmFyIGNvbnRyb2xUaW1lID0gbnVsbCwKICAgICAgICAgIHR5cGVMaXN0ID0gW107CiAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICBpZiAoaXRlbS5jb250cm9sVGltZSkgewogICAgICAgICAgICBpZiAoY29udHJvbFRpbWUpIHsKICAgICAgICAgICAgICB2YXIgdGVtcFRpbWUgPSBtb21lbnQoaXRlbS5jb250cm9sVGltZSk7CiAgICAgICAgICAgICAgaWYgKGNvbnRyb2xUaW1lLmlzQmVmb3JlKHRlbXBUaW1lKSkgewogICAgICAgICAgICAgICAgY29udHJvbFRpbWUgPSB0ZW1wVGltZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29udHJvbFRpbWUgPSBtb21lbnQoaXRlbS5jb250cm9sVGltZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChpdGVtLm1lYXN1cmUpIHsKICAgICAgICAgICAgdmFyIHRlbXBUeXBlID0gZGljdGlvbmFyeUVzY2FwZSgnY3pjcycsIGl0ZW0ubWVhc3VyZSk7CiAgICAgICAgICAgIGlmICghdHlwZUxpc3QuaW5jbHVkZXModGVtcFR5cGUpKSB7CiAgICAgICAgICAgICAgdHlwZUxpc3QucHVzaCh0ZW1wVHlwZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB2YXIgZm9ybWF0dGVkQ29udHJvbFRpbWUgPSBjb250cm9sVGltZSA/ICJcdUZGMENcdTk4ODRcdThCQTEiLmNvbmNhdChjb250cm9sVGltZS5mb3JtYXQoJ03mnIhE5pelSEjml7ZtbeWIhicpLCAiXHU2MDYyXHU1OTBEXHU2QjYzXHU1RTM4IikgOiAnJzsKICAgICAgICBtZWFzdXJlID0gKHR5cGVMaXN0Lmxlbmd0aCA/IHR5cGVMaXN0LmpvaW4oJ+OAgScpIDogJycpICsgZm9ybWF0dGVkQ29udHJvbFRpbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWVhc3VyZSA9ICfml6AnOwogICAgICB9CiAgICAgIHRoaXMuaGFuZGxlTWVtb0NoYW5nZSh7CiAgICAgICAgbWVhc3VyZTogbWVhc3VyZQogICAgICB9KTsKICAgIH0sCiAgICBoYW5kbGVQYWdlOiBmdW5jdGlvbiBoYW5kbGVQYWdlKCkgewogICAgICAvLyB0aGlzLiRyb3V0ZXIucHVzaCh7CiAgICAgIC8vICAgbmFtZTogJ3NoaWZ0SW5mb3JtYXRpb25NYW5hZ2VtZW50JwogICAgICAvLyB9KQogICAgICB0aGlzLnNjaGVkdWxpbmdEaWFsb2cgPSB0cnVlOwogICAgfSwKICAgIC8vIOaUueWPmOmhtemdogogICAgY2hhbmdlUGFnZTogZnVuY3Rpb24gY2hhbmdlUGFnZSgpIHsKICAgICAgdmFyIHBhZ2VOYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJzsKICAgICAgdmFyIHR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnOwogICAgICBpZiAoIXBhZ2VOYW1lKSByZXR1cm47CiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZVBhZ2UnLCBwYWdlTmFtZSwgZnVuY3Rpb24gKF8pIHsKICAgICAgICBQdWJTdWIucHVibGlzaChwYWdlTmFtZSwgewogICAgICAgICAgdHlwZTogdHlwZQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0KICB9LAogIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7CiAgICAvLyDlnKjnu4Tku7bplIDmr4HkuYvliY0g5riF6Zmk6K6i6ZiF5raI5oGvCiAgICBQdWJTdWIudW5zdWJzY3JpYmUodGhpcy5wdWJTdWIpOwogIH0KfTs="},null]}