{"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\\EventManagement\\components\\DetailPage\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\commandDispatch\\EventManagement\\components\\DetailPage\\index.vue","mtime":1755252406125},{"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:aW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9yZWdlbmVyYXRvclJ1bnRpbWUuanMiOwppbXBvcnQgX2FzeW5jVG9HZW5lcmF0b3IgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZpbmQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5zb21lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCB7IHJlZmluZVJlcXVlc3RCb2R5IH0gZnJvbSAnQC91dGlscy9yZXF1ZXN0V3JhcHBlcnMnOwppbXBvcnQgeyBkaWN0aW9uYXJ5RXNjYXBlLCBnZXREaWN0aW9uYXJ5QnlDb2RlIH0gZnJvbSAnQC91dGlscy9kaWN0aW9uYXJ5JzsKaW1wb3J0IHsgZGVyZWd1bGF0aW9uLCBldmVudENvbXBsZXRlZCwgdGFibGVEZXRhaWwsIHRhYmxlRWRpdCB9IGZyb20gJ0AvYXBpL3BhdHJvbEFuZFJlc2N1ZS9jb21tYW5kRGlzcGF0Y2gvZXZlbnRNYW5hZ2VtZW50JzsKaW1wb3J0IFB1YlN1YiBmcm9tICdwdWJzdWItanMnOwppbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7CmltcG9ydCBCYXNpY3NJbmZvIGZyb20gJy4uL0Jhc2ljc0luZm8nOwppbXBvcnQgeyB0YWJsZURhdGEgYXMgcm9hZFNlY3Rpb25JbmZvSW50ZXIgfSBmcm9tICdAL2FwaS9wYXRyb2xBbmRSZXNjdWUvaW5mb01nbXRQYXRyb2xzUmVzY3Vlcy9yb2FkU2VjdGlvbkluZm8nOwppbXBvcnQgeyB0YWJsZURhdGEgYXMgYWxvbmdSb3V0ZUluZm9JbnRlciB9IGZyb20gJ0AvYXBpL3BhdHJvbEFuZFJlc2N1ZS9pbmZvTWdtdFBhdHJvbHNSZXNjdWVzL2Fsb25nUm91dGVJbmZvJzsKaW1wb3J0IHsgdGFibGVEYXRhIGFzIHRlYW1EYXRhIH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2luZm9NZ210UGF0cm9sc1Jlc2N1ZXMvcGF0cm9sQW5kUmVzY3VlVGVhbXNNZ210JzsKaW1wb3J0IEFwcG9pbnREaWFsb2cgZnJvbSAnLi4vQXBwb2ludERpYWxvZyc7CmltcG9ydCBkaXNwb3NhbFByb2Nlc3MgZnJvbSAnLi4vRGlzcG9zYWxQcm9jZXNzJzsKaW1wb3J0IHsgY29tcGVuc2F0aW9uQWRkLCBjb21wZW5zYXRpb25EZWxldGUsIGNvbXBlbnNhdGlvbkVkaXQsIHJlc2N1ZUZlZURlbGV0ZSwgdHJhZmZpY0NvbnRyb2xEZWxldGUsIHRyYWZmaWNKYW1EZWxldGUsIHRyYWZmaWNKYW1FZGl0IH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2NvbW1hbmREaXNwYXRjaC9ldmVudE1hbmFnZW1lbnQvZXZlbnRFZGl0JzsKaW1wb3J0IERldGFpbGVkTGlzdEdpYWxvZyBmcm9tICdAL3ZpZXdzL3BhdHJvbEFuZFJlc2N1ZS9yb2FkRGFtYWdlQ29tcC9Sb2FkRGFtYWdlUmVnaXN0ZXIvY29tcG9uZW50cy9FZGl0QWRkUGFnZS9jb21wb25lbnRzL0RldGFpbGVkTGlzdEdpYWxvZyc7IC8vIOi1lOWBv+a4heWNleW8ueeqlwppbXBvcnQgcmVzY3VlQ29zdERpYWxvZyBmcm9tICcuL3Jlc2N1ZUNvc3REaWFsb2cvaW5kZXgudnVlJzsgLy8g5pWR5o+06LS555So5L+h5oGv5by556qXCmltcG9ydCB0cmFmZmljQ29udHJvbERpYWxvZyBmcm9tICcuL3RyYWZmaWNDb250cm9sRGlhbG9nL2luZGV4LnZ1ZSc7IC8vIOaLpeWgteWIl+ihqOW8ueeqlwppbXBvcnQgVHJhZmZpY0phbURpYWxvZyBmcm9tICcuL3RyYWZmaWNKYW1EaWFsb2cvaW5kZXgudnVlJzsKaW1wb3J0IFNhdmVEZXRhaWxEaWFsb2cgZnJvbSAnQC92aWV3cy9wYXRyb2xBbmRSZXNjdWUvY29tbWFuZERpc3BhdGNoL0V2ZW50SW5xdWlyeS9jb21wb25lbnRzL1NhdmVEZXRhaWxEaWFsb2cvaW5kZXgudnVlJzsgLy8g5oul5aC15YiX6KGo5by556qXCmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAnRGV0YWlsUGFnZScsCiAgcHJvcHM6IHsKICAgIGNvbXBvbmVudE5hbWU6IHsKICAgICAgZGVmYXVsdDogJ1RhYmxlUGFnZScsCiAgICAgIHR5cGU6IFN0cmluZwogICAgfQogIH0sCiAgY29tcG9uZW50czogewogICAgU2F2ZURldGFpbERpYWxvZzogU2F2ZURldGFpbERpYWxvZywKICAgIEJhc2ljc0luZm86IEJhc2ljc0luZm8sCiAgICBBcHBvaW50RGlhbG9nOiBBcHBvaW50RGlhbG9nLAogICAgZGlzcG9zYWxQcm9jZXNzOiBkaXNwb3NhbFByb2Nlc3MsCiAgICBEZXRhaWxlZExpc3RHaWFsb2c6IERldGFpbGVkTGlzdEdpYWxvZywKICAgIHJlc2N1ZUNvc3REaWFsb2c6IHJlc2N1ZUNvc3REaWFsb2csCiAgICBUcmFmZmljSmFtRGlhbG9nOiBUcmFmZmljSmFtRGlhbG9nLAogICAgdHJhZmZpY0NvbnRyb2xEaWFsb2c6IHRyYWZmaWNDb250cm9sRGlhbG9nCiAgfSwKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgYXBwb2ludERpYWxvZzogZmFsc2UsCiAgICAgIGVkaXRTYXZlTG9hZGluZzogZmFsc2UsCiAgICAgIHBhZ2VUeXBlOiAnZWRpdCcsCiAgICAgIGRldGFpbEZvcm06IHt9LAogICAgICBwdWJTdWI6IG51bGwsCiAgICAgIGV2ZW50U3RhdHVzOiAwLAogICAgICBjb25maXJtTG9hZGluZzogZmFsc2UsCiAgICAgIHJldmVyc2U6IHRydWUsCiAgICAgIG1hcDogbnVsbCwKICAgICAgbWFwTG9hZGluZzogdHJ1ZSwKICAgICAgbWFwRGVmYXVsdE9wdGlvbnM6IHsKICAgICAgICBjZW50ZXI6IFsxMDYuNTUwNywgMjkuNTY0N10gLyrlnLDlm77kuK3lv4PngrkqLywKICAgICAgICB6b29tOiA5IC8q5Zyw5Zu+6buY6K6k57yp5pS+562J57qnKi8KICAgICAgfSwKICAgICAgZXZlbnRHcmFkZU9wdGlvbnM6IFsKICAgICAgLy/kuovku7bnrYnnuqcKICAgICAgewogICAgICAgIGxhYmVsOiAnMee6pycsCiAgICAgICAgdmFsdWU6IDEKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAnMue6pycsCiAgICAgICAgdmFsdWU6IDIKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAnM+e6pycsCiAgICAgICAgdmFsdWU6IDMKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAnNOe6pycsCiAgICAgICAgdmFsdWU6IDQKICAgICAgfV0sCiAgICAgIG1hcmtlcnM6IFtdLAogICAgICByb2FkT3B0aW9uczogW10sCiAgICAgIGFsb25nUm91dGVJbmZvRGF0YTogW10sCiAgICAgIHRlYW1PcHRpb25zOiBbXSwKICAgICAgZWRpdERpYWxvZzogZmFsc2UsCiAgICAgIGV2ZW50VHlwZTogJycsCiAgICAgIGJhc2VJbmZvOiB7fSwKICAgICAgZGlzcG9zYWxQcm9jZXNzOiBmYWxzZSwKICAgICAgY29tcGVuc2F0ZURpYWxvZzogZmFsc2UsCiAgICAgIC8vIOi1lOWBv+a4heWNleW8ueeqlwogICAgICBjb21wZW5zYXRlRGlhbG9nRGV0YWlsOiB7fSwKICAgICAgcmVzY3VlRGlhbG9nOiBmYWxzZSwKICAgICAgLy8g5pWR5o+06LS555So5L+h5oGv5by556qXCiAgICAgIHJlc2N1ZURpYWxvZ0RldGFpbDoge30sCiAgICAgIGNvbnRyb2xEaWFsb2c6IGZhbHNlLAogICAgICAvLyDnrqHliLbliJfooajlvLnnqpcKICAgICAgY29udHJvbERpYWxvZ0RldGFpbDoge30sCiAgICAgIHRyYWZmaWNKYW1EaWFsb2c6IGZhbHNlLAogICAgICAvLyDmi6XloLXliJfooajlvLnnqpcKICAgICAgdHJhZmZpY0phbURpYWxvZ0RldGFpbDoge30sCiAgICAgIHJlbGVhc2VUaW1lTWFwOiB7fSwKICAgICAgamllY2h1VGltZU1hcDoge30sCiAgICAgIFNhdmVEZXRhaWxEaWFsb2c6IGZhbHNlLAogICAgICBzYXZlRGV0YWlsRm9ybToge30sCiAgICAgIGluc3BlY3RPcHRpb25zOiBbXSwKICAgICAgcG9wb3ZlclZpc2libGVNYXA6IHt9LAogICAgICBkaXNhYmxlU2hvdzogdHJ1ZQogICAgfTsKICB9LAogIGNvbXB1dGVkOiB7fSwKICB3YXRjaDogewogICAgY29tcG9uZW50TmFtZTogewogICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKG5ld1ZhbCkgewogICAgICAgIGlmIChuZXdWYWwgPT09IHRoaXMuJG9wdGlvbnMubmFtZSkgewogICAgICAgICAgdGhpcy5vcGVuUGFnZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmNsb3NlUGFnZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHsKICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICB0aGlzLnB1YlN1YiA9IFB1YlN1Yi5zdWJzY3JpYmUoJ0RldGFpbFBhZ2UnLCBmdW5jdGlvbiAoXywgZGF0YSkgewogICAgICBpZiAoZGF0YS5pZCkgewogICAgICAgIF90aGlzLmV2ZW50U3RhdHVzID0gZGF0YS5zdGF0dXM7CiAgICAgICAgX3RoaXMuZ2V0RGV0YWlsKGRhdGEuaWQpOwogICAgICB9CiAgICAgIF90aGlzLmdldFJvYWRPcHRpb25zKCk7CiAgICB9KTsKICB9LAogIG1ldGhvZHM6IHsKICAgIGluaXRKaWVjaHVUaW1lOiBmdW5jdGlvbiBpbml0SmllY2h1VGltZShyb3cpIHsKICAgICAgaWYgKCF0aGlzLmppZWNodVRpbWVNYXBbcm93LmlkXSkgewogICAgICAgIHRoaXMuJHNldCh0aGlzLmppZWNodVRpbWVNYXAsIHJvdy5pZCwgbW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJykpOwogICAgICB9CiAgICB9LAogICAgaW5pdFJlbGVhc2VUaW1lOiBmdW5jdGlvbiBpbml0UmVsZWFzZVRpbWUocm93KSB7CiAgICAgIGlmICghdGhpcy5yZWxlYXNlVGltZU1hcFtyb3cuaWRdKSB7CiAgICAgICAgdGhpcy4kc2V0KHRoaXMucmVsZWFzZVRpbWVNYXAsIHJvdy5pZCwgbW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJykpOwogICAgICB9CiAgICB9LAogICAgaGFuZGxlUmVsZWFzZVRpbWVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVJlbGVhc2VUaW1lQ2hhbmdlKHJvdykgewogICAgICBpZiAocm93LnN0YXJ0VGltZSA+IHRoaXMucmVsZWFzZVRpbWVNYXBbcm93LmlkXSkgewogICAgICAgIHRoaXMuJHNldCh0aGlzLnJlbGVhc2VUaW1lTWFwLCByb3cuaWQsICcnKTsKICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCfmi6XloLXop6PpmaTml7bpl7Tlv4XpobvlnKjmi6XloLXlvIDlp4vml7bpl7TkuYvlkI7vvIEnKTsKICAgICAgfQogICAgICB0aGlzLiRzZXQodGhpcy5wb3BvdmVyVmlzaWJsZU1hcCwgcm93LmlkLCB0cnVlKTsKICAgIH0sCiAgICBoYW5kbGVEYXRlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVEYXRlQ2hhbmdlKHJvdykgewogICAgICBpZiAocm93LnN0YXJ0VGltZSA+IHRoaXMuamllY2h1VGltZU1hcFtyb3cuaWRdKSB7CiAgICAgICAgdGhpcy4kc2V0KHRoaXMuamllY2h1VGltZU1hcCwgcm93LmlkLCAnJyk7CiAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcign566h5Yi26Kej6Zmk5pe26Ze05b+F6aG75Zyo566h5Yi25byA5aeL5pe26Ze05LmL5ZCO77yBJyk7CiAgICAgIH0KICAgICAgdGhpcy4kc2V0KHRoaXMucG9wb3ZlclZpc2libGVNYXAsIHJvdy5pZCwgdHJ1ZSk7CiAgICB9LAogICAgZGljdGlvbkNoYW5nZTogZnVuY3Rpb24gZGljdGlvbkNoYW5nZSh2YWx1ZSwgZXZlbnRQbGFjZSkgewogICAgICB2YXIgX3BsYWNlSXRlbSRsb3dlckRpYzsKICAgICAgaWYgKCF2YWx1ZSB8fCAhZXZlbnRQbGFjZSkgcmV0dXJuICctJzsKICAgICAgdmFyIHBsYWNlSXRlbSA9IHRoaXMuZ2V0RGljdGlvbmFyeUJ5Q29kZSgnc2pmc3F5JykuZmluZChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIHJldHVybiBpdGVtLnZhbHVlID09PSBldmVudFBsYWNlOwogICAgICB9KTsKICAgICAgaWYgKCEocGxhY2VJdGVtICE9PSBudWxsICYmIHBsYWNlSXRlbSAhPT0gdm9pZCAwICYmIChfcGxhY2VJdGVtJGxvd2VyRGljID0gcGxhY2VJdGVtLmxvd2VyRGljKSAhPT0gbnVsbCAmJiBfcGxhY2VJdGVtJGxvd2VyRGljICE9PSB2b2lkIDAgJiYgX3BsYWNlSXRlbSRsb3dlckRpY1snanRnei1meCddKSkgcmV0dXJuICctJzsKICAgICAgdmFyIG1hdGNoZWRJdGVtID0gcGxhY2VJdGVtLmxvd2VyRGljWydqdGd6LWZ4J10uZmluZChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIHJldHVybiBpdGVtLnZhbHVlID09PSB2YWx1ZTsKICAgICAgfSk7CiAgICAgIHJldHVybiAobWF0Y2hlZEl0ZW0gPT09IG51bGwgfHwgbWF0Y2hlZEl0ZW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1hdGNoZWRJdGVtLm5hbWUpIHx8ICctJzsKCiAgICAgIC8vIGlmICh2YWx1ZSAmJiBldmVudFBsYWNlKSB7CiAgICAgIC8vICAgbGV0IGRhdGEgPSB0aGlzLmdldERpY3Rpb25hcnlCeUNvZGUoJ3NqZnNxeScpCiAgICAgIC8vICAgbGV0IGFycmF5ID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnZhbHVlID09PSBldmVudFBsYWNlKVswXS5sb3dlckRpY1snanRnei1meCddCiAgICAgIC8vICAgcmV0dXJuIGFycmF5LmZpbHRlcihpdGVtID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKVswXS5uYW1lCiAgICAgIC8vIH0gZWxzZSB7CiAgICAgIC8vICAgcmV0dXJuICctJwogICAgICAvLyB9CiAgICB9LAogICAgcmVzY3VlSW5jaWRlbnRzOiBmdW5jdGlvbiByZXNjdWVJbmNpZGVudHMocm93KSB7CiAgICAgIHRoaXMuU2F2ZURldGFpbERpYWxvZyA9IHRydWU7CiAgICAgIHRoaXMuc2F2ZURldGFpbEZvcm0gPSByb3c7CiAgICB9LAogICAgaGFuZGxlQWRkOiBmdW5jdGlvbiBoYW5kbGVBZGQodHlwZSkgewogICAgICBpZiAodGhpcy5wYWdlVHlwZSA9PT0gJ2VkaXQnKSB7CiAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wZW5zYXRlRGlhbG9nJyAmJiB0aGlzLmRldGFpbEZvcm0uY29tcGVuc2F0aW9uSW5mbykgewogICAgICAgICAgdGhpc1t0eXBlXSA9IHRydWU7CiAgICAgICAgICB0aGlzW3R5cGUgKyAnRGV0YWlsJ10gPSB7CiAgICAgICAgICAgIGV2ZW50SWQ6IHRoaXMuZGV0YWlsRm9ybS5pZCwKICAgICAgICAgICAgcm9hZElkOiB0aGlzLmRldGFpbEZvcm0ucm9hZElkCiAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvbXBlbnNhdGVEaWFsb2cnICYmICF0aGlzLmRldGFpbEZvcm0uY29tcGVuc2F0aW9uSW5mbykgewogICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goewogICAgICAgICAgICBuYW1lOiAncm9hZERhbWFnZVJlZ2lzdGVyJwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlICE9PSAnY29tcGVuc2F0ZURpYWxvZycpIHsKICAgICAgICAgIHRoaXNbdHlwZV0gPSB0cnVlOwogICAgICAgICAgdGhpc1t0eXBlICsgJ0RldGFpbCddID0gewogICAgICAgICAgICBldmVudElkOiB0aGlzLmRldGFpbEZvcm0uaWQsCiAgICAgICAgICAgIHJvYWRJZDogdGhpcy5kZXRhaWxGb3JtLnJvYWRJZAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7flhYjkv53lrZjlvZPliY3nvJbovpHnmoTkuovku7bln7rnoYDkv6Hmga8nKTsKICAgICAgfQogICAgfSwKICAgIHNhdmVDb21wZW5zYXRpb246IGZ1bmN0aW9uIHNhdmVDb21wZW5zYXRpb24oZGF0YSkgewogICAgICB2YXIgX3RoaXMyID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlKCkgewogICAgICAgIHZhciBfdGhpczIkY29tcGVuc2F0ZURpYWwsIGlkLCB1bml0LCBwcmljZSwgcHJvcGVydHlTdWJqZWN0SWQsIHByb3BlcnR5U3ViamVjdE5hbWUsIHByb3BlcnR5U3ViamVjdFR5cGUsIHByb3BlcnR5VHlwZUlkLCB0b3RsZSwgbnVtLCBtZW1vLCBtb2RsZSwgY29tcGVuc2F0aW9uSWQsIHBhcmFtcywgQVBJLCB0eXBlLCBfeWllbGQkQVBJLCBzdGF0ZSwgbWVzc2FnZTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfdGhpczIuY29tcGVuc2F0ZURpYWxvZ0RldGFpbCA9IGRhdGE7CiAgICAgICAgICAgICAgX3RoaXMyLmNvbXBlbnNhdGVEaWFsb2cgPSBmYWxzZTsKICAgICAgICAgICAgICBfdGhpczIkY29tcGVuc2F0ZURpYWwgPSBfdGhpczIuY29tcGVuc2F0ZURpYWxvZ0RldGFpbCwgaWQgPSBfdGhpczIkY29tcGVuc2F0ZURpYWwuaWQsIHVuaXQgPSBfdGhpczIkY29tcGVuc2F0ZURpYWwudW5pdCwgcHJpY2UgPSBfdGhpczIkY29tcGVuc2F0ZURpYWwucHJpY2UsIHByb3BlcnR5U3ViamVjdElkID0gX3RoaXMyJGNvbXBlbnNhdGVEaWFsLnByb3BlcnR5U3ViamVjdElkLCBwcm9wZXJ0eVN1YmplY3ROYW1lID0gX3RoaXMyJGNvbXBlbnNhdGVEaWFsLnByb3BlcnR5U3ViamVjdE5hbWUsIHByb3BlcnR5U3ViamVjdFR5cGUgPSBfdGhpczIkY29tcGVuc2F0ZURpYWwucHJvcGVydHlTdWJqZWN0VHlwZSwgcHJvcGVydHlUeXBlSWQgPSBfdGhpczIkY29tcGVuc2F0ZURpYWwucHJvcGVydHlUeXBlSWQsIHRvdGxlID0gX3RoaXMyJGNvbXBlbnNhdGVEaWFsLnRvdGxlLCBudW0gPSBfdGhpczIkY29tcGVuc2F0ZURpYWwubnVtLCBtZW1vID0gX3RoaXMyJGNvbXBlbnNhdGVEaWFsLm1lbW8sIG1vZGxlID0gX3RoaXMyJGNvbXBlbnNhdGVEaWFsLm1vZGxlLCBjb21wZW5zYXRpb25JZCA9IF90aGlzMiRjb21wZW5zYXRlRGlhbC5jb21wZW5zYXRpb25JZDsKICAgICAgICAgICAgICBwYXJhbXMgPSB7CiAgICAgICAgICAgICAgICBpZDogaWQsCiAgICAgICAgICAgICAgICB1bml0OiB1bml0LAogICAgICAgICAgICAgICAgcHJpY2U6IHByaWNlLAogICAgICAgICAgICAgICAgcHJvcGVydHlTdWJqZWN0SWQ6IHByb3BlcnR5U3ViamVjdElkLAogICAgICAgICAgICAgICAgcHJvcGVydHlTdWJqZWN0TmFtZTogcHJvcGVydHlTdWJqZWN0TmFtZSwKICAgICAgICAgICAgICAgIHByb3BlcnR5U3ViamVjdFR5cGU6IHByb3BlcnR5U3ViamVjdFR5cGUsCiAgICAgICAgICAgICAgICBwcm9wZXJ0eVR5cGVJZDogcHJvcGVydHlUeXBlSWQsCiAgICAgICAgICAgICAgICB0b3RsZTogdG90bGUsCiAgICAgICAgICAgICAgICBudW06IG51bSwKICAgICAgICAgICAgICAgIG1lbW86IG1lbW8sCiAgICAgICAgICAgICAgICBtb2RsZTogbW9kbGUsCiAgICAgICAgICAgICAgICBldmVudElkOiBfdGhpczIuZGV0YWlsRm9ybS5pZCwKICAgICAgICAgICAgICAgIGNvbXBlbnNhdGlvbklkOiBfdGhpczIuZGV0YWlsRm9ybS5jb21wZW5zYXRpb25JbmZvLmlkCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBfY29udGV4dC5wcmV2ID0gNDsKICAgICAgICAgICAgICBBUEkgPSBkYXRhLmlkID8gY29tcGVuc2F0aW9uRWRpdCA6IGNvbXBlbnNhdGlvbkFkZDsKICAgICAgICAgICAgICB0eXBlID0gZGF0YS5pZCA/ICfnvJbovpEnIDogJ+aWsOWinic7CiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDk7CiAgICAgICAgICAgICAgcmV0dXJuIEFQSShwYXJhbXMpOwogICAgICAgICAgICBjYXNlIDk6CiAgICAgICAgICAgICAgX3lpZWxkJEFQSSA9IF9jb250ZXh0LnNlbnQ7CiAgICAgICAgICAgICAgc3RhdGUgPSBfeWllbGQkQVBJLnN0YXRlOwogICAgICAgICAgICAgIG1lc3NhZ2UgPSBfeWllbGQkQVBJLm1lc3NhZ2U7CiAgICAgICAgICAgICAgaWYgKHN0YXRlKSB7CiAgICAgICAgICAgICAgICBfdGhpczIucmVsb2FkKCk7CiAgICAgICAgICAgICAgICBfdGhpczIuJG1lc3NhZ2Uuc3VjY2Vzcygn6Lev5Lqn6LWU5YG/5riF5Y2VJyArIHR5cGUgKyAn5oiQ5Yqf77yBJyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF90aGlzMi4kbWVzc2FnZS5lcnJvcihtZXNzYWdlIHx8ICfot6/kuqfotZTlgb/muIXljZUnICsgdHlwZSArICflpLHotKXvvIEnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE4OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE1OgogICAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSAxNTsKICAgICAgICAgICAgICBfY29udGV4dC50MCA9IF9jb250ZXh0WyJjYXRjaCJdKDQpOwogICAgICAgICAgICAgIF90aGlzMi4kbWVzc2FnZS5lcnJvcihfY29udGV4dC50MCB8fCAn6Lev5Lqn6LWU5YG/5riF5Y2V5L+d5a2Y5aSx6LSl77yBJyk7CiAgICAgICAgICAgIGNhc2UgMTg6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlLCBudWxsLCBbWzQsIDE1XV0pOwogICAgICB9KSkoKTsKICAgIH0sCiAgICBoYW5kbGVFZGl0OiBmdW5jdGlvbiBoYW5kbGVFZGl0KHJvdywgdHlwZSkgewogICAgICB0aGlzW3R5cGUgKyAnRGV0YWlsJ10gPSByb3c7CiAgICAgIHRoaXNbdHlwZV0gPSB0cnVlOwogICAgfSwKICAgIC8vIOaLpeWgteino+mZpAogICAgaGFuZGxlUmVsZWFzZTogZnVuY3Rpb24gaGFuZGxlUmVsZWFzZShyb3cpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoKSB7CiAgICAgICAgdmFyIF95aWVsZCR0cmFmZmljSmFtRWRpdCwgc3RhdGUsIHZhbHVlLCBtZXNzYWdlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBpZiAoIV90aGlzMy5yZWxlYXNlVGltZU1hcFtyb3cuaWRdKSB7CiAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDEyOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF90aGlzMy4kc2V0KF90aGlzMy5wb3BvdmVyVmlzaWJsZU1hcCwgcm93LmlkLCBmYWxzZSk7CiAgICAgICAgICAgICAgcm93LmVuZFRpbWUgPSBtb21lbnQoX3RoaXMzLnJlbGVhc2VUaW1lTWFwW3Jvdy5pZF0pLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpOwogICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNTsKICAgICAgICAgICAgICByZXR1cm4gdHJhZmZpY0phbUVkaXQocm93KTsKICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgIF95aWVsZCR0cmFmZmljSmFtRWRpdCA9IF9jb250ZXh0Mi5zZW50OwogICAgICAgICAgICAgIHN0YXRlID0gX3lpZWxkJHRyYWZmaWNKYW1FZGl0LnN0YXRlOwogICAgICAgICAgICAgIHZhbHVlID0gX3lpZWxkJHRyYWZmaWNKYW1FZGl0LnZhbHVlOwogICAgICAgICAgICAgIG1lc3NhZ2UgPSBfeWllbGQkdHJhZmZpY0phbUVkaXQubWVzc2FnZTsKICAgICAgICAgICAgICBpZiAoc3RhdGUpIHsKICAgICAgICAgICAgICAgIF90aGlzMy4kbWVzc2FnZS5zdWNjZXNzKCfmi6XloLXop6PpmaTmiJDlip8nKTsKICAgICAgICAgICAgICAgIF90aGlzMy5yZWxvYWQoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgX3RoaXMzLiRtZXNzYWdlLmVycm9yKG1lc3NhZ2UgfHwgJ+aLpeWgteino+mZpOWksei0pScpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDEzOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICAgIF90aGlzMy4kbWVzc2FnZS53YXJuaW5nKCfor7fpgInmi6nop6PpmaTml7bpl7QnKTsKICAgICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlMik7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIGhhbmRsZURlbGV0ZTogZnVuY3Rpb24gaGFuZGxlRGVsZXRlKGRhdGEsIHR5cGUpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIHRoaXMuJGNvbmZpcm0oJ+aYr+WQpuWIoOmZpOivpeaVsOaNru+8nycsICfmj5DnpLonLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICB9KS50aGVuKC8qI19fUFVSRV9fKi9fYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMoKSB7CiAgICAgICAgdmFyIEFQSSwgX3lpZWxkJEFQSTIsIHN0YXRlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDMucHJldiA9IDA7CiAgICAgICAgICAgICAgX2NvbnRleHQzLnQwID0gdHlwZTsKICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IF9jb250ZXh0My50MCA9PT0gJ2NvbXBlbnNhdGVEaWFsb2cnID8gNCA6IF9jb250ZXh0My50MCA9PT0gJ3RyYWZmaWNKYW1EaWFsb2cnID8gNiA6IF9jb250ZXh0My50MCA9PT0gJ2NvbnRyb2xEaWFsb2cnID8gOCA6IF9jb250ZXh0My50MCA9PT0gJ3Jlc2N1ZURpYWxvZycgPyAxMCA6IDEyOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgQVBJID0gY29tcGVuc2F0aW9uRGVsZXRlOwogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuYWJydXB0KCJicmVhayIsIDEyKTsKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgIEFQSSA9IHRyYWZmaWNKYW1EZWxldGU7CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5hYnJ1cHQoImJyZWFrIiwgMTIpOwogICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgQVBJID0gdHJhZmZpY0NvbnRyb2xEZWxldGU7CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5hYnJ1cHQoImJyZWFrIiwgMTIpOwogICAgICAgICAgICBjYXNlIDEwOgogICAgICAgICAgICAgIEFQSSA9IHJlc2N1ZUZlZURlbGV0ZTsKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgiYnJlYWsiLCAxMik7CiAgICAgICAgICAgIGNhc2UgMTI6CiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxNDsKICAgICAgICAgICAgICByZXR1cm4gQVBJKGRhdGEuaWQpOwogICAgICAgICAgICBjYXNlIDE0OgogICAgICAgICAgICAgIF95aWVsZCRBUEkyID0gX2NvbnRleHQzLnNlbnQ7CiAgICAgICAgICAgICAgc3RhdGUgPSBfeWllbGQkQVBJMi5zdGF0ZTsKICAgICAgICAgICAgICBpZiAoc3RhdGUpIHsKICAgICAgICAgICAgICAgIF90aGlzNC4kbWVzc2FnZS5zdWNjZXNzKCfliKDpmaTmiJDlip8nKTsKICAgICAgICAgICAgICAgIF90aGlzNC5yZWxvYWQoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAyMjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxOToKICAgICAgICAgICAgICBfY29udGV4dDMucHJldiA9IDE5OwogICAgICAgICAgICAgIF9jb250ZXh0My50MSA9IF9jb250ZXh0M1siY2F0Y2giXSgwKTsKICAgICAgICAgICAgICBfdGhpczQuJG1lc3NhZ2UuZXJyb3IoX2NvbnRleHQzLnQxIHx8ICfliKDpmaTlpLHotKXvvIEnKTsKICAgICAgICAgICAgY2FzZSAyMjoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlMywgbnVsbCwgW1swLCAxOV1dKTsKICAgICAgfSkpKTsKICAgIH0sCiAgICByZWxvYWQ6IGZ1bmN0aW9uIHJlbG9hZCgpIHsKICAgICAgdGhpcy5nZXREZXRhaWwodGhpcy5kZXRhaWxGb3JtLmlkKTsKICAgIH0sCiAgICBnZXREaWN0aW9uYXJ5QnlDb2RlOiBnZXREaWN0aW9uYXJ5QnlDb2RlLAogICAgZGljdGlvbmFyeUVzY2FwZTogZGljdGlvbmFyeUVzY2FwZSwKICAgIHNob3dBcHBvaW50RGlhbG9nOiBmdW5jdGlvbiBzaG93QXBwb2ludERpYWxvZygpIHsKICAgICAgLy8gdGhpcy5iYXNlSW5mbyA9IHRoaXMuJHJlZnMuYmFzaWNzQ29udGVudC5zZW5kQmFzZURhdGEoKQogICAgICAvLyB0aGlzLiRyZWZzLmFkZEVkaXRGb3JtLnZhbGlkYXRlKGFzeW5jICh2YWxpZCwgb2JqZWN0KSA9PiB7CiAgICAgIC8vICAgaWYgKCF2YWxpZCkgewogICAgICAvLyAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKAogICAgICAvLyAgICAgICBg5pyJJHtPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCArIChiYXNpY2VEYXRhLmZpZWxkTnVtIHx8IDApCiAgICAgIC8vICAgICAgIH3kuKrlrZfmrrXmnKrpgJrov4fmoKHpqozvvIzor7fmraPnoa7loavlhpnooajljZXlhoXlrrnjgIJgCiAgICAgIC8vICAgICApCiAgICAgIC8vICAgfSBlbHNlIHsKCiAgICAgIC8vICAgfQogICAgICAvLyB9KQogICAgICB0aGlzLmFwcG9pbnREaWFsb2cgPSB0cnVlOwogICAgfSwKICAgIGhhbmRsZVVwZGF0YUhhbmRsZXM6IGZ1bmN0aW9uIGhhbmRsZVVwZGF0YUhhbmRsZXMoKSB7CiAgICAgIGNvbnNvbGUubG9nKCfmm7TmlrDmtYHnqIvorrDlvZUnKTsKICAgICAgdGhpcy5nZXREZXRhaWwodGhpcy5kZXRhaWxGb3JtLmlkKTsKICAgIH0sCiAgICAvLyDmt7vliqDlpITnva7njq/oioIKICAgIGhhbmRsZUFkZERpc3Bvc2FsOiBmdW5jdGlvbiBoYW5kbGVBZGREaXNwb3NhbCgpIHsKICAgICAgdGhpcy5kaXNwb3NhbFByb2Nlc3MgPSB0cnVlOwogICAgfSwKICAgIGNsaWNrRWRpdDogZnVuY3Rpb24gY2xpY2tFZGl0KCkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgdGhpcy5wYWdlVHlwZSA9IHRoaXMucGFnZVR5cGUgPT09ICdlZGl0JyA/ICdkZXRhaWwnIDogJ2VkaXQnOwogICAgICBpZiAodGhpcy5wYWdlVHlwZSAhPT0gJ2VkaXQnKSB7CiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXM1LiRyZWZzLmJhc2ljc0NvbnRlbnQuZ2V0RGV0YWlsKF90aGlzNS5kZXRhaWxGb3JtKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIGNsaWNrU2F2ZTogZnVuY3Rpb24gY2xpY2tTYXZlKCkgewogICAgICB2YXIgX3RoaXM2ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNCgpIHsKICAgICAgICB2YXIgZGF0YSwgcXVlcnksIF95aWVsZCR0YWJsZUVkaXQsIHN0YXRlLCBtZXNzYWdlLCB2YWx1ZSwgX3RoaXM2JGRldGFpbEZvcm07CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU0JChfY29udGV4dDQpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0NC5wcmV2ID0gX2NvbnRleHQ0Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGRhdGEgPSBfdGhpczYuJHJlZnMuYmFzaWNzQ29udGVudC5zZW5kQmFzZURhdGEoKTsKICAgICAgICAgICAgICBpZiAoIWRhdGEuZmllbGROdW0pIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gNTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfdGhpczYuJG1lc3NhZ2Uud2FybmluZygiXHU2NzA5Ii5jb25jYXQoZGF0YS5maWVsZE51bSwgIlx1NEUyQVx1NUI1N1x1NkJCNVx1NjcyQVx1OTAxQVx1OEZDN1x1NjgyMVx1OUE4Q1x1RkYwQ1x1OEJGN1x1NkI2M1x1Nzg2RVx1NTg2Qlx1NTE5OVx1ODg2OFx1NTM1NVx1NTE4NVx1NUJCOVx1MzAwMiIpKTsKICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDIzOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgcXVlcnkgPSBfb2JqZWN0U3ByZWFkKHt9LCBkYXRhKTsKICAgICAgICAgICAgICBkZWxldGUgcXVlcnkuaGFuZGxlczsKICAgICAgICAgICAgICBkZWxldGUgcXVlcnkuY29tcGVuc2F0aW9uSW5mbzsKICAgICAgICAgICAgICBkZWxldGUgcXVlcnkudHJhZmZpY0Nvbmdlc3Rpb25zOwogICAgICAgICAgICAgIGRlbGV0ZSBxdWVyeS50cmFmZmljQ29udHJvbHM7CiAgICAgICAgICAgICAgcXVlcnkuZXZlbnRUeXBlID0gSlNPTi5zdHJpbmdpZnkocXVlcnkuZXZlbnRUeXBlKTsKICAgICAgICAgICAgICBfY29udGV4dDQucHJldiA9IDExOwogICAgICAgICAgICAgIF90aGlzNi5lZGl0U2F2ZUxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMTU7CiAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlRWRpdChxdWVyeSk7CiAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgX3lpZWxkJHRhYmxlRWRpdCA9IF9jb250ZXh0NC5zZW50OwogICAgICAgICAgICAgIHN0YXRlID0gX3lpZWxkJHRhYmxlRWRpdC5zdGF0ZTsKICAgICAgICAgICAgICBtZXNzYWdlID0gX3lpZWxkJHRhYmxlRWRpdC5tZXNzYWdlOwogICAgICAgICAgICAgIHZhbHVlID0gX3lpZWxkJHRhYmxlRWRpdC52YWx1ZTsKICAgICAgICAgICAgICBpZiAoc3RhdGUpIHsKICAgICAgICAgICAgICAgIF90aGlzNi4kbWVzc2FnZS5zdWNjZXNzKCJcdTdGMTZcdThGOTFcdTRGRERcdTVCNThcdTYyMTBcdTUyOUYiKTsKICAgICAgICAgICAgICAgIF90aGlzNi5wYWdlVHlwZSA9ICdlZGl0JzsKICAgICAgICAgICAgICAgIF90aGlzNi5kZXRhaWxGb3JtID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfdGhpczYuZGV0YWlsRm9ybSksIGRhdGEpOwogICAgICAgICAgICAgICAgX3RoaXM2LmRldGFpbEZvcm0uY29tcGVuc2F0aW9uRGV0YWlscyA9ICgoX3RoaXM2JGRldGFpbEZvcm0gPSBfdGhpczYuZGV0YWlsRm9ybSkgPT09IG51bGwgfHwgX3RoaXM2JGRldGFpbEZvcm0gPT09IHZvaWQgMCB8fCAoX3RoaXM2JGRldGFpbEZvcm0gPSBfdGhpczYkZGV0YWlsRm9ybS5jb21wZW5zYXRpb25JbmZvKSA9PT0gbnVsbCB8fCBfdGhpczYkZGV0YWlsRm9ybSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXM2JGRldGFpbEZvcm0uY29tcGVuc2F0aW9uRGV0YWlscykgfHwgW107CiAgICAgICAgICAgICAgICBfdGhpczYuZGV0YWlsRm9ybS5ldmVudFR5cGUgPSBKU09OLnBhcnNlKGRhdGEuZXZlbnRUeXBlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGNhc2UgMjA6CiAgICAgICAgICAgICAgX2NvbnRleHQ0LnByZXYgPSAyMDsKICAgICAgICAgICAgICBfdGhpczYuZWRpdFNhdmVMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5maW5pc2goMjApOwogICAgICAgICAgICBjYXNlIDIzOgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU0LCBudWxsLCBbWzExLCwgMjAsIDIzXV0pOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDkuovku7blroznu5MKICAgIGhhbmRsZUV2ZW50Q29tcGxldGVkOiBmdW5jdGlvbiBoYW5kbGVFdmVudENvbXBsZXRlZCgpIHsKICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CiAgICAgIHRoaXMuJGNvbmZpcm0oJ+ehruWumuS6i+S7tuW3suWujOe7k+WQl++8nycsICfmj5DnpLonLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7orqQnLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICB9KS50aGVuKC8qI19fUFVSRV9fKi9fYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTUoKSB7CiAgICAgICAgdmFyIGRhdGEsIF95aWVsZCRldmVudENvbXBsZXRlZCwgc3RhdGU7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU1JChfY29udGV4dDUpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0NS5wcmV2ID0gX2NvbnRleHQ1Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGRhdGEgPSB7CiAgICAgICAgICAgICAgICBldmVudElkOiBfdGhpczcuZGV0YWlsRm9ybS5pZCwKICAgICAgICAgICAgICAgIGV2ZW50Tm9kZTogOQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSAzOwogICAgICAgICAgICAgIHJldHVybiBldmVudENvbXBsZXRlZChkYXRhKTsKICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgIF95aWVsZCRldmVudENvbXBsZXRlZCA9IF9jb250ZXh0NS5zZW50OwogICAgICAgICAgICAgIHN0YXRlID0gX3lpZWxkJGV2ZW50Q29tcGxldGVkLnN0YXRlOwogICAgICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICAgICAgX3RoaXM3LiRtZXNzYWdlLnN1Y2Nlc3MoJ+S6i+S7tuWujOe7k+aIkOWKn++8gScpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU1KTsKICAgICAgfSkpKTsKICAgIH0sCiAgICAvLyDot6/mrrXmlbDmja7mn6Xor6IKICAgIGdldFJvYWRPcHRpb25zOiBmdW5jdGlvbiBnZXRSb2FkT3B0aW9ucygpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTYoKSB7CiAgICAgICAgdmFyIF95aWVsZCRyb2FkU2VjdGlvbkluZiwgX3lpZWxkJHJvYWRTZWN0aW9uSW5mMiwgcm93czsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTYkKF9jb250ZXh0NikgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ2LnByZXYgPSBfY29udGV4dDYubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSAyOwogICAgICAgICAgICAgIHJldHVybiByb2FkU2VjdGlvbkluZm9JbnRlcih7CiAgICAgICAgICAgICAgICBwYWdlQmVhbjogewogICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogLTEKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIF95aWVsZCRyb2FkU2VjdGlvbkluZiA9IF9jb250ZXh0Ni5zZW50OwogICAgICAgICAgICAgIF95aWVsZCRyb2FkU2VjdGlvbkluZjIgPSBfeWllbGQkcm9hZFNlY3Rpb25JbmYucm93czsKICAgICAgICAgICAgICByb3dzID0gX3lpZWxkJHJvYWRTZWN0aW9uSW5mMiA9PT0gdm9pZCAwID8gW10gOiBfeWllbGQkcm9hZFNlY3Rpb25JbmYyOwogICAgICAgICAgICAgIF90aGlzOC5yb2FkT3B0aW9ucyA9IHJvd3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgICBpdGVtLnJvYWROYW1lID0gaXRlbS5uYW1lICsgJyAnICsgaXRlbS5jb2RlOwogICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgLy8gaWYoIXRoaXMuaWQpIHsKICAgICAgICAgICAgICAvLyAgIHRoaXMuJHNldCh0aGlzLmRldGFpbEZvcm0sICdyb2FkSWQnLCB0aGlzLnJvYWRPcHRpb25zWzBdLmlkKQogICAgICAgICAgICAgIC8vICAgdGhpcy5yb2FkQ2hhbmdlKHRoaXMucm9hZE9wdGlvbnNbMF0uaWQpCiAgICAgICAgICAgICAgLy8gfQogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTYpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDot6/mrrXpgInmi6nlj5jljJYKICAgIHJvYWRDaGFuZ2U6IGZ1bmN0aW9uIHJvYWRDaGFuZ2UodmFsdWUpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTcoKSB7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU3JChfY29udGV4dDcpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Ny5wcmV2ID0gX2NvbnRleHQ3Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF90aGlzOS5nZXRUZWFtRGF0YSh2YWx1ZSk7CiAgICAgICAgICAgICAgX3RoaXM5LmdldEluc3BlY3REYXRhKHZhbHVlKTsKICAgICAgICAgICAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5bmsr/nur/orr7lpIfkv6Hmga8KICAgICAgICAgICAgICBfdGhpczkuZ2V0QWxvbmdSb3V0ZUluZm8odmFsdWUsIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICAgICAgICB2YXIgX3RoaXM5JGRldGFpbEZvcm0gPSBfdGhpczkuZGV0YWlsRm9ybSwKICAgICAgICAgICAgICAgICAgc3RhcnRQYXRyb2xJZCA9IF90aGlzOSRkZXRhaWxGb3JtLnN0YXJ0UGF0cm9sSWQsCiAgICAgICAgICAgICAgICAgIGVuZFBhdHJvbElkID0gX3RoaXM5JGRldGFpbEZvcm0uZW5kUGF0cm9sSWQ7CgogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAgKiDlt6Hmo4DlvIDlp4vvvIznu5PmnZ/nq5kNCiAgICAgICAgICAgICAgICAgKiAqLwogICAgICAgICAgICAgICAgaWYgKHN0YXJ0UGF0cm9sSWQpIHsKICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhLnNvbWUoZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaS5pZCA9PT0gc3RhcnRQYXRyb2xJZDsKICAgICAgICAgICAgICAgICAgfSkpIHsKICAgICAgICAgICAgICAgICAgICBfdGhpczkuZGV0YWlsRm9ybS5zdGFydFBhdHJvbElkID0gJyc7CiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoXykgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzOS4kbWVzc2FnZS53YXJuaW5nKCfor7fph43mlrDpgInmi6nlt6Hmo4DlvIDlp4vnq5kuLicpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZW5kUGF0cm9sSWQpIHsKICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhLnNvbWUoZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaS5pZCA9PT0gZW5kUGF0cm9sSWQ7CiAgICAgICAgICAgICAgICAgIH0pKSB7CiAgICAgICAgICAgICAgICAgICAgX3RoaXM5LmRldGFpbEZvcm0uZW5kUGF0cm9sSWQgPSAnJzsKICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uIChfKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM5LiRtZXNzYWdlLndhcm5pbmcoJ+ivt+mHjeaWsOmAieaLqeW3oeajgOe7k+adn+ermS4uJyk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDcuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU3KTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy8g6YCa6L+H6Lev5q615L+h5oGv6I635Y+W5rK/57q/6K6+5aSH5L+h5oGvCiAgICBnZXRBbG9uZ1JvdXRlSW5mbzogZnVuY3Rpb24gZ2V0QWxvbmdSb3V0ZUluZm8odmFsdWUsIGNhbGxiYWNrKSB7CiAgICAgIHZhciBfdGhpczEwID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlOCgpIHsKICAgICAgICB2YXIgX3dpcGVEYXRhLCBfeWllbGQkYWxvbmdSb3V0ZUluZm8sIF95aWVsZCRhbG9uZ1JvdXRlSW5mbzIsIHJvd3M7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU4JChfY29udGV4dDgpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0OC5wcmV2ID0gX2NvbnRleHQ4Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF93aXBlRGF0YSA9IGZ1bmN0aW9uIF93aXBlRGF0YSgpIHsKICAgICAgICAgICAgICAgIF90aGlzMTAuYWxvbmdSb3V0ZUluZm9EYXRhID0gW107CiAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhfdGhpczEwLmFsb25nUm91dGVJbmZvRGF0YSk7CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBfY29udGV4dDgucHJldiA9IDE7CiAgICAgICAgICAgICAgX2NvbnRleHQ4Lm5leHQgPSA0OwogICAgICAgICAgICAgIHJldHVybiBhbG9uZ1JvdXRlSW5mb0ludGVyKHJlZmluZVJlcXVlc3RCb2R5KHsKICAgICAgICAgICAgICAgIHF1ZXJ5czogW3sKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnSU4nLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJ3JvYWRfc2VnbWVudF9pZF8nLAogICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgfSksICdhZGRFZGl0Jyk7CiAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICBfeWllbGQkYWxvbmdSb3V0ZUluZm8gPSBfY29udGV4dDguc2VudDsKICAgICAgICAgICAgICBfeWllbGQkYWxvbmdSb3V0ZUluZm8yID0gX3lpZWxkJGFsb25nUm91dGVJbmZvLnJvd3M7CiAgICAgICAgICAgICAgcm93cyA9IF95aWVsZCRhbG9uZ1JvdXRlSW5mbzIgPT09IHZvaWQgMCA/IFtdIDogX3lpZWxkJGFsb25nUm91dGVJbmZvMjsKICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhyb3dzKTsKICAgICAgICAgICAgICBfdGhpczEwLmFsb25nUm91dGVJbmZvRGF0YSA9IHJvd3M7CiAgICAgICAgICAgICAgX2NvbnRleHQ4Lm5leHQgPSAxNDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgICBfY29udGV4dDgucHJldiA9IDExOwogICAgICAgICAgICAgIF9jb250ZXh0OC50MCA9IF9jb250ZXh0OFsiY2F0Y2giXSgxKTsKICAgICAgICAgICAgICAvLyDkuI3kuLror7fmsYLov4flv6vnu5PmnZ/nmoTmg4XlhrXkuIvvvIzph43nva4KICAgICAgICAgICAgICBpZiAoX2NvbnRleHQ4LnQwLm1lc3NhZ2UgIT09ICdjYW5jZWxlZCcpIF93aXBlRGF0YSgpOwogICAgICAgICAgICBjYXNlIDE0OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDguc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU4LCBudWxsLCBbWzEsIDExXV0pOwogICAgICB9KSkoKTsKICAgIH0sCiAgICBzaXRlQ2hhbmdlOiBmdW5jdGlvbiBzaXRlQ2hhbmdlKGUsIHR5cGUpIHsKICAgICAgdmFyIHNpdGVJbmZvID0gdGhpcy5hbG9uZ1JvdXRlSW5mb0RhdGEuZmluZChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIHJldHVybiBpdGVtLmlkID09PSBlOwogICAgICB9KTsKICAgICAgdGhpcy5kZXRhaWxGb3JtWyIiLmNvbmNhdCh0eXBlLCAiTmFtZSIpXSA9IHNpdGVJbmZvLm5hbWU7CiAgICB9LAogICAgLy8g6YCa6L+H6Lev5q615L+h5oGv6I635Y+W5beh5p+l5pWR5o+06Zif5LyN5L+h5oGvCiAgICBnZXRUZWFtRGF0YTogZnVuY3Rpb24gZ2V0VGVhbURhdGEodmFsdWUpIHsKICAgICAgdmFyIF90aGlzMTEgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU5KCkgewogICAgICAgIHZhciBfeWllbGQkdGVhbURhdGEsIF95aWVsZCR0ZWFtRGF0YSRyb3dzLCByb3dzOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlOSQoX2NvbnRleHQ5KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDkucHJldiA9IF9jb250ZXh0OS5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDkubmV4dCA9IDI7CiAgICAgICAgICAgICAgcmV0dXJuIHRlYW1EYXRhKHJlZmluZVJlcXVlc3RCb2R5KHsKICAgICAgICAgICAgICAgIHF1ZXJ5czogW3sKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnSU4nLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJ3IuaWRfJywKICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0VRVUFMJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6ICd0LnR5cGVfJywKICAgICAgICAgICAgICAgICAgdmFsdWU6ICcyJwogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICB9KSwgJ2FkZEVkaXQnKTsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIF95aWVsZCR0ZWFtRGF0YSA9IF9jb250ZXh0OS5zZW50OwogICAgICAgICAgICAgIF95aWVsZCR0ZWFtRGF0YSRyb3dzID0gX3lpZWxkJHRlYW1EYXRhLnJvd3M7CiAgICAgICAgICAgICAgcm93cyA9IF95aWVsZCR0ZWFtRGF0YSRyb3dzID09PSB2b2lkIDAgPyBbXSA6IF95aWVsZCR0ZWFtRGF0YSRyb3dzOwogICAgICAgICAgICAgIF90aGlzMTEudGVhbU9wdGlvbnMgPSByb3dzOwogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0OS5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTkpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5blt6Hmn6XmlZHmj7TpmJ/kvI3kv6Hmga8KICAgIGdldEluc3BlY3REYXRhOiBmdW5jdGlvbiBnZXRJbnNwZWN0RGF0YSh2YWx1ZSkgewogICAgICB2YXIgX3RoaXMxMiA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTEwKCkgewogICAgICAgIHZhciBfeWllbGQkdGVhbURhdGEyLCBfeWllbGQkdGVhbURhdGEyJHJvd3MsIHJvd3M7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxMCQoX2NvbnRleHQxMCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQxMC5wcmV2ID0gX2NvbnRleHQxMC5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDEwLm5leHQgPSAyOwogICAgICAgICAgICAgIHJldHVybiB0ZWFtRGF0YShyZWZpbmVSZXF1ZXN0Qm9keSh7CiAgICAgICAgICAgICAgICBxdWVyeXM6IFt7CiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0lOJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6ICdyLmlkXycsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdFUVVBTCcsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAndC50eXBlXycsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMScKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgfSksICdhZGRFZGl0Jyk7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBfeWllbGQkdGVhbURhdGEyID0gX2NvbnRleHQxMC5zZW50OwogICAgICAgICAgICAgIF95aWVsZCR0ZWFtRGF0YTIkcm93cyA9IF95aWVsZCR0ZWFtRGF0YTIucm93czsKICAgICAgICAgICAgICByb3dzID0gX3lpZWxkJHRlYW1EYXRhMiRyb3dzID09PSB2b2lkIDAgPyBbXSA6IF95aWVsZCR0ZWFtRGF0YTIkcm93czsKICAgICAgICAgICAgICBfdGhpczEyLmluc3BlY3RPcHRpb25zID0gcm93czsKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDEwLnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlMTApOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDpmYTku7bpooTop4hsaXN0CiAgICBnZXRGaWxlUHJldmlld1VybExpc3Q6IGZ1bmN0aW9uIGdldEZpbGVQcmV2aWV3VXJsTGlzdChmaWxlcykgewogICAgICB2YXIgc3JjTGlzdCA9IGZpbGVzLm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIHJldHVybiBpdGVtLmZpbGVQcmV2aWV3VXJsOwogICAgICB9KTsKICAgICAgcmV0dXJuIHNyY0xpc3Q7CiAgICB9LAogICAgZXZlbnRDb25maXJtOiBmdW5jdGlvbiAoX2V2ZW50Q29uZmlybSkgewogICAgICBmdW5jdGlvbiBldmVudENvbmZpcm0oKSB7CiAgICAgICAgcmV0dXJuIF9ldmVudENvbmZpcm0uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfQogICAgICBldmVudENvbmZpcm0udG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIF9ldmVudENvbmZpcm0udG9TdHJpbmcoKTsKICAgICAgfTsKICAgICAgcmV0dXJuIGV2ZW50Q29uZmlybTsKICAgIH0oZnVuY3Rpb24gKCkgewogICAgICB2YXIgX3RoaXMxMyA9IHRoaXM7CiAgICAgIHRoaXMuJGNvbmZpcm0oJ+ehruWumuS6i+S7tuaguOWunuehruiupOWQl++8nycsICfmj5DnpLonLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7orqQnLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICB9KS50aGVuKC8qI19fUFVSRV9fKi9fYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTExKCkgewogICAgICAgIHZhciBfeWllbGQkZXZlbnRDb25maXJtLCBzdGF0ZTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTExJChfY29udGV4dDExKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDExLnByZXYgPSBfY29udGV4dDExLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF90aGlzMTMuY29uZmlybUxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgIF9jb250ZXh0MTEubmV4dCA9IDM7CiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50Q29uZmlybShfdGhpczEzLmRldGFpbEZvcm0uaWQpOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgX3lpZWxkJGV2ZW50Q29uZmlybSA9IF9jb250ZXh0MTEuc2VudDsKICAgICAgICAgICAgICBzdGF0ZSA9IF95aWVsZCRldmVudENvbmZpcm0uc3RhdGU7CiAgICAgICAgICAgICAgaWYgKHN0YXRlKSB7CiAgICAgICAgICAgICAgICBfdGhpczEzLiRtZXNzYWdlLnN1Y2Nlc3MoIlx1NEU4Qlx1NEVGNlx1Nzg2RVx1OEJBNFx1NjIxMFx1NTI5RiIpOwogICAgICAgICAgICAgICAgX3RoaXMxMy5jb25maXJtTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgX3RoaXMxMy5jaGFuZ2VQYWdlKCdUYWJsZVBhZ2UnLCAnYWRkJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTEuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUxMSk7CiAgICAgIH0pKSk7CiAgICB9KSwKICAgIC8vIOaJk+W8gOmhtemdouaJp+ihjAogICAgb3BlblBhZ2U6IGZ1bmN0aW9uIG9wZW5QYWdlKCkgewogICAgICAvLyB0aGlzLiRyZWZzLm1pbmVNYXA/Lm1hcD8ucmVzaXplKCkKICAgIH0sCiAgICBjaGFuZ2VQYWdlOiBmdW5jdGlvbiBjaGFuZ2VQYWdlKCkgewogICAgICB2YXIgcGFnZU5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnOwogICAgICB2YXIgdHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7CiAgICAgIGlmICghcGFnZU5hbWUpIHJldHVybjsKICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlUGFnZScsIHBhZ2VOYW1lLCBmdW5jdGlvbiAoXykgewogICAgICAgIFB1YlN1Yi5wdWJsaXNoKHBhZ2VOYW1lLCB7CiAgICAgICAgICB0eXBlOiB0eXBlCiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOWFs+mXremhtemdouaJp+ihjAogICAgY2xvc2VQYWdlOiBmdW5jdGlvbiBjbG9zZVBhZ2UoKSB7CiAgICAgIHZhciBfdGhpczE0ID0gdGhpczsKICAgICAgdmFyIHB1YlN1YiA9IHRoaXMucHViU3ViLAogICAgICAgIGFkZEVkaXRSdWxlcyA9IHRoaXMuYWRkRWRpdFJ1bGVzLAogICAgICAgIHJvYWRPcHRpb25zID0gdGhpcy5yb2FkT3B0aW9uczsKICAgICAgLy8g6YeN572u57uE5Lu25pWw5o2uCiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy4kZGF0YSwgdGhpcy4kb3B0aW9ucy5kYXRhLmNhbGwodGhpcyksIHsKICAgICAgICBwdWJTdWI6IHB1YlN1YiwKICAgICAgICByb2FkT3B0aW9uczogcm9hZE9wdGlvbnMKICAgICAgfSk7CiAgICAgIC8vIHRoaXMuJHJlZnMubWluZU1hcD8ucmVzZXRNYXAoXyA9PiB0aGlzLm1hcExvYWRpbmcgPSBmYWxzZSkgLy8g6YeN572u5Zyw5Zu+CiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7CiAgICAgICAgX3RoaXMxNC4kcmVmcy5mb3JtSW5mby4kZWwuc2Nyb2xsVG9wID0gMDsKICAgICAgfSk7CiAgICB9LAogICAgbWFwTG9hZDogZnVuY3Rpb24gbWFwTG9hZCgpIHsKICAgICAgdGhpcy5tYXBMb2FkaW5nID0gZmFsc2U7CiAgICB9LAogICAgLy8g6Ieq5a6a5LmJ5qCH6K6w54K5CiAgICBjdXN0b21UYWdQb2ludHM6IGZ1bmN0aW9uIGN1c3RvbVRhZ1BvaW50cygpIHsKICAgICAgdmFyIF90aGlzJG1hcmtlcnM7CiAgICAgIHZhciBsbmdsYXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdOwogICAgICAoX3RoaXMkbWFya2VycyA9IHRoaXMubWFya2Vyc1t0aGlzLm1hcmtlcnMubGVuZ3RoIC0gMV0pID09PSBudWxsIHx8IF90aGlzJG1hcmtlcnMgPT09IHZvaWQgMCB8fCBfdGhpcyRtYXJrZXJzLnJlbW92ZSgpOwogICAgICAvLyDoh6rlrprkuYnngrnmoIforrDnmoTlhoXpg6hET03lhYPntKAKICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIGVsLmNsYXNzTmFtZSA9ICdtYXJrZXItdGlwJzsKICAgICAgLy8gTWFya2Vy5p6E6YCg5Ye95pWw5o6l5pS25Lik5Liq5Y+C5pWw77yM5LiA5Liq5Li66Ieq5a6a5LmJ55qERE9N5YWD57Sg77yM5LiA5Liq5pivT2JqZWN05Y+C5pWw77yM5YW25Lit5YyF5ous5YGP56e76YeP562JCiAgICAgIHZhciBtYXJrZXIgPSBuZXcgdGhpcy4kcmVmcy5taW5lTWFwLm1pbmVNYXAuTWFya2VyKGVsLCB7CiAgICAgICAgYW5jaG9yOiAnY2VudGVyJywKICAgICAgICBvZmZzZXQ6IFswLCAwXSAvLyBvZmZzZXTlj4LmlbDkuLrmoIfms6jngrnnm7jlr7nkuo7lhbblt6bkuIrop5LlgY/np7vlg4/ntKDlpKflsI8KICAgICAgfSkKICAgICAgLy8g6LCD55Soc2V0TG5nTGF05pa55rOV5oyH5a6aTWFya2Vy55qE5Z2Q5qCH5L2N572uCiAgICAgIC5zZXRMbmdMYXQobG5nbGF0KS5hZGRUbyh0aGlzLiRyZWZzLm1pbmVNYXAubWFwKTsKICAgICAgdGhpcy5tYXJrZXJzLnB1c2gobWFya2VyKTsKICAgIH0sCiAgICAvLyDojrflj5bor6bmg4UKICAgIGdldERldGFpbDogZnVuY3Rpb24gZ2V0RGV0YWlsKGlkKSB7CiAgICAgIHZhciBfdGhpczE1ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMTIoKSB7CiAgICAgICAgdmFyIF90aGlzMTUkZGV0YWlsRm9ybTI7CiAgICAgICAgdmFyIF90aGlzMTUkZGV0YWlsRm9ybSwgX3RoaXMxNSRkZXRhaWxGb3JtJHBlLCBwZWdTVmFsLCBfdGhpczE1JGRldGFpbEZvcm0kcGUyLCBwZWdFVmFsLCBzdGFydFBlZ0FyciwgZW5kUGVnQXJyOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMTIkKF9jb250ZXh0MTIpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0MTIucHJldiA9IF9jb250ZXh0MTIubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQxMi5uZXh0ID0gMjsKICAgICAgICAgICAgICByZXR1cm4gdGFibGVEZXRhaWwoaWQpOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgX3RoaXMxNS5kZXRhaWxGb3JtID0gX2NvbnRleHQxMi5zZW50OwogICAgICAgICAgICAgIF90aGlzMTUkZGV0YWlsRm9ybSA9IF90aGlzMTUuZGV0YWlsRm9ybSwgX3RoaXMxNSRkZXRhaWxGb3JtJHBlID0gX3RoaXMxNSRkZXRhaWxGb3JtLnBlZ1NWYWwsIHBlZ1NWYWwgPSBfdGhpczE1JGRldGFpbEZvcm0kcGUgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxNSRkZXRhaWxGb3JtJHBlLCBfdGhpczE1JGRldGFpbEZvcm0kcGUyID0gX3RoaXMxNSRkZXRhaWxGb3JtLnBlZ0VWYWwsIHBlZ0VWYWwgPSBfdGhpczE1JGRldGFpbEZvcm0kcGUyID09PSB2b2lkIDAgPyAnJyA6IF90aGlzMTUkZGV0YWlsRm9ybSRwZTI7CiAgICAgICAgICAgICAgaWYgKHBlZ1NWYWwpIHsKICAgICAgICAgICAgICAgIHN0YXJ0UGVnQXJyID0gcGVnU1ZhbC5zcGxpdCgnKycpOwogICAgICAgICAgICAgICAgX3RoaXMxNS5kZXRhaWxGb3JtLnN0YXJ0UGVnID0gc3RhcnRQZWdBcnJbMF0uc2xpY2UoMSk7CiAgICAgICAgICAgICAgICBfdGhpczE1LmRldGFpbEZvcm0uc3RhcnRQZWdBZGQgPSBzdGFydFBlZ0FyclsxXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHBlZ0VWYWwpIHsKICAgICAgICAgICAgICAgIGVuZFBlZ0FyciA9IHBlZ0VWYWwuc3BsaXQoJysnKTsKICAgICAgICAgICAgICAgIF90aGlzMTUuZGV0YWlsRm9ybS5lbmRQZWcgPSBlbmRQZWdBcnJbMF0uc2xpY2UoMSk7CiAgICAgICAgICAgICAgICBfdGhpczE1LmRldGFpbEZvcm0uZW5kUGVnQWRkID0gZW5kUGVnQXJyWzFdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfdGhpczE1LmRldGFpbEZvcm0uY29tcGVuc2F0aW9uRGV0YWlscyA9ICgoX3RoaXMxNSRkZXRhaWxGb3JtMiA9IF90aGlzMTUuZGV0YWlsRm9ybSkgPT09IG51bGwgfHwgX3RoaXMxNSRkZXRhaWxGb3JtMiA9PT0gdm9pZCAwIHx8IChfdGhpczE1JGRldGFpbEZvcm0yID0gX3RoaXMxNSRkZXRhaWxGb3JtMi5jb21wZW5zYXRpb25JbmZvKSA9PT0gbnVsbCB8fCBfdGhpczE1JGRldGFpbEZvcm0yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpczE1JGRldGFpbEZvcm0yLmNvbXBlbnNhdGlvbkRldGFpbHMpIHx8IFtdOwogICAgICAgICAgICAgIF90aGlzMTUuZGV0YWlsRm9ybS5ldmVudFR5cGUgPSBKU09OLnBhcnNlKF90aGlzMTUuZGV0YWlsRm9ybS5ldmVudFR5cGUpOwogICAgICAgICAgICAgIF90aGlzMTUucm9hZENoYW5nZShfdGhpczE1LmRldGFpbEZvcm0ucm9hZElkKTsKICAgICAgICAgICAgICBfdGhpczE1LmRpc2FibGVTaG93ID0gZmFsc2U7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coX3RoaXMxNS5kZXRhaWxGb3JtLCAn6K+m5oOF5pWw5o2uLy8vLy8nKTsKICAgICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxMi5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTEyKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgZ2V0RXZlbnRUeXBlOiBmdW5jdGlvbiBnZXRFdmVudFR5cGUoKSB7CiAgICAgIHZhciBldmVudFR5cGUgPSB0aGlzLmRldGFpbEZvcm0uZXZlbnRUeXBlOwogICAgICBpZiAoZXZlbnRUeXBlKSB7CiAgICAgICAgaWYgKGV2ZW50VHlwZS5sZW5ndGggPiAxKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5RXNjYXBlKCdseF9zamx4eHEnLCBldmVudFR5cGVbMV0gKyAnJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAnLSc7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAnLSc7CiAgICAgIH0KICAgIH0sCiAgICBoYW5kbGVSZWxpZXZlOiBmdW5jdGlvbiBoYW5kbGVSZWxpZXZlKHJvdywgaW5kZXgpIHsKICAgICAgdmFyIF90aGlzMTYgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUxMygpIHsKICAgICAgICB2YXIgX3lpZWxkJGRlcmVndWxhdGlvbiwgc3RhdGUsIHZhbHVlLCBtZXNzYWdlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMTMkKF9jb250ZXh0MTMpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0MTMucHJldiA9IF9jb250ZXh0MTMubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgaWYgKCFfdGhpczE2LmppZWNodVRpbWVNYXBbcm93LmlkXSkgewogICAgICAgICAgICAgICAgX2NvbnRleHQxMy5uZXh0ID0gMTM7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX3RoaXMxNi4kc2V0KF90aGlzMTYucG9wb3ZlclZpc2libGVNYXAsIHJvdy5pZCwgZmFsc2UpOwogICAgICAgICAgICAgIHJvdy5lbmRUaW1lID0gbW9tZW50KF90aGlzMTYuamllY2h1VGltZU1hcFtyb3cuaWRdKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKTsKICAgICAgICAgICAgICByb3cuc3RhdHVzID0gMjsKICAgICAgICAgICAgICBfY29udGV4dDEzLm5leHQgPSA2OwogICAgICAgICAgICAgIHJldHVybiBkZXJlZ3VsYXRpb24ocm93KTsKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgIF95aWVsZCRkZXJlZ3VsYXRpb24gPSBfY29udGV4dDEzLnNlbnQ7CiAgICAgICAgICAgICAgc3RhdGUgPSBfeWllbGQkZGVyZWd1bGF0aW9uLnN0YXRlOwogICAgICAgICAgICAgIHZhbHVlID0gX3lpZWxkJGRlcmVndWxhdGlvbi52YWx1ZTsKICAgICAgICAgICAgICBtZXNzYWdlID0gX3lpZWxkJGRlcmVndWxhdGlvbi5tZXNzYWdlOwogICAgICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICAgICAgX3RoaXMxNi4kbWVzc2FnZS5zdWNjZXNzKCfop6PpmaTnrqHliLbmiJDlip8nKTsKICAgICAgICAgICAgICAgIF90aGlzMTYucmVsb2FkKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF90aGlzMTYuJG1lc3NhZ2UuZXJyb3IobWVzc2FnZSB8fCAn6Kej6Zmk566h5Yi25aSx6LSlJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0MTMubmV4dCA9IDE0OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDEzOgogICAgICAgICAgICAgIF90aGlzMTYuJG1lc3NhZ2Uud2FybmluZygn6K+36YCJ5oup6Kej6Zmk5pe26Ze0Jyk7CiAgICAgICAgICAgIGNhc2UgMTQ6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTMuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUxMyk7CiAgICAgIH0pKSgpOwogICAgfQogIH0sCiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHsKICAgIC8vIOWcqOe7hOS7tumUgOavgeS5i+WJjSDmuIXpmaTorqLpmIXmtojmga8KICAgIFB1YlN1Yi51bnN1YnNjcmliZSh0aGlzLnB1YlN1Yik7CiAgfQp9Ow=="},null]}