diff --git a/creator/packages/steedos-workflow/client/lib/instance_readonly_template.coffee b/creator/packages/steedos-workflow/client/lib/instance_readonly_template.coffee index cc6e62b6ed..b3c4ea7247 100644 --- a/creator/packages/steedos-workflow/client/lib/instance_readonly_template.coffee +++ b/creator/packages/steedos-workflow/client/lib/instance_readonly_template.coffee @@ -395,8 +395,10 @@ InstanceReadOnlyTemplate.getValue = (value, field, locale, utcOffset) -> value = _.map records, (item)-> fileName = item.original.name; fileUrl = Steedos.absoluteUrl('/api/files/files/'+item._id); + match = fileName.match(/\.([^\.]+)$/); + fileType = match[0] || ""; filePreviewHtml = ''; - if [".pdf", ".jpg", ".jpeg", ".png", ".gif"].indexOf(fileName.toLowerCase().slice(-4)) > -1 + if [".pdf", ".jpg", ".jpeg", ".png", ".gif"].indexOf(fileType) > -1 filePreviewHtml = " 预览" return "
#{fileName} #{filePreviewHtml ? filePreviewHtml : ''}
" diff --git a/server/bundle/programs/server/packages/steedos_workflow.js b/server/bundle/programs/server/packages/steedos_workflow.js index 4457ae983f..cd04f28a38 100644 --- a/server/bundle/programs/server/packages/steedos_workflow.js +++ b/server/bundle/programs/server/packages/steedos_workflow.js @@ -3052,12 +3052,14 @@ InstanceReadOnlyTemplate.getValue = function (value, field, locale, utcOffset) { } value = _.map(records, function (item) { - var fileName, filePreviewHtml, fileUrl; + var fileName, filePreviewHtml, fileType, fileUrl, match; fileName = item.original.name; fileUrl = Steedos.absoluteUrl('/api/files/files/' + item._id); + match = fileName.match(/\.([^\.]+)$/); + fileType = match[0] || ""; filePreviewHtml = ''; - if ([".pdf", ".jpg", ".jpeg", ".png", ".gif"].indexOf(fileName.toLowerCase().slice(-4)) > -1) { + if ([".pdf", ".jpg", ".jpeg", ".png", ".gif"].indexOf(fileType) > -1) { filePreviewHtml = " 预览"; } @@ -12009,4 +12011,4 @@ Package._define("steedos:workflow", { })(); //# sourceURL=meteor://💻app/packages/steedos_workflow.js -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9jaGVja05wbS5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9saWIvVVJJLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2xpYi9jb3JlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvbGliL2NvcmUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2xpYi9tb2RlbHMvaW5zdGFuY2VfdGFza3MuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2xpYi9tb2RlbHMvYXV0aF90b2tlbnMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2NsaWVudC9saWIvaW5zdGFuY2VfcmVhZG9ubHlfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvbGliL2luc3RhbmNlX3JlYWRvbmx5X3RlbXBsYXRlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9jbGllbnQvbGliL3RlbXBsYXRlX21hbmFnZXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvbGliL3RlbXBsYXRlX21hbmFnZXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L2NsaWVudC9jb3JlZm9ybS9pbnB1dFR5cGVzL2NvcmVmb3JtLXRhYmxlL3N0ZWVkb3MtdGFibGUuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbWFnZV9zaWduLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbWFnZV9zaWduLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3RyYWNlc19oYW5kbGVyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL190cmFjZXNfaGFuZGxlci5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbnN0YW5jZV9mb3JtLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbnN0YW5jZV9mb3JtLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9jbGllbnQvdmlld3MvaW5zdGFuY2UvX2luc3RhbmNlX2F0dGFjaG1lbnRzLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2NsaWVudC92aWV3cy9pbnN0YW5jZS9faW5zdGFuY2Vfc2lnbl90ZXh0LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbnN0YW5jZV9zaWduX3RleHQuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2NsaWVudC92aWV3cy9pbnN0YW5jZS9fdHJhY2VzX2hlbHAuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3RyYWNlc19oZWxwLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3JlbGF0ZWRfaW5zdGFuY2VzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19yZWxhdGVkX2luc3RhbmNlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19yZWxhdGVkX3JlY29yZHMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3JlbGF0ZWRfcmVjb3Jkcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3M6d29ya2Zsb3cvcm91dGVzL2dldFNwYWNlVXNlcnMuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3M6d29ya2Zsb3cvcm91dGVzL2dldEZvcm11bGFVc2VyT2JqZWN0cy5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9yb3V0ZXMvaW5pdF9mb3JtdWxhX3ZhbHVlcy5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9yb3V0ZXMvYXBpX3dvcmtmbG93X2ZvcndhcmQuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvcm91dGVzL3Rlc3Rfd2ViaG9vay5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3JvdXRlcy90ZXN0X3dlYmhvb2suY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL3NldF9pbnN0YW5jZV9zdGVwX2FwcHJvdmUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9tZXRob2RzL2dldF9pbnN0YW5jZV9kYXRhLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9tZXRob2RzL3NhdmVfaW5zdGFuY2UuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3M6d29ya2Zsb3cvc2VydmVyL21ldGhvZHMvdHJhY2VfYXBwcm92ZV9jYy5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9mb3J3YXJkX2luc3RhbmNlLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9tZXRob2RzL2Nmc19pbnN0YW5jZXMuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL21ldGhvZHMvaW5zdGFuY2VfYXBwcm92ZS5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL21ldGhvZHMvaW5zdGFuY2VfcmV0dXJuLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9pbnN0YW5jZV9yZW1pbmQuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL25leHRfc3RlcF91c2Vyc19ub3RfZm91bmQuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL2luc3RhbmNlX251bWJlcl9ydWxlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL21ldGhvZHMvY2hlY2tfbWFpbl9hdHRhY2guY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL3JlbGF0ZWRfaW5zdGFuY2VzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9lZGl0X2Zsb3dfcG9zaXRpb25zLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9zdGFydF9mbG93LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9pbnN0YW5jZV90cmFjZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL2luc3RhbmNlX2JhdGNoLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9mbG93LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9oaWRlX2luc3RhbmNlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9pbnN0YW5jZV92YWx1ZS5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3JvdXRlcy9pbnN0YW5jZS5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9yb3V0ZXMvaW5zdGFuY2UuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9yb3V0ZXMvc3RlZWRvc19jc3MuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcm91dGVzL3N0ZWVkb3NfY3NzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcm91dGVzL2luc3RhbmNlX2RyYWZ0X3ZpZXcuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcm91dGVzL2luc3RhbmNlX2RyYWZ0X3ZpZXcuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9saWIvMV9mb3JtX2Zvcm11bGEuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9jYXRlZ29yaWVzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9jYXRlZ29yaWVzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2Nmc19pbnN0YW5jZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Nmc19pbnN0YW5jZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd19wb3NpdGlvbnMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfcG9zaXRpb25zLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfcG9zaXRpb25zX3RhYnVsYXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfcG9zaXRpb25zX3RhYnVsYXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd19yb2xlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd19yb2xlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9mbG93cy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd3MuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvZm9ybXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zvcm1zLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2luc3RhbmNlX2RhdGEuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2luc3RhbmNlX2RhdGEuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvaW5zdGFuY2VfbGlzdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvaW5zdGFuY2VfbGlzdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9pbnN0YW5jZV90YWJ1bGFyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9pbnN0YW5jZV90YWJ1bGFyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2luc3RhbmNlX2RyYWZ0LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9pbnN0YW5jZV9kcmFmdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9kaXN0cmlidXRlZF9pbnN0YW5jZXNfc3RhdGVfYnlfaWRzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9kaXN0cmlidXRlZF9pbnN0YW5jZXNfc3RhdGVfYnlfaWRzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL3JlbGF0ZWRfaW5zdGFjZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL3JlbGF0ZWRfaW5zdGFjZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvc3BhY2VfdXNlcl9zaWducy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvc3BhY2VfdXNlcl9zaWducy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy91c2VyX2luYm94X2luc3RhbmNlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy91c2VyX2luYm94X2luc3RhbmNlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfbWFpbl9hdHRhY2hfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfbWFpbl9hdHRhY2hfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9mbG93LXRlbXBsYXRlL3dvcmtmbG93X3RlbXBsYXRlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL2Zsb3ctdGVtcGxhdGUvd29ya2Zsb3dfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9zY2hlZHVsZS9hdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24uY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvc2NoZWR1bGUvYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvc2NoZWR1bGUvdGltZW91dF9hdXRvX3N1Ym1pdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9zY2hlZHVsZS90aW1lb3V0X2F1dG9fc3VibWl0LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9yZWxhdGVkX2luc3RhbmNlc190YWJ1bGFyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcmVsYXRlZF9pbnN0YW5jZXNfdGFidWxhci5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvdGFidWxhci5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3RhYnVsYXIuY29mZmVlIl0sIm5hbWVzIjpbImNoZWNrTnBtVmVyc2lvbnMiLCJtb2R1bGUiLCJsaW5rIiwidiIsInJvb3QiLCJmYWN0b3J5IiwiZGVmaW5lIiwiYW1kIiwiVVJJIiwicHVueWNvZGUiLCJJUHY2IiwiU2Vjb25kTGV2ZWxEb21haW5zIiwiU0xEIiwiX1VSSSIsInVybCIsImJhc2UiLCJfdXJsU3VwcGxpZWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJfYmFzZVN1cHBsaWVkIiwidW5kZWZpbmVkIiwiVHlwZUVycm9yIiwibG9jYXRpb24iLCJocmVmIiwiYWJzb2x1dGVUbyIsInZlcnNpb24iLCJwIiwicHJvdG90eXBlIiwiaGFzT3duIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJlc2NhcGVSZWdFeCIsInN0cmluZyIsInJlcGxhY2UiLCJnZXRUeXBlIiwidmFsdWUiLCJTdHJpbmciLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImlzQXJyYXkiLCJvYmoiLCJmaWx0ZXJBcnJheVZhbHVlcyIsImRhdGEiLCJsb29rdXAiLCJpIiwiX21hdGNoIiwidGVzdCIsInNwbGljZSIsImFycmF5Q29udGFpbnMiLCJsaXN0IiwiX3R5cGUiLCJtYXRjaCIsImFycmF5c0VxdWFsIiwib25lIiwidHdvIiwic29ydCIsImwiLCJ0cmltU2xhc2hlcyIsInRleHQiLCJ0cmltX2V4cHJlc3Npb24iLCJfcGFydHMiLCJwcm90b2NvbCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJob3N0bmFtZSIsInVybiIsInBvcnQiLCJwYXRoIiwicXVlcnkiLCJmcmFnbWVudCIsImR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyIsImVzY2FwZVF1ZXJ5U3BhY2UiLCJwcm90b2NvbF9leHByZXNzaW9uIiwiaWRuX2V4cHJlc3Npb24iLCJwdW55Y29kZV9leHByZXNzaW9uIiwiaXA0X2V4cHJlc3Npb24iLCJpcDZfZXhwcmVzc2lvbiIsImZpbmRfdXJpX2V4cHJlc3Npb24iLCJmaW5kVXJpIiwic3RhcnQiLCJlbmQiLCJ0cmltIiwiZGVmYXVsdFBvcnRzIiwiaHR0cCIsImh0dHBzIiwiZnRwIiwiZ29waGVyIiwid3MiLCJ3c3MiLCJpbnZhbGlkX2hvc3RuYW1lX2NoYXJhY3RlcnMiLCJkb21BdHRyaWJ1dGVzIiwiZ2V0RG9tQXR0cmlidXRlIiwibm9kZSIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJ0eXBlIiwiZXNjYXBlRm9yRHVtYkZpcmVmb3gzNiIsImVzY2FwZSIsInN0cmljdEVuY29kZVVSSUNvbXBvbmVudCIsImVuY29kZVVSSUNvbXBvbmVudCIsImVuY29kZSIsImRlY29kZSIsImRlY29kZVVSSUNvbXBvbmVudCIsImlzbzg4NTkiLCJ1bmVzY2FwZSIsInVuaWNvZGUiLCJjaGFyYWN0ZXJzIiwicGF0aG5hbWUiLCJleHByZXNzaW9uIiwibWFwIiwicmVzZXJ2ZWQiLCJ1cm5wYXRoIiwiZW5jb2RlUXVlcnkiLCJlc2NhcGVkIiwiZGVjb2RlUXVlcnkiLCJlIiwiX3BhcnQiLCJnZW5lcmF0ZUFjY2Vzc29yIiwiX2dyb3VwIiwiYyIsImdlbmVyYXRlU2VnbWVudGVkUGF0aEZ1bmN0aW9uIiwiX3NlcCIsIl9jb2RpbmdGdW5jTmFtZSIsIl9pbm5lckNvZGluZ0Z1bmNOYW1lIiwiYWN0dWFsQ29kaW5nRnVuYyIsInNlZ21lbnRzIiwic3BsaXQiLCJqb2luIiwiZGVjb2RlUGF0aCIsImRlY29kZVVyblBhdGgiLCJyZWNvZGVQYXRoIiwicmVjb2RlVXJuUGF0aCIsImVuY29kZVJlc2VydmVkIiwicGFyc2UiLCJwYXJ0cyIsInBvcyIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJwYXJzZUF1dGhvcml0eSIsInBhcnNlSG9zdCIsImJyYWNrZXRQb3MiLCJ0IiwiY2hhckF0IiwiZmlyc3RDb2xvbiIsImZpcnN0U2xhc2giLCJuZXh0Q29sb24iLCJwYXJzZVVzZXJpbmZvIiwibGFzdEluZGV4T2YiLCJzaGlmdCIsInBhcnNlUXVlcnkiLCJpdGVtcyIsInNwbGl0cyIsIm5hbWUiLCJwdXNoIiwiYnVpbGQiLCJidWlsZEF1dGhvcml0eSIsImJ1aWxkSG9zdCIsImJ1aWxkVXNlcmluZm8iLCJidWlsZFF1ZXJ5IiwidW5pcXVlIiwia2V5IiwiYnVpbGRRdWVyeVBhcmFtZXRlciIsImFkZFF1ZXJ5IiwiY29uY2F0IiwicmVtb3ZlUXVlcnkiLCJoYXNRdWVyeSIsIndpdGhpbkFycmF5IiwiX2Jvb2x5IiwiQm9vbGVhbiIsIm9wIiwiY29tbW9uUGF0aCIsIk1hdGgiLCJtaW4iLCJ3aXRoaW5TdHJpbmciLCJjYWxsYmFjayIsIm9wdGlvbnMiLCJfc3RhcnQiLCJfZW5kIiwiX3RyaW0iLCJfYXR0cmlidXRlT3BlbiIsImxhc3RJbmRleCIsImV4ZWMiLCJpbmRleCIsImlnbm9yZUh0bWwiLCJhdHRyaWJ1dGVPcGVuIiwibWF4Iiwic2VhcmNoIiwiaWdub3JlIiwicmVzdWx0IiwiZW5zdXJlVmFsaWRIb3N0bmFtZSIsInRvQVNDSUkiLCJub0NvbmZsaWN0IiwicmVtb3ZlQWxsIiwidW5jb25mbGljdGVkIiwiVVJJVGVtcGxhdGUiLCJkZWZlckJ1aWxkIiwiX2RlZmVycmVkX2J1aWxkIiwiX3N0cmluZyIsImNsb25lIiwidmFsdWVPZiIsImdlbmVyYXRlU2ltcGxlQWNjZXNzb3IiLCJnZW5lcmF0ZVByZWZpeEFjY2Vzc29yIiwiX2tleSIsImhhc2giLCJyZXMiLCJfb2JqZWN0IiwiYXR0cmlidXRlIiwic3JjIiwiaXMiLCJ3aGF0IiwiaXAiLCJpcDQiLCJpcDYiLCJzbGQiLCJpZG4iLCJyZWxhdGl2ZSIsImhhcyIsIl9wcm90b2NvbCIsIl9wb3J0IiwiX2hvc3RuYW1lIiwic2NoZW1lIiwieCIsIm9yaWdpbiIsImF1dGhvcml0eSIsImhvc3QiLCJ1c2VyaW5mbyIsInJlc291cmNlIiwic3ViZG9tYWluIiwiZG9tYWluIiwic3ViIiwiUmVnRXhwIiwidGxkIiwiZ2V0IiwiUmVmZXJlbmNlRXJyb3IiLCJkaXJlY3RvcnkiLCJmaWxlbmFtZSIsImRlY29kZVBhdGhTZWdtZW50IiwibXV0YXRlZERpcmVjdG9yeSIsIm5vcm1hbGl6ZVBhdGgiLCJzdWZmaXgiLCJzIiwic2VnbWVudCIsInNlcGFyYXRvciIsImFic29sdXRlIiwiRXJyb3IiLCJwb3AiLCJ1bnNoaWZ0Iiwic2VnbWVudENvZGVkIiwicSIsInNldFF1ZXJ5Iiwic2V0U2VhcmNoIiwiYWRkU2VhcmNoIiwicmVtb3ZlU2VhcmNoIiwiaGFzU2VhcmNoIiwibm9ybWFsaXplIiwibm9ybWFsaXplUHJvdG9jb2wiLCJub3JtYWxpemVRdWVyeSIsIm5vcm1hbGl6ZUZyYWdtZW50Iiwibm9ybWFsaXplSG9zdG5hbWUiLCJub3JtYWxpemVQb3J0IiwiYmVzdCIsIl9wYXRoIiwiX3dhc19yZWxhdGl2ZSIsIl9sZWFkaW5nUGFyZW50cyIsIl9wYXJlbnQiLCJfcG9zIiwibm9ybWFsaXplUGF0aG5hbWUiLCJub3JtYWxpemVTZWFyY2giLCJub3JtYWxpemVIYXNoIiwiZCIsInJlYWRhYmxlIiwidXJpIiwidG9Vbmljb2RlIiwicXAiLCJrdiIsInJlc29sdmVkIiwicHJvcGVydGllcyIsImJhc2VkaXIiLCJyZWxhdGl2ZVRvIiwicmVsYXRpdmVQYXJ0cyIsImJhc2VQYXJ0cyIsImNvbW1vbiIsInJlbGF0aXZlUGF0aCIsImJhc2VQYXRoIiwicGFyZW50cyIsImVxdWFscyIsIm9uZV9tYXAiLCJ0d29fbWFwIiwiY2hlY2tlZCIsIm9uZV9xdWVyeSIsInR3b19xdWVyeSIsIldvcmtmbG93IiwiSW1hZ2VTaWduIiwiVHJhY2VzSGFuZGxlciIsIlRyYWNlc1RlbXBsYXRlIiwiSW5zdGFuY2Vmb3JtVGVtcGxhdGUiLCJJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZSIsIkluc3RhbmNlU2lnblRleHQiLCJSZWxhdGVkSW5zdGFuY2VzIiwiUmVsYXRlZFJlY29yZHMiLCJJbnN0YW5jZU1hY3JvIiwiY29udGV4dCIsIlRyYWNlc01hbmFnZXIiLCJpc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyIsImZpZWxkX2Zvcm11bGEiLCJpbmNsdWRlc09waW5pb25GaWVsZCIsImZvcm0iLCJmb3JtX3ZlcnNpb24iLCJfZm9ybV92ZXJzaW9uIiwiZmllbGRfZm9ybXVsYXMiLCJmaWVsZHMiLCJBcnJheSIsIk1ldGVvciIsImlzU2VydmVyIiwidXVmbG93TWFuYWdlciIsImdldEZvcm1WZXJzaW9uIiwiZGIiLCJmb3JtcyIsImZpbmRPbmUiLCJfaWQiLCJmb3JtX3ZlcnNpb25zIiwiZm9yRWFjaCIsImYiLCJyZWYiLCJjb25zb2xlIiwibG9nIiwiZjEiLCJmb3JtdWxhIiwiXyIsInNvbWUiLCJoZWxwZXJzIiwiaW5zdGFuY2VfdGFza3MiLCJDb2xsZWN0aW9uIiwiX3NpbXBsZVNjaGVtYSIsIlNpbXBsZVNjaGVtYSIsImluc3RhbmNlIiwidHJhY2UiLCJpc19maW5pc2hlZCIsInVzZXIiLCJ1c2VyX25hbWUiLCJoYW5kbGVyIiwiaGFuZGxlcl9uYW1lIiwiaGFuZGxlcl9vcmdhbml6YXRpb24iLCJoYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lIiwiaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWUiLCJzdGFydF9kYXRlIiwiRGF0ZSIsImR1ZV9kYXRlIiwiaXNfcmVhZCIsImlzX2Vycm9yIiwidmFsdWVzIiwiZGVhZGxpbmUiLCJyZW1pbmRfZGF0ZSIsInJlbWluZGVkX2NvdW50IiwiTnVtYmVyIiwicmVhZF9kYXRlIiwiZGVzY3JpcHRpb24iLCJtb2RpZmllZCIsIm1vZGlmaWVkX2J5Iiwic2lnbl9zaG93IiwianVkZ2UiLCJuZXh0X3N0ZXBzIiwiZmluaXNoX2RhdGUiLCJjb3N0X3RpbWUiLCJzcGFjZSIsImluc3RhbmNlX25hbWUiLCJzdWJtaXR0ZXIiLCJzdWJtaXR0ZXJfbmFtZSIsImFwcGxpY2FudCIsImFwcGxpY2FudF9uYW1lIiwiYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lIiwic3VibWl0X2RhdGUiLCJmbG93IiwiZmxvd19uYW1lIiwic3RlcCIsInN0ZXBfbmFtZSIsImNhdGVnb3J5X25hbWUiLCJpbnN0YW5jZV9zdGF0ZSIsImRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSIsImZvcndhcmRfZnJvbV9pbnN0YW5jZSIsImtleXdvcmRzIiwiaXNfYXJjaGl2ZWQiLCJjYXRlZ29yeSIsImF1dGhfdG9rZW5zIiwiX2dldExvY2FsZSIsIl9nZXRSZXF1aXJlZEZpZWxkcyIsIl9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyIsIl9nZXRTdGFydFN0ZXBSZXF1aXJlZEZpZWxkcyIsIl9nZXRUZW1wbGF0ZURhdGEiLCJfZ2V0Vmlld0h0bWwiLCJnZXRMaW5rVGV4dCIsIm1hcmtlZCIsInJlcXVpcmUiLCJJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUiLCJpbnN0YW5jZV9hdHRhY2htZW50IiwiYWZTZWxlY3RVc2VyUmVhZCIsImFmRm9ybUdyb3VwUmVhZCIsImFmRm9ybUdyb3VwIiwiY3JlYXRlIiwidGVtcGFsdGVOYW1lIiwic3RlZWRvc0RhdGEiLCJ0ZW1wbGF0ZSIsInRlbXBsYXRlQ29tcGlsZWQiLCJ0ZW1wbGF0ZVJlbmRlckZ1bmN0aW9uIiwiU3BhY2ViYXJzQ29tcGlsZXIiLCJjb21waWxlIiwiaXNCb2R5IiwiZXZhbCIsIlRlbXBsYXRlIiwiQmxhemUiLCJjcmVhdGVJbnN0YW5jZVNpZ25UZXh0IiwiaW5zdGFuY2VTaWduVGV4dENvbXBpbGVkIiwiaW5zdGFuY2VTaWduVGV4dEh0bWwiLCJpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb24iLCJpbnN0YW5jZVNpZ25UZXh0IiwiY3JlYXRlSW1hZ2VTaWduIiwiaW1hZ2VTaWduQ29tcGlsZWQiLCJpbWFnZVNpZ25IdG1sIiwiaW1hZ2VTaWduUmVuZGVyRnVuY3Rpb24iLCJpbWFnZVNpZ24iLCJjcmVhdGVUcmFjZXNIYW5sZGVyIiwidHJhY2VzSGFubGRlckNvbXBpbGVkIiwidHJhY2VzSGFubGRlckh0bWwiLCJ0cmFjZXNIYW5sZGVyUmVuZGVyRnVuY3Rpb24iLCJpbnN0YW5jZV90cmFjZXNfaGFuZGxlciIsImluaXQiLCJpdGVtIiwibGFiZWwiLCJkZXRhaWxfdXJsIiwiU3RlZWRvcyIsImFic29sdXRlVXJsIiwiZ2V0VmFsdWUiLCJmaWVsZCIsImxvY2FsZSIsInV0Y09mZnNldCIsImRhdGUiLCJmaWVsZE9wdGlvbnMiLCJob3VycyIsIm1vbnRoIiwibmFtZUZpZWxkIiwicmVjb3JkcyIsInNlY29uZHMiLCJzZWxlY3RlZE9wdGlvbiIsInNlbGVjdGVkT3B0aW9ucyIsInNwbGl0ZWRWYWx1ZXMiLCJ0MCIsInQxIiwidWlTY2hlbWEiLCJ5ZWFyIiwibiIsIml0ZW1TcGxpdHMiLCJlbmNvZGVVUkkiLCJlcnJvciIsImlzX211bHRpc2VsZWN0IiwiZ2V0UHJvcGVydHkiLCJmdWxsbmFtZSIsIlRBUGkxOG4iLCJfXyIsImZvcm1hdERhdGUiLCJmb3JtYXRUaW1lIiwiaXNfdGV4dGFyZWEiLCJmaW5kIiwiZmlsdGVyIiwiaXNfcGVyY2VudCIsIm51bWJlclRvUGVyY2VudFN0cmluZyIsImRpZ2l0cyIsIm51bWJlclRvU3RyaW5nIiwiaXNDbGllbnQiLCJhdXRoUmVxdWVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhc3luYyIsIm9iamVjdEZpbmQiLCJmaWx0ZXJzIiwiZmlsZU5hbWUiLCJmaWxlUHJldmlld0h0bWwiLCJmaWxlVXJsIiwib3JpZ2luYWwiLCJDcmVhdG9yIiwiZ2V0T2JqZWN0IiwicmVmZXJlbmNlX3RvIiwiTkFNRV9GSUVMRF9LRVkiLCJyZWZlcmVuY2VfdG9fZmllbGQiLCJnZXRPYmplY3ROYW1lRmllbGRLZXkiLCJnZXRMYWJlbCIsImNvZGUiLCJmaW5kUHJvcGVydHlCeVBLIiwiZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbiIsImZvcm1fZmllbGRzIiwiY3VycmVudCIsIndoZXJlIiwiaGlzdG9yeXMiLCJnZXRGbG93VmVyc2lvbiIsImZsb3dfdmVyc2lvbiIsImZsb3dzIiwidmlld0h0bWwiLCJBc3NldHMiLCJnZXRUZXh0IiwicmVmMSIsInRvTG9jYWxlTG93ZXJDYXNlIiwicmV2IiwiaXNfcmVxdWlyZWQiLCJzdGVwcyIsImVkaXRhYmxlQ29kZSIsInN0YXJ0U3RlcCIsImtleXMiLCJwZXJtaXNzaW9ucyIsInJlcXVpcmVkRmllbGRzIiwiaW50ZXJzZWN0aW9uIiwiV29ya2Zsb3dNYW5hZ2VyIiwiV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdCIsImdldEF1dG9mb3JtU2NoZW1hVmFsdWVzIiwiaW5zbmFtZSIsImluc19zdGF0ZSIsInN0YXRlIiwiaW5zX2ZpbmFsX2RlY2lzaW9uIiwiaW5zX2NvZGUiLCJpbnNfaXNfYXJjaGl2ZWQiLCJpbnNfaXNfZGVsZXRlZCIsImFwcGxpY2FudENvbnRleHQiLCJzZXNzaW9uVXNlcklkIiwiZWRpdGFibGUiLCJzdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyIsInBhc3NpbmciLCJtb21lbnQiLCJmb3JtYXQiLCJnZXRJbnN0YW5jZVZpZXciLCJib2R5IiwiaW5zdGFuY2VDb21waWxlZCIsImluc3RhbmNlUmVuZGVyRnVuY3Rpb24iLCJpbnN0YW5jZVRlbXBsYXRlIiwiVGVtcGxhdGVNYW5hZ2VyIiwiZ2V0VGVtcGxhdGUiLCJ0ZW1wbGF0ZU5hbWUiLCJpbnN0YW5jZV9yZWFkb25seV92aWV3IiwidG9IVE1MV2l0aERhdGEiLCJnZXRUcmFjZXNWaWV3IiwidHJhY2VDb21waWxlZCIsInRyYWNlUmVuZGVyRnVuY3Rpb24iLCJ0cmFjZXNIdG1sIiwiaW5zdGFuY2Vfc3R5bGUiLCJ0cmFjZV9yZWFkb25seV92aWV3IiwidHJhY2VzIiwiZ2V0QXR0YWNobWVudFZpZXciLCJhdHRhY2htZW50Q29tcGlsZWQiLCJhdHRhY2htZW50SHRtbCIsImF0dGFjaG1lbnRSZW5kZXJGdW5jdGlvbiIsImF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXciLCJnZXRSZWxhdGVkSW5zdGFuY2VzVmlldyIsInJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCIsInJlbGF0ZWRJbnN0YW5jZXNIdG1sIiwicmVsYXRlZEluc3RhbmNlc1JlbmRlckZ1bmN0aW9uIiwicmVsYXRlZF9pbnN0YW5jZXNfdmlldyIsImdldFJlbGF0ZWRSZWNvcmRzVmlldyIsInJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQiLCJyZWxhdGVkUmVjb3Jkc0h0bWwiLCJyZWxhdGVkUmVjb3Jkc1JlbmRlckZ1bmN0aW9uIiwicmVsYXRlZF9yZWNvcmRzX3ZpZXciLCJnZXRPbkxvYWRTY3JpcHQiLCJmb3JtX3NjcmlwdCIsImdldEluc3RhbmNlSHRtbCIsImFsbENzc0xpbmsiLCJhdHRhY2htZW50IiwiY3JlYXRvclNlcnZpY2UiLCJjc3NIcmVmIiwiZm9ybURlc2NyaXB0aW9uIiwiZm9ybURlc2NyaXB0aW9uSHRtbCIsImh0bWwiLCJpbnNfcmVjb3JkX2lkcyIsImluc3RhbmNlQm94U3R5bGUiLCJqcUhyZWYiLCJvbkxvYWRTY3JpcHQiLCJvcGVuRmlsZVNjcmlwdCIsInJlbGF0ZWRfaW5zdGFuY2VzIiwicmVsYXRlZF9yZWNvcmRzIiwic2hvd1RyYWNlc0J0biIsInNob3dUcmFjZXNTY3JpcHQiLCJ0cmFjZUNoZWNrIiwid2lkdGgiLCJzZXR0aW5ncyIsIndlYnNlcnZpY2VzIiwiY3JlYXRvciIsInJlY29yZF9pZHMiLCJpc01vYmlsZSIsInNob3dUcmFjZSIsImZpbmFsX2RlY2lzaW9uIiwic2hvd0F0dGFjaG1lbnRzIiwiaXNFbXB0eSIsInRhZ2dlciIsInN0eWxlcyIsInBsdWdpbnMiLCJhZGRfc3R5bGVzIiwiZm9ybUlkIiwiaW5zdGFuY2VfdGl0bGUiLCJwYWdlVGl0bGUiLCJwYWdlVGl0bGVUckNsYXNzIiwidmFsIiwiQ29yZUZvcm0iLCJwYWdlVGl0bGVGaWVsZE5hbWUiLCJoYW5kbGVUYWJsZVRlbXBsYXRlIiwiX2V4cG9ydCIsInRhYmxlX2ZpZWxkcyIsInRhYmxlX2ZpZWxkIiwiZmllbGRfcGVybWlzc2lvbiIsInB1cmVDb2RlIiwicmVxdWlyZWQiLCJ0aXRsZV9wZXJtaXNzaW9uIiwicmVtb3ZlU3BlY2lhbENoYXJhY3RlciIsImlzT3BpbmlvbkZpZWxkIiwidHJfc3RhcnQiLCJ0ZF9jb2xzcGFuIiwidHJfZW5kIiwiaW5jbHVkZXMiLCJwZXJtaXNzaW9uIiwiX3RlbXBsYXRlIiwidGFibGUiLCJfdGVtcGxhdGVIZWxwcyIsInN0ZWVkb3NfaW5zdGFuY2UiLCJnZXRJbnN0YW5jZSIsImF0dHMiLCJpZCIsInN0eWxlIiwiZGlzYWJsZWQiLCJpbnN0YW5jZUlkIiwiZm9ybV90eXBlcyIsIkFwcHJvdmVNYW5hZ2VyIiwiaXNSZWFkT25seSIsInN0ZWVkb3NfZm9ybSIsImlubmVyc3ViZm9ybUNvbnRleHQiLCJkb2NfdmFsdWVzIiwiU2Vzc2lvbiIsImEiLCJiIiwiZ2V0QXV0b2Zvcm1TY2hlbWEiLCJpbnN0YW5jZV9ib3hfc3R5bGUiLCJib3giLCJpbnMiLCJwcmludF90ZW1wbGF0ZSIsImluc3RhbmNlX3RlbXBsYXRlIiwiU3RlZWRvc1RhYmxlIiwiY2hlY2tJdGVtIiwiaXRlbV9pbmRleCIsImZpZWxkT2JqIiwiZ2V0RmllbGQiLCJmaWVsZFZhbCIsImdldEl0ZW1Nb2RhbFZhbHVlIiwic2ZfbmFtZSIsInNmaWVsZHMiLCJzZiIsIkluc3RhbmNlTWFuYWdlciIsImNoZWNrRm9ybUZpZWxkVmFsdWUiLCIkIiwic2V0VGFibGVJdGVtVmFsdWUiLCJpdGVtX3ZhbHVlIiwidGFibGVWYWx1ZSIsImdldFRhYmxlVmFsdWUiLCJnZXRUYWJsZUl0ZW1WYWx1ZSIsInJlbW92ZVRhYmxlSXRlbSIsInJlbW92ZWQiLCJzZXRUYWJsZVZhbHVlIiwiZ2V0VmFsaWRWYWx1ZSIsInZhbGlkVmFsdWUiLCJoYW5kbGVEYXRhIiwiaW5zdGFuY2VGaWVsZHMiLCJnZXRJbnN0YW5jZUZpZWxkcyIsImdldE1vZGFsRGF0YSIsIkZvcm1fZm9ybXVsYSIsImdldEZvcm11bGFGaWVsZFZhcmlhYmxlIiwiQXV0b0Zvcm0iLCJnZXRGb3JtVmFsdWVzIiwiaW5zZXJ0RG9jIiwiYWRkSXRlbSIsIl9pdGVtX3ZhbHVlIiwiZ2V0S2V5cyIsImFwcGVuZCIsImdldFRyIiwidXBkYXRlSXRlbSIsInRkcyIsImdldFJlbW92ZVRkIiwic2ZpZWxkIiwiZ2V0VGQiLCJlbXB0eSIsInJ1bkZvcm11bGEiLCJyZW1vdmVJdGVtIiwiaGlkZSIsInNob3dNb2RhbCIsIm1ldGhvZCIsIm1vZGFsRGF0YSIsInNldFRpbWVvdXQiLCJNb2RhbCIsInNob3ciLCJnZXRDdXJyZW50RGF0YUZvckZvcm0iLCJzcyIsImdldEZvcm1TY2hlbWEiLCJzY2hlbWEiLCJvYmplY3RLZXlzIiwiX21ha2VHZW5lcmljIiwiZ2V0VGhlYWQiLCJpc09iamVjdCIsInRoZWFkIiwidHJzIiwic2ZfbGVuZ3RoIiwid2lkZV9maWVsZHMiLCJmaWx0ZXJQcm9wZXJ0eSIsImlzX3dpZGUiLCJnZXRUYm9keSIsInNmaWVsZHNFZGl0YWJsZSIsInRib2R5IiwidHIiLCJ0ZCIsInRkX3ZhbHVlIiwiZ2V0VERWYWx1ZSIsInZpZXciLCJDRkRhdGFNYW5hZ2VyIiwiZ2V0Rm9ybXVsYVNwYWNlVXNlcnMiLCJ1IiwiZ2V0Rm9ybXVsYU9yZ2FuaXphdGlvbnMiLCJvIiwiZ2V0Rm9ybXVsYU9yZ2FuaXphdGlvbiIsInBsdWNrIiwiYWRkSW5wdXRUeXBlIiwidmFsdWVPdXQiLCJ2YWx1ZUNvbnZlcnRlcnMiLCJzdHJpbmdUb1N0cmluZ0FycmF5Iiwic3RyaW5nVG9OdW1iZXIiLCJzdHJpbmdUb051bWJlckFycmF5Iiwic3RyaW5nVG9Cb29sZWFuIiwic3RyaW5nVG9Cb29sZWFuQXJyYXkiLCJzdHJpbmdUb0RhdGUiLCJzdHJpbmdUb0RhdGVBcnJheSIsImNvbnRleHRBZGp1c3QiLCJtYXhsZW5ndGgiLCJhZlRhYmxlIiwiZXZlbnRzIiwiZXZlbnQiLCJuZXdfaXRlbV9pbmRleCIsImN1cnJlbnRUYXJnZXQiLCJkYXRhc2V0Iiwic2V0IiwicmVuZGVyZWQiLCJzdHIiLCJhZGRJdGVtVHIiLCJnZXRDdXJyZW50U3RlcCIsInN0ZXBfdHlwZSIsImNjSGFzRWRpdFBlcm1pc3Npb24iLCJhdXRvcnVuIiwiY3VycmVudERhdGEiLCJzcGFjZVVzZXJTaWduIiwidXNlcklkIiwic3BhY2VfdXNlcl9zaWducyIsImltYWdlVVJMIiwic2lnbiIsInNob3dTaWduSW1hZ2UiLCJ0cmFjZVNob3dTaWduSW1hZ2UiLCJvYmplY3RVcmwiLCJvYmplY3RfbmFtZSIsInJlY29yZF9pZCIsImFwcF9pZCIsImdldE9iamVjdFVybCIsInVuZW1wdHkiLCJ1bmVxdWFscyIsImluY2x1ZGUiLCJyZWYyIiwicmVmMyIsImdldEluc3RhbmNlRmxvd1ZlcnNpb24iLCJhcHByb3ZlcyIsInJlZjQiLCJhcHByb3ZlIiwianVkZ2VfbmFtZSIsIm9waW5pb25fZmllbGRzX2NvZGUiLCJzaWduX2ZpZWxkX2NvZGUiLCJhZnRlcl9maWVsZCIsImJlZm9yZV9maWVsZCIsInByZV9maWVsZHMiLCJwcmVfd2lkZV9maWVsZHMiLCJzb3J0X2FwcHJvdmUiLCJvcmRlciIsInAxIiwicDIiLCJfcDEiLCJfcDIiLCJnZXRUaW1lIiwiX3QiLCJpc1RleHRhcmVhIiwiZ2V0Q2ZDbGFzcyIsImdldFRhYmxlVGhlYWQiLCJnZXRUYWJsZUJvZHkiLCJzaG93TGFiZWwiLCJ0ZW1wbGF0ZURhdGEiLCJnZXRPcGluaW9uRmllbGRTdGVwc05hbWUiLCJ0b3Bfa2V5d29yZHMiLCJmb28xIiwib3BpbmlvbkZpZWxkcyIsImZvbyIsImpzb25fZm9ybXVsYSIsInMxIiwiZXJyb3IxIiwieWlqaWFubGFuIiwic3RlcE5hbWUiLCJpbWFnZV9zaWduIiwib25seV9jY19vcGluaW9uIiwib25seV9jYyIsImRlZmF1bHRfZGVzY3JpcHRpb24iLCJvbmx5X2hhbmRsZXIiLCJzaG93Q0NPcGluaW9uIiwibWFya0Rvd25Ub0h0bWwiLCJtYXJrRG93blN0cmluZyIsIk5wbSIsIlNwYWNlYmFycyIsIlNhZmVTdHJpbmciLCJmX2xhYmVsIiwidGhhdCIsImlzU2VjdGlvbiIsInJlZ2lzdGVySGVscGVyIiwiaW5zX2F0dGFjaF9kb3dubG9hZF91cmwiLCJnZXRQZXJtaXNzaW9ucyIsImluc3RhbmNlZm9ybUNoYW5nZUV2ZW50IiwicHJldmVudERlZmF1bHQiLCJvcGVuV2luZG93IiwidGFyZ2V0Iiwib25DcmVhdGVkIiwiY29tcGlsZWQiLCJpbnN0YW5jZUN1c3RvbVRlbXBsYXRlIiwiaW5zdGFuY2VWaWV3IiwicmVuZGVyRnVuY3Rpb24iLCJWaWV3IiwiaW5zdGFuY2VfY3VzdG9tX3RlbXBsYXRlIiwib25SZW5kZXJlZCIsImN1cnJlbnRBcHByb3ZlIiwiY3VycmVudFN0ZXAiLCJmb3JtdWxhX2ZpZWxkcyIsImluc3RhbmNlTnVtYmVyRmllbGRzIiwic2V0SW5zdGFuY2VGb3JtQXBwbGljYW50IiwibmV4dFN0ZXBzIiwibmV4dFN0ZXBVc2VycyIsIkluc3RhbmNlRXZlbnQiLCJpbml0RXZlbnRzIiwiZ2V0Q3VycmVudEFwcHJvdmUiLCJlYWNoIiwiZWxlbWVudCIsInNjaGVtYUtleSIsInRvYXN0ciIsInJlYXNvbiIsImdldEZpZWxkVmFsdWUiLCJJbnN0YW5jZU51bWJlclJ1bGVzIiwiaW5zdGFuY2VOdW1iZXJCdWlsZGVyIiwidHJpZ2dlciIsInJ1biIsInNob3dNYWluVGl0bGUiLCJ3b3JrZmxvd01haW5BdHRhY2hUaXRsZSIsImVuYWJsZWRfYWRkX21haW5fYXR0YWNobWVudCIsImN1cnJlbnRfc3RlcCIsImN1cnJlbnRUcmFjZSIsImdldEN1cnJlbnRUcmFjZSIsIm1haW5fYXR0YWNoX2NvdW50IiwiY2ZzIiwiaW5zdGFuY2VzIiwiY291bnQiLCJkaXN0cmlidXRlX21haW5fYXR0YWNoX2NvdW50Iiwic3RhcnRfc3RlcCIsImdldFN0YXJ0U3RlcCIsImNhbl9lZGl0X21haW5fYXR0YWNoIiwiZW5hYmxlZF9lZGl0X25vcm1hbF9hdHRhY2htZW50IiwiZ2V0RmxvdyIsInVwbG9hZF9hZnRlcl9iZWluZ19kaXN0cmlidXRlZCIsImlzQ0MiLCJnZXRDQ1N0ZXAiLCJjYW5fZWRpdF9ub3JtYWxfYXR0YWNoIiwibWFpbl9hdHRhY2htZW50IiwibWFpbl9hdHRhY2giLCJub3JtYWxfYXR0YWNobWVudHMiLCJzZWxlY3RvciIsIiRuZSIsImRmaXMiLCJkaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzIiwiJGluIiwiZGlzdHJpYnV0ZV9tYWluIiwiZmlyc3RWZXJzaW9uTWFpbiIsIm1ldGFkYXRhIiwicGFyZW50IiwiYXR0YWNobWVudFVwbG9hZGVkQXQiLCJ1cGxvYWRlZEF0IiwiZmlyc3RWZXJzaW9uIiwic29ydEJ5IiwiaW5zdGFuY2VJZHMiLCJhdHRhY2htZW50c19jb3VudCIsImZsb3dfZmlsZXMiLCJmaWxlcyIsImlzRHJhZnRBbmRGbG93ZmlsZXNFeGlzdCIsImNvbXBhY3QiLCJhdHRhY2htZW50cyIsIiRvciIsImZldGNoIiwibXlBcHByb3ZlIiwibXlUcmFjZSIsImlzSW5ib3giLCJkZWZhdWx0RGVzY3JpcHRpb24iLCJhcHByb3ZlX3NvcnQiLCJhcHByb3Zlc0dyb3VwIiwiYXBwcm92ZXNfc29ydGVkIiwiY29tcGxldGVkX2RhdGUiLCJoYXNOZXh0IiwiaGF2ZURlc2NyaXB0aW9uQXBwcm92ZSIsImlzX2NvbXBsZXRlZCIsImxhc3QiLCJ0b3BfYXBwcm92ZXMiLCJ1bmlvbiIsInRvcF9hcHByb3ZlIiwiZ3JvdXBCeSIsImhhbmRsZXJBcHByb3ZlcyIsImRlc2NyaXB0aW9uQXBwcm92ZXMiLCJ3b3JrZmxvdyIsInNob3dCbGFua0FwcHJvdmVEZXNjcmlwdGlvbiIsIl9kaXNwbGF5IiwiaXNNeUFwcHJvdmUiLCJteUFwcHJvdmVEZXNjcmlwdGlvbiIsImFwcHJvdmVJZCIsIm5vdyIsImlzT3Bpbmlvbk9mRmllbGQiLCJpbWFnZVNpZ25EYXRhIiwiZ2V0TGFzdFNpZ25BcHByb3ZlIiwiZ2V0SGFuZGxlclNpZ25TaG93QXBwcm92ZXMiLCJsYXN0TXlBcHByb3ZlRGVzY3JpcHRpb24iLCJzaG93QXBwcm92ZSIsImp1ZGdlX2Rlc2NyaXB0aW9uIiwiaXNfYXBwcm92ZWQiLCJpc19yZWplY3RlZCIsImlzX3JlYWRlZCIsImFkZENsYXNzIiwiZGF0ZUZvcm1hdCIsImdldEZ1bGxZZWFyIiwiZ2V0U3RlcE5hbWUiLCJzdGVwSWQiLCJnZXRJbnN0YW5jZVN0ZXAiLCJzaG93RGVsZXRlQnV0dG9uIiwiYXBwcm92ZWQiLCJmcm9tX3VzZXIiLCJpc1Nob3dNb2RpZmljYXRpb25CdXR0b24iLCJhcHByb3ZlX2FkbWlucyIsImlzU2hvdyIsImNvbnRhaW5zIiwiaXNFZGl0aW5nIiwiaXNfZWRpdGluZyIsImlzU2hvd0Rlc2NyaXB0aW9uIiwiZ2V0QXBwcm92ZVN0YXR1c0ljb24iLCJhcHByb3ZlSnVkZ2UiLCJhdXRvU3VibWl0dGVkIiwiYXBwcm92ZVN0YXR1c0ljb24iLCJnZXRBcHByb3ZlU3RhdHVzVGV4dCIsImFwcHJvdmVTdGF0dXNUZXh0IiwiZ2V0QXBwcm92ZUp1ZGdlQ2xhc3MiLCJpc0ZvcndhcmQiLCJzaG93Rm9yd2FyZERlbGV0ZUJ1dHRvbiIsImZvcndhcmRfaW5zdGFuY2UiLCJpc0Rpc3RyaWJ1dGUiLCJzaG93RGlzdHJpYnV0ZURlbGV0ZUJ1dHRvbiIsImhhc0Zsb3dBZG1pblBlcm1pc3Npb24iLCJmaW5pc2hEYXRlU2NoZW1hIiwiaXNBbmRyb2lkT3JJT1MiLCJhdXRvZm9ybSIsIm9wdGlvbmFsIiwicmVhZG9ubHkiLCJkYXRlVGltZVBpY2tlck9wdGlvbnMiLCJpZ25vcmVSZWFkb25seSIsIndpZGdldFBvc2l0aW9uaW5nIiwiaG9yaXpvbnRhbCIsImZpbmlzaERhdGVWYWx1ZXMiLCJzaG93VHJhY2VzVmlldyIsInNob3dfbW9kYWxfdHJhY2VzX2xpc3QiLCJzcGFjZV9zZXR0aW5ncyIsImdldEluc3RhbmNlU3RhdGVUZXh0IiwiaW5zdGFuY2VfaWQiLCJnZXRJbnN0YW5jZVN0YXRlQ29sb3IiLCJjbGEiLCJmaXJzdFRyYWNlIiwibGFzdF9kaXN0cmlidXRlX2Zyb20iLCJkaXNfaW5mbyIsIiRleGlzdHMiLCJjcmVhdGVkIiwiY3JlYXRlZF9ieSIsIlVVZmxvd19hcGkiLCJnZXROYW1lRm9yVXNlciIsInVzZXJzIiwiZnJvbV91c2VyX25hbWUiLCJpc0NDT3JEaXN0cmlidXRlT3JGb3J3YXJkVGVybWluYXRlZCIsImp1ZGdlVGVybWluYXRlZCIsImluc3RhbmNlRXhpc3RzIiwiYWdlbnREZXNjcmlwdGlvbiIsInVzZXJOYW1lIiwidHJhY2VOYW1lIiwidHJhY2VJZCIsImhhbmRsZXJEb2MiLCJoYW5kbGVySWQiLCJ1c2Vyc19jYW5fcmVhZF9jY19oYW5kbGVyX2RldGFpbF9pbmZvIiwiZ2V0Q29udGFjdEluZm9Gb3JVc2VyIiwic3RvcFByb3BhZ2F0aW9uIiwiY2FsbGluZyIsImVyciIsInJlbW92ZUNsYXNzIiwic3VjY2VzcyIsImFsbG93TXVsdGlwbGUiLCJjbG9zZXN0IiwidGFyZ2V0X3VzZXJfaWQiLCJvcGVuU2FmZU9iamVjdFVybCIsImZvcndhcmRfc3BhY2UiLCJmb3J3YXJkc3BhY2UiLCJmb3J3YXJkaW5zdGFuY2UiLCJUcmFja2VyIiwiYWZ0ZXJGbHVzaCIsIm9uIiwic2Nyb2xsVG9wIiwiZmluaXNoX2lucHV0Iiwib3Bpbmlvbl9pbnB1dCIsInNob3dSZWxhdGVkSW5zdGFjZXMiLCJyZWxhdGVkX2luc3RhY2VzIiwicmVsYXRlZF9pbnN0YWNlX3VybCIsImlzQ29yZG92YSIsInNob3dfZGVsZXRlIiwic2hvd1JlbGF0ZWRSZWNvcmRzIiwicmVsYXRlZFJlY29yZFVybCIsIm9iamNldE5hbWUiLCJpZHMiLCJwcm9jZXNzIiwiZW52IiwiQ1JFQVRPUl9OT0RFX0VOViIsIkpzb25Sb3V0ZXMiLCJhZGQiLCJyZXEiLCJuZXh0IiwiaGFzaERhdGEiLCJhY3Rpb24iLCJ0b191c2VycyIsInNlbmRSZXN1bHQiLCJzdGFjayIsImVycm9ycyIsImVycm9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJ3b3JrZmxvd01ldGhvZHMiLCJtZXRob2RzIiwic2V0X2luc3RhbmNlX3N0ZXBfYXBwcm92ZSIsImluc19pZCIsInN0ZXBfYXBwcm92ZSIsInN0ZXBzQXBwcm92ZXNPcHRpb25zIiwiYXBwbHkiLCJzZXRfaW5zdGFuY2Vfc2tpcF9zdGVwcyIsImdldF9pbnN0YW5jZV9kYXRhIiwiZm9ybUNhY2hlZCIsImZsb3dDYWNoZWQiLCJkcmFmdF9zYXZlX2luc3RhbmNlIiwiaW5ib3hfc2F2ZV9pbnN0YW5jZSIsImNjX2RvIiwiY2NfdXNlcl9pZHMiLCJjY19yZWFkIiwiY2Nfc3VibWl0IiwiY2NfcmVtb3ZlIiwiYmF0Y2hfY2FuY2VsX2NjIiwiYXBwcm92ZV9pZHMiLCJjY19zYXZlIiwic3BhY2VfaWQiLCJmbG93X2lkIiwiaGFzU2F2ZUluc3RhbmNlVG9BdHRhY2htZW50IiwiaXNGb3J3YXJkQXR0YWNobWVudHMiLCJzZWxlY3RlZFVzZXJzIiwiYWN0aW9uX3R5cGUiLCJyZWxhdGVkIiwiZnJvbV9hcHByb3ZlX2lkIiwiZm9yd2FyZF9yZW1vdmUiLCJ0cmFjZV9pZCIsImFwcHJvdmVfaWQiLCJjYW5jZWxEaXN0cmlidXRlIiwiY2ZzX2luc3RhbmNlc19yZW1vdmUiLCJmaWxlX2lkIiwiY2ZzX2luc3RhbmNlc19zZXRfY3VycmVudCIsImNmc19pbnN0YW5jZXNfbG9jayIsInVzZXJfaWQiLCJjZnNfaW5zdGFuY2VzX3VubG9jayIsImRvd25sb2FkX3NwYWNlX2luc3RhbmNlX2F0dGFjaG1lbnRzX3RvX2Rpc2siLCJzcGFjZUlkIiwiY2ZzUmVjb3JkSWRzIiwic2V0X2FwcHJvdmVfaGF2ZV9yZWFkIiwiY2hhbmdlX2FwcHJvdmVfaW5mbyIsInVwZGF0ZV9hcHByb3ZlX3NpZ24iLCJzaWduX3R5cGUiLCJsYXN0U2lnbkFwcHJvdmUiLCJ1cGRhdGVfc2lnbl9zaG93Iiwib2JqcyIsIm15QXBwcm92ZV9pZCIsImluc3RhbmNlX3JldHVybiIsImluc3RhbmNlX3JlbWluZCIsInJlbWluZF91c2VycyIsInJlbWluZF9jb3VudCIsInJlbWluZF9kZWFkbGluZSIsImFjdGlvbl90eXBlcyIsIm5leHRfc3RlcF91c2Vyc19ub3RfZm91bmQiLCJkZWFsX3R5cGUiLCJwYXJhbXMiLCJfZXZhbCIsImNoZWNrX21haW5fYXR0YWNoIiwicmVtb3ZlX3JlbGF0ZWQiLCJyZV9pbnNfaWQiLCJ1cGRhdGVfaW5zdGFuY2VfcmVsYXRlZCIsInVwZGF0ZUZsb3dQb3NpdGlvbiIsInVwZGF0ZUZsb3dSb2xlIiwic3RhcnRfZmxvdyIsImZsb3dJZCIsImdldF9pbnN0YW5jZV90cmFjZXMiLCJjYXRlZ29yeUlkIiwiZmxvd0lkcyIsImdldF9iYXRjaF9pbnN0YW5jZXMiLCJnZXRfYmF0Y2hfaW5zdGFuY2VzX2NvdW50IiwiZ2V0X215X2FwcHJvdmVzIiwiY2hhbmdlX2Zsb3dfc3RhdGUiLCJoaWRlX2luc3RhbmNlIiwiaW5zSWQiLCJpc19oaWRkZW4iLCJnZXRJbnN0YW5jZVZhbHVlcyIsIkNvb2tpZXMiLCJnZXRJbnN0YW5jZVJlYWRPbmx5IiwiX2hhc1Blcm1pc3Npb24iLCJfbG9jYWxlIiwiX3BhcmVudF9pbnN0YW5jZXMiLCJkYXRhQnVmIiwiaGlkZV90cmFjZXMiLCJzcGFjZVVzZXJDb3VudCIsImdldEFQSUxvZ2luVXNlciIsImFjY2Vzc190b2tlbiIsImdldFVzZXJJZEZyb21BY2Nlc3NUb2tlbiIsInNwYWNlcyIsInNwYWNlX3VzZXJzIiwiaGFzSW5zdGFuY2VQZXJtaXNzaW9ucyIsIl9wYXJlbnRfaWQiLCJfcGFyZW50X2lucyIsImNoYXJzZXQiLCJCdWZmZXIiLCJzZXRIZWFkZXIiLCJzdGF0dXNDb2RlIiwicmV0X3N5bmNfdG9rZW4iLCJzcGFjZVVzZXIiLCJzcGFjZVVzZXJPcmdhbml6YXRpb25zIiwic3luY190b2tlbiIsIkFQSUF1dGhlbnRpY2F0aW9uQ2hlY2siLCJoZWFkZXJzIiwiaXNTcGFjZUFkbWluIiwib3JnYW5pemF0aW9ucyIsImNhbk1vbml0b3IiLCJjYW5BZG1pbiIsIiRndCIsIiRuaW4iLCJpbmJveF91ZXJzIiwiY2NfdXNlcnMiLCJvdXRib3hfdXNlcnMiLCJza2lwIiwibGltaXQiLCJjb3BpZXMiLCJhbGxDc3MiLCJXZWJBcHAiLCJnZXRSZWZyZXNoYWJsZUFzc2V0cyIsImNzcyIsInJvb3RVcmwiLCJfX21ldGVvcl9ydW50aW1lX2NvbmZpZ19fIiwiUk9PVF9VUkxfUEFUSF9QUkVGSVgiLCJST09UX1VSTCIsImVuZHNXaXRoIiwiaCIsImciLCJtIiwiayIsImdldEVhY2giLCJ1bmlxIiwibWl4aW4iLCJkZXN0IiwiaGFuZGVyVXNlck9iamVjdCIsIm9yZ2FuaXphdGlvbiIsImhyIiwic29ydF9ubyIsIm1vYmlsZSIsIndvcmtfcGhvbmUiLCJwb3NpdGlvbiIsInVzZXJSb2xlcyIsInJvbGVzIiwiaGFuZGVyT3JnT2JqZWN0Iiwib3JnIiwiaW5pdF9mb3JtdWxhX3ZhbHVlcyIsImF1dG9Gb3JtRG9jIiwiYXBwcm92ZXIiLCJfX3ZhbHVlcyIsInRhYmxlRmllbGRzIiwidGFibGVWYWx1ZXMiLCJmb3JtdWxhVGFibGVWYWx1ZXMiLCJfX3RhYmxlVmFsdWVzIiwidGFibGVmaWVsZCIsImdldEZvcm11bGFVc2VyT2JqZWN0cyIsImdldEZvcm11bGFPcmdPYmplY3RzIiwiZ2V0Rm9ybXVsYVVzZXJPYmplY3QiLCJwdWJsaXNoIiwiY2hlY2siLCJyZWFkeSIsImNhdGVnb3JpZXMiLCJhcHAiLCJmbG93X3Bvc2l0aW9ucyIsInJvbGUiLCJwdWJsaXNoQ29tcG9zaXRlIiwidGFibGVOYW1lIiwiTWF0Y2giLCJPcHRpb25hbCIsInVuYmxvY2siLCJjaGlsZHJlbiIsImZsb3dfcm9sZXMiLCJjcmVhdGVUZW1wbGF0ZUZvcm1BbmRGbG93IiwicGVybXMiLCJjb21wYW55X2lkIiwiZGlzdHJpYnV0ZV9vcHRpb25hbF91c2VycyIsImRpc3RyaWJ1dGVfdG9fc2VsZiIsImVuYWJsZV9hbWlzZm9ybSIsInZlcnNpb25JZCIsImhhbmRsZSIsInNlbGYiLCJsYXRlc3QiLCJvYnNlcnZlQ2hhbmdlcyIsImNoYW5nZWQiLCJhZGRlZCIsIm9uU3RvcCIsInN0b3AiLCJmbG93X2lkcyIsImRpc3RyaWJ1dGVfZW5kX25vdGlmaWNhdGlvbiIsImFsbG93X3NlbGVjdF9zdGVwIiwiYW1pc19zY2hlbWEiLCJnZXRNaW5pSW5zdGFuY2UiLCJnZXRNeWFwcHJvdmVNb2RpZmllZCIsImluc3RhbmNlX2ZpZWxkc18wIiwibWluaUFwcHJvdmVGaWVsZHMiLCJuZWVkQ2hhbmdlIiwidHJpZ2dlckNoYW5nZUZpZWxkcyIsInRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXMiLCJteUFwcHJvdmVNb2RpZmllZHMiLCJfaW5zdGFuY2VJZCIsIl90cmFjZSIsImNoYW5nZUZpZWxkcyIsIl9jaGFuZ2UiLCJfcmV2IiwiX215X2FwcHJvdmVfbW9kaWZpZWRzIiwiaXNFcXVhbCIsImdldEluc3RhbmNlVHJhY2VzIiwiX2luc0lkIiwiaW5ib3hfdXNlcnMiLCJhc3luY0xhc3RGaW5pc2hlZEFwcHJvdmUiLCJsYXN0RmluaXNoZWRBcHByb3ZlQWdncmVnYXRlIiwiaW5zdGFuY2VpZCIsImRhdGFNYXAiLCJvcGVyYXRpb24iLCJyYXdDb2xsZWN0aW9uIiwiYWdncmVnYXRlIiwidG9BcnJheSIsImRvYyIsImlzRnVuY3Rpb24iLCJ3cmFwQXN5bmMiLCJnZXRNeUFwcHJvdmUiLCJnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUiLCJnZXRTdGVwQ3VycmVudE5hbWUiLCJub3RGaW5pc2hlZFRyYWNlcyIsImFnZW50Iiwic3RlcEN1cnJlbnROYW1lIiwiJHNsaWNlIiwibXlMYXN0RmluaXNoZWRBcHByb3ZlIiwiYWdlbnRfdXNlcl9uYW1lIiwibXlfZmluaXNoX2RhdGUiLCJpc19jYyIsImNjX2NvdW50IiwidGFidWxhck5hbWUiLCJpbnN0YW5jZV9pZHMiLCJyZWxhdGVkX2luc3RhbmNlX2lkcyIsIl9hc3luY19nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlIiwiX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGUiLCJfaXRlbXMiLCIkbWF0Y2giLCIkZ3JvdXAiLCIkc3VtIiwiX2NoYW5nZURhdGEiLCJfZmxvd3NEYXRhIiwiX2luaXQiLCJkYXRhSXRlbSIsImZsb3dfaW5zdGFuY2UiLCJvYnNlcnZlIiwiZ2V0Q29sbGVjdGlvbiIsIndvcmtmbG93VGVtcGxhdGUiLCJzdGFydHVwIiwiYWJzb2x1dGVfcGF0aF9jbiIsImFic29sdXRlX3BhdGhfdXMiLCJmaWxlc0xpc3RfY24iLCJmaWxlc0xpc3RfdXMiLCJmcyIsIm1pbWUiLCJwYXRoX2NuIiwicGF0aF91cyIsInJlYWRGaWxlTGlzdCIsInBhdGhEaXIiLCJmaWxlc0xpc3QiLCJyZWFkZGlyU3luYyIsInN0YXQiLCJzdGF0U3luYyIsImlzRGlyZWN0b3J5Iiwid29ya2Zsb3dUZW1wbGF0ZXMiLCJyZXNvbHZlIiwiZXhpc3RzU3luYyIsImZpbGUiLCJyZWFkRmlsZVN5bmMiLCJnb19uZXh0IiwicnVsZSIsInNjaGVkdWxlIiwiY3JvbiIsImF1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvbiIsInNjaGVkdWxlSm9iIiwiYmluZEVudmlyb25tZW50IiwidGltZSIsInByb2Nlc3NfZGVsZWdhdGlvbl9ydWxlcyIsInVwZGF0ZSIsImVuYWJsZWQiLCJlbmRfdGltZSIsIiRsdGUiLCIkc2V0IiwibXVsdGkiLCJ0aW1lRW5kIiwidGltZW91dF9hdXRvX3N1Ym1pdCIsInRpbWVvdXRBdXRvU3VibWl0IiwiVGFidWxhclRhYmxlcyIsInJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXIiLCJUYWJ1bGFyIiwiVGFibGUiLCJjb2xsZWN0aW9uIiwiY29sdW1ucyIsInRpdGxlIiwib3JkZXJhYmxlIiwicmVuZGVyIiwiaW5wdXQiLCJzdGVwX2N1cnJlbnRfbmFtZSIsImN1cnJlbnRfc3RlcF9uYW1lIiwiZG9tIiwibGVuZ3RoQ2hhbmdlIiwiZXh0cmFGaWVsZHMiLCJwYWdlTGVuZ3RoIiwiaW5mbyIsInNlYXJjaGluZyIsInJlc3BvbnNpdmUiLCJkZXRhaWxzIiwiYXV0b1dpZHRoIiwiY2hhbmdlU2VsZWN0b3IiLCJjdXJTcGFjZVVzZXIiLCIkYW5kIiwiYWRtaW5zIiwiZmwiLCJleHRlbmQiLCJHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyIsIl9nZXRfaW5ib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyIsIl9nZXRfb3V0Ym94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMiLCJfaGFuZGxlTGlzdEZpZWxkcyIsImluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyIiwiaW5zdGFuY2VzTGlzdFRhYmxlVGFidWxhciIsIm5ld0luc3RhbmNlc0xpc3RUYWJ1bGFyIiwidXBkYXRlVGFidWxhclRpdGxlIiwic3VicyIsIlN1YnNNYW5hZ2VyIiwiaW5zX2ZpZWxkcyIsInB1YiIsIm9uVW5sb2FkIiwiaW5zdGFuY2VfbGlzdCIsIl90YWJsZUNvbHVtbnMiLCJkcmF3Q2FsbGJhY2siLCJlbGxpcHNpc0xpbmsiLCJlbXB0eVRkIiwiY29sU3BhbiIsImlzUGFkIiwicGVyZmVjdFNjcm9sbGJhciIsIm9JbnN0YW5jZSIsImF0dHIiLCJjbGljayIsImdvUGFnZSIsImhlaWdodCIsInBhZ2VzIiwiY2VpbCIsImZuUmVjb3Jkc0Rpc3BsYXkiLCJfaURpc3BsYXlMZW5ndGgiLCJEYXRhVGFibGUiLCJwYWdlIiwiZHJhdyIsImJsdXIiLCJjdXJyZW50UGFnZSIsImtleWRvd24iLCJrZXlDb2RlIiwiY3JlYXRlZFJvdyIsInJvdyIsImRhdGFJbmRleCIsIkZsb3dSb3V0ZXIiLCJzZXRBdHRyaWJ1dGUiLCJhZ2VudF92aWV3IiwiY2NfdmlldyIsImluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MiLCJtb2RpZmllZEZyb21Ob3ciLCJtb2RpZmllZFN0cmluZyIsInByaW9yaXR5SWNvbiIsInByaW9yaXR5SWNvbkNsYXNzIiwicHJpb3JpdHlWYWx1ZSIsInN0ZXBfY3VycmVudF9uYW1lX3ZpZXciLCJ1bnJlYWQiLCJtb21lbnRSZWFjdGl2ZUZyb21Ob3ciLCJwcmlvcml0eSIsInZpc2libGUiLCJjY190YWciLCJyZWNvcmRfbmVlZCIsImxlbmd0aE1lbnUiLCJzcGFjZV91c2VyIiwicGFnaW5nVHlwZSIsImlzX2xpc3RfZGlzcGxheSIsImluYm94X2luc3RhbmNlcyIsIm91dGJveF9pbnN0YW5jZXMiLCJnZXRTb3J0IiwiZmxvd0luc3RhbmNlcyIsIlJlYWN0aXZlVmFyIiwiX2NoYW5nZU9yZGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBSUEsZ0JBQUo7QUFBcUJDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZLG9DQUFaLEVBQWlEO0FBQUNGLGtCQUFnQixDQUFDRyxDQUFELEVBQUc7QUFBQ0gsb0JBQWdCLEdBQUNHLENBQWpCO0FBQW1COztBQUF4QyxDQUFqRCxFQUEyRixDQUEzRjtBQUNyQkgsZ0JBQWdCLENBQUM7QUFDaEIsbUJBQWlCLFFBREQ7QUFFaEIsWUFBVTtBQUZNLENBQUQsRUFHYixrQkFIYSxDQUFoQixDOzs7Ozs7Ozs7Ozs7QUNEQTs7Ozs7Ozs7Ozs7OztBQWFDLGFBQVVJLElBQVYsRUFBZ0JDLE9BQWhCLEVBQXlCO0FBQ3pCLGlCQUR5QixDQUV6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFFBQUksT0FBT0MsTUFBUCxLQUFrQixVQUFsQixJQUFnQ0EsTUFBTSxDQUFDQyxHQUEzQyxFQUFnRDtBQUMvQztBQUNBRCxZQUFNLENBQUMsQ0FBQyxZQUFELEVBQWUsUUFBZixFQUF5QixzQkFBekIsQ0FBRCxFQUFtREQsT0FBbkQsQ0FBTjtBQUNBLEtBSEQsTUFHTztBQUNOO0FBQ0FELFVBQUksQ0FBQ0ksR0FBTCxHQUFXSCxPQUFPLENBQUNELElBQUksQ0FBQ0ssUUFBTixFQUFnQkwsSUFBSSxDQUFDTSxJQUFyQixFQUEyQk4sSUFBSSxDQUFDTyxrQkFBaEMsRUFBb0RQLElBQXBELENBQWxC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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2hlY2tOcG1WZXJzaW9ucyB9IGZyb20gJ21ldGVvci90bWVhc2RheTpjaGVjay1ucG0tdmVyc2lvbnMnO1xuY2hlY2tOcG1WZXJzaW9ucyh7XG5cdFwibm9kZS1zY2hlZHVsZVwiOiBcIl4xLjMuMVwiLFxuXHRcInhtbDJqc1wiOiBcIl4wLjQuMTlcIixcbn0sICdzdGVlZG9zOndvcmtmbG93Jyk7IiwiLyohXG4gKiBVUkkuanMgLSBNdXRhdGluZyBVUkxzXG4gKlxuICogVmVyc2lvbjogMS4xNy4wXG4gKlxuICogQXV0aG9yOiBSb2RuZXkgUmVobVxuICogV2ViOiBodHRwOi8vbWVkaWFsaXplLmdpdGh1Yi5pby9VUkkuanMvXG4gKlxuICogTGljZW5zZWQgdW5kZXJcbiAqICAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZVxuICogICBHUEwgdjMgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0dQTC0zLjBcbiAqXG4gKi9cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHQndXNlIHN0cmljdCc7XG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS91bWRqcy91bWQvYmxvYi9tYXN0ZXIvcmV0dXJuRXhwb3J0cy5qc1xuXHQvLyBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG5cdC8vICAgLy8gTm9kZVxuXHQvLyAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCcuL3B1bnljb2RlJyksIHJlcXVpcmUoJy4vSVB2NicpLCByZXF1aXJlKCcuL1NlY29uZExldmVsRG9tYWlucycpKTtcblx0Ly8gfSBlbHNlXG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG5cdFx0ZGVmaW5lKFsnLi9wdW55Y29kZScsICcuL0lQdjYnLCAnLi9TZWNvbmRMZXZlbERvbWFpbnMnXSwgZmFjdG9yeSk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gQnJvd3NlciBnbG9iYWxzIChyb290IGlzIHdpbmRvdylcblx0XHRyb290LlVSSSA9IGZhY3Rvcnkocm9vdC5wdW55Y29kZSwgcm9vdC5JUHY2LCByb290LlNlY29uZExldmVsRG9tYWlucywgcm9vdCk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKHB1bnljb2RlLCBJUHY2LCBTTEQsIHJvb3QpIHtcblx0J3VzZSBzdHJpY3QnO1xuXHQvKmdsb2JhbCBsb2NhdGlvbiwgZXNjYXBlLCB1bmVzY2FwZSAqL1xuXHQvLyBGSVhNRTogdjIuMC4wIHJlbmFtY2Ugbm9uLWNhbWVsQ2FzZSBwcm9wZXJ0aWVzIHRvIHVwcGVyY2FzZVxuXHQvKmpzaGludCBjYW1lbGNhc2U6IGZhbHNlICovXG5cblx0Ly8gc2F2ZSBjdXJyZW50IFVSSSB2YXJpYWJsZSwgaWYgYW55XG5cdHZhciBfVVJJID0gcm9vdCAmJiByb290LlVSSTtcblxuXHRmdW5jdGlvbiBVUkkodXJsLCBiYXNlKSB7XG5cdFx0dmFyIF91cmxTdXBwbGllZCA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMTtcblx0XHR2YXIgX2Jhc2VTdXBwbGllZCA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMjtcblxuXHRcdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRcdGlmICghKHRoaXMgaW5zdGFuY2VvZiBVUkkpKSB7XG5cdFx0XHRpZiAoX3VybFN1cHBsaWVkKSB7XG5cdFx0XHRcdGlmIChfYmFzZVN1cHBsaWVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBVUkkodXJsLCBiYXNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBuZXcgVVJJKHVybCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgVVJJKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVybCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoX3VybFN1cHBsaWVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZGVmaW5lZCBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCBmb3IgVVJJJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHVybCA9IGxvY2F0aW9uLmhyZWYgKyAnJztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHVybCA9ICcnO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuaHJlZih1cmwpO1xuXG5cdFx0Ly8gcmVzb2x2ZSB0byBiYXNlIGFjY29yZGluZyB0byBodHRwOi8vZHZjcy53My5vcmcvaGcvdXJsL3Jhdy1maWxlL3RpcC9PdmVydmlldy5odG1sI2NvbnN0cnVjdG9yXG5cdFx0aWYgKGJhc2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYWJzb2x1dGVUbyhiYXNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdFVSSS52ZXJzaW9uID0gJzEuMTcuMCc7XG5cblx0dmFyIHAgPSBVUkkucHJvdG90eXBlO1xuXHR2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBlc2NhcGVSZWdFeChzdHJpbmcpIHtcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9jb21taXQvODVhYzIxNzgzYzExZjhjY2FiMDYxMDZkYmE5NzM1YTMxYTg2OTI0ZCNjb21taXRjb21tZW50LTgyMTk2M1xuXHRcdHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0VHlwZSh2YWx1ZSkge1xuXHRcdC8vIElFOCBkb2Vzbid0IHJldHVybiBbT2JqZWN0IFVuZGVmaW5lZF0gYnV0IFtPYmplY3QgT2JqZWN0XSBmb3IgdW5kZWZpbmVkIHZhbHVlXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0XHR9XG5cblx0XHRyZXR1cm4gU3RyaW5nKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkpLnNsaWNlKDgsIC0xKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG5cdFx0cmV0dXJuIGdldFR5cGUob2JqKSA9PT0gJ0FycmF5Jztcblx0fVxuXG5cdGZ1bmN0aW9uIGZpbHRlckFycmF5VmFsdWVzKGRhdGEsIHZhbHVlKSB7XG5cdFx0dmFyIGxvb2t1cCA9IHt9O1xuXHRcdHZhciBpLCBsZW5ndGg7XG5cblx0XHRpZiAoZ2V0VHlwZSh2YWx1ZSkgPT09ICdSZWdFeHAnKSB7XG5cdFx0XHRsb29rdXAgPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdGZvciAoaSA9IDAsIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxvb2t1cFt2YWx1ZVtpXV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsb29rdXBbdmFsdWVdID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHQvKmpzaGludCBsYXhicmVhazogdHJ1ZSAqL1xuXHRcdFx0dmFyIF9tYXRjaCA9IGxvb2t1cCAmJiBsb29rdXBbZGF0YVtpXV0gIT09IHVuZGVmaW5lZFxuXHRcdFx0XHR8fCAhbG9va3VwICYmIHZhbHVlLnRlc3QoZGF0YVtpXSk7XG5cdFx0XHQvKmpzaGludCBsYXhicmVhazogZmFsc2UgKi9cblx0XHRcdGlmIChfbWF0Y2gpIHtcblx0XHRcdFx0ZGF0YS5zcGxpY2UoaSwgMSk7XG5cdFx0XHRcdGxlbmd0aC0tO1xuXHRcdFx0XHRpLS07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmdW5jdGlvbiBhcnJheUNvbnRhaW5zKGxpc3QsIHZhbHVlKSB7XG5cdFx0dmFyIGksIGxlbmd0aDtcblxuXHRcdC8vIHZhbHVlIG1heSBiZSBzdHJpbmcsIG51bWJlciwgYXJyYXksIHJlZ2V4cFxuXHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Ly8gTm90ZTogdGhpcyBjYW4gYmUgb3B0aW1pemVkIHRvIE8obikgKGluc3RlYWQgb2YgY3VycmVudCBPKG0gKiBuKSlcblx0XHRcdGZvciAoaSA9IDAsIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICghYXJyYXlDb250YWlucyhsaXN0LCB2YWx1ZVtpXSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0dmFyIF90eXBlID0gZ2V0VHlwZSh2YWx1ZSk7XG5cdFx0Zm9yIChpID0gMCwgbGVuZ3RoID0gbGlzdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKF90eXBlID09PSAnUmVnRXhwJykge1xuXHRcdFx0XHRpZiAodHlwZW9mIGxpc3RbaV0gPT09ICdzdHJpbmcnICYmIGxpc3RbaV0ubWF0Y2godmFsdWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobGlzdFtpXSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXJyYXlzRXF1YWwob25lLCB0d28pIHtcblx0XHRpZiAoIWlzQXJyYXkob25lKSB8fCAhaXNBcnJheSh0d28pKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gYXJyYXlzIGNhbid0IGJlIGVxdWFsIGlmIHRoZXkgaGF2ZSBkaWZmZXJlbnQgYW1vdW50IG9mIGNvbnRlbnRcblx0XHRpZiAob25lLmxlbmd0aCAhPT0gdHdvLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdG9uZS5zb3J0KCk7XG5cdFx0dHdvLnNvcnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gb25lLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aWYgKG9uZVtpXSAhPT0gdHdvW2ldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIHRyaW1TbGFzaGVzKHRleHQpIHtcblx0XHR2YXIgdHJpbV9leHByZXNzaW9uID0gL15cXC8rfFxcLyskL2c7XG5cdFx0cmV0dXJuIHRleHQucmVwbGFjZSh0cmltX2V4cHJlc3Npb24sICcnKTtcblx0fVxuXG5cdFVSSS5fcGFydHMgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cHJvdG9jb2w6IG51bGwsXG5cdFx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdFx0aG9zdG5hbWU6IG51bGwsXG5cdFx0XHR1cm46IG51bGwsXG5cdFx0XHRwb3J0OiBudWxsLFxuXHRcdFx0cGF0aDogbnVsbCxcblx0XHRcdHF1ZXJ5OiBudWxsLFxuXHRcdFx0ZnJhZ21lbnQ6IG51bGwsXG5cdFx0XHQvLyBzdGF0ZVxuXHRcdFx0ZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzOiBVUkkuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0ZXNjYXBlUXVlcnlTcGFjZTogVVJJLmVzY2FwZVF1ZXJ5U3BhY2Vcblx0XHR9O1xuXHR9O1xuXHQvLyBzdGF0ZTogYWxsb3cgZHVwbGljYXRlIHF1ZXJ5IHBhcmFtZXRlcnMgKGE9MSZhPTEpXG5cdFVSSS5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMgPSBmYWxzZTtcblx0Ly8gc3RhdGU6IHJlcGxhY2VzICsgd2l0aCAlMjAgKHNwYWNlIGluIHF1ZXJ5IHN0cmluZ3MpXG5cdFVSSS5lc2NhcGVRdWVyeVNwYWNlID0gdHJ1ZTtcblx0Ly8gc3RhdGljIHByb3BlcnRpZXNcblx0VVJJLnByb3RvY29sX2V4cHJlc3Npb24gPSAvXlthLXpdW2EtejAtOS4rLV0qJC9pO1xuXHRVUkkuaWRuX2V4cHJlc3Npb24gPSAvW15hLXowLTlcXC4tXS9pO1xuXHRVUkkucHVueWNvZGVfZXhwcmVzc2lvbiA9IC8oeG4tLSkvaTtcblx0Ly8gd2VsbCwgMzMzLjQ0NC41NTUuNjY2IG1hdGNoZXMsIGJ1dCBpdCBzdXJlIGFpbid0IG5vIElQdjQgLSBkbyB3ZSBjYXJlP1xuXHRVUkkuaXA0X2V4cHJlc3Npb24gPSAvXlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9JC87XG5cdC8vIGNyZWRpdHMgdG8gUmljaCBCcm93blxuXHQvLyBzb3VyY2U6IGh0dHA6Ly9mb3J1bXMuaW50ZXJtYXBwZXIuY29tL3ZpZXd0b3BpYy5waHA/cD0xMDk2IzEwOTZcblx0Ly8gc3BlY2lmaWNhdGlvbjogaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNDI5MS50eHRcblx0VVJJLmlwNl9leHByZXNzaW9uID0gL15cXHMqKCgoWzAtOUEtRmEtZl17MSw0fTopezd9KFswLTlBLUZhLWZdezEsNH18OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezZ9KDpbMC05QS1GYS1mXXsxLDR9fCgoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwyfSl8OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NH0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwzfSl8KCg6WzAtOUEtRmEtZl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezN9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNH0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsMn06KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Mn0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw1fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwzfTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsxfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDZ9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg6KCgoOlswLTlBLUZhLWZdezEsNH0pezEsN30pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNX06KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSkpKCUuKyk/XFxzKiQvO1xuXHQvLyBleHByZXNzaW9uIHVzZWQgaXMgXCJncnViZXIgcmV2aXNlZFwiIChAZ3J1YmVyIHYyKSBkZXRlcm1pbmVkIHRvIGJlIHRoZVxuXHQvLyBiZXN0IHNvbHV0aW9uIGluIGEgcmVnZXgtZ29sZiB3ZSBkaWQgYSBjb3VwbGUgb2YgYWdlcyBhZ28gYXRcblx0Ly8gKiBodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9kZW1vL3VybC1yZWdleFxuXHQvLyAqIGh0dHA6Ly9yb2RuZXlyZWhtLmRlL3QvdXJsLXJlZ2V4Lmh0bWxcblx0VVJJLmZpbmRfdXJpX2V4cHJlc3Npb24gPSAvXFxiKCg/OlthLXpdW1xcdy1dKzooPzpcXC97MSwzfXxbYS16MC05JV0pfHd3d1xcZHswLDN9Wy5dfFthLXowLTkuXFwtXStbLl1bYS16XXsyLDR9XFwvKSg/OlteXFxzKCk8Pl0rfFxcKChbXlxccygpPD5dK3woXFwoW15cXHMoKTw+XStcXCkpKSpcXCkpKyg/OlxcKChbXlxccygpPD5dK3woXFwoW15cXHMoKTw+XStcXCkpKSpcXCl8W15cXHNgISgpXFxbXFxde307OidcIi4sPD4/wqvCu+KAnOKAneKAmOKAmV0pKS9pZztcblx0VVJJLmZpbmRVcmkgPSB7XG5cdFx0Ly8gdmFsaWQgXCJzY2hlbWU6Ly9cIiBvciBcInd3dy5cIlxuXHRcdHN0YXJ0OiAvXFxiKD86KFthLXpdW2EtejAtOS4rLV0qOlxcL1xcLyl8d3d3XFwuKS9naSxcblx0XHQvLyBldmVyeXRoaW5nIHVwIHRvIHRoZSBuZXh0IHdoaXRlc3BhY2Vcblx0XHRlbmQ6IC9bXFxzXFxyXFxuXXwkLyxcblx0XHQvLyB0cmltIHRyYWlsaW5nIHB1bmN0dWF0aW9uIGNhcHR1cmVkIGJ5IGVuZCBSZWdFeHBcblx0XHR0cmltOiAvW2AhKClcXFtcXF17fTs6J1wiLiw8Pj/Cq8K74oCc4oCd4oCe4oCY4oCZXSskL1xuXHR9O1xuXHQvLyBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3VyaS1zY2hlbWVzLmh0bWxcblx0Ly8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX1RDUF9hbmRfVURQX3BvcnRfbnVtYmVycyNXZWxsLWtub3duX3BvcnRzXG5cdFVSSS5kZWZhdWx0UG9ydHMgPSB7XG5cdFx0aHR0cDogJzgwJyxcblx0XHRodHRwczogJzQ0MycsXG5cdFx0ZnRwOiAnMjEnLFxuXHRcdGdvcGhlcjogJzcwJyxcblx0XHR3czogJzgwJyxcblx0XHR3c3M6ICc0NDMnXG5cdH07XG5cdC8vIGFsbG93ZWQgaG9zdG5hbWUgY2hhcmFjdGVycyBhY2NvcmRpbmcgdG8gUkZDIDM5ODZcblx0Ly8gQUxQSEEgRElHSVQgXCItXCIgXCIuXCIgXCJfXCIgXCJ+XCIgXCIhXCIgXCIkXCIgXCImXCIgXCInXCIgXCIoXCIgXCIpXCIgXCIqXCIgXCIrXCIgXCIsXCIgXCI7XCIgXCI9XCIgJWVuY29kZWRcblx0Ly8gSSd2ZSBuZXZlciBzZWVuIGEgKG5vbi1JRE4pIGhvc3RuYW1lIG90aGVyIHRoYW46IEFMUEhBIERJR0lUIC4gLVxuXHRVUkkuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzID0gL1teYS16QS1aMC05XFwuLV0vO1xuXHQvLyBtYXAgRE9NIEVsZW1lbnRzIHRvIHRoZWlyIFVSSSBhdHRyaWJ1dGVcblx0VVJJLmRvbUF0dHJpYnV0ZXMgPSB7XG5cdFx0J2EnOiAnaHJlZicsXG5cdFx0J2Jsb2NrcXVvdGUnOiAnY2l0ZScsXG5cdFx0J2xpbmsnOiAnaHJlZicsXG5cdFx0J2Jhc2UnOiAnaHJlZicsXG5cdFx0J3NjcmlwdCc6ICdzcmMnLFxuXHRcdCdmb3JtJzogJ2FjdGlvbicsXG5cdFx0J2ltZyc6ICdzcmMnLFxuXHRcdCdhcmVhJzogJ2hyZWYnLFxuXHRcdCdpZnJhbWUnOiAnc3JjJyxcblx0XHQnZW1iZWQnOiAnc3JjJyxcblx0XHQnc291cmNlJzogJ3NyYycsXG5cdFx0J3RyYWNrJzogJ3NyYycsXG5cdFx0J2lucHV0JzogJ3NyYycsIC8vIGJ1dCBvbmx5IGlmIHR5cGU9XCJpbWFnZVwiXG5cdFx0J2F1ZGlvJzogJ3NyYycsXG5cdFx0J3ZpZGVvJzogJ3NyYydcblx0fTtcblx0VVJJLmdldERvbUF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRpZiAoIW5vZGUgfHwgIW5vZGUubm9kZU5hbWUpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdC8vIDxpbnB1dD4gc2hvdWxkIG9ubHkgZXhwb3NlIHNyYyBmb3IgdHlwZT1cImltYWdlXCJcblx0XHRpZiAobm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgbm9kZS50eXBlICE9PSAnaW1hZ2UnKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiBVUkkuZG9tQXR0cmlidXRlc1tub2RlTmFtZV07XG5cdH07XG5cblx0ZnVuY3Rpb24gZXNjYXBlRm9yRHVtYkZpcmVmb3gzNih2YWx1ZSkge1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL2lzc3Vlcy85MVxuXHRcdHJldHVybiBlc2NhcGUodmFsdWUpO1xuXHR9XG5cblx0Ly8gZW5jb2RpbmcgLyBkZWNvZGluZyBhY2NvcmRpbmcgdG8gUkZDMzk4NlxuXHRmdW5jdGlvbiBzdHJpY3RFbmNvZGVVUklDb21wb25lbnQoc3RyaW5nKSB7XG5cdFx0Ly8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvZW5jb2RlVVJJQ29tcG9uZW50XG5cdFx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmcpXG5cdFx0XHQucmVwbGFjZSgvWyEnKCkqXS9nLCBlc2NhcGVGb3JEdW1iRmlyZWZveDM2KVxuXHRcdFx0LnJlcGxhY2UoL1xcKi9nLCAnJTJBJyk7XG5cdH1cblx0VVJJLmVuY29kZSA9IHN0cmljdEVuY29kZVVSSUNvbXBvbmVudDtcblx0VVJJLmRlY29kZSA9IGRlY29kZVVSSUNvbXBvbmVudDtcblx0VVJJLmlzbzg4NTkgPSBmdW5jdGlvbigpIHtcblx0XHRVUkkuZW5jb2RlID0gZXNjYXBlO1xuXHRcdFVSSS5kZWNvZGUgPSB1bmVzY2FwZTtcblx0fTtcblx0VVJJLnVuaWNvZGUgPSBmdW5jdGlvbigpIHtcblx0XHRVUkkuZW5jb2RlID0gc3RyaWN0RW5jb2RlVVJJQ29tcG9uZW50O1xuXHRcdFVSSS5kZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XG5cdH07XG5cdFVSSS5jaGFyYWN0ZXJzID0ge1xuXHRcdHBhdGhuYW1lOiB7XG5cdFx0XHRlbmNvZGU6IHtcblx0XHRcdFx0Ly8gUkZDMzk4NiAyLjE6IEZvciBjb25zaXN0ZW5jeSwgVVJJIHByb2R1Y2VycyBhbmQgbm9ybWFsaXplcnMgc2hvdWxkXG5cdFx0XHRcdC8vIHVzZSB1cHBlcmNhc2UgaGV4YWRlY2ltYWwgZGlnaXRzIGZvciBhbGwgcGVyY2VudC1lbmNvZGluZ3MuXG5cdFx0XHRcdGV4cHJlc3Npb246IC8lKDI0fDI2fDJCfDJDfDNCfDNEfDNBfDQwKS9pZyxcblx0XHRcdFx0bWFwOiB7XG5cdFx0XHRcdFx0Ly8gLS5ffiEnKCkqXG5cdFx0XHRcdFx0JyUyNCc6ICckJyxcblx0XHRcdFx0XHQnJTI2JzogJyYnLFxuXHRcdFx0XHRcdCclMkInOiAnKycsXG5cdFx0XHRcdFx0JyUyQyc6ICcsJyxcblx0XHRcdFx0XHQnJTNCJzogJzsnLFxuXHRcdFx0XHRcdCclM0QnOiAnPScsXG5cdFx0XHRcdFx0JyUzQSc6ICc6Jyxcblx0XHRcdFx0XHQnJTQwJzogJ0AnXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWNvZGU6IHtcblx0XHRcdFx0ZXhwcmVzc2lvbjogL1tcXC9cXD8jXS9nLFxuXHRcdFx0XHRtYXA6IHtcblx0XHRcdFx0XHQnLyc6ICclMkYnLFxuXHRcdFx0XHRcdCc/JzogJyUzRicsXG5cdFx0XHRcdFx0JyMnOiAnJTIzJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZXNlcnZlZDoge1xuXHRcdFx0ZW5jb2RlOiB7XG5cdFx0XHRcdC8vIFJGQzM5ODYgMi4xOiBGb3IgY29uc2lzdGVuY3ksIFVSSSBwcm9kdWNlcnMgYW5kIG5vcm1hbGl6ZXJzIHNob3VsZFxuXHRcdFx0XHQvLyB1c2UgdXBwZXJjYXNlIGhleGFkZWNpbWFsIGRpZ2l0cyBmb3IgYWxsIHBlcmNlbnQtZW5jb2RpbmdzLlxuXHRcdFx0XHRleHByZXNzaW9uOiAvJSgyMXwyM3wyNHwyNnwyN3wyOHwyOXwyQXwyQnwyQ3wyRnwzQXwzQnwzRHwzRnw0MHw1Qnw1RCkvaWcsXG5cdFx0XHRcdG1hcDoge1xuXHRcdFx0XHRcdC8vIGdlbi1kZWxpbXNcblx0XHRcdFx0XHQnJTNBJzogJzonLFxuXHRcdFx0XHRcdCclMkYnOiAnLycsXG5cdFx0XHRcdFx0JyUzRic6ICc/Jyxcblx0XHRcdFx0XHQnJTIzJzogJyMnLFxuXHRcdFx0XHRcdCclNUInOiAnWycsXG5cdFx0XHRcdFx0JyU1RCc6ICddJyxcblx0XHRcdFx0XHQnJTQwJzogJ0AnLFxuXHRcdFx0XHRcdC8vIHN1Yi1kZWxpbXNcblx0XHRcdFx0XHQnJTIxJzogJyEnLFxuXHRcdFx0XHRcdCclMjQnOiAnJCcsXG5cdFx0XHRcdFx0JyUyNic6ICcmJyxcblx0XHRcdFx0XHQnJTI3JzogJ1xcJycsXG5cdFx0XHRcdFx0JyUyOCc6ICcoJyxcblx0XHRcdFx0XHQnJTI5JzogJyknLFxuXHRcdFx0XHRcdCclMkEnOiAnKicsXG5cdFx0XHRcdFx0JyUyQic6ICcrJyxcblx0XHRcdFx0XHQnJTJDJzogJywnLFxuXHRcdFx0XHRcdCclM0InOiAnOycsXG5cdFx0XHRcdFx0JyUzRCc6ICc9J1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR1cm5wYXRoOiB7XG5cdFx0XHQvLyBUaGUgY2hhcmFjdGVycyB1bmRlciBgZW5jb2RlYCBhcmUgdGhlIGNoYXJhY3RlcnMgY2FsbGVkIG91dCBieSBSRkMgMjE0MSBhcyBiZWluZyBhY2NlcHRhYmxlXG5cdFx0XHQvLyBmb3IgdXNhZ2UgaW4gYSBVUk4uIFJGQzIxNDEgYWxzbyBjYWxscyBvdXQgXCItXCIsIFwiLlwiLCBhbmQgXCJfXCIgYXMgYWNjZXB0YWJsZSBjaGFyYWN0ZXJzLCBidXRcblx0XHRcdC8vIHRoZXNlIGFyZW4ndCBlbmNvZGVkIGJ5IGVuY29kZVVSSUNvbXBvbmVudCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBjYWxsIHRoZW0gb3V0IGhlcmUuIEFsc29cblx0XHRcdC8vIG5vdGUgdGhhdCB0aGUgY29sb24gY2hhcmFjdGVyIGlzIG5vdCBmZWF0dXJlZCBpbiB0aGUgZW5jb2RpbmcgbWFwOyB0aGlzIGlzIGJlY2F1c2UgVVJJLmpzXG5cdFx0XHQvLyBnaXZlcyB0aGUgY29sb25zIGluIFVSTnMgc2VtYW50aWMgbWVhbmluZyBhcyB0aGUgZGVsaW1pdGVycyBvZiBwYXRoIHNlZ2VtZW50cywgYW5kIHNvIGl0XG5cdFx0XHQvLyBzaG91bGQgbm90IGFwcGVhciB1bmVuY29kZWQgaW4gYSBzZWdtZW50IGl0c2VsZi5cblx0XHRcdC8vIFNlZSBhbHNvIHRoZSBub3RlIGFib3ZlIGFib3V0IFJGQzM5ODYgYW5kIGNhcGl0YWxhbGl6ZWQgaGV4IGRpZ2l0cy5cblx0XHRcdGVuY29kZToge1xuXHRcdFx0XHRleHByZXNzaW9uOiAvJSgyMXwyNHwyN3wyOHwyOXwyQXwyQnwyQ3wzQnwzRHw0MCkvaWcsXG5cdFx0XHRcdG1hcDoge1xuXHRcdFx0XHRcdCclMjEnOiAnIScsXG5cdFx0XHRcdFx0JyUyNCc6ICckJyxcblx0XHRcdFx0XHQnJTI3JzogJ1xcJycsXG5cdFx0XHRcdFx0JyUyOCc6ICcoJyxcblx0XHRcdFx0XHQnJTI5JzogJyknLFxuXHRcdFx0XHRcdCclMkEnOiAnKicsXG5cdFx0XHRcdFx0JyUyQic6ICcrJyxcblx0XHRcdFx0XHQnJTJDJzogJywnLFxuXHRcdFx0XHRcdCclM0InOiAnOycsXG5cdFx0XHRcdFx0JyUzRCc6ICc9Jyxcblx0XHRcdFx0XHQnJTQwJzogJ0AnXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQvLyBUaGVzZSBjaGFyYWN0ZXJzIGFyZSB0aGUgY2hhcmFjdGVycyBjYWxsZWQgb3V0IGJ5IFJGQzIxNDEgYXMgXCJyZXNlcnZlZFwiIGNoYXJhY3RlcnMgdGhhdFxuXHRcdFx0Ly8gc2hvdWxkIG5ldmVyIGFwcGVhciBpbiBhIFVSTiwgcGx1cyB0aGUgY29sb24gY2hhcmFjdGVyIChzZWUgbm90ZSBhYm92ZSkuXG5cdFx0XHRkZWNvZGU6IHtcblx0XHRcdFx0ZXhwcmVzc2lvbjogL1tcXC9cXD8jOl0vZyxcblx0XHRcdFx0bWFwOiB7XG5cdFx0XHRcdFx0Jy8nOiAnJTJGJyxcblx0XHRcdFx0XHQnPyc6ICclM0YnLFxuXHRcdFx0XHRcdCcjJzogJyUyMycsXG5cdFx0XHRcdFx0JzonOiAnJTNBJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRVUkkuZW5jb2RlUXVlcnkgPSBmdW5jdGlvbihzdHJpbmcsIGVzY2FwZVF1ZXJ5U3BhY2UpIHtcblx0XHR2YXIgZXNjYXBlZCA9IFVSSS5lbmNvZGUoc3RyaW5nICsgJycpO1xuXHRcdGlmIChlc2NhcGVRdWVyeVNwYWNlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGVzY2FwZVF1ZXJ5U3BhY2UgPSBVUkkuZXNjYXBlUXVlcnlTcGFjZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXNjYXBlUXVlcnlTcGFjZSA/IGVzY2FwZWQucmVwbGFjZSgvJTIwL2csICcrJykgOiBlc2NhcGVkO1xuXHR9O1xuXHRVUkkuZGVjb2RlUXVlcnkgPSBmdW5jdGlvbihzdHJpbmcsIGVzY2FwZVF1ZXJ5U3BhY2UpIHtcblx0XHRzdHJpbmcgKz0gJyc7XG5cdFx0aWYgKGVzY2FwZVF1ZXJ5U3BhY2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZXNjYXBlUXVlcnlTcGFjZSA9IFVSSS5lc2NhcGVRdWVyeVNwYWNlO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gVVJJLmRlY29kZShlc2NhcGVRdWVyeVNwYWNlID8gc3RyaW5nLnJlcGxhY2UoL1xcKy9nLCAnJTIwJykgOiBzdHJpbmcpO1xuXHRcdH0gY2F0Y2goZSkge1xuXHRcdFx0Ly8gd2UncmUgbm90IGdvaW5nIHRvIG1lc3Mgd2l0aCB3ZWlyZCBlbmNvZGluZ3MsXG5cdFx0XHQvLyBnaXZlIHVwIGFuZCByZXR1cm4gdGhlIHVuZGVjb2RlZCBvcmlnaW5hbCBzdHJpbmdcblx0XHRcdC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvODdcblx0XHRcdC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvOTJcblx0XHRcdHJldHVybiBzdHJpbmc7XG5cdFx0fVxuXHR9O1xuXHQvLyBnZW5lcmF0ZSBlbmNvZGUvZGVjb2RlIHBhdGggZnVuY3Rpb25zXG5cdHZhciBfcGFydHMgPSB7J2VuY29kZSc6J2VuY29kZScsICdkZWNvZGUnOidkZWNvZGUnfTtcblx0dmFyIF9wYXJ0O1xuXHR2YXIgZ2VuZXJhdGVBY2Nlc3NvciA9IGZ1bmN0aW9uKF9ncm91cCwgX3BhcnQpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gVVJJW19wYXJ0XShzdHJpbmcgKyAnJykucmVwbGFjZShVUkkuY2hhcmFjdGVyc1tfZ3JvdXBdW19wYXJ0XS5leHByZXNzaW9uLCBmdW5jdGlvbihjKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFVSSS5jaGFyYWN0ZXJzW19ncm91cF1bX3BhcnRdLm1hcFtjXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIHdlJ3JlIG5vdCBnb2luZyB0byBtZXNzIHdpdGggd2VpcmQgZW5jb2RpbmdzLFxuXHRcdFx0XHQvLyBnaXZlIHVwIGFuZCByZXR1cm4gdGhlIHVuZGVjb2RlZCBvcmlnaW5hbCBzdHJpbmdcblx0XHRcdFx0Ly8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL2lzc3Vlcy84N1xuXHRcdFx0XHQvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvaXNzdWVzLzkyXG5cdFx0XHRcdHJldHVybiBzdHJpbmc7XG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcblxuXHRmb3IgKF9wYXJ0IGluIF9wYXJ0cykge1xuXHRcdFVSSVtfcGFydCArICdQYXRoU2VnbWVudCddID0gZ2VuZXJhdGVBY2Nlc3NvcigncGF0aG5hbWUnLCBfcGFydHNbX3BhcnRdKTtcblx0XHRVUklbX3BhcnQgKyAnVXJuUGF0aFNlZ21lbnQnXSA9IGdlbmVyYXRlQWNjZXNzb3IoJ3VybnBhdGgnLCBfcGFydHNbX3BhcnRdKTtcblx0fVxuXG5cdHZhciBnZW5lcmF0ZVNlZ21lbnRlZFBhdGhGdW5jdGlvbiA9IGZ1bmN0aW9uKF9zZXAsIF9jb2RpbmdGdW5jTmFtZSwgX2lubmVyQ29kaW5nRnVuY05hbWUpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHQvLyBXaHkgcGFzcyBpbiBuYW1lcyBvZiBmdW5jdGlvbnMsIHJhdGhlciB0aGFuIHRoZSBmdW5jdGlvbiBvYmplY3RzIHRoZW1zZWx2ZXM/IFRoZVxuXHRcdFx0Ly8gZGVmaW5pdGlvbnMgb2Ygc29tZSBmdW5jdGlvbnMgKGJ1dCBpbiBwYXJ0aWN1bGFyLCBVUkkuZGVjb2RlKSB3aWxsIG9jY2FzaW9uYWxseSBjaGFuZ2UgZHVlXG5cdFx0XHQvLyB0byBVUkkuanMgaGF2aW5nIElTTzg4NTkgYW5kIFVuaWNvZGUgbW9kZXMuIFBhc3NpbmcgaW4gdGhlIG5hbWUgYW5kIGdldHRpbmcgaXQgd2lsbCBlbnN1cmVcblx0XHRcdC8vIHRoYXQgdGhlIGZ1bmN0aW9ucyB3ZSB1c2UgaGVyZSBhcmUgXCJmcmVzaFwiLlxuXHRcdFx0dmFyIGFjdHVhbENvZGluZ0Z1bmM7XG5cdFx0XHRpZiAoIV9pbm5lckNvZGluZ0Z1bmNOYW1lKSB7XG5cdFx0XHRcdGFjdHVhbENvZGluZ0Z1bmMgPSBVUklbX2NvZGluZ0Z1bmNOYW1lXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFjdHVhbENvZGluZ0Z1bmMgPSBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gVVJJW19jb2RpbmdGdW5jTmFtZV0oVVJJW19pbm5lckNvZGluZ0Z1bmNOYW1lXShzdHJpbmcpKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHNlZ21lbnRzID0gKHN0cmluZyArICcnKS5zcGxpdChfc2VwKTtcblxuXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHNlZ21lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHNlZ21lbnRzW2ldID0gYWN0dWFsQ29kaW5nRnVuYyhzZWdtZW50c1tpXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWdtZW50cy5qb2luKF9zZXApO1xuXHRcdH07XG5cdH07XG5cblx0Ly8gVGhpcyB0YWtlcyBwbGFjZSBvdXRzaWRlIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCwgZS5nLiwgZW5jb2RlVXJuUGF0aCBmdW5jdGlvbnMuXG5cdFVSSS5kZWNvZGVQYXRoID0gZ2VuZXJhdGVTZWdtZW50ZWRQYXRoRnVuY3Rpb24oJy8nLCAnZGVjb2RlUGF0aFNlZ21lbnQnKTtcblx0VVJJLmRlY29kZVVyblBhdGggPSBnZW5lcmF0ZVNlZ21lbnRlZFBhdGhGdW5jdGlvbignOicsICdkZWNvZGVVcm5QYXRoU2VnbWVudCcpO1xuXHRVUkkucmVjb2RlUGF0aCA9IGdlbmVyYXRlU2VnbWVudGVkUGF0aEZ1bmN0aW9uKCcvJywgJ2VuY29kZVBhdGhTZWdtZW50JywgJ2RlY29kZScpO1xuXHRVUkkucmVjb2RlVXJuUGF0aCA9IGdlbmVyYXRlU2VnbWVudGVkUGF0aEZ1bmN0aW9uKCc6JywgJ2VuY29kZVVyblBhdGhTZWdtZW50JywgJ2RlY29kZScpO1xuXG5cdFVSSS5lbmNvZGVSZXNlcnZlZCA9IGdlbmVyYXRlQWNjZXNzb3IoJ3Jlc2VydmVkJywgJ2VuY29kZScpO1xuXG5cdFVSSS5wYXJzZSA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcblx0XHR2YXIgcG9zO1xuXHRcdGlmICghcGFydHMpIHtcblx0XHRcdHBhcnRzID0ge307XG5cdFx0fVxuXHRcdC8vIFtwcm90b2NvbFwiOi8vXCJbdXNlcm5hbWVbXCI6XCJwYXNzd29yZF1cIkBcIl1ob3N0bmFtZVtcIjpcInBvcnRdXCIvXCI/XVtwYXRoXVtcIj9cInF1ZXJ5c3RyaW5nXVtcIiNcImZyYWdtZW50XVxuXG5cdFx0Ly8gZXh0cmFjdCBmcmFnbWVudFxuXHRcdHBvcyA9IHN0cmluZy5pbmRleE9mKCcjJyk7XG5cdFx0aWYgKHBvcyA+IC0xKSB7XG5cdFx0XHQvLyBlc2NhcGluZz9cblx0XHRcdHBhcnRzLmZyYWdtZW50ID0gc3RyaW5nLnN1YnN0cmluZyhwb3MgKyAxKSB8fCBudWxsO1xuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygwLCBwb3MpO1xuXHRcdH1cblxuXHRcdC8vIGV4dHJhY3QgcXVlcnlcblx0XHRwb3MgPSBzdHJpbmcuaW5kZXhPZignPycpO1xuXHRcdGlmIChwb3MgPiAtMSkge1xuXHRcdFx0Ly8gZXNjYXBpbmc/XG5cdFx0XHRwYXJ0cy5xdWVyeSA9IHN0cmluZy5zdWJzdHJpbmcocG9zICsgMSkgfHwgbnVsbDtcblx0XHRcdHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKTtcblx0XHR9XG5cblx0XHQvLyBleHRyYWN0IHByb3RvY29sXG5cdFx0aWYgKHN0cmluZy5zdWJzdHJpbmcoMCwgMikgPT09ICcvLycpIHtcblx0XHRcdC8vIHJlbGF0aXZlLXNjaGVtZVxuXHRcdFx0cGFydHMucHJvdG9jb2wgPSBudWxsO1xuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygyKTtcblx0XHRcdC8vIGV4dHJhY3QgXCJ1c2VyOnBhc3NAaG9zdDpwb3J0XCJcblx0XHRcdHN0cmluZyA9IFVSSS5wYXJzZUF1dGhvcml0eShzdHJpbmcsIHBhcnRzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cG9zID0gc3RyaW5nLmluZGV4T2YoJzonKTtcblx0XHRcdGlmIChwb3MgPiAtMSkge1xuXHRcdFx0XHRwYXJ0cy5wcm90b2NvbCA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAocGFydHMucHJvdG9jb2wgJiYgIXBhcnRzLnByb3RvY29sLm1hdGNoKFVSSS5wcm90b2NvbF9leHByZXNzaW9uKSkge1xuXHRcdFx0XHRcdC8vIDogbWF5IGJlIHdpdGhpbiB0aGUgcGF0aFxuXHRcdFx0XHRcdHBhcnRzLnByb3RvY29sID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHN0cmluZy5zdWJzdHJpbmcocG9zICsgMSwgcG9zICsgMykgPT09ICcvLycpIHtcblx0XHRcdFx0XHRzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDMpO1xuXG5cdFx0XHRcdFx0Ly8gZXh0cmFjdCBcInVzZXI6cGFzc0Bob3N0OnBvcnRcIlxuXHRcdFx0XHRcdHN0cmluZyA9IFVSSS5wYXJzZUF1dGhvcml0eShzdHJpbmcsIHBhcnRzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEpO1xuXHRcdFx0XHRcdHBhcnRzLnVybiA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyB3aGF0J3MgbGVmdCBtdXN0IGJlIHRoZSBwYXRoXG5cdFx0cGFydHMucGF0aCA9IHN0cmluZztcblxuXHRcdC8vIGFuZCB3ZSdyZSBkb25lXG5cdFx0cmV0dXJuIHBhcnRzO1xuXHR9O1xuXHRVUkkucGFyc2VIb3N0ID0gZnVuY3Rpb24oc3RyaW5nLCBwYXJ0cykge1xuXHRcdC8vIENvcHkgY2hyb21lLCBJRSwgb3BlcmEgYmFja3NsYXNoLWhhbmRsaW5nIGJlaGF2aW9yLlxuXHRcdC8vIEJhY2sgc2xhc2hlcyBiZWZvcmUgdGhlIHF1ZXJ5IHN0cmluZyBnZXQgY29udmVydGVkIHRvIGZvcndhcmQgc2xhc2hlc1xuXHRcdC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2Jsb2IvMzg2ZmQyNGY0OWIwZTlkMWE4YTA3NjU5MmE0MDQxNjhmYWVlY2MzNC9saWIvdXJsLmpzI0wxMTUtTDEyNFxuXHRcdC8vIFNlZTogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTI1OTE2XG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvcHVsbC8yMzNcblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG5cdFx0Ly8gZXh0cmFjdCBob3N0OnBvcnRcblx0XHR2YXIgcG9zID0gc3RyaW5nLmluZGV4T2YoJy8nKTtcblx0XHR2YXIgYnJhY2tldFBvcztcblx0XHR2YXIgdDtcblxuXHRcdGlmIChwb3MgPT09IC0xKSB7XG5cdFx0XHRwb3MgPSBzdHJpbmcubGVuZ3RoO1xuXHRcdH1cblxuXHRcdGlmIChzdHJpbmcuY2hhckF0KDApID09PSAnWycpIHtcblx0XHRcdC8vIElQdjYgaG9zdCAtIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtNm1hbi10ZXh0LWFkZHItcmVwcmVzZW50YXRpb24tMDQjc2VjdGlvbi02XG5cdFx0XHQvLyBJIGNsYWltIG1vc3QgY2xpZW50IHNvZnR3YXJlIGJyZWFrcyBvbiBJUHY2IGFueXdheXMuIFRvIHNpbXBsaWZ5IHRoaW5ncywgVVJJIG9ubHkgYWNjZXB0c1xuXHRcdFx0Ly8gSVB2Nitwb3J0IGluIHRoZSBmb3JtYXQgWzIwMDE6ZGI4OjoxXTo4MCAoZm9yIHRoZSB0aW1lIGJlaW5nKVxuXHRcdFx0YnJhY2tldFBvcyA9IHN0cmluZy5pbmRleE9mKCddJyk7XG5cdFx0XHRwYXJ0cy5ob3N0bmFtZSA9IHN0cmluZy5zdWJzdHJpbmcoMSwgYnJhY2tldFBvcykgfHwgbnVsbDtcblx0XHRcdHBhcnRzLnBvcnQgPSBzdHJpbmcuc3Vic3RyaW5nKGJyYWNrZXRQb3MgKyAyLCBwb3MpIHx8IG51bGw7XG5cdFx0XHRpZiAocGFydHMucG9ydCA9PT0gJy8nKSB7XG5cdFx0XHRcdHBhcnRzLnBvcnQgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgZmlyc3RDb2xvbiA9IHN0cmluZy5pbmRleE9mKCc6Jyk7XG5cdFx0XHR2YXIgZmlyc3RTbGFzaCA9IHN0cmluZy5pbmRleE9mKCcvJyk7XG5cdFx0XHR2YXIgbmV4dENvbG9uID0gc3RyaW5nLmluZGV4T2YoJzonLCBmaXJzdENvbG9uICsgMSk7XG5cdFx0XHRpZiAobmV4dENvbG9uICE9PSAtMSAmJiAoZmlyc3RTbGFzaCA9PT0gLTEgfHwgbmV4dENvbG9uIDwgZmlyc3RTbGFzaCkpIHtcblx0XHRcdFx0Ly8gSVB2NiBob3N0IGNvbnRhaW5zIG11bHRpcGxlIGNvbG9ucyAtIGJ1dCBubyBwb3J0XG5cdFx0XHRcdC8vIHRoaXMgbm90YXRpb24gaXMgYWN0dWFsbHkgbm90IGFsbG93ZWQgYnkgUkZDIDM5ODYsIGJ1dCB3ZSdyZSBhIGxpYmVyYWwgcGFyc2VyXG5cdFx0XHRcdHBhcnRzLmhvc3RuYW1lID0gc3RyaW5nLnN1YnN0cmluZygwLCBwb3MpIHx8IG51bGw7XG5cdFx0XHRcdHBhcnRzLnBvcnQgPSBudWxsO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dCA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKS5zcGxpdCgnOicpO1xuXHRcdFx0XHRwYXJ0cy5ob3N0bmFtZSA9IHRbMF0gfHwgbnVsbDtcblx0XHRcdFx0cGFydHMucG9ydCA9IHRbMV0gfHwgbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocGFydHMuaG9zdG5hbWUgJiYgc3RyaW5nLnN1YnN0cmluZyhwb3MpLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG5cdFx0XHRwb3MrKztcblx0XHRcdHN0cmluZyA9ICcvJyArIHN0cmluZztcblx0XHR9XG5cblx0XHRyZXR1cm4gc3RyaW5nLnN1YnN0cmluZyhwb3MpIHx8ICcvJztcblx0fTtcblx0VVJJLnBhcnNlQXV0aG9yaXR5ID0gZnVuY3Rpb24oc3RyaW5nLCBwYXJ0cykge1xuXHRcdHN0cmluZyA9IFVSSS5wYXJzZVVzZXJpbmZvKHN0cmluZywgcGFydHMpO1xuXHRcdHJldHVybiBVUkkucGFyc2VIb3N0KHN0cmluZywgcGFydHMpO1xuXHR9O1xuXHRVUkkucGFyc2VVc2VyaW5mbyA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcblx0XHQvLyBleHRyYWN0IHVzZXJuYW1lOnBhc3N3b3JkXG5cdFx0dmFyIGZpcnN0U2xhc2ggPSBzdHJpbmcuaW5kZXhPZignLycpO1xuXHRcdHZhciBwb3MgPSBzdHJpbmcubGFzdEluZGV4T2YoJ0AnLCBmaXJzdFNsYXNoID4gLTEgPyBmaXJzdFNsYXNoIDogc3RyaW5nLmxlbmd0aCAtIDEpO1xuXHRcdHZhciB0O1xuXG5cdFx0Ly8gYXV0aG9yaXR5QCBtdXN0IGNvbWUgYmVmb3JlIC9wYXRoXG5cdFx0aWYgKHBvcyA+IC0xICYmIChmaXJzdFNsYXNoID09PSAtMSB8fCBwb3MgPCBmaXJzdFNsYXNoKSkge1xuXHRcdFx0dCA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKS5zcGxpdCgnOicpO1xuXHRcdFx0cGFydHMudXNlcm5hbWUgPSB0WzBdID8gVVJJLmRlY29kZSh0WzBdKSA6IG51bGw7XG5cdFx0XHR0LnNoaWZ0KCk7XG5cdFx0XHRwYXJ0cy5wYXNzd29yZCA9IHRbMF0gPyBVUkkuZGVjb2RlKHQuam9pbignOicpKSA6IG51bGw7XG5cdFx0XHRzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXJ0cy51c2VybmFtZSA9IG51bGw7XG5cdFx0XHRwYXJ0cy5wYXNzd29yZCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN0cmluZztcblx0fTtcblx0VVJJLnBhcnNlUXVlcnkgPSBmdW5jdGlvbihzdHJpbmcsIGVzY2FwZVF1ZXJ5U3BhY2UpIHtcblx0XHRpZiAoIXN0cmluZykge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblxuXHRcdC8vIHRocm93IG91dCB0aGUgZnVua3kgYnVzaW5lc3MgLSBcIj9cIltuYW1lXCI9XCJ2YWx1ZVwiJlwiXStcblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvJisvZywgJyYnKS5yZXBsYWNlKC9eXFw/KiYqfCYrJC9nLCAnJyk7XG5cblx0XHRpZiAoIXN0cmluZykge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblxuXHRcdHZhciBpdGVtcyA9IHt9O1xuXHRcdHZhciBzcGxpdHMgPSBzdHJpbmcuc3BsaXQoJyYnKTtcblx0XHR2YXIgbGVuZ3RoID0gc3BsaXRzLmxlbmd0aDtcblx0XHR2YXIgdiwgbmFtZSwgdmFsdWU7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2ID0gc3BsaXRzW2ldLnNwbGl0KCc9Jyk7XG5cdFx0XHRuYW1lID0gVVJJLmRlY29kZVF1ZXJ5KHYuc2hpZnQoKSwgZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0XHQvLyBubyBcIj1cIiBpcyBudWxsIGFjY29yZGluZyB0byBodHRwOi8vZHZjcy53My5vcmcvaGcvdXJsL3Jhdy1maWxlL3RpcC9PdmVydmlldy5odG1sI2NvbGxlY3QtdXJsLXBhcmFtZXRlcnNcblx0XHRcdHZhbHVlID0gdi5sZW5ndGggPyBVUkkuZGVjb2RlUXVlcnkodi5qb2luKCc9JyksIGVzY2FwZVF1ZXJ5U3BhY2UpIDogbnVsbDtcblxuXHRcdFx0aWYgKGhhc093bi5jYWxsKGl0ZW1zLCBuYW1lKSkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGl0ZW1zW25hbWVdID09PSAnc3RyaW5nJyB8fCBpdGVtc1tuYW1lXSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdGl0ZW1zW25hbWVdID0gW2l0ZW1zW25hbWVdXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGl0ZW1zW25hbWVdLnB1c2godmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXRlbXNbbmFtZV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gaXRlbXM7XG5cdH07XG5cblx0VVJJLmJ1aWxkID0gZnVuY3Rpb24ocGFydHMpIHtcblx0XHR2YXIgdCA9ICcnO1xuXG5cdFx0aWYgKHBhcnRzLnByb3RvY29sKSB7XG5cdFx0XHR0ICs9IHBhcnRzLnByb3RvY29sICsgJzonO1xuXHRcdH1cblxuXHRcdGlmICghcGFydHMudXJuICYmICh0IHx8IHBhcnRzLmhvc3RuYW1lKSkge1xuXHRcdFx0dCArPSAnLy8nO1xuXHRcdH1cblxuXHRcdHQgKz0gKFVSSS5idWlsZEF1dGhvcml0eShwYXJ0cykgfHwgJycpO1xuXG5cdFx0aWYgKHR5cGVvZiBwYXJ0cy5wYXRoID09PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKHBhcnRzLnBhdGguY2hhckF0KDApICE9PSAnLycgJiYgdHlwZW9mIHBhcnRzLmhvc3RuYW1lID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHR0ICs9ICcvJztcblx0XHRcdH1cblxuXHRcdFx0dCArPSBwYXJ0cy5wYXRoO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcGFydHMucXVlcnkgPT09ICdzdHJpbmcnICYmIHBhcnRzLnF1ZXJ5KSB7XG5cdFx0XHR0ICs9ICc/JyArIHBhcnRzLnF1ZXJ5O1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcGFydHMuZnJhZ21lbnQgPT09ICdzdHJpbmcnICYmIHBhcnRzLmZyYWdtZW50KSB7XG5cdFx0XHR0ICs9ICcjJyArIHBhcnRzLmZyYWdtZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gdDtcblx0fTtcblx0VVJJLmJ1aWxkSG9zdCA9IGZ1bmN0aW9uKHBhcnRzKSB7XG5cdFx0dmFyIHQgPSAnJztcblxuXHRcdGlmICghcGFydHMuaG9zdG5hbWUpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9IGVsc2UgaWYgKFVSSS5pcDZfZXhwcmVzc2lvbi50ZXN0KHBhcnRzLmhvc3RuYW1lKSkge1xuXHRcdFx0dCArPSAnWycgKyBwYXJ0cy5ob3N0bmFtZSArICddJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dCArPSBwYXJ0cy5ob3N0bmFtZTtcblx0XHR9XG5cblx0XHRpZiAocGFydHMucG9ydCkge1xuXHRcdFx0dCArPSAnOicgKyBwYXJ0cy5wb3J0O1xuXHRcdH1cblxuXHRcdHJldHVybiB0O1xuXHR9O1xuXHRVUkkuYnVpbGRBdXRob3JpdHkgPSBmdW5jdGlvbihwYXJ0cykge1xuXHRcdHJldHVybiBVUkkuYnVpbGRVc2VyaW5mbyhwYXJ0cykgKyBVUkkuYnVpbGRIb3N0KHBhcnRzKTtcblx0fTtcblx0VVJJLmJ1aWxkVXNlcmluZm8gPSBmdW5jdGlvbihwYXJ0cykge1xuXHRcdHZhciB0ID0gJyc7XG5cblx0XHRpZiAocGFydHMudXNlcm5hbWUpIHtcblx0XHRcdHQgKz0gVVJJLmVuY29kZShwYXJ0cy51c2VybmFtZSk7XG5cblx0XHRcdGlmIChwYXJ0cy5wYXNzd29yZCkge1xuXHRcdFx0XHR0ICs9ICc6JyArIFVSSS5lbmNvZGUocGFydHMucGFzc3dvcmQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0ICs9ICdAJztcblx0XHR9XG5cblx0XHRyZXR1cm4gdDtcblx0fTtcblx0VVJJLmJ1aWxkUXVlcnkgPSBmdW5jdGlvbihkYXRhLCBkdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsIGVzY2FwZVF1ZXJ5U3BhY2UpIHtcblx0XHQvLyBhY2NvcmRpbmcgdG8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiBvciBodHRwOi8vbGFicy5hcGFjaGUub3JnL3dlYmFyY2gvdXJpL3JmYy9yZmMzOTg2Lmh0bWxcblx0XHQvLyBiZWluZyDCuy0uX34hJCYnKCkqKyw7PTpALz/CqyAlSEVYIGFuZCBhbG51bSBhcmUgYWxsb3dlZFxuXHRcdC8vIHRoZSBSRkMgZXhwbGljaXRseSBzdGF0ZXMgPy9mb28gYmVpbmcgYSB2YWxpZCB1c2UgY2FzZSwgbm8gbWVudGlvbiBvZiBwYXJhbWV0ZXIgc3ludGF4IVxuXHRcdC8vIFVSSS5qcyB0cmVhdHMgdGhlIHF1ZXJ5IHN0cmluZyBhcyBiZWluZyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcblx0XHQvLyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9pbnRlcmFjdC9mb3Jtcy5odG1sI2Zvcm0tY29udGVudC10eXBlXG5cblx0XHR2YXIgdCA9ICcnO1xuXHRcdHZhciB1bmlxdWUsIGtleSwgaSwgbGVuZ3RoO1xuXHRcdGZvciAoa2V5IGluIGRhdGEpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChkYXRhLCBrZXkpICYmIGtleSkge1xuXHRcdFx0XHRpZiAoaXNBcnJheShkYXRhW2tleV0pKSB7XG5cdFx0XHRcdFx0dW5pcXVlID0ge307XG5cdFx0XHRcdFx0Zm9yIChpID0gMCwgbGVuZ3RoID0gZGF0YVtrZXldLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoZGF0YVtrZXldW2ldICE9PSB1bmRlZmluZWQgJiYgdW5pcXVlW2RhdGFba2V5XVtpXSArICcnXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdHQgKz0gJyYnICsgVVJJLmJ1aWxkUXVlcnlQYXJhbWV0ZXIoa2V5LCBkYXRhW2tleV1baV0sIGVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dW5pcXVlW2RhdGFba2V5XVtpXSArICcnXSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0ICs9ICcmJyArIFVSSS5idWlsZFF1ZXJ5UGFyYW1ldGVyKGtleSwgZGF0YVtrZXldLCBlc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0LnN1YnN0cmluZygxKTtcblx0fTtcblx0VVJJLmJ1aWxkUXVlcnlQYXJhbWV0ZXIgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgZXNjYXBlUXVlcnlTcGFjZSkge1xuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvaW50ZXJhY3QvZm9ybXMuaHRtbCNmb3JtLWNvbnRlbnQtdHlwZSAtLSBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcblx0XHQvLyBkb24ndCBhcHBlbmQgXCI9XCIgZm9yIG51bGwgdmFsdWVzLCBhY2NvcmRpbmcgdG8gaHR0cDovL2R2Y3MudzMub3JnL2hnL3VybC9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCN1cmwtcGFyYW1ldGVyLXNlcmlhbGl6YXRpb25cblx0XHRyZXR1cm4gVVJJLmVuY29kZVF1ZXJ5KG5hbWUsIGVzY2FwZVF1ZXJ5U3BhY2UpICsgKHZhbHVlICE9PSBudWxsID8gJz0nICsgVVJJLmVuY29kZVF1ZXJ5KHZhbHVlLCBlc2NhcGVRdWVyeVNwYWNlKSA6ICcnKTtcblx0fTtcblxuXHRVUkkuYWRkUXVlcnkgPSBmdW5jdGlvbihkYXRhLCBuYW1lLCB2YWx1ZSkge1xuXHRcdGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGZvciAodmFyIGtleSBpbiBuYW1lKSB7XG5cdFx0XHRcdGlmIChoYXNPd24uY2FsbChuYW1lLCBrZXkpKSB7XG5cdFx0XHRcdFx0VVJJLmFkZFF1ZXJ5KGRhdGEsIGtleSwgbmFtZVtrZXldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRpZiAoZGF0YVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRhdGFbbmFtZV0gPSB2YWx1ZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgZGF0YVtuYW1lXSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0ZGF0YVtuYW1lXSA9IFtkYXRhW25hbWVdXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IFt2YWx1ZV07XG5cdFx0XHR9XG5cblx0XHRcdGRhdGFbbmFtZV0gPSAoZGF0YVtuYW1lXSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVVJJLmFkZFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXInKTtcblx0XHR9XG5cdH07XG5cdFVSSS5yZW1vdmVRdWVyeSA9IGZ1bmN0aW9uKGRhdGEsIG5hbWUsIHZhbHVlKSB7XG5cdFx0dmFyIGksIGxlbmd0aCwga2V5O1xuXG5cdFx0aWYgKGlzQXJyYXkobmFtZSkpIHtcblx0XHRcdGZvciAoaSA9IDAsIGxlbmd0aCA9IG5hbWUubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ZGF0YVtuYW1lW2ldXSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGdldFR5cGUobmFtZSkgPT09ICdSZWdFeHAnKSB7XG5cdFx0XHRmb3IgKGtleSBpbiBkYXRhKSB7XG5cdFx0XHRcdGlmIChuYW1lLnRlc3Qoa2V5KSkge1xuXHRcdFx0XHRcdGRhdGFba2V5XSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKGtleSBpbiBuYW1lKSB7XG5cdFx0XHRcdGlmIChoYXNPd24uY2FsbChuYW1lLCBrZXkpKSB7XG5cdFx0XHRcdFx0VVJJLnJlbW92ZVF1ZXJ5KGRhdGEsIGtleSwgbmFtZVtrZXldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAoZ2V0VHlwZSh2YWx1ZSkgPT09ICdSZWdFeHAnKSB7XG5cdFx0XHRcdFx0aWYgKCFpc0FycmF5KGRhdGFbbmFtZV0pICYmIHZhbHVlLnRlc3QoZGF0YVtuYW1lXSkpIHtcblx0XHRcdFx0XHRcdGRhdGFbbmFtZV0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRhdGFbbmFtZV0gPSBmaWx0ZXJBcnJheVZhbHVlcyhkYXRhW25hbWVdLCB2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGRhdGFbbmFtZV0gPT09IFN0cmluZyh2YWx1ZSkgJiYgKCFpc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPT09IDEpKSB7XG5cdFx0XHRcdFx0ZGF0YVtuYW1lXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIGlmIChpc0FycmF5KGRhdGFbbmFtZV0pKSB7XG5cdFx0XHRcdFx0ZGF0YVtuYW1lXSA9IGZpbHRlckFycmF5VmFsdWVzKGRhdGFbbmFtZV0sIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVtuYW1lXSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVVJJLnJlbW92ZVF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZywgUmVnRXhwIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXInKTtcblx0XHR9XG5cdH07XG5cdFVSSS5oYXNRdWVyeSA9IGZ1bmN0aW9uKGRhdGEsIG5hbWUsIHZhbHVlLCB3aXRoaW5BcnJheSkge1xuXHRcdGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGZvciAodmFyIGtleSBpbiBuYW1lKSB7XG5cdFx0XHRcdGlmIChoYXNPd24uY2FsbChuYW1lLCBrZXkpKSB7XG5cdFx0XHRcdFx0aWYgKCFVUkkuaGFzUXVlcnkoZGF0YSwga2V5LCBuYW1lW2tleV0pKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdVUkkuaGFzUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlcicpO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAoZ2V0VHlwZSh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgJ1VuZGVmaW5lZCc6XG5cdFx0XHRcdC8vIHRydWUgaWYgZXhpc3RzIChidXQgbWF5IGJlIGVtcHR5KVxuXHRcdFx0XHRyZXR1cm4gbmFtZSBpbiBkYXRhOyAvLyBkYXRhW25hbWVdICE9PSB1bmRlZmluZWQ7XG5cblx0XHRcdGNhc2UgJ0Jvb2xlYW4nOlxuXHRcdFx0XHQvLyB0cnVlIGlmIGV4aXN0cyBhbmQgbm9uLWVtcHR5XG5cdFx0XHRcdHZhciBfYm9vbHkgPSBCb29sZWFuKGlzQXJyYXkoZGF0YVtuYW1lXSkgPyBkYXRhW25hbWVdLmxlbmd0aCA6IGRhdGFbbmFtZV0pO1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IF9ib29seTtcblxuXHRcdFx0Y2FzZSAnRnVuY3Rpb24nOlxuXHRcdFx0XHQvLyBhbGxvdyBjb21wbGV4IGNvbXBhcmlzb25cblx0XHRcdFx0cmV0dXJuICEhdmFsdWUoZGF0YVtuYW1lXSwgbmFtZSwgZGF0YSk7XG5cblx0XHRcdGNhc2UgJ0FycmF5Jzpcblx0XHRcdFx0aWYgKCFpc0FycmF5KGRhdGFbbmFtZV0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIG9wID0gd2l0aGluQXJyYXkgPyBhcnJheUNvbnRhaW5zIDogYXJyYXlzRXF1YWw7XG5cdFx0XHRcdHJldHVybiBvcChkYXRhW25hbWVdLCB2YWx1ZSk7XG5cblx0XHRcdGNhc2UgJ1JlZ0V4cCc6XG5cdFx0XHRcdGlmICghaXNBcnJheShkYXRhW25hbWVdKSkge1xuXHRcdFx0XHRcdHJldHVybiBCb29sZWFuKGRhdGFbbmFtZV0gJiYgZGF0YVtuYW1lXS5tYXRjaCh2YWx1ZSkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF3aXRoaW5BcnJheSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBhcnJheUNvbnRhaW5zKGRhdGFbbmFtZV0sIHZhbHVlKTtcblxuXHRcdFx0Y2FzZSAnTnVtYmVyJzpcblx0XHRcdFx0dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0Y2FzZSAnU3RyaW5nJzpcblx0XHRcdFx0aWYgKCFpc0FycmF5KGRhdGFbbmFtZV0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGFbbmFtZV0gPT09IHZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF3aXRoaW5BcnJheSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBhcnJheUNvbnRhaW5zKGRhdGFbbmFtZV0sIHZhbHVlKTtcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVVJJLmhhc1F1ZXJ5KCkgYWNjZXB0cyB1bmRlZmluZWQsIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyLCBSZWdFeHAsIEZ1bmN0aW9uIGFzIHRoZSB2YWx1ZSBwYXJhbWV0ZXInKTtcblx0XHR9XG5cdH07XG5cblxuXHRVUkkuY29tbW9uUGF0aCA9IGZ1bmN0aW9uKG9uZSwgdHdvKSB7XG5cdFx0dmFyIGxlbmd0aCA9IE1hdGgubWluKG9uZS5sZW5ndGgsIHR3by5sZW5ndGgpO1xuXHRcdHZhciBwb3M7XG5cblx0XHQvLyBmaW5kIGZpcnN0IG5vbi1tYXRjaGluZyBjaGFyYWN0ZXJcblx0XHRmb3IgKHBvcyA9IDA7IHBvcyA8IGxlbmd0aDsgcG9zKyspIHtcblx0XHRcdGlmIChvbmUuY2hhckF0KHBvcykgIT09IHR3by5jaGFyQXQocG9zKSkge1xuXHRcdFx0XHRwb3MtLTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBvcyA8IDEpIHtcblx0XHRcdHJldHVybiBvbmUuY2hhckF0KDApID09PSB0d28uY2hhckF0KDApICYmIG9uZS5jaGFyQXQoMCkgPT09ICcvJyA/ICcvJyA6ICcnO1xuXHRcdH1cblxuXHRcdC8vIHJldmVydCB0byBsYXN0IC9cblx0XHRpZiAob25lLmNoYXJBdChwb3MpICE9PSAnLycgfHwgdHdvLmNoYXJBdChwb3MpICE9PSAnLycpIHtcblx0XHRcdHBvcyA9IG9uZS5zdWJzdHJpbmcoMCwgcG9zKS5sYXN0SW5kZXhPZignLycpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvbmUuc3Vic3RyaW5nKDAsIHBvcyArIDEpO1xuXHR9O1xuXG5cdFVSSS53aXRoaW5TdHJpbmcgPSBmdW5jdGlvbihzdHJpbmcsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG5cdFx0b3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcblx0XHR2YXIgX3N0YXJ0ID0gb3B0aW9ucy5zdGFydCB8fCBVUkkuZmluZFVyaS5zdGFydDtcblx0XHR2YXIgX2VuZCA9IG9wdGlvbnMuZW5kIHx8IFVSSS5maW5kVXJpLmVuZDtcblx0XHR2YXIgX3RyaW0gPSBvcHRpb25zLnRyaW0gfHwgVVJJLmZpbmRVcmkudHJpbTtcblx0XHR2YXIgX2F0dHJpYnV0ZU9wZW4gPSAvW2EtejAtOS1dPVtcIiddPyQvaTtcblxuXHRcdF9zdGFydC5sYXN0SW5kZXggPSAwO1xuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHR2YXIgbWF0Y2ggPSBfc3RhcnQuZXhlYyhzdHJpbmcpO1xuXHRcdFx0aWYgKCFtYXRjaCkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0dmFyIHN0YXJ0ID0gbWF0Y2guaW5kZXg7XG5cdFx0XHRpZiAob3B0aW9ucy5pZ25vcmVIdG1sKSB7XG5cdFx0XHRcdC8vIGF0dHJpYnV0KGU9W1wiJ10/JClcblx0XHRcdFx0dmFyIGF0dHJpYnV0ZU9wZW4gPSBzdHJpbmcuc2xpY2UoTWF0aC5tYXgoc3RhcnQgLSAzLCAwKSwgc3RhcnQpO1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlT3BlbiAmJiBfYXR0cmlidXRlT3Blbi50ZXN0KGF0dHJpYnV0ZU9wZW4pKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyIGVuZCA9IHN0YXJ0ICsgc3RyaW5nLnNsaWNlKHN0YXJ0KS5zZWFyY2goX2VuZCk7XG5cdFx0XHR2YXIgc2xpY2UgPSBzdHJpbmcuc2xpY2Uoc3RhcnQsIGVuZCkucmVwbGFjZShfdHJpbSwgJycpO1xuXHRcdFx0aWYgKG9wdGlvbnMuaWdub3JlICYmIG9wdGlvbnMuaWdub3JlLnRlc3Qoc2xpY2UpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRlbmQgPSBzdGFydCArIHNsaWNlLmxlbmd0aDtcblx0XHRcdHZhciByZXN1bHQgPSBjYWxsYmFjayhzbGljZSwgc3RhcnQsIGVuZCwgc3RyaW5nKTtcblx0XHRcdHN0cmluZyA9IHN0cmluZy5zbGljZSgwLCBzdGFydCkgKyByZXN1bHQgKyBzdHJpbmcuc2xpY2UoZW5kKTtcblx0XHRcdF9zdGFydC5sYXN0SW5kZXggPSBzdGFydCArIHJlc3VsdC5sZW5ndGg7XG5cdFx0fVxuXG5cdFx0X3N0YXJ0Lmxhc3RJbmRleCA9IDA7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fTtcblxuXHRVUkkuZW5zdXJlVmFsaWRIb3N0bmFtZSA9IGZ1bmN0aW9uKHYpIHtcblx0XHQvLyBUaGVvcmV0aWNhbGx5IFVSSXMgYWxsb3cgcGVyY2VudC1lbmNvZGluZyBpbiBIb3N0bmFtZXMgKGFjY29yZGluZyB0byBSRkMgMzk4Nilcblx0XHQvLyB0aGV5IGFyZSBub3QgcGFydCBvZiBETlMgYW5kIHRoZXJlZm9yZSBpZ25vcmVkIGJ5IFVSSS5qc1xuXG5cdFx0aWYgKHYubWF0Y2goVVJJLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycykpIHtcblx0XHRcdC8vIHRlc3QgcHVueWNvZGVcblx0XHRcdGlmICghcHVueWNvZGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXSBhbmQgUHVueWNvZGUuanMgaXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocHVueWNvZGUudG9BU0NJSSh2KS5tYXRjaChVUkkuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSBcIicgKyB2ICsgJ1wiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8vIG5vQ29uZmxpY3Rcblx0VVJJLm5vQ29uZmxpY3QgPSBmdW5jdGlvbihyZW1vdmVBbGwpIHtcblx0XHRpZiAocmVtb3ZlQWxsKSB7XG5cdFx0XHR2YXIgdW5jb25mbGljdGVkID0ge1xuXHRcdFx0XHRVUkk6IHRoaXMubm9Db25mbGljdCgpXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAocm9vdC5VUklUZW1wbGF0ZSAmJiB0eXBlb2Ygcm9vdC5VUklUZW1wbGF0ZS5ub0NvbmZsaWN0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHVuY29uZmxpY3RlZC5VUklUZW1wbGF0ZSA9IHJvb3QuVVJJVGVtcGxhdGUubm9Db25mbGljdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocm9vdC5JUHY2ICYmIHR5cGVvZiByb290LklQdjYubm9Db25mbGljdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR1bmNvbmZsaWN0ZWQuSVB2NiA9IHJvb3QuSVB2Ni5ub0NvbmZsaWN0KCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyb290LlNlY29uZExldmVsRG9tYWlucyAmJiB0eXBlb2Ygcm9vdC5TZWNvbmRMZXZlbERvbWFpbnMubm9Db25mbGljdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR1bmNvbmZsaWN0ZWQuU2Vjb25kTGV2ZWxEb21haW5zID0gcm9vdC5TZWNvbmRMZXZlbERvbWFpbnMubm9Db25mbGljdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5jb25mbGljdGVkO1xuXHRcdH0gZWxzZSBpZiAocm9vdC5VUkkgPT09IHRoaXMpIHtcblx0XHRcdHJvb3QuVVJJID0gX1VSSTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRwLmJ1aWxkID0gZnVuY3Rpb24oZGVmZXJCdWlsZCkge1xuXHRcdGlmIChkZWZlckJ1aWxkID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLl9kZWZlcnJlZF9idWlsZCA9IHRydWU7XG5cdFx0fSBlbHNlIGlmIChkZWZlckJ1aWxkID09PSB1bmRlZmluZWQgfHwgdGhpcy5fZGVmZXJyZWRfYnVpbGQpIHtcblx0XHRcdHRoaXMuX3N0cmluZyA9IFVSSS5idWlsZCh0aGlzLl9wYXJ0cyk7XG5cdFx0XHR0aGlzLl9kZWZlcnJlZF9idWlsZCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdHAuY2xvbmUgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gbmV3IFVSSSh0aGlzKTtcblx0fTtcblxuXHRwLnZhbHVlT2YgPSBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuYnVpbGQoZmFsc2UpLl9zdHJpbmc7XG5cdH07XG5cblxuXHRmdW5jdGlvbiBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKF9wYXJ0KXtcblx0XHRyZXR1cm4gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX3BhcnRzW19wYXJ0XSB8fCAnJztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX3BhcnRzW19wYXJ0XSA9IHYgfHwgbnVsbDtcblx0XHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVQcmVmaXhBY2Nlc3NvcihfcGFydCwgX2tleSl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9wYXJ0c1tfcGFydF0gfHwgJyc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAodiAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHYgPSB2ICsgJyc7XG5cdFx0XHRcdFx0aWYgKHYuY2hhckF0KDApID09PSBfa2V5KSB7XG5cdFx0XHRcdFx0XHR2ID0gdi5zdWJzdHJpbmcoMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5fcGFydHNbX3BhcnRdID0gdjtcblx0XHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0cC5wcm90b2NvbCA9IGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoJ3Byb3RvY29sJyk7XG5cdHAudXNlcm5hbWUgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCd1c2VybmFtZScpO1xuXHRwLnBhc3N3b3JkID0gZ2VuZXJhdGVTaW1wbGVBY2Nlc3NvcigncGFzc3dvcmQnKTtcblx0cC5ob3N0bmFtZSA9IGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoJ2hvc3RuYW1lJyk7XG5cdHAucG9ydCA9IGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoJ3BvcnQnKTtcblx0cC5xdWVyeSA9IGdlbmVyYXRlUHJlZml4QWNjZXNzb3IoJ3F1ZXJ5JywgJz8nKTtcblx0cC5mcmFnbWVudCA9IGdlbmVyYXRlUHJlZml4QWNjZXNzb3IoJ2ZyYWdtZW50JywgJyMnKTtcblxuXHRwLnNlYXJjaCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0dmFyIHQgPSB0aGlzLnF1ZXJ5KHYsIGJ1aWxkKTtcblx0XHRyZXR1cm4gdHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIHQubGVuZ3RoID8gKCc/JyArIHQpIDogdDtcblx0fTtcblx0cC5oYXNoID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHR2YXIgdCA9IHRoaXMuZnJhZ21lbnQodiwgYnVpbGQpO1xuXHRcdHJldHVybiB0eXBlb2YgdCA9PT0gJ3N0cmluZycgJiYgdC5sZW5ndGggPyAoJyMnICsgdCkgOiB0O1xuXHR9O1xuXG5cdHAucGF0aG5hbWUgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gdHJ1ZSkge1xuXHRcdFx0dmFyIHJlcyA9IHRoaXMuX3BhcnRzLnBhdGggfHwgKHRoaXMuX3BhcnRzLmhvc3RuYW1lID8gJy8nIDogJycpO1xuXHRcdFx0cmV0dXJuIHYgPyAodGhpcy5fcGFydHMudXJuID8gVVJJLmRlY29kZVVyblBhdGggOiBVUkkuZGVjb2RlUGF0aCkocmVzKSA6IHJlcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5wYXRoID0gdiA/IFVSSS5yZWNvZGVVcm5QYXRoKHYpIDogJyc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5wYXRoID0gdiA/IFVSSS5yZWNvZGVQYXRoKHYpIDogJy8nO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLnBhdGggPSBwLnBhdGhuYW1lO1xuXHRwLmhyZWYgPSBmdW5jdGlvbihocmVmLCBidWlsZCkge1xuXHRcdHZhciBrZXk7XG5cblx0XHRpZiAoaHJlZiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3N0cmluZyA9ICcnO1xuXHRcdHRoaXMuX3BhcnRzID0gVVJJLl9wYXJ0cygpO1xuXG5cdFx0dmFyIF9VUkkgPSBocmVmIGluc3RhbmNlb2YgVVJJO1xuXHRcdHZhciBfb2JqZWN0ID0gdHlwZW9mIGhyZWYgPT09ICdvYmplY3QnICYmIChocmVmLmhvc3RuYW1lIHx8IGhyZWYucGF0aCB8fCBocmVmLnBhdGhuYW1lKTtcblx0XHRpZiAoaHJlZi5ub2RlTmFtZSkge1xuXHRcdFx0dmFyIGF0dHJpYnV0ZSA9IFVSSS5nZXREb21BdHRyaWJ1dGUoaHJlZik7XG5cdFx0XHRocmVmID0gaHJlZlthdHRyaWJ1dGVdIHx8ICcnO1xuXHRcdFx0X29iamVjdCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIHdpbmRvdy5sb2NhdGlvbiBpcyByZXBvcnRlZCB0byBiZSBhbiBvYmplY3QsIGJ1dCBpdCdzIG5vdCB0aGUgc29ydFxuXHRcdC8vIG9mIG9iamVjdCB3ZSdyZSBsb29raW5nIGZvcjpcblx0XHQvLyAqIGxvY2F0aW9uLnByb3RvY29sIGVuZHMgd2l0aCBhIGNvbG9uXG5cdFx0Ly8gKiBsb2NhdGlvbi5xdWVyeSAhPSBvYmplY3Quc2VhcmNoXG5cdFx0Ly8gKiBsb2NhdGlvbi5oYXNoICE9IG9iamVjdC5mcmFnbWVudFxuXHRcdC8vIHNpbXBseSBzZXJpYWxpemluZyB0aGUgdW5rbm93biBvYmplY3Qgc2hvdWxkIGRvIHRoZSB0cmlja1xuXHRcdC8vIChmb3IgbG9jYXRpb24sIG5vdCBmb3IgZXZlcnl0aGluZy4uLilcblx0XHRpZiAoIV9VUkkgJiYgX29iamVjdCAmJiBocmVmLnBhdGhuYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGhyZWYgPSBocmVmLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBocmVmID09PSAnc3RyaW5nJyB8fCBocmVmIGluc3RhbmNlb2YgU3RyaW5nKSB7XG5cdFx0XHR0aGlzLl9wYXJ0cyA9IFVSSS5wYXJzZShTdHJpbmcoaHJlZiksIHRoaXMuX3BhcnRzKTtcblx0XHR9IGVsc2UgaWYgKF9VUkkgfHwgX29iamVjdCkge1xuXHRcdFx0dmFyIHNyYyA9IF9VUkkgPyBocmVmLl9wYXJ0cyA6IGhyZWY7XG5cdFx0XHRmb3IgKGtleSBpbiBzcmMpIHtcblx0XHRcdFx0aWYgKGhhc093bi5jYWxsKHRoaXMuX3BhcnRzLCBrZXkpKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGFydHNba2V5XSA9IHNyY1trZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgaW5wdXQnKTtcblx0XHR9XG5cblx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0Ly8gaWRlbnRpZmljYXRpb24gYWNjZXNzb3JzXG5cdHAuaXMgPSBmdW5jdGlvbih3aGF0KSB7XG5cdFx0dmFyIGlwID0gZmFsc2U7XG5cdFx0dmFyIGlwNCA9IGZhbHNlO1xuXHRcdHZhciBpcDYgPSBmYWxzZTtcblx0XHR2YXIgbmFtZSA9IGZhbHNlO1xuXHRcdHZhciBzbGQgPSBmYWxzZTtcblx0XHR2YXIgaWRuID0gZmFsc2U7XG5cdFx0dmFyIHB1bnljb2RlID0gZmFsc2U7XG5cdFx0dmFyIHJlbGF0aXZlID0gIXRoaXMuX3BhcnRzLnVybjtcblxuXHRcdGlmICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkge1xuXHRcdFx0cmVsYXRpdmUgPSBmYWxzZTtcblx0XHRcdGlwNCA9IFVSSS5pcDRfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHRcdGlwNiA9IFVSSS5pcDZfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHRcdGlwID0gaXA0IHx8IGlwNjtcblx0XHRcdG5hbWUgPSAhaXA7XG5cdFx0XHRzbGQgPSBuYW1lICYmIFNMRCAmJiBTTEQuaGFzKHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHRcdGlkbiA9IG5hbWUgJiYgVVJJLmlkbl9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xuXHRcdFx0cHVueWNvZGUgPSBuYW1lICYmIFVSSS5wdW55Y29kZV9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAod2hhdC50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0XHRjYXNlICdyZWxhdGl2ZSc6XG5cdFx0XHRcdHJldHVybiByZWxhdGl2ZTtcblxuXHRcdFx0Y2FzZSAnYWJzb2x1dGUnOlxuXHRcdFx0XHRyZXR1cm4gIXJlbGF0aXZlO1xuXG5cdFx0XHQvLyBob3N0bmFtZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0Y2FzZSAnZG9tYWluJzpcblx0XHRcdGNhc2UgJ25hbWUnOlxuXHRcdFx0XHRyZXR1cm4gbmFtZTtcblxuXHRcdFx0Y2FzZSAnc2xkJzpcblx0XHRcdFx0cmV0dXJuIHNsZDtcblxuXHRcdFx0Y2FzZSAnaXAnOlxuXHRcdFx0XHRyZXR1cm4gaXA7XG5cblx0XHRcdGNhc2UgJ2lwNCc6XG5cdFx0XHRjYXNlICdpcHY0Jzpcblx0XHRcdGNhc2UgJ2luZXQ0Jzpcblx0XHRcdFx0cmV0dXJuIGlwNDtcblxuXHRcdFx0Y2FzZSAnaXA2Jzpcblx0XHRcdGNhc2UgJ2lwdjYnOlxuXHRcdFx0Y2FzZSAnaW5ldDYnOlxuXHRcdFx0XHRyZXR1cm4gaXA2O1xuXG5cdFx0XHRjYXNlICdpZG4nOlxuXHRcdFx0XHRyZXR1cm4gaWRuO1xuXG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0XHRyZXR1cm4gIXRoaXMuX3BhcnRzLnVybjtcblxuXHRcdFx0Y2FzZSAndXJuJzpcblx0XHRcdFx0cmV0dXJuICEhdGhpcy5fcGFydHMudXJuO1xuXG5cdFx0XHRjYXNlICdwdW55Y29kZSc6XG5cdFx0XHRcdHJldHVybiBwdW55Y29kZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHQvLyBjb21wb25lbnQgc3BlY2lmaWMgaW5wdXQgdmFsaWRhdGlvblxuXHR2YXIgX3Byb3RvY29sID0gcC5wcm90b2NvbDtcblx0dmFyIF9wb3J0ID0gcC5wb3J0O1xuXHR2YXIgX2hvc3RuYW1lID0gcC5ob3N0bmFtZTtcblxuXHRwLnByb3RvY29sID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodikge1xuXHRcdFx0XHQvLyBhY2NlcHQgdHJhaWxpbmcgOi8vXG5cdFx0XHRcdHYgPSB2LnJlcGxhY2UoLzooXFwvXFwvKT8kLywgJycpO1xuXG5cdFx0XHRcdGlmICghdi5tYXRjaChVUkkucHJvdG9jb2xfZXhwcmVzc2lvbikpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm90b2NvbCBcIicgKyB2ICsgJ1wiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05ListXSBvciBkb2VzblxcJ3Qgc3RhcnQgd2l0aCBbQS1aXScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBfcHJvdG9jb2wuY2FsbCh0aGlzLCB2LCBidWlsZCk7XG5cdH07XG5cdHAuc2NoZW1lID0gcC5wcm90b2NvbDtcblx0cC5wb3J0ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICh2ID09PSAwKSB7XG5cdFx0XHRcdHYgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodikge1xuXHRcdFx0XHR2ICs9ICcnO1xuXHRcdFx0XHRpZiAodi5jaGFyQXQoMCkgPT09ICc6Jykge1xuXHRcdFx0XHRcdHYgPSB2LnN1YnN0cmluZygxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2Lm1hdGNoKC9bXjAtOV0vKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1BvcnQgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gWzAtOV0nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gX3BvcnQuY2FsbCh0aGlzLCB2LCBidWlsZCk7XG5cdH07XG5cdHAuaG9zdG5hbWUgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFyIHggPSB7fTtcblx0XHRcdHZhciByZXMgPSBVUkkucGFyc2VIb3N0KHYsIHgpO1xuXHRcdFx0aWYgKHJlcyAhPT0gJy8nKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtcblx0XHRcdH1cblxuXHRcdFx0diA9IHguaG9zdG5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBfaG9zdG5hbWUuY2FsbCh0aGlzLCB2LCBidWlsZCk7XG5cdH07XG5cblx0Ly8gY29tcG91bmQgYWNjZXNzb3JzXG5cdHAub3JpZ2luID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHR2YXIgcGFydHM7XG5cblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhciBwcm90b2NvbCA9IHRoaXMucHJvdG9jb2woKTtcblx0XHRcdHZhciBhdXRob3JpdHkgPSB0aGlzLmF1dGhvcml0eSgpO1xuXHRcdFx0aWYgKCFhdXRob3JpdHkpIHJldHVybiAnJztcblx0XHRcdHJldHVybiAocHJvdG9jb2wgPyBwcm90b2NvbCArICc6Ly8nIDogJycpICsgdGhpcy5hdXRob3JpdHkoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIG9yaWdpbiA9IFVSSSh2KTtcblx0XHRcdHRoaXNcblx0XHRcdFx0LnByb3RvY29sKG9yaWdpbi5wcm90b2NvbCgpKVxuXHRcdFx0XHQuYXV0aG9yaXR5KG9yaWdpbi5hdXRob3JpdHkoKSlcblx0XHRcdFx0LmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAuaG9zdCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWUgPyBVUkkuYnVpbGRIb3N0KHRoaXMuX3BhcnRzKSA6ICcnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgcmVzID0gVVJJLnBhcnNlSG9zdCh2LCB0aGlzLl9wYXJ0cyk7XG5cdFx0XHRpZiAocmVzICE9PSAnLycpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAuYXV0aG9yaXR5ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZSA/IFVSSS5idWlsZEF1dGhvcml0eSh0aGlzLl9wYXJ0cykgOiAnJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHJlcyA9IFVSSS5wYXJzZUF1dGhvcml0eSh2LCB0aGlzLl9wYXJ0cyk7XG5cdFx0XHRpZiAocmVzICE9PSAnLycpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAudXNlcmluZm8gPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy51c2VybmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cblx0XHRcdHZhciB0ID0gVVJJLmJ1aWxkVXNlcmluZm8odGhpcy5fcGFydHMpO1xuXHRcdFx0cmV0dXJuIHQuc3Vic3RyaW5nKDAsIHQubGVuZ3RoIC0xKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHZbdi5sZW5ndGgtMV0gIT09ICdAJykge1xuXHRcdFx0XHR2ICs9ICdAJztcblx0XHRcdH1cblxuXHRcdFx0VVJJLnBhcnNlVXNlcmluZm8odiwgdGhpcy5fcGFydHMpO1xuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLnJlc291cmNlID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHR2YXIgcGFydHM7XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYXRoKCkgKyB0aGlzLnNlYXJjaCgpICsgdGhpcy5oYXNoKCk7XG5cdFx0fVxuXG5cdFx0cGFydHMgPSBVUkkucGFyc2Uodik7XG5cdFx0dGhpcy5fcGFydHMucGF0aCA9IHBhcnRzLnBhdGg7XG5cdFx0dGhpcy5fcGFydHMucXVlcnkgPSBwYXJ0cy5xdWVyeTtcblx0XHR0aGlzLl9wYXJ0cy5mcmFnbWVudCA9IHBhcnRzLmZyYWdtZW50O1xuXHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvLyBmcmFjdGlvbiBhY2Nlc3NvcnNcblx0cC5zdWJkb21haW4gPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gY29udmVuaWVuY2UsIHJldHVybiBcInd3d1wiIGZyb20gXCJ3d3cuZXhhbXBsZS5vcmdcIlxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICghdGhpcy5fcGFydHMuaG9zdG5hbWUgfHwgdGhpcy5pcygnSVAnKSkge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGdyYWIgZG9tYWluIGFuZCBhZGQgYW5vdGhlciBzZWdtZW50XG5cdFx0XHR2YXIgZW5kID0gdGhpcy5fcGFydHMuaG9zdG5hbWUubGVuZ3RoIC0gdGhpcy5kb21haW4oKS5sZW5ndGggLSAxO1xuXHRcdFx0cmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLCBlbmQpIHx8ICcnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aCAtIHRoaXMuZG9tYWluKCkubGVuZ3RoO1xuXHRcdFx0dmFyIHN1YiA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLCBlKTtcblx0XHRcdHZhciByZXBsYWNlID0gbmV3IFJlZ0V4cCgnXicgKyBlc2NhcGVSZWdFeChzdWIpKTtcblxuXHRcdFx0aWYgKHYgJiYgdi5jaGFyQXQodi5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XG5cdFx0XHRcdHYgKz0gJy4nO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodikge1xuXHRcdFx0XHRVUkkuZW5zdXJlVmFsaWRIb3N0bmFtZSh2KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fcGFydHMuaG9zdG5hbWUgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKHJlcGxhY2UsIHYpO1xuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLmRvbWFpbiA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykge1xuXHRcdFx0YnVpbGQgPSB2O1xuXHRcdFx0diA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBjb252ZW5pZW5jZSwgcmV0dXJuIFwiZXhhbXBsZS5vcmdcIiBmcm9tIFwid3d3LmV4YW1wbGUub3JnXCJcblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoIXRoaXMuX3BhcnRzLmhvc3RuYW1lIHx8IHRoaXMuaXMoJ0lQJykpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBpZiBob3N0bmFtZSBjb25zaXN0cyBvZiAxIG9yIDIgc2VnbWVudHMsIGl0IG11c3QgYmUgdGhlIGRvbWFpblxuXHRcdFx0dmFyIHQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5tYXRjaCgvXFwuL2cpO1xuXHRcdFx0aWYgKHQgJiYgdC5sZW5ndGggPCAyKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZ3JhYiB0bGQgYW5kIGFkZCBhbm90aGVyIHNlZ21lbnRcblx0XHRcdHZhciBlbmQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGggLSB0aGlzLnRsZChidWlsZCkubGVuZ3RoIC0gMTtcblx0XHRcdGVuZCA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLmxhc3RJbmRleE9mKCcuJywgZW5kIC0xKSArIDE7XG5cdFx0XHRyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWUuc3Vic3RyaW5nKGVuZCkgfHwgJyc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdikge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdjYW5ub3Qgc2V0IGRvbWFpbiBlbXB0eScpO1xuXHRcdFx0fVxuXG5cdFx0XHRVUkkuZW5zdXJlVmFsaWRIb3N0bmFtZSh2KTtcblxuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZSB8fCB0aGlzLmlzKCdJUCcpKSB7XG5cdFx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciByZXBsYWNlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeCh0aGlzLmRvbWFpbigpKSArICckJyk7XG5cdFx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShyZXBsYWNlLCB2KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLnRsZCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykge1xuXHRcdFx0YnVpbGQgPSB2O1xuXHRcdFx0diA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyByZXR1cm4gXCJvcmdcIiBmcm9tIFwid3d3LmV4YW1wbGUub3JnXCJcblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoIXRoaXMuX3BhcnRzLmhvc3RuYW1lIHx8IHRoaXMuaXMoJ0lQJykpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcG9zID0gdGhpcy5fcGFydHMuaG9zdG5hbWUubGFzdEluZGV4T2YoJy4nKTtcblx0XHRcdHZhciB0bGQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcocG9zICsgMSk7XG5cblx0XHRcdGlmIChidWlsZCAhPT0gdHJ1ZSAmJiBTTEQgJiYgU0xELmxpc3RbdGxkLnRvTG93ZXJDYXNlKCldKSB7XG5cdFx0XHRcdHJldHVybiBTTEQuZ2V0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSB8fCB0bGQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0bGQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciByZXBsYWNlO1xuXG5cdFx0XHRpZiAoIXYpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignY2Fubm90IHNldCBUTEQgZW1wdHknKTtcblx0XHRcdH0gZWxzZSBpZiAodi5tYXRjaCgvW15hLXpBLVowLTktXS8pKSB7XG5cdFx0XHRcdGlmIChTTEQgJiYgU0xELmlzKHYpKSB7XG5cdFx0XHRcdFx0cmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgodGhpcy50bGQoKSkgKyAnJCcpO1xuXHRcdFx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShyZXBsYWNlLCB2KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUTEQgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOV0nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICghdGhpcy5fcGFydHMuaG9zdG5hbWUgfHwgdGhpcy5pcygnSVAnKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ2Nhbm5vdCBzZXQgVExEIG9uIG5vbi1kb21haW4gaG9zdCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgodGhpcy50bGQoKSkgKyAnJCcpO1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UocmVwbGFjZSwgdik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC5kaXJlY3RvcnkgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoIXRoaXMuX3BhcnRzLnBhdGggJiYgIXRoaXMuX3BhcnRzLmhvc3RuYW1lKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX3BhcnRzLnBhdGggPT09ICcvJykge1xuXHRcdFx0XHRyZXR1cm4gJy8nO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZW5kID0gdGhpcy5fcGFydHMucGF0aC5sZW5ndGggLSB0aGlzLmZpbGVuYW1lKCkubGVuZ3RoIC0gMTtcblx0XHRcdHZhciByZXMgPSB0aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygwLCBlbmQpIHx8ICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSA/ICcvJyA6ICcnKTtcblxuXHRcdFx0cmV0dXJuIHYgPyBVUkkuZGVjb2RlUGF0aChyZXMpIDogcmVzO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBlID0gdGhpcy5fcGFydHMucGF0aC5sZW5ndGggLSB0aGlzLmZpbGVuYW1lKCkubGVuZ3RoO1xuXHRcdFx0dmFyIGRpcmVjdG9yeSA9IHRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKDAsIGUpO1xuXHRcdFx0dmFyIHJlcGxhY2UgPSBuZXcgUmVnRXhwKCdeJyArIGVzY2FwZVJlZ0V4KGRpcmVjdG9yeSkpO1xuXG5cdFx0XHQvLyBmdWxseSBxdWFsaWZpZXIgZGlyZWN0b3JpZXMgYmVnaW4gd2l0aCBhIHNsYXNoXG5cdFx0XHRpZiAoIXRoaXMuaXMoJ3JlbGF0aXZlJykpIHtcblx0XHRcdFx0aWYgKCF2KSB7XG5cdFx0XHRcdFx0diA9ICcvJztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2LmNoYXJBdCgwKSAhPT0gJy8nKSB7XG5cdFx0XHRcdFx0diA9ICcvJyArIHY7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gZGlyZWN0b3JpZXMgYWx3YXlzIGVuZCB3aXRoIGEgc2xhc2hcblx0XHRcdGlmICh2ICYmIHYuY2hhckF0KHYubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuXHRcdFx0XHR2ICs9ICcvJztcblx0XHRcdH1cblxuXHRcdFx0diA9IFVSSS5yZWNvZGVQYXRoKHYpO1xuXHRcdFx0dGhpcy5fcGFydHMucGF0aCA9IHRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShyZXBsYWNlLCB2KTtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC5maWxlbmFtZSA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IHRydWUpIHtcblx0XHRcdGlmICghdGhpcy5fcGFydHMucGF0aCB8fCB0aGlzLl9wYXJ0cy5wYXRoID09PSAnLycpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcG9zID0gdGhpcy5fcGFydHMucGF0aC5sYXN0SW5kZXhPZignLycpO1xuXHRcdFx0dmFyIHJlcyA9IHRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKHBvcysxKTtcblxuXHRcdFx0cmV0dXJuIHYgPyBVUkkuZGVjb2RlUGF0aFNlZ21lbnQocmVzKSA6IHJlcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIG11dGF0ZWREaXJlY3RvcnkgPSBmYWxzZTtcblxuXHRcdFx0aWYgKHYuY2hhckF0KDApID09PSAnLycpIHtcblx0XHRcdFx0diA9IHYuc3Vic3RyaW5nKDEpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodi5tYXRjaCgvXFwuP1xcLy8pKSB7XG5cdFx0XHRcdG11dGF0ZWREaXJlY3RvcnkgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgodGhpcy5maWxlbmFtZSgpKSArICckJyk7XG5cdFx0XHR2ID0gVVJJLnJlY29kZVBhdGgodik7XG5cdFx0XHR0aGlzLl9wYXJ0cy5wYXRoID0gdGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKHJlcGxhY2UsIHYpO1xuXG5cdFx0XHRpZiAobXV0YXRlZERpcmVjdG9yeSkge1xuXHRcdFx0XHR0aGlzLm5vcm1hbGl6ZVBhdGgoYnVpbGQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAuc3VmZml4ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy5wYXRoIHx8IHRoaXMuX3BhcnRzLnBhdGggPT09ICcvJykge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBmaWxlbmFtZSA9IHRoaXMuZmlsZW5hbWUoKTtcblx0XHRcdHZhciBwb3MgPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpO1xuXHRcdFx0dmFyIHMsIHJlcztcblxuXHRcdFx0aWYgKHBvcyA9PT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzdWZmaXggbWF5IG9ubHkgY29udGFpbiBhbG51bSBjaGFyYWN0ZXJzICh5dXAsIEkgbWFkZSB0aGlzIHVwLilcblx0XHRcdHMgPSBmaWxlbmFtZS5zdWJzdHJpbmcocG9zKzEpO1xuXHRcdFx0cmVzID0gKC9eW2EtejAtOSVdKyQvaSkudGVzdChzKSA/IHMgOiAnJztcblx0XHRcdHJldHVybiB2ID8gVVJJLmRlY29kZVBhdGhTZWdtZW50KHJlcykgOiByZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh2LmNoYXJBdCgwKSA9PT0gJy4nKSB7XG5cdFx0XHRcdHYgPSB2LnN1YnN0cmluZygxKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHN1ZmZpeCA9IHRoaXMuc3VmZml4KCk7XG5cdFx0XHR2YXIgcmVwbGFjZTtcblxuXHRcdFx0aWYgKCFzdWZmaXgpIHtcblx0XHRcdFx0aWYgKCF2KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9wYXJ0cy5wYXRoICs9ICcuJyArIFVSSS5yZWNvZGVQYXRoKHYpO1xuXHRcdFx0fSBlbHNlIGlmICghdikge1xuXHRcdFx0XHRyZXBsYWNlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeCgnLicgKyBzdWZmaXgpICsgJyQnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlcGxhY2UgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4KHN1ZmZpeCkgKyAnJCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVwbGFjZSkge1xuXHRcdFx0XHR2ID0gVVJJLnJlY29kZVBhdGgodik7XG5cdFx0XHRcdHRoaXMuX3BhcnRzLnBhdGggPSB0aGlzLl9wYXJ0cy5wYXRoLnJlcGxhY2UocmVwbGFjZSwgdik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC5zZWdtZW50ID0gZnVuY3Rpb24oc2VnbWVudCwgdiwgYnVpbGQpIHtcblx0XHR2YXIgc2VwYXJhdG9yID0gdGhpcy5fcGFydHMudXJuID8gJzonIDogJy8nO1xuXHRcdHZhciBwYXRoID0gdGhpcy5wYXRoKCk7XG5cdFx0dmFyIGFic29sdXRlID0gcGF0aC5zdWJzdHJpbmcoMCwgMSkgPT09ICcvJztcblx0XHR2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KHNlcGFyYXRvcik7XG5cblx0XHRpZiAoc2VnbWVudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzZWdtZW50ICE9PSAnbnVtYmVyJykge1xuXHRcdFx0YnVpbGQgPSB2O1xuXHRcdFx0diA9IHNlZ21lbnQ7XG5cdFx0XHRzZWdtZW50ID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmIChzZWdtZW50ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHNlZ21lbnQgIT09ICdudW1iZXInKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0JhZCBzZWdtZW50IFwiJyArIHNlZ21lbnQgKyAnXCIsIG11c3QgYmUgMC1iYXNlZCBpbnRlZ2VyJyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFic29sdXRlKSB7XG5cdFx0XHRzZWdtZW50cy5zaGlmdCgpO1xuXHRcdH1cblxuXHRcdGlmIChzZWdtZW50IDwgMCkge1xuXHRcdFx0Ly8gYWxsb3cgbmVnYXRpdmUgaW5kZXhlcyB0byBhZGRyZXNzIGZyb20gdGhlIGVuZFxuXHRcdFx0c2VnbWVudCA9IE1hdGgubWF4KHNlZ21lbnRzLmxlbmd0aCArIHNlZ21lbnQsIDApO1xuXHRcdH1cblxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8qanNoaW50IGxheGJyZWFrOiB0cnVlICovXG5cdFx0XHRyZXR1cm4gc2VnbWVudCA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gc2VnbWVudHNcblx0XHRcdFx0OiBzZWdtZW50c1tzZWdtZW50XTtcblx0XHRcdC8qanNoaW50IGxheGJyZWFrOiBmYWxzZSAqL1xuXHRcdH0gZWxzZSBpZiAoc2VnbWVudCA9PT0gbnVsbCB8fCBzZWdtZW50c1tzZWdtZW50XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoaXNBcnJheSh2KSkge1xuXHRcdFx0XHRzZWdtZW50cyA9IFtdO1xuXHRcdFx0XHQvLyBjb2xsYXBzZSBlbXB0eSBlbGVtZW50cyB3aXRoaW4gYXJyYXlcblx0XHRcdFx0Zm9yICh2YXIgaT0wLCBsPXYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKCF2W2ldLmxlbmd0aCAmJiAoIXNlZ21lbnRzLmxlbmd0aCB8fCAhc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0xXS5sZW5ndGgpKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoc2VnbWVudHMubGVuZ3RoICYmICFzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLTFdLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0c2VnbWVudHMucG9wKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c2VnbWVudHMucHVzaCh0cmltU2xhc2hlcyh2W2ldKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodiB8fCB0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0diA9IHRyaW1TbGFzaGVzKHYpO1xuXHRcdFx0XHRpZiAoc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0xXSA9PT0gJycpIHtcblx0XHRcdFx0XHQvLyBlbXB0eSB0cmFpbGluZyBlbGVtZW50cyBoYXZlIHRvIGJlIG92ZXJ3cml0dGVuXG5cdFx0XHRcdFx0Ly8gdG8gcHJldmVudCByZXN1bHRzIHN1Y2ggYXMgL2Zvby8vYmFyXG5cdFx0XHRcdFx0c2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0xXSA9IHY7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2VnbWVudHMucHVzaCh2KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodikge1xuXHRcdFx0XHRzZWdtZW50c1tzZWdtZW50XSA9IHRyaW1TbGFzaGVzKHYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VnbWVudHMuc3BsaWNlKHNlZ21lbnQsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChhYnNvbHV0ZSkge1xuXHRcdFx0c2VnbWVudHMudW5zaGlmdCgnJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucGF0aChzZWdtZW50cy5qb2luKHNlcGFyYXRvciksIGJ1aWxkKTtcblx0fTtcblx0cC5zZWdtZW50Q29kZWQgPSBmdW5jdGlvbihzZWdtZW50LCB2LCBidWlsZCkge1xuXHRcdHZhciBzZWdtZW50cywgaSwgbDtcblxuXHRcdGlmICh0eXBlb2Ygc2VnbWVudCAhPT0gJ251bWJlcicpIHtcblx0XHRcdGJ1aWxkID0gdjtcblx0XHRcdHYgPSBzZWdtZW50O1xuXHRcdFx0c2VnbWVudCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzZWdtZW50cyA9IHRoaXMuc2VnbWVudChzZWdtZW50LCB2LCBidWlsZCk7XG5cdFx0XHRpZiAoIWlzQXJyYXkoc2VnbWVudHMpKSB7XG5cdFx0XHRcdHNlZ21lbnRzID0gc2VnbWVudHMgIT09IHVuZGVmaW5lZCA/IFVSSS5kZWNvZGUoc2VnbWVudHMpIDogdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChpID0gMCwgbCA9IHNlZ21lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdHNlZ21lbnRzW2ldID0gVVJJLmRlY29kZShzZWdtZW50c1tpXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlZ21lbnRzO1xuXHRcdH1cblxuXHRcdGlmICghaXNBcnJheSh2KSkge1xuXHRcdFx0diA9ICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgfHwgdiBpbnN0YW5jZW9mIFN0cmluZykgPyBVUkkuZW5jb2RlKHYpIDogdjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChpID0gMCwgbCA9IHYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdHZbaV0gPSBVUkkuZW5jb2RlKHZbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnNlZ21lbnQoc2VnbWVudCwgdiwgYnVpbGQpO1xuXHR9O1xuXG5cdC8vIG11dGF0aW5nIHF1ZXJ5IHN0cmluZ1xuXHR2YXIgcSA9IHAucXVlcnk7XG5cdHAucXVlcnkgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh2ID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHYgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHZhciBkYXRhID0gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdFx0dmFyIHJlc3VsdCA9IHYuY2FsbCh0aGlzLCBkYXRhKTtcblx0XHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkocmVzdWx0IHx8IGRhdGEsIHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycywgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9IGVsc2UgaWYgKHYgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkodiwgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gcS5jYWxsKHRoaXMsIHYsIGJ1aWxkKTtcblx0XHR9XG5cdH07XG5cdHAuc2V0UXVlcnkgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgYnVpbGQpIHtcblx0XHR2YXIgZGF0YSA9IFVSSS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblxuXHRcdGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgfHwgbmFtZSBpbnN0YW5jZW9mIFN0cmluZykge1xuXHRcdFx0ZGF0YVtuYW1lXSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IG51bGw7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGZvciAodmFyIGtleSBpbiBuYW1lKSB7XG5cdFx0XHRcdGlmIChoYXNPd24uY2FsbChuYW1lLCBrZXkpKSB7XG5cdFx0XHRcdFx0ZGF0YVtrZXldID0gbmFtZVtrZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1VSSS5hZGRRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcgYXMgdGhlIG5hbWUgcGFyYW1ldGVyJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcGFydHMucXVlcnkgPSBVUkkuYnVpbGRRdWVyeShkYXRhLCB0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdGJ1aWxkID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHRwLmFkZFF1ZXJ5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIGJ1aWxkKSB7XG5cdFx0dmFyIGRhdGEgPSBVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0VVJJLmFkZFF1ZXJ5KGRhdGEsIG5hbWUsIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUpO1xuXHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkoZGF0YSwgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRidWlsZCA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5yZW1vdmVRdWVyeSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBidWlsZCkge1xuXHRcdHZhciBkYXRhID0gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdFVSSS5yZW1vdmVRdWVyeShkYXRhLCBuYW1lLCB2YWx1ZSk7XG5cdFx0dGhpcy5fcGFydHMucXVlcnkgPSBVUkkuYnVpbGRRdWVyeShkYXRhLCB0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdGJ1aWxkID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHRwLmhhc1F1ZXJ5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIHdpdGhpbkFycmF5KSB7XG5cdFx0dmFyIGRhdGEgPSBVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0cmV0dXJuIFVSSS5oYXNRdWVyeShkYXRhLCBuYW1lLCB2YWx1ZSwgd2l0aGluQXJyYXkpO1xuXHR9O1xuXHRwLnNldFNlYXJjaCA9IHAuc2V0UXVlcnk7XG5cdHAuYWRkU2VhcmNoID0gcC5hZGRRdWVyeTtcblx0cC5yZW1vdmVTZWFyY2ggPSBwLnJlbW92ZVF1ZXJ5O1xuXHRwLmhhc1NlYXJjaCA9IHAuaGFzUXVlcnk7XG5cblx0Ly8gc2FuaXRpemluZyBVUkxzXG5cdHAubm9ybWFsaXplID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHRoaXNcblx0XHRcdFx0Lm5vcm1hbGl6ZVByb3RvY29sKGZhbHNlKVxuXHRcdFx0XHQubm9ybWFsaXplUGF0aChmYWxzZSlcblx0XHRcdFx0Lm5vcm1hbGl6ZVF1ZXJ5KGZhbHNlKVxuXHRcdFx0XHQubm9ybWFsaXplRnJhZ21lbnQoZmFsc2UpXG5cdFx0XHRcdC5idWlsZCgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdFx0XHQubm9ybWFsaXplUHJvdG9jb2woZmFsc2UpXG5cdFx0XHQubm9ybWFsaXplSG9zdG5hbWUoZmFsc2UpXG5cdFx0XHQubm9ybWFsaXplUG9ydChmYWxzZSlcblx0XHRcdC5ub3JtYWxpemVQYXRoKGZhbHNlKVxuXHRcdFx0Lm5vcm1hbGl6ZVF1ZXJ5KGZhbHNlKVxuXHRcdFx0Lm5vcm1hbGl6ZUZyYWdtZW50KGZhbHNlKVxuXHRcdFx0LmJ1aWxkKCk7XG5cdH07XG5cdHAubm9ybWFsaXplUHJvdG9jb2wgPSBmdW5jdGlvbihidWlsZCkge1xuXHRcdGlmICh0eXBlb2YgdGhpcy5fcGFydHMucHJvdG9jb2wgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aGlzLl9wYXJ0cy5wcm90b2NvbCA9IHRoaXMuX3BhcnRzLnByb3RvY29sLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdHAubm9ybWFsaXplSG9zdG5hbWUgPSBmdW5jdGlvbihidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkge1xuXHRcdFx0aWYgKHRoaXMuaXMoJ0lETicpICYmIHB1bnljb2RlKSB7XG5cdFx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gcHVueWNvZGUudG9BU0NJSSh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuaXMoJ0lQdjYnKSAmJiBJUHY2KSB7XG5cdFx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gSVB2Ni5iZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fcGFydHMuaG9zdG5hbWUgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHRwLm5vcm1hbGl6ZVBvcnQgPSBmdW5jdGlvbihidWlsZCkge1xuXHRcdC8vIHJlbW92ZSBwb3J0IG9mIGl0J3MgdGhlIHByb3RvY29sJ3MgZGVmYXVsdFxuXHRcdGlmICh0eXBlb2YgdGhpcy5fcGFydHMucHJvdG9jb2wgPT09ICdzdHJpbmcnICYmIHRoaXMuX3BhcnRzLnBvcnQgPT09IFVSSS5kZWZhdWx0UG9ydHNbdGhpcy5fcGFydHMucHJvdG9jb2xdKSB7XG5cdFx0XHR0aGlzLl9wYXJ0cy5wb3J0ID0gbnVsbDtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5ub3JtYWxpemVQYXRoID0gZnVuY3Rpb24oYnVpbGQpIHtcblx0XHR2YXIgX3BhdGggPSB0aGlzLl9wYXJ0cy5wYXRoO1xuXHRcdGlmICghX3BhdGgpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHRoaXMuX3BhcnRzLnBhdGggPSBVUkkucmVjb2RlVXJuUGF0aCh0aGlzLl9wYXJ0cy5wYXRoKTtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9wYXJ0cy5wYXRoID09PSAnLycpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHZhciBfd2FzX3JlbGF0aXZlO1xuXHRcdHZhciBfbGVhZGluZ1BhcmVudHMgPSAnJztcblx0XHR2YXIgX3BhcmVudCwgX3BvcztcblxuXHRcdC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRoc1xuXHRcdGlmIChfcGF0aC5jaGFyQXQoMCkgIT09ICcvJykge1xuXHRcdFx0X3dhc19yZWxhdGl2ZSA9IHRydWU7XG5cdFx0XHRfcGF0aCA9ICcvJyArIF9wYXRoO1xuXHRcdH1cblxuXHRcdC8vIGhhbmRsZSByZWxhdGl2ZSBmaWxlcyAoYXMgb3Bwb3NlZCB0byBkaXJlY3Rvcmllcylcblx0XHRpZiAoX3BhdGguc2xpY2UoLTMpID09PSAnLy4uJyB8fCBfcGF0aC5zbGljZSgtMikgPT09ICcvLicpIHtcblx0XHRcdF9wYXRoICs9ICcvJztcblx0XHR9XG5cblx0XHQvLyByZXNvbHZlIHNpbXBsZXNcblx0XHRfcGF0aCA9IF9wYXRoXG5cdFx0XHQucmVwbGFjZSgvKFxcLyhcXC5cXC8pKyl8KFxcL1xcLiQpL2csICcvJylcblx0XHRcdC5yZXBsYWNlKC9cXC97Mix9L2csICcvJyk7XG5cblx0XHQvLyByZW1lbWJlciBsZWFkaW5nIHBhcmVudHNcblx0XHRpZiAoX3dhc19yZWxhdGl2ZSkge1xuXHRcdFx0X2xlYWRpbmdQYXJlbnRzID0gX3BhdGguc3Vic3RyaW5nKDEpLm1hdGNoKC9eKFxcLlxcLlxcLykrLykgfHwgJyc7XG5cdFx0XHRpZiAoX2xlYWRpbmdQYXJlbnRzKSB7XG5cdFx0XHRcdF9sZWFkaW5nUGFyZW50cyA9IF9sZWFkaW5nUGFyZW50c1swXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyByZXNvbHZlIHBhcmVudHNcblx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0X3BhcmVudCA9IF9wYXRoLmluZGV4T2YoJy8uLicpO1xuXHRcdFx0aWYgKF9wYXJlbnQgPT09IC0xKSB7XG5cdFx0XHRcdC8vIG5vIG1vcmUgLi4vIHRvIHJlc29sdmVcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGVsc2UgaWYgKF9wYXJlbnQgPT09IDApIHtcblx0XHRcdFx0Ly8gdG9wIGxldmVsIGNhbm5vdCBiZSByZWxhdGl2ZSwgc2tpcCBpdFxuXHRcdFx0XHRfcGF0aCA9IF9wYXRoLnN1YnN0cmluZygzKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdF9wb3MgPSBfcGF0aC5zdWJzdHJpbmcoMCwgX3BhcmVudCkubGFzdEluZGV4T2YoJy8nKTtcblx0XHRcdGlmIChfcG9zID09PSAtMSkge1xuXHRcdFx0XHRfcG9zID0gX3BhcmVudDtcblx0XHRcdH1cblx0XHRcdF9wYXRoID0gX3BhdGguc3Vic3RyaW5nKDAsIF9wb3MpICsgX3BhdGguc3Vic3RyaW5nKF9wYXJlbnQgKyAzKTtcblx0XHR9XG5cblx0XHQvLyByZXZlcnQgdG8gcmVsYXRpdmVcblx0XHRpZiAoX3dhc19yZWxhdGl2ZSAmJiB0aGlzLmlzKCdyZWxhdGl2ZScpKSB7XG5cdFx0XHRfcGF0aCA9IF9sZWFkaW5nUGFyZW50cyArIF9wYXRoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cblx0XHRfcGF0aCA9IFVSSS5yZWNvZGVQYXRoKF9wYXRoKTtcblx0XHR0aGlzLl9wYXJ0cy5wYXRoID0gX3BhdGg7XG5cdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHRwLm5vcm1hbGl6ZVBhdGhuYW1lID0gcC5ub3JtYWxpemVQYXRoO1xuXHRwLm5vcm1hbGl6ZVF1ZXJ5ID0gZnVuY3Rpb24oYnVpbGQpIHtcblx0XHRpZiAodHlwZW9mIHRoaXMuX3BhcnRzLnF1ZXJ5ID09PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy5xdWVyeS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5fcGFydHMucXVlcnkgPSBudWxsO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5xdWVyeShVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSkpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdHAubm9ybWFsaXplRnJhZ21lbnQgPSBmdW5jdGlvbihidWlsZCkge1xuXHRcdGlmICghdGhpcy5fcGFydHMuZnJhZ21lbnQpIHtcblx0XHRcdHRoaXMuX3BhcnRzLmZyYWdtZW50ID0gbnVsbDtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5ub3JtYWxpemVTZWFyY2ggPSBwLm5vcm1hbGl6ZVF1ZXJ5O1xuXHRwLm5vcm1hbGl6ZUhhc2ggPSBwLm5vcm1hbGl6ZUZyYWdtZW50O1xuXG5cdHAuaXNvODg1OSA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIGV4cGVjdCB1bmljb2RlIGlucHV0LCBpc284ODU5IG91dHB1dFxuXHRcdHZhciBlID0gVVJJLmVuY29kZTtcblx0XHR2YXIgZCA9IFVSSS5kZWNvZGU7XG5cblx0XHRVUkkuZW5jb2RlID0gZXNjYXBlO1xuXHRcdFVSSS5kZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMubm9ybWFsaXplKCk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdFVSSS5lbmNvZGUgPSBlO1xuXHRcdFx0VVJJLmRlY29kZSA9IGQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdHAudW5pY29kZSA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIGV4cGVjdCBpc284ODU5IGlucHV0LCB1bmljb2RlIG91dHB1dFxuXHRcdHZhciBlID0gVVJJLmVuY29kZTtcblx0XHR2YXIgZCA9IFVSSS5kZWNvZGU7XG5cblx0XHRVUkkuZW5jb2RlID0gc3RyaWN0RW5jb2RlVVJJQ29tcG9uZW50O1xuXHRcdFVSSS5kZWNvZGUgPSB1bmVzY2FwZTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5ub3JtYWxpemUoKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0VVJJLmVuY29kZSA9IGU7XG5cdFx0XHRVUkkuZGVjb2RlID0gZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0cC5yZWFkYWJsZSA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB1cmkgPSB0aGlzLmNsb25lKCk7XG5cdFx0Ly8gcmVtb3ZpbmcgdXNlcm5hbWUsIHBhc3N3b3JkLCBiZWNhdXNlIHRoZXkgc2hvdWxkbid0IGJlIGRpc3BsYXllZCBhY2NvcmRpbmcgdG8gUkZDIDM5ODZcblx0XHR1cmkudXNlcm5hbWUoJycpLnBhc3N3b3JkKCcnKS5ub3JtYWxpemUoKTtcblx0XHR2YXIgdCA9ICcnO1xuXHRcdGlmICh1cmkuX3BhcnRzLnByb3RvY29sKSB7XG5cdFx0XHR0ICs9IHVyaS5fcGFydHMucHJvdG9jb2wgKyAnOi8vJztcblx0XHR9XG5cblx0XHRpZiAodXJpLl9wYXJ0cy5ob3N0bmFtZSkge1xuXHRcdFx0aWYgKHVyaS5pcygncHVueWNvZGUnKSAmJiBwdW55Y29kZSkge1xuXHRcdFx0XHR0ICs9IHB1bnljb2RlLnRvVW5pY29kZSh1cmkuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHRcdFx0aWYgKHVyaS5fcGFydHMucG9ydCkge1xuXHRcdFx0XHRcdHQgKz0gJzonICsgdXJpLl9wYXJ0cy5wb3J0O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0ICs9IHVyaS5ob3N0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHVyaS5fcGFydHMuaG9zdG5hbWUgJiYgdXJpLl9wYXJ0cy5wYXRoICYmIHVyaS5fcGFydHMucGF0aC5jaGFyQXQoMCkgIT09ICcvJykge1xuXHRcdFx0dCArPSAnLyc7XG5cdFx0fVxuXG5cdFx0dCArPSB1cmkucGF0aCh0cnVlKTtcblx0XHRpZiAodXJpLl9wYXJ0cy5xdWVyeSkge1xuXHRcdFx0dmFyIHEgPSAnJztcblx0XHRcdGZvciAodmFyIGkgPSAwLCBxcCA9IHVyaS5fcGFydHMucXVlcnkuc3BsaXQoJyYnKSwgbCA9IHFwLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHR2YXIga3YgPSAocXBbaV0gfHwgJycpLnNwbGl0KCc9Jyk7XG5cdFx0XHRcdHEgKz0gJyYnICsgVVJJLmRlY29kZVF1ZXJ5KGt2WzBdLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8mL2csICclMjYnKTtcblxuXHRcdFx0XHRpZiAoa3ZbMV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHEgKz0gJz0nICsgVVJJLmRlY29kZVF1ZXJ5KGt2WzFdLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoLyYvZywgJyUyNicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0ICs9ICc/JyArIHEuc3Vic3RyaW5nKDEpO1xuXHRcdH1cblxuXHRcdHQgKz0gVVJJLmRlY29kZVF1ZXJ5KHVyaS5oYXNoKCksIHRydWUpO1xuXHRcdHJldHVybiB0O1xuXHR9O1xuXG5cdC8vIHJlc29sdmluZyByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgVVJMc1xuXHRwLmFic29sdXRlVG8gPSBmdW5jdGlvbihiYXNlKSB7XG5cdFx0dmFyIHJlc29sdmVkID0gdGhpcy5jbG9uZSgpO1xuXHRcdHZhciBwcm9wZXJ0aWVzID0gWydwcm90b2NvbCcsICd1c2VybmFtZScsICdwYXNzd29yZCcsICdob3N0bmFtZScsICdwb3J0J107XG5cdFx0dmFyIGJhc2VkaXIsIGksIHA7XG5cblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VSTnMgZG8gbm90IGhhdmUgYW55IGdlbmVyYWxseSBkZWZpbmVkIGhpZXJhcmNoaWNhbCBjb21wb25lbnRzJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCEoYmFzZSBpbnN0YW5jZW9mIFVSSSkpIHtcblx0XHRcdGJhc2UgPSBuZXcgVVJJKGJhc2UpO1xuXHRcdH1cblxuXHRcdGlmICghcmVzb2x2ZWQuX3BhcnRzLnByb3RvY29sKSB7XG5cdFx0XHRyZXNvbHZlZC5fcGFydHMucHJvdG9jb2wgPSBiYXNlLl9wYXJ0cy5wcm90b2NvbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcGFydHMuaG9zdG5hbWUpIHtcblx0XHRcdHJldHVybiByZXNvbHZlZDtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyAocCA9IHByb3BlcnRpZXNbaV0pOyBpKyspIHtcblx0XHRcdHJlc29sdmVkLl9wYXJ0c1twXSA9IGJhc2UuX3BhcnRzW3BdO1xuXHRcdH1cblxuXHRcdGlmICghcmVzb2x2ZWQuX3BhcnRzLnBhdGgpIHtcblx0XHRcdHJlc29sdmVkLl9wYXJ0cy5wYXRoID0gYmFzZS5fcGFydHMucGF0aDtcblx0XHRcdGlmICghcmVzb2x2ZWQuX3BhcnRzLnF1ZXJ5KSB7XG5cdFx0XHRcdHJlc29sdmVkLl9wYXJ0cy5xdWVyeSA9IGJhc2UuX3BhcnRzLnF1ZXJ5O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAocmVzb2x2ZWQuX3BhcnRzLnBhdGguc3Vic3RyaW5nKC0yKSA9PT0gJy4uJykge1xuXHRcdFx0cmVzb2x2ZWQuX3BhcnRzLnBhdGggKz0gJy8nO1xuXHRcdH1cblxuXHRcdGlmIChyZXNvbHZlZC5wYXRoKCkuY2hhckF0KDApICE9PSAnLycpIHtcblx0XHRcdGJhc2VkaXIgPSBiYXNlLmRpcmVjdG9yeSgpO1xuXHRcdFx0YmFzZWRpciA9IGJhc2VkaXIgPyBiYXNlZGlyIDogYmFzZS5wYXRoKCkuaW5kZXhPZignLycpID09PSAwID8gJy8nIDogJyc7XG5cdFx0XHRyZXNvbHZlZC5fcGFydHMucGF0aCA9IChiYXNlZGlyID8gKGJhc2VkaXIgKyAnLycpIDogJycpICsgcmVzb2x2ZWQuX3BhcnRzLnBhdGg7XG5cdFx0XHRyZXNvbHZlZC5ub3JtYWxpemVQYXRoKCk7XG5cdFx0fVxuXG5cdFx0cmVzb2x2ZWQuYnVpbGQoKTtcblx0XHRyZXR1cm4gcmVzb2x2ZWQ7XG5cdH07XG5cdHAucmVsYXRpdmVUbyA9IGZ1bmN0aW9uKGJhc2UpIHtcblx0XHR2YXIgcmVsYXRpdmUgPSB0aGlzLmNsb25lKCkubm9ybWFsaXplKCk7XG5cdFx0dmFyIHJlbGF0aXZlUGFydHMsIGJhc2VQYXJ0cywgY29tbW9uLCByZWxhdGl2ZVBhdGgsIGJhc2VQYXRoO1xuXG5cdFx0aWYgKHJlbGF0aXZlLl9wYXJ0cy51cm4pIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVVJOcyBkbyBub3QgaGF2ZSBhbnkgZ2VuZXJhbGx5IGRlZmluZWQgaGllcmFyY2hpY2FsIGNvbXBvbmVudHMnKTtcblx0XHR9XG5cblx0XHRiYXNlID0gbmV3IFVSSShiYXNlKS5ub3JtYWxpemUoKTtcblx0XHRyZWxhdGl2ZVBhcnRzID0gcmVsYXRpdmUuX3BhcnRzO1xuXHRcdGJhc2VQYXJ0cyA9IGJhc2UuX3BhcnRzO1xuXHRcdHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlLnBhdGgoKTtcblx0XHRiYXNlUGF0aCA9IGJhc2UucGF0aCgpO1xuXG5cdFx0aWYgKHJlbGF0aXZlUGF0aC5jaGFyQXQoMCkgIT09ICcvJykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdVUkkgaXMgYWxyZWFkeSByZWxhdGl2ZScpO1xuXHRcdH1cblxuXHRcdGlmIChiYXNlUGF0aC5jaGFyQXQoMCkgIT09ICcvJykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIGEgVVJJIHJlbGF0aXZlIHRvIGFub3RoZXIgcmVsYXRpdmUgVVJJJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbGF0aXZlUGFydHMucHJvdG9jb2wgPT09IGJhc2VQYXJ0cy5wcm90b2NvbCkge1xuXHRcdFx0cmVsYXRpdmVQYXJ0cy5wcm90b2NvbCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbGF0aXZlUGFydHMudXNlcm5hbWUgIT09IGJhc2VQYXJ0cy51c2VybmFtZSB8fCByZWxhdGl2ZVBhcnRzLnBhc3N3b3JkICE9PSBiYXNlUGFydHMucGFzc3dvcmQpIHtcblx0XHRcdHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xuXHRcdH1cblxuXHRcdGlmIChyZWxhdGl2ZVBhcnRzLnByb3RvY29sICE9PSBudWxsIHx8IHJlbGF0aXZlUGFydHMudXNlcm5hbWUgIT09IG51bGwgfHwgcmVsYXRpdmVQYXJ0cy5wYXNzd29yZCAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHJlbGF0aXZlLmJ1aWxkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbGF0aXZlUGFydHMuaG9zdG5hbWUgPT09IGJhc2VQYXJ0cy5ob3N0bmFtZSAmJiByZWxhdGl2ZVBhcnRzLnBvcnQgPT09IGJhc2VQYXJ0cy5wb3J0KSB7XG5cdFx0XHRyZWxhdGl2ZVBhcnRzLmhvc3RuYW1lID0gbnVsbDtcblx0XHRcdHJlbGF0aXZlUGFydHMucG9ydCA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xuXHRcdH1cblxuXHRcdGlmIChyZWxhdGl2ZVBhdGggPT09IGJhc2VQYXRoKSB7XG5cdFx0XHRyZWxhdGl2ZVBhcnRzLnBhdGggPSAnJztcblx0XHRcdHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xuXHRcdH1cblxuXHRcdC8vIGRldGVybWluZSBjb21tb24gc3ViIHBhdGhcblx0XHRjb21tb24gPSBVUkkuY29tbW9uUGF0aChyZWxhdGl2ZVBhdGgsIGJhc2VQYXRoKTtcblxuXHRcdC8vIElmIHRoZSBwYXRocyBoYXZlIG5vdGhpbmcgaW4gY29tbW9uLCByZXR1cm4gYSByZWxhdGl2ZSBVUkwgd2l0aCB0aGUgYWJzb2x1dGUgcGF0aC5cblx0XHRpZiAoIWNvbW1vbikge1xuXHRcdFx0cmV0dXJuIHJlbGF0aXZlLmJ1aWxkKCk7XG5cdFx0fVxuXG5cdFx0dmFyIHBhcmVudHMgPSBiYXNlUGFydHMucGF0aFxuXHRcdFx0LnN1YnN0cmluZyhjb21tb24ubGVuZ3RoKVxuXHRcdFx0LnJlcGxhY2UoL1teXFwvXSokLywgJycpXG5cdFx0XHQucmVwbGFjZSgvLio/XFwvL2csICcuLi8nKTtcblxuXHRcdHJlbGF0aXZlUGFydHMucGF0aCA9IChwYXJlbnRzICsgcmVsYXRpdmVQYXJ0cy5wYXRoLnN1YnN0cmluZyhjb21tb24ubGVuZ3RoKSkgfHwgJy4vJztcblxuXHRcdHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xuXHR9O1xuXG5cdC8vIGNvbXBhcmluZyBVUklzXG5cdHAuZXF1YWxzID0gZnVuY3Rpb24odXJpKSB7XG5cdFx0dmFyIG9uZSA9IHRoaXMuY2xvbmUoKTtcblx0XHR2YXIgdHdvID0gbmV3IFVSSSh1cmkpO1xuXHRcdHZhciBvbmVfbWFwID0ge307XG5cdFx0dmFyIHR3b19tYXAgPSB7fTtcblx0XHR2YXIgY2hlY2tlZCA9IHt9O1xuXHRcdHZhciBvbmVfcXVlcnksIHR3b19xdWVyeSwga2V5O1xuXG5cdFx0b25lLm5vcm1hbGl6ZSgpO1xuXHRcdHR3by5ub3JtYWxpemUoKTtcblxuXHRcdC8vIGV4YWN0IG1hdGNoXG5cdFx0aWYgKG9uZS50b1N0cmluZygpID09PSB0d28udG9TdHJpbmcoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gZXh0cmFjdCBxdWVyeSBzdHJpbmdcblx0XHRvbmVfcXVlcnkgPSBvbmUucXVlcnkoKTtcblx0XHR0d29fcXVlcnkgPSB0d28ucXVlcnkoKTtcblx0XHRvbmUucXVlcnkoJycpO1xuXHRcdHR3by5xdWVyeSgnJyk7XG5cblx0XHQvLyBkZWZpbml0ZWx5IG5vdCBlcXVhbCBpZiBub3QgZXZlbiBub24tcXVlcnkgcGFydHMgbWF0Y2hcblx0XHRpZiAob25lLnRvU3RyaW5nKCkgIT09IHR3by50b1N0cmluZygpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcXVlcnkgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIGxlbmd0aCwgZXZlbiBpZiB0aGV5J3JlIHBlcm11dGVkXG5cdFx0aWYgKG9uZV9xdWVyeS5sZW5ndGggIT09IHR3b19xdWVyeS5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRvbmVfbWFwID0gVVJJLnBhcnNlUXVlcnkob25lX3F1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHR0d29fbWFwID0gVVJJLnBhcnNlUXVlcnkodHdvX3F1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblxuXHRcdGZvciAoa2V5IGluIG9uZV9tYXApIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChvbmVfbWFwLCBrZXkpKSB7XG5cdFx0XHRcdGlmICghaXNBcnJheShvbmVfbWFwW2tleV0pKSB7XG5cdFx0XHRcdFx0aWYgKG9uZV9tYXBba2V5XSAhPT0gdHdvX21hcFtrZXldKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKCFhcnJheXNFcXVhbChvbmVfbWFwW2tleV0sIHR3b19tYXBba2V5XSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjaGVja2VkW2tleV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoa2V5IGluIHR3b19tYXApIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbCh0d29fbWFwLCBrZXkpKSB7XG5cdFx0XHRcdGlmICghY2hlY2tlZFtrZXldKSB7XG5cdFx0XHRcdFx0Ly8gdHdvIGNvbnRhaW5zIGEgcGFyYW1ldGVyIG5vdCBwcmVzZW50IGluIG9uZVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cdC8vIHN0YXRlXG5cdHAuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzID0gZnVuY3Rpb24odikge1xuXHRcdHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyA9ICEhdjtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRwLmVzY2FwZVF1ZXJ5U3BhY2UgPSBmdW5jdGlvbih2KSB7XG5cdFx0dGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSA9ICEhdjtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRyZXR1cm4gVVJJO1xufSkpOyIsIldvcmtmbG93ID0ge31cblxuQEltYWdlU2lnbiA9IHt9O1xuXG5AVHJhY2VzSGFuZGxlciA9IHt9O1xuXG5AVHJhY2VzVGVtcGxhdGUgPSB7fTtcblxuQEluc3RhbmNlZm9ybVRlbXBsYXRlID0ge307XG5cbkBJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZSA9IHt9O1xuXG5ASW5zdGFuY2VTaWduVGV4dCA9IHt9XG5cbkBSZWxhdGVkSW5zdGFuY2VzID0ge31cblxuQFJlbGF0ZWRSZWNvcmRzID0ge31cblxuQEluc3RhbmNlTWFjcm8gPSB7Y29udGV4dDoge319XG5cbkBUcmFjZXNNYW5hZ2VyID0ge307XG5cbkluc3RhbmNlU2lnblRleHQuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcgPSAoZmllbGRfZm9ybXVsYSktPlxuXHRyZXR1cm4gKGZpZWxkX2Zvcm11bGE/LmluZGV4T2YoXCJ7dHJhY2VzLlwiKSA+IC0xIHx8IGZpZWxkX2Zvcm11bGE/LmluZGV4T2YoXCJ7c2lnbmF0dXJlLnRyYWNlcy5cIikgPiAtMSB8fCBmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwie3lpamlhbmxhbjpcIikgPiAtMSB8fCBmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwie1xcXCJ5aWppYW5sYW5cXFwiOlwiKSA+IC0xIHx8IGZpZWxkX2Zvcm11bGE/LmluZGV4T2YoXCJ7J3lpamlhbmxhbic6XCIpID4gLTEpXG5cbkluc3RhbmNlU2lnblRleHQuaW5jbHVkZXNPcGluaW9uRmllbGQgPSAoZm9ybSwgZm9ybV92ZXJzaW9uKS0+XG5cdGZpZWxkX2Zvcm11bGFzID0gbmV3IEFycmF5KCk7XG5cblx0X2Zvcm1fdmVyc2lvbiA9IHt9XG5cblx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0X2Zvcm1fdmVyc2lvbiA9IHV1Zmxvd01hbmFnZXIuZ2V0Rm9ybVZlcnNpb24oZGIuZm9ybXMuZmluZE9uZSh7X2lkOiBmb3JtfSksIGZvcm1fdmVyc2lvbilcblx0ZWxzZVxuXHRcdF9mb3JtX3ZlcnNpb24gPSBkYi5mb3JtX3ZlcnNpb25zLmZpbmRPbmUoe19pZDogZm9ybV92ZXJzaW9uLCBmb3JtOiBmb3JtfSlcblxuXHRmaWVsZHMgPSBfZm9ybV92ZXJzaW9uPy5maWVsZHMgfHwgW11cblxuXHRmaWVsZHMuZm9yRWFjaCAoZiktPlxuXHRcdGlmIGYudHlwZSA9PSAndGFibGUnXG5cdFx0XHRjb25zb2xlLmxvZyAnaWdub3JlIG9waW5pb24gZmllbGQgaW4gdGFibGUnXG5cdFx0ZWxzZSBpZiBmLnR5cGUgPT0gJ3NlY3Rpb24nXG5cdFx0XHRmPy5maWVsZHM/LmZvckVhY2ggKGYxKS0+XG5cdFx0XHRcdGZpZWxkX2Zvcm11bGFzLnB1c2ggZjEuZm9ybXVsYVxuXHRcdGVsc2Vcblx0XHRcdGZpZWxkX2Zvcm11bGFzLnB1c2ggZi5mb3JtdWxhXG5cblx0Xy5zb21lIGZpZWxkX2Zvcm11bGFzLCAoZmllbGRfZm9ybXVsYSktPlxuXHRcdHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkX2Zvcm11bGEpXG5cbiIsIiAgICAgICAgICAgICBcblxuV29ya2Zsb3cgPSB7fTtcblxudGhpcy5JbWFnZVNpZ24gPSB7fTtcblxudGhpcy5UcmFjZXNIYW5kbGVyID0ge307XG5cbnRoaXMuVHJhY2VzVGVtcGxhdGUgPSB7fTtcblxudGhpcy5JbnN0YW5jZWZvcm1UZW1wbGF0ZSA9IHt9O1xuXG50aGlzLkluc3RhbmNlQXR0YWNobWVudFRlbXBsYXRlID0ge307XG5cbnRoaXMuSW5zdGFuY2VTaWduVGV4dCA9IHt9O1xuXG50aGlzLlJlbGF0ZWRJbnN0YW5jZXMgPSB7fTtcblxudGhpcy5SZWxhdGVkUmVjb3JkcyA9IHt9O1xuXG50aGlzLkluc3RhbmNlTWFjcm8gPSB7XG4gIGNvbnRleHQ6IHt9XG59O1xuXG50aGlzLlRyYWNlc01hbmFnZXIgPSB7fTtcblxuSW5zdGFuY2VTaWduVGV4dC5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyA9IGZ1bmN0aW9uKGZpZWxkX2Zvcm11bGEpIHtcbiAgcmV0dXJuIChmaWVsZF9mb3JtdWxhICE9IG51bGwgPyBmaWVsZF9mb3JtdWxhLmluZGV4T2YoXCJ7dHJhY2VzLlwiKSA6IHZvaWQgMCkgPiAtMSB8fCAoZmllbGRfZm9ybXVsYSAhPSBudWxsID8gZmllbGRfZm9ybXVsYS5pbmRleE9mKFwie3NpZ25hdHVyZS50cmFjZXMuXCIpIDogdm9pZCAwKSA+IC0xIHx8IChmaWVsZF9mb3JtdWxhICE9IG51bGwgPyBmaWVsZF9mb3JtdWxhLmluZGV4T2YoXCJ7eWlqaWFubGFuOlwiKSA6IHZvaWQgMCkgPiAtMSB8fCAoZmllbGRfZm9ybXVsYSAhPSBudWxsID8gZmllbGRfZm9ybXVsYS5pbmRleE9mKFwie1xcXCJ5aWppYW5sYW5cXFwiOlwiKSA6IHZvaWQgMCkgPiAtMSB8fCAoZmllbGRfZm9ybXVsYSAhPSBudWxsID8gZmllbGRfZm9ybXVsYS5pbmRleE9mKFwieyd5aWppYW5sYW4nOlwiKSA6IHZvaWQgMCkgPiAtMTtcbn07XG5cbkluc3RhbmNlU2lnblRleHQuaW5jbHVkZXNPcGluaW9uRmllbGQgPSBmdW5jdGlvbihmb3JtLCBmb3JtX3ZlcnNpb24pIHtcbiAgdmFyIF9mb3JtX3ZlcnNpb24sIGZpZWxkX2Zvcm11bGFzLCBmaWVsZHM7XG4gIGZpZWxkX2Zvcm11bGFzID0gbmV3IEFycmF5KCk7XG4gIF9mb3JtX3ZlcnNpb24gPSB7fTtcbiAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgIF9mb3JtX3ZlcnNpb24gPSB1dWZsb3dNYW5hZ2VyLmdldEZvcm1WZXJzaW9uKGRiLmZvcm1zLmZpbmRPbmUoe1xuICAgICAgX2lkOiBmb3JtXG4gICAgfSksIGZvcm1fdmVyc2lvbik7XG4gIH0gZWxzZSB7XG4gICAgX2Zvcm1fdmVyc2lvbiA9IGRiLmZvcm1fdmVyc2lvbnMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGZvcm1fdmVyc2lvbixcbiAgICAgIGZvcm06IGZvcm1cbiAgICB9KTtcbiAgfVxuICBmaWVsZHMgPSAoX2Zvcm1fdmVyc2lvbiAhPSBudWxsID8gX2Zvcm1fdmVyc2lvbi5maWVsZHMgOiB2b2lkIDApIHx8IFtdO1xuICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgdmFyIHJlZjtcbiAgICBpZiAoZi50eXBlID09PSAndGFibGUnKSB7XG4gICAgICByZXR1cm4gY29uc29sZS5sb2coJ2lnbm9yZSBvcGluaW9uIGZpZWxkIGluIHRhYmxlJyk7XG4gICAgfSBlbHNlIGlmIChmLnR5cGUgPT09ICdzZWN0aW9uJykge1xuICAgICAgcmV0dXJuIGYgIT0gbnVsbCA/IChyZWYgPSBmLmZpZWxkcykgIT0gbnVsbCA/IHJlZi5mb3JFYWNoKGZ1bmN0aW9uKGYxKSB7XG4gICAgICAgIHJldHVybiBmaWVsZF9mb3JtdWxhcy5wdXNoKGYxLmZvcm11bGEpO1xuICAgICAgfSkgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWVsZF9mb3JtdWxhcy5wdXNoKGYuZm9ybXVsYSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIF8uc29tZShmaWVsZF9mb3JtdWxhcywgZnVuY3Rpb24oZmllbGRfZm9ybXVsYSkge1xuICAgIHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkX2Zvcm11bGEpO1xuICB9KTtcbn07XG4iLCJkYi5pbnN0YW5jZV90YXNrcyA9IG5ldyBNZXRlb3IuQ29sbGVjdGlvbignaW5zdGFuY2VfdGFza3MnKVxuXG5kYi5pbnN0YW5jZV90YXNrcy5fc2ltcGxlU2NoZW1hID0gbmV3IFNpbXBsZVNjaGVtYVxuICAgIGluc3RhbmNlOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICB0cmFjZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaXNfZmluaXNoZWQ6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHVzZXI6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHVzZXJfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaGFuZGxlcjpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaGFuZGxlcl9uYW1lOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBoYW5kbGVyX29yZ2FuaXphdGlvbjpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaGFuZGxlcl9vcmdhbml6YXRpb25fbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHN0YXJ0X2RhdGU6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICBkdWVfZGF0ZTpcbiAgICAgICAgdHlwZTogRGF0ZVxuICAgIGlzX3JlYWQ6XG4gICAgICAgIHR5cGU6IEJvb2xlYW5cbiAgICBpc19lcnJvcjpcbiAgICAgICAgdHlwZTogQm9vbGVhblxuICAgIHZhbHVlczpcbiAgICAgICAgdHlwZTogT2JqZWN0XG4gICAgZGVhZGxpbmU6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICByZW1pbmRfZGF0ZTpcbiAgICAgICAgdHlwZTogRGF0ZVxuICAgIHJlbWluZGVkX2NvdW50OlxuICAgICAgICB0eXBlOiBOdW1iZXJcbiAgICByZWFkX2RhdGU6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgbW9kaWZpZWQ6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICBtb2RpZmllZF9ieTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgc2lnbl9zaG93OlxuICAgICAgICB0eXBlOiBCb29sZWFuXG4gICAganVkZ2U6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIG5leHRfc3RlcHM6XG4gICAgICAgIHR5cGU6IEFycmF5XG4gICAgXCJuZXh0X3N0ZXBzLiRcIjpcbiAgICAgICAgdHlwZTogT2JqZWN0XG4gICAgXCJuZXh0X3N0ZXBzLiQuc3RlcFwiOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBcIm5leHRfc3RlcHMuJC51c2Vyc1wiOlxuICAgICAgICB0eXBlOiBbU3RyaW5nXVxuICAgIGZpbmlzaF9kYXRlOlxuICAgICAgICB0eXBlOiBEYXRlXG4gICAgY29zdF90aW1lOlxuICAgICAgICB0eXBlOiBOdW1iZXJcbiAgICBzcGFjZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaW5zdGFuY2VfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgc3VibWl0dGVyOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBzdWJtaXR0ZXJfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgYXBwbGljYW50OlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBhcHBsaWNhbnRfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBzdWJtaXRfZGF0ZTpcbiAgICAgICAgdHlwZTogRGF0ZVxuICAgIGZsb3c6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGZsb3dfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgZm9ybTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgc3RlcDpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgc3RlcF9uYW1lOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBjYXRlZ29yeV9uYW1lOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBpbnN0YW5jZV9zdGF0ZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBmb3J3YXJkX2Zyb21faW5zdGFuY2U6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGtleXdvcmRzOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBpc19hcmNoaXZlZDpcbiAgICAgICAgdHlwZTogQm9vbGVhblxuICAgIGNhdGVnb3J5OlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiIsImRiLmF1dGhfdG9rZW5zID0gbmV3IE1ldGVvci5Db2xsZWN0aW9uKCdhdXRoX3Rva2VucycpIiwibWFya2VkID0gcmVxdWlyZShcIm1hcmtlZFwiKVxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUgPSB7fTtcblxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5zdGFuY2VfYXR0YWNobWVudCA9IFwiXCJcIlxuXHQ8dHI+XG5cdFx0PHRkIGNsYXNzPVwiaW5zLWF0dGFjaC12aWV3XCI+XG5cdFx0XHQ8YSBocmVmPVwie3tpbnNfYXR0YWNoX2Rvd25sb2FkX3VybCBfaWQgYWJzb2x1dGV9fVwiIGNsYXNzPVwiaW5zX2F0dGFjaF9ocmVmXCIgdGFyZ2V0PVwiX3BhcmVudFwiIGRhdGEtbmFtZT1cInt7dGhpcy5uYW1lfX1cIiBkYXRhLXR5cGU9XCJ7e3RoaXMub3JpZ2luYWwudHlwZX19XCIgZGF0YS1pZD1cInt7X2lkfX1cIj57e3RoaXMubmFtZX19PC9hPlxuXHRcdDwvdGQ+XG5cdDwvdHI+XG5cIlwiXCJcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmFmU2VsZWN0VXNlclJlYWQgPSBcIlwiXCJcblx0PGRpdiBjbGFzcz0nc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCc+e3t2YWx1ZX19PC9kaXY+XG5cIlwiXCJcblxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuYWZGb3JtR3JvdXBSZWFkID0gXCJcIlwiXG5cdDxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAnPlxuXHRcdHt7I3dpdGggZ2V0RmllbGQgdGhpcy5uYW1lfX1cblx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdzZWN0aW9uJ319XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0nc2VjdGlvbiBjYWxsb3V0IGNhbGxvdXQtZGVmYXVsdCc+XG5cdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tmX2xhYmVsIHRoaXN9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHQ8cD57e3tkZXNjcmlwdGlvbn19fTwvcD5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICd0YWJsZSd9fVxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1kZWZhdWx0IHN0ZWVkb3MtdGFibGVcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCIgc3R5bGU9XCJwYWRkaW5nOjBweDtcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIiA+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPSdjb250cm9sLWxhYmVsJz57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJkZXNjcmlwdGlvblwiPnt7e2Rlc2NyaXB0aW9ufX19PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInJlYWRvbmx5LXRhYmxlXCIgc3R5bGU9XCJwYWRkaW5nOjBweDtvdmVyZmxvdy14OmF1dG87XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgdHlwZT0ndGFibGUnIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtY29uZGVuc2VkIGF1dG9mb3JtLXRhYmxlXCIgc3R5bGU9J21hcmdpbi1ib3R0b206MHB4Oycge3t0aGlzLmF0dHN9fSBpZD1cInt7dGhpcy5jb2RlfX1UYWJsZVwiIG5hbWU9XCJ7e3RoaXMuY29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3t0aGlzLm5hbWV9fVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGhlYWQgaWQ9XCJ7e3RoaXMubmFtZX19VGhlYWRcIiBuYW1lPVwie3t0aGlzLm5hbWV9fVRoZWFkXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3t7Z2V0VGFibGVUaGVhZCB0aGlzfX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGhlYWQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keSBpZD1cInt7dGhpcy5uYW1lfX1UYm9keVwiIG5hbWU9XCJ7e3RoaXMubmFtZX19VGJvZHlcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZUJvZHkgdGhpc319fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHR7eyNpZiBzaG93TGFiZWx9fVxuXHRcdFx0XHRcdFx0PGxhYmVsPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHR7ey9pZn19XG5cdFx0XHRcdFx0e3sjaWYgaXNUZXh0YXJlYSB0aGlzfX1cblx0XHRcdFx0XHRcdDxwIGNsYXNzPSd7e2dldENmQ2xhc3MgdGhpc319IGZvcm0tY29udHJvbCcgcmVhZG9ubHkgZGlzYWJsZWQ+e3t7Z2V0VmFsdWUgY29kZX19fTwvcD5cblx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0ne3tnZXRDZkNsYXNzIHRoaXN9fSBmb3JtLWNvbnRyb2wnIHJlYWRvbmx5IGRpc2FibGVkPnt7e2dldFZhbHVlIGNvZGV9fX08L2Rpdj5cblx0XHRcdFx0XHR7ey9pZn19XG5cdFx0XHRcdHt7L2lmfX1cblx0XHRcdHt7L2lmfX1cblx0XHR7ey93aXRofX1cblx0PC9kaXY+XG5cIlwiXCJcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmFmRm9ybUdyb3VwID0gXCJcIlwiXG5cblx0e3sjd2l0aCBnZXRGaWVsZCB0aGlzLm5hbWV9fVxuXHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3NlY3Rpb24nfX1cblx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdzZWN0aW9uIGNhbGxvdXQgY2FsbG91dC1kZWZhdWx0Jz5cblx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2ZfbGFiZWwgdGhpc319PC9sYWJlbD5cblx0XHRcdFx0XHRcdDxwPnt7e2Rlc2NyaXB0aW9ufX19PC9wPlxuXHRcdFx0XHRcdDwvZGl2PlxuICBcdFx0XHRcdDwvZGl2PlxuXHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3RhYmxlJ319XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHQgc3RlZWRvcy10YWJsZVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIiBzdHlsZT1cInBhZGRpbmc6MHB4O1wiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiID5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9J2NvbnRyb2wtbGFiZWwnPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t7ZGVzY3JpcHRpb259fX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicmVhZG9ubHktdGFibGVcIiBzdHlsZT1cInBhZGRpbmc6MHB4O292ZXJmbG93LXg6YXV0bztcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB0eXBlPSd0YWJsZScgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1jb25kZW5zZWQgYXV0b2Zvcm0tdGFibGVcIiBzdHlsZT0nbWFyZ2luLWJvdHRvbTowcHg7JyB7e3RoaXMuYXR0c319IGlkPVwie3t0aGlzLmNvZGV9fVRhYmxlXCIgbmFtZT1cInt7dGhpcy5jb2RlfX1cIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e3RoaXMubmFtZX19XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0aGVhZCBpZD1cInt7dGhpcy5uYW1lfX1UaGVhZFwiIG5hbWU9XCJ7e3RoaXMubmFtZX19VGhlYWRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZVRoZWFkIHRoaXN9fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC90aGVhZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5IGlkPVwie3t0aGlzLm5hbWV9fVRib2R5XCIgbmFtZT1cInt7dGhpcy5uYW1lfX1UYm9keVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7e2dldFRhYmxlQm9keSB0aGlzfX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdpbnB1dCd9fVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBkYXRhLXJlcXVpcmVkPVwie3sjaWYgaXNfcmVxdWlyZWR9fXRydWV7ey9pZn19XCI+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0e3sjaWYgaXNfdGV4dGFyZWF9fVxuXHRcdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIge3tnZXRQZXJtaXNzaW9ucyBjb2RlfX0gZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdGV4dGFyZWE+XG5cdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0e3sjdW5sZXNzIGlzX3RleHRhcmVhfX1cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIge3tnZXRQZXJtaXNzaW9ucyBjb2RlfX0gZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHR7ey91bmxlc3N9fVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdudW1iZXInfX1cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdkYXRlJ319XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIHRpdGxlPVwie3tnZXRMYWJlbCBjb2RlfX1cIiBuYW1lPVwie3tjb2RlfX1cIiBkYXRhLXR5cGU9XCJkYXRlXCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdkYXRlVGltZSd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIjdaUW5Ec1hCR29oWk1ldEE1XCIgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIgZGF0YS10eXBlPSdkYXRldGltZScgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdwYXNzd29yZCd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgdGl0bGU9XCJ7e2dldExhYmVsIGNvZGV9fVwiIG5hbWU9XCJ7e2NvZGV9fVwiIGRhdGEtc2NoZW1hLWtleT1cInt7Z2V0TGFiZWwgY29kZX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnc2VsZWN0J319XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzZWxlY3QgbmFtZT1cInt7Y29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNlYWNoIG9wdGlvbnMgdGhpc319XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cInt7dmFsdWV9fVwiPnt7bGFiZWx9fTwvb3B0aW9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc2VsZWN0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdyYWRpbyd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIjdaUW5Ec1hCR29oWk1ldEE1XCIgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWYtcmFkaW8tZ3JvdXBcIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e2dldExhYmVsIGNvZGV9fVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cbiAgICAgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwicmFkaW8taW5saW5lIGZpeC1pbmRlbnRcIj48aW5wdXQgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJ7e3ZhbHVlfX1cIiBuYW1lPVwie3suLi9jb2RlfX1cIiBjbGFzcz1cInJhZGlvLWlubGluZSBmaXgtaW5kZW50XCI+IHt7bGFiZWx9fTwvbGFiZWw+XG4gICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cbiAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnbXVsdGlTZWxlY3QnfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImFmLWNoZWNrYm94LWdyb3VwXCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWlubGluZSBmaXgtaW5kZW50XCI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwie3t2YWx1ZX19XCIgbmFtZT1cInt7Li4vY29kZX19XCIgY2xhc3M9XCJjaGVja2JveC1pbmxpbmUgZml4LWluZGVudFwiPiB7e2xhYmVsfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svZWFjaH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3VybCd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInVybFwiIHRpdGxlPVwie3tnZXRMYWJlbCBjb2RlfX1cIiBuYW1lPVwie3tjb2RlfX1cIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e2dldExhYmVsIGNvZGV9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ2VtYWlsJ319XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwiZW1haWxcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdjaGVja2JveCd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e2dldExhYmVsIGNvZGV9fVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIG5hbWU9XCJ7e2NvZGV9fVwiIGNsYXNzPVwiY2hlY2tib3gtaW5saW5lIGZpeC1pbmRlbnRcIj48L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIjdaUW5Ec1hCR29oWk1ldEE1XCIgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J3t7Z2V0Q2ZDbGFzcyB0aGlzfX0gZm9ybS1jb250cm9sJyByZWFkb25seSBkaXNhYmxlZD57e3tnZXRWYWx1ZSBjb2RlfX19PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0e3svaWZ9fVxuXHRcdHt7L3dpdGh9fVxuXCJcIlwiXG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUgPSAodGVtcGFsdGVOYW1lLCBzdGVlZG9zRGF0YSkgLT5cblx0dGVtcGxhdGUgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGVbdGVtcGFsdGVOYW1lXVxuXG5cdHRlbXBsYXRlQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHRlbXBsYXRlLCB7aXNCb2R5OiB0cnVlfSk7XG5cblx0dGVtcGxhdGVSZW5kZXJGdW5jdGlvbiA9IGV2YWwodGVtcGxhdGVDb21waWxlZCk7XG5cblx0VGVtcGxhdGVbdGVtcGFsdGVOYW1lXSA9IG5ldyBCbGF6ZS5UZW1wbGF0ZSh0ZW1wYWx0ZU5hbWUsIHRlbXBsYXRlUmVuZGVyRnVuY3Rpb24pO1xuXHRUZW1wbGF0ZVt0ZW1wYWx0ZU5hbWVdLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGVbdGVtcGFsdGVOYW1lXS5oZWxwZXJzIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnNcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZUluc3RhbmNlU2lnblRleHQgPSAoc3RlZWRvc0RhdGEpLT5cblx0aW5zdGFuY2VTaWduVGV4dEh0bWwgPSBfZ2V0Vmlld0h0bWwoJ2NsaWVudC92aWV3cy9pbnN0YW5jZS9pbnN0YW5jZV9zaWduX3RleHQuaHRtbCcpXG5cblx0aW5zdGFuY2VTaWduVGV4dENvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbnN0YW5jZVNpZ25UZXh0SHRtbCwge2lzQm9keTogdHJ1ZX0pO1xuXG5cdGluc3RhbmNlU2lnblRleHRSZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW5zdGFuY2VTaWduVGV4dENvbXBpbGVkKTtcblxuXHRUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiaW5zdGFuY2VTaWduVGV4dFwiLCBpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb24pO1xuXHRUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGUuaW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzIEluc3RhbmNlU2lnblRleHQuaGVscGVyc1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW1hZ2VTaWduID0gKHN0ZWVkb3NEYXRhKSAtPlxuXHRpbWFnZVNpZ25IdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvaW1hZ2Vfc2lnbi5odG1sJylcblx0aW1hZ2VTaWduQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKGltYWdlU2lnbkh0bWwsIHtpc0JvZHk6IHRydWV9KTtcblx0aW1hZ2VTaWduUmVuZGVyRnVuY3Rpb24gPSBldmFsKGltYWdlU2lnbkNvbXBpbGVkKTtcblx0VGVtcGxhdGUuaW1hZ2VTaWduID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiaW1hZ2VTaWduXCIsIGltYWdlU2lnblJlbmRlckZ1bmN0aW9uKTtcblx0VGVtcGxhdGUuaW1hZ2VTaWduLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGUuaW1hZ2VTaWduLmhlbHBlcnMgSW1hZ2VTaWduLmhlbHBlcnNcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZVRyYWNlc0hhbmxkZXIgPSAoc3RlZWRvc0RhdGEpIC0+XG5cdHRyYWNlc0hhbmxkZXJIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzX2hhbmRsZXIuaHRtbCcpXG5cdHRyYWNlc0hhbmxkZXJDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUodHJhY2VzSGFubGRlckh0bWwsIHtpc0JvZHk6IHRydWV9KTtcblx0dHJhY2VzSGFubGRlclJlbmRlckZ1bmN0aW9uID0gZXZhbCh0cmFjZXNIYW5sZGVyQ29tcGlsZWQpO1xuXHRUZW1wbGF0ZS5pbnN0YW5jZV90cmFjZXNfaGFuZGxlciA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcImluc3RhbmNlX3RyYWNlc19oYW5kbGVyXCIsIHRyYWNlc0hhbmxkZXJSZW5kZXJGdW5jdGlvbik7XG5cdFRlbXBsYXRlLmluc3RhbmNlX3RyYWNlc19oYW5kbGVyLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGUuaW5zdGFuY2VfdHJhY2VzX2hhbmRsZXIuaGVscGVycyBUcmFjZXNIYW5kbGVyLmhlbHBlcnNcblxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5pdCA9IChzdGVlZG9zRGF0YSkgLT5cblx0SW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZShcImFmU2VsZWN0VXNlclJlYWRcIiwgc3RlZWRvc0RhdGEpO1xuXG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJhZkZvcm1Hcm91cFwiLCBzdGVlZG9zRGF0YSk7XG5cblx0SW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZShcImFmRm9ybUdyb3VwUmVhZFwiLCBzdGVlZG9zRGF0YSk7XG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJpbnN0YW5jZV9hdHRhY2htZW50XCIsIHthYnNvbHV0ZTogc3RlZWRvc0RhdGEuYWJzb2x1dGV9KTtcblx0XHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW1hZ2VTaWduKHN0ZWVkb3NEYXRhKVxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGVUcmFjZXNIYW5sZGVyKHN0ZWVkb3NEYXRhKTtcblx0XHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW5zdGFuY2VTaWduVGV4dChzdGVlZG9zRGF0YSlcblxuZ2V0TGlua1RleHQgPSAoaXRlbSwgbGFiZWwsIGRldGFpbF91cmwpLT5cblx0aWYgZGV0YWlsX3VybFxuXHRcdGRldGFpbF91cmwgPSBkZXRhaWxfdXJsLnJlcGxhY2UoXCJ7X2lkfVwiLCBpdGVtLl9pZClcblx0XHRpZiAhL15odHRwKHM/KTpcXC9cXC8vLnRlc3QoZGV0YWlsX3VybClcblx0XHRcdGRldGFpbF91cmwgPSBTdGVlZG9zLmFic29sdXRlVXJsKGRldGFpbF91cmwpXG5cdFx0cmV0dXJuICc8YSBocmVmPVwiJytkZXRhaWxfdXJsKydcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nK2xhYmVsKyc8L2E+Jztcblx0ZWxzZVxuXHRcdHJldHVybiBsYWJlbFxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUgPSAodmFsdWUsIGZpZWxkLCBsb2NhbGUsIHV0Y09mZnNldCkgLT5cblx0aWYgIXZhbHVlICYmIHZhbHVlICE9IGZhbHNlXG5cdFx0cmV0dXJuICcnXG5cdGlmIFtcInNlbGVjdFwiLCBcIm11bHRpU2VsZWN0XCIsIFwicmFkaW9cIl0uaW5kZXhPZihmaWVsZC50eXBlKSA+IC0xXG5cdFx0ZmllbGRPcHRpb25zID0gZmllbGQub3B0aW9ucy5zcGxpdChcIlxcblwiKS5tYXAgKG4pLT5cblx0XHRcdGl0ZW1TcGxpdHMgPSBuLnNwbGl0KFwiOlwiKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bGFiZWw6IGl0ZW1TcGxpdHNbMF0sXG5cdFx0XHRcdHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cblx0XHRcdH1cblx0c3dpdGNoIGZpZWxkLnR5cGVcblx0XHR3aGVuICdlbWFpbCdcblx0XHRcdHZhbHVlID0gaWYgdmFsdWUgdGhlbiAnPGEgaHJlZj1cXCdtYWlsdG86JyArIHZhbHVlICsgJ1xcJz4nICsgdmFsdWUgKyAnPC9hPicgZWxzZSAnJ1xuXHRcdHdoZW4gJ3VybCdcblx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdGlmIHZhbHVlLmluZGV4T2YoXCJodHRwXCIpID09IDBcblx0XHRcdFx0XHR0cnlcblx0XHRcdFx0XHRcdHZhbHVlID0gXCI8YSBocmVmPSdcIiArIGVuY29kZVVSSSh2YWx1ZSkgKyBcIicgdGFyZ2V0PSdfYmxhbmsnPlwiICsgdmFsdWUgKyBcIjwvYT5cIjtcblx0XHRcdFx0XHRjYXRjaCBlXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IFwiPGEgaHJlZj0nJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuXG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR2YWx1ZSA9IFwiPGEgaHJlZj0naHR0cDovL1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9ICcnXG5cdFx0d2hlbiAnZ3JvdXAnXG5cdFx0XHRpZiBmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlPy5nZXRQcm9wZXJ0eShcImZ1bGxuYW1lXCIpLnRvU3RyaW5nKClcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8uZnVsbG5hbWVcblx0XHR3aGVuICd1c2VyJ1xuXHRcdFx0aWYgZmllbGQuaXNfbXVsdGlzZWxlY3Rcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8uZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKClcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8ubmFtZVxuXHRcdHdoZW4gJ3Bhc3N3b3JkJ1xuXHRcdFx0dmFsdWUgPSAnKioqKioqJ1xuXHRcdHdoZW4gJ2NoZWNrYm94J1xuXHRcdFx0aWYgdmFsdWUgJiYgdmFsdWUgIT0gJ2ZhbHNlJ1xuXHRcdFx0XHR2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiLCB7fSwgbG9jYWxlKVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X25vXCIsIHt9LCBsb2NhbGUpXG5cdFx0d2hlbiAnZGF0ZVRpbWUnXG5cdFx0XHRpZiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPT0gMTZcblx0XHRcdFx0dCA9IHZhbHVlLnNwbGl0KFwiVFwiKVxuXHRcdFx0XHR0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuXHRcdFx0XHR0MSA9IHRbMV0uc3BsaXQoXCI6XCIpO1xuXG5cdFx0XHRcdHllYXIgPSB0MFswXTtcblx0XHRcdFx0bW9udGggPSB0MFsxXTtcblx0XHRcdFx0ZGF0ZSA9IHQwWzJdO1xuXHRcdFx0XHRob3VycyA9IHQxWzBdO1xuXHRcdFx0XHRzZWNvbmRzID0gdDFbMV07XG5cblx0XHRcdFx0dmFsdWUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRhdGUsIGhvdXJzLCBzZWNvbmRzKVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuXG5cdFx0XHR2YWx1ZSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXREYXRlKHZhbHVlLCB1dGNPZmZzZXQpO1xuXHRcdHdoZW4gJ3RpbWUnXG5cdFx0XHRpZiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPT0gMTZcblx0XHRcdFx0dCA9IHZhbHVlLnNwbGl0KFwiVFwiKVxuXHRcdFx0XHR0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuXHRcdFx0XHR0MSA9IHRbMV0uc3BsaXQoXCI6XCIpO1xuXG5cdFx0XHRcdHllYXIgPSB0MFswXTtcblx0XHRcdFx0bW9udGggPSB0MFsxXTtcblx0XHRcdFx0ZGF0ZSA9IHQwWzJdO1xuXHRcdFx0XHRob3VycyA9IHQxWzBdO1xuXHRcdFx0XHRzZWNvbmRzID0gdDFbMV07XG5cblx0XHRcdFx0dmFsdWUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRhdGUsIGhvdXJzLCBzZWNvbmRzKVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuXG5cdFx0XHR2YWx1ZSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXRUaW1lKHZhbHVlKTtcblx0XHR3aGVuICdpbnB1dCdcblx0XHRcdGlmIGZpZWxkLmlzX3RleHRhcmVhXG5cdFx0XHRcdHZhbHVlID0gdmFsdWVcblx0XHR3aGVuICdzZWxlY3QnXG5cdFx0XHRzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKChpdGVtKSAtPiByZXR1cm4gaXRlbS52YWx1ZSA9PSB2YWx1ZSlcblx0XHRcdGlmIHNlbGVjdGVkT3B0aW9uXG5cdFx0XHRcdHZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubGFiZWxcblx0XHR3aGVuICdyYWRpbydcblx0XHRcdHNlbGVjdGVkT3B0aW9uID0gZmllbGRPcHRpb25zLmZpbmQoKGl0ZW0pIC0+IHJldHVybiBpdGVtLnZhbHVlID09IHZhbHVlKVxuXHRcdFx0aWYgc2VsZWN0ZWRPcHRpb25cblx0XHRcdFx0dmFsdWUgPSBzZWxlY3RlZE9wdGlvbi5sYWJlbFxuXHRcdHdoZW4gJ211bHRpU2VsZWN0J1xuXHRcdFx0c3BsaXRlZFZhbHVlcyA9IHZhbHVlLnNwbGl0KFwiLFwiKVxuXHRcdFx0c2VsZWN0ZWRPcHRpb25zID0gZmllbGRPcHRpb25zLmZpbHRlcigoaXRlbSkgLT4gcmV0dXJuIHNwbGl0ZWRWYWx1ZXMuaW5kZXhPZihpdGVtLnZhbHVlKSA+IC0xKVxuXHRcdFx0aWYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aFxuXHRcdFx0XHR2YWx1ZSA9IHNlbGVjdGVkT3B0aW9ucy5tYXAoKGl0ZW0pIC0+IHJldHVybiBpdGVtLmxhYmVsKS5qb2luKFwiLFwiKVxuXHRcdHdoZW4gJ251bWJlcidcblx0XHRcdGlmIHZhbHVlIG9yIHZhbHVlID09IDBcblx0XHRcdFx0aWYgZmllbGQuaXNfcGVyY2VudFxuXHRcdFx0XHRcdHZhbHVlID0gU3RlZWRvcy5udW1iZXJUb1BlcmNlbnRTdHJpbmcgdmFsdWUsIGZpZWxkLmRpZ2l0c1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dmFsdWUgPSBTdGVlZG9zLm51bWJlclRvU3RyaW5nIHZhbHVlLCBmaWVsZC5kaWdpdHNcblx0XHR3aGVuICdvZGF0YSdcblx0XHRcdGRldGFpbF91cmwgPSBmaWVsZC5kZXRhaWxfdXJsXG5cdFx0XHRpZiBmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHR2YWx1ZSA9IF8ubWFwIHZhbHVlLCAoaXRlbSktPlxuXHRcdFx0XHRcdHJldHVybiBnZXRMaW5rVGV4dChpdGVtLCBpdGVtWydAbGFiZWwnXSwgZGV0YWlsX3VybClcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSBnZXRMaW5rVGV4dCh2YWx1ZSwgdmFsdWVbJ0BsYWJlbCddLCBkZXRhaWxfdXJsKVxuXHRcdHdoZW4gJ2ltYWdlJ1xuXHRcdFx0aWYgZmllbGQuaXNfbXVsdGlzZWxlY3Rcblx0XHRcdFx0dmFsdWUgPSBfLm1hcCB2YWx1ZSwgKGl0ZW0pLT5cblx0XHRcdFx0XHRyZXR1cm4gJzxkaXYgY2xhc3M9XCJhbnRkLUltYWdlQ29udHJvbC1pdGVtIGlzLXVwbG9hZGVkXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZSBhbnRkLUltYWdlLS10aHVtYiBhbnRkLUltYWdlQ29udHJvbC1pbWFnZVwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYldyYXBcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYlwiPjxpbWcgY2xhc3M9XCJhbnRkLUltYWdlLWltYWdlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3JjPVwiL2FwaS9maWxlcy9pbWFnZXMvJytpdGVtKydcIj48L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj4nXG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuam9pbihcIlwiKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSAnPGRpdiBjbGFzcz1cImFudGQtSW1hZ2VDb250cm9sLWl0ZW0gaXMtdXBsb2FkZWRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlIGFudGQtSW1hZ2UtLXRodW1iIGFudGQtSW1hZ2VDb250cm9sLWltYWdlXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iV3JhcFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iXCI+PGltZyBjbGFzcz1cImFudGQtSW1hZ2UtaW1hZ2VcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIvYXBpL2ZpbGVzL2ltYWdlcy8nK3ZhbHVlKydcIj48L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj4nXG5cdFx0d2hlbiAnZmlsZSdcblx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdGlmICFmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHRcdHZhbHVlID0gW3ZhbHVlXVxuXHRcdFx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFx0XHRyZXMgPSBTdGVlZG9zLmF1dGhSZXF1ZXN0KCcvYXBpL3YxL2Nmc19maWxlc19maWxlcmVjb3JkP2ZpbHRlcnM9W1tcIl9pZFwiLFwiaW5cIiwgJytKU09OLnN0cmluZ2lmeSh2YWx1ZSkrJ11dJmZpZWxkcz1bXCJfaWRcIixcIm9yaWdpbmFsXCJdJywge2FzeW5jOmZhbHNlfSlcblx0XHRcdFx0XHRyZWNvcmRzID0gcmVzLmRhdGEuaXRlbXNcblx0XHRcdFx0ZWxzZSBpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdFx0XHRyZWNvcmRzID0gU3RlZWRvcy5vYmplY3RGaW5kKFwiY2ZzX2ZpbGVzX2ZpbGVyZWNvcmRcIiwgeyBmaWx0ZXJzOiBbW1wiX2lkXCIsICdpbicsIHZhbHVlXV0sIGZpZWxkczogW1wiX2lkXCIsIFwib3JpZ2luYWxcIl0gfSk7XG5cblx0XHRcdFx0dmFsdWUgPSBfLm1hcCByZWNvcmRzLCAoaXRlbSktPlxuXHRcdFx0XHRcdGZpbGVOYW1lID0gaXRlbS5vcmlnaW5hbC5uYW1lO1xuXHRcdFx0XHRcdGZpbGVVcmwgPSBTdGVlZG9zLmFic29sdXRlVXJsKCcvYXBpL2ZpbGVzL2ZpbGVzLycraXRlbS5faWQpO1xuXHRcdFx0XHRcdGZpbGVQcmV2aWV3SHRtbCA9ICcnO1xuXHRcdFx0XHRcdGlmIFtcIi5wZGZcIiwgXCIuanBnXCIsIFwiLmpwZWdcIiwgXCIucG5nXCIsIFwiLmdpZlwiXS5pbmRleE9mKGZpbGVOYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoLTQpKSA+IC0xXG5cdFx0XHRcdFx0XHRmaWxlUHJldmlld0h0bWwgPSBcIiZlbnNwOzxhIGhyZWY9JyN7ZmlsZVVybH0nIHRhcmdldD0nX2JsYW5rJyBjbGFzcz0nYW50ZC1MaW5rJz48c3BhbiBjbGFzcz0nYW50ZC1UcGxGaWVsZCc+PHNwYW4+6aKE6KeIPC9zcGFuPjwvc3Bhbj48L2E+XCJcblx0XHRcdFx0XHRyZXR1cm4gXCI8ZGl2PjxhIGhyZWY9JyN7ZmlsZVVybCsnP2Rvd25sb2FkPXRydWUnfScgdGFyZ2V0PSdfYmxhbmsnPiN7ZmlsZU5hbWV9PC9hPiAje2ZpbGVQcmV2aWV3SHRtbCA/IGZpbGVQcmV2aWV3SHRtbCA6ICcnfTwvZGl2PlwiXG5cblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5qb2luKFwiXCIpO1xuXHRcdHdoZW4gJ2xvb2t1cCdcblx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdGlmICFmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHRcdHZhbHVlID0gW3ZhbHVlXVxuXHRcdFx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFx0XHR1aVNjaGVtYSA9IENyZWF0b3IuZ2V0T2JqZWN0KGZpZWxkLnJlZmVyZW5jZV90bylcblx0XHRcdFx0XHRuYW1lRmllbGQgPSB1aVNjaGVtYT8uTkFNRV9GSUVMRF9LRVkgfHwgJ25hbWUnXG5cdFx0XHRcdFx0cmVzID0gU3RlZWRvcy5hdXRoUmVxdWVzdCgnL2FwaS92MS8nK2ZpZWxkLnJlZmVyZW5jZV90bysnP2ZpbHRlcnM9W1tcIicrKGZpZWxkLnJlZmVyZW5jZV90b19maWVsZCB8fCAnX2lkJykrJ1wiLFwiaW5cIiwgJytKU09OLnN0cmluZ2lmeSh2YWx1ZSkrJ11dJmZpZWxkcz1bXCJfaWRcIixcIicrbmFtZUZpZWxkKydcIl0nLCB7YXN5bmM6ZmFsc2V9KVxuXHRcdFx0XHRcdHJlY29yZHMgPSByZXMuZGF0YS5pdGVtc1xuXHRcdFx0XHRlbHNlIGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0XHRcdG5hbWVGaWVsZCA9IFN0ZWVkb3MuZ2V0T2JqZWN0TmFtZUZpZWxkS2V5KGZpZWxkLnJlZmVyZW5jZV90byk7XG5cdFx0XHRcdFx0cmVjb3JkcyA9IFN0ZWVkb3Mub2JqZWN0RmluZChmaWVsZC5yZWZlcmVuY2VfdG8sIHsgZmlsdGVyczogW1soZmllbGQucmVmZXJlbmNlX3RvX2ZpZWxkIHx8ICdfaWQnKSwgJ2luJywgdmFsdWVdXSwgZmllbGRzOiBbXCJfaWRcIiwgbmFtZUZpZWxkXSB9KTtcblx0XHRcdFx0dmFsdWUgPSBfLm1hcCByZWNvcmRzLCAoaXRlbSktPlxuXHRcdFx0XHRcdHJldHVybiBcIjxhIGhyZWY9JyN7U3RlZWRvcy5hYnNvbHV0ZVVybCgnL2FwcC8tLycrZmllbGQucmVmZXJlbmNlX3RvKycvdmlldy8nK2l0ZW0uX2lkKX0nIHRhcmdldD0nX2JsYW5rJz4je2l0ZW1bbmFtZUZpZWxkXX08L2E+XCJcblxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLmpvaW4oXCIgLCBcIik7XHRcblx0XHR3aGVuICdodG1sJ1xuXHRcdFx0dmFsdWUgPSBpZiB2YWx1ZSB0aGVuIFwiPGRpdiBjbGFzcz1cXFwic3RlZWRvcy1odG1sXFxcIj4je3ZhbHVlfTwvZGl2PlwiIGVsc2UgJydcblxuXHRyZXR1cm4gdmFsdWU7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRMYWJlbCA9IChmaWVsZHMsIGNvZGUpIC0+XG5cdGZpZWxkID0gZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpXG5cdGlmIGZpZWxkXG5cdFx0aWYgZmllbGQubmFtZVxuXHRcdFx0cmV0dXJuIGZpZWxkLm5hbWVcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gZmllbGQuY29kZVxuXG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uID0gKGluc3RhbmNlKS0+XG5cdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuXG5cdGZvcm1fdmVyc2lvbiA9IHt9XG5cblx0Zm9ybV9maWVsZHMgPSBbXTtcblxuXHRpZiBmb3JtLmN1cnJlbnQuX2lkID09IGluc3RhbmNlLmZvcm1fdmVyc2lvblxuXHRcdGZvcm1fdmVyc2lvbiA9IGZvcm0uY3VycmVudFxuXHRlbHNlXG5cdFx0Zm9ybV92ZXJzaW9uID0gXy53aGVyZShmb3JtLmhpc3RvcnlzLCB7X2lkOiBpbnN0YW5jZS5mb3JtX3ZlcnNpb259KVswXVxuXG5cdGZvcm1fdmVyc2lvbi5maWVsZHMuZm9yRWFjaCAoZmllbGQpLT5cblx0XHRpZiBmaWVsZC50eXBlID09ICdzZWN0aW9uJ1xuXHRcdFx0Zm9ybV9maWVsZHMucHVzaChmaWVsZCk7XG5cdFx0XHRpZiBmaWVsZC5maWVsZHNcblx0XHRcdFx0ZmllbGQuZmllbGRzLmZvckVhY2ggKGYpIC0+XG5cdFx0XHRcdFx0Zm9ybV9maWVsZHMucHVzaChmKTtcblx0XHRlbHNlIGlmIGZpZWxkLnR5cGUgPT0gJ3RhYmxlJ1xuXHRcdFx0ZmllbGRbJ3NmaWVsZHMnXSA9IGZpZWxkWydmaWVsZHMnXVxuXHRcdFx0ZGVsZXRlIGZpZWxkWydmaWVsZHMnXVxuXHRcdFx0Zm9ybV9maWVsZHMucHVzaChmaWVsZCk7XG5cdFx0ZWxzZVxuXHRcdFx0Zm9ybV9maWVsZHMucHVzaChmaWVsZCk7XG5cblx0Zm9ybV92ZXJzaW9uLmZpZWxkcyA9IGZvcm1fZmllbGRzO1xuXG5cdHJldHVybiBmb3JtX3ZlcnNpb247XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRGbG93VmVyc2lvbiA9IChpbnN0YW5jZSktPlxuXHRmbG93ID0gZGIuZmxvd3MuZmluZE9uZShpbnN0YW5jZS5mbG93KTtcblx0Zmxvd192ZXJzaW9uID0ge31cblx0aWYgZmxvdy5jdXJyZW50Ll9pZCA9PSBpbnN0YW5jZS5mbG93X3ZlcnNpb25cblx0XHRmbG93X3ZlcnNpb24gPSBmbG93LmN1cnJlbnRcblx0ZWxzZVxuXHRcdGZsb3dfdmVyc2lvbiA9IF8ud2hlcmUoZmxvdy5oaXN0b3J5cywge19pZDogaW5zdGFuY2UuZmxvd192ZXJzaW9ufSlbMF1cblxuXHRyZXR1cm4gZmxvd192ZXJzaW9uO1xuXG5cbl9nZXRWaWV3SHRtbCA9IChwYXRoKSAtPlxuXHR2aWV3SHRtbCA9IEFzc2V0cy5nZXRUZXh0KHBhdGgpXG5cblx0aWYgdmlld0h0bWxcblx0XHR2aWV3SHRtbCA9IHZpZXdIdG1sLnJlcGxhY2UoLzx0ZW1wbGF0ZVtcXHdcXHNcXFwiXFw9J10rPi9pLFwiXCIpLnJlcGxhY2UoLzxcXC90ZW1wbGF0ZT4vaSxcIlwiKVxuXG5cdHJldHVybiB2aWV3SHRtbDtcblxuX2dldExvY2FsZSA9ICh1c2VyKS0+XG5cdGlmIHVzZXI/LmxvY2FsZT8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnemgtY24nXG5cdFx0bG9jYWxlID0gXCJ6aC1DTlwiXG5cdGVsc2UgaWYgdXNlcj8ubG9jYWxlPy50b0xvY2FsZUxvd2VyQ2FzZSgpID09ICdlbi11cydcblx0XHRsb2NhbGUgPSBcImVuXCJcblx0ZWxzZVxuXHRcdGxvY2FsZSA9IFwiemgtQ05cIlxuXHRyZXR1cm4gbG9jYWxlXG5cblxuX2dldFJlcXVpcmVkRmllbGRzID0gKGZpZWxkcywgcmV2KS0+XG5cdGlmICFyZXZcblx0XHRyZXYgPSBbXTtcblxuXHRmaWVsZHMuZm9yRWFjaCAoZmllbGQpLT5cblx0XHRpZiBmaWVsZC50eXBlID09ICdzZWN0aW9uJ1xuXHRcdFx0X2dldFJlcXVpcmVkRmllbGRzKGZpZWxkLmZpZWxkcywgcmV2KVxuXHRcdGVsc2UgaWYgZmllbGQudHlwZSA9PSAndGFibGUnXG5cblx0XHRlbHNlXG5cdFx0XHRpZiBmaWVsZC5pc19yZXF1aXJlZFxuXHRcdFx0XHRyZXYucHVzaCBmaWVsZC5jb2RlXG5cdHJldHVybiByZXY7XG5cbl9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyA9IChmaWVsZHMsIHN0ZXBzKS0+XG5cdHN0YXJ0U3RlcCA9IHN0ZXBzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJzdGVwX3R5cGVcIixcInN0YXJ0XCIpXG5cblx0ZWRpdGFibGVDb2RlID0gW11cblxuXHRfLmtleXMoc3RhcnRTdGVwLnBlcm1pc3Npb25zKS5mb3JFYWNoIChrZXkpLT5cblx0XHRpZiBzdGFydFN0ZXAucGVybWlzc2lvbnNba2V5XSA9PSAnZWRpdGFibGUnXG5cdFx0XHRlZGl0YWJsZUNvZGUucHVzaCBrZXlcblxuXHRyZXR1cm4gZWRpdGFibGVDb2RlXG5cbl9nZXRTdGFydFN0ZXBSZXF1aXJlZEZpZWxkcyA9IChmaWVsZHMsIHN0ZXBzKS0+XG5cdHJlcXVpcmVkRmllbGRzID0gX2dldFJlcXVpcmVkRmllbGRzKGZpZWxkcylcblxuXHRlZGl0YWJsZUNvZGUgPSBfZ2V0U3RhcnRTdGVwRWRpdGFibGVGaWVsZHMoZmllbGRzLCBzdGVwcylcblxuXHRyZXR1cm4gXy5pbnRlcnNlY3Rpb24ocmVxdWlyZWRGaWVsZHMsIGVkaXRhYmxlQ29kZSlcblxuX2dldFRlbXBsYXRlRGF0YSA9ICh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpLT5cblx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0Zm9ybV92ZXJzaW9uID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlRm9ybVZlcnNpb24oaW5zdGFuY2UpXG5cdGVsc2Vcblx0XHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbihpbnN0YW5jZSlcblxuXHRsb2NhbGUgPSBfZ2V0TG9jYWxlKHVzZXIpXG5cblx0c3RlZWRvc0RhdGEgPSB7fVxuXG5cdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdHN0ZWVkb3NEYXRhID0gXy5jbG9uZShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCkpXG5cdFx0c3RlZWRvc0RhdGEuaW5zbmFtZSA9IGluc3RhbmNlLm5hbWVcblx0XHRzdGVlZG9zRGF0YS5pbnNfc3RhdGUgPSBpbnN0YW5jZS5zdGF0ZVxuXHRcdHN0ZWVkb3NEYXRhLmluc19maW5hbF9kZWNpc2lvbiA9IGluc3RhbmNlLmluc19maW5hbF9kZWNpc2lvblxuXHRcdHN0ZWVkb3NEYXRhLmluc19jb2RlID0gaW5zdGFuY2UuY29kZVxuXHRcdHN0ZWVkb3NEYXRhLmluc19pc19hcmNoaXZlZCA9IGluc3RhbmNlLmlzX2FyY2hpdmVkXG5cdFx0c3RlZWRvc0RhdGEuaW5zX2lzX2RlbGV0ZWQgPSBpbnN0YW5jZS5pbnNfaXNfZGVsZXRlZFxuXHRcdHN0ZWVkb3NEYXRhLmFwcGxpY2FudF9uYW1lID0gaW5zdGFuY2UuYXBwbGljYW50X25hbWVcblx0XHRzdGVlZG9zRGF0YS5hcHBsaWNhbnRDb250ZXh0ID0gaW5zdGFuY2UuYXBwbGljYW50X25hbWVcblxuXHRzdGVlZG9zRGF0YS5pbnN0YW5jZSA9IGluc3RhbmNlXG5cdHN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvbiA9IGZvcm1fdmVyc2lvblxuXHRzdGVlZG9zRGF0YS5sb2NhbGUgPSBsb2NhbGVcblx0c3RlZWRvc0RhdGEudXRjT2Zmc2V0ID0gdXNlci51dGNPZmZzZXRcblx0c3RlZWRvc0RhdGEuc3BhY2UgPSBpbnN0YW5jZS5zcGFjZVxuXHRzdGVlZG9zRGF0YS5zZXNzaW9uVXNlcklkID0gdXNlci5faWRcblxuXHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRpZiBvcHRpb25zPy5lZGl0YWJsZVxuXHRcdFx0Zm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoe19pZDogaW5zdGFuY2UuZm9ybX0pXG5cblx0XHRcdGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtfaWQ6IGluc3RhbmNlLmZsb3d9KVxuXG5cdFx0XHRzdGVlZG9zRGF0YS5zdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyA9IF9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyhmb3JtLmN1cnJlbnQuZmllbGRzLCBmbG93LmN1cnJlbnQuc3RlcHMpO1xuXG5cdHJldHVybiBzdGVlZG9zRGF0YTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmZvcm1hdERhdGUgPSAoZGF0ZSwgdXRjT2Zmc2V0KS0+XG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdHBhc3NpbmcgPSBmYWxzZTtcblx0ZWxzZVxuXHRcdHBhc3NpbmcgPSB0cnVlO1xuXG5cdGlmICF1dGNPZmZzZXQgJiYgdXRjT2Zmc2V0ICE9MFxuXHRcdHV0Y09mZnNldCA9IDhcblxuXHRyZXR1cm4gbW9tZW50KGRhdGUpLnV0Y09mZnNldCh1dGNPZmZzZXQsIHBhc3NpbmcpLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW1cIik7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXRUaW1lID0gKGRhdGUpLT5cblx0dXRjT2Zmc2V0ID0gMFxuXHRyZXR1cm4gbW9tZW50KGRhdGUpLnV0Y09mZnNldCh1dGNPZmZzZXQpLmZvcm1hdChcIkhIOm1tXCIpO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VWaWV3ID0gKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyktPlxuXG5cdHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpXG5cblx0c3RlZWRvc0RhdGEuYWJzb2x1dGUgPSBmYWxzZTtcblxuXHRpZiBvcHRpb25zPy5hYnNvbHV0ZVxuXHRcdHN0ZWVkb3NEYXRhLmFic29sdXRlID0gdHJ1ZTtcblxuXHRpbnN0YW5jZVRlbXBsYXRlID0gVGVtcGxhdGVNYW5hZ2VyLmdldFRlbXBsYXRlKGluc3RhbmNlLCBvcHRpb25zPy50ZW1wbGF0ZU5hbWUpO1xuXG5cdGluc3RhbmNlVGVtcGxhdGUgPSBpbnN0YW5jZVRlbXBsYXRlLnJlcGxhY2UoL2FmU2VsZWN0VXNlci9nLFwiYWZTZWxlY3RVc2VyUmVhZFwiKVxuXG5cdGlmICFvcHRpb25zPy5lZGl0YWJsZVxuXHRcdGluc3RhbmNlVGVtcGxhdGUgPSBpbnN0YW5jZVRlbXBsYXRlLnJlcGxhY2UoL2FmRm9ybUdyb3VwL2csXCJhZkZvcm1Hcm91cFJlYWRcIilcblxuXHRpbnN0YW5jZUNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbnN0YW5jZVRlbXBsYXRlLCB7aXNCb2R5OiB0cnVlfSk7XG5cblx0aW5zdGFuY2VSZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW5zdGFuY2VDb21waWxlZCk7XG5cblx0VGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcImluc3RhbmNlX3JlYWRvbmx5X3ZpZXdcIiwgaW5zdGFuY2VSZW5kZXJGdW5jdGlvbik7XG5cblx0VGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldy5zdGVlZG9zRGF0YSA9IHN0ZWVkb3NEYXRhXG5cblx0VGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldy5oZWxwZXJzIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnNcblxuXHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5pdChzdGVlZG9zRGF0YSk7XG5cblx0Ym9keSA9IEJsYXplLnRvSFRNTFdpdGhEYXRhKFRlbXBsYXRlLmluc3RhbmNlX3JlYWRvbmx5X3ZpZXcsIHN0ZWVkb3NEYXRhKVxuXG5cdHJldHVybiBcIlwiXCJcblx0XHQ8ZGl2IGlkPSdpbnN0YW5jZWZvcm0nID5cblx0XHRcdCN7Ym9keX1cblx0XHQ8L2Rpdj5cblx0XCJcIlwiXG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRUcmFjZXNWaWV3ID0gKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyktPlxuXG5cdHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpXG5cblx0Zm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoaW5zdGFuY2UuZm9ybSk7XG5cdGlmIGZvcm0uaW5zdGFuY2Vfc3R5bGUgPT0gXCJ0YWJsZVwiIHx8IG9wdGlvbnM/LnRlbXBsYXRlTmFtZSA9PSBcInRhYmxlXCJcblx0XHR0cmFjZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzX3RhYmxlLmh0bWwnKVxuXHRlbHNlXG5cdFx0dHJhY2VzSHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL3RyYWNlcy5odG1sJylcblxuXHR0cmFjZUNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZSh0cmFjZXNIdG1sLCB7aXNCb2R5OiB0cnVlfSk7XG5cblx0dHJhY2VSZW5kZXJGdW5jdGlvbiA9IGV2YWwodHJhY2VDb21waWxlZCk7XG5cblx0VGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcInRyYWNlX3JlYWRvbmx5X3ZpZXdcIiwgdHJhY2VSZW5kZXJGdW5jdGlvbik7XG5cblx0VGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldy5zdGVlZG9zRGF0YSA9IHN0ZWVkb3NEYXRhXG5cblx0VGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldy5oZWxwZXJzIFRyYWNlc1RlbXBsYXRlLmhlbHBlcnNcblxuXHRib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldywgaW5zdGFuY2UudHJhY2VzKVxuXG5cdHJldHVybiBib2R5O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0QXR0YWNobWVudFZpZXcgPSAodXNlciwgc3BhY2UsIGluc3RhbmNlKS0+XG5cblx0c3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSlcblxuXHRhdHRhY2htZW50SHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL2luc3RhbmNlX2F0dGFjaG1lbnRzLmh0bWwnKVxuXG5cdGF0dGFjaG1lbnRDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUoYXR0YWNobWVudEh0bWwsIHtpc0JvZHk6IHRydWV9KTtcblxuXHRhdHRhY2htZW50UmVuZGVyRnVuY3Rpb24gPSBldmFsKGF0dGFjaG1lbnRDb21waWxlZCk7XG5cblx0VGVtcGxhdGUuYXR0YWNobWVudHNfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcImF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXdcIiwgYXR0YWNobWVudFJlbmRlckZ1bmN0aW9uKTtcblxuXHRUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblxuXHRUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3LmhlbHBlcnMgSW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVyc1xuXG5cdGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3KVxuXG5cdHJldHVybiBib2R5O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZEluc3RhbmNlc1ZpZXcgPSAodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKS0+XG5cdHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpXG5cblx0c3RlZWRvc0RhdGEuYWJzb2x1dGUgPSBmYWxzZTtcblxuXHRpZiBvcHRpb25zPy5hYnNvbHV0ZVxuXHRcdHN0ZWVkb3NEYXRhLmFic29sdXRlID0gdHJ1ZTtcblxuXHRyZWxhdGVkSW5zdGFuY2VzSHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL3JlbGF0ZWRfaW5zdGFuY2VzLmh0bWwnKVxuXG5cdHJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUocmVsYXRlZEluc3RhbmNlc0h0bWwsIHtpc0JvZHk6IHRydWV9KTtcblxuXHRyZWxhdGVkSW5zdGFuY2VzUmVuZGVyRnVuY3Rpb24gPSBldmFsKHJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCk7XG5cblx0VGVtcGxhdGUucmVsYXRlZF9pbnN0YW5jZXNfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcInJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXdcIiwgcmVsYXRlZEluc3RhbmNlc1JlbmRlckZ1bmN0aW9uKTtcblxuXHRUZW1wbGF0ZS5yZWxhdGVkX2luc3RhbmNlc192aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblxuXHRUZW1wbGF0ZS5yZWxhdGVkX2luc3RhbmNlc192aWV3LmhlbHBlcnMgUmVsYXRlZEluc3RhbmNlcy5oZWxwZXJzXG5cblx0Ym9keSA9IEJsYXplLnRvSFRNTFdpdGhEYXRhKFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcsIHN0ZWVkb3NEYXRhKVxuXG5cdHJldHVybiBib2R5O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZFJlY29yZHNWaWV3ID0gKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyktPlxuXHRzdGVlZG9zRGF0YSA9IF9nZXRUZW1wbGF0ZURhdGEodXNlciwgc3BhY2UsIGluc3RhbmNlKVxuXG5cdHN0ZWVkb3NEYXRhLmFic29sdXRlID0gZmFsc2U7XG5cblx0aWYgb3B0aW9ucz8uYWJzb2x1dGVcblx0XHRzdGVlZG9zRGF0YS5hYnNvbHV0ZSA9IHRydWU7XG5cblx0cmVsYXRlZFJlY29yZHNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvcmVsYXRlZF9yZWNvcmRzLmh0bWwnKVxuXG5cdHJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHJlbGF0ZWRSZWNvcmRzSHRtbCwge2lzQm9keTogdHJ1ZX0pO1xuXG5cdHJlbGF0ZWRSZWNvcmRzUmVuZGVyRnVuY3Rpb24gPSBldmFsKHJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQpO1xuXG5cdFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwicmVsYXRlZF9yZWNvcmRzX3ZpZXdcIiwgcmVsYXRlZFJlY29yZHNSZW5kZXJGdW5jdGlvbik7XG5cblx0VGVtcGxhdGUucmVsYXRlZF9yZWNvcmRzX3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YVxuXG5cdFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3LmhlbHBlcnMgUmVsYXRlZFJlY29yZHMuaGVscGVyc1xuXG5cdGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5yZWxhdGVkX3JlY29yZHNfdmlldywgc3RlZWRvc0RhdGEpXG5cblx0cmV0dXJuIGJvZHk7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRPbkxvYWRTY3JpcHQgPSAoaW5zdGFuY2UpLT5cblx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm1WZXJzaW9uKGluc3RhbmNlLmZvcm0sIGluc3RhbmNlLmZvcm1fdmVyc2lvbilcblxuXHRmb3JtX3NjcmlwdCA9IGZvcm1fdmVyc2lvbi5mb3JtX3NjcmlwdDtcblxuXHRpZiBmb3JtX3NjcmlwdCAmJiBmb3JtX3NjcmlwdC5yZXBsYWNlKC9cXG4vZyxcIlwiKS5yZXBsYWNlKC9cXHMvZyxcIlwiKS5sZW5ndGggPiAwXG5cdFx0Zm9ybV9zY3JpcHQgPSBcIkNvcmVGb3JtID0ge307Q29yZUZvcm0uaW5zdGFuY2Vmb3JtID0ge307XCIgKyBmb3JtX3NjcmlwdFxuXHRcdGZvcm1fc2NyaXB0ICs9IFwiO2lmKENvcmVGb3JtLmZvcm1fT25Mb2FkKXt3aW5kb3cub25sb2FkID0gQ29yZUZvcm0uZm9ybV9PbkxvYWQoKTt9XCJcblx0ZWxzZVxuXHRcdGZvcm1fc2NyaXB0ID0gXCJcIlxuXG5cblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlSHRtbCA9ICh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpLT5cblxuXHRib2R5ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlVmlldyh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpO1xuXG5cdG9uTG9hZFNjcmlwdCA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRPbkxvYWRTY3JpcHQoaW5zdGFuY2UpO1xuXG5cdGNyZWF0b3JTZXJ2aWNlID0gTWV0ZW9yLnNldHRpbmdzLnB1YmxpYy53ZWJzZXJ2aWNlcz8uY3JlYXRvcj8udXJsXG5cdGluc19yZWNvcmRfaWRzID0gaW5zdGFuY2UucmVjb3JkX2lkc1xuXHRsb2NhbGUgPSBfZ2V0TG9jYWxlKHVzZXIpO1xuXHRvcGVuRmlsZVNjcmlwdCA9IFwiXCJcIlxuXHRcdFx0aWYod2luZG93LmlzTm9kZSAmJiBpc05vZGUoKSl7XG5cdFx0XHRcdGF0dGFjaHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiaW5zX2F0dGFjaF9ocmVmXCIpO1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgYXR0YWNocy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0YXR0YWNoID0gYXR0YWNoc1tpXTtcblx0XHRcdFx0XHRhdHRhY2guYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpe1xuXHRcdFx0XHRcdFx0aWYoaXNJbWFnZSh0aGlzLmRhdGFzZXQudHlwZSkgfHwgaXNIdG1sKHRoaXMuZGF0YXNldC50eXBlKSl7XG5cdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0b3BlbldpbmRvdyhcIi9hcGkvZmlsZXMvaW5zdGFuY2VzL1wiICsgdGhpcy5kYXRhc2V0LmlkKTtcblx0XHRcdFx0XHRcdH1lbHNlIGlmKG53X2NvcmUuY2FuT3BlbkZpbGUodGhpcy5kYXRhc2V0Lm5hbWUpKXtcblx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRud19jb3JlLm9wZW5GaWxlKHRoaXMuaHJlZiwgdGhpcy5kYXRhc2V0Lm5hbWUpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyIGZsb3cgPSBcIiN7aW5zdGFuY2UuZmxvd31cIjtcblx0XHRcdHZhciBzcGFjZSA9IFwiI3tpbnN0YW5jZS5zcGFjZX1cIjtcblxuXHRcdFx0ZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpe1xuXHRcdFx0XHRsZXQgcGF0dGVybiA9IFJlZ0V4cChuYW1lICsgXCI9LlteO10qXCIpXG5cdFx0XHRcdGxldCBtYXRjaGVkID0gZG9jdW1lbnQuY29va2llLm1hdGNoKHBhdHRlcm4pXG5cdFx0XHRcdGlmKG1hdGNoZWQpe1xuXHRcdFx0XHRcdGxldCBjb29raWUgPSBtYXRjaGVkWzBdLnNwbGl0KCc9Jylcblx0XHRcdFx0XHRyZXR1cm4gY29va2llWzFdXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHR9XG5cblx0XHRcdHZhciByZWNvcmRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImlucy1yZWxhdGVkLXJlY29yZHNcIik7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcmVjb3Jkcy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0dmFyIHJlY29yZCA9IHJlY29yZHNbaV07XG5cdFx0XHRcdFx0cmVjb3JkLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKXtcblx0XHRcdFx0XHRcdHZhciBjcmVhdG9yU2VydmljZSA9IFwiI3tjcmVhdG9yU2VydmljZX1cIlxuXHRcdFx0XHRcdFx0dmFyIGluc19yZWNvcmRfaWRzID0gI3tKU09OLnN0cmluZ2lmeShpbnNfcmVjb3JkX2lkcyl9XG5cdFx0XHRcdFx0XHRpZihjcmVhdG9yU2VydmljZSAmJiBpbnNfcmVjb3JkX2lkcyAmJiBpbnNfcmVjb3JkX2lkcy5sZW5ndGggPiAwKXtcblx0XHRcdFx0XHRcdFx0dmFyIG9iamNldE5hbWUgPSBpbnNfcmVjb3JkX2lkc1swXS5vXG5cdFx0XHRcdFx0XHRcdHZhciBpZCA9IGluc19yZWNvcmRfaWRzWzBdLmlkc1swXVxuXHRcdFx0XHRcdFx0XHR2YXIgdW9iaiA9IHt9O1xuXHRcdFx0XHRcdFx0XHR1b2JqW1wiWC1Vc2VyLUlkXCJdID0gZ2V0Q29va2llKFwiWC1Vc2VyLUlkXCIpO1xuXHRcdFx0XHRcdFx0XHR1b2JqW1wiWC1BdXRoLVRva2VuXCJdID0gZ2V0Q29va2llKFwiWC1BdXRoLVRva2VuXCIpO1xuXHRcdFx0XHRcdFx0XHRyZWRpcmVjdFVybCA9IGNyZWF0b3JTZXJ2aWNlICsgXCJhcHAvLS9cIiArIG9iamNldE5hbWUgKyBcIi92aWV3L1wiICsgaWQgKyBcIj9cIiArICQucGFyYW0odW9iaik7XG5cdFx0XHRcdFx0XHRcdG9wZW5XaW5kb3cocmVkaXJlY3RVcmwpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XCJcIlwiO1xuXG5cblx0aWYgIVN0ZWVkb3MuaXNNb2JpbGUoKVxuXHRcdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuXHRcdGlmIGZvcm0/Lmluc3RhbmNlX3N0eWxlID09ICd0YWJsZSdcblx0XHRcdGluc3RhbmNlX3N0eWxlID0gXCJpbnN0YW5jZS10YWJsZVwiXG5cblx0aWYgb3B0aW9ucz8udGVtcGxhdGVOYW1lID09ICd0YWJsZSdcblx0XHRpbnN0YW5jZV9zdHlsZSA9IFwiaW5zdGFuY2UtdGFibGVcIlxuXG5cdGlmIG9wdGlvbnM/Lmluc3RhbmNlX3N0eWxlXG5cdFx0aW5zdGFuY2Vfc3R5bGUgPSBvcHRpb25zLmluc3RhbmNlX3N0eWxlXG5cblx0aWYgIW9wdGlvbnMgfHwgb3B0aW9ucy5zaG93VHJhY2UgPT0gdHJ1ZVxuXHRcdHRyYWNlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFRyYWNlc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlKVxuXHRlbHNlXG5cdFx0dHJhY2UgPSBcIlwiXG5cblx0aW5zdGFuY2VCb3hTdHlsZSA9IFwiXCI7XG5cblx0aWYgaW5zdGFuY2UgJiYgaW5zdGFuY2UuZmluYWxfZGVjaXNpb25cblx0XHRpZiBpbnN0YW5jZS5maW5hbF9kZWNpc2lvbiA9PSBcImFwcHJvdmVkXCJcblx0XHRcdGluc3RhbmNlQm94U3R5bGUgPSBcImJveC1zdWNjZXNzXCJcblx0XHRlbHNlIGlmIChpbnN0YW5jZS5maW5hbF9kZWNpc2lvbiA9PSBcInJlamVjdGVkXCIpXG5cdFx0XHRpbnN0YW5jZUJveFN0eWxlID0gXCJib3gtZGFuZ2VyXCJcblx0aWYgIW9wdGlvbnMgfHwgb3B0aW9ucy5zaG93QXR0YWNobWVudHMgPT0gdHJ1ZVxuXHRcdGF0dGFjaG1lbnQgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0QXR0YWNobWVudFZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlKVxuXHRcdHJlbGF0ZWRfaW5zdGFuY2VzID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFJlbGF0ZWRJbnN0YW5jZXNWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucylcblx0XHRyZWxhdGVkX3JlY29yZHMgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZFJlY29yZHNWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucylcblx0ZWxzZVxuXHRcdGF0dGFjaG1lbnQgPSBcIlwiXG5cdFx0cmVsYXRlZF9pbnN0YW5jZXMgPSBcIlwiXG5cdFx0cmVsYXRlZF9yZWNvcmRzID0gXCJcIlxuXG5cblx0d2lkdGggPSBcIjk2MHB4XCJcblx0I1x05aaC5p6c57uZdGFibGXnmoRwYXJlbnTorr7nva53aWR0aO+8jOWImeS8muWvvOiHtOmYv+mHjOS6kemCrueuseaYvuekunRhYmxlIOW8guW4uFxuXHRpZiBvcHRpb25zPy53aWR0aFxuXHRcdHdpZHRoID0gXCJcIlxuXG5cdGNzc0hyZWYgPSBNZXRlb3IuYWJzb2x1dGVVcmwoXCJzdGVlZG9zLWNzc1wiKVxuXHRcblx0anFIcmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKFwid2Vic2l0ZS9saWJzL2pxdWVyeS5taW4uanNcIilcblxuXHRhbGxDc3NMaW5rID0gXCJcIlwiPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGNsYXNzPVwiX19tZXRlb3ItY3NzX19cIiBocmVmPVwiI3tjc3NIcmVmfVwiPlwiXCJcIlxuXG5cdHRyYWNlQ2hlY2sgPSBcIlwiXG5cdGlmICFfLmlzRW1wdHkodHJhY2UpXG5cdFx0dHJhY2VDaGVjayA9IFwiY2hlY2tlZFwiXG5cdGlmIG9wdGlvbnM/LnRhZ2dlciA9PSAnZW1haWwnIHx8IG9wdGlvbnM/LmVkaXRhYmxlXG5cdFx0c2hvd1RyYWNlc0J0biA9IFwiXCJcblx0ZWxzZVxuXHRcdHNob3dUcmFjZXNCdG4gPSBcIlwiXCJcblx0XHRcdDxkaXYgY2xhc3M9XCJuYXZpZ2F0aW9uLWJhciBidG4tZ3JvdXAgbm8tcHJpbnRcIiBzdHlsZT1cIm1pbi13aWR0aDogNjAwcHg7IHotaW5kZXg6IDk5OTsgYm94LXNpemluZzogYm9yZGVyLWJveDtcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInByaW50LXRvb2xcIj5cblx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJjYngtbGFiZWxcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjYngtcHJpbnQgY2J4LXByaW50LWF0dGFjaG1lbnRzXCIgaWQ9XCJjYngtcHJpbnQtYXR0YWNobWVudHNcIiBjaGVja2VkPVwiY2hlY2tlZFwiPjxzcGFuPiN7VEFQaTE4bi5fXygnaW5zdGFuY2VfYXR0YWNobWVudCcsIHt9LCBsb2NhbGUpfTwvc3Bhbj48L2xhYmVsPlxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNieC1sYWJlbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImNieC1wcmludCBjYngtcHJpbnQtdHJhY2VzXCIgaWQ9XCJjYngtcHJpbnQtdHJhY2VzXCIgY2hlY2tlZD1cIiN7dHJhY2VDaGVja31cIj48c3Bhbj4je1RBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmFsX2hpc3RvcnknLCB7fSwgbG9jYWxlKX08L3NwYW4+PC9sYWJlbD5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdFwiXCJcIlxuXG5cdHNob3dUcmFjZXNTY3JpcHQgPSBcIlwiXCJcblx0XHQkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCl7XG5cdFx0XHR2YXIgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYngtcHJpbnQtdHJhY2VzJyk7XG5cdFx0XHR2YXIgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2luc3RhbmNlLXRyYWNlcycpWzBdO1xuXHRcdFx0aWYgKGIgJiYgYi5jaGVja2VkICYmIHQpe1xuXHRcdFx0XHR0LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcblx0XHRcdH0gZWxzZSBpZih0KXtcblx0XHRcdFx0dC5zdHlsZSA9ICdkaXNwbGF5OiBub25lOydcblx0XHRcdH1cblx0XHRcdGlmKGIpe1xuXHRcdFx0XHRiLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKGUpe1xuXHRcdFx0XHRcdGlmIChlLnRhcmdldC5jaGVja2VkKXtcblx0XHRcdFx0XHRcdHQuc3R5bGUgPSAnZGlzcGxheTogYmxvY2s7J1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblxuXHRcdFx0dmFyIGF0dGFjaG1lbnRzQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2J4LXByaW50LWF0dGFjaG1lbnRzJyk7XG5cdFx0XHR2YXIgYXR0YWNobWVudHNWaWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0YWNobWVudHMtc2VjdGlvbicpWzBdO1xuXHRcdFx0aWYgKGF0dGFjaG1lbnRzQ2hlY2tib3ggJiYgYXR0YWNobWVudHNDaGVja2JveC5jaGVja2VkICYmIGF0dGFjaG1lbnRzVmlldyl7XG5cdFx0XHRcdGF0dGFjaG1lbnRzVmlldy5zdHlsZSA9ICdkaXNwbGF5OiBibG9jazsnXG5cdFx0XHR9IGVsc2UgaWYoYXR0YWNobWVudHNWaWV3KXtcblx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xuXHRcdFx0fVxuXHRcdFx0aWYoYXR0YWNobWVudHNDaGVja2JveCl7XG5cdFx0XHRcdGF0dGFjaG1lbnRzQ2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSl7XG5cdFx0XHRcdFx0aWYgKGUudGFyZ2V0LmNoZWNrZWQpe1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XCJcIlwiXG5cblx0aWYgb3B0aW9ucz8uc3R5bGVzXG5cdFx0YWxsQ3NzTGluayA9IFwiXCJcblxuXHRmb3JtID0gZGIuZm9ybXMuZmluZE9uZSh7X2lkOiBpbnN0YW5jZS5mb3JtfSk7XG5cdGZvcm1EZXNjcmlwdGlvbkh0bWwgPSBcIlwiXG5cdGlmIGZvcm1cblx0XHRmb3JtRGVzY3JpcHRpb24gPSBmb3JtLmRlc2NyaXB0aW9uXG5cdFx0aWYgZm9ybURlc2NyaXB0aW9uXG5cdFx0XHRmb3JtRGVzY3JpcHRpb24gPSBmb3JtRGVzY3JpcHRpb24ucmVwbGFjZSgvXFxuL2csXCI8YnIvPlwiKVxuXHRcdFx0Zm9ybURlc2NyaXB0aW9uSHRtbCA9IFwiXCJcIlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYm94LWhlYWRlciAgd2l0aC1ib3JkZXIgaW5zdGFuY2UtaGVhZGVyXCI+XG5cdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdCN7Zm9ybURlc2NyaXB0aW9ufVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XCJcIlwiXG5cblx0aHRtbCA9IFwiXCJcIlxuXHRcdDwhRE9DVFlQRSBodG1sPlxuXHRcdDxodG1sPlxuXHRcdFx0PGhlYWQ+XG5cdFx0XHRcdDxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCIvPlxuXHRcdFx0XHQje2FsbENzc0xpbmt9XG5cdFx0XHRcdDxzY3JpcHQgc3JjPVwiI3tqcUhyZWZ9XCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPjwvc2NyaXB0PlxuXHRcdFx0XHQ8c2NyaXB0IHNyYz1cIi9qcy9ud19jb3JlLmpzXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPjwvc2NyaXB0PlxuXHRcdFx0XHQje29wdGlvbnMucGx1Z2lucyB8fCBcIlwifVxuXG5cdFx0XHRcdDxzdHlsZT5cblx0XHRcdFx0XHQuc3RlZWRvc3tcblx0XHRcdFx0XHRcdHdpZHRoOiAje3dpZHRofTtcblx0XHRcdFx0XHRcdG1hcmdpbi1sZWZ0OiBhdXRvO1xuXHRcdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiBhdXRvO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC5pbnN0YW5jZS12aWV3IC5pbnN0YW5jZS1uYW1le1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmJveC10b29sc3tcblx0XHRcdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5ib3guY29sbGFwc2VkLWJveCAuYm94LWJvZHksLmJveC5jb2xsYXBzZWQtYm94IC5ib3gtZm9vdGVyIHtcblx0XHRcdFx0XHQgIGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJvZHl7XG5cdFx0XHRcdFx0XHRiYWNrZ3JvdW5kOiBhenVyZSAhaW1wb3J0YW50O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC5pbnN0YW5jZS12aWV3IC5pbnN0YW5jZS10cmFjZXN7XG5cdFx0XHRcdFx0XHRwYWRkaW5nLWxlZnQ6IDE1cHg7XG5cdFx0XHRcdFx0XHRwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtIHtcblx0XHRcdFx0XHRib3JkZXItcmFkaXVzOiB2YXIoLS1JbWFnZUNvbnRyb2wtYWRkQnRuLWJvcmRlclJhZGl1cyk7XG5cdFx0XHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcblx0XHRcdFx0XHRwYWRkaW5nOiB2YXIoLS1nYXAteHMpO1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IHZhcigtLWdhcC1iYXNlKTtcblx0XHRcdFx0XHRtYXJnaW4tYm90dG9tOiB2YXIoLS1nYXAtYmFzZSk7XG5cdFx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0XHRcdHdpZHRoOiA3LjVyZW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtLmlzLWludmFsaWQge1xuXHRcdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1GaWxlQ29udHJvbC1kYW5nZXItY29sb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbSBzdmcuaWNvbi1yZWZyZXNoIHtcblx0XHRcdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZmlsZW5hbWUge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRcdFx0XHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdFx0XHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdFx0XHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRcdFx0XHRjb2xvcjogdmFyKC0tRmlsZUNvbnRyb2wtZGFuZ2VyLWNvbG9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpbGVuYW1lID4gc3ZnLmljb24taW1hZ2Uge1xuXHRcdFx0XHRcdG1hcmdpbi1ib3R0b206IDhweDtcblx0XHRcdFx0XHR3aWR0aDogMjRweDtcblx0XHRcdFx0XHRoZWlnaHQ6IDI0cHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1maWxlbmFtZSA+IHNwYW4ge1xuXHRcdFx0XHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRcdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xuXHRcdFx0XHRcdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdFx0XHRcdFx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pbWFnZSB7XG5cdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdFx0Ym9yZGVyOiBub25lO1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcblx0XHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdHRvcDogNXB4O1xuXHRcdFx0XHRcdHJpZ2h0OiA1cHg7XG5cdFx0XHRcdFx0bGluZS1oZWlnaHQ6IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIgPiBzdmcge1xuXHRcdFx0XHRcdHRvcDogMDtcblx0XHRcdFx0XHR3aWR0aDogMTBweDtcblx0XHRcdFx0XHRoZWlnaHQ6IDEwcHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtSW5mbyB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdFx0XHRcdFx0d2lkdGg6IDExMHB4O1xuXHRcdFx0XHRcdGhlaWdodDogMTEwcHg7XG5cdFx0XHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdFx0XHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRcdFx0XHRhbGlnbi1jb250ZW50OiBjZW50ZXI7XG5cdFx0XHRcdFx0ZmxleC13cmFwOiB3cmFwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUluZm8gPiBwIHtcblx0XHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdFx0XHRcdG1hcmdpbi1ib3R0b206IDVweDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXByb2dyZXNzIHtcblx0XHRcdFx0XHR3aWR0aDogNzBweDtcblx0XHRcdFx0XHRoZWlnaHQ6IDVweDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZWJlYmViO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtcHJvZ3Jlc3NWYWx1ZSB7XG5cdFx0XHRcdFx0aGVpZ2h0OiA1cHg7XG5cdFx0XHRcdFx0Ym9yZGVyLXJhZGl1czogdmFyKC0tSW1hZ2VDb250cm9sLXByb2dyZXNzLWJvcmRlclJhZGl1cyk7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0YmFja2dyb3VuZDogdmFyKC0taW5mbyk7XG5cdFx0XHRcdFx0bWluLXdpZHRoOiAxMCU7XG5cdFx0XHRcdFx0dHJhbnNpdGlvbjogZWFzZS1vdXQgd2lkdGggdmFyKC0tYW5pbWF0aW9uLWR1cmF0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWl0ZW0uaXMtaW52YWxpZCAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbS5pcy1pbnZhbGlkOmhvdmVyIC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIge1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZXJyb3JNc2cge1xuXHRcdFx0XHRcdGNvbG9yOiB2YXIoLS1kYW5nZXIpO1xuXHRcdFx0XHRcdG1hcmdpbjogNXB4IDAgMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXVwbG9hZEJ0biB7XG5cdFx0XHRcdFx0bWFyZ2luLXRvcDogNXB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcHBlcldyYXBwZXIge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWNyb3BwZXJXcmFwcGVyIGltZyB7XG5cdFx0XHRcdFx0bWF4LXdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdG1heC1oZWlnaHQ6IDQwMHB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdHJpZ2h0OiAwO1xuXHRcdFx0XHRcdGJvdHRvbTogMDtcblx0XHRcdFx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRcdFx0XHRcdGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdFx0XHRcdGJvcmRlci1yYWRpdXM6IDRweDtcblx0XHRcdFx0XHRtYXJnaW46IDAuNXJlbTtcblx0XHRcdFx0XHRib3gtc2hhZG93OiAwIDAgNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciA+IGEge1xuXHRcdFx0XHRcdGNvbG9yOiB2YXIoLS1Gb3JtLWl0ZW0tZm9udENvbG9yKTtcblx0XHRcdFx0XHRwYWRkaW5nOiAycHggNXB4O1xuXHRcdFx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRcdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1jcm9wZXJUb29sYmFyID4gYTpob3ZlciB7XG5cdFx0XHRcdFx0Y29sb3I6IHZhcigtLWxpbmstY29sb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtYWNjZXB0VGlwIHtcblx0XHRcdFx0XHRoZWlnaHQ6IDEyMHB4O1xuXHRcdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1ib3JkZXJDb2xvcik7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1pbmZvKTtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZjNmOWZlO1xuXHRcdFx0XHRcdGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclJhZGl1cyk7XG5cdFx0XHRcdFx0bGluZS1oZWlnaHQ6IDEyMHB4O1xuXHRcdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpeGVkLXNpemUge1xuXHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZml4ZWQtc2l6ZSAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbU92ZXJsYXkge1xuXHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQuYW50ZC1JbWFnZXMge1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogZmxleDtcblx0XHRcdFx0XHRcdGZsZXgtd3JhcDogd3JhcDtcblx0XHRcdFx0XHRcdG1hcmdpbjogY2FsYyh2YXIoLS1nYXAteHMpICogLTEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2VzLWl0ZW0ge1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogZmxleDtcblx0XHRcdFx0XHRcdG1hcmdpbjogdmFyKC0tZ2FwLXhzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlIHtcblx0XHRcdFx0XHRcdGJvcmRlcjogdmFyKC0tYm9yZGVyV2lkdGgpIHNvbGlkIHZhcigtLWJvcmRlckNvbG9yKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLS10aHVtYiB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiB2YXIoLS1nYXAteHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWJXcmFwIHtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLWltYWdlIHtcblx0XHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtaW1hZ2UtLWxvYWRpbmcge1xuXHRcdFx0XHRcdFx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtLW9yaWdpbmFsIC5hbnRkLUltYWdlLWltYWdlIHtcblx0XHRcdFx0XHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRcdFx0XHRcdG1heC1oZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdFx0XHR3aWR0aDogYXV0bztcblx0XHRcdFx0XHRcdG1hcmdpbjogYXV0bztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iIHtcblx0XHRcdFx0XHRcdHdpZHRoOiA2Ljg3NXJlbTtcblx0XHRcdFx0XHRcdGhlaWdodDogNi44NzVyZW07XG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHRcdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWIgPiBpbWcge1xuXHRcdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdFx0bGVmdDogNTAlO1xuXHRcdFx0XHRcdFx0dG9wOiA1MCU7XG5cdFx0XHRcdFx0XHRtYXgtaGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRcdFx0d2lkdGg6IGF1dG87XG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLWluZm8ge1xuXHRcdFx0XHRcdFx0cGFkZGluZzogNXB4IDEwcHg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS0tdGh1bWIgLmFudGQtSW1hZ2UtaW5mbyB7XG5cdFx0XHRcdFx0XHR3aWR0aDogNi44NzVyZW07XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLTQtMyB7XG5cdFx0XHRcdFx0XHRoZWlnaHQ6IDUuMTU2MjVyZW07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tMTYtOSB7XG5cdFx0XHRcdFx0XHRoZWlnaHQ6IDMuODY3MTg3NXJlbTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS1maXhlZC1zaXplIHtcblx0XHRcdFx0XHRcdG1pbi13aWR0aDogNi44NzVyZW07XG5cdFx0XHRcdFx0XHRtaW4taGVpZ2h0OiA2Ljg3NXJlbTtcblx0XHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS1maXhlZC1zaXplIC5hbnRkLUltYWdlLXRodW1iIHtcblx0XHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLWZpeGVkLXNpemUgLmFudGQtSW1hZ2UtdGh1bWIgPiBpbWcge1xuXHRcdFx0XHRcdFx0d2lkdGg6IGF1dG87XG5cdFx0XHRcdFx0XHRoZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tdy1mdWxsID4gaW1nIHtcblx0XHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdFx0aGVpZ2h0OiBhdXRvO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0I3tvcHRpb25zPy5zdHlsZXMgfHwgXCJcIn1cblxuXHRcdFx0XHRcdCN7b3B0aW9ucz8uYWRkX3N0eWxlcyB8fCBcIlwifVxuXHRcdFx0XHQ8L3N0eWxlPlxuXHRcdFx0PC9oZWFkPlxuXHRcdFx0PGJvZHk+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVlZG9zIHdvcmtmbG93IGluc3RhbmNlLXByaW50XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInNraW4tZ3JlZW4gc2tpbi1hZG1pbi1sdGVcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb250ZW50LXdyYXBwZXJcIj5cblx0XHRcdFx0XHRcdFx0XHQje3Nob3dUcmFjZXNCdG59XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImluc3RhbmNlLXByaW50XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW5zdGFuY2UgI3tpbnN0YW5jZV9zdHlsZX1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGZvcm0gbmFtZT1cImluc3RhbmNlRm9ybVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnN0YW5jZS1mb3JtIGJveCAje2luc3RhbmNlQm94U3R5bGV9XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQje2Zvcm1EZXNjcmlwdGlvbkh0bWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYm94LWJvZHlcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIHN0eWxlPVwiYm94LXNpemluZzogYm9yZGVyLWJveDtcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdhdHRhY2htZW50cy1zZWN0aW9uJz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCN7YXR0YWNobWVudH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCN7cmVsYXRlZF9pbnN0YW5jZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQje3JlbGF0ZWRfcmVjb3Jkc31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQje2JvZHl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZm9ybT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0I3t0cmFjZX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9ib2R5PlxuXHRcdFx0PHNjcmlwdD4je29wZW5GaWxlU2NyaXB0fTsje29uTG9hZFNjcmlwdH07I3tzaG93VHJhY2VzU2NyaXB0fTwvc2NyaXB0PlxuXHRcdDwvaHRtbD5cblx0XCJcIlwiXG5cblx0cmV0dXJuIGh0bWwiLCJ2YXIgX2dldExvY2FsZSwgX2dldFJlcXVpcmVkRmllbGRzLCBfZ2V0U3RhcnRTdGVwRWRpdGFibGVGaWVsZHMsIF9nZXRTdGFydFN0ZXBSZXF1aXJlZEZpZWxkcywgX2dldFRlbXBsYXRlRGF0YSwgX2dldFZpZXdIdG1sLCBnZXRMaW5rVGV4dCwgbWFya2VkOyAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbm1hcmtlZCA9IHJlcXVpcmUoXCJtYXJrZWRcIik7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZSA9IHt9O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5zdGFuY2VfYXR0YWNobWVudCA9IFwiPHRyPlxcblx0PHRkIGNsYXNzPVxcXCJpbnMtYXR0YWNoLXZpZXdcXFwiPlxcblx0XHQ8YSBocmVmPVxcXCJ7e2luc19hdHRhY2hfZG93bmxvYWRfdXJsIF9pZCBhYnNvbHV0ZX19XFxcIiBjbGFzcz1cXFwiaW5zX2F0dGFjaF9ocmVmXFxcIiB0YXJnZXQ9XFxcIl9wYXJlbnRcXFwiIGRhdGEtbmFtZT1cXFwie3t0aGlzLm5hbWV9fVxcXCIgZGF0YS10eXBlPVxcXCJ7e3RoaXMub3JpZ2luYWwudHlwZX19XFxcIiBkYXRhLWlkPVxcXCJ7e19pZH19XFxcIj57e3RoaXMubmFtZX19PC9hPlxcblx0PC90ZD5cXG48L3RyPlwiO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuYWZTZWxlY3RVc2VyUmVhZCA9IFwiPGRpdiBjbGFzcz0nc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCc+e3t2YWx1ZX19PC9kaXY+XCI7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5hZkZvcm1Hcm91cFJlYWQgPSBcIjxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAnPlxcblx0e3sjd2l0aCBnZXRGaWVsZCB0aGlzLm5hbWV9fVxcblx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnc2VjdGlvbid9fVxcblx0XHRcdFx0PGRpdiBjbGFzcz0nc2VjdGlvbiBjYWxsb3V0IGNhbGxvdXQtZGVmYXVsdCc+XFxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tmX2xhYmVsIHRoaXN9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdDxwPnt7e2Rlc2NyaXB0aW9ufX19PC9wPlxcblx0XHRcdFx0PC9kaXY+XFxuXHRcdHt7ZWxzZX19XFxuXHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3RhYmxlJ319XFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0IHN0ZWVkb3MtdGFibGVcXFwiPlxcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIiBzdHlsZT1cXFwicGFkZGluZzowcHg7XFxcIj5cXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbC1oZWFkaW5nXFxcIiA+XFxuXHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9J2NvbnRyb2wtbGFiZWwnPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVxcXCJkZXNjcmlwdGlvblxcXCI+e3t7ZGVzY3JpcHRpb259fX08L3NwYW4+XFxuXHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwicmVhZG9ubHktdGFibGVcXFwiIHN0eWxlPVxcXCJwYWRkaW5nOjBweDtvdmVyZmxvdy14OmF1dG87XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHR5cGU9J3RhYmxlJyBjbGFzcz1cXFwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtY29uZGVuc2VkIGF1dG9mb3JtLXRhYmxlXFxcIiBzdHlsZT0nbWFyZ2luLWJvdHRvbTowcHg7JyB7e3RoaXMuYXR0c319IGlkPVxcXCJ7e3RoaXMuY29kZX19VGFibGVcXFwiIG5hbWU9XFxcInt7dGhpcy5jb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3t0aGlzLm5hbWV9fVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PHRoZWFkIGlkPVxcXCJ7e3RoaXMubmFtZX19VGhlYWRcXFwiIG5hbWU9XFxcInt7dGhpcy5uYW1lfX1UaGVhZFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZVRoZWFkIHRoaXN9fX1cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3RoZWFkPlxcblx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keSBpZD1cXFwie3t0aGlzLm5hbWV9fVRib2R5XFxcIiBuYW1lPVxcXCJ7e3RoaXMubmFtZX19VGJvZHlcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0e3t7Z2V0VGFibGVCb2R5IHRoaXN9fX1cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5Plxcblx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxcblx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdDwvZGl2Plxcblx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHR7eyNpZiBzaG93TGFiZWx9fVxcblx0XHRcdFx0XHQ8bGFiZWw+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdFx0e3sjaWYgaXNUZXh0YXJlYSB0aGlzfX1cXG5cdFx0XHRcdFx0PHAgY2xhc3M9J3t7Z2V0Q2ZDbGFzcyB0aGlzfX0gZm9ybS1jb250cm9sJyByZWFkb25seSBkaXNhYmxlZD57e3tnZXRWYWx1ZSBjb2RlfX19PC9wPlxcblx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0ne3tnZXRDZkNsYXNzIHRoaXN9fSBmb3JtLWNvbnRyb2wnIHJlYWRvbmx5IGRpc2FibGVkPnt7e2dldFZhbHVlIGNvZGV9fX08L2Rpdj5cXG5cdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHR7ey9pZn19XFxuXHRcdHt7L2lmfX1cXG5cdHt7L3dpdGh9fVxcbjwvZGl2PlwiO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuYWZGb3JtR3JvdXAgPSBcIlxcbnt7I3dpdGggZ2V0RmllbGQgdGhpcy5uYW1lfX1cXG5cdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3NlY3Rpb24nfX1cXG5cdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cdFx0XHRcdDxkaXYgY2xhc3M9J3NlY3Rpb24gY2FsbG91dCBjYWxsb3V0LWRlZmF1bHQnPlxcblx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Zl9sYWJlbCB0aGlzfX08L2xhYmVsPlxcblx0XHRcdFx0XHQ8cD57e3tkZXNjcmlwdGlvbn19fTwvcD5cXG5cdFx0XHRcdDwvZGl2PlxcbiAgXHRcdFx0XHQ8L2Rpdj5cXG5cdFx0e3tlbHNlfX1cXG5cdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAndGFibGUnfX1cXG5cdFx0XHRcdDxkaXYgY2xhc3M9XFxcInBhbmVsIHBhbmVsLWRlZmF1bHQgc3RlZWRvcy10YWJsZVxcXCI+XFxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcInBhbmVsLWJvZHlcXFwiIHN0eWxlPVxcXCJwYWRkaW5nOjBweDtcXFwiPlxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcInBhbmVsLWhlYWRpbmdcXFwiID5cXG5cdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz0nY29udHJvbC1sYWJlbCc+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XFxcImRlc2NyaXB0aW9uXFxcIj57e3tkZXNjcmlwdGlvbn19fTwvc3Bhbj5cXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJyZWFkb25seS10YWJsZVxcXCIgc3R5bGU9XFxcInBhZGRpbmc6MHB4O292ZXJmbG93LXg6YXV0bztcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgdHlwZT0ndGFibGUnIGNsYXNzPVxcXCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1jb25kZW5zZWQgYXV0b2Zvcm0tdGFibGVcXFwiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjBweDsnIHt7dGhpcy5hdHRzfX0gaWQ9XFxcInt7dGhpcy5jb2RlfX1UYWJsZVxcXCIgbmFtZT1cXFwie3t0aGlzLmNvZGV9fVxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e3RoaXMubmFtZX19XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGhlYWQgaWQ9XFxcInt7dGhpcy5uYW1lfX1UaGVhZFxcXCIgbmFtZT1cXFwie3t0aGlzLm5hbWV9fVRoZWFkXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7e2dldFRhYmxlVGhlYWQgdGhpc319fVxcblx0XHRcdFx0XHRcdFx0XHRcdDwvdGhlYWQ+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5IGlkPVxcXCJ7e3RoaXMubmFtZX19VGJvZHlcXFwiIG5hbWU9XFxcInt7dGhpcy5uYW1lfX1UYm9keVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZUJvZHkgdGhpc319fVxcblx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XFxuXHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XFxuXHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdpbnB1dCd9fVxcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIiBkYXRhLXJlcXVpcmVkPVxcXCJ7eyNpZiBpc19yZXF1aXJlZH19dHJ1ZXt7L2lmfX1cXFwiPlxcblx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XFxcIjdaUW5Ec1hCR29oWk1ldEE1XFxcIiBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdHt7I2lmIGlzX3RleHRhcmVhfX1cXG5cdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSB0aXRsZT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIG5hbWU9XFxcInt7Y29kZX19XFxcIiB7e2dldFBlcm1pc3Npb25zIGNvZGV9fSBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIj48L3RleHRhcmVhPlxcblx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHR7eyN1bmxlc3MgaXNfdGV4dGFyZWF9fVxcblx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XFxcInRleHRcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIHt7Z2V0UGVybWlzc2lvbnMgY29kZX19IGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdHt7L3VubGVzc319XFxuXHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ251bWJlcid9fVxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwibnVtYmVyXFxcIiB0aXRsZT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIG5hbWU9XFxcInt7Y29kZX19XFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIj5cXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnZGF0ZSd9fVxcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XFxcIjdaUW5Ec1hCR29oWk1ldEE1XFxcIiBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgdGl0bGU9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgZGF0YS10eXBlPVxcXCJkYXRlXFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIj5cXG5cdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnZGF0ZVRpbWUnfX1cXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XFxcInRleHRcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtdHlwZT0nZGF0ZXRpbWUnIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdwYXNzd29yZCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwicGFzc3dvcmRcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxcblx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdzZWxlY3QnfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNlbGVjdCBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjZWFjaCBvcHRpb25zIHRoaXN9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cXFwie3t2YWx1ZX19XFxcIj57e2xhYmVsfX08L29wdGlvbj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zZWxlY3Q+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3JhZGlvJ319XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XFxcIjdaUW5Ec1hCR29oWk1ldEE1XFxcIiBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImFmLXJhZGlvLWdyb3VwXFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cXG4gICAgICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cXFwicmFkaW8taW5saW5lIGZpeC1pbmRlbnRcXFwiPjxpbnB1dCB0eXBlPVxcXCJyYWRpb1xcXCIgdmFsdWU9XFxcInt7dmFsdWV9fVxcXCIgbmFtZT1cXFwie3suLi9jb2RlfX1cXFwiIGNsYXNzPVxcXCJyYWRpby1pbmxpbmUgZml4LWluZGVudFxcXCI+IHt7bGFiZWx9fTwvbGFiZWw+XFxuICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svZWFjaH19XFxuICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdtdWx0aVNlbGVjdCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJhZi1jaGVja2JveC1ncm91cFxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVxcXCJjaGVja2JveC1pbmxpbmUgZml4LWluZGVudFxcXCI+PGlucHV0IHR5cGU9XFxcImNoZWNrYm94XFxcIiB2YWx1ZT1cXFwie3t2YWx1ZX19XFxcIiBuYW1lPVxcXCJ7ey4uL2NvZGV9fVxcXCIgY2xhc3M9XFxcImNoZWNrYm94LWlubGluZSBmaXgtaW5kZW50XFxcIj4ge3tsYWJlbH19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svZWFjaH19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAndXJsJ319XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVxcXCJ1cmxcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdlbWFpbCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwiZW1haWxcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdjaGVja2JveCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJjaGVja2JveFxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBzdHlsZT1cXFwid2lkdGg6IDEwMCU7XFxcIj48aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiIHZhbHVlPVxcXCJ0cnVlXFxcIiBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgY2xhc3M9XFxcImNoZWNrYm94LWlubGluZSBmaXgtaW5kZW50XFxcIj48L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J3t7Z2V0Q2ZDbGFzcyB0aGlzfX0gZm9ybS1jb250cm9sJyByZWFkb25seSBkaXNhYmxlZD57e3tnZXRWYWx1ZSBjb2RlfX19PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9pZn19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHR7ey9pZn19XFxuXHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHR7ey9pZn19XFxuXHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHR7ey9pZn19XFxuXHRcdHt7L2lmfX1cXG5cdHt7L3dpdGh9fVwiO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlID0gZnVuY3Rpb24odGVtcGFsdGVOYW1lLCBzdGVlZG9zRGF0YSkge1xuICB2YXIgdGVtcGxhdGUsIHRlbXBsYXRlQ29tcGlsZWQsIHRlbXBsYXRlUmVuZGVyRnVuY3Rpb247XG4gIHRlbXBsYXRlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlW3RlbXBhbHRlTmFtZV07XG4gIHRlbXBsYXRlQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHRlbXBsYXRlLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICB0ZW1wbGF0ZVJlbmRlckZ1bmN0aW9uID0gZXZhbCh0ZW1wbGF0ZUNvbXBpbGVkKTtcbiAgVGVtcGxhdGVbdGVtcGFsdGVOYW1lXSA9IG5ldyBCbGF6ZS5UZW1wbGF0ZSh0ZW1wYWx0ZU5hbWUsIHRlbXBsYXRlUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZVt0ZW1wYWx0ZU5hbWVdLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIHJldHVybiBUZW1wbGF0ZVt0ZW1wYWx0ZU5hbWVdLmhlbHBlcnMoSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycyk7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW5zdGFuY2VTaWduVGV4dCA9IGZ1bmN0aW9uKHN0ZWVkb3NEYXRhKSB7XG4gIHZhciBpbnN0YW5jZVNpZ25UZXh0Q29tcGlsZWQsIGluc3RhbmNlU2lnblRleHRIdG1sLCBpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb247XG4gIGluc3RhbmNlU2lnblRleHRIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvaW5zdGFuY2Vfc2lnbl90ZXh0Lmh0bWwnKTtcbiAgaW5zdGFuY2VTaWduVGV4dENvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbnN0YW5jZVNpZ25UZXh0SHRtbCwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgaW5zdGFuY2VTaWduVGV4dFJlbmRlckZ1bmN0aW9uID0gZXZhbChpbnN0YW5jZVNpZ25UZXh0Q29tcGlsZWQpO1xuICBUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiaW5zdGFuY2VTaWduVGV4dFwiLCBpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0LmhlbHBlcnMoSW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzKTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGVJbWFnZVNpZ24gPSBmdW5jdGlvbihzdGVlZG9zRGF0YSkge1xuICB2YXIgaW1hZ2VTaWduQ29tcGlsZWQsIGltYWdlU2lnbkh0bWwsIGltYWdlU2lnblJlbmRlckZ1bmN0aW9uO1xuICBpbWFnZVNpZ25IdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvaW1hZ2Vfc2lnbi5odG1sJyk7XG4gIGltYWdlU2lnbkNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbWFnZVNpZ25IdG1sLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICBpbWFnZVNpZ25SZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW1hZ2VTaWduQ29tcGlsZWQpO1xuICBUZW1wbGF0ZS5pbWFnZVNpZ24gPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJpbWFnZVNpZ25cIiwgaW1hZ2VTaWduUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbWFnZVNpZ24uc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgcmV0dXJuIFRlbXBsYXRlLmltYWdlU2lnbi5oZWxwZXJzKEltYWdlU2lnbi5oZWxwZXJzKTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGVUcmFjZXNIYW5sZGVyID0gZnVuY3Rpb24oc3RlZWRvc0RhdGEpIHtcbiAgdmFyIHRyYWNlc0hhbmxkZXJDb21waWxlZCwgdHJhY2VzSGFubGRlckh0bWwsIHRyYWNlc0hhbmxkZXJSZW5kZXJGdW5jdGlvbjtcbiAgdHJhY2VzSGFubGRlckh0bWwgPSBfZ2V0Vmlld0h0bWwoJ2NsaWVudC92aWV3cy9pbnN0YW5jZS90cmFjZXNfaGFuZGxlci5odG1sJyk7XG4gIHRyYWNlc0hhbmxkZXJDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUodHJhY2VzSGFubGRlckh0bWwsIHtcbiAgICBpc0JvZHk6IHRydWVcbiAgfSk7XG4gIHRyYWNlc0hhbmxkZXJSZW5kZXJGdW5jdGlvbiA9IGV2YWwodHJhY2VzSGFubGRlckNvbXBpbGVkKTtcbiAgVGVtcGxhdGUuaW5zdGFuY2VfdHJhY2VzX2hhbmRsZXIgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJpbnN0YW5jZV90cmFjZXNfaGFuZGxlclwiLCB0cmFjZXNIYW5sZGVyUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbnN0YW5jZV90cmFjZXNfaGFuZGxlci5zdGVlZG9zRGF0YSA9IHN0ZWVkb3NEYXRhO1xuICByZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2VfdHJhY2VzX2hhbmRsZXIuaGVscGVycyhUcmFjZXNIYW5kbGVyLmhlbHBlcnMpO1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmluaXQgPSBmdW5jdGlvbihzdGVlZG9zRGF0YSkge1xuICBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlKFwiYWZTZWxlY3RVc2VyUmVhZFwiLCBzdGVlZG9zRGF0YSk7XG4gIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlKFwiYWZGb3JtR3JvdXBcIiwgc3RlZWRvc0RhdGEpO1xuICB9XG4gIEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJhZkZvcm1Hcm91cFJlYWRcIiwgc3RlZWRvc0RhdGEpO1xuICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZShcImluc3RhbmNlX2F0dGFjaG1lbnRcIiwge1xuICAgICAgYWJzb2x1dGU6IHN0ZWVkb3NEYXRhLmFic29sdXRlXG4gICAgfSk7XG4gICAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZUltYWdlU2lnbihzdGVlZG9zRGF0YSk7XG4gICAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZVRyYWNlc0hhbmxkZXIoc3RlZWRvc0RhdGEpO1xuICAgIHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW5zdGFuY2VTaWduVGV4dChzdGVlZG9zRGF0YSk7XG4gIH1cbn07XG5cbmdldExpbmtUZXh0ID0gZnVuY3Rpb24oaXRlbSwgbGFiZWwsIGRldGFpbF91cmwpIHtcbiAgaWYgKGRldGFpbF91cmwpIHtcbiAgICBkZXRhaWxfdXJsID0gZGV0YWlsX3VybC5yZXBsYWNlKFwie19pZH1cIiwgaXRlbS5faWQpO1xuICAgIGlmICghL15odHRwKHM/KTpcXC9cXC8vLnRlc3QoZGV0YWlsX3VybCkpIHtcbiAgICAgIGRldGFpbF91cmwgPSBTdGVlZG9zLmFic29sdXRlVXJsKGRldGFpbF91cmwpO1xuICAgIH1cbiAgICByZXR1cm4gJzxhIGhyZWY9XCInICsgZGV0YWlsX3VybCArICdcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nICsgbGFiZWwgKyAnPC9hPic7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSwgZmllbGQsIGxvY2FsZSwgdXRjT2Zmc2V0KSB7XG4gIHZhciBkYXRlLCBkZXRhaWxfdXJsLCBlLCBmaWVsZE9wdGlvbnMsIGhvdXJzLCBtb250aCwgbmFtZUZpZWxkLCByZWNvcmRzLCByZXMsIHNlY29uZHMsIHNlbGVjdGVkT3B0aW9uLCBzZWxlY3RlZE9wdGlvbnMsIHNwbGl0ZWRWYWx1ZXMsIHQsIHQwLCB0MSwgdWlTY2hlbWEsIHllYXI7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChbXCJzZWxlY3RcIiwgXCJtdWx0aVNlbGVjdFwiLCBcInJhZGlvXCJdLmluZGV4T2YoZmllbGQudHlwZSkgPiAtMSkge1xuICAgIGZpZWxkT3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKG4pIHtcbiAgICAgIHZhciBpdGVtU3BsaXRzO1xuICAgICAgaXRlbVNwbGl0cyA9IG4uc3BsaXQoXCI6XCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IGl0ZW1TcGxpdHNbMF0sXG4gICAgICAgIHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgY2FzZSAnZW1haWwnOlxuICAgICAgdmFsdWUgPSB2YWx1ZSA/ICc8YSBocmVmPVxcJ21haWx0bzonICsgdmFsdWUgKyAnXFwnPicgKyB2YWx1ZSArICc8L2E+JyA6ICcnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXJsJzpcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUuaW5kZXhPZihcImh0dHBcIikgPT09IDApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWUgPSBcIjxhIGhyZWY9J1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBlID0gZXJyb3I7XG4gICAgICAgICAgICB2YWx1ZSA9IFwiPGEgaHJlZj0nJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IFwiPGEgaHJlZj0naHR0cDovL1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLmdldFByb3BlcnR5KFwiZnVsbG5hbWVcIikudG9TdHJpbmcoKSA6IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLmZ1bGxuYW1lIDogdm9pZCAwO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndXNlcic6XG4gICAgICBpZiAoZmllbGQuaXNfbXVsdGlzZWxlY3QpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUuZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKCkgOiB2b2lkIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS5uYW1lIDogdm9pZCAwO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFzc3dvcmQnOlxuICAgICAgdmFsdWUgPSAnKioqKioqJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJykge1xuICAgICAgICB2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiLCB7fSwgbG9jYWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfbm9cIiwge30sIGxvY2FsZSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID09PSAxNikge1xuICAgICAgICB0ID0gdmFsdWUuc3BsaXQoXCJUXCIpO1xuICAgICAgICB0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuICAgICAgICB0MSA9IHRbMV0uc3BsaXQoXCI6XCIpO1xuICAgICAgICB5ZWFyID0gdDBbMF07XG4gICAgICAgIG1vbnRoID0gdDBbMV07XG4gICAgICAgIGRhdGUgPSB0MFsyXTtcbiAgICAgICAgaG91cnMgPSB0MVswXTtcbiAgICAgICAgc2Vjb25kcyA9IHQxWzFdO1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZSwgaG91cnMsIHNlY29uZHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXREYXRlKHZhbHVlLCB1dGNPZmZzZXQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGltZSc6XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID09PSAxNikge1xuICAgICAgICB0ID0gdmFsdWUuc3BsaXQoXCJUXCIpO1xuICAgICAgICB0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuICAgICAgICB0MSA9IHRbMV0uc3BsaXQoXCI6XCIpO1xuICAgICAgICB5ZWFyID0gdDBbMF07XG4gICAgICAgIG1vbnRoID0gdDBbMV07XG4gICAgICAgIGRhdGUgPSB0MFsyXTtcbiAgICAgICAgaG91cnMgPSB0MVswXTtcbiAgICAgICAgc2Vjb25kcyA9IHQxWzFdO1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZSwgaG91cnMsIHNlY29uZHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXRUaW1lKHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGlmIChmaWVsZC5pc190ZXh0YXJlYSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHNlbGVjdGVkT3B0aW9uID0gZmllbGRPcHRpb25zLmZpbmQoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIGlmIChzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9uLmxhYmVsO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmFkaW8nOlxuICAgICAgc2VsZWN0ZWRPcHRpb24gPSBmaWVsZE9wdGlvbnMuZmluZChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlID09PSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgIHZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubGFiZWw7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdtdWx0aVNlbGVjdCc6XG4gICAgICBzcGxpdGVkVmFsdWVzID0gdmFsdWUuc3BsaXQoXCIsXCIpO1xuICAgICAgc2VsZWN0ZWRPcHRpb25zID0gZmllbGRPcHRpb25zLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHJldHVybiBzcGxpdGVkVmFsdWVzLmluZGV4T2YoaXRlbS52YWx1ZSkgPiAtMTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgPSBzZWxlY3RlZE9wdGlvbnMubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5sYWJlbDtcbiAgICAgICAgfSkuam9pbihcIixcIik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgaWYgKHZhbHVlIHx8IHZhbHVlID09PSAwKSB7XG4gICAgICAgIGlmIChmaWVsZC5pc19wZXJjZW50KSB7XG4gICAgICAgICAgdmFsdWUgPSBTdGVlZG9zLm51bWJlclRvUGVyY2VudFN0cmluZyh2YWx1ZSwgZmllbGQuZGlnaXRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IFN0ZWVkb3MubnVtYmVyVG9TdHJpbmcodmFsdWUsIGZpZWxkLmRpZ2l0cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29kYXRhJzpcbiAgICAgIGRldGFpbF91cmwgPSBmaWVsZC5kZXRhaWxfdXJsO1xuICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgIHZhbHVlID0gXy5tYXAodmFsdWUsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gZ2V0TGlua1RleHQoaXRlbSwgaXRlbVsnQGxhYmVsJ10sIGRldGFpbF91cmwpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZ2V0TGlua1RleHQodmFsdWUsIHZhbHVlWydAbGFiZWwnXSwgZGV0YWlsX3VybCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgICBpZiAoZmllbGQuaXNfbXVsdGlzZWxlY3QpIHtcbiAgICAgICAgdmFsdWUgPSBfLm1hcCh2YWx1ZSwgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz1cImFudGQtSW1hZ2VDb250cm9sLWl0ZW0gaXMtdXBsb2FkZWRcIj4gPGRpdiBjbGFzcz1cImFudGQtSW1hZ2UgYW50ZC1JbWFnZS0tdGh1bWIgYW50ZC1JbWFnZUNvbnRyb2wtaW1hZ2VcIj4gPGRpdiBjbGFzcz1cImFudGQtSW1hZ2UtdGh1bWJXcmFwXCI+IDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iXCI+PGltZyBjbGFzcz1cImFudGQtSW1hZ2UtaW1hZ2VcIiBzcmM9XCIvYXBpL2ZpbGVzL2ltYWdlcy8nICsgaXRlbSArICdcIj48L2Rpdj4gPC9kaXY+IDwvZGl2PiA8L2Rpdj4nO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5qb2luKFwiXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnPGRpdiBjbGFzcz1cImFudGQtSW1hZ2VDb250cm9sLWl0ZW0gaXMtdXBsb2FkZWRcIj4gPGRpdiBjbGFzcz1cImFudGQtSW1hZ2UgYW50ZC1JbWFnZS0tdGh1bWIgYW50ZC1JbWFnZUNvbnRyb2wtaW1hZ2VcIj4gPGRpdiBjbGFzcz1cImFudGQtSW1hZ2UtdGh1bWJXcmFwXCI+IDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iXCI+PGltZyBjbGFzcz1cImFudGQtSW1hZ2UtaW1hZ2VcIiBzcmM9XCIvYXBpL2ZpbGVzL2ltYWdlcy8nICsgdmFsdWUgKyAnXCI+PC9kaXY+IDwvZGl2PiA8L2Rpdj4gPC9kaXY+JztcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGlmICghZmllbGQuaXNfbXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICB2YWx1ZSA9IFt2YWx1ZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgICAgIHJlcyA9IFN0ZWVkb3MuYXV0aFJlcXVlc3QoJy9hcGkvdjEvY2ZzX2ZpbGVzX2ZpbGVyZWNvcmQ/ZmlsdGVycz1bW1wiX2lkXCIsXCJpblwiLCAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJ11dJmZpZWxkcz1bXCJfaWRcIixcIm9yaWdpbmFsXCJdJywge1xuICAgICAgICAgICAgYXN5bmM6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVjb3JkcyA9IHJlcy5kYXRhLml0ZW1zO1xuICAgICAgICB9IGVsc2UgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgICAgIHJlY29yZHMgPSBTdGVlZG9zLm9iamVjdEZpbmQoXCJjZnNfZmlsZXNfZmlsZXJlY29yZFwiLCB7XG4gICAgICAgICAgICBmaWx0ZXJzOiBbW1wiX2lkXCIsICdpbicsIHZhbHVlXV0sXG4gICAgICAgICAgICBmaWVsZHM6IFtcIl9pZFwiLCBcIm9yaWdpbmFsXCJdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBfLm1hcChyZWNvcmRzLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgdmFyIGZpbGVOYW1lLCBmaWxlUHJldmlld0h0bWwsIGZpbGVVcmw7XG4gICAgICAgICAgZmlsZU5hbWUgPSBpdGVtLm9yaWdpbmFsLm5hbWU7XG4gICAgICAgICAgZmlsZVVybCA9IFN0ZWVkb3MuYWJzb2x1dGVVcmwoJy9hcGkvZmlsZXMvZmlsZXMvJyArIGl0ZW0uX2lkKTtcbiAgICAgICAgICBmaWxlUHJldmlld0h0bWwgPSAnJztcbiAgICAgICAgICBpZiAoW1wiLnBkZlwiLCBcIi5qcGdcIiwgXCIuanBlZ1wiLCBcIi5wbmdcIiwgXCIuZ2lmXCJdLmluZGV4T2YoZmlsZU5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgtNCkpID4gLTEpIHtcbiAgICAgICAgICAgIGZpbGVQcmV2aWV3SHRtbCA9IFwiJmVuc3A7PGEgaHJlZj0nXCIgKyBmaWxlVXJsICsgXCInIHRhcmdldD0nX2JsYW5rJyBjbGFzcz0nYW50ZC1MaW5rJz48c3BhbiBjbGFzcz0nYW50ZC1UcGxGaWVsZCc+PHNwYW4+6aKE6KeIPC9zcGFuPjwvc3Bhbj48L2E+XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcIjxkaXY+PGEgaHJlZj0nXCIgKyAoZmlsZVVybCArICc/ZG93bmxvYWQ9dHJ1ZScpICsgXCInIHRhcmdldD0nX2JsYW5rJz5cIiArIGZpbGVOYW1lICsgXCI8L2E+IFwiICsgKGZpbGVQcmV2aWV3SHRtbCAhPSBudWxsID8gZmlsZVByZXZpZXdIdG1sIDoge1xuICAgICAgICAgICAgZmlsZVByZXZpZXdIdG1sOiAnJ1xuICAgICAgICAgIH0pICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuam9pbihcIlwiKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2xvb2t1cCc6XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCFmaWVsZC5pc19tdWx0aXNlbGVjdCkge1xuICAgICAgICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICAgICAgdWlTY2hlbWEgPSBDcmVhdG9yLmdldE9iamVjdChmaWVsZC5yZWZlcmVuY2VfdG8pO1xuICAgICAgICAgIG5hbWVGaWVsZCA9ICh1aVNjaGVtYSAhPSBudWxsID8gdWlTY2hlbWEuTkFNRV9GSUVMRF9LRVkgOiB2b2lkIDApIHx8ICduYW1lJztcbiAgICAgICAgICByZXMgPSBTdGVlZG9zLmF1dGhSZXF1ZXN0KCcvYXBpL3YxLycgKyBmaWVsZC5yZWZlcmVuY2VfdG8gKyAnP2ZpbHRlcnM9W1tcIicgKyAoZmllbGQucmVmZXJlbmNlX3RvX2ZpZWxkIHx8ICdfaWQnKSArICdcIixcImluXCIsICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnXV0mZmllbGRzPVtcIl9pZFwiLFwiJyArIG5hbWVGaWVsZCArICdcIl0nLCB7XG4gICAgICAgICAgICBhc3luYzogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZWNvcmRzID0gcmVzLmRhdGEuaXRlbXM7XG4gICAgICAgIH0gZWxzZSBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICAgICAgbmFtZUZpZWxkID0gU3RlZWRvcy5nZXRPYmplY3ROYW1lRmllbGRLZXkoZmllbGQucmVmZXJlbmNlX3RvKTtcbiAgICAgICAgICByZWNvcmRzID0gU3RlZWRvcy5vYmplY3RGaW5kKGZpZWxkLnJlZmVyZW5jZV90bywge1xuICAgICAgICAgICAgZmlsdGVyczogW1tmaWVsZC5yZWZlcmVuY2VfdG9fZmllbGQgfHwgJ19pZCcsICdpbicsIHZhbHVlXV0sXG4gICAgICAgICAgICBmaWVsZHM6IFtcIl9pZFwiLCBuYW1lRmllbGRdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBfLm1hcChyZWNvcmRzLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIFwiPGEgaHJlZj0nXCIgKyAoU3RlZWRvcy5hYnNvbHV0ZVVybCgnL2FwcC8tLycgKyBmaWVsZC5yZWZlcmVuY2VfdG8gKyAnL3ZpZXcvJyArIGl0ZW0uX2lkKSkgKyBcIicgdGFyZ2V0PSdfYmxhbmsnPlwiICsgaXRlbVtuYW1lRmllbGRdICsgXCI8L2E+XCI7XG4gICAgICAgIH0pO1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oXCIgLCBcIik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdodG1sJzpcbiAgICAgIHZhbHVlID0gdmFsdWUgPyBcIjxkaXYgY2xhc3M9XFxcInN0ZWVkb3MtaHRtbFxcXCI+XCIgKyB2YWx1ZSArIFwiPC9kaXY+XCIgOiAnJztcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0TGFiZWwgPSBmdW5jdGlvbihmaWVsZHMsIGNvZGUpIHtcbiAgdmFyIGZpZWxkO1xuICBmaWVsZCA9IGZpZWxkcy5maW5kUHJvcGVydHlCeVBLKFwiY29kZVwiLCBjb2RlKTtcbiAgaWYgKGZpZWxkKSB7XG4gICAgaWYgKGZpZWxkLm5hbWUpIHtcbiAgICAgIHJldHVybiBmaWVsZC5uYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmllbGQuY29kZTtcbiAgICB9XG4gIH1cbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uID0gZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgdmFyIGZvcm0sIGZvcm1fZmllbGRzLCBmb3JtX3ZlcnNpb247XG4gIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuICBmb3JtX3ZlcnNpb24gPSB7fTtcbiAgZm9ybV9maWVsZHMgPSBbXTtcbiAgaWYgKGZvcm0uY3VycmVudC5faWQgPT09IGluc3RhbmNlLmZvcm1fdmVyc2lvbikge1xuICAgIGZvcm1fdmVyc2lvbiA9IGZvcm0uY3VycmVudDtcbiAgfSBlbHNlIHtcbiAgICBmb3JtX3ZlcnNpb24gPSBfLndoZXJlKGZvcm0uaGlzdG9yeXMsIHtcbiAgICAgIF9pZDogaW5zdGFuY2UuZm9ybV92ZXJzaW9uXG4gICAgfSlbMF07XG4gIH1cbiAgZm9ybV92ZXJzaW9uLmZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxkKSB7XG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWN0aW9uJykge1xuICAgICAgZm9ybV9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICBpZiAoZmllbGQuZmllbGRzKSB7XG4gICAgICAgIHJldHVybiBmaWVsZC5maWVsZHMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1fZmllbGRzLnB1c2goZik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgZmllbGRbJ3NmaWVsZHMnXSA9IGZpZWxkWydmaWVsZHMnXTtcbiAgICAgIGRlbGV0ZSBmaWVsZFsnZmllbGRzJ107XG4gICAgICByZXR1cm4gZm9ybV9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmb3JtX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICB9XG4gIH0pO1xuICBmb3JtX3ZlcnNpb24uZmllbGRzID0gZm9ybV9maWVsZHM7XG4gIHJldHVybiBmb3JtX3ZlcnNpb247XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0Rmxvd1ZlcnNpb24gPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICB2YXIgZmxvdywgZmxvd192ZXJzaW9uO1xuICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZShpbnN0YW5jZS5mbG93KTtcbiAgZmxvd192ZXJzaW9uID0ge307XG4gIGlmIChmbG93LmN1cnJlbnQuX2lkID09PSBpbnN0YW5jZS5mbG93X3ZlcnNpb24pIHtcbiAgICBmbG93X3ZlcnNpb24gPSBmbG93LmN1cnJlbnQ7XG4gIH0gZWxzZSB7XG4gICAgZmxvd192ZXJzaW9uID0gXy53aGVyZShmbG93Lmhpc3RvcnlzLCB7XG4gICAgICBfaWQ6IGluc3RhbmNlLmZsb3dfdmVyc2lvblxuICAgIH0pWzBdO1xuICB9XG4gIHJldHVybiBmbG93X3ZlcnNpb247XG59O1xuXG5fZ2V0Vmlld0h0bWwgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciB2aWV3SHRtbDtcbiAgdmlld0h0bWwgPSBBc3NldHMuZ2V0VGV4dChwYXRoKTtcbiAgaWYgKHZpZXdIdG1sKSB7XG4gICAgdmlld0h0bWwgPSB2aWV3SHRtbC5yZXBsYWNlKC88dGVtcGxhdGVbXFx3XFxzXFxcIlxcPSddKz4vaSwgXCJcIikucmVwbGFjZSgvPFxcL3RlbXBsYXRlPi9pLCBcIlwiKTtcbiAgfVxuICByZXR1cm4gdmlld0h0bWw7XG59O1xuXG5fZ2V0TG9jYWxlID0gZnVuY3Rpb24odXNlcikge1xuICB2YXIgbG9jYWxlLCByZWYsIHJlZjE7XG4gIGlmICgodXNlciAhPSBudWxsID8gKHJlZiA9IHVzZXIubG9jYWxlKSAhPSBudWxsID8gcmVmLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiB2b2lkIDAgOiB2b2lkIDApID09PSAnemgtY24nKSB7XG4gICAgbG9jYWxlID0gXCJ6aC1DTlwiO1xuICB9IGVsc2UgaWYgKCh1c2VyICE9IG51bGwgPyAocmVmMSA9IHVzZXIubG9jYWxlKSAhPSBudWxsID8gcmVmMS50b0xvY2FsZUxvd2VyQ2FzZSgpIDogdm9pZCAwIDogdm9pZCAwKSA9PT0gJ2VuLXVzJykge1xuICAgIGxvY2FsZSA9IFwiZW5cIjtcbiAgfSBlbHNlIHtcbiAgICBsb2NhbGUgPSBcInpoLUNOXCI7XG4gIH1cbiAgcmV0dXJuIGxvY2FsZTtcbn07XG5cbl9nZXRSZXF1aXJlZEZpZWxkcyA9IGZ1bmN0aW9uKGZpZWxkcywgcmV2KSB7XG4gIGlmICghcmV2KSB7XG4gICAgcmV2ID0gW107XG4gIH1cbiAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpIHtcbiAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nKSB7XG4gICAgICByZXR1cm4gX2dldFJlcXVpcmVkRmllbGRzKGZpZWxkLmZpZWxkcywgcmV2KTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJsZScpIHtcblxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmllbGQuaXNfcmVxdWlyZWQpIHtcbiAgICAgICAgcmV0dXJuIHJldi5wdXNoKGZpZWxkLmNvZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXY7XG59O1xuXG5fZ2V0U3RhcnRTdGVwRWRpdGFibGVGaWVsZHMgPSBmdW5jdGlvbihmaWVsZHMsIHN0ZXBzKSB7XG4gIHZhciBlZGl0YWJsZUNvZGUsIHN0YXJ0U3RlcDtcbiAgc3RhcnRTdGVwID0gc3RlcHMuZmluZFByb3BlcnR5QnlQSyhcInN0ZXBfdHlwZVwiLCBcInN0YXJ0XCIpO1xuICBlZGl0YWJsZUNvZGUgPSBbXTtcbiAgXy5rZXlzKHN0YXJ0U3RlcC5wZXJtaXNzaW9ucykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoc3RhcnRTdGVwLnBlcm1pc3Npb25zW2tleV0gPT09ICdlZGl0YWJsZScpIHtcbiAgICAgIHJldHVybiBlZGl0YWJsZUNvZGUucHVzaChrZXkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlZGl0YWJsZUNvZGU7XG59O1xuXG5fZ2V0U3RhcnRTdGVwUmVxdWlyZWRGaWVsZHMgPSBmdW5jdGlvbihmaWVsZHMsIHN0ZXBzKSB7XG4gIHZhciBlZGl0YWJsZUNvZGUsIHJlcXVpcmVkRmllbGRzO1xuICByZXF1aXJlZEZpZWxkcyA9IF9nZXRSZXF1aXJlZEZpZWxkcyhmaWVsZHMpO1xuICBlZGl0YWJsZUNvZGUgPSBfZ2V0U3RhcnRTdGVwRWRpdGFibGVGaWVsZHMoZmllbGRzLCBzdGVwcyk7XG4gIHJldHVybiBfLmludGVyc2VjdGlvbihyZXF1aXJlZEZpZWxkcywgZWRpdGFibGVDb2RlKTtcbn07XG5cbl9nZXRUZW1wbGF0ZURhdGEgPSBmdW5jdGlvbih1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGZsb3csIGZvcm0sIGZvcm1fdmVyc2lvbiwgbG9jYWxlLCBzdGVlZG9zRGF0YTtcbiAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgIGZvcm1fdmVyc2lvbiA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKGluc3RhbmNlKTtcbiAgfSBlbHNlIHtcbiAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbihpbnN0YW5jZSk7XG4gIH1cbiAgbG9jYWxlID0gX2dldExvY2FsZSh1c2VyKTtcbiAgc3RlZWRvc0RhdGEgPSB7fTtcbiAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgIHN0ZWVkb3NEYXRhID0gXy5jbG9uZShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCkpO1xuICAgIHN0ZWVkb3NEYXRhLmluc25hbWUgPSBpbnN0YW5jZS5uYW1lO1xuICAgIHN0ZWVkb3NEYXRhLmluc19zdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuICAgIHN0ZWVkb3NEYXRhLmluc19maW5hbF9kZWNpc2lvbiA9IGluc3RhbmNlLmluc19maW5hbF9kZWNpc2lvbjtcbiAgICBzdGVlZG9zRGF0YS5pbnNfY29kZSA9IGluc3RhbmNlLmNvZGU7XG4gICAgc3RlZWRvc0RhdGEuaW5zX2lzX2FyY2hpdmVkID0gaW5zdGFuY2UuaXNfYXJjaGl2ZWQ7XG4gICAgc3RlZWRvc0RhdGEuaW5zX2lzX2RlbGV0ZWQgPSBpbnN0YW5jZS5pbnNfaXNfZGVsZXRlZDtcbiAgICBzdGVlZG9zRGF0YS5hcHBsaWNhbnRfbmFtZSA9IGluc3RhbmNlLmFwcGxpY2FudF9uYW1lO1xuICAgIHN0ZWVkb3NEYXRhLmFwcGxpY2FudENvbnRleHQgPSBpbnN0YW5jZS5hcHBsaWNhbnRfbmFtZTtcbiAgfVxuICBzdGVlZG9zRGF0YS5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICBzdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb24gPSBmb3JtX3ZlcnNpb247XG4gIHN0ZWVkb3NEYXRhLmxvY2FsZSA9IGxvY2FsZTtcbiAgc3RlZWRvc0RhdGEudXRjT2Zmc2V0ID0gdXNlci51dGNPZmZzZXQ7XG4gIHN0ZWVkb3NEYXRhLnNwYWNlID0gaW5zdGFuY2Uuc3BhY2U7XG4gIHN0ZWVkb3NEYXRhLnNlc3Npb25Vc2VySWQgPSB1c2VyLl9pZDtcbiAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmVkaXRhYmxlIDogdm9pZCAwKSB7XG4gICAgICBmb3JtID0gZGIuZm9ybXMuZmluZE9uZSh7XG4gICAgICAgIF9pZDogaW5zdGFuY2UuZm9ybVxuICAgICAgfSk7XG4gICAgICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7XG4gICAgICAgIF9pZDogaW5zdGFuY2UuZmxvd1xuICAgICAgfSk7XG4gICAgICBzdGVlZG9zRGF0YS5zdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyA9IF9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyhmb3JtLmN1cnJlbnQuZmllbGRzLCBmbG93LmN1cnJlbnQuc3RlcHMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RlZWRvc0RhdGE7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uKGRhdGUsIHV0Y09mZnNldCkge1xuICB2YXIgcGFzc2luZztcbiAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgIHBhc3NpbmcgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBwYXNzaW5nID0gdHJ1ZTtcbiAgfVxuICBpZiAoIXV0Y09mZnNldCAmJiB1dGNPZmZzZXQgIT09IDApIHtcbiAgICB1dGNPZmZzZXQgPSA4O1xuICB9XG4gIHJldHVybiBtb21lbnQoZGF0ZSkudXRjT2Zmc2V0KHV0Y09mZnNldCwgcGFzc2luZykuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbVwiKTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXRUaW1lID0gZnVuY3Rpb24oZGF0ZSkge1xuICB2YXIgdXRjT2Zmc2V0O1xuICB1dGNPZmZzZXQgPSAwO1xuICByZXR1cm4gbW9tZW50KGRhdGUpLnV0Y09mZnNldCh1dGNPZmZzZXQpLmZvcm1hdChcIkhIOm1tXCIpO1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgaW5zdGFuY2VDb21waWxlZCwgaW5zdGFuY2VSZW5kZXJGdW5jdGlvbiwgaW5zdGFuY2VUZW1wbGF0ZSwgc3RlZWRvc0RhdGE7XG4gIHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpO1xuICBzdGVlZG9zRGF0YS5hYnNvbHV0ZSA9IGZhbHNlO1xuICBpZiAob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5hYnNvbHV0ZSA6IHZvaWQgMCkge1xuICAgIHN0ZWVkb3NEYXRhLmFic29sdXRlID0gdHJ1ZTtcbiAgfVxuICBpbnN0YW5jZVRlbXBsYXRlID0gVGVtcGxhdGVNYW5hZ2VyLmdldFRlbXBsYXRlKGluc3RhbmNlLCBvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLnRlbXBsYXRlTmFtZSA6IHZvaWQgMCk7XG4gIGluc3RhbmNlVGVtcGxhdGUgPSBpbnN0YW5jZVRlbXBsYXRlLnJlcGxhY2UoL2FmU2VsZWN0VXNlci9nLCBcImFmU2VsZWN0VXNlclJlYWRcIik7XG4gIGlmICghKG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMuZWRpdGFibGUgOiB2b2lkIDApKSB7XG4gICAgaW5zdGFuY2VUZW1wbGF0ZSA9IGluc3RhbmNlVGVtcGxhdGUucmVwbGFjZSgvYWZGb3JtR3JvdXAvZywgXCJhZkZvcm1Hcm91cFJlYWRcIik7XG4gIH1cbiAgaW5zdGFuY2VDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUoaW5zdGFuY2VUZW1wbGF0ZSwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgaW5zdGFuY2VSZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW5zdGFuY2VDb21waWxlZCk7XG4gIFRlbXBsYXRlLmluc3RhbmNlX3JlYWRvbmx5X3ZpZXcgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJpbnN0YW5jZV9yZWFkb25seV92aWV3XCIsIGluc3RhbmNlUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbnN0YW5jZV9yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIFRlbXBsYXRlLmluc3RhbmNlX3JlYWRvbmx5X3ZpZXcuaGVscGVycyhJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzKTtcbiAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmluaXQoc3RlZWRvc0RhdGEpO1xuICBib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldywgc3RlZWRvc0RhdGEpO1xuICByZXR1cm4gXCI8ZGl2IGlkPSdpbnN0YW5jZWZvcm0nID5cXG5cdFwiICsgYm9keSArIFwiXFxuPC9kaXY+XCI7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VHJhY2VzVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgZm9ybSwgc3RlZWRvc0RhdGEsIHRyYWNlQ29tcGlsZWQsIHRyYWNlUmVuZGVyRnVuY3Rpb24sIHRyYWNlc0h0bWw7XG4gIHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpO1xuICBmb3JtID0gZGIuZm9ybXMuZmluZE9uZShpbnN0YW5jZS5mb3JtKTtcbiAgaWYgKGZvcm0uaW5zdGFuY2Vfc3R5bGUgPT09IFwidGFibGVcIiB8fCAob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy50ZW1wbGF0ZU5hbWUgOiB2b2lkIDApID09PSBcInRhYmxlXCIpIHtcbiAgICB0cmFjZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzX3RhYmxlLmh0bWwnKTtcbiAgfSBlbHNlIHtcbiAgICB0cmFjZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzLmh0bWwnKTtcbiAgfVxuICB0cmFjZUNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZSh0cmFjZXNIdG1sLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICB0cmFjZVJlbmRlckZ1bmN0aW9uID0gZXZhbCh0cmFjZUNvbXBpbGVkKTtcbiAgVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcInRyYWNlX3JlYWRvbmx5X3ZpZXdcIiwgdHJhY2VSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLnRyYWNlX3JlYWRvbmx5X3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldy5oZWxwZXJzKFRyYWNlc1RlbXBsYXRlLmhlbHBlcnMpO1xuICBib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldywgaW5zdGFuY2UudHJhY2VzKTtcbiAgcmV0dXJuIGJvZHk7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0QXR0YWNobWVudFZpZXcgPSBmdW5jdGlvbih1c2VyLCBzcGFjZSwgaW5zdGFuY2UpIHtcbiAgdmFyIGF0dGFjaG1lbnRDb21waWxlZCwgYXR0YWNobWVudEh0bWwsIGF0dGFjaG1lbnRSZW5kZXJGdW5jdGlvbiwgYm9keSwgc3RlZWRvc0RhdGE7XG4gIHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpO1xuICBhdHRhY2htZW50SHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL2luc3RhbmNlX2F0dGFjaG1lbnRzLmh0bWwnKTtcbiAgYXR0YWNobWVudENvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShhdHRhY2htZW50SHRtbCwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgYXR0YWNobWVudFJlbmRlckZ1bmN0aW9uID0gZXZhbChhdHRhY2htZW50Q29tcGlsZWQpO1xuICBUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiYXR0YWNobWVudHNfcmVhZG9ubHlfdmlld1wiLCBhdHRhY2htZW50UmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIFRlbXBsYXRlLmF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXcuaGVscGVycyhJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzKTtcbiAgYm9keSA9IEJsYXplLnRvSFRNTFdpdGhEYXRhKFRlbXBsYXRlLmF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXcpO1xuICByZXR1cm4gYm9keTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRSZWxhdGVkSW5zdGFuY2VzVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgcmVsYXRlZEluc3RhbmNlc0NvbXBpbGVkLCByZWxhdGVkSW5zdGFuY2VzSHRtbCwgcmVsYXRlZEluc3RhbmNlc1JlbmRlckZ1bmN0aW9uLCBzdGVlZG9zRGF0YTtcbiAgc3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSk7XG4gIHN0ZWVkb3NEYXRhLmFic29sdXRlID0gZmFsc2U7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmFic29sdXRlIDogdm9pZCAwKSB7XG4gICAgc3RlZWRvc0RhdGEuYWJzb2x1dGUgPSB0cnVlO1xuICB9XG4gIHJlbGF0ZWRJbnN0YW5jZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvcmVsYXRlZF9pbnN0YW5jZXMuaHRtbCcpO1xuICByZWxhdGVkSW5zdGFuY2VzQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHJlbGF0ZWRJbnN0YW5jZXNIdG1sLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICByZWxhdGVkSW5zdGFuY2VzUmVuZGVyRnVuY3Rpb24gPSBldmFsKHJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCk7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJyZWxhdGVkX2luc3RhbmNlc192aWV3XCIsIHJlbGF0ZWRJbnN0YW5jZXNSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgVGVtcGxhdGUucmVsYXRlZF9pbnN0YW5jZXNfdmlldy5oZWxwZXJzKFJlbGF0ZWRJbnN0YW5jZXMuaGVscGVycyk7XG4gIGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5yZWxhdGVkX2luc3RhbmNlc192aWV3LCBzdGVlZG9zRGF0YSk7XG4gIHJldHVybiBib2R5O1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFJlbGF0ZWRSZWNvcmRzVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgcmVsYXRlZFJlY29yZHNDb21waWxlZCwgcmVsYXRlZFJlY29yZHNIdG1sLCByZWxhdGVkUmVjb3Jkc1JlbmRlckZ1bmN0aW9uLCBzdGVlZG9zRGF0YTtcbiAgc3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSk7XG4gIHN0ZWVkb3NEYXRhLmFic29sdXRlID0gZmFsc2U7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmFic29sdXRlIDogdm9pZCAwKSB7XG4gICAgc3RlZWRvc0RhdGEuYWJzb2x1dGUgPSB0cnVlO1xuICB9XG4gIHJlbGF0ZWRSZWNvcmRzSHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL3JlbGF0ZWRfcmVjb3Jkcy5odG1sJyk7XG4gIHJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHJlbGF0ZWRSZWNvcmRzSHRtbCwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgcmVsYXRlZFJlY29yZHNSZW5kZXJGdW5jdGlvbiA9IGV2YWwocmVsYXRlZFJlY29yZHNDb21waWxlZCk7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwicmVsYXRlZF9yZWNvcmRzX3ZpZXdcIiwgcmVsYXRlZFJlY29yZHNSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3LmhlbHBlcnMoUmVsYXRlZFJlY29yZHMuaGVscGVycyk7XG4gIGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5yZWxhdGVkX3JlY29yZHNfdmlldywgc3RlZWRvc0RhdGEpO1xuICByZXR1cm4gYm9keTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRPbkxvYWRTY3JpcHQgPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICB2YXIgZm9ybV9zY3JpcHQsIGZvcm1fdmVyc2lvbjtcbiAgZm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm1WZXJzaW9uKGluc3RhbmNlLmZvcm0sIGluc3RhbmNlLmZvcm1fdmVyc2lvbik7XG4gIGZvcm1fc2NyaXB0ID0gZm9ybV92ZXJzaW9uLmZvcm1fc2NyaXB0O1xuICBpZiAoZm9ybV9zY3JpcHQgJiYgZm9ybV9zY3JpcHQucmVwbGFjZSgvXFxuL2csIFwiXCIpLnJlcGxhY2UoL1xccy9nLCBcIlwiKS5sZW5ndGggPiAwKSB7XG4gICAgZm9ybV9zY3JpcHQgPSBcIkNvcmVGb3JtID0ge307Q29yZUZvcm0uaW5zdGFuY2Vmb3JtID0ge307XCIgKyBmb3JtX3NjcmlwdDtcbiAgICByZXR1cm4gZm9ybV9zY3JpcHQgKz0gXCI7aWYoQ29yZUZvcm0uZm9ybV9PbkxvYWQpe3dpbmRvdy5vbmxvYWQgPSBDb3JlRm9ybS5mb3JtX09uTG9hZCgpO31cIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZm9ybV9zY3JpcHQgPSBcIlwiO1xuICB9XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sID0gZnVuY3Rpb24odXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKSB7XG4gIHZhciBhbGxDc3NMaW5rLCBhdHRhY2htZW50LCBib2R5LCBjcmVhdG9yU2VydmljZSwgY3NzSHJlZiwgZm9ybSwgZm9ybURlc2NyaXB0aW9uLCBmb3JtRGVzY3JpcHRpb25IdG1sLCBodG1sLCBpbnNfcmVjb3JkX2lkcywgaW5zdGFuY2VCb3hTdHlsZSwgaW5zdGFuY2Vfc3R5bGUsIGpxSHJlZiwgbG9jYWxlLCBvbkxvYWRTY3JpcHQsIG9wZW5GaWxlU2NyaXB0LCByZWYsIHJlZjEsIHJlbGF0ZWRfaW5zdGFuY2VzLCByZWxhdGVkX3JlY29yZHMsIHNob3dUcmFjZXNCdG4sIHNob3dUcmFjZXNTY3JpcHQsIHRyYWNlLCB0cmFjZUNoZWNrLCB3aWR0aDtcbiAgYm9keSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZVZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKTtcbiAgb25Mb2FkU2NyaXB0ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldE9uTG9hZFNjcmlwdChpbnN0YW5jZSk7XG4gIGNyZWF0b3JTZXJ2aWNlID0gKHJlZiA9IE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXS53ZWJzZXJ2aWNlcykgIT0gbnVsbCA/IChyZWYxID0gcmVmLmNyZWF0b3IpICE9IG51bGwgPyByZWYxLnVybCA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgaW5zX3JlY29yZF9pZHMgPSBpbnN0YW5jZS5yZWNvcmRfaWRzO1xuICBsb2NhbGUgPSBfZ2V0TG9jYWxlKHVzZXIpO1xuICBvcGVuRmlsZVNjcmlwdCA9IFwiaWYod2luZG93LmlzTm9kZSAmJiBpc05vZGUoKSl7XFxuXHRhdHRhY2hzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcXFwiaW5zX2F0dGFjaF9ocmVmXFxcIik7XFxuXHRmb3IodmFyIGkgPSAwOyBpIDwgYXR0YWNocy5sZW5ndGg7IGkrKyl7XFxuXHRcdGF0dGFjaCA9IGF0dGFjaHNbaV07XFxuXHRcdGF0dGFjaC5hZGRFdmVudExpc3RlbmVyKFxcXCJjbGlja1xcXCIsIGZ1bmN0aW9uKGUpe1xcblx0XHRcdGlmKGlzSW1hZ2UodGhpcy5kYXRhc2V0LnR5cGUpIHx8IGlzSHRtbCh0aGlzLmRhdGFzZXQudHlwZSkpe1xcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xcblx0XHRcdFx0b3BlbldpbmRvdyhcXFwiL2FwaS9maWxlcy9pbnN0YW5jZXMvXFxcIiArIHRoaXMuZGF0YXNldC5pZCk7XFxuXHRcdFx0fWVsc2UgaWYobndfY29yZS5jYW5PcGVuRmlsZSh0aGlzLmRhdGFzZXQubmFtZSkpe1xcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xcblx0XHRcdFx0bndfY29yZS5vcGVuRmlsZSh0aGlzLmhyZWYsIHRoaXMuZGF0YXNldC5uYW1lKVxcblx0XHRcdH1cXG5cdFx0fSk7XFxuXHR9XFxufVxcblxcbnZhciBmbG93ID0gXFxcIlwiICsgaW5zdGFuY2UuZmxvdyArIFwiXFxcIjtcXG52YXIgc3BhY2UgPSBcXFwiXCIgKyBpbnN0YW5jZS5zcGFjZSArIFwiXFxcIjtcXG5cXG5mdW5jdGlvbiBnZXRDb29raWUobmFtZSl7XFxuXHRsZXQgcGF0dGVybiA9IFJlZ0V4cChuYW1lICsgXFxcIj0uW147XSpcXFwiKVxcblx0bGV0IG1hdGNoZWQgPSBkb2N1bWVudC5jb29raWUubWF0Y2gocGF0dGVybilcXG5cdGlmKG1hdGNoZWQpe1xcblx0XHRsZXQgY29va2llID0gbWF0Y2hlZFswXS5zcGxpdCgnPScpXFxuXHRcdHJldHVybiBjb29raWVbMV1cXG5cdH1cXG5cdHJldHVybiAnJ1xcbn1cXG5cXG52YXIgcmVjb3JkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXFxcImlucy1yZWxhdGVkLXJlY29yZHNcXFwiKTtcXG5mb3IodmFyIGkgPSAwOyBpIDwgcmVjb3Jkcy5sZW5ndGg7IGkrKyl7XFxuXHRcdHZhciByZWNvcmQgPSByZWNvcmRzW2ldO1xcblx0XHRyZWNvcmQuYWRkRXZlbnRMaXN0ZW5lcihcXFwiY2xpY2tcXFwiLCBmdW5jdGlvbihlKXtcXG5cdFx0XHR2YXIgY3JlYXRvclNlcnZpY2UgPSBcXFwiXCIgKyBjcmVhdG9yU2VydmljZSArIFwiXFxcIlxcblx0XHRcdHZhciBpbnNfcmVjb3JkX2lkcyA9IFwiICsgKEpTT04uc3RyaW5naWZ5KGluc19yZWNvcmRfaWRzKSkgKyBcIlxcblx0XHRcdGlmKGNyZWF0b3JTZXJ2aWNlICYmIGluc19yZWNvcmRfaWRzICYmIGluc19yZWNvcmRfaWRzLmxlbmd0aCA+IDApe1xcblx0XHRcdFx0dmFyIG9iamNldE5hbWUgPSBpbnNfcmVjb3JkX2lkc1swXS5vXFxuXHRcdFx0XHR2YXIgaWQgPSBpbnNfcmVjb3JkX2lkc1swXS5pZHNbMF1cXG5cdFx0XHRcdHZhciB1b2JqID0ge307XFxuXHRcdFx0XHR1b2JqW1xcXCJYLVVzZXItSWRcXFwiXSA9IGdldENvb2tpZShcXFwiWC1Vc2VyLUlkXFxcIik7XFxuXHRcdFx0XHR1b2JqW1xcXCJYLUF1dGgtVG9rZW5cXFwiXSA9IGdldENvb2tpZShcXFwiWC1BdXRoLVRva2VuXFxcIik7XFxuXHRcdFx0XHRyZWRpcmVjdFVybCA9IGNyZWF0b3JTZXJ2aWNlICsgXFxcImFwcC8tL1xcXCIgKyBvYmpjZXROYW1lICsgXFxcIi92aWV3L1xcXCIgKyBpZCArIFxcXCI/XFxcIiArICQucGFyYW0odW9iaik7XFxuXHRcdFx0XHRvcGVuV2luZG93KHJlZGlyZWN0VXJsKTtcXG5cdFx0XHR9XFxuXHRcdH0pO1xcblx0fVxcblwiO1xuICBpZiAoIVN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuICAgIGlmICgoZm9ybSAhPSBudWxsID8gZm9ybS5pbnN0YW5jZV9zdHlsZSA6IHZvaWQgMCkgPT09ICd0YWJsZScpIHtcbiAgICAgIGluc3RhbmNlX3N0eWxlID0gXCJpbnN0YW5jZS10YWJsZVwiO1xuICAgIH1cbiAgfVxuICBpZiAoKG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMudGVtcGxhdGVOYW1lIDogdm9pZCAwKSA9PT0gJ3RhYmxlJykge1xuICAgIGluc3RhbmNlX3N0eWxlID0gXCJpbnN0YW5jZS10YWJsZVwiO1xuICB9XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmluc3RhbmNlX3N0eWxlIDogdm9pZCAwKSB7XG4gICAgaW5zdGFuY2Vfc3R5bGUgPSBvcHRpb25zLmluc3RhbmNlX3N0eWxlO1xuICB9XG4gIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnNob3dUcmFjZSA9PT0gdHJ1ZSkge1xuICAgIHRyYWNlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFRyYWNlc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlKTtcbiAgfSBlbHNlIHtcbiAgICB0cmFjZSA9IFwiXCI7XG4gIH1cbiAgaW5zdGFuY2VCb3hTdHlsZSA9IFwiXCI7XG4gIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5maW5hbF9kZWNpc2lvbikge1xuICAgIGlmIChpbnN0YW5jZS5maW5hbF9kZWNpc2lvbiA9PT0gXCJhcHByb3ZlZFwiKSB7XG4gICAgICBpbnN0YW5jZUJveFN0eWxlID0gXCJib3gtc3VjY2Vzc1wiO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2UuZmluYWxfZGVjaXNpb24gPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgaW5zdGFuY2VCb3hTdHlsZSA9IFwiYm94LWRhbmdlclwiO1xuICAgIH1cbiAgfVxuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5zaG93QXR0YWNobWVudHMgPT09IHRydWUpIHtcbiAgICBhdHRhY2htZW50ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEF0dGFjaG1lbnRWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSk7XG4gICAgcmVsYXRlZF9pbnN0YW5jZXMgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZEluc3RhbmNlc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKTtcbiAgICByZWxhdGVkX3JlY29yZHMgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZFJlY29yZHNWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgYXR0YWNobWVudCA9IFwiXCI7XG4gICAgcmVsYXRlZF9pbnN0YW5jZXMgPSBcIlwiO1xuICAgIHJlbGF0ZWRfcmVjb3JkcyA9IFwiXCI7XG4gIH1cbiAgd2lkdGggPSBcIjk2MHB4XCI7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLndpZHRoIDogdm9pZCAwKSB7XG4gICAgd2lkdGggPSBcIlwiO1xuICB9XG4gIGNzc0hyZWYgPSBNZXRlb3IuYWJzb2x1dGVVcmwoXCJzdGVlZG9zLWNzc1wiKTtcbiAganFIcmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKFwid2Vic2l0ZS9saWJzL2pxdWVyeS5taW4uanNcIik7XG4gIGFsbENzc0xpbmsgPSBcIjxsaW5rIHJlbD1cXFwic3R5bGVzaGVldFxcXCIgdHlwZT1cXFwidGV4dC9jc3NcXFwiIGNsYXNzPVxcXCJfX21ldGVvci1jc3NfX1xcXCIgaHJlZj1cXFwiXCIgKyBjc3NIcmVmICsgXCJcXFwiPlwiO1xuICB0cmFjZUNoZWNrID0gXCJcIjtcbiAgaWYgKCFfLmlzRW1wdHkodHJhY2UpKSB7XG4gICAgdHJhY2VDaGVjayA9IFwiY2hlY2tlZFwiO1xuICB9XG4gIGlmICgob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy50YWdnZXIgOiB2b2lkIDApID09PSAnZW1haWwnIHx8IChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmVkaXRhYmxlIDogdm9pZCAwKSkge1xuICAgIHNob3dUcmFjZXNCdG4gPSBcIlwiO1xuICB9IGVsc2Uge1xuICAgIHNob3dUcmFjZXNCdG4gPSBcIjxkaXYgY2xhc3M9XFxcIm5hdmlnYXRpb24tYmFyIGJ0bi1ncm91cCBuby1wcmludFxcXCIgc3R5bGU9XFxcIm1pbi13aWR0aDogNjAwcHg7IHotaW5kZXg6IDk5OTsgYm94LXNpemluZzogYm9yZGVyLWJveDtcXFwiPlxcblx0PGRpdiBjbGFzcz1cXFwicHJpbnQtdG9vbFxcXCI+XFxuXHRcdDxsYWJlbCBjbGFzcz1cXFwiY2J4LWxhYmVsXFxcIj48aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiIGNsYXNzPVxcXCJjYngtcHJpbnQgY2J4LXByaW50LWF0dGFjaG1lbnRzXFxcIiBpZD1cXFwiY2J4LXByaW50LWF0dGFjaG1lbnRzXFxcIiBjaGVja2VkPVxcXCJjaGVja2VkXFxcIj48c3Bhbj5cIiArIChUQVBpMThuLl9fKCdpbnN0YW5jZV9hdHRhY2htZW50Jywge30sIGxvY2FsZSkpICsgXCI8L3NwYW4+PC9sYWJlbD5cXG5cdFx0PGxhYmVsIGNsYXNzPVxcXCJjYngtbGFiZWxcXFwiPjxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgY2xhc3M9XFxcImNieC1wcmludCBjYngtcHJpbnQtdHJhY2VzXFxcIiBpZD1cXFwiY2J4LXByaW50LXRyYWNlc1xcXCIgY2hlY2tlZD1cXFwiXCIgKyB0cmFjZUNoZWNrICsgXCJcXFwiPjxzcGFuPlwiICsgKFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmFsX2hpc3RvcnknLCB7fSwgbG9jYWxlKSkgKyBcIjwvc3Bhbj48L2xhYmVsPlxcblx0PC9kaXY+XFxuPC9kaXY+XCI7XG4gIH1cbiAgc2hvd1RyYWNlc1NjcmlwdCA9IFwiJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpe1xcblx0dmFyIGIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2J4LXByaW50LXRyYWNlcycpO1xcblx0dmFyIHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnN0YW5jZS10cmFjZXMnKVswXTtcXG5cdGlmIChiICYmIGIuY2hlY2tlZCAmJiB0KXtcXG5cdFx0dC5zdHlsZSA9ICdkaXNwbGF5OiBibG9jazsnXFxuXHR9IGVsc2UgaWYodCl7XFxuXHRcdHQuc3R5bGUgPSAnZGlzcGxheTogbm9uZTsnXFxuXHR9XFxuXHRpZihiKXtcXG5cdFx0Yi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbihlKXtcXG5cdFx0XHRpZiAoZS50YXJnZXQuY2hlY2tlZCl7XFxuXHRcdFx0XHR0LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcXG5cdFx0XHR9IGVsc2Uge1xcblx0XHRcdFx0dC5zdHlsZSA9ICdkaXNwbGF5OiBub25lOydcXG5cdFx0XHR9XFxuXHRcdH0pO1xcblx0fVxcblxcblxcblx0dmFyIGF0dGFjaG1lbnRzQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2J4LXByaW50LWF0dGFjaG1lbnRzJyk7XFxuXHR2YXIgYXR0YWNobWVudHNWaWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0YWNobWVudHMtc2VjdGlvbicpWzBdO1xcblx0aWYgKGF0dGFjaG1lbnRzQ2hlY2tib3ggJiYgYXR0YWNobWVudHNDaGVja2JveC5jaGVja2VkICYmIGF0dGFjaG1lbnRzVmlldyl7XFxuXHRcdGF0dGFjaG1lbnRzVmlldy5zdHlsZSA9ICdkaXNwbGF5OiBibG9jazsnXFxuXHR9IGVsc2UgaWYoYXR0YWNobWVudHNWaWV3KXtcXG5cdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xcblx0fVxcblx0aWYoYXR0YWNobWVudHNDaGVja2JveCl7XFxuXHRcdGF0dGFjaG1lbnRzQ2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSl7XFxuXHRcdFx0aWYgKGUudGFyZ2V0LmNoZWNrZWQpe1xcblx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcXG5cdFx0XHR9IGVsc2Uge1xcblx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xcblx0XHRcdH1cXG5cdFx0fSk7XFxuXHR9XFxufSk7XFxuXCI7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLnN0eWxlcyA6IHZvaWQgMCkge1xuICAgIGFsbENzc0xpbmsgPSBcIlwiO1xuICB9XG4gIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtcbiAgICBfaWQ6IGluc3RhbmNlLmZvcm1cbiAgfSk7XG4gIGZvcm1EZXNjcmlwdGlvbkh0bWwgPSBcIlwiO1xuICBpZiAoZm9ybSkge1xuICAgIGZvcm1EZXNjcmlwdGlvbiA9IGZvcm0uZGVzY3JpcHRpb247XG4gICAgaWYgKGZvcm1EZXNjcmlwdGlvbikge1xuICAgICAgZm9ybURlc2NyaXB0aW9uID0gZm9ybURlc2NyaXB0aW9uLnJlcGxhY2UoL1xcbi9nLCBcIjxici8+XCIpO1xuICAgICAgZm9ybURlc2NyaXB0aW9uSHRtbCA9IFwiPGRpdiBjbGFzcz1cXFwiYm94LWhlYWRlciAgd2l0aC1ib3JkZXIgaW5zdGFuY2UtaGVhZGVyXFxcIj5cXG5cdDxkaXY+XFxuXHRcdFwiICsgZm9ybURlc2NyaXB0aW9uICsgXCJcXG5cdDwvZGl2PlxcbjwvZGl2PlwiO1xuICAgIH1cbiAgfVxuICBodG1sID0gXCI8IURPQ1RZUEUgaHRtbD5cXG48aHRtbD5cXG5cdDxoZWFkPlxcblx0XHQ8bWV0YSBodHRwLWVxdWl2PVxcXCJDb250ZW50LVR5cGVcXFwiIGNvbnRlbnQ9XFxcInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFxcXCIvPlxcblx0XHRcIiArIGFsbENzc0xpbmsgKyBcIlxcblx0XHQ8c2NyaXB0IHNyYz1cXFwiXCIgKyBqcUhyZWYgKyBcIlxcXCIgdHlwZT1cXFwidGV4dC9qYXZhc2NyaXB0XFxcIj48L3NjcmlwdD5cXG5cdFx0PHNjcmlwdCBzcmM9XFxcIi9qcy9ud19jb3JlLmpzXFxcIiB0eXBlPVxcXCJ0ZXh0L2phdmFzY3JpcHRcXFwiPjwvc2NyaXB0Plxcblx0XHRcIiArIChvcHRpb25zLnBsdWdpbnMgfHwgXCJcIikgKyBcIlxcblxcblx0XHQ8c3R5bGU+XFxuXHRcdFx0LnN0ZWVkb3N7XFxuXHRcdFx0XHR3aWR0aDogXCIgKyB3aWR0aCArIFwiO1xcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IGF1dG87XFxuXHRcdFx0XHRtYXJnaW4tcmlnaHQ6IGF1dG87XFxuXHRcdFx0fVxcblxcblx0XHRcdC5pbnN0YW5jZS12aWV3IC5pbnN0YW5jZS1uYW1le1xcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnRcXG5cdFx0XHR9XFxuXHRcdFx0LmJveC10b29sc3tcXG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XFxuXHRcdFx0fVxcblx0XHRcdC5ib3guY29sbGFwc2VkLWJveCAuYm94LWJvZHksLmJveC5jb2xsYXBzZWQtYm94IC5ib3gtZm9vdGVyIHtcXG5cdFx0XHQgIGRpc3BsYXk6IGJsb2NrO1xcblx0XHRcdH1cXG5cXG5cdFx0XHRib2R5e1xcblx0XHRcdFx0YmFja2dyb3VuZDogYXp1cmUgIWltcG9ydGFudDtcXG5cdFx0XHR9XFxuXFxuXHRcdFx0Lmluc3RhbmNlLXZpZXcgLmluc3RhbmNlLXRyYWNlc3tcXG5cdFx0XHRcdHBhZGRpbmctbGVmdDogMTVweDtcXG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDE1cHg7XFxuXHRcdFx0fVxcblxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtIHtcXG5cdFx0XHRib3JkZXItcmFkaXVzOiB2YXIoLS1JbWFnZUNvbnRyb2wtYWRkQnRuLWJvcmRlclJhZGl1cyk7XFxuXHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcXG5cdFx0XHRwYWRkaW5nOiB2YXIoLS1nYXAteHMpO1xcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG5cdFx0XHRtYXJnaW4tcmlnaHQ6IHZhcigtLWdhcC1iYXNlKTtcXG5cdFx0XHRtYXJnaW4tYm90dG9tOiB2YXIoLS1nYXAtYmFzZSk7XFxuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblx0XHRcdHdpZHRoOiA3LjVyZW07XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtLmlzLWludmFsaWQge1xcblx0XHRcdHBhZGRpbmc6IDA7XFxuXHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1GaWxlQ29udHJvbC1kYW5nZXItY29sb3IpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbSBzdmcuaWNvbi1yZWZyZXNoIHtcXG5cdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZmlsZW5hbWUge1xcblx0XHRcdGRpc3BsYXk6IGlubGluZS1mbGV4O1xcblx0XHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuXHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cdFx0XHRjb2xvcjogdmFyKC0tRmlsZUNvbnRyb2wtZGFuZ2VyLWNvbG9yKTtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpbGVuYW1lID4gc3ZnLmljb24taW1hZ2Uge1xcblx0XHRcdG1hcmdpbi1ib3R0b206IDhweDtcXG5cdFx0XHR3aWR0aDogMjRweDtcXG5cdFx0XHRoZWlnaHQ6IDI0cHg7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1maWxlbmFtZSA+IHNwYW4ge1xcblx0XHRcdG1heC13aWR0aDogMTAwJTtcXG5cdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xcblx0XHRcdHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuXHRcdFx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pbWFnZSB7XFxuXHRcdFx0d2lkdGg6IDEwMCU7XFxuXHRcdFx0aGVpZ2h0OiAxMDAlO1xcblx0XHRcdHBhZGRpbmc6IDA7XFxuXHRcdFx0Ym9yZGVyOiBub25lO1xcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcXG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xcblx0XHRcdGNvbG9yOiAjOTk5O1xcblx0XHRcdHRvcDogNXB4O1xcblx0XHRcdHJpZ2h0OiA1cHg7XFxuXHRcdFx0bGluZS1oZWlnaHQ6IDE7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIgPiBzdmcge1xcblx0XHRcdHRvcDogMDtcXG5cdFx0XHR3aWR0aDogMTBweDtcXG5cdFx0XHRoZWlnaHQ6IDEwcHg7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtSW5mbyB7XFxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XFxuXHRcdFx0d2lkdGg6IDExMHB4O1xcblx0XHRcdGhlaWdodDogMTEwcHg7XFxuXHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cdFx0XHRhbGlnbi1jb250ZW50OiBjZW50ZXI7XFxuXHRcdFx0ZmxleC13cmFwOiB3cmFwO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUluZm8gPiBwIHtcXG5cdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XFxuXHRcdFx0Zm9udC1zaXplOiAxMnB4O1xcblx0XHRcdG1hcmdpbi1ib3R0b206IDVweDtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXByb2dyZXNzIHtcXG5cdFx0XHR3aWR0aDogNzBweDtcXG5cdFx0XHRoZWlnaHQ6IDVweDtcXG5cdFx0XHRiYWNrZ3JvdW5kOiAjZWJlYmViO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtcHJvZ3Jlc3NWYWx1ZSB7XFxuXHRcdFx0aGVpZ2h0OiA1cHg7XFxuXHRcdFx0Ym9yZGVyLXJhZGl1czogdmFyKC0tSW1hZ2VDb250cm9sLXByb2dyZXNzLWJvcmRlclJhZGl1cyk7XFxuXHRcdFx0ZGlzcGxheTogYmxvY2s7XFxuXHRcdFx0YmFja2dyb3VuZDogdmFyKC0taW5mbyk7XFxuXHRcdFx0bWluLXdpZHRoOiAxMCU7XFxuXHRcdFx0dHJhbnNpdGlvbjogZWFzZS1vdXQgd2lkdGggdmFyKC0tYW5pbWF0aW9uLWR1cmF0aW9uKTtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWl0ZW0uaXMtaW52YWxpZCAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcXG5cdFx0XHRkaXNwbGF5OiBub25lO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbS5pcy1pbnZhbGlkOmhvdmVyIC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIge1xcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZXJyb3JNc2cge1xcblx0XHRcdGNvbG9yOiB2YXIoLS1kYW5nZXIpO1xcblx0XHRcdG1hcmdpbjogNXB4IDAgMDtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXVwbG9hZEJ0biB7XFxuXHRcdFx0bWFyZ2luLXRvcDogNXB4O1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcHBlcldyYXBwZXIge1xcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWNyb3BwZXJXcmFwcGVyIGltZyB7XFxuXHRcdFx0bWF4LXdpZHRoOiAxMDAlO1xcblx0XHRcdG1heC1oZWlnaHQ6IDQwMHB4O1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciB7XFxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XFxuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xcblx0XHRcdHJpZ2h0OiAwO1xcblx0XHRcdGJvdHRvbTogMDtcXG5cdFx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcblx0XHRcdGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG5cdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xcblx0XHRcdGJvcmRlci1yYWRpdXM6IDRweDtcXG5cdFx0XHRtYXJnaW46IDAuNXJlbTtcXG5cdFx0XHRib3gtc2hhZG93OiAwIDAgNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciA+IGEge1xcblx0XHRcdGNvbG9yOiB2YXIoLS1Gb3JtLWl0ZW0tZm9udENvbG9yKTtcXG5cdFx0XHRwYWRkaW5nOiAycHggNXB4O1xcblx0XHRcdGN1cnNvcjogcG9pbnRlcjtcXG5cdFx0XHRmb250LXNpemU6IDE4cHg7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1jcm9wZXJUb29sYmFyID4gYTpob3ZlciB7XFxuXHRcdFx0Y29sb3I6IHZhcigtLWxpbmstY29sb3IpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtYWNjZXB0VGlwIHtcXG5cdFx0XHRoZWlnaHQ6IDEyMHB4O1xcblx0XHRcdGNvbG9yOiAjOTk5O1xcblx0XHRcdGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1ib3JkZXJDb2xvcik7XFxuXHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1pbmZvKTtcXG5cdFx0XHRiYWNrZ3JvdW5kOiAjZjNmOWZlO1xcblx0XHRcdGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclJhZGl1cyk7XFxuXHRcdFx0bGluZS1oZWlnaHQ6IDEyMHB4O1xcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpeGVkLXNpemUge1xcblx0XHRcdHdpZHRoOiAxMDAlO1xcblx0XHRcdGhlaWdodDogMTAwJTtcXG5cdFx0XHRwYWRkaW5nOiAwO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZml4ZWQtc2l6ZSAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbU92ZXJsYXkge1xcblx0XHRcdHdpZHRoOiAxMDAlO1xcblx0XHRcdGhlaWdodDogMTAwJTtcXG5cdFx0XHR9XFxuXFxuXHRcdFx0LmFudGQtSW1hZ2VzIHtcXG5cdFx0XHRcdGRpc3BsYXk6IGZsZXg7XFxuXHRcdFx0XHRmbGV4LXdyYXA6IHdyYXA7XFxuXHRcdFx0XHRtYXJnaW46IGNhbGModmFyKC0tZ2FwLXhzKSAqIC0xKTtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlcy1pdGVtIHtcXG5cdFx0XHRcdGRpc3BsYXk6IGZsZXg7XFxuXHRcdFx0XHRtYXJnaW46IHZhcigtLWdhcC14cyk7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZSB7XFxuXHRcdFx0XHRib3JkZXI6IHZhcigtLWJvcmRlcldpZHRoKSBzb2xpZCB2YXIoLS1ib3JkZXJDb2xvcik7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS0tdGh1bWIge1xcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xcblx0XHRcdFx0cGFkZGluZzogdmFyKC0tZ2FwLXhzKTtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iV3JhcCB7XFxuXHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS1pbWFnZSB7XFxuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLWltYWdlLS1sb2FkaW5nIHtcXG5cdFx0XHRcdHZpc2liaWxpdHk6IGhpZGRlbjtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLS1vcmlnaW5hbCAuYW50ZC1JbWFnZS1pbWFnZSB7XFxuXHRcdFx0XHRtYXgtd2lkdGg6IDEwMCU7XFxuXHRcdFx0XHRtYXgtaGVpZ2h0OiAxMDAlO1xcblx0XHRcdFx0d2lkdGg6IGF1dG87XFxuXHRcdFx0XHRtYXJnaW46IGF1dG87XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYiB7XFxuXHRcdFx0XHR3aWR0aDogNi44NzVyZW07XFxuXHRcdFx0XHRoZWlnaHQ6IDYuODc1cmVtO1xcblx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblx0XHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iID4gaW1nIHtcXG5cdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cdFx0XHRcdGxlZnQ6IDUwJTtcXG5cdFx0XHRcdHRvcDogNTAlO1xcblx0XHRcdFx0bWF4LWhlaWdodDogMTAwJTtcXG5cdFx0XHRcdHdpZHRoOiBhdXRvO1xcblx0XHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS1pbmZvIHtcXG5cdFx0XHRcdHBhZGRpbmc6IDVweCAxMHB4O1xcblx0XHRcdFx0fVxcblx0XHRcdFx0LmFudGQtSW1hZ2UtLXRodW1iIC5hbnRkLUltYWdlLWluZm8ge1xcblx0XHRcdFx0d2lkdGg6IDYuODc1cmVtO1xcblx0XHRcdFx0cGFkZGluZzogMDtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS00LTMge1xcblx0XHRcdFx0aGVpZ2h0OiA1LjE1NjI1cmVtO1xcblx0XHRcdFx0fVxcblx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLTE2LTkge1xcblx0XHRcdFx0aGVpZ2h0OiAzLjg2NzE4NzVyZW07XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tZml4ZWQtc2l6ZSB7XFxuXHRcdFx0XHRtaW4td2lkdGg6IDYuODc1cmVtO1xcblx0XHRcdFx0bWluLWhlaWdodDogNi44NzVyZW07XFxuXHRcdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHRcdHBhZGRpbmc6IDA7XFxuXHRcdFx0XHRoZWlnaHQ6IDEwMCU7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tZml4ZWQtc2l6ZSAuYW50ZC1JbWFnZS10aHVtYiB7XFxuXHRcdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS1maXhlZC1zaXplIC5hbnRkLUltYWdlLXRodW1iID4gaW1nIHtcXG5cdFx0XHRcdHdpZHRoOiBhdXRvO1xcblx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xcblx0XHRcdFx0fVxcblx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLXctZnVsbCA+IGltZyB7XFxuXHRcdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHRcdGhlaWdodDogYXV0bztcXG5cdFx0XHRcdH1cXG5cXG5cdFx0XHRcIiArICgob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5zdHlsZXMgOiB2b2lkIDApIHx8IFwiXCIpICsgXCJcXG5cXG5cdFx0XHRcIiArICgob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5hZGRfc3R5bGVzIDogdm9pZCAwKSB8fCBcIlwiKSArIFwiXFxuXHRcdDwvc3R5bGU+XFxuXHQ8L2hlYWQ+XFxuXHQ8Ym9keT5cXG5cdFx0PGRpdiBjbGFzcz1cXFwic3RlZWRvcyB3b3JrZmxvdyBpbnN0YW5jZS1wcmludFxcXCI+XFxuXHRcdFx0PGRpdiBjbGFzcz1cXFwic2tpbi1ncmVlbiBza2luLWFkbWluLWx0ZVxcXCI+XFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJ3cmFwcGVyXFxcIj5cXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiY29udGVudC13cmFwcGVyXFxcIj5cXG5cdFx0XHRcdFx0XHRcIiArIHNob3dUcmFjZXNCdG4gKyBcIlxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImluc3RhbmNlLXByaW50XFxcIj5cXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImluc3RhbmNlIFwiICsgaW5zdGFuY2Vfc3R5bGUgKyBcIlxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdDxmb3JtIG5hbWU9XFxcImluc3RhbmNlRm9ybVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiaW5zdGFuY2UtZm9ybSBib3ggXCIgKyBpbnN0YW5jZUJveFN0eWxlICsgXCJcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCIgKyBmb3JtRGVzY3JpcHRpb25IdG1sICsgXCJcXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImJveC1ib2R5XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiY29sLW1kLTEyXFxcIiBzdHlsZT1cXFwiYm94LXNpemluZzogYm9yZGVyLWJveDtcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2F0dGFjaG1lbnRzLXNlY3Rpb24nPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIgKyBhdHRhY2htZW50ICsgXCJcXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiICsgcmVsYXRlZF9pbnN0YW5jZXMgKyBcIlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIgKyByZWxhdGVkX3JlY29yZHMgKyBcIlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiICsgYm9keSArIFwiXFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdDwvZm9ybT5cXG5cdFx0XHRcdFx0XHRcdFx0XCIgKyB0cmFjZSArIFwiXFxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHQ8L2Rpdj5cXG5cdFx0PC9kaXY+XFxuXHQ8L2JvZHk+XFxuXHQ8c2NyaXB0PlwiICsgb3BlbkZpbGVTY3JpcHQgKyBcIjtcIiArIG9uTG9hZFNjcmlwdCArIFwiO1wiICsgc2hvd1RyYWNlc1NjcmlwdCArIFwiPC9zY3JpcHQ+XFxuPC9odG1sPlwiO1xuICByZXR1cm4gaHRtbDtcbn07XG4iLCJUZW1wbGF0ZU1hbmFnZXIgPSB7fTtcblxuZm9ybUlkID0gJ2luc3RhbmNlZm9ybSc7XG5cblxuVGVtcGxhdGVNYW5hZ2VyLmluc3RhbmNlX3RpdGxlID0gKCktPlxuXHRwYWdlVGl0bGUgPSBcIlwiXCJcblx0XHR7e2luc3RhbmNlLm5hbWV9fVxuXHRcIlwiXCJcblxuXHRwYWdlVGl0bGVUckNsYXNzID0gXCJpbnN0YW5jZS1uYW1lXCJcblxuXHRpZiBDb3JlRm9ybT8ucGFnZVRpdGxlRmllbGROYW1lXG5cdFx0cGFnZVRpdGxlID0gXCJcIlwiXG5cdFx0XHRcdHt7PiBhZkZvcm1Hcm91cCBuYW1lPVwiI3tDb3JlRm9ybS5wYWdlVGl0bGVGaWVsZE5hbWV9XCIgbGFiZWw9ZmFsc2V9fVxuXHRcdFwiXCJcIlxuXHRcdHBhZ2VUaXRsZVRyQ2xhc3MgPSBcIlwiXG5cblx0aWYgQ29yZUZvcm0/LnBhZ2VUaXRsZVxuXHRcdHBhZ2VUaXRsZSA9IFwiXCJcIlxuXHRcdFx0I3tDb3JlRm9ybS5wYWdlVGl0bGV9XG5cdFx0XCJcIlwiXG5cdFx0cGFnZVRpdGxlVHJDbGFzcyA9IFwiXCJcblxuXHR2YWwgPVxuXHRcdHBhZ2VUaXRsZTogcGFnZVRpdGxlXG5cdFx0cGFnZVRpdGxlVHJDbGFzczogcGFnZVRpdGxlVHJDbGFzc1xuXG5cdHJldHVybiB2YWxcblxuVGVtcGxhdGVNYW5hZ2VyLmhhbmRsZVRhYmxlVGVtcGxhdGUgPSAoaW5zdGFuY2UsIF9leHBvcnQpIC0+XG5cblx0dGVtcGxhdGUgPSBcIlwiXCJcblx0PGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlxuXHRcdDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2UtdGl0bGUgZm9ybS10YWJsZSBuby1ib3JkZXIgdGV4dC1hbGlnbi1jZW50ZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO2Rpc3BsYXk6IGlubGluZS10YWJsZTtcIj5cblx0XHRcdDx0ciBjbGFzcz1cIiN7dGhpcy5pbnN0YW5jZV90aXRsZSgpLnBhZ2VUaXRsZVRyQ2xhc3N9XCI+XG5cdFx0XHRcdDx0ZCBjbGFzcz1cImluc3RhbmNlLXRhYmxlLW5hbWUtdGQgcGFnZS10aXRsZVwiPlxuXHRcdFx0XHRcdCN7dGhpcy5pbnN0YW5jZV90aXRsZSgpLnBhZ2VUaXRsZX1cblx0XHRcdFx0PC90ZD5cblx0XHRcdDwvdHI+XG5cblx0XHQ8L3RhYmxlPlxuXHRcdDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2UtYm9keSBmb3JtLXRhYmxlXCI+XG5cdFx0XHRcdDx0ciBzdHlsZT1cImhlaWdodDowcHhcIj5cblx0XHRcdFx0XHQ8dGggc3R5bGU9J3dpZHRoOiAxNiUnPjwvdGg+XG5cdFx0XHRcdFx0PHRoPjwvdGg+XG5cdFx0XHRcdFx0PHRoIHN0eWxlPSd3aWR0aDogMTYlJz48L3RoPlxuXHRcdFx0XHRcdDx0aD48L3RoPlxuXHRcdFx0XHQ8L3RyPlxuXHRcIlwiXCI7XG5cblx0dGFibGVfZmllbGRzID0gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy50YWJsZV9maWVsZHMoaW5zdGFuY2UpXG5cblx0dGFibGVfZmllbGRzICYmIHRhYmxlX2ZpZWxkcy5mb3JFYWNoICh0YWJsZV9maWVsZCktPlxuXG5cdFx0cmVxdWlyZWQgPSBcIlwiXG5cdFx0aWYgIUNvcmVGb3JtPy5wYWdlVGl0bGVGaWVsZE5hbWUgfHwgQ29yZUZvcm0/LnBhZ2VUaXRsZUZpZWxkTmFtZSAhPSB0YWJsZV9maWVsZC5jb2RlXG5cdFx0XHRpZiB0YWJsZV9maWVsZC5pc19yZXF1aXJlZFxuXHRcdFx0XHRyZXF1aXJlZCA9IFwiaXMtcmVxdWlyZWRcIlxuXG5cdFx0XHRpZiBfZXhwb3J0XG5cdFx0XHRcdHJlcXVpcmVkID0gXCJcIjtcblxuXHRcdFx0cHVyZUNvZGUgPSBTdGVlZG9zLnJlbW92ZVNwZWNpYWxDaGFyYWN0ZXIodGFibGVfZmllbGQuY29kZSk7XG5cblx0XHRcdGlmIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGQodGFibGVfZmllbGQpXG5cdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX3N0YXJ0XG5cdFx0XHRcdHRlbXBsYXRlICs9IFwiXCJcIlxuXHRcdFx0XHRcdDx0ZCBjbGFzcz1cInRkLXRpdGxlICN7cmVxdWlyZWR9XCI+XG5cdFx0XHRcdFx0XHR7e2FmRmllbGRMYWJlbFRleHQgbmFtZT1cIiN7dGFibGVfZmllbGQuY29kZX1cIn19XG5cdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC1maWVsZCBvcGluaW9uLWZpZWxkIG9waW5pb24tZmllbGQtI3twdXJlQ29kZX0gYXV0b21hdGljXCIgY29sc3BhbiA9IFwiI3t0YWJsZV9maWVsZC50ZF9jb2xzcGFufVwiPlxuXHRcdFx0XHRcdFx0e3s+IGluc3RhbmNlU2lnblRleHQgbmFtZT1cIiN7dGFibGVfZmllbGQuY29kZX1cIn19XG5cdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XCJcIlwiXG5cdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZFxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRpZiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluY2x1ZGVzKHRhYmxlX2ZpZWxkLnR5cGUsICdzZWN0aW9uLHRhYmxlJylcblx0XHRcdFx0XHR0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9zdGFydFxuXHRcdFx0XHRcdHRlbXBsYXRlICs9IFwiXCJcIlxuXHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwidGQtY2hpbGRmaWVsZCB0ZC1jaGlsZGZpZWxkLSN7cHVyZUNvZGV9XCIgY29sc3BhbiA9IFwiI3t0YWJsZV9maWVsZC50ZF9jb2xzcGFufVwiPlxuXHRcdFx0XHRcdFx0ICAge3s+IGFmRm9ybUdyb3VwIG5hbWU9XCIje3RhYmxlX2ZpZWxkLmNvZGV9XCIgbGFiZWw9ZmFsc2V9fVxuXHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcIlwiXCJcblx0XHRcdFx0XHR0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9lbmRcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX3N0YXJ0XG5cblx0XHRcdFx0XHRpZiBfZXhwb3J0XG5cdFx0XHRcdFx0XHR0aXRsZV9wZXJtaXNzaW9uID0gXCJcIlxuXHRcdFx0XHRcdFx0ZmllbGRfcGVybWlzc2lvbiA9IFwiXCJcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR0aXRsZV9wZXJtaXNzaW9uID0gXCJ0aXRsZS1cIiArIHRhYmxlX2ZpZWxkLnBlcm1pc3Npb25cblx0XHRcdFx0XHRcdGZpZWxkX3Blcm1pc3Npb24gPSBcImZpZWxkLVwiICsgdGFibGVfZmllbGQucGVybWlzc2lvblxuXG5cdFx0XHRcdFx0dGVtcGxhdGUgKz0gXCJcIlwiXG5cdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC10aXRsZSB0ZC10aXRsZS0je3B1cmVDb2RlfSAje3RpdGxlX3Blcm1pc3Npb259ICN7cmVxdWlyZWR9XCI+XG5cdFx0XHRcdFx0XHRcdHt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPVwiI3t0YWJsZV9maWVsZC5jb2RlfVwifX1cblx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC1maWVsZCB0ZC1maWVsZC0je3B1cmVDb2RlfSAje2ZpZWxkX3Blcm1pc3Npb259XCIgY29sc3BhbiA9IFwiI3t0YWJsZV9maWVsZC50ZF9jb2xzcGFufVwiPlxuXHRcdFx0XHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT1cIiN7dGFibGVfZmllbGQuY29kZX1cIiBsYWJlbD1mYWxzZX19XG5cdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZFxuXG5cdHRlbXBsYXRlICs9IFwiXCJcIlxuXHRcdDwvdGFibGU+XG5cblx0XHQ8dGFibGUgY2xhc3M9XCJ0YWJsZS1wYWdlLWZvb3RlciBmb3JtLXRhYmxlIG5vLWJvcmRlclwiPlxuXHRcdFx0PHRyIGNsYXNzPVwiYXBwbGljYW50LXdyYXBwZXJcIj5cblx0XHRcdFx0PHRkIGNsYXNzPVwibm93cmFwXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5saW5lLWxlZnQnPlxuXHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7X3QgXCJpbnN0YW5jZV9pbml0aWF0b3JcIn1977yaPC9sYWJlbD5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS10YWJsZS13cmFwcGVyLXRkIGlubGluZS1sZWZ0Jz5cblx0XHRcdFx0XHRcdHt7PlRlbXBsYXRlLmR5bmFtaWMgIHRlbXBsYXRlPVwiYWZTZWxlY3RVc2VyXCIgZGF0YT1hcHBsaWNhbnRDb250ZXh0fX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC90ZD5cblx0XHRcdFx0PHRkIGNsYXNzPVwibm93cmFwXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0ncHVsbC1sZWZ0Jz5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2lubGluZS1sZWZ0Jz5cblx0XHRcdFx0XHRcdFx0PGxhYmVsPnt7X3QgXCJpbnN0YW5jZV9zdWJtaXRfZGF0ZVwifX3vvJo8L2xhYmVsPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbmxpbmUtcmlnaHQnPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdHt7Zm9ybWF0RGF0ZSBpbnN0YW5jZS5zdWJtaXRfZGF0ZSAne1wiZm9ybWF0XCI6XCJZWVlZLU1NLUREXCJ9J319XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvdGQ+XG5cdFx0XHQ8L3RyPlxuXHRcdDwvdGFibGU+XG5cdDwvZGl2PlxuXHRcIlwiXCJcblx0cmV0dXJuIHRlbXBsYXRlXG5cbiPmraTlpITmqKHmnb/lhaznlKjkuI7vvJppbnN0YW5jZSDnvJbovpHjgIHmn6XnnIvjgIHmiZPljbDjgIHovazlj5Hml7bnlJ/miJDpmYTku7bjgIHlj5HpgIHpgq7ku7Zib2R56YOo5YiGKHRhYmxlIOaooeadvylcbiPlpoLmnpzmnInkv67mlLnvvIzor7fmtYvor5Xnoa7orqTlhbbku5blip/og73mmK/lkKbmraPluLjjgIJcblRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUgPVxuXHRkZWZhdWx0OiAoaW5zdGFuY2UpLT5cblxuXHRcdHRlbXBsYXRlID0gXCJcIlwiXG5cdFx0XHQ8ZGl2IGNsYXNzPVwid2l0aC1ib3JkZXIgY29sLW1kLTEyXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnN0YW5jZS1uYW1lXCI+XG5cdFx0XHRcdFx0PGgzIGNsYXNzPVwiYm94LXRpdGxlXCI+I3tUZW1wbGF0ZU1hbmFnZXIuaW5zdGFuY2VfdGl0bGUoKS5wYWdlVGl0bGV9PC9oMz5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImhlbHAtYmxvY2tcIj48L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cImhlbHAtYmxvY2tcIj48L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHt7I2VhY2ggc3RlZWRvc19mb3JtLmZpZWxkc319XG5cdFx0XHRcdHt7I2lmIGlzT3BpbmlvbkZpZWxkIHRoaXN9fVxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ7eyNpZiB0aGlzLmlzX3dpZGV9fWNvbC1tZC0xMnt7ZWxzZX19Y29sLW1kLTZ7ey9pZn19IGZpZWxkLXt7dGhpcy5jb2RlfX1cIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGF1dG9tYXRpYyBvcGluaW9uLWZpZWxkLXt7dGhpcy5jb2RlfX1cIj5cblx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPXRoaXMuY29kZX19PC9sYWJlbD5cblxuXHRcdFx0XHRcdFx0XHR7ez4gaW5zdGFuY2VTaWduVGV4dCBuYW1lPXRoaXMuY29kZX19XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHR7eyNpZiBpbmNsdWRlcyB0aGlzLnR5cGUgJ3NlY3Rpb24sdGFibGUnfX1cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgZmllbGQte3t0aGlzLmNvZGV9fVwiPlxuXHRcdFx0XHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT10aGlzLmNvZGUgbGFiZWw9ZmFsc2V9fVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ7eyNpZiB0aGlzLmlzX3dpZGV9fWNvbC1tZC0xMnt7ZWxzZX19Y29sLW1kLTZ7ey9pZn19IGZpZWxkLXt7dGhpcy5jb2RlfX1cIj5cblx0XHRcdFx0XHRcdHt7PiBhZkZvcm1Hcm91cCBuYW1lPXRoaXMuY29kZX19XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7ey9pZn19XG5cdFx0XHRcdHt7L2lmfX1cblx0XHRcdHt7L2VhY2h9fVxuXHRcdFx0PGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYXBwbGljYW50LXdyYXBwZXIgZm9ybS1ncm91cCBmb3JtLWhvcml6b250YWxcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uXCI+XG5cdFx0XHRcdFx0ICB7e190IFwiaW5zdGFuY2VfaW5pdGlhdG9yXCJ9fSZuYnNwOzpcblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7ez5UZW1wbGF0ZS5keW5hbWljICB0ZW1wbGF0ZT1cImFmU2VsZWN0VXNlclwiIGRhdGE9YXBwbGljYW50Q29udGV4dH19XG5cdFx0XHRcdCAgPC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XCJcIlwiXG5cdFx0cmV0dXJuIHRlbXBsYXRlXG5cblx0dGFibGU6IChpbnN0YW5jZSktPlxuXHRcdHJldHVybiBUZW1wbGF0ZU1hbmFnZXIuaGFuZGxlVGFibGVUZW1wbGF0ZShpbnN0YW5jZSlcbiNcdHRhYmxlOiAnJydcbiNcdFx0PHRhYmxlIGNsYXNzPVwiYm94LWhlYWRlciAgd2l0aC1ib3JkZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO2Rpc3BsYXk6IGlubGluZS10YWJsZTtcIj5cbiNcdFx0XHQ8dHIgY2xhc3M9XCJpbnN0YW5jZS1uYW1lXCI+XG4jXHRcdFx0XHQ8dGQgY2xhc3M9XCJpbnN0YW5jZS10YWJsZS1uYW1lLXRkXCI+XG4jXHRcdFx0XHRcdDxoMyBjbGFzcz1cImJveC10aXRsZVwiPnt7aW5zdGFuY2UubmFtZX19PC9oMz5cbiNcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJoZWxwLWJsb2NrXCI+PC9zcGFuPlxuI1x0XHRcdFx0PC90ZD5cbiNcdFx0XHQ8L3RyPlxuIyAgICAgICAgICAgIDx0ciBjbGFzcz1cImFwcGxpY2FudC13cmFwcGVyXCI+XG4jXHRcdFx0XHQ8dGQgY2xhc3M9XCJpbnN0YW5jZS10YWJsZS13cmFwcGVyLXRkXCI+XG4jXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e190IFwiaW5zdGFuY2VfaW5pdGlhdG9yXCJ9fSZuYnNwOzo8L2xhYmVsPlxuI1x0XHRcdFx0XHR7ez5UZW1wbGF0ZS5keW5hbWljICB0ZW1wbGF0ZT1cImFmU2VsZWN0VXNlclwiIGRhdGE9YXBwbGljYW50Q29udGV4dH19XG4jXHRcdFx0XHQ8L3RkPlxuI1x0XHRcdDwvdHI+XG4jICAgICAgICA8L3RhYmxlPlxuI1x0XHQ8dGFibGUgY2xhc3M9XCJmb3JtLXRhYmxlXCI+XG4jXHRcdCAgICB7eyNlYWNoIHRhYmxlX2ZpZWxkc319XG4jXHRcdFx0XHR7eyNpZiBpc09waW5pb25GaWVsZCB0aGlzfX1cbiNcdFx0XHRcdFx0e3t7dHJfc3RhcnR9fX1cbiNcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC10aXRsZSB7eyNpZiBpc19yZXF1aXJlZH19aXMtcmVxdWlyZWR7ey9pZn19XCI+XG4jXHRcdFx0XHRcdFx0XHR7e2FmRmllbGRMYWJlbFRleHQgbmFtZT10aGlzLmNvZGV9fVxuI1x0XHRcdFx0XHRcdDwvdGQ+XG4jXHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwidGQtZmllbGQgb3Bpbmlvbi1maWVsZFwiIGNvbHNwYW4gPSAne3t0ZF9jb2xzcGFufX0nPlxuI1x0XHRcdFx0XHRcdFx0e3s+IGluc3RhbmNlU2lnblRleHQgc3RlcD0oZ2V0T3BpbmlvbkZpZWxkU3RlcE5hbWUgdGhpcykgZGVmYXVsdD0nJ319XG4jXHRcdFx0XHRcdFx0PC90ZD5cbiNcdFx0XHRcdFx0e3t7dHJfZW5kfX19XG4jXHRcdFx0XHR7e2Vsc2V9fVxuI1x0XHRcdFx0XHR7eyNpZiBpbmNsdWRlcyB0aGlzLnR5cGUgJ3NlY3Rpb24sdGFibGUnfX1cbiNcdFx0XHRcdFx0XHR7e3t0cl9zdGFydH19fVxuI1x0XHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwidGQtY2hpbGRmaWVsZFwiIGNvbHNwYW4gPSAne3t0ZF9jb2xzcGFufX0nPlxuI1x0XHRcdFx0XHRcdFx0ICAge3s+IGFmRm9ybUdyb3VwIG5hbWU9dGhpcy5jb2RlIGxhYmVsPWZhbHNlfX1cbiNcdFx0XHRcdFx0XHRcdDwvdGQ+XG4jXHRcdFx0XHRcdFx0e3t7dHJfZW5kfX19XG4jXHRcdFx0XHRcdHt7ZWxzZX19XG4jXHRcdFx0XHRcdFx0e3t7dHJfc3RhcnR9fX1cbiNcdFx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cInRkLXRpdGxlIHt7I2lmIGlzX3JlcXVpcmVkfX1pcy1yZXF1aXJlZHt7L2lmfX1cIj5cbiNcdFx0XHRcdFx0XHRcdFx0e3thZkZpZWxkTGFiZWxUZXh0IG5hbWU9dGhpcy5jb2RlfX1cbiNcdFx0XHRcdFx0XHRcdDwvdGQ+XG4jXHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC1maWVsZCB7e3Blcm1pc3Npb259fVwiIGNvbHNwYW4gPSAne3t0ZF9jb2xzcGFufX0nPlxuI1x0XHRcdFx0XHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT10aGlzLmNvZGUgbGFiZWw9ZmFsc2V9fVxuI1x0XHRcdFx0XHRcdFx0PC90ZD5cbiNcdFx0XHRcdFx0XHR7e3t0cl9lbmR9fX1cbiNcdFx0XHRcdFx0e3svaWZ9fVxuI1x0XHRcdFx0e3svaWZ9fVxuI1xuI1x0XHQgICAge3svZWFjaH19XG4jXHRcdDwvdGFibGU+XG4jXHQnJydcblxuVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZUhlbHBzID1cblx0YXBwbGljYW50Q29udGV4dDogLT5cblx0XHRzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0ZGF0YSA9IHtcblx0XHRcdG5hbWU6ICdpbnNfYXBwbGljYW50Jyxcblx0XHRcdGF0dHM6IHtcblx0XHRcdFx0bmFtZTogJ2luc19hcHBsaWNhbnQnLFxuXHRcdFx0XHRpZDogJ2luc19hcHBsaWNhbnQnLFxuXHRcdFx0XHRjbGFzczogJ3NlbGVjdFVzZXIgZm9ybS1jb250cm9sJyxcblx0XHRcdFx0c3R5bGU6ICdwYWRkaW5nOjZweCAxMnB4O3dpZHRoOjE0MHB4O2Rpc3BsYXk6aW5saW5lJ1xuXHRcdFx0fVxuXHRcdH1cbiNcdFx0aWYgbm90IHN0ZWVkb3NfaW5zdGFuY2UgfHwgc3RlZWRvc19pbnN0YW5jZS5zdGF0ZSAhPSBcImRyYWZ0XCJcblx0XHRkYXRhLmF0dHMuZGlzYWJsZWQgPSB0cnVlXG5cdFx0cmV0dXJuIGRhdGE7XG5cbmluc3RhbmNlSWQ6IC0+XG5cdHJldHVybiAnaW5zdGFuY2Vmb3JtJzsjXCJpbnN0YW5jZV9cIiArIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKTtcblxuZm9ybV90eXBlczogLT5cblx0aWYgQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpXG5cdFx0cmV0dXJuICdkaXNhYmxlZCc7XG5cdGVsc2Vcblx0XHRyZXR1cm4gJ21ldGhvZCc7XG5cbnN0ZWVkb3NfZm9ybTogLT5cblx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcblx0aWYgZm9ybV92ZXJzaW9uXG5cdFx0cmV0dXJuIGZvcm1fdmVyc2lvblxuXG5pbm5lcnN1YmZvcm1Db250ZXh0OiAob2JqKS0+XG5cdGRvY192YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG5cdG9ialtcInRhYmxlVmFsdWVzXCJdID0gaWYgZG9jX3ZhbHVlcyB0aGVuIGRvY192YWx1ZXNbb2JqLmNvZGVdIGVsc2UgW11cblx0b2JqW1wiZm9ybUlkXCJdID0gZm9ybUlkO1xuXHRyZXR1cm4gb2JqO1xuXG5pbnN0YW5jZTogLT5cblx0U2Vzc2lvbi5nZXQoXCJjaGFuZ2VfZGF0ZVwiKVxuXHRpZiAoU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpKVxuXHRcdHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRyZXR1cm4gc3RlZWRvc19pbnN0YW5jZTtcblxuZXF1YWxzOiAoYSwgYikgLT5cblx0cmV0dXJuIChhID09IGIpXG5cbmluY2x1ZGVzOiAoYSwgYikgLT5cblx0cmV0dXJuIGIuc3BsaXQoJywnKS5pbmNsdWRlcyhhKTtcblxuZmllbGRzOiAtPlxuXHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuXHRpZiBmb3JtX3ZlcnNpb25cblx0XHRyZXR1cm4gbmV3IFNpbXBsZVNjaGVtYShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hKGZvcm1fdmVyc2lvbikpO1xuXG5kb2NfdmFsdWVzOiAtPlxuXHRXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG5cbmluc3RhbmNlX2JveF9zdHlsZTogLT5cblx0Ym94ID0gU2Vzc2lvbi5nZXQoXCJib3hcIilcblx0aWYgYm94ID09IFwiaW5ib3hcIiB8fCBib3ggPT0gXCJkcmFmdFwiXG5cdFx0anVkZ2UgPSBTZXNzaW9uLmdldChcImp1ZGdlXCIpXG5cdFx0aWYganVkZ2Vcblx0XHRcdGlmIChqdWRnZSA9PSBcImFwcHJvdmVkXCIpXG5cdFx0XHRcdHJldHVybiBcImJveC1zdWNjZXNzXCJcblx0XHRcdGVsc2UgaWYgKGp1ZGdlID09IFwicmVqZWN0ZWRcIilcblx0XHRcdFx0cmV0dXJuIFwiYm94LWRhbmdlclwiXG5cdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRpZiBpbnMgJiYgaW5zLmZpbmFsX2RlY2lzaW9uXG5cdFx0aWYgaW5zLmZpbmFsX2RlY2lzaW9uID09IFwiYXBwcm92ZWRcIlxuXHRcdFx0cmV0dXJuIFwiYm94LXN1Y2Nlc3NcIlxuXHRcdGVsc2UgaWYgKGlucy5maW5hbF9kZWNpc2lvbiA9PSBcInJlamVjdGVkXCIpXG5cdFx0XHRyZXR1cm4gXCJib3gtZGFuZ2VyXCJcblxuXG5UZW1wbGF0ZU1hbmFnZXIuZ2V0VGVtcGxhdGUgPSAoaW5zdGFuY2UsIHRlbXBsYXRlTmFtZSkgLT5cblx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoaW5zdGFuY2UuZmxvdyk7XG5cdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuXG5cdGlmIHRlbXBsYXRlTmFtZVxuXHRcdGlmIHRlbXBsYXRlTmFtZSA9PSAndGFibGUnXG5cdFx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSlcblx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS5kZWZhdWx0KGluc3RhbmNlKVxuXG5cdGlmIFNlc3Npb24/LmdldChcImluc3RhbmNlUHJpbnRcIilcblx0XHRpZiBmbG93Py5wcmludF90ZW1wbGF0ZVxuXHRcdFx0cmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlwiICsgZmxvdy5wcmludF90ZW1wbGF0ZSArIFwiPC9kaXY+XCJcblx0XHRlbHNlXG5cdFx0XHRpZiBmbG93Py5pbnN0YW5jZV90ZW1wbGF0ZVxuXHRcdFx0XHRyZXR1cm4gXCI8ZGl2IGNsYXNzPSdpbnN0YW5jZS10ZW1wbGF0ZSc+XCIgKyBmbG93Lmluc3RhbmNlX3RlbXBsYXRlICsgXCI8L2Rpdj5cIlxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSlcblx0ZWxzZVxuXHRcdGlmIFN0ZWVkb3MuaXNNb2JpbGUoKVxuXHRcdFx0cmV0dXJuIFRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUuZGVmYXVsdChpbnN0YW5jZSlcblxuXHRcdGlmIGZsb3c/Lmluc3RhbmNlX3RlbXBsYXRlXG5cdFx0XHRyZXR1cm4gXCI8ZGl2IGNsYXNzPSdpbnN0YW5jZS10ZW1wbGF0ZSc+XCIgKyBmbG93Lmluc3RhbmNlX3RlbXBsYXRlICsgXCI8L2Rpdj5cIlxuXG5cdFx0aWYgZm9ybT8uaW5zdGFuY2Vfc3R5bGVcblx0XHRcdGlmIGZvcm0uaW5zdGFuY2Vfc3R5bGUgPT0gJ3RhYmxlJ1xuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSlcblx0XHRcdHJldHVybiBUZW1wbGF0ZU1hbmFnZXIuX3RlbXBsYXRlLmRlZmF1bHQoaW5zdGFuY2UpXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIFRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUuZGVmYXVsdChpbnN0YW5jZSlcblxuI1RlbXBsYXRlTWFuYWdlci5leHBvcnRUZW1wbGF0ZSA9IChmbG93SWQpIC0+XG4jXHR0ZW1wbGF0ZSA9IFRlbXBsYXRlTWFuYWdlci5nZXRUZW1wbGF0ZShmbG93SWQpO1xuI1xuI1x0ZmxvdyA9IFdvcmtmbG93TWFuYWdlci5nZXRGbG93KGZsb3dJZCk7XG4jXG4jXHRpZiBmbG93Py5pbnN0YW5jZV90ZW1wbGF0ZVxuI1x0XHRyZXR1cm4gdGVtcGxhdGU7XG4jXG4jXHRyZXR1cm4gdGVtcGxhdGU7XG5cbiIsInZhciBmb3JtSWQ7ICAgICAgICAgICAgICAgICBcblxuVGVtcGxhdGVNYW5hZ2VyID0ge307XG5cbmZvcm1JZCA9ICdpbnN0YW5jZWZvcm0nO1xuXG5UZW1wbGF0ZU1hbmFnZXIuaW5zdGFuY2VfdGl0bGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhZ2VUaXRsZSwgcGFnZVRpdGxlVHJDbGFzcywgdmFsO1xuICBwYWdlVGl0bGUgPSBcInt7aW5zdGFuY2UubmFtZX19XCI7XG4gIHBhZ2VUaXRsZVRyQ2xhc3MgPSBcImluc3RhbmNlLW5hbWVcIjtcbiAgaWYgKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkge1xuICAgIHBhZ2VUaXRsZSA9IFwie3s+IGFmRm9ybUdyb3VwIG5hbWU9XFxcIlwiICsgQ29yZUZvcm0ucGFnZVRpdGxlRmllbGROYW1lICsgXCJcXFwiIGxhYmVsPWZhbHNlfX1cIjtcbiAgICBwYWdlVGl0bGVUckNsYXNzID0gXCJcIjtcbiAgfVxuICBpZiAodHlwZW9mIENvcmVGb3JtICE9PSBcInVuZGVmaW5lZFwiICYmIENvcmVGb3JtICE9PSBudWxsID8gQ29yZUZvcm0ucGFnZVRpdGxlIDogdm9pZCAwKSB7XG4gICAgcGFnZVRpdGxlID0gXCJcIiArIENvcmVGb3JtLnBhZ2VUaXRsZTtcbiAgICBwYWdlVGl0bGVUckNsYXNzID0gXCJcIjtcbiAgfVxuICB2YWwgPSB7XG4gICAgcGFnZVRpdGxlOiBwYWdlVGl0bGUsXG4gICAgcGFnZVRpdGxlVHJDbGFzczogcGFnZVRpdGxlVHJDbGFzc1xuICB9O1xuICByZXR1cm4gdmFsO1xufTtcblxuVGVtcGxhdGVNYW5hZ2VyLmhhbmRsZVRhYmxlVGVtcGxhdGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgX2V4cG9ydCkge1xuICB2YXIgdGFibGVfZmllbGRzLCB0ZW1wbGF0ZTtcbiAgdGVtcGxhdGUgPSBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXRlbXBsYXRlJz5cXG5cdDx0YWJsZSBjbGFzcz1cXFwidGFibGUtcGFnZS10aXRsZSBmb3JtLXRhYmxlIG5vLWJvcmRlciB0ZXh0LWFsaWduLWNlbnRlclxcXCIgc3R5bGU9XFxcIndpZHRoOiAxMDAlO2Rpc3BsYXk6IGlubGluZS10YWJsZTtcXFwiPlxcblx0XHQ8dHIgY2xhc3M9XFxcIlwiICsgKHRoaXMuaW5zdGFuY2VfdGl0bGUoKS5wYWdlVGl0bGVUckNsYXNzKSArIFwiXFxcIj5cXG5cdFx0XHQ8dGQgY2xhc3M9XFxcImluc3RhbmNlLXRhYmxlLW5hbWUtdGQgcGFnZS10aXRsZVxcXCI+XFxuXHRcdFx0XHRcIiArICh0aGlzLmluc3RhbmNlX3RpdGxlKCkucGFnZVRpdGxlKSArIFwiXFxuXHRcdFx0PC90ZD5cXG5cdFx0PC90cj5cXG5cXG5cdDwvdGFibGU+XFxuXHQ8dGFibGUgY2xhc3M9XFxcInRhYmxlLXBhZ2UtYm9keSBmb3JtLXRhYmxlXFxcIj5cXG5cdFx0XHQ8dHIgc3R5bGU9XFxcImhlaWdodDowcHhcXFwiPlxcblx0XHRcdFx0PHRoIHN0eWxlPSd3aWR0aDogMTYlJz48L3RoPlxcblx0XHRcdFx0PHRoPjwvdGg+XFxuXHRcdFx0XHQ8dGggc3R5bGU9J3dpZHRoOiAxNiUnPjwvdGg+XFxuXHRcdFx0XHQ8dGg+PC90aD5cXG5cdFx0XHQ8L3RyPlwiO1xuICB0YWJsZV9maWVsZHMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnRhYmxlX2ZpZWxkcyhpbnN0YW5jZSk7XG4gIHRhYmxlX2ZpZWxkcyAmJiB0YWJsZV9maWVsZHMuZm9yRWFjaChmdW5jdGlvbih0YWJsZV9maWVsZCkge1xuICAgIHZhciBmaWVsZF9wZXJtaXNzaW9uLCBwdXJlQ29kZSwgcmVxdWlyZWQsIHRpdGxlX3Blcm1pc3Npb247XG4gICAgcmVxdWlyZWQgPSBcIlwiO1xuICAgIGlmICghKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkgfHwgKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkgIT09IHRhYmxlX2ZpZWxkLmNvZGUpIHtcbiAgICAgIGlmICh0YWJsZV9maWVsZC5pc19yZXF1aXJlZCkge1xuICAgICAgICByZXF1aXJlZCA9IFwiaXMtcmVxdWlyZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmIChfZXhwb3J0KSB7XG4gICAgICAgIHJlcXVpcmVkID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHB1cmVDb2RlID0gU3RlZWRvcy5yZW1vdmVTcGVjaWFsQ2hhcmFjdGVyKHRhYmxlX2ZpZWxkLmNvZGUpO1xuICAgICAgaWYgKEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGQodGFibGVfZmllbGQpKSB7XG4gICAgICAgIHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX3N0YXJ0O1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIjx0ZCBjbGFzcz1cXFwidGQtdGl0bGUgXCIgKyByZXF1aXJlZCArIFwiXFxcIj5cXG5cdHt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCJ9fVxcbjwvdGQ+XFxuPHRkIGNsYXNzPVxcXCJ0ZC1maWVsZCBvcGluaW9uLWZpZWxkIG9waW5pb24tZmllbGQtXCIgKyBwdXJlQ29kZSArIFwiIGF1dG9tYXRpY1xcXCIgY29sc3BhbiA9IFxcXCJcIiArIHRhYmxlX2ZpZWxkLnRkX2NvbHNwYW4gKyBcIlxcXCI+XFxuXHR7ez4gaW5zdGFuY2VTaWduVGV4dCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCJ9fVxcbjwvdGQ+XCI7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9lbmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbmNsdWRlcyh0YWJsZV9maWVsZC50eXBlLCAnc2VjdGlvbix0YWJsZScpKSB7XG4gICAgICAgICAgdGVtcGxhdGUgKz0gdGFibGVfZmllbGQudHJfc3RhcnQ7XG4gICAgICAgICAgdGVtcGxhdGUgKz0gXCI8dGQgY2xhc3M9XFxcInRkLWNoaWxkZmllbGQgdGQtY2hpbGRmaWVsZC1cIiArIHB1cmVDb2RlICsgXCJcXFwiIGNvbHNwYW4gPSBcXFwiXCIgKyB0YWJsZV9maWVsZC50ZF9jb2xzcGFuICsgXCJcXFwiPlxcbiAgIHt7PiBhZkZvcm1Hcm91cCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCIgbGFiZWw9ZmFsc2V9fVxcbjwvdGQ+XCI7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9zdGFydDtcbiAgICAgICAgICBpZiAoX2V4cG9ydCkge1xuICAgICAgICAgICAgdGl0bGVfcGVybWlzc2lvbiA9IFwiXCI7XG4gICAgICAgICAgICBmaWVsZF9wZXJtaXNzaW9uID0gXCJcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGl0bGVfcGVybWlzc2lvbiA9IFwidGl0bGUtXCIgKyB0YWJsZV9maWVsZC5wZXJtaXNzaW9uO1xuICAgICAgICAgICAgZmllbGRfcGVybWlzc2lvbiA9IFwiZmllbGQtXCIgKyB0YWJsZV9maWVsZC5wZXJtaXNzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0ZW1wbGF0ZSArPSBcIjx0ZCBjbGFzcz1cXFwidGQtdGl0bGUgdGQtdGl0bGUtXCIgKyBwdXJlQ29kZSArIFwiIFwiICsgdGl0bGVfcGVybWlzc2lvbiArIFwiIFwiICsgcmVxdWlyZWQgKyBcIlxcXCI+XFxuXHR7e2FmRmllbGRMYWJlbFRleHQgbmFtZT1cXFwiXCIgKyB0YWJsZV9maWVsZC5jb2RlICsgXCJcXFwifX1cXG48L3RkPlxcbjx0ZCBjbGFzcz1cXFwidGQtZmllbGQgdGQtZmllbGQtXCIgKyBwdXJlQ29kZSArIFwiIFwiICsgZmllbGRfcGVybWlzc2lvbiArIFwiXFxcIiBjb2xzcGFuID0gXFxcIlwiICsgdGFibGVfZmllbGQudGRfY29sc3BhbiArIFwiXFxcIj5cXG5cdHt7PiBhZkZvcm1Hcm91cCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCIgbGFiZWw9ZmFsc2V9fVxcbjwvdGQ+XCI7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHRlbXBsYXRlICs9IFwiXHQ8L3RhYmxlPlxcblxcblx0PHRhYmxlIGNsYXNzPVxcXCJ0YWJsZS1wYWdlLWZvb3RlciBmb3JtLXRhYmxlIG5vLWJvcmRlclxcXCI+XFxuXHRcdDx0ciBjbGFzcz1cXFwiYXBwbGljYW50LXdyYXBwZXJcXFwiPlxcblx0XHRcdDx0ZCBjbGFzcz1cXFwibm93cmFwXFxcIj5cXG5cdFx0XHRcdDxkaXYgY2xhc3M9J2lubGluZS1sZWZ0Jz5cXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e190IFxcXCJpbnN0YW5jZV9pbml0aWF0b3JcXFwifX3vvJo8L2xhYmVsPlxcblx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS10YWJsZS13cmFwcGVyLXRkIGlubGluZS1sZWZ0Jz5cXG5cdFx0XHRcdFx0e3s+VGVtcGxhdGUuZHluYW1pYyAgdGVtcGxhdGU9XFxcImFmU2VsZWN0VXNlclxcXCIgZGF0YT1hcHBsaWNhbnRDb250ZXh0fX1cXG5cdFx0XHRcdDwvZGl2Plxcblx0XHRcdDwvdGQ+XFxuXHRcdFx0PHRkIGNsYXNzPVxcXCJub3dyYXBcXFwiPlxcblx0XHRcdFx0PGRpdiBjbGFzcz0ncHVsbC1sZWZ0Jz5cXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5saW5lLWxlZnQnPlxcblx0XHRcdFx0XHRcdDxsYWJlbD57e190IFxcXCJpbnN0YW5jZV9zdWJtaXRfZGF0ZVxcXCJ9fe+8mjwvbGFiZWw+XFxuXHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbmxpbmUtcmlnaHQnPlxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0e3tmb3JtYXREYXRlIGluc3RhbmNlLnN1Ym1pdF9kYXRlICd7XFxcImZvcm1hdFxcXCI6XFxcIllZWVktTU0tRERcXFwifSd9fVxcblx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdDwvZGl2Plxcblx0XHRcdDwvdGQ+XFxuXHRcdDwvdHI+XFxuXHQ8L3RhYmxlPlxcbjwvZGl2PlwiO1xuICByZXR1cm4gdGVtcGxhdGU7XG59O1xuXG5UZW1wbGF0ZU1hbmFnZXIuX3RlbXBsYXRlID0ge1xuICBcImRlZmF1bHRcIjogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICB2YXIgdGVtcGxhdGU7XG4gICAgdGVtcGxhdGUgPSBcIjxkaXYgY2xhc3M9XFxcIndpdGgtYm9yZGVyIGNvbC1tZC0xMlxcXCI+XFxuXHQ8ZGl2IGNsYXNzPVxcXCJpbnN0YW5jZS1uYW1lXFxcIj5cXG5cdFx0PGgzIGNsYXNzPVxcXCJib3gtdGl0bGVcXFwiPlwiICsgKFRlbXBsYXRlTWFuYWdlci5pbnN0YW5jZV90aXRsZSgpLnBhZ2VUaXRsZSkgKyBcIjwvaDM+XFxuXHRcdDxzcGFuIGNsYXNzPVxcXCJoZWxwLWJsb2NrXFxcIj48L3NwYW4+XFxuXHQ8L2Rpdj5cXG5cdDxzcGFuIGNsYXNzPVxcXCJoZWxwLWJsb2NrXFxcIj48L3NwYW4+XFxuPC9kaXY+XFxue3sjZWFjaCBzdGVlZG9zX2Zvcm0uZmllbGRzfX1cXG5cdHt7I2lmIGlzT3BpbmlvbkZpZWxkIHRoaXN9fVxcblx0XHQ8ZGl2IGNsYXNzPVxcXCJ7eyNpZiB0aGlzLmlzX3dpZGV9fWNvbC1tZC0xMnt7ZWxzZX19Y29sLW1kLTZ7ey9pZn19IGZpZWxkLXt7dGhpcy5jb2RlfX1cXFwiPlxcblx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXAgYXV0b21hdGljIG9waW5pb24tZmllbGQte3t0aGlzLmNvZGV9fVxcXCI+XFxuXHRcdFx0XHQ8bGFiZWwgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPXRoaXMuY29kZX19PC9sYWJlbD5cXG5cXG5cdFx0XHRcdHt7PiBpbnN0YW5jZVNpZ25UZXh0IG5hbWU9dGhpcy5jb2RlfX1cXG5cdFx0XHQ8L2Rpdj5cXG5cdFx0PC9kaXY+XFxuXHR7e2Vsc2V9fVxcblx0XHR7eyNpZiBpbmNsdWRlcyB0aGlzLnR5cGUgJ3NlY3Rpb24sdGFibGUnfX1cXG5cdFx0XHQ8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTIgZmllbGQte3t0aGlzLmNvZGV9fVxcXCI+XFxuXHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT10aGlzLmNvZGUgbGFiZWw9ZmFsc2V9fVxcblx0XHRcdDwvZGl2Plxcblx0XHR7e2Vsc2V9fVxcblx0XHRcdDxkaXYgY2xhc3M9XFxcInt7I2lmIHRoaXMuaXNfd2lkZX19Y29sLW1kLTEye3tlbHNlfX1jb2wtbWQtNnt7L2lmfX0gZmllbGQte3t0aGlzLmNvZGV9fVxcXCI+XFxuXHRcdFx0e3s+IGFmRm9ybUdyb3VwIG5hbWU9dGhpcy5jb2RlfX1cXG5cdFx0XHQ8L2Rpdj5cXG5cdFx0e3svaWZ9fVxcblx0e3svaWZ9fVxcbnt7L2VhY2h9fVxcbjxkaXYgY2xhc3M9XFxcImNvbC1tZC0xMlxcXCI+XFxuXHQ8ZGl2IGNsYXNzPVxcXCJhcHBsaWNhbnQtd3JhcHBlciBmb3JtLWdyb3VwIGZvcm0taG9yaXpvbnRhbFxcXCI+XFxuXHQ8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cFxcXCI+XFxuXHRcdDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uXFxcIj5cXG5cdFx0ICB7e190IFxcXCJpbnN0YW5jZV9pbml0aWF0b3JcXFwifX0mbmJzcDs6XFxuXHRcdDwvZGl2Plxcblx0XHR7ez5UZW1wbGF0ZS5keW5hbWljICB0ZW1wbGF0ZT1cXFwiYWZTZWxlY3RVc2VyXFxcIiBkYXRhPWFwcGxpY2FudENvbnRleHR9fVxcblx0ICA8L2Rpdj5cXG5cdDwvZGl2PlxcbjwvZGl2PlwiO1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSxcbiAgdGFibGU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIFRlbXBsYXRlTWFuYWdlci5oYW5kbGVUYWJsZVRlbXBsYXRlKGluc3RhbmNlKTtcbiAgfVxufTtcblxuVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZUhlbHBzID0ge1xuICBhcHBsaWNhbnRDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGF0YSwgc3RlZWRvc19pbnN0YW5jZTtcbiAgICBzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgZGF0YSA9IHtcbiAgICAgIG5hbWU6ICdpbnNfYXBwbGljYW50JyxcbiAgICAgIGF0dHM6IHtcbiAgICAgICAgbmFtZTogJ2luc19hcHBsaWNhbnQnLFxuICAgICAgICBpZDogJ2luc19hcHBsaWNhbnQnLFxuICAgICAgICBcImNsYXNzXCI6ICdzZWxlY3RVc2VyIGZvcm0tY29udHJvbCcsXG4gICAgICAgIHN0eWxlOiAncGFkZGluZzo2cHggMTJweDt3aWR0aDoxNDBweDtkaXNwbGF5OmlubGluZSdcbiAgICAgIH1cbiAgICB9O1xuICAgIGRhdGEuYXR0cy5kaXNhYmxlZCA9IHRydWU7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn07XG5cbih7XG4gIGluc3RhbmNlSWQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnaW5zdGFuY2Vmb3JtJztcbiAgfSxcbiAgZm9ybV90eXBlczogZnVuY3Rpb24oKSB7XG4gICAgaWYgKEFwcHJvdmVNYW5hZ2VyLmlzUmVhZE9ubHkoKSkge1xuICAgICAgcmV0dXJuICdkaXNhYmxlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnbWV0aG9kJztcbiAgICB9XG4gIH0sXG4gIHN0ZWVkb3NfZm9ybTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuICAgIGlmIChmb3JtX3ZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmb3JtX3ZlcnNpb247XG4gICAgfVxuICB9LFxuICBpbm5lcnN1YmZvcm1Db250ZXh0OiBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgZG9jX3ZhbHVlcztcbiAgICBkb2NfdmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuICAgIG9ialtcInRhYmxlVmFsdWVzXCJdID0gZG9jX3ZhbHVlcyA/IGRvY192YWx1ZXNbb2JqLmNvZGVdIDogW107XG4gICAgb2JqW1wiZm9ybUlkXCJdID0gZm9ybUlkO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGluc3RhbmNlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RlZWRvc19pbnN0YW5jZTtcbiAgICBTZXNzaW9uLmdldChcImNoYW5nZV9kYXRlXCIpO1xuICAgIGlmIChTZXNzaW9uLmdldChcImluc3RhbmNlSWRcIikpIHtcbiAgICAgIHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIHJldHVybiBzdGVlZG9zX2luc3RhbmNlO1xuICAgIH1cbiAgfSxcbiAgZXF1YWxzOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH0sXG4gIGluY2x1ZGVzOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIuc3BsaXQoJywnKS5pbmNsdWRlcyhhKTtcbiAgfSxcbiAgZmllbGRzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZm9ybV92ZXJzaW9uO1xuICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG4gICAgaWYgKGZvcm1fdmVyc2lvbikge1xuICAgICAgcmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYShmb3JtX3ZlcnNpb24pKTtcbiAgICB9XG4gIH0sXG4gIGRvY192YWx1ZXM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG4gIH0sXG4gIGluc3RhbmNlX2JveF9zdHlsZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGJveCwgaW5zLCBqdWRnZTtcbiAgICBib3ggPSBTZXNzaW9uLmdldChcImJveFwiKTtcbiAgICBpZiAoYm94ID09PSBcImluYm94XCIgfHwgYm94ID09PSBcImRyYWZ0XCIpIHtcbiAgICAgIGp1ZGdlID0gU2Vzc2lvbi5nZXQoXCJqdWRnZVwiKTtcbiAgICAgIGlmIChqdWRnZSkge1xuICAgICAgICBpZiAoanVkZ2UgPT09IFwiYXBwcm92ZWRcIikge1xuICAgICAgICAgIHJldHVybiBcImJveC1zdWNjZXNzXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoanVkZ2UgPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgICAgIHJldHVybiBcImJveC1kYW5nZXJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICBpZiAoaW5zICYmIGlucy5maW5hbF9kZWNpc2lvbikge1xuICAgICAgaWYgKGlucy5maW5hbF9kZWNpc2lvbiA9PT0gXCJhcHByb3ZlZFwiKSB7XG4gICAgICAgIHJldHVybiBcImJveC1zdWNjZXNzXCI7XG4gICAgICB9IGVsc2UgaWYgKGlucy5maW5hbF9kZWNpc2lvbiA9PT0gXCJyZWplY3RlZFwiKSB7XG4gICAgICAgIHJldHVybiBcImJveC1kYW5nZXJcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG5UZW1wbGF0ZU1hbmFnZXIuZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgdGVtcGxhdGVOYW1lKSB7XG4gIHZhciBmbG93LCBmb3JtO1xuICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZShpbnN0YW5jZS5mbG93KTtcbiAgZm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoaW5zdGFuY2UuZm9ybSk7XG4gIGlmICh0ZW1wbGF0ZU5hbWUpIHtcbiAgICBpZiAodGVtcGxhdGVOYW1lID09PSAndGFibGUnKSB7XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSk7XG4gICAgfVxuICAgIHJldHVybiBUZW1wbGF0ZU1hbmFnZXIuX3RlbXBsYXRlW1wiZGVmYXVsdFwiXShpbnN0YW5jZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBTZXNzaW9uICE9PSBcInVuZGVmaW5lZFwiICYmIFNlc3Npb24gIT09IG51bGwgPyBTZXNzaW9uLmdldChcImluc3RhbmNlUHJpbnRcIikgOiB2b2lkIDApIHtcbiAgICBpZiAoZmxvdyAhPSBudWxsID8gZmxvdy5wcmludF90ZW1wbGF0ZSA6IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlwiICsgZmxvdy5wcmludF90ZW1wbGF0ZSArIFwiPC9kaXY+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmbG93ICE9IG51bGwgPyBmbG93Lmluc3RhbmNlX3RlbXBsYXRlIDogdm9pZCAwKSB7XG4gICAgICAgIHJldHVybiBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXRlbXBsYXRlJz5cIiArIGZsb3cuaW5zdGFuY2VfdGVtcGxhdGUgKyBcIjwvZGl2PlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUudGFibGUoaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZVtcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIH1cbiAgICBpZiAoZmxvdyAhPSBudWxsID8gZmxvdy5pbnN0YW5jZV90ZW1wbGF0ZSA6IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlwiICsgZmxvdy5pbnN0YW5jZV90ZW1wbGF0ZSArIFwiPC9kaXY+XCI7XG4gICAgfVxuICAgIGlmIChmb3JtICE9IG51bGwgPyBmb3JtLmluc3RhbmNlX3N0eWxlIDogdm9pZCAwKSB7XG4gICAgICBpZiAoZm9ybS5pbnN0YW5jZV9zdHlsZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZVtcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZVtcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufTtcbiIsIlN0ZWVkb3NUYWJsZSA9IHt9O1xuXG5TdGVlZG9zVGFibGUuZm9ybUlkID0gXCJpbnN0YW5jZWZvcm1cIjtcblxuU3RlZWRvc1RhYmxlLmNoZWNrSXRlbSA9IGZ1bmN0aW9uIChmaWVsZCwgaXRlbV9pbmRleCkge1xuICAgIHZhciBmaWVsZE9iaiA9IFN0ZWVkb3NUYWJsZS5nZXRGaWVsZChmaWVsZCk7XG5cbiAgICB2YXIgZmllbGRWYWwgPSBTdGVlZG9zVGFibGUuZ2V0SXRlbU1vZGFsVmFsdWUoZmllbGQsIGl0ZW1faW5kZXgpO1xuXG4gICAgdmFyIHNmX25hbWUgPSAnJztcbiAgICB2YXIgcmV2ID0gdHJ1ZTtcbiAgICBmaWVsZE9iai5zZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHNmKSB7XG4gICAgICAgIGlmIChzZi5wZXJtaXNzaW9uID09ICdlZGl0YWJsZScpIHtcbiAgICAgICAgICAgIHNmX25hbWUgPSBmaWVsZE9iai5jb2RlICsgXCIuXCIgKyBzZi5jb2RlO1xuICAgICAgICAgICAgaWYgKCFJbnN0YW5jZU1hbmFnZXIuY2hlY2tGb3JtRmllbGRWYWx1ZSgkKFwiW25hbWU9J1wiICsgc2ZfbmFtZSArIFwiJ11cIilbMF0sIHNmX25hbWUsIGZpZWxkVmFsW3NmLmNvZGVdKSkge1xuICAgICAgICAgICAgICAgIHJldiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmV2O1xufVxuXG5TdGVlZG9zVGFibGUuc2V0VGFibGVJdGVtVmFsdWUgPSBmdW5jdGlvbiAoZmllbGQsIGl0ZW1faW5kZXgsIGl0ZW1fdmFsdWUpIHtcblxuICAgIHZhciB0YWJsZVZhbHVlID0gU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpO1xuICAgIHRhYmxlVmFsdWVbaXRlbV9pbmRleF0gPSBpdGVtX3ZhbHVlO1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0VGFibGVJdGVtVmFsdWUgPSBmdW5jdGlvbiAoZmllbGQsIGl0ZW1faW5kZXgpIHtcbiAgICByZXR1cm4gU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpW2l0ZW1faW5kZXhdO1xufVxuXG5TdGVlZG9zVGFibGUucmVtb3ZlVGFibGVJdGVtID0gZnVuY3Rpb24gKGZpZWxkLCBpdGVtX2luZGV4KSB7XG4gICAgdmFyIGl0ZW1fdmFsdWUgPSBTdGVlZG9zVGFibGUuZ2V0VGFibGVJdGVtVmFsdWUoZmllbGQsIGl0ZW1faW5kZXgpO1xuICAgIGl0ZW1fdmFsdWUucmVtb3ZlZCA9IHRydWU7XG59XG5cblN0ZWVkb3NUYWJsZS5zZXRUYWJsZVZhbHVlID0gZnVuY3Rpb24gKGZpZWxkLCB2YWx1ZSkge1xuICAgICQoXCJ0YWJsZVtuYW1lPSdcIiArIGZpZWxkICsgXCInXVwiKS52YWwoe1xuICAgICAgICB2YWw6IHZhbHVlXG4gICAgfSk7XG59XG5cblN0ZWVkb3NUYWJsZS5nZXRUYWJsZVZhbHVlID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgcmV0dXJuICQoXCJ0YWJsZVtuYW1lPSdcIiArIGZpZWxkICsgXCInXVwiKS52YWwoKS52YWw7XG59XG5cblN0ZWVkb3NUYWJsZS5nZXRWYWxpZFZhbHVlID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgdmFyIHZhbHVlID0gU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgdmFsaWRWYWx1ZSA9IFtdO1xuXG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAoIXYucmVtb3ZlZCkge1xuICAgICAgICAgICAgdmFsaWRWYWx1ZS5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbGlkVmFsdWU7XG59XG5cblxuU3RlZWRvc1RhYmxlLmhhbmRsZURhdGEgPSBmdW5jdGlvbiAoZmllbGQsIHZhbHVlcykge1xuXG4gICAgaWYgKCF2YWx1ZXMgfHwgISh2YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICB2YXIgZmllbGRPYmogPSBTdGVlZG9zVGFibGUuZ2V0RmllbGQoZmllbGQpO1xuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgZmllbGRPYmouc2ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgICAgICBpZiAoZi50eXBlID09ICd1c2VyJyB8fCBmLnR5cGUgPT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZbZi5jb2RlXVxuICAgICAgICAgICAgICAgIGlmIChmLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiAodmFsdWVbMF0pID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2W2YuY29kZV0gPSB2W2YuY29kZV0uZ2V0UHJvcGVydHkoXCJpZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlKSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdltmLmNvZGVdID0gdltmLmNvZGVdLmlkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT0gJ2RhdGVUaW1lJykge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZbZi5jb2RlXVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHZhbHVlLnNwbGl0KFwiVFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQxID0gdFsxXS5zcGxpdChcIjpcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSB0MFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoID0gdDBbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gdDBbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBob3VycyA9IHQxWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHQxWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRhdGUsIGhvdXJzLCBzZWNvbmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZbZi5jb2RlXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXM7XG59XG5cblN0ZWVkb3NUYWJsZS5nZXRGaWVsZCA9IGZ1bmN0aW9uIChmaWVsZCkge1xuICAgIHZhciBpbnN0YW5jZUZpZWxkcyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZpZWxkcygpO1xuICAgIGlmICghaW5zdGFuY2VGaWVsZHMpXG4gICAgICAgIHJldHVybjtcblxuICAgIHZhciBmaWVsZE9iaiA9IGluc3RhbmNlRmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGZpZWxkKTtcblxuICAgIHJldHVybiBmaWVsZE9iajtcbn1cblxuXG5TdGVlZG9zVGFibGUuZ2V0TW9kYWxEYXRhID0gZnVuY3Rpb24gKGZpZWxkLCBpbmRleCkge1xuXG4gICAgdmFyIGRhdGEgPSB7fTtcblxuICAgIHZhciBmaWVsZE9iaiA9IFN0ZWVkb3NUYWJsZS5nZXRGaWVsZChmaWVsZCk7XG5cbiAgICBpZiAoIWZpZWxkT2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLmZpZWxkID0gZmllbGRPYmo7XG5cbiAgICBkYXRhLmZpZWxkLmZvcm11bGEgPSBGb3JtX2Zvcm11bGEuZ2V0Rm9ybXVsYUZpZWxkVmFyaWFibGUoXCJGb3JtX2Zvcm11bGEuZmllbGRfdmFsdWVzXCIsIGZpZWxkT2JqLnNmaWVsZHMpO1xuXG4gICAgZGF0YS52YWx1ZSA9IHt9O1xuXG4gICAgZGF0YS52YWx1ZVtmaWVsZF0gPSBTdGVlZG9zVGFibGUuZ2V0VGFibGVJdGVtVmFsdWUoZmllbGQsIGluZGV4KTtcblxuICAgIGRhdGEuaW5kZXggPSBpbmRleDtcblxuICAgIHJldHVybiBkYXRhO1xufVxuXG5cblxuU3RlZWRvc1RhYmxlLmdldEl0ZW1Nb2RhbFZhbHVlID0gZnVuY3Rpb24gKGZpZWxkLCBpdGVtX2luZGV4KSB7XG5cbiAgICBpZiAoIUF1dG9Gb3JtLmdldEZvcm1WYWx1ZXMoXCJzdGVlZG9zX3RhYmxlX21vZGFsX1wiICsgZmllbGQgKyBcIl9cIiArIGl0ZW1faW5kZXgpKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIHZhciBpdGVtX3ZhbHVlID0gQXV0b0Zvcm0uZ2V0Rm9ybVZhbHVlcyhcInN0ZWVkb3NfdGFibGVfbW9kYWxfXCIgKyBmaWVsZCArIFwiX1wiICsgaXRlbV9pbmRleCkuaW5zZXJ0RG9jW2ZpZWxkXTtcbiAgICByZXR1cm4gaXRlbV92YWx1ZTtcbn1cblxuXG5TdGVlZG9zVGFibGUuYWRkSXRlbSA9IGZ1bmN0aW9uIChmaWVsZCwgaW5kZXgsIF9pdGVtX3ZhbHVlKSB7XG4gICAgdmFyIGtleXMgPSBTdGVlZG9zVGFibGUuZ2V0S2V5cyhmaWVsZCk7XG4gICAgdmFyIGl0ZW1fdmFsdWUgPSBfaXRlbV92YWx1ZSB8fCBTdGVlZG9zVGFibGUuZ2V0SXRlbU1vZGFsVmFsdWUoZmllbGQsIGluZGV4KTtcbiAgICAkKFwidGJvZHlbbmFtZT0nXCIgKyBmaWVsZCArIFwiVGJvZHknXVwiKS5hcHBlbmQoU3RlZWRvc1RhYmxlLmdldFRyKGtleXMsIGl0ZW1fdmFsdWUsIGluZGV4LCBmaWVsZCwgdHJ1ZSkpXG5cbn1cblxuU3RlZWRvc1RhYmxlLnVwZGF0ZUl0ZW0gPSBmdW5jdGlvbiAoZmllbGQsIGluZGV4LCBfaXRlbV92YWx1ZSkge1xuXG4gICAgdmFyIGl0ZW0gPSAkKFwidHJbbmFtZT0nXCIgKyBmaWVsZCArIFwiX2l0ZW1fXCIgKyBpbmRleCArIFwiJ11cIik7XG5cbiAgICB2YXIgaXRlbV92YWx1ZSA9IF9pdGVtX3ZhbHVlIHx8IFN0ZWVkb3NUYWJsZS5nZXRJdGVtTW9kYWxWYWx1ZShmaWVsZCwgaW5kZXgpO1xuXG4gICAgaWYgKGl0ZW0gJiYgaXRlbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gU3RlZWRvc1RhYmxlLmdldEtleXMoZmllbGQpO1xuICAgICAgICB2YXIgdGRzID0gU3RlZWRvc1RhYmxlLmdldFJlbW92ZVRkKGZpZWxkLCBpbmRleCk7XG5cbiAgICAgICAgdmFyIHNmaWVsZHMgPSBTdGVlZG9zVGFibGUuZ2V0RmllbGQoZmllbGQpLnNmaWVsZHM7XG5cbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciBzZmllbGQgPSBzZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGtleSk7XG5cbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1fdmFsdWVba2V5XTtcblxuICAgICAgICAgICAgdGRzID0gdGRzICsgU3RlZWRvc1RhYmxlLmdldFRkKHNmaWVsZCwgaW5kZXgsIHZhbHVlKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdGVtLmVtcHR5KCk7XG5cbiAgICAgICAgaXRlbS5hcHBlbmQodGRzKTtcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgICAgU3RlZWRvc1RhYmxlLmFkZEl0ZW0oZmllbGQsIGluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAoU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpKSB7XG5cbiAgICAgICAgU3RlZWRvc1RhYmxlLnNldFRhYmxlSXRlbVZhbHVlKGZpZWxkLCBpbmRleCwgaXRlbV92YWx1ZSk7XG5cbiAgICAgICAgLy9TdGVlZG9zVGFibGUudmFsdWVIYXNoW2ZpZWxkXVtpbmRleF0gPSBpdGVtX3ZhbHVlO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy9TdGVlZG9zVGFibGUudmFsdWVIYXNoW2ZpZWxkXSA9IFtpdGVtX3ZhbHVlXTtcblxuICAgICAgICBTdGVlZG9zVGFibGUuc2V0VGFibGVWYWx1ZShmaWVsZCwgW2l0ZW1fdmFsdWVdKVxuXG4gICAgfVxuXG4gICAgLy/miafooYzkuLvooajlhazlvI/orqHnrpdcbiAgICBJbnN0YW5jZU1hbmFnZXIucnVuRm9ybXVsYShmaWVsZCk7XG5cbn1cblxuU3RlZWRvc1RhYmxlLnJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoZmllbGQsIGluZGV4KSB7XG5cbiAgICAkKFwidHJbbmFtZT0nXCIgKyBmaWVsZCArIFwiX2l0ZW1fXCIgKyBpbmRleCArIFwiJ11cIikuaGlkZSgpO1xuXG4gICAgU3RlZWRvc1RhYmxlLnJlbW92ZVRhYmxlSXRlbShmaWVsZCwgaW5kZXgpO1xuXG4gICAgSW5zdGFuY2VNYW5hZ2VyLnJ1bkZvcm11bGEoZmllbGQpO1xufVxuXG5TdGVlZG9zVGFibGUuc2hvd01vZGFsID0gZnVuY3Rpb24gKGZpZWxkLCBpbmRleCwgbWV0aG9kKSB7XG5cblxuICAgIHZhciBtb2RhbERhdGEgPSBTdGVlZG9zVGFibGUuZ2V0TW9kYWxEYXRhKGZpZWxkLCBpbmRleCk7XG5cbiAgICBtb2RhbERhdGEubWV0aG9kID0gbWV0aG9kO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgTW9kYWwuc2hvdyhcInN0ZWVkb3NUYWJsZU1vZGFsXCIsIG1vZGFsRGF0YSk7XG4gICAgfSwgMzAwKVxufVxuXG5TdGVlZG9zVGFibGUuZ2V0S2V5cyA9IGZ1bmN0aW9uIChmaWVsZCkge1xuICAgIGlmICghQXV0b0Zvcm0uZ2V0Q3VycmVudERhdGFGb3JGb3JtKFN0ZWVkb3NUYWJsZS5mb3JtSWQpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgc3MgPSBBdXRvRm9ybS5nZXRGb3JtU2NoZW1hKFN0ZWVkb3NUYWJsZS5mb3JtSWQpO1xuXG4gICAgdmFyIGtleXMgPSBbXTtcblxuICAgIGlmIChzcy5zY2hlbWEoZmllbGQgKyBcIi4kXCIpLnR5cGUgPT09IE9iamVjdCkge1xuICAgICAgICBrZXlzID0gc3Mub2JqZWN0S2V5cyhTaW1wbGVTY2hlbWEuX21ha2VHZW5lcmljKGZpZWxkKSArICcuJCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXM7XG5cbn1cblxuU3RlZWRvc1RhYmxlLmdldFRoZWFkID0gZnVuY3Rpb24gKGZpZWxkLCBlZGl0YWJsZSkge1xuXG4gICAgdmFyIGZpZWxkT2JqID0gZmllbGQ7XG4gICAgaWYgKCFfLmlzT2JqZWN0KGZpZWxkKSlcbiAgICAgICAgZmllbGRPYmogPSBTdGVlZG9zVGFibGUuZ2V0RmllbGQoZmllbGQpO1xuXG4gICAgaWYgKCFmaWVsZE9iaikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgdmFyIHRoZWFkID0gJycsXG4gICAgICAgIHRycyA9ICcnLFxuICAgICAgICBsYWJlbCA9ICcnLFxuICAgICAgICB3aWR0aCA9IDEwMDtcblxuICAgIGlmIChlZGl0YWJsZSkge1xuICAgICAgICAvLyB0cnMgPSBcIjx0aCBjbGFzcz0ncmVtb3ZlZCc+PC90aD5cIlxuICAgICAgICB0cnMgPSBcIlwiXG4gICAgfVxuXG4gICAgdmFyIHNmaWVsZHMgPSBmaWVsZE9iai5zZmllbGRzO1xuXG4gICAgaWYgKCFzZmllbGRzKSB7XG4gICAgICAgIHJldHVybiB0aGVhZDtcbiAgICB9XG5cbiAgICB2YXIgc2ZfbGVuZ3RoID0gc2ZpZWxkcy5sZW5ndGg7XG5cbiAgICBpZiAoc2ZfbGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgd2lkZV9maWVsZHMgPSBzZmllbGRzLmZpbHRlclByb3BlcnR5KFwiaXNfd2lkZVwiLCB0cnVlKTtcblxuICAgICAgICB3aWR0aCA9IDEwMCAvIChzZl9sZW5ndGggKyB3aWRlX2ZpZWxkcy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHNmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoc2YsIGluZGV4KSB7XG5cbiAgICAgICAgbGFiZWwgPSAoc2YubmFtZSAhPSBudWxsICYmIHNmLm5hbWUubGVuZ3RoID4gMCkgPyBzZi5uYW1lIDogc2YuY29kZTtcblxuICAgICAgICB0cnMgPSB0cnMgKyBcIjx0ZCBcIjsgLy8gbm93cmFwPSdub3dyYXAnXG5cbiAgICAgICAgdHJzID0gdHJzICsgXCIgY2xhc3M9J3RpdGxlIFwiICsgc2YudHlwZSArIFwiJ1wiO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSAoc2ZfbGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAgIGlmIChzZi5pc193aWRlKSB7XG4gICAgICAgICAgICAgICAgdHJzID0gdHJzICsgXCJzdHlsZT0nd2lkdGg6XCIgKyB3aWR0aCAqIDIgKyBcIiUnXCJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJzID0gdHJzICsgXCJzdHlsZT0nd2lkdGg6XCIgKyB3aWR0aCArIFwiJSdcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHJzID0gdHJzICsgXCI+XCIgKyBsYWJlbCArIFwiPC90ZD5cIlxuICAgIH0pO1xuXG4gICAgdGhlYWQgPSAnPHRyPicgKyB0cnMgKyAnPC90cj4nO1xuXG4gICAgcmV0dXJuIHRoZWFkO1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0VGJvZHkgPSBmdW5jdGlvbiAoa2V5cywgZmllbGQsIHZhbHVlcywgZWRpdGFibGUsIHNmaWVsZHNFZGl0YWJsZSkge1xuICAgIHZhciB0Ym9keSA9IFwiXCI7XG5cbiAgICBpZiAodmFsdWVzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICAgICAgdGJvZHkgPSB0Ym9keSArIFN0ZWVkb3NUYWJsZS5nZXRUcihrZXlzLCB2YWx1ZSwgaW5kZXgsIGZpZWxkLCBlZGl0YWJsZSwgc2ZpZWxkc0VkaXRhYmxlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRib2R5O1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0VHIgPSBmdW5jdGlvbiAoa2V5cywgaXRlbV92YWx1ZSwgaW5kZXgsIGZpZWxkLCBlZGl0YWJsZSwgc2ZpZWxkc0VkaXRhYmxlKSB7XG5cbiAgICB2YXIgZmllbGRPYmogPSBmaWVsZDtcbiAgICBpZiAoIV8uaXNPYmplY3QoZmllbGQpKVxuICAgICAgICBmaWVsZE9iaiA9IFN0ZWVkb3NUYWJsZS5nZXRGaWVsZChmaWVsZCk7XG5cbiAgICB2YXIgdHIgPSBcIjx0ciBpZD0nXCIgKyBmaWVsZE9iai5jb2RlICsgXCJfaXRlbV9cIiArIGluZGV4ICsgXCInIG5hbWU9J1wiICsgZmllbGRPYmouY29kZSArIFwiX2l0ZW1fXCIgKyBpbmRleCArIFwiJyBkYXRhLWluZGV4PSdcIiArIGluZGV4ICsgXCInXCJcblxuICAgIGlmIChlZGl0YWJsZSB8fCBzZmllbGRzRWRpdGFibGUpIHtcbiAgICAgICAgdHIgPSB0ciArIFwiJyBjbGFzcz0naXRlbSBlZGl0J1wiXG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgdHIgPSB0ciArIFwiIGNsYXNzPSdpdGVtIGl0ZW0tcmVhZG9ubHknXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyID0gdHIgKyBcIiBjbGFzcz0naXRlbSAnXCJcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpdGVtX3ZhbHVlLnJlbW92ZWQpIHtcbiAgICAgICAgdHIgPSB0ciArIFwiIHN0eWxlPSdkaXNwbGF5Om5vbmUnIFwiO1xuICAgIH1cblxuICAgIHRyID0gdHIgKyBcIic+XCI7XG5cbiAgICB2YXIgdGRzID0gXCJcIjtcblxuICAgIGlmIChlZGl0YWJsZSkge1xuICAgICAgICB0ZHMgPSBTdGVlZG9zVGFibGUuZ2V0UmVtb3ZlVGQoZmllbGRPYmouY29kZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHZhciBzZmllbGRzID0gZmllbGRPYmouc2ZpZWxkcztcblxuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBzZmllbGQgPSBzZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGtleSk7XG5cbiAgICAgICAgdmFyIHZhbHVlID0gaXRlbV92YWx1ZVtrZXldO1xuXG4gICAgICAgIHRkcyA9IHRkcyArIFN0ZWVkb3NUYWJsZS5nZXRUZChzZmllbGQsIGluZGV4LCB2YWx1ZSk7XG5cbiAgICB9KTtcblxuICAgIHRyID0gdHIgKyB0ZHMgKyBcIjwvdHI+XCI7XG4gICAgcmV0dXJuIHRyO1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0UmVtb3ZlVGQgPSBmdW5jdGlvbiAoZmllbGQsIGluZGV4KSB7XG4gICAgLy8gcmV0dXJuIFwiPHRkIGNsYXNzPSdzdGVlZG9zVGFibGUtaXRlbS1yZW1vdmUgcmVtb3ZlZCcgZGF0YS1pbmRleD0nXCIgKyBpbmRleCArIFwiJz48aSBjbGFzcz0nZmEgZmEtdGltZXMnIGFyaWEtaGlkZGVuPSd0cnVlJz48L3RkPlwiO1xuICAgIHJldHVybiBcIlwiXG59XG5cblN0ZWVkb3NUYWJsZS5nZXRUZCA9IGZ1bmN0aW9uIChmaWVsZCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgdmFyIHRkID0gXCI8dGQgXCI7XG5cbiAgICB0ZCA9IHRkICsgXCIgY2xhc3M9J3N0ZWVkb3NUYWJsZS1pdGVtLWZpZWxkIFwiICsgZmllbGQudHlwZSArIFwiJyBcIjtcblxuICAgIHZhciB0ZF92YWx1ZSA9IFwiXCI7XG5cbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICAgIHRkX3ZhbHVlID0gU3RlZWRvc1RhYmxlLmdldFREVmFsdWUoZmllbGQsIHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGVcblxuICAgICAgICB1dGNPZmZzZXQgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEudXRjT2Zmc2V0XG5cbiAgICAgICAgdGRfdmFsdWUgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUodmFsdWUsIGZpZWxkLCBsb2NhbGUsIHV0Y09mZnNldClcbiAgICB9XG5cbiAgICB0ZCA9IHRkICsgXCIgZGF0YS1pbmRleD0nXCIgKyBpbmRleCArIFwiJz5cIiArIHRkX3ZhbHVlICsgXCI8L3RkPlwiXG5cbiAgICByZXR1cm4gdGQ7XG59XG5cblxuU3RlZWRvc1RhYmxlLmdldFREVmFsdWUgPSBmdW5jdGlvbiAoZmllbGQsIHZhbHVlKSB7XG4gICAgdmFyIHRkX3ZhbHVlID0gXCJcIjtcbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0ZF92YWx1ZVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB2YXIgZmllbGRPcHRpb25zID0gW107XG4gICAgICAgIGlmKFtcInNlbGVjdFwiLCBcIm11bHRpU2VsZWN0XCIsIFwicmFkaW9cIl0uaW5kZXhPZihmaWVsZC50eXBlKSA+IC0xKXtcbiAgICAgICAgICAgIGZpZWxkT3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKG4pe1xuICAgICAgICAgICAgICAgIHZhciBpdGVtU3BsaXRzID0gbi5zcGxpdChcIjpcIilcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbVNwbGl0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1TcGxpdHNbMV0gfHwgblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICd1c2VyJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiAodmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhU3BhY2VVc2Vycyh2YWx1ZSkuZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZS5nZXRQcm9wZXJ0eShcIm5hbWVcIikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1ID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhU3BhY2VVc2Vycyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB1ID8gdS5uYW1lIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiAodmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhT3JnYW5pemF0aW9ucyh2YWx1ZSkuZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZS5nZXRQcm9wZXJ0eShcIm5hbWVcIikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhT3JnYW5pemF0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IG8gPyBvLm5hbWUgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF95ZXNcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF9ub1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbWFpbCc6XG4gICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZSA/IFwiPGEgaHJlZj0nbWFpbHRvOlwiICsgdmFsdWUgKyBcIic+XCIgKyB2YWx1ZSArIFwiPC9hPlwiIDogXCJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3VybCc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiaHR0cFwiKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gXCI8YSBocmVmPSdcIiArIGVuY29kZVVSSSh2YWx1ZSkgKyBcIicgdGFyZ2V0PSdfYmxhbmsnPlwiICsgdmFsdWUgKyBcIjwvYT5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IFwiPGEgaHJlZj0nJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IFwiPGEgaHJlZj0naHR0cDovL1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+aHR0cDovL1wiICsgdmFsdWUgKyBcIjwvYT5cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICAgICAgICAgICAgdGRfdmFsdWUgPSAnKioqKioqJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHZhbHVlLnNwbGl0KFwiLVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSB0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IHRbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gJC5mb3JtYXQuZGF0ZSh2YWx1ZSwgJ3l5eXktTU0tZGQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdmFsdWUuc3BsaXQoXCJUXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQwID0gdFswXS5zcGxpdChcIi1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdDEgPSB0WzFdLnNwbGl0KFwiOlwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9IHQwWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0MFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgPSB0MFsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzID0gdDFbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gdDFbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXRlLCBob3Vycywgc2Vjb25kcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9ICQuZm9ybWF0LmRhdGUodmFsdWUsICd5eXl5LU1NLWRkIEhIOm1tJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBmaWVsZE9wdGlvbnMuZmluZChmdW5jdGlvbihpdGVtKXsgcmV0dXJuIGl0ZW0udmFsdWUgPT0gdmFsdWU7IH0pXG4gICAgICAgICAgICAgICAgaWYoc2VsZWN0ZWRPcHRpb24pe1xuICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IHNlbGVjdGVkT3B0aW9uLmxhYmVsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmFkaW8nOlxuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKGZ1bmN0aW9uKGl0ZW0peyByZXR1cm4gaXRlbS52YWx1ZSA9PSB2YWx1ZTsgfSlcbiAgICAgICAgICAgICAgICBpZihzZWxlY3RlZE9wdGlvbil7XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubGFiZWxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtdWx0aVNlbGVjdCc6XG4gICAgICAgICAgICAgICAgdmFyIHNwbGl0ZWRWYWx1ZXMgPSB2YWx1ZS5zcGxpdChcIixcIik7XG4gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkT3B0aW9ucyA9IGZpZWxkT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7IHJldHVybiBzcGxpdGVkVmFsdWVzLmluZGV4T2YoaXRlbS52YWx1ZSkgPiAtMTsgfSk7XG4gICAgICAgICAgICAgICAgaWYoc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbihpdGVtKXsgcmV0dXJuIGl0ZW0ubGFiZWw7IH0pLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIHx8IHZhbHVlID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzX3BlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gU3RlZWRvcy5udW1iZXJUb1BlcmNlbnRTdHJpbmcodmFsdWUsIGZpZWxkLmRpZ2l0cyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IFN0ZWVkb3MubnVtYmVyVG9TdHJpbmcodmFsdWUsIGZpZWxkLmRpZ2l0cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvZGF0YSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pc19tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSBfLnBsdWNrKHZhbHVlLCAnQGxhYmVsJykudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZVsnQGxhYmVsJ11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgICAgICAgY2FzZSAnbG9va3VwJzpcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFZhbHVlKHZhbHVlLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZSA/IHZhbHVlIDogJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGU7XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdGRfdmFsdWU7XG59O1xuXG5pZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgQXV0b0Zvcm0uYWRkSW5wdXRUeXBlKFwidGFibGVcIiwge1xuICAgICAgICB0ZW1wbGF0ZTogXCJhZlRhYmxlXCIsXG4gICAgICAgIHZhbHVlT3V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZGF0YShcInNjaGVtYUtleVwiKTtcbiAgICAgICAgICAgIHJldHVybiBTdGVlZG9zVGFibGUuZ2V0VmFsaWRWYWx1ZShuYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWVDb252ZXJ0ZXJzOiB7XG4gICAgICAgICAgICBcInN0cmluZ0FycmF5XCI6IEF1dG9Gb3JtLnZhbHVlQ29udmVydGVycy5zdHJpbmdUb1N0cmluZ0FycmF5LFxuICAgICAgICAgICAgXCJudW1iZXJcIjogQXV0b0Zvcm0udmFsdWVDb252ZXJ0ZXJzLnN0cmluZ1RvTnVtYmVyLFxuICAgICAgICAgICAgXCJudW1lckFycmF5XCI6IEF1dG9Gb3JtLnZhbHVlQ29udmVydGVycy5zdHJpbmdUb051bWJlckFycmF5LFxuICAgICAgICAgICAgXCJib29sZWFuXCI6IEF1dG9Gb3JtLnZhbHVlQ29udmVydGVycy5zdHJpbmdUb0Jvb2xlYW4sXG4gICAgICAgICAgICBcImJvb2xlYW5BcnJheVwiOiBBdXRvRm9ybS52YWx1ZUNvbnZlcnRlcnMuc3RyaW5nVG9Cb29sZWFuQXJyYXksXG4gICAgICAgICAgICBcImRhdGVcIjogQXV0b0Zvcm0udmFsdWVDb252ZXJ0ZXJzLnN0cmluZ1RvRGF0ZSxcbiAgICAgICAgICAgIFwiZGF0ZUFycmF5XCI6IEF1dG9Gb3JtLnZhbHVlQ29udmVydGVycy5zdHJpbmdUb0RhdGVBcnJheVxuICAgICAgICB9LFxuICAgICAgICBjb250ZXh0QWRqdXN0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0LmF0dHMubWF4bGVuZ3RoID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29udGV4dC5tYXggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5hdHRzLm1heGxlbmd0aCA9IGNvbnRleHQubWF4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIFRlbXBsYXRlLmFmVGFibGUuZXZlbnRzKHtcbiAgICAgICAgJ3RhcCAuc3RlZWRvcy10YWJsZSAuc3RlZWRvc1RhYmxlLWl0ZW0tYWRkLC5hZGQtaXRlbS10cic6IGZ1bmN0aW9uIChldmVudCwgdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gdGVtcGxhdGUuZGF0YS5uYW1lO1xuXG4gICAgICAgICAgICB2YXIgdGFibGVWYWx1ZSA9IFN0ZWVkb3NUYWJsZS5nZXRUYWJsZVZhbHVlKG5hbWUpO1xuXG4gICAgICAgICAgICB2YXIgbmV3X2l0ZW1faW5kZXggPSB0YWJsZVZhbHVlID8gdGFibGVWYWx1ZS5sZW5ndGggOiAwO1xuXG4gICAgICAgICAgICBTdGVlZG9zVGFibGUuc2hvd01vZGFsKG5hbWUsIG5ld19pdGVtX2luZGV4LCBcImFkZFwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICAndGFwIC5zdGVlZG9zLXRhYmxlIC5zdGVlZG9zVGFibGUtaXRlbS1maWVsZCc6IGZ1bmN0aW9uIChldmVudCwgdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5kYXRhLmF0dHMuZWRpdGFibGUgfHwgdGVtcGxhdGUuZGF0YS5hdHRzLnNmaWVsZHNFZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IHRlbXBsYXRlLmRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuaW5kZXg7XG4gICAgICAgICAgICAgICAgU3RlZWRvc1RhYmxlLnNob3dNb2RhbChmaWVsZCwgaW5kZXgsIFwiZWRpdFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAndGFwIC5zdGVlZG9zLXRhYmxlIC5zdGVlZG9zVGFibGUtaXRlbS1yZW1vdmUnOiBmdW5jdGlvbiAoZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgICAgICAgICB2YXIgZmllbGQgPSB0ZW1wbGF0ZS5kYXRhLm5hbWU7XG4gICAgICAgICAgICB2YXIgaXRlbV9pbmRleCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC5pbmRleDtcbiAgICAgICAgICAgIFNlc3Npb24uc2V0KFwiaW5zdGFuY2VfY2hhbmdlXCIsIHRydWUpO1xuICAgICAgICAgICAgU3RlZWRvc1RhYmxlLnJlbW92ZUl0ZW0oZmllbGQsIGl0ZW1faW5kZXgpO1xuICAgICAgICB9LFxuXG4gICAgICAgICd0YXAgLnN0ZWVkb3MtdGFibGUgLml0ZW0tcmVhZG9ubHknOiBmdW5jdGlvbiAoZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgICAgICAgICBpZiAoIXRlbXBsYXRlLmRhdGEuYXR0cy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IHRlbXBsYXRlLmRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuaW5kZXg7XG4gICAgICAgICAgICAgICAgU3RlZWRvc1RhYmxlLnNob3dNb2RhbChmaWVsZCwgaW5kZXgsIFwicmVhZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG5cblxuICAgIFRlbXBsYXRlLmFmVGFibGUucmVuZGVyZWQgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIGZpZWxkID0gdGhpcy5kYXRhLm5hbWU7XG5cbiAgICAgICAgdmFyIHNmaWVsZHNFZGl0YWJsZSA9IHRoaXMuZGF0YS5hdHRzLnNmaWVsZHNFZGl0YWJsZTtcblxuICAgICAgICB2YXIga2V5cyA9IFN0ZWVkb3NUYWJsZS5nZXRLZXlzKGZpZWxkKTtcbiAgICAgICAgdmFyIHZhbGlkVmFsdWUgPSBTdGVlZG9zVGFibGUuaGFuZGxlRGF0YShmaWVsZCwgdGhpcy5kYXRhLnZhbHVlKTtcbiAgICAgICAgU3RlZWRvc1RhYmxlLnNldFRhYmxlVmFsdWUoZmllbGQsIHZhbGlkVmFsdWUpO1xuXG4gICAgICAgICQoXCJ0aGVhZFtuYW1lPSdcIiArIGZpZWxkICsgXCJUaGVhZCddXCIpLmh0bWwoU3RlZWRvc1RhYmxlLmdldFRoZWFkKGZpZWxkLCB0aGlzLmRhdGEuYXR0cy5lZGl0YWJsZSkpO1xuXG4gICAgICAgICQoXCJ0Ym9keVtuYW1lPSdcIiArIGZpZWxkICsgXCJUYm9keSddXCIpLmh0bWwoU3RlZWRvc1RhYmxlLmdldFRib2R5KGtleXMsIGZpZWxkLCBTdGVlZG9zVGFibGUuZ2V0VGFibGVWYWx1ZShmaWVsZCksIHRoaXMuZGF0YS5hdHRzLmVkaXRhYmxlLCBzZmllbGRzRWRpdGFibGUpKTtcblxuICAgICAgICBzdHIgPSB0KFwic3RlZWRvc190YWJsZV9hZGRfaXRlbVwiKTtcbiAgICAgICAgYWRkSXRlbVRyID0gXCI8dHIgY2xhc3M9J2FkZC1pdGVtLXRyJz48dGQgY29sc3Bhbj0nXCIgKyBrZXlzLmxlbmd0aCArIFwiJz48aSBjbGFzcz0naW9uIGlvbi1wbHVzLXJvdW5kJz48L2k+XCIgKyBzdHIgKyBcIjwvdGQ+PC90cj5cIjtcblxuICAgICAgICBpZiAodGhpcy5kYXRhLmF0dHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICQoXCJ0Zm9vdFtuYW1lPSdcIiArIGZpZWxkICsgXCJUZm9vdCddXCIpLmFwcGVuZChhZGRJdGVtVHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcbiAgICAgICAgaWYgKGMuc3RlcF90eXBlID09ICdjb3VudGVyU2lnbicgfHwgSW5zdGFuY2VNYW5hZ2VyLmNjSGFzRWRpdFBlcm1pc3Npb24oKSkge1xuICAgICAgICAgICAgdGhpcy5hdXRvcnVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IFRlbXBsYXRlLmN1cnJlbnREYXRhKCk7XG4gICAgICAgICAgICAgICAgdmFyIGZpZWxkID0gZGF0YS5uYW1lO1xuICAgICAgICAgICAgICAgIHZhciBrZXlzID0gU3RlZWRvc1RhYmxlLmdldEtleXMoZmllbGQpO1xuICAgICAgICAgICAgICAgIHZhciB2YWxpZFZhbHVlID0gU3RlZWRvc1RhYmxlLmhhbmRsZURhdGEoZmllbGQsIGRhdGEudmFsdWUpO1xuICAgICAgICAgICAgICAgIFN0ZWVkb3NUYWJsZS5zZXRUYWJsZVZhbHVlKGZpZWxkLCB2YWxpZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAkKFwidGJvZHlbbmFtZT0nXCIgKyBmaWVsZCArIFwiVGJvZHknXVwiKS5odG1sKFN0ZWVkb3NUYWJsZS5nZXRUYm9keShrZXlzLCBmaWVsZCwgU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpLCBkYXRhLmF0dHMuZWRpdGFibGUsIHNmaWVsZHNFZGl0YWJsZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgfTtcbn0iLCJJbWFnZVNpZ24uaGVscGVycyA9XG5cdHNwYWNlVXNlclNpZ246ICh1c2VySWQpLT5cblx0XHRzcGFjZSA9IFwiXCJcblxuXHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0c3BhY2UgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuc3BhY2Vcblx0XHRlbHNlXG5cdFx0XHRzcGFjZSA9IFNlc3Npb24uZ2V0KFwic3BhY2VJZFwiKVxuXG5cdFx0c3BhY2VVc2VyU2lnbiA9IGRiLnNwYWNlX3VzZXJfc2lnbnMuZmluZE9uZSh7c3BhY2U6IHNwYWNlLCB1c2VyOiB1c2VySWR9KTtcblx0XHRyZXR1cm4gc3BhY2VVc2VyU2lnblxuXG5cdGltYWdlVVJMOiAodXNlcklkKS0+XG5cblx0XHRzcGFjZVVzZXJTaWduID0gSW1hZ2VTaWduLmhlbHBlcnMuc3BhY2VVc2VyU2lnbih1c2VySWQpO1xuXG5cdFx0YWJzb2x1dGUgPSBmYWxzZVxuXG5cdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRhYnNvbHV0ZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5hYnNvbHV0ZVxuXG5cdFx0aWYgc3BhY2VVc2VyU2lnbj8uc2lnblxuXHRcdFx0aWYgYWJzb2x1dGVcblx0XHRcdFx0cmV0dXJuIE1ldGVvci5hYnNvbHV0ZVVybChcImFwaS9maWxlcy9hdmF0YXJzL1wiICsgc3BhY2VVc2VyU2lnbi5zaWduKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0cmV0dXJuIFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJhcGkvZmlsZXMvYXZhdGFycy9cIiArIHNwYWNlVXNlclNpZ24uc2lnbik7XG4iLCJJbWFnZVNpZ24uaGVscGVycyA9IHtcbiAgc3BhY2VVc2VyU2lnbjogZnVuY3Rpb24odXNlcklkKSB7XG4gICAgdmFyIHNwYWNlLCBzcGFjZVVzZXJTaWduO1xuICAgIHNwYWNlID0gXCJcIjtcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBzcGFjZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5zcGFjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3BhY2UgPSBTZXNzaW9uLmdldChcInNwYWNlSWRcIik7XG4gICAgfVxuICAgIHNwYWNlVXNlclNpZ24gPSBkYi5zcGFjZV91c2VyX3NpZ25zLmZpbmRPbmUoe1xuICAgICAgc3BhY2U6IHNwYWNlLFxuICAgICAgdXNlcjogdXNlcklkXG4gICAgfSk7XG4gICAgcmV0dXJuIHNwYWNlVXNlclNpZ247XG4gIH0sXG4gIGltYWdlVVJMOiBmdW5jdGlvbih1c2VySWQpIHtcbiAgICB2YXIgYWJzb2x1dGUsIHNwYWNlVXNlclNpZ247XG4gICAgc3BhY2VVc2VyU2lnbiA9IEltYWdlU2lnbi5oZWxwZXJzLnNwYWNlVXNlclNpZ24odXNlcklkKTtcbiAgICBhYnNvbHV0ZSA9IGZhbHNlO1xuICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgIGFic29sdXRlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmFic29sdXRlO1xuICAgIH1cbiAgICBpZiAoc3BhY2VVc2VyU2lnbiAhPSBudWxsID8gc3BhY2VVc2VyU2lnbi5zaWduIDogdm9pZCAwKSB7XG4gICAgICBpZiAoYWJzb2x1dGUpIHtcbiAgICAgICAgcmV0dXJuIE1ldGVvci5hYnNvbHV0ZVVybChcImFwaS9maWxlcy9hdmF0YXJzL1wiICsgc3BhY2VVc2VyU2lnbi5zaWduKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBTdGVlZG9zLmFic29sdXRlVXJsKFwiYXBpL2ZpbGVzL2F2YXRhcnMvXCIgKyBzcGFjZVVzZXJTaWduLnNpZ24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsIlRyYWNlc0hhbmRsZXIuaGVscGVycyA9XG5cdHNob3dTaWduSW1hZ2U6IChoYW5kbGVyLCBpc19maW5pc2hlZCwganVkZ2UsIHRyYWNlU2hvd1NpZ25JbWFnZSkgLT5cblx0XHRpZiB0cmFjZVNob3dTaWduSW1hZ2UgPT0gZmFsc2Vcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGlmICFpc19maW5pc2hlZFxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0aWYgWydyZXR1cm5lZCcsICd0ZXJtaW5hdGVkJywgJ3JldHJpZXZlZCddLmluY2x1ZGVzKGp1ZGdlKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0c3BhY2VVc2VyU2lnbiA9IEltYWdlU2lnbi5oZWxwZXJzLnNwYWNlVXNlclNpZ24oaGFuZGxlcilcblxuXHRcdGlmIHNwYWNlVXNlclNpZ24/LnNpZ25cblx0XHRcdHJldHVybiB0cnVlXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0b2JqZWN0VXJsOiAob2JqZWN0X25hbWUsIHJlY29yZF9pZCwgYXBwX2lkKS0+XG5cdFx0cmV0dXJuIENyZWF0b3IuZ2V0T2JqZWN0VXJsKG9iamVjdF9uYW1lLCByZWNvcmRfaWQsIGFwcF9pZCkiLCJUcmFjZXNIYW5kbGVyLmhlbHBlcnMgPSB7XG4gIHNob3dTaWduSW1hZ2U6IGZ1bmN0aW9uKGhhbmRsZXIsIGlzX2ZpbmlzaGVkLCBqdWRnZSwgdHJhY2VTaG93U2lnbkltYWdlKSB7XG4gICAgdmFyIHNwYWNlVXNlclNpZ247XG4gICAgaWYgKHRyYWNlU2hvd1NpZ25JbWFnZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFpc19maW5pc2hlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoWydyZXR1cm5lZCcsICd0ZXJtaW5hdGVkJywgJ3JldHJpZXZlZCddLmluY2x1ZGVzKGp1ZGdlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzcGFjZVVzZXJTaWduID0gSW1hZ2VTaWduLmhlbHBlcnMuc3BhY2VVc2VyU2lnbihoYW5kbGVyKTtcbiAgICBpZiAoc3BhY2VVc2VyU2lnbiAhPSBudWxsID8gc3BhY2VVc2VyU2lnbi5zaWduIDogdm9pZCAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgb2JqZWN0VXJsOiBmdW5jdGlvbihvYmplY3RfbmFtZSwgcmVjb3JkX2lkLCBhcHBfaWQpIHtcbiAgICByZXR1cm4gQ3JlYXRvci5nZXRPYmplY3RVcmwob2JqZWN0X25hbWUsIHJlY29yZF9pZCwgYXBwX2lkKTtcbiAgfVxufTtcbiIsIm1hcmtlZCA9IHJlcXVpcmUoXCJtYXJrZWRcIilcbkluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMgPVxuXHRhcHBsaWNhbnRDb250ZXh0OiAtPlxuXHRcdHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRkYXRhID0ge1xuXHRcdFx0bmFtZTogJ2luc19hcHBsaWNhbnQnLFxuXHRcdFx0YXR0czoge25hbWU6ICdpbnNfYXBwbGljYW50JywgaWQ6ICdpbnNfYXBwbGljYW50JywgY2xhc3M6ICdzZWxlY3RVc2VyIGZvcm0tY29udHJvbCBpbnNfYXBwbGljYW50J30sXG5cdFx0XHR2YWx1ZTogc3RlZWRvc19pbnN0YW5jZS5hcHBsaWNhbnRfbmFtZVxuXHRcdH1cblx0XHRpZiBub3Qgc3RlZWRvc19pbnN0YW5jZSB8fCBzdGVlZG9zX2luc3RhbmNlLnN0YXRlICE9IFwiZHJhZnRcIlxuXHRcdFx0ZGF0YS5hdHRzLmRpc2FibGVkID0gdHJ1ZVxuXHRcdHJldHVybiBkYXRhO1xuXG5cdGluc3RhbmNlSWQ6IC0+XG5cdFx0cmV0dXJuICdpbnN0YW5jZWZvcm0nOyNcImluc3RhbmNlX1wiICsgU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpO1xuXG5cdGZvcm1fdHlwZXM6IC0+XG5cdFx0aWYgQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpXG5cdFx0XHRyZXR1cm4gJ2Rpc2FibGVkJztcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gJ21ldGhvZCc7XG5cblx0c3RlZWRvc19mb3JtOiAtPlxuXHRcdGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG5cdFx0aWYgZm9ybV92ZXJzaW9uXG5cdFx0XHRyZXR1cm4gZm9ybV92ZXJzaW9uXG5cblx0aW5uZXJzdWJmb3JtQ29udGV4dDogKG9iaiktPlxuXHRcdGRvY192YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG5cdFx0b2JqW1widGFibGVWYWx1ZXNcIl0gPSBpZiBkb2NfdmFsdWVzIHRoZW4gZG9jX3ZhbHVlc1tvYmouY29kZV0gZWxzZSBbXVxuXHRcdG9ialtcImZvcm1JZFwiXSA9IFwiaW5zdGFuY2Vmb3JtXCI7XG5cdFx0cmV0dXJuIG9iajtcblxuXHRpbnN0YW5jZTogLT5cblx0XHRTZXNzaW9uLmdldChcImNoYW5nZV9kYXRlXCIpXG5cdFx0aWYgKFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKSlcblx0XHRcdHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRcdHJldHVybiBzdGVlZG9zX2luc3RhbmNlO1xuXG5cdGVtcHR5OiAodmFsKSAtPlxuXHRcdGlmIHZhbFxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0dW5lbXB0eTogKHZhbCkgLT5cblx0XHRpZiB2YWxcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRlcXVhbHM6IChhLCBiKSAtPlxuXHRcdHJldHVybiAoYSA9PSBiKVxuXG5cdHVuZXF1YWxzOiAoYSwgYikgLT5cblx0XHRyZXR1cm4gIShhID09IGIpXG5cblx0aW5jbHVkZXM6IChhLCBiKSAtPlxuXHRcdHJldHVybiBiLnNwbGl0KCcsJykuaW5jbHVkZXMoYSk7XG5cblx0aW5jbHVkZTogKGEsIGIpIC0+XG5cdFx0cmV0dXJuIGIuc3BsaXQoJywnKS5pbmNsdWRlcyhhKTtcblxuXHRmaWVsZHM6IC0+XG5cdFx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcblx0XHRpZiBmb3JtX3ZlcnNpb25cblx0XHRcdHJldHVybiBuZXcgU2ltcGxlU2NoZW1hKFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWEoZm9ybV92ZXJzaW9uKSk7XG5cblx0Zm9ybWF0RGF0ZTogKGRhdGUsIG9wdGlvbnMpLT5cblx0XHRpZiAhZGF0ZVxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0aWYgb3B0aW9ucyAmJiB0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZydcblx0XHRcdG9wdGlvbnMgPSBKU09OLnBhcnNlKG9wdGlvbnMpO1xuXG5cdFx0aWYgIW9wdGlvbnMuZm9ybWF0XG5cdFx0XHRvcHRpb25zID0ge2Zvcm1hdDogXCJZWVlZLU1NLUREIEhIOm1tXCJ9XG5cblx0XHRyZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChvcHRpb25zLmZvcm1hdCk7XG5cblx0dHJhY2VzOiAtPlxuXHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0c3RlZWRvc0RhdGEgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpPy52aWV3Py50ZW1wbGF0ZT8uc3RlZWRvc0RhdGFcblx0XHRcdGluc3RhbmNlID0gc3RlZWRvc0RhdGE/Lmluc3RhbmNlXG5cdFx0XHRmbG93ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEZsb3dWZXJzaW9uKGluc3RhbmNlKTtcblx0XHRcdGxvY2FsZSA9IHN0ZWVkb3NEYXRhPy5sb2NhbGVcblx0XHRcdGlmIGxvY2FsZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09ICd6aC1jbidcblx0XHRcdFx0bG9jYWxlID0gXCJ6aC1DTlwiXG5cdFx0ZWxzZVxuXHRcdFx0aW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblxuXHRcdFx0ZmxvdyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZsb3dWZXJzaW9uKClcblxuXHRcdFx0bG9jYWxlID0gU2Vzc2lvbi5nZXQoXCJUQVBpMThuOjpsb2FkZWRfbGFuZ1wiKVxuXG5cdFx0aWYgIWluc3RhbmNlIHx8ICFmbG93XG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRzdGVwcyA9IGZsb3cuc3RlcHM7XG5cblx0XHR0cmFjZXMgPSB7fTtcblxuXHRcdGluc3RhbmNlLnRyYWNlcz8uZm9yRWFjaCAodHJhY2UpLT5cblx0XHRcdHN0ZXAgPSBzdGVwcy5maW5kUHJvcGVydHlCeVBLKFwiX2lkXCIsIHRyYWNlLnN0ZXApXG5cblx0XHRcdGFwcHJvdmVzID0gW11cblxuXHRcdFx0dHJhY2UuYXBwcm92ZXM/LmZvckVhY2ggKGFwcHJvdmUpIC0+XG5cdFx0XHRcdGlmIHRyYWNlLmlzX2ZpbmlzaGVkID09IHRydWVcbiMg5bey57uT5p2f55qE5pi+56S65Li65qC45YeGL+mps+Wbni/lj5bmtojnlLPor7dcblx0XHRcdFx0XHRpZiBhcHByb3ZlLmp1ZGdlID09ICdhcHByb3ZlZCdcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgYXBwcm92ZWRcIiwge30sIGxvY2FsZSlcblx0XHRcdFx0XHRlbHNlIGlmIGFwcHJvdmUuanVkZ2UgPT0gJ3JlamVjdGVkJ1xuXHRcdFx0XHRcdFx0anVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSByZWplY3RlZFwiLCB7fSwgbG9jYWxlKVxuXHRcdFx0XHRcdGVsc2UgaWYgYXBwcm92ZS5qdWRnZSA9PSAndGVybWluYXRlZCdcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgdGVybWluYXRlZFwiLCB7fSwgbG9jYWxlKVxuXHRcdFx0XHRcdGVsc2UgaWYgYXBwcm92ZS5qdWRnZSA9PSAncmVhc3NpZ25lZCdcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcmVhc3NpZ25lZFwiLCB7fSwgbG9jYWxlKVxuXHRcdFx0XHRcdGVsc2UgaWYgYXBwcm92ZS5qdWRnZSA9PSAncmVsb2NhdGVkJ1xuXHRcdFx0XHRcdFx0anVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSByZWxvY2F0ZWRcIiwge30sIGxvY2FsZSlcblx0XHRcdFx0XHRlbHNlIGlmIGFwcHJvdmUuanVkZ2UgPT0gJydcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBcIlwiXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0anVkZ2VfbmFtZSA9IFwiXCJcblxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0anVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSBwZW5kaW5nXCIsIHt9LCBsb2NhbGUpXG5cblx0XHRcdFx0YXBwcm92ZXMucHVzaFxuXHRcdFx0XHRcdF9pZDogYXBwcm92ZS5faWRcblx0XHRcdFx0XHRoYW5kbGVyOiBhcHByb3ZlLnVzZXJcblx0XHRcdFx0XHRoYW5kbGVyX25hbWU6IGFwcHJvdmUuaGFuZGxlcl9uYW1lXG5cdFx0XHRcdFx0aGFuZGxlcl9vcmdhbml6YXRpb25fbmFtZTogYXBwcm92ZS5oYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lXG5cdFx0XHRcdFx0aGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWU6IGFwcHJvdmUuaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWVcblx0XHRcdFx0XHRmaW5pc2hfZGF0ZTogYXBwcm92ZS5maW5pc2hfZGF0ZVxuXHRcdFx0XHRcdGp1ZGdlOiBhcHByb3ZlLmp1ZGdlXG5cdFx0XHRcdFx0anVkZ2VfbmFtZToganVkZ2VfbmFtZVxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBhcHByb3ZlLmRlc2NyaXB0aW9uXG5cdFx0XHRcdFx0aXNfZmluaXNoZWQ6IGFwcHJvdmUuaXNfZmluaXNoZWRcblx0XHRcdFx0XHR0eXBlOiBhcHByb3ZlLnR5cGVcblx0XHRcdFx0XHRvcGluaW9uX2ZpZWxkc19jb2RlOiBhcHByb3ZlLm9waW5pb25fZmllbGRzX2NvZGVcblx0XHRcdFx0XHRzaWduX2ZpZWxkX2NvZGU6IGFwcHJvdmUuc2lnbl9maWVsZF9jb2RlXG5cdFx0XHRcdFx0aXNfcmVhZDogYXBwcm92ZS5pc19yZWFkXG5cdFx0XHRcdFx0c2lnbl9zaG93OiBhcHByb3ZlLnNpZ25fc2hvd1xuXG5cblx0XHRcdGlmIHN0ZXBcblx0XHRcdFx0aWYgc3RlcC5uYW1lIG9mIHRyYWNlc1xuXHRcdFx0XHRcdHRyYWNlc1tzdGVwLm5hbWVdID0gdHJhY2VzW3N0ZXAubmFtZV0uY29uY2F0KGFwcHJvdmVzKVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dHJhY2VzW3N0ZXAubmFtZV0gPSBhcHByb3Zlc1xuXG5cdFx0cmV0dXJuIHRyYWNlcztcblxuXG5cblx0ZG9jX3ZhbHVlczogLT5cblx0XHRXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG5cblx0aW5zdGFuY2VfYm94X3N0eWxlOiAtPlxuXHRcdGJveCA9IFNlc3Npb24uZ2V0KFwiYm94XCIpXG5cdFx0aWYgYm94ID09IFwiaW5ib3hcIiB8fCBib3ggPT0gXCJkcmFmdFwiXG5cdFx0XHRqdWRnZSA9IFNlc3Npb24uZ2V0KFwianVkZ2VcIilcblx0XHRcdGlmIGp1ZGdlXG5cdFx0XHRcdGlmIChqdWRnZSA9PSBcImFwcHJvdmVkXCIpXG5cdFx0XHRcdFx0cmV0dXJuIFwiYm94LXN1Y2Nlc3NcIlxuXHRcdFx0XHRlbHNlIGlmIChqdWRnZSA9PSBcInJlamVjdGVkXCIpXG5cdFx0XHRcdFx0cmV0dXJuIFwiYm94LWRhbmdlclwiXG5cdFx0aW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgaW5zICYmIGlucy5maW5hbF9kZWNpc2lvblxuXHRcdFx0aWYgaW5zLmZpbmFsX2RlY2lzaW9uID09IFwiYXBwcm92ZWRcIlxuXHRcdFx0XHRyZXR1cm4gXCJib3gtc3VjY2Vzc1wiXG5cdFx0XHRlbHNlIGlmIChpbnMuZmluYWxfZGVjaXNpb24gPT0gXCJyZWplY3RlZFwiKVxuXHRcdFx0XHRyZXR1cm4gXCJib3gtZGFuZ2VyXCJcblxuI2lzX2Rpc2FibGVkOiAtPlxuIyAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiMgICAgaWYgIWluc1xuIyAgICAgICAgcmV0dXJuO1xuIyAgICBpZiBpbnMuc3RhdGUhPVwiZHJhZnRcIlxuIyAgICAgICAgcmV0dXJuIFwiZGlzYWJsZWRcIjtcbiMgICAgcmV0dXJuO1xuXG5cdHRhYmxlX2ZpZWxkczogKGluc3RhbmNlKS0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuXHRcdGVsc2Vcblx0XHRcdGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRGb3JtVmVyc2lvbihpbnN0YW5jZS5mb3JtLCBpbnN0YW5jZS5mb3JtX3ZlcnNpb24pXG5cdFx0aWYgZm9ybV92ZXJzaW9uXG5cdFx0XHRmaWVsZHMgPSBfLmNsb25lKGZvcm1fdmVyc2lvbi5maWVsZHMpO1xuXG5cdFx0XHRmaWVsZHMuZm9yRWFjaCAoZmllbGQsIGluZGV4KSAtPlxuXHRcdFx0XHRmaWVsZC50cl9zdGFydCA9IFwiXCI7XG5cdFx0XHRcdGZpZWxkLnRyX2VuZCA9IFwiXCI7XG5cdFx0XHRcdHRkX2NvbHNwYW4gPSAxO1xuI1x0XHRcdFx05by65Yi26K6+572u5qCH5aS05a2X5q615Li65a695a2X5q61XG5cdFx0XHRcdGlmIENvcmVGb3JtPy5wYWdlVGl0bGVGaWVsZE5hbWUgPT0gZmllbGQuY29kZVxuXHRcdFx0XHRcdGZpZWxkLmlzX3dpZGUgPSB0cnVlXG5cblx0XHRcdFx0aWYgZmllbGQuZm9ybXVsYSAmJiBmaWVsZC50eXBlICE9ICdvZGF0YSdcblx0XHRcdFx0XHRmaWVsZC5wZXJtaXNzaW9uID0gXCJyZWFkb25seVwiO1xuXG5cdFx0XHRcdGlmIFN0ZWVkb3MuaXNNb2JpbGUoKVxuIyDlpoLmnpzlvZPliY3lrZfmrrXmmK/liIbnu4TjgIHooajmoLzjgIHlrr3lrZfmrrVcblx0XHRcdFx0XHRpZiBmaWVsZC50eXBlID09ICdzZWN0aW9uJyB8fCBmaWVsZC50eXBlID09ICd0YWJsZSdcblx0XHRcdFx0XHRcdGZpZWxkLnRkX2NvbHNwYW4gPSA0O1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGZpZWxkLnRkX2NvbHNwYW4gPSAzO1xuXG5cdFx0XHRcdFx0aWYgaW5kZXggIT0gMFxuXHRcdFx0XHRcdFx0ZmllbGQudHJfc3RhcnQgPSBcIjx0cj5cIjtcblx0XHRcdFx0XHRcdGZpZWxkLnRyX2VuZCA9IFwiPC90cj5cIjtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHByZV9maWVsZHMgPSBmaWVsZHMuc2xpY2UoMCwgaW5kZXgpO1xuXG5cdFx0XHRcdFx0cHJlX3dpZGVfZmllbGRzID0gcHJlX2ZpZWxkcy5maWx0ZXJQcm9wZXJ0eShcImlzX3dpZGVcIiwgdHJ1ZSk7XG5cblx0XHRcdFx0XHR0cl9zdGFydCA9IFwiXCI7XG5cblx0XHRcdFx0XHR0cl9lbmQgPSBcIlwiO1xuXG5cdFx0XHRcdFx0IyDlhYjorqHnrpflvZPliY3lrZfmrrXmmK/lkKbkuLrlrr3lrZfmrrVcblx0XHRcdFx0XHRiZWZvcmVfZmllbGQgPSBudWxsO1xuXHRcdFx0XHRcdGFmdGVyX2ZpZWxkID0gbnVsbDtcblxuXHRcdFx0XHRcdGlmIGluZGV4ID4gMFxuXHRcdFx0XHRcdFx0YmVmb3JlX2ZpZWxkID0gZmllbGRzW2luZGV4IC0gMV1cblxuXHRcdFx0XHRcdGlmIGluZGV4IDwgZmllbGRzLmxlbmd0aCAtIDFcblx0XHRcdFx0XHRcdGFmdGVyX2ZpZWxkID0gZmllbGRzW2luZGV4ICsgMV1cblxuXHRcdFx0XHRcdCMg5aaC5p6c5b2T5YmN5a2X5q615piv5YiG57uE44CB6KGo5qC844CB5a695a2X5q61XG5cdFx0XHRcdFx0aWYgZmllbGQudHlwZSA9PSAnc2VjdGlvbicgfHwgZmllbGQudHlwZSA9PSAndGFibGUnXG5cdFx0XHRcdFx0XHR0ZF9jb2xzcGFuID0gNDtcblx0XHRcdFx0XHRlbHNlIGlmIGZpZWxkLmlzX3dpZGVcblx0XHRcdFx0XHRcdHRkX2NvbHNwYW4gPSAzO1xuXHRcdFx0XHRcdGVsc2VcbiMg5YmN5ZCO6YO95piv5a695a2X5q61XG5cdFx0XHRcdFx0XHRpZiBiZWZvcmVfZmllbGQgJiYgYWZ0ZXJfZmllbGQgJiYgYmVmb3JlX2ZpZWxkLmlzX3dpZGUgJiYgYWZ0ZXJfZmllbGQuaXNfd2lkZVxuXHRcdFx0XHRcdFx0XHRmaWVsZC5pc193aWRlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0dGRfY29sc3BhbiA9IDM7XG5cblx0XHRcdFx0XHRcdCMg5b2T5YmN5pivdHIg5LiL55qEIOesrOS4gOS4qnRkICYg5ZCO6L6555qE5a2X5q615piv5a695a2X5q61XG5cdFx0XHRcdFx0XHRpZiAocHJlX2ZpZWxkcy5sZW5ndGggKyBwcmVfd2lkZV9maWVsZHMubGVuZ3RoKSAlIDIgPT0gMCAmJiBhZnRlcl9maWVsZCAmJiBhZnRlcl9maWVsZC5pc193aWRlXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmlzX3dpZGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR0ZF9jb2xzcGFuID0gMztcblxuXHRcdFx0XHRcdFx0IyDlvZPliY3mmK90ciDkuIvnmoQg56ys5LiA5LiqdGQgJiDlvZPliY3lrZfmrrXmmK/mnIDlkI7kuIDkuKrlrZfmrrVcblx0XHRcdFx0XHRcdGlmIChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiA9PSAwICYmIGFmdGVyX2ZpZWxkID09IG51bGxcblx0XHRcdFx0XHRcdFx0ZmllbGQuaXNfd2lkZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHRkX2NvbHNwYW4gPSAzO1xuXG5cdFx0XHRcdFx0ZmllbGQudGRfY29sc3BhbiA9IHRkX2NvbHNwYW47XG5cblxuXHRcdFx0XHRcdGlmIGluZGV4ID09IDBcbiMgdHJfc3RhcnQgPSBcIjx0cj5cIjsg55Sx5LqOVGVtcGxhdGXnmoTnvJbor5FidWfvvIzlr7zoh7Tmr4/mrKHnu5nkuIDkuKp0cuW8gOWni+aXtu+8jOS8muiHquWKqOihpeWktOaIluihpeWwvuOAguWboOatpOWcqOesrOS4gOihjOi/lOWbnuS4gOS4quepuuWtl+espuS4si5cblx0XHRcdFx0XHRcdHRyX3N0YXJ0ID0gXCI8dHI+XCI7XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0aWYgKHByZV9maWVsZHMubGVuZ3RoICsgcHJlX3dpZGVfZmllbGRzLmxlbmd0aCkgJSAyID09IDAgfHwgZmllbGQuaXNfd2lkZVxuXHRcdFx0XHRcdFx0XHRpZiBmaWVsZC50eXBlID09ICd0YWJsZSdcblx0XHRcdFx0XHRcdFx0XHR0cl9zdGFydCA9IFwiPHRyIGNsYXNzID0gXFxcInRyLWNoaWxkLXRhYmxlXFxcIj5cIjtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHRyX3N0YXJ0ID0gXCI8dHI+XCI7XG5cblx0XHRcdFx0XHRmaWVsZC50cl9zdGFydCA9IHRyX3N0YXJ0O1xuXG5cblx0XHRcdFx0XHRpZiBpbmRleCArIDEgPT0gZmllbGRzLmxlbmd0aCB8fCBmaWVsZC50eXBlID09ICdzZWN0aW9uJyB8fCBmaWVsZC50eXBlID09ICd0YWJsZScgfHwgZmllbGQuaXNfd2lkZVxuXHRcdFx0XHRcdFx0dHJfZW5kID0gXCI8L3RyPlwiO1xuXG5cdFx0XHRcdFx0aWYgKHByZV9maWVsZHMubGVuZ3RoICsgcHJlX3dpZGVfZmllbGRzLmxlbmd0aCkgJSAyICE9IDBcblx0XHRcdFx0XHRcdHRyX2VuZCA9IFwiPC90cj5cIjtcblxuXHRcdFx0XHRcdGZpZWxkLnRyX2VuZCA9IHRyX2VuZDtcblxuXHRcdFx0cmV0dXJuIGZpZWxkcztcblxuXHRzb3J0X2FwcHJvdmU6IChhcHByb3Zlcywgb3JkZXIpLT5cblx0XHRpZiAhYXBwcm92ZXNcblx0XHRcdHJldHVybiBbXVxuXG5cdFx0aWYgIWFwcHJvdmVzIGluc3RhbmNlb2YgQXJyYXlcblx0XHRcdHJldHVybiBbXVxuXHRcdGVsc2Vcblx0XHRcdGlmIG9yZGVyID09ICdkZXNjJ1xuXHRcdFx0XHRhcHByb3Zlcy5zb3J0IChwMSwgcDIpIC0+XG5cdFx0XHRcdFx0X3AxID0gMFxuXHRcdFx0XHRcdF9wMiA9IDBcblxuXHRcdFx0XHRcdGlmIHAxLmZpbmlzaF9kYXRlXG5cdFx0XHRcdFx0XHRfcDEgPSBwMS5maW5pc2hfZGF0ZS5nZXRUaW1lKClcblxuXHRcdFx0XHRcdGlmIHAyLmZpbmlzaF9kYXRlXG5cdFx0XHRcdFx0XHRfcDIgPSBwMi5maW5pc2hfZGF0ZS5nZXRUaW1lKCk7XG5cblx0XHRcdFx0XHRyZXR1cm4gX3AyIC0gX3AxXG5cdFx0XHRlbHNlXG5cdFx0XHRcdGFwcHJvdmVzLnNvcnQgKHAxLCBwMikgLT5cblx0XHRcdFx0XHRfcDEgPSAwXG5cdFx0XHRcdFx0X3AyID0gMFxuXG5cdFx0XHRcdFx0aWYgcDEuZmluaXNoX2RhdGVcblx0XHRcdFx0XHRcdF9wMSA9IHAxLmZpbmlzaF9kYXRlLmdldFRpbWUoKVxuXG5cdFx0XHRcdFx0aWYgcDIuZmluaXNoX2RhdGVcblx0XHRcdFx0XHRcdF9wMiA9IHAyLmZpbmlzaF9kYXRlLmdldFRpbWUoKTtcblxuXHRcdFx0XHRcdHJldHVybiBfcDEgLSBfcDJcblx0XHRyZXR1cm4gYXBwcm92ZXNcblxuXHRfdDogKGtleSktPlxuXHRcdHJldHVybiBUQVBpMThuLl9fKGtleSlcblx0Z2V0RmllbGQ6IChjb2RlKS0+XG5cdFx0Zm9ybV92ZXJzaW9uID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvblxuXHRcdGlmIGZvcm1fdmVyc2lvblxuXHRcdFx0cmV0dXJuIGZvcm1fdmVyc2lvbi5maWVsZHMuZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgY29kZSlcblxuXHRnZXRWYWx1ZTogKGNvZGUpLT5cblx0XHRpbnN0YW5jZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5pbnN0YW5jZVxuXG5cdFx0Zm9ybV92ZXJzaW9uID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvblxuXG5cdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXG5cdFx0dXRjT2Zmc2V0ID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLnV0Y09mZnNldFxuXG5cdFx0dmFsdWVzID0gaW5zdGFuY2UudmFsdWVzIHx8IHt9XG5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdHZhbHVlcyA9IFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWFWYWx1ZXMoKVxuXG5cdFx0cmV0dXJuIEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRWYWx1ZSB2YWx1ZXNbY29kZV0sIGZvcm1fdmVyc2lvbi5maWVsZHMuZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgY29kZSksIGxvY2FsZSwgdXRjT2Zmc2V0XG5cblx0Z2V0TGFiZWw6IChjb2RlKS0+XG5cdFx0Zm9ybV92ZXJzaW9uID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvblxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRMYWJlbCBmb3JtX3ZlcnNpb24uZmllbGRzLCBjb2RlXG5cblx0aXNUZXh0YXJlYTogKGZpZWxkKS0+XG5cdFx0aWYgZmllbGQ/LnR5cGUgPT0gXCJpbnB1dFwiICYmIGZpZWxkPy5pc190ZXh0YXJlYVxuXHRcdFx0cmV0dXJuIHRydWVcblxuXHRnZXRDZkNsYXNzOiAoZmllbGQpLT5cblx0XHRpZiBmaWVsZD8udHlwZSA9PSBcImlucHV0XCIgJiYgZmllbGQ/LmlzX3RleHRhcmVhXG5cdFx0XHRyZXR1cm4gXCJjZlRleHRhcmVhXCJcblxuXHRnZXRUYWJsZVRoZWFkOiAoZmllbGQpLT5cblx0XHRyZXR1cm4gU3RlZWRvc1RhYmxlLmdldFRoZWFkKGZpZWxkLCBmYWxzZSlcblxuXHRnZXRUYWJsZUJvZHk6IChmaWVsZCktPlxuXG5cdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRpbnN0YW5jZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5pbnN0YW5jZVxuXHRcdFx0dmFsdWVzID0gaW5zdGFuY2UudmFsdWVzIHx8IHt9XG5cdFx0ZWxzZVxuXHRcdFx0dmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpXG5cblx0XHR0YWJsZVZhbHVlID0gdmFsdWVzW2ZpZWxkLmNvZGVdO1xuXHRcdHJldHVybiBTdGVlZG9zVGFibGUuZ2V0VGJvZHkoZmllbGQuc2ZpZWxkcy5nZXRQcm9wZXJ0eShcImNvZGVcIiksIGZpZWxkLCB0YWJsZVZhbHVlLCBmYWxzZSlcblxuXHRzaG93TGFiZWw6IChmaWVsZCktPlxuXHRcdHRlbXBsYXRlRGF0YSA9IFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YVxuXHRcdGlmIHRlbXBsYXRlRGF0YS5sYWJlbCA9PSBmYWxzZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0cmV0dXJuIHRydWVcblxuI1x0YWZGaWVsZExhYmVsVGV4dDogKG9wKS0+XG4jXHRcdGlmICFUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGFcbiNcdFx0XHRyZXR1cm4gQXV0b0Zvcm0uZ2V0TGFiZWxGb3JGaWVsZChvcC5uYW1lKVxuI1x0XHRlbHNlXG4jXHRcdFx0Zm9ybV92ZXJzaW9uID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvblxuI1x0XHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRMYWJlbCBmb3JtX3ZlcnNpb24uZmllbGRzLCBvcD8uaGFzaD8ubmFtZVxuXG5cdGlzT3BpbmlvbkZpZWxkOiAoZmllbGQpLT5cblx0XHRyZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZC5mb3JtdWxhKVxuXG5cdGlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nOiAoZmllbGRfZm9ybXVsYSktPlxuXHRcdHJldHVybiBJbnN0YW5jZVNpZ25UZXh0LmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkX2Zvcm11bGEpXG5cblx0aW5jbHVkZXNPcGluaW9uRmllbGQ6IChmb3JtLCBmb3JtX3ZlcnNpb24pLT5cblxuXHRcdGZpZWxkX2Zvcm11bGFzID0gbmV3IEFycmF5KCk7XG5cblx0XHRmaWVsZHMgPSBkYi5mb3JtX3ZlcnNpb25zLmZpbmRPbmUoe19pZDogZm9ybV92ZXJzaW9uLCBmb3JtOiBmb3JtfSk/LmZpZWxkcyB8fCBbXVxuXG5cdFx0ZmllbGRzLmZvckVhY2ggKGYpLT5cblx0XHRcdGlmIGYudHlwZSA9PSAndGFibGUnXG5cdFx0XHRcdGNvbnNvbGUubG9nICdpZ25vcmUgb3BpbmlvbiBmaWVsZCBpbiB0YWJsZSdcblx0XHRcdGVsc2UgaWYgZi50eXBlID09ICdzZWN0aW9uJ1xuXHRcdFx0XHRmPy5maWVsZHM/LmZvckVhY2ggKGYxKS0+XG5cdFx0XHRcdFx0ZmllbGRfZm9ybXVsYXMucHVzaCBmMS5mb3JtdWxhXG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZpZWxkX2Zvcm11bGFzLnB1c2ggZi5mb3JtdWxhXG5cblx0XHRfLnNvbWUgZmllbGRfZm9ybXVsYXMsIChmaWVsZF9mb3JtdWxhKS0+XG5cdFx0XHRyZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZF9mb3JtdWxhKVxuXG5cdGdldE9waW5pb25GaWVsZFN0ZXBzTmFtZTogKGZpZWxkX2Zvcm11bGEsIHRvcF9rZXl3b3JkcyktPlxuXG5cdFx0b3BpbmlvbkZpZWxkcyA9IG5ldyBBcnJheSgpO1xuI1x0XHRjb25zb2xlLmxvZyhcImZpZWxkX2Zvcm11bGFcIiwgZmllbGRfZm9ybXVsYSlcblx0XHRpZiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkX2Zvcm11bGEpXG5cdFx0XHRpZiBmaWVsZF9mb3JtdWxhXG5cbiNcdFx0XHRcdGZvbzEgPSBmaWVsZF9mb3JtdWxhLnNwbGl0KFwiLFwiKVxuXHRcdFx0XHRmb28xID0gZmllbGRfZm9ybXVsYS5zcGxpdChcIjtcIilcblxuI1x0XHRcdFx0aWYgdG9wX2tleXdvcmRzXG4jXHRcdFx0XHRcdGZvbzEgPSBmaWVsZF9mb3JtdWxhLnNwbGl0KFwiO1wiKVxuXG5cdFx0XHRcdGZvbzEuZm9yRWFjaCAoZm9vKS0+XG5cdFx0XHRcdFx0anNvbl9mb3JtdWxhID0ge31cblxuXHRcdFx0XHRcdHRyeVxuXHRcdFx0XHRcdFx0anNvbl9mb3JtdWxhID0gZXZhbChcIihcIiArIGZvbyArIFwiKVwiKVxuXHRcdFx0XHRcdGNhdGNoXG5cdFx0XHRcdFx0XHRqc29uX2Zvcm11bGEgPSB7fVxuXG5cdFx0XHRcdFx0aWYganNvbl9mb3JtdWxhPy55aWppYW5sYW5cblx0XHRcdFx0XHRcdHNmID0ge31cblxuXHRcdFx0XHRcdFx0c2Yuc3RlcE5hbWUgPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLnN0ZXBcblxuXHRcdFx0XHRcdFx0c2YuaW1hZ2Vfc2lnbiA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4uaW1hZ2Vfc2lnbiB8fCBmYWxzZVxuXG5cdFx0XHRcdFx0XHRzZi5vbmx5X2NjX29waW5pb24gPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLm9ubHlfY2MgfHwgZmFsc2VcblxuXHRcdFx0XHRcdFx0c2YuZGVmYXVsdF9kZXNjcmlwdGlvbiA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4uZGVmYXVsdFxuXG5cdFx0XHRcdFx0XHRzZi5vbmx5X2hhbmRsZXIgPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLm9ubHlfaGFuZGxlclxuXG5cdFx0XHRcdFx0XHRzZi50b3Bfa2V5d29yZHMgPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLnRvcF9rZXl3b3JkcyB8fCB0b3Bfa2V5d29yZHNcblxuXHRcdFx0XHRcdFx0b3BpbmlvbkZpZWxkcy5wdXNoKHNmKTtcblxuXHRcdFx0XHRcdGVsc2UgaWYoZmllbGRfZm9ybXVsYT8uaW5kZXhPZihcInt0cmFjZXMuXCIpID4gLTEgfHwgZmllbGRfZm9ybXVsYT8uaW5kZXhPZihcIntzaWduYXR1cmUudHJhY2VzLlwiKSA+IC0xKVxuXG5cdFx0XHRcdFx0XHRzZiA9IHtvbmx5X2NjX29waW5pb246IGZhbHNlLCBpbWFnZV9zaWduOiBmYWxzZSwgdG9wX2tleXdvcmRzOiB0b3Bfa2V5d29yZHN9XG5cblx0XHRcdFx0XHRcdGlmIGZvby5pbmRleE9mKFwie3NpZ25hdHVyZS5cIikgPiAtMVxuXHRcdFx0XHRcdFx0XHRzZi5pbWFnZV9zaWduID0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHRmb28gPSBmb28ucmVwbGFjZShcIntzaWduYXR1cmUuXCIsXCJcIik7XG5cblx0XHRcdFx0XHRcdHMxID0gZm9vLnJlcGxhY2UoXCJ7XCIsXCJcIikucmVwbGFjZShcIn1cIixcIlwiKVxuXHRcdFx0XHRcdFx0aWYgczEuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDFcblx0XHRcdFx0XHRcdFx0c2Yuc3RlcE5hbWUgPSBzMS5zcGxpdChcIi5cIilbMV1cblx0XHRcdFx0XHRcdFx0aWYgb3BpbmlvbkZpZWxkcy5maWx0ZXJQcm9wZXJ0eShcInN0ZXBOYW1lXCIsc2Yuc3RlcE5hbWUpLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdFx0XHRvcGluaW9uRmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJzdGVwTmFtZVwiLCBzZi5zdGVwTmFtZSk/Lm9ubHlfY2Nfb3BpbmlvbiA9IHRydWVcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdGlmIHMxLnNwbGl0KFwiLlwiKS5sZW5ndGggPiAyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiBzMS5zcGxpdChcIi5cIilbMl0/LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gJ2NjJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzZi5vbmx5X2NjX29waW5pb24gPSB0cnVlXG5cdFx0XHRcdFx0XHRvcGluaW9uRmllbGRzLnB1c2goc2YpO1xuXG5cdFx0cmV0dXJuIG9waW5pb25GaWVsZHNcblxuXHRzaG93Q0NPcGluaW9uOiAoZmllbGQpLT5cblx0XHRpZiBmaWVsZC5mb3JtdWxhPy5pbmRleE9mKFwie3RyYWNlcy5cIikgPiAtMSB8fCBmaWVsZC5mb3JtdWxhPy5pbmRleE9mKFwie3NpZ25hdHVyZS50cmFjZXMuXCIpID4gLTFcblx0XHRcdHMxID0gZmllbGQuZm9ybXVsYS5yZXBsYWNlKFwie3NpZ25hdHVyZS5cIixcIlwiKS5yZXBsYWNlKFwie1wiLFwiXCIpLnJlcGxhY2UoXCJ9XCIsXCJcIilcblx0XHRcdGlmIHMxLnNwbGl0KFwiLlwiKS5sZW5ndGggPiAyXG5cdFx0XHRcdGlmIHMxLnNwbGl0KFwiLlwiKVsyXT8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnY2MnXG5cdFx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRyZXR1cm4gZmFsc2VcblxuXHRtYXJrRG93blRvSHRtbDogKG1hcmtEb3duU3RyaW5nKS0+XG5cdFx0aWYgbWFya0Rvd25TdHJpbmdcblx0XHRcdCMgcmVuZGVyZXIgPSBuZXcgTWFya2Rvd24uUmVuZGVyZXIoKTtcblx0XHRcdCMgcmVuZGVyZXIubGluayA9ICggaHJlZiwgdGl0bGUsIHRleHQgKSAtPlxuXHRcdFx0IyBcdHJldHVybiBcIjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPScje2hyZWZ9JyB0aXRsZT0nI3t0aXRsZX0nPiN7dGV4dH08L2E+XCJcblx0XHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0XHRtYXJrZWQgPSBOcG0ucmVxdWlyZSgnbWFya2VkJylcblx0XHRcdHJldHVybiBTcGFjZWJhcnMuU2FmZVN0cmluZyhtYXJrZWQucGFyc2UobWFya0Rvd25TdHJpbmcpKVxuXG5cdGZfbGFiZWw6ICh0aGF0KS0+XG5cdFx0cmV0dXJuIHRoYXQubmFtZSB8fCB0aGF0LmNvZGVcblxuaWYgTWV0ZW9yLmlzU2VydmVyXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuc3RlZWRvc19mb3JtID0gLT5cblx0XHRyZXR1cm4gdGhpcy5mb3JtX3ZlcnNpb25cblxuXHRJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzU2VjdGlvbiA9IChjb2RlKS0+XG5cdFx0Zm9ybV92ZXJzaW9uID0gdGhpcy5mb3JtX3ZlcnNpb25cblx0XHRyZXR1cm4gZm9ybV92ZXJzaW9uLmZpZWxkcy5maW5kUHJvcGVydHlCeVBLKFwiY29kZVwiLCBjb2RlKS50eXBlID09ICdzZWN0aW9uJ1xuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZG9jX3ZhbHVlcyA9IC0+XG5cdFx0aW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlO1xuXHRcdHJldHVybiBpbnN0YW5jZS52YWx1ZXM7XG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5hcHBsaWNhbnRDb250ZXh0ID0gLT5cblx0XHRpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2U7XG5cdFx0ZGF0YSA9IHtcblx0XHRcdG5hbWU6ICdpbnNfYXBwbGljYW50Jyxcblx0XHRcdGF0dHM6IHtuYW1lOiAnaW5zX2FwcGxpY2FudCcsIGlkOiAnaW5zX2FwcGxpY2FudCcsIGNsYXNzOiAnc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCd9LFxuXHRcdFx0dmFsdWU6IGluc3RhbmNlLmFwcGxpY2FudF9uYW1lXG5cdFx0fVxuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaW5zdGFuY2UgPSAtPlxuXHRcdHJldHVybiB0aGlzLmluc3RhbmNlXG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5maWVsZHMgPSAtPlxuXHRcdGZvcm1fdmVyc2lvbiA9IHRoaXMuZm9ybV92ZXJzaW9uXG5cdFx0aWYgZm9ybV92ZXJzaW9uXG5cdFx0XHRyZXR1cm4gbmV3IFNpbXBsZVNjaGVtYShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hKGZvcm1fdmVyc2lvbikpO1xuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZm9ybV90eXBlcyA9IC0+XG5cdFx0cmV0dXJuIFwiZGlzYWJsZWRcIlxuXG5cdFRlbXBsYXRlLnJlZ2lzdGVySGVscGVyIFwiYWZGaWVsZExhYmVsVGV4dFwiLCAob3ApLT5cblx0XHRmb3JtX3ZlcnNpb24gPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uXG5cdFx0SW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldExhYmVsIGZvcm1fdmVyc2lvbi5maWVsZHMsIG9wPy5oYXNoPy5uYW1lXG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5fdCA9IChrZXkpLT5cblx0XHRsb2NhbGUgPSB0aGlzLmxvY2FsZVxuXG5cdFx0cmV0dXJuIFRBUGkxOG4uX18oa2V5LCB7fSwgbG9jYWxlKVxuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaW5zX2F0dGFjaF9kb3dubG9hZF91cmwgPSAoX2lkLCBhYnNvbHV0ZSktPlxuXHRcdGlmIGFic29sdXRlXG5cdFx0XHRyZXR1cm4gTWV0ZW9yLmFic29sdXRlVXJsKFwiL2FwaS9maWxlcy9pbnN0YW5jZXMvI3tfaWR9P2Rvd25sb2FkPXRydWVcIik7XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIFwiL2FwaS9maWxlcy9pbnN0YW5jZXMvI3tfaWR9P2Rvd25sb2FkPXRydWVcIjtcblxuXHRJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLm9wdGlvbnMgPSAoZmllbGQpLT5cblx0XHRvcHRpb25zID0gZmllbGQ/Lm9wdGlvbnM/LnNwbGl0KFwiXFxuXCIpXG5cdFx0cmV2ID0gW11cblx0XHRvcHRpb25zPy5mb3JFYWNoIChpdGVtKS0+XG5cdFx0XHRyZXYucHVzaCh7bGFiZWw6IGl0ZW0sIHZhbHVlOiBpdGVtfSlcblxuXHRcdHJldHVybiByZXZcblxuXHRJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmdldFBlcm1pc3Npb25zID0gKGNvZGUpLT5cblx0XHRpZiAhVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLnN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzPy5pbmNsdWRlcyhjb2RlKVxuXHRcdFx0cmV0dXJuIFwicmVhZG9ubHkgZGlzYWJsZWRcIlxuXHRcdHJldHVybiBcIlwiXG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLmV2ZW50cyA9XG5cdCdjaGFuZ2UgLmZvcm0tY29udHJvbCwuY2hlY2tib3ggaW5wdXQsLmFmLXJhZGlvLWdyb3VwIGlucHV0LC5hZi1jaGVja2JveC1ncm91cCBpbnB1dCc6IChldmVudCktPlxuXHRcdEluc3RhbmNlTWFuYWdlci5pbnN0YW5jZWZvcm1DaGFuZ2VFdmVudChldmVudClcblxuXHQndHlwZWFoZWFkOmNoYW5nZSAuZm9ybS1jb250cm9sJzogKGV2ZW50KSAtPlxuXHRcdEluc3RhbmNlTWFuYWdlci5pbnN0YW5jZWZvcm1DaGFuZ2VFdmVudChldmVudClcblxuXHQnY2xpY2sgLmNmVGV4dGFyZWEgYSc6IChldmVudCktPlxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0U3RlZWRvcy5vcGVuV2luZG93KGV2ZW50LnRhcmdldC5ocmVmKTtcblxuXG5JbnN0YW5jZWZvcm1UZW1wbGF0ZS5vbkNyZWF0ZWQgPSAoKS0+XG5cdGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdGlmICFpbnN0YW5jZVxuXHRcdHJldHVybjtcblxuXHR0ZW1wbGF0ZSA9IFRlbXBsYXRlTWFuYWdlci5nZXRUZW1wbGF0ZShpbnN0YW5jZSk7XG5cblx0dHJ5XG5cdFx0Y29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHRlbXBsYXRlLCB7aXNCb2R5OiB0cnVlfSk7XG5cdGNhdGNoIGVcblx0XHRjb25zb2xlLmxvZyBcIkluc3RhbmNlIFRlbXBsYXRlIEVycm9yXCIsIGVcblx0XHRjb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUoXCJcIiwge2lzQm9keTogdHJ1ZX0pO1xuXG5cblx0cmVuZGVyRnVuY3Rpb24gPSBldmFsKGNvbXBpbGVkKTtcblxuXHRpbnN0YW5jZVZpZXcgPSBuZXcgQmxhemUuVmlldyhcImN1c3RvbV9pbnN0YW5jZV90ZW1wbGF0ZVwiLCByZW5kZXJGdW5jdGlvbik7XG5cblx0aW5zdGFuY2VDdXN0b21UZW1wbGF0ZSA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShpbnN0YW5jZVZpZXcubmFtZSwgcmVuZGVyRnVuY3Rpb24pO1xuXG5cdFRlbXBsYXRlLmluc3RhbmNlX2N1c3RvbV90ZW1wbGF0ZSA9IGluc3RhbmNlQ3VzdG9tVGVtcGxhdGVcblxuXHRUZW1wbGF0ZS5pbnN0YW5jZV9jdXN0b21fdGVtcGxhdGUuaGVscGVycyBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzXG5cblxuXG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLm9uUmVuZGVyZWQgPSAoKS0+XG5cdCMgdCA9IHRoaXM7XG5cblx0I3Quc3Vic2NyaWJlIFwiaW5zdGFuY2VfZGF0YVwiLCBTZXNzaW9uLmdldChcImluc3RhbmNlSWRcIiksIC0+XG5cdCMgICAgVHJhY2tlci5hZnRlckZsdXNoIC0+XG5cdGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdGlmICFpbnN0YW5jZVxuXHRcdHJldHVybjtcblxuXHQjJChcIiNpbnNfYXBwbGljYW50XCIpLnNlbGVjdDIoKS52YWwoaW5zdGFuY2UuYXBwbGljYW50KS50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0IyQoXCIjaW5zX2FwcGxpY2FudFwiKS52YWwoaW5zdGFuY2UuYXBwbGljYW50KTtcblx0SW5zdGFuY2VNYW5hZ2VyLnNldEluc3RhbmNlRm9ybUFwcGxpY2FudChpbnN0YW5jZS5hcHBsaWNhbnQsIGluc3RhbmNlLmFwcGxpY2FudF9uYW1lKVxuXG5cblx0QXBwcm92ZU1hbmFnZXIuZXJyb3IgPSB7bmV4dFN0ZXBzOiAnJywgbmV4dFN0ZXBVc2VyczogJyd9O1xuXG5cdCMgaW5zdGFuY2UgZnJvbee7keWumuS6i+S7tlxuXHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnIHx8IFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdkcmFmdCdcblx0XHRJbnN0YW5jZUV2ZW50LmluaXRFdmVudHMoaW5zdGFuY2UuZmxvdyk7XG5cblx0aWYgIUFwcHJvdmVNYW5hZ2VyLmlzUmVhZE9ubHkoKVxuXG5cdFx0Y3VycmVudEFwcHJvdmUgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudEFwcHJvdmUoKTtcblxuXG5cdFx0aW5zdGFuY2VOdW1iZXJGaWVsZHMgPSAkKFwiW2RhdGEtZm9ybXVsYV1cIiwgJChcIiNpbnN0YW5jZWZvcm1cIikpXG5cblx0XHRpbnN0YW5jZU51bWJlckZpZWxkcy5lYWNoICgpLT5cblx0XHRcdHNjaGVtYUtleSA9IHRoaXMuZGF0YXNldC5zY2hlbWFLZXlcblx0XHRcdGVsZW1lbnQgPSAkKHRoaXMpXG5cdFx0XHRpZiAhJCh0aGlzKS52YWwoKSAmJiBzY2hlbWFLZXkgJiYgU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpXG5cdFx0XHRcdE1ldGVvci5jYWxsICdnZXRJbnN0YW5jZVZhbHVlcycsIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKSwgKGVycm9yLCByZXN1bHQpLT5cblx0XHRcdFx0XHRpZiBlcnJvclxuXHRcdFx0XHRcdFx0dG9hc3RyLmVycm9yKGVycm9yLnJlYXNvbilcblxuXHRcdFx0XHRcdGlmICFyZXN1bHRbc2NoZW1hS2V5XVxuXHRcdFx0XHRcdFx0a2V5ID0gZWxlbWVudC5kYXRhKFwiZm9ybXVsYVwiKT8ucmVwbGFjZShcImF1dG9fbnVtYmVyKFwiLCBcIlwiKS5yZXBsYWNlKFwiKVwiLCBcIlwiKVxuXG5cdFx0XHRcdFx0XHRrZXkgPSBrZXkucmVwbGFjZSgvXFxcIi9nLCBcIlwiKS5yZXBsYWNlKC9cXCcvZywgXCJcIilcblxuXHRcdFx0XHRcdFx0aWYga2V5LmluZGV4T2YoXCJ7XCIpID4gLTFcblx0XHRcdFx0XHRcdFx0a2V5ID0ga2V5LnJlcGxhY2UoXCJ7XCIsXCJcIikucmVwbGFjZShcIn1cIixcIlwiKVxuXHRcdFx0XHRcdFx0XHRrZXkgPSBrZXkudHJpbSgpXG5cdFx0XHRcdFx0XHRcdGtleSA9IEF1dG9Gb3JtLmdldEZpZWxkVmFsdWUoa2V5LCAnaW5zdGFuY2Vmb3JtJylcblx0XHRcdFx0XHRcdEluc3RhbmNlTnVtYmVyUnVsZXMuaW5zdGFuY2VOdW1iZXJCdWlsZGVyIGVsZW1lbnQsIGtleVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGVsZW1lbnQ/LnZhbChyZXN1bHRbc2NoZW1hS2V5XSkudHJpZ2dlcihcImNoYW5nZVwiKVxuXG5cdFx0anVkZ2UgPSBjdXJyZW50QXBwcm92ZS5qdWRnZVxuXHRcdGN1cnJlbnRTdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKCk7XG5cdFx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcblxuXHRcdHVubGVzcyBmb3JtX3ZlcnNpb25cblx0XHRcdHJldHVyblxuXG5cdFx0dW5sZXNzIGZvcm1fdmVyc2lvbi5maWVsZHNcblx0XHRcdHJldHVyblxuXG5cdFx0Zm9ybXVsYV9maWVsZHMgPSBGb3JtX2Zvcm11bGEuZ2V0Rm9ybXVsYUZpZWxkVmFyaWFibGUoXCJGb3JtX2Zvcm11bGEuZmllbGRfdmFsdWVzXCIsIGZvcm1fdmVyc2lvbi5maWVsZHMpO1xuXHRcdGluc2VydERvYyA9IEF1dG9Gb3JtLmdldEZvcm1WYWx1ZXMoXCJpbnN0YW5jZWZvcm1cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKVxuXHRcdEZvcm1fZm9ybXVsYS5ydW4oXCJcIiwgXCJcIiwgZm9ybXVsYV9maWVsZHMsIGluc2VydERvYywgZm9ybV92ZXJzaW9uLmZpZWxkcyk7XG5cdFx0I+WcqOatpOWkhOWIneWni+WMlnNlc3Npb24g5Lit55qEIGZvcm1fdmFsdWVzIOWPmOmHj++8jOeUqOS6juinpuWPkeS4i+S4gOatpeatpemqpOiuoeeul1xuXHRcdFNlc3Npb24uc2V0KFwiaW5zdGFuY2VfZm9ybV92YWx1ZXNcIiwge2luc3RhbmNlSWQ6IGluc3RhbmNlLl9pZCwgdmFsdWVzOiBpbnNlcnREb2N9KTtcblxuXG5cbiIsInZhciBtYXJrZWQ7XG5cbm1hcmtlZCA9IHJlcXVpcmUoXCJtYXJrZWRcIik7XG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMgPSB7XG4gIGFwcGxpY2FudENvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBkYXRhLCBzdGVlZG9zX2luc3RhbmNlO1xuICAgIHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICBkYXRhID0ge1xuICAgICAgbmFtZTogJ2luc19hcHBsaWNhbnQnLFxuICAgICAgYXR0czoge1xuICAgICAgICBuYW1lOiAnaW5zX2FwcGxpY2FudCcsXG4gICAgICAgIGlkOiAnaW5zX2FwcGxpY2FudCcsXG4gICAgICAgIFwiY2xhc3NcIjogJ3NlbGVjdFVzZXIgZm9ybS1jb250cm9sIGluc19hcHBsaWNhbnQnXG4gICAgICB9LFxuICAgICAgdmFsdWU6IHN0ZWVkb3NfaW5zdGFuY2UuYXBwbGljYW50X25hbWVcbiAgICB9O1xuICAgIGlmICghc3RlZWRvc19pbnN0YW5jZSB8fCBzdGVlZG9zX2luc3RhbmNlLnN0YXRlICE9PSBcImRyYWZ0XCIpIHtcbiAgICAgIGRhdGEuYXR0cy5kaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9LFxuICBpbnN0YW5jZUlkOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ2luc3RhbmNlZm9ybSc7XG4gIH0sXG4gIGZvcm1fdHlwZXM6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChBcHByb3ZlTWFuYWdlci5pc1JlYWRPbmx5KCkpIHtcbiAgICAgIHJldHVybiAnZGlzYWJsZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ21ldGhvZCc7XG4gICAgfVxuICB9LFxuICBzdGVlZG9zX2Zvcm06IGZ1bmN0aW9uKCkge1xuICAgIHZhciBmb3JtX3ZlcnNpb247XG4gICAgZm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcbiAgICBpZiAoZm9ybV92ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gZm9ybV92ZXJzaW9uO1xuICAgIH1cbiAgfSxcbiAgaW5uZXJzdWJmb3JtQ29udGV4dDogZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGRvY192YWx1ZXM7XG4gICAgZG9jX3ZhbHVlcyA9IFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWFWYWx1ZXMoKTtcbiAgICBvYmpbXCJ0YWJsZVZhbHVlc1wiXSA9IGRvY192YWx1ZXMgPyBkb2NfdmFsdWVzW29iai5jb2RlXSA6IFtdO1xuICAgIG9ialtcImZvcm1JZFwiXSA9IFwiaW5zdGFuY2Vmb3JtXCI7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgaW5zdGFuY2U6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGVlZG9zX2luc3RhbmNlO1xuICAgIFNlc3Npb24uZ2V0KFwiY2hhbmdlX2RhdGVcIik7XG4gICAgaWYgKFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKSkge1xuICAgICAgc3RlZWRvc19pbnN0YW5jZSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgcmV0dXJuIHN0ZWVkb3NfaW5zdGFuY2U7XG4gICAgfVxuICB9LFxuICBlbXB0eTogZnVuY3Rpb24odmFsKSB7XG4gICAgaWYgKHZhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG4gIHVuZW1wdHk6IGZ1bmN0aW9uKHZhbCkge1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LFxuICBlcXVhbHM6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfSxcbiAgdW5lcXVhbHM6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gIShhID09PSBiKTtcbiAgfSxcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYi5zcGxpdCgnLCcpLmluY2x1ZGVzKGEpO1xuICB9LFxuICBpbmNsdWRlOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIuc3BsaXQoJywnKS5pbmNsdWRlcyhhKTtcbiAgfSxcbiAgZmllbGRzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZm9ybV92ZXJzaW9uO1xuICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG4gICAgaWYgKGZvcm1fdmVyc2lvbikge1xuICAgICAgcmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYShmb3JtX3ZlcnNpb24pKTtcbiAgICB9XG4gIH0sXG4gIGZvcm1hdERhdGU6IGZ1bmN0aW9uKGRhdGUsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMgPSBKU09OLnBhcnNlKG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuZm9ybWF0KSB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICBmb3JtYXQ6IFwiWVlZWS1NTS1ERCBISDptbVwiXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChvcHRpb25zLmZvcm1hdCk7XG4gIH0sXG4gIHRyYWNlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZsb3csIGluc3RhbmNlLCBsb2NhbGUsIHJlZiwgcmVmMSwgcmVmMiwgcmVmMywgc3RlZWRvc0RhdGEsIHN0ZXBzLCB0cmFjZXM7XG4gICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgc3RlZWRvc0RhdGEgPSAocmVmID0gVGVtcGxhdGUuaW5zdGFuY2UoKSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLnZpZXcpICE9IG51bGwgPyAocmVmMiA9IHJlZjEudGVtcGxhdGUpICE9IG51bGwgPyByZWYyLnN0ZWVkb3NEYXRhIDogdm9pZCAwIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgaW5zdGFuY2UgPSBzdGVlZG9zRGF0YSAhPSBudWxsID8gc3RlZWRvc0RhdGEuaW5zdGFuY2UgOiB2b2lkIDA7XG4gICAgICBmbG93ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEZsb3dWZXJzaW9uKGluc3RhbmNlKTtcbiAgICAgIGxvY2FsZSA9IHN0ZWVkb3NEYXRhICE9IG51bGwgPyBzdGVlZG9zRGF0YS5sb2NhbGUgOiB2b2lkIDA7XG4gICAgICBpZiAobG9jYWxlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICd6aC1jbicpIHtcbiAgICAgICAgbG9jYWxlID0gXCJ6aC1DTlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgZmxvdyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZsb3dWZXJzaW9uKCk7XG4gICAgICBsb2NhbGUgPSBTZXNzaW9uLmdldChcIlRBUGkxOG46OmxvYWRlZF9sYW5nXCIpO1xuICAgIH1cbiAgICBpZiAoIWluc3RhbmNlIHx8ICFmbG93KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHN0ZXBzID0gZmxvdy5zdGVwcztcbiAgICB0cmFjZXMgPSB7fTtcbiAgICBpZiAoKHJlZjMgPSBpbnN0YW5jZS50cmFjZXMpICE9IG51bGwpIHtcbiAgICAgIHJlZjMuZm9yRWFjaChmdW5jdGlvbih0cmFjZSkge1xuICAgICAgICB2YXIgYXBwcm92ZXMsIHJlZjQsIHN0ZXA7XG4gICAgICAgIHN0ZXAgPSBzdGVwcy5maW5kUHJvcGVydHlCeVBLKFwiX2lkXCIsIHRyYWNlLnN0ZXApO1xuICAgICAgICBhcHByb3ZlcyA9IFtdO1xuICAgICAgICBpZiAoKHJlZjQgPSB0cmFjZS5hcHByb3ZlcykgIT0gbnVsbCkge1xuICAgICAgICAgIHJlZjQuZm9yRWFjaChmdW5jdGlvbihhcHByb3ZlKSB7XG4gICAgICAgICAgICB2YXIganVkZ2VfbmFtZTtcbiAgICAgICAgICAgIGlmICh0cmFjZS5pc19maW5pc2hlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBpZiAoYXBwcm92ZS5qdWRnZSA9PT0gJ2FwcHJvdmVkJykge1xuICAgICAgICAgICAgICAgIGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgYXBwcm92ZWRcIiwge30sIGxvY2FsZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBwcm92ZS5qdWRnZSA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgICAgICAgICAgIGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcmVqZWN0ZWRcIiwge30sIGxvY2FsZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBwcm92ZS5qdWRnZSA9PT0gJ3Rlcm1pbmF0ZWQnKSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSB0ZXJtaW5hdGVkXCIsIHt9LCBsb2NhbGUpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcHJvdmUuanVkZ2UgPT09ICdyZWFzc2lnbmVkJykge1xuICAgICAgICAgICAgICAgIGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcmVhc3NpZ25lZFwiLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcHByb3ZlLmp1ZGdlID09PSAncmVsb2NhdGVkJykge1xuICAgICAgICAgICAgICAgIGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcmVsb2NhdGVkXCIsIHt9LCBsb2NhbGUpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcHJvdmUuanVkZ2UgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcGVuZGluZ1wiLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcHByb3Zlcy5wdXNoKHtcbiAgICAgICAgICAgICAgX2lkOiBhcHByb3ZlLl9pZCxcbiAgICAgICAgICAgICAgaGFuZGxlcjogYXBwcm92ZS51c2VyLFxuICAgICAgICAgICAgICBoYW5kbGVyX25hbWU6IGFwcHJvdmUuaGFuZGxlcl9uYW1lLFxuICAgICAgICAgICAgICBoYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lOiBhcHByb3ZlLmhhbmRsZXJfb3JnYW5pemF0aW9uX25hbWUsXG4gICAgICAgICAgICAgIGhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lOiBhcHByb3ZlLmhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lLFxuICAgICAgICAgICAgICBmaW5pc2hfZGF0ZTogYXBwcm92ZS5maW5pc2hfZGF0ZSxcbiAgICAgICAgICAgICAganVkZ2U6IGFwcHJvdmUuanVkZ2UsXG4gICAgICAgICAgICAgIGp1ZGdlX25hbWU6IGp1ZGdlX25hbWUsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhcHByb3ZlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICBpc19maW5pc2hlZDogYXBwcm92ZS5pc19maW5pc2hlZCxcbiAgICAgICAgICAgICAgdHlwZTogYXBwcm92ZS50eXBlLFxuICAgICAgICAgICAgICBvcGluaW9uX2ZpZWxkc19jb2RlOiBhcHByb3ZlLm9waW5pb25fZmllbGRzX2NvZGUsXG4gICAgICAgICAgICAgIHNpZ25fZmllbGRfY29kZTogYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUsXG4gICAgICAgICAgICAgIGlzX3JlYWQ6IGFwcHJvdmUuaXNfcmVhZCxcbiAgICAgICAgICAgICAgc2lnbl9zaG93OiBhcHByb3ZlLnNpZ25fc2hvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICBpZiAoc3RlcC5uYW1lIGluIHRyYWNlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRyYWNlc1tzdGVwLm5hbWVdID0gdHJhY2VzW3N0ZXAubmFtZV0uY29uY2F0KGFwcHJvdmVzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRyYWNlc1tzdGVwLm5hbWVdID0gYXBwcm92ZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYWNlcztcbiAgfSxcbiAgZG9jX3ZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWFWYWx1ZXMoKTtcbiAgfSxcbiAgaW5zdGFuY2VfYm94X3N0eWxlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYm94LCBpbnMsIGp1ZGdlO1xuICAgIGJveCA9IFNlc3Npb24uZ2V0KFwiYm94XCIpO1xuICAgIGlmIChib3ggPT09IFwiaW5ib3hcIiB8fCBib3ggPT09IFwiZHJhZnRcIikge1xuICAgICAganVkZ2UgPSBTZXNzaW9uLmdldChcImp1ZGdlXCIpO1xuICAgICAgaWYgKGp1ZGdlKSB7XG4gICAgICAgIGlmIChqdWRnZSA9PT0gXCJhcHByb3ZlZFwiKSB7XG4gICAgICAgICAgcmV0dXJuIFwiYm94LXN1Y2Nlc3NcIjtcbiAgICAgICAgfSBlbHNlIGlmIChqdWRnZSA9PT0gXCJyZWplY3RlZFwiKSB7XG4gICAgICAgICAgcmV0dXJuIFwiYm94LWRhbmdlclwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIGlmIChpbnMgJiYgaW5zLmZpbmFsX2RlY2lzaW9uKSB7XG4gICAgICBpZiAoaW5zLmZpbmFsX2RlY2lzaW9uID09PSBcImFwcHJvdmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiYm94LXN1Y2Nlc3NcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW5zLmZpbmFsX2RlY2lzaW9uID09PSBcInJlamVjdGVkXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiYm94LWRhbmdlclwiO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgdGFibGVfZmllbGRzOiBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgIHZhciBmaWVsZHMsIGZvcm1fdmVyc2lvbjtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0Rm9ybVZlcnNpb24oaW5zdGFuY2UuZm9ybSwgaW5zdGFuY2UuZm9ybV92ZXJzaW9uKTtcbiAgICB9XG4gICAgaWYgKGZvcm1fdmVyc2lvbikge1xuICAgICAgZmllbGRzID0gXy5jbG9uZShmb3JtX3ZlcnNpb24uZmllbGRzKTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxkLCBpbmRleCkge1xuICAgICAgICB2YXIgYWZ0ZXJfZmllbGQsIGJlZm9yZV9maWVsZCwgcHJlX2ZpZWxkcywgcHJlX3dpZGVfZmllbGRzLCB0ZF9jb2xzcGFuLCB0cl9lbmQsIHRyX3N0YXJ0O1xuICAgICAgICBmaWVsZC50cl9zdGFydCA9IFwiXCI7XG4gICAgICAgIGZpZWxkLnRyX2VuZCA9IFwiXCI7XG4gICAgICAgIHRkX2NvbHNwYW4gPSAxO1xuICAgICAgICBpZiAoKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkgPT09IGZpZWxkLmNvZGUpIHtcbiAgICAgICAgICBmaWVsZC5pc193aWRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQuZm9ybXVsYSAmJiBmaWVsZC50eXBlICE9PSAnb2RhdGEnKSB7XG4gICAgICAgICAgZmllbGQucGVybWlzc2lvbiA9IFwicmVhZG9ubHlcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWN0aW9uJyB8fCBmaWVsZC50eXBlID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICBmaWVsZC50ZF9jb2xzcGFuID0gNDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGQudGRfY29sc3BhbiA9IDM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgZmllbGQudHJfc3RhcnQgPSBcIjx0cj5cIjtcbiAgICAgICAgICAgIHJldHVybiBmaWVsZC50cl9lbmQgPSBcIjwvdHI+XCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZV9maWVsZHMgPSBmaWVsZHMuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICAgIHByZV93aWRlX2ZpZWxkcyA9IHByZV9maWVsZHMuZmlsdGVyUHJvcGVydHkoXCJpc193aWRlXCIsIHRydWUpO1xuICAgICAgICAgIHRyX3N0YXJ0ID0gXCJcIjtcbiAgICAgICAgICB0cl9lbmQgPSBcIlwiO1xuICAgICAgICAgIGJlZm9yZV9maWVsZCA9IG51bGw7XG4gICAgICAgICAgYWZ0ZXJfZmllbGQgPSBudWxsO1xuICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgIGJlZm9yZV9maWVsZCA9IGZpZWxkc1tpbmRleCAtIDFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5kZXggPCBmaWVsZHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgYWZ0ZXJfZmllbGQgPSBmaWVsZHNbaW5kZXggKyAxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWN0aW9uJyB8fCBmaWVsZC50eXBlID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICB0ZF9jb2xzcGFuID0gNDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLmlzX3dpZGUpIHtcbiAgICAgICAgICAgIHRkX2NvbHNwYW4gPSAzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYmVmb3JlX2ZpZWxkICYmIGFmdGVyX2ZpZWxkICYmIGJlZm9yZV9maWVsZC5pc193aWRlICYmIGFmdGVyX2ZpZWxkLmlzX3dpZGUpIHtcbiAgICAgICAgICAgICAgZmllbGQuaXNfd2lkZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRkX2NvbHNwYW4gPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiA9PT0gMCAmJiBhZnRlcl9maWVsZCAmJiBhZnRlcl9maWVsZC5pc193aWRlKSB7XG4gICAgICAgICAgICAgIGZpZWxkLmlzX3dpZGUgPSB0cnVlO1xuICAgICAgICAgICAgICB0ZF9jb2xzcGFuID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgocHJlX2ZpZWxkcy5sZW5ndGggKyBwcmVfd2lkZV9maWVsZHMubGVuZ3RoKSAlIDIgPT09IDAgJiYgYWZ0ZXJfZmllbGQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmllbGQuaXNfd2lkZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRkX2NvbHNwYW4gPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZC50ZF9jb2xzcGFuID0gdGRfY29sc3BhbjtcbiAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHRyX3N0YXJ0ID0gXCI8dHI+XCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICgocHJlX2ZpZWxkcy5sZW5ndGggKyBwcmVfd2lkZV9maWVsZHMubGVuZ3RoKSAlIDIgPT09IDAgfHwgZmllbGQuaXNfd2lkZSkge1xuICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICAgICAgICAgIHRyX3N0YXJ0ID0gXCI8dHIgY2xhc3MgPSBcXFwidHItY2hpbGQtdGFibGVcXFwiPlwiO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyX3N0YXJ0ID0gXCI8dHI+XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGQudHJfc3RhcnQgPSB0cl9zdGFydDtcbiAgICAgICAgICBpZiAoaW5kZXggKyAxID09PSBmaWVsZHMubGVuZ3RoIHx8IGZpZWxkLnR5cGUgPT09ICdzZWN0aW9uJyB8fCBmaWVsZC50eXBlID09PSAndGFibGUnIHx8IGZpZWxkLmlzX3dpZGUpIHtcbiAgICAgICAgICAgIHRyX2VuZCA9IFwiPC90cj5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgdHJfZW5kID0gXCI8L3RyPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmllbGQudHJfZW5kID0gdHJfZW5kO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfVxuICB9LFxuICBzb3J0X2FwcHJvdmU6IGZ1bmN0aW9uKGFwcHJvdmVzLCBvcmRlcikge1xuICAgIGlmICghYXBwcm92ZXMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKCFhcHByb3ZlcyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcmRlciA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIGFwcHJvdmVzLnNvcnQoZnVuY3Rpb24ocDEsIHAyKSB7XG4gICAgICAgICAgdmFyIF9wMSwgX3AyO1xuICAgICAgICAgIF9wMSA9IDA7XG4gICAgICAgICAgX3AyID0gMDtcbiAgICAgICAgICBpZiAocDEuZmluaXNoX2RhdGUpIHtcbiAgICAgICAgICAgIF9wMSA9IHAxLmZpbmlzaF9kYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHAyLmZpbmlzaF9kYXRlKSB7XG4gICAgICAgICAgICBfcDIgPSBwMi5maW5pc2hfZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfcDIgLSBfcDE7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXBwcm92ZXMuc29ydChmdW5jdGlvbihwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgX3AxLCBfcDI7XG4gICAgICAgICAgX3AxID0gMDtcbiAgICAgICAgICBfcDIgPSAwO1xuICAgICAgICAgIGlmIChwMS5maW5pc2hfZGF0ZSkge1xuICAgICAgICAgICAgX3AxID0gcDEuZmluaXNoX2RhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocDIuZmluaXNoX2RhdGUpIHtcbiAgICAgICAgICAgIF9wMiA9IHAyLmZpbmlzaF9kYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF9wMSAtIF9wMjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcHByb3ZlcztcbiAgfSxcbiAgX3Q6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBUQVBpMThuLl9fKGtleSk7XG4gIH0sXG4gIGdldEZpZWxkOiBmdW5jdGlvbihjb2RlKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtX3ZlcnNpb24gPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uO1xuICAgIGlmIChmb3JtX3ZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmb3JtX3ZlcnNpb24uZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpO1xuICAgIH1cbiAgfSxcbiAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGNvZGUpIHtcbiAgICB2YXIgZm9ybV92ZXJzaW9uLCBpbnN0YW5jZSwgbG9jYWxlLCB1dGNPZmZzZXQsIHZhbHVlcztcbiAgICBpbnN0YW5jZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5pbnN0YW5jZTtcbiAgICBmb3JtX3ZlcnNpb24gPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uO1xuICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG4gICAgdXRjT2Zmc2V0ID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLnV0Y09mZnNldDtcbiAgICB2YWx1ZXMgPSBpbnN0YW5jZS52YWx1ZXMgfHwge307XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgdmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuICAgIH1cbiAgICByZXR1cm4gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFZhbHVlKHZhbHVlc1tjb2RlXSwgZm9ybV92ZXJzaW9uLmZpZWxkcy5maW5kUHJvcGVydHlCeVBLKFwiY29kZVwiLCBjb2RlKSwgbG9jYWxlLCB1dGNPZmZzZXQpO1xuICB9LFxuICBnZXRMYWJlbDogZnVuY3Rpb24oY29kZSkge1xuICAgIHZhciBmb3JtX3ZlcnNpb247XG4gICAgZm9ybV92ZXJzaW9uID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvbjtcbiAgICByZXR1cm4gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldExhYmVsKGZvcm1fdmVyc2lvbi5maWVsZHMsIGNvZGUpO1xuICB9LFxuICBpc1RleHRhcmVhOiBmdW5jdGlvbihmaWVsZCkge1xuICAgIGlmICgoZmllbGQgIT0gbnVsbCA/IGZpZWxkLnR5cGUgOiB2b2lkIDApID09PSBcImlucHV0XCIgJiYgKGZpZWxkICE9IG51bGwgPyBmaWVsZC5pc190ZXh0YXJlYSA6IHZvaWQgMCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSxcbiAgZ2V0Q2ZDbGFzczogZnVuY3Rpb24oZmllbGQpIHtcbiAgICBpZiAoKGZpZWxkICE9IG51bGwgPyBmaWVsZC50eXBlIDogdm9pZCAwKSA9PT0gXCJpbnB1dFwiICYmIChmaWVsZCAhPSBudWxsID8gZmllbGQuaXNfdGV4dGFyZWEgOiB2b2lkIDApKSB7XG4gICAgICByZXR1cm4gXCJjZlRleHRhcmVhXCI7XG4gICAgfVxuICB9LFxuICBnZXRUYWJsZVRoZWFkOiBmdW5jdGlvbihmaWVsZCkge1xuICAgIHJldHVybiBTdGVlZG9zVGFibGUuZ2V0VGhlYWQoZmllbGQsIGZhbHNlKTtcbiAgfSxcbiAgZ2V0VGFibGVCb2R5OiBmdW5jdGlvbihmaWVsZCkge1xuICAgIHZhciBpbnN0YW5jZSwgdGFibGVWYWx1ZSwgdmFsdWVzO1xuICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgIGluc3RhbmNlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmluc3RhbmNlO1xuICAgICAgdmFsdWVzID0gaW5zdGFuY2UudmFsdWVzIHx8IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG4gICAgfVxuICAgIHRhYmxlVmFsdWUgPSB2YWx1ZXNbZmllbGQuY29kZV07XG4gICAgcmV0dXJuIFN0ZWVkb3NUYWJsZS5nZXRUYm9keShmaWVsZC5zZmllbGRzLmdldFByb3BlcnR5KFwiY29kZVwiKSwgZmllbGQsIHRhYmxlVmFsdWUsIGZhbHNlKTtcbiAgfSxcbiAgc2hvd0xhYmVsOiBmdW5jdGlvbihmaWVsZCkge1xuICAgIHZhciB0ZW1wbGF0ZURhdGE7XG4gICAgdGVtcGxhdGVEYXRhID0gVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhO1xuICAgIGlmICh0ZW1wbGF0ZURhdGEubGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBpc09waW5pb25GaWVsZDogZnVuY3Rpb24oZmllbGQpIHtcbiAgICByZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZC5mb3JtdWxhKTtcbiAgfSxcbiAgaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmc6IGZ1bmN0aW9uKGZpZWxkX2Zvcm11bGEpIHtcbiAgICByZXR1cm4gSW5zdGFuY2VTaWduVGV4dC5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZF9mb3JtdWxhKTtcbiAgfSxcbiAgaW5jbHVkZXNPcGluaW9uRmllbGQ6IGZ1bmN0aW9uKGZvcm0sIGZvcm1fdmVyc2lvbikge1xuICAgIHZhciBmaWVsZF9mb3JtdWxhcywgZmllbGRzLCByZWY7XG4gICAgZmllbGRfZm9ybXVsYXMgPSBuZXcgQXJyYXkoKTtcbiAgICBmaWVsZHMgPSAoKHJlZiA9IGRiLmZvcm1fdmVyc2lvbnMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGZvcm1fdmVyc2lvbixcbiAgICAgIGZvcm06IGZvcm1cbiAgICB9KSkgIT0gbnVsbCA/IHJlZi5maWVsZHMgOiB2b2lkIDApIHx8IFtdO1xuICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGYpIHtcbiAgICAgIHZhciByZWYxO1xuICAgICAgaWYgKGYudHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICByZXR1cm4gY29uc29sZS5sb2coJ2lnbm9yZSBvcGluaW9uIGZpZWxkIGluIHRhYmxlJyk7XG4gICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gJ3NlY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBmICE9IG51bGwgPyAocmVmMSA9IGYuZmllbGRzKSAhPSBudWxsID8gcmVmMS5mb3JFYWNoKGZ1bmN0aW9uKGYxKSB7XG4gICAgICAgICAgcmV0dXJuIGZpZWxkX2Zvcm11bGFzLnB1c2goZjEuZm9ybXVsYSk7XG4gICAgICAgIH0pIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkX2Zvcm11bGFzLnB1c2goZi5mb3JtdWxhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gXy5zb21lKGZpZWxkX2Zvcm11bGFzLCBmdW5jdGlvbihmaWVsZF9mb3JtdWxhKSB7XG4gICAgICByZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZF9mb3JtdWxhKTtcbiAgICB9KTtcbiAgfSxcbiAgZ2V0T3BpbmlvbkZpZWxkU3RlcHNOYW1lOiBmdW5jdGlvbihmaWVsZF9mb3JtdWxhLCB0b3Bfa2V5d29yZHMpIHtcbiAgICB2YXIgZm9vMSwgb3BpbmlvbkZpZWxkcztcbiAgICBvcGluaW9uRmllbGRzID0gbmV3IEFycmF5KCk7XG4gICAgaWYgKEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcoZmllbGRfZm9ybXVsYSkpIHtcbiAgICAgIGlmIChmaWVsZF9mb3JtdWxhKSB7XG4gICAgICAgIGZvbzEgPSBmaWVsZF9mb3JtdWxhLnNwbGl0KFwiO1wiKTtcbiAgICAgICAgZm9vMS5mb3JFYWNoKGZ1bmN0aW9uKGZvbykge1xuICAgICAgICAgIHZhciBqc29uX2Zvcm11bGEsIHJlZiwgcmVmMSwgczEsIHNmO1xuICAgICAgICAgIGpzb25fZm9ybXVsYSA9IHt9O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBqc29uX2Zvcm11bGEgPSBldmFsKFwiKFwiICsgZm9vICsgXCIpXCIpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgICAgICAgICAganNvbl9mb3JtdWxhID0ge307XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChqc29uX2Zvcm11bGEgIT0gbnVsbCA/IGpzb25fZm9ybXVsYS55aWppYW5sYW4gOiB2b2lkIDApIHtcbiAgICAgICAgICAgIHNmID0ge307XG4gICAgICAgICAgICBzZi5zdGVwTmFtZSA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4uc3RlcDtcbiAgICAgICAgICAgIHNmLmltYWdlX3NpZ24gPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLmltYWdlX3NpZ24gfHwgZmFsc2U7XG4gICAgICAgICAgICBzZi5vbmx5X2NjX29waW5pb24gPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLm9ubHlfY2MgfHwgZmFsc2U7XG4gICAgICAgICAgICBzZi5kZWZhdWx0X2Rlc2NyaXB0aW9uID0ganNvbl9mb3JtdWxhLnlpamlhbmxhbltcImRlZmF1bHRcIl07XG4gICAgICAgICAgICBzZi5vbmx5X2hhbmRsZXIgPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLm9ubHlfaGFuZGxlcjtcbiAgICAgICAgICAgIHNmLnRvcF9rZXl3b3JkcyA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4udG9wX2tleXdvcmRzIHx8IHRvcF9rZXl3b3JkcztcbiAgICAgICAgICAgIHJldHVybiBvcGluaW9uRmllbGRzLnB1c2goc2YpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKGZpZWxkX2Zvcm11bGEgIT0gbnVsbCA/IGZpZWxkX2Zvcm11bGEuaW5kZXhPZihcInt0cmFjZXMuXCIpIDogdm9pZCAwKSA+IC0xIHx8IChmaWVsZF9mb3JtdWxhICE9IG51bGwgPyBmaWVsZF9mb3JtdWxhLmluZGV4T2YoXCJ7c2lnbmF0dXJlLnRyYWNlcy5cIikgOiB2b2lkIDApID4gLTEpIHtcbiAgICAgICAgICAgIHNmID0ge1xuICAgICAgICAgICAgICBvbmx5X2NjX29waW5pb246IGZhbHNlLFxuICAgICAgICAgICAgICBpbWFnZV9zaWduOiBmYWxzZSxcbiAgICAgICAgICAgICAgdG9wX2tleXdvcmRzOiB0b3Bfa2V5d29yZHNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZm9vLmluZGV4T2YoXCJ7c2lnbmF0dXJlLlwiKSA+IC0xKSB7XG4gICAgICAgICAgICAgIHNmLmltYWdlX3NpZ24gPSB0cnVlO1xuICAgICAgICAgICAgICBmb28gPSBmb28ucmVwbGFjZShcIntzaWduYXR1cmUuXCIsIFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgczEgPSBmb28ucmVwbGFjZShcIntcIiwgXCJcIikucmVwbGFjZShcIn1cIiwgXCJcIik7XG4gICAgICAgICAgICBpZiAoczEuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgc2Yuc3RlcE5hbWUgPSBzMS5zcGxpdChcIi5cIilbMV07XG4gICAgICAgICAgICAgIGlmIChvcGluaW9uRmllbGRzLmZpbHRlclByb3BlcnR5KFwic3RlcE5hbWVcIiwgc2Yuc3RlcE5hbWUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoKHJlZiA9IG9waW5pb25GaWVsZHMuZmluZFByb3BlcnR5QnlQSyhcInN0ZXBOYW1lXCIsIHNmLnN0ZXBOYW1lKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgcmVmLm9ubHlfY2Nfb3BpbmlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzMS5zcGxpdChcIi5cIikubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgICAgaWYgKCgocmVmMSA9IHMxLnNwbGl0KFwiLlwiKVsyXSkgIT0gbnVsbCA/IHJlZjEudG9Mb2NhbGVMb3dlckNhc2UoKSA6IHZvaWQgMCkgPT09ICdjYycpIHtcbiAgICAgICAgICAgICAgICAgICAgc2Yub25seV9jY19vcGluaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcGluaW9uRmllbGRzLnB1c2goc2YpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvcGluaW9uRmllbGRzO1xuICB9LFxuICBzaG93Q0NPcGluaW9uOiBmdW5jdGlvbihmaWVsZCkge1xuICAgIHZhciByZWYsIHJlZjEsIHJlZjIsIHMxO1xuICAgIGlmICgoKHJlZiA9IGZpZWxkLmZvcm11bGEpICE9IG51bGwgPyByZWYuaW5kZXhPZihcInt0cmFjZXMuXCIpIDogdm9pZCAwKSA+IC0xIHx8ICgocmVmMSA9IGZpZWxkLmZvcm11bGEpICE9IG51bGwgPyByZWYxLmluZGV4T2YoXCJ7c2lnbmF0dXJlLnRyYWNlcy5cIikgOiB2b2lkIDApID4gLTEpIHtcbiAgICAgIHMxID0gZmllbGQuZm9ybXVsYS5yZXBsYWNlKFwie3NpZ25hdHVyZS5cIiwgXCJcIikucmVwbGFjZShcIntcIiwgXCJcIikucmVwbGFjZShcIn1cIiwgXCJcIik7XG4gICAgICBpZiAoczEuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgaWYgKCgocmVmMiA9IHMxLnNwbGl0KFwiLlwiKVsyXSkgIT0gbnVsbCA/IHJlZjIudG9Mb2NhbGVMb3dlckNhc2UoKSA6IHZvaWQgMCkgPT09ICdjYycpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIG1hcmtEb3duVG9IdG1sOiBmdW5jdGlvbihtYXJrRG93blN0cmluZykge1xuICAgIGlmIChtYXJrRG93blN0cmluZykge1xuICAgICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgICBtYXJrZWQgPSBOcG0ucmVxdWlyZSgnbWFya2VkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3BhY2ViYXJzLlNhZmVTdHJpbmcobWFya2VkLnBhcnNlKG1hcmtEb3duU3RyaW5nKSk7XG4gICAgfVxuICB9LFxuICBmX2xhYmVsOiBmdW5jdGlvbih0aGF0KSB7XG4gICAgcmV0dXJuIHRoYXQubmFtZSB8fCB0aGF0LmNvZGU7XG4gIH1cbn07XG5cbmlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5zdGVlZG9zX2Zvcm0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtX3ZlcnNpb247XG4gIH07XG4gIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNTZWN0aW9uID0gZnVuY3Rpb24oY29kZSkge1xuICAgIHZhciBmb3JtX3ZlcnNpb247XG4gICAgZm9ybV92ZXJzaW9uID0gdGhpcy5mb3JtX3ZlcnNpb247XG4gICAgcmV0dXJuIGZvcm1fdmVyc2lvbi5maWVsZHMuZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgY29kZSkudHlwZSA9PT0gJ3NlY3Rpb24nO1xuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmRvY192YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaW5zdGFuY2U7XG4gICAgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlO1xuICAgIHJldHVybiBpbnN0YW5jZS52YWx1ZXM7XG4gIH07XG4gIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuYXBwbGljYW50Q29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBkYXRhLCBpbnN0YW5jZTtcbiAgICBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2U7XG4gICAgcmV0dXJuIGRhdGEgPSB7XG4gICAgICBuYW1lOiAnaW5zX2FwcGxpY2FudCcsXG4gICAgICBhdHRzOiB7XG4gICAgICAgIG5hbWU6ICdpbnNfYXBwbGljYW50JyxcbiAgICAgICAgaWQ6ICdpbnNfYXBwbGljYW50JyxcbiAgICAgICAgXCJjbGFzc1wiOiAnc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCdcbiAgICAgIH0sXG4gICAgICB2YWx1ZTogaW5zdGFuY2UuYXBwbGljYW50X25hbWVcbiAgICB9O1xuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XG4gIH07XG4gIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZmllbGRzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtX3ZlcnNpb24gPSB0aGlzLmZvcm1fdmVyc2lvbjtcbiAgICBpZiAoZm9ybV92ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gbmV3IFNpbXBsZVNjaGVtYShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hKGZvcm1fdmVyc2lvbikpO1xuICAgIH1cbiAgfTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5mb3JtX3R5cGVzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiZGlzYWJsZWRcIjtcbiAgfTtcbiAgVGVtcGxhdGUucmVnaXN0ZXJIZWxwZXIoXCJhZkZpZWxkTGFiZWxUZXh0XCIsIGZ1bmN0aW9uKG9wKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbiwgcmVmO1xuICAgIGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb247XG4gICAgcmV0dXJuIEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRMYWJlbChmb3JtX3ZlcnNpb24uZmllbGRzLCBvcCAhPSBudWxsID8gKHJlZiA9IG9wLmhhc2gpICE9IG51bGwgPyByZWYubmFtZSA6IHZvaWQgMCA6IHZvaWQgMCk7XG4gIH0pO1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLl90ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIGxvY2FsZTtcbiAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZTtcbiAgICByZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpO1xuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluc19hdHRhY2hfZG93bmxvYWRfdXJsID0gZnVuY3Rpb24oX2lkLCBhYnNvbHV0ZSkge1xuICAgIGlmIChhYnNvbHV0ZSkge1xuICAgICAgcmV0dXJuIE1ldGVvci5hYnNvbHV0ZVVybChcIi9hcGkvZmlsZXMvaW5zdGFuY2VzL1wiICsgX2lkICsgXCI/ZG93bmxvYWQ9dHJ1ZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiL2FwaS9maWxlcy9pbnN0YW5jZXMvXCIgKyBfaWQgKyBcIj9kb3dubG9hZD10cnVlXCI7XG4gICAgfVxuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLm9wdGlvbnMgPSBmdW5jdGlvbihmaWVsZCkge1xuICAgIHZhciBvcHRpb25zLCByZWYsIHJldjtcbiAgICBvcHRpb25zID0gZmllbGQgIT0gbnVsbCA/IChyZWYgPSBmaWVsZC5vcHRpb25zKSAhPSBudWxsID8gcmVmLnNwbGl0KFwiXFxuXCIpIDogdm9pZCAwIDogdm9pZCAwO1xuICAgIHJldiA9IFtdO1xuICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHJldHVybiByZXYucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IGl0ZW0sXG4gICAgICAgICAgdmFsdWU6IGl0ZW1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJldjtcbiAgfTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5nZXRQZXJtaXNzaW9ucyA9IGZ1bmN0aW9uKGNvZGUpIHtcbiAgICB2YXIgcmVmO1xuICAgIGlmICghKChyZWYgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuc3RhcnRTdGVwRWRpdGFibGVGaWVsZHMpICE9IG51bGwgPyByZWYuaW5jbHVkZXMoY29kZSkgOiB2b2lkIDApKSB7XG4gICAgICByZXR1cm4gXCJyZWFkb25seSBkaXNhYmxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfTtcbn1cblxuSW5zdGFuY2Vmb3JtVGVtcGxhdGUuZXZlbnRzID0ge1xuICAnY2hhbmdlIC5mb3JtLWNvbnRyb2wsLmNoZWNrYm94IGlucHV0LC5hZi1yYWRpby1ncm91cCBpbnB1dCwuYWYtY2hlY2tib3gtZ3JvdXAgaW5wdXQnOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiBJbnN0YW5jZU1hbmFnZXIuaW5zdGFuY2Vmb3JtQ2hhbmdlRXZlbnQoZXZlbnQpO1xuICB9LFxuICAndHlwZWFoZWFkOmNoYW5nZSAuZm9ybS1jb250cm9sJzogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gSW5zdGFuY2VNYW5hZ2VyLmluc3RhbmNlZm9ybUNoYW5nZUV2ZW50KGV2ZW50KTtcbiAgfSxcbiAgJ2NsaWNrIC5jZlRleHRhcmVhIGEnOiBmdW5jdGlvbihldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuIFN0ZWVkb3Mub3BlbldpbmRvdyhldmVudC50YXJnZXQuaHJlZik7XG4gIH1cbn07XG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLm9uQ3JlYXRlZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29tcGlsZWQsIGUsIGluc3RhbmNlLCBpbnN0YW5jZUN1c3RvbVRlbXBsYXRlLCBpbnN0YW5jZVZpZXcsIHJlbmRlckZ1bmN0aW9uLCB0ZW1wbGF0ZTtcbiAgaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgaWYgKCFpbnN0YW5jZSkge1xuICAgIHJldHVybjtcbiAgfVxuICB0ZW1wbGF0ZSA9IFRlbXBsYXRlTWFuYWdlci5nZXRUZW1wbGF0ZShpbnN0YW5jZSk7XG4gIHRyeSB7XG4gICAgY29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHRlbXBsYXRlLCB7XG4gICAgICBpc0JvZHk6IHRydWVcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgZSA9IGVycm9yMTtcbiAgICBjb25zb2xlLmxvZyhcIkluc3RhbmNlIFRlbXBsYXRlIEVycm9yXCIsIGUpO1xuICAgIGNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShcIlwiLCB7XG4gICAgICBpc0JvZHk6IHRydWVcbiAgICB9KTtcbiAgfVxuICByZW5kZXJGdW5jdGlvbiA9IGV2YWwoY29tcGlsZWQpO1xuICBpbnN0YW5jZVZpZXcgPSBuZXcgQmxhemUuVmlldyhcImN1c3RvbV9pbnN0YW5jZV90ZW1wbGF0ZVwiLCByZW5kZXJGdW5jdGlvbik7XG4gIGluc3RhbmNlQ3VzdG9tVGVtcGxhdGUgPSBuZXcgQmxhemUuVGVtcGxhdGUoaW5zdGFuY2VWaWV3Lm5hbWUsIHJlbmRlckZ1bmN0aW9uKTtcbiAgVGVtcGxhdGUuaW5zdGFuY2VfY3VzdG9tX3RlbXBsYXRlID0gaW5zdGFuY2VDdXN0b21UZW1wbGF0ZTtcbiAgcmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlX2N1c3RvbV90ZW1wbGF0ZS5oZWxwZXJzKEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMpO1xufTtcblxuSW5zdGFuY2Vmb3JtVGVtcGxhdGUub25SZW5kZXJlZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY3VycmVudEFwcHJvdmUsIGN1cnJlbnRTdGVwLCBmb3JtX3ZlcnNpb24sIGZvcm11bGFfZmllbGRzLCBpbnNlcnREb2MsIGluc3RhbmNlLCBpbnN0YW5jZU51bWJlckZpZWxkcywganVkZ2U7XG4gIGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gIGlmICghaW5zdGFuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgSW5zdGFuY2VNYW5hZ2VyLnNldEluc3RhbmNlRm9ybUFwcGxpY2FudChpbnN0YW5jZS5hcHBsaWNhbnQsIGluc3RhbmNlLmFwcGxpY2FudF9uYW1lKTtcbiAgQXBwcm92ZU1hbmFnZXIuZXJyb3IgPSB7XG4gICAgbmV4dFN0ZXBzOiAnJyxcbiAgICBuZXh0U3RlcFVzZXJzOiAnJ1xuICB9O1xuICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcgfHwgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdkcmFmdCcpIHtcbiAgICBJbnN0YW5jZUV2ZW50LmluaXRFdmVudHMoaW5zdGFuY2UuZmxvdyk7XG4gIH1cbiAgaWYgKCFBcHByb3ZlTWFuYWdlci5pc1JlYWRPbmx5KCkpIHtcbiAgICBjdXJyZW50QXBwcm92ZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50QXBwcm92ZSgpO1xuICAgIGluc3RhbmNlTnVtYmVyRmllbGRzID0gJChcIltkYXRhLWZvcm11bGFdXCIsICQoXCIjaW5zdGFuY2Vmb3JtXCIpKTtcbiAgICBpbnN0YW5jZU51bWJlckZpZWxkcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGVsZW1lbnQsIHNjaGVtYUtleTtcbiAgICAgIHNjaGVtYUtleSA9IHRoaXMuZGF0YXNldC5zY2hlbWFLZXk7XG4gICAgICBlbGVtZW50ID0gJCh0aGlzKTtcbiAgICAgIGlmICghJCh0aGlzKS52YWwoKSAmJiBzY2hlbWFLZXkgJiYgU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpKSB7XG4gICAgICAgIHJldHVybiBNZXRlb3IuY2FsbCgnZ2V0SW5zdGFuY2VWYWx1ZXMnLCBTZXNzaW9uLmdldChcImluc3RhbmNlSWRcIiksIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpIHtcbiAgICAgICAgICB2YXIga2V5LCByZWY7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0b2FzdHIuZXJyb3IoZXJyb3IucmVhc29uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFyZXN1bHRbc2NoZW1hS2V5XSkge1xuICAgICAgICAgICAga2V5ID0gKHJlZiA9IGVsZW1lbnQuZGF0YShcImZvcm11bGFcIikpICE9IG51bGwgPyByZWYucmVwbGFjZShcImF1dG9fbnVtYmVyKFwiLCBcIlwiKS5yZXBsYWNlKFwiKVwiLCBcIlwiKSA6IHZvaWQgMDtcbiAgICAgICAgICAgIGtleSA9IGtleS5yZXBsYWNlKC9cXFwiL2csIFwiXCIpLnJlcGxhY2UoL1xcJy9nLCBcIlwiKTtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihcIntcIikgPiAtMSkge1xuICAgICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZShcIntcIiwgXCJcIikucmVwbGFjZShcIn1cIiwgXCJcIik7XG4gICAgICAgICAgICAgIGtleSA9IGtleS50cmltKCk7XG4gICAgICAgICAgICAgIGtleSA9IEF1dG9Gb3JtLmdldEZpZWxkVmFsdWUoa2V5LCAnaW5zdGFuY2Vmb3JtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gSW5zdGFuY2VOdW1iZXJSdWxlcy5pbnN0YW5jZU51bWJlckJ1aWxkZXIoZWxlbWVudCwga2V5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgIT0gbnVsbCA/IGVsZW1lbnQudmFsKHJlc3VsdFtzY2hlbWFLZXldKS50cmlnZ2VyKFwiY2hhbmdlXCIpIDogdm9pZCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAganVkZ2UgPSBjdXJyZW50QXBwcm92ZS5qdWRnZTtcbiAgICBjdXJyZW50U3RlcCA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50U3RlcCgpO1xuICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG4gICAgaWYgKCFmb3JtX3ZlcnNpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFmb3JtX3ZlcnNpb24uZmllbGRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvcm11bGFfZmllbGRzID0gRm9ybV9mb3JtdWxhLmdldEZvcm11bGFGaWVsZFZhcmlhYmxlKFwiRm9ybV9mb3JtdWxhLmZpZWxkX3ZhbHVlc1wiLCBmb3JtX3ZlcnNpb24uZmllbGRzKTtcbiAgICBpbnNlcnREb2MgPSBBdXRvRm9ybS5nZXRGb3JtVmFsdWVzKFwiaW5zdGFuY2Vmb3JtXCIsIHZvaWQgMCwgdm9pZCAwLCBmYWxzZSk7XG4gICAgRm9ybV9mb3JtdWxhLnJ1bihcIlwiLCBcIlwiLCBmb3JtdWxhX2ZpZWxkcywgaW5zZXJ0RG9jLCBmb3JtX3ZlcnNpb24uZmllbGRzKTtcbiAgICByZXR1cm4gU2Vzc2lvbi5zZXQoXCJpbnN0YW5jZV9mb3JtX3ZhbHVlc1wiLCB7XG4gICAgICBpbnN0YW5jZUlkOiBpbnN0YW5jZS5faWQsXG4gICAgICB2YWx1ZXM6IGluc2VydERvY1xuICAgIH0pO1xuICB9XG59O1xuIiwiSW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVycyA9IHtcblxuXHRzaG93TWFpblRpdGxlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2UoKS53b3JrZmxvd01haW5BdHRhY2hUaXRsZS5nZXQoKTtcblx0fSxcblx0aXNDbGllbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBNZXRlb3IuaXNDbGllbnRcblx0fSxcblx0ZW5hYmxlZF9hZGRfbWFpbl9hdHRhY2htZW50OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgKCFpbnMpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdGlmIChTZXNzaW9uICYmIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSlcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0aWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpICE9IFwiZHJhZnRcIiAmJiBTZXNzaW9uLmdldChcImJveFwiKSAhPSBcImluYm94XCIpIHtcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblxuXHRcdC8vIOW3sue7j+e7k+adn+eahOWNleWtkOS4jeiDveaUuemZhOS7tlxuXHRcdGlmIChpbnMuc3RhdGUgPT0gXCJjb21wbGV0ZWRcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fVxuXG5cdFx0dmFyIGN1cnJlbnRfc3RlcCA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50U3RlcCgpO1xuXG5cdFx0aWYgKCFjdXJyZW50X3N0ZXApXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHQvLyBjY+eahOWNleWtkO+8jOWPquacieWcqOW9k+WJjeatpemqpOaJjeiDveS/ruaUuemZhOS7tlxuXHRcdHZhciBhcHByb3ZlID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRBcHByb3ZlKCk7XG5cdFx0aWYgKGFwcHJvdmUgJiYgYXBwcm92ZS50eXBlID09IFwiY2NcIikge1xuXHRcdFx0dmFyIGN1cnJlbnRUcmFjZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50VHJhY2UoKTtcblx0XHRcdGlmKGN1cnJlbnRUcmFjZSAmJiBjdXJyZW50VHJhY2UuX2lkICE9IGFwcHJvdmUudHJhY2Upe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8g5YiG5Y+R55qE5q2j5paH5oiW6ICF6ZmE5Lu25LiN5pi+56S66L2s5Li6cGRm5oyJ6ZKuXG5cdFx0Ly8g5aaC5p6c5pyJ5q2j5paH5p2D6ZmQ5YiZ5Li65q2j5paH77yM5ZCm5YiZ5YiG5Y+R5Li66ZmE5Lu2XG5cdFx0Ly8g5YiG5Y+R55qE6ZmE5Lu25LiN5YWB6K645L+u5pS5IOWIoOmZpCDmlrDlop7niYjmnKxcblx0XHR2YXIgbWFpbl9hdHRhY2hfY291bnQgPSBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuXHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzogaW5zLl9pZCxcblx0XHRcdCdtZXRhZGF0YS5jdXJyZW50JzogdHJ1ZSxcblx0XHRcdCdtZXRhZGF0YS5tYWluJzogdHJ1ZVxuXHRcdH0pLmNvdW50KCk7XG5cblx0XHR2YXIgZGlzdHJpYnV0ZV9tYWluX2F0dGFjaF9jb3VudCA9IDA7XG5cblx0XHRpZiAoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSkge1xuXHRcdFx0dmFyIHN0YXJ0X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0U3RhcnRTdGVwKCk7XG5cdFx0XHRpZiAoc3RhcnRfc3RlcC5jYW5fZWRpdF9tYWluX2F0dGFjaCkge1xuXHRcdFx0XHR2YXIgZGlzdHJpYnV0ZV9tYWluX2F0dGFjaF9jb3VudCA9IGNmcy5pbnN0YW5jZXMuZmluZCh7XG5cdFx0XHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzogaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSxcblx0XHRcdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHRcdFx0J21ldGFkYXRhLm1haW4nOiB0cnVlXG5cdFx0XHRcdH0pLmNvdW50KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9tYWluX2F0dGFjaCA9PSB0cnVlICYmIG1haW5fYXR0YWNoX2NvdW50IDwgMSAmJiBkaXN0cmlidXRlX21haW5fYXR0YWNoX2NvdW50IDwgMSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cblx0XHQvLyDmraPmlofmnIDlpJrlj6rog73mnInkuIDkuKpcblx0XHRpZiAobWFpbl9hdHRhY2hfY291bnQgPj0gMSB8fCBkaXN0cmlidXRlX21haW5fYXR0YWNoX2NvdW50ID49IDEpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyDlvIDlp4voioLngrnlubbkuJTorr7nva7kuoblj6/ku6XkuIrkvKDmraPmlofmiY3mmL7npLrkuIrkvKDmraPmlofnmoTmjInpkq5cblx0XHR2YXIgY3VycmVudF9zdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKCk7XG5cdFx0aWYgKGN1cnJlbnRfc3RlcCAmJiBjdXJyZW50X3N0ZXAuc3RlcF90eXBlID09IFwic3RhcnRcIiAmJiBjdXJyZW50X3N0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2ggPT0gdHJ1ZSlcblx0XHRcdHJldHVybiB0cnVlXG5cblx0XHRyZXR1cm4gZmFsc2Vcblx0fSxcblxuXHRlbmFibGVkX2VkaXRfbm9ybWFsX2F0dGFjaG1lbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRpZiAoIWlucylcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0aWYgKFNlc3Npb24gJiYgU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZVByaW50XCIpKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHR2YXIgZmxvdyA9IFdvcmtmbG93TWFuYWdlci5nZXRGbG93KGlucy5mbG93KTtcblx0XHRpZiAoIWZsb3cpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXG5cdFx0Ly8g5YiG5Y+R5ZCO55qEIOmZhOS7tu+8jOS4jeWPr+S7pee8lui+kS/liKDpmaTvvIzkuZ/kuI3orqnkuIrkvKDmlrDnmoTpmYTku7YsIOa1geeoi+WIl+ihqO+8mua3u+WKoOWxnuaApyDigJjooqvliIblj5HlkI7mmK/lkKblhYHorrjkuIrkvKDpmYTku7bigJkgIzE4Mzdcblx0XHRpZiAoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSAmJiAhZmxvdy51cGxvYWRfYWZ0ZXJfYmVpbmdfZGlzdHJpYnV0ZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdGlmIChTZXNzaW9uLmdldChcImJveFwiKSAhPSBcImRyYWZ0XCIgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgIT0gXCJpbmJveFwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cblx0XHQvLyDlt7Lnu4/nu5PmnZ/nmoTljZXlrZDkuI3og73mlLnpmYTku7Zcblx0XHRpZiAoaW5zLnN0YXRlID09IFwiY29tcGxldGVkXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblxuXHRcdC8vIGNj55qE5Y2V5a2Q77yM5Y+q5pyJ5Zyo5b2T5YmN5q2l6aqk5omN6IO95L+u5pS56ZmE5Lu2XG5cdFx0dmFyIGFwcHJvdmUgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudEFwcHJvdmUoKTtcblx0XHRpZiAoYXBwcm92ZSAmJiBhcHByb3ZlLnR5cGUgPT0gXCJjY1wiKSB7XG5cdFx0XHR2YXIgY3VycmVudFRyYWNlID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRUcmFjZSgpO1xuXHRcdFx0aWYoY3VycmVudFRyYWNlICYmIGN1cnJlbnRUcmFjZS5faWQgIT0gYXBwcm92ZS50cmFjZSl7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoSW5zdGFuY2VNYW5hZ2VyLmlzQ0MoaW5zKSkge1xuXHRcdFx0dmFyIHN0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q0NTdGVwKCk7XG5cdFx0XHRpZiAoc3RlcCAmJiAoc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09IHRydWUgfHwgc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09IHVuZGVmaW5lZCkpXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBjdXJyZW50X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcblx0XHRcdGlmIChjdXJyZW50X3N0ZXAgJiYgKGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09IHRydWUgfHwgY3VycmVudF9zdGVwLmNhbl9lZGl0X25vcm1hbF9hdHRhY2ggPT0gdW5kZWZpbmVkKSlcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2Vcblx0fSxcblxuXHRtYWluX2F0dGFjaG1lbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRpZiAoIWlucylcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0dmFyIHN0YXJ0X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0U3RhcnRTdGVwKCk7XG5cblx0XHQvLyDlpoLmnpzmmK/ooqvliIblj5HnmoTnlLPor7fljZXlubbkuJTmnInkv67mlLnmraPmlofnmoTmnYPpmZDvvIzliJnkvJjlhYjmmL7npLrljp/nlLPor7fljZXmlofku7Zcblx0XHR2YXIgbWFpbl9hdHRhY2ggPSBudWxsO1xuXHRcdGlmIChpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlICYmIHN0YXJ0X3N0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2ggPT0gdHJ1ZSkge1xuXHRcdFx0bWFpbl9hdHRhY2ggPSBjZnMuaW5zdGFuY2VzLmZpbmRPbmUoe1xuXHRcdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiBpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlLFxuXHRcdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHRcdCdtZXRhZGF0YS5tYWluJzogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKCFtYWluX2F0dGFjaCkge1xuXHRcdFx0bWFpbl9hdHRhY2ggPSBjZnMuaW5zdGFuY2VzLmZpbmRPbmUoe1xuXHRcdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiBpbnMuX2lkLFxuXHRcdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHRcdCdtZXRhZGF0YS5tYWluJzogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1haW5fYXR0YWNoO1xuXHR9LFxuXG5cdG5vcm1hbF9hdHRhY2htZW50czogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGlmICghaW5zKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHR2YXIgc2VsZWN0b3IgPSB7XG5cdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHQnbWV0YWRhdGEubWFpbic6IHtcblx0XHRcdFx0JG5lOiB0cnVlXG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHR2YXIgYXR0cyA9IG5ldyBBcnJheSgpO1xuXG5cdFx0aWYgKGlucy5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UpIHtcblx0XHRcdC8vIOWmguaenOaYr+iiq+WIhuWPkeeahOeUs+ivt+WNle+8jOWImeaYvuekuuWOn+eUs+ivt+WNleaWh+S7tiwg5aaC5p6c6YCJ5oup5LqG5bCG5Y6f6KGo5Y2V5a2Y5YKo5Li66ZmE5Lu25Lmf6KaB5pi+56S6LCDlkIzml7bkuZ/opoHmmL7npLrmlrDkuIrkvKDnmoTpmYTku7Zcblx0XHRcdHZhciBkZmlzID0gXy5jbG9uZShpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcykgfHwgW107XG5cdFx0XHRkZmlzLnB1c2goaW5zLl9pZCk7XG5cdFx0XHRzZWxlY3RvclsnbWV0YWRhdGEuaW5zdGFuY2UnXSA9IHtcblx0XHRcdFx0JGluOiBkZmlzXG5cdFx0XHR9O1xuXG5cblx0XHRcdHNlbGVjdG9yW1wiJG9yXCJdID0gW3tcblx0XHRcdFx0XCJtZXRhZGF0YS5pbnN0YW5jZVwiOiBpbnMuX2lkXG5cdFx0XHR9LCB7XG5cdFx0XHRcdFwibWV0YWRhdGEuaW5zdGFuY2VcIjoge1xuXHRcdFx0XHRcdCRpbjogaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXNcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJtZXRhZGF0YS5pc19wcml2YXRlXCI6IHtcblx0XHRcdFx0XHQkbmU6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fV1cblxuXHRcdFx0Ly8g5aaC5p6c5Y6f55Sz6K+35Y2V5pyJ5q2j5paH5L2G5piv5YiG5Y+R5ZCO5rKh5pyJ5q2j5paH5p2D6ZmQ77yM5YiZ5Y6f55Sz6K+35Y2V5q2j5paH5pi+56S65Zyo6ZmE5Lu25qCPXG5cdFx0XHR2YXIgc3RhcnRfc3RlcCA9IEluc3RhbmNlTWFuYWdlci5nZXRTdGFydFN0ZXAoKTtcblx0XHRcdGlmIChzdGFydF9zdGVwICYmIHN0YXJ0X3N0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2ggIT0gdHJ1ZSkge1xuXHRcdFx0XHR2YXIgZGlzdHJpYnV0ZV9tYWluID0gY2ZzLmluc3RhbmNlcy5maW5kT25lKHtcblx0XHRcdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiB7XG5cdFx0XHRcdFx0XHQkaW46IGlucy5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHRcdFx0J21ldGFkYXRhLm1haW4nOiB0cnVlLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGRpc3RyaWJ1dGVfbWFpbikge1xuXHRcdFx0XHRcdHZhciBmaXJzdFZlcnNpb25NYWluID0gY2ZzLmluc3RhbmNlcy5maW5kT25lKGRpc3RyaWJ1dGVfbWFpbi5tZXRhZGF0YS5wYXJlbnQpO1xuXHRcdFx0XHRcdGRpc3RyaWJ1dGVfbWFpbi5hdHRhY2htZW50VXBsb2FkZWRBdCA9IGZpcnN0VmVyc2lvbk1haW4gPyBmaXJzdFZlcnNpb25NYWluLnVwbG9hZGVkQXQgOiBkaXN0cmlidXRlX21haW4udXBsb2FkZWRBdDtcblx0XHRcdFx0XHRhdHRzLnB1c2goZGlzdHJpYnV0ZV9tYWluKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxlY3RvclsnbWV0YWRhdGEuaW5zdGFuY2UnXSA9IGlucy5faWQ7XG5cdFx0fVxuXG5cdFx0Y2ZzLmluc3RhbmNlcy5maW5kKHNlbGVjdG9yKS5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtcblx0XHRcdHZhciBmaXJzdFZlcnNpb24gPSBjZnMuaW5zdGFuY2VzLmZpbmRPbmUoYy5tZXRhZGF0YS5wYXJlbnQpO1xuXHRcdFx0Yy5hdHRhY2htZW50VXBsb2FkZWRBdCA9IGZpcnN0VmVyc2lvbiA/IGZpcnN0VmVyc2lvbi51cGxvYWRlZEF0IDogYy51cGxvYWRlZEF0O1xuXHRcdFx0YXR0cy5wdXNoKGMpO1xuXHRcdH0pXG5cblx0XHRyZXR1cm4gXy5zb3J0QnkoYXR0cywgJ2F0dGFjaG1lbnRVcGxvYWRlZEF0Jyk7XG5cdH0sXG5cblx0c2hvd0F0dGFjaG1lbnRzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgKCFpbnMpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHQvLyDlpoLmnpzmmK/ooqvliIblj5HnmoTnlLPor7fljZXvvIzliJnmmL7npLrljp/nlLPor7fljZXmlofku7Yg5ZKM5YiG5Y+R5ZCO55Sz6K+35Y2V5paH5Lu2XG5cdFx0dmFyIGluc3RhbmNlSWRzID0gXy5jbG9uZShpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcykgfHwgW107XG5cdFx0aW5zdGFuY2VJZHMucHVzaChpbnMuX2lkKTtcblx0XHR2YXIgYXR0YWNobWVudHNfY291bnQgPSBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuXHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzoge1xuXHRcdFx0XHQkaW46IGluc3RhbmNlSWRzXG5cdFx0XHR9LFxuXHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlXG5cdFx0fSkuY291bnQoKTtcblxuXHRcdGlmIChTZXNzaW9uICYmIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSAmJiBhdHRhY2htZW50c19jb3VudCA8IDEpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PSBcImRyYWZ0XCIgfHwgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gXCJpbmJveFwiIHx8IGF0dGFjaG1lbnRzX2NvdW50ID4gMClcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRfdDogZnVuY3Rpb24oa2V5KSB7XG5cdFx0cmV0dXJuIFRBUGkxOG4uX18oa2V5KVxuXHR9LFxuXG5cdF86IGZ1bmN0aW9uKGtleSkge1xuXHRcdHZhciBsb2NhbGU7XG5cdFx0aWYgKE1ldGVvci5pc0NsaWVudCkge1xuXHRcdFx0cmV0dXJuIFRBUGkxOG4uX18oa2V5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZTtcblx0XHRcdHJldHVybiBUQVBpMThuLl9fKGtleSwge30sIGxvY2FsZSk7XG5cdFx0fVxuXHR9LFxuXG5cdGZsb3dfZmlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRpZiAoIWlucylcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gY2ZzLmZpbGVzLmZpbmQoeyAnbWV0YWRhdGEuc3BhY2UnOiBpbnMuc3BhY2UsICdtZXRhZGF0YS5vYmplY3RfbmFtZSc6ICdmbG93cycsICdtZXRhZGF0YS5yZWNvcmRfaWQnOiBpbnMuZmxvdyB9KTtcblx0fSxcblxuXHRpc0RyYWZ0QW5kRmxvd2ZpbGVzRXhpc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRpZiAoIWlucylcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gKFNlc3Npb24uZ2V0KCdib3gnKSA9PSAnZHJhZnQnKSAmJiAhIWNmcy5maWxlcy5maW5kKHsgJ21ldGFkYXRhLnNwYWNlJzogaW5zLnNwYWNlLCAnbWV0YWRhdGEub2JqZWN0X25hbWUnOiAnZmxvd3MnLCAnbWV0YWRhdGEucmVjb3JkX2lkJzogaW5zLmZsb3cgfSkuY291bnQoKTtcblx0fVxuXG5cbn1cblxuaWYgKE1ldGVvci5pc1NlcnZlcikge1xuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLl90ID0gZnVuY3Rpb24oa2V5KSB7XG5cdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXHRcdHJldHVybiBUQVBpMThuLl9fKGtleSwge30sIGxvY2FsZSlcblx0fVxuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLmVuYWJsZWRfYWRkX21haW5fYXR0YWNobWVudCA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9O1xuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLmVuYWJsZWRfZWRpdF9ub3JtYWxfYXR0YWNobWVudCA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9O1xuXG5cdEluc3RhbmNlQXR0YWNobWVudFRlbXBsYXRlLmhlbHBlcnMubWFpbl9hdHRhY2htZW50ID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGluc3RhbmNlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmluc3RhbmNlO1xuXHRcdHZhciBpbnN0YW5jZUlkcyA9IF8uY29tcGFjdChbaW5zdGFuY2UuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlLCBpbnN0YW5jZS5faWRdKTtcblx0XHR2YXIgYXR0YWNobWVudCA9IGNmcy5pbnN0YW5jZXMuZmluZE9uZSh7XG5cdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiB7XG5cdFx0XHRcdCRpbjogaW5zdGFuY2VJZHNcblx0XHRcdH0sXG5cdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHQnbWV0YWRhdGEubWFpbic6IHRydWVcblx0XHR9KTtcblxuXHRcdHJldHVybiBhdHRhY2htZW50O1xuXHR9O1xuXG5cdEluc3RhbmNlQXR0YWNobWVudFRlbXBsYXRlLmhlbHBlcnMubm9ybWFsX2F0dGFjaG1lbnRzID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHN0ZWVkb3NEYXRhID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhXG5cdFx0dmFyIGluc3RhbmNlID0gc3RlZWRvc0RhdGEuaW5zdGFuY2U7XG5cdFx0dmFyIGluc3RhbmNlSWRzID0gXy5jbG9uZShpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzKSB8fCBbXTtcblx0XHRpbnN0YW5jZUlkcy5wdXNoKGluc3RhbmNlLl9pZCk7XG5cdFx0dmFyIGF0dGFjaG1lbnRzID0gY2ZzLmluc3RhbmNlcy5maW5kKHtcblx0XHRcdCdtZXRhZGF0YS5pbnN0YW5jZSc6IHtcblx0XHRcdFx0JGluOiBpbnN0YW5jZUlkc1xuXHRcdFx0fSxcblx0XHRcdCdtZXRhZGF0YS5jdXJyZW50JzogdHJ1ZSxcblx0XHRcdCdtZXRhZGF0YS5tYWluJzoge1xuXHRcdFx0XHQkbmU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQkb3I6IFt7XG5cdFx0XHRcdCdtZXRhZGF0YS5pc19wcml2YXRlJzoge1xuXHRcdFx0XHRcdCRuZTogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9LCB7XG5cdFx0XHRcdCdtZXRhZGF0YS5pc19wcml2YXRlJzogdHJ1ZSxcblx0XHRcdFx0XCJtZXRhZGF0YS5vd25lclwiOiBzdGVlZG9zRGF0YS5zZXNzaW9uVXNlcklkIHx8IHN0ZWVkb3NEYXRhLnVzZXJJZCB8fCAnLTEnIC8vIOmYsuatouaVsOaNruW8guW4uOaXtizmmL7npLrkuobnp4HmnInpmYTku7Zcblx0XHRcdH1dXG5cdFx0fSkuZmV0Y2goKTtcblxuXHRcdHJldHVybiBhdHRhY2htZW50cztcblx0fTtcblxuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLnNob3dBdHRhY2htZW50cyA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnN0YW5jZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5pbnN0YW5jZTtcblx0XHR2YXIgaW5zdGFuY2VJZHMgPSBfLmNsb25lKGluc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMpIHx8IFtdO1xuXHRcdGluc3RhbmNlSWRzLnB1c2goaW5zdGFuY2UuX2lkKTtcblxuXHRcdHZhciBhdHRhY2htZW50cyA9IGNmcy5pbnN0YW5jZXMuZmluZCh7XG5cdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiB7XG5cdFx0XHRcdCRpbjogaW5zdGFuY2VJZHNcblx0XHRcdH0sXG5cdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWVcblx0XHR9KS5mZXRjaCgpO1xuXG5cdFx0aWYgKGF0dGFjaG1lbnRzICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLnNob3dNYWluVGl0bGUgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zdGFuY2UgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuaW5zdGFuY2U7XG5cdFx0dmFyIGluc3RhbmNlSWRzID0gXy5jb21wYWN0KFtpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UsIGluc3RhbmNlLl9pZF0pO1xuXHRcdHZhciBtYWluX2F0dGFjaF9jb3VudCA9IGNmcy5pbnN0YW5jZXMuZmluZCh7XG5cdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiB7XG5cdFx0XHRcdCRpbjogaW5zdGFuY2VJZHNcblx0XHRcdH0sXG5cdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHQnbWV0YWRhdGEubWFpbic6IHRydWVcblx0XHR9KS5jb3VudCgpO1xuXG5cdFx0cmV0dXJuIG1haW5fYXR0YWNoX2NvdW50ID4gMFxuXHR9XG59XG4iLCJtYXJrZWQgPSByZXF1aXJlKFwibWFya2VkXCIpXG5JbnN0YW5jZVNpZ25UZXh0LmhlbHBlcnMgPVxuXHRzaG93OiAoc3RlcE5hbWUpLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlmIFNlc3Npb24uZ2V0KCdpbnN0YW5jZVByaW50Jylcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRpZiBJbnN0YW5jZU1hbmFnZXIuaXNJbmJveCgpXG5cdFx0XHRcdG15QXBwcm92ZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50QXBwcm92ZSgpXG5cdFx0XHRcdGlmIG15QXBwcm92ZVxuXHRcdFx0XHRcdGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0XHRcdFx0bXlUcmFjZSA9IGluc3RhbmNlPy50cmFjZXM/LmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgbXlBcHByb3ZlLnRyYWNlKVxuXHRcdFx0XHRcdHJldHVybiBteVRyYWNlPy5uYW1lID09IHN0ZXBOYW1lXG5cdFx0cmV0dXJuIGZhbHNlXG5cblx0ZGVmYXVsdERlc2NyaXB0aW9uOiAoKS0+XG4jXHRcdHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEuZGVmYXVsdF9kZXNjcmlwdGlvbiB8fCBUQVBpMThuLl9fKFwiaW5zdGFuY2VfZGVmYXVsdF9vcGluaW9uXCIpXG5cdFx0cmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5kZWZhdWx0X2Rlc2NyaXB0aW9uXG5cblx0dHJhY2VzOiAoKS0+XG5cdFx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy50cmFjZXMoKVxuXG5cdHRyYWNlOiAoc3RlcE5hbWUsIG9ubHlfY2Nfb3BpbmlvbiwgaW1hZ2Vfc2lnbiwgdG9wX2tleXdvcmRzKS0+XG5cdFx0aW5zdGFuY2UgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluc3RhbmNlKClcblxuXHRcdGlzX2NvbXBsZXRlZCA9IGluc3RhbmNlPy5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiXG5cblx0XHRjb21wbGV0ZWRfZGF0ZSA9IGlmIGlzX2NvbXBsZXRlZCB0aGVuIF8ubGFzdChpbnN0YW5jZS50cmFjZXMpPy5maW5pc2hfZGF0ZT8uZ2V0VGltZSgpIGVsc2UgMFxuXG5cdFx0aWYgaXNfY29tcGxldGVkICYmIGluc3RhbmNlLmZpbmlzaF9kYXRlXG5cdFx0XHRjb21wbGV0ZWRfZGF0ZSA9IGluc3RhbmNlLmZpbmlzaF9kYXRlPy5nZXRUaW1lKClcblxuXHRcdHRyYWNlcyA9IEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudHJhY2VzKClcblxuXHRcdGFwcHJvdmVzID0gXy5jbG9uZSh0cmFjZXNbc3RlcE5hbWVdKVxuXG5cdFx0YXBwcm92ZV9zb3J0ID0gKGFwcHJvdmVzLCB0b3Bfa2V5d29yZHMpLT5cblxuI+WvuUFwcHJvdmVz5o6S5bqP77yMIOaMieeFp+aPkOS6pOaXtumXtOaOkuWAkuW6j++8jOWmguaenOayoeacieaPkOS6pOWImeaYvuekuuWcqOacgOS4iui+uVxuXHRcdFx0YXBwcm92ZXNfc29ydGVkID0gXy5zb3J0QnkgYXBwcm92ZXMsIChhcHByb3ZlKS0+XG5cdFx0XHRcdHJldHVybiAtKGFwcHJvdmUuZmluaXNoX2RhdGUgfHwgbmV3IERhdGUoKSkuZ2V0VGltZSgpXG5cblx0XHRcdCPpgJrov4flhbPplK7lrZfmjpLluo9cblx0XHRcdGlmIHRvcF9rZXl3b3Jkc1xuXHRcdFx0XHR0b3BfYXBwcm92ZXMgPSBuZXcgQXJyYXkoKVxuXG5cdFx0XHRcdHRvcF9rZXl3b3Jkcy5zcGxpdChcIixcIikuZm9yRWFjaCAoa2V5KSAtPlxuXHRcdFx0XHRcdHRvcF9hcHByb3ZlcyA9IF8udW5pb24gdG9wX2FwcHJvdmVzLCBfLmZpbHRlcihhcHByb3Zlc19zb3J0ZWQsIChhcHByb3ZlKS0+XG5cdFx0XHRcdFx0XHRyZXR1cm4gYXBwcm92ZT8uaGFuZGxlcl9uYW1lPy5pbmRleE9mKGtleSkgPiAtMVxuXHRcdFx0XHRcdClcblx0XHRcdFx0IyDlr7nnva7pobbmhI/op4HmjInnhaflpITnkIbkuovku7bmjpLlgJLluo9cblx0XHRcdFx0dG9wX2FwcHJvdmVzID0gXy5zb3J0QnkgdG9wX2FwcHJvdmVzLCAodG9wX2FwcHJvdmUpLT5cblx0XHRcdFx0XHRyZXR1cm4gLSh0b3BfYXBwcm92ZS5maW5pc2hfZGF0ZSB8fCBuZXcgRGF0ZSgpKS5nZXRUaW1lKClcblxuXHRcdFx0XHRhcHByb3Zlc19zb3J0ZWQgPSBfLnVuaW9uIHRvcF9hcHByb3ZlcywgYXBwcm92ZXNfc29ydGVkXG5cdFx0XHRyZXR1cm4gYXBwcm92ZXNfc29ydGVkIHx8IFtdXG5cblx0XHRhcHByb3ZlcyA9IF8uZmlsdGVyIGFwcHJvdmVzLCAoYSktPlxuXHRcdFx0cmV0dXJuIGEudHlwZSBpc250IFwiZm9yd2FyZFwiIGFuZCBhLnR5cGUgaXNudCBcImRpc3RyaWJ1dGVcIiBhbmQgYS50eXBlIGlzbnQgXCJ0ZXJtaW5hdGVkXCJcblxuXHRcdGlmIG9ubHlfY2Nfb3BpbmlvblxuXHRcdFx0YXBwcm92ZXMgPSBhcHByb3Zlcz8uZmlsdGVyUHJvcGVydHkoXCJ0eXBlXCIsIFwiY2NcIilcblxuXHRcdGFwcHJvdmVzX3NvcnRlZCA9IGFwcHJvdmVfc29ydChhcHByb3ZlcywgdG9wX2tleXdvcmRzKVxuXG5cdFx0YXBwcm92ZXNHcm91cCA9IF8uZ3JvdXBCeShhcHByb3ZlcywgXCJoYW5kbGVyXCIpO1xuXG5cdFx0aGFzTmV4dCA9IChhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKSAtPlxuXHRcdFx0aGFuZGxlckFwcHJvdmVzID0gYXBwcm92ZXNHcm91cFthcHByb3ZlLmhhbmRsZXJdXG5cdFx0XHRyZXR1cm4gXy5pbmRleE9mKGhhbmRsZXJBcHByb3ZlcywgYXBwcm92ZSkgKyAxIDwgaGFuZGxlckFwcHJvdmVzLmxlbmd0aFxuXG5cdFx0aGF2ZURlc2NyaXB0aW9uQXBwcm92ZSA9IChhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKSAtPlxuXHRcdFx0aGFuZGxlckFwcHJvdmVzID0gYXBwcm92ZXNHcm91cFthcHByb3ZlLmhhbmRsZXJdXG5cblx0XHRcdGRlc2NyaXB0aW9uQXBwcm92ZXMgPSBfLmZpbHRlciBoYW5kbGVyQXBwcm92ZXMsIChhKS0+XG5cdFx0XHRcdGlmIGEuZGVzY3JpcHRpb25cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdFx0aWYgZGVzY3JpcHRpb25BcHByb3Zlcy5sZW5ndGggPT0gMFxuXHRcdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdFx0cmV0dXJuIHRydWVcblxuXG5cdFx0YXBwcm92ZXNfc29ydGVkLmZvckVhY2ggKGFwcHJvdmUpIC0+XG4jXHRcdFx05pyJ6L6T5YWl5oSP6KeBIOaIliDmnIDmlrDkuIDmnaHlubbkuJTnlKjmiLfmsqHmnInovpPlhaXov4fmhI/op4FcbiNcdFx0XHRpZiAhYXBwcm92ZS5pc19maW5pc2hlZCB8fCBhcHByb3ZlLmRlc2NyaXB0aW9uIHx8ICghaGFzTmV4dChhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKSAmJiAhaGF2ZURlc2NyaXB0aW9uQXBwcm92ZShhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKSlcbiNcdFx0XHRpZiAhaGFzTmV4dChhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKVxuXHRcdFx0aWYgYXBwcm92ZS5zaWduX3Nob3cgIT0gZmFsc2UgJiYgKGFwcHJvdmUuZGVzY3JpcHRpb24gfHwgKCFhcHByb3ZlLmRlc2NyaXB0aW9uICYmICFoYXNOZXh0KGFwcHJvdmUsIGFwcHJvdmVzR3JvdXApICYmICFhcHByb3ZlLmlzX2ZpbmlzaGVkKSB8fCBNZXRlb3Iuc2V0dGluZ3MucHVibGljLndvcmtmbG93Py5zaG93QmxhbmtBcHByb3ZlRGVzY3JpcHRpb24pXG5cdFx0XHRcdGlmIGFwcHJvdmUuanVkZ2UgaXNudCAndGVybWluYXRlZCdcblx0XHRcdFx0XHRhcHByb3ZlLl9kaXNwbGF5ID0gdHJ1ZVxuXG5cdFx0YXBwcm92ZXNfc29ydGVkID0gXy5maWx0ZXIgYXBwcm92ZXNfc29ydGVkLCAoYSkgLT5cblx0XHRcdGlmIGlzX2NvbXBsZXRlZFxuXHRcdFx0XHRyZXR1cm4gYS5fZGlzcGxheSA9PSB0cnVlICYmIGEuaXNfZmluaXNoZWQgJiYgYS5maW5pc2hfZGF0ZT8uZ2V0VGltZSgpIDw9IGNvbXBsZXRlZF9kYXRlXG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJldHVybiBhLl9kaXNwbGF5ID09IHRydWVcblx0XHRyZXR1cm4gYXBwcm92ZXNfc29ydGVkXG5cblx0aW5jbHVkZTogKGEsIGIpIC0+XG5cdFx0cmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaW5jbHVkZShhLCBiKVxuXG5cdHVuZW1wdHk6ICh2YWwpLT5cblx0XHRyZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy51bmVtcHR5KHZhbCkgfHwgTWV0ZW9yLnNldHRpbmdzLnB1YmxpYy53b3JrZmxvdz8uc2hvd0JsYW5rQXBwcm92ZURlc2NyaXB0aW9uXG5cblx0Zm9ybWF0RGF0ZTogKGRhdGUsIG9wdGlvbnMpLT5cblx0XHRpZiAhb3B0aW9uc1xuXHRcdFx0b3B0aW9ucyA9IHtcImZvcm1hdFwiOiBcIllZWVktTU0tRERcIn1cblxuXHRcdHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmZvcm1hdERhdGUoZGF0ZSwgb3B0aW9ucylcblxuXHRpc015QXBwcm92ZTogKGFwcHJvdmUsIG9ubHlfY2Nfb3BpbmlvbikgLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpICE9ICdpbmJveCdcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0aW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cblx0XHRcdGN1cnJlbnRBcHByb3ZlID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRBcHByb3ZlKClcblxuXHRcdFx0aWYgIWFwcHJvdmU/Ll9pZFxuXHRcdFx0XHRhcHByb3ZlID0gY3VycmVudEFwcHJvdmVcblxuXHRcdFx0aWYgYXBwcm92ZS5faWQgPT0gY3VycmVudEFwcHJvdmU/Ll9pZCAmJiBjdXJyZW50QXBwcm92ZT8udHlwZSA9PSAnY2MnICYmIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5uYW1lXG5cdFx0XHRcdGlmIF8uaW5kZXhPZihjdXJyZW50QXBwcm92ZT8ub3Bpbmlvbl9maWVsZHNfY29kZSwgVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLm5hbWUpID4gLTFcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRcdGlmICEoY3VycmVudEFwcHJvdmU/LnR5cGUgPT0gJ2NjJykgJiYgb25seV9jY19vcGluaW9uXG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0XHRpZiBjdXJyZW50QXBwcm92ZSAmJiBhcHByb3ZlLl9pZCA9PSBjdXJyZW50QXBwcm92ZS5faWRcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRyZXR1cm4gZmFsc2VcblxuXHRteUFwcHJvdmVEZXNjcmlwdGlvbjogKGFwcHJvdmVJZCktPlxuXHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94J1xuXHRcdFx0XHRteUFwcHJvdmUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpPy5teUFwcHJvdmU/LmdldCgpXG5cdFx0XHRcdGlmIG15QXBwcm92ZSAmJiBteUFwcHJvdmUuaWQgPT0gYXBwcm92ZUlkXG5cdFx0XHRcdFx0aWYgIW15QXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgfHwgbXlBcHByb3ZlLnNpZ25fZmllbGRfY29kZSA9PSBUZW1wbGF0ZS5pbnN0YW5jZSgpPy5kYXRhPy5uYW1lXG5cdFx0XHRcdFx0XHRpZiAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZV9teV9hcHByb3ZlX2Rlc2NyaXB0aW9uXCIpXG5cdFx0XHRcdFx0XHRcdHJldHVybiBteUFwcHJvdmU/LmRlc2NyaXB0aW9uIHx8IFwiXCJcblx0XHRcdFx0XHRcdHJldHVybiBTZXNzaW9uLmdldChcImluc3RhbmNlX215X2FwcHJvdmVfZGVzY3JpcHRpb25cIilcblxuXHRub3c6ICgpLT5cblx0XHRyZXR1cm4gbmV3IERhdGUoKTtcblxuXHRpc1JlYWRPbmx5OiAoKS0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRyZXR1cm4gQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpXG5cdFx0cmV0dXJuIGZhbHNlXG5cblx0aXNPcGluaW9uT2ZGaWVsZDogKGFwcHJvdmUpLT5cblx0XHRpZiBhcHByb3ZlLnR5cGUgPT0gXCJjY1wiICYmIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5uYW1lXG5cdFx0XHRpZiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZSA9PSBhcHByb3ZlLnNpZ25fZmllbGRfY29kZVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRtYXJrRG93blRvSHRtbDogKG1hcmtEb3duU3RyaW5nKS0+XG5cdFx0aWYgbWFya0Rvd25TdHJpbmdcblx0XHRcdCMgcmVuZGVyZXIgPSBuZXcgTWFya2Rvd24uUmVuZGVyZXIoKTtcblx0XHRcdCMgcmVuZGVyZXIubGluayA9IChocmVmLCB0aXRsZSwgdGV4dCkgLT5cblx0XHRcdCMgXHRyZXR1cm4gXCI8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nI3tocmVmfScgdGl0bGU9JyN7dGl0bGV9Jz4je3RleHR9PC9hPlwiXG5cdFx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdFx0bWFya2VkID0gTnBtLnJlcXVpcmUoJ21hcmtlZCcpXG5cdFx0XHRyZXR1cm4gU3BhY2ViYXJzLlNhZmVTdHJpbmcobWFya2VkLnBhcnNlKG1hcmtEb3duU3RyaW5nKSlcblxuXHRzdGVwczogKGZpZWxkX2Zvcm11bGEsIHN0ZXAsIG9ubHlfY2Nfb3BpbmlvbiwgaW1hZ2Vfc2lnbiktPlxuXHRcdHN0ZXBzID0gW11cblx0XHRpZiAhc3RlcFxuXHRcdFx0aWYgIWZpZWxkX2Zvcm11bGFcblx0XHRcdFx0ZmllbGRfZm9ybXVsYSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk/LmZpZWxkcz8uZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgdGhpcy5uYW1lKS5mb3JtdWxhXG5cdFx0XHRzdGVwcyA9IEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZ2V0T3BpbmlvbkZpZWxkU3RlcHNOYW1lKGZpZWxkX2Zvcm11bGEsIFRlbXBsYXRlLmluc3RhbmNlKCk/LmRhdGEudG9wX2tleXdvcmRzKVxuXHRcdGVsc2Vcblx0XHRcdHN0ZXBzID0gW3tzdGVwTmFtZTogc3RlcCwgb25seV9jY19vcGluaW9uOiBvbmx5X2NjX29waW5pb24sIGltYWdlX3NpZ246IGltYWdlX3NpZ259XVxuXHRcdHJldHVybiBzdGVwc1xuXG5cdGltYWdlU2lnbkRhdGE6IChoYW5kbGVyKSAtPlxuXHRcdHJldHVybiB7dXNlcjogaGFuZGxlcn1cblxuXHRzaG93U2lnbkltYWdlOiAoaGFuZGxlciwgaW1hZ2Vfc2lnbiwganVkZ2UpIC0+XG5cdFx0aWYgWydyZXR1cm5lZCcsICd0ZXJtaW5hdGVkJywgJ3JldHJpZXZlZCddLmluY2x1ZGVzKGp1ZGdlKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0c3BhY2VVc2VyU2lnbiA9IEltYWdlU2lnbi5oZWxwZXJzLnNwYWNlVXNlclNpZ24oaGFuZGxlcilcblxuXHRcdGlmIHNwYWNlVXNlclNpZ24/LnNpZ24gJiYgaW1hZ2Vfc2lnblxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRnZXRMYXN0U2lnbkFwcHJvdmU6ICgpLT5cblx0XHRpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblxuXHRcdHJldHVybiBfLmxhc3QoVHJhY2VzTWFuYWdlci5nZXRIYW5kbGVyU2lnblNob3dBcHByb3ZlcyBpbnMsIE1ldGVvci51c2VySWQoKSlcblxuXG5cdGxhc3RNeUFwcHJvdmVEZXNjcmlwdGlvbjogKCktPlxuXHRcdHRyYWNlcyA9IEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudHJhY2VzKClcblx0XHRjdXJyZW50U3RlcCA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50U3RlcCgpO1xuXHRcdGFwcHJvdmVzID0gXy5jbG9uZSh0cmFjZXNbY3VycmVudFN0ZXAubmFtZV0pXG5cblx0XHRhcHByb3ZlcyA9IGFwcHJvdmVzLmZpbHRlclByb3BlcnR5KFwiaGFuZGxlclwiLCBNZXRlb3IudXNlcklkKCkpXG5cblx0XHRpZiBhcHByb3Zlcy5sZW5ndGggPiAxXG5cdFx0XHRyZXR1cm4gYXBwcm92ZXNbYXBwcm92ZXMubGVuZ3RoIC0gMl0/LmRlc2NyaXB0aW9uXG5cblx0XHRyZXR1cm4gXCJcIjtcblxuXHRzaG93QXBwcm92ZTogKGFwcHJvdmUpLT5cblx0XHRpZiAhYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgfHwgYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgPT0gVGVtcGxhdGUuaW5zdGFuY2UoKT8uZGF0YT8ubmFtZVxuXHRcdFx0aWYgYXBwcm92ZT8uaXNfcmVhZFxuXHRcdFx0XHRpZiBhcHByb3ZlLmlzX2ZpbmlzaGVkXG5cdFx0XHRcdFx0cmV0dXJuIFtcImFwcHJvdmVkXCIsIFwicmVqZWN0ZWRcIiwgXCJzdWJtaXR0ZWRcIiwgXCJyZWFkZWRcIl0uaW5jbHVkZXMoYXBwcm92ZS5qdWRnZSlcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0anVkZ2VfZGVzY3JpcHRpb246IChqdWRnZSktPlxuXHRcdHJldHVybiB0KGp1ZGdlICsgXCJfZGVzY3JpcHRpb25cIilcblxuXHRpc19hcHByb3ZlZDogKGp1ZGdlKS0+XG5cdFx0cmV0dXJuIFwiYXBwcm92ZWRcIiA9PSBqdWRnZVxuXG5cdGlzX3JlamVjdGVkOiAoanVkZ2UpLT5cblx0XHRyZXR1cm4gXCJyZWplY3RlZFwiID09IGp1ZGdlXG5cblx0aXNfcmVhZGVkOiAoanVkZ2UpLT5cblx0XHRyZXR1cm4gW1wiYXBwcm92ZWRcIiwgXCJyZWplY3RlZFwiLCBcInN1Ym1pdHRlZFwiLCBcInJlYWRlZFwiXS5pbmNsdWRlcyhqdWRnZSlcblxuXHRhZGRDbGFzczogKCktPlxuXHRcdG5hbWUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpPy5kYXRhPy5uYW1lXG5cdFx0c2V0VGltZW91dCAoKSAtPlxuXHRcdFx0dHJ5XG5cdFx0XHRcdGVsZW1lbnQgPSAkKFwiLmF1dG9tYXRpYy5vcGluaW9uLWZpZWxkLVwiICsgbmFtZSlcblx0XHRcdFx0aWYgZWxlbWVudC5sZW5ndGggPiAwXG5cdFx0XHRcdFx0aWYgZWxlbWVudD8uaXMoXCJ0ZFwiKVxuXHRcdFx0XHRcdFx0ZWxlbWVudC5hZGRDbGFzcygnZmllbGQtZWRpdGFibGUnKVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdCQoXCIuaW5zdGFuY2Utc2lnblwiLCBlbGVtZW50KS5hZGRDbGFzcygnZmllbGQtZWRpdGFibGUnKVxuXHRcdFx0Y2F0Y2ggZVxuXHRcdFx0XHRjb25zb2xlLmxvZyBlXG5cdFx0LCAxXG5cdFx0cmV0dXJuICcnXG5cbmlmIE1ldGVvci5pc1NlcnZlclxuXHRJbnN0YW5jZVNpZ25UZXh0LmhlbHBlcnMuZGVmYXVsdERlc2NyaXB0aW9uID0gLT5cblx0XHRsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlXG5cdFx0cmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5kZWZhdWx0X2Rlc2NyaXB0aW9uIHx8IFRBUGkxOG4uX18oXCJpbnN0YW5jZV9kZWZhdWx0X29waW5pb25cIiwge30sIGxvY2FsZSkiLCJ2YXIgbWFya2VkO1xuXG5tYXJrZWQgPSByZXF1aXJlKFwibWFya2VkXCIpO1xuXG5JbnN0YW5jZVNpZ25UZXh0LmhlbHBlcnMgPSB7XG4gIHNob3c6IGZ1bmN0aW9uKHN0ZXBOYW1lKSB7XG4gICAgdmFyIGluc3RhbmNlLCBteUFwcHJvdmUsIG15VHJhY2UsIHJlZjtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICBpZiAoU2Vzc2lvbi5nZXQoJ2luc3RhbmNlUHJpbnQnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoSW5zdGFuY2VNYW5hZ2VyLmlzSW5ib3goKSkge1xuICAgICAgICBteUFwcHJvdmUgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudEFwcHJvdmUoKTtcbiAgICAgICAgaWYgKG15QXBwcm92ZSkge1xuICAgICAgICAgIGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICAgICAgbXlUcmFjZSA9IGluc3RhbmNlICE9IG51bGwgPyAocmVmID0gaW5zdGFuY2UudHJhY2VzKSAhPSBudWxsID8gcmVmLmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgbXlBcHByb3ZlLnRyYWNlKSA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4gKG15VHJhY2UgIT0gbnVsbCA/IG15VHJhY2UubmFtZSA6IHZvaWQgMCkgPT09IHN0ZXBOYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgZGVmYXVsdERlc2NyaXB0aW9uOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLmRlZmF1bHRfZGVzY3JpcHRpb247XG4gIH0sXG4gIHRyYWNlczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudHJhY2VzKCk7XG4gIH0sXG4gIHRyYWNlOiBmdW5jdGlvbihzdGVwTmFtZSwgb25seV9jY19vcGluaW9uLCBpbWFnZV9zaWduLCB0b3Bfa2V5d29yZHMpIHtcbiAgICB2YXIgYXBwcm92ZV9zb3J0LCBhcHByb3ZlcywgYXBwcm92ZXNHcm91cCwgYXBwcm92ZXNfc29ydGVkLCBjb21wbGV0ZWRfZGF0ZSwgaGFzTmV4dCwgaGF2ZURlc2NyaXB0aW9uQXBwcm92ZSwgaW5zdGFuY2UsIGlzX2NvbXBsZXRlZCwgcmVmLCByZWYxLCByZWYyLCB0cmFjZXM7XG4gICAgaW5zdGFuY2UgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluc3RhbmNlKCk7XG4gICAgaXNfY29tcGxldGVkID0gKGluc3RhbmNlICE9IG51bGwgPyBpbnN0YW5jZS5zdGF0ZSA6IHZvaWQgMCkgPT09IFwiY29tcGxldGVkXCI7XG4gICAgY29tcGxldGVkX2RhdGUgPSBpc19jb21wbGV0ZWQgPyAocmVmID0gXy5sYXN0KGluc3RhbmNlLnRyYWNlcykpICE9IG51bGwgPyAocmVmMSA9IHJlZi5maW5pc2hfZGF0ZSkgIT0gbnVsbCA/IHJlZjEuZ2V0VGltZSgpIDogdm9pZCAwIDogdm9pZCAwIDogMDtcbiAgICBpZiAoaXNfY29tcGxldGVkICYmIGluc3RhbmNlLmZpbmlzaF9kYXRlKSB7XG4gICAgICBjb21wbGV0ZWRfZGF0ZSA9IChyZWYyID0gaW5zdGFuY2UuZmluaXNoX2RhdGUpICE9IG51bGwgPyByZWYyLmdldFRpbWUoKSA6IHZvaWQgMDtcbiAgICB9XG4gICAgdHJhY2VzID0gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy50cmFjZXMoKTtcbiAgICBhcHByb3ZlcyA9IF8uY2xvbmUodHJhY2VzW3N0ZXBOYW1lXSk7XG4gICAgYXBwcm92ZV9zb3J0ID0gZnVuY3Rpb24oYXBwcm92ZXMsIHRvcF9rZXl3b3Jkcykge1xuICAgICAgdmFyIGFwcHJvdmVzX3NvcnRlZCwgdG9wX2FwcHJvdmVzO1xuICAgICAgYXBwcm92ZXNfc29ydGVkID0gXy5zb3J0QnkoYXBwcm92ZXMsIGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgICAgcmV0dXJuIC0oYXBwcm92ZS5maW5pc2hfZGF0ZSB8fCBuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0b3Bfa2V5d29yZHMpIHtcbiAgICAgICAgdG9wX2FwcHJvdmVzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHRvcF9rZXl3b3Jkcy5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICByZXR1cm4gdG9wX2FwcHJvdmVzID0gXy51bmlvbih0b3BfYXBwcm92ZXMsIF8uZmlsdGVyKGFwcHJvdmVzX3NvcnRlZCwgZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgICAgICAgICAgdmFyIHJlZjM7XG4gICAgICAgICAgICByZXR1cm4gKGFwcHJvdmUgIT0gbnVsbCA/IChyZWYzID0gYXBwcm92ZS5oYW5kbGVyX25hbWUpICE9IG51bGwgPyByZWYzLmluZGV4T2Yoa2V5KSA6IHZvaWQgMCA6IHZvaWQgMCkgPiAtMTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0b3BfYXBwcm92ZXMgPSBfLnNvcnRCeSh0b3BfYXBwcm92ZXMsIGZ1bmN0aW9uKHRvcF9hcHByb3ZlKSB7XG4gICAgICAgICAgcmV0dXJuIC0odG9wX2FwcHJvdmUuZmluaXNoX2RhdGUgfHwgbmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBwcm92ZXNfc29ydGVkID0gXy51bmlvbih0b3BfYXBwcm92ZXMsIGFwcHJvdmVzX3NvcnRlZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXBwcm92ZXNfc29ydGVkIHx8IFtdO1xuICAgIH07XG4gICAgYXBwcm92ZXMgPSBfLmZpbHRlcihhcHByb3ZlcywgZnVuY3Rpb24oYSkge1xuICAgICAgcmV0dXJuIGEudHlwZSAhPT0gXCJmb3J3YXJkXCIgJiYgYS50eXBlICE9PSBcImRpc3RyaWJ1dGVcIiAmJiBhLnR5cGUgIT09IFwidGVybWluYXRlZFwiO1xuICAgIH0pO1xuICAgIGlmIChvbmx5X2NjX29waW5pb24pIHtcbiAgICAgIGFwcHJvdmVzID0gYXBwcm92ZXMgIT0gbnVsbCA/IGFwcHJvdmVzLmZpbHRlclByb3BlcnR5KFwidHlwZVwiLCBcImNjXCIpIDogdm9pZCAwO1xuICAgIH1cbiAgICBhcHByb3Zlc19zb3J0ZWQgPSBhcHByb3ZlX3NvcnQoYXBwcm92ZXMsIHRvcF9rZXl3b3Jkcyk7XG4gICAgYXBwcm92ZXNHcm91cCA9IF8uZ3JvdXBCeShhcHByb3ZlcywgXCJoYW5kbGVyXCIpO1xuICAgIGhhc05leHQgPSBmdW5jdGlvbihhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKSB7XG4gICAgICB2YXIgaGFuZGxlckFwcHJvdmVzO1xuICAgICAgaGFuZGxlckFwcHJvdmVzID0gYXBwcm92ZXNHcm91cFthcHByb3ZlLmhhbmRsZXJdO1xuICAgICAgcmV0dXJuIF8uaW5kZXhPZihoYW5kbGVyQXBwcm92ZXMsIGFwcHJvdmUpICsgMSA8IGhhbmRsZXJBcHByb3Zlcy5sZW5ndGg7XG4gICAgfTtcbiAgICBoYXZlRGVzY3JpcHRpb25BcHByb3ZlID0gZnVuY3Rpb24oYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkge1xuICAgICAgdmFyIGRlc2NyaXB0aW9uQXBwcm92ZXMsIGhhbmRsZXJBcHByb3ZlcztcbiAgICAgIGhhbmRsZXJBcHByb3ZlcyA9IGFwcHJvdmVzR3JvdXBbYXBwcm92ZS5oYW5kbGVyXTtcbiAgICAgIGRlc2NyaXB0aW9uQXBwcm92ZXMgPSBfLmZpbHRlcihoYW5kbGVyQXBwcm92ZXMsIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgaWYgKGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIGlmIChkZXNjcmlwdGlvbkFwcHJvdmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGFwcHJvdmVzX3NvcnRlZC5mb3JFYWNoKGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgIHZhciByZWYzO1xuICAgICAgaWYgKGFwcHJvdmUuc2lnbl9zaG93ICE9PSBmYWxzZSAmJiAoYXBwcm92ZS5kZXNjcmlwdGlvbiB8fCAoIWFwcHJvdmUuZGVzY3JpcHRpb24gJiYgIWhhc05leHQoYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkgJiYgIWFwcHJvdmUuaXNfZmluaXNoZWQpIHx8ICgocmVmMyA9IE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXS53b3JrZmxvdykgIT0gbnVsbCA/IHJlZjMuc2hvd0JsYW5rQXBwcm92ZURlc2NyaXB0aW9uIDogdm9pZCAwKSkpIHtcbiAgICAgICAgaWYgKGFwcHJvdmUuanVkZ2UgIT09ICd0ZXJtaW5hdGVkJykge1xuICAgICAgICAgIHJldHVybiBhcHByb3ZlLl9kaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGFwcHJvdmVzX3NvcnRlZCA9IF8uZmlsdGVyKGFwcHJvdmVzX3NvcnRlZCwgZnVuY3Rpb24oYSkge1xuICAgICAgdmFyIHJlZjM7XG4gICAgICBpZiAoaXNfY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVybiBhLl9kaXNwbGF5ID09PSB0cnVlICYmIGEuaXNfZmluaXNoZWQgJiYgKChyZWYzID0gYS5maW5pc2hfZGF0ZSkgIT0gbnVsbCA/IHJlZjMuZ2V0VGltZSgpIDogdm9pZCAwKSA8PSBjb21wbGV0ZWRfZGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhLl9kaXNwbGF5ID09PSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhcHByb3Zlc19zb3J0ZWQ7XG4gIH0sXG4gIGluY2x1ZGU6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbmNsdWRlKGEsIGIpO1xuICB9LFxuICB1bmVtcHR5OiBmdW5jdGlvbih2YWwpIHtcbiAgICB2YXIgcmVmO1xuICAgIHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnVuZW1wdHkodmFsKSB8fCAoKHJlZiA9IE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXS53b3JrZmxvdykgIT0gbnVsbCA/IHJlZi5zaG93QmxhbmtBcHByb3ZlRGVzY3JpcHRpb24gOiB2b2lkIDApO1xuICB9LFxuICBmb3JtYXREYXRlOiBmdW5jdGlvbihkYXRlLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICBcImZvcm1hdFwiOiBcIllZWVktTU0tRERcIlxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZm9ybWF0RGF0ZShkYXRlLCBvcHRpb25zKTtcbiAgfSxcbiAgaXNNeUFwcHJvdmU6IGZ1bmN0aW9uKGFwcHJvdmUsIG9ubHlfY2Nfb3Bpbmlvbikge1xuICAgIHZhciBjdXJyZW50QXBwcm92ZSwgaW5zO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSAhPT0gJ2luYm94Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGN1cnJlbnRBcHByb3ZlID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRBcHByb3ZlKCk7XG4gICAgICBpZiAoIShhcHByb3ZlICE9IG51bGwgPyBhcHByb3ZlLl9pZCA6IHZvaWQgMCkpIHtcbiAgICAgICAgYXBwcm92ZSA9IGN1cnJlbnRBcHByb3ZlO1xuICAgICAgfVxuICAgICAgaWYgKGFwcHJvdmUuX2lkID09PSAoY3VycmVudEFwcHJvdmUgIT0gbnVsbCA/IGN1cnJlbnRBcHByb3ZlLl9pZCA6IHZvaWQgMCkgJiYgKGN1cnJlbnRBcHByb3ZlICE9IG51bGwgPyBjdXJyZW50QXBwcm92ZS50eXBlIDogdm9pZCAwKSA9PT0gJ2NjJyAmJiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZSkge1xuICAgICAgICBpZiAoXy5pbmRleE9mKGN1cnJlbnRBcHByb3ZlICE9IG51bGwgPyBjdXJyZW50QXBwcm92ZS5vcGluaW9uX2ZpZWxkc19jb2RlIDogdm9pZCAwLCBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZSkgPiAtMSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCEoKGN1cnJlbnRBcHByb3ZlICE9IG51bGwgPyBjdXJyZW50QXBwcm92ZS50eXBlIDogdm9pZCAwKSA9PT0gJ2NjJykgJiYgb25seV9jY19vcGluaW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50QXBwcm92ZSAmJiBhcHByb3ZlLl9pZCA9PT0gY3VycmVudEFwcHJvdmUuX2lkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIG15QXBwcm92ZURlc2NyaXB0aW9uOiBmdW5jdGlvbihhcHByb3ZlSWQpIHtcbiAgICB2YXIgbXlBcHByb3ZlLCByZWYsIHJlZjEsIHJlZjIsIHJlZjM7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgIG15QXBwcm92ZSA9IChyZWYgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpKSAhPSBudWxsID8gKHJlZjEgPSByZWYubXlBcHByb3ZlKSAhPSBudWxsID8gcmVmMS5nZXQoKSA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICAgICAgaWYgKG15QXBwcm92ZSAmJiBteUFwcHJvdmUuaWQgPT09IGFwcHJvdmVJZCkge1xuICAgICAgICAgIGlmICghbXlBcHByb3ZlLnNpZ25fZmllbGRfY29kZSB8fCBteUFwcHJvdmUuc2lnbl9maWVsZF9jb2RlID09PSAoKHJlZjIgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpKSAhPSBudWxsID8gKHJlZjMgPSByZWYyLmRhdGEpICE9IG51bGwgPyByZWYzLm5hbWUgOiB2b2lkIDAgOiB2b2lkIDApKSB7XG4gICAgICAgICAgICBpZiAoIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VfbXlfYXBwcm92ZV9kZXNjcmlwdGlvblwiKSkge1xuICAgICAgICAgICAgICByZXR1cm4gKG15QXBwcm92ZSAhPSBudWxsID8gbXlBcHByb3ZlLmRlc2NyaXB0aW9uIDogdm9pZCAwKSB8fCBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VfbXlfYXBwcm92ZV9kZXNjcmlwdGlvblwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gIH0sXG4gIGlzUmVhZE9ubHk6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIHJldHVybiBBcHByb3ZlTWFuYWdlci5pc1JlYWRPbmx5KCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNPcGluaW9uT2ZGaWVsZDogZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgIGlmIChhcHByb3ZlLnR5cGUgPT09IFwiY2NcIiAmJiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZSkge1xuICAgICAgaWYgKFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5uYW1lID09PSBhcHByb3ZlLnNpZ25fZmllbGRfY29kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LFxuICBtYXJrRG93blRvSHRtbDogZnVuY3Rpb24obWFya0Rvd25TdHJpbmcpIHtcbiAgICBpZiAobWFya0Rvd25TdHJpbmcpIHtcbiAgICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgbWFya2VkID0gTnBtLnJlcXVpcmUoJ21hcmtlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFNwYWNlYmFycy5TYWZlU3RyaW5nKG1hcmtlZC5wYXJzZShtYXJrRG93blN0cmluZykpO1xuICAgIH1cbiAgfSxcbiAgc3RlcHM6IGZ1bmN0aW9uKGZpZWxkX2Zvcm11bGEsIHN0ZXAsIG9ubHlfY2Nfb3BpbmlvbiwgaW1hZ2Vfc2lnbikge1xuICAgIHZhciByZWYsIHJlZjEsIHJlZjIsIHN0ZXBzO1xuICAgIHN0ZXBzID0gW107XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBpZiAoIWZpZWxkX2Zvcm11bGEpIHtcbiAgICAgICAgZmllbGRfZm9ybXVsYSA9IChyZWYgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpKSAhPSBudWxsID8gKHJlZjEgPSByZWYuZmllbGRzKSAhPSBudWxsID8gcmVmMS5maW5kUHJvcGVydHlCeVBLKFwiY29kZVwiLCB0aGlzLm5hbWUpLmZvcm11bGEgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICB9XG4gICAgICBzdGVwcyA9IEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZ2V0T3BpbmlvbkZpZWxkU3RlcHNOYW1lKGZpZWxkX2Zvcm11bGEsIChyZWYyID0gVGVtcGxhdGUuaW5zdGFuY2UoKSkgIT0gbnVsbCA/IHJlZjIuZGF0YS50b3Bfa2V5d29yZHMgOiB2b2lkIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGVwcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0ZXBOYW1lOiBzdGVwLFxuICAgICAgICAgIG9ubHlfY2Nfb3Bpbmlvbjogb25seV9jY19vcGluaW9uLFxuICAgICAgICAgIGltYWdlX3NpZ246IGltYWdlX3NpZ25cbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9LFxuICBpbWFnZVNpZ25EYXRhOiBmdW5jdGlvbihoYW5kbGVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXI6IGhhbmRsZXJcbiAgICB9O1xuICB9LFxuICBzaG93U2lnbkltYWdlOiBmdW5jdGlvbihoYW5kbGVyLCBpbWFnZV9zaWduLCBqdWRnZSkge1xuICAgIHZhciBzcGFjZVVzZXJTaWduO1xuICAgIGlmIChbJ3JldHVybmVkJywgJ3Rlcm1pbmF0ZWQnLCAncmV0cmlldmVkJ10uaW5jbHVkZXMoanVkZ2UpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNwYWNlVXNlclNpZ24gPSBJbWFnZVNpZ24uaGVscGVycy5zcGFjZVVzZXJTaWduKGhhbmRsZXIpO1xuICAgIGlmICgoc3BhY2VVc2VyU2lnbiAhPSBudWxsID8gc3BhY2VVc2VyU2lnbi5zaWduIDogdm9pZCAwKSAmJiBpbWFnZV9zaWduKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgZ2V0TGFzdFNpZ25BcHByb3ZlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaW5zO1xuICAgIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIHJldHVybiBfLmxhc3QoVHJhY2VzTWFuYWdlci5nZXRIYW5kbGVyU2lnblNob3dBcHByb3ZlcyhpbnMsIE1ldGVvci51c2VySWQoKSkpO1xuICB9LFxuICBsYXN0TXlBcHByb3ZlRGVzY3JpcHRpb246IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcHByb3ZlcywgY3VycmVudFN0ZXAsIHJlZiwgdHJhY2VzO1xuICAgIHRyYWNlcyA9IEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudHJhY2VzKCk7XG4gICAgY3VycmVudFN0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcbiAgICBhcHByb3ZlcyA9IF8uY2xvbmUodHJhY2VzW2N1cnJlbnRTdGVwLm5hbWVdKTtcbiAgICBhcHByb3ZlcyA9IGFwcHJvdmVzLmZpbHRlclByb3BlcnR5KFwiaGFuZGxlclwiLCBNZXRlb3IudXNlcklkKCkpO1xuICAgIGlmIChhcHByb3Zlcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gKHJlZiA9IGFwcHJvdmVzW2FwcHJvdmVzLmxlbmd0aCAtIDJdKSAhPSBudWxsID8gcmVmLmRlc2NyaXB0aW9uIDogdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfSxcbiAgc2hvd0FwcHJvdmU6IGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICB2YXIgcmVmLCByZWYxO1xuICAgIGlmICghYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgfHwgYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgPT09ICgocmVmID0gVGVtcGxhdGUuaW5zdGFuY2UoKSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLmRhdGEpICE9IG51bGwgPyByZWYxLm5hbWUgOiB2b2lkIDAgOiB2b2lkIDApKSB7XG4gICAgICBpZiAoYXBwcm92ZSAhPSBudWxsID8gYXBwcm92ZS5pc19yZWFkIDogdm9pZCAwKSB7XG4gICAgICAgIGlmIChhcHByb3ZlLmlzX2ZpbmlzaGVkKSB7XG4gICAgICAgICAgcmV0dXJuIFtcImFwcHJvdmVkXCIsIFwicmVqZWN0ZWRcIiwgXCJzdWJtaXR0ZWRcIiwgXCJyZWFkZWRcIl0uaW5jbHVkZXMoYXBwcm92ZS5qdWRnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBqdWRnZV9kZXNjcmlwdGlvbjogZnVuY3Rpb24oanVkZ2UpIHtcbiAgICByZXR1cm4gdChqdWRnZSArIFwiX2Rlc2NyaXB0aW9uXCIpO1xuICB9LFxuICBpc19hcHByb3ZlZDogZnVuY3Rpb24oanVkZ2UpIHtcbiAgICByZXR1cm4gXCJhcHByb3ZlZFwiID09PSBqdWRnZTtcbiAgfSxcbiAgaXNfcmVqZWN0ZWQ6IGZ1bmN0aW9uKGp1ZGdlKSB7XG4gICAgcmV0dXJuIFwicmVqZWN0ZWRcIiA9PT0ganVkZ2U7XG4gIH0sXG4gIGlzX3JlYWRlZDogZnVuY3Rpb24oanVkZ2UpIHtcbiAgICByZXR1cm4gW1wiYXBwcm92ZWRcIiwgXCJyZWplY3RlZFwiLCBcInN1Ym1pdHRlZFwiLCBcInJlYWRlZFwiXS5pbmNsdWRlcyhqdWRnZSk7XG4gIH0sXG4gIGFkZENsYXNzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbmFtZSwgcmVmLCByZWYxO1xuICAgIG5hbWUgPSAocmVmID0gVGVtcGxhdGUuaW5zdGFuY2UoKSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLmRhdGEpICE9IG51bGwgPyByZWYxLm5hbWUgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlLCBlbGVtZW50O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZWxlbWVudCA9ICQoXCIuYXV0b21hdGljLm9waW5pb24tZmllbGQtXCIgKyBuYW1lKTtcbiAgICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwgPyBlbGVtZW50LmlzKFwidGRcIikgOiB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmFkZENsYXNzKCdmaWVsZC1lZGl0YWJsZScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJChcIi5pbnN0YW5jZS1zaWduXCIsIGVsZW1lbnQpLmFkZENsYXNzKCdmaWVsZC1lZGl0YWJsZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZSA9IGVycm9yO1xuICAgICAgICByZXR1cm4gY29uc29sZS5sb2coZSk7XG4gICAgICB9XG4gICAgfSwgMSk7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5pZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gIEluc3RhbmNlU2lnblRleHQuaGVscGVycy5kZWZhdWx0RGVzY3JpcHRpb24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbG9jYWxlO1xuICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG4gICAgcmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5kZWZhdWx0X2Rlc2NyaXB0aW9uIHx8IFRBUGkxOG4uX18oXCJpbnN0YW5jZV9kZWZhdWx0X29waW5pb25cIiwge30sIGxvY2FsZSk7XG4gIH07XG59XG4iLCJtYXJrZWQgPSByZXF1aXJlKFwibWFya2VkXCIpXG5UcmFjZXNUZW1wbGF0ZS5oZWxwZXJzID1cblx0dHJhY2VTaG93U2lnbkltYWdlOiAoKS0+XG5cdFx0cmV0dXJuIE1ldGVvci5zZXR0aW5ncy5wdWJsaWMud29ya2Zsb3cudHJhY2VTaG93U2lnbkltYWdlICE9IGZhbHNlICYmIE1ldGVvci5zZXR0aW5ncy5wdWJsaWMud29ya2Zsb3cudHJhY2VTaG93U2lnbkltYWdlICE9ICdmYWxzZSdcblx0ZXF1YWxzOiAoYSwgYikgLT5cblx0XHRhID09IGJcblx0ZW1wdHk6IChhKSAtPlxuXHRcdGlmIGFcblx0XHRcdGEudG9TdHJpbmcoKS50cmltKCkubGVuZ3RoIDwgMVxuXHRcdGVsc2Vcblx0XHRcdHRydWVcblx0dW5lbXB0eTogKGEpIC0+XG5cdFx0aWYgYVxuXHRcdFx0YS50b1N0cmluZygpLnRyaW0oKS5sZW5ndGggPiAwXG5cdFx0ZWxzZVxuXHRcdFx0ZmFsc2VcblxuXHRhcHBlbmQ6IChhLCBiKSAtPlxuXHRcdGEgKyBiXG5cblx0ZGF0ZUZvcm1hdDogKGRhdGUpIC0+XG5cdFx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKCkgJiYgZGF0ZT8uZ2V0RnVsbFllYXIoKSA9PSAobmV3IERhdGUpLmdldEZ1bGxZZWFyKClcblx0XHRcdFx0cmV0dXJuIG1vbWVudChkYXRlKS5mb3JtYXQoJ01NLUREIEhIOm1tJyk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cblx0Z2V0U3RlcE5hbWU6IChzdGVwSWQpIC0+XG5cdFx0c3RlcCA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZVN0ZXAoc3RlcElkKVxuXHRcdGlmIHN0ZXBcblx0XHRcdHJldHVybiBzdGVwLm5hbWVcblx0XHRudWxsXG5cdHNob3dEZWxldGVCdXR0b246IChhcHByb3ZlZCkgLT5cblx0XHRpZiBhcHByb3ZlZCBhbmQgYXBwcm92ZWQudHlwZSA9PSAnY2MnIGFuZCBhcHByb3ZlZC5mcm9tX3VzZXIgPT0gTWV0ZW9yLnVzZXJJZCgpIGFuZCBhcHByb3ZlZC5pc19maW5pc2hlZCAhPSB0cnVlIGFuZCAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZVByaW50XCIpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdGZhbHNlXG5cdGlzU2hvd01vZGlmaWNhdGlvbkJ1dHRvbjogKGFwcHJvdmVkKSAtPlxuXHRcdGFwcHJvdmVfYWRtaW5zID0gTWV0ZW9yLnNldHRpbmdzPy5wdWJsaWM/LndvcmtmbG93Py5hcHByb3ZlX2FkbWluc1xuXHRcdGlmIGFwcHJvdmVfYWRtaW5zPy5sZW5ndGhcblx0XHRcdGlzU2hvdyA9IGFwcHJvdmVfYWRtaW5zPy5jb250YWlucyBNZXRlb3IudXNlcklkKClcblx0XHR1bmxlc3MgaXNTaG93XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRyZXR1cm4gYXBwcm92ZWQuaGFuZGxlciA9PSBNZXRlb3IudXNlcklkKClcblx0aXNFZGl0aW5nOiAoKSAtPlxuXHRcdCByZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2UoKS5pc19lZGl0aW5nPy5nZXQoKVxuXHRpc1Nob3dEZXNjcmlwdGlvbjogKGFwcHJvdmVkKS0+XG5cdFx0IyBkZWJ1Z2dlclxuXHRcdGlmIFRyYWNlc1RlbXBsYXRlLmhlbHBlcnMuaXNTaG93TW9kaWZpY2F0aW9uQnV0dG9uIGFwcHJvdmVkXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdHJldHVybiBhcHByb3ZlZC5kZXNjcmlwdGlvbj8udG9TdHJpbmcoKS50cmltKCkubGVuZ3RoID4gMFxuXHRpc0NDOiAoYXBwcm92ZWQpIC0+XG5cdFx0aWYgYXBwcm92ZWQgYW5kIGFwcHJvdmVkLnR5cGUgPT0gJ2NjJ1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRmYWxzZVxuXHRnZXRBcHByb3ZlU3RhdHVzSWNvbjogKGFwcHJvdmVKdWRnZSwgYXV0b1N1Ym1pdHRlZCkgLT5cblx0XHRpZiBhdXRvU3VibWl0dGVkID09IHRydWVcblx0XHRcdHJldHVybiAnaW9uIGlvbi1hbmRyb2lkLWFsYXJtLWNsb2NrJ1xuXHRcdCPlt7Lnu5PmnZ/nmoTmmL7npLrkuLrmoLjlh4Yv6amz5ZueL+WPlua2iOeUs+ivt++8jOW5tuaYvuekuuWkhOeQhueKtuaAgeWbvuagh1xuXHRcdGFwcHJvdmVTdGF0dXNJY29uID0gdW5kZWZpbmVkXG5cdFx0c3dpdGNoIGFwcHJvdmVKdWRnZVxuXHRcdFx0d2hlbiAnYXBwcm92ZWQnXG5cdFx0XHRcdCMg5bey5qC45YeGXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNJY29uID0gJ2lvbiBpb24tY2hlY2ttYXJrLXJvdW5kJ1xuXHRcdFx0d2hlbiAncmVqZWN0ZWQnXG5cdFx0XHRcdCMg5bey6amz5ZueXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNJY29uID0gJ2lvbiBpb24tY2xvc2Utcm91bmQnXG5cdFx0XHR3aGVuICd0ZXJtaW5hdGVkJ1xuXHRcdFx0XHQjIOW3suWPlua2iFxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9ICdmYSBmYS1iYW4nXG5cdFx0XHR3aGVuICdyZWFzc2lnbmVkJ1xuXHRcdFx0XHQjIOi9rOetvuaguFxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9ICdpb24gaW9uLWFuZHJvaWQtY29udGFjdCdcblx0XHRcdHdoZW4gJ3JlbG9jYXRlZCdcblx0XHRcdFx0IyDph43lrprkvY1cblx0XHRcdFx0YXBwcm92ZVN0YXR1c0ljb24gPSAnaW9uIGlvbi1hcnJvdy1zaHJpbmsnXG5cdFx0XHR3aGVuICdyZXRyaWV2ZWQnXG5cdFx0XHRcdCMg5bey5Y+W5ZueXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNJY29uID0gJ2ZhIGZhLXVuZG8nXG5cdFx0XHRlbHNlXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNJY29uID0gJydcblx0XHRcdFx0YnJlYWtcblx0XHRhcHByb3ZlU3RhdHVzSWNvblxuXHRnZXRBcHByb3ZlU3RhdHVzVGV4dDogKGFwcHJvdmVKdWRnZSwgYXV0b1N1Ym1pdHRlZCkgLT5cblx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGVcblx0XHRcdGlmIGxvY2FsZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09ICd6aC1jbidcblx0XHRcdFx0bG9jYWxlID0gXCJ6aC1DTlwiXG5cdFx0ZWxzZVxuXHRcdFx0bG9jYWxlID0gU2Vzc2lvbi5nZXQoXCJUQVBpMThuOjpsb2FkZWRfbGFuZ1wiKVxuXHRcdCPlt7Lnu5PmnZ/nmoTmmL7npLrkuLrmoLjlh4Yv6amz5ZueL+WPlua2iOeUs+ivt++8jOW5tuaYvuekuuWkhOeQhueKtuaAgeWbvuagh1xuXHRcdGlmIGF1dG9TdWJtaXR0ZWQgPT0gdHJ1ZVxuXHRcdFx0cmV0dXJuIFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmVfdGltZW91dF9hdXRvX3N1Ym1pdHRlZCcsIHt9LCBsb2NhbGUpXG5cdFx0YXBwcm92ZVN0YXR1c1RleHQgPSB1bmRlZmluZWRcblx0XHRzd2l0Y2ggYXBwcm92ZUp1ZGdlXG5cdFx0XHR3aGVuICdhcHByb3ZlZCdcblx0XHRcdFx0IyDlt7LmoLjlh4Zcblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSBhcHByb3ZlZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHR3aGVuICdyZWplY3RlZCdcblx0XHRcdFx0IyDlt7LpqbPlm55cblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZWplY3RlZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHR3aGVuICd0ZXJtaW5hdGVkJ1xuXHRcdFx0XHQjIOW3suWPlua2iFxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzVGV4dCA9IFRBUGkxOG4uX18oJ0luc3RhbmNlIFN0YXRlIHRlcm1pbmF0ZWQnLCB7fSwgbG9jYWxlKVxuXHRcdFx0d2hlbiAncmVhc3NpZ25lZCdcblx0XHRcdFx0IyDovaznrb7moLhcblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZWFzc2lnbmVkJywge30sIGxvY2FsZSlcblx0XHRcdHdoZW4gJ3JlbG9jYXRlZCdcblx0XHRcdFx0IyDph43lrprkvY1cblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZWxvY2F0ZWQnLCB7fSwgbG9jYWxlKVxuXHRcdFx0d2hlbiAncmV0cmlldmVkJ1xuXHRcdFx0XHQjIOW3suWPluWbnlxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzVGV4dCA9IFRBUGkxOG4uX18oJ0luc3RhbmNlIFN0YXRlIHJldHJpZXZlZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHR3aGVuICdyZXR1cm5lZCdcblx0XHRcdFx0IyDlt7LpgIDlm55cblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZXR1cm5lZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHR3aGVuICdyZWFkZWQnXG5cdFx0XHRcdCMg5bey6ZiFXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVhZGVkJywge30sIGxvY2FsZSlcblx0XHRcdGVsc2Vcblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSAnJ1xuXHRcdFx0XHRicmVha1xuXHRcdGFwcHJvdmVTdGF0dXNUZXh0XG5cdFxuXHRnZXRBcHByb3ZlSnVkZ2VDbGFzczogKGFwcHJvdmVKdWRnZSwgYXV0b1N1Ym1pdHRlZCkgLT5cblx0XHRpZiBhdXRvU3VibWl0dGVkID09IHRydWVcblx0XHRcdHJldHVybiAnYXV0b1N1Ym1pdHRlZCdcblx0XHRyZXR1cm4gYXBwcm92ZUp1ZGdlXG5cblx0X3Q6IChrZXkpLT5cblx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXkpXG5cblx0bXlBcHByb3ZlRGVzY3JpcHRpb246IChhcHByb3ZlSWQpLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0bXlBcHByb3ZlID0gVGVtcGxhdGUuaW5zdGFuY2UoKT8ubXlBcHByb3ZlPy5nZXQoKVxuXHRcdFx0XHRpZiBteUFwcHJvdmUgJiYgbXlBcHByb3ZlLmlkID09IGFwcHJvdmVJZFxuXHRcdFx0XHRcdGlmICFTZXNzaW9uLmdldChcImluc3RhbmNlX215X2FwcHJvdmVfZGVzY3JpcHRpb25cIilcblx0XHRcdFx0XHRcdHJldHVybiBteUFwcHJvdmU/LmRlc2NyaXB0aW9uIHx8IFwiXCJcblx0XHRcdFx0XHRyZXR1cm4gU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZV9teV9hcHByb3ZlX2Rlc2NyaXB0aW9uXCIpXG5cdGlzRm9yd2FyZDogKGFwcHJvdmVkKSAtPlxuXHRcdGlmIGFwcHJvdmVkIGFuZCBhcHByb3ZlZC50eXBlID09ICdmb3J3YXJkJ1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRmYWxzZVxuXHRzaG93Rm9yd2FyZERlbGV0ZUJ1dHRvbjogKGFwcHJvdmUpIC0+XG5cdFx0aWYgZGIuaW5zdGFuY2VzLmZpbmQoYXBwcm92ZS5mb3J3YXJkX2luc3RhbmNlKS5jb3VudCgpIGlzIDBcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGlmIGFwcHJvdmUgYW5kIGFwcHJvdmUudHlwZSA9PSAnZm9yd2FyZCcgYW5kIGFwcHJvdmUuZnJvbV91c2VyID09IE1ldGVvci51c2VySWQoKSBhbmQgIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSBhbmQgYXBwcm92ZS5qdWRnZSBpc250ICd0ZXJtaW5hdGVkJ1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRmYWxzZVxuXHRtYXJrRG93blRvSHRtbDogKG1hcmtEb3duU3RyaW5nKS0+XG5cdFx0aWYgbWFya0Rvd25TdHJpbmdcblx0XHRcdCMgcmVuZGVyZXIgPSBuZXcgTWFya2Rvd24uUmVuZGVyZXIoKTtcblx0XHRcdCMgcmVuZGVyZXIubGluayA9ICggaHJlZiwgdGl0bGUsIHRleHQgKSAtPlxuXHRcdFx0IyBcdHJldHVybiBcIjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPScje2hyZWZ9JyB0aXRsZT0nI3t0aXRsZX0nPiN7dGV4dH08L2E+XCJcblx0XHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0XHRtYXJrZWQgPSBOcG0ucmVxdWlyZSgnbWFya2VkJylcblx0XHRcdHJldHVybiBTcGFjZWJhcnMuU2FmZVN0cmluZyhtYXJrZWQucGFyc2UobWFya0Rvd25TdHJpbmcpKVxuXHRpc0Rpc3RyaWJ1dGU6IChhcHByb3ZlKSAtPlxuXHRcdGlmIGFwcHJvdmUgYW5kIGFwcHJvdmUudHlwZSA9PSAnZGlzdHJpYnV0ZSdcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0ZmFsc2Vcblx0c2hvd0Rpc3RyaWJ1dGVEZWxldGVCdXR0b246IChhcHByb3ZlKSAtPlxuXHRcdGlmIGRiLmluc3RhbmNlcy5maW5kKGFwcHJvdmUuZm9yd2FyZF9pbnN0YW5jZSkuY291bnQoKSBpcyAwXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdGlmIGFwcHJvdmUgYW5kIGFwcHJvdmUudHlwZSA9PSAnZGlzdHJpYnV0ZScgYW5kICFTZXNzaW9uLmdldChcImluc3RhbmNlUHJpbnRcIikgYW5kIGFwcHJvdmUuanVkZ2UgaXNudCAndGVybWluYXRlZCdcblx0XHRcdCMg5rWB56iL566h55CG5ZGY5ZKM57O757uf566h55CG5ZGY77yM5Y+v5Lul5omn6KGM5Lu75L2V5oOF5Ya15LiL55qE5paH5Lu25Y+W5raI5YiG5Y+RXG5cdFx0XHRpbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBhcHByb3ZlLmluc3RhbmNlfSwge2ZpZWxkczoge2Zsb3c6IDEsIHNwYWNlOiAxfX0pXG5cdFx0XHRpZiBpbnMgYW5kIGlucy5mbG93IGFuZCBpbnMuc3BhY2Vcblx0XHRcdFx0aWYgV29ya2Zsb3dNYW5hZ2VyLmhhc0Zsb3dBZG1pblBlcm1pc3Npb24oaW5zLmZsb3csIGlucy5zcGFjZSwgTWV0ZW9yLnVzZXJJZCgpKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlXG5cblx0XHRcdGlmIGFwcHJvdmUuZnJvbV91c2VyID09IE1ldGVvci51c2VySWQoKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXG5cdFx0ZmFsc2VcblxuXHRmaW5pc2hEYXRlU2NoZW1hOiAoKSAtPlxuXHRcdGlmIFN0ZWVkb3MuaXNBbmRyb2lkT3JJT1MoKVxuXHRcdFx0cmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoe1xuXHRcdFx0XHRmaW5pc2hfZGF0ZToge1xuXHRcdFx0XHRcdGF1dG9mb3JtOiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImRhdGV0aW1lLWxvY2FsXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG9wdGlvbmFsOiBmYWxzZSxcblx0XHRcdFx0XHR0eXBlOiBEYXRlXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoe1xuXHRcdFx0XHRmaW5pc2hfZGF0ZToge1xuXHRcdFx0XHRcdGF1dG9mb3JtOiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImJvb3RzdHJhcC1kYXRldGltZXBpY2tlclwiXG5cdFx0XHRcdFx0XHRyZWFkb25seTogdHJ1ZVxuXHRcdFx0XHRcdFx0ZGF0ZVRpbWVQaWNrZXJPcHRpb25zOntcblx0XHRcdFx0XHRcdFx0Zm9ybWF0OiBcIllZWVktTU0tREQgSEg6bW1cIixcblx0XHRcdFx0XHRcdFx0aWdub3JlUmVhZG9ubHk6dHJ1ZSxcblx0XHRcdFx0XHRcdFx0bG9jYWxlOiBTZXNzaW9uLmdldChcIlRBUGkxOG46OmxvYWRlZF9sYW5nXCIpLFxuXHRcdFx0XHRcdFx0XHR3aWRnZXRQb3NpdGlvbmluZzp7XG5cdFx0XHRcdFx0XHRcdFx0aG9yaXpvbnRhbDogJ3JpZ2h0J1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvcHRpb25hbDogZmFsc2UsXG5cdFx0XHRcdFx0dHlwZTogRGF0ZVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXG5cdGZpbmlzaERhdGVWYWx1ZXM6ICgpIC0+XG5cdFx0cmV0dXJuIHtcblx0XHRcdGZpbmlzaF9kYXRlOnRoaXMuZmluaXNoX2RhdGVcblx0XHR9O1xuXG5cdCMjI1xuICAgIFx05q2k5Ye95pWw55So5LqO5o6n5Yi25piv5ZCm5pi+56S6dHJhY2VzIHZpZXdcbiAgICBcdHRydWU6IOaYvuekunRyYWNlcyB2aWV3LOetvuaguOWOhueoi+aMiemSrueCueWHu+WQjuaYr+ebtOaOpeWumuS9jeWIsHRyYWNlcyB2aWV3XG4gICAgXHRmYWxzZTog5LiN5pi+56S6dHJhY2VzIHZpZXfvvIznrb7moLjljobnqIvmjInpkq7ngrnlh7vlkI4s5LulTW9kYWwg5pa55byP5pi+56S6dHJhY2VzIHZpZXdcblx0IyMjXG5cdHNob3dUcmFjZXNWaWV3OiAoZm9ybSwgZm9ybV92ZXJzaW9uKS0+XG4jXHRcdHJldHVybiAhKEluc3RhbmNlTWFuYWdlci5pc1RhYmxlU3R5bGUoZm9ybSkgJiYgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbmNsdWRlc09waW5pb25GaWVsZChmb3JtLCBmb3JtX3ZlcnNpb24pKVxuXG5cdFx0c2hvd19tb2RhbF90cmFjZXNfbGlzdCA9IGRiLnNwYWNlX3NldHRpbmdzLmZpbmRPbmUoe3NwYWNlOiBTZXNzaW9uLmdldChcInNwYWNlSWRcIiksIGtleTogXCJzaG93X21vZGFsX3RyYWNlc19saXN0XCJ9KT8udmFsdWVzIHx8IGZhbHNlXG5cblx0XHRyZXR1cm4gIXNob3dfbW9kYWxfdHJhY2VzX2xpc3RcblxuXHRnZXRJbnN0YW5jZVN0YXRlVGV4dDogKGluc3RhbmNlX2lkKS0+XG5cdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlXG5cdFx0XHRpZiBsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnemgtY24nXG5cdFx0XHRcdGxvY2FsZSA9IFwiemgtQ05cIlxuXHRcdGVsc2Vcblx0XHRcdGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIilcblxuXHRcdGlucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGluc3RhbmNlX2lkfSwge2ZpZWxkczoge3N0YXRlOiAxLCBpc19yZWFkOiAxfX0pXG5cdFx0aWYgbm90IGluc1xuXHRcdFx0cmV0dXJuIFRBUGkxOG4uX18oJ2luc3RhbmNlX2RlbGV0ZWQnLCB7fSwgbG9jYWxlKVxuXG5cdFx0dGV4dCA9ICcnXG5cdFx0aWYgaW5zLnN0YXRlIGlzICdjb21wbGV0ZWQnXG5cdFx0XHR0ZXh0ID0gVEFQaTE4bi5fXygnY29tcGxldGVkJywge30sIGxvY2FsZSlcblx0XHRlbHNlIGlmIGlucy5zdGF0ZSBpcyAncGVuZGluZydcblx0XHRcdHRleHQgPSBUQVBpMThuLl9fKCdwZW5kaW5nJywge30sIGxvY2FsZSlcblx0XHRlbHNlIGlmIGlucy5zdGF0ZSBpcyAnZHJhZnQnXG5cdFx0XHRpZiBpbnMuaXNfcmVhZFxuXHRcdFx0XHR0ZXh0ID0gVEFQaTE4bi5fXygnaW5zdGFuY2VfYXBwcm92ZV9yZWFkJywge30sIGxvY2FsZSlcblx0XHRcdGVsc2Vcblx0XHRcdFx0dGV4dCA9IFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmVfbm90X3lldF9oYW5kbGVkJywge30sIGxvY2FsZSlcblxuXHRcdHJldHVybiB0ZXh0XG5cblx0Z2V0SW5zdGFuY2VTdGF0ZUNvbG9yOiAoaW5zdGFuY2VfaWQpLT5cblx0XHRpbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpbnN0YW5jZV9pZH0sIHtmaWVsZHM6IHtzdGF0ZTogMSwgaXNfcmVhZDogMX19KVxuXHRcdGlmIG5vdCBpbnNcblx0XHRcdHJldHVybiBcIlwiXG5cblx0XHRjbGEgPSAnJ1xuXHRcdGlmIGlucy5zdGF0ZSBpcyAnZHJhZnQnXG5cdFx0XHRpZiBpbnMuaXNfcmVhZFxuXHRcdFx0XHRjbGEgPSAnYmx1ZSdcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y2xhID0gJ3JlZCdcblx0XHRyZXR1cm4gY2xhXG5cblx0Zmlyc3RUcmFjZTogKGluZGV4KS0+XG5cdFx0cmV0dXJuIGluZGV4IGlzIDBcblxuXHRsYXN0X2Rpc3RyaWJ1dGVfZnJvbTogKGluc3RhbmNlX2lkKS0+XG5cdFx0aW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaW5zdGFuY2VfaWQsIGRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZTogeyRleGlzdHM6IHRydWV9fSx7ZmllbGRzOntjcmVhdGVkOiAxLCBjcmVhdGVkX2J5OiAxfX0pXG5cdFx0aWYgaW5zXG5cdFx0XHRkaXNfaW5mbyA9IHt9XG5cdFx0XHR1c2VyID0ge31cblx0XHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0XHR1c2VyID0gVVVmbG93X2FwaS5nZXROYW1lRm9yVXNlcihpbnMuY3JlYXRlZF9ieSlcblx0XHRcdGVsc2UgaWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRcdHVzZXIgPSBkYi51c2Vycy5maW5kT25lKHtfaWQ6IGlucy5jcmVhdGVkX2J5fSwge2ZpZWxkczoge25hbWU6IDF9fSlcblxuXHRcdFx0aWYgdXNlci5uYW1lXG5cdFx0XHRcdGRpc19pbmZvLmZyb21fdXNlciA9IHVzZXIuX2lkXG5cdFx0XHRcdGRpc19pbmZvLmZyb21fdXNlcl9uYW1lID0gdXNlci5uYW1lXG5cdFx0XHRcdGRpc19pbmZvLmNyZWF0ZWQgPSBpbnMuY3JlYXRlZFxuXG5cdFx0XHRpZiBub3QgXy5pc0VtcHR5KGRpc19pbmZvKVxuXHRcdFx0XHRyZXR1cm4gZGlzX2luZm9cblx0XHRyZXR1cm5cblxuXHRpc0NDT3JEaXN0cmlidXRlT3JGb3J3YXJkVGVybWluYXRlZDogKGFwcHJvdmUpLT5cblx0XHRpZiAoYXBwcm92ZS50eXBlIGlzICdjYycgb3IgYXBwcm92ZS50eXBlIGlzICdkaXN0cmlidXRlJyBvciBhcHByb3ZlLnR5cGUgaXMgJ2ZvcndhcmQnKSBhbmQgYXBwcm92ZS5qdWRnZSBpcyAndGVybWluYXRlZCdcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0cmV0dXJuIGZhbHNlXG5cblx0anVkZ2VUZXJtaW5hdGVkOiAoanVkZ2UpLT5cblx0XHRyZXR1cm4ganVkZ2UgaXMgJ3Rlcm1pbmF0ZWQnXG5cblx0aW5zdGFuY2VFeGlzdHM6IChpbnN0YW5jZV9pZCktPlxuXHRcdHJldHVybiAhIWRiLmluc3RhbmNlcy5maW5kKGluc3RhbmNlX2lkKS5jb3VudCgpXG5cblx0YWdlbnREZXNjcmlwdGlvbjogKHVzZXJOYW1lKS0+XG5cdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlXG5cdFx0XHRpZiBsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnemgtY24nXG5cdFx0XHRcdGxvY2FsZSA9IFwiemgtQ05cIlxuXHRcdGVsc2Vcblx0XHRcdGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIilcblxuXHRcdHJldHVybiBUQVBpMThuLl9fKCdwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXNfZGVzY3JpcHRpb24nLCB7dXNlck5hbWU6IHVzZXJOYW1lfSwgbG9jYWxlKVxuXHRcblx0dHJhY2VOYW1lOiAoaW5zdGFuY2VfaWQsIHRyYWNlSWQpLT5cblx0XHRyZXR1cm4gXy5maW5kKGRiLmluc3RhbmNlcy5maW5kT25lKGluc3RhbmNlX2lkLCB7ZmllbGRzOiB7dHJhY2VzOiAxfX0pPy50cmFjZXMsICh0cmFjZSktPlxuXHRcdFx0XHRcdHJldHVybiB0cmFjZS5faWQgPT0gIHRyYWNlSWRcblx0XHQpPy5uYW1lXG5cblx0b2JqZWN0VXJsOiAob2JqZWN0X25hbWUsIHJlY29yZF9pZCwgYXBwX2lkKS0+XG5cdFx0cmV0dXJuIENyZWF0b3IuZ2V0T2JqZWN0VXJsKG9iamVjdF9uYW1lLCByZWNvcmRfaWQsIGFwcF9pZClcblxuXHRoYW5kbGVyRG9jOiAoaGFuZGxlcklkKS0+XG5cdFx0dXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mbyA9IE1ldGVvci5zZXR0aW5ncy5wdWJsaWM/LndvcmtmbG93Py51c2Vyc19jYW5fcmVhZF9jY19oYW5kbGVyX2RldGFpbF9pbmZvXG5cdFx0aWYgIXVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm8gb3IgIXVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm8uaW5jbHVkZXMoTWV0ZW9yLnVzZXJJZCgpKVxuXHRcdFx0cmV0dXJuXG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRyZXR1cm4gVVVmbG93X2FwaS5nZXRDb250YWN0SW5mb0ZvclVzZXIoaGFuZGxlcklkLCBTZXNzaW9uLmdldCgnc3BhY2VJZCcpKVxuXHRcdGVsc2UgaWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRyZXR1cm4gZGIudXNlcnMuZmluZE9uZShoYW5kbGVySWQpXG5cbmlmIE1ldGVvci5pc1NlcnZlclxuXHRUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLmRhdGVGb3JtYXQgPSAoZGF0ZSktPlxuXHRcdGlmIGRhdGVcblx0XHRcdHV0Y09mZnNldCA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS51dGNPZmZzZXRcblx0XHRcdHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZm9ybWF0RGF0ZShkYXRlLCB1dGNPZmZzZXQpO1xuXG5cdFRyYWNlc1RlbXBsYXRlLmhlbHBlcnMuX3QgPSAoa2V5KS0+XG5cdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXHRcdHJldHVybiBUQVBpMThuLl9fKGtleSwge30sIGxvY2FsZSlcblxuXHRUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLnNob3dEZWxldGVCdXR0b24gPSAoYXBwcm92ZWQpIC0+XG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5UcmFjZXNUZW1wbGF0ZS5ldmVudHMgPVxuXHQnY2xpY2sgLmNjLWFwcHJvdmUtcmVtb3ZlJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdGlmIGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC5jYWxsaW5nICogMSAhPSAxXG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuY2FsbGluZyA9IDFcblx0XHRcdCQoXCJpXCIsZXZlbnQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoXCJmYS1zcGluXCIpXG5cdFx0XHRpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKVxuXHRcdFx0YXBwcm92ZUlkID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuYXBwcm92ZVxuXHRcdFx0IyBDQUxMIOWIoOmZpGFwcHJvdmXlh73mlbDjgIJcblx0XHRcdCQoXCJib2R5XCIpLmFkZENsYXNzKFwibG9hZGluZ1wiKVxuXHRcdFx0TWV0ZW9yLmNhbGwgJ2NjX3JlbW92ZScsIGluc3RhbmNlSWQsIGFwcHJvdmVJZCwgKGVyciwgcmVzdWx0KSAtPlxuXHRcdFx0XHQkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIilcblx0XHRcdFx0aWYgZXJyXG5cdFx0XHRcdFx0dG9hc3RyLmVycm9yIGVyclxuXHRcdFx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC5jYWxsaW5nID0gMFxuXHRcdFx0XHRcdCQoXCJpXCIsZXZlbnQuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoXCJmYS1zcGluXCIpXG5cdFx0XHRcdGlmIHJlc3VsdCA9PSB0cnVlXG5cdFx0XHRcdFx0dG9hc3RyLnN1Y2Nlc3MoVEFQaTE4bi5fXyhcInJlbW92ZV9jY19hcHByb3ZlXCIpKTtcblx0XHRcdFx0XHRpZiAkKFwiLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbFwiKS5sZW5ndGhcblx0XHRcdFx0XHRcdE1vZGFsLmhpZGUgXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIlxuXHRcdFx0XHRyZXR1cm5cblx0XHRcdHJldHVyblxuXG5cdCdjbGljayAuaW5zdGFuY2UtdHJhY2UtZGV0YWlsLW1vZGFsIC5idG4tY2MtYXBwcm92ZS1yZW1vdmUnOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdGluc3RhbmNlSWQgPSBTZXNzaW9uLmdldCgnaW5zdGFuY2VJZCcpXG5cdFx0YXBwcm92ZUlkID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuYXBwcm92ZVxuXHRcdCMgIyBDQUxMIOWIoOmZpGFwcHJvdmXlh73mlbDjgIJcblx0XHQjICQoXCJib2R5XCIpLmFkZENsYXNzKFwibG9hZGluZ1wiKVxuXHRcdCMgTWV0ZW9yLmNhbGwgJ2NjX3JlbW92ZScsIGluc3RhbmNlSWQsIGFwcHJvdmVJZCwgKGVyciwgcmVzdWx0KSAtPlxuXHRcdCMgXHQkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIilcblx0XHQjIFx0aWYgZXJyXG5cdFx0IyBcdFx0dG9hc3RyLmVycm9yIGVyclxuXHRcdCMgXHRpZiByZXN1bHQgPT0gdHJ1ZVxuXHRcdCMgXHRcdHRvYXN0ci5zdWNjZXNzKFRBUGkxOG4uX18oXCJyZW1vdmVfY2NfYXBwcm92ZVwiKSk7XG5cdFx0IyBcdFx0TW9kYWwuaGlkZSBcImluc3RhbmNlX3RyYWNlX2RldGFpbF9tb2RhbFwiXG5cdFx0IyBcdHJldHVyblxuXHRcdCMgcmV0dXJuXG5cdFx0TW9kYWwuYWxsb3dNdWx0aXBsZSA9IHRydWVcblx0XHRNb2RhbC5zaG93ICdjYW5jZWxfY2NfbW9kYWwnXG5cblx0J2NsaWNrIC5hcHByb3ZlLWl0ZW0sLmFwcHJvdmUtZGVzY3JpcHRpb24nOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdCMgUEPkuIrpk77mjqXlhYHorrjnm7TmjqXngrnlvIDvvIzkuI3lho3miZPlvIDnrb7mibnljobnqIvor6bnu4Zcblx0XHR1bmxlc3MgJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhLmJ0bi1saW5rXCIpLmxlbmd0aFxuXHRcdFx0TW9kYWwuc2hvdyBcImluc3RhbmNlX3RyYWNlX2RldGFpbF9tb2RhbFwiLCB0aGlzXG5cblx0J3RhcGhvbGQgLmFwcHJvdmUtaXRlbSwuYXBwcm92ZS1kZXNjcmlwdGlvbic6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cdFx0IyDmiYvmnLrkuIrplb/mjInmiZPlvIDnrb7mibnljobnqIvor6bnu4bvvIzlpoLmnpzmmK/pk77mjqXplb/mjInmiZPlvIDlkI7kuIDmlL7miYvnqpflj6PlsLHlj4jlhbPmjonkuobvvIzmiYDku6XkuI3orqnpk77mjqXmiZPlvIDnrb7mibnljobnqIvor6bnu4Zcblx0XHR1bmxlc3MgJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhLmJ0bi1saW5rXCIpLmxlbmd0aFxuXHRcdFx0TW9kYWwuc2hvdyBcImluc3RhbmNlX3RyYWNlX2RldGFpbF9tb2RhbFwiLCB0aGlzXG5cblx0J2NsaWNrIC5hcHByb3ZlLWl0ZW0gYS5idG4tbGluaywuYXBwcm92ZS1kZXNjcmlwdGlvbiBhLmJ0bi1saW5rLC5hcHByb3ZlLWl0ZW0tZGlzdHJpYnV0ZSBhLmJ0bi1saW5rJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHQjIOaJi+acuuS4iueCueWHu+mTvuaOpe+8jOW8ueWHuuaWsOeql+WPo++8jOS4jeaUr+aMge+8jOWboOS4umFuZHJvaWTkuIrkvJrlvLnlh7rnmbvlvZXnlYzpnaJcblx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKClcblx0XHRcdHVzZXJJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0Py50YXJnZXRfdXNlcl9pZFxuXHRcdFx0Q3JlYXRvci5vcGVuU2FmZU9iamVjdFVybCgndXNlcnMnLCB1c2VySWQpXG5cblx0J3RhcGVuZCAuYXBwcm92ZS1pdGVtLC5hcHByb3ZlLWRlc2NyaXB0aW9uJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHQjIOS4iui/sOmVv+aMieaJk+W8gGFwcHJvdmXor6bnu4bnqpflj6PnmoTkuovku7Z0YXBob2xk5Lya6Kem5Y+R5omT5byA56qX5Y+j5ZCO55qEdG91Y2hlbmTkuovku7bvvIzpgKDmiJDplb/mjInmiZPlvIDnqpflj6PlkI7kuIDmlL7miYvnqpflj6PlsLHlj4jlhbPmjonkuoZcblx0XHQjIOi/memHjOWPquiDvemAmui/h+mYu+atonRhcGVuZOS6i+S7tijkuI3lj6/ku6XnlKh0b3VjaGVuZOS6i+S7tu+8jOWboOS4uuS8muW9seWTjXRhcGhvbGTlip/og73vvIzpgKDmiJDmsqHmnInplb/mjInmlYjmnpzml7bkuZ/kvJrop6blj5F0YXBob2xk5LqL5Lu2KeWGkuazoeadpemBv+WFjemXrumimOOAglxuXHRcdCMg6ZO+5o6l5YWB6K6455u05o6l54K55byAXG5cdFx0dW5sZXNzICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiYS5idG4tbGlua1wiKS5sZW5ndGhcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHQnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWZvcndhcmQtYXBwcm92ZS1yZW1vdmUnOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdGluc3RhbmNlSWQgPSBTZXNzaW9uLmdldCgnaW5zdGFuY2VJZCcpXG5cdFx0YXBwcm92ZUlkID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuYXBwcm92ZVxuXHRcdHRyYWNlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC50cmFjZVxuXHRcdCMgQ0FMTCDliKDpmaRhcHByb3Zl5Ye95pWw44CCXG5cdFx0JChcImJvZHlcIikuYWRkQ2xhc3MoXCJsb2FkaW5nXCIpXG5cdFx0TWV0ZW9yLmNhbGwgJ2ZvcndhcmRfcmVtb3ZlJywgaW5zdGFuY2VJZCwgdHJhY2VJZCwgYXBwcm92ZUlkLCAoZXJyLCByZXN1bHQpIC0+XG5cdFx0XHQkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIilcblx0XHRcdGlmIGVyclxuXHRcdFx0XHR0b2FzdHIuZXJyb3IgVEFQaTE4bi5fXyhlcnIucmVhc29uKVxuXHRcdFx0aWYgcmVzdWx0ID09IHRydWVcblx0XHRcdFx0dG9hc3RyLnN1Y2Nlc3MoVEFQaTE4bi5fXyhcImluc3RhbmNlX2FwcHJvdmVfZm9yd2FyZF9yZW1vdmVfc3VjY2Vzc1wiKSk7XG5cdFx0XHRcdE1vZGFsLmhpZGUgXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIlxuXHRcdFx0cmV0dXJuXG5cdFx0cmV0dXJuXG5cblx0J2NsaWNrIC5pbnN0YW5jZS10cmFjZS1kZXRhaWwtbW9kYWwgLmJ0bi1mb3J3YXJkLWluc3RhbmNlLWxvb2snOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdGZvcndhcmRfc3BhY2UgPSBldmVudC50YXJnZXQuZGF0YXNldC5mb3J3YXJkc3BhY2Vcblx0XHRmb3J3YXJkX2luc3RhbmNlID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuZm9yd2FyZGluc3RhbmNlXG5cdFx0U3RlZWRvcy5vcGVuV2luZG93KFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJ3b3JrZmxvdy9zcGFjZS9cIiArIGZvcndhcmRfc3BhY2UgKyBcIi92aWV3L3JlYWRvbmx5L1wiICsgZm9yd2FyZF9pbnN0YW5jZSkpXG5cblx0J2NsaWNrIC5idG4tbW9kaWZpY2F0aW9uJ1x0OiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdHRlbXBsYXRlLmlzX2VkaXRpbmcuc2V0KCF0ZW1wbGF0ZS5pc19lZGl0aW5nLmdldCgpKTtcblx0XHR1bmxlc3MgU3RlZWRvcy5pc0FuZHJvaWRPcklPUygpXG5cdFx0XHRUcmFja2VyLmFmdGVyRmx1c2ggLT5cblx0XHRcdFx0IyDmmL7npLrml6Xlv5fnmoTml7blgJnmiormu5rliqjmnaHlvoDkuIvnp7vngrnvvIzorqnml6XmnJ/mjqfku7bmmL7npLrlh7rkuIDpg6jliIbvvIzku6Xpgb/lhY3nlKjmiLfnnIvkuI3liLDml6XmnJ/mjqfku7Zcblx0XHRcdFx0JChcIiNpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWwgI2ZpbmlzaF9pbnB1dFwiKS5vbiBcImRwLnNob3dcIiwgKCkgLT5cblx0XHRcdFx0XHQkKFwiLm1vZGFsLWJvZHlcIikuc2Nyb2xsVG9wKDEwMClcblxuXHQnY2xpY2sgLmJ0bi1jYW5jZWxCdXQnIDogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblxuXHRcdHRlbXBsYXRlLmlzX2VkaXRpbmcuc2V0KCF0ZW1wbGF0ZS5pc19lZGl0aW5nLmdldCgpKTtcblxuXHQnY2xpY2sgLmJ0bi1zYXZlQnV0JyA6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cdFx0IyB0ZW1wbGF0ZS5pc19lZGl0aW5nLnNldCghdGVtcGxhdGUuaXNfZWRpdGluZy5nZXQoKSlcblxuXHRcdGluc3RhbmNlSWQgPSBTZXNzaW9uLmdldCgnaW5zdGFuY2VJZCcpXG5cdFx0YXBwcm92ZUlkID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuYXBwcm92ZVxuXHRcdHRyYWNlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC50cmFjZVxuXHRcdG9waW5pb25faW5wdXQgPSAkKCcjb3Bpbmlvbl9pbnB1dCcpLnZhbCgpXG5cdFx0ZmluaXNoX2lucHV0ID0gQXV0b0Zvcm0uZ2V0RmllbGRWYWx1ZShcImZpbmlzaF9kYXRlXCIsIFwiZmluaXNoRGF0ZUF1dG9Gb3JtXCIpXG5cblx0XHQkKFwiYm9keVwiKS5hZGRDbGFzcyhcImxvYWRpbmdcIilcblx0XHRNZXRlb3IuY2FsbCAnY2hhbmdlX2FwcHJvdmVfaW5mbycsIGluc3RhbmNlSWQsIHRyYWNlSWQsIGFwcHJvdmVJZCwgb3Bpbmlvbl9pbnB1dCwgZmluaXNoX2lucHV0LCAoZXJyLCByZXN1bHQpLT5cblx0XHRcdCQoXCJib2R5XCIpLnJlbW92ZUNsYXNzKFwibG9hZGluZ1wiKVxuXHRcdFx0aWYgZXJyXG5cdFx0XHRcdHRvYXN0ci5lcnJvciBUQVBpMThuLl9fKGVyci5yZWFzb24pXG5cdFx0XHRpZiByZXN1bHQgPT0gdHJ1ZVxuXHRcdFx0XHR0b2FzdHIuc3VjY2Vzcyh0KFwiaW5zdGFuY2VfYXBwcm92ZV9tb2RhbF9tb2RpZmljYXRpb25zYXZlXCIpKVxuXHRcdFx0XHRNb2RhbC5oaWRlIFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCJcblx0XHRcdHJldHVyblxuXG5cdCdjbGljayAuaW5zdGFuY2UtdHJhY2UtZGV0YWlsLW1vZGFsIC5idG4tZGlzdHJpYnV0ZS1hcHByb3ZlLXJlbW92ZSc6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cdFx0TW9kYWwuYWxsb3dNdWx0aXBsZSA9IHRydWVcblx0XHRNb2RhbC5zaG93ICdjYW5jZWxfZGlzdHJpYnV0ZV9tb2RhbCdcbiIsInZhciBtYXJrZWQ7XG5cbm1hcmtlZCA9IHJlcXVpcmUoXCJtYXJrZWRcIik7XG5cblRyYWNlc1RlbXBsYXRlLmhlbHBlcnMgPSB7XG4gIHRyYWNlU2hvd1NpZ25JbWFnZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXS53b3JrZmxvdy50cmFjZVNob3dTaWduSW1hZ2UgIT09IGZhbHNlICYmIE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXS53b3JrZmxvdy50cmFjZVNob3dTaWduSW1hZ2UgIT09ICdmYWxzZSc7XG4gIH0sXG4gIGVxdWFsczogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBhID09PSBiO1xuICB9LFxuICBlbXB0eTogZnVuY3Rpb24oYSkge1xuICAgIGlmIChhKSB7XG4gICAgICByZXR1cm4gYS50b1N0cmluZygpLnRyaW0oKS5sZW5ndGggPCAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG4gIHVuZW1wdHk6IGZ1bmN0aW9uKGEpIHtcbiAgICBpZiAoYSkge1xuICAgICAgcmV0dXJuIGEudG9TdHJpbmcoKS50cmltKCkubGVuZ3RoID4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgYXBwZW5kOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGEgKyBiO1xuICB9LFxuICBkYXRlRm9ybWF0OiBmdW5jdGlvbihkYXRlKSB7XG4gICAgaWYgKFN0ZWVkb3MuaXNNb2JpbGUoKSAmJiAoZGF0ZSAhPSBudWxsID8gZGF0ZS5nZXRGdWxsWWVhcigpIDogdm9pZCAwKSA9PT0gKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdCgnTU0tREQgSEg6bW0nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1vbWVudChkYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcbiAgICB9XG4gIH0sXG4gIGdldFN0ZXBOYW1lOiBmdW5jdGlvbihzdGVwSWQpIHtcbiAgICB2YXIgc3RlcDtcbiAgICBzdGVwID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlU3RlcChzdGVwSWQpO1xuICAgIGlmIChzdGVwKSB7XG4gICAgICByZXR1cm4gc3RlcC5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgc2hvd0RlbGV0ZUJ1dHRvbjogZnVuY3Rpb24oYXBwcm92ZWQpIHtcbiAgICBpZiAoYXBwcm92ZWQgJiYgYXBwcm92ZWQudHlwZSA9PT0gJ2NjJyAmJiBhcHByb3ZlZC5mcm9tX3VzZXIgPT09IE1ldGVvci51c2VySWQoKSAmJiBhcHByb3ZlZC5pc19maW5pc2hlZCAhPT0gdHJ1ZSAmJiAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZVByaW50XCIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc1Nob3dNb2RpZmljYXRpb25CdXR0b246IGZ1bmN0aW9uKGFwcHJvdmVkKSB7XG4gICAgdmFyIGFwcHJvdmVfYWRtaW5zLCBpc1Nob3csIHJlZiwgcmVmMSwgcmVmMjtcbiAgICBhcHByb3ZlX2FkbWlucyA9IChyZWYgPSBNZXRlb3Iuc2V0dGluZ3MpICE9IG51bGwgPyAocmVmMSA9IHJlZltcInB1YmxpY1wiXSkgIT0gbnVsbCA/IChyZWYyID0gcmVmMS53b3JrZmxvdykgIT0gbnVsbCA/IHJlZjIuYXBwcm92ZV9hZG1pbnMgOiB2b2lkIDAgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgaWYgKGFwcHJvdmVfYWRtaW5zICE9IG51bGwgPyBhcHByb3ZlX2FkbWlucy5sZW5ndGggOiB2b2lkIDApIHtcbiAgICAgIGlzU2hvdyA9IGFwcHJvdmVfYWRtaW5zICE9IG51bGwgPyBhcHByb3ZlX2FkbWlucy5jb250YWlucyhNZXRlb3IudXNlcklkKCkpIDogdm9pZCAwO1xuICAgIH1cbiAgICBpZiAoIWlzU2hvdykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gYXBwcm92ZWQuaGFuZGxlciA9PT0gTWV0ZW9yLnVzZXJJZCgpO1xuICB9LFxuICBpc0VkaXRpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWY7XG4gICAgcmV0dXJuIChyZWYgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLmlzX2VkaXRpbmcpICE9IG51bGwgPyByZWYuZ2V0KCkgOiB2b2lkIDA7XG4gIH0sXG4gIGlzU2hvd0Rlc2NyaXB0aW9uOiBmdW5jdGlvbihhcHByb3ZlZCkge1xuICAgIHZhciByZWY7XG4gICAgaWYgKFRyYWNlc1RlbXBsYXRlLmhlbHBlcnMuaXNTaG93TW9kaWZpY2F0aW9uQnV0dG9uKGFwcHJvdmVkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAoKHJlZiA9IGFwcHJvdmVkLmRlc2NyaXB0aW9uKSAhPSBudWxsID8gcmVmLnRvU3RyaW5nKCkudHJpbSgpLmxlbmd0aCA6IHZvaWQgMCkgPiAwO1xuICB9LFxuICBpc0NDOiBmdW5jdGlvbihhcHByb3ZlZCkge1xuICAgIGlmIChhcHByb3ZlZCAmJiBhcHByb3ZlZC50eXBlID09PSAnY2MnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBnZXRBcHByb3ZlU3RhdHVzSWNvbjogZnVuY3Rpb24oYXBwcm92ZUp1ZGdlLCBhdXRvU3VibWl0dGVkKSB7XG4gICAgdmFyIGFwcHJvdmVTdGF0dXNJY29uO1xuICAgIGlmIChhdXRvU3VibWl0dGVkID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gJ2lvbiBpb24tYW5kcm9pZC1hbGFybS1jbG9jayc7XG4gICAgfVxuICAgIGFwcHJvdmVTdGF0dXNJY29uID0gdm9pZCAwO1xuICAgIHN3aXRjaCAoYXBwcm92ZUp1ZGdlKSB7XG4gICAgICBjYXNlICdhcHByb3ZlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNJY29uID0gJ2lvbiBpb24tY2hlY2ttYXJrLXJvdW5kJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWplY3RlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNJY29uID0gJ2lvbiBpb24tY2xvc2Utcm91bmQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Rlcm1pbmF0ZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzSWNvbiA9ICdmYSBmYS1iYW4nO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlYXNzaWduZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzSWNvbiA9ICdpb24gaW9uLWFuZHJvaWQtY29udGFjdCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVsb2NhdGVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c0ljb24gPSAnaW9uIGlvbi1hcnJvdy1zaHJpbmsnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JldHJpZXZlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNJY29uID0gJ2ZhIGZhLXVuZG8nO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNJY29uID0gJyc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gYXBwcm92ZVN0YXR1c0ljb247XG4gIH0sXG4gIGdldEFwcHJvdmVTdGF0dXNUZXh0OiBmdW5jdGlvbihhcHByb3ZlSnVkZ2UsIGF1dG9TdWJtaXR0ZWQpIHtcbiAgICB2YXIgYXBwcm92ZVN0YXR1c1RleHQsIGxvY2FsZTtcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlO1xuICAgICAgaWYgKGxvY2FsZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnemgtY24nKSB7XG4gICAgICAgIGxvY2FsZSA9IFwiemgtQ05cIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYWxlID0gU2Vzc2lvbi5nZXQoXCJUQVBpMThuOjpsb2FkZWRfbGFuZ1wiKTtcbiAgICB9XG4gICAgaWYgKGF1dG9TdWJtaXR0ZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBUQVBpMThuLl9fKCdpbnN0YW5jZV9hcHByb3ZlX3RpbWVvdXRfYXV0b19zdWJtaXR0ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICB9XG4gICAgYXBwcm92ZVN0YXR1c1RleHQgPSB2b2lkIDA7XG4gICAgc3dpdGNoIChhcHByb3ZlSnVkZ2UpIHtcbiAgICAgIGNhc2UgJ2FwcHJvdmVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSBhcHByb3ZlZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlamVjdGVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZWplY3RlZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Rlcm1pbmF0ZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzVGV4dCA9IFRBUGkxOG4uX18oJ0luc3RhbmNlIFN0YXRlIHRlcm1pbmF0ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWFzc2lnbmVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZWFzc2lnbmVkJywge30sIGxvY2FsZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVsb2NhdGVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZWxvY2F0ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXRyaWV2ZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzVGV4dCA9IFRBUGkxOG4uX18oJ0luc3RhbmNlIFN0YXRlIHJldHJpZXZlZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JldHVybmVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZXR1cm5lZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlYWRlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVhZGVkJywge30sIGxvY2FsZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSAnJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBhcHByb3ZlU3RhdHVzVGV4dDtcbiAgfSxcbiAgZ2V0QXBwcm92ZUp1ZGdlQ2xhc3M6IGZ1bmN0aW9uKGFwcHJvdmVKdWRnZSwgYXV0b1N1Ym1pdHRlZCkge1xuICAgIGlmIChhdXRvU3VibWl0dGVkID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gJ2F1dG9TdWJtaXR0ZWQnO1xuICAgIH1cbiAgICByZXR1cm4gYXBwcm92ZUp1ZGdlO1xuICB9LFxuICBfdDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIFRBUGkxOG4uX18oa2V5KTtcbiAgfSxcbiAgbXlBcHByb3ZlRGVzY3JpcHRpb246IGZ1bmN0aW9uKGFwcHJvdmVJZCkge1xuICAgIHZhciBteUFwcHJvdmUsIHJlZiwgcmVmMTtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcpIHtcbiAgICAgICAgbXlBcHByb3ZlID0gKHJlZiA9IFRlbXBsYXRlLmluc3RhbmNlKCkpICE9IG51bGwgPyAocmVmMSA9IHJlZi5teUFwcHJvdmUpICE9IG51bGwgPyByZWYxLmdldCgpIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgICBpZiAobXlBcHByb3ZlICYmIG15QXBwcm92ZS5pZCA9PT0gYXBwcm92ZUlkKSB7XG4gICAgICAgICAgaWYgKCFTZXNzaW9uLmdldChcImluc3RhbmNlX215X2FwcHJvdmVfZGVzY3JpcHRpb25cIikpIHtcbiAgICAgICAgICAgIHJldHVybiAobXlBcHByb3ZlICE9IG51bGwgPyBteUFwcHJvdmUuZGVzY3JpcHRpb24gOiB2b2lkIDApIHx8IFwiXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBTZXNzaW9uLmdldChcImluc3RhbmNlX215X2FwcHJvdmVfZGVzY3JpcHRpb25cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGlzRm9yd2FyZDogZnVuY3Rpb24oYXBwcm92ZWQpIHtcbiAgICBpZiAoYXBwcm92ZWQgJiYgYXBwcm92ZWQudHlwZSA9PT0gJ2ZvcndhcmQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBzaG93Rm9yd2FyZERlbGV0ZUJ1dHRvbjogZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgIGlmIChkYi5pbnN0YW5jZXMuZmluZChhcHByb3ZlLmZvcndhcmRfaW5zdGFuY2UpLmNvdW50KCkgPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFwcHJvdmUgJiYgYXBwcm92ZS50eXBlID09PSAnZm9yd2FyZCcgJiYgYXBwcm92ZS5mcm9tX3VzZXIgPT09IE1ldGVvci51c2VySWQoKSAmJiAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZVByaW50XCIpICYmIGFwcHJvdmUuanVkZ2UgIT09ICd0ZXJtaW5hdGVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgbWFya0Rvd25Ub0h0bWw6IGZ1bmN0aW9uKG1hcmtEb3duU3RyaW5nKSB7XG4gICAgaWYgKG1hcmtEb3duU3RyaW5nKSB7XG4gICAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICAgIG1hcmtlZCA9IE5wbS5yZXF1aXJlKCdtYXJrZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTcGFjZWJhcnMuU2FmZVN0cmluZyhtYXJrZWQucGFyc2UobWFya0Rvd25TdHJpbmcpKTtcbiAgICB9XG4gIH0sXG4gIGlzRGlzdHJpYnV0ZTogZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgIGlmIChhcHByb3ZlICYmIGFwcHJvdmUudHlwZSA9PT0gJ2Rpc3RyaWJ1dGUnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBzaG93RGlzdHJpYnV0ZURlbGV0ZUJ1dHRvbjogZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgIHZhciBpbnM7XG4gICAgaWYgKGRiLmluc3RhbmNlcy5maW5kKGFwcHJvdmUuZm9yd2FyZF9pbnN0YW5jZSkuY291bnQoKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYXBwcm92ZSAmJiBhcHByb3ZlLnR5cGUgPT09ICdkaXN0cmlidXRlJyAmJiAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZVByaW50XCIpICYmIGFwcHJvdmUuanVkZ2UgIT09ICd0ZXJtaW5hdGVkJykge1xuICAgICAgaW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgICBfaWQ6IGFwcHJvdmUuaW5zdGFuY2VcbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgZmxvdzogMSxcbiAgICAgICAgICBzcGFjZTogMVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChpbnMgJiYgaW5zLmZsb3cgJiYgaW5zLnNwYWNlKSB7XG4gICAgICAgIGlmIChXb3JrZmxvd01hbmFnZXIuaGFzRmxvd0FkbWluUGVybWlzc2lvbihpbnMuZmxvdywgaW5zLnNwYWNlLCBNZXRlb3IudXNlcklkKCkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhcHByb3ZlLmZyb21fdXNlciA9PT0gTWV0ZW9yLnVzZXJJZCgpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGZpbmlzaERhdGVTY2hlbWE6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChTdGVlZG9zLmlzQW5kcm9pZE9ySU9TKCkpIHtcbiAgICAgIHJldHVybiBuZXcgU2ltcGxlU2NoZW1hKHtcbiAgICAgICAgZmluaXNoX2RhdGU6IHtcbiAgICAgICAgICBhdXRvZm9ybToge1xuICAgICAgICAgICAgdHlwZTogXCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25hbDogZmFsc2UsXG4gICAgICAgICAgdHlwZTogRGF0ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoe1xuICAgICAgICBmaW5pc2hfZGF0ZToge1xuICAgICAgICAgIGF1dG9mb3JtOiB7XG4gICAgICAgICAgICB0eXBlOiBcImJvb3RzdHJhcC1kYXRldGltZXBpY2tlclwiLFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICAgICAgICBkYXRlVGltZVBpY2tlck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgZm9ybWF0OiBcIllZWVktTU0tREQgSEg6bW1cIixcbiAgICAgICAgICAgICAgaWdub3JlUmVhZG9ubHk6IHRydWUsXG4gICAgICAgICAgICAgIGxvY2FsZTogU2Vzc2lvbi5nZXQoXCJUQVBpMThuOjpsb2FkZWRfbGFuZ1wiKSxcbiAgICAgICAgICAgICAgd2lkZ2V0UG9zaXRpb25pbmc6IHtcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAncmlnaHQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgICB0eXBlOiBEYXRlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgZmluaXNoRGF0ZVZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbmlzaF9kYXRlOiB0aGlzLmZpbmlzaF9kYXRlXG4gICAgfTtcbiAgfSxcblxuICAvKlxuICAgICBcdOatpOWHveaVsOeUqOS6juaOp+WItuaYr+WQpuaYvuekunRyYWNlcyB2aWV3XG4gICAgIFx0dHJ1ZTog5pi+56S6dHJhY2VzIHZpZXcs562+5qC45Y6G56iL5oyJ6ZKu54K55Ye75ZCO5piv55u05o6l5a6a5L2N5YiwdHJhY2VzIHZpZXdcbiAgICAgXHRmYWxzZTog5LiN5pi+56S6dHJhY2VzIHZpZXfvvIznrb7moLjljobnqIvmjInpkq7ngrnlh7vlkI4s5LulTW9kYWwg5pa55byP5pi+56S6dHJhY2VzIHZpZXdcbiAgICovXG4gIHNob3dUcmFjZXNWaWV3OiBmdW5jdGlvbihmb3JtLCBmb3JtX3ZlcnNpb24pIHtcbiAgICB2YXIgcmVmLCBzaG93X21vZGFsX3RyYWNlc19saXN0O1xuICAgIHNob3dfbW9kYWxfdHJhY2VzX2xpc3QgPSAoKHJlZiA9IGRiLnNwYWNlX3NldHRpbmdzLmZpbmRPbmUoe1xuICAgICAgc3BhY2U6IFNlc3Npb24uZ2V0KFwic3BhY2VJZFwiKSxcbiAgICAgIGtleTogXCJzaG93X21vZGFsX3RyYWNlc19saXN0XCJcbiAgICB9KSkgIT0gbnVsbCA/IHJlZi52YWx1ZXMgOiB2b2lkIDApIHx8IGZhbHNlO1xuICAgIHJldHVybiAhc2hvd19tb2RhbF90cmFjZXNfbGlzdDtcbiAgfSxcbiAgZ2V0SW5zdGFuY2VTdGF0ZVRleHQ6IGZ1bmN0aW9uKGluc3RhbmNlX2lkKSB7XG4gICAgdmFyIGlucywgbG9jYWxlLCB0ZXh0O1xuICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG4gICAgICBpZiAobG9jYWxlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICd6aC1jbicpIHtcbiAgICAgICAgbG9jYWxlID0gXCJ6aC1DTlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhbGUgPSBTZXNzaW9uLmdldChcIlRBUGkxOG46OmxvYWRlZF9sYW5nXCIpO1xuICAgIH1cbiAgICBpbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGluc3RhbmNlX2lkXG4gICAgfSwge1xuICAgICAgZmllbGRzOiB7XG4gICAgICAgIHN0YXRlOiAxLFxuICAgICAgICBpc19yZWFkOiAxXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFpbnMpIHtcbiAgICAgIHJldHVybiBUQVBpMThuLl9fKCdpbnN0YW5jZV9kZWxldGVkJywge30sIGxvY2FsZSk7XG4gICAgfVxuICAgIHRleHQgPSAnJztcbiAgICBpZiAoaW5zLnN0YXRlID09PSAnY29tcGxldGVkJykge1xuICAgICAgdGV4dCA9IFRBUGkxOG4uX18oJ2NvbXBsZXRlZCcsIHt9LCBsb2NhbGUpO1xuICAgIH0gZWxzZSBpZiAoaW5zLnN0YXRlID09PSAncGVuZGluZycpIHtcbiAgICAgIHRleHQgPSBUQVBpMThuLl9fKCdwZW5kaW5nJywge30sIGxvY2FsZSk7XG4gICAgfSBlbHNlIGlmIChpbnMuc3RhdGUgPT09ICdkcmFmdCcpIHtcbiAgICAgIGlmIChpbnMuaXNfcmVhZCkge1xuICAgICAgICB0ZXh0ID0gVEFQaTE4bi5fXygnaW5zdGFuY2VfYXBwcm92ZV9yZWFkJywge30sIGxvY2FsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ID0gVEFQaTE4bi5fXygnaW5zdGFuY2VfYXBwcm92ZV9ub3RfeWV0X2hhbmRsZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRleHQ7XG4gIH0sXG4gIGdldEluc3RhbmNlU3RhdGVDb2xvcjogZnVuY3Rpb24oaW5zdGFuY2VfaWQpIHtcbiAgICB2YXIgY2xhLCBpbnM7XG4gICAgaW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBpbnN0YW5jZV9pZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBzdGF0ZTogMSxcbiAgICAgICAgaXNfcmVhZDogMVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghaW5zKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgY2xhID0gJyc7XG4gICAgaWYgKGlucy5zdGF0ZSA9PT0gJ2RyYWZ0Jykge1xuICAgICAgaWYgKGlucy5pc19yZWFkKSB7XG4gICAgICAgIGNsYSA9ICdibHVlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYSA9ICdyZWQnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2xhO1xuICB9LFxuICBmaXJzdFRyYWNlOiBmdW5jdGlvbihpbmRleCkge1xuICAgIHJldHVybiBpbmRleCA9PT0gMDtcbiAgfSxcbiAgbGFzdF9kaXN0cmlidXRlX2Zyb206IGZ1bmN0aW9uKGluc3RhbmNlX2lkKSB7XG4gICAgdmFyIGRpc19pbmZvLCBpbnMsIHVzZXI7XG4gICAgaW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBpbnN0YW5jZV9pZCxcbiAgICAgIGRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZToge1xuICAgICAgICAkZXhpc3RzOiB0cnVlXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmllbGRzOiB7XG4gICAgICAgIGNyZWF0ZWQ6IDEsXG4gICAgICAgIGNyZWF0ZWRfYnk6IDFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoaW5zKSB7XG4gICAgICBkaXNfaW5mbyA9IHt9O1xuICAgICAgdXNlciA9IHt9O1xuICAgICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgICB1c2VyID0gVVVmbG93X2FwaS5nZXROYW1lRm9yVXNlcihpbnMuY3JlYXRlZF9ieSk7XG4gICAgICB9IGVsc2UgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgICB1c2VyID0gZGIudXNlcnMuZmluZE9uZSh7XG4gICAgICAgICAgX2lkOiBpbnMuY3JlYXRlZF9ieVxuICAgICAgICB9LCB7XG4gICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICBuYW1lOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VyLm5hbWUpIHtcbiAgICAgICAgZGlzX2luZm8uZnJvbV91c2VyID0gdXNlci5faWQ7XG4gICAgICAgIGRpc19pbmZvLmZyb21fdXNlcl9uYW1lID0gdXNlci5uYW1lO1xuICAgICAgICBkaXNfaW5mby5jcmVhdGVkID0gaW5zLmNyZWF0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNFbXB0eShkaXNfaW5mbykpIHtcbiAgICAgICAgcmV0dXJuIGRpc19pbmZvO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgaXNDQ09yRGlzdHJpYnV0ZU9yRm9yd2FyZFRlcm1pbmF0ZWQ6IGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICBpZiAoKGFwcHJvdmUudHlwZSA9PT0gJ2NjJyB8fCBhcHByb3ZlLnR5cGUgPT09ICdkaXN0cmlidXRlJyB8fCBhcHByb3ZlLnR5cGUgPT09ICdmb3J3YXJkJykgJiYgYXBwcm92ZS5qdWRnZSA9PT0gJ3Rlcm1pbmF0ZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBqdWRnZVRlcm1pbmF0ZWQ6IGZ1bmN0aW9uKGp1ZGdlKSB7XG4gICAgcmV0dXJuIGp1ZGdlID09PSAndGVybWluYXRlZCc7XG4gIH0sXG4gIGluc3RhbmNlRXhpc3RzOiBmdW5jdGlvbihpbnN0YW5jZV9pZCkge1xuICAgIHJldHVybiAhIWRiLmluc3RhbmNlcy5maW5kKGluc3RhbmNlX2lkKS5jb3VudCgpO1xuICB9LFxuICBhZ2VudERlc2NyaXB0aW9uOiBmdW5jdGlvbih1c2VyTmFtZSkge1xuICAgIHZhciBsb2NhbGU7XG4gICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgbG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZTtcbiAgICAgIGlmIChsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3poLWNuJykge1xuICAgICAgICBsb2NhbGUgPSBcInpoLUNOXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIik7XG4gICAgfVxuICAgIHJldHVybiBUQVBpMThuLl9fKCdwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXNfZGVzY3JpcHRpb24nLCB7XG4gICAgICB1c2VyTmFtZTogdXNlck5hbWVcbiAgICB9LCBsb2NhbGUpO1xuICB9LFxuICB0cmFjZU5hbWU6IGZ1bmN0aW9uKGluc3RhbmNlX2lkLCB0cmFjZUlkKSB7XG4gICAgdmFyIHJlZiwgcmVmMTtcbiAgICByZXR1cm4gKHJlZiA9IF8uZmluZCgocmVmMSA9IGRiLmluc3RhbmNlcy5maW5kT25lKGluc3RhbmNlX2lkLCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgdHJhY2VzOiAxXG4gICAgICB9XG4gICAgfSkpICE9IG51bGwgPyByZWYxLnRyYWNlcyA6IHZvaWQgMCwgZnVuY3Rpb24odHJhY2UpIHtcbiAgICAgIHJldHVybiB0cmFjZS5faWQgPT09IHRyYWNlSWQ7XG4gICAgfSkpICE9IG51bGwgPyByZWYubmFtZSA6IHZvaWQgMDtcbiAgfSxcbiAgb2JqZWN0VXJsOiBmdW5jdGlvbihvYmplY3RfbmFtZSwgcmVjb3JkX2lkLCBhcHBfaWQpIHtcbiAgICByZXR1cm4gQ3JlYXRvci5nZXRPYmplY3RVcmwob2JqZWN0X25hbWUsIHJlY29yZF9pZCwgYXBwX2lkKTtcbiAgfSxcbiAgaGFuZGxlckRvYzogZnVuY3Rpb24oaGFuZGxlcklkKSB7XG4gICAgdmFyIHJlZiwgcmVmMSwgdXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mbztcbiAgICB1c2Vyc19jYW5fcmVhZF9jY19oYW5kbGVyX2RldGFpbF9pbmZvID0gKHJlZiA9IE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLndvcmtmbG93KSAhPSBudWxsID8gcmVmMS51c2Vyc19jYW5fcmVhZF9jY19oYW5kbGVyX2RldGFpbF9pbmZvIDogdm9pZCAwIDogdm9pZCAwO1xuICAgIGlmICghdXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mbyB8fCAhdXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mby5pbmNsdWRlcyhNZXRlb3IudXNlcklkKCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIHJldHVybiBVVWZsb3dfYXBpLmdldENvbnRhY3RJbmZvRm9yVXNlcihoYW5kbGVySWQsIFNlc3Npb24uZ2V0KCdzcGFjZUlkJykpO1xuICAgIH0gZWxzZSBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICByZXR1cm4gZGIudXNlcnMuZmluZE9uZShoYW5kbGVySWQpO1xuICAgIH1cbiAgfVxufTtcblxuaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICBUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLmRhdGVGb3JtYXQgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgdmFyIHV0Y09mZnNldDtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgdXRjT2Zmc2V0ID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLnV0Y09mZnNldDtcbiAgICAgIHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZm9ybWF0RGF0ZShkYXRlLCB1dGNPZmZzZXQpO1xuICAgIH1cbiAgfTtcbiAgVHJhY2VzVGVtcGxhdGUuaGVscGVycy5fdCA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBsb2NhbGU7XG4gICAgbG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZTtcbiAgICByZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpO1xuICB9O1xuICBUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLnNob3dEZWxldGVCdXR0b24gPSBmdW5jdGlvbihhcHByb3ZlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cblxuVHJhY2VzVGVtcGxhdGUuZXZlbnRzID0ge1xuICAnY2xpY2sgLmNjLWFwcHJvdmUtcmVtb3ZlJzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgdmFyIGFwcHJvdmVJZCwgaW5zdGFuY2VJZDtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmNhbGxpbmcgKiAxICE9PSAxKSB7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuY2FsbGluZyA9IDE7XG4gICAgICAkKFwiaVwiLCBldmVudC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcyhcImZhLXNwaW5cIik7XG4gICAgICBpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKTtcbiAgICAgIGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmU7XG4gICAgICAkKFwiYm9keVwiKS5hZGRDbGFzcyhcImxvYWRpbmdcIik7XG4gICAgICBNZXRlb3IuY2FsbCgnY2NfcmVtb3ZlJywgaW5zdGFuY2VJZCwgYXBwcm92ZUlkLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAgICAkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIik7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICB0b2FzdHIuZXJyb3IoZXJyKTtcbiAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuY2FsbGluZyA9IDA7XG4gICAgICAgICAgJChcImlcIiwgZXZlbnQuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoXCJmYS1zcGluXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgICB0b2FzdHIuc3VjY2VzcyhUQVBpMThuLl9fKFwicmVtb3ZlX2NjX2FwcHJvdmVcIikpO1xuICAgICAgICAgIGlmICgkKFwiLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbFwiKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIE1vZGFsLmhpZGUoXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gICdjbGljayAuaW5zdGFuY2UtdHJhY2UtZGV0YWlsLW1vZGFsIC5idG4tY2MtYXBwcm92ZS1yZW1vdmUnOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICB2YXIgYXBwcm92ZUlkLCBpbnN0YW5jZUlkO1xuICAgIGluc3RhbmNlSWQgPSBTZXNzaW9uLmdldCgnaW5zdGFuY2VJZCcpO1xuICAgIGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmU7XG4gICAgTW9kYWwuYWxsb3dNdWx0aXBsZSA9IHRydWU7XG4gICAgcmV0dXJuIE1vZGFsLnNob3coJ2NhbmNlbF9jY19tb2RhbCcpO1xuICB9LFxuICAnY2xpY2sgLmFwcHJvdmUtaXRlbSwuYXBwcm92ZS1kZXNjcmlwdGlvbic6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIGlmICghJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhLmJ0bi1saW5rXCIpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIE1vZGFsLnNob3coXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIiwgdGhpcyk7XG4gICAgfVxuICB9LFxuICAndGFwaG9sZCAuYXBwcm92ZS1pdGVtLC5hcHByb3ZlLWRlc2NyaXB0aW9uJzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgaWYgKCEkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChcImEuYnRuLWxpbmtcIikubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gTW9kYWwuc2hvdyhcImluc3RhbmNlX3RyYWNlX2RldGFpbF9tb2RhbFwiLCB0aGlzKTtcbiAgICB9XG4gIH0sXG4gICdjbGljayAuYXBwcm92ZS1pdGVtIGEuYnRuLWxpbmssLmFwcHJvdmUtZGVzY3JpcHRpb24gYS5idG4tbGluaywuYXBwcm92ZS1pdGVtLWRpc3RyaWJ1dGUgYS5idG4tbGluayc6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIHZhciByZWYsIHVzZXJJZDtcbiAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICB1c2VySWQgPSAocmVmID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQpICE9IG51bGwgPyByZWYudGFyZ2V0X3VzZXJfaWQgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gQ3JlYXRvci5vcGVuU2FmZU9iamVjdFVybCgndXNlcnMnLCB1c2VySWQpO1xuICAgIH1cbiAgfSxcbiAgJ3RhcGVuZCAuYXBwcm92ZS1pdGVtLC5hcHByb3ZlLWRlc2NyaXB0aW9uJzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgaWYgKCEkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChcImEuYnRuLWxpbmtcIikubGVuZ3RoKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LFxuICAnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWZvcndhcmQtYXBwcm92ZS1yZW1vdmUnOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICB2YXIgYXBwcm92ZUlkLCBpbnN0YW5jZUlkLCB0cmFjZUlkO1xuICAgIGluc3RhbmNlSWQgPSBTZXNzaW9uLmdldCgnaW5zdGFuY2VJZCcpO1xuICAgIGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmU7XG4gICAgdHJhY2VJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LnRyYWNlO1xuICAgICQoXCJib2R5XCIpLmFkZENsYXNzKFwibG9hZGluZ1wiKTtcbiAgICBNZXRlb3IuY2FsbCgnZm9yd2FyZF9yZW1vdmUnLCBpbnN0YW5jZUlkLCB0cmFjZUlkLCBhcHByb3ZlSWQsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICAkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIik7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRvYXN0ci5lcnJvcihUQVBpMThuLl9fKGVyci5yZWFzb24pKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgdG9hc3RyLnN1Y2Nlc3MoVEFQaTE4bi5fXyhcImluc3RhbmNlX2FwcHJvdmVfZm9yd2FyZF9yZW1vdmVfc3VjY2Vzc1wiKSk7XG4gICAgICAgIE1vZGFsLmhpZGUoXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gICdjbGljayAuaW5zdGFuY2UtdHJhY2UtZGV0YWlsLW1vZGFsIC5idG4tZm9yd2FyZC1pbnN0YW5jZS1sb29rJzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgdmFyIGZvcndhcmRfaW5zdGFuY2UsIGZvcndhcmRfc3BhY2U7XG4gICAgZm9yd2FyZF9zcGFjZSA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmZvcndhcmRzcGFjZTtcbiAgICBmb3J3YXJkX2luc3RhbmNlID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuZm9yd2FyZGluc3RhbmNlO1xuICAgIHJldHVybiBTdGVlZG9zLm9wZW5XaW5kb3coU3RlZWRvcy5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiICsgZm9yd2FyZF9zcGFjZSArIFwiL3ZpZXcvcmVhZG9ubHkvXCIgKyBmb3J3YXJkX2luc3RhbmNlKSk7XG4gIH0sXG4gICdjbGljayAuYnRuLW1vZGlmaWNhdGlvbic6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIHRlbXBsYXRlLmlzX2VkaXRpbmcuc2V0KCF0ZW1wbGF0ZS5pc19lZGl0aW5nLmdldCgpKTtcbiAgICBpZiAoIVN0ZWVkb3MuaXNBbmRyb2lkT3JJT1MoKSkge1xuICAgICAgcmV0dXJuIFRyYWNrZXIuYWZ0ZXJGbHVzaChmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICQoXCIjaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsICNmaW5pc2hfaW5wdXRcIikub24oXCJkcC5zaG93XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKFwiLm1vZGFsLWJvZHlcIikuc2Nyb2xsVG9wKDEwMCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAnY2xpY2sgLmJ0bi1jYW5jZWxCdXQnOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICByZXR1cm4gdGVtcGxhdGUuaXNfZWRpdGluZy5zZXQoIXRlbXBsYXRlLmlzX2VkaXRpbmcuZ2V0KCkpO1xuICB9LFxuICAnY2xpY2sgLmJ0bi1zYXZlQnV0JzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgdmFyIGFwcHJvdmVJZCwgZmluaXNoX2lucHV0LCBpbnN0YW5jZUlkLCBvcGluaW9uX2lucHV0LCB0cmFjZUlkO1xuICAgIGluc3RhbmNlSWQgPSBTZXNzaW9uLmdldCgnaW5zdGFuY2VJZCcpO1xuICAgIGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmU7XG4gICAgdHJhY2VJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LnRyYWNlO1xuICAgIG9waW5pb25faW5wdXQgPSAkKCcjb3Bpbmlvbl9pbnB1dCcpLnZhbCgpO1xuICAgIGZpbmlzaF9pbnB1dCA9IEF1dG9Gb3JtLmdldEZpZWxkVmFsdWUoXCJmaW5pc2hfZGF0ZVwiLCBcImZpbmlzaERhdGVBdXRvRm9ybVwiKTtcbiAgICAkKFwiYm9keVwiKS5hZGRDbGFzcyhcImxvYWRpbmdcIik7XG4gICAgcmV0dXJuIE1ldGVvci5jYWxsKCdjaGFuZ2VfYXBwcm92ZV9pbmZvJywgaW5zdGFuY2VJZCwgdHJhY2VJZCwgYXBwcm92ZUlkLCBvcGluaW9uX2lucHV0LCBmaW5pc2hfaW5wdXQsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICAkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIik7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRvYXN0ci5lcnJvcihUQVBpMThuLl9fKGVyci5yZWFzb24pKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgdG9hc3RyLnN1Y2Nlc3ModChcImluc3RhbmNlX2FwcHJvdmVfbW9kYWxfbW9kaWZpY2F0aW9uc2F2ZVwiKSk7XG4gICAgICAgIE1vZGFsLmhpZGUoXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gICdjbGljayAuaW5zdGFuY2UtdHJhY2UtZGV0YWlsLW1vZGFsIC5idG4tZGlzdHJpYnV0ZS1hcHByb3ZlLXJlbW92ZSc6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIE1vZGFsLmFsbG93TXVsdGlwbGUgPSB0cnVlO1xuICAgIHJldHVybiBNb2RhbC5zaG93KCdjYW5jZWxfZGlzdHJpYnV0ZV9tb2RhbCcpO1xuICB9XG59O1xuIiwiUmVsYXRlZEluc3RhbmNlcy5oZWxwZXJzID1cblx0c2hvd1JlbGF0ZWRJbnN0YWNlczogLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGVsc2Vcblx0XHRcdGlucyA9IHRoaXMuaW5zdGFuY2Vcblx0XHRpZiBpbnM/LnJlbGF0ZWRfaW5zdGFuY2VzICYmIF8uaXNBcnJheShpbnM/LnJlbGF0ZWRfaW5zdGFuY2VzKVxuXHRcdFx0aWYgZGIuaW5zdGFuY2VzLmZpbmQoe19pZDogeyRpbjogaW5zLnJlbGF0ZWRfaW5zdGFuY2VzfX0sIHtmaWVsZHM6IHtzcGFjZTogMSwgbmFtZTogMX19KS5jb3VudCgpID4gMFxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0cmVsYXRlZF9pbnN0YWNlczogLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGVsc2Vcblx0XHRcdGlucyA9IHRoaXMuaW5zdGFuY2Vcblx0XHRpZiBpbnM/LnJlbGF0ZWRfaW5zdGFuY2VzICYmIF8uaXNBcnJheShpbnM/LnJlbGF0ZWRfaW5zdGFuY2VzKVxuXHRcdFx0cmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHtfaWQ6IHskaW46IGlucy5yZWxhdGVkX2luc3RhbmNlc319LCB7ZmllbGRzOiB7c3BhY2U6IDEsIG5hbWU6IDF9fSkuZmV0Y2goKVxuXG5cdHJlbGF0ZWRfaW5zdGFjZV91cmw6IChpbnMpIC0+XG5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnQgJiYgKFN0ZWVkb3MuaXNNb2JpbGUoKSB8fCBTdGVlZG9zLmlzQ29yZG92YSgpKVxuXHRcdFx0cmV0dXJuICcnXG5cblx0XHRhYnNvbHV0ZSA9IGZhbHNlXG5cblx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdGFic29sdXRlID0gdGhpcy5hYnNvbHV0ZVxuXHRcdGlmIGFic29sdXRlXG5cdFx0XHRyZXR1cm4gTWV0ZW9yLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIraW5zLnNwYWNlK1wiL3ZpZXcvcmVhZG9ubHkvXCIgKyBpbnMuX2lkICsgJz9oaWRlX3RyYWNlcz0wJylcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gU3RlZWRvcy5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiK2lucy5zcGFjZStcIi92aWV3L3JlYWRvbmx5L1wiICsgaW5zLl9pZCArICc/aGlkZV90cmFjZXM9MCcpXG5cblx0X3Q6IChrZXkpLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdHJldHVybiBUQVBpMThuLl9fKGtleSlcblx0XHRlbHNlXG5cdFx0XHRsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlXG5cdFx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpXG5cblx0c2hvd19kZWxldGU6ICgpLT5cblx0XHRpZiAhTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRlbHNlXG5cdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSBcImRyYWZ0XCIgfHwgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94J1xuXHRcdFx0XHRjdXJyZW50X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKVxuXHRcdFx0XHRpZiBjdXJyZW50X3N0ZXBcblx0XHRcdFx0XHRpZiAoY3VycmVudF9zdGVwLmNhbl9lZGl0X21haW5fYXR0YWNoIHx8IGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09IHRydWUgfHwgY3VycmVudF9zdGVwLmNhbl9lZGl0X25vcm1hbF9hdHRhY2ggPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWUiLCJSZWxhdGVkSW5zdGFuY2VzLmhlbHBlcnMgPSB7XG4gIHNob3dSZWxhdGVkSW5zdGFjZXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbnM7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucyA9IHRoaXMuaW5zdGFuY2U7XG4gICAgfVxuICAgIGlmICgoaW5zICE9IG51bGwgPyBpbnMucmVsYXRlZF9pbnN0YW5jZXMgOiB2b2lkIDApICYmIF8uaXNBcnJheShpbnMgIT0gbnVsbCA/IGlucy5yZWxhdGVkX2luc3RhbmNlcyA6IHZvaWQgMCkpIHtcbiAgICAgIGlmIChkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgICAgIF9pZDoge1xuICAgICAgICAgICRpbjogaW5zLnJlbGF0ZWRfaW5zdGFuY2VzXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgc3BhY2U6IDEsXG4gICAgICAgICAgbmFtZTogMVxuICAgICAgICB9XG4gICAgICB9KS5jb3VudCgpID4gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgcmVsYXRlZF9pbnN0YWNlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlucztcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zID0gdGhpcy5pbnN0YW5jZTtcbiAgICB9XG4gICAgaWYgKChpbnMgIT0gbnVsbCA/IGlucy5yZWxhdGVkX2luc3RhbmNlcyA6IHZvaWQgMCkgJiYgXy5pc0FycmF5KGlucyAhPSBudWxsID8gaW5zLnJlbGF0ZWRfaW5zdGFuY2VzIDogdm9pZCAwKSkge1xuICAgICAgcmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHtcbiAgICAgICAgX2lkOiB7XG4gICAgICAgICAgJGluOiBpbnMucmVsYXRlZF9pbnN0YW5jZXNcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICBzcGFjZTogMSxcbiAgICAgICAgICBuYW1lOiAxXG4gICAgICAgIH1cbiAgICAgIH0pLmZldGNoKCk7XG4gICAgfVxuICB9LFxuICByZWxhdGVkX2luc3RhY2VfdXJsOiBmdW5jdGlvbihpbnMpIHtcbiAgICB2YXIgYWJzb2x1dGU7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCAmJiAoU3RlZWRvcy5pc01vYmlsZSgpIHx8IFN0ZWVkb3MuaXNDb3Jkb3ZhKCkpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGFic29sdXRlID0gZmFsc2U7XG4gICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgYWJzb2x1dGUgPSB0aGlzLmFic29sdXRlO1xuICAgIH1cbiAgICBpZiAoYWJzb2x1dGUpIHtcbiAgICAgIHJldHVybiBNZXRlb3IuYWJzb2x1dGVVcmwoXCJ3b3JrZmxvdy9zcGFjZS9cIiArIGlucy5zcGFjZSArIFwiL3ZpZXcvcmVhZG9ubHkvXCIgKyBpbnMuX2lkICsgJz9oaWRlX3RyYWNlcz0wJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBTdGVlZG9zLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIgKyBpbnMuc3BhY2UgKyBcIi92aWV3L3JlYWRvbmx5L1wiICsgaW5zLl9pZCArICc/aGlkZV90cmFjZXM9MCcpO1xuICAgIH1cbiAgfSxcbiAgX3Q6IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBsb2NhbGU7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgcmV0dXJuIFRBUGkxOG4uX18oa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZTtcbiAgICAgIHJldHVybiBUQVBpMThuLl9fKGtleSwge30sIGxvY2FsZSk7XG4gICAgfVxuICB9LFxuICBzaG93X2RlbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGN1cnJlbnRfc3RlcDtcbiAgICBpZiAoIU1ldGVvci5pc0NsaWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09IFwiZHJhZnRcIiB8fCBTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94Jykge1xuICAgICAgICBjdXJyZW50X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcbiAgICAgICAgaWYgKGN1cnJlbnRfc3RlcCkge1xuICAgICAgICAgIGlmIChjdXJyZW50X3N0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2ggfHwgY3VycmVudF9zdGVwLmNhbl9lZGl0X25vcm1hbF9hdHRhY2ggPT09IHRydWUgfHwgY3VycmVudF9zdGVwLmNhbl9lZGl0X25vcm1hbF9hdHRhY2ggPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwiUmVsYXRlZFJlY29yZHMuaGVscGVycyA9XG5cdHNob3dSZWxhdGVkUmVjb3JkczogKCktPlxuXHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0aW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0ZWxzZVxuXHRcdFx0aW5zID0gdGhpcy5pbnN0YW5jZVxuXHRcdGlmICFpbnNcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdHJldHVybiAhXy5pc0VtcHR5KGlucy5yZWNvcmRfaWRzKVxuXHRyZWxhdGVkUmVjb3JkVXJsOiAoKS0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50ICYmIChTdGVlZG9zLmlzTW9iaWxlKCkgfHwgU3RlZWRvcy5pc0NvcmRvdmEoKSlcblx0XHRcdHJldHVybiAnJ1xuXG5cdFx0YWJzb2x1dGUgPSBmYWxzZVxuXHRcdFxuXHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0aW5zID0gdGhpcy5pbnN0YW5jZVxuXHRcdFx0YWJzb2x1dGUgPSB0aGlzLmFic29sdXRlXG5cdFx0ZWxzZVxuXHRcdFx0aW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFxuXHRcdG9iamNldE5hbWUgPSBpbnMucmVjb3JkX2lkc1swXS5vXG5cdFx0aWQgPSBpbnMucmVjb3JkX2lkc1swXS5pZHNbMF1cblxuXHRcdGlmIGFic29sdXRlXG5cdFx0XHRyZXR1cm4gTWV0ZW9yLmFic29sdXRlVXJsKFwiYXBwLy0vI3tvYmpjZXROYW1lfS92aWV3LyN7aWR9XCIpXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJhcHAvLS8je29iamNldE5hbWV9L3ZpZXcvI3tpZH1cIikiLCJSZWxhdGVkUmVjb3Jkcy5oZWxwZXJzID0ge1xuICBzaG93UmVsYXRlZFJlY29yZHM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbnM7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucyA9IHRoaXMuaW5zdGFuY2U7XG4gICAgfVxuICAgIGlmICghaW5zKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAhXy5pc0VtcHR5KGlucy5yZWNvcmRfaWRzKTtcbiAgfSxcbiAgcmVsYXRlZFJlY29yZFVybDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFic29sdXRlLCBpZCwgaW5zLCBvYmpjZXROYW1lO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQgJiYgKFN0ZWVkb3MuaXNNb2JpbGUoKSB8fCBTdGVlZG9zLmlzQ29yZG92YSgpKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBhYnNvbHV0ZSA9IGZhbHNlO1xuICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgIGlucyA9IHRoaXMuaW5zdGFuY2U7XG4gICAgICBhYnNvbHV0ZSA9IHRoaXMuYWJzb2x1dGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIH1cbiAgICBvYmpjZXROYW1lID0gaW5zLnJlY29yZF9pZHNbMF0ubztcbiAgICBpZCA9IGlucy5yZWNvcmRfaWRzWzBdLmlkc1swXTtcbiAgICBpZiAoYWJzb2x1dGUpIHtcbiAgICAgIHJldHVybiBNZXRlb3IuYWJzb2x1dGVVcmwoXCJhcHAvLS9cIiArIG9iamNldE5hbWUgKyBcIi92aWV3L1wiICsgaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gU3RlZWRvcy5hYnNvbHV0ZVVybChcImFwcC8tL1wiICsgb2JqY2V0TmFtZSArIFwiL3ZpZXcvXCIgKyBpZCk7XG4gICAgfVxuICB9XG59O1xuIiwiLypcbiAqIEBBdXRob3I6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBEYXRlOiAyMDIxLTA1LTI0IDEyOjMyOjU2XG4gKiBATGFzdEVkaXRvcnM6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMTItMjQgMTU6Mjk6MjJcbiAqIEBEZXNjcmlwdGlvbjogXG4gKi9cbi8vIEpzb25Sb3V0ZXMuYWRkKFwicG9zdFwiLCBcIi9hcGkvd29ya2Zsb3cvZ2V0U3BhY2VVc2Vyc1wiLCBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbi8vICAgdmFyXG4vLyAgICAgdXNlcklkcyA9IHJlcS5ib2R5LnVzZXJJZHMsXG4vLyAgICAgc3BhY2VJZCA9IHJlcS5xdWVyeS5zcGFjZUlkLFxuLy8gICAgIHNwYWNlVXNlcnMgPSBbXVxuLy8gICA7XG5cbi8vICAgaWYgKCF1c2VySWRzIHx8ICFzcGFjZUlkKSB7XG4vLyAgICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gICAgICAgY29kZTogMjAwLFxuLy8gICAgICAgZGF0YToge1xuLy8gICAgICAgICAnZXJyb3JzJzogJ+e8uuWwkeWPguaVsCdcbi8vICAgICAgIH1cbi8vICAgICB9KTtcbi8vICAgfVxuXG4vLyAgIHNwYWNlVXNlcnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0VXNlcnMoc3BhY2VJZCwgdXNlcklkcyk7XG5cbi8vICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gICAgIGNvZGU6IDIwMCxcbi8vICAgICBkYXRhOiB7XG4vLyAgICAgICAnc3BhY2VVc2Vycyc6IHNwYWNlVXNlcnNcbi8vICAgICB9XG4vLyAgIH0pO1xuLy8gfSlcblxuXG4gIFxuICAiLCIvKlxuICogQEF1dGhvcjogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQERhdGU6IDIwMjEtMDUtMjQgMTI6MzI6NTZcbiAqIEBMYXN0RWRpdG9yczogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyMi0xMi0yNCAxNToyMzoxNFxuICogQERlc2NyaXB0aW9uOiBcbiAqL1xuLy8gSnNvblJvdXRlcy5hZGQoXCJwb3N0XCIsIFwiL2FwaS93b3JrZmxvdy9nZXRGb3JtdWxhVXNlck9iamVjdHNcIiwgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4vLyAgIHZhclxuLy8gICAgIHVzZXJJZHMgPSByZXEuYm9keS51c2VySWRzLFxuLy8gICAgIHNwYWNlSWQgPSByZXEucXVlcnkuc3BhY2VJZCxcbi8vICAgICBzcGFjZVVzZXJzID0gW11cbi8vICAgO1xuXG4vLyAgIGlmICghdXNlcklkcyB8fCAhc3BhY2VJZCkge1xuLy8gICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbi8vICAgICAgIGNvZGU6IDIwMCxcbi8vICAgICAgIGRhdGE6IHtcbi8vICAgICAgICAgJ2Vycm9ycyc6ICfnvLrlsJHlj4LmlbAnXG4vLyAgICAgICB9XG4vLyAgICAgfSk7XG4vLyAgIH1cblxuLy8gICB2YXIgdXNlcnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0Rm9ybXVsYVVzZXJPYmplY3Qoc3BhY2VJZCwgdXNlcklkcyk7XG5cbi8vICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gICAgIGNvZGU6IDIwMCxcbi8vICAgICBkYXRhOiB7XG4vLyAgICAgICAnc3BhY2VVc2Vycyc6IHVzZXJzXG4vLyAgICAgfVxuLy8gICB9KTtcbi8vIH0pXG5cblxuICBcbiAgIiwiLypcbiAqIEBBdXRob3I6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBEYXRlOiAyMDIxLTA1LTI0IDEyOjMyOjU2XG4gKiBATGFzdEVkaXRvcnM6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMTItMjQgMTU6Mzg6NTRcbiAqIEBEZXNjcmlwdGlvbjogXG4gKi9cbi8vIEpzb25Sb3V0ZXMuYWRkKFwicG9zdFwiLCBcIi9hcGkvd29ya2Zsb3cvaW5pdF9mb3JtdWxhX3ZhbHVlc1wiLCBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCkge1xuLy8gXHR2YXJcbi8vIFx0XHRmaWVsZHMgPSByZXEuYm9keS5maWVsZHMsXG4vLyBcdFx0YXV0b0Zvcm1Eb2MgPSByZXEuYm9keS5hdXRvRm9ybURvYyxcbi8vIFx0XHRhcHByb3ZlciA9IHJlcS5ib2R5LmFwcHJvdmVyLFxuLy8gXHRcdGFwcGxpY2FudCA9IHJlcS5ib2R5LmFwcGxpY2FudCxcblxuLy8gXHRcdHNwYWNlSWQgPSByZXEucXVlcnkuc3BhY2VJZCxcblxuLy8gXHRcdHNwYWNlVXNlcnMgPSBbXTtcblxuLy8gXHRpZiAoIWZpZWxkcyB8fCAhc3BhY2VJZCB8fCAhYXV0b0Zvcm1Eb2MgfHwgIWFwcHJvdmVyIHx8ICFhcHBsaWNhbnQpIHtcbi8vIFx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4vLyBcdFx0XHRjb2RlOiAyMDAsXG4vLyBcdFx0XHRkYXRhOiB7XG4vLyBcdFx0XHRcdCdlcnJvcnMnOiAn57y65bCR5Y+C5pWwJ1xuLy8gXHRcdFx0fVxuLy8gXHRcdH0pO1xuLy8gXHRcdHJldHVybjtcbi8vIFx0fVxuXG4vLyBcdGZvcm11bGFfdmFsdWVzID0gRm9ybV9mb3JtdWxhLmluaXRfZm9ybXVsYV92YWx1ZXMoZmllbGRzLCBhdXRvRm9ybURvYywgYXBwcm92ZXIsIGFwcGxpY2FudCwgc3BhY2VJZCk7XG5cbi8vIFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gXHRcdGNvZGU6IDIwMCxcbi8vIFx0XHRkYXRhOiB7XG4vLyBcdFx0XHQnZm9ybXVsYV92YWx1ZXMnOiBmb3JtdWxhX3ZhbHVlc1xuLy8gXHRcdH1cbi8vIFx0fSk7XG4vLyB9KVxuIiwiLy8gSnNvblJvdXRlcy5hZGQoJ3Bvc3QnLCAnL2FwaS93b3JrZmxvdy9mb3J3YXJkJywgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4vLyBcdHRyeSB7XG4vLyBcdFx0dmFyIGN1cnJlbnRfdXNlcl9pbmZvID0gdXVmbG93TWFuYWdlci5jaGVja19hdXRob3JpemF0aW9uKHJlcSk7XG4vLyBcdFx0dmFyIGN1cnJlbnRfdXNlcl9pZCA9IGN1cnJlbnRfdXNlcl9pbmZvLl9pZDtcblxuLy8gXHRcdHZhciBoYXNoRGF0YSA9IHJlcS5ib2R5O1xuLy8gXHRcdHZhciBpbnN0YW5jZV9pZCA9IGhhc2hEYXRhLmluc3RhbmNlX2lkO1xuLy8gXHRcdHZhciBzcGFjZV9pZCA9IGhhc2hEYXRhLnNwYWNlX2lkO1xuLy8gXHRcdHZhciBmbG93X2lkID0gaGFzaERhdGEuZmxvd19pZDtcbi8vIFx0XHR2YXIgaGFzU2F2ZUluc3RhbmNlVG9BdHRhY2htZW50ID0gaGFzaERhdGEuaGFzU2F2ZUluc3RhbmNlVG9BdHRhY2htZW50O1xuLy8gXHRcdHZhciBkZXNjcmlwdGlvbiA9IGhhc2hEYXRhLmRlc2NyaXB0aW9uO1xuLy8gXHRcdHZhciBpc0ZvcndhcmRBdHRhY2htZW50cyA9IGhhc2hEYXRhLmlzRm9yd2FyZEF0dGFjaG1lbnRzO1xuLy8gXHRcdHZhciBzZWxlY3RlZFVzZXJzID0gaGFzaERhdGEuc2VsZWN0ZWRVc2Vycztcbi8vIFx0XHR2YXIgYWN0aW9uX3R5cGUgPSBoYXNoRGF0YS5hY3Rpb25fdHlwZTtcbi8vIFx0XHR2YXIgcmVsYXRlZCA9IGhhc2hEYXRhLnJlbGF0ZWQ7XG4vLyBcdFx0dmFyIGZyb21fYXBwcm92ZV9pZCA9IGhhc2hEYXRhLmZyb21fYXBwcm92ZV9pZDtcblxuLy8gXHRcdGNoZWNrKGluc3RhbmNlX2lkLCBTdHJpbmcpO1xuLy8gXHRcdGNoZWNrKHNwYWNlX2lkLCBTdHJpbmcpO1xuLy8gXHRcdGNoZWNrKGZsb3dfaWQsIFN0cmluZyk7XG4vLyBcdFx0Y2hlY2soaGFzU2F2ZUluc3RhbmNlVG9BdHRhY2htZW50LCBCb29sZWFuKTtcbi8vIFx0XHRjaGVjayhkZXNjcmlwdGlvbiwgU3RyaW5nKTtcbi8vIFx0XHRjaGVjayhpc0ZvcndhcmRBdHRhY2htZW50cywgQm9vbGVhbik7XG4vLyBcdFx0Y2hlY2soc2VsZWN0ZWRVc2VycywgQXJyYXkpO1xuLy8gXHRcdGNoZWNrKGFjdGlvbl90eXBlLCBNYXRjaC5PbmVPZignZm9yd2FyZCcsICdkaXN0cmlidXRlJykpO1xuXG4vLyBcdFx0aWYgKGFjdGlvbl90eXBlID09IFwiZGlzdHJpYnV0ZVwiKVxuLy8gXHRcdFx0Y2hlY2soZnJvbV9hcHByb3ZlX2lkLCBTdHJpbmcpO1xuXG4vLyBcdFx0dmFyIGlucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKGluc3RhbmNlX2lkKTtcbi8vIFx0XHR2YXIgb2xkX3NwYWNlX2lkID0gaW5zLnNwYWNlO1xuXG4vLyBcdFx0dmFyIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKGZsb3dfaWQpO1xuXG4vLyBcdFx0dmFyIHNwYWNlID0gZGIuc3BhY2VzLmZpbmRPbmUoc3BhY2VfaWQpO1xuXG4vLyBcdFx0aWYgKCFpbnMgfHwgIWZsb3cgfHwgIXNwYWNlKSB7XG4vLyBcdFx0XHR0aHJvdyBuZXcgTWV0ZW9yLkVycm9yKCdwYXJhbXMgZXJyb3IhJywgJ3JlY29yZCBub3QgZXhpc3RzIScpO1xuLy8gXHRcdH1cblxuLy8gXHRcdHZhciBmb3J3YXJkX3VzZXJzID0gbmV3IEFycmF5O1xuLy8gXHRcdGlmIChfLmlzRW1wdHkoc2VsZWN0ZWRVc2VycykpIHtcbi8vIFx0XHRcdGZvcndhcmRfdXNlcnMgPSBbY3VycmVudF91c2VyX2lkXTtcbi8vIFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0Zm9yd2FyZF91c2VycyA9IHNlbGVjdGVkVXNlcnM7XG4vLyBcdFx0fVxuXG4vLyBcdFx0Ly8g5qCh6aqM5YiG5Y+R5a+56LGh5piv5ZCm5pyJ5YiG5Y+R5rWB56iL55qE5o+Q5Lqk5p2D6ZmQXG4vLyBcdFx0dmFyIG5vX3Blcm1pc3Npb25fdXNlcl9pZHMgPSBuZXcgQXJyYXkoKTtcbi8vIFx0XHRfLmVhY2goZm9yd2FyZF91c2VycywgZnVuY3Rpb24gKHVpZCkge1xuLy8gXHRcdFx0dmFyIHBlcm1pc3Npb25zID0gcGVybWlzc2lvbk1hbmFnZXIuZ2V0Rmxvd1Blcm1pc3Npb25zKGZsb3dfaWQsIHVpZCk7XG4vLyBcdFx0XHRpZiAoIXBlcm1pc3Npb25zLmluY2x1ZGVzKFwiYWRkXCIpKSB7XG4vLyBcdFx0XHRcdC8vIHRocm93IG5ldyBNZXRlb3IuRXJyb3IoJ2Vycm9yIScsIFwi6K+l55Sz6K+35Lq65rKh5pyJ5o+Q5Lqk5q2k55Sz6K+35Y2V55qE5p2D6ZmQ44CCXCIpXG4vLyBcdFx0XHRcdG5vX3Blcm1pc3Npb25fdXNlcl9pZHMucHVzaCh1aWQpO1xuLy8gXHRcdFx0fVxuLy8gXHRcdH0pXG4vLyBcdFx0aWYgKCFfLmlzRW1wdHkobm9fcGVybWlzc2lvbl91c2VyX2lkcykpIHtcbi8vIFx0XHRcdHZhciBub19wZXJtaXNzaW9uX3VzZXJzX25hbWUgPSBuZXcgQXJyYXkoKTtcbi8vIFx0XHRcdGRiLnVzZXJzLmZpbmQoe1xuLy8gXHRcdFx0XHRfaWQ6IHtcbi8vIFx0XHRcdFx0XHQkaW46IG5vX3Blcm1pc3Npb25fdXNlcl9pZHNcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fSwge1xuLy8gXHRcdFx0XHRmaWVsZHM6IHtcbi8vIFx0XHRcdFx0XHRuYW1lOiAxXG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pLmZvckVhY2goZnVuY3Rpb24gKHUpIHtcbi8vIFx0XHRcdFx0bm9fcGVybWlzc2lvbl91c2Vyc19uYW1lLnB1c2godS5uYW1lKTtcbi8vIFx0XHRcdH0pO1xuLy8gXHRcdFx0dGhyb3cgbmV3IE1ldGVvci5FcnJvcignbm9fcGVybWlzc2lvbicsIFwi6K+l5o+Q5Lqk5Lq65rKh5pyJ5o+Q5Lqk5q2k55Sz6K+35Y2V55qE5p2D6ZmQ44CCXCIsIG5vX3Blcm1pc3Npb25fdXNlcnNfbmFtZS5qb2luKCcsJykpXG4vLyBcdFx0fVxuXG4vLyBcdFx0dmFyIG5ld19pbnNfaWRzID0gbmV3IEFycmF5O1xuXG4vLyBcdFx0dmFyIGN1cnJlbnRfdHJhY2UgPSBudWxsO1xuLy8gXHRcdGlmIChhY3Rpb25fdHlwZSA9PSBcImRpc3RyaWJ1dGVcIikge1xuLy8gXHRcdFx0Xy5lYWNoKGlucy50cmFjZXMsIGZ1bmN0aW9uICh0KSB7XG4vLyBcdFx0XHRcdGlmICghY3VycmVudF90cmFjZSkge1xuLy8gXHRcdFx0XHRcdF8uZWFjaCh0LmFwcHJvdmVzLCBmdW5jdGlvbiAoYSkge1xuLy8gXHRcdFx0XHRcdFx0aWYgKCFjdXJyZW50X3RyYWNlKSB7XG4vLyBcdFx0XHRcdFx0XHRcdGlmIChhLl9pZCA9PSBmcm9tX2FwcHJvdmVfaWQpXG4vLyBcdFx0XHRcdFx0XHRcdFx0Y3VycmVudF90cmFjZSA9IHQ7XG4vLyBcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0fSlcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fSlcbi8vIFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0Y3VycmVudF90cmFjZSA9IF8ubGFzdChpbnMudHJhY2VzKTtcbi8vIFx0XHR9XG4vLyBcdFx0dmFyIGN1cnJlbnRfdHJhY2VfaWQgPSBjdXJyZW50X3RyYWNlLl9pZDtcbi8vIFx0XHR2YXIgZm9yd2FyZF9hcHByb3ZlcyA9IFtdO1xuLy8gXHRcdHZhciBmcm9tX3VzZXJfbmFtZSA9IGRiLnVzZXJzLmZpbmRPbmUoY3VycmVudF91c2VyX2lkLCB7XG4vLyBcdFx0XHRmaWVsZHM6IHtcbi8vIFx0XHRcdFx0bmFtZTogMVxuLy8gXHRcdFx0fVxuLy8gXHRcdH0pLm5hbWVcbi8vIFx0XHR2YXIgc2V0X29iaiA9IG5ldyBPYmplY3Q7XG5cbi8vIFx0XHQvLyDorqHnrpd2YWx1ZXNcbi8vIFx0XHR2YXIgb2xkX3ZhbHVlcyA9IGlucy52YWx1ZXMsXG4vLyBcdFx0XHRuZXdfdmFsdWVzID0ge307XG4vLyBcdFx0dmFyIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGZsb3cuZm9ybSk7XG4vLyBcdFx0dmFyIGZpZWxkcyA9IGZvcm0uY3VycmVudC5maWVsZHMgfHwgW107XG5cbi8vIFx0XHR2YXIgb2xkX2Zvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGlucy5mb3JtKTtcbi8vIFx0XHR2YXIgb2xkX2Zvcm1fdmVyc2lvbiA9IGlucy5mb3JtX3ZlcnNpb24sXG4vLyBcdFx0XHRvbGRfZmllbGRzID0gW10sXG4vLyBcdFx0XHRjb21tb25fZmllbGRzID0gW107XG5cbi8vIFx0XHR2YXIgc2VsZWN0X3RvX2lucHV0X2ZpZWxkcyA9IFtdO1xuXG4vLyBcdFx0aWYgKG9sZF9mb3JtLmN1cnJlbnQuX2lkID09IG9sZF9mb3JtX3ZlcnNpb24pIHtcbi8vIFx0XHRcdG9sZF9maWVsZHMgPSBvbGRfZm9ybS5jdXJyZW50LmZpZWxkcztcbi8vIFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0aWYgKG9sZF9mb3JtLmhpc3RvcnlzKSB7XG4vLyBcdFx0XHRcdG9sZF9mb3JtLmhpc3RvcnlzLmZvckVhY2goZnVuY3Rpb24gKGgpIHtcbi8vIFx0XHRcdFx0XHRpZiAoaC5faWQgPT0gb2xkX2Zvcm1fdmVyc2lvbilcbi8vIFx0XHRcdFx0XHRcdG9sZF9maWVsZHMgPSBoLmZpZWxkcztcbi8vIFx0XHRcdFx0fSlcbi8vIFx0XHRcdH1cbi8vIFx0XHR9XG5cbi8vIFx0XHRmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbi8vIFx0XHRcdHZhciBleGlzdHNfZmllbGQgPSBfLmZpbmQob2xkX2ZpZWxkcywgZnVuY3Rpb24gKGYpIHtcbi8vIFx0XHRcdFx0cmV0dXJuIGYudHlwZSA9PSBmaWVsZC50eXBlICYmIGYuY29kZSA9PSBmaWVsZC5jb2RlO1xuLy8gXHRcdFx0fSlcbi8vIFx0XHRcdGlmIChleGlzdHNfZmllbGQpXG4vLyBcdFx0XHRcdGNvbW1vbl9maWVsZHMucHVzaChmaWVsZCk7XG4vLyBcdFx0XHR2YXIgc2VsZWN0X2lucHV0X2ZpZWxkID0gXy5maW5kKG9sZF9maWVsZHMsIGZ1bmN0aW9uIChmKSB7XG4vLyBcdFx0XHRcdHJldHVybiBmLnR5cGUgPT0gJ3NlbGVjdCcgJiYgZmllbGQudHlwZSA9PSAnaW5wdXQnICYmIGYuY29kZSA9PSBmaWVsZC5jb2RlO1xuLy8gXHRcdFx0fSlcbi8vIFx0XHRcdGlmIChzZWxlY3RfaW5wdXRfZmllbGQpXG4vLyBcdFx0XHRcdHNlbGVjdF90b19pbnB1dF9maWVsZHMucHVzaChzZWxlY3RfaW5wdXRfZmllbGQpO1xuLy8gXHRcdH0pXG5cbi8vIFx0XHRzZWxlY3RfdG9faW5wdXRfZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4vLyBcdFx0XHRpZiAob2xkX3ZhbHVlc1tmaWVsZC5jb2RlXSkge1xuLy8gXHRcdFx0XHRuZXdfdmFsdWVzW2ZpZWxkLmNvZGVdID0gb2xkX3ZhbHVlc1tmaWVsZC5jb2RlXTtcbi8vIFx0XHRcdH1cbi8vIFx0XHR9KVxuXG4vLyBcdFx0Y29tbW9uX2ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuLy8gXHRcdFx0aWYgKGZpZWxkLnR5cGUgPT0gJ3NlY3Rpb24nKSB7XG4vLyBcdFx0XHRcdGlmIChmaWVsZC5maWVsZHMpIHtcbi8vIFx0XHRcdFx0XHRmaWVsZC5maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZikge1xuLy8gXHRcdFx0XHRcdFx0Ly8g6Leo5bel5L2c5Yy66L2s5Y+R5LiN5aSN5Yi26YCJ5Lq66YCJ57uEXG4vLyBcdFx0XHRcdFx0XHRpZiAoWydncm91cCcsICd1c2VyJ10uaW5jbHVkZXMoZi50eXBlKSAmJiBvbGRfc3BhY2VfaWQgIT0gc3BhY2VfaWQpIHtcbi8vIFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0dmFyIGtleSA9IGYuY29kZTtcbi8vIFx0XHRcdFx0XHRcdHZhciBvbGRfdiA9IG9sZF92YWx1ZXNba2V5XTtcbi8vIFx0XHRcdFx0XHRcdGlmIChvbGRfdikge1xuLy8gXHRcdFx0XHRcdFx0XHR2YXIgZmllbGRPcHRpb25zID0gZi5vcHRpb25zICYmIGYub3B0aW9ucy5zcGxpdCAmJiBmLm9wdGlvbnMuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKG4pe1xuLy8gXHRcdFx0XHRcdFx0XHRcdHZhciBpdGVtU3BsaXRzID0gbi5zcGxpdChcIjpcIik7XG4vLyBcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBpdGVtU3BsaXRzWzBdLFxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGl0ZW1TcGxpdHNbMV0gfHwgblxuLy8gXHRcdFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdFx0fSk7XG4vLyBcdFx0XHRcdFx0XHRcdC8vIOagoemqjCDljZXpgInvvIzlpJrpgInvvIzkuIvmi4nmoYYg5a2X5q615YC85piv5ZCm5Zyo5paw6KGo5Y2V5a+55bqU5a2X5q6155qE5Y+v6YCJ5YC86IyD5Zu05YaFXG4vLyBcdFx0XHRcdFx0XHRcdGlmIChmLnR5cGUgPT0gJ3NlbGVjdCcgfHwgZi50eXBlID09ICdyYWRpbycpIHtcbi8vIFx0XHRcdFx0XHRcdFx0XHR2YXIgc2VsZWN0ZWRPcHRpb24gPSBmaWVsZE9wdGlvbnMuZmluZChmdW5jdGlvbihpdGVtKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaXRlbS52YWx1ZSA9PT0gb2xkX3Y7XG4vLyBcdFx0XHRcdFx0XHRcdFx0fSk7XG4vLyBcdFx0XHRcdFx0XHRcdFx0aWYoIXNlbGVjdGVkT3B0aW9uKXtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcbi8vIFx0XHRcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0XHRcdH1cblxuLy8gXHRcdFx0XHRcdFx0XHRpZiAoZi50eXBlID09ICdtdWx0aVNlbGVjdCcpIHtcbi8vIFx0XHRcdFx0XHRcdFx0XHR2YXIgb2xkX211bHRpU2VsZWN0ZWQgPSBvbGRfdi5zcGxpdCgnLCcpO1xuLy8gXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdfbXVsdGlTZWxlY3RlZCA9IF8uaW50ZXJzZWN0aW9uKGZpZWxkT3B0aW9ucy5tYXAoZnVuY3Rpb24obil7IHJldHVybiBuLnZhbHVlOyB9KSwgb2xkX211bHRpU2VsZWN0ZWQpO1xuLy8gXHRcdFx0XHRcdFx0XHRcdG9sZF92ID0gbmV3X211bHRpU2VsZWN0ZWQuam9pbignLCcpO1xuLy8gXHRcdFx0XHRcdFx0XHR9XG5cbi8vIFx0XHRcdFx0XHRcdFx0bmV3X3ZhbHVlc1trZXldID0gb2xkX3Y7XG4vLyBcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0fSlcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fSBlbHNlIGlmIChmaWVsZC50eXBlID09ICd0YWJsZScpIHtcbi8vIFx0XHRcdFx0aWYgKCFfLmlzRW1wdHkob2xkX3ZhbHVlc1tmaWVsZC5jb2RlXSkpIHtcbi8vIFx0XHRcdFx0XHRuZXdfdmFsdWVzW2ZpZWxkLmNvZGVdID0gbmV3IEFycmF5O1xuLy8gXHRcdFx0XHRcdG9sZF92YWx1ZXNbZmllbGQuY29kZV0uZm9yRWFjaChmdW5jdGlvbiAob2xkX3RhYmxlX3Jvd192YWx1ZXMpIHtcbi8vIFx0XHRcdFx0XHRcdHZhciBuZXdfdGFibGVfcm93X3ZhbHVlcyA9IHt9O1xuXG4vLyBcdFx0XHRcdFx0XHRpZiAoIV8uaXNFbXB0eShmaWVsZC5maWVsZHMpKSB7XG4vLyBcdFx0XHRcdFx0XHRcdGZpZWxkLmZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0Ly8g6Leo5bel5L2c5Yy66L2s5Y+R5LiN5aSN5Yi26YCJ5Lq66YCJ57uEXG4vLyBcdFx0XHRcdFx0XHRcdFx0aWYgKFsnZ3JvdXAnLCAndXNlciddLmluY2x1ZGVzKGYudHlwZSkgJiYgb2xkX3NwYWNlX2lkICE9IHNwYWNlX2lkKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG4vLyBcdFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0XHRcdHZhciBrZXkgPSBmLmNvZGU7XG4vLyBcdFx0XHRcdFx0XHRcdFx0dmFyIG9sZF92ID0gb2xkX3RhYmxlX3Jvd192YWx1ZXNba2V5XTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRpZiAob2xkX3YpIHtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaWVsZE9wdGlvbnMgPSBmLm9wdGlvbnMgJiYgZi5vcHRpb25zLnNwbGl0ICYmIGYub3B0aW9ucy5zcGxpdChcIlxcblwiKS5tYXAoZnVuY3Rpb24obil7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpdGVtU3BsaXRzID0gbi5zcGxpdChcIjpcIik7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGl0ZW1TcGxpdHNbMF0sXG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGl0ZW1TcGxpdHNbMV0gfHwgblxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHR9KTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdC8vIOagoemqjCDljZXpgInvvIzlpJrpgInvvIzkuIvmi4nmoYYg5a2X5q615YC85piv5ZCm5Zyo5paw6KGo5Y2V5a+55bqU5a2X5q6155qE5Y+v6YCJ5YC86IyD5Zu05YaFXG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZi50eXBlID09ICdzZWxlY3QnIHx8IGYudHlwZSA9PSAncmFkaW8nKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKGZ1bmN0aW9uKGl0ZW0pIHtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaXRlbS52YWx1ZSA9PT0gb2xkX3Y7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHRpZighc2VsZWN0ZWRPcHRpb24pe1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZi50eXBlID09ICdtdWx0aVNlbGVjdCcpIHtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG9sZF9tdWx0aVNlbGVjdGVkID0gb2xkX3Yuc3BsaXQoJywnKTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5ld19tdWx0aVNlbGVjdGVkID0gXy5pbnRlcnNlY3Rpb24oZmllbGRPcHRpb25zLm1hcChmdW5jdGlvbihuKXsgcmV0dXJuIG4udmFsdWU7IH0pLCBvbGRfbXVsdGlTZWxlY3RlZCk7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdG9sZF92ID0gbmV3X211bHRpU2VsZWN0ZWQuam9pbignLCcpO1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRuZXdfdGFibGVfcm93X3ZhbHVlc1trZXldID0gb2xkX3Y7XG4vLyBcdFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0XHR9KVxuLy8gXHRcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0XHRpZiAob2xkX3RhYmxlX3Jvd192YWx1ZXMuX2lkKSB7XG4vLyBcdFx0XHRcdFx0XHRcdG5ld190YWJsZV9yb3dfdmFsdWVzLl9pZCA9IG5ldyBNb25nby5PYmplY3RJRCgpLl9zdHI7XG4vLyBcdFx0XHRcdFx0XHR9XG5cbi8vIFx0XHRcdFx0XHRcdGlmICghXy5pc0VtcHR5KG5ld190YWJsZV9yb3dfdmFsdWVzKSkge1xuLy8gXHRcdFx0XHRcdFx0XHRuZXdfdmFsdWVzW2ZpZWxkLmNvZGVdLnB1c2gobmV3X3RhYmxlX3Jvd192YWx1ZXMpO1xuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdH0pXG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0gZWxzZSB7XG4vLyBcdFx0XHRcdC8vIOi3qOW3peS9nOWMuui9rOWPkeS4jeWkjeWItumAieS6uumAiee7hFxuLy8gXHRcdFx0XHRpZiAoWydncm91cCcsICd1c2VyJ10uaW5jbHVkZXMoZmllbGQudHlwZSkgJiYgb2xkX3NwYWNlX2lkICE9IHNwYWNlX2lkKSB7XG4vLyBcdFx0XHRcdFx0cmV0dXJuO1xuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHRcdHZhciBrZXkgPSBmaWVsZC5jb2RlO1xuLy8gXHRcdFx0XHR2YXIgb2xkX3YgPSBvbGRfdmFsdWVzW2tleV07XG4vLyBcdFx0XHRcdGlmIChvbGRfdikge1xuLy8gXHRcdFx0XHRcdC8vIOagoemqjCDljZXpgInvvIzlpJrpgInvvIzkuIvmi4nmoYYg5a2X5q615YC85piv5ZCm5Zyo5paw6KGo5Y2V5a+55bqU5a2X5q6155qE5Y+v6YCJ5YC86IyD5Zu05YaFXG4vLyBcdFx0XHRcdFx0dmFyIGZpZWxkT3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMgJiYgZmllbGQub3B0aW9ucy5zcGxpdCAmJiBmaWVsZC5vcHRpb25zLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbihuKXtcbi8vIFx0XHRcdFx0XHRcdHZhciBpdGVtU3BsaXRzID0gbi5zcGxpdChcIjpcIik7XG4vLyBcdFx0XHRcdFx0XHRyZXR1cm4ge1xuLy8gXHRcdFx0XHRcdFx0XHRsYWJlbDogaXRlbVNwbGl0c1swXSxcbi8vIFx0XHRcdFx0XHRcdFx0dmFsdWU6IGl0ZW1TcGxpdHNbMV0gfHwgblxuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRcdGlmIChmaWVsZC50eXBlID09ICdzZWxlY3QnIHx8IGZpZWxkLnR5cGUgPT0gJ3JhZGlvJykge1xuLy8gXHRcdFx0XHRcdFx0dmFyIHNlbGVjdGVkT3B0aW9uID0gZmllbGRPcHRpb25zLmZpbmQoZnVuY3Rpb24oaXRlbSkge1xuLy8gXHRcdFx0XHRcdFx0XHRyZXR1cm4gaXRlbS52YWx1ZSA9PT0gb2xkX3Y7XG4vLyBcdFx0XHRcdFx0XHR9KTtcbi8vIFx0XHRcdFx0XHRcdGlmKCFzZWxlY3RlZE9wdGlvbil7XG4vLyBcdFx0XHRcdFx0XHRcdHJldHVybjtcbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHR9XG5cbi8vIFx0XHRcdFx0XHRpZiAoZmllbGQudHlwZSA9PSAnbXVsdGlTZWxlY3QnKSB7XG4vLyBcdFx0XHRcdFx0XHR2YXIgb2xkX211bHRpU2VsZWN0ZWQgPSBvbGRfdi5zcGxpdCgnLCcpO1xuLy8gXHRcdFx0XHRcdFx0dmFyIG5ld19tdWx0aVNlbGVjdGVkID0gXy5pbnRlcnNlY3Rpb24oZmllbGRPcHRpb25zLm1hcChmdW5jdGlvbihuKXsgcmV0dXJuIG4udmFsdWU7IH0pLCBvbGRfbXVsdGlTZWxlY3RlZCk7XG4vLyBcdFx0XHRcdFx0XHRvbGRfdiA9IG5ld19tdWx0aVNlbGVjdGVkLmpvaW4oJywnKTtcbi8vIFx0XHRcdFx0XHR9XG5cbi8vIFx0XHRcdFx0XHRuZXdfdmFsdWVzW2tleV0gPSBvbGRfdjtcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fVxuXG4vLyBcdFx0fSlcblxuLy8gXHRcdC8v5aaC5p6c5piv5YiG5Y+R77yM5YiZdmFsdWXkuK3nmoRyZWNvcmRfbmVlZOOAgUZPTkRTSUTkuI3pnIDopoHliIblj5HliLDmlrDnlLPor7fljZXkuK1cbi8vIFx0XHRpZiAoYWN0aW9uX3R5cGUgPT09ICdkaXN0cmlidXRlJykge1xuLy8gXHRcdFx0ZGVsZXRlIG5ld192YWx1ZXMucmVjb3JkX25lZWQ7XG4vLyBcdFx0XHRkZWxldGUgbmV3X3ZhbHVlcy5GT05EU0lEO1xuLy8gXHRcdH1cblxuLy8gXHRcdC8vIOiuoeeul+eUs+ivt+WNleagh+mimFxuLy8gXHRcdHZhciBpbnN0YW5jZV9uYW1lID0gXCJcIjtcbi8vIFx0XHR2YXIgbmFtZV9mb3J1bWxhID0gZm9ybS5jdXJyZW50Lm5hbWVfZm9ydW1sYTtcbi8vIFx0XHRpZiAobmFtZV9mb3J1bWxhKSB7XG4vLyBcdFx0XHR0cnkge1xuLy8gXHRcdFx0XHR2YXIgaXNjcmlwdCA9IG5hbWVfZm9ydW1sYS5yZXBsYWNlKC9cXHsvZywgXCIobmV3X3ZhbHVlc1snXCIpLnJlcGxhY2UoL1xcfS9nLCBcIiddIHx8ICcnKVwiKTtcbi8vIFx0XHRcdFx0dmFyIHJldiA9IGV2YWwoaXNjcmlwdCk7XG4vLyBcdFx0XHRcdGluc3RhbmNlX25hbWUgPSByZXYgfHwgZmxvdy5uYW1lO1xuLy8gXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcbi8vIFx0XHRcdFx0dGhyb3cgbmV3IE1ldGVvci5FcnJvcignY2FjdWxhdGVfaW5zdGFuY2VfbmFtZScsIFwi6K6h566X55Sz6K+35Y2V5qCH6aKY5Ye66ZSZ6K+35qOA5p+l6KGo5Y2V5qCH6aKY6ISa5pys44CCXCIpO1xuLy8gXHRcdFx0fVxuLy8gXHRcdH0gZWxzZSB7XG4vLyBcdFx0XHRpbnN0YW5jZV9uYW1lID0gZmxvdy5uYW1lO1xuLy8gXHRcdH1cblxuLy8gXHRcdC8vIGluc3RhbmNl5Lit6K6w5b2V5b2T5YmN5q2l6aqk5ZCN56ewICMxMzE0XG4vLyBcdFx0dmFyIHN0YXJ0X3N0ZXAgPSBfLmZpbmQoZmxvdy5jdXJyZW50LnN0ZXBzLCBmdW5jdGlvbiAoc3RlcCkge1xuLy8gXHRcdFx0cmV0dXJuIHN0ZXAuc3RlcF90eXBlID09ICdzdGFydCc7XG4vLyBcdFx0fSlcblxuLy8gXHRcdC8vIOa1geeoi+i9rOWPkeWKn+iDveS/ruaUueS4uu+8jOW8gOWni+iKgueCueaciee8lui+keadg+mZkOeahOWtl+auteeahOWAvOi/m+ihjOWkjeWItu+8jOaXoOe8lui+keadg+mZkOeahOWtl+auteWAvOS4jei/m+ihjOWkjeWItiAjMzc0OFxuLy8gXHRcdGlmIChhY3Rpb25fdHlwZSA9PT0gJ2ZvcndhcmQnKSB7XG4vLyBcdFx0XHRuZXdfdmFsdWVzID0gdXVmbG93TWFuYWdlci5nZXRBcHByb3ZlVmFsdWVzKG5ld192YWx1ZXMsIHN0YXJ0X3N0ZXAucGVybWlzc2lvbnMsIGZsb3cuZm9ybSwgZmxvdy5jdXJyZW50LmZvcm1fdmVyc2lvbik7XG4vLyBcdFx0fVxuXG4vLyBcdFx0Ly8g5paw5bu655Sz6K+35Y2V5pe277yMaW5zdGFuY2Vz6K6w5b2V5rWB56iL5ZCN56ew44CB5rWB56iL5YiG57G75ZCN56ewICMxMzEzXG4vLyBcdFx0dmFyIGNhdGVnb3J5X25hbWUgPSBcIlwiO1xuLy8gXHRcdGlmIChmb3JtLmNhdGVnb3J5KSB7XG4vLyBcdFx0XHR2YXIgY2F0ZWdvcnkgPSB1dWZsb3dNYW5hZ2VyLmdldENhdGVnb3J5KGZvcm0uY2F0ZWdvcnkpO1xuLy8gXHRcdFx0aWYgKGNhdGVnb3J5KVxuLy8gXHRcdFx0XHRjYXRlZ29yeV9uYW1lID0gY2F0ZWdvcnkubmFtZTtcbi8vIFx0XHR9XG5cbi8vIFx0XHRfLmVhY2goZm9yd2FyZF91c2VycywgZnVuY3Rpb24gKHVzZXJfaWQpIHtcblxuLy8gXHRcdFx0dmFyIHVzZXJfaW5mbyA9IGRiLnVzZXJzLmZpbmRPbmUodXNlcl9pZCk7XG5cbi8vIFx0XHRcdHZhciBzcGFjZV91c2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7XG4vLyBcdFx0XHRcdHNwYWNlOiBzcGFjZV9pZCxcbi8vIFx0XHRcdFx0dXNlcjogdXNlcl9pZFxuLy8gXHRcdFx0fSwge1xuLy8gXHRcdFx0XHRmaWVsZHM6IHtcbi8vIFx0XHRcdFx0XHRvcmdhbml6YXRpb246IDFcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fSk7XG4vLyBcdFx0XHR2YXIgc3BhY2VfdXNlcl9vcmdfaW5mbyA9IGRiLm9yZ2FuaXphdGlvbnMuZmluZE9uZSh7XG4vLyBcdFx0XHRcdF9pZDogc3BhY2VfdXNlci5vcmdhbml6YXRpb25cbi8vIFx0XHRcdH0sIHtcbi8vIFx0XHRcdFx0ZmllbGRzOiB7XG4vLyBcdFx0XHRcdFx0bmFtZTogMSxcbi8vIFx0XHRcdFx0XHRmdWxsbmFtZTogMVxuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHR9KTtcblxuLy8gXHRcdFx0dmFyIG5vdyA9IG5ldyBEYXRlKCk7XG4vLyBcdFx0XHR2YXIgaW5zX29iaiA9IHt9O1xuXG4vLyBcdFx0XHR2YXIgYWdlbnQgPSB1dWZsb3dNYW5hZ2VyLmdldEFnZW50KHNwYWNlX2lkLCB1c2VyX2lkKTtcbi8vIFx0XHRcdHZhciBoYW5kbGVyX2lkID0gdXNlcl9pZDtcbi8vIFx0XHRcdHZhciBoYW5kbGVyX2luZm8gPSB1c2VyX2luZm87XG4vLyBcdFx0XHR2YXIgaGFuZGxlcl9zcGFjZV91c2VyID0gc3BhY2VfdXNlcjtcbi8vIFx0XHRcdHZhciBoYW5kbGVyX29yZ19pbmZvID0gc3BhY2VfdXNlcl9vcmdfaW5mbztcbi8vIFx0XHRcdGlmIChhZ2VudCkge1xuLy8gXHRcdFx0XHRoYW5kbGVyX2lkID0gYWdlbnQ7XG4vLyBcdFx0XHRcdGhhbmRsZXJfaW5mbyA9IGRiLnVzZXJzLmZpbmRPbmUoYWdlbnQpO1xuLy8gXHRcdFx0XHRoYW5kbGVyX3NwYWNlX3VzZXIgPSB1dWZsb3dNYW5hZ2VyLmdldFNwYWNlVXNlcihzcGFjZV9pZCwgYWdlbnQpO1xuLy8gXHRcdFx0XHRoYW5kbGVyX29yZ19pbmZvID0gdXVmbG93TWFuYWdlci5nZXRTcGFjZVVzZXJPcmdJbmZvKGhhbmRsZXJfc3BhY2VfdXNlcik7XG4vLyBcdFx0XHR9XG4vLyBcdFx0XHRpbnNfb2JqLl9pZCA9IGRiLmluc3RhbmNlcy5fbWFrZU5ld0lEKCk7XG4vLyBcdFx0XHRpbnNfb2JqLnNwYWNlID0gc3BhY2VfaWQ7XG4vLyBcdFx0XHRpbnNfb2JqLmZsb3cgPSBmbG93X2lkO1xuLy8gXHRcdFx0aW5zX29iai5mbG93X3ZlcnNpb24gPSBmbG93LmN1cnJlbnQuX2lkO1xuLy8gXHRcdFx0aW5zX29iai5mb3JtID0gZmxvdy5mb3JtO1xuLy8gXHRcdFx0aW5zX29iai5mb3JtX3ZlcnNpb24gPSBmbG93LmN1cnJlbnQuZm9ybV92ZXJzaW9uO1xuLy8gXHRcdFx0aW5zX29iai5uYW1lID0gaW5zdGFuY2VfbmFtZTtcbi8vIFx0XHRcdGluc19vYmouc3VibWl0dGVyID0gaGFuZGxlcl9pZDtcbi8vIFx0XHRcdGluc19vYmouc3VibWl0dGVyX25hbWUgPSBoYW5kbGVyX2luZm8ubmFtZTtcbi8vIFx0XHRcdGluc19vYmouYXBwbGljYW50ID0gdXNlcl9pZDtcbi8vIFx0XHRcdGluc19vYmouYXBwbGljYW50X25hbWUgPSB1c2VyX2luZm8ubmFtZTtcbi8vIFx0XHRcdGluc19vYmouYXBwbGljYW50X29yZ2FuaXphdGlvbiA9IHNwYWNlX3VzZXIub3JnYW5pemF0aW9uO1xuLy8gXHRcdFx0aW5zX29iai5hcHBsaWNhbnRfb3JnYW5pemF0aW9uX25hbWUgPSBzcGFjZV91c2VyX29yZ19pbmZvLm5hbWU7XG4vLyBcdFx0XHRpbnNfb2JqLmFwcGxpY2FudF9vcmdhbml6YXRpb25fZnVsbG5hbWUgPSBzcGFjZV91c2VyX29yZ19pbmZvLmZ1bGxuYW1lO1xuLy8gXHRcdFx0aW5zX29iai5zdGF0ZSA9IFwiZHJhZnRcIjtcbi8vIFx0XHRcdGluc19vYmouY29kZSA9IFwiXCI7XG4vLyBcdFx0XHRpbnNfb2JqLmlzX2FyY2hpdmVkID0gZmFsc2U7XG4vLyBcdFx0XHRpbnNfb2JqLmlzX2RlbGV0ZWQgPSBmYWxzZTtcbi8vIFx0XHRcdGluc19vYmouY3JlYXRlZCA9IG5vdztcbi8vIFx0XHRcdGluc19vYmouY3JlYXRlZF9ieSA9IGN1cnJlbnRfdXNlcl9pZDtcbi8vIFx0XHRcdGluc19vYmoubW9kaWZpZWQgPSBub3c7XG4vLyBcdFx0XHRpbnNfb2JqLm1vZGlmaWVkX2J5ID0gY3VycmVudF91c2VyX2lkO1xuLy8gXHRcdFx0aW5zX29iai5pbmJveF91c2VycyA9IFtoYW5kbGVyX2lkXTtcbi8vIFx0XHRcdGluc19vYmoudmFsdWVzID0gbmV3X3ZhbHVlcztcbi8vIFx0XHRcdGlmIChhY3Rpb25fdHlwZSA9PSAnZGlzdHJpYnV0ZScpIHtcbi8vIFx0XHRcdFx0Ly8g6Kej5Yaz5aSa5qyh5YiG5Y+R55yL5LiN5Yiw5q2j5paH44CB6ZmE5Lu26Zeu6aKYXG4vLyBcdFx0XHRcdGlmIChpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlKSB7XG4vLyBcdFx0XHRcdFx0aW5zX29iai5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UgPSBpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlO1xuLy8gXHRcdFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0XHRcdGluc19vYmouZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlID0gaW5zdGFuY2VfaWQ7XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdFx0aW5zX29iai5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzID0gXy5jbG9uZShpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcykgfHwgW107XG4vLyBcdFx0XHRcdGluc19vYmouZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcy5wdXNoKGluc3RhbmNlX2lkKTtcblxuLy8gXHRcdFx0XHRpZiAocmVsYXRlZCkge1xuLy8gXHRcdFx0XHRcdGluc19vYmoucmVsYXRlZF9pbnN0YW5jZXMgPSBbaW5zdGFuY2VfaWRdXG4vLyBcdFx0XHRcdH1cblxuLy8gXHRcdFx0fSBlbHNlIGlmIChhY3Rpb25fdHlwZSA9PSAnZm9yd2FyZCcpIHtcbi8vIFx0XHRcdFx0aW5zX29iai5mb3J3YXJkX2Zyb21faW5zdGFuY2UgPSBpbnN0YW5jZV9pZFxuLy8gXHRcdFx0fVxuXG4vLyBcdFx0XHQvLyDmlrDlu7pUcmFjZVxuLy8gXHRcdFx0dmFyIHRyYWNlX29iaiA9IHt9O1xuLy8gXHRcdFx0dHJhY2Vfb2JqLl9pZCA9IG5ldyBNb25nby5PYmplY3RJRCgpLl9zdHI7XG4vLyBcdFx0XHR0cmFjZV9vYmouaW5zdGFuY2UgPSBpbnNfb2JqLl9pZDtcbi8vIFx0XHRcdHRyYWNlX29iai5pc19maW5pc2hlZCA9IGZhbHNlO1xuXG4vLyBcdFx0XHQvLyDlvZPliY3mnIDmlrDniYhmbG935Lit5byA5aeL6IqC54K555qEc3RlcF9pZFxuLy8gXHRcdFx0dmFyIHN0ZXBfaWQsIHN0ZXBfbmFtZSwgY2FuX2VkaXRfbWFpbl9hdHRhY2gsIGNhbl9lZGl0X25vcm1hbF9hdHRhY2g7XG4vLyBcdFx0XHRmbG93LmN1cnJlbnQuc3RlcHMuZm9yRWFjaChmdW5jdGlvbiAoc3RlcCkge1xuLy8gXHRcdFx0XHRpZiAoc3RlcC5zdGVwX3R5cGUgPT0gXCJzdGFydFwiKSB7XG4vLyBcdFx0XHRcdFx0c3RlcF9pZCA9IHN0ZXAuX2lkO1xuLy8gXHRcdFx0XHRcdHN0ZXBfbmFtZSA9IHN0ZXAubmFtZTtcbi8vIFx0XHRcdFx0XHRjYW5fZWRpdF9tYWluX2F0dGFjaCA9IHN0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2g7XG4vLyBcdFx0XHRcdFx0Y2FuX2VkaXRfbm9ybWFsX2F0dGFjaCA9IHN0ZXAuY2FuX2VkaXRfbm9ybWFsX2F0dGFjaDtcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fSlcbi8vIFx0XHRcdHRyYWNlX29iai5zdGVwID0gc3RlcF9pZDtcbi8vIFx0XHRcdHRyYWNlX29iai5zdGFydF9kYXRlID0gbm93O1xuLy8gXHRcdFx0dHJhY2Vfb2JqLm5hbWUgPSBzdGVwX25hbWU7XG5cbi8vIFx0XHRcdC8vIOaWsOW7ukFwcHJvdmVcbi8vIFx0XHRcdHZhciBhcHByX29iaiA9IHt9O1xuLy8gXHRcdFx0YXBwcl9vYmouX2lkID0gbmV3IE1vbmdvLk9iamVjdElEKCkuX3N0cjtcbi8vIFx0XHRcdGFwcHJfb2JqLmluc3RhbmNlID0gaW5zX29iai5faWQ7XG4vLyBcdFx0XHRhcHByX29iai50cmFjZSA9IHRyYWNlX29iai5faWQ7XG4vLyBcdFx0XHRhcHByX29iai5pc19maW5pc2hlZCA9IGZhbHNlO1xuLy8gXHRcdFx0YXBwcl9vYmoudXNlciA9IHVzZXJfaWQ7XG4vLyBcdFx0XHRhcHByX29iai51c2VyX25hbWUgPSB1c2VyX2luZm8ubmFtZTtcbi8vIFx0XHRcdGFwcHJfb2JqLmhhbmRsZXIgPSBoYW5kbGVyX2lkO1xuLy8gXHRcdFx0YXBwcl9vYmouaGFuZGxlcl9uYW1lID0gaGFuZGxlcl9pbmZvLm5hbWU7XG4vLyBcdFx0XHRhcHByX29iai5oYW5kbGVyX29yZ2FuaXphdGlvbiA9IGhhbmRsZXJfc3BhY2VfdXNlci5vcmdhbml6YXRpb247XG4vLyBcdFx0XHRhcHByX29iai5oYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lID0gaGFuZGxlcl9vcmdfaW5mby5uYW1lO1xuLy8gXHRcdFx0YXBwcl9vYmouaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWUgPSBoYW5kbGVyX29yZ19pbmZvLmZ1bGxuYW1lO1xuLy8gXHRcdFx0YXBwcl9vYmoudHlwZSA9IFwiZHJhZnRcIjtcbi8vIFx0XHRcdGFwcHJfb2JqLnN0YXJ0X2RhdGUgPSBub3c7XG4vLyBcdFx0XHRhcHByX29iai5yZWFkX2RhdGUgPSBub3c7XG4vLyBcdFx0XHRhcHByX29iai5pc19yZWFkID0gZmFsc2U7XG4vLyBcdFx0XHRhcHByX29iai5pc19lcnJvciA9IGZhbHNlO1xuXG4vLyBcdFx0XHRhcHByX29iai52YWx1ZXMgPSBuZXdfdmFsdWVzO1xuXG4vLyBcdFx0XHRpZiAoYWdlbnQpIHtcbi8vIFx0XHRcdFx0YXBwcl9vYmouYWdlbnQgPSBhZ2VudDtcbi8vIFx0XHRcdH1cblxuLy8gXHRcdFx0dHJhY2Vfb2JqLmFwcHJvdmVzID0gW2FwcHJfb2JqXTtcbi8vIFx0XHRcdGluc19vYmoudHJhY2VzID0gW3RyYWNlX29ial07XG5cbi8vIFx0XHRcdGlmIChmbG93LmF1dG9fcmVtaW5kID09IHRydWUpXG4vLyBcdFx0XHRcdGluc19vYmouYXV0b19yZW1pbmQgPSB0cnVlO1xuXG4vLyBcdFx0XHRpbnNfb2JqLmN1cnJlbnRfc3RlcF9uYW1lID0gc3RhcnRfc3RlcC5uYW1lO1xuXG4vLyBcdFx0XHRpbnNfb2JqLmZsb3dfbmFtZSA9IGZsb3cubmFtZTtcbi8vIFx0XHRcdGlmIChjYXRlZ29yeV9uYW1lKSB7XG4vLyBcdFx0XHRcdGluc19vYmouY2F0ZWdvcnlfbmFtZSA9IGNhdGVnb3J5Lm5hbWU7XG4vLyBcdFx0XHRcdGluc19vYmouY2F0ZWdvcnkgPSBjYXRlZ29yeS5faWQ7XG4vLyBcdFx0XHR9XG5cbi8vIFx0XHRcdG5ld19pbnNfaWQgPSBkYi5pbnN0YW5jZXMuaW5zZXJ0KGluc19vYmopO1xuXG4vLyBcdFx0XHQvLyDlpI3liLbpmYTku7Zcbi8vIFx0XHRcdHZhciBjb2xsZWN0aW9uID0gY2ZzLmluc3RhbmNlcztcblxuLy8gXHRcdFx0Ly/lsIbljp/ooajljZXlhoXlrrnlrZjlgqjkuLrnrKzkuIDkuKrpmYTku7Zcbi8vIFx0XHRcdGlmIChoYXNTYXZlSW5zdGFuY2VUb0F0dGFjaG1lbnQpIHtcbi8vIFx0XHRcdFx0Ly8gdHJ5IHtcblxuLy8gXHRcdFx0XHRpbnN0YW5jZUh0bWwgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sKHVzZXJfaW5mbywgc3BhY2VfaWQsIGlucywge1xuLy8gXHRcdFx0XHRcdGFic29sdXRlOiB0cnVlLFxuLy8gXHRcdFx0XHRcdHNob3dUcmFjZTogdHJ1ZVxuLy8gXHRcdFx0XHR9KVxuLy8gXHRcdFx0XHR2YXIgaW5zdGFuY2VGaWxlID0gbmV3IEZTLkZpbGUoKTtcbi8vIFx0XHRcdFx0aW5zdGFuY2VGaWxlLmF0dGFjaERhdGEoQnVmZmVyLmZyb20oaW5zdGFuY2VIdG1sLCBcInV0Zi04XCIpLCB7XG4vLyBcdFx0XHRcdFx0dHlwZTogXCJ0ZXh0L2h0bWxcIlxuLy8gXHRcdFx0XHR9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbi8vIFx0XHRcdFx0XHRpZiAoZXJyb3IpIHtcbi8vIFx0XHRcdFx0XHRcdHRocm93IG5ldyBNZXRlb3IuRXJyb3IoZXJyb3IuZXJyb3IsIGVycm9yLnJlYXNvbik7XG4vLyBcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0aW5zdGFuY2VGaWxlLm5hbWUoaW5zLm5hbWUgKyBcIi5odG1sXCIpO1xuLy8gXHRcdFx0XHRcdGluc3RhbmNlRmlsZS5zaXplKGluc3RhbmNlSHRtbC5sZW5ndGgpO1xuXG4vLyBcdFx0XHRcdFx0dmFyIG1ldGFkYXRhID0ge1xuLy8gXHRcdFx0XHRcdFx0b3duZXI6IHVzZXJfaWQsXG4vLyBcdFx0XHRcdFx0XHRvd25lcl9uYW1lOiB1c2VyX2luZm8ubmFtZSxcbi8vIFx0XHRcdFx0XHRcdHNwYWNlOiBzcGFjZV9pZCxcbi8vIFx0XHRcdFx0XHRcdGluc3RhbmNlOiBuZXdfaW5zX2lkLFxuLy8gXHRcdFx0XHRcdFx0YXBwcm92ZTogYXBwcl9vYmouX2lkLFxuLy8gXHRcdFx0XHRcdFx0Y3VycmVudDogdHJ1ZVxuLy8gXHRcdFx0XHRcdH07XG4vLyBcdFx0XHRcdFx0aW5zdGFuY2VGaWxlLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4vLyBcdFx0XHRcdFx0dmFyIGZpbGVPYmogPSBjb2xsZWN0aW9uLmluc2VydChpbnN0YW5jZUZpbGUpO1xuLy8gXHRcdFx0XHRcdGZpbGVPYmoudXBkYXRlKHtcbi8vIFx0XHRcdFx0XHRcdCRzZXQ6IHtcbi8vIFx0XHRcdFx0XHRcdFx0J21ldGFkYXRhLnBhcmVudCc6IGZpbGVPYmouX2lkXG4vLyBcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0fSlcbi8vIFx0XHRcdFx0fSlcblxuLy8gXHRcdFx0XHQvLyB9IGNhdGNoIChlKSB7XG4vLyBcdFx0XHRcdC8vICAgICBjb25zb2xlLmVycm9yKGUpO1xuLy8gXHRcdFx0XHQvLyB9XG4vLyBcdFx0XHR9XG5cbi8vIFx0XHRcdGlmIChpc0ZvcndhcmRBdHRhY2htZW50cyAmJiBhY3Rpb25fdHlwZSA9PSAnZm9yd2FyZCcpIHtcbi8vIFx0XHRcdFx0dmFyIGZpbGVzID0gY29sbGVjdGlvbi5maW5kKHtcbi8vIFx0XHRcdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiBpbnN0YW5jZV9pZCxcbi8vIFx0XHRcdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWVcbi8vIFx0XHRcdFx0fSk7XG4vLyBcdFx0XHRcdGZpbGVzLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbi8vIFx0XHRcdFx0XHQvLyDliKTmlq3mlrDnmoTmtYHnqIvlvIDlp4voioLngrnmmK/lkKbmnInnvJbovpHmraPmloflkoznvJbovpHpmYTku7bmnYPpmZBcbi8vIFx0XHRcdFx0XHRpZiAoZi5tZXRhZGF0YS5tYWluID09IHRydWUpIHtcbi8vIFx0XHRcdFx0XHRcdGlmIChjYW5fZWRpdF9tYWluX2F0dGFjaCAhPSB0cnVlICYmIGNhbl9lZGl0X25vcm1hbF9hdHRhY2ggIT0gdHJ1ZSlcbi8vIFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuLy8gXHRcdFx0XHRcdH0gZWxzZSB7XG4vLyBcdFx0XHRcdFx0XHRpZiAoY2FuX2VkaXRfbm9ybWFsX2F0dGFjaCAhPSB0cnVlKVxuLy8gXHRcdFx0XHRcdFx0XHRyZXR1cm47XG4vLyBcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0dmFyIG5ld0ZpbGUgPSBuZXcgRlMuRmlsZSgpO1xuLy8gXHRcdFx0XHRcdG5ld0ZpbGUuYXR0YWNoRGF0YShmLmNyZWF0ZVJlYWRTdHJlYW0oJ2luc3RhbmNlcycpLCB7XG4vLyBcdFx0XHRcdFx0XHR0eXBlOiBmLm9yaWdpbmFsLnR5cGVcbi8vIFx0XHRcdFx0XHR9LCBmdW5jdGlvbiAoZXJyKSB7XG4vLyBcdFx0XHRcdFx0XHRpZiAoZXJyKSB7XG4vLyBcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBNZXRlb3IuRXJyb3IoZXJyLmVycm9yLCBlcnIucmVhc29uKTtcbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdG5ld0ZpbGUubmFtZShmLm5hbWUoKSk7XG4vLyBcdFx0XHRcdFx0XHRuZXdGaWxlLnNpemUoZi5zaXplKCkpO1xuLy8gXHRcdFx0XHRcdFx0dmFyIG1ldGFkYXRhID0ge1xuLy8gXHRcdFx0XHRcdFx0XHRvd25lcjogdXNlcl9pZCxcbi8vIFx0XHRcdFx0XHRcdFx0b3duZXJfbmFtZTogdXNlcl9pbmZvLm5hbWUsXG4vLyBcdFx0XHRcdFx0XHRcdHNwYWNlOiBzcGFjZV9pZCxcbi8vIFx0XHRcdFx0XHRcdFx0aW5zdGFuY2U6IG5ld19pbnNfaWQsXG4vLyBcdFx0XHRcdFx0XHRcdGFwcHJvdmU6IGFwcHJfb2JqLl9pZCxcbi8vIFx0XHRcdFx0XHRcdFx0Y3VycmVudDogdHJ1ZVxuLy8gXHRcdFx0XHRcdFx0fTtcbi8vIFx0XHRcdFx0XHRcdGlmIChmLm1ldGFkYXRhLm1haW4gPT0gdHJ1ZSAmJiBjYW5fZWRpdF9tYWluX2F0dGFjaCA9PSB0cnVlKSB7XG4vLyBcdFx0XHRcdFx0XHRcdG1ldGFkYXRhLm1haW4gPSB0cnVlO1xuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0bmV3RmlsZS5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuLy8gXHRcdFx0XHRcdFx0dmFyIGZpbGVPYmogPSBjb2xsZWN0aW9uLmluc2VydChuZXdGaWxlKTtcbi8vIFx0XHRcdFx0XHRcdGZpbGVPYmoudXBkYXRlKHtcbi8vIFx0XHRcdFx0XHRcdFx0JHNldDoge1xuLy8gXHRcdFx0XHRcdFx0XHRcdCdtZXRhZGF0YS5wYXJlbnQnOiBmaWxlT2JqLl9pZFxuLy8gXHRcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0XHR9KVxuLy8gXHRcdFx0XHRcdH0pXG5cbi8vIFx0XHRcdFx0fSlcbi8vIFx0XHRcdH1cblxuLy8gXHRcdFx0aWYgKGFjdGlvbl90eXBlID09PSAnZGlzdHJpYnV0ZScpIHtcbi8vIFx0XHRcdFx0Ly8g57uZ5b2T5YmN55qE55Sz6K+35Y2V5aKe5Yqg5YiG5Y+R6K6w5b2VXG4vLyBcdFx0XHRcdHZhciBhcHByID0ge1xuLy8gXHRcdFx0XHRcdCdfaWQnOiBuZXcgTW9uZ28uT2JqZWN0SUQoKS5fc3RyLFxuLy8gXHRcdFx0XHRcdCdpbnN0YW5jZSc6IGluc3RhbmNlX2lkLFxuLy8gXHRcdFx0XHRcdCd0cmFjZSc6IGN1cnJlbnRfdHJhY2VfaWQsXG4vLyBcdFx0XHRcdFx0J2lzX2ZpbmlzaGVkJzogdHJ1ZSxcbi8vIFx0XHRcdFx0XHQndXNlcic6IHVzZXJfaWQsXG4vLyBcdFx0XHRcdFx0J3VzZXJfbmFtZSc6IHVzZXJfaW5mby5uYW1lLFxuLy8gXHRcdFx0XHRcdCdoYW5kbGVyJzogdXNlcl9pZCxcbi8vIFx0XHRcdFx0XHQnaGFuZGxlcl9uYW1lJzogdXNlcl9pbmZvLm5hbWUsXG4vLyBcdFx0XHRcdFx0J2hhbmRsZXJfb3JnYW5pemF0aW9uJzogc3BhY2VfdXNlci5vcmdhbml6YXRpb24sXG4vLyBcdFx0XHRcdFx0J2hhbmRsZXJfb3JnYW5pemF0aW9uX25hbWUnOiBzcGFjZV91c2VyX29yZ19pbmZvLm5hbWUsXG4vLyBcdFx0XHRcdFx0J2hhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lJzogc3BhY2VfdXNlcl9vcmdfaW5mby5mdWxsbmFtZSxcbi8vIFx0XHRcdFx0XHQndHlwZSc6IGFjdGlvbl90eXBlLFxuLy8gXHRcdFx0XHRcdCdzdGFydF9kYXRlJzogbmV3IERhdGUoKSxcbi8vIFx0XHRcdFx0XHQnZmluaXNoX2RhdGUnOiBuZXcgRGF0ZSgpLFxuLy8gXHRcdFx0XHRcdCdpc19yZWFkJzogZmFsc2UsXG4vLyBcdFx0XHRcdFx0J2p1ZGdlJzogJ3N1Ym1pdHRlZCcsXG4vLyBcdFx0XHRcdFx0J2Zyb21fdXNlcic6IGN1cnJlbnRfdXNlcl9pZCxcbi8vIFx0XHRcdFx0XHQnZnJvbV91c2VyX25hbWUnOiBmcm9tX3VzZXJfbmFtZSxcbi8vIFx0XHRcdFx0XHQnZm9yd2FyZF9zcGFjZSc6IHNwYWNlX2lkLFxuLy8gXHRcdFx0XHRcdCdmb3J3YXJkX2luc3RhbmNlJzogbmV3X2luc19pZCxcbi8vIFx0XHRcdFx0XHQnZGVzY3JpcHRpb24nOiBkZXNjcmlwdGlvbixcbi8vIFx0XHRcdFx0XHQnZnJvbV9hcHByb3ZlX2lkJzogZnJvbV9hcHByb3ZlX2lkXG4vLyBcdFx0XHRcdH07XG5cbi8vIFx0XHRcdFx0Zm9yd2FyZF9hcHByb3Zlcy5wdXNoKGFwcHIpO1xuLy8gXHRcdFx0fVxuXG4vLyBcdFx0XHRuZXdfaW5zX2lkcy5wdXNoKG5ld19pbnNfaWQpO1xuLy8gXHRcdFx0cHVzaE1hbmFnZXIuc2VuZF9tZXNzYWdlX3RvX3NwZWNpZnlVc2VyKFwiY3VycmVudF91c2VyXCIsIHVzZXJfaWQpO1xuLy8gXHRcdH0pXG5cbi8vIFx0XHRpZiAoIV8uaXNFbXB0eShmb3J3YXJkX2FwcHJvdmVzKSkge1xuLy8gXHRcdFx0c2V0X29iai5tb2RpZmllZCA9IG5ldyBEYXRlKCk7XG4vLyBcdFx0XHRzZXRfb2JqLm1vZGlmaWVkX2J5ID0gY3VycmVudF91c2VyX2lkO1xuLy8gXHRcdFx0dmFyIHIgPSBkYi5pbnN0YW5jZXMudXBkYXRlKHtcbi8vIFx0XHRcdFx0X2lkOiBpbnN0YW5jZV9pZCxcbi8vIFx0XHRcdFx0XCJ0cmFjZXMuX2lkXCI6IGN1cnJlbnRfdHJhY2VfaWRcbi8vIFx0XHRcdH0sIHtcbi8vIFx0XHRcdFx0JHNldDogc2V0X29iaixcbi8vIFx0XHRcdFx0JGFkZFRvU2V0OiB7XG4vLyBcdFx0XHRcdFx0J3RyYWNlcy4kLmFwcHJvdmVzJzoge1xuLy8gXHRcdFx0XHRcdFx0JGVhY2g6IGZvcndhcmRfYXBwcm92ZXNcbi8vIFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pO1xuLy8gXHRcdH1cblxuXG4vLyBcdFx0aWYgKHIpIHtcbi8vIFx0XHRcdF8uZWFjaChjdXJyZW50X3RyYWNlLmFwcHJvdmVzLCBmdW5jdGlvbiAoYSwgaWR4KSB7XG4vLyBcdFx0XHRcdGlmIChhLl9pZCA9PSBmcm9tX2FwcHJvdmVfaWQpIHtcbi8vIFx0XHRcdFx0XHR2YXIgdXBkYXRlX3JlYWQgPSB7fTtcbi8vIFx0XHRcdFx0XHR1cGRhdGVfcmVhZFtcInRyYWNlcy4kLmFwcHJvdmVzLlwiICsgaWR4ICsgXCIucmVhZF9kYXRlXCJdID0gbmV3IERhdGUoKTtcbi8vIFx0XHRcdFx0XHRkYi5pbnN0YW5jZXMudXBkYXRlKHtcbi8vIFx0XHRcdFx0XHRcdF9pZDogaW5zdGFuY2VfaWQsXG4vLyBcdFx0XHRcdFx0XHRcInRyYWNlcy5faWRcIjogY3VycmVudF90cmFjZV9pZFxuLy8gXHRcdFx0XHRcdH0sIHtcbi8vIFx0XHRcdFx0XHRcdCRzZXQ6IHVwZGF0ZV9yZWFkXG4vLyBcdFx0XHRcdFx0fSk7XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pXG5cbi8vIFx0XHR9XG5cbi8vIFx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4vLyBcdFx0XHRjb2RlOiAyMDAsXG4vLyBcdFx0XHRkYXRhOiB7IG5ld19pbnNfaWRzOiBuZXdfaW5zX2lkcyB9XG4vLyBcdFx0fSlcbi8vIFx0fSBjYXRjaCAoZSkge1xuLy8gXHRcdGNvbnNvbGUuZXJyb3IoZS5zdGFjaylcbi8vIFx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4vLyBcdFx0XHRjb2RlOiAyMDAsXG4vLyBcdFx0XHRkYXRhOiB7XG4vLyBcdFx0XHRcdGVycm9yczogW2VdXG4vLyBcdFx0XHR9XG4vLyBcdFx0fSlcbi8vIFx0fVxuXG4vLyB9KSIsImlmIHByb2Nlc3MuZW52LkNSRUFUT1JfTk9ERV9FTlYgPT0gJ2RldmVsb3BtZW50J1xuICAgIEpzb25Sb3V0ZXMuYWRkICdwb3N0JywgJy90ZXN0L3dlYmhvb2snLCAocmVxLCByZXMsIG5leHQpIC0+XG4gICAgICAgIHRyeVxuXG4gICAgICAgICAgICBoYXNoRGF0YSA9IHJlcS5ib2R5XG4gICAgICAgICAgICBjb25zb2xlLmxvZyAnYWN0aW9uOiAnLCBoYXNoRGF0YS5hY3Rpb25cbiAgICAgICAgICAgIGNvbnNvbGUubG9nICdmcm9tX3VzZXI6ICcsIGhhc2hEYXRhLmZyb21fdXNlclxuICAgICAgICAgICAgY29uc29sZS5sb2cgJ3RvX3VzZXJzOiAnLCBoYXNoRGF0YS50b191c2Vyc1xuXG5cbiAgICAgICAgICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IDIwMFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7fVxuICAgICAgICBjYXRjaCBlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yIGUuc3RhY2tcbiAgICAgICAgICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG4gICAgICAgICAgICAgICAgY29kZTogMjAwXG4gICAgICAgICAgICAgICAgZGF0YTogeyBlcnJvcnM6IFt7ZXJyb3JNZXNzYWdlOiBlLm1lc3NhZ2V9XSB9IiwiaWYgKHByb2Nlc3MuZW52LkNSRUFUT1JfTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgSnNvblJvdXRlcy5hZGQoJ3Bvc3QnLCAnL3Rlc3Qvd2ViaG9vaycsIGZ1bmN0aW9uKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgdmFyIGUsIGhhc2hEYXRhO1xuICAgIHRyeSB7XG4gICAgICBoYXNoRGF0YSA9IHJlcS5ib2R5O1xuICAgICAgY29uc29sZS5sb2coJ2FjdGlvbjogJywgaGFzaERhdGEuYWN0aW9uKTtcbiAgICAgIGNvbnNvbGUubG9nKCdmcm9tX3VzZXI6ICcsIGhhc2hEYXRhLmZyb21fdXNlcik7XG4gICAgICBjb25zb2xlLmxvZygndG9fdXNlcnM6ICcsIGhhc2hEYXRhLnRvX3VzZXJzKTtcbiAgICAgIHJldHVybiBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICAgIGNvZGU6IDIwMCxcbiAgICAgICAgZGF0YToge31cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlID0gZXJyb3I7XG4gICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgICAgcmV0dXJuIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgICAgY29kZTogMjAwLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZXJyb3JzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogZS5tZXNzYWdlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdHNldF9pbnN0YW5jZV9zdGVwX2FwcHJvdmU6IChpbnNfaWQsIHN0ZXBfYXBwcm92ZSwgc3RlcHNBcHByb3Zlc09wdGlvbnMpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnNldF9pbnN0YW5jZV9zdGVwX2FwcHJvdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHRzZXRfaW5zdGFuY2Vfc2tpcF9zdGVwczogKGluc19pZCwgc3RlcElkLCBhY3Rpb24pLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnNldF9pbnN0YW5jZV9za2lwX3N0ZXBzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykiLCIvKlxuICogQEF1dGhvcjogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQERhdGU6IDIwMjEtMDUtMjQgMTI6MzI6NTZcbiAqIEBMYXN0RWRpdG9yczogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyMi0xMi0yMiAxNToxODo1OVxuICogQERlc2NyaXB0aW9uOiBcbiAqL1xuY29uc3QgeyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzKHtcblxuXHRnZXRfaW5zdGFuY2VfZGF0YTogZnVuY3Rpb24gKGluc3RhbmNlX2lkLCBmb3JtQ2FjaGVkLCBmbG93Q2FjaGVkKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5nZXRfaW5zdGFuY2VfZGF0YS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH1cblxufSk7XG4iLCJjb25zdCB7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHMoe1xuXG5cdGRyYWZ0X3NhdmVfaW5zdGFuY2U6IGZ1bmN0aW9uIChpbnMpIHtcblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmRyYWZ0X3NhdmVfaW5zdGFuY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9LFxuXG5cdGluYm94X3NhdmVfaW5zdGFuY2U6IGZ1bmN0aW9uIChhcHByb3ZlKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5pbmJveF9zYXZlX2luc3RhbmNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fVxuXG59KSIsIi8qXG4gKiBAQXV0aG9yOiBzdW5oYW9saW5AaG90b2EuY29tXG4gKiBARGF0ZTogMjAyMy0wMS0xMyAxNzozNToxM1xuICogQExhc3RFZGl0b3JzOiBzdW5oYW9saW5AaG90b2EuY29tXG4gKiBATGFzdEVkaXRUaW1lOiAyMDIzLTAzLTExIDEwOjUxOjI5XG4gKiBARGVzY3JpcHRpb246IFxuICovXG5jb25zdCB7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHMoe1xuXHRjY19kbzogZnVuY3Rpb24gKGFwcHJvdmUsIGNjX3VzZXJfaWRzLCBkZXNjcmlwdGlvbikge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2NfZG8uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9LFxuXG5cdGNjX3JlYWQ6IGZ1bmN0aW9uIChhcHByb3ZlKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jY19yZWFkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fSxcblxuXHRjY19zdWJtaXQ6IGZ1bmN0aW9uIChpbnNfaWQsIGRlc2NyaXB0aW9uLCBteUFwcHJvdmUsIGNjSGFzRWRpdFBlcm1pc3Npb24pIHtcblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNjX3N1Ym1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH0sXG5cblx0Y2NfcmVtb3ZlOiBmdW5jdGlvbiAoaW5zdGFuY2VJZCwgYXBwcm92ZUlkKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jY19yZW1vdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9LFxuXG5cdGJhdGNoX2NhbmNlbF9jYzogZnVuY3Rpb24gKGluc3RhbmNlX2lkLCBhcHByb3ZlX2lkcykge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuYmF0Y2hfY2FuY2VsX2NjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fSxcblxuXHRjY19zYXZlOiBmdW5jdGlvbiAoaW5zX2lkLCBkZXNjcmlwdGlvbiwgbXlBcHByb3ZlLCBjY0hhc0VkaXRQZXJtaXNzaW9uKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jY19zYXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fVxufSkiLCIvKlxuICogQEF1dGhvcjogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQERhdGU6IDIwMjEtMDUtMjQgMTI6MzI6NTZcbiAqIEBMYXN0RWRpdG9yczogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyMi0xMi0yMiAxNToxODozOFxuICogQERlc2NyaXB0aW9uOiBcbiAqL1xuY29uc3QgeyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzKHtcblx0Ly8g5pS55Li66YCa6L+HYXBp6LCD55SoXG5cdGZvcndhcmRfaW5zdGFuY2U6IGZ1bmN0aW9uIChpbnN0YW5jZV9pZCwgc3BhY2VfaWQsIGZsb3dfaWQsIGhhc1NhdmVJbnN0YW5jZVRvQXR0YWNobWVudCwgZGVzY3JpcHRpb24sIGlzRm9yd2FyZEF0dGFjaG1lbnRzLCBzZWxlY3RlZFVzZXJzLCBhY3Rpb25fdHlwZSwgcmVsYXRlZCwgZnJvbV9hcHByb3ZlX2lkKSB7XG5cdFx0aWYgKCF0aGlzLnVzZXJJZClcblx0XHRcdHRocm93IG5ldyBNZXRlb3IuRXJyb3IoJ25vdC1hdXRob3JpemVkJyk7XG5cblx0XHRyZXR1cm47XG5cdH0sXG5cblxuXHRmb3J3YXJkX3JlbW92ZTogZnVuY3Rpb24gKGluc3RhbmNlX2lkLCB0cmFjZV9pZCwgYXBwcm92ZV9pZCkge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuZm9yd2FyZF9yZW1vdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9LFxuXG5cdGNhbmNlbERpc3RyaWJ1dGU6IGZ1bmN0aW9uIChpbnN0YW5jZV9pZCwgYXBwcm92ZV9pZHMpIHtcblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNhbmNlbERpc3RyaWJ1dGUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9XG5cblxufSkiLCIvKlxuICogQEF1dGhvcjogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQERhdGU6IDIwMjEtMDUtMjQgMTI6MzI6NTZcbiAqIEBMYXN0RWRpdG9yczogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyMi0xMi0yMiAxNToxNzo1NFxuICogQERlc2NyaXB0aW9uOiBcbiAqL1xuY29uc3QgeyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzKHtcbiAgICBjZnNfaW5zdGFuY2VzX3JlbW92ZTogZnVuY3Rpb24gKGZpbGVfaWQpIHtcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jZnNfaW5zdGFuY2VzX3JlbW92ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfSxcblxuICAgIGNmc19pbnN0YW5jZXNfc2V0X2N1cnJlbnQ6IGZ1bmN0aW9uIChmaWxlX2lkKSB7XG4gICAgICAgIHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2ZzX2luc3RhbmNlc19zZXRfY3VycmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfSxcblxuICAgIGNmc19pbnN0YW5jZXNfbG9jazogZnVuY3Rpb24gKGZpbGVfaWQsIHVzZXJfaWQsIHVzZXJfbmFtZSkge1xuICAgICAgICByZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNmc19pbnN0YW5jZXNfbG9jay5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfSxcblxuICAgIGNmc19pbnN0YW5jZXNfdW5sb2NrOiBmdW5jdGlvbiAoZmlsZV9pZCkge1xuICAgICAgICByZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNmc19pbnN0YW5jZXNfdW5sb2NrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9LFxuXG4gICAgZG93bmxvYWRfc3BhY2VfaW5zdGFuY2VfYXR0YWNobWVudHNfdG9fZGlzazogZnVuY3Rpb24gKHNwYWNlSWQsIGNmc1JlY29yZElkcykge1xuICAgICAgICByZXR1cm4gd29ya2Zsb3dNZXRob2RzLmRvd25sb2FkX3NwYWNlX2luc3RhbmNlX2F0dGFjaG1lbnRzX3RvX2Rpc2suYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH1cbn0pIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdHNldF9hcHByb3ZlX2hhdmVfcmVhZDogKGluc3RhbmNlSWQsIHRyYWNlSWQsIGFwcHJvdmVJZCkgLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnNldF9hcHByb3ZlX2hhdmVfcmVhZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cblx0Y2hhbmdlX2FwcHJvdmVfaW5mbzogKGluc3RhbmNlSWQsIHRyYWNlSWQsIGFwcHJvdmVJZCwgZGVzY3JpcHRpb24sIGZpbmlzaF9kYXRlKSAtPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2hhbmdlX2FwcHJvdmVfaW5mby5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cblx0dXBkYXRlX2FwcHJvdmVfc2lnbjogKGluc3RhbmNlSWQsIHRyYWNlSWQsIGFwcHJvdmVJZCwgc2lnbl9maWVsZF9jb2RlLCBkZXNjcmlwdGlvbiwgc2lnbl90eXBlLCBsYXN0U2lnbkFwcHJvdmUpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnVwZGF0ZV9hcHByb3ZlX3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cblx0dXBkYXRlX3NpZ25fc2hvdzogKG9ianMsIG15QXBwcm92ZV9pZCkgLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnVwZGF0ZV9zaWduX3Nob3cuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdGluc3RhbmNlX3JldHVybjogKGFwcHJvdmUsIHJlYXNvbiktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuaW5zdGFuY2VfcmV0dXJuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykiLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblx0aW5zdGFuY2VfcmVtaW5kOiAocmVtaW5kX3VzZXJzLCByZW1pbmRfY291bnQsIHJlbWluZF9kZWFkbGluZSwgaW5zdGFuY2VfaWQsIGFjdGlvbl90eXBlcywgdHJhY2VfaWQpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmluc3RhbmNlX3JlbWluZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4iLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblx0bmV4dF9zdGVwX3VzZXJzX25vdF9mb3VuZDogKGRlYWxfdHlwZSwgc3RlcF9uYW1lLCBwYXJhbXMpIC0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5uZXh0X3N0ZXBfdXNlcnNfbm90X2ZvdW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5fZXZhbCA9IHJlcXVpcmUoJ2V2YWwnKVxuXG5NZXRlb3IubWV0aG9kc1xuXHRpbnN0YW5jZU51bWJlckJ1aWxkZXI6IChzcGFjZUlkLCBuYW1lKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5pbnN0YW5jZU51bWJlckJ1aWxkZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdGNoZWNrX21haW5fYXR0YWNoOiAoaW5zX2lkLCBuYW1lKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jaGVja19tYWluX2F0dGFjaC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4iLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblx0cmVtb3ZlX3JlbGF0ZWQ6IChpbnNfaWQsIHJlX2luc19pZCktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMucmVtb3ZlX3JlbGF0ZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cdHVwZGF0ZV9pbnN0YW5jZV9yZWxhdGVkOiAoaW5zX2lkLCByZWxhdGVkX2luc3RhbmNlcyktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMudXBkYXRlX2luc3RhbmNlX3JlbGF0ZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdHVwZGF0ZUZsb3dQb3NpdGlvbjogKGRhdGEpIC0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy51cGRhdGVGbG93UG9zaXRpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cdHVwZGF0ZUZsb3dSb2xlOiAoZGF0YSkgLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnVwZGF0ZUZsb3dSb2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykiLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblx0c3RhcnRfZmxvdzogKHNwYWNlLCBmbG93SWQsIHN0YXJ0KSAtPlxuXG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5zdGFydF9mbG93LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdGdldF9pbnN0YW5jZV90cmFjZXM6IChpbnNfaWQpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmdldF9pbnN0YW5jZV90cmFjZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHQnZ2V0X2JhdGNoX2luc3RhbmNlcyc6IChzcGFjZSwgY2F0ZWdvcnlJZCwgZmxvd0lkcyktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuZ2V0X2JhdGNoX2luc3RhbmNlcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cblx0J2dldF9iYXRjaF9pbnN0YW5jZXNfY291bnQnOiAoc3BhY2UsIGNhdGVnb3J5SWQsIGZsb3dJZHMpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmdldF9iYXRjaF9pbnN0YW5jZXNfY291bnQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cdCdnZXRfbXlfYXBwcm92ZXMnOiAoaW5zdGFuY2VJZHMpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmdldF9teV9hcHByb3Zlcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cblxuXG5cblxuXG5cblxuXG5cblxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdGNoYW5nZV9mbG93X3N0YXRlOiAoZmxvd3MpIC0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jaGFuZ2VfZmxvd19zdGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cblxuXG5cbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXG5cdGhpZGVfaW5zdGFuY2U6IChpbnNJZCwgaXNfaGlkZGVuKSAtPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuaGlkZV9pbnN0YW5jZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4iLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblx0Z2V0SW5zdGFuY2VWYWx1ZXM6IChpbnNJZCktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuZ2V0SW5zdGFuY2VWYWx1ZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSIsIkNvb2tpZXMgPSByZXF1aXJlKFwiY29va2llc1wiKVxuXG5nZXRJbnN0YW5jZVJlYWRPbmx5ID0gKHJlcSwgcmVzLCBuZXh0LCBvcHRpb25zKSAtPlxuXG5cdHVzZXIgPSBTdGVlZG9zLmdldEFQSUxvZ2luVXNlcihyZXEsIHJlcylcblxuXHRpZiByZXE/LnF1ZXJ5Py5hY2Nlc3NfdG9rZW5cblx0XHR1c2VySWQgPSBTdGVlZG9zLmdldFVzZXJJZEZyb21BY2Nlc3NUb2tlbihyZXEucXVlcnkuYWNjZXNzX3Rva2VuKVxuXHRcdGlmIHVzZXJJZFxuXHRcdFx0dXNlciA9IE1ldGVvci51c2Vycy5maW5kT25lKHtfaWQ6IHVzZXJJZH0pXG5cblx0c3BhY2VJZCA9IHJlcS5wYXJhbXMuc3BhY2VcblxuXHRpbnN0YW5jZUlkID0gcmVxLnBhcmFtcy5pbnN0YW5jZV9pZFxuXG5cdGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaW5zdGFuY2VJZH0pO1xuXG5cdHNwYWNlID0gZGIuc3BhY2VzLmZpbmRPbmUoe19pZDogc3BhY2VJZH0pO1xuXG5cdGhpZGVfdHJhY2VzID0gcmVxLnF1ZXJ5Py5oaWRlX3RyYWNlc1xuXG5cdGlmICFvcHRpb25zXG5cdFx0b3B0aW9ucyA9IHtzaG93VHJhY2U6IHRydWV9XG5cdGVsc2Vcblx0XHRvcHRpb25zLnNob3dUcmFjZSA9IHRydWVcblxuXHRpZiBoaWRlX3RyYWNlcyBpcyBcIjFcIlxuXHRcdGlmIG9wdGlvbnNcblx0XHRcdG9wdGlvbnMuc2hvd1RyYWNlID0gZmFsc2Vcblx0XHRlbHNlXG5cdFx0XHRvcHRpb25zID0ge3Nob3dUcmFjZTogZmFsc2V9XG5cblx0aWYgIW9wdGlvbnMuc2hvd0F0dGFjaG1lbnRzXG5cdFx0b3B0aW9ucy5zaG93QXR0YWNobWVudHMgPSB0cnVlXG5cblx0aWYgIXNwYWNlXG5cdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdGRhdGE6XG5cdFx0XHRcdFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3Npbmcgc3BhY2VcIixcblx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0cmV0dXJuO1xuXG5cdGlmICAhaW5zdGFuY2Vcblx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0Y29kZTogNDAxLFxuXHRcdFx0ZGF0YTpcblx0XHRcdFx0XCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBpbnN0YW5jZVwiLFxuXHRcdFx0XHRcInN1Y2Nlc3NcIjogZmFsc2Vcblx0XHRyZXR1cm47XG5cblx0aWYgIXVzZXJcblx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0Y29kZTogNDAxLFxuXHRcdFx0ZGF0YTpcblx0XHRcdFx0XCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBYLUF1dGgtVG9rZW4sWC1Vc2VyLUlkXCIsXG5cdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdHJldHVybjtcblxuXHRpZiBpbnN0YW5jZS5zcGFjZSAhPSBzcGFjZUlkXG5cdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdGRhdGE6XG5cdFx0XHRcdFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3Npbmcgc3BhY2Ugb3IgaW5zdGFuY2VcIixcblx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0cmV0dXJuO1xuXG5cblxuXHRzcGFjZVVzZXJDb3VudCA9IGRiLnNwYWNlX3VzZXJzLmZpbmQoeyB1c2VyOiB1c2VyLl9pZCwgc3BhY2U6IHNwYWNlSWQgfSkuY291bnQoKVxuXG5cdGlmIHNwYWNlVXNlckNvdW50IGlzIDBcblx0XHRpZiAhc3BhY2Vcblx0XHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdFx0ZGF0YTpcblx0XHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIHNhcGNlVXNlclwiLFxuXHRcdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdFx0cmV0dXJuO1xuXG5cdCPmoKHpqox1c2Vy5piv5ZCm5a+5aW5zdGFuY2XmnInmn6XnnIvmnYPpmZBcblx0X2hhc1Blcm1pc3Npb24gPSBXb3JrZmxvd01hbmFnZXIuaGFzSW5zdGFuY2VQZXJtaXNzaW9ucyh1c2VyLCBpbnN0YW5jZSlcblxuXHRpZiAhX2hhc1Blcm1pc3Npb24gICYmIGluc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZVxuXHRcdF9wYXJlbnRfaW5zdGFuY2VzID0gXy51bmlvbihbaW5zdGFuY2UuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlXSwgaW5zdGFuY2UuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcyB8fCBbXSlcblxuXHRcdF9oYXNQZXJtaXNzaW9uID0gXy5maW5kIF9wYXJlbnRfaW5zdGFuY2VzLCAoX3BhcmVudF9pZCktPlxuXHRcdFx0X3BhcmVudF9pbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOl9wYXJlbnRfaWR9LCB7ZmllbGRzOiB7dHJhY2VzOiAwfX0pXG5cblx0XHRcdHJldHVybiBXb3JrZmxvd01hbmFnZXIuaGFzSW5zdGFuY2VQZXJtaXNzaW9ucyh1c2VyLCBfcGFyZW50X2lucylcblxuXHRpZiAhX2hhc1Blcm1pc3Npb25cblx0XHRfbG9jYWxlID0gU3RlZWRvcy5sb2NhbGUodXNlci5faWQsIHRydWUpXG5cdFx0ZXJyb3IgPSBUQVBpMThuLl9fKFwiaW5zdGFuY2VfcGVybWlzc2lvbnNfZXJyb3JcIiwge30sIF9sb2NhbGUpXG5cdFx0cmVzLmNoYXJzZXQgPSBcInV0Zi04XCJcblx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0Y29kZTogNDAxLFxuXHRcdFx0ZGF0YTpcblx0XHRcdFx0XCJlcnJvclwiOiBlcnJvcixcblx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0cmV0dXJuO1xuXG5cdGh0bWwgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucylcblx0ZGF0YUJ1ZiA9IG5ldyBCdWZmZXIoaHRtbCk7XG5cdHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnKTtcblx0cmVzLnNldEhlYWRlcignY29udGVudC1sZW5ndGgnLCBkYXRhQnVmLmxlbmd0aClcblx0cmVzLnNldEhlYWRlcignY29udGVudC1yYW5nZScsIFwiYnl0ZXMgMC0je2RhdGFCdWYubGVuZ3RoIC0gMX0vI3tkYXRhQnVmLmxlbmd0aH1cIilcblx0cmVzLnN0YXR1c0NvZGUgPSAyMDBcblx0cmVzLmVuZChodG1sKVxuXG5Kc29uUm91dGVzLmFkZCBcImdldFwiLCBcIi93b3JrZmxvdy9zcGFjZS86c3BhY2Uvdmlldy9yZWFkb25seS86aW5zdGFuY2VfaWRcIiwgZ2V0SW5zdGFuY2VSZWFkT25seVxuXG5Kc29uUm91dGVzLmFkZCBcImdldFwiLCBcIi93b3JrZmxvdy9zcGFjZS86c3BhY2Uvdmlldy9yZWFkb25seS86aW5zdGFuY2VfaWQvOmluc3RhbmNlX25hbWVcIiwgKHJlcSwgcmVzLCBuZXh0KS0+XG5cdHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnKTtcblx0cmVzLnNldEhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50O2ZpbGVuYW1lPScrZW5jb2RlVVJJKHJlcS5wYXJhbXMuaW5zdGFuY2VfbmFtZSkpO1xuXHRyZXMuc2V0SGVhZGVyKCdUcmFuc2Zlci1FbmNvZGluZycsICcnKVxuXG5cdG9wdGlvbnMgPSB7YWJzb2x1dGU6IHRydWV9XG5cblx0cmV0dXJuIGdldEluc3RhbmNlUmVhZE9ubHkocmVxLCByZXMsIG5leHQsIG9wdGlvbnMpXG4jIyNcblx06I635Y+W55Sz6K+35Y2V5YiX6KGo77yaXG4gICAgZmluYWxfZGVjaXNpb27vvJrlrqHmibnnu5PmnpxcbiAgICBzdGF0ZTog55Sz6K+35Y2V54q25oCBXG4jIyNcbkpzb25Sb3V0ZXMuYWRkIFwiZ2V0XCIsIFwiL2FwaS93b3JrZmxvdy9pbnN0YW5jZXNcIiwgKHJlcSwgcmVzLCBuZXh0KSAtPlxuXG5cdGlmICFTdGVlZG9zLkFQSUF1dGhlbnRpY2F0aW9uQ2hlY2socmVxLCByZXMpXG5cdFx0cmV0dXJuIDtcblxuXHR1c2VyX2lkID0gcmVxLnVzZXJJZFxuXG5cdHNwYWNlSWQgPSByZXEuaGVhZGVyc1tcIngtc3BhY2UtaWRcIl1cblxuXHRpZiBub3Qgc3BhY2VJZFxuXHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRjb2RlOiA0MDEsXG5cdFx0XHRkYXRhOlxuXHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIFgtU3BhY2UtSWRcIixcblx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0cmV0dXJuO1xuXG5cdGZsb3dJZCA9IHJlcS5xdWVyeT8uZmxvd0lkXG5cblx0aWYgIWZsb3dJZFxuXHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRjb2RlOiA0MDAsXG5cdFx0XHRkYXRhOlxuXHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIGZsb3dJZFwiLFxuXHRcdFx0XHRcInN1Y2Nlc3NcIjogZmFsc2Vcblx0XHRyZXR1cm47XG5cblx0cXVlcnkgPSB7fVxuXG5cdHJldF9zeW5jX3Rva2VuID0gbmV3IERhdGUoKS5nZXRUaW1lKClcblxuXHRmbG93SWRzID0gZmxvd0lkLnNwbGl0KFwiLFwiKVxuXG5cblx0Zmxvd3MgPSBkYi5mbG93cy5maW5kKHtfaWQ6IHskaW46IGZsb3dJZHN9fSkuZmV0Y2goKVxuXG5cdGkgPSAwXG5cdHdoaWxlIGkgPCBmbG93cy5sZW5ndGhcblx0XHRmID0gZmxvd3NbaV1cblx0XHRzcGFjZVVzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHtzcGFjZTogZi5zcGFjZSwgdXNlcjogdXNlcl9pZH0pXG5cdFx0aWYgIXNwYWNlVXNlclxuXHRcdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdFx0Y29kZTogNDAxLFxuXHRcdFx0XHRkYXRhOlxuXHRcdFx0XHRcdFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE5vIHBlcm1pc3Npb24sIGZsb3cgaXMgI3tmLl9pZH1cIixcblx0XHRcdFx0XHRcInN1Y2Nlc3NcIjogZmFsc2Vcblx0XHRcdHJldHVybjtcblx0XHRlbHNlXG5cblx0I1x05piv5ZCm5bel5L2c5Yy6566h55CG5ZGYXG5cdFx0aWYgIVN0ZWVkb3MuaXNTcGFjZUFkbWluKHNwYWNlSWQsIHVzZXJfaWQpXG5cdFx0XHRzcGFjZVVzZXJPcmdhbml6YXRpb25zID0gZGIub3JnYW5pemF0aW9ucy5maW5kKHtcblx0XHRcdFx0X2lkOiB7XG5cdFx0XHRcdFx0JGluOiBzcGFjZVVzZXIub3JnYW5pemF0aW9uc1xuXHRcdFx0XHR9XG5cdFx0XHR9KS5mZXRjaCgpO1xuXG5cdFx0XHRpZiAhV29ya2Zsb3dNYW5hZ2VyLmNhbk1vbml0b3IoZiwgc3BhY2VVc2VyLCBzcGFjZVVzZXJPcmdhbml6YXRpb25zKSAmJiAhV29ya2Zsb3dNYW5hZ2VyLmNhbkFkbWluKGYsIHNwYWNlVXNlciwgc3BhY2VVc2VyT3JnYW5pemF0aW9ucylcblx0XHRcdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdFx0XHRjb2RlOiA0MDEsXG5cdFx0XHRcdFx0ZGF0YTpcblx0XHRcdFx0XHRcdFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE5vIHBlcm1pc3Npb24sIGZsb3cgaXMgI3tmLl9pZH1cIixcblx0XHRcdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0aSsrXG5cblxuXHRxdWVyeS5mbG93ID0geyRpbjogZmxvd0lkc31cblxuXHRxdWVyeS5zcGFjZSA9IHNwYWNlSWRcblxuXHRpZiByZXEucXVlcnk/LnN5bmNfdG9rZW5cblx0XHRzeW5jX3Rva2VuID0gbmV3IERhdGUoTnVtYmVyKHJlcS5xdWVyeS5zeW5jX3Rva2VuKSlcblx0XHRxdWVyeS5tb2RpZmllZCA9IHskZ3Q6IHN5bmNfdG9rZW59XG5cblx0aWYgcmVxLnF1ZXJ5Py5maW5hbF9kZWNpc2lvblxuXHRcdHF1ZXJ5LmZpbmFsX2RlY2lzaW9uID0geyRpbiA6IHJlcS5xdWVyeS5maW5hbF9kZWNpc2lvbi5zcGxpdChcIixcIil9XG5cdGVsc2Vcblx0XHRxdWVyeS5maW5hbF9kZWNpc2lvbiA9IHskbmluOiBbXCJ0ZXJtaW5hdGVkXCIsIFwicmVqZWN0ZWRcIl19XG5cblx0aWYgcmVxLnF1ZXJ5Py5zdGF0ZVxuXHRcdHF1ZXJ5LnN0YXRlID0geyRpbjogcmVxLnF1ZXJ5LnN0YXRlLnNwbGl0KFwiLFwiKX1cblx0ZWxzZVxuXHRcdHF1ZXJ5LnN0YXRlID0gXCJjb21wbGV0ZWRcIlxuXG4jXHTmnIDlpJrov5Tlm541MDDmnaHmlbDmja5cblx0aW5zdGFuY2VzID0gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtmaWVsZHM6IHtpbmJveF91ZXJzOiAwLCBjY191c2VyczogMCwgb3V0Ym94X3VzZXJzOiAwLCB0cmFjZXM6IDAsIGF0dGFjaG1lbnRzOiAwfSwgc2tpcDogMCwgbGltaXQ6IDUwMH0pLmZldGNoKClcblx0aW5zdGFuY2VzLmZvckVhY2ggKGluc3RhbmNlKS0+XG5cblx0XHRhdHRhY2htZW50cyA9IGNmcy5pbnN0YW5jZXMuZmluZCh7J21ldGFkYXRhLmluc3RhbmNlJzogaW5zdGFuY2UuX2lkLCdtZXRhZGF0YS5jdXJyZW50JzogdHJ1ZSwgXCJtZXRhZGF0YS5pc19wcml2YXRlXCI6IHskbmU6IHRydWV9fSwge2ZpZWxkczoge2NvcGllczogMH19KS5mZXRjaCgpXG5cblx0XHRpbnN0YW5jZS5hdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzXG5cblxuXHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0Y29kZTogMjAwLFxuXHRcdFx0ZGF0YTpcblx0XHRcdFx0XCJzdGF0dXNcIjogXCJzdWNjZXNzXCIsXG5cdFx0XHRcdFwic3luY190b2tlblwiOiByZXRfc3luY190b2tlblxuXHRcdFx0XHRcImRhdGFcIjogaW5zdGFuY2VzXG5cdHJldHVybjtcbiIsInZhciBDb29raWVzLCBnZXRJbnN0YW5jZVJlYWRPbmx5O1xuXG5Db29raWVzID0gcmVxdWlyZShcImNvb2tpZXNcIik7XG5cbmdldEluc3RhbmNlUmVhZE9ubHkgPSBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCwgb3B0aW9ucykge1xuICB2YXIgX2hhc1Blcm1pc3Npb24sIF9sb2NhbGUsIF9wYXJlbnRfaW5zdGFuY2VzLCBkYXRhQnVmLCBlcnJvciwgaGlkZV90cmFjZXMsIGh0bWwsIGluc3RhbmNlLCBpbnN0YW5jZUlkLCByZWYsIHJlZjEsIHNwYWNlLCBzcGFjZUlkLCBzcGFjZVVzZXJDb3VudCwgdXNlciwgdXNlcklkO1xuICB1c2VyID0gU3RlZWRvcy5nZXRBUElMb2dpblVzZXIocmVxLCByZXMpO1xuICBpZiAocmVxICE9IG51bGwgPyAocmVmID0gcmVxLnF1ZXJ5KSAhPSBudWxsID8gcmVmLmFjY2Vzc190b2tlbiA6IHZvaWQgMCA6IHZvaWQgMCkge1xuICAgIHVzZXJJZCA9IFN0ZWVkb3MuZ2V0VXNlcklkRnJvbUFjY2Vzc1Rva2VuKHJlcS5xdWVyeS5hY2Nlc3NfdG9rZW4pO1xuICAgIGlmICh1c2VySWQpIHtcbiAgICAgIHVzZXIgPSBNZXRlb3IudXNlcnMuZmluZE9uZSh7XG4gICAgICAgIF9pZDogdXNlcklkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgc3BhY2VJZCA9IHJlcS5wYXJhbXMuc3BhY2U7XG4gIGluc3RhbmNlSWQgPSByZXEucGFyYW1zLmluc3RhbmNlX2lkO1xuICBpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICBfaWQ6IGluc3RhbmNlSWRcbiAgfSk7XG4gIHNwYWNlID0gZGIuc3BhY2VzLmZpbmRPbmUoe1xuICAgIF9pZDogc3BhY2VJZFxuICB9KTtcbiAgaGlkZV90cmFjZXMgPSAocmVmMSA9IHJlcS5xdWVyeSkgIT0gbnVsbCA/IHJlZjEuaGlkZV90cmFjZXMgOiB2b2lkIDA7XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBzaG93VHJhY2U6IHRydWVcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMuc2hvd1RyYWNlID0gdHJ1ZTtcbiAgfVxuICBpZiAoaGlkZV90cmFjZXMgPT09IFwiMVwiKSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMuc2hvd1RyYWNlID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHNob3dUcmFjZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmICghb3B0aW9ucy5zaG93QXR0YWNobWVudHMpIHtcbiAgICBvcHRpb25zLnNob3dBdHRhY2htZW50cyA9IHRydWU7XG4gIH1cbiAgaWYgKCFzcGFjZSkge1xuICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgIGNvZGU6IDQwMSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgXCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBzcGFjZVwiLFxuICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFpbnN0YW5jZSkge1xuICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgIGNvZGU6IDQwMSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgXCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBpbnN0YW5jZVwiLFxuICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCF1c2VyKSB7XG4gICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgY29kZTogNDAxLFxuICAgICAgZGF0YToge1xuICAgICAgICBcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIFgtQXV0aC1Ub2tlbixYLVVzZXItSWRcIixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbnN0YW5jZS5zcGFjZSAhPT0gc3BhY2VJZCkge1xuICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgIGNvZGU6IDQwMSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgXCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBzcGFjZSBvciBpbnN0YW5jZVwiLFxuICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgc3BhY2VVc2VyQ291bnQgPSBkYi5zcGFjZV91c2Vycy5maW5kKHtcbiAgICB1c2VyOiB1c2VyLl9pZCxcbiAgICBzcGFjZTogc3BhY2VJZFxuICB9KS5jb3VudCgpO1xuICBpZiAoc3BhY2VVc2VyQ291bnQgPT09IDApIHtcbiAgICBpZiAoIXNwYWNlKSB7XG4gICAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICAgIGNvZGU6IDQwMSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3Npbmcgc2FwY2VVc2VyXCIsXG4gICAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBfaGFzUGVybWlzc2lvbiA9IFdvcmtmbG93TWFuYWdlci5oYXNJbnN0YW5jZVBlcm1pc3Npb25zKHVzZXIsIGluc3RhbmNlKTtcbiAgaWYgKCFfaGFzUGVybWlzc2lvbiAmJiBpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UpIHtcbiAgICBfcGFyZW50X2luc3RhbmNlcyA9IF8udW5pb24oW2luc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZV0sIGluc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMgfHwgW10pO1xuICAgIF9oYXNQZXJtaXNzaW9uID0gXy5maW5kKF9wYXJlbnRfaW5zdGFuY2VzLCBmdW5jdGlvbihfcGFyZW50X2lkKSB7XG4gICAgICB2YXIgX3BhcmVudF9pbnM7XG4gICAgICBfcGFyZW50X2lucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBfcGFyZW50X2lkXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIHRyYWNlczogMFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBXb3JrZmxvd01hbmFnZXIuaGFzSW5zdGFuY2VQZXJtaXNzaW9ucyh1c2VyLCBfcGFyZW50X2lucyk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKCFfaGFzUGVybWlzc2lvbikge1xuICAgIF9sb2NhbGUgPSBTdGVlZG9zLmxvY2FsZSh1c2VyLl9pZCwgdHJ1ZSk7XG4gICAgZXJyb3IgPSBUQVBpMThuLl9fKFwiaW5zdGFuY2VfcGVybWlzc2lvbnNfZXJyb3JcIiwge30sIF9sb2NhbGUpO1xuICAgIHJlcy5jaGFyc2V0ID0gXCJ1dGYtOFwiO1xuICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgIGNvZGU6IDQwMSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgXCJlcnJvclwiOiBlcnJvcixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGh0bWwgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyk7XG4gIGRhdGFCdWYgPSBuZXcgQnVmZmVyKGh0bWwpO1xuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Jyk7XG4gIHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgZGF0YUJ1Zi5sZW5ndGgpO1xuICByZXMuc2V0SGVhZGVyKCdjb250ZW50LXJhbmdlJywgXCJieXRlcyAwLVwiICsgKGRhdGFCdWYubGVuZ3RoIC0gMSkgKyBcIi9cIiArIGRhdGFCdWYubGVuZ3RoKTtcbiAgcmVzLnN0YXR1c0NvZGUgPSAyMDA7XG4gIHJldHVybiByZXMuZW5kKGh0bWwpO1xufTtcblxuSnNvblJvdXRlcy5hZGQoXCJnZXRcIiwgXCIvd29ya2Zsb3cvc3BhY2UvOnNwYWNlL3ZpZXcvcmVhZG9ubHkvOmluc3RhbmNlX2lkXCIsIGdldEluc3RhbmNlUmVhZE9ubHkpO1xuXG5Kc29uUm91dGVzLmFkZChcImdldFwiLCBcIi93b3JrZmxvdy9zcGFjZS86c3BhY2Uvdmlldy9yZWFkb25seS86aW5zdGFuY2VfaWQvOmluc3RhbmNlX25hbWVcIiwgZnVuY3Rpb24ocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIG9wdGlvbnM7XG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnKTtcbiAgcmVzLnNldEhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50O2ZpbGVuYW1lPScgKyBlbmNvZGVVUkkocmVxLnBhcmFtcy5pbnN0YW5jZV9uYW1lKSk7XG4gIHJlcy5zZXRIZWFkZXIoJ1RyYW5zZmVyLUVuY29kaW5nJywgJycpO1xuICBvcHRpb25zID0ge1xuICAgIGFic29sdXRlOiB0cnVlXG4gIH07XG4gIHJldHVybiBnZXRJbnN0YW5jZVJlYWRPbmx5KHJlcSwgcmVzLCBuZXh0LCBvcHRpb25zKTtcbn0pO1xuXG5cbi8qXG5cdOiOt+WPlueUs+ivt+WNleWIl+ihqO+8mlxuICAgIGZpbmFsX2RlY2lzaW9u77ya5a6h5om557uT5p6cXG4gICAgc3RhdGU6IOeUs+ivt+WNleeKtuaAgVxuICovXG5cbkpzb25Sb3V0ZXMuYWRkKFwiZ2V0XCIsIFwiL2FwaS93b3JrZmxvdy9pbnN0YW5jZXNcIiwgZnVuY3Rpb24ocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIGYsIGZsb3dJZCwgZmxvd0lkcywgZmxvd3MsIGksIGluc3RhbmNlcywgcXVlcnksIHJlZiwgcmVmMSwgcmVmMiwgcmVmMywgcmV0X3N5bmNfdG9rZW4sIHNwYWNlSWQsIHNwYWNlVXNlciwgc3BhY2VVc2VyT3JnYW5pemF0aW9ucywgc3luY190b2tlbiwgdXNlcl9pZDtcbiAgaWYgKCFTdGVlZG9zLkFQSUF1dGhlbnRpY2F0aW9uQ2hlY2socmVxLCByZXMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHVzZXJfaWQgPSByZXEudXNlcklkO1xuICBzcGFjZUlkID0gcmVxLmhlYWRlcnNbXCJ4LXNwYWNlLWlkXCJdO1xuICBpZiAoIXNwYWNlSWQpIHtcbiAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICBjb2RlOiA0MDEsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3NpbmcgWC1TcGFjZS1JZFwiLFxuICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZmxvd0lkID0gKHJlZiA9IHJlcS5xdWVyeSkgIT0gbnVsbCA/IHJlZi5mbG93SWQgOiB2b2lkIDA7XG4gIGlmICghZmxvd0lkKSB7XG4gICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgY29kZTogNDAwLFxuICAgICAgZGF0YToge1xuICAgICAgICBcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIGZsb3dJZFwiLFxuICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgcXVlcnkgPSB7fTtcbiAgcmV0X3N5bmNfdG9rZW4gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgZmxvd0lkcyA9IGZsb3dJZC5zcGxpdChcIixcIik7XG4gIGZsb3dzID0gZGIuZmxvd3MuZmluZCh7XG4gICAgX2lkOiB7XG4gICAgICAkaW46IGZsb3dJZHNcbiAgICB9XG4gIH0pLmZldGNoKCk7XG4gIGkgPSAwO1xuICB3aGlsZSAoaSA8IGZsb3dzLmxlbmd0aCkge1xuICAgIGYgPSBmbG93c1tpXTtcbiAgICBzcGFjZVVzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHtcbiAgICAgIHNwYWNlOiBmLnNwYWNlLFxuICAgICAgdXNlcjogdXNlcl9pZFxuICAgIH0pO1xuICAgIGlmICghc3BhY2VVc2VyKSB7XG4gICAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICAgIGNvZGU6IDQwMSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE5vIHBlcm1pc3Npb24sIGZsb3cgaXMgXCIgKyBmLl9pZCxcbiAgICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcblxuICAgIH1cbiAgICBpZiAoIVN0ZWVkb3MuaXNTcGFjZUFkbWluKHNwYWNlSWQsIHVzZXJfaWQpKSB7XG4gICAgICBzcGFjZVVzZXJPcmdhbml6YXRpb25zID0gZGIub3JnYW5pemF0aW9ucy5maW5kKHtcbiAgICAgICAgX2lkOiB7XG4gICAgICAgICAgJGluOiBzcGFjZVVzZXIub3JnYW5pemF0aW9uc1xuICAgICAgICB9XG4gICAgICB9KS5mZXRjaCgpO1xuICAgICAgaWYgKCFXb3JrZmxvd01hbmFnZXIuY2FuTW9uaXRvcihmLCBzcGFjZVVzZXIsIHNwYWNlVXNlck9yZ2FuaXphdGlvbnMpICYmICFXb3JrZmxvd01hbmFnZXIuY2FuQWRtaW4oZiwgc3BhY2VVc2VyLCBzcGFjZVVzZXJPcmdhbml6YXRpb25zKSkge1xuICAgICAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICAgICAgY29kZTogNDAxLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE5vIHBlcm1pc3Npb24sIGZsb3cgaXMgXCIgKyBmLl9pZCxcbiAgICAgICAgICAgIFwic3VjY2Vzc1wiOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaSsrO1xuICB9XG4gIHF1ZXJ5LmZsb3cgPSB7XG4gICAgJGluOiBmbG93SWRzXG4gIH07XG4gIHF1ZXJ5LnNwYWNlID0gc3BhY2VJZDtcbiAgaWYgKChyZWYxID0gcmVxLnF1ZXJ5KSAhPSBudWxsID8gcmVmMS5zeW5jX3Rva2VuIDogdm9pZCAwKSB7XG4gICAgc3luY190b2tlbiA9IG5ldyBEYXRlKE51bWJlcihyZXEucXVlcnkuc3luY190b2tlbikpO1xuICAgIHF1ZXJ5Lm1vZGlmaWVkID0ge1xuICAgICAgJGd0OiBzeW5jX3Rva2VuXG4gICAgfTtcbiAgfVxuICBpZiAoKHJlZjIgPSByZXEucXVlcnkpICE9IG51bGwgPyByZWYyLmZpbmFsX2RlY2lzaW9uIDogdm9pZCAwKSB7XG4gICAgcXVlcnkuZmluYWxfZGVjaXNpb24gPSB7XG4gICAgICAkaW46IHJlcS5xdWVyeS5maW5hbF9kZWNpc2lvbi5zcGxpdChcIixcIilcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHF1ZXJ5LmZpbmFsX2RlY2lzaW9uID0ge1xuICAgICAgJG5pbjogW1widGVybWluYXRlZFwiLCBcInJlamVjdGVkXCJdXG4gICAgfTtcbiAgfVxuICBpZiAoKHJlZjMgPSByZXEucXVlcnkpICE9IG51bGwgPyByZWYzLnN0YXRlIDogdm9pZCAwKSB7XG4gICAgcXVlcnkuc3RhdGUgPSB7XG4gICAgICAkaW46IHJlcS5xdWVyeS5zdGF0ZS5zcGxpdChcIixcIilcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHF1ZXJ5LnN0YXRlID0gXCJjb21wbGV0ZWRcIjtcbiAgfVxuICBpbnN0YW5jZXMgPSBkYi5pbnN0YW5jZXMuZmluZChxdWVyeSwge1xuICAgIGZpZWxkczoge1xuICAgICAgaW5ib3hfdWVyczogMCxcbiAgICAgIGNjX3VzZXJzOiAwLFxuICAgICAgb3V0Ym94X3VzZXJzOiAwLFxuICAgICAgdHJhY2VzOiAwLFxuICAgICAgYXR0YWNobWVudHM6IDBcbiAgICB9LFxuICAgIHNraXA6IDAsXG4gICAgbGltaXQ6IDUwMFxuICB9KS5mZXRjaCgpO1xuICBpbnN0YW5jZXMuZm9yRWFjaChmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgIHZhciBhdHRhY2htZW50cztcbiAgICBhdHRhY2htZW50cyA9IGNmcy5pbnN0YW5jZXMuZmluZCh7XG4gICAgICAnbWV0YWRhdGEuaW5zdGFuY2UnOiBpbnN0YW5jZS5faWQsXG4gICAgICAnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG4gICAgICBcIm1ldGFkYXRhLmlzX3ByaXZhdGVcIjoge1xuICAgICAgICAkbmU6IHRydWVcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgY29waWVzOiAwXG4gICAgICB9XG4gICAgfSkuZmV0Y2goKTtcbiAgICByZXR1cm4gaW5zdGFuY2UuYXR0YWNobWVudHMgPSBhdHRhY2htZW50cztcbiAgfSk7XG4gIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICBjb2RlOiAyMDAsXG4gICAgZGF0YToge1xuICAgICAgXCJzdGF0dXNcIjogXCJzdWNjZXNzXCIsXG4gICAgICBcInN5bmNfdG9rZW5cIjogcmV0X3N5bmNfdG9rZW4sXG4gICAgICBcImRhdGFcIjogaW5zdGFuY2VzXG4gICAgfVxuICB9KTtcbn0pO1xuIiwiXG5Kc29uUm91dGVzLmFkZCBcImdldFwiLCBcIi9zdGVlZG9zLWNzc1wiLCAocmVxLCByZXMsIG5leHQpLT5cblx0cmVzLnNldEhlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvY3NzJyk7XG5cdGFsbENzcyA9IFdlYkFwcC5nZXRSZWZyZXNoYWJsZUFzc2V0cygpXG5cblx0YWxsQ3NzTGluayA9IFwiXCJcblxuXHRhbGxDc3MuZm9yRWFjaCAoY3NzKSAtPlxuXHRcdGlmIF9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18uUk9PVF9VUkxfUEFUSF9QUkVGSVhcblx0XHRcdHJvb3RVcmwgPSBfX21ldGVvcl9ydW50aW1lX2NvbmZpZ19fLlJPT1RfVVJMXG5cdFx0XHRpZiByb290VXJsLmVuZHNXaXRoKFwiL1wiKVxuXHRcdFx0XHRjc3NIcmVmID0gcm9vdFVybC5yZXBsYWNlKF9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18uUk9PVF9VUkxfUEFUSF9QUkVGSVggKyBcIi9cIiwgXCJcIikgKyBjc3MudXJsXG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNzc0hyZWYgPSByb290VXJsLnJlcGxhY2UoX19tZXRlb3JfcnVudGltZV9jb25maWdfXy5ST09UX1VSTF9QQVRIX1BSRUZJWCwgXCJcIikgKyBjc3MudXJsXG5cdFx0ZWxzZVxuXHRcdFx0Y3NzSHJlZiA9IE1ldGVvci5hYnNvbHV0ZVVybChjc3MudXJsKVxuXHRcdGFsbENzc0xpbmsgKz0gXCJAaW1wb3J0IHVybCgje2Nzc0hyZWZ9KTtcIlxuXG5cdHJlcy5zdGF0dXNDb2RlID0gMjAwXG5cdHJlcy5lbmQoYWxsQ3NzTGluaykiLCJKc29uUm91dGVzLmFkZChcImdldFwiLCBcIi9zdGVlZG9zLWNzc1wiLCBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCkge1xuICB2YXIgYWxsQ3NzLCBhbGxDc3NMaW5rO1xuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9jc3MnKTtcbiAgYWxsQ3NzID0gV2ViQXBwLmdldFJlZnJlc2hhYmxlQXNzZXRzKCk7XG4gIGFsbENzc0xpbmsgPSBcIlwiO1xuICBhbGxDc3MuZm9yRWFjaChmdW5jdGlvbihjc3MpIHtcbiAgICB2YXIgY3NzSHJlZiwgcm9vdFVybDtcbiAgICBpZiAoX19tZXRlb3JfcnVudGltZV9jb25maWdfXy5ST09UX1VSTF9QQVRIX1BSRUZJWCkge1xuICAgICAgcm9vdFVybCA9IF9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18uUk9PVF9VUkw7XG4gICAgICBpZiAocm9vdFVybC5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgY3NzSHJlZiA9IHJvb3RVcmwucmVwbGFjZShfX21ldGVvcl9ydW50aW1lX2NvbmZpZ19fLlJPT1RfVVJMX1BBVEhfUFJFRklYICsgXCIvXCIsIFwiXCIpICsgY3NzLnVybDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzc0hyZWYgPSByb290VXJsLnJlcGxhY2UoX19tZXRlb3JfcnVudGltZV9jb25maWdfXy5ST09UX1VSTF9QQVRIX1BSRUZJWCwgXCJcIikgKyBjc3MudXJsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjc3NIcmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKGNzcy51cmwpO1xuICAgIH1cbiAgICByZXR1cm4gYWxsQ3NzTGluayArPSBcIkBpbXBvcnQgdXJsKFwiICsgY3NzSHJlZiArIFwiKTtcIjtcbiAgfSk7XG4gIHJlcy5zdGF0dXNDb2RlID0gMjAwO1xuICByZXR1cm4gcmVzLmVuZChhbGxDc3NMaW5rKTtcbn0pO1xuIiwiSnNvblJvdXRlcy5hZGQgXCJnZXRcIiwgXCIvYXBpL3dvcmtmbG93L3NwYWNlLzpzcGFjZS92aWV3L2RyYWZ0LzpmbG93XCIsIChyZXEsIHJlcywgbmV4dCkgLT5cblx0aWYgIVN0ZWVkb3MuQVBJQXV0aGVudGljYXRpb25DaGVjayhyZXEsIHJlcylcblx0XHRyZXR1cm5cblxuXHR1c2VyX2lkID0gcmVxLnVzZXJJZFxuXG5cdHVzZXIgPSBkYi51c2Vycy5maW5kT25lKHsgX2lkOiB1c2VyX2lkIH0pXG5cblx0c3BhY2VJZCA9IHJlcS5wYXJhbXMuc3BhY2VcblxuXHRmbG93SWQgPSByZXEucGFyYW1zLmZsb3dcblxuXHRzcGFjZSA9IGRiLnNwYWNlcy5maW5kT25lKHsgX2lkOiBzcGFjZUlkIH0pXG5cblx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoeyBfaWQ6IGZsb3dJZCB9LCB7IGZpZWxkczogeyBuYW1lOiAxLCAnY3VycmVudC5faWQnOiAxLCBmb3JtOiAxIH0gfSlcblxuXHRmb3JtID0gZGIuZm9ybXMuZmluZE9uZSh7IF9pZDogZmxvdy5mb3JtIH0sIHsgZmllbGRzOiB7ICdjdXJyZW50Ll9pZCc6IDEgfSB9KVxuXG5cdG9wdGlvbnMgPSB7XG5cdFx0c2hvd1RyYWNlOiBmYWxzZSxcblx0XHRzaG93QXR0YWNobWVudHM6IGZhbHNlLFxuXHRcdHRlbXBsYXRlTmFtZTogXCJkZWZhdWx0XCIsXG5cdFx0ZWRpdGFibGU6IHRydWUsXG5cdFx0d2lkdGg6IFwiMTAwJVwiLFxuXHRcdGluc3RhbmNlX3N0eWxlOiBcImluc3RhbmNlLWRlZmF1bHRcIixcblx0XHRwbHVnaW5zOiBcIlwiXCJcblxuXHRcdFx0PG1ldGEgaHR0cC1lcXVpdj1cIlgtVUEtQ29tcGF0aWJsZVwiIGNvbnRlbnQ9XCJJRT1lZGdlLGNocm9tZT0xXCIgLz5cblx0XHRcdDxtZXRhIG5hbWU9XCJmb3JtYXQtZGV0ZWN0aW9uXCIgY29udGVudD1cInRlbGVwaG9uZT1ub1wiPlxuXHRcdFx0PG1ldGEgaHR0cC1lcXVpdj1cIngtcmltLWF1dG8tbWF0Y2hcIiBjb250ZW50PVwibm9uZVwiPlxuXHRcdFx0PHRpdGxlPiN7Zmxvdy5uYW1lfTwvdGl0bGU+XG5cdFx0XHQ8bWV0YSBjb250ZW50PSd3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT0wJyBuYW1lPSd2aWV3cG9ydCcgLz5cblx0XHRcdDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGhcIiAvPlxuXG5cdFx0XHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cIi9wbHVnaW5zL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci9jc3MvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLm1pbi5jc3NcIj5cblxuXHRcdFx0PHNjcmlwdCBzcmM9XCIvcGx1Z2lucy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIvanMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLm1pbi5qc1wiIHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj48L3NjcmlwdD5cblxuXHRcdFx0PHNjcmlwdCBzcmM9XCIvcGx1Z2lucy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIvanMvbG9jYWxlcy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIuemgtQ04uanNcIiB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgY2hhcnNldD1cIlVURi04XCI+PC9zY3JpcHQ+XG5cblx0XHRcdDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBocmVmPVwiL3BsdWdpbnMvdG9hc3RyL3RvYXN0ci5taW4uY3NzXCI+XG5cdFx0XHQ8c2NyaXB0IHNyYz1cIi9wbHVnaW5zL3RvYXN0ci90b2FzdHIubWluLmpzXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPjwvc2NyaXB0PlxuXHRcdFx0PGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGhyZWY9XCIvanMvd29ya2Zsb3dfY2xpZW50LmNzc1wiPlxuXHRcdFx0PHNjcmlwdCBzcmM9XCIvanMvd29ya2Zsb3dfY2xpZW50LmpzXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPjwvc2NyaXB0PlxuXHRcdFwiXCJcIlxuXHR9XG5cblx0aW5zdGFuY2UgPSB7XG5cdFx0ZmxvdzogZmxvdy5faWQsXG5cdFx0Zmxvd192ZXJzaW9uOiBmbG93LmN1cnJlbnQuX2lkLFxuXHRcdGZvcm06IGZvcm0uX2lkLFxuXHRcdGZvcm1fdmVyc2lvbjogZm9ybS5jdXJyZW50Ll9pZCxcblx0XHR2YWx1ZXM6IHt9LFxuXHRcdG5hbWU6IGZsb3cubmFtZSxcblx0XHRzcGFjZTogc3BhY2VJZFxuXHR9XG5cblx0aHRtbCA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZUh0bWwodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKVxuXG5cdGRhdGFCdWYgPSBuZXcgQnVmZmVyKGh0bWwpXG5cblx0cmVzLnNldEhlYWRlcignY29udGVudC1sZW5ndGgnLCBkYXRhQnVmLmxlbmd0aClcblxuXHRyZXMuc2V0SGVhZGVyKCdjb250ZW50LXJhbmdlJywgXCJieXRlcyAwLSN7ZGF0YUJ1Zi5sZW5ndGggLSAxfS8je2RhdGFCdWYubGVuZ3RofVwiKVxuXG5cdHJlcy5zdGF0dXNDb2RlID0gMjAwXG5cblx0cmVzLmVuZChodG1sKVxuIiwiSnNvblJvdXRlcy5hZGQoXCJnZXRcIiwgXCIvYXBpL3dvcmtmbG93L3NwYWNlLzpzcGFjZS92aWV3L2RyYWZ0LzpmbG93XCIsIGZ1bmN0aW9uKHJlcSwgcmVzLCBuZXh0KSB7XG4gIHZhciBkYXRhQnVmLCBmbG93LCBmbG93SWQsIGZvcm0sIGh0bWwsIGluc3RhbmNlLCBvcHRpb25zLCBzcGFjZSwgc3BhY2VJZCwgdXNlciwgdXNlcl9pZDtcbiAgaWYgKCFTdGVlZG9zLkFQSUF1dGhlbnRpY2F0aW9uQ2hlY2socmVxLCByZXMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHVzZXJfaWQgPSByZXEudXNlcklkO1xuICB1c2VyID0gZGIudXNlcnMuZmluZE9uZSh7XG4gICAgX2lkOiB1c2VyX2lkXG4gIH0pO1xuICBzcGFjZUlkID0gcmVxLnBhcmFtcy5zcGFjZTtcbiAgZmxvd0lkID0gcmVxLnBhcmFtcy5mbG93O1xuICBzcGFjZSA9IGRiLnNwYWNlcy5maW5kT25lKHtcbiAgICBfaWQ6IHNwYWNlSWRcbiAgfSk7XG4gIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtcbiAgICBfaWQ6IGZsb3dJZFxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBuYW1lOiAxLFxuICAgICAgJ2N1cnJlbnQuX2lkJzogMSxcbiAgICAgIGZvcm06IDFcbiAgICB9XG4gIH0pO1xuICBmb3JtID0gZGIuZm9ybXMuZmluZE9uZSh7XG4gICAgX2lkOiBmbG93LmZvcm1cbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgJ2N1cnJlbnQuX2lkJzogMVxuICAgIH1cbiAgfSk7XG4gIG9wdGlvbnMgPSB7XG4gICAgc2hvd1RyYWNlOiBmYWxzZSxcbiAgICBzaG93QXR0YWNobWVudHM6IGZhbHNlLFxuICAgIHRlbXBsYXRlTmFtZTogXCJkZWZhdWx0XCIsXG4gICAgZWRpdGFibGU6IHRydWUsXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGluc3RhbmNlX3N0eWxlOiBcImluc3RhbmNlLWRlZmF1bHRcIixcbiAgICBwbHVnaW5zOiBcIlxcbjxtZXRhIGh0dHAtZXF1aXY9XFxcIlgtVUEtQ29tcGF0aWJsZVxcXCIgY29udGVudD1cXFwiSUU9ZWRnZSxjaHJvbWU9MVxcXCIgLz5cXG48bWV0YSBuYW1lPVxcXCJmb3JtYXQtZGV0ZWN0aW9uXFxcIiBjb250ZW50PVxcXCJ0ZWxlcGhvbmU9bm9cXFwiPlxcbjxtZXRhIGh0dHAtZXF1aXY9XFxcIngtcmltLWF1dG8tbWF0Y2hcXFwiIGNvbnRlbnQ9XFxcIm5vbmVcXFwiPlxcbjx0aXRsZT5cIiArIGZsb3cubmFtZSArIFwiPC90aXRsZT5cXG48bWV0YSBjb250ZW50PSd3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT0wJyBuYW1lPSd2aWV3cG9ydCcgLz5cXG48bWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoXFxcIiAvPlxcblxcbjxsaW5rIHJlbD1cXFwic3R5bGVzaGVldFxcXCIgdHlwZT1cXFwidGV4dC9jc3NcXFwiIGhyZWY9XFxcIi9wbHVnaW5zL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci9jc3MvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLm1pbi5jc3NcXFwiPlxcblxcbjxzY3JpcHQgc3JjPVxcXCIvcGx1Z2lucy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIvanMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLm1pbi5qc1xcXCIgdHlwZT1cXFwidGV4dC9qYXZhc2NyaXB0XFxcIj48L3NjcmlwdD5cXG5cXG48c2NyaXB0IHNyYz1cXFwiL3BsdWdpbnMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyL2pzL2xvY2FsZXMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLnpoLUNOLmpzXFxcIiB0eXBlPVxcXCJ0ZXh0L2phdmFzY3JpcHRcXFwiIGNoYXJzZXQ9XFxcIlVURi04XFxcIj48L3NjcmlwdD5cXG5cXG48bGluayByZWw9XFxcInN0eWxlc2hlZXRcXFwiIHR5cGU9XFxcInRleHQvY3NzXFxcIiBocmVmPVxcXCIvcGx1Z2lucy90b2FzdHIvdG9hc3RyLm1pbi5jc3NcXFwiPlxcbjxzY3JpcHQgc3JjPVxcXCIvcGx1Z2lucy90b2FzdHIvdG9hc3RyLm1pbi5qc1xcXCIgdHlwZT1cXFwidGV4dC9qYXZhc2NyaXB0XFxcIj48L3NjcmlwdD5cXG48bGluayByZWw9XFxcInN0eWxlc2hlZXRcXFwiIHR5cGU9XFxcInRleHQvY3NzXFxcIiBocmVmPVxcXCIvanMvd29ya2Zsb3dfY2xpZW50LmNzc1xcXCI+XFxuPHNjcmlwdCBzcmM9XFxcIi9qcy93b3JrZmxvd19jbGllbnQuanNcXFwiIHR5cGU9XFxcInRleHQvamF2YXNjcmlwdFxcXCI+PC9zY3JpcHQ+XCJcbiAgfTtcbiAgaW5zdGFuY2UgPSB7XG4gICAgZmxvdzogZmxvdy5faWQsXG4gICAgZmxvd192ZXJzaW9uOiBmbG93LmN1cnJlbnQuX2lkLFxuICAgIGZvcm06IGZvcm0uX2lkLFxuICAgIGZvcm1fdmVyc2lvbjogZm9ybS5jdXJyZW50Ll9pZCxcbiAgICB2YWx1ZXM6IHt9LFxuICAgIG5hbWU6IGZsb3cubmFtZSxcbiAgICBzcGFjZTogc3BhY2VJZFxuICB9O1xuICBodG1sID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlSHRtbCh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpO1xuICBkYXRhQnVmID0gbmV3IEJ1ZmZlcihodG1sKTtcbiAgcmVzLnNldEhlYWRlcignY29udGVudC1sZW5ndGgnLCBkYXRhQnVmLmxlbmd0aCk7XG4gIHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtcmFuZ2UnLCBcImJ5dGVzIDAtXCIgKyAoZGF0YUJ1Zi5sZW5ndGggLSAxKSArIFwiL1wiICsgZGF0YUJ1Zi5sZW5ndGgpO1xuICByZXMuc3RhdHVzQ29kZSA9IDIwMDtcbiAgcmV0dXJuIHJlcy5lbmQoaHRtbCk7XG59KTtcbiIsIkFycmF5LnByb3RvdHlwZS5maWx0ZXJQcm9wZXJ0eSA9IGZ1bmN0aW9uKGgsIGwpe1xuICAgIHZhciBnID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe1xuICAgICAgICB2YXIgbSA9IHQ/IHRbaF06bnVsbDtcbiAgICAgICAgdmFyIGQgPSBmYWxzZTtcbiAgICAgICAgaWYobSBpbnN0YW5jZW9mIEFycmF5KXtcbiAgICAgICAgICAgIGQgPSBtLmluY2x1ZGVzKGwpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGQgPSAobCA9PT0gdW5kZWZpbmVkKT8gZmFsc2U6bT09bDtcbiAgICAgICAgfVxuICAgICAgICBpZihkKXtcbiAgICAgICAgICAgIGcucHVzaCh0KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBnO1xufTtcblxuQXJyYXkucHJvdG90eXBlLmdldFByb3BlcnR5ID0gZnVuY3Rpb24oayl7XG4gICAgdmFyIHYgPSBuZXcgQXJyYXkoKTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odCl7XG4gICAgICAgIHZhciBtID0gdD8gdFtrXTpudWxsO1xuICAgICAgICB2LnB1c2gobSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHY7XG59XG5cbkFycmF5LnByb3RvdHlwZS5nZXRFYWNoID0gZnVuY3Rpb24oY29kZSl7XG4gICAgdmFyIHJldiA9IFtdO1xuICAgIGZvcih2YXIgaSA9IDAgOyBpIDwgdGhpcy5sZW5ndGggOyBpKyspe1xuICAgICAgICByZXYucHVzaCh0aGlzW2ldW2NvZGVdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldjtcbn07XG5cbkFycmF5LnByb3RvdHlwZS51bmlxID0gZnVuY3Rpb24oKXtcbiAgICB2YXIgYSA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbihiKXsgXG4gICAgICAgIGlmKGEuaW5kZXhPZihiKSA8IDApXG4gICAgICAgICAgICB7YVthLmxlbmd0aF0gPSBifVxuICAgIH0pO1xuICAgIHJldHVybiBhO1xufTtcblxuRm9ybV9mb3JtdWxhID0ge307XG5cblxuRm9ybV9mb3JtdWxhLm1peGluID0gZnVuY3Rpb24oZGVzdCwgc3JjKXtcbiAgICBmb3IodmFyIGtleSBpbiBzcmMpe1xuICAgICAgICBkZXN0W2tleV0gPSBzcmNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGRlc3Q7XG59O1xuXG5cbkZvcm1fZm9ybXVsYS5oYW5kZXJVc2VyT2JqZWN0ID0gZnVuY3Rpb24odSl7XG5cbiAgICBpZih1IGluc3RhbmNlb2YgQXJyYXkpe1xuICAgICAgICB2YXIgdXNlciA9IHt9O1xuXG4gICAgICAgIHVzZXIubmFtZSA9IHUuZ2V0UHJvcGVydHkoXCJuYW1lXCIpXG4gICAgICAgIHVzZXIub3JnYW5pemF0aW9uID0ge307XG4gICAgICAgIHVzZXIub3JnYW5pemF0aW9uLm5hbWUgPSB1LmdldFByb3BlcnR5KFwib3JnYW5pemF0aW9uXCIpLmdldFByb3BlcnR5KFwibmFtZVwiKTtcbiAgICAgICAgdXNlci5vcmdhbml6YXRpb24uZnVsbG5hbWUgPSB1LmdldFByb3BlcnR5KFwib3JnYW5pemF0aW9uXCIpLmdldFByb3BlcnR5KFwiZnVsbG5hbWVcIik7XG5cbiAgICAgICAgdXNlci5ociA9IHUuZ2V0UHJvcGVydHkoXCJoclwiKVxuXG4gICAgICAgIHVzZXIuc29ydF9ubyA9IHUuZ2V0UHJvcGVydHkoXCJzb3J0X25vXCIpXG5cblx0XHR1c2VyLm1vYmlsZSA9IHUuZ2V0UHJvcGVydHkoXCJtb2JpbGVcIilcblxuXHRcdHVzZXIud29ya19waG9uZSA9IHUuZ2V0UHJvcGVydHkoXCJ3b3JrX3Bob25lXCIpXG5cblx0XHR1c2VyLnBvc2l0aW9uID0gdS5nZXRQcm9wZXJ0eShcInBvc2l0aW9uXCIpXG5cbiAgICAgICAgdmFyIHVzZXJSb2xlcyA9IHUuZ2V0UHJvcGVydHkoXCJyb2xlc1wiKTtcbiAgICAgICAgdmFyIHJvbGVzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHVzZXJSb2xlcy5mb3JFYWNoKGZ1bmN0aW9uKGkpe1xuICAgICAgICAgICAgcm9sZXMgPSByb2xlcy5jb25jYXQoaSk7XG4gICAgICAgIH0pOyBcbiAgICAgICAgcm9sZXMudW5pcSgpO1xuICAgICAgICB1c2VyLnJvbGVzID0gcm9sZXM7XG4gICAgICAgIHJldHVybiB1c2VyO1xuICAgIH1lbHNle1xuICAgICAgICByZXR1cm4gdTtcbiAgICB9XG59XG5cbkZvcm1fZm9ybXVsYS5oYW5kZXJPcmdPYmplY3QgPSBmdW5jdGlvbihvKXtcblxuICAgIGlmKG8gaW5zdGFuY2VvZiBBcnJheSl7XG4gICAgICAgIHZhciBvcmcgPSB7fTtcblx0XHRvcmcuaWQgPSBvLmdldFByb3BlcnR5KFwiX2lkXCIpO1xuICAgICAgICBvcmcubmFtZSA9IG8uZ2V0UHJvcGVydHkoXCJuYW1lXCIpO1xuICAgICAgICBvcmcuZnVsbG5hbWUgPSBvLmdldFByb3BlcnR5KFwiZnVsbG5hbWVcIik7XG5cbiAgICAgICAgcmV0dXJuIG9yZztcbiAgICB9ZWxzZXtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfVxufVxuXG5cblxuLyoqXG4gICAgKiDojrflvpflhazlvI/pnIDopoHnlKjliLDnmoTliJ3lp4vlgLxcbiAgICAqIOi+k+WFpe+8mmZpZWxkcywgdmFsdWVzLCBhcHBsaWNhbnRcbiAgICAqIOi+k+WHuu+8ml9fdmFsdWVzXG4qKi9cbkZvcm1fZm9ybXVsYS5pbml0X2Zvcm11bGFfdmFsdWVzID0gZnVuY3Rpb24oZmllbGRzLCBhdXRvRm9ybURvYywgYXBwcm92ZXIsIGFwcGxpY2FudCwgc3BhY2VJZCl7XG4gICAgdmFyIF9fdmFsdWVzID0ge307XG4gICAgLy/nlLPor7fljZXkuK3loavnmoTlgLzlpITnkIZcbiAgICBpZihmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCAmJiBhdXRvRm9ybURvYykge1xuICAgICAgICAvL2RlYnVnZ2VyO1xuICAgICAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbihmaWVsZCl7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgICAgICBpZih0eXBlKSB7XG4gICAgICAgICAgICAgICAgaWYodHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAqIOWwhuihqOagvOWtl+auteeahOWAvOi/m+ihjOi9rOaNouWQjuS8oOWFpV9fdmFsdWVz5LitXG4gICAgICAgICAgICAgICAgICAgICogdmFsdWVz5Lit6KGo5qC855qE5YC85qC85byP5Li6XG4gICAgICAgICAgICAgICAgICAgICogW3tcImFcIjoxLFwiYlwiOjR9LHtcImFcIjoyLFwiYlwiOjV9LHtcImFcIjozLFwiYlwiOjZ9XVxuICAgICAgICAgICAgICAgICAgICAqIF9fdmFsdWVz6ZyA6KaB6L2s5YyW5Li65LiL6Z2i5qC85byP5LiU5ZKM5Li76KGo55qE5YC85LiA5qC35pS+5Yiw56ys5LiA5bGCXG4gICAgICAgICAgICAgICAgICAgICoge1wiYVwiOlsxLDIsM10sXCJiXCI6WzQsNSw2XX1cbiAgICAgICAgICAgICAgICAgICAgKiovXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZUZpZWxkcyA9IGZpZWxkLnNmaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVZhbHVlcyA9IGF1dG9Gb3JtRG9jW2ZpZWxkLmNvZGVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXVsYVRhYmxlVmFsdWVzID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3RhYmxlVmFsdWVzID0ge307XG4gICAgICAgICAgICAgICAgICAgIC8v5oyJ5YWs5byP55qE5qC85byP6L2s5o2i5YC85Li6X190YWJsZVZhbHVlc1xuICAgICAgICAgICAgICAgICAgICBpZih0YWJsZUZpZWxkcyAmJiB0YWJsZUZpZWxkcy5sZW5ndGggJiYgdGFibGVWYWx1ZXMgJiYgdGFibGVWYWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVWYWx1ZXMuZm9yRWFjaChmdW5jdGlvbih0YWJsZVZhbHVlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtdWxhVGFibGVWYWx1ZXMucHVzaChGb3JtX2Zvcm11bGEuaW5pdF9mb3JtdWxhX3ZhbHVlcyh0YWJsZUZpZWxkcywgdGFibGVWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+aMieS4u+ihqOeahOagvOW8j+i9rOaNol9fdGFibGVWYWx1ZXPliqDliLBcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRmllbGRzLmZvckVhY2goZnVuY3Rpb24odGFibGVmaWVsZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX190YWJsZVZhbHVlc1t0YWJsZWZpZWxkLmNvZGVdID0gZm9ybXVsYVRhYmxlVmFsdWVzLmdldEVhY2godGFibGVmaWVsZC5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZXMgPSBGb3JtX2Zvcm11bGEubWl4aW4oX192YWx1ZXMsIF9fdGFibGVWYWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICd1c2VyJyl7XG4gICAgICAgICAgICAgICAgICAgIF9fdmFsdWVzW2ZpZWxkLmNvZGVdID0gRm9ybV9mb3JtdWxhLmhhbmRlclVzZXJPYmplY3QoV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm11bGFVc2VyT2JqZWN0cyhzcGFjZUlkLCBhdXRvRm9ybURvY1tmaWVsZC5jb2RlXSkpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdncm91cCcpe1xuICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlc1tmaWVsZC5jb2RlXSA9IEZvcm1fZm9ybXVsYS5oYW5kZXJPcmdPYmplY3QoV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm11bGFPcmdPYmplY3RzKGF1dG9Gb3JtRG9jW2ZpZWxkLmNvZGVdKSk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gJ29kYXRhJyl7XG5cdFx0XHRcdFx0X192YWx1ZXNbZmllbGQuY29kZV0gPSBhdXRvRm9ybURvY1tmaWVsZC5jb2RlXSB8fCB7fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8v5q2k5aSE5Lygc3BhY2VJZOe7memAieS6uuaOp+S7tueahOaXp+aVsOaNruiuoeeul3JvbGVz5ZKMb3JnYW5pemF0aW9uXG4gICAgICAgICAgICAgICAgICAgIF9fdmFsdWVzW2ZpZWxkLmNvZGVdID0gYXV0b0Zvcm1Eb2NbZmllbGQuY29kZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKTtcbiAgICB9XG4gICAgLy/lvZPliY3lpITnkIbkurpcbiAgICBfX3ZhbHVlc1tcImFwcHJvdmVyXCJdID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm11bGFVc2VyT2JqZWN0KHNwYWNlSWQsIGFwcHJvdmVyKTtcbiAgICAvL+eUs+ivt+S6ulxuICAgIF9fdmFsdWVzW1wiYXBwbGljYW50XCJdID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm11bGFVc2VyT2JqZWN0KHNwYWNlSWQsIGFwcGxpY2FudCk7XG5cbiAgICByZXR1cm4gX192YWx1ZXM7XG59O1xuXG4iLCJNZXRlb3IucHVibGlzaCAnY2F0ZWdvcmllcycsIChzcGFjZUlkKSAtPlxuXHRjaGVjayBzcGFjZUlkLCBTdHJpbmdcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRyZXR1cm4gZGIuY2F0ZWdvcmllcy5maW5kKHsgc3BhY2U6IHNwYWNlSWQgfSwgeyBmaWVsZHM6IHsgbmFtZTogMSwgc3BhY2U6IDEsIHNvcnRfbm86IDEsIGFwcDogMSB9IH0pIiwiTWV0ZW9yLnB1Ymxpc2goJ2NhdGVnb3JpZXMnLCBmdW5jdGlvbihzcGFjZUlkKSB7XG4gIGNoZWNrKHNwYWNlSWQsIFN0cmluZyk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmNhdGVnb3JpZXMuZmluZCh7XG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMSxcbiAgICAgIHNwYWNlOiAxLFxuICAgICAgc29ydF9ubzogMSxcbiAgICAgIGFwcDogMVxuICAgIH1cbiAgfSk7XG59KTtcbiIsIlxuTWV0ZW9yLnB1Ymxpc2ggJ2Nmc19pbnN0YW5jZXMnLCAoaW5zdGFuY2VJZHMpLT5cblx0Y2hlY2soaW5zdGFuY2VJZHMsIEFycmF5KVxuXG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3MgaW5zdGFuY2VJZHNcblx0XHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRyZXR1cm4gY2ZzLmluc3RhbmNlcy5maW5kKHsnbWV0YWRhdGEuaW5zdGFuY2UnOiB7JGluOiBpbnN0YW5jZUlkc30gLCAkb3I6IFt7J21ldGFkYXRhLmlzX3ByaXZhdGUnOiB7JG5lOiB0cnVlfX0seydtZXRhZGF0YS5pc19wcml2YXRlJzogdHJ1ZSwgXCJtZXRhZGF0YS5vd25lclwiOiB0aGlzLnVzZXJJZH1dfSlcbiIsIk1ldGVvci5wdWJsaXNoKCdjZnNfaW5zdGFuY2VzJywgZnVuY3Rpb24oaW5zdGFuY2VJZHMpIHtcbiAgY2hlY2soaW5zdGFuY2VJZHMsIEFycmF5KTtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFpbnN0YW5jZUlkcykge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGNmcy5pbnN0YW5jZXMuZmluZCh7XG4gICAgJ21ldGFkYXRhLmluc3RhbmNlJzoge1xuICAgICAgJGluOiBpbnN0YW5jZUlkc1xuICAgIH0sXG4gICAgJG9yOiBbXG4gICAgICB7XG4gICAgICAgICdtZXRhZGF0YS5pc19wcml2YXRlJzoge1xuICAgICAgICAgICRuZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgICdtZXRhZGF0YS5pc19wcml2YXRlJzogdHJ1ZSxcbiAgICAgICAgXCJtZXRhZGF0YS5vd25lclwiOiB0aGlzLnVzZXJJZFxuICAgICAgfVxuICAgIF1cbiAgfSk7XG59KTtcbiIsIlxuXG5NZXRlb3IucHVibGlzaCAnZmxvd19wb3NpdGlvbnMnLCAoc3BhY2VJZCktPlxuXHRcblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXHRcblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0cmV0dXJuIGRiLmZsb3dfcG9zaXRpb25zLmZpbmQoe3NwYWNlOiBzcGFjZUlkfSwge2ZpZWxkczoge3JvbGU6MSwgdXNlcnM6IDEsIG9yZzogMX19KTtcbiIsIk1ldGVvci5wdWJsaXNoKCdmbG93X3Bvc2l0aW9ucycsIGZ1bmN0aW9uKHNwYWNlSWQpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gZGIuZmxvd19wb3NpdGlvbnMuZmluZCh7XG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgcm9sZTogMSxcbiAgICAgIHVzZXJzOiAxLFxuICAgICAgb3JnOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuIiwiTWV0ZW9yLnB1Ymxpc2hDb21wb3NpdGUgJ2Zsb3dfcG9zaXRpb25zX3RhYnVsYXInLCAodGFibGVOYW1lLCBpZHMsIGZpZWxkcyktPlxuXHRjaGVjayh0YWJsZU5hbWUsIFN0cmluZyk7XG5cdGNoZWNrKGlkcywgQXJyYXkpO1xuXHRjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpO1xuXG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR0aGlzLnVuYmxvY2soKVxuXG5cdGZpbmQ6IC0+XG5cdFx0dGhpcy51bmJsb2NrKClcblx0XHRkYi5mbG93X3Bvc2l0aW9ucy5maW5kIHtfaWQ6IHskaW46IGlkc319LCBmaWVsZHM6IGZpZWxkc1xuXG5cdGNoaWxkcmVuOiBbXG5cdFx0e1xuXHRcdFx0ZmluZDogKHBvc2l0aW9uKSAtPlxuXHRcdFx0XHRAdW5ibG9jaygpXG5cdFx0XHRcdCMgUHVibGlzaCB0aGUgcmVsYXRlZCBmbG93X3JvbGVzXG5cdFx0XHRcdGRiLmZsb3dfcm9sZXMuZmluZCB7IF9pZDogcG9zaXRpb24ucm9sZSB9LCBmaWVsZHM6IG5hbWU6IDFcblx0XHR9XG5cdFx0e1xuXHRcdFx0ZmluZDogKHBvc2l0aW9uKSAtPlxuXHRcdFx0XHRAdW5ibG9jaygpXG5cdFx0XHRcdCMgUHVibGlzaCB0aGUgcmVsYXRlZCBvcmdhbml6YXRpb25zXG5cdFx0XHRcdGRiLm9yZ2FuaXphdGlvbnMuZmluZCB7IF9pZDogcG9zaXRpb24ub3JnIH0sIGZpZWxkczogZnVsbG5hbWU6IDFcblx0XHR9XG5cdFx0e1xuXHRcdFx0ZmluZDogKHBvc2l0aW9uKSAtPlxuXHRcdFx0XHRAdW5ibG9jaygpXG5cdFx0XHRcdCMgUHVibGlzaCB0aGUgcmVsYXRlZCB1c2VyXG5cdFx0XHRcdGRiLnNwYWNlX3VzZXJzLmZpbmQge1xuXHRcdFx0XHRcdHNwYWNlOiBwb3NpdGlvbi5zcGFjZVxuXHRcdFx0XHRcdHVzZXI6ICRpbjogcG9zaXRpb24udXNlcnNcblx0XHRcdFx0fSwgZmllbGRzOlxuXHRcdFx0XHRcdHNwYWNlOiAxXG5cdFx0XHRcdFx0dXNlcjogMVxuXHRcdFx0XHRcdG5hbWU6IDFcblx0XHR9XG5cdF0iLCJNZXRlb3IucHVibGlzaENvbXBvc2l0ZSgnZmxvd19wb3NpdGlvbnNfdGFidWxhcicsIGZ1bmN0aW9uKHRhYmxlTmFtZSwgaWRzLCBmaWVsZHMpIHtcbiAgY2hlY2sodGFibGVOYW1lLCBTdHJpbmcpO1xuICBjaGVjayhpZHMsIEFycmF5KTtcbiAgY2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKTtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgdGhpcy51bmJsb2NrKCk7XG4gIHJldHVybiB7XG4gICAgZmluZDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLnVuYmxvY2soKTtcbiAgICAgIHJldHVybiBkYi5mbG93X3Bvc2l0aW9ucy5maW5kKHtcbiAgICAgICAgX2lkOiB7XG4gICAgICAgICAgJGluOiBpZHNcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBmaWVsZHM6IGZpZWxkc1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBjaGlsZHJlbjogW1xuICAgICAge1xuICAgICAgICBmaW5kOiBmdW5jdGlvbihwb3NpdGlvbikge1xuICAgICAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgICAgIHJldHVybiBkYi5mbG93X3JvbGVzLmZpbmQoe1xuICAgICAgICAgICAgX2lkOiBwb3NpdGlvbi5yb2xlXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgIG5hbWU6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBmaW5kOiBmdW5jdGlvbihwb3NpdGlvbikge1xuICAgICAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgICAgIHJldHVybiBkYi5vcmdhbml6YXRpb25zLmZpbmQoe1xuICAgICAgICAgICAgX2lkOiBwb3NpdGlvbi5vcmdcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgZnVsbG5hbWU6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBmaW5kOiBmdW5jdGlvbihwb3NpdGlvbikge1xuICAgICAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgICAgIHJldHVybiBkYi5zcGFjZV91c2Vycy5maW5kKHtcbiAgICAgICAgICAgIHNwYWNlOiBwb3NpdGlvbi5zcGFjZSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgJGluOiBwb3NpdGlvbi51c2Vyc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICBzcGFjZTogMSxcbiAgICAgICAgICAgICAgdXNlcjogMSxcbiAgICAgICAgICAgICAgbmFtZTogMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufSk7XG4iLCJcblxuXHRNZXRlb3IucHVibGlzaCAnZmxvd19yb2xlcycsIChzcGFjZUlkKS0+XG5cdFx0XG5cdFx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cdFx0XG5cdFx0dW5sZXNzIHNwYWNlSWRcblx0XHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXG5cdFx0cmV0dXJuIGRiLmZsb3dfcm9sZXMuZmluZCh7c3BhY2U6IHNwYWNlSWR9LCB7ZmllbGRzOiB7bmFtZToxfX0pO1xuIiwiTWV0ZW9yLnB1Ymxpc2goJ2Zsb3dfcm9sZXMnLCBmdW5jdGlvbihzcGFjZUlkKSB7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZsb3dfcm9sZXMuZmluZCh7XG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMVxuICAgIH1cbiAgfSk7XG59KTtcbiIsIk1ldGVvci5wdWJsaXNoICdmbG93cycsIChzcGFjZUlkKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3Mgc3BhY2VJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHQjIOesrOS4gOasoeiuoumYheaXtuWIneWni+WMluW3peS9nOWMulxuXHRpZiBkYi5mbG93cy5maW5kKHtzcGFjZTogc3BhY2VJZH0pLmNvdW50KCkgPT0gMFxuXHRcdGRiLnNwYWNlcy5jcmVhdGVUZW1wbGF0ZUZvcm1BbmRGbG93KHNwYWNlSWQpXG5cblx0cmV0dXJuIGRiLmZsb3dzLmZpbmQoe3NwYWNlOiBzcGFjZUlkfSwge1xuXHRcdGZpZWxkczoge1xuXHRcdFx0bmFtZTogMSxcblx0XHRcdGZvcm06IDEsXG5cdFx0XHRzdGF0ZTogMSxcblx0XHRcdHBlcm1zOiAxLFxuXHRcdFx0c3BhY2U6IDEsXG5cdFx0XHRjb21wYW55X2lkOiAxLFxuXHRcdFx0c29ydF9ubzogMSxcblx0XHRcdGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG5cdFx0XHRkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG5cdFx0XHRlbmFibGVfYW1pc2Zvcm06IDFcblx0XHR9XG5cdH0pXG5cbk1ldGVvci5wdWJsaXNoICdpbnN0YW5jZV9mbG93JywgKHNwYWNlSWQsIGZsb3dJZCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIGZsb3dJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRyZXR1cm4gZGIuZmxvd3MuZmluZCh7X2lkOiBmbG93SWQsIHNwYWNlOiBzcGFjZUlkfSwge1xuXHRcdGZpZWxkczoge1xuXHRcdFx0bmFtZTogMSxcblx0XHRcdGZvcm06IDEsXG5cdFx0XHRzdGF0ZTogMSxcblx0XHRcdHBlcm1zOiAxLFxuXHRcdFx0c3BhY2U6IDEsXG5cdFx0XHRjb21wYW55X2lkOiAxLFxuXHRcdFx0c29ydF9ubzogMSxcblx0XHRcdGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG5cdFx0XHRkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG5cdFx0XHRlbmFibGVfYW1pc2Zvcm06IDFcblx0XHR9XG5cdH0pXG5cblxuTWV0ZW9yLnB1Ymxpc2ggJ2Zsb3dfdmVyc2lvbicsIChzcGFjZUlkLCBmbG93SWQsIHZlcnNpb25JZCkgLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBmbG93SWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHZlcnNpb25JZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXG5cdHNlbGYgPSB0aGlzO1xuXG5cdGdldEZsb3dWZXJzaW9uID0gKGlkICwgdmVyc2lvbklkKS0+XG5cdFx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoe19pZCA6IGlkfSk7XG5cdFx0aWYgZmxvd1xuXHRcdFx0Zmxvd192ZXJzaW9uID0gZmxvdy5jdXJyZW50XG5cdFx0XHRmbG93X3ZlcnNpb24ubGF0ZXN0ID0gdHJ1ZVxuXG5cdFx0XHRpZiBmbG93X3ZlcnNpb24uX2lkICE9IHZlcnNpb25JZFxuXHRcdFx0XHRmbG93X3ZlcnNpb24gPSBmbG93Lmhpc3RvcnlzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgdmVyc2lvbklkKVxuXHRcdFx0XHRmbG93X3ZlcnNpb24ubGF0ZXN0ID0gZmFsc2VcblxuXHRcdFx0cmV0dXJuIGZsb3dfdmVyc2lvblxuXHRoYW5kbGUgPSBkYi5mbG93cy5maW5kKHtfaWQ6IGZsb3dJZH0sIHtmaWVsZHM6IHtfaWQ6IDEsIFwiY3VycmVudC5tb2RpZmllZFwiOiAxfX0pLm9ic2VydmVDaGFuZ2VzIHtcblx0XHRjaGFuZ2VkOiAoaWQpLT5cblx0XHRcdHNlbGYuY2hhbmdlZChcImZsb3dfdmVyc2lvbnNcIiwgdmVyc2lvbklkLCBnZXRGbG93VmVyc2lvbihpZCwgdmVyc2lvbklkKSk7XG5cdH1cblxuXG5cdHNlbGYuYWRkZWQoXCJmbG93X3ZlcnNpb25zXCIsIHZlcnNpb25JZCwgZ2V0Rmxvd1ZlcnNpb24oZmxvd0lkLCB2ZXJzaW9uSWQpKTtcblx0c2VsZi5yZWFkeSgpO1xuXHRzZWxmLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKVxuXG5NZXRlb3IucHVibGlzaCAnZGlzdHJpYnV0ZV9vcHRpb25hbF9mbG93cycsIChmbG93X2lkcyktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIGZsb3dfaWRzXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHJldHVybiBkYi5mbG93cy5maW5kKHtfaWQ6IHskaW46IGZsb3dfaWRzfX0sIHtcblx0XHRmaWVsZHM6IHtcblx0XHRcdG5hbWU6IDEsXG5cdFx0XHRmb3JtOiAxLFxuXHRcdFx0c3RhdGU6IDEsXG5cdFx0XHRwZXJtczogMSxcblx0XHRcdHNwYWNlOiAxLFxuXHRcdFx0ZGlzdHJpYnV0ZV9vcHRpb25hbF91c2VyczogMSxcblx0XHRcdGRpc3RyaWJ1dGVfdG9fc2VsZjogMSxcblx0XHRcdGRpc3RyaWJ1dGVfZW5kX25vdGlmaWNhdGlvbjogMSxcblx0XHRcdGNvbXBhbnlfaWQ6IDEsXG5cdFx0XHRlbmFibGVfYW1pc2Zvcm06IDFcblx0XHR9XG5cdH0pXG5cbk1ldGVvci5wdWJsaXNoICdmbG93JywgKHNwYWNlSWQsIGZsb3dJZCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIGZsb3dJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXG5cdHJldHVybiBkYi5mbG93cy5maW5kKHtfaWQ6IGZsb3dJZCwgc3BhY2U6IHNwYWNlSWR9LCB7XG5cdFx0ZmllbGRzOiB7XG5cdFx0XHRwcmludF90ZW1wbGF0ZTogMSxcblx0XHRcdGluc3RhbmNlX3RlbXBsYXRlOiAxLFxuXHRcdFx0ZXZlbnRzOiAxLFxuXHRcdFx0ZGlzdHJpYnV0ZV9vcHRpb25hbF91c2VyczogMSxcblx0XHRcdGRpc3RyaWJ1dGVfdG9fc2VsZjogMSxcblx0XHRcdHVwbG9hZF9hZnRlcl9iZWluZ19kaXN0cmlidXRlZDogMSxcblx0XHRcdGRpc3RyaWJ1dGVfZW5kX25vdGlmaWNhdGlvbjogMSxcblx0XHRcdGNvbXBhbnlfaWQ6IDEsXG5cdFx0XHRhbGxvd19zZWxlY3Rfc3RlcDogMSxcblx0XHRcdGVuYWJsZV9hbWlzZm9ybTogMVxuXHRcdH1cblx0fSlcbk1ldGVvci5wdWJsaXNoICdmbG93X2ZpbGVzJywgKHNwYWNlSWQsIGZsb3dJZCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIGZsb3dJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRyZXR1cm4gY2ZzLmZpbGVzLmZpbmQoeyAnbWV0YWRhdGEuc3BhY2UnOiBzcGFjZUlkLCAnbWV0YWRhdGEub2JqZWN0X25hbWUnOiAnZmxvd3MnLCAnbWV0YWRhdGEucmVjb3JkX2lkJzogZmxvd0lkIH0pXG5cbk1ldGVvci5wdWJsaXNoQ29tcG9zaXRlICdmbG93c190YWJ1bGFyJywgKHRhYmxlTmFtZSwgaWRzLCBmaWVsZHMpLT5cblx0Y2hlY2sodGFibGVOYW1lLCBTdHJpbmcpO1xuXHRjaGVjayhpZHMsIEFycmF5KTtcblx0Y2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKTtcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dGhpcy51bmJsb2NrKClcblxuXHRmaW5kOiAtPlxuXHRcdHRoaXMudW5ibG9jaygpXG5cdFx0ZGIuZmxvd3MuZmluZCB7X2lkOiB7JGluOiBpZHN9fSwgZmllbGRzOiBmaWVsZHNcblxuXHRjaGlsZHJlbjogW1xuXHRcdHtcblx0XHRcdGZpbmQ6IChmbG93KSAtPlxuXHRcdFx0XHRAdW5ibG9jaygpXG5cdFx0XHRcdCMgUHVibGlzaCB0aGUgcmVsYXRlZCB1c2VyXG5cdFx0XHRcdGRiLnNwYWNlX3VzZXJzLmZpbmQge1xuXHRcdFx0XHRcdHNwYWNlOiBmbG93LnNwYWNlLFxuXHRcdFx0XHRcdHVzZXI6IGZsb3cuY3VycmVudC5tb2RpZmllZF9ieVxuXHRcdFx0XHR9LCBmaWVsZHM6XG5cdFx0XHRcdFx0c3BhY2U6IDFcblx0XHRcdFx0XHR1c2VyOiAxXG5cdFx0XHRcdFx0bmFtZTogMVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0ZmluZDogKGZsb3cpIC0+XG5cdFx0XHRcdEB1bmJsb2NrKClcblx0XHRcdFx0IyBQdWJsaXNoIHRoZSByZWxhdGVkIHVzZXJcblx0XHRcdFx0ZGIuZm9ybXMuZmluZCB7XG5cdFx0XHRcdFx0c3BhY2U6IGZsb3cuc3BhY2UsXG5cdFx0XHRcdFx0X2lkOiBmbG93LmZvcm1cblx0XHRcdFx0fSwgZmllbGRzOlxuXHRcdFx0XHRcdHNwYWNlOiAxXG5cdFx0XHRcdFx0X2lkOiAxXG5cdFx0XHRcdFx0bmFtZTogMSxcblx0XHRcdFx0XHRjYXRlZ29yeTogMVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0ZmluZDogKGZsb3cpIC0+XG5cdFx0XHRcdEB1bmJsb2NrKClcblx0XHRcdFx0IyBQdWJsaXNoIHRoZSByZWxhdGVkIHVzZXJcblx0XHRcdFx0ZGIuY2F0ZWdvcmllcy5maW5kIHtcblx0XHRcdFx0XHRzcGFjZTogZmxvdy5zcGFjZVxuXHRcdFx0XHR9LCBmaWVsZHM6XG5cdFx0XHRcdFx0c3BhY2U6IDFcblx0XHRcdFx0XHRfaWQ6IDFcblx0XHRcdFx0XHRuYW1lOiAxXG5cdFx0fVxuXHRdIiwiTWV0ZW9yLnB1Ymxpc2goJ2Zsb3dzJywgZnVuY3Rpb24oc3BhY2VJZCkge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmIChkYi5mbG93cy5maW5kKHtcbiAgICBzcGFjZTogc3BhY2VJZFxuICB9KS5jb3VudCgpID09PSAwKSB7XG4gICAgZGIuc3BhY2VzLmNyZWF0ZVRlbXBsYXRlRm9ybUFuZEZsb3coc3BhY2VJZCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZsb3dzLmZpbmQoe1xuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIG5hbWU6IDEsXG4gICAgICBmb3JtOiAxLFxuICAgICAgc3RhdGU6IDEsXG4gICAgICBwZXJtczogMSxcbiAgICAgIHNwYWNlOiAxLFxuICAgICAgY29tcGFueV9pZDogMSxcbiAgICAgIHNvcnRfbm86IDEsXG4gICAgICBkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzOiAxLFxuICAgICAgZGlzdHJpYnV0ZV90b19zZWxmOiAxLFxuICAgICAgZW5hYmxlX2FtaXNmb3JtOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuXG5NZXRlb3IucHVibGlzaCgnaW5zdGFuY2VfZmxvdycsIGZ1bmN0aW9uKHNwYWNlSWQsIGZsb3dJZCkge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghZmxvd0lkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gZGIuZmxvd3MuZmluZCh7XG4gICAgX2lkOiBmbG93SWQsXG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMSxcbiAgICAgIGZvcm06IDEsXG4gICAgICBzdGF0ZTogMSxcbiAgICAgIHBlcm1zOiAxLFxuICAgICAgc3BhY2U6IDEsXG4gICAgICBjb21wYW55X2lkOiAxLFxuICAgICAgc29ydF9ubzogMSxcbiAgICAgIGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG4gICAgICBkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG4gICAgICBlbmFibGVfYW1pc2Zvcm06IDFcbiAgICB9XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKCdmbG93X3ZlcnNpb24nLCBmdW5jdGlvbihzcGFjZUlkLCBmbG93SWQsIHZlcnNpb25JZCkge1xuICB2YXIgZ2V0Rmxvd1ZlcnNpb24sIGhhbmRsZSwgc2VsZjtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWZsb3dJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCF2ZXJzaW9uSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHNlbGYgPSB0aGlzO1xuICBnZXRGbG93VmVyc2lvbiA9IGZ1bmN0aW9uKGlkLCB2ZXJzaW9uSWQpIHtcbiAgICB2YXIgZmxvdywgZmxvd192ZXJzaW9uO1xuICAgIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtcbiAgICAgIF9pZDogaWRcbiAgICB9KTtcbiAgICBpZiAoZmxvdykge1xuICAgICAgZmxvd192ZXJzaW9uID0gZmxvdy5jdXJyZW50O1xuICAgICAgZmxvd192ZXJzaW9uLmxhdGVzdCA9IHRydWU7XG4gICAgICBpZiAoZmxvd192ZXJzaW9uLl9pZCAhPT0gdmVyc2lvbklkKSB7XG4gICAgICAgIGZsb3dfdmVyc2lvbiA9IGZsb3cuaGlzdG9yeXMuZmluZFByb3BlcnR5QnlQSyhcIl9pZFwiLCB2ZXJzaW9uSWQpO1xuICAgICAgICBmbG93X3ZlcnNpb24ubGF0ZXN0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmxvd192ZXJzaW9uO1xuICAgIH1cbiAgfTtcbiAgaGFuZGxlID0gZGIuZmxvd3MuZmluZCh7XG4gICAgX2lkOiBmbG93SWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgX2lkOiAxLFxuICAgICAgXCJjdXJyZW50Lm1vZGlmaWVkXCI6IDFcbiAgICB9XG4gIH0pLm9ic2VydmVDaGFuZ2VzKHtcbiAgICBjaGFuZ2VkOiBmdW5jdGlvbihpZCkge1xuICAgICAgcmV0dXJuIHNlbGYuY2hhbmdlZChcImZsb3dfdmVyc2lvbnNcIiwgdmVyc2lvbklkLCBnZXRGbG93VmVyc2lvbihpZCwgdmVyc2lvbklkKSk7XG4gICAgfVxuICB9KTtcbiAgc2VsZi5hZGRlZChcImZsb3dfdmVyc2lvbnNcIiwgdmVyc2lvbklkLCBnZXRGbG93VmVyc2lvbihmbG93SWQsIHZlcnNpb25JZCkpO1xuICBzZWxmLnJlYWR5KCk7XG4gIHJldHVybiBzZWxmLm9uU3RvcChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaGFuZGxlLnN0b3AoKTtcbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2goJ2Rpc3RyaWJ1dGVfb3B0aW9uYWxfZmxvd3MnLCBmdW5jdGlvbihmbG93X2lkcykge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWZsb3dfaWRzKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gZGIuZmxvd3MuZmluZCh7XG4gICAgX2lkOiB7XG4gICAgICAkaW46IGZsb3dfaWRzXG4gICAgfVxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBuYW1lOiAxLFxuICAgICAgZm9ybTogMSxcbiAgICAgIHN0YXRlOiAxLFxuICAgICAgcGVybXM6IDEsXG4gICAgICBzcGFjZTogMSxcbiAgICAgIGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG4gICAgICBkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG4gICAgICBkaXN0cmlidXRlX2VuZF9ub3RpZmljYXRpb246IDEsXG4gICAgICBjb21wYW55X2lkOiAxLFxuICAgICAgZW5hYmxlX2FtaXNmb3JtOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuXG5NZXRlb3IucHVibGlzaCgnZmxvdycsIGZ1bmN0aW9uKHNwYWNlSWQsIGZsb3dJZCkge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghZmxvd0lkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gZGIuZmxvd3MuZmluZCh7XG4gICAgX2lkOiBmbG93SWQsXG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgcHJpbnRfdGVtcGxhdGU6IDEsXG4gICAgICBpbnN0YW5jZV90ZW1wbGF0ZTogMSxcbiAgICAgIGV2ZW50czogMSxcbiAgICAgIGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG4gICAgICBkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG4gICAgICB1cGxvYWRfYWZ0ZXJfYmVpbmdfZGlzdHJpYnV0ZWQ6IDEsXG4gICAgICBkaXN0cmlidXRlX2VuZF9ub3RpZmljYXRpb246IDEsXG4gICAgICBjb21wYW55X2lkOiAxLFxuICAgICAgYWxsb3dfc2VsZWN0X3N0ZXA6IDEsXG4gICAgICBlbmFibGVfYW1pc2Zvcm06IDFcbiAgICB9XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKCdmbG93X2ZpbGVzJywgZnVuY3Rpb24oc3BhY2VJZCwgZmxvd0lkKSB7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFmbG93SWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHJldHVybiBjZnMuZmlsZXMuZmluZCh7XG4gICAgJ21ldGFkYXRhLnNwYWNlJzogc3BhY2VJZCxcbiAgICAnbWV0YWRhdGEub2JqZWN0X25hbWUnOiAnZmxvd3MnLFxuICAgICdtZXRhZGF0YS5yZWNvcmRfaWQnOiBmbG93SWRcbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2hDb21wb3NpdGUoJ2Zsb3dzX3RhYnVsYXInLCBmdW5jdGlvbih0YWJsZU5hbWUsIGlkcywgZmllbGRzKSB7XG4gIGNoZWNrKHRhYmxlTmFtZSwgU3RyaW5nKTtcbiAgY2hlY2soaWRzLCBBcnJheSk7XG4gIGNoZWNrKGZpZWxkcywgTWF0Y2guT3B0aW9uYWwoT2JqZWN0KSk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHRoaXMudW5ibG9jaygpO1xuICByZXR1cm4ge1xuICAgIGZpbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy51bmJsb2NrKCk7XG4gICAgICByZXR1cm4gZGIuZmxvd3MuZmluZCh7XG4gICAgICAgIF9pZDoge1xuICAgICAgICAgICRpbjogaWRzXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiBmaWVsZHNcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIHtcbiAgICAgICAgZmluZDogZnVuY3Rpb24oZmxvdykge1xuICAgICAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgICAgIHJldHVybiBkYi5zcGFjZV91c2Vycy5maW5kKHtcbiAgICAgICAgICAgIHNwYWNlOiBmbG93LnNwYWNlLFxuICAgICAgICAgICAgdXNlcjogZmxvdy5jdXJyZW50Lm1vZGlmaWVkX2J5XG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgIHNwYWNlOiAxLFxuICAgICAgICAgICAgICB1c2VyOiAxLFxuICAgICAgICAgICAgICBuYW1lOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmluZDogZnVuY3Rpb24oZmxvdykge1xuICAgICAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgICAgIHJldHVybiBkYi5mb3Jtcy5maW5kKHtcbiAgICAgICAgICAgIHNwYWNlOiBmbG93LnNwYWNlLFxuICAgICAgICAgICAgX2lkOiBmbG93LmZvcm1cbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgc3BhY2U6IDEsXG4gICAgICAgICAgICAgIF9pZDogMSxcbiAgICAgICAgICAgICAgbmFtZTogMSxcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBmaW5kOiBmdW5jdGlvbihmbG93KSB7XG4gICAgICAgICAgdGhpcy51bmJsb2NrKCk7XG4gICAgICAgICAgcmV0dXJuIGRiLmNhdGVnb3JpZXMuZmluZCh7XG4gICAgICAgICAgICBzcGFjZTogZmxvdy5zcGFjZVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICBzcGFjZTogMSxcbiAgICAgICAgICAgICAgX2lkOiAxLFxuICAgICAgICAgICAgICBuYW1lOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59KTtcbiIsIk1ldGVvci5wdWJsaXNoICdmb3JtcycsIChzcGFjZUlkKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3Mgc3BhY2VJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXG5cdHJldHVybiBkYi5mb3Jtcy5maW5kKHtzcGFjZTogc3BhY2VJZH0sIHtmaWVsZHM6IHtuYW1lOiAxLCBjYXRlZ29yeTogMSwgc3RhdGU6IDEsIGRlc2NyaXB0aW9uOiAxLCBpbnN0YW5jZV9zdHlsZTogMSwgYW1pc19zY2hlbWE6IDF9fSlcblxuTWV0ZW9yLnB1Ymxpc2ggJ2luc3RhbmNlX2Zvcm0nLCAoc3BhY2VJZCwgZm9ybUlkKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3Mgc3BhY2VJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXG5cdHJldHVybiBkYi5mb3Jtcy5maW5kKHtfaWQ6IGZvcm1JZCwgc3BhY2U6IHNwYWNlSWR9LCB7ZmllbGRzOiB7bmFtZTogMSwgY2F0ZWdvcnk6IDEsIHN0YXRlOiAxLCBkZXNjcmlwdGlvbjogMSwgaW5zdGFuY2Vfc3R5bGU6IDEsIGFtaXNfc2NoZW1hOiAxfX0pXG5cblxuTWV0ZW9yLnB1Ymxpc2ggJ2Zvcm1fdmVyc2lvbicsIChzcGFjZUlkLCBmb3JtSWQsIHZlcnNpb25JZCkgLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBmb3JtSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHZlcnNpb25JZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXG5cdHNlbGYgPSB0aGlzO1xuXG5cdGdldEZvcm1WZXJzaW9uID0gKGlkICwgdmVyc2lvbklkKS0+XG5cdFx0Zm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoe19pZCA6IGlkfSk7XG5cdFx0aWYgIWZvcm1cblx0XHRcdHJldHVybiB7fVxuXHRcdGZvcm1fdmVyc2lvbiA9IGZvcm0uY3VycmVudFxuXHRcdGZvcm1fdmVyc2lvbi5sYXRlc3QgPSB0cnVlXG5cdFx0aWYgZm9ybV92ZXJzaW9uLl9pZCAhPSB2ZXJzaW9uSWRcblx0XHRcdGZvcm1fdmVyc2lvbiA9IGZvcm0uaGlzdG9yeXMuZmluZFByb3BlcnR5QnlQSyhcIl9pZFwiLCB2ZXJzaW9uSWQpXG5cdFx0XHRmb3JtX3ZlcnNpb24ubGF0ZXN0ID0gZmFsc2Vcblx0XHRyZXR1cm4gZm9ybV92ZXJzaW9uXG5cblx0aGFuZGxlID0gZGIuZm9ybXMuZmluZCh7X2lkOiBmb3JtSWR9LCB7ZmllbGRzOiB7X2lkOiAxLCBcImN1cnJlbnQubW9kaWZpZWRcIjogMX19KS5vYnNlcnZlQ2hhbmdlcyB7XG5cdFx0Y2hhbmdlZDogKGlkKS0+XG5cdFx0XHRzZWxmLmNoYW5nZWQoXCJmb3JtX3ZlcnNpb25zXCIsIHZlcnNpb25JZCwgZ2V0Rm9ybVZlcnNpb24oaWQsIHZlcnNpb25JZCkpO1xuXHR9XG5cblx0c2VsZi5hZGRlZChcImZvcm1fdmVyc2lvbnNcIiwgdmVyc2lvbklkLCBnZXRGb3JtVmVyc2lvbihmb3JtSWQsIHZlcnNpb25JZCkpO1xuXHRzZWxmLnJlYWR5KCk7XG5cdHNlbGYub25TdG9wICgpLT5cblx0XHRoYW5kbGUuc3RvcCgpIiwiTWV0ZW9yLnB1Ymxpc2goJ2Zvcm1zJywgZnVuY3Rpb24oc3BhY2VJZCkge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHJldHVybiBkYi5mb3Jtcy5maW5kKHtcbiAgICBzcGFjZTogc3BhY2VJZFxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBuYW1lOiAxLFxuICAgICAgY2F0ZWdvcnk6IDEsXG4gICAgICBzdGF0ZTogMSxcbiAgICAgIGRlc2NyaXB0aW9uOiAxLFxuICAgICAgaW5zdGFuY2Vfc3R5bGU6IDEsXG4gICAgICBhbWlzX3NjaGVtYTogMVxuICAgIH1cbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2goJ2luc3RhbmNlX2Zvcm0nLCBmdW5jdGlvbihzcGFjZUlkLCBmb3JtSWQpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gZGIuZm9ybXMuZmluZCh7XG4gICAgX2lkOiBmb3JtSWQsXG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMSxcbiAgICAgIGNhdGVnb3J5OiAxLFxuICAgICAgc3RhdGU6IDEsXG4gICAgICBkZXNjcmlwdGlvbjogMSxcbiAgICAgIGluc3RhbmNlX3N0eWxlOiAxLFxuICAgICAgYW1pc19zY2hlbWE6IDFcbiAgICB9XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKCdmb3JtX3ZlcnNpb24nLCBmdW5jdGlvbihzcGFjZUlkLCBmb3JtSWQsIHZlcnNpb25JZCkge1xuICB2YXIgZ2V0Rm9ybVZlcnNpb24sIGhhbmRsZSwgc2VsZjtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWZvcm1JZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCF2ZXJzaW9uSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHNlbGYgPSB0aGlzO1xuICBnZXRGb3JtVmVyc2lvbiA9IGZ1bmN0aW9uKGlkLCB2ZXJzaW9uSWQpIHtcbiAgICB2YXIgZm9ybSwgZm9ybV92ZXJzaW9uO1xuICAgIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtcbiAgICAgIF9pZDogaWRcbiAgICB9KTtcbiAgICBpZiAoIWZvcm0pIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgZm9ybV92ZXJzaW9uID0gZm9ybS5jdXJyZW50O1xuICAgIGZvcm1fdmVyc2lvbi5sYXRlc3QgPSB0cnVlO1xuICAgIGlmIChmb3JtX3ZlcnNpb24uX2lkICE9PSB2ZXJzaW9uSWQpIHtcbiAgICAgIGZvcm1fdmVyc2lvbiA9IGZvcm0uaGlzdG9yeXMuZmluZFByb3BlcnR5QnlQSyhcIl9pZFwiLCB2ZXJzaW9uSWQpO1xuICAgICAgZm9ybV92ZXJzaW9uLmxhdGVzdCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybV92ZXJzaW9uO1xuICB9O1xuICBoYW5kbGUgPSBkYi5mb3Jtcy5maW5kKHtcbiAgICBfaWQ6IGZvcm1JZFxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBfaWQ6IDEsXG4gICAgICBcImN1cnJlbnQubW9kaWZpZWRcIjogMVxuICAgIH1cbiAgfSkub2JzZXJ2ZUNoYW5nZXMoe1xuICAgIGNoYW5nZWQ6IGZ1bmN0aW9uKGlkKSB7XG4gICAgICByZXR1cm4gc2VsZi5jaGFuZ2VkKFwiZm9ybV92ZXJzaW9uc1wiLCB2ZXJzaW9uSWQsIGdldEZvcm1WZXJzaW9uKGlkLCB2ZXJzaW9uSWQpKTtcbiAgICB9XG4gIH0pO1xuICBzZWxmLmFkZGVkKFwiZm9ybV92ZXJzaW9uc1wiLCB2ZXJzaW9uSWQsIGdldEZvcm1WZXJzaW9uKGZvcm1JZCwgdmVyc2lvbklkKSk7XG4gIHNlbGYucmVhZHkoKTtcbiAgcmV0dXJuIHNlbGYub25TdG9wKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBoYW5kbGUuc3RvcCgpO1xuICB9KTtcbn0pO1xuIiwiTWV0ZW9yLnB1Ymxpc2ggJ2luc3RhbmNlX2RhdGEnLCAoaW5zdGFuY2VJZCwgYm94KS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3MgKGluc3RhbmNlSWQgJiYgZGIuaW5zdGFuY2VzLmZpbmQoe19pZDogaW5zdGFuY2VJZH0pLmNvdW50KCkpXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHNlbGYgPSB0aGlzO1xuXG5cdG1pbmlBcHByb3ZlRmllbGRzID0gWydfaWQnLCAnaXNfZmluaXNoZWQnLCAndXNlcicsICdoYW5kbGVyJywgJ2hhbmRsZXJfbmFtZScsICd0eXBlJywgJ3N0YXJ0X2RhdGUnLCAnZGVzY3JpcHRpb24nLFxuXHRcdCdpc19yZWFkJywgJ2p1ZGdlJywgJ2ZpbmlzaF9kYXRlJywgJ2Zyb21fdXNlcl9uYW1lJywgJ2Zyb21fdXNlcicsICdjY19kZXNjcmlwdGlvbicsICdhdXRvX3N1Ym1pdHRlZCddXG5cblx0dHJpZ2dlckNoYW5nZUZpZWxkcyA9IFsnZm9ybV92ZXJzaW9uJywgJ2Zsb3dfdmVyc2lvbicsICdyZWxhdGVkX2luc3RhbmNlcycsICdfbXlfYXBwcm92ZV9yZWFkX2RhdGVzJywgJ3ZhbHVlcycsICdjaGFuZ2VfdGltZSddXG5cblx0dHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlcyA9IHt9XG5cblx0aW5zdGFuY2VfZmllbGRzXzAgPSB7XG5cdFx0XCJyZWNvcmRfc3luY2VkXCI6IDAsXG5cbiNcdFx0XCJ0cmFjZXMuYXBwcm92ZXMuaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWVcIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5oYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMuaGFuZGxlcl9vcmdhbml6YXRpb25cIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5jb3N0X3RpbWVcIjogMCxcbiNcdFx0XCJ0cmFjZXMuYXBwcm92ZXMucmVhZF9kYXRlXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMuaXNfZXJyb3JcIjogMCxcblx0XHQjIFwidHJhY2VzLmFwcHJvdmVzLnVzZXJfbmFtZVwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLmRlYWRsaW5lXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMucmVtaW5kX2RhdGVcIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5yZW1pbmRlZF9jb3VudFwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLm1vZGlmaWVkX2J5XCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMubW9kaWZpZWRcIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5nZW9sb2NhdGlvblwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLmNjX3VzZXJzXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMuZnJvbV9hcHByb3ZlX2lkXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMudmFsdWVzX2hpc3RvcnlcIjogMFxuXHR9XG5cblx0Z2V0TXlhcHByb3ZlTW9kaWZpZWQgPSAodHJhY2VzKS0+XG5cdFx0bXlBcHByb3ZlTW9kaWZpZWRzID0gbmV3IEFycmF5KClcblxuXHRcdHRyYWNlcz8uZm9yRWFjaCAodHJhY2UpLT5cblx0XHRcdHRyYWNlPy5hcHByb3Zlcz8uZm9yRWFjaCAoYXBwcm92ZSktPlxuXHRcdFx0XHRpZiAoYXBwcm92ZS51c2VyID09IHNlbGYudXNlcklkIHx8IGFwcHJvdmUuaGFuZGxlciA9PSBzZWxmLnVzZXJJZClcblx0XHRcdFx0IyAmJiAhYXBwcm92ZS5pc19maW5pc2hlZFxuI1x0XHRcdFx0XHRjb25zb2xlLmxvZyhcImFwcHJvdmVcIiwgYXBwcm92ZS5faWQsIGFwcHJvdmUucmVhZF9kYXRlKVxuXG5cdFx0XHRcdFx0bXlBcHByb3ZlTW9kaWZpZWRzLnB1c2goYXBwcm92ZS5yZWFkX2RhdGUpXG5cblx0XHRyZXR1cm4gbXlBcHByb3ZlTW9kaWZpZWRzXG5cblxuXHRnZXRNaW5pSW5zdGFuY2UgPSAoX2luc3RhbmNlSWQpLT5cblx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IF9pbnN0YW5jZUlkfSwge2ZpZWxkczogaW5zdGFuY2VfZmllbGRzXzB9KVxuXG5cdFx0aWYgaW5zdGFuY2VcblxuXHRcdFx0dHJpZ2dlckNoYW5nZUZpZWxkcy5mb3JFYWNoIChrZXkpLT5cblx0XHRcdFx0aWYga2V5ID09ICdfbXlfYXBwcm92ZV9yZWFkX2RhdGVzJ1xuXHRcdFx0XHRcdHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXNba2V5XSA9IGdldE15YXBwcm92ZU1vZGlmaWVkKGluc3RhbmNlLnRyYWNlcylcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXNba2V5XSA9IGluc3RhbmNlW2tleV1cblxuI1x0XHRcdGhhc09waW5pb25GaWVsZCA9IEluc3RhbmNlU2lnblRleHQuaW5jbHVkZXNPcGluaW9uRmllbGQoaW5zdGFuY2UuZm9ybSwgaW5zdGFuY2UuZm9ybV92ZXJzaW9uKVxuXG5cdFx0XHRzaG93X21vZGFsX3RyYWNlc19saXN0ID0gZGIuc3BhY2Vfc2V0dGluZ3MuZmluZE9uZSh7IHNwYWNlOiBpbnN0YW5jZS5zcGFjZSwga2V5OiBcInNob3dfbW9kYWxfdHJhY2VzX2xpc3RcIiB9LCB7IGZpZWxkczogeyB2YWx1ZXM6IDEgfSB9KT8udmFsdWVzIHx8IGZhbHNlXG5cblx0XHRcdGlmIHNob3dfbW9kYWxfdHJhY2VzX2xpc3RcblxuXHRcdFx0XHR0cmFjZXMgPSBuZXcgQXJyYXkoKTtcblxuXHRcdFx0XHRpbnN0YW5jZT8udHJhY2VzPy5mb3JFYWNoICh0cmFjZSktPlxuXHRcdFx0XHRcdF90cmFjZSA9IF8uY2xvbmUodHJhY2UpXG5cblx0XHRcdFx0XHRhcHByb3ZlcyA9IG5ldyBBcnJheSgpXG5cblx0XHRcdFx0XHR0cmFjZT8uYXBwcm92ZXM/LmZvckVhY2ggKGFwcHJvdmUpLT5cblx0XHRcdFx0XHRcdGlmIGFwcHJvdmUudHlwZSAhPSAnY2MnIHx8IGFwcHJvdmUudXNlciA9PSBzZWxmLnVzZXJJZCB8fCBhcHByb3ZlLmhhbmRsZXIgPT0gc2VsZi51c2VySWQgfHwgKCFfLmlzRW1wdHkoYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUpKVxuXHRcdFx0XHRcdFx0XHRhcHByb3Zlcy5wdXNoKGFwcHJvdmUpXG5cblx0XHRcdFx0XHRfdHJhY2UuYXBwcm92ZXMgPSBhcHByb3Zlc1xuXG5cdFx0XHRcdFx0dHJhY2VzLnB1c2goX3RyYWNlKVxuXG5cdFx0XHRcdGluc3RhbmNlLnRyYWNlcyA9IHRyYWNlcztcblxuXHRcdHJldHVybiBpbnN0YW5jZVxuXG5cblx0bmVlZENoYW5nZSA9IChjaGFuZ2VGaWVsZHMpLT5cblx0XHRpZiBjaGFuZ2VGaWVsZHNcblxuXHRcdFx0X2NoYW5nZSA9IGZhbHNlXG5cblx0XHRcdF9yZXYgPSBfLmZpbmQgdHJpZ2dlckNoYW5nZUZpZWxkcywgKGtleSktPlxuXHRcdFx0XHRfa2V5ID0ga2V5XG5cblx0XHRcdFx0aWYga2V5ID09ICdfbXlfYXBwcm92ZV9yZWFkX2RhdGVzJ1xuXHRcdFx0XHRcdF9rZXkgPSAndHJhY2VzJ1xuXG5cdFx0XHRcdGlmIF8uaGFzKGNoYW5nZUZpZWxkcywgX2tleSlcblxuXHRcdFx0XHRcdGlmIGtleSA9PSAnX215X2FwcHJvdmVfcmVhZF9kYXRlcydcblxuXHRcdFx0XHRcdFx0X215X2FwcHJvdmVfbW9kaWZpZWRzID0gZ2V0TXlhcHByb3ZlTW9kaWZpZWQoY2hhbmdlRmllbGRzLnRyYWNlcylcblxuI1x0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXNba2V5XSwgX215X2FwcHJvdmVfbW9kaWZpZWRzKVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gIV8uaXNFcXVhbCh0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzW2tleV0sIF9teV9hcHByb3ZlX21vZGlmaWVkcylcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRyZXR1cm4gIV8uaXNFcXVhbCh0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzW2tleV0sIGNoYW5nZUZpZWxkc1trZXldKVxuXG5cdFx0XHRpZiBfcmV2XG5cdFx0XHRcdF9jaGFuZ2UgPSB0cnVlXG5cbiNcdFx0XHRjb25zb2xlLmxvZyhfcmV2LCBfY2hhbmdlKVxuXG5cdFx0XHRyZXR1cm4gX2NoYW5nZVxuXG5cdFx0cmV0dXJuIHRydWVcblx0I+atpOWkhOS4jeiDvea3u+WKoGZpZWxkc+mZkOWItu+8jOWQpuWImeS8muWvvOiHtOaVsOaNruS4jeWunuaXtlxuXHRoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZCh7X2lkOiBpbnN0YW5jZUlkfSkub2JzZXJ2ZUNoYW5nZXMge1xuXHRcdGNoYW5nZWQ6IChpZCwgZmllbGRzKS0+XG5cdFx0XHRpZihib3ggIT0gJ2luYm94JyB8fCBuZWVkQ2hhbmdlKGZpZWxkcykpXG5cdFx0XHRcdHNlbGYuY2hhbmdlZChcImluc3RhbmNlc1wiLCBpZCwgZ2V0TWluaUluc3RhbmNlKGlkKSk7XG5cdFx0cmVtb3ZlZDogKGlkKS0+XG5cdFx0XHRzZWxmLnJlbW92ZWQoXCJpbnN0YW5jZXNcIiwgaWQpO1xuXHR9XG5cblx0aW5zdGFuY2UgPSBnZXRNaW5pSW5zdGFuY2UoaW5zdGFuY2VJZClcblxuXHRzZWxmLmFkZGVkKFwiaW5zdGFuY2VzXCIsIGluc3RhbmNlPy5faWQsIGluc3RhbmNlKTtcblxuXHRzZWxmLnJlYWR5KCk7XG5cblx0c2VsZi5vblN0b3AgKCktPlxuXHRcdGhhbmRsZS5zdG9wKClcblxuXG5NZXRlb3IucHVibGlzaCAnaW5zdGFuY2VfdHJhY2VzJywgKGluc3RhbmNlSWQpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBpbnN0YW5jZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHNlbGYgPSB0aGlzXG5cblx0Z2V0SW5zdGFuY2VUcmFjZXMgPSAoX2luc0lkKS0+XG5cdFx0cmV0dXJuIGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IF9pbnNJZH0sIHtmaWVsZHM6IHtfaWQ6IDEsIHRyYWNlczogMX19KVxuXG5cblx0aGFuZGxlID0gIGRiLmluc3RhbmNlcy5maW5kKHtfaWQ6IGluc3RhbmNlSWR9KS5vYnNlcnZlQ2hhbmdlcyB7XG5cdFx0Y2hhbmdlZDogKGlkKS0+XG5cdFx0XHRzZWxmLmNoYW5nZWQoXCJpbnN0YW5jZV90cmFjZXNcIiwgaW5zdGFuY2VJZCwgZ2V0SW5zdGFuY2VUcmFjZXMoaW5zdGFuY2VJZCkpO1xuXHR9XG5cblx0c2VsZi5hZGRlZChcImluc3RhbmNlX3RyYWNlc1wiLCBpbnN0YW5jZUlkLCBnZXRJbnN0YW5jZVRyYWNlcyhpbnN0YW5jZUlkKSk7XG5cblx0c2VsZi5yZWFkeSgpO1xuXHRzZWxmLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKSIsIk1ldGVvci5wdWJsaXNoKCdpbnN0YW5jZV9kYXRhJywgZnVuY3Rpb24oaW5zdGFuY2VJZCwgYm94KSB7XG4gIHZhciBnZXRNaW5pSW5zdGFuY2UsIGdldE15YXBwcm92ZU1vZGlmaWVkLCBoYW5kbGUsIGluc3RhbmNlLCBpbnN0YW5jZV9maWVsZHNfMCwgbWluaUFwcHJvdmVGaWVsZHMsIG5lZWRDaGFuZ2UsIHNlbGYsIHRyaWdnZXJDaGFuZ2VGaWVsZHMsIHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXM7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghKGluc3RhbmNlSWQgJiYgZGIuaW5zdGFuY2VzLmZpbmQoe1xuICAgIF9pZDogaW5zdGFuY2VJZFxuICB9KS5jb3VudCgpKSkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgc2VsZiA9IHRoaXM7XG4gIG1pbmlBcHByb3ZlRmllbGRzID0gWydfaWQnLCAnaXNfZmluaXNoZWQnLCAndXNlcicsICdoYW5kbGVyJywgJ2hhbmRsZXJfbmFtZScsICd0eXBlJywgJ3N0YXJ0X2RhdGUnLCAnZGVzY3JpcHRpb24nLCAnaXNfcmVhZCcsICdqdWRnZScsICdmaW5pc2hfZGF0ZScsICdmcm9tX3VzZXJfbmFtZScsICdmcm9tX3VzZXInLCAnY2NfZGVzY3JpcHRpb24nLCAnYXV0b19zdWJtaXR0ZWQnXTtcbiAgdHJpZ2dlckNoYW5nZUZpZWxkcyA9IFsnZm9ybV92ZXJzaW9uJywgJ2Zsb3dfdmVyc2lvbicsICdyZWxhdGVkX2luc3RhbmNlcycsICdfbXlfYXBwcm92ZV9yZWFkX2RhdGVzJywgJ3ZhbHVlcycsICdjaGFuZ2VfdGltZSddO1xuICB0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzID0ge307XG4gIGluc3RhbmNlX2ZpZWxkc18wID0ge1xuICAgIFwicmVjb3JkX3N5bmNlZFwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLmhhbmRsZXJfb3JnYW5pemF0aW9uX25hbWVcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5oYW5kbGVyX29yZ2FuaXphdGlvblwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLmNvc3RfdGltZVwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLmlzX2Vycm9yXCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMuZGVhZGxpbmVcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5yZW1pbmRfZGF0ZVwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLnJlbWluZGVkX2NvdW50XCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMubW9kaWZpZWRfYnlcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5tb2RpZmllZFwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLmdlb2xvY2F0aW9uXCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMuY2NfdXNlcnNcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5mcm9tX2FwcHJvdmVfaWRcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy52YWx1ZXNfaGlzdG9yeVwiOiAwXG4gIH07XG4gIGdldE15YXBwcm92ZU1vZGlmaWVkID0gZnVuY3Rpb24odHJhY2VzKSB7XG4gICAgdmFyIG15QXBwcm92ZU1vZGlmaWVkcztcbiAgICBteUFwcHJvdmVNb2RpZmllZHMgPSBuZXcgQXJyYXkoKTtcbiAgICBpZiAodHJhY2VzICE9IG51bGwpIHtcbiAgICAgIHRyYWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNlKSB7XG4gICAgICAgIHZhciByZWY7XG4gICAgICAgIHJldHVybiB0cmFjZSAhPSBudWxsID8gKHJlZiA9IHRyYWNlLmFwcHJvdmVzKSAhPSBudWxsID8gcmVmLmZvckVhY2goZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgICAgICAgIGlmIChhcHByb3ZlLnVzZXIgPT09IHNlbGYudXNlcklkIHx8IGFwcHJvdmUuaGFuZGxlciA9PT0gc2VsZi51c2VySWQpIHtcbiAgICAgICAgICAgIHJldHVybiBteUFwcHJvdmVNb2RpZmllZHMucHVzaChhcHByb3ZlLnJlYWRfZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbXlBcHByb3ZlTW9kaWZpZWRzO1xuICB9O1xuICBnZXRNaW5pSW5zdGFuY2UgPSBmdW5jdGlvbihfaW5zdGFuY2VJZCkge1xuICAgIHZhciBpbnN0YW5jZSwgcmVmLCByZWYxLCBzaG93X21vZGFsX3RyYWNlc19saXN0LCB0cmFjZXM7XG4gICAgaW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IF9pbnN0YW5jZUlkXG4gICAgfSwge1xuICAgICAgZmllbGRzOiBpbnN0YW5jZV9maWVsZHNfMFxuICAgIH0pO1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgdHJpZ2dlckNoYW5nZUZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnX215X2FwcHJvdmVfcmVhZF9kYXRlcycpIHtcbiAgICAgICAgICByZXR1cm4gdHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlc1trZXldID0gZ2V0TXlhcHByb3ZlTW9kaWZpZWQoaW5zdGFuY2UudHJhY2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlc1trZXldID0gaW5zdGFuY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzaG93X21vZGFsX3RyYWNlc19saXN0ID0gKChyZWYgPSBkYi5zcGFjZV9zZXR0aW5ncy5maW5kT25lKHtcbiAgICAgICAgc3BhY2U6IGluc3RhbmNlLnNwYWNlLFxuICAgICAgICBrZXk6IFwic2hvd19tb2RhbF90cmFjZXNfbGlzdFwiXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIHZhbHVlczogMVxuICAgICAgICB9XG4gICAgICB9KSkgIT0gbnVsbCA/IHJlZi52YWx1ZXMgOiB2b2lkIDApIHx8IGZhbHNlO1xuICAgICAgaWYgKHNob3dfbW9kYWxfdHJhY2VzX2xpc3QpIHtcbiAgICAgICAgdHJhY2VzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKChyZWYxID0gaW5zdGFuY2UudHJhY2VzKSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZWYxLmZvckVhY2goZnVuY3Rpb24odHJhY2UpIHtcbiAgICAgICAgICAgICAgdmFyIF90cmFjZSwgYXBwcm92ZXMsIHJlZjI7XG4gICAgICAgICAgICAgIF90cmFjZSA9IF8uY2xvbmUodHJhY2UpO1xuICAgICAgICAgICAgICBhcHByb3ZlcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICAgICAgICBpZiAodHJhY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICgocmVmMiA9IHRyYWNlLmFwcHJvdmVzKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICByZWYyLmZvckVhY2goZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwcm92ZS50eXBlICE9PSAnY2MnIHx8IGFwcHJvdmUudXNlciA9PT0gc2VsZi51c2VySWQgfHwgYXBwcm92ZS5oYW5kbGVyID09PSBzZWxmLnVzZXJJZCB8fCAoIV8uaXNFbXB0eShhcHByb3ZlLnNpZ25fZmllbGRfY29kZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcHJvdmVzLnB1c2goYXBwcm92ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBfdHJhY2UuYXBwcm92ZXMgPSBhcHByb3ZlcztcbiAgICAgICAgICAgICAgcmV0dXJuIHRyYWNlcy5wdXNoKF90cmFjZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UudHJhY2VzID0gdHJhY2VzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG4gIG5lZWRDaGFuZ2UgPSBmdW5jdGlvbihjaGFuZ2VGaWVsZHMpIHtcbiAgICB2YXIgX2NoYW5nZSwgX3JldjtcbiAgICBpZiAoY2hhbmdlRmllbGRzKSB7XG4gICAgICBfY2hhbmdlID0gZmFsc2U7XG4gICAgICBfcmV2ID0gXy5maW5kKHRyaWdnZXJDaGFuZ2VGaWVsZHMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgICB2YXIgX2tleSwgX215X2FwcHJvdmVfbW9kaWZpZWRzO1xuICAgICAgICBfa2V5ID0ga2V5O1xuICAgICAgICBpZiAoa2V5ID09PSAnX215X2FwcHJvdmVfcmVhZF9kYXRlcycpIHtcbiAgICAgICAgICBfa2V5ID0gJ3RyYWNlcyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaGFzKGNoYW5nZUZpZWxkcywgX2tleSkpIHtcbiAgICAgICAgICBpZiAoa2V5ID09PSAnX215X2FwcHJvdmVfcmVhZF9kYXRlcycpIHtcbiAgICAgICAgICAgIF9teV9hcHByb3ZlX21vZGlmaWVkcyA9IGdldE15YXBwcm92ZU1vZGlmaWVkKGNoYW5nZUZpZWxkcy50cmFjZXMpO1xuICAgICAgICAgICAgcmV0dXJuICFfLmlzRXF1YWwodHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlc1trZXldLCBfbXlfYXBwcm92ZV9tb2RpZmllZHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gIV8uaXNFcXVhbCh0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzW2tleV0sIGNoYW5nZUZpZWxkc1trZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKF9yZXYpIHtcbiAgICAgICAgX2NoYW5nZSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gX2NoYW5nZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHtcbiAgICBfaWQ6IGluc3RhbmNlSWRcbiAgfSkub2JzZXJ2ZUNoYW5nZXMoe1xuICAgIGNoYW5nZWQ6IGZ1bmN0aW9uKGlkLCBmaWVsZHMpIHtcbiAgICAgIGlmIChib3ggIT09ICdpbmJveCcgfHwgbmVlZENoYW5nZShmaWVsZHMpKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNoYW5nZWQoXCJpbnN0YW5jZXNcIiwgaWQsIGdldE1pbmlJbnN0YW5jZShpZCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVtb3ZlZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgIHJldHVybiBzZWxmLnJlbW92ZWQoXCJpbnN0YW5jZXNcIiwgaWQpO1xuICAgIH1cbiAgfSk7XG4gIGluc3RhbmNlID0gZ2V0TWluaUluc3RhbmNlKGluc3RhbmNlSWQpO1xuICBzZWxmLmFkZGVkKFwiaW5zdGFuY2VzXCIsIGluc3RhbmNlICE9IG51bGwgPyBpbnN0YW5jZS5faWQgOiB2b2lkIDAsIGluc3RhbmNlKTtcbiAgc2VsZi5yZWFkeSgpO1xuICByZXR1cm4gc2VsZi5vblN0b3AoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhhbmRsZS5zdG9wKCk7XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKCdpbnN0YW5jZV90cmFjZXMnLCBmdW5jdGlvbihpbnN0YW5jZUlkKSB7XG4gIHZhciBnZXRJbnN0YW5jZVRyYWNlcywgaGFuZGxlLCBzZWxmO1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWluc3RhbmNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHNlbGYgPSB0aGlzO1xuICBnZXRJbnN0YW5jZVRyYWNlcyA9IGZ1bmN0aW9uKF9pbnNJZCkge1xuICAgIHJldHVybiBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IF9pbnNJZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBfaWQ6IDEsXG4gICAgICAgIHRyYWNlczogMVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgX2lkOiBpbnN0YW5jZUlkXG4gIH0pLm9ic2VydmVDaGFuZ2VzKHtcbiAgICBjaGFuZ2VkOiBmdW5jdGlvbihpZCkge1xuICAgICAgcmV0dXJuIHNlbGYuY2hhbmdlZChcImluc3RhbmNlX3RyYWNlc1wiLCBpbnN0YW5jZUlkLCBnZXRJbnN0YW5jZVRyYWNlcyhpbnN0YW5jZUlkKSk7XG4gICAgfVxuICB9KTtcbiAgc2VsZi5hZGRlZChcImluc3RhbmNlX3RyYWNlc1wiLCBpbnN0YW5jZUlkLCBnZXRJbnN0YW5jZVRyYWNlcyhpbnN0YW5jZUlkKSk7XG4gIHNlbGYucmVhZHkoKTtcbiAgcmV0dXJuIHNlbGYub25TdG9wKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBoYW5kbGUuc3RvcCgpO1xuICB9KTtcbn0pO1xuIiwiXG5cdE1ldGVvci5wdWJsaXNoICdpbnN0YW5jZXNfbGlzdCcsIChzcGFjZUlkLCBib3gsIGZsb3dJZCktPlxuXG5cdFx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cdFx0XG5cdFx0dW5sZXNzIHNwYWNlSWRcblx0XHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRcdHF1ZXJ5ID0ge3NwYWNlOiBzcGFjZUlkfVxuXHRcdGlmIGJveCA9PSBcImluYm94XCJcblx0XHRcdHF1ZXJ5LmluYm94X3VzZXJzID0gdGhpcy51c2VySWQ7XG5cdFx0ZWxzZSBpZiBib3ggPT0gXCJvdXRib3hcIlxuXHRcdFx0cXVlcnkub3V0Ym94X3VzZXJzID0gdGhpcy51c2VySWQ7XG5cdFx0ZWxzZSBpZiBib3ggPT0gXCJkcmFmdFwiXG5cdFx0XHRxdWVyeS5zdWJtaXR0ZXIgPSB0aGlzLnVzZXJJZDtcblx0XHRcdHF1ZXJ5LnN0YXRlID0gXCJkcmFmdFwiXG5cdFx0ZWxzZSBpZiBib3ggPT0gXCJwZW5kaW5nXCJcblx0XHRcdHF1ZXJ5LnN1Ym1pdHRlciA9IHRoaXMudXNlcklkO1xuXHRcdFx0cXVlcnkuc3RhdGUgPSBcInBlbmRpbmdcIlxuXHRcdGVsc2UgaWYgYm94ID09IFwiY29tcGxldGVkXCJcblx0XHRcdHF1ZXJ5LnN1Ym1pdHRlciA9IHRoaXMudXNlcklkO1xuXHRcdFx0cXVlcnkuc3RhdGUgPSBcImNvbXBsZXRlZFwiXG5cdFx0ZWxzZSBpZiBib3ggPT0gXCJtb25pdG9yXCJcblx0XHRcdHF1ZXJ5LmZsb3cgPSBmbG93SWQ7XG5cdFx0XHRxdWVyeS5zdGF0ZSA9IHskaW46IFtcInBlbmRpbmdcIixcImNvbXBsZXRlZFwiXX07XG5cdFx0ZWxzZVxuXHRcdFx0cXVlcnkuc3RhdGUgPSBcIm5vbmVcIlxuXG5cdFx0cmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7ZmllbGRzOiB7bmFtZToxLCBjcmVhdGVkOjEsIGZvcm06MSwgZmxvdzogMSwgc3BhY2U6MSwgbW9kaWZpZWQ6MSwgYXBwbGljYW50OiAxLCBpc19hcmNoaXZlZDoxLCBmb3JtX3ZlcnNpb246IDEsIGZsb3dfdmVyc2lvbjogMX19KVxuXG4iLCJNZXRlb3IucHVibGlzaCgnaW5zdGFuY2VzX2xpc3QnLCBmdW5jdGlvbihzcGFjZUlkLCBib3gsIGZsb3dJZCkge1xuICB2YXIgcXVlcnk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcXVlcnkgPSB7XG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfTtcbiAgaWYgKGJveCA9PT0gXCJpbmJveFwiKSB7XG4gICAgcXVlcnkuaW5ib3hfdXNlcnMgPSB0aGlzLnVzZXJJZDtcbiAgfSBlbHNlIGlmIChib3ggPT09IFwib3V0Ym94XCIpIHtcbiAgICBxdWVyeS5vdXRib3hfdXNlcnMgPSB0aGlzLnVzZXJJZDtcbiAgfSBlbHNlIGlmIChib3ggPT09IFwiZHJhZnRcIikge1xuICAgIHF1ZXJ5LnN1Ym1pdHRlciA9IHRoaXMudXNlcklkO1xuICAgIHF1ZXJ5LnN0YXRlID0gXCJkcmFmdFwiO1xuICB9IGVsc2UgaWYgKGJveCA9PT0gXCJwZW5kaW5nXCIpIHtcbiAgICBxdWVyeS5zdWJtaXR0ZXIgPSB0aGlzLnVzZXJJZDtcbiAgICBxdWVyeS5zdGF0ZSA9IFwicGVuZGluZ1wiO1xuICB9IGVsc2UgaWYgKGJveCA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgIHF1ZXJ5LnN1Ym1pdHRlciA9IHRoaXMudXNlcklkO1xuICAgIHF1ZXJ5LnN0YXRlID0gXCJjb21wbGV0ZWRcIjtcbiAgfSBlbHNlIGlmIChib3ggPT09IFwibW9uaXRvclwiKSB7XG4gICAgcXVlcnkuZmxvdyA9IGZsb3dJZDtcbiAgICBxdWVyeS5zdGF0ZSA9IHtcbiAgICAgICRpbjogW1wicGVuZGluZ1wiLCBcImNvbXBsZXRlZFwiXVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcXVlcnkuc3RhdGUgPSBcIm5vbmVcIjtcbiAgfVxuICByZXR1cm4gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIG5hbWU6IDEsXG4gICAgICBjcmVhdGVkOiAxLFxuICAgICAgZm9ybTogMSxcbiAgICAgIGZsb3c6IDEsXG4gICAgICBzcGFjZTogMSxcbiAgICAgIG1vZGlmaWVkOiAxLFxuICAgICAgYXBwbGljYW50OiAxLFxuICAgICAgaXNfYXJjaGl2ZWQ6IDEsXG4gICAgICBmb3JtX3ZlcnNpb246IDEsXG4gICAgICBmbG93X3ZlcnNpb246IDFcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJsYXN0RmluaXNoZWRBcHByb3ZlQWdncmVnYXRlID0gKGluc3RhbmNlaWQsIHVzZXJJZCwgZGF0YU1hcCwgY2FsbGJhY2spLT5cblx0b3BlcmF0aW9uID0gW3tcblx0XHRcIiRtYXRjaFwiOiB7XG5cdFx0XHRcIl9pZFwiOiBpbnN0YW5jZWlkXG5cdFx0fVxuXHR9LCB7XCIkcHJvamVjdFwiOiB7XCJuYW1lXCI6IDEsIFwiX2FwcHJvdmVcIjogXCIkdHJhY2VzLmFwcHJvdmVzXCJ9fSwge1wiJHVud2luZFwiOiBcIiRfYXBwcm92ZVwifSwge1wiJHVud2luZFwiOiBcIiRfYXBwcm92ZVwifSxcblx0XHR7XCIkbWF0Y2hcIjoge1wiX2FwcHJvdmUuaXNfZmluaXNoZWRcIjogdHJ1ZSwgJG9yOlt7XCJfYXBwcm92ZS5oYW5kbGVyXCI6IHVzZXJJZH0se1wiX2FwcHJvdmUudXNlclwiOiB1c2VySWR9XX19LFxuXHRcdHtcIiRncm91cFwiOiB7XCJfaWRcIjogXCIkX2lkXCIsIFwiZmluaXNoX2RhdGVcIjoge1wiJGxhc3RcIjogXCIkX2FwcHJvdmUuZmluaXNoX2RhdGVcIn19fVxuXHRdXG5cblx0ZGIuaW5zdGFuY2VzLnJhd0NvbGxlY3Rpb24oKS5hZ2dyZWdhdGUob3BlcmF0aW9uKS50b0FycmF5IChlcnIsIGRhdGEpLT5cblx0XHRpZiBlcnJcblx0XHRcdHRocm93IG5ldyBFcnJvcihlcnIpXG5cblx0XHRkYXRhLmZvckVhY2ggKGRvYykgLT5cblx0XHRcdGRhdGFNYXAucHVzaCBkb2NcblxuXHRcdGlmIGNhbGxiYWNrICYmIF8uaXNGdW5jdGlvbihjYWxsYmFjaylcblx0XHRcdGNhbGxiYWNrKClcblx0XHRyZXR1cm5cblxuYXN5bmNMYXN0RmluaXNoZWRBcHByb3ZlID0gTWV0ZW9yLndyYXBBc3luYyhsYXN0RmluaXNoZWRBcHByb3ZlQWdncmVnYXRlKVxuXG5NZXRlb3IucHVibGlzaCBcImluc3RhbmNlX3RhYnVsYXJcIiwgKHRhYmxlTmFtZSwgaWRzLCBmaWVsZHMpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdGNoZWNrKHRhYmxlTmFtZSwgU3RyaW5nKTtcblxuXHRjaGVjayhpZHMsIEFycmF5KTtcblxuXHRjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpXG5cblx0ZmllbGRzLmNjX3VzZXJzID0gMVxuXG5cdHNlbGYgPSB0aGlzO1xuXG5cdGdldE15TGFzdEZpbmlzaGVkQXBwcm92ZSA9ICh1c2VySWQsIGluc3RhbmNlSWQpLT5cblx0XHRkYXRhID0gW11cblx0XHRhc3luY0xhc3RGaW5pc2hlZEFwcHJvdmUoaW5zdGFuY2VJZCwgdXNlcklkLCBkYXRhKVxuXHRcdGlmIGRhdGEubGVuZ3RoID4gMFxuXHRcdFx0cmV0dXJuIGRhdGFbMF1cblxuXG5cdGdldE15QXBwcm92ZSA9ICh1c2VySWQsIGluc3RhbmNlSWQpLT5cblx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGluc3RhbmNlSWR9LCB7ZmllbGRzOiB7dHJhY2VzOiAxfX0pXG5cdFx0bXlBcHByb3ZlID0gbnVsbFxuXG5cdFx0aWYgIWluc3RhbmNlXG5cdFx0XHRyZXR1cm5cblxuXHRcdGlmICFpbnN0YW5jZS50cmFjZXMgfHwgaW5zdGFuY2UudHJhY2VzLmxlbmd0aCA8IDFcblx0XHRcdHJldHVyblxuXG5cdFx0bm90RmluaXNoZWRUcmFjZXMgPSBpbnN0YW5jZS50cmFjZXMuZmlsdGVyUHJvcGVydHkoXCJpc19maW5pc2hlZFwiLCBmYWxzZSlcblxuXHRcdGlmIG5vdEZpbmlzaGVkVHJhY2VzLmxlbmd0aCA+IDBcblx0XHRcdGFwcHJvdmVzID0gbm90RmluaXNoZWRUcmFjZXNbMF0uYXBwcm92ZXMuZmlsdGVyUHJvcGVydHkoXCJpc19maW5pc2hlZFwiLCBmYWxzZSkuZmlsdGVyUHJvcGVydHkoXCJoYW5kbGVyXCIsIHVzZXJJZCk7XG5cblx0XHRcdGlmIGFwcHJvdmVzLmxlbmd0aCA+IDBcblx0XHRcdFx0YXBwcm92ZSA9IGFwcHJvdmVzWzBdXG5cdFx0XHRcdG15QXBwcm92ZSA9IHtcblx0XHRcdFx0XHRpZDogYXBwcm92ZS5faWQsXG5cdFx0XHRcdFx0aW5zdGFuY2U6IGFwcHJvdmUuaW5zdGFuY2UsXG5cdFx0XHRcdFx0dHJhY2U6IGFwcHJvdmUudHJhY2UsXG5cdFx0XHRcdFx0aXNfcmVhZDogYXBwcm92ZS5pc19yZWFkLFxuXHRcdFx0XHRcdHN0YXJ0X2RhdGU6IGFwcHJvdmUuc3RhcnRfZGF0ZVxuXHRcdFx0XHRcdGFnZW50OiBhcHByb3ZlLmFnZW50XG5cdFx0XHRcdFx0dXNlcl9uYW1lOiBhcHByb3ZlLnVzZXJfbmFtZVxuXHRcdFx0XHR9XG5cblx0XHRpZiAhbXlBcHByb3ZlXG5cdFx0XHRpc19yZWFkID0gZmFsc2Vcblx0XHRcdGluc3RhbmNlLnRyYWNlcy5mb3JFYWNoICh0cmFjZSkgLT5cblx0XHRcdFx0dHJhY2U/LmFwcHJvdmVzPy5mb3JFYWNoIChhcHByb3ZlKSAtPlxuXHRcdFx0XHRcdGlmIGFwcHJvdmUudHlwZSA9PSAnY2MnIGFuZCBhcHByb3ZlLnVzZXIgPT0gdXNlcklkIGFuZCBhcHByb3ZlLmlzX2ZpbmlzaGVkID09IGZhbHNlXG5cdFx0XHRcdFx0XHRpZiBhcHByb3ZlLmlzX3JlYWRcblx0XHRcdFx0XHRcdFx0aXNfcmVhZCA9IHRydWVcblx0XHRcdFx0XHRcdG15QXBwcm92ZSA9IHtpZDogYXBwcm92ZS5faWQsIGlzX3JlYWQ6IGlzX3JlYWQsIHN0YXJ0X2RhdGU6IGFwcHJvdmUuc3RhcnRfZGF0ZSwgYWdlbnQ6IGFwcHJvdmUuYWdlbnQsIHVzZXJfbmFtZTogYXBwcm92ZS51c2VyX25hbWV9XG5cblx0XHRyZXR1cm4gbXlBcHByb3ZlXG5cblx0Z2V0U3RlcEN1cnJlbnROYW1lID0gKGluc3RhbmNlSWQpIC0+XG5cdFx0aW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpbnN0YW5jZUlkfSwge2ZpZWxkczoge1widHJhY2VzLm5hbWVcIjogMSwgXCJ0cmFjZXNcIjogeyRzbGljZTogLTF9fX0pXG5cdFx0aWYgaW5zdGFuY2Vcblx0XHRcdHN0ZXBDdXJyZW50TmFtZSA9IGluc3RhbmNlLnRyYWNlcz9bMF0/Lm5hbWVcblxuXHRcdHJldHVybiBzdGVwQ3VycmVudE5hbWVcblxuXHRoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZCh7X2lkOiB7JGluOiBpZHN9fSwge2ZpZWxkczoge3RyYWNlczogMH19KS5vYnNlcnZlQ2hhbmdlcyB7XG5cdFx0Y2hhbmdlZDogKGlkKS0+XG5cdFx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGlkfSwge2ZpZWxkczogZmllbGRzfSlcblx0XHRcdHJldHVybiBpZiBub3QgaW5zdGFuY2Vcblx0XHRcdG15QXBwcm92ZSA9IGdldE15QXBwcm92ZShzZWxmLnVzZXJJZCwgaWQpXG5cdFx0XHRteUxhc3RGaW5pc2hlZEFwcHJvdmUgPSBnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUoc2VsZi51c2VySWQsIGlkKVxuXHRcdFx0aWYgbXlBcHByb3ZlXG5cdFx0XHRcdGluc3RhbmNlLmlzX3JlYWQgPSBteUFwcHJvdmUuaXNfcmVhZFxuXHRcdFx0XHRpbnN0YW5jZS5zdGFydF9kYXRlID0gbXlBcHByb3ZlLnN0YXJ0X2RhdGVcblx0XHRcdFx0aWYgbXlBcHByb3ZlLmFnZW50XG5cdFx0XHRcdFx0aW5zdGFuY2UuYWdlbnRfdXNlcl9uYW1lID0gbXlBcHByb3ZlLnVzZXJfbmFtZVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRpbnN0YW5jZS5pc19yZWFkID0gdHJ1ZVxuXG5cdFx0XHRpZiBteUxhc3RGaW5pc2hlZEFwcHJvdmVcblx0XHRcdFx0aW5zdGFuY2UubXlfZmluaXNoX2RhdGUgPSBteUxhc3RGaW5pc2hlZEFwcHJvdmUuZmluaXNoX2RhdGVcblxuXHRcdFx0aW5zdGFuY2UuaXNfY2MgPSBpbnN0YW5jZS5jY191c2Vycz8uaW5jbHVkZXMoc2VsZi51c2VySWQpIHx8IGZhbHNlXG5cdFx0XHRpbnN0YW5jZS5jY19jb3VudCA9IGluc3RhbmNlLmNjX3VzZXJzPy5sZW5ndGggfHwgMFxuXHRcdFx0ZGVsZXRlIGluc3RhbmNlLmNjX3VzZXJzXG5cdFx0XHR0cnlcblx0XHRcdFx0c2VsZi5jaGFuZ2VkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSk7XG5cdFx0XHRjYXRjaCBlcnJvclxuXHRcdFx0XHRjb25zb2xlLmxvZygnaW5zdGFuY2Ugb2JzZXJ2ZUNoYW5nZXMgZXJyb3I6ICcsIGVycm9yLm1lc3NhZ2UpO1xuXHRcdFx0XHRjb25zb2xlLmxvZygnc2VsZi51c2VySWQ6ICcsIHNlbGYudXNlcklkKTtcblx0XHRcdFx0Y29uc29sZS5sb2coJ3RhYmxlTmFtZTogJywgdGFibGVOYW1lKTtcblx0XHRcdFx0Y29uc29sZS5sb2coJ2lkczogJywgSlNPTi5zdHJpbmdpZnkoaWRzKSk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdteUFwcHJvdmU6ICcsIEpTT04uc3RyaW5naWZ5KG15QXBwcm92ZSkpO1xuXHRcdHJlbW92ZWQ6IChpZCktPlxuXHRcdFx0c2VsZi5yZW1vdmVkKFwiaW5zdGFuY2VzXCIsIGlkKTtcblx0fVxuXG5cdGlkcy5mb3JFYWNoIChpZCktPlxuXHRcdGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaWR9LCB7ZmllbGRzOiBmaWVsZHN9KVxuXHRcdHJldHVybiBpZiBub3QgaW5zdGFuY2Vcblx0XHRteUFwcHJvdmUgPSBnZXRNeUFwcHJvdmUoc2VsZi51c2VySWQsIGlkKVxuXHRcdG15TGFzdEZpbmlzaGVkQXBwcm92ZSA9IGdldE15TGFzdEZpbmlzaGVkQXBwcm92ZShzZWxmLnVzZXJJZCwgaWQpXG5cdFx0aWYgbXlBcHByb3ZlXG5cdFx0XHRpbnN0YW5jZS5pc19yZWFkID0gbXlBcHByb3ZlLmlzX3JlYWRcblx0XHRcdGluc3RhbmNlLnN0YXJ0X2RhdGUgPSBteUFwcHJvdmUuc3RhcnRfZGF0ZVxuXHRcdFx0aWYgbXlBcHByb3ZlLmFnZW50XG5cdFx0XHRcdFx0aW5zdGFuY2UuYWdlbnRfdXNlcl9uYW1lID0gbXlBcHByb3ZlLnVzZXJfbmFtZVxuXHRcdGVsc2Vcblx0XHRcdGluc3RhbmNlLmlzX3JlYWQgPSB0cnVlXG5cblx0XHRpZiBteUxhc3RGaW5pc2hlZEFwcHJvdmVcblx0XHRcdGluc3RhbmNlLm15X2ZpbmlzaF9kYXRlID0gbXlMYXN0RmluaXNoZWRBcHByb3ZlLmZpbmlzaF9kYXRlXG5cblx0XHRpbnN0YW5jZS5pc19jYyA9IGluc3RhbmNlLmNjX3VzZXJzPy5pbmNsdWRlcyhzZWxmLnVzZXJJZCkgfHwgZmFsc2Vcblx0XHRpbnN0YW5jZS5jY19jb3VudCA9IGluc3RhbmNlLmNjX3VzZXJzPy5sZW5ndGggfHwgMFxuXHRcdGRlbGV0ZSBpbnN0YW5jZS5jY191c2Vyc1xuXHRcdHNlbGYuYWRkZWQoXCJpbnN0YW5jZXNcIiwgaWQsIGluc3RhbmNlKTtcblxuXHRzZWxmLnJlYWR5KCk7XG5cdHNlbGYub25TdG9wICgpLT5cblx0XHRoYW5kbGUuc3RvcCgpXG5cbk1ldGVvci5wdWJsaXNoIFwiaW5zdGFuY2VfdGFza3NfdGFidWxhclwiLCAodGFidWxhck5hbWUsIGlkcywgZmllbGRzKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRjaGVjayh0YWJ1bGFyTmFtZSwgU3RyaW5nKTtcblxuXHRjaGVjayhpZHMsIEFycmF5KTtcblxuXHRjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpXG5cblx0IyBjb25zb2xlLmxvZygndGFidWxhck5hbWU6ICcsIHRhYnVsYXJOYW1lKTtcblx0IyBjb25zb2xlLmxvZygnaWRzOiAnLCBKU09OLnN0cmluZ2lmeShpZHMpKTtcblx0IyBjb25zb2xlLmxvZygnZmllbGRzOiAnLCBKU09OLnN0cmluZ2lmeShmaWVsZHMpKTtcblxuXHRkYi5pbnN0YW5jZV90YXNrcy5maW5kKHtcblx0XHRfaWQ6IHtcblx0XHRcdCRpbjogaWRzXG5cdFx0fVxuXHR9LCB7XG5cdFx0ZmllbGRzOiBmaWVsZHNcblx0fSlcblxuTWV0ZW9yLnB1Ymxpc2ggXCJpbnN0YW5jZXNfdGFidWxhclwiLCAodGFidWxhck5hbWUsIGlkcywgZmllbGRzKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRjaGVjayh0YWJ1bGFyTmFtZSwgU3RyaW5nKTtcblxuXHRjaGVjayhpZHMsIEFycmF5KTtcblxuXHRjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpXG5cblx0IyBjb25zb2xlLmxvZygndGFidWxhck5hbWU6ICcsIHRhYnVsYXJOYW1lKTtcblx0IyBjb25zb2xlLmxvZygnaWRzOiAnLCBKU09OLnN0cmluZ2lmeShpZHMpKTtcblx0IyBjb25zb2xlLmxvZygnZmllbGRzOiAnLCBKU09OLnN0cmluZ2lmeShmaWVsZHMpKTtcblxuXHRkYi5pbnN0YW5jZXMuZmluZCh7XG5cdFx0X2lkOiB7XG5cdFx0XHQkaW46IGlkc1xuXHRcdH1cblx0fSwge1xuXHRcdGZpZWxkczogZmllbGRzXG5cdH0pIiwidmFyIGFzeW5jTGFzdEZpbmlzaGVkQXBwcm92ZSwgbGFzdEZpbmlzaGVkQXBwcm92ZUFnZ3JlZ2F0ZTtcblxubGFzdEZpbmlzaGVkQXBwcm92ZUFnZ3JlZ2F0ZSA9IGZ1bmN0aW9uKGluc3RhbmNlaWQsIHVzZXJJZCwgZGF0YU1hcCwgY2FsbGJhY2spIHtcbiAgdmFyIG9wZXJhdGlvbjtcbiAgb3BlcmF0aW9uID0gW1xuICAgIHtcbiAgICAgIFwiJG1hdGNoXCI6IHtcbiAgICAgICAgXCJfaWRcIjogaW5zdGFuY2VpZFxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIFwiJHByb2plY3RcIjoge1xuICAgICAgICBcIm5hbWVcIjogMSxcbiAgICAgICAgXCJfYXBwcm92ZVwiOiBcIiR0cmFjZXMuYXBwcm92ZXNcIlxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIFwiJHVud2luZFwiOiBcIiRfYXBwcm92ZVwiXG4gICAgfSwge1xuICAgICAgXCIkdW53aW5kXCI6IFwiJF9hcHByb3ZlXCJcbiAgICB9LCB7XG4gICAgICBcIiRtYXRjaFwiOiB7XG4gICAgICAgIFwiX2FwcHJvdmUuaXNfZmluaXNoZWRcIjogdHJ1ZSxcbiAgICAgICAgJG9yOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJfYXBwcm92ZS5oYW5kbGVyXCI6IHVzZXJJZFxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIFwiX2FwcHJvdmUudXNlclwiOiB1c2VySWRcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBcIiRncm91cFwiOiB7XG4gICAgICAgIFwiX2lkXCI6IFwiJF9pZFwiLFxuICAgICAgICBcImZpbmlzaF9kYXRlXCI6IHtcbiAgICAgICAgICBcIiRsYXN0XCI6IFwiJF9hcHByb3ZlLmZpbmlzaF9kYXRlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgXTtcbiAgcmV0dXJuIGRiLmluc3RhbmNlcy5yYXdDb2xsZWN0aW9uKCkuYWdncmVnYXRlKG9wZXJhdGlvbikudG9BcnJheShmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKTtcbiAgICB9XG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGRvYykge1xuICAgICAgcmV0dXJuIGRhdGFNYXAucHVzaChkb2MpO1xuICAgIH0pO1xuICAgIGlmIChjYWxsYmFjayAmJiBfLmlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5hc3luY0xhc3RGaW5pc2hlZEFwcHJvdmUgPSBNZXRlb3Iud3JhcEFzeW5jKGxhc3RGaW5pc2hlZEFwcHJvdmVBZ2dyZWdhdGUpO1xuXG5NZXRlb3IucHVibGlzaChcImluc3RhbmNlX3RhYnVsYXJcIiwgZnVuY3Rpb24odGFibGVOYW1lLCBpZHMsIGZpZWxkcykge1xuICB2YXIgZ2V0TXlBcHByb3ZlLCBnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUsIGdldFN0ZXBDdXJyZW50TmFtZSwgaGFuZGxlLCBzZWxmO1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBjaGVjayh0YWJsZU5hbWUsIFN0cmluZyk7XG4gIGNoZWNrKGlkcywgQXJyYXkpO1xuICBjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpO1xuICBmaWVsZHMuY2NfdXNlcnMgPSAxO1xuICBzZWxmID0gdGhpcztcbiAgZ2V0TXlMYXN0RmluaXNoZWRBcHByb3ZlID0gZnVuY3Rpb24odXNlcklkLCBpbnN0YW5jZUlkKSB7XG4gICAgdmFyIGRhdGE7XG4gICAgZGF0YSA9IFtdO1xuICAgIGFzeW5jTGFzdEZpbmlzaGVkQXBwcm92ZShpbnN0YW5jZUlkLCB1c2VySWQsIGRhdGEpO1xuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBkYXRhWzBdO1xuICAgIH1cbiAgfTtcbiAgZ2V0TXlBcHByb3ZlID0gZnVuY3Rpb24odXNlcklkLCBpbnN0YW5jZUlkKSB7XG4gICAgdmFyIGFwcHJvdmUsIGFwcHJvdmVzLCBpbnN0YW5jZSwgaXNfcmVhZCwgbXlBcHByb3ZlLCBub3RGaW5pc2hlZFRyYWNlcztcbiAgICBpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICAgIF9pZDogaW5zdGFuY2VJZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICB0cmFjZXM6IDFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBteUFwcHJvdmUgPSBudWxsO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpbnN0YW5jZS50cmFjZXMgfHwgaW5zdGFuY2UudHJhY2VzLmxlbmd0aCA8IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbm90RmluaXNoZWRUcmFjZXMgPSBpbnN0YW5jZS50cmFjZXMuZmlsdGVyUHJvcGVydHkoXCJpc19maW5pc2hlZFwiLCBmYWxzZSk7XG4gICAgaWYgKG5vdEZpbmlzaGVkVHJhY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFwcHJvdmVzID0gbm90RmluaXNoZWRUcmFjZXNbMF0uYXBwcm92ZXMuZmlsdGVyUHJvcGVydHkoXCJpc19maW5pc2hlZFwiLCBmYWxzZSkuZmlsdGVyUHJvcGVydHkoXCJoYW5kbGVyXCIsIHVzZXJJZCk7XG4gICAgICBpZiAoYXBwcm92ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBhcHByb3ZlID0gYXBwcm92ZXNbMF07XG4gICAgICAgIG15QXBwcm92ZSA9IHtcbiAgICAgICAgICBpZDogYXBwcm92ZS5faWQsXG4gICAgICAgICAgaW5zdGFuY2U6IGFwcHJvdmUuaW5zdGFuY2UsXG4gICAgICAgICAgdHJhY2U6IGFwcHJvdmUudHJhY2UsXG4gICAgICAgICAgaXNfcmVhZDogYXBwcm92ZS5pc19yZWFkLFxuICAgICAgICAgIHN0YXJ0X2RhdGU6IGFwcHJvdmUuc3RhcnRfZGF0ZSxcbiAgICAgICAgICBhZ2VudDogYXBwcm92ZS5hZ2VudCxcbiAgICAgICAgICB1c2VyX25hbWU6IGFwcHJvdmUudXNlcl9uYW1lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbXlBcHByb3ZlKSB7XG4gICAgICBpc19yZWFkID0gZmFsc2U7XG4gICAgICBpbnN0YW5jZS50cmFjZXMuZm9yRWFjaChmdW5jdGlvbih0cmFjZSkge1xuICAgICAgICB2YXIgcmVmO1xuICAgICAgICByZXR1cm4gdHJhY2UgIT0gbnVsbCA/IChyZWYgPSB0cmFjZS5hcHByb3ZlcykgIT0gbnVsbCA/IHJlZi5mb3JFYWNoKGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgICAgICBpZiAoYXBwcm92ZS50eXBlID09PSAnY2MnICYmIGFwcHJvdmUudXNlciA9PT0gdXNlcklkICYmIGFwcHJvdmUuaXNfZmluaXNoZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoYXBwcm92ZS5pc19yZWFkKSB7XG4gICAgICAgICAgICAgIGlzX3JlYWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG15QXBwcm92ZSA9IHtcbiAgICAgICAgICAgICAgaWQ6IGFwcHJvdmUuX2lkLFxuICAgICAgICAgICAgICBpc19yZWFkOiBpc19yZWFkLFxuICAgICAgICAgICAgICBzdGFydF9kYXRlOiBhcHByb3ZlLnN0YXJ0X2RhdGUsXG4gICAgICAgICAgICAgIGFnZW50OiBhcHByb3ZlLmFnZW50LFxuICAgICAgICAgICAgICB1c2VyX25hbWU6IGFwcHJvdmUudXNlcl9uYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG15QXBwcm92ZTtcbiAgfTtcbiAgZ2V0U3RlcEN1cnJlbnROYW1lID0gZnVuY3Rpb24oaW5zdGFuY2VJZCkge1xuICAgIHZhciBpbnN0YW5jZSwgcmVmLCByZWYxLCBzdGVwQ3VycmVudE5hbWU7XG4gICAgaW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGluc3RhbmNlSWRcbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgXCJ0cmFjZXMubmFtZVwiOiAxLFxuICAgICAgICBcInRyYWNlc1wiOiB7XG4gICAgICAgICAgJHNsaWNlOiAtMVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICBzdGVwQ3VycmVudE5hbWUgPSAocmVmID0gaW5zdGFuY2UudHJhY2VzKSAhPSBudWxsID8gKHJlZjEgPSByZWZbMF0pICE9IG51bGwgPyByZWYxLm5hbWUgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiBzdGVwQ3VycmVudE5hbWU7XG4gIH07XG4gIGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHtcbiAgICBfaWQ6IHtcbiAgICAgICRpbjogaWRzXG4gICAgfVxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICB0cmFjZXM6IDBcbiAgICB9XG4gIH0pLm9ic2VydmVDaGFuZ2VzKHtcbiAgICBjaGFuZ2VkOiBmdW5jdGlvbihpZCkge1xuICAgICAgdmFyIGVycm9yLCBpbnN0YW5jZSwgbXlBcHByb3ZlLCBteUxhc3RGaW5pc2hlZEFwcHJvdmUsIHJlZiwgcmVmMTtcbiAgICAgIGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgICBfaWQ6IGlkXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczogZmllbGRzXG4gICAgICB9KTtcbiAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbXlBcHByb3ZlID0gZ2V0TXlBcHByb3ZlKHNlbGYudXNlcklkLCBpZCk7XG4gICAgICBteUxhc3RGaW5pc2hlZEFwcHJvdmUgPSBnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUoc2VsZi51c2VySWQsIGlkKTtcbiAgICAgIGlmIChteUFwcHJvdmUpIHtcbiAgICAgICAgaW5zdGFuY2UuaXNfcmVhZCA9IG15QXBwcm92ZS5pc19yZWFkO1xuICAgICAgICBpbnN0YW5jZS5zdGFydF9kYXRlID0gbXlBcHByb3ZlLnN0YXJ0X2RhdGU7XG4gICAgICAgIGlmIChteUFwcHJvdmUuYWdlbnQpIHtcbiAgICAgICAgICBpbnN0YW5jZS5hZ2VudF91c2VyX25hbWUgPSBteUFwcHJvdmUudXNlcl9uYW1lO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnN0YW5jZS5pc19yZWFkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChteUxhc3RGaW5pc2hlZEFwcHJvdmUpIHtcbiAgICAgICAgaW5zdGFuY2UubXlfZmluaXNoX2RhdGUgPSBteUxhc3RGaW5pc2hlZEFwcHJvdmUuZmluaXNoX2RhdGU7XG4gICAgICB9XG4gICAgICBpbnN0YW5jZS5pc19jYyA9ICgocmVmID0gaW5zdGFuY2UuY2NfdXNlcnMpICE9IG51bGwgPyByZWYuaW5jbHVkZXMoc2VsZi51c2VySWQpIDogdm9pZCAwKSB8fCBmYWxzZTtcbiAgICAgIGluc3RhbmNlLmNjX2NvdW50ID0gKChyZWYxID0gaW5zdGFuY2UuY2NfdXNlcnMpICE9IG51bGwgPyByZWYxLmxlbmd0aCA6IHZvaWQgMCkgfHwgMDtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5jY191c2VycztcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNoYW5nZWQoXCJpbnN0YW5jZXNcIiwgaWQsIGluc3RhbmNlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgICAgICBlcnJvciA9IGVycm9yMTtcbiAgICAgICAgY29uc29sZS5sb2coJ2luc3RhbmNlIG9ic2VydmVDaGFuZ2VzIGVycm9yOiAnLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgY29uc29sZS5sb2coJ3NlbGYudXNlcklkOiAnLCBzZWxmLnVzZXJJZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0YWJsZU5hbWU6ICcsIHRhYmxlTmFtZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpZHM6ICcsIEpTT04uc3RyaW5naWZ5KGlkcykpO1xuICAgICAgICByZXR1cm4gY29uc29sZS5sb2coJ215QXBwcm92ZTogJywgSlNPTi5zdHJpbmdpZnkobXlBcHByb3ZlKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVkOiBmdW5jdGlvbihpZCkge1xuICAgICAgcmV0dXJuIHNlbGYucmVtb3ZlZChcImluc3RhbmNlc1wiLCBpZCk7XG4gICAgfVxuICB9KTtcbiAgaWRzLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICB2YXIgaW5zdGFuY2UsIG15QXBwcm92ZSwgbXlMYXN0RmluaXNoZWRBcHByb3ZlLCByZWYsIHJlZjE7XG4gICAgaW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGlkXG4gICAgfSwge1xuICAgICAgZmllbGRzOiBmaWVsZHNcbiAgICB9KTtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG15QXBwcm92ZSA9IGdldE15QXBwcm92ZShzZWxmLnVzZXJJZCwgaWQpO1xuICAgIG15TGFzdEZpbmlzaGVkQXBwcm92ZSA9IGdldE15TGFzdEZpbmlzaGVkQXBwcm92ZShzZWxmLnVzZXJJZCwgaWQpO1xuICAgIGlmIChteUFwcHJvdmUpIHtcbiAgICAgIGluc3RhbmNlLmlzX3JlYWQgPSBteUFwcHJvdmUuaXNfcmVhZDtcbiAgICAgIGluc3RhbmNlLnN0YXJ0X2RhdGUgPSBteUFwcHJvdmUuc3RhcnRfZGF0ZTtcbiAgICAgIGlmIChteUFwcHJvdmUuYWdlbnQpIHtcbiAgICAgICAgaW5zdGFuY2UuYWdlbnRfdXNlcl9uYW1lID0gbXlBcHByb3ZlLnVzZXJfbmFtZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2UuaXNfcmVhZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChteUxhc3RGaW5pc2hlZEFwcHJvdmUpIHtcbiAgICAgIGluc3RhbmNlLm15X2ZpbmlzaF9kYXRlID0gbXlMYXN0RmluaXNoZWRBcHByb3ZlLmZpbmlzaF9kYXRlO1xuICAgIH1cbiAgICBpbnN0YW5jZS5pc19jYyA9ICgocmVmID0gaW5zdGFuY2UuY2NfdXNlcnMpICE9IG51bGwgPyByZWYuaW5jbHVkZXMoc2VsZi51c2VySWQpIDogdm9pZCAwKSB8fCBmYWxzZTtcbiAgICBpbnN0YW5jZS5jY19jb3VudCA9ICgocmVmMSA9IGluc3RhbmNlLmNjX3VzZXJzKSAhPSBudWxsID8gcmVmMS5sZW5ndGggOiB2b2lkIDApIHx8IDA7XG4gICAgZGVsZXRlIGluc3RhbmNlLmNjX3VzZXJzO1xuICAgIHJldHVybiBzZWxmLmFkZGVkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSk7XG4gIH0pO1xuICBzZWxmLnJlYWR5KCk7XG4gIHJldHVybiBzZWxmLm9uU3RvcChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaGFuZGxlLnN0b3AoKTtcbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2goXCJpbnN0YW5jZV90YXNrc190YWJ1bGFyXCIsIGZ1bmN0aW9uKHRhYnVsYXJOYW1lLCBpZHMsIGZpZWxkcykge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBjaGVjayh0YWJ1bGFyTmFtZSwgU3RyaW5nKTtcbiAgY2hlY2soaWRzLCBBcnJheSk7XG4gIGNoZWNrKGZpZWxkcywgTWF0Y2guT3B0aW9uYWwoT2JqZWN0KSk7XG4gIHJldHVybiBkYi5pbnN0YW5jZV90YXNrcy5maW5kKHtcbiAgICBfaWQ6IHtcbiAgICAgICRpbjogaWRzXG4gICAgfVxuICB9LCB7XG4gICAgZmllbGRzOiBmaWVsZHNcbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2goXCJpbnN0YW5jZXNfdGFidWxhclwiLCBmdW5jdGlvbih0YWJ1bGFyTmFtZSwgaWRzLCBmaWVsZHMpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgY2hlY2sodGFidWxhck5hbWUsIFN0cmluZyk7XG4gIGNoZWNrKGlkcywgQXJyYXkpO1xuICBjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpO1xuICByZXR1cm4gZGIuaW5zdGFuY2VzLmZpbmQoe1xuICAgIF9pZDoge1xuICAgICAgJGluOiBpZHNcbiAgICB9XG4gIH0sIHtcbiAgICBmaWVsZHM6IGZpZWxkc1xuICB9KTtcbn0pO1xuIiwiTWV0ZW9yLnB1Ymxpc2ggJ2luc3RhbmNlc19kcmFmdCcsIChzcGFjZUlkKSAtPlxuXHRjaGVjayBzcGFjZUlkLCBTdHJpbmdcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dXNlcklkID0gdGhpcy51c2VySWRcblx0cmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHtzdGF0ZTpcImRyYWZ0XCIsc3BhY2U6c3BhY2VJZCxzdWJtaXR0ZXI6dXNlcklkLCRvcjpbe2luYm94X3VzZXJzOiB7JGV4aXN0czpmYWxzZX19LCB7aW5ib3hfdXNlcnM6IFtdfV19LCB7ZmllbGRzOiB7X2lkOiAxLCBzdGF0ZTogMSwgc3BhY2U6IDEsIHN1Ym1pdHRlcjogMSwgaW5ib3hfdXNlcnM6IDEsIG1vZGlmaWVkOiAxLCBuYW1lOiAxfSwgc29ydDp7bW9kaWZpZWQ6IC0xfX0pIiwiTWV0ZW9yLnB1Ymxpc2goJ2luc3RhbmNlc19kcmFmdCcsIGZ1bmN0aW9uKHNwYWNlSWQpIHtcbiAgdmFyIHVzZXJJZDtcbiAgY2hlY2soc3BhY2VJZCwgU3RyaW5nKTtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgdXNlcklkID0gdGhpcy51c2VySWQ7XG4gIHJldHVybiBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgc3RhdGU6IFwiZHJhZnRcIixcbiAgICBzcGFjZTogc3BhY2VJZCxcbiAgICBzdWJtaXR0ZXI6IHVzZXJJZCxcbiAgICAkb3I6IFtcbiAgICAgIHtcbiAgICAgICAgaW5ib3hfdXNlcnM6IHtcbiAgICAgICAgICAkZXhpc3RzOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGluYm94X3VzZXJzOiBbXVxuICAgICAgfVxuICAgIF1cbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgX2lkOiAxLFxuICAgICAgc3RhdGU6IDEsXG4gICAgICBzcGFjZTogMSxcbiAgICAgIHN1Ym1pdHRlcjogMSxcbiAgICAgIGluYm94X3VzZXJzOiAxLFxuICAgICAgbW9kaWZpZWQ6IDEsXG4gICAgICBuYW1lOiAxXG4gICAgfSxcbiAgICBzb3J0OiB7XG4gICAgICBtb2RpZmllZDogLTFcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJNZXRlb3IucHVibGlzaCAnZGlzdHJpYnV0ZWRfaW5zdGFuY2VzX3N0YXRlX2J5X2lkcycsIChpbnN0YW5jZV9pZHMpLT5cblx0Y2hlY2soaW5zdGFuY2VfaWRzLCBBcnJheSlcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cdFxuXHR1bmxlc3MgaW5zdGFuY2VfaWRzXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdGlmIF8uaXNFbXB0eShpbnN0YW5jZV9pZHMpXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHNlbGYgPSB0aGlzXG5cblx0aGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQoe19pZDogeyRpbjogaW5zdGFuY2VfaWRzfX0sIHtmaWVsZHM6IHtzdGF0ZTogMSwgdHJhY2VzOnskc2xpY2U6IDF9IH0gfSkub2JzZXJ2ZUNoYW5nZXMge1xuXHRcdGFkZGVkOiAoaWQsIGZpZWxkcyktPlxuXHRcdFx0c2VsZi5hZGRlZCgnaW5zdGFuY2VzJywgaWQsIHtzdGF0ZTogZmllbGRzLnN0YXRlLCBpc19yZWFkOiBmaWVsZHMudHJhY2VzWzBdLmFwcHJvdmVzWzBdLmlzX3JlYWR9KVxuXG5cdFx0Y2hhbmdlZDogKGlkLCBmaWVsZHMpLT5cblx0XHRcdGlmIGZpZWxkcy5zdGF0ZVxuXHRcdFx0XHRzZWxmLmNoYW5nZWQoJ2luc3RhbmNlcycsIGlkLCB7c3RhdGU6IGZpZWxkcy5zdGF0ZX0pXG5cdFx0XHRpZiBmaWVsZHMudHJhY2VzXG5cdFx0XHRcdHNlbGYuY2hhbmdlZCgnaW5zdGFuY2VzJywgaWQsIHtpc19yZWFkOiBmaWVsZHMudHJhY2VzWzBdLmFwcHJvdmVzWzBdLmlzX3JlYWR9KVxuXHR9XG5cblx0dGhpcy5yZWFkeSgpXG5cdHRoaXMub25TdG9wICgpLT5cblx0XHRoYW5kbGUuc3RvcCgpXG4iLCJNZXRlb3IucHVibGlzaCgnZGlzdHJpYnV0ZWRfaW5zdGFuY2VzX3N0YXRlX2J5X2lkcycsIGZ1bmN0aW9uKGluc3RhbmNlX2lkcykge1xuICB2YXIgaGFuZGxlLCBzZWxmO1xuICBjaGVjayhpbnN0YW5jZV9pZHMsIEFycmF5KTtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFpbnN0YW5jZV9pZHMpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoaW5zdGFuY2VfaWRzKSkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgc2VsZiA9IHRoaXM7XG4gIGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHtcbiAgICBfaWQ6IHtcbiAgICAgICRpbjogaW5zdGFuY2VfaWRzXG4gICAgfVxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBzdGF0ZTogMSxcbiAgICAgIHRyYWNlczoge1xuICAgICAgICAkc2xpY2U6IDFcbiAgICAgIH1cbiAgICB9XG4gIH0pLm9ic2VydmVDaGFuZ2VzKHtcbiAgICBhZGRlZDogZnVuY3Rpb24oaWQsIGZpZWxkcykge1xuICAgICAgcmV0dXJuIHNlbGYuYWRkZWQoJ2luc3RhbmNlcycsIGlkLCB7XG4gICAgICAgIHN0YXRlOiBmaWVsZHMuc3RhdGUsXG4gICAgICAgIGlzX3JlYWQ6IGZpZWxkcy50cmFjZXNbMF0uYXBwcm92ZXNbMF0uaXNfcmVhZFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBjaGFuZ2VkOiBmdW5jdGlvbihpZCwgZmllbGRzKSB7XG4gICAgICBpZiAoZmllbGRzLnN0YXRlKSB7XG4gICAgICAgIHNlbGYuY2hhbmdlZCgnaW5zdGFuY2VzJywgaWQsIHtcbiAgICAgICAgICBzdGF0ZTogZmllbGRzLnN0YXRlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkcy50cmFjZXMpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuY2hhbmdlZCgnaW5zdGFuY2VzJywgaWQsIHtcbiAgICAgICAgICBpc19yZWFkOiBmaWVsZHMudHJhY2VzWzBdLmFwcHJvdmVzWzBdLmlzX3JlYWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy5yZWFkeSgpO1xuICByZXR1cm4gdGhpcy5vblN0b3AoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhhbmRsZS5zdG9wKCk7XG4gIH0pO1xufSk7XG4iLCJNZXRlb3IucHVibGlzaCAncmVsYXRlZF9pbnN0YWNlcycsIChpbnN0YW5jZUlkLCByZWxhdGVkX2luc3RhbmNlcyktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIGluc3RhbmNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0cmVsYXRlZF9pbnN0YW5jZV9pZHMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZShpbnN0YW5jZUlkLHtmaWVsZHM6IHtyZWxhdGVkX2luc3RhbmNlczogMX19KT8ucmVsYXRlZF9pbnN0YW5jZXNcblxuXHRpZiByZWxhdGVkX2luc3RhbmNlX2lkcyAmJiBfLmlzQXJyYXkocmVsYXRlZF9pbnN0YW5jZV9pZHMpXG5cdFx0cmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHtfaWQ6IHskaW4gOiByZWxhdGVkX2luc3RhbmNlX2lkc319LCB7ZmllbGRzOiB7X2lkOiAxLCBuYW1lOiAxLCBzcGFjZTogMX19KVxuXHRlbHNlXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKSIsIk1ldGVvci5wdWJsaXNoKCdyZWxhdGVkX2luc3RhY2VzJywgZnVuY3Rpb24oaW5zdGFuY2VJZCwgcmVsYXRlZF9pbnN0YW5jZXMpIHtcbiAgdmFyIHJlZiwgcmVsYXRlZF9pbnN0YW5jZV9pZHM7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghaW5zdGFuY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmVsYXRlZF9pbnN0YW5jZV9pZHMgPSAocmVmID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoaW5zdGFuY2VJZCwge1xuICAgIGZpZWxkczoge1xuICAgICAgcmVsYXRlZF9pbnN0YW5jZXM6IDFcbiAgICB9XG4gIH0pKSAhPSBudWxsID8gcmVmLnJlbGF0ZWRfaW5zdGFuY2VzIDogdm9pZCAwO1xuICBpZiAocmVsYXRlZF9pbnN0YW5jZV9pZHMgJiYgXy5pc0FycmF5KHJlbGF0ZWRfaW5zdGFuY2VfaWRzKSkge1xuICAgIHJldHVybiBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgICBfaWQ6IHtcbiAgICAgICAgJGluOiByZWxhdGVkX2luc3RhbmNlX2lkc1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBfaWQ6IDEsXG4gICAgICAgIG5hbWU6IDEsXG4gICAgICAgIHNwYWNlOiAxXG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxufSk7XG4iLCJpZiBNZXRlb3IuaXNTZXJ2ZXJcbiAgICBNZXRlb3IucHVibGlzaCAnc3BhY2VfdXNlcl9zaWducycsIChzcGFjZUlkKSAtPlxuICAgICAgICBjaGVjayBzcGFjZUlkLCBTdHJpbmdcblxuICAgICAgICB1bmxlc3MgdGhpcy51c2VySWRcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWR5KClcblxuICAgICAgICByZXR1cm4gZGIuc3BhY2VfdXNlcl9zaWducy5maW5kKHsgc3BhY2U6IHNwYWNlSWQgfSwge2ZpZWxkczoge2NyZWF0ZWRfYnk6IDAsIGNyZWF0ZWQ6IDAsIG1vZGlmaWVkX2J5OiAwfX0pXG4iLCJpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gIE1ldGVvci5wdWJsaXNoKCdzcGFjZV91c2VyX3NpZ25zJywgZnVuY3Rpb24oc3BhY2VJZCkge1xuICAgIGNoZWNrKHNwYWNlSWQsIFN0cmluZyk7XG4gICAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgICB9XG4gICAgcmV0dXJuIGRiLnNwYWNlX3VzZXJfc2lnbnMuZmluZCh7XG4gICAgICBzcGFjZTogc3BhY2VJZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBjcmVhdGVkX2J5OiAwLFxuICAgICAgICBjcmVhdGVkOiAwLFxuICAgICAgICBtb2RpZmllZF9ieTogMFxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbiIsIiMjI1xuTWV0ZW9yLnB1Ymxpc2hDb21wb3NpdGUgXCJ1c2VyX2luYm94X2luc3RhbmNlXCIsICgpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVzZXJTcGFjZUlkcyA9IGRiLnNwYWNlX3VzZXJzLmZpbmQoe1xuXHRcdHVzZXI6IHRoaXMudXNlcklkLFxuXHRcdHVzZXJfYWNjZXB0ZWQ6IHRydWVcblx0fSwge2ZpZWxkczoge3NwYWNlOiAxfX0pLmZldGNoKCkuZ2V0RWFjaChcInNwYWNlXCIpO1xuXHRxdWVyeSA9IHtzcGFjZTogeyRpbjogdXNlclNwYWNlSWRzfX1cblxuXHRxdWVyeS4kb3IgPSBbe2luYm94X3VzZXJzOiB0aGlzLnVzZXJJZH0sIHtjY191c2VyczogdGhpcy51c2VySWR9XVxuXG5cdGZpbmQ6IC0+XG5cdFx0ZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtcblx0XHRcdGZpZWxkczoge1xuXHRcdFx0XHRzcGFjZTogMSxcblx0XHRcdFx0YXBwbGljYW50X25hbWU6IDEsXG5cdFx0XHRcdGZsb3c6IDEsXG5cdFx0XHRcdGluYm94X3VzZXJzOiAxLFxuXHRcdFx0XHRjY191c2VyczogMSxcblx0XHRcdFx0c3RhdGU6IDEsXG5cdFx0XHRcdG5hbWU6IDEsXG5cdFx0XHRcdG1vZGlmaWVkOiAxLFxuXHRcdFx0XHRmb3JtOiAxXG5cdFx0XHR9LCBzb3J0OiB7bW9kaWZpZWQ6IC0xfSwgc2tpcDogMCwgbGltaXQ6IDIwMFxuXHRcdH0pO1xuXHRjaGlsZHJlbjogW1xuXHRcdHtcblx0XHRcdGZpbmQ6IChpbnN0YW5jZSwgcG9zdCktPlxuXHRcdFx0XHRkYi5mbG93cy5maW5kKHtfaWQ6IGluc3RhbmNlLmZsb3d9LCB7ZmllbGRzOiB7bmFtZTogMSwgc3BhY2U6IDF9fSk7XG5cdFx0fVxuXHRdXG4jIyNcblxuIyMjXG5NZXRlb3IucHVibGlzaCAnbXlfaW5ib3hfaW5zdGFuY2VzJywgKHNwYWNlSWQpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHNlbGYgPSB0aGlzO1xuXG5cdCNcdHVzZXJTcGFjZUlkcyA9IGRiLnNwYWNlX3VzZXJzLmZpbmQoe1xuXHQjXHRcdHVzZXI6IHRoaXMudXNlcklkLFxuXHQjXHRcdHVzZXJfYWNjZXB0ZWQ6IHRydWVcblx0I1x0fSwge2ZpZWxkczoge3NwYWNlOiAxfX0pLmZldGNoKCkuZ2V0RWFjaChcInNwYWNlXCIpO1xuXG5cdHF1ZXJ5ID0ge3NwYWNlOiBzcGFjZUlkfVxuXG5cdHF1ZXJ5LiRvciA9IFt7aW5ib3hfdXNlcnM6IHRoaXMudXNlcklkfSwge2NjX3VzZXJzOiB0aGlzLnVzZXJJZH1dXG5cblx0ZmllbGRzID0ge1xuXHRcdHNwYWNlOiAxLFxuI1x0XHRhcHBsaWNhbnRfbmFtZTogMSxcblx0XHRmbG93OiAxLFxuXHRcdGluYm94X3VzZXJzOiAxLFxuXHRcdGNjX3VzZXJzOiAxLFxuXHRcdHN0YXRlOiAxLFxuI1x0XHRuYW1lOiAxLFxuI1x0XHRtb2RpZmllZDogMSxcblx0XHRmb3JtOiAxXG5cdH1cblxuXHRoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZChxdWVyeSwge3NvcnQ6IHttb2RpZmllZDogLTF9LCBza2lwOiAwLCBsaW1pdDogNTAwfSkub2JzZXJ2ZUNoYW5nZXMge1xuXHRcdGFkZGVkOiAoaWQpLT5cblx0XHRcdGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaWR9LCB7ZmllbGRzOiBmaWVsZHN9KVxuXHRcdFx0cmV0dXJuIGlmIG5vdCBpbnN0YW5jZVxuXHRcdFx0aW5zdGFuY2UuaXNfY2MgPSBpbnN0YW5jZS5jY191c2Vycz8uaW5jbHVkZXMoc2VsZi51c2VySWQpIHx8IGZhbHNlXG5cdFx0XHRkZWxldGUgaW5zdGFuY2UuY2NfdXNlcnNcblx0XHRcdHNlbGYuYWRkZWQoXCJpbnN0YW5jZXNcIiwgaWQsIGluc3RhbmNlKVxuXHRcdGNoYW5nZWQ6IChpZCktPlxuXHRcdFx0aW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpZH0sIHtmaWVsZHM6IGZpZWxkc30pXG5cdFx0XHRyZXR1cm4gaWYgbm90IGluc3RhbmNlXG5cdFx0XHRpbnN0YW5jZS5pc19jYyA9IGluc3RhbmNlLmNjX3VzZXJzPy5pbmNsdWRlcyhzZWxmLnVzZXJJZCkgfHwgZmFsc2Vcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZS5jY191c2Vyc1xuXHRcdFx0c2VsZi5jaGFuZ2VkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSk7XG5cdFx0cmVtb3ZlZDogKGlkKS0+XG5cdFx0XHRzZWxmLnJlbW92ZWQoXCJpbnN0YW5jZXNcIiwgaWQpO1xuXHR9XG5cblx0c2VsZi5yZWFkeSgpO1xuXHRzZWxmLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKVxuIyMjXG5cbl9nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlID0gKHNwYWNlSWQsIHVzZXJJZCwgX2l0ZW1zLCBjYWxsYmFjayktPlxuXHRkYi5pbnN0YW5jZXMucmF3Q29sbGVjdGlvbigpLmFnZ3JlZ2F0ZShbXG5cdFx0e1xuXHRcdFx0JG1hdGNoOiB7XG5cdFx0XHRcdHNwYWNlOiBzcGFjZUlkLFxuXHRcdFx0XHQkb3I6IFt7aW5ib3hfdXNlcnM6IHVzZXJJZH0sIHtjY191c2VyczogdXNlcklkfV1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdCRncm91cDoge1xuXHRcdFx0XHRfaWQ6IHtmbG93OiBcIiRmbG93XCIsIGNhdGVnb3J5OiBcIiRjYXRlZ29yeVwifSwgY291bnQ6IHskc3VtOiAxfVxuXHRcdFx0fVxuXHRcdH1cblx0XSkudG9BcnJheSAoZXJyLCBkYXRhKS0+XG5cdFx0aWYgZXJyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyKVxuXG5cdFx0ZGF0YS5mb3JFYWNoIChkb2MpIC0+XG5cdFx0XHRfaXRlbXMucHVzaCBkb2NcblxuXHRcdGlmIGNhbGxiYWNrICYmIF8uaXNGdW5jdGlvbihjYWxsYmFjaylcblx0XHRcdGNhbGxiYWNrKClcblx0XHRyZXR1cm5cblxuX2FzeW5jX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGUgPSBNZXRlb3Iud3JhcEFzeW5jKF9nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlKVxuXG5NZXRlb3IucHVibGlzaCAnbXlfaW5ib3hfZmxvd19pbnN0YW5jZXNfY291bnQnLCAoc3BhY2VJZCktPlxuXG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRzZWxmID0gdGhpcztcblxuXHRxdWVyeSA9IHtzcGFjZTogc3BhY2VJZH1cblxuXHRxdWVyeS4kb3IgPSBbe2luYm94X3VzZXJzOiB0aGlzLnVzZXJJZH0sIHtjY191c2VyczogdGhpcy51c2VySWR9XVxuXG5cdGRhdGEgPSBbXSAgI+aVsOaNruagvOW8j++8mlt7X2lkOmZsb3dJZCwgY291bnQ6IOW+heWKnuaVsOmHj30sIHtfaWQ6Zmxvd0lkMiwgY291bnQ6IOW+heWKnuaVsOmHjzJ9XVxuXHRfYXN5bmNfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZShzcGFjZUlkLCBzZWxmLnVzZXJJZCwgZGF0YSlcblxuXHRfZmxvd3NEYXRhID0gW11cblxuXHRfLmVhY2ggZGF0YSwgKGRhdGFJdGVtKS0+XG5cdFx0X2Zsb3dzRGF0YS5wdXNoKHtfaWQ6IGRhdGFJdGVtLl9pZC5mbG93LCBjYXRlZ29yeTogZGF0YUl0ZW0uX2lkLmNhdGVnb3J5LCBjb3VudDogZGF0YUl0ZW0uY291bnR9KVxuXG5cdHNlbGYuYWRkZWQoXCJmbG93X2luc3RhbmNlc1wiLCBzcGFjZUlkLCB7Zmxvd3M6IF9mbG93c0RhdGF9KTtcblxuXHRfY2hhbmdlRGF0YSA9IChkb2MsIGFjdGlvbiktPlxuXHRcdGZsb3dfaW5zdGFuY2UgPSBfLmZpbmQgX2Zsb3dzRGF0YSwgKGYpLT5cblx0XHRcdHJldHVybiBmLl9pZCA9PSBkb2MuZmxvd1xuXHRcdGlmIGZsb3dfaW5zdGFuY2Vcblx0XHRcdGlmIGFjdGlvbiA9PSBcImFkZGVkXCJcblx0XHRcdFx0Zmxvd19pbnN0YW5jZS5jb3VudCsrXG5cdFx0XHRlbHNlIGlmIGFjdGlvbiA9PSBcInJlbW92ZWRcIlxuXHRcdFx0XHRmbG93X2luc3RhbmNlLmNvdW50LS1cblx0XHRlbHNlIGlmIGFjdGlvbiA9PSBcImFkZGVkXCJcblx0XHRcdF9mbG93c0RhdGEucHVzaCB7X2lkOiBkb2MuZmxvdywgY2F0ZWdvcnk6IGRvYy5jYXRlZ29yeSwgY291bnQ6IDF9XG5cblx0XHRzZWxmLmNoYW5nZWQoXCJmbG93X2luc3RhbmNlc1wiLCBzcGFjZUlkLCB7Zmxvd3M6IF9mbG93c0RhdGF9KTtcblxuXHRfaW5pdCA9IHRydWVcblx0aGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtmaWVsZHM6IHtfaWQ6IDEsIGluYm94X3VzZXJzOiAxLCBjY191c2VyczogMSwgZmxvdzogMSwgY2F0ZWdvcnk6IDF9fSkub2JzZXJ2ZSB7XG5cdFx0YWRkZWQ6IChkb2MpLT5cblx0XHRcdGlmICFfaW5pdFxuXHRcdFx0XHRfY2hhbmdlRGF0YShkb2MsIFwiYWRkZWRcIilcblx0XHRyZW1vdmVkOiAoZG9jKS0+XG5cdFx0XHRpZiAhX2luaXRcblx0XHRcdFx0X2NoYW5nZURhdGEoZG9jLCBcInJlbW92ZWRcIilcblx0fVxuXHRfaW5pdCA9IGZhbHNlXG5cblx0c2VsZi5yZWFkeSgpO1xuXHRzZWxmLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKSIsIlxuLypcbk1ldGVvci5wdWJsaXNoQ29tcG9zaXRlIFwidXNlcl9pbmJveF9pbnN0YW5jZVwiLCAoKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1c2VyU3BhY2VJZHMgPSBkYi5zcGFjZV91c2Vycy5maW5kKHtcblx0XHR1c2VyOiB0aGlzLnVzZXJJZCxcblx0XHR1c2VyX2FjY2VwdGVkOiB0cnVlXG5cdH0sIHtmaWVsZHM6IHtzcGFjZTogMX19KS5mZXRjaCgpLmdldEVhY2goXCJzcGFjZVwiKTtcblx0cXVlcnkgPSB7c3BhY2U6IHskaW46IHVzZXJTcGFjZUlkc319XG5cblx0cXVlcnkuJG9yID0gW3tpbmJveF91c2VyczogdGhpcy51c2VySWR9LCB7Y2NfdXNlcnM6IHRoaXMudXNlcklkfV1cblxuXHRmaW5kOiAtPlxuXHRcdGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7XG5cdFx0XHRmaWVsZHM6IHtcblx0XHRcdFx0c3BhY2U6IDEsXG5cdFx0XHRcdGFwcGxpY2FudF9uYW1lOiAxLFxuXHRcdFx0XHRmbG93OiAxLFxuXHRcdFx0XHRpbmJveF91c2VyczogMSxcblx0XHRcdFx0Y2NfdXNlcnM6IDEsXG5cdFx0XHRcdHN0YXRlOiAxLFxuXHRcdFx0XHRuYW1lOiAxLFxuXHRcdFx0XHRtb2RpZmllZDogMSxcblx0XHRcdFx0Zm9ybTogMVxuXHRcdFx0fSwgc29ydDoge21vZGlmaWVkOiAtMX0sIHNraXA6IDAsIGxpbWl0OiAyMDBcblx0XHR9KTtcblx0Y2hpbGRyZW46IFtcblx0XHR7XG5cdFx0XHRmaW5kOiAoaW5zdGFuY2UsIHBvc3QpLT5cblx0XHRcdFx0ZGIuZmxvd3MuZmluZCh7X2lkOiBpbnN0YW5jZS5mbG93fSwge2ZpZWxkczoge25hbWU6IDEsIHNwYWNlOiAxfX0pO1xuXHRcdH1cblx0XVxuICovXG5cbi8qXG5NZXRlb3IucHVibGlzaCAnbXlfaW5ib3hfaW5zdGFuY2VzJywgKHNwYWNlSWQpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHNlbGYgPSB0aGlzO1xuXG5cdCAqXHR1c2VyU3BhY2VJZHMgPSBkYi5zcGFjZV91c2Vycy5maW5kKHtcblx0ICpcdFx0dXNlcjogdGhpcy51c2VySWQsXG5cdCAqXHRcdHVzZXJfYWNjZXB0ZWQ6IHRydWVcblx0ICpcdH0sIHtmaWVsZHM6IHtzcGFjZTogMX19KS5mZXRjaCgpLmdldEVhY2goXCJzcGFjZVwiKTtcblxuXHRxdWVyeSA9IHtzcGFjZTogc3BhY2VJZH1cblxuXHRxdWVyeS4kb3IgPSBbe2luYm94X3VzZXJzOiB0aGlzLnVzZXJJZH0sIHtjY191c2VyczogdGhpcy51c2VySWR9XVxuXG5cdGZpZWxkcyA9IHtcblx0XHRzcGFjZTogMSxcbiAqXHRcdGFwcGxpY2FudF9uYW1lOiAxLFxuXHRcdGZsb3c6IDEsXG5cdFx0aW5ib3hfdXNlcnM6IDEsXG5cdFx0Y2NfdXNlcnM6IDEsXG5cdFx0c3RhdGU6IDEsXG4gKlx0XHRuYW1lOiAxLFxuICpcdFx0bW9kaWZpZWQ6IDEsXG5cdFx0Zm9ybTogMVxuXHR9XG5cblx0aGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtzb3J0OiB7bW9kaWZpZWQ6IC0xfSwgc2tpcDogMCwgbGltaXQ6IDUwMH0pLm9ic2VydmVDaGFuZ2VzIHtcblx0XHRhZGRlZDogKGlkKS0+XG5cdFx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGlkfSwge2ZpZWxkczogZmllbGRzfSlcblx0XHRcdHJldHVybiBpZiBub3QgaW5zdGFuY2Vcblx0XHRcdGluc3RhbmNlLmlzX2NjID0gaW5zdGFuY2UuY2NfdXNlcnM/LmluY2x1ZGVzKHNlbGYudXNlcklkKSB8fCBmYWxzZVxuXHRcdFx0ZGVsZXRlIGluc3RhbmNlLmNjX3VzZXJzXG5cdFx0XHRzZWxmLmFkZGVkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSlcblx0XHRjaGFuZ2VkOiAoaWQpLT5cblx0XHRcdGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaWR9LCB7ZmllbGRzOiBmaWVsZHN9KVxuXHRcdFx0cmV0dXJuIGlmIG5vdCBpbnN0YW5jZVxuXHRcdFx0aW5zdGFuY2UuaXNfY2MgPSBpbnN0YW5jZS5jY191c2Vycz8uaW5jbHVkZXMoc2VsZi51c2VySWQpIHx8IGZhbHNlXG5cdFx0XHRkZWxldGUgaW5zdGFuY2UuY2NfdXNlcnNcblx0XHRcdHNlbGYuY2hhbmdlZChcImluc3RhbmNlc1wiLCBpZCwgaW5zdGFuY2UpO1xuXHRcdHJlbW92ZWQ6IChpZCktPlxuXHRcdFx0c2VsZi5yZW1vdmVkKFwiaW5zdGFuY2VzXCIsIGlkKTtcblx0fVxuXG5cdHNlbGYucmVhZHkoKTtcblx0c2VsZi5vblN0b3AgKCktPlxuXHRcdGhhbmRsZS5zdG9wKClcbiAqL1xudmFyIF9hc3luY19nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlLCBfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZTtcblxuX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGUgPSBmdW5jdGlvbihzcGFjZUlkLCB1c2VySWQsIF9pdGVtcywgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGRiLmluc3RhbmNlcy5yYXdDb2xsZWN0aW9uKCkuYWdncmVnYXRlKFtcbiAgICB7XG4gICAgICAkbWF0Y2g6IHtcbiAgICAgICAgc3BhY2U6IHNwYWNlSWQsXG4gICAgICAgICRvcjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluYm94X3VzZXJzOiB1c2VySWRcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBjY191c2VyczogdXNlcklkXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgJGdyb3VwOiB7XG4gICAgICAgIF9pZDoge1xuICAgICAgICAgIGZsb3c6IFwiJGZsb3dcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCIkY2F0ZWdvcnlcIlxuICAgICAgICB9LFxuICAgICAgICBjb3VudDoge1xuICAgICAgICAgICRzdW06IDFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgXSkudG9BcnJheShmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKTtcbiAgICB9XG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGRvYykge1xuICAgICAgcmV0dXJuIF9pdGVtcy5wdXNoKGRvYyk7XG4gICAgfSk7XG4gICAgaWYgKGNhbGxiYWNrICYmIF8uaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICB9KTtcbn07XG5cbl9hc3luY19nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlID0gTWV0ZW9yLndyYXBBc3luYyhfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSk7XG5cbk1ldGVvci5wdWJsaXNoKCdteV9pbmJveF9mbG93X2luc3RhbmNlc19jb3VudCcsIGZ1bmN0aW9uKHNwYWNlSWQpIHtcbiAgdmFyIF9jaGFuZ2VEYXRhLCBfZmxvd3NEYXRhLCBfaW5pdCwgZGF0YSwgaGFuZGxlLCBxdWVyeSwgc2VsZjtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgc2VsZiA9IHRoaXM7XG4gIHF1ZXJ5ID0ge1xuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH07XG4gIHF1ZXJ5LiRvciA9IFtcbiAgICB7XG4gICAgICBpbmJveF91c2VyczogdGhpcy51c2VySWRcbiAgICB9LCB7XG4gICAgICBjY191c2VyczogdGhpcy51c2VySWRcbiAgICB9XG4gIF07XG4gIGRhdGEgPSBbXTtcbiAgX2FzeW5jX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGUoc3BhY2VJZCwgc2VsZi51c2VySWQsIGRhdGEpO1xuICBfZmxvd3NEYXRhID0gW107XG4gIF8uZWFjaChkYXRhLCBmdW5jdGlvbihkYXRhSXRlbSkge1xuICAgIHJldHVybiBfZmxvd3NEYXRhLnB1c2goe1xuICAgICAgX2lkOiBkYXRhSXRlbS5faWQuZmxvdyxcbiAgICAgIGNhdGVnb3J5OiBkYXRhSXRlbS5faWQuY2F0ZWdvcnksXG4gICAgICBjb3VudDogZGF0YUl0ZW0uY291bnRcbiAgICB9KTtcbiAgfSk7XG4gIHNlbGYuYWRkZWQoXCJmbG93X2luc3RhbmNlc1wiLCBzcGFjZUlkLCB7XG4gICAgZmxvd3M6IF9mbG93c0RhdGFcbiAgfSk7XG4gIF9jaGFuZ2VEYXRhID0gZnVuY3Rpb24oZG9jLCBhY3Rpb24pIHtcbiAgICB2YXIgZmxvd19pbnN0YW5jZTtcbiAgICBmbG93X2luc3RhbmNlID0gXy5maW5kKF9mbG93c0RhdGEsIGZ1bmN0aW9uKGYpIHtcbiAgICAgIHJldHVybiBmLl9pZCA9PT0gZG9jLmZsb3c7XG4gICAgfSk7XG4gICAgaWYgKGZsb3dfaW5zdGFuY2UpIHtcbiAgICAgIGlmIChhY3Rpb24gPT09IFwiYWRkZWRcIikge1xuICAgICAgICBmbG93X2luc3RhbmNlLmNvdW50Kys7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJyZW1vdmVkXCIpIHtcbiAgICAgICAgZmxvd19pbnN0YW5jZS5jb3VudC0tO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImFkZGVkXCIpIHtcbiAgICAgIF9mbG93c0RhdGEucHVzaCh7XG4gICAgICAgIF9pZDogZG9jLmZsb3csXG4gICAgICAgIGNhdGVnb3J5OiBkb2MuY2F0ZWdvcnksXG4gICAgICAgIGNvdW50OiAxXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGYuY2hhbmdlZChcImZsb3dfaW5zdGFuY2VzXCIsIHNwYWNlSWQsIHtcbiAgICAgIGZsb3dzOiBfZmxvd3NEYXRhXG4gICAgfSk7XG4gIH07XG4gIF9pbml0ID0gdHJ1ZTtcbiAgaGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIF9pZDogMSxcbiAgICAgIGluYm94X3VzZXJzOiAxLFxuICAgICAgY2NfdXNlcnM6IDEsXG4gICAgICBmbG93OiAxLFxuICAgICAgY2F0ZWdvcnk6IDFcbiAgICB9XG4gIH0pLm9ic2VydmUoe1xuICAgIGFkZGVkOiBmdW5jdGlvbihkb2MpIHtcbiAgICAgIGlmICghX2luaXQpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFuZ2VEYXRhKGRvYywgXCJhZGRlZFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbW92ZWQ6IGZ1bmN0aW9uKGRvYykge1xuICAgICAgaWYgKCFfaW5pdCkge1xuICAgICAgICByZXR1cm4gX2NoYW5nZURhdGEoZG9jLCBcInJlbW92ZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgX2luaXQgPSBmYWxzZTtcbiAgc2VsZi5yZWFkeSgpO1xuICByZXR1cm4gc2VsZi5vblN0b3AoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhhbmRsZS5zdG9wKCk7XG4gIH0pO1xufSk7XG4iLCJcbk1ldGVvci5wdWJsaXNoICdmbG93X21haW5fYXR0YWNoX3RlbXBsYXRlJywgKHNwYWNlSWQsIGZsb3dJZCktPlxuXHRjaGVjayhzcGFjZUlkLCBTdHJpbmcpXG5cdGNoZWNrKGZsb3dJZCwgU3RyaW5nKVxuXG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3Mgc3BhY2VJZCAmJiBmbG93SWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0cmV0dXJuIENyZWF0b3IuZ2V0Q29sbGVjdGlvbignY21zX2ZpbGVzJykuZmluZCh7IHNwYWNlOiBzcGFjZUlkLCAncGFyZW50Lm8nOiAnZmxvd3MnLCAncGFyZW50Lmlkcyc6IGZsb3dJZCwgIG5hbWU6ICfmraPmlocuZG9jeCcgfSlcbiIsIk1ldGVvci5wdWJsaXNoKCdmbG93X21haW5fYXR0YWNoX3RlbXBsYXRlJywgZnVuY3Rpb24oc3BhY2VJZCwgZmxvd0lkKSB7XG4gIGNoZWNrKHNwYWNlSWQsIFN0cmluZyk7XG4gIGNoZWNrKGZsb3dJZCwgU3RyaW5nKTtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCEoc3BhY2VJZCAmJiBmbG93SWQpKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gQ3JlYXRvci5nZXRDb2xsZWN0aW9uKCdjbXNfZmlsZXMnKS5maW5kKHtcbiAgICBzcGFjZTogc3BhY2VJZCxcbiAgICAncGFyZW50Lm8nOiAnZmxvd3MnLFxuICAgICdwYXJlbnQuaWRzJzogZmxvd0lkLFxuICAgIG5hbWU6ICfmraPmlocuZG9jeCdcbiAgfSk7XG59KTtcbiIsIndvcmtmbG93VGVtcGxhdGUgPSB7fVxuXG4j5Y+v55So5q2k6ISa5pys5LuO5qih5p2/5bel5L2c5Yy65YGa5om56YeP5a+85Ye677yaXG4j5L2/55So566h55CG5ZGY6LSm5oi355m75b2V5ZCO77yM6L+b5YWlRmxvd01vZHVsZXPvvIzlnKjmjqfliLblj7DmiafooYzku6XkuIvohJrmnKzljbPlj69cbiNkYi5mb3Jtcy5maW5kKHtzdGF0ZTpcImVuYWJsZWRcIn0pLmZvckVhY2goZnVuY3Rpb24oZm9ybSl7d2luZG93Lm9wZW4oTWV0ZW9yLmFic29sdXRlVXJsKFwiYXBpL3dvcmtmbG93L2V4cG9ydC9mb3JtP2Zvcm09XCIrZm9ybS5faWQpKX0pXG53b3JrZmxvd1RlbXBsYXRlW1wiZW5cIl0gPVtdXG5cbiPlj6/nlKjmraTohJrmnKzku47mqKHmnb/lt6XkvZzljLrlgZrmibnph4/lr7zlh7rvvJpcbiPkvb/nlKjnrqHnkIblkZjotKbmiLfnmbvlvZXlkI7vvIzov5vlhaXmqKHmnb/kuJPljLrvvIzlnKjmjqfliLblj7DmiafooYzku6XkuIvohJrmnKzljbPlj69cbiNkYi5mb3Jtcy5maW5kKHtzdGF0ZTpcImVuYWJsZWRcIn0pLmZvckVhY2goZnVuY3Rpb24oZm9ybSl7d2luZG93Lm9wZW4oTWV0ZW9yLmFic29sdXRlVXJsKFwiYXBpL3dvcmtmbG93L2V4cG9ydC9mb3JtP2Zvcm09XCIrZm9ybS5faWQpKX0pXG53b3JrZmxvd1RlbXBsYXRlW1wiemgtQ05cIl0gPVtdXG5cbk1ldGVvci5zdGFydHVwICgpLT5cblx0ZnMgPSByZXF1aXJlKCdmcycpXG5cdHBhdGggPSByZXF1aXJlKCdwYXRoJylcblx0bWltZSA9IHJlcXVpcmUoJ21pbWUnKVxuXHRyZWFkRmlsZUxpc3QgPSAocGF0aERpciwgZmlsZXNMaXN0KS0+XG5cdFx0ZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhwYXRoRGlyKVxuXHRcdGZpbGVzLmZvckVhY2ggKG5hbWUsIGluZGV4KS0+XG5cdFx0XHRzdGF0ID0gZnMuc3RhdFN5bmMocGF0aC5qb2luKHBhdGhEaXIsIG5hbWUpKVxuXHRcdFx0aWYgc3RhdC5pc0RpcmVjdG9yeSgpXG5cdFx0XHRcdCMg6YCS5b2S6K+75Y+W5paH5Lu2XG5cdFx0XHRcdHJlYWRGaWxlTGlzdChwYXRoLmpvaW4ocGF0aERpciwgbmFtZSksIGZpbGVzTGlzdClcblx0XHRcdGVsc2Vcblx0XHRcdFx0b2JqID0ge31cblx0XHRcdFx0b2JqLnBhdGggPSBwYXRoRGlyXG5cdFx0XHRcdG9iai5uYW1lID0gbmFtZVxuXHRcdFx0XHRmaWxlc0xpc3QucHVzaChvYmopXG5cblx0I+iOt+WPlnpoLWNu5paH5Lu25aS55LiL55qE5omA5pyJ5paH5Lu2XG5cdGZpbGVzTGlzdF9jbiA9IFtdXG5cdHBhdGhfY24gPSBNZXRlb3Iuc2V0dGluZ3Mud29ya2Zsb3dUZW1wbGF0ZXM/LnBhdGhfY25cblx0aWYgcGF0aF9jblxuXHRcdGFic29sdXRlX3BhdGhfY24gPSBwYXRoLnJlc29sdmUocGF0aF9jbilcblx0XHRjb25zb2xlLmxvZyBcImFic29sdXRlX3BhdGhfY25cIiwgYWJzb2x1dGVfcGF0aF9jblxuXHRcdGlmIGZzLmV4aXN0c1N5bmMoYWJzb2x1dGVfcGF0aF9jbilcblx0XHRcdHJlYWRGaWxlTGlzdChhYnNvbHV0ZV9wYXRoX2NuLCBmaWxlc0xpc3RfY24pXG5cdFx0XHRmaWxlc0xpc3RfY24uZm9yRWFjaCAoZmlsZSktPlxuXHRcdFx0XHR0cnlcblx0XHRcdFx0XHRpZiBtaW1lLmdldFR5cGUoZmlsZS5uYW1lKSBpcyBcImFwcGxpY2F0aW9uL2pzb25cIlxuXHRcdFx0XHRcdFx0ZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZmlsZS5wYXRoLCBmaWxlLm5hbWUpLCAndXRmOCcpXG5cdFx0XHRcdFx0XHR3b3JrZmxvd1RlbXBsYXRlW1wiemgtQ05cIl0ucHVzaChKU09OLnBhcnNlKGRhdGEpKVxuXHRcdFx0XHRjYXRjaCBlXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciBcIuiOt+WPlnpoLWNu5paH5Lu25aS55LiL55qE5omA5pyJ5paH5Lu2XCIsIHBhdGguam9pbihmaWxlLnBhdGgsIGZpbGUubmFtZSlcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yIGUuc3RhY2tcblxuXHQj6I635Y+WZW4tdXPmlofku7blpLnkuIvnmoTmiYDmnInmlofku7Zcblx0ZmlsZXNMaXN0X3VzID0gW11cblx0cGF0aF91cyA9IE1ldGVvci5zZXR0aW5ncy53b3JrZmxvd1RlbXBsYXRlcz8ucGF0aF91c1xuXHRpZiBwYXRoX3VzXG5cdFx0YWJzb2x1dGVfcGF0aF91cyA9IHBhdGgucmVzb2x2ZShwYXRoX3VzKVxuXHRcdGNvbnNvbGUubG9nIFwiYWJzb2x1dGVfcGF0aF91c1wiLCBhYnNvbHV0ZV9wYXRoX3VzXG5cdFx0aWYgZnMuZXhpc3RzU3luYyhhYnNvbHV0ZV9wYXRoX3VzKVxuXHRcdFx0cmVhZEZpbGVMaXN0KGFic29sdXRlX3BhdGhfdXMsIGZpbGVzTGlzdF91cylcblx0XHRcdGZpbGVzTGlzdF91cy5mb3JFYWNoIChmaWxlKS0+XG5cdFx0XHRcdHRyeVxuXHRcdFx0XHRcdGlmIG1pbWUuZ2V0VHlwZShmaWxlLm5hbWUpIGlzIFwiYXBwbGljYXRpb24vanNvblwiXG5cdFx0XHRcdFx0XHRkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihmaWxlLnBhdGgsIGZpbGUubmFtZSksICd1dGY4Jylcblx0XHRcdFx0XHRcdHdvcmtmbG93VGVtcGxhdGVbXCJlblwiXS5wdXNoKEpTT04ucGFyc2UoZGF0YSkpXG5cdFx0XHRcdGNhdGNoIGVcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yIFwi6I635Y+WZW4tdXPmlofku7blpLnkuIvnmoTmiYDmnInmlofku7ZcIiwgcGF0aC5qb2luKGZpbGUucGF0aCwgZmlsZS5uYW1lKVxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IgZS5zdGFja1xuXHRcdFx0XHRcblx0XHRcdFx0XHRcblxuXG4iLCIgICAgICAgICAgICAgICAgICAgICBcblxud29ya2Zsb3dUZW1wbGF0ZSA9IHt9O1xuXG53b3JrZmxvd1RlbXBsYXRlW1wiZW5cIl0gPSBbXTtcblxud29ya2Zsb3dUZW1wbGF0ZVtcInpoLUNOXCJdID0gW107XG5cbk1ldGVvci5zdGFydHVwKGZ1bmN0aW9uKCkge1xuICB2YXIgYWJzb2x1dGVfcGF0aF9jbiwgYWJzb2x1dGVfcGF0aF91cywgZmlsZXNMaXN0X2NuLCBmaWxlc0xpc3RfdXMsIGZzLCBtaW1lLCBwYXRoLCBwYXRoX2NuLCBwYXRoX3VzLCByZWFkRmlsZUxpc3QsIHJlZiwgcmVmMTtcbiAgZnMgPSByZXF1aXJlKCdmcycpO1xuICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuICBtaW1lID0gcmVxdWlyZSgnbWltZScpO1xuICByZWFkRmlsZUxpc3QgPSBmdW5jdGlvbihwYXRoRGlyLCBmaWxlc0xpc3QpIHtcbiAgICB2YXIgZmlsZXM7XG4gICAgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhwYXRoRGlyKTtcbiAgICByZXR1cm4gZmlsZXMuZm9yRWFjaChmdW5jdGlvbihuYW1lLCBpbmRleCkge1xuICAgICAgdmFyIG9iaiwgc3RhdDtcbiAgICAgIHN0YXQgPSBmcy5zdGF0U3luYyhwYXRoLmpvaW4ocGF0aERpciwgbmFtZSkpO1xuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICByZXR1cm4gcmVhZEZpbGVMaXN0KHBhdGguam9pbihwYXRoRGlyLCBuYW1lKSwgZmlsZXNMaXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IHt9O1xuICAgICAgICBvYmoucGF0aCA9IHBhdGhEaXI7XG4gICAgICAgIG9iai5uYW1lID0gbmFtZTtcbiAgICAgICAgcmV0dXJuIGZpbGVzTGlzdC5wdXNoKG9iaik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGZpbGVzTGlzdF9jbiA9IFtdO1xuICBwYXRoX2NuID0gKHJlZiA9IE1ldGVvci5zZXR0aW5ncy53b3JrZmxvd1RlbXBsYXRlcykgIT0gbnVsbCA/IHJlZi5wYXRoX2NuIDogdm9pZCAwO1xuICBpZiAocGF0aF9jbikge1xuICAgIGFic29sdXRlX3BhdGhfY24gPSBwYXRoLnJlc29sdmUocGF0aF9jbik7XG4gICAgY29uc29sZS5sb2coXCJhYnNvbHV0ZV9wYXRoX2NuXCIsIGFic29sdXRlX3BhdGhfY24pO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGFic29sdXRlX3BhdGhfY24pKSB7XG4gICAgICByZWFkRmlsZUxpc3QoYWJzb2x1dGVfcGF0aF9jbiwgZmlsZXNMaXN0X2NuKTtcbiAgICAgIGZpbGVzTGlzdF9jbi5mb3JFYWNoKGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgICAgdmFyIGRhdGEsIGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKG1pbWUuZ2V0VHlwZShmaWxlLm5hbWUpID09PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuICAgICAgICAgICAgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZmlsZS5wYXRoLCBmaWxlLm5hbWUpLCAndXRmOCcpO1xuICAgICAgICAgICAgcmV0dXJuIHdvcmtmbG93VGVtcGxhdGVbXCJ6aC1DTlwiXS5wdXNoKEpTT04ucGFyc2UoZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlID0gZXJyb3I7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIuiOt+WPlnpoLWNu5paH5Lu25aS55LiL55qE5omA5pyJ5paH5Lu2XCIsIHBhdGguam9pbihmaWxlLnBhdGgsIGZpbGUubmFtZSkpO1xuICAgICAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZmlsZXNMaXN0X3VzID0gW107XG4gIHBhdGhfdXMgPSAocmVmMSA9IE1ldGVvci5zZXR0aW5ncy53b3JrZmxvd1RlbXBsYXRlcykgIT0gbnVsbCA/IHJlZjEucGF0aF91cyA6IHZvaWQgMDtcbiAgaWYgKHBhdGhfdXMpIHtcbiAgICBhYnNvbHV0ZV9wYXRoX3VzID0gcGF0aC5yZXNvbHZlKHBhdGhfdXMpO1xuICAgIGNvbnNvbGUubG9nKFwiYWJzb2x1dGVfcGF0aF91c1wiLCBhYnNvbHV0ZV9wYXRoX3VzKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhhYnNvbHV0ZV9wYXRoX3VzKSkge1xuICAgICAgcmVhZEZpbGVMaXN0KGFic29sdXRlX3BhdGhfdXMsIGZpbGVzTGlzdF91cyk7XG4gICAgICByZXR1cm4gZmlsZXNMaXN0X3VzLmZvckVhY2goZnVuY3Rpb24oZmlsZSkge1xuICAgICAgICB2YXIgZGF0YSwgZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobWltZS5nZXRUeXBlKGZpbGUubmFtZSkgPT09IFwiYXBwbGljYXRpb24vanNvblwiKSB7XG4gICAgICAgICAgICBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihmaWxlLnBhdGgsIGZpbGUubmFtZSksICd1dGY4Jyk7XG4gICAgICAgICAgICByZXR1cm4gd29ya2Zsb3dUZW1wbGF0ZVtcImVuXCJdLnB1c2goSlNPTi5wYXJzZShkYXRhKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGUgPSBlcnJvcjtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwi6I635Y+WZW4tdXPmlofku7blpLnkuIvnmoTmiYDmnInmlofku7ZcIiwgcGF0aC5qb2luKGZpbGUucGF0aCwgZmlsZS5uYW1lKSk7XG4gICAgICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSk7XG4iLCIjIyNcbiogICAgKiAgICAqICAgICogICAgKiAgICAqXG7ilKwgICAg4pSsICAgIOKUrCAgICDilKwgICAg4pSsICAgIOKUrFxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICB8XG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUlCBkYXkgb2Ygd2VlayAoMCAtIDcpICgwIG9yIDcgaXMgU3VuKVxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgCBtb250aCAoMSAtIDEyKVxu4pSCICAgIOKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIGRheSBvZiBtb250aCAoMSAtIDMxKVxu4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgaG91ciAoMCAtIDIzKVxu4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBtaW51dGUgKDAgLSA1OSlcbuKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBzZWNvbmQgKDAgLSA1OSwgT1BUSU9OQUwpXG4jIyNcbk1ldGVvci5zdGFydHVwIC0+XG5cdGlmIE1ldGVvci5zZXR0aW5ncy5jcm9uPy5hdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb25cblx0XHRzY2hlZHVsZSA9IHJlcXVpcmUoJ25vZGUtc2NoZWR1bGUnKVxuXHRcdCMg5a6a5pe25omn6KGM5ZCM5q2lXG5cdFx0cnVsZSA9IE1ldGVvci5zZXR0aW5ncy5jcm9uLmF1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvblxuXHRcdGdvX25leHQgPSB0cnVlXG5cdFx0c2NoZWR1bGUuc2NoZWR1bGVKb2IgcnVsZSwgTWV0ZW9yLmJpbmRFbnZpcm9ubWVudCAoKS0+XG5cdFx0XHR0cnlcblx0XHRcdFx0aWYgIWdvX25leHRcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Z29fbmV4dCA9IGZhbHNlXG5cdFx0XHRcdGNvbnNvbGUudGltZSAnYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uJ1xuXG5cdFx0XHRcdG5vdyA9IG5ldyBEYXRlXG5cblx0XHRcdFx0IyDlsIblp5TmiZjop4TliJnorr7nva7kuLrkuI3lj6/nlKhcblx0XHRcdFx0ZGIucHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzLnVwZGF0ZSh7IGVuYWJsZWQ6IHRydWUsIGVuZF90aW1lOiB7ICRsdGU6IG5vdyB9IH0sIHsgJHNldDogeyBlbmFibGVkOiBmYWxzZSB9IH0sIHsgbXVsdGkgOnRydWUgfSlcblxuXHRcdFx0XHRjb25zb2xlLnRpbWVFbmQgJ2F1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvbidcblx0XHRcdFx0Z29fbmV4dCA9IHRydWVcblxuXHRcdFx0Y2F0Y2ggZVxuXHRcdFx0XHRjb25zb2xlLmVycm9yIFwiQVVUTyBBVVRPX0ZJTklTSF9QUk9DRVNTX0RFTEVHQVRJT04gRVJST1I6IFwiXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IgZS5zdGFja1xuXHRcdFx0XHRnb19uZXh0ID0gdHJ1ZVxuXG5cdFx0LCAoZSktPlxuXHRcdFx0Y29uc29sZS5sb2cgJ0ZhaWxlZCB0byBiaW5kIGVudmlyb25tZW50OiBhdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24uY29mZmVlJ1xuXHRcdFx0Y29uc29sZS5sb2cgZS5zdGFja1xuIiwiXG4vKlxuKiAgICAqICAgICogICAgKiAgICAqICAgICpcbuKUrCAgICDilKwgICAg4pSsICAgIOKUrCAgICDilKwgICAg4pSsXG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIHxcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSUIGRheSBvZiB3ZWVrICgwIC0gNykgKDAgb3IgNyBpcyBTdW4pXG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSAIG1vbnRoICgxIC0gMTIpXG7ilIIgICAg4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgZGF5IG9mIG1vbnRoICgxIC0gMzEpXG7ilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBob3VyICgwIC0gMjMpXG7ilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIG1pbnV0ZSAoMCAtIDU5KVxu4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHNlY29uZCAoMCAtIDU5LCBPUFRJT05BTClcbiAqL1xuTWV0ZW9yLnN0YXJ0dXAoZnVuY3Rpb24oKSB7XG4gIHZhciBnb19uZXh0LCByZWYsIHJ1bGUsIHNjaGVkdWxlO1xuICBpZiAoKHJlZiA9IE1ldGVvci5zZXR0aW5ncy5jcm9uKSAhPSBudWxsID8gcmVmLmF1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvbiA6IHZvaWQgMCkge1xuICAgIHNjaGVkdWxlID0gcmVxdWlyZSgnbm9kZS1zY2hlZHVsZScpO1xuICAgIHJ1bGUgPSBNZXRlb3Iuc2V0dGluZ3MuY3Jvbi5hdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb247XG4gICAgZ29fbmV4dCA9IHRydWU7XG4gICAgcmV0dXJuIHNjaGVkdWxlLnNjaGVkdWxlSm9iKHJ1bGUsIE1ldGVvci5iaW5kRW52aXJvbm1lbnQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZSwgbm93O1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFnb19uZXh0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGdvX25leHQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS50aW1lKCdhdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24nKTtcbiAgICAgICAgbm93ID0gbmV3IERhdGU7XG4gICAgICAgIGRiLnByb2Nlc3NfZGVsZWdhdGlvbl9ydWxlcy51cGRhdGUoe1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgZW5kX3RpbWU6IHtcbiAgICAgICAgICAgICRsdGU6IG5vd1xuICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICRzZXQ6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUudGltZUVuZCgnYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uJyk7XG4gICAgICAgIHJldHVybiBnb19uZXh0ID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGUgPSBlcnJvcjtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkFVVE8gQVVUT19GSU5JU0hfUFJPQ0VTU19ERUxFR0FUSU9OIEVSUk9SOiBcIik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgICAgIHJldHVybiBnb19uZXh0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbihlKSB7XG4gICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGJpbmQgZW52aXJvbm1lbnQ6IGF1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvbi5jb2ZmZWUnKTtcbiAgICAgIHJldHVybiBjb25zb2xlLmxvZyhlLnN0YWNrKTtcbiAgICB9KSk7XG4gIH1cbn0pO1xuIiwiIyMjXG4qICAgICogICAgKiAgICAqICAgICogICAgKlxu4pSsICAgIOKUrCAgICDilKwgICAg4pSsICAgIOKUrCAgICDilKxcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAgfFxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilJQgZGF5IG9mIHdlZWsgKDAgLSA3KSAoMCBvciA3IGlzIFN1bilcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIAgbW9udGggKDEgLSAxMilcbuKUgiAgICDilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBkYXkgb2YgbW9udGggKDEgLSAzMSlcbuKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIGhvdXIgKDAgLSAyMylcbuKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgbWludXRlICgwIC0gNTkpXG7ilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgc2Vjb25kICgwIC0gNTksIE9QVElPTkFMKVxuIyMjXG5NZXRlb3Iuc3RhcnR1cCAtPlxuXHRpZiBNZXRlb3Iuc2V0dGluZ3MuY3Jvbj8udGltZW91dF9hdXRvX3N1Ym1pdFxuXHRcdHNjaGVkdWxlID0gcmVxdWlyZSgnbm9kZS1zY2hlZHVsZScpXG5cdFx0IyDlrprml7bmiafooYzlkIzmraVcblx0XHRydWxlID0gTWV0ZW9yLnNldHRpbmdzLmNyb24udGltZW91dF9hdXRvX3N1Ym1pdFxuXHRcdGdvX25leHQgPSB0cnVlXG5cdFx0c2NoZWR1bGUuc2NoZWR1bGVKb2IgcnVsZSwgTWV0ZW9yLmJpbmRFbnZpcm9ubWVudCAoKS0+XG5cdFx0XHR0cnlcblx0XHRcdFx0aWYgIWdvX25leHRcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Z29fbmV4dCA9IGZhbHNlXG5cdFx0XHRcdGNvbnNvbGUudGltZSAndGltZW91dF9hdXRvX3N1Ym1pdCdcblxuXHRcdFx0XHR1dWZsb3dNYW5hZ2VyLnRpbWVvdXRBdXRvU3VibWl0KClcblxuXHRcdFx0XHRjb25zb2xlLnRpbWVFbmQgJ3RpbWVvdXRfYXV0b19zdWJtaXQnXG5cdFx0XHRcdGdvX25leHQgPSB0cnVlXG5cblx0XHRcdGNhdGNoIGVcblx0XHRcdFx0Y29uc29sZS5lcnJvciBcIkFVVE8gVElNRU9VVF9BVVRPX1NVQk1JVCBFUlJPUjogXCJcblx0XHRcdFx0Y29uc29sZS5lcnJvciBlLnN0YWNrXG5cdFx0XHRcdGdvX25leHQgPSB0cnVlXG5cblx0XHQsIChlKS0+XG5cdFx0XHRjb25zb2xlLmxvZyAnRmFpbGVkIHRvIGJpbmQgZW52aXJvbm1lbnQ6IHRpbWVvdXRfYXV0b19zdWJtaXQuY29mZmVlJ1xuXHRcdFx0Y29uc29sZS5sb2cgZS5zdGFja1xuXG5NZXRlb3IubWV0aG9kc1xuXHR0aW1lb3V0X2F1dG9fc3VibWl0OiAoaW5zX2lkKS0+XG5cdFx0dXVmbG93TWFuYWdlci50aW1lb3V0QXV0b1N1Ym1pdChpbnNfaWQpXG5cdFx0cmV0dXJuIHRydWVcblxuXG4iLCJcbi8qXG4qICAgICogICAgKiAgICAqICAgICogICAgKlxu4pSsICAgIOKUrCAgICDilKwgICAg4pSsICAgIOKUrCAgICDilKxcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAgfFxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilJQgZGF5IG9mIHdlZWsgKDAgLSA3KSAoMCBvciA3IGlzIFN1bilcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIAgbW9udGggKDEgLSAxMilcbuKUgiAgICDilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBkYXkgb2YgbW9udGggKDEgLSAzMSlcbuKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIGhvdXIgKDAgLSAyMylcbuKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgbWludXRlICgwIC0gNTkpXG7ilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgc2Vjb25kICgwIC0gNTksIE9QVElPTkFMKVxuICovXG5NZXRlb3Iuc3RhcnR1cChmdW5jdGlvbigpIHtcbiAgdmFyIGdvX25leHQsIHJlZiwgcnVsZSwgc2NoZWR1bGU7XG4gIGlmICgocmVmID0gTWV0ZW9yLnNldHRpbmdzLmNyb24pICE9IG51bGwgPyByZWYudGltZW91dF9hdXRvX3N1Ym1pdCA6IHZvaWQgMCkge1xuICAgIHNjaGVkdWxlID0gcmVxdWlyZSgnbm9kZS1zY2hlZHVsZScpO1xuICAgIHJ1bGUgPSBNZXRlb3Iuc2V0dGluZ3MuY3Jvbi50aW1lb3V0X2F1dG9fc3VibWl0O1xuICAgIGdvX25leHQgPSB0cnVlO1xuICAgIHJldHVybiBzY2hlZHVsZS5zY2hlZHVsZUpvYihydWxlLCBNZXRlb3IuYmluZEVudmlyb25tZW50KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGU7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWdvX25leHQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZ29fbmV4dCA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLnRpbWUoJ3RpbWVvdXRfYXV0b19zdWJtaXQnKTtcbiAgICAgICAgdXVmbG93TWFuYWdlci50aW1lb3V0QXV0b1N1Ym1pdCgpO1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ3RpbWVvdXRfYXV0b19zdWJtaXQnKTtcbiAgICAgICAgcmV0dXJuIGdvX25leHQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZSA9IGVycm9yO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiQVVUTyBUSU1FT1VUX0FVVE9fU1VCTUlUIEVSUk9SOiBcIik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgICAgIHJldHVybiBnb19uZXh0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbihlKSB7XG4gICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGJpbmQgZW52aXJvbm1lbnQ6IHRpbWVvdXRfYXV0b19zdWJtaXQuY29mZmVlJyk7XG4gICAgICByZXR1cm4gY29uc29sZS5sb2coZS5zdGFjayk7XG4gICAgfSkpO1xuICB9XG59KTtcblxuTWV0ZW9yLm1ldGhvZHMoe1xuICB0aW1lb3V0X2F1dG9fc3VibWl0OiBmdW5jdGlvbihpbnNfaWQpIHtcbiAgICB1dWZsb3dNYW5hZ2VyLnRpbWVvdXRBdXRvU3VibWl0KGluc19pZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuIiwiTWV0ZW9yLnN0YXJ0dXAgKCktPlxuXHRUYWJ1bGFyVGFibGVzLnJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXIgPSBuZXcgVGFidWxhci5UYWJsZVxuXHRcdG5hbWU6IFwicmVsYXRlZF9pbnN0YW5jZXNfdGFidWxhclwiXG5cdFx0Y29sbGVjdGlvbjogZGIuaW5zdGFuY2VzXG5cdFx0Y29sdW1uczogW1xuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcIl9pZFwiLFxuXHRcdFx0XHR0aXRsZTogJzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwicmV2ZXJzZVwiIGlkPVwicmV2ZXJzZVwiPicsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHdpZHRoOiAnMXB4Jyxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aW5wdXQgPSAnPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwicmVsYXRlZC1pbnN0YW5jZXMtbGlzdC1jaGVja2JveFwiIG5hbWU9XCJyZWxhdGVkX2luc3RhbmNlc19pZHNcIiBpZD1cInJlbGF0ZWRfaW5zdGFuY2VzX2lkc1wiIHZhbHVlPVwiJyArIGRvYy5faWQgKyAnXCInXG5cblx0XHRcdFx0XHRpZiBUYWJ1bGFyVGFibGVzLnJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXIucmVsYXRlZF9pbnN0YW5jZXM/LmluY2x1ZGVzKGRvYy5faWQpXG5cdFx0XHRcdFx0XHRpbnB1dCArPSBcIiBjaGVja2VkIFwiXG5cblx0XHRcdFx0XHRpbnB1dCArPSBcIj5cIlxuXHRcdFx0XHRcdHJldHVybiBpbnB1dFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJuYW1lXCIsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHdpZHRoOiAnNDUlJyxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aHJlZiA9ICcnO1xuXHRcdFx0XHRcdGlmIE1ldGVvci5pc0NsaWVudCAmJiAoU3RlZWRvcy5pc01vYmlsZSgpIHx8IFN0ZWVkb3MuaXNDb3Jkb3ZhKCkpXG5cdFx0XHRcdFx0XHRocmVmID0gJydcblxuXHRcdFx0XHRcdGFic29sdXRlID0gZmFsc2VcblxuXHRcdFx0XHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0XHRcdFx0YWJzb2x1dGUgPSB0aGlzLmFic29sdXRlXG5cdFx0XHRcdFx0aWYgYWJzb2x1dGVcblx0XHRcdFx0XHRcdGhyZWYgPSBNZXRlb3IuYWJzb2x1dGVVcmwoXCJ3b3JrZmxvdy9zcGFjZS9cIitkb2Muc3BhY2UrXCIvdmlldy9yZWFkb25seS9cIiArIGRvYy5faWQgKyAnP2hpZGVfdHJhY2VzPTAnKVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGhyZWYgPSBTdGVlZG9zLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIrZG9jLnNwYWNlK1wiL3ZpZXcvcmVhZG9ubHkvXCIgKyBkb2MuX2lkICsgJz9oaWRlX3RyYWNlcz0wJylcblx0XHRcdFx0XHRyZXR1cm4gXCI8YSBkYXRhLWlkPScje2RvYy5faWR9JyB0YXJnZXQ9J19ibGFuaycgaHJlZj0nXCIraHJlZitcIic+XCIgKyBkb2MubmFtZSArIFwiPC9hPlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImFwcGxpY2FudF9uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9uYW1lXCIpLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImZsb3dfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19mbG93XCIpLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImN1cnJlbnRfc3RlcF9uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX2Zsb3dcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYy5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiXG5cdFx0XHRcdFx0XHRqdWRnZSA9IGRvYy5maW5hbF9kZWNpc2lvbiB8fCBcImFwcHJvdmVkXCJcblxuXHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lID0gZG9jLmN1cnJlbnRfc3RlcF9uYW1lIHx8ICcnXG5cblx0XHRcdFx0XHRyZXR1cm4gXCJcIlwiXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwLWN1cnJlbnQtc3RhdGUgI3tqdWRnZX1cIj4je3N0ZXBfY3VycmVudF9uYW1lfTwvZGl2PlxuXHRcdFx0XHRcdFx0XCJcIlwiXG5cdFx0XHR9XG5cdFx0XVxuXG5cdFx0ZG9tOiBcInRwXCIsXG5cdFx0bGVuZ3RoQ2hhbmdlOiBmYWxzZSxcblx0XHRleHRyYUZpZWxkczogW1wic3RhdGVcIiwgXCJmaW5hbF9kZWNpc2lvblwiLCBcInNwYWNlXCIsIFwia2V5d29yZHNcIl0sXG5cdFx0cGFnZUxlbmd0aDogMTAsXG5cdFx0aW5mbzogZmFsc2UsXG5cdFx0c2VhcmNoaW5nOiB0cnVlLFxuXHRcdHJlc3BvbnNpdmU6XG5cdFx0XHRkZXRhaWxzOiBmYWxzZVxuXHRcdGF1dG9XaWR0aDogZmFsc2UsXG5cdFx0Y2hhbmdlU2VsZWN0b3I6IChzZWxlY3RvciwgdXNlcklkKSAtPlxuXHRcdFx0dW5sZXNzIHVzZXJJZFxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cblx0XHRcdHNwYWNlSWQgPSBzZWxlY3Rvci5zcGFjZVxuXHRcdFx0dW5sZXNzIHNwYWNlSWRcblx0XHRcdFx0aWYgc2VsZWN0b3I/LiRhbmQ/Lmxlbmd0aCA+IDBcblx0XHRcdFx0XHRzcGFjZUlkID0gc2VsZWN0b3IuJGFuZC5nZXRQcm9wZXJ0eSgnc3BhY2UnKVswXVxuXHRcdFx0dW5sZXNzIHNwYWNlSWRcblx0XHRcdFx0cmV0dXJuIHtfaWQ6IC0xfVxuXHRcdFx0c3BhY2UgPSBkYi5zcGFjZXMuZmluZE9uZShzcGFjZUlkKVxuXHRcdFx0aWYgIXNwYWNlXG5cdFx0XHRcdHNlbGVjdG9yLnN0YXRlID0gXCJub25lXCJcblx0XHRcdGlmICFzcGFjZS5hZG1pbnMuaW5jbHVkZXModXNlcklkKVxuXG5cdFx0XHRcdGZsb3dfaWRzID0gW11cblx0XHRcdFx0Y3VyU3BhY2VVc2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7XG5cdFx0XHRcdFx0c3BhY2U6IHNwYWNlSWQsXG5cdFx0XHRcdFx0J3VzZXInOiB1c2VySWRcblx0XHRcdFx0fSlcblx0XHRcdFx0aWYgY3VyU3BhY2VVc2VyXG5cdFx0XHRcdFx0b3JnYW5pemF0aW9ucyA9IGRiLm9yZ2FuaXphdGlvbnMuZmluZCh7XG5cdFx0XHRcdFx0XHRfaWQ6IHtcblx0XHRcdFx0XHRcdFx0JGluOiBjdXJTcGFjZVVzZXIub3JnYW5pemF0aW9uc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmZldGNoKClcblx0XHRcdFx0XHRmbG93cyA9IGRiLmZsb3dzLmZpbmQoeyBzcGFjZTogc3BhY2VJZCB9KVxuXHRcdFx0XHRcdGZsb3dzLmZvckVhY2ggKGZsKS0+XG5cdFx0XHRcdFx0XHRpZiBXb3JrZmxvd01hbmFnZXIuY2FuTW9uaXRvcihmbCwgY3VyU3BhY2VVc2VyLCBvcmdhbml6YXRpb25zKSB8fCBXb3JrZmxvd01hbmFnZXIuY2FuQWRtaW4oZmwsIGN1clNwYWNlVXNlciwgb3JnYW5pemF0aW9ucylcblx0XHRcdFx0XHRcdFx0Zmxvd19pZHMucHVzaChmbC5faWQpXG5cblx0XHRcdFx0aWYgc2VsZWN0b3I/LiRhbmQ/Lmxlbmd0aCA+IDBcblx0XHRcdFx0XHRzZWxlY3Rvci4kYW5kWzBdLiRvciA9IFt7c3VibWl0dGVyOiB1c2VySWR9LCB7YXBwbGljYW50OiB1c2VySWR9LCB7aW5ib3hfdXNlcnM6IHVzZXJJZH0sIHtvdXRib3hfdXNlcnM6IHVzZXJJZH0sXG5cdFx0XHRcdFx0XHRcdHtjY191c2VyczogdXNlcklkfSwgeyBmbG93OiB7ICRpbjogZmxvd19pZHMgfSB9XVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0Xy5leHRlbmQgc2VsZWN0b3IsIHtcblx0XHRcdFx0XHRcdCRvcjogW3tzdWJtaXR0ZXI6IHVzZXJJZH0sIHthcHBsaWNhbnQ6IHVzZXJJZH0sIHtpbmJveF91c2VyczogdXNlcklkfSwge291dGJveF91c2VyczogdXNlcklkfSxcblx0XHRcdFx0XHRcdFx0e2NjX3VzZXJzOiB1c2VySWR9LCB7IGZsb3c6IHsgJGluOiBmbG93X2lkcyB9IH1dXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZWN0b3IiLCJNZXRlb3Iuc3RhcnR1cChmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFRhYnVsYXJUYWJsZXMucmVsYXRlZF9pbnN0YW5jZXNfdGFidWxhciA9IG5ldyBUYWJ1bGFyLlRhYmxlKHtcbiAgICBuYW1lOiBcInJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXJcIixcbiAgICBjb2xsZWN0aW9uOiBkYi5pbnN0YW5jZXMsXG4gICAgY29sdW1uczogW1xuICAgICAge1xuICAgICAgICBkYXRhOiBcIl9pZFwiLFxuICAgICAgICB0aXRsZTogJzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwicmV2ZXJzZVwiIGlkPVwicmV2ZXJzZVwiPicsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdpZHRoOiAnMXB4JyxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBpbnB1dCwgcmVmO1xuICAgICAgICAgIGlucHV0ID0gJzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInJlbGF0ZWQtaW5zdGFuY2VzLWxpc3QtY2hlY2tib3hcIiBuYW1lPVwicmVsYXRlZF9pbnN0YW5jZXNfaWRzXCIgaWQ9XCJyZWxhdGVkX2luc3RhbmNlc19pZHNcIiB2YWx1ZT1cIicgKyBkb2MuX2lkICsgJ1wiJztcbiAgICAgICAgICBpZiAoKHJlZiA9IFRhYnVsYXJUYWJsZXMucmVsYXRlZF9pbnN0YW5jZXNfdGFidWxhci5yZWxhdGVkX2luc3RhbmNlcykgIT0gbnVsbCA/IHJlZi5pbmNsdWRlcyhkb2MuX2lkKSA6IHZvaWQgMCkge1xuICAgICAgICAgICAgaW5wdXQgKz0gXCIgY2hlY2tlZCBcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5wdXQgKz0gXCI+XCI7XG4gICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibmFtZVwiLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlLFxuICAgICAgICB3aWR0aDogJzQ1JScsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgYWJzb2x1dGUsIGhyZWY7XG4gICAgICAgICAgaHJlZiA9ICcnO1xuICAgICAgICAgIGlmIChNZXRlb3IuaXNDbGllbnQgJiYgKFN0ZWVkb3MuaXNNb2JpbGUoKSB8fCBTdGVlZG9zLmlzQ29yZG92YSgpKSkge1xuICAgICAgICAgICAgaHJlZiA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhYnNvbHV0ZSA9IGZhbHNlO1xuICAgICAgICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICAgIGFic29sdXRlID0gdGhpcy5hYnNvbHV0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFic29sdXRlKSB7XG4gICAgICAgICAgICBocmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIgKyBkb2Muc3BhY2UgKyBcIi92aWV3L3JlYWRvbmx5L1wiICsgZG9jLl9pZCArICc/aGlkZV90cmFjZXM9MCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBocmVmID0gU3RlZWRvcy5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiICsgZG9jLnNwYWNlICsgXCIvdmlldy9yZWFkb25seS9cIiArIGRvYy5faWQgKyAnP2hpZGVfdHJhY2VzPTAnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIChcIjxhIGRhdGEtaWQ9J1wiICsgZG9jLl9pZCArIFwiJyB0YXJnZXQ9J19ibGFuaycgaHJlZj0nXCIpICsgaHJlZiArIFwiJz5cIiArIGRvYy5uYW1lICsgXCI8L2E+XCI7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJhcHBsaWNhbnRfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfbmFtZVwiKSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImZsb3dfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19mbG93XCIpLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiY3VycmVudF9zdGVwX25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfZmxvd1wiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBqdWRnZSwgc3RlcF9jdXJyZW50X25hbWU7XG4gICAgICAgICAgaWYgKGRvYy5zdGF0ZSA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgICAganVkZ2UgPSBkb2MuZmluYWxfZGVjaXNpb24gfHwgXCJhcHByb3ZlZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZSA9IGRvYy5jdXJyZW50X3N0ZXBfbmFtZSB8fCAnJztcbiAgICAgICAgICByZXR1cm4gXCI8ZGl2IGNsYXNzPVxcXCJzdGVwLWN1cnJlbnQtc3RhdGUgXCIgKyBqdWRnZSArIFwiXFxcIj5cIiArIHN0ZXBfY3VycmVudF9uYW1lICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZG9tOiBcInRwXCIsXG4gICAgbGVuZ3RoQ2hhbmdlOiBmYWxzZSxcbiAgICBleHRyYUZpZWxkczogW1wic3RhdGVcIiwgXCJmaW5hbF9kZWNpc2lvblwiLCBcInNwYWNlXCIsIFwia2V5d29yZHNcIl0sXG4gICAgcGFnZUxlbmd0aDogMTAsXG4gICAgaW5mbzogZmFsc2UsXG4gICAgc2VhcmNoaW5nOiB0cnVlLFxuICAgIHJlc3BvbnNpdmU6IHtcbiAgICAgIGRldGFpbHM6IGZhbHNlXG4gICAgfSxcbiAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgIGNoYW5nZVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvciwgdXNlcklkKSB7XG4gICAgICB2YXIgY3VyU3BhY2VVc2VyLCBmbG93X2lkcywgZmxvd3MsIG9yZ2FuaXphdGlvbnMsIHJlZiwgcmVmMSwgc3BhY2UsIHNwYWNlSWQ7XG4gICAgICBpZiAoIXVzZXJJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9pZDogLTFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHNwYWNlSWQgPSBzZWxlY3Rvci5zcGFjZTtcbiAgICAgIGlmICghc3BhY2VJZCkge1xuICAgICAgICBpZiAoKHNlbGVjdG9yICE9IG51bGwgPyAocmVmID0gc2VsZWN0b3IuJGFuZCkgIT0gbnVsbCA/IHJlZi5sZW5ndGggOiB2b2lkIDAgOiB2b2lkIDApID4gMCkge1xuICAgICAgICAgIHNwYWNlSWQgPSBzZWxlY3Rvci4kYW5kLmdldFByb3BlcnR5KCdzcGFjZScpWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXNwYWNlSWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaWQ6IC0xXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzcGFjZSA9IGRiLnNwYWNlcy5maW5kT25lKHNwYWNlSWQpO1xuICAgICAgaWYgKCFzcGFjZSkge1xuICAgICAgICBzZWxlY3Rvci5zdGF0ZSA9IFwibm9uZVwiO1xuICAgICAgfVxuICAgICAgaWYgKCFzcGFjZS5hZG1pbnMuaW5jbHVkZXModXNlcklkKSkge1xuICAgICAgICBmbG93X2lkcyA9IFtdO1xuICAgICAgICBjdXJTcGFjZVVzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHtcbiAgICAgICAgICBzcGFjZTogc3BhY2VJZCxcbiAgICAgICAgICAndXNlcic6IHVzZXJJZFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN1clNwYWNlVXNlcikge1xuICAgICAgICAgIG9yZ2FuaXphdGlvbnMgPSBkYi5vcmdhbml6YXRpb25zLmZpbmQoe1xuICAgICAgICAgICAgX2lkOiB7XG4gICAgICAgICAgICAgICRpbjogY3VyU3BhY2VVc2VyLm9yZ2FuaXphdGlvbnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS5mZXRjaCgpO1xuICAgICAgICAgIGZsb3dzID0gZGIuZmxvd3MuZmluZCh7XG4gICAgICAgICAgICBzcGFjZTogc3BhY2VJZFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZsb3dzLmZvckVhY2goZnVuY3Rpb24oZmwpIHtcbiAgICAgICAgICAgIGlmIChXb3JrZmxvd01hbmFnZXIuY2FuTW9uaXRvcihmbCwgY3VyU3BhY2VVc2VyLCBvcmdhbml6YXRpb25zKSB8fCBXb3JrZmxvd01hbmFnZXIuY2FuQWRtaW4oZmwsIGN1clNwYWNlVXNlciwgb3JnYW5pemF0aW9ucykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZsb3dfaWRzLnB1c2goZmwuX2lkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHNlbGVjdG9yICE9IG51bGwgPyAocmVmMSA9IHNlbGVjdG9yLiRhbmQpICE9IG51bGwgPyByZWYxLmxlbmd0aCA6IHZvaWQgMCA6IHZvaWQgMCkgPiAwKSB7XG4gICAgICAgICAgc2VsZWN0b3IuJGFuZFswXS4kb3IgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN1Ym1pdHRlcjogdXNlcklkXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIGFwcGxpY2FudDogdXNlcklkXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIGluYm94X3VzZXJzOiB1c2VySWRcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgb3V0Ym94X3VzZXJzOiB1c2VySWRcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgY2NfdXNlcnM6IHVzZXJJZFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICBmbG93OiB7XG4gICAgICAgICAgICAgICAgJGluOiBmbG93X2lkc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfLmV4dGVuZChzZWxlY3Rvciwge1xuICAgICAgICAgICAgJG9yOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdWJtaXR0ZXI6IHVzZXJJZFxuICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgYXBwbGljYW50OiB1c2VySWRcbiAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGluYm94X3VzZXJzOiB1c2VySWRcbiAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG91dGJveF91c2VyczogdXNlcklkXG4gICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBjY191c2VyczogdXNlcklkXG4gICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBmbG93OiB7XG4gICAgICAgICAgICAgICAgICAkaW46IGZsb3dfaWRzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJTdGVlZG9zLnN1YnNbXCJJbnN0YW5jZVRhYnVsYXJcIl0gPSBuZXcgU3Vic01hbmFnZXIoKVxuXG5cbl9oYW5kbGVMaXN0RmllbGRzID0gKGZpZWxkcykgLT5cblx0aW5zX2ZpZWxkcyA9IG5ldyBBcnJheSgpO1xuXG5cdGZpZWxkcz8uZm9yRWFjaCAoZiktPlxuXHRcdGlmIGYudHlwZSA9PSAndGFibGUnXG5cdFx0XHRjb25zb2xlLmxvZyAnaWdub3JlIG9waW5pb24gZmllbGQgaW4gdGFibGUnXG5cdFx0ZWxzZSBpZiBmLnR5cGUgPT0gJ3NlY3Rpb24nXG5cdFx0XHRmPy5maWVsZHM/LmZvckVhY2ggKGYxKS0+XG5cdFx0XHRcdGluc19maWVsZHMucHVzaCBmMVxuXHRcdGVsc2Vcblx0XHRcdGluc19maWVsZHMucHVzaCBmXG5cblx0cmV0dXJuIGluc19maWVsZHNcblxuXG51cGRhdGVUYWJ1bGFyVGl0bGUgPSAoKS0+XG5cbiMg5aaC5p6cY29sdW1uc+acieWKoOWHj++8jOivt+S/ruaUuVRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX3RhYmxlQ29sdW1ucyDlh73mlbBcbmluc3RhbmNlc0xpc3RUYWJsZVRhYnVsYXIgPSAoZmxvd0lkLCBmaWVsZHMpLT5cblx0b3B0aW9ucyA9IHtcblx0XHRuYW1lOiBcImluc3RhbmNlc1wiLFxuXHRcdGNvbGxlY3Rpb246IGRiLmluc3RhbmNlcyxcblx0XHRwdWI6IFwiaW5zdGFuY2VfdGFidWxhclwiLFxuXHRcdG9uVW5sb2FkOiAoKS0+XG5cdFx0XHRNZXRlb3Iuc2V0VGltZW91dChUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMsIDE1MClcblxuXHRcdGRyYXdDYWxsYmFjazogKHNldHRpbmdzKS0+XG5cdFx0XHRlbXB0eVRkID0gJChcIi5kYXRhVGFibGVzX2VtcHR5XCIpXG5cdFx0XHRpZiBlbXB0eVRkLmxlbmd0aFxuXHRcdFx0XHRlbXB0eVRkWzBdLmNvbFNwYW4gPSBcIjZcIlxuXHRcdFx0aWYgIVN0ZWVkb3MuaXNNb2JpbGUoKSAmJiAhU3RlZWRvcy5pc1BhZCgpXG5cdFx0XHRcdE1ldGVvci5zZXRUaW1lb3V0KFRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX3RhYmxlQ29sdW1ucywgMTUwKVxuXHRcdFx0XHQkKFwiLmluc3RhbmNlLWxpc3RcIikuc2Nyb2xsVG9wKDApLnJlYWR5IC0+XG5cdFx0XHRcdFx0JChcIi5pbnN0YW5jZS1saXN0XCIpLnBlcmZlY3RTY3JvbGxiYXIoXCJ1cGRhdGVcIilcblx0XHRcdGVsc2Vcblx0XHRcdFx0JChcIi5pbnN0YW5jZS1saXN0XCIpLnNjcm9sbFRvcCgwKVxuXG5cdFx0XHR0aXRsZSA9IHQgXCJwYWdlcl9pbnB1dF9oaW50XCJcblx0XHRcdGVsbGlwc2lzTGluayA9IHNldHRpbmdzLm9JbnN0YW5jZS5wYXJlbnQoKS5maW5kKCcucGFnaW5nX251bWJlcnMgLnBhZ2luYXRpb24gLmRpc2FibGVkIGEnKVxuXHRcdFx0ZWxsaXBzaXNMaW5rLmF0dHIoXCJ0aXRsZVwiLCB0aXRsZSkuY3NzKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKS5jbGljayAtPlxuXHRcdFx0XHRpZiAhJCh0aGlzKS5maW5kKCdpbnB1dCcpLmxlbmd0aFxuXHRcdFx0XHRcdGlucHV0ID0gJCgnPGlucHV0IGNsYXNzPVwicGFnaW5hdGVfaW5wdXQgZm9ybS1jb250cm9sIGlucHV0LXNtXCIgdHlwZT1cInRleHRcIiBzdHlsZT1cImJvcmRlcjogbm9uZTsgcGFkZGluZzowIDJweDtcIi8+Jylcblx0XHRcdFx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKClcblx0XHRcdFx0XHRcdGlucHV0LmNzcyh7XG5cdFx0XHRcdFx0XHRcdHdpZHRoOlwiNTJweFwiXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogXCIyMHB4XCJcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0aW5wdXQuY3NzKHtcblx0XHRcdFx0XHRcdFx0d2lkdGg6XCI1MnB4XCJcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBcIjE2cHhcIlxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRpbnB1dC5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmF0dHIoXCJwbGFjZWhvbGRlclwiLCB0aXRsZSlcblx0XHRcdFx0XHQkKHRoaXMpLmVtcHR5KCkuYXBwZW5kIGlucHV0XG5cdFx0XHRcdFx0Z29QYWdlID0gKGluZGV4KS0+XG5cdFx0XHRcdFx0XHRpZiBpbmRleCA+IDBcblx0XHRcdFx0XHRcdFx0cGFnZXMgPSBNYXRoLmNlaWwoc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpIC8gc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoKVxuXHRcdFx0XHRcdFx0XHRpZiBpbmRleCA+IHBhZ2VzXG5cdFx0XHRcdFx0XHRcdFx0IyDpobXnoIHotoXlh7rntKLlvJXml7bot7PovazliLDmnIDlkI7kuIDpobVcblx0XHRcdFx0XHRcdFx0XHRpbmRleCA9IHBhZ2VzXG5cdFx0XHRcdFx0XHRcdGluZGV4LS1cblx0XHRcdFx0XHRcdFx0c2V0dGluZ3Mub0luc3RhbmNlLkRhdGFUYWJsZSgpLnBhZ2UoaW5kZXgpLmRyYXcoJ3BhZ2UnKVxuXHRcdFx0XHRcdGlucHV0LmJsdXIgKGUpLT5cblx0XHRcdFx0XHRcdGN1cnJlbnRQYWdlID0gJCh0aGlzKS52YWwoKVxuXHRcdFx0XHRcdFx0Z29QYWdlIGN1cnJlbnRQYWdlXG5cdFx0XHRcdFx0XHQkKHRoaXMpLnBhcmVudCgpLmh0bWwgJy4uLidcblx0XHRcdFx0XHRpbnB1dC5rZXlkb3duIChlKS0+XG5cdFx0XHRcdFx0XHRpZihlLmtleUNvZGUudG9TdHJpbmcoKSA9PSBcIjEzXCIpXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRQYWdlID0gJCh0aGlzKS52YWwoKVxuXHRcdFx0XHRcdFx0XHRnb1BhZ2UgY3VycmVudFBhZ2VcblxuXHRcdGNyZWF0ZWRSb3c6IChyb3csIGRhdGEsIGRhdGFJbmRleCkgLT5cblx0XHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0XHRpZiBkYXRhLl9pZCA9PSBGbG93Um91dGVyLmN1cnJlbnQoKS5wYXJhbXMuaW5zdGFuY2VJZFxuXHRcdFx0XHRcdHJvdy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInNlbGVjdGVkXCIpXG5cdFx0Y29sdW1uczogW1xuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcIl9pZFwiLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdG1vZGlmaWVkU3RyaW5nID0gbW9tZW50KGRvYy5tb2RpZmllZCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG5cblx0XHRcdFx0XHRtb2RpZmllZCA9IGRvYy5tb2RpZmllZFxuXHRcdFx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCcgJiYgZG9jLnN0YXRlICE9ICdkcmFmdCdcblx0XHRcdFx0XHRcdG1vZGlmaWVkID0gZG9jLnN0YXJ0X2RhdGUgfHwgZG9jLm1vZGlmaWVkXG5cblx0XHRcdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnb3V0Ym94JyB8fCBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnbW9uaXRvcidcblx0XHRcdFx0XHRcdG1vZGlmaWVkID0gZG9jLnN1Ym1pdF9kYXRlIHx8IGRvYy5zdWJtaXRfZGF0ZVxuXG5cdFx0XHRcdFx0bW9kaWZpZWRGcm9tTm93ID0gU3RlZWRvcy5tb21lbnRSZWFjdGl2ZUZyb21Ob3cobW9kaWZpZWQpO1xuXHRcdFx0XHRcdGZsb3dfbmFtZSA9IGRvYy5mbG93X25hbWVcblx0XHRcdFx0XHRjY192aWV3ID0gXCJcIjtcblx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCJcIjtcblx0XHRcdFx0XHQjIOW9k+WJjeeUqOaIt+WcqGNjIHVzZXLkuK3vvIzkvYbmmK/kuI3lnKhpbmJveCB1c2Vyc+aXtuaJjeaYvuekuifkvKDpmIUn5paH5a2XXG5cdFx0XHRcdFx0aWYgZG9jLmlzX2NjICYmICFkb2MuaW5ib3hfdXNlcnM/LmluY2x1ZGVzKE1ldGVvci51c2VySWQoKSkgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94J1xuXHRcdFx0XHRcdFx0Y2NfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXyhcImluc3RhbmNlX2NjX3RpdGxlXCIpICsgXCIpPC9sYWJlbD4gXCJcblx0XHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+I3tmbG93X25hbWV9PHNwYW4+KCN7ZG9jLmN1cnJlbnRfc3RlcF9uYW1lfSk8L3NwYW4+PC9kaXY+XCJcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSAhPSAnZHJhZnQnICYmIGRvYy5jdXJyZW50X3N0ZXBfbmFtZVxuXHRcdFx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPiN7Zmxvd19uYW1lfTxzcGFuPigje2RvYy5jdXJyZW50X3N0ZXBfbmFtZX0pPC9zcGFuPjwvZGl2PlwiXG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+I3tmbG93X25hbWV9PC9kaXY+XCJcblxuXHRcdFx0XHRcdGFnZW50X3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdGlmIGRvYy5hZ2VudF91c2VyX25hbWUgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94J1xuXHRcdFx0XHRcdFx0YWdlbnRfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge3VzZXJOYW1lOiBkb2MuYWdlbnRfdXNlcl9uYW1lfSkgKyBcIik8L2xhYmVsPlwiXG5cblx0XHRcdFx0XHR1bnJlYWQgPSAnJ1xuXG5cdFx0XHRcdFx0IyBpc0Zhdm9yaXRlU2VsZWN0ZWQgPSBGYXZvcml0ZXMuaXNSZWNvcmRTZWxlY3RlZChcImluc3RhbmNlc1wiLCBkb2MuX2lkKVxuXHRcdFx0XHRcdCMgaWYgRmF2b3JpdGVzLmlzUmVjb3JkU2VsZWN0ZWQoXCJpbnN0YW5jZXNcIiwgZG9jLl9pZClcblx0XHRcdFx0XHQjIFx0dW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1pb3Mtc3Rhci1vdXRsaW5lIGluc3RhbmNlLWZhdm9yaXRlLXNlbGVjdGVkXCI+PC9pPidcblx0XHRcdFx0XHQjIGVsc2UgXG5cdFx0XHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94JyAmJiBkb2MuaXNfcmVhZCA9PSBmYWxzZVxuXHRcdFx0XHRcdFx0dW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPidcblx0XHRcdFx0XHRlbHNlIGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdtb25pdG9yJyAmJiBkb2MuaXNfaGlkZGVuID09IHRydWVcblx0XHRcdFx0XHRcdHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+J1xuXG5cdFx0XHRcdFx0cHJpb3JpdHlJY29uID0gXCJcIlxuXHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJcIlxuXHRcdFx0XHRcdHByaW9yaXR5VmFsdWUgPSBkb2MudmFsdWVzPy5wcmlvcml0eVxuXHRcdFx0XHRcdHN3aXRjaCBwcmlvcml0eVZhbHVlXG5cdFx0XHRcdFx0XHR3aGVuIFwi54m55oClXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcImRhbmdlclwiXG5cdFx0XHRcdFx0XHR3aGVuIFwi57Sn5oClXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIndhcm5pbmdcIlxuXHRcdFx0XHRcdFx0d2hlbiBcIuWKnuaWh1wiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJtdXRlZFwiXG5cdFx0XHRcdFx0aWYgcHJpb3JpdHlJY29uQ2xhc3Ncblx0XHRcdFx0XHRcdGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgPSBcImNvbG9yLXByaW9yaXR5IGNvbG9yLXByaW9yaXR5LSN7cHJpb3JpdHlJY29uQ2xhc3N9XCJcblxuXHRcdFx0XHRcdHJldHVybiBcIlwiXCJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS1yZWFkLWJhcic+I3t1bnJlYWR9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtbmFtZSAje2luc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3N9Jz4je2RvYy5uYW1lfSN7Y2Nfdmlld30je2FnZW50X3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj4je2RvYy5hcHBsaWNhbnRfbmFtZX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtZGV0YWlsJz4je3N0ZXBfY3VycmVudF9uYW1lX3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz0naW5zdGFuY2UtbW9kaWZpZWQnIHRpdGxlPScje21vZGlmaWVkU3RyaW5nfSc+I3ttb2RpZmllZEZyb21Ob3d9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcIlwiXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZVwiKSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcIm5hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfbmFtZVwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0Y2NfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0IyDlvZPliY3nlKjmiLflnKhjYyB1c2Vy5Lit77yM5L2G5piv5LiN5ZyoaW5ib3ggdXNlcnPml7bmiY3mmL7npLon5Lyg6ZiFJ+aWh+Wtl1xuXHRcdFx0XHRcdGlmIGRvYy5pc19jYyAmJiAhZG9jLmluYm94X3VzZXJzPy5pbmNsdWRlcyhNZXRlb3IudXNlcklkKCkpICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0XHRcdGNjX3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oXCJpbnN0YW5jZV9jY190aXRsZVwiKSArIFwiKTwvbGFiZWw+IFwiXG5cblx0XHRcdFx0XHRhZ2VudF92aWV3ID0gXCJcIjtcblx0XHRcdFx0XHRpZiBkb2MuYWdlbnRfdXNlcl9uYW1lXG5cdFx0XHRcdFx0XHRhZ2VudF92aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKCdwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXNfZGVzY3JpcHRpb24nLCB7dXNlck5hbWU6IGRvYy5hZ2VudF91c2VyX25hbWV9KSArIFwiKTwvbGFiZWw+XCJcblxuXHRcdFx0XHRcdHVucmVhZCA9ICcnXG5cblx0XHRcdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnICYmIGRvYy5pc19yZWFkID09IGZhbHNlXG5cdFx0XHRcdFx0XHR1bnJlYWQgPSAnPGkgY2xhc3M9XCJpb24gaW9uLXJlY29yZCB1bnJlYWRcIj48L2k+J1xuXHRcdFx0XHRcdGVsc2UgaWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ21vbml0b3InICYmIGRvYy5pc19oaWRkZW4gPT0gdHJ1ZVxuXHRcdFx0XHRcdFx0dW5yZWFkID0gJzxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjwvaT4nXG5cblx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwiXCJcblx0XHRcdFx0XHRwcmlvcml0eVZhbHVlID0gZG9jLnZhbHVlcz8ucHJpb3JpdHlcblx0XHRcdFx0XHRzd2l0Y2ggcHJpb3JpdHlWYWx1ZVxuXHRcdFx0XHRcdFx0d2hlbiBcIueJueaApVwiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJkYW5nZXJcIlxuXHRcdFx0XHRcdFx0d2hlbiBcIue0p+aApVwiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJ3YXJuaW5nXCJcblx0XHRcdFx0XHRcdHdoZW4gXCLlip7mlodcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwibXV0ZWRcIlxuXHRcdFx0XHRcdGlmIHByaW9yaXR5SWNvbkNsYXNzXG5cdFx0XHRcdFx0XHRpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzID0gXCJjb2xvci1wcmlvcml0eSBjb2xvci1wcmlvcml0eS0je3ByaW9yaXR5SWNvbkNsYXNzfVwiXG5cdFx0XHRcdFx0cmV0dXJuIFwiXCJcIlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS1yZWFkLWJhcic+I3t1bnJlYWR9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLW5hbWUgI3tpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzfSc+I3tkb2MubmFtZX0je2NjX3ZpZXd9I3thZ2VudF92aWV3fTwvZGl2PlxuXHRcdFx0XHRcdFx0XCJcIlwiXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImFwcGxpY2FudF9uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9uYW1lXCIpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJzdWJtaXRfZGF0ZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19zdWJtaXRfZGF0ZVwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aWYgZG9jLnN1Ym1pdF9kYXRlXG5cdFx0XHRcdFx0XHRyZXR1cm4gbW9tZW50KGRvYy5zdWJtaXRfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cdFx0XHRcdCxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJmbG93X25hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfZmxvd1wiKSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiY3VycmVudF9zdGVwX25hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfc3RlcF9jdXJyZW50X25hbWVcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYy5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiXG5cdFx0XHRcdFx0XHRqdWRnZSA9IGRvYy5maW5hbF9kZWNpc2lvbiB8fCBcImFwcHJvdmVkXCJcblxuXHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lID0gZG9jLmN1cnJlbnRfc3RlcF9uYW1lIHx8ICcnXG5cblx0XHRcdFx0XHRjY190YWcgPSAnJ1xuXG5cdFx0XHRcdFx0aWYgZG9jLmNjX2NvdW50ID4gMFxuXHRcdFx0XHRcdFx0Y2NfdGFnID0gVEFQaTE4bi5fXygnY2NfdGFnJylcblxuXHRcdFx0XHRcdHJldHVybiBcIlwiXCJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwLWN1cnJlbnQtc3RhdGUgI3tqdWRnZX1cIj4je3N0ZXBfY3VycmVudF9uYW1lfSN7Y2NfdGFnfTwvZGl2PlxuXHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJtb2RpZmllZFwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19tb2RpZmllZFwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0cmV0dXJuIG1vbWVudChkb2MubW9kaWZpZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXHRcdFx0XHQsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwic3RhcnRfZGF0ZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19zdGFydF9kYXRlXCIpLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2Muc3RhcnRfZGF0ZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG1vbWVudChkb2Muc3RhcnRfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cdFx0XHRcdCxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJteV9maW5pc2hfZGF0ZVwiLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2MubXlfZmluaXNoX2RhdGVcblx0XHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLm15X2ZpbmlzaF9kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcblx0XHRcdFx0LFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcIm1vZGlmaWVkXCIsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImtleXdvcmRzXCIsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImlzX2FyY2hpdmVkXCIsXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYz8udmFsdWVzPy5yZWNvcmRfbmVlZCAmJiBkb2MudmFsdWVzLnJlY29yZF9uZWVkID09IFwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRpZiBkb2M/LmlzX2FyY2hpdmVkXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0KFwiWUVTXCIpXG5cdFx0XHRcdFx0XHRyZXR1cm4gdChcIk5PXCIpXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH1cblx0XHRdLFxuXHRcdGRvbTogZG8gLT5cblx0XHRcdCMg5omL5py65LiK5LiN5pi+56S65LiA6aG15pi+56S65aSa5bCR5p2h6K6w5b2V6YCJ6aG5XG5cdFx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKClcblx0XHRcdFx0J3RwJ1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHQndHBsJ1xuXHRcdG9yZGVyOiBbWzQsIFwiZGVzY1wiXV0sXG5cdFx0ZXh0cmFGaWVsZHM6IFtcImZvcm1cIiwgXCJmbG93XCIsIFwiaW5ib3hfdXNlcnNcIiwgXCJzdGF0ZVwiLCBcInNwYWNlXCIsIFwiYXBwbGljYW50XCIsIFwiZm9ybV92ZXJzaW9uXCIsXG5cdFx0XHRcImZsb3dfdmVyc2lvblwiLCBcImlzX2NjXCIsIFwiY2NfY291bnRcIiwgXCJpc19yZWFkXCIsIFwiY3VycmVudF9zdGVwX25hbWVcIiwgXCJ2YWx1ZXNcIiwgXCJrZXl3b3Jkc1wiLCBcImZpbmFsX2RlY2lzaW9uXCIsIFwiZmxvd19uYW1lXCIsIFwiaXNfaGlkZGVuXCIsIFwiYWdlbnRfdXNlcl9uYW1lXCJdLFxuXHRcdGxlbmd0aENoYW5nZTogdHJ1ZSxcblx0XHRsZW5ndGhNZW51OiBbMTAsMTUsMjAsMjUsNTAsMTAwXSxcblx0XHRwYWdlTGVuZ3RoOiAxMCxcblx0XHRpbmZvOiBmYWxzZSxcblx0XHRzZWFyY2hpbmc6IHRydWUsXG5cdFx0cmVzcG9uc2l2ZTpcblx0XHRcdGRldGFpbHM6IGZhbHNlXG5cdFx0YXV0b1dpZHRoOiBmYWxzZSxcblx0XHRjaGFuZ2VTZWxlY3RvcjogKHNlbGVjdG9yLCB1c2VySWQpIC0+XG5cdFx0XHR1bmxlc3MgdXNlcklkXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHNwYWNlID0gc2VsZWN0b3Iuc3BhY2Vcblx0XHRcdHVubGVzcyBzcGFjZVxuXHRcdFx0XHRpZiBzZWxlY3Rvcj8uJGFuZD8ubGVuZ3RoID4gMFxuXHRcdFx0XHRcdHNwYWNlID0gc2VsZWN0b3IuJGFuZC5nZXRQcm9wZXJ0eSgnc3BhY2UnKVswXVxuXHRcdFx0dW5sZXNzIHNwYWNlXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHNwYWNlX3VzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHt1c2VyOiB1c2VySWQsIHNwYWNlOiBzcGFjZX0sIHtmaWVsZHM6IHtfaWQ6IDF9fSlcblx0XHRcdHVubGVzcyBzcGFjZV91c2VyXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHJldHVybiBzZWxlY3RvclxuXHRcdHBhZ2luZ1R5cGU6IFwibnVtYmVyc1wiXG5cdFx0XG5cdFx0IyBnZXRTb3J0OiAoc2VsZWN0b3IsIHNvcnQpIC0+IFxuXHRcdCMgXHRjb25zb2xlLmxvZygnc2VsZWN0b3I6JyxzZWxlY3Rvcilcblx0XHQjIFx0Y29uc29sZS5sb2coJ3NvcnQ6Jyxzb3J0KVxuXHRcdCMgXHRuZXdTb3J0ID0gW11cblx0XHQjIFx0Xy5lYWNoIHNlbGVjdG9yLCAodiwgaykgLT5cblx0XHQjIFx0XHRuZXdTb3J0LnB1c2goW2ssIDFdKVxuXHRcdCMgXHRuZXdTb3J0ID0gbmV3U29ydC5jb25jYXQoc29ydClcblx0XHQjIFx0Y29uc29sZS5sb2coJ25ld1NvcnQ6JyxuZXdTb3J0KVxuXHRcdCMgXHRyZXR1cm4gbmV3U29ydFxuXHR9XG5cblx0aWYgZmxvd0lkXG5cdFx0a2V5ID0gXCJpbnN0YW5jZUZsb3dcIiArIGZsb3dJZFxuXG5cdFx0b3B0aW9ucy5uYW1lID0ga2V5XG5cblx0XHRUYWJ1bGFyVGFibGVzLmluc3RhbmNlcy5maWVsZHMgPSBmaWVsZHNcblxuXHRcdGluc19maWVsZHMgPSBfaGFuZGxlTGlzdEZpZWxkcyBUYWJ1bGFyVGFibGVzLmluc3RhbmNlcy5maWVsZHNcblxuXHRcdGluc19maWVsZHMuZm9yRWFjaCAoZiktPlxuXHRcdFx0aWYgZi50eXBlICE9ICd0YWJsZScgJiYgZi5pc19saXN0X2Rpc3BsYXlcblx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLnB1c2hcblx0XHRcdFx0XHRkYXRhOiAoZi5uYW1lIHx8IGYuY29kZSksXG5cdFx0XHRcdFx0dGl0bGU6IHQoZi5uYW1lIHx8IGYuY29kZSksXG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXG5cdFx0XHRcdFx0XHR2YWx1ZXMgPSBkb2MudmFsdWVzIHx8IHt9XG5cblx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWVzW2YuY29kZV1cblxuXHRcdFx0XHRcdFx0c3dpdGNoIGYudHlwZVxuXHRcdFx0XHRcdFx0XHR3aGVuICd1c2VyJ1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWU/Lm5hbWVcblx0XHRcdFx0XHRcdFx0d2hlbiAnZ3JvdXAnXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8uZnVsbG5hbWVcblx0XHRcdFx0XHRcdFx0d2hlbiAnZGF0ZSdcblx0XHRcdFx0XHRcdFx0XHRpZiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cdFx0XHRcdFx0XHRcdHdoZW4gJ2RhdGVUaW1lJ1xuXHRcdFx0XHRcdFx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJylcblx0XHRcdFx0XHRcdFx0d2hlbiAnY2hlY2tib3gnXG5cdFx0XHRcdFx0XHRcdFx0aWYgdmFsdWUgPT0gdHJ1ZSB8fCB2YWx1ZSA9PSAndHJ1ZSdcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfeWVzXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfbm9cIik7XG5cdFx0XHRcdFx0XHRcdHdoZW4gJ29kYXRhJ1xuXHRcdFx0XHRcdFx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiBfLmlzQXJyYXkodmFsdWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gXy5wbHVjayh2YWx1ZSwgJ0BsYWJlbCcpLnRvU3RyaW5nKClcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZVsnQGxhYmVsJ11cblxuXHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cblxuXHRyZXR1cm4gb3B0aW9ucztcblxuXG4jIOWmguaenGNvbHVtbnPmnInliqDlh4/vvIzor7fkv67mlLlUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMg5Ye95pWwXG5pbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhciA9IChmbG93SWQsIGZpZWxkcyktPlxuXHRvcHRpb25zID0ge1xuXHRcdG5hbWU6IFwiaW5zdGFuY2VfdGFza3NcIixcblx0XHRjb2xsZWN0aW9uOiBkYi5pbnN0YW5jZV90YXNrcyxcblx0XHRwdWI6IFwiaW5zdGFuY2VfdGFza3NfdGFidWxhclwiLFxuXHRcdG9uVW5sb2FkOiAoKS0+XG5cdFx0XHRNZXRlb3Iuc2V0VGltZW91dChUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMsIDE1MClcblxuXHRcdGRyYXdDYWxsYmFjazogKHNldHRpbmdzKS0+XG5cdFx0XHRlbXB0eVRkID0gJChcIi5kYXRhVGFibGVzX2VtcHR5XCIpXG5cdFx0XHRpZiBlbXB0eVRkLmxlbmd0aFxuXHRcdFx0XHRlbXB0eVRkWzBdLmNvbFNwYW4gPSBcIjZcIlxuXHRcdFx0aWYgIVN0ZWVkb3MuaXNNb2JpbGUoKSAmJiAhU3RlZWRvcy5pc1BhZCgpXG5cdFx0XHRcdE1ldGVvci5zZXRUaW1lb3V0KFRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX3RhYmxlQ29sdW1ucywgMTUwKVxuXHRcdFx0XHQkKFwiLmluc3RhbmNlLWxpc3RcIikuc2Nyb2xsVG9wKDApLnJlYWR5IC0+XG5cdFx0XHRcdFx0JChcIi5pbnN0YW5jZS1saXN0XCIpLnBlcmZlY3RTY3JvbGxiYXIoXCJ1cGRhdGVcIilcblx0XHRcdGVsc2Vcblx0XHRcdFx0JChcIi5pbnN0YW5jZS1saXN0XCIpLnNjcm9sbFRvcCgwKVxuXG5cdFx0XHR0aXRsZSA9IHQgXCJwYWdlcl9pbnB1dF9oaW50XCJcblx0XHRcdGVsbGlwc2lzTGluayA9IHNldHRpbmdzLm9JbnN0YW5jZS5wYXJlbnQoKS5maW5kKCcucGFnaW5nX251bWJlcnMgLnBhZ2luYXRpb24gLmRpc2FibGVkIGEnKVxuXHRcdFx0ZWxsaXBzaXNMaW5rLmF0dHIoXCJ0aXRsZVwiLCB0aXRsZSkuY3NzKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKS5jbGljayAtPlxuXHRcdFx0XHRpZiAhJCh0aGlzKS5maW5kKCdpbnB1dCcpLmxlbmd0aFxuXHRcdFx0XHRcdGlucHV0ID0gJCgnPGlucHV0IGNsYXNzPVwicGFnaW5hdGVfaW5wdXQgZm9ybS1jb250cm9sIGlucHV0LXNtXCIgdHlwZT1cInRleHRcIiBzdHlsZT1cImJvcmRlcjogbm9uZTsgcGFkZGluZzowIDJweDtcIi8+Jylcblx0XHRcdFx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKClcblx0XHRcdFx0XHRcdGlucHV0LmNzcyh7XG5cdFx0XHRcdFx0XHRcdHdpZHRoOlwiNTJweFwiXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogXCIyMHB4XCJcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0aW5wdXQuY3NzKHtcblx0XHRcdFx0XHRcdFx0d2lkdGg6XCI1MnB4XCJcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBcIjE2cHhcIlxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRpbnB1dC5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmF0dHIoXCJwbGFjZWhvbGRlclwiLCB0aXRsZSlcblx0XHRcdFx0XHQkKHRoaXMpLmVtcHR5KCkuYXBwZW5kIGlucHV0XG5cdFx0XHRcdFx0Z29QYWdlID0gKGluZGV4KS0+XG5cdFx0XHRcdFx0XHRpZiBpbmRleCA+IDBcblx0XHRcdFx0XHRcdFx0cGFnZXMgPSBNYXRoLmNlaWwoc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpIC8gc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoKVxuXHRcdFx0XHRcdFx0XHRpZiBpbmRleCA+IHBhZ2VzXG5cdFx0XHRcdFx0XHRcdFx0IyDpobXnoIHotoXlh7rntKLlvJXml7bot7PovazliLDmnIDlkI7kuIDpobVcblx0XHRcdFx0XHRcdFx0XHRpbmRleCA9IHBhZ2VzXG5cdFx0XHRcdFx0XHRcdGluZGV4LS1cblx0XHRcdFx0XHRcdFx0c2V0dGluZ3Mub0luc3RhbmNlLkRhdGFUYWJsZSgpLnBhZ2UoaW5kZXgpLmRyYXcoJ3BhZ2UnKVxuXHRcdFx0XHRcdGlucHV0LmJsdXIgKGUpLT5cblx0XHRcdFx0XHRcdGN1cnJlbnRQYWdlID0gJCh0aGlzKS52YWwoKVxuXHRcdFx0XHRcdFx0Z29QYWdlIGN1cnJlbnRQYWdlXG5cdFx0XHRcdFx0XHQkKHRoaXMpLnBhcmVudCgpLmh0bWwgJy4uLidcblx0XHRcdFx0XHRpbnB1dC5rZXlkb3duIChlKS0+XG5cdFx0XHRcdFx0XHRpZihlLmtleUNvZGUudG9TdHJpbmcoKSA9PSBcIjEzXCIpXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRQYWdlID0gJCh0aGlzKS52YWwoKVxuXHRcdFx0XHRcdFx0XHRnb1BhZ2UgY3VycmVudFBhZ2VcblxuXHRcdGNyZWF0ZWRSb3c6IChyb3csIGRhdGEsIGRhdGFJbmRleCkgLT5cblx0XHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0XHRpZiBkYXRhLmluc3RhbmNlID09IEZsb3dSb3V0ZXIuY3VycmVudCgpLnBhcmFtcy5pbnN0YW5jZUlkXG5cdFx0XHRcdFx0cm93LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwic2VsZWN0ZWRcIilcblx0XHRjb2x1bW5zOiBbXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiX2lkXCIsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0bW9kaWZpZWRTdHJpbmcgPSBtb21lbnQoZG9jLm1vZGlmaWVkKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcblxuXHRcdFx0XHRcdG1vZGlmaWVkID0gZG9jLm1vZGlmaWVkXG5cdFx0XHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94JyAmJiBkb2MuaW5zdGFuY2Vfc3RhdGUgIT0gJ2RyYWZ0J1xuXHRcdFx0XHRcdFx0bW9kaWZpZWQgPSBkb2Muc3RhcnRfZGF0ZSB8fCBkb2MubW9kaWZpZWRcblxuXHRcdFx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdvdXRib3gnXG5cdFx0XHRcdFx0XHRtb2RpZmllZCA9IGRvYy5zdWJtaXRfZGF0ZSB8fCBkb2MubW9kaWZpZWRcblxuXHRcdFx0XHRcdG1vZGlmaWVkRnJvbU5vdyA9IFN0ZWVkb3MubW9tZW50UmVhY3RpdmVGcm9tTm93KG1vZGlmaWVkKTtcblx0XHRcdFx0XHRmbG93X25hbWUgPSBkb2MuZmxvd19uYW1lXG5cdFx0XHRcdFx0Y2NfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0IyDlvZPliY3nlKjmiLflnKhjYyB1c2Vy5Lit77yM5L2G5piv5LiN5ZyoaW5ib3ggdXNlcnPml7bmiY3mmL7npLon5Lyg6ZiFJ+aWh+Wtl1xuXHRcdFx0XHRcdGlmIGRvYy50eXBlID09ICdjYycgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94J1xuXHRcdFx0XHRcdFx0Y2NfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXyhcImluc3RhbmNlX2NjX3RpdGxlXCIpICsgXCIpPC9sYWJlbD4gXCJcblx0XHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+I3tmbG93X25hbWV9PHNwYW4+KCN7ZG9jLnN0ZXBfbmFtZX0pPC9zcGFuPjwvZGl2PlwiXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0aWYgZG9jLnN0ZXBfbmFtZVxuXHRcdFx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPiN7Zmxvd19uYW1lfTxzcGFuPigje2RvYy5zdGVwX25hbWV9KTwvc3Bhbj48L2Rpdj5cIlxuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPiN7Zmxvd19uYW1lfTwvZGl2PlwiXG5cblx0XHRcdFx0XHRhZ2VudF92aWV3ID0gXCJcIjtcblx0XHRcdFx0XHRpZiBkb2MuYWdlbnRfdXNlcl9uYW1lICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0XHRcdGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHt1c2VyTmFtZTogZG9jLmFnZW50X3VzZXJfbmFtZX0pICsgXCIpPC9sYWJlbD5cIlxuXG5cdFx0XHRcdFx0dW5yZWFkID0gJydcblxuXHRcdFx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCcgJiYgZG9jLmlzX3JlYWQgPT0gZmFsc2Vcblx0XHRcdFx0XHRcdHVucmVhZCA9ICc8aSBjbGFzcz1cImlvbiBpb24tcmVjb3JkIHVucmVhZFwiPjwvaT4nXG5cdFx0XHRcdFx0ZWxzZSBpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnbW9uaXRvcicgJiYgZG9jLmlzX2hpZGRlbiA9PSB0cnVlXG5cdFx0XHRcdFx0XHR1bnJlYWQgPSAnPGkgY2xhc3M9XCJmYSBmYS1sb2NrXCI+PC9pPidcblxuXHRcdFx0XHRcdHByaW9yaXR5SWNvbiA9IFwiXCJcblx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwiXCJcblx0XHRcdFx0XHRwcmlvcml0eVZhbHVlID0gZG9jLnZhbHVlcz8ucHJpb3JpdHlcblx0XHRcdFx0XHRzd2l0Y2ggcHJpb3JpdHlWYWx1ZVxuXHRcdFx0XHRcdFx0d2hlbiBcIueJueaApVwiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJkYW5nZXJcIlxuXHRcdFx0XHRcdFx0d2hlbiBcIue0p+aApVwiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJ3YXJuaW5nXCJcblx0XHRcdFx0XHRcdHdoZW4gXCLlip7mlodcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwibXV0ZWRcIlxuXHRcdFx0XHRcdGlmIHByaW9yaXR5SWNvbkNsYXNzXG5cdFx0XHRcdFx0XHRpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzID0gXCJjb2xvci1wcmlvcml0eSBjb2xvci1wcmlvcml0eS0je3ByaW9yaXR5SWNvbkNsYXNzfVwiXG5cblx0XHRcdFx0XHRyZXR1cm4gXCJcIlwiXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPiN7dW5yZWFkfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLW5hbWUgI3tpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzfSc+I3tkb2MuaW5zdGFuY2VfbmFtZX0je2NjX3ZpZXd9I3thZ2VudF92aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4+I3tkb2MuYXBwbGljYW50X25hbWV9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLWRldGFpbCc+I3tzdGVwX2N1cnJlbnRfbmFtZV92aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9J2luc3RhbmNlLW1vZGlmaWVkJyB0aXRsZT0nI3ttb2RpZmllZFN0cmluZ30nPiN7bW9kaWZpZWRGcm9tTm93fTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XCJcIlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImFwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfb3JnYW5pemF0aW9uX25hbWVcIiksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJpbnN0YW5jZV9uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX25hbWVcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGNjX3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdCMg5b2T5YmN55So5oi35ZyoY2MgdXNlcuS4re+8jOS9huaYr+S4jeWcqGluYm94IHVzZXJz5pe25omN5pi+56S6J+S8oOmYhSfmloflrZdcblx0XHRcdFx0XHRpZiBkb2MuaXNfY2MgJiYgIWRvYy5pbmJveF91c2Vycz8uaW5jbHVkZXMoTWV0ZW9yLnVzZXJJZCgpKSAmJiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnXG5cdFx0XHRcdFx0XHRjY192aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKFwiaW5zdGFuY2VfY2NfdGl0bGVcIikgKyBcIik8L2xhYmVsPiBcIlxuXG5cdFx0XHRcdFx0YWdlbnRfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0aWYgZG9jLmFnZW50X3VzZXJfbmFtZVxuXHRcdFx0XHRcdFx0YWdlbnRfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge3VzZXJOYW1lOiBkb2MuYWdlbnRfdXNlcl9uYW1lfSkgKyBcIik8L2xhYmVsPlwiXG5cblx0XHRcdFx0XHR1bnJlYWQgPSAnJ1xuXG5cdFx0XHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94JyAmJiBkb2MuaXNfcmVhZCA9PSBmYWxzZVxuXHRcdFx0XHRcdFx0dW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPidcblx0XHRcdFx0XHRlbHNlIGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdtb25pdG9yJyAmJiBkb2MuaXNfaGlkZGVuID09IHRydWVcblx0XHRcdFx0XHRcdHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+J1xuXG5cdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIlwiXG5cdFx0XHRcdFx0cHJpb3JpdHlWYWx1ZSA9IGRvYy52YWx1ZXM/LnByaW9yaXR5XG5cdFx0XHRcdFx0c3dpdGNoIHByaW9yaXR5VmFsdWVcblx0XHRcdFx0XHRcdHdoZW4gXCLnibnmgKVcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwiZGFuZ2VyXCJcblx0XHRcdFx0XHRcdHdoZW4gXCLntKfmgKVcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwid2FybmluZ1wiXG5cdFx0XHRcdFx0XHR3aGVuIFwi5Yqe5paHXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIm11dGVkXCJcblx0XHRcdFx0XHRpZiBwcmlvcml0eUljb25DbGFzc1xuXHRcdFx0XHRcdFx0aW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyA9IFwiY29sb3ItcHJpb3JpdHkgY29sb3ItcHJpb3JpdHktI3twcmlvcml0eUljb25DbGFzc31cIlxuXHRcdFx0XHRcdHJldHVybiBcIlwiXCJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPiN7dW5yZWFkfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS1uYW1lICN7aW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzc30nPiN7ZG9jLmluc3RhbmNlX25hbWV9I3tjY192aWV3fSN7YWdlbnRfdmlld308L2Rpdj5cblx0XHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJhcHBsaWNhbnRfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfbmFtZVwiKSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwic3VibWl0X2RhdGVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfc3VibWl0X2RhdGVcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYy5zdWJtaXRfZGF0ZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG1vbWVudChkb2Muc3VibWl0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXHRcdFx0XHQsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiZmxvd19uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX2Zsb3dcIiksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcInN0ZXBfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19zdGVwX2N1cnJlbnRfbmFtZVwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aWYgZG9jLmluc3RhbmNlX3N0YXRlID09IFwiY29tcGxldGVkXCJcblx0XHRcdFx0XHRcdGp1ZGdlID0gZG9jLmp1ZGdlIHx8IFwiYXBwcm92ZWRcIlxuXG5cdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWUgPSBkb2Muc3RlcF9uYW1lIHx8ICcnXG5cblx0XHRcdFx0XHRjY190YWcgPSAnJ1xuXG5cdFx0XHRcdFx0aWYgZG9jLmNjX2NvdW50ID4gMFxuXHRcdFx0XHRcdFx0Y2NfdGFnID0gVEFQaTE4bi5fXygnY2NfdGFnJylcblxuXHRcdFx0XHRcdHJldHVybiBcIlwiXCJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwLWN1cnJlbnQtc3RhdGUgI3tqdWRnZX1cIj4je3N0ZXBfY3VycmVudF9uYW1lfSN7Y2NfdGFnfTwvZGl2PlxuXHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJtb2RpZmllZFwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19tb2RpZmllZFwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0cmV0dXJuIG1vbWVudChkb2MubW9kaWZpZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXHRcdFx0XHQsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwic3RhcnRfZGF0ZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19zdGFydF9kYXRlXCIpLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2Muc3RhcnRfZGF0ZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG1vbWVudChkb2Muc3RhcnRfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cdFx0XHRcdCxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJmaW5pc2hfZGF0ZVwiLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2MuZmluaXNoX2RhdGVcblx0XHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLmZpbmlzaF9kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcblx0XHRcdFx0LFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcIm1vZGlmaWVkXCIsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImtleXdvcmRzXCIsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImlzX2FyY2hpdmVkXCIsXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYz8udmFsdWVzPy5yZWNvcmRfbmVlZCAmJiBkb2MudmFsdWVzLnJlY29yZF9uZWVkID09IFwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRpZiBkb2M/LmlzX2FyY2hpdmVkXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0KFwiWUVTXCIpXG5cdFx0XHRcdFx0XHRyZXR1cm4gdChcIk5PXCIpXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH1cblx0XHRdLFxuXHRcdGRvbTogZG8gLT5cblx0XHRcdCMg5omL5py65LiK5LiN5pi+56S65LiA6aG15pi+56S65aSa5bCR5p2h6K6w5b2V6YCJ6aG5XG5cdFx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKClcblx0XHRcdFx0J3RwJ1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHQndHBsJ1xuXHRcdG9yZGVyOiBbWzQsIFwiZGVzY1wiXV0sXG5cdFx0ZXh0cmFGaWVsZHM6IFtcImluc3RhbmNlXCIsIFwiZm9ybVwiLCBcImZsb3dcIiwgXCJpbmJveF91c2Vyc1wiLCBcImluc3RhbmNlX3N0YXRlXCIsIFwic3BhY2VcIiwgXCJhcHBsaWNhbnRcIiwgXCJmb3JtX3ZlcnNpb25cIixcblx0XHRcdFwiZmxvd192ZXJzaW9uXCIsIFwidHlwZVwiLCBcImlzX3JlYWRcIiwgXCJzdGVwX25hbWVcIiwgXCJ2YWx1ZXNcIiwgXCJrZXl3b3Jkc1wiLCBcImZpbmFsX2RlY2lzaW9uXCIsIFwiZmxvd19uYW1lXCIsIFwiaXNfaGlkZGVuXCIsIFwiYWdlbnRfdXNlcl9uYW1lXCJdLFxuXHRcdGxlbmd0aENoYW5nZTogdHJ1ZSxcblx0XHRsZW5ndGhNZW51OiBbMTAsMTUsMjAsMjUsNTAsMTAwXSxcblx0XHRwYWdlTGVuZ3RoOiAxMCxcblx0XHRpbmZvOiBmYWxzZSxcblx0XHRzZWFyY2hpbmc6IHRydWUsXG5cdFx0cmVzcG9uc2l2ZTpcblx0XHRcdGRldGFpbHM6IGZhbHNlXG5cdFx0YXV0b1dpZHRoOiBmYWxzZSxcblx0XHRjaGFuZ2VTZWxlY3RvcjogKHNlbGVjdG9yLCB1c2VySWQpIC0+XG5cdFx0XHR1bmxlc3MgdXNlcklkXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHNwYWNlID0gc2VsZWN0b3Iuc3BhY2Vcblx0XHRcdHVubGVzcyBzcGFjZVxuXHRcdFx0XHRpZiBzZWxlY3Rvcj8uJGFuZD8ubGVuZ3RoID4gMFxuXHRcdFx0XHRcdHNwYWNlID0gc2VsZWN0b3IuJGFuZC5nZXRQcm9wZXJ0eSgnc3BhY2UnKVswXVxuXHRcdFx0dW5sZXNzIHNwYWNlXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHNwYWNlX3VzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHt1c2VyOiB1c2VySWQsIHNwYWNlOiBzcGFjZX0sIHtmaWVsZHM6IHtfaWQ6IDF9fSlcblx0XHRcdHVubGVzcyBzcGFjZV91c2VyXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHJldHVybiBzZWxlY3RvclxuXHRcdHBhZ2luZ1R5cGU6IFwibnVtYmVyc1wiXG5cblx0fVxuXG5cdGlmIGZsb3dJZFxuXHRcdGtleSA9IFwiaW5zdGFuY2VGbG93XCIgKyBmbG93SWRcblxuXHRcdG9wdGlvbnMubmFtZSA9IGtleVxuXG5cdFx0VGFidWxhclRhYmxlcy5pbnN0YW5jZV90YXNrcy5maWVsZHMgPSBmaWVsZHNcblxuXHRcdGluc19maWVsZHMgPSBfaGFuZGxlTGlzdEZpZWxkcyBUYWJ1bGFyVGFibGVzLmluc3RhbmNlX3Rhc2tzLmZpZWxkc1xuXG5cdFx0aW5zX2ZpZWxkcy5mb3JFYWNoIChmKS0+XG5cdFx0XHRpZiBmLnR5cGUgIT0gJ3RhYmxlJyAmJiBmLmlzX2xpc3RfZGlzcGxheVxuXHRcdFx0XHRvcHRpb25zLmNvbHVtbnMucHVzaFxuXHRcdFx0XHRcdGRhdGE6IChmLm5hbWUgfHwgZi5jb2RlKSxcblx0XHRcdFx0XHR0aXRsZTogdChmLm5hbWUgfHwgZi5jb2RlKSxcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cblx0XHRcdFx0XHRcdHZhbHVlcyA9IGRvYy52YWx1ZXMgfHwge31cblxuXHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZXNbZi5jb2RlXVxuXG5cdFx0XHRcdFx0XHRzd2l0Y2ggZi50eXBlXG5cdFx0XHRcdFx0XHRcdHdoZW4gJ3VzZXInXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8ubmFtZVxuXHRcdFx0XHRcdFx0XHR3aGVuICdncm91cCdcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlPy5mdWxsbmFtZVxuXHRcdFx0XHRcdFx0XHR3aGVuICdkYXRlJ1xuXHRcdFx0XHRcdFx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREJylcblx0XHRcdFx0XHRcdFx0d2hlbiAnZGF0ZVRpbWUnXG5cdFx0XHRcdFx0XHRcdFx0aWYgdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKVxuXHRcdFx0XHRcdFx0XHR3aGVuICdjaGVja2JveCdcblx0XHRcdFx0XHRcdFx0XHRpZiB2YWx1ZSA9PSB0cnVlIHx8IHZhbHVlID09ICd0cnVlJ1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF95ZXNcIik7XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF9ub1wiKTtcblx0XHRcdFx0XHRcdFx0d2hlbiAnb2RhdGEnXG5cdFx0XHRcdFx0XHRcdFx0aWYgdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdGlmIF8uaXNBcnJheSh2YWx1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBfLnBsdWNrKHZhbHVlLCAnQGxhYmVsJykudG9TdHJpbmcoKVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlWydAbGFiZWwnXVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblxuXG5cdHJldHVybiBvcHRpb25zO1xuXG5cbk1ldGVvci5zdGFydHVwICgpLT5cblx0VGFidWxhclRhYmxlcy5pbnN0YW5jZXMgPSBuZXcgVGFidWxhci5UYWJsZSBpbnN0YW5jZXNMaXN0VGFibGVUYWJ1bGFyKClcblx0VGFidWxhclRhYmxlcy5pbnN0YW5jZV90YXNrcyA9IG5ldyBUYWJ1bGFyLlRhYmxlIGluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyKClcblx0VGFidWxhclRhYmxlcy5pbmJveF9pbnN0YW5jZXMgPSBuZXcgVGFidWxhci5UYWJsZSBHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhcImluYm94XCIpXG5cdFRhYnVsYXJUYWJsZXMub3V0Ym94X2luc3RhbmNlcyA9IG5ldyBUYWJ1bGFyLlRhYmxlIEdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zKFwib3V0Ym94XCIpXG5cblxuR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMgPSAoYm94LCBmbG93SWQsIGZpZWxkcyktPlxuXHRrZXkgPSBcImluc3RhbmNlRmxvd1wiICsgYm94ICsgZmxvd0lkXG5cdGlmIGJveCA9PSBcImluYm94XCJcblx0XHRvcHRpb25zID0gX2dldF9pbmJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zKGZsb3dJZCwgZmllbGRzKVxuXHRlbHNlIGlmIGJveCA9PSBcIm91dGJveFwiXG5cdFx0b3B0aW9ucyA9IF9nZXRfb3V0Ym94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMoZmxvd0lkLCBmaWVsZHMpXG5cdGVsc2Vcblx0XHRvcHRpb25zID0gaW5zdGFuY2VzTGlzdFRhYmxlVGFidWxhcihmbG93SWQsIGZpZWxkcylcblx0XHRpZiAhZmxvd0lkXG5cdFx0XHRvcHRpb25zLm5hbWUgPSBcImluYm94X2luc3RhbmNlc1wiXG5cdGlmIGZsb3dJZFxuXHRcdG9wdGlvbnMubmFtZSA9IGtleVxuXHRyZXR1cm4gb3B0aW9uc1xuXG5fZ2V0X2luYm94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMgPSAoZmxvd0lkLCBmaWVsZHMpLT5cblx0b3B0aW9ucyA9IGluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyKGZsb3dJZCwgZmllbGRzKVxuXG5cdGlmICFmbG93SWRcblx0XHRvcHRpb25zLm5hbWUgPSBcImluYm94X2luc3RhbmNlc1wiXG5cblx0b3B0aW9ucy5vcmRlciA9IFtbOCwgXCJkZXNjXCJdXVxuXG5cdG9wdGlvbnMuZ2V0U29ydCA9IChzZWxlY3Rvciwgc29ydCkgLT4gXG5cdFx0Y29uc29sZS5sb2coJ2luYm94X2luc3RhbmNlczonLHNvcnQpXG5cdFx0cmV0dXJuIHNvcnRcblxuXHRyZXR1cm4gb3B0aW9uc1xuXG5fZ2V0X291dGJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zID0gKGZsb3dJZCwgZmllbGRzKS0+XG5cdG9wdGlvbnMgPSBpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhcihmbG93SWQsIGZpZWxkcylcblxuXHRpZiAhZmxvd0lkXG5cdFx0b3B0aW9ucy5uYW1lID0gXCJvdXRib3hfaW5zdGFuY2VzXCJcblxuXHRvcHRpb25zLm9yZGVyID0gW1s5LCAtMV1dXG5cblx0b3B0aW9ucy5nZXRTb3J0ID0gKHNlbGVjdG9yLCBzb3J0KSAtPiBcblx0XHRjb25zb2xlLmxvZygnb3V0Ym94X2luc3RhbmNlczonLHNvcnQpXG5cdFx0IyBuZXdTb3J0ID0gWyBcblx0XHQjIFx0WydzcGFjZScsIDFdLFxuXHRcdCMgXHRbJ2hhbmRsZXInLCAxXSxcblx0XHQjIFx0Wydpc19maW5pc2hlZCcsIDFdLFxuXHRcdCMgXVxuXHRcdCMgbmV3U29ydCA9IG5ld1NvcnQuY29uY2F0KHNvcnQpXG5cdFx0IyByZXR1cm4gbmV3U29ydFxuXHRcdHJldHVybiBzb3J0XG5cblx0cmV0dXJuIG9wdGlvbnNcblxuaWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFRhYnVsYXJUYWJsZXMuZmxvd0luc3RhbmNlcyA9IG5ldyBSZWFjdGl2ZVZhcigpXG5cbk1ldGVvci5zdGFydHVwICgpLT5cblx0VHJhY2tlci5hdXRvcnVuIChjKSAtPlxuXHRcdGlmIE1ldGVvci5pc0NsaWVudCAmJiAhU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0XHRpZiBTZXNzaW9uLmdldChcImZsb3dJZFwiKSAmJiBTZXNzaW9uLmdldChcImJveFwiKSAhPSAnZHJhZnQnXG5cdFx0XHRcdE1ldGVvci5jYWxsIFwibmV3SW5zdGFuY2VzTGlzdFRhYnVsYXJcIiwgU2Vzc2lvbi5nZXQoXCJib3hcIiksIFNlc3Npb24uZ2V0KFwiZmxvd0lkXCIpLCAoZXJyb3IsIHJlc3VsdCkgLT5cblx0XHRcdFx0XHRuZXdJbnN0YW5jZXNMaXN0VGFidWxhciBTZXNzaW9uLmdldChcImJveFwiKSwgU2Vzc2lvbi5nZXQoXCJmbG93SWRcIiksIHJlc3VsdFxuXHRcdFx0XHRcdFRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX2NoYW5nZU9yZGVyKClcblxuXG5uZXdJbnN0YW5jZXNMaXN0VGFidWxhciA9IChib3gsIGZsb3dJZCwgZmllbGRzKS0+XG5cdGlmICFmaWVsZHNcblx0XHRmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7X2lkOiBmbG93SWR9LCB7ZmllbGRzOiB7Zm9ybTogMX19KVxuXHRcdGZpZWxkcyA9IGRiLmZvcm1zLmZpbmRPbmUoeyBfaWQ6IGZsb3c/LmZvcm0gfSwgeyBmaWVsZHM6IHsgJ2N1cnJlbnQuZmllbGRzJzogMSB9IH0pPy5jdXJyZW50Py5maWVsZHNcblxuXHRmaWVsZHMgPSBfaGFuZGxlTGlzdEZpZWxkcyBmaWVsZHNcblxuXHRpZiBmaWVsZHM/LmZpbHRlclByb3BlcnR5KFwiaXNfbGlzdF9kaXNwbGF5XCIsIHRydWUpPy5sZW5ndGggPiAwXG5cdFx0a2V5ID0gXCJpbnN0YW5jZUZsb3dcIiArIGJveCArIGZsb3dJZFxuXHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0VGFidWxhclRhYmxlcy5mbG93SW5zdGFuY2VzLnNldChuZXcgVGFidWxhci5UYWJsZSBHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhib3gsIGZsb3dJZCwgZmllbGRzKSlcblx0XHRlbHNlXG5cdFx0XHRuZXcgVGFidWxhci5UYWJsZSBHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhib3gsIGZsb3dJZCwgZmllbGRzKVxuXHRcdGNvbnNvbGUubG9nIFwibmV3IFRhYnVsYXJUYWJsZXMgXCIsIGtleVxuXG5pZiBNZXRlb3IuaXNTZXJ2ZXJcblx0TWV0ZW9yLm1ldGhvZHNcblx0XHRuZXdJbnN0YW5jZXNMaXN0VGFidWxhcjogKGJveCwgZmxvd0lkKS0+XG5cdFx0XHRuZXdJbnN0YW5jZXNMaXN0VGFidWxhcihib3gsIGZsb3dJZClcblxuXHRcdFx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoe19pZDogZmxvd0lkfSwge2ZpZWxkczoge2Zvcm06IDF9fSlcblx0XHRcdGZpZWxkcyA9IGRiLmZvcm1zLmZpbmRPbmUoeyBfaWQ6IGZsb3c/LmZvcm0gfSwgeyBmaWVsZHM6IHsgJ2N1cnJlbnQuZmllbGRzJzogMSB9IH0pPy5jdXJyZW50Py5maWVsZHNcblx0XHRcdHJldHVybiBmaWVsZHNcblxuXG4iLCJ2YXIgR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMsIF9nZXRfaW5ib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucywgX2dldF9vdXRib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucywgX2hhbmRsZUxpc3RGaWVsZHMsIGluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyLCBpbnN0YW5jZXNMaXN0VGFibGVUYWJ1bGFyLCBuZXdJbnN0YW5jZXNMaXN0VGFidWxhciwgdXBkYXRlVGFidWxhclRpdGxlO1xuXG5TdGVlZG9zLnN1YnNbXCJJbnN0YW5jZVRhYnVsYXJcIl0gPSBuZXcgU3Vic01hbmFnZXIoKTtcblxuX2hhbmRsZUxpc3RGaWVsZHMgPSBmdW5jdGlvbihmaWVsZHMpIHtcbiAgdmFyIGluc19maWVsZHM7XG4gIGluc19maWVsZHMgPSBuZXcgQXJyYXkoKTtcbiAgaWYgKGZpZWxkcyAhPSBudWxsKSB7XG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZikge1xuICAgICAgdmFyIHJlZjtcbiAgICAgIGlmIChmLnR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKCdpZ25vcmUgb3BpbmlvbiBmaWVsZCBpbiB0YWJsZScpO1xuICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09ICdzZWN0aW9uJykge1xuICAgICAgICByZXR1cm4gZiAhPSBudWxsID8gKHJlZiA9IGYuZmllbGRzKSAhPSBudWxsID8gcmVmLmZvckVhY2goZnVuY3Rpb24oZjEpIHtcbiAgICAgICAgICByZXR1cm4gaW5zX2ZpZWxkcy5wdXNoKGYxKTtcbiAgICAgICAgfSkgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW5zX2ZpZWxkcy5wdXNoKGYpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBpbnNfZmllbGRzO1xufTtcblxudXBkYXRlVGFidWxhclRpdGxlID0gZnVuY3Rpb24oKSB7fTtcblxuaW5zdGFuY2VzTGlzdFRhYmxlVGFidWxhciA9IGZ1bmN0aW9uKGZsb3dJZCwgZmllbGRzKSB7XG4gIHZhciBpbnNfZmllbGRzLCBrZXksIG9wdGlvbnM7XG4gIG9wdGlvbnMgPSB7XG4gICAgbmFtZTogXCJpbnN0YW5jZXNcIixcbiAgICBjb2xsZWN0aW9uOiBkYi5pbnN0YW5jZXMsXG4gICAgcHViOiBcImluc3RhbmNlX3RhYnVsYXJcIixcbiAgICBvblVubG9hZDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gTWV0ZW9yLnNldFRpbWVvdXQoVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zLCAxNTApO1xuICAgIH0sXG4gICAgZHJhd0NhbGxiYWNrOiBmdW5jdGlvbihzZXR0aW5ncykge1xuICAgICAgdmFyIGVsbGlwc2lzTGluaywgZW1wdHlUZCwgdGl0bGU7XG4gICAgICBlbXB0eVRkID0gJChcIi5kYXRhVGFibGVzX2VtcHR5XCIpO1xuICAgICAgaWYgKGVtcHR5VGQubGVuZ3RoKSB7XG4gICAgICAgIGVtcHR5VGRbMF0uY29sU3BhbiA9IFwiNlwiO1xuICAgICAgfVxuICAgICAgaWYgKCFTdGVlZG9zLmlzTW9iaWxlKCkgJiYgIVN0ZWVkb3MuaXNQYWQoKSkge1xuICAgICAgICBNZXRlb3Iuc2V0VGltZW91dChUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMsIDE1MCk7XG4gICAgICAgICQoXCIuaW5zdGFuY2UtbGlzdFwiKS5zY3JvbGxUb3AoMCkucmVhZHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQoXCIuaW5zdGFuY2UtbGlzdFwiKS5wZXJmZWN0U2Nyb2xsYmFyKFwidXBkYXRlXCIpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoXCIuaW5zdGFuY2UtbGlzdFwiKS5zY3JvbGxUb3AoMCk7XG4gICAgICB9XG4gICAgICB0aXRsZSA9IHQoXCJwYWdlcl9pbnB1dF9oaW50XCIpO1xuICAgICAgZWxsaXBzaXNMaW5rID0gc2V0dGluZ3Mub0luc3RhbmNlLnBhcmVudCgpLmZpbmQoJy5wYWdpbmdfbnVtYmVycyAucGFnaW5hdGlvbiAuZGlzYWJsZWQgYScpO1xuICAgICAgcmV0dXJuIGVsbGlwc2lzTGluay5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmNzcyhcImN1cnNvclwiLCBcInBvaW50ZXJcIikuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBnb1BhZ2UsIGlucHV0O1xuICAgICAgICBpZiAoISQodGhpcykuZmluZCgnaW5wdXQnKS5sZW5ndGgpIHtcbiAgICAgICAgICBpbnB1dCA9ICQoJzxpbnB1dCBjbGFzcz1cInBhZ2luYXRlX2lucHV0IGZvcm0tY29udHJvbCBpbnB1dC1zbVwiIHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IHBhZGRpbmc6MCAycHg7XCIvPicpO1xuICAgICAgICAgIGlmIChTdGVlZG9zLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgICAgIGlucHV0LmNzcyh7XG4gICAgICAgICAgICAgIHdpZHRoOiBcIjUycHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjIwcHhcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0LmNzcyh7XG4gICAgICAgICAgICAgIHdpZHRoOiBcIjUycHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjE2cHhcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlucHV0LmF0dHIoXCJ0aXRsZVwiLCB0aXRsZSkuYXR0cihcInBsYWNlaG9sZGVyXCIsIHRpdGxlKTtcbiAgICAgICAgICAkKHRoaXMpLmVtcHR5KCkuYXBwZW5kKGlucHV0KTtcbiAgICAgICAgICBnb1BhZ2UgPSBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICAgICAgdmFyIHBhZ2VzO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICBwYWdlcyA9IE1hdGguY2VpbChzZXR0aW5ncy5mblJlY29yZHNEaXNwbGF5KCkgLyBzZXR0aW5ncy5faURpc3BsYXlMZW5ndGgpO1xuICAgICAgICAgICAgICBpZiAoaW5kZXggPiBwYWdlcykge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gcGFnZXM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgICAgICAgcmV0dXJuIHNldHRpbmdzLm9JbnN0YW5jZS5EYXRhVGFibGUoKS5wYWdlKGluZGV4KS5kcmF3KCdwYWdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpbnB1dC5ibHVyKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50UGFnZTtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gJCh0aGlzKS52YWwoKTtcbiAgICAgICAgICAgIGdvUGFnZShjdXJyZW50UGFnZSk7XG4gICAgICAgICAgICByZXR1cm4gJCh0aGlzKS5wYXJlbnQoKS5odG1sKCcuLi4nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gaW5wdXQua2V5ZG93bihmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlLnRvU3RyaW5nKCkgPT09IFwiMTNcIikge1xuICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICAgIHJldHVybiBnb1BhZ2UoY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZWRSb3c6IGZ1bmN0aW9uKHJvdywgZGF0YSwgZGF0YUluZGV4KSB7XG4gICAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICAgIGlmIChkYXRhLl9pZCA9PT0gRmxvd1JvdXRlci5jdXJyZW50KCkucGFyYW1zLmluc3RhbmNlSWQpIHtcbiAgICAgICAgICByZXR1cm4gcm93LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwic2VsZWN0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbHVtbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZGF0YTogXCJfaWRcIixcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBhZ2VudF92aWV3LCBjY192aWV3LCBmbG93X25hbWUsIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MsIG1vZGlmaWVkLCBtb2RpZmllZEZyb21Ob3csIG1vZGlmaWVkU3RyaW5nLCBwcmlvcml0eUljb24sIHByaW9yaXR5SWNvbkNsYXNzLCBwcmlvcml0eVZhbHVlLCByZWYsIHJlZjEsIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcsIHVucmVhZDtcbiAgICAgICAgICBtb2RpZmllZFN0cmluZyA9IG1vbWVudChkb2MubW9kaWZpZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgIG1vZGlmaWVkID0gZG9jLm1vZGlmaWVkO1xuICAgICAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94JyAmJiBkb2Muc3RhdGUgIT09ICdkcmFmdCcpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkID0gZG9jLnN0YXJ0X2RhdGUgfHwgZG9jLm1vZGlmaWVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdvdXRib3gnIHx8IFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnbW9uaXRvcicpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkID0gZG9jLnN1Ym1pdF9kYXRlIHx8IGRvYy5zdWJtaXRfZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbW9kaWZpZWRGcm9tTm93ID0gU3RlZWRvcy5tb21lbnRSZWFjdGl2ZUZyb21Ob3cobW9kaWZpZWQpO1xuICAgICAgICAgIGZsb3dfbmFtZSA9IGRvYy5mbG93X25hbWU7XG4gICAgICAgICAgY2NfdmlldyA9IFwiXCI7XG4gICAgICAgICAgc3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy5pc19jYyAmJiAhKChyZWYgPSBkb2MuaW5ib3hfdXNlcnMpICE9IG51bGwgPyByZWYuaW5jbHVkZXMoTWV0ZW9yLnVzZXJJZCgpKSA6IHZvaWQgMCkgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcpIHtcbiAgICAgICAgICAgIGNjX3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oXCJpbnN0YW5jZV9jY190aXRsZVwiKSArIFwiKTwvbGFiZWw+IFwiO1xuICAgICAgICAgICAgc3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiPGRpdiBjbGFzcz0nZmxvdy1uYW1lJz5cIiArIGZsb3dfbmFtZSArIFwiPHNwYW4+KFwiICsgZG9jLmN1cnJlbnRfc3RlcF9uYW1lICsgXCIpPC9zcGFuPjwvZGl2PlwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgIT09ICdkcmFmdCcgJiYgZG9jLmN1cnJlbnRfc3RlcF9uYW1lKSB7XG4gICAgICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+XCIgKyBmbG93X25hbWUgKyBcIjxzcGFuPihcIiArIGRvYy5jdXJyZW50X3N0ZXBfbmFtZSArIFwiKTwvc3Bhbj48L2Rpdj5cIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+XCIgKyBmbG93X25hbWUgKyBcIjwvZGl2PlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhZ2VudF92aWV3ID0gXCJcIjtcbiAgICAgICAgICBpZiAoZG9jLmFnZW50X3VzZXJfbmFtZSAmJiBTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94Jykge1xuICAgICAgICAgICAgYWdlbnRfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge1xuICAgICAgICAgICAgICB1c2VyTmFtZTogZG9jLmFnZW50X3VzZXJfbmFtZVxuICAgICAgICAgICAgfSkgKyBcIik8L2xhYmVsPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICB1bnJlYWQgPSAnJztcbiAgICAgICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcgJiYgZG9jLmlzX3JlYWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1bnJlYWQgPSAnPGkgY2xhc3M9XCJpb24gaW9uLXJlY29yZCB1bnJlYWRcIj48L2k+JztcbiAgICAgICAgICB9IGVsc2UgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnbW9uaXRvcicgJiYgZG9jLmlzX2hpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdW5yZWFkID0gJzxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjwvaT4nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmlvcml0eUljb24gPSBcIlwiO1xuICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJcIjtcbiAgICAgICAgICBwcmlvcml0eVZhbHVlID0gKHJlZjEgPSBkb2MudmFsdWVzKSAhPSBudWxsID8gcmVmMS5wcmlvcml0eSA6IHZvaWQgMDtcbiAgICAgICAgICBzd2l0Y2ggKHByaW9yaXR5VmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCLnibnmgKVcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcImRhbmdlclwiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLntKfmgKVcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIndhcm5pbmdcIjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwi5Yqe5paHXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJtdXRlZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJpb3JpdHlJY29uQ2xhc3MpIHtcbiAgICAgICAgICAgIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgPSBcImNvbG9yLXByaW9yaXR5IGNvbG9yLXByaW9yaXR5LVwiICsgcHJpb3JpdHlJY29uQ2xhc3M7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXJlYWQtYmFyJz5cIiArIHVucmVhZCArIFwiPC9kaXY+XFxuPGRpdiBjbGFzcz0naW5zdGFuY2UtbmFtZSBcIiArIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgKyBcIic+XCIgKyBkb2MubmFtZSArIGNjX3ZpZXcgKyBhZ2VudF92aWV3ICsgXCJcXG5cdDxzcGFuPlwiICsgZG9jLmFwcGxpY2FudF9uYW1lICsgXCI8L3NwYW4+XFxuPC9kaXY+XFxuPGRpdiBjbGFzcz0naW5zdGFuY2UtZGV0YWlsJz5cIiArIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgKyBcIlxcblx0PHNwYW4gY2xhc3M9J2luc3RhbmNlLW1vZGlmaWVkJyB0aXRsZT0nXCIgKyBtb2RpZmllZFN0cmluZyArIFwiJz5cIiArIG1vZGlmaWVkRnJvbU5vdyArIFwiPC9zcGFuPlxcbjwvZGl2PlwiO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZVwiKSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJuYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX25hbWVcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgYWdlbnRfdmlldywgY2NfdmlldywgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcywgcHJpb3JpdHlJY29uQ2xhc3MsIHByaW9yaXR5VmFsdWUsIHJlZiwgcmVmMSwgc3RlcF9jdXJyZW50X25hbWVfdmlldywgdW5yZWFkO1xuICAgICAgICAgIGNjX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIGlmIChkb2MuaXNfY2MgJiYgISgocmVmID0gZG9jLmluYm94X3VzZXJzKSAhPSBudWxsID8gcmVmLmluY2x1ZGVzKE1ldGVvci51c2VySWQoKSkgOiB2b2lkIDApICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgICAgICBjY192aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKFwiaW5zdGFuY2VfY2NfdGl0bGVcIikgKyBcIik8L2xhYmVsPiBcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWdlbnRfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy5hZ2VudF91c2VyX25hbWUpIHtcbiAgICAgICAgICAgIGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHtcbiAgICAgICAgICAgICAgdXNlck5hbWU6IGRvYy5hZ2VudF91c2VyX25hbWVcbiAgICAgICAgICAgIH0pICsgXCIpPC9sYWJlbD5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdW5yZWFkID0gJyc7XG4gICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnICYmIGRvYy5pc19yZWFkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPic7XG4gICAgICAgICAgfSBlbHNlIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ21vbml0b3InICYmIGRvYy5pc19oaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgIHByaW9yaXR5VmFsdWUgPSAocmVmMSA9IGRvYy52YWx1ZXMpICE9IG51bGwgPyByZWYxLnByaW9yaXR5IDogdm9pZCAwO1xuICAgICAgICAgIHN3aXRjaCAocHJpb3JpdHlWYWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcIueJueaApVwiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwiZGFuZ2VyXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIue0p+aApVwiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwid2FybmluZ1wiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLlip7mlodcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIm11dGVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmlvcml0eUljb25DbGFzcykge1xuICAgICAgICAgICAgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyA9IFwiY29sb3ItcHJpb3JpdHkgY29sb3ItcHJpb3JpdHktXCIgKyBwcmlvcml0eUljb25DbGFzcztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPlwiICsgdW5yZWFkICsgXCI8L2Rpdj5cXG48ZGl2IGNsYXNzPSdpbnN0YW5jZS1uYW1lIFwiICsgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyArIFwiJz5cIiArIGRvYy5uYW1lICsgY2NfdmlldyArIGFnZW50X3ZpZXcgKyBcIjwvZGl2PlwiO1xuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImFwcGxpY2FudF9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9uYW1lXCIpLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcInN1Ym1pdF9kYXRlXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N1Ym1pdF9kYXRlXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgaWYgKGRvYy5zdWJtaXRfZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkb2Muc3VibWl0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImZsb3dfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19mbG93XCIpLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImN1cnJlbnRfc3RlcF9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N0ZXBfY3VycmVudF9uYW1lXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgdmFyIGNjX3RhZywganVkZ2UsIHN0ZXBfY3VycmVudF9uYW1lO1xuICAgICAgICAgIGlmIChkb2Muc3RhdGUgPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGp1ZGdlID0gZG9jLmZpbmFsX2RlY2lzaW9uIHx8IFwiYXBwcm92ZWRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RlcF9jdXJyZW50X25hbWUgPSBkb2MuY3VycmVudF9zdGVwX25hbWUgfHwgJyc7XG4gICAgICAgICAgY2NfdGFnID0gJyc7XG4gICAgICAgICAgaWYgKGRvYy5jY19jb3VudCA+IDApIHtcbiAgICAgICAgICAgIGNjX3RhZyA9IFRBUGkxOG4uX18oJ2NjX3RhZycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCI8ZGl2IGNsYXNzPVxcXCJzdGVwLWN1cnJlbnQtc3RhdGUgXCIgKyBqdWRnZSArIFwiXFxcIj5cIiArIHN0ZXBfY3VycmVudF9uYW1lICsgY2NfdGFnICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJtb2RpZmllZFwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19tb2RpZmllZFwiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHJldHVybiBtb21lbnQoZG9jLm1vZGlmaWVkKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcInN0YXJ0X2RhdGVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfc3RhcnRfZGF0ZVwiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIGlmIChkb2Muc3RhcnRfZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkb2Muc3RhcnRfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiB0cnVlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibXlfZmluaXNoX2RhdGVcIixcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIGlmIChkb2MubXlfZmluaXNoX2RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZG9jLm15X2ZpbmlzaF9kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IHRydWVcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJtb2RpZmllZFwiLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImtleXdvcmRzXCIsXG4gICAgICAgIHZpc2libGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiaXNfYXJjaGl2ZWRcIixcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciByZWY7XG4gICAgICAgICAgaWYgKChkb2MgIT0gbnVsbCA/IChyZWYgPSBkb2MudmFsdWVzKSAhPSBudWxsID8gcmVmLnJlY29yZF9uZWVkIDogdm9pZCAwIDogdm9pZCAwKSAmJiBkb2MudmFsdWVzLnJlY29yZF9uZWVkID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgaWYgKGRvYyAhPSBudWxsID8gZG9jLmlzX2FyY2hpdmVkIDogdm9pZCAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0KFwiWUVTXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQoXCJOT1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9XG4gICAgXSxcbiAgICBkb206IChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChTdGVlZG9zLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgcmV0dXJuICd0cCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ3RwbCc7XG4gICAgICB9XG4gICAgfSkoKSxcbiAgICBvcmRlcjogW1s0LCBcImRlc2NcIl1dLFxuICAgIGV4dHJhRmllbGRzOiBbXCJmb3JtXCIsIFwiZmxvd1wiLCBcImluYm94X3VzZXJzXCIsIFwic3RhdGVcIiwgXCJzcGFjZVwiLCBcImFwcGxpY2FudFwiLCBcImZvcm1fdmVyc2lvblwiLCBcImZsb3dfdmVyc2lvblwiLCBcImlzX2NjXCIsIFwiY2NfY291bnRcIiwgXCJpc19yZWFkXCIsIFwiY3VycmVudF9zdGVwX25hbWVcIiwgXCJ2YWx1ZXNcIiwgXCJrZXl3b3Jkc1wiLCBcImZpbmFsX2RlY2lzaW9uXCIsIFwiZmxvd19uYW1lXCIsIFwiaXNfaGlkZGVuXCIsIFwiYWdlbnRfdXNlcl9uYW1lXCJdLFxuICAgIGxlbmd0aENoYW5nZTogdHJ1ZSxcbiAgICBsZW5ndGhNZW51OiBbMTAsIDE1LCAyMCwgMjUsIDUwLCAxMDBdLFxuICAgIHBhZ2VMZW5ndGg6IDEwLFxuICAgIGluZm86IGZhbHNlLFxuICAgIHNlYXJjaGluZzogdHJ1ZSxcbiAgICByZXNwb25zaXZlOiB7XG4gICAgICBkZXRhaWxzOiBmYWxzZVxuICAgIH0sXG4gICAgYXV0b1dpZHRoOiBmYWxzZSxcbiAgICBjaGFuZ2VTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IsIHVzZXJJZCkge1xuICAgICAgdmFyIHJlZiwgc3BhY2UsIHNwYWNlX3VzZXI7XG4gICAgICBpZiAoIXVzZXJJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9pZDogLTFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHNwYWNlID0gc2VsZWN0b3Iuc3BhY2U7XG4gICAgICBpZiAoIXNwYWNlKSB7XG4gICAgICAgIGlmICgoc2VsZWN0b3IgIT0gbnVsbCA/IChyZWYgPSBzZWxlY3Rvci4kYW5kKSAhPSBudWxsID8gcmVmLmxlbmd0aCA6IHZvaWQgMCA6IHZvaWQgMCkgPiAwKSB7XG4gICAgICAgICAgc3BhY2UgPSBzZWxlY3Rvci4kYW5kLmdldFByb3BlcnR5KCdzcGFjZScpWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXNwYWNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX2lkOiAtMVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgc3BhY2VfdXNlciA9IGRiLnNwYWNlX3VzZXJzLmZpbmRPbmUoe1xuICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgIHNwYWNlOiBzcGFjZVxuICAgICAgfSwge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICBfaWQ6IDFcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIXNwYWNlX3VzZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaWQ6IC0xXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgfSxcbiAgICBwYWdpbmdUeXBlOiBcIm51bWJlcnNcIlxuICB9O1xuICBpZiAoZmxvd0lkKSB7XG4gICAga2V5ID0gXCJpbnN0YW5jZUZsb3dcIiArIGZsb3dJZDtcbiAgICBvcHRpb25zLm5hbWUgPSBrZXk7XG4gICAgVGFidWxhclRhYmxlcy5pbnN0YW5jZXMuZmllbGRzID0gZmllbGRzO1xuICAgIGluc19maWVsZHMgPSBfaGFuZGxlTGlzdEZpZWxkcyhUYWJ1bGFyVGFibGVzLmluc3RhbmNlcy5maWVsZHMpO1xuICAgIGluc19maWVsZHMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICBpZiAoZi50eXBlICE9PSAndGFibGUnICYmIGYuaXNfbGlzdF9kaXNwbGF5KSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgZGF0YTogZi5uYW1lIHx8IGYuY29kZSxcbiAgICAgICAgICB0aXRsZTogdChmLm5hbWUgfHwgZi5jb2RlKSxcbiAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICBvcmRlcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSwgdmFsdWVzO1xuICAgICAgICAgICAgdmFsdWVzID0gZG9jLnZhbHVlcyB8fCB7fTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzW2YuY29kZV07XG4gICAgICAgICAgICBzd2l0Y2ggKGYudHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICd1c2VyJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS5uYW1lIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdncm91cCc6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUuZnVsbG5hbWUgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZGF0ZVRpbWUnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF9ub1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ29kYXRhJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gXy5wbHVjayh2YWx1ZSwgJ0BsYWJlbCcpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWydAbGFiZWwnXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbmluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyID0gZnVuY3Rpb24oZmxvd0lkLCBmaWVsZHMpIHtcbiAgdmFyIGluc19maWVsZHMsIGtleSwgb3B0aW9ucztcbiAgb3B0aW9ucyA9IHtcbiAgICBuYW1lOiBcImluc3RhbmNlX3Rhc2tzXCIsXG4gICAgY29sbGVjdGlvbjogZGIuaW5zdGFuY2VfdGFza3MsXG4gICAgcHViOiBcImluc3RhbmNlX3Rhc2tzX3RhYnVsYXJcIixcbiAgICBvblVubG9hZDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gTWV0ZW9yLnNldFRpbWVvdXQoVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zLCAxNTApO1xuICAgIH0sXG4gICAgZHJhd0NhbGxiYWNrOiBmdW5jdGlvbihzZXR0aW5ncykge1xuICAgICAgdmFyIGVsbGlwc2lzTGluaywgZW1wdHlUZCwgdGl0bGU7XG4gICAgICBlbXB0eVRkID0gJChcIi5kYXRhVGFibGVzX2VtcHR5XCIpO1xuICAgICAgaWYgKGVtcHR5VGQubGVuZ3RoKSB7XG4gICAgICAgIGVtcHR5VGRbMF0uY29sU3BhbiA9IFwiNlwiO1xuICAgICAgfVxuICAgICAgaWYgKCFTdGVlZG9zLmlzTW9iaWxlKCkgJiYgIVN0ZWVkb3MuaXNQYWQoKSkge1xuICAgICAgICBNZXRlb3Iuc2V0VGltZW91dChUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMsIDE1MCk7XG4gICAgICAgICQoXCIuaW5zdGFuY2UtbGlzdFwiKS5zY3JvbGxUb3AoMCkucmVhZHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQoXCIuaW5zdGFuY2UtbGlzdFwiKS5wZXJmZWN0U2Nyb2xsYmFyKFwidXBkYXRlXCIpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoXCIuaW5zdGFuY2UtbGlzdFwiKS5zY3JvbGxUb3AoMCk7XG4gICAgICB9XG4gICAgICB0aXRsZSA9IHQoXCJwYWdlcl9pbnB1dF9oaW50XCIpO1xuICAgICAgZWxsaXBzaXNMaW5rID0gc2V0dGluZ3Mub0luc3RhbmNlLnBhcmVudCgpLmZpbmQoJy5wYWdpbmdfbnVtYmVycyAucGFnaW5hdGlvbiAuZGlzYWJsZWQgYScpO1xuICAgICAgcmV0dXJuIGVsbGlwc2lzTGluay5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmNzcyhcImN1cnNvclwiLCBcInBvaW50ZXJcIikuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBnb1BhZ2UsIGlucHV0O1xuICAgICAgICBpZiAoISQodGhpcykuZmluZCgnaW5wdXQnKS5sZW5ndGgpIHtcbiAgICAgICAgICBpbnB1dCA9ICQoJzxpbnB1dCBjbGFzcz1cInBhZ2luYXRlX2lucHV0IGZvcm0tY29udHJvbCBpbnB1dC1zbVwiIHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IHBhZGRpbmc6MCAycHg7XCIvPicpO1xuICAgICAgICAgIGlmIChTdGVlZG9zLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgICAgIGlucHV0LmNzcyh7XG4gICAgICAgICAgICAgIHdpZHRoOiBcIjUycHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjIwcHhcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0LmNzcyh7XG4gICAgICAgICAgICAgIHdpZHRoOiBcIjUycHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjE2cHhcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlucHV0LmF0dHIoXCJ0aXRsZVwiLCB0aXRsZSkuYXR0cihcInBsYWNlaG9sZGVyXCIsIHRpdGxlKTtcbiAgICAgICAgICAkKHRoaXMpLmVtcHR5KCkuYXBwZW5kKGlucHV0KTtcbiAgICAgICAgICBnb1BhZ2UgPSBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICAgICAgdmFyIHBhZ2VzO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICBwYWdlcyA9IE1hdGguY2VpbChzZXR0aW5ncy5mblJlY29yZHNEaXNwbGF5KCkgLyBzZXR0aW5ncy5faURpc3BsYXlMZW5ndGgpO1xuICAgICAgICAgICAgICBpZiAoaW5kZXggPiBwYWdlcykge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gcGFnZXM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgICAgICAgcmV0dXJuIHNldHRpbmdzLm9JbnN0YW5jZS5EYXRhVGFibGUoKS5wYWdlKGluZGV4KS5kcmF3KCdwYWdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpbnB1dC5ibHVyKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50UGFnZTtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gJCh0aGlzKS52YWwoKTtcbiAgICAgICAgICAgIGdvUGFnZShjdXJyZW50UGFnZSk7XG4gICAgICAgICAgICByZXR1cm4gJCh0aGlzKS5wYXJlbnQoKS5odG1sKCcuLi4nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gaW5wdXQua2V5ZG93bihmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlLnRvU3RyaW5nKCkgPT09IFwiMTNcIikge1xuICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICAgIHJldHVybiBnb1BhZ2UoY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZWRSb3c6IGZ1bmN0aW9uKHJvdywgZGF0YSwgZGF0YUluZGV4KSB7XG4gICAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICAgIGlmIChkYXRhLmluc3RhbmNlID09PSBGbG93Um91dGVyLmN1cnJlbnQoKS5wYXJhbXMuaW5zdGFuY2VJZCkge1xuICAgICAgICAgIHJldHVybiByb3cuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY29sdW1uczogW1xuICAgICAge1xuICAgICAgICBkYXRhOiBcIl9pZFwiLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgdmFyIGFnZW50X3ZpZXcsIGNjX3ZpZXcsIGZsb3dfbmFtZSwgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcywgbW9kaWZpZWQsIG1vZGlmaWVkRnJvbU5vdywgbW9kaWZpZWRTdHJpbmcsIHByaW9yaXR5SWNvbiwgcHJpb3JpdHlJY29uQ2xhc3MsIHByaW9yaXR5VmFsdWUsIHJlZiwgc3RlcF9jdXJyZW50X25hbWVfdmlldywgdW5yZWFkO1xuICAgICAgICAgIG1vZGlmaWVkU3RyaW5nID0gbW9tZW50KGRvYy5tb2RpZmllZCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgICAgbW9kaWZpZWQgPSBkb2MubW9kaWZpZWQ7XG4gICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnICYmIGRvYy5pbnN0YW5jZV9zdGF0ZSAhPT0gJ2RyYWZ0Jykge1xuICAgICAgICAgICAgbW9kaWZpZWQgPSBkb2Muc3RhcnRfZGF0ZSB8fCBkb2MubW9kaWZpZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ291dGJveCcpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkID0gZG9jLnN1Ym1pdF9kYXRlIHx8IGRvYy5tb2RpZmllZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbW9kaWZpZWRGcm9tTm93ID0gU3RlZWRvcy5tb21lbnRSZWFjdGl2ZUZyb21Ob3cobW9kaWZpZWQpO1xuICAgICAgICAgIGZsb3dfbmFtZSA9IGRvYy5mbG93X25hbWU7XG4gICAgICAgICAgY2NfdmlldyA9IFwiXCI7XG4gICAgICAgICAgc3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy50eXBlID09PSAnY2MnICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgICAgICBjY192aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKFwiaW5zdGFuY2VfY2NfdGl0bGVcIikgKyBcIik8L2xhYmVsPiBcIjtcbiAgICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+XCIgKyBmbG93X25hbWUgKyBcIjxzcGFuPihcIiArIGRvYy5zdGVwX25hbWUgKyBcIik8L3NwYW4+PC9kaXY+XCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb2Muc3RlcF9uYW1lKSB7XG4gICAgICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+XCIgKyBmbG93X25hbWUgKyBcIjxzcGFuPihcIiArIGRvYy5zdGVwX25hbWUgKyBcIik8L3NwYW4+PC9kaXY+XCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPlwiICsgZmxvd19uYW1lICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYWdlbnRfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy5hZ2VudF91c2VyX25hbWUgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcpIHtcbiAgICAgICAgICAgIGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHtcbiAgICAgICAgICAgICAgdXNlck5hbWU6IGRvYy5hZ2VudF91c2VyX25hbWVcbiAgICAgICAgICAgIH0pICsgXCIpPC9sYWJlbD5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdW5yZWFkID0gJyc7XG4gICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnICYmIGRvYy5pc19yZWFkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPic7XG4gICAgICAgICAgfSBlbHNlIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ21vbml0b3InICYmIGRvYy5pc19oaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JpdHlJY29uID0gXCJcIjtcbiAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwiXCI7XG4gICAgICAgICAgcHJpb3JpdHlWYWx1ZSA9IChyZWYgPSBkb2MudmFsdWVzKSAhPSBudWxsID8gcmVmLnByaW9yaXR5IDogdm9pZCAwO1xuICAgICAgICAgIHN3aXRjaCAocHJpb3JpdHlWYWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcIueJueaApVwiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwiZGFuZ2VyXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIue0p+aApVwiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwid2FybmluZ1wiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLlip7mlodcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIm11dGVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmlvcml0eUljb25DbGFzcykge1xuICAgICAgICAgICAgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyA9IFwiY29sb3ItcHJpb3JpdHkgY29sb3ItcHJpb3JpdHktXCIgKyBwcmlvcml0eUljb25DbGFzcztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPlwiICsgdW5yZWFkICsgXCI8L2Rpdj5cXG48ZGl2IGNsYXNzPSdpbnN0YW5jZS1uYW1lIFwiICsgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyArIFwiJz5cIiArIGRvYy5pbnN0YW5jZV9uYW1lICsgY2NfdmlldyArIGFnZW50X3ZpZXcgKyBcIlxcblx0PHNwYW4+XCIgKyBkb2MuYXBwbGljYW50X25hbWUgKyBcIjwvc3Bhbj5cXG48L2Rpdj5cXG48ZGl2IGNsYXNzPSdpbnN0YW5jZS1kZXRhaWwnPlwiICsgc3RlcF9jdXJyZW50X25hbWVfdmlldyArIFwiXFxuXHQ8c3BhbiBjbGFzcz0naW5zdGFuY2UtbW9kaWZpZWQnIHRpdGxlPSdcIiArIG1vZGlmaWVkU3RyaW5nICsgXCInPlwiICsgbW9kaWZpZWRGcm9tTm93ICsgXCI8L3NwYW4+XFxuPC9kaXY+XCI7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJhcHBsaWNhbnRfb3JnYW5pemF0aW9uX25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lXCIpLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImluc3RhbmNlX25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfbmFtZVwiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBhZ2VudF92aWV3LCBjY192aWV3LCBpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzLCBwcmlvcml0eUljb25DbGFzcywgcHJpb3JpdHlWYWx1ZSwgcmVmLCByZWYxLCBzdGVwX2N1cnJlbnRfbmFtZV92aWV3LCB1bnJlYWQ7XG4gICAgICAgICAgY2NfdmlldyA9IFwiXCI7XG4gICAgICAgICAgc3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy5pc19jYyAmJiAhKChyZWYgPSBkb2MuaW5ib3hfdXNlcnMpICE9IG51bGwgPyByZWYuaW5jbHVkZXMoTWV0ZW9yLnVzZXJJZCgpKSA6IHZvaWQgMCkgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcpIHtcbiAgICAgICAgICAgIGNjX3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oXCJpbnN0YW5jZV9jY190aXRsZVwiKSArIFwiKTwvbGFiZWw+IFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZ2VudF92aWV3ID0gXCJcIjtcbiAgICAgICAgICBpZiAoZG9jLmFnZW50X3VzZXJfbmFtZSkge1xuICAgICAgICAgICAgYWdlbnRfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge1xuICAgICAgICAgICAgICB1c2VyTmFtZTogZG9jLmFnZW50X3VzZXJfbmFtZVxuICAgICAgICAgICAgfSkgKyBcIik8L2xhYmVsPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICB1bnJlYWQgPSAnJztcbiAgICAgICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcgJiYgZG9jLmlzX3JlYWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1bnJlYWQgPSAnPGkgY2xhc3M9XCJpb24gaW9uLXJlY29yZCB1bnJlYWRcIj48L2k+JztcbiAgICAgICAgICB9IGVsc2UgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnbW9uaXRvcicgJiYgZG9jLmlzX2hpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdW5yZWFkID0gJzxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjwvaT4nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwiXCI7XG4gICAgICAgICAgcHJpb3JpdHlWYWx1ZSA9IChyZWYxID0gZG9jLnZhbHVlcykgIT0gbnVsbCA/IHJlZjEucHJpb3JpdHkgOiB2b2lkIDA7XG4gICAgICAgICAgc3dpdGNoIChwcmlvcml0eVZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwi54m55oClXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJkYW5nZXJcIjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwi57Sn5oClXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJ3YXJuaW5nXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIuWKnuaWh1wiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwibXV0ZWRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByaW9yaXR5SWNvbkNsYXNzKSB7XG4gICAgICAgICAgICBpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzID0gXCJjb2xvci1wcmlvcml0eSBjb2xvci1wcmlvcml0eS1cIiArIHByaW9yaXR5SWNvbkNsYXNzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCI8ZGl2IGNsYXNzPSdpbnN0YW5jZS1yZWFkLWJhcic+XCIgKyB1bnJlYWQgKyBcIjwvZGl2PlxcbjxkaXYgY2xhc3M9J2luc3RhbmNlLW5hbWUgXCIgKyBpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzICsgXCInPlwiICsgZG9jLmluc3RhbmNlX25hbWUgKyBjY192aWV3ICsgYWdlbnRfdmlldyArIFwiPC9kaXY+XCI7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiYXBwbGljYW50X25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfYXBwbGljYW50X25hbWVcIiksXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwic3VibWl0X2RhdGVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfc3VibWl0X2RhdGVcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICBpZiAoZG9jLnN1Ym1pdF9kYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRvYy5zdWJtaXRfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiB0cnVlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiZmxvd19uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX2Zsb3dcIiksXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwic3RlcF9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N0ZXBfY3VycmVudF9uYW1lXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgdmFyIGNjX3RhZywganVkZ2UsIHN0ZXBfY3VycmVudF9uYW1lO1xuICAgICAgICAgIGlmIChkb2MuaW5zdGFuY2Vfc3RhdGUgPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGp1ZGdlID0gZG9jLmp1ZGdlIHx8IFwiYXBwcm92ZWRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RlcF9jdXJyZW50X25hbWUgPSBkb2Muc3RlcF9uYW1lIHx8ICcnO1xuICAgICAgICAgIGNjX3RhZyA9ICcnO1xuICAgICAgICAgIGlmIChkb2MuY2NfY291bnQgPiAwKSB7XG4gICAgICAgICAgICBjY190YWcgPSBUQVBpMThuLl9fKCdjY190YWcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz1cXFwic3RlcC1jdXJyZW50LXN0YXRlIFwiICsganVkZ2UgKyBcIlxcXCI+XCIgKyBzdGVwX2N1cnJlbnRfbmFtZSArIGNjX3RhZyArIFwiPC9kaXY+XCI7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibW9kaWZpZWRcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfbW9kaWZpZWRcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICByZXR1cm4gbW9tZW50KGRvYy5tb2RpZmllZCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IHRydWVcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJzdGFydF9kYXRlXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N0YXJ0X2RhdGVcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICBpZiAoZG9jLnN0YXJ0X2RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZG9jLnN0YXJ0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImZpbmlzaF9kYXRlXCIsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICBpZiAoZG9jLmZpbmlzaF9kYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRvYy5maW5pc2hfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiB0cnVlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibW9kaWZpZWRcIixcbiAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJrZXl3b3Jkc1wiLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImlzX2FyY2hpdmVkXCIsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgcmVmO1xuICAgICAgICAgIGlmICgoZG9jICE9IG51bGwgPyAocmVmID0gZG9jLnZhbHVlcykgIT0gbnVsbCA/IHJlZi5yZWNvcmRfbmVlZCA6IHZvaWQgMCA6IHZvaWQgMCkgJiYgZG9jLnZhbHVlcy5yZWNvcmRfbmVlZCA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIGlmIChkb2MgIT0gbnVsbCA/IGRvYy5pc19hcmNoaXZlZCA6IHZvaWQgMCkge1xuICAgICAgICAgICAgICByZXR1cm4gdChcIllFU1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0KFwiTk9cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfVxuICAgIF0sXG4gICAgZG9tOiAoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICAgIHJldHVybiAndHAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICd0cGwnO1xuICAgICAgfVxuICAgIH0pKCksXG4gICAgb3JkZXI6IFtbNCwgXCJkZXNjXCJdXSxcbiAgICBleHRyYUZpZWxkczogW1wiaW5zdGFuY2VcIiwgXCJmb3JtXCIsIFwiZmxvd1wiLCBcImluYm94X3VzZXJzXCIsIFwiaW5zdGFuY2Vfc3RhdGVcIiwgXCJzcGFjZVwiLCBcImFwcGxpY2FudFwiLCBcImZvcm1fdmVyc2lvblwiLCBcImZsb3dfdmVyc2lvblwiLCBcInR5cGVcIiwgXCJpc19yZWFkXCIsIFwic3RlcF9uYW1lXCIsIFwidmFsdWVzXCIsIFwia2V5d29yZHNcIiwgXCJmaW5hbF9kZWNpc2lvblwiLCBcImZsb3dfbmFtZVwiLCBcImlzX2hpZGRlblwiLCBcImFnZW50X3VzZXJfbmFtZVwiXSxcbiAgICBsZW5ndGhDaGFuZ2U6IHRydWUsXG4gICAgbGVuZ3RoTWVudTogWzEwLCAxNSwgMjAsIDI1LCA1MCwgMTAwXSxcbiAgICBwYWdlTGVuZ3RoOiAxMCxcbiAgICBpbmZvOiBmYWxzZSxcbiAgICBzZWFyY2hpbmc6IHRydWUsXG4gICAgcmVzcG9uc2l2ZToge1xuICAgICAgZGV0YWlsczogZmFsc2VcbiAgICB9LFxuICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgY2hhbmdlU2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yLCB1c2VySWQpIHtcbiAgICAgIHZhciByZWYsIHNwYWNlLCBzcGFjZV91c2VyO1xuICAgICAgaWYgKCF1c2VySWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaWQ6IC0xXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzcGFjZSA9IHNlbGVjdG9yLnNwYWNlO1xuICAgICAgaWYgKCFzcGFjZSkge1xuICAgICAgICBpZiAoKHNlbGVjdG9yICE9IG51bGwgPyAocmVmID0gc2VsZWN0b3IuJGFuZCkgIT0gbnVsbCA/IHJlZi5sZW5ndGggOiB2b2lkIDAgOiB2b2lkIDApID4gMCkge1xuICAgICAgICAgIHNwYWNlID0gc2VsZWN0b3IuJGFuZC5nZXRQcm9wZXJ0eSgnc3BhY2UnKVswXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzcGFjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9pZDogLTFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHNwYWNlX3VzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHtcbiAgICAgICAgdXNlcjogdXNlcklkLFxuICAgICAgICBzcGFjZTogc3BhY2VcbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgX2lkOiAxXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCFzcGFjZV91c2VyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX2lkOiAtMVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH0sXG4gICAgcGFnaW5nVHlwZTogXCJudW1iZXJzXCJcbiAgfTtcbiAgaWYgKGZsb3dJZCkge1xuICAgIGtleSA9IFwiaW5zdGFuY2VGbG93XCIgKyBmbG93SWQ7XG4gICAgb3B0aW9ucy5uYW1lID0ga2V5O1xuICAgIFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VfdGFza3MuZmllbGRzID0gZmllbGRzO1xuICAgIGluc19maWVsZHMgPSBfaGFuZGxlTGlzdEZpZWxkcyhUYWJ1bGFyVGFibGVzLmluc3RhbmNlX3Rhc2tzLmZpZWxkcyk7XG4gICAgaW5zX2ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGYpIHtcbiAgICAgIGlmIChmLnR5cGUgIT09ICd0YWJsZScgJiYgZi5pc19saXN0X2Rpc3BsYXkpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICBkYXRhOiBmLm5hbWUgfHwgZi5jb2RlLFxuICAgICAgICAgIHRpdGxlOiB0KGYubmFtZSB8fCBmLmNvZGUpLFxuICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgICAgdmFyIHZhbHVlLCB2YWx1ZXM7XG4gICAgICAgICAgICB2YWx1ZXMgPSBkb2MudmFsdWVzIHx8IHt9O1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbZi5jb2RlXTtcbiAgICAgICAgICAgIHN3aXRjaCAoZi50eXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3VzZXInOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLm5hbWUgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS5mdWxsbmFtZSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdjaGVja2JveCc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfeWVzXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X25vXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnb2RhdGEnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKF8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfLnBsdWNrKHZhbHVlLCAnQGxhYmVsJykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbJ0BsYWJlbCddO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufTtcblxuTWV0ZW9yLnN0YXJ0dXAoZnVuY3Rpb24oKSB7XG4gIFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VzID0gbmV3IFRhYnVsYXIuVGFibGUoaW5zdGFuY2VzTGlzdFRhYmxlVGFidWxhcigpKTtcbiAgVGFidWxhclRhYmxlcy5pbnN0YW5jZV90YXNrcyA9IG5ldyBUYWJ1bGFyLlRhYmxlKGluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyKCkpO1xuICBUYWJ1bGFyVGFibGVzLmluYm94X2luc3RhbmNlcyA9IG5ldyBUYWJ1bGFyLlRhYmxlKEdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zKFwiaW5ib3hcIikpO1xuICByZXR1cm4gVGFidWxhclRhYmxlcy5vdXRib3hfaW5zdGFuY2VzID0gbmV3IFRhYnVsYXIuVGFibGUoR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMoXCJvdXRib3hcIikpO1xufSk7XG5cbkdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zID0gZnVuY3Rpb24oYm94LCBmbG93SWQsIGZpZWxkcykge1xuICB2YXIga2V5LCBvcHRpb25zO1xuICBrZXkgPSBcImluc3RhbmNlRmxvd1wiICsgYm94ICsgZmxvd0lkO1xuICBpZiAoYm94ID09PSBcImluYm94XCIpIHtcbiAgICBvcHRpb25zID0gX2dldF9pbmJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zKGZsb3dJZCwgZmllbGRzKTtcbiAgfSBlbHNlIGlmIChib3ggPT09IFwib3V0Ym94XCIpIHtcbiAgICBvcHRpb25zID0gX2dldF9vdXRib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyhmbG93SWQsIGZpZWxkcyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucyA9IGluc3RhbmNlc0xpc3RUYWJsZVRhYnVsYXIoZmxvd0lkLCBmaWVsZHMpO1xuICAgIGlmICghZmxvd0lkKSB7XG4gICAgICBvcHRpb25zLm5hbWUgPSBcImluYm94X2luc3RhbmNlc1wiO1xuICAgIH1cbiAgfVxuICBpZiAoZmxvd0lkKSB7XG4gICAgb3B0aW9ucy5uYW1lID0ga2V5O1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufTtcblxuX2dldF9pbmJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zID0gZnVuY3Rpb24oZmxvd0lkLCBmaWVsZHMpIHtcbiAgdmFyIG9wdGlvbnM7XG4gIG9wdGlvbnMgPSBpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhcihmbG93SWQsIGZpZWxkcyk7XG4gIGlmICghZmxvd0lkKSB7XG4gICAgb3B0aW9ucy5uYW1lID0gXCJpbmJveF9pbnN0YW5jZXNcIjtcbiAgfVxuICBvcHRpb25zLm9yZGVyID0gW1s4LCBcImRlc2NcIl1dO1xuICBvcHRpb25zLmdldFNvcnQgPSBmdW5jdGlvbihzZWxlY3Rvciwgc29ydCkge1xuICAgIGNvbnNvbGUubG9nKCdpbmJveF9pbnN0YW5jZXM6Jywgc29ydCk7XG4gICAgcmV0dXJuIHNvcnQ7XG4gIH07XG4gIHJldHVybiBvcHRpb25zO1xufTtcblxuX2dldF9vdXRib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyA9IGZ1bmN0aW9uKGZsb3dJZCwgZmllbGRzKSB7XG4gIHZhciBvcHRpb25zO1xuICBvcHRpb25zID0gaW5zdGFuY2VUYXNrc0xpc3RUYWJsZVRhYnVsYXIoZmxvd0lkLCBmaWVsZHMpO1xuICBpZiAoIWZsb3dJZCkge1xuICAgIG9wdGlvbnMubmFtZSA9IFwib3V0Ym94X2luc3RhbmNlc1wiO1xuICB9XG4gIG9wdGlvbnMub3JkZXIgPSBbWzksIC0xXV07XG4gIG9wdGlvbnMuZ2V0U29ydCA9IGZ1bmN0aW9uKHNlbGVjdG9yLCBzb3J0KSB7XG4gICAgY29uc29sZS5sb2coJ291dGJveF9pbnN0YW5jZXM6Jywgc29ydCk7XG4gICAgcmV0dXJuIHNvcnQ7XG4gIH07XG4gIHJldHVybiBvcHRpb25zO1xufTtcblxuaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICBUYWJ1bGFyVGFibGVzLmZsb3dJbnN0YW5jZXMgPSBuZXcgUmVhY3RpdmVWYXIoKTtcbn1cblxuTWV0ZW9yLnN0YXJ0dXAoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBUcmFja2VyLmF1dG9ydW4oZnVuY3Rpb24oYykge1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQgJiYgIVN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiZmxvd0lkXCIpICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpICE9PSAnZHJhZnQnKSB7XG4gICAgICAgIHJldHVybiBNZXRlb3IuY2FsbChcIm5ld0luc3RhbmNlc0xpc3RUYWJ1bGFyXCIsIFNlc3Npb24uZ2V0KFwiYm94XCIpLCBTZXNzaW9uLmdldChcImZsb3dJZFwiKSwgZnVuY3Rpb24oZXJyb3IsIHJlc3VsdCkge1xuICAgICAgICAgIG5ld0luc3RhbmNlc0xpc3RUYWJ1bGFyKFNlc3Npb24uZ2V0KFwiYm94XCIpLCBTZXNzaW9uLmdldChcImZsb3dJZFwiKSwgcmVzdWx0KTtcbiAgICAgICAgICByZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fY2hhbmdlT3JkZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0pO1xuXG5uZXdJbnN0YW5jZXNMaXN0VGFidWxhciA9IGZ1bmN0aW9uKGJveCwgZmxvd0lkLCBmaWVsZHMpIHtcbiAgdmFyIGZsb3csIGtleSwgcmVmLCByZWYxLCByZWYyO1xuICBpZiAoIWZpZWxkcykge1xuICAgIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtcbiAgICAgIF9pZDogZmxvd0lkXG4gICAgfSwge1xuICAgICAgZmllbGRzOiB7XG4gICAgICAgIGZvcm06IDFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmaWVsZHMgPSAocmVmID0gZGIuZm9ybXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGZsb3cgIT0gbnVsbCA/IGZsb3cuZm9ybSA6IHZvaWQgMFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICAnY3VycmVudC5maWVsZHMnOiAxXG4gICAgICB9XG4gICAgfSkpICE9IG51bGwgPyAocmVmMSA9IHJlZi5jdXJyZW50KSAhPSBudWxsID8gcmVmMS5maWVsZHMgOiB2b2lkIDAgOiB2b2lkIDA7XG4gIH1cbiAgZmllbGRzID0gX2hhbmRsZUxpc3RGaWVsZHMoZmllbGRzKTtcbiAgaWYgKChmaWVsZHMgIT0gbnVsbCA/IChyZWYyID0gZmllbGRzLmZpbHRlclByb3BlcnR5KFwiaXNfbGlzdF9kaXNwbGF5XCIsIHRydWUpKSAhPSBudWxsID8gcmVmMi5sZW5ndGggOiB2b2lkIDAgOiB2b2lkIDApID4gMCkge1xuICAgIGtleSA9IFwiaW5zdGFuY2VGbG93XCIgKyBib3ggKyBmbG93SWQ7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgVGFidWxhclRhYmxlcy5mbG93SW5zdGFuY2VzLnNldChuZXcgVGFidWxhci5UYWJsZShHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhib3gsIGZsb3dJZCwgZmllbGRzKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXcgVGFidWxhci5UYWJsZShHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhib3gsIGZsb3dJZCwgZmllbGRzKSk7XG4gICAgfVxuICAgIHJldHVybiBjb25zb2xlLmxvZyhcIm5ldyBUYWJ1bGFyVGFibGVzIFwiLCBrZXkpO1xuICB9XG59O1xuXG5pZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gIE1ldGVvci5tZXRob2RzKHtcbiAgICBuZXdJbnN0YW5jZXNMaXN0VGFidWxhcjogZnVuY3Rpb24oYm94LCBmbG93SWQpIHtcbiAgICAgIHZhciBmaWVsZHMsIGZsb3csIHJlZiwgcmVmMTtcbiAgICAgIG5ld0luc3RhbmNlc0xpc3RUYWJ1bGFyKGJveCwgZmxvd0lkKTtcbiAgICAgIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBmbG93SWRcbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgZm9ybTogMVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZpZWxkcyA9IChyZWYgPSBkYi5mb3Jtcy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBmbG93ICE9IG51bGwgPyBmbG93LmZvcm0gOiB2b2lkIDBcbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgJ2N1cnJlbnQuZmllbGRzJzogMVxuICAgICAgICB9XG4gICAgICB9KSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLmN1cnJlbnQpICE9IG51bGwgPyByZWYxLmZpZWxkcyA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ== +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9jaGVja05wbS5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9saWIvVVJJLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2xpYi9jb3JlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvbGliL2NvcmUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2xpYi9tb2RlbHMvaW5zdGFuY2VfdGFza3MuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2xpYi9tb2RlbHMvYXV0aF90b2tlbnMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2NsaWVudC9saWIvaW5zdGFuY2VfcmVhZG9ubHlfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvbGliL2luc3RhbmNlX3JlYWRvbmx5X3RlbXBsYXRlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9jbGllbnQvbGliL3RlbXBsYXRlX21hbmFnZXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvbGliL3RlbXBsYXRlX21hbmFnZXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L2NsaWVudC9jb3JlZm9ybS9pbnB1dFR5cGVzL2NvcmVmb3JtLXRhYmxlL3N0ZWVkb3MtdGFibGUuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbWFnZV9zaWduLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbWFnZV9zaWduLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3RyYWNlc19oYW5kbGVyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL190cmFjZXNfaGFuZGxlci5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbnN0YW5jZV9mb3JtLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbnN0YW5jZV9mb3JtLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9jbGllbnQvdmlld3MvaW5zdGFuY2UvX2luc3RhbmNlX2F0dGFjaG1lbnRzLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2NsaWVudC92aWV3cy9pbnN0YW5jZS9faW5zdGFuY2Vfc2lnbl90ZXh0LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19pbnN0YW5jZV9zaWduX3RleHQuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L2NsaWVudC92aWV3cy9pbnN0YW5jZS9fdHJhY2VzX2hlbHAuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3RyYWNlc19oZWxwLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3JlbGF0ZWRfaW5zdGFuY2VzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19yZWxhdGVkX2luc3RhbmNlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvY2xpZW50L3ZpZXdzL2luc3RhbmNlL19yZWxhdGVkX3JlY29yZHMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9jbGllbnQvdmlld3MvaW5zdGFuY2UvX3JlbGF0ZWRfcmVjb3Jkcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3M6d29ya2Zsb3cvcm91dGVzL2dldFNwYWNlVXNlcnMuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3M6d29ya2Zsb3cvcm91dGVzL2dldEZvcm11bGFVc2VyT2JqZWN0cy5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9yb3V0ZXMvaW5pdF9mb3JtdWxhX3ZhbHVlcy5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9yb3V0ZXMvYXBpX3dvcmtmbG93X2ZvcndhcmQuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvcm91dGVzL3Rlc3Rfd2ViaG9vay5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3JvdXRlcy90ZXN0X3dlYmhvb2suY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL3NldF9pbnN0YW5jZV9zdGVwX2FwcHJvdmUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9tZXRob2RzL2dldF9pbnN0YW5jZV9kYXRhLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9tZXRob2RzL3NhdmVfaW5zdGFuY2UuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3M6d29ya2Zsb3cvc2VydmVyL21ldGhvZHMvdHJhY2VfYXBwcm92ZV9jYy5qcyIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvczp3b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9mb3J3YXJkX2luc3RhbmNlLmpzIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9tZXRob2RzL2Nmc19pbnN0YW5jZXMuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL21ldGhvZHMvaW5zdGFuY2VfYXBwcm92ZS5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL21ldGhvZHMvaW5zdGFuY2VfcmV0dXJuLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9pbnN0YW5jZV9yZW1pbmQuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL25leHRfc3RlcF91c2Vyc19ub3RfZm91bmQuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL2luc3RhbmNlX251bWJlcl9ydWxlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL21ldGhvZHMvY2hlY2tfbWFpbl9hdHRhY2guY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL3JlbGF0ZWRfaW5zdGFuY2VzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9lZGl0X2Zsb3dfcG9zaXRpb25zLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9zdGFydF9mbG93LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9pbnN0YW5jZV90cmFjZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9tZXRob2RzL2luc3RhbmNlX2JhdGNoLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9mbG93LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9oaWRlX2luc3RhbmNlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvbWV0aG9kcy9pbnN0YW5jZV92YWx1ZS5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3JvdXRlcy9pbnN0YW5jZS5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9yb3V0ZXMvaW5zdGFuY2UuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9yb3V0ZXMvc3RlZWRvc19jc3MuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcm91dGVzL3N0ZWVkb3NfY3NzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcm91dGVzL2luc3RhbmNlX2RyYWZ0X3ZpZXcuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcm91dGVzL2luc3RhbmNlX2RyYWZ0X3ZpZXcuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zOndvcmtmbG93L3NlcnZlci9saWIvMV9mb3JtX2Zvcm11bGEuanMiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9jYXRlZ29yaWVzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9jYXRlZ29yaWVzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2Nmc19pbnN0YW5jZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Nmc19pbnN0YW5jZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd19wb3NpdGlvbnMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfcG9zaXRpb25zLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfcG9zaXRpb25zX3RhYnVsYXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfcG9zaXRpb25zX3RhYnVsYXIuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd19yb2xlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd19yb2xlcy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9mbG93cy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvZmxvd3MuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvZm9ybXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zvcm1zLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2luc3RhbmNlX2RhdGEuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2luc3RhbmNlX2RhdGEuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvaW5zdGFuY2VfbGlzdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvaW5zdGFuY2VfbGlzdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9pbnN0YW5jZV90YWJ1bGFyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9pbnN0YW5jZV90YWJ1bGFyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2luc3RhbmNlX2RyYWZ0LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9pbnN0YW5jZV9kcmFmdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy9kaXN0cmlidXRlZF9pbnN0YW5jZXNfc3RhdGVfYnlfaWRzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy9kaXN0cmlidXRlZF9pbnN0YW5jZXNfc3RhdGVfYnlfaWRzLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL3JlbGF0ZWRfaW5zdGFjZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL3JlbGF0ZWRfaW5zdGFjZXMuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9wdWJsaWNhdGlvbnMvc3BhY2VfdXNlcl9zaWducy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9wdWJsaWNhdGlvbnMvc3BhY2VfdXNlcl9zaWducy5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvc2VydmVyL3B1YmxpY2F0aW9ucy91c2VyX2luYm94X2luc3RhbmNlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL3B1YmxpY2F0aW9ucy91c2VyX2luYm94X2luc3RhbmNlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfbWFpbl9hdHRhY2hfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvcHVibGljYXRpb25zL2Zsb3dfbWFpbl9hdHRhY2hfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9mbG93LXRlbXBsYXRlL3dvcmtmbG93X3RlbXBsYXRlLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvc2VydmVyL2Zsb3ctdGVtcGxhdGUvd29ya2Zsb3dfdGVtcGxhdGUuY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93L3NlcnZlci9zY2hlZHVsZS9hdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24uY29mZmVlIiwibWV0ZW9yOi8v8J+Su2FwcC9zZXJ2ZXIvc2NoZWR1bGUvYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9zZXJ2ZXIvc2NoZWR1bGUvdGltZW91dF9hdXRvX3N1Ym1pdC5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3NlcnZlci9zY2hlZHVsZS90aW1lb3V0X2F1dG9fc3VibWl0LmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcGFja2FnZXMvc3RlZWRvc193b3JrZmxvdy9yZWxhdGVkX2luc3RhbmNlc190YWJ1bGFyLmNvZmZlZSIsIm1ldGVvcjovL/CfkrthcHAvcmVsYXRlZF9pbnN0YW5jZXNfdGFidWxhci5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3BhY2thZ2VzL3N0ZWVkb3Nfd29ya2Zsb3cvdGFidWxhci5jb2ZmZWUiLCJtZXRlb3I6Ly/wn5K7YXBwL3RhYnVsYXIuY29mZmVlIl0sIm5hbWVzIjpbImNoZWNrTnBtVmVyc2lvbnMiLCJtb2R1bGUiLCJsaW5rIiwidiIsInJvb3QiLCJmYWN0b3J5IiwiZGVmaW5lIiwiYW1kIiwiVVJJIiwicHVueWNvZGUiLCJJUHY2IiwiU2Vjb25kTGV2ZWxEb21haW5zIiwiU0xEIiwiX1VSSSIsInVybCIsImJhc2UiLCJfdXJsU3VwcGxpZWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJfYmFzZVN1cHBsaWVkIiwidW5kZWZpbmVkIiwiVHlwZUVycm9yIiwibG9jYXRpb24iLCJocmVmIiwiYWJzb2x1dGVUbyIsInZlcnNpb24iLCJwIiwicHJvdG90eXBlIiwiaGFzT3duIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJlc2NhcGVSZWdFeCIsInN0cmluZyIsInJlcGxhY2UiLCJnZXRUeXBlIiwidmFsdWUiLCJTdHJpbmciLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImlzQXJyYXkiLCJvYmoiLCJmaWx0ZXJBcnJheVZhbHVlcyIsImRhdGEiLCJsb29rdXAiLCJpIiwiX21hdGNoIiwidGVzdCIsInNwbGljZSIsImFycmF5Q29udGFpbnMiLCJsaXN0IiwiX3R5cGUiLCJtYXRjaCIsImFycmF5c0VxdWFsIiwib25lIiwidHdvIiwic29ydCIsImwiLCJ0cmltU2xhc2hlcyIsInRleHQiLCJ0cmltX2V4cHJlc3Npb24iLCJfcGFydHMiLCJwcm90b2NvbCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJob3N0bmFtZSIsInVybiIsInBvcnQiLCJwYXRoIiwicXVlcnkiLCJmcmFnbWVudCIsImR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyIsImVzY2FwZVF1ZXJ5U3BhY2UiLCJwcm90b2NvbF9leHByZXNzaW9uIiwiaWRuX2V4cHJlc3Npb24iLCJwdW55Y29kZV9leHByZXNzaW9uIiwiaXA0X2V4cHJlc3Npb24iLCJpcDZfZXhwcmVzc2lvbiIsImZpbmRfdXJpX2V4cHJlc3Npb24iLCJmaW5kVXJpIiwic3RhcnQiLCJlbmQiLCJ0cmltIiwiZGVmYXVsdFBvcnRzIiwiaHR0cCIsImh0dHBzIiwiZnRwIiwiZ29waGVyIiwid3MiLCJ3c3MiLCJpbnZhbGlkX2hvc3RuYW1lX2NoYXJhY3RlcnMiLCJkb21BdHRyaWJ1dGVzIiwiZ2V0RG9tQXR0cmlidXRlIiwibm9kZSIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJ0eXBlIiwiZXNjYXBlRm9yRHVtYkZpcmVmb3gzNiIsImVzY2FwZSIsInN0cmljdEVuY29kZVVSSUNvbXBvbmVudCIsImVuY29kZVVSSUNvbXBvbmVudCIsImVuY29kZSIsImRlY29kZSIsImRlY29kZVVSSUNvbXBvbmVudCIsImlzbzg4NTkiLCJ1bmVzY2FwZSIsInVuaWNvZGUiLCJjaGFyYWN0ZXJzIiwicGF0aG5hbWUiLCJleHByZXNzaW9uIiwibWFwIiwicmVzZXJ2ZWQiLCJ1cm5wYXRoIiwiZW5jb2RlUXVlcnkiLCJlc2NhcGVkIiwiZGVjb2RlUXVlcnkiLCJlIiwiX3BhcnQiLCJnZW5lcmF0ZUFjY2Vzc29yIiwiX2dyb3VwIiwiYyIsImdlbmVyYXRlU2VnbWVudGVkUGF0aEZ1bmN0aW9uIiwiX3NlcCIsIl9jb2RpbmdGdW5jTmFtZSIsIl9pbm5lckNvZGluZ0Z1bmNOYW1lIiwiYWN0dWFsQ29kaW5nRnVuYyIsInNlZ21lbnRzIiwic3BsaXQiLCJqb2luIiwiZGVjb2RlUGF0aCIsImRlY29kZVVyblBhdGgiLCJyZWNvZGVQYXRoIiwicmVjb2RlVXJuUGF0aCIsImVuY29kZVJlc2VydmVkIiwicGFyc2UiLCJwYXJ0cyIsInBvcyIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJwYXJzZUF1dGhvcml0eSIsInBhcnNlSG9zdCIsImJyYWNrZXRQb3MiLCJ0IiwiY2hhckF0IiwiZmlyc3RDb2xvbiIsImZpcnN0U2xhc2giLCJuZXh0Q29sb24iLCJwYXJzZVVzZXJpbmZvIiwibGFzdEluZGV4T2YiLCJzaGlmdCIsInBhcnNlUXVlcnkiLCJpdGVtcyIsInNwbGl0cyIsIm5hbWUiLCJwdXNoIiwiYnVpbGQiLCJidWlsZEF1dGhvcml0eSIsImJ1aWxkSG9zdCIsImJ1aWxkVXNlcmluZm8iLCJidWlsZFF1ZXJ5IiwidW5pcXVlIiwia2V5IiwiYnVpbGRRdWVyeVBhcmFtZXRlciIsImFkZFF1ZXJ5IiwiY29uY2F0IiwicmVtb3ZlUXVlcnkiLCJoYXNRdWVyeSIsIndpdGhpbkFycmF5IiwiX2Jvb2x5IiwiQm9vbGVhbiIsIm9wIiwiY29tbW9uUGF0aCIsIk1hdGgiLCJtaW4iLCJ3aXRoaW5TdHJpbmciLCJjYWxsYmFjayIsIm9wdGlvbnMiLCJfc3RhcnQiLCJfZW5kIiwiX3RyaW0iLCJfYXR0cmlidXRlT3BlbiIsImxhc3RJbmRleCIsImV4ZWMiLCJpbmRleCIsImlnbm9yZUh0bWwiLCJhdHRyaWJ1dGVPcGVuIiwibWF4Iiwic2VhcmNoIiwiaWdub3JlIiwicmVzdWx0IiwiZW5zdXJlVmFsaWRIb3N0bmFtZSIsInRvQVNDSUkiLCJub0NvbmZsaWN0IiwicmVtb3ZlQWxsIiwidW5jb25mbGljdGVkIiwiVVJJVGVtcGxhdGUiLCJkZWZlckJ1aWxkIiwiX2RlZmVycmVkX2J1aWxkIiwiX3N0cmluZyIsImNsb25lIiwidmFsdWVPZiIsImdlbmVyYXRlU2ltcGxlQWNjZXNzb3IiLCJnZW5lcmF0ZVByZWZpeEFjY2Vzc29yIiwiX2tleSIsImhhc2giLCJyZXMiLCJfb2JqZWN0IiwiYXR0cmlidXRlIiwic3JjIiwiaXMiLCJ3aGF0IiwiaXAiLCJpcDQiLCJpcDYiLCJzbGQiLCJpZG4iLCJyZWxhdGl2ZSIsImhhcyIsIl9wcm90b2NvbCIsIl9wb3J0IiwiX2hvc3RuYW1lIiwic2NoZW1lIiwieCIsIm9yaWdpbiIsImF1dGhvcml0eSIsImhvc3QiLCJ1c2VyaW5mbyIsInJlc291cmNlIiwic3ViZG9tYWluIiwiZG9tYWluIiwic3ViIiwiUmVnRXhwIiwidGxkIiwiZ2V0IiwiUmVmZXJlbmNlRXJyb3IiLCJkaXJlY3RvcnkiLCJmaWxlbmFtZSIsImRlY29kZVBhdGhTZWdtZW50IiwibXV0YXRlZERpcmVjdG9yeSIsIm5vcm1hbGl6ZVBhdGgiLCJzdWZmaXgiLCJzIiwic2VnbWVudCIsInNlcGFyYXRvciIsImFic29sdXRlIiwiRXJyb3IiLCJwb3AiLCJ1bnNoaWZ0Iiwic2VnbWVudENvZGVkIiwicSIsInNldFF1ZXJ5Iiwic2V0U2VhcmNoIiwiYWRkU2VhcmNoIiwicmVtb3ZlU2VhcmNoIiwiaGFzU2VhcmNoIiwibm9ybWFsaXplIiwibm9ybWFsaXplUHJvdG9jb2wiLCJub3JtYWxpemVRdWVyeSIsIm5vcm1hbGl6ZUZyYWdtZW50Iiwibm9ybWFsaXplSG9zdG5hbWUiLCJub3JtYWxpemVQb3J0IiwiYmVzdCIsIl9wYXRoIiwiX3dhc19yZWxhdGl2ZSIsIl9sZWFkaW5nUGFyZW50cyIsIl9wYXJlbnQiLCJfcG9zIiwibm9ybWFsaXplUGF0aG5hbWUiLCJub3JtYWxpemVTZWFyY2giLCJub3JtYWxpemVIYXNoIiwiZCIsInJlYWRhYmxlIiwidXJpIiwidG9Vbmljb2RlIiwicXAiLCJrdiIsInJlc29sdmVkIiwicHJvcGVydGllcyIsImJhc2VkaXIiLCJyZWxhdGl2ZVRvIiwicmVsYXRpdmVQYXJ0cyIsImJhc2VQYXJ0cyIsImNvbW1vbiIsInJlbGF0aXZlUGF0aCIsImJhc2VQYXRoIiwicGFyZW50cyIsImVxdWFscyIsIm9uZV9tYXAiLCJ0d29fbWFwIiwiY2hlY2tlZCIsIm9uZV9xdWVyeSIsInR3b19xdWVyeSIsIldvcmtmbG93IiwiSW1hZ2VTaWduIiwiVHJhY2VzSGFuZGxlciIsIlRyYWNlc1RlbXBsYXRlIiwiSW5zdGFuY2Vmb3JtVGVtcGxhdGUiLCJJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZSIsIkluc3RhbmNlU2lnblRleHQiLCJSZWxhdGVkSW5zdGFuY2VzIiwiUmVsYXRlZFJlY29yZHMiLCJJbnN0YW5jZU1hY3JvIiwiY29udGV4dCIsIlRyYWNlc01hbmFnZXIiLCJpc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyIsImZpZWxkX2Zvcm11bGEiLCJpbmNsdWRlc09waW5pb25GaWVsZCIsImZvcm0iLCJmb3JtX3ZlcnNpb24iLCJfZm9ybV92ZXJzaW9uIiwiZmllbGRfZm9ybXVsYXMiLCJmaWVsZHMiLCJBcnJheSIsIk1ldGVvciIsImlzU2VydmVyIiwidXVmbG93TWFuYWdlciIsImdldEZvcm1WZXJzaW9uIiwiZGIiLCJmb3JtcyIsImZpbmRPbmUiLCJfaWQiLCJmb3JtX3ZlcnNpb25zIiwiZm9yRWFjaCIsImYiLCJyZWYiLCJjb25zb2xlIiwibG9nIiwiZjEiLCJmb3JtdWxhIiwiXyIsInNvbWUiLCJoZWxwZXJzIiwiaW5zdGFuY2VfdGFza3MiLCJDb2xsZWN0aW9uIiwiX3NpbXBsZVNjaGVtYSIsIlNpbXBsZVNjaGVtYSIsImluc3RhbmNlIiwidHJhY2UiLCJpc19maW5pc2hlZCIsInVzZXIiLCJ1c2VyX25hbWUiLCJoYW5kbGVyIiwiaGFuZGxlcl9uYW1lIiwiaGFuZGxlcl9vcmdhbml6YXRpb24iLCJoYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lIiwiaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWUiLCJzdGFydF9kYXRlIiwiRGF0ZSIsImR1ZV9kYXRlIiwiaXNfcmVhZCIsImlzX2Vycm9yIiwidmFsdWVzIiwiZGVhZGxpbmUiLCJyZW1pbmRfZGF0ZSIsInJlbWluZGVkX2NvdW50IiwiTnVtYmVyIiwicmVhZF9kYXRlIiwiZGVzY3JpcHRpb24iLCJtb2RpZmllZCIsIm1vZGlmaWVkX2J5Iiwic2lnbl9zaG93IiwianVkZ2UiLCJuZXh0X3N0ZXBzIiwiZmluaXNoX2RhdGUiLCJjb3N0X3RpbWUiLCJzcGFjZSIsImluc3RhbmNlX25hbWUiLCJzdWJtaXR0ZXIiLCJzdWJtaXR0ZXJfbmFtZSIsImFwcGxpY2FudCIsImFwcGxpY2FudF9uYW1lIiwiYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lIiwic3VibWl0X2RhdGUiLCJmbG93IiwiZmxvd19uYW1lIiwic3RlcCIsInN0ZXBfbmFtZSIsImNhdGVnb3J5X25hbWUiLCJpbnN0YW5jZV9zdGF0ZSIsImRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSIsImZvcndhcmRfZnJvbV9pbnN0YW5jZSIsImtleXdvcmRzIiwiaXNfYXJjaGl2ZWQiLCJjYXRlZ29yeSIsImF1dGhfdG9rZW5zIiwiX2dldExvY2FsZSIsIl9nZXRSZXF1aXJlZEZpZWxkcyIsIl9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyIsIl9nZXRTdGFydFN0ZXBSZXF1aXJlZEZpZWxkcyIsIl9nZXRUZW1wbGF0ZURhdGEiLCJfZ2V0Vmlld0h0bWwiLCJnZXRMaW5rVGV4dCIsIm1hcmtlZCIsInJlcXVpcmUiLCJJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUiLCJpbnN0YW5jZV9hdHRhY2htZW50IiwiYWZTZWxlY3RVc2VyUmVhZCIsImFmRm9ybUdyb3VwUmVhZCIsImFmRm9ybUdyb3VwIiwiY3JlYXRlIiwidGVtcGFsdGVOYW1lIiwic3RlZWRvc0RhdGEiLCJ0ZW1wbGF0ZSIsInRlbXBsYXRlQ29tcGlsZWQiLCJ0ZW1wbGF0ZVJlbmRlckZ1bmN0aW9uIiwiU3BhY2ViYXJzQ29tcGlsZXIiLCJjb21waWxlIiwiaXNCb2R5IiwiZXZhbCIsIlRlbXBsYXRlIiwiQmxhemUiLCJjcmVhdGVJbnN0YW5jZVNpZ25UZXh0IiwiaW5zdGFuY2VTaWduVGV4dENvbXBpbGVkIiwiaW5zdGFuY2VTaWduVGV4dEh0bWwiLCJpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb24iLCJpbnN0YW5jZVNpZ25UZXh0IiwiY3JlYXRlSW1hZ2VTaWduIiwiaW1hZ2VTaWduQ29tcGlsZWQiLCJpbWFnZVNpZ25IdG1sIiwiaW1hZ2VTaWduUmVuZGVyRnVuY3Rpb24iLCJpbWFnZVNpZ24iLCJjcmVhdGVUcmFjZXNIYW5sZGVyIiwidHJhY2VzSGFubGRlckNvbXBpbGVkIiwidHJhY2VzSGFubGRlckh0bWwiLCJ0cmFjZXNIYW5sZGVyUmVuZGVyRnVuY3Rpb24iLCJpbnN0YW5jZV90cmFjZXNfaGFuZGxlciIsImluaXQiLCJpdGVtIiwibGFiZWwiLCJkZXRhaWxfdXJsIiwiU3RlZWRvcyIsImFic29sdXRlVXJsIiwiZ2V0VmFsdWUiLCJmaWVsZCIsImxvY2FsZSIsInV0Y09mZnNldCIsImRhdGUiLCJmaWVsZE9wdGlvbnMiLCJob3VycyIsIm1vbnRoIiwibmFtZUZpZWxkIiwicmVjb3JkcyIsInNlY29uZHMiLCJzZWxlY3RlZE9wdGlvbiIsInNlbGVjdGVkT3B0aW9ucyIsInNwbGl0ZWRWYWx1ZXMiLCJ0MCIsInQxIiwidWlTY2hlbWEiLCJ5ZWFyIiwibiIsIml0ZW1TcGxpdHMiLCJlbmNvZGVVUkkiLCJlcnJvciIsImlzX211bHRpc2VsZWN0IiwiZ2V0UHJvcGVydHkiLCJmdWxsbmFtZSIsIlRBUGkxOG4iLCJfXyIsImZvcm1hdERhdGUiLCJmb3JtYXRUaW1lIiwiaXNfdGV4dGFyZWEiLCJmaW5kIiwiZmlsdGVyIiwiaXNfcGVyY2VudCIsIm51bWJlclRvUGVyY2VudFN0cmluZyIsImRpZ2l0cyIsIm51bWJlclRvU3RyaW5nIiwiaXNDbGllbnQiLCJhdXRoUmVxdWVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhc3luYyIsIm9iamVjdEZpbmQiLCJmaWx0ZXJzIiwiZmlsZU5hbWUiLCJmaWxlUHJldmlld0h0bWwiLCJmaWxlVHlwZSIsImZpbGVVcmwiLCJvcmlnaW5hbCIsIkNyZWF0b3IiLCJnZXRPYmplY3QiLCJyZWZlcmVuY2VfdG8iLCJOQU1FX0ZJRUxEX0tFWSIsInJlZmVyZW5jZV90b19maWVsZCIsImdldE9iamVjdE5hbWVGaWVsZEtleSIsImdldExhYmVsIiwiY29kZSIsImZpbmRQcm9wZXJ0eUJ5UEsiLCJnZXRJbnN0YW5jZUZvcm1WZXJzaW9uIiwiZm9ybV9maWVsZHMiLCJjdXJyZW50Iiwid2hlcmUiLCJoaXN0b3J5cyIsImdldEZsb3dWZXJzaW9uIiwiZmxvd192ZXJzaW9uIiwiZmxvd3MiLCJ2aWV3SHRtbCIsIkFzc2V0cyIsImdldFRleHQiLCJyZWYxIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJyZXYiLCJpc19yZXF1aXJlZCIsInN0ZXBzIiwiZWRpdGFibGVDb2RlIiwic3RhcnRTdGVwIiwia2V5cyIsInBlcm1pc3Npb25zIiwicmVxdWlyZWRGaWVsZHMiLCJpbnRlcnNlY3Rpb24iLCJXb3JrZmxvd01hbmFnZXIiLCJXb3JrZmxvd01hbmFnZXJfZm9ybWF0IiwiZ2V0QXV0b2Zvcm1TY2hlbWFWYWx1ZXMiLCJpbnNuYW1lIiwiaW5zX3N0YXRlIiwic3RhdGUiLCJpbnNfZmluYWxfZGVjaXNpb24iLCJpbnNfY29kZSIsImluc19pc19hcmNoaXZlZCIsImluc19pc19kZWxldGVkIiwiYXBwbGljYW50Q29udGV4dCIsInNlc3Npb25Vc2VySWQiLCJlZGl0YWJsZSIsInN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzIiwicGFzc2luZyIsIm1vbWVudCIsImZvcm1hdCIsImdldEluc3RhbmNlVmlldyIsImJvZHkiLCJpbnN0YW5jZUNvbXBpbGVkIiwiaW5zdGFuY2VSZW5kZXJGdW5jdGlvbiIsImluc3RhbmNlVGVtcGxhdGUiLCJUZW1wbGF0ZU1hbmFnZXIiLCJnZXRUZW1wbGF0ZSIsInRlbXBsYXRlTmFtZSIsImluc3RhbmNlX3JlYWRvbmx5X3ZpZXciLCJ0b0hUTUxXaXRoRGF0YSIsImdldFRyYWNlc1ZpZXciLCJ0cmFjZUNvbXBpbGVkIiwidHJhY2VSZW5kZXJGdW5jdGlvbiIsInRyYWNlc0h0bWwiLCJpbnN0YW5jZV9zdHlsZSIsInRyYWNlX3JlYWRvbmx5X3ZpZXciLCJ0cmFjZXMiLCJnZXRBdHRhY2htZW50VmlldyIsImF0dGFjaG1lbnRDb21waWxlZCIsImF0dGFjaG1lbnRIdG1sIiwiYXR0YWNobWVudFJlbmRlckZ1bmN0aW9uIiwiYXR0YWNobWVudHNfcmVhZG9ubHlfdmlldyIsImdldFJlbGF0ZWRJbnN0YW5jZXNWaWV3IiwicmVsYXRlZEluc3RhbmNlc0NvbXBpbGVkIiwicmVsYXRlZEluc3RhbmNlc0h0bWwiLCJyZWxhdGVkSW5zdGFuY2VzUmVuZGVyRnVuY3Rpb24iLCJyZWxhdGVkX2luc3RhbmNlc192aWV3IiwiZ2V0UmVsYXRlZFJlY29yZHNWaWV3IiwicmVsYXRlZFJlY29yZHNDb21waWxlZCIsInJlbGF0ZWRSZWNvcmRzSHRtbCIsInJlbGF0ZWRSZWNvcmRzUmVuZGVyRnVuY3Rpb24iLCJyZWxhdGVkX3JlY29yZHNfdmlldyIsImdldE9uTG9hZFNjcmlwdCIsImZvcm1fc2NyaXB0IiwiZ2V0SW5zdGFuY2VIdG1sIiwiYWxsQ3NzTGluayIsImF0dGFjaG1lbnQiLCJjcmVhdG9yU2VydmljZSIsImNzc0hyZWYiLCJmb3JtRGVzY3JpcHRpb24iLCJmb3JtRGVzY3JpcHRpb25IdG1sIiwiaHRtbCIsImluc19yZWNvcmRfaWRzIiwiaW5zdGFuY2VCb3hTdHlsZSIsImpxSHJlZiIsIm9uTG9hZFNjcmlwdCIsIm9wZW5GaWxlU2NyaXB0IiwicmVsYXRlZF9pbnN0YW5jZXMiLCJyZWxhdGVkX3JlY29yZHMiLCJzaG93VHJhY2VzQnRuIiwic2hvd1RyYWNlc1NjcmlwdCIsInRyYWNlQ2hlY2siLCJ3aWR0aCIsInNldHRpbmdzIiwid2Vic2VydmljZXMiLCJjcmVhdG9yIiwicmVjb3JkX2lkcyIsImlzTW9iaWxlIiwic2hvd1RyYWNlIiwiZmluYWxfZGVjaXNpb24iLCJzaG93QXR0YWNobWVudHMiLCJpc0VtcHR5IiwidGFnZ2VyIiwic3R5bGVzIiwicGx1Z2lucyIsImFkZF9zdHlsZXMiLCJmb3JtSWQiLCJpbnN0YW5jZV90aXRsZSIsInBhZ2VUaXRsZSIsInBhZ2VUaXRsZVRyQ2xhc3MiLCJ2YWwiLCJDb3JlRm9ybSIsInBhZ2VUaXRsZUZpZWxkTmFtZSIsImhhbmRsZVRhYmxlVGVtcGxhdGUiLCJfZXhwb3J0IiwidGFibGVfZmllbGRzIiwidGFibGVfZmllbGQiLCJmaWVsZF9wZXJtaXNzaW9uIiwicHVyZUNvZGUiLCJyZXF1aXJlZCIsInRpdGxlX3Blcm1pc3Npb24iLCJyZW1vdmVTcGVjaWFsQ2hhcmFjdGVyIiwiaXNPcGluaW9uRmllbGQiLCJ0cl9zdGFydCIsInRkX2NvbHNwYW4iLCJ0cl9lbmQiLCJpbmNsdWRlcyIsInBlcm1pc3Npb24iLCJfdGVtcGxhdGUiLCJ0YWJsZSIsIl90ZW1wbGF0ZUhlbHBzIiwic3RlZWRvc19pbnN0YW5jZSIsImdldEluc3RhbmNlIiwiYXR0cyIsImlkIiwic3R5bGUiLCJkaXNhYmxlZCIsImluc3RhbmNlSWQiLCJmb3JtX3R5cGVzIiwiQXBwcm92ZU1hbmFnZXIiLCJpc1JlYWRPbmx5Iiwic3RlZWRvc19mb3JtIiwiaW5uZXJzdWJmb3JtQ29udGV4dCIsImRvY192YWx1ZXMiLCJTZXNzaW9uIiwiYSIsImIiLCJnZXRBdXRvZm9ybVNjaGVtYSIsImluc3RhbmNlX2JveF9zdHlsZSIsImJveCIsImlucyIsInByaW50X3RlbXBsYXRlIiwiaW5zdGFuY2VfdGVtcGxhdGUiLCJTdGVlZG9zVGFibGUiLCJjaGVja0l0ZW0iLCJpdGVtX2luZGV4IiwiZmllbGRPYmoiLCJnZXRGaWVsZCIsImZpZWxkVmFsIiwiZ2V0SXRlbU1vZGFsVmFsdWUiLCJzZl9uYW1lIiwic2ZpZWxkcyIsInNmIiwiSW5zdGFuY2VNYW5hZ2VyIiwiY2hlY2tGb3JtRmllbGRWYWx1ZSIsIiQiLCJzZXRUYWJsZUl0ZW1WYWx1ZSIsIml0ZW1fdmFsdWUiLCJ0YWJsZVZhbHVlIiwiZ2V0VGFibGVWYWx1ZSIsImdldFRhYmxlSXRlbVZhbHVlIiwicmVtb3ZlVGFibGVJdGVtIiwicmVtb3ZlZCIsInNldFRhYmxlVmFsdWUiLCJnZXRWYWxpZFZhbHVlIiwidmFsaWRWYWx1ZSIsImhhbmRsZURhdGEiLCJpbnN0YW5jZUZpZWxkcyIsImdldEluc3RhbmNlRmllbGRzIiwiZ2V0TW9kYWxEYXRhIiwiRm9ybV9mb3JtdWxhIiwiZ2V0Rm9ybXVsYUZpZWxkVmFyaWFibGUiLCJBdXRvRm9ybSIsImdldEZvcm1WYWx1ZXMiLCJpbnNlcnREb2MiLCJhZGRJdGVtIiwiX2l0ZW1fdmFsdWUiLCJnZXRLZXlzIiwiYXBwZW5kIiwiZ2V0VHIiLCJ1cGRhdGVJdGVtIiwidGRzIiwiZ2V0UmVtb3ZlVGQiLCJzZmllbGQiLCJnZXRUZCIsImVtcHR5IiwicnVuRm9ybXVsYSIsInJlbW92ZUl0ZW0iLCJoaWRlIiwic2hvd01vZGFsIiwibWV0aG9kIiwibW9kYWxEYXRhIiwic2V0VGltZW91dCIsIk1vZGFsIiwic2hvdyIsImdldEN1cnJlbnREYXRhRm9yRm9ybSIsInNzIiwiZ2V0Rm9ybVNjaGVtYSIsInNjaGVtYSIsIm9iamVjdEtleXMiLCJfbWFrZUdlbmVyaWMiLCJnZXRUaGVhZCIsImlzT2JqZWN0IiwidGhlYWQiLCJ0cnMiLCJzZl9sZW5ndGgiLCJ3aWRlX2ZpZWxkcyIsImZpbHRlclByb3BlcnR5IiwiaXNfd2lkZSIsImdldFRib2R5Iiwic2ZpZWxkc0VkaXRhYmxlIiwidGJvZHkiLCJ0ciIsInRkIiwidGRfdmFsdWUiLCJnZXRURFZhbHVlIiwidmlldyIsIkNGRGF0YU1hbmFnZXIiLCJnZXRGb3JtdWxhU3BhY2VVc2VycyIsInUiLCJnZXRGb3JtdWxhT3JnYW5pemF0aW9ucyIsIm8iLCJnZXRGb3JtdWxhT3JnYW5pemF0aW9uIiwicGx1Y2siLCJhZGRJbnB1dFR5cGUiLCJ2YWx1ZU91dCIsInZhbHVlQ29udmVydGVycyIsInN0cmluZ1RvU3RyaW5nQXJyYXkiLCJzdHJpbmdUb051bWJlciIsInN0cmluZ1RvTnVtYmVyQXJyYXkiLCJzdHJpbmdUb0Jvb2xlYW4iLCJzdHJpbmdUb0Jvb2xlYW5BcnJheSIsInN0cmluZ1RvRGF0ZSIsInN0cmluZ1RvRGF0ZUFycmF5IiwiY29udGV4dEFkanVzdCIsIm1heGxlbmd0aCIsImFmVGFibGUiLCJldmVudHMiLCJldmVudCIsIm5ld19pdGVtX2luZGV4IiwiY3VycmVudFRhcmdldCIsImRhdGFzZXQiLCJzZXQiLCJyZW5kZXJlZCIsInN0ciIsImFkZEl0ZW1UciIsImdldEN1cnJlbnRTdGVwIiwic3RlcF90eXBlIiwiY2NIYXNFZGl0UGVybWlzc2lvbiIsImF1dG9ydW4iLCJjdXJyZW50RGF0YSIsInNwYWNlVXNlclNpZ24iLCJ1c2VySWQiLCJzcGFjZV91c2VyX3NpZ25zIiwiaW1hZ2VVUkwiLCJzaWduIiwic2hvd1NpZ25JbWFnZSIsInRyYWNlU2hvd1NpZ25JbWFnZSIsIm9iamVjdFVybCIsIm9iamVjdF9uYW1lIiwicmVjb3JkX2lkIiwiYXBwX2lkIiwiZ2V0T2JqZWN0VXJsIiwidW5lbXB0eSIsInVuZXF1YWxzIiwiaW5jbHVkZSIsInJlZjIiLCJyZWYzIiwiZ2V0SW5zdGFuY2VGbG93VmVyc2lvbiIsImFwcHJvdmVzIiwicmVmNCIsImFwcHJvdmUiLCJqdWRnZV9uYW1lIiwib3Bpbmlvbl9maWVsZHNfY29kZSIsInNpZ25fZmllbGRfY29kZSIsImFmdGVyX2ZpZWxkIiwiYmVmb3JlX2ZpZWxkIiwicHJlX2ZpZWxkcyIsInByZV93aWRlX2ZpZWxkcyIsInNvcnRfYXBwcm92ZSIsIm9yZGVyIiwicDEiLCJwMiIsIl9wMSIsIl9wMiIsImdldFRpbWUiLCJfdCIsImlzVGV4dGFyZWEiLCJnZXRDZkNsYXNzIiwiZ2V0VGFibGVUaGVhZCIsImdldFRhYmxlQm9keSIsInNob3dMYWJlbCIsInRlbXBsYXRlRGF0YSIsImdldE9waW5pb25GaWVsZFN0ZXBzTmFtZSIsInRvcF9rZXl3b3JkcyIsImZvbzEiLCJvcGluaW9uRmllbGRzIiwiZm9vIiwianNvbl9mb3JtdWxhIiwiczEiLCJlcnJvcjEiLCJ5aWppYW5sYW4iLCJzdGVwTmFtZSIsImltYWdlX3NpZ24iLCJvbmx5X2NjX29waW5pb24iLCJvbmx5X2NjIiwiZGVmYXVsdF9kZXNjcmlwdGlvbiIsIm9ubHlfaGFuZGxlciIsInNob3dDQ09waW5pb24iLCJtYXJrRG93blRvSHRtbCIsIm1hcmtEb3duU3RyaW5nIiwiTnBtIiwiU3BhY2ViYXJzIiwiU2FmZVN0cmluZyIsImZfbGFiZWwiLCJ0aGF0IiwiaXNTZWN0aW9uIiwicmVnaXN0ZXJIZWxwZXIiLCJpbnNfYXR0YWNoX2Rvd25sb2FkX3VybCIsImdldFBlcm1pc3Npb25zIiwiaW5zdGFuY2Vmb3JtQ2hhbmdlRXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsIm9wZW5XaW5kb3ciLCJ0YXJnZXQiLCJvbkNyZWF0ZWQiLCJjb21waWxlZCIsImluc3RhbmNlQ3VzdG9tVGVtcGxhdGUiLCJpbnN0YW5jZVZpZXciLCJyZW5kZXJGdW5jdGlvbiIsIlZpZXciLCJpbnN0YW5jZV9jdXN0b21fdGVtcGxhdGUiLCJvblJlbmRlcmVkIiwiY3VycmVudEFwcHJvdmUiLCJjdXJyZW50U3RlcCIsImZvcm11bGFfZmllbGRzIiwiaW5zdGFuY2VOdW1iZXJGaWVsZHMiLCJzZXRJbnN0YW5jZUZvcm1BcHBsaWNhbnQiLCJuZXh0U3RlcHMiLCJuZXh0U3RlcFVzZXJzIiwiSW5zdGFuY2VFdmVudCIsImluaXRFdmVudHMiLCJnZXRDdXJyZW50QXBwcm92ZSIsImVhY2giLCJlbGVtZW50Iiwic2NoZW1hS2V5IiwidG9hc3RyIiwicmVhc29uIiwiZ2V0RmllbGRWYWx1ZSIsIkluc3RhbmNlTnVtYmVyUnVsZXMiLCJpbnN0YW5jZU51bWJlckJ1aWxkZXIiLCJ0cmlnZ2VyIiwicnVuIiwic2hvd01haW5UaXRsZSIsIndvcmtmbG93TWFpbkF0dGFjaFRpdGxlIiwiZW5hYmxlZF9hZGRfbWFpbl9hdHRhY2htZW50IiwiY3VycmVudF9zdGVwIiwiY3VycmVudFRyYWNlIiwiZ2V0Q3VycmVudFRyYWNlIiwibWFpbl9hdHRhY2hfY291bnQiLCJjZnMiLCJpbnN0YW5jZXMiLCJjb3VudCIsImRpc3RyaWJ1dGVfbWFpbl9hdHRhY2hfY291bnQiLCJzdGFydF9zdGVwIiwiZ2V0U3RhcnRTdGVwIiwiY2FuX2VkaXRfbWFpbl9hdHRhY2giLCJlbmFibGVkX2VkaXRfbm9ybWFsX2F0dGFjaG1lbnQiLCJnZXRGbG93IiwidXBsb2FkX2FmdGVyX2JlaW5nX2Rpc3RyaWJ1dGVkIiwiaXNDQyIsImdldENDU3RlcCIsImNhbl9lZGl0X25vcm1hbF9hdHRhY2giLCJtYWluX2F0dGFjaG1lbnQiLCJtYWluX2F0dGFjaCIsIm5vcm1hbF9hdHRhY2htZW50cyIsInNlbGVjdG9yIiwiJG5lIiwiZGZpcyIsImRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMiLCIkaW4iLCJkaXN0cmlidXRlX21haW4iLCJmaXJzdFZlcnNpb25NYWluIiwibWV0YWRhdGEiLCJwYXJlbnQiLCJhdHRhY2htZW50VXBsb2FkZWRBdCIsInVwbG9hZGVkQXQiLCJmaXJzdFZlcnNpb24iLCJzb3J0QnkiLCJpbnN0YW5jZUlkcyIsImF0dGFjaG1lbnRzX2NvdW50IiwiZmxvd19maWxlcyIsImZpbGVzIiwiaXNEcmFmdEFuZEZsb3dmaWxlc0V4aXN0IiwiY29tcGFjdCIsImF0dGFjaG1lbnRzIiwiJG9yIiwiZmV0Y2giLCJteUFwcHJvdmUiLCJteVRyYWNlIiwiaXNJbmJveCIsImRlZmF1bHREZXNjcmlwdGlvbiIsImFwcHJvdmVfc29ydCIsImFwcHJvdmVzR3JvdXAiLCJhcHByb3Zlc19zb3J0ZWQiLCJjb21wbGV0ZWRfZGF0ZSIsImhhc05leHQiLCJoYXZlRGVzY3JpcHRpb25BcHByb3ZlIiwiaXNfY29tcGxldGVkIiwibGFzdCIsInRvcF9hcHByb3ZlcyIsInVuaW9uIiwidG9wX2FwcHJvdmUiLCJncm91cEJ5IiwiaGFuZGxlckFwcHJvdmVzIiwiZGVzY3JpcHRpb25BcHByb3ZlcyIsIndvcmtmbG93Iiwic2hvd0JsYW5rQXBwcm92ZURlc2NyaXB0aW9uIiwiX2Rpc3BsYXkiLCJpc015QXBwcm92ZSIsIm15QXBwcm92ZURlc2NyaXB0aW9uIiwiYXBwcm92ZUlkIiwibm93IiwiaXNPcGluaW9uT2ZGaWVsZCIsImltYWdlU2lnbkRhdGEiLCJnZXRMYXN0U2lnbkFwcHJvdmUiLCJnZXRIYW5kbGVyU2lnblNob3dBcHByb3ZlcyIsImxhc3RNeUFwcHJvdmVEZXNjcmlwdGlvbiIsInNob3dBcHByb3ZlIiwianVkZ2VfZGVzY3JpcHRpb24iLCJpc19hcHByb3ZlZCIsImlzX3JlamVjdGVkIiwiaXNfcmVhZGVkIiwiYWRkQ2xhc3MiLCJkYXRlRm9ybWF0IiwiZ2V0RnVsbFllYXIiLCJnZXRTdGVwTmFtZSIsInN0ZXBJZCIsImdldEluc3RhbmNlU3RlcCIsInNob3dEZWxldGVCdXR0b24iLCJhcHByb3ZlZCIsImZyb21fdXNlciIsImlzU2hvd01vZGlmaWNhdGlvbkJ1dHRvbiIsImFwcHJvdmVfYWRtaW5zIiwiaXNTaG93IiwiY29udGFpbnMiLCJpc0VkaXRpbmciLCJpc19lZGl0aW5nIiwiaXNTaG93RGVzY3JpcHRpb24iLCJnZXRBcHByb3ZlU3RhdHVzSWNvbiIsImFwcHJvdmVKdWRnZSIsImF1dG9TdWJtaXR0ZWQiLCJhcHByb3ZlU3RhdHVzSWNvbiIsImdldEFwcHJvdmVTdGF0dXNUZXh0IiwiYXBwcm92ZVN0YXR1c1RleHQiLCJnZXRBcHByb3ZlSnVkZ2VDbGFzcyIsImlzRm9yd2FyZCIsInNob3dGb3J3YXJkRGVsZXRlQnV0dG9uIiwiZm9yd2FyZF9pbnN0YW5jZSIsImlzRGlzdHJpYnV0ZSIsInNob3dEaXN0cmlidXRlRGVsZXRlQnV0dG9uIiwiaGFzRmxvd0FkbWluUGVybWlzc2lvbiIsImZpbmlzaERhdGVTY2hlbWEiLCJpc0FuZHJvaWRPcklPUyIsImF1dG9mb3JtIiwib3B0aW9uYWwiLCJyZWFkb25seSIsImRhdGVUaW1lUGlja2VyT3B0aW9ucyIsImlnbm9yZVJlYWRvbmx5Iiwid2lkZ2V0UG9zaXRpb25pbmciLCJob3Jpem9udGFsIiwiZmluaXNoRGF0ZVZhbHVlcyIsInNob3dUcmFjZXNWaWV3Iiwic2hvd19tb2RhbF90cmFjZXNfbGlzdCIsInNwYWNlX3NldHRpbmdzIiwiZ2V0SW5zdGFuY2VTdGF0ZVRleHQiLCJpbnN0YW5jZV9pZCIsImdldEluc3RhbmNlU3RhdGVDb2xvciIsImNsYSIsImZpcnN0VHJhY2UiLCJsYXN0X2Rpc3RyaWJ1dGVfZnJvbSIsImRpc19pbmZvIiwiJGV4aXN0cyIsImNyZWF0ZWQiLCJjcmVhdGVkX2J5IiwiVVVmbG93X2FwaSIsImdldE5hbWVGb3JVc2VyIiwidXNlcnMiLCJmcm9tX3VzZXJfbmFtZSIsImlzQ0NPckRpc3RyaWJ1dGVPckZvcndhcmRUZXJtaW5hdGVkIiwianVkZ2VUZXJtaW5hdGVkIiwiaW5zdGFuY2VFeGlzdHMiLCJhZ2VudERlc2NyaXB0aW9uIiwidXNlck5hbWUiLCJ0cmFjZU5hbWUiLCJ0cmFjZUlkIiwiaGFuZGxlckRvYyIsImhhbmRsZXJJZCIsInVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm8iLCJnZXRDb250YWN0SW5mb0ZvclVzZXIiLCJzdG9wUHJvcGFnYXRpb24iLCJjYWxsaW5nIiwiZXJyIiwicmVtb3ZlQ2xhc3MiLCJzdWNjZXNzIiwiYWxsb3dNdWx0aXBsZSIsImNsb3Nlc3QiLCJ0YXJnZXRfdXNlcl9pZCIsIm9wZW5TYWZlT2JqZWN0VXJsIiwiZm9yd2FyZF9zcGFjZSIsImZvcndhcmRzcGFjZSIsImZvcndhcmRpbnN0YW5jZSIsIlRyYWNrZXIiLCJhZnRlckZsdXNoIiwib24iLCJzY3JvbGxUb3AiLCJmaW5pc2hfaW5wdXQiLCJvcGluaW9uX2lucHV0Iiwic2hvd1JlbGF0ZWRJbnN0YWNlcyIsInJlbGF0ZWRfaW5zdGFjZXMiLCJyZWxhdGVkX2luc3RhY2VfdXJsIiwiaXNDb3Jkb3ZhIiwic2hvd19kZWxldGUiLCJzaG93UmVsYXRlZFJlY29yZHMiLCJyZWxhdGVkUmVjb3JkVXJsIiwib2JqY2V0TmFtZSIsImlkcyIsInByb2Nlc3MiLCJlbnYiLCJDUkVBVE9SX05PREVfRU5WIiwiSnNvblJvdXRlcyIsImFkZCIsInJlcSIsIm5leHQiLCJoYXNoRGF0YSIsImFjdGlvbiIsInRvX3VzZXJzIiwic2VuZFJlc3VsdCIsInN0YWNrIiwiZXJyb3JzIiwiZXJyb3JNZXNzYWdlIiwibWVzc2FnZSIsIndvcmtmbG93TWV0aG9kcyIsIm1ldGhvZHMiLCJzZXRfaW5zdGFuY2Vfc3RlcF9hcHByb3ZlIiwiaW5zX2lkIiwic3RlcF9hcHByb3ZlIiwic3RlcHNBcHByb3Zlc09wdGlvbnMiLCJhcHBseSIsInNldF9pbnN0YW5jZV9za2lwX3N0ZXBzIiwiZ2V0X2luc3RhbmNlX2RhdGEiLCJmb3JtQ2FjaGVkIiwiZmxvd0NhY2hlZCIsImRyYWZ0X3NhdmVfaW5zdGFuY2UiLCJpbmJveF9zYXZlX2luc3RhbmNlIiwiY2NfZG8iLCJjY191c2VyX2lkcyIsImNjX3JlYWQiLCJjY19zdWJtaXQiLCJjY19yZW1vdmUiLCJiYXRjaF9jYW5jZWxfY2MiLCJhcHByb3ZlX2lkcyIsImNjX3NhdmUiLCJzcGFjZV9pZCIsImZsb3dfaWQiLCJoYXNTYXZlSW5zdGFuY2VUb0F0dGFjaG1lbnQiLCJpc0ZvcndhcmRBdHRhY2htZW50cyIsInNlbGVjdGVkVXNlcnMiLCJhY3Rpb25fdHlwZSIsInJlbGF0ZWQiLCJmcm9tX2FwcHJvdmVfaWQiLCJmb3J3YXJkX3JlbW92ZSIsInRyYWNlX2lkIiwiYXBwcm92ZV9pZCIsImNhbmNlbERpc3RyaWJ1dGUiLCJjZnNfaW5zdGFuY2VzX3JlbW92ZSIsImZpbGVfaWQiLCJjZnNfaW5zdGFuY2VzX3NldF9jdXJyZW50IiwiY2ZzX2luc3RhbmNlc19sb2NrIiwidXNlcl9pZCIsImNmc19pbnN0YW5jZXNfdW5sb2NrIiwiZG93bmxvYWRfc3BhY2VfaW5zdGFuY2VfYXR0YWNobWVudHNfdG9fZGlzayIsInNwYWNlSWQiLCJjZnNSZWNvcmRJZHMiLCJzZXRfYXBwcm92ZV9oYXZlX3JlYWQiLCJjaGFuZ2VfYXBwcm92ZV9pbmZvIiwidXBkYXRlX2FwcHJvdmVfc2lnbiIsInNpZ25fdHlwZSIsImxhc3RTaWduQXBwcm92ZSIsInVwZGF0ZV9zaWduX3Nob3ciLCJvYmpzIiwibXlBcHByb3ZlX2lkIiwiaW5zdGFuY2VfcmV0dXJuIiwiaW5zdGFuY2VfcmVtaW5kIiwicmVtaW5kX3VzZXJzIiwicmVtaW5kX2NvdW50IiwicmVtaW5kX2RlYWRsaW5lIiwiYWN0aW9uX3R5cGVzIiwibmV4dF9zdGVwX3VzZXJzX25vdF9mb3VuZCIsImRlYWxfdHlwZSIsInBhcmFtcyIsIl9ldmFsIiwiY2hlY2tfbWFpbl9hdHRhY2giLCJyZW1vdmVfcmVsYXRlZCIsInJlX2luc19pZCIsInVwZGF0ZV9pbnN0YW5jZV9yZWxhdGVkIiwidXBkYXRlRmxvd1Bvc2l0aW9uIiwidXBkYXRlRmxvd1JvbGUiLCJzdGFydF9mbG93IiwiZmxvd0lkIiwiZ2V0X2luc3RhbmNlX3RyYWNlcyIsImNhdGVnb3J5SWQiLCJmbG93SWRzIiwiZ2V0X2JhdGNoX2luc3RhbmNlcyIsImdldF9iYXRjaF9pbnN0YW5jZXNfY291bnQiLCJnZXRfbXlfYXBwcm92ZXMiLCJjaGFuZ2VfZmxvd19zdGF0ZSIsImhpZGVfaW5zdGFuY2UiLCJpbnNJZCIsImlzX2hpZGRlbiIsImdldEluc3RhbmNlVmFsdWVzIiwiQ29va2llcyIsImdldEluc3RhbmNlUmVhZE9ubHkiLCJfaGFzUGVybWlzc2lvbiIsIl9sb2NhbGUiLCJfcGFyZW50X2luc3RhbmNlcyIsImRhdGFCdWYiLCJoaWRlX3RyYWNlcyIsInNwYWNlVXNlckNvdW50IiwiZ2V0QVBJTG9naW5Vc2VyIiwiYWNjZXNzX3Rva2VuIiwiZ2V0VXNlcklkRnJvbUFjY2Vzc1Rva2VuIiwic3BhY2VzIiwic3BhY2VfdXNlcnMiLCJoYXNJbnN0YW5jZVBlcm1pc3Npb25zIiwiX3BhcmVudF9pZCIsIl9wYXJlbnRfaW5zIiwiY2hhcnNldCIsIkJ1ZmZlciIsInNldEhlYWRlciIsInN0YXR1c0NvZGUiLCJyZXRfc3luY190b2tlbiIsInNwYWNlVXNlciIsInNwYWNlVXNlck9yZ2FuaXphdGlvbnMiLCJzeW5jX3Rva2VuIiwiQVBJQXV0aGVudGljYXRpb25DaGVjayIsImhlYWRlcnMiLCJpc1NwYWNlQWRtaW4iLCJvcmdhbml6YXRpb25zIiwiY2FuTW9uaXRvciIsImNhbkFkbWluIiwiJGd0IiwiJG5pbiIsImluYm94X3VlcnMiLCJjY191c2VycyIsIm91dGJveF91c2VycyIsInNraXAiLCJsaW1pdCIsImNvcGllcyIsImFsbENzcyIsIldlYkFwcCIsImdldFJlZnJlc2hhYmxlQXNzZXRzIiwiY3NzIiwicm9vdFVybCIsIl9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18iLCJST09UX1VSTF9QQVRIX1BSRUZJWCIsIlJPT1RfVVJMIiwiZW5kc1dpdGgiLCJoIiwiZyIsIm0iLCJrIiwiZ2V0RWFjaCIsInVuaXEiLCJtaXhpbiIsImRlc3QiLCJoYW5kZXJVc2VyT2JqZWN0Iiwib3JnYW5pemF0aW9uIiwiaHIiLCJzb3J0X25vIiwibW9iaWxlIiwid29ya19waG9uZSIsInBvc2l0aW9uIiwidXNlclJvbGVzIiwicm9sZXMiLCJoYW5kZXJPcmdPYmplY3QiLCJvcmciLCJpbml0X2Zvcm11bGFfdmFsdWVzIiwiYXV0b0Zvcm1Eb2MiLCJhcHByb3ZlciIsIl9fdmFsdWVzIiwidGFibGVGaWVsZHMiLCJ0YWJsZVZhbHVlcyIsImZvcm11bGFUYWJsZVZhbHVlcyIsIl9fdGFibGVWYWx1ZXMiLCJ0YWJsZWZpZWxkIiwiZ2V0Rm9ybXVsYVVzZXJPYmplY3RzIiwiZ2V0Rm9ybXVsYU9yZ09iamVjdHMiLCJnZXRGb3JtdWxhVXNlck9iamVjdCIsInB1Ymxpc2giLCJjaGVjayIsInJlYWR5IiwiY2F0ZWdvcmllcyIsImFwcCIsImZsb3dfcG9zaXRpb25zIiwicm9sZSIsInB1Ymxpc2hDb21wb3NpdGUiLCJ0YWJsZU5hbWUiLCJNYXRjaCIsIk9wdGlvbmFsIiwidW5ibG9jayIsImNoaWxkcmVuIiwiZmxvd19yb2xlcyIsImNyZWF0ZVRlbXBsYXRlRm9ybUFuZEZsb3ciLCJwZXJtcyIsImNvbXBhbnlfaWQiLCJkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzIiwiZGlzdHJpYnV0ZV90b19zZWxmIiwiZW5hYmxlX2FtaXNmb3JtIiwidmVyc2lvbklkIiwiaGFuZGxlIiwic2VsZiIsImxhdGVzdCIsIm9ic2VydmVDaGFuZ2VzIiwiY2hhbmdlZCIsImFkZGVkIiwib25TdG9wIiwic3RvcCIsImZsb3dfaWRzIiwiZGlzdHJpYnV0ZV9lbmRfbm90aWZpY2F0aW9uIiwiYWxsb3dfc2VsZWN0X3N0ZXAiLCJhbWlzX3NjaGVtYSIsImdldE1pbmlJbnN0YW5jZSIsImdldE15YXBwcm92ZU1vZGlmaWVkIiwiaW5zdGFuY2VfZmllbGRzXzAiLCJtaW5pQXBwcm92ZUZpZWxkcyIsIm5lZWRDaGFuZ2UiLCJ0cmlnZ2VyQ2hhbmdlRmllbGRzIiwidHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlcyIsIm15QXBwcm92ZU1vZGlmaWVkcyIsIl9pbnN0YW5jZUlkIiwiX3RyYWNlIiwiY2hhbmdlRmllbGRzIiwiX2NoYW5nZSIsIl9yZXYiLCJfbXlfYXBwcm92ZV9tb2RpZmllZHMiLCJpc0VxdWFsIiwiZ2V0SW5zdGFuY2VUcmFjZXMiLCJfaW5zSWQiLCJpbmJveF91c2VycyIsImFzeW5jTGFzdEZpbmlzaGVkQXBwcm92ZSIsImxhc3RGaW5pc2hlZEFwcHJvdmVBZ2dyZWdhdGUiLCJpbnN0YW5jZWlkIiwiZGF0YU1hcCIsIm9wZXJhdGlvbiIsInJhd0NvbGxlY3Rpb24iLCJhZ2dyZWdhdGUiLCJ0b0FycmF5IiwiZG9jIiwiaXNGdW5jdGlvbiIsIndyYXBBc3luYyIsImdldE15QXBwcm92ZSIsImdldE15TGFzdEZpbmlzaGVkQXBwcm92ZSIsImdldFN0ZXBDdXJyZW50TmFtZSIsIm5vdEZpbmlzaGVkVHJhY2VzIiwiYWdlbnQiLCJzdGVwQ3VycmVudE5hbWUiLCIkc2xpY2UiLCJteUxhc3RGaW5pc2hlZEFwcHJvdmUiLCJhZ2VudF91c2VyX25hbWUiLCJteV9maW5pc2hfZGF0ZSIsImlzX2NjIiwiY2NfY291bnQiLCJ0YWJ1bGFyTmFtZSIsImluc3RhbmNlX2lkcyIsInJlbGF0ZWRfaW5zdGFuY2VfaWRzIiwiX2FzeW5jX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGUiLCJfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSIsIl9pdGVtcyIsIiRtYXRjaCIsIiRncm91cCIsIiRzdW0iLCJfY2hhbmdlRGF0YSIsIl9mbG93c0RhdGEiLCJfaW5pdCIsImRhdGFJdGVtIiwiZmxvd19pbnN0YW5jZSIsIm9ic2VydmUiLCJnZXRDb2xsZWN0aW9uIiwid29ya2Zsb3dUZW1wbGF0ZSIsInN0YXJ0dXAiLCJhYnNvbHV0ZV9wYXRoX2NuIiwiYWJzb2x1dGVfcGF0aF91cyIsImZpbGVzTGlzdF9jbiIsImZpbGVzTGlzdF91cyIsImZzIiwibWltZSIsInBhdGhfY24iLCJwYXRoX3VzIiwicmVhZEZpbGVMaXN0IiwicGF0aERpciIsImZpbGVzTGlzdCIsInJlYWRkaXJTeW5jIiwic3RhdCIsInN0YXRTeW5jIiwiaXNEaXJlY3RvcnkiLCJ3b3JrZmxvd1RlbXBsYXRlcyIsInJlc29sdmUiLCJleGlzdHNTeW5jIiwiZmlsZSIsInJlYWRGaWxlU3luYyIsImdvX25leHQiLCJydWxlIiwic2NoZWR1bGUiLCJjcm9uIiwiYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uIiwic2NoZWR1bGVKb2IiLCJiaW5kRW52aXJvbm1lbnQiLCJ0aW1lIiwicHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzIiwidXBkYXRlIiwiZW5hYmxlZCIsImVuZF90aW1lIiwiJGx0ZSIsIiRzZXQiLCJtdWx0aSIsInRpbWVFbmQiLCJ0aW1lb3V0X2F1dG9fc3VibWl0IiwidGltZW91dEF1dG9TdWJtaXQiLCJUYWJ1bGFyVGFibGVzIiwicmVsYXRlZF9pbnN0YW5jZXNfdGFidWxhciIsIlRhYnVsYXIiLCJUYWJsZSIsImNvbGxlY3Rpb24iLCJjb2x1bW5zIiwidGl0bGUiLCJvcmRlcmFibGUiLCJyZW5kZXIiLCJpbnB1dCIsInN0ZXBfY3VycmVudF9uYW1lIiwiY3VycmVudF9zdGVwX25hbWUiLCJkb20iLCJsZW5ndGhDaGFuZ2UiLCJleHRyYUZpZWxkcyIsInBhZ2VMZW5ndGgiLCJpbmZvIiwic2VhcmNoaW5nIiwicmVzcG9uc2l2ZSIsImRldGFpbHMiLCJhdXRvV2lkdGgiLCJjaGFuZ2VTZWxlY3RvciIsImN1clNwYWNlVXNlciIsIiRhbmQiLCJhZG1pbnMiLCJmbCIsImV4dGVuZCIsIkdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zIiwiX2dldF9pbmJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zIiwiX2dldF9vdXRib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyIsIl9oYW5kbGVMaXN0RmllbGRzIiwiaW5zdGFuY2VUYXNrc0xpc3RUYWJsZVRhYnVsYXIiLCJpbnN0YW5jZXNMaXN0VGFibGVUYWJ1bGFyIiwibmV3SW5zdGFuY2VzTGlzdFRhYnVsYXIiLCJ1cGRhdGVUYWJ1bGFyVGl0bGUiLCJzdWJzIiwiU3Vic01hbmFnZXIiLCJpbnNfZmllbGRzIiwicHViIiwib25VbmxvYWQiLCJpbnN0YW5jZV9saXN0IiwiX3RhYmxlQ29sdW1ucyIsImRyYXdDYWxsYmFjayIsImVsbGlwc2lzTGluayIsImVtcHR5VGQiLCJjb2xTcGFuIiwiaXNQYWQiLCJwZXJmZWN0U2Nyb2xsYmFyIiwib0luc3RhbmNlIiwiYXR0ciIsImNsaWNrIiwiZ29QYWdlIiwiaGVpZ2h0IiwicGFnZXMiLCJjZWlsIiwiZm5SZWNvcmRzRGlzcGxheSIsIl9pRGlzcGxheUxlbmd0aCIsIkRhdGFUYWJsZSIsInBhZ2UiLCJkcmF3IiwiYmx1ciIsImN1cnJlbnRQYWdlIiwia2V5ZG93biIsImtleUNvZGUiLCJjcmVhdGVkUm93Iiwicm93IiwiZGF0YUluZGV4IiwiRmxvd1JvdXRlciIsInNldEF0dHJpYnV0ZSIsImFnZW50X3ZpZXciLCJjY192aWV3IiwiaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyIsIm1vZGlmaWVkRnJvbU5vdyIsIm1vZGlmaWVkU3RyaW5nIiwicHJpb3JpdHlJY29uIiwicHJpb3JpdHlJY29uQ2xhc3MiLCJwcmlvcml0eVZhbHVlIiwic3RlcF9jdXJyZW50X25hbWVfdmlldyIsInVucmVhZCIsIm1vbWVudFJlYWN0aXZlRnJvbU5vdyIsInByaW9yaXR5IiwidmlzaWJsZSIsImNjX3RhZyIsInJlY29yZF9uZWVkIiwibGVuZ3RoTWVudSIsInNwYWNlX3VzZXIiLCJwYWdpbmdUeXBlIiwiaXNfbGlzdF9kaXNwbGF5IiwiaW5ib3hfaW5zdGFuY2VzIiwib3V0Ym94X2luc3RhbmNlcyIsImdldFNvcnQiLCJmbG93SW5zdGFuY2VzIiwiUmVhY3RpdmVWYXIiLCJfY2hhbmdlT3JkZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFJQSxnQkFBSjtBQUFxQkMsTUFBTSxDQUFDQyxJQUFQLENBQVksb0NBQVosRUFBaUQ7QUFBQ0Ysa0JBQWdCLENBQUNHLENBQUQsRUFBRztBQUFDSCxvQkFBZ0IsR0FBQ0csQ0FBakI7QUFBbUI7O0FBQXhDLENBQWpELEVBQTJGLENBQTNGO0FBQ3JCSCxnQkFBZ0IsQ0FBQztBQUNoQixtQkFBaUIsUUFERDtBQUVoQixZQUFVO0FBRk0sQ0FBRCxFQUdiLGtCQUhhLENBQWhCLEM7Ozs7Ozs7Ozs7OztBQ0RBOzs7Ozs7Ozs7Ozs7O0FBYUMsYUFBVUksSUFBVixFQUFnQkMsT0FBaEIsRUFBeUI7QUFDekIsaUJBRHlCLENBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsUUFBSSxPQUFPQyxNQUFQLEtBQWtCLFVBQWxCLElBQWdDQSxNQUFNLENBQUNDLEdBQTNDLEVBQWdEO0FBQy9DO0FBQ0FELFlBQU0sQ0FBQyxDQUFDLFlBQUQsRUFBZSxRQUFmLEVBQXlCLHNCQUF6QixDQUFELEVBQW1ERCxPQUFuRCxDQUFOO0FBQ0EsS0FIRCxNQUdPO0FBQ047QUFDQUQsVUFBSSxDQUFDSSxHQUFMLEdBQVdILE9BQU8sQ0FBQ0QsSUFBSSxDQUFDSyxRQUFOLEVBQWdCTCxJQUFJLENBQUNNLElBQXJCLEVBQTJCTixJQUFJLENBQUNPLGtCQUFoQyxFQUFvRFAs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RUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtB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YUFBT0EsTUFBUDtBQUxEO0FBQUEsR0FERDtBQzBHQSxDIiwiZmlsZSI6Ii9wYWNrYWdlcy9zdGVlZG9zX3dvcmtmbG93LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2hlY2tOcG1WZXJzaW9ucyB9IGZyb20gJ21ldGVvci90bWVhc2RheTpjaGVjay1ucG0tdmVyc2lvbnMnO1xuY2hlY2tOcG1WZXJzaW9ucyh7XG5cdFwibm9kZS1zY2hlZHVsZVwiOiBcIl4xLjMuMVwiLFxuXHRcInhtbDJqc1wiOiBcIl4wLjQuMTlcIixcbn0sICdzdGVlZG9zOndvcmtmbG93Jyk7IiwiLyohXG4gKiBVUkkuanMgLSBNdXRhdGluZyBVUkxzXG4gKlxuICogVmVyc2lvbjogMS4xNy4wXG4gKlxuICogQXV0aG9yOiBSb2RuZXkgUmVobVxuICogV2ViOiBodHRwOi8vbWVkaWFsaXplLmdpdGh1Yi5pby9VUkkuanMvXG4gKlxuICogTGljZW5zZWQgdW5kZXJcbiAqICAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZVxuICogICBHUEwgdjMgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0dQTC0zLjBcbiAqXG4gKi9cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHQndXNlIHN0cmljdCc7XG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS91bWRqcy91bWQvYmxvYi9tYXN0ZXIvcmV0dXJuRXhwb3J0cy5qc1xuXHQvLyBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG5cdC8vICAgLy8gTm9kZVxuXHQvLyAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCcuL3B1bnljb2RlJyksIHJlcXVpcmUoJy4vSVB2NicpLCByZXF1aXJlKCcuL1NlY29uZExldmVsRG9tYWlucycpKTtcblx0Ly8gfSBlbHNlXG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG5cdFx0ZGVmaW5lKFsnLi9wdW55Y29kZScsICcuL0lQdjYnLCAnLi9TZWNvbmRMZXZlbERvbWFpbnMnXSwgZmFjdG9yeSk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gQnJvd3NlciBnbG9iYWxzIChyb290IGlzIHdpbmRvdylcblx0XHRyb290LlVSSSA9IGZhY3Rvcnkocm9vdC5wdW55Y29kZSwgcm9vdC5JUHY2LCByb290LlNlY29uZExldmVsRG9tYWlucywgcm9vdCk7XG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKHB1bnljb2RlLCBJUHY2LCBTTEQsIHJvb3QpIHtcblx0J3VzZSBzdHJpY3QnO1xuXHQvKmdsb2JhbCBsb2NhdGlvbiwgZXNjYXBlLCB1bmVzY2FwZSAqL1xuXHQvLyBGSVhNRTogdjIuMC4wIHJlbmFtY2Ugbm9uLWNhbWVsQ2FzZSBwcm9wZXJ0aWVzIHRvIHVwcGVyY2FzZVxuXHQvKmpzaGludCBjYW1lbGNhc2U6IGZhbHNlICovXG5cblx0Ly8gc2F2ZSBjdXJyZW50IFVSSSB2YXJpYWJsZSwgaWYgYW55XG5cdHZhciBfVVJJID0gcm9vdCAmJiByb290LlVSSTtcblxuXHRmdW5jdGlvbiBVUkkodXJsLCBiYXNlKSB7XG5cdFx0dmFyIF91cmxTdXBwbGllZCA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMTtcblx0XHR2YXIgX2Jhc2VTdXBwbGllZCA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMjtcblxuXHRcdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRcdGlmICghKHRoaXMgaW5zdGFuY2VvZiBVUkkpKSB7XG5cdFx0XHRpZiAoX3VybFN1cHBsaWVkKSB7XG5cdFx0XHRcdGlmIChfYmFzZVN1cHBsaWVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBVUkkodXJsLCBiYXNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBuZXcgVVJJKHVybCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgVVJJKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHVybCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoX3VybFN1cHBsaWVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZGVmaW5lZCBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCBmb3IgVVJJJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgbG9jYXRpb24gIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHVybCA9IGxvY2F0aW9uLmhyZWYgKyAnJztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHVybCA9ICcnO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuaHJlZih1cmwpO1xuXG5cdFx0Ly8gcmVzb2x2ZSB0byBiYXNlIGFjY29yZGluZyB0byBodHRwOi8vZHZjcy53My5vcmcvaGcvdXJsL3Jhdy1maWxlL3RpcC9PdmVydmlldy5odG1sI2NvbnN0cnVjdG9yXG5cdFx0aWYgKGJhc2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYWJzb2x1dGVUbyhiYXNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdFVSSS52ZXJzaW9uID0gJzEuMTcuMCc7XG5cblx0dmFyIHAgPSBVUkkucHJvdG90eXBlO1xuXHR2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBlc2NhcGVSZWdFeChzdHJpbmcpIHtcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9jb21taXQvODVhYzIxNzgzYzExZjhjY2FiMDYxMDZkYmE5NzM1YTMxYTg2OTI0ZCNjb21taXRjb21tZW50LTgyMTk2M1xuXHRcdHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0VHlwZSh2YWx1ZSkge1xuXHRcdC8vIElFOCBkb2Vzbid0IHJldHVybiBbT2JqZWN0IFVuZGVmaW5lZF0gYnV0IFtPYmplY3QgT2JqZWN0XSBmb3IgdW5kZWZpbmVkIHZhbHVlXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0XHR9XG5cblx0XHRyZXR1cm4gU3RyaW5nKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkpLnNsaWNlKDgsIC0xKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG5cdFx0cmV0dXJuIGdldFR5cGUob2JqKSA9PT0gJ0FycmF5Jztcblx0fVxuXG5cdGZ1bmN0aW9uIGZpbHRlckFycmF5VmFsdWVzKGRhdGEsIHZhbHVlKSB7XG5cdFx0dmFyIGxvb2t1cCA9IHt9O1xuXHRcdHZhciBpLCBsZW5ndGg7XG5cblx0XHRpZiAoZ2V0VHlwZSh2YWx1ZSkgPT09ICdSZWdFeHAnKSB7XG5cdFx0XHRsb29rdXAgPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdGZvciAoaSA9IDAsIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxvb2t1cFt2YWx1ZVtpXV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsb29rdXBbdmFsdWVdID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHQvKmpzaGludCBsYXhicmVhazogdHJ1ZSAqL1xuXHRcdFx0dmFyIF9tYXRjaCA9IGxvb2t1cCAmJiBsb29rdXBbZGF0YVtpXV0gIT09IHVuZGVmaW5lZFxuXHRcdFx0XHR8fCAhbG9va3VwICYmIHZhbHVlLnRlc3QoZGF0YVtpXSk7XG5cdFx0XHQvKmpzaGludCBsYXhicmVhazogZmFsc2UgKi9cblx0XHRcdGlmIChfbWF0Y2gpIHtcblx0XHRcdFx0ZGF0YS5zcGxpY2UoaSwgMSk7XG5cdFx0XHRcdGxlbmd0aC0tO1xuXHRcdFx0XHRpLS07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRmdW5jdGlvbiBhcnJheUNvbnRhaW5zKGxpc3QsIHZhbHVlKSB7XG5cdFx0dmFyIGksIGxlbmd0aDtcblxuXHRcdC8vIHZhbHVlIG1heSBiZSBzdHJpbmcsIG51bWJlciwgYXJyYXksIHJlZ2V4cFxuXHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Ly8gTm90ZTogdGhpcyBjYW4gYmUgb3B0aW1pemVkIHRvIE8obikgKGluc3RlYWQgb2YgY3VycmVudCBPKG0gKiBuKSlcblx0XHRcdGZvciAoaSA9IDAsIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICghYXJyYXlDb250YWlucyhsaXN0LCB2YWx1ZVtpXSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0dmFyIF90eXBlID0gZ2V0VHlwZSh2YWx1ZSk7XG5cdFx0Zm9yIChpID0gMCwgbGVuZ3RoID0gbGlzdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKF90eXBlID09PSAnUmVnRXhwJykge1xuXHRcdFx0XHRpZiAodHlwZW9mIGxpc3RbaV0gPT09ICdzdHJpbmcnICYmIGxpc3RbaV0ubWF0Y2godmFsdWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobGlzdFtpXSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXJyYXlzRXF1YWwob25lLCB0d28pIHtcblx0XHRpZiAoIWlzQXJyYXkob25lKSB8fCAhaXNBcnJheSh0d28pKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gYXJyYXlzIGNhbid0IGJlIGVxdWFsIGlmIHRoZXkgaGF2ZSBkaWZmZXJlbnQgYW1vdW50IG9mIGNvbnRlbnRcblx0XHRpZiAob25lLmxlbmd0aCAhPT0gdHdvLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdG9uZS5zb3J0KCk7XG5cdFx0dHdvLnNvcnQoKTtcblxuXHRcdGZvciAodmFyIGkgPSAwLCBsID0gb25lLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0aWYgKG9uZVtpXSAhPT0gdHdvW2ldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIHRyaW1TbGFzaGVzKHRleHQpIHtcblx0XHR2YXIgdHJpbV9leHByZXNzaW9uID0gL15cXC8rfFxcLyskL2c7XG5cdFx0cmV0dXJuIHRleHQucmVwbGFjZSh0cmltX2V4cHJlc3Npb24sICcnKTtcblx0fVxuXG5cdFVSSS5fcGFydHMgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cHJvdG9jb2w6IG51bGwsXG5cdFx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdFx0aG9zdG5hbWU6IG51bGwsXG5cdFx0XHR1cm46IG51bGwsXG5cdFx0XHRwb3J0OiBudWxsLFxuXHRcdFx0cGF0aDogbnVsbCxcblx0XHRcdHF1ZXJ5OiBudWxsLFxuXHRcdFx0ZnJhZ21lbnQ6IG51bGwsXG5cdFx0XHQvLyBzdGF0ZVxuXHRcdFx0ZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzOiBVUkkuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0ZXNjYXBlUXVlcnlTcGFjZTogVVJJLmVzY2FwZVF1ZXJ5U3BhY2Vcblx0XHR9O1xuXHR9O1xuXHQvLyBzdGF0ZTogYWxsb3cgZHVwbGljYXRlIHF1ZXJ5IHBhcmFtZXRlcnMgKGE9MSZhPTEpXG5cdFVSSS5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMgPSBmYWxzZTtcblx0Ly8gc3RhdGU6IHJlcGxhY2VzICsgd2l0aCAlMjAgKHNwYWNlIGluIHF1ZXJ5IHN0cmluZ3MpXG5cdFVSSS5lc2NhcGVRdWVyeVNwYWNlID0gdHJ1ZTtcblx0Ly8gc3RhdGljIHByb3BlcnRpZXNcblx0VVJJLnByb3RvY29sX2V4cHJlc3Npb24gPSAvXlthLXpdW2EtejAtOS4rLV0qJC9pO1xuXHRVUkkuaWRuX2V4cHJlc3Npb24gPSAvW15hLXowLTlcXC4tXS9pO1xuXHRVUkkucHVueWNvZGVfZXhwcmVzc2lvbiA9IC8oeG4tLSkvaTtcblx0Ly8gd2VsbCwgMzMzLjQ0NC41NTUuNjY2IG1hdGNoZXMsIGJ1dCBpdCBzdXJlIGFpbid0IG5vIElQdjQgLSBkbyB3ZSBjYXJlP1xuXHRVUkkuaXA0X2V4cHJlc3Npb24gPSAvXlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9JC87XG5cdC8vIGNyZWRpdHMgdG8gUmljaCBCcm93blxuXHQvLyBzb3VyY2U6IGh0dHA6Ly9mb3J1bXMuaW50ZXJtYXBwZXIuY29tL3ZpZXd0b3BpYy5waHA/cD0xMDk2IzEwOTZcblx0Ly8gc3BlY2lmaWNhdGlvbjogaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNDI5MS50eHRcblx0VVJJLmlwNl9leHByZXNzaW9uID0gL15cXHMqKCgoWzAtOUEtRmEtZl17MSw0fTopezd9KFswLTlBLUZhLWZdezEsNH18OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezZ9KDpbMC05QS1GYS1mXXsxLDR9fCgoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwyfSl8OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7NH0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSwzfSl8KCg6WzAtOUEtRmEtZl17MSw0fSk/OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezN9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNH0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsMn06KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Mn0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw1fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwzfTooKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKShcXC4oMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsxfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDZ9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDR9OigoMjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKFxcLigyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg6KCgoOlswLTlBLUZhLWZdezEsNH0pezEsN30pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNX06KCgyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoXFwuKDI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSkpKCUuKyk/XFxzKiQvO1xuXHQvLyBleHByZXNzaW9uIHVzZWQgaXMgXCJncnViZXIgcmV2aXNlZFwiIChAZ3J1YmVyIHYyKSBkZXRlcm1pbmVkIHRvIGJlIHRoZVxuXHQvLyBiZXN0IHNvbHV0aW9uIGluIGEgcmVnZXgtZ29sZiB3ZSBkaWQgYSBjb3VwbGUgb2YgYWdlcyBhZ28gYXRcblx0Ly8gKiBodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9kZW1vL3VybC1yZWdleFxuXHQvLyAqIGh0dHA6Ly9yb2RuZXlyZWhtLmRlL3QvdXJsLXJlZ2V4Lmh0bWxcblx0VVJJLmZpbmRfdXJpX2V4cHJlc3Npb24gPSAvXFxiKCg/OlthLXpdW1xcdy1dKzooPzpcXC97MSwzfXxbYS16MC05JV0pfHd3d1xcZHswLDN9Wy5dfFthLXowLTkuXFwtXStbLl1bYS16XXsyLDR9XFwvKSg/OlteXFxzKCk8Pl0rfFxcKChbXlxccygpPD5dK3woXFwoW15cXHMoKTw+XStcXCkpKSpcXCkpKyg/OlxcKChbXlxccygpPD5dK3woXFwoW15cXHMoKTw+XStcXCkpKSpcXCl8W15cXHNgISgpXFxbXFxde307OidcIi4sPD4/wqvCu+KAnOKAneKAmOKAmV0pKS9pZztcblx0VVJJLmZpbmRVcmkgPSB7XG5cdFx0Ly8gdmFsaWQgXCJzY2hlbWU6Ly9cIiBvciBcInd3dy5cIlxuXHRcdHN0YXJ0OiAvXFxiKD86KFthLXpdW2EtejAtOS4rLV0qOlxcL1xcLyl8d3d3XFwuKS9naSxcblx0XHQvLyBldmVyeXRoaW5nIHVwIHRvIHRoZSBuZXh0IHdoaXRlc3BhY2Vcblx0XHRlbmQ6IC9bXFxzXFxyXFxuXXwkLyxcblx0XHQvLyB0cmltIHRyYWlsaW5nIHB1bmN0dWF0aW9uIGNhcHR1cmVkIGJ5IGVuZCBSZWdFeHBcblx0XHR0cmltOiAvW2AhKClcXFtcXF17fTs6J1wiLiw8Pj/Cq8K74oCc4oCd4oCe4oCY4oCZXSskL1xuXHR9O1xuXHQvLyBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3VyaS1zY2hlbWVzLmh0bWxcblx0Ly8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX1RDUF9hbmRfVURQX3BvcnRfbnVtYmVycyNXZWxsLWtub3duX3BvcnRzXG5cdFVSSS5kZWZhdWx0UG9ydHMgPSB7XG5cdFx0aHR0cDogJzgwJyxcblx0XHRodHRwczogJzQ0MycsXG5cdFx0ZnRwOiAnMjEnLFxuXHRcdGdvcGhlcjogJzcwJyxcblx0XHR3czogJzgwJyxcblx0XHR3c3M6ICc0NDMnXG5cdH07XG5cdC8vIGFsbG93ZWQgaG9zdG5hbWUgY2hhcmFjdGVycyBhY2NvcmRpbmcgdG8gUkZDIDM5ODZcblx0Ly8gQUxQSEEgRElHSVQgXCItXCIgXCIuXCIgXCJfXCIgXCJ+XCIgXCIhXCIgXCIkXCIgXCImXCIgXCInXCIgXCIoXCIgXCIpXCIgXCIqXCIgXCIrXCIgXCIsXCIgXCI7XCIgXCI9XCIgJWVuY29kZWRcblx0Ly8gSSd2ZSBuZXZlciBzZWVuIGEgKG5vbi1JRE4pIGhvc3RuYW1lIG90aGVyIHRoYW46IEFMUEhBIERJR0lUIC4gLVxuXHRVUkkuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzID0gL1teYS16QS1aMC05XFwuLV0vO1xuXHQvLyBtYXAgRE9NIEVsZW1lbnRzIHRvIHRoZWlyIFVSSSBhdHRyaWJ1dGVcblx0VVJJLmRvbUF0dHJpYnV0ZXMgPSB7XG5cdFx0J2EnOiAnaHJlZicsXG5cdFx0J2Jsb2NrcXVvdGUnOiAnY2l0ZScsXG5cdFx0J2xpbmsnOiAnaHJlZicsXG5cdFx0J2Jhc2UnOiAnaHJlZicsXG5cdFx0J3NjcmlwdCc6ICdzcmMnLFxuXHRcdCdmb3JtJzogJ2FjdGlvbicsXG5cdFx0J2ltZyc6ICdzcmMnLFxuXHRcdCdhcmVhJzogJ2hyZWYnLFxuXHRcdCdpZnJhbWUnOiAnc3JjJyxcblx0XHQnZW1iZWQnOiAnc3JjJyxcblx0XHQnc291cmNlJzogJ3NyYycsXG5cdFx0J3RyYWNrJzogJ3NyYycsXG5cdFx0J2lucHV0JzogJ3NyYycsIC8vIGJ1dCBvbmx5IGlmIHR5cGU9XCJpbWFnZVwiXG5cdFx0J2F1ZGlvJzogJ3NyYycsXG5cdFx0J3ZpZGVvJzogJ3NyYydcblx0fTtcblx0VVJJLmdldERvbUF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5vZGUpIHtcblx0XHRpZiAoIW5vZGUgfHwgIW5vZGUubm9kZU5hbWUpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdC8vIDxpbnB1dD4gc2hvdWxkIG9ubHkgZXhwb3NlIHNyYyBmb3IgdHlwZT1cImltYWdlXCJcblx0XHRpZiAobm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgbm9kZS50eXBlICE9PSAnaW1hZ2UnKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiBVUkkuZG9tQXR0cmlidXRlc1tub2RlTmFtZV07XG5cdH07XG5cblx0ZnVuY3Rpb24gZXNjYXBlRm9yRHVtYkZpcmVmb3gzNih2YWx1ZSkge1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL2lzc3Vlcy85MVxuXHRcdHJldHVybiBlc2NhcGUodmFsdWUpO1xuXHR9XG5cblx0Ly8gZW5jb2RpbmcgLyBkZWNvZGluZyBhY2NvcmRpbmcgdG8gUkZDMzk4NlxuXHRmdW5jdGlvbiBzdHJpY3RFbmNvZGVVUklDb21wb25lbnQoc3RyaW5nKSB7XG5cdFx0Ly8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvZW5jb2RlVVJJQ29tcG9uZW50XG5cdFx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmcpXG5cdFx0XHQucmVwbGFjZSgvWyEnKCkqXS9nLCBlc2NhcGVGb3JEdW1iRmlyZWZveDM2KVxuXHRcdFx0LnJlcGxhY2UoL1xcKi9nLCAnJTJBJyk7XG5cdH1cblx0VVJJLmVuY29kZSA9IHN0cmljdEVuY29kZVVSSUNvbXBvbmVudDtcblx0VVJJLmRlY29kZSA9IGRlY29kZVVSSUNvbXBvbmVudDtcblx0VVJJLmlzbzg4NTkgPSBmdW5jdGlvbigpIHtcblx0XHRVUkkuZW5jb2RlID0gZXNjYXBlO1xuXHRcdFVSSS5kZWNvZGUgPSB1bmVzY2FwZTtcblx0fTtcblx0VVJJLnVuaWNvZGUgPSBmdW5jdGlvbigpIHtcblx0XHRVUkkuZW5jb2RlID0gc3RyaWN0RW5jb2RlVVJJQ29tcG9uZW50O1xuXHRcdFVSSS5kZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XG5cdH07XG5cdFVSSS5jaGFyYWN0ZXJzID0ge1xuXHRcdHBhdGhuYW1lOiB7XG5cdFx0XHRlbmNvZGU6IHtcblx0XHRcdFx0Ly8gUkZDMzk4NiAyLjE6IEZvciBjb25zaXN0ZW5jeSwgVVJJIHByb2R1Y2VycyBhbmQgbm9ybWFsaXplcnMgc2hvdWxkXG5cdFx0XHRcdC8vIHVzZSB1cHBlcmNhc2UgaGV4YWRlY2ltYWwgZGlnaXRzIGZvciBhbGwgcGVyY2VudC1lbmNvZGluZ3MuXG5cdFx0XHRcdGV4cHJlc3Npb246IC8lKDI0fDI2fDJCfDJDfDNCfDNEfDNBfDQwKS9pZyxcblx0XHRcdFx0bWFwOiB7XG5cdFx0XHRcdFx0Ly8gLS5ffiEnKCkqXG5cdFx0XHRcdFx0JyUyNCc6ICckJyxcblx0XHRcdFx0XHQnJTI2JzogJyYnLFxuXHRcdFx0XHRcdCclMkInOiAnKycsXG5cdFx0XHRcdFx0JyUyQyc6ICcsJyxcblx0XHRcdFx0XHQnJTNCJzogJzsnLFxuXHRcdFx0XHRcdCclM0QnOiAnPScsXG5cdFx0XHRcdFx0JyUzQSc6ICc6Jyxcblx0XHRcdFx0XHQnJTQwJzogJ0AnXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWNvZGU6IHtcblx0XHRcdFx0ZXhwcmVzc2lvbjogL1tcXC9cXD8jXS9nLFxuXHRcdFx0XHRtYXA6IHtcblx0XHRcdFx0XHQnLyc6ICclMkYnLFxuXHRcdFx0XHRcdCc/JzogJyUzRicsXG5cdFx0XHRcdFx0JyMnOiAnJTIzJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZXNlcnZlZDoge1xuXHRcdFx0ZW5jb2RlOiB7XG5cdFx0XHRcdC8vIFJGQzM5ODYgMi4xOiBGb3IgY29uc2lzdGVuY3ksIFVSSSBwcm9kdWNlcnMgYW5kIG5vcm1hbGl6ZXJzIHNob3VsZFxuXHRcdFx0XHQvLyB1c2UgdXBwZXJjYXNlIGhleGFkZWNpbWFsIGRpZ2l0cyBmb3IgYWxsIHBlcmNlbnQtZW5jb2RpbmdzLlxuXHRcdFx0XHRleHByZXNzaW9uOiAvJSgyMXwyM3wyNHwyNnwyN3wyOHwyOXwyQXwyQnwyQ3wyRnwzQXwzQnwzRHwzRnw0MHw1Qnw1RCkvaWcsXG5cdFx0XHRcdG1hcDoge1xuXHRcdFx0XHRcdC8vIGdlbi1kZWxpbXNcblx0XHRcdFx0XHQnJTNBJzogJzonLFxuXHRcdFx0XHRcdCclMkYnOiAnLycsXG5cdFx0XHRcdFx0JyUzRic6ICc/Jyxcblx0XHRcdFx0XHQnJTIzJzogJyMnLFxuXHRcdFx0XHRcdCclNUInOiAnWycsXG5cdFx0XHRcdFx0JyU1RCc6ICddJyxcblx0XHRcdFx0XHQnJTQwJzogJ0AnLFxuXHRcdFx0XHRcdC8vIHN1Yi1kZWxpbXNcblx0XHRcdFx0XHQnJTIxJzogJyEnLFxuXHRcdFx0XHRcdCclMjQnOiAnJCcsXG5cdFx0XHRcdFx0JyUyNic6ICcmJyxcblx0XHRcdFx0XHQnJTI3JzogJ1xcJycsXG5cdFx0XHRcdFx0JyUyOCc6ICcoJyxcblx0XHRcdFx0XHQnJTI5JzogJyknLFxuXHRcdFx0XHRcdCclMkEnOiAnKicsXG5cdFx0XHRcdFx0JyUyQic6ICcrJyxcblx0XHRcdFx0XHQnJTJDJzogJywnLFxuXHRcdFx0XHRcdCclM0InOiAnOycsXG5cdFx0XHRcdFx0JyUzRCc6ICc9J1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR1cm5wYXRoOiB7XG5cdFx0XHQvLyBUaGUgY2hhcmFjdGVycyB1bmRlciBgZW5jb2RlYCBhcmUgdGhlIGNoYXJhY3RlcnMgY2FsbGVkIG91dCBieSBSRkMgMjE0MSBhcyBiZWluZyBhY2NlcHRhYmxlXG5cdFx0XHQvLyBmb3IgdXNhZ2UgaW4gYSBVUk4uIFJGQzIxNDEgYWxzbyBjYWxscyBvdXQgXCItXCIsIFwiLlwiLCBhbmQgXCJfXCIgYXMgYWNjZXB0YWJsZSBjaGFyYWN0ZXJzLCBidXRcblx0XHRcdC8vIHRoZXNlIGFyZW4ndCBlbmNvZGVkIGJ5IGVuY29kZVVSSUNvbXBvbmVudCwgc28gd2UgZG9uJ3QgaGF2ZSB0byBjYWxsIHRoZW0gb3V0IGhlcmUuIEFsc29cblx0XHRcdC8vIG5vdGUgdGhhdCB0aGUgY29sb24gY2hhcmFjdGVyIGlzIG5vdCBmZWF0dXJlZCBpbiB0aGUgZW5jb2RpbmcgbWFwOyB0aGlzIGlzIGJlY2F1c2UgVVJJLmpzXG5cdFx0XHQvLyBnaXZlcyB0aGUgY29sb25zIGluIFVSTnMgc2VtYW50aWMgbWVhbmluZyBhcyB0aGUgZGVsaW1pdGVycyBvZiBwYXRoIHNlZ2VtZW50cywgYW5kIHNvIGl0XG5cdFx0XHQvLyBzaG91bGQgbm90IGFwcGVhciB1bmVuY29kZWQgaW4gYSBzZWdtZW50IGl0c2VsZi5cblx0XHRcdC8vIFNlZSBhbHNvIHRoZSBub3RlIGFib3ZlIGFib3V0IFJGQzM5ODYgYW5kIGNhcGl0YWxhbGl6ZWQgaGV4IGRpZ2l0cy5cblx0XHRcdGVuY29kZToge1xuXHRcdFx0XHRleHByZXNzaW9uOiAvJSgyMXwyNHwyN3wyOHwyOXwyQXwyQnwyQ3wzQnwzRHw0MCkvaWcsXG5cdFx0XHRcdG1hcDoge1xuXHRcdFx0XHRcdCclMjEnOiAnIScsXG5cdFx0XHRcdFx0JyUyNCc6ICckJyxcblx0XHRcdFx0XHQnJTI3JzogJ1xcJycsXG5cdFx0XHRcdFx0JyUyOCc6ICcoJyxcblx0XHRcdFx0XHQnJTI5JzogJyknLFxuXHRcdFx0XHRcdCclMkEnOiAnKicsXG5cdFx0XHRcdFx0JyUyQic6ICcrJyxcblx0XHRcdFx0XHQnJTJDJzogJywnLFxuXHRcdFx0XHRcdCclM0InOiAnOycsXG5cdFx0XHRcdFx0JyUzRCc6ICc9Jyxcblx0XHRcdFx0XHQnJTQwJzogJ0AnXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQvLyBUaGVzZSBjaGFyYWN0ZXJzIGFyZSB0aGUgY2hhcmFjdGVycyBjYWxsZWQgb3V0IGJ5IFJGQzIxNDEgYXMgXCJyZXNlcnZlZFwiIGNoYXJhY3RlcnMgdGhhdFxuXHRcdFx0Ly8gc2hvdWxkIG5ldmVyIGFwcGVhciBpbiBhIFVSTiwgcGx1cyB0aGUgY29sb24gY2hhcmFjdGVyIChzZWUgbm90ZSBhYm92ZSkuXG5cdFx0XHRkZWNvZGU6IHtcblx0XHRcdFx0ZXhwcmVzc2lvbjogL1tcXC9cXD8jOl0vZyxcblx0XHRcdFx0bWFwOiB7XG5cdFx0XHRcdFx0Jy8nOiAnJTJGJyxcblx0XHRcdFx0XHQnPyc6ICclM0YnLFxuXHRcdFx0XHRcdCcjJzogJyUyMycsXG5cdFx0XHRcdFx0JzonOiAnJTNBJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRVUkkuZW5jb2RlUXVlcnkgPSBmdW5jdGlvbihzdHJpbmcsIGVzY2FwZVF1ZXJ5U3BhY2UpIHtcblx0XHR2YXIgZXNjYXBlZCA9IFVSSS5lbmNvZGUoc3RyaW5nICsgJycpO1xuXHRcdGlmIChlc2NhcGVRdWVyeVNwYWNlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGVzY2FwZVF1ZXJ5U3BhY2UgPSBVUkkuZXNjYXBlUXVlcnlTcGFjZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXNjYXBlUXVlcnlTcGFjZSA/IGVzY2FwZWQucmVwbGFjZSgvJTIwL2csICcrJykgOiBlc2NhcGVkO1xuXHR9O1xuXHRVUkkuZGVjb2RlUXVlcnkgPSBmdW5jdGlvbihzdHJpbmcsIGVzY2FwZVF1ZXJ5U3BhY2UpIHtcblx0XHRzdHJpbmcgKz0gJyc7XG5cdFx0aWYgKGVzY2FwZVF1ZXJ5U3BhY2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZXNjYXBlUXVlcnlTcGFjZSA9IFVSSS5lc2NhcGVRdWVyeVNwYWNlO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gVVJJLmRlY29kZShlc2NhcGVRdWVyeVNwYWNlID8gc3RyaW5nLnJlcGxhY2UoL1xcKy9nLCAnJTIwJykgOiBzdHJpbmcpO1xuXHRcdH0gY2F0Y2goZSkge1xuXHRcdFx0Ly8gd2UncmUgbm90IGdvaW5nIHRvIG1lc3Mgd2l0aCB3ZWlyZCBlbmNvZGluZ3MsXG5cdFx0XHQvLyBnaXZlIHVwIGFuZCByZXR1cm4gdGhlIHVuZGVjb2RlZCBvcmlnaW5hbCBzdHJpbmdcblx0XHRcdC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvODdcblx0XHRcdC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL1VSSS5qcy9pc3N1ZXMvOTJcblx0XHRcdHJldHVybiBzdHJpbmc7XG5cdFx0fVxuXHR9O1xuXHQvLyBnZW5lcmF0ZSBlbmNvZGUvZGVjb2RlIHBhdGggZnVuY3Rpb25zXG5cdHZhciBfcGFydHMgPSB7J2VuY29kZSc6J2VuY29kZScsICdkZWNvZGUnOidkZWNvZGUnfTtcblx0dmFyIF9wYXJ0O1xuXHR2YXIgZ2VuZXJhdGVBY2Nlc3NvciA9IGZ1bmN0aW9uKF9ncm91cCwgX3BhcnQpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gVVJJW19wYXJ0XShzdHJpbmcgKyAnJykucmVwbGFjZShVUkkuY2hhcmFjdGVyc1tfZ3JvdXBdW19wYXJ0XS5leHByZXNzaW9uLCBmdW5jdGlvbihjKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFVSSS5jaGFyYWN0ZXJzW19ncm91cF1bX3BhcnRdLm1hcFtjXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIHdlJ3JlIG5vdCBnb2luZyB0byBtZXNzIHdpdGggd2VpcmQgZW5jb2RpbmdzLFxuXHRcdFx0XHQvLyBnaXZlIHVwIGFuZCByZXR1cm4gdGhlIHVuZGVjb2RlZCBvcmlnaW5hbCBzdHJpbmdcblx0XHRcdFx0Ly8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvVVJJLmpzL2lzc3Vlcy84N1xuXHRcdFx0XHQvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvaXNzdWVzLzkyXG5cdFx0XHRcdHJldHVybiBzdHJpbmc7XG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcblxuXHRmb3IgKF9wYXJ0IGluIF9wYXJ0cykge1xuXHRcdFVSSVtfcGFydCArICdQYXRoU2VnbWVudCddID0gZ2VuZXJhdGVBY2Nlc3NvcigncGF0aG5hbWUnLCBfcGFydHNbX3BhcnRdKTtcblx0XHRVUklbX3BhcnQgKyAnVXJuUGF0aFNlZ21lbnQnXSA9IGdlbmVyYXRlQWNjZXNzb3IoJ3VybnBhdGgnLCBfcGFydHNbX3BhcnRdKTtcblx0fVxuXG5cdHZhciBnZW5lcmF0ZVNlZ21lbnRlZFBhdGhGdW5jdGlvbiA9IGZ1bmN0aW9uKF9zZXAsIF9jb2RpbmdGdW5jTmFtZSwgX2lubmVyQ29kaW5nRnVuY05hbWUpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHQvLyBXaHkgcGFzcyBpbiBuYW1lcyBvZiBmdW5jdGlvbnMsIHJhdGhlciB0aGFuIHRoZSBmdW5jdGlvbiBvYmplY3RzIHRoZW1zZWx2ZXM/IFRoZVxuXHRcdFx0Ly8gZGVmaW5pdGlvbnMgb2Ygc29tZSBmdW5jdGlvbnMgKGJ1dCBpbiBwYXJ0aWN1bGFyLCBVUkkuZGVjb2RlKSB3aWxsIG9jY2FzaW9uYWxseSBjaGFuZ2UgZHVlXG5cdFx0XHQvLyB0byBVUkkuanMgaGF2aW5nIElTTzg4NTkgYW5kIFVuaWNvZGUgbW9kZXMuIFBhc3NpbmcgaW4gdGhlIG5hbWUgYW5kIGdldHRpbmcgaXQgd2lsbCBlbnN1cmVcblx0XHRcdC8vIHRoYXQgdGhlIGZ1bmN0aW9ucyB3ZSB1c2UgaGVyZSBhcmUgXCJmcmVzaFwiLlxuXHRcdFx0dmFyIGFjdHVhbENvZGluZ0Z1bmM7XG5cdFx0XHRpZiAoIV9pbm5lckNvZGluZ0Z1bmNOYW1lKSB7XG5cdFx0XHRcdGFjdHVhbENvZGluZ0Z1bmMgPSBVUklbX2NvZGluZ0Z1bmNOYW1lXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFjdHVhbENvZGluZ0Z1bmMgPSBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gVVJJW19jb2RpbmdGdW5jTmFtZV0oVVJJW19pbm5lckNvZGluZ0Z1bmNOYW1lXShzdHJpbmcpKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHNlZ21lbnRzID0gKHN0cmluZyArICcnKS5zcGxpdChfc2VwKTtcblxuXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHNlZ21lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHNlZ21lbnRzW2ldID0gYWN0dWFsQ29kaW5nRnVuYyhzZWdtZW50c1tpXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZWdtZW50cy5qb2luKF9zZXApO1xuXHRcdH07XG5cdH07XG5cblx0Ly8gVGhpcyB0YWtlcyBwbGFjZSBvdXRzaWRlIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCwgZS5nLiwgZW5jb2RlVXJuUGF0aCBmdW5jdGlvbnMuXG5cdFVSSS5kZWNvZGVQYXRoID0gZ2VuZXJhdGVTZWdtZW50ZWRQYXRoRnVuY3Rpb24oJy8nLCAnZGVjb2RlUGF0aFNlZ21lbnQnKTtcblx0VVJJLmRlY29kZVVyblBhdGggPSBnZW5lcmF0ZVNlZ21lbnRlZFBhdGhGdW5jdGlvbignOicsICdkZWNvZGVVcm5QYXRoU2VnbWVudCcpO1xuXHRVUkkucmVjb2RlUGF0aCA9IGdlbmVyYXRlU2VnbWVudGVkUGF0aEZ1bmN0aW9uKCcvJywgJ2VuY29kZVBhdGhTZWdtZW50JywgJ2RlY29kZScpO1xuXHRVUkkucmVjb2RlVXJuUGF0aCA9IGdlbmVyYXRlU2VnbWVudGVkUGF0aEZ1bmN0aW9uKCc6JywgJ2VuY29kZVVyblBhdGhTZWdtZW50JywgJ2RlY29kZScpO1xuXG5cdFVSSS5lbmNvZGVSZXNlcnZlZCA9IGdlbmVyYXRlQWNjZXNzb3IoJ3Jlc2VydmVkJywgJ2VuY29kZScpO1xuXG5cdFVSSS5wYXJzZSA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcblx0XHR2YXIgcG9zO1xuXHRcdGlmICghcGFydHMpIHtcblx0XHRcdHBhcnRzID0ge307XG5cdFx0fVxuXHRcdC8vIFtwcm90b2NvbFwiOi8vXCJbdXNlcm5hbWVbXCI6XCJwYXNzd29yZF1cIkBcIl1ob3N0bmFtZVtcIjpcInBvcnRdXCIvXCI/XVtwYXRoXVtcIj9cInF1ZXJ5c3RyaW5nXVtcIiNcImZyYWdtZW50XVxuXG5cdFx0Ly8gZXh0cmFjdCBmcmFnbWVudFxuXHRcdHBvcyA9IHN0cmluZy5pbmRleE9mKCcjJyk7XG5cdFx0aWYgKHBvcyA+IC0xKSB7XG5cdFx0XHQvLyBlc2NhcGluZz9cblx0XHRcdHBhcnRzLmZyYWdtZW50ID0gc3RyaW5nLnN1YnN0cmluZyhwb3MgKyAxKSB8fCBudWxsO1xuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygwLCBwb3MpO1xuXHRcdH1cblxuXHRcdC8vIGV4dHJhY3QgcXVlcnlcblx0XHRwb3MgPSBzdHJpbmcuaW5kZXhPZignPycpO1xuXHRcdGlmIChwb3MgPiAtMSkge1xuXHRcdFx0Ly8gZXNjYXBpbmc/XG5cdFx0XHRwYXJ0cy5xdWVyeSA9IHN0cmluZy5zdWJzdHJpbmcocG9zICsgMSkgfHwgbnVsbDtcblx0XHRcdHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKTtcblx0XHR9XG5cblx0XHQvLyBleHRyYWN0IHByb3RvY29sXG5cdFx0aWYgKHN0cmluZy5zdWJzdHJpbmcoMCwgMikgPT09ICcvLycpIHtcblx0XHRcdC8vIHJlbGF0aXZlLXNjaGVtZVxuXHRcdFx0cGFydHMucHJvdG9jb2wgPSBudWxsO1xuXHRcdFx0c3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZygyKTtcblx0XHRcdC8vIGV4dHJhY3QgXCJ1c2VyOnBhc3NAaG9zdDpwb3J0XCJcblx0XHRcdHN0cmluZyA9IFVSSS5wYXJzZUF1dGhvcml0eShzdHJpbmcsIHBhcnRzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cG9zID0gc3RyaW5nLmluZGV4T2YoJzonKTtcblx0XHRcdGlmIChwb3MgPiAtMSkge1xuXHRcdFx0XHRwYXJ0cy5wcm90b2NvbCA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAocGFydHMucHJvdG9jb2wgJiYgIXBhcnRzLnByb3RvY29sLm1hdGNoKFVSSS5wcm90b2NvbF9leHByZXNzaW9uKSkge1xuXHRcdFx0XHRcdC8vIDogbWF5IGJlIHdpdGhpbiB0aGUgcGF0aFxuXHRcdFx0XHRcdHBhcnRzLnByb3RvY29sID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHN0cmluZy5zdWJzdHJpbmcocG9zICsgMSwgcG9zICsgMykgPT09ICcvLycpIHtcblx0XHRcdFx0XHRzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDMpO1xuXG5cdFx0XHRcdFx0Ly8gZXh0cmFjdCBcInVzZXI6cGFzc0Bob3N0OnBvcnRcIlxuXHRcdFx0XHRcdHN0cmluZyA9IFVSSS5wYXJzZUF1dGhvcml0eShzdHJpbmcsIHBhcnRzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEpO1xuXHRcdFx0XHRcdHBhcnRzLnVybiA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyB3aGF0J3MgbGVmdCBtdXN0IGJlIHRoZSBwYXRoXG5cdFx0cGFydHMucGF0aCA9IHN0cmluZztcblxuXHRcdC8vIGFuZCB3ZSdyZSBkb25lXG5cdFx0cmV0dXJuIHBhcnRzO1xuXHR9O1xuXHRVUkkucGFyc2VIb3N0ID0gZnVuY3Rpb24oc3RyaW5nLCBwYXJ0cykge1xuXHRcdC8vIENvcHkgY2hyb21lLCBJRSwgb3BlcmEgYmFja3NsYXNoLWhhbmRsaW5nIGJlaGF2aW9yLlxuXHRcdC8vIEJhY2sgc2xhc2hlcyBiZWZvcmUgdGhlIHF1ZXJ5IHN0cmluZyBnZXQgY29udmVydGVkIHRvIGZvcndhcmQgc2xhc2hlc1xuXHRcdC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2Jsb2IvMzg2ZmQyNGY0OWIwZTlkMWE4YTA3NjU5MmE0MDQxNjhmYWVlY2MzNC9saWIvdXJsLmpzI0wxMTUtTDEyNFxuXHRcdC8vIFNlZTogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTI1OTE2XG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9VUkkuanMvcHVsbC8yMzNcblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG5cdFx0Ly8gZXh0cmFjdCBob3N0OnBvcnRcblx0XHR2YXIgcG9zID0gc3RyaW5nLmluZGV4T2YoJy8nKTtcblx0XHR2YXIgYnJhY2tldFBvcztcblx0XHR2YXIgdDtcblxuXHRcdGlmIChwb3MgPT09IC0xKSB7XG5cdFx0XHRwb3MgPSBzdHJpbmcubGVuZ3RoO1xuXHRcdH1cblxuXHRcdGlmIChzdHJpbmcuY2hhckF0KDApID09PSAnWycpIHtcblx0XHRcdC8vIElQdjYgaG9zdCAtIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtNm1hbi10ZXh0LWFkZHItcmVwcmVzZW50YXRpb24tMDQjc2VjdGlvbi02XG5cdFx0XHQvLyBJIGNsYWltIG1vc3QgY2xpZW50IHNvZnR3YXJlIGJyZWFrcyBvbiBJUHY2IGFueXdheXMuIFRvIHNpbXBsaWZ5IHRoaW5ncywgVVJJIG9ubHkgYWNjZXB0c1xuXHRcdFx0Ly8gSVB2Nitwb3J0IGluIHRoZSBmb3JtYXQgWzIwMDE6ZGI4OjoxXTo4MCAoZm9yIHRoZSB0aW1lIGJlaW5nKVxuXHRcdFx0YnJhY2tldFBvcyA9IHN0cmluZy5pbmRleE9mKCddJyk7XG5cdFx0XHRwYXJ0cy5ob3N0bmFtZSA9IHN0cmluZy5zdWJzdHJpbmcoMSwgYnJhY2tldFBvcykgfHwgbnVsbDtcblx0XHRcdHBhcnRzLnBvcnQgPSBzdHJpbmcuc3Vic3RyaW5nKGJyYWNrZXRQb3MgKyAyLCBwb3MpIHx8IG51bGw7XG5cdFx0XHRpZiAocGFydHMucG9ydCA9PT0gJy8nKSB7XG5cdFx0XHRcdHBhcnRzLnBvcnQgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgZmlyc3RDb2xvbiA9IHN0cmluZy5pbmRleE9mKCc6Jyk7XG5cdFx0XHR2YXIgZmlyc3RTbGFzaCA9IHN0cmluZy5pbmRleE9mKCcvJyk7XG5cdFx0XHR2YXIgbmV4dENvbG9uID0gc3RyaW5nLmluZGV4T2YoJzonLCBmaXJzdENvbG9uICsgMSk7XG5cdFx0XHRpZiAobmV4dENvbG9uICE9PSAtMSAmJiAoZmlyc3RTbGFzaCA9PT0gLTEgfHwgbmV4dENvbG9uIDwgZmlyc3RTbGFzaCkpIHtcblx0XHRcdFx0Ly8gSVB2NiBob3N0IGNvbnRhaW5zIG11bHRpcGxlIGNvbG9ucyAtIGJ1dCBubyBwb3J0XG5cdFx0XHRcdC8vIHRoaXMgbm90YXRpb24gaXMgYWN0dWFsbHkgbm90IGFsbG93ZWQgYnkgUkZDIDM5ODYsIGJ1dCB3ZSdyZSBhIGxpYmVyYWwgcGFyc2VyXG5cdFx0XHRcdHBhcnRzLmhvc3RuYW1lID0gc3RyaW5nLnN1YnN0cmluZygwLCBwb3MpIHx8IG51bGw7XG5cdFx0XHRcdHBhcnRzLnBvcnQgPSBudWxsO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dCA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKS5zcGxpdCgnOicpO1xuXHRcdFx0XHRwYXJ0cy5ob3N0bmFtZSA9IHRbMF0gfHwgbnVsbDtcblx0XHRcdFx0cGFydHMucG9ydCA9IHRbMV0gfHwgbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocGFydHMuaG9zdG5hbWUgJiYgc3RyaW5nLnN1YnN0cmluZyhwb3MpLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG5cdFx0XHRwb3MrKztcblx0XHRcdHN0cmluZyA9ICcvJyArIHN0cmluZztcblx0XHR9XG5cblx0XHRyZXR1cm4gc3RyaW5nLnN1YnN0cmluZyhwb3MpIHx8ICcvJztcblx0fTtcblx0VVJJLnBhcnNlQXV0aG9yaXR5ID0gZnVuY3Rpb24oc3RyaW5nLCBwYXJ0cykge1xuXHRcdHN0cmluZyA9IFVSSS5wYXJzZVVzZXJpbmZvKHN0cmluZywgcGFydHMpO1xuXHRcdHJldHVybiBVUkkucGFyc2VIb3N0KHN0cmluZywgcGFydHMpO1xuXHR9O1xuXHRVUkkucGFyc2VVc2VyaW5mbyA9IGZ1bmN0aW9uKHN0cmluZywgcGFydHMpIHtcblx0XHQvLyBleHRyYWN0IHVzZXJuYW1lOnBhc3N3b3JkXG5cdFx0dmFyIGZpcnN0U2xhc2ggPSBzdHJpbmcuaW5kZXhPZignLycpO1xuXHRcdHZhciBwb3MgPSBzdHJpbmcubGFzdEluZGV4T2YoJ0AnLCBmaXJzdFNsYXNoID4gLTEgPyBmaXJzdFNsYXNoIDogc3RyaW5nLmxlbmd0aCAtIDEpO1xuXHRcdHZhciB0O1xuXG5cdFx0Ly8gYXV0aG9yaXR5QCBtdXN0IGNvbWUgYmVmb3JlIC9wYXRoXG5cdFx0aWYgKHBvcyA+IC0xICYmIChmaXJzdFNsYXNoID09PSAtMSB8fCBwb3MgPCBmaXJzdFNsYXNoKSkge1xuXHRcdFx0dCA9IHN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKS5zcGxpdCgnOicpO1xuXHRcdFx0cGFydHMudXNlcm5hbWUgPSB0WzBdID8gVVJJLmRlY29kZSh0WzBdKSA6IG51bGw7XG5cdFx0XHR0LnNoaWZ0KCk7XG5cdFx0XHRwYXJ0cy5wYXNzd29yZCA9IHRbMF0gPyBVUkkuZGVjb2RlKHQuam9pbignOicpKSA6IG51bGw7XG5cdFx0XHRzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKHBvcyArIDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXJ0cy51c2VybmFtZSA9IG51bGw7XG5cdFx0XHRwYXJ0cy5wYXNzd29yZCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN0cmluZztcblx0fTtcblx0VVJJLnBhcnNlUXVlcnkgPSBmdW5jdGlvbihzdHJpbmcsIGVzY2FwZVF1ZXJ5U3BhY2UpIHtcblx0XHRpZiAoIXN0cmluZykge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblxuXHRcdC8vIHRocm93IG91dCB0aGUgZnVua3kgYnVzaW5lc3MgLSBcIj9cIltuYW1lXCI9XCJ2YWx1ZVwiJlwiXStcblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgvJisvZywgJyYnKS5yZXBsYWNlKC9eXFw/KiYqfCYrJC9nLCAnJyk7XG5cblx0XHRpZiAoIXN0cmluZykge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblxuXHRcdHZhciBpdGVtcyA9IHt9O1xuXHRcdHZhciBzcGxpdHMgPSBzdHJpbmcuc3BsaXQoJyYnKTtcblx0XHR2YXIgbGVuZ3RoID0gc3BsaXRzLmxlbmd0aDtcblx0XHR2YXIgdiwgbmFtZSwgdmFsdWU7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2ID0gc3BsaXRzW2ldLnNwbGl0KCc9Jyk7XG5cdFx0XHRuYW1lID0gVVJJLmRlY29kZVF1ZXJ5KHYuc2hpZnQoKSwgZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0XHQvLyBubyBcIj1cIiBpcyBudWxsIGFjY29yZGluZyB0byBodHRwOi8vZHZjcy53My5vcmcvaGcvdXJsL3Jhdy1maWxlL3RpcC9PdmVydmlldy5odG1sI2NvbGxlY3QtdXJsLXBhcmFtZXRlcnNcblx0XHRcdHZhbHVlID0gdi5sZW5ndGggPyBVUkkuZGVjb2RlUXVlcnkodi5qb2luKCc9JyksIGVzY2FwZVF1ZXJ5U3BhY2UpIDogbnVsbDtcblxuXHRcdFx0aWYgKGhhc093bi5jYWxsKGl0ZW1zLCBuYW1lKSkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGl0ZW1zW25hbWVdID09PSAnc3RyaW5nJyB8fCBpdGVtc1tuYW1lXSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdGl0ZW1zW25hbWVdID0gW2l0ZW1zW25hbWVdXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGl0ZW1zW25hbWVdLnB1c2godmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXRlbXNbbmFtZV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gaXRlbXM7XG5cdH07XG5cblx0VVJJLmJ1aWxkID0gZnVuY3Rpb24ocGFydHMpIHtcblx0XHR2YXIgdCA9ICcnO1xuXG5cdFx0aWYgKHBhcnRzLnByb3RvY29sKSB7XG5cdFx0XHR0ICs9IHBhcnRzLnByb3RvY29sICsgJzonO1xuXHRcdH1cblxuXHRcdGlmICghcGFydHMudXJuICYmICh0IHx8IHBhcnRzLmhvc3RuYW1lKSkge1xuXHRcdFx0dCArPSAnLy8nO1xuXHRcdH1cblxuXHRcdHQgKz0gKFVSSS5idWlsZEF1dGhvcml0eShwYXJ0cykgfHwgJycpO1xuXG5cdFx0aWYgKHR5cGVvZiBwYXJ0cy5wYXRoID09PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKHBhcnRzLnBhdGguY2hhckF0KDApICE9PSAnLycgJiYgdHlwZW9mIHBhcnRzLmhvc3RuYW1lID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHR0ICs9ICcvJztcblx0XHRcdH1cblxuXHRcdFx0dCArPSBwYXJ0cy5wYXRoO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcGFydHMucXVlcnkgPT09ICdzdHJpbmcnICYmIHBhcnRzLnF1ZXJ5KSB7XG5cdFx0XHR0ICs9ICc/JyArIHBhcnRzLnF1ZXJ5O1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2YgcGFydHMuZnJhZ21lbnQgPT09ICdzdHJpbmcnICYmIHBhcnRzLmZyYWdtZW50KSB7XG5cdFx0XHR0ICs9ICcjJyArIHBhcnRzLmZyYWdtZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gdDtcblx0fTtcblx0VVJJLmJ1aWxkSG9zdCA9IGZ1bmN0aW9uKHBhcnRzKSB7XG5cdFx0dmFyIHQgPSAnJztcblxuXHRcdGlmICghcGFydHMuaG9zdG5hbWUpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9IGVsc2UgaWYgKFVSSS5pcDZfZXhwcmVzc2lvbi50ZXN0KHBhcnRzLmhvc3RuYW1lKSkge1xuXHRcdFx0dCArPSAnWycgKyBwYXJ0cy5ob3N0bmFtZSArICddJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dCArPSBwYXJ0cy5ob3N0bmFtZTtcblx0XHR9XG5cblx0XHRpZiAocGFydHMucG9ydCkge1xuXHRcdFx0dCArPSAnOicgKyBwYXJ0cy5wb3J0O1xuXHRcdH1cblxuXHRcdHJldHVybiB0O1xuXHR9O1xuXHRVUkkuYnVpbGRBdXRob3JpdHkgPSBmdW5jdGlvbihwYXJ0cykge1xuXHRcdHJldHVybiBVUkkuYnVpbGRVc2VyaW5mbyhwYXJ0cykgKyBVUkkuYnVpbGRIb3N0KHBhcnRzKTtcblx0fTtcblx0VVJJLmJ1aWxkVXNlcmluZm8gPSBmdW5jdGlvbihwYXJ0cykge1xuXHRcdHZhciB0ID0gJyc7XG5cblx0XHRpZiAocGFydHMudXNlcm5hbWUpIHtcblx0XHRcdHQgKz0gVVJJLmVuY29kZShwYXJ0cy51c2VybmFtZSk7XG5cblx0XHRcdGlmIChwYXJ0cy5wYXNzd29yZCkge1xuXHRcdFx0XHR0ICs9ICc6JyArIFVSSS5lbmNvZGUocGFydHMucGFzc3dvcmQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0ICs9ICdAJztcblx0XHR9XG5cblx0XHRyZXR1cm4gdDtcblx0fTtcblx0VVJJLmJ1aWxkUXVlcnkgPSBmdW5jdGlvbihkYXRhLCBkdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsIGVzY2FwZVF1ZXJ5U3BhY2UpIHtcblx0XHQvLyBhY2NvcmRpbmcgdG8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiBvciBodHRwOi8vbGFicy5hcGFjaGUub3JnL3dlYmFyY2gvdXJpL3JmYy9yZmMzOTg2Lmh0bWxcblx0XHQvLyBiZWluZyDCuy0uX34hJCYnKCkqKyw7PTpALz/CqyAlSEVYIGFuZCBhbG51bSBhcmUgYWxsb3dlZFxuXHRcdC8vIHRoZSBSRkMgZXhwbGljaXRseSBzdGF0ZXMgPy9mb28gYmVpbmcgYSB2YWxpZCB1c2UgY2FzZSwgbm8gbWVudGlvbiBvZiBwYXJhbWV0ZXIgc3ludGF4IVxuXHRcdC8vIFVSSS5qcyB0cmVhdHMgdGhlIHF1ZXJ5IHN0cmluZyBhcyBiZWluZyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcblx0XHQvLyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9pbnRlcmFjdC9mb3Jtcy5odG1sI2Zvcm0tY29udGVudC10eXBlXG5cblx0XHR2YXIgdCA9ICcnO1xuXHRcdHZhciB1bmlxdWUsIGtleSwgaSwgbGVuZ3RoO1xuXHRcdGZvciAoa2V5IGluIGRhdGEpIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChkYXRhLCBrZXkpICYmIGtleSkge1xuXHRcdFx0XHRpZiAoaXNBcnJheShkYXRhW2tleV0pKSB7XG5cdFx0XHRcdFx0dW5pcXVlID0ge307XG5cdFx0XHRcdFx0Zm9yIChpID0gMCwgbGVuZ3RoID0gZGF0YVtrZXldLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoZGF0YVtrZXldW2ldICE9PSB1bmRlZmluZWQgJiYgdW5pcXVlW2RhdGFba2V5XVtpXSArICcnXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdHQgKz0gJyYnICsgVVJJLmJ1aWxkUXVlcnlQYXJhbWV0ZXIoa2V5LCBkYXRhW2tleV1baV0sIGVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dW5pcXVlW2RhdGFba2V5XVtpXSArICcnXSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0ICs9ICcmJyArIFVSSS5idWlsZFF1ZXJ5UGFyYW1ldGVyKGtleSwgZGF0YVtrZXldLCBlc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0LnN1YnN0cmluZygxKTtcblx0fTtcblx0VVJJLmJ1aWxkUXVlcnlQYXJhbWV0ZXIgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgZXNjYXBlUXVlcnlTcGFjZSkge1xuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvaW50ZXJhY3QvZm9ybXMuaHRtbCNmb3JtLWNvbnRlbnQtdHlwZSAtLSBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcblx0XHQvLyBkb24ndCBhcHBlbmQgXCI9XCIgZm9yIG51bGwgdmFsdWVzLCBhY2NvcmRpbmcgdG8gaHR0cDovL2R2Y3MudzMub3JnL2hnL3VybC9yYXctZmlsZS90aXAvT3ZlcnZpZXcuaHRtbCN1cmwtcGFyYW1ldGVyLXNlcmlhbGl6YXRpb25cblx0XHRyZXR1cm4gVVJJLmVuY29kZVF1ZXJ5KG5hbWUsIGVzY2FwZVF1ZXJ5U3BhY2UpICsgKHZhbHVlICE9PSBudWxsID8gJz0nICsgVVJJLmVuY29kZVF1ZXJ5KHZhbHVlLCBlc2NhcGVRdWVyeVNwYWNlKSA6ICcnKTtcblx0fTtcblxuXHRVUkkuYWRkUXVlcnkgPSBmdW5jdGlvbihkYXRhLCBuYW1lLCB2YWx1ZSkge1xuXHRcdGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGZvciAodmFyIGtleSBpbiBuYW1lKSB7XG5cdFx0XHRcdGlmIChoYXNPd24uY2FsbChuYW1lLCBrZXkpKSB7XG5cdFx0XHRcdFx0VVJJLmFkZFF1ZXJ5KGRhdGEsIGtleSwgbmFtZVtrZXldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRpZiAoZGF0YVtuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRhdGFbbmFtZV0gPSB2YWx1ZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgZGF0YVtuYW1lXSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0ZGF0YVtuYW1lXSA9IFtkYXRhW25hbWVdXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHR2YWx1ZSA9IFt2YWx1ZV07XG5cdFx0XHR9XG5cblx0XHRcdGRhdGFbbmFtZV0gPSAoZGF0YVtuYW1lXSB8fCBbXSkuY29uY2F0KHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVVJJLmFkZFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXInKTtcblx0XHR9XG5cdH07XG5cdFVSSS5yZW1vdmVRdWVyeSA9IGZ1bmN0aW9uKGRhdGEsIG5hbWUsIHZhbHVlKSB7XG5cdFx0dmFyIGksIGxlbmd0aCwga2V5O1xuXG5cdFx0aWYgKGlzQXJyYXkobmFtZSkpIHtcblx0XHRcdGZvciAoaSA9IDAsIGxlbmd0aCA9IG5hbWUubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0ZGF0YVtuYW1lW2ldXSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGdldFR5cGUobmFtZSkgPT09ICdSZWdFeHAnKSB7XG5cdFx0XHRmb3IgKGtleSBpbiBkYXRhKSB7XG5cdFx0XHRcdGlmIChuYW1lLnRlc3Qoa2V5KSkge1xuXHRcdFx0XHRcdGRhdGFba2V5XSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRmb3IgKGtleSBpbiBuYW1lKSB7XG5cdFx0XHRcdGlmIChoYXNPd24uY2FsbChuYW1lLCBrZXkpKSB7XG5cdFx0XHRcdFx0VVJJLnJlbW92ZVF1ZXJ5KGRhdGEsIGtleSwgbmFtZVtrZXldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRpZiAoZ2V0VHlwZSh2YWx1ZSkgPT09ICdSZWdFeHAnKSB7XG5cdFx0XHRcdFx0aWYgKCFpc0FycmF5KGRhdGFbbmFtZV0pICYmIHZhbHVlLnRlc3QoZGF0YVtuYW1lXSkpIHtcblx0XHRcdFx0XHRcdGRhdGFbbmFtZV0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRhdGFbbmFtZV0gPSBmaWx0ZXJBcnJheVZhbHVlcyhkYXRhW25hbWVdLCB2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGRhdGFbbmFtZV0gPT09IFN0cmluZyh2YWx1ZSkgJiYgKCFpc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPT09IDEpKSB7XG5cdFx0XHRcdFx0ZGF0YVtuYW1lXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fSBlbHNlIGlmIChpc0FycmF5KGRhdGFbbmFtZV0pKSB7XG5cdFx0XHRcdFx0ZGF0YVtuYW1lXSA9IGZpbHRlckFycmF5VmFsdWVzKGRhdGFbbmFtZV0sIHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVtuYW1lXSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVVJJLnJlbW92ZVF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZywgUmVnRXhwIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXInKTtcblx0XHR9XG5cdH07XG5cdFVSSS5oYXNRdWVyeSA9IGZ1bmN0aW9uKGRhdGEsIG5hbWUsIHZhbHVlLCB3aXRoaW5BcnJheSkge1xuXHRcdGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGZvciAodmFyIGtleSBpbiBuYW1lKSB7XG5cdFx0XHRcdGlmIChoYXNPd24uY2FsbChuYW1lLCBrZXkpKSB7XG5cdFx0XHRcdFx0aWYgKCFVUkkuaGFzUXVlcnkoZGF0YSwga2V5LCBuYW1lW2tleV0pKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdVUkkuaGFzUXVlcnkoKSBhY2NlcHRzIGFuIG9iamVjdCwgc3RyaW5nIGFzIHRoZSBuYW1lIHBhcmFtZXRlcicpO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAoZ2V0VHlwZSh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgJ1VuZGVmaW5lZCc6XG5cdFx0XHRcdC8vIHRydWUgaWYgZXhpc3RzIChidXQgbWF5IGJlIGVtcHR5KVxuXHRcdFx0XHRyZXR1cm4gbmFtZSBpbiBkYXRhOyAvLyBkYXRhW25hbWVdICE9PSB1bmRlZmluZWQ7XG5cblx0XHRcdGNhc2UgJ0Jvb2xlYW4nOlxuXHRcdFx0XHQvLyB0cnVlIGlmIGV4aXN0cyBhbmQgbm9uLWVtcHR5XG5cdFx0XHRcdHZhciBfYm9vbHkgPSBCb29sZWFuKGlzQXJyYXkoZGF0YVtuYW1lXSkgPyBkYXRhW25hbWVdLmxlbmd0aCA6IGRhdGFbbmFtZV0pO1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IF9ib29seTtcblxuXHRcdFx0Y2FzZSAnRnVuY3Rpb24nOlxuXHRcdFx0XHQvLyBhbGxvdyBjb21wbGV4IGNvbXBhcmlzb25cblx0XHRcdFx0cmV0dXJuICEhdmFsdWUoZGF0YVtuYW1lXSwgbmFtZSwgZGF0YSk7XG5cblx0XHRcdGNhc2UgJ0FycmF5Jzpcblx0XHRcdFx0aWYgKCFpc0FycmF5KGRhdGFbbmFtZV0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIG9wID0gd2l0aGluQXJyYXkgPyBhcnJheUNvbnRhaW5zIDogYXJyYXlzRXF1YWw7XG5cdFx0XHRcdHJldHVybiBvcChkYXRhW25hbWVdLCB2YWx1ZSk7XG5cblx0XHRcdGNhc2UgJ1JlZ0V4cCc6XG5cdFx0XHRcdGlmICghaXNBcnJheShkYXRhW25hbWVdKSkge1xuXHRcdFx0XHRcdHJldHVybiBCb29sZWFuKGRhdGFbbmFtZV0gJiYgZGF0YVtuYW1lXS5tYXRjaCh2YWx1ZSkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF3aXRoaW5BcnJheSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBhcnJheUNvbnRhaW5zKGRhdGFbbmFtZV0sIHZhbHVlKTtcblxuXHRcdFx0Y2FzZSAnTnVtYmVyJzpcblx0XHRcdFx0dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdFx0LyogZmFsbHMgdGhyb3VnaCAqL1xuXHRcdFx0Y2FzZSAnU3RyaW5nJzpcblx0XHRcdFx0aWYgKCFpc0FycmF5KGRhdGFbbmFtZV0pKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGFbbmFtZV0gPT09IHZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF3aXRoaW5BcnJheSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBhcnJheUNvbnRhaW5zKGRhdGFbbmFtZV0sIHZhbHVlKTtcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignVVJJLmhhc1F1ZXJ5KCkgYWNjZXB0cyB1bmRlZmluZWQsIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyLCBSZWdFeHAsIEZ1bmN0aW9uIGFzIHRoZSB2YWx1ZSBwYXJhbWV0ZXInKTtcblx0XHR9XG5cdH07XG5cblxuXHRVUkkuY29tbW9uUGF0aCA9IGZ1bmN0aW9uKG9uZSwgdHdvKSB7XG5cdFx0dmFyIGxlbmd0aCA9IE1hdGgubWluKG9uZS5sZW5ndGgsIHR3by5sZW5ndGgpO1xuXHRcdHZhciBwb3M7XG5cblx0XHQvLyBmaW5kIGZpcnN0IG5vbi1tYXRjaGluZyBjaGFyYWN0ZXJcblx0XHRmb3IgKHBvcyA9IDA7IHBvcyA8IGxlbmd0aDsgcG9zKyspIHtcblx0XHRcdGlmIChvbmUuY2hhckF0KHBvcykgIT09IHR3by5jaGFyQXQocG9zKSkge1xuXHRcdFx0XHRwb3MtLTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBvcyA8IDEpIHtcblx0XHRcdHJldHVybiBvbmUuY2hhckF0KDApID09PSB0d28uY2hhckF0KDApICYmIG9uZS5jaGFyQXQoMCkgPT09ICcvJyA/ICcvJyA6ICcnO1xuXHRcdH1cblxuXHRcdC8vIHJldmVydCB0byBsYXN0IC9cblx0XHRpZiAob25lLmNoYXJBdChwb3MpICE9PSAnLycgfHwgdHdvLmNoYXJBdChwb3MpICE9PSAnLycpIHtcblx0XHRcdHBvcyA9IG9uZS5zdWJzdHJpbmcoMCwgcG9zKS5sYXN0SW5kZXhPZignLycpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvbmUuc3Vic3RyaW5nKDAsIHBvcyArIDEpO1xuXHR9O1xuXG5cdFVSSS53aXRoaW5TdHJpbmcgPSBmdW5jdGlvbihzdHJpbmcsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG5cdFx0b3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcblx0XHR2YXIgX3N0YXJ0ID0gb3B0aW9ucy5zdGFydCB8fCBVUkkuZmluZFVyaS5zdGFydDtcblx0XHR2YXIgX2VuZCA9IG9wdGlvbnMuZW5kIHx8IFVSSS5maW5kVXJpLmVuZDtcblx0XHR2YXIgX3RyaW0gPSBvcHRpb25zLnRyaW0gfHwgVVJJLmZpbmRVcmkudHJpbTtcblx0XHR2YXIgX2F0dHJpYnV0ZU9wZW4gPSAvW2EtejAtOS1dPVtcIiddPyQvaTtcblxuXHRcdF9zdGFydC5sYXN0SW5kZXggPSAwO1xuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHR2YXIgbWF0Y2ggPSBfc3RhcnQuZXhlYyhzdHJpbmcpO1xuXHRcdFx0aWYgKCFtYXRjaCkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0dmFyIHN0YXJ0ID0gbWF0Y2guaW5kZXg7XG5cdFx0XHRpZiAob3B0aW9ucy5pZ25vcmVIdG1sKSB7XG5cdFx0XHRcdC8vIGF0dHJpYnV0KGU9W1wiJ10/JClcblx0XHRcdFx0dmFyIGF0dHJpYnV0ZU9wZW4gPSBzdHJpbmcuc2xpY2UoTWF0aC5tYXgoc3RhcnQgLSAzLCAwKSwgc3RhcnQpO1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlT3BlbiAmJiBfYXR0cmlidXRlT3Blbi50ZXN0KGF0dHJpYnV0ZU9wZW4pKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyIGVuZCA9IHN0YXJ0ICsgc3RyaW5nLnNsaWNlKHN0YXJ0KS5zZWFyY2goX2VuZCk7XG5cdFx0XHR2YXIgc2xpY2UgPSBzdHJpbmcuc2xpY2Uoc3RhcnQsIGVuZCkucmVwbGFjZShfdHJpbSwgJycpO1xuXHRcdFx0aWYgKG9wdGlvbnMuaWdub3JlICYmIG9wdGlvbnMuaWdub3JlLnRlc3Qoc2xpY2UpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRlbmQgPSBzdGFydCArIHNsaWNlLmxlbmd0aDtcblx0XHRcdHZhciByZXN1bHQgPSBjYWxsYmFjayhzbGljZSwgc3RhcnQsIGVuZCwgc3RyaW5nKTtcblx0XHRcdHN0cmluZyA9IHN0cmluZy5zbGljZSgwLCBzdGFydCkgKyByZXN1bHQgKyBzdHJpbmcuc2xpY2UoZW5kKTtcblx0XHRcdF9zdGFydC5sYXN0SW5kZXggPSBzdGFydCArIHJlc3VsdC5sZW5ndGg7XG5cdFx0fVxuXG5cdFx0X3N0YXJ0Lmxhc3RJbmRleCA9IDA7XG5cdFx0cmV0dXJuIHN0cmluZztcblx0fTtcblxuXHRVUkkuZW5zdXJlVmFsaWRIb3N0bmFtZSA9IGZ1bmN0aW9uKHYpIHtcblx0XHQvLyBUaGVvcmV0aWNhbGx5IFVSSXMgYWxsb3cgcGVyY2VudC1lbmNvZGluZyBpbiBIb3N0bmFtZXMgKGFjY29yZGluZyB0byBSRkMgMzk4Nilcblx0XHQvLyB0aGV5IGFyZSBub3QgcGFydCBvZiBETlMgYW5kIHRoZXJlZm9yZSBpZ25vcmVkIGJ5IFVSSS5qc1xuXG5cdFx0aWYgKHYubWF0Y2goVVJJLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycykpIHtcblx0XHRcdC8vIHRlc3QgcHVueWNvZGVcblx0XHRcdGlmICghcHVueWNvZGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXSBhbmQgUHVueWNvZGUuanMgaXMgbm90IGF2YWlsYWJsZScpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocHVueWNvZGUudG9BU0NJSSh2KS5tYXRjaChVUkkuaW52YWxpZF9ob3N0bmFtZV9jaGFyYWN0ZXJzKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdIb3N0bmFtZSBcIicgKyB2ICsgJ1wiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05Li1dJyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8vIG5vQ29uZmxpY3Rcblx0VVJJLm5vQ29uZmxpY3QgPSBmdW5jdGlvbihyZW1vdmVBbGwpIHtcblx0XHRpZiAocmVtb3ZlQWxsKSB7XG5cdFx0XHR2YXIgdW5jb25mbGljdGVkID0ge1xuXHRcdFx0XHRVUkk6IHRoaXMubm9Db25mbGljdCgpXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAocm9vdC5VUklUZW1wbGF0ZSAmJiB0eXBlb2Ygcm9vdC5VUklUZW1wbGF0ZS5ub0NvbmZsaWN0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdHVuY29uZmxpY3RlZC5VUklUZW1wbGF0ZSA9IHJvb3QuVVJJVGVtcGxhdGUubm9Db25mbGljdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocm9vdC5JUHY2ICYmIHR5cGVvZiByb290LklQdjYubm9Db25mbGljdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR1bmNvbmZsaWN0ZWQuSVB2NiA9IHJvb3QuSVB2Ni5ub0NvbmZsaWN0KCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyb290LlNlY29uZExldmVsRG9tYWlucyAmJiB0eXBlb2Ygcm9vdC5TZWNvbmRMZXZlbERvbWFpbnMubm9Db25mbGljdCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHR1bmNvbmZsaWN0ZWQuU2Vjb25kTGV2ZWxEb21haW5zID0gcm9vdC5TZWNvbmRMZXZlbERvbWFpbnMubm9Db25mbGljdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5jb25mbGljdGVkO1xuXHRcdH0gZWxzZSBpZiAocm9vdC5VUkkgPT09IHRoaXMpIHtcblx0XHRcdHJvb3QuVVJJID0gX1VSSTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRwLmJ1aWxkID0gZnVuY3Rpb24oZGVmZXJCdWlsZCkge1xuXHRcdGlmIChkZWZlckJ1aWxkID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLl9kZWZlcnJlZF9idWlsZCA9IHRydWU7XG5cdFx0fSBlbHNlIGlmIChkZWZlckJ1aWxkID09PSB1bmRlZmluZWQgfHwgdGhpcy5fZGVmZXJyZWRfYnVpbGQpIHtcblx0XHRcdHRoaXMuX3N0cmluZyA9IFVSSS5idWlsZCh0aGlzLl9wYXJ0cyk7XG5cdFx0XHR0aGlzLl9kZWZlcnJlZF9idWlsZCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdHAuY2xvbmUgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gbmV3IFVSSSh0aGlzKTtcblx0fTtcblxuXHRwLnZhbHVlT2YgPSBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuYnVpbGQoZmFsc2UpLl9zdHJpbmc7XG5cdH07XG5cblxuXHRmdW5jdGlvbiBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKF9wYXJ0KXtcblx0XHRyZXR1cm4gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX3BhcnRzW19wYXJ0XSB8fCAnJztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX3BhcnRzW19wYXJ0XSA9IHYgfHwgbnVsbDtcblx0XHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVQcmVmaXhBY2Nlc3NvcihfcGFydCwgX2tleSl7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9wYXJ0c1tfcGFydF0gfHwgJyc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAodiAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHYgPSB2ICsgJyc7XG5cdFx0XHRcdFx0aWYgKHYuY2hhckF0KDApID09PSBfa2V5KSB7XG5cdFx0XHRcdFx0XHR2ID0gdi5zdWJzdHJpbmcoMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5fcGFydHNbX3BhcnRdID0gdjtcblx0XHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0cC5wcm90b2NvbCA9IGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoJ3Byb3RvY29sJyk7XG5cdHAudXNlcm5hbWUgPSBnZW5lcmF0ZVNpbXBsZUFjY2Vzc29yKCd1c2VybmFtZScpO1xuXHRwLnBhc3N3b3JkID0gZ2VuZXJhdGVTaW1wbGVBY2Nlc3NvcigncGFzc3dvcmQnKTtcblx0cC5ob3N0bmFtZSA9IGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoJ2hvc3RuYW1lJyk7XG5cdHAucG9ydCA9IGdlbmVyYXRlU2ltcGxlQWNjZXNzb3IoJ3BvcnQnKTtcblx0cC5xdWVyeSA9IGdlbmVyYXRlUHJlZml4QWNjZXNzb3IoJ3F1ZXJ5JywgJz8nKTtcblx0cC5mcmFnbWVudCA9IGdlbmVyYXRlUHJlZml4QWNjZXNzb3IoJ2ZyYWdtZW50JywgJyMnKTtcblxuXHRwLnNlYXJjaCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0dmFyIHQgPSB0aGlzLnF1ZXJ5KHYsIGJ1aWxkKTtcblx0XHRyZXR1cm4gdHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIHQubGVuZ3RoID8gKCc/JyArIHQpIDogdDtcblx0fTtcblx0cC5oYXNoID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHR2YXIgdCA9IHRoaXMuZnJhZ21lbnQodiwgYnVpbGQpO1xuXHRcdHJldHVybiB0eXBlb2YgdCA9PT0gJ3N0cmluZycgJiYgdC5sZW5ndGggPyAoJyMnICsgdCkgOiB0O1xuXHR9O1xuXG5cdHAucGF0aG5hbWUgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gdHJ1ZSkge1xuXHRcdFx0dmFyIHJlcyA9IHRoaXMuX3BhcnRzLnBhdGggfHwgKHRoaXMuX3BhcnRzLmhvc3RuYW1lID8gJy8nIDogJycpO1xuXHRcdFx0cmV0dXJuIHYgPyAodGhpcy5fcGFydHMudXJuID8gVVJJLmRlY29kZVVyblBhdGggOiBVUkkuZGVjb2RlUGF0aCkocmVzKSA6IHJlcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5wYXRoID0gdiA/IFVSSS5yZWNvZGVVcm5QYXRoKHYpIDogJyc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5wYXRoID0gdiA/IFVSSS5yZWNvZGVQYXRoKHYpIDogJy8nO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLnBhdGggPSBwLnBhdGhuYW1lO1xuXHRwLmhyZWYgPSBmdW5jdGlvbihocmVmLCBidWlsZCkge1xuXHRcdHZhciBrZXk7XG5cblx0XHRpZiAoaHJlZiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdHRoaXMuX3N0cmluZyA9ICcnO1xuXHRcdHRoaXMuX3BhcnRzID0gVVJJLl9wYXJ0cygpO1xuXG5cdFx0dmFyIF9VUkkgPSBocmVmIGluc3RhbmNlb2YgVVJJO1xuXHRcdHZhciBfb2JqZWN0ID0gdHlwZW9mIGhyZWYgPT09ICdvYmplY3QnICYmIChocmVmLmhvc3RuYW1lIHx8IGhyZWYucGF0aCB8fCBocmVmLnBhdGhuYW1lKTtcblx0XHRpZiAoaHJlZi5ub2RlTmFtZSkge1xuXHRcdFx0dmFyIGF0dHJpYnV0ZSA9IFVSSS5nZXREb21BdHRyaWJ1dGUoaHJlZik7XG5cdFx0XHRocmVmID0gaHJlZlthdHRyaWJ1dGVdIHx8ICcnO1xuXHRcdFx0X29iamVjdCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIHdpbmRvdy5sb2NhdGlvbiBpcyByZXBvcnRlZCB0byBiZSBhbiBvYmplY3QsIGJ1dCBpdCdzIG5vdCB0aGUgc29ydFxuXHRcdC8vIG9mIG9iamVjdCB3ZSdyZSBsb29raW5nIGZvcjpcblx0XHQvLyAqIGxvY2F0aW9uLnByb3RvY29sIGVuZHMgd2l0aCBhIGNvbG9uXG5cdFx0Ly8gKiBsb2NhdGlvbi5xdWVyeSAhPSBvYmplY3Quc2VhcmNoXG5cdFx0Ly8gKiBsb2NhdGlvbi5oYXNoICE9IG9iamVjdC5mcmFnbWVudFxuXHRcdC8vIHNpbXBseSBzZXJpYWxpemluZyB0aGUgdW5rbm93biBvYmplY3Qgc2hvdWxkIGRvIHRoZSB0cmlja1xuXHRcdC8vIChmb3IgbG9jYXRpb24sIG5vdCBmb3IgZXZlcnl0aGluZy4uLilcblx0XHRpZiAoIV9VUkkgJiYgX29iamVjdCAmJiBocmVmLnBhdGhuYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGhyZWYgPSBocmVmLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBocmVmID09PSAnc3RyaW5nJyB8fCBocmVmIGluc3RhbmNlb2YgU3RyaW5nKSB7XG5cdFx0XHR0aGlzLl9wYXJ0cyA9IFVSSS5wYXJzZShTdHJpbmcoaHJlZiksIHRoaXMuX3BhcnRzKTtcblx0XHR9IGVsc2UgaWYgKF9VUkkgfHwgX29iamVjdCkge1xuXHRcdFx0dmFyIHNyYyA9IF9VUkkgPyBocmVmLl9wYXJ0cyA6IGhyZWY7XG5cdFx0XHRmb3IgKGtleSBpbiBzcmMpIHtcblx0XHRcdFx0aWYgKGhhc093bi5jYWxsKHRoaXMuX3BhcnRzLCBrZXkpKSB7XG5cdFx0XHRcdFx0dGhpcy5fcGFydHNba2V5XSA9IHNyY1trZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgaW5wdXQnKTtcblx0XHR9XG5cblx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0Ly8gaWRlbnRpZmljYXRpb24gYWNjZXNzb3JzXG5cdHAuaXMgPSBmdW5jdGlvbih3aGF0KSB7XG5cdFx0dmFyIGlwID0gZmFsc2U7XG5cdFx0dmFyIGlwNCA9IGZhbHNlO1xuXHRcdHZhciBpcDYgPSBmYWxzZTtcblx0XHR2YXIgbmFtZSA9IGZhbHNlO1xuXHRcdHZhciBzbGQgPSBmYWxzZTtcblx0XHR2YXIgaWRuID0gZmFsc2U7XG5cdFx0dmFyIHB1bnljb2RlID0gZmFsc2U7XG5cdFx0dmFyIHJlbGF0aXZlID0gIXRoaXMuX3BhcnRzLnVybjtcblxuXHRcdGlmICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkge1xuXHRcdFx0cmVsYXRpdmUgPSBmYWxzZTtcblx0XHRcdGlwNCA9IFVSSS5pcDRfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHRcdGlwNiA9IFVSSS5pcDZfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHRcdGlwID0gaXA0IHx8IGlwNjtcblx0XHRcdG5hbWUgPSAhaXA7XG5cdFx0XHRzbGQgPSBuYW1lICYmIFNMRCAmJiBTTEQuaGFzKHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHRcdGlkbiA9IG5hbWUgJiYgVVJJLmlkbl9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xuXHRcdFx0cHVueWNvZGUgPSBuYW1lICYmIFVSSS5wdW55Y29kZV9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpO1xuXHRcdH1cblxuXHRcdHN3aXRjaCAod2hhdC50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0XHRjYXNlICdyZWxhdGl2ZSc6XG5cdFx0XHRcdHJldHVybiByZWxhdGl2ZTtcblxuXHRcdFx0Y2FzZSAnYWJzb2x1dGUnOlxuXHRcdFx0XHRyZXR1cm4gIXJlbGF0aXZlO1xuXG5cdFx0XHQvLyBob3N0bmFtZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0Y2FzZSAnZG9tYWluJzpcblx0XHRcdGNhc2UgJ25hbWUnOlxuXHRcdFx0XHRyZXR1cm4gbmFtZTtcblxuXHRcdFx0Y2FzZSAnc2xkJzpcblx0XHRcdFx0cmV0dXJuIHNsZDtcblxuXHRcdFx0Y2FzZSAnaXAnOlxuXHRcdFx0XHRyZXR1cm4gaXA7XG5cblx0XHRcdGNhc2UgJ2lwNCc6XG5cdFx0XHRjYXNlICdpcHY0Jzpcblx0XHRcdGNhc2UgJ2luZXQ0Jzpcblx0XHRcdFx0cmV0dXJuIGlwNDtcblxuXHRcdFx0Y2FzZSAnaXA2Jzpcblx0XHRcdGNhc2UgJ2lwdjYnOlxuXHRcdFx0Y2FzZSAnaW5ldDYnOlxuXHRcdFx0XHRyZXR1cm4gaXA2O1xuXG5cdFx0XHRjYXNlICdpZG4nOlxuXHRcdFx0XHRyZXR1cm4gaWRuO1xuXG5cdFx0XHRjYXNlICd1cmwnOlxuXHRcdFx0XHRyZXR1cm4gIXRoaXMuX3BhcnRzLnVybjtcblxuXHRcdFx0Y2FzZSAndXJuJzpcblx0XHRcdFx0cmV0dXJuICEhdGhpcy5fcGFydHMudXJuO1xuXG5cdFx0XHRjYXNlICdwdW55Y29kZSc6XG5cdFx0XHRcdHJldHVybiBwdW55Y29kZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHQvLyBjb21wb25lbnQgc3BlY2lmaWMgaW5wdXQgdmFsaWRhdGlvblxuXHR2YXIgX3Byb3RvY29sID0gcC5wcm90b2NvbDtcblx0dmFyIF9wb3J0ID0gcC5wb3J0O1xuXHR2YXIgX2hvc3RuYW1lID0gcC5ob3N0bmFtZTtcblxuXHRwLnByb3RvY29sID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAodikge1xuXHRcdFx0XHQvLyBhY2NlcHQgdHJhaWxpbmcgOi8vXG5cdFx0XHRcdHYgPSB2LnJlcGxhY2UoLzooXFwvXFwvKT8kLywgJycpO1xuXG5cdFx0XHRcdGlmICghdi5tYXRjaChVUkkucHJvdG9jb2xfZXhwcmVzc2lvbikpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm90b2NvbCBcIicgKyB2ICsgJ1wiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05ListXSBvciBkb2VzblxcJ3Qgc3RhcnQgd2l0aCBbQS1aXScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBfcHJvdG9jb2wuY2FsbCh0aGlzLCB2LCBidWlsZCk7XG5cdH07XG5cdHAuc2NoZW1lID0gcC5wcm90b2NvbDtcblx0cC5wb3J0ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICh2ID09PSAwKSB7XG5cdFx0XHRcdHYgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodikge1xuXHRcdFx0XHR2ICs9ICcnO1xuXHRcdFx0XHRpZiAodi5jaGFyQXQoMCkgPT09ICc6Jykge1xuXHRcdFx0XHRcdHYgPSB2LnN1YnN0cmluZygxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2Lm1hdGNoKC9bXjAtOV0vKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1BvcnQgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gWzAtOV0nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gX3BvcnQuY2FsbCh0aGlzLCB2LCBidWlsZCk7XG5cdH07XG5cdHAuaG9zdG5hbWUgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dmFyIHggPSB7fTtcblx0XHRcdHZhciByZXMgPSBVUkkucGFyc2VIb3N0KHYsIHgpO1xuXHRcdFx0aWYgKHJlcyAhPT0gJy8nKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lIFwiJyArIHYgKyAnXCIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtcblx0XHRcdH1cblxuXHRcdFx0diA9IHguaG9zdG5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBfaG9zdG5hbWUuY2FsbCh0aGlzLCB2LCBidWlsZCk7XG5cdH07XG5cblx0Ly8gY29tcG91bmQgYWNjZXNzb3JzXG5cdHAub3JpZ2luID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHR2YXIgcGFydHM7XG5cblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhciBwcm90b2NvbCA9IHRoaXMucHJvdG9jb2woKTtcblx0XHRcdHZhciBhdXRob3JpdHkgPSB0aGlzLmF1dGhvcml0eSgpO1xuXHRcdFx0aWYgKCFhdXRob3JpdHkpIHJldHVybiAnJztcblx0XHRcdHJldHVybiAocHJvdG9jb2wgPyBwcm90b2NvbCArICc6Ly8nIDogJycpICsgdGhpcy5hdXRob3JpdHkoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIG9yaWdpbiA9IFVSSSh2KTtcblx0XHRcdHRoaXNcblx0XHRcdFx0LnByb3RvY29sKG9yaWdpbi5wcm90b2NvbCgpKVxuXHRcdFx0XHQuYXV0aG9yaXR5KG9yaWdpbi5hdXRob3JpdHkoKSlcblx0XHRcdFx0LmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAuaG9zdCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWUgPyBVUkkuYnVpbGRIb3N0KHRoaXMuX3BhcnRzKSA6ICcnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgcmVzID0gVVJJLnBhcnNlSG9zdCh2LCB0aGlzLl9wYXJ0cyk7XG5cdFx0XHRpZiAocmVzICE9PSAnLycpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAuYXV0aG9yaXR5ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZSA/IFVSSS5idWlsZEF1dGhvcml0eSh0aGlzLl9wYXJ0cykgOiAnJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHJlcyA9IFVSSS5wYXJzZUF1dGhvcml0eSh2LCB0aGlzLl9wYXJ0cyk7XG5cdFx0XHRpZiAocmVzICE9PSAnLycpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAudXNlcmluZm8gPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy51c2VybmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cblx0XHRcdHZhciB0ID0gVVJJLmJ1aWxkVXNlcmluZm8odGhpcy5fcGFydHMpO1xuXHRcdFx0cmV0dXJuIHQuc3Vic3RyaW5nKDAsIHQubGVuZ3RoIC0xKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHZbdi5sZW5ndGgtMV0gIT09ICdAJykge1xuXHRcdFx0XHR2ICs9ICdAJztcblx0XHRcdH1cblxuXHRcdFx0VVJJLnBhcnNlVXNlcmluZm8odiwgdGhpcy5fcGFydHMpO1xuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLnJlc291cmNlID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHR2YXIgcGFydHM7XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYXRoKCkgKyB0aGlzLnNlYXJjaCgpICsgdGhpcy5oYXNoKCk7XG5cdFx0fVxuXG5cdFx0cGFydHMgPSBVUkkucGFyc2Uodik7XG5cdFx0dGhpcy5fcGFydHMucGF0aCA9IHBhcnRzLnBhdGg7XG5cdFx0dGhpcy5fcGFydHMucXVlcnkgPSBwYXJ0cy5xdWVyeTtcblx0XHR0aGlzLl9wYXJ0cy5mcmFnbWVudCA9IHBhcnRzLmZyYWdtZW50O1xuXHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvLyBmcmFjdGlvbiBhY2Nlc3NvcnNcblx0cC5zdWJkb21haW4gPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gY29udmVuaWVuY2UsIHJldHVybiBcInd3d1wiIGZyb20gXCJ3d3cuZXhhbXBsZS5vcmdcIlxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICghdGhpcy5fcGFydHMuaG9zdG5hbWUgfHwgdGhpcy5pcygnSVAnKSkge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGdyYWIgZG9tYWluIGFuZCBhZGQgYW5vdGhlciBzZWdtZW50XG5cdFx0XHR2YXIgZW5kID0gdGhpcy5fcGFydHMuaG9zdG5hbWUubGVuZ3RoIC0gdGhpcy5kb21haW4oKS5sZW5ndGggLSAxO1xuXHRcdFx0cmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLCBlbmQpIHx8ICcnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aCAtIHRoaXMuZG9tYWluKCkubGVuZ3RoO1xuXHRcdFx0dmFyIHN1YiA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZygwLCBlKTtcblx0XHRcdHZhciByZXBsYWNlID0gbmV3IFJlZ0V4cCgnXicgKyBlc2NhcGVSZWdFeChzdWIpKTtcblxuXHRcdFx0aWYgKHYgJiYgdi5jaGFyQXQodi5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XG5cdFx0XHRcdHYgKz0gJy4nO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodikge1xuXHRcdFx0XHRVUkkuZW5zdXJlVmFsaWRIb3N0bmFtZSh2KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fcGFydHMuaG9zdG5hbWUgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKHJlcGxhY2UsIHYpO1xuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLmRvbWFpbiA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykge1xuXHRcdFx0YnVpbGQgPSB2O1xuXHRcdFx0diA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBjb252ZW5pZW5jZSwgcmV0dXJuIFwiZXhhbXBsZS5vcmdcIiBmcm9tIFwid3d3LmV4YW1wbGUub3JnXCJcblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoIXRoaXMuX3BhcnRzLmhvc3RuYW1lIHx8IHRoaXMuaXMoJ0lQJykpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBpZiBob3N0bmFtZSBjb25zaXN0cyBvZiAxIG9yIDIgc2VnbWVudHMsIGl0IG11c3QgYmUgdGhlIGRvbWFpblxuXHRcdFx0dmFyIHQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5tYXRjaCgvXFwuL2cpO1xuXHRcdFx0aWYgKHQgJiYgdC5sZW5ndGggPCAyKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZ3JhYiB0bGQgYW5kIGFkZCBhbm90aGVyIHNlZ21lbnRcblx0XHRcdHZhciBlbmQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGggLSB0aGlzLnRsZChidWlsZCkubGVuZ3RoIC0gMTtcblx0XHRcdGVuZCA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLmxhc3RJbmRleE9mKCcuJywgZW5kIC0xKSArIDE7XG5cdFx0XHRyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWUuc3Vic3RyaW5nKGVuZCkgfHwgJyc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdikge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdjYW5ub3Qgc2V0IGRvbWFpbiBlbXB0eScpO1xuXHRcdFx0fVxuXG5cdFx0XHRVUkkuZW5zdXJlVmFsaWRIb3N0bmFtZSh2KTtcblxuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy5ob3N0bmFtZSB8fCB0aGlzLmlzKCdJUCcpKSB7XG5cdFx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciByZXBsYWNlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeCh0aGlzLmRvbWFpbigpKSArICckJyk7XG5cdFx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShyZXBsYWNlLCB2KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHR9O1xuXHRwLnRsZCA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykge1xuXHRcdFx0YnVpbGQgPSB2O1xuXHRcdFx0diA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyByZXR1cm4gXCJvcmdcIiBmcm9tIFwid3d3LmV4YW1wbGUub3JnXCJcblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoIXRoaXMuX3BhcnRzLmhvc3RuYW1lIHx8IHRoaXMuaXMoJ0lQJykpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcG9zID0gdGhpcy5fcGFydHMuaG9zdG5hbWUubGFzdEluZGV4T2YoJy4nKTtcblx0XHRcdHZhciB0bGQgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcocG9zICsgMSk7XG5cblx0XHRcdGlmIChidWlsZCAhPT0gdHJ1ZSAmJiBTTEQgJiYgU0xELmxpc3RbdGxkLnRvTG93ZXJDYXNlKCldKSB7XG5cdFx0XHRcdHJldHVybiBTTEQuZ2V0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSB8fCB0bGQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0bGQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciByZXBsYWNlO1xuXG5cdFx0XHRpZiAoIXYpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignY2Fubm90IHNldCBUTEQgZW1wdHknKTtcblx0XHRcdH0gZWxzZSBpZiAodi5tYXRjaCgvW15hLXpBLVowLTktXS8pKSB7XG5cdFx0XHRcdGlmIChTTEQgJiYgU0xELmlzKHYpKSB7XG5cdFx0XHRcdFx0cmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgodGhpcy50bGQoKSkgKyAnJCcpO1xuXHRcdFx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gdGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZShyZXBsYWNlLCB2KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUTEQgXCInICsgdiArICdcIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOV0nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICghdGhpcy5fcGFydHMuaG9zdG5hbWUgfHwgdGhpcy5pcygnSVAnKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoJ2Nhbm5vdCBzZXQgVExEIG9uIG5vbi1kb21haW4gaG9zdCcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgodGhpcy50bGQoKSkgKyAnJCcpO1xuXHRcdFx0XHR0aGlzLl9wYXJ0cy5ob3N0bmFtZSA9IHRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UocmVwbGFjZSwgdik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC5kaXJlY3RvcnkgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHJldHVybiB2ID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoIXRoaXMuX3BhcnRzLnBhdGggJiYgIXRoaXMuX3BhcnRzLmhvc3RuYW1lKSB7XG5cdFx0XHRcdHJldHVybiAnJztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX3BhcnRzLnBhdGggPT09ICcvJykge1xuXHRcdFx0XHRyZXR1cm4gJy8nO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZW5kID0gdGhpcy5fcGFydHMucGF0aC5sZW5ndGggLSB0aGlzLmZpbGVuYW1lKCkubGVuZ3RoIC0gMTtcblx0XHRcdHZhciByZXMgPSB0aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygwLCBlbmQpIHx8ICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSA/ICcvJyA6ICcnKTtcblxuXHRcdFx0cmV0dXJuIHYgPyBVUkkuZGVjb2RlUGF0aChyZXMpIDogcmVzO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBlID0gdGhpcy5fcGFydHMucGF0aC5sZW5ndGggLSB0aGlzLmZpbGVuYW1lKCkubGVuZ3RoO1xuXHRcdFx0dmFyIGRpcmVjdG9yeSA9IHRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKDAsIGUpO1xuXHRcdFx0dmFyIHJlcGxhY2UgPSBuZXcgUmVnRXhwKCdeJyArIGVzY2FwZVJlZ0V4KGRpcmVjdG9yeSkpO1xuXG5cdFx0XHQvLyBmdWxseSBxdWFsaWZpZXIgZGlyZWN0b3JpZXMgYmVnaW4gd2l0aCBhIHNsYXNoXG5cdFx0XHRpZiAoIXRoaXMuaXMoJ3JlbGF0aXZlJykpIHtcblx0XHRcdFx0aWYgKCF2KSB7XG5cdFx0XHRcdFx0diA9ICcvJztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2LmNoYXJBdCgwKSAhPT0gJy8nKSB7XG5cdFx0XHRcdFx0diA9ICcvJyArIHY7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gZGlyZWN0b3JpZXMgYWx3YXlzIGVuZCB3aXRoIGEgc2xhc2hcblx0XHRcdGlmICh2ICYmIHYuY2hhckF0KHYubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuXHRcdFx0XHR2ICs9ICcvJztcblx0XHRcdH1cblxuXHRcdFx0diA9IFVSSS5yZWNvZGVQYXRoKHYpO1xuXHRcdFx0dGhpcy5fcGFydHMucGF0aCA9IHRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShyZXBsYWNlLCB2KTtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC5maWxlbmFtZSA9IGZ1bmN0aW9uKHYsIGJ1aWxkKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcztcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IHRydWUpIHtcblx0XHRcdGlmICghdGhpcy5fcGFydHMucGF0aCB8fCB0aGlzLl9wYXJ0cy5wYXRoID09PSAnLycpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcG9zID0gdGhpcy5fcGFydHMucGF0aC5sYXN0SW5kZXhPZignLycpO1xuXHRcdFx0dmFyIHJlcyA9IHRoaXMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKHBvcysxKTtcblxuXHRcdFx0cmV0dXJuIHYgPyBVUkkuZGVjb2RlUGF0aFNlZ21lbnQocmVzKSA6IHJlcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIG11dGF0ZWREaXJlY3RvcnkgPSBmYWxzZTtcblxuXHRcdFx0aWYgKHYuY2hhckF0KDApID09PSAnLycpIHtcblx0XHRcdFx0diA9IHYuc3Vic3RyaW5nKDEpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodi5tYXRjaCgvXFwuP1xcLy8pKSB7XG5cdFx0XHRcdG11dGF0ZWREaXJlY3RvcnkgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcmVwbGFjZSA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXgodGhpcy5maWxlbmFtZSgpKSArICckJyk7XG5cdFx0XHR2ID0gVVJJLnJlY29kZVBhdGgodik7XG5cdFx0XHR0aGlzLl9wYXJ0cy5wYXRoID0gdGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKHJlcGxhY2UsIHYpO1xuXG5cdFx0XHRpZiAobXV0YXRlZERpcmVjdG9yeSkge1xuXHRcdFx0XHR0aGlzLm5vcm1hbGl6ZVBhdGgoYnVpbGQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH07XG5cdHAuc3VmZml4ID0gZnVuY3Rpb24odiwgYnVpbGQpIHtcblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHRyZXR1cm4gdiA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy5wYXRoIHx8IHRoaXMuX3BhcnRzLnBhdGggPT09ICcvJykge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBmaWxlbmFtZSA9IHRoaXMuZmlsZW5hbWUoKTtcblx0XHRcdHZhciBwb3MgPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpO1xuXHRcdFx0dmFyIHMsIHJlcztcblxuXHRcdFx0aWYgKHBvcyA9PT0gLTEpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzdWZmaXggbWF5IG9ubHkgY29udGFpbiBhbG51bSBjaGFyYWN0ZXJzICh5dXAsIEkgbWFkZSB0aGlzIHVwLilcblx0XHRcdHMgPSBmaWxlbmFtZS5zdWJzdHJpbmcocG9zKzEpO1xuXHRcdFx0cmVzID0gKC9eW2EtejAtOSVdKyQvaSkudGVzdChzKSA/IHMgOiAnJztcblx0XHRcdHJldHVybiB2ID8gVVJJLmRlY29kZVBhdGhTZWdtZW50KHJlcykgOiByZXM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh2LmNoYXJBdCgwKSA9PT0gJy4nKSB7XG5cdFx0XHRcdHYgPSB2LnN1YnN0cmluZygxKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHN1ZmZpeCA9IHRoaXMuc3VmZml4KCk7XG5cdFx0XHR2YXIgcmVwbGFjZTtcblxuXHRcdFx0aWYgKCFzdWZmaXgpIHtcblx0XHRcdFx0aWYgKCF2KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9wYXJ0cy5wYXRoICs9ICcuJyArIFVSSS5yZWNvZGVQYXRoKHYpO1xuXHRcdFx0fSBlbHNlIGlmICghdikge1xuXHRcdFx0XHRyZXBsYWNlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeCgnLicgKyBzdWZmaXgpICsgJyQnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlcGxhY2UgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4KHN1ZmZpeCkgKyAnJCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVwbGFjZSkge1xuXHRcdFx0XHR2ID0gVVJJLnJlY29kZVBhdGgodik7XG5cdFx0XHRcdHRoaXMuX3BhcnRzLnBhdGggPSB0aGlzLl9wYXJ0cy5wYXRoLnJlcGxhY2UocmVwbGFjZSwgdik7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fTtcblx0cC5zZWdtZW50ID0gZnVuY3Rpb24oc2VnbWVudCwgdiwgYnVpbGQpIHtcblx0XHR2YXIgc2VwYXJhdG9yID0gdGhpcy5fcGFydHMudXJuID8gJzonIDogJy8nO1xuXHRcdHZhciBwYXRoID0gdGhpcy5wYXRoKCk7XG5cdFx0dmFyIGFic29sdXRlID0gcGF0aC5zdWJzdHJpbmcoMCwgMSkgPT09ICcvJztcblx0XHR2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KHNlcGFyYXRvcik7XG5cblx0XHRpZiAoc2VnbWVudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzZWdtZW50ICE9PSAnbnVtYmVyJykge1xuXHRcdFx0YnVpbGQgPSB2O1xuXHRcdFx0diA9IHNlZ21lbnQ7XG5cdFx0XHRzZWdtZW50ID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmIChzZWdtZW50ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHNlZ21lbnQgIT09ICdudW1iZXInKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0JhZCBzZWdtZW50IFwiJyArIHNlZ21lbnQgKyAnXCIsIG11c3QgYmUgMC1iYXNlZCBpbnRlZ2VyJyk7XG5cdFx0fVxuXG5cdFx0aWYgKGFic29sdXRlKSB7XG5cdFx0XHRzZWdtZW50cy5zaGlmdCgpO1xuXHRcdH1cblxuXHRcdGlmIChzZWdtZW50IDwgMCkge1xuXHRcdFx0Ly8gYWxsb3cgbmVnYXRpdmUgaW5kZXhlcyB0byBhZGRyZXNzIGZyb20gdGhlIGVuZFxuXHRcdFx0c2VnbWVudCA9IE1hdGgubWF4KHNlZ21lbnRzLmxlbmd0aCArIHNlZ21lbnQsIDApO1xuXHRcdH1cblxuXHRcdGlmICh2ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8qanNoaW50IGxheGJyZWFrOiB0cnVlICovXG5cdFx0XHRyZXR1cm4gc2VnbWVudCA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gc2VnbWVudHNcblx0XHRcdFx0OiBzZWdtZW50c1tzZWdtZW50XTtcblx0XHRcdC8qanNoaW50IGxheGJyZWFrOiBmYWxzZSAqL1xuXHRcdH0gZWxzZSBpZiAoc2VnbWVudCA9PT0gbnVsbCB8fCBzZWdtZW50c1tzZWdtZW50XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoaXNBcnJheSh2KSkge1xuXHRcdFx0XHRzZWdtZW50cyA9IFtdO1xuXHRcdFx0XHQvLyBjb2xsYXBzZSBlbXB0eSBlbGVtZW50cyB3aXRoaW4gYXJyYXlcblx0XHRcdFx0Zm9yICh2YXIgaT0wLCBsPXYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKCF2W2ldLmxlbmd0aCAmJiAoIXNlZ21lbnRzLmxlbmd0aCB8fCAhc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0xXS5sZW5ndGgpKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoc2VnbWVudHMubGVuZ3RoICYmICFzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLTFdLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0c2VnbWVudHMucG9wKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0c2VnbWVudHMucHVzaCh0cmltU2xhc2hlcyh2W2ldKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodiB8fCB0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0diA9IHRyaW1TbGFzaGVzKHYpO1xuXHRcdFx0XHRpZiAoc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0xXSA9PT0gJycpIHtcblx0XHRcdFx0XHQvLyBlbXB0eSB0cmFpbGluZyBlbGVtZW50cyBoYXZlIHRvIGJlIG92ZXJ3cml0dGVuXG5cdFx0XHRcdFx0Ly8gdG8gcHJldmVudCByZXN1bHRzIHN1Y2ggYXMgL2Zvby8vYmFyXG5cdFx0XHRcdFx0c2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0xXSA9IHY7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2VnbWVudHMucHVzaCh2KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodikge1xuXHRcdFx0XHRzZWdtZW50c1tzZWdtZW50XSA9IHRyaW1TbGFzaGVzKHYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VnbWVudHMuc3BsaWNlKHNlZ21lbnQsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChhYnNvbHV0ZSkge1xuXHRcdFx0c2VnbWVudHMudW5zaGlmdCgnJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucGF0aChzZWdtZW50cy5qb2luKHNlcGFyYXRvciksIGJ1aWxkKTtcblx0fTtcblx0cC5zZWdtZW50Q29kZWQgPSBmdW5jdGlvbihzZWdtZW50LCB2LCBidWlsZCkge1xuXHRcdHZhciBzZWdtZW50cywgaSwgbDtcblxuXHRcdGlmICh0eXBlb2Ygc2VnbWVudCAhPT0gJ251bWJlcicpIHtcblx0XHRcdGJ1aWxkID0gdjtcblx0XHRcdHYgPSBzZWdtZW50O1xuXHRcdFx0c2VnbWVudCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzZWdtZW50cyA9IHRoaXMuc2VnbWVudChzZWdtZW50LCB2LCBidWlsZCk7XG5cdFx0XHRpZiAoIWlzQXJyYXkoc2VnbWVudHMpKSB7XG5cdFx0XHRcdHNlZ21lbnRzID0gc2VnbWVudHMgIT09IHVuZGVmaW5lZCA/IFVSSS5kZWNvZGUoc2VnbWVudHMpIDogdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChpID0gMCwgbCA9IHNlZ21lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRcdHNlZ21lbnRzW2ldID0gVVJJLmRlY29kZShzZWdtZW50c1tpXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNlZ21lbnRzO1xuXHRcdH1cblxuXHRcdGlmICghaXNBcnJheSh2KSkge1xuXHRcdFx0diA9ICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgfHwgdiBpbnN0YW5jZW9mIFN0cmluZykgPyBVUkkuZW5jb2RlKHYpIDogdjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yIChpID0gMCwgbCA9IHYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdHZbaV0gPSBVUkkuZW5jb2RlKHZbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnNlZ21lbnQoc2VnbWVudCwgdiwgYnVpbGQpO1xuXHR9O1xuXG5cdC8vIG11dGF0aW5nIHF1ZXJ5IHN0cmluZ1xuXHR2YXIgcSA9IHAucXVlcnk7XG5cdHAucXVlcnkgPSBmdW5jdGlvbih2LCBidWlsZCkge1xuXHRcdGlmICh2ID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHYgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHZhciBkYXRhID0gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdFx0dmFyIHJlc3VsdCA9IHYuY2FsbCh0aGlzLCBkYXRhKTtcblx0XHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkocmVzdWx0IHx8IGRhdGEsIHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycywgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9IGVsc2UgaWYgKHYgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkodiwgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gcS5jYWxsKHRoaXMsIHYsIGJ1aWxkKTtcblx0XHR9XG5cdH07XG5cdHAuc2V0UXVlcnkgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgYnVpbGQpIHtcblx0XHR2YXIgZGF0YSA9IFVSSS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblxuXHRcdGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgfHwgbmFtZSBpbnN0YW5jZW9mIFN0cmluZykge1xuXHRcdFx0ZGF0YVtuYW1lXSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IG51bGw7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGZvciAodmFyIGtleSBpbiBuYW1lKSB7XG5cdFx0XHRcdGlmIChoYXNPd24uY2FsbChuYW1lLCBrZXkpKSB7XG5cdFx0XHRcdFx0ZGF0YVtrZXldID0gbmFtZVtrZXldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1VSSS5hZGRRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcgYXMgdGhlIG5hbWUgcGFyYW1ldGVyJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fcGFydHMucXVlcnkgPSBVUkkuYnVpbGRRdWVyeShkYXRhLCB0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdGJ1aWxkID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHRwLmFkZFF1ZXJ5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIGJ1aWxkKSB7XG5cdFx0dmFyIGRhdGEgPSBVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0VVJJLmFkZFF1ZXJ5KGRhdGEsIG5hbWUsIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUpO1xuXHRcdHRoaXMuX3BhcnRzLnF1ZXJ5ID0gVVJJLmJ1aWxkUXVlcnkoZGF0YSwgdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRidWlsZCA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5yZW1vdmVRdWVyeSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBidWlsZCkge1xuXHRcdHZhciBkYXRhID0gVVJJLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdFVSSS5yZW1vdmVRdWVyeShkYXRhLCBuYW1lLCB2YWx1ZSk7XG5cdFx0dGhpcy5fcGFydHMucXVlcnkgPSBVUkkuYnVpbGRRdWVyeShkYXRhLCB0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO1xuXHRcdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdGJ1aWxkID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHRwLmhhc1F1ZXJ5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIHdpdGhpbkFycmF5KSB7XG5cdFx0dmFyIGRhdGEgPSBVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7XG5cdFx0cmV0dXJuIFVSSS5oYXNRdWVyeShkYXRhLCBuYW1lLCB2YWx1ZSwgd2l0aGluQXJyYXkpO1xuXHR9O1xuXHRwLnNldFNlYXJjaCA9IHAuc2V0UXVlcnk7XG5cdHAuYWRkU2VhcmNoID0gcC5hZGRRdWVyeTtcblx0cC5yZW1vdmVTZWFyY2ggPSBwLnJlbW92ZVF1ZXJ5O1xuXHRwLmhhc1NlYXJjaCA9IHAuaGFzUXVlcnk7XG5cblx0Ly8gc2FuaXRpemluZyBVUkxzXG5cdHAubm9ybWFsaXplID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3BhcnRzLnVybikge1xuXHRcdFx0cmV0dXJuIHRoaXNcblx0XHRcdFx0Lm5vcm1hbGl6ZVByb3RvY29sKGZhbHNlKVxuXHRcdFx0XHQubm9ybWFsaXplUGF0aChmYWxzZSlcblx0XHRcdFx0Lm5vcm1hbGl6ZVF1ZXJ5KGZhbHNlKVxuXHRcdFx0XHQubm9ybWFsaXplRnJhZ21lbnQoZmFsc2UpXG5cdFx0XHRcdC5idWlsZCgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzXG5cdFx0XHQubm9ybWFsaXplUHJvdG9jb2woZmFsc2UpXG5cdFx0XHQubm9ybWFsaXplSG9zdG5hbWUoZmFsc2UpXG5cdFx0XHQubm9ybWFsaXplUG9ydChmYWxzZSlcblx0XHRcdC5ub3JtYWxpemVQYXRoKGZhbHNlKVxuXHRcdFx0Lm5vcm1hbGl6ZVF1ZXJ5KGZhbHNlKVxuXHRcdFx0Lm5vcm1hbGl6ZUZyYWdtZW50KGZhbHNlKVxuXHRcdFx0LmJ1aWxkKCk7XG5cdH07XG5cdHAubm9ybWFsaXplUHJvdG9jb2wgPSBmdW5jdGlvbihidWlsZCkge1xuXHRcdGlmICh0eXBlb2YgdGhpcy5fcGFydHMucHJvdG9jb2wgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aGlzLl9wYXJ0cy5wcm90b2NvbCA9IHRoaXMuX3BhcnRzLnByb3RvY29sLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdHAubm9ybWFsaXplSG9zdG5hbWUgPSBmdW5jdGlvbihidWlsZCkge1xuXHRcdGlmICh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkge1xuXHRcdFx0aWYgKHRoaXMuaXMoJ0lETicpICYmIHB1bnljb2RlKSB7XG5cdFx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gcHVueWNvZGUudG9BU0NJSSh0aGlzLl9wYXJ0cy5ob3N0bmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuaXMoJ0lQdjYnKSAmJiBJUHY2KSB7XG5cdFx0XHRcdHRoaXMuX3BhcnRzLmhvc3RuYW1lID0gSVB2Ni5iZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fcGFydHMuaG9zdG5hbWUgPSB0aGlzLl9wYXJ0cy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHRwLm5vcm1hbGl6ZVBvcnQgPSBmdW5jdGlvbihidWlsZCkge1xuXHRcdC8vIHJlbW92ZSBwb3J0IG9mIGl0J3MgdGhlIHByb3RvY29sJ3MgZGVmYXVsdFxuXHRcdGlmICh0eXBlb2YgdGhpcy5fcGFydHMucHJvdG9jb2wgPT09ICdzdHJpbmcnICYmIHRoaXMuX3BhcnRzLnBvcnQgPT09IFVSSS5kZWZhdWx0UG9ydHNbdGhpcy5fcGFydHMucHJvdG9jb2xdKSB7XG5cdFx0XHR0aGlzLl9wYXJ0cy5wb3J0ID0gbnVsbDtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5ub3JtYWxpemVQYXRoID0gZnVuY3Rpb24oYnVpbGQpIHtcblx0XHR2YXIgX3BhdGggPSB0aGlzLl9wYXJ0cy5wYXRoO1xuXHRcdGlmICghX3BhdGgpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9wYXJ0cy51cm4pIHtcblx0XHRcdHRoaXMuX3BhcnRzLnBhdGggPSBVUkkucmVjb2RlVXJuUGF0aCh0aGlzLl9wYXJ0cy5wYXRoKTtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9wYXJ0cy5wYXRoID09PSAnLycpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHZhciBfd2FzX3JlbGF0aXZlO1xuXHRcdHZhciBfbGVhZGluZ1BhcmVudHMgPSAnJztcblx0XHR2YXIgX3BhcmVudCwgX3BvcztcblxuXHRcdC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRoc1xuXHRcdGlmIChfcGF0aC5jaGFyQXQoMCkgIT09ICcvJykge1xuXHRcdFx0X3dhc19yZWxhdGl2ZSA9IHRydWU7XG5cdFx0XHRfcGF0aCA9ICcvJyArIF9wYXRoO1xuXHRcdH1cblxuXHRcdC8vIGhhbmRsZSByZWxhdGl2ZSBmaWxlcyAoYXMgb3Bwb3NlZCB0byBkaXJlY3Rvcmllcylcblx0XHRpZiAoX3BhdGguc2xpY2UoLTMpID09PSAnLy4uJyB8fCBfcGF0aC5zbGljZSgtMikgPT09ICcvLicpIHtcblx0XHRcdF9wYXRoICs9ICcvJztcblx0XHR9XG5cblx0XHQvLyByZXNvbHZlIHNpbXBsZXNcblx0XHRfcGF0aCA9IF9wYXRoXG5cdFx0XHQucmVwbGFjZSgvKFxcLyhcXC5cXC8pKyl8KFxcL1xcLiQpL2csICcvJylcblx0XHRcdC5yZXBsYWNlKC9cXC97Mix9L2csICcvJyk7XG5cblx0XHQvLyByZW1lbWJlciBsZWFkaW5nIHBhcmVudHNcblx0XHRpZiAoX3dhc19yZWxhdGl2ZSkge1xuXHRcdFx0X2xlYWRpbmdQYXJlbnRzID0gX3BhdGguc3Vic3RyaW5nKDEpLm1hdGNoKC9eKFxcLlxcLlxcLykrLykgfHwgJyc7XG5cdFx0XHRpZiAoX2xlYWRpbmdQYXJlbnRzKSB7XG5cdFx0XHRcdF9sZWFkaW5nUGFyZW50cyA9IF9sZWFkaW5nUGFyZW50c1swXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyByZXNvbHZlIHBhcmVudHNcblx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0X3BhcmVudCA9IF9wYXRoLmluZGV4T2YoJy8uLicpO1xuXHRcdFx0aWYgKF9wYXJlbnQgPT09IC0xKSB7XG5cdFx0XHRcdC8vIG5vIG1vcmUgLi4vIHRvIHJlc29sdmVcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGVsc2UgaWYgKF9wYXJlbnQgPT09IDApIHtcblx0XHRcdFx0Ly8gdG9wIGxldmVsIGNhbm5vdCBiZSByZWxhdGl2ZSwgc2tpcCBpdFxuXHRcdFx0XHRfcGF0aCA9IF9wYXRoLnN1YnN0cmluZygzKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdF9wb3MgPSBfcGF0aC5zdWJzdHJpbmcoMCwgX3BhcmVudCkubGFzdEluZGV4T2YoJy8nKTtcblx0XHRcdGlmIChfcG9zID09PSAtMSkge1xuXHRcdFx0XHRfcG9zID0gX3BhcmVudDtcblx0XHRcdH1cblx0XHRcdF9wYXRoID0gX3BhdGguc3Vic3RyaW5nKDAsIF9wb3MpICsgX3BhdGguc3Vic3RyaW5nKF9wYXJlbnQgKyAzKTtcblx0XHR9XG5cblx0XHQvLyByZXZlcnQgdG8gcmVsYXRpdmVcblx0XHRpZiAoX3dhc19yZWxhdGl2ZSAmJiB0aGlzLmlzKCdyZWxhdGl2ZScpKSB7XG5cdFx0XHRfcGF0aCA9IF9sZWFkaW5nUGFyZW50cyArIF9wYXRoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cblx0XHRfcGF0aCA9IFVSSS5yZWNvZGVQYXRoKF9wYXRoKTtcblx0XHR0aGlzLl9wYXJ0cy5wYXRoID0gX3BhdGg7XG5cdFx0dGhpcy5idWlsZCghYnVpbGQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXHRwLm5vcm1hbGl6ZVBhdGhuYW1lID0gcC5ub3JtYWxpemVQYXRoO1xuXHRwLm5vcm1hbGl6ZVF1ZXJ5ID0gZnVuY3Rpb24oYnVpbGQpIHtcblx0XHRpZiAodHlwZW9mIHRoaXMuX3BhcnRzLnF1ZXJ5ID09PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKCF0aGlzLl9wYXJ0cy5xdWVyeS5sZW5ndGgpIHtcblx0XHRcdFx0dGhpcy5fcGFydHMucXVlcnkgPSBudWxsO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5xdWVyeShVUkkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSwgdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSkpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmJ1aWxkKCFidWlsZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdHAubm9ybWFsaXplRnJhZ21lbnQgPSBmdW5jdGlvbihidWlsZCkge1xuXHRcdGlmICghdGhpcy5fcGFydHMuZnJhZ21lbnQpIHtcblx0XHRcdHRoaXMuX3BhcnRzLmZyYWdtZW50ID0gbnVsbDtcblx0XHRcdHRoaXMuYnVpbGQoIWJ1aWxkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblx0cC5ub3JtYWxpemVTZWFyY2ggPSBwLm5vcm1hbGl6ZVF1ZXJ5O1xuXHRwLm5vcm1hbGl6ZUhhc2ggPSBwLm5vcm1hbGl6ZUZyYWdtZW50O1xuXG5cdHAuaXNvODg1OSA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIGV4cGVjdCB1bmljb2RlIGlucHV0LCBpc284ODU5IG91dHB1dFxuXHRcdHZhciBlID0gVVJJLmVuY29kZTtcblx0XHR2YXIgZCA9IFVSSS5kZWNvZGU7XG5cblx0XHRVUkkuZW5jb2RlID0gZXNjYXBlO1xuXHRcdFVSSS5kZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMubm9ybWFsaXplKCk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdFVSSS5lbmNvZGUgPSBlO1xuXHRcdFx0VVJJLmRlY29kZSA9IGQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdHAudW5pY29kZSA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIGV4cGVjdCBpc284ODU5IGlucHV0LCB1bmljb2RlIG91dHB1dFxuXHRcdHZhciBlID0gVVJJLmVuY29kZTtcblx0XHR2YXIgZCA9IFVSSS5kZWNvZGU7XG5cblx0XHRVUkkuZW5jb2RlID0gc3RyaWN0RW5jb2RlVVJJQ29tcG9uZW50O1xuXHRcdFVSSS5kZWNvZGUgPSB1bmVzY2FwZTtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5ub3JtYWxpemUoKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0VVJJLmVuY29kZSA9IGU7XG5cdFx0XHRVUkkuZGVjb2RlID0gZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0cC5yZWFkYWJsZSA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB1cmkgPSB0aGlzLmNsb25lKCk7XG5cdFx0Ly8gcmVtb3ZpbmcgdXNlcm5hbWUsIHBhc3N3b3JkLCBiZWNhdXNlIHRoZXkgc2hvdWxkbid0IGJlIGRpc3BsYXllZCBhY2NvcmRpbmcgdG8gUkZDIDM5ODZcblx0XHR1cmkudXNlcm5hbWUoJycpLnBhc3N3b3JkKCcnKS5ub3JtYWxpemUoKTtcblx0XHR2YXIgdCA9ICcnO1xuXHRcdGlmICh1cmkuX3BhcnRzLnByb3RvY29sKSB7XG5cdFx0XHR0ICs9IHVyaS5fcGFydHMucHJvdG9jb2wgKyAnOi8vJztcblx0XHR9XG5cblx0XHRpZiAodXJpLl9wYXJ0cy5ob3N0bmFtZSkge1xuXHRcdFx0aWYgKHVyaS5pcygncHVueWNvZGUnKSAmJiBwdW55Y29kZSkge1xuXHRcdFx0XHR0ICs9IHB1bnljb2RlLnRvVW5pY29kZSh1cmkuX3BhcnRzLmhvc3RuYW1lKTtcblx0XHRcdFx0aWYgKHVyaS5fcGFydHMucG9ydCkge1xuXHRcdFx0XHRcdHQgKz0gJzonICsgdXJpLl9wYXJ0cy5wb3J0O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0ICs9IHVyaS5ob3N0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHVyaS5fcGFydHMuaG9zdG5hbWUgJiYgdXJpLl9wYXJ0cy5wYXRoICYmIHVyaS5fcGFydHMucGF0aC5jaGFyQXQoMCkgIT09ICcvJykge1xuXHRcdFx0dCArPSAnLyc7XG5cdFx0fVxuXG5cdFx0dCArPSB1cmkucGF0aCh0cnVlKTtcblx0XHRpZiAodXJpLl9wYXJ0cy5xdWVyeSkge1xuXHRcdFx0dmFyIHEgPSAnJztcblx0XHRcdGZvciAodmFyIGkgPSAwLCBxcCA9IHVyaS5fcGFydHMucXVlcnkuc3BsaXQoJyYnKSwgbCA9IHFwLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHR2YXIga3YgPSAocXBbaV0gfHwgJycpLnNwbGl0KCc9Jyk7XG5cdFx0XHRcdHEgKz0gJyYnICsgVVJJLmRlY29kZVF1ZXJ5KGt2WzBdLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKVxuXHRcdFx0XHRcdC5yZXBsYWNlKC8mL2csICclMjYnKTtcblxuXHRcdFx0XHRpZiAoa3ZbMV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHEgKz0gJz0nICsgVVJJLmRlY29kZVF1ZXJ5KGt2WzFdLCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoLyYvZywgJyUyNicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0ICs9ICc/JyArIHEuc3Vic3RyaW5nKDEpO1xuXHRcdH1cblxuXHRcdHQgKz0gVVJJLmRlY29kZVF1ZXJ5KHVyaS5oYXNoKCksIHRydWUpO1xuXHRcdHJldHVybiB0O1xuXHR9O1xuXG5cdC8vIHJlc29sdmluZyByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgVVJMc1xuXHRwLmFic29sdXRlVG8gPSBmdW5jdGlvbihiYXNlKSB7XG5cdFx0dmFyIHJlc29sdmVkID0gdGhpcy5jbG9uZSgpO1xuXHRcdHZhciBwcm9wZXJ0aWVzID0gWydwcm90b2NvbCcsICd1c2VybmFtZScsICdwYXNzd29yZCcsICdob3N0bmFtZScsICdwb3J0J107XG5cdFx0dmFyIGJhc2VkaXIsIGksIHA7XG5cblx0XHRpZiAodGhpcy5fcGFydHMudXJuKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1VSTnMgZG8gbm90IGhhdmUgYW55IGdlbmVyYWxseSBkZWZpbmVkIGhpZXJhcmNoaWNhbCBjb21wb25lbnRzJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCEoYmFzZSBpbnN0YW5jZW9mIFVSSSkpIHtcblx0XHRcdGJhc2UgPSBuZXcgVVJJKGJhc2UpO1xuXHRcdH1cblxuXHRcdGlmICghcmVzb2x2ZWQuX3BhcnRzLnByb3RvY29sKSB7XG5cdFx0XHRyZXNvbHZlZC5fcGFydHMucHJvdG9jb2wgPSBiYXNlLl9wYXJ0cy5wcm90b2NvbDtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fcGFydHMuaG9zdG5hbWUpIHtcblx0XHRcdHJldHVybiByZXNvbHZlZDtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyAocCA9IHByb3BlcnRpZXNbaV0pOyBpKyspIHtcblx0XHRcdHJlc29sdmVkLl9wYXJ0c1twXSA9IGJhc2UuX3BhcnRzW3BdO1xuXHRcdH1cblxuXHRcdGlmICghcmVzb2x2ZWQuX3BhcnRzLnBhdGgpIHtcblx0XHRcdHJlc29sdmVkLl9wYXJ0cy5wYXRoID0gYmFzZS5fcGFydHMucGF0aDtcblx0XHRcdGlmICghcmVzb2x2ZWQuX3BhcnRzLnF1ZXJ5KSB7XG5cdFx0XHRcdHJlc29sdmVkLl9wYXJ0cy5xdWVyeSA9IGJhc2UuX3BhcnRzLnF1ZXJ5O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAocmVzb2x2ZWQuX3BhcnRzLnBhdGguc3Vic3RyaW5nKC0yKSA9PT0gJy4uJykge1xuXHRcdFx0cmVzb2x2ZWQuX3BhcnRzLnBhdGggKz0gJy8nO1xuXHRcdH1cblxuXHRcdGlmIChyZXNvbHZlZC5wYXRoKCkuY2hhckF0KDApICE9PSAnLycpIHtcblx0XHRcdGJhc2VkaXIgPSBiYXNlLmRpcmVjdG9yeSgpO1xuXHRcdFx0YmFzZWRpciA9IGJhc2VkaXIgPyBiYXNlZGlyIDogYmFzZS5wYXRoKCkuaW5kZXhPZignLycpID09PSAwID8gJy8nIDogJyc7XG5cdFx0XHRyZXNvbHZlZC5fcGFydHMucGF0aCA9IChiYXNlZGlyID8gKGJhc2VkaXIgKyAnLycpIDogJycpICsgcmVzb2x2ZWQuX3BhcnRzLnBhdGg7XG5cdFx0XHRyZXNvbHZlZC5ub3JtYWxpemVQYXRoKCk7XG5cdFx0fVxuXG5cdFx0cmVzb2x2ZWQuYnVpbGQoKTtcblx0XHRyZXR1cm4gcmVzb2x2ZWQ7XG5cdH07XG5cdHAucmVsYXRpdmVUbyA9IGZ1bmN0aW9uKGJhc2UpIHtcblx0XHR2YXIgcmVsYXRpdmUgPSB0aGlzLmNsb25lKCkubm9ybWFsaXplKCk7XG5cdFx0dmFyIHJlbGF0aXZlUGFydHMsIGJhc2VQYXJ0cywgY29tbW9uLCByZWxhdGl2ZVBhdGgsIGJhc2VQYXRoO1xuXG5cdFx0aWYgKHJlbGF0aXZlLl9wYXJ0cy51cm4pIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVVJOcyBkbyBub3QgaGF2ZSBhbnkgZ2VuZXJhbGx5IGRlZmluZWQgaGllcmFyY2hpY2FsIGNvbXBvbmVudHMnKTtcblx0XHR9XG5cblx0XHRiYXNlID0gbmV3IFVSSShiYXNlKS5ub3JtYWxpemUoKTtcblx0XHRyZWxhdGl2ZVBhcnRzID0gcmVsYXRpdmUuX3BhcnRzO1xuXHRcdGJhc2VQYXJ0cyA9IGJhc2UuX3BhcnRzO1xuXHRcdHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlLnBhdGgoKTtcblx0XHRiYXNlUGF0aCA9IGJhc2UucGF0aCgpO1xuXG5cdFx0aWYgKHJlbGF0aXZlUGF0aC5jaGFyQXQoMCkgIT09ICcvJykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdVUkkgaXMgYWxyZWFkeSByZWxhdGl2ZScpO1xuXHRcdH1cblxuXHRcdGlmIChiYXNlUGF0aC5jaGFyQXQoMCkgIT09ICcvJykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIGEgVVJJIHJlbGF0aXZlIHRvIGFub3RoZXIgcmVsYXRpdmUgVVJJJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbGF0aXZlUGFydHMucHJvdG9jb2wgPT09IGJhc2VQYXJ0cy5wcm90b2NvbCkge1xuXHRcdFx0cmVsYXRpdmVQYXJ0cy5wcm90b2NvbCA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbGF0aXZlUGFydHMudXNlcm5hbWUgIT09IGJhc2VQYXJ0cy51c2VybmFtZSB8fCByZWxhdGl2ZVBhcnRzLnBhc3N3b3JkICE9PSBiYXNlUGFydHMucGFzc3dvcmQpIHtcblx0XHRcdHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xuXHRcdH1cblxuXHRcdGlmIChyZWxhdGl2ZVBhcnRzLnByb3RvY29sICE9PSBudWxsIHx8IHJlbGF0aXZlUGFydHMudXNlcm5hbWUgIT09IG51bGwgfHwgcmVsYXRpdmVQYXJ0cy5wYXNzd29yZCAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHJlbGF0aXZlLmJ1aWxkKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlbGF0aXZlUGFydHMuaG9zdG5hbWUgPT09IGJhc2VQYXJ0cy5ob3N0bmFtZSAmJiByZWxhdGl2ZVBhcnRzLnBvcnQgPT09IGJhc2VQYXJ0cy5wb3J0KSB7XG5cdFx0XHRyZWxhdGl2ZVBhcnRzLmhvc3RuYW1lID0gbnVsbDtcblx0XHRcdHJlbGF0aXZlUGFydHMucG9ydCA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xuXHRcdH1cblxuXHRcdGlmIChyZWxhdGl2ZVBhdGggPT09IGJhc2VQYXRoKSB7XG5cdFx0XHRyZWxhdGl2ZVBhcnRzLnBhdGggPSAnJztcblx0XHRcdHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xuXHRcdH1cblxuXHRcdC8vIGRldGVybWluZSBjb21tb24gc3ViIHBhdGhcblx0XHRjb21tb24gPSBVUkkuY29tbW9uUGF0aChyZWxhdGl2ZVBhdGgsIGJhc2VQYXRoKTtcblxuXHRcdC8vIElmIHRoZSBwYXRocyBoYXZlIG5vdGhpbmcgaW4gY29tbW9uLCByZXR1cm4gYSByZWxhdGl2ZSBVUkwgd2l0aCB0aGUgYWJzb2x1dGUgcGF0aC5cblx0XHRpZiAoIWNvbW1vbikge1xuXHRcdFx0cmV0dXJuIHJlbGF0aXZlLmJ1aWxkKCk7XG5cdFx0fVxuXG5cdFx0dmFyIHBhcmVudHMgPSBiYXNlUGFydHMucGF0aFxuXHRcdFx0LnN1YnN0cmluZyhjb21tb24ubGVuZ3RoKVxuXHRcdFx0LnJlcGxhY2UoL1teXFwvXSokLywgJycpXG5cdFx0XHQucmVwbGFjZSgvLio/XFwvL2csICcuLi8nKTtcblxuXHRcdHJlbGF0aXZlUGFydHMucGF0aCA9IChwYXJlbnRzICsgcmVsYXRpdmVQYXJ0cy5wYXRoLnN1YnN0cmluZyhjb21tb24ubGVuZ3RoKSkgfHwgJy4vJztcblxuXHRcdHJldHVybiByZWxhdGl2ZS5idWlsZCgpO1xuXHR9O1xuXG5cdC8vIGNvbXBhcmluZyBVUklzXG5cdHAuZXF1YWxzID0gZnVuY3Rpb24odXJpKSB7XG5cdFx0dmFyIG9uZSA9IHRoaXMuY2xvbmUoKTtcblx0XHR2YXIgdHdvID0gbmV3IFVSSSh1cmkpO1xuXHRcdHZhciBvbmVfbWFwID0ge307XG5cdFx0dmFyIHR3b19tYXAgPSB7fTtcblx0XHR2YXIgY2hlY2tlZCA9IHt9O1xuXHRcdHZhciBvbmVfcXVlcnksIHR3b19xdWVyeSwga2V5O1xuXG5cdFx0b25lLm5vcm1hbGl6ZSgpO1xuXHRcdHR3by5ub3JtYWxpemUoKTtcblxuXHRcdC8vIGV4YWN0IG1hdGNoXG5cdFx0aWYgKG9uZS50b1N0cmluZygpID09PSB0d28udG9TdHJpbmcoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gZXh0cmFjdCBxdWVyeSBzdHJpbmdcblx0XHRvbmVfcXVlcnkgPSBvbmUucXVlcnkoKTtcblx0XHR0d29fcXVlcnkgPSB0d28ucXVlcnkoKTtcblx0XHRvbmUucXVlcnkoJycpO1xuXHRcdHR3by5xdWVyeSgnJyk7XG5cblx0XHQvLyBkZWZpbml0ZWx5IG5vdCBlcXVhbCBpZiBub3QgZXZlbiBub24tcXVlcnkgcGFydHMgbWF0Y2hcblx0XHRpZiAob25lLnRvU3RyaW5nKCkgIT09IHR3by50b1N0cmluZygpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcXVlcnkgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIGxlbmd0aCwgZXZlbiBpZiB0aGV5J3JlIHBlcm11dGVkXG5cdFx0aWYgKG9uZV9xdWVyeS5sZW5ndGggIT09IHR3b19xdWVyeS5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRvbmVfbWFwID0gVVJJLnBhcnNlUXVlcnkob25lX3F1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblx0XHR0d29fbWFwID0gVVJJLnBhcnNlUXVlcnkodHdvX3F1ZXJ5LCB0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtcblxuXHRcdGZvciAoa2V5IGluIG9uZV9tYXApIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbChvbmVfbWFwLCBrZXkpKSB7XG5cdFx0XHRcdGlmICghaXNBcnJheShvbmVfbWFwW2tleV0pKSB7XG5cdFx0XHRcdFx0aWYgKG9uZV9tYXBba2V5XSAhPT0gdHdvX21hcFtrZXldKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKCFhcnJheXNFcXVhbChvbmVfbWFwW2tleV0sIHR3b19tYXBba2V5XSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjaGVja2VkW2tleV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoa2V5IGluIHR3b19tYXApIHtcblx0XHRcdGlmIChoYXNPd24uY2FsbCh0d29fbWFwLCBrZXkpKSB7XG5cdFx0XHRcdGlmICghY2hlY2tlZFtrZXldKSB7XG5cdFx0XHRcdFx0Ly8gdHdvIGNvbnRhaW5zIGEgcGFyYW1ldGVyIG5vdCBwcmVzZW50IGluIG9uZVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cdC8vIHN0YXRlXG5cdHAuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzID0gZnVuY3Rpb24odikge1xuXHRcdHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyA9ICEhdjtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRwLmVzY2FwZVF1ZXJ5U3BhY2UgPSBmdW5jdGlvbih2KSB7XG5cdFx0dGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSA9ICEhdjtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHRyZXR1cm4gVVJJO1xufSkpOyIsIldvcmtmbG93ID0ge31cblxuQEltYWdlU2lnbiA9IHt9O1xuXG5AVHJhY2VzSGFuZGxlciA9IHt9O1xuXG5AVHJhY2VzVGVtcGxhdGUgPSB7fTtcblxuQEluc3RhbmNlZm9ybVRlbXBsYXRlID0ge307XG5cbkBJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZSA9IHt9O1xuXG5ASW5zdGFuY2VTaWduVGV4dCA9IHt9XG5cbkBSZWxhdGVkSW5zdGFuY2VzID0ge31cblxuQFJlbGF0ZWRSZWNvcmRzID0ge31cblxuQEluc3RhbmNlTWFjcm8gPSB7Y29udGV4dDoge319XG5cbkBUcmFjZXNNYW5hZ2VyID0ge307XG5cbkluc3RhbmNlU2lnblRleHQuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcgPSAoZmllbGRfZm9ybXVsYSktPlxuXHRyZXR1cm4gKGZpZWxkX2Zvcm11bGE/LmluZGV4T2YoXCJ7dHJhY2VzLlwiKSA+IC0xIHx8IGZpZWxkX2Zvcm11bGE/LmluZGV4T2YoXCJ7c2lnbmF0dXJlLnRyYWNlcy5cIikgPiAtMSB8fCBmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwie3lpamlhbmxhbjpcIikgPiAtMSB8fCBmaWVsZF9mb3JtdWxhPy5pbmRleE9mKFwie1xcXCJ5aWppYW5sYW5cXFwiOlwiKSA+IC0xIHx8IGZpZWxkX2Zvcm11bGE/LmluZGV4T2YoXCJ7J3lpamlhbmxhbic6XCIpID4gLTEpXG5cbkluc3RhbmNlU2lnblRleHQuaW5jbHVkZXNPcGluaW9uRmllbGQgPSAoZm9ybSwgZm9ybV92ZXJzaW9uKS0+XG5cdGZpZWxkX2Zvcm11bGFzID0gbmV3IEFycmF5KCk7XG5cblx0X2Zvcm1fdmVyc2lvbiA9IHt9XG5cblx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0X2Zvcm1fdmVyc2lvbiA9IHV1Zmxvd01hbmFnZXIuZ2V0Rm9ybVZlcnNpb24oZGIuZm9ybXMuZmluZE9uZSh7X2lkOiBmb3JtfSksIGZvcm1fdmVyc2lvbilcblx0ZWxzZVxuXHRcdF9mb3JtX3ZlcnNpb24gPSBkYi5mb3JtX3ZlcnNpb25zLmZpbmRPbmUoe19pZDogZm9ybV92ZXJzaW9uLCBmb3JtOiBmb3JtfSlcblxuXHRmaWVsZHMgPSBfZm9ybV92ZXJzaW9uPy5maWVsZHMgfHwgW11cblxuXHRmaWVsZHMuZm9yRWFjaCAoZiktPlxuXHRcdGlmIGYudHlwZSA9PSAndGFibGUnXG5cdFx0XHRjb25zb2xlLmxvZyAnaWdub3JlIG9waW5pb24gZmllbGQgaW4gdGFibGUnXG5cdFx0ZWxzZSBpZiBmLnR5cGUgPT0gJ3NlY3Rpb24nXG5cdFx0XHRmPy5maWVsZHM/LmZvckVhY2ggKGYxKS0+XG5cdFx0XHRcdGZpZWxkX2Zvcm11bGFzLnB1c2ggZjEuZm9ybXVsYVxuXHRcdGVsc2Vcblx0XHRcdGZpZWxkX2Zvcm11bGFzLnB1c2ggZi5mb3JtdWxhXG5cblx0Xy5zb21lIGZpZWxkX2Zvcm11bGFzLCAoZmllbGRfZm9ybXVsYSktPlxuXHRcdHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkX2Zvcm11bGEpXG5cbiIsIiAgICAgICAgICAgICBcblxuV29ya2Zsb3cgPSB7fTtcblxudGhpcy5JbWFnZVNpZ24gPSB7fTtcblxudGhpcy5UcmFjZXNIYW5kbGVyID0ge307XG5cbnRoaXMuVHJhY2VzVGVtcGxhdGUgPSB7fTtcblxudGhpcy5JbnN0YW5jZWZvcm1UZW1wbGF0ZSA9IHt9O1xuXG50aGlzLkluc3RhbmNlQXR0YWNobWVudFRlbXBsYXRlID0ge307XG5cbnRoaXMuSW5zdGFuY2VTaWduVGV4dCA9IHt9O1xuXG50aGlzLlJlbGF0ZWRJbnN0YW5jZXMgPSB7fTtcblxudGhpcy5SZWxhdGVkUmVjb3JkcyA9IHt9O1xuXG50aGlzLkluc3RhbmNlTWFjcm8gPSB7XG4gIGNvbnRleHQ6IHt9XG59O1xuXG50aGlzLlRyYWNlc01hbmFnZXIgPSB7fTtcblxuSW5zdGFuY2VTaWduVGV4dC5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyA9IGZ1bmN0aW9uKGZpZWxkX2Zvcm11bGEpIHtcbiAgcmV0dXJuIChmaWVsZF9mb3JtdWxhICE9IG51bGwgPyBmaWVsZF9mb3JtdWxhLmluZGV4T2YoXCJ7dHJhY2VzLlwiKSA6IHZvaWQgMCkgPiAtMSB8fCAoZmllbGRfZm9ybXVsYSAhPSBudWxsID8gZmllbGRfZm9ybXVsYS5pbmRleE9mKFwie3NpZ25hdHVyZS50cmFjZXMuXCIpIDogdm9pZCAwKSA+IC0xIHx8IChmaWVsZF9mb3JtdWxhICE9IG51bGwgPyBmaWVsZF9mb3JtdWxhLmluZGV4T2YoXCJ7eWlqaWFubGFuOlwiKSA6IHZvaWQgMCkgPiAtMSB8fCAoZmllbGRfZm9ybXVsYSAhPSBudWxsID8gZmllbGRfZm9ybXVsYS5pbmRleE9mKFwie1xcXCJ5aWppYW5sYW5cXFwiOlwiKSA6IHZvaWQgMCkgPiAtMSB8fCAoZmllbGRfZm9ybXVsYSAhPSBudWxsID8gZmllbGRfZm9ybXVsYS5pbmRleE9mKFwieyd5aWppYW5sYW4nOlwiKSA6IHZvaWQgMCkgPiAtMTtcbn07XG5cbkluc3RhbmNlU2lnblRleHQuaW5jbHVkZXNPcGluaW9uRmllbGQgPSBmdW5jdGlvbihmb3JtLCBmb3JtX3ZlcnNpb24pIHtcbiAgdmFyIF9mb3JtX3ZlcnNpb24sIGZpZWxkX2Zvcm11bGFzLCBmaWVsZHM7XG4gIGZpZWxkX2Zvcm11bGFzID0gbmV3IEFycmF5KCk7XG4gIF9mb3JtX3ZlcnNpb24gPSB7fTtcbiAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgIF9mb3JtX3ZlcnNpb24gPSB1dWZsb3dNYW5hZ2VyLmdldEZvcm1WZXJzaW9uKGRiLmZvcm1zLmZpbmRPbmUoe1xuICAgICAgX2lkOiBmb3JtXG4gICAgfSksIGZvcm1fdmVyc2lvbik7XG4gIH0gZWxzZSB7XG4gICAgX2Zvcm1fdmVyc2lvbiA9IGRiLmZvcm1fdmVyc2lvbnMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGZvcm1fdmVyc2lvbixcbiAgICAgIGZvcm06IGZvcm1cbiAgICB9KTtcbiAgfVxuICBmaWVsZHMgPSAoX2Zvcm1fdmVyc2lvbiAhPSBudWxsID8gX2Zvcm1fdmVyc2lvbi5maWVsZHMgOiB2b2lkIDApIHx8IFtdO1xuICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgdmFyIHJlZjtcbiAgICBpZiAoZi50eXBlID09PSAndGFibGUnKSB7XG4gICAgICByZXR1cm4gY29uc29sZS5sb2coJ2lnbm9yZSBvcGluaW9uIGZpZWxkIGluIHRhYmxlJyk7XG4gICAgfSBlbHNlIGlmIChmLnR5cGUgPT09ICdzZWN0aW9uJykge1xuICAgICAgcmV0dXJuIGYgIT0gbnVsbCA/IChyZWYgPSBmLmZpZWxkcykgIT0gbnVsbCA/IHJlZi5mb3JFYWNoKGZ1bmN0aW9uKGYxKSB7XG4gICAgICAgIHJldHVybiBmaWVsZF9mb3JtdWxhcy5wdXNoKGYxLmZvcm11bGEpO1xuICAgICAgfSkgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWVsZF9mb3JtdWxhcy5wdXNoKGYuZm9ybXVsYSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIF8uc29tZShmaWVsZF9mb3JtdWxhcywgZnVuY3Rpb24oZmllbGRfZm9ybXVsYSkge1xuICAgIHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkX2Zvcm11bGEpO1xuICB9KTtcbn07XG4iLCJkYi5pbnN0YW5jZV90YXNrcyA9IG5ldyBNZXRlb3IuQ29sbGVjdGlvbignaW5zdGFuY2VfdGFza3MnKVxuXG5kYi5pbnN0YW5jZV90YXNrcy5fc2ltcGxlU2NoZW1hID0gbmV3IFNpbXBsZVNjaGVtYVxuICAgIGluc3RhbmNlOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICB0cmFjZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaXNfZmluaXNoZWQ6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHVzZXI6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHVzZXJfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaGFuZGxlcjpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaGFuZGxlcl9uYW1lOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBoYW5kbGVyX29yZ2FuaXphdGlvbjpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaGFuZGxlcl9vcmdhbml6YXRpb25fbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWU6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIHN0YXJ0X2RhdGU6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICBkdWVfZGF0ZTpcbiAgICAgICAgdHlwZTogRGF0ZVxuICAgIGlzX3JlYWQ6XG4gICAgICAgIHR5cGU6IEJvb2xlYW5cbiAgICBpc19lcnJvcjpcbiAgICAgICAgdHlwZTogQm9vbGVhblxuICAgIHZhbHVlczpcbiAgICAgICAgdHlwZTogT2JqZWN0XG4gICAgZGVhZGxpbmU6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICByZW1pbmRfZGF0ZTpcbiAgICAgICAgdHlwZTogRGF0ZVxuICAgIHJlbWluZGVkX2NvdW50OlxuICAgICAgICB0eXBlOiBOdW1iZXJcbiAgICByZWFkX2RhdGU6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgbW9kaWZpZWQ6XG4gICAgICAgIHR5cGU6IERhdGVcbiAgICBtb2RpZmllZF9ieTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgc2lnbl9zaG93OlxuICAgICAgICB0eXBlOiBCb29sZWFuXG4gICAganVkZ2U6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIG5leHRfc3RlcHM6XG4gICAgICAgIHR5cGU6IEFycmF5XG4gICAgXCJuZXh0X3N0ZXBzLiRcIjpcbiAgICAgICAgdHlwZTogT2JqZWN0XG4gICAgXCJuZXh0X3N0ZXBzLiQuc3RlcFwiOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBcIm5leHRfc3RlcHMuJC51c2Vyc1wiOlxuICAgICAgICB0eXBlOiBbU3RyaW5nXVxuICAgIGZpbmlzaF9kYXRlOlxuICAgICAgICB0eXBlOiBEYXRlXG4gICAgY29zdF90aW1lOlxuICAgICAgICB0eXBlOiBOdW1iZXJcbiAgICBzcGFjZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgaW5zdGFuY2VfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgc3VibWl0dGVyOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBzdWJtaXR0ZXJfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgYXBwbGljYW50OlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBhcHBsaWNhbnRfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBzdWJtaXRfZGF0ZTpcbiAgICAgICAgdHlwZTogRGF0ZVxuICAgIGZsb3c6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGZsb3dfbmFtZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgZm9ybTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgc3RlcDpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgc3RlcF9uYW1lOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBjYXRlZ29yeV9uYW1lOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBpbnN0YW5jZV9zdGF0ZTpcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBmb3J3YXJkX2Zyb21faW5zdGFuY2U6XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgIGtleXdvcmRzOlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICBpc19hcmNoaXZlZDpcbiAgICAgICAgdHlwZTogQm9vbGVhblxuICAgIGNhdGVnb3J5OlxuICAgICAgICB0eXBlOiBTdHJpbmdcbiIsImRiLmF1dGhfdG9rZW5zID0gbmV3IE1ldGVvci5Db2xsZWN0aW9uKCdhdXRoX3Rva2VucycpIiwibWFya2VkID0gcmVxdWlyZShcIm1hcmtlZFwiKVxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUgPSB7fTtcblxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5zdGFuY2VfYXR0YWNobWVudCA9IFwiXCJcIlxuXHQ8dHI+XG5cdFx0PHRkIGNsYXNzPVwiaW5zLWF0dGFjaC12aWV3XCI+XG5cdFx0XHQ8YSBocmVmPVwie3tpbnNfYXR0YWNoX2Rvd25sb2FkX3VybCBfaWQgYWJzb2x1dGV9fVwiIGNsYXNzPVwiaW5zX2F0dGFjaF9ocmVmXCIgdGFyZ2V0PVwiX3BhcmVudFwiIGRhdGEtbmFtZT1cInt7dGhpcy5uYW1lfX1cIiBkYXRhLXR5cGU9XCJ7e3RoaXMub3JpZ2luYWwudHlwZX19XCIgZGF0YS1pZD1cInt7X2lkfX1cIj57e3RoaXMubmFtZX19PC9hPlxuXHRcdDwvdGQ+XG5cdDwvdHI+XG5cIlwiXCJcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmFmU2VsZWN0VXNlclJlYWQgPSBcIlwiXCJcblx0PGRpdiBjbGFzcz0nc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCc+e3t2YWx1ZX19PC9kaXY+XG5cIlwiXCJcblxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuYWZGb3JtR3JvdXBSZWFkID0gXCJcIlwiXG5cdDxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAnPlxuXHRcdHt7I3dpdGggZ2V0RmllbGQgdGhpcy5uYW1lfX1cblx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdzZWN0aW9uJ319XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0nc2VjdGlvbiBjYWxsb3V0IGNhbGxvdXQtZGVmYXVsdCc+XG5cdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tmX2xhYmVsIHRoaXN9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHQ8cD57e3tkZXNjcmlwdGlvbn19fTwvcD5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICd0YWJsZSd9fVxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1kZWZhdWx0IHN0ZWVkb3MtdGFibGVcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCIgc3R5bGU9XCJwYWRkaW5nOjBweDtcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIiA+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPSdjb250cm9sLWxhYmVsJz57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJkZXNjcmlwdGlvblwiPnt7e2Rlc2NyaXB0aW9ufX19PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInJlYWRvbmx5LXRhYmxlXCIgc3R5bGU9XCJwYWRkaW5nOjBweDtvdmVyZmxvdy14OmF1dG87XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgdHlwZT0ndGFibGUnIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtY29uZGVuc2VkIGF1dG9mb3JtLXRhYmxlXCIgc3R5bGU9J21hcmdpbi1ib3R0b206MHB4Oycge3t0aGlzLmF0dHN9fSBpZD1cInt7dGhpcy5jb2RlfX1UYWJsZVwiIG5hbWU9XCJ7e3RoaXMuY29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3t0aGlzLm5hbWV9fVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGhlYWQgaWQ9XCJ7e3RoaXMubmFtZX19VGhlYWRcIiBuYW1lPVwie3t0aGlzLm5hbWV9fVRoZWFkXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3t7Z2V0VGFibGVUaGVhZCB0aGlzfX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGhlYWQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keSBpZD1cInt7dGhpcy5uYW1lfX1UYm9keVwiIG5hbWU9XCJ7e3RoaXMubmFtZX19VGJvZHlcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZUJvZHkgdGhpc319fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHR7eyNpZiBzaG93TGFiZWx9fVxuXHRcdFx0XHRcdFx0PGxhYmVsPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHR7ey9pZn19XG5cdFx0XHRcdFx0e3sjaWYgaXNUZXh0YXJlYSB0aGlzfX1cblx0XHRcdFx0XHRcdDxwIGNsYXNzPSd7e2dldENmQ2xhc3MgdGhpc319IGZvcm0tY29udHJvbCcgcmVhZG9ubHkgZGlzYWJsZWQ+e3t7Z2V0VmFsdWUgY29kZX19fTwvcD5cblx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0ne3tnZXRDZkNsYXNzIHRoaXN9fSBmb3JtLWNvbnRyb2wnIHJlYWRvbmx5IGRpc2FibGVkPnt7e2dldFZhbHVlIGNvZGV9fX08L2Rpdj5cblx0XHRcdFx0XHR7ey9pZn19XG5cdFx0XHRcdHt7L2lmfX1cblx0XHRcdHt7L2lmfX1cblx0XHR7ey93aXRofX1cblx0PC9kaXY+XG5cIlwiXCJcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmFmRm9ybUdyb3VwID0gXCJcIlwiXG5cblx0e3sjd2l0aCBnZXRGaWVsZCB0aGlzLm5hbWV9fVxuXHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3NlY3Rpb24nfX1cblx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdzZWN0aW9uIGNhbGxvdXQgY2FsbG91dC1kZWZhdWx0Jz5cblx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2ZfbGFiZWwgdGhpc319PC9sYWJlbD5cblx0XHRcdFx0XHRcdDxwPnt7e2Rlc2NyaXB0aW9ufX19PC9wPlxuXHRcdFx0XHRcdDwvZGl2PlxuICBcdFx0XHRcdDwvZGl2PlxuXHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3RhYmxlJ319XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHQgc3RlZWRvcy10YWJsZVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIiBzdHlsZT1cInBhZGRpbmc6MHB4O1wiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiID5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9J2NvbnRyb2wtbGFiZWwnPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t7ZGVzY3JpcHRpb259fX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicmVhZG9ubHktdGFibGVcIiBzdHlsZT1cInBhZGRpbmc6MHB4O292ZXJmbG93LXg6YXV0bztcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB0eXBlPSd0YWJsZScgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1jb25kZW5zZWQgYXV0b2Zvcm0tdGFibGVcIiBzdHlsZT0nbWFyZ2luLWJvdHRvbTowcHg7JyB7e3RoaXMuYXR0c319IGlkPVwie3t0aGlzLmNvZGV9fVRhYmxlXCIgbmFtZT1cInt7dGhpcy5jb2RlfX1cIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e3RoaXMubmFtZX19XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0aGVhZCBpZD1cInt7dGhpcy5uYW1lfX1UaGVhZFwiIG5hbWU9XCJ7e3RoaXMubmFtZX19VGhlYWRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZVRoZWFkIHRoaXN9fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC90aGVhZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5IGlkPVwie3t0aGlzLm5hbWV9fVRib2R5XCIgbmFtZT1cInt7dGhpcy5uYW1lfX1UYm9keVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7e2dldFRhYmxlQm9keSB0aGlzfX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdpbnB1dCd9fVxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBkYXRhLXJlcXVpcmVkPVwie3sjaWYgaXNfcmVxdWlyZWR9fXRydWV7ey9pZn19XCI+XG5cdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0e3sjaWYgaXNfdGV4dGFyZWF9fVxuXHRcdFx0XHRcdFx0XHRcdDx0ZXh0YXJlYSB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIge3tnZXRQZXJtaXNzaW9ucyBjb2RlfX0gZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPjwvdGV4dGFyZWE+XG5cdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0e3sjdW5sZXNzIGlzX3RleHRhcmVhfX1cblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIge3tnZXRQZXJtaXNzaW9ucyBjb2RlfX0gZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHR7ey91bmxlc3N9fVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdudW1iZXInfX1cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJudW1iZXJcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdkYXRlJ319XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIHRpdGxlPVwie3tnZXRMYWJlbCBjb2RlfX1cIiBuYW1lPVwie3tjb2RlfX1cIiBkYXRhLXR5cGU9XCJkYXRlXCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdkYXRlVGltZSd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIjdaUW5Ec1hCR29oWk1ldEE1XCIgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIgZGF0YS10eXBlPSdkYXRldGltZScgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdwYXNzd29yZCd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgdGl0bGU9XCJ7e2dldExhYmVsIGNvZGV9fVwiIG5hbWU9XCJ7e2NvZGV9fVwiIGRhdGEtc2NoZW1hLWtleT1cInt7Z2V0TGFiZWwgY29kZX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnc2VsZWN0J319XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzZWxlY3QgbmFtZT1cInt7Y29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNlYWNoIG9wdGlvbnMgdGhpc319XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG9wdGlvbiB2YWx1ZT1cInt7dmFsdWV9fVwiPnt7bGFiZWx9fTwvb3B0aW9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc2VsZWN0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdyYWRpbyd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIjdaUW5Ec1hCR29oWk1ldEE1XCIgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWYtcmFkaW8tZ3JvdXBcIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e2dldExhYmVsIGNvZGV9fVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cbiAgICAgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwicmFkaW8taW5saW5lIGZpeC1pbmRlbnRcIj48aW5wdXQgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJ7e3ZhbHVlfX1cIiBuYW1lPVwie3suLi9jb2RlfX1cIiBjbGFzcz1cInJhZGlvLWlubGluZSBmaXgtaW5kZW50XCI+IHt7bGFiZWx9fTwvbGFiZWw+XG4gICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cbiAgICBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnbXVsdGlTZWxlY3QnfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImFmLWNoZWNrYm94LWdyb3VwXCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2VhY2ggb3B0aW9ucyB0aGlzfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWlubGluZSBmaXgtaW5kZW50XCI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwie3t2YWx1ZX19XCIgbmFtZT1cInt7Li4vY29kZX19XCIgY2xhc3M9XCJjaGVja2JveC1pbmxpbmUgZml4LWluZGVudFwiPiB7e2xhYmVsfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svZWFjaH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3VybCd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInVybFwiIHRpdGxlPVwie3tnZXRMYWJlbCBjb2RlfX1cIiBuYW1lPVwie3tjb2RlfX1cIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e2dldExhYmVsIGNvZGV9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ2VtYWlsJ319XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiN1pRbkRzWEJHb2haTWV0QTVcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwiZW1haWxcIiB0aXRsZT1cInt7Z2V0TGFiZWwgY29kZX19XCIgbmFtZT1cInt7Y29kZX19XCIgZGF0YS1zY2hlbWEta2V5PVwie3tnZXRMYWJlbCBjb2RlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdjaGVja2JveCd9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XCI3WlFuRHNYQkdvaFpNZXRBNVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiBkYXRhLXNjaGVtYS1rZXk9XCJ7e2dldExhYmVsIGNvZGV9fVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIG5hbWU9XCJ7e2NvZGV9fVwiIGNsYXNzPVwiY2hlY2tib3gtaW5saW5lIGZpeC1pbmRlbnRcIj48L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cIjdaUW5Ec1hCR29oWk1ldEE1XCIgY2xhc3M9XCJjb250cm9sLWxhYmVsXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J3t7Z2V0Q2ZDbGFzcyB0aGlzfX0gZm9ybS1jb250cm9sJyByZWFkb25seSBkaXNhYmxlZD57e3tnZXRWYWx1ZSBjb2RlfX19PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0XHRcdHt7L2lmfX1cblx0XHRcdFx0e3svaWZ9fVxuXHRcdFx0e3svaWZ9fVxuXHRcdHt7L3dpdGh9fVxuXCJcIlwiXG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUgPSAodGVtcGFsdGVOYW1lLCBzdGVlZG9zRGF0YSkgLT5cblx0dGVtcGxhdGUgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGVbdGVtcGFsdGVOYW1lXVxuXG5cdHRlbXBsYXRlQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHRlbXBsYXRlLCB7aXNCb2R5OiB0cnVlfSk7XG5cblx0dGVtcGxhdGVSZW5kZXJGdW5jdGlvbiA9IGV2YWwodGVtcGxhdGVDb21waWxlZCk7XG5cblx0VGVtcGxhdGVbdGVtcGFsdGVOYW1lXSA9IG5ldyBCbGF6ZS5UZW1wbGF0ZSh0ZW1wYWx0ZU5hbWUsIHRlbXBsYXRlUmVuZGVyRnVuY3Rpb24pO1xuXHRUZW1wbGF0ZVt0ZW1wYWx0ZU5hbWVdLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGVbdGVtcGFsdGVOYW1lXS5oZWxwZXJzIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnNcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZUluc3RhbmNlU2lnblRleHQgPSAoc3RlZWRvc0RhdGEpLT5cblx0aW5zdGFuY2VTaWduVGV4dEh0bWwgPSBfZ2V0Vmlld0h0bWwoJ2NsaWVudC92aWV3cy9pbnN0YW5jZS9pbnN0YW5jZV9zaWduX3RleHQuaHRtbCcpXG5cblx0aW5zdGFuY2VTaWduVGV4dENvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShpbnN0YW5jZVNpZ25UZXh0SHRtbCwge2lzQm9keTogdHJ1ZX0pO1xuXG5cdGluc3RhbmNlU2lnblRleHRSZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW5zdGFuY2VTaWduVGV4dENvbXBpbGVkKTtcblxuXHRUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiaW5zdGFuY2VTaWduVGV4dFwiLCBpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb24pO1xuXHRUZW1wbGF0ZS5pbnN0YW5jZVNpZ25UZXh0LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGUuaW5zdGFuY2VTaWduVGV4dC5oZWxwZXJzIEluc3RhbmNlU2lnblRleHQuaGVscGVyc1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW1hZ2VTaWduID0gKHN0ZWVkb3NEYXRhKSAtPlxuXHRpbWFnZVNpZ25IdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvaW1hZ2Vfc2lnbi5odG1sJylcblx0aW1hZ2VTaWduQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKGltYWdlU2lnbkh0bWwsIHtpc0JvZHk6IHRydWV9KTtcblx0aW1hZ2VTaWduUmVuZGVyRnVuY3Rpb24gPSBldmFsKGltYWdlU2lnbkNvbXBpbGVkKTtcblx0VGVtcGxhdGUuaW1hZ2VTaWduID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiaW1hZ2VTaWduXCIsIGltYWdlU2lnblJlbmRlckZ1bmN0aW9uKTtcblx0VGVtcGxhdGUuaW1hZ2VTaWduLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGUuaW1hZ2VTaWduLmhlbHBlcnMgSW1hZ2VTaWduLmhlbHBlcnNcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZVRyYWNlc0hhbmxkZXIgPSAoc3RlZWRvc0RhdGEpIC0+XG5cdHRyYWNlc0hhbmxkZXJIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzX2hhbmRsZXIuaHRtbCcpXG5cdHRyYWNlc0hhbmxkZXJDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUodHJhY2VzSGFubGRlckh0bWwsIHtpc0JvZHk6IHRydWV9KTtcblx0dHJhY2VzSGFubGRlclJlbmRlckZ1bmN0aW9uID0gZXZhbCh0cmFjZXNIYW5sZGVyQ29tcGlsZWQpO1xuXHRUZW1wbGF0ZS5pbnN0YW5jZV90cmFjZXNfaGFuZGxlciA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcImluc3RhbmNlX3RyYWNlc19oYW5kbGVyXCIsIHRyYWNlc0hhbmxkZXJSZW5kZXJGdW5jdGlvbik7XG5cdFRlbXBsYXRlLmluc3RhbmNlX3RyYWNlc19oYW5kbGVyLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblx0VGVtcGxhdGUuaW5zdGFuY2VfdHJhY2VzX2hhbmRsZXIuaGVscGVycyBUcmFjZXNIYW5kbGVyLmhlbHBlcnNcblxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5pdCA9IChzdGVlZG9zRGF0YSkgLT5cblx0SW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZShcImFmU2VsZWN0VXNlclJlYWRcIiwgc3RlZWRvc0RhdGEpO1xuXG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJhZkZvcm1Hcm91cFwiLCBzdGVlZG9zRGF0YSk7XG5cblx0SW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZShcImFmRm9ybUdyb3VwUmVhZFwiLCBzdGVlZG9zRGF0YSk7XG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJpbnN0YW5jZV9hdHRhY2htZW50XCIsIHthYnNvbHV0ZTogc3RlZWRvc0RhdGEuYWJzb2x1dGV9KTtcblx0XHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW1hZ2VTaWduKHN0ZWVkb3NEYXRhKVxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGVUcmFjZXNIYW5sZGVyKHN0ZWVkb3NEYXRhKTtcblx0XHRJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW5zdGFuY2VTaWduVGV4dChzdGVlZG9zRGF0YSlcblxuZ2V0TGlua1RleHQgPSAoaXRlbSwgbGFiZWwsIGRldGFpbF91cmwpLT5cblx0aWYgZGV0YWlsX3VybFxuXHRcdGRldGFpbF91cmwgPSBkZXRhaWxfdXJsLnJlcGxhY2UoXCJ7X2lkfVwiLCBpdGVtLl9pZClcblx0XHRpZiAhL15odHRwKHM/KTpcXC9cXC8vLnRlc3QoZGV0YWlsX3VybClcblx0XHRcdGRldGFpbF91cmwgPSBTdGVlZG9zLmFic29sdXRlVXJsKGRldGFpbF91cmwpXG5cdFx0cmV0dXJuICc8YSBocmVmPVwiJytkZXRhaWxfdXJsKydcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nK2xhYmVsKyc8L2E+Jztcblx0ZWxzZVxuXHRcdHJldHVybiBsYWJlbFxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUgPSAodmFsdWUsIGZpZWxkLCBsb2NhbGUsIHV0Y09mZnNldCkgLT5cblx0aWYgIXZhbHVlICYmIHZhbHVlICE9IGZhbHNlXG5cdFx0cmV0dXJuICcnXG5cdGlmIFtcInNlbGVjdFwiLCBcIm11bHRpU2VsZWN0XCIsIFwicmFkaW9cIl0uaW5kZXhPZihmaWVsZC50eXBlKSA+IC0xXG5cdFx0ZmllbGRPcHRpb25zID0gZmllbGQub3B0aW9ucy5zcGxpdChcIlxcblwiKS5tYXAgKG4pLT5cblx0XHRcdGl0ZW1TcGxpdHMgPSBuLnNwbGl0KFwiOlwiKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bGFiZWw6IGl0ZW1TcGxpdHNbMF0sXG5cdFx0XHRcdHZhbHVlOiBpdGVtU3BsaXRzWzFdIHx8IG5cblx0XHRcdH1cblx0c3dpdGNoIGZpZWxkLnR5cGVcblx0XHR3aGVuICdlbWFpbCdcblx0XHRcdHZhbHVlID0gaWYgdmFsdWUgdGhlbiAnPGEgaHJlZj1cXCdtYWlsdG86JyArIHZhbHVlICsgJ1xcJz4nICsgdmFsdWUgKyAnPC9hPicgZWxzZSAnJ1xuXHRcdHdoZW4gJ3VybCdcblx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdGlmIHZhbHVlLmluZGV4T2YoXCJodHRwXCIpID09IDBcblx0XHRcdFx0XHR0cnlcblx0XHRcdFx0XHRcdHZhbHVlID0gXCI8YSBocmVmPSdcIiArIGVuY29kZVVSSSh2YWx1ZSkgKyBcIicgdGFyZ2V0PSdfYmxhbmsnPlwiICsgdmFsdWUgKyBcIjwvYT5cIjtcblx0XHRcdFx0XHRjYXRjaCBlXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IFwiPGEgaHJlZj0nJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuXG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR2YWx1ZSA9IFwiPGEgaHJlZj0naHR0cDovL1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9ICcnXG5cdFx0d2hlbiAnZ3JvdXAnXG5cdFx0XHRpZiBmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlPy5nZXRQcm9wZXJ0eShcImZ1bGxuYW1lXCIpLnRvU3RyaW5nKClcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8uZnVsbG5hbWVcblx0XHR3aGVuICd1c2VyJ1xuXHRcdFx0aWYgZmllbGQuaXNfbXVsdGlzZWxlY3Rcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8uZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKClcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8ubmFtZVxuXHRcdHdoZW4gJ3Bhc3N3b3JkJ1xuXHRcdFx0dmFsdWUgPSAnKioqKioqJ1xuXHRcdHdoZW4gJ2NoZWNrYm94J1xuXHRcdFx0aWYgdmFsdWUgJiYgdmFsdWUgIT0gJ2ZhbHNlJ1xuXHRcdFx0XHR2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiLCB7fSwgbG9jYWxlKVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X25vXCIsIHt9LCBsb2NhbGUpXG5cdFx0d2hlbiAnZGF0ZVRpbWUnXG5cdFx0XHRpZiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPT0gMTZcblx0XHRcdFx0dCA9IHZhbHVlLnNwbGl0KFwiVFwiKVxuXHRcdFx0XHR0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuXHRcdFx0XHR0MSA9IHRbMV0uc3BsaXQoXCI6XCIpO1xuXG5cdFx0XHRcdHllYXIgPSB0MFswXTtcblx0XHRcdFx0bW9udGggPSB0MFsxXTtcblx0XHRcdFx0ZGF0ZSA9IHQwWzJdO1xuXHRcdFx0XHRob3VycyA9IHQxWzBdO1xuXHRcdFx0XHRzZWNvbmRzID0gdDFbMV07XG5cblx0XHRcdFx0dmFsdWUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRhdGUsIGhvdXJzLCBzZWNvbmRzKVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuXG5cdFx0XHR2YWx1ZSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXREYXRlKHZhbHVlLCB1dGNPZmZzZXQpO1xuXHRcdHdoZW4gJ3RpbWUnXG5cdFx0XHRpZiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPT0gMTZcblx0XHRcdFx0dCA9IHZhbHVlLnNwbGl0KFwiVFwiKVxuXHRcdFx0XHR0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuXHRcdFx0XHR0MSA9IHRbMV0uc3BsaXQoXCI6XCIpO1xuXG5cdFx0XHRcdHllYXIgPSB0MFswXTtcblx0XHRcdFx0bW9udGggPSB0MFsxXTtcblx0XHRcdFx0ZGF0ZSA9IHQwWzJdO1xuXHRcdFx0XHRob3VycyA9IHQxWzBdO1xuXHRcdFx0XHRzZWNvbmRzID0gdDFbMV07XG5cblx0XHRcdFx0dmFsdWUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRhdGUsIGhvdXJzLCBzZWNvbmRzKVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHR2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuXG5cdFx0XHR2YWx1ZSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXRUaW1lKHZhbHVlKTtcblx0XHR3aGVuICdpbnB1dCdcblx0XHRcdGlmIGZpZWxkLmlzX3RleHRhcmVhXG5cdFx0XHRcdHZhbHVlID0gdmFsdWVcblx0XHR3aGVuICdzZWxlY3QnXG5cdFx0XHRzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKChpdGVtKSAtPiByZXR1cm4gaXRlbS52YWx1ZSA9PSB2YWx1ZSlcblx0XHRcdGlmIHNlbGVjdGVkT3B0aW9uXG5cdFx0XHRcdHZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubGFiZWxcblx0XHR3aGVuICdyYWRpbydcblx0XHRcdHNlbGVjdGVkT3B0aW9uID0gZmllbGRPcHRpb25zLmZpbmQoKGl0ZW0pIC0+IHJldHVybiBpdGVtLnZhbHVlID09IHZhbHVlKVxuXHRcdFx0aWYgc2VsZWN0ZWRPcHRpb25cblx0XHRcdFx0dmFsdWUgPSBzZWxlY3RlZE9wdGlvbi5sYWJlbFxuXHRcdHdoZW4gJ211bHRpU2VsZWN0J1xuXHRcdFx0c3BsaXRlZFZhbHVlcyA9IHZhbHVlLnNwbGl0KFwiLFwiKVxuXHRcdFx0c2VsZWN0ZWRPcHRpb25zID0gZmllbGRPcHRpb25zLmZpbHRlcigoaXRlbSkgLT4gcmV0dXJuIHNwbGl0ZWRWYWx1ZXMuaW5kZXhPZihpdGVtLnZhbHVlKSA+IC0xKVxuXHRcdFx0aWYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aFxuXHRcdFx0XHR2YWx1ZSA9IHNlbGVjdGVkT3B0aW9ucy5tYXAoKGl0ZW0pIC0+IHJldHVybiBpdGVtLmxhYmVsKS5qb2luKFwiLFwiKVxuXHRcdHdoZW4gJ251bWJlcidcblx0XHRcdGlmIHZhbHVlIG9yIHZhbHVlID09IDBcblx0XHRcdFx0aWYgZmllbGQuaXNfcGVyY2VudFxuXHRcdFx0XHRcdHZhbHVlID0gU3RlZWRvcy5udW1iZXJUb1BlcmNlbnRTdHJpbmcgdmFsdWUsIGZpZWxkLmRpZ2l0c1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dmFsdWUgPSBTdGVlZG9zLm51bWJlclRvU3RyaW5nIHZhbHVlLCBmaWVsZC5kaWdpdHNcblx0XHR3aGVuICdvZGF0YSdcblx0XHRcdGRldGFpbF91cmwgPSBmaWVsZC5kZXRhaWxfdXJsXG5cdFx0XHRpZiBmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHR2YWx1ZSA9IF8ubWFwIHZhbHVlLCAoaXRlbSktPlxuXHRcdFx0XHRcdHJldHVybiBnZXRMaW5rVGV4dChpdGVtLCBpdGVtWydAbGFiZWwnXSwgZGV0YWlsX3VybClcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSBnZXRMaW5rVGV4dCh2YWx1ZSwgdmFsdWVbJ0BsYWJlbCddLCBkZXRhaWxfdXJsKVxuXHRcdHdoZW4gJ2ltYWdlJ1xuXHRcdFx0aWYgZmllbGQuaXNfbXVsdGlzZWxlY3Rcblx0XHRcdFx0dmFsdWUgPSBfLm1hcCB2YWx1ZSwgKGl0ZW0pLT5cblx0XHRcdFx0XHRyZXR1cm4gJzxkaXYgY2xhc3M9XCJhbnRkLUltYWdlQ29udHJvbC1pdGVtIGlzLXVwbG9hZGVkXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZSBhbnRkLUltYWdlLS10aHVtYiBhbnRkLUltYWdlQ29udHJvbC1pbWFnZVwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYldyYXBcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYlwiPjxpbWcgY2xhc3M9XCJhbnRkLUltYWdlLWltYWdlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3JjPVwiL2FwaS9maWxlcy9pbWFnZXMvJytpdGVtKydcIj48L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj4nXG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuam9pbihcIlwiKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0dmFsdWUgPSAnPGRpdiBjbGFzcz1cImFudGQtSW1hZ2VDb250cm9sLWl0ZW0gaXMtdXBsb2FkZWRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlIGFudGQtSW1hZ2UtLXRodW1iIGFudGQtSW1hZ2VDb250cm9sLWltYWdlXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iV3JhcFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJhbnRkLUltYWdlLXRodW1iXCI+PGltZyBjbGFzcz1cImFudGQtSW1hZ2UtaW1hZ2VcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIvYXBpL2ZpbGVzL2ltYWdlcy8nK3ZhbHVlKydcIj48L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj4nXG5cdFx0d2hlbiAnZmlsZSdcblx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdGlmICFmaWVsZC5pc19tdWx0aXNlbGVjdFxuXHRcdFx0XHRcdHZhbHVlID0gW3ZhbHVlXVxuXHRcdFx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdFx0XHRyZXMgPSBTdGVlZG9zLmF1dGhSZXF1ZXN0KCcvYXBpL3YxL2Nmc19maWxlc19maWxlcmVjb3JkP2ZpbHRlcnM9W1tcIl9pZFwiLFwiaW5cIiwgJytKU09OLnN0cmluZ2lmeSh2YWx1ZSkrJ11dJmZpZWxkcz1bXCJfaWRcIixcIm9yaWdpbmFsXCJdJywge2FzeW5jOmZhbHNlfSlcblx0XHRcdFx0XHRyZWNvcmRzID0gcmVzLmRhdGEuaXRlbXNcblx0XHRcdFx0ZWxzZSBpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdFx0XHRyZWNvcmRzID0gU3RlZWRvcy5vYmplY3RGaW5kKFwiY2ZzX2ZpbGVzX2ZpbGVyZWNvcmRcIiwgeyBmaWx0ZXJzOiBbW1wiX2lkXCIsICdpbicsIHZhbHVlXV0sIGZpZWxkczogW1wiX2lkXCIsIFwib3JpZ2luYWxcIl0gfSk7XG5cblx0XHRcdFx0dmFsdWUgPSBfLm1hcCByZWNvcmRzLCAoaXRlbSktPlxuXHRcdFx0XHRcdGZpbGVOYW1lID0gaXRlbS5vcmlnaW5hbC5uYW1lO1xuXHRcdFx0XHRcdGZpbGVVcmwgPSBTdGVlZG9zLmFic29sdXRlVXJsKCcvYXBpL2ZpbGVzL2ZpbGVzLycraXRlbS5faWQpO1xuXHRcdFx0XHRcdG1hdGNoID0gZmlsZU5hbWUubWF0Y2goL1xcLihbXlxcLl0rKSQvKTtcblx0XHRcdFx0XHRmaWxlVHlwZSA9IG1hdGNoWzBdIHx8IFwiXCI7XG5cdFx0XHRcdFx0ZmlsZVByZXZpZXdIdG1sID0gJyc7XG5cdFx0XHRcdFx0aWYgW1wiLnBkZlwiLCBcIi5qcGdcIiwgXCIuanBlZ1wiLCBcIi5wbmdcIiwgXCIuZ2lmXCJdLmluZGV4T2YoZmlsZVR5cGUpID4gLTFcblx0XHRcdFx0XHRcdGZpbGVQcmV2aWV3SHRtbCA9IFwiJmVuc3A7PGEgaHJlZj0nI3tmaWxlVXJsfScgdGFyZ2V0PSdfYmxhbmsnIGNsYXNzPSdhbnRkLUxpbmsnPjxzcGFuIGNsYXNzPSdhbnRkLVRwbEZpZWxkJz48c3Bhbj7pooTop4g8L3NwYW4+PC9zcGFuPjwvYT5cIlxuXHRcdFx0XHRcdHJldHVybiBcIjxkaXY+PGEgaHJlZj0nI3tmaWxlVXJsKyc/ZG93bmxvYWQ9dHJ1ZSd9JyB0YXJnZXQ9J19ibGFuayc+I3tmaWxlTmFtZX08L2E+ICN7ZmlsZVByZXZpZXdIdG1sID8gZmlsZVByZXZpZXdIdG1sIDogJyd9PC9kaXY+XCJcblxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLmpvaW4oXCJcIik7XG5cdFx0d2hlbiAnbG9va3VwJ1xuXHRcdFx0aWYgdmFsdWVcblx0XHRcdFx0aWYgIWZpZWxkLmlzX211bHRpc2VsZWN0XG5cdFx0XHRcdFx0dmFsdWUgPSBbdmFsdWVdXG5cdFx0XHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0XHRcdHVpU2NoZW1hID0gQ3JlYXRvci5nZXRPYmplY3QoZmllbGQucmVmZXJlbmNlX3RvKVxuXHRcdFx0XHRcdG5hbWVGaWVsZCA9IHVpU2NoZW1hPy5OQU1FX0ZJRUxEX0tFWSB8fCAnbmFtZSdcblx0XHRcdFx0XHRyZXMgPSBTdGVlZG9zLmF1dGhSZXF1ZXN0KCcvYXBpL3YxLycrZmllbGQucmVmZXJlbmNlX3RvKyc/ZmlsdGVycz1bW1wiJysoZmllbGQucmVmZXJlbmNlX3RvX2ZpZWxkIHx8ICdfaWQnKSsnXCIsXCJpblwiLCAnK0pTT04uc3RyaW5naWZ5KHZhbHVlKSsnXV0mZmllbGRzPVtcIl9pZFwiLFwiJytuYW1lRmllbGQrJ1wiXScsIHthc3luYzpmYWxzZX0pXG5cdFx0XHRcdFx0cmVjb3JkcyA9IHJlcy5kYXRhLml0ZW1zXG5cdFx0XHRcdGVsc2UgaWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRcdFx0bmFtZUZpZWxkID0gU3RlZWRvcy5nZXRPYmplY3ROYW1lRmllbGRLZXkoZmllbGQucmVmZXJlbmNlX3RvKTtcblx0XHRcdFx0XHRyZWNvcmRzID0gU3RlZWRvcy5vYmplY3RGaW5kKGZpZWxkLnJlZmVyZW5jZV90bywgeyBmaWx0ZXJzOiBbWyhmaWVsZC5yZWZlcmVuY2VfdG9fZmllbGQgfHwgJ19pZCcpLCAnaW4nLCB2YWx1ZV1dLCBmaWVsZHM6IFtcIl9pZFwiLCBuYW1lRmllbGRdIH0pO1xuXHRcdFx0XHR2YWx1ZSA9IF8ubWFwIHJlY29yZHMsIChpdGVtKS0+XG5cdFx0XHRcdFx0cmV0dXJuIFwiPGEgaHJlZj0nI3tTdGVlZG9zLmFic29sdXRlVXJsKCcvYXBwLy0vJytmaWVsZC5yZWZlcmVuY2VfdG8rJy92aWV3LycraXRlbS5faWQpfScgdGFyZ2V0PSdfYmxhbmsnPiN7aXRlbVtuYW1lRmllbGRdfTwvYT5cIlxuXG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuam9pbihcIiAsIFwiKTtcdFxuXHRcdHdoZW4gJ2h0bWwnXG5cdFx0XHR2YWx1ZSA9IGlmIHZhbHVlIHRoZW4gXCI8ZGl2IGNsYXNzPVxcXCJzdGVlZG9zLWh0bWxcXFwiPiN7dmFsdWV9PC9kaXY+XCIgZWxzZSAnJ1xuXG5cdHJldHVybiB2YWx1ZTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldExhYmVsID0gKGZpZWxkcywgY29kZSkgLT5cblx0ZmllbGQgPSBmaWVsZHMuZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgY29kZSlcblx0aWYgZmllbGRcblx0XHRpZiBmaWVsZC5uYW1lXG5cdFx0XHRyZXR1cm4gZmllbGQubmFtZVxuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBmaWVsZC5jb2RlXG5cblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlRm9ybVZlcnNpb24gPSAoaW5zdGFuY2UpLT5cblx0Zm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoaW5zdGFuY2UuZm9ybSk7XG5cblx0Zm9ybV92ZXJzaW9uID0ge31cblxuXHRmb3JtX2ZpZWxkcyA9IFtdO1xuXG5cdGlmIGZvcm0uY3VycmVudC5faWQgPT0gaW5zdGFuY2UuZm9ybV92ZXJzaW9uXG5cdFx0Zm9ybV92ZXJzaW9uID0gZm9ybS5jdXJyZW50XG5cdGVsc2Vcblx0XHRmb3JtX3ZlcnNpb24gPSBfLndoZXJlKGZvcm0uaGlzdG9yeXMsIHtfaWQ6IGluc3RhbmNlLmZvcm1fdmVyc2lvbn0pWzBdXG5cblx0Zm9ybV92ZXJzaW9uLmZpZWxkcy5mb3JFYWNoIChmaWVsZCktPlxuXHRcdGlmIGZpZWxkLnR5cGUgPT0gJ3NlY3Rpb24nXG5cdFx0XHRmb3JtX2ZpZWxkcy5wdXNoKGZpZWxkKTtcblx0XHRcdGlmIGZpZWxkLmZpZWxkc1xuXHRcdFx0XHRmaWVsZC5maWVsZHMuZm9yRWFjaCAoZikgLT5cblx0XHRcdFx0XHRmb3JtX2ZpZWxkcy5wdXNoKGYpO1xuXHRcdGVsc2UgaWYgZmllbGQudHlwZSA9PSAndGFibGUnXG5cdFx0XHRmaWVsZFsnc2ZpZWxkcyddID0gZmllbGRbJ2ZpZWxkcyddXG5cdFx0XHRkZWxldGUgZmllbGRbJ2ZpZWxkcyddXG5cdFx0XHRmb3JtX2ZpZWxkcy5wdXNoKGZpZWxkKTtcblx0XHRlbHNlXG5cdFx0XHRmb3JtX2ZpZWxkcy5wdXNoKGZpZWxkKTtcblxuXHRmb3JtX3ZlcnNpb24uZmllbGRzID0gZm9ybV9maWVsZHM7XG5cblx0cmV0dXJuIGZvcm1fdmVyc2lvbjtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEZsb3dWZXJzaW9uID0gKGluc3RhbmNlKS0+XG5cdGZsb3cgPSBkYi5mbG93cy5maW5kT25lKGluc3RhbmNlLmZsb3cpO1xuXHRmbG93X3ZlcnNpb24gPSB7fVxuXHRpZiBmbG93LmN1cnJlbnQuX2lkID09IGluc3RhbmNlLmZsb3dfdmVyc2lvblxuXHRcdGZsb3dfdmVyc2lvbiA9IGZsb3cuY3VycmVudFxuXHRlbHNlXG5cdFx0Zmxvd192ZXJzaW9uID0gXy53aGVyZShmbG93Lmhpc3RvcnlzLCB7X2lkOiBpbnN0YW5jZS5mbG93X3ZlcnNpb259KVswXVxuXG5cdHJldHVybiBmbG93X3ZlcnNpb247XG5cblxuX2dldFZpZXdIdG1sID0gKHBhdGgpIC0+XG5cdHZpZXdIdG1sID0gQXNzZXRzLmdldFRleHQocGF0aClcblxuXHRpZiB2aWV3SHRtbFxuXHRcdHZpZXdIdG1sID0gdmlld0h0bWwucmVwbGFjZSgvPHRlbXBsYXRlW1xcd1xcc1xcXCJcXD0nXSs+L2ksXCJcIikucmVwbGFjZSgvPFxcL3RlbXBsYXRlPi9pLFwiXCIpXG5cblx0cmV0dXJuIHZpZXdIdG1sO1xuXG5fZ2V0TG9jYWxlID0gKHVzZXIpLT5cblx0aWYgdXNlcj8ubG9jYWxlPy50b0xvY2FsZUxvd2VyQ2FzZSgpID09ICd6aC1jbidcblx0XHRsb2NhbGUgPSBcInpoLUNOXCJcblx0ZWxzZSBpZiB1c2VyPy5sb2NhbGU/LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gJ2VuLXVzJ1xuXHRcdGxvY2FsZSA9IFwiZW5cIlxuXHRlbHNlXG5cdFx0bG9jYWxlID0gXCJ6aC1DTlwiXG5cdHJldHVybiBsb2NhbGVcblxuXG5fZ2V0UmVxdWlyZWRGaWVsZHMgPSAoZmllbGRzLCByZXYpLT5cblx0aWYgIXJldlxuXHRcdHJldiA9IFtdO1xuXG5cdGZpZWxkcy5mb3JFYWNoIChmaWVsZCktPlxuXHRcdGlmIGZpZWxkLnR5cGUgPT0gJ3NlY3Rpb24nXG5cdFx0XHRfZ2V0UmVxdWlyZWRGaWVsZHMoZmllbGQuZmllbGRzLCByZXYpXG5cdFx0ZWxzZSBpZiBmaWVsZC50eXBlID09ICd0YWJsZSdcblxuXHRcdGVsc2Vcblx0XHRcdGlmIGZpZWxkLmlzX3JlcXVpcmVkXG5cdFx0XHRcdHJldi5wdXNoIGZpZWxkLmNvZGVcblx0cmV0dXJuIHJldjtcblxuX2dldFN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzID0gKGZpZWxkcywgc3RlcHMpLT5cblx0c3RhcnRTdGVwID0gc3RlcHMuZmluZFByb3BlcnR5QnlQSyhcInN0ZXBfdHlwZVwiLFwic3RhcnRcIilcblxuXHRlZGl0YWJsZUNvZGUgPSBbXVxuXG5cdF8ua2V5cyhzdGFydFN0ZXAucGVybWlzc2lvbnMpLmZvckVhY2ggKGtleSktPlxuXHRcdGlmIHN0YXJ0U3RlcC5wZXJtaXNzaW9uc1trZXldID09ICdlZGl0YWJsZSdcblx0XHRcdGVkaXRhYmxlQ29kZS5wdXNoIGtleVxuXG5cdHJldHVybiBlZGl0YWJsZUNvZGVcblxuX2dldFN0YXJ0U3RlcFJlcXVpcmVkRmllbGRzID0gKGZpZWxkcywgc3RlcHMpLT5cblx0cmVxdWlyZWRGaWVsZHMgPSBfZ2V0UmVxdWlyZWRGaWVsZHMoZmllbGRzKVxuXG5cdGVkaXRhYmxlQ29kZSA9IF9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyhmaWVsZHMsIHN0ZXBzKVxuXG5cdHJldHVybiBfLmludGVyc2VjdGlvbihyZXF1aXJlZEZpZWxkcywgZWRpdGFibGVDb2RlKVxuXG5fZ2V0VGVtcGxhdGVEYXRhID0gKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyktPlxuXHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRmb3JtX3ZlcnNpb24gPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbihpbnN0YW5jZSlcblx0ZWxzZVxuXHRcdGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKGluc3RhbmNlKVxuXG5cdGxvY2FsZSA9IF9nZXRMb2NhbGUodXNlcilcblxuXHRzdGVlZG9zRGF0YSA9IHt9XG5cblx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0c3RlZWRvc0RhdGEgPSBfLmNsb25lKFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWFWYWx1ZXMoKSlcblx0XHRzdGVlZG9zRGF0YS5pbnNuYW1lID0gaW5zdGFuY2UubmFtZVxuXHRcdHN0ZWVkb3NEYXRhLmluc19zdGF0ZSA9IGluc3RhbmNlLnN0YXRlXG5cdFx0c3RlZWRvc0RhdGEuaW5zX2ZpbmFsX2RlY2lzaW9uID0gaW5zdGFuY2UuaW5zX2ZpbmFsX2RlY2lzaW9uXG5cdFx0c3RlZWRvc0RhdGEuaW5zX2NvZGUgPSBpbnN0YW5jZS5jb2RlXG5cdFx0c3RlZWRvc0RhdGEuaW5zX2lzX2FyY2hpdmVkID0gaW5zdGFuY2UuaXNfYXJjaGl2ZWRcblx0XHRzdGVlZG9zRGF0YS5pbnNfaXNfZGVsZXRlZCA9IGluc3RhbmNlLmluc19pc19kZWxldGVkXG5cdFx0c3RlZWRvc0RhdGEuYXBwbGljYW50X25hbWUgPSBpbnN0YW5jZS5hcHBsaWNhbnRfbmFtZVxuXHRcdHN0ZWVkb3NEYXRhLmFwcGxpY2FudENvbnRleHQgPSBpbnN0YW5jZS5hcHBsaWNhbnRfbmFtZVxuXG5cdHN0ZWVkb3NEYXRhLmluc3RhbmNlID0gaW5zdGFuY2Vcblx0c3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uID0gZm9ybV92ZXJzaW9uXG5cdHN0ZWVkb3NEYXRhLmxvY2FsZSA9IGxvY2FsZVxuXHRzdGVlZG9zRGF0YS51dGNPZmZzZXQgPSB1c2VyLnV0Y09mZnNldFxuXHRzdGVlZG9zRGF0YS5zcGFjZSA9IGluc3RhbmNlLnNwYWNlXG5cdHN0ZWVkb3NEYXRhLnNlc3Npb25Vc2VySWQgPSB1c2VyLl9pZFxuXG5cdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdGlmIG9wdGlvbnM/LmVkaXRhYmxlXG5cdFx0XHRmb3JtID0gZGIuZm9ybXMuZmluZE9uZSh7X2lkOiBpbnN0YW5jZS5mb3JtfSlcblxuXHRcdFx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoe19pZDogaW5zdGFuY2UuZmxvd30pXG5cblx0XHRcdHN0ZWVkb3NEYXRhLnN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzID0gX2dldFN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzKGZvcm0uY3VycmVudC5maWVsZHMsIGZsb3cuY3VycmVudC5zdGVwcyk7XG5cblx0cmV0dXJuIHN0ZWVkb3NEYXRhO1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZm9ybWF0RGF0ZSA9IChkYXRlLCB1dGNPZmZzZXQpLT5cblx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0cGFzc2luZyA9IGZhbHNlO1xuXHRlbHNlXG5cdFx0cGFzc2luZyA9IHRydWU7XG5cblx0aWYgIXV0Y09mZnNldCAmJiB1dGNPZmZzZXQgIT0wXG5cdFx0dXRjT2Zmc2V0ID0gOFxuXG5cdHJldHVybiBtb21lbnQoZGF0ZSkudXRjT2Zmc2V0KHV0Y09mZnNldCwgcGFzc2luZykuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbVwiKTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmZvcm1hdFRpbWUgPSAoZGF0ZSktPlxuXHR1dGNPZmZzZXQgPSAwXG5cdHJldHVybiBtb21lbnQoZGF0ZSkudXRjT2Zmc2V0KHV0Y09mZnNldCkuZm9ybWF0KFwiSEg6bW1cIik7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZVZpZXcgPSAodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKS0+XG5cblx0c3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucylcblxuXHRzdGVlZG9zRGF0YS5hYnNvbHV0ZSA9IGZhbHNlO1xuXG5cdGlmIG9wdGlvbnM/LmFic29sdXRlXG5cdFx0c3RlZWRvc0RhdGEuYWJzb2x1dGUgPSB0cnVlO1xuXG5cdGluc3RhbmNlVGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0VGVtcGxhdGUoaW5zdGFuY2UsIG9wdGlvbnM/LnRlbXBsYXRlTmFtZSk7XG5cblx0aW5zdGFuY2VUZW1wbGF0ZSA9IGluc3RhbmNlVGVtcGxhdGUucmVwbGFjZSgvYWZTZWxlY3RVc2VyL2csXCJhZlNlbGVjdFVzZXJSZWFkXCIpXG5cblx0aWYgIW9wdGlvbnM/LmVkaXRhYmxlXG5cdFx0aW5zdGFuY2VUZW1wbGF0ZSA9IGluc3RhbmNlVGVtcGxhdGUucmVwbGFjZSgvYWZGb3JtR3JvdXAvZyxcImFmRm9ybUdyb3VwUmVhZFwiKVxuXG5cdGluc3RhbmNlQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKGluc3RhbmNlVGVtcGxhdGUsIHtpc0JvZHk6IHRydWV9KTtcblxuXHRpbnN0YW5jZVJlbmRlckZ1bmN0aW9uID0gZXZhbChpbnN0YW5jZUNvbXBpbGVkKTtcblxuXHRUZW1wbGF0ZS5pbnN0YW5jZV9yZWFkb25seV92aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiaW5zdGFuY2VfcmVhZG9ubHlfdmlld1wiLCBpbnN0YW5jZVJlbmRlckZ1bmN0aW9uKTtcblxuXHRUZW1wbGF0ZS5pbnN0YW5jZV9yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblxuXHRUZW1wbGF0ZS5pbnN0YW5jZV9yZWFkb25seV92aWV3LmhlbHBlcnMgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVyc1xuXG5cdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5pbml0KHN0ZWVkb3NEYXRhKTtcblxuXHRib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldywgc3RlZWRvc0RhdGEpXG5cblx0cmV0dXJuIFwiXCJcIlxuXHRcdDxkaXYgaWQ9J2luc3RhbmNlZm9ybScgPlxuXHRcdFx0I3tib2R5fVxuXHRcdDwvZGl2PlxuXHRcIlwiXCJcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFRyYWNlc1ZpZXcgPSAodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKS0+XG5cblx0c3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSlcblxuXHRmb3JtID0gZGIuZm9ybXMuZmluZE9uZShpbnN0YW5jZS5mb3JtKTtcblx0aWYgZm9ybS5pbnN0YW5jZV9zdHlsZSA9PSBcInRhYmxlXCIgfHwgb3B0aW9ucz8udGVtcGxhdGVOYW1lID09IFwidGFibGVcIlxuXHRcdHRyYWNlc0h0bWwgPSBfZ2V0Vmlld0h0bWwoJ2NsaWVudC92aWV3cy9pbnN0YW5jZS90cmFjZXNfdGFibGUuaHRtbCcpXG5cdGVsc2Vcblx0XHR0cmFjZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzLmh0bWwnKVxuXG5cdHRyYWNlQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHRyYWNlc0h0bWwsIHtpc0JvZHk6IHRydWV9KTtcblxuXHR0cmFjZVJlbmRlckZ1bmN0aW9uID0gZXZhbCh0cmFjZUNvbXBpbGVkKTtcblxuXHRUZW1wbGF0ZS50cmFjZV9yZWFkb25seV92aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwidHJhY2VfcmVhZG9ubHlfdmlld1wiLCB0cmFjZVJlbmRlckZ1bmN0aW9uKTtcblxuXHRUZW1wbGF0ZS50cmFjZV9yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGFcblxuXHRUZW1wbGF0ZS50cmFjZV9yZWFkb25seV92aWV3LmhlbHBlcnMgVHJhY2VzVGVtcGxhdGUuaGVscGVyc1xuXG5cdGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS50cmFjZV9yZWFkb25seV92aWV3LCBpbnN0YW5jZS50cmFjZXMpXG5cblx0cmV0dXJuIGJvZHk7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRBdHRhY2htZW50VmlldyA9ICh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpLT5cblxuXHRzdGVlZG9zRGF0YSA9IF9nZXRUZW1wbGF0ZURhdGEodXNlciwgc3BhY2UsIGluc3RhbmNlKVxuXG5cdGF0dGFjaG1lbnRIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvaW5zdGFuY2VfYXR0YWNobWVudHMuaHRtbCcpXG5cblx0YXR0YWNobWVudENvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShhdHRhY2htZW50SHRtbCwge2lzQm9keTogdHJ1ZX0pO1xuXG5cdGF0dGFjaG1lbnRSZW5kZXJGdW5jdGlvbiA9IGV2YWwoYXR0YWNobWVudENvbXBpbGVkKTtcblxuXHRUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiYXR0YWNobWVudHNfcmVhZG9ubHlfdmlld1wiLCBhdHRhY2htZW50UmVuZGVyRnVuY3Rpb24pO1xuXG5cdFRlbXBsYXRlLmF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YVxuXG5cdFRlbXBsYXRlLmF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXcuaGVscGVycyBJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzXG5cblx0Ym9keSA9IEJsYXplLnRvSFRNTFdpdGhEYXRhKFRlbXBsYXRlLmF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXcpXG5cblx0cmV0dXJuIGJvZHk7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRSZWxhdGVkSW5zdGFuY2VzVmlldyA9ICh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpLT5cblx0c3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSlcblxuXHRzdGVlZG9zRGF0YS5hYnNvbHV0ZSA9IGZhbHNlO1xuXG5cdGlmIG9wdGlvbnM/LmFic29sdXRlXG5cdFx0c3RlZWRvc0RhdGEuYWJzb2x1dGUgPSB0cnVlO1xuXG5cdHJlbGF0ZWRJbnN0YW5jZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvcmVsYXRlZF9pbnN0YW5jZXMuaHRtbCcpXG5cblx0cmVsYXRlZEluc3RhbmNlc0NvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShyZWxhdGVkSW5zdGFuY2VzSHRtbCwge2lzQm9keTogdHJ1ZX0pO1xuXG5cdHJlbGF0ZWRJbnN0YW5jZXNSZW5kZXJGdW5jdGlvbiA9IGV2YWwocmVsYXRlZEluc3RhbmNlc0NvbXBpbGVkKTtcblxuXHRUZW1wbGF0ZS5yZWxhdGVkX2luc3RhbmNlc192aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwicmVsYXRlZF9pbnN0YW5jZXNfdmlld1wiLCByZWxhdGVkSW5zdGFuY2VzUmVuZGVyRnVuY3Rpb24pO1xuXG5cdFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YVxuXG5cdFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcuaGVscGVycyBSZWxhdGVkSW5zdGFuY2VzLmhlbHBlcnNcblxuXHRib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUucmVsYXRlZF9pbnN0YW5jZXNfdmlldywgc3RlZWRvc0RhdGEpXG5cblx0cmV0dXJuIGJvZHk7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRSZWxhdGVkUmVjb3Jkc1ZpZXcgPSAodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKS0+XG5cdHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpXG5cblx0c3RlZWRvc0RhdGEuYWJzb2x1dGUgPSBmYWxzZTtcblxuXHRpZiBvcHRpb25zPy5hYnNvbHV0ZVxuXHRcdHN0ZWVkb3NEYXRhLmFic29sdXRlID0gdHJ1ZTtcblxuXHRyZWxhdGVkUmVjb3Jkc0h0bWwgPSBfZ2V0Vmlld0h0bWwoJ2NsaWVudC92aWV3cy9pbnN0YW5jZS9yZWxhdGVkX3JlY29yZHMuaHRtbCcpXG5cblx0cmVsYXRlZFJlY29yZHNDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUocmVsYXRlZFJlY29yZHNIdG1sLCB7aXNCb2R5OiB0cnVlfSk7XG5cblx0cmVsYXRlZFJlY29yZHNSZW5kZXJGdW5jdGlvbiA9IGV2YWwocmVsYXRlZFJlY29yZHNDb21waWxlZCk7XG5cblx0VGVtcGxhdGUucmVsYXRlZF9yZWNvcmRzX3ZpZXcgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJyZWxhdGVkX3JlY29yZHNfdmlld1wiLCByZWxhdGVkUmVjb3Jkc1JlbmRlckZ1bmN0aW9uKTtcblxuXHRUZW1wbGF0ZS5yZWxhdGVkX3JlY29yZHNfdmlldy5zdGVlZG9zRGF0YSA9IHN0ZWVkb3NEYXRhXG5cblx0VGVtcGxhdGUucmVsYXRlZF9yZWNvcmRzX3ZpZXcuaGVscGVycyBSZWxhdGVkUmVjb3Jkcy5oZWxwZXJzXG5cblx0Ym9keSA9IEJsYXplLnRvSFRNTFdpdGhEYXRhKFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3LCBzdGVlZG9zRGF0YSlcblxuXHRyZXR1cm4gYm9keTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldE9uTG9hZFNjcmlwdCA9IChpbnN0YW5jZSktPlxuXHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0Rm9ybVZlcnNpb24oaW5zdGFuY2UuZm9ybSwgaW5zdGFuY2UuZm9ybV92ZXJzaW9uKVxuXG5cdGZvcm1fc2NyaXB0ID0gZm9ybV92ZXJzaW9uLmZvcm1fc2NyaXB0O1xuXG5cdGlmIGZvcm1fc2NyaXB0ICYmIGZvcm1fc2NyaXB0LnJlcGxhY2UoL1xcbi9nLFwiXCIpLnJlcGxhY2UoL1xccy9nLFwiXCIpLmxlbmd0aCA+IDBcblx0XHRmb3JtX3NjcmlwdCA9IFwiQ29yZUZvcm0gPSB7fTtDb3JlRm9ybS5pbnN0YW5jZWZvcm0gPSB7fTtcIiArIGZvcm1fc2NyaXB0XG5cdFx0Zm9ybV9zY3JpcHQgKz0gXCI7aWYoQ29yZUZvcm0uZm9ybV9PbkxvYWQpe3dpbmRvdy5vbmxvYWQgPSBDb3JlRm9ybS5mb3JtX09uTG9hZCgpO31cIlxuXHRlbHNlXG5cdFx0Zm9ybV9zY3JpcHQgPSBcIlwiXG5cblxuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sID0gKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyktPlxuXG5cdGJvZHkgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyk7XG5cblx0b25Mb2FkU2NyaXB0ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldE9uTG9hZFNjcmlwdChpbnN0YW5jZSk7XG5cblx0Y3JlYXRvclNlcnZpY2UgPSBNZXRlb3Iuc2V0dGluZ3MucHVibGljLndlYnNlcnZpY2VzPy5jcmVhdG9yPy51cmxcblx0aW5zX3JlY29yZF9pZHMgPSBpbnN0YW5jZS5yZWNvcmRfaWRzXG5cdGxvY2FsZSA9IF9nZXRMb2NhbGUodXNlcik7XG5cdG9wZW5GaWxlU2NyaXB0ID0gXCJcIlwiXG5cdFx0XHRpZih3aW5kb3cuaXNOb2RlICYmIGlzTm9kZSgpKXtcblx0XHRcdFx0YXR0YWNocyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJpbnNfYXR0YWNoX2hyZWZcIik7XG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBhdHRhY2hzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0XHRhdHRhY2ggPSBhdHRhY2hzW2ldO1xuXHRcdFx0XHRcdGF0dGFjaC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSl7XG5cdFx0XHRcdFx0XHRpZihpc0ltYWdlKHRoaXMuZGF0YXNldC50eXBlKSB8fCBpc0h0bWwodGhpcy5kYXRhc2V0LnR5cGUpKXtcblx0XHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRvcGVuV2luZG93KFwiL2FwaS9maWxlcy9pbnN0YW5jZXMvXCIgKyB0aGlzLmRhdGFzZXQuaWQpO1xuXHRcdFx0XHRcdFx0fWVsc2UgaWYobndfY29yZS5jYW5PcGVuRmlsZSh0aGlzLmRhdGFzZXQubmFtZSkpe1xuXHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdG53X2NvcmUub3BlbkZpbGUodGhpcy5ocmVmLCB0aGlzLmRhdGFzZXQubmFtZSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZmxvdyA9IFwiI3tpbnN0YW5jZS5mbG93fVwiO1xuXHRcdFx0dmFyIHNwYWNlID0gXCIje2luc3RhbmNlLnNwYWNlfVwiO1xuXG5cdFx0XHRmdW5jdGlvbiBnZXRDb29raWUobmFtZSl7XG5cdFx0XHRcdGxldCBwYXR0ZXJuID0gUmVnRXhwKG5hbWUgKyBcIj0uW147XSpcIilcblx0XHRcdFx0bGV0IG1hdGNoZWQgPSBkb2N1bWVudC5jb29raWUubWF0Y2gocGF0dGVybilcblx0XHRcdFx0aWYobWF0Y2hlZCl7XG5cdFx0XHRcdFx0bGV0IGNvb2tpZSA9IG1hdGNoZWRbMF0uc3BsaXQoJz0nKVxuXHRcdFx0XHRcdHJldHVybiBjb29raWVbMV1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gJydcblx0XHRcdH1cblxuXHRcdFx0dmFyIHJlY29yZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiaW5zLXJlbGF0ZWQtcmVjb3Jkc1wiKTtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCByZWNvcmRzLmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0XHR2YXIgcmVjb3JkID0gcmVjb3Jkc1tpXTtcblx0XHRcdFx0XHRyZWNvcmQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpe1xuXHRcdFx0XHRcdFx0dmFyIGNyZWF0b3JTZXJ2aWNlID0gXCIje2NyZWF0b3JTZXJ2aWNlfVwiXG5cdFx0XHRcdFx0XHR2YXIgaW5zX3JlY29yZF9pZHMgPSAje0pTT04uc3RyaW5naWZ5KGluc19yZWNvcmRfaWRzKX1cblx0XHRcdFx0XHRcdGlmKGNyZWF0b3JTZXJ2aWNlICYmIGluc19yZWNvcmRfaWRzICYmIGluc19yZWNvcmRfaWRzLmxlbmd0aCA+IDApe1xuXHRcdFx0XHRcdFx0XHR2YXIgb2JqY2V0TmFtZSA9IGluc19yZWNvcmRfaWRzWzBdLm9cblx0XHRcdFx0XHRcdFx0dmFyIGlkID0gaW5zX3JlY29yZF9pZHNbMF0uaWRzWzBdXG5cdFx0XHRcdFx0XHRcdHZhciB1b2JqID0ge307XG5cdFx0XHRcdFx0XHRcdHVvYmpbXCJYLVVzZXItSWRcIl0gPSBnZXRDb29raWUoXCJYLVVzZXItSWRcIik7XG5cdFx0XHRcdFx0XHRcdHVvYmpbXCJYLUF1dGgtVG9rZW5cIl0gPSBnZXRDb29raWUoXCJYLUF1dGgtVG9rZW5cIik7XG5cdFx0XHRcdFx0XHRcdHJlZGlyZWN0VXJsID0gY3JlYXRvclNlcnZpY2UgKyBcImFwcC8tL1wiICsgb2JqY2V0TmFtZSArIFwiL3ZpZXcvXCIgKyBpZCArIFwiP1wiICsgJC5wYXJhbSh1b2JqKTtcblx0XHRcdFx0XHRcdFx0b3BlbldpbmRvdyhyZWRpcmVjdFVybCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcIlwiXCI7XG5cblxuXHRpZiAhU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0Zm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoaW5zdGFuY2UuZm9ybSk7XG5cdFx0aWYgZm9ybT8uaW5zdGFuY2Vfc3R5bGUgPT0gJ3RhYmxlJ1xuXHRcdFx0aW5zdGFuY2Vfc3R5bGUgPSBcImluc3RhbmNlLXRhYmxlXCJcblxuXHRpZiBvcHRpb25zPy50ZW1wbGF0ZU5hbWUgPT0gJ3RhYmxlJ1xuXHRcdGluc3RhbmNlX3N0eWxlID0gXCJpbnN0YW5jZS10YWJsZVwiXG5cblx0aWYgb3B0aW9ucz8uaW5zdGFuY2Vfc3R5bGVcblx0XHRpbnN0YW5jZV9zdHlsZSA9IG9wdGlvbnMuaW5zdGFuY2Vfc3R5bGVcblxuXHRpZiAhb3B0aW9ucyB8fCBvcHRpb25zLnNob3dUcmFjZSA9PSB0cnVlXG5cdFx0dHJhY2UgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VHJhY2VzVmlldyh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpXG5cdGVsc2Vcblx0XHR0cmFjZSA9IFwiXCJcblxuXHRpbnN0YW5jZUJveFN0eWxlID0gXCJcIjtcblxuXHRpZiBpbnN0YW5jZSAmJiBpbnN0YW5jZS5maW5hbF9kZWNpc2lvblxuXHRcdGlmIGluc3RhbmNlLmZpbmFsX2RlY2lzaW9uID09IFwiYXBwcm92ZWRcIlxuXHRcdFx0aW5zdGFuY2VCb3hTdHlsZSA9IFwiYm94LXN1Y2Nlc3NcIlxuXHRcdGVsc2UgaWYgKGluc3RhbmNlLmZpbmFsX2RlY2lzaW9uID09IFwicmVqZWN0ZWRcIilcblx0XHRcdGluc3RhbmNlQm94U3R5bGUgPSBcImJveC1kYW5nZXJcIlxuXHRpZiAhb3B0aW9ucyB8fCBvcHRpb25zLnNob3dBdHRhY2htZW50cyA9PSB0cnVlXG5cdFx0YXR0YWNobWVudCA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRBdHRhY2htZW50Vmlldyh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpXG5cdFx0cmVsYXRlZF9pbnN0YW5jZXMgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZEluc3RhbmNlc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKVxuXHRcdHJlbGF0ZWRfcmVjb3JkcyA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRSZWxhdGVkUmVjb3Jkc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKVxuXHRlbHNlXG5cdFx0YXR0YWNobWVudCA9IFwiXCJcblx0XHRyZWxhdGVkX2luc3RhbmNlcyA9IFwiXCJcblx0XHRyZWxhdGVkX3JlY29yZHMgPSBcIlwiXG5cblxuXHR3aWR0aCA9IFwiOTYwcHhcIlxuXHQjXHTlpoLmnpznu5l0YWJsZeeahHBhcmVudOiuvue9rndpZHRo77yM5YiZ5Lya5a+86Ie06Zi/6YeM5LqR6YKu566x5pi+56S6dGFibGUg5byC5bi4XG5cdGlmIG9wdGlvbnM/LndpZHRoXG5cdFx0d2lkdGggPSBcIlwiXG5cblx0Y3NzSHJlZiA9IE1ldGVvci5hYnNvbHV0ZVVybChcInN0ZWVkb3MtY3NzXCIpXG5cdFxuXHRqcUhyZWYgPSBNZXRlb3IuYWJzb2x1dGVVcmwoXCJ3ZWJzaXRlL2xpYnMvanF1ZXJ5Lm1pbi5qc1wiKVxuXG5cdGFsbENzc0xpbmsgPSBcIlwiXCI8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgY2xhc3M9XCJfX21ldGVvci1jc3NfX1wiIGhyZWY9XCIje2Nzc0hyZWZ9XCI+XCJcIlwiXG5cblx0dHJhY2VDaGVjayA9IFwiXCJcblx0aWYgIV8uaXNFbXB0eSh0cmFjZSlcblx0XHR0cmFjZUNoZWNrID0gXCJjaGVja2VkXCJcblx0aWYgb3B0aW9ucz8udGFnZ2VyID09ICdlbWFpbCcgfHwgb3B0aW9ucz8uZWRpdGFibGVcblx0XHRzaG93VHJhY2VzQnRuID0gXCJcIlxuXHRlbHNlXG5cdFx0c2hvd1RyYWNlc0J0biA9IFwiXCJcIlxuXHRcdFx0PGRpdiBjbGFzcz1cIm5hdmlnYXRpb24tYmFyIGJ0bi1ncm91cCBuby1wcmludFwiIHN0eWxlPVwibWluLXdpZHRoOiA2MDBweDsgei1pbmRleDogOTk5OyBib3gtc2l6aW5nOiBib3JkZXItYm94O1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwicHJpbnQtdG9vbFwiPlxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNieC1sYWJlbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImNieC1wcmludCBjYngtcHJpbnQtYXR0YWNobWVudHNcIiBpZD1cImNieC1wcmludC1hdHRhY2htZW50c1wiIGNoZWNrZWQ9XCJjaGVja2VkXCI+PHNwYW4+I3tUQVBpMThuLl9fKCdpbnN0YW5jZV9hdHRhY2htZW50Jywge30sIGxvY2FsZSl9PC9zcGFuPjwvbGFiZWw+XG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiY2J4LWxhYmVsXCI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY2J4LXByaW50IGNieC1wcmludC10cmFjZXNcIiBpZD1cImNieC1wcmludC10cmFjZXNcIiBjaGVja2VkPVwiI3t0cmFjZUNoZWNrfVwiPjxzcGFuPiN7VEFQaTE4bi5fXygnaW5zdGFuY2VfYXBwcm92YWxfaGlzdG9yeScsIHt9LCBsb2NhbGUpfTwvc3Bhbj48L2xhYmVsPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0XCJcIlwiXG5cblx0c2hvd1RyYWNlc1NjcmlwdCA9IFwiXCJcIlxuXHRcdCQoIGRvY3VtZW50ICkucmVhZHkoZnVuY3Rpb24oKXtcblx0XHRcdHZhciBiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NieC1wcmludC10cmFjZXMnKTtcblx0XHRcdHZhciB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW5zdGFuY2UtdHJhY2VzJylbMF07XG5cdFx0XHRpZiAoYiAmJiBiLmNoZWNrZWQgJiYgdCl7XG5cdFx0XHRcdHQuc3R5bGUgPSAnZGlzcGxheTogYmxvY2s7J1xuXHRcdFx0fSBlbHNlIGlmKHQpe1xuXHRcdFx0XHR0LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xuXHRcdFx0fVxuXHRcdFx0aWYoYil7XG5cdFx0XHRcdGIuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSl7XG5cdFx0XHRcdFx0aWYgKGUudGFyZ2V0LmNoZWNrZWQpe1xuXHRcdFx0XHRcdFx0dC5zdHlsZSA9ICdkaXNwbGF5OiBibG9jazsnXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHQuc3R5bGUgPSAnZGlzcGxheTogbm9uZTsnXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXG5cdFx0XHR2YXIgYXR0YWNobWVudHNDaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYngtcHJpbnQtYXR0YWNobWVudHMnKTtcblx0XHRcdHZhciBhdHRhY2htZW50c1ZpZXcgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdHRhY2htZW50cy1zZWN0aW9uJylbMF07XG5cdFx0XHRpZiAoYXR0YWNobWVudHNDaGVja2JveCAmJiBhdHRhY2htZW50c0NoZWNrYm94LmNoZWNrZWQgJiYgYXR0YWNobWVudHNWaWV3KXtcblx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcblx0XHRcdH0gZWxzZSBpZihhdHRhY2htZW50c1ZpZXcpe1xuXHRcdFx0XHRhdHRhY2htZW50c1ZpZXcuc3R5bGUgPSAnZGlzcGxheTogbm9uZTsnXG5cdFx0XHR9XG5cdFx0XHRpZihhdHRhY2htZW50c0NoZWNrYm94KXtcblx0XHRcdFx0YXR0YWNobWVudHNDaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbihlKXtcblx0XHRcdFx0XHRpZiAoZS50YXJnZXQuY2hlY2tlZCl7XG5cdFx0XHRcdFx0XHRhdHRhY2htZW50c1ZpZXcuc3R5bGUgPSAnZGlzcGxheTogYmxvY2s7J1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhdHRhY2htZW50c1ZpZXcuc3R5bGUgPSAnZGlzcGxheTogbm9uZTsnXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcIlwiXCJcblxuXHRpZiBvcHRpb25zPy5zdHlsZXNcblx0XHRhbGxDc3NMaW5rID0gXCJcIlxuXG5cdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtfaWQ6IGluc3RhbmNlLmZvcm19KTtcblx0Zm9ybURlc2NyaXB0aW9uSHRtbCA9IFwiXCJcblx0aWYgZm9ybVxuXHRcdGZvcm1EZXNjcmlwdGlvbiA9IGZvcm0uZGVzY3JpcHRpb25cblx0XHRpZiBmb3JtRGVzY3JpcHRpb25cblx0XHRcdGZvcm1EZXNjcmlwdGlvbiA9IGZvcm1EZXNjcmlwdGlvbi5yZXBsYWNlKC9cXG4vZyxcIjxici8+XCIpXG5cdFx0XHRmb3JtRGVzY3JpcHRpb25IdG1sID0gXCJcIlwiXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJib3gtaGVhZGVyICB3aXRoLWJvcmRlciBpbnN0YW5jZS1oZWFkZXJcIj5cblx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0I3tmb3JtRGVzY3JpcHRpb259XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcIlwiXCJcblxuXHRodG1sID0gXCJcIlwiXG5cdFx0PCFET0NUWVBFIGh0bWw+XG5cdFx0PGh0bWw+XG5cdFx0XHQ8aGVhZD5cblx0XHRcdFx0PG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcIi8+XG5cdFx0XHRcdCN7YWxsQ3NzTGlua31cblx0XHRcdFx0PHNjcmlwdCBzcmM9XCIje2pxSHJlZn1cIiB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+PC9zY3JpcHQ+XG5cdFx0XHRcdDxzY3JpcHQgc3JjPVwiL2pzL253X2NvcmUuanNcIiB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+PC9zY3JpcHQ+XG5cdFx0XHRcdCN7b3B0aW9ucy5wbHVnaW5zIHx8IFwiXCJ9XG5cblx0XHRcdFx0PHN0eWxlPlxuXHRcdFx0XHRcdC5zdGVlZG9ze1xuXHRcdFx0XHRcdFx0d2lkdGg6ICN7d2lkdGh9O1xuXHRcdFx0XHRcdFx0bWFyZ2luLWxlZnQ6IGF1dG87XG5cdFx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IGF1dG87XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Lmluc3RhbmNlLXZpZXcgLmluc3RhbmNlLW5hbWV7XG5cdFx0XHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYm94LXRvb2xze1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmJveC5jb2xsYXBzZWQtYm94IC5ib3gtYm9keSwuYm94LmNvbGxhcHNlZC1ib3ggLmJveC1mb290ZXIge1xuXHRcdFx0XHRcdCAgZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ym9keXtcblx0XHRcdFx0XHRcdGJhY2tncm91bmQ6IGF6dXJlICFpbXBvcnRhbnQ7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Lmluc3RhbmNlLXZpZXcgLmluc3RhbmNlLXRyYWNlc3tcblx0XHRcdFx0XHRcdHBhZGRpbmctbGVmdDogMTVweDtcblx0XHRcdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDE1cHg7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWl0ZW0ge1xuXHRcdFx0XHRcdGJvcmRlci1yYWRpdXM6IHZhcigtLUltYWdlQ29udHJvbC1hZGRCdG4tYm9yZGVyUmFkaXVzKTtcblx0XHRcdFx0XHR2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuXHRcdFx0XHRcdHBhZGRpbmc6IHZhcigtLWdhcC14cyk7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdG1hcmdpbi1yaWdodDogdmFyKC0tZ2FwLWJhc2UpO1xuXHRcdFx0XHRcdG1hcmdpbi1ib3R0b206IHZhcigtLWdhcC1iYXNlKTtcblx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHRcdFx0d2lkdGg6IDcuNXJlbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWl0ZW0uaXMtaW52YWxpZCB7XG5cdFx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdFx0XHRib3JkZXItY29sb3I6IHZhcigtLUZpbGVDb250cm9sLWRhbmdlci1jb2xvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtIHN2Zy5pY29uLXJlZnJlc2gge1xuXHRcdFx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1maWxlbmFtZSB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdFx0XHRcdFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0XHRcdFx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0XHRcdFx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRcdFx0XHRcdGNvbG9yOiB2YXIoLS1GaWxlQ29udHJvbC1kYW5nZXItY29sb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZmlsZW5hbWUgPiBzdmcuaWNvbi1pbWFnZSB7XG5cdFx0XHRcdFx0bWFyZ2luLWJvdHRvbTogOHB4O1xuXHRcdFx0XHRcdHdpZHRoOiAyNHB4O1xuXHRcdFx0XHRcdGhlaWdodDogMjRweDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpbGVuYW1lID4gc3BhbiB7XG5cdFx0XHRcdFx0bWF4LXdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdG92ZXJmbG93OiBoaWRkZW47XG5cdFx0XHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHRcdFx0XHR0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWltYWdlIHtcblx0XHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0XHRoZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdFx0XHRib3JkZXI6IG5vbmU7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHRjdXJzb3I6IHBvaW50ZXI7XG5cdFx0XHRcdFx0Y29sb3I6ICM5OTk7XG5cdFx0XHRcdFx0dG9wOiA1cHg7XG5cdFx0XHRcdFx0cmlnaHQ6IDVweDtcblx0XHRcdFx0XHRsaW5lLWhlaWdodDogMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWl0ZW1DbGVhciA+IHN2ZyB7XG5cdFx0XHRcdFx0dG9wOiAwO1xuXHRcdFx0XHRcdHdpZHRoOiAxMHB4O1xuXHRcdFx0XHRcdGhlaWdodDogMTBweDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWl0ZW1JbmZvIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0XHRcdFx0XHR3aWR0aDogMTEwcHg7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxMTBweDtcblx0XHRcdFx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0XHRcdFx0XHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRcdFx0XHRcdGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcblx0XHRcdFx0XHRmbGV4LXdyYXA6IHdyYXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtSW5mbyA+IHAge1xuXHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0XHRmb250LXNpemU6IDEycHg7XG5cdFx0XHRcdFx0bWFyZ2luLWJvdHRvbTogNXB4O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtcHJvZ3Jlc3Mge1xuXHRcdFx0XHRcdHdpZHRoOiA3MHB4O1xuXHRcdFx0XHRcdGhlaWdodDogNXB4O1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6ICNlYmViZWI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1wcm9ncmVzc1ZhbHVlIHtcblx0XHRcdFx0XHRoZWlnaHQ6IDVweDtcblx0XHRcdFx0XHRib3JkZXItcmFkaXVzOiB2YXIoLS1JbWFnZUNvbnRyb2wtcHJvZ3Jlc3MtYm9yZGVyUmFkaXVzKTtcblx0XHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiB2YXIoLS1pbmZvKTtcblx0XHRcdFx0XHRtaW4td2lkdGg6IDEwJTtcblx0XHRcdFx0XHR0cmFuc2l0aW9uOiBlYXNlLW91dCB3aWR0aCB2YXIoLS1hbmltYXRpb24tZHVyYXRpb24pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbS5pcy1pbnZhbGlkIC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIge1xuXHRcdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtLmlzLWludmFsaWQ6aG92ZXIgLmFudGQtSW1hZ2VDb250cm9sLWl0ZW1DbGVhciB7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1lcnJvck1zZyB7XG5cdFx0XHRcdFx0Y29sb3I6IHZhcigtLWRhbmdlcik7XG5cdFx0XHRcdFx0bWFyZ2luOiA1cHggMCAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtdXBsb2FkQnRuIHtcblx0XHRcdFx0XHRtYXJnaW4tdG9wOiA1cHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1jcm9wcGVyV3JhcHBlciB7XG5cdFx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcHBlcldyYXBwZXIgaW1nIHtcblx0XHRcdFx0XHRtYXgtd2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0bWF4LWhlaWdodDogNDAwcHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1jcm9wZXJUb29sYmFyIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0XHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdFx0cmlnaHQ6IDA7XG5cdFx0XHRcdFx0Ym90dG9tOiAwO1xuXHRcdFx0XHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdFx0XHRcdFx0YWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRcdFx0Ym9yZGVyLXJhZGl1czogNHB4O1xuXHRcdFx0XHRcdG1hcmdpbjogMC41cmVtO1xuXHRcdFx0XHRcdGJveC1zaGFkb3c6IDAgMCA0cHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1jcm9wZXJUb29sYmFyID4gYSB7XG5cdFx0XHRcdFx0Y29sb3I6IHZhcigtLUZvcm0taXRlbS1mb250Q29sb3IpO1xuXHRcdFx0XHRcdHBhZGRpbmc6IDJweCA1cHg7XG5cdFx0XHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWNyb3BlclRvb2xiYXIgPiBhOmhvdmVyIHtcblx0XHRcdFx0XHRjb2xvcjogdmFyKC0tbGluay1jb2xvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1hY2NlcHRUaXAge1xuXHRcdFx0XHRcdGhlaWdodDogMTIwcHg7XG5cdFx0XHRcdFx0Y29sb3I6ICM5OTk7XG5cdFx0XHRcdFx0Ym9yZGVyOiAycHggZGFzaGVkIHZhcigtLWJvcmRlckNvbG9yKTtcblx0XHRcdFx0XHRib3JkZXItY29sb3I6IHZhcigtLWluZm8pO1xuXHRcdFx0XHRcdGJhY2tncm91bmQ6ICNmM2Y5ZmU7XG5cdFx0XHRcdFx0Ym9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUmFkaXVzKTtcblx0XHRcdFx0XHRsaW5lLWhlaWdodDogMTIwcHg7XG5cdFx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZml4ZWQtc2l6ZSB7XG5cdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1maXhlZC1zaXplIC5hbnRkLUltYWdlQ29udHJvbC1pdGVtT3ZlcmxheSB7XG5cdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC5hbnRkLUltYWdlcyB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdFx0XHRcdFx0ZmxleC13cmFwOiB3cmFwO1xuXHRcdFx0XHRcdFx0bWFyZ2luOiBjYWxjKHZhcigtLWdhcC14cykgKiAtMSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZXMtaXRlbSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdFx0XHRcdFx0bWFyZ2luOiB2YXIoLS1nYXAteHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2Uge1xuXHRcdFx0XHRcdFx0Ym9yZGVyOiB2YXIoLS1ib3JkZXJXaWR0aCkgc29saWQgdmFyKC0tYm9yZGVyQ29sb3IpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtLXRodW1iIHtcblx0XHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0XHRcdHBhZGRpbmc6IHZhcigtLWdhcC14cyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYldyYXAge1xuXHRcdFx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtaW1hZ2Uge1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS1pbWFnZS0tbG9hZGluZyB7XG5cdFx0XHRcdFx0XHR2aXNpYmlsaXR5OiBoaWRkZW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS0tb3JpZ2luYWwgLmFudGQtSW1hZ2UtaW1hZ2Uge1xuXHRcdFx0XHRcdFx0bWF4LXdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdFx0bWF4LWhlaWdodDogMTAwJTtcblx0XHRcdFx0XHRcdHdpZHRoOiBhdXRvO1xuXHRcdFx0XHRcdFx0bWFyZ2luOiBhdXRvO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWIge1xuXHRcdFx0XHRcdFx0d2lkdGg6IDYuODc1cmVtO1xuXHRcdFx0XHRcdFx0aGVpZ2h0OiA2Ljg3NXJlbTtcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdFx0XHRcdG92ZXJmbG93OiBoaWRkZW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYiA+IGltZyB7XG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdFx0XHRsZWZ0OiA1MCU7XG5cdFx0XHRcdFx0XHR0b3A6IDUwJTtcblx0XHRcdFx0XHRcdG1heC1oZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdFx0XHR3aWR0aDogYXV0bztcblx0XHRcdFx0XHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtaW5mbyB7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiA1cHggMTBweDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLS10aHVtYiAuYW50ZC1JbWFnZS1pbmZvIHtcblx0XHRcdFx0XHRcdHdpZHRoOiA2Ljg3NXJlbTtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tNC0zIHtcblx0XHRcdFx0XHRcdGhlaWdodDogNS4xNTYyNXJlbTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS0xNi05IHtcblx0XHRcdFx0XHRcdGhlaWdodDogMy44NjcxODc1cmVtO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLWZpeGVkLXNpemUge1xuXHRcdFx0XHRcdFx0bWluLXdpZHRoOiA2Ljg3NXJlbTtcblx0XHRcdFx0XHRcdG1pbi1oZWlnaHQ6IDYuODc1cmVtO1xuXHRcdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLWZpeGVkLXNpemUgLmFudGQtSW1hZ2UtdGh1bWIge1xuXHRcdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tZml4ZWQtc2l6ZSAuYW50ZC1JbWFnZS10aHVtYiA+IGltZyB7XG5cdFx0XHRcdFx0XHR3aWR0aDogYXV0bztcblx0XHRcdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS13LWZ1bGwgPiBpbWcge1xuXHRcdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdFx0XHRoZWlnaHQ6IGF1dG87XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQje29wdGlvbnM/LnN0eWxlcyB8fCBcIlwifVxuXG5cdFx0XHRcdFx0I3tvcHRpb25zPy5hZGRfc3R5bGVzIHx8IFwiXCJ9XG5cdFx0XHRcdDwvc3R5bGU+XG5cdFx0XHQ8L2hlYWQ+XG5cdFx0XHQ8Ym9keT5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZWVkb3Mgd29ya2Zsb3cgaW5zdGFuY2UtcHJpbnRcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2tpbi1ncmVlbiBza2luLWFkbWluLWx0ZVwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNvbnRlbnQtd3JhcHBlclwiPlxuXHRcdFx0XHRcdFx0XHRcdCN7c2hvd1RyYWNlc0J0bn1cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW5zdGFuY2UtcHJpbnRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnN0YW5jZSAje2luc3RhbmNlX3N0eWxlfVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8Zm9ybSBuYW1lPVwiaW5zdGFuY2VGb3JtXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImluc3RhbmNlLWZvcm0gYm94ICN7aW5zdGFuY2VCb3hTdHlsZX1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCN7Zm9ybURlc2NyaXB0aW9uSHRtbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJib3gtYm9keVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgc3R5bGU9XCJib3gtc2l6aW5nOiBib3JkZXItYm94O1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2F0dGFjaG1lbnRzLXNlY3Rpb24nPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0I3thdHRhY2htZW50fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0I3tyZWxhdGVkX2luc3RhbmNlc31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCN7cmVsYXRlZF9yZWNvcmRzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCN7Ym9keX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mb3JtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQje3RyYWNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2JvZHk+XG5cdFx0XHQ8c2NyaXB0PiN7b3BlbkZpbGVTY3JpcHR9OyN7b25Mb2FkU2NyaXB0fTsje3Nob3dUcmFjZXNTY3JpcHR9PC9zY3JpcHQ+XG5cdFx0PC9odG1sPlxuXHRcIlwiXCJcblxuXHRyZXR1cm4gaHRtbCIsInZhciBfZ2V0TG9jYWxlLCBfZ2V0UmVxdWlyZWRGaWVsZHMsIF9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcywgX2dldFN0YXJ0U3RlcFJlcXVpcmVkRmllbGRzLCBfZ2V0VGVtcGxhdGVEYXRhLCBfZ2V0Vmlld0h0bWwsIGdldExpbmtUZXh0LCBtYXJrZWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICBcblxubWFya2VkID0gcmVxdWlyZShcIm1hcmtlZFwiKTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlID0ge307XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5pbnN0YW5jZV9hdHRhY2htZW50ID0gXCI8dHI+XFxuXHQ8dGQgY2xhc3M9XFxcImlucy1hdHRhY2gtdmlld1xcXCI+XFxuXHRcdDxhIGhyZWY9XFxcInt7aW5zX2F0dGFjaF9kb3dubG9hZF91cmwgX2lkIGFic29sdXRlfX1cXFwiIGNsYXNzPVxcXCJpbnNfYXR0YWNoX2hyZWZcXFwiIHRhcmdldD1cXFwiX3BhcmVudFxcXCIgZGF0YS1uYW1lPVxcXCJ7e3RoaXMubmFtZX19XFxcIiBkYXRhLXR5cGU9XFxcInt7dGhpcy5vcmlnaW5hbC50eXBlfX1cXFwiIGRhdGEtaWQ9XFxcInt7X2lkfX1cXFwiPnt7dGhpcy5uYW1lfX08L2E+XFxuXHQ8L3RkPlxcbjwvdHI+XCI7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5hZlNlbGVjdFVzZXJSZWFkID0gXCI8ZGl2IGNsYXNzPSdzZWxlY3RVc2VyIGZvcm0tY29udHJvbCBpbnNfYXBwbGljYW50Jz57e3ZhbHVlfX08L2Rpdj5cIjtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmFmRm9ybUdyb3VwUmVhZCA9IFwiPGRpdiBjbGFzcz0nZm9ybS1ncm91cCc+XFxuXHR7eyN3aXRoIGdldEZpZWxkIHRoaXMubmFtZX19XFxuXHRcdHt7I2lmIGVxdWFscyB0eXBlICdzZWN0aW9uJ319XFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPSdzZWN0aW9uIGNhbGxvdXQgY2FsbG91dC1kZWZhdWx0Jz5cXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2ZfbGFiZWwgdGhpc319PC9sYWJlbD5cXG5cdFx0XHRcdFx0PHA+e3t7ZGVzY3JpcHRpb259fX08L3A+XFxuXHRcdFx0XHQ8L2Rpdj5cXG5cdFx0e3tlbHNlfX1cXG5cdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAndGFibGUnfX1cXG5cdFx0XHRcdDxkaXYgY2xhc3M9XFxcInBhbmVsIHBhbmVsLWRlZmF1bHQgc3RlZWRvcy10YWJsZVxcXCI+XFxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcInBhbmVsLWJvZHlcXFwiIHN0eWxlPVxcXCJwYWRkaW5nOjBweDtcXFwiPlxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcInBhbmVsLWhlYWRpbmdcXFwiID5cXG5cdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz0nY29udHJvbC1sYWJlbCc+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XFxcImRlc2NyaXB0aW9uXFxcIj57e3tkZXNjcmlwdGlvbn19fTwvc3Bhbj5cXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJyZWFkb25seS10YWJsZVxcXCIgc3R5bGU9XFxcInBhZGRpbmc6MHB4O292ZXJmbG93LXg6YXV0bztcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgdHlwZT0ndGFibGUnIGNsYXNzPVxcXCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1jb25kZW5zZWQgYXV0b2Zvcm0tdGFibGVcXFwiIHN0eWxlPSdtYXJnaW4tYm90dG9tOjBweDsnIHt7dGhpcy5hdHRzfX0gaWQ9XFxcInt7dGhpcy5jb2RlfX1UYWJsZVxcXCIgbmFtZT1cXFwie3t0aGlzLmNvZGV9fVxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e3RoaXMubmFtZX19XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGhlYWQgaWQ9XFxcInt7dGhpcy5uYW1lfX1UaGVhZFxcXCIgbmFtZT1cXFwie3t0aGlzLm5hbWV9fVRoZWFkXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7e2dldFRhYmxlVGhlYWQgdGhpc319fVxcblx0XHRcdFx0XHRcdFx0XHRcdDwvdGhlYWQ+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5IGlkPVxcXCJ7e3RoaXMubmFtZX19VGJvZHlcXFwiIG5hbWU9XFxcInt7dGhpcy5uYW1lfX1UYm9keVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e3tnZXRUYWJsZUJvZHkgdGhpc319fVxcblx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XFxuXHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XFxuXHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdHt7I2lmIHNob3dMYWJlbH19XFxuXHRcdFx0XHRcdDxsYWJlbD57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHR7ey9pZn19XFxuXHRcdFx0XHR7eyNpZiBpc1RleHRhcmVhIHRoaXN9fVxcblx0XHRcdFx0XHQ8cCBjbGFzcz0ne3tnZXRDZkNsYXNzIHRoaXN9fSBmb3JtLWNvbnRyb2wnIHJlYWRvbmx5IGRpc2FibGVkPnt7e2dldFZhbHVlIGNvZGV9fX08L3A+XFxuXHRcdFx0XHR7e2Vsc2V9fVxcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSd7e2dldENmQ2xhc3MgdGhpc319IGZvcm0tY29udHJvbCcgcmVhZG9ubHkgZGlzYWJsZWQ+e3t7Z2V0VmFsdWUgY29kZX19fTwvZGl2Plxcblx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdHt7L2lmfX1cXG5cdFx0e3svaWZ9fVxcblx0e3svd2l0aH19XFxuPC9kaXY+XCI7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5hZkZvcm1Hcm91cCA9IFwiXFxue3sjd2l0aCBnZXRGaWVsZCB0aGlzLm5hbWV9fVxcblx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnc2VjdGlvbid9fVxcblx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0PGRpdiBjbGFzcz0nc2VjdGlvbiBjYWxsb3V0IGNhbGxvdXQtZGVmYXVsdCc+XFxuXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tmX2xhYmVsIHRoaXN9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdDxwPnt7e2Rlc2NyaXB0aW9ufX19PC9wPlxcblx0XHRcdFx0PC9kaXY+XFxuICBcdFx0XHRcdDwvZGl2Plxcblx0XHR7e2Vsc2V9fVxcblx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICd0YWJsZSd9fVxcblx0XHRcdFx0PGRpdiBjbGFzcz1cXFwicGFuZWwgcGFuZWwtZGVmYXVsdCBzdGVlZG9zLXRhYmxlXFxcIj5cXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwicGFuZWwtYm9keVxcXCIgc3R5bGU9XFxcInBhZGRpbmc6MHB4O1xcXCI+XFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwicGFuZWwtaGVhZGluZ1xcXCIgPlxcblx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPSdjb250cm9sLWxhYmVsJz57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cXFwiZGVzY3JpcHRpb25cXFwiPnt7e2Rlc2NyaXB0aW9ufX19PC9zcGFuPlxcblx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcInJlYWRvbmx5LXRhYmxlXFxcIiBzdHlsZT1cXFwicGFkZGluZzowcHg7b3ZlcmZsb3cteDphdXRvO1xcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB0eXBlPSd0YWJsZScgY2xhc3M9XFxcInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWNvbmRlbnNlZCBhdXRvZm9ybS10YWJsZVxcXCIgc3R5bGU9J21hcmdpbi1ib3R0b206MHB4Oycge3t0aGlzLmF0dHN9fSBpZD1cXFwie3t0aGlzLmNvZGV9fVRhYmxlXFxcIiBuYW1lPVxcXCJ7e3RoaXMuY29kZX19XFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7dGhpcy5uYW1lfX1cXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdDx0aGVhZCBpZD1cXFwie3t0aGlzLm5hbWV9fVRoZWFkXFxcIiBuYW1lPVxcXCJ7e3RoaXMubmFtZX19VGhlYWRcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0e3t7Z2V0VGFibGVUaGVhZCB0aGlzfX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0PC90aGVhZD5cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHkgaWQ9XFxcInt7dGhpcy5uYW1lfX1UYm9keVxcXCIgbmFtZT1cXFwie3t0aGlzLm5hbWV9fVRib2R5XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7e2dldFRhYmxlQm9keSB0aGlzfX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cXG5cdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHR7e2Vsc2V9fVxcblx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ2lucHV0J319XFxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiIGRhdGEtcmVxdWlyZWQ9XFxcInt7I2lmIGlzX3JlcXVpcmVkfX10cnVle3svaWZ9fVxcXCI+XFxuXHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0e3sjaWYgaXNfdGV4dGFyZWF9fVxcblx0XHRcdFx0XHRcdFx0PHRleHRhcmVhIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIHt7Z2V0UGVybWlzc2lvbnMgY29kZX19IGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPjwvdGV4dGFyZWE+XFxuXHRcdFx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdFx0XHRcdHt7I3VubGVzcyBpc190ZXh0YXJlYX19XFxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgdGl0bGU9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIge3tnZXRQZXJtaXNzaW9ucyBjb2RlfX0gZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCI+XFxuXHRcdFx0XHRcdFx0e3svdW5sZXNzfX1cXG5cdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHR7e2Vsc2V9fVxcblx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAnbnVtYmVyJ319XFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVxcXCJudW1iZXJcXFwiIHRpdGxlPVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgbmFtZT1cXFwie3tjb2RlfX1cXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHR7e2Vsc2V9fVxcblx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdkYXRlJ319XFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVxcXCJ0ZXh0XFxcIiB0aXRsZT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIG5hbWU9XFxcInt7Y29kZX19XFxcIiBkYXRhLXR5cGU9XFxcImRhdGVcXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiPlxcblx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICdkYXRlVGltZSd9fVxcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgdGl0bGU9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgZGF0YS10eXBlPSdkYXRldGltZScgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3Bhc3N3b3JkJ319XFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVxcXCJwYXNzd29yZFxcXCIgdGl0bGU9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ3NlbGVjdCd9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XFxcIjdaUW5Ec1hCR29oWk1ldEE1XFxcIiBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c2VsZWN0IG5hbWU9XFxcInt7Y29kZX19XFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNlYWNoIG9wdGlvbnMgdGhpc319XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8b3B0aW9uIHZhbHVlPVxcXCJ7e3ZhbHVlfX1cXFwiPnt7bGFiZWx9fTwvb3B0aW9uPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2VhY2h9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NlbGVjdD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdHt7ZWxzZX19XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7eyNpZiBlcXVhbHMgdHlwZSAncmFkaW8nfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGZvcj1cXFwiN1pRbkRzWEJHb2haTWV0QTVcXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e2dldExhYmVsIGNvZGV9fTwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiYWYtcmFkaW8tZ3JvdXBcXFwiIGRhdGEtc2NoZW1hLWtleT1cXFwie3tnZXRMYWJlbCBjb2RlfX1cXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjZWFjaCBvcHRpb25zIHRoaXN9fVxcbiAgICAgICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVxcXCJyYWRpby1pbmxpbmUgZml4LWluZGVudFxcXCI+PGlucHV0IHR5cGU9XFxcInJhZGlvXFxcIiB2YWx1ZT1cXFwie3t2YWx1ZX19XFxcIiBuYW1lPVxcXCJ7ey4uL2NvZGV9fVxcXCIgY2xhc3M9XFxcInJhZGlvLWlubGluZSBmaXgtaW5kZW50XFxcIj4ge3tsYWJlbH19PC9sYWJlbD5cXG4gICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cXG4gICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ211bHRpU2VsZWN0J319XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImFmLWNoZWNrYm94LWdyb3VwXFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjZWFjaCBvcHRpb25zIHRoaXN9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XFxcImNoZWNrYm94LWlubGluZSBmaXgtaW5kZW50XFxcIj48aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiIHZhbHVlPVxcXCJ7e3ZhbHVlfX1cXFwiIG5hbWU9XFxcInt7Li4vY29kZX19XFxcIiBjbGFzcz1cXFwiY2hlY2tib3gtaW5saW5lIGZpeC1pbmRlbnRcXFwiPiB7e2xhYmVsfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ey9lYWNofX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7I2lmIGVxdWFscyB0eXBlICd1cmwnfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XFxcInVybFxcXCIgdGl0bGU9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7e2Vsc2V9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ2VtYWlsJ319XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XFxcIjdaUW5Ec1hCR29oWk1ldEE1XFxcIiBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVxcXCJlbWFpbFxcXCIgdGl0bGU9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIiBuYW1lPVxcXCJ7e2NvZGV9fVxcXCIgZGF0YS1zY2hlbWEta2V5PVxcXCJ7e2dldExhYmVsIGNvZGV9fVxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3sjaWYgZXF1YWxzIHR5cGUgJ2NoZWNrYm94J319XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVxcXCI3WlFuRHNYQkdvaFpNZXRBNVxcXCIgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7Z2V0TGFiZWwgY29kZX19PC9sYWJlbD5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImNoZWNrYm94XFxcIiBkYXRhLXNjaGVtYS1rZXk9XFxcInt7Z2V0TGFiZWwgY29kZX19XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIHN0eWxlPVxcXCJ3aWR0aDogMTAwJTtcXFwiPjxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgdmFsdWU9XFxcInRydWVcXFwiIG5hbWU9XFxcInt7Y29kZX19XFxcIiBjbGFzcz1cXFwiY2hlY2tib3gtaW5saW5lIGZpeC1pbmRlbnRcXFwiPjwvbGFiZWw+XFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tlbHNlfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBmb3I9XFxcIjdaUW5Ec1hCR29oWk1ldEE1XFxcIiBjbGFzcz1cXFwiY29udHJvbC1sYWJlbFxcXCI+e3tnZXRMYWJlbCBjb2RlfX08L2xhYmVsPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0ne3tnZXRDZkNsYXNzIHRoaXN9fSBmb3JtLWNvbnRyb2wnIHJlYWRvbmx5IGRpc2FibGVkPnt7e2dldFZhbHVlIGNvZGV9fX08L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdFx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdFx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdFx0XHRcdHt7L2lmfX1cXG5cdFx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdFx0e3svaWZ9fVxcblx0XHRcdHt7L2lmfX1cXG5cdFx0e3svaWZ9fVxcblx0e3svd2l0aH19XCI7XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUgPSBmdW5jdGlvbih0ZW1wYWx0ZU5hbWUsIHN0ZWVkb3NEYXRhKSB7XG4gIHZhciB0ZW1wbGF0ZSwgdGVtcGxhdGVDb21waWxlZCwgdGVtcGxhdGVSZW5kZXJGdW5jdGlvbjtcbiAgdGVtcGxhdGUgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGVbdGVtcGFsdGVOYW1lXTtcbiAgdGVtcGxhdGVDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUodGVtcGxhdGUsIHtcbiAgICBpc0JvZHk6IHRydWVcbiAgfSk7XG4gIHRlbXBsYXRlUmVuZGVyRnVuY3Rpb24gPSBldmFsKHRlbXBsYXRlQ29tcGlsZWQpO1xuICBUZW1wbGF0ZVt0ZW1wYWx0ZU5hbWVdID0gbmV3IEJsYXplLlRlbXBsYXRlKHRlbXBhbHRlTmFtZSwgdGVtcGxhdGVSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlW3RlbXBhbHRlTmFtZV0uc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgcmV0dXJuIFRlbXBsYXRlW3RlbXBhbHRlTmFtZV0uaGVscGVycyhJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzKTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGVJbnN0YW5jZVNpZ25UZXh0ID0gZnVuY3Rpb24oc3RlZWRvc0RhdGEpIHtcbiAgdmFyIGluc3RhbmNlU2lnblRleHRDb21waWxlZCwgaW5zdGFuY2VTaWduVGV4dEh0bWwsIGluc3RhbmNlU2lnblRleHRSZW5kZXJGdW5jdGlvbjtcbiAgaW5zdGFuY2VTaWduVGV4dEh0bWwgPSBfZ2V0Vmlld0h0bWwoJ2NsaWVudC92aWV3cy9pbnN0YW5jZS9pbnN0YW5jZV9zaWduX3RleHQuaHRtbCcpO1xuICBpbnN0YW5jZVNpZ25UZXh0Q29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKGluc3RhbmNlU2lnblRleHRIdG1sLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICBpbnN0YW5jZVNpZ25UZXh0UmVuZGVyRnVuY3Rpb24gPSBldmFsKGluc3RhbmNlU2lnblRleHRDb21waWxlZCk7XG4gIFRlbXBsYXRlLmluc3RhbmNlU2lnblRleHQgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJpbnN0YW5jZVNpZ25UZXh0XCIsIGluc3RhbmNlU2lnblRleHRSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLmluc3RhbmNlU2lnblRleHQuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgcmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlU2lnblRleHQuaGVscGVycyhJbnN0YW5jZVNpZ25UZXh0LmhlbHBlcnMpO1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZUltYWdlU2lnbiA9IGZ1bmN0aW9uKHN0ZWVkb3NEYXRhKSB7XG4gIHZhciBpbWFnZVNpZ25Db21waWxlZCwgaW1hZ2VTaWduSHRtbCwgaW1hZ2VTaWduUmVuZGVyRnVuY3Rpb247XG4gIGltYWdlU2lnbkh0bWwgPSBfZ2V0Vmlld0h0bWwoJ2NsaWVudC92aWV3cy9pbnN0YW5jZS9pbWFnZV9zaWduLmh0bWwnKTtcbiAgaW1hZ2VTaWduQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKGltYWdlU2lnbkh0bWwsIHtcbiAgICBpc0JvZHk6IHRydWVcbiAgfSk7XG4gIGltYWdlU2lnblJlbmRlckZ1bmN0aW9uID0gZXZhbChpbWFnZVNpZ25Db21waWxlZCk7XG4gIFRlbXBsYXRlLmltYWdlU2lnbiA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcImltYWdlU2lnblwiLCBpbWFnZVNpZ25SZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLmltYWdlU2lnbi5zdGVlZG9zRGF0YSA9IHN0ZWVkb3NEYXRhO1xuICByZXR1cm4gVGVtcGxhdGUuaW1hZ2VTaWduLmhlbHBlcnMoSW1hZ2VTaWduLmhlbHBlcnMpO1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZVRyYWNlc0hhbmxkZXIgPSBmdW5jdGlvbihzdGVlZG9zRGF0YSkge1xuICB2YXIgdHJhY2VzSGFubGRlckNvbXBpbGVkLCB0cmFjZXNIYW5sZGVySHRtbCwgdHJhY2VzSGFubGRlclJlbmRlckZ1bmN0aW9uO1xuICB0cmFjZXNIYW5sZGVySHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL3RyYWNlc19oYW5kbGVyLmh0bWwnKTtcbiAgdHJhY2VzSGFubGRlckNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZSh0cmFjZXNIYW5sZGVySHRtbCwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgdHJhY2VzSGFubGRlclJlbmRlckZ1bmN0aW9uID0gZXZhbCh0cmFjZXNIYW5sZGVyQ29tcGlsZWQpO1xuICBUZW1wbGF0ZS5pbnN0YW5jZV90cmFjZXNfaGFuZGxlciA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcImluc3RhbmNlX3RyYWNlc19oYW5kbGVyXCIsIHRyYWNlc0hhbmxkZXJSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLmluc3RhbmNlX3RyYWNlc19oYW5kbGVyLnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZV90cmFjZXNfaGFuZGxlci5oZWxwZXJzKFRyYWNlc0hhbmRsZXIuaGVscGVycyk7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuaW5pdCA9IGZ1bmN0aW9uKHN0ZWVkb3NEYXRhKSB7XG4gIEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJhZlNlbGVjdFVzZXJSZWFkXCIsIHN0ZWVkb3NEYXRhKTtcbiAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgIEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGUoXCJhZkZvcm1Hcm91cFwiLCBzdGVlZG9zRGF0YSk7XG4gIH1cbiAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmNyZWF0ZShcImFmRm9ybUdyb3VwUmVhZFwiLCBzdGVlZG9zRGF0YSk7XG4gIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlKFwiaW5zdGFuY2VfYXR0YWNobWVudFwiLCB7XG4gICAgICBhYnNvbHV0ZTogc3RlZWRvc0RhdGEuYWJzb2x1dGVcbiAgICB9KTtcbiAgICBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlSW1hZ2VTaWduKHN0ZWVkb3NEYXRhKTtcbiAgICBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuY3JlYXRlVHJhY2VzSGFubGRlcihzdGVlZG9zRGF0YSk7XG4gICAgcmV0dXJuIEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5jcmVhdGVJbnN0YW5jZVNpZ25UZXh0KHN0ZWVkb3NEYXRhKTtcbiAgfVxufTtcblxuZ2V0TGlua1RleHQgPSBmdW5jdGlvbihpdGVtLCBsYWJlbCwgZGV0YWlsX3VybCkge1xuICBpZiAoZGV0YWlsX3VybCkge1xuICAgIGRldGFpbF91cmwgPSBkZXRhaWxfdXJsLnJlcGxhY2UoXCJ7X2lkfVwiLCBpdGVtLl9pZCk7XG4gICAgaWYgKCEvXmh0dHAocz8pOlxcL1xcLy8udGVzdChkZXRhaWxfdXJsKSkge1xuICAgICAgZGV0YWlsX3VybCA9IFN0ZWVkb3MuYWJzb2x1dGVVcmwoZGV0YWlsX3VybCk7XG4gICAgfVxuICAgIHJldHVybiAnPGEgaHJlZj1cIicgKyBkZXRhaWxfdXJsICsgJ1wiIHRhcmdldD1cIl9ibGFua1wiPicgKyBsYWJlbCArICc8L2E+JztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlLCBmaWVsZCwgbG9jYWxlLCB1dGNPZmZzZXQpIHtcbiAgdmFyIGRhdGUsIGRldGFpbF91cmwsIGUsIGZpZWxkT3B0aW9ucywgaG91cnMsIG1vbnRoLCBuYW1lRmllbGQsIHJlY29yZHMsIHJlcywgc2Vjb25kcywgc2VsZWN0ZWRPcHRpb24sIHNlbGVjdGVkT3B0aW9ucywgc3BsaXRlZFZhbHVlcywgdCwgdDAsIHQxLCB1aVNjaGVtYSwgeWVhcjtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKFtcInNlbGVjdFwiLCBcIm11bHRpU2VsZWN0XCIsIFwicmFkaW9cIl0uaW5kZXhPZihmaWVsZC50eXBlKSA+IC0xKSB7XG4gICAgZmllbGRPcHRpb25zID0gZmllbGQub3B0aW9ucy5zcGxpdChcIlxcblwiKS5tYXAoZnVuY3Rpb24obikge1xuICAgICAgdmFyIGl0ZW1TcGxpdHM7XG4gICAgICBpdGVtU3BsaXRzID0gbi5zcGxpdChcIjpcIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogaXRlbVNwbGl0c1swXSxcbiAgICAgICAgdmFsdWU6IGl0ZW1TcGxpdHNbMV0gfHwgblxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICBjYXNlICdlbWFpbCc6XG4gICAgICB2YWx1ZSA9IHZhbHVlID8gJzxhIGhyZWY9XFwnbWFpbHRvOicgKyB2YWx1ZSArICdcXCc+JyArIHZhbHVlICsgJzwvYT4nIDogJyc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1cmwnOlxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiaHR0cFwiKSA9PT0gMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFwiPGEgaHJlZj0nXCIgKyBlbmNvZGVVUkkodmFsdWUpICsgXCInIHRhcmdldD0nX2JsYW5rJz5cIiArIHZhbHVlICsgXCI8L2E+XCI7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGUgPSBlcnJvcjtcbiAgICAgICAgICAgIHZhbHVlID0gXCI8YSBocmVmPScnIHRhcmdldD0nX2JsYW5rJz5cIiArIHZhbHVlICsgXCI8L2E+XCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gXCI8YSBocmVmPSdodHRwOi8vXCIgKyBlbmNvZGVVUkkodmFsdWUpICsgXCInIHRhcmdldD0nX2JsYW5rJz5cIiArIHZhbHVlICsgXCI8L2E+XCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cCc6XG4gICAgICBpZiAoZmllbGQuaXNfbXVsdGlzZWxlY3QpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUuZ2V0UHJvcGVydHkoXCJmdWxsbmFtZVwiKS50b1N0cmluZygpIDogdm9pZCAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUuZnVsbG5hbWUgOiB2b2lkIDA7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIGlmIChmaWVsZC5pc19tdWx0aXNlbGVjdCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS5nZXRQcm9wZXJ0eShcIm5hbWVcIikudG9TdHJpbmcoKSA6IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLm5hbWUgOiB2b2lkIDA7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICB2YWx1ZSA9ICcqKioqKionO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9PSAnZmFsc2UnKSB7XG4gICAgICAgIHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfeWVzXCIsIHt9LCBsb2NhbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF9ub1wiLCB7fSwgbG9jYWxlKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2RhdGVUaW1lJzpcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPT09IDE2KSB7XG4gICAgICAgIHQgPSB2YWx1ZS5zcGxpdChcIlRcIik7XG4gICAgICAgIHQwID0gdFswXS5zcGxpdChcIi1cIik7XG4gICAgICAgIHQxID0gdFsxXS5zcGxpdChcIjpcIik7XG4gICAgICAgIHllYXIgPSB0MFswXTtcbiAgICAgICAgbW9udGggPSB0MFsxXTtcbiAgICAgICAgZGF0ZSA9IHQwWzJdO1xuICAgICAgICBob3VycyA9IHQxWzBdO1xuICAgICAgICBzZWNvbmRzID0gdDFbMV07XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXRlLCBob3Vycywgc2Vjb25kcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmZvcm1hdERhdGUodmFsdWUsIHV0Y09mZnNldCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0aW1lJzpcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPT09IDE2KSB7XG4gICAgICAgIHQgPSB2YWx1ZS5zcGxpdChcIlRcIik7XG4gICAgICAgIHQwID0gdFswXS5zcGxpdChcIi1cIik7XG4gICAgICAgIHQxID0gdFsxXS5zcGxpdChcIjpcIik7XG4gICAgICAgIHllYXIgPSB0MFswXTtcbiAgICAgICAgbW9udGggPSB0MFsxXTtcbiAgICAgICAgZGF0ZSA9IHQwWzJdO1xuICAgICAgICBob3VycyA9IHQxWzBdO1xuICAgICAgICBzZWNvbmRzID0gdDFbMV07XG4gICAgICAgIHZhbHVlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXRlLCBob3Vycywgc2Vjb25kcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmZvcm1hdFRpbWUodmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaWYgKGZpZWxkLmlzX3RleHRhcmVhKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgc2VsZWN0ZWRPcHRpb24gPSBmaWVsZE9wdGlvbnMuZmluZChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlID09PSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgIHZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubGFiZWw7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyYWRpbyc6XG4gICAgICBzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWUgPT09IHZhbHVlO1xuICAgICAgfSk7XG4gICAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgdmFsdWUgPSBzZWxlY3RlZE9wdGlvbi5sYWJlbDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ211bHRpU2VsZWN0JzpcbiAgICAgIHNwbGl0ZWRWYWx1ZXMgPSB2YWx1ZS5zcGxpdChcIixcIik7XG4gICAgICBzZWxlY3RlZE9wdGlvbnMgPSBmaWVsZE9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHNwbGl0ZWRWYWx1ZXMuaW5kZXhPZihpdGVtLnZhbHVlKSA+IC0xO1xuICAgICAgfSk7XG4gICAgICBpZiAoc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgIHJldHVybiBpdGVtLmxhYmVsO1xuICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBpZiAodmFsdWUgfHwgdmFsdWUgPT09IDApIHtcbiAgICAgICAgaWYgKGZpZWxkLmlzX3BlcmNlbnQpIHtcbiAgICAgICAgICB2YWx1ZSA9IFN0ZWVkb3MubnVtYmVyVG9QZXJjZW50U3RyaW5nKHZhbHVlLCBmaWVsZC5kaWdpdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gU3RlZWRvcy5udW1iZXJUb1N0cmluZyh2YWx1ZSwgZmllbGQuZGlnaXRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnb2RhdGEnOlxuICAgICAgZGV0YWlsX3VybCA9IGZpZWxkLmRldGFpbF91cmw7XG4gICAgICBpZiAoZmllbGQuaXNfbXVsdGlzZWxlY3QpIHtcbiAgICAgICAgdmFsdWUgPSBfLm1hcCh2YWx1ZSwgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgIHJldHVybiBnZXRMaW5rVGV4dChpdGVtLCBpdGVtWydAbGFiZWwnXSwgZGV0YWlsX3VybCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBnZXRMaW5rVGV4dCh2YWx1ZSwgdmFsdWVbJ0BsYWJlbCddLCBkZXRhaWxfdXJsKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgIGlmIChmaWVsZC5pc19tdWx0aXNlbGVjdCkge1xuICAgICAgICB2YWx1ZSA9IF8ubWFwKHZhbHVlLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZUNvbnRyb2wtaXRlbSBpcy11cGxvYWRlZFwiPiA8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZSBhbnRkLUltYWdlLS10aHVtYiBhbnRkLUltYWdlQ29udHJvbC1pbWFnZVwiPiA8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYldyYXBcIj4gPGRpdiBjbGFzcz1cImFudGQtSW1hZ2UtdGh1bWJcIj48aW1nIGNsYXNzPVwiYW50ZC1JbWFnZS1pbWFnZVwiIHNyYz1cIi9hcGkvZmlsZXMvaW1hZ2VzLycgKyBpdGVtICsgJ1wiPjwvZGl2PiA8L2Rpdj4gPC9kaXY+IDwvZGl2Pic7XG4gICAgICAgIH0pO1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oXCJcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICc8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZUNvbnRyb2wtaXRlbSBpcy11cGxvYWRlZFwiPiA8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZSBhbnRkLUltYWdlLS10aHVtYiBhbnRkLUltYWdlQ29udHJvbC1pbWFnZVwiPiA8ZGl2IGNsYXNzPVwiYW50ZC1JbWFnZS10aHVtYldyYXBcIj4gPGRpdiBjbGFzcz1cImFudGQtSW1hZ2UtdGh1bWJcIj48aW1nIGNsYXNzPVwiYW50ZC1JbWFnZS1pbWFnZVwiIHNyYz1cIi9hcGkvZmlsZXMvaW1hZ2VzLycgKyB2YWx1ZSArICdcIj48L2Rpdj4gPC9kaXY+IDwvZGl2PiA8L2Rpdj4nO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZmlsZSc6XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCFmaWVsZC5pc19tdWx0aXNlbGVjdCkge1xuICAgICAgICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICAgICAgcmVzID0gU3RlZWRvcy5hdXRoUmVxdWVzdCgnL2FwaS92MS9jZnNfZmlsZXNfZmlsZXJlY29yZD9maWx0ZXJzPVtbXCJfaWRcIixcImluXCIsICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnXV0mZmllbGRzPVtcIl9pZFwiLFwib3JpZ2luYWxcIl0nLCB7XG4gICAgICAgICAgICBhc3luYzogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZWNvcmRzID0gcmVzLmRhdGEuaXRlbXM7XG4gICAgICAgIH0gZWxzZSBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICAgICAgcmVjb3JkcyA9IFN0ZWVkb3Mub2JqZWN0RmluZChcImNmc19maWxlc19maWxlcmVjb3JkXCIsIHtcbiAgICAgICAgICAgIGZpbHRlcnM6IFtbXCJfaWRcIiwgJ2luJywgdmFsdWVdXSxcbiAgICAgICAgICAgIGZpZWxkczogW1wiX2lkXCIsIFwib3JpZ2luYWxcIl1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9IF8ubWFwKHJlY29yZHMsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICB2YXIgZmlsZU5hbWUsIGZpbGVQcmV2aWV3SHRtbCwgZmlsZVR5cGUsIGZpbGVVcmwsIG1hdGNoO1xuICAgICAgICAgIGZpbGVOYW1lID0gaXRlbS5vcmlnaW5hbC5uYW1lO1xuICAgICAgICAgIGZpbGVVcmwgPSBTdGVlZG9zLmFic29sdXRlVXJsKCcvYXBpL2ZpbGVzL2ZpbGVzLycgKyBpdGVtLl9pZCk7XG4gICAgICAgICAgbWF0Y2ggPSBmaWxlTmFtZS5tYXRjaCgvXFwuKFteXFwuXSspJC8pO1xuICAgICAgICAgIGZpbGVUeXBlID0gbWF0Y2hbMF0gfHwgXCJcIjtcbiAgICAgICAgICBmaWxlUHJldmlld0h0bWwgPSAnJztcbiAgICAgICAgICBpZiAoW1wiLnBkZlwiLCBcIi5qcGdcIiwgXCIuanBlZ1wiLCBcIi5wbmdcIiwgXCIuZ2lmXCJdLmluZGV4T2YoZmlsZVR5cGUpID4gLTEpIHtcbiAgICAgICAgICAgIGZpbGVQcmV2aWV3SHRtbCA9IFwiJmVuc3A7PGEgaHJlZj0nXCIgKyBmaWxlVXJsICsgXCInIHRhcmdldD0nX2JsYW5rJyBjbGFzcz0nYW50ZC1MaW5rJz48c3BhbiBjbGFzcz0nYW50ZC1UcGxGaWVsZCc+PHNwYW4+6aKE6KeIPC9zcGFuPjwvc3Bhbj48L2E+XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcIjxkaXY+PGEgaHJlZj0nXCIgKyAoZmlsZVVybCArICc/ZG93bmxvYWQ9dHJ1ZScpICsgXCInIHRhcmdldD0nX2JsYW5rJz5cIiArIGZpbGVOYW1lICsgXCI8L2E+IFwiICsgKGZpbGVQcmV2aWV3SHRtbCAhPSBudWxsID8gZmlsZVByZXZpZXdIdG1sIDoge1xuICAgICAgICAgICAgZmlsZVByZXZpZXdIdG1sOiAnJ1xuICAgICAgICAgIH0pICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuam9pbihcIlwiKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2xvb2t1cCc6XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCFmaWVsZC5pc19tdWx0aXNlbGVjdCkge1xuICAgICAgICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICAgICAgdWlTY2hlbWEgPSBDcmVhdG9yLmdldE9iamVjdChmaWVsZC5yZWZlcmVuY2VfdG8pO1xuICAgICAgICAgIG5hbWVGaWVsZCA9ICh1aVNjaGVtYSAhPSBudWxsID8gdWlTY2hlbWEuTkFNRV9GSUVMRF9LRVkgOiB2b2lkIDApIHx8ICduYW1lJztcbiAgICAgICAgICByZXMgPSBTdGVlZG9zLmF1dGhSZXF1ZXN0KCcvYXBpL3YxLycgKyBmaWVsZC5yZWZlcmVuY2VfdG8gKyAnP2ZpbHRlcnM9W1tcIicgKyAoZmllbGQucmVmZXJlbmNlX3RvX2ZpZWxkIHx8ICdfaWQnKSArICdcIixcImluXCIsICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnXV0mZmllbGRzPVtcIl9pZFwiLFwiJyArIG5hbWVGaWVsZCArICdcIl0nLCB7XG4gICAgICAgICAgICBhc3luYzogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZWNvcmRzID0gcmVzLmRhdGEuaXRlbXM7XG4gICAgICAgIH0gZWxzZSBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICAgICAgbmFtZUZpZWxkID0gU3RlZWRvcy5nZXRPYmplY3ROYW1lRmllbGRLZXkoZmllbGQucmVmZXJlbmNlX3RvKTtcbiAgICAgICAgICByZWNvcmRzID0gU3RlZWRvcy5vYmplY3RGaW5kKGZpZWxkLnJlZmVyZW5jZV90bywge1xuICAgICAgICAgICAgZmlsdGVyczogW1tmaWVsZC5yZWZlcmVuY2VfdG9fZmllbGQgfHwgJ19pZCcsICdpbicsIHZhbHVlXV0sXG4gICAgICAgICAgICBmaWVsZHM6IFtcIl9pZFwiLCBuYW1lRmllbGRdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBfLm1hcChyZWNvcmRzLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIFwiPGEgaHJlZj0nXCIgKyAoU3RlZWRvcy5hYnNvbHV0ZVVybCgnL2FwcC8tLycgKyBmaWVsZC5yZWZlcmVuY2VfdG8gKyAnL3ZpZXcvJyArIGl0ZW0uX2lkKSkgKyBcIicgdGFyZ2V0PSdfYmxhbmsnPlwiICsgaXRlbVtuYW1lRmllbGRdICsgXCI8L2E+XCI7XG4gICAgICAgIH0pO1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oXCIgLCBcIik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdodG1sJzpcbiAgICAgIHZhbHVlID0gdmFsdWUgPyBcIjxkaXYgY2xhc3M9XFxcInN0ZWVkb3MtaHRtbFxcXCI+XCIgKyB2YWx1ZSArIFwiPC9kaXY+XCIgOiAnJztcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0TGFiZWwgPSBmdW5jdGlvbihmaWVsZHMsIGNvZGUpIHtcbiAgdmFyIGZpZWxkO1xuICBmaWVsZCA9IGZpZWxkcy5maW5kUHJvcGVydHlCeVBLKFwiY29kZVwiLCBjb2RlKTtcbiAgaWYgKGZpZWxkKSB7XG4gICAgaWYgKGZpZWxkLm5hbWUpIHtcbiAgICAgIHJldHVybiBmaWVsZC5uYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmllbGQuY29kZTtcbiAgICB9XG4gIH1cbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uID0gZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgdmFyIGZvcm0sIGZvcm1fZmllbGRzLCBmb3JtX3ZlcnNpb247XG4gIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuICBmb3JtX3ZlcnNpb24gPSB7fTtcbiAgZm9ybV9maWVsZHMgPSBbXTtcbiAgaWYgKGZvcm0uY3VycmVudC5faWQgPT09IGluc3RhbmNlLmZvcm1fdmVyc2lvbikge1xuICAgIGZvcm1fdmVyc2lvbiA9IGZvcm0uY3VycmVudDtcbiAgfSBlbHNlIHtcbiAgICBmb3JtX3ZlcnNpb24gPSBfLndoZXJlKGZvcm0uaGlzdG9yeXMsIHtcbiAgICAgIF9pZDogaW5zdGFuY2UuZm9ybV92ZXJzaW9uXG4gICAgfSlbMF07XG4gIH1cbiAgZm9ybV92ZXJzaW9uLmZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxkKSB7XG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWN0aW9uJykge1xuICAgICAgZm9ybV9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICBpZiAoZmllbGQuZmllbGRzKSB7XG4gICAgICAgIHJldHVybiBmaWVsZC5maWVsZHMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1fZmllbGRzLnB1c2goZik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgZmllbGRbJ3NmaWVsZHMnXSA9IGZpZWxkWydmaWVsZHMnXTtcbiAgICAgIGRlbGV0ZSBmaWVsZFsnZmllbGRzJ107XG4gICAgICByZXR1cm4gZm9ybV9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmb3JtX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICB9XG4gIH0pO1xuICBmb3JtX3ZlcnNpb24uZmllbGRzID0gZm9ybV9maWVsZHM7XG4gIHJldHVybiBmb3JtX3ZlcnNpb247XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0Rmxvd1ZlcnNpb24gPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICB2YXIgZmxvdywgZmxvd192ZXJzaW9uO1xuICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZShpbnN0YW5jZS5mbG93KTtcbiAgZmxvd192ZXJzaW9uID0ge307XG4gIGlmIChmbG93LmN1cnJlbnQuX2lkID09PSBpbnN0YW5jZS5mbG93X3ZlcnNpb24pIHtcbiAgICBmbG93X3ZlcnNpb24gPSBmbG93LmN1cnJlbnQ7XG4gIH0gZWxzZSB7XG4gICAgZmxvd192ZXJzaW9uID0gXy53aGVyZShmbG93Lmhpc3RvcnlzLCB7XG4gICAgICBfaWQ6IGluc3RhbmNlLmZsb3dfdmVyc2lvblxuICAgIH0pWzBdO1xuICB9XG4gIHJldHVybiBmbG93X3ZlcnNpb247XG59O1xuXG5fZ2V0Vmlld0h0bWwgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHZhciB2aWV3SHRtbDtcbiAgdmlld0h0bWwgPSBBc3NldHMuZ2V0VGV4dChwYXRoKTtcbiAgaWYgKHZpZXdIdG1sKSB7XG4gICAgdmlld0h0bWwgPSB2aWV3SHRtbC5yZXBsYWNlKC88dGVtcGxhdGVbXFx3XFxzXFxcIlxcPSddKz4vaSwgXCJcIikucmVwbGFjZSgvPFxcL3RlbXBsYXRlPi9pLCBcIlwiKTtcbiAgfVxuICByZXR1cm4gdmlld0h0bWw7XG59O1xuXG5fZ2V0TG9jYWxlID0gZnVuY3Rpb24odXNlcikge1xuICB2YXIgbG9jYWxlLCByZWYsIHJlZjE7XG4gIGlmICgodXNlciAhPSBudWxsID8gKHJlZiA9IHVzZXIubG9jYWxlKSAhPSBudWxsID8gcmVmLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiB2b2lkIDAgOiB2b2lkIDApID09PSAnemgtY24nKSB7XG4gICAgbG9jYWxlID0gXCJ6aC1DTlwiO1xuICB9IGVsc2UgaWYgKCh1c2VyICE9IG51bGwgPyAocmVmMSA9IHVzZXIubG9jYWxlKSAhPSBudWxsID8gcmVmMS50b0xvY2FsZUxvd2VyQ2FzZSgpIDogdm9pZCAwIDogdm9pZCAwKSA9PT0gJ2VuLXVzJykge1xuICAgIGxvY2FsZSA9IFwiZW5cIjtcbiAgfSBlbHNlIHtcbiAgICBsb2NhbGUgPSBcInpoLUNOXCI7XG4gIH1cbiAgcmV0dXJuIGxvY2FsZTtcbn07XG5cbl9nZXRSZXF1aXJlZEZpZWxkcyA9IGZ1bmN0aW9uKGZpZWxkcywgcmV2KSB7XG4gIGlmICghcmV2KSB7XG4gICAgcmV2ID0gW107XG4gIH1cbiAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpIHtcbiAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3NlY3Rpb24nKSB7XG4gICAgICByZXR1cm4gX2dldFJlcXVpcmVkRmllbGRzKGZpZWxkLmZpZWxkcywgcmV2KTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJsZScpIHtcblxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmllbGQuaXNfcmVxdWlyZWQpIHtcbiAgICAgICAgcmV0dXJuIHJldi5wdXNoKGZpZWxkLmNvZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXY7XG59O1xuXG5fZ2V0U3RhcnRTdGVwRWRpdGFibGVGaWVsZHMgPSBmdW5jdGlvbihmaWVsZHMsIHN0ZXBzKSB7XG4gIHZhciBlZGl0YWJsZUNvZGUsIHN0YXJ0U3RlcDtcbiAgc3RhcnRTdGVwID0gc3RlcHMuZmluZFByb3BlcnR5QnlQSyhcInN0ZXBfdHlwZVwiLCBcInN0YXJ0XCIpO1xuICBlZGl0YWJsZUNvZGUgPSBbXTtcbiAgXy5rZXlzKHN0YXJ0U3RlcC5wZXJtaXNzaW9ucykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoc3RhcnRTdGVwLnBlcm1pc3Npb25zW2tleV0gPT09ICdlZGl0YWJsZScpIHtcbiAgICAgIHJldHVybiBlZGl0YWJsZUNvZGUucHVzaChrZXkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlZGl0YWJsZUNvZGU7XG59O1xuXG5fZ2V0U3RhcnRTdGVwUmVxdWlyZWRGaWVsZHMgPSBmdW5jdGlvbihmaWVsZHMsIHN0ZXBzKSB7XG4gIHZhciBlZGl0YWJsZUNvZGUsIHJlcXVpcmVkRmllbGRzO1xuICByZXF1aXJlZEZpZWxkcyA9IF9nZXRSZXF1aXJlZEZpZWxkcyhmaWVsZHMpO1xuICBlZGl0YWJsZUNvZGUgPSBfZ2V0U3RhcnRTdGVwRWRpdGFibGVGaWVsZHMoZmllbGRzLCBzdGVwcyk7XG4gIHJldHVybiBfLmludGVyc2VjdGlvbihyZXF1aXJlZEZpZWxkcywgZWRpdGFibGVDb2RlKTtcbn07XG5cbl9nZXRUZW1wbGF0ZURhdGEgPSBmdW5jdGlvbih1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGZsb3csIGZvcm0sIGZvcm1fdmVyc2lvbiwgbG9jYWxlLCBzdGVlZG9zRGF0YTtcbiAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgIGZvcm1fdmVyc2lvbiA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKGluc3RhbmNlKTtcbiAgfSBlbHNlIHtcbiAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbihpbnN0YW5jZSk7XG4gIH1cbiAgbG9jYWxlID0gX2dldExvY2FsZSh1c2VyKTtcbiAgc3RlZWRvc0RhdGEgPSB7fTtcbiAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgIHN0ZWVkb3NEYXRhID0gXy5jbG9uZShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCkpO1xuICAgIHN0ZWVkb3NEYXRhLmluc25hbWUgPSBpbnN0YW5jZS5uYW1lO1xuICAgIHN0ZWVkb3NEYXRhLmluc19zdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuICAgIHN0ZWVkb3NEYXRhLmluc19maW5hbF9kZWNpc2lvbiA9IGluc3RhbmNlLmluc19maW5hbF9kZWNpc2lvbjtcbiAgICBzdGVlZG9zRGF0YS5pbnNfY29kZSA9IGluc3RhbmNlLmNvZGU7XG4gICAgc3RlZWRvc0RhdGEuaW5zX2lzX2FyY2hpdmVkID0gaW5zdGFuY2UuaXNfYXJjaGl2ZWQ7XG4gICAgc3RlZWRvc0RhdGEuaW5zX2lzX2RlbGV0ZWQgPSBpbnN0YW5jZS5pbnNfaXNfZGVsZXRlZDtcbiAgICBzdGVlZG9zRGF0YS5hcHBsaWNhbnRfbmFtZSA9IGluc3RhbmNlLmFwcGxpY2FudF9uYW1lO1xuICAgIHN0ZWVkb3NEYXRhLmFwcGxpY2FudENvbnRleHQgPSBpbnN0YW5jZS5hcHBsaWNhbnRfbmFtZTtcbiAgfVxuICBzdGVlZG9zRGF0YS5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICBzdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb24gPSBmb3JtX3ZlcnNpb247XG4gIHN0ZWVkb3NEYXRhLmxvY2FsZSA9IGxvY2FsZTtcbiAgc3RlZWRvc0RhdGEudXRjT2Zmc2V0ID0gdXNlci51dGNPZmZzZXQ7XG4gIHN0ZWVkb3NEYXRhLnNwYWNlID0gaW5zdGFuY2Uuc3BhY2U7XG4gIHN0ZWVkb3NEYXRhLnNlc3Npb25Vc2VySWQgPSB1c2VyLl9pZDtcbiAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmVkaXRhYmxlIDogdm9pZCAwKSB7XG4gICAgICBmb3JtID0gZGIuZm9ybXMuZmluZE9uZSh7XG4gICAgICAgIF9pZDogaW5zdGFuY2UuZm9ybVxuICAgICAgfSk7XG4gICAgICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7XG4gICAgICAgIF9pZDogaW5zdGFuY2UuZmxvd1xuICAgICAgfSk7XG4gICAgICBzdGVlZG9zRGF0YS5zdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyA9IF9nZXRTdGFydFN0ZXBFZGl0YWJsZUZpZWxkcyhmb3JtLmN1cnJlbnQuZmllbGRzLCBmbG93LmN1cnJlbnQuc3RlcHMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RlZWRvc0RhdGE7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uKGRhdGUsIHV0Y09mZnNldCkge1xuICB2YXIgcGFzc2luZztcbiAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgIHBhc3NpbmcgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBwYXNzaW5nID0gdHJ1ZTtcbiAgfVxuICBpZiAoIXV0Y09mZnNldCAmJiB1dGNPZmZzZXQgIT09IDApIHtcbiAgICB1dGNPZmZzZXQgPSA4O1xuICB9XG4gIHJldHVybiBtb21lbnQoZGF0ZSkudXRjT2Zmc2V0KHV0Y09mZnNldCwgcGFzc2luZykuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbVwiKTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5mb3JtYXRUaW1lID0gZnVuY3Rpb24oZGF0ZSkge1xuICB2YXIgdXRjT2Zmc2V0O1xuICB1dGNPZmZzZXQgPSAwO1xuICByZXR1cm4gbW9tZW50KGRhdGUpLnV0Y09mZnNldCh1dGNPZmZzZXQpLmZvcm1hdChcIkhIOm1tXCIpO1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgaW5zdGFuY2VDb21waWxlZCwgaW5zdGFuY2VSZW5kZXJGdW5jdGlvbiwgaW5zdGFuY2VUZW1wbGF0ZSwgc3RlZWRvc0RhdGE7XG4gIHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpO1xuICBzdGVlZG9zRGF0YS5hYnNvbHV0ZSA9IGZhbHNlO1xuICBpZiAob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5hYnNvbHV0ZSA6IHZvaWQgMCkge1xuICAgIHN0ZWVkb3NEYXRhLmFic29sdXRlID0gdHJ1ZTtcbiAgfVxuICBpbnN0YW5jZVRlbXBsYXRlID0gVGVtcGxhdGVNYW5hZ2VyLmdldFRlbXBsYXRlKGluc3RhbmNlLCBvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLnRlbXBsYXRlTmFtZSA6IHZvaWQgMCk7XG4gIGluc3RhbmNlVGVtcGxhdGUgPSBpbnN0YW5jZVRlbXBsYXRlLnJlcGxhY2UoL2FmU2VsZWN0VXNlci9nLCBcImFmU2VsZWN0VXNlclJlYWRcIik7XG4gIGlmICghKG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMuZWRpdGFibGUgOiB2b2lkIDApKSB7XG4gICAgaW5zdGFuY2VUZW1wbGF0ZSA9IGluc3RhbmNlVGVtcGxhdGUucmVwbGFjZSgvYWZGb3JtR3JvdXAvZywgXCJhZkZvcm1Hcm91cFJlYWRcIik7XG4gIH1cbiAgaW5zdGFuY2VDb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUoaW5zdGFuY2VUZW1wbGF0ZSwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgaW5zdGFuY2VSZW5kZXJGdW5jdGlvbiA9IGV2YWwoaW5zdGFuY2VDb21waWxlZCk7XG4gIFRlbXBsYXRlLmluc3RhbmNlX3JlYWRvbmx5X3ZpZXcgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJpbnN0YW5jZV9yZWFkb25seV92aWV3XCIsIGluc3RhbmNlUmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5pbnN0YW5jZV9yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIFRlbXBsYXRlLmluc3RhbmNlX3JlYWRvbmx5X3ZpZXcuaGVscGVycyhJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzKTtcbiAgSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmluaXQoc3RlZWRvc0RhdGEpO1xuICBib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUuaW5zdGFuY2VfcmVhZG9ubHlfdmlldywgc3RlZWRvc0RhdGEpO1xuICByZXR1cm4gXCI8ZGl2IGlkPSdpbnN0YW5jZWZvcm0nID5cXG5cdFwiICsgYm9keSArIFwiXFxuPC9kaXY+XCI7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VHJhY2VzVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgZm9ybSwgc3RlZWRvc0RhdGEsIHRyYWNlQ29tcGlsZWQsIHRyYWNlUmVuZGVyRnVuY3Rpb24sIHRyYWNlc0h0bWw7XG4gIHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpO1xuICBmb3JtID0gZGIuZm9ybXMuZmluZE9uZShpbnN0YW5jZS5mb3JtKTtcbiAgaWYgKGZvcm0uaW5zdGFuY2Vfc3R5bGUgPT09IFwidGFibGVcIiB8fCAob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy50ZW1wbGF0ZU5hbWUgOiB2b2lkIDApID09PSBcInRhYmxlXCIpIHtcbiAgICB0cmFjZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzX3RhYmxlLmh0bWwnKTtcbiAgfSBlbHNlIHtcbiAgICB0cmFjZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvdHJhY2VzLmh0bWwnKTtcbiAgfVxuICB0cmFjZUNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZSh0cmFjZXNIdG1sLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICB0cmFjZVJlbmRlckZ1bmN0aW9uID0gZXZhbCh0cmFjZUNvbXBpbGVkKTtcbiAgVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldyA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShcInRyYWNlX3JlYWRvbmx5X3ZpZXdcIiwgdHJhY2VSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLnRyYWNlX3JlYWRvbmx5X3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldy5oZWxwZXJzKFRyYWNlc1RlbXBsYXRlLmhlbHBlcnMpO1xuICBib2R5ID0gQmxhemUudG9IVE1MV2l0aERhdGEoVGVtcGxhdGUudHJhY2VfcmVhZG9ubHlfdmlldywgaW5zdGFuY2UudHJhY2VzKTtcbiAgcmV0dXJuIGJvZHk7XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0QXR0YWNobWVudFZpZXcgPSBmdW5jdGlvbih1c2VyLCBzcGFjZSwgaW5zdGFuY2UpIHtcbiAgdmFyIGF0dGFjaG1lbnRDb21waWxlZCwgYXR0YWNobWVudEh0bWwsIGF0dGFjaG1lbnRSZW5kZXJGdW5jdGlvbiwgYm9keSwgc3RlZWRvc0RhdGE7XG4gIHN0ZWVkb3NEYXRhID0gX2dldFRlbXBsYXRlRGF0YSh1c2VyLCBzcGFjZSwgaW5zdGFuY2UpO1xuICBhdHRhY2htZW50SHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL2luc3RhbmNlX2F0dGFjaG1lbnRzLmh0bWwnKTtcbiAgYXR0YWNobWVudENvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShhdHRhY2htZW50SHRtbCwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgYXR0YWNobWVudFJlbmRlckZ1bmN0aW9uID0gZXZhbChhdHRhY2htZW50Q29tcGlsZWQpO1xuICBUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwiYXR0YWNobWVudHNfcmVhZG9ubHlfdmlld1wiLCBhdHRhY2htZW50UmVuZGVyRnVuY3Rpb24pO1xuICBUZW1wbGF0ZS5hdHRhY2htZW50c19yZWFkb25seV92aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIFRlbXBsYXRlLmF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXcuaGVscGVycyhJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzKTtcbiAgYm9keSA9IEJsYXplLnRvSFRNTFdpdGhEYXRhKFRlbXBsYXRlLmF0dGFjaG1lbnRzX3JlYWRvbmx5X3ZpZXcpO1xuICByZXR1cm4gYm9keTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRSZWxhdGVkSW5zdGFuY2VzVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgcmVsYXRlZEluc3RhbmNlc0NvbXBpbGVkLCByZWxhdGVkSW5zdGFuY2VzSHRtbCwgcmVsYXRlZEluc3RhbmNlc1JlbmRlckZ1bmN0aW9uLCBzdGVlZG9zRGF0YTtcbiAgc3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSk7XG4gIHN0ZWVkb3NEYXRhLmFic29sdXRlID0gZmFsc2U7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmFic29sdXRlIDogdm9pZCAwKSB7XG4gICAgc3RlZWRvc0RhdGEuYWJzb2x1dGUgPSB0cnVlO1xuICB9XG4gIHJlbGF0ZWRJbnN0YW5jZXNIdG1sID0gX2dldFZpZXdIdG1sKCdjbGllbnQvdmlld3MvaW5zdGFuY2UvcmVsYXRlZF9pbnN0YW5jZXMuaHRtbCcpO1xuICByZWxhdGVkSW5zdGFuY2VzQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHJlbGF0ZWRJbnN0YW5jZXNIdG1sLCB7XG4gICAgaXNCb2R5OiB0cnVlXG4gIH0pO1xuICByZWxhdGVkSW5zdGFuY2VzUmVuZGVyRnVuY3Rpb24gPSBldmFsKHJlbGF0ZWRJbnN0YW5jZXNDb21waWxlZCk7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcgPSBuZXcgQmxhemUuVGVtcGxhdGUoXCJyZWxhdGVkX2luc3RhbmNlc192aWV3XCIsIHJlbGF0ZWRJbnN0YW5jZXNSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfaW5zdGFuY2VzX3ZpZXcuc3RlZWRvc0RhdGEgPSBzdGVlZG9zRGF0YTtcbiAgVGVtcGxhdGUucmVsYXRlZF9pbnN0YW5jZXNfdmlldy5oZWxwZXJzKFJlbGF0ZWRJbnN0YW5jZXMuaGVscGVycyk7XG4gIGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5yZWxhdGVkX2luc3RhbmNlc192aWV3LCBzdGVlZG9zRGF0YSk7XG4gIHJldHVybiBib2R5O1xufTtcblxuSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFJlbGF0ZWRSZWNvcmRzVmlldyA9IGZ1bmN0aW9uKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucykge1xuICB2YXIgYm9keSwgcmVsYXRlZFJlY29yZHNDb21waWxlZCwgcmVsYXRlZFJlY29yZHNIdG1sLCByZWxhdGVkUmVjb3Jkc1JlbmRlckZ1bmN0aW9uLCBzdGVlZG9zRGF0YTtcbiAgc3RlZWRvc0RhdGEgPSBfZ2V0VGVtcGxhdGVEYXRhKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSk7XG4gIHN0ZWVkb3NEYXRhLmFic29sdXRlID0gZmFsc2U7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmFic29sdXRlIDogdm9pZCAwKSB7XG4gICAgc3RlZWRvc0RhdGEuYWJzb2x1dGUgPSB0cnVlO1xuICB9XG4gIHJlbGF0ZWRSZWNvcmRzSHRtbCA9IF9nZXRWaWV3SHRtbCgnY2xpZW50L3ZpZXdzL2luc3RhbmNlL3JlbGF0ZWRfcmVjb3Jkcy5odG1sJyk7XG4gIHJlbGF0ZWRSZWNvcmRzQ29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHJlbGF0ZWRSZWNvcmRzSHRtbCwge1xuICAgIGlzQm9keTogdHJ1ZVxuICB9KTtcbiAgcmVsYXRlZFJlY29yZHNSZW5kZXJGdW5jdGlvbiA9IGV2YWwocmVsYXRlZFJlY29yZHNDb21waWxlZCk7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3ID0gbmV3IEJsYXplLlRlbXBsYXRlKFwicmVsYXRlZF9yZWNvcmRzX3ZpZXdcIiwgcmVsYXRlZFJlY29yZHNSZW5kZXJGdW5jdGlvbik7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3LnN0ZWVkb3NEYXRhID0gc3RlZWRvc0RhdGE7XG4gIFRlbXBsYXRlLnJlbGF0ZWRfcmVjb3Jkc192aWV3LmhlbHBlcnMoUmVsYXRlZFJlY29yZHMuaGVscGVycyk7XG4gIGJvZHkgPSBCbGF6ZS50b0hUTUxXaXRoRGF0YShUZW1wbGF0ZS5yZWxhdGVkX3JlY29yZHNfdmlldywgc3RlZWRvc0RhdGEpO1xuICByZXR1cm4gYm9keTtcbn07XG5cbkluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRPbkxvYWRTY3JpcHQgPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICB2YXIgZm9ybV9zY3JpcHQsIGZvcm1fdmVyc2lvbjtcbiAgZm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm1WZXJzaW9uKGluc3RhbmNlLmZvcm0sIGluc3RhbmNlLmZvcm1fdmVyc2lvbik7XG4gIGZvcm1fc2NyaXB0ID0gZm9ybV92ZXJzaW9uLmZvcm1fc2NyaXB0O1xuICBpZiAoZm9ybV9zY3JpcHQgJiYgZm9ybV9zY3JpcHQucmVwbGFjZSgvXFxuL2csIFwiXCIpLnJlcGxhY2UoL1xccy9nLCBcIlwiKS5sZW5ndGggPiAwKSB7XG4gICAgZm9ybV9zY3JpcHQgPSBcIkNvcmVGb3JtID0ge307Q29yZUZvcm0uaW5zdGFuY2Vmb3JtID0ge307XCIgKyBmb3JtX3NjcmlwdDtcbiAgICByZXR1cm4gZm9ybV9zY3JpcHQgKz0gXCI7aWYoQ29yZUZvcm0uZm9ybV9PbkxvYWQpe3dpbmRvdy5vbmxvYWQgPSBDb3JlRm9ybS5mb3JtX09uTG9hZCgpO31cIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZm9ybV9zY3JpcHQgPSBcIlwiO1xuICB9XG59O1xuXG5JbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sID0gZnVuY3Rpb24odXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKSB7XG4gIHZhciBhbGxDc3NMaW5rLCBhdHRhY2htZW50LCBib2R5LCBjcmVhdG9yU2VydmljZSwgY3NzSHJlZiwgZm9ybSwgZm9ybURlc2NyaXB0aW9uLCBmb3JtRGVzY3JpcHRpb25IdG1sLCBodG1sLCBpbnNfcmVjb3JkX2lkcywgaW5zdGFuY2VCb3hTdHlsZSwgaW5zdGFuY2Vfc3R5bGUsIGpxSHJlZiwgbG9jYWxlLCBvbkxvYWRTY3JpcHQsIG9wZW5GaWxlU2NyaXB0LCByZWYsIHJlZjEsIHJlbGF0ZWRfaW5zdGFuY2VzLCByZWxhdGVkX3JlY29yZHMsIHNob3dUcmFjZXNCdG4sIHNob3dUcmFjZXNTY3JpcHQsIHRyYWNlLCB0cmFjZUNoZWNrLCB3aWR0aDtcbiAgYm9keSA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZVZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKTtcbiAgb25Mb2FkU2NyaXB0ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldE9uTG9hZFNjcmlwdChpbnN0YW5jZSk7XG4gIGNyZWF0b3JTZXJ2aWNlID0gKHJlZiA9IE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXS53ZWJzZXJ2aWNlcykgIT0gbnVsbCA/IChyZWYxID0gcmVmLmNyZWF0b3IpICE9IG51bGwgPyByZWYxLnVybCA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgaW5zX3JlY29yZF9pZHMgPSBpbnN0YW5jZS5yZWNvcmRfaWRzO1xuICBsb2NhbGUgPSBfZ2V0TG9jYWxlKHVzZXIpO1xuICBvcGVuRmlsZVNjcmlwdCA9IFwiaWYod2luZG93LmlzTm9kZSAmJiBpc05vZGUoKSl7XFxuXHRhdHRhY2hzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcXFwiaW5zX2F0dGFjaF9ocmVmXFxcIik7XFxuXHRmb3IodmFyIGkgPSAwOyBpIDwgYXR0YWNocy5sZW5ndGg7IGkrKyl7XFxuXHRcdGF0dGFjaCA9IGF0dGFjaHNbaV07XFxuXHRcdGF0dGFjaC5hZGRFdmVudExpc3RlbmVyKFxcXCJjbGlja1xcXCIsIGZ1bmN0aW9uKGUpe1xcblx0XHRcdGlmKGlzSW1hZ2UodGhpcy5kYXRhc2V0LnR5cGUpIHx8IGlzSHRtbCh0aGlzLmRhdGFzZXQudHlwZSkpe1xcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xcblx0XHRcdFx0b3BlbldpbmRvdyhcXFwiL2FwaS9maWxlcy9pbnN0YW5jZXMvXFxcIiArIHRoaXMuZGF0YXNldC5pZCk7XFxuXHRcdFx0fWVsc2UgaWYobndfY29yZS5jYW5PcGVuRmlsZSh0aGlzLmRhdGFzZXQubmFtZSkpe1xcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xcblx0XHRcdFx0bndfY29yZS5vcGVuRmlsZSh0aGlzLmhyZWYsIHRoaXMuZGF0YXNldC5uYW1lKVxcblx0XHRcdH1cXG5cdFx0fSk7XFxuXHR9XFxufVxcblxcbnZhciBmbG93ID0gXFxcIlwiICsgaW5zdGFuY2UuZmxvdyArIFwiXFxcIjtcXG52YXIgc3BhY2UgPSBcXFwiXCIgKyBpbnN0YW5jZS5zcGFjZSArIFwiXFxcIjtcXG5cXG5mdW5jdGlvbiBnZXRDb29raWUobmFtZSl7XFxuXHRsZXQgcGF0dGVybiA9IFJlZ0V4cChuYW1lICsgXFxcIj0uW147XSpcXFwiKVxcblx0bGV0IG1hdGNoZWQgPSBkb2N1bWVudC5jb29raWUubWF0Y2gocGF0dGVybilcXG5cdGlmKG1hdGNoZWQpe1xcblx0XHRsZXQgY29va2llID0gbWF0Y2hlZFswXS5zcGxpdCgnPScpXFxuXHRcdHJldHVybiBjb29raWVbMV1cXG5cdH1cXG5cdHJldHVybiAnJ1xcbn1cXG5cXG52YXIgcmVjb3JkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXFxcImlucy1yZWxhdGVkLXJlY29yZHNcXFwiKTtcXG5mb3IodmFyIGkgPSAwOyBpIDwgcmVjb3Jkcy5sZW5ndGg7IGkrKyl7XFxuXHRcdHZhciByZWNvcmQgPSByZWNvcmRzW2ldO1xcblx0XHRyZWNvcmQuYWRkRXZlbnRMaXN0ZW5lcihcXFwiY2xpY2tcXFwiLCBmdW5jdGlvbihlKXtcXG5cdFx0XHR2YXIgY3JlYXRvclNlcnZpY2UgPSBcXFwiXCIgKyBjcmVhdG9yU2VydmljZSArIFwiXFxcIlxcblx0XHRcdHZhciBpbnNfcmVjb3JkX2lkcyA9IFwiICsgKEpTT04uc3RyaW5naWZ5KGluc19yZWNvcmRfaWRzKSkgKyBcIlxcblx0XHRcdGlmKGNyZWF0b3JTZXJ2aWNlICYmIGluc19yZWNvcmRfaWRzICYmIGluc19yZWNvcmRfaWRzLmxlbmd0aCA+IDApe1xcblx0XHRcdFx0dmFyIG9iamNldE5hbWUgPSBpbnNfcmVjb3JkX2lkc1swXS5vXFxuXHRcdFx0XHR2YXIgaWQgPSBpbnNfcmVjb3JkX2lkc1swXS5pZHNbMF1cXG5cdFx0XHRcdHZhciB1b2JqID0ge307XFxuXHRcdFx0XHR1b2JqW1xcXCJYLVVzZXItSWRcXFwiXSA9IGdldENvb2tpZShcXFwiWC1Vc2VyLUlkXFxcIik7XFxuXHRcdFx0XHR1b2JqW1xcXCJYLUF1dGgtVG9rZW5cXFwiXSA9IGdldENvb2tpZShcXFwiWC1BdXRoLVRva2VuXFxcIik7XFxuXHRcdFx0XHRyZWRpcmVjdFVybCA9IGNyZWF0b3JTZXJ2aWNlICsgXFxcImFwcC8tL1xcXCIgKyBvYmpjZXROYW1lICsgXFxcIi92aWV3L1xcXCIgKyBpZCArIFxcXCI/XFxcIiArICQucGFyYW0odW9iaik7XFxuXHRcdFx0XHRvcGVuV2luZG93KHJlZGlyZWN0VXJsKTtcXG5cdFx0XHR9XFxuXHRcdH0pO1xcblx0fVxcblwiO1xuICBpZiAoIVN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuICAgIGlmICgoZm9ybSAhPSBudWxsID8gZm9ybS5pbnN0YW5jZV9zdHlsZSA6IHZvaWQgMCkgPT09ICd0YWJsZScpIHtcbiAgICAgIGluc3RhbmNlX3N0eWxlID0gXCJpbnN0YW5jZS10YWJsZVwiO1xuICAgIH1cbiAgfVxuICBpZiAoKG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMudGVtcGxhdGVOYW1lIDogdm9pZCAwKSA9PT0gJ3RhYmxlJykge1xuICAgIGluc3RhbmNlX3N0eWxlID0gXCJpbnN0YW5jZS10YWJsZVwiO1xuICB9XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmluc3RhbmNlX3N0eWxlIDogdm9pZCAwKSB7XG4gICAgaW5zdGFuY2Vfc3R5bGUgPSBvcHRpb25zLmluc3RhbmNlX3N0eWxlO1xuICB9XG4gIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnNob3dUcmFjZSA9PT0gdHJ1ZSkge1xuICAgIHRyYWNlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFRyYWNlc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlKTtcbiAgfSBlbHNlIHtcbiAgICB0cmFjZSA9IFwiXCI7XG4gIH1cbiAgaW5zdGFuY2VCb3hTdHlsZSA9IFwiXCI7XG4gIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5maW5hbF9kZWNpc2lvbikge1xuICAgIGlmIChpbnN0YW5jZS5maW5hbF9kZWNpc2lvbiA9PT0gXCJhcHByb3ZlZFwiKSB7XG4gICAgICBpbnN0YW5jZUJveFN0eWxlID0gXCJib3gtc3VjY2Vzc1wiO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2UuZmluYWxfZGVjaXNpb24gPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgaW5zdGFuY2VCb3hTdHlsZSA9IFwiYm94LWRhbmdlclwiO1xuICAgIH1cbiAgfVxuICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5zaG93QXR0YWNobWVudHMgPT09IHRydWUpIHtcbiAgICBhdHRhY2htZW50ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEF0dGFjaG1lbnRWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSk7XG4gICAgcmVsYXRlZF9pbnN0YW5jZXMgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZEluc3RhbmNlc1ZpZXcodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKTtcbiAgICByZWxhdGVkX3JlY29yZHMgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0UmVsYXRlZFJlY29yZHNWaWV3KHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgYXR0YWNobWVudCA9IFwiXCI7XG4gICAgcmVsYXRlZF9pbnN0YW5jZXMgPSBcIlwiO1xuICAgIHJlbGF0ZWRfcmVjb3JkcyA9IFwiXCI7XG4gIH1cbiAgd2lkdGggPSBcIjk2MHB4XCI7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLndpZHRoIDogdm9pZCAwKSB7XG4gICAgd2lkdGggPSBcIlwiO1xuICB9XG4gIGNzc0hyZWYgPSBNZXRlb3IuYWJzb2x1dGVVcmwoXCJzdGVlZG9zLWNzc1wiKTtcbiAganFIcmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKFwid2Vic2l0ZS9saWJzL2pxdWVyeS5taW4uanNcIik7XG4gIGFsbENzc0xpbmsgPSBcIjxsaW5rIHJlbD1cXFwic3R5bGVzaGVldFxcXCIgdHlwZT1cXFwidGV4dC9jc3NcXFwiIGNsYXNzPVxcXCJfX21ldGVvci1jc3NfX1xcXCIgaHJlZj1cXFwiXCIgKyBjc3NIcmVmICsgXCJcXFwiPlwiO1xuICB0cmFjZUNoZWNrID0gXCJcIjtcbiAgaWYgKCFfLmlzRW1wdHkodHJhY2UpKSB7XG4gICAgdHJhY2VDaGVjayA9IFwiY2hlY2tlZFwiO1xuICB9XG4gIGlmICgob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy50YWdnZXIgOiB2b2lkIDApID09PSAnZW1haWwnIHx8IChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLmVkaXRhYmxlIDogdm9pZCAwKSkge1xuICAgIHNob3dUcmFjZXNCdG4gPSBcIlwiO1xuICB9IGVsc2Uge1xuICAgIHNob3dUcmFjZXNCdG4gPSBcIjxkaXYgY2xhc3M9XFxcIm5hdmlnYXRpb24tYmFyIGJ0bi1ncm91cCBuby1wcmludFxcXCIgc3R5bGU9XFxcIm1pbi13aWR0aDogNjAwcHg7IHotaW5kZXg6IDk5OTsgYm94LXNpemluZzogYm9yZGVyLWJveDtcXFwiPlxcblx0PGRpdiBjbGFzcz1cXFwicHJpbnQtdG9vbFxcXCI+XFxuXHRcdDxsYWJlbCBjbGFzcz1cXFwiY2J4LWxhYmVsXFxcIj48aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiIGNsYXNzPVxcXCJjYngtcHJpbnQgY2J4LXByaW50LWF0dGFjaG1lbnRzXFxcIiBpZD1cXFwiY2J4LXByaW50LWF0dGFjaG1lbnRzXFxcIiBjaGVja2VkPVxcXCJjaGVja2VkXFxcIj48c3Bhbj5cIiArIChUQVBpMThuLl9fKCdpbnN0YW5jZV9hdHRhY2htZW50Jywge30sIGxvY2FsZSkpICsgXCI8L3NwYW4+PC9sYWJlbD5cXG5cdFx0PGxhYmVsIGNsYXNzPVxcXCJjYngtbGFiZWxcXFwiPjxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCIgY2xhc3M9XFxcImNieC1wcmludCBjYngtcHJpbnQtdHJhY2VzXFxcIiBpZD1cXFwiY2J4LXByaW50LXRyYWNlc1xcXCIgY2hlY2tlZD1cXFwiXCIgKyB0cmFjZUNoZWNrICsgXCJcXFwiPjxzcGFuPlwiICsgKFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmFsX2hpc3RvcnknLCB7fSwgbG9jYWxlKSkgKyBcIjwvc3Bhbj48L2xhYmVsPlxcblx0PC9kaXY+XFxuPC9kaXY+XCI7XG4gIH1cbiAgc2hvd1RyYWNlc1NjcmlwdCA9IFwiJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpe1xcblx0dmFyIGIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2J4LXByaW50LXRyYWNlcycpO1xcblx0dmFyIHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbnN0YW5jZS10cmFjZXMnKVswXTtcXG5cdGlmIChiICYmIGIuY2hlY2tlZCAmJiB0KXtcXG5cdFx0dC5zdHlsZSA9ICdkaXNwbGF5OiBibG9jazsnXFxuXHR9IGVsc2UgaWYodCl7XFxuXHRcdHQuc3R5bGUgPSAnZGlzcGxheTogbm9uZTsnXFxuXHR9XFxuXHRpZihiKXtcXG5cdFx0Yi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbihlKXtcXG5cdFx0XHRpZiAoZS50YXJnZXQuY2hlY2tlZCl7XFxuXHRcdFx0XHR0LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcXG5cdFx0XHR9IGVsc2Uge1xcblx0XHRcdFx0dC5zdHlsZSA9ICdkaXNwbGF5OiBub25lOydcXG5cdFx0XHR9XFxuXHRcdH0pO1xcblx0fVxcblxcblxcblx0dmFyIGF0dGFjaG1lbnRzQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2J4LXByaW50LWF0dGFjaG1lbnRzJyk7XFxuXHR2YXIgYXR0YWNobWVudHNWaWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYXR0YWNobWVudHMtc2VjdGlvbicpWzBdO1xcblx0aWYgKGF0dGFjaG1lbnRzQ2hlY2tib3ggJiYgYXR0YWNobWVudHNDaGVja2JveC5jaGVja2VkICYmIGF0dGFjaG1lbnRzVmlldyl7XFxuXHRcdGF0dGFjaG1lbnRzVmlldy5zdHlsZSA9ICdkaXNwbGF5OiBibG9jazsnXFxuXHR9IGVsc2UgaWYoYXR0YWNobWVudHNWaWV3KXtcXG5cdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xcblx0fVxcblx0aWYoYXR0YWNobWVudHNDaGVja2JveCl7XFxuXHRcdGF0dGFjaG1lbnRzQ2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24oZSl7XFxuXHRcdFx0aWYgKGUudGFyZ2V0LmNoZWNrZWQpe1xcblx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOydcXG5cdFx0XHR9IGVsc2Uge1xcblx0XHRcdFx0YXR0YWNobWVudHNWaWV3LnN0eWxlID0gJ2Rpc3BsYXk6IG5vbmU7J1xcblx0XHRcdH1cXG5cdFx0fSk7XFxuXHR9XFxufSk7XFxuXCI7XG4gIGlmIChvcHRpb25zICE9IG51bGwgPyBvcHRpb25zLnN0eWxlcyA6IHZvaWQgMCkge1xuICAgIGFsbENzc0xpbmsgPSBcIlwiO1xuICB9XG4gIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtcbiAgICBfaWQ6IGluc3RhbmNlLmZvcm1cbiAgfSk7XG4gIGZvcm1EZXNjcmlwdGlvbkh0bWwgPSBcIlwiO1xuICBpZiAoZm9ybSkge1xuICAgIGZvcm1EZXNjcmlwdGlvbiA9IGZvcm0uZGVzY3JpcHRpb247XG4gICAgaWYgKGZvcm1EZXNjcmlwdGlvbikge1xuICAgICAgZm9ybURlc2NyaXB0aW9uID0gZm9ybURlc2NyaXB0aW9uLnJlcGxhY2UoL1xcbi9nLCBcIjxici8+XCIpO1xuICAgICAgZm9ybURlc2NyaXB0aW9uSHRtbCA9IFwiPGRpdiBjbGFzcz1cXFwiYm94LWhlYWRlciAgd2l0aC1ib3JkZXIgaW5zdGFuY2UtaGVhZGVyXFxcIj5cXG5cdDxkaXY+XFxuXHRcdFwiICsgZm9ybURlc2NyaXB0aW9uICsgXCJcXG5cdDwvZGl2PlxcbjwvZGl2PlwiO1xuICAgIH1cbiAgfVxuICBodG1sID0gXCI8IURPQ1RZUEUgaHRtbD5cXG48aHRtbD5cXG5cdDxoZWFkPlxcblx0XHQ8bWV0YSBodHRwLWVxdWl2PVxcXCJDb250ZW50LVR5cGVcXFwiIGNvbnRlbnQ9XFxcInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFxcXCIvPlxcblx0XHRcIiArIGFsbENzc0xpbmsgKyBcIlxcblx0XHQ8c2NyaXB0IHNyYz1cXFwiXCIgKyBqcUhyZWYgKyBcIlxcXCIgdHlwZT1cXFwidGV4dC9qYXZhc2NyaXB0XFxcIj48L3NjcmlwdD5cXG5cdFx0PHNjcmlwdCBzcmM9XFxcIi9qcy9ud19jb3JlLmpzXFxcIiB0eXBlPVxcXCJ0ZXh0L2phdmFzY3JpcHRcXFwiPjwvc2NyaXB0Plxcblx0XHRcIiArIChvcHRpb25zLnBsdWdpbnMgfHwgXCJcIikgKyBcIlxcblxcblx0XHQ8c3R5bGU+XFxuXHRcdFx0LnN0ZWVkb3N7XFxuXHRcdFx0XHR3aWR0aDogXCIgKyB3aWR0aCArIFwiO1xcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IGF1dG87XFxuXHRcdFx0XHRtYXJnaW4tcmlnaHQ6IGF1dG87XFxuXHRcdFx0fVxcblxcblx0XHRcdC5pbnN0YW5jZS12aWV3IC5pbnN0YW5jZS1uYW1le1xcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnRcXG5cdFx0XHR9XFxuXHRcdFx0LmJveC10b29sc3tcXG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XFxuXHRcdFx0fVxcblx0XHRcdC5ib3guY29sbGFwc2VkLWJveCAuYm94LWJvZHksLmJveC5jb2xsYXBzZWQtYm94IC5ib3gtZm9vdGVyIHtcXG5cdFx0XHQgIGRpc3BsYXk6IGJsb2NrO1xcblx0XHRcdH1cXG5cXG5cdFx0XHRib2R5e1xcblx0XHRcdFx0YmFja2dyb3VuZDogYXp1cmUgIWltcG9ydGFudDtcXG5cdFx0XHR9XFxuXFxuXHRcdFx0Lmluc3RhbmNlLXZpZXcgLmluc3RhbmNlLXRyYWNlc3tcXG5cdFx0XHRcdHBhZGRpbmctbGVmdDogMTVweDtcXG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDE1cHg7XFxuXHRcdFx0fVxcblxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtIHtcXG5cdFx0XHRib3JkZXItcmFkaXVzOiB2YXIoLS1JbWFnZUNvbnRyb2wtYWRkQnRuLWJvcmRlclJhZGl1cyk7XFxuXHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcXG5cdFx0XHRwYWRkaW5nOiB2YXIoLS1nYXAteHMpO1xcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG5cdFx0XHRtYXJnaW4tcmlnaHQ6IHZhcigtLWdhcC1iYXNlKTtcXG5cdFx0XHRtYXJnaW4tYm90dG9tOiB2YXIoLS1nYXAtYmFzZSk7XFxuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblx0XHRcdHdpZHRoOiA3LjVyZW07XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtLmlzLWludmFsaWQge1xcblx0XHRcdHBhZGRpbmc6IDA7XFxuXHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1GaWxlQ29udHJvbC1kYW5nZXItY29sb3IpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbSBzdmcuaWNvbi1yZWZyZXNoIHtcXG5cdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZmlsZW5hbWUge1xcblx0XHRcdGRpc3BsYXk6IGlubGluZS1mbGV4O1xcblx0XHRcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuXHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cdFx0XHRjb2xvcjogdmFyKC0tRmlsZUNvbnRyb2wtZGFuZ2VyLWNvbG9yKTtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpbGVuYW1lID4gc3ZnLmljb24taW1hZ2Uge1xcblx0XHRcdG1hcmdpbi1ib3R0b206IDhweDtcXG5cdFx0XHR3aWR0aDogMjRweDtcXG5cdFx0XHRoZWlnaHQ6IDI0cHg7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1maWxlbmFtZSA+IHNwYW4ge1xcblx0XHRcdG1heC13aWR0aDogMTAwJTtcXG5cdFx0XHRvdmVyZmxvdzogaGlkZGVuO1xcblx0XHRcdHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuXHRcdFx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pbWFnZSB7XFxuXHRcdFx0d2lkdGg6IDEwMCU7XFxuXHRcdFx0aGVpZ2h0OiAxMDAlO1xcblx0XHRcdHBhZGRpbmc6IDA7XFxuXHRcdFx0Ym9yZGVyOiBub25lO1xcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcXG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XFxuXHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xcblx0XHRcdGNvbG9yOiAjOTk5O1xcblx0XHRcdHRvcDogNXB4O1xcblx0XHRcdHJpZ2h0OiA1cHg7XFxuXHRcdFx0bGluZS1oZWlnaHQ6IDE7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIgPiBzdmcge1xcblx0XHRcdHRvcDogMDtcXG5cdFx0XHR3aWR0aDogMTBweDtcXG5cdFx0XHRoZWlnaHQ6IDEwcHg7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1pdGVtSW5mbyB7XFxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XFxuXHRcdFx0d2lkdGg6IDExMHB4O1xcblx0XHRcdGhlaWdodDogMTEwcHg7XFxuXHRcdFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cdFx0XHRhbGlnbi1jb250ZW50OiBjZW50ZXI7XFxuXHRcdFx0ZmxleC13cmFwOiB3cmFwO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUluZm8gPiBwIHtcXG5cdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XFxuXHRcdFx0Zm9udC1zaXplOiAxMnB4O1xcblx0XHRcdG1hcmdpbi1ib3R0b206IDVweDtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXByb2dyZXNzIHtcXG5cdFx0XHR3aWR0aDogNzBweDtcXG5cdFx0XHRoZWlnaHQ6IDVweDtcXG5cdFx0XHRiYWNrZ3JvdW5kOiAjZWJlYmViO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtcHJvZ3Jlc3NWYWx1ZSB7XFxuXHRcdFx0aGVpZ2h0OiA1cHg7XFxuXHRcdFx0Ym9yZGVyLXJhZGl1czogdmFyKC0tSW1hZ2VDb250cm9sLXByb2dyZXNzLWJvcmRlclJhZGl1cyk7XFxuXHRcdFx0ZGlzcGxheTogYmxvY2s7XFxuXHRcdFx0YmFja2dyb3VuZDogdmFyKC0taW5mbyk7XFxuXHRcdFx0bWluLXdpZHRoOiAxMCU7XFxuXHRcdFx0dHJhbnNpdGlvbjogZWFzZS1vdXQgd2lkdGggdmFyKC0tYW5pbWF0aW9uLWR1cmF0aW9uKTtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWl0ZW0uaXMtaW52YWxpZCAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbUNsZWFyIHtcXG5cdFx0XHRkaXNwbGF5OiBub25lO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbS5pcy1pbnZhbGlkOmhvdmVyIC5hbnRkLUltYWdlQ29udHJvbC1pdGVtQ2xlYXIge1xcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZXJyb3JNc2cge1xcblx0XHRcdGNvbG9yOiB2YXIoLS1kYW5nZXIpO1xcblx0XHRcdG1hcmdpbjogNXB4IDAgMDtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLXVwbG9hZEJ0biB7XFxuXHRcdFx0bWFyZ2luLXRvcDogNXB4O1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcHBlcldyYXBwZXIge1xcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWNyb3BwZXJXcmFwcGVyIGltZyB7XFxuXHRcdFx0bWF4LXdpZHRoOiAxMDAlO1xcblx0XHRcdG1heC1oZWlnaHQ6IDQwMHB4O1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciB7XFxuXHRcdFx0ZGlzcGxheTogaW5saW5lLWZsZXg7XFxuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xcblx0XHRcdHJpZ2h0OiAwO1xcblx0XHRcdGJvdHRvbTogMDtcXG5cdFx0XHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcblx0XHRcdGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG5cdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xcblx0XHRcdGJvcmRlci1yYWRpdXM6IDRweDtcXG5cdFx0XHRtYXJnaW46IDAuNXJlbTtcXG5cdFx0XHRib3gtc2hhZG93OiAwIDAgNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtY3JvcGVyVG9vbGJhciA+IGEge1xcblx0XHRcdGNvbG9yOiB2YXIoLS1Gb3JtLWl0ZW0tZm9udENvbG9yKTtcXG5cdFx0XHRwYWRkaW5nOiAycHggNXB4O1xcblx0XHRcdGN1cnNvcjogcG9pbnRlcjtcXG5cdFx0XHRmb250LXNpemU6IDE4cHg7XFxuXHRcdFx0fVxcblx0XHRcdC5hbnRkLUltYWdlQ29udHJvbC1jcm9wZXJUb29sYmFyID4gYTpob3ZlciB7XFxuXHRcdFx0Y29sb3I6IHZhcigtLWxpbmstY29sb3IpO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtYWNjZXB0VGlwIHtcXG5cdFx0XHRoZWlnaHQ6IDEyMHB4O1xcblx0XHRcdGNvbG9yOiAjOTk5O1xcblx0XHRcdGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1ib3JkZXJDb2xvcik7XFxuXHRcdFx0Ym9yZGVyLWNvbG9yOiB2YXIoLS1pbmZvKTtcXG5cdFx0XHRiYWNrZ3JvdW5kOiAjZjNmOWZlO1xcblx0XHRcdGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclJhZGl1cyk7XFxuXHRcdFx0bGluZS1oZWlnaHQ6IDEyMHB4O1xcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcXG5cdFx0XHR9XFxuXHRcdFx0LmFudGQtSW1hZ2VDb250cm9sLWZpeGVkLXNpemUge1xcblx0XHRcdHdpZHRoOiAxMDAlO1xcblx0XHRcdGhlaWdodDogMTAwJTtcXG5cdFx0XHRwYWRkaW5nOiAwO1xcblx0XHRcdH1cXG5cdFx0XHQuYW50ZC1JbWFnZUNvbnRyb2wtZml4ZWQtc2l6ZSAuYW50ZC1JbWFnZUNvbnRyb2wtaXRlbU92ZXJsYXkge1xcblx0XHRcdHdpZHRoOiAxMDAlO1xcblx0XHRcdGhlaWdodDogMTAwJTtcXG5cdFx0XHR9XFxuXFxuXHRcdFx0LmFudGQtSW1hZ2VzIHtcXG5cdFx0XHRcdGRpc3BsYXk6IGZsZXg7XFxuXHRcdFx0XHRmbGV4LXdyYXA6IHdyYXA7XFxuXHRcdFx0XHRtYXJnaW46IGNhbGModmFyKC0tZ2FwLXhzKSAqIC0xKTtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlcy1pdGVtIHtcXG5cdFx0XHRcdGRpc3BsYXk6IGZsZXg7XFxuXHRcdFx0XHRtYXJnaW46IHZhcigtLWdhcC14cyk7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZSB7XFxuXHRcdFx0XHRib3JkZXI6IHZhcigtLWJvcmRlcldpZHRoKSBzb2xpZCB2YXIoLS1ib3JkZXJDb2xvcik7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS0tdGh1bWIge1xcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xcblx0XHRcdFx0cGFkZGluZzogdmFyKC0tZ2FwLXhzKTtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iV3JhcCB7XFxuXHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS1pbWFnZSB7XFxuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLWltYWdlLS1sb2FkaW5nIHtcXG5cdFx0XHRcdHZpc2liaWxpdHk6IGhpZGRlbjtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLS1vcmlnaW5hbCAuYW50ZC1JbWFnZS1pbWFnZSB7XFxuXHRcdFx0XHRtYXgtd2lkdGg6IDEwMCU7XFxuXHRcdFx0XHRtYXgtaGVpZ2h0OiAxMDAlO1xcblx0XHRcdFx0d2lkdGg6IGF1dG87XFxuXHRcdFx0XHRtYXJnaW46IGF1dG87XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYiB7XFxuXHRcdFx0XHR3aWR0aDogNi44NzVyZW07XFxuXHRcdFx0XHRoZWlnaHQ6IDYuODc1cmVtO1xcblx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblx0XHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iID4gaW1nIHtcXG5cdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cdFx0XHRcdGxlZnQ6IDUwJTtcXG5cdFx0XHRcdHRvcDogNTAlO1xcblx0XHRcdFx0bWF4LWhlaWdodDogMTAwJTtcXG5cdFx0XHRcdHdpZHRoOiBhdXRvO1xcblx0XHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS1pbmZvIHtcXG5cdFx0XHRcdHBhZGRpbmc6IDVweCAxMHB4O1xcblx0XHRcdFx0fVxcblx0XHRcdFx0LmFudGQtSW1hZ2UtLXRodW1iIC5hbnRkLUltYWdlLWluZm8ge1xcblx0XHRcdFx0d2lkdGg6IDYuODc1cmVtO1xcblx0XHRcdFx0cGFkZGluZzogMDtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS00LTMge1xcblx0XHRcdFx0aGVpZ2h0OiA1LjE1NjI1cmVtO1xcblx0XHRcdFx0fVxcblx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLTE2LTkge1xcblx0XHRcdFx0aGVpZ2h0OiAzLjg2NzE4NzVyZW07XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tZml4ZWQtc2l6ZSB7XFxuXHRcdFx0XHRtaW4td2lkdGg6IDYuODc1cmVtO1xcblx0XHRcdFx0bWluLWhlaWdodDogNi44NzVyZW07XFxuXHRcdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHRcdHBhZGRpbmc6IDA7XFxuXHRcdFx0XHRoZWlnaHQ6IDEwMCU7XFxuXHRcdFx0XHR9XFxuXHRcdFx0XHQuYW50ZC1JbWFnZS10aHVtYi0tZml4ZWQtc2l6ZSAuYW50ZC1JbWFnZS10aHVtYiB7XFxuXHRcdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHRcdH1cXG5cdFx0XHRcdC5hbnRkLUltYWdlLXRodW1iLS1maXhlZC1zaXplIC5hbnRkLUltYWdlLXRodW1iID4gaW1nIHtcXG5cdFx0XHRcdHdpZHRoOiBhdXRvO1xcblx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xcblx0XHRcdFx0fVxcblx0XHRcdFx0LmFudGQtSW1hZ2UtdGh1bWItLXctZnVsbCA+IGltZyB7XFxuXHRcdFx0XHR3aWR0aDogMTAwJTtcXG5cdFx0XHRcdGhlaWdodDogYXV0bztcXG5cdFx0XHRcdH1cXG5cXG5cdFx0XHRcIiArICgob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5zdHlsZXMgOiB2b2lkIDApIHx8IFwiXCIpICsgXCJcXG5cXG5cdFx0XHRcIiArICgob3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5hZGRfc3R5bGVzIDogdm9pZCAwKSB8fCBcIlwiKSArIFwiXFxuXHRcdDwvc3R5bGU+XFxuXHQ8L2hlYWQ+XFxuXHQ8Ym9keT5cXG5cdFx0PGRpdiBjbGFzcz1cXFwic3RlZWRvcyB3b3JrZmxvdyBpbnN0YW5jZS1wcmludFxcXCI+XFxuXHRcdFx0PGRpdiBjbGFzcz1cXFwic2tpbi1ncmVlbiBza2luLWFkbWluLWx0ZVxcXCI+XFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVxcXCJ3cmFwcGVyXFxcIj5cXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiY29udGVudC13cmFwcGVyXFxcIj5cXG5cdFx0XHRcdFx0XHRcIiArIHNob3dUcmFjZXNCdG4gKyBcIlxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImluc3RhbmNlLXByaW50XFxcIj5cXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImluc3RhbmNlIFwiICsgaW5zdGFuY2Vfc3R5bGUgKyBcIlxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdDxmb3JtIG5hbWU9XFxcImluc3RhbmNlRm9ybVxcXCI+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiaW5zdGFuY2UtZm9ybSBib3ggXCIgKyBpbnN0YW5jZUJveFN0eWxlICsgXCJcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCIgKyBmb3JtRGVzY3JpcHRpb25IdG1sICsgXCJcXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImJveC1ib2R5XFxcIj5cXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cXFwiY29sLW1kLTEyXFxcIiBzdHlsZT1cXFwiYm94LXNpemluZzogYm9yZGVyLWJveDtcXFwiPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2F0dGFjaG1lbnRzLXNlY3Rpb24nPlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIgKyBhdHRhY2htZW50ICsgXCJcXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiICsgcmVsYXRlZF9pbnN0YW5jZXMgKyBcIlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIgKyByZWxhdGVkX3JlY29yZHMgKyBcIlxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiICsgYm9keSArIFwiXFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHRcdFx0XHRcdDwvZm9ybT5cXG5cdFx0XHRcdFx0XHRcdFx0XCIgKyB0cmFjZSArIFwiXFxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHQ8L2Rpdj5cXG5cdFx0PC9kaXY+XFxuXHQ8L2JvZHk+XFxuXHQ8c2NyaXB0PlwiICsgb3BlbkZpbGVTY3JpcHQgKyBcIjtcIiArIG9uTG9hZFNjcmlwdCArIFwiO1wiICsgc2hvd1RyYWNlc1NjcmlwdCArIFwiPC9zY3JpcHQ+XFxuPC9odG1sPlwiO1xuICByZXR1cm4gaHRtbDtcbn07XG4iLCJUZW1wbGF0ZU1hbmFnZXIgPSB7fTtcblxuZm9ybUlkID0gJ2luc3RhbmNlZm9ybSc7XG5cblxuVGVtcGxhdGVNYW5hZ2VyLmluc3RhbmNlX3RpdGxlID0gKCktPlxuXHRwYWdlVGl0bGUgPSBcIlwiXCJcblx0XHR7e2luc3RhbmNlLm5hbWV9fVxuXHRcIlwiXCJcblxuXHRwYWdlVGl0bGVUckNsYXNzID0gXCJpbnN0YW5jZS1uYW1lXCJcblxuXHRpZiBDb3JlRm9ybT8ucGFnZVRpdGxlRmllbGROYW1lXG5cdFx0cGFnZVRpdGxlID0gXCJcIlwiXG5cdFx0XHRcdHt7PiBhZkZvcm1Hcm91cCBuYW1lPVwiI3tDb3JlRm9ybS5wYWdlVGl0bGVGaWVsZE5hbWV9XCIgbGFiZWw9ZmFsc2V9fVxuXHRcdFwiXCJcIlxuXHRcdHBhZ2VUaXRsZVRyQ2xhc3MgPSBcIlwiXG5cblx0aWYgQ29yZUZvcm0/LnBhZ2VUaXRsZVxuXHRcdHBhZ2VUaXRsZSA9IFwiXCJcIlxuXHRcdFx0I3tDb3JlRm9ybS5wYWdlVGl0bGV9XG5cdFx0XCJcIlwiXG5cdFx0cGFnZVRpdGxlVHJDbGFzcyA9IFwiXCJcblxuXHR2YWwgPVxuXHRcdHBhZ2VUaXRsZTogcGFnZVRpdGxlXG5cdFx0cGFnZVRpdGxlVHJDbGFzczogcGFnZVRpdGxlVHJDbGFzc1xuXG5cdHJldHVybiB2YWxcblxuVGVtcGxhdGVNYW5hZ2VyLmhhbmRsZVRhYmxlVGVtcGxhdGUgPSAoaW5zdGFuY2UsIF9leHBvcnQpIC0+XG5cblx0dGVtcGxhdGUgPSBcIlwiXCJcblx0PGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlxuXHRcdDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2UtdGl0bGUgZm9ybS10YWJsZSBuby1ib3JkZXIgdGV4dC1hbGlnbi1jZW50ZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO2Rpc3BsYXk6IGlubGluZS10YWJsZTtcIj5cblx0XHRcdDx0ciBjbGFzcz1cIiN7dGhpcy5pbnN0YW5jZV90aXRsZSgpLnBhZ2VUaXRsZVRyQ2xhc3N9XCI+XG5cdFx0XHRcdDx0ZCBjbGFzcz1cImluc3RhbmNlLXRhYmxlLW5hbWUtdGQgcGFnZS10aXRsZVwiPlxuXHRcdFx0XHRcdCN7dGhpcy5pbnN0YW5jZV90aXRsZSgpLnBhZ2VUaXRsZX1cblx0XHRcdFx0PC90ZD5cblx0XHRcdDwvdHI+XG5cblx0XHQ8L3RhYmxlPlxuXHRcdDx0YWJsZSBjbGFzcz1cInRhYmxlLXBhZ2UtYm9keSBmb3JtLXRhYmxlXCI+XG5cdFx0XHRcdDx0ciBzdHlsZT1cImhlaWdodDowcHhcIj5cblx0XHRcdFx0XHQ8dGggc3R5bGU9J3dpZHRoOiAxNiUnPjwvdGg+XG5cdFx0XHRcdFx0PHRoPjwvdGg+XG5cdFx0XHRcdFx0PHRoIHN0eWxlPSd3aWR0aDogMTYlJz48L3RoPlxuXHRcdFx0XHRcdDx0aD48L3RoPlxuXHRcdFx0XHQ8L3RyPlxuXHRcIlwiXCI7XG5cblx0dGFibGVfZmllbGRzID0gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy50YWJsZV9maWVsZHMoaW5zdGFuY2UpXG5cblx0dGFibGVfZmllbGRzICYmIHRhYmxlX2ZpZWxkcy5mb3JFYWNoICh0YWJsZV9maWVsZCktPlxuXG5cdFx0cmVxdWlyZWQgPSBcIlwiXG5cdFx0aWYgIUNvcmVGb3JtPy5wYWdlVGl0bGVGaWVsZE5hbWUgfHwgQ29yZUZvcm0/LnBhZ2VUaXRsZUZpZWxkTmFtZSAhPSB0YWJsZV9maWVsZC5jb2RlXG5cdFx0XHRpZiB0YWJsZV9maWVsZC5pc19yZXF1aXJlZFxuXHRcdFx0XHRyZXF1aXJlZCA9IFwiaXMtcmVxdWlyZWRcIlxuXG5cdFx0XHRpZiBfZXhwb3J0XG5cdFx0XHRcdHJlcXVpcmVkID0gXCJcIjtcblxuXHRcdFx0cHVyZUNvZGUgPSBTdGVlZG9zLnJlbW92ZVNwZWNpYWxDaGFyYWN0ZXIodGFibGVfZmllbGQuY29kZSk7XG5cblx0XHRcdGlmIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGQodGFibGVfZmllbGQpXG5cdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX3N0YXJ0XG5cdFx0XHRcdHRlbXBsYXRlICs9IFwiXCJcIlxuXHRcdFx0XHRcdDx0ZCBjbGFzcz1cInRkLXRpdGxlICN7cmVxdWlyZWR9XCI+XG5cdFx0XHRcdFx0XHR7e2FmRmllbGRMYWJlbFRleHQgbmFtZT1cIiN7dGFibGVfZmllbGQuY29kZX1cIn19XG5cdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC1maWVsZCBvcGluaW9uLWZpZWxkIG9waW5pb24tZmllbGQtI3twdXJlQ29kZX0gYXV0b21hdGljXCIgY29sc3BhbiA9IFwiI3t0YWJsZV9maWVsZC50ZF9jb2xzcGFufVwiPlxuXHRcdFx0XHRcdFx0e3s+IGluc3RhbmNlU2lnblRleHQgbmFtZT1cIiN7dGFibGVfZmllbGQuY29kZX1cIn19XG5cdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XCJcIlwiXG5cdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZFxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRpZiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluY2x1ZGVzKHRhYmxlX2ZpZWxkLnR5cGUsICdzZWN0aW9uLHRhYmxlJylcblx0XHRcdFx0XHR0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9zdGFydFxuXHRcdFx0XHRcdHRlbXBsYXRlICs9IFwiXCJcIlxuXHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwidGQtY2hpbGRmaWVsZCB0ZC1jaGlsZGZpZWxkLSN7cHVyZUNvZGV9XCIgY29sc3BhbiA9IFwiI3t0YWJsZV9maWVsZC50ZF9jb2xzcGFufVwiPlxuXHRcdFx0XHRcdFx0ICAge3s+IGFmRm9ybUdyb3VwIG5hbWU9XCIje3RhYmxlX2ZpZWxkLmNvZGV9XCIgbGFiZWw9ZmFsc2V9fVxuXHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcIlwiXCJcblx0XHRcdFx0XHR0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9lbmRcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX3N0YXJ0XG5cblx0XHRcdFx0XHRpZiBfZXhwb3J0XG5cdFx0XHRcdFx0XHR0aXRsZV9wZXJtaXNzaW9uID0gXCJcIlxuXHRcdFx0XHRcdFx0ZmllbGRfcGVybWlzc2lvbiA9IFwiXCJcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR0aXRsZV9wZXJtaXNzaW9uID0gXCJ0aXRsZS1cIiArIHRhYmxlX2ZpZWxkLnBlcm1pc3Npb25cblx0XHRcdFx0XHRcdGZpZWxkX3Blcm1pc3Npb24gPSBcImZpZWxkLVwiICsgdGFibGVfZmllbGQucGVybWlzc2lvblxuXG5cdFx0XHRcdFx0dGVtcGxhdGUgKz0gXCJcIlwiXG5cdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC10aXRsZSB0ZC10aXRsZS0je3B1cmVDb2RlfSAje3RpdGxlX3Blcm1pc3Npb259ICN7cmVxdWlyZWR9XCI+XG5cdFx0XHRcdFx0XHRcdHt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPVwiI3t0YWJsZV9maWVsZC5jb2RlfVwifX1cblx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC1maWVsZCB0ZC1maWVsZC0je3B1cmVDb2RlfSAje2ZpZWxkX3Blcm1pc3Npb259XCIgY29sc3BhbiA9IFwiI3t0YWJsZV9maWVsZC50ZF9jb2xzcGFufVwiPlxuXHRcdFx0XHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT1cIiN7dGFibGVfZmllbGQuY29kZX1cIiBsYWJlbD1mYWxzZX19XG5cdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0XHRcdHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZFxuXG5cdHRlbXBsYXRlICs9IFwiXCJcIlxuXHRcdDwvdGFibGU+XG5cblx0XHQ8dGFibGUgY2xhc3M9XCJ0YWJsZS1wYWdlLWZvb3RlciBmb3JtLXRhYmxlIG5vLWJvcmRlclwiPlxuXHRcdFx0PHRyIGNsYXNzPVwiYXBwbGljYW50LXdyYXBwZXJcIj5cblx0XHRcdFx0PHRkIGNsYXNzPVwibm93cmFwXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5saW5lLWxlZnQnPlxuXHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7X3QgXCJpbnN0YW5jZV9pbml0aWF0b3JcIn1977yaPC9sYWJlbD5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS10YWJsZS13cmFwcGVyLXRkIGlubGluZS1sZWZ0Jz5cblx0XHRcdFx0XHRcdHt7PlRlbXBsYXRlLmR5bmFtaWMgIHRlbXBsYXRlPVwiYWZTZWxlY3RVc2VyXCIgZGF0YT1hcHBsaWNhbnRDb250ZXh0fX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC90ZD5cblx0XHRcdFx0PHRkIGNsYXNzPVwibm93cmFwXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0ncHVsbC1sZWZ0Jz5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2lubGluZS1sZWZ0Jz5cblx0XHRcdFx0XHRcdFx0PGxhYmVsPnt7X3QgXCJpbnN0YW5jZV9zdWJtaXRfZGF0ZVwifX3vvJo8L2xhYmVsPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbmxpbmUtcmlnaHQnPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuXHRcdFx0XHRcdFx0XHRcdHt7Zm9ybWF0RGF0ZSBpbnN0YW5jZS5zdWJtaXRfZGF0ZSAne1wiZm9ybWF0XCI6XCJZWVlZLU1NLUREXCJ9J319XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvdGQ+XG5cdFx0XHQ8L3RyPlxuXHRcdDwvdGFibGU+XG5cdDwvZGl2PlxuXHRcIlwiXCJcblx0cmV0dXJuIHRlbXBsYXRlXG5cbiPmraTlpITmqKHmnb/lhaznlKjkuI7vvJppbnN0YW5jZSDnvJbovpHjgIHmn6XnnIvjgIHmiZPljbDjgIHovazlj5Hml7bnlJ/miJDpmYTku7bjgIHlj5HpgIHpgq7ku7Zib2R56YOo5YiGKHRhYmxlIOaooeadvylcbiPlpoLmnpzmnInkv67mlLnvvIzor7fmtYvor5Xnoa7orqTlhbbku5blip/og73mmK/lkKbmraPluLjjgIJcblRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUgPVxuXHRkZWZhdWx0OiAoaW5zdGFuY2UpLT5cblxuXHRcdHRlbXBsYXRlID0gXCJcIlwiXG5cdFx0XHQ8ZGl2IGNsYXNzPVwid2l0aC1ib3JkZXIgY29sLW1kLTEyXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnN0YW5jZS1uYW1lXCI+XG5cdFx0XHRcdFx0PGgzIGNsYXNzPVwiYm94LXRpdGxlXCI+I3tUZW1wbGF0ZU1hbmFnZXIuaW5zdGFuY2VfdGl0bGUoKS5wYWdlVGl0bGV9PC9oMz5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImhlbHAtYmxvY2tcIj48L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cImhlbHAtYmxvY2tcIj48L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHt7I2VhY2ggc3RlZWRvc19mb3JtLmZpZWxkc319XG5cdFx0XHRcdHt7I2lmIGlzT3BpbmlvbkZpZWxkIHRoaXN9fVxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ7eyNpZiB0aGlzLmlzX3dpZGV9fWNvbC1tZC0xMnt7ZWxzZX19Y29sLW1kLTZ7ey9pZn19IGZpZWxkLXt7dGhpcy5jb2RlfX1cIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGF1dG9tYXRpYyBvcGluaW9uLWZpZWxkLXt7dGhpcy5jb2RlfX1cIj5cblx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPXRoaXMuY29kZX19PC9sYWJlbD5cblxuXHRcdFx0XHRcdFx0XHR7ez4gaW5zdGFuY2VTaWduVGV4dCBuYW1lPXRoaXMuY29kZX19XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHR7eyNpZiBpbmNsdWRlcyB0aGlzLnR5cGUgJ3NlY3Rpb24sdGFibGUnfX1cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgZmllbGQte3t0aGlzLmNvZGV9fVwiPlxuXHRcdFx0XHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT10aGlzLmNvZGUgbGFiZWw9ZmFsc2V9fVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0e3tlbHNlfX1cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ7eyNpZiB0aGlzLmlzX3dpZGV9fWNvbC1tZC0xMnt7ZWxzZX19Y29sLW1kLTZ7ey9pZn19IGZpZWxkLXt7dGhpcy5jb2RlfX1cIj5cblx0XHRcdFx0XHRcdHt7PiBhZkZvcm1Hcm91cCBuYW1lPXRoaXMuY29kZX19XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7ey9pZn19XG5cdFx0XHRcdHt7L2lmfX1cblx0XHRcdHt7L2VhY2h9fVxuXHRcdFx0PGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYXBwbGljYW50LXdyYXBwZXIgZm9ybS1ncm91cCBmb3JtLWhvcml6b250YWxcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uXCI+XG5cdFx0XHRcdFx0ICB7e190IFwiaW5zdGFuY2VfaW5pdGlhdG9yXCJ9fSZuYnNwOzpcblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7ez5UZW1wbGF0ZS5keW5hbWljICB0ZW1wbGF0ZT1cImFmU2VsZWN0VXNlclwiIGRhdGE9YXBwbGljYW50Q29udGV4dH19XG5cdFx0XHRcdCAgPC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XCJcIlwiXG5cdFx0cmV0dXJuIHRlbXBsYXRlXG5cblx0dGFibGU6IChpbnN0YW5jZSktPlxuXHRcdHJldHVybiBUZW1wbGF0ZU1hbmFnZXIuaGFuZGxlVGFibGVUZW1wbGF0ZShpbnN0YW5jZSlcbiNcdHRhYmxlOiAnJydcbiNcdFx0PHRhYmxlIGNsYXNzPVwiYm94LWhlYWRlciAgd2l0aC1ib3JkZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO2Rpc3BsYXk6IGlubGluZS10YWJsZTtcIj5cbiNcdFx0XHQ8dHIgY2xhc3M9XCJpbnN0YW5jZS1uYW1lXCI+XG4jXHRcdFx0XHQ8dGQgY2xhc3M9XCJpbnN0YW5jZS10YWJsZS1uYW1lLXRkXCI+XG4jXHRcdFx0XHRcdDxoMyBjbGFzcz1cImJveC10aXRsZVwiPnt7aW5zdGFuY2UubmFtZX19PC9oMz5cbiNcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJoZWxwLWJsb2NrXCI+PC9zcGFuPlxuI1x0XHRcdFx0PC90ZD5cbiNcdFx0XHQ8L3RyPlxuIyAgICAgICAgICAgIDx0ciBjbGFzcz1cImFwcGxpY2FudC13cmFwcGVyXCI+XG4jXHRcdFx0XHQ8dGQgY2xhc3M9XCJpbnN0YW5jZS10YWJsZS13cmFwcGVyLXRkXCI+XG4jXHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIj57e190IFwiaW5zdGFuY2VfaW5pdGlhdG9yXCJ9fSZuYnNwOzo8L2xhYmVsPlxuI1x0XHRcdFx0XHR7ez5UZW1wbGF0ZS5keW5hbWljICB0ZW1wbGF0ZT1cImFmU2VsZWN0VXNlclwiIGRhdGE9YXBwbGljYW50Q29udGV4dH19XG4jXHRcdFx0XHQ8L3RkPlxuI1x0XHRcdDwvdHI+XG4jICAgICAgICA8L3RhYmxlPlxuI1x0XHQ8dGFibGUgY2xhc3M9XCJmb3JtLXRhYmxlXCI+XG4jXHRcdCAgICB7eyNlYWNoIHRhYmxlX2ZpZWxkc319XG4jXHRcdFx0XHR7eyNpZiBpc09waW5pb25GaWVsZCB0aGlzfX1cbiNcdFx0XHRcdFx0e3t7dHJfc3RhcnR9fX1cbiNcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC10aXRsZSB7eyNpZiBpc19yZXF1aXJlZH19aXMtcmVxdWlyZWR7ey9pZn19XCI+XG4jXHRcdFx0XHRcdFx0XHR7e2FmRmllbGRMYWJlbFRleHQgbmFtZT10aGlzLmNvZGV9fVxuI1x0XHRcdFx0XHRcdDwvdGQ+XG4jXHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwidGQtZmllbGQgb3Bpbmlvbi1maWVsZFwiIGNvbHNwYW4gPSAne3t0ZF9jb2xzcGFufX0nPlxuI1x0XHRcdFx0XHRcdFx0e3s+IGluc3RhbmNlU2lnblRleHQgc3RlcD0oZ2V0T3BpbmlvbkZpZWxkU3RlcE5hbWUgdGhpcykgZGVmYXVsdD0nJ319XG4jXHRcdFx0XHRcdFx0PC90ZD5cbiNcdFx0XHRcdFx0e3t7dHJfZW5kfX19XG4jXHRcdFx0XHR7e2Vsc2V9fVxuI1x0XHRcdFx0XHR7eyNpZiBpbmNsdWRlcyB0aGlzLnR5cGUgJ3NlY3Rpb24sdGFibGUnfX1cbiNcdFx0XHRcdFx0XHR7e3t0cl9zdGFydH19fVxuI1x0XHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwidGQtY2hpbGRmaWVsZFwiIGNvbHNwYW4gPSAne3t0ZF9jb2xzcGFufX0nPlxuI1x0XHRcdFx0XHRcdFx0ICAge3s+IGFmRm9ybUdyb3VwIG5hbWU9dGhpcy5jb2RlIGxhYmVsPWZhbHNlfX1cbiNcdFx0XHRcdFx0XHRcdDwvdGQ+XG4jXHRcdFx0XHRcdFx0e3t7dHJfZW5kfX19XG4jXHRcdFx0XHRcdHt7ZWxzZX19XG4jXHRcdFx0XHRcdFx0e3t7dHJfc3RhcnR9fX1cbiNcdFx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cInRkLXRpdGxlIHt7I2lmIGlzX3JlcXVpcmVkfX1pcy1yZXF1aXJlZHt7L2lmfX1cIj5cbiNcdFx0XHRcdFx0XHRcdFx0e3thZkZpZWxkTGFiZWxUZXh0IG5hbWU9dGhpcy5jb2RlfX1cbiNcdFx0XHRcdFx0XHRcdDwvdGQ+XG4jXHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJ0ZC1maWVsZCB7e3Blcm1pc3Npb259fVwiIGNvbHNwYW4gPSAne3t0ZF9jb2xzcGFufX0nPlxuI1x0XHRcdFx0XHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT10aGlzLmNvZGUgbGFiZWw9ZmFsc2V9fVxuI1x0XHRcdFx0XHRcdFx0PC90ZD5cbiNcdFx0XHRcdFx0XHR7e3t0cl9lbmR9fX1cbiNcdFx0XHRcdFx0e3svaWZ9fVxuI1x0XHRcdFx0e3svaWZ9fVxuI1xuI1x0XHQgICAge3svZWFjaH19XG4jXHRcdDwvdGFibGU+XG4jXHQnJydcblxuVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZUhlbHBzID1cblx0YXBwbGljYW50Q29udGV4dDogLT5cblx0XHRzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0ZGF0YSA9IHtcblx0XHRcdG5hbWU6ICdpbnNfYXBwbGljYW50Jyxcblx0XHRcdGF0dHM6IHtcblx0XHRcdFx0bmFtZTogJ2luc19hcHBsaWNhbnQnLFxuXHRcdFx0XHRpZDogJ2luc19hcHBsaWNhbnQnLFxuXHRcdFx0XHRjbGFzczogJ3NlbGVjdFVzZXIgZm9ybS1jb250cm9sJyxcblx0XHRcdFx0c3R5bGU6ICdwYWRkaW5nOjZweCAxMnB4O3dpZHRoOjE0MHB4O2Rpc3BsYXk6aW5saW5lJ1xuXHRcdFx0fVxuXHRcdH1cbiNcdFx0aWYgbm90IHN0ZWVkb3NfaW5zdGFuY2UgfHwgc3RlZWRvc19pbnN0YW5jZS5zdGF0ZSAhPSBcImRyYWZ0XCJcblx0XHRkYXRhLmF0dHMuZGlzYWJsZWQgPSB0cnVlXG5cdFx0cmV0dXJuIGRhdGE7XG5cbmluc3RhbmNlSWQ6IC0+XG5cdHJldHVybiAnaW5zdGFuY2Vmb3JtJzsjXCJpbnN0YW5jZV9cIiArIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKTtcblxuZm9ybV90eXBlczogLT5cblx0aWYgQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpXG5cdFx0cmV0dXJuICdkaXNhYmxlZCc7XG5cdGVsc2Vcblx0XHRyZXR1cm4gJ21ldGhvZCc7XG5cbnN0ZWVkb3NfZm9ybTogLT5cblx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcblx0aWYgZm9ybV92ZXJzaW9uXG5cdFx0cmV0dXJuIGZvcm1fdmVyc2lvblxuXG5pbm5lcnN1YmZvcm1Db250ZXh0OiAob2JqKS0+XG5cdGRvY192YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG5cdG9ialtcInRhYmxlVmFsdWVzXCJdID0gaWYgZG9jX3ZhbHVlcyB0aGVuIGRvY192YWx1ZXNbb2JqLmNvZGVdIGVsc2UgW11cblx0b2JqW1wiZm9ybUlkXCJdID0gZm9ybUlkO1xuXHRyZXR1cm4gb2JqO1xuXG5pbnN0YW5jZTogLT5cblx0U2Vzc2lvbi5nZXQoXCJjaGFuZ2VfZGF0ZVwiKVxuXHRpZiAoU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpKVxuXHRcdHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRyZXR1cm4gc3RlZWRvc19pbnN0YW5jZTtcblxuZXF1YWxzOiAoYSwgYikgLT5cblx0cmV0dXJuIChhID09IGIpXG5cbmluY2x1ZGVzOiAoYSwgYikgLT5cblx0cmV0dXJuIGIuc3BsaXQoJywnKS5pbmNsdWRlcyhhKTtcblxuZmllbGRzOiAtPlxuXHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuXHRpZiBmb3JtX3ZlcnNpb25cblx0XHRyZXR1cm4gbmV3IFNpbXBsZVNjaGVtYShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hKGZvcm1fdmVyc2lvbikpO1xuXG5kb2NfdmFsdWVzOiAtPlxuXHRXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG5cbmluc3RhbmNlX2JveF9zdHlsZTogLT5cblx0Ym94ID0gU2Vzc2lvbi5nZXQoXCJib3hcIilcblx0aWYgYm94ID09IFwiaW5ib3hcIiB8fCBib3ggPT0gXCJkcmFmdFwiXG5cdFx0anVkZ2UgPSBTZXNzaW9uLmdldChcImp1ZGdlXCIpXG5cdFx0aWYganVkZ2Vcblx0XHRcdGlmIChqdWRnZSA9PSBcImFwcHJvdmVkXCIpXG5cdFx0XHRcdHJldHVybiBcImJveC1zdWNjZXNzXCJcblx0XHRcdGVsc2UgaWYgKGp1ZGdlID09IFwicmVqZWN0ZWRcIilcblx0XHRcdFx0cmV0dXJuIFwiYm94LWRhbmdlclwiXG5cdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRpZiBpbnMgJiYgaW5zLmZpbmFsX2RlY2lzaW9uXG5cdFx0aWYgaW5zLmZpbmFsX2RlY2lzaW9uID09IFwiYXBwcm92ZWRcIlxuXHRcdFx0cmV0dXJuIFwiYm94LXN1Y2Nlc3NcIlxuXHRcdGVsc2UgaWYgKGlucy5maW5hbF9kZWNpc2lvbiA9PSBcInJlamVjdGVkXCIpXG5cdFx0XHRyZXR1cm4gXCJib3gtZGFuZ2VyXCJcblxuXG5UZW1wbGF0ZU1hbmFnZXIuZ2V0VGVtcGxhdGUgPSAoaW5zdGFuY2UsIHRlbXBsYXRlTmFtZSkgLT5cblx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoaW5zdGFuY2UuZmxvdyk7XG5cdGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGluc3RhbmNlLmZvcm0pO1xuXG5cdGlmIHRlbXBsYXRlTmFtZVxuXHRcdGlmIHRlbXBsYXRlTmFtZSA9PSAndGFibGUnXG5cdFx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSlcblx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS5kZWZhdWx0KGluc3RhbmNlKVxuXG5cdGlmIFNlc3Npb24/LmdldChcImluc3RhbmNlUHJpbnRcIilcblx0XHRpZiBmbG93Py5wcmludF90ZW1wbGF0ZVxuXHRcdFx0cmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlwiICsgZmxvdy5wcmludF90ZW1wbGF0ZSArIFwiPC9kaXY+XCJcblx0XHRlbHNlXG5cdFx0XHRpZiBmbG93Py5pbnN0YW5jZV90ZW1wbGF0ZVxuXHRcdFx0XHRyZXR1cm4gXCI8ZGl2IGNsYXNzPSdpbnN0YW5jZS10ZW1wbGF0ZSc+XCIgKyBmbG93Lmluc3RhbmNlX3RlbXBsYXRlICsgXCI8L2Rpdj5cIlxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSlcblx0ZWxzZVxuXHRcdGlmIFN0ZWVkb3MuaXNNb2JpbGUoKVxuXHRcdFx0cmV0dXJuIFRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUuZGVmYXVsdChpbnN0YW5jZSlcblxuXHRcdGlmIGZsb3c/Lmluc3RhbmNlX3RlbXBsYXRlXG5cdFx0XHRyZXR1cm4gXCI8ZGl2IGNsYXNzPSdpbnN0YW5jZS10ZW1wbGF0ZSc+XCIgKyBmbG93Lmluc3RhbmNlX3RlbXBsYXRlICsgXCI8L2Rpdj5cIlxuXG5cdFx0aWYgZm9ybT8uaW5zdGFuY2Vfc3R5bGVcblx0XHRcdGlmIGZvcm0uaW5zdGFuY2Vfc3R5bGUgPT0gJ3RhYmxlJ1xuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSlcblx0XHRcdHJldHVybiBUZW1wbGF0ZU1hbmFnZXIuX3RlbXBsYXRlLmRlZmF1bHQoaW5zdGFuY2UpXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIFRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUuZGVmYXVsdChpbnN0YW5jZSlcblxuI1RlbXBsYXRlTWFuYWdlci5leHBvcnRUZW1wbGF0ZSA9IChmbG93SWQpIC0+XG4jXHR0ZW1wbGF0ZSA9IFRlbXBsYXRlTWFuYWdlci5nZXRUZW1wbGF0ZShmbG93SWQpO1xuI1xuI1x0ZmxvdyA9IFdvcmtmbG93TWFuYWdlci5nZXRGbG93KGZsb3dJZCk7XG4jXG4jXHRpZiBmbG93Py5pbnN0YW5jZV90ZW1wbGF0ZVxuI1x0XHRyZXR1cm4gdGVtcGxhdGU7XG4jXG4jXHRyZXR1cm4gdGVtcGxhdGU7XG5cbiIsInZhciBmb3JtSWQ7ICAgICAgICAgICAgICAgICBcblxuVGVtcGxhdGVNYW5hZ2VyID0ge307XG5cbmZvcm1JZCA9ICdpbnN0YW5jZWZvcm0nO1xuXG5UZW1wbGF0ZU1hbmFnZXIuaW5zdGFuY2VfdGl0bGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhZ2VUaXRsZSwgcGFnZVRpdGxlVHJDbGFzcywgdmFsO1xuICBwYWdlVGl0bGUgPSBcInt7aW5zdGFuY2UubmFtZX19XCI7XG4gIHBhZ2VUaXRsZVRyQ2xhc3MgPSBcImluc3RhbmNlLW5hbWVcIjtcbiAgaWYgKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkge1xuICAgIHBhZ2VUaXRsZSA9IFwie3s+IGFmRm9ybUdyb3VwIG5hbWU9XFxcIlwiICsgQ29yZUZvcm0ucGFnZVRpdGxlRmllbGROYW1lICsgXCJcXFwiIGxhYmVsPWZhbHNlfX1cIjtcbiAgICBwYWdlVGl0bGVUckNsYXNzID0gXCJcIjtcbiAgfVxuICBpZiAodHlwZW9mIENvcmVGb3JtICE9PSBcInVuZGVmaW5lZFwiICYmIENvcmVGb3JtICE9PSBudWxsID8gQ29yZUZvcm0ucGFnZVRpdGxlIDogdm9pZCAwKSB7XG4gICAgcGFnZVRpdGxlID0gXCJcIiArIENvcmVGb3JtLnBhZ2VUaXRsZTtcbiAgICBwYWdlVGl0bGVUckNsYXNzID0gXCJcIjtcbiAgfVxuICB2YWwgPSB7XG4gICAgcGFnZVRpdGxlOiBwYWdlVGl0bGUsXG4gICAgcGFnZVRpdGxlVHJDbGFzczogcGFnZVRpdGxlVHJDbGFzc1xuICB9O1xuICByZXR1cm4gdmFsO1xufTtcblxuVGVtcGxhdGVNYW5hZ2VyLmhhbmRsZVRhYmxlVGVtcGxhdGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgX2V4cG9ydCkge1xuICB2YXIgdGFibGVfZmllbGRzLCB0ZW1wbGF0ZTtcbiAgdGVtcGxhdGUgPSBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXRlbXBsYXRlJz5cXG5cdDx0YWJsZSBjbGFzcz1cXFwidGFibGUtcGFnZS10aXRsZSBmb3JtLXRhYmxlIG5vLWJvcmRlciB0ZXh0LWFsaWduLWNlbnRlclxcXCIgc3R5bGU9XFxcIndpZHRoOiAxMDAlO2Rpc3BsYXk6IGlubGluZS10YWJsZTtcXFwiPlxcblx0XHQ8dHIgY2xhc3M9XFxcIlwiICsgKHRoaXMuaW5zdGFuY2VfdGl0bGUoKS5wYWdlVGl0bGVUckNsYXNzKSArIFwiXFxcIj5cXG5cdFx0XHQ8dGQgY2xhc3M9XFxcImluc3RhbmNlLXRhYmxlLW5hbWUtdGQgcGFnZS10aXRsZVxcXCI+XFxuXHRcdFx0XHRcIiArICh0aGlzLmluc3RhbmNlX3RpdGxlKCkucGFnZVRpdGxlKSArIFwiXFxuXHRcdFx0PC90ZD5cXG5cdFx0PC90cj5cXG5cXG5cdDwvdGFibGU+XFxuXHQ8dGFibGUgY2xhc3M9XFxcInRhYmxlLXBhZ2UtYm9keSBmb3JtLXRhYmxlXFxcIj5cXG5cdFx0XHQ8dHIgc3R5bGU9XFxcImhlaWdodDowcHhcXFwiPlxcblx0XHRcdFx0PHRoIHN0eWxlPSd3aWR0aDogMTYlJz48L3RoPlxcblx0XHRcdFx0PHRoPjwvdGg+XFxuXHRcdFx0XHQ8dGggc3R5bGU9J3dpZHRoOiAxNiUnPjwvdGg+XFxuXHRcdFx0XHQ8dGg+PC90aD5cXG5cdFx0XHQ8L3RyPlwiO1xuICB0YWJsZV9maWVsZHMgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnRhYmxlX2ZpZWxkcyhpbnN0YW5jZSk7XG4gIHRhYmxlX2ZpZWxkcyAmJiB0YWJsZV9maWVsZHMuZm9yRWFjaChmdW5jdGlvbih0YWJsZV9maWVsZCkge1xuICAgIHZhciBmaWVsZF9wZXJtaXNzaW9uLCBwdXJlQ29kZSwgcmVxdWlyZWQsIHRpdGxlX3Blcm1pc3Npb247XG4gICAgcmVxdWlyZWQgPSBcIlwiO1xuICAgIGlmICghKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkgfHwgKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkgIT09IHRhYmxlX2ZpZWxkLmNvZGUpIHtcbiAgICAgIGlmICh0YWJsZV9maWVsZC5pc19yZXF1aXJlZCkge1xuICAgICAgICByZXF1aXJlZCA9IFwiaXMtcmVxdWlyZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmIChfZXhwb3J0KSB7XG4gICAgICAgIHJlcXVpcmVkID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHB1cmVDb2RlID0gU3RlZWRvcy5yZW1vdmVTcGVjaWFsQ2hhcmFjdGVyKHRhYmxlX2ZpZWxkLmNvZGUpO1xuICAgICAgaWYgKEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGQodGFibGVfZmllbGQpKSB7XG4gICAgICAgIHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX3N0YXJ0O1xuICAgICAgICB0ZW1wbGF0ZSArPSBcIjx0ZCBjbGFzcz1cXFwidGQtdGl0bGUgXCIgKyByZXF1aXJlZCArIFwiXFxcIj5cXG5cdHt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCJ9fVxcbjwvdGQ+XFxuPHRkIGNsYXNzPVxcXCJ0ZC1maWVsZCBvcGluaW9uLWZpZWxkIG9waW5pb24tZmllbGQtXCIgKyBwdXJlQ29kZSArIFwiIGF1dG9tYXRpY1xcXCIgY29sc3BhbiA9IFxcXCJcIiArIHRhYmxlX2ZpZWxkLnRkX2NvbHNwYW4gKyBcIlxcXCI+XFxuXHR7ez4gaW5zdGFuY2VTaWduVGV4dCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCJ9fVxcbjwvdGQ+XCI7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9lbmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbmNsdWRlcyh0YWJsZV9maWVsZC50eXBlLCAnc2VjdGlvbix0YWJsZScpKSB7XG4gICAgICAgICAgdGVtcGxhdGUgKz0gdGFibGVfZmllbGQudHJfc3RhcnQ7XG4gICAgICAgICAgdGVtcGxhdGUgKz0gXCI8dGQgY2xhc3M9XFxcInRkLWNoaWxkZmllbGQgdGQtY2hpbGRmaWVsZC1cIiArIHB1cmVDb2RlICsgXCJcXFwiIGNvbHNwYW4gPSBcXFwiXCIgKyB0YWJsZV9maWVsZC50ZF9jb2xzcGFuICsgXCJcXFwiPlxcbiAgIHt7PiBhZkZvcm1Hcm91cCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCIgbGFiZWw9ZmFsc2V9fVxcbjwvdGQ+XCI7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZW1wbGF0ZSArPSB0YWJsZV9maWVsZC50cl9zdGFydDtcbiAgICAgICAgICBpZiAoX2V4cG9ydCkge1xuICAgICAgICAgICAgdGl0bGVfcGVybWlzc2lvbiA9IFwiXCI7XG4gICAgICAgICAgICBmaWVsZF9wZXJtaXNzaW9uID0gXCJcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGl0bGVfcGVybWlzc2lvbiA9IFwidGl0bGUtXCIgKyB0YWJsZV9maWVsZC5wZXJtaXNzaW9uO1xuICAgICAgICAgICAgZmllbGRfcGVybWlzc2lvbiA9IFwiZmllbGQtXCIgKyB0YWJsZV9maWVsZC5wZXJtaXNzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0ZW1wbGF0ZSArPSBcIjx0ZCBjbGFzcz1cXFwidGQtdGl0bGUgdGQtdGl0bGUtXCIgKyBwdXJlQ29kZSArIFwiIFwiICsgdGl0bGVfcGVybWlzc2lvbiArIFwiIFwiICsgcmVxdWlyZWQgKyBcIlxcXCI+XFxuXHR7e2FmRmllbGRMYWJlbFRleHQgbmFtZT1cXFwiXCIgKyB0YWJsZV9maWVsZC5jb2RlICsgXCJcXFwifX1cXG48L3RkPlxcbjx0ZCBjbGFzcz1cXFwidGQtZmllbGQgdGQtZmllbGQtXCIgKyBwdXJlQ29kZSArIFwiIFwiICsgZmllbGRfcGVybWlzc2lvbiArIFwiXFxcIiBjb2xzcGFuID0gXFxcIlwiICsgdGFibGVfZmllbGQudGRfY29sc3BhbiArIFwiXFxcIj5cXG5cdHt7PiBhZkZvcm1Hcm91cCBuYW1lPVxcXCJcIiArIHRhYmxlX2ZpZWxkLmNvZGUgKyBcIlxcXCIgbGFiZWw9ZmFsc2V9fVxcbjwvdGQ+XCI7XG4gICAgICAgICAgcmV0dXJuIHRlbXBsYXRlICs9IHRhYmxlX2ZpZWxkLnRyX2VuZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHRlbXBsYXRlICs9IFwiXHQ8L3RhYmxlPlxcblxcblx0PHRhYmxlIGNsYXNzPVxcXCJ0YWJsZS1wYWdlLWZvb3RlciBmb3JtLXRhYmxlIG5vLWJvcmRlclxcXCI+XFxuXHRcdDx0ciBjbGFzcz1cXFwiYXBwbGljYW50LXdyYXBwZXJcXFwiPlxcblx0XHRcdDx0ZCBjbGFzcz1cXFwibm93cmFwXFxcIj5cXG5cdFx0XHRcdDxkaXYgY2xhc3M9J2lubGluZS1sZWZ0Jz5cXG5cdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj57e190IFxcXCJpbnN0YW5jZV9pbml0aWF0b3JcXFwifX3vvJo8L2xhYmVsPlxcblx0XHRcdFx0PC9kaXY+XFxuXHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS10YWJsZS13cmFwcGVyLXRkIGlubGluZS1sZWZ0Jz5cXG5cdFx0XHRcdFx0e3s+VGVtcGxhdGUuZHluYW1pYyAgdGVtcGxhdGU9XFxcImFmU2VsZWN0VXNlclxcXCIgZGF0YT1hcHBsaWNhbnRDb250ZXh0fX1cXG5cdFx0XHRcdDwvZGl2Plxcblx0XHRcdDwvdGQ+XFxuXHRcdFx0PHRkIGNsYXNzPVxcXCJub3dyYXBcXFwiPlxcblx0XHRcdFx0PGRpdiBjbGFzcz0ncHVsbC1sZWZ0Jz5cXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5saW5lLWxlZnQnPlxcblx0XHRcdFx0XHRcdDxsYWJlbD57e190IFxcXCJpbnN0YW5jZV9zdWJtaXRfZGF0ZVxcXCJ9fe+8mjwvbGFiZWw+XFxuXHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbmxpbmUtcmlnaHQnPlxcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcblx0XHRcdFx0XHRcdFx0e3tmb3JtYXREYXRlIGluc3RhbmNlLnN1Ym1pdF9kYXRlICd7XFxcImZvcm1hdFxcXCI6XFxcIllZWVktTU0tRERcXFwifSd9fVxcblx0XHRcdFx0XHRcdDwvZGl2Plxcblx0XHRcdFx0XHQ8L2Rpdj5cXG5cdFx0XHRcdDwvZGl2Plxcblx0XHRcdDwvdGQ+XFxuXHRcdDwvdHI+XFxuXHQ8L3RhYmxlPlxcbjwvZGl2PlwiO1xuICByZXR1cm4gdGVtcGxhdGU7XG59O1xuXG5UZW1wbGF0ZU1hbmFnZXIuX3RlbXBsYXRlID0ge1xuICBcImRlZmF1bHRcIjogZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICB2YXIgdGVtcGxhdGU7XG4gICAgdGVtcGxhdGUgPSBcIjxkaXYgY2xhc3M9XFxcIndpdGgtYm9yZGVyIGNvbC1tZC0xMlxcXCI+XFxuXHQ8ZGl2IGNsYXNzPVxcXCJpbnN0YW5jZS1uYW1lXFxcIj5cXG5cdFx0PGgzIGNsYXNzPVxcXCJib3gtdGl0bGVcXFwiPlwiICsgKFRlbXBsYXRlTWFuYWdlci5pbnN0YW5jZV90aXRsZSgpLnBhZ2VUaXRsZSkgKyBcIjwvaDM+XFxuXHRcdDxzcGFuIGNsYXNzPVxcXCJoZWxwLWJsb2NrXFxcIj48L3NwYW4+XFxuXHQ8L2Rpdj5cXG5cdDxzcGFuIGNsYXNzPVxcXCJoZWxwLWJsb2NrXFxcIj48L3NwYW4+XFxuPC9kaXY+XFxue3sjZWFjaCBzdGVlZG9zX2Zvcm0uZmllbGRzfX1cXG5cdHt7I2lmIGlzT3BpbmlvbkZpZWxkIHRoaXN9fVxcblx0XHQ8ZGl2IGNsYXNzPVxcXCJ7eyNpZiB0aGlzLmlzX3dpZGV9fWNvbC1tZC0xMnt7ZWxzZX19Y29sLW1kLTZ7ey9pZn19IGZpZWxkLXt7dGhpcy5jb2RlfX1cXFwiPlxcblx0XHRcdDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXAgYXV0b21hdGljIG9waW5pb24tZmllbGQte3t0aGlzLmNvZGV9fVxcXCI+XFxuXHRcdFx0XHQ8bGFiZWwgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWxcXFwiPnt7YWZGaWVsZExhYmVsVGV4dCBuYW1lPXRoaXMuY29kZX19PC9sYWJlbD5cXG5cXG5cdFx0XHRcdHt7PiBpbnN0YW5jZVNpZ25UZXh0IG5hbWU9dGhpcy5jb2RlfX1cXG5cdFx0XHQ8L2Rpdj5cXG5cdFx0PC9kaXY+XFxuXHR7e2Vsc2V9fVxcblx0XHR7eyNpZiBpbmNsdWRlcyB0aGlzLnR5cGUgJ3NlY3Rpb24sdGFibGUnfX1cXG5cdFx0XHQ8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTIgZmllbGQte3t0aGlzLmNvZGV9fVxcXCI+XFxuXHRcdFx0XHR7ez4gYWZGb3JtR3JvdXAgbmFtZT10aGlzLmNvZGUgbGFiZWw9ZmFsc2V9fVxcblx0XHRcdDwvZGl2Plxcblx0XHR7e2Vsc2V9fVxcblx0XHRcdDxkaXYgY2xhc3M9XFxcInt7I2lmIHRoaXMuaXNfd2lkZX19Y29sLW1kLTEye3tlbHNlfX1jb2wtbWQtNnt7L2lmfX0gZmllbGQte3t0aGlzLmNvZGV9fVxcXCI+XFxuXHRcdFx0e3s+IGFmRm9ybUdyb3VwIG5hbWU9dGhpcy5jb2RlfX1cXG5cdFx0XHQ8L2Rpdj5cXG5cdFx0e3svaWZ9fVxcblx0e3svaWZ9fVxcbnt7L2VhY2h9fVxcbjxkaXYgY2xhc3M9XFxcImNvbC1tZC0xMlxcXCI+XFxuXHQ8ZGl2IGNsYXNzPVxcXCJhcHBsaWNhbnQtd3JhcHBlciBmb3JtLWdyb3VwIGZvcm0taG9yaXpvbnRhbFxcXCI+XFxuXHQ8ZGl2IGNsYXNzPVxcXCJpbnB1dC1ncm91cFxcXCI+XFxuXHRcdDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uXFxcIj5cXG5cdFx0ICB7e190IFxcXCJpbnN0YW5jZV9pbml0aWF0b3JcXFwifX0mbmJzcDs6XFxuXHRcdDwvZGl2Plxcblx0XHR7ez5UZW1wbGF0ZS5keW5hbWljICB0ZW1wbGF0ZT1cXFwiYWZTZWxlY3RVc2VyXFxcIiBkYXRhPWFwcGxpY2FudENvbnRleHR9fVxcblx0ICA8L2Rpdj5cXG5cdDwvZGl2PlxcbjwvZGl2PlwiO1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSxcbiAgdGFibGU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIFRlbXBsYXRlTWFuYWdlci5oYW5kbGVUYWJsZVRlbXBsYXRlKGluc3RhbmNlKTtcbiAgfVxufTtcblxuVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZUhlbHBzID0ge1xuICBhcHBsaWNhbnRDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZGF0YSwgc3RlZWRvc19pbnN0YW5jZTtcbiAgICBzdGVlZG9zX2luc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgZGF0YSA9IHtcbiAgICAgIG5hbWU6ICdpbnNfYXBwbGljYW50JyxcbiAgICAgIGF0dHM6IHtcbiAgICAgICAgbmFtZTogJ2luc19hcHBsaWNhbnQnLFxuICAgICAgICBpZDogJ2luc19hcHBsaWNhbnQnLFxuICAgICAgICBcImNsYXNzXCI6ICdzZWxlY3RVc2VyIGZvcm0tY29udHJvbCcsXG4gICAgICAgIHN0eWxlOiAncGFkZGluZzo2cHggMTJweDt3aWR0aDoxNDBweDtkaXNwbGF5OmlubGluZSdcbiAgICAgIH1cbiAgICB9O1xuICAgIGRhdGEuYXR0cy5kaXNhYmxlZCA9IHRydWU7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbn07XG5cbih7XG4gIGluc3RhbmNlSWQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnaW5zdGFuY2Vmb3JtJztcbiAgfSxcbiAgZm9ybV90eXBlczogZnVuY3Rpb24oKSB7XG4gICAgaWYgKEFwcHJvdmVNYW5hZ2VyLmlzUmVhZE9ubHkoKSkge1xuICAgICAgcmV0dXJuICdkaXNhYmxlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnbWV0aG9kJztcbiAgICB9XG4gIH0sXG4gIHN0ZWVkb3NfZm9ybTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuICAgIGlmIChmb3JtX3ZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmb3JtX3ZlcnNpb247XG4gICAgfVxuICB9LFxuICBpbm5lcnN1YmZvcm1Db250ZXh0OiBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgZG9jX3ZhbHVlcztcbiAgICBkb2NfdmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuICAgIG9ialtcInRhYmxlVmFsdWVzXCJdID0gZG9jX3ZhbHVlcyA/IGRvY192YWx1ZXNbb2JqLmNvZGVdIDogW107XG4gICAgb2JqW1wiZm9ybUlkXCJdID0gZm9ybUlkO1xuICAgIHJldHVybiBvYmo7XG4gIH0sXG4gIGluc3RhbmNlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RlZWRvc19pbnN0YW5jZTtcbiAgICBTZXNzaW9uLmdldChcImNoYW5nZV9kYXRlXCIpO1xuICAgIGlmIChTZXNzaW9uLmdldChcImluc3RhbmNlSWRcIikpIHtcbiAgICAgIHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIHJldHVybiBzdGVlZG9zX2luc3RhbmNlO1xuICAgIH1cbiAgfSxcbiAgZXF1YWxzOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH0sXG4gIGluY2x1ZGVzOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIuc3BsaXQoJywnKS5pbmNsdWRlcyhhKTtcbiAgfSxcbiAgZmllbGRzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZm9ybV92ZXJzaW9uO1xuICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG4gICAgaWYgKGZvcm1fdmVyc2lvbikge1xuICAgICAgcmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYShmb3JtX3ZlcnNpb24pKTtcbiAgICB9XG4gIH0sXG4gIGRvY192YWx1ZXM6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG4gIH0sXG4gIGluc3RhbmNlX2JveF9zdHlsZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGJveCwgaW5zLCBqdWRnZTtcbiAgICBib3ggPSBTZXNzaW9uLmdldChcImJveFwiKTtcbiAgICBpZiAoYm94ID09PSBcImluYm94XCIgfHwgYm94ID09PSBcImRyYWZ0XCIpIHtcbiAgICAgIGp1ZGdlID0gU2Vzc2lvbi5nZXQoXCJqdWRnZVwiKTtcbiAgICAgIGlmIChqdWRnZSkge1xuICAgICAgICBpZiAoanVkZ2UgPT09IFwiYXBwcm92ZWRcIikge1xuICAgICAgICAgIHJldHVybiBcImJveC1zdWNjZXNzXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoanVkZ2UgPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgICAgIHJldHVybiBcImJveC1kYW5nZXJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICBpZiAoaW5zICYmIGlucy5maW5hbF9kZWNpc2lvbikge1xuICAgICAgaWYgKGlucy5maW5hbF9kZWNpc2lvbiA9PT0gXCJhcHByb3ZlZFwiKSB7XG4gICAgICAgIHJldHVybiBcImJveC1zdWNjZXNzXCI7XG4gICAgICB9IGVsc2UgaWYgKGlucy5maW5hbF9kZWNpc2lvbiA9PT0gXCJyZWplY3RlZFwiKSB7XG4gICAgICAgIHJldHVybiBcImJveC1kYW5nZXJcIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG5UZW1wbGF0ZU1hbmFnZXIuZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgdGVtcGxhdGVOYW1lKSB7XG4gIHZhciBmbG93LCBmb3JtO1xuICBmbG93ID0gZGIuZmxvd3MuZmluZE9uZShpbnN0YW5jZS5mbG93KTtcbiAgZm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoaW5zdGFuY2UuZm9ybSk7XG4gIGlmICh0ZW1wbGF0ZU5hbWUpIHtcbiAgICBpZiAodGVtcGxhdGVOYW1lID09PSAndGFibGUnKSB7XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSk7XG4gICAgfVxuICAgIHJldHVybiBUZW1wbGF0ZU1hbmFnZXIuX3RlbXBsYXRlW1wiZGVmYXVsdFwiXShpbnN0YW5jZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBTZXNzaW9uICE9PSBcInVuZGVmaW5lZFwiICYmIFNlc3Npb24gIT09IG51bGwgPyBTZXNzaW9uLmdldChcImluc3RhbmNlUHJpbnRcIikgOiB2b2lkIDApIHtcbiAgICBpZiAoZmxvdyAhPSBudWxsID8gZmxvdy5wcmludF90ZW1wbGF0ZSA6IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlwiICsgZmxvdy5wcmludF90ZW1wbGF0ZSArIFwiPC9kaXY+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmbG93ICE9IG51bGwgPyBmbG93Lmluc3RhbmNlX3RlbXBsYXRlIDogdm9pZCAwKSB7XG4gICAgICAgIHJldHVybiBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXRlbXBsYXRlJz5cIiArIGZsb3cuaW5zdGFuY2VfdGVtcGxhdGUgKyBcIjwvZGl2PlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFRlbXBsYXRlTWFuYWdlci5fdGVtcGxhdGUudGFibGUoaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZVtcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIH1cbiAgICBpZiAoZmxvdyAhPSBudWxsID8gZmxvdy5pbnN0YW5jZV90ZW1wbGF0ZSA6IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtdGVtcGxhdGUnPlwiICsgZmxvdy5pbnN0YW5jZV90ZW1wbGF0ZSArIFwiPC9kaXY+XCI7XG4gICAgfVxuICAgIGlmIChmb3JtICE9IG51bGwgPyBmb3JtLmluc3RhbmNlX3N0eWxlIDogdm9pZCAwKSB7XG4gICAgICBpZiAoZm9ybS5pbnN0YW5jZV9zdHlsZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZS50YWJsZShpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZVtcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVGVtcGxhdGVNYW5hZ2VyLl90ZW1wbGF0ZVtcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufTtcbiIsIlN0ZWVkb3NUYWJsZSA9IHt9O1xuXG5TdGVlZG9zVGFibGUuZm9ybUlkID0gXCJpbnN0YW5jZWZvcm1cIjtcblxuU3RlZWRvc1RhYmxlLmNoZWNrSXRlbSA9IGZ1bmN0aW9uIChmaWVsZCwgaXRlbV9pbmRleCkge1xuICAgIHZhciBmaWVsZE9iaiA9IFN0ZWVkb3NUYWJsZS5nZXRGaWVsZChmaWVsZCk7XG5cbiAgICB2YXIgZmllbGRWYWwgPSBTdGVlZG9zVGFibGUuZ2V0SXRlbU1vZGFsVmFsdWUoZmllbGQsIGl0ZW1faW5kZXgpO1xuXG4gICAgdmFyIHNmX25hbWUgPSAnJztcbiAgICB2YXIgcmV2ID0gdHJ1ZTtcbiAgICBmaWVsZE9iai5zZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHNmKSB7XG4gICAgICAgIGlmIChzZi5wZXJtaXNzaW9uID09ICdlZGl0YWJsZScpIHtcbiAgICAgICAgICAgIHNmX25hbWUgPSBmaWVsZE9iai5jb2RlICsgXCIuXCIgKyBzZi5jb2RlO1xuICAgICAgICAgICAgaWYgKCFJbnN0YW5jZU1hbmFnZXIuY2hlY2tGb3JtRmllbGRWYWx1ZSgkKFwiW25hbWU9J1wiICsgc2ZfbmFtZSArIFwiJ11cIilbMF0sIHNmX25hbWUsIGZpZWxkVmFsW3NmLmNvZGVdKSkge1xuICAgICAgICAgICAgICAgIHJldiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmV2O1xufVxuXG5TdGVlZG9zVGFibGUuc2V0VGFibGVJdGVtVmFsdWUgPSBmdW5jdGlvbiAoZmllbGQsIGl0ZW1faW5kZXgsIGl0ZW1fdmFsdWUpIHtcblxuICAgIHZhciB0YWJsZVZhbHVlID0gU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpO1xuICAgIHRhYmxlVmFsdWVbaXRlbV9pbmRleF0gPSBpdGVtX3ZhbHVlO1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0VGFibGVJdGVtVmFsdWUgPSBmdW5jdGlvbiAoZmllbGQsIGl0ZW1faW5kZXgpIHtcbiAgICByZXR1cm4gU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpW2l0ZW1faW5kZXhdO1xufVxuXG5TdGVlZG9zVGFibGUucmVtb3ZlVGFibGVJdGVtID0gZnVuY3Rpb24gKGZpZWxkLCBpdGVtX2luZGV4KSB7XG4gICAgdmFyIGl0ZW1fdmFsdWUgPSBTdGVlZG9zVGFibGUuZ2V0VGFibGVJdGVtVmFsdWUoZmllbGQsIGl0ZW1faW5kZXgpO1xuICAgIGl0ZW1fdmFsdWUucmVtb3ZlZCA9IHRydWU7XG59XG5cblN0ZWVkb3NUYWJsZS5zZXRUYWJsZVZhbHVlID0gZnVuY3Rpb24gKGZpZWxkLCB2YWx1ZSkge1xuICAgICQoXCJ0YWJsZVtuYW1lPSdcIiArIGZpZWxkICsgXCInXVwiKS52YWwoe1xuICAgICAgICB2YWw6IHZhbHVlXG4gICAgfSk7XG59XG5cblN0ZWVkb3NUYWJsZS5nZXRUYWJsZVZhbHVlID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgcmV0dXJuICQoXCJ0YWJsZVtuYW1lPSdcIiArIGZpZWxkICsgXCInXVwiKS52YWwoKS52YWw7XG59XG5cblN0ZWVkb3NUYWJsZS5nZXRWYWxpZFZhbHVlID0gZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgdmFyIHZhbHVlID0gU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgdmFsaWRWYWx1ZSA9IFtdO1xuXG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAoIXYucmVtb3ZlZCkge1xuICAgICAgICAgICAgdmFsaWRWYWx1ZS5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbGlkVmFsdWU7XG59XG5cblxuU3RlZWRvc1RhYmxlLmhhbmRsZURhdGEgPSBmdW5jdGlvbiAoZmllbGQsIHZhbHVlcykge1xuXG4gICAgaWYgKCF2YWx1ZXMgfHwgISh2YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICB2YXIgZmllbGRPYmogPSBTdGVlZG9zVGFibGUuZ2V0RmllbGQoZmllbGQpO1xuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgZmllbGRPYmouc2ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgICAgICBpZiAoZi50eXBlID09ICd1c2VyJyB8fCBmLnR5cGUgPT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZbZi5jb2RlXVxuICAgICAgICAgICAgICAgIGlmIChmLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiAodmFsdWVbMF0pID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2W2YuY29kZV0gPSB2W2YuY29kZV0uZ2V0UHJvcGVydHkoXCJpZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgKHZhbHVlKSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdltmLmNvZGVdID0gdltmLmNvZGVdLmlkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT0gJ2RhdGVUaW1lJykge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZbZi5jb2RlXVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHZhbHVlLnNwbGl0KFwiVFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0MCA9IHRbMF0uc3BsaXQoXCItXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQxID0gdFsxXS5zcGxpdChcIjpcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSB0MFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoID0gdDBbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gdDBbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBob3VycyA9IHQxWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHQxWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRhdGUsIGhvdXJzLCBzZWNvbmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZbZi5jb2RlXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZXM7XG59XG5cblN0ZWVkb3NUYWJsZS5nZXRGaWVsZCA9IGZ1bmN0aW9uIChmaWVsZCkge1xuICAgIHZhciBpbnN0YW5jZUZpZWxkcyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZpZWxkcygpO1xuICAgIGlmICghaW5zdGFuY2VGaWVsZHMpXG4gICAgICAgIHJldHVybjtcblxuICAgIHZhciBmaWVsZE9iaiA9IGluc3RhbmNlRmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGZpZWxkKTtcblxuICAgIHJldHVybiBmaWVsZE9iajtcbn1cblxuXG5TdGVlZG9zVGFibGUuZ2V0TW9kYWxEYXRhID0gZnVuY3Rpb24gKGZpZWxkLCBpbmRleCkge1xuXG4gICAgdmFyIGRhdGEgPSB7fTtcblxuICAgIHZhciBmaWVsZE9iaiA9IFN0ZWVkb3NUYWJsZS5nZXRGaWVsZChmaWVsZCk7XG5cbiAgICBpZiAoIWZpZWxkT2JqKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLmZpZWxkID0gZmllbGRPYmo7XG5cbiAgICBkYXRhLmZpZWxkLmZvcm11bGEgPSBGb3JtX2Zvcm11bGEuZ2V0Rm9ybXVsYUZpZWxkVmFyaWFibGUoXCJGb3JtX2Zvcm11bGEuZmllbGRfdmFsdWVzXCIsIGZpZWxkT2JqLnNmaWVsZHMpO1xuXG4gICAgZGF0YS52YWx1ZSA9IHt9O1xuXG4gICAgZGF0YS52YWx1ZVtmaWVsZF0gPSBTdGVlZG9zVGFibGUuZ2V0VGFibGVJdGVtVmFsdWUoZmllbGQsIGluZGV4KTtcblxuICAgIGRhdGEuaW5kZXggPSBpbmRleDtcblxuICAgIHJldHVybiBkYXRhO1xufVxuXG5cblxuU3RlZWRvc1RhYmxlLmdldEl0ZW1Nb2RhbFZhbHVlID0gZnVuY3Rpb24gKGZpZWxkLCBpdGVtX2luZGV4KSB7XG5cbiAgICBpZiAoIUF1dG9Gb3JtLmdldEZvcm1WYWx1ZXMoXCJzdGVlZG9zX3RhYmxlX21vZGFsX1wiICsgZmllbGQgKyBcIl9cIiArIGl0ZW1faW5kZXgpKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIHZhciBpdGVtX3ZhbHVlID0gQXV0b0Zvcm0uZ2V0Rm9ybVZhbHVlcyhcInN0ZWVkb3NfdGFibGVfbW9kYWxfXCIgKyBmaWVsZCArIFwiX1wiICsgaXRlbV9pbmRleCkuaW5zZXJ0RG9jW2ZpZWxkXTtcbiAgICByZXR1cm4gaXRlbV92YWx1ZTtcbn1cblxuXG5TdGVlZG9zVGFibGUuYWRkSXRlbSA9IGZ1bmN0aW9uIChmaWVsZCwgaW5kZXgsIF9pdGVtX3ZhbHVlKSB7XG4gICAgdmFyIGtleXMgPSBTdGVlZG9zVGFibGUuZ2V0S2V5cyhmaWVsZCk7XG4gICAgdmFyIGl0ZW1fdmFsdWUgPSBfaXRlbV92YWx1ZSB8fCBTdGVlZG9zVGFibGUuZ2V0SXRlbU1vZGFsVmFsdWUoZmllbGQsIGluZGV4KTtcbiAgICAkKFwidGJvZHlbbmFtZT0nXCIgKyBmaWVsZCArIFwiVGJvZHknXVwiKS5hcHBlbmQoU3RlZWRvc1RhYmxlLmdldFRyKGtleXMsIGl0ZW1fdmFsdWUsIGluZGV4LCBmaWVsZCwgdHJ1ZSkpXG5cbn1cblxuU3RlZWRvc1RhYmxlLnVwZGF0ZUl0ZW0gPSBmdW5jdGlvbiAoZmllbGQsIGluZGV4LCBfaXRlbV92YWx1ZSkge1xuXG4gICAgdmFyIGl0ZW0gPSAkKFwidHJbbmFtZT0nXCIgKyBmaWVsZCArIFwiX2l0ZW1fXCIgKyBpbmRleCArIFwiJ11cIik7XG5cbiAgICB2YXIgaXRlbV92YWx1ZSA9IF9pdGVtX3ZhbHVlIHx8IFN0ZWVkb3NUYWJsZS5nZXRJdGVtTW9kYWxWYWx1ZShmaWVsZCwgaW5kZXgpO1xuXG4gICAgaWYgKGl0ZW0gJiYgaXRlbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gU3RlZWRvc1RhYmxlLmdldEtleXMoZmllbGQpO1xuICAgICAgICB2YXIgdGRzID0gU3RlZWRvc1RhYmxlLmdldFJlbW92ZVRkKGZpZWxkLCBpbmRleCk7XG5cbiAgICAgICAgdmFyIHNmaWVsZHMgPSBTdGVlZG9zVGFibGUuZ2V0RmllbGQoZmllbGQpLnNmaWVsZHM7XG5cbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciBzZmllbGQgPSBzZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGtleSk7XG5cbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1fdmFsdWVba2V5XTtcblxuICAgICAgICAgICAgdGRzID0gdGRzICsgU3RlZWRvc1RhYmxlLmdldFRkKHNmaWVsZCwgaW5kZXgsIHZhbHVlKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdGVtLmVtcHR5KCk7XG5cbiAgICAgICAgaXRlbS5hcHBlbmQodGRzKTtcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgICAgU3RlZWRvc1RhYmxlLmFkZEl0ZW0oZmllbGQsIGluZGV4KTtcbiAgICB9XG5cbiAgICBpZiAoU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpKSB7XG5cbiAgICAgICAgU3RlZWRvc1RhYmxlLnNldFRhYmxlSXRlbVZhbHVlKGZpZWxkLCBpbmRleCwgaXRlbV92YWx1ZSk7XG5cbiAgICAgICAgLy9TdGVlZG9zVGFibGUudmFsdWVIYXNoW2ZpZWxkXVtpbmRleF0gPSBpdGVtX3ZhbHVlO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy9TdGVlZG9zVGFibGUudmFsdWVIYXNoW2ZpZWxkXSA9IFtpdGVtX3ZhbHVlXTtcblxuICAgICAgICBTdGVlZG9zVGFibGUuc2V0VGFibGVWYWx1ZShmaWVsZCwgW2l0ZW1fdmFsdWVdKVxuXG4gICAgfVxuXG4gICAgLy/miafooYzkuLvooajlhazlvI/orqHnrpdcbiAgICBJbnN0YW5jZU1hbmFnZXIucnVuRm9ybXVsYShmaWVsZCk7XG5cbn1cblxuU3RlZWRvc1RhYmxlLnJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoZmllbGQsIGluZGV4KSB7XG5cbiAgICAkKFwidHJbbmFtZT0nXCIgKyBmaWVsZCArIFwiX2l0ZW1fXCIgKyBpbmRleCArIFwiJ11cIikuaGlkZSgpO1xuXG4gICAgU3RlZWRvc1RhYmxlLnJlbW92ZVRhYmxlSXRlbShmaWVsZCwgaW5kZXgpO1xuXG4gICAgSW5zdGFuY2VNYW5hZ2VyLnJ1bkZvcm11bGEoZmllbGQpO1xufVxuXG5TdGVlZG9zVGFibGUuc2hvd01vZGFsID0gZnVuY3Rpb24gKGZpZWxkLCBpbmRleCwgbWV0aG9kKSB7XG5cblxuICAgIHZhciBtb2RhbERhdGEgPSBTdGVlZG9zVGFibGUuZ2V0TW9kYWxEYXRhKGZpZWxkLCBpbmRleCk7XG5cbiAgICBtb2RhbERhdGEubWV0aG9kID0gbWV0aG9kO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgTW9kYWwuc2hvdyhcInN0ZWVkb3NUYWJsZU1vZGFsXCIsIG1vZGFsRGF0YSk7XG4gICAgfSwgMzAwKVxufVxuXG5TdGVlZG9zVGFibGUuZ2V0S2V5cyA9IGZ1bmN0aW9uIChmaWVsZCkge1xuICAgIGlmICghQXV0b0Zvcm0uZ2V0Q3VycmVudERhdGFGb3JGb3JtKFN0ZWVkb3NUYWJsZS5mb3JtSWQpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgc3MgPSBBdXRvRm9ybS5nZXRGb3JtU2NoZW1hKFN0ZWVkb3NUYWJsZS5mb3JtSWQpO1xuXG4gICAgdmFyIGtleXMgPSBbXTtcblxuICAgIGlmIChzcy5zY2hlbWEoZmllbGQgKyBcIi4kXCIpLnR5cGUgPT09IE9iamVjdCkge1xuICAgICAgICBrZXlzID0gc3Mub2JqZWN0S2V5cyhTaW1wbGVTY2hlbWEuX21ha2VHZW5lcmljKGZpZWxkKSArICcuJCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIGtleXM7XG5cbn1cblxuU3RlZWRvc1RhYmxlLmdldFRoZWFkID0gZnVuY3Rpb24gKGZpZWxkLCBlZGl0YWJsZSkge1xuXG4gICAgdmFyIGZpZWxkT2JqID0gZmllbGQ7XG4gICAgaWYgKCFfLmlzT2JqZWN0KGZpZWxkKSlcbiAgICAgICAgZmllbGRPYmogPSBTdGVlZG9zVGFibGUuZ2V0RmllbGQoZmllbGQpO1xuXG4gICAgaWYgKCFmaWVsZE9iaikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgdmFyIHRoZWFkID0gJycsXG4gICAgICAgIHRycyA9ICcnLFxuICAgICAgICBsYWJlbCA9ICcnLFxuICAgICAgICB3aWR0aCA9IDEwMDtcblxuICAgIGlmIChlZGl0YWJsZSkge1xuICAgICAgICAvLyB0cnMgPSBcIjx0aCBjbGFzcz0ncmVtb3ZlZCc+PC90aD5cIlxuICAgICAgICB0cnMgPSBcIlwiXG4gICAgfVxuXG4gICAgdmFyIHNmaWVsZHMgPSBmaWVsZE9iai5zZmllbGRzO1xuXG4gICAgaWYgKCFzZmllbGRzKSB7XG4gICAgICAgIHJldHVybiB0aGVhZDtcbiAgICB9XG5cbiAgICB2YXIgc2ZfbGVuZ3RoID0gc2ZpZWxkcy5sZW5ndGg7XG5cbiAgICBpZiAoc2ZfbGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgd2lkZV9maWVsZHMgPSBzZmllbGRzLmZpbHRlclByb3BlcnR5KFwiaXNfd2lkZVwiLCB0cnVlKTtcblxuICAgICAgICB3aWR0aCA9IDEwMCAvIChzZl9sZW5ndGggKyB3aWRlX2ZpZWxkcy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHNmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoc2YsIGluZGV4KSB7XG5cbiAgICAgICAgbGFiZWwgPSAoc2YubmFtZSAhPSBudWxsICYmIHNmLm5hbWUubGVuZ3RoID4gMCkgPyBzZi5uYW1lIDogc2YuY29kZTtcblxuICAgICAgICB0cnMgPSB0cnMgKyBcIjx0ZCBcIjsgLy8gbm93cmFwPSdub3dyYXAnXG5cbiAgICAgICAgdHJzID0gdHJzICsgXCIgY2xhc3M9J3RpdGxlIFwiICsgc2YudHlwZSArIFwiJ1wiO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSAoc2ZfbGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAgIGlmIChzZi5pc193aWRlKSB7XG4gICAgICAgICAgICAgICAgdHJzID0gdHJzICsgXCJzdHlsZT0nd2lkdGg6XCIgKyB3aWR0aCAqIDIgKyBcIiUnXCJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJzID0gdHJzICsgXCJzdHlsZT0nd2lkdGg6XCIgKyB3aWR0aCArIFwiJSdcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdHJzID0gdHJzICsgXCI+XCIgKyBsYWJlbCArIFwiPC90ZD5cIlxuICAgIH0pO1xuXG4gICAgdGhlYWQgPSAnPHRyPicgKyB0cnMgKyAnPC90cj4nO1xuXG4gICAgcmV0dXJuIHRoZWFkO1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0VGJvZHkgPSBmdW5jdGlvbiAoa2V5cywgZmllbGQsIHZhbHVlcywgZWRpdGFibGUsIHNmaWVsZHNFZGl0YWJsZSkge1xuICAgIHZhciB0Ym9keSA9IFwiXCI7XG5cbiAgICBpZiAodmFsdWVzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICAgICAgdGJvZHkgPSB0Ym9keSArIFN0ZWVkb3NUYWJsZS5nZXRUcihrZXlzLCB2YWx1ZSwgaW5kZXgsIGZpZWxkLCBlZGl0YWJsZSwgc2ZpZWxkc0VkaXRhYmxlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRib2R5O1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0VHIgPSBmdW5jdGlvbiAoa2V5cywgaXRlbV92YWx1ZSwgaW5kZXgsIGZpZWxkLCBlZGl0YWJsZSwgc2ZpZWxkc0VkaXRhYmxlKSB7XG5cbiAgICB2YXIgZmllbGRPYmogPSBmaWVsZDtcbiAgICBpZiAoIV8uaXNPYmplY3QoZmllbGQpKVxuICAgICAgICBmaWVsZE9iaiA9IFN0ZWVkb3NUYWJsZS5nZXRGaWVsZChmaWVsZCk7XG5cbiAgICB2YXIgdHIgPSBcIjx0ciBpZD0nXCIgKyBmaWVsZE9iai5jb2RlICsgXCJfaXRlbV9cIiArIGluZGV4ICsgXCInIG5hbWU9J1wiICsgZmllbGRPYmouY29kZSArIFwiX2l0ZW1fXCIgKyBpbmRleCArIFwiJyBkYXRhLWluZGV4PSdcIiArIGluZGV4ICsgXCInXCJcblxuICAgIGlmIChlZGl0YWJsZSB8fCBzZmllbGRzRWRpdGFibGUpIHtcbiAgICAgICAgdHIgPSB0ciArIFwiJyBjbGFzcz0naXRlbSBlZGl0J1wiXG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgdHIgPSB0ciArIFwiIGNsYXNzPSdpdGVtIGl0ZW0tcmVhZG9ubHknXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyID0gdHIgKyBcIiBjbGFzcz0naXRlbSAnXCJcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpdGVtX3ZhbHVlLnJlbW92ZWQpIHtcbiAgICAgICAgdHIgPSB0ciArIFwiIHN0eWxlPSdkaXNwbGF5Om5vbmUnIFwiO1xuICAgIH1cblxuICAgIHRyID0gdHIgKyBcIic+XCI7XG5cbiAgICB2YXIgdGRzID0gXCJcIjtcblxuICAgIGlmIChlZGl0YWJsZSkge1xuICAgICAgICB0ZHMgPSBTdGVlZG9zVGFibGUuZ2V0UmVtb3ZlVGQoZmllbGRPYmouY29kZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHZhciBzZmllbGRzID0gZmllbGRPYmouc2ZpZWxkcztcblxuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBzZmllbGQgPSBzZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGtleSk7XG5cbiAgICAgICAgdmFyIHZhbHVlID0gaXRlbV92YWx1ZVtrZXldO1xuXG4gICAgICAgIHRkcyA9IHRkcyArIFN0ZWVkb3NUYWJsZS5nZXRUZChzZmllbGQsIGluZGV4LCB2YWx1ZSk7XG5cbiAgICB9KTtcblxuICAgIHRyID0gdHIgKyB0ZHMgKyBcIjwvdHI+XCI7XG4gICAgcmV0dXJuIHRyO1xufVxuXG5TdGVlZG9zVGFibGUuZ2V0UmVtb3ZlVGQgPSBmdW5jdGlvbiAoZmllbGQsIGluZGV4KSB7XG4gICAgLy8gcmV0dXJuIFwiPHRkIGNsYXNzPSdzdGVlZG9zVGFibGUtaXRlbS1yZW1vdmUgcmVtb3ZlZCcgZGF0YS1pbmRleD0nXCIgKyBpbmRleCArIFwiJz48aSBjbGFzcz0nZmEgZmEtdGltZXMnIGFyaWEtaGlkZGVuPSd0cnVlJz48L3RkPlwiO1xuICAgIHJldHVybiBcIlwiXG59XG5cblN0ZWVkb3NUYWJsZS5nZXRUZCA9IGZ1bmN0aW9uIChmaWVsZCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgdmFyIHRkID0gXCI8dGQgXCI7XG5cbiAgICB0ZCA9IHRkICsgXCIgY2xhc3M9J3N0ZWVkb3NUYWJsZS1pdGVtLWZpZWxkIFwiICsgZmllbGQudHlwZSArIFwiJyBcIjtcblxuICAgIHZhciB0ZF92YWx1ZSA9IFwiXCI7XG5cbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICAgIHRkX3ZhbHVlID0gU3RlZWRvc1RhYmxlLmdldFREVmFsdWUoZmllbGQsIHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGVcblxuICAgICAgICB1dGNPZmZzZXQgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEudXRjT2Zmc2V0XG5cbiAgICAgICAgdGRfdmFsdWUgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0VmFsdWUodmFsdWUsIGZpZWxkLCBsb2NhbGUsIHV0Y09mZnNldClcbiAgICB9XG5cbiAgICB0ZCA9IHRkICsgXCIgZGF0YS1pbmRleD0nXCIgKyBpbmRleCArIFwiJz5cIiArIHRkX3ZhbHVlICsgXCI8L3RkPlwiXG5cbiAgICByZXR1cm4gdGQ7XG59XG5cblxuU3RlZWRvc1RhYmxlLmdldFREVmFsdWUgPSBmdW5jdGlvbiAoZmllbGQsIHZhbHVlKSB7XG4gICAgdmFyIHRkX3ZhbHVlID0gXCJcIjtcbiAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0ZF92YWx1ZVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB2YXIgZmllbGRPcHRpb25zID0gW107XG4gICAgICAgIGlmKFtcInNlbGVjdFwiLCBcIm11bHRpU2VsZWN0XCIsIFwicmFkaW9cIl0uaW5kZXhPZihmaWVsZC50eXBlKSA+IC0xKXtcbiAgICAgICAgICAgIGZpZWxkT3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKG4pe1xuICAgICAgICAgICAgICAgIHZhciBpdGVtU3BsaXRzID0gbi5zcGxpdChcIjpcIilcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbVNwbGl0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1TcGxpdHNbMV0gfHwgblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICd1c2VyJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiAodmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhU3BhY2VVc2Vycyh2YWx1ZSkuZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZS5nZXRQcm9wZXJ0eShcIm5hbWVcIikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1ID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhU3BhY2VVc2Vycyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB1ID8gdS5uYW1lIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzX211bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiAodmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhT3JnYW5pemF0aW9ucyh2YWx1ZSkuZ2V0UHJvcGVydHkoXCJuYW1lXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZS5nZXRQcm9wZXJ0eShcIm5hbWVcIikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gQ0ZEYXRhTWFuYWdlci5nZXRGb3JtdWxhT3JnYW5pemF0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IG8gPyBvLm5hbWUgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF95ZXNcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF9ub1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbWFpbCc6XG4gICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZSA/IFwiPGEgaHJlZj0nbWFpbHRvOlwiICsgdmFsdWUgKyBcIic+XCIgKyB2YWx1ZSArIFwiPC9hPlwiIDogXCJcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3VybCc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiaHR0cFwiKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gXCI8YSBocmVmPSdcIiArIGVuY29kZVVSSSh2YWx1ZSkgKyBcIicgdGFyZ2V0PSdfYmxhbmsnPlwiICsgdmFsdWUgKyBcIjwvYT5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IFwiPGEgaHJlZj0nJyB0YXJnZXQ9J19ibGFuayc+XCIgKyB2YWx1ZSArIFwiPC9hPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IFwiPGEgaHJlZj0naHR0cDovL1wiICsgZW5jb2RlVVJJKHZhbHVlKSArIFwiJyB0YXJnZXQ9J19ibGFuayc+aHR0cDovL1wiICsgdmFsdWUgKyBcIjwvYT5cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICAgICAgICAgICAgdGRfdmFsdWUgPSAnKioqKioqJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHZhbHVlLnNwbGl0KFwiLVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSB0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IHRbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gJC5mb3JtYXQuZGF0ZSh2YWx1ZSwgJ3l5eXktTU0tZGQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdmFsdWUuc3BsaXQoXCJUXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQwID0gdFswXS5zcGxpdChcIi1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdDEgPSB0WzFdLnNwbGl0KFwiOlwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9IHQwWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0MFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgPSB0MFsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzID0gdDFbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gdDFbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXRlLCBob3Vycywgc2Vjb25kcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9ICQuZm9ybWF0LmRhdGUodmFsdWUsICd5eXl5LU1NLWRkIEhIOm1tJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb24gPSBmaWVsZE9wdGlvbnMuZmluZChmdW5jdGlvbihpdGVtKXsgcmV0dXJuIGl0ZW0udmFsdWUgPT0gdmFsdWU7IH0pXG4gICAgICAgICAgICAgICAgaWYoc2VsZWN0ZWRPcHRpb24pe1xuICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IHNlbGVjdGVkT3B0aW9uLmxhYmVsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmFkaW8nOlxuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKGZ1bmN0aW9uKGl0ZW0peyByZXR1cm4gaXRlbS52YWx1ZSA9PSB2YWx1ZTsgfSlcbiAgICAgICAgICAgICAgICBpZihzZWxlY3RlZE9wdGlvbil7XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gc2VsZWN0ZWRPcHRpb24ubGFiZWxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtdWx0aVNlbGVjdCc6XG4gICAgICAgICAgICAgICAgdmFyIHNwbGl0ZWRWYWx1ZXMgPSB2YWx1ZS5zcGxpdChcIixcIik7XG4gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkT3B0aW9ucyA9IGZpZWxkT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24oaXRlbSl7IHJldHVybiBzcGxpdGVkVmFsdWVzLmluZGV4T2YoaXRlbS52YWx1ZSkgPiAtMTsgfSk7XG4gICAgICAgICAgICAgICAgaWYoc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbihpdGVtKXsgcmV0dXJuIGl0ZW0ubGFiZWw7IH0pLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlIHx8IHZhbHVlID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmlzX3BlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gU3RlZWRvcy5udW1iZXJUb1BlcmNlbnRTdHJpbmcodmFsdWUsIGZpZWxkLmRpZ2l0cyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZF92YWx1ZSA9IFN0ZWVkb3MubnVtYmVyVG9TdHJpbmcodmFsdWUsIGZpZWxkLmRpZ2l0cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvZGF0YSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pc19tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSBfLnBsdWNrKHZhbHVlLCAnQGxhYmVsJykudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZVsnQGxhYmVsJ11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgICAgICAgY2FzZSAnbG9va3VwJzpcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICAgICAgICAgIHRkX3ZhbHVlID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFZhbHVlKHZhbHVlLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGRfdmFsdWUgPSB2YWx1ZSA/IHZhbHVlIDogJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGU7XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdGRfdmFsdWU7XG59O1xuXG5pZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgQXV0b0Zvcm0uYWRkSW5wdXRUeXBlKFwidGFibGVcIiwge1xuICAgICAgICB0ZW1wbGF0ZTogXCJhZlRhYmxlXCIsXG4gICAgICAgIHZhbHVlT3V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZGF0YShcInNjaGVtYUtleVwiKTtcbiAgICAgICAgICAgIHJldHVybiBTdGVlZG9zVGFibGUuZ2V0VmFsaWRWYWx1ZShuYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWVDb252ZXJ0ZXJzOiB7XG4gICAgICAgICAgICBcInN0cmluZ0FycmF5XCI6IEF1dG9Gb3JtLnZhbHVlQ29udmVydGVycy5zdHJpbmdUb1N0cmluZ0FycmF5LFxuICAgICAgICAgICAgXCJudW1iZXJcIjogQXV0b0Zvcm0udmFsdWVDb252ZXJ0ZXJzLnN0cmluZ1RvTnVtYmVyLFxuICAgICAgICAgICAgXCJudW1lckFycmF5XCI6IEF1dG9Gb3JtLnZhbHVlQ29udmVydGVycy5zdHJpbmdUb051bWJlckFycmF5LFxuICAgICAgICAgICAgXCJib29sZWFuXCI6IEF1dG9Gb3JtLnZhbHVlQ29udmVydGVycy5zdHJpbmdUb0Jvb2xlYW4sXG4gICAgICAgICAgICBcImJvb2xlYW5BcnJheVwiOiBBdXRvRm9ybS52YWx1ZUNvbnZlcnRlcnMuc3RyaW5nVG9Cb29sZWFuQXJyYXksXG4gICAgICAgICAgICBcImRhdGVcIjogQXV0b0Zvcm0udmFsdWVDb252ZXJ0ZXJzLnN0cmluZ1RvRGF0ZSxcbiAgICAgICAgICAgIFwiZGF0ZUFycmF5XCI6IEF1dG9Gb3JtLnZhbHVlQ29udmVydGVycy5zdHJpbmdUb0RhdGVBcnJheVxuICAgICAgICB9LFxuICAgICAgICBjb250ZXh0QWRqdXN0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0LmF0dHMubWF4bGVuZ3RoID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29udGV4dC5tYXggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5hdHRzLm1heGxlbmd0aCA9IGNvbnRleHQubWF4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIFRlbXBsYXRlLmFmVGFibGUuZXZlbnRzKHtcbiAgICAgICAgJ3RhcCAuc3RlZWRvcy10YWJsZSAuc3RlZWRvc1RhYmxlLWl0ZW0tYWRkLC5hZGQtaXRlbS10cic6IGZ1bmN0aW9uIChldmVudCwgdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gdGVtcGxhdGUuZGF0YS5uYW1lO1xuXG4gICAgICAgICAgICB2YXIgdGFibGVWYWx1ZSA9IFN0ZWVkb3NUYWJsZS5nZXRUYWJsZVZhbHVlKG5hbWUpO1xuXG4gICAgICAgICAgICB2YXIgbmV3X2l0ZW1faW5kZXggPSB0YWJsZVZhbHVlID8gdGFibGVWYWx1ZS5sZW5ndGggOiAwO1xuXG4gICAgICAgICAgICBTdGVlZG9zVGFibGUuc2hvd01vZGFsKG5hbWUsIG5ld19pdGVtX2luZGV4LCBcImFkZFwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICAndGFwIC5zdGVlZG9zLXRhYmxlIC5zdGVlZG9zVGFibGUtaXRlbS1maWVsZCc6IGZ1bmN0aW9uIChldmVudCwgdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5kYXRhLmF0dHMuZWRpdGFibGUgfHwgdGVtcGxhdGUuZGF0YS5hdHRzLnNmaWVsZHNFZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IHRlbXBsYXRlLmRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuaW5kZXg7XG4gICAgICAgICAgICAgICAgU3RlZWRvc1RhYmxlLnNob3dNb2RhbChmaWVsZCwgaW5kZXgsIFwiZWRpdFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAndGFwIC5zdGVlZG9zLXRhYmxlIC5zdGVlZG9zVGFibGUtaXRlbS1yZW1vdmUnOiBmdW5jdGlvbiAoZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgICAgICAgICB2YXIgZmllbGQgPSB0ZW1wbGF0ZS5kYXRhLm5hbWU7XG4gICAgICAgICAgICB2YXIgaXRlbV9pbmRleCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC5pbmRleDtcbiAgICAgICAgICAgIFNlc3Npb24uc2V0KFwiaW5zdGFuY2VfY2hhbmdlXCIsIHRydWUpO1xuICAgICAgICAgICAgU3RlZWRvc1RhYmxlLnJlbW92ZUl0ZW0oZmllbGQsIGl0ZW1faW5kZXgpO1xuICAgICAgICB9LFxuXG4gICAgICAgICd0YXAgLnN0ZWVkb3MtdGFibGUgLml0ZW0tcmVhZG9ubHknOiBmdW5jdGlvbiAoZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgICAgICAgICBpZiAoIXRlbXBsYXRlLmRhdGEuYXR0cy5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IHRlbXBsYXRlLmRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuaW5kZXg7XG4gICAgICAgICAgICAgICAgU3RlZWRvc1RhYmxlLnNob3dNb2RhbChmaWVsZCwgaW5kZXgsIFwicmVhZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG5cblxuICAgIFRlbXBsYXRlLmFmVGFibGUucmVuZGVyZWQgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIGZpZWxkID0gdGhpcy5kYXRhLm5hbWU7XG5cbiAgICAgICAgdmFyIHNmaWVsZHNFZGl0YWJsZSA9IHRoaXMuZGF0YS5hdHRzLnNmaWVsZHNFZGl0YWJsZTtcblxuICAgICAgICB2YXIga2V5cyA9IFN0ZWVkb3NUYWJsZS5nZXRLZXlzKGZpZWxkKTtcbiAgICAgICAgdmFyIHZhbGlkVmFsdWUgPSBTdGVlZG9zVGFibGUuaGFuZGxlRGF0YShmaWVsZCwgdGhpcy5kYXRhLnZhbHVlKTtcbiAgICAgICAgU3RlZWRvc1RhYmxlLnNldFRhYmxlVmFsdWUoZmllbGQsIHZhbGlkVmFsdWUpO1xuXG4gICAgICAgICQoXCJ0aGVhZFtuYW1lPSdcIiArIGZpZWxkICsgXCJUaGVhZCddXCIpLmh0bWwoU3RlZWRvc1RhYmxlLmdldFRoZWFkKGZpZWxkLCB0aGlzLmRhdGEuYXR0cy5lZGl0YWJsZSkpO1xuXG4gICAgICAgICQoXCJ0Ym9keVtuYW1lPSdcIiArIGZpZWxkICsgXCJUYm9keSddXCIpLmh0bWwoU3RlZWRvc1RhYmxlLmdldFRib2R5KGtleXMsIGZpZWxkLCBTdGVlZG9zVGFibGUuZ2V0VGFibGVWYWx1ZShmaWVsZCksIHRoaXMuZGF0YS5hdHRzLmVkaXRhYmxlLCBzZmllbGRzRWRpdGFibGUpKTtcblxuICAgICAgICBzdHIgPSB0KFwic3RlZWRvc190YWJsZV9hZGRfaXRlbVwiKTtcbiAgICAgICAgYWRkSXRlbVRyID0gXCI8dHIgY2xhc3M9J2FkZC1pdGVtLXRyJz48dGQgY29sc3Bhbj0nXCIgKyBrZXlzLmxlbmd0aCArIFwiJz48aSBjbGFzcz0naW9uIGlvbi1wbHVzLXJvdW5kJz48L2k+XCIgKyBzdHIgKyBcIjwvdGQ+PC90cj5cIjtcblxuICAgICAgICBpZiAodGhpcy5kYXRhLmF0dHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICQoXCJ0Zm9vdFtuYW1lPSdcIiArIGZpZWxkICsgXCJUZm9vdCddXCIpLmFwcGVuZChhZGRJdGVtVHIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcbiAgICAgICAgaWYgKGMuc3RlcF90eXBlID09ICdjb3VudGVyU2lnbicgfHwgSW5zdGFuY2VNYW5hZ2VyLmNjSGFzRWRpdFBlcm1pc3Npb24oKSkge1xuICAgICAgICAgICAgdGhpcy5hdXRvcnVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IFRlbXBsYXRlLmN1cnJlbnREYXRhKCk7XG4gICAgICAgICAgICAgICAgdmFyIGZpZWxkID0gZGF0YS5uYW1lO1xuICAgICAgICAgICAgICAgIHZhciBrZXlzID0gU3RlZWRvc1RhYmxlLmdldEtleXMoZmllbGQpO1xuICAgICAgICAgICAgICAgIHZhciB2YWxpZFZhbHVlID0gU3RlZWRvc1RhYmxlLmhhbmRsZURhdGEoZmllbGQsIGRhdGEudmFsdWUpO1xuICAgICAgICAgICAgICAgIFN0ZWVkb3NUYWJsZS5zZXRUYWJsZVZhbHVlKGZpZWxkLCB2YWxpZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAkKFwidGJvZHlbbmFtZT0nXCIgKyBmaWVsZCArIFwiVGJvZHknXVwiKS5odG1sKFN0ZWVkb3NUYWJsZS5nZXRUYm9keShrZXlzLCBmaWVsZCwgU3RlZWRvc1RhYmxlLmdldFRhYmxlVmFsdWUoZmllbGQpLCBkYXRhLmF0dHMuZWRpdGFibGUsIHNmaWVsZHNFZGl0YWJsZSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgfTtcbn0iLCJJbWFnZVNpZ24uaGVscGVycyA9XG5cdHNwYWNlVXNlclNpZ246ICh1c2VySWQpLT5cblx0XHRzcGFjZSA9IFwiXCJcblxuXHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0c3BhY2UgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuc3BhY2Vcblx0XHRlbHNlXG5cdFx0XHRzcGFjZSA9IFNlc3Npb24uZ2V0KFwic3BhY2VJZFwiKVxuXG5cdFx0c3BhY2VVc2VyU2lnbiA9IGRiLnNwYWNlX3VzZXJfc2lnbnMuZmluZE9uZSh7c3BhY2U6IHNwYWNlLCB1c2VyOiB1c2VySWR9KTtcblx0XHRyZXR1cm4gc3BhY2VVc2VyU2lnblxuXG5cdGltYWdlVVJMOiAodXNlcklkKS0+XG5cblx0XHRzcGFjZVVzZXJTaWduID0gSW1hZ2VTaWduLmhlbHBlcnMuc3BhY2VVc2VyU2lnbih1c2VySWQpO1xuXG5cdFx0YWJzb2x1dGUgPSBmYWxzZVxuXG5cdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRhYnNvbHV0ZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5hYnNvbHV0ZVxuXG5cdFx0aWYgc3BhY2VVc2VyU2lnbj8uc2lnblxuXHRcdFx0aWYgYWJzb2x1dGVcblx0XHRcdFx0cmV0dXJuIE1ldGVvci5hYnNvbHV0ZVVybChcImFwaS9maWxlcy9hdmF0YXJzL1wiICsgc3BhY2VVc2VyU2lnbi5zaWduKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0cmV0dXJuIFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJhcGkvZmlsZXMvYXZhdGFycy9cIiArIHNwYWNlVXNlclNpZ24uc2lnbik7XG4iLCJJbWFnZVNpZ24uaGVscGVycyA9IHtcbiAgc3BhY2VVc2VyU2lnbjogZnVuY3Rpb24odXNlcklkKSB7XG4gICAgdmFyIHNwYWNlLCBzcGFjZVVzZXJTaWduO1xuICAgIHNwYWNlID0gXCJcIjtcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBzcGFjZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5zcGFjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3BhY2UgPSBTZXNzaW9uLmdldChcInNwYWNlSWRcIik7XG4gICAgfVxuICAgIHNwYWNlVXNlclNpZ24gPSBkYi5zcGFjZV91c2VyX3NpZ25zLmZpbmRPbmUoe1xuICAgICAgc3BhY2U6IHNwYWNlLFxuICAgICAgdXNlcjogdXNlcklkXG4gICAgfSk7XG4gICAgcmV0dXJuIHNwYWNlVXNlclNpZ247XG4gIH0sXG4gIGltYWdlVVJMOiBmdW5jdGlvbih1c2VySWQpIHtcbiAgICB2YXIgYWJzb2x1dGUsIHNwYWNlVXNlclNpZ247XG4gICAgc3BhY2VVc2VyU2lnbiA9IEltYWdlU2lnbi5oZWxwZXJzLnNwYWNlVXNlclNpZ24odXNlcklkKTtcbiAgICBhYnNvbHV0ZSA9IGZhbHNlO1xuICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgIGFic29sdXRlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmFic29sdXRlO1xuICAgIH1cbiAgICBpZiAoc3BhY2VVc2VyU2lnbiAhPSBudWxsID8gc3BhY2VVc2VyU2lnbi5zaWduIDogdm9pZCAwKSB7XG4gICAgICBpZiAoYWJzb2x1dGUpIHtcbiAgICAgICAgcmV0dXJuIE1ldGVvci5hYnNvbHV0ZVVybChcImFwaS9maWxlcy9hdmF0YXJzL1wiICsgc3BhY2VVc2VyU2lnbi5zaWduKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBTdGVlZG9zLmFic29sdXRlVXJsKFwiYXBpL2ZpbGVzL2F2YXRhcnMvXCIgKyBzcGFjZVVzZXJTaWduLnNpZ24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsIlRyYWNlc0hhbmRsZXIuaGVscGVycyA9XG5cdHNob3dTaWduSW1hZ2U6IChoYW5kbGVyLCBpc19maW5pc2hlZCwganVkZ2UsIHRyYWNlU2hvd1NpZ25JbWFnZSkgLT5cblx0XHRpZiB0cmFjZVNob3dTaWduSW1hZ2UgPT0gZmFsc2Vcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGlmICFpc19maW5pc2hlZFxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0aWYgWydyZXR1cm5lZCcsICd0ZXJtaW5hdGVkJywgJ3JldHJpZXZlZCddLmluY2x1ZGVzKGp1ZGdlKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0c3BhY2VVc2VyU2lnbiA9IEltYWdlU2lnbi5oZWxwZXJzLnNwYWNlVXNlclNpZ24oaGFuZGxlcilcblxuXHRcdGlmIHNwYWNlVXNlclNpZ24/LnNpZ25cblx0XHRcdHJldHVybiB0cnVlXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0b2JqZWN0VXJsOiAob2JqZWN0X25hbWUsIHJlY29yZF9pZCwgYXBwX2lkKS0+XG5cdFx0cmV0dXJuIENyZWF0b3IuZ2V0T2JqZWN0VXJsKG9iamVjdF9uYW1lLCByZWNvcmRfaWQsIGFwcF9pZCkiLCJUcmFjZXNIYW5kbGVyLmhlbHBlcnMgPSB7XG4gIHNob3dTaWduSW1hZ2U6IGZ1bmN0aW9uKGhhbmRsZXIsIGlzX2ZpbmlzaGVkLCBqdWRnZSwgdHJhY2VTaG93U2lnbkltYWdlKSB7XG4gICAgdmFyIHNwYWNlVXNlclNpZ247XG4gICAgaWYgKHRyYWNlU2hvd1NpZ25JbWFnZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFpc19maW5pc2hlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoWydyZXR1cm5lZCcsICd0ZXJtaW5hdGVkJywgJ3JldHJpZXZlZCddLmluY2x1ZGVzKGp1ZGdlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzcGFjZVVzZXJTaWduID0gSW1hZ2VTaWduLmhlbHBlcnMuc3BhY2VVc2VyU2lnbihoYW5kbGVyKTtcbiAgICBpZiAoc3BhY2VVc2VyU2lnbiAhPSBudWxsID8gc3BhY2VVc2VyU2lnbi5zaWduIDogdm9pZCAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgb2JqZWN0VXJsOiBmdW5jdGlvbihvYmplY3RfbmFtZSwgcmVjb3JkX2lkLCBhcHBfaWQpIHtcbiAgICByZXR1cm4gQ3JlYXRvci5nZXRPYmplY3RVcmwob2JqZWN0X25hbWUsIHJlY29yZF9pZCwgYXBwX2lkKTtcbiAgfVxufTtcbiIsIm1hcmtlZCA9IHJlcXVpcmUoXCJtYXJrZWRcIilcbkluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMgPVxuXHRhcHBsaWNhbnRDb250ZXh0OiAtPlxuXHRcdHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRkYXRhID0ge1xuXHRcdFx0bmFtZTogJ2luc19hcHBsaWNhbnQnLFxuXHRcdFx0YXR0czoge25hbWU6ICdpbnNfYXBwbGljYW50JywgaWQ6ICdpbnNfYXBwbGljYW50JywgY2xhc3M6ICdzZWxlY3RVc2VyIGZvcm0tY29udHJvbCBpbnNfYXBwbGljYW50J30sXG5cdFx0XHR2YWx1ZTogc3RlZWRvc19pbnN0YW5jZS5hcHBsaWNhbnRfbmFtZVxuXHRcdH1cblx0XHRpZiBub3Qgc3RlZWRvc19pbnN0YW5jZSB8fCBzdGVlZG9zX2luc3RhbmNlLnN0YXRlICE9IFwiZHJhZnRcIlxuXHRcdFx0ZGF0YS5hdHRzLmRpc2FibGVkID0gdHJ1ZVxuXHRcdHJldHVybiBkYXRhO1xuXG5cdGluc3RhbmNlSWQ6IC0+XG5cdFx0cmV0dXJuICdpbnN0YW5jZWZvcm0nOyNcImluc3RhbmNlX1wiICsgU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpO1xuXG5cdGZvcm1fdHlwZXM6IC0+XG5cdFx0aWYgQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpXG5cdFx0XHRyZXR1cm4gJ2Rpc2FibGVkJztcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gJ21ldGhvZCc7XG5cblx0c3RlZWRvc19mb3JtOiAtPlxuXHRcdGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG5cdFx0aWYgZm9ybV92ZXJzaW9uXG5cdFx0XHRyZXR1cm4gZm9ybV92ZXJzaW9uXG5cblx0aW5uZXJzdWJmb3JtQ29udGV4dDogKG9iaiktPlxuXHRcdGRvY192YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG5cdFx0b2JqW1widGFibGVWYWx1ZXNcIl0gPSBpZiBkb2NfdmFsdWVzIHRoZW4gZG9jX3ZhbHVlc1tvYmouY29kZV0gZWxzZSBbXVxuXHRcdG9ialtcImZvcm1JZFwiXSA9IFwiaW5zdGFuY2Vmb3JtXCI7XG5cdFx0cmV0dXJuIG9iajtcblxuXHRpbnN0YW5jZTogLT5cblx0XHRTZXNzaW9uLmdldChcImNoYW5nZV9kYXRlXCIpXG5cdFx0aWYgKFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKSlcblx0XHRcdHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRcdHJldHVybiBzdGVlZG9zX2luc3RhbmNlO1xuXG5cdGVtcHR5OiAodmFsKSAtPlxuXHRcdGlmIHZhbFxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0dW5lbXB0eTogKHZhbCkgLT5cblx0XHRpZiB2YWxcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRlcXVhbHM6IChhLCBiKSAtPlxuXHRcdHJldHVybiAoYSA9PSBiKVxuXG5cdHVuZXF1YWxzOiAoYSwgYikgLT5cblx0XHRyZXR1cm4gIShhID09IGIpXG5cblx0aW5jbHVkZXM6IChhLCBiKSAtPlxuXHRcdHJldHVybiBiLnNwbGl0KCcsJykuaW5jbHVkZXMoYSk7XG5cblx0aW5jbHVkZTogKGEsIGIpIC0+XG5cdFx0cmV0dXJuIGIuc3BsaXQoJywnKS5pbmNsdWRlcyhhKTtcblxuXHRmaWVsZHM6IC0+XG5cdFx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcblx0XHRpZiBmb3JtX3ZlcnNpb25cblx0XHRcdHJldHVybiBuZXcgU2ltcGxlU2NoZW1hKFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWEoZm9ybV92ZXJzaW9uKSk7XG5cblx0Zm9ybWF0RGF0ZTogKGRhdGUsIG9wdGlvbnMpLT5cblx0XHRpZiAhZGF0ZVxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0aWYgb3B0aW9ucyAmJiB0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZydcblx0XHRcdG9wdGlvbnMgPSBKU09OLnBhcnNlKG9wdGlvbnMpO1xuXG5cdFx0aWYgIW9wdGlvbnMuZm9ybWF0XG5cdFx0XHRvcHRpb25zID0ge2Zvcm1hdDogXCJZWVlZLU1NLUREIEhIOm1tXCJ9XG5cblx0XHRyZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChvcHRpb25zLmZvcm1hdCk7XG5cblx0dHJhY2VzOiAtPlxuXHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0c3RlZWRvc0RhdGEgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpPy52aWV3Py50ZW1wbGF0ZT8uc3RlZWRvc0RhdGFcblx0XHRcdGluc3RhbmNlID0gc3RlZWRvc0RhdGE/Lmluc3RhbmNlXG5cdFx0XHRmbG93ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEZsb3dWZXJzaW9uKGluc3RhbmNlKTtcblx0XHRcdGxvY2FsZSA9IHN0ZWVkb3NEYXRhPy5sb2NhbGVcblx0XHRcdGlmIGxvY2FsZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09ICd6aC1jbidcblx0XHRcdFx0bG9jYWxlID0gXCJ6aC1DTlwiXG5cdFx0ZWxzZVxuXHRcdFx0aW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblxuXHRcdFx0ZmxvdyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZsb3dWZXJzaW9uKClcblxuXHRcdFx0bG9jYWxlID0gU2Vzc2lvbi5nZXQoXCJUQVBpMThuOjpsb2FkZWRfbGFuZ1wiKVxuXG5cdFx0aWYgIWluc3RhbmNlIHx8ICFmbG93XG5cdFx0XHRyZXR1cm4ge307XG5cblx0XHRzdGVwcyA9IGZsb3cuc3RlcHM7XG5cblx0XHR0cmFjZXMgPSB7fTtcblxuXHRcdGluc3RhbmNlLnRyYWNlcz8uZm9yRWFjaCAodHJhY2UpLT5cblx0XHRcdHN0ZXAgPSBzdGVwcy5maW5kUHJvcGVydHlCeVBLKFwiX2lkXCIsIHRyYWNlLnN0ZXApXG5cblx0XHRcdGFwcHJvdmVzID0gW11cblxuXHRcdFx0dHJhY2UuYXBwcm92ZXM/LmZvckVhY2ggKGFwcHJvdmUpIC0+XG5cdFx0XHRcdGlmIHRyYWNlLmlzX2ZpbmlzaGVkID09IHRydWVcbiMg5bey57uT5p2f55qE5pi+56S65Li65qC45YeGL+mps+Wbni/lj5bmtojnlLPor7dcblx0XHRcdFx0XHRpZiBhcHByb3ZlLmp1ZGdlID09ICdhcHByb3ZlZCdcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgYXBwcm92ZWRcIiwge30sIGxvY2FsZSlcblx0XHRcdFx0XHRlbHNlIGlmIGFwcHJvdmUuanVkZ2UgPT0gJ3JlamVjdGVkJ1xuXHRcdFx0XHRcdFx0anVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSByZWplY3RlZFwiLCB7fSwgbG9jYWxlKVxuXHRcdFx0XHRcdGVsc2UgaWYgYXBwcm92ZS5qdWRnZSA9PSAndGVybWluYXRlZCdcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgdGVybWluYXRlZFwiLCB7fSwgbG9jYWxlKVxuXHRcdFx0XHRcdGVsc2UgaWYgYXBwcm92ZS5qdWRnZSA9PSAncmVhc3NpZ25lZCdcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcmVhc3NpZ25lZFwiLCB7fSwgbG9jYWxlKVxuXHRcdFx0XHRcdGVsc2UgaWYgYXBwcm92ZS5qdWRnZSA9PSAncmVsb2NhdGVkJ1xuXHRcdFx0XHRcdFx0anVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSByZWxvY2F0ZWRcIiwge30sIGxvY2FsZSlcblx0XHRcdFx0XHRlbHNlIGlmIGFwcHJvdmUuanVkZ2UgPT0gJydcblx0XHRcdFx0XHRcdGp1ZGdlX25hbWUgPSBcIlwiXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0anVkZ2VfbmFtZSA9IFwiXCJcblxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0anVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSBwZW5kaW5nXCIsIHt9LCBsb2NhbGUpXG5cblx0XHRcdFx0YXBwcm92ZXMucHVzaFxuXHRcdFx0XHRcdF9pZDogYXBwcm92ZS5faWRcblx0XHRcdFx0XHRoYW5kbGVyOiBhcHByb3ZlLnVzZXJcblx0XHRcdFx0XHRoYW5kbGVyX25hbWU6IGFwcHJvdmUuaGFuZGxlcl9uYW1lXG5cdFx0XHRcdFx0aGFuZGxlcl9vcmdhbml6YXRpb25fbmFtZTogYXBwcm92ZS5oYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lXG5cdFx0XHRcdFx0aGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWU6IGFwcHJvdmUuaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWVcblx0XHRcdFx0XHRmaW5pc2hfZGF0ZTogYXBwcm92ZS5maW5pc2hfZGF0ZVxuXHRcdFx0XHRcdGp1ZGdlOiBhcHByb3ZlLmp1ZGdlXG5cdFx0XHRcdFx0anVkZ2VfbmFtZToganVkZ2VfbmFtZVxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBhcHByb3ZlLmRlc2NyaXB0aW9uXG5cdFx0XHRcdFx0aXNfZmluaXNoZWQ6IGFwcHJvdmUuaXNfZmluaXNoZWRcblx0XHRcdFx0XHR0eXBlOiBhcHByb3ZlLnR5cGVcblx0XHRcdFx0XHRvcGluaW9uX2ZpZWxkc19jb2RlOiBhcHByb3ZlLm9waW5pb25fZmllbGRzX2NvZGVcblx0XHRcdFx0XHRzaWduX2ZpZWxkX2NvZGU6IGFwcHJvdmUuc2lnbl9maWVsZF9jb2RlXG5cdFx0XHRcdFx0aXNfcmVhZDogYXBwcm92ZS5pc19yZWFkXG5cdFx0XHRcdFx0c2lnbl9zaG93OiBhcHByb3ZlLnNpZ25fc2hvd1xuXG5cblx0XHRcdGlmIHN0ZXBcblx0XHRcdFx0aWYgc3RlcC5uYW1lIG9mIHRyYWNlc1xuXHRcdFx0XHRcdHRyYWNlc1tzdGVwLm5hbWVdID0gdHJhY2VzW3N0ZXAubmFtZV0uY29uY2F0KGFwcHJvdmVzKVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dHJhY2VzW3N0ZXAubmFtZV0gPSBhcHByb3Zlc1xuXG5cdFx0cmV0dXJuIHRyYWNlcztcblxuXG5cblx0ZG9jX3ZhbHVlczogLT5cblx0XHRXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG5cblx0aW5zdGFuY2VfYm94X3N0eWxlOiAtPlxuXHRcdGJveCA9IFNlc3Npb24uZ2V0KFwiYm94XCIpXG5cdFx0aWYgYm94ID09IFwiaW5ib3hcIiB8fCBib3ggPT0gXCJkcmFmdFwiXG5cdFx0XHRqdWRnZSA9IFNlc3Npb24uZ2V0KFwianVkZ2VcIilcblx0XHRcdGlmIGp1ZGdlXG5cdFx0XHRcdGlmIChqdWRnZSA9PSBcImFwcHJvdmVkXCIpXG5cdFx0XHRcdFx0cmV0dXJuIFwiYm94LXN1Y2Nlc3NcIlxuXHRcdFx0XHRlbHNlIGlmIChqdWRnZSA9PSBcInJlamVjdGVkXCIpXG5cdFx0XHRcdFx0cmV0dXJuIFwiYm94LWRhbmdlclwiXG5cdFx0aW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgaW5zICYmIGlucy5maW5hbF9kZWNpc2lvblxuXHRcdFx0aWYgaW5zLmZpbmFsX2RlY2lzaW9uID09IFwiYXBwcm92ZWRcIlxuXHRcdFx0XHRyZXR1cm4gXCJib3gtc3VjY2Vzc1wiXG5cdFx0XHRlbHNlIGlmIChpbnMuZmluYWxfZGVjaXNpb24gPT0gXCJyZWplY3RlZFwiKVxuXHRcdFx0XHRyZXR1cm4gXCJib3gtZGFuZ2VyXCJcblxuI2lzX2Rpc2FibGVkOiAtPlxuIyAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiMgICAgaWYgIWluc1xuIyAgICAgICAgcmV0dXJuO1xuIyAgICBpZiBpbnMuc3RhdGUhPVwiZHJhZnRcIlxuIyAgICAgICAgcmV0dXJuIFwiZGlzYWJsZWRcIjtcbiMgICAgcmV0dXJuO1xuXG5cdHRhYmxlX2ZpZWxkczogKGluc3RhbmNlKS0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuXHRcdGVsc2Vcblx0XHRcdGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRGb3JtVmVyc2lvbihpbnN0YW5jZS5mb3JtLCBpbnN0YW5jZS5mb3JtX3ZlcnNpb24pXG5cdFx0aWYgZm9ybV92ZXJzaW9uXG5cdFx0XHRmaWVsZHMgPSBfLmNsb25lKGZvcm1fdmVyc2lvbi5maWVsZHMpO1xuXG5cdFx0XHRmaWVsZHMuZm9yRWFjaCAoZmllbGQsIGluZGV4KSAtPlxuXHRcdFx0XHRmaWVsZC50cl9zdGFydCA9IFwiXCI7XG5cdFx0XHRcdGZpZWxkLnRyX2VuZCA9IFwiXCI7XG5cdFx0XHRcdHRkX2NvbHNwYW4gPSAxO1xuI1x0XHRcdFx05by65Yi26K6+572u5qCH5aS05a2X5q615Li65a695a2X5q61XG5cdFx0XHRcdGlmIENvcmVGb3JtPy5wYWdlVGl0bGVGaWVsZE5hbWUgPT0gZmllbGQuY29kZVxuXHRcdFx0XHRcdGZpZWxkLmlzX3dpZGUgPSB0cnVlXG5cblx0XHRcdFx0aWYgZmllbGQuZm9ybXVsYSAmJiBmaWVsZC50eXBlICE9ICdvZGF0YSdcblx0XHRcdFx0XHRmaWVsZC5wZXJtaXNzaW9uID0gXCJyZWFkb25seVwiO1xuXG5cdFx0XHRcdGlmIFN0ZWVkb3MuaXNNb2JpbGUoKVxuIyDlpoLmnpzlvZPliY3lrZfmrrXmmK/liIbnu4TjgIHooajmoLzjgIHlrr3lrZfmrrVcblx0XHRcdFx0XHRpZiBmaWVsZC50eXBlID09ICdzZWN0aW9uJyB8fCBmaWVsZC50eXBlID09ICd0YWJsZSdcblx0XHRcdFx0XHRcdGZpZWxkLnRkX2NvbHNwYW4gPSA0O1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGZpZWxkLnRkX2NvbHNwYW4gPSAzO1xuXG5cdFx0XHRcdFx0aWYgaW5kZXggIT0gMFxuXHRcdFx0XHRcdFx0ZmllbGQudHJfc3RhcnQgPSBcIjx0cj5cIjtcblx0XHRcdFx0XHRcdGZpZWxkLnRyX2VuZCA9IFwiPC90cj5cIjtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHByZV9maWVsZHMgPSBmaWVsZHMuc2xpY2UoMCwgaW5kZXgpO1xuXG5cdFx0XHRcdFx0cHJlX3dpZGVfZmllbGRzID0gcHJlX2ZpZWxkcy5maWx0ZXJQcm9wZXJ0eShcImlzX3dpZGVcIiwgdHJ1ZSk7XG5cblx0XHRcdFx0XHR0cl9zdGFydCA9IFwiXCI7XG5cblx0XHRcdFx0XHR0cl9lbmQgPSBcIlwiO1xuXG5cdFx0XHRcdFx0IyDlhYjorqHnrpflvZPliY3lrZfmrrXmmK/lkKbkuLrlrr3lrZfmrrVcblx0XHRcdFx0XHRiZWZvcmVfZmllbGQgPSBudWxsO1xuXHRcdFx0XHRcdGFmdGVyX2ZpZWxkID0gbnVsbDtcblxuXHRcdFx0XHRcdGlmIGluZGV4ID4gMFxuXHRcdFx0XHRcdFx0YmVmb3JlX2ZpZWxkID0gZmllbGRzW2luZGV4IC0gMV1cblxuXHRcdFx0XHRcdGlmIGluZGV4IDwgZmllbGRzLmxlbmd0aCAtIDFcblx0XHRcdFx0XHRcdGFmdGVyX2ZpZWxkID0gZmllbGRzW2luZGV4ICsgMV1cblxuXHRcdFx0XHRcdCMg5aaC5p6c5b2T5YmN5a2X5q615piv5YiG57uE44CB6KGo5qC844CB5a695a2X5q61XG5cdFx0XHRcdFx0aWYgZmllbGQudHlwZSA9PSAnc2VjdGlvbicgfHwgZmllbGQudHlwZSA9PSAndGFibGUnXG5cdFx0XHRcdFx0XHR0ZF9jb2xzcGFuID0gNDtcblx0XHRcdFx0XHRlbHNlIGlmIGZpZWxkLmlzX3dpZGVcblx0XHRcdFx0XHRcdHRkX2NvbHNwYW4gPSAzO1xuXHRcdFx0XHRcdGVsc2VcbiMg5YmN5ZCO6YO95piv5a695a2X5q61XG5cdFx0XHRcdFx0XHRpZiBiZWZvcmVfZmllbGQgJiYgYWZ0ZXJfZmllbGQgJiYgYmVmb3JlX2ZpZWxkLmlzX3dpZGUgJiYgYWZ0ZXJfZmllbGQuaXNfd2lkZVxuXHRcdFx0XHRcdFx0XHRmaWVsZC5pc193aWRlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0dGRfY29sc3BhbiA9IDM7XG5cblx0XHRcdFx0XHRcdCMg5b2T5YmN5pivdHIg5LiL55qEIOesrOS4gOS4qnRkICYg5ZCO6L6555qE5a2X5q615piv5a695a2X5q61XG5cdFx0XHRcdFx0XHRpZiAocHJlX2ZpZWxkcy5sZW5ndGggKyBwcmVfd2lkZV9maWVsZHMubGVuZ3RoKSAlIDIgPT0gMCAmJiBhZnRlcl9maWVsZCAmJiBhZnRlcl9maWVsZC5pc193aWRlXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmlzX3dpZGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR0ZF9jb2xzcGFuID0gMztcblxuXHRcdFx0XHRcdFx0IyDlvZPliY3mmK90ciDkuIvnmoQg56ys5LiA5LiqdGQgJiDlvZPliY3lrZfmrrXmmK/mnIDlkI7kuIDkuKrlrZfmrrVcblx0XHRcdFx0XHRcdGlmIChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiA9PSAwICYmIGFmdGVyX2ZpZWxkID09IG51bGxcblx0XHRcdFx0XHRcdFx0ZmllbGQuaXNfd2lkZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHRkX2NvbHNwYW4gPSAzO1xuXG5cdFx0XHRcdFx0ZmllbGQudGRfY29sc3BhbiA9IHRkX2NvbHNwYW47XG5cblxuXHRcdFx0XHRcdGlmIGluZGV4ID09IDBcbiMgdHJfc3RhcnQgPSBcIjx0cj5cIjsg55Sx5LqOVGVtcGxhdGXnmoTnvJbor5FidWfvvIzlr7zoh7Tmr4/mrKHnu5nkuIDkuKp0cuW8gOWni+aXtu+8jOS8muiHquWKqOihpeWktOaIluihpeWwvuOAguWboOatpOWcqOesrOS4gOihjOi/lOWbnuS4gOS4quepuuWtl+espuS4si5cblx0XHRcdFx0XHRcdHRyX3N0YXJ0ID0gXCI8dHI+XCI7XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0aWYgKHByZV9maWVsZHMubGVuZ3RoICsgcHJlX3dpZGVfZmllbGRzLmxlbmd0aCkgJSAyID09IDAgfHwgZmllbGQuaXNfd2lkZVxuXHRcdFx0XHRcdFx0XHRpZiBmaWVsZC50eXBlID09ICd0YWJsZSdcblx0XHRcdFx0XHRcdFx0XHR0cl9zdGFydCA9IFwiPHRyIGNsYXNzID0gXFxcInRyLWNoaWxkLXRhYmxlXFxcIj5cIjtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHRyX3N0YXJ0ID0gXCI8dHI+XCI7XG5cblx0XHRcdFx0XHRmaWVsZC50cl9zdGFydCA9IHRyX3N0YXJ0O1xuXG5cblx0XHRcdFx0XHRpZiBpbmRleCArIDEgPT0gZmllbGRzLmxlbmd0aCB8fCBmaWVsZC50eXBlID09ICdzZWN0aW9uJyB8fCBmaWVsZC50eXBlID09ICd0YWJsZScgfHwgZmllbGQuaXNfd2lkZVxuXHRcdFx0XHRcdFx0dHJfZW5kID0gXCI8L3RyPlwiO1xuXG5cdFx0XHRcdFx0aWYgKHByZV9maWVsZHMubGVuZ3RoICsgcHJlX3dpZGVfZmllbGRzLmxlbmd0aCkgJSAyICE9IDBcblx0XHRcdFx0XHRcdHRyX2VuZCA9IFwiPC90cj5cIjtcblxuXHRcdFx0XHRcdGZpZWxkLnRyX2VuZCA9IHRyX2VuZDtcblxuXHRcdFx0cmV0dXJuIGZpZWxkcztcblxuXHRzb3J0X2FwcHJvdmU6IChhcHByb3Zlcywgb3JkZXIpLT5cblx0XHRpZiAhYXBwcm92ZXNcblx0XHRcdHJldHVybiBbXVxuXG5cdFx0aWYgIWFwcHJvdmVzIGluc3RhbmNlb2YgQXJyYXlcblx0XHRcdHJldHVybiBbXVxuXHRcdGVsc2Vcblx0XHRcdGlmIG9yZGVyID09ICdkZXNjJ1xuXHRcdFx0XHRhcHByb3Zlcy5zb3J0IChwMSwgcDIpIC0+XG5cdFx0XHRcdFx0X3AxID0gMFxuXHRcdFx0XHRcdF9wMiA9IDBcblxuXHRcdFx0XHRcdGlmIHAxLmZpbmlzaF9kYXRlXG5cdFx0XHRcdFx0XHRfcDEgPSBwMS5maW5pc2hfZGF0ZS5nZXRUaW1lKClcblxuXHRcdFx0XHRcdGlmIHAyLmZpbmlzaF9kYXRlXG5cdFx0XHRcdFx0XHRfcDIgPSBwMi5maW5pc2hfZGF0ZS5nZXRUaW1lKCk7XG5cblx0XHRcdFx0XHRyZXR1cm4gX3AyIC0gX3AxXG5cdFx0XHRlbHNlXG5cdFx0XHRcdGFwcHJvdmVzLnNvcnQgKHAxLCBwMikgLT5cblx0XHRcdFx0XHRfcDEgPSAwXG5cdFx0XHRcdFx0X3AyID0gMFxuXG5cdFx0XHRcdFx0aWYgcDEuZmluaXNoX2RhdGVcblx0XHRcdFx0XHRcdF9wMSA9IHAxLmZpbmlzaF9kYXRlLmdldFRpbWUoKVxuXG5cdFx0XHRcdFx0aWYgcDIuZmluaXNoX2RhdGVcblx0XHRcdFx0XHRcdF9wMiA9IHAyLmZpbmlzaF9kYXRlLmdldFRpbWUoKTtcblxuXHRcdFx0XHRcdHJldHVybiBfcDEgLSBfcDJcblx0XHRyZXR1cm4gYXBwcm92ZXNcblxuXHRfdDogKGtleSktPlxuXHRcdHJldHVybiBUQVBpMThuLl9fKGtleSlcblx0Z2V0RmllbGQ6IChjb2RlKS0+XG5cdFx0Zm9ybV92ZXJzaW9uID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvblxuXHRcdGlmIGZvcm1fdmVyc2lvblxuXHRcdFx0cmV0dXJuIGZvcm1fdmVyc2lvbi5maWVsZHMuZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgY29kZSlcblxuXHRnZXRWYWx1ZTogKGNvZGUpLT5cblx0XHRpbnN0YW5jZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5pbnN0YW5jZVxuXG5cdFx0Zm9ybV92ZXJzaW9uID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvblxuXG5cdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXG5cdFx0dXRjT2Zmc2V0ID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLnV0Y09mZnNldFxuXG5cdFx0dmFsdWVzID0gaW5zdGFuY2UudmFsdWVzIHx8IHt9XG5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdHZhbHVlcyA9IFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWFWYWx1ZXMoKVxuXG5cdFx0cmV0dXJuIEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRWYWx1ZSB2YWx1ZXNbY29kZV0sIGZvcm1fdmVyc2lvbi5maWVsZHMuZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgY29kZSksIGxvY2FsZSwgdXRjT2Zmc2V0XG5cblx0Z2V0TGFiZWw6IChjb2RlKS0+XG5cdFx0Zm9ybV92ZXJzaW9uID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvblxuXHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRMYWJlbCBmb3JtX3ZlcnNpb24uZmllbGRzLCBjb2RlXG5cblx0aXNUZXh0YXJlYTogKGZpZWxkKS0+XG5cdFx0aWYgZmllbGQ/LnR5cGUgPT0gXCJpbnB1dFwiICYmIGZpZWxkPy5pc190ZXh0YXJlYVxuXHRcdFx0cmV0dXJuIHRydWVcblxuXHRnZXRDZkNsYXNzOiAoZmllbGQpLT5cblx0XHRpZiBmaWVsZD8udHlwZSA9PSBcImlucHV0XCIgJiYgZmllbGQ/LmlzX3RleHRhcmVhXG5cdFx0XHRyZXR1cm4gXCJjZlRleHRhcmVhXCJcblxuXHRnZXRUYWJsZVRoZWFkOiAoZmllbGQpLT5cblx0XHRyZXR1cm4gU3RlZWRvc1RhYmxlLmdldFRoZWFkKGZpZWxkLCBmYWxzZSlcblxuXHRnZXRUYWJsZUJvZHk6IChmaWVsZCktPlxuXG5cdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRpbnN0YW5jZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5pbnN0YW5jZVxuXHRcdFx0dmFsdWVzID0gaW5zdGFuY2UudmFsdWVzIHx8IHt9XG5cdFx0ZWxzZVxuXHRcdFx0dmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpXG5cblx0XHR0YWJsZVZhbHVlID0gdmFsdWVzW2ZpZWxkLmNvZGVdO1xuXHRcdHJldHVybiBTdGVlZG9zVGFibGUuZ2V0VGJvZHkoZmllbGQuc2ZpZWxkcy5nZXRQcm9wZXJ0eShcImNvZGVcIiksIGZpZWxkLCB0YWJsZVZhbHVlLCBmYWxzZSlcblxuXHRzaG93TGFiZWw6IChmaWVsZCktPlxuXHRcdHRlbXBsYXRlRGF0YSA9IFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YVxuXHRcdGlmIHRlbXBsYXRlRGF0YS5sYWJlbCA9PSBmYWxzZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0cmV0dXJuIHRydWVcblxuI1x0YWZGaWVsZExhYmVsVGV4dDogKG9wKS0+XG4jXHRcdGlmICFUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGFcbiNcdFx0XHRyZXR1cm4gQXV0b0Zvcm0uZ2V0TGFiZWxGb3JGaWVsZChvcC5uYW1lKVxuI1x0XHRlbHNlXG4jXHRcdFx0Zm9ybV92ZXJzaW9uID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvblxuI1x0XHRcdEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRMYWJlbCBmb3JtX3ZlcnNpb24uZmllbGRzLCBvcD8uaGFzaD8ubmFtZVxuXG5cdGlzT3BpbmlvbkZpZWxkOiAoZmllbGQpLT5cblx0XHRyZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZC5mb3JtdWxhKVxuXG5cdGlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nOiAoZmllbGRfZm9ybXVsYSktPlxuXHRcdHJldHVybiBJbnN0YW5jZVNpZ25UZXh0LmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkX2Zvcm11bGEpXG5cblx0aW5jbHVkZXNPcGluaW9uRmllbGQ6IChmb3JtLCBmb3JtX3ZlcnNpb24pLT5cblxuXHRcdGZpZWxkX2Zvcm11bGFzID0gbmV3IEFycmF5KCk7XG5cblx0XHRmaWVsZHMgPSBkYi5mb3JtX3ZlcnNpb25zLmZpbmRPbmUoe19pZDogZm9ybV92ZXJzaW9uLCBmb3JtOiBmb3JtfSk/LmZpZWxkcyB8fCBbXVxuXG5cdFx0ZmllbGRzLmZvckVhY2ggKGYpLT5cblx0XHRcdGlmIGYudHlwZSA9PSAndGFibGUnXG5cdFx0XHRcdGNvbnNvbGUubG9nICdpZ25vcmUgb3BpbmlvbiBmaWVsZCBpbiB0YWJsZSdcblx0XHRcdGVsc2UgaWYgZi50eXBlID09ICdzZWN0aW9uJ1xuXHRcdFx0XHRmPy5maWVsZHM/LmZvckVhY2ggKGYxKS0+XG5cdFx0XHRcdFx0ZmllbGRfZm9ybXVsYXMucHVzaCBmMS5mb3JtdWxhXG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZpZWxkX2Zvcm11bGFzLnB1c2ggZi5mb3JtdWxhXG5cblx0XHRfLnNvbWUgZmllbGRfZm9ybXVsYXMsIChmaWVsZF9mb3JtdWxhKS0+XG5cdFx0XHRyZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZF9mb3JtdWxhKVxuXG5cdGdldE9waW5pb25GaWVsZFN0ZXBzTmFtZTogKGZpZWxkX2Zvcm11bGEsIHRvcF9rZXl3b3JkcyktPlxuXG5cdFx0b3BpbmlvbkZpZWxkcyA9IG5ldyBBcnJheSgpO1xuI1x0XHRjb25zb2xlLmxvZyhcImZpZWxkX2Zvcm11bGFcIiwgZmllbGRfZm9ybXVsYSlcblx0XHRpZiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzT3BpbmlvbkZpZWxkX2Zyb21fc3RyaW5nKGZpZWxkX2Zvcm11bGEpXG5cdFx0XHRpZiBmaWVsZF9mb3JtdWxhXG5cbiNcdFx0XHRcdGZvbzEgPSBmaWVsZF9mb3JtdWxhLnNwbGl0KFwiLFwiKVxuXHRcdFx0XHRmb28xID0gZmllbGRfZm9ybXVsYS5zcGxpdChcIjtcIilcblxuI1x0XHRcdFx0aWYgdG9wX2tleXdvcmRzXG4jXHRcdFx0XHRcdGZvbzEgPSBmaWVsZF9mb3JtdWxhLnNwbGl0KFwiO1wiKVxuXG5cdFx0XHRcdGZvbzEuZm9yRWFjaCAoZm9vKS0+XG5cdFx0XHRcdFx0anNvbl9mb3JtdWxhID0ge31cblxuXHRcdFx0XHRcdHRyeVxuXHRcdFx0XHRcdFx0anNvbl9mb3JtdWxhID0gZXZhbChcIihcIiArIGZvbyArIFwiKVwiKVxuXHRcdFx0XHRcdGNhdGNoXG5cdFx0XHRcdFx0XHRqc29uX2Zvcm11bGEgPSB7fVxuXG5cdFx0XHRcdFx0aWYganNvbl9mb3JtdWxhPy55aWppYW5sYW5cblx0XHRcdFx0XHRcdHNmID0ge31cblxuXHRcdFx0XHRcdFx0c2Yuc3RlcE5hbWUgPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLnN0ZXBcblxuXHRcdFx0XHRcdFx0c2YuaW1hZ2Vfc2lnbiA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4uaW1hZ2Vfc2lnbiB8fCBmYWxzZVxuXG5cdFx0XHRcdFx0XHRzZi5vbmx5X2NjX29waW5pb24gPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLm9ubHlfY2MgfHwgZmFsc2VcblxuXHRcdFx0XHRcdFx0c2YuZGVmYXVsdF9kZXNjcmlwdGlvbiA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4uZGVmYXVsdFxuXG5cdFx0XHRcdFx0XHRzZi5vbmx5X2hhbmRsZXIgPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLm9ubHlfaGFuZGxlclxuXG5cdFx0XHRcdFx0XHRzZi50b3Bfa2V5d29yZHMgPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLnRvcF9rZXl3b3JkcyB8fCB0b3Bfa2V5d29yZHNcblxuXHRcdFx0XHRcdFx0b3BpbmlvbkZpZWxkcy5wdXNoKHNmKTtcblxuXHRcdFx0XHRcdGVsc2UgaWYoZmllbGRfZm9ybXVsYT8uaW5kZXhPZihcInt0cmFjZXMuXCIpID4gLTEgfHwgZmllbGRfZm9ybXVsYT8uaW5kZXhPZihcIntzaWduYXR1cmUudHJhY2VzLlwiKSA+IC0xKVxuXG5cdFx0XHRcdFx0XHRzZiA9IHtvbmx5X2NjX29waW5pb246IGZhbHNlLCBpbWFnZV9zaWduOiBmYWxzZSwgdG9wX2tleXdvcmRzOiB0b3Bfa2V5d29yZHN9XG5cblx0XHRcdFx0XHRcdGlmIGZvby5pbmRleE9mKFwie3NpZ25hdHVyZS5cIikgPiAtMVxuXHRcdFx0XHRcdFx0XHRzZi5pbWFnZV9zaWduID0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHRmb28gPSBmb28ucmVwbGFjZShcIntzaWduYXR1cmUuXCIsXCJcIik7XG5cblx0XHRcdFx0XHRcdHMxID0gZm9vLnJlcGxhY2UoXCJ7XCIsXCJcIikucmVwbGFjZShcIn1cIixcIlwiKVxuXHRcdFx0XHRcdFx0aWYgczEuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDFcblx0XHRcdFx0XHRcdFx0c2Yuc3RlcE5hbWUgPSBzMS5zcGxpdChcIi5cIilbMV1cblx0XHRcdFx0XHRcdFx0aWYgb3BpbmlvbkZpZWxkcy5maWx0ZXJQcm9wZXJ0eShcInN0ZXBOYW1lXCIsc2Yuc3RlcE5hbWUpLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdFx0XHRvcGluaW9uRmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJzdGVwTmFtZVwiLCBzZi5zdGVwTmFtZSk/Lm9ubHlfY2Nfb3BpbmlvbiA9IHRydWVcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdGlmIHMxLnNwbGl0KFwiLlwiKS5sZW5ndGggPiAyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiBzMS5zcGxpdChcIi5cIilbMl0/LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gJ2NjJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzZi5vbmx5X2NjX29waW5pb24gPSB0cnVlXG5cdFx0XHRcdFx0XHRvcGluaW9uRmllbGRzLnB1c2goc2YpO1xuXG5cdFx0cmV0dXJuIG9waW5pb25GaWVsZHNcblxuXHRzaG93Q0NPcGluaW9uOiAoZmllbGQpLT5cblx0XHRpZiBmaWVsZC5mb3JtdWxhPy5pbmRleE9mKFwie3RyYWNlcy5cIikgPiAtMSB8fCBmaWVsZC5mb3JtdWxhPy5pbmRleE9mKFwie3NpZ25hdHVyZS50cmFjZXMuXCIpID4gLTFcblx0XHRcdHMxID0gZmllbGQuZm9ybXVsYS5yZXBsYWNlKFwie3NpZ25hdHVyZS5cIixcIlwiKS5yZXBsYWNlKFwie1wiLFwiXCIpLnJlcGxhY2UoXCJ9XCIsXCJcIilcblx0XHRcdGlmIHMxLnNwbGl0KFwiLlwiKS5sZW5ndGggPiAyXG5cdFx0XHRcdGlmIHMxLnNwbGl0KFwiLlwiKVsyXT8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnY2MnXG5cdFx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRyZXR1cm4gZmFsc2VcblxuXHRtYXJrRG93blRvSHRtbDogKG1hcmtEb3duU3RyaW5nKS0+XG5cdFx0aWYgbWFya0Rvd25TdHJpbmdcblx0XHRcdCMgcmVuZGVyZXIgPSBuZXcgTWFya2Rvd24uUmVuZGVyZXIoKTtcblx0XHRcdCMgcmVuZGVyZXIubGluayA9ICggaHJlZiwgdGl0bGUsIHRleHQgKSAtPlxuXHRcdFx0IyBcdHJldHVybiBcIjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPScje2hyZWZ9JyB0aXRsZT0nI3t0aXRsZX0nPiN7dGV4dH08L2E+XCJcblx0XHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0XHRtYXJrZWQgPSBOcG0ucmVxdWlyZSgnbWFya2VkJylcblx0XHRcdHJldHVybiBTcGFjZWJhcnMuU2FmZVN0cmluZyhtYXJrZWQucGFyc2UobWFya0Rvd25TdHJpbmcpKVxuXG5cdGZfbGFiZWw6ICh0aGF0KS0+XG5cdFx0cmV0dXJuIHRoYXQubmFtZSB8fCB0aGF0LmNvZGVcblxuaWYgTWV0ZW9yLmlzU2VydmVyXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuc3RlZWRvc19mb3JtID0gLT5cblx0XHRyZXR1cm4gdGhpcy5mb3JtX3ZlcnNpb25cblxuXHRJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmlzU2VjdGlvbiA9IChjb2RlKS0+XG5cdFx0Zm9ybV92ZXJzaW9uID0gdGhpcy5mb3JtX3ZlcnNpb25cblx0XHRyZXR1cm4gZm9ybV92ZXJzaW9uLmZpZWxkcy5maW5kUHJvcGVydHlCeVBLKFwiY29kZVwiLCBjb2RlKS50eXBlID09ICdzZWN0aW9uJ1xuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZG9jX3ZhbHVlcyA9IC0+XG5cdFx0aW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlO1xuXHRcdHJldHVybiBpbnN0YW5jZS52YWx1ZXM7XG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5hcHBsaWNhbnRDb250ZXh0ID0gLT5cblx0XHRpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2U7XG5cdFx0ZGF0YSA9IHtcblx0XHRcdG5hbWU6ICdpbnNfYXBwbGljYW50Jyxcblx0XHRcdGF0dHM6IHtuYW1lOiAnaW5zX2FwcGxpY2FudCcsIGlkOiAnaW5zX2FwcGxpY2FudCcsIGNsYXNzOiAnc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCd9LFxuXHRcdFx0dmFsdWU6IGluc3RhbmNlLmFwcGxpY2FudF9uYW1lXG5cdFx0fVxuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaW5zdGFuY2UgPSAtPlxuXHRcdHJldHVybiB0aGlzLmluc3RhbmNlXG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5maWVsZHMgPSAtPlxuXHRcdGZvcm1fdmVyc2lvbiA9IHRoaXMuZm9ybV92ZXJzaW9uXG5cdFx0aWYgZm9ybV92ZXJzaW9uXG5cdFx0XHRyZXR1cm4gbmV3IFNpbXBsZVNjaGVtYShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hKGZvcm1fdmVyc2lvbikpO1xuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZm9ybV90eXBlcyA9IC0+XG5cdFx0cmV0dXJuIFwiZGlzYWJsZWRcIlxuXG5cdFRlbXBsYXRlLnJlZ2lzdGVySGVscGVyIFwiYWZGaWVsZExhYmVsVGV4dFwiLCAob3ApLT5cblx0XHRmb3JtX3ZlcnNpb24gPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uXG5cdFx0SW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldExhYmVsIGZvcm1fdmVyc2lvbi5maWVsZHMsIG9wPy5oYXNoPy5uYW1lXG5cblx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5fdCA9IChrZXkpLT5cblx0XHRsb2NhbGUgPSB0aGlzLmxvY2FsZVxuXG5cdFx0cmV0dXJuIFRBUGkxOG4uX18oa2V5LCB7fSwgbG9jYWxlKVxuXG5cdEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaW5zX2F0dGFjaF9kb3dubG9hZF91cmwgPSAoX2lkLCBhYnNvbHV0ZSktPlxuXHRcdGlmIGFic29sdXRlXG5cdFx0XHRyZXR1cm4gTWV0ZW9yLmFic29sdXRlVXJsKFwiL2FwaS9maWxlcy9pbnN0YW5jZXMvI3tfaWR9P2Rvd25sb2FkPXRydWVcIik7XG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIFwiL2FwaS9maWxlcy9pbnN0YW5jZXMvI3tfaWR9P2Rvd25sb2FkPXRydWVcIjtcblxuXHRJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLm9wdGlvbnMgPSAoZmllbGQpLT5cblx0XHRvcHRpb25zID0gZmllbGQ/Lm9wdGlvbnM/LnNwbGl0KFwiXFxuXCIpXG5cdFx0cmV2ID0gW11cblx0XHRvcHRpb25zPy5mb3JFYWNoIChpdGVtKS0+XG5cdFx0XHRyZXYucHVzaCh7bGFiZWw6IGl0ZW0sIHZhbHVlOiBpdGVtfSlcblxuXHRcdHJldHVybiByZXZcblxuXHRJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmdldFBlcm1pc3Npb25zID0gKGNvZGUpLT5cblx0XHRpZiAhVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLnN0YXJ0U3RlcEVkaXRhYmxlRmllbGRzPy5pbmNsdWRlcyhjb2RlKVxuXHRcdFx0cmV0dXJuIFwicmVhZG9ubHkgZGlzYWJsZWRcIlxuXHRcdHJldHVybiBcIlwiXG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLmV2ZW50cyA9XG5cdCdjaGFuZ2UgLmZvcm0tY29udHJvbCwuY2hlY2tib3ggaW5wdXQsLmFmLXJhZGlvLWdyb3VwIGlucHV0LC5hZi1jaGVja2JveC1ncm91cCBpbnB1dCc6IChldmVudCktPlxuXHRcdEluc3RhbmNlTWFuYWdlci5pbnN0YW5jZWZvcm1DaGFuZ2VFdmVudChldmVudClcblxuXHQndHlwZWFoZWFkOmNoYW5nZSAuZm9ybS1jb250cm9sJzogKGV2ZW50KSAtPlxuXHRcdEluc3RhbmNlTWFuYWdlci5pbnN0YW5jZWZvcm1DaGFuZ2VFdmVudChldmVudClcblxuXHQnY2xpY2sgLmNmVGV4dGFyZWEgYSc6IChldmVudCktPlxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0U3RlZWRvcy5vcGVuV2luZG93KGV2ZW50LnRhcmdldC5ocmVmKTtcblxuXG5JbnN0YW5jZWZvcm1UZW1wbGF0ZS5vbkNyZWF0ZWQgPSAoKS0+XG5cdGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdGlmICFpbnN0YW5jZVxuXHRcdHJldHVybjtcblxuXHR0ZW1wbGF0ZSA9IFRlbXBsYXRlTWFuYWdlci5nZXRUZW1wbGF0ZShpbnN0YW5jZSk7XG5cblx0dHJ5XG5cdFx0Y29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHRlbXBsYXRlLCB7aXNCb2R5OiB0cnVlfSk7XG5cdGNhdGNoIGVcblx0XHRjb25zb2xlLmxvZyBcIkluc3RhbmNlIFRlbXBsYXRlIEVycm9yXCIsIGVcblx0XHRjb21waWxlZCA9IFNwYWNlYmFyc0NvbXBpbGVyLmNvbXBpbGUoXCJcIiwge2lzQm9keTogdHJ1ZX0pO1xuXG5cblx0cmVuZGVyRnVuY3Rpb24gPSBldmFsKGNvbXBpbGVkKTtcblxuXHRpbnN0YW5jZVZpZXcgPSBuZXcgQmxhemUuVmlldyhcImN1c3RvbV9pbnN0YW5jZV90ZW1wbGF0ZVwiLCByZW5kZXJGdW5jdGlvbik7XG5cblx0aW5zdGFuY2VDdXN0b21UZW1wbGF0ZSA9IG5ldyBCbGF6ZS5UZW1wbGF0ZShpbnN0YW5jZVZpZXcubmFtZSwgcmVuZGVyRnVuY3Rpb24pO1xuXG5cdFRlbXBsYXRlLmluc3RhbmNlX2N1c3RvbV90ZW1wbGF0ZSA9IGluc3RhbmNlQ3VzdG9tVGVtcGxhdGVcblxuXHRUZW1wbGF0ZS5pbnN0YW5jZV9jdXN0b21fdGVtcGxhdGUuaGVscGVycyBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzXG5cblxuXG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLm9uUmVuZGVyZWQgPSAoKS0+XG5cdCMgdCA9IHRoaXM7XG5cblx0I3Quc3Vic2NyaWJlIFwiaW5zdGFuY2VfZGF0YVwiLCBTZXNzaW9uLmdldChcImluc3RhbmNlSWRcIiksIC0+XG5cdCMgICAgVHJhY2tlci5hZnRlckZsdXNoIC0+XG5cdGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdGlmICFpbnN0YW5jZVxuXHRcdHJldHVybjtcblxuXHQjJChcIiNpbnNfYXBwbGljYW50XCIpLnNlbGVjdDIoKS52YWwoaW5zdGFuY2UuYXBwbGljYW50KS50cmlnZ2VyKCdjaGFuZ2UnKTtcblx0IyQoXCIjaW5zX2FwcGxpY2FudFwiKS52YWwoaW5zdGFuY2UuYXBwbGljYW50KTtcblx0SW5zdGFuY2VNYW5hZ2VyLnNldEluc3RhbmNlRm9ybUFwcGxpY2FudChpbnN0YW5jZS5hcHBsaWNhbnQsIGluc3RhbmNlLmFwcGxpY2FudF9uYW1lKVxuXG5cblx0QXBwcm92ZU1hbmFnZXIuZXJyb3IgPSB7bmV4dFN0ZXBzOiAnJywgbmV4dFN0ZXBVc2VyczogJyd9O1xuXG5cdCMgaW5zdGFuY2UgZnJvbee7keWumuS6i+S7tlxuXHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnIHx8IFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdkcmFmdCdcblx0XHRJbnN0YW5jZUV2ZW50LmluaXRFdmVudHMoaW5zdGFuY2UuZmxvdyk7XG5cblx0aWYgIUFwcHJvdmVNYW5hZ2VyLmlzUmVhZE9ubHkoKVxuXG5cdFx0Y3VycmVudEFwcHJvdmUgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudEFwcHJvdmUoKTtcblxuXG5cdFx0aW5zdGFuY2VOdW1iZXJGaWVsZHMgPSAkKFwiW2RhdGEtZm9ybXVsYV1cIiwgJChcIiNpbnN0YW5jZWZvcm1cIikpXG5cblx0XHRpbnN0YW5jZU51bWJlckZpZWxkcy5lYWNoICgpLT5cblx0XHRcdHNjaGVtYUtleSA9IHRoaXMuZGF0YXNldC5zY2hlbWFLZXlcblx0XHRcdGVsZW1lbnQgPSAkKHRoaXMpXG5cdFx0XHRpZiAhJCh0aGlzKS52YWwoKSAmJiBzY2hlbWFLZXkgJiYgU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpXG5cdFx0XHRcdE1ldGVvci5jYWxsICdnZXRJbnN0YW5jZVZhbHVlcycsIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKSwgKGVycm9yLCByZXN1bHQpLT5cblx0XHRcdFx0XHRpZiBlcnJvclxuXHRcdFx0XHRcdFx0dG9hc3RyLmVycm9yKGVycm9yLnJlYXNvbilcblxuXHRcdFx0XHRcdGlmICFyZXN1bHRbc2NoZW1hS2V5XVxuXHRcdFx0XHRcdFx0a2V5ID0gZWxlbWVudC5kYXRhKFwiZm9ybXVsYVwiKT8ucmVwbGFjZShcImF1dG9fbnVtYmVyKFwiLCBcIlwiKS5yZXBsYWNlKFwiKVwiLCBcIlwiKVxuXG5cdFx0XHRcdFx0XHRrZXkgPSBrZXkucmVwbGFjZSgvXFxcIi9nLCBcIlwiKS5yZXBsYWNlKC9cXCcvZywgXCJcIilcblxuXHRcdFx0XHRcdFx0aWYga2V5LmluZGV4T2YoXCJ7XCIpID4gLTFcblx0XHRcdFx0XHRcdFx0a2V5ID0ga2V5LnJlcGxhY2UoXCJ7XCIsXCJcIikucmVwbGFjZShcIn1cIixcIlwiKVxuXHRcdFx0XHRcdFx0XHRrZXkgPSBrZXkudHJpbSgpXG5cdFx0XHRcdFx0XHRcdGtleSA9IEF1dG9Gb3JtLmdldEZpZWxkVmFsdWUoa2V5LCAnaW5zdGFuY2Vmb3JtJylcblx0XHRcdFx0XHRcdEluc3RhbmNlTnVtYmVyUnVsZXMuaW5zdGFuY2VOdW1iZXJCdWlsZGVyIGVsZW1lbnQsIGtleVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGVsZW1lbnQ/LnZhbChyZXN1bHRbc2NoZW1hS2V5XSkudHJpZ2dlcihcImNoYW5nZVwiKVxuXG5cdFx0anVkZ2UgPSBjdXJyZW50QXBwcm92ZS5qdWRnZVxuXHRcdGN1cnJlbnRTdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKCk7XG5cdFx0Zm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcblxuXHRcdHVubGVzcyBmb3JtX3ZlcnNpb25cblx0XHRcdHJldHVyblxuXG5cdFx0dW5sZXNzIGZvcm1fdmVyc2lvbi5maWVsZHNcblx0XHRcdHJldHVyblxuXG5cdFx0Zm9ybXVsYV9maWVsZHMgPSBGb3JtX2Zvcm11bGEuZ2V0Rm9ybXVsYUZpZWxkVmFyaWFibGUoXCJGb3JtX2Zvcm11bGEuZmllbGRfdmFsdWVzXCIsIGZvcm1fdmVyc2lvbi5maWVsZHMpO1xuXHRcdGluc2VydERvYyA9IEF1dG9Gb3JtLmdldEZvcm1WYWx1ZXMoXCJpbnN0YW5jZWZvcm1cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKVxuXHRcdEZvcm1fZm9ybXVsYS5ydW4oXCJcIiwgXCJcIiwgZm9ybXVsYV9maWVsZHMsIGluc2VydERvYywgZm9ybV92ZXJzaW9uLmZpZWxkcyk7XG5cdFx0I+WcqOatpOWkhOWIneWni+WMlnNlc3Npb24g5Lit55qEIGZvcm1fdmFsdWVzIOWPmOmHj++8jOeUqOS6juinpuWPkeS4i+S4gOatpeatpemqpOiuoeeul1xuXHRcdFNlc3Npb24uc2V0KFwiaW5zdGFuY2VfZm9ybV92YWx1ZXNcIiwge2luc3RhbmNlSWQ6IGluc3RhbmNlLl9pZCwgdmFsdWVzOiBpbnNlcnREb2N9KTtcblxuXG5cbiIsInZhciBtYXJrZWQ7XG5cbm1hcmtlZCA9IHJlcXVpcmUoXCJtYXJrZWRcIik7XG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMgPSB7XG4gIGFwcGxpY2FudENvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBkYXRhLCBzdGVlZG9zX2luc3RhbmNlO1xuICAgIHN0ZWVkb3NfaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICBkYXRhID0ge1xuICAgICAgbmFtZTogJ2luc19hcHBsaWNhbnQnLFxuICAgICAgYXR0czoge1xuICAgICAgICBuYW1lOiAnaW5zX2FwcGxpY2FudCcsXG4gICAgICAgIGlkOiAnaW5zX2FwcGxpY2FudCcsXG4gICAgICAgIFwiY2xhc3NcIjogJ3NlbGVjdFVzZXIgZm9ybS1jb250cm9sIGluc19hcHBsaWNhbnQnXG4gICAgICB9LFxuICAgICAgdmFsdWU6IHN0ZWVkb3NfaW5zdGFuY2UuYXBwbGljYW50X25hbWVcbiAgICB9O1xuICAgIGlmICghc3RlZWRvc19pbnN0YW5jZSB8fCBzdGVlZG9zX2luc3RhbmNlLnN0YXRlICE9PSBcImRyYWZ0XCIpIHtcbiAgICAgIGRhdGEuYXR0cy5kaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9LFxuICBpbnN0YW5jZUlkOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ2luc3RhbmNlZm9ybSc7XG4gIH0sXG4gIGZvcm1fdHlwZXM6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChBcHByb3ZlTWFuYWdlci5pc1JlYWRPbmx5KCkpIHtcbiAgICAgIHJldHVybiAnZGlzYWJsZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ21ldGhvZCc7XG4gICAgfVxuICB9LFxuICBzdGVlZG9zX2Zvcm06IGZ1bmN0aW9uKCkge1xuICAgIHZhciBmb3JtX3ZlcnNpb247XG4gICAgZm9ybV92ZXJzaW9uID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlRm9ybVZlcnNpb24oKTtcbiAgICBpZiAoZm9ybV92ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gZm9ybV92ZXJzaW9uO1xuICAgIH1cbiAgfSxcbiAgaW5uZXJzdWJmb3JtQ29udGV4dDogZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIGRvY192YWx1ZXM7XG4gICAgZG9jX3ZhbHVlcyA9IFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWFWYWx1ZXMoKTtcbiAgICBvYmpbXCJ0YWJsZVZhbHVlc1wiXSA9IGRvY192YWx1ZXMgPyBkb2NfdmFsdWVzW29iai5jb2RlXSA6IFtdO1xuICAgIG9ialtcImZvcm1JZFwiXSA9IFwiaW5zdGFuY2Vmb3JtXCI7XG4gICAgcmV0dXJuIG9iajtcbiAgfSxcbiAgaW5zdGFuY2U6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGVlZG9zX2luc3RhbmNlO1xuICAgIFNlc3Npb24uZ2V0KFwiY2hhbmdlX2RhdGVcIik7XG4gICAgaWYgKFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VJZFwiKSkge1xuICAgICAgc3RlZWRvc19pbnN0YW5jZSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgcmV0dXJuIHN0ZWVkb3NfaW5zdGFuY2U7XG4gICAgfVxuICB9LFxuICBlbXB0eTogZnVuY3Rpb24odmFsKSB7XG4gICAgaWYgKHZhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG4gIHVuZW1wdHk6IGZ1bmN0aW9uKHZhbCkge1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LFxuICBlcXVhbHM6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfSxcbiAgdW5lcXVhbHM6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gIShhID09PSBiKTtcbiAgfSxcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYi5zcGxpdCgnLCcpLmluY2x1ZGVzKGEpO1xuICB9LFxuICBpbmNsdWRlOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIuc3BsaXQoJywnKS5pbmNsdWRlcyhhKTtcbiAgfSxcbiAgZmllbGRzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZm9ybV92ZXJzaW9uO1xuICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG4gICAgaWYgKGZvcm1fdmVyc2lvbikge1xuICAgICAgcmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYShmb3JtX3ZlcnNpb24pKTtcbiAgICB9XG4gIH0sXG4gIGZvcm1hdERhdGU6IGZ1bmN0aW9uKGRhdGUsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMgPSBKU09OLnBhcnNlKG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuZm9ybWF0KSB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICBmb3JtYXQ6IFwiWVlZWS1NTS1ERCBISDptbVwiXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChvcHRpb25zLmZvcm1hdCk7XG4gIH0sXG4gIHRyYWNlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZsb3csIGluc3RhbmNlLCBsb2NhbGUsIHJlZiwgcmVmMSwgcmVmMiwgcmVmMywgc3RlZWRvc0RhdGEsIHN0ZXBzLCB0cmFjZXM7XG4gICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgc3RlZWRvc0RhdGEgPSAocmVmID0gVGVtcGxhdGUuaW5zdGFuY2UoKSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLnZpZXcpICE9IG51bGwgPyAocmVmMiA9IHJlZjEudGVtcGxhdGUpICE9IG51bGwgPyByZWYyLnN0ZWVkb3NEYXRhIDogdm9pZCAwIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgaW5zdGFuY2UgPSBzdGVlZG9zRGF0YSAhPSBudWxsID8gc3RlZWRvc0RhdGEuaW5zdGFuY2UgOiB2b2lkIDA7XG4gICAgICBmbG93ID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEZsb3dWZXJzaW9uKGluc3RhbmNlKTtcbiAgICAgIGxvY2FsZSA9IHN0ZWVkb3NEYXRhICE9IG51bGwgPyBzdGVlZG9zRGF0YS5sb2NhbGUgOiB2b2lkIDA7XG4gICAgICBpZiAobG9jYWxlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICd6aC1jbicpIHtcbiAgICAgICAgbG9jYWxlID0gXCJ6aC1DTlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgZmxvdyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZsb3dWZXJzaW9uKCk7XG4gICAgICBsb2NhbGUgPSBTZXNzaW9uLmdldChcIlRBUGkxOG46OmxvYWRlZF9sYW5nXCIpO1xuICAgIH1cbiAgICBpZiAoIWluc3RhbmNlIHx8ICFmbG93KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHN0ZXBzID0gZmxvdy5zdGVwcztcbiAgICB0cmFjZXMgPSB7fTtcbiAgICBpZiAoKHJlZjMgPSBpbnN0YW5jZS50cmFjZXMpICE9IG51bGwpIHtcbiAgICAgIHJlZjMuZm9yRWFjaChmdW5jdGlvbih0cmFjZSkge1xuICAgICAgICB2YXIgYXBwcm92ZXMsIHJlZjQsIHN0ZXA7XG4gICAgICAgIHN0ZXAgPSBzdGVwcy5maW5kUHJvcGVydHlCeVBLKFwiX2lkXCIsIHRyYWNlLnN0ZXApO1xuICAgICAgICBhcHByb3ZlcyA9IFtdO1xuICAgICAgICBpZiAoKHJlZjQgPSB0cmFjZS5hcHByb3ZlcykgIT0gbnVsbCkge1xuICAgICAgICAgIHJlZjQuZm9yRWFjaChmdW5jdGlvbihhcHByb3ZlKSB7XG4gICAgICAgICAgICB2YXIganVkZ2VfbmFtZTtcbiAgICAgICAgICAgIGlmICh0cmFjZS5pc19maW5pc2hlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBpZiAoYXBwcm92ZS5qdWRnZSA9PT0gJ2FwcHJvdmVkJykge1xuICAgICAgICAgICAgICAgIGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgYXBwcm92ZWRcIiwge30sIGxvY2FsZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBwcm92ZS5qdWRnZSA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgICAgICAgICAgIGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcmVqZWN0ZWRcIiwge30sIGxvY2FsZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBwcm92ZS5qdWRnZSA9PT0gJ3Rlcm1pbmF0ZWQnKSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFRBUGkxOG4uX18oXCJJbnN0YW5jZSBTdGF0ZSB0ZXJtaW5hdGVkXCIsIHt9LCBsb2NhbGUpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcHJvdmUuanVkZ2UgPT09ICdyZWFzc2lnbmVkJykge1xuICAgICAgICAgICAgICAgIGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcmVhc3NpZ25lZFwiLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcHByb3ZlLmp1ZGdlID09PSAncmVsb2NhdGVkJykge1xuICAgICAgICAgICAgICAgIGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcmVsb2NhdGVkXCIsIHt9LCBsb2NhbGUpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcHJvdmUuanVkZ2UgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAganVkZ2VfbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGp1ZGdlX25hbWUgPSBUQVBpMThuLl9fKFwiSW5zdGFuY2UgU3RhdGUgcGVuZGluZ1wiLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcHByb3Zlcy5wdXNoKHtcbiAgICAgICAgICAgICAgX2lkOiBhcHByb3ZlLl9pZCxcbiAgICAgICAgICAgICAgaGFuZGxlcjogYXBwcm92ZS51c2VyLFxuICAgICAgICAgICAgICBoYW5kbGVyX25hbWU6IGFwcHJvdmUuaGFuZGxlcl9uYW1lLFxuICAgICAgICAgICAgICBoYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lOiBhcHByb3ZlLmhhbmRsZXJfb3JnYW5pemF0aW9uX25hbWUsXG4gICAgICAgICAgICAgIGhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lOiBhcHByb3ZlLmhhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lLFxuICAgICAgICAgICAgICBmaW5pc2hfZGF0ZTogYXBwcm92ZS5maW5pc2hfZGF0ZSxcbiAgICAgICAgICAgICAganVkZ2U6IGFwcHJvdmUuanVkZ2UsXG4gICAgICAgICAgICAgIGp1ZGdlX25hbWU6IGp1ZGdlX25hbWUsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhcHByb3ZlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICBpc19maW5pc2hlZDogYXBwcm92ZS5pc19maW5pc2hlZCxcbiAgICAgICAgICAgICAgdHlwZTogYXBwcm92ZS50eXBlLFxuICAgICAgICAgICAgICBvcGluaW9uX2ZpZWxkc19jb2RlOiBhcHByb3ZlLm9waW5pb25fZmllbGRzX2NvZGUsXG4gICAgICAgICAgICAgIHNpZ25fZmllbGRfY29kZTogYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUsXG4gICAgICAgICAgICAgIGlzX3JlYWQ6IGFwcHJvdmUuaXNfcmVhZCxcbiAgICAgICAgICAgICAgc2lnbl9zaG93OiBhcHByb3ZlLnNpZ25fc2hvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICBpZiAoc3RlcC5uYW1lIGluIHRyYWNlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRyYWNlc1tzdGVwLm5hbWVdID0gdHJhY2VzW3N0ZXAubmFtZV0uY29uY2F0KGFwcHJvdmVzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRyYWNlc1tzdGVwLm5hbWVdID0gYXBwcm92ZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYWNlcztcbiAgfSxcbiAgZG9jX3ZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFdvcmtmbG93TWFuYWdlcl9mb3JtYXQuZ2V0QXV0b2Zvcm1TY2hlbWFWYWx1ZXMoKTtcbiAgfSxcbiAgaW5zdGFuY2VfYm94X3N0eWxlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYm94LCBpbnMsIGp1ZGdlO1xuICAgIGJveCA9IFNlc3Npb24uZ2V0KFwiYm94XCIpO1xuICAgIGlmIChib3ggPT09IFwiaW5ib3hcIiB8fCBib3ggPT09IFwiZHJhZnRcIikge1xuICAgICAganVkZ2UgPSBTZXNzaW9uLmdldChcImp1ZGdlXCIpO1xuICAgICAgaWYgKGp1ZGdlKSB7XG4gICAgICAgIGlmIChqdWRnZSA9PT0gXCJhcHByb3ZlZFwiKSB7XG4gICAgICAgICAgcmV0dXJuIFwiYm94LXN1Y2Nlc3NcIjtcbiAgICAgICAgfSBlbHNlIGlmIChqdWRnZSA9PT0gXCJyZWplY3RlZFwiKSB7XG4gICAgICAgICAgcmV0dXJuIFwiYm94LWRhbmdlclwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIGlmIChpbnMgJiYgaW5zLmZpbmFsX2RlY2lzaW9uKSB7XG4gICAgICBpZiAoaW5zLmZpbmFsX2RlY2lzaW9uID09PSBcImFwcHJvdmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiYm94LXN1Y2Nlc3NcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW5zLmZpbmFsX2RlY2lzaW9uID09PSBcInJlamVjdGVkXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiYm94LWRhbmdlclwiO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgdGFibGVfZmllbGRzOiBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgIHZhciBmaWVsZHMsIGZvcm1fdmVyc2lvbjtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtX3ZlcnNpb24gPSBXb3JrZmxvd01hbmFnZXIuZ2V0Rm9ybVZlcnNpb24oaW5zdGFuY2UuZm9ybSwgaW5zdGFuY2UuZm9ybV92ZXJzaW9uKTtcbiAgICB9XG4gICAgaWYgKGZvcm1fdmVyc2lvbikge1xuICAgICAgZmllbGRzID0gXy5jbG9uZShmb3JtX3ZlcnNpb24uZmllbGRzKTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxkLCBpbmRleCkge1xuICAgICAgICB2YXIgYWZ0ZXJfZmllbGQsIGJlZm9yZV9maWVsZCwgcHJlX2ZpZWxkcywgcHJlX3dpZGVfZmllbGRzLCB0ZF9jb2xzcGFuLCB0cl9lbmQsIHRyX3N0YXJ0O1xuICAgICAgICBmaWVsZC50cl9zdGFydCA9IFwiXCI7XG4gICAgICAgIGZpZWxkLnRyX2VuZCA9IFwiXCI7XG4gICAgICAgIHRkX2NvbHNwYW4gPSAxO1xuICAgICAgICBpZiAoKHR5cGVvZiBDb3JlRm9ybSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBDb3JlRm9ybSAhPT0gbnVsbCA/IENvcmVGb3JtLnBhZ2VUaXRsZUZpZWxkTmFtZSA6IHZvaWQgMCkgPT09IGZpZWxkLmNvZGUpIHtcbiAgICAgICAgICBmaWVsZC5pc193aWRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQuZm9ybXVsYSAmJiBmaWVsZC50eXBlICE9PSAnb2RhdGEnKSB7XG4gICAgICAgICAgZmllbGQucGVybWlzc2lvbiA9IFwicmVhZG9ubHlcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWN0aW9uJyB8fCBmaWVsZC50eXBlID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICBmaWVsZC50ZF9jb2xzcGFuID0gNDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGQudGRfY29sc3BhbiA9IDM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgZmllbGQudHJfc3RhcnQgPSBcIjx0cj5cIjtcbiAgICAgICAgICAgIHJldHVybiBmaWVsZC50cl9lbmQgPSBcIjwvdHI+XCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZV9maWVsZHMgPSBmaWVsZHMuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICAgIHByZV93aWRlX2ZpZWxkcyA9IHByZV9maWVsZHMuZmlsdGVyUHJvcGVydHkoXCJpc193aWRlXCIsIHRydWUpO1xuICAgICAgICAgIHRyX3N0YXJ0ID0gXCJcIjtcbiAgICAgICAgICB0cl9lbmQgPSBcIlwiO1xuICAgICAgICAgIGJlZm9yZV9maWVsZCA9IG51bGw7XG4gICAgICAgICAgYWZ0ZXJfZmllbGQgPSBudWxsO1xuICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgIGJlZm9yZV9maWVsZCA9IGZpZWxkc1tpbmRleCAtIDFdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5kZXggPCBmaWVsZHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgYWZ0ZXJfZmllbGQgPSBmaWVsZHNbaW5kZXggKyAxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWN0aW9uJyB8fCBmaWVsZC50eXBlID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICB0ZF9jb2xzcGFuID0gNDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLmlzX3dpZGUpIHtcbiAgICAgICAgICAgIHRkX2NvbHNwYW4gPSAzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYmVmb3JlX2ZpZWxkICYmIGFmdGVyX2ZpZWxkICYmIGJlZm9yZV9maWVsZC5pc193aWRlICYmIGFmdGVyX2ZpZWxkLmlzX3dpZGUpIHtcbiAgICAgICAgICAgICAgZmllbGQuaXNfd2lkZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRkX2NvbHNwYW4gPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiA9PT0gMCAmJiBhZnRlcl9maWVsZCAmJiBhZnRlcl9maWVsZC5pc193aWRlKSB7XG4gICAgICAgICAgICAgIGZpZWxkLmlzX3dpZGUgPSB0cnVlO1xuICAgICAgICAgICAgICB0ZF9jb2xzcGFuID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgocHJlX2ZpZWxkcy5sZW5ndGggKyBwcmVfd2lkZV9maWVsZHMubGVuZ3RoKSAlIDIgPT09IDAgJiYgYWZ0ZXJfZmllbGQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmllbGQuaXNfd2lkZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRkX2NvbHNwYW4gPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZC50ZF9jb2xzcGFuID0gdGRfY29sc3BhbjtcbiAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHRyX3N0YXJ0ID0gXCI8dHI+XCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICgocHJlX2ZpZWxkcy5sZW5ndGggKyBwcmVfd2lkZV9maWVsZHMubGVuZ3RoKSAlIDIgPT09IDAgfHwgZmllbGQuaXNfd2lkZSkge1xuICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICAgICAgICAgIHRyX3N0YXJ0ID0gXCI8dHIgY2xhc3MgPSBcXFwidHItY2hpbGQtdGFibGVcXFwiPlwiO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyX3N0YXJ0ID0gXCI8dHI+XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGQudHJfc3RhcnQgPSB0cl9zdGFydDtcbiAgICAgICAgICBpZiAoaW5kZXggKyAxID09PSBmaWVsZHMubGVuZ3RoIHx8IGZpZWxkLnR5cGUgPT09ICdzZWN0aW9uJyB8fCBmaWVsZC50eXBlID09PSAndGFibGUnIHx8IGZpZWxkLmlzX3dpZGUpIHtcbiAgICAgICAgICAgIHRyX2VuZCA9IFwiPC90cj5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKChwcmVfZmllbGRzLmxlbmd0aCArIHByZV93aWRlX2ZpZWxkcy5sZW5ndGgpICUgMiAhPT0gMCkge1xuICAgICAgICAgICAgdHJfZW5kID0gXCI8L3RyPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmllbGQudHJfZW5kID0gdHJfZW5kO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfVxuICB9LFxuICBzb3J0X2FwcHJvdmU6IGZ1bmN0aW9uKGFwcHJvdmVzLCBvcmRlcikge1xuICAgIGlmICghYXBwcm92ZXMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKCFhcHByb3ZlcyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcmRlciA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIGFwcHJvdmVzLnNvcnQoZnVuY3Rpb24ocDEsIHAyKSB7XG4gICAgICAgICAgdmFyIF9wMSwgX3AyO1xuICAgICAgICAgIF9wMSA9IDA7XG4gICAgICAgICAgX3AyID0gMDtcbiAgICAgICAgICBpZiAocDEuZmluaXNoX2RhdGUpIHtcbiAgICAgICAgICAgIF9wMSA9IHAxLmZpbmlzaF9kYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHAyLmZpbmlzaF9kYXRlKSB7XG4gICAgICAgICAgICBfcDIgPSBwMi5maW5pc2hfZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfcDIgLSBfcDE7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXBwcm92ZXMuc29ydChmdW5jdGlvbihwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgX3AxLCBfcDI7XG4gICAgICAgICAgX3AxID0gMDtcbiAgICAgICAgICBfcDIgPSAwO1xuICAgICAgICAgIGlmIChwMS5maW5pc2hfZGF0ZSkge1xuICAgICAgICAgICAgX3AxID0gcDEuZmluaXNoX2RhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocDIuZmluaXNoX2RhdGUpIHtcbiAgICAgICAgICAgIF9wMiA9IHAyLmZpbmlzaF9kYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF9wMSAtIF9wMjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcHByb3ZlcztcbiAgfSxcbiAgX3Q6IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBUQVBpMThuLl9fKGtleSk7XG4gIH0sXG4gIGdldEZpZWxkOiBmdW5jdGlvbihjb2RlKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtX3ZlcnNpb24gPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uO1xuICAgIGlmIChmb3JtX3ZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmb3JtX3ZlcnNpb24uZmllbGRzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJjb2RlXCIsIGNvZGUpO1xuICAgIH1cbiAgfSxcbiAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGNvZGUpIHtcbiAgICB2YXIgZm9ybV92ZXJzaW9uLCBpbnN0YW5jZSwgbG9jYWxlLCB1dGNPZmZzZXQsIHZhbHVlcztcbiAgICBpbnN0YW5jZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5pbnN0YW5jZTtcbiAgICBmb3JtX3ZlcnNpb24gPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuZm9ybV92ZXJzaW9uO1xuICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG4gICAgdXRjT2Zmc2V0ID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLnV0Y09mZnNldDtcbiAgICB2YWx1ZXMgPSBpbnN0YW5jZS52YWx1ZXMgfHwge307XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgdmFsdWVzID0gV29ya2Zsb3dNYW5hZ2VyX2Zvcm1hdC5nZXRBdXRvZm9ybVNjaGVtYVZhbHVlcygpO1xuICAgIH1cbiAgICByZXR1cm4gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldFZhbHVlKHZhbHVlc1tjb2RlXSwgZm9ybV92ZXJzaW9uLmZpZWxkcy5maW5kUHJvcGVydHlCeVBLKFwiY29kZVwiLCBjb2RlKSwgbG9jYWxlLCB1dGNPZmZzZXQpO1xuICB9LFxuICBnZXRMYWJlbDogZnVuY3Rpb24oY29kZSkge1xuICAgIHZhciBmb3JtX3ZlcnNpb247XG4gICAgZm9ybV92ZXJzaW9uID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmZvcm1fdmVyc2lvbjtcbiAgICByZXR1cm4gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldExhYmVsKGZvcm1fdmVyc2lvbi5maWVsZHMsIGNvZGUpO1xuICB9LFxuICBpc1RleHRhcmVhOiBmdW5jdGlvbihmaWVsZCkge1xuICAgIGlmICgoZmllbGQgIT0gbnVsbCA/IGZpZWxkLnR5cGUgOiB2b2lkIDApID09PSBcImlucHV0XCIgJiYgKGZpZWxkICE9IG51bGwgPyBmaWVsZC5pc190ZXh0YXJlYSA6IHZvaWQgMCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSxcbiAgZ2V0Q2ZDbGFzczogZnVuY3Rpb24oZmllbGQpIHtcbiAgICBpZiAoKGZpZWxkICE9IG51bGwgPyBmaWVsZC50eXBlIDogdm9pZCAwKSA9PT0gXCJpbnB1dFwiICYmIChmaWVsZCAhPSBudWxsID8gZmllbGQuaXNfdGV4dGFyZWEgOiB2b2lkIDApKSB7XG4gICAgICByZXR1cm4gXCJjZlRleHRhcmVhXCI7XG4gICAgfVxuICB9LFxuICBnZXRUYWJsZVRoZWFkOiBmdW5jdGlvbihmaWVsZCkge1xuICAgIHJldHVybiBTdGVlZG9zVGFibGUuZ2V0VGhlYWQoZmllbGQsIGZhbHNlKTtcbiAgfSxcbiAgZ2V0VGFibGVCb2R5OiBmdW5jdGlvbihmaWVsZCkge1xuICAgIHZhciBpbnN0YW5jZSwgdGFibGVWYWx1ZSwgdmFsdWVzO1xuICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgIGluc3RhbmNlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmluc3RhbmNlO1xuICAgICAgdmFsdWVzID0gaW5zdGFuY2UudmFsdWVzIHx8IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZXMgPSBXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hVmFsdWVzKCk7XG4gICAgfVxuICAgIHRhYmxlVmFsdWUgPSB2YWx1ZXNbZmllbGQuY29kZV07XG4gICAgcmV0dXJuIFN0ZWVkb3NUYWJsZS5nZXRUYm9keShmaWVsZC5zZmllbGRzLmdldFByb3BlcnR5KFwiY29kZVwiKSwgZmllbGQsIHRhYmxlVmFsdWUsIGZhbHNlKTtcbiAgfSxcbiAgc2hvd0xhYmVsOiBmdW5jdGlvbihmaWVsZCkge1xuICAgIHZhciB0ZW1wbGF0ZURhdGE7XG4gICAgdGVtcGxhdGVEYXRhID0gVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhO1xuICAgIGlmICh0ZW1wbGF0ZURhdGEubGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBpc09waW5pb25GaWVsZDogZnVuY3Rpb24oZmllbGQpIHtcbiAgICByZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZC5mb3JtdWxhKTtcbiAgfSxcbiAgaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmc6IGZ1bmN0aW9uKGZpZWxkX2Zvcm11bGEpIHtcbiAgICByZXR1cm4gSW5zdGFuY2VTaWduVGV4dC5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZF9mb3JtdWxhKTtcbiAgfSxcbiAgaW5jbHVkZXNPcGluaW9uRmllbGQ6IGZ1bmN0aW9uKGZvcm0sIGZvcm1fdmVyc2lvbikge1xuICAgIHZhciBmaWVsZF9mb3JtdWxhcywgZmllbGRzLCByZWY7XG4gICAgZmllbGRfZm9ybXVsYXMgPSBuZXcgQXJyYXkoKTtcbiAgICBmaWVsZHMgPSAoKHJlZiA9IGRiLmZvcm1fdmVyc2lvbnMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGZvcm1fdmVyc2lvbixcbiAgICAgIGZvcm06IGZvcm1cbiAgICB9KSkgIT0gbnVsbCA/IHJlZi5maWVsZHMgOiB2b2lkIDApIHx8IFtdO1xuICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGYpIHtcbiAgICAgIHZhciByZWYxO1xuICAgICAgaWYgKGYudHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICByZXR1cm4gY29uc29sZS5sb2coJ2lnbm9yZSBvcGluaW9uIGZpZWxkIGluIHRhYmxlJyk7XG4gICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gJ3NlY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBmICE9IG51bGwgPyAocmVmMSA9IGYuZmllbGRzKSAhPSBudWxsID8gcmVmMS5mb3JFYWNoKGZ1bmN0aW9uKGYxKSB7XG4gICAgICAgICAgcmV0dXJuIGZpZWxkX2Zvcm11bGFzLnB1c2goZjEuZm9ybXVsYSk7XG4gICAgICAgIH0pIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkX2Zvcm11bGFzLnB1c2goZi5mb3JtdWxhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gXy5zb21lKGZpZWxkX2Zvcm11bGFzLCBmdW5jdGlvbihmaWVsZF9mb3JtdWxhKSB7XG4gICAgICByZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pc09waW5pb25GaWVsZF9mcm9tX3N0cmluZyhmaWVsZF9mb3JtdWxhKTtcbiAgICB9KTtcbiAgfSxcbiAgZ2V0T3BpbmlvbkZpZWxkU3RlcHNOYW1lOiBmdW5jdGlvbihmaWVsZF9mb3JtdWxhLCB0b3Bfa2V5d29yZHMpIHtcbiAgICB2YXIgZm9vMSwgb3BpbmlvbkZpZWxkcztcbiAgICBvcGluaW9uRmllbGRzID0gbmV3IEFycmF5KCk7XG4gICAgaWYgKEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNPcGluaW9uRmllbGRfZnJvbV9zdHJpbmcoZmllbGRfZm9ybXVsYSkpIHtcbiAgICAgIGlmIChmaWVsZF9mb3JtdWxhKSB7XG4gICAgICAgIGZvbzEgPSBmaWVsZF9mb3JtdWxhLnNwbGl0KFwiO1wiKTtcbiAgICAgICAgZm9vMS5mb3JFYWNoKGZ1bmN0aW9uKGZvbykge1xuICAgICAgICAgIHZhciBqc29uX2Zvcm11bGEsIHJlZiwgcmVmMSwgczEsIHNmO1xuICAgICAgICAgIGpzb25fZm9ybXVsYSA9IHt9O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBqc29uX2Zvcm11bGEgPSBldmFsKFwiKFwiICsgZm9vICsgXCIpXCIpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgICAgICAgICAganNvbl9mb3JtdWxhID0ge307XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChqc29uX2Zvcm11bGEgIT0gbnVsbCA/IGpzb25fZm9ybXVsYS55aWppYW5sYW4gOiB2b2lkIDApIHtcbiAgICAgICAgICAgIHNmID0ge307XG4gICAgICAgICAgICBzZi5zdGVwTmFtZSA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4uc3RlcDtcbiAgICAgICAgICAgIHNmLmltYWdlX3NpZ24gPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLmltYWdlX3NpZ24gfHwgZmFsc2U7XG4gICAgICAgICAgICBzZi5vbmx5X2NjX29waW5pb24gPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLm9ubHlfY2MgfHwgZmFsc2U7XG4gICAgICAgICAgICBzZi5kZWZhdWx0X2Rlc2NyaXB0aW9uID0ganNvbl9mb3JtdWxhLnlpamlhbmxhbltcImRlZmF1bHRcIl07XG4gICAgICAgICAgICBzZi5vbmx5X2hhbmRsZXIgPSBqc29uX2Zvcm11bGEueWlqaWFubGFuLm9ubHlfaGFuZGxlcjtcbiAgICAgICAgICAgIHNmLnRvcF9rZXl3b3JkcyA9IGpzb25fZm9ybXVsYS55aWppYW5sYW4udG9wX2tleXdvcmRzIHx8IHRvcF9rZXl3b3JkcztcbiAgICAgICAgICAgIHJldHVybiBvcGluaW9uRmllbGRzLnB1c2goc2YpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKGZpZWxkX2Zvcm11bGEgIT0gbnVsbCA/IGZpZWxkX2Zvcm11bGEuaW5kZXhPZihcInt0cmFjZXMuXCIpIDogdm9pZCAwKSA+IC0xIHx8IChmaWVsZF9mb3JtdWxhICE9IG51bGwgPyBmaWVsZF9mb3JtdWxhLmluZGV4T2YoXCJ7c2lnbmF0dXJlLnRyYWNlcy5cIikgOiB2b2lkIDApID4gLTEpIHtcbiAgICAgICAgICAgIHNmID0ge1xuICAgICAgICAgICAgICBvbmx5X2NjX29waW5pb246IGZhbHNlLFxuICAgICAgICAgICAgICBpbWFnZV9zaWduOiBmYWxzZSxcbiAgICAgICAgICAgICAgdG9wX2tleXdvcmRzOiB0b3Bfa2V5d29yZHNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZm9vLmluZGV4T2YoXCJ7c2lnbmF0dXJlLlwiKSA+IC0xKSB7XG4gICAgICAgICAgICAgIHNmLmltYWdlX3NpZ24gPSB0cnVlO1xuICAgICAgICAgICAgICBmb28gPSBmb28ucmVwbGFjZShcIntzaWduYXR1cmUuXCIsIFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgczEgPSBmb28ucmVwbGFjZShcIntcIiwgXCJcIikucmVwbGFjZShcIn1cIiwgXCJcIik7XG4gICAgICAgICAgICBpZiAoczEuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgc2Yuc3RlcE5hbWUgPSBzMS5zcGxpdChcIi5cIilbMV07XG4gICAgICAgICAgICAgIGlmIChvcGluaW9uRmllbGRzLmZpbHRlclByb3BlcnR5KFwic3RlcE5hbWVcIiwgc2Yuc3RlcE5hbWUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoKHJlZiA9IG9waW5pb25GaWVsZHMuZmluZFByb3BlcnR5QnlQSyhcInN0ZXBOYW1lXCIsIHNmLnN0ZXBOYW1lKSkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgcmVmLm9ubHlfY2Nfb3BpbmlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzMS5zcGxpdChcIi5cIikubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgICAgaWYgKCgocmVmMSA9IHMxLnNwbGl0KFwiLlwiKVsyXSkgIT0gbnVsbCA/IHJlZjEudG9Mb2NhbGVMb3dlckNhc2UoKSA6IHZvaWQgMCkgPT09ICdjYycpIHtcbiAgICAgICAgICAgICAgICAgICAgc2Yub25seV9jY19vcGluaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcGluaW9uRmllbGRzLnB1c2goc2YpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvcGluaW9uRmllbGRzO1xuICB9LFxuICBzaG93Q0NPcGluaW9uOiBmdW5jdGlvbihmaWVsZCkge1xuICAgIHZhciByZWYsIHJlZjEsIHJlZjIsIHMxO1xuICAgIGlmICgoKHJlZiA9IGZpZWxkLmZvcm11bGEpICE9IG51bGwgPyByZWYuaW5kZXhPZihcInt0cmFjZXMuXCIpIDogdm9pZCAwKSA+IC0xIHx8ICgocmVmMSA9IGZpZWxkLmZvcm11bGEpICE9IG51bGwgPyByZWYxLmluZGV4T2YoXCJ7c2lnbmF0dXJlLnRyYWNlcy5cIikgOiB2b2lkIDApID4gLTEpIHtcbiAgICAgIHMxID0gZmllbGQuZm9ybXVsYS5yZXBsYWNlKFwie3NpZ25hdHVyZS5cIiwgXCJcIikucmVwbGFjZShcIntcIiwgXCJcIikucmVwbGFjZShcIn1cIiwgXCJcIik7XG4gICAgICBpZiAoczEuc3BsaXQoXCIuXCIpLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgaWYgKCgocmVmMiA9IHMxLnNwbGl0KFwiLlwiKVsyXSkgIT0gbnVsbCA/IHJlZjIudG9Mb2NhbGVMb3dlckNhc2UoKSA6IHZvaWQgMCkgPT09ICdjYycpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIG1hcmtEb3duVG9IdG1sOiBmdW5jdGlvbihtYXJrRG93blN0cmluZykge1xuICAgIGlmIChtYXJrRG93blN0cmluZykge1xuICAgICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgICBtYXJrZWQgPSBOcG0ucmVxdWlyZSgnbWFya2VkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3BhY2ViYXJzLlNhZmVTdHJpbmcobWFya2VkLnBhcnNlKG1hcmtEb3duU3RyaW5nKSk7XG4gICAgfVxuICB9LFxuICBmX2xhYmVsOiBmdW5jdGlvbih0aGF0KSB7XG4gICAgcmV0dXJuIHRoYXQubmFtZSB8fCB0aGF0LmNvZGU7XG4gIH1cbn07XG5cbmlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5zdGVlZG9zX2Zvcm0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtX3ZlcnNpb247XG4gIH07XG4gIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaXNTZWN0aW9uID0gZnVuY3Rpb24oY29kZSkge1xuICAgIHZhciBmb3JtX3ZlcnNpb247XG4gICAgZm9ybV92ZXJzaW9uID0gdGhpcy5mb3JtX3ZlcnNpb247XG4gICAgcmV0dXJuIGZvcm1fdmVyc2lvbi5maWVsZHMuZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgY29kZSkudHlwZSA9PT0gJ3NlY3Rpb24nO1xuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmRvY192YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaW5zdGFuY2U7XG4gICAgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlO1xuICAgIHJldHVybiBpbnN0YW5jZS52YWx1ZXM7XG4gIH07XG4gIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuYXBwbGljYW50Q29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBkYXRhLCBpbnN0YW5jZTtcbiAgICBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2U7XG4gICAgcmV0dXJuIGRhdGEgPSB7XG4gICAgICBuYW1lOiAnaW5zX2FwcGxpY2FudCcsXG4gICAgICBhdHRzOiB7XG4gICAgICAgIG5hbWU6ICdpbnNfYXBwbGljYW50JyxcbiAgICAgICAgaWQ6ICdpbnNfYXBwbGljYW50JyxcbiAgICAgICAgXCJjbGFzc1wiOiAnc2VsZWN0VXNlciBmb3JtLWNvbnRyb2wgaW5zX2FwcGxpY2FudCdcbiAgICAgIH0sXG4gICAgICB2YWx1ZTogaW5zdGFuY2UuYXBwbGljYW50X25hbWVcbiAgICB9O1xuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XG4gIH07XG4gIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZmllbGRzID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbjtcbiAgICBmb3JtX3ZlcnNpb24gPSB0aGlzLmZvcm1fdmVyc2lvbjtcbiAgICBpZiAoZm9ybV92ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gbmV3IFNpbXBsZVNjaGVtYShXb3JrZmxvd01hbmFnZXJfZm9ybWF0LmdldEF1dG9mb3JtU2NoZW1hKGZvcm1fdmVyc2lvbikpO1xuICAgIH1cbiAgfTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5mb3JtX3R5cGVzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiZGlzYWJsZWRcIjtcbiAgfTtcbiAgVGVtcGxhdGUucmVnaXN0ZXJIZWxwZXIoXCJhZkZpZWxkTGFiZWxUZXh0XCIsIGZ1bmN0aW9uKG9wKSB7XG4gICAgdmFyIGZvcm1fdmVyc2lvbiwgcmVmO1xuICAgIGZvcm1fdmVyc2lvbiA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5mb3JtX3ZlcnNpb247XG4gICAgcmV0dXJuIEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRMYWJlbChmb3JtX3ZlcnNpb24uZmllbGRzLCBvcCAhPSBudWxsID8gKHJlZiA9IG9wLmhhc2gpICE9IG51bGwgPyByZWYubmFtZSA6IHZvaWQgMCA6IHZvaWQgMCk7XG4gIH0pO1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLl90ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIGxvY2FsZTtcbiAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZTtcbiAgICByZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpO1xuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluc19hdHRhY2hfZG93bmxvYWRfdXJsID0gZnVuY3Rpb24oX2lkLCBhYnNvbHV0ZSkge1xuICAgIGlmIChhYnNvbHV0ZSkge1xuICAgICAgcmV0dXJuIE1ldGVvci5hYnNvbHV0ZVVybChcIi9hcGkvZmlsZXMvaW5zdGFuY2VzL1wiICsgX2lkICsgXCI/ZG93bmxvYWQ9dHJ1ZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiL2FwaS9maWxlcy9pbnN0YW5jZXMvXCIgKyBfaWQgKyBcIj9kb3dubG9hZD10cnVlXCI7XG4gICAgfVxuICB9O1xuICBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLm9wdGlvbnMgPSBmdW5jdGlvbihmaWVsZCkge1xuICAgIHZhciBvcHRpb25zLCByZWYsIHJldjtcbiAgICBvcHRpb25zID0gZmllbGQgIT0gbnVsbCA/IChyZWYgPSBmaWVsZC5vcHRpb25zKSAhPSBudWxsID8gcmVmLnNwbGl0KFwiXFxuXCIpIDogdm9pZCAwIDogdm9pZCAwO1xuICAgIHJldiA9IFtdO1xuICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHJldHVybiByZXYucHVzaCh7XG4gICAgICAgICAgbGFiZWw6IGl0ZW0sXG4gICAgICAgICAgdmFsdWU6IGl0ZW1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJldjtcbiAgfTtcbiAgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5nZXRQZXJtaXNzaW9ucyA9IGZ1bmN0aW9uKGNvZGUpIHtcbiAgICB2YXIgcmVmO1xuICAgIGlmICghKChyZWYgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuc3RhcnRTdGVwRWRpdGFibGVGaWVsZHMpICE9IG51bGwgPyByZWYuaW5jbHVkZXMoY29kZSkgOiB2b2lkIDApKSB7XG4gICAgICByZXR1cm4gXCJyZWFkb25seSBkaXNhYmxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfTtcbn1cblxuSW5zdGFuY2Vmb3JtVGVtcGxhdGUuZXZlbnRzID0ge1xuICAnY2hhbmdlIC5mb3JtLWNvbnRyb2wsLmNoZWNrYm94IGlucHV0LC5hZi1yYWRpby1ncm91cCBpbnB1dCwuYWYtY2hlY2tib3gtZ3JvdXAgaW5wdXQnOiBmdW5jdGlvbihldmVudCkge1xuICAgIHJldHVybiBJbnN0YW5jZU1hbmFnZXIuaW5zdGFuY2Vmb3JtQ2hhbmdlRXZlbnQoZXZlbnQpO1xuICB9LFxuICAndHlwZWFoZWFkOmNoYW5nZSAuZm9ybS1jb250cm9sJzogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICByZXR1cm4gSW5zdGFuY2VNYW5hZ2VyLmluc3RhbmNlZm9ybUNoYW5nZUV2ZW50KGV2ZW50KTtcbiAgfSxcbiAgJ2NsaWNrIC5jZlRleHRhcmVhIGEnOiBmdW5jdGlvbihldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuIFN0ZWVkb3Mub3BlbldpbmRvdyhldmVudC50YXJnZXQuaHJlZik7XG4gIH1cbn07XG5cbkluc3RhbmNlZm9ybVRlbXBsYXRlLm9uQ3JlYXRlZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29tcGlsZWQsIGUsIGluc3RhbmNlLCBpbnN0YW5jZUN1c3RvbVRlbXBsYXRlLCBpbnN0YW5jZVZpZXcsIHJlbmRlckZ1bmN0aW9uLCB0ZW1wbGF0ZTtcbiAgaW5zdGFuY2UgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgaWYgKCFpbnN0YW5jZSkge1xuICAgIHJldHVybjtcbiAgfVxuICB0ZW1wbGF0ZSA9IFRlbXBsYXRlTWFuYWdlci5nZXRUZW1wbGF0ZShpbnN0YW5jZSk7XG4gIHRyeSB7XG4gICAgY29tcGlsZWQgPSBTcGFjZWJhcnNDb21waWxlci5jb21waWxlKHRlbXBsYXRlLCB7XG4gICAgICBpc0JvZHk6IHRydWVcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgZSA9IGVycm9yMTtcbiAgICBjb25zb2xlLmxvZyhcIkluc3RhbmNlIFRlbXBsYXRlIEVycm9yXCIsIGUpO1xuICAgIGNvbXBpbGVkID0gU3BhY2ViYXJzQ29tcGlsZXIuY29tcGlsZShcIlwiLCB7XG4gICAgICBpc0JvZHk6IHRydWVcbiAgICB9KTtcbiAgfVxuICByZW5kZXJGdW5jdGlvbiA9IGV2YWwoY29tcGlsZWQpO1xuICBpbnN0YW5jZVZpZXcgPSBuZXcgQmxhemUuVmlldyhcImN1c3RvbV9pbnN0YW5jZV90ZW1wbGF0ZVwiLCByZW5kZXJGdW5jdGlvbik7XG4gIGluc3RhbmNlQ3VzdG9tVGVtcGxhdGUgPSBuZXcgQmxhemUuVGVtcGxhdGUoaW5zdGFuY2VWaWV3Lm5hbWUsIHJlbmRlckZ1bmN0aW9uKTtcbiAgVGVtcGxhdGUuaW5zdGFuY2VfY3VzdG9tX3RlbXBsYXRlID0gaW5zdGFuY2VDdXN0b21UZW1wbGF0ZTtcbiAgcmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlX2N1c3RvbV90ZW1wbGF0ZS5oZWxwZXJzKEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMpO1xufTtcblxuSW5zdGFuY2Vmb3JtVGVtcGxhdGUub25SZW5kZXJlZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY3VycmVudEFwcHJvdmUsIGN1cnJlbnRTdGVwLCBmb3JtX3ZlcnNpb24sIGZvcm11bGFfZmllbGRzLCBpbnNlcnREb2MsIGluc3RhbmNlLCBpbnN0YW5jZU51bWJlckZpZWxkcywganVkZ2U7XG4gIGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gIGlmICghaW5zdGFuY2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgSW5zdGFuY2VNYW5hZ2VyLnNldEluc3RhbmNlRm9ybUFwcGxpY2FudChpbnN0YW5jZS5hcHBsaWNhbnQsIGluc3RhbmNlLmFwcGxpY2FudF9uYW1lKTtcbiAgQXBwcm92ZU1hbmFnZXIuZXJyb3IgPSB7XG4gICAgbmV4dFN0ZXBzOiAnJyxcbiAgICBuZXh0U3RlcFVzZXJzOiAnJ1xuICB9O1xuICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcgfHwgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdkcmFmdCcpIHtcbiAgICBJbnN0YW5jZUV2ZW50LmluaXRFdmVudHMoaW5zdGFuY2UuZmxvdyk7XG4gIH1cbiAgaWYgKCFBcHByb3ZlTWFuYWdlci5pc1JlYWRPbmx5KCkpIHtcbiAgICBjdXJyZW50QXBwcm92ZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50QXBwcm92ZSgpO1xuICAgIGluc3RhbmNlTnVtYmVyRmllbGRzID0gJChcIltkYXRhLWZvcm11bGFdXCIsICQoXCIjaW5zdGFuY2Vmb3JtXCIpKTtcbiAgICBpbnN0YW5jZU51bWJlckZpZWxkcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGVsZW1lbnQsIHNjaGVtYUtleTtcbiAgICAgIHNjaGVtYUtleSA9IHRoaXMuZGF0YXNldC5zY2hlbWFLZXk7XG4gICAgICBlbGVtZW50ID0gJCh0aGlzKTtcbiAgICAgIGlmICghJCh0aGlzKS52YWwoKSAmJiBzY2hlbWFLZXkgJiYgU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZUlkXCIpKSB7XG4gICAgICAgIHJldHVybiBNZXRlb3IuY2FsbCgnZ2V0SW5zdGFuY2VWYWx1ZXMnLCBTZXNzaW9uLmdldChcImluc3RhbmNlSWRcIiksIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpIHtcbiAgICAgICAgICB2YXIga2V5LCByZWY7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0b2FzdHIuZXJyb3IoZXJyb3IucmVhc29uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFyZXN1bHRbc2NoZW1hS2V5XSkge1xuICAgICAgICAgICAga2V5ID0gKHJlZiA9IGVsZW1lbnQuZGF0YShcImZvcm11bGFcIikpICE9IG51bGwgPyByZWYucmVwbGFjZShcImF1dG9fbnVtYmVyKFwiLCBcIlwiKS5yZXBsYWNlKFwiKVwiLCBcIlwiKSA6IHZvaWQgMDtcbiAgICAgICAgICAgIGtleSA9IGtleS5yZXBsYWNlKC9cXFwiL2csIFwiXCIpLnJlcGxhY2UoL1xcJy9nLCBcIlwiKTtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihcIntcIikgPiAtMSkge1xuICAgICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZShcIntcIiwgXCJcIikucmVwbGFjZShcIn1cIiwgXCJcIik7XG4gICAgICAgICAgICAgIGtleSA9IGtleS50cmltKCk7XG4gICAgICAgICAgICAgIGtleSA9IEF1dG9Gb3JtLmdldEZpZWxkVmFsdWUoa2V5LCAnaW5zdGFuY2Vmb3JtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gSW5zdGFuY2VOdW1iZXJSdWxlcy5pbnN0YW5jZU51bWJlckJ1aWxkZXIoZWxlbWVudCwga2V5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgIT0gbnVsbCA/IGVsZW1lbnQudmFsKHJlc3VsdFtzY2hlbWFLZXldKS50cmlnZ2VyKFwiY2hhbmdlXCIpIDogdm9pZCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAganVkZ2UgPSBjdXJyZW50QXBwcm92ZS5qdWRnZTtcbiAgICBjdXJyZW50U3RlcCA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50U3RlcCgpO1xuICAgIGZvcm1fdmVyc2lvbiA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk7XG4gICAgaWYgKCFmb3JtX3ZlcnNpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFmb3JtX3ZlcnNpb24uZmllbGRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvcm11bGFfZmllbGRzID0gRm9ybV9mb3JtdWxhLmdldEZvcm11bGFGaWVsZFZhcmlhYmxlKFwiRm9ybV9mb3JtdWxhLmZpZWxkX3ZhbHVlc1wiLCBmb3JtX3ZlcnNpb24uZmllbGRzKTtcbiAgICBpbnNlcnREb2MgPSBBdXRvRm9ybS5nZXRGb3JtVmFsdWVzKFwiaW5zdGFuY2Vmb3JtXCIsIHZvaWQgMCwgdm9pZCAwLCBmYWxzZSk7XG4gICAgRm9ybV9mb3JtdWxhLnJ1bihcIlwiLCBcIlwiLCBmb3JtdWxhX2ZpZWxkcywgaW5zZXJ0RG9jLCBmb3JtX3ZlcnNpb24uZmllbGRzKTtcbiAgICByZXR1cm4gU2Vzc2lvbi5zZXQoXCJpbnN0YW5jZV9mb3JtX3ZhbHVlc1wiLCB7XG4gICAgICBpbnN0YW5jZUlkOiBpbnN0YW5jZS5faWQsXG4gICAgICB2YWx1ZXM6IGluc2VydERvY1xuICAgIH0pO1xuICB9XG59O1xuIiwiSW5zdGFuY2VBdHRhY2htZW50VGVtcGxhdGUuaGVscGVycyA9IHtcblxuXHRzaG93TWFpblRpdGxlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2UoKS53b3JrZmxvd01haW5BdHRhY2hUaXRsZS5nZXQoKTtcblx0fSxcblx0aXNDbGllbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBNZXRlb3IuaXNDbGllbnRcblx0fSxcblx0ZW5hYmxlZF9hZGRfbWFpbl9hdHRhY2htZW50OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgKCFpbnMpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdGlmIChTZXNzaW9uICYmIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSlcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0aWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpICE9IFwiZHJhZnRcIiAmJiBTZXNzaW9uLmdldChcImJveFwiKSAhPSBcImluYm94XCIpIHtcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblxuXHRcdC8vIOW3sue7j+e7k+adn+eahOWNleWtkOS4jeiDveaUuemZhOS7tlxuXHRcdGlmIChpbnMuc3RhdGUgPT0gXCJjb21wbGV0ZWRcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fVxuXG5cdFx0dmFyIGN1cnJlbnRfc3RlcCA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50U3RlcCgpO1xuXG5cdFx0aWYgKCFjdXJyZW50X3N0ZXApXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHQvLyBjY+eahOWNleWtkO+8jOWPquacieWcqOW9k+WJjeatpemqpOaJjeiDveS/ruaUuemZhOS7tlxuXHRcdHZhciBhcHByb3ZlID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRBcHByb3ZlKCk7XG5cdFx0aWYgKGFwcHJvdmUgJiYgYXBwcm92ZS50eXBlID09IFwiY2NcIikge1xuXHRcdFx0dmFyIGN1cnJlbnRUcmFjZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50VHJhY2UoKTtcblx0XHRcdGlmKGN1cnJlbnRUcmFjZSAmJiBjdXJyZW50VHJhY2UuX2lkICE9IGFwcHJvdmUudHJhY2Upe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8g5YiG5Y+R55qE5q2j5paH5oiW6ICF6ZmE5Lu25LiN5pi+56S66L2s5Li6cGRm5oyJ6ZKuXG5cdFx0Ly8g5aaC5p6c5pyJ5q2j5paH5p2D6ZmQ5YiZ5Li65q2j5paH77yM5ZCm5YiZ5YiG5Y+R5Li66ZmE5Lu2XG5cdFx0Ly8g5YiG5Y+R55qE6ZmE5Lu25LiN5YWB6K645L+u5pS5IOWIoOmZpCDmlrDlop7niYjmnKxcblx0XHR2YXIgbWFpbl9hdHRhY2hfY291bnQgPSBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuXHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzogaW5zLl9pZCxcblx0XHRcdCdtZXRhZGF0YS5jdXJyZW50JzogdHJ1ZSxcblx0XHRcdCdtZXRhZGF0YS5tYWluJzogdHJ1ZVxuXHRcdH0pLmNvdW50KCk7XG5cblx0XHR2YXIgZGlzdHJpYnV0ZV9tYWluX2F0dGFjaF9jb3VudCA9IDA7XG5cblx0XHRpZiAoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSkge1xuXHRcdFx0dmFyIHN0YXJ0X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0U3RhcnRTdGVwKCk7XG5cdFx0XHRpZiAoc3RhcnRfc3RlcC5jYW5fZWRpdF9tYWluX2F0dGFjaCkge1xuXHRcdFx0XHR2YXIgZGlzdHJpYnV0ZV9tYWluX2F0dGFjaF9jb3VudCA9IGNmcy5pbnN0YW5jZXMuZmluZCh7XG5cdFx0XHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzogaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSxcblx0XHRcdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHRcdFx0J21ldGFkYXRhLm1haW4nOiB0cnVlXG5cdFx0XHRcdH0pLmNvdW50KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9tYWluX2F0dGFjaCA9PSB0cnVlICYmIG1haW5fYXR0YWNoX2NvdW50IDwgMSAmJiBkaXN0cmlidXRlX21haW5fYXR0YWNoX2NvdW50IDwgMSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cblx0XHQvLyDmraPmlofmnIDlpJrlj6rog73mnInkuIDkuKpcblx0XHRpZiAobWFpbl9hdHRhY2hfY291bnQgPj0gMSB8fCBkaXN0cmlidXRlX21haW5fYXR0YWNoX2NvdW50ID49IDEpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyDlvIDlp4voioLngrnlubbkuJTorr7nva7kuoblj6/ku6XkuIrkvKDmraPmlofmiY3mmL7npLrkuIrkvKDmraPmlofnmoTmjInpkq5cblx0XHR2YXIgY3VycmVudF9zdGVwID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRTdGVwKCk7XG5cdFx0aWYgKGN1cnJlbnRfc3RlcCAmJiBjdXJyZW50X3N0ZXAuc3RlcF90eXBlID09IFwic3RhcnRcIiAmJiBjdXJyZW50X3N0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2ggPT0gdHJ1ZSlcblx0XHRcdHJldHVybiB0cnVlXG5cblx0XHRyZXR1cm4gZmFsc2Vcblx0fSxcblxuXHRlbmFibGVkX2VkaXRfbm9ybWFsX2F0dGFjaG1lbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRpZiAoIWlucylcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0aWYgKFNlc3Npb24gJiYgU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZVByaW50XCIpKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHR2YXIgZmxvdyA9IFdvcmtmbG93TWFuYWdlci5nZXRGbG93KGlucy5mbG93KTtcblx0XHRpZiAoIWZsb3cpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXG5cdFx0Ly8g5YiG5Y+R5ZCO55qEIOmZhOS7tu+8jOS4jeWPr+S7pee8lui+kS/liKDpmaTvvIzkuZ/kuI3orqnkuIrkvKDmlrDnmoTpmYTku7YsIOa1geeoi+WIl+ihqO+8mua3u+WKoOWxnuaApyDigJjooqvliIblj5HlkI7mmK/lkKblhYHorrjkuIrkvKDpmYTku7bigJkgIzE4Mzdcblx0XHRpZiAoaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZSAmJiAhZmxvdy51cGxvYWRfYWZ0ZXJfYmVpbmdfZGlzdHJpYnV0ZWQpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdGlmIChTZXNzaW9uLmdldChcImJveFwiKSAhPSBcImRyYWZ0XCIgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgIT0gXCJpbmJveFwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cblx0XHQvLyDlt7Lnu4/nu5PmnZ/nmoTljZXlrZDkuI3og73mlLnpmYTku7Zcblx0XHRpZiAoaW5zLnN0YXRlID09IFwiY29tcGxldGVkXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblxuXHRcdC8vIGNj55qE5Y2V5a2Q77yM5Y+q5pyJ5Zyo5b2T5YmN5q2l6aqk5omN6IO95L+u5pS56ZmE5Lu2XG5cdFx0dmFyIGFwcHJvdmUgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudEFwcHJvdmUoKTtcblx0XHRpZiAoYXBwcm92ZSAmJiBhcHByb3ZlLnR5cGUgPT0gXCJjY1wiKSB7XG5cdFx0XHR2YXIgY3VycmVudFRyYWNlID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRUcmFjZSgpO1xuXHRcdFx0aWYoY3VycmVudFRyYWNlICYmIGN1cnJlbnRUcmFjZS5faWQgIT0gYXBwcm92ZS50cmFjZSl7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoSW5zdGFuY2VNYW5hZ2VyLmlzQ0MoaW5zKSkge1xuXHRcdFx0dmFyIHN0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q0NTdGVwKCk7XG5cdFx0XHRpZiAoc3RlcCAmJiAoc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09IHRydWUgfHwgc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09IHVuZGVmaW5lZCkpXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBjdXJyZW50X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcblx0XHRcdGlmIChjdXJyZW50X3N0ZXAgJiYgKGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09IHRydWUgfHwgY3VycmVudF9zdGVwLmNhbl9lZGl0X25vcm1hbF9hdHRhY2ggPT0gdW5kZWZpbmVkKSlcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2Vcblx0fSxcblxuXHRtYWluX2F0dGFjaG1lbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRpZiAoIWlucylcblx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0dmFyIHN0YXJ0X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0U3RhcnRTdGVwKCk7XG5cblx0XHQvLyDlpoLmnpzmmK/ooqvliIblj5HnmoTnlLPor7fljZXlubbkuJTmnInkv67mlLnmraPmlofnmoTmnYPpmZDvvIzliJnkvJjlhYjmmL7npLrljp/nlLPor7fljZXmlofku7Zcblx0XHR2YXIgbWFpbl9hdHRhY2ggPSBudWxsO1xuXHRcdGlmIChpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlICYmIHN0YXJ0X3N0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2ggPT0gdHJ1ZSkge1xuXHRcdFx0bWFpbl9hdHRhY2ggPSBjZnMuaW5zdGFuY2VzLmZpbmRPbmUoe1xuXHRcdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiBpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlLFxuXHRcdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHRcdCdtZXRhZGF0YS5tYWluJzogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKCFtYWluX2F0dGFjaCkge1xuXHRcdFx0bWFpbl9hdHRhY2ggPSBjZnMuaW5zdGFuY2VzLmZpbmRPbmUoe1xuXHRcdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiBpbnMuX2lkLFxuXHRcdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHRcdCdtZXRhZGF0YS5tYWluJzogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1haW5fYXR0YWNoO1xuXHR9LFxuXG5cdG5vcm1hbF9hdHRhY2htZW50czogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGlmICghaW5zKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHR2YXIgc2VsZWN0b3IgPSB7XG5cdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHQnbWV0YWRhdGEubWFpbic6IHtcblx0XHRcdFx0JG5lOiB0cnVlXG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHR2YXIgYXR0cyA9IG5ldyBBcnJheSgpO1xuXG5cdFx0aWYgKGlucy5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UpIHtcblx0XHRcdC8vIOWmguaenOaYr+iiq+WIhuWPkeeahOeUs+ivt+WNle+8jOWImeaYvuekuuWOn+eUs+ivt+WNleaWh+S7tiwg5aaC5p6c6YCJ5oup5LqG5bCG5Y6f6KGo5Y2V5a2Y5YKo5Li66ZmE5Lu25Lmf6KaB5pi+56S6LCDlkIzml7bkuZ/opoHmmL7npLrmlrDkuIrkvKDnmoTpmYTku7Zcblx0XHRcdHZhciBkZmlzID0gXy5jbG9uZShpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcykgfHwgW107XG5cdFx0XHRkZmlzLnB1c2goaW5zLl9pZCk7XG5cdFx0XHRzZWxlY3RvclsnbWV0YWRhdGEuaW5zdGFuY2UnXSA9IHtcblx0XHRcdFx0JGluOiBkZmlzXG5cdFx0XHR9O1xuXG5cblx0XHRcdHNlbGVjdG9yW1wiJG9yXCJdID0gW3tcblx0XHRcdFx0XCJtZXRhZGF0YS5pbnN0YW5jZVwiOiBpbnMuX2lkXG5cdFx0XHR9LCB7XG5cdFx0XHRcdFwibWV0YWRhdGEuaW5zdGFuY2VcIjoge1xuXHRcdFx0XHRcdCRpbjogaW5zLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXNcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJtZXRhZGF0YS5pc19wcml2YXRlXCI6IHtcblx0XHRcdFx0XHQkbmU6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fV1cblxuXHRcdFx0Ly8g5aaC5p6c5Y6f55Sz6K+35Y2V5pyJ5q2j5paH5L2G5piv5YiG5Y+R5ZCO5rKh5pyJ5q2j5paH5p2D6ZmQ77yM5YiZ5Y6f55Sz6K+35Y2V5q2j5paH5pi+56S65Zyo6ZmE5Lu25qCPXG5cdFx0XHR2YXIgc3RhcnRfc3RlcCA9IEluc3RhbmNlTWFuYWdlci5nZXRTdGFydFN0ZXAoKTtcblx0XHRcdGlmIChzdGFydF9zdGVwICYmIHN0YXJ0X3N0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2ggIT0gdHJ1ZSkge1xuXHRcdFx0XHR2YXIgZGlzdHJpYnV0ZV9tYWluID0gY2ZzLmluc3RhbmNlcy5maW5kT25lKHtcblx0XHRcdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiB7XG5cdFx0XHRcdFx0XHQkaW46IGlucy5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHRcdFx0J21ldGFkYXRhLm1haW4nOiB0cnVlLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGRpc3RyaWJ1dGVfbWFpbikge1xuXHRcdFx0XHRcdHZhciBmaXJzdFZlcnNpb25NYWluID0gY2ZzLmluc3RhbmNlcy5maW5kT25lKGRpc3RyaWJ1dGVfbWFpbi5tZXRhZGF0YS5wYXJlbnQpO1xuXHRcdFx0XHRcdGRpc3RyaWJ1dGVfbWFpbi5hdHRhY2htZW50VXBsb2FkZWRBdCA9IGZpcnN0VmVyc2lvbk1haW4gPyBmaXJzdFZlcnNpb25NYWluLnVwbG9hZGVkQXQgOiBkaXN0cmlidXRlX21haW4udXBsb2FkZWRBdDtcblx0XHRcdFx0XHRhdHRzLnB1c2goZGlzdHJpYnV0ZV9tYWluKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxlY3RvclsnbWV0YWRhdGEuaW5zdGFuY2UnXSA9IGlucy5faWQ7XG5cdFx0fVxuXG5cdFx0Y2ZzLmluc3RhbmNlcy5maW5kKHNlbGVjdG9yKS5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtcblx0XHRcdHZhciBmaXJzdFZlcnNpb24gPSBjZnMuaW5zdGFuY2VzLmZpbmRPbmUoYy5tZXRhZGF0YS5wYXJlbnQpO1xuXHRcdFx0Yy5hdHRhY2htZW50VXBsb2FkZWRBdCA9IGZpcnN0VmVyc2lvbiA/IGZpcnN0VmVyc2lvbi51cGxvYWRlZEF0IDogYy51cGxvYWRlZEF0O1xuXHRcdFx0YXR0cy5wdXNoKGMpO1xuXHRcdH0pXG5cblx0XHRyZXR1cm4gXy5zb3J0QnkoYXR0cywgJ2F0dGFjaG1lbnRVcGxvYWRlZEF0Jyk7XG5cdH0sXG5cblx0c2hvd0F0dGFjaG1lbnRzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0aWYgKCFpbnMpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHQvLyDlpoLmnpzmmK/ooqvliIblj5HnmoTnlLPor7fljZXvvIzliJnmmL7npLrljp/nlLPor7fljZXmlofku7Yg5ZKM5YiG5Y+R5ZCO55Sz6K+35Y2V5paH5Lu2XG5cdFx0dmFyIGluc3RhbmNlSWRzID0gXy5jbG9uZShpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcykgfHwgW107XG5cdFx0aW5zdGFuY2VJZHMucHVzaChpbnMuX2lkKTtcblx0XHR2YXIgYXR0YWNobWVudHNfY291bnQgPSBjZnMuaW5zdGFuY2VzLmZpbmQoe1xuXHRcdFx0J21ldGFkYXRhLmluc3RhbmNlJzoge1xuXHRcdFx0XHQkaW46IGluc3RhbmNlSWRzXG5cdFx0XHR9LFxuXHRcdFx0J21ldGFkYXRhLmN1cnJlbnQnOiB0cnVlXG5cdFx0fSkuY291bnQoKTtcblxuXHRcdGlmIChTZXNzaW9uICYmIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSAmJiBhdHRhY2htZW50c19jb3VudCA8IDEpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PSBcImRyYWZ0XCIgfHwgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gXCJpbmJveFwiIHx8IGF0dGFjaG1lbnRzX2NvdW50ID4gMClcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHRfdDogZnVuY3Rpb24oa2V5KSB7XG5cdFx0cmV0dXJuIFRBUGkxOG4uX18oa2V5KVxuXHR9LFxuXG5cdF86IGZ1bmN0aW9uKGtleSkge1xuXHRcdHZhciBsb2NhbGU7XG5cdFx0aWYgKE1ldGVvci5pc0NsaWVudCkge1xuXHRcdFx0cmV0dXJuIFRBUGkxOG4uX18oa2V5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZTtcblx0XHRcdHJldHVybiBUQVBpMThuLl9fKGtleSwge30sIGxvY2FsZSk7XG5cdFx0fVxuXHR9LFxuXG5cdGZsb3dfZmlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRpZiAoIWlucylcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gY2ZzLmZpbGVzLmZpbmQoeyAnbWV0YWRhdGEuc3BhY2UnOiBpbnMuc3BhY2UsICdtZXRhZGF0YS5vYmplY3RfbmFtZSc6ICdmbG93cycsICdtZXRhZGF0YS5yZWNvcmRfaWQnOiBpbnMuZmxvdyB9KTtcblx0fSxcblxuXHRpc0RyYWZ0QW5kRmxvd2ZpbGVzRXhpc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblx0XHRpZiAoIWlucylcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gKFNlc3Npb24uZ2V0KCdib3gnKSA9PSAnZHJhZnQnKSAmJiAhIWNmcy5maWxlcy5maW5kKHsgJ21ldGFkYXRhLnNwYWNlJzogaW5zLnNwYWNlLCAnbWV0YWRhdGEub2JqZWN0X25hbWUnOiAnZmxvd3MnLCAnbWV0YWRhdGEucmVjb3JkX2lkJzogaW5zLmZsb3cgfSkuY291bnQoKTtcblx0fVxuXG5cbn1cblxuaWYgKE1ldGVvci5pc1NlcnZlcikge1xuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLl90ID0gZnVuY3Rpb24oa2V5KSB7XG5cdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXHRcdHJldHVybiBUQVBpMThuLl9fKGtleSwge30sIGxvY2FsZSlcblx0fVxuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLmVuYWJsZWRfYWRkX21haW5fYXR0YWNobWVudCA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9O1xuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLmVuYWJsZWRfZWRpdF9ub3JtYWxfYXR0YWNobWVudCA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9O1xuXG5cdEluc3RhbmNlQXR0YWNobWVudFRlbXBsYXRlLmhlbHBlcnMubWFpbl9hdHRhY2htZW50ID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGluc3RhbmNlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmluc3RhbmNlO1xuXHRcdHZhciBpbnN0YW5jZUlkcyA9IF8uY29tcGFjdChbaW5zdGFuY2UuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlLCBpbnN0YW5jZS5faWRdKTtcblx0XHR2YXIgYXR0YWNobWVudCA9IGNmcy5pbnN0YW5jZXMuZmluZE9uZSh7XG5cdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiB7XG5cdFx0XHRcdCRpbjogaW5zdGFuY2VJZHNcblx0XHRcdH0sXG5cdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHQnbWV0YWRhdGEubWFpbic6IHRydWVcblx0XHR9KTtcblxuXHRcdHJldHVybiBhdHRhY2htZW50O1xuXHR9O1xuXG5cdEluc3RhbmNlQXR0YWNobWVudFRlbXBsYXRlLmhlbHBlcnMubm9ybWFsX2F0dGFjaG1lbnRzID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHN0ZWVkb3NEYXRhID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhXG5cdFx0dmFyIGluc3RhbmNlID0gc3RlZWRvc0RhdGEuaW5zdGFuY2U7XG5cdFx0dmFyIGluc3RhbmNlSWRzID0gXy5jbG9uZShpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzKSB8fCBbXTtcblx0XHRpbnN0YW5jZUlkcy5wdXNoKGluc3RhbmNlLl9pZCk7XG5cdFx0dmFyIGF0dGFjaG1lbnRzID0gY2ZzLmluc3RhbmNlcy5maW5kKHtcblx0XHRcdCdtZXRhZGF0YS5pbnN0YW5jZSc6IHtcblx0XHRcdFx0JGluOiBpbnN0YW5jZUlkc1xuXHRcdFx0fSxcblx0XHRcdCdtZXRhZGF0YS5jdXJyZW50JzogdHJ1ZSxcblx0XHRcdCdtZXRhZGF0YS5tYWluJzoge1xuXHRcdFx0XHQkbmU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQkb3I6IFt7XG5cdFx0XHRcdCdtZXRhZGF0YS5pc19wcml2YXRlJzoge1xuXHRcdFx0XHRcdCRuZTogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9LCB7XG5cdFx0XHRcdCdtZXRhZGF0YS5pc19wcml2YXRlJzogdHJ1ZSxcblx0XHRcdFx0XCJtZXRhZGF0YS5vd25lclwiOiBzdGVlZG9zRGF0YS5zZXNzaW9uVXNlcklkIHx8IHN0ZWVkb3NEYXRhLnVzZXJJZCB8fCAnLTEnIC8vIOmYsuatouaVsOaNruW8guW4uOaXtizmmL7npLrkuobnp4HmnInpmYTku7Zcblx0XHRcdH1dXG5cdFx0fSkuZmV0Y2goKTtcblxuXHRcdHJldHVybiBhdHRhY2htZW50cztcblx0fTtcblxuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLnNob3dBdHRhY2htZW50cyA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbnN0YW5jZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5pbnN0YW5jZTtcblx0XHR2YXIgaW5zdGFuY2VJZHMgPSBfLmNsb25lKGluc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMpIHx8IFtdO1xuXHRcdGluc3RhbmNlSWRzLnB1c2goaW5zdGFuY2UuX2lkKTtcblxuXHRcdHZhciBhdHRhY2htZW50cyA9IGNmcy5pbnN0YW5jZXMuZmluZCh7XG5cdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiB7XG5cdFx0XHRcdCRpbjogaW5zdGFuY2VJZHNcblx0XHRcdH0sXG5cdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWVcblx0XHR9KS5mZXRjaCgpO1xuXG5cdFx0aWYgKGF0dGFjaG1lbnRzICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRJbnN0YW5jZUF0dGFjaG1lbnRUZW1wbGF0ZS5oZWxwZXJzLnNob3dNYWluVGl0bGUgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW5zdGFuY2UgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEuaW5zdGFuY2U7XG5cdFx0dmFyIGluc3RhbmNlSWRzID0gXy5jb21wYWN0KFtpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UsIGluc3RhbmNlLl9pZF0pO1xuXHRcdHZhciBtYWluX2F0dGFjaF9jb3VudCA9IGNmcy5pbnN0YW5jZXMuZmluZCh7XG5cdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiB7XG5cdFx0XHRcdCRpbjogaW5zdGFuY2VJZHNcblx0XHRcdH0sXG5cdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG5cdFx0XHQnbWV0YWRhdGEubWFpbic6IHRydWVcblx0XHR9KS5jb3VudCgpO1xuXG5cdFx0cmV0dXJuIG1haW5fYXR0YWNoX2NvdW50ID4gMFxuXHR9XG59XG4iLCJtYXJrZWQgPSByZXF1aXJlKFwibWFya2VkXCIpXG5JbnN0YW5jZVNpZ25UZXh0LmhlbHBlcnMgPVxuXHRzaG93OiAoc3RlcE5hbWUpLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlmIFNlc3Npb24uZ2V0KCdpbnN0YW5jZVByaW50Jylcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRpZiBJbnN0YW5jZU1hbmFnZXIuaXNJbmJveCgpXG5cdFx0XHRcdG15QXBwcm92ZSA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50QXBwcm92ZSgpXG5cdFx0XHRcdGlmIG15QXBwcm92ZVxuXHRcdFx0XHRcdGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0XHRcdFx0bXlUcmFjZSA9IGluc3RhbmNlPy50cmFjZXM/LmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgbXlBcHByb3ZlLnRyYWNlKVxuXHRcdFx0XHRcdHJldHVybiBteVRyYWNlPy5uYW1lID09IHN0ZXBOYW1lXG5cdFx0cmV0dXJuIGZhbHNlXG5cblx0ZGVmYXVsdERlc2NyaXB0aW9uOiAoKS0+XG4jXHRcdHJldHVybiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEuZGVmYXVsdF9kZXNjcmlwdGlvbiB8fCBUQVBpMThuLl9fKFwiaW5zdGFuY2VfZGVmYXVsdF9vcGluaW9uXCIpXG5cdFx0cmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5kZWZhdWx0X2Rlc2NyaXB0aW9uXG5cblx0dHJhY2VzOiAoKS0+XG5cdFx0SW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy50cmFjZXMoKVxuXG5cdHRyYWNlOiAoc3RlcE5hbWUsIG9ubHlfY2Nfb3BpbmlvbiwgaW1hZ2Vfc2lnbiwgdG9wX2tleXdvcmRzKS0+XG5cdFx0aW5zdGFuY2UgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluc3RhbmNlKClcblxuXHRcdGlzX2NvbXBsZXRlZCA9IGluc3RhbmNlPy5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiXG5cblx0XHRjb21wbGV0ZWRfZGF0ZSA9IGlmIGlzX2NvbXBsZXRlZCB0aGVuIF8ubGFzdChpbnN0YW5jZS50cmFjZXMpPy5maW5pc2hfZGF0ZT8uZ2V0VGltZSgpIGVsc2UgMFxuXG5cdFx0aWYgaXNfY29tcGxldGVkICYmIGluc3RhbmNlLmZpbmlzaF9kYXRlXG5cdFx0XHRjb21wbGV0ZWRfZGF0ZSA9IGluc3RhbmNlLmZpbmlzaF9kYXRlPy5nZXRUaW1lKClcblxuXHRcdHRyYWNlcyA9IEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudHJhY2VzKClcblxuXHRcdGFwcHJvdmVzID0gXy5jbG9uZSh0cmFjZXNbc3RlcE5hbWVdKVxuXG5cdFx0YXBwcm92ZV9zb3J0ID0gKGFwcHJvdmVzLCB0b3Bfa2V5d29yZHMpLT5cblxuI+WvuUFwcHJvdmVz5o6S5bqP77yMIOaMieeFp+aPkOS6pOaXtumXtOaOkuWAkuW6j++8jOWmguaenOayoeacieaPkOS6pOWImeaYvuekuuWcqOacgOS4iui+uVxuXHRcdFx0YXBwcm92ZXNfc29ydGVkID0gXy5zb3J0QnkgYXBwcm92ZXMsIChhcHByb3ZlKS0+XG5cdFx0XHRcdHJldHVybiAtKGFwcHJvdmUuZmluaXNoX2RhdGUgfHwgbmV3IERhdGUoKSkuZ2V0VGltZSgpXG5cblx0XHRcdCPpgJrov4flhbPplK7lrZfmjpLluo9cblx0XHRcdGlmIHRvcF9rZXl3b3Jkc1xuXHRcdFx0XHR0b3BfYXBwcm92ZXMgPSBuZXcgQXJyYXkoKVxuXG5cdFx0XHRcdHRvcF9rZXl3b3Jkcy5zcGxpdChcIixcIikuZm9yRWFjaCAoa2V5KSAtPlxuXHRcdFx0XHRcdHRvcF9hcHByb3ZlcyA9IF8udW5pb24gdG9wX2FwcHJvdmVzLCBfLmZpbHRlcihhcHByb3Zlc19zb3J0ZWQsIChhcHByb3ZlKS0+XG5cdFx0XHRcdFx0XHRyZXR1cm4gYXBwcm92ZT8uaGFuZGxlcl9uYW1lPy5pbmRleE9mKGtleSkgPiAtMVxuXHRcdFx0XHRcdClcblx0XHRcdFx0IyDlr7nnva7pobbmhI/op4HmjInnhaflpITnkIbkuovku7bmjpLlgJLluo9cblx0XHRcdFx0dG9wX2FwcHJvdmVzID0gXy5zb3J0QnkgdG9wX2FwcHJvdmVzLCAodG9wX2FwcHJvdmUpLT5cblx0XHRcdFx0XHRyZXR1cm4gLSh0b3BfYXBwcm92ZS5maW5pc2hfZGF0ZSB8fCBuZXcgRGF0ZSgpKS5nZXRUaW1lKClcblxuXHRcdFx0XHRhcHByb3Zlc19zb3J0ZWQgPSBfLnVuaW9uIHRvcF9hcHByb3ZlcywgYXBwcm92ZXNfc29ydGVkXG5cdFx0XHRyZXR1cm4gYXBwcm92ZXNfc29ydGVkIHx8IFtdXG5cblx0XHRhcHByb3ZlcyA9IF8uZmlsdGVyIGFwcHJvdmVzLCAoYSktPlxuXHRcdFx0cmV0dXJuIGEudHlwZSBpc250IFwiZm9yd2FyZFwiIGFuZCBhLnR5cGUgaXNudCBcImRpc3RyaWJ1dGVcIiBhbmQgYS50eXBlIGlzbnQgXCJ0ZXJtaW5hdGVkXCJcblxuXHRcdGlmIG9ubHlfY2Nfb3BpbmlvblxuXHRcdFx0YXBwcm92ZXMgPSBhcHByb3Zlcz8uZmlsdGVyUHJvcGVydHkoXCJ0eXBlXCIsIFwiY2NcIilcblxuXHRcdGFwcHJvdmVzX3NvcnRlZCA9IGFwcHJvdmVfc29ydChhcHByb3ZlcywgdG9wX2tleXdvcmRzKVxuXG5cdFx0YXBwcm92ZXNHcm91cCA9IF8uZ3JvdXBCeShhcHByb3ZlcywgXCJoYW5kbGVyXCIpO1xuXG5cdFx0aGFzTmV4dCA9IChhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKSAtPlxuXHRcdFx0aGFuZGxlckFwcHJvdmVzID0gYXBwcm92ZXNHcm91cFthcHByb3ZlLmhhbmRsZXJdXG5cdFx0XHRyZXR1cm4gXy5pbmRleE9mKGhhbmRsZXJBcHByb3ZlcywgYXBwcm92ZSkgKyAxIDwgaGFuZGxlckFwcHJvdmVzLmxlbmd0aFxuXG5cdFx0aGF2ZURlc2NyaXB0aW9uQXBwcm92ZSA9IChhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKSAtPlxuXHRcdFx0aGFuZGxlckFwcHJvdmVzID0gYXBwcm92ZXNHcm91cFthcHByb3ZlLmhhbmRsZXJdXG5cblx0XHRcdGRlc2NyaXB0aW9uQXBwcm92ZXMgPSBfLmZpbHRlciBoYW5kbGVyQXBwcm92ZXMsIChhKS0+XG5cdFx0XHRcdGlmIGEuZGVzY3JpcHRpb25cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdFx0aWYgZGVzY3JpcHRpb25BcHByb3Zlcy5sZW5ndGggPT0gMFxuXHRcdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdFx0cmV0dXJuIHRydWVcblxuXG5cdFx0YXBwcm92ZXNfc29ydGVkLmZvckVhY2ggKGFwcHJvdmUpIC0+XG4jXHRcdFx05pyJ6L6T5YWl5oSP6KeBIOaIliDmnIDmlrDkuIDmnaHlubbkuJTnlKjmiLfmsqHmnInovpPlhaXov4fmhI/op4FcbiNcdFx0XHRpZiAhYXBwcm92ZS5pc19maW5pc2hlZCB8fCBhcHByb3ZlLmRlc2NyaXB0aW9uIHx8ICghaGFzTmV4dChhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKSAmJiAhaGF2ZURlc2NyaXB0aW9uQXBwcm92ZShhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKSlcbiNcdFx0XHRpZiAhaGFzTmV4dChhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKVxuXHRcdFx0aWYgYXBwcm92ZS5zaWduX3Nob3cgIT0gZmFsc2UgJiYgKGFwcHJvdmUuZGVzY3JpcHRpb24gfHwgKCFhcHByb3ZlLmRlc2NyaXB0aW9uICYmICFoYXNOZXh0KGFwcHJvdmUsIGFwcHJvdmVzR3JvdXApICYmICFhcHByb3ZlLmlzX2ZpbmlzaGVkKSB8fCBNZXRlb3Iuc2V0dGluZ3MucHVibGljLndvcmtmbG93Py5zaG93QmxhbmtBcHByb3ZlRGVzY3JpcHRpb24pXG5cdFx0XHRcdGlmIGFwcHJvdmUuanVkZ2UgaXNudCAndGVybWluYXRlZCdcblx0XHRcdFx0XHRhcHByb3ZlLl9kaXNwbGF5ID0gdHJ1ZVxuXG5cdFx0YXBwcm92ZXNfc29ydGVkID0gXy5maWx0ZXIgYXBwcm92ZXNfc29ydGVkLCAoYSkgLT5cblx0XHRcdGlmIGlzX2NvbXBsZXRlZFxuXHRcdFx0XHRyZXR1cm4gYS5fZGlzcGxheSA9PSB0cnVlICYmIGEuaXNfZmluaXNoZWQgJiYgYS5maW5pc2hfZGF0ZT8uZ2V0VGltZSgpIDw9IGNvbXBsZXRlZF9kYXRlXG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJldHVybiBhLl9kaXNwbGF5ID09IHRydWVcblx0XHRyZXR1cm4gYXBwcm92ZXNfc29ydGVkXG5cblx0aW5jbHVkZTogKGEsIGIpIC0+XG5cdFx0cmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuaW5jbHVkZShhLCBiKVxuXG5cdHVuZW1wdHk6ICh2YWwpLT5cblx0XHRyZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy51bmVtcHR5KHZhbCkgfHwgTWV0ZW9yLnNldHRpbmdzLnB1YmxpYy53b3JrZmxvdz8uc2hvd0JsYW5rQXBwcm92ZURlc2NyaXB0aW9uXG5cblx0Zm9ybWF0RGF0ZTogKGRhdGUsIG9wdGlvbnMpLT5cblx0XHRpZiAhb3B0aW9uc1xuXHRcdFx0b3B0aW9ucyA9IHtcImZvcm1hdFwiOiBcIllZWVktTU0tRERcIn1cblxuXHRcdHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmZvcm1hdERhdGUoZGF0ZSwgb3B0aW9ucylcblxuXHRpc015QXBwcm92ZTogKGFwcHJvdmUsIG9ubHlfY2Nfb3BpbmlvbikgLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpICE9ICdpbmJveCdcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0aW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cblx0XHRcdGN1cnJlbnRBcHByb3ZlID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRBcHByb3ZlKClcblxuXHRcdFx0aWYgIWFwcHJvdmU/Ll9pZFxuXHRcdFx0XHRhcHByb3ZlID0gY3VycmVudEFwcHJvdmVcblxuXHRcdFx0aWYgYXBwcm92ZS5faWQgPT0gY3VycmVudEFwcHJvdmU/Ll9pZCAmJiBjdXJyZW50QXBwcm92ZT8udHlwZSA9PSAnY2MnICYmIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5uYW1lXG5cdFx0XHRcdGlmIF8uaW5kZXhPZihjdXJyZW50QXBwcm92ZT8ub3Bpbmlvbl9maWVsZHNfY29kZSwgVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLm5hbWUpID4gLTFcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0XHRcdGlmICEoY3VycmVudEFwcHJvdmU/LnR5cGUgPT0gJ2NjJykgJiYgb25seV9jY19vcGluaW9uXG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXG5cdFx0XHRpZiBjdXJyZW50QXBwcm92ZSAmJiBhcHByb3ZlLl9pZCA9PSBjdXJyZW50QXBwcm92ZS5faWRcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRyZXR1cm4gZmFsc2VcblxuXHRteUFwcHJvdmVEZXNjcmlwdGlvbjogKGFwcHJvdmVJZCktPlxuXHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94J1xuXHRcdFx0XHRteUFwcHJvdmUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpPy5teUFwcHJvdmU/LmdldCgpXG5cdFx0XHRcdGlmIG15QXBwcm92ZSAmJiBteUFwcHJvdmUuaWQgPT0gYXBwcm92ZUlkXG5cdFx0XHRcdFx0aWYgIW15QXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgfHwgbXlBcHByb3ZlLnNpZ25fZmllbGRfY29kZSA9PSBUZW1wbGF0ZS5pbnN0YW5jZSgpPy5kYXRhPy5uYW1lXG5cdFx0XHRcdFx0XHRpZiAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZV9teV9hcHByb3ZlX2Rlc2NyaXB0aW9uXCIpXG5cdFx0XHRcdFx0XHRcdHJldHVybiBteUFwcHJvdmU/LmRlc2NyaXB0aW9uIHx8IFwiXCJcblx0XHRcdFx0XHRcdHJldHVybiBTZXNzaW9uLmdldChcImluc3RhbmNlX215X2FwcHJvdmVfZGVzY3JpcHRpb25cIilcblxuXHRub3c6ICgpLT5cblx0XHRyZXR1cm4gbmV3IERhdGUoKTtcblxuXHRpc1JlYWRPbmx5OiAoKS0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRyZXR1cm4gQXBwcm92ZU1hbmFnZXIuaXNSZWFkT25seSgpXG5cdFx0cmV0dXJuIGZhbHNlXG5cblx0aXNPcGluaW9uT2ZGaWVsZDogKGFwcHJvdmUpLT5cblx0XHRpZiBhcHByb3ZlLnR5cGUgPT0gXCJjY1wiICYmIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5uYW1lXG5cdFx0XHRpZiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZSA9PSBhcHByb3ZlLnNpZ25fZmllbGRfY29kZVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRtYXJrRG93blRvSHRtbDogKG1hcmtEb3duU3RyaW5nKS0+XG5cdFx0aWYgbWFya0Rvd25TdHJpbmdcblx0XHRcdCMgcmVuZGVyZXIgPSBuZXcgTWFya2Rvd24uUmVuZGVyZXIoKTtcblx0XHRcdCMgcmVuZGVyZXIubGluayA9IChocmVmLCB0aXRsZSwgdGV4dCkgLT5cblx0XHRcdCMgXHRyZXR1cm4gXCI8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nI3tocmVmfScgdGl0bGU9JyN7dGl0bGV9Jz4je3RleHR9PC9hPlwiXG5cdFx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdFx0bWFya2VkID0gTnBtLnJlcXVpcmUoJ21hcmtlZCcpXG5cdFx0XHRyZXR1cm4gU3BhY2ViYXJzLlNhZmVTdHJpbmcobWFya2VkLnBhcnNlKG1hcmtEb3duU3RyaW5nKSlcblxuXHRzdGVwczogKGZpZWxkX2Zvcm11bGEsIHN0ZXAsIG9ubHlfY2Nfb3BpbmlvbiwgaW1hZ2Vfc2lnbiktPlxuXHRcdHN0ZXBzID0gW11cblx0XHRpZiAhc3RlcFxuXHRcdFx0aWYgIWZpZWxkX2Zvcm11bGFcblx0XHRcdFx0ZmllbGRfZm9ybXVsYSA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZUZvcm1WZXJzaW9uKCk/LmZpZWxkcz8uZmluZFByb3BlcnR5QnlQSyhcImNvZGVcIiwgdGhpcy5uYW1lKS5mb3JtdWxhXG5cdFx0XHRzdGVwcyA9IEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZ2V0T3BpbmlvbkZpZWxkU3RlcHNOYW1lKGZpZWxkX2Zvcm11bGEsIFRlbXBsYXRlLmluc3RhbmNlKCk/LmRhdGEudG9wX2tleXdvcmRzKVxuXHRcdGVsc2Vcblx0XHRcdHN0ZXBzID0gW3tzdGVwTmFtZTogc3RlcCwgb25seV9jY19vcGluaW9uOiBvbmx5X2NjX29waW5pb24sIGltYWdlX3NpZ246IGltYWdlX3NpZ259XVxuXHRcdHJldHVybiBzdGVwc1xuXG5cdGltYWdlU2lnbkRhdGE6IChoYW5kbGVyKSAtPlxuXHRcdHJldHVybiB7dXNlcjogaGFuZGxlcn1cblxuXHRzaG93U2lnbkltYWdlOiAoaGFuZGxlciwgaW1hZ2Vfc2lnbiwganVkZ2UpIC0+XG5cdFx0aWYgWydyZXR1cm5lZCcsICd0ZXJtaW5hdGVkJywgJ3JldHJpZXZlZCddLmluY2x1ZGVzKGp1ZGdlKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0c3BhY2VVc2VyU2lnbiA9IEltYWdlU2lnbi5oZWxwZXJzLnNwYWNlVXNlclNpZ24oaGFuZGxlcilcblxuXHRcdGlmIHNwYWNlVXNlclNpZ24/LnNpZ24gJiYgaW1hZ2Vfc2lnblxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRnZXRMYXN0U2lnbkFwcHJvdmU6ICgpLT5cblx0XHRpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcblxuXHRcdHJldHVybiBfLmxhc3QoVHJhY2VzTWFuYWdlci5nZXRIYW5kbGVyU2lnblNob3dBcHByb3ZlcyBpbnMsIE1ldGVvci51c2VySWQoKSlcblxuXG5cdGxhc3RNeUFwcHJvdmVEZXNjcmlwdGlvbjogKCktPlxuXHRcdHRyYWNlcyA9IEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudHJhY2VzKClcblx0XHRjdXJyZW50U3RlcCA9IEluc3RhbmNlTWFuYWdlci5nZXRDdXJyZW50U3RlcCgpO1xuXHRcdGFwcHJvdmVzID0gXy5jbG9uZSh0cmFjZXNbY3VycmVudFN0ZXAubmFtZV0pXG5cblx0XHRhcHByb3ZlcyA9IGFwcHJvdmVzLmZpbHRlclByb3BlcnR5KFwiaGFuZGxlclwiLCBNZXRlb3IudXNlcklkKCkpXG5cblx0XHRpZiBhcHByb3Zlcy5sZW5ndGggPiAxXG5cdFx0XHRyZXR1cm4gYXBwcm92ZXNbYXBwcm92ZXMubGVuZ3RoIC0gMl0/LmRlc2NyaXB0aW9uXG5cblx0XHRyZXR1cm4gXCJcIjtcblxuXHRzaG93QXBwcm92ZTogKGFwcHJvdmUpLT5cblx0XHRpZiAhYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgfHwgYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgPT0gVGVtcGxhdGUuaW5zdGFuY2UoKT8uZGF0YT8ubmFtZVxuXHRcdFx0aWYgYXBwcm92ZT8uaXNfcmVhZFxuXHRcdFx0XHRpZiBhcHByb3ZlLmlzX2ZpbmlzaGVkXG5cdFx0XHRcdFx0cmV0dXJuIFtcImFwcHJvdmVkXCIsIFwicmVqZWN0ZWRcIiwgXCJzdWJtaXR0ZWRcIiwgXCJyZWFkZWRcIl0uaW5jbHVkZXMoYXBwcm92ZS5qdWRnZSlcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0anVkZ2VfZGVzY3JpcHRpb246IChqdWRnZSktPlxuXHRcdHJldHVybiB0KGp1ZGdlICsgXCJfZGVzY3JpcHRpb25cIilcblxuXHRpc19hcHByb3ZlZDogKGp1ZGdlKS0+XG5cdFx0cmV0dXJuIFwiYXBwcm92ZWRcIiA9PSBqdWRnZVxuXG5cdGlzX3JlamVjdGVkOiAoanVkZ2UpLT5cblx0XHRyZXR1cm4gXCJyZWplY3RlZFwiID09IGp1ZGdlXG5cblx0aXNfcmVhZGVkOiAoanVkZ2UpLT5cblx0XHRyZXR1cm4gW1wiYXBwcm92ZWRcIiwgXCJyZWplY3RlZFwiLCBcInN1Ym1pdHRlZFwiLCBcInJlYWRlZFwiXS5pbmNsdWRlcyhqdWRnZSlcblxuXHRhZGRDbGFzczogKCktPlxuXHRcdG5hbWUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpPy5kYXRhPy5uYW1lXG5cdFx0c2V0VGltZW91dCAoKSAtPlxuXHRcdFx0dHJ5XG5cdFx0XHRcdGVsZW1lbnQgPSAkKFwiLmF1dG9tYXRpYy5vcGluaW9uLWZpZWxkLVwiICsgbmFtZSlcblx0XHRcdFx0aWYgZWxlbWVudC5sZW5ndGggPiAwXG5cdFx0XHRcdFx0aWYgZWxlbWVudD8uaXMoXCJ0ZFwiKVxuXHRcdFx0XHRcdFx0ZWxlbWVudC5hZGRDbGFzcygnZmllbGQtZWRpdGFibGUnKVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdCQoXCIuaW5zdGFuY2Utc2lnblwiLCBlbGVtZW50KS5hZGRDbGFzcygnZmllbGQtZWRpdGFibGUnKVxuXHRcdFx0Y2F0Y2ggZVxuXHRcdFx0XHRjb25zb2xlLmxvZyBlXG5cdFx0LCAxXG5cdFx0cmV0dXJuICcnXG5cbmlmIE1ldGVvci5pc1NlcnZlclxuXHRJbnN0YW5jZVNpZ25UZXh0LmhlbHBlcnMuZGVmYXVsdERlc2NyaXB0aW9uID0gLT5cblx0XHRsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlXG5cdFx0cmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5kZWZhdWx0X2Rlc2NyaXB0aW9uIHx8IFRBUGkxOG4uX18oXCJpbnN0YW5jZV9kZWZhdWx0X29waW5pb25cIiwge30sIGxvY2FsZSkiLCJ2YXIgbWFya2VkO1xuXG5tYXJrZWQgPSByZXF1aXJlKFwibWFya2VkXCIpO1xuXG5JbnN0YW5jZVNpZ25UZXh0LmhlbHBlcnMgPSB7XG4gIHNob3c6IGZ1bmN0aW9uKHN0ZXBOYW1lKSB7XG4gICAgdmFyIGluc3RhbmNlLCBteUFwcHJvdmUsIG15VHJhY2UsIHJlZjtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICBpZiAoU2Vzc2lvbi5nZXQoJ2luc3RhbmNlUHJpbnQnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoSW5zdGFuY2VNYW5hZ2VyLmlzSW5ib3goKSkge1xuICAgICAgICBteUFwcHJvdmUgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudEFwcHJvdmUoKTtcbiAgICAgICAgaWYgKG15QXBwcm92ZSkge1xuICAgICAgICAgIGluc3RhbmNlID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICAgICAgbXlUcmFjZSA9IGluc3RhbmNlICE9IG51bGwgPyAocmVmID0gaW5zdGFuY2UudHJhY2VzKSAhPSBudWxsID8gcmVmLmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgbXlBcHByb3ZlLnRyYWNlKSA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4gKG15VHJhY2UgIT0gbnVsbCA/IG15VHJhY2UubmFtZSA6IHZvaWQgMCkgPT09IHN0ZXBOYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgZGVmYXVsdERlc2NyaXB0aW9uOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2UoKS5kYXRhLmRlZmF1bHRfZGVzY3JpcHRpb247XG4gIH0sXG4gIHRyYWNlczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudHJhY2VzKCk7XG4gIH0sXG4gIHRyYWNlOiBmdW5jdGlvbihzdGVwTmFtZSwgb25seV9jY19vcGluaW9uLCBpbWFnZV9zaWduLCB0b3Bfa2V5d29yZHMpIHtcbiAgICB2YXIgYXBwcm92ZV9zb3J0LCBhcHByb3ZlcywgYXBwcm92ZXNHcm91cCwgYXBwcm92ZXNfc29ydGVkLCBjb21wbGV0ZWRfZGF0ZSwgaGFzTmV4dCwgaGF2ZURlc2NyaXB0aW9uQXBwcm92ZSwgaW5zdGFuY2UsIGlzX2NvbXBsZXRlZCwgcmVmLCByZWYxLCByZWYyLCB0cmFjZXM7XG4gICAgaW5zdGFuY2UgPSBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLmluc3RhbmNlKCk7XG4gICAgaXNfY29tcGxldGVkID0gKGluc3RhbmNlICE9IG51bGwgPyBpbnN0YW5jZS5zdGF0ZSA6IHZvaWQgMCkgPT09IFwiY29tcGxldGVkXCI7XG4gICAgY29tcGxldGVkX2RhdGUgPSBpc19jb21wbGV0ZWQgPyAocmVmID0gXy5sYXN0KGluc3RhbmNlLnRyYWNlcykpICE9IG51bGwgPyAocmVmMSA9IHJlZi5maW5pc2hfZGF0ZSkgIT0gbnVsbCA/IHJlZjEuZ2V0VGltZSgpIDogdm9pZCAwIDogdm9pZCAwIDogMDtcbiAgICBpZiAoaXNfY29tcGxldGVkICYmIGluc3RhbmNlLmZpbmlzaF9kYXRlKSB7XG4gICAgICBjb21wbGV0ZWRfZGF0ZSA9IChyZWYyID0gaW5zdGFuY2UuZmluaXNoX2RhdGUpICE9IG51bGwgPyByZWYyLmdldFRpbWUoKSA6IHZvaWQgMDtcbiAgICB9XG4gICAgdHJhY2VzID0gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy50cmFjZXMoKTtcbiAgICBhcHByb3ZlcyA9IF8uY2xvbmUodHJhY2VzW3N0ZXBOYW1lXSk7XG4gICAgYXBwcm92ZV9zb3J0ID0gZnVuY3Rpb24oYXBwcm92ZXMsIHRvcF9rZXl3b3Jkcykge1xuICAgICAgdmFyIGFwcHJvdmVzX3NvcnRlZCwgdG9wX2FwcHJvdmVzO1xuICAgICAgYXBwcm92ZXNfc29ydGVkID0gXy5zb3J0QnkoYXBwcm92ZXMsIGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgICAgcmV0dXJuIC0oYXBwcm92ZS5maW5pc2hfZGF0ZSB8fCBuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0b3Bfa2V5d29yZHMpIHtcbiAgICAgICAgdG9wX2FwcHJvdmVzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHRvcF9rZXl3b3Jkcy5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICByZXR1cm4gdG9wX2FwcHJvdmVzID0gXy51bmlvbih0b3BfYXBwcm92ZXMsIF8uZmlsdGVyKGFwcHJvdmVzX3NvcnRlZCwgZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgICAgICAgICAgdmFyIHJlZjM7XG4gICAgICAgICAgICByZXR1cm4gKGFwcHJvdmUgIT0gbnVsbCA/IChyZWYzID0gYXBwcm92ZS5oYW5kbGVyX25hbWUpICE9IG51bGwgPyByZWYzLmluZGV4T2Yoa2V5KSA6IHZvaWQgMCA6IHZvaWQgMCkgPiAtMTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0b3BfYXBwcm92ZXMgPSBfLnNvcnRCeSh0b3BfYXBwcm92ZXMsIGZ1bmN0aW9uKHRvcF9hcHByb3ZlKSB7XG4gICAgICAgICAgcmV0dXJuIC0odG9wX2FwcHJvdmUuZmluaXNoX2RhdGUgfHwgbmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBwcm92ZXNfc29ydGVkID0gXy51bmlvbih0b3BfYXBwcm92ZXMsIGFwcHJvdmVzX3NvcnRlZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXBwcm92ZXNfc29ydGVkIHx8IFtdO1xuICAgIH07XG4gICAgYXBwcm92ZXMgPSBfLmZpbHRlcihhcHByb3ZlcywgZnVuY3Rpb24oYSkge1xuICAgICAgcmV0dXJuIGEudHlwZSAhPT0gXCJmb3J3YXJkXCIgJiYgYS50eXBlICE9PSBcImRpc3RyaWJ1dGVcIiAmJiBhLnR5cGUgIT09IFwidGVybWluYXRlZFwiO1xuICAgIH0pO1xuICAgIGlmIChvbmx5X2NjX29waW5pb24pIHtcbiAgICAgIGFwcHJvdmVzID0gYXBwcm92ZXMgIT0gbnVsbCA/IGFwcHJvdmVzLmZpbHRlclByb3BlcnR5KFwidHlwZVwiLCBcImNjXCIpIDogdm9pZCAwO1xuICAgIH1cbiAgICBhcHByb3Zlc19zb3J0ZWQgPSBhcHByb3ZlX3NvcnQoYXBwcm92ZXMsIHRvcF9rZXl3b3Jkcyk7XG4gICAgYXBwcm92ZXNHcm91cCA9IF8uZ3JvdXBCeShhcHByb3ZlcywgXCJoYW5kbGVyXCIpO1xuICAgIGhhc05leHQgPSBmdW5jdGlvbihhcHByb3ZlLCBhcHByb3Zlc0dyb3VwKSB7XG4gICAgICB2YXIgaGFuZGxlckFwcHJvdmVzO1xuICAgICAgaGFuZGxlckFwcHJvdmVzID0gYXBwcm92ZXNHcm91cFthcHByb3ZlLmhhbmRsZXJdO1xuICAgICAgcmV0dXJuIF8uaW5kZXhPZihoYW5kbGVyQXBwcm92ZXMsIGFwcHJvdmUpICsgMSA8IGhhbmRsZXJBcHByb3Zlcy5sZW5ndGg7XG4gICAgfTtcbiAgICBoYXZlRGVzY3JpcHRpb25BcHByb3ZlID0gZnVuY3Rpb24oYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkge1xuICAgICAgdmFyIGRlc2NyaXB0aW9uQXBwcm92ZXMsIGhhbmRsZXJBcHByb3ZlcztcbiAgICAgIGhhbmRsZXJBcHByb3ZlcyA9IGFwcHJvdmVzR3JvdXBbYXBwcm92ZS5oYW5kbGVyXTtcbiAgICAgIGRlc2NyaXB0aW9uQXBwcm92ZXMgPSBfLmZpbHRlcihoYW5kbGVyQXBwcm92ZXMsIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgaWYgKGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIGlmIChkZXNjcmlwdGlvbkFwcHJvdmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGFwcHJvdmVzX3NvcnRlZC5mb3JFYWNoKGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgIHZhciByZWYzO1xuICAgICAgaWYgKGFwcHJvdmUuc2lnbl9zaG93ICE9PSBmYWxzZSAmJiAoYXBwcm92ZS5kZXNjcmlwdGlvbiB8fCAoIWFwcHJvdmUuZGVzY3JpcHRpb24gJiYgIWhhc05leHQoYXBwcm92ZSwgYXBwcm92ZXNHcm91cCkgJiYgIWFwcHJvdmUuaXNfZmluaXNoZWQpIHx8ICgocmVmMyA9IE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXS53b3JrZmxvdykgIT0gbnVsbCA/IHJlZjMuc2hvd0JsYW5rQXBwcm92ZURlc2NyaXB0aW9uIDogdm9pZCAwKSkpIHtcbiAgICAgICAgaWYgKGFwcHJvdmUuanVkZ2UgIT09ICd0ZXJtaW5hdGVkJykge1xuICAgICAgICAgIHJldHVybiBhcHByb3ZlLl9kaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGFwcHJvdmVzX3NvcnRlZCA9IF8uZmlsdGVyKGFwcHJvdmVzX3NvcnRlZCwgZnVuY3Rpb24oYSkge1xuICAgICAgdmFyIHJlZjM7XG4gICAgICBpZiAoaXNfY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVybiBhLl9kaXNwbGF5ID09PSB0cnVlICYmIGEuaXNfZmluaXNoZWQgJiYgKChyZWYzID0gYS5maW5pc2hfZGF0ZSkgIT0gbnVsbCA/IHJlZjMuZ2V0VGltZSgpIDogdm9pZCAwKSA8PSBjb21wbGV0ZWRfZGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhLl9kaXNwbGF5ID09PSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhcHByb3Zlc19zb3J0ZWQ7XG4gIH0sXG4gIGluY2x1ZGU6IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbmNsdWRlKGEsIGIpO1xuICB9LFxuICB1bmVtcHR5OiBmdW5jdGlvbih2YWwpIHtcbiAgICB2YXIgcmVmO1xuICAgIHJldHVybiBJbnN0YW5jZWZvcm1UZW1wbGF0ZS5oZWxwZXJzLnVuZW1wdHkodmFsKSB8fCAoKHJlZiA9IE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXS53b3JrZmxvdykgIT0gbnVsbCA/IHJlZi5zaG93QmxhbmtBcHByb3ZlRGVzY3JpcHRpb24gOiB2b2lkIDApO1xuICB9LFxuICBmb3JtYXREYXRlOiBmdW5jdGlvbihkYXRlLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICBcImZvcm1hdFwiOiBcIllZWVktTU0tRERcIlxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZm9ybWF0RGF0ZShkYXRlLCBvcHRpb25zKTtcbiAgfSxcbiAgaXNNeUFwcHJvdmU6IGZ1bmN0aW9uKGFwcHJvdmUsIG9ubHlfY2Nfb3Bpbmlvbikge1xuICAgIHZhciBjdXJyZW50QXBwcm92ZSwgaW5zO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSAhPT0gJ2luYm94Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGN1cnJlbnRBcHByb3ZlID0gSW5zdGFuY2VNYW5hZ2VyLmdldEN1cnJlbnRBcHByb3ZlKCk7XG4gICAgICBpZiAoIShhcHByb3ZlICE9IG51bGwgPyBhcHByb3ZlLl9pZCA6IHZvaWQgMCkpIHtcbiAgICAgICAgYXBwcm92ZSA9IGN1cnJlbnRBcHByb3ZlO1xuICAgICAgfVxuICAgICAgaWYgKGFwcHJvdmUuX2lkID09PSAoY3VycmVudEFwcHJvdmUgIT0gbnVsbCA/IGN1cnJlbnRBcHByb3ZlLl9pZCA6IHZvaWQgMCkgJiYgKGN1cnJlbnRBcHByb3ZlICE9IG51bGwgPyBjdXJyZW50QXBwcm92ZS50eXBlIDogdm9pZCAwKSA9PT0gJ2NjJyAmJiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZSkge1xuICAgICAgICBpZiAoXy5pbmRleE9mKGN1cnJlbnRBcHByb3ZlICE9IG51bGwgPyBjdXJyZW50QXBwcm92ZS5vcGluaW9uX2ZpZWxkc19jb2RlIDogdm9pZCAwLCBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZSkgPiAtMSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCEoKGN1cnJlbnRBcHByb3ZlICE9IG51bGwgPyBjdXJyZW50QXBwcm92ZS50eXBlIDogdm9pZCAwKSA9PT0gJ2NjJykgJiYgb25seV9jY19vcGluaW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50QXBwcm92ZSAmJiBhcHByb3ZlLl9pZCA9PT0gY3VycmVudEFwcHJvdmUuX2lkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIG15QXBwcm92ZURlc2NyaXB0aW9uOiBmdW5jdGlvbihhcHByb3ZlSWQpIHtcbiAgICB2YXIgbXlBcHByb3ZlLCByZWYsIHJlZjEsIHJlZjIsIHJlZjM7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgIG15QXBwcm92ZSA9IChyZWYgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpKSAhPSBudWxsID8gKHJlZjEgPSByZWYubXlBcHByb3ZlKSAhPSBudWxsID8gcmVmMS5nZXQoKSA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICAgICAgaWYgKG15QXBwcm92ZSAmJiBteUFwcHJvdmUuaWQgPT09IGFwcHJvdmVJZCkge1xuICAgICAgICAgIGlmICghbXlBcHByb3ZlLnNpZ25fZmllbGRfY29kZSB8fCBteUFwcHJvdmUuc2lnbl9maWVsZF9jb2RlID09PSAoKHJlZjIgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpKSAhPSBudWxsID8gKHJlZjMgPSByZWYyLmRhdGEpICE9IG51bGwgPyByZWYzLm5hbWUgOiB2b2lkIDAgOiB2b2lkIDApKSB7XG4gICAgICAgICAgICBpZiAoIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VfbXlfYXBwcm92ZV9kZXNjcmlwdGlvblwiKSkge1xuICAgICAgICAgICAgICByZXR1cm4gKG15QXBwcm92ZSAhPSBudWxsID8gbXlBcHByb3ZlLmRlc2NyaXB0aW9uIDogdm9pZCAwKSB8fCBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFNlc3Npb24uZ2V0KFwiaW5zdGFuY2VfbXlfYXBwcm92ZV9kZXNjcmlwdGlvblwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gIH0sXG4gIGlzUmVhZE9ubHk6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIHJldHVybiBBcHByb3ZlTWFuYWdlci5pc1JlYWRPbmx5KCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgaXNPcGluaW9uT2ZGaWVsZDogZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgIGlmIChhcHByb3ZlLnR5cGUgPT09IFwiY2NcIiAmJiBUZW1wbGF0ZS5pbnN0YW5jZSgpLmRhdGEubmFtZSkge1xuICAgICAgaWYgKFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5uYW1lID09PSBhcHByb3ZlLnNpZ25fZmllbGRfY29kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LFxuICBtYXJrRG93blRvSHRtbDogZnVuY3Rpb24obWFya0Rvd25TdHJpbmcpIHtcbiAgICBpZiAobWFya0Rvd25TdHJpbmcpIHtcbiAgICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgbWFya2VkID0gTnBtLnJlcXVpcmUoJ21hcmtlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFNwYWNlYmFycy5TYWZlU3RyaW5nKG1hcmtlZC5wYXJzZShtYXJrRG93blN0cmluZykpO1xuICAgIH1cbiAgfSxcbiAgc3RlcHM6IGZ1bmN0aW9uKGZpZWxkX2Zvcm11bGEsIHN0ZXAsIG9ubHlfY2Nfb3BpbmlvbiwgaW1hZ2Vfc2lnbikge1xuICAgIHZhciByZWYsIHJlZjEsIHJlZjIsIHN0ZXBzO1xuICAgIHN0ZXBzID0gW107XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBpZiAoIWZpZWxkX2Zvcm11bGEpIHtcbiAgICAgICAgZmllbGRfZm9ybXVsYSA9IChyZWYgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2VGb3JtVmVyc2lvbigpKSAhPSBudWxsID8gKHJlZjEgPSByZWYuZmllbGRzKSAhPSBudWxsID8gcmVmMS5maW5kUHJvcGVydHlCeVBLKFwiY29kZVwiLCB0aGlzLm5hbWUpLmZvcm11bGEgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICB9XG4gICAgICBzdGVwcyA9IEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMuZ2V0T3BpbmlvbkZpZWxkU3RlcHNOYW1lKGZpZWxkX2Zvcm11bGEsIChyZWYyID0gVGVtcGxhdGUuaW5zdGFuY2UoKSkgIT0gbnVsbCA/IHJlZjIuZGF0YS50b3Bfa2V5d29yZHMgOiB2b2lkIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGVwcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0ZXBOYW1lOiBzdGVwLFxuICAgICAgICAgIG9ubHlfY2Nfb3Bpbmlvbjogb25seV9jY19vcGluaW9uLFxuICAgICAgICAgIGltYWdlX3NpZ246IGltYWdlX3NpZ25cbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9LFxuICBpbWFnZVNpZ25EYXRhOiBmdW5jdGlvbihoYW5kbGVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVzZXI6IGhhbmRsZXJcbiAgICB9O1xuICB9LFxuICBzaG93U2lnbkltYWdlOiBmdW5jdGlvbihoYW5kbGVyLCBpbWFnZV9zaWduLCBqdWRnZSkge1xuICAgIHZhciBzcGFjZVVzZXJTaWduO1xuICAgIGlmIChbJ3JldHVybmVkJywgJ3Rlcm1pbmF0ZWQnLCAncmV0cmlldmVkJ10uaW5jbHVkZXMoanVkZ2UpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNwYWNlVXNlclNpZ24gPSBJbWFnZVNpZ24uaGVscGVycy5zcGFjZVVzZXJTaWduKGhhbmRsZXIpO1xuICAgIGlmICgoc3BhY2VVc2VyU2lnbiAhPSBudWxsID8gc3BhY2VVc2VyU2lnbi5zaWduIDogdm9pZCAwKSAmJiBpbWFnZV9zaWduKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgZ2V0TGFzdFNpZ25BcHByb3ZlOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaW5zO1xuICAgIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIHJldHVybiBfLmxhc3QoVHJhY2VzTWFuYWdlci5nZXRIYW5kbGVyU2lnblNob3dBcHByb3ZlcyhpbnMsIE1ldGVvci51c2VySWQoKSkpO1xuICB9LFxuICBsYXN0TXlBcHByb3ZlRGVzY3JpcHRpb246IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcHByb3ZlcywgY3VycmVudFN0ZXAsIHJlZiwgdHJhY2VzO1xuICAgIHRyYWNlcyA9IEluc3RhbmNlZm9ybVRlbXBsYXRlLmhlbHBlcnMudHJhY2VzKCk7XG4gICAgY3VycmVudFN0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcbiAgICBhcHByb3ZlcyA9IF8uY2xvbmUodHJhY2VzW2N1cnJlbnRTdGVwLm5hbWVdKTtcbiAgICBhcHByb3ZlcyA9IGFwcHJvdmVzLmZpbHRlclByb3BlcnR5KFwiaGFuZGxlclwiLCBNZXRlb3IudXNlcklkKCkpO1xuICAgIGlmIChhcHByb3Zlcy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gKHJlZiA9IGFwcHJvdmVzW2FwcHJvdmVzLmxlbmd0aCAtIDJdKSAhPSBudWxsID8gcmVmLmRlc2NyaXB0aW9uIDogdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfSxcbiAgc2hvd0FwcHJvdmU6IGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICB2YXIgcmVmLCByZWYxO1xuICAgIGlmICghYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgfHwgYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUgPT09ICgocmVmID0gVGVtcGxhdGUuaW5zdGFuY2UoKSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLmRhdGEpICE9IG51bGwgPyByZWYxLm5hbWUgOiB2b2lkIDAgOiB2b2lkIDApKSB7XG4gICAgICBpZiAoYXBwcm92ZSAhPSBudWxsID8gYXBwcm92ZS5pc19yZWFkIDogdm9pZCAwKSB7XG4gICAgICAgIGlmIChhcHByb3ZlLmlzX2ZpbmlzaGVkKSB7XG4gICAgICAgICAgcmV0dXJuIFtcImFwcHJvdmVkXCIsIFwicmVqZWN0ZWRcIiwgXCJzdWJtaXR0ZWRcIiwgXCJyZWFkZWRcIl0uaW5jbHVkZXMoYXBwcm92ZS5qdWRnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBqdWRnZV9kZXNjcmlwdGlvbjogZnVuY3Rpb24oanVkZ2UpIHtcbiAgICByZXR1cm4gdChqdWRnZSArIFwiX2Rlc2NyaXB0aW9uXCIpO1xuICB9LFxuICBpc19hcHByb3ZlZDogZnVuY3Rpb24oanVkZ2UpIHtcbiAgICByZXR1cm4gXCJhcHByb3ZlZFwiID09PSBqdWRnZTtcbiAgfSxcbiAgaXNfcmVqZWN0ZWQ6IGZ1bmN0aW9uKGp1ZGdlKSB7XG4gICAgcmV0dXJuIFwicmVqZWN0ZWRcIiA9PT0ganVkZ2U7XG4gIH0sXG4gIGlzX3JlYWRlZDogZnVuY3Rpb24oanVkZ2UpIHtcbiAgICByZXR1cm4gW1wiYXBwcm92ZWRcIiwgXCJyZWplY3RlZFwiLCBcInN1Ym1pdHRlZFwiLCBcInJlYWRlZFwiXS5pbmNsdWRlcyhqdWRnZSk7XG4gIH0sXG4gIGFkZENsYXNzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbmFtZSwgcmVmLCByZWYxO1xuICAgIG5hbWUgPSAocmVmID0gVGVtcGxhdGUuaW5zdGFuY2UoKSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLmRhdGEpICE9IG51bGwgPyByZWYxLm5hbWUgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlLCBlbGVtZW50O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZWxlbWVudCA9ICQoXCIuYXV0b21hdGljLm9waW5pb24tZmllbGQtXCIgKyBuYW1lKTtcbiAgICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwgPyBlbGVtZW50LmlzKFwidGRcIikgOiB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmFkZENsYXNzKCdmaWVsZC1lZGl0YWJsZScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJChcIi5pbnN0YW5jZS1zaWduXCIsIGVsZW1lbnQpLmFkZENsYXNzKCdmaWVsZC1lZGl0YWJsZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZSA9IGVycm9yO1xuICAgICAgICByZXR1cm4gY29uc29sZS5sb2coZSk7XG4gICAgICB9XG4gICAgfSwgMSk7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5pZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gIEluc3RhbmNlU2lnblRleHQuaGVscGVycy5kZWZhdWx0RGVzY3JpcHRpb24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbG9jYWxlO1xuICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG4gICAgcmV0dXJuIFRlbXBsYXRlLmluc3RhbmNlKCkuZGF0YS5kZWZhdWx0X2Rlc2NyaXB0aW9uIHx8IFRBUGkxOG4uX18oXCJpbnN0YW5jZV9kZWZhdWx0X29waW5pb25cIiwge30sIGxvY2FsZSk7XG4gIH07XG59XG4iLCJtYXJrZWQgPSByZXF1aXJlKFwibWFya2VkXCIpXG5UcmFjZXNUZW1wbGF0ZS5oZWxwZXJzID1cblx0dHJhY2VTaG93U2lnbkltYWdlOiAoKS0+XG5cdFx0cmV0dXJuIE1ldGVvci5zZXR0aW5ncy5wdWJsaWMud29ya2Zsb3cudHJhY2VTaG93U2lnbkltYWdlICE9IGZhbHNlICYmIE1ldGVvci5zZXR0aW5ncy5wdWJsaWMud29ya2Zsb3cudHJhY2VTaG93U2lnbkltYWdlICE9ICdmYWxzZSdcblx0ZXF1YWxzOiAoYSwgYikgLT5cblx0XHRhID09IGJcblx0ZW1wdHk6IChhKSAtPlxuXHRcdGlmIGFcblx0XHRcdGEudG9TdHJpbmcoKS50cmltKCkubGVuZ3RoIDwgMVxuXHRcdGVsc2Vcblx0XHRcdHRydWVcblx0dW5lbXB0eTogKGEpIC0+XG5cdFx0aWYgYVxuXHRcdFx0YS50b1N0cmluZygpLnRyaW0oKS5sZW5ndGggPiAwXG5cdFx0ZWxzZVxuXHRcdFx0ZmFsc2VcblxuXHRhcHBlbmQ6IChhLCBiKSAtPlxuXHRcdGEgKyBiXG5cblx0ZGF0ZUZvcm1hdDogKGRhdGUpIC0+XG5cdFx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKCkgJiYgZGF0ZT8uZ2V0RnVsbFllYXIoKSA9PSAobmV3IERhdGUpLmdldEZ1bGxZZWFyKClcblx0XHRcdFx0cmV0dXJuIG1vbWVudChkYXRlKS5mb3JtYXQoJ01NLUREIEhIOm1tJyk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHJldHVybiBtb21lbnQoZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cblx0Z2V0U3RlcE5hbWU6IChzdGVwSWQpIC0+XG5cdFx0c3RlcCA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZVN0ZXAoc3RlcElkKVxuXHRcdGlmIHN0ZXBcblx0XHRcdHJldHVybiBzdGVwLm5hbWVcblx0XHRudWxsXG5cdHNob3dEZWxldGVCdXR0b246IChhcHByb3ZlZCkgLT5cblx0XHRpZiBhcHByb3ZlZCBhbmQgYXBwcm92ZWQudHlwZSA9PSAnY2MnIGFuZCBhcHByb3ZlZC5mcm9tX3VzZXIgPT0gTWV0ZW9yLnVzZXJJZCgpIGFuZCBhcHByb3ZlZC5pc19maW5pc2hlZCAhPSB0cnVlIGFuZCAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZVByaW50XCIpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdGZhbHNlXG5cdGlzU2hvd01vZGlmaWNhdGlvbkJ1dHRvbjogKGFwcHJvdmVkKSAtPlxuXHRcdGFwcHJvdmVfYWRtaW5zID0gTWV0ZW9yLnNldHRpbmdzPy5wdWJsaWM/LndvcmtmbG93Py5hcHByb3ZlX2FkbWluc1xuXHRcdGlmIGFwcHJvdmVfYWRtaW5zPy5sZW5ndGhcblx0XHRcdGlzU2hvdyA9IGFwcHJvdmVfYWRtaW5zPy5jb250YWlucyBNZXRlb3IudXNlcklkKClcblx0XHR1bmxlc3MgaXNTaG93XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRyZXR1cm4gYXBwcm92ZWQuaGFuZGxlciA9PSBNZXRlb3IudXNlcklkKClcblx0aXNFZGl0aW5nOiAoKSAtPlxuXHRcdCByZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2UoKS5pc19lZGl0aW5nPy5nZXQoKVxuXHRpc1Nob3dEZXNjcmlwdGlvbjogKGFwcHJvdmVkKS0+XG5cdFx0IyBkZWJ1Z2dlclxuXHRcdGlmIFRyYWNlc1RlbXBsYXRlLmhlbHBlcnMuaXNTaG93TW9kaWZpY2F0aW9uQnV0dG9uIGFwcHJvdmVkXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdHJldHVybiBhcHByb3ZlZC5kZXNjcmlwdGlvbj8udG9TdHJpbmcoKS50cmltKCkubGVuZ3RoID4gMFxuXHRpc0NDOiAoYXBwcm92ZWQpIC0+XG5cdFx0aWYgYXBwcm92ZWQgYW5kIGFwcHJvdmVkLnR5cGUgPT0gJ2NjJ1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRmYWxzZVxuXHRnZXRBcHByb3ZlU3RhdHVzSWNvbjogKGFwcHJvdmVKdWRnZSwgYXV0b1N1Ym1pdHRlZCkgLT5cblx0XHRpZiBhdXRvU3VibWl0dGVkID09IHRydWVcblx0XHRcdHJldHVybiAnaW9uIGlvbi1hbmRyb2lkLWFsYXJtLWNsb2NrJ1xuXHRcdCPlt7Lnu5PmnZ/nmoTmmL7npLrkuLrmoLjlh4Yv6amz5ZueL+WPlua2iOeUs+ivt++8jOW5tuaYvuekuuWkhOeQhueKtuaAgeWbvuagh1xuXHRcdGFwcHJvdmVTdGF0dXNJY29uID0gdW5kZWZpbmVkXG5cdFx0c3dpdGNoIGFwcHJvdmVKdWRnZVxuXHRcdFx0d2hlbiAnYXBwcm92ZWQnXG5cdFx0XHRcdCMg5bey5qC45YeGXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNJY29uID0gJ2lvbiBpb24tY2hlY2ttYXJrLXJvdW5kJ1xuXHRcdFx0d2hlbiAncmVqZWN0ZWQnXG5cdFx0XHRcdCMg5bey6amz5ZueXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNJY29uID0gJ2lvbiBpb24tY2xvc2Utcm91bmQnXG5cdFx0XHR3aGVuICd0ZXJtaW5hdGVkJ1xuXHRcdFx0XHQjIOW3suWPlua2iFxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9ICdmYSBmYS1iYW4nXG5cdFx0XHR3aGVuICdyZWFzc2lnbmVkJ1xuXHRcdFx0XHQjIOi9rOetvuaguFxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzSWNvbiA9ICdpb24gaW9uLWFuZHJvaWQtY29udGFjdCdcblx0XHRcdHdoZW4gJ3JlbG9jYXRlZCdcblx0XHRcdFx0IyDph43lrprkvY1cblx0XHRcdFx0YXBwcm92ZVN0YXR1c0ljb24gPSAnaW9uIGlvbi1hcnJvdy1zaHJpbmsnXG5cdFx0XHR3aGVuICdyZXRyaWV2ZWQnXG5cdFx0XHRcdCMg5bey5Y+W5ZueXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNJY29uID0gJ2ZhIGZhLXVuZG8nXG5cdFx0XHRlbHNlXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNJY29uID0gJydcblx0XHRcdFx0YnJlYWtcblx0XHRhcHByb3ZlU3RhdHVzSWNvblxuXHRnZXRBcHByb3ZlU3RhdHVzVGV4dDogKGFwcHJvdmVKdWRnZSwgYXV0b1N1Ym1pdHRlZCkgLT5cblx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGVcblx0XHRcdGlmIGxvY2FsZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09ICd6aC1jbidcblx0XHRcdFx0bG9jYWxlID0gXCJ6aC1DTlwiXG5cdFx0ZWxzZVxuXHRcdFx0bG9jYWxlID0gU2Vzc2lvbi5nZXQoXCJUQVBpMThuOjpsb2FkZWRfbGFuZ1wiKVxuXHRcdCPlt7Lnu5PmnZ/nmoTmmL7npLrkuLrmoLjlh4Yv6amz5ZueL+WPlua2iOeUs+ivt++8jOW5tuaYvuekuuWkhOeQhueKtuaAgeWbvuagh1xuXHRcdGlmIGF1dG9TdWJtaXR0ZWQgPT0gdHJ1ZVxuXHRcdFx0cmV0dXJuIFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmVfdGltZW91dF9hdXRvX3N1Ym1pdHRlZCcsIHt9LCBsb2NhbGUpXG5cdFx0YXBwcm92ZVN0YXR1c1RleHQgPSB1bmRlZmluZWRcblx0XHRzd2l0Y2ggYXBwcm92ZUp1ZGdlXG5cdFx0XHR3aGVuICdhcHByb3ZlZCdcblx0XHRcdFx0IyDlt7LmoLjlh4Zcblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSBhcHByb3ZlZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHR3aGVuICdyZWplY3RlZCdcblx0XHRcdFx0IyDlt7LpqbPlm55cblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZWplY3RlZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHR3aGVuICd0ZXJtaW5hdGVkJ1xuXHRcdFx0XHQjIOW3suWPlua2iFxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzVGV4dCA9IFRBUGkxOG4uX18oJ0luc3RhbmNlIFN0YXRlIHRlcm1pbmF0ZWQnLCB7fSwgbG9jYWxlKVxuXHRcdFx0d2hlbiAncmVhc3NpZ25lZCdcblx0XHRcdFx0IyDovaznrb7moLhcblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZWFzc2lnbmVkJywge30sIGxvY2FsZSlcblx0XHRcdHdoZW4gJ3JlbG9jYXRlZCdcblx0XHRcdFx0IyDph43lrprkvY1cblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZWxvY2F0ZWQnLCB7fSwgbG9jYWxlKVxuXHRcdFx0d2hlbiAncmV0cmlldmVkJ1xuXHRcdFx0XHQjIOW3suWPluWbnlxuXHRcdFx0XHRhcHByb3ZlU3RhdHVzVGV4dCA9IFRBUGkxOG4uX18oJ0luc3RhbmNlIFN0YXRlIHJldHJpZXZlZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHR3aGVuICdyZXR1cm5lZCdcblx0XHRcdFx0IyDlt7LpgIDlm55cblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZXR1cm5lZCcsIHt9LCBsb2NhbGUpXG5cdFx0XHR3aGVuICdyZWFkZWQnXG5cdFx0XHRcdCMg5bey6ZiFXG5cdFx0XHRcdGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVhZGVkJywge30sIGxvY2FsZSlcblx0XHRcdGVsc2Vcblx0XHRcdFx0YXBwcm92ZVN0YXR1c1RleHQgPSAnJ1xuXHRcdFx0XHRicmVha1xuXHRcdGFwcHJvdmVTdGF0dXNUZXh0XG5cdFxuXHRnZXRBcHByb3ZlSnVkZ2VDbGFzczogKGFwcHJvdmVKdWRnZSwgYXV0b1N1Ym1pdHRlZCkgLT5cblx0XHRpZiBhdXRvU3VibWl0dGVkID09IHRydWVcblx0XHRcdHJldHVybiAnYXV0b1N1Ym1pdHRlZCdcblx0XHRyZXR1cm4gYXBwcm92ZUp1ZGdlXG5cblx0X3Q6IChrZXkpLT5cblx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXkpXG5cblx0bXlBcHByb3ZlRGVzY3JpcHRpb246IChhcHByb3ZlSWQpLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0bXlBcHByb3ZlID0gVGVtcGxhdGUuaW5zdGFuY2UoKT8ubXlBcHByb3ZlPy5nZXQoKVxuXHRcdFx0XHRpZiBteUFwcHJvdmUgJiYgbXlBcHByb3ZlLmlkID09IGFwcHJvdmVJZFxuXHRcdFx0XHRcdGlmICFTZXNzaW9uLmdldChcImluc3RhbmNlX215X2FwcHJvdmVfZGVzY3JpcHRpb25cIilcblx0XHRcdFx0XHRcdHJldHVybiBteUFwcHJvdmU/LmRlc2NyaXB0aW9uIHx8IFwiXCJcblx0XHRcdFx0XHRyZXR1cm4gU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZV9teV9hcHByb3ZlX2Rlc2NyaXB0aW9uXCIpXG5cdGlzRm9yd2FyZDogKGFwcHJvdmVkKSAtPlxuXHRcdGlmIGFwcHJvdmVkIGFuZCBhcHByb3ZlZC50eXBlID09ICdmb3J3YXJkJ1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRmYWxzZVxuXHRzaG93Rm9yd2FyZERlbGV0ZUJ1dHRvbjogKGFwcHJvdmUpIC0+XG5cdFx0aWYgZGIuaW5zdGFuY2VzLmZpbmQoYXBwcm92ZS5mb3J3YXJkX2luc3RhbmNlKS5jb3VudCgpIGlzIDBcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGlmIGFwcHJvdmUgYW5kIGFwcHJvdmUudHlwZSA9PSAnZm9yd2FyZCcgYW5kIGFwcHJvdmUuZnJvbV91c2VyID09IE1ldGVvci51c2VySWQoKSBhbmQgIVNlc3Npb24uZ2V0KFwiaW5zdGFuY2VQcmludFwiKSBhbmQgYXBwcm92ZS5qdWRnZSBpc250ICd0ZXJtaW5hdGVkJ1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRmYWxzZVxuXHRtYXJrRG93blRvSHRtbDogKG1hcmtEb3duU3RyaW5nKS0+XG5cdFx0aWYgbWFya0Rvd25TdHJpbmdcblx0XHRcdCMgcmVuZGVyZXIgPSBuZXcgTWFya2Rvd24uUmVuZGVyZXIoKTtcblx0XHRcdCMgcmVuZGVyZXIubGluayA9ICggaHJlZiwgdGl0bGUsIHRleHQgKSAtPlxuXHRcdFx0IyBcdHJldHVybiBcIjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPScje2hyZWZ9JyB0aXRsZT0nI3t0aXRsZX0nPiN7dGV4dH08L2E+XCJcblx0XHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0XHRtYXJrZWQgPSBOcG0ucmVxdWlyZSgnbWFya2VkJylcblx0XHRcdHJldHVybiBTcGFjZWJhcnMuU2FmZVN0cmluZyhtYXJrZWQucGFyc2UobWFya0Rvd25TdHJpbmcpKVxuXHRpc0Rpc3RyaWJ1dGU6IChhcHByb3ZlKSAtPlxuXHRcdGlmIGFwcHJvdmUgYW5kIGFwcHJvdmUudHlwZSA9PSAnZGlzdHJpYnV0ZSdcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0ZmFsc2Vcblx0c2hvd0Rpc3RyaWJ1dGVEZWxldGVCdXR0b246IChhcHByb3ZlKSAtPlxuXHRcdGlmIGRiLmluc3RhbmNlcy5maW5kKGFwcHJvdmUuZm9yd2FyZF9pbnN0YW5jZSkuY291bnQoKSBpcyAwXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHRcdGlmIGFwcHJvdmUgYW5kIGFwcHJvdmUudHlwZSA9PSAnZGlzdHJpYnV0ZScgYW5kICFTZXNzaW9uLmdldChcImluc3RhbmNlUHJpbnRcIikgYW5kIGFwcHJvdmUuanVkZ2UgaXNudCAndGVybWluYXRlZCdcblx0XHRcdCMg5rWB56iL566h55CG5ZGY5ZKM57O757uf566h55CG5ZGY77yM5Y+v5Lul5omn6KGM5Lu75L2V5oOF5Ya15LiL55qE5paH5Lu25Y+W5raI5YiG5Y+RXG5cdFx0XHRpbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBhcHByb3ZlLmluc3RhbmNlfSwge2ZpZWxkczoge2Zsb3c6IDEsIHNwYWNlOiAxfX0pXG5cdFx0XHRpZiBpbnMgYW5kIGlucy5mbG93IGFuZCBpbnMuc3BhY2Vcblx0XHRcdFx0aWYgV29ya2Zsb3dNYW5hZ2VyLmhhc0Zsb3dBZG1pblBlcm1pc3Npb24oaW5zLmZsb3csIGlucy5zcGFjZSwgTWV0ZW9yLnVzZXJJZCgpKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlXG5cblx0XHRcdGlmIGFwcHJvdmUuZnJvbV91c2VyID09IE1ldGVvci51c2VySWQoKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXG5cdFx0ZmFsc2VcblxuXHRmaW5pc2hEYXRlU2NoZW1hOiAoKSAtPlxuXHRcdGlmIFN0ZWVkb3MuaXNBbmRyb2lkT3JJT1MoKVxuXHRcdFx0cmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoe1xuXHRcdFx0XHRmaW5pc2hfZGF0ZToge1xuXHRcdFx0XHRcdGF1dG9mb3JtOiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImRhdGV0aW1lLWxvY2FsXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG9wdGlvbmFsOiBmYWxzZSxcblx0XHRcdFx0XHR0eXBlOiBEYXRlXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoe1xuXHRcdFx0XHRmaW5pc2hfZGF0ZToge1xuXHRcdFx0XHRcdGF1dG9mb3JtOiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImJvb3RzdHJhcC1kYXRldGltZXBpY2tlclwiXG5cdFx0XHRcdFx0XHRyZWFkb25seTogdHJ1ZVxuXHRcdFx0XHRcdFx0ZGF0ZVRpbWVQaWNrZXJPcHRpb25zOntcblx0XHRcdFx0XHRcdFx0Zm9ybWF0OiBcIllZWVktTU0tREQgSEg6bW1cIixcblx0XHRcdFx0XHRcdFx0aWdub3JlUmVhZG9ubHk6dHJ1ZSxcblx0XHRcdFx0XHRcdFx0bG9jYWxlOiBTZXNzaW9uLmdldChcIlRBUGkxOG46OmxvYWRlZF9sYW5nXCIpLFxuXHRcdFx0XHRcdFx0XHR3aWRnZXRQb3NpdGlvbmluZzp7XG5cdFx0XHRcdFx0XHRcdFx0aG9yaXpvbnRhbDogJ3JpZ2h0J1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvcHRpb25hbDogZmFsc2UsXG5cdFx0XHRcdFx0dHlwZTogRGF0ZVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXG5cdGZpbmlzaERhdGVWYWx1ZXM6ICgpIC0+XG5cdFx0cmV0dXJuIHtcblx0XHRcdGZpbmlzaF9kYXRlOnRoaXMuZmluaXNoX2RhdGVcblx0XHR9O1xuXG5cdCMjI1xuICAgIFx05q2k5Ye95pWw55So5LqO5o6n5Yi25piv5ZCm5pi+56S6dHJhY2VzIHZpZXdcbiAgICBcdHRydWU6IOaYvuekunRyYWNlcyB2aWV3LOetvuaguOWOhueoi+aMiemSrueCueWHu+WQjuaYr+ebtOaOpeWumuS9jeWIsHRyYWNlcyB2aWV3XG4gICAgXHRmYWxzZTog5LiN5pi+56S6dHJhY2VzIHZpZXfvvIznrb7moLjljobnqIvmjInpkq7ngrnlh7vlkI4s5LulTW9kYWwg5pa55byP5pi+56S6dHJhY2VzIHZpZXdcblx0IyMjXG5cdHNob3dUcmFjZXNWaWV3OiAoZm9ybSwgZm9ybV92ZXJzaW9uKS0+XG4jXHRcdHJldHVybiAhKEluc3RhbmNlTWFuYWdlci5pc1RhYmxlU3R5bGUoZm9ybSkgJiYgSW5zdGFuY2Vmb3JtVGVtcGxhdGUuaGVscGVycy5pbmNsdWRlc09waW5pb25GaWVsZChmb3JtLCBmb3JtX3ZlcnNpb24pKVxuXG5cdFx0c2hvd19tb2RhbF90cmFjZXNfbGlzdCA9IGRiLnNwYWNlX3NldHRpbmdzLmZpbmRPbmUoe3NwYWNlOiBTZXNzaW9uLmdldChcInNwYWNlSWRcIiksIGtleTogXCJzaG93X21vZGFsX3RyYWNlc19saXN0XCJ9KT8udmFsdWVzIHx8IGZhbHNlXG5cblx0XHRyZXR1cm4gIXNob3dfbW9kYWxfdHJhY2VzX2xpc3RcblxuXHRnZXRJbnN0YW5jZVN0YXRlVGV4dDogKGluc3RhbmNlX2lkKS0+XG5cdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlXG5cdFx0XHRpZiBsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnemgtY24nXG5cdFx0XHRcdGxvY2FsZSA9IFwiemgtQ05cIlxuXHRcdGVsc2Vcblx0XHRcdGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIilcblxuXHRcdGlucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGluc3RhbmNlX2lkfSwge2ZpZWxkczoge3N0YXRlOiAxLCBpc19yZWFkOiAxfX0pXG5cdFx0aWYgbm90IGluc1xuXHRcdFx0cmV0dXJuIFRBUGkxOG4uX18oJ2luc3RhbmNlX2RlbGV0ZWQnLCB7fSwgbG9jYWxlKVxuXG5cdFx0dGV4dCA9ICcnXG5cdFx0aWYgaW5zLnN0YXRlIGlzICdjb21wbGV0ZWQnXG5cdFx0XHR0ZXh0ID0gVEFQaTE4bi5fXygnY29tcGxldGVkJywge30sIGxvY2FsZSlcblx0XHRlbHNlIGlmIGlucy5zdGF0ZSBpcyAncGVuZGluZydcblx0XHRcdHRleHQgPSBUQVBpMThuLl9fKCdwZW5kaW5nJywge30sIGxvY2FsZSlcblx0XHRlbHNlIGlmIGlucy5zdGF0ZSBpcyAnZHJhZnQnXG5cdFx0XHRpZiBpbnMuaXNfcmVhZFxuXHRcdFx0XHR0ZXh0ID0gVEFQaTE4bi5fXygnaW5zdGFuY2VfYXBwcm92ZV9yZWFkJywge30sIGxvY2FsZSlcblx0XHRcdGVsc2Vcblx0XHRcdFx0dGV4dCA9IFRBUGkxOG4uX18oJ2luc3RhbmNlX2FwcHJvdmVfbm90X3lldF9oYW5kbGVkJywge30sIGxvY2FsZSlcblxuXHRcdHJldHVybiB0ZXh0XG5cblx0Z2V0SW5zdGFuY2VTdGF0ZUNvbG9yOiAoaW5zdGFuY2VfaWQpLT5cblx0XHRpbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpbnN0YW5jZV9pZH0sIHtmaWVsZHM6IHtzdGF0ZTogMSwgaXNfcmVhZDogMX19KVxuXHRcdGlmIG5vdCBpbnNcblx0XHRcdHJldHVybiBcIlwiXG5cblx0XHRjbGEgPSAnJ1xuXHRcdGlmIGlucy5zdGF0ZSBpcyAnZHJhZnQnXG5cdFx0XHRpZiBpbnMuaXNfcmVhZFxuXHRcdFx0XHRjbGEgPSAnYmx1ZSdcblx0XHRcdGVsc2Vcblx0XHRcdFx0Y2xhID0gJ3JlZCdcblx0XHRyZXR1cm4gY2xhXG5cblx0Zmlyc3RUcmFjZTogKGluZGV4KS0+XG5cdFx0cmV0dXJuIGluZGV4IGlzIDBcblxuXHRsYXN0X2Rpc3RyaWJ1dGVfZnJvbTogKGluc3RhbmNlX2lkKS0+XG5cdFx0aW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaW5zdGFuY2VfaWQsIGRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZTogeyRleGlzdHM6IHRydWV9fSx7ZmllbGRzOntjcmVhdGVkOiAxLCBjcmVhdGVkX2J5OiAxfX0pXG5cdFx0aWYgaW5zXG5cdFx0XHRkaXNfaW5mbyA9IHt9XG5cdFx0XHR1c2VyID0ge31cblx0XHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0XHR1c2VyID0gVVVmbG93X2FwaS5nZXROYW1lRm9yVXNlcihpbnMuY3JlYXRlZF9ieSlcblx0XHRcdGVsc2UgaWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRcdHVzZXIgPSBkYi51c2Vycy5maW5kT25lKHtfaWQ6IGlucy5jcmVhdGVkX2J5fSwge2ZpZWxkczoge25hbWU6IDF9fSlcblxuXHRcdFx0aWYgdXNlci5uYW1lXG5cdFx0XHRcdGRpc19pbmZvLmZyb21fdXNlciA9IHVzZXIuX2lkXG5cdFx0XHRcdGRpc19pbmZvLmZyb21fdXNlcl9uYW1lID0gdXNlci5uYW1lXG5cdFx0XHRcdGRpc19pbmZvLmNyZWF0ZWQgPSBpbnMuY3JlYXRlZFxuXG5cdFx0XHRpZiBub3QgXy5pc0VtcHR5KGRpc19pbmZvKVxuXHRcdFx0XHRyZXR1cm4gZGlzX2luZm9cblx0XHRyZXR1cm5cblxuXHRpc0NDT3JEaXN0cmlidXRlT3JGb3J3YXJkVGVybWluYXRlZDogKGFwcHJvdmUpLT5cblx0XHRpZiAoYXBwcm92ZS50eXBlIGlzICdjYycgb3IgYXBwcm92ZS50eXBlIGlzICdkaXN0cmlidXRlJyBvciBhcHByb3ZlLnR5cGUgaXMgJ2ZvcndhcmQnKSBhbmQgYXBwcm92ZS5qdWRnZSBpcyAndGVybWluYXRlZCdcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0cmV0dXJuIGZhbHNlXG5cblx0anVkZ2VUZXJtaW5hdGVkOiAoanVkZ2UpLT5cblx0XHRyZXR1cm4ganVkZ2UgaXMgJ3Rlcm1pbmF0ZWQnXG5cblx0aW5zdGFuY2VFeGlzdHM6IChpbnN0YW5jZV9pZCktPlxuXHRcdHJldHVybiAhIWRiLmluc3RhbmNlcy5maW5kKGluc3RhbmNlX2lkKS5jb3VudCgpXG5cblx0YWdlbnREZXNjcmlwdGlvbjogKHVzZXJOYW1lKS0+XG5cdFx0aWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlXG5cdFx0XHRpZiBsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAnemgtY24nXG5cdFx0XHRcdGxvY2FsZSA9IFwiemgtQ05cIlxuXHRcdGVsc2Vcblx0XHRcdGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIilcblxuXHRcdHJldHVybiBUQVBpMThuLl9fKCdwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXNfZGVzY3JpcHRpb24nLCB7dXNlck5hbWU6IHVzZXJOYW1lfSwgbG9jYWxlKVxuXHRcblx0dHJhY2VOYW1lOiAoaW5zdGFuY2VfaWQsIHRyYWNlSWQpLT5cblx0XHRyZXR1cm4gXy5maW5kKGRiLmluc3RhbmNlcy5maW5kT25lKGluc3RhbmNlX2lkLCB7ZmllbGRzOiB7dHJhY2VzOiAxfX0pPy50cmFjZXMsICh0cmFjZSktPlxuXHRcdFx0XHRcdHJldHVybiB0cmFjZS5faWQgPT0gIHRyYWNlSWRcblx0XHQpPy5uYW1lXG5cblx0b2JqZWN0VXJsOiAob2JqZWN0X25hbWUsIHJlY29yZF9pZCwgYXBwX2lkKS0+XG5cdFx0cmV0dXJuIENyZWF0b3IuZ2V0T2JqZWN0VXJsKG9iamVjdF9uYW1lLCByZWNvcmRfaWQsIGFwcF9pZClcblxuXHRoYW5kbGVyRG9jOiAoaGFuZGxlcklkKS0+XG5cdFx0dXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mbyA9IE1ldGVvci5zZXR0aW5ncy5wdWJsaWM/LndvcmtmbG93Py51c2Vyc19jYW5fcmVhZF9jY19oYW5kbGVyX2RldGFpbF9pbmZvXG5cdFx0aWYgIXVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm8gb3IgIXVzZXJzX2Nhbl9yZWFkX2NjX2hhbmRsZXJfZGV0YWlsX2luZm8uaW5jbHVkZXMoTWV0ZW9yLnVzZXJJZCgpKVxuXHRcdFx0cmV0dXJuXG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRyZXR1cm4gVVVmbG93X2FwaS5nZXRDb250YWN0SW5mb0ZvclVzZXIoaGFuZGxlcklkLCBTZXNzaW9uLmdldCgnc3BhY2VJZCcpKVxuXHRcdGVsc2UgaWYgTWV0ZW9yLmlzU2VydmVyXG5cdFx0XHRyZXR1cm4gZGIudXNlcnMuZmluZE9uZShoYW5kbGVySWQpXG5cbmlmIE1ldGVvci5pc1NlcnZlclxuXHRUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLmRhdGVGb3JtYXQgPSAoZGF0ZSktPlxuXHRcdGlmIGRhdGVcblx0XHRcdHV0Y09mZnNldCA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS51dGNPZmZzZXRcblx0XHRcdHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZm9ybWF0RGF0ZShkYXRlLCB1dGNPZmZzZXQpO1xuXG5cdFRyYWNlc1RlbXBsYXRlLmhlbHBlcnMuX3QgPSAoa2V5KS0+XG5cdFx0bG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZVxuXHRcdHJldHVybiBUQVBpMThuLl9fKGtleSwge30sIGxvY2FsZSlcblxuXHRUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLnNob3dEZWxldGVCdXR0b24gPSAoYXBwcm92ZWQpIC0+XG5cdFx0cmV0dXJuIGZhbHNlO1xuXG5UcmFjZXNUZW1wbGF0ZS5ldmVudHMgPVxuXHQnY2xpY2sgLmNjLWFwcHJvdmUtcmVtb3ZlJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdGlmIGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC5jYWxsaW5nICogMSAhPSAxXG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuY2FsbGluZyA9IDFcblx0XHRcdCQoXCJpXCIsZXZlbnQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoXCJmYS1zcGluXCIpXG5cdFx0XHRpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKVxuXHRcdFx0YXBwcm92ZUlkID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuYXBwcm92ZVxuXHRcdFx0IyBDQUxMIOWIoOmZpGFwcHJvdmXlh73mlbDjgIJcblx0XHRcdCQoXCJib2R5XCIpLmFkZENsYXNzKFwibG9hZGluZ1wiKVxuXHRcdFx0TWV0ZW9yLmNhbGwgJ2NjX3JlbW92ZScsIGluc3RhbmNlSWQsIGFwcHJvdmVJZCwgKGVyciwgcmVzdWx0KSAtPlxuXHRcdFx0XHQkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIilcblx0XHRcdFx0aWYgZXJyXG5cdFx0XHRcdFx0dG9hc3RyLmVycm9yIGVyclxuXHRcdFx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC5jYWxsaW5nID0gMFxuXHRcdFx0XHRcdCQoXCJpXCIsZXZlbnQuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoXCJmYS1zcGluXCIpXG5cdFx0XHRcdGlmIHJlc3VsdCA9PSB0cnVlXG5cdFx0XHRcdFx0dG9hc3RyLnN1Y2Nlc3MoVEFQaTE4bi5fXyhcInJlbW92ZV9jY19hcHByb3ZlXCIpKTtcblx0XHRcdFx0XHRpZiAkKFwiLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbFwiKS5sZW5ndGhcblx0XHRcdFx0XHRcdE1vZGFsLmhpZGUgXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIlxuXHRcdFx0XHRyZXR1cm5cblx0XHRcdHJldHVyblxuXG5cdCdjbGljayAuaW5zdGFuY2UtdHJhY2UtZGV0YWlsLW1vZGFsIC5idG4tY2MtYXBwcm92ZS1yZW1vdmUnOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdGluc3RhbmNlSWQgPSBTZXNzaW9uLmdldCgnaW5zdGFuY2VJZCcpXG5cdFx0YXBwcm92ZUlkID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuYXBwcm92ZVxuXHRcdCMgIyBDQUxMIOWIoOmZpGFwcHJvdmXlh73mlbDjgIJcblx0XHQjICQoXCJib2R5XCIpLmFkZENsYXNzKFwibG9hZGluZ1wiKVxuXHRcdCMgTWV0ZW9yLmNhbGwgJ2NjX3JlbW92ZScsIGluc3RhbmNlSWQsIGFwcHJvdmVJZCwgKGVyciwgcmVzdWx0KSAtPlxuXHRcdCMgXHQkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIilcblx0XHQjIFx0aWYgZXJyXG5cdFx0IyBcdFx0dG9hc3RyLmVycm9yIGVyclxuXHRcdCMgXHRpZiByZXN1bHQgPT0gdHJ1ZVxuXHRcdCMgXHRcdHRvYXN0ci5zdWNjZXNzKFRBUGkxOG4uX18oXCJyZW1vdmVfY2NfYXBwcm92ZVwiKSk7XG5cdFx0IyBcdFx0TW9kYWwuaGlkZSBcImluc3RhbmNlX3RyYWNlX2RldGFpbF9tb2RhbFwiXG5cdFx0IyBcdHJldHVyblxuXHRcdCMgcmV0dXJuXG5cdFx0TW9kYWwuYWxsb3dNdWx0aXBsZSA9IHRydWVcblx0XHRNb2RhbC5zaG93ICdjYW5jZWxfY2NfbW9kYWwnXG5cblx0J2NsaWNrIC5hcHByb3ZlLWl0ZW0sLmFwcHJvdmUtZGVzY3JpcHRpb24nOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdCMgUEPkuIrpk77mjqXlhYHorrjnm7TmjqXngrnlvIDvvIzkuI3lho3miZPlvIDnrb7mibnljobnqIvor6bnu4Zcblx0XHR1bmxlc3MgJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhLmJ0bi1saW5rXCIpLmxlbmd0aFxuXHRcdFx0TW9kYWwuc2hvdyBcImluc3RhbmNlX3RyYWNlX2RldGFpbF9tb2RhbFwiLCB0aGlzXG5cblx0J3RhcGhvbGQgLmFwcHJvdmUtaXRlbSwuYXBwcm92ZS1kZXNjcmlwdGlvbic6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cdFx0IyDmiYvmnLrkuIrplb/mjInmiZPlvIDnrb7mibnljobnqIvor6bnu4bvvIzlpoLmnpzmmK/pk77mjqXplb/mjInmiZPlvIDlkI7kuIDmlL7miYvnqpflj6PlsLHlj4jlhbPmjonkuobvvIzmiYDku6XkuI3orqnpk77mjqXmiZPlvIDnrb7mibnljobnqIvor6bnu4Zcblx0XHR1bmxlc3MgJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhLmJ0bi1saW5rXCIpLmxlbmd0aFxuXHRcdFx0TW9kYWwuc2hvdyBcImluc3RhbmNlX3RyYWNlX2RldGFpbF9tb2RhbFwiLCB0aGlzXG5cblx0J2NsaWNrIC5hcHByb3ZlLWl0ZW0gYS5idG4tbGluaywuYXBwcm92ZS1kZXNjcmlwdGlvbiBhLmJ0bi1saW5rLC5hcHByb3ZlLWl0ZW0tZGlzdHJpYnV0ZSBhLmJ0bi1saW5rJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHQjIOaJi+acuuS4iueCueWHu+mTvuaOpe+8jOW8ueWHuuaWsOeql+WPo++8jOS4jeaUr+aMge+8jOWboOS4umFuZHJvaWTkuIrkvJrlvLnlh7rnmbvlvZXnlYzpnaJcblx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKClcblx0XHRcdHVzZXJJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0Py50YXJnZXRfdXNlcl9pZFxuXHRcdFx0Q3JlYXRvci5vcGVuU2FmZU9iamVjdFVybCgndXNlcnMnLCB1c2VySWQpXG5cblx0J3RhcGVuZCAuYXBwcm92ZS1pdGVtLC5hcHByb3ZlLWRlc2NyaXB0aW9uJzogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblx0XHQjIOS4iui/sOmVv+aMieaJk+W8gGFwcHJvdmXor6bnu4bnqpflj6PnmoTkuovku7Z0YXBob2xk5Lya6Kem5Y+R5omT5byA56qX5Y+j5ZCO55qEdG91Y2hlbmTkuovku7bvvIzpgKDmiJDplb/mjInmiZPlvIDnqpflj6PlkI7kuIDmlL7miYvnqpflj6PlsLHlj4jlhbPmjonkuoZcblx0XHQjIOi/memHjOWPquiDvemAmui/h+mYu+atonRhcGVuZOS6i+S7tijkuI3lj6/ku6XnlKh0b3VjaGVuZOS6i+S7tu+8jOWboOS4uuS8muW9seWTjXRhcGhvbGTlip/og73vvIzpgKDmiJDmsqHmnInplb/mjInmlYjmnpzml7bkuZ/kvJrop6blj5F0YXBob2xk5LqL5Lu2KeWGkuazoeadpemBv+WFjemXrumimOOAglxuXHRcdCMg6ZO+5o6l5YWB6K6455u05o6l54K55byAXG5cdFx0dW5sZXNzICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiYS5idG4tbGlua1wiKS5sZW5ndGhcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRyZXR1cm4gZmFsc2VcblxuXHQnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWZvcndhcmQtYXBwcm92ZS1yZW1vdmUnOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdGluc3RhbmNlSWQgPSBTZXNzaW9uLmdldCgnaW5zdGFuY2VJZCcpXG5cdFx0YXBwcm92ZUlkID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuYXBwcm92ZVxuXHRcdHRyYWNlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC50cmFjZVxuXHRcdCMgQ0FMTCDliKDpmaRhcHByb3Zl5Ye95pWw44CCXG5cdFx0JChcImJvZHlcIikuYWRkQ2xhc3MoXCJsb2FkaW5nXCIpXG5cdFx0TWV0ZW9yLmNhbGwgJ2ZvcndhcmRfcmVtb3ZlJywgaW5zdGFuY2VJZCwgdHJhY2VJZCwgYXBwcm92ZUlkLCAoZXJyLCByZXN1bHQpIC0+XG5cdFx0XHQkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIilcblx0XHRcdGlmIGVyclxuXHRcdFx0XHR0b2FzdHIuZXJyb3IgVEFQaTE4bi5fXyhlcnIucmVhc29uKVxuXHRcdFx0aWYgcmVzdWx0ID09IHRydWVcblx0XHRcdFx0dG9hc3RyLnN1Y2Nlc3MoVEFQaTE4bi5fXyhcImluc3RhbmNlX2FwcHJvdmVfZm9yd2FyZF9yZW1vdmVfc3VjY2Vzc1wiKSk7XG5cdFx0XHRcdE1vZGFsLmhpZGUgXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIlxuXHRcdFx0cmV0dXJuXG5cdFx0cmV0dXJuXG5cblx0J2NsaWNrIC5pbnN0YW5jZS10cmFjZS1kZXRhaWwtbW9kYWwgLmJ0bi1mb3J3YXJkLWluc3RhbmNlLWxvb2snOiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdGZvcndhcmRfc3BhY2UgPSBldmVudC50YXJnZXQuZGF0YXNldC5mb3J3YXJkc3BhY2Vcblx0XHRmb3J3YXJkX2luc3RhbmNlID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuZm9yd2FyZGluc3RhbmNlXG5cdFx0U3RlZWRvcy5vcGVuV2luZG93KFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJ3b3JrZmxvdy9zcGFjZS9cIiArIGZvcndhcmRfc3BhY2UgKyBcIi92aWV3L3JlYWRvbmx5L1wiICsgZm9yd2FyZF9pbnN0YW5jZSkpXG5cblx0J2NsaWNrIC5idG4tbW9kaWZpY2F0aW9uJ1x0OiAoZXZlbnQsIHRlbXBsYXRlKSAtPlxuXHRcdHRlbXBsYXRlLmlzX2VkaXRpbmcuc2V0KCF0ZW1wbGF0ZS5pc19lZGl0aW5nLmdldCgpKTtcblx0XHR1bmxlc3MgU3RlZWRvcy5pc0FuZHJvaWRPcklPUygpXG5cdFx0XHRUcmFja2VyLmFmdGVyRmx1c2ggLT5cblx0XHRcdFx0IyDmmL7npLrml6Xlv5fnmoTml7blgJnmiormu5rliqjmnaHlvoDkuIvnp7vngrnvvIzorqnml6XmnJ/mjqfku7bmmL7npLrlh7rkuIDpg6jliIbvvIzku6Xpgb/lhY3nlKjmiLfnnIvkuI3liLDml6XmnJ/mjqfku7Zcblx0XHRcdFx0JChcIiNpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWwgI2ZpbmlzaF9pbnB1dFwiKS5vbiBcImRwLnNob3dcIiwgKCkgLT5cblx0XHRcdFx0XHQkKFwiLm1vZGFsLWJvZHlcIikuc2Nyb2xsVG9wKDEwMClcblxuXHQnY2xpY2sgLmJ0bi1jYW5jZWxCdXQnIDogKGV2ZW50LCB0ZW1wbGF0ZSkgLT5cblxuXHRcdHRlbXBsYXRlLmlzX2VkaXRpbmcuc2V0KCF0ZW1wbGF0ZS5pc19lZGl0aW5nLmdldCgpKTtcblxuXHQnY2xpY2sgLmJ0bi1zYXZlQnV0JyA6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cdFx0IyB0ZW1wbGF0ZS5pc19lZGl0aW5nLnNldCghdGVtcGxhdGUuaXNfZWRpdGluZy5nZXQoKSlcblxuXHRcdGluc3RhbmNlSWQgPSBTZXNzaW9uLmdldCgnaW5zdGFuY2VJZCcpXG5cdFx0YXBwcm92ZUlkID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuYXBwcm92ZVxuXHRcdHRyYWNlSWQgPSBldmVudC50YXJnZXQuZGF0YXNldC50cmFjZVxuXHRcdG9waW5pb25faW5wdXQgPSAkKCcjb3Bpbmlvbl9pbnB1dCcpLnZhbCgpXG5cdFx0ZmluaXNoX2lucHV0ID0gQXV0b0Zvcm0uZ2V0RmllbGRWYWx1ZShcImZpbmlzaF9kYXRlXCIsIFwiZmluaXNoRGF0ZUF1dG9Gb3JtXCIpXG5cblx0XHQkKFwiYm9keVwiKS5hZGRDbGFzcyhcImxvYWRpbmdcIilcblx0XHRNZXRlb3IuY2FsbCAnY2hhbmdlX2FwcHJvdmVfaW5mbycsIGluc3RhbmNlSWQsIHRyYWNlSWQsIGFwcHJvdmVJZCwgb3Bpbmlvbl9pbnB1dCwgZmluaXNoX2lucHV0LCAoZXJyLCByZXN1bHQpLT5cblx0XHRcdCQoXCJib2R5XCIpLnJlbW92ZUNsYXNzKFwibG9hZGluZ1wiKVxuXHRcdFx0aWYgZXJyXG5cdFx0XHRcdHRvYXN0ci5lcnJvciBUQVBpMThuLl9fKGVyci5yZWFzb24pXG5cdFx0XHRpZiByZXN1bHQgPT0gdHJ1ZVxuXHRcdFx0XHR0b2FzdHIuc3VjY2Vzcyh0KFwiaW5zdGFuY2VfYXBwcm92ZV9tb2RhbF9tb2RpZmljYXRpb25zYXZlXCIpKVxuXHRcdFx0XHRNb2RhbC5oaWRlIFwiaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsXCJcblx0XHRcdHJldHVyblxuXG5cdCdjbGljayAuaW5zdGFuY2UtdHJhY2UtZGV0YWlsLW1vZGFsIC5idG4tZGlzdHJpYnV0ZS1hcHByb3ZlLXJlbW92ZSc6IChldmVudCwgdGVtcGxhdGUpIC0+XG5cdFx0TW9kYWwuYWxsb3dNdWx0aXBsZSA9IHRydWVcblx0XHRNb2RhbC5zaG93ICdjYW5jZWxfZGlzdHJpYnV0ZV9tb2RhbCdcbiIsInZhciBtYXJrZWQ7XG5cbm1hcmtlZCA9IHJlcXVpcmUoXCJtYXJrZWRcIik7XG5cblRyYWNlc1RlbXBsYXRlLmhlbHBlcnMgPSB7XG4gIHRyYWNlU2hvd1NpZ25JbWFnZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXS53b3JrZmxvdy50cmFjZVNob3dTaWduSW1hZ2UgIT09IGZhbHNlICYmIE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXS53b3JrZmxvdy50cmFjZVNob3dTaWduSW1hZ2UgIT09ICdmYWxzZSc7XG4gIH0sXG4gIGVxdWFsczogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBhID09PSBiO1xuICB9LFxuICBlbXB0eTogZnVuY3Rpb24oYSkge1xuICAgIGlmIChhKSB7XG4gICAgICByZXR1cm4gYS50b1N0cmluZygpLnRyaW0oKS5sZW5ndGggPCAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG4gIHVuZW1wdHk6IGZ1bmN0aW9uKGEpIHtcbiAgICBpZiAoYSkge1xuICAgICAgcmV0dXJuIGEudG9TdHJpbmcoKS50cmltKCkubGVuZ3RoID4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgYXBwZW5kOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGEgKyBiO1xuICB9LFxuICBkYXRlRm9ybWF0OiBmdW5jdGlvbihkYXRlKSB7XG4gICAgaWYgKFN0ZWVkb3MuaXNNb2JpbGUoKSAmJiAoZGF0ZSAhPSBudWxsID8gZGF0ZS5nZXRGdWxsWWVhcigpIDogdm9pZCAwKSA9PT0gKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdCgnTU0tREQgSEg6bW0nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1vbWVudChkYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcbiAgICB9XG4gIH0sXG4gIGdldFN0ZXBOYW1lOiBmdW5jdGlvbihzdGVwSWQpIHtcbiAgICB2YXIgc3RlcDtcbiAgICBzdGVwID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlU3RlcChzdGVwSWQpO1xuICAgIGlmIChzdGVwKSB7XG4gICAgICByZXR1cm4gc3RlcC5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgc2hvd0RlbGV0ZUJ1dHRvbjogZnVuY3Rpb24oYXBwcm92ZWQpIHtcbiAgICBpZiAoYXBwcm92ZWQgJiYgYXBwcm92ZWQudHlwZSA9PT0gJ2NjJyAmJiBhcHByb3ZlZC5mcm9tX3VzZXIgPT09IE1ldGVvci51c2VySWQoKSAmJiBhcHByb3ZlZC5pc19maW5pc2hlZCAhPT0gdHJ1ZSAmJiAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZVByaW50XCIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBpc1Nob3dNb2RpZmljYXRpb25CdXR0b246IGZ1bmN0aW9uKGFwcHJvdmVkKSB7XG4gICAgdmFyIGFwcHJvdmVfYWRtaW5zLCBpc1Nob3csIHJlZiwgcmVmMSwgcmVmMjtcbiAgICBhcHByb3ZlX2FkbWlucyA9IChyZWYgPSBNZXRlb3Iuc2V0dGluZ3MpICE9IG51bGwgPyAocmVmMSA9IHJlZltcInB1YmxpY1wiXSkgIT0gbnVsbCA/IChyZWYyID0gcmVmMS53b3JrZmxvdykgIT0gbnVsbCA/IHJlZjIuYXBwcm92ZV9hZG1pbnMgOiB2b2lkIDAgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgaWYgKGFwcHJvdmVfYWRtaW5zICE9IG51bGwgPyBhcHByb3ZlX2FkbWlucy5sZW5ndGggOiB2b2lkIDApIHtcbiAgICAgIGlzU2hvdyA9IGFwcHJvdmVfYWRtaW5zICE9IG51bGwgPyBhcHByb3ZlX2FkbWlucy5jb250YWlucyhNZXRlb3IudXNlcklkKCkpIDogdm9pZCAwO1xuICAgIH1cbiAgICBpZiAoIWlzU2hvdykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gYXBwcm92ZWQuaGFuZGxlciA9PT0gTWV0ZW9yLnVzZXJJZCgpO1xuICB9LFxuICBpc0VkaXRpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWY7XG4gICAgcmV0dXJuIChyZWYgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLmlzX2VkaXRpbmcpICE9IG51bGwgPyByZWYuZ2V0KCkgOiB2b2lkIDA7XG4gIH0sXG4gIGlzU2hvd0Rlc2NyaXB0aW9uOiBmdW5jdGlvbihhcHByb3ZlZCkge1xuICAgIHZhciByZWY7XG4gICAgaWYgKFRyYWNlc1RlbXBsYXRlLmhlbHBlcnMuaXNTaG93TW9kaWZpY2F0aW9uQnV0dG9uKGFwcHJvdmVkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiAoKHJlZiA9IGFwcHJvdmVkLmRlc2NyaXB0aW9uKSAhPSBudWxsID8gcmVmLnRvU3RyaW5nKCkudHJpbSgpLmxlbmd0aCA6IHZvaWQgMCkgPiAwO1xuICB9LFxuICBpc0NDOiBmdW5jdGlvbihhcHByb3ZlZCkge1xuICAgIGlmIChhcHByb3ZlZCAmJiBhcHByb3ZlZC50eXBlID09PSAnY2MnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBnZXRBcHByb3ZlU3RhdHVzSWNvbjogZnVuY3Rpb24oYXBwcm92ZUp1ZGdlLCBhdXRvU3VibWl0dGVkKSB7XG4gICAgdmFyIGFwcHJvdmVTdGF0dXNJY29uO1xuICAgIGlmIChhdXRvU3VibWl0dGVkID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gJ2lvbiBpb24tYW5kcm9pZC1hbGFybS1jbG9jayc7XG4gICAgfVxuICAgIGFwcHJvdmVTdGF0dXNJY29uID0gdm9pZCAwO1xuICAgIHN3aXRjaCAoYXBwcm92ZUp1ZGdlKSB7XG4gICAgICBjYXNlICdhcHByb3ZlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNJY29uID0gJ2lvbiBpb24tY2hlY2ttYXJrLXJvdW5kJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWplY3RlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNJY29uID0gJ2lvbiBpb24tY2xvc2Utcm91bmQnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Rlcm1pbmF0ZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzSWNvbiA9ICdmYSBmYS1iYW4nO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlYXNzaWduZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzSWNvbiA9ICdpb24gaW9uLWFuZHJvaWQtY29udGFjdCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVsb2NhdGVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c0ljb24gPSAnaW9uIGlvbi1hcnJvdy1zaHJpbmsnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JldHJpZXZlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNJY29uID0gJ2ZhIGZhLXVuZG8nO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNJY29uID0gJyc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gYXBwcm92ZVN0YXR1c0ljb247XG4gIH0sXG4gIGdldEFwcHJvdmVTdGF0dXNUZXh0OiBmdW5jdGlvbihhcHByb3ZlSnVkZ2UsIGF1dG9TdWJtaXR0ZWQpIHtcbiAgICB2YXIgYXBwcm92ZVN0YXR1c1RleHQsIGxvY2FsZTtcbiAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICBsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlO1xuICAgICAgaWYgKGxvY2FsZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnemgtY24nKSB7XG4gICAgICAgIGxvY2FsZSA9IFwiemgtQ05cIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYWxlID0gU2Vzc2lvbi5nZXQoXCJUQVBpMThuOjpsb2FkZWRfbGFuZ1wiKTtcbiAgICB9XG4gICAgaWYgKGF1dG9TdWJtaXR0ZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBUQVBpMThuLl9fKCdpbnN0YW5jZV9hcHByb3ZlX3RpbWVvdXRfYXV0b19zdWJtaXR0ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICB9XG4gICAgYXBwcm92ZVN0YXR1c1RleHQgPSB2b2lkIDA7XG4gICAgc3dpdGNoIChhcHByb3ZlSnVkZ2UpIHtcbiAgICAgIGNhc2UgJ2FwcHJvdmVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSBhcHByb3ZlZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlamVjdGVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZWplY3RlZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Rlcm1pbmF0ZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzVGV4dCA9IFRBUGkxOG4uX18oJ0luc3RhbmNlIFN0YXRlIHRlcm1pbmF0ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWFzc2lnbmVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZWFzc2lnbmVkJywge30sIGxvY2FsZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVsb2NhdGVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZWxvY2F0ZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXRyaWV2ZWQnOlxuICAgICAgICBhcHByb3ZlU3RhdHVzVGV4dCA9IFRBUGkxOG4uX18oJ0luc3RhbmNlIFN0YXRlIHJldHJpZXZlZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JldHVybmVkJzpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSBUQVBpMThuLl9fKCdJbnN0YW5jZSBTdGF0ZSByZXR1cm5lZCcsIHt9LCBsb2NhbGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlYWRlZCc6XG4gICAgICAgIGFwcHJvdmVTdGF0dXNUZXh0ID0gVEFQaTE4bi5fXygnSW5zdGFuY2UgU3RhdGUgcmVhZGVkJywge30sIGxvY2FsZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXBwcm92ZVN0YXR1c1RleHQgPSAnJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBhcHByb3ZlU3RhdHVzVGV4dDtcbiAgfSxcbiAgZ2V0QXBwcm92ZUp1ZGdlQ2xhc3M6IGZ1bmN0aW9uKGFwcHJvdmVKdWRnZSwgYXV0b1N1Ym1pdHRlZCkge1xuICAgIGlmIChhdXRvU3VibWl0dGVkID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gJ2F1dG9TdWJtaXR0ZWQnO1xuICAgIH1cbiAgICByZXR1cm4gYXBwcm92ZUp1ZGdlO1xuICB9LFxuICBfdDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIFRBUGkxOG4uX18oa2V5KTtcbiAgfSxcbiAgbXlBcHByb3ZlRGVzY3JpcHRpb246IGZ1bmN0aW9uKGFwcHJvdmVJZCkge1xuICAgIHZhciBteUFwcHJvdmUsIHJlZiwgcmVmMTtcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcpIHtcbiAgICAgICAgbXlBcHByb3ZlID0gKHJlZiA9IFRlbXBsYXRlLmluc3RhbmNlKCkpICE9IG51bGwgPyAocmVmMSA9IHJlZi5teUFwcHJvdmUpICE9IG51bGwgPyByZWYxLmdldCgpIDogdm9pZCAwIDogdm9pZCAwO1xuICAgICAgICBpZiAobXlBcHByb3ZlICYmIG15QXBwcm92ZS5pZCA9PT0gYXBwcm92ZUlkKSB7XG4gICAgICAgICAgaWYgKCFTZXNzaW9uLmdldChcImluc3RhbmNlX215X2FwcHJvdmVfZGVzY3JpcHRpb25cIikpIHtcbiAgICAgICAgICAgIHJldHVybiAobXlBcHByb3ZlICE9IG51bGwgPyBteUFwcHJvdmUuZGVzY3JpcHRpb24gOiB2b2lkIDApIHx8IFwiXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBTZXNzaW9uLmdldChcImluc3RhbmNlX215X2FwcHJvdmVfZGVzY3JpcHRpb25cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGlzRm9yd2FyZDogZnVuY3Rpb24oYXBwcm92ZWQpIHtcbiAgICBpZiAoYXBwcm92ZWQgJiYgYXBwcm92ZWQudHlwZSA9PT0gJ2ZvcndhcmQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBzaG93Rm9yd2FyZERlbGV0ZUJ1dHRvbjogZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgIGlmIChkYi5pbnN0YW5jZXMuZmluZChhcHByb3ZlLmZvcndhcmRfaW5zdGFuY2UpLmNvdW50KCkgPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFwcHJvdmUgJiYgYXBwcm92ZS50eXBlID09PSAnZm9yd2FyZCcgJiYgYXBwcm92ZS5mcm9tX3VzZXIgPT09IE1ldGVvci51c2VySWQoKSAmJiAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZVByaW50XCIpICYmIGFwcHJvdmUuanVkZ2UgIT09ICd0ZXJtaW5hdGVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgbWFya0Rvd25Ub0h0bWw6IGZ1bmN0aW9uKG1hcmtEb3duU3RyaW5nKSB7XG4gICAgaWYgKG1hcmtEb3duU3RyaW5nKSB7XG4gICAgICBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICAgIG1hcmtlZCA9IE5wbS5yZXF1aXJlKCdtYXJrZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTcGFjZWJhcnMuU2FmZVN0cmluZyhtYXJrZWQucGFyc2UobWFya0Rvd25TdHJpbmcpKTtcbiAgICB9XG4gIH0sXG4gIGlzRGlzdHJpYnV0ZTogZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgIGlmIChhcHByb3ZlICYmIGFwcHJvdmUudHlwZSA9PT0gJ2Rpc3RyaWJ1dGUnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBzaG93RGlzdHJpYnV0ZURlbGV0ZUJ1dHRvbjogZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgIHZhciBpbnM7XG4gICAgaWYgKGRiLmluc3RhbmNlcy5maW5kKGFwcHJvdmUuZm9yd2FyZF9pbnN0YW5jZSkuY291bnQoKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYXBwcm92ZSAmJiBhcHByb3ZlLnR5cGUgPT09ICdkaXN0cmlidXRlJyAmJiAhU2Vzc2lvbi5nZXQoXCJpbnN0YW5jZVByaW50XCIpICYmIGFwcHJvdmUuanVkZ2UgIT09ICd0ZXJtaW5hdGVkJykge1xuICAgICAgaW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgICBfaWQ6IGFwcHJvdmUuaW5zdGFuY2VcbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgZmxvdzogMSxcbiAgICAgICAgICBzcGFjZTogMVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChpbnMgJiYgaW5zLmZsb3cgJiYgaW5zLnNwYWNlKSB7XG4gICAgICAgIGlmIChXb3JrZmxvd01hbmFnZXIuaGFzRmxvd0FkbWluUGVybWlzc2lvbihpbnMuZmxvdywgaW5zLnNwYWNlLCBNZXRlb3IudXNlcklkKCkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhcHByb3ZlLmZyb21fdXNlciA9PT0gTWV0ZW9yLnVzZXJJZCgpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIGZpbmlzaERhdGVTY2hlbWE6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChTdGVlZG9zLmlzQW5kcm9pZE9ySU9TKCkpIHtcbiAgICAgIHJldHVybiBuZXcgU2ltcGxlU2NoZW1hKHtcbiAgICAgICAgZmluaXNoX2RhdGU6IHtcbiAgICAgICAgICBhdXRvZm9ybToge1xuICAgICAgICAgICAgdHlwZTogXCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25hbDogZmFsc2UsXG4gICAgICAgICAgdHlwZTogRGF0ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBTaW1wbGVTY2hlbWEoe1xuICAgICAgICBmaW5pc2hfZGF0ZToge1xuICAgICAgICAgIGF1dG9mb3JtOiB7XG4gICAgICAgICAgICB0eXBlOiBcImJvb3RzdHJhcC1kYXRldGltZXBpY2tlclwiLFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICAgICAgICBkYXRlVGltZVBpY2tlck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgZm9ybWF0OiBcIllZWVktTU0tREQgSEg6bW1cIixcbiAgICAgICAgICAgICAgaWdub3JlUmVhZG9ubHk6IHRydWUsXG4gICAgICAgICAgICAgIGxvY2FsZTogU2Vzc2lvbi5nZXQoXCJUQVBpMThuOjpsb2FkZWRfbGFuZ1wiKSxcbiAgICAgICAgICAgICAgd2lkZ2V0UG9zaXRpb25pbmc6IHtcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAncmlnaHQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbmFsOiBmYWxzZSxcbiAgICAgICAgICB0eXBlOiBEYXRlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgZmluaXNoRGF0ZVZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbmlzaF9kYXRlOiB0aGlzLmZpbmlzaF9kYXRlXG4gICAgfTtcbiAgfSxcblxuICAvKlxuICAgICBcdOatpOWHveaVsOeUqOS6juaOp+WItuaYr+WQpuaYvuekunRyYWNlcyB2aWV3XG4gICAgIFx0dHJ1ZTog5pi+56S6dHJhY2VzIHZpZXcs562+5qC45Y6G56iL5oyJ6ZKu54K55Ye75ZCO5piv55u05o6l5a6a5L2N5YiwdHJhY2VzIHZpZXdcbiAgICAgXHRmYWxzZTog5LiN5pi+56S6dHJhY2VzIHZpZXfvvIznrb7moLjljobnqIvmjInpkq7ngrnlh7vlkI4s5LulTW9kYWwg5pa55byP5pi+56S6dHJhY2VzIHZpZXdcbiAgICovXG4gIHNob3dUcmFjZXNWaWV3OiBmdW5jdGlvbihmb3JtLCBmb3JtX3ZlcnNpb24pIHtcbiAgICB2YXIgcmVmLCBzaG93X21vZGFsX3RyYWNlc19saXN0O1xuICAgIHNob3dfbW9kYWxfdHJhY2VzX2xpc3QgPSAoKHJlZiA9IGRiLnNwYWNlX3NldHRpbmdzLmZpbmRPbmUoe1xuICAgICAgc3BhY2U6IFNlc3Npb24uZ2V0KFwic3BhY2VJZFwiKSxcbiAgICAgIGtleTogXCJzaG93X21vZGFsX3RyYWNlc19saXN0XCJcbiAgICB9KSkgIT0gbnVsbCA/IHJlZi52YWx1ZXMgOiB2b2lkIDApIHx8IGZhbHNlO1xuICAgIHJldHVybiAhc2hvd19tb2RhbF90cmFjZXNfbGlzdDtcbiAgfSxcbiAgZ2V0SW5zdGFuY2VTdGF0ZVRleHQ6IGZ1bmN0aW9uKGluc3RhbmNlX2lkKSB7XG4gICAgdmFyIGlucywgbG9jYWxlLCB0ZXh0O1xuICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgIGxvY2FsZSA9IFRlbXBsYXRlLmluc3RhbmNlKCkudmlldy50ZW1wbGF0ZS5zdGVlZG9zRGF0YS5sb2NhbGU7XG4gICAgICBpZiAobG9jYWxlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICd6aC1jbicpIHtcbiAgICAgICAgbG9jYWxlID0gXCJ6aC1DTlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhbGUgPSBTZXNzaW9uLmdldChcIlRBUGkxOG46OmxvYWRlZF9sYW5nXCIpO1xuICAgIH1cbiAgICBpbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGluc3RhbmNlX2lkXG4gICAgfSwge1xuICAgICAgZmllbGRzOiB7XG4gICAgICAgIHN0YXRlOiAxLFxuICAgICAgICBpc19yZWFkOiAxXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFpbnMpIHtcbiAgICAgIHJldHVybiBUQVBpMThuLl9fKCdpbnN0YW5jZV9kZWxldGVkJywge30sIGxvY2FsZSk7XG4gICAgfVxuICAgIHRleHQgPSAnJztcbiAgICBpZiAoaW5zLnN0YXRlID09PSAnY29tcGxldGVkJykge1xuICAgICAgdGV4dCA9IFRBUGkxOG4uX18oJ2NvbXBsZXRlZCcsIHt9LCBsb2NhbGUpO1xuICAgIH0gZWxzZSBpZiAoaW5zLnN0YXRlID09PSAncGVuZGluZycpIHtcbiAgICAgIHRleHQgPSBUQVBpMThuLl9fKCdwZW5kaW5nJywge30sIGxvY2FsZSk7XG4gICAgfSBlbHNlIGlmIChpbnMuc3RhdGUgPT09ICdkcmFmdCcpIHtcbiAgICAgIGlmIChpbnMuaXNfcmVhZCkge1xuICAgICAgICB0ZXh0ID0gVEFQaTE4bi5fXygnaW5zdGFuY2VfYXBwcm92ZV9yZWFkJywge30sIGxvY2FsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ID0gVEFQaTE4bi5fXygnaW5zdGFuY2VfYXBwcm92ZV9ub3RfeWV0X2hhbmRsZWQnLCB7fSwgbG9jYWxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRleHQ7XG4gIH0sXG4gIGdldEluc3RhbmNlU3RhdGVDb2xvcjogZnVuY3Rpb24oaW5zdGFuY2VfaWQpIHtcbiAgICB2YXIgY2xhLCBpbnM7XG4gICAgaW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBpbnN0YW5jZV9pZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBzdGF0ZTogMSxcbiAgICAgICAgaXNfcmVhZDogMVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghaW5zKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgY2xhID0gJyc7XG4gICAgaWYgKGlucy5zdGF0ZSA9PT0gJ2RyYWZ0Jykge1xuICAgICAgaWYgKGlucy5pc19yZWFkKSB7XG4gICAgICAgIGNsYSA9ICdibHVlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYSA9ICdyZWQnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2xhO1xuICB9LFxuICBmaXJzdFRyYWNlOiBmdW5jdGlvbihpbmRleCkge1xuICAgIHJldHVybiBpbmRleCA9PT0gMDtcbiAgfSxcbiAgbGFzdF9kaXN0cmlidXRlX2Zyb206IGZ1bmN0aW9uKGluc3RhbmNlX2lkKSB7XG4gICAgdmFyIGRpc19pbmZvLCBpbnMsIHVzZXI7XG4gICAgaW5zID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgX2lkOiBpbnN0YW5jZV9pZCxcbiAgICAgIGRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZToge1xuICAgICAgICAkZXhpc3RzOiB0cnVlXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmllbGRzOiB7XG4gICAgICAgIGNyZWF0ZWQ6IDEsXG4gICAgICAgIGNyZWF0ZWRfYnk6IDFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoaW5zKSB7XG4gICAgICBkaXNfaW5mbyA9IHt9O1xuICAgICAgdXNlciA9IHt9O1xuICAgICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgICB1c2VyID0gVVVmbG93X2FwaS5nZXROYW1lRm9yVXNlcihpbnMuY3JlYXRlZF9ieSk7XG4gICAgICB9IGVsc2UgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgICB1c2VyID0gZGIudXNlcnMuZmluZE9uZSh7XG4gICAgICAgICAgX2lkOiBpbnMuY3JlYXRlZF9ieVxuICAgICAgICB9LCB7XG4gICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICBuYW1lOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VyLm5hbWUpIHtcbiAgICAgICAgZGlzX2luZm8uZnJvbV91c2VyID0gdXNlci5faWQ7XG4gICAgICAgIGRpc19pbmZvLmZyb21fdXNlcl9uYW1lID0gdXNlci5uYW1lO1xuICAgICAgICBkaXNfaW5mby5jcmVhdGVkID0gaW5zLmNyZWF0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNFbXB0eShkaXNfaW5mbykpIHtcbiAgICAgICAgcmV0dXJuIGRpc19pbmZvO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgaXNDQ09yRGlzdHJpYnV0ZU9yRm9yd2FyZFRlcm1pbmF0ZWQ6IGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICBpZiAoKGFwcHJvdmUudHlwZSA9PT0gJ2NjJyB8fCBhcHByb3ZlLnR5cGUgPT09ICdkaXN0cmlidXRlJyB8fCBhcHByb3ZlLnR5cGUgPT09ICdmb3J3YXJkJykgJiYgYXBwcm92ZS5qdWRnZSA9PT0gJ3Rlcm1pbmF0ZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBqdWRnZVRlcm1pbmF0ZWQ6IGZ1bmN0aW9uKGp1ZGdlKSB7XG4gICAgcmV0dXJuIGp1ZGdlID09PSAndGVybWluYXRlZCc7XG4gIH0sXG4gIGluc3RhbmNlRXhpc3RzOiBmdW5jdGlvbihpbnN0YW5jZV9pZCkge1xuICAgIHJldHVybiAhIWRiLmluc3RhbmNlcy5maW5kKGluc3RhbmNlX2lkKS5jb3VudCgpO1xuICB9LFxuICBhZ2VudERlc2NyaXB0aW9uOiBmdW5jdGlvbih1c2VyTmFtZSkge1xuICAgIHZhciBsb2NhbGU7XG4gICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgbG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZTtcbiAgICAgIGlmIChsb2NhbGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3poLWNuJykge1xuICAgICAgICBsb2NhbGUgPSBcInpoLUNOXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2FsZSA9IFNlc3Npb24uZ2V0KFwiVEFQaTE4bjo6bG9hZGVkX2xhbmdcIik7XG4gICAgfVxuICAgIHJldHVybiBUQVBpMThuLl9fKCdwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXNfZGVzY3JpcHRpb24nLCB7XG4gICAgICB1c2VyTmFtZTogdXNlck5hbWVcbiAgICB9LCBsb2NhbGUpO1xuICB9LFxuICB0cmFjZU5hbWU6IGZ1bmN0aW9uKGluc3RhbmNlX2lkLCB0cmFjZUlkKSB7XG4gICAgdmFyIHJlZiwgcmVmMTtcbiAgICByZXR1cm4gKHJlZiA9IF8uZmluZCgocmVmMSA9IGRiLmluc3RhbmNlcy5maW5kT25lKGluc3RhbmNlX2lkLCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgdHJhY2VzOiAxXG4gICAgICB9XG4gICAgfSkpICE9IG51bGwgPyByZWYxLnRyYWNlcyA6IHZvaWQgMCwgZnVuY3Rpb24odHJhY2UpIHtcbiAgICAgIHJldHVybiB0cmFjZS5faWQgPT09IHRyYWNlSWQ7XG4gICAgfSkpICE9IG51bGwgPyByZWYubmFtZSA6IHZvaWQgMDtcbiAgfSxcbiAgb2JqZWN0VXJsOiBmdW5jdGlvbihvYmplY3RfbmFtZSwgcmVjb3JkX2lkLCBhcHBfaWQpIHtcbiAgICByZXR1cm4gQ3JlYXRvci5nZXRPYmplY3RVcmwob2JqZWN0X25hbWUsIHJlY29yZF9pZCwgYXBwX2lkKTtcbiAgfSxcbiAgaGFuZGxlckRvYzogZnVuY3Rpb24oaGFuZGxlcklkKSB7XG4gICAgdmFyIHJlZiwgcmVmMSwgdXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mbztcbiAgICB1c2Vyc19jYW5fcmVhZF9jY19oYW5kbGVyX2RldGFpbF9pbmZvID0gKHJlZiA9IE1ldGVvci5zZXR0aW5nc1tcInB1YmxpY1wiXSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLndvcmtmbG93KSAhPSBudWxsID8gcmVmMS51c2Vyc19jYW5fcmVhZF9jY19oYW5kbGVyX2RldGFpbF9pbmZvIDogdm9pZCAwIDogdm9pZCAwO1xuICAgIGlmICghdXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mbyB8fCAhdXNlcnNfY2FuX3JlYWRfY2NfaGFuZGxlcl9kZXRhaWxfaW5mby5pbmNsdWRlcyhNZXRlb3IudXNlcklkKCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChNZXRlb3IuaXNDbGllbnQpIHtcbiAgICAgIHJldHVybiBVVWZsb3dfYXBpLmdldENvbnRhY3RJbmZvRm9yVXNlcihoYW5kbGVySWQsIFNlc3Npb24uZ2V0KCdzcGFjZUlkJykpO1xuICAgIH0gZWxzZSBpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gICAgICByZXR1cm4gZGIudXNlcnMuZmluZE9uZShoYW5kbGVySWQpO1xuICAgIH1cbiAgfVxufTtcblxuaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICBUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLmRhdGVGb3JtYXQgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgdmFyIHV0Y09mZnNldDtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgdXRjT2Zmc2V0ID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLnV0Y09mZnNldDtcbiAgICAgIHJldHVybiBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZm9ybWF0RGF0ZShkYXRlLCB1dGNPZmZzZXQpO1xuICAgIH1cbiAgfTtcbiAgVHJhY2VzVGVtcGxhdGUuaGVscGVycy5fdCA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBsb2NhbGU7XG4gICAgbG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZTtcbiAgICByZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpO1xuICB9O1xuICBUcmFjZXNUZW1wbGF0ZS5oZWxwZXJzLnNob3dEZWxldGVCdXR0b24gPSBmdW5jdGlvbihhcHByb3ZlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cblxuVHJhY2VzVGVtcGxhdGUuZXZlbnRzID0ge1xuICAnY2xpY2sgLmNjLWFwcHJvdmUtcmVtb3ZlJzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgdmFyIGFwcHJvdmVJZCwgaW5zdGFuY2VJZDtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmNhbGxpbmcgKiAxICE9PSAxKSB7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuY2FsbGluZyA9IDE7XG4gICAgICAkKFwiaVwiLCBldmVudC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcyhcImZhLXNwaW5cIik7XG4gICAgICBpbnN0YW5jZUlkID0gU2Vzc2lvbi5nZXQoJ2luc3RhbmNlSWQnKTtcbiAgICAgIGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmU7XG4gICAgICAkKFwiYm9keVwiKS5hZGRDbGFzcyhcImxvYWRpbmdcIik7XG4gICAgICBNZXRlb3IuY2FsbCgnY2NfcmVtb3ZlJywgaW5zdGFuY2VJZCwgYXBwcm92ZUlkLCBmdW5jdGlvbihlcnIsIHJlc3VsdCkge1xuICAgICAgICAkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIik7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICB0b2FzdHIuZXJyb3IoZXJyKTtcbiAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQuY2FsbGluZyA9IDA7XG4gICAgICAgICAgJChcImlcIiwgZXZlbnQuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoXCJmYS1zcGluXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgICB0b2FzdHIuc3VjY2VzcyhUQVBpMThuLl9fKFwicmVtb3ZlX2NjX2FwcHJvdmVcIikpO1xuICAgICAgICAgIGlmICgkKFwiLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbFwiKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIE1vZGFsLmhpZGUoXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gICdjbGljayAuaW5zdGFuY2UtdHJhY2UtZGV0YWlsLW1vZGFsIC5idG4tY2MtYXBwcm92ZS1yZW1vdmUnOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICB2YXIgYXBwcm92ZUlkLCBpbnN0YW5jZUlkO1xuICAgIGluc3RhbmNlSWQgPSBTZXNzaW9uLmdldCgnaW5zdGFuY2VJZCcpO1xuICAgIGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmU7XG4gICAgTW9kYWwuYWxsb3dNdWx0aXBsZSA9IHRydWU7XG4gICAgcmV0dXJuIE1vZGFsLnNob3coJ2NhbmNlbF9jY19tb2RhbCcpO1xuICB9LFxuICAnY2xpY2sgLmFwcHJvdmUtaXRlbSwuYXBwcm92ZS1kZXNjcmlwdGlvbic6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIGlmICghJChldmVudC50YXJnZXQpLmNsb3Nlc3QoXCJhLmJ0bi1saW5rXCIpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIE1vZGFsLnNob3coXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIiwgdGhpcyk7XG4gICAgfVxuICB9LFxuICAndGFwaG9sZCAuYXBwcm92ZS1pdGVtLC5hcHByb3ZlLWRlc2NyaXB0aW9uJzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgaWYgKCEkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChcImEuYnRuLWxpbmtcIikubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gTW9kYWwuc2hvdyhcImluc3RhbmNlX3RyYWNlX2RldGFpbF9tb2RhbFwiLCB0aGlzKTtcbiAgICB9XG4gIH0sXG4gICdjbGljayAuYXBwcm92ZS1pdGVtIGEuYnRuLWxpbmssLmFwcHJvdmUtZGVzY3JpcHRpb24gYS5idG4tbGluaywuYXBwcm92ZS1pdGVtLWRpc3RyaWJ1dGUgYS5idG4tbGluayc6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIHZhciByZWYsIHVzZXJJZDtcbiAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICB1c2VySWQgPSAocmVmID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQpICE9IG51bGwgPyByZWYudGFyZ2V0X3VzZXJfaWQgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gQ3JlYXRvci5vcGVuU2FmZU9iamVjdFVybCgndXNlcnMnLCB1c2VySWQpO1xuICAgIH1cbiAgfSxcbiAgJ3RhcGVuZCAuYXBwcm92ZS1pdGVtLC5hcHByb3ZlLWRlc2NyaXB0aW9uJzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgaWYgKCEkKGV2ZW50LnRhcmdldCkuY2xvc2VzdChcImEuYnRuLWxpbmtcIikubGVuZ3RoKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LFxuICAnY2xpY2sgLmluc3RhbmNlLXRyYWNlLWRldGFpbC1tb2RhbCAuYnRuLWZvcndhcmQtYXBwcm92ZS1yZW1vdmUnOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICB2YXIgYXBwcm92ZUlkLCBpbnN0YW5jZUlkLCB0cmFjZUlkO1xuICAgIGluc3RhbmNlSWQgPSBTZXNzaW9uLmdldCgnaW5zdGFuY2VJZCcpO1xuICAgIGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmU7XG4gICAgdHJhY2VJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LnRyYWNlO1xuICAgICQoXCJib2R5XCIpLmFkZENsYXNzKFwibG9hZGluZ1wiKTtcbiAgICBNZXRlb3IuY2FsbCgnZm9yd2FyZF9yZW1vdmUnLCBpbnN0YW5jZUlkLCB0cmFjZUlkLCBhcHByb3ZlSWQsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICAkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIik7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRvYXN0ci5lcnJvcihUQVBpMThuLl9fKGVyci5yZWFzb24pKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgdG9hc3RyLnN1Y2Nlc3MoVEFQaTE4bi5fXyhcImluc3RhbmNlX2FwcHJvdmVfZm9yd2FyZF9yZW1vdmVfc3VjY2Vzc1wiKSk7XG4gICAgICAgIE1vZGFsLmhpZGUoXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gICdjbGljayAuaW5zdGFuY2UtdHJhY2UtZGV0YWlsLW1vZGFsIC5idG4tZm9yd2FyZC1pbnN0YW5jZS1sb29rJzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgdmFyIGZvcndhcmRfaW5zdGFuY2UsIGZvcndhcmRfc3BhY2U7XG4gICAgZm9yd2FyZF9zcGFjZSA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmZvcndhcmRzcGFjZTtcbiAgICBmb3J3YXJkX2luc3RhbmNlID0gZXZlbnQudGFyZ2V0LmRhdGFzZXQuZm9yd2FyZGluc3RhbmNlO1xuICAgIHJldHVybiBTdGVlZG9zLm9wZW5XaW5kb3coU3RlZWRvcy5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiICsgZm9yd2FyZF9zcGFjZSArIFwiL3ZpZXcvcmVhZG9ubHkvXCIgKyBmb3J3YXJkX2luc3RhbmNlKSk7XG4gIH0sXG4gICdjbGljayAuYnRuLW1vZGlmaWNhdGlvbic6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIHRlbXBsYXRlLmlzX2VkaXRpbmcuc2V0KCF0ZW1wbGF0ZS5pc19lZGl0aW5nLmdldCgpKTtcbiAgICBpZiAoIVN0ZWVkb3MuaXNBbmRyb2lkT3JJT1MoKSkge1xuICAgICAgcmV0dXJuIFRyYWNrZXIuYWZ0ZXJGbHVzaChmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICQoXCIjaW5zdGFuY2VfdHJhY2VfZGV0YWlsX21vZGFsICNmaW5pc2hfaW5wdXRcIikub24oXCJkcC5zaG93XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiAkKFwiLm1vZGFsLWJvZHlcIikuc2Nyb2xsVG9wKDEwMCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICAnY2xpY2sgLmJ0bi1jYW5jZWxCdXQnOiBmdW5jdGlvbihldmVudCwgdGVtcGxhdGUpIHtcbiAgICByZXR1cm4gdGVtcGxhdGUuaXNfZWRpdGluZy5zZXQoIXRlbXBsYXRlLmlzX2VkaXRpbmcuZ2V0KCkpO1xuICB9LFxuICAnY2xpY2sgLmJ0bi1zYXZlQnV0JzogZnVuY3Rpb24oZXZlbnQsIHRlbXBsYXRlKSB7XG4gICAgdmFyIGFwcHJvdmVJZCwgZmluaXNoX2lucHV0LCBpbnN0YW5jZUlkLCBvcGluaW9uX2lucHV0LCB0cmFjZUlkO1xuICAgIGluc3RhbmNlSWQgPSBTZXNzaW9uLmdldCgnaW5zdGFuY2VJZCcpO1xuICAgIGFwcHJvdmVJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LmFwcHJvdmU7XG4gICAgdHJhY2VJZCA9IGV2ZW50LnRhcmdldC5kYXRhc2V0LnRyYWNlO1xuICAgIG9waW5pb25faW5wdXQgPSAkKCcjb3Bpbmlvbl9pbnB1dCcpLnZhbCgpO1xuICAgIGZpbmlzaF9pbnB1dCA9IEF1dG9Gb3JtLmdldEZpZWxkVmFsdWUoXCJmaW5pc2hfZGF0ZVwiLCBcImZpbmlzaERhdGVBdXRvRm9ybVwiKTtcbiAgICAkKFwiYm9keVwiKS5hZGRDbGFzcyhcImxvYWRpbmdcIik7XG4gICAgcmV0dXJuIE1ldGVvci5jYWxsKCdjaGFuZ2VfYXBwcm92ZV9pbmZvJywgaW5zdGFuY2VJZCwgdHJhY2VJZCwgYXBwcm92ZUlkLCBvcGluaW9uX2lucHV0LCBmaW5pc2hfaW5wdXQsIGZ1bmN0aW9uKGVyciwgcmVzdWx0KSB7XG4gICAgICAkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImxvYWRpbmdcIik7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRvYXN0ci5lcnJvcihUQVBpMThuLl9fKGVyci5yZWFzb24pKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgdG9hc3RyLnN1Y2Nlc3ModChcImluc3RhbmNlX2FwcHJvdmVfbW9kYWxfbW9kaWZpY2F0aW9uc2F2ZVwiKSk7XG4gICAgICAgIE1vZGFsLmhpZGUoXCJpbnN0YW5jZV90cmFjZV9kZXRhaWxfbW9kYWxcIik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gICdjbGljayAuaW5zdGFuY2UtdHJhY2UtZGV0YWlsLW1vZGFsIC5idG4tZGlzdHJpYnV0ZS1hcHByb3ZlLXJlbW92ZSc6IGZ1bmN0aW9uKGV2ZW50LCB0ZW1wbGF0ZSkge1xuICAgIE1vZGFsLmFsbG93TXVsdGlwbGUgPSB0cnVlO1xuICAgIHJldHVybiBNb2RhbC5zaG93KCdjYW5jZWxfZGlzdHJpYnV0ZV9tb2RhbCcpO1xuICB9XG59O1xuIiwiUmVsYXRlZEluc3RhbmNlcy5oZWxwZXJzID1cblx0c2hvd1JlbGF0ZWRJbnN0YWNlczogLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGVsc2Vcblx0XHRcdGlucyA9IHRoaXMuaW5zdGFuY2Vcblx0XHRpZiBpbnM/LnJlbGF0ZWRfaW5zdGFuY2VzICYmIF8uaXNBcnJheShpbnM/LnJlbGF0ZWRfaW5zdGFuY2VzKVxuXHRcdFx0aWYgZGIuaW5zdGFuY2VzLmZpbmQoe19pZDogeyRpbjogaW5zLnJlbGF0ZWRfaW5zdGFuY2VzfX0sIHtmaWVsZHM6IHtzcGFjZTogMSwgbmFtZTogMX19KS5jb3VudCgpID4gMFxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cblx0cmVsYXRlZF9pbnN0YWNlczogLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuXHRcdGVsc2Vcblx0XHRcdGlucyA9IHRoaXMuaW5zdGFuY2Vcblx0XHRpZiBpbnM/LnJlbGF0ZWRfaW5zdGFuY2VzICYmIF8uaXNBcnJheShpbnM/LnJlbGF0ZWRfaW5zdGFuY2VzKVxuXHRcdFx0cmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHtfaWQ6IHskaW46IGlucy5yZWxhdGVkX2luc3RhbmNlc319LCB7ZmllbGRzOiB7c3BhY2U6IDEsIG5hbWU6IDF9fSkuZmV0Y2goKVxuXG5cdHJlbGF0ZWRfaW5zdGFjZV91cmw6IChpbnMpIC0+XG5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnQgJiYgKFN0ZWVkb3MuaXNNb2JpbGUoKSB8fCBTdGVlZG9zLmlzQ29yZG92YSgpKVxuXHRcdFx0cmV0dXJuICcnXG5cblx0XHRhYnNvbHV0ZSA9IGZhbHNlXG5cblx0XHRpZiBNZXRlb3IuaXNTZXJ2ZXJcblx0XHRcdGFic29sdXRlID0gdGhpcy5hYnNvbHV0ZVxuXHRcdGlmIGFic29sdXRlXG5cdFx0XHRyZXR1cm4gTWV0ZW9yLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIraW5zLnNwYWNlK1wiL3ZpZXcvcmVhZG9ubHkvXCIgKyBpbnMuX2lkICsgJz9oaWRlX3RyYWNlcz0wJylcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gU3RlZWRvcy5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiK2lucy5zcGFjZStcIi92aWV3L3JlYWRvbmx5L1wiICsgaW5zLl9pZCArICc/aGlkZV90cmFjZXM9MCcpXG5cblx0X3Q6IChrZXkpLT5cblx0XHRpZiBNZXRlb3IuaXNDbGllbnRcblx0XHRcdHJldHVybiBUQVBpMThuLl9fKGtleSlcblx0XHRlbHNlXG5cdFx0XHRsb2NhbGUgPSBUZW1wbGF0ZS5pbnN0YW5jZSgpLnZpZXcudGVtcGxhdGUuc3RlZWRvc0RhdGEubG9jYWxlXG5cdFx0XHRyZXR1cm4gVEFQaTE4bi5fXyhrZXksIHt9LCBsb2NhbGUpXG5cblx0c2hvd19kZWxldGU6ICgpLT5cblx0XHRpZiAhTWV0ZW9yLmlzQ2xpZW50XG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRlbHNlXG5cdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSBcImRyYWZ0XCIgfHwgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94J1xuXHRcdFx0XHRjdXJyZW50X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKVxuXHRcdFx0XHRpZiBjdXJyZW50X3N0ZXBcblx0XHRcdFx0XHRpZiAoY3VycmVudF9zdGVwLmNhbl9lZGl0X21haW5fYXR0YWNoIHx8IGN1cnJlbnRfc3RlcC5jYW5fZWRpdF9ub3JtYWxfYXR0YWNoID09IHRydWUgfHwgY3VycmVudF9zdGVwLmNhbl9lZGl0X25vcm1hbF9hdHRhY2ggPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWUiLCJSZWxhdGVkSW5zdGFuY2VzLmhlbHBlcnMgPSB7XG4gIHNob3dSZWxhdGVkSW5zdGFjZXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbnM7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucyA9IHRoaXMuaW5zdGFuY2U7XG4gICAgfVxuICAgIGlmICgoaW5zICE9IG51bGwgPyBpbnMucmVsYXRlZF9pbnN0YW5jZXMgOiB2b2lkIDApICYmIF8uaXNBcnJheShpbnMgIT0gbnVsbCA/IGlucy5yZWxhdGVkX2luc3RhbmNlcyA6IHZvaWQgMCkpIHtcbiAgICAgIGlmIChkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgICAgIF9pZDoge1xuICAgICAgICAgICRpbjogaW5zLnJlbGF0ZWRfaW5zdGFuY2VzXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgc3BhY2U6IDEsXG4gICAgICAgICAgbmFtZTogMVxuICAgICAgICB9XG4gICAgICB9KS5jb3VudCgpID4gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgcmVsYXRlZF9pbnN0YWNlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlucztcbiAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICBpbnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zID0gdGhpcy5pbnN0YW5jZTtcbiAgICB9XG4gICAgaWYgKChpbnMgIT0gbnVsbCA/IGlucy5yZWxhdGVkX2luc3RhbmNlcyA6IHZvaWQgMCkgJiYgXy5pc0FycmF5KGlucyAhPSBudWxsID8gaW5zLnJlbGF0ZWRfaW5zdGFuY2VzIDogdm9pZCAwKSkge1xuICAgICAgcmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHtcbiAgICAgICAgX2lkOiB7XG4gICAgICAgICAgJGluOiBpbnMucmVsYXRlZF9pbnN0YW5jZXNcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICBzcGFjZTogMSxcbiAgICAgICAgICBuYW1lOiAxXG4gICAgICAgIH1cbiAgICAgIH0pLmZldGNoKCk7XG4gICAgfVxuICB9LFxuICByZWxhdGVkX2luc3RhY2VfdXJsOiBmdW5jdGlvbihpbnMpIHtcbiAgICB2YXIgYWJzb2x1dGU7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCAmJiAoU3RlZWRvcy5pc01vYmlsZSgpIHx8IFN0ZWVkb3MuaXNDb3Jkb3ZhKCkpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGFic29sdXRlID0gZmFsc2U7XG4gICAgaWYgKE1ldGVvci5pc1NlcnZlcikge1xuICAgICAgYWJzb2x1dGUgPSB0aGlzLmFic29sdXRlO1xuICAgIH1cbiAgICBpZiAoYWJzb2x1dGUpIHtcbiAgICAgIHJldHVybiBNZXRlb3IuYWJzb2x1dGVVcmwoXCJ3b3JrZmxvdy9zcGFjZS9cIiArIGlucy5zcGFjZSArIFwiL3ZpZXcvcmVhZG9ubHkvXCIgKyBpbnMuX2lkICsgJz9oaWRlX3RyYWNlcz0wJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBTdGVlZG9zLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIgKyBpbnMuc3BhY2UgKyBcIi92aWV3L3JlYWRvbmx5L1wiICsgaW5zLl9pZCArICc/aGlkZV90cmFjZXM9MCcpO1xuICAgIH1cbiAgfSxcbiAgX3Q6IGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBsb2NhbGU7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgcmV0dXJuIFRBUGkxOG4uX18oa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYWxlID0gVGVtcGxhdGUuaW5zdGFuY2UoKS52aWV3LnRlbXBsYXRlLnN0ZWVkb3NEYXRhLmxvY2FsZTtcbiAgICAgIHJldHVybiBUQVBpMThuLl9fKGtleSwge30sIGxvY2FsZSk7XG4gICAgfVxuICB9LFxuICBzaG93X2RlbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGN1cnJlbnRfc3RlcDtcbiAgICBpZiAoIU1ldGVvci5pc0NsaWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09IFwiZHJhZnRcIiB8fCBTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94Jykge1xuICAgICAgICBjdXJyZW50X3N0ZXAgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0Q3VycmVudFN0ZXAoKTtcbiAgICAgICAgaWYgKGN1cnJlbnRfc3RlcCkge1xuICAgICAgICAgIGlmIChjdXJyZW50X3N0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2ggfHwgY3VycmVudF9zdGVwLmNhbl9lZGl0X25vcm1hbF9hdHRhY2ggPT09IHRydWUgfHwgY3VycmVudF9zdGVwLmNhbl9lZGl0X25vcm1hbF9hdHRhY2ggPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwiUmVsYXRlZFJlY29yZHMuaGVscGVycyA9XG5cdHNob3dSZWxhdGVkUmVjb3JkczogKCktPlxuXHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0aW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0ZWxzZVxuXHRcdFx0aW5zID0gdGhpcy5pbnN0YW5jZVxuXHRcdGlmICFpbnNcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdHJldHVybiAhXy5pc0VtcHR5KGlucy5yZWNvcmRfaWRzKVxuXHRyZWxhdGVkUmVjb3JkVXJsOiAoKS0+XG5cdFx0aWYgTWV0ZW9yLmlzQ2xpZW50ICYmIChTdGVlZG9zLmlzTW9iaWxlKCkgfHwgU3RlZWRvcy5pc0NvcmRvdmEoKSlcblx0XHRcdHJldHVybiAnJ1xuXG5cdFx0YWJzb2x1dGUgPSBmYWxzZVxuXHRcdFxuXHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0aW5zID0gdGhpcy5pbnN0YW5jZVxuXHRcdFx0YWJzb2x1dGUgPSB0aGlzLmFic29sdXRlXG5cdFx0ZWxzZVxuXHRcdFx0aW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG5cdFxuXHRcdG9iamNldE5hbWUgPSBpbnMucmVjb3JkX2lkc1swXS5vXG5cdFx0aWQgPSBpbnMucmVjb3JkX2lkc1swXS5pZHNbMF1cblxuXHRcdGlmIGFic29sdXRlXG5cdFx0XHRyZXR1cm4gTWV0ZW9yLmFic29sdXRlVXJsKFwiYXBwLy0vI3tvYmpjZXROYW1lfS92aWV3LyN7aWR9XCIpXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIFN0ZWVkb3MuYWJzb2x1dGVVcmwoXCJhcHAvLS8je29iamNldE5hbWV9L3ZpZXcvI3tpZH1cIikiLCJSZWxhdGVkUmVjb3Jkcy5oZWxwZXJzID0ge1xuICBzaG93UmVsYXRlZFJlY29yZHM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpbnM7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgaW5zID0gV29ya2Zsb3dNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucyA9IHRoaXMuaW5zdGFuY2U7XG4gICAgfVxuICAgIGlmICghaW5zKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAhXy5pc0VtcHR5KGlucy5yZWNvcmRfaWRzKTtcbiAgfSxcbiAgcmVsYXRlZFJlY29yZFVybDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFic29sdXRlLCBpZCwgaW5zLCBvYmpjZXROYW1lO1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQgJiYgKFN0ZWVkb3MuaXNNb2JpbGUoKSB8fCBTdGVlZG9zLmlzQ29yZG92YSgpKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBhYnNvbHV0ZSA9IGZhbHNlO1xuICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgIGlucyA9IHRoaXMuaW5zdGFuY2U7XG4gICAgICBhYnNvbHV0ZSA9IHRoaXMuYWJzb2x1dGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucyA9IFdvcmtmbG93TWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICAgIH1cbiAgICBvYmpjZXROYW1lID0gaW5zLnJlY29yZF9pZHNbMF0ubztcbiAgICBpZCA9IGlucy5yZWNvcmRfaWRzWzBdLmlkc1swXTtcbiAgICBpZiAoYWJzb2x1dGUpIHtcbiAgICAgIHJldHVybiBNZXRlb3IuYWJzb2x1dGVVcmwoXCJhcHAvLS9cIiArIG9iamNldE5hbWUgKyBcIi92aWV3L1wiICsgaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gU3RlZWRvcy5hYnNvbHV0ZVVybChcImFwcC8tL1wiICsgb2JqY2V0TmFtZSArIFwiL3ZpZXcvXCIgKyBpZCk7XG4gICAgfVxuICB9XG59O1xuIiwiLypcbiAqIEBBdXRob3I6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBEYXRlOiAyMDIxLTA1LTI0IDEyOjMyOjU2XG4gKiBATGFzdEVkaXRvcnM6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMTItMjQgMTU6Mjk6MjJcbiAqIEBEZXNjcmlwdGlvbjogXG4gKi9cbi8vIEpzb25Sb3V0ZXMuYWRkKFwicG9zdFwiLCBcIi9hcGkvd29ya2Zsb3cvZ2V0U3BhY2VVc2Vyc1wiLCBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbi8vICAgdmFyXG4vLyAgICAgdXNlcklkcyA9IHJlcS5ib2R5LnVzZXJJZHMsXG4vLyAgICAgc3BhY2VJZCA9IHJlcS5xdWVyeS5zcGFjZUlkLFxuLy8gICAgIHNwYWNlVXNlcnMgPSBbXVxuLy8gICA7XG5cbi8vICAgaWYgKCF1c2VySWRzIHx8ICFzcGFjZUlkKSB7XG4vLyAgICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gICAgICAgY29kZTogMjAwLFxuLy8gICAgICAgZGF0YToge1xuLy8gICAgICAgICAnZXJyb3JzJzogJ+e8uuWwkeWPguaVsCdcbi8vICAgICAgIH1cbi8vICAgICB9KTtcbi8vICAgfVxuXG4vLyAgIHNwYWNlVXNlcnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0VXNlcnMoc3BhY2VJZCwgdXNlcklkcyk7XG5cbi8vICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gICAgIGNvZGU6IDIwMCxcbi8vICAgICBkYXRhOiB7XG4vLyAgICAgICAnc3BhY2VVc2Vycyc6IHNwYWNlVXNlcnNcbi8vICAgICB9XG4vLyAgIH0pO1xuLy8gfSlcblxuXG4gIFxuICAiLCIvKlxuICogQEF1dGhvcjogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQERhdGU6IDIwMjEtMDUtMjQgMTI6MzI6NTZcbiAqIEBMYXN0RWRpdG9yczogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyMi0xMi0yNCAxNToyMzoxNFxuICogQERlc2NyaXB0aW9uOiBcbiAqL1xuLy8gSnNvblJvdXRlcy5hZGQoXCJwb3N0XCIsIFwiL2FwaS93b3JrZmxvdy9nZXRGb3JtdWxhVXNlck9iamVjdHNcIiwgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4vLyAgIHZhclxuLy8gICAgIHVzZXJJZHMgPSByZXEuYm9keS51c2VySWRzLFxuLy8gICAgIHNwYWNlSWQgPSByZXEucXVlcnkuc3BhY2VJZCxcbi8vICAgICBzcGFjZVVzZXJzID0gW11cbi8vICAgO1xuXG4vLyAgIGlmICghdXNlcklkcyB8fCAhc3BhY2VJZCkge1xuLy8gICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbi8vICAgICAgIGNvZGU6IDIwMCxcbi8vICAgICAgIGRhdGE6IHtcbi8vICAgICAgICAgJ2Vycm9ycyc6ICfnvLrlsJHlj4LmlbAnXG4vLyAgICAgICB9XG4vLyAgICAgfSk7XG4vLyAgIH1cblxuLy8gICB2YXIgdXNlcnMgPSBXb3JrZmxvd01hbmFnZXIuZ2V0Rm9ybXVsYVVzZXJPYmplY3Qoc3BhY2VJZCwgdXNlcklkcyk7XG5cbi8vICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gICAgIGNvZGU6IDIwMCxcbi8vICAgICBkYXRhOiB7XG4vLyAgICAgICAnc3BhY2VVc2Vycyc6IHVzZXJzXG4vLyAgICAgfVxuLy8gICB9KTtcbi8vIH0pXG5cblxuICBcbiAgIiwiLypcbiAqIEBBdXRob3I6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBEYXRlOiAyMDIxLTA1LTI0IDEyOjMyOjU2XG4gKiBATGFzdEVkaXRvcnM6IHN1bmhhb2xpbkBob3RvYS5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjItMTItMjQgMTU6Mzg6NTRcbiAqIEBEZXNjcmlwdGlvbjogXG4gKi9cbi8vIEpzb25Sb3V0ZXMuYWRkKFwicG9zdFwiLCBcIi9hcGkvd29ya2Zsb3cvaW5pdF9mb3JtdWxhX3ZhbHVlc1wiLCBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCkge1xuLy8gXHR2YXJcbi8vIFx0XHRmaWVsZHMgPSByZXEuYm9keS5maWVsZHMsXG4vLyBcdFx0YXV0b0Zvcm1Eb2MgPSByZXEuYm9keS5hdXRvRm9ybURvYyxcbi8vIFx0XHRhcHByb3ZlciA9IHJlcS5ib2R5LmFwcHJvdmVyLFxuLy8gXHRcdGFwcGxpY2FudCA9IHJlcS5ib2R5LmFwcGxpY2FudCxcblxuLy8gXHRcdHNwYWNlSWQgPSByZXEucXVlcnkuc3BhY2VJZCxcblxuLy8gXHRcdHNwYWNlVXNlcnMgPSBbXTtcblxuLy8gXHRpZiAoIWZpZWxkcyB8fCAhc3BhY2VJZCB8fCAhYXV0b0Zvcm1Eb2MgfHwgIWFwcHJvdmVyIHx8ICFhcHBsaWNhbnQpIHtcbi8vIFx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4vLyBcdFx0XHRjb2RlOiAyMDAsXG4vLyBcdFx0XHRkYXRhOiB7XG4vLyBcdFx0XHRcdCdlcnJvcnMnOiAn57y65bCR5Y+C5pWwJ1xuLy8gXHRcdFx0fVxuLy8gXHRcdH0pO1xuLy8gXHRcdHJldHVybjtcbi8vIFx0fVxuXG4vLyBcdGZvcm11bGFfdmFsdWVzID0gRm9ybV9mb3JtdWxhLmluaXRfZm9ybXVsYV92YWx1ZXMoZmllbGRzLCBhdXRvRm9ybURvYywgYXBwcm92ZXIsIGFwcGxpY2FudCwgc3BhY2VJZCk7XG5cbi8vIFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuLy8gXHRcdGNvZGU6IDIwMCxcbi8vIFx0XHRkYXRhOiB7XG4vLyBcdFx0XHQnZm9ybXVsYV92YWx1ZXMnOiBmb3JtdWxhX3ZhbHVlc1xuLy8gXHRcdH1cbi8vIFx0fSk7XG4vLyB9KVxuIiwiLy8gSnNvblJvdXRlcy5hZGQoJ3Bvc3QnLCAnL2FwaS93b3JrZmxvdy9mb3J3YXJkJywgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4vLyBcdHRyeSB7XG4vLyBcdFx0dmFyIGN1cnJlbnRfdXNlcl9pbmZvID0gdXVmbG93TWFuYWdlci5jaGVja19hdXRob3JpemF0aW9uKHJlcSk7XG4vLyBcdFx0dmFyIGN1cnJlbnRfdXNlcl9pZCA9IGN1cnJlbnRfdXNlcl9pbmZvLl9pZDtcblxuLy8gXHRcdHZhciBoYXNoRGF0YSA9IHJlcS5ib2R5O1xuLy8gXHRcdHZhciBpbnN0YW5jZV9pZCA9IGhhc2hEYXRhLmluc3RhbmNlX2lkO1xuLy8gXHRcdHZhciBzcGFjZV9pZCA9IGhhc2hEYXRhLnNwYWNlX2lkO1xuLy8gXHRcdHZhciBmbG93X2lkID0gaGFzaERhdGEuZmxvd19pZDtcbi8vIFx0XHR2YXIgaGFzU2F2ZUluc3RhbmNlVG9BdHRhY2htZW50ID0gaGFzaERhdGEuaGFzU2F2ZUluc3RhbmNlVG9BdHRhY2htZW50O1xuLy8gXHRcdHZhciBkZXNjcmlwdGlvbiA9IGhhc2hEYXRhLmRlc2NyaXB0aW9uO1xuLy8gXHRcdHZhciBpc0ZvcndhcmRBdHRhY2htZW50cyA9IGhhc2hEYXRhLmlzRm9yd2FyZEF0dGFjaG1lbnRzO1xuLy8gXHRcdHZhciBzZWxlY3RlZFVzZXJzID0gaGFzaERhdGEuc2VsZWN0ZWRVc2Vycztcbi8vIFx0XHR2YXIgYWN0aW9uX3R5cGUgPSBoYXNoRGF0YS5hY3Rpb25fdHlwZTtcbi8vIFx0XHR2YXIgcmVsYXRlZCA9IGhhc2hEYXRhLnJlbGF0ZWQ7XG4vLyBcdFx0dmFyIGZyb21fYXBwcm92ZV9pZCA9IGhhc2hEYXRhLmZyb21fYXBwcm92ZV9pZDtcblxuLy8gXHRcdGNoZWNrKGluc3RhbmNlX2lkLCBTdHJpbmcpO1xuLy8gXHRcdGNoZWNrKHNwYWNlX2lkLCBTdHJpbmcpO1xuLy8gXHRcdGNoZWNrKGZsb3dfaWQsIFN0cmluZyk7XG4vLyBcdFx0Y2hlY2soaGFzU2F2ZUluc3RhbmNlVG9BdHRhY2htZW50LCBCb29sZWFuKTtcbi8vIFx0XHRjaGVjayhkZXNjcmlwdGlvbiwgU3RyaW5nKTtcbi8vIFx0XHRjaGVjayhpc0ZvcndhcmRBdHRhY2htZW50cywgQm9vbGVhbik7XG4vLyBcdFx0Y2hlY2soc2VsZWN0ZWRVc2VycywgQXJyYXkpO1xuLy8gXHRcdGNoZWNrKGFjdGlvbl90eXBlLCBNYXRjaC5PbmVPZignZm9yd2FyZCcsICdkaXN0cmlidXRlJykpO1xuXG4vLyBcdFx0aWYgKGFjdGlvbl90eXBlID09IFwiZGlzdHJpYnV0ZVwiKVxuLy8gXHRcdFx0Y2hlY2soZnJvbV9hcHByb3ZlX2lkLCBTdHJpbmcpO1xuXG4vLyBcdFx0dmFyIGlucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKGluc3RhbmNlX2lkKTtcbi8vIFx0XHR2YXIgb2xkX3NwYWNlX2lkID0gaW5zLnNwYWNlO1xuXG4vLyBcdFx0dmFyIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKGZsb3dfaWQpO1xuXG4vLyBcdFx0dmFyIHNwYWNlID0gZGIuc3BhY2VzLmZpbmRPbmUoc3BhY2VfaWQpO1xuXG4vLyBcdFx0aWYgKCFpbnMgfHwgIWZsb3cgfHwgIXNwYWNlKSB7XG4vLyBcdFx0XHR0aHJvdyBuZXcgTWV0ZW9yLkVycm9yKCdwYXJhbXMgZXJyb3IhJywgJ3JlY29yZCBub3QgZXhpc3RzIScpO1xuLy8gXHRcdH1cblxuLy8gXHRcdHZhciBmb3J3YXJkX3VzZXJzID0gbmV3IEFycmF5O1xuLy8gXHRcdGlmIChfLmlzRW1wdHkoc2VsZWN0ZWRVc2VycykpIHtcbi8vIFx0XHRcdGZvcndhcmRfdXNlcnMgPSBbY3VycmVudF91c2VyX2lkXTtcbi8vIFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0Zm9yd2FyZF91c2VycyA9IHNlbGVjdGVkVXNlcnM7XG4vLyBcdFx0fVxuXG4vLyBcdFx0Ly8g5qCh6aqM5YiG5Y+R5a+56LGh5piv5ZCm5pyJ5YiG5Y+R5rWB56iL55qE5o+Q5Lqk5p2D6ZmQXG4vLyBcdFx0dmFyIG5vX3Blcm1pc3Npb25fdXNlcl9pZHMgPSBuZXcgQXJyYXkoKTtcbi8vIFx0XHRfLmVhY2goZm9yd2FyZF91c2VycywgZnVuY3Rpb24gKHVpZCkge1xuLy8gXHRcdFx0dmFyIHBlcm1pc3Npb25zID0gcGVybWlzc2lvbk1hbmFnZXIuZ2V0Rmxvd1Blcm1pc3Npb25zKGZsb3dfaWQsIHVpZCk7XG4vLyBcdFx0XHRpZiAoIXBlcm1pc3Npb25zLmluY2x1ZGVzKFwiYWRkXCIpKSB7XG4vLyBcdFx0XHRcdC8vIHRocm93IG5ldyBNZXRlb3IuRXJyb3IoJ2Vycm9yIScsIFwi6K+l55Sz6K+35Lq65rKh5pyJ5o+Q5Lqk5q2k55Sz6K+35Y2V55qE5p2D6ZmQ44CCXCIpXG4vLyBcdFx0XHRcdG5vX3Blcm1pc3Npb25fdXNlcl9pZHMucHVzaCh1aWQpO1xuLy8gXHRcdFx0fVxuLy8gXHRcdH0pXG4vLyBcdFx0aWYgKCFfLmlzRW1wdHkobm9fcGVybWlzc2lvbl91c2VyX2lkcykpIHtcbi8vIFx0XHRcdHZhciBub19wZXJtaXNzaW9uX3VzZXJzX25hbWUgPSBuZXcgQXJyYXkoKTtcbi8vIFx0XHRcdGRiLnVzZXJzLmZpbmQoe1xuLy8gXHRcdFx0XHRfaWQ6IHtcbi8vIFx0XHRcdFx0XHQkaW46IG5vX3Blcm1pc3Npb25fdXNlcl9pZHNcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fSwge1xuLy8gXHRcdFx0XHRmaWVsZHM6IHtcbi8vIFx0XHRcdFx0XHRuYW1lOiAxXG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pLmZvckVhY2goZnVuY3Rpb24gKHUpIHtcbi8vIFx0XHRcdFx0bm9fcGVybWlzc2lvbl91c2Vyc19uYW1lLnB1c2godS5uYW1lKTtcbi8vIFx0XHRcdH0pO1xuLy8gXHRcdFx0dGhyb3cgbmV3IE1ldGVvci5FcnJvcignbm9fcGVybWlzc2lvbicsIFwi6K+l5o+Q5Lqk5Lq65rKh5pyJ5o+Q5Lqk5q2k55Sz6K+35Y2V55qE5p2D6ZmQ44CCXCIsIG5vX3Blcm1pc3Npb25fdXNlcnNfbmFtZS5qb2luKCcsJykpXG4vLyBcdFx0fVxuXG4vLyBcdFx0dmFyIG5ld19pbnNfaWRzID0gbmV3IEFycmF5O1xuXG4vLyBcdFx0dmFyIGN1cnJlbnRfdHJhY2UgPSBudWxsO1xuLy8gXHRcdGlmIChhY3Rpb25fdHlwZSA9PSBcImRpc3RyaWJ1dGVcIikge1xuLy8gXHRcdFx0Xy5lYWNoKGlucy50cmFjZXMsIGZ1bmN0aW9uICh0KSB7XG4vLyBcdFx0XHRcdGlmICghY3VycmVudF90cmFjZSkge1xuLy8gXHRcdFx0XHRcdF8uZWFjaCh0LmFwcHJvdmVzLCBmdW5jdGlvbiAoYSkge1xuLy8gXHRcdFx0XHRcdFx0aWYgKCFjdXJyZW50X3RyYWNlKSB7XG4vLyBcdFx0XHRcdFx0XHRcdGlmIChhLl9pZCA9PSBmcm9tX2FwcHJvdmVfaWQpXG4vLyBcdFx0XHRcdFx0XHRcdFx0Y3VycmVudF90cmFjZSA9IHQ7XG4vLyBcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0fSlcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fSlcbi8vIFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0Y3VycmVudF90cmFjZSA9IF8ubGFzdChpbnMudHJhY2VzKTtcbi8vIFx0XHR9XG4vLyBcdFx0dmFyIGN1cnJlbnRfdHJhY2VfaWQgPSBjdXJyZW50X3RyYWNlLl9pZDtcbi8vIFx0XHR2YXIgZm9yd2FyZF9hcHByb3ZlcyA9IFtdO1xuLy8gXHRcdHZhciBmcm9tX3VzZXJfbmFtZSA9IGRiLnVzZXJzLmZpbmRPbmUoY3VycmVudF91c2VyX2lkLCB7XG4vLyBcdFx0XHRmaWVsZHM6IHtcbi8vIFx0XHRcdFx0bmFtZTogMVxuLy8gXHRcdFx0fVxuLy8gXHRcdH0pLm5hbWVcbi8vIFx0XHR2YXIgc2V0X29iaiA9IG5ldyBPYmplY3Q7XG5cbi8vIFx0XHQvLyDorqHnrpd2YWx1ZXNcbi8vIFx0XHR2YXIgb2xkX3ZhbHVlcyA9IGlucy52YWx1ZXMsXG4vLyBcdFx0XHRuZXdfdmFsdWVzID0ge307XG4vLyBcdFx0dmFyIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGZsb3cuZm9ybSk7XG4vLyBcdFx0dmFyIGZpZWxkcyA9IGZvcm0uY3VycmVudC5maWVsZHMgfHwgW107XG5cbi8vIFx0XHR2YXIgb2xkX2Zvcm0gPSBkYi5mb3Jtcy5maW5kT25lKGlucy5mb3JtKTtcbi8vIFx0XHR2YXIgb2xkX2Zvcm1fdmVyc2lvbiA9IGlucy5mb3JtX3ZlcnNpb24sXG4vLyBcdFx0XHRvbGRfZmllbGRzID0gW10sXG4vLyBcdFx0XHRjb21tb25fZmllbGRzID0gW107XG5cbi8vIFx0XHR2YXIgc2VsZWN0X3RvX2lucHV0X2ZpZWxkcyA9IFtdO1xuXG4vLyBcdFx0aWYgKG9sZF9mb3JtLmN1cnJlbnQuX2lkID09IG9sZF9mb3JtX3ZlcnNpb24pIHtcbi8vIFx0XHRcdG9sZF9maWVsZHMgPSBvbGRfZm9ybS5jdXJyZW50LmZpZWxkcztcbi8vIFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0aWYgKG9sZF9mb3JtLmhpc3RvcnlzKSB7XG4vLyBcdFx0XHRcdG9sZF9mb3JtLmhpc3RvcnlzLmZvckVhY2goZnVuY3Rpb24gKGgpIHtcbi8vIFx0XHRcdFx0XHRpZiAoaC5faWQgPT0gb2xkX2Zvcm1fdmVyc2lvbilcbi8vIFx0XHRcdFx0XHRcdG9sZF9maWVsZHMgPSBoLmZpZWxkcztcbi8vIFx0XHRcdFx0fSlcbi8vIFx0XHRcdH1cbi8vIFx0XHR9XG5cbi8vIFx0XHRmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbi8vIFx0XHRcdHZhciBleGlzdHNfZmllbGQgPSBfLmZpbmQob2xkX2ZpZWxkcywgZnVuY3Rpb24gKGYpIHtcbi8vIFx0XHRcdFx0cmV0dXJuIGYudHlwZSA9PSBmaWVsZC50eXBlICYmIGYuY29kZSA9PSBmaWVsZC5jb2RlO1xuLy8gXHRcdFx0fSlcbi8vIFx0XHRcdGlmIChleGlzdHNfZmllbGQpXG4vLyBcdFx0XHRcdGNvbW1vbl9maWVsZHMucHVzaChmaWVsZCk7XG4vLyBcdFx0XHR2YXIgc2VsZWN0X2lucHV0X2ZpZWxkID0gXy5maW5kKG9sZF9maWVsZHMsIGZ1bmN0aW9uIChmKSB7XG4vLyBcdFx0XHRcdHJldHVybiBmLnR5cGUgPT0gJ3NlbGVjdCcgJiYgZmllbGQudHlwZSA9PSAnaW5wdXQnICYmIGYuY29kZSA9PSBmaWVsZC5jb2RlO1xuLy8gXHRcdFx0fSlcbi8vIFx0XHRcdGlmIChzZWxlY3RfaW5wdXRfZmllbGQpXG4vLyBcdFx0XHRcdHNlbGVjdF90b19pbnB1dF9maWVsZHMucHVzaChzZWxlY3RfaW5wdXRfZmllbGQpO1xuLy8gXHRcdH0pXG5cbi8vIFx0XHRzZWxlY3RfdG9faW5wdXRfZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4vLyBcdFx0XHRpZiAob2xkX3ZhbHVlc1tmaWVsZC5jb2RlXSkge1xuLy8gXHRcdFx0XHRuZXdfdmFsdWVzW2ZpZWxkLmNvZGVdID0gb2xkX3ZhbHVlc1tmaWVsZC5jb2RlXTtcbi8vIFx0XHRcdH1cbi8vIFx0XHR9KVxuXG4vLyBcdFx0Y29tbW9uX2ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xuLy8gXHRcdFx0aWYgKGZpZWxkLnR5cGUgPT0gJ3NlY3Rpb24nKSB7XG4vLyBcdFx0XHRcdGlmIChmaWVsZC5maWVsZHMpIHtcbi8vIFx0XHRcdFx0XHRmaWVsZC5maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZikge1xuLy8gXHRcdFx0XHRcdFx0Ly8g6Leo5bel5L2c5Yy66L2s5Y+R5LiN5aSN5Yi26YCJ5Lq66YCJ57uEXG4vLyBcdFx0XHRcdFx0XHRpZiAoWydncm91cCcsICd1c2VyJ10uaW5jbHVkZXMoZi50eXBlKSAmJiBvbGRfc3BhY2VfaWQgIT0gc3BhY2VfaWQpIHtcbi8vIFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0dmFyIGtleSA9IGYuY29kZTtcbi8vIFx0XHRcdFx0XHRcdHZhciBvbGRfdiA9IG9sZF92YWx1ZXNba2V5XTtcbi8vIFx0XHRcdFx0XHRcdGlmIChvbGRfdikge1xuLy8gXHRcdFx0XHRcdFx0XHR2YXIgZmllbGRPcHRpb25zID0gZi5vcHRpb25zICYmIGYub3B0aW9ucy5zcGxpdCAmJiBmLm9wdGlvbnMuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKG4pe1xuLy8gXHRcdFx0XHRcdFx0XHRcdHZhciBpdGVtU3BsaXRzID0gbi5zcGxpdChcIjpcIik7XG4vLyBcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBpdGVtU3BsaXRzWzBdLFxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGl0ZW1TcGxpdHNbMV0gfHwgblxuLy8gXHRcdFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdFx0fSk7XG4vLyBcdFx0XHRcdFx0XHRcdC8vIOagoemqjCDljZXpgInvvIzlpJrpgInvvIzkuIvmi4nmoYYg5a2X5q615YC85piv5ZCm5Zyo5paw6KGo5Y2V5a+55bqU5a2X5q6155qE5Y+v6YCJ5YC86IyD5Zu05YaFXG4vLyBcdFx0XHRcdFx0XHRcdGlmIChmLnR5cGUgPT0gJ3NlbGVjdCcgfHwgZi50eXBlID09ICdyYWRpbycpIHtcbi8vIFx0XHRcdFx0XHRcdFx0XHR2YXIgc2VsZWN0ZWRPcHRpb24gPSBmaWVsZE9wdGlvbnMuZmluZChmdW5jdGlvbihpdGVtKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaXRlbS52YWx1ZSA9PT0gb2xkX3Y7XG4vLyBcdFx0XHRcdFx0XHRcdFx0fSk7XG4vLyBcdFx0XHRcdFx0XHRcdFx0aWYoIXNlbGVjdGVkT3B0aW9uKXtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcbi8vIFx0XHRcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0XHRcdH1cblxuLy8gXHRcdFx0XHRcdFx0XHRpZiAoZi50eXBlID09ICdtdWx0aVNlbGVjdCcpIHtcbi8vIFx0XHRcdFx0XHRcdFx0XHR2YXIgb2xkX211bHRpU2VsZWN0ZWQgPSBvbGRfdi5zcGxpdCgnLCcpO1xuLy8gXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdfbXVsdGlTZWxlY3RlZCA9IF8uaW50ZXJzZWN0aW9uKGZpZWxkT3B0aW9ucy5tYXAoZnVuY3Rpb24obil7IHJldHVybiBuLnZhbHVlOyB9KSwgb2xkX211bHRpU2VsZWN0ZWQpO1xuLy8gXHRcdFx0XHRcdFx0XHRcdG9sZF92ID0gbmV3X211bHRpU2VsZWN0ZWQuam9pbignLCcpO1xuLy8gXHRcdFx0XHRcdFx0XHR9XG5cbi8vIFx0XHRcdFx0XHRcdFx0bmV3X3ZhbHVlc1trZXldID0gb2xkX3Y7XG4vLyBcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0fSlcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fSBlbHNlIGlmIChmaWVsZC50eXBlID09ICd0YWJsZScpIHtcbi8vIFx0XHRcdFx0aWYgKCFfLmlzRW1wdHkob2xkX3ZhbHVlc1tmaWVsZC5jb2RlXSkpIHtcbi8vIFx0XHRcdFx0XHRuZXdfdmFsdWVzW2ZpZWxkLmNvZGVdID0gbmV3IEFycmF5O1xuLy8gXHRcdFx0XHRcdG9sZF92YWx1ZXNbZmllbGQuY29kZV0uZm9yRWFjaChmdW5jdGlvbiAob2xkX3RhYmxlX3Jvd192YWx1ZXMpIHtcbi8vIFx0XHRcdFx0XHRcdHZhciBuZXdfdGFibGVfcm93X3ZhbHVlcyA9IHt9O1xuXG4vLyBcdFx0XHRcdFx0XHRpZiAoIV8uaXNFbXB0eShmaWVsZC5maWVsZHMpKSB7XG4vLyBcdFx0XHRcdFx0XHRcdGZpZWxkLmZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0Ly8g6Leo5bel5L2c5Yy66L2s5Y+R5LiN5aSN5Yi26YCJ5Lq66YCJ57uEXG4vLyBcdFx0XHRcdFx0XHRcdFx0aWYgKFsnZ3JvdXAnLCAndXNlciddLmluY2x1ZGVzKGYudHlwZSkgJiYgb2xkX3NwYWNlX2lkICE9IHNwYWNlX2lkKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG4vLyBcdFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0XHRcdHZhciBrZXkgPSBmLmNvZGU7XG4vLyBcdFx0XHRcdFx0XHRcdFx0dmFyIG9sZF92ID0gb2xkX3RhYmxlX3Jvd192YWx1ZXNba2V5XTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRpZiAob2xkX3YpIHtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaWVsZE9wdGlvbnMgPSBmLm9wdGlvbnMgJiYgZi5vcHRpb25zLnNwbGl0ICYmIGYub3B0aW9ucy5zcGxpdChcIlxcblwiKS5tYXAoZnVuY3Rpb24obil7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBpdGVtU3BsaXRzID0gbi5zcGxpdChcIjpcIik7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGl0ZW1TcGxpdHNbMF0sXG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGl0ZW1TcGxpdHNbMV0gfHwgblxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHR9KTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdC8vIOagoemqjCDljZXpgInvvIzlpJrpgInvvIzkuIvmi4nmoYYg5a2X5q615YC85piv5ZCm5Zyo5paw6KGo5Y2V5a+55bqU5a2X5q6155qE5Y+v6YCJ5YC86IyD5Zu05YaFXG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZi50eXBlID09ICdzZWxlY3QnIHx8IGYudHlwZSA9PSAncmFkaW8nKSB7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBzZWxlY3RlZE9wdGlvbiA9IGZpZWxkT3B0aW9ucy5maW5kKGZ1bmN0aW9uKGl0ZW0pIHtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gaXRlbS52YWx1ZSA9PT0gb2xkX3Y7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHRpZighc2VsZWN0ZWRPcHRpb24pe1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZi50eXBlID09ICdtdWx0aVNlbGVjdCcpIHtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG9sZF9tdWx0aVNlbGVjdGVkID0gb2xkX3Yuc3BsaXQoJywnKTtcbi8vIFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5ld19tdWx0aVNlbGVjdGVkID0gXy5pbnRlcnNlY3Rpb24oZmllbGRPcHRpb25zLm1hcChmdW5jdGlvbihuKXsgcmV0dXJuIG4udmFsdWU7IH0pLCBvbGRfbXVsdGlTZWxlY3RlZCk7XG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRcdG9sZF92ID0gbmV3X211bHRpU2VsZWN0ZWQuam9pbignLCcpO1xuLy8gXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0XHRcdFx0XHRuZXdfdGFibGVfcm93X3ZhbHVlc1trZXldID0gb2xkX3Y7XG4vLyBcdFx0XHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0XHR9KVxuLy8gXHRcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0XHRpZiAob2xkX3RhYmxlX3Jvd192YWx1ZXMuX2lkKSB7XG4vLyBcdFx0XHRcdFx0XHRcdG5ld190YWJsZV9yb3dfdmFsdWVzLl9pZCA9IG5ldyBNb25nby5PYmplY3RJRCgpLl9zdHI7XG4vLyBcdFx0XHRcdFx0XHR9XG5cbi8vIFx0XHRcdFx0XHRcdGlmICghXy5pc0VtcHR5KG5ld190YWJsZV9yb3dfdmFsdWVzKSkge1xuLy8gXHRcdFx0XHRcdFx0XHRuZXdfdmFsdWVzW2ZpZWxkLmNvZGVdLnB1c2gobmV3X3RhYmxlX3Jvd192YWx1ZXMpO1xuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdH0pXG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0gZWxzZSB7XG4vLyBcdFx0XHRcdC8vIOi3qOW3peS9nOWMuui9rOWPkeS4jeWkjeWItumAieS6uumAiee7hFxuLy8gXHRcdFx0XHRpZiAoWydncm91cCcsICd1c2VyJ10uaW5jbHVkZXMoZmllbGQudHlwZSkgJiYgb2xkX3NwYWNlX2lkICE9IHNwYWNlX2lkKSB7XG4vLyBcdFx0XHRcdFx0cmV0dXJuO1xuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHRcdHZhciBrZXkgPSBmaWVsZC5jb2RlO1xuLy8gXHRcdFx0XHR2YXIgb2xkX3YgPSBvbGRfdmFsdWVzW2tleV07XG4vLyBcdFx0XHRcdGlmIChvbGRfdikge1xuLy8gXHRcdFx0XHRcdC8vIOagoemqjCDljZXpgInvvIzlpJrpgInvvIzkuIvmi4nmoYYg5a2X5q615YC85piv5ZCm5Zyo5paw6KGo5Y2V5a+55bqU5a2X5q6155qE5Y+v6YCJ5YC86IyD5Zu05YaFXG4vLyBcdFx0XHRcdFx0dmFyIGZpZWxkT3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMgJiYgZmllbGQub3B0aW9ucy5zcGxpdCAmJiBmaWVsZC5vcHRpb25zLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbihuKXtcbi8vIFx0XHRcdFx0XHRcdHZhciBpdGVtU3BsaXRzID0gbi5zcGxpdChcIjpcIik7XG4vLyBcdFx0XHRcdFx0XHRyZXR1cm4ge1xuLy8gXHRcdFx0XHRcdFx0XHRsYWJlbDogaXRlbVNwbGl0c1swXSxcbi8vIFx0XHRcdFx0XHRcdFx0dmFsdWU6IGl0ZW1TcGxpdHNbMV0gfHwgblxuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdH0pO1xuLy8gXHRcdFx0XHRcdGlmIChmaWVsZC50eXBlID09ICdzZWxlY3QnIHx8IGZpZWxkLnR5cGUgPT0gJ3JhZGlvJykge1xuLy8gXHRcdFx0XHRcdFx0dmFyIHNlbGVjdGVkT3B0aW9uID0gZmllbGRPcHRpb25zLmZpbmQoZnVuY3Rpb24oaXRlbSkge1xuLy8gXHRcdFx0XHRcdFx0XHRyZXR1cm4gaXRlbS52YWx1ZSA9PT0gb2xkX3Y7XG4vLyBcdFx0XHRcdFx0XHR9KTtcbi8vIFx0XHRcdFx0XHRcdGlmKCFzZWxlY3RlZE9wdGlvbil7XG4vLyBcdFx0XHRcdFx0XHRcdHJldHVybjtcbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHR9XG5cbi8vIFx0XHRcdFx0XHRpZiAoZmllbGQudHlwZSA9PSAnbXVsdGlTZWxlY3QnKSB7XG4vLyBcdFx0XHRcdFx0XHR2YXIgb2xkX211bHRpU2VsZWN0ZWQgPSBvbGRfdi5zcGxpdCgnLCcpO1xuLy8gXHRcdFx0XHRcdFx0dmFyIG5ld19tdWx0aVNlbGVjdGVkID0gXy5pbnRlcnNlY3Rpb24oZmllbGRPcHRpb25zLm1hcChmdW5jdGlvbihuKXsgcmV0dXJuIG4udmFsdWU7IH0pLCBvbGRfbXVsdGlTZWxlY3RlZCk7XG4vLyBcdFx0XHRcdFx0XHRvbGRfdiA9IG5ld19tdWx0aVNlbGVjdGVkLmpvaW4oJywnKTtcbi8vIFx0XHRcdFx0XHR9XG5cbi8vIFx0XHRcdFx0XHRuZXdfdmFsdWVzW2tleV0gPSBvbGRfdjtcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fVxuXG4vLyBcdFx0fSlcblxuLy8gXHRcdC8v5aaC5p6c5piv5YiG5Y+R77yM5YiZdmFsdWXkuK3nmoRyZWNvcmRfbmVlZOOAgUZPTkRTSUTkuI3pnIDopoHliIblj5HliLDmlrDnlLPor7fljZXkuK1cbi8vIFx0XHRpZiAoYWN0aW9uX3R5cGUgPT09ICdkaXN0cmlidXRlJykge1xuLy8gXHRcdFx0ZGVsZXRlIG5ld192YWx1ZXMucmVjb3JkX25lZWQ7XG4vLyBcdFx0XHRkZWxldGUgbmV3X3ZhbHVlcy5GT05EU0lEO1xuLy8gXHRcdH1cblxuLy8gXHRcdC8vIOiuoeeul+eUs+ivt+WNleagh+mimFxuLy8gXHRcdHZhciBpbnN0YW5jZV9uYW1lID0gXCJcIjtcbi8vIFx0XHR2YXIgbmFtZV9mb3J1bWxhID0gZm9ybS5jdXJyZW50Lm5hbWVfZm9ydW1sYTtcbi8vIFx0XHRpZiAobmFtZV9mb3J1bWxhKSB7XG4vLyBcdFx0XHR0cnkge1xuLy8gXHRcdFx0XHR2YXIgaXNjcmlwdCA9IG5hbWVfZm9ydW1sYS5yZXBsYWNlKC9cXHsvZywgXCIobmV3X3ZhbHVlc1snXCIpLnJlcGxhY2UoL1xcfS9nLCBcIiddIHx8ICcnKVwiKTtcbi8vIFx0XHRcdFx0dmFyIHJldiA9IGV2YWwoaXNjcmlwdCk7XG4vLyBcdFx0XHRcdGluc3RhbmNlX25hbWUgPSByZXYgfHwgZmxvdy5uYW1lO1xuLy8gXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcbi8vIFx0XHRcdFx0dGhyb3cgbmV3IE1ldGVvci5FcnJvcignY2FjdWxhdGVfaW5zdGFuY2VfbmFtZScsIFwi6K6h566X55Sz6K+35Y2V5qCH6aKY5Ye66ZSZ6K+35qOA5p+l6KGo5Y2V5qCH6aKY6ISa5pys44CCXCIpO1xuLy8gXHRcdFx0fVxuLy8gXHRcdH0gZWxzZSB7XG4vLyBcdFx0XHRpbnN0YW5jZV9uYW1lID0gZmxvdy5uYW1lO1xuLy8gXHRcdH1cblxuLy8gXHRcdC8vIGluc3RhbmNl5Lit6K6w5b2V5b2T5YmN5q2l6aqk5ZCN56ewICMxMzE0XG4vLyBcdFx0dmFyIHN0YXJ0X3N0ZXAgPSBfLmZpbmQoZmxvdy5jdXJyZW50LnN0ZXBzLCBmdW5jdGlvbiAoc3RlcCkge1xuLy8gXHRcdFx0cmV0dXJuIHN0ZXAuc3RlcF90eXBlID09ICdzdGFydCc7XG4vLyBcdFx0fSlcblxuLy8gXHRcdC8vIOa1geeoi+i9rOWPkeWKn+iDveS/ruaUueS4uu+8jOW8gOWni+iKgueCueaciee8lui+keadg+mZkOeahOWtl+auteeahOWAvOi/m+ihjOWkjeWItu+8jOaXoOe8lui+keadg+mZkOeahOWtl+auteWAvOS4jei/m+ihjOWkjeWItiAjMzc0OFxuLy8gXHRcdGlmIChhY3Rpb25fdHlwZSA9PT0gJ2ZvcndhcmQnKSB7XG4vLyBcdFx0XHRuZXdfdmFsdWVzID0gdXVmbG93TWFuYWdlci5nZXRBcHByb3ZlVmFsdWVzKG5ld192YWx1ZXMsIHN0YXJ0X3N0ZXAucGVybWlzc2lvbnMsIGZsb3cuZm9ybSwgZmxvdy5jdXJyZW50LmZvcm1fdmVyc2lvbik7XG4vLyBcdFx0fVxuXG4vLyBcdFx0Ly8g5paw5bu655Sz6K+35Y2V5pe277yMaW5zdGFuY2Vz6K6w5b2V5rWB56iL5ZCN56ew44CB5rWB56iL5YiG57G75ZCN56ewICMxMzEzXG4vLyBcdFx0dmFyIGNhdGVnb3J5X25hbWUgPSBcIlwiO1xuLy8gXHRcdGlmIChmb3JtLmNhdGVnb3J5KSB7XG4vLyBcdFx0XHR2YXIgY2F0ZWdvcnkgPSB1dWZsb3dNYW5hZ2VyLmdldENhdGVnb3J5KGZvcm0uY2F0ZWdvcnkpO1xuLy8gXHRcdFx0aWYgKGNhdGVnb3J5KVxuLy8gXHRcdFx0XHRjYXRlZ29yeV9uYW1lID0gY2F0ZWdvcnkubmFtZTtcbi8vIFx0XHR9XG5cbi8vIFx0XHRfLmVhY2goZm9yd2FyZF91c2VycywgZnVuY3Rpb24gKHVzZXJfaWQpIHtcblxuLy8gXHRcdFx0dmFyIHVzZXJfaW5mbyA9IGRiLnVzZXJzLmZpbmRPbmUodXNlcl9pZCk7XG5cbi8vIFx0XHRcdHZhciBzcGFjZV91c2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7XG4vLyBcdFx0XHRcdHNwYWNlOiBzcGFjZV9pZCxcbi8vIFx0XHRcdFx0dXNlcjogdXNlcl9pZFxuLy8gXHRcdFx0fSwge1xuLy8gXHRcdFx0XHRmaWVsZHM6IHtcbi8vIFx0XHRcdFx0XHRvcmdhbml6YXRpb246IDFcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fSk7XG4vLyBcdFx0XHR2YXIgc3BhY2VfdXNlcl9vcmdfaW5mbyA9IGRiLm9yZ2FuaXphdGlvbnMuZmluZE9uZSh7XG4vLyBcdFx0XHRcdF9pZDogc3BhY2VfdXNlci5vcmdhbml6YXRpb25cbi8vIFx0XHRcdH0sIHtcbi8vIFx0XHRcdFx0ZmllbGRzOiB7XG4vLyBcdFx0XHRcdFx0bmFtZTogMSxcbi8vIFx0XHRcdFx0XHRmdWxsbmFtZTogMVxuLy8gXHRcdFx0XHR9XG4vLyBcdFx0XHR9KTtcblxuLy8gXHRcdFx0dmFyIG5vdyA9IG5ldyBEYXRlKCk7XG4vLyBcdFx0XHR2YXIgaW5zX29iaiA9IHt9O1xuXG4vLyBcdFx0XHR2YXIgYWdlbnQgPSB1dWZsb3dNYW5hZ2VyLmdldEFnZW50KHNwYWNlX2lkLCB1c2VyX2lkKTtcbi8vIFx0XHRcdHZhciBoYW5kbGVyX2lkID0gdXNlcl9pZDtcbi8vIFx0XHRcdHZhciBoYW5kbGVyX2luZm8gPSB1c2VyX2luZm87XG4vLyBcdFx0XHR2YXIgaGFuZGxlcl9zcGFjZV91c2VyID0gc3BhY2VfdXNlcjtcbi8vIFx0XHRcdHZhciBoYW5kbGVyX29yZ19pbmZvID0gc3BhY2VfdXNlcl9vcmdfaW5mbztcbi8vIFx0XHRcdGlmIChhZ2VudCkge1xuLy8gXHRcdFx0XHRoYW5kbGVyX2lkID0gYWdlbnQ7XG4vLyBcdFx0XHRcdGhhbmRsZXJfaW5mbyA9IGRiLnVzZXJzLmZpbmRPbmUoYWdlbnQpO1xuLy8gXHRcdFx0XHRoYW5kbGVyX3NwYWNlX3VzZXIgPSB1dWZsb3dNYW5hZ2VyLmdldFNwYWNlVXNlcihzcGFjZV9pZCwgYWdlbnQpO1xuLy8gXHRcdFx0XHRoYW5kbGVyX29yZ19pbmZvID0gdXVmbG93TWFuYWdlci5nZXRTcGFjZVVzZXJPcmdJbmZvKGhhbmRsZXJfc3BhY2VfdXNlcik7XG4vLyBcdFx0XHR9XG4vLyBcdFx0XHRpbnNfb2JqLl9pZCA9IGRiLmluc3RhbmNlcy5fbWFrZU5ld0lEKCk7XG4vLyBcdFx0XHRpbnNfb2JqLnNwYWNlID0gc3BhY2VfaWQ7XG4vLyBcdFx0XHRpbnNfb2JqLmZsb3cgPSBmbG93X2lkO1xuLy8gXHRcdFx0aW5zX29iai5mbG93X3ZlcnNpb24gPSBmbG93LmN1cnJlbnQuX2lkO1xuLy8gXHRcdFx0aW5zX29iai5mb3JtID0gZmxvdy5mb3JtO1xuLy8gXHRcdFx0aW5zX29iai5mb3JtX3ZlcnNpb24gPSBmbG93LmN1cnJlbnQuZm9ybV92ZXJzaW9uO1xuLy8gXHRcdFx0aW5zX29iai5uYW1lID0gaW5zdGFuY2VfbmFtZTtcbi8vIFx0XHRcdGluc19vYmouc3VibWl0dGVyID0gaGFuZGxlcl9pZDtcbi8vIFx0XHRcdGluc19vYmouc3VibWl0dGVyX25hbWUgPSBoYW5kbGVyX2luZm8ubmFtZTtcbi8vIFx0XHRcdGluc19vYmouYXBwbGljYW50ID0gdXNlcl9pZDtcbi8vIFx0XHRcdGluc19vYmouYXBwbGljYW50X25hbWUgPSB1c2VyX2luZm8ubmFtZTtcbi8vIFx0XHRcdGluc19vYmouYXBwbGljYW50X29yZ2FuaXphdGlvbiA9IHNwYWNlX3VzZXIub3JnYW5pemF0aW9uO1xuLy8gXHRcdFx0aW5zX29iai5hcHBsaWNhbnRfb3JnYW5pemF0aW9uX25hbWUgPSBzcGFjZV91c2VyX29yZ19pbmZvLm5hbWU7XG4vLyBcdFx0XHRpbnNfb2JqLmFwcGxpY2FudF9vcmdhbml6YXRpb25fZnVsbG5hbWUgPSBzcGFjZV91c2VyX29yZ19pbmZvLmZ1bGxuYW1lO1xuLy8gXHRcdFx0aW5zX29iai5zdGF0ZSA9IFwiZHJhZnRcIjtcbi8vIFx0XHRcdGluc19vYmouY29kZSA9IFwiXCI7XG4vLyBcdFx0XHRpbnNfb2JqLmlzX2FyY2hpdmVkID0gZmFsc2U7XG4vLyBcdFx0XHRpbnNfb2JqLmlzX2RlbGV0ZWQgPSBmYWxzZTtcbi8vIFx0XHRcdGluc19vYmouY3JlYXRlZCA9IG5vdztcbi8vIFx0XHRcdGluc19vYmouY3JlYXRlZF9ieSA9IGN1cnJlbnRfdXNlcl9pZDtcbi8vIFx0XHRcdGluc19vYmoubW9kaWZpZWQgPSBub3c7XG4vLyBcdFx0XHRpbnNfb2JqLm1vZGlmaWVkX2J5ID0gY3VycmVudF91c2VyX2lkO1xuLy8gXHRcdFx0aW5zX29iai5pbmJveF91c2VycyA9IFtoYW5kbGVyX2lkXTtcbi8vIFx0XHRcdGluc19vYmoudmFsdWVzID0gbmV3X3ZhbHVlcztcbi8vIFx0XHRcdGlmIChhY3Rpb25fdHlwZSA9PSAnZGlzdHJpYnV0ZScpIHtcbi8vIFx0XHRcdFx0Ly8g6Kej5Yaz5aSa5qyh5YiG5Y+R55yL5LiN5Yiw5q2j5paH44CB6ZmE5Lu26Zeu6aKYXG4vLyBcdFx0XHRcdGlmIChpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlKSB7XG4vLyBcdFx0XHRcdFx0aW5zX29iai5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UgPSBpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlO1xuLy8gXHRcdFx0XHR9IGVsc2Uge1xuLy8gXHRcdFx0XHRcdGluc19vYmouZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlID0gaW5zdGFuY2VfaWQ7XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdFx0aW5zX29iai5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2VzID0gXy5jbG9uZShpbnMuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcykgfHwgW107XG4vLyBcdFx0XHRcdGluc19vYmouZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcy5wdXNoKGluc3RhbmNlX2lkKTtcblxuLy8gXHRcdFx0XHRpZiAocmVsYXRlZCkge1xuLy8gXHRcdFx0XHRcdGluc19vYmoucmVsYXRlZF9pbnN0YW5jZXMgPSBbaW5zdGFuY2VfaWRdXG4vLyBcdFx0XHRcdH1cblxuLy8gXHRcdFx0fSBlbHNlIGlmIChhY3Rpb25fdHlwZSA9PSAnZm9yd2FyZCcpIHtcbi8vIFx0XHRcdFx0aW5zX29iai5mb3J3YXJkX2Zyb21faW5zdGFuY2UgPSBpbnN0YW5jZV9pZFxuLy8gXHRcdFx0fVxuXG4vLyBcdFx0XHQvLyDmlrDlu7pUcmFjZVxuLy8gXHRcdFx0dmFyIHRyYWNlX29iaiA9IHt9O1xuLy8gXHRcdFx0dHJhY2Vfb2JqLl9pZCA9IG5ldyBNb25nby5PYmplY3RJRCgpLl9zdHI7XG4vLyBcdFx0XHR0cmFjZV9vYmouaW5zdGFuY2UgPSBpbnNfb2JqLl9pZDtcbi8vIFx0XHRcdHRyYWNlX29iai5pc19maW5pc2hlZCA9IGZhbHNlO1xuXG4vLyBcdFx0XHQvLyDlvZPliY3mnIDmlrDniYhmbG935Lit5byA5aeL6IqC54K555qEc3RlcF9pZFxuLy8gXHRcdFx0dmFyIHN0ZXBfaWQsIHN0ZXBfbmFtZSwgY2FuX2VkaXRfbWFpbl9hdHRhY2gsIGNhbl9lZGl0X25vcm1hbF9hdHRhY2g7XG4vLyBcdFx0XHRmbG93LmN1cnJlbnQuc3RlcHMuZm9yRWFjaChmdW5jdGlvbiAoc3RlcCkge1xuLy8gXHRcdFx0XHRpZiAoc3RlcC5zdGVwX3R5cGUgPT0gXCJzdGFydFwiKSB7XG4vLyBcdFx0XHRcdFx0c3RlcF9pZCA9IHN0ZXAuX2lkO1xuLy8gXHRcdFx0XHRcdHN0ZXBfbmFtZSA9IHN0ZXAubmFtZTtcbi8vIFx0XHRcdFx0XHRjYW5fZWRpdF9tYWluX2F0dGFjaCA9IHN0ZXAuY2FuX2VkaXRfbWFpbl9hdHRhY2g7XG4vLyBcdFx0XHRcdFx0Y2FuX2VkaXRfbm9ybWFsX2F0dGFjaCA9IHN0ZXAuY2FuX2VkaXRfbm9ybWFsX2F0dGFjaDtcbi8vIFx0XHRcdFx0fVxuLy8gXHRcdFx0fSlcbi8vIFx0XHRcdHRyYWNlX29iai5zdGVwID0gc3RlcF9pZDtcbi8vIFx0XHRcdHRyYWNlX29iai5zdGFydF9kYXRlID0gbm93O1xuLy8gXHRcdFx0dHJhY2Vfb2JqLm5hbWUgPSBzdGVwX25hbWU7XG5cbi8vIFx0XHRcdC8vIOaWsOW7ukFwcHJvdmVcbi8vIFx0XHRcdHZhciBhcHByX29iaiA9IHt9O1xuLy8gXHRcdFx0YXBwcl9vYmouX2lkID0gbmV3IE1vbmdvLk9iamVjdElEKCkuX3N0cjtcbi8vIFx0XHRcdGFwcHJfb2JqLmluc3RhbmNlID0gaW5zX29iai5faWQ7XG4vLyBcdFx0XHRhcHByX29iai50cmFjZSA9IHRyYWNlX29iai5faWQ7XG4vLyBcdFx0XHRhcHByX29iai5pc19maW5pc2hlZCA9IGZhbHNlO1xuLy8gXHRcdFx0YXBwcl9vYmoudXNlciA9IHVzZXJfaWQ7XG4vLyBcdFx0XHRhcHByX29iai51c2VyX25hbWUgPSB1c2VyX2luZm8ubmFtZTtcbi8vIFx0XHRcdGFwcHJfb2JqLmhhbmRsZXIgPSBoYW5kbGVyX2lkO1xuLy8gXHRcdFx0YXBwcl9vYmouaGFuZGxlcl9uYW1lID0gaGFuZGxlcl9pbmZvLm5hbWU7XG4vLyBcdFx0XHRhcHByX29iai5oYW5kbGVyX29yZ2FuaXphdGlvbiA9IGhhbmRsZXJfc3BhY2VfdXNlci5vcmdhbml6YXRpb247XG4vLyBcdFx0XHRhcHByX29iai5oYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lID0gaGFuZGxlcl9vcmdfaW5mby5uYW1lO1xuLy8gXHRcdFx0YXBwcl9vYmouaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWUgPSBoYW5kbGVyX29yZ19pbmZvLmZ1bGxuYW1lO1xuLy8gXHRcdFx0YXBwcl9vYmoudHlwZSA9IFwiZHJhZnRcIjtcbi8vIFx0XHRcdGFwcHJfb2JqLnN0YXJ0X2RhdGUgPSBub3c7XG4vLyBcdFx0XHRhcHByX29iai5yZWFkX2RhdGUgPSBub3c7XG4vLyBcdFx0XHRhcHByX29iai5pc19yZWFkID0gZmFsc2U7XG4vLyBcdFx0XHRhcHByX29iai5pc19lcnJvciA9IGZhbHNlO1xuXG4vLyBcdFx0XHRhcHByX29iai52YWx1ZXMgPSBuZXdfdmFsdWVzO1xuXG4vLyBcdFx0XHRpZiAoYWdlbnQpIHtcbi8vIFx0XHRcdFx0YXBwcl9vYmouYWdlbnQgPSBhZ2VudDtcbi8vIFx0XHRcdH1cblxuLy8gXHRcdFx0dHJhY2Vfb2JqLmFwcHJvdmVzID0gW2FwcHJfb2JqXTtcbi8vIFx0XHRcdGluc19vYmoudHJhY2VzID0gW3RyYWNlX29ial07XG5cbi8vIFx0XHRcdGlmIChmbG93LmF1dG9fcmVtaW5kID09IHRydWUpXG4vLyBcdFx0XHRcdGluc19vYmouYXV0b19yZW1pbmQgPSB0cnVlO1xuXG4vLyBcdFx0XHRpbnNfb2JqLmN1cnJlbnRfc3RlcF9uYW1lID0gc3RhcnRfc3RlcC5uYW1lO1xuXG4vLyBcdFx0XHRpbnNfb2JqLmZsb3dfbmFtZSA9IGZsb3cubmFtZTtcbi8vIFx0XHRcdGlmIChjYXRlZ29yeV9uYW1lKSB7XG4vLyBcdFx0XHRcdGluc19vYmouY2F0ZWdvcnlfbmFtZSA9IGNhdGVnb3J5Lm5hbWU7XG4vLyBcdFx0XHRcdGluc19vYmouY2F0ZWdvcnkgPSBjYXRlZ29yeS5faWQ7XG4vLyBcdFx0XHR9XG5cbi8vIFx0XHRcdG5ld19pbnNfaWQgPSBkYi5pbnN0YW5jZXMuaW5zZXJ0KGluc19vYmopO1xuXG4vLyBcdFx0XHQvLyDlpI3liLbpmYTku7Zcbi8vIFx0XHRcdHZhciBjb2xsZWN0aW9uID0gY2ZzLmluc3RhbmNlcztcblxuLy8gXHRcdFx0Ly/lsIbljp/ooajljZXlhoXlrrnlrZjlgqjkuLrnrKzkuIDkuKrpmYTku7Zcbi8vIFx0XHRcdGlmIChoYXNTYXZlSW5zdGFuY2VUb0F0dGFjaG1lbnQpIHtcbi8vIFx0XHRcdFx0Ly8gdHJ5IHtcblxuLy8gXHRcdFx0XHRpbnN0YW5jZUh0bWwgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sKHVzZXJfaW5mbywgc3BhY2VfaWQsIGlucywge1xuLy8gXHRcdFx0XHRcdGFic29sdXRlOiB0cnVlLFxuLy8gXHRcdFx0XHRcdHNob3dUcmFjZTogdHJ1ZVxuLy8gXHRcdFx0XHR9KVxuLy8gXHRcdFx0XHR2YXIgaW5zdGFuY2VGaWxlID0gbmV3IEZTLkZpbGUoKTtcbi8vIFx0XHRcdFx0aW5zdGFuY2VGaWxlLmF0dGFjaERhdGEoQnVmZmVyLmZyb20oaW5zdGFuY2VIdG1sLCBcInV0Zi04XCIpLCB7XG4vLyBcdFx0XHRcdFx0dHlwZTogXCJ0ZXh0L2h0bWxcIlxuLy8gXHRcdFx0XHR9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbi8vIFx0XHRcdFx0XHRpZiAoZXJyb3IpIHtcbi8vIFx0XHRcdFx0XHRcdHRocm93IG5ldyBNZXRlb3IuRXJyb3IoZXJyb3IuZXJyb3IsIGVycm9yLnJlYXNvbik7XG4vLyBcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0aW5zdGFuY2VGaWxlLm5hbWUoaW5zLm5hbWUgKyBcIi5odG1sXCIpO1xuLy8gXHRcdFx0XHRcdGluc3RhbmNlRmlsZS5zaXplKGluc3RhbmNlSHRtbC5sZW5ndGgpO1xuXG4vLyBcdFx0XHRcdFx0dmFyIG1ldGFkYXRhID0ge1xuLy8gXHRcdFx0XHRcdFx0b3duZXI6IHVzZXJfaWQsXG4vLyBcdFx0XHRcdFx0XHRvd25lcl9uYW1lOiB1c2VyX2luZm8ubmFtZSxcbi8vIFx0XHRcdFx0XHRcdHNwYWNlOiBzcGFjZV9pZCxcbi8vIFx0XHRcdFx0XHRcdGluc3RhbmNlOiBuZXdfaW5zX2lkLFxuLy8gXHRcdFx0XHRcdFx0YXBwcm92ZTogYXBwcl9vYmouX2lkLFxuLy8gXHRcdFx0XHRcdFx0Y3VycmVudDogdHJ1ZVxuLy8gXHRcdFx0XHRcdH07XG4vLyBcdFx0XHRcdFx0aW5zdGFuY2VGaWxlLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4vLyBcdFx0XHRcdFx0dmFyIGZpbGVPYmogPSBjb2xsZWN0aW9uLmluc2VydChpbnN0YW5jZUZpbGUpO1xuLy8gXHRcdFx0XHRcdGZpbGVPYmoudXBkYXRlKHtcbi8vIFx0XHRcdFx0XHRcdCRzZXQ6IHtcbi8vIFx0XHRcdFx0XHRcdFx0J21ldGFkYXRhLnBhcmVudCc6IGZpbGVPYmouX2lkXG4vLyBcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0fSlcbi8vIFx0XHRcdFx0fSlcblxuLy8gXHRcdFx0XHQvLyB9IGNhdGNoIChlKSB7XG4vLyBcdFx0XHRcdC8vICAgICBjb25zb2xlLmVycm9yKGUpO1xuLy8gXHRcdFx0XHQvLyB9XG4vLyBcdFx0XHR9XG5cbi8vIFx0XHRcdGlmIChpc0ZvcndhcmRBdHRhY2htZW50cyAmJiBhY3Rpb25fdHlwZSA9PSAnZm9yd2FyZCcpIHtcbi8vIFx0XHRcdFx0dmFyIGZpbGVzID0gY29sbGVjdGlvbi5maW5kKHtcbi8vIFx0XHRcdFx0XHQnbWV0YWRhdGEuaW5zdGFuY2UnOiBpbnN0YW5jZV9pZCxcbi8vIFx0XHRcdFx0XHQnbWV0YWRhdGEuY3VycmVudCc6IHRydWVcbi8vIFx0XHRcdFx0fSk7XG4vLyBcdFx0XHRcdGZpbGVzLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbi8vIFx0XHRcdFx0XHQvLyDliKTmlq3mlrDnmoTmtYHnqIvlvIDlp4voioLngrnmmK/lkKbmnInnvJbovpHmraPmloflkoznvJbovpHpmYTku7bmnYPpmZBcbi8vIFx0XHRcdFx0XHRpZiAoZi5tZXRhZGF0YS5tYWluID09IHRydWUpIHtcbi8vIFx0XHRcdFx0XHRcdGlmIChjYW5fZWRpdF9tYWluX2F0dGFjaCAhPSB0cnVlICYmIGNhbl9lZGl0X25vcm1hbF9hdHRhY2ggIT0gdHJ1ZSlcbi8vIFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuLy8gXHRcdFx0XHRcdH0gZWxzZSB7XG4vLyBcdFx0XHRcdFx0XHRpZiAoY2FuX2VkaXRfbm9ybWFsX2F0dGFjaCAhPSB0cnVlKVxuLy8gXHRcdFx0XHRcdFx0XHRyZXR1cm47XG4vLyBcdFx0XHRcdFx0fVxuXG4vLyBcdFx0XHRcdFx0dmFyIG5ld0ZpbGUgPSBuZXcgRlMuRmlsZSgpO1xuLy8gXHRcdFx0XHRcdG5ld0ZpbGUuYXR0YWNoRGF0YShmLmNyZWF0ZVJlYWRTdHJlYW0oJ2luc3RhbmNlcycpLCB7XG4vLyBcdFx0XHRcdFx0XHR0eXBlOiBmLm9yaWdpbmFsLnR5cGVcbi8vIFx0XHRcdFx0XHR9LCBmdW5jdGlvbiAoZXJyKSB7XG4vLyBcdFx0XHRcdFx0XHRpZiAoZXJyKSB7XG4vLyBcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBNZXRlb3IuRXJyb3IoZXJyLmVycm9yLCBlcnIucmVhc29uKTtcbi8vIFx0XHRcdFx0XHRcdH1cbi8vIFx0XHRcdFx0XHRcdG5ld0ZpbGUubmFtZShmLm5hbWUoKSk7XG4vLyBcdFx0XHRcdFx0XHRuZXdGaWxlLnNpemUoZi5zaXplKCkpO1xuLy8gXHRcdFx0XHRcdFx0dmFyIG1ldGFkYXRhID0ge1xuLy8gXHRcdFx0XHRcdFx0XHRvd25lcjogdXNlcl9pZCxcbi8vIFx0XHRcdFx0XHRcdFx0b3duZXJfbmFtZTogdXNlcl9pbmZvLm5hbWUsXG4vLyBcdFx0XHRcdFx0XHRcdHNwYWNlOiBzcGFjZV9pZCxcbi8vIFx0XHRcdFx0XHRcdFx0aW5zdGFuY2U6IG5ld19pbnNfaWQsXG4vLyBcdFx0XHRcdFx0XHRcdGFwcHJvdmU6IGFwcHJfb2JqLl9pZCxcbi8vIFx0XHRcdFx0XHRcdFx0Y3VycmVudDogdHJ1ZVxuLy8gXHRcdFx0XHRcdFx0fTtcbi8vIFx0XHRcdFx0XHRcdGlmIChmLm1ldGFkYXRhLm1haW4gPT0gdHJ1ZSAmJiBjYW5fZWRpdF9tYWluX2F0dGFjaCA9PSB0cnVlKSB7XG4vLyBcdFx0XHRcdFx0XHRcdG1ldGFkYXRhLm1haW4gPSB0cnVlO1xuLy8gXHRcdFx0XHRcdFx0fVxuLy8gXHRcdFx0XHRcdFx0bmV3RmlsZS5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuLy8gXHRcdFx0XHRcdFx0dmFyIGZpbGVPYmogPSBjb2xsZWN0aW9uLmluc2VydChuZXdGaWxlKTtcbi8vIFx0XHRcdFx0XHRcdGZpbGVPYmoudXBkYXRlKHtcbi8vIFx0XHRcdFx0XHRcdFx0JHNldDoge1xuLy8gXHRcdFx0XHRcdFx0XHRcdCdtZXRhZGF0YS5wYXJlbnQnOiBmaWxlT2JqLl9pZFxuLy8gXHRcdFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdFx0XHR9KVxuLy8gXHRcdFx0XHRcdH0pXG5cbi8vIFx0XHRcdFx0fSlcbi8vIFx0XHRcdH1cblxuLy8gXHRcdFx0aWYgKGFjdGlvbl90eXBlID09PSAnZGlzdHJpYnV0ZScpIHtcbi8vIFx0XHRcdFx0Ly8g57uZ5b2T5YmN55qE55Sz6K+35Y2V5aKe5Yqg5YiG5Y+R6K6w5b2VXG4vLyBcdFx0XHRcdHZhciBhcHByID0ge1xuLy8gXHRcdFx0XHRcdCdfaWQnOiBuZXcgTW9uZ28uT2JqZWN0SUQoKS5fc3RyLFxuLy8gXHRcdFx0XHRcdCdpbnN0YW5jZSc6IGluc3RhbmNlX2lkLFxuLy8gXHRcdFx0XHRcdCd0cmFjZSc6IGN1cnJlbnRfdHJhY2VfaWQsXG4vLyBcdFx0XHRcdFx0J2lzX2ZpbmlzaGVkJzogdHJ1ZSxcbi8vIFx0XHRcdFx0XHQndXNlcic6IHVzZXJfaWQsXG4vLyBcdFx0XHRcdFx0J3VzZXJfbmFtZSc6IHVzZXJfaW5mby5uYW1lLFxuLy8gXHRcdFx0XHRcdCdoYW5kbGVyJzogdXNlcl9pZCxcbi8vIFx0XHRcdFx0XHQnaGFuZGxlcl9uYW1lJzogdXNlcl9pbmZvLm5hbWUsXG4vLyBcdFx0XHRcdFx0J2hhbmRsZXJfb3JnYW5pemF0aW9uJzogc3BhY2VfdXNlci5vcmdhbml6YXRpb24sXG4vLyBcdFx0XHRcdFx0J2hhbmRsZXJfb3JnYW5pemF0aW9uX25hbWUnOiBzcGFjZV91c2VyX29yZ19pbmZvLm5hbWUsXG4vLyBcdFx0XHRcdFx0J2hhbmRsZXJfb3JnYW5pemF0aW9uX2Z1bGxuYW1lJzogc3BhY2VfdXNlcl9vcmdfaW5mby5mdWxsbmFtZSxcbi8vIFx0XHRcdFx0XHQndHlwZSc6IGFjdGlvbl90eXBlLFxuLy8gXHRcdFx0XHRcdCdzdGFydF9kYXRlJzogbmV3IERhdGUoKSxcbi8vIFx0XHRcdFx0XHQnZmluaXNoX2RhdGUnOiBuZXcgRGF0ZSgpLFxuLy8gXHRcdFx0XHRcdCdpc19yZWFkJzogZmFsc2UsXG4vLyBcdFx0XHRcdFx0J2p1ZGdlJzogJ3N1Ym1pdHRlZCcsXG4vLyBcdFx0XHRcdFx0J2Zyb21fdXNlcic6IGN1cnJlbnRfdXNlcl9pZCxcbi8vIFx0XHRcdFx0XHQnZnJvbV91c2VyX25hbWUnOiBmcm9tX3VzZXJfbmFtZSxcbi8vIFx0XHRcdFx0XHQnZm9yd2FyZF9zcGFjZSc6IHNwYWNlX2lkLFxuLy8gXHRcdFx0XHRcdCdmb3J3YXJkX2luc3RhbmNlJzogbmV3X2luc19pZCxcbi8vIFx0XHRcdFx0XHQnZGVzY3JpcHRpb24nOiBkZXNjcmlwdGlvbixcbi8vIFx0XHRcdFx0XHQnZnJvbV9hcHByb3ZlX2lkJzogZnJvbV9hcHByb3ZlX2lkXG4vLyBcdFx0XHRcdH07XG5cbi8vIFx0XHRcdFx0Zm9yd2FyZF9hcHByb3Zlcy5wdXNoKGFwcHIpO1xuLy8gXHRcdFx0fVxuXG4vLyBcdFx0XHRuZXdfaW5zX2lkcy5wdXNoKG5ld19pbnNfaWQpO1xuLy8gXHRcdFx0cHVzaE1hbmFnZXIuc2VuZF9tZXNzYWdlX3RvX3NwZWNpZnlVc2VyKFwiY3VycmVudF91c2VyXCIsIHVzZXJfaWQpO1xuLy8gXHRcdH0pXG5cbi8vIFx0XHRpZiAoIV8uaXNFbXB0eShmb3J3YXJkX2FwcHJvdmVzKSkge1xuLy8gXHRcdFx0c2V0X29iai5tb2RpZmllZCA9IG5ldyBEYXRlKCk7XG4vLyBcdFx0XHRzZXRfb2JqLm1vZGlmaWVkX2J5ID0gY3VycmVudF91c2VyX2lkO1xuLy8gXHRcdFx0dmFyIHIgPSBkYi5pbnN0YW5jZXMudXBkYXRlKHtcbi8vIFx0XHRcdFx0X2lkOiBpbnN0YW5jZV9pZCxcbi8vIFx0XHRcdFx0XCJ0cmFjZXMuX2lkXCI6IGN1cnJlbnRfdHJhY2VfaWRcbi8vIFx0XHRcdH0sIHtcbi8vIFx0XHRcdFx0JHNldDogc2V0X29iaixcbi8vIFx0XHRcdFx0JGFkZFRvU2V0OiB7XG4vLyBcdFx0XHRcdFx0J3RyYWNlcy4kLmFwcHJvdmVzJzoge1xuLy8gXHRcdFx0XHRcdFx0JGVhY2g6IGZvcndhcmRfYXBwcm92ZXNcbi8vIFx0XHRcdFx0XHR9XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pO1xuLy8gXHRcdH1cblxuXG4vLyBcdFx0aWYgKHIpIHtcbi8vIFx0XHRcdF8uZWFjaChjdXJyZW50X3RyYWNlLmFwcHJvdmVzLCBmdW5jdGlvbiAoYSwgaWR4KSB7XG4vLyBcdFx0XHRcdGlmIChhLl9pZCA9PSBmcm9tX2FwcHJvdmVfaWQpIHtcbi8vIFx0XHRcdFx0XHR2YXIgdXBkYXRlX3JlYWQgPSB7fTtcbi8vIFx0XHRcdFx0XHR1cGRhdGVfcmVhZFtcInRyYWNlcy4kLmFwcHJvdmVzLlwiICsgaWR4ICsgXCIucmVhZF9kYXRlXCJdID0gbmV3IERhdGUoKTtcbi8vIFx0XHRcdFx0XHRkYi5pbnN0YW5jZXMudXBkYXRlKHtcbi8vIFx0XHRcdFx0XHRcdF9pZDogaW5zdGFuY2VfaWQsXG4vLyBcdFx0XHRcdFx0XHRcInRyYWNlcy5faWRcIjogY3VycmVudF90cmFjZV9pZFxuLy8gXHRcdFx0XHRcdH0sIHtcbi8vIFx0XHRcdFx0XHRcdCRzZXQ6IHVwZGF0ZV9yZWFkXG4vLyBcdFx0XHRcdFx0fSk7XG4vLyBcdFx0XHRcdH1cbi8vIFx0XHRcdH0pXG5cbi8vIFx0XHR9XG5cbi8vIFx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4vLyBcdFx0XHRjb2RlOiAyMDAsXG4vLyBcdFx0XHRkYXRhOiB7IG5ld19pbnNfaWRzOiBuZXdfaW5zX2lkcyB9XG4vLyBcdFx0fSlcbi8vIFx0fSBjYXRjaCAoZSkge1xuLy8gXHRcdGNvbnNvbGUuZXJyb3IoZS5zdGFjaylcbi8vIFx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4vLyBcdFx0XHRjb2RlOiAyMDAsXG4vLyBcdFx0XHRkYXRhOiB7XG4vLyBcdFx0XHRcdGVycm9yczogW2VdXG4vLyBcdFx0XHR9XG4vLyBcdFx0fSlcbi8vIFx0fVxuXG4vLyB9KSIsImlmIHByb2Nlc3MuZW52LkNSRUFUT1JfTk9ERV9FTlYgPT0gJ2RldmVsb3BtZW50J1xuICAgIEpzb25Sb3V0ZXMuYWRkICdwb3N0JywgJy90ZXN0L3dlYmhvb2snLCAocmVxLCByZXMsIG5leHQpIC0+XG4gICAgICAgIHRyeVxuXG4gICAgICAgICAgICBoYXNoRGF0YSA9IHJlcS5ib2R5XG4gICAgICAgICAgICBjb25zb2xlLmxvZyAnYWN0aW9uOiAnLCBoYXNoRGF0YS5hY3Rpb25cbiAgICAgICAgICAgIGNvbnNvbGUubG9nICdmcm9tX3VzZXI6ICcsIGhhc2hEYXRhLmZyb21fdXNlclxuICAgICAgICAgICAgY29uc29sZS5sb2cgJ3RvX3VzZXJzOiAnLCBoYXNoRGF0YS50b191c2Vyc1xuXG5cbiAgICAgICAgICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IDIwMFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7fVxuICAgICAgICBjYXRjaCBlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yIGUuc3RhY2tcbiAgICAgICAgICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG4gICAgICAgICAgICAgICAgY29kZTogMjAwXG4gICAgICAgICAgICAgICAgZGF0YTogeyBlcnJvcnM6IFt7ZXJyb3JNZXNzYWdlOiBlLm1lc3NhZ2V9XSB9IiwiaWYgKHByb2Nlc3MuZW52LkNSRUFUT1JfTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgSnNvblJvdXRlcy5hZGQoJ3Bvc3QnLCAnL3Rlc3Qvd2ViaG9vaycsIGZ1bmN0aW9uKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgdmFyIGUsIGhhc2hEYXRhO1xuICAgIHRyeSB7XG4gICAgICBoYXNoRGF0YSA9IHJlcS5ib2R5O1xuICAgICAgY29uc29sZS5sb2coJ2FjdGlvbjogJywgaGFzaERhdGEuYWN0aW9uKTtcbiAgICAgIGNvbnNvbGUubG9nKCdmcm9tX3VzZXI6ICcsIGhhc2hEYXRhLmZyb21fdXNlcik7XG4gICAgICBjb25zb2xlLmxvZygndG9fdXNlcnM6ICcsIGhhc2hEYXRhLnRvX3VzZXJzKTtcbiAgICAgIHJldHVybiBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICAgIGNvZGU6IDIwMCxcbiAgICAgICAgZGF0YToge31cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlID0gZXJyb3I7XG4gICAgICBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgICAgcmV0dXJuIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgICAgY29kZTogMjAwLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZXJyb3JzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogZS5tZXNzYWdlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdHNldF9pbnN0YW5jZV9zdGVwX2FwcHJvdmU6IChpbnNfaWQsIHN0ZXBfYXBwcm92ZSwgc3RlcHNBcHByb3Zlc09wdGlvbnMpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnNldF9pbnN0YW5jZV9zdGVwX2FwcHJvdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHRzZXRfaW5zdGFuY2Vfc2tpcF9zdGVwczogKGluc19pZCwgc3RlcElkLCBhY3Rpb24pLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnNldF9pbnN0YW5jZV9za2lwX3N0ZXBzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykiLCIvKlxuICogQEF1dGhvcjogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQERhdGU6IDIwMjEtMDUtMjQgMTI6MzI6NTZcbiAqIEBMYXN0RWRpdG9yczogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyMi0xMi0yMiAxNToxODo1OVxuICogQERlc2NyaXB0aW9uOiBcbiAqL1xuY29uc3QgeyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzKHtcblxuXHRnZXRfaW5zdGFuY2VfZGF0YTogZnVuY3Rpb24gKGluc3RhbmNlX2lkLCBmb3JtQ2FjaGVkLCBmbG93Q2FjaGVkKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5nZXRfaW5zdGFuY2VfZGF0YS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH1cblxufSk7XG4iLCJjb25zdCB7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHMoe1xuXG5cdGRyYWZ0X3NhdmVfaW5zdGFuY2U6IGZ1bmN0aW9uIChpbnMpIHtcblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmRyYWZ0X3NhdmVfaW5zdGFuY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9LFxuXG5cdGluYm94X3NhdmVfaW5zdGFuY2U6IGZ1bmN0aW9uIChhcHByb3ZlKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5pbmJveF9zYXZlX2luc3RhbmNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fVxuXG59KSIsIi8qXG4gKiBAQXV0aG9yOiBzdW5oYW9saW5AaG90b2EuY29tXG4gKiBARGF0ZTogMjAyMy0wMS0xMyAxNzozNToxM1xuICogQExhc3RFZGl0b3JzOiBzdW5oYW9saW5AaG90b2EuY29tXG4gKiBATGFzdEVkaXRUaW1lOiAyMDIzLTAzLTExIDEwOjUxOjI5XG4gKiBARGVzY3JpcHRpb246IFxuICovXG5jb25zdCB7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHMoe1xuXHRjY19kbzogZnVuY3Rpb24gKGFwcHJvdmUsIGNjX3VzZXJfaWRzLCBkZXNjcmlwdGlvbikge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2NfZG8uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9LFxuXG5cdGNjX3JlYWQ6IGZ1bmN0aW9uIChhcHByb3ZlKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jY19yZWFkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fSxcblxuXHRjY19zdWJtaXQ6IGZ1bmN0aW9uIChpbnNfaWQsIGRlc2NyaXB0aW9uLCBteUFwcHJvdmUsIGNjSGFzRWRpdFBlcm1pc3Npb24pIHtcblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNjX3N1Ym1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH0sXG5cblx0Y2NfcmVtb3ZlOiBmdW5jdGlvbiAoaW5zdGFuY2VJZCwgYXBwcm92ZUlkKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jY19yZW1vdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9LFxuXG5cdGJhdGNoX2NhbmNlbF9jYzogZnVuY3Rpb24gKGluc3RhbmNlX2lkLCBhcHByb3ZlX2lkcykge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuYmF0Y2hfY2FuY2VsX2NjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fSxcblxuXHRjY19zYXZlOiBmdW5jdGlvbiAoaW5zX2lkLCBkZXNjcmlwdGlvbiwgbXlBcHByb3ZlLCBjY0hhc0VkaXRQZXJtaXNzaW9uKSB7XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jY19zYXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fVxufSkiLCIvKlxuICogQEF1dGhvcjogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQERhdGU6IDIwMjEtMDUtMjQgMTI6MzI6NTZcbiAqIEBMYXN0RWRpdG9yczogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyMi0xMi0yMiAxNToxODozOFxuICogQERlc2NyaXB0aW9uOiBcbiAqL1xuY29uc3QgeyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzKHtcblx0Ly8g5pS55Li66YCa6L+HYXBp6LCD55SoXG5cdGZvcndhcmRfaW5zdGFuY2U6IGZ1bmN0aW9uIChpbnN0YW5jZV9pZCwgc3BhY2VfaWQsIGZsb3dfaWQsIGhhc1NhdmVJbnN0YW5jZVRvQXR0YWNobWVudCwgZGVzY3JpcHRpb24sIGlzRm9yd2FyZEF0dGFjaG1lbnRzLCBzZWxlY3RlZFVzZXJzLCBhY3Rpb25fdHlwZSwgcmVsYXRlZCwgZnJvbV9hcHByb3ZlX2lkKSB7XG5cdFx0aWYgKCF0aGlzLnVzZXJJZClcblx0XHRcdHRocm93IG5ldyBNZXRlb3IuRXJyb3IoJ25vdC1hdXRob3JpemVkJyk7XG5cblx0XHRyZXR1cm47XG5cdH0sXG5cblxuXHRmb3J3YXJkX3JlbW92ZTogZnVuY3Rpb24gKGluc3RhbmNlX2lkLCB0cmFjZV9pZCwgYXBwcm92ZV9pZCkge1xuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuZm9yd2FyZF9yZW1vdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9LFxuXG5cdGNhbmNlbERpc3RyaWJ1dGU6IGZ1bmN0aW9uIChpbnN0YW5jZV9pZCwgYXBwcm92ZV9pZHMpIHtcblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNhbmNlbERpc3RyaWJ1dGUuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXHR9XG5cblxufSkiLCIvKlxuICogQEF1dGhvcjogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQERhdGU6IDIwMjEtMDUtMjQgMTI6MzI6NTZcbiAqIEBMYXN0RWRpdG9yczogc3VuaGFvbGluQGhvdG9hLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyMi0xMi0yMiAxNToxNzo1NFxuICogQERlc2NyaXB0aW9uOiBcbiAqL1xuY29uc3QgeyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzKHtcbiAgICBjZnNfaW5zdGFuY2VzX3JlbW92ZTogZnVuY3Rpb24gKGZpbGVfaWQpIHtcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jZnNfaW5zdGFuY2VzX3JlbW92ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfSxcblxuICAgIGNmc19pbnN0YW5jZXNfc2V0X2N1cnJlbnQ6IGZ1bmN0aW9uIChmaWxlX2lkKSB7XG4gICAgICAgIHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2ZzX2luc3RhbmNlc19zZXRfY3VycmVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfSxcblxuICAgIGNmc19pbnN0YW5jZXNfbG9jazogZnVuY3Rpb24gKGZpbGVfaWQsIHVzZXJfaWQsIHVzZXJfbmFtZSkge1xuICAgICAgICByZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNmc19pbnN0YW5jZXNfbG9jay5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgfSxcblxuICAgIGNmc19pbnN0YW5jZXNfdW5sb2NrOiBmdW5jdGlvbiAoZmlsZV9pZCkge1xuICAgICAgICByZXR1cm4gd29ya2Zsb3dNZXRob2RzLmNmc19pbnN0YW5jZXNfdW5sb2NrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICB9LFxuXG4gICAgZG93bmxvYWRfc3BhY2VfaW5zdGFuY2VfYXR0YWNobWVudHNfdG9fZGlzazogZnVuY3Rpb24gKHNwYWNlSWQsIGNmc1JlY29yZElkcykge1xuICAgICAgICByZXR1cm4gd29ya2Zsb3dNZXRob2RzLmRvd25sb2FkX3NwYWNlX2luc3RhbmNlX2F0dGFjaG1lbnRzX3RvX2Rpc2suYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgIH1cbn0pIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdHNldF9hcHByb3ZlX2hhdmVfcmVhZDogKGluc3RhbmNlSWQsIHRyYWNlSWQsIGFwcHJvdmVJZCkgLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnNldF9hcHByb3ZlX2hhdmVfcmVhZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cblx0Y2hhbmdlX2FwcHJvdmVfaW5mbzogKGluc3RhbmNlSWQsIHRyYWNlSWQsIGFwcHJvdmVJZCwgZGVzY3JpcHRpb24sIGZpbmlzaF9kYXRlKSAtPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuY2hhbmdlX2FwcHJvdmVfaW5mby5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cblx0dXBkYXRlX2FwcHJvdmVfc2lnbjogKGluc3RhbmNlSWQsIHRyYWNlSWQsIGFwcHJvdmVJZCwgc2lnbl9maWVsZF9jb2RlLCBkZXNjcmlwdGlvbiwgc2lnbl90eXBlLCBsYXN0U2lnbkFwcHJvdmUpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnVwZGF0ZV9hcHByb3ZlX3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cblx0dXBkYXRlX3NpZ25fc2hvdzogKG9ianMsIG15QXBwcm92ZV9pZCkgLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnVwZGF0ZV9zaWduX3Nob3cuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdGluc3RhbmNlX3JldHVybjogKGFwcHJvdmUsIHJlYXNvbiktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuaW5zdGFuY2VfcmV0dXJuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykiLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblx0aW5zdGFuY2VfcmVtaW5kOiAocmVtaW5kX3VzZXJzLCByZW1pbmRfY291bnQsIHJlbWluZF9kZWFkbGluZSwgaW5zdGFuY2VfaWQsIGFjdGlvbl90eXBlcywgdHJhY2VfaWQpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmluc3RhbmNlX3JlbWluZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4iLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblx0bmV4dF9zdGVwX3VzZXJzX25vdF9mb3VuZDogKGRlYWxfdHlwZSwgc3RlcF9uYW1lLCBwYXJhbXMpIC0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5uZXh0X3N0ZXBfdXNlcnNfbm90X2ZvdW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5fZXZhbCA9IHJlcXVpcmUoJ2V2YWwnKVxuXG5NZXRlb3IubWV0aG9kc1xuXHRpbnN0YW5jZU51bWJlckJ1aWxkZXI6IChzcGFjZUlkLCBuYW1lKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5pbnN0YW5jZU51bWJlckJ1aWxkZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdGNoZWNrX21haW5fYXR0YWNoOiAoaW5zX2lkLCBuYW1lKS0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jaGVja19tYWluX2F0dGFjaC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4iLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblx0cmVtb3ZlX3JlbGF0ZWQ6IChpbnNfaWQsIHJlX2luc19pZCktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMucmVtb3ZlX3JlbGF0ZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cdHVwZGF0ZV9pbnN0YW5jZV9yZWxhdGVkOiAoaW5zX2lkLCByZWxhdGVkX2luc3RhbmNlcyktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMudXBkYXRlX2luc3RhbmNlX3JlbGF0ZWQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdHVwZGF0ZUZsb3dQb3NpdGlvbjogKGRhdGEpIC0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy51cGRhdGVGbG93UG9zaXRpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cdHVwZGF0ZUZsb3dSb2xlOiAoZGF0YSkgLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLnVwZGF0ZUZsb3dSb2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykiLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblx0c3RhcnRfZmxvdzogKHNwYWNlLCBmbG93SWQsIHN0YXJ0KSAtPlxuXG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5zdGFydF9mbG93LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdGdldF9pbnN0YW5jZV90cmFjZXM6IChpbnNfaWQpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmdldF9pbnN0YW5jZV90cmFjZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXHQnZ2V0X2JhdGNoX2luc3RhbmNlcyc6IChzcGFjZSwgY2F0ZWdvcnlJZCwgZmxvd0lkcyktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuZ2V0X2JhdGNoX2luc3RhbmNlcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cblx0J2dldF9iYXRjaF9pbnN0YW5jZXNfY291bnQnOiAoc3BhY2UsIGNhdGVnb3J5SWQsIGZsb3dJZHMpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmdldF9iYXRjaF9pbnN0YW5jZXNfY291bnQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuXG5cdCdnZXRfbXlfYXBwcm92ZXMnOiAoaW5zdGFuY2VJZHMpLT5cblx0XHRyZXR1cm4gd29ya2Zsb3dNZXRob2RzLmdldF9teV9hcHByb3Zlcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cblxuXG5cblxuXG5cblxuXG5cblxuIiwieyB3b3JrZmxvd01ldGhvZHMgfSA9IHJlcXVpcmUoJ0BzdGVlZG9zL3dvcmtmbG93Jylcbk1ldGVvci5tZXRob2RzXG5cdGNoYW5nZV9mbG93X3N0YXRlOiAoZmxvd3MpIC0+XG5cdFx0cmV0dXJuIHdvcmtmbG93TWV0aG9kcy5jaGFuZ2VfZmxvd19zdGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cblxuXG5cbiIsInsgd29ya2Zsb3dNZXRob2RzIH0gPSByZXF1aXJlKCdAc3RlZWRvcy93b3JrZmxvdycpXG5NZXRlb3IubWV0aG9kc1xuXG5cdGhpZGVfaW5zdGFuY2U6IChpbnNJZCwgaXNfaGlkZGVuKSAtPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuaGlkZV9pbnN0YW5jZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4iLCJ7IHdvcmtmbG93TWV0aG9kcyB9ID0gcmVxdWlyZSgnQHN0ZWVkb3Mvd29ya2Zsb3cnKVxuTWV0ZW9yLm1ldGhvZHNcblx0Z2V0SW5zdGFuY2VWYWx1ZXM6IChpbnNJZCktPlxuXHRcdHJldHVybiB3b3JrZmxvd01ldGhvZHMuZ2V0SW5zdGFuY2VWYWx1ZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSIsIkNvb2tpZXMgPSByZXF1aXJlKFwiY29va2llc1wiKVxuXG5nZXRJbnN0YW5jZVJlYWRPbmx5ID0gKHJlcSwgcmVzLCBuZXh0LCBvcHRpb25zKSAtPlxuXG5cdHVzZXIgPSBTdGVlZG9zLmdldEFQSUxvZ2luVXNlcihyZXEsIHJlcylcblxuXHRpZiByZXE/LnF1ZXJ5Py5hY2Nlc3NfdG9rZW5cblx0XHR1c2VySWQgPSBTdGVlZG9zLmdldFVzZXJJZEZyb21BY2Nlc3NUb2tlbihyZXEucXVlcnkuYWNjZXNzX3Rva2VuKVxuXHRcdGlmIHVzZXJJZFxuXHRcdFx0dXNlciA9IE1ldGVvci51c2Vycy5maW5kT25lKHtfaWQ6IHVzZXJJZH0pXG5cblx0c3BhY2VJZCA9IHJlcS5wYXJhbXMuc3BhY2VcblxuXHRpbnN0YW5jZUlkID0gcmVxLnBhcmFtcy5pbnN0YW5jZV9pZFxuXG5cdGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaW5zdGFuY2VJZH0pO1xuXG5cdHNwYWNlID0gZGIuc3BhY2VzLmZpbmRPbmUoe19pZDogc3BhY2VJZH0pO1xuXG5cdGhpZGVfdHJhY2VzID0gcmVxLnF1ZXJ5Py5oaWRlX3RyYWNlc1xuXG5cdGlmICFvcHRpb25zXG5cdFx0b3B0aW9ucyA9IHtzaG93VHJhY2U6IHRydWV9XG5cdGVsc2Vcblx0XHRvcHRpb25zLnNob3dUcmFjZSA9IHRydWVcblxuXHRpZiBoaWRlX3RyYWNlcyBpcyBcIjFcIlxuXHRcdGlmIG9wdGlvbnNcblx0XHRcdG9wdGlvbnMuc2hvd1RyYWNlID0gZmFsc2Vcblx0XHRlbHNlXG5cdFx0XHRvcHRpb25zID0ge3Nob3dUcmFjZTogZmFsc2V9XG5cblx0aWYgIW9wdGlvbnMuc2hvd0F0dGFjaG1lbnRzXG5cdFx0b3B0aW9ucy5zaG93QXR0YWNobWVudHMgPSB0cnVlXG5cblx0aWYgIXNwYWNlXG5cdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdGRhdGE6XG5cdFx0XHRcdFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3Npbmcgc3BhY2VcIixcblx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0cmV0dXJuO1xuXG5cdGlmICAhaW5zdGFuY2Vcblx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0Y29kZTogNDAxLFxuXHRcdFx0ZGF0YTpcblx0XHRcdFx0XCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBpbnN0YW5jZVwiLFxuXHRcdFx0XHRcInN1Y2Nlc3NcIjogZmFsc2Vcblx0XHRyZXR1cm47XG5cblx0aWYgIXVzZXJcblx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0Y29kZTogNDAxLFxuXHRcdFx0ZGF0YTpcblx0XHRcdFx0XCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBYLUF1dGgtVG9rZW4sWC1Vc2VyLUlkXCIsXG5cdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdHJldHVybjtcblxuXHRpZiBpbnN0YW5jZS5zcGFjZSAhPSBzcGFjZUlkXG5cdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdGRhdGE6XG5cdFx0XHRcdFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3Npbmcgc3BhY2Ugb3IgaW5zdGFuY2VcIixcblx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0cmV0dXJuO1xuXG5cblxuXHRzcGFjZVVzZXJDb3VudCA9IGRiLnNwYWNlX3VzZXJzLmZpbmQoeyB1c2VyOiB1c2VyLl9pZCwgc3BhY2U6IHNwYWNlSWQgfSkuY291bnQoKVxuXG5cdGlmIHNwYWNlVXNlckNvdW50IGlzIDBcblx0XHRpZiAhc3BhY2Vcblx0XHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRcdGNvZGU6IDQwMSxcblx0XHRcdFx0ZGF0YTpcblx0XHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIHNhcGNlVXNlclwiLFxuXHRcdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdFx0cmV0dXJuO1xuXG5cdCPmoKHpqox1c2Vy5piv5ZCm5a+5aW5zdGFuY2XmnInmn6XnnIvmnYPpmZBcblx0X2hhc1Blcm1pc3Npb24gPSBXb3JrZmxvd01hbmFnZXIuaGFzSW5zdGFuY2VQZXJtaXNzaW9ucyh1c2VyLCBpbnN0YW5jZSlcblxuXHRpZiAhX2hhc1Blcm1pc3Npb24gICYmIGluc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZVxuXHRcdF9wYXJlbnRfaW5zdGFuY2VzID0gXy51bmlvbihbaW5zdGFuY2UuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlXSwgaW5zdGFuY2UuZGlzdHJpYnV0ZV9mcm9tX2luc3RhbmNlcyB8fCBbXSlcblxuXHRcdF9oYXNQZXJtaXNzaW9uID0gXy5maW5kIF9wYXJlbnRfaW5zdGFuY2VzLCAoX3BhcmVudF9pZCktPlxuXHRcdFx0X3BhcmVudF9pbnMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOl9wYXJlbnRfaWR9LCB7ZmllbGRzOiB7dHJhY2VzOiAwfX0pXG5cblx0XHRcdHJldHVybiBXb3JrZmxvd01hbmFnZXIuaGFzSW5zdGFuY2VQZXJtaXNzaW9ucyh1c2VyLCBfcGFyZW50X2lucylcblxuXHRpZiAhX2hhc1Blcm1pc3Npb25cblx0XHRfbG9jYWxlID0gU3RlZWRvcy5sb2NhbGUodXNlci5faWQsIHRydWUpXG5cdFx0ZXJyb3IgPSBUQVBpMThuLl9fKFwiaW5zdGFuY2VfcGVybWlzc2lvbnNfZXJyb3JcIiwge30sIF9sb2NhbGUpXG5cdFx0cmVzLmNoYXJzZXQgPSBcInV0Zi04XCJcblx0XHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0Y29kZTogNDAxLFxuXHRcdFx0ZGF0YTpcblx0XHRcdFx0XCJlcnJvclwiOiBlcnJvcixcblx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0cmV0dXJuO1xuXG5cdGh0bWwgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucylcblx0ZGF0YUJ1ZiA9IG5ldyBCdWZmZXIoaHRtbCk7XG5cdHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnKTtcblx0cmVzLnNldEhlYWRlcignY29udGVudC1sZW5ndGgnLCBkYXRhQnVmLmxlbmd0aClcblx0cmVzLnNldEhlYWRlcignY29udGVudC1yYW5nZScsIFwiYnl0ZXMgMC0je2RhdGFCdWYubGVuZ3RoIC0gMX0vI3tkYXRhQnVmLmxlbmd0aH1cIilcblx0cmVzLnN0YXR1c0NvZGUgPSAyMDBcblx0cmVzLmVuZChodG1sKVxuXG5Kc29uUm91dGVzLmFkZCBcImdldFwiLCBcIi93b3JrZmxvdy9zcGFjZS86c3BhY2Uvdmlldy9yZWFkb25seS86aW5zdGFuY2VfaWRcIiwgZ2V0SW5zdGFuY2VSZWFkT25seVxuXG5Kc29uUm91dGVzLmFkZCBcImdldFwiLCBcIi93b3JrZmxvdy9zcGFjZS86c3BhY2Uvdmlldy9yZWFkb25seS86aW5zdGFuY2VfaWQvOmluc3RhbmNlX25hbWVcIiwgKHJlcSwgcmVzLCBuZXh0KS0+XG5cdHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnKTtcblx0cmVzLnNldEhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50O2ZpbGVuYW1lPScrZW5jb2RlVVJJKHJlcS5wYXJhbXMuaW5zdGFuY2VfbmFtZSkpO1xuXHRyZXMuc2V0SGVhZGVyKCdUcmFuc2Zlci1FbmNvZGluZycsICcnKVxuXG5cdG9wdGlvbnMgPSB7YWJzb2x1dGU6IHRydWV9XG5cblx0cmV0dXJuIGdldEluc3RhbmNlUmVhZE9ubHkocmVxLCByZXMsIG5leHQsIG9wdGlvbnMpXG4jIyNcblx06I635Y+W55Sz6K+35Y2V5YiX6KGo77yaXG4gICAgZmluYWxfZGVjaXNpb27vvJrlrqHmibnnu5PmnpxcbiAgICBzdGF0ZTog55Sz6K+35Y2V54q25oCBXG4jIyNcbkpzb25Sb3V0ZXMuYWRkIFwiZ2V0XCIsIFwiL2FwaS93b3JrZmxvdy9pbnN0YW5jZXNcIiwgKHJlcSwgcmVzLCBuZXh0KSAtPlxuXG5cdGlmICFTdGVlZG9zLkFQSUF1dGhlbnRpY2F0aW9uQ2hlY2socmVxLCByZXMpXG5cdFx0cmV0dXJuIDtcblxuXHR1c2VyX2lkID0gcmVxLnVzZXJJZFxuXG5cdHNwYWNlSWQgPSByZXEuaGVhZGVyc1tcIngtc3BhY2UtaWRcIl1cblxuXHRpZiBub3Qgc3BhY2VJZFxuXHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRjb2RlOiA0MDEsXG5cdFx0XHRkYXRhOlxuXHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIFgtU3BhY2UtSWRcIixcblx0XHRcdFx0XCJzdWNjZXNzXCI6IGZhbHNlXG5cdFx0cmV0dXJuO1xuXG5cdGZsb3dJZCA9IHJlcS5xdWVyeT8uZmxvd0lkXG5cblx0aWYgIWZsb3dJZFxuXHRcdEpzb25Sb3V0ZXMuc2VuZFJlc3VsdCByZXMsXG5cdFx0XHRjb2RlOiA0MDAsXG5cdFx0XHRkYXRhOlxuXHRcdFx0XHRcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIGZsb3dJZFwiLFxuXHRcdFx0XHRcInN1Y2Nlc3NcIjogZmFsc2Vcblx0XHRyZXR1cm47XG5cblx0cXVlcnkgPSB7fVxuXG5cdHJldF9zeW5jX3Rva2VuID0gbmV3IERhdGUoKS5nZXRUaW1lKClcblxuXHRmbG93SWRzID0gZmxvd0lkLnNwbGl0KFwiLFwiKVxuXG5cblx0Zmxvd3MgPSBkYi5mbG93cy5maW5kKHtfaWQ6IHskaW46IGZsb3dJZHN9fSkuZmV0Y2goKVxuXG5cdGkgPSAwXG5cdHdoaWxlIGkgPCBmbG93cy5sZW5ndGhcblx0XHRmID0gZmxvd3NbaV1cblx0XHRzcGFjZVVzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHtzcGFjZTogZi5zcGFjZSwgdXNlcjogdXNlcl9pZH0pXG5cdFx0aWYgIXNwYWNlVXNlclxuXHRcdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdFx0Y29kZTogNDAxLFxuXHRcdFx0XHRkYXRhOlxuXHRcdFx0XHRcdFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE5vIHBlcm1pc3Npb24sIGZsb3cgaXMgI3tmLl9pZH1cIixcblx0XHRcdFx0XHRcInN1Y2Nlc3NcIjogZmFsc2Vcblx0XHRcdHJldHVybjtcblx0XHRlbHNlXG5cblx0I1x05piv5ZCm5bel5L2c5Yy6566h55CG5ZGYXG5cdFx0aWYgIVN0ZWVkb3MuaXNTcGFjZUFkbWluKHNwYWNlSWQsIHVzZXJfaWQpXG5cdFx0XHRzcGFjZVVzZXJPcmdhbml6YXRpb25zID0gZGIub3JnYW5pemF0aW9ucy5maW5kKHtcblx0XHRcdFx0X2lkOiB7XG5cdFx0XHRcdFx0JGluOiBzcGFjZVVzZXIub3JnYW5pemF0aW9uc1xuXHRcdFx0XHR9XG5cdFx0XHR9KS5mZXRjaCgpO1xuXG5cdFx0XHRpZiAhV29ya2Zsb3dNYW5hZ2VyLmNhbk1vbml0b3IoZiwgc3BhY2VVc2VyLCBzcGFjZVVzZXJPcmdhbml6YXRpb25zKSAmJiAhV29ya2Zsb3dNYW5hZ2VyLmNhbkFkbWluKGYsIHNwYWNlVXNlciwgc3BhY2VVc2VyT3JnYW5pemF0aW9ucylcblx0XHRcdFx0SnNvblJvdXRlcy5zZW5kUmVzdWx0IHJlcyxcblx0XHRcdFx0XHRjb2RlOiA0MDEsXG5cdFx0XHRcdFx0ZGF0YTpcblx0XHRcdFx0XHRcdFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE5vIHBlcm1pc3Npb24sIGZsb3cgaXMgI3tmLl9pZH1cIixcblx0XHRcdFx0XHRcdFwic3VjY2Vzc1wiOiBmYWxzZVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0aSsrXG5cblxuXHRxdWVyeS5mbG93ID0geyRpbjogZmxvd0lkc31cblxuXHRxdWVyeS5zcGFjZSA9IHNwYWNlSWRcblxuXHRpZiByZXEucXVlcnk/LnN5bmNfdG9rZW5cblx0XHRzeW5jX3Rva2VuID0gbmV3IERhdGUoTnVtYmVyKHJlcS5xdWVyeS5zeW5jX3Rva2VuKSlcblx0XHRxdWVyeS5tb2RpZmllZCA9IHskZ3Q6IHN5bmNfdG9rZW59XG5cblx0aWYgcmVxLnF1ZXJ5Py5maW5hbF9kZWNpc2lvblxuXHRcdHF1ZXJ5LmZpbmFsX2RlY2lzaW9uID0geyRpbiA6IHJlcS5xdWVyeS5maW5hbF9kZWNpc2lvbi5zcGxpdChcIixcIil9XG5cdGVsc2Vcblx0XHRxdWVyeS5maW5hbF9kZWNpc2lvbiA9IHskbmluOiBbXCJ0ZXJtaW5hdGVkXCIsIFwicmVqZWN0ZWRcIl19XG5cblx0aWYgcmVxLnF1ZXJ5Py5zdGF0ZVxuXHRcdHF1ZXJ5LnN0YXRlID0geyRpbjogcmVxLnF1ZXJ5LnN0YXRlLnNwbGl0KFwiLFwiKX1cblx0ZWxzZVxuXHRcdHF1ZXJ5LnN0YXRlID0gXCJjb21wbGV0ZWRcIlxuXG4jXHTmnIDlpJrov5Tlm541MDDmnaHmlbDmja5cblx0aW5zdGFuY2VzID0gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtmaWVsZHM6IHtpbmJveF91ZXJzOiAwLCBjY191c2VyczogMCwgb3V0Ym94X3VzZXJzOiAwLCB0cmFjZXM6IDAsIGF0dGFjaG1lbnRzOiAwfSwgc2tpcDogMCwgbGltaXQ6IDUwMH0pLmZldGNoKClcblx0aW5zdGFuY2VzLmZvckVhY2ggKGluc3RhbmNlKS0+XG5cblx0XHRhdHRhY2htZW50cyA9IGNmcy5pbnN0YW5jZXMuZmluZCh7J21ldGFkYXRhLmluc3RhbmNlJzogaW5zdGFuY2UuX2lkLCdtZXRhZGF0YS5jdXJyZW50JzogdHJ1ZSwgXCJtZXRhZGF0YS5pc19wcml2YXRlXCI6IHskbmU6IHRydWV9fSwge2ZpZWxkczoge2NvcGllczogMH19KS5mZXRjaCgpXG5cblx0XHRpbnN0YW5jZS5hdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzXG5cblxuXHRKc29uUm91dGVzLnNlbmRSZXN1bHQgcmVzLFxuXHRcdFx0Y29kZTogMjAwLFxuXHRcdFx0ZGF0YTpcblx0XHRcdFx0XCJzdGF0dXNcIjogXCJzdWNjZXNzXCIsXG5cdFx0XHRcdFwic3luY190b2tlblwiOiByZXRfc3luY190b2tlblxuXHRcdFx0XHRcImRhdGFcIjogaW5zdGFuY2VzXG5cdHJldHVybjtcbiIsInZhciBDb29raWVzLCBnZXRJbnN0YW5jZVJlYWRPbmx5O1xuXG5Db29raWVzID0gcmVxdWlyZShcImNvb2tpZXNcIik7XG5cbmdldEluc3RhbmNlUmVhZE9ubHkgPSBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCwgb3B0aW9ucykge1xuICB2YXIgX2hhc1Blcm1pc3Npb24sIF9sb2NhbGUsIF9wYXJlbnRfaW5zdGFuY2VzLCBkYXRhQnVmLCBlcnJvciwgaGlkZV90cmFjZXMsIGh0bWwsIGluc3RhbmNlLCBpbnN0YW5jZUlkLCByZWYsIHJlZjEsIHNwYWNlLCBzcGFjZUlkLCBzcGFjZVVzZXJDb3VudCwgdXNlciwgdXNlcklkO1xuICB1c2VyID0gU3RlZWRvcy5nZXRBUElMb2dpblVzZXIocmVxLCByZXMpO1xuICBpZiAocmVxICE9IG51bGwgPyAocmVmID0gcmVxLnF1ZXJ5KSAhPSBudWxsID8gcmVmLmFjY2Vzc190b2tlbiA6IHZvaWQgMCA6IHZvaWQgMCkge1xuICAgIHVzZXJJZCA9IFN0ZWVkb3MuZ2V0VXNlcklkRnJvbUFjY2Vzc1Rva2VuKHJlcS5xdWVyeS5hY2Nlc3NfdG9rZW4pO1xuICAgIGlmICh1c2VySWQpIHtcbiAgICAgIHVzZXIgPSBNZXRlb3IudXNlcnMuZmluZE9uZSh7XG4gICAgICAgIF9pZDogdXNlcklkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgc3BhY2VJZCA9IHJlcS5wYXJhbXMuc3BhY2U7XG4gIGluc3RhbmNlSWQgPSByZXEucGFyYW1zLmluc3RhbmNlX2lkO1xuICBpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICBfaWQ6IGluc3RhbmNlSWRcbiAgfSk7XG4gIHNwYWNlID0gZGIuc3BhY2VzLmZpbmRPbmUoe1xuICAgIF9pZDogc3BhY2VJZFxuICB9KTtcbiAgaGlkZV90cmFjZXMgPSAocmVmMSA9IHJlcS5xdWVyeSkgIT0gbnVsbCA/IHJlZjEuaGlkZV90cmFjZXMgOiB2b2lkIDA7XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBzaG93VHJhY2U6IHRydWVcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMuc2hvd1RyYWNlID0gdHJ1ZTtcbiAgfVxuICBpZiAoaGlkZV90cmFjZXMgPT09IFwiMVwiKSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMuc2hvd1RyYWNlID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHNob3dUcmFjZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmICghb3B0aW9ucy5zaG93QXR0YWNobWVudHMpIHtcbiAgICBvcHRpb25zLnNob3dBdHRhY2htZW50cyA9IHRydWU7XG4gIH1cbiAgaWYgKCFzcGFjZSkge1xuICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgIGNvZGU6IDQwMSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgXCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBzcGFjZVwiLFxuICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFpbnN0YW5jZSkge1xuICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgIGNvZGU6IDQwMSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgXCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBpbnN0YW5jZVwiLFxuICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCF1c2VyKSB7XG4gICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgY29kZTogNDAxLFxuICAgICAgZGF0YToge1xuICAgICAgICBcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIFgtQXV0aC1Ub2tlbixYLVVzZXItSWRcIixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbnN0YW5jZS5zcGFjZSAhPT0gc3BhY2VJZCkge1xuICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgIGNvZGU6IDQwMSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgXCJlcnJvclwiOiBcIlZhbGlkYXRlIFJlcXVlc3QgLS0gTWlzc2luZyBzcGFjZSBvciBpbnN0YW5jZVwiLFxuICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgc3BhY2VVc2VyQ291bnQgPSBkYi5zcGFjZV91c2Vycy5maW5kKHtcbiAgICB1c2VyOiB1c2VyLl9pZCxcbiAgICBzcGFjZTogc3BhY2VJZFxuICB9KS5jb3VudCgpO1xuICBpZiAoc3BhY2VVc2VyQ291bnQgPT09IDApIHtcbiAgICBpZiAoIXNwYWNlKSB7XG4gICAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICAgIGNvZGU6IDQwMSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3Npbmcgc2FwY2VVc2VyXCIsXG4gICAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBfaGFzUGVybWlzc2lvbiA9IFdvcmtmbG93TWFuYWdlci5oYXNJbnN0YW5jZVBlcm1pc3Npb25zKHVzZXIsIGluc3RhbmNlKTtcbiAgaWYgKCFfaGFzUGVybWlzc2lvbiAmJiBpbnN0YW5jZS5kaXN0cmlidXRlX2Zyb21faW5zdGFuY2UpIHtcbiAgICBfcGFyZW50X2luc3RhbmNlcyA9IF8udW5pb24oW2luc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZV0sIGluc3RhbmNlLmRpc3RyaWJ1dGVfZnJvbV9pbnN0YW5jZXMgfHwgW10pO1xuICAgIF9oYXNQZXJtaXNzaW9uID0gXy5maW5kKF9wYXJlbnRfaW5zdGFuY2VzLCBmdW5jdGlvbihfcGFyZW50X2lkKSB7XG4gICAgICB2YXIgX3BhcmVudF9pbnM7XG4gICAgICBfcGFyZW50X2lucyA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBfcGFyZW50X2lkXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIHRyYWNlczogMFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBXb3JrZmxvd01hbmFnZXIuaGFzSW5zdGFuY2VQZXJtaXNzaW9ucyh1c2VyLCBfcGFyZW50X2lucyk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKCFfaGFzUGVybWlzc2lvbikge1xuICAgIF9sb2NhbGUgPSBTdGVlZG9zLmxvY2FsZSh1c2VyLl9pZCwgdHJ1ZSk7XG4gICAgZXJyb3IgPSBUQVBpMThuLl9fKFwiaW5zdGFuY2VfcGVybWlzc2lvbnNfZXJyb3JcIiwge30sIF9sb2NhbGUpO1xuICAgIHJlcy5jaGFyc2V0ID0gXCJ1dGYtOFwiO1xuICAgIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICAgIGNvZGU6IDQwMSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgXCJlcnJvclwiOiBlcnJvcixcbiAgICAgICAgXCJzdWNjZXNzXCI6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGh0bWwgPSBJbnN0YW5jZVJlYWRPbmx5VGVtcGxhdGUuZ2V0SW5zdGFuY2VIdG1sKHVzZXIsIHNwYWNlLCBpbnN0YW5jZSwgb3B0aW9ucyk7XG4gIGRhdGFCdWYgPSBuZXcgQnVmZmVyKGh0bWwpO1xuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Jyk7XG4gIHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgZGF0YUJ1Zi5sZW5ndGgpO1xuICByZXMuc2V0SGVhZGVyKCdjb250ZW50LXJhbmdlJywgXCJieXRlcyAwLVwiICsgKGRhdGFCdWYubGVuZ3RoIC0gMSkgKyBcIi9cIiArIGRhdGFCdWYubGVuZ3RoKTtcbiAgcmVzLnN0YXR1c0NvZGUgPSAyMDA7XG4gIHJldHVybiByZXMuZW5kKGh0bWwpO1xufTtcblxuSnNvblJvdXRlcy5hZGQoXCJnZXRcIiwgXCIvd29ya2Zsb3cvc3BhY2UvOnNwYWNlL3ZpZXcvcmVhZG9ubHkvOmluc3RhbmNlX2lkXCIsIGdldEluc3RhbmNlUmVhZE9ubHkpO1xuXG5Kc29uUm91dGVzLmFkZChcImdldFwiLCBcIi93b3JrZmxvdy9zcGFjZS86c3BhY2Uvdmlldy9yZWFkb25seS86aW5zdGFuY2VfaWQvOmluc3RhbmNlX25hbWVcIiwgZnVuY3Rpb24ocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIG9wdGlvbnM7XG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnKTtcbiAgcmVzLnNldEhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50O2ZpbGVuYW1lPScgKyBlbmNvZGVVUkkocmVxLnBhcmFtcy5pbnN0YW5jZV9uYW1lKSk7XG4gIHJlcy5zZXRIZWFkZXIoJ1RyYW5zZmVyLUVuY29kaW5nJywgJycpO1xuICBvcHRpb25zID0ge1xuICAgIGFic29sdXRlOiB0cnVlXG4gIH07XG4gIHJldHVybiBnZXRJbnN0YW5jZVJlYWRPbmx5KHJlcSwgcmVzLCBuZXh0LCBvcHRpb25zKTtcbn0pO1xuXG5cbi8qXG5cdOiOt+WPlueUs+ivt+WNleWIl+ihqO+8mlxuICAgIGZpbmFsX2RlY2lzaW9u77ya5a6h5om557uT5p6cXG4gICAgc3RhdGU6IOeUs+ivt+WNleeKtuaAgVxuICovXG5cbkpzb25Sb3V0ZXMuYWRkKFwiZ2V0XCIsIFwiL2FwaS93b3JrZmxvdy9pbnN0YW5jZXNcIiwgZnVuY3Rpb24ocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIGYsIGZsb3dJZCwgZmxvd0lkcywgZmxvd3MsIGksIGluc3RhbmNlcywgcXVlcnksIHJlZiwgcmVmMSwgcmVmMiwgcmVmMywgcmV0X3N5bmNfdG9rZW4sIHNwYWNlSWQsIHNwYWNlVXNlciwgc3BhY2VVc2VyT3JnYW5pemF0aW9ucywgc3luY190b2tlbiwgdXNlcl9pZDtcbiAgaWYgKCFTdGVlZG9zLkFQSUF1dGhlbnRpY2F0aW9uQ2hlY2socmVxLCByZXMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHVzZXJfaWQgPSByZXEudXNlcklkO1xuICBzcGFjZUlkID0gcmVxLmhlYWRlcnNbXCJ4LXNwYWNlLWlkXCJdO1xuICBpZiAoIXNwYWNlSWQpIHtcbiAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICBjb2RlOiA0MDEsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE1pc3NpbmcgWC1TcGFjZS1JZFwiLFxuICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZmxvd0lkID0gKHJlZiA9IHJlcS5xdWVyeSkgIT0gbnVsbCA/IHJlZi5mbG93SWQgOiB2b2lkIDA7XG4gIGlmICghZmxvd0lkKSB7XG4gICAgSnNvblJvdXRlcy5zZW5kUmVzdWx0KHJlcywge1xuICAgICAgY29kZTogNDAwLFxuICAgICAgZGF0YToge1xuICAgICAgICBcImVycm9yXCI6IFwiVmFsaWRhdGUgUmVxdWVzdCAtLSBNaXNzaW5nIGZsb3dJZFwiLFxuICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgcXVlcnkgPSB7fTtcbiAgcmV0X3N5bmNfdG9rZW4gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgZmxvd0lkcyA9IGZsb3dJZC5zcGxpdChcIixcIik7XG4gIGZsb3dzID0gZGIuZmxvd3MuZmluZCh7XG4gICAgX2lkOiB7XG4gICAgICAkaW46IGZsb3dJZHNcbiAgICB9XG4gIH0pLmZldGNoKCk7XG4gIGkgPSAwO1xuICB3aGlsZSAoaSA8IGZsb3dzLmxlbmd0aCkge1xuICAgIGYgPSBmbG93c1tpXTtcbiAgICBzcGFjZVVzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHtcbiAgICAgIHNwYWNlOiBmLnNwYWNlLFxuICAgICAgdXNlcjogdXNlcl9pZFxuICAgIH0pO1xuICAgIGlmICghc3BhY2VVc2VyKSB7XG4gICAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICAgIGNvZGU6IDQwMSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE5vIHBlcm1pc3Npb24sIGZsb3cgaXMgXCIgKyBmLl9pZCxcbiAgICAgICAgICBcInN1Y2Nlc3NcIjogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcblxuICAgIH1cbiAgICBpZiAoIVN0ZWVkb3MuaXNTcGFjZUFkbWluKHNwYWNlSWQsIHVzZXJfaWQpKSB7XG4gICAgICBzcGFjZVVzZXJPcmdhbml6YXRpb25zID0gZGIub3JnYW5pemF0aW9ucy5maW5kKHtcbiAgICAgICAgX2lkOiB7XG4gICAgICAgICAgJGluOiBzcGFjZVVzZXIub3JnYW5pemF0aW9uc1xuICAgICAgICB9XG4gICAgICB9KS5mZXRjaCgpO1xuICAgICAgaWYgKCFXb3JrZmxvd01hbmFnZXIuY2FuTW9uaXRvcihmLCBzcGFjZVVzZXIsIHNwYWNlVXNlck9yZ2FuaXphdGlvbnMpICYmICFXb3JrZmxvd01hbmFnZXIuY2FuQWRtaW4oZiwgc3BhY2VVc2VyLCBzcGFjZVVzZXJPcmdhbml6YXRpb25zKSkge1xuICAgICAgICBKc29uUm91dGVzLnNlbmRSZXN1bHQocmVzLCB7XG4gICAgICAgICAgY29kZTogNDAxLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIFwiZXJyb3JcIjogXCJWYWxpZGF0ZSBSZXF1ZXN0IC0tIE5vIHBlcm1pc3Npb24sIGZsb3cgaXMgXCIgKyBmLl9pZCxcbiAgICAgICAgICAgIFwic3VjY2Vzc1wiOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaSsrO1xuICB9XG4gIHF1ZXJ5LmZsb3cgPSB7XG4gICAgJGluOiBmbG93SWRzXG4gIH07XG4gIHF1ZXJ5LnNwYWNlID0gc3BhY2VJZDtcbiAgaWYgKChyZWYxID0gcmVxLnF1ZXJ5KSAhPSBudWxsID8gcmVmMS5zeW5jX3Rva2VuIDogdm9pZCAwKSB7XG4gICAgc3luY190b2tlbiA9IG5ldyBEYXRlKE51bWJlcihyZXEucXVlcnkuc3luY190b2tlbikpO1xuICAgIHF1ZXJ5Lm1vZGlmaWVkID0ge1xuICAgICAgJGd0OiBzeW5jX3Rva2VuXG4gICAgfTtcbiAgfVxuICBpZiAoKHJlZjIgPSByZXEucXVlcnkpICE9IG51bGwgPyByZWYyLmZpbmFsX2RlY2lzaW9uIDogdm9pZCAwKSB7XG4gICAgcXVlcnkuZmluYWxfZGVjaXNpb24gPSB7XG4gICAgICAkaW46IHJlcS5xdWVyeS5maW5hbF9kZWNpc2lvbi5zcGxpdChcIixcIilcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHF1ZXJ5LmZpbmFsX2RlY2lzaW9uID0ge1xuICAgICAgJG5pbjogW1widGVybWluYXRlZFwiLCBcInJlamVjdGVkXCJdXG4gICAgfTtcbiAgfVxuICBpZiAoKHJlZjMgPSByZXEucXVlcnkpICE9IG51bGwgPyByZWYzLnN0YXRlIDogdm9pZCAwKSB7XG4gICAgcXVlcnkuc3RhdGUgPSB7XG4gICAgICAkaW46IHJlcS5xdWVyeS5zdGF0ZS5zcGxpdChcIixcIilcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHF1ZXJ5LnN0YXRlID0gXCJjb21wbGV0ZWRcIjtcbiAgfVxuICBpbnN0YW5jZXMgPSBkYi5pbnN0YW5jZXMuZmluZChxdWVyeSwge1xuICAgIGZpZWxkczoge1xuICAgICAgaW5ib3hfdWVyczogMCxcbiAgICAgIGNjX3VzZXJzOiAwLFxuICAgICAgb3V0Ym94X3VzZXJzOiAwLFxuICAgICAgdHJhY2VzOiAwLFxuICAgICAgYXR0YWNobWVudHM6IDBcbiAgICB9LFxuICAgIHNraXA6IDAsXG4gICAgbGltaXQ6IDUwMFxuICB9KS5mZXRjaCgpO1xuICBpbnN0YW5jZXMuZm9yRWFjaChmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgIHZhciBhdHRhY2htZW50cztcbiAgICBhdHRhY2htZW50cyA9IGNmcy5pbnN0YW5jZXMuZmluZCh7XG4gICAgICAnbWV0YWRhdGEuaW5zdGFuY2UnOiBpbnN0YW5jZS5faWQsXG4gICAgICAnbWV0YWRhdGEuY3VycmVudCc6IHRydWUsXG4gICAgICBcIm1ldGFkYXRhLmlzX3ByaXZhdGVcIjoge1xuICAgICAgICAkbmU6IHRydWVcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgY29waWVzOiAwXG4gICAgICB9XG4gICAgfSkuZmV0Y2goKTtcbiAgICByZXR1cm4gaW5zdGFuY2UuYXR0YWNobWVudHMgPSBhdHRhY2htZW50cztcbiAgfSk7XG4gIEpzb25Sb3V0ZXMuc2VuZFJlc3VsdChyZXMsIHtcbiAgICBjb2RlOiAyMDAsXG4gICAgZGF0YToge1xuICAgICAgXCJzdGF0dXNcIjogXCJzdWNjZXNzXCIsXG4gICAgICBcInN5bmNfdG9rZW5cIjogcmV0X3N5bmNfdG9rZW4sXG4gICAgICBcImRhdGFcIjogaW5zdGFuY2VzXG4gICAgfVxuICB9KTtcbn0pO1xuIiwiXG5Kc29uUm91dGVzLmFkZCBcImdldFwiLCBcIi9zdGVlZG9zLWNzc1wiLCAocmVxLCByZXMsIG5leHQpLT5cblx0cmVzLnNldEhlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvY3NzJyk7XG5cdGFsbENzcyA9IFdlYkFwcC5nZXRSZWZyZXNoYWJsZUFzc2V0cygpXG5cblx0YWxsQ3NzTGluayA9IFwiXCJcblxuXHRhbGxDc3MuZm9yRWFjaCAoY3NzKSAtPlxuXHRcdGlmIF9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18uUk9PVF9VUkxfUEFUSF9QUkVGSVhcblx0XHRcdHJvb3RVcmwgPSBfX21ldGVvcl9ydW50aW1lX2NvbmZpZ19fLlJPT1RfVVJMXG5cdFx0XHRpZiByb290VXJsLmVuZHNXaXRoKFwiL1wiKVxuXHRcdFx0XHRjc3NIcmVmID0gcm9vdFVybC5yZXBsYWNlKF9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18uUk9PVF9VUkxfUEFUSF9QUkVGSVggKyBcIi9cIiwgXCJcIikgKyBjc3MudXJsXG5cdFx0XHRlbHNlXG5cdFx0XHRcdGNzc0hyZWYgPSByb290VXJsLnJlcGxhY2UoX19tZXRlb3JfcnVudGltZV9jb25maWdfXy5ST09UX1VSTF9QQVRIX1BSRUZJWCwgXCJcIikgKyBjc3MudXJsXG5cdFx0ZWxzZVxuXHRcdFx0Y3NzSHJlZiA9IE1ldGVvci5hYnNvbHV0ZVVybChjc3MudXJsKVxuXHRcdGFsbENzc0xpbmsgKz0gXCJAaW1wb3J0IHVybCgje2Nzc0hyZWZ9KTtcIlxuXG5cdHJlcy5zdGF0dXNDb2RlID0gMjAwXG5cdHJlcy5lbmQoYWxsQ3NzTGluaykiLCJKc29uUm91dGVzLmFkZChcImdldFwiLCBcIi9zdGVlZG9zLWNzc1wiLCBmdW5jdGlvbihyZXEsIHJlcywgbmV4dCkge1xuICB2YXIgYWxsQ3NzLCBhbGxDc3NMaW5rO1xuICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9jc3MnKTtcbiAgYWxsQ3NzID0gV2ViQXBwLmdldFJlZnJlc2hhYmxlQXNzZXRzKCk7XG4gIGFsbENzc0xpbmsgPSBcIlwiO1xuICBhbGxDc3MuZm9yRWFjaChmdW5jdGlvbihjc3MpIHtcbiAgICB2YXIgY3NzSHJlZiwgcm9vdFVybDtcbiAgICBpZiAoX19tZXRlb3JfcnVudGltZV9jb25maWdfXy5ST09UX1VSTF9QQVRIX1BSRUZJWCkge1xuICAgICAgcm9vdFVybCA9IF9fbWV0ZW9yX3J1bnRpbWVfY29uZmlnX18uUk9PVF9VUkw7XG4gICAgICBpZiAocm9vdFVybC5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgY3NzSHJlZiA9IHJvb3RVcmwucmVwbGFjZShfX21ldGVvcl9ydW50aW1lX2NvbmZpZ19fLlJPT1RfVVJMX1BBVEhfUFJFRklYICsgXCIvXCIsIFwiXCIpICsgY3NzLnVybDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzc0hyZWYgPSByb290VXJsLnJlcGxhY2UoX19tZXRlb3JfcnVudGltZV9jb25maWdfXy5ST09UX1VSTF9QQVRIX1BSRUZJWCwgXCJcIikgKyBjc3MudXJsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjc3NIcmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKGNzcy51cmwpO1xuICAgIH1cbiAgICByZXR1cm4gYWxsQ3NzTGluayArPSBcIkBpbXBvcnQgdXJsKFwiICsgY3NzSHJlZiArIFwiKTtcIjtcbiAgfSk7XG4gIHJlcy5zdGF0dXNDb2RlID0gMjAwO1xuICByZXR1cm4gcmVzLmVuZChhbGxDc3NMaW5rKTtcbn0pO1xuIiwiSnNvblJvdXRlcy5hZGQgXCJnZXRcIiwgXCIvYXBpL3dvcmtmbG93L3NwYWNlLzpzcGFjZS92aWV3L2RyYWZ0LzpmbG93XCIsIChyZXEsIHJlcywgbmV4dCkgLT5cblx0aWYgIVN0ZWVkb3MuQVBJQXV0aGVudGljYXRpb25DaGVjayhyZXEsIHJlcylcblx0XHRyZXR1cm5cblxuXHR1c2VyX2lkID0gcmVxLnVzZXJJZFxuXG5cdHVzZXIgPSBkYi51c2Vycy5maW5kT25lKHsgX2lkOiB1c2VyX2lkIH0pXG5cblx0c3BhY2VJZCA9IHJlcS5wYXJhbXMuc3BhY2VcblxuXHRmbG93SWQgPSByZXEucGFyYW1zLmZsb3dcblxuXHRzcGFjZSA9IGRiLnNwYWNlcy5maW5kT25lKHsgX2lkOiBzcGFjZUlkIH0pXG5cblx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoeyBfaWQ6IGZsb3dJZCB9LCB7IGZpZWxkczogeyBuYW1lOiAxLCAnY3VycmVudC5faWQnOiAxLCBmb3JtOiAxIH0gfSlcblxuXHRmb3JtID0gZGIuZm9ybXMuZmluZE9uZSh7IF9pZDogZmxvdy5mb3JtIH0sIHsgZmllbGRzOiB7ICdjdXJyZW50Ll9pZCc6IDEgfSB9KVxuXG5cdG9wdGlvbnMgPSB7XG5cdFx0c2hvd1RyYWNlOiBmYWxzZSxcblx0XHRzaG93QXR0YWNobWVudHM6IGZhbHNlLFxuXHRcdHRlbXBsYXRlTmFtZTogXCJkZWZhdWx0XCIsXG5cdFx0ZWRpdGFibGU6IHRydWUsXG5cdFx0d2lkdGg6IFwiMTAwJVwiLFxuXHRcdGluc3RhbmNlX3N0eWxlOiBcImluc3RhbmNlLWRlZmF1bHRcIixcblx0XHRwbHVnaW5zOiBcIlwiXCJcblxuXHRcdFx0PG1ldGEgaHR0cC1lcXVpdj1cIlgtVUEtQ29tcGF0aWJsZVwiIGNvbnRlbnQ9XCJJRT1lZGdlLGNocm9tZT0xXCIgLz5cblx0XHRcdDxtZXRhIG5hbWU9XCJmb3JtYXQtZGV0ZWN0aW9uXCIgY29udGVudD1cInRlbGVwaG9uZT1ub1wiPlxuXHRcdFx0PG1ldGEgaHR0cC1lcXVpdj1cIngtcmltLWF1dG8tbWF0Y2hcIiBjb250ZW50PVwibm9uZVwiPlxuXHRcdFx0PHRpdGxlPiN7Zmxvdy5uYW1lfTwvdGl0bGU+XG5cdFx0XHQ8bWV0YSBjb250ZW50PSd3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT0wJyBuYW1lPSd2aWV3cG9ydCcgLz5cblx0XHRcdDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGhcIiAvPlxuXG5cdFx0XHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cIi9wbHVnaW5zL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci9jc3MvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLm1pbi5jc3NcIj5cblxuXHRcdFx0PHNjcmlwdCBzcmM9XCIvcGx1Z2lucy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIvanMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLm1pbi5qc1wiIHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj48L3NjcmlwdD5cblxuXHRcdFx0PHNjcmlwdCBzcmM9XCIvcGx1Z2lucy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIvanMvbG9jYWxlcy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIuemgtQ04uanNcIiB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgY2hhcnNldD1cIlVURi04XCI+PC9zY3JpcHQ+XG5cblx0XHRcdDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBocmVmPVwiL3BsdWdpbnMvdG9hc3RyL3RvYXN0ci5taW4uY3NzXCI+XG5cdFx0XHQ8c2NyaXB0IHNyYz1cIi9wbHVnaW5zL3RvYXN0ci90b2FzdHIubWluLmpzXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPjwvc2NyaXB0PlxuXHRcdFx0PGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIHR5cGU9XCJ0ZXh0L2Nzc1wiIGhyZWY9XCIvanMvd29ya2Zsb3dfY2xpZW50LmNzc1wiPlxuXHRcdFx0PHNjcmlwdCBzcmM9XCIvanMvd29ya2Zsb3dfY2xpZW50LmpzXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPjwvc2NyaXB0PlxuXHRcdFwiXCJcIlxuXHR9XG5cblx0aW5zdGFuY2UgPSB7XG5cdFx0ZmxvdzogZmxvdy5faWQsXG5cdFx0Zmxvd192ZXJzaW9uOiBmbG93LmN1cnJlbnQuX2lkLFxuXHRcdGZvcm06IGZvcm0uX2lkLFxuXHRcdGZvcm1fdmVyc2lvbjogZm9ybS5jdXJyZW50Ll9pZCxcblx0XHR2YWx1ZXM6IHt9LFxuXHRcdG5hbWU6IGZsb3cubmFtZSxcblx0XHRzcGFjZTogc3BhY2VJZFxuXHR9XG5cblx0aHRtbCA9IEluc3RhbmNlUmVhZE9ubHlUZW1wbGF0ZS5nZXRJbnN0YW5jZUh0bWwodXNlciwgc3BhY2UsIGluc3RhbmNlLCBvcHRpb25zKVxuXG5cdGRhdGFCdWYgPSBuZXcgQnVmZmVyKGh0bWwpXG5cblx0cmVzLnNldEhlYWRlcignY29udGVudC1sZW5ndGgnLCBkYXRhQnVmLmxlbmd0aClcblxuXHRyZXMuc2V0SGVhZGVyKCdjb250ZW50LXJhbmdlJywgXCJieXRlcyAwLSN7ZGF0YUJ1Zi5sZW5ndGggLSAxfS8je2RhdGFCdWYubGVuZ3RofVwiKVxuXG5cdHJlcy5zdGF0dXNDb2RlID0gMjAwXG5cblx0cmVzLmVuZChodG1sKVxuIiwiSnNvblJvdXRlcy5hZGQoXCJnZXRcIiwgXCIvYXBpL3dvcmtmbG93L3NwYWNlLzpzcGFjZS92aWV3L2RyYWZ0LzpmbG93XCIsIGZ1bmN0aW9uKHJlcSwgcmVzLCBuZXh0KSB7XG4gIHZhciBkYXRhQnVmLCBmbG93LCBmbG93SWQsIGZvcm0sIGh0bWwsIGluc3RhbmNlLCBvcHRpb25zLCBzcGFjZSwgc3BhY2VJZCwgdXNlciwgdXNlcl9pZDtcbiAgaWYgKCFTdGVlZG9zLkFQSUF1dGhlbnRpY2F0aW9uQ2hlY2socmVxLCByZXMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHVzZXJfaWQgPSByZXEudXNlcklkO1xuICB1c2VyID0gZGIudXNlcnMuZmluZE9uZSh7XG4gICAgX2lkOiB1c2VyX2lkXG4gIH0pO1xuICBzcGFjZUlkID0gcmVxLnBhcmFtcy5zcGFjZTtcbiAgZmxvd0lkID0gcmVxLnBhcmFtcy5mbG93O1xuICBzcGFjZSA9IGRiLnNwYWNlcy5maW5kT25lKHtcbiAgICBfaWQ6IHNwYWNlSWRcbiAgfSk7XG4gIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtcbiAgICBfaWQ6IGZsb3dJZFxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBuYW1lOiAxLFxuICAgICAgJ2N1cnJlbnQuX2lkJzogMSxcbiAgICAgIGZvcm06IDFcbiAgICB9XG4gIH0pO1xuICBmb3JtID0gZGIuZm9ybXMuZmluZE9uZSh7XG4gICAgX2lkOiBmbG93LmZvcm1cbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgJ2N1cnJlbnQuX2lkJzogMVxuICAgIH1cbiAgfSk7XG4gIG9wdGlvbnMgPSB7XG4gICAgc2hvd1RyYWNlOiBmYWxzZSxcbiAgICBzaG93QXR0YWNobWVudHM6IGZhbHNlLFxuICAgIHRlbXBsYXRlTmFtZTogXCJkZWZhdWx0XCIsXG4gICAgZWRpdGFibGU6IHRydWUsXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGluc3RhbmNlX3N0eWxlOiBcImluc3RhbmNlLWRlZmF1bHRcIixcbiAgICBwbHVnaW5zOiBcIlxcbjxtZXRhIGh0dHAtZXF1aXY9XFxcIlgtVUEtQ29tcGF0aWJsZVxcXCIgY29udGVudD1cXFwiSUU9ZWRnZSxjaHJvbWU9MVxcXCIgLz5cXG48bWV0YSBuYW1lPVxcXCJmb3JtYXQtZGV0ZWN0aW9uXFxcIiBjb250ZW50PVxcXCJ0ZWxlcGhvbmU9bm9cXFwiPlxcbjxtZXRhIGh0dHAtZXF1aXY9XFxcIngtcmltLWF1dG8tbWF0Y2hcXFwiIGNvbnRlbnQ9XFxcIm5vbmVcXFwiPlxcbjx0aXRsZT5cIiArIGZsb3cubmFtZSArIFwiPC90aXRsZT5cXG48bWV0YSBjb250ZW50PSd3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT0wJyBuYW1lPSd2aWV3cG9ydCcgLz5cXG48bWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoXFxcIiAvPlxcblxcbjxsaW5rIHJlbD1cXFwic3R5bGVzaGVldFxcXCIgdHlwZT1cXFwidGV4dC9jc3NcXFwiIGhyZWY9XFxcIi9wbHVnaW5zL2Jvb3RzdHJhcC1kYXRldGltZXBpY2tlci9jc3MvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLm1pbi5jc3NcXFwiPlxcblxcbjxzY3JpcHQgc3JjPVxcXCIvcGx1Z2lucy9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIvanMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLm1pbi5qc1xcXCIgdHlwZT1cXFwidGV4dC9qYXZhc2NyaXB0XFxcIj48L3NjcmlwdD5cXG5cXG48c2NyaXB0IHNyYz1cXFwiL3BsdWdpbnMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyL2pzL2xvY2FsZXMvYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLnpoLUNOLmpzXFxcIiB0eXBlPVxcXCJ0ZXh0L2phdmFzY3JpcHRcXFwiIGNoYXJzZXQ9XFxcIlVURi04XFxcIj48L3NjcmlwdD5cXG5cXG48bGluayByZWw9XFxcInN0eWxlc2hlZXRcXFwiIHR5cGU9XFxcInRleHQvY3NzXFxcIiBocmVmPVxcXCIvcGx1Z2lucy90b2FzdHIvdG9hc3RyLm1pbi5jc3NcXFwiPlxcbjxzY3JpcHQgc3JjPVxcXCIvcGx1Z2lucy90b2FzdHIvdG9hc3RyLm1pbi5qc1xcXCIgdHlwZT1cXFwidGV4dC9qYXZhc2NyaXB0XFxcIj48L3NjcmlwdD5cXG48bGluayByZWw9XFxcInN0eWxlc2hlZXRcXFwiIHR5cGU9XFxcInRleHQvY3NzXFxcIiBocmVmPVxcXCIvanMvd29ya2Zsb3dfY2xpZW50LmNzc1xcXCI+XFxuPHNjcmlwdCBzcmM9XFxcIi9qcy93b3JrZmxvd19jbGllbnQuanNcXFwiIHR5cGU9XFxcInRleHQvamF2YXNjcmlwdFxcXCI+PC9zY3JpcHQ+XCJcbiAgfTtcbiAgaW5zdGFuY2UgPSB7XG4gICAgZmxvdzogZmxvdy5faWQsXG4gICAgZmxvd192ZXJzaW9uOiBmbG93LmN1cnJlbnQuX2lkLFxuICAgIGZvcm06IGZvcm0uX2lkLFxuICAgIGZvcm1fdmVyc2lvbjogZm9ybS5jdXJyZW50Ll9pZCxcbiAgICB2YWx1ZXM6IHt9LFxuICAgIG5hbWU6IGZsb3cubmFtZSxcbiAgICBzcGFjZTogc3BhY2VJZFxuICB9O1xuICBodG1sID0gSW5zdGFuY2VSZWFkT25seVRlbXBsYXRlLmdldEluc3RhbmNlSHRtbCh1c2VyLCBzcGFjZSwgaW5zdGFuY2UsIG9wdGlvbnMpO1xuICBkYXRhQnVmID0gbmV3IEJ1ZmZlcihodG1sKTtcbiAgcmVzLnNldEhlYWRlcignY29udGVudC1sZW5ndGgnLCBkYXRhQnVmLmxlbmd0aCk7XG4gIHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtcmFuZ2UnLCBcImJ5dGVzIDAtXCIgKyAoZGF0YUJ1Zi5sZW5ndGggLSAxKSArIFwiL1wiICsgZGF0YUJ1Zi5sZW5ndGgpO1xuICByZXMuc3RhdHVzQ29kZSA9IDIwMDtcbiAgcmV0dXJuIHJlcy5lbmQoaHRtbCk7XG59KTtcbiIsIkFycmF5LnByb3RvdHlwZS5maWx0ZXJQcm9wZXJ0eSA9IGZ1bmN0aW9uKGgsIGwpe1xuICAgIHZhciBnID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe1xuICAgICAgICB2YXIgbSA9IHQ/IHRbaF06bnVsbDtcbiAgICAgICAgdmFyIGQgPSBmYWxzZTtcbiAgICAgICAgaWYobSBpbnN0YW5jZW9mIEFycmF5KXtcbiAgICAgICAgICAgIGQgPSBtLmluY2x1ZGVzKGwpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGQgPSAobCA9PT0gdW5kZWZpbmVkKT8gZmFsc2U6bT09bDtcbiAgICAgICAgfVxuICAgICAgICBpZihkKXtcbiAgICAgICAgICAgIGcucHVzaCh0KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBnO1xufTtcblxuQXJyYXkucHJvdG90eXBlLmdldFByb3BlcnR5ID0gZnVuY3Rpb24oayl7XG4gICAgdmFyIHYgPSBuZXcgQXJyYXkoKTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odCl7XG4gICAgICAgIHZhciBtID0gdD8gdFtrXTpudWxsO1xuICAgICAgICB2LnB1c2gobSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHY7XG59XG5cbkFycmF5LnByb3RvdHlwZS5nZXRFYWNoID0gZnVuY3Rpb24oY29kZSl7XG4gICAgdmFyIHJldiA9IFtdO1xuICAgIGZvcih2YXIgaSA9IDAgOyBpIDwgdGhpcy5sZW5ndGggOyBpKyspe1xuICAgICAgICByZXYucHVzaCh0aGlzW2ldW2NvZGVdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldjtcbn07XG5cbkFycmF5LnByb3RvdHlwZS51bmlxID0gZnVuY3Rpb24oKXtcbiAgICB2YXIgYSA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbihiKXsgXG4gICAgICAgIGlmKGEuaW5kZXhPZihiKSA8IDApXG4gICAgICAgICAgICB7YVthLmxlbmd0aF0gPSBifVxuICAgIH0pO1xuICAgIHJldHVybiBhO1xufTtcblxuRm9ybV9mb3JtdWxhID0ge307XG5cblxuRm9ybV9mb3JtdWxhLm1peGluID0gZnVuY3Rpb24oZGVzdCwgc3JjKXtcbiAgICBmb3IodmFyIGtleSBpbiBzcmMpe1xuICAgICAgICBkZXN0W2tleV0gPSBzcmNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGRlc3Q7XG59O1xuXG5cbkZvcm1fZm9ybXVsYS5oYW5kZXJVc2VyT2JqZWN0ID0gZnVuY3Rpb24odSl7XG5cbiAgICBpZih1IGluc3RhbmNlb2YgQXJyYXkpe1xuICAgICAgICB2YXIgdXNlciA9IHt9O1xuXG4gICAgICAgIHVzZXIubmFtZSA9IHUuZ2V0UHJvcGVydHkoXCJuYW1lXCIpXG4gICAgICAgIHVzZXIub3JnYW5pemF0aW9uID0ge307XG4gICAgICAgIHVzZXIub3JnYW5pemF0aW9uLm5hbWUgPSB1LmdldFByb3BlcnR5KFwib3JnYW5pemF0aW9uXCIpLmdldFByb3BlcnR5KFwibmFtZVwiKTtcbiAgICAgICAgdXNlci5vcmdhbml6YXRpb24uZnVsbG5hbWUgPSB1LmdldFByb3BlcnR5KFwib3JnYW5pemF0aW9uXCIpLmdldFByb3BlcnR5KFwiZnVsbG5hbWVcIik7XG5cbiAgICAgICAgdXNlci5ociA9IHUuZ2V0UHJvcGVydHkoXCJoclwiKVxuXG4gICAgICAgIHVzZXIuc29ydF9ubyA9IHUuZ2V0UHJvcGVydHkoXCJzb3J0X25vXCIpXG5cblx0XHR1c2VyLm1vYmlsZSA9IHUuZ2V0UHJvcGVydHkoXCJtb2JpbGVcIilcblxuXHRcdHVzZXIud29ya19waG9uZSA9IHUuZ2V0UHJvcGVydHkoXCJ3b3JrX3Bob25lXCIpXG5cblx0XHR1c2VyLnBvc2l0aW9uID0gdS5nZXRQcm9wZXJ0eShcInBvc2l0aW9uXCIpXG5cbiAgICAgICAgdmFyIHVzZXJSb2xlcyA9IHUuZ2V0UHJvcGVydHkoXCJyb2xlc1wiKTtcbiAgICAgICAgdmFyIHJvbGVzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIHVzZXJSb2xlcy5mb3JFYWNoKGZ1bmN0aW9uKGkpe1xuICAgICAgICAgICAgcm9sZXMgPSByb2xlcy5jb25jYXQoaSk7XG4gICAgICAgIH0pOyBcbiAgICAgICAgcm9sZXMudW5pcSgpO1xuICAgICAgICB1c2VyLnJvbGVzID0gcm9sZXM7XG4gICAgICAgIHJldHVybiB1c2VyO1xuICAgIH1lbHNle1xuICAgICAgICByZXR1cm4gdTtcbiAgICB9XG59XG5cbkZvcm1fZm9ybXVsYS5oYW5kZXJPcmdPYmplY3QgPSBmdW5jdGlvbihvKXtcblxuICAgIGlmKG8gaW5zdGFuY2VvZiBBcnJheSl7XG4gICAgICAgIHZhciBvcmcgPSB7fTtcblx0XHRvcmcuaWQgPSBvLmdldFByb3BlcnR5KFwiX2lkXCIpO1xuICAgICAgICBvcmcubmFtZSA9IG8uZ2V0UHJvcGVydHkoXCJuYW1lXCIpO1xuICAgICAgICBvcmcuZnVsbG5hbWUgPSBvLmdldFByb3BlcnR5KFwiZnVsbG5hbWVcIik7XG5cbiAgICAgICAgcmV0dXJuIG9yZztcbiAgICB9ZWxzZXtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgfVxufVxuXG5cblxuLyoqXG4gICAgKiDojrflvpflhazlvI/pnIDopoHnlKjliLDnmoTliJ3lp4vlgLxcbiAgICAqIOi+k+WFpe+8mmZpZWxkcywgdmFsdWVzLCBhcHBsaWNhbnRcbiAgICAqIOi+k+WHuu+8ml9fdmFsdWVzXG4qKi9cbkZvcm1fZm9ybXVsYS5pbml0X2Zvcm11bGFfdmFsdWVzID0gZnVuY3Rpb24oZmllbGRzLCBhdXRvRm9ybURvYywgYXBwcm92ZXIsIGFwcGxpY2FudCwgc3BhY2VJZCl7XG4gICAgdmFyIF9fdmFsdWVzID0ge307XG4gICAgLy/nlLPor7fljZXkuK3loavnmoTlgLzlpITnkIZcbiAgICBpZihmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCAmJiBhdXRvRm9ybURvYykge1xuICAgICAgICAvL2RlYnVnZ2VyO1xuICAgICAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbihmaWVsZCl7XG4gICAgICAgICAgICB2YXIgdHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgICAgICBpZih0eXBlKSB7XG4gICAgICAgICAgICAgICAgaWYodHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAqIOWwhuihqOagvOWtl+auteeahOWAvOi/m+ihjOi9rOaNouWQjuS8oOWFpV9fdmFsdWVz5LitXG4gICAgICAgICAgICAgICAgICAgICogdmFsdWVz5Lit6KGo5qC855qE5YC85qC85byP5Li6XG4gICAgICAgICAgICAgICAgICAgICogW3tcImFcIjoxLFwiYlwiOjR9LHtcImFcIjoyLFwiYlwiOjV9LHtcImFcIjozLFwiYlwiOjZ9XVxuICAgICAgICAgICAgICAgICAgICAqIF9fdmFsdWVz6ZyA6KaB6L2s5YyW5Li65LiL6Z2i5qC85byP5LiU5ZKM5Li76KGo55qE5YC85LiA5qC35pS+5Yiw56ys5LiA5bGCXG4gICAgICAgICAgICAgICAgICAgICoge1wiYVwiOlsxLDIsM10sXCJiXCI6WzQsNSw2XX1cbiAgICAgICAgICAgICAgICAgICAgKiovXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZUZpZWxkcyA9IGZpZWxkLnNmaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVZhbHVlcyA9IGF1dG9Gb3JtRG9jW2ZpZWxkLmNvZGVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXVsYVRhYmxlVmFsdWVzID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3RhYmxlVmFsdWVzID0ge307XG4gICAgICAgICAgICAgICAgICAgIC8v5oyJ5YWs5byP55qE5qC85byP6L2s5o2i5YC85Li6X190YWJsZVZhbHVlc1xuICAgICAgICAgICAgICAgICAgICBpZih0YWJsZUZpZWxkcyAmJiB0YWJsZUZpZWxkcy5sZW5ndGggJiYgdGFibGVWYWx1ZXMgJiYgdGFibGVWYWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVWYWx1ZXMuZm9yRWFjaChmdW5jdGlvbih0YWJsZVZhbHVlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtdWxhVGFibGVWYWx1ZXMucHVzaChGb3JtX2Zvcm11bGEuaW5pdF9mb3JtdWxhX3ZhbHVlcyh0YWJsZUZpZWxkcywgdGFibGVWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+aMieS4u+ihqOeahOagvOW8j+i9rOaNol9fdGFibGVWYWx1ZXPliqDliLBcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRmllbGRzLmZvckVhY2goZnVuY3Rpb24odGFibGVmaWVsZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX190YWJsZVZhbHVlc1t0YWJsZWZpZWxkLmNvZGVdID0gZm9ybXVsYVRhYmxlVmFsdWVzLmdldEVhY2godGFibGVmaWVsZC5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZXMgPSBGb3JtX2Zvcm11bGEubWl4aW4oX192YWx1ZXMsIF9fdGFibGVWYWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICd1c2VyJyl7XG4gICAgICAgICAgICAgICAgICAgIF9fdmFsdWVzW2ZpZWxkLmNvZGVdID0gRm9ybV9mb3JtdWxhLmhhbmRlclVzZXJPYmplY3QoV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm11bGFVc2VyT2JqZWN0cyhzcGFjZUlkLCBhdXRvRm9ybURvY1tmaWVsZC5jb2RlXSkpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdncm91cCcpe1xuICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlc1tmaWVsZC5jb2RlXSA9IEZvcm1fZm9ybXVsYS5oYW5kZXJPcmdPYmplY3QoV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm11bGFPcmdPYmplY3RzKGF1dG9Gb3JtRG9jW2ZpZWxkLmNvZGVdKSk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gJ29kYXRhJyl7XG5cdFx0XHRcdFx0X192YWx1ZXNbZmllbGQuY29kZV0gPSBhdXRvRm9ybURvY1tmaWVsZC5jb2RlXSB8fCB7fVxuXG5cdFx0XHRcdH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8v5q2k5aSE5Lygc3BhY2VJZOe7memAieS6uuaOp+S7tueahOaXp+aVsOaNruiuoeeul3JvbGVz5ZKMb3JnYW5pemF0aW9uXG4gICAgICAgICAgICAgICAgICAgIF9fdmFsdWVzW2ZpZWxkLmNvZGVdID0gYXV0b0Zvcm1Eb2NbZmllbGQuY29kZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKTtcbiAgICB9XG4gICAgLy/lvZPliY3lpITnkIbkurpcbiAgICBfX3ZhbHVlc1tcImFwcHJvdmVyXCJdID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm11bGFVc2VyT2JqZWN0KHNwYWNlSWQsIGFwcHJvdmVyKTtcbiAgICAvL+eUs+ivt+S6ulxuICAgIF9fdmFsdWVzW1wiYXBwbGljYW50XCJdID0gV29ya2Zsb3dNYW5hZ2VyLmdldEZvcm11bGFVc2VyT2JqZWN0KHNwYWNlSWQsIGFwcGxpY2FudCk7XG5cbiAgICByZXR1cm4gX192YWx1ZXM7XG59O1xuXG4iLCJNZXRlb3IucHVibGlzaCAnY2F0ZWdvcmllcycsIChzcGFjZUlkKSAtPlxuXHRjaGVjayBzcGFjZUlkLCBTdHJpbmdcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblxuXHRyZXR1cm4gZGIuY2F0ZWdvcmllcy5maW5kKHsgc3BhY2U6IHNwYWNlSWQgfSwgeyBmaWVsZHM6IHsgbmFtZTogMSwgc3BhY2U6IDEsIHNvcnRfbm86IDEsIGFwcDogMSB9IH0pIiwiTWV0ZW9yLnB1Ymxpc2goJ2NhdGVnb3JpZXMnLCBmdW5jdGlvbihzcGFjZUlkKSB7XG4gIGNoZWNrKHNwYWNlSWQsIFN0cmluZyk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmNhdGVnb3JpZXMuZmluZCh7XG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMSxcbiAgICAgIHNwYWNlOiAxLFxuICAgICAgc29ydF9ubzogMSxcbiAgICAgIGFwcDogMVxuICAgIH1cbiAgfSk7XG59KTtcbiIsIlxuTWV0ZW9yLnB1Ymxpc2ggJ2Nmc19pbnN0YW5jZXMnLCAoaW5zdGFuY2VJZHMpLT5cblx0Y2hlY2soaW5zdGFuY2VJZHMsIEFycmF5KVxuXG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3MgaW5zdGFuY2VJZHNcblx0XHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRyZXR1cm4gY2ZzLmluc3RhbmNlcy5maW5kKHsnbWV0YWRhdGEuaW5zdGFuY2UnOiB7JGluOiBpbnN0YW5jZUlkc30gLCAkb3I6IFt7J21ldGFkYXRhLmlzX3ByaXZhdGUnOiB7JG5lOiB0cnVlfX0seydtZXRhZGF0YS5pc19wcml2YXRlJzogdHJ1ZSwgXCJtZXRhZGF0YS5vd25lclwiOiB0aGlzLnVzZXJJZH1dfSlcbiIsIk1ldGVvci5wdWJsaXNoKCdjZnNfaW5zdGFuY2VzJywgZnVuY3Rpb24oaW5zdGFuY2VJZHMpIHtcbiAgY2hlY2soaW5zdGFuY2VJZHMsIEFycmF5KTtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFpbnN0YW5jZUlkcykge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGNmcy5pbnN0YW5jZXMuZmluZCh7XG4gICAgJ21ldGFkYXRhLmluc3RhbmNlJzoge1xuICAgICAgJGluOiBpbnN0YW5jZUlkc1xuICAgIH0sXG4gICAgJG9yOiBbXG4gICAgICB7XG4gICAgICAgICdtZXRhZGF0YS5pc19wcml2YXRlJzoge1xuICAgICAgICAgICRuZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgICdtZXRhZGF0YS5pc19wcml2YXRlJzogdHJ1ZSxcbiAgICAgICAgXCJtZXRhZGF0YS5vd25lclwiOiB0aGlzLnVzZXJJZFxuICAgICAgfVxuICAgIF1cbiAgfSk7XG59KTtcbiIsIlxuXG5NZXRlb3IucHVibGlzaCAnZmxvd19wb3NpdGlvbnMnLCAoc3BhY2VJZCktPlxuXHRcblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXHRcblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0cmV0dXJuIGRiLmZsb3dfcG9zaXRpb25zLmZpbmQoe3NwYWNlOiBzcGFjZUlkfSwge2ZpZWxkczoge3JvbGU6MSwgdXNlcnM6IDEsIG9yZzogMX19KTtcbiIsIk1ldGVvci5wdWJsaXNoKCdmbG93X3Bvc2l0aW9ucycsIGZ1bmN0aW9uKHNwYWNlSWQpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gZGIuZmxvd19wb3NpdGlvbnMuZmluZCh7XG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgcm9sZTogMSxcbiAgICAgIHVzZXJzOiAxLFxuICAgICAgb3JnOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuIiwiTWV0ZW9yLnB1Ymxpc2hDb21wb3NpdGUgJ2Zsb3dfcG9zaXRpb25zX3RhYnVsYXInLCAodGFibGVOYW1lLCBpZHMsIGZpZWxkcyktPlxuXHRjaGVjayh0YWJsZU5hbWUsIFN0cmluZyk7XG5cdGNoZWNrKGlkcywgQXJyYXkpO1xuXHRjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpO1xuXG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR0aGlzLnVuYmxvY2soKVxuXG5cdGZpbmQ6IC0+XG5cdFx0dGhpcy51bmJsb2NrKClcblx0XHRkYi5mbG93X3Bvc2l0aW9ucy5maW5kIHtfaWQ6IHskaW46IGlkc319LCBmaWVsZHM6IGZpZWxkc1xuXG5cdGNoaWxkcmVuOiBbXG5cdFx0e1xuXHRcdFx0ZmluZDogKHBvc2l0aW9uKSAtPlxuXHRcdFx0XHRAdW5ibG9jaygpXG5cdFx0XHRcdCMgUHVibGlzaCB0aGUgcmVsYXRlZCBmbG93X3JvbGVzXG5cdFx0XHRcdGRiLmZsb3dfcm9sZXMuZmluZCB7IF9pZDogcG9zaXRpb24ucm9sZSB9LCBmaWVsZHM6IG5hbWU6IDFcblx0XHR9XG5cdFx0e1xuXHRcdFx0ZmluZDogKHBvc2l0aW9uKSAtPlxuXHRcdFx0XHRAdW5ibG9jaygpXG5cdFx0XHRcdCMgUHVibGlzaCB0aGUgcmVsYXRlZCBvcmdhbml6YXRpb25zXG5cdFx0XHRcdGRiLm9yZ2FuaXphdGlvbnMuZmluZCB7IF9pZDogcG9zaXRpb24ub3JnIH0sIGZpZWxkczogZnVsbG5hbWU6IDFcblx0XHR9XG5cdFx0e1xuXHRcdFx0ZmluZDogKHBvc2l0aW9uKSAtPlxuXHRcdFx0XHRAdW5ibG9jaygpXG5cdFx0XHRcdCMgUHVibGlzaCB0aGUgcmVsYXRlZCB1c2VyXG5cdFx0XHRcdGRiLnNwYWNlX3VzZXJzLmZpbmQge1xuXHRcdFx0XHRcdHNwYWNlOiBwb3NpdGlvbi5zcGFjZVxuXHRcdFx0XHRcdHVzZXI6ICRpbjogcG9zaXRpb24udXNlcnNcblx0XHRcdFx0fSwgZmllbGRzOlxuXHRcdFx0XHRcdHNwYWNlOiAxXG5cdFx0XHRcdFx0dXNlcjogMVxuXHRcdFx0XHRcdG5hbWU6IDFcblx0XHR9XG5cdF0iLCJNZXRlb3IucHVibGlzaENvbXBvc2l0ZSgnZmxvd19wb3NpdGlvbnNfdGFidWxhcicsIGZ1bmN0aW9uKHRhYmxlTmFtZSwgaWRzLCBmaWVsZHMpIHtcbiAgY2hlY2sodGFibGVOYW1lLCBTdHJpbmcpO1xuICBjaGVjayhpZHMsIEFycmF5KTtcbiAgY2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKTtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgdGhpcy51bmJsb2NrKCk7XG4gIHJldHVybiB7XG4gICAgZmluZDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLnVuYmxvY2soKTtcbiAgICAgIHJldHVybiBkYi5mbG93X3Bvc2l0aW9ucy5maW5kKHtcbiAgICAgICAgX2lkOiB7XG4gICAgICAgICAgJGluOiBpZHNcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBmaWVsZHM6IGZpZWxkc1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBjaGlsZHJlbjogW1xuICAgICAge1xuICAgICAgICBmaW5kOiBmdW5jdGlvbihwb3NpdGlvbikge1xuICAgICAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgICAgIHJldHVybiBkYi5mbG93X3JvbGVzLmZpbmQoe1xuICAgICAgICAgICAgX2lkOiBwb3NpdGlvbi5yb2xlXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgIG5hbWU6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBmaW5kOiBmdW5jdGlvbihwb3NpdGlvbikge1xuICAgICAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgICAgIHJldHVybiBkYi5vcmdhbml6YXRpb25zLmZpbmQoe1xuICAgICAgICAgICAgX2lkOiBwb3NpdGlvbi5vcmdcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgZnVsbG5hbWU6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBmaW5kOiBmdW5jdGlvbihwb3NpdGlvbikge1xuICAgICAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgICAgIHJldHVybiBkYi5zcGFjZV91c2Vycy5maW5kKHtcbiAgICAgICAgICAgIHNwYWNlOiBwb3NpdGlvbi5zcGFjZSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgJGluOiBwb3NpdGlvbi51c2Vyc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICBzcGFjZTogMSxcbiAgICAgICAgICAgICAgdXNlcjogMSxcbiAgICAgICAgICAgICAgbmFtZTogMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufSk7XG4iLCJcblxuXHRNZXRlb3IucHVibGlzaCAnZmxvd19yb2xlcycsIChzcGFjZUlkKS0+XG5cdFx0XG5cdFx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cdFx0XG5cdFx0dW5sZXNzIHNwYWNlSWRcblx0XHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXG5cdFx0cmV0dXJuIGRiLmZsb3dfcm9sZXMuZmluZCh7c3BhY2U6IHNwYWNlSWR9LCB7ZmllbGRzOiB7bmFtZToxfX0pO1xuIiwiTWV0ZW9yLnB1Ymxpc2goJ2Zsb3dfcm9sZXMnLCBmdW5jdGlvbihzcGFjZUlkKSB7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZsb3dfcm9sZXMuZmluZCh7XG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMVxuICAgIH1cbiAgfSk7XG59KTtcbiIsIk1ldGVvci5wdWJsaXNoICdmbG93cycsIChzcGFjZUlkKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3Mgc3BhY2VJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHQjIOesrOS4gOasoeiuoumYheaXtuWIneWni+WMluW3peS9nOWMulxuXHRpZiBkYi5mbG93cy5maW5kKHtzcGFjZTogc3BhY2VJZH0pLmNvdW50KCkgPT0gMFxuXHRcdGRiLnNwYWNlcy5jcmVhdGVUZW1wbGF0ZUZvcm1BbmRGbG93KHNwYWNlSWQpXG5cblx0cmV0dXJuIGRiLmZsb3dzLmZpbmQoe3NwYWNlOiBzcGFjZUlkfSwge1xuXHRcdGZpZWxkczoge1xuXHRcdFx0bmFtZTogMSxcblx0XHRcdGZvcm06IDEsXG5cdFx0XHRzdGF0ZTogMSxcblx0XHRcdHBlcm1zOiAxLFxuXHRcdFx0c3BhY2U6IDEsXG5cdFx0XHRjb21wYW55X2lkOiAxLFxuXHRcdFx0c29ydF9ubzogMSxcblx0XHRcdGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG5cdFx0XHRkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG5cdFx0XHRlbmFibGVfYW1pc2Zvcm06IDFcblx0XHR9XG5cdH0pXG5cbk1ldGVvci5wdWJsaXNoICdpbnN0YW5jZV9mbG93JywgKHNwYWNlSWQsIGZsb3dJZCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIGZsb3dJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRyZXR1cm4gZGIuZmxvd3MuZmluZCh7X2lkOiBmbG93SWQsIHNwYWNlOiBzcGFjZUlkfSwge1xuXHRcdGZpZWxkczoge1xuXHRcdFx0bmFtZTogMSxcblx0XHRcdGZvcm06IDEsXG5cdFx0XHRzdGF0ZTogMSxcblx0XHRcdHBlcm1zOiAxLFxuXHRcdFx0c3BhY2U6IDEsXG5cdFx0XHRjb21wYW55X2lkOiAxLFxuXHRcdFx0c29ydF9ubzogMSxcblx0XHRcdGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG5cdFx0XHRkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG5cdFx0XHRlbmFibGVfYW1pc2Zvcm06IDFcblx0XHR9XG5cdH0pXG5cblxuTWV0ZW9yLnB1Ymxpc2ggJ2Zsb3dfdmVyc2lvbicsIChzcGFjZUlkLCBmbG93SWQsIHZlcnNpb25JZCkgLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBmbG93SWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHZlcnNpb25JZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXG5cdHNlbGYgPSB0aGlzO1xuXG5cdGdldEZsb3dWZXJzaW9uID0gKGlkICwgdmVyc2lvbklkKS0+XG5cdFx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoe19pZCA6IGlkfSk7XG5cdFx0aWYgZmxvd1xuXHRcdFx0Zmxvd192ZXJzaW9uID0gZmxvdy5jdXJyZW50XG5cdFx0XHRmbG93X3ZlcnNpb24ubGF0ZXN0ID0gdHJ1ZVxuXG5cdFx0XHRpZiBmbG93X3ZlcnNpb24uX2lkICE9IHZlcnNpb25JZFxuXHRcdFx0XHRmbG93X3ZlcnNpb24gPSBmbG93Lmhpc3RvcnlzLmZpbmRQcm9wZXJ0eUJ5UEsoXCJfaWRcIiwgdmVyc2lvbklkKVxuXHRcdFx0XHRmbG93X3ZlcnNpb24ubGF0ZXN0ID0gZmFsc2VcblxuXHRcdFx0cmV0dXJuIGZsb3dfdmVyc2lvblxuXHRoYW5kbGUgPSBkYi5mbG93cy5maW5kKHtfaWQ6IGZsb3dJZH0sIHtmaWVsZHM6IHtfaWQ6IDEsIFwiY3VycmVudC5tb2RpZmllZFwiOiAxfX0pLm9ic2VydmVDaGFuZ2VzIHtcblx0XHRjaGFuZ2VkOiAoaWQpLT5cblx0XHRcdHNlbGYuY2hhbmdlZChcImZsb3dfdmVyc2lvbnNcIiwgdmVyc2lvbklkLCBnZXRGbG93VmVyc2lvbihpZCwgdmVyc2lvbklkKSk7XG5cdH1cblxuXG5cdHNlbGYuYWRkZWQoXCJmbG93X3ZlcnNpb25zXCIsIHZlcnNpb25JZCwgZ2V0Rmxvd1ZlcnNpb24oZmxvd0lkLCB2ZXJzaW9uSWQpKTtcblx0c2VsZi5yZWFkeSgpO1xuXHRzZWxmLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKVxuXG5NZXRlb3IucHVibGlzaCAnZGlzdHJpYnV0ZV9vcHRpb25hbF9mbG93cycsIChmbG93X2lkcyktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIGZsb3dfaWRzXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHJldHVybiBkYi5mbG93cy5maW5kKHtfaWQ6IHskaW46IGZsb3dfaWRzfX0sIHtcblx0XHRmaWVsZHM6IHtcblx0XHRcdG5hbWU6IDEsXG5cdFx0XHRmb3JtOiAxLFxuXHRcdFx0c3RhdGU6IDEsXG5cdFx0XHRwZXJtczogMSxcblx0XHRcdHNwYWNlOiAxLFxuXHRcdFx0ZGlzdHJpYnV0ZV9vcHRpb25hbF91c2VyczogMSxcblx0XHRcdGRpc3RyaWJ1dGVfdG9fc2VsZjogMSxcblx0XHRcdGRpc3RyaWJ1dGVfZW5kX25vdGlmaWNhdGlvbjogMSxcblx0XHRcdGNvbXBhbnlfaWQ6IDEsXG5cdFx0XHRlbmFibGVfYW1pc2Zvcm06IDFcblx0XHR9XG5cdH0pXG5cbk1ldGVvci5wdWJsaXNoICdmbG93JywgKHNwYWNlSWQsIGZsb3dJZCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIGZsb3dJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXG5cdHJldHVybiBkYi5mbG93cy5maW5kKHtfaWQ6IGZsb3dJZCwgc3BhY2U6IHNwYWNlSWR9LCB7XG5cdFx0ZmllbGRzOiB7XG5cdFx0XHRwcmludF90ZW1wbGF0ZTogMSxcblx0XHRcdGluc3RhbmNlX3RlbXBsYXRlOiAxLFxuXHRcdFx0ZXZlbnRzOiAxLFxuXHRcdFx0ZGlzdHJpYnV0ZV9vcHRpb25hbF91c2VyczogMSxcblx0XHRcdGRpc3RyaWJ1dGVfdG9fc2VsZjogMSxcblx0XHRcdHVwbG9hZF9hZnRlcl9iZWluZ19kaXN0cmlidXRlZDogMSxcblx0XHRcdGRpc3RyaWJ1dGVfZW5kX25vdGlmaWNhdGlvbjogMSxcblx0XHRcdGNvbXBhbnlfaWQ6IDEsXG5cdFx0XHRhbGxvd19zZWxlY3Rfc3RlcDogMSxcblx0XHRcdGVuYWJsZV9hbWlzZm9ybTogMVxuXHRcdH1cblx0fSlcbk1ldGVvci5wdWJsaXNoICdmbG93X2ZpbGVzJywgKHNwYWNlSWQsIGZsb3dJZCktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHNwYWNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIGZsb3dJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRyZXR1cm4gY2ZzLmZpbGVzLmZpbmQoeyAnbWV0YWRhdGEuc3BhY2UnOiBzcGFjZUlkLCAnbWV0YWRhdGEub2JqZWN0X25hbWUnOiAnZmxvd3MnLCAnbWV0YWRhdGEucmVjb3JkX2lkJzogZmxvd0lkIH0pXG5cbk1ldGVvci5wdWJsaXNoQ29tcG9zaXRlICdmbG93c190YWJ1bGFyJywgKHRhYmxlTmFtZSwgaWRzLCBmaWVsZHMpLT5cblx0Y2hlY2sodGFibGVOYW1lLCBTdHJpbmcpO1xuXHRjaGVjayhpZHMsIEFycmF5KTtcblx0Y2hlY2soZmllbGRzLCBNYXRjaC5PcHRpb25hbChPYmplY3QpKTtcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dGhpcy51bmJsb2NrKClcblxuXHRmaW5kOiAtPlxuXHRcdHRoaXMudW5ibG9jaygpXG5cdFx0ZGIuZmxvd3MuZmluZCB7X2lkOiB7JGluOiBpZHN9fSwgZmllbGRzOiBmaWVsZHNcblxuXHRjaGlsZHJlbjogW1xuXHRcdHtcblx0XHRcdGZpbmQ6IChmbG93KSAtPlxuXHRcdFx0XHRAdW5ibG9jaygpXG5cdFx0XHRcdCMgUHVibGlzaCB0aGUgcmVsYXRlZCB1c2VyXG5cdFx0XHRcdGRiLnNwYWNlX3VzZXJzLmZpbmQge1xuXHRcdFx0XHRcdHNwYWNlOiBmbG93LnNwYWNlLFxuXHRcdFx0XHRcdHVzZXI6IGZsb3cuY3VycmVudC5tb2RpZmllZF9ieVxuXHRcdFx0XHR9LCBmaWVsZHM6XG5cdFx0XHRcdFx0c3BhY2U6IDFcblx0XHRcdFx0XHR1c2VyOiAxXG5cdFx0XHRcdFx0bmFtZTogMVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0ZmluZDogKGZsb3cpIC0+XG5cdFx0XHRcdEB1bmJsb2NrKClcblx0XHRcdFx0IyBQdWJsaXNoIHRoZSByZWxhdGVkIHVzZXJcblx0XHRcdFx0ZGIuZm9ybXMuZmluZCB7XG5cdFx0XHRcdFx0c3BhY2U6IGZsb3cuc3BhY2UsXG5cdFx0XHRcdFx0X2lkOiBmbG93LmZvcm1cblx0XHRcdFx0fSwgZmllbGRzOlxuXHRcdFx0XHRcdHNwYWNlOiAxXG5cdFx0XHRcdFx0X2lkOiAxXG5cdFx0XHRcdFx0bmFtZTogMSxcblx0XHRcdFx0XHRjYXRlZ29yeTogMVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0ZmluZDogKGZsb3cpIC0+XG5cdFx0XHRcdEB1bmJsb2NrKClcblx0XHRcdFx0IyBQdWJsaXNoIHRoZSByZWxhdGVkIHVzZXJcblx0XHRcdFx0ZGIuY2F0ZWdvcmllcy5maW5kIHtcblx0XHRcdFx0XHRzcGFjZTogZmxvdy5zcGFjZVxuXHRcdFx0XHR9LCBmaWVsZHM6XG5cdFx0XHRcdFx0c3BhY2U6IDFcblx0XHRcdFx0XHRfaWQ6IDFcblx0XHRcdFx0XHRuYW1lOiAxXG5cdFx0fVxuXHRdIiwiTWV0ZW9yLnB1Ymxpc2goJ2Zsb3dzJywgZnVuY3Rpb24oc3BhY2VJZCkge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmIChkYi5mbG93cy5maW5kKHtcbiAgICBzcGFjZTogc3BhY2VJZFxuICB9KS5jb3VudCgpID09PSAwKSB7XG4gICAgZGIuc3BhY2VzLmNyZWF0ZVRlbXBsYXRlRm9ybUFuZEZsb3coc3BhY2VJZCk7XG4gIH1cbiAgcmV0dXJuIGRiLmZsb3dzLmZpbmQoe1xuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH0sIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIG5hbWU6IDEsXG4gICAgICBmb3JtOiAxLFxuICAgICAgc3RhdGU6IDEsXG4gICAgICBwZXJtczogMSxcbiAgICAgIHNwYWNlOiAxLFxuICAgICAgY29tcGFueV9pZDogMSxcbiAgICAgIHNvcnRfbm86IDEsXG4gICAgICBkaXN0cmlidXRlX29wdGlvbmFsX3VzZXJzOiAxLFxuICAgICAgZGlzdHJpYnV0ZV90b19zZWxmOiAxLFxuICAgICAgZW5hYmxlX2FtaXNmb3JtOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuXG5NZXRlb3IucHVibGlzaCgnaW5zdGFuY2VfZmxvdycsIGZ1bmN0aW9uKHNwYWNlSWQsIGZsb3dJZCkge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghZmxvd0lkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gZGIuZmxvd3MuZmluZCh7XG4gICAgX2lkOiBmbG93SWQsXG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMSxcbiAgICAgIGZvcm06IDEsXG4gICAgICBzdGF0ZTogMSxcbiAgICAgIHBlcm1zOiAxLFxuICAgICAgc3BhY2U6IDEsXG4gICAgICBjb21wYW55X2lkOiAxLFxuICAgICAgc29ydF9ubzogMSxcbiAgICAgIGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG4gICAgICBkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG4gICAgICBlbmFibGVfYW1pc2Zvcm06IDFcbiAgICB9XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKCdmbG93X3ZlcnNpb24nLCBmdW5jdGlvbihzcGFjZUlkLCBmbG93SWQsIHZlcnNpb25JZCkge1xuICB2YXIgZ2V0Rmxvd1ZlcnNpb24sIGhhbmRsZSwgc2VsZjtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWZsb3dJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCF2ZXJzaW9uSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHNlbGYgPSB0aGlzO1xuICBnZXRGbG93VmVyc2lvbiA9IGZ1bmN0aW9uKGlkLCB2ZXJzaW9uSWQpIHtcbiAgICB2YXIgZmxvdywgZmxvd192ZXJzaW9uO1xuICAgIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtcbiAgICAgIF9pZDogaWRcbiAgICB9KTtcbiAgICBpZiAoZmxvdykge1xuICAgICAgZmxvd192ZXJzaW9uID0gZmxvdy5jdXJyZW50O1xuICAgICAgZmxvd192ZXJzaW9uLmxhdGVzdCA9IHRydWU7XG4gICAgICBpZiAoZmxvd192ZXJzaW9uLl9pZCAhPT0gdmVyc2lvbklkKSB7XG4gICAgICAgIGZsb3dfdmVyc2lvbiA9IGZsb3cuaGlzdG9yeXMuZmluZFByb3BlcnR5QnlQSyhcIl9pZFwiLCB2ZXJzaW9uSWQpO1xuICAgICAgICBmbG93X3ZlcnNpb24ubGF0ZXN0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmxvd192ZXJzaW9uO1xuICAgIH1cbiAgfTtcbiAgaGFuZGxlID0gZGIuZmxvd3MuZmluZCh7XG4gICAgX2lkOiBmbG93SWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgX2lkOiAxLFxuICAgICAgXCJjdXJyZW50Lm1vZGlmaWVkXCI6IDFcbiAgICB9XG4gIH0pLm9ic2VydmVDaGFuZ2VzKHtcbiAgICBjaGFuZ2VkOiBmdW5jdGlvbihpZCkge1xuICAgICAgcmV0dXJuIHNlbGYuY2hhbmdlZChcImZsb3dfdmVyc2lvbnNcIiwgdmVyc2lvbklkLCBnZXRGbG93VmVyc2lvbihpZCwgdmVyc2lvbklkKSk7XG4gICAgfVxuICB9KTtcbiAgc2VsZi5hZGRlZChcImZsb3dfdmVyc2lvbnNcIiwgdmVyc2lvbklkLCBnZXRGbG93VmVyc2lvbihmbG93SWQsIHZlcnNpb25JZCkpO1xuICBzZWxmLnJlYWR5KCk7XG4gIHJldHVybiBzZWxmLm9uU3RvcChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaGFuZGxlLnN0b3AoKTtcbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2goJ2Rpc3RyaWJ1dGVfb3B0aW9uYWxfZmxvd3MnLCBmdW5jdGlvbihmbG93X2lkcykge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWZsb3dfaWRzKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gZGIuZmxvd3MuZmluZCh7XG4gICAgX2lkOiB7XG4gICAgICAkaW46IGZsb3dfaWRzXG4gICAgfVxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBuYW1lOiAxLFxuICAgICAgZm9ybTogMSxcbiAgICAgIHN0YXRlOiAxLFxuICAgICAgcGVybXM6IDEsXG4gICAgICBzcGFjZTogMSxcbiAgICAgIGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG4gICAgICBkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG4gICAgICBkaXN0cmlidXRlX2VuZF9ub3RpZmljYXRpb246IDEsXG4gICAgICBjb21wYW55X2lkOiAxLFxuICAgICAgZW5hYmxlX2FtaXNmb3JtOiAxXG4gICAgfVxuICB9KTtcbn0pO1xuXG5NZXRlb3IucHVibGlzaCgnZmxvdycsIGZ1bmN0aW9uKHNwYWNlSWQsIGZsb3dJZCkge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghZmxvd0lkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gZGIuZmxvd3MuZmluZCh7XG4gICAgX2lkOiBmbG93SWQsXG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgcHJpbnRfdGVtcGxhdGU6IDEsXG4gICAgICBpbnN0YW5jZV90ZW1wbGF0ZTogMSxcbiAgICAgIGV2ZW50czogMSxcbiAgICAgIGRpc3RyaWJ1dGVfb3B0aW9uYWxfdXNlcnM6IDEsXG4gICAgICBkaXN0cmlidXRlX3RvX3NlbGY6IDEsXG4gICAgICB1cGxvYWRfYWZ0ZXJfYmVpbmdfZGlzdHJpYnV0ZWQ6IDEsXG4gICAgICBkaXN0cmlidXRlX2VuZF9ub3RpZmljYXRpb246IDEsXG4gICAgICBjb21wYW55X2lkOiAxLFxuICAgICAgYWxsb3dfc2VsZWN0X3N0ZXA6IDEsXG4gICAgICBlbmFibGVfYW1pc2Zvcm06IDFcbiAgICB9XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKCdmbG93X2ZpbGVzJywgZnVuY3Rpb24oc3BhY2VJZCwgZmxvd0lkKSB7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFmbG93SWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHJldHVybiBjZnMuZmlsZXMuZmluZCh7XG4gICAgJ21ldGFkYXRhLnNwYWNlJzogc3BhY2VJZCxcbiAgICAnbWV0YWRhdGEub2JqZWN0X25hbWUnOiAnZmxvd3MnLFxuICAgICdtZXRhZGF0YS5yZWNvcmRfaWQnOiBmbG93SWRcbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2hDb21wb3NpdGUoJ2Zsb3dzX3RhYnVsYXInLCBmdW5jdGlvbih0YWJsZU5hbWUsIGlkcywgZmllbGRzKSB7XG4gIGNoZWNrKHRhYmxlTmFtZSwgU3RyaW5nKTtcbiAgY2hlY2soaWRzLCBBcnJheSk7XG4gIGNoZWNrKGZpZWxkcywgTWF0Y2guT3B0aW9uYWwoT2JqZWN0KSk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHRoaXMudW5ibG9jaygpO1xuICByZXR1cm4ge1xuICAgIGZpbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy51bmJsb2NrKCk7XG4gICAgICByZXR1cm4gZGIuZmxvd3MuZmluZCh7XG4gICAgICAgIF9pZDoge1xuICAgICAgICAgICRpbjogaWRzXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiBmaWVsZHNcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIHtcbiAgICAgICAgZmluZDogZnVuY3Rpb24oZmxvdykge1xuICAgICAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgICAgIHJldHVybiBkYi5zcGFjZV91c2Vycy5maW5kKHtcbiAgICAgICAgICAgIHNwYWNlOiBmbG93LnNwYWNlLFxuICAgICAgICAgICAgdXNlcjogZmxvdy5jdXJyZW50Lm1vZGlmaWVkX2J5XG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgIHNwYWNlOiAxLFxuICAgICAgICAgICAgICB1c2VyOiAxLFxuICAgICAgICAgICAgICBuYW1lOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZmluZDogZnVuY3Rpb24oZmxvdykge1xuICAgICAgICAgIHRoaXMudW5ibG9jaygpO1xuICAgICAgICAgIHJldHVybiBkYi5mb3Jtcy5maW5kKHtcbiAgICAgICAgICAgIHNwYWNlOiBmbG93LnNwYWNlLFxuICAgICAgICAgICAgX2lkOiBmbG93LmZvcm1cbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgc3BhY2U6IDEsXG4gICAgICAgICAgICAgIF9pZDogMSxcbiAgICAgICAgICAgICAgbmFtZTogMSxcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBmaW5kOiBmdW5jdGlvbihmbG93KSB7XG4gICAgICAgICAgdGhpcy51bmJsb2NrKCk7XG4gICAgICAgICAgcmV0dXJuIGRiLmNhdGVnb3JpZXMuZmluZCh7XG4gICAgICAgICAgICBzcGFjZTogZmxvdy5zcGFjZVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICBzcGFjZTogMSxcbiAgICAgICAgICAgICAgX2lkOiAxLFxuICAgICAgICAgICAgICBuYW1lOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59KTtcbiIsIk1ldGVvci5wdWJsaXNoICdmb3JtcycsIChzcGFjZUlkKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3Mgc3BhY2VJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXG5cdHJldHVybiBkYi5mb3Jtcy5maW5kKHtzcGFjZTogc3BhY2VJZH0sIHtmaWVsZHM6IHtuYW1lOiAxLCBjYXRlZ29yeTogMSwgc3RhdGU6IDEsIGRlc2NyaXB0aW9uOiAxLCBpbnN0YW5jZV9zdHlsZTogMSwgYW1pc19zY2hlbWE6IDF9fSlcblxuTWV0ZW9yLnB1Ymxpc2ggJ2luc3RhbmNlX2Zvcm0nLCAoc3BhY2VJZCwgZm9ybUlkKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3Mgc3BhY2VJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXG5cdHJldHVybiBkYi5mb3Jtcy5maW5kKHtfaWQ6IGZvcm1JZCwgc3BhY2U6IHNwYWNlSWR9LCB7ZmllbGRzOiB7bmFtZTogMSwgY2F0ZWdvcnk6IDEsIHN0YXRlOiAxLCBkZXNjcmlwdGlvbjogMSwgaW5zdGFuY2Vfc3R5bGU6IDEsIGFtaXNfc2NoZW1hOiAxfX0pXG5cblxuTWV0ZW9yLnB1Ymxpc2ggJ2Zvcm1fdmVyc2lvbicsIChzcGFjZUlkLCBmb3JtSWQsIHZlcnNpb25JZCkgLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBzcGFjZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBmb3JtSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIHZlcnNpb25JZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXG5cdHNlbGYgPSB0aGlzO1xuXG5cdGdldEZvcm1WZXJzaW9uID0gKGlkICwgdmVyc2lvbklkKS0+XG5cdFx0Zm9ybSA9IGRiLmZvcm1zLmZpbmRPbmUoe19pZCA6IGlkfSk7XG5cdFx0aWYgIWZvcm1cblx0XHRcdHJldHVybiB7fVxuXHRcdGZvcm1fdmVyc2lvbiA9IGZvcm0uY3VycmVudFxuXHRcdGZvcm1fdmVyc2lvbi5sYXRlc3QgPSB0cnVlXG5cdFx0aWYgZm9ybV92ZXJzaW9uLl9pZCAhPSB2ZXJzaW9uSWRcblx0XHRcdGZvcm1fdmVyc2lvbiA9IGZvcm0uaGlzdG9yeXMuZmluZFByb3BlcnR5QnlQSyhcIl9pZFwiLCB2ZXJzaW9uSWQpXG5cdFx0XHRmb3JtX3ZlcnNpb24ubGF0ZXN0ID0gZmFsc2Vcblx0XHRyZXR1cm4gZm9ybV92ZXJzaW9uXG5cblx0aGFuZGxlID0gZGIuZm9ybXMuZmluZCh7X2lkOiBmb3JtSWR9LCB7ZmllbGRzOiB7X2lkOiAxLCBcImN1cnJlbnQubW9kaWZpZWRcIjogMX19KS5vYnNlcnZlQ2hhbmdlcyB7XG5cdFx0Y2hhbmdlZDogKGlkKS0+XG5cdFx0XHRzZWxmLmNoYW5nZWQoXCJmb3JtX3ZlcnNpb25zXCIsIHZlcnNpb25JZCwgZ2V0Rm9ybVZlcnNpb24oaWQsIHZlcnNpb25JZCkpO1xuXHR9XG5cblx0c2VsZi5hZGRlZChcImZvcm1fdmVyc2lvbnNcIiwgdmVyc2lvbklkLCBnZXRGb3JtVmVyc2lvbihmb3JtSWQsIHZlcnNpb25JZCkpO1xuXHRzZWxmLnJlYWR5KCk7XG5cdHNlbGYub25TdG9wICgpLT5cblx0XHRoYW5kbGUuc3RvcCgpIiwiTWV0ZW9yLnB1Ymxpc2goJ2Zvcm1zJywgZnVuY3Rpb24oc3BhY2VJZCkge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIXNwYWNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHJldHVybiBkYi5mb3Jtcy5maW5kKHtcbiAgICBzcGFjZTogc3BhY2VJZFxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBuYW1lOiAxLFxuICAgICAgY2F0ZWdvcnk6IDEsXG4gICAgICBzdGF0ZTogMSxcbiAgICAgIGRlc2NyaXB0aW9uOiAxLFxuICAgICAgaW5zdGFuY2Vfc3R5bGU6IDEsXG4gICAgICBhbWlzX3NjaGVtYTogMVxuICAgIH1cbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2goJ2luc3RhbmNlX2Zvcm0nLCBmdW5jdGlvbihzcGFjZUlkLCBmb3JtSWQpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gZGIuZm9ybXMuZmluZCh7XG4gICAgX2lkOiBmb3JtSWQsXG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgbmFtZTogMSxcbiAgICAgIGNhdGVnb3J5OiAxLFxuICAgICAgc3RhdGU6IDEsXG4gICAgICBkZXNjcmlwdGlvbjogMSxcbiAgICAgIGluc3RhbmNlX3N0eWxlOiAxLFxuICAgICAgYW1pc19zY2hlbWE6IDFcbiAgICB9XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKCdmb3JtX3ZlcnNpb24nLCBmdW5jdGlvbihzcGFjZUlkLCBmb3JtSWQsIHZlcnNpb25JZCkge1xuICB2YXIgZ2V0Rm9ybVZlcnNpb24sIGhhbmRsZSwgc2VsZjtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFzcGFjZUlkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWZvcm1JZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCF2ZXJzaW9uSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHNlbGYgPSB0aGlzO1xuICBnZXRGb3JtVmVyc2lvbiA9IGZ1bmN0aW9uKGlkLCB2ZXJzaW9uSWQpIHtcbiAgICB2YXIgZm9ybSwgZm9ybV92ZXJzaW9uO1xuICAgIGZvcm0gPSBkYi5mb3Jtcy5maW5kT25lKHtcbiAgICAgIF9pZDogaWRcbiAgICB9KTtcbiAgICBpZiAoIWZvcm0pIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgZm9ybV92ZXJzaW9uID0gZm9ybS5jdXJyZW50O1xuICAgIGZvcm1fdmVyc2lvbi5sYXRlc3QgPSB0cnVlO1xuICAgIGlmIChmb3JtX3ZlcnNpb24uX2lkICE9PSB2ZXJzaW9uSWQpIHtcbiAgICAgIGZvcm1fdmVyc2lvbiA9IGZvcm0uaGlzdG9yeXMuZmluZFByb3BlcnR5QnlQSyhcIl9pZFwiLCB2ZXJzaW9uSWQpO1xuICAgICAgZm9ybV92ZXJzaW9uLmxhdGVzdCA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybV92ZXJzaW9uO1xuICB9O1xuICBoYW5kbGUgPSBkYi5mb3Jtcy5maW5kKHtcbiAgICBfaWQ6IGZvcm1JZFxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBfaWQ6IDEsXG4gICAgICBcImN1cnJlbnQubW9kaWZpZWRcIjogMVxuICAgIH1cbiAgfSkub2JzZXJ2ZUNoYW5nZXMoe1xuICAgIGNoYW5nZWQ6IGZ1bmN0aW9uKGlkKSB7XG4gICAgICByZXR1cm4gc2VsZi5jaGFuZ2VkKFwiZm9ybV92ZXJzaW9uc1wiLCB2ZXJzaW9uSWQsIGdldEZvcm1WZXJzaW9uKGlkLCB2ZXJzaW9uSWQpKTtcbiAgICB9XG4gIH0pO1xuICBzZWxmLmFkZGVkKFwiZm9ybV92ZXJzaW9uc1wiLCB2ZXJzaW9uSWQsIGdldEZvcm1WZXJzaW9uKGZvcm1JZCwgdmVyc2lvbklkKSk7XG4gIHNlbGYucmVhZHkoKTtcbiAgcmV0dXJuIHNlbGYub25TdG9wKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBoYW5kbGUuc3RvcCgpO1xuICB9KTtcbn0pO1xuIiwiTWV0ZW9yLnB1Ymxpc2ggJ2luc3RhbmNlX2RhdGEnLCAoaW5zdGFuY2VJZCwgYm94KS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3MgKGluc3RhbmNlSWQgJiYgZGIuaW5zdGFuY2VzLmZpbmQoe19pZDogaW5zdGFuY2VJZH0pLmNvdW50KCkpXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHNlbGYgPSB0aGlzO1xuXG5cdG1pbmlBcHByb3ZlRmllbGRzID0gWydfaWQnLCAnaXNfZmluaXNoZWQnLCAndXNlcicsICdoYW5kbGVyJywgJ2hhbmRsZXJfbmFtZScsICd0eXBlJywgJ3N0YXJ0X2RhdGUnLCAnZGVzY3JpcHRpb24nLFxuXHRcdCdpc19yZWFkJywgJ2p1ZGdlJywgJ2ZpbmlzaF9kYXRlJywgJ2Zyb21fdXNlcl9uYW1lJywgJ2Zyb21fdXNlcicsICdjY19kZXNjcmlwdGlvbicsICdhdXRvX3N1Ym1pdHRlZCddXG5cblx0dHJpZ2dlckNoYW5nZUZpZWxkcyA9IFsnZm9ybV92ZXJzaW9uJywgJ2Zsb3dfdmVyc2lvbicsICdyZWxhdGVkX2luc3RhbmNlcycsICdfbXlfYXBwcm92ZV9yZWFkX2RhdGVzJywgJ3ZhbHVlcycsICdjaGFuZ2VfdGltZSddXG5cblx0dHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlcyA9IHt9XG5cblx0aW5zdGFuY2VfZmllbGRzXzAgPSB7XG5cdFx0XCJyZWNvcmRfc3luY2VkXCI6IDAsXG5cbiNcdFx0XCJ0cmFjZXMuYXBwcm92ZXMuaGFuZGxlcl9vcmdhbml6YXRpb25fZnVsbG5hbWVcIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5oYW5kbGVyX29yZ2FuaXphdGlvbl9uYW1lXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMuaGFuZGxlcl9vcmdhbml6YXRpb25cIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5jb3N0X3RpbWVcIjogMCxcbiNcdFx0XCJ0cmFjZXMuYXBwcm92ZXMucmVhZF9kYXRlXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMuaXNfZXJyb3JcIjogMCxcblx0XHQjIFwidHJhY2VzLmFwcHJvdmVzLnVzZXJfbmFtZVwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLmRlYWRsaW5lXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMucmVtaW5kX2RhdGVcIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5yZW1pbmRlZF9jb3VudFwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLm1vZGlmaWVkX2J5XCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMubW9kaWZpZWRcIjogMCxcblx0XHRcInRyYWNlcy5hcHByb3Zlcy5nZW9sb2NhdGlvblwiOiAwLFxuXHRcdFwidHJhY2VzLmFwcHJvdmVzLmNjX3VzZXJzXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMuZnJvbV9hcHByb3ZlX2lkXCI6IDAsXG5cdFx0XCJ0cmFjZXMuYXBwcm92ZXMudmFsdWVzX2hpc3RvcnlcIjogMFxuXHR9XG5cblx0Z2V0TXlhcHByb3ZlTW9kaWZpZWQgPSAodHJhY2VzKS0+XG5cdFx0bXlBcHByb3ZlTW9kaWZpZWRzID0gbmV3IEFycmF5KClcblxuXHRcdHRyYWNlcz8uZm9yRWFjaCAodHJhY2UpLT5cblx0XHRcdHRyYWNlPy5hcHByb3Zlcz8uZm9yRWFjaCAoYXBwcm92ZSktPlxuXHRcdFx0XHRpZiAoYXBwcm92ZS51c2VyID09IHNlbGYudXNlcklkIHx8IGFwcHJvdmUuaGFuZGxlciA9PSBzZWxmLnVzZXJJZClcblx0XHRcdFx0IyAmJiAhYXBwcm92ZS5pc19maW5pc2hlZFxuI1x0XHRcdFx0XHRjb25zb2xlLmxvZyhcImFwcHJvdmVcIiwgYXBwcm92ZS5faWQsIGFwcHJvdmUucmVhZF9kYXRlKVxuXG5cdFx0XHRcdFx0bXlBcHByb3ZlTW9kaWZpZWRzLnB1c2goYXBwcm92ZS5yZWFkX2RhdGUpXG5cblx0XHRyZXR1cm4gbXlBcHByb3ZlTW9kaWZpZWRzXG5cblxuXHRnZXRNaW5pSW5zdGFuY2UgPSAoX2luc3RhbmNlSWQpLT5cblx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IF9pbnN0YW5jZUlkfSwge2ZpZWxkczogaW5zdGFuY2VfZmllbGRzXzB9KVxuXG5cdFx0aWYgaW5zdGFuY2VcblxuXHRcdFx0dHJpZ2dlckNoYW5nZUZpZWxkcy5mb3JFYWNoIChrZXkpLT5cblx0XHRcdFx0aWYga2V5ID09ICdfbXlfYXBwcm92ZV9yZWFkX2RhdGVzJ1xuXHRcdFx0XHRcdHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXNba2V5XSA9IGdldE15YXBwcm92ZU1vZGlmaWVkKGluc3RhbmNlLnRyYWNlcylcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXNba2V5XSA9IGluc3RhbmNlW2tleV1cblxuI1x0XHRcdGhhc09waW5pb25GaWVsZCA9IEluc3RhbmNlU2lnblRleHQuaW5jbHVkZXNPcGluaW9uRmllbGQoaW5zdGFuY2UuZm9ybSwgaW5zdGFuY2UuZm9ybV92ZXJzaW9uKVxuXG5cdFx0XHRzaG93X21vZGFsX3RyYWNlc19saXN0ID0gZGIuc3BhY2Vfc2V0dGluZ3MuZmluZE9uZSh7IHNwYWNlOiBpbnN0YW5jZS5zcGFjZSwga2V5OiBcInNob3dfbW9kYWxfdHJhY2VzX2xpc3RcIiB9LCB7IGZpZWxkczogeyB2YWx1ZXM6IDEgfSB9KT8udmFsdWVzIHx8IGZhbHNlXG5cblx0XHRcdGlmIHNob3dfbW9kYWxfdHJhY2VzX2xpc3RcblxuXHRcdFx0XHR0cmFjZXMgPSBuZXcgQXJyYXkoKTtcblxuXHRcdFx0XHRpbnN0YW5jZT8udHJhY2VzPy5mb3JFYWNoICh0cmFjZSktPlxuXHRcdFx0XHRcdF90cmFjZSA9IF8uY2xvbmUodHJhY2UpXG5cblx0XHRcdFx0XHRhcHByb3ZlcyA9IG5ldyBBcnJheSgpXG5cblx0XHRcdFx0XHR0cmFjZT8uYXBwcm92ZXM/LmZvckVhY2ggKGFwcHJvdmUpLT5cblx0XHRcdFx0XHRcdGlmIGFwcHJvdmUudHlwZSAhPSAnY2MnIHx8IGFwcHJvdmUudXNlciA9PSBzZWxmLnVzZXJJZCB8fCBhcHByb3ZlLmhhbmRsZXIgPT0gc2VsZi51c2VySWQgfHwgKCFfLmlzRW1wdHkoYXBwcm92ZS5zaWduX2ZpZWxkX2NvZGUpKVxuXHRcdFx0XHRcdFx0XHRhcHByb3Zlcy5wdXNoKGFwcHJvdmUpXG5cblx0XHRcdFx0XHRfdHJhY2UuYXBwcm92ZXMgPSBhcHByb3Zlc1xuXG5cdFx0XHRcdFx0dHJhY2VzLnB1c2goX3RyYWNlKVxuXG5cdFx0XHRcdGluc3RhbmNlLnRyYWNlcyA9IHRyYWNlcztcblxuXHRcdHJldHVybiBpbnN0YW5jZVxuXG5cblx0bmVlZENoYW5nZSA9IChjaGFuZ2VGaWVsZHMpLT5cblx0XHRpZiBjaGFuZ2VGaWVsZHNcblxuXHRcdFx0X2NoYW5nZSA9IGZhbHNlXG5cblx0XHRcdF9yZXYgPSBfLmZpbmQgdHJpZ2dlckNoYW5nZUZpZWxkcywgKGtleSktPlxuXHRcdFx0XHRfa2V5ID0ga2V5XG5cblx0XHRcdFx0aWYga2V5ID09ICdfbXlfYXBwcm92ZV9yZWFkX2RhdGVzJ1xuXHRcdFx0XHRcdF9rZXkgPSAndHJhY2VzJ1xuXG5cdFx0XHRcdGlmIF8uaGFzKGNoYW5nZUZpZWxkcywgX2tleSlcblxuXHRcdFx0XHRcdGlmIGtleSA9PSAnX215X2FwcHJvdmVfcmVhZF9kYXRlcydcblxuXHRcdFx0XHRcdFx0X215X2FwcHJvdmVfbW9kaWZpZWRzID0gZ2V0TXlhcHByb3ZlTW9kaWZpZWQoY2hhbmdlRmllbGRzLnRyYWNlcylcblxuI1x0XHRcdFx0XHRcdGNvbnNvbGUubG9nKHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXNba2V5XSwgX215X2FwcHJvdmVfbW9kaWZpZWRzKVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gIV8uaXNFcXVhbCh0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzW2tleV0sIF9teV9hcHByb3ZlX21vZGlmaWVkcylcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRyZXR1cm4gIV8uaXNFcXVhbCh0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzW2tleV0sIGNoYW5nZUZpZWxkc1trZXldKVxuXG5cdFx0XHRpZiBfcmV2XG5cdFx0XHRcdF9jaGFuZ2UgPSB0cnVlXG5cbiNcdFx0XHRjb25zb2xlLmxvZyhfcmV2LCBfY2hhbmdlKVxuXG5cdFx0XHRyZXR1cm4gX2NoYW5nZVxuXG5cdFx0cmV0dXJuIHRydWVcblx0I+atpOWkhOS4jeiDvea3u+WKoGZpZWxkc+mZkOWItu+8jOWQpuWImeS8muWvvOiHtOaVsOaNruS4jeWunuaXtlxuXHRoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZCh7X2lkOiBpbnN0YW5jZUlkfSkub2JzZXJ2ZUNoYW5nZXMge1xuXHRcdGNoYW5nZWQ6IChpZCwgZmllbGRzKS0+XG5cdFx0XHRpZihib3ggIT0gJ2luYm94JyB8fCBuZWVkQ2hhbmdlKGZpZWxkcykpXG5cdFx0XHRcdHNlbGYuY2hhbmdlZChcImluc3RhbmNlc1wiLCBpZCwgZ2V0TWluaUluc3RhbmNlKGlkKSk7XG5cdFx0cmVtb3ZlZDogKGlkKS0+XG5cdFx0XHRzZWxmLnJlbW92ZWQoXCJpbnN0YW5jZXNcIiwgaWQpO1xuXHR9XG5cblx0aW5zdGFuY2UgPSBnZXRNaW5pSW5zdGFuY2UoaW5zdGFuY2VJZClcblxuXHRzZWxmLmFkZGVkKFwiaW5zdGFuY2VzXCIsIGluc3RhbmNlPy5faWQsIGluc3RhbmNlKTtcblxuXHRzZWxmLnJlYWR5KCk7XG5cblx0c2VsZi5vblN0b3AgKCktPlxuXHRcdGhhbmRsZS5zdG9wKClcblxuXG5NZXRlb3IucHVibGlzaCAnaW5zdGFuY2VfdHJhY2VzJywgKGluc3RhbmNlSWQpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVubGVzcyBpbnN0YW5jZUlkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHNlbGYgPSB0aGlzXG5cblx0Z2V0SW5zdGFuY2VUcmFjZXMgPSAoX2luc0lkKS0+XG5cdFx0cmV0dXJuIGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IF9pbnNJZH0sIHtmaWVsZHM6IHtfaWQ6IDEsIHRyYWNlczogMX19KVxuXG5cblx0aGFuZGxlID0gIGRiLmluc3RhbmNlcy5maW5kKHtfaWQ6IGluc3RhbmNlSWR9KS5vYnNlcnZlQ2hhbmdlcyB7XG5cdFx0Y2hhbmdlZDogKGlkKS0+XG5cdFx0XHRzZWxmLmNoYW5nZWQoXCJpbnN0YW5jZV90cmFjZXNcIiwgaW5zdGFuY2VJZCwgZ2V0SW5zdGFuY2VUcmFjZXMoaW5zdGFuY2VJZCkpO1xuXHR9XG5cblx0c2VsZi5hZGRlZChcImluc3RhbmNlX3RyYWNlc1wiLCBpbnN0YW5jZUlkLCBnZXRJbnN0YW5jZVRyYWNlcyhpbnN0YW5jZUlkKSk7XG5cblx0c2VsZi5yZWFkeSgpO1xuXHRzZWxmLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKSIsIk1ldGVvci5wdWJsaXNoKCdpbnN0YW5jZV9kYXRhJywgZnVuY3Rpb24oaW5zdGFuY2VJZCwgYm94KSB7XG4gIHZhciBnZXRNaW5pSW5zdGFuY2UsIGdldE15YXBwcm92ZU1vZGlmaWVkLCBoYW5kbGUsIGluc3RhbmNlLCBpbnN0YW5jZV9maWVsZHNfMCwgbWluaUFwcHJvdmVGaWVsZHMsIG5lZWRDaGFuZ2UsIHNlbGYsIHRyaWdnZXJDaGFuZ2VGaWVsZHMsIHRyaWdnZXJDaGFuZ2VGaWVsZHNWYWx1ZXM7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghKGluc3RhbmNlSWQgJiYgZGIuaW5zdGFuY2VzLmZpbmQoe1xuICAgIF9pZDogaW5zdGFuY2VJZFxuICB9KS5jb3VudCgpKSkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgc2VsZiA9IHRoaXM7XG4gIG1pbmlBcHByb3ZlRmllbGRzID0gWydfaWQnLCAnaXNfZmluaXNoZWQnLCAndXNlcicsICdoYW5kbGVyJywgJ2hhbmRsZXJfbmFtZScsICd0eXBlJywgJ3N0YXJ0X2RhdGUnLCAnZGVzY3JpcHRpb24nLCAnaXNfcmVhZCcsICdqdWRnZScsICdmaW5pc2hfZGF0ZScsICdmcm9tX3VzZXJfbmFtZScsICdmcm9tX3VzZXInLCAnY2NfZGVzY3JpcHRpb24nLCAnYXV0b19zdWJtaXR0ZWQnXTtcbiAgdHJpZ2dlckNoYW5nZUZpZWxkcyA9IFsnZm9ybV92ZXJzaW9uJywgJ2Zsb3dfdmVyc2lvbicsICdyZWxhdGVkX2luc3RhbmNlcycsICdfbXlfYXBwcm92ZV9yZWFkX2RhdGVzJywgJ3ZhbHVlcycsICdjaGFuZ2VfdGltZSddO1xuICB0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzID0ge307XG4gIGluc3RhbmNlX2ZpZWxkc18wID0ge1xuICAgIFwicmVjb3JkX3N5bmNlZFwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLmhhbmRsZXJfb3JnYW5pemF0aW9uX25hbWVcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5oYW5kbGVyX29yZ2FuaXphdGlvblwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLmNvc3RfdGltZVwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLmlzX2Vycm9yXCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMuZGVhZGxpbmVcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5yZW1pbmRfZGF0ZVwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLnJlbWluZGVkX2NvdW50XCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMubW9kaWZpZWRfYnlcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5tb2RpZmllZFwiOiAwLFxuICAgIFwidHJhY2VzLmFwcHJvdmVzLmdlb2xvY2F0aW9uXCI6IDAsXG4gICAgXCJ0cmFjZXMuYXBwcm92ZXMuY2NfdXNlcnNcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy5mcm9tX2FwcHJvdmVfaWRcIjogMCxcbiAgICBcInRyYWNlcy5hcHByb3Zlcy52YWx1ZXNfaGlzdG9yeVwiOiAwXG4gIH07XG4gIGdldE15YXBwcm92ZU1vZGlmaWVkID0gZnVuY3Rpb24odHJhY2VzKSB7XG4gICAgdmFyIG15QXBwcm92ZU1vZGlmaWVkcztcbiAgICBteUFwcHJvdmVNb2RpZmllZHMgPSBuZXcgQXJyYXkoKTtcbiAgICBpZiAodHJhY2VzICE9IG51bGwpIHtcbiAgICAgIHRyYWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNlKSB7XG4gICAgICAgIHZhciByZWY7XG4gICAgICAgIHJldHVybiB0cmFjZSAhPSBudWxsID8gKHJlZiA9IHRyYWNlLmFwcHJvdmVzKSAhPSBudWxsID8gcmVmLmZvckVhY2goZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgICAgICAgIGlmIChhcHByb3ZlLnVzZXIgPT09IHNlbGYudXNlcklkIHx8IGFwcHJvdmUuaGFuZGxlciA9PT0gc2VsZi51c2VySWQpIHtcbiAgICAgICAgICAgIHJldHVybiBteUFwcHJvdmVNb2RpZmllZHMucHVzaChhcHByb3ZlLnJlYWRfZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbXlBcHByb3ZlTW9kaWZpZWRzO1xuICB9O1xuICBnZXRNaW5pSW5zdGFuY2UgPSBmdW5jdGlvbihfaW5zdGFuY2VJZCkge1xuICAgIHZhciBpbnN0YW5jZSwgcmVmLCByZWYxLCBzaG93X21vZGFsX3RyYWNlc19saXN0LCB0cmFjZXM7XG4gICAgaW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IF9pbnN0YW5jZUlkXG4gICAgfSwge1xuICAgICAgZmllbGRzOiBpbnN0YW5jZV9maWVsZHNfMFxuICAgIH0pO1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgdHJpZ2dlckNoYW5nZUZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnX215X2FwcHJvdmVfcmVhZF9kYXRlcycpIHtcbiAgICAgICAgICByZXR1cm4gdHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlc1trZXldID0gZ2V0TXlhcHByb3ZlTW9kaWZpZWQoaW5zdGFuY2UudHJhY2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlc1trZXldID0gaW5zdGFuY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzaG93X21vZGFsX3RyYWNlc19saXN0ID0gKChyZWYgPSBkYi5zcGFjZV9zZXR0aW5ncy5maW5kT25lKHtcbiAgICAgICAgc3BhY2U6IGluc3RhbmNlLnNwYWNlLFxuICAgICAgICBrZXk6IFwic2hvd19tb2RhbF90cmFjZXNfbGlzdFwiXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIHZhbHVlczogMVxuICAgICAgICB9XG4gICAgICB9KSkgIT0gbnVsbCA/IHJlZi52YWx1ZXMgOiB2b2lkIDApIHx8IGZhbHNlO1xuICAgICAgaWYgKHNob3dfbW9kYWxfdHJhY2VzX2xpc3QpIHtcbiAgICAgICAgdHJhY2VzID0gbmV3IEFycmF5KCk7XG4gICAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKChyZWYxID0gaW5zdGFuY2UudHJhY2VzKSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZWYxLmZvckVhY2goZnVuY3Rpb24odHJhY2UpIHtcbiAgICAgICAgICAgICAgdmFyIF90cmFjZSwgYXBwcm92ZXMsIHJlZjI7XG4gICAgICAgICAgICAgIF90cmFjZSA9IF8uY2xvbmUodHJhY2UpO1xuICAgICAgICAgICAgICBhcHByb3ZlcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICAgICAgICBpZiAodHJhY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICgocmVmMiA9IHRyYWNlLmFwcHJvdmVzKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICByZWYyLmZvckVhY2goZnVuY3Rpb24oYXBwcm92ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwcm92ZS50eXBlICE9PSAnY2MnIHx8IGFwcHJvdmUudXNlciA9PT0gc2VsZi51c2VySWQgfHwgYXBwcm92ZS5oYW5kbGVyID09PSBzZWxmLnVzZXJJZCB8fCAoIV8uaXNFbXB0eShhcHByb3ZlLnNpZ25fZmllbGRfY29kZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcHJvdmVzLnB1c2goYXBwcm92ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBfdHJhY2UuYXBwcm92ZXMgPSBhcHByb3ZlcztcbiAgICAgICAgICAgICAgcmV0dXJuIHRyYWNlcy5wdXNoKF90cmFjZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UudHJhY2VzID0gdHJhY2VzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG4gIG5lZWRDaGFuZ2UgPSBmdW5jdGlvbihjaGFuZ2VGaWVsZHMpIHtcbiAgICB2YXIgX2NoYW5nZSwgX3JldjtcbiAgICBpZiAoY2hhbmdlRmllbGRzKSB7XG4gICAgICBfY2hhbmdlID0gZmFsc2U7XG4gICAgICBfcmV2ID0gXy5maW5kKHRyaWdnZXJDaGFuZ2VGaWVsZHMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgICB2YXIgX2tleSwgX215X2FwcHJvdmVfbW9kaWZpZWRzO1xuICAgICAgICBfa2V5ID0ga2V5O1xuICAgICAgICBpZiAoa2V5ID09PSAnX215X2FwcHJvdmVfcmVhZF9kYXRlcycpIHtcbiAgICAgICAgICBfa2V5ID0gJ3RyYWNlcyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaGFzKGNoYW5nZUZpZWxkcywgX2tleSkpIHtcbiAgICAgICAgICBpZiAoa2V5ID09PSAnX215X2FwcHJvdmVfcmVhZF9kYXRlcycpIHtcbiAgICAgICAgICAgIF9teV9hcHByb3ZlX21vZGlmaWVkcyA9IGdldE15YXBwcm92ZU1vZGlmaWVkKGNoYW5nZUZpZWxkcy50cmFjZXMpO1xuICAgICAgICAgICAgcmV0dXJuICFfLmlzRXF1YWwodHJpZ2dlckNoYW5nZUZpZWxkc1ZhbHVlc1trZXldLCBfbXlfYXBwcm92ZV9tb2RpZmllZHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gIV8uaXNFcXVhbCh0cmlnZ2VyQ2hhbmdlRmllbGRzVmFsdWVzW2tleV0sIGNoYW5nZUZpZWxkc1trZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKF9yZXYpIHtcbiAgICAgICAgX2NoYW5nZSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gX2NoYW5nZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHtcbiAgICBfaWQ6IGluc3RhbmNlSWRcbiAgfSkub2JzZXJ2ZUNoYW5nZXMoe1xuICAgIGNoYW5nZWQ6IGZ1bmN0aW9uKGlkLCBmaWVsZHMpIHtcbiAgICAgIGlmIChib3ggIT09ICdpbmJveCcgfHwgbmVlZENoYW5nZShmaWVsZHMpKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNoYW5nZWQoXCJpbnN0YW5jZXNcIiwgaWQsIGdldE1pbmlJbnN0YW5jZShpZCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVtb3ZlZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgIHJldHVybiBzZWxmLnJlbW92ZWQoXCJpbnN0YW5jZXNcIiwgaWQpO1xuICAgIH1cbiAgfSk7XG4gIGluc3RhbmNlID0gZ2V0TWluaUluc3RhbmNlKGluc3RhbmNlSWQpO1xuICBzZWxmLmFkZGVkKFwiaW5zdGFuY2VzXCIsIGluc3RhbmNlICE9IG51bGwgPyBpbnN0YW5jZS5faWQgOiB2b2lkIDAsIGluc3RhbmNlKTtcbiAgc2VsZi5yZWFkeSgpO1xuICByZXR1cm4gc2VsZi5vblN0b3AoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhhbmRsZS5zdG9wKCk7XG4gIH0pO1xufSk7XG5cbk1ldGVvci5wdWJsaXNoKCdpbnN0YW5jZV90cmFjZXMnLCBmdW5jdGlvbihpbnN0YW5jZUlkKSB7XG4gIHZhciBnZXRJbnN0YW5jZVRyYWNlcywgaGFuZGxlLCBzZWxmO1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBpZiAoIWluc3RhbmNlSWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIHNlbGYgPSB0aGlzO1xuICBnZXRJbnN0YW5jZVRyYWNlcyA9IGZ1bmN0aW9uKF9pbnNJZCkge1xuICAgIHJldHVybiBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IF9pbnNJZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBfaWQ6IDEsXG4gICAgICAgIHRyYWNlczogMVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgX2lkOiBpbnN0YW5jZUlkXG4gIH0pLm9ic2VydmVDaGFuZ2VzKHtcbiAgICBjaGFuZ2VkOiBmdW5jdGlvbihpZCkge1xuICAgICAgcmV0dXJuIHNlbGYuY2hhbmdlZChcImluc3RhbmNlX3RyYWNlc1wiLCBpbnN0YW5jZUlkLCBnZXRJbnN0YW5jZVRyYWNlcyhpbnN0YW5jZUlkKSk7XG4gICAgfVxuICB9KTtcbiAgc2VsZi5hZGRlZChcImluc3RhbmNlX3RyYWNlc1wiLCBpbnN0YW5jZUlkLCBnZXRJbnN0YW5jZVRyYWNlcyhpbnN0YW5jZUlkKSk7XG4gIHNlbGYucmVhZHkoKTtcbiAgcmV0dXJuIHNlbGYub25TdG9wKGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBoYW5kbGUuc3RvcCgpO1xuICB9KTtcbn0pO1xuIiwiXG5cdE1ldGVvci5wdWJsaXNoICdpbnN0YW5jZXNfbGlzdCcsIChzcGFjZUlkLCBib3gsIGZsb3dJZCktPlxuXG5cdFx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cdFx0XG5cdFx0dW5sZXNzIHNwYWNlSWRcblx0XHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRcdHF1ZXJ5ID0ge3NwYWNlOiBzcGFjZUlkfVxuXHRcdGlmIGJveCA9PSBcImluYm94XCJcblx0XHRcdHF1ZXJ5LmluYm94X3VzZXJzID0gdGhpcy51c2VySWQ7XG5cdFx0ZWxzZSBpZiBib3ggPT0gXCJvdXRib3hcIlxuXHRcdFx0cXVlcnkub3V0Ym94X3VzZXJzID0gdGhpcy51c2VySWQ7XG5cdFx0ZWxzZSBpZiBib3ggPT0gXCJkcmFmdFwiXG5cdFx0XHRxdWVyeS5zdWJtaXR0ZXIgPSB0aGlzLnVzZXJJZDtcblx0XHRcdHF1ZXJ5LnN0YXRlID0gXCJkcmFmdFwiXG5cdFx0ZWxzZSBpZiBib3ggPT0gXCJwZW5kaW5nXCJcblx0XHRcdHF1ZXJ5LnN1Ym1pdHRlciA9IHRoaXMudXNlcklkO1xuXHRcdFx0cXVlcnkuc3RhdGUgPSBcInBlbmRpbmdcIlxuXHRcdGVsc2UgaWYgYm94ID09IFwiY29tcGxldGVkXCJcblx0XHRcdHF1ZXJ5LnN1Ym1pdHRlciA9IHRoaXMudXNlcklkO1xuXHRcdFx0cXVlcnkuc3RhdGUgPSBcImNvbXBsZXRlZFwiXG5cdFx0ZWxzZSBpZiBib3ggPT0gXCJtb25pdG9yXCJcblx0XHRcdHF1ZXJ5LmZsb3cgPSBmbG93SWQ7XG5cdFx0XHRxdWVyeS5zdGF0ZSA9IHskaW46IFtcInBlbmRpbmdcIixcImNvbXBsZXRlZFwiXX07XG5cdFx0ZWxzZVxuXHRcdFx0cXVlcnkuc3RhdGUgPSBcIm5vbmVcIlxuXG5cdFx0cmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7ZmllbGRzOiB7bmFtZToxLCBjcmVhdGVkOjEsIGZvcm06MSwgZmxvdzogMSwgc3BhY2U6MSwgbW9kaWZpZWQ6MSwgYXBwbGljYW50OiAxLCBpc19hcmNoaXZlZDoxLCBmb3JtX3ZlcnNpb246IDEsIGZsb3dfdmVyc2lvbjogMX19KVxuXG4iLCJNZXRlb3IucHVibGlzaCgnaW5zdGFuY2VzX2xpc3QnLCBmdW5jdGlvbihzcGFjZUlkLCBib3gsIGZsb3dJZCkge1xuICB2YXIgcXVlcnk7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghc3BhY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcXVlcnkgPSB7XG4gICAgc3BhY2U6IHNwYWNlSWRcbiAgfTtcbiAgaWYgKGJveCA9PT0gXCJpbmJveFwiKSB7XG4gICAgcXVlcnkuaW5ib3hfdXNlcnMgPSB0aGlzLnVzZXJJZDtcbiAgfSBlbHNlIGlmIChib3ggPT09IFwib3V0Ym94XCIpIHtcbiAgICBxdWVyeS5vdXRib3hfdXNlcnMgPSB0aGlzLnVzZXJJZDtcbiAgfSBlbHNlIGlmIChib3ggPT09IFwiZHJhZnRcIikge1xuICAgIHF1ZXJ5LnN1Ym1pdHRlciA9IHRoaXMudXNlcklkO1xuICAgIHF1ZXJ5LnN0YXRlID0gXCJkcmFmdFwiO1xuICB9IGVsc2UgaWYgKGJveCA9PT0gXCJwZW5kaW5nXCIpIHtcbiAgICBxdWVyeS5zdWJtaXR0ZXIgPSB0aGlzLnVzZXJJZDtcbiAgICBxdWVyeS5zdGF0ZSA9IFwicGVuZGluZ1wiO1xuICB9IGVsc2UgaWYgKGJveCA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgIHF1ZXJ5LnN1Ym1pdHRlciA9IHRoaXMudXNlcklkO1xuICAgIHF1ZXJ5LnN0YXRlID0gXCJjb21wbGV0ZWRcIjtcbiAgfSBlbHNlIGlmIChib3ggPT09IFwibW9uaXRvclwiKSB7XG4gICAgcXVlcnkuZmxvdyA9IGZsb3dJZDtcbiAgICBxdWVyeS5zdGF0ZSA9IHtcbiAgICAgICRpbjogW1wicGVuZGluZ1wiLCBcImNvbXBsZXRlZFwiXVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcXVlcnkuc3RhdGUgPSBcIm5vbmVcIjtcbiAgfVxuICByZXR1cm4gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIG5hbWU6IDEsXG4gICAgICBjcmVhdGVkOiAxLFxuICAgICAgZm9ybTogMSxcbiAgICAgIGZsb3c6IDEsXG4gICAgICBzcGFjZTogMSxcbiAgICAgIG1vZGlmaWVkOiAxLFxuICAgICAgYXBwbGljYW50OiAxLFxuICAgICAgaXNfYXJjaGl2ZWQ6IDEsXG4gICAgICBmb3JtX3ZlcnNpb246IDEsXG4gICAgICBmbG93X3ZlcnNpb246IDFcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJsYXN0RmluaXNoZWRBcHByb3ZlQWdncmVnYXRlID0gKGluc3RhbmNlaWQsIHVzZXJJZCwgZGF0YU1hcCwgY2FsbGJhY2spLT5cblx0b3BlcmF0aW9uID0gW3tcblx0XHRcIiRtYXRjaFwiOiB7XG5cdFx0XHRcIl9pZFwiOiBpbnN0YW5jZWlkXG5cdFx0fVxuXHR9LCB7XCIkcHJvamVjdFwiOiB7XCJuYW1lXCI6IDEsIFwiX2FwcHJvdmVcIjogXCIkdHJhY2VzLmFwcHJvdmVzXCJ9fSwge1wiJHVud2luZFwiOiBcIiRfYXBwcm92ZVwifSwge1wiJHVud2luZFwiOiBcIiRfYXBwcm92ZVwifSxcblx0XHR7XCIkbWF0Y2hcIjoge1wiX2FwcHJvdmUuaXNfZmluaXNoZWRcIjogdHJ1ZSwgJG9yOlt7XCJfYXBwcm92ZS5oYW5kbGVyXCI6IHVzZXJJZH0se1wiX2FwcHJvdmUudXNlclwiOiB1c2VySWR9XX19LFxuXHRcdHtcIiRncm91cFwiOiB7XCJfaWRcIjogXCIkX2lkXCIsIFwiZmluaXNoX2RhdGVcIjoge1wiJGxhc3RcIjogXCIkX2FwcHJvdmUuZmluaXNoX2RhdGVcIn19fVxuXHRdXG5cblx0ZGIuaW5zdGFuY2VzLnJhd0NvbGxlY3Rpb24oKS5hZ2dyZWdhdGUob3BlcmF0aW9uKS50b0FycmF5IChlcnIsIGRhdGEpLT5cblx0XHRpZiBlcnJcblx0XHRcdHRocm93IG5ldyBFcnJvcihlcnIpXG5cblx0XHRkYXRhLmZvckVhY2ggKGRvYykgLT5cblx0XHRcdGRhdGFNYXAucHVzaCBkb2NcblxuXHRcdGlmIGNhbGxiYWNrICYmIF8uaXNGdW5jdGlvbihjYWxsYmFjaylcblx0XHRcdGNhbGxiYWNrKClcblx0XHRyZXR1cm5cblxuYXN5bmNMYXN0RmluaXNoZWRBcHByb3ZlID0gTWV0ZW9yLndyYXBBc3luYyhsYXN0RmluaXNoZWRBcHByb3ZlQWdncmVnYXRlKVxuXG5NZXRlb3IucHVibGlzaCBcImluc3RhbmNlX3RhYnVsYXJcIiwgKHRhYmxlTmFtZSwgaWRzLCBmaWVsZHMpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdGNoZWNrKHRhYmxlTmFtZSwgU3RyaW5nKTtcblxuXHRjaGVjayhpZHMsIEFycmF5KTtcblxuXHRjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpXG5cblx0ZmllbGRzLmNjX3VzZXJzID0gMVxuXG5cdHNlbGYgPSB0aGlzO1xuXG5cdGdldE15TGFzdEZpbmlzaGVkQXBwcm92ZSA9ICh1c2VySWQsIGluc3RhbmNlSWQpLT5cblx0XHRkYXRhID0gW11cblx0XHRhc3luY0xhc3RGaW5pc2hlZEFwcHJvdmUoaW5zdGFuY2VJZCwgdXNlcklkLCBkYXRhKVxuXHRcdGlmIGRhdGEubGVuZ3RoID4gMFxuXHRcdFx0cmV0dXJuIGRhdGFbMF1cblxuXG5cdGdldE15QXBwcm92ZSA9ICh1c2VySWQsIGluc3RhbmNlSWQpLT5cblx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGluc3RhbmNlSWR9LCB7ZmllbGRzOiB7dHJhY2VzOiAxfX0pXG5cdFx0bXlBcHByb3ZlID0gbnVsbFxuXG5cdFx0aWYgIWluc3RhbmNlXG5cdFx0XHRyZXR1cm5cblxuXHRcdGlmICFpbnN0YW5jZS50cmFjZXMgfHwgaW5zdGFuY2UudHJhY2VzLmxlbmd0aCA8IDFcblx0XHRcdHJldHVyblxuXG5cdFx0bm90RmluaXNoZWRUcmFjZXMgPSBpbnN0YW5jZS50cmFjZXMuZmlsdGVyUHJvcGVydHkoXCJpc19maW5pc2hlZFwiLCBmYWxzZSlcblxuXHRcdGlmIG5vdEZpbmlzaGVkVHJhY2VzLmxlbmd0aCA+IDBcblx0XHRcdGFwcHJvdmVzID0gbm90RmluaXNoZWRUcmFjZXNbMF0uYXBwcm92ZXMuZmlsdGVyUHJvcGVydHkoXCJpc19maW5pc2hlZFwiLCBmYWxzZSkuZmlsdGVyUHJvcGVydHkoXCJoYW5kbGVyXCIsIHVzZXJJZCk7XG5cblx0XHRcdGlmIGFwcHJvdmVzLmxlbmd0aCA+IDBcblx0XHRcdFx0YXBwcm92ZSA9IGFwcHJvdmVzWzBdXG5cdFx0XHRcdG15QXBwcm92ZSA9IHtcblx0XHRcdFx0XHRpZDogYXBwcm92ZS5faWQsXG5cdFx0XHRcdFx0aW5zdGFuY2U6IGFwcHJvdmUuaW5zdGFuY2UsXG5cdFx0XHRcdFx0dHJhY2U6IGFwcHJvdmUudHJhY2UsXG5cdFx0XHRcdFx0aXNfcmVhZDogYXBwcm92ZS5pc19yZWFkLFxuXHRcdFx0XHRcdHN0YXJ0X2RhdGU6IGFwcHJvdmUuc3RhcnRfZGF0ZVxuXHRcdFx0XHRcdGFnZW50OiBhcHByb3ZlLmFnZW50XG5cdFx0XHRcdFx0dXNlcl9uYW1lOiBhcHByb3ZlLnVzZXJfbmFtZVxuXHRcdFx0XHR9XG5cblx0XHRpZiAhbXlBcHByb3ZlXG5cdFx0XHRpc19yZWFkID0gZmFsc2Vcblx0XHRcdGluc3RhbmNlLnRyYWNlcy5mb3JFYWNoICh0cmFjZSkgLT5cblx0XHRcdFx0dHJhY2U/LmFwcHJvdmVzPy5mb3JFYWNoIChhcHByb3ZlKSAtPlxuXHRcdFx0XHRcdGlmIGFwcHJvdmUudHlwZSA9PSAnY2MnIGFuZCBhcHByb3ZlLnVzZXIgPT0gdXNlcklkIGFuZCBhcHByb3ZlLmlzX2ZpbmlzaGVkID09IGZhbHNlXG5cdFx0XHRcdFx0XHRpZiBhcHByb3ZlLmlzX3JlYWRcblx0XHRcdFx0XHRcdFx0aXNfcmVhZCA9IHRydWVcblx0XHRcdFx0XHRcdG15QXBwcm92ZSA9IHtpZDogYXBwcm92ZS5faWQsIGlzX3JlYWQ6IGlzX3JlYWQsIHN0YXJ0X2RhdGU6IGFwcHJvdmUuc3RhcnRfZGF0ZSwgYWdlbnQ6IGFwcHJvdmUuYWdlbnQsIHVzZXJfbmFtZTogYXBwcm92ZS51c2VyX25hbWV9XG5cblx0XHRyZXR1cm4gbXlBcHByb3ZlXG5cblx0Z2V0U3RlcEN1cnJlbnROYW1lID0gKGluc3RhbmNlSWQpIC0+XG5cdFx0aW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpbnN0YW5jZUlkfSwge2ZpZWxkczoge1widHJhY2VzLm5hbWVcIjogMSwgXCJ0cmFjZXNcIjogeyRzbGljZTogLTF9fX0pXG5cdFx0aWYgaW5zdGFuY2Vcblx0XHRcdHN0ZXBDdXJyZW50TmFtZSA9IGluc3RhbmNlLnRyYWNlcz9bMF0/Lm5hbWVcblxuXHRcdHJldHVybiBzdGVwQ3VycmVudE5hbWVcblxuXHRoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZCh7X2lkOiB7JGluOiBpZHN9fSwge2ZpZWxkczoge3RyYWNlczogMH19KS5vYnNlcnZlQ2hhbmdlcyB7XG5cdFx0Y2hhbmdlZDogKGlkKS0+XG5cdFx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGlkfSwge2ZpZWxkczogZmllbGRzfSlcblx0XHRcdHJldHVybiBpZiBub3QgaW5zdGFuY2Vcblx0XHRcdG15QXBwcm92ZSA9IGdldE15QXBwcm92ZShzZWxmLnVzZXJJZCwgaWQpXG5cdFx0XHRteUxhc3RGaW5pc2hlZEFwcHJvdmUgPSBnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUoc2VsZi51c2VySWQsIGlkKVxuXHRcdFx0aWYgbXlBcHByb3ZlXG5cdFx0XHRcdGluc3RhbmNlLmlzX3JlYWQgPSBteUFwcHJvdmUuaXNfcmVhZFxuXHRcdFx0XHRpbnN0YW5jZS5zdGFydF9kYXRlID0gbXlBcHByb3ZlLnN0YXJ0X2RhdGVcblx0XHRcdFx0aWYgbXlBcHByb3ZlLmFnZW50XG5cdFx0XHRcdFx0aW5zdGFuY2UuYWdlbnRfdXNlcl9uYW1lID0gbXlBcHByb3ZlLnVzZXJfbmFtZVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRpbnN0YW5jZS5pc19yZWFkID0gdHJ1ZVxuXG5cdFx0XHRpZiBteUxhc3RGaW5pc2hlZEFwcHJvdmVcblx0XHRcdFx0aW5zdGFuY2UubXlfZmluaXNoX2RhdGUgPSBteUxhc3RGaW5pc2hlZEFwcHJvdmUuZmluaXNoX2RhdGVcblxuXHRcdFx0aW5zdGFuY2UuaXNfY2MgPSBpbnN0YW5jZS5jY191c2Vycz8uaW5jbHVkZXMoc2VsZi51c2VySWQpIHx8IGZhbHNlXG5cdFx0XHRpbnN0YW5jZS5jY19jb3VudCA9IGluc3RhbmNlLmNjX3VzZXJzPy5sZW5ndGggfHwgMFxuXHRcdFx0ZGVsZXRlIGluc3RhbmNlLmNjX3VzZXJzXG5cdFx0XHR0cnlcblx0XHRcdFx0c2VsZi5jaGFuZ2VkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSk7XG5cdFx0XHRjYXRjaCBlcnJvclxuXHRcdFx0XHRjb25zb2xlLmxvZygnaW5zdGFuY2Ugb2JzZXJ2ZUNoYW5nZXMgZXJyb3I6ICcsIGVycm9yLm1lc3NhZ2UpO1xuXHRcdFx0XHRjb25zb2xlLmxvZygnc2VsZi51c2VySWQ6ICcsIHNlbGYudXNlcklkKTtcblx0XHRcdFx0Y29uc29sZS5sb2coJ3RhYmxlTmFtZTogJywgdGFibGVOYW1lKTtcblx0XHRcdFx0Y29uc29sZS5sb2coJ2lkczogJywgSlNPTi5zdHJpbmdpZnkoaWRzKSk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCdteUFwcHJvdmU6ICcsIEpTT04uc3RyaW5naWZ5KG15QXBwcm92ZSkpO1xuXHRcdHJlbW92ZWQ6IChpZCktPlxuXHRcdFx0c2VsZi5yZW1vdmVkKFwiaW5zdGFuY2VzXCIsIGlkKTtcblx0fVxuXG5cdGlkcy5mb3JFYWNoIChpZCktPlxuXHRcdGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaWR9LCB7ZmllbGRzOiBmaWVsZHN9KVxuXHRcdHJldHVybiBpZiBub3QgaW5zdGFuY2Vcblx0XHRteUFwcHJvdmUgPSBnZXRNeUFwcHJvdmUoc2VsZi51c2VySWQsIGlkKVxuXHRcdG15TGFzdEZpbmlzaGVkQXBwcm92ZSA9IGdldE15TGFzdEZpbmlzaGVkQXBwcm92ZShzZWxmLnVzZXJJZCwgaWQpXG5cdFx0aWYgbXlBcHByb3ZlXG5cdFx0XHRpbnN0YW5jZS5pc19yZWFkID0gbXlBcHByb3ZlLmlzX3JlYWRcblx0XHRcdGluc3RhbmNlLnN0YXJ0X2RhdGUgPSBteUFwcHJvdmUuc3RhcnRfZGF0ZVxuXHRcdFx0aWYgbXlBcHByb3ZlLmFnZW50XG5cdFx0XHRcdFx0aW5zdGFuY2UuYWdlbnRfdXNlcl9uYW1lID0gbXlBcHByb3ZlLnVzZXJfbmFtZVxuXHRcdGVsc2Vcblx0XHRcdGluc3RhbmNlLmlzX3JlYWQgPSB0cnVlXG5cblx0XHRpZiBteUxhc3RGaW5pc2hlZEFwcHJvdmVcblx0XHRcdGluc3RhbmNlLm15X2ZpbmlzaF9kYXRlID0gbXlMYXN0RmluaXNoZWRBcHByb3ZlLmZpbmlzaF9kYXRlXG5cblx0XHRpbnN0YW5jZS5pc19jYyA9IGluc3RhbmNlLmNjX3VzZXJzPy5pbmNsdWRlcyhzZWxmLnVzZXJJZCkgfHwgZmFsc2Vcblx0XHRpbnN0YW5jZS5jY19jb3VudCA9IGluc3RhbmNlLmNjX3VzZXJzPy5sZW5ndGggfHwgMFxuXHRcdGRlbGV0ZSBpbnN0YW5jZS5jY191c2Vyc1xuXHRcdHNlbGYuYWRkZWQoXCJpbnN0YW5jZXNcIiwgaWQsIGluc3RhbmNlKTtcblxuXHRzZWxmLnJlYWR5KCk7XG5cdHNlbGYub25TdG9wICgpLT5cblx0XHRoYW5kbGUuc3RvcCgpXG5cbk1ldGVvci5wdWJsaXNoIFwiaW5zdGFuY2VfdGFza3NfdGFidWxhclwiLCAodGFidWxhck5hbWUsIGlkcywgZmllbGRzKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRjaGVjayh0YWJ1bGFyTmFtZSwgU3RyaW5nKTtcblxuXHRjaGVjayhpZHMsIEFycmF5KTtcblxuXHRjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpXG5cblx0IyBjb25zb2xlLmxvZygndGFidWxhck5hbWU6ICcsIHRhYnVsYXJOYW1lKTtcblx0IyBjb25zb2xlLmxvZygnaWRzOiAnLCBKU09OLnN0cmluZ2lmeShpZHMpKTtcblx0IyBjb25zb2xlLmxvZygnZmllbGRzOiAnLCBKU09OLnN0cmluZ2lmeShmaWVsZHMpKTtcblxuXHRkYi5pbnN0YW5jZV90YXNrcy5maW5kKHtcblx0XHRfaWQ6IHtcblx0XHRcdCRpbjogaWRzXG5cdFx0fVxuXHR9LCB7XG5cdFx0ZmllbGRzOiBmaWVsZHNcblx0fSlcblxuTWV0ZW9yLnB1Ymxpc2ggXCJpbnN0YW5jZXNfdGFidWxhclwiLCAodGFidWxhck5hbWUsIGlkcywgZmllbGRzKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRjaGVjayh0YWJ1bGFyTmFtZSwgU3RyaW5nKTtcblxuXHRjaGVjayhpZHMsIEFycmF5KTtcblxuXHRjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpXG5cblx0IyBjb25zb2xlLmxvZygndGFidWxhck5hbWU6ICcsIHRhYnVsYXJOYW1lKTtcblx0IyBjb25zb2xlLmxvZygnaWRzOiAnLCBKU09OLnN0cmluZ2lmeShpZHMpKTtcblx0IyBjb25zb2xlLmxvZygnZmllbGRzOiAnLCBKU09OLnN0cmluZ2lmeShmaWVsZHMpKTtcblxuXHRkYi5pbnN0YW5jZXMuZmluZCh7XG5cdFx0X2lkOiB7XG5cdFx0XHQkaW46IGlkc1xuXHRcdH1cblx0fSwge1xuXHRcdGZpZWxkczogZmllbGRzXG5cdH0pIiwidmFyIGFzeW5jTGFzdEZpbmlzaGVkQXBwcm92ZSwgbGFzdEZpbmlzaGVkQXBwcm92ZUFnZ3JlZ2F0ZTtcblxubGFzdEZpbmlzaGVkQXBwcm92ZUFnZ3JlZ2F0ZSA9IGZ1bmN0aW9uKGluc3RhbmNlaWQsIHVzZXJJZCwgZGF0YU1hcCwgY2FsbGJhY2spIHtcbiAgdmFyIG9wZXJhdGlvbjtcbiAgb3BlcmF0aW9uID0gW1xuICAgIHtcbiAgICAgIFwiJG1hdGNoXCI6IHtcbiAgICAgICAgXCJfaWRcIjogaW5zdGFuY2VpZFxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIFwiJHByb2plY3RcIjoge1xuICAgICAgICBcIm5hbWVcIjogMSxcbiAgICAgICAgXCJfYXBwcm92ZVwiOiBcIiR0cmFjZXMuYXBwcm92ZXNcIlxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIFwiJHVud2luZFwiOiBcIiRfYXBwcm92ZVwiXG4gICAgfSwge1xuICAgICAgXCIkdW53aW5kXCI6IFwiJF9hcHByb3ZlXCJcbiAgICB9LCB7XG4gICAgICBcIiRtYXRjaFwiOiB7XG4gICAgICAgIFwiX2FwcHJvdmUuaXNfZmluaXNoZWRcIjogdHJ1ZSxcbiAgICAgICAgJG9yOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJfYXBwcm92ZS5oYW5kbGVyXCI6IHVzZXJJZFxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIFwiX2FwcHJvdmUudXNlclwiOiB1c2VySWRcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBcIiRncm91cFwiOiB7XG4gICAgICAgIFwiX2lkXCI6IFwiJF9pZFwiLFxuICAgICAgICBcImZpbmlzaF9kYXRlXCI6IHtcbiAgICAgICAgICBcIiRsYXN0XCI6IFwiJF9hcHByb3ZlLmZpbmlzaF9kYXRlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgXTtcbiAgcmV0dXJuIGRiLmluc3RhbmNlcy5yYXdDb2xsZWN0aW9uKCkuYWdncmVnYXRlKG9wZXJhdGlvbikudG9BcnJheShmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKTtcbiAgICB9XG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGRvYykge1xuICAgICAgcmV0dXJuIGRhdGFNYXAucHVzaChkb2MpO1xuICAgIH0pO1xuICAgIGlmIChjYWxsYmFjayAmJiBfLmlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5hc3luY0xhc3RGaW5pc2hlZEFwcHJvdmUgPSBNZXRlb3Iud3JhcEFzeW5jKGxhc3RGaW5pc2hlZEFwcHJvdmVBZ2dyZWdhdGUpO1xuXG5NZXRlb3IucHVibGlzaChcImluc3RhbmNlX3RhYnVsYXJcIiwgZnVuY3Rpb24odGFibGVOYW1lLCBpZHMsIGZpZWxkcykge1xuICB2YXIgZ2V0TXlBcHByb3ZlLCBnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUsIGdldFN0ZXBDdXJyZW50TmFtZSwgaGFuZGxlLCBzZWxmO1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBjaGVjayh0YWJsZU5hbWUsIFN0cmluZyk7XG4gIGNoZWNrKGlkcywgQXJyYXkpO1xuICBjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpO1xuICBmaWVsZHMuY2NfdXNlcnMgPSAxO1xuICBzZWxmID0gdGhpcztcbiAgZ2V0TXlMYXN0RmluaXNoZWRBcHByb3ZlID0gZnVuY3Rpb24odXNlcklkLCBpbnN0YW5jZUlkKSB7XG4gICAgdmFyIGRhdGE7XG4gICAgZGF0YSA9IFtdO1xuICAgIGFzeW5jTGFzdEZpbmlzaGVkQXBwcm92ZShpbnN0YW5jZUlkLCB1c2VySWQsIGRhdGEpO1xuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBkYXRhWzBdO1xuICAgIH1cbiAgfTtcbiAgZ2V0TXlBcHByb3ZlID0gZnVuY3Rpb24odXNlcklkLCBpbnN0YW5jZUlkKSB7XG4gICAgdmFyIGFwcHJvdmUsIGFwcHJvdmVzLCBpbnN0YW5jZSwgaXNfcmVhZCwgbXlBcHByb3ZlLCBub3RGaW5pc2hlZFRyYWNlcztcbiAgICBpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtcbiAgICAgIF9pZDogaW5zdGFuY2VJZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICB0cmFjZXM6IDFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBteUFwcHJvdmUgPSBudWxsO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpbnN0YW5jZS50cmFjZXMgfHwgaW5zdGFuY2UudHJhY2VzLmxlbmd0aCA8IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbm90RmluaXNoZWRUcmFjZXMgPSBpbnN0YW5jZS50cmFjZXMuZmlsdGVyUHJvcGVydHkoXCJpc19maW5pc2hlZFwiLCBmYWxzZSk7XG4gICAgaWYgKG5vdEZpbmlzaGVkVHJhY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFwcHJvdmVzID0gbm90RmluaXNoZWRUcmFjZXNbMF0uYXBwcm92ZXMuZmlsdGVyUHJvcGVydHkoXCJpc19maW5pc2hlZFwiLCBmYWxzZSkuZmlsdGVyUHJvcGVydHkoXCJoYW5kbGVyXCIsIHVzZXJJZCk7XG4gICAgICBpZiAoYXBwcm92ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBhcHByb3ZlID0gYXBwcm92ZXNbMF07XG4gICAgICAgIG15QXBwcm92ZSA9IHtcbiAgICAgICAgICBpZDogYXBwcm92ZS5faWQsXG4gICAgICAgICAgaW5zdGFuY2U6IGFwcHJvdmUuaW5zdGFuY2UsXG4gICAgICAgICAgdHJhY2U6IGFwcHJvdmUudHJhY2UsXG4gICAgICAgICAgaXNfcmVhZDogYXBwcm92ZS5pc19yZWFkLFxuICAgICAgICAgIHN0YXJ0X2RhdGU6IGFwcHJvdmUuc3RhcnRfZGF0ZSxcbiAgICAgICAgICBhZ2VudDogYXBwcm92ZS5hZ2VudCxcbiAgICAgICAgICB1c2VyX25hbWU6IGFwcHJvdmUudXNlcl9uYW1lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbXlBcHByb3ZlKSB7XG4gICAgICBpc19yZWFkID0gZmFsc2U7XG4gICAgICBpbnN0YW5jZS50cmFjZXMuZm9yRWFjaChmdW5jdGlvbih0cmFjZSkge1xuICAgICAgICB2YXIgcmVmO1xuICAgICAgICByZXR1cm4gdHJhY2UgIT0gbnVsbCA/IChyZWYgPSB0cmFjZS5hcHByb3ZlcykgIT0gbnVsbCA/IHJlZi5mb3JFYWNoKGZ1bmN0aW9uKGFwcHJvdmUpIHtcbiAgICAgICAgICBpZiAoYXBwcm92ZS50eXBlID09PSAnY2MnICYmIGFwcHJvdmUudXNlciA9PT0gdXNlcklkICYmIGFwcHJvdmUuaXNfZmluaXNoZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoYXBwcm92ZS5pc19yZWFkKSB7XG4gICAgICAgICAgICAgIGlzX3JlYWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG15QXBwcm92ZSA9IHtcbiAgICAgICAgICAgICAgaWQ6IGFwcHJvdmUuX2lkLFxuICAgICAgICAgICAgICBpc19yZWFkOiBpc19yZWFkLFxuICAgICAgICAgICAgICBzdGFydF9kYXRlOiBhcHByb3ZlLnN0YXJ0X2RhdGUsXG4gICAgICAgICAgICAgIGFnZW50OiBhcHByb3ZlLmFnZW50LFxuICAgICAgICAgICAgICB1c2VyX25hbWU6IGFwcHJvdmUudXNlcl9uYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG15QXBwcm92ZTtcbiAgfTtcbiAgZ2V0U3RlcEN1cnJlbnROYW1lID0gZnVuY3Rpb24oaW5zdGFuY2VJZCkge1xuICAgIHZhciBpbnN0YW5jZSwgcmVmLCByZWYxLCBzdGVwQ3VycmVudE5hbWU7XG4gICAgaW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGluc3RhbmNlSWRcbiAgICB9LCB7XG4gICAgICBmaWVsZHM6IHtcbiAgICAgICAgXCJ0cmFjZXMubmFtZVwiOiAxLFxuICAgICAgICBcInRyYWNlc1wiOiB7XG4gICAgICAgICAgJHNsaWNlOiAtMVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICBzdGVwQ3VycmVudE5hbWUgPSAocmVmID0gaW5zdGFuY2UudHJhY2VzKSAhPSBudWxsID8gKHJlZjEgPSByZWZbMF0pICE9IG51bGwgPyByZWYxLm5hbWUgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgfVxuICAgIHJldHVybiBzdGVwQ3VycmVudE5hbWU7XG4gIH07XG4gIGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHtcbiAgICBfaWQ6IHtcbiAgICAgICRpbjogaWRzXG4gICAgfVxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICB0cmFjZXM6IDBcbiAgICB9XG4gIH0pLm9ic2VydmVDaGFuZ2VzKHtcbiAgICBjaGFuZ2VkOiBmdW5jdGlvbihpZCkge1xuICAgICAgdmFyIGVycm9yLCBpbnN0YW5jZSwgbXlBcHByb3ZlLCBteUxhc3RGaW5pc2hlZEFwcHJvdmUsIHJlZiwgcmVmMTtcbiAgICAgIGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe1xuICAgICAgICBfaWQ6IGlkXG4gICAgICB9LCB7XG4gICAgICAgIGZpZWxkczogZmllbGRzXG4gICAgICB9KTtcbiAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbXlBcHByb3ZlID0gZ2V0TXlBcHByb3ZlKHNlbGYudXNlcklkLCBpZCk7XG4gICAgICBteUxhc3RGaW5pc2hlZEFwcHJvdmUgPSBnZXRNeUxhc3RGaW5pc2hlZEFwcHJvdmUoc2VsZi51c2VySWQsIGlkKTtcbiAgICAgIGlmIChteUFwcHJvdmUpIHtcbiAgICAgICAgaW5zdGFuY2UuaXNfcmVhZCA9IG15QXBwcm92ZS5pc19yZWFkO1xuICAgICAgICBpbnN0YW5jZS5zdGFydF9kYXRlID0gbXlBcHByb3ZlLnN0YXJ0X2RhdGU7XG4gICAgICAgIGlmIChteUFwcHJvdmUuYWdlbnQpIHtcbiAgICAgICAgICBpbnN0YW5jZS5hZ2VudF91c2VyX25hbWUgPSBteUFwcHJvdmUudXNlcl9uYW1lO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnN0YW5jZS5pc19yZWFkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChteUxhc3RGaW5pc2hlZEFwcHJvdmUpIHtcbiAgICAgICAgaW5zdGFuY2UubXlfZmluaXNoX2RhdGUgPSBteUxhc3RGaW5pc2hlZEFwcHJvdmUuZmluaXNoX2RhdGU7XG4gICAgICB9XG4gICAgICBpbnN0YW5jZS5pc19jYyA9ICgocmVmID0gaW5zdGFuY2UuY2NfdXNlcnMpICE9IG51bGwgPyByZWYuaW5jbHVkZXMoc2VsZi51c2VySWQpIDogdm9pZCAwKSB8fCBmYWxzZTtcbiAgICAgIGluc3RhbmNlLmNjX2NvdW50ID0gKChyZWYxID0gaW5zdGFuY2UuY2NfdXNlcnMpICE9IG51bGwgPyByZWYxLmxlbmd0aCA6IHZvaWQgMCkgfHwgMDtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5jY191c2VycztcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNoYW5nZWQoXCJpbnN0YW5jZXNcIiwgaWQsIGluc3RhbmNlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgICAgICBlcnJvciA9IGVycm9yMTtcbiAgICAgICAgY29uc29sZS5sb2coJ2luc3RhbmNlIG9ic2VydmVDaGFuZ2VzIGVycm9yOiAnLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgY29uc29sZS5sb2coJ3NlbGYudXNlcklkOiAnLCBzZWxmLnVzZXJJZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0YWJsZU5hbWU6ICcsIHRhYmxlTmFtZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpZHM6ICcsIEpTT04uc3RyaW5naWZ5KGlkcykpO1xuICAgICAgICByZXR1cm4gY29uc29sZS5sb2coJ215QXBwcm92ZTogJywgSlNPTi5zdHJpbmdpZnkobXlBcHByb3ZlKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVkOiBmdW5jdGlvbihpZCkge1xuICAgICAgcmV0dXJuIHNlbGYucmVtb3ZlZChcImluc3RhbmNlc1wiLCBpZCk7XG4gICAgfVxuICB9KTtcbiAgaWRzLmZvckVhY2goZnVuY3Rpb24oaWQpIHtcbiAgICB2YXIgaW5zdGFuY2UsIG15QXBwcm92ZSwgbXlMYXN0RmluaXNoZWRBcHByb3ZlLCByZWYsIHJlZjE7XG4gICAgaW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGlkXG4gICAgfSwge1xuICAgICAgZmllbGRzOiBmaWVsZHNcbiAgICB9KTtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG15QXBwcm92ZSA9IGdldE15QXBwcm92ZShzZWxmLnVzZXJJZCwgaWQpO1xuICAgIG15TGFzdEZpbmlzaGVkQXBwcm92ZSA9IGdldE15TGFzdEZpbmlzaGVkQXBwcm92ZShzZWxmLnVzZXJJZCwgaWQpO1xuICAgIGlmIChteUFwcHJvdmUpIHtcbiAgICAgIGluc3RhbmNlLmlzX3JlYWQgPSBteUFwcHJvdmUuaXNfcmVhZDtcbiAgICAgIGluc3RhbmNlLnN0YXJ0X2RhdGUgPSBteUFwcHJvdmUuc3RhcnRfZGF0ZTtcbiAgICAgIGlmIChteUFwcHJvdmUuYWdlbnQpIHtcbiAgICAgICAgaW5zdGFuY2UuYWdlbnRfdXNlcl9uYW1lID0gbXlBcHByb3ZlLnVzZXJfbmFtZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2UuaXNfcmVhZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChteUxhc3RGaW5pc2hlZEFwcHJvdmUpIHtcbiAgICAgIGluc3RhbmNlLm15X2ZpbmlzaF9kYXRlID0gbXlMYXN0RmluaXNoZWRBcHByb3ZlLmZpbmlzaF9kYXRlO1xuICAgIH1cbiAgICBpbnN0YW5jZS5pc19jYyA9ICgocmVmID0gaW5zdGFuY2UuY2NfdXNlcnMpICE9IG51bGwgPyByZWYuaW5jbHVkZXMoc2VsZi51c2VySWQpIDogdm9pZCAwKSB8fCBmYWxzZTtcbiAgICBpbnN0YW5jZS5jY19jb3VudCA9ICgocmVmMSA9IGluc3RhbmNlLmNjX3VzZXJzKSAhPSBudWxsID8gcmVmMS5sZW5ndGggOiB2b2lkIDApIHx8IDA7XG4gICAgZGVsZXRlIGluc3RhbmNlLmNjX3VzZXJzO1xuICAgIHJldHVybiBzZWxmLmFkZGVkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSk7XG4gIH0pO1xuICBzZWxmLnJlYWR5KCk7XG4gIHJldHVybiBzZWxmLm9uU3RvcChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaGFuZGxlLnN0b3AoKTtcbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2goXCJpbnN0YW5jZV90YXNrc190YWJ1bGFyXCIsIGZ1bmN0aW9uKHRhYnVsYXJOYW1lLCBpZHMsIGZpZWxkcykge1xuICBpZiAoIXRoaXMudXNlcklkKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICBjaGVjayh0YWJ1bGFyTmFtZSwgU3RyaW5nKTtcbiAgY2hlY2soaWRzLCBBcnJheSk7XG4gIGNoZWNrKGZpZWxkcywgTWF0Y2guT3B0aW9uYWwoT2JqZWN0KSk7XG4gIHJldHVybiBkYi5pbnN0YW5jZV90YXNrcy5maW5kKHtcbiAgICBfaWQ6IHtcbiAgICAgICRpbjogaWRzXG4gICAgfVxuICB9LCB7XG4gICAgZmllbGRzOiBmaWVsZHNcbiAgfSk7XG59KTtcblxuTWV0ZW9yLnB1Ymxpc2goXCJpbnN0YW5jZXNfdGFidWxhclwiLCBmdW5jdGlvbih0YWJ1bGFyTmFtZSwgaWRzLCBmaWVsZHMpIHtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgY2hlY2sodGFidWxhck5hbWUsIFN0cmluZyk7XG4gIGNoZWNrKGlkcywgQXJyYXkpO1xuICBjaGVjayhmaWVsZHMsIE1hdGNoLk9wdGlvbmFsKE9iamVjdCkpO1xuICByZXR1cm4gZGIuaW5zdGFuY2VzLmZpbmQoe1xuICAgIF9pZDoge1xuICAgICAgJGluOiBpZHNcbiAgICB9XG4gIH0sIHtcbiAgICBmaWVsZHM6IGZpZWxkc1xuICB9KTtcbn0pO1xuIiwiTWV0ZW9yLnB1Ymxpc2ggJ2luc3RhbmNlc19kcmFmdCcsIChzcGFjZUlkKSAtPlxuXHRjaGVjayBzcGFjZUlkLCBTdHJpbmdcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dXNlcklkID0gdGhpcy51c2VySWRcblx0cmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHtzdGF0ZTpcImRyYWZ0XCIsc3BhY2U6c3BhY2VJZCxzdWJtaXR0ZXI6dXNlcklkLCRvcjpbe2luYm94X3VzZXJzOiB7JGV4aXN0czpmYWxzZX19LCB7aW5ib3hfdXNlcnM6IFtdfV19LCB7ZmllbGRzOiB7X2lkOiAxLCBzdGF0ZTogMSwgc3BhY2U6IDEsIHN1Ym1pdHRlcjogMSwgaW5ib3hfdXNlcnM6IDEsIG1vZGlmaWVkOiAxLCBuYW1lOiAxfSwgc29ydDp7bW9kaWZpZWQ6IC0xfX0pIiwiTWV0ZW9yLnB1Ymxpc2goJ2luc3RhbmNlc19kcmFmdCcsIGZ1bmN0aW9uKHNwYWNlSWQpIHtcbiAgdmFyIHVzZXJJZDtcbiAgY2hlY2soc3BhY2VJZCwgU3RyaW5nKTtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgdXNlcklkID0gdGhpcy51c2VySWQ7XG4gIHJldHVybiBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgc3RhdGU6IFwiZHJhZnRcIixcbiAgICBzcGFjZTogc3BhY2VJZCxcbiAgICBzdWJtaXR0ZXI6IHVzZXJJZCxcbiAgICAkb3I6IFtcbiAgICAgIHtcbiAgICAgICAgaW5ib3hfdXNlcnM6IHtcbiAgICAgICAgICAkZXhpc3RzOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGluYm94X3VzZXJzOiBbXVxuICAgICAgfVxuICAgIF1cbiAgfSwge1xuICAgIGZpZWxkczoge1xuICAgICAgX2lkOiAxLFxuICAgICAgc3RhdGU6IDEsXG4gICAgICBzcGFjZTogMSxcbiAgICAgIHN1Ym1pdHRlcjogMSxcbiAgICAgIGluYm94X3VzZXJzOiAxLFxuICAgICAgbW9kaWZpZWQ6IDEsXG4gICAgICBuYW1lOiAxXG4gICAgfSxcbiAgICBzb3J0OiB7XG4gICAgICBtb2RpZmllZDogLTFcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJNZXRlb3IucHVibGlzaCAnZGlzdHJpYnV0ZWRfaW5zdGFuY2VzX3N0YXRlX2J5X2lkcycsIChpbnN0YW5jZV9pZHMpLT5cblx0Y2hlY2soaW5zdGFuY2VfaWRzLCBBcnJheSlcblxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cdFxuXHR1bmxlc3MgaW5zdGFuY2VfaWRzXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdGlmIF8uaXNFbXB0eShpbnN0YW5jZV9pZHMpXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHNlbGYgPSB0aGlzXG5cblx0aGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQoe19pZDogeyRpbjogaW5zdGFuY2VfaWRzfX0sIHtmaWVsZHM6IHtzdGF0ZTogMSwgdHJhY2VzOnskc2xpY2U6IDF9IH0gfSkub2JzZXJ2ZUNoYW5nZXMge1xuXHRcdGFkZGVkOiAoaWQsIGZpZWxkcyktPlxuXHRcdFx0c2VsZi5hZGRlZCgnaW5zdGFuY2VzJywgaWQsIHtzdGF0ZTogZmllbGRzLnN0YXRlLCBpc19yZWFkOiBmaWVsZHMudHJhY2VzWzBdLmFwcHJvdmVzWzBdLmlzX3JlYWR9KVxuXG5cdFx0Y2hhbmdlZDogKGlkLCBmaWVsZHMpLT5cblx0XHRcdGlmIGZpZWxkcy5zdGF0ZVxuXHRcdFx0XHRzZWxmLmNoYW5nZWQoJ2luc3RhbmNlcycsIGlkLCB7c3RhdGU6IGZpZWxkcy5zdGF0ZX0pXG5cdFx0XHRpZiBmaWVsZHMudHJhY2VzXG5cdFx0XHRcdHNlbGYuY2hhbmdlZCgnaW5zdGFuY2VzJywgaWQsIHtpc19yZWFkOiBmaWVsZHMudHJhY2VzWzBdLmFwcHJvdmVzWzBdLmlzX3JlYWR9KVxuXHR9XG5cblx0dGhpcy5yZWFkeSgpXG5cdHRoaXMub25TdG9wICgpLT5cblx0XHRoYW5kbGUuc3RvcCgpXG4iLCJNZXRlb3IucHVibGlzaCgnZGlzdHJpYnV0ZWRfaW5zdGFuY2VzX3N0YXRlX2J5X2lkcycsIGZ1bmN0aW9uKGluc3RhbmNlX2lkcykge1xuICB2YXIgaGFuZGxlLCBzZWxmO1xuICBjaGVjayhpbnN0YW5jZV9pZHMsIEFycmF5KTtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCFpbnN0YW5jZV9pZHMpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmIChfLmlzRW1wdHkoaW5zdGFuY2VfaWRzKSkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgc2VsZiA9IHRoaXM7XG4gIGhhbmRsZSA9IGRiLmluc3RhbmNlcy5maW5kKHtcbiAgICBfaWQ6IHtcbiAgICAgICRpbjogaW5zdGFuY2VfaWRzXG4gICAgfVxuICB9LCB7XG4gICAgZmllbGRzOiB7XG4gICAgICBzdGF0ZTogMSxcbiAgICAgIHRyYWNlczoge1xuICAgICAgICAkc2xpY2U6IDFcbiAgICAgIH1cbiAgICB9XG4gIH0pLm9ic2VydmVDaGFuZ2VzKHtcbiAgICBhZGRlZDogZnVuY3Rpb24oaWQsIGZpZWxkcykge1xuICAgICAgcmV0dXJuIHNlbGYuYWRkZWQoJ2luc3RhbmNlcycsIGlkLCB7XG4gICAgICAgIHN0YXRlOiBmaWVsZHMuc3RhdGUsXG4gICAgICAgIGlzX3JlYWQ6IGZpZWxkcy50cmFjZXNbMF0uYXBwcm92ZXNbMF0uaXNfcmVhZFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBjaGFuZ2VkOiBmdW5jdGlvbihpZCwgZmllbGRzKSB7XG4gICAgICBpZiAoZmllbGRzLnN0YXRlKSB7XG4gICAgICAgIHNlbGYuY2hhbmdlZCgnaW5zdGFuY2VzJywgaWQsIHtcbiAgICAgICAgICBzdGF0ZTogZmllbGRzLnN0YXRlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkcy50cmFjZXMpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuY2hhbmdlZCgnaW5zdGFuY2VzJywgaWQsIHtcbiAgICAgICAgICBpc19yZWFkOiBmaWVsZHMudHJhY2VzWzBdLmFwcHJvdmVzWzBdLmlzX3JlYWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy5yZWFkeSgpO1xuICByZXR1cm4gdGhpcy5vblN0b3AoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhhbmRsZS5zdG9wKCk7XG4gIH0pO1xufSk7XG4iLCJNZXRlb3IucHVibGlzaCAncmVsYXRlZF9pbnN0YWNlcycsIChpbnN0YW5jZUlkLCByZWxhdGVkX2luc3RhbmNlcyktPlxuXHR1bmxlc3MgdGhpcy51c2VySWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0dW5sZXNzIGluc3RhbmNlSWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0cmVsYXRlZF9pbnN0YW5jZV9pZHMgPSBkYi5pbnN0YW5jZXMuZmluZE9uZShpbnN0YW5jZUlkLHtmaWVsZHM6IHtyZWxhdGVkX2luc3RhbmNlczogMX19KT8ucmVsYXRlZF9pbnN0YW5jZXNcblxuXHRpZiByZWxhdGVkX2luc3RhbmNlX2lkcyAmJiBfLmlzQXJyYXkocmVsYXRlZF9pbnN0YW5jZV9pZHMpXG5cdFx0cmV0dXJuIGRiLmluc3RhbmNlcy5maW5kKHtfaWQ6IHskaW4gOiByZWxhdGVkX2luc3RhbmNlX2lkc319LCB7ZmllbGRzOiB7X2lkOiAxLCBuYW1lOiAxLCBzcGFjZTogMX19KVxuXHRlbHNlXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKSIsIk1ldGVvci5wdWJsaXNoKCdyZWxhdGVkX2luc3RhY2VzJywgZnVuY3Rpb24oaW5zdGFuY2VJZCwgcmVsYXRlZF9pbnN0YW5jZXMpIHtcbiAgdmFyIHJlZiwgcmVsYXRlZF9pbnN0YW5jZV9pZHM7XG4gIGlmICghdGhpcy51c2VySWQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSgpO1xuICB9XG4gIGlmICghaW5zdGFuY2VJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgcmVsYXRlZF9pbnN0YW5jZV9pZHMgPSAocmVmID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoaW5zdGFuY2VJZCwge1xuICAgIGZpZWxkczoge1xuICAgICAgcmVsYXRlZF9pbnN0YW5jZXM6IDFcbiAgICB9XG4gIH0pKSAhPSBudWxsID8gcmVmLnJlbGF0ZWRfaW5zdGFuY2VzIDogdm9pZCAwO1xuICBpZiAocmVsYXRlZF9pbnN0YW5jZV9pZHMgJiYgXy5pc0FycmF5KHJlbGF0ZWRfaW5zdGFuY2VfaWRzKSkge1xuICAgIHJldHVybiBkYi5pbnN0YW5jZXMuZmluZCh7XG4gICAgICBfaWQ6IHtcbiAgICAgICAgJGluOiByZWxhdGVkX2luc3RhbmNlX2lkc1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBfaWQ6IDEsXG4gICAgICAgIG5hbWU6IDEsXG4gICAgICAgIHNwYWNlOiAxXG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxufSk7XG4iLCJpZiBNZXRlb3IuaXNTZXJ2ZXJcbiAgICBNZXRlb3IucHVibGlzaCAnc3BhY2VfdXNlcl9zaWducycsIChzcGFjZUlkKSAtPlxuICAgICAgICBjaGVjayBzcGFjZUlkLCBTdHJpbmdcblxuICAgICAgICB1bmxlc3MgdGhpcy51c2VySWRcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWR5KClcblxuICAgICAgICByZXR1cm4gZGIuc3BhY2VfdXNlcl9zaWducy5maW5kKHsgc3BhY2U6IHNwYWNlSWQgfSwge2ZpZWxkczoge2NyZWF0ZWRfYnk6IDAsIGNyZWF0ZWQ6IDAsIG1vZGlmaWVkX2J5OiAwfX0pXG4iLCJpZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gIE1ldGVvci5wdWJsaXNoKCdzcGFjZV91c2VyX3NpZ25zJywgZnVuY3Rpb24oc3BhY2VJZCkge1xuICAgIGNoZWNrKHNwYWNlSWQsIFN0cmluZyk7XG4gICAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgICB9XG4gICAgcmV0dXJuIGRiLnNwYWNlX3VzZXJfc2lnbnMuZmluZCh7XG4gICAgICBzcGFjZTogc3BhY2VJZFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICBjcmVhdGVkX2J5OiAwLFxuICAgICAgICBjcmVhdGVkOiAwLFxuICAgICAgICBtb2RpZmllZF9ieTogMFxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbiIsIiMjI1xuTWV0ZW9yLnB1Ymxpc2hDb21wb3NpdGUgXCJ1c2VyX2luYm94X2luc3RhbmNlXCIsICgpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHVzZXJTcGFjZUlkcyA9IGRiLnNwYWNlX3VzZXJzLmZpbmQoe1xuXHRcdHVzZXI6IHRoaXMudXNlcklkLFxuXHRcdHVzZXJfYWNjZXB0ZWQ6IHRydWVcblx0fSwge2ZpZWxkczoge3NwYWNlOiAxfX0pLmZldGNoKCkuZ2V0RWFjaChcInNwYWNlXCIpO1xuXHRxdWVyeSA9IHtzcGFjZTogeyRpbjogdXNlclNwYWNlSWRzfX1cblxuXHRxdWVyeS4kb3IgPSBbe2luYm94X3VzZXJzOiB0aGlzLnVzZXJJZH0sIHtjY191c2VyczogdGhpcy51c2VySWR9XVxuXG5cdGZpbmQ6IC0+XG5cdFx0ZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtcblx0XHRcdGZpZWxkczoge1xuXHRcdFx0XHRzcGFjZTogMSxcblx0XHRcdFx0YXBwbGljYW50X25hbWU6IDEsXG5cdFx0XHRcdGZsb3c6IDEsXG5cdFx0XHRcdGluYm94X3VzZXJzOiAxLFxuXHRcdFx0XHRjY191c2VyczogMSxcblx0XHRcdFx0c3RhdGU6IDEsXG5cdFx0XHRcdG5hbWU6IDEsXG5cdFx0XHRcdG1vZGlmaWVkOiAxLFxuXHRcdFx0XHRmb3JtOiAxXG5cdFx0XHR9LCBzb3J0OiB7bW9kaWZpZWQ6IC0xfSwgc2tpcDogMCwgbGltaXQ6IDIwMFxuXHRcdH0pO1xuXHRjaGlsZHJlbjogW1xuXHRcdHtcblx0XHRcdGZpbmQ6IChpbnN0YW5jZSwgcG9zdCktPlxuXHRcdFx0XHRkYi5mbG93cy5maW5kKHtfaWQ6IGluc3RhbmNlLmZsb3d9LCB7ZmllbGRzOiB7bmFtZTogMSwgc3BhY2U6IDF9fSk7XG5cdFx0fVxuXHRdXG4jIyNcblxuIyMjXG5NZXRlb3IucHVibGlzaCAnbXlfaW5ib3hfaW5zdGFuY2VzJywgKHNwYWNlSWQpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHNlbGYgPSB0aGlzO1xuXG5cdCNcdHVzZXJTcGFjZUlkcyA9IGRiLnNwYWNlX3VzZXJzLmZpbmQoe1xuXHQjXHRcdHVzZXI6IHRoaXMudXNlcklkLFxuXHQjXHRcdHVzZXJfYWNjZXB0ZWQ6IHRydWVcblx0I1x0fSwge2ZpZWxkczoge3NwYWNlOiAxfX0pLmZldGNoKCkuZ2V0RWFjaChcInNwYWNlXCIpO1xuXG5cdHF1ZXJ5ID0ge3NwYWNlOiBzcGFjZUlkfVxuXG5cdHF1ZXJ5LiRvciA9IFt7aW5ib3hfdXNlcnM6IHRoaXMudXNlcklkfSwge2NjX3VzZXJzOiB0aGlzLnVzZXJJZH1dXG5cblx0ZmllbGRzID0ge1xuXHRcdHNwYWNlOiAxLFxuI1x0XHRhcHBsaWNhbnRfbmFtZTogMSxcblx0XHRmbG93OiAxLFxuXHRcdGluYm94X3VzZXJzOiAxLFxuXHRcdGNjX3VzZXJzOiAxLFxuXHRcdHN0YXRlOiAxLFxuI1x0XHRuYW1lOiAxLFxuI1x0XHRtb2RpZmllZDogMSxcblx0XHRmb3JtOiAxXG5cdH1cblxuXHRoYW5kbGUgPSBkYi5pbnN0YW5jZXMuZmluZChxdWVyeSwge3NvcnQ6IHttb2RpZmllZDogLTF9LCBza2lwOiAwLCBsaW1pdDogNTAwfSkub2JzZXJ2ZUNoYW5nZXMge1xuXHRcdGFkZGVkOiAoaWQpLT5cblx0XHRcdGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaWR9LCB7ZmllbGRzOiBmaWVsZHN9KVxuXHRcdFx0cmV0dXJuIGlmIG5vdCBpbnN0YW5jZVxuXHRcdFx0aW5zdGFuY2UuaXNfY2MgPSBpbnN0YW5jZS5jY191c2Vycz8uaW5jbHVkZXMoc2VsZi51c2VySWQpIHx8IGZhbHNlXG5cdFx0XHRkZWxldGUgaW5zdGFuY2UuY2NfdXNlcnNcblx0XHRcdHNlbGYuYWRkZWQoXCJpbnN0YW5jZXNcIiwgaWQsIGluc3RhbmNlKVxuXHRcdGNoYW5nZWQ6IChpZCktPlxuXHRcdFx0aW5zdGFuY2UgPSBkYi5pbnN0YW5jZXMuZmluZE9uZSh7X2lkOiBpZH0sIHtmaWVsZHM6IGZpZWxkc30pXG5cdFx0XHRyZXR1cm4gaWYgbm90IGluc3RhbmNlXG5cdFx0XHRpbnN0YW5jZS5pc19jYyA9IGluc3RhbmNlLmNjX3VzZXJzPy5pbmNsdWRlcyhzZWxmLnVzZXJJZCkgfHwgZmFsc2Vcblx0XHRcdGRlbGV0ZSBpbnN0YW5jZS5jY191c2Vyc1xuXHRcdFx0c2VsZi5jaGFuZ2VkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSk7XG5cdFx0cmVtb3ZlZDogKGlkKS0+XG5cdFx0XHRzZWxmLnJlbW92ZWQoXCJpbnN0YW5jZXNcIiwgaWQpO1xuXHR9XG5cblx0c2VsZi5yZWFkeSgpO1xuXHRzZWxmLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKVxuIyMjXG5cbl9nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlID0gKHNwYWNlSWQsIHVzZXJJZCwgX2l0ZW1zLCBjYWxsYmFjayktPlxuXHRkYi5pbnN0YW5jZXMucmF3Q29sbGVjdGlvbigpLmFnZ3JlZ2F0ZShbXG5cdFx0e1xuXHRcdFx0JG1hdGNoOiB7XG5cdFx0XHRcdHNwYWNlOiBzcGFjZUlkLFxuXHRcdFx0XHQkb3I6IFt7aW5ib3hfdXNlcnM6IHVzZXJJZH0sIHtjY191c2VyczogdXNlcklkfV1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdCRncm91cDoge1xuXHRcdFx0XHRfaWQ6IHtmbG93OiBcIiRmbG93XCIsIGNhdGVnb3J5OiBcIiRjYXRlZ29yeVwifSwgY291bnQ6IHskc3VtOiAxfVxuXHRcdFx0fVxuXHRcdH1cblx0XSkudG9BcnJheSAoZXJyLCBkYXRhKS0+XG5cdFx0aWYgZXJyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyKVxuXG5cdFx0ZGF0YS5mb3JFYWNoIChkb2MpIC0+XG5cdFx0XHRfaXRlbXMucHVzaCBkb2NcblxuXHRcdGlmIGNhbGxiYWNrICYmIF8uaXNGdW5jdGlvbihjYWxsYmFjaylcblx0XHRcdGNhbGxiYWNrKClcblx0XHRyZXR1cm5cblxuX2FzeW5jX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGUgPSBNZXRlb3Iud3JhcEFzeW5jKF9nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlKVxuXG5NZXRlb3IucHVibGlzaCAnbXlfaW5ib3hfZmxvd19pbnN0YW5jZXNfY291bnQnLCAoc3BhY2VJZCktPlxuXG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHRzZWxmID0gdGhpcztcblxuXHRxdWVyeSA9IHtzcGFjZTogc3BhY2VJZH1cblxuXHRxdWVyeS4kb3IgPSBbe2luYm94X3VzZXJzOiB0aGlzLnVzZXJJZH0sIHtjY191c2VyczogdGhpcy51c2VySWR9XVxuXG5cdGRhdGEgPSBbXSAgI+aVsOaNruagvOW8j++8mlt7X2lkOmZsb3dJZCwgY291bnQ6IOW+heWKnuaVsOmHj30sIHtfaWQ6Zmxvd0lkMiwgY291bnQ6IOW+heWKnuaVsOmHjzJ9XVxuXHRfYXN5bmNfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZShzcGFjZUlkLCBzZWxmLnVzZXJJZCwgZGF0YSlcblxuXHRfZmxvd3NEYXRhID0gW11cblxuXHRfLmVhY2ggZGF0YSwgKGRhdGFJdGVtKS0+XG5cdFx0X2Zsb3dzRGF0YS5wdXNoKHtfaWQ6IGRhdGFJdGVtLl9pZC5mbG93LCBjYXRlZ29yeTogZGF0YUl0ZW0uX2lkLmNhdGVnb3J5LCBjb3VudDogZGF0YUl0ZW0uY291bnR9KVxuXG5cdHNlbGYuYWRkZWQoXCJmbG93X2luc3RhbmNlc1wiLCBzcGFjZUlkLCB7Zmxvd3M6IF9mbG93c0RhdGF9KTtcblxuXHRfY2hhbmdlRGF0YSA9IChkb2MsIGFjdGlvbiktPlxuXHRcdGZsb3dfaW5zdGFuY2UgPSBfLmZpbmQgX2Zsb3dzRGF0YSwgKGYpLT5cblx0XHRcdHJldHVybiBmLl9pZCA9PSBkb2MuZmxvd1xuXHRcdGlmIGZsb3dfaW5zdGFuY2Vcblx0XHRcdGlmIGFjdGlvbiA9PSBcImFkZGVkXCJcblx0XHRcdFx0Zmxvd19pbnN0YW5jZS5jb3VudCsrXG5cdFx0XHRlbHNlIGlmIGFjdGlvbiA9PSBcInJlbW92ZWRcIlxuXHRcdFx0XHRmbG93X2luc3RhbmNlLmNvdW50LS1cblx0XHRlbHNlIGlmIGFjdGlvbiA9PSBcImFkZGVkXCJcblx0XHRcdF9mbG93c0RhdGEucHVzaCB7X2lkOiBkb2MuZmxvdywgY2F0ZWdvcnk6IGRvYy5jYXRlZ29yeSwgY291bnQ6IDF9XG5cblx0XHRzZWxmLmNoYW5nZWQoXCJmbG93X2luc3RhbmNlc1wiLCBzcGFjZUlkLCB7Zmxvd3M6IF9mbG93c0RhdGF9KTtcblxuXHRfaW5pdCA9IHRydWVcblx0aGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtmaWVsZHM6IHtfaWQ6IDEsIGluYm94X3VzZXJzOiAxLCBjY191c2VyczogMSwgZmxvdzogMSwgY2F0ZWdvcnk6IDF9fSkub2JzZXJ2ZSB7XG5cdFx0YWRkZWQ6IChkb2MpLT5cblx0XHRcdGlmICFfaW5pdFxuXHRcdFx0XHRfY2hhbmdlRGF0YShkb2MsIFwiYWRkZWRcIilcblx0XHRyZW1vdmVkOiAoZG9jKS0+XG5cdFx0XHRpZiAhX2luaXRcblx0XHRcdFx0X2NoYW5nZURhdGEoZG9jLCBcInJlbW92ZWRcIilcblx0fVxuXHRfaW5pdCA9IGZhbHNlXG5cblx0c2VsZi5yZWFkeSgpO1xuXHRzZWxmLm9uU3RvcCAoKS0+XG5cdFx0aGFuZGxlLnN0b3AoKSIsIlxuLypcbk1ldGVvci5wdWJsaXNoQ29tcG9zaXRlIFwidXNlcl9pbmJveF9pbnN0YW5jZVwiLCAoKS0+XG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1c2VyU3BhY2VJZHMgPSBkYi5zcGFjZV91c2Vycy5maW5kKHtcblx0XHR1c2VyOiB0aGlzLnVzZXJJZCxcblx0XHR1c2VyX2FjY2VwdGVkOiB0cnVlXG5cdH0sIHtmaWVsZHM6IHtzcGFjZTogMX19KS5mZXRjaCgpLmdldEVhY2goXCJzcGFjZVwiKTtcblx0cXVlcnkgPSB7c3BhY2U6IHskaW46IHVzZXJTcGFjZUlkc319XG5cblx0cXVlcnkuJG9yID0gW3tpbmJveF91c2VyczogdGhpcy51c2VySWR9LCB7Y2NfdXNlcnM6IHRoaXMudXNlcklkfV1cblxuXHRmaW5kOiAtPlxuXHRcdGRiLmluc3RhbmNlcy5maW5kKHF1ZXJ5LCB7XG5cdFx0XHRmaWVsZHM6IHtcblx0XHRcdFx0c3BhY2U6IDEsXG5cdFx0XHRcdGFwcGxpY2FudF9uYW1lOiAxLFxuXHRcdFx0XHRmbG93OiAxLFxuXHRcdFx0XHRpbmJveF91c2VyczogMSxcblx0XHRcdFx0Y2NfdXNlcnM6IDEsXG5cdFx0XHRcdHN0YXRlOiAxLFxuXHRcdFx0XHRuYW1lOiAxLFxuXHRcdFx0XHRtb2RpZmllZDogMSxcblx0XHRcdFx0Zm9ybTogMVxuXHRcdFx0fSwgc29ydDoge21vZGlmaWVkOiAtMX0sIHNraXA6IDAsIGxpbWl0OiAyMDBcblx0XHR9KTtcblx0Y2hpbGRyZW46IFtcblx0XHR7XG5cdFx0XHRmaW5kOiAoaW5zdGFuY2UsIHBvc3QpLT5cblx0XHRcdFx0ZGIuZmxvd3MuZmluZCh7X2lkOiBpbnN0YW5jZS5mbG93fSwge2ZpZWxkczoge25hbWU6IDEsIHNwYWNlOiAxfX0pO1xuXHRcdH1cblx0XVxuICovXG5cbi8qXG5NZXRlb3IucHVibGlzaCAnbXlfaW5ib3hfaW5zdGFuY2VzJywgKHNwYWNlSWQpLT5cblx0dW5sZXNzIHRoaXMudXNlcklkXG5cdFx0cmV0dXJuIHRoaXMucmVhZHkoKVxuXG5cdHNlbGYgPSB0aGlzO1xuXG5cdCAqXHR1c2VyU3BhY2VJZHMgPSBkYi5zcGFjZV91c2Vycy5maW5kKHtcblx0ICpcdFx0dXNlcjogdGhpcy51c2VySWQsXG5cdCAqXHRcdHVzZXJfYWNjZXB0ZWQ6IHRydWVcblx0ICpcdH0sIHtmaWVsZHM6IHtzcGFjZTogMX19KS5mZXRjaCgpLmdldEVhY2goXCJzcGFjZVwiKTtcblxuXHRxdWVyeSA9IHtzcGFjZTogc3BhY2VJZH1cblxuXHRxdWVyeS4kb3IgPSBbe2luYm94X3VzZXJzOiB0aGlzLnVzZXJJZH0sIHtjY191c2VyczogdGhpcy51c2VySWR9XVxuXG5cdGZpZWxkcyA9IHtcblx0XHRzcGFjZTogMSxcbiAqXHRcdGFwcGxpY2FudF9uYW1lOiAxLFxuXHRcdGZsb3c6IDEsXG5cdFx0aW5ib3hfdXNlcnM6IDEsXG5cdFx0Y2NfdXNlcnM6IDEsXG5cdFx0c3RhdGU6IDEsXG4gKlx0XHRuYW1lOiAxLFxuICpcdFx0bW9kaWZpZWQ6IDEsXG5cdFx0Zm9ybTogMVxuXHR9XG5cblx0aGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtzb3J0OiB7bW9kaWZpZWQ6IC0xfSwgc2tpcDogMCwgbGltaXQ6IDUwMH0pLm9ic2VydmVDaGFuZ2VzIHtcblx0XHRhZGRlZDogKGlkKS0+XG5cdFx0XHRpbnN0YW5jZSA9IGRiLmluc3RhbmNlcy5maW5kT25lKHtfaWQ6IGlkfSwge2ZpZWxkczogZmllbGRzfSlcblx0XHRcdHJldHVybiBpZiBub3QgaW5zdGFuY2Vcblx0XHRcdGluc3RhbmNlLmlzX2NjID0gaW5zdGFuY2UuY2NfdXNlcnM/LmluY2x1ZGVzKHNlbGYudXNlcklkKSB8fCBmYWxzZVxuXHRcdFx0ZGVsZXRlIGluc3RhbmNlLmNjX3VzZXJzXG5cdFx0XHRzZWxmLmFkZGVkKFwiaW5zdGFuY2VzXCIsIGlkLCBpbnN0YW5jZSlcblx0XHRjaGFuZ2VkOiAoaWQpLT5cblx0XHRcdGluc3RhbmNlID0gZGIuaW5zdGFuY2VzLmZpbmRPbmUoe19pZDogaWR9LCB7ZmllbGRzOiBmaWVsZHN9KVxuXHRcdFx0cmV0dXJuIGlmIG5vdCBpbnN0YW5jZVxuXHRcdFx0aW5zdGFuY2UuaXNfY2MgPSBpbnN0YW5jZS5jY191c2Vycz8uaW5jbHVkZXMoc2VsZi51c2VySWQpIHx8IGZhbHNlXG5cdFx0XHRkZWxldGUgaW5zdGFuY2UuY2NfdXNlcnNcblx0XHRcdHNlbGYuY2hhbmdlZChcImluc3RhbmNlc1wiLCBpZCwgaW5zdGFuY2UpO1xuXHRcdHJlbW92ZWQ6IChpZCktPlxuXHRcdFx0c2VsZi5yZW1vdmVkKFwiaW5zdGFuY2VzXCIsIGlkKTtcblx0fVxuXG5cdHNlbGYucmVhZHkoKTtcblx0c2VsZi5vblN0b3AgKCktPlxuXHRcdGhhbmRsZS5zdG9wKClcbiAqL1xudmFyIF9hc3luY19nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlLCBfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZTtcblxuX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGUgPSBmdW5jdGlvbihzcGFjZUlkLCB1c2VySWQsIF9pdGVtcywgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGRiLmluc3RhbmNlcy5yYXdDb2xsZWN0aW9uKCkuYWdncmVnYXRlKFtcbiAgICB7XG4gICAgICAkbWF0Y2g6IHtcbiAgICAgICAgc3BhY2U6IHNwYWNlSWQsXG4gICAgICAgICRvcjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluYm94X3VzZXJzOiB1c2VySWRcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBjY191c2VyczogdXNlcklkXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgJGdyb3VwOiB7XG4gICAgICAgIF9pZDoge1xuICAgICAgICAgIGZsb3c6IFwiJGZsb3dcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCIkY2F0ZWdvcnlcIlxuICAgICAgICB9LFxuICAgICAgICBjb3VudDoge1xuICAgICAgICAgICRzdW06IDFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgXSkudG9BcnJheShmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKTtcbiAgICB9XG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGRvYykge1xuICAgICAgcmV0dXJuIF9pdGVtcy5wdXNoKGRvYyk7XG4gICAgfSk7XG4gICAgaWYgKGNhbGxiYWNrICYmIF8uaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICB9KTtcbn07XG5cbl9hc3luY19nZXRfZmxvd19pbnN0YW5jZXNfYWdncmVnYXRlID0gTWV0ZW9yLndyYXBBc3luYyhfZ2V0X2Zsb3dfaW5zdGFuY2VzX2FnZ3JlZ2F0ZSk7XG5cbk1ldGVvci5wdWJsaXNoKCdteV9pbmJveF9mbG93X2luc3RhbmNlc19jb3VudCcsIGZ1bmN0aW9uKHNwYWNlSWQpIHtcbiAgdmFyIF9jaGFuZ2VEYXRhLCBfZmxvd3NEYXRhLCBfaW5pdCwgZGF0YSwgaGFuZGxlLCBxdWVyeSwgc2VsZjtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgc2VsZiA9IHRoaXM7XG4gIHF1ZXJ5ID0ge1xuICAgIHNwYWNlOiBzcGFjZUlkXG4gIH07XG4gIHF1ZXJ5LiRvciA9IFtcbiAgICB7XG4gICAgICBpbmJveF91c2VyczogdGhpcy51c2VySWRcbiAgICB9LCB7XG4gICAgICBjY191c2VyczogdGhpcy51c2VySWRcbiAgICB9XG4gIF07XG4gIGRhdGEgPSBbXTtcbiAgX2FzeW5jX2dldF9mbG93X2luc3RhbmNlc19hZ2dyZWdhdGUoc3BhY2VJZCwgc2VsZi51c2VySWQsIGRhdGEpO1xuICBfZmxvd3NEYXRhID0gW107XG4gIF8uZWFjaChkYXRhLCBmdW5jdGlvbihkYXRhSXRlbSkge1xuICAgIHJldHVybiBfZmxvd3NEYXRhLnB1c2goe1xuICAgICAgX2lkOiBkYXRhSXRlbS5faWQuZmxvdyxcbiAgICAgIGNhdGVnb3J5OiBkYXRhSXRlbS5faWQuY2F0ZWdvcnksXG4gICAgICBjb3VudDogZGF0YUl0ZW0uY291bnRcbiAgICB9KTtcbiAgfSk7XG4gIHNlbGYuYWRkZWQoXCJmbG93X2luc3RhbmNlc1wiLCBzcGFjZUlkLCB7XG4gICAgZmxvd3M6IF9mbG93c0RhdGFcbiAgfSk7XG4gIF9jaGFuZ2VEYXRhID0gZnVuY3Rpb24oZG9jLCBhY3Rpb24pIHtcbiAgICB2YXIgZmxvd19pbnN0YW5jZTtcbiAgICBmbG93X2luc3RhbmNlID0gXy5maW5kKF9mbG93c0RhdGEsIGZ1bmN0aW9uKGYpIHtcbiAgICAgIHJldHVybiBmLl9pZCA9PT0gZG9jLmZsb3c7XG4gICAgfSk7XG4gICAgaWYgKGZsb3dfaW5zdGFuY2UpIHtcbiAgICAgIGlmIChhY3Rpb24gPT09IFwiYWRkZWRcIikge1xuICAgICAgICBmbG93X2luc3RhbmNlLmNvdW50Kys7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJyZW1vdmVkXCIpIHtcbiAgICAgICAgZmxvd19pbnN0YW5jZS5jb3VudC0tO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSBcImFkZGVkXCIpIHtcbiAgICAgIF9mbG93c0RhdGEucHVzaCh7XG4gICAgICAgIF9pZDogZG9jLmZsb3csXG4gICAgICAgIGNhdGVnb3J5OiBkb2MuY2F0ZWdvcnksXG4gICAgICAgIGNvdW50OiAxXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGYuY2hhbmdlZChcImZsb3dfaW5zdGFuY2VzXCIsIHNwYWNlSWQsIHtcbiAgICAgIGZsb3dzOiBfZmxvd3NEYXRhXG4gICAgfSk7XG4gIH07XG4gIF9pbml0ID0gdHJ1ZTtcbiAgaGFuZGxlID0gZGIuaW5zdGFuY2VzLmZpbmQocXVlcnksIHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIF9pZDogMSxcbiAgICAgIGluYm94X3VzZXJzOiAxLFxuICAgICAgY2NfdXNlcnM6IDEsXG4gICAgICBmbG93OiAxLFxuICAgICAgY2F0ZWdvcnk6IDFcbiAgICB9XG4gIH0pLm9ic2VydmUoe1xuICAgIGFkZGVkOiBmdW5jdGlvbihkb2MpIHtcbiAgICAgIGlmICghX2luaXQpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFuZ2VEYXRhKGRvYywgXCJhZGRlZFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbW92ZWQ6IGZ1bmN0aW9uKGRvYykge1xuICAgICAgaWYgKCFfaW5pdCkge1xuICAgICAgICByZXR1cm4gX2NoYW5nZURhdGEoZG9jLCBcInJlbW92ZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgX2luaXQgPSBmYWxzZTtcbiAgc2VsZi5yZWFkeSgpO1xuICByZXR1cm4gc2VsZi5vblN0b3AoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhhbmRsZS5zdG9wKCk7XG4gIH0pO1xufSk7XG4iLCJcbk1ldGVvci5wdWJsaXNoICdmbG93X21haW5fYXR0YWNoX3RlbXBsYXRlJywgKHNwYWNlSWQsIGZsb3dJZCktPlxuXHRjaGVjayhzcGFjZUlkLCBTdHJpbmcpXG5cdGNoZWNrKGZsb3dJZCwgU3RyaW5nKVxuXG5cdHVubGVzcyB0aGlzLnVzZXJJZFxuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblxuXHR1bmxlc3Mgc3BhY2VJZCAmJiBmbG93SWRcblx0XHRyZXR1cm4gdGhpcy5yZWFkeSgpXG5cblx0cmV0dXJuIENyZWF0b3IuZ2V0Q29sbGVjdGlvbignY21zX2ZpbGVzJykuZmluZCh7IHNwYWNlOiBzcGFjZUlkLCAncGFyZW50Lm8nOiAnZmxvd3MnLCAncGFyZW50Lmlkcyc6IGZsb3dJZCwgIG5hbWU6ICfmraPmlocuZG9jeCcgfSlcbiIsIk1ldGVvci5wdWJsaXNoKCdmbG93X21haW5fYXR0YWNoX3RlbXBsYXRlJywgZnVuY3Rpb24oc3BhY2VJZCwgZmxvd0lkKSB7XG4gIGNoZWNrKHNwYWNlSWQsIFN0cmluZyk7XG4gIGNoZWNrKGZsb3dJZCwgU3RyaW5nKTtcbiAgaWYgKCF0aGlzLnVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLnJlYWR5KCk7XG4gIH1cbiAgaWYgKCEoc3BhY2VJZCAmJiBmbG93SWQpKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkoKTtcbiAgfVxuICByZXR1cm4gQ3JlYXRvci5nZXRDb2xsZWN0aW9uKCdjbXNfZmlsZXMnKS5maW5kKHtcbiAgICBzcGFjZTogc3BhY2VJZCxcbiAgICAncGFyZW50Lm8nOiAnZmxvd3MnLFxuICAgICdwYXJlbnQuaWRzJzogZmxvd0lkLFxuICAgIG5hbWU6ICfmraPmlocuZG9jeCdcbiAgfSk7XG59KTtcbiIsIndvcmtmbG93VGVtcGxhdGUgPSB7fVxuXG4j5Y+v55So5q2k6ISa5pys5LuO5qih5p2/5bel5L2c5Yy65YGa5om56YeP5a+85Ye677yaXG4j5L2/55So566h55CG5ZGY6LSm5oi355m75b2V5ZCO77yM6L+b5YWlRmxvd01vZHVsZXPvvIzlnKjmjqfliLblj7DmiafooYzku6XkuIvohJrmnKzljbPlj69cbiNkYi5mb3Jtcy5maW5kKHtzdGF0ZTpcImVuYWJsZWRcIn0pLmZvckVhY2goZnVuY3Rpb24oZm9ybSl7d2luZG93Lm9wZW4oTWV0ZW9yLmFic29sdXRlVXJsKFwiYXBpL3dvcmtmbG93L2V4cG9ydC9mb3JtP2Zvcm09XCIrZm9ybS5faWQpKX0pXG53b3JrZmxvd1RlbXBsYXRlW1wiZW5cIl0gPVtdXG5cbiPlj6/nlKjmraTohJrmnKzku47mqKHmnb/lt6XkvZzljLrlgZrmibnph4/lr7zlh7rvvJpcbiPkvb/nlKjnrqHnkIblkZjotKbmiLfnmbvlvZXlkI7vvIzov5vlhaXmqKHmnb/kuJPljLrvvIzlnKjmjqfliLblj7DmiafooYzku6XkuIvohJrmnKzljbPlj69cbiNkYi5mb3Jtcy5maW5kKHtzdGF0ZTpcImVuYWJsZWRcIn0pLmZvckVhY2goZnVuY3Rpb24oZm9ybSl7d2luZG93Lm9wZW4oTWV0ZW9yLmFic29sdXRlVXJsKFwiYXBpL3dvcmtmbG93L2V4cG9ydC9mb3JtP2Zvcm09XCIrZm9ybS5faWQpKX0pXG53b3JrZmxvd1RlbXBsYXRlW1wiemgtQ05cIl0gPVtdXG5cbk1ldGVvci5zdGFydHVwICgpLT5cblx0ZnMgPSByZXF1aXJlKCdmcycpXG5cdHBhdGggPSByZXF1aXJlKCdwYXRoJylcblx0bWltZSA9IHJlcXVpcmUoJ21pbWUnKVxuXHRyZWFkRmlsZUxpc3QgPSAocGF0aERpciwgZmlsZXNMaXN0KS0+XG5cdFx0ZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhwYXRoRGlyKVxuXHRcdGZpbGVzLmZvckVhY2ggKG5hbWUsIGluZGV4KS0+XG5cdFx0XHRzdGF0ID0gZnMuc3RhdFN5bmMocGF0aC5qb2luKHBhdGhEaXIsIG5hbWUpKVxuXHRcdFx0aWYgc3RhdC5pc0RpcmVjdG9yeSgpXG5cdFx0XHRcdCMg6YCS5b2S6K+75Y+W5paH5Lu2XG5cdFx0XHRcdHJlYWRGaWxlTGlzdChwYXRoLmpvaW4ocGF0aERpciwgbmFtZSksIGZpbGVzTGlzdClcblx0XHRcdGVsc2Vcblx0XHRcdFx0b2JqID0ge31cblx0XHRcdFx0b2JqLnBhdGggPSBwYXRoRGlyXG5cdFx0XHRcdG9iai5uYW1lID0gbmFtZVxuXHRcdFx0XHRmaWxlc0xpc3QucHVzaChvYmopXG5cblx0I+iOt+WPlnpoLWNu5paH5Lu25aS55LiL55qE5omA5pyJ5paH5Lu2XG5cdGZpbGVzTGlzdF9jbiA9IFtdXG5cdHBhdGhfY24gPSBNZXRlb3Iuc2V0dGluZ3Mud29ya2Zsb3dUZW1wbGF0ZXM/LnBhdGhfY25cblx0aWYgcGF0aF9jblxuXHRcdGFic29sdXRlX3BhdGhfY24gPSBwYXRoLnJlc29sdmUocGF0aF9jbilcblx0XHRjb25zb2xlLmxvZyBcImFic29sdXRlX3BhdGhfY25cIiwgYWJzb2x1dGVfcGF0aF9jblxuXHRcdGlmIGZzLmV4aXN0c1N5bmMoYWJzb2x1dGVfcGF0aF9jbilcblx0XHRcdHJlYWRGaWxlTGlzdChhYnNvbHV0ZV9wYXRoX2NuLCBmaWxlc0xpc3RfY24pXG5cdFx0XHRmaWxlc0xpc3RfY24uZm9yRWFjaCAoZmlsZSktPlxuXHRcdFx0XHR0cnlcblx0XHRcdFx0XHRpZiBtaW1lLmdldFR5cGUoZmlsZS5uYW1lKSBpcyBcImFwcGxpY2F0aW9uL2pzb25cIlxuXHRcdFx0XHRcdFx0ZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZmlsZS5wYXRoLCBmaWxlLm5hbWUpLCAndXRmOCcpXG5cdFx0XHRcdFx0XHR3b3JrZmxvd1RlbXBsYXRlW1wiemgtQ05cIl0ucHVzaChKU09OLnBhcnNlKGRhdGEpKVxuXHRcdFx0XHRjYXRjaCBlXG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvciBcIuiOt+WPlnpoLWNu5paH5Lu25aS55LiL55qE5omA5pyJ5paH5Lu2XCIsIHBhdGguam9pbihmaWxlLnBhdGgsIGZpbGUubmFtZSlcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yIGUuc3RhY2tcblxuXHQj6I635Y+WZW4tdXPmlofku7blpLnkuIvnmoTmiYDmnInmlofku7Zcblx0ZmlsZXNMaXN0X3VzID0gW11cblx0cGF0aF91cyA9IE1ldGVvci5zZXR0aW5ncy53b3JrZmxvd1RlbXBsYXRlcz8ucGF0aF91c1xuXHRpZiBwYXRoX3VzXG5cdFx0YWJzb2x1dGVfcGF0aF91cyA9IHBhdGgucmVzb2x2ZShwYXRoX3VzKVxuXHRcdGNvbnNvbGUubG9nIFwiYWJzb2x1dGVfcGF0aF91c1wiLCBhYnNvbHV0ZV9wYXRoX3VzXG5cdFx0aWYgZnMuZXhpc3RzU3luYyhhYnNvbHV0ZV9wYXRoX3VzKVxuXHRcdFx0cmVhZEZpbGVMaXN0KGFic29sdXRlX3BhdGhfdXMsIGZpbGVzTGlzdF91cylcblx0XHRcdGZpbGVzTGlzdF91cy5mb3JFYWNoIChmaWxlKS0+XG5cdFx0XHRcdHRyeVxuXHRcdFx0XHRcdGlmIG1pbWUuZ2V0VHlwZShmaWxlLm5hbWUpIGlzIFwiYXBwbGljYXRpb24vanNvblwiXG5cdFx0XHRcdFx0XHRkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihmaWxlLnBhdGgsIGZpbGUubmFtZSksICd1dGY4Jylcblx0XHRcdFx0XHRcdHdvcmtmbG93VGVtcGxhdGVbXCJlblwiXS5wdXNoKEpTT04ucGFyc2UoZGF0YSkpXG5cdFx0XHRcdGNhdGNoIGVcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yIFwi6I635Y+WZW4tdXPmlofku7blpLnkuIvnmoTmiYDmnInmlofku7ZcIiwgcGF0aC5qb2luKGZpbGUucGF0aCwgZmlsZS5uYW1lKVxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IgZS5zdGFja1xuXHRcdFx0XHRcblx0XHRcdFx0XHRcblxuXG4iLCIgICAgICAgICAgICAgICAgICAgICBcblxud29ya2Zsb3dUZW1wbGF0ZSA9IHt9O1xuXG53b3JrZmxvd1RlbXBsYXRlW1wiZW5cIl0gPSBbXTtcblxud29ya2Zsb3dUZW1wbGF0ZVtcInpoLUNOXCJdID0gW107XG5cbk1ldGVvci5zdGFydHVwKGZ1bmN0aW9uKCkge1xuICB2YXIgYWJzb2x1dGVfcGF0aF9jbiwgYWJzb2x1dGVfcGF0aF91cywgZmlsZXNMaXN0X2NuLCBmaWxlc0xpc3RfdXMsIGZzLCBtaW1lLCBwYXRoLCBwYXRoX2NuLCBwYXRoX3VzLCByZWFkRmlsZUxpc3QsIHJlZiwgcmVmMTtcbiAgZnMgPSByZXF1aXJlKCdmcycpO1xuICBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuICBtaW1lID0gcmVxdWlyZSgnbWltZScpO1xuICByZWFkRmlsZUxpc3QgPSBmdW5jdGlvbihwYXRoRGlyLCBmaWxlc0xpc3QpIHtcbiAgICB2YXIgZmlsZXM7XG4gICAgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhwYXRoRGlyKTtcbiAgICByZXR1cm4gZmlsZXMuZm9yRWFjaChmdW5jdGlvbihuYW1lLCBpbmRleCkge1xuICAgICAgdmFyIG9iaiwgc3RhdDtcbiAgICAgIHN0YXQgPSBmcy5zdGF0U3luYyhwYXRoLmpvaW4ocGF0aERpciwgbmFtZSkpO1xuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICByZXR1cm4gcmVhZEZpbGVMaXN0KHBhdGguam9pbihwYXRoRGlyLCBuYW1lKSwgZmlsZXNMaXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IHt9O1xuICAgICAgICBvYmoucGF0aCA9IHBhdGhEaXI7XG4gICAgICAgIG9iai5uYW1lID0gbmFtZTtcbiAgICAgICAgcmV0dXJuIGZpbGVzTGlzdC5wdXNoKG9iaik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGZpbGVzTGlzdF9jbiA9IFtdO1xuICBwYXRoX2NuID0gKHJlZiA9IE1ldGVvci5zZXR0aW5ncy53b3JrZmxvd1RlbXBsYXRlcykgIT0gbnVsbCA/IHJlZi5wYXRoX2NuIDogdm9pZCAwO1xuICBpZiAocGF0aF9jbikge1xuICAgIGFic29sdXRlX3BhdGhfY24gPSBwYXRoLnJlc29sdmUocGF0aF9jbik7XG4gICAgY29uc29sZS5sb2coXCJhYnNvbHV0ZV9wYXRoX2NuXCIsIGFic29sdXRlX3BhdGhfY24pO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGFic29sdXRlX3BhdGhfY24pKSB7XG4gICAgICByZWFkRmlsZUxpc3QoYWJzb2x1dGVfcGF0aF9jbiwgZmlsZXNMaXN0X2NuKTtcbiAgICAgIGZpbGVzTGlzdF9jbi5mb3JFYWNoKGZ1bmN0aW9uKGZpbGUpIHtcbiAgICAgICAgdmFyIGRhdGEsIGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKG1pbWUuZ2V0VHlwZShmaWxlLm5hbWUpID09PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuICAgICAgICAgICAgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZmlsZS5wYXRoLCBmaWxlLm5hbWUpLCAndXRmOCcpO1xuICAgICAgICAgICAgcmV0dXJuIHdvcmtmbG93VGVtcGxhdGVbXCJ6aC1DTlwiXS5wdXNoKEpTT04ucGFyc2UoZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlID0gZXJyb3I7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIuiOt+WPlnpoLWNu5paH5Lu25aS55LiL55qE5omA5pyJ5paH5Lu2XCIsIHBhdGguam9pbihmaWxlLnBhdGgsIGZpbGUubmFtZSkpO1xuICAgICAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKGUuc3RhY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZmlsZXNMaXN0X3VzID0gW107XG4gIHBhdGhfdXMgPSAocmVmMSA9IE1ldGVvci5zZXR0aW5ncy53b3JrZmxvd1RlbXBsYXRlcykgIT0gbnVsbCA/IHJlZjEucGF0aF91cyA6IHZvaWQgMDtcbiAgaWYgKHBhdGhfdXMpIHtcbiAgICBhYnNvbHV0ZV9wYXRoX3VzID0gcGF0aC5yZXNvbHZlKHBhdGhfdXMpO1xuICAgIGNvbnNvbGUubG9nKFwiYWJzb2x1dGVfcGF0aF91c1wiLCBhYnNvbHV0ZV9wYXRoX3VzKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhhYnNvbHV0ZV9wYXRoX3VzKSkge1xuICAgICAgcmVhZEZpbGVMaXN0KGFic29sdXRlX3BhdGhfdXMsIGZpbGVzTGlzdF91cyk7XG4gICAgICByZXR1cm4gZmlsZXNMaXN0X3VzLmZvckVhY2goZnVuY3Rpb24oZmlsZSkge1xuICAgICAgICB2YXIgZGF0YSwgZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobWltZS5nZXRUeXBlKGZpbGUubmFtZSkgPT09IFwiYXBwbGljYXRpb24vanNvblwiKSB7XG4gICAgICAgICAgICBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihmaWxlLnBhdGgsIGZpbGUubmFtZSksICd1dGY4Jyk7XG4gICAgICAgICAgICByZXR1cm4gd29ya2Zsb3dUZW1wbGF0ZVtcImVuXCJdLnB1c2goSlNPTi5wYXJzZShkYXRhKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGUgPSBlcnJvcjtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwi6I635Y+WZW4tdXPmlofku7blpLnkuIvnmoTmiYDmnInmlofku7ZcIiwgcGF0aC5qb2luKGZpbGUucGF0aCwgZmlsZS5uYW1lKSk7XG4gICAgICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSk7XG4iLCIjIyNcbiogICAgKiAgICAqICAgICogICAgKiAgICAqXG7ilKwgICAg4pSsICAgIOKUrCAgICDilKwgICAg4pSsICAgIOKUrFxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICB8XG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUlCBkYXkgb2Ygd2VlayAoMCAtIDcpICgwIG9yIDcgaXMgU3VuKVxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgCBtb250aCAoMSAtIDEyKVxu4pSCICAgIOKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIGRheSBvZiBtb250aCAoMSAtIDMxKVxu4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgaG91ciAoMCAtIDIzKVxu4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBtaW51dGUgKDAgLSA1OSlcbuKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBzZWNvbmQgKDAgLSA1OSwgT1BUSU9OQUwpXG4jIyNcbk1ldGVvci5zdGFydHVwIC0+XG5cdGlmIE1ldGVvci5zZXR0aW5ncy5jcm9uPy5hdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb25cblx0XHRzY2hlZHVsZSA9IHJlcXVpcmUoJ25vZGUtc2NoZWR1bGUnKVxuXHRcdCMg5a6a5pe25omn6KGM5ZCM5q2lXG5cdFx0cnVsZSA9IE1ldGVvci5zZXR0aW5ncy5jcm9uLmF1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvblxuXHRcdGdvX25leHQgPSB0cnVlXG5cdFx0c2NoZWR1bGUuc2NoZWR1bGVKb2IgcnVsZSwgTWV0ZW9yLmJpbmRFbnZpcm9ubWVudCAoKS0+XG5cdFx0XHR0cnlcblx0XHRcdFx0aWYgIWdvX25leHRcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Z29fbmV4dCA9IGZhbHNlXG5cdFx0XHRcdGNvbnNvbGUudGltZSAnYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uJ1xuXG5cdFx0XHRcdG5vdyA9IG5ldyBEYXRlXG5cblx0XHRcdFx0IyDlsIblp5TmiZjop4TliJnorr7nva7kuLrkuI3lj6/nlKhcblx0XHRcdFx0ZGIucHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzLnVwZGF0ZSh7IGVuYWJsZWQ6IHRydWUsIGVuZF90aW1lOiB7ICRsdGU6IG5vdyB9IH0sIHsgJHNldDogeyBlbmFibGVkOiBmYWxzZSB9IH0sIHsgbXVsdGkgOnRydWUgfSlcblxuXHRcdFx0XHRjb25zb2xlLnRpbWVFbmQgJ2F1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvbidcblx0XHRcdFx0Z29fbmV4dCA9IHRydWVcblxuXHRcdFx0Y2F0Y2ggZVxuXHRcdFx0XHRjb25zb2xlLmVycm9yIFwiQVVUTyBBVVRPX0ZJTklTSF9QUk9DRVNTX0RFTEVHQVRJT04gRVJST1I6IFwiXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IgZS5zdGFja1xuXHRcdFx0XHRnb19uZXh0ID0gdHJ1ZVxuXG5cdFx0LCAoZSktPlxuXHRcdFx0Y29uc29sZS5sb2cgJ0ZhaWxlZCB0byBiaW5kIGVudmlyb25tZW50OiBhdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24uY29mZmVlJ1xuXHRcdFx0Y29uc29sZS5sb2cgZS5zdGFja1xuIiwiXG4vKlxuKiAgICAqICAgICogICAgKiAgICAqICAgICpcbuKUrCAgICDilKwgICAg4pSsICAgIOKUrCAgICDilKwgICAg4pSsXG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIHxcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSUIGRheSBvZiB3ZWVrICgwIC0gNykgKDAgb3IgNyBpcyBTdW4pXG7ilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSAIG1vbnRoICgxIC0gMTIpXG7ilIIgICAg4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgZGF5IG9mIG1vbnRoICgxIC0gMzEpXG7ilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBob3VyICgwIC0gMjMpXG7ilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIG1pbnV0ZSAoMCAtIDU5KVxu4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIHNlY29uZCAoMCAtIDU5LCBPUFRJT05BTClcbiAqL1xuTWV0ZW9yLnN0YXJ0dXAoZnVuY3Rpb24oKSB7XG4gIHZhciBnb19uZXh0LCByZWYsIHJ1bGUsIHNjaGVkdWxlO1xuICBpZiAoKHJlZiA9IE1ldGVvci5zZXR0aW5ncy5jcm9uKSAhPSBudWxsID8gcmVmLmF1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvbiA6IHZvaWQgMCkge1xuICAgIHNjaGVkdWxlID0gcmVxdWlyZSgnbm9kZS1zY2hlZHVsZScpO1xuICAgIHJ1bGUgPSBNZXRlb3Iuc2V0dGluZ3MuY3Jvbi5hdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb247XG4gICAgZ29fbmV4dCA9IHRydWU7XG4gICAgcmV0dXJuIHNjaGVkdWxlLnNjaGVkdWxlSm9iKHJ1bGUsIE1ldGVvci5iaW5kRW52aXJvbm1lbnQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZSwgbm93O1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFnb19uZXh0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGdvX25leHQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS50aW1lKCdhdXRvX2ZpbmlzaF9wcm9jZXNzX2RlbGVnYXRpb24nKTtcbiAgICAgICAgbm93ID0gbmV3IERhdGU7XG4gICAgICAgIGRiLnByb2Nlc3NfZGVsZWdhdGlvbl9ydWxlcy51cGRhdGUoe1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgZW5kX3RpbWU6IHtcbiAgICAgICAgICAgICRsdGU6IG5vd1xuICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICRzZXQ6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUudGltZUVuZCgnYXV0b19maW5pc2hfcHJvY2Vzc19kZWxlZ2F0aW9uJyk7XG4gICAgICAgIHJldHVybiBnb19uZXh0ID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGUgPSBlcnJvcjtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkFVVE8gQVVUT19GSU5JU0hfUFJPQ0VTU19ERUxFR0FUSU9OIEVSUk9SOiBcIik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgICAgIHJldHVybiBnb19uZXh0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbihlKSB7XG4gICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGJpbmQgZW52aXJvbm1lbnQ6IGF1dG9fZmluaXNoX3Byb2Nlc3NfZGVsZWdhdGlvbi5jb2ZmZWUnKTtcbiAgICAgIHJldHVybiBjb25zb2xlLmxvZyhlLnN0YWNrKTtcbiAgICB9KSk7XG4gIH1cbn0pO1xuIiwiIyMjXG4qICAgICogICAgKiAgICAqICAgICogICAgKlxu4pSsICAgIOKUrCAgICDilKwgICAg4pSsICAgIOKUrCAgICDilKxcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAgfFxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilJQgZGF5IG9mIHdlZWsgKDAgLSA3KSAoMCBvciA3IGlzIFN1bilcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIAgbW9udGggKDEgLSAxMilcbuKUgiAgICDilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBkYXkgb2YgbW9udGggKDEgLSAzMSlcbuKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIGhvdXIgKDAgLSAyMylcbuKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgbWludXRlICgwIC0gNTkpXG7ilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgc2Vjb25kICgwIC0gNTksIE9QVElPTkFMKVxuIyMjXG5NZXRlb3Iuc3RhcnR1cCAtPlxuXHRpZiBNZXRlb3Iuc2V0dGluZ3MuY3Jvbj8udGltZW91dF9hdXRvX3N1Ym1pdFxuXHRcdHNjaGVkdWxlID0gcmVxdWlyZSgnbm9kZS1zY2hlZHVsZScpXG5cdFx0IyDlrprml7bmiafooYzlkIzmraVcblx0XHRydWxlID0gTWV0ZW9yLnNldHRpbmdzLmNyb24udGltZW91dF9hdXRvX3N1Ym1pdFxuXHRcdGdvX25leHQgPSB0cnVlXG5cdFx0c2NoZWR1bGUuc2NoZWR1bGVKb2IgcnVsZSwgTWV0ZW9yLmJpbmRFbnZpcm9ubWVudCAoKS0+XG5cdFx0XHR0cnlcblx0XHRcdFx0aWYgIWdvX25leHRcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Z29fbmV4dCA9IGZhbHNlXG5cdFx0XHRcdGNvbnNvbGUudGltZSAndGltZW91dF9hdXRvX3N1Ym1pdCdcblxuXHRcdFx0XHR1dWZsb3dNYW5hZ2VyLnRpbWVvdXRBdXRvU3VibWl0KClcblxuXHRcdFx0XHRjb25zb2xlLnRpbWVFbmQgJ3RpbWVvdXRfYXV0b19zdWJtaXQnXG5cdFx0XHRcdGdvX25leHQgPSB0cnVlXG5cblx0XHRcdGNhdGNoIGVcblx0XHRcdFx0Y29uc29sZS5lcnJvciBcIkFVVE8gVElNRU9VVF9BVVRPX1NVQk1JVCBFUlJPUjogXCJcblx0XHRcdFx0Y29uc29sZS5lcnJvciBlLnN0YWNrXG5cdFx0XHRcdGdvX25leHQgPSB0cnVlXG5cblx0XHQsIChlKS0+XG5cdFx0XHRjb25zb2xlLmxvZyAnRmFpbGVkIHRvIGJpbmQgZW52aXJvbm1lbnQ6IHRpbWVvdXRfYXV0b19zdWJtaXQuY29mZmVlJ1xuXHRcdFx0Y29uc29sZS5sb2cgZS5zdGFja1xuXG5NZXRlb3IubWV0aG9kc1xuXHR0aW1lb3V0X2F1dG9fc3VibWl0OiAoaW5zX2lkKS0+XG5cdFx0dXVmbG93TWFuYWdlci50aW1lb3V0QXV0b1N1Ym1pdChpbnNfaWQpXG5cdFx0cmV0dXJuIHRydWVcblxuXG4iLCJcbi8qXG4qICAgICogICAgKiAgICAqICAgICogICAgKlxu4pSsICAgIOKUrCAgICDilKwgICAg4pSsICAgIOKUrCAgICDilKxcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAgfFxu4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilJQgZGF5IG9mIHdlZWsgKDAgLSA3KSAoMCBvciA3IGlzIFN1bilcbuKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIAgbW9udGggKDEgLSAxMilcbuKUgiAgICDilIIgICAg4pSCICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBkYXkgb2YgbW9udGggKDEgLSAzMSlcbuKUgiAgICDilIIgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIGhvdXIgKDAgLSAyMylcbuKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgbWludXRlICgwIC0gNTkpXG7ilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgc2Vjb25kICgwIC0gNTksIE9QVElPTkFMKVxuICovXG5NZXRlb3Iuc3RhcnR1cChmdW5jdGlvbigpIHtcbiAgdmFyIGdvX25leHQsIHJlZiwgcnVsZSwgc2NoZWR1bGU7XG4gIGlmICgocmVmID0gTWV0ZW9yLnNldHRpbmdzLmNyb24pICE9IG51bGwgPyByZWYudGltZW91dF9hdXRvX3N1Ym1pdCA6IHZvaWQgMCkge1xuICAgIHNjaGVkdWxlID0gcmVxdWlyZSgnbm9kZS1zY2hlZHVsZScpO1xuICAgIHJ1bGUgPSBNZXRlb3Iuc2V0dGluZ3MuY3Jvbi50aW1lb3V0X2F1dG9fc3VibWl0O1xuICAgIGdvX25leHQgPSB0cnVlO1xuICAgIHJldHVybiBzY2hlZHVsZS5zY2hlZHVsZUpvYihydWxlLCBNZXRlb3IuYmluZEVudmlyb25tZW50KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGU7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWdvX25leHQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZ29fbmV4dCA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLnRpbWUoJ3RpbWVvdXRfYXV0b19zdWJtaXQnKTtcbiAgICAgICAgdXVmbG93TWFuYWdlci50aW1lb3V0QXV0b1N1Ym1pdCgpO1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ3RpbWVvdXRfYXV0b19zdWJtaXQnKTtcbiAgICAgICAgcmV0dXJuIGdvX25leHQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZSA9IGVycm9yO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiQVVUTyBUSU1FT1VUX0FVVE9fU1VCTUlUIEVSUk9SOiBcIik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG4gICAgICAgIHJldHVybiBnb19uZXh0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbihlKSB7XG4gICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGJpbmQgZW52aXJvbm1lbnQ6IHRpbWVvdXRfYXV0b19zdWJtaXQuY29mZmVlJyk7XG4gICAgICByZXR1cm4gY29uc29sZS5sb2coZS5zdGFjayk7XG4gICAgfSkpO1xuICB9XG59KTtcblxuTWV0ZW9yLm1ldGhvZHMoe1xuICB0aW1lb3V0X2F1dG9fc3VibWl0OiBmdW5jdGlvbihpbnNfaWQpIHtcbiAgICB1dWZsb3dNYW5hZ2VyLnRpbWVvdXRBdXRvU3VibWl0KGluc19pZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuIiwiTWV0ZW9yLnN0YXJ0dXAgKCktPlxuXHRUYWJ1bGFyVGFibGVzLnJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXIgPSBuZXcgVGFidWxhci5UYWJsZVxuXHRcdG5hbWU6IFwicmVsYXRlZF9pbnN0YW5jZXNfdGFidWxhclwiXG5cdFx0Y29sbGVjdGlvbjogZGIuaW5zdGFuY2VzXG5cdFx0Y29sdW1uczogW1xuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcIl9pZFwiLFxuXHRcdFx0XHR0aXRsZTogJzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwicmV2ZXJzZVwiIGlkPVwicmV2ZXJzZVwiPicsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHdpZHRoOiAnMXB4Jyxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aW5wdXQgPSAnPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwicmVsYXRlZC1pbnN0YW5jZXMtbGlzdC1jaGVja2JveFwiIG5hbWU9XCJyZWxhdGVkX2luc3RhbmNlc19pZHNcIiBpZD1cInJlbGF0ZWRfaW5zdGFuY2VzX2lkc1wiIHZhbHVlPVwiJyArIGRvYy5faWQgKyAnXCInXG5cblx0XHRcdFx0XHRpZiBUYWJ1bGFyVGFibGVzLnJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXIucmVsYXRlZF9pbnN0YW5jZXM/LmluY2x1ZGVzKGRvYy5faWQpXG5cdFx0XHRcdFx0XHRpbnB1dCArPSBcIiBjaGVja2VkIFwiXG5cblx0XHRcdFx0XHRpbnB1dCArPSBcIj5cIlxuXHRcdFx0XHRcdHJldHVybiBpbnB1dFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJuYW1lXCIsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHdpZHRoOiAnNDUlJyxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aHJlZiA9ICcnO1xuXHRcdFx0XHRcdGlmIE1ldGVvci5pc0NsaWVudCAmJiAoU3RlZWRvcy5pc01vYmlsZSgpIHx8IFN0ZWVkb3MuaXNDb3Jkb3ZhKCkpXG5cdFx0XHRcdFx0XHRocmVmID0gJydcblxuXHRcdFx0XHRcdGFic29sdXRlID0gZmFsc2VcblxuXHRcdFx0XHRcdGlmIE1ldGVvci5pc1NlcnZlclxuXHRcdFx0XHRcdFx0YWJzb2x1dGUgPSB0aGlzLmFic29sdXRlXG5cdFx0XHRcdFx0aWYgYWJzb2x1dGVcblx0XHRcdFx0XHRcdGhyZWYgPSBNZXRlb3IuYWJzb2x1dGVVcmwoXCJ3b3JrZmxvdy9zcGFjZS9cIitkb2Muc3BhY2UrXCIvdmlldy9yZWFkb25seS9cIiArIGRvYy5faWQgKyAnP2hpZGVfdHJhY2VzPTAnKVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGhyZWYgPSBTdGVlZG9zLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIrZG9jLnNwYWNlK1wiL3ZpZXcvcmVhZG9ubHkvXCIgKyBkb2MuX2lkICsgJz9oaWRlX3RyYWNlcz0wJylcblx0XHRcdFx0XHRyZXR1cm4gXCI8YSBkYXRhLWlkPScje2RvYy5faWR9JyB0YXJnZXQ9J19ibGFuaycgaHJlZj0nXCIraHJlZitcIic+XCIgKyBkb2MubmFtZSArIFwiPC9hPlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImFwcGxpY2FudF9uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9uYW1lXCIpLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImZsb3dfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19mbG93XCIpLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImN1cnJlbnRfc3RlcF9uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX2Zsb3dcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYy5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiXG5cdFx0XHRcdFx0XHRqdWRnZSA9IGRvYy5maW5hbF9kZWNpc2lvbiB8fCBcImFwcHJvdmVkXCJcblxuXHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lID0gZG9jLmN1cnJlbnRfc3RlcF9uYW1lIHx8ICcnXG5cblx0XHRcdFx0XHRyZXR1cm4gXCJcIlwiXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwLWN1cnJlbnQtc3RhdGUgI3tqdWRnZX1cIj4je3N0ZXBfY3VycmVudF9uYW1lfTwvZGl2PlxuXHRcdFx0XHRcdFx0XCJcIlwiXG5cdFx0XHR9XG5cdFx0XVxuXG5cdFx0ZG9tOiBcInRwXCIsXG5cdFx0bGVuZ3RoQ2hhbmdlOiBmYWxzZSxcblx0XHRleHRyYUZpZWxkczogW1wic3RhdGVcIiwgXCJmaW5hbF9kZWNpc2lvblwiLCBcInNwYWNlXCIsIFwia2V5d29yZHNcIl0sXG5cdFx0cGFnZUxlbmd0aDogMTAsXG5cdFx0aW5mbzogZmFsc2UsXG5cdFx0c2VhcmNoaW5nOiB0cnVlLFxuXHRcdHJlc3BvbnNpdmU6XG5cdFx0XHRkZXRhaWxzOiBmYWxzZVxuXHRcdGF1dG9XaWR0aDogZmFsc2UsXG5cdFx0Y2hhbmdlU2VsZWN0b3I6IChzZWxlY3RvciwgdXNlcklkKSAtPlxuXHRcdFx0dW5sZXNzIHVzZXJJZFxuXHRcdFx0XHRyZXR1cm4ge19pZDogLTF9XG5cblx0XHRcdHNwYWNlSWQgPSBzZWxlY3Rvci5zcGFjZVxuXHRcdFx0dW5sZXNzIHNwYWNlSWRcblx0XHRcdFx0aWYgc2VsZWN0b3I/LiRhbmQ/Lmxlbmd0aCA+IDBcblx0XHRcdFx0XHRzcGFjZUlkID0gc2VsZWN0b3IuJGFuZC5nZXRQcm9wZXJ0eSgnc3BhY2UnKVswXVxuXHRcdFx0dW5sZXNzIHNwYWNlSWRcblx0XHRcdFx0cmV0dXJuIHtfaWQ6IC0xfVxuXHRcdFx0c3BhY2UgPSBkYi5zcGFjZXMuZmluZE9uZShzcGFjZUlkKVxuXHRcdFx0aWYgIXNwYWNlXG5cdFx0XHRcdHNlbGVjdG9yLnN0YXRlID0gXCJub25lXCJcblx0XHRcdGlmICFzcGFjZS5hZG1pbnMuaW5jbHVkZXModXNlcklkKVxuXG5cdFx0XHRcdGZsb3dfaWRzID0gW11cblx0XHRcdFx0Y3VyU3BhY2VVc2VyID0gZGIuc3BhY2VfdXNlcnMuZmluZE9uZSh7XG5cdFx0XHRcdFx0c3BhY2U6IHNwYWNlSWQsXG5cdFx0XHRcdFx0J3VzZXInOiB1c2VySWRcblx0XHRcdFx0fSlcblx0XHRcdFx0aWYgY3VyU3BhY2VVc2VyXG5cdFx0XHRcdFx0b3JnYW5pemF0aW9ucyA9IGRiLm9yZ2FuaXphdGlvbnMuZmluZCh7XG5cdFx0XHRcdFx0XHRfaWQ6IHtcblx0XHRcdFx0XHRcdFx0JGluOiBjdXJTcGFjZVVzZXIub3JnYW5pemF0aW9uc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmZldGNoKClcblx0XHRcdFx0XHRmbG93cyA9IGRiLmZsb3dzLmZpbmQoeyBzcGFjZTogc3BhY2VJZCB9KVxuXHRcdFx0XHRcdGZsb3dzLmZvckVhY2ggKGZsKS0+XG5cdFx0XHRcdFx0XHRpZiBXb3JrZmxvd01hbmFnZXIuY2FuTW9uaXRvcihmbCwgY3VyU3BhY2VVc2VyLCBvcmdhbml6YXRpb25zKSB8fCBXb3JrZmxvd01hbmFnZXIuY2FuQWRtaW4oZmwsIGN1clNwYWNlVXNlciwgb3JnYW5pemF0aW9ucylcblx0XHRcdFx0XHRcdFx0Zmxvd19pZHMucHVzaChmbC5faWQpXG5cblx0XHRcdFx0aWYgc2VsZWN0b3I/LiRhbmQ/Lmxlbmd0aCA+IDBcblx0XHRcdFx0XHRzZWxlY3Rvci4kYW5kWzBdLiRvciA9IFt7c3VibWl0dGVyOiB1c2VySWR9LCB7YXBwbGljYW50OiB1c2VySWR9LCB7aW5ib3hfdXNlcnM6IHVzZXJJZH0sIHtvdXRib3hfdXNlcnM6IHVzZXJJZH0sXG5cdFx0XHRcdFx0XHRcdHtjY191c2VyczogdXNlcklkfSwgeyBmbG93OiB7ICRpbjogZmxvd19pZHMgfSB9XVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0Xy5leHRlbmQgc2VsZWN0b3IsIHtcblx0XHRcdFx0XHRcdCRvcjogW3tzdWJtaXR0ZXI6IHVzZXJJZH0sIHthcHBsaWNhbnQ6IHVzZXJJZH0sIHtpbmJveF91c2VyczogdXNlcklkfSwge291dGJveF91c2VyczogdXNlcklkfSxcblx0XHRcdFx0XHRcdFx0e2NjX3VzZXJzOiB1c2VySWR9LCB7IGZsb3c6IHsgJGluOiBmbG93X2lkcyB9IH1dXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2VsZWN0b3IiLCJNZXRlb3Iuc3RhcnR1cChmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFRhYnVsYXJUYWJsZXMucmVsYXRlZF9pbnN0YW5jZXNfdGFidWxhciA9IG5ldyBUYWJ1bGFyLlRhYmxlKHtcbiAgICBuYW1lOiBcInJlbGF0ZWRfaW5zdGFuY2VzX3RhYnVsYXJcIixcbiAgICBjb2xsZWN0aW9uOiBkYi5pbnN0YW5jZXMsXG4gICAgY29sdW1uczogW1xuICAgICAge1xuICAgICAgICBkYXRhOiBcIl9pZFwiLFxuICAgICAgICB0aXRsZTogJzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwicmV2ZXJzZVwiIGlkPVwicmV2ZXJzZVwiPicsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdpZHRoOiAnMXB4JyxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBpbnB1dCwgcmVmO1xuICAgICAgICAgIGlucHV0ID0gJzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInJlbGF0ZWQtaW5zdGFuY2VzLWxpc3QtY2hlY2tib3hcIiBuYW1lPVwicmVsYXRlZF9pbnN0YW5jZXNfaWRzXCIgaWQ9XCJyZWxhdGVkX2luc3RhbmNlc19pZHNcIiB2YWx1ZT1cIicgKyBkb2MuX2lkICsgJ1wiJztcbiAgICAgICAgICBpZiAoKHJlZiA9IFRhYnVsYXJUYWJsZXMucmVsYXRlZF9pbnN0YW5jZXNfdGFidWxhci5yZWxhdGVkX2luc3RhbmNlcykgIT0gbnVsbCA/IHJlZi5pbmNsdWRlcyhkb2MuX2lkKSA6IHZvaWQgMCkge1xuICAgICAgICAgICAgaW5wdXQgKz0gXCIgY2hlY2tlZCBcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5wdXQgKz0gXCI+XCI7XG4gICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibmFtZVwiLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlLFxuICAgICAgICB3aWR0aDogJzQ1JScsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgYWJzb2x1dGUsIGhyZWY7XG4gICAgICAgICAgaHJlZiA9ICcnO1xuICAgICAgICAgIGlmIChNZXRlb3IuaXNDbGllbnQgJiYgKFN0ZWVkb3MuaXNNb2JpbGUoKSB8fCBTdGVlZG9zLmlzQ29yZG92YSgpKSkge1xuICAgICAgICAgICAgaHJlZiA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhYnNvbHV0ZSA9IGZhbHNlO1xuICAgICAgICAgIGlmIChNZXRlb3IuaXNTZXJ2ZXIpIHtcbiAgICAgICAgICAgIGFic29sdXRlID0gdGhpcy5hYnNvbHV0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFic29sdXRlKSB7XG4gICAgICAgICAgICBocmVmID0gTWV0ZW9yLmFic29sdXRlVXJsKFwid29ya2Zsb3cvc3BhY2UvXCIgKyBkb2Muc3BhY2UgKyBcIi92aWV3L3JlYWRvbmx5L1wiICsgZG9jLl9pZCArICc/aGlkZV90cmFjZXM9MCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBocmVmID0gU3RlZWRvcy5hYnNvbHV0ZVVybChcIndvcmtmbG93L3NwYWNlL1wiICsgZG9jLnNwYWNlICsgXCIvdmlldy9yZWFkb25seS9cIiArIGRvYy5faWQgKyAnP2hpZGVfdHJhY2VzPTAnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIChcIjxhIGRhdGEtaWQ9J1wiICsgZG9jLl9pZCArIFwiJyB0YXJnZXQ9J19ibGFuaycgaHJlZj0nXCIpICsgaHJlZiArIFwiJz5cIiArIGRvYy5uYW1lICsgXCI8L2E+XCI7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJhcHBsaWNhbnRfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfbmFtZVwiKSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImZsb3dfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19mbG93XCIpLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiY3VycmVudF9zdGVwX25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfZmxvd1wiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBqdWRnZSwgc3RlcF9jdXJyZW50X25hbWU7XG4gICAgICAgICAgaWYgKGRvYy5zdGF0ZSA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgICAganVkZ2UgPSBkb2MuZmluYWxfZGVjaXNpb24gfHwgXCJhcHByb3ZlZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZSA9IGRvYy5jdXJyZW50X3N0ZXBfbmFtZSB8fCAnJztcbiAgICAgICAgICByZXR1cm4gXCI8ZGl2IGNsYXNzPVxcXCJzdGVwLWN1cnJlbnQtc3RhdGUgXCIgKyBqdWRnZSArIFwiXFxcIj5cIiArIHN0ZXBfY3VycmVudF9uYW1lICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZG9tOiBcInRwXCIsXG4gICAgbGVuZ3RoQ2hhbmdlOiBmYWxzZSxcbiAgICBleHRyYUZpZWxkczogW1wic3RhdGVcIiwgXCJmaW5hbF9kZWNpc2lvblwiLCBcInNwYWNlXCIsIFwia2V5d29yZHNcIl0sXG4gICAgcGFnZUxlbmd0aDogMTAsXG4gICAgaW5mbzogZmFsc2UsXG4gICAgc2VhcmNoaW5nOiB0cnVlLFxuICAgIHJlc3BvbnNpdmU6IHtcbiAgICAgIGRldGFpbHM6IGZhbHNlXG4gICAgfSxcbiAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgIGNoYW5nZVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvciwgdXNlcklkKSB7XG4gICAgICB2YXIgY3VyU3BhY2VVc2VyLCBmbG93X2lkcywgZmxvd3MsIG9yZ2FuaXphdGlvbnMsIHJlZiwgcmVmMSwgc3BhY2UsIHNwYWNlSWQ7XG4gICAgICBpZiAoIXVzZXJJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9pZDogLTFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHNwYWNlSWQgPSBzZWxlY3Rvci5zcGFjZTtcbiAgICAgIGlmICghc3BhY2VJZCkge1xuICAgICAgICBpZiAoKHNlbGVjdG9yICE9IG51bGwgPyAocmVmID0gc2VsZWN0b3IuJGFuZCkgIT0gbnVsbCA/IHJlZi5sZW5ndGggOiB2b2lkIDAgOiB2b2lkIDApID4gMCkge1xuICAgICAgICAgIHNwYWNlSWQgPSBzZWxlY3Rvci4kYW5kLmdldFByb3BlcnR5KCdzcGFjZScpWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXNwYWNlSWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaWQ6IC0xXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzcGFjZSA9IGRiLnNwYWNlcy5maW5kT25lKHNwYWNlSWQpO1xuICAgICAgaWYgKCFzcGFjZSkge1xuICAgICAgICBzZWxlY3Rvci5zdGF0ZSA9IFwibm9uZVwiO1xuICAgICAgfVxuICAgICAgaWYgKCFzcGFjZS5hZG1pbnMuaW5jbHVkZXModXNlcklkKSkge1xuICAgICAgICBmbG93X2lkcyA9IFtdO1xuICAgICAgICBjdXJTcGFjZVVzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHtcbiAgICAgICAgICBzcGFjZTogc3BhY2VJZCxcbiAgICAgICAgICAndXNlcic6IHVzZXJJZFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN1clNwYWNlVXNlcikge1xuICAgICAgICAgIG9yZ2FuaXphdGlvbnMgPSBkYi5vcmdhbml6YXRpb25zLmZpbmQoe1xuICAgICAgICAgICAgX2lkOiB7XG4gICAgICAgICAgICAgICRpbjogY3VyU3BhY2VVc2VyLm9yZ2FuaXphdGlvbnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS5mZXRjaCgpO1xuICAgICAgICAgIGZsb3dzID0gZGIuZmxvd3MuZmluZCh7XG4gICAgICAgICAgICBzcGFjZTogc3BhY2VJZFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZsb3dzLmZvckVhY2goZnVuY3Rpb24oZmwpIHtcbiAgICAgICAgICAgIGlmIChXb3JrZmxvd01hbmFnZXIuY2FuTW9uaXRvcihmbCwgY3VyU3BhY2VVc2VyLCBvcmdhbml6YXRpb25zKSB8fCBXb3JrZmxvd01hbmFnZXIuY2FuQWRtaW4oZmwsIGN1clNwYWNlVXNlciwgb3JnYW5pemF0aW9ucykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZsb3dfaWRzLnB1c2goZmwuX2lkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHNlbGVjdG9yICE9IG51bGwgPyAocmVmMSA9IHNlbGVjdG9yLiRhbmQpICE9IG51bGwgPyByZWYxLmxlbmd0aCA6IHZvaWQgMCA6IHZvaWQgMCkgPiAwKSB7XG4gICAgICAgICAgc2VsZWN0b3IuJGFuZFswXS4kb3IgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN1Ym1pdHRlcjogdXNlcklkXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIGFwcGxpY2FudDogdXNlcklkXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIGluYm94X3VzZXJzOiB1c2VySWRcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgb3V0Ym94X3VzZXJzOiB1c2VySWRcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgY2NfdXNlcnM6IHVzZXJJZFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICBmbG93OiB7XG4gICAgICAgICAgICAgICAgJGluOiBmbG93X2lkc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfLmV4dGVuZChzZWxlY3Rvciwge1xuICAgICAgICAgICAgJG9yOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdWJtaXR0ZXI6IHVzZXJJZFxuICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgYXBwbGljYW50OiB1c2VySWRcbiAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGluYm94X3VzZXJzOiB1c2VySWRcbiAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIG91dGJveF91c2VyczogdXNlcklkXG4gICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBjY191c2VyczogdXNlcklkXG4gICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBmbG93OiB7XG4gICAgICAgICAgICAgICAgICAkaW46IGZsb3dfaWRzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJTdGVlZG9zLnN1YnNbXCJJbnN0YW5jZVRhYnVsYXJcIl0gPSBuZXcgU3Vic01hbmFnZXIoKVxuXG5cbl9oYW5kbGVMaXN0RmllbGRzID0gKGZpZWxkcykgLT5cblx0aW5zX2ZpZWxkcyA9IG5ldyBBcnJheSgpO1xuXG5cdGZpZWxkcz8uZm9yRWFjaCAoZiktPlxuXHRcdGlmIGYudHlwZSA9PSAndGFibGUnXG5cdFx0XHRjb25zb2xlLmxvZyAnaWdub3JlIG9waW5pb24gZmllbGQgaW4gdGFibGUnXG5cdFx0ZWxzZSBpZiBmLnR5cGUgPT0gJ3NlY3Rpb24nXG5cdFx0XHRmPy5maWVsZHM/LmZvckVhY2ggKGYxKS0+XG5cdFx0XHRcdGluc19maWVsZHMucHVzaCBmMVxuXHRcdGVsc2Vcblx0XHRcdGluc19maWVsZHMucHVzaCBmXG5cblx0cmV0dXJuIGluc19maWVsZHNcblxuXG51cGRhdGVUYWJ1bGFyVGl0bGUgPSAoKS0+XG5cbiMg5aaC5p6cY29sdW1uc+acieWKoOWHj++8jOivt+S/ruaUuVRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX3RhYmxlQ29sdW1ucyDlh73mlbBcbmluc3RhbmNlc0xpc3RUYWJsZVRhYnVsYXIgPSAoZmxvd0lkLCBmaWVsZHMpLT5cblx0b3B0aW9ucyA9IHtcblx0XHRuYW1lOiBcImluc3RhbmNlc1wiLFxuXHRcdGNvbGxlY3Rpb246IGRiLmluc3RhbmNlcyxcblx0XHRwdWI6IFwiaW5zdGFuY2VfdGFidWxhclwiLFxuXHRcdG9uVW5sb2FkOiAoKS0+XG5cdFx0XHRNZXRlb3Iuc2V0VGltZW91dChUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMsIDE1MClcblxuXHRcdGRyYXdDYWxsYmFjazogKHNldHRpbmdzKS0+XG5cdFx0XHRlbXB0eVRkID0gJChcIi5kYXRhVGFibGVzX2VtcHR5XCIpXG5cdFx0XHRpZiBlbXB0eVRkLmxlbmd0aFxuXHRcdFx0XHRlbXB0eVRkWzBdLmNvbFNwYW4gPSBcIjZcIlxuXHRcdFx0aWYgIVN0ZWVkb3MuaXNNb2JpbGUoKSAmJiAhU3RlZWRvcy5pc1BhZCgpXG5cdFx0XHRcdE1ldGVvci5zZXRUaW1lb3V0KFRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX3RhYmxlQ29sdW1ucywgMTUwKVxuXHRcdFx0XHQkKFwiLmluc3RhbmNlLWxpc3RcIikuc2Nyb2xsVG9wKDApLnJlYWR5IC0+XG5cdFx0XHRcdFx0JChcIi5pbnN0YW5jZS1saXN0XCIpLnBlcmZlY3RTY3JvbGxiYXIoXCJ1cGRhdGVcIilcblx0XHRcdGVsc2Vcblx0XHRcdFx0JChcIi5pbnN0YW5jZS1saXN0XCIpLnNjcm9sbFRvcCgwKVxuXG5cdFx0XHR0aXRsZSA9IHQgXCJwYWdlcl9pbnB1dF9oaW50XCJcblx0XHRcdGVsbGlwc2lzTGluayA9IHNldHRpbmdzLm9JbnN0YW5jZS5wYXJlbnQoKS5maW5kKCcucGFnaW5nX251bWJlcnMgLnBhZ2luYXRpb24gLmRpc2FibGVkIGEnKVxuXHRcdFx0ZWxsaXBzaXNMaW5rLmF0dHIoXCJ0aXRsZVwiLCB0aXRsZSkuY3NzKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKS5jbGljayAtPlxuXHRcdFx0XHRpZiAhJCh0aGlzKS5maW5kKCdpbnB1dCcpLmxlbmd0aFxuXHRcdFx0XHRcdGlucHV0ID0gJCgnPGlucHV0IGNsYXNzPVwicGFnaW5hdGVfaW5wdXQgZm9ybS1jb250cm9sIGlucHV0LXNtXCIgdHlwZT1cInRleHRcIiBzdHlsZT1cImJvcmRlcjogbm9uZTsgcGFkZGluZzowIDJweDtcIi8+Jylcblx0XHRcdFx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKClcblx0XHRcdFx0XHRcdGlucHV0LmNzcyh7XG5cdFx0XHRcdFx0XHRcdHdpZHRoOlwiNTJweFwiXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogXCIyMHB4XCJcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0aW5wdXQuY3NzKHtcblx0XHRcdFx0XHRcdFx0d2lkdGg6XCI1MnB4XCJcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBcIjE2cHhcIlxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRpbnB1dC5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmF0dHIoXCJwbGFjZWhvbGRlclwiLCB0aXRsZSlcblx0XHRcdFx0XHQkKHRoaXMpLmVtcHR5KCkuYXBwZW5kIGlucHV0XG5cdFx0XHRcdFx0Z29QYWdlID0gKGluZGV4KS0+XG5cdFx0XHRcdFx0XHRpZiBpbmRleCA+IDBcblx0XHRcdFx0XHRcdFx0cGFnZXMgPSBNYXRoLmNlaWwoc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpIC8gc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoKVxuXHRcdFx0XHRcdFx0XHRpZiBpbmRleCA+IHBhZ2VzXG5cdFx0XHRcdFx0XHRcdFx0IyDpobXnoIHotoXlh7rntKLlvJXml7bot7PovazliLDmnIDlkI7kuIDpobVcblx0XHRcdFx0XHRcdFx0XHRpbmRleCA9IHBhZ2VzXG5cdFx0XHRcdFx0XHRcdGluZGV4LS1cblx0XHRcdFx0XHRcdFx0c2V0dGluZ3Mub0luc3RhbmNlLkRhdGFUYWJsZSgpLnBhZ2UoaW5kZXgpLmRyYXcoJ3BhZ2UnKVxuXHRcdFx0XHRcdGlucHV0LmJsdXIgKGUpLT5cblx0XHRcdFx0XHRcdGN1cnJlbnRQYWdlID0gJCh0aGlzKS52YWwoKVxuXHRcdFx0XHRcdFx0Z29QYWdlIGN1cnJlbnRQYWdlXG5cdFx0XHRcdFx0XHQkKHRoaXMpLnBhcmVudCgpLmh0bWwgJy4uLidcblx0XHRcdFx0XHRpbnB1dC5rZXlkb3duIChlKS0+XG5cdFx0XHRcdFx0XHRpZihlLmtleUNvZGUudG9TdHJpbmcoKSA9PSBcIjEzXCIpXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRQYWdlID0gJCh0aGlzKS52YWwoKVxuXHRcdFx0XHRcdFx0XHRnb1BhZ2UgY3VycmVudFBhZ2VcblxuXHRcdGNyZWF0ZWRSb3c6IChyb3csIGRhdGEsIGRhdGFJbmRleCkgLT5cblx0XHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0XHRpZiBkYXRhLl9pZCA9PSBGbG93Um91dGVyLmN1cnJlbnQoKS5wYXJhbXMuaW5zdGFuY2VJZFxuXHRcdFx0XHRcdHJvdy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInNlbGVjdGVkXCIpXG5cdFx0Y29sdW1uczogW1xuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcIl9pZFwiLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdG1vZGlmaWVkU3RyaW5nID0gbW9tZW50KGRvYy5tb2RpZmllZCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG5cblx0XHRcdFx0XHRtb2RpZmllZCA9IGRvYy5tb2RpZmllZFxuXHRcdFx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCcgJiYgZG9jLnN0YXRlICE9ICdkcmFmdCdcblx0XHRcdFx0XHRcdG1vZGlmaWVkID0gZG9jLnN0YXJ0X2RhdGUgfHwgZG9jLm1vZGlmaWVkXG5cblx0XHRcdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnb3V0Ym94JyB8fCBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnbW9uaXRvcidcblx0XHRcdFx0XHRcdG1vZGlmaWVkID0gZG9jLnN1Ym1pdF9kYXRlIHx8IGRvYy5zdWJtaXRfZGF0ZVxuXG5cdFx0XHRcdFx0bW9kaWZpZWRGcm9tTm93ID0gU3RlZWRvcy5tb21lbnRSZWFjdGl2ZUZyb21Ob3cobW9kaWZpZWQpO1xuXHRcdFx0XHRcdGZsb3dfbmFtZSA9IGRvYy5mbG93X25hbWVcblx0XHRcdFx0XHRjY192aWV3ID0gXCJcIjtcblx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCJcIjtcblx0XHRcdFx0XHQjIOW9k+WJjeeUqOaIt+WcqGNjIHVzZXLkuK3vvIzkvYbmmK/kuI3lnKhpbmJveCB1c2Vyc+aXtuaJjeaYvuekuifkvKDpmIUn5paH5a2XXG5cdFx0XHRcdFx0aWYgZG9jLmlzX2NjICYmICFkb2MuaW5ib3hfdXNlcnM/LmluY2x1ZGVzKE1ldGVvci51c2VySWQoKSkgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94J1xuXHRcdFx0XHRcdFx0Y2NfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXyhcImluc3RhbmNlX2NjX3RpdGxlXCIpICsgXCIpPC9sYWJlbD4gXCJcblx0XHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+I3tmbG93X25hbWV9PHNwYW4+KCN7ZG9jLmN1cnJlbnRfc3RlcF9uYW1lfSk8L3NwYW4+PC9kaXY+XCJcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSAhPSAnZHJhZnQnICYmIGRvYy5jdXJyZW50X3N0ZXBfbmFtZVxuXHRcdFx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPiN7Zmxvd19uYW1lfTxzcGFuPigje2RvYy5jdXJyZW50X3N0ZXBfbmFtZX0pPC9zcGFuPjwvZGl2PlwiXG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+I3tmbG93X25hbWV9PC9kaXY+XCJcblxuXHRcdFx0XHRcdGFnZW50X3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdGlmIGRvYy5hZ2VudF91c2VyX25hbWUgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94J1xuXHRcdFx0XHRcdFx0YWdlbnRfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge3VzZXJOYW1lOiBkb2MuYWdlbnRfdXNlcl9uYW1lfSkgKyBcIik8L2xhYmVsPlwiXG5cblx0XHRcdFx0XHR1bnJlYWQgPSAnJ1xuXG5cdFx0XHRcdFx0IyBpc0Zhdm9yaXRlU2VsZWN0ZWQgPSBGYXZvcml0ZXMuaXNSZWNvcmRTZWxlY3RlZChcImluc3RhbmNlc1wiLCBkb2MuX2lkKVxuXHRcdFx0XHRcdCMgaWYgRmF2b3JpdGVzLmlzUmVjb3JkU2VsZWN0ZWQoXCJpbnN0YW5jZXNcIiwgZG9jLl9pZClcblx0XHRcdFx0XHQjIFx0dW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1pb3Mtc3Rhci1vdXRsaW5lIGluc3RhbmNlLWZhdm9yaXRlLXNlbGVjdGVkXCI+PC9pPidcblx0XHRcdFx0XHQjIGVsc2UgXG5cdFx0XHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94JyAmJiBkb2MuaXNfcmVhZCA9PSBmYWxzZVxuXHRcdFx0XHRcdFx0dW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPidcblx0XHRcdFx0XHRlbHNlIGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdtb25pdG9yJyAmJiBkb2MuaXNfaGlkZGVuID09IHRydWVcblx0XHRcdFx0XHRcdHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+J1xuXG5cdFx0XHRcdFx0cHJpb3JpdHlJY29uID0gXCJcIlxuXHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJcIlxuXHRcdFx0XHRcdHByaW9yaXR5VmFsdWUgPSBkb2MudmFsdWVzPy5wcmlvcml0eVxuXHRcdFx0XHRcdHN3aXRjaCBwcmlvcml0eVZhbHVlXG5cdFx0XHRcdFx0XHR3aGVuIFwi54m55oClXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcImRhbmdlclwiXG5cdFx0XHRcdFx0XHR3aGVuIFwi57Sn5oClXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIndhcm5pbmdcIlxuXHRcdFx0XHRcdFx0d2hlbiBcIuWKnuaWh1wiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJtdXRlZFwiXG5cdFx0XHRcdFx0aWYgcHJpb3JpdHlJY29uQ2xhc3Ncblx0XHRcdFx0XHRcdGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgPSBcImNvbG9yLXByaW9yaXR5IGNvbG9yLXByaW9yaXR5LSN7cHJpb3JpdHlJY29uQ2xhc3N9XCJcblxuXHRcdFx0XHRcdHJldHVybiBcIlwiXCJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS1yZWFkLWJhcic+I3t1bnJlYWR9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtbmFtZSAje2luc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3N9Jz4je2RvYy5uYW1lfSN7Y2Nfdmlld30je2FnZW50X3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj4je2RvYy5hcHBsaWNhbnRfbmFtZX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtZGV0YWlsJz4je3N0ZXBfY3VycmVudF9uYW1lX3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz0naW5zdGFuY2UtbW9kaWZpZWQnIHRpdGxlPScje21vZGlmaWVkU3RyaW5nfSc+I3ttb2RpZmllZEZyb21Ob3d9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcIlwiXCJcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZVwiKSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcIm5hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfbmFtZVwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0Y2NfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0IyDlvZPliY3nlKjmiLflnKhjYyB1c2Vy5Lit77yM5L2G5piv5LiN5ZyoaW5ib3ggdXNlcnPml7bmiY3mmL7npLon5Lyg6ZiFJ+aWh+Wtl1xuXHRcdFx0XHRcdGlmIGRvYy5pc19jYyAmJiAhZG9jLmluYm94X3VzZXJzPy5pbmNsdWRlcyhNZXRlb3IudXNlcklkKCkpICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0XHRcdGNjX3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oXCJpbnN0YW5jZV9jY190aXRsZVwiKSArIFwiKTwvbGFiZWw+IFwiXG5cblx0XHRcdFx0XHRhZ2VudF92aWV3ID0gXCJcIjtcblx0XHRcdFx0XHRpZiBkb2MuYWdlbnRfdXNlcl9uYW1lXG5cdFx0XHRcdFx0XHRhZ2VudF92aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKCdwcm9jZXNzX2RlbGVnYXRpb25fcnVsZXNfZGVzY3JpcHRpb24nLCB7dXNlck5hbWU6IGRvYy5hZ2VudF91c2VyX25hbWV9KSArIFwiKTwvbGFiZWw+XCJcblxuXHRcdFx0XHRcdHVucmVhZCA9ICcnXG5cblx0XHRcdFx0XHRpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnICYmIGRvYy5pc19yZWFkID09IGZhbHNlXG5cdFx0XHRcdFx0XHR1bnJlYWQgPSAnPGkgY2xhc3M9XCJpb24gaW9uLXJlY29yZCB1bnJlYWRcIj48L2k+J1xuXHRcdFx0XHRcdGVsc2UgaWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ21vbml0b3InICYmIGRvYy5pc19oaWRkZW4gPT0gdHJ1ZVxuXHRcdFx0XHRcdFx0dW5yZWFkID0gJzxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjwvaT4nXG5cblx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwiXCJcblx0XHRcdFx0XHRwcmlvcml0eVZhbHVlID0gZG9jLnZhbHVlcz8ucHJpb3JpdHlcblx0XHRcdFx0XHRzd2l0Y2ggcHJpb3JpdHlWYWx1ZVxuXHRcdFx0XHRcdFx0d2hlbiBcIueJueaApVwiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJkYW5nZXJcIlxuXHRcdFx0XHRcdFx0d2hlbiBcIue0p+aApVwiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJ3YXJuaW5nXCJcblx0XHRcdFx0XHRcdHdoZW4gXCLlip7mlodcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwibXV0ZWRcIlxuXHRcdFx0XHRcdGlmIHByaW9yaXR5SWNvbkNsYXNzXG5cdFx0XHRcdFx0XHRpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzID0gXCJjb2xvci1wcmlvcml0eSBjb2xvci1wcmlvcml0eS0je3ByaW9yaXR5SWNvbkNsYXNzfVwiXG5cdFx0XHRcdFx0cmV0dXJuIFwiXCJcIlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS1yZWFkLWJhcic+I3t1bnJlYWR9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLW5hbWUgI3tpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzfSc+I3tkb2MubmFtZX0je2NjX3ZpZXd9I3thZ2VudF92aWV3fTwvZGl2PlxuXHRcdFx0XHRcdFx0XCJcIlwiXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImFwcGxpY2FudF9uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9uYW1lXCIpLFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJzdWJtaXRfZGF0ZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19zdWJtaXRfZGF0ZVwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aWYgZG9jLnN1Ym1pdF9kYXRlXG5cdFx0XHRcdFx0XHRyZXR1cm4gbW9tZW50KGRvYy5zdWJtaXRfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cdFx0XHRcdCxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJmbG93X25hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfZmxvd1wiKSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiY3VycmVudF9zdGVwX25hbWVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfc3RlcF9jdXJyZW50X25hbWVcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYy5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiXG5cdFx0XHRcdFx0XHRqdWRnZSA9IGRvYy5maW5hbF9kZWNpc2lvbiB8fCBcImFwcHJvdmVkXCJcblxuXHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lID0gZG9jLmN1cnJlbnRfc3RlcF9uYW1lIHx8ICcnXG5cblx0XHRcdFx0XHRjY190YWcgPSAnJ1xuXG5cdFx0XHRcdFx0aWYgZG9jLmNjX2NvdW50ID4gMFxuXHRcdFx0XHRcdFx0Y2NfdGFnID0gVEFQaTE4bi5fXygnY2NfdGFnJylcblxuXHRcdFx0XHRcdHJldHVybiBcIlwiXCJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwLWN1cnJlbnQtc3RhdGUgI3tqdWRnZX1cIj4je3N0ZXBfY3VycmVudF9uYW1lfSN7Y2NfdGFnfTwvZGl2PlxuXHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJtb2RpZmllZFwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19tb2RpZmllZFwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0cmV0dXJuIG1vbWVudChkb2MubW9kaWZpZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXHRcdFx0XHQsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwic3RhcnRfZGF0ZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19zdGFydF9kYXRlXCIpLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2Muc3RhcnRfZGF0ZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG1vbWVudChkb2Muc3RhcnRfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cdFx0XHRcdCxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJteV9maW5pc2hfZGF0ZVwiLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2MubXlfZmluaXNoX2RhdGVcblx0XHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLm15X2ZpbmlzaF9kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcblx0XHRcdFx0LFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcIm1vZGlmaWVkXCIsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImtleXdvcmRzXCIsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImlzX2FyY2hpdmVkXCIsXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYz8udmFsdWVzPy5yZWNvcmRfbmVlZCAmJiBkb2MudmFsdWVzLnJlY29yZF9uZWVkID09IFwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRpZiBkb2M/LmlzX2FyY2hpdmVkXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0KFwiWUVTXCIpXG5cdFx0XHRcdFx0XHRyZXR1cm4gdChcIk5PXCIpXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH1cblx0XHRdLFxuXHRcdGRvbTogZG8gLT5cblx0XHRcdCMg5omL5py65LiK5LiN5pi+56S65LiA6aG15pi+56S65aSa5bCR5p2h6K6w5b2V6YCJ6aG5XG5cdFx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKClcblx0XHRcdFx0J3RwJ1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHQndHBsJ1xuXHRcdG9yZGVyOiBbWzQsIFwiZGVzY1wiXV0sXG5cdFx0ZXh0cmFGaWVsZHM6IFtcImZvcm1cIiwgXCJmbG93XCIsIFwiaW5ib3hfdXNlcnNcIiwgXCJzdGF0ZVwiLCBcInNwYWNlXCIsIFwiYXBwbGljYW50XCIsIFwiZm9ybV92ZXJzaW9uXCIsXG5cdFx0XHRcImZsb3dfdmVyc2lvblwiLCBcImlzX2NjXCIsIFwiY2NfY291bnRcIiwgXCJpc19yZWFkXCIsIFwiY3VycmVudF9zdGVwX25hbWVcIiwgXCJ2YWx1ZXNcIiwgXCJrZXl3b3Jkc1wiLCBcImZpbmFsX2RlY2lzaW9uXCIsIFwiZmxvd19uYW1lXCIsIFwiaXNfaGlkZGVuXCIsIFwiYWdlbnRfdXNlcl9uYW1lXCJdLFxuXHRcdGxlbmd0aENoYW5nZTogdHJ1ZSxcblx0XHRsZW5ndGhNZW51OiBbMTAsMTUsMjAsMjUsNTAsMTAwXSxcblx0XHRwYWdlTGVuZ3RoOiAxMCxcblx0XHRpbmZvOiBmYWxzZSxcblx0XHRzZWFyY2hpbmc6IHRydWUsXG5cdFx0cmVzcG9uc2l2ZTpcblx0XHRcdGRldGFpbHM6IGZhbHNlXG5cdFx0YXV0b1dpZHRoOiBmYWxzZSxcblx0XHRjaGFuZ2VTZWxlY3RvcjogKHNlbGVjdG9yLCB1c2VySWQpIC0+XG5cdFx0XHR1bmxlc3MgdXNlcklkXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHNwYWNlID0gc2VsZWN0b3Iuc3BhY2Vcblx0XHRcdHVubGVzcyBzcGFjZVxuXHRcdFx0XHRpZiBzZWxlY3Rvcj8uJGFuZD8ubGVuZ3RoID4gMFxuXHRcdFx0XHRcdHNwYWNlID0gc2VsZWN0b3IuJGFuZC5nZXRQcm9wZXJ0eSgnc3BhY2UnKVswXVxuXHRcdFx0dW5sZXNzIHNwYWNlXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHNwYWNlX3VzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHt1c2VyOiB1c2VySWQsIHNwYWNlOiBzcGFjZX0sIHtmaWVsZHM6IHtfaWQ6IDF9fSlcblx0XHRcdHVubGVzcyBzcGFjZV91c2VyXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHJldHVybiBzZWxlY3RvclxuXHRcdHBhZ2luZ1R5cGU6IFwibnVtYmVyc1wiXG5cdFx0XG5cdFx0IyBnZXRTb3J0OiAoc2VsZWN0b3IsIHNvcnQpIC0+IFxuXHRcdCMgXHRjb25zb2xlLmxvZygnc2VsZWN0b3I6JyxzZWxlY3Rvcilcblx0XHQjIFx0Y29uc29sZS5sb2coJ3NvcnQ6Jyxzb3J0KVxuXHRcdCMgXHRuZXdTb3J0ID0gW11cblx0XHQjIFx0Xy5lYWNoIHNlbGVjdG9yLCAodiwgaykgLT5cblx0XHQjIFx0XHRuZXdTb3J0LnB1c2goW2ssIDFdKVxuXHRcdCMgXHRuZXdTb3J0ID0gbmV3U29ydC5jb25jYXQoc29ydClcblx0XHQjIFx0Y29uc29sZS5sb2coJ25ld1NvcnQ6JyxuZXdTb3J0KVxuXHRcdCMgXHRyZXR1cm4gbmV3U29ydFxuXHR9XG5cblx0aWYgZmxvd0lkXG5cdFx0a2V5ID0gXCJpbnN0YW5jZUZsb3dcIiArIGZsb3dJZFxuXG5cdFx0b3B0aW9ucy5uYW1lID0ga2V5XG5cblx0XHRUYWJ1bGFyVGFibGVzLmluc3RhbmNlcy5maWVsZHMgPSBmaWVsZHNcblxuXHRcdGluc19maWVsZHMgPSBfaGFuZGxlTGlzdEZpZWxkcyBUYWJ1bGFyVGFibGVzLmluc3RhbmNlcy5maWVsZHNcblxuXHRcdGluc19maWVsZHMuZm9yRWFjaCAoZiktPlxuXHRcdFx0aWYgZi50eXBlICE9ICd0YWJsZScgJiYgZi5pc19saXN0X2Rpc3BsYXlcblx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLnB1c2hcblx0XHRcdFx0XHRkYXRhOiAoZi5uYW1lIHx8IGYuY29kZSksXG5cdFx0XHRcdFx0dGl0bGU6IHQoZi5uYW1lIHx8IGYuY29kZSksXG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXG5cdFx0XHRcdFx0XHR2YWx1ZXMgPSBkb2MudmFsdWVzIHx8IHt9XG5cblx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWVzW2YuY29kZV1cblxuXHRcdFx0XHRcdFx0c3dpdGNoIGYudHlwZVxuXHRcdFx0XHRcdFx0XHR3aGVuICd1c2VyJ1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWU/Lm5hbWVcblx0XHRcdFx0XHRcdFx0d2hlbiAnZ3JvdXAnXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8uZnVsbG5hbWVcblx0XHRcdFx0XHRcdFx0d2hlbiAnZGF0ZSdcblx0XHRcdFx0XHRcdFx0XHRpZiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cdFx0XHRcdFx0XHRcdHdoZW4gJ2RhdGVUaW1lJ1xuXHRcdFx0XHRcdFx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJylcblx0XHRcdFx0XHRcdFx0d2hlbiAnY2hlY2tib3gnXG5cdFx0XHRcdFx0XHRcdFx0aWYgdmFsdWUgPT0gdHJ1ZSB8fCB2YWx1ZSA9PSAndHJ1ZSdcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfeWVzXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfbm9cIik7XG5cdFx0XHRcdFx0XHRcdHdoZW4gJ29kYXRhJ1xuXHRcdFx0XHRcdFx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiBfLmlzQXJyYXkodmFsdWUpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gXy5wbHVjayh2YWx1ZSwgJ0BsYWJlbCcpLnRvU3RyaW5nKClcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZVsnQGxhYmVsJ11cblxuXHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cblxuXHRyZXR1cm4gb3B0aW9ucztcblxuXG4jIOWmguaenGNvbHVtbnPmnInliqDlh4/vvIzor7fkv67mlLlUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMg5Ye95pWwXG5pbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhciA9IChmbG93SWQsIGZpZWxkcyktPlxuXHRvcHRpb25zID0ge1xuXHRcdG5hbWU6IFwiaW5zdGFuY2VfdGFza3NcIixcblx0XHRjb2xsZWN0aW9uOiBkYi5pbnN0YW5jZV90YXNrcyxcblx0XHRwdWI6IFwiaW5zdGFuY2VfdGFza3NfdGFidWxhclwiLFxuXHRcdG9uVW5sb2FkOiAoKS0+XG5cdFx0XHRNZXRlb3Iuc2V0VGltZW91dChUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMsIDE1MClcblxuXHRcdGRyYXdDYWxsYmFjazogKHNldHRpbmdzKS0+XG5cdFx0XHRlbXB0eVRkID0gJChcIi5kYXRhVGFibGVzX2VtcHR5XCIpXG5cdFx0XHRpZiBlbXB0eVRkLmxlbmd0aFxuXHRcdFx0XHRlbXB0eVRkWzBdLmNvbFNwYW4gPSBcIjZcIlxuXHRcdFx0aWYgIVN0ZWVkb3MuaXNNb2JpbGUoKSAmJiAhU3RlZWRvcy5pc1BhZCgpXG5cdFx0XHRcdE1ldGVvci5zZXRUaW1lb3V0KFRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX3RhYmxlQ29sdW1ucywgMTUwKVxuXHRcdFx0XHQkKFwiLmluc3RhbmNlLWxpc3RcIikuc2Nyb2xsVG9wKDApLnJlYWR5IC0+XG5cdFx0XHRcdFx0JChcIi5pbnN0YW5jZS1saXN0XCIpLnBlcmZlY3RTY3JvbGxiYXIoXCJ1cGRhdGVcIilcblx0XHRcdGVsc2Vcblx0XHRcdFx0JChcIi5pbnN0YW5jZS1saXN0XCIpLnNjcm9sbFRvcCgwKVxuXG5cdFx0XHR0aXRsZSA9IHQgXCJwYWdlcl9pbnB1dF9oaW50XCJcblx0XHRcdGVsbGlwc2lzTGluayA9IHNldHRpbmdzLm9JbnN0YW5jZS5wYXJlbnQoKS5maW5kKCcucGFnaW5nX251bWJlcnMgLnBhZ2luYXRpb24gLmRpc2FibGVkIGEnKVxuXHRcdFx0ZWxsaXBzaXNMaW5rLmF0dHIoXCJ0aXRsZVwiLCB0aXRsZSkuY3NzKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKS5jbGljayAtPlxuXHRcdFx0XHRpZiAhJCh0aGlzKS5maW5kKCdpbnB1dCcpLmxlbmd0aFxuXHRcdFx0XHRcdGlucHV0ID0gJCgnPGlucHV0IGNsYXNzPVwicGFnaW5hdGVfaW5wdXQgZm9ybS1jb250cm9sIGlucHV0LXNtXCIgdHlwZT1cInRleHRcIiBzdHlsZT1cImJvcmRlcjogbm9uZTsgcGFkZGluZzowIDJweDtcIi8+Jylcblx0XHRcdFx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKClcblx0XHRcdFx0XHRcdGlucHV0LmNzcyh7XG5cdFx0XHRcdFx0XHRcdHdpZHRoOlwiNTJweFwiXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogXCIyMHB4XCJcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0aW5wdXQuY3NzKHtcblx0XHRcdFx0XHRcdFx0d2lkdGg6XCI1MnB4XCJcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBcIjE2cHhcIlxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRpbnB1dC5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmF0dHIoXCJwbGFjZWhvbGRlclwiLCB0aXRsZSlcblx0XHRcdFx0XHQkKHRoaXMpLmVtcHR5KCkuYXBwZW5kIGlucHV0XG5cdFx0XHRcdFx0Z29QYWdlID0gKGluZGV4KS0+XG5cdFx0XHRcdFx0XHRpZiBpbmRleCA+IDBcblx0XHRcdFx0XHRcdFx0cGFnZXMgPSBNYXRoLmNlaWwoc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpIC8gc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoKVxuXHRcdFx0XHRcdFx0XHRpZiBpbmRleCA+IHBhZ2VzXG5cdFx0XHRcdFx0XHRcdFx0IyDpobXnoIHotoXlh7rntKLlvJXml7bot7PovazliLDmnIDlkI7kuIDpobVcblx0XHRcdFx0XHRcdFx0XHRpbmRleCA9IHBhZ2VzXG5cdFx0XHRcdFx0XHRcdGluZGV4LS1cblx0XHRcdFx0XHRcdFx0c2V0dGluZ3Mub0luc3RhbmNlLkRhdGFUYWJsZSgpLnBhZ2UoaW5kZXgpLmRyYXcoJ3BhZ2UnKVxuXHRcdFx0XHRcdGlucHV0LmJsdXIgKGUpLT5cblx0XHRcdFx0XHRcdGN1cnJlbnRQYWdlID0gJCh0aGlzKS52YWwoKVxuXHRcdFx0XHRcdFx0Z29QYWdlIGN1cnJlbnRQYWdlXG5cdFx0XHRcdFx0XHQkKHRoaXMpLnBhcmVudCgpLmh0bWwgJy4uLidcblx0XHRcdFx0XHRpbnB1dC5rZXlkb3duIChlKS0+XG5cdFx0XHRcdFx0XHRpZihlLmtleUNvZGUudG9TdHJpbmcoKSA9PSBcIjEzXCIpXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRQYWdlID0gJCh0aGlzKS52YWwoKVxuXHRcdFx0XHRcdFx0XHRnb1BhZ2UgY3VycmVudFBhZ2VcblxuXHRcdGNyZWF0ZWRSb3c6IChyb3csIGRhdGEsIGRhdGFJbmRleCkgLT5cblx0XHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0XHRpZiBkYXRhLmluc3RhbmNlID09IEZsb3dSb3V0ZXIuY3VycmVudCgpLnBhcmFtcy5pbnN0YW5jZUlkXG5cdFx0XHRcdFx0cm93LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwic2VsZWN0ZWRcIilcblx0XHRjb2x1bW5zOiBbXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiX2lkXCIsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0bW9kaWZpZWRTdHJpbmcgPSBtb21lbnQoZG9jLm1vZGlmaWVkKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcblxuXHRcdFx0XHRcdG1vZGlmaWVkID0gZG9jLm1vZGlmaWVkXG5cdFx0XHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94JyAmJiBkb2MuaW5zdGFuY2Vfc3RhdGUgIT0gJ2RyYWZ0J1xuXHRcdFx0XHRcdFx0bW9kaWZpZWQgPSBkb2Muc3RhcnRfZGF0ZSB8fCBkb2MubW9kaWZpZWRcblxuXHRcdFx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdvdXRib3gnXG5cdFx0XHRcdFx0XHRtb2RpZmllZCA9IGRvYy5zdWJtaXRfZGF0ZSB8fCBkb2MubW9kaWZpZWRcblxuXHRcdFx0XHRcdG1vZGlmaWVkRnJvbU5vdyA9IFN0ZWVkb3MubW9tZW50UmVhY3RpdmVGcm9tTm93KG1vZGlmaWVkKTtcblx0XHRcdFx0XHRmbG93X25hbWUgPSBkb2MuZmxvd19uYW1lXG5cdFx0XHRcdFx0Y2NfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0IyDlvZPliY3nlKjmiLflnKhjYyB1c2Vy5Lit77yM5L2G5piv5LiN5ZyoaW5ib3ggdXNlcnPml7bmiY3mmL7npLon5Lyg6ZiFJ+aWh+Wtl1xuXHRcdFx0XHRcdGlmIGRvYy50eXBlID09ICdjYycgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94J1xuXHRcdFx0XHRcdFx0Y2NfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXyhcImluc3RhbmNlX2NjX3RpdGxlXCIpICsgXCIpPC9sYWJlbD4gXCJcblx0XHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+I3tmbG93X25hbWV9PHNwYW4+KCN7ZG9jLnN0ZXBfbmFtZX0pPC9zcGFuPjwvZGl2PlwiXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0aWYgZG9jLnN0ZXBfbmFtZVxuXHRcdFx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPiN7Zmxvd19uYW1lfTxzcGFuPigje2RvYy5zdGVwX25hbWV9KTwvc3Bhbj48L2Rpdj5cIlxuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPiN7Zmxvd19uYW1lfTwvZGl2PlwiXG5cblx0XHRcdFx0XHRhZ2VudF92aWV3ID0gXCJcIjtcblx0XHRcdFx0XHRpZiBkb2MuYWdlbnRfdXNlcl9uYW1lICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCdcblx0XHRcdFx0XHRcdGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHt1c2VyTmFtZTogZG9jLmFnZW50X3VzZXJfbmFtZX0pICsgXCIpPC9sYWJlbD5cIlxuXG5cdFx0XHRcdFx0dW5yZWFkID0gJydcblxuXHRcdFx0XHRcdGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdpbmJveCcgJiYgZG9jLmlzX3JlYWQgPT0gZmFsc2Vcblx0XHRcdFx0XHRcdHVucmVhZCA9ICc8aSBjbGFzcz1cImlvbiBpb24tcmVjb3JkIHVucmVhZFwiPjwvaT4nXG5cdFx0XHRcdFx0ZWxzZSBpZiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnbW9uaXRvcicgJiYgZG9jLmlzX2hpZGRlbiA9PSB0cnVlXG5cdFx0XHRcdFx0XHR1bnJlYWQgPSAnPGkgY2xhc3M9XCJmYSBmYS1sb2NrXCI+PC9pPidcblxuXHRcdFx0XHRcdHByaW9yaXR5SWNvbiA9IFwiXCJcblx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwiXCJcblx0XHRcdFx0XHRwcmlvcml0eVZhbHVlID0gZG9jLnZhbHVlcz8ucHJpb3JpdHlcblx0XHRcdFx0XHRzd2l0Y2ggcHJpb3JpdHlWYWx1ZVxuXHRcdFx0XHRcdFx0d2hlbiBcIueJueaApVwiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJkYW5nZXJcIlxuXHRcdFx0XHRcdFx0d2hlbiBcIue0p+aApVwiXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5SWNvbkNsYXNzID0gXCJ3YXJuaW5nXCJcblx0XHRcdFx0XHRcdHdoZW4gXCLlip7mlodcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwibXV0ZWRcIlxuXHRcdFx0XHRcdGlmIHByaW9yaXR5SWNvbkNsYXNzXG5cdFx0XHRcdFx0XHRpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzID0gXCJjb2xvci1wcmlvcml0eSBjb2xvci1wcmlvcml0eS0je3ByaW9yaXR5SWNvbkNsYXNzfVwiXG5cblx0XHRcdFx0XHRyZXR1cm4gXCJcIlwiXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPiN7dW5yZWFkfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLW5hbWUgI3tpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzfSc+I3tkb2MuaW5zdGFuY2VfbmFtZX0je2NjX3ZpZXd9I3thZ2VudF92aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4+I3tkb2MuYXBwbGljYW50X25hbWV9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9J2luc3RhbmNlLWRldGFpbCc+I3tzdGVwX2N1cnJlbnRfbmFtZV92aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9J2luc3RhbmNlLW1vZGlmaWVkJyB0aXRsZT0nI3ttb2RpZmllZFN0cmluZ30nPiN7bW9kaWZpZWRGcm9tTm93fTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XCJcIlwiXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImFwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfb3JnYW5pemF0aW9uX25hbWVcIiksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJpbnN0YW5jZV9uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX25hbWVcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGNjX3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuXHRcdFx0XHRcdCMg5b2T5YmN55So5oi35ZyoY2MgdXNlcuS4re+8jOS9huaYr+S4jeWcqGluYm94IHVzZXJz5pe25omN5pi+56S6J+S8oOmYhSfmloflrZdcblx0XHRcdFx0XHRpZiBkb2MuaXNfY2MgJiYgIWRvYy5pbmJveF91c2Vycz8uaW5jbHVkZXMoTWV0ZW9yLnVzZXJJZCgpKSAmJiBTZXNzaW9uLmdldChcImJveFwiKSA9PSAnaW5ib3gnXG5cdFx0XHRcdFx0XHRjY192aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKFwiaW5zdGFuY2VfY2NfdGl0bGVcIikgKyBcIik8L2xhYmVsPiBcIlxuXG5cdFx0XHRcdFx0YWdlbnRfdmlldyA9IFwiXCI7XG5cdFx0XHRcdFx0aWYgZG9jLmFnZW50X3VzZXJfbmFtZVxuXHRcdFx0XHRcdFx0YWdlbnRfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge3VzZXJOYW1lOiBkb2MuYWdlbnRfdXNlcl9uYW1lfSkgKyBcIik8L2xhYmVsPlwiXG5cblx0XHRcdFx0XHR1bnJlYWQgPSAnJ1xuXG5cdFx0XHRcdFx0aWYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT0gJ2luYm94JyAmJiBkb2MuaXNfcmVhZCA9PSBmYWxzZVxuXHRcdFx0XHRcdFx0dW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPidcblx0XHRcdFx0XHRlbHNlIGlmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09ICdtb25pdG9yJyAmJiBkb2MuaXNfaGlkZGVuID09IHRydWVcblx0XHRcdFx0XHRcdHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+J1xuXG5cdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIlwiXG5cdFx0XHRcdFx0cHJpb3JpdHlWYWx1ZSA9IGRvYy52YWx1ZXM/LnByaW9yaXR5XG5cdFx0XHRcdFx0c3dpdGNoIHByaW9yaXR5VmFsdWVcblx0XHRcdFx0XHRcdHdoZW4gXCLnibnmgKVcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwiZGFuZ2VyXCJcblx0XHRcdFx0XHRcdHdoZW4gXCLntKfmgKVcIlxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eUljb25DbGFzcyA9IFwid2FybmluZ1wiXG5cdFx0XHRcdFx0XHR3aGVuIFwi5Yqe5paHXCJcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHlJY29uQ2xhc3MgPSBcIm11dGVkXCJcblx0XHRcdFx0XHRpZiBwcmlvcml0eUljb25DbGFzc1xuXHRcdFx0XHRcdFx0aW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyA9IFwiY29sb3ItcHJpb3JpdHkgY29sb3ItcHJpb3JpdHktI3twcmlvcml0eUljb25DbGFzc31cIlxuXHRcdFx0XHRcdHJldHVybiBcIlwiXCJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPiN7dW5yZWFkfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPSdpbnN0YW5jZS1uYW1lICN7aW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzc30nPiN7ZG9jLmluc3RhbmNlX25hbWV9I3tjY192aWV3fSN7YWdlbnRfdmlld308L2Rpdj5cblx0XHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJhcHBsaWNhbnRfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19hcHBsaWNhbnRfbmFtZVwiKSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwic3VibWl0X2RhdGVcIixcblx0XHRcdFx0dGl0bGU6IHQoXCJpbnN0YW5jZXNfc3VibWl0X2RhdGVcIiksXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYy5zdWJtaXRfZGF0ZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG1vbWVudChkb2Muc3VibWl0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXHRcdFx0XHQsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwiZmxvd19uYW1lXCIsXG5cdFx0XHRcdHRpdGxlOiB0KFwiaW5zdGFuY2VzX2Zsb3dcIiksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcInN0ZXBfbmFtZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19zdGVwX2N1cnJlbnRfbmFtZVwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0aWYgZG9jLmluc3RhbmNlX3N0YXRlID09IFwiY29tcGxldGVkXCJcblx0XHRcdFx0XHRcdGp1ZGdlID0gZG9jLmp1ZGdlIHx8IFwiYXBwcm92ZWRcIlxuXG5cdFx0XHRcdFx0c3RlcF9jdXJyZW50X25hbWUgPSBkb2Muc3RlcF9uYW1lIHx8ICcnXG5cblx0XHRcdFx0XHRjY190YWcgPSAnJ1xuXG5cdFx0XHRcdFx0aWYgZG9jLmNjX2NvdW50ID4gMFxuXHRcdFx0XHRcdFx0Y2NfdGFnID0gVEFQaTE4bi5fXygnY2NfdGFnJylcblxuXHRcdFx0XHRcdHJldHVybiBcIlwiXCJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwLWN1cnJlbnQtc3RhdGUgI3tqdWRnZX1cIj4je3N0ZXBfY3VycmVudF9uYW1lfSN7Y2NfdGFnfTwvZGl2PlxuXHRcdFx0XHRcdFwiXCJcIlxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJtb2RpZmllZFwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19tb2RpZmllZFwiKSxcblx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cdFx0XHRcdFx0cmV0dXJuIG1vbWVudChkb2MubW9kaWZpZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuXHRcdFx0XHQsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRvcmRlcmFibGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGRhdGE6IFwic3RhcnRfZGF0ZVwiLFxuXHRcdFx0XHR0aXRsZTogdChcImluc3RhbmNlc19zdGFydF9kYXRlXCIpLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2Muc3RhcnRfZGF0ZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG1vbWVudChkb2Muc3RhcnRfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cdFx0XHRcdCxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdG9yZGVyYWJsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZGF0YTogXCJmaW5pc2hfZGF0ZVwiLFxuXHRcdFx0XHRyZW5kZXI6ICh2YWwsIHR5cGUsIGRvYykgLT5cblx0XHRcdFx0XHRpZiBkb2MuZmluaXNoX2RhdGVcblx0XHRcdFx0XHRcdHJldHVybiBtb21lbnQoZG9jLmZpbmlzaF9kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcblx0XHRcdFx0LFxuXHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0b3JkZXJhYmxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcIm1vZGlmaWVkXCIsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImtleXdvcmRzXCIsXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRkYXRhOiBcImlzX2FyY2hpdmVkXCIsXG5cdFx0XHRcdHJlbmRlcjogKHZhbCwgdHlwZSwgZG9jKSAtPlxuXHRcdFx0XHRcdGlmIGRvYz8udmFsdWVzPy5yZWNvcmRfbmVlZCAmJiBkb2MudmFsdWVzLnJlY29yZF9uZWVkID09IFwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRpZiBkb2M/LmlzX2FyY2hpdmVkXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0KFwiWUVTXCIpXG5cdFx0XHRcdFx0XHRyZXR1cm4gdChcIk5PXCIpXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdG9yZGVyYWJsZTogZmFsc2Vcblx0XHRcdH1cblx0XHRdLFxuXHRcdGRvbTogZG8gLT5cblx0XHRcdCMg5omL5py65LiK5LiN5pi+56S65LiA6aG15pi+56S65aSa5bCR5p2h6K6w5b2V6YCJ6aG5XG5cdFx0XHRpZiBTdGVlZG9zLmlzTW9iaWxlKClcblx0XHRcdFx0J3RwJ1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHQndHBsJ1xuXHRcdG9yZGVyOiBbWzQsIFwiZGVzY1wiXV0sXG5cdFx0ZXh0cmFGaWVsZHM6IFtcImluc3RhbmNlXCIsIFwiZm9ybVwiLCBcImZsb3dcIiwgXCJpbmJveF91c2Vyc1wiLCBcImluc3RhbmNlX3N0YXRlXCIsIFwic3BhY2VcIiwgXCJhcHBsaWNhbnRcIiwgXCJmb3JtX3ZlcnNpb25cIixcblx0XHRcdFwiZmxvd192ZXJzaW9uXCIsIFwidHlwZVwiLCBcImlzX3JlYWRcIiwgXCJzdGVwX25hbWVcIiwgXCJ2YWx1ZXNcIiwgXCJrZXl3b3Jkc1wiLCBcImZpbmFsX2RlY2lzaW9uXCIsIFwiZmxvd19uYW1lXCIsIFwiaXNfaGlkZGVuXCIsIFwiYWdlbnRfdXNlcl9uYW1lXCJdLFxuXHRcdGxlbmd0aENoYW5nZTogdHJ1ZSxcblx0XHRsZW5ndGhNZW51OiBbMTAsMTUsMjAsMjUsNTAsMTAwXSxcblx0XHRwYWdlTGVuZ3RoOiAxMCxcblx0XHRpbmZvOiBmYWxzZSxcblx0XHRzZWFyY2hpbmc6IHRydWUsXG5cdFx0cmVzcG9uc2l2ZTpcblx0XHRcdGRldGFpbHM6IGZhbHNlXG5cdFx0YXV0b1dpZHRoOiBmYWxzZSxcblx0XHRjaGFuZ2VTZWxlY3RvcjogKHNlbGVjdG9yLCB1c2VySWQpIC0+XG5cdFx0XHR1bmxlc3MgdXNlcklkXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHNwYWNlID0gc2VsZWN0b3Iuc3BhY2Vcblx0XHRcdHVubGVzcyBzcGFjZVxuXHRcdFx0XHRpZiBzZWxlY3Rvcj8uJGFuZD8ubGVuZ3RoID4gMFxuXHRcdFx0XHRcdHNwYWNlID0gc2VsZWN0b3IuJGFuZC5nZXRQcm9wZXJ0eSgnc3BhY2UnKVswXVxuXHRcdFx0dW5sZXNzIHNwYWNlXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHNwYWNlX3VzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHt1c2VyOiB1c2VySWQsIHNwYWNlOiBzcGFjZX0sIHtmaWVsZHM6IHtfaWQ6IDF9fSlcblx0XHRcdHVubGVzcyBzcGFjZV91c2VyXG5cdFx0XHRcdHJldHVybiB7X2lkOiAtMX1cblx0XHRcdHJldHVybiBzZWxlY3RvclxuXHRcdHBhZ2luZ1R5cGU6IFwibnVtYmVyc1wiXG5cblx0fVxuXG5cdGlmIGZsb3dJZFxuXHRcdGtleSA9IFwiaW5zdGFuY2VGbG93XCIgKyBmbG93SWRcblxuXHRcdG9wdGlvbnMubmFtZSA9IGtleVxuXG5cdFx0VGFidWxhclRhYmxlcy5pbnN0YW5jZV90YXNrcy5maWVsZHMgPSBmaWVsZHNcblxuXHRcdGluc19maWVsZHMgPSBfaGFuZGxlTGlzdEZpZWxkcyBUYWJ1bGFyVGFibGVzLmluc3RhbmNlX3Rhc2tzLmZpZWxkc1xuXG5cdFx0aW5zX2ZpZWxkcy5mb3JFYWNoIChmKS0+XG5cdFx0XHRpZiBmLnR5cGUgIT0gJ3RhYmxlJyAmJiBmLmlzX2xpc3RfZGlzcGxheVxuXHRcdFx0XHRvcHRpb25zLmNvbHVtbnMucHVzaFxuXHRcdFx0XHRcdGRhdGE6IChmLm5hbWUgfHwgZi5jb2RlKSxcblx0XHRcdFx0XHR0aXRsZTogdChmLm5hbWUgfHwgZi5jb2RlKSxcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdFx0XHRvcmRlcmFibGU6IGZhbHNlXG5cdFx0XHRcdFx0cmVuZGVyOiAodmFsLCB0eXBlLCBkb2MpIC0+XG5cblx0XHRcdFx0XHRcdHZhbHVlcyA9IGRvYy52YWx1ZXMgfHwge31cblxuXHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZXNbZi5jb2RlXVxuXG5cdFx0XHRcdFx0XHRzd2l0Y2ggZi50eXBlXG5cdFx0XHRcdFx0XHRcdHdoZW4gJ3VzZXInXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZT8ubmFtZVxuXHRcdFx0XHRcdFx0XHR3aGVuICdncm91cCdcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlPy5mdWxsbmFtZVxuXHRcdFx0XHRcdFx0XHR3aGVuICdkYXRlJ1xuXHRcdFx0XHRcdFx0XHRcdGlmIHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREJylcblx0XHRcdFx0XHRcdFx0d2hlbiAnZGF0ZVRpbWUnXG5cdFx0XHRcdFx0XHRcdFx0aWYgdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKVxuXHRcdFx0XHRcdFx0XHR3aGVuICdjaGVja2JveCdcblx0XHRcdFx0XHRcdFx0XHRpZiB2YWx1ZSA9PSB0cnVlIHx8IHZhbHVlID09ICd0cnVlJ1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF95ZXNcIik7XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF9ub1wiKTtcblx0XHRcdFx0XHRcdFx0d2hlbiAnb2RhdGEnXG5cdFx0XHRcdFx0XHRcdFx0aWYgdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdGlmIF8uaXNBcnJheSh2YWx1ZSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBfLnBsdWNrKHZhbHVlLCAnQGxhYmVsJykudG9TdHJpbmcoKVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlWydAbGFiZWwnXVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblxuXG5cdHJldHVybiBvcHRpb25zO1xuXG5cbk1ldGVvci5zdGFydHVwICgpLT5cblx0VGFidWxhclRhYmxlcy5pbnN0YW5jZXMgPSBuZXcgVGFidWxhci5UYWJsZSBpbnN0YW5jZXNMaXN0VGFibGVUYWJ1bGFyKClcblx0VGFidWxhclRhYmxlcy5pbnN0YW5jZV90YXNrcyA9IG5ldyBUYWJ1bGFyLlRhYmxlIGluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyKClcblx0VGFidWxhclRhYmxlcy5pbmJveF9pbnN0YW5jZXMgPSBuZXcgVGFidWxhci5UYWJsZSBHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhcImluYm94XCIpXG5cdFRhYnVsYXJUYWJsZXMub3V0Ym94X2luc3RhbmNlcyA9IG5ldyBUYWJ1bGFyLlRhYmxlIEdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zKFwib3V0Ym94XCIpXG5cblxuR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMgPSAoYm94LCBmbG93SWQsIGZpZWxkcyktPlxuXHRrZXkgPSBcImluc3RhbmNlRmxvd1wiICsgYm94ICsgZmxvd0lkXG5cdGlmIGJveCA9PSBcImluYm94XCJcblx0XHRvcHRpb25zID0gX2dldF9pbmJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zKGZsb3dJZCwgZmllbGRzKVxuXHRlbHNlIGlmIGJveCA9PSBcIm91dGJveFwiXG5cdFx0b3B0aW9ucyA9IF9nZXRfb3V0Ym94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMoZmxvd0lkLCBmaWVsZHMpXG5cdGVsc2Vcblx0XHRvcHRpb25zID0gaW5zdGFuY2VzTGlzdFRhYmxlVGFidWxhcihmbG93SWQsIGZpZWxkcylcblx0XHRpZiAhZmxvd0lkXG5cdFx0XHRvcHRpb25zLm5hbWUgPSBcImluYm94X2luc3RhbmNlc1wiXG5cdGlmIGZsb3dJZFxuXHRcdG9wdGlvbnMubmFtZSA9IGtleVxuXHRyZXR1cm4gb3B0aW9uc1xuXG5fZ2V0X2luYm94X2luc3RhbmNlc190YWJ1bGFyX29wdGlvbnMgPSAoZmxvd0lkLCBmaWVsZHMpLT5cblx0b3B0aW9ucyA9IGluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyKGZsb3dJZCwgZmllbGRzKVxuXG5cdGlmICFmbG93SWRcblx0XHRvcHRpb25zLm5hbWUgPSBcImluYm94X2luc3RhbmNlc1wiXG5cblx0b3B0aW9ucy5vcmRlciA9IFtbOCwgXCJkZXNjXCJdXVxuXG5cdG9wdGlvbnMuZ2V0U29ydCA9IChzZWxlY3Rvciwgc29ydCkgLT4gXG5cdFx0Y29uc29sZS5sb2coJ2luYm94X2luc3RhbmNlczonLHNvcnQpXG5cdFx0cmV0dXJuIHNvcnRcblxuXHRyZXR1cm4gb3B0aW9uc1xuXG5fZ2V0X291dGJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zID0gKGZsb3dJZCwgZmllbGRzKS0+XG5cdG9wdGlvbnMgPSBpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhcihmbG93SWQsIGZpZWxkcylcblxuXHRpZiAhZmxvd0lkXG5cdFx0b3B0aW9ucy5uYW1lID0gXCJvdXRib3hfaW5zdGFuY2VzXCJcblxuXHRvcHRpb25zLm9yZGVyID0gW1s5LCAtMV1dXG5cblx0b3B0aW9ucy5nZXRTb3J0ID0gKHNlbGVjdG9yLCBzb3J0KSAtPiBcblx0XHRjb25zb2xlLmxvZygnb3V0Ym94X2luc3RhbmNlczonLHNvcnQpXG5cdFx0IyBuZXdTb3J0ID0gWyBcblx0XHQjIFx0WydzcGFjZScsIDFdLFxuXHRcdCMgXHRbJ2hhbmRsZXInLCAxXSxcblx0XHQjIFx0Wydpc19maW5pc2hlZCcsIDFdLFxuXHRcdCMgXVxuXHRcdCMgbmV3U29ydCA9IG5ld1NvcnQuY29uY2F0KHNvcnQpXG5cdFx0IyByZXR1cm4gbmV3U29ydFxuXHRcdHJldHVybiBzb3J0XG5cblx0cmV0dXJuIG9wdGlvbnNcblxuaWYgTWV0ZW9yLmlzQ2xpZW50XG5cdFRhYnVsYXJUYWJsZXMuZmxvd0luc3RhbmNlcyA9IG5ldyBSZWFjdGl2ZVZhcigpXG5cbk1ldGVvci5zdGFydHVwICgpLT5cblx0VHJhY2tlci5hdXRvcnVuIChjKSAtPlxuXHRcdGlmIE1ldGVvci5pc0NsaWVudCAmJiAhU3RlZWRvcy5pc01vYmlsZSgpXG5cdFx0XHRpZiBTZXNzaW9uLmdldChcImZsb3dJZFwiKSAmJiBTZXNzaW9uLmdldChcImJveFwiKSAhPSAnZHJhZnQnXG5cdFx0XHRcdE1ldGVvci5jYWxsIFwibmV3SW5zdGFuY2VzTGlzdFRhYnVsYXJcIiwgU2Vzc2lvbi5nZXQoXCJib3hcIiksIFNlc3Npb24uZ2V0KFwiZmxvd0lkXCIpLCAoZXJyb3IsIHJlc3VsdCkgLT5cblx0XHRcdFx0XHRuZXdJbnN0YW5jZXNMaXN0VGFidWxhciBTZXNzaW9uLmdldChcImJveFwiKSwgU2Vzc2lvbi5nZXQoXCJmbG93SWRcIiksIHJlc3VsdFxuXHRcdFx0XHRcdFRlbXBsYXRlLmluc3RhbmNlX2xpc3QuX2NoYW5nZU9yZGVyKClcblxuXG5uZXdJbnN0YW5jZXNMaXN0VGFidWxhciA9IChib3gsIGZsb3dJZCwgZmllbGRzKS0+XG5cdGlmICFmaWVsZHNcblx0XHRmbG93ID0gZGIuZmxvd3MuZmluZE9uZSh7X2lkOiBmbG93SWR9LCB7ZmllbGRzOiB7Zm9ybTogMX19KVxuXHRcdGZpZWxkcyA9IGRiLmZvcm1zLmZpbmRPbmUoeyBfaWQ6IGZsb3c/LmZvcm0gfSwgeyBmaWVsZHM6IHsgJ2N1cnJlbnQuZmllbGRzJzogMSB9IH0pPy5jdXJyZW50Py5maWVsZHNcblxuXHRmaWVsZHMgPSBfaGFuZGxlTGlzdEZpZWxkcyBmaWVsZHNcblxuXHRpZiBmaWVsZHM/LmZpbHRlclByb3BlcnR5KFwiaXNfbGlzdF9kaXNwbGF5XCIsIHRydWUpPy5sZW5ndGggPiAwXG5cdFx0a2V5ID0gXCJpbnN0YW5jZUZsb3dcIiArIGJveCArIGZsb3dJZFxuXHRcdGlmIE1ldGVvci5pc0NsaWVudFxuXHRcdFx0VGFidWxhclRhYmxlcy5mbG93SW5zdGFuY2VzLnNldChuZXcgVGFidWxhci5UYWJsZSBHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhib3gsIGZsb3dJZCwgZmllbGRzKSlcblx0XHRlbHNlXG5cdFx0XHRuZXcgVGFidWxhci5UYWJsZSBHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhib3gsIGZsb3dJZCwgZmllbGRzKVxuXHRcdGNvbnNvbGUubG9nIFwibmV3IFRhYnVsYXJUYWJsZXMgXCIsIGtleVxuXG5pZiBNZXRlb3IuaXNTZXJ2ZXJcblx0TWV0ZW9yLm1ldGhvZHNcblx0XHRuZXdJbnN0YW5jZXNMaXN0VGFidWxhcjogKGJveCwgZmxvd0lkKS0+XG5cdFx0XHRuZXdJbnN0YW5jZXNMaXN0VGFidWxhcihib3gsIGZsb3dJZClcblxuXHRcdFx0ZmxvdyA9IGRiLmZsb3dzLmZpbmRPbmUoe19pZDogZmxvd0lkfSwge2ZpZWxkczoge2Zvcm06IDF9fSlcblx0XHRcdGZpZWxkcyA9IGRiLmZvcm1zLmZpbmRPbmUoeyBfaWQ6IGZsb3c/LmZvcm0gfSwgeyBmaWVsZHM6IHsgJ2N1cnJlbnQuZmllbGRzJzogMSB9IH0pPy5jdXJyZW50Py5maWVsZHNcblx0XHRcdHJldHVybiBmaWVsZHNcblxuXG4iLCJ2YXIgR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMsIF9nZXRfaW5ib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucywgX2dldF9vdXRib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucywgX2hhbmRsZUxpc3RGaWVsZHMsIGluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyLCBpbnN0YW5jZXNMaXN0VGFibGVUYWJ1bGFyLCBuZXdJbnN0YW5jZXNMaXN0VGFidWxhciwgdXBkYXRlVGFidWxhclRpdGxlO1xuXG5TdGVlZG9zLnN1YnNbXCJJbnN0YW5jZVRhYnVsYXJcIl0gPSBuZXcgU3Vic01hbmFnZXIoKTtcblxuX2hhbmRsZUxpc3RGaWVsZHMgPSBmdW5jdGlvbihmaWVsZHMpIHtcbiAgdmFyIGluc19maWVsZHM7XG4gIGluc19maWVsZHMgPSBuZXcgQXJyYXkoKTtcbiAgaWYgKGZpZWxkcyAhPSBudWxsKSB7XG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24oZikge1xuICAgICAgdmFyIHJlZjtcbiAgICAgIGlmIChmLnR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKCdpZ25vcmUgb3BpbmlvbiBmaWVsZCBpbiB0YWJsZScpO1xuICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09ICdzZWN0aW9uJykge1xuICAgICAgICByZXR1cm4gZiAhPSBudWxsID8gKHJlZiA9IGYuZmllbGRzKSAhPSBudWxsID8gcmVmLmZvckVhY2goZnVuY3Rpb24oZjEpIHtcbiAgICAgICAgICByZXR1cm4gaW5zX2ZpZWxkcy5wdXNoKGYxKTtcbiAgICAgICAgfSkgOiB2b2lkIDAgOiB2b2lkIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW5zX2ZpZWxkcy5wdXNoKGYpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBpbnNfZmllbGRzO1xufTtcblxudXBkYXRlVGFidWxhclRpdGxlID0gZnVuY3Rpb24oKSB7fTtcblxuaW5zdGFuY2VzTGlzdFRhYmxlVGFidWxhciA9IGZ1bmN0aW9uKGZsb3dJZCwgZmllbGRzKSB7XG4gIHZhciBpbnNfZmllbGRzLCBrZXksIG9wdGlvbnM7XG4gIG9wdGlvbnMgPSB7XG4gICAgbmFtZTogXCJpbnN0YW5jZXNcIixcbiAgICBjb2xsZWN0aW9uOiBkYi5pbnN0YW5jZXMsXG4gICAgcHViOiBcImluc3RhbmNlX3RhYnVsYXJcIixcbiAgICBvblVubG9hZDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gTWV0ZW9yLnNldFRpbWVvdXQoVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zLCAxNTApO1xuICAgIH0sXG4gICAgZHJhd0NhbGxiYWNrOiBmdW5jdGlvbihzZXR0aW5ncykge1xuICAgICAgdmFyIGVsbGlwc2lzTGluaywgZW1wdHlUZCwgdGl0bGU7XG4gICAgICBlbXB0eVRkID0gJChcIi5kYXRhVGFibGVzX2VtcHR5XCIpO1xuICAgICAgaWYgKGVtcHR5VGQubGVuZ3RoKSB7XG4gICAgICAgIGVtcHR5VGRbMF0uY29sU3BhbiA9IFwiNlwiO1xuICAgICAgfVxuICAgICAgaWYgKCFTdGVlZG9zLmlzTW9iaWxlKCkgJiYgIVN0ZWVkb3MuaXNQYWQoKSkge1xuICAgICAgICBNZXRlb3Iuc2V0VGltZW91dChUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMsIDE1MCk7XG4gICAgICAgICQoXCIuaW5zdGFuY2UtbGlzdFwiKS5zY3JvbGxUb3AoMCkucmVhZHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQoXCIuaW5zdGFuY2UtbGlzdFwiKS5wZXJmZWN0U2Nyb2xsYmFyKFwidXBkYXRlXCIpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoXCIuaW5zdGFuY2UtbGlzdFwiKS5zY3JvbGxUb3AoMCk7XG4gICAgICB9XG4gICAgICB0aXRsZSA9IHQoXCJwYWdlcl9pbnB1dF9oaW50XCIpO1xuICAgICAgZWxsaXBzaXNMaW5rID0gc2V0dGluZ3Mub0luc3RhbmNlLnBhcmVudCgpLmZpbmQoJy5wYWdpbmdfbnVtYmVycyAucGFnaW5hdGlvbiAuZGlzYWJsZWQgYScpO1xuICAgICAgcmV0dXJuIGVsbGlwc2lzTGluay5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmNzcyhcImN1cnNvclwiLCBcInBvaW50ZXJcIikuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBnb1BhZ2UsIGlucHV0O1xuICAgICAgICBpZiAoISQodGhpcykuZmluZCgnaW5wdXQnKS5sZW5ndGgpIHtcbiAgICAgICAgICBpbnB1dCA9ICQoJzxpbnB1dCBjbGFzcz1cInBhZ2luYXRlX2lucHV0IGZvcm0tY29udHJvbCBpbnB1dC1zbVwiIHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IHBhZGRpbmc6MCAycHg7XCIvPicpO1xuICAgICAgICAgIGlmIChTdGVlZG9zLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgICAgIGlucHV0LmNzcyh7XG4gICAgICAgICAgICAgIHdpZHRoOiBcIjUycHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjIwcHhcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0LmNzcyh7XG4gICAgICAgICAgICAgIHdpZHRoOiBcIjUycHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjE2cHhcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlucHV0LmF0dHIoXCJ0aXRsZVwiLCB0aXRsZSkuYXR0cihcInBsYWNlaG9sZGVyXCIsIHRpdGxlKTtcbiAgICAgICAgICAkKHRoaXMpLmVtcHR5KCkuYXBwZW5kKGlucHV0KTtcbiAgICAgICAgICBnb1BhZ2UgPSBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICAgICAgdmFyIHBhZ2VzO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICBwYWdlcyA9IE1hdGguY2VpbChzZXR0aW5ncy5mblJlY29yZHNEaXNwbGF5KCkgLyBzZXR0aW5ncy5faURpc3BsYXlMZW5ndGgpO1xuICAgICAgICAgICAgICBpZiAoaW5kZXggPiBwYWdlcykge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gcGFnZXM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgICAgICAgcmV0dXJuIHNldHRpbmdzLm9JbnN0YW5jZS5EYXRhVGFibGUoKS5wYWdlKGluZGV4KS5kcmF3KCdwYWdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpbnB1dC5ibHVyKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50UGFnZTtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gJCh0aGlzKS52YWwoKTtcbiAgICAgICAgICAgIGdvUGFnZShjdXJyZW50UGFnZSk7XG4gICAgICAgICAgICByZXR1cm4gJCh0aGlzKS5wYXJlbnQoKS5odG1sKCcuLi4nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gaW5wdXQua2V5ZG93bihmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlLnRvU3RyaW5nKCkgPT09IFwiMTNcIikge1xuICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICAgIHJldHVybiBnb1BhZ2UoY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZWRSb3c6IGZ1bmN0aW9uKHJvdywgZGF0YSwgZGF0YUluZGV4KSB7XG4gICAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICAgIGlmIChkYXRhLl9pZCA9PT0gRmxvd1JvdXRlci5jdXJyZW50KCkucGFyYW1zLmluc3RhbmNlSWQpIHtcbiAgICAgICAgICByZXR1cm4gcm93LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwic2VsZWN0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbHVtbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZGF0YTogXCJfaWRcIixcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBhZ2VudF92aWV3LCBjY192aWV3LCBmbG93X25hbWUsIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MsIG1vZGlmaWVkLCBtb2RpZmllZEZyb21Ob3csIG1vZGlmaWVkU3RyaW5nLCBwcmlvcml0eUljb24sIHByaW9yaXR5SWNvbkNsYXNzLCBwcmlvcml0eVZhbHVlLCByZWYsIHJlZjEsIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcsIHVucmVhZDtcbiAgICAgICAgICBtb2RpZmllZFN0cmluZyA9IG1vbWVudChkb2MubW9kaWZpZWQpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgIG1vZGlmaWVkID0gZG9jLm1vZGlmaWVkO1xuICAgICAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94JyAmJiBkb2Muc3RhdGUgIT09ICdkcmFmdCcpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkID0gZG9jLnN0YXJ0X2RhdGUgfHwgZG9jLm1vZGlmaWVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdvdXRib3gnIHx8IFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnbW9uaXRvcicpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkID0gZG9jLnN1Ym1pdF9kYXRlIHx8IGRvYy5zdWJtaXRfZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbW9kaWZpZWRGcm9tTm93ID0gU3RlZWRvcy5tb21lbnRSZWFjdGl2ZUZyb21Ob3cobW9kaWZpZWQpO1xuICAgICAgICAgIGZsb3dfbmFtZSA9IGRvYy5mbG93X25hbWU7XG4gICAgICAgICAgY2NfdmlldyA9IFwiXCI7XG4gICAgICAgICAgc3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy5pc19jYyAmJiAhKChyZWYgPSBkb2MuaW5ib3hfdXNlcnMpICE9IG51bGwgPyByZWYuaW5jbHVkZXMoTWV0ZW9yLnVzZXJJZCgpKSA6IHZvaWQgMCkgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcpIHtcbiAgICAgICAgICAgIGNjX3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oXCJpbnN0YW5jZV9jY190aXRsZVwiKSArIFwiKTwvbGFiZWw+IFwiO1xuICAgICAgICAgICAgc3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiPGRpdiBjbGFzcz0nZmxvdy1uYW1lJz5cIiArIGZsb3dfbmFtZSArIFwiPHNwYW4+KFwiICsgZG9jLmN1cnJlbnRfc3RlcF9uYW1lICsgXCIpPC9zcGFuPjwvZGl2PlwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgIT09ICdkcmFmdCcgJiYgZG9jLmN1cnJlbnRfc3RlcF9uYW1lKSB7XG4gICAgICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+XCIgKyBmbG93X25hbWUgKyBcIjxzcGFuPihcIiArIGRvYy5jdXJyZW50X3N0ZXBfbmFtZSArIFwiKTwvc3Bhbj48L2Rpdj5cIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+XCIgKyBmbG93X25hbWUgKyBcIjwvZGl2PlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhZ2VudF92aWV3ID0gXCJcIjtcbiAgICAgICAgICBpZiAoZG9jLmFnZW50X3VzZXJfbmFtZSAmJiBTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ2luYm94Jykge1xuICAgICAgICAgICAgYWdlbnRfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge1xuICAgICAgICAgICAgICB1c2VyTmFtZTogZG9jLmFnZW50X3VzZXJfbmFtZVxuICAgICAgICAgICAgfSkgKyBcIik8L2xhYmVsPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICB1bnJlYWQgPSAnJztcbiAgICAgICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcgJiYgZG9jLmlzX3JlYWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1bnJlYWQgPSAnPGkgY2xhc3M9XCJpb24gaW9uLXJlY29yZCB1bnJlYWRcIj48L2k+JztcbiAgICAgICAgICB9IGVsc2UgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnbW9uaXRvcicgJiYgZG9jLmlzX2hpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdW5yZWFkID0gJzxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjwvaT4nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmlvcml0eUljb24gPSBcIlwiO1xuICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJcIjtcbiAgICAgICAgICBwcmlvcml0eVZhbHVlID0gKHJlZjEgPSBkb2MudmFsdWVzKSAhPSBudWxsID8gcmVmMS5wcmlvcml0eSA6IHZvaWQgMDtcbiAgICAgICAgICBzd2l0Y2ggKHByaW9yaXR5VmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCLnibnmgKVcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcImRhbmdlclwiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLntKfmgKVcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIndhcm5pbmdcIjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwi5Yqe5paHXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJtdXRlZFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJpb3JpdHlJY29uQ2xhc3MpIHtcbiAgICAgICAgICAgIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgPSBcImNvbG9yLXByaW9yaXR5IGNvbG9yLXByaW9yaXR5LVwiICsgcHJpb3JpdHlJY29uQ2xhc3M7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcIjxkaXYgY2xhc3M9J2luc3RhbmNlLXJlYWQtYmFyJz5cIiArIHVucmVhZCArIFwiPC9kaXY+XFxuPGRpdiBjbGFzcz0naW5zdGFuY2UtbmFtZSBcIiArIGluc3RhbmNlTmFtZVByaW9yaXR5Q2xhc3MgKyBcIic+XCIgKyBkb2MubmFtZSArIGNjX3ZpZXcgKyBhZ2VudF92aWV3ICsgXCJcXG5cdDxzcGFuPlwiICsgZG9jLmFwcGxpY2FudF9uYW1lICsgXCI8L3NwYW4+XFxuPC9kaXY+XFxuPGRpdiBjbGFzcz0naW5zdGFuY2UtZGV0YWlsJz5cIiArIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgKyBcIlxcblx0PHNwYW4gY2xhc3M9J2luc3RhbmNlLW1vZGlmaWVkJyB0aXRsZT0nXCIgKyBtb2RpZmllZFN0cmluZyArIFwiJz5cIiArIG1vZGlmaWVkRnJvbU5vdyArIFwiPC9zcGFuPlxcbjwvZGl2PlwiO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9vcmdhbml6YXRpb25fbmFtZVwiKSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJuYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX25hbWVcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgYWdlbnRfdmlldywgY2NfdmlldywgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcywgcHJpb3JpdHlJY29uQ2xhc3MsIHByaW9yaXR5VmFsdWUsIHJlZiwgcmVmMSwgc3RlcF9jdXJyZW50X25hbWVfdmlldywgdW5yZWFkO1xuICAgICAgICAgIGNjX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIlwiO1xuICAgICAgICAgIGlmIChkb2MuaXNfY2MgJiYgISgocmVmID0gZG9jLmluYm94X3VzZXJzKSAhPSBudWxsID8gcmVmLmluY2x1ZGVzKE1ldGVvci51c2VySWQoKSkgOiB2b2lkIDApICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgICAgICBjY192aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKFwiaW5zdGFuY2VfY2NfdGl0bGVcIikgKyBcIik8L2xhYmVsPiBcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWdlbnRfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy5hZ2VudF91c2VyX25hbWUpIHtcbiAgICAgICAgICAgIGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHtcbiAgICAgICAgICAgICAgdXNlck5hbWU6IGRvYy5hZ2VudF91c2VyX25hbWVcbiAgICAgICAgICAgIH0pICsgXCIpPC9sYWJlbD5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdW5yZWFkID0gJyc7XG4gICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnICYmIGRvYy5pc19yZWFkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPic7XG4gICAgICAgICAgfSBlbHNlIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ21vbml0b3InICYmIGRvYy5pc19oaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIlwiO1xuICAgICAgICAgIHByaW9yaXR5VmFsdWUgPSAocmVmMSA9IGRvYy52YWx1ZXMpICE9IG51bGwgPyByZWYxLnByaW9yaXR5IDogdm9pZCAwO1xuICAgICAgICAgIHN3aXRjaCAocHJpb3JpdHlWYWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcIueJueaApVwiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwiZGFuZ2VyXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIue0p+aApVwiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwid2FybmluZ1wiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLlip7mlodcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIm11dGVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmlvcml0eUljb25DbGFzcykge1xuICAgICAgICAgICAgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyA9IFwiY29sb3ItcHJpb3JpdHkgY29sb3ItcHJpb3JpdHktXCIgKyBwcmlvcml0eUljb25DbGFzcztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPlwiICsgdW5yZWFkICsgXCI8L2Rpdj5cXG48ZGl2IGNsYXNzPSdpbnN0YW5jZS1uYW1lIFwiICsgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyArIFwiJz5cIiArIGRvYy5uYW1lICsgY2NfdmlldyArIGFnZW50X3ZpZXcgKyBcIjwvZGl2PlwiO1xuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImFwcGxpY2FudF9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX2FwcGxpY2FudF9uYW1lXCIpLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcInN1Ym1pdF9kYXRlXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N1Ym1pdF9kYXRlXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgaWYgKGRvYy5zdWJtaXRfZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkb2Muc3VibWl0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImZsb3dfbmFtZVwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19mbG93XCIpLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImN1cnJlbnRfc3RlcF9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N0ZXBfY3VycmVudF9uYW1lXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgdmFyIGNjX3RhZywganVkZ2UsIHN0ZXBfY3VycmVudF9uYW1lO1xuICAgICAgICAgIGlmIChkb2Muc3RhdGUgPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGp1ZGdlID0gZG9jLmZpbmFsX2RlY2lzaW9uIHx8IFwiYXBwcm92ZWRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RlcF9jdXJyZW50X25hbWUgPSBkb2MuY3VycmVudF9zdGVwX25hbWUgfHwgJyc7XG4gICAgICAgICAgY2NfdGFnID0gJyc7XG4gICAgICAgICAgaWYgKGRvYy5jY19jb3VudCA+IDApIHtcbiAgICAgICAgICAgIGNjX3RhZyA9IFRBUGkxOG4uX18oJ2NjX3RhZycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCI8ZGl2IGNsYXNzPVxcXCJzdGVwLWN1cnJlbnQtc3RhdGUgXCIgKyBqdWRnZSArIFwiXFxcIj5cIiArIHN0ZXBfY3VycmVudF9uYW1lICsgY2NfdGFnICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJtb2RpZmllZFwiLFxuICAgICAgICB0aXRsZTogdChcImluc3RhbmNlc19tb2RpZmllZFwiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHJldHVybiBtb21lbnQoZG9jLm1vZGlmaWVkKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcInN0YXJ0X2RhdGVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfc3RhcnRfZGF0ZVwiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIGlmIChkb2Muc3RhcnRfZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkb2Muc3RhcnRfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiB0cnVlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibXlfZmluaXNoX2RhdGVcIixcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIGlmIChkb2MubXlfZmluaXNoX2RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZG9jLm15X2ZpbmlzaF9kYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IHRydWVcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJtb2RpZmllZFwiLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImtleXdvcmRzXCIsXG4gICAgICAgIHZpc2libGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiaXNfYXJjaGl2ZWRcIixcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciByZWY7XG4gICAgICAgICAgaWYgKChkb2MgIT0gbnVsbCA/IChyZWYgPSBkb2MudmFsdWVzKSAhPSBudWxsID8gcmVmLnJlY29yZF9uZWVkIDogdm9pZCAwIDogdm9pZCAwKSAmJiBkb2MudmFsdWVzLnJlY29yZF9uZWVkID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgaWYgKGRvYyAhPSBudWxsID8gZG9jLmlzX2FyY2hpdmVkIDogdm9pZCAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0KFwiWUVTXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHQoXCJOT1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9XG4gICAgXSxcbiAgICBkb206IChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChTdGVlZG9zLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgcmV0dXJuICd0cCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ3RwbCc7XG4gICAgICB9XG4gICAgfSkoKSxcbiAgICBvcmRlcjogW1s0LCBcImRlc2NcIl1dLFxuICAgIGV4dHJhRmllbGRzOiBbXCJmb3JtXCIsIFwiZmxvd1wiLCBcImluYm94X3VzZXJzXCIsIFwic3RhdGVcIiwgXCJzcGFjZVwiLCBcImFwcGxpY2FudFwiLCBcImZvcm1fdmVyc2lvblwiLCBcImZsb3dfdmVyc2lvblwiLCBcImlzX2NjXCIsIFwiY2NfY291bnRcIiwgXCJpc19yZWFkXCIsIFwiY3VycmVudF9zdGVwX25hbWVcIiwgXCJ2YWx1ZXNcIiwgXCJrZXl3b3Jkc1wiLCBcImZpbmFsX2RlY2lzaW9uXCIsIFwiZmxvd19uYW1lXCIsIFwiaXNfaGlkZGVuXCIsIFwiYWdlbnRfdXNlcl9uYW1lXCJdLFxuICAgIGxlbmd0aENoYW5nZTogdHJ1ZSxcbiAgICBsZW5ndGhNZW51OiBbMTAsIDE1LCAyMCwgMjUsIDUwLCAxMDBdLFxuICAgIHBhZ2VMZW5ndGg6IDEwLFxuICAgIGluZm86IGZhbHNlLFxuICAgIHNlYXJjaGluZzogdHJ1ZSxcbiAgICByZXNwb25zaXZlOiB7XG4gICAgICBkZXRhaWxzOiBmYWxzZVxuICAgIH0sXG4gICAgYXV0b1dpZHRoOiBmYWxzZSxcbiAgICBjaGFuZ2VTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IsIHVzZXJJZCkge1xuICAgICAgdmFyIHJlZiwgc3BhY2UsIHNwYWNlX3VzZXI7XG4gICAgICBpZiAoIXVzZXJJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9pZDogLTFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHNwYWNlID0gc2VsZWN0b3Iuc3BhY2U7XG4gICAgICBpZiAoIXNwYWNlKSB7XG4gICAgICAgIGlmICgoc2VsZWN0b3IgIT0gbnVsbCA/IChyZWYgPSBzZWxlY3Rvci4kYW5kKSAhPSBudWxsID8gcmVmLmxlbmd0aCA6IHZvaWQgMCA6IHZvaWQgMCkgPiAwKSB7XG4gICAgICAgICAgc3BhY2UgPSBzZWxlY3Rvci4kYW5kLmdldFByb3BlcnR5KCdzcGFjZScpWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXNwYWNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX2lkOiAtMVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgc3BhY2VfdXNlciA9IGRiLnNwYWNlX3VzZXJzLmZpbmRPbmUoe1xuICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgIHNwYWNlOiBzcGFjZVxuICAgICAgfSwge1xuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICBfaWQ6IDFcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoIXNwYWNlX3VzZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaWQ6IC0xXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgfSxcbiAgICBwYWdpbmdUeXBlOiBcIm51bWJlcnNcIlxuICB9O1xuICBpZiAoZmxvd0lkKSB7XG4gICAga2V5ID0gXCJpbnN0YW5jZUZsb3dcIiArIGZsb3dJZDtcbiAgICBvcHRpb25zLm5hbWUgPSBrZXk7XG4gICAgVGFidWxhclRhYmxlcy5pbnN0YW5jZXMuZmllbGRzID0gZmllbGRzO1xuICAgIGluc19maWVsZHMgPSBfaGFuZGxlTGlzdEZpZWxkcyhUYWJ1bGFyVGFibGVzLmluc3RhbmNlcy5maWVsZHMpO1xuICAgIGluc19maWVsZHMuZm9yRWFjaChmdW5jdGlvbihmKSB7XG4gICAgICBpZiAoZi50eXBlICE9PSAndGFibGUnICYmIGYuaXNfbGlzdF9kaXNwbGF5KSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgZGF0YTogZi5uYW1lIHx8IGYuY29kZSxcbiAgICAgICAgICB0aXRsZTogdChmLm5hbWUgfHwgZi5jb2RlKSxcbiAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICBvcmRlcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSwgdmFsdWVzO1xuICAgICAgICAgICAgdmFsdWVzID0gZG9jLnZhbHVlcyB8fCB7fTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzW2YuY29kZV07XG4gICAgICAgICAgICBzd2l0Y2ggKGYudHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICd1c2VyJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS5uYW1lIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdncm91cCc6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUuZnVsbG5hbWUgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZGF0ZVRpbWUnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X3llc1wiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBUQVBpMThuLl9fKFwiZm9ybV9maWVsZF9jaGVja2JveF9ub1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ29kYXRhJzpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChfLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gXy5wbHVjayh2YWx1ZSwgJ0BsYWJlbCcpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWydAbGFiZWwnXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbmluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyID0gZnVuY3Rpb24oZmxvd0lkLCBmaWVsZHMpIHtcbiAgdmFyIGluc19maWVsZHMsIGtleSwgb3B0aW9ucztcbiAgb3B0aW9ucyA9IHtcbiAgICBuYW1lOiBcImluc3RhbmNlX3Rhc2tzXCIsXG4gICAgY29sbGVjdGlvbjogZGIuaW5zdGFuY2VfdGFza3MsXG4gICAgcHViOiBcImluc3RhbmNlX3Rhc2tzX3RhYnVsYXJcIixcbiAgICBvblVubG9hZDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gTWV0ZW9yLnNldFRpbWVvdXQoVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fdGFibGVDb2x1bW5zLCAxNTApO1xuICAgIH0sXG4gICAgZHJhd0NhbGxiYWNrOiBmdW5jdGlvbihzZXR0aW5ncykge1xuICAgICAgdmFyIGVsbGlwc2lzTGluaywgZW1wdHlUZCwgdGl0bGU7XG4gICAgICBlbXB0eVRkID0gJChcIi5kYXRhVGFibGVzX2VtcHR5XCIpO1xuICAgICAgaWYgKGVtcHR5VGQubGVuZ3RoKSB7XG4gICAgICAgIGVtcHR5VGRbMF0uY29sU3BhbiA9IFwiNlwiO1xuICAgICAgfVxuICAgICAgaWYgKCFTdGVlZG9zLmlzTW9iaWxlKCkgJiYgIVN0ZWVkb3MuaXNQYWQoKSkge1xuICAgICAgICBNZXRlb3Iuc2V0VGltZW91dChUZW1wbGF0ZS5pbnN0YW5jZV9saXN0Ll90YWJsZUNvbHVtbnMsIDE1MCk7XG4gICAgICAgICQoXCIuaW5zdGFuY2UtbGlzdFwiKS5zY3JvbGxUb3AoMCkucmVhZHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuICQoXCIuaW5zdGFuY2UtbGlzdFwiKS5wZXJmZWN0U2Nyb2xsYmFyKFwidXBkYXRlXCIpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoXCIuaW5zdGFuY2UtbGlzdFwiKS5zY3JvbGxUb3AoMCk7XG4gICAgICB9XG4gICAgICB0aXRsZSA9IHQoXCJwYWdlcl9pbnB1dF9oaW50XCIpO1xuICAgICAgZWxsaXBzaXNMaW5rID0gc2V0dGluZ3Mub0luc3RhbmNlLnBhcmVudCgpLmZpbmQoJy5wYWdpbmdfbnVtYmVycyAucGFnaW5hdGlvbiAuZGlzYWJsZWQgYScpO1xuICAgICAgcmV0dXJuIGVsbGlwc2lzTGluay5hdHRyKFwidGl0bGVcIiwgdGl0bGUpLmNzcyhcImN1cnNvclwiLCBcInBvaW50ZXJcIikuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBnb1BhZ2UsIGlucHV0O1xuICAgICAgICBpZiAoISQodGhpcykuZmluZCgnaW5wdXQnKS5sZW5ndGgpIHtcbiAgICAgICAgICBpbnB1dCA9ICQoJzxpbnB1dCBjbGFzcz1cInBhZ2luYXRlX2lucHV0IGZvcm0tY29udHJvbCBpbnB1dC1zbVwiIHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJib3JkZXI6IG5vbmU7IHBhZGRpbmc6MCAycHg7XCIvPicpO1xuICAgICAgICAgIGlmIChTdGVlZG9zLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgICAgIGlucHV0LmNzcyh7XG4gICAgICAgICAgICAgIHdpZHRoOiBcIjUycHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjIwcHhcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0LmNzcyh7XG4gICAgICAgICAgICAgIHdpZHRoOiBcIjUycHhcIixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBcIjE2cHhcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlucHV0LmF0dHIoXCJ0aXRsZVwiLCB0aXRsZSkuYXR0cihcInBsYWNlaG9sZGVyXCIsIHRpdGxlKTtcbiAgICAgICAgICAkKHRoaXMpLmVtcHR5KCkuYXBwZW5kKGlucHV0KTtcbiAgICAgICAgICBnb1BhZ2UgPSBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICAgICAgdmFyIHBhZ2VzO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICBwYWdlcyA9IE1hdGguY2VpbChzZXR0aW5ncy5mblJlY29yZHNEaXNwbGF5KCkgLyBzZXR0aW5ncy5faURpc3BsYXlMZW5ndGgpO1xuICAgICAgICAgICAgICBpZiAoaW5kZXggPiBwYWdlcykge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gcGFnZXM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaW5kZXgtLTtcbiAgICAgICAgICAgICAgcmV0dXJuIHNldHRpbmdzLm9JbnN0YW5jZS5EYXRhVGFibGUoKS5wYWdlKGluZGV4KS5kcmF3KCdwYWdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpbnB1dC5ibHVyKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50UGFnZTtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gJCh0aGlzKS52YWwoKTtcbiAgICAgICAgICAgIGdvUGFnZShjdXJyZW50UGFnZSk7XG4gICAgICAgICAgICByZXR1cm4gJCh0aGlzKS5wYXJlbnQoKS5odG1sKCcuLi4nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gaW5wdXQua2V5ZG93bihmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlLnRvU3RyaW5nKCkgPT09IFwiMTNcIikge1xuICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICAgIHJldHVybiBnb1BhZ2UoY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZWRSb3c6IGZ1bmN0aW9uKHJvdywgZGF0YSwgZGF0YUluZGV4KSB7XG4gICAgICBpZiAoTWV0ZW9yLmlzQ2xpZW50KSB7XG4gICAgICAgIGlmIChkYXRhLmluc3RhbmNlID09PSBGbG93Um91dGVyLmN1cnJlbnQoKS5wYXJhbXMuaW5zdGFuY2VJZCkge1xuICAgICAgICAgIHJldHVybiByb3cuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY29sdW1uczogW1xuICAgICAge1xuICAgICAgICBkYXRhOiBcIl9pZFwiLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgdmFyIGFnZW50X3ZpZXcsIGNjX3ZpZXcsIGZsb3dfbmFtZSwgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcywgbW9kaWZpZWQsIG1vZGlmaWVkRnJvbU5vdywgbW9kaWZpZWRTdHJpbmcsIHByaW9yaXR5SWNvbiwgcHJpb3JpdHlJY29uQ2xhc3MsIHByaW9yaXR5VmFsdWUsIHJlZiwgc3RlcF9jdXJyZW50X25hbWVfdmlldywgdW5yZWFkO1xuICAgICAgICAgIG1vZGlmaWVkU3RyaW5nID0gbW9tZW50KGRvYy5tb2RpZmllZCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgICAgbW9kaWZpZWQgPSBkb2MubW9kaWZpZWQ7XG4gICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnICYmIGRvYy5pbnN0YW5jZV9zdGF0ZSAhPT0gJ2RyYWZ0Jykge1xuICAgICAgICAgICAgbW9kaWZpZWQgPSBkb2Muc3RhcnRfZGF0ZSB8fCBkb2MubW9kaWZpZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ291dGJveCcpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkID0gZG9jLnN1Ym1pdF9kYXRlIHx8IGRvYy5tb2RpZmllZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbW9kaWZpZWRGcm9tTm93ID0gU3RlZWRvcy5tb21lbnRSZWFjdGl2ZUZyb21Ob3cobW9kaWZpZWQpO1xuICAgICAgICAgIGZsb3dfbmFtZSA9IGRvYy5mbG93X25hbWU7XG4gICAgICAgICAgY2NfdmlldyA9IFwiXCI7XG4gICAgICAgICAgc3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy50eXBlID09PSAnY2MnICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnKSB7XG4gICAgICAgICAgICBjY192aWV3ID0gXCI8bGFiZWwgY2xhc3M9J2NjLWxhYmVsJz4oXCIgKyBUQVBpMThuLl9fKFwiaW5zdGFuY2VfY2NfdGl0bGVcIikgKyBcIik8L2xhYmVsPiBcIjtcbiAgICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+XCIgKyBmbG93X25hbWUgKyBcIjxzcGFuPihcIiArIGRvYy5zdGVwX25hbWUgKyBcIik8L3NwYW4+PC9kaXY+XCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb2Muc3RlcF9uYW1lKSB7XG4gICAgICAgICAgICAgIHN0ZXBfY3VycmVudF9uYW1lX3ZpZXcgPSBcIjxkaXYgY2xhc3M9J2Zsb3ctbmFtZSc+XCIgKyBmbG93X25hbWUgKyBcIjxzcGFuPihcIiArIGRvYy5zdGVwX25hbWUgKyBcIik8L3NwYW4+PC9kaXY+XCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGVwX2N1cnJlbnRfbmFtZV92aWV3ID0gXCI8ZGl2IGNsYXNzPSdmbG93LW5hbWUnPlwiICsgZmxvd19uYW1lICsgXCI8L2Rpdj5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYWdlbnRfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy5hZ2VudF91c2VyX25hbWUgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcpIHtcbiAgICAgICAgICAgIGFnZW50X3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oJ3Byb2Nlc3NfZGVsZWdhdGlvbl9ydWxlc19kZXNjcmlwdGlvbicsIHtcbiAgICAgICAgICAgICAgdXNlck5hbWU6IGRvYy5hZ2VudF91c2VyX25hbWVcbiAgICAgICAgICAgIH0pICsgXCIpPC9sYWJlbD5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdW5yZWFkID0gJyc7XG4gICAgICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnaW5ib3gnICYmIGRvYy5pc19yZWFkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdW5yZWFkID0gJzxpIGNsYXNzPVwiaW9uIGlvbi1yZWNvcmQgdW5yZWFkXCI+PC9pPic7XG4gICAgICAgICAgfSBlbHNlIGlmIChTZXNzaW9uLmdldChcImJveFwiKSA9PT0gJ21vbml0b3InICYmIGRvYy5pc19oaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHVucmVhZCA9ICc8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JpdHlJY29uID0gXCJcIjtcbiAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwiXCI7XG4gICAgICAgICAgcHJpb3JpdHlWYWx1ZSA9IChyZWYgPSBkb2MudmFsdWVzKSAhPSBudWxsID8gcmVmLnByaW9yaXR5IDogdm9pZCAwO1xuICAgICAgICAgIHN3aXRjaCAocHJpb3JpdHlWYWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcIueJueaApVwiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwiZGFuZ2VyXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIue0p+aApVwiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwid2FybmluZ1wiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLlip7mlodcIjpcbiAgICAgICAgICAgICAgcHJpb3JpdHlJY29uQ2xhc3MgPSBcIm11dGVkXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmlvcml0eUljb25DbGFzcykge1xuICAgICAgICAgICAgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyA9IFwiY29sb3ItcHJpb3JpdHkgY29sb3ItcHJpb3JpdHktXCIgKyBwcmlvcml0eUljb25DbGFzcztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz0naW5zdGFuY2UtcmVhZC1iYXInPlwiICsgdW5yZWFkICsgXCI8L2Rpdj5cXG48ZGl2IGNsYXNzPSdpbnN0YW5jZS1uYW1lIFwiICsgaW5zdGFuY2VOYW1lUHJpb3JpdHlDbGFzcyArIFwiJz5cIiArIGRvYy5pbnN0YW5jZV9uYW1lICsgY2NfdmlldyArIGFnZW50X3ZpZXcgKyBcIlxcblx0PHNwYW4+XCIgKyBkb2MuYXBwbGljYW50X25hbWUgKyBcIjwvc3Bhbj5cXG48L2Rpdj5cXG48ZGl2IGNsYXNzPSdpbnN0YW5jZS1kZXRhaWwnPlwiICsgc3RlcF9jdXJyZW50X25hbWVfdmlldyArIFwiXFxuXHQ8c3BhbiBjbGFzcz0naW5zdGFuY2UtbW9kaWZpZWQnIHRpdGxlPSdcIiArIG1vZGlmaWVkU3RyaW5nICsgXCInPlwiICsgbW9kaWZpZWRGcm9tTm93ICsgXCI8L3NwYW4+XFxuPC9kaXY+XCI7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJhcHBsaWNhbnRfb3JnYW5pemF0aW9uX25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfYXBwbGljYW50X29yZ2FuaXphdGlvbl9uYW1lXCIpLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImluc3RhbmNlX25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfbmFtZVwiKSxcbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgIHZhciBhZ2VudF92aWV3LCBjY192aWV3LCBpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzLCBwcmlvcml0eUljb25DbGFzcywgcHJpb3JpdHlWYWx1ZSwgcmVmLCByZWYxLCBzdGVwX2N1cnJlbnRfbmFtZV92aWV3LCB1bnJlYWQ7XG4gICAgICAgICAgY2NfdmlldyA9IFwiXCI7XG4gICAgICAgICAgc3RlcF9jdXJyZW50X25hbWVfdmlldyA9IFwiXCI7XG4gICAgICAgICAgaWYgKGRvYy5pc19jYyAmJiAhKChyZWYgPSBkb2MuaW5ib3hfdXNlcnMpICE9IG51bGwgPyByZWYuaW5jbHVkZXMoTWV0ZW9yLnVzZXJJZCgpKSA6IHZvaWQgMCkgJiYgU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcpIHtcbiAgICAgICAgICAgIGNjX3ZpZXcgPSBcIjxsYWJlbCBjbGFzcz0nY2MtbGFiZWwnPihcIiArIFRBUGkxOG4uX18oXCJpbnN0YW5jZV9jY190aXRsZVwiKSArIFwiKTwvbGFiZWw+IFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZ2VudF92aWV3ID0gXCJcIjtcbiAgICAgICAgICBpZiAoZG9jLmFnZW50X3VzZXJfbmFtZSkge1xuICAgICAgICAgICAgYWdlbnRfdmlldyA9IFwiPGxhYmVsIGNsYXNzPSdjYy1sYWJlbCc+KFwiICsgVEFQaTE4bi5fXygncHJvY2Vzc19kZWxlZ2F0aW9uX3J1bGVzX2Rlc2NyaXB0aW9uJywge1xuICAgICAgICAgICAgICB1c2VyTmFtZTogZG9jLmFnZW50X3VzZXJfbmFtZVxuICAgICAgICAgICAgfSkgKyBcIik8L2xhYmVsPlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICB1bnJlYWQgPSAnJztcbiAgICAgICAgICBpZiAoU2Vzc2lvbi5nZXQoXCJib3hcIikgPT09ICdpbmJveCcgJiYgZG9jLmlzX3JlYWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1bnJlYWQgPSAnPGkgY2xhc3M9XCJpb24gaW9uLXJlY29yZCB1bnJlYWRcIj48L2k+JztcbiAgICAgICAgICB9IGVsc2UgaWYgKFNlc3Npb24uZ2V0KFwiYm94XCIpID09PSAnbW9uaXRvcicgJiYgZG9jLmlzX2hpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdW5yZWFkID0gJzxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjwvaT4nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwiXCI7XG4gICAgICAgICAgcHJpb3JpdHlWYWx1ZSA9IChyZWYxID0gZG9jLnZhbHVlcykgIT0gbnVsbCA/IHJlZjEucHJpb3JpdHkgOiB2b2lkIDA7XG4gICAgICAgICAgc3dpdGNoIChwcmlvcml0eVZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwi54m55oClXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJkYW5nZXJcIjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwi57Sn5oClXCI6XG4gICAgICAgICAgICAgIHByaW9yaXR5SWNvbkNsYXNzID0gXCJ3YXJuaW5nXCI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIuWKnuaWh1wiOlxuICAgICAgICAgICAgICBwcmlvcml0eUljb25DbGFzcyA9IFwibXV0ZWRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByaW9yaXR5SWNvbkNsYXNzKSB7XG4gICAgICAgICAgICBpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzID0gXCJjb2xvci1wcmlvcml0eSBjb2xvci1wcmlvcml0eS1cIiArIHByaW9yaXR5SWNvbkNsYXNzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCI8ZGl2IGNsYXNzPSdpbnN0YW5jZS1yZWFkLWJhcic+XCIgKyB1bnJlYWQgKyBcIjwvZGl2PlxcbjxkaXYgY2xhc3M9J2luc3RhbmNlLW5hbWUgXCIgKyBpbnN0YW5jZU5hbWVQcmlvcml0eUNsYXNzICsgXCInPlwiICsgZG9jLmluc3RhbmNlX25hbWUgKyBjY192aWV3ICsgYWdlbnRfdmlldyArIFwiPC9kaXY+XCI7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiYXBwbGljYW50X25hbWVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfYXBwbGljYW50X25hbWVcIiksXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwic3VibWl0X2RhdGVcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfc3VibWl0X2RhdGVcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICBpZiAoZG9jLnN1Ym1pdF9kYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRvYy5zdWJtaXRfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiB0cnVlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwiZmxvd19uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX2Zsb3dcIiksXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwic3RlcF9uYW1lXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N0ZXBfY3VycmVudF9uYW1lXCIpLFxuICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHZhbCwgdHlwZSwgZG9jKSB7XG4gICAgICAgICAgdmFyIGNjX3RhZywganVkZ2UsIHN0ZXBfY3VycmVudF9uYW1lO1xuICAgICAgICAgIGlmIChkb2MuaW5zdGFuY2Vfc3RhdGUgPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGp1ZGdlID0gZG9jLmp1ZGdlIHx8IFwiYXBwcm92ZWRcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RlcF9jdXJyZW50X25hbWUgPSBkb2Muc3RlcF9uYW1lIHx8ICcnO1xuICAgICAgICAgIGNjX3RhZyA9ICcnO1xuICAgICAgICAgIGlmIChkb2MuY2NfY291bnQgPiAwKSB7XG4gICAgICAgICAgICBjY190YWcgPSBUQVBpMThuLl9fKCdjY190YWcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiPGRpdiBjbGFzcz1cXFwic3RlcC1jdXJyZW50LXN0YXRlIFwiICsganVkZ2UgKyBcIlxcXCI+XCIgKyBzdGVwX2N1cnJlbnRfbmFtZSArIGNjX3RhZyArIFwiPC9kaXY+XCI7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibW9kaWZpZWRcIixcbiAgICAgICAgdGl0bGU6IHQoXCJpbnN0YW5jZXNfbW9kaWZpZWRcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICByZXR1cm4gbW9tZW50KGRvYy5tb2RpZmllZCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvcmRlcmFibGU6IHRydWVcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJzdGFydF9kYXRlXCIsXG4gICAgICAgIHRpdGxlOiB0KFwiaW5zdGFuY2VzX3N0YXJ0X2RhdGVcIiksXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICBpZiAoZG9jLnN0YXJ0X2RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZG9jLnN0YXJ0X2RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIG9yZGVyYWJsZTogdHJ1ZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImZpbmlzaF9kYXRlXCIsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICBpZiAoZG9jLmZpbmlzaF9kYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRvYy5maW5pc2hfZGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiB0cnVlXG4gICAgICB9LCB7XG4gICAgICAgIGRhdGE6IFwibW9kaWZpZWRcIixcbiAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAgZGF0YTogXCJrZXl3b3Jkc1wiLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBkYXRhOiBcImlzX2FyY2hpdmVkXCIsXG4gICAgICAgIHJlbmRlcjogZnVuY3Rpb24odmFsLCB0eXBlLCBkb2MpIHtcbiAgICAgICAgICB2YXIgcmVmO1xuICAgICAgICAgIGlmICgoZG9jICE9IG51bGwgPyAocmVmID0gZG9jLnZhbHVlcykgIT0gbnVsbCA/IHJlZi5yZWNvcmRfbmVlZCA6IHZvaWQgMCA6IHZvaWQgMCkgJiYgZG9jLnZhbHVlcy5yZWNvcmRfbmVlZCA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIGlmIChkb2MgIT0gbnVsbCA/IGRvYy5pc19hcmNoaXZlZCA6IHZvaWQgMCkge1xuICAgICAgICAgICAgICByZXR1cm4gdChcIllFU1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0KFwiTk9cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb3JkZXJhYmxlOiBmYWxzZVxuICAgICAgfVxuICAgIF0sXG4gICAgZG9tOiAoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoU3RlZWRvcy5pc01vYmlsZSgpKSB7XG4gICAgICAgIHJldHVybiAndHAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICd0cGwnO1xuICAgICAgfVxuICAgIH0pKCksXG4gICAgb3JkZXI6IFtbNCwgXCJkZXNjXCJdXSxcbiAgICBleHRyYUZpZWxkczogW1wiaW5zdGFuY2VcIiwgXCJmb3JtXCIsIFwiZmxvd1wiLCBcImluYm94X3VzZXJzXCIsIFwiaW5zdGFuY2Vfc3RhdGVcIiwgXCJzcGFjZVwiLCBcImFwcGxpY2FudFwiLCBcImZvcm1fdmVyc2lvblwiLCBcImZsb3dfdmVyc2lvblwiLCBcInR5cGVcIiwgXCJpc19yZWFkXCIsIFwic3RlcF9uYW1lXCIsIFwidmFsdWVzXCIsIFwia2V5d29yZHNcIiwgXCJmaW5hbF9kZWNpc2lvblwiLCBcImZsb3dfbmFtZVwiLCBcImlzX2hpZGRlblwiLCBcImFnZW50X3VzZXJfbmFtZVwiXSxcbiAgICBsZW5ndGhDaGFuZ2U6IHRydWUsXG4gICAgbGVuZ3RoTWVudTogWzEwLCAxNSwgMjAsIDI1LCA1MCwgMTAwXSxcbiAgICBwYWdlTGVuZ3RoOiAxMCxcbiAgICBpbmZvOiBmYWxzZSxcbiAgICBzZWFyY2hpbmc6IHRydWUsXG4gICAgcmVzcG9uc2l2ZToge1xuICAgICAgZGV0YWlsczogZmFsc2VcbiAgICB9LFxuICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgY2hhbmdlU2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yLCB1c2VySWQpIHtcbiAgICAgIHZhciByZWYsIHNwYWNlLCBzcGFjZV91c2VyO1xuICAgICAgaWYgKCF1c2VySWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBfaWQ6IC0xXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBzcGFjZSA9IHNlbGVjdG9yLnNwYWNlO1xuICAgICAgaWYgKCFzcGFjZSkge1xuICAgICAgICBpZiAoKHNlbGVjdG9yICE9IG51bGwgPyAocmVmID0gc2VsZWN0b3IuJGFuZCkgIT0gbnVsbCA/IHJlZi5sZW5ndGggOiB2b2lkIDAgOiB2b2lkIDApID4gMCkge1xuICAgICAgICAgIHNwYWNlID0gc2VsZWN0b3IuJGFuZC5nZXRQcm9wZXJ0eSgnc3BhY2UnKVswXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFzcGFjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9pZDogLTFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHNwYWNlX3VzZXIgPSBkYi5zcGFjZV91c2Vycy5maW5kT25lKHtcbiAgICAgICAgdXNlcjogdXNlcklkLFxuICAgICAgICBzcGFjZTogc3BhY2VcbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgX2lkOiAxXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCFzcGFjZV91c2VyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX2lkOiAtMVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH0sXG4gICAgcGFnaW5nVHlwZTogXCJudW1iZXJzXCJcbiAgfTtcbiAgaWYgKGZsb3dJZCkge1xuICAgIGtleSA9IFwiaW5zdGFuY2VGbG93XCIgKyBmbG93SWQ7XG4gICAgb3B0aW9ucy5uYW1lID0ga2V5O1xuICAgIFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VfdGFza3MuZmllbGRzID0gZmllbGRzO1xuICAgIGluc19maWVsZHMgPSBfaGFuZGxlTGlzdEZpZWxkcyhUYWJ1bGFyVGFibGVzLmluc3RhbmNlX3Rhc2tzLmZpZWxkcyk7XG4gICAgaW5zX2ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uKGYpIHtcbiAgICAgIGlmIChmLnR5cGUgIT09ICd0YWJsZScgJiYgZi5pc19saXN0X2Rpc3BsYXkpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICBkYXRhOiBmLm5hbWUgfHwgZi5jb2RlLFxuICAgICAgICAgIHRpdGxlOiB0KGYubmFtZSB8fCBmLmNvZGUpLFxuICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih2YWwsIHR5cGUsIGRvYykge1xuICAgICAgICAgICAgdmFyIHZhbHVlLCB2YWx1ZXM7XG4gICAgICAgICAgICB2YWx1ZXMgPSBkb2MudmFsdWVzIHx8IHt9O1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbZi5jb2RlXTtcbiAgICAgICAgICAgIHN3aXRjaCAoZi50eXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3VzZXInOlxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLm5hbWUgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS5mdWxsbmFtZSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlICdjaGVja2JveCc6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gVEFQaTE4bi5fXyhcImZvcm1fZmllbGRfY2hlY2tib3hfeWVzXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IFRBUGkxOG4uX18oXCJmb3JtX2ZpZWxkX2NoZWNrYm94X25vXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnb2RhdGEnOlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKF8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfLnBsdWNrKHZhbHVlLCAnQGxhYmVsJykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbJ0BsYWJlbCddO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufTtcblxuTWV0ZW9yLnN0YXJ0dXAoZnVuY3Rpb24oKSB7XG4gIFRhYnVsYXJUYWJsZXMuaW5zdGFuY2VzID0gbmV3IFRhYnVsYXIuVGFibGUoaW5zdGFuY2VzTGlzdFRhYmxlVGFidWxhcigpKTtcbiAgVGFidWxhclRhYmxlcy5pbnN0YW5jZV90YXNrcyA9IG5ldyBUYWJ1bGFyLlRhYmxlKGluc3RhbmNlVGFza3NMaXN0VGFibGVUYWJ1bGFyKCkpO1xuICBUYWJ1bGFyVGFibGVzLmluYm94X2luc3RhbmNlcyA9IG5ldyBUYWJ1bGFyLlRhYmxlKEdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zKFwiaW5ib3hcIikpO1xuICByZXR1cm4gVGFidWxhclRhYmxlcy5vdXRib3hfaW5zdGFuY2VzID0gbmV3IFRhYnVsYXIuVGFibGUoR2V0Qm94SW5zdGFuY2VzVGFidWxhck9wdGlvbnMoXCJvdXRib3hcIikpO1xufSk7XG5cbkdldEJveEluc3RhbmNlc1RhYnVsYXJPcHRpb25zID0gZnVuY3Rpb24oYm94LCBmbG93SWQsIGZpZWxkcykge1xuICB2YXIga2V5LCBvcHRpb25zO1xuICBrZXkgPSBcImluc3RhbmNlRmxvd1wiICsgYm94ICsgZmxvd0lkO1xuICBpZiAoYm94ID09PSBcImluYm94XCIpIHtcbiAgICBvcHRpb25zID0gX2dldF9pbmJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zKGZsb3dJZCwgZmllbGRzKTtcbiAgfSBlbHNlIGlmIChib3ggPT09IFwib3V0Ym94XCIpIHtcbiAgICBvcHRpb25zID0gX2dldF9vdXRib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyhmbG93SWQsIGZpZWxkcyk7XG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucyA9IGluc3RhbmNlc0xpc3RUYWJsZVRhYnVsYXIoZmxvd0lkLCBmaWVsZHMpO1xuICAgIGlmICghZmxvd0lkKSB7XG4gICAgICBvcHRpb25zLm5hbWUgPSBcImluYm94X2luc3RhbmNlc1wiO1xuICAgIH1cbiAgfVxuICBpZiAoZmxvd0lkKSB7XG4gICAgb3B0aW9ucy5uYW1lID0ga2V5O1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufTtcblxuX2dldF9pbmJveF9pbnN0YW5jZXNfdGFidWxhcl9vcHRpb25zID0gZnVuY3Rpb24oZmxvd0lkLCBmaWVsZHMpIHtcbiAgdmFyIG9wdGlvbnM7XG4gIG9wdGlvbnMgPSBpbnN0YW5jZVRhc2tzTGlzdFRhYmxlVGFidWxhcihmbG93SWQsIGZpZWxkcyk7XG4gIGlmICghZmxvd0lkKSB7XG4gICAgb3B0aW9ucy5uYW1lID0gXCJpbmJveF9pbnN0YW5jZXNcIjtcbiAgfVxuICBvcHRpb25zLm9yZGVyID0gW1s4LCBcImRlc2NcIl1dO1xuICBvcHRpb25zLmdldFNvcnQgPSBmdW5jdGlvbihzZWxlY3Rvciwgc29ydCkge1xuICAgIGNvbnNvbGUubG9nKCdpbmJveF9pbnN0YW5jZXM6Jywgc29ydCk7XG4gICAgcmV0dXJuIHNvcnQ7XG4gIH07XG4gIHJldHVybiBvcHRpb25zO1xufTtcblxuX2dldF9vdXRib3hfaW5zdGFuY2VzX3RhYnVsYXJfb3B0aW9ucyA9IGZ1bmN0aW9uKGZsb3dJZCwgZmllbGRzKSB7XG4gIHZhciBvcHRpb25zO1xuICBvcHRpb25zID0gaW5zdGFuY2VUYXNrc0xpc3RUYWJsZVRhYnVsYXIoZmxvd0lkLCBmaWVsZHMpO1xuICBpZiAoIWZsb3dJZCkge1xuICAgIG9wdGlvbnMubmFtZSA9IFwib3V0Ym94X2luc3RhbmNlc1wiO1xuICB9XG4gIG9wdGlvbnMub3JkZXIgPSBbWzksIC0xXV07XG4gIG9wdGlvbnMuZ2V0U29ydCA9IGZ1bmN0aW9uKHNlbGVjdG9yLCBzb3J0KSB7XG4gICAgY29uc29sZS5sb2coJ291dGJveF9pbnN0YW5jZXM6Jywgc29ydCk7XG4gICAgcmV0dXJuIHNvcnQ7XG4gIH07XG4gIHJldHVybiBvcHRpb25zO1xufTtcblxuaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICBUYWJ1bGFyVGFibGVzLmZsb3dJbnN0YW5jZXMgPSBuZXcgUmVhY3RpdmVWYXIoKTtcbn1cblxuTWV0ZW9yLnN0YXJ0dXAoZnVuY3Rpb24oKSB7XG4gIHJldHVybiBUcmFja2VyLmF1dG9ydW4oZnVuY3Rpb24oYykge1xuICAgIGlmIChNZXRlb3IuaXNDbGllbnQgJiYgIVN0ZWVkb3MuaXNNb2JpbGUoKSkge1xuICAgICAgaWYgKFNlc3Npb24uZ2V0KFwiZmxvd0lkXCIpICYmIFNlc3Npb24uZ2V0KFwiYm94XCIpICE9PSAnZHJhZnQnKSB7XG4gICAgICAgIHJldHVybiBNZXRlb3IuY2FsbChcIm5ld0luc3RhbmNlc0xpc3RUYWJ1bGFyXCIsIFNlc3Npb24uZ2V0KFwiYm94XCIpLCBTZXNzaW9uLmdldChcImZsb3dJZFwiKSwgZnVuY3Rpb24oZXJyb3IsIHJlc3VsdCkge1xuICAgICAgICAgIG5ld0luc3RhbmNlc0xpc3RUYWJ1bGFyKFNlc3Npb24uZ2V0KFwiYm94XCIpLCBTZXNzaW9uLmdldChcImZsb3dJZFwiKSwgcmVzdWx0KTtcbiAgICAgICAgICByZXR1cm4gVGVtcGxhdGUuaW5zdGFuY2VfbGlzdC5fY2hhbmdlT3JkZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0pO1xuXG5uZXdJbnN0YW5jZXNMaXN0VGFidWxhciA9IGZ1bmN0aW9uKGJveCwgZmxvd0lkLCBmaWVsZHMpIHtcbiAgdmFyIGZsb3csIGtleSwgcmVmLCByZWYxLCByZWYyO1xuICBpZiAoIWZpZWxkcykge1xuICAgIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtcbiAgICAgIF9pZDogZmxvd0lkXG4gICAgfSwge1xuICAgICAgZmllbGRzOiB7XG4gICAgICAgIGZvcm06IDFcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmaWVsZHMgPSAocmVmID0gZGIuZm9ybXMuZmluZE9uZSh7XG4gICAgICBfaWQ6IGZsb3cgIT0gbnVsbCA/IGZsb3cuZm9ybSA6IHZvaWQgMFxuICAgIH0sIHtcbiAgICAgIGZpZWxkczoge1xuICAgICAgICAnY3VycmVudC5maWVsZHMnOiAxXG4gICAgICB9XG4gICAgfSkpICE9IG51bGwgPyAocmVmMSA9IHJlZi5jdXJyZW50KSAhPSBudWxsID8gcmVmMS5maWVsZHMgOiB2b2lkIDAgOiB2b2lkIDA7XG4gIH1cbiAgZmllbGRzID0gX2hhbmRsZUxpc3RGaWVsZHMoZmllbGRzKTtcbiAgaWYgKChmaWVsZHMgIT0gbnVsbCA/IChyZWYyID0gZmllbGRzLmZpbHRlclByb3BlcnR5KFwiaXNfbGlzdF9kaXNwbGF5XCIsIHRydWUpKSAhPSBudWxsID8gcmVmMi5sZW5ndGggOiB2b2lkIDAgOiB2b2lkIDApID4gMCkge1xuICAgIGtleSA9IFwiaW5zdGFuY2VGbG93XCIgKyBib3ggKyBmbG93SWQ7XG4gICAgaWYgKE1ldGVvci5pc0NsaWVudCkge1xuICAgICAgVGFidWxhclRhYmxlcy5mbG93SW5zdGFuY2VzLnNldChuZXcgVGFidWxhci5UYWJsZShHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhib3gsIGZsb3dJZCwgZmllbGRzKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXcgVGFidWxhci5UYWJsZShHZXRCb3hJbnN0YW5jZXNUYWJ1bGFyT3B0aW9ucyhib3gsIGZsb3dJZCwgZmllbGRzKSk7XG4gICAgfVxuICAgIHJldHVybiBjb25zb2xlLmxvZyhcIm5ldyBUYWJ1bGFyVGFibGVzIFwiLCBrZXkpO1xuICB9XG59O1xuXG5pZiAoTWV0ZW9yLmlzU2VydmVyKSB7XG4gIE1ldGVvci5tZXRob2RzKHtcbiAgICBuZXdJbnN0YW5jZXNMaXN0VGFidWxhcjogZnVuY3Rpb24oYm94LCBmbG93SWQpIHtcbiAgICAgIHZhciBmaWVsZHMsIGZsb3csIHJlZiwgcmVmMTtcbiAgICAgIG5ld0luc3RhbmNlc0xpc3RUYWJ1bGFyKGJveCwgZmxvd0lkKTtcbiAgICAgIGZsb3cgPSBkYi5mbG93cy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBmbG93SWRcbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgZm9ybTogMVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZpZWxkcyA9IChyZWYgPSBkYi5mb3Jtcy5maW5kT25lKHtcbiAgICAgICAgX2lkOiBmbG93ICE9IG51bGwgPyBmbG93LmZvcm0gOiB2b2lkIDBcbiAgICAgIH0sIHtcbiAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgJ2N1cnJlbnQuZmllbGRzJzogMVxuICAgICAgICB9XG4gICAgICB9KSkgIT0gbnVsbCA/IChyZWYxID0gcmVmLmN1cnJlbnQpICE9IG51bGwgPyByZWYxLmZpZWxkcyA6IHZvaWQgMCA6IHZvaWQgMDtcbiAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ== diff --git a/server/bundle/programs/server/packages/steedos_workflow.js.map b/server/bundle/programs/server/packages/steedos_workflow.js.map index ad2ae87737..ac3df85c31 100644 --- a/server/bundle/programs/server/packages/steedos_workflow.js.map +++ b/server/bundle/programs/server/packages/steedos_workflow.js.map @@ -1 +1 @@ -{"version":3,"sources":["meteor://💻app/packages/steedos:workflow/checkNpm.js","meteor://💻app/packages/steedos:workflow/lib/URI.js","meteor://💻app/packages/steedos_workflow/lib/core.coffee","meteor://💻app/lib/core.coffee","meteor://💻app/packages/steedos_workflow/lib/models/instance_tasks.coffee","meteor://💻app/packages/steedos_workflow/lib/models/auth_tokens.coffee","meteor://💻app/packages/steedos_workflow/client/lib/instance_readonly_template.coffee","meteor://💻app/client/lib/instance_readonly_template.coffee","meteor://💻app/packages/steedos_workflow/client/lib/template_manager.coffee","meteor://💻app/client/lib/template_manager.coffee","meteor://💻app/packages/steedos:workflow/client/coreform/inputTypes/coreform-table/steedos-table.js","meteor://💻app/packages/steedos_workflow/client/views/instance/_image_sign.coffee","meteor://💻app/client/views/instance/_image_sign.coffee","meteor://💻app/packages/steedos_workflow/client/views/instance/_traces_handler.coffee","meteor://💻app/client/views/instance/_traces_handler.coffee","meteor://💻app/packages/steedos_workflow/client/views/instance/_instance_form.coffee","meteor://💻app/client/views/instance/_instance_form.coffee","meteor://💻app/packages/steedos:workflow/client/views/instance/_instance_attachments.js","meteor://💻app/packages/steedos_workflow/client/views/instance/_instance_sign_text.coffee","meteor://💻app/client/views/instance/_instance_sign_text.coffee","meteor://💻app/packages/steedos_workflow/client/views/instance/_traces_help.coffee","meteor://💻app/client/views/instance/_traces_help.coffee","meteor://💻app/packages/steedos_workflow/client/views/instance/_related_instances.coffee","meteor://💻app/client/views/instance/_related_instances.coffee","meteor://💻app/packages/steedos_workflow/client/views/instance/_related_records.coffee","meteor://💻app/client/views/instance/_related_records.coffee","meteor://💻app/packages/steedos:workflow/routes/getSpaceUsers.js","meteor://💻app/packages/steedos:workflow/routes/getFormulaUserObjects.js","meteor://💻app/packages/steedos:workflow/routes/init_formula_values.js","meteor://💻app/packages/steedos:workflow/routes/api_workflow_forward.js","meteor://💻app/packages/steedos_workflow/routes/test_webhook.coffee","meteor://💻app/routes/test_webhook.coffee","meteor://💻app/packages/steedos_workflow/server/methods/set_instance_step_approve.coffee","meteor://💻app/packages/steedos:workflow/server/methods/get_instance_data.js","meteor://💻app/packages/steedos:workflow/server/methods/save_instance.js","meteor://💻app/packages/steedos:workflow/server/methods/trace_approve_cc.js","meteor://💻app/packages/steedos:workflow/server/methods/forward_instance.js","meteor://💻app/packages/steedos:workflow/server/methods/cfs_instances.js","meteor://💻app/packages/steedos_workflow/server/methods/instance_approve.coffee","meteor://💻app/packages/steedos_workflow/server/methods/instance_return.coffee","meteor://💻app/packages/steedos_workflow/server/methods/instance_remind.coffee","meteor://💻app/packages/steedos_workflow/server/methods/next_step_users_not_found.coffee","meteor://💻app/packages/steedos_workflow/server/methods/instance_number_rules.coffee","meteor://💻app/packages/steedos_workflow/server/methods/check_main_attach.coffee","meteor://💻app/packages/steedos_workflow/server/methods/related_instances.coffee","meteor://💻app/packages/steedos_workflow/server/methods/edit_flow_positions.coffee","meteor://💻app/packages/steedos_workflow/server/methods/start_flow.coffee","meteor://💻app/packages/steedos_workflow/server/methods/instance_traces.coffee","meteor://💻app/packages/steedos_workflow/server/methods/instance_batch.coffee","meteor://💻app/packages/steedos_workflow/server/methods/flow.coffee","meteor://💻app/packages/steedos_workflow/server/methods/hide_instance.coffee","meteor://💻app/packages/steedos_workflow/server/methods/instance_value.coffee","meteor://💻app/packages/steedos_workflow/server/routes/instance.coffee","meteor://💻app/server/routes/instance.coffee","meteor://💻app/packages/steedos_workflow/server/routes/steedos_css.coffee","meteor://💻app/server/routes/steedos_css.coffee","meteor://💻app/packages/steedos_workflow/server/routes/instance_draft_view.coffee","meteor://💻app/server/routes/instance_draft_view.coffee","meteor://💻app/packages/steedos:workflow/server/lib/1_form_formula.js","meteor://💻app/packages/steedos_workflow/server/publications/categories.coffee","meteor://💻app/server/publications/categories.coffee","meteor://💻app/packages/steedos_workflow/server/publications/cfs_instances.coffee","meteor://💻app/server/publications/cfs_instances.coffee","meteor://💻app/packages/steedos_workflow/server/publications/flow_positions.coffee","meteor://💻app/server/publications/flow_positions.coffee","meteor://💻app/packages/steedos_workflow/server/publications/flow_positions_tabular.coffee","meteor://💻app/server/publications/flow_positions_tabular.coffee","meteor://💻app/packages/steedos_workflow/server/publications/flow_roles.coffee","meteor://💻app/server/publications/flow_roles.coffee","meteor://💻app/packages/steedos_workflow/server/publications/flows.coffee","meteor://💻app/server/publications/flows.coffee","meteor://💻app/packages/steedos_workflow/server/publications/forms.coffee","meteor://💻app/server/publications/forms.coffee","meteor://💻app/packages/steedos_workflow/server/publications/instance_data.coffee","meteor://💻app/server/publications/instance_data.coffee","meteor://💻app/packages/steedos_workflow/server/publications/instance_list.coffee","meteor://💻app/server/publications/instance_list.coffee","meteor://💻app/packages/steedos_workflow/server/publications/instance_tabular.coffee","meteor://💻app/server/publications/instance_tabular.coffee","meteor://💻app/packages/steedos_workflow/server/publications/instance_draft.coffee","meteor://💻app/server/publications/instance_draft.coffee","meteor://💻app/packages/steedos_workflow/server/publications/distributed_instances_state_by_ids.coffee","meteor://💻app/server/publications/distributed_instances_state_by_ids.coffee","meteor://💻app/packages/steedos_workflow/server/publications/related_instaces.coffee","meteor://💻app/server/publications/related_instaces.coffee","meteor://💻app/packages/steedos_workflow/server/publications/space_user_signs.coffee","meteor://💻app/server/publications/space_user_signs.coffee","meteor://💻app/packages/steedos_workflow/server/publications/user_inbox_instance.coffee","meteor://💻app/server/publications/user_inbox_instance.coffee","meteor://💻app/packages/steedos_workflow/server/publications/flow_main_attach_template.coffee","meteor://💻app/server/publications/flow_main_attach_template.coffee","meteor://💻app/packages/steedos_workflow/server/flow-template/workflow_template.coffee","meteor://💻app/server/flow-template/workflow_template.coffee","meteor://💻app/packages/steedos_workflow/server/schedule/auto_finish_process_delegation.coffee","meteor://💻app/server/schedule/auto_finish_process_delegation.coffee","meteor://💻app/packages/steedos_workflow/server/schedule/timeout_auto_submit.coffee","meteor://💻app/server/schedule/timeout_auto_submit.coffee","meteor://💻app/packages/steedos_workflow/related_instances_tabular.coffee","meteor://💻app/related_instances_tabular.coffee","meteor://💻app/packages/steedos_workflow/tabular.coffee","meteor://💻app/tabular.coffee"],"names":["checkNpmVersions","module","link","v","root","factory","define","amd","URI","punycode","IPv6","SecondLevelDomains","SLD","_URI","url","base","_urlSupplied","arguments","length","_baseSupplied","undefined","TypeError","location","href","absoluteTo","version","p","prototype","hasOwn","Object","hasOwnProperty","escapeRegEx","string","replace","getType","value","String","toString","call","slice","isArray","obj","filterArrayValues","data","lookup","i","_match","test","splice","arrayContains","list","_type","match","arraysEqual","one","two","sort","l","trimSlashes","text","trim_expression","_parts","protocol","username","password","hostname","urn","port","path","query","fragment","duplicateQueryParameters","escapeQuerySpace","protocol_expression","idn_expression","punycode_expression","ip4_expression","ip6_expression","find_uri_expression","findUri","start","end","trim","defaultPorts","http","https","ftp","gopher","ws","wss","invalid_hostname_characters","domAttributes","getDomAttribute","node","nodeName","toLowerCase","type","escapeForDumbFirefox36","escape","strictEncodeURIComponent","encodeURIComponent","encode","decode","decodeURIComponent","iso8859","unescape","unicode","characters","pathname","expression","map","reserved","urnpath","encodeQuery","escaped","decodeQuery","e","_part","generateAccessor","_group","c","generateSegmentedPathFunction","_sep","_codingFuncName","_innerCodingFuncName","actualCodingFunc","segments","split","join","decodePath","decodeUrnPath","recodePath","recodeUrnPath","encodeReserved","parse","parts","pos","indexOf","substring","parseAuthority","parseHost","bracketPos","t","charAt","firstColon","firstSlash","nextColon","parseUserinfo","lastIndexOf","shift","parseQuery","items","splits","name","push","build","buildAuthority","buildHost","buildUserinfo","buildQuery","unique","key","buildQueryParameter","addQuery","concat","removeQuery","hasQuery","withinArray","_booly","Boolean","op","commonPath","Math","min","withinString","callback","options","_start","_end","_trim","_attributeOpen","lastIndex","exec","index","ignoreHtml","attributeOpen","max","search","ignore","result","ensureValidHostname","toASCII","noConflict","removeAll","unconflicted","URITemplate","deferBuild","_deferred_build","_string","clone","valueOf","generateSimpleAccessor","generatePrefixAccessor","_key","hash","res","_object","attribute","src","is","what","ip","ip4","ip6","sld","idn","relative","has","_protocol","_port","_hostname","scheme","x","origin","authority","host","userinfo","resource","subdomain","domain","sub","RegExp","tld","get","ReferenceError","directory","filename","decodePathSegment","mutatedDirectory","normalizePath","suffix","s","segment","separator","absolute","Error","pop","unshift","segmentCoded","q","setQuery","setSearch","addSearch","removeSearch","hasSearch","normalize","normalizeProtocol","normalizeQuery","normalizeFragment","normalizeHostname","normalizePort","best","_path","_was_relative","_leadingParents","_parent","_pos","normalizePathname","normalizeSearch","normalizeHash","d","readable","uri","toUnicode","qp","kv","resolved","properties","basedir","relativeTo","relativeParts","baseParts","common","relativePath","basePath","parents","equals","one_map","two_map","checked","one_query","two_query","Workflow","ImageSign","TracesHandler","TracesTemplate","InstanceformTemplate","InstanceAttachmentTemplate","InstanceSignText","RelatedInstances","RelatedRecords","InstanceMacro","context","TracesManager","isOpinionField_from_string","field_formula","includesOpinionField","form","form_version","_form_version","field_formulas","fields","Array","Meteor","isServer","uuflowManager","getFormVersion","db","forms","findOne","_id","form_versions","forEach","f","ref","console","log","f1","formula","_","some","helpers","instance_tasks","Collection","_simpleSchema","SimpleSchema","instance","trace","is_finished","user","user_name","handler","handler_name","handler_organization","handler_organization_name","handler_organization_fullname","start_date","Date","due_date","is_read","is_error","values","deadline","remind_date","reminded_count","Number","read_date","description","modified","modified_by","sign_show","judge","next_steps","finish_date","cost_time","space","instance_name","submitter","submitter_name","applicant","applicant_name","applicant_organization_name","submit_date","flow","flow_name","step","step_name","category_name","instance_state","distribute_from_instance","forward_from_instance","keywords","is_archived","category","auth_tokens","_getLocale","_getRequiredFields","_getStartStepEditableFields","_getStartStepRequiredFields","_getTemplateData","_getViewHtml","getLinkText","marked","require","InstanceReadOnlyTemplate","instance_attachment","afSelectUserRead","afFormGroupRead","afFormGroup","create","tempalteName","steedosData","template","templateCompiled","templateRenderFunction","SpacebarsCompiler","compile","isBody","eval","Template","Blaze","createInstanceSignText","instanceSignTextCompiled","instanceSignTextHtml","instanceSignTextRenderFunction","instanceSignText","createImageSign","imageSignCompiled","imageSignHtml","imageSignRenderFunction","imageSign","createTracesHanlder","tracesHanlderCompiled","tracesHanlderHtml","tracesHanlderRenderFunction","instance_traces_handler","init","item","label","detail_url","Steedos","absoluteUrl","getValue","field","locale","utcOffset","date","fieldOptions","hours","month","nameField","records","seconds","selectedOption","selectedOptions","splitedValues","t0","t1","uiSchema","year","n","itemSplits","encodeURI","error","is_multiselect","getProperty","fullname","TAPi18n","__","formatDate","formatTime","is_textarea","find","filter","is_percent","numberToPercentString","digits","numberToString","isClient","authRequest","JSON","stringify","async","objectFind","filters","fileName","filePreviewHtml","fileUrl","original","Creator","getObject","reference_to","NAME_FIELD_KEY","reference_to_field","getObjectNameFieldKey","getLabel","code","findPropertyByPK","getInstanceFormVersion","form_fields","current","where","historys","getFlowVersion","flow_version","flows","viewHtml","Assets","getText","ref1","toLocaleLowerCase","rev","is_required","steps","editableCode","startStep","keys","permissions","requiredFields","intersection","WorkflowManager","WorkflowManager_format","getAutoformSchemaValues","insname","ins_state","state","ins_final_decision","ins_code","ins_is_archived","ins_is_deleted","applicantContext","sessionUserId","editable","startStepEditableFields","passing","moment","format","getInstanceView","body","instanceCompiled","instanceRenderFunction","instanceTemplate","TemplateManager","getTemplate","templateName","instance_readonly_view","toHTMLWithData","getTracesView","traceCompiled","traceRenderFunction","tracesHtml","instance_style","trace_readonly_view","traces","getAttachmentView","attachmentCompiled","attachmentHtml","attachmentRenderFunction","attachments_readonly_view","getRelatedInstancesView","relatedInstancesCompiled","relatedInstancesHtml","relatedInstancesRenderFunction","related_instances_view","getRelatedRecordsView","relatedRecordsCompiled","relatedRecordsHtml","relatedRecordsRenderFunction","related_records_view","getOnLoadScript","form_script","getInstanceHtml","allCssLink","attachment","creatorService","cssHref","formDescription","formDescriptionHtml","html","ins_record_ids","instanceBoxStyle","jqHref","onLoadScript","openFileScript","related_instances","related_records","showTracesBtn","showTracesScript","traceCheck","width","settings","webservices","creator","record_ids","isMobile","showTrace","final_decision","showAttachments","isEmpty","tagger","styles","plugins","add_styles","formId","instance_title","pageTitle","pageTitleTrClass","val","CoreForm","pageTitleFieldName","handleTableTemplate","_export","table_fields","table_field","field_permission","pureCode","required","title_permission","removeSpecialCharacter","isOpinionField","tr_start","td_colspan","tr_end","includes","permission","_template","table","_templateHelps","steedos_instance","getInstance","atts","id","style","disabled","instanceId","form_types","ApproveManager","isReadOnly","steedos_form","innersubformContext","doc_values","Session","a","b","getAutoformSchema","instance_box_style","box","ins","print_template","instance_template","SteedosTable","checkItem","item_index","fieldObj","getField","fieldVal","getItemModalValue","sf_name","sfields","sf","InstanceManager","checkFormFieldValue","$","setTableItemValue","item_value","tableValue","getTableValue","getTableItemValue","removeTableItem","removed","setTableValue","getValidValue","validValue","handleData","instanceFields","getInstanceFields","getModalData","Form_formula","getFormulaFieldVariable","AutoForm","getFormValues","insertDoc","addItem","_item_value","getKeys","append","getTr","updateItem","tds","getRemoveTd","sfield","getTd","empty","runFormula","removeItem","hide","showModal","method","modalData","setTimeout","Modal","show","getCurrentDataForForm","ss","getFormSchema","schema","objectKeys","_makeGeneric","getThead","isObject","thead","trs","sf_length","wide_fields","filterProperty","is_wide","getTbody","sfieldsEditable","tbody","tr","td","td_value","getTDValue","view","CFDataManager","getFormulaSpaceUsers","u","getFormulaOrganizations","o","getFormulaOrganization","pluck","addInputType","valueOut","valueConverters","stringToStringArray","stringToNumber","stringToNumberArray","stringToBoolean","stringToBooleanArray","stringToDate","stringToDateArray","contextAdjust","maxlength","afTable","events","event","new_item_index","currentTarget","dataset","set","rendered","str","addItemTr","getCurrentStep","step_type","ccHasEditPermission","autorun","currentData","spaceUserSign","userId","space_user_signs","imageURL","sign","showSignImage","traceShowSignImage","objectUrl","object_name","record_id","app_id","getObjectUrl","unempty","unequals","include","ref2","ref3","getInstanceFlowVersion","approves","ref4","approve","judge_name","opinion_fields_code","sign_field_code","after_field","before_field","pre_fields","pre_wide_fields","sort_approve","order","p1","p2","_p1","_p2","getTime","_t","isTextarea","getCfClass","getTableThead","getTableBody","showLabel","templateData","getOpinionFieldStepsName","top_keywords","foo1","opinionFields","foo","json_formula","s1","error1","yijianlan","stepName","image_sign","only_cc_opinion","only_cc","default_description","only_handler","showCCOpinion","markDownToHtml","markDownString","Npm","Spacebars","SafeString","f_label","that","isSection","registerHelper","ins_attach_download_url","getPermissions","instanceformChangeEvent","preventDefault","openWindow","target","onCreated","compiled","instanceCustomTemplate","instanceView","renderFunction","View","instance_custom_template","onRendered","currentApprove","currentStep","formula_fields","instanceNumberFields","setInstanceFormApplicant","nextSteps","nextStepUsers","InstanceEvent","initEvents","getCurrentApprove","each","element","schemaKey","toastr","reason","getFieldValue","InstanceNumberRules","instanceNumberBuilder","trigger","run","showMainTitle","workflowMainAttachTitle","enabled_add_main_attachment","current_step","currentTrace","getCurrentTrace","main_attach_count","cfs","instances","count","distribute_main_attach_count","start_step","getStartStep","can_edit_main_attach","enabled_edit_normal_attachment","getFlow","upload_after_being_distributed","isCC","getCCStep","can_edit_normal_attach","main_attachment","main_attach","normal_attachments","selector","$ne","dfis","distribute_from_instances","$in","distribute_main","firstVersionMain","metadata","parent","attachmentUploadedAt","uploadedAt","firstVersion","sortBy","instanceIds","attachments_count","flow_files","files","isDraftAndFlowfilesExist","compact","attachments","$or","fetch","myApprove","myTrace","isInbox","defaultDescription","approve_sort","approvesGroup","approves_sorted","completed_date","hasNext","haveDescriptionApprove","is_completed","last","top_approves","union","top_approve","groupBy","handlerApproves","descriptionApproves","workflow","showBlankApproveDescription","_display","isMyApprove","myApproveDescription","approveId","now","isOpinionOfField","imageSignData","getLastSignApprove","getHandlerSignShowApproves","lastMyApproveDescription","showApprove","judge_description","is_approved","is_rejected","is_readed","addClass","dateFormat","getFullYear","getStepName","stepId","getInstanceStep","showDeleteButton","approved","from_user","isShowModificationButton","approve_admins","isShow","contains","isEditing","is_editing","isShowDescription","getApproveStatusIcon","approveJudge","autoSubmitted","approveStatusIcon","getApproveStatusText","approveStatusText","getApproveJudgeClass","isForward","showForwardDeleteButton","forward_instance","isDistribute","showDistributeDeleteButton","hasFlowAdminPermission","finishDateSchema","isAndroidOrIOS","autoform","optional","readonly","dateTimePickerOptions","ignoreReadonly","widgetPositioning","horizontal","finishDateValues","showTracesView","show_modal_traces_list","space_settings","getInstanceStateText","instance_id","getInstanceStateColor","cla","firstTrace","last_distribute_from","dis_info","$exists","created","created_by","UUflow_api","getNameForUser","users","from_user_name","isCCOrDistributeOrForwardTerminated","judgeTerminated","instanceExists","agentDescription","userName","traceName","traceId","handlerDoc","handlerId","users_can_read_cc_handler_detail_info","getContactInfoForUser","stopPropagation","calling","err","removeClass","success","allowMultiple","closest","target_user_id","openSafeObjectUrl","forward_space","forwardspace","forwardinstance","Tracker","afterFlush","on","scrollTop","finish_input","opinion_input","showRelatedInstaces","related_instaces","related_instace_url","isCordova","show_delete","showRelatedRecords","relatedRecordUrl","objcetName","ids","process","env","CREATOR_NODE_ENV","JsonRoutes","add","req","next","hashData","action","to_users","sendResult","stack","errors","errorMessage","message","workflowMethods","methods","set_instance_step_approve","ins_id","step_approve","stepsApprovesOptions","apply","set_instance_skip_steps","get_instance_data","formCached","flowCached","draft_save_instance","inbox_save_instance","cc_do","cc_user_ids","cc_read","cc_submit","cc_remove","batch_cancel_cc","approve_ids","cc_save","space_id","flow_id","hasSaveInstanceToAttachment","isForwardAttachments","selectedUsers","action_type","related","from_approve_id","forward_remove","trace_id","approve_id","cancelDistribute","cfs_instances_remove","file_id","cfs_instances_set_current","cfs_instances_lock","user_id","cfs_instances_unlock","download_space_instance_attachments_to_disk","spaceId","cfsRecordIds","set_approve_have_read","change_approve_info","update_approve_sign","sign_type","lastSignApprove","update_sign_show","objs","myApprove_id","instance_return","instance_remind","remind_users","remind_count","remind_deadline","action_types","next_step_users_not_found","deal_type","params","_eval","check_main_attach","remove_related","re_ins_id","update_instance_related","updateFlowPosition","updateFlowRole","start_flow","flowId","get_instance_traces","categoryId","flowIds","get_batch_instances","get_batch_instances_count","get_my_approves","change_flow_state","hide_instance","insId","is_hidden","getInstanceValues","Cookies","getInstanceReadOnly","_hasPermission","_locale","_parent_instances","dataBuf","hide_traces","spaceUserCount","getAPILoginUser","access_token","getUserIdFromAccessToken","spaces","space_users","hasInstancePermissions","_parent_id","_parent_ins","charset","Buffer","setHeader","statusCode","ret_sync_token","spaceUser","spaceUserOrganizations","sync_token","APIAuthenticationCheck","headers","isSpaceAdmin","organizations","canMonitor","canAdmin","$gt","$nin","inbox_uers","cc_users","outbox_users","skip","limit","copies","allCss","WebApp","getRefreshableAssets","css","rootUrl","__meteor_runtime_config__","ROOT_URL_PATH_PREFIX","ROOT_URL","endsWith","h","g","m","k","getEach","uniq","mixin","dest","handerUserObject","organization","hr","sort_no","mobile","work_phone","position","userRoles","roles","handerOrgObject","org","init_formula_values","autoFormDoc","approver","__values","tableFields","tableValues","formulaTableValues","__tableValues","tablefield","getFormulaUserObjects","getFormulaOrgObjects","getFormulaUserObject","publish","check","ready","categories","app","flow_positions","role","publishComposite","tableName","Match","Optional","unblock","children","flow_roles","createTemplateFormAndFlow","perms","company_id","distribute_optional_users","distribute_to_self","enable_amisform","versionId","handle","self","latest","observeChanges","changed","added","onStop","stop","flow_ids","distribute_end_notification","allow_select_step","amis_schema","getMiniInstance","getMyapproveModified","instance_fields_0","miniApproveFields","needChange","triggerChangeFields","triggerChangeFieldsValues","myApproveModifieds","_instanceId","_trace","changeFields","_change","_rev","_my_approve_modifieds","isEqual","getInstanceTraces","_insId","inbox_users","asyncLastFinishedApprove","lastFinishedApproveAggregate","instanceid","dataMap","operation","rawCollection","aggregate","toArray","doc","isFunction","wrapAsync","getMyApprove","getMyLastFinishedApprove","getStepCurrentName","notFinishedTraces","agent","stepCurrentName","$slice","myLastFinishedApprove","agent_user_name","my_finish_date","is_cc","cc_count","tabularName","instance_ids","related_instance_ids","_async_get_flow_instances_aggregate","_get_flow_instances_aggregate","_items","$match","$group","$sum","_changeData","_flowsData","_init","dataItem","flow_instance","observe","getCollection","workflowTemplate","startup","absolute_path_cn","absolute_path_us","filesList_cn","filesList_us","fs","mime","path_cn","path_us","readFileList","pathDir","filesList","readdirSync","stat","statSync","isDirectory","workflowTemplates","resolve","existsSync","file","readFileSync","go_next","rule","schedule","cron","auto_finish_process_delegation","scheduleJob","bindEnvironment","time","process_delegation_rules","update","enabled","end_time","$lte","$set","multi","timeEnd","timeout_auto_submit","timeoutAutoSubmit","TabularTables","related_instances_tabular","Tabular","Table","collection","columns","title","orderable","render","input","step_current_name","current_step_name","dom","lengthChange","extraFields","pageLength","info","searching","responsive","details","autoWidth","changeSelector","curSpaceUser","$and","admins","fl","extend","GetBoxInstancesTabularOptions","_get_inbox_instances_tabular_options","_get_outbox_instances_tabular_options","_handleListFields","instanceTasksListTableTabular","instancesListTableTabular","newInstancesListTabular","updateTabularTitle","subs","SubsManager","ins_fields","pub","onUnload","instance_list","_tableColumns","drawCallback","ellipsisLink","emptyTd","colSpan","isPad","perfectScrollbar","oInstance","attr","click","goPage","height","pages","ceil","fnRecordsDisplay","_iDisplayLength","DataTable","page","draw","blur","currentPage","keydown","keyCode","createdRow","row","dataIndex","FlowRouter","setAttribute","agent_view","cc_view","instanceNamePriorityClass","modifiedFromNow","modifiedString","priorityIcon","priorityIconClass","priorityValue","step_current_name_view","unread","momentReactiveFromNow","priority","visible","cc_tag","record_need","lengthMenu","space_user","pagingType","is_list_display","inbox_instances","outbox_instances","getSort","flowInstances","ReactiveVar","_changeOrder"],"mappings":"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AlB,CAAsB,CAAtB,CAAL;;AAEA,QAAG1wB,QAAH;AACC,aAAOqE,OAAOsH,WAAP,CAAmB,WAAS8kB,UAAT,GAAoB,QAApB,GAA4BhZ,EAA/C,CAAP;AADD;AAGC,aAAO/L,QAAQC,WAAR,CAAoB,WAAS8kB,UAAT,GAAoB,QAApB,GAA4BhZ,EAAhD,CAAP;ACIE;AD9BJ;AAAA,CADD,C;;;;;;;;;;;;;;;;;;;;;;;AEAA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,K;;;;;;;;;;;AC/BA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,K;;;;;;;;;;;AC/BA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","file":"/packages/steedos_workflow.js","sourcesContent":["import { checkNpmVersions } from 'meteor/tmeasday:check-npm-versions';\ncheckNpmVersions({\n\t\"node-schedule\": \"^1.3.1\",\n\t\"xml2js\": \"^0.4.19\",\n}, 'steedos:workflow');","/*!\n * URI.js - Mutating URLs\n *\n * Version: 1.17.0\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n * MIT License http://www.opensource.org/licenses/mit-license\n * GPL v3 http://opensource.org/licenses/GPL-3.0\n *\n */\n(function (root, factory) {\n\t'use strict';\n\t// https://github.com/umdjs/umd/blob/master/returnExports.js\n\t// if (typeof exports === 'object') {\n\t// // Node\n\t// module.exports = factory(require('./punycode'), require('./IPv6'), require('./SecondLevelDomains'));\n\t// } else\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(['./punycode', './IPv6', './SecondLevelDomains'], factory);\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.URI = factory(root.punycode, root.IPv6, root.SecondLevelDomains, root);\n\t}\n}(this, function (punycode, IPv6, SLD, root) {\n\t'use strict';\n\t/*global location, escape, unescape */\n\t// FIXME: v2.0.0 renamce non-camelCase properties to uppercase\n\t/*jshint camelcase: false */\n\n\t// save current URI variable, if any\n\tvar _URI = root && root.URI;\n\n\tfunction URI(url, base) {\n\t\tvar _urlSupplied = arguments.length >= 1;\n\t\tvar _baseSupplied = arguments.length >= 2;\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof URI)) {\n\t\t\tif (_urlSupplied) {\n\t\t\t\tif (_baseSupplied) {\n\t\t\t\t\treturn new URI(url, base);\n\t\t\t\t}\n\n\t\t\t\treturn new URI(url);\n\t\t\t}\n\n\t\t\treturn new URI();\n\t\t}\n\n\t\tif (url === undefined) {\n\t\t\tif (_urlSupplied) {\n\t\t\t\tthrow new TypeError('undefined is not a valid argument for URI');\n\t\t\t}\n\n\t\t\tif (typeof location !== 'undefined') {\n\t\t\t\turl = location.href + '';\n\t\t\t} else {\n\t\t\t\turl = '';\n\t\t\t}\n\t\t}\n\n\t\tthis.href(url);\n\n\t\t// resolve to base according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#constructor\n\t\tif (base !== undefined) {\n\t\t\treturn this.absoluteTo(base);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tURI.version = '1.17.0';\n\n\tvar p = URI.prototype;\n\tvar hasOwn = Object.prototype.hasOwnProperty;\n\n\tfunction escapeRegEx(string) {\n\t\t// https://github.com/medialize/URI.js/commit/85ac21783c11f8ccab06106dba9735a31a86924d#commitcomment-821963\n\t\treturn string.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n\t}\n\n\tfunction getType(value) {\n\t\t// IE8 doesn't return [Object Undefined] but [Object Object] for undefined value\n\t\tif (value === undefined) {\n\t\t\treturn 'Undefined';\n\t\t}\n\n\t\treturn String(Object.prototype.toString.call(value)).slice(8, -1);\n\t}\n\n\tfunction isArray(obj) {\n\t\treturn getType(obj) === 'Array';\n\t}\n\n\tfunction filterArrayValues(data, value) {\n\t\tvar lookup = {};\n\t\tvar i, length;\n\n\t\tif (getType(value) === 'RegExp') {\n\t\t\tlookup = null;\n\t\t} else if (isArray(value)) {\n\t\t\tfor (i = 0, length = value.length; i < length; i++) {\n\t\t\t\tlookup[value[i]] = true;\n\t\t\t}\n\t\t} else {\n\t\t\tlookup[value] = true;\n\t\t}\n\n\t\tfor (i = 0, length = data.length; i < length; i++) {\n\t\t\t/*jshint laxbreak: true */\n\t\t\tvar _match = lookup && lookup[data[i]] !== undefined\n\t\t\t\t|| !lookup && value.test(data[i]);\n\t\t\t/*jshint laxbreak: false */\n\t\t\tif (_match) {\n\t\t\t\tdata.splice(i, 1);\n\t\t\t\tlength--;\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction arrayContains(list, value) {\n\t\tvar i, length;\n\n\t\t// value may be string, number, array, regexp\n\t\tif (isArray(value)) {\n\t\t\t// Note: this can be optimized to O(n) (instead of current O(m * n))\n\t\t\tfor (i = 0, length = value.length; i < length; i++) {\n\t\t\t\tif (!arrayContains(list, value[i])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tvar _type = getType(value);\n\t\tfor (i = 0, length = list.length; i < length; i++) {\n\t\t\tif (_type === 'RegExp') {\n\t\t\t\tif (typeof list[i] === 'string' && list[i].match(value)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else if (list[i] === value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfunction arraysEqual(one, two) {\n\t\tif (!isArray(one) || !isArray(two)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// arrays can't be equal if they have different amount of content\n\t\tif (one.length !== two.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tone.sort();\n\t\ttwo.sort();\n\n\t\tfor (var i = 0, l = one.length; i < l; i++) {\n\t\t\tif (one[i] !== two[i]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfunction trimSlashes(text) {\n\t\tvar trim_expression = /^\\/+|\\/+$/g;\n\t\treturn text.replace(trim_expression, '');\n\t}\n\n\tURI._parts = function() {\n\t\treturn {\n\t\t\tprotocol: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\thostname: null,\n\t\t\turn: null,\n\t\t\tport: null,\n\t\t\tpath: null,\n\t\t\tquery: null,\n\t\t\tfragment: null,\n\t\t\t// state\n\t\t\tduplicateQueryParameters: URI.duplicateQueryParameters,\n\t\t\tescapeQuerySpace: URI.escapeQuerySpace\n\t\t};\n\t};\n\t// state: allow duplicate query parameters (a=1&a=1)\n\tURI.duplicateQueryParameters = false;\n\t// state: replaces + with %20 (space in query strings)\n\tURI.escapeQuerySpace = true;\n\t// static properties\n\tURI.protocol_expression = /^[a-z][a-z0-9.+-]*$/i;\n\tURI.idn_expression = /[^a-z0-9\\.-]/i;\n\tURI.punycode_expression = /(xn--)/i;\n\t// well, 333.444.555.666 matches, but it sure ain't no IPv4 - do we care?\n\tURI.ip4_expression = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\n\t// credits to Rich Brown\n\t// source: http://forums.intermapper.com/viewtopic.php?p=1096#1096\n\t// specification: http://www.ietf.org/rfc/rfc4291.txt\n\tURI.ip6_expression = /^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/;\n\t// expression used is \"gruber revised\" (@gruber v2) determined to be the\n\t// best solution in a regex-golf we did a couple of ages ago at\n\t// * http://mathiasbynens.be/demo/url-regex\n\t// * http://rodneyrehm.de/t/url-regex.html\n\tURI.find_uri_expression = /\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))/ig;\n\tURI.findUri = {\n\t\t// valid \"scheme://\" or \"www.\"\n\t\tstart: /\\b(?:([a-z][a-z0-9.+-]*:\\/\\/)|www\\.)/gi,\n\t\t// everything up to the next whitespace\n\t\tend: /[\\s\\r\\n]|$/,\n\t\t// trim trailing punctuation captured by end RegExp\n\t\ttrim: /[`!()\\[\\]{};:'\".,<>?«»“”„‘’]+$/\n\t};\n\t// http://www.iana.org/assignments/uri-schemes.html\n\t// http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports\n\tURI.defaultPorts = {\n\t\thttp: '80',\n\t\thttps: '443',\n\t\tftp: '21',\n\t\tgopher: '70',\n\t\tws: '80',\n\t\twss: '443'\n\t};\n\t// allowed hostname characters according to RFC 3986\n\t// ALPHA DIGIT \"-\" \".\" \"_\" \"~\" \"!\" \"$\" \"&\" \"'\" \"(\" \")\" \"*\" \"+\" \",\" \";\" \"=\" %encoded\n\t// I've never seen a (non-IDN) hostname other than: ALPHA DIGIT . -\n\tURI.invalid_hostname_characters = /[^a-zA-Z0-9\\.-]/;\n\t// map DOM Elements to their URI attribute\n\tURI.domAttributes = {\n\t\t'a': 'href',\n\t\t'blockquote': 'cite',\n\t\t'link': 'href',\n\t\t'base': 'href',\n\t\t'script': 'src',\n\t\t'form': 'action',\n\t\t'img': 'src',\n\t\t'area': 'href',\n\t\t'iframe': 'src',\n\t\t'embed': 'src',\n\t\t'source': 'src',\n\t\t'track': 'src',\n\t\t'input': 'src', // but only if type=\"image\"\n\t\t'audio': 'src',\n\t\t'video': 'src'\n\t};\n\tURI.getDomAttribute = function(node) {\n\t\tif (!node || !node.nodeName) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tvar nodeName = node.nodeName.toLowerCase();\n\t\t// should only expose src for type=\"image\"\n\t\tif (nodeName === 'input' && node.type !== 'image') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn URI.domAttributes[nodeName];\n\t};\n\n\tfunction escapeForDumbFirefox36(value) {\n\t\t// https://github.com/medialize/URI.js/issues/91\n\t\treturn escape(value);\n\t}\n\n\t// encoding / decoding according to RFC3986\n\tfunction strictEncodeURIComponent(string) {\n\t\t// see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent\n\t\treturn encodeURIComponent(string)\n\t\t\t.replace(/[!'()*]/g, escapeForDumbFirefox36)\n\t\t\t.replace(/\\*/g, '%2A');\n\t}\n\tURI.encode = strictEncodeURIComponent;\n\tURI.decode = decodeURIComponent;\n\tURI.iso8859 = function() {\n\t\tURI.encode = escape;\n\t\tURI.decode = unescape;\n\t};\n\tURI.unicode = function() {\n\t\tURI.encode = strictEncodeURIComponent;\n\t\tURI.decode = decodeURIComponent;\n\t};\n\tURI.characters = {\n\t\tpathname: {\n\t\t\tencode: {\n\t\t\t\t// RFC3986 2.1: For consistency, URI producers and normalizers should\n\t\t\t\t// use uppercase hexadecimal digits for all percent-encodings.\n\t\t\t\texpression: /%(24|26|2B|2C|3B|3D|3A|40)/ig,\n\t\t\t\tmap: {\n\t\t\t\t\t// -._~!'()*\n\t\t\t\t\t'%24': '$',\n\t\t\t\t\t'%26': '&',\n\t\t\t\t\t'%2B': '+',\n\t\t\t\t\t'%2C': ',',\n\t\t\t\t\t'%3B': ';',\n\t\t\t\t\t'%3D': '=',\n\t\t\t\t\t'%3A': ':',\n\t\t\t\t\t'%40': '@'\n\t\t\t\t}\n\t\t\t},\n\t\t\tdecode: {\n\t\t\t\texpression: /[\\/\\?#]/g,\n\t\t\t\tmap: {\n\t\t\t\t\t'/': '%2F',\n\t\t\t\t\t'?': '%3F',\n\t\t\t\t\t'#': '%23'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\treserved: {\n\t\t\tencode: {\n\t\t\t\t// RFC3986 2.1: For consistency, URI producers and normalizers should\n\t\t\t\t// use uppercase hexadecimal digits for all percent-encodings.\n\t\t\t\texpression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,\n\t\t\t\tmap: {\n\t\t\t\t\t// gen-delims\n\t\t\t\t\t'%3A': ':',\n\t\t\t\t\t'%2F': '/',\n\t\t\t\t\t'%3F': '?',\n\t\t\t\t\t'%23': '#',\n\t\t\t\t\t'%5B': '[',\n\t\t\t\t\t'%5D': ']',\n\t\t\t\t\t'%40': '@',\n\t\t\t\t\t// sub-delims\n\t\t\t\t\t'%21': '!',\n\t\t\t\t\t'%24': '$',\n\t\t\t\t\t'%26': '&',\n\t\t\t\t\t'%27': '\\'',\n\t\t\t\t\t'%28': '(',\n\t\t\t\t\t'%29': ')',\n\t\t\t\t\t'%2A': '*',\n\t\t\t\t\t'%2B': '+',\n\t\t\t\t\t'%2C': ',',\n\t\t\t\t\t'%3B': ';',\n\t\t\t\t\t'%3D': '='\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\turnpath: {\n\t\t\t// The characters under `encode` are the characters called out by RFC 2141 as being acceptable\n\t\t\t// for usage in a URN. RFC2141 also calls out \"-\", \".\", and \"_\" as acceptable characters, but\n\t\t\t// these aren't encoded by encodeURIComponent, so we don't have to call them out here. Also\n\t\t\t// note that the colon character is not featured in the encoding map; this is because URI.js\n\t\t\t// gives the colons in URNs semantic meaning as the delimiters of path segements, and so it\n\t\t\t// should not appear unencoded in a segment itself.\n\t\t\t// See also the note above about RFC3986 and capitalalized hex digits.\n\t\t\tencode: {\n\t\t\t\texpression: /%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,\n\t\t\t\tmap: {\n\t\t\t\t\t'%21': '!',\n\t\t\t\t\t'%24': '$',\n\t\t\t\t\t'%27': '\\'',\n\t\t\t\t\t'%28': '(',\n\t\t\t\t\t'%29': ')',\n\t\t\t\t\t'%2A': '*',\n\t\t\t\t\t'%2B': '+',\n\t\t\t\t\t'%2C': ',',\n\t\t\t\t\t'%3B': ';',\n\t\t\t\t\t'%3D': '=',\n\t\t\t\t\t'%40': '@'\n\t\t\t\t}\n\t\t\t},\n\t\t\t// These characters are the characters called out by RFC2141 as \"reserved\" characters that\n\t\t\t// should never appear in a URN, plus the colon character (see note above).\n\t\t\tdecode: {\n\t\t\t\texpression: /[\\/\\?#:]/g,\n\t\t\t\tmap: {\n\t\t\t\t\t'/': '%2F',\n\t\t\t\t\t'?': '%3F',\n\t\t\t\t\t'#': '%23',\n\t\t\t\t\t':': '%3A'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tURI.encodeQuery = function(string, escapeQuerySpace) {\n\t\tvar escaped = URI.encode(string + '');\n\t\tif (escapeQuerySpace === undefined) {\n\t\t\tescapeQuerySpace = URI.escapeQuerySpace;\n\t\t}\n\n\t\treturn escapeQuerySpace ? escaped.replace(/%20/g, '+') : escaped;\n\t};\n\tURI.decodeQuery = function(string, escapeQuerySpace) {\n\t\tstring += '';\n\t\tif (escapeQuerySpace === undefined) {\n\t\t\tescapeQuerySpace = URI.escapeQuerySpace;\n\t\t}\n\n\t\ttry {\n\t\t\treturn URI.decode(escapeQuerySpace ? string.replace(/\\+/g, '%20') : string);\n\t\t} catch(e) {\n\t\t\t// we're not going to mess with weird encodings,\n\t\t\t// give up and return the undecoded original string\n\t\t\t// see https://github.com/medialize/URI.js/issues/87\n\t\t\t// see https://github.com/medialize/URI.js/issues/92\n\t\t\treturn string;\n\t\t}\n\t};\n\t// generate encode/decode path functions\n\tvar _parts = {'encode':'encode', 'decode':'decode'};\n\tvar _part;\n\tvar generateAccessor = function(_group, _part) {\n\t\treturn function(string) {\n\t\t\ttry {\n\t\t\t\treturn URI[_part](string + '').replace(URI.characters[_group][_part].expression, function(c) {\n\t\t\t\t\treturn URI.characters[_group][_part].map[c];\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\t// we're not going to mess with weird encodings,\n\t\t\t\t// give up and return the undecoded original string\n\t\t\t\t// see https://github.com/medialize/URI.js/issues/87\n\t\t\t\t// see https://github.com/medialize/URI.js/issues/92\n\t\t\t\treturn string;\n\t\t\t}\n\t\t};\n\t};\n\n\tfor (_part in _parts) {\n\t\tURI[_part + 'PathSegment'] = generateAccessor('pathname', _parts[_part]);\n\t\tURI[_part + 'UrnPathSegment'] = generateAccessor('urnpath', _parts[_part]);\n\t}\n\n\tvar generateSegmentedPathFunction = function(_sep, _codingFuncName, _innerCodingFuncName) {\n\t\treturn function(string) {\n\t\t\t// Why pass in names of functions, rather than the function objects themselves? The\n\t\t\t// definitions of some functions (but in particular, URI.decode) will occasionally change due\n\t\t\t// to URI.js having ISO8859 and Unicode modes. Passing in the name and getting it will ensure\n\t\t\t// that the functions we use here are \"fresh\".\n\t\t\tvar actualCodingFunc;\n\t\t\tif (!_innerCodingFuncName) {\n\t\t\t\tactualCodingFunc = URI[_codingFuncName];\n\t\t\t} else {\n\t\t\t\tactualCodingFunc = function(string) {\n\t\t\t\t\treturn URI[_codingFuncName](URI[_innerCodingFuncName](string));\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar segments = (string + '').split(_sep);\n\n\t\t\tfor (var i = 0, length = segments.length; i < length; i++) {\n\t\t\t\tsegments[i] = actualCodingFunc(segments[i]);\n\t\t\t}\n\n\t\t\treturn segments.join(_sep);\n\t\t};\n\t};\n\n\t// This takes place outside the above loop because we don't want, e.g., encodeUrnPath functions.\n\tURI.decodePath = generateSegmentedPathFunction('/', 'decodePathSegment');\n\tURI.decodeUrnPath = generateSegmentedPathFunction(':', 'decodeUrnPathSegment');\n\tURI.recodePath = generateSegmentedPathFunction('/', 'encodePathSegment', 'decode');\n\tURI.recodeUrnPath = generateSegmentedPathFunction(':', 'encodeUrnPathSegment', 'decode');\n\n\tURI.encodeReserved = generateAccessor('reserved', 'encode');\n\n\tURI.parse = function(string, parts) {\n\t\tvar pos;\n\t\tif (!parts) {\n\t\t\tparts = {};\n\t\t}\n\t\t// [protocol\"://\"[username[\":\"password]\"@\"]hostname[\":\"port]\"/\"?][path][\"?\"querystring][\"#\"fragment]\n\n\t\t// extract fragment\n\t\tpos = string.indexOf('#');\n\t\tif (pos > -1) {\n\t\t\t// escaping?\n\t\t\tparts.fragment = string.substring(pos + 1) || null;\n\t\t\tstring = string.substring(0, pos);\n\t\t}\n\n\t\t// extract query\n\t\tpos = string.indexOf('?');\n\t\tif (pos > -1) {\n\t\t\t// escaping?\n\t\t\tparts.query = string.substring(pos + 1) || null;\n\t\t\tstring = string.substring(0, pos);\n\t\t}\n\n\t\t// extract protocol\n\t\tif (string.substring(0, 2) === '//') {\n\t\t\t// relative-scheme\n\t\t\tparts.protocol = null;\n\t\t\tstring = string.substring(2);\n\t\t\t// extract \"user:pass@host:port\"\n\t\t\tstring = URI.parseAuthority(string, parts);\n\t\t} else {\n\t\t\tpos = string.indexOf(':');\n\t\t\tif (pos > -1) {\n\t\t\t\tparts.protocol = string.substring(0, pos) || null;\n\t\t\t\tif (parts.protocol && !parts.protocol.match(URI.protocol_expression)) {\n\t\t\t\t\t// : may be within the path\n\t\t\t\t\tparts.protocol = undefined;\n\t\t\t\t} else if (string.substring(pos + 1, pos + 3) === '//') {\n\t\t\t\t\tstring = string.substring(pos + 3);\n\n\t\t\t\t\t// extract \"user:pass@host:port\"\n\t\t\t\t\tstring = URI.parseAuthority(string, parts);\n\t\t\t\t} else {\n\t\t\t\t\tstring = string.substring(pos + 1);\n\t\t\t\t\tparts.urn = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// what's left must be the path\n\t\tparts.path = string;\n\n\t\t// and we're done\n\t\treturn parts;\n\t};\n\tURI.parseHost = function(string, parts) {\n\t\t// Copy chrome, IE, opera backslash-handling behavior.\n\t\t// Back slashes before the query string get converted to forward slashes\n\t\t// See: https://github.com/joyent/node/blob/386fd24f49b0e9d1a8a076592a404168faeecc34/lib/url.js#L115-L124\n\t\t// See: https://code.google.com/p/chromium/issues/detail?id=25916\n\t\t// https://github.com/medialize/URI.js/pull/233\n\t\tstring = string.replace(/\\\\/g, '/');\n\n\t\t// extract host:port\n\t\tvar pos = string.indexOf('/');\n\t\tvar bracketPos;\n\t\tvar t;\n\n\t\tif (pos === -1) {\n\t\t\tpos = string.length;\n\t\t}\n\n\t\tif (string.charAt(0) === '[') {\n\t\t\t// IPv6 host - http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04#section-6\n\t\t\t// I claim most client software breaks on IPv6 anyways. To simplify things, URI only accepts\n\t\t\t// IPv6+port in the format [2001:db8::1]:80 (for the time being)\n\t\t\tbracketPos = string.indexOf(']');\n\t\t\tparts.hostname = string.substring(1, bracketPos) || null;\n\t\t\tparts.port = string.substring(bracketPos + 2, pos) || null;\n\t\t\tif (parts.port === '/') {\n\t\t\t\tparts.port = null;\n\t\t\t}\n\t\t} else {\n\t\t\tvar firstColon = string.indexOf(':');\n\t\t\tvar firstSlash = string.indexOf('/');\n\t\t\tvar nextColon = string.indexOf(':', firstColon + 1);\n\t\t\tif (nextColon !== -1 && (firstSlash === -1 || nextColon < firstSlash)) {\n\t\t\t\t// IPv6 host contains multiple colons - but no port\n\t\t\t\t// this notation is actually not allowed by RFC 3986, but we're a liberal parser\n\t\t\t\tparts.hostname = string.substring(0, pos) || null;\n\t\t\t\tparts.port = null;\n\t\t\t} else {\n\t\t\t\tt = string.substring(0, pos).split(':');\n\t\t\t\tparts.hostname = t[0] || null;\n\t\t\t\tparts.port = t[1] || null;\n\t\t\t}\n\t\t}\n\n\t\tif (parts.hostname && string.substring(pos).charAt(0) !== '/') {\n\t\t\tpos++;\n\t\t\tstring = '/' + string;\n\t\t}\n\n\t\treturn string.substring(pos) || '/';\n\t};\n\tURI.parseAuthority = function(string, parts) {\n\t\tstring = URI.parseUserinfo(string, parts);\n\t\treturn URI.parseHost(string, parts);\n\t};\n\tURI.parseUserinfo = function(string, parts) {\n\t\t// extract username:password\n\t\tvar firstSlash = string.indexOf('/');\n\t\tvar pos = string.lastIndexOf('@', firstSlash > -1 ? firstSlash : string.length - 1);\n\t\tvar t;\n\n\t\t// authority@ must come before /path\n\t\tif (pos > -1 && (firstSlash === -1 || pos < firstSlash)) {\n\t\t\tt = string.substring(0, pos).split(':');\n\t\t\tparts.username = t[0] ? URI.decode(t[0]) : null;\n\t\t\tt.shift();\n\t\t\tparts.password = t[0] ? URI.decode(t.join(':')) : null;\n\t\t\tstring = string.substring(pos + 1);\n\t\t} else {\n\t\t\tparts.username = null;\n\t\t\tparts.password = null;\n\t\t}\n\n\t\treturn string;\n\t};\n\tURI.parseQuery = function(string, escapeQuerySpace) {\n\t\tif (!string) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// throw out the funky business - \"?\"[name\"=\"value\"&\"]+\n\t\tstring = string.replace(/&+/g, '&').replace(/^\\?*&*|&+$/g, '');\n\n\t\tif (!string) {\n\t\t\treturn {};\n\t\t}\n\n\t\tvar items = {};\n\t\tvar splits = string.split('&');\n\t\tvar length = splits.length;\n\t\tvar v, name, value;\n\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tv = splits[i].split('=');\n\t\t\tname = URI.decodeQuery(v.shift(), escapeQuerySpace);\n\t\t\t// no \"=\" is null according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#collect-url-parameters\n\t\t\tvalue = v.length ? URI.decodeQuery(v.join('='), escapeQuerySpace) : null;\n\n\t\t\tif (hasOwn.call(items, name)) {\n\t\t\t\tif (typeof items[name] === 'string' || items[name] === null) {\n\t\t\t\t\titems[name] = [items[name]];\n\t\t\t\t}\n\n\t\t\t\titems[name].push(value);\n\t\t\t} else {\n\t\t\t\titems[name] = value;\n\t\t\t}\n\t\t}\n\n\t\treturn items;\n\t};\n\n\tURI.build = function(parts) {\n\t\tvar t = '';\n\n\t\tif (parts.protocol) {\n\t\t\tt += parts.protocol + ':';\n\t\t}\n\n\t\tif (!parts.urn && (t || parts.hostname)) {\n\t\t\tt += '//';\n\t\t}\n\n\t\tt += (URI.buildAuthority(parts) || '');\n\n\t\tif (typeof parts.path === 'string') {\n\t\t\tif (parts.path.charAt(0) !== '/' && typeof parts.hostname === 'string') {\n\t\t\t\tt += '/';\n\t\t\t}\n\n\t\t\tt += parts.path;\n\t\t}\n\n\t\tif (typeof parts.query === 'string' && parts.query) {\n\t\t\tt += '?' + parts.query;\n\t\t}\n\n\t\tif (typeof parts.fragment === 'string' && parts.fragment) {\n\t\t\tt += '#' + parts.fragment;\n\t\t}\n\t\treturn t;\n\t};\n\tURI.buildHost = function(parts) {\n\t\tvar t = '';\n\n\t\tif (!parts.hostname) {\n\t\t\treturn '';\n\t\t} else if (URI.ip6_expression.test(parts.hostname)) {\n\t\t\tt += '[' + parts.hostname + ']';\n\t\t} else {\n\t\t\tt += parts.hostname;\n\t\t}\n\n\t\tif (parts.port) {\n\t\t\tt += ':' + parts.port;\n\t\t}\n\n\t\treturn t;\n\t};\n\tURI.buildAuthority = function(parts) {\n\t\treturn URI.buildUserinfo(parts) + URI.buildHost(parts);\n\t};\n\tURI.buildUserinfo = function(parts) {\n\t\tvar t = '';\n\n\t\tif (parts.username) {\n\t\t\tt += URI.encode(parts.username);\n\n\t\t\tif (parts.password) {\n\t\t\t\tt += ':' + URI.encode(parts.password);\n\t\t\t}\n\n\t\t\tt += '@';\n\t\t}\n\n\t\treturn t;\n\t};\n\tURI.buildQuery = function(data, duplicateQueryParameters, escapeQuerySpace) {\n\t\t// according to http://tools.ietf.org/html/rfc3986 or http://labs.apache.org/webarch/uri/rfc/rfc3986.html\n\t\t// being »-._~!$&'()*+,;=:@/?« %HEX and alnum are allowed\n\t\t// the RFC explicitly states ?/foo being a valid use case, no mention of parameter syntax!\n\t\t// URI.js treats the query string as being application/x-www-form-urlencoded\n\t\t// see http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type\n\n\t\tvar t = '';\n\t\tvar unique, key, i, length;\n\t\tfor (key in data) {\n\t\t\tif (hasOwn.call(data, key) && key) {\n\t\t\t\tif (isArray(data[key])) {\n\t\t\t\t\tunique = {};\n\t\t\t\t\tfor (i = 0, length = data[key].length; i < length; i++) {\n\t\t\t\t\t\tif (data[key][i] !== undefined && unique[data[key][i] + ''] === undefined) {\n\t\t\t\t\t\t\tt += '&' + URI.buildQueryParameter(key, data[key][i], escapeQuerySpace);\n\t\t\t\t\t\t\tif (duplicateQueryParameters !== true) {\n\t\t\t\t\t\t\t\tunique[data[key][i] + ''] = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (data[key] !== undefined) {\n\t\t\t\t\tt += '&' + URI.buildQueryParameter(key, data[key], escapeQuerySpace);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn t.substring(1);\n\t};\n\tURI.buildQueryParameter = function(name, value, escapeQuerySpace) {\n\t\t// http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type -- application/x-www-form-urlencoded\n\t\t// don't append \"=\" for null values, according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#url-parameter-serialization\n\t\treturn URI.encodeQuery(name, escapeQuerySpace) + (value !== null ? '=' + URI.encodeQuery(value, escapeQuerySpace) : '');\n\t};\n\n\tURI.addQuery = function(data, name, value) {\n\t\tif (typeof name === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (hasOwn.call(name, key)) {\n\t\t\t\t\tURI.addQuery(data, key, name[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof name === 'string') {\n\t\t\tif (data[name] === undefined) {\n\t\t\t\tdata[name] = value;\n\t\t\t\treturn;\n\t\t\t} else if (typeof data[name] === 'string') {\n\t\t\t\tdata[name] = [data[name]];\n\t\t\t}\n\n\t\t\tif (!isArray(value)) {\n\t\t\t\tvalue = [value];\n\t\t\t}\n\n\t\t\tdata[name] = (data[name] || []).concat(value);\n\t\t} else {\n\t\t\tthrow new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n\t\t}\n\t};\n\tURI.removeQuery = function(data, name, value) {\n\t\tvar i, length, key;\n\n\t\tif (isArray(name)) {\n\t\t\tfor (i = 0, length = name.length; i < length; i++) {\n\t\t\t\tdata[name[i]] = undefined;\n\t\t\t}\n\t\t} else if (getType(name) === 'RegExp') {\n\t\t\tfor (key in data) {\n\t\t\t\tif (name.test(key)) {\n\t\t\t\t\tdata[key] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof name === 'object') {\n\t\t\tfor (key in name) {\n\t\t\t\tif (hasOwn.call(name, key)) {\n\t\t\t\t\tURI.removeQuery(data, key, name[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (typeof name === 'string') {\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (getType(value) === 'RegExp') {\n\t\t\t\t\tif (!isArray(data[name]) && value.test(data[name])) {\n\t\t\t\t\t\tdata[name] = undefined;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata[name] = filterArrayValues(data[name], value);\n\t\t\t\t\t}\n\t\t\t\t} else if (data[name] === String(value) && (!isArray(value) || value.length === 1)) {\n\t\t\t\t\tdata[name] = undefined;\n\t\t\t\t} else if (isArray(data[name])) {\n\t\t\t\t\tdata[name] = filterArrayValues(data[name], value);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdata[name] = undefined;\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('URI.removeQuery() accepts an object, string, RegExp as the first parameter');\n\t\t}\n\t};\n\tURI.hasQuery = function(data, name, value, withinArray) {\n\t\tif (typeof name === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (hasOwn.call(name, key)) {\n\t\t\t\t\tif (!URI.hasQuery(data, key, name[key])) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} else if (typeof name !== 'string') {\n\t\t\tthrow new TypeError('URI.hasQuery() accepts an object, string as the name parameter');\n\t\t}\n\n\t\tswitch (getType(value)) {\n\t\t\tcase 'Undefined':\n\t\t\t\t// true if exists (but may be empty)\n\t\t\t\treturn name in data; // data[name] !== undefined;\n\n\t\t\tcase 'Boolean':\n\t\t\t\t// true if exists and non-empty\n\t\t\t\tvar _booly = Boolean(isArray(data[name]) ? data[name].length : data[name]);\n\t\t\t\treturn value === _booly;\n\n\t\t\tcase 'Function':\n\t\t\t\t// allow complex comparison\n\t\t\t\treturn !!value(data[name], name, data);\n\n\t\t\tcase 'Array':\n\t\t\t\tif (!isArray(data[name])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar op = withinArray ? arrayContains : arraysEqual;\n\t\t\t\treturn op(data[name], value);\n\n\t\t\tcase 'RegExp':\n\t\t\t\tif (!isArray(data[name])) {\n\t\t\t\t\treturn Boolean(data[name] && data[name].match(value));\n\t\t\t\t}\n\n\t\t\t\tif (!withinArray) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn arrayContains(data[name], value);\n\n\t\t\tcase 'Number':\n\t\t\t\tvalue = String(value);\n\t\t\t/* falls through */\n\t\t\tcase 'String':\n\t\t\t\tif (!isArray(data[name])) {\n\t\t\t\t\treturn data[name] === value;\n\t\t\t\t}\n\n\t\t\t\tif (!withinArray) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn arrayContains(data[name], value);\n\n\t\t\tdefault:\n\t\t\t\tthrow new TypeError('URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter');\n\t\t}\n\t};\n\n\n\tURI.commonPath = function(one, two) {\n\t\tvar length = Math.min(one.length, two.length);\n\t\tvar pos;\n\n\t\t// find first non-matching character\n\t\tfor (pos = 0; pos < length; pos++) {\n\t\t\tif (one.charAt(pos) !== two.charAt(pos)) {\n\t\t\t\tpos--;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (pos < 1) {\n\t\t\treturn one.charAt(0) === two.charAt(0) && one.charAt(0) === '/' ? '/' : '';\n\t\t}\n\n\t\t// revert to last /\n\t\tif (one.charAt(pos) !== '/' || two.charAt(pos) !== '/') {\n\t\t\tpos = one.substring(0, pos).lastIndexOf('/');\n\t\t}\n\n\t\treturn one.substring(0, pos + 1);\n\t};\n\n\tURI.withinString = function(string, callback, options) {\n\t\toptions || (options = {});\n\t\tvar _start = options.start || URI.findUri.start;\n\t\tvar _end = options.end || URI.findUri.end;\n\t\tvar _trim = options.trim || URI.findUri.trim;\n\t\tvar _attributeOpen = /[a-z0-9-]=[\"']?$/i;\n\n\t\t_start.lastIndex = 0;\n\t\twhile (true) {\n\t\t\tvar match = _start.exec(string);\n\t\t\tif (!match) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar start = match.index;\n\t\t\tif (options.ignoreHtml) {\n\t\t\t\t// attribut(e=[\"']?$)\n\t\t\t\tvar attributeOpen = string.slice(Math.max(start - 3, 0), start);\n\t\t\t\tif (attributeOpen && _attributeOpen.test(attributeOpen)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar end = start + string.slice(start).search(_end);\n\t\t\tvar slice = string.slice(start, end).replace(_trim, '');\n\t\t\tif (options.ignore && options.ignore.test(slice)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tend = start + slice.length;\n\t\t\tvar result = callback(slice, start, end, string);\n\t\t\tstring = string.slice(0, start) + result + string.slice(end);\n\t\t\t_start.lastIndex = start + result.length;\n\t\t}\n\n\t\t_start.lastIndex = 0;\n\t\treturn string;\n\t};\n\n\tURI.ensureValidHostname = function(v) {\n\t\t// Theoretically URIs allow percent-encoding in Hostnames (according to RFC 3986)\n\t\t// they are not part of DNS and therefore ignored by URI.js\n\n\t\tif (v.match(URI.invalid_hostname_characters)) {\n\t\t\t// test punycode\n\t\t\tif (!punycode) {\n\t\t\t\tthrow new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-] and Punycode.js is not available');\n\t\t\t}\n\n\t\t\tif (punycode.toASCII(v).match(URI.invalid_hostname_characters)) {\n\t\t\t\tthrow new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n\t\t\t}\n\t\t}\n\t};\n\n\t// noConflict\n\tURI.noConflict = function(removeAll) {\n\t\tif (removeAll) {\n\t\t\tvar unconflicted = {\n\t\t\t\tURI: this.noConflict()\n\t\t\t};\n\n\t\t\tif (root.URITemplate && typeof root.URITemplate.noConflict === 'function') {\n\t\t\t\tunconflicted.URITemplate = root.URITemplate.noConflict();\n\t\t\t}\n\n\t\t\tif (root.IPv6 && typeof root.IPv6.noConflict === 'function') {\n\t\t\t\tunconflicted.IPv6 = root.IPv6.noConflict();\n\t\t\t}\n\n\t\t\tif (root.SecondLevelDomains && typeof root.SecondLevelDomains.noConflict === 'function') {\n\t\t\t\tunconflicted.SecondLevelDomains = root.SecondLevelDomains.noConflict();\n\t\t\t}\n\n\t\t\treturn unconflicted;\n\t\t} else if (root.URI === this) {\n\t\t\troot.URI = _URI;\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tp.build = function(deferBuild) {\n\t\tif (deferBuild === true) {\n\t\t\tthis._deferred_build = true;\n\t\t} else if (deferBuild === undefined || this._deferred_build) {\n\t\t\tthis._string = URI.build(this._parts);\n\t\t\tthis._deferred_build = false;\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tp.clone = function() {\n\t\treturn new URI(this);\n\t};\n\n\tp.valueOf = p.toString = function() {\n\t\treturn this.build(false)._string;\n\t};\n\n\n\tfunction generateSimpleAccessor(_part){\n\t\treturn function(v, build) {\n\t\t\tif (v === undefined) {\n\t\t\t\treturn this._parts[_part] || '';\n\t\t\t} else {\n\t\t\t\tthis._parts[_part] = v || null;\n\t\t\t\tthis.build(!build);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction generatePrefixAccessor(_part, _key){\n\t\treturn function(v, build) {\n\t\t\tif (v === undefined) {\n\t\t\t\treturn this._parts[_part] || '';\n\t\t\t} else {\n\t\t\t\tif (v !== null) {\n\t\t\t\t\tv = v + '';\n\t\t\t\t\tif (v.charAt(0) === _key) {\n\t\t\t\t\t\tv = v.substring(1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._parts[_part] = v;\n\t\t\t\tthis.build(!build);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t};\n\t}\n\n\tp.protocol = generateSimpleAccessor('protocol');\n\tp.username = generateSimpleAccessor('username');\n\tp.password = generateSimpleAccessor('password');\n\tp.hostname = generateSimpleAccessor('hostname');\n\tp.port = generateSimpleAccessor('port');\n\tp.query = generatePrefixAccessor('query', '?');\n\tp.fragment = generatePrefixAccessor('fragment', '#');\n\n\tp.search = function(v, build) {\n\t\tvar t = this.query(v, build);\n\t\treturn typeof t === 'string' && t.length ? ('?' + t) : t;\n\t};\n\tp.hash = function(v, build) {\n\t\tvar t = this.fragment(v, build);\n\t\treturn typeof t === 'string' && t.length ? ('#' + t) : t;\n\t};\n\n\tp.pathname = function(v, build) {\n\t\tif (v === undefined || v === true) {\n\t\t\tvar res = this._parts.path || (this._parts.hostname ? '/' : '');\n\t\t\treturn v ? (this._parts.urn ? URI.decodeUrnPath : URI.decodePath)(res) : res;\n\t\t} else {\n\t\t\tif (this._parts.urn) {\n\t\t\t\tthis._parts.path = v ? URI.recodeUrnPath(v) : '';\n\t\t\t} else {\n\t\t\t\tthis._parts.path = v ? URI.recodePath(v) : '/';\n\t\t\t}\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.path = p.pathname;\n\tp.href = function(href, build) {\n\t\tvar key;\n\n\t\tif (href === undefined) {\n\t\t\treturn this.toString();\n\t\t}\n\n\t\tthis._string = '';\n\t\tthis._parts = URI._parts();\n\n\t\tvar _URI = href instanceof URI;\n\t\tvar _object = typeof href === 'object' && (href.hostname || href.path || href.pathname);\n\t\tif (href.nodeName) {\n\t\t\tvar attribute = URI.getDomAttribute(href);\n\t\t\thref = href[attribute] || '';\n\t\t\t_object = false;\n\t\t}\n\n\t\t// window.location is reported to be an object, but it's not the sort\n\t\t// of object we're looking for:\n\t\t// * location.protocol ends with a colon\n\t\t// * location.query != object.search\n\t\t// * location.hash != object.fragment\n\t\t// simply serializing the unknown object should do the trick\n\t\t// (for location, not for everything...)\n\t\tif (!_URI && _object && href.pathname !== undefined) {\n\t\t\thref = href.toString();\n\t\t}\n\n\t\tif (typeof href === 'string' || href instanceof String) {\n\t\t\tthis._parts = URI.parse(String(href), this._parts);\n\t\t} else if (_URI || _object) {\n\t\t\tvar src = _URI ? href._parts : href;\n\t\t\tfor (key in src) {\n\t\t\t\tif (hasOwn.call(this._parts, key)) {\n\t\t\t\t\tthis._parts[key] = src[key];\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('invalid input');\n\t\t}\n\n\t\tthis.build(!build);\n\t\treturn this;\n\t};\n\n\t// identification accessors\n\tp.is = function(what) {\n\t\tvar ip = false;\n\t\tvar ip4 = false;\n\t\tvar ip6 = false;\n\t\tvar name = false;\n\t\tvar sld = false;\n\t\tvar idn = false;\n\t\tvar punycode = false;\n\t\tvar relative = !this._parts.urn;\n\n\t\tif (this._parts.hostname) {\n\t\t\trelative = false;\n\t\t\tip4 = URI.ip4_expression.test(this._parts.hostname);\n\t\t\tip6 = URI.ip6_expression.test(this._parts.hostname);\n\t\t\tip = ip4 || ip6;\n\t\t\tname = !ip;\n\t\t\tsld = name && SLD && SLD.has(this._parts.hostname);\n\t\t\tidn = name && URI.idn_expression.test(this._parts.hostname);\n\t\t\tpunycode = name && URI.punycode_expression.test(this._parts.hostname);\n\t\t}\n\n\t\tswitch (what.toLowerCase()) {\n\t\t\tcase 'relative':\n\t\t\t\treturn relative;\n\n\t\t\tcase 'absolute':\n\t\t\t\treturn !relative;\n\n\t\t\t// hostname identification\n\t\t\tcase 'domain':\n\t\t\tcase 'name':\n\t\t\t\treturn name;\n\n\t\t\tcase 'sld':\n\t\t\t\treturn sld;\n\n\t\t\tcase 'ip':\n\t\t\t\treturn ip;\n\n\t\t\tcase 'ip4':\n\t\t\tcase 'ipv4':\n\t\t\tcase 'inet4':\n\t\t\t\treturn ip4;\n\n\t\t\tcase 'ip6':\n\t\t\tcase 'ipv6':\n\t\t\tcase 'inet6':\n\t\t\t\treturn ip6;\n\n\t\t\tcase 'idn':\n\t\t\t\treturn idn;\n\n\t\t\tcase 'url':\n\t\t\t\treturn !this._parts.urn;\n\n\t\t\tcase 'urn':\n\t\t\t\treturn !!this._parts.urn;\n\n\t\t\tcase 'punycode':\n\t\t\t\treturn punycode;\n\t\t}\n\n\t\treturn null;\n\t};\n\n\t// component specific input validation\n\tvar _protocol = p.protocol;\n\tvar _port = p.port;\n\tvar _hostname = p.hostname;\n\n\tp.protocol = function(v, build) {\n\t\tif (v !== undefined) {\n\t\t\tif (v) {\n\t\t\t\t// accept trailing ://\n\t\t\t\tv = v.replace(/:(\\/\\/)?$/, '');\n\n\t\t\t\tif (!v.match(URI.protocol_expression)) {\n\t\t\t\t\tthrow new TypeError('Protocol \"' + v + '\" contains characters other than [A-Z0-9.+-] or doesn\\'t start with [A-Z]');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn _protocol.call(this, v, build);\n\t};\n\tp.scheme = p.protocol;\n\tp.port = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v !== undefined) {\n\t\t\tif (v === 0) {\n\t\t\t\tv = null;\n\t\t\t}\n\n\t\t\tif (v) {\n\t\t\t\tv += '';\n\t\t\t\tif (v.charAt(0) === ':') {\n\t\t\t\t\tv = v.substring(1);\n\t\t\t\t}\n\n\t\t\t\tif (v.match(/[^0-9]/)) {\n\t\t\t\t\tthrow new TypeError('Port \"' + v + '\" contains characters other than [0-9]');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn _port.call(this, v, build);\n\t};\n\tp.hostname = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v !== undefined) {\n\t\t\tvar x = {};\n\t\t\tvar res = URI.parseHost(v, x);\n\t\t\tif (res !== '/') {\n\t\t\t\tthrow new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n\t\t\t}\n\n\t\t\tv = x.hostname;\n\t\t}\n\t\treturn _hostname.call(this, v, build);\n\t};\n\n\t// compound accessors\n\tp.origin = function(v, build) {\n\t\tvar parts;\n\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined) {\n\t\t\tvar protocol = this.protocol();\n\t\t\tvar authority = this.authority();\n\t\t\tif (!authority) return '';\n\t\t\treturn (protocol ? protocol + '://' : '') + this.authority();\n\t\t} else {\n\t\t\tvar origin = URI(v);\n\t\t\tthis\n\t\t\t\t.protocol(origin.protocol())\n\t\t\t\t.authority(origin.authority())\n\t\t\t\t.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.host = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined) {\n\t\t\treturn this._parts.hostname ? URI.buildHost(this._parts) : '';\n\t\t} else {\n\t\t\tvar res = URI.parseHost(v, this._parts);\n\t\t\tif (res !== '/') {\n\t\t\t\tthrow new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n\t\t\t}\n\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.authority = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined) {\n\t\t\treturn this._parts.hostname ? URI.buildAuthority(this._parts) : '';\n\t\t} else {\n\t\t\tvar res = URI.parseAuthority(v, this._parts);\n\t\t\tif (res !== '/') {\n\t\t\t\tthrow new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n\t\t\t}\n\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.userinfo = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined) {\n\t\t\tif (!this._parts.username) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tvar t = URI.buildUserinfo(this._parts);\n\t\t\treturn t.substring(0, t.length -1);\n\t\t} else {\n\t\t\tif (v[v.length-1] !== '@') {\n\t\t\t\tv += '@';\n\t\t\t}\n\n\t\t\tURI.parseUserinfo(v, this._parts);\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.resource = function(v, build) {\n\t\tvar parts;\n\n\t\tif (v === undefined) {\n\t\t\treturn this.path() + this.search() + this.hash();\n\t\t}\n\n\t\tparts = URI.parse(v);\n\t\tthis._parts.path = parts.path;\n\t\tthis._parts.query = parts.query;\n\t\tthis._parts.fragment = parts.fragment;\n\t\tthis.build(!build);\n\t\treturn this;\n\t};\n\n\t// fraction accessors\n\tp.subdomain = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\t// convenience, return \"www\" from \"www.example.org\"\n\t\tif (v === undefined) {\n\t\t\tif (!this._parts.hostname || this.is('IP')) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t// grab domain and add another segment\n\t\t\tvar end = this._parts.hostname.length - this.domain().length - 1;\n\t\t\treturn this._parts.hostname.substring(0, end) || '';\n\t\t} else {\n\t\t\tvar e = this._parts.hostname.length - this.domain().length;\n\t\t\tvar sub = this._parts.hostname.substring(0, e);\n\t\t\tvar replace = new RegExp('^' + escapeRegEx(sub));\n\n\t\t\tif (v && v.charAt(v.length - 1) !== '.') {\n\t\t\t\tv += '.';\n\t\t\t}\n\n\t\t\tif (v) {\n\t\t\t\tURI.ensureValidHostname(v);\n\t\t\t}\n\n\t\t\tthis._parts.hostname = this._parts.hostname.replace(replace, v);\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.domain = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (typeof v === 'boolean') {\n\t\t\tbuild = v;\n\t\t\tv = undefined;\n\t\t}\n\n\t\t// convenience, return \"example.org\" from \"www.example.org\"\n\t\tif (v === undefined) {\n\t\t\tif (!this._parts.hostname || this.is('IP')) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t// if hostname consists of 1 or 2 segments, it must be the domain\n\t\t\tvar t = this._parts.hostname.match(/\\./g);\n\t\t\tif (t && t.length < 2) {\n\t\t\t\treturn this._parts.hostname;\n\t\t\t}\n\n\t\t\t// grab tld and add another segment\n\t\t\tvar end = this._parts.hostname.length - this.tld(build).length - 1;\n\t\t\tend = this._parts.hostname.lastIndexOf('.', end -1) + 1;\n\t\t\treturn this._parts.hostname.substring(end) || '';\n\t\t} else {\n\t\t\tif (!v) {\n\t\t\t\tthrow new TypeError('cannot set domain empty');\n\t\t\t}\n\n\t\t\tURI.ensureValidHostname(v);\n\n\t\t\tif (!this._parts.hostname || this.is('IP')) {\n\t\t\t\tthis._parts.hostname = v;\n\t\t\t} else {\n\t\t\t\tvar replace = new RegExp(escapeRegEx(this.domain()) + '$');\n\t\t\t\tthis._parts.hostname = this._parts.hostname.replace(replace, v);\n\t\t\t}\n\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.tld = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (typeof v === 'boolean') {\n\t\t\tbuild = v;\n\t\t\tv = undefined;\n\t\t}\n\n\t\t// return \"org\" from \"www.example.org\"\n\t\tif (v === undefined) {\n\t\t\tif (!this._parts.hostname || this.is('IP')) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tvar pos = this._parts.hostname.lastIndexOf('.');\n\t\t\tvar tld = this._parts.hostname.substring(pos + 1);\n\n\t\t\tif (build !== true && SLD && SLD.list[tld.toLowerCase()]) {\n\t\t\t\treturn SLD.get(this._parts.hostname) || tld;\n\t\t\t}\n\n\t\t\treturn tld;\n\t\t} else {\n\t\t\tvar replace;\n\n\t\t\tif (!v) {\n\t\t\t\tthrow new TypeError('cannot set TLD empty');\n\t\t\t} else if (v.match(/[^a-zA-Z0-9-]/)) {\n\t\t\t\tif (SLD && SLD.is(v)) {\n\t\t\t\t\treplace = new RegExp(escapeRegEx(this.tld()) + '$');\n\t\t\t\t\tthis._parts.hostname = this._parts.hostname.replace(replace, v);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new TypeError('TLD \"' + v + '\" contains characters other than [A-Z0-9]');\n\t\t\t\t}\n\t\t\t} else if (!this._parts.hostname || this.is('IP')) {\n\t\t\t\tthrow new ReferenceError('cannot set TLD on non-domain host');\n\t\t\t} else {\n\t\t\t\treplace = new RegExp(escapeRegEx(this.tld()) + '$');\n\t\t\t\tthis._parts.hostname = this._parts.hostname.replace(replace, v);\n\t\t\t}\n\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.directory = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined || v === true) {\n\t\t\tif (!this._parts.path && !this._parts.hostname) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (this._parts.path === '/') {\n\t\t\t\treturn '/';\n\t\t\t}\n\n\t\t\tvar end = this._parts.path.length - this.filename().length - 1;\n\t\t\tvar res = this._parts.path.substring(0, end) || (this._parts.hostname ? '/' : '');\n\n\t\t\treturn v ? URI.decodePath(res) : res;\n\n\t\t} else {\n\t\t\tvar e = this._parts.path.length - this.filename().length;\n\t\t\tvar directory = this._parts.path.substring(0, e);\n\t\t\tvar replace = new RegExp('^' + escapeRegEx(directory));\n\n\t\t\t// fully qualifier directories begin with a slash\n\t\t\tif (!this.is('relative')) {\n\t\t\t\tif (!v) {\n\t\t\t\t\tv = '/';\n\t\t\t\t}\n\n\t\t\t\tif (v.charAt(0) !== '/') {\n\t\t\t\t\tv = '/' + v;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// directories always end with a slash\n\t\t\tif (v && v.charAt(v.length - 1) !== '/') {\n\t\t\t\tv += '/';\n\t\t\t}\n\n\t\t\tv = URI.recodePath(v);\n\t\t\tthis._parts.path = this._parts.path.replace(replace, v);\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.filename = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined || v === true) {\n\t\t\tif (!this._parts.path || this._parts.path === '/') {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tvar pos = this._parts.path.lastIndexOf('/');\n\t\t\tvar res = this._parts.path.substring(pos+1);\n\n\t\t\treturn v ? URI.decodePathSegment(res) : res;\n\t\t} else {\n\t\t\tvar mutatedDirectory = false;\n\n\t\t\tif (v.charAt(0) === '/') {\n\t\t\t\tv = v.substring(1);\n\t\t\t}\n\n\t\t\tif (v.match(/\\.?\\//)) {\n\t\t\t\tmutatedDirectory = true;\n\t\t\t}\n\n\t\t\tvar replace = new RegExp(escapeRegEx(this.filename()) + '$');\n\t\t\tv = URI.recodePath(v);\n\t\t\tthis._parts.path = this._parts.path.replace(replace, v);\n\n\t\t\tif (mutatedDirectory) {\n\t\t\t\tthis.normalizePath(build);\n\t\t\t} else {\n\t\t\t\tthis.build(!build);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.suffix = function(v, build) {\n\t\tif (this._parts.urn) {\n\t\t\treturn v === undefined ? '' : this;\n\t\t}\n\n\t\tif (v === undefined || v === true) {\n\t\t\tif (!this._parts.path || this._parts.path === '/') {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tvar filename = this.filename();\n\t\t\tvar pos = filename.lastIndexOf('.');\n\t\t\tvar s, res;\n\n\t\t\tif (pos === -1) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t// suffix may only contain alnum characters (yup, I made this up.)\n\t\t\ts = filename.substring(pos+1);\n\t\t\tres = (/^[a-z0-9%]+$/i).test(s) ? s : '';\n\t\t\treturn v ? URI.decodePathSegment(res) : res;\n\t\t} else {\n\t\t\tif (v.charAt(0) === '.') {\n\t\t\t\tv = v.substring(1);\n\t\t\t}\n\n\t\t\tvar suffix = this.suffix();\n\t\t\tvar replace;\n\n\t\t\tif (!suffix) {\n\t\t\t\tif (!v) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t\tthis._parts.path += '.' + URI.recodePath(v);\n\t\t\t} else if (!v) {\n\t\t\t\treplace = new RegExp(escapeRegEx('.' + suffix) + '$');\n\t\t\t} else {\n\t\t\t\treplace = new RegExp(escapeRegEx(suffix) + '$');\n\t\t\t}\n\n\t\t\tif (replace) {\n\t\t\t\tv = URI.recodePath(v);\n\t\t\t\tthis._parts.path = this._parts.path.replace(replace, v);\n\t\t\t}\n\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\t};\n\tp.segment = function(segment, v, build) {\n\t\tvar separator = this._parts.urn ? ':' : '/';\n\t\tvar path = this.path();\n\t\tvar absolute = path.substring(0, 1) === '/';\n\t\tvar segments = path.split(separator);\n\n\t\tif (segment !== undefined && typeof segment !== 'number') {\n\t\t\tbuild = v;\n\t\t\tv = segment;\n\t\t\tsegment = undefined;\n\t\t}\n\n\t\tif (segment !== undefined && typeof segment !== 'number') {\n\t\t\tthrow new Error('Bad segment \"' + segment + '\", must be 0-based integer');\n\t\t}\n\n\t\tif (absolute) {\n\t\t\tsegments.shift();\n\t\t}\n\n\t\tif (segment < 0) {\n\t\t\t// allow negative indexes to address from the end\n\t\t\tsegment = Math.max(segments.length + segment, 0);\n\t\t}\n\n\t\tif (v === undefined) {\n\t\t\t/*jshint laxbreak: true */\n\t\t\treturn segment === undefined\n\t\t\t\t? segments\n\t\t\t\t: segments[segment];\n\t\t\t/*jshint laxbreak: false */\n\t\t} else if (segment === null || segments[segment] === undefined) {\n\t\t\tif (isArray(v)) {\n\t\t\t\tsegments = [];\n\t\t\t\t// collapse empty elements within array\n\t\t\t\tfor (var i=0, l=v.length; i < l; i++) {\n\t\t\t\t\tif (!v[i].length && (!segments.length || !segments[segments.length -1].length)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (segments.length && !segments[segments.length -1].length) {\n\t\t\t\t\t\tsegments.pop();\n\t\t\t\t\t}\n\n\t\t\t\t\tsegments.push(trimSlashes(v[i]));\n\t\t\t\t}\n\t\t\t} else if (v || typeof v === 'string') {\n\t\t\t\tv = trimSlashes(v);\n\t\t\t\tif (segments[segments.length -1] === '') {\n\t\t\t\t\t// empty trailing elements have to be overwritten\n\t\t\t\t\t// to prevent results such as /foo//bar\n\t\t\t\t\tsegments[segments.length -1] = v;\n\t\t\t\t} else {\n\t\t\t\t\tsegments.push(v);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (v) {\n\t\t\t\tsegments[segment] = trimSlashes(v);\n\t\t\t} else {\n\t\t\t\tsegments.splice(segment, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (absolute) {\n\t\t\tsegments.unshift('');\n\t\t}\n\n\t\treturn this.path(segments.join(separator), build);\n\t};\n\tp.segmentCoded = function(segment, v, build) {\n\t\tvar segments, i, l;\n\n\t\tif (typeof segment !== 'number') {\n\t\t\tbuild = v;\n\t\t\tv = segment;\n\t\t\tsegment = undefined;\n\t\t}\n\n\t\tif (v === undefined) {\n\t\t\tsegments = this.segment(segment, v, build);\n\t\t\tif (!isArray(segments)) {\n\t\t\t\tsegments = segments !== undefined ? URI.decode(segments) : undefined;\n\t\t\t} else {\n\t\t\t\tfor (i = 0, l = segments.length; i < l; i++) {\n\t\t\t\t\tsegments[i] = URI.decode(segments[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn segments;\n\t\t}\n\n\t\tif (!isArray(v)) {\n\t\t\tv = (typeof v === 'string' || v instanceof String) ? URI.encode(v) : v;\n\t\t} else {\n\t\t\tfor (i = 0, l = v.length; i < l; i++) {\n\t\t\t\tv[i] = URI.encode(v[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn this.segment(segment, v, build);\n\t};\n\n\t// mutating query string\n\tvar q = p.query;\n\tp.query = function(v, build) {\n\t\tif (v === true) {\n\t\t\treturn URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\t\t} else if (typeof v === 'function') {\n\t\t\tvar data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\t\t\tvar result = v.call(this, data);\n\t\t\tthis._parts.query = URI.buildQuery(result || data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t} else if (v !== undefined && typeof v !== 'string') {\n\t\t\tthis._parts.query = URI.buildQuery(v, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t} else {\n\t\t\treturn q.call(this, v, build);\n\t\t}\n\t};\n\tp.setQuery = function(name, value, build) {\n\t\tvar data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\n\t\tif (typeof name === 'string' || name instanceof String) {\n\t\t\tdata[name] = value !== undefined ? value : null;\n\t\t} else if (typeof name === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (hasOwn.call(name, key)) {\n\t\t\t\t\tdata[key] = name[key];\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n\t\t}\n\n\t\tthis._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n\t\tif (typeof name !== 'string') {\n\t\t\tbuild = value;\n\t\t}\n\n\t\tthis.build(!build);\n\t\treturn this;\n\t};\n\tp.addQuery = function(name, value, build) {\n\t\tvar data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\t\tURI.addQuery(data, name, value === undefined ? null : value);\n\t\tthis._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n\t\tif (typeof name !== 'string') {\n\t\t\tbuild = value;\n\t\t}\n\n\t\tthis.build(!build);\n\t\treturn this;\n\t};\n\tp.removeQuery = function(name, value, build) {\n\t\tvar data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\t\tURI.removeQuery(data, name, value);\n\t\tthis._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n\t\tif (typeof name !== 'string') {\n\t\t\tbuild = value;\n\t\t}\n\n\t\tthis.build(!build);\n\t\treturn this;\n\t};\n\tp.hasQuery = function(name, value, withinArray) {\n\t\tvar data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\t\treturn URI.hasQuery(data, name, value, withinArray);\n\t};\n\tp.setSearch = p.setQuery;\n\tp.addSearch = p.addQuery;\n\tp.removeSearch = p.removeQuery;\n\tp.hasSearch = p.hasQuery;\n\n\t// sanitizing URLs\n\tp.normalize = function() {\n\t\tif (this._parts.urn) {\n\t\t\treturn this\n\t\t\t\t.normalizeProtocol(false)\n\t\t\t\t.normalizePath(false)\n\t\t\t\t.normalizeQuery(false)\n\t\t\t\t.normalizeFragment(false)\n\t\t\t\t.build();\n\t\t}\n\n\t\treturn this\n\t\t\t.normalizeProtocol(false)\n\t\t\t.normalizeHostname(false)\n\t\t\t.normalizePort(false)\n\t\t\t.normalizePath(false)\n\t\t\t.normalizeQuery(false)\n\t\t\t.normalizeFragment(false)\n\t\t\t.build();\n\t};\n\tp.normalizeProtocol = function(build) {\n\t\tif (typeof this._parts.protocol === 'string') {\n\t\t\tthis._parts.protocol = this._parts.protocol.toLowerCase();\n\t\t\tthis.build(!build);\n\t\t}\n\n\t\treturn this;\n\t};\n\tp.normalizeHostname = function(build) {\n\t\tif (this._parts.hostname) {\n\t\t\tif (this.is('IDN') && punycode) {\n\t\t\t\tthis._parts.hostname = punycode.toASCII(this._parts.hostname);\n\t\t\t} else if (this.is('IPv6') && IPv6) {\n\t\t\t\tthis._parts.hostname = IPv6.best(this._parts.hostname);\n\t\t\t}\n\n\t\t\tthis._parts.hostname = this._parts.hostname.toLowerCase();\n\t\t\tthis.build(!build);\n\t\t}\n\n\t\treturn this;\n\t};\n\tp.normalizePort = function(build) {\n\t\t// remove port of it's the protocol's default\n\t\tif (typeof this._parts.protocol === 'string' && this._parts.port === URI.defaultPorts[this._parts.protocol]) {\n\t\t\tthis._parts.port = null;\n\t\t\tthis.build(!build);\n\t\t}\n\n\t\treturn this;\n\t};\n\tp.normalizePath = function(build) {\n\t\tvar _path = this._parts.path;\n\t\tif (!_path) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this._parts.urn) {\n\t\t\tthis._parts.path = URI.recodeUrnPath(this._parts.path);\n\t\t\tthis.build(!build);\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this._parts.path === '/') {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar _was_relative;\n\t\tvar _leadingParents = '';\n\t\tvar _parent, _pos;\n\n\t\t// handle relative paths\n\t\tif (_path.charAt(0) !== '/') {\n\t\t\t_was_relative = true;\n\t\t\t_path = '/' + _path;\n\t\t}\n\n\t\t// handle relative files (as opposed to directories)\n\t\tif (_path.slice(-3) === '/..' || _path.slice(-2) === '/.') {\n\t\t\t_path += '/';\n\t\t}\n\n\t\t// resolve simples\n\t\t_path = _path\n\t\t\t.replace(/(\\/(\\.\\/)+)|(\\/\\.$)/g, '/')\n\t\t\t.replace(/\\/{2,}/g, '/');\n\n\t\t// remember leading parents\n\t\tif (_was_relative) {\n\t\t\t_leadingParents = _path.substring(1).match(/^(\\.\\.\\/)+/) || '';\n\t\t\tif (_leadingParents) {\n\t\t\t\t_leadingParents = _leadingParents[0];\n\t\t\t}\n\t\t}\n\n\t\t// resolve parents\n\t\twhile (true) {\n\t\t\t_parent = _path.indexOf('/..');\n\t\t\tif (_parent === -1) {\n\t\t\t\t// no more ../ to resolve\n\t\t\t\tbreak;\n\t\t\t} else if (_parent === 0) {\n\t\t\t\t// top level cannot be relative, skip it\n\t\t\t\t_path = _path.substring(3);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t_pos = _path.substring(0, _parent).lastIndexOf('/');\n\t\t\tif (_pos === -1) {\n\t\t\t\t_pos = _parent;\n\t\t\t}\n\t\t\t_path = _path.substring(0, _pos) + _path.substring(_parent + 3);\n\t\t}\n\n\t\t// revert to relative\n\t\tif (_was_relative && this.is('relative')) {\n\t\t\t_path = _leadingParents + _path.substring(1);\n\t\t}\n\n\t\t_path = URI.recodePath(_path);\n\t\tthis._parts.path = _path;\n\t\tthis.build(!build);\n\t\treturn this;\n\t};\n\tp.normalizePathname = p.normalizePath;\n\tp.normalizeQuery = function(build) {\n\t\tif (typeof this._parts.query === 'string') {\n\t\t\tif (!this._parts.query.length) {\n\t\t\t\tthis._parts.query = null;\n\t\t\t} else {\n\t\t\t\tthis.query(URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace));\n\t\t\t}\n\n\t\t\tthis.build(!build);\n\t\t}\n\n\t\treturn this;\n\t};\n\tp.normalizeFragment = function(build) {\n\t\tif (!this._parts.fragment) {\n\t\t\tthis._parts.fragment = null;\n\t\t\tthis.build(!build);\n\t\t}\n\n\t\treturn this;\n\t};\n\tp.normalizeSearch = p.normalizeQuery;\n\tp.normalizeHash = p.normalizeFragment;\n\n\tp.iso8859 = function() {\n\t\t// expect unicode input, iso8859 output\n\t\tvar e = URI.encode;\n\t\tvar d = URI.decode;\n\n\t\tURI.encode = escape;\n\t\tURI.decode = decodeURIComponent;\n\t\ttry {\n\t\t\tthis.normalize();\n\t\t} finally {\n\t\t\tURI.encode = e;\n\t\t\tURI.decode = d;\n\t\t}\n\t\treturn this;\n\t};\n\n\tp.unicode = function() {\n\t\t// expect iso8859 input, unicode output\n\t\tvar e = URI.encode;\n\t\tvar d = URI.decode;\n\n\t\tURI.encode = strictEncodeURIComponent;\n\t\tURI.decode = unescape;\n\t\ttry {\n\t\t\tthis.normalize();\n\t\t} finally {\n\t\t\tURI.encode = e;\n\t\t\tURI.decode = d;\n\t\t}\n\t\treturn this;\n\t};\n\n\tp.readable = function() {\n\t\tvar uri = this.clone();\n\t\t// removing username, password, because they shouldn't be displayed according to RFC 3986\n\t\turi.username('').password('').normalize();\n\t\tvar t = '';\n\t\tif (uri._parts.protocol) {\n\t\t\tt += uri._parts.protocol + '://';\n\t\t}\n\n\t\tif (uri._parts.hostname) {\n\t\t\tif (uri.is('punycode') && punycode) {\n\t\t\t\tt += punycode.toUnicode(uri._parts.hostname);\n\t\t\t\tif (uri._parts.port) {\n\t\t\t\t\tt += ':' + uri._parts.port;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tt += uri.host();\n\t\t\t}\n\t\t}\n\n\t\tif (uri._parts.hostname && uri._parts.path && uri._parts.path.charAt(0) !== '/') {\n\t\t\tt += '/';\n\t\t}\n\n\t\tt += uri.path(true);\n\t\tif (uri._parts.query) {\n\t\t\tvar q = '';\n\t\t\tfor (var i = 0, qp = uri._parts.query.split('&'), l = qp.length; i < l; i++) {\n\t\t\t\tvar kv = (qp[i] || '').split('=');\n\t\t\t\tq += '&' + URI.decodeQuery(kv[0], this._parts.escapeQuerySpace)\n\t\t\t\t\t.replace(/&/g, '%26');\n\n\t\t\t\tif (kv[1] !== undefined) {\n\t\t\t\t\tq += '=' + URI.decodeQuery(kv[1], this._parts.escapeQuerySpace)\n\t\t\t\t\t\t.replace(/&/g, '%26');\n\t\t\t\t}\n\t\t\t}\n\t\t\tt += '?' + q.substring(1);\n\t\t}\n\n\t\tt += URI.decodeQuery(uri.hash(), true);\n\t\treturn t;\n\t};\n\n\t// resolving relative and absolute URLs\n\tp.absoluteTo = function(base) {\n\t\tvar resolved = this.clone();\n\t\tvar properties = ['protocol', 'username', 'password', 'hostname', 'port'];\n\t\tvar basedir, i, p;\n\n\t\tif (this._parts.urn) {\n\t\t\tthrow new Error('URNs do not have any generally defined hierarchical components');\n\t\t}\n\n\t\tif (!(base instanceof URI)) {\n\t\t\tbase = new URI(base);\n\t\t}\n\n\t\tif (!resolved._parts.protocol) {\n\t\t\tresolved._parts.protocol = base._parts.protocol;\n\t\t}\n\n\t\tif (this._parts.hostname) {\n\t\t\treturn resolved;\n\t\t}\n\n\t\tfor (i = 0; (p = properties[i]); i++) {\n\t\t\tresolved._parts[p] = base._parts[p];\n\t\t}\n\n\t\tif (!resolved._parts.path) {\n\t\t\tresolved._parts.path = base._parts.path;\n\t\t\tif (!resolved._parts.query) {\n\t\t\t\tresolved._parts.query = base._parts.query;\n\t\t\t}\n\t\t} else if (resolved._parts.path.substring(-2) === '..') {\n\t\t\tresolved._parts.path += '/';\n\t\t}\n\n\t\tif (resolved.path().charAt(0) !== '/') {\n\t\t\tbasedir = base.directory();\n\t\t\tbasedir = basedir ? basedir : base.path().indexOf('/') === 0 ? '/' : '';\n\t\t\tresolved._parts.path = (basedir ? (basedir + '/') : '') + resolved._parts.path;\n\t\t\tresolved.normalizePath();\n\t\t}\n\n\t\tresolved.build();\n\t\treturn resolved;\n\t};\n\tp.relativeTo = function(base) {\n\t\tvar relative = this.clone().normalize();\n\t\tvar relativeParts, baseParts, common, relativePath, basePath;\n\n\t\tif (relative._parts.urn) {\n\t\t\tthrow new Error('URNs do not have any generally defined hierarchical components');\n\t\t}\n\n\t\tbase = new URI(base).normalize();\n\t\trelativeParts = relative._parts;\n\t\tbaseParts = base._parts;\n\t\trelativePath = relative.path();\n\t\tbasePath = base.path();\n\n\t\tif (relativePath.charAt(0) !== '/') {\n\t\t\tthrow new Error('URI is already relative');\n\t\t}\n\n\t\tif (basePath.charAt(0) !== '/') {\n\t\t\tthrow new Error('Cannot calculate a URI relative to another relative URI');\n\t\t}\n\n\t\tif (relativeParts.protocol === baseParts.protocol) {\n\t\t\trelativeParts.protocol = null;\n\t\t}\n\n\t\tif (relativeParts.username !== baseParts.username || relativeParts.password !== baseParts.password) {\n\t\t\treturn relative.build();\n\t\t}\n\n\t\tif (relativeParts.protocol !== null || relativeParts.username !== null || relativeParts.password !== null) {\n\t\t\treturn relative.build();\n\t\t}\n\n\t\tif (relativeParts.hostname === baseParts.hostname && relativeParts.port === baseParts.port) {\n\t\t\trelativeParts.hostname = null;\n\t\t\trelativeParts.port = null;\n\t\t} else {\n\t\t\treturn relative.build();\n\t\t}\n\n\t\tif (relativePath === basePath) {\n\t\t\trelativeParts.path = '';\n\t\t\treturn relative.build();\n\t\t}\n\n\t\t// determine common sub path\n\t\tcommon = URI.commonPath(relativePath, basePath);\n\n\t\t// If the paths have nothing in common, return a relative URL with the absolute path.\n\t\tif (!common) {\n\t\t\treturn relative.build();\n\t\t}\n\n\t\tvar parents = baseParts.path\n\t\t\t.substring(common.length)\n\t\t\t.replace(/[^\\/]*$/, '')\n\t\t\t.replace(/.*?\\//g, '../');\n\n\t\trelativeParts.path = (parents + relativeParts.path.substring(common.length)) || './';\n\n\t\treturn relative.build();\n\t};\n\n\t// comparing URIs\n\tp.equals = function(uri) {\n\t\tvar one = this.clone();\n\t\tvar two = new URI(uri);\n\t\tvar one_map = {};\n\t\tvar two_map = {};\n\t\tvar checked = {};\n\t\tvar one_query, two_query, key;\n\n\t\tone.normalize();\n\t\ttwo.normalize();\n\n\t\t// exact match\n\t\tif (one.toString() === two.toString()) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// extract query string\n\t\tone_query = one.query();\n\t\ttwo_query = two.query();\n\t\tone.query('');\n\t\ttwo.query('');\n\n\t\t// definitely not equal if not even non-query parts match\n\t\tif (one.toString() !== two.toString()) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// query parameters have the same length, even if they're permuted\n\t\tif (one_query.length !== two_query.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tone_map = URI.parseQuery(one_query, this._parts.escapeQuerySpace);\n\t\ttwo_map = URI.parseQuery(two_query, this._parts.escapeQuerySpace);\n\n\t\tfor (key in one_map) {\n\t\t\tif (hasOwn.call(one_map, key)) {\n\t\t\t\tif (!isArray(one_map[key])) {\n\t\t\t\t\tif (one_map[key] !== two_map[key]) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} else if (!arraysEqual(one_map[key], two_map[key])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tchecked[key] = true;\n\t\t\t}\n\t\t}\n\n\t\tfor (key in two_map) {\n\t\t\tif (hasOwn.call(two_map, key)) {\n\t\t\t\tif (!checked[key]) {\n\t\t\t\t\t// two contains a parameter not present in one\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t};\n\n\t// state\n\tp.duplicateQueryParameters = function(v) {\n\t\tthis._parts.duplicateQueryParameters = !!v;\n\t\treturn this;\n\t};\n\n\tp.escapeQuerySpace = function(v) {\n\t\tthis._parts.escapeQuerySpace = !!v;\n\t\treturn this;\n\t};\n\n\treturn URI;\n}));","Workflow = {}\n\n@ImageSign = {};\n\n@TracesHandler = {};\n\n@TracesTemplate = {};\n\n@InstanceformTemplate = {};\n\n@InstanceAttachmentTemplate = {};\n\n@InstanceSignText = {}\n\n@RelatedInstances = {}\n\n@RelatedRecords = {}\n\n@InstanceMacro = {context: {}}\n\n@TracesManager = {};\n\nInstanceSignText.isOpinionField_from_string = (field_formula)->\n\treturn (field_formula?.indexOf(\"{traces.\") > -1 || field_formula?.indexOf(\"{signature.traces.\") > -1 || field_formula?.indexOf(\"{yijianlan:\") > -1 || field_formula?.indexOf(\"{\\\"yijianlan\\\":\") > -1 || field_formula?.indexOf(\"{'yijianlan':\") > -1)\n\nInstanceSignText.includesOpinionField = (form, form_version)->\n\tfield_formulas = new Array();\n\n\t_form_version = {}\n\n\tif Meteor.isServer\n\t\t_form_version = uuflowManager.getFormVersion(db.forms.findOne({_id: form}), form_version)\n\telse\n\t\t_form_version = db.form_versions.findOne({_id: form_version, form: form})\n\n\tfields = _form_version?.fields || []\n\n\tfields.forEach (f)->\n\t\tif f.type == 'table'\n\t\t\tconsole.log 'ignore opinion field in table'\n\t\telse if f.type == 'section'\n\t\t\tf?.fields?.forEach (f1)->\n\t\t\t\tfield_formulas.push f1.formula\n\t\telse\n\t\t\tfield_formulas.push f.formula\n\n\t_.some field_formulas, (field_formula)->\n\t\treturn InstanceformTemplate.helpers.isOpinionField_from_string(field_formula)\n\n"," \n\nWorkflow = {};\n\nthis.ImageSign = {};\n\nthis.TracesHandler = {};\n\nthis.TracesTemplate = {};\n\nthis.InstanceformTemplate = {};\n\nthis.InstanceAttachmentTemplate = {};\n\nthis.InstanceSignText = {};\n\nthis.RelatedInstances = {};\n\nthis.RelatedRecords = {};\n\nthis.InstanceMacro = {\n context: {}\n};\n\nthis.TracesManager = {};\n\nInstanceSignText.isOpinionField_from_string = function(field_formula) {\n return (field_formula != null ? field_formula.indexOf(\"{traces.\") : void 0) > -1 || (field_formula != null ? field_formula.indexOf(\"{signature.traces.\") : void 0) > -1 || (field_formula != null ? field_formula.indexOf(\"{yijianlan:\") : void 0) > -1 || (field_formula != null ? field_formula.indexOf(\"{\\\"yijianlan\\\":\") : void 0) > -1 || (field_formula != null ? field_formula.indexOf(\"{'yijianlan':\") : void 0) > -1;\n};\n\nInstanceSignText.includesOpinionField = function(form, form_version) {\n var _form_version, field_formulas, fields;\n field_formulas = new Array();\n _form_version = {};\n if (Meteor.isServer) {\n _form_version = uuflowManager.getFormVersion(db.forms.findOne({\n _id: form\n }), form_version);\n } else {\n _form_version = db.form_versions.findOne({\n _id: form_version,\n form: form\n });\n }\n fields = (_form_version != null ? _form_version.fields : void 0) || [];\n fields.forEach(function(f) {\n var ref;\n if (f.type === 'table') {\n return console.log('ignore opinion field in table');\n } else if (f.type === 'section') {\n return f != null ? (ref = f.fields) != null ? ref.forEach(function(f1) {\n return field_formulas.push(f1.formula);\n }) : void 0 : void 0;\n } else {\n return field_formulas.push(f.formula);\n }\n });\n return _.some(field_formulas, function(field_formula) {\n return InstanceformTemplate.helpers.isOpinionField_from_string(field_formula);\n });\n};\n","db.instance_tasks = new Meteor.Collection('instance_tasks')\n\ndb.instance_tasks._simpleSchema = new SimpleSchema\n instance:\n type: String\n trace:\n type: String\n is_finished:\n type: String\n user:\n type: String\n user_name:\n type: String\n handler:\n type: String\n handler_name:\n type: String\n handler_organization:\n type: String\n handler_organization_name:\n type: String\n handler_organization_fullname:\n type: String\n start_date:\n type: Date\n due_date:\n type: Date\n is_read:\n type: Boolean\n is_error:\n type: Boolean\n values:\n type: Object\n deadline:\n type: Date\n remind_date:\n type: Date\n reminded_count:\n type: Number\n read_date:\n type: Date\n description:\n type: String\n modified:\n type: Date\n modified_by:\n type: String\n sign_show:\n type: Boolean\n judge:\n type: String\n next_steps:\n type: Array\n \"next_steps.$\":\n type: Object\n \"next_steps.$.step\":\n type: String\n \"next_steps.$.users\":\n type: [String]\n finish_date:\n type: Date\n cost_time:\n type: Number\n space:\n type: String\n instance_name:\n type: String\n submitter:\n type: String\n submitter_name:\n type: String\n applicant:\n type: String\n applicant_name:\n type: String\n applicant_organization_name:\n type: String\n submit_date:\n type: Date\n flow:\n type: String\n flow_name:\n type: String\n form:\n type: String\n step:\n type: String\n step_name:\n type: String\n category_name:\n type: String\n instance_state:\n type: String\n distribute_from_instance:\n type: String\n forward_from_instance:\n type: String\n keywords:\n type: String\n is_archived:\n type: Boolean\n category:\n type: String\n","db.auth_tokens = new Meteor.Collection('auth_tokens')","marked = require(\"marked\")\n\nInstanceReadOnlyTemplate = {};\n\n\nInstanceReadOnlyTemplate.instance_attachment = \"\"\"\n\t\n\t\t\n\t\t\t{{this.name}}\n\t\t\n\t\n\"\"\"\n\nInstanceReadOnlyTemplate.afSelectUserRead = \"\"\"\n\t
{{value}}
\n\"\"\"\n\n\nInstanceReadOnlyTemplate.afFormGroupRead = \"\"\"\n\t
\n\t\t{{#with getField this.name}}\n\t\t\t{{#if equals type 'section'}}\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t

{{{description}}}

\n\t\t\t\t\t
\n\t\t\t{{else}}\n\t\t\t\t{{#if equals type 'table'}}\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{{description}}}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{{{getTableThead this}}}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{{{getTableBody this}}}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t{{else}}\n\t\t\t\t\t{{#if showLabel}}\n\t\t\t\t\t\t\n\t\t\t\t\t{{/if}}\n\t\t\t\t\t{{#if isTextarea this}}\n\t\t\t\t\t\t

{{{getValue code}}}

\n\t\t\t\t\t{{else}}\n\t\t\t\t\t\t
{{{getValue code}}}
\n\t\t\t\t\t{{/if}}\n\t\t\t\t{{/if}}\n\t\t\t{{/if}}\n\t\t{{/with}}\n\t
\n\"\"\"\n\nInstanceReadOnlyTemplate.afFormGroup = \"\"\"\n\n\t{{#with getField this.name}}\n\t\t\t{{#if equals type 'section'}}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t

{{{description}}}

\n\t\t\t\t\t
\n \t\t\t\t
\n\t\t\t{{else}}\n\t\t\t\t{{#if equals type 'table'}}\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{{description}}}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{{{getTableThead this}}}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{{{getTableBody this}}}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t{{else}}\n\t\t\t\t\t{{#if equals type 'input'}}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{#if is_textarea}}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t{{#unless is_textarea}}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{/unless}}\n\t\t\t\t\t\t
\n\t\t\t\t\t{{else}}\n\t\t\t\t\t\t{{#if equals type 'number'}}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t{{#if equals type 'date'}}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t{{#if equals type 'dateTime'}}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t{{#if equals type 'password'}}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t{{#if equals type 'select'}}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'radio'}}\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{#each options this}}\n \t\t\t\t\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\t\t\t\t\t\t{{/each}}\n \t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'multiSelect'}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{#each options this}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{/each}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'url'}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'email'}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'checkbox'}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{{getValue code}}}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t{{/if}}\n\t\t\t\t{{/if}}\n\t\t\t{{/if}}\n\t\t{{/with}}\n\"\"\"\n\nInstanceReadOnlyTemplate.create = (tempalteName, steedosData) ->\n\ttemplate = InstanceReadOnlyTemplate[tempalteName]\n\n\ttemplateCompiled = SpacebarsCompiler.compile(template, {isBody: true});\n\n\ttemplateRenderFunction = eval(templateCompiled);\n\n\tTemplate[tempalteName] = new Blaze.Template(tempalteName, templateRenderFunction);\n\tTemplate[tempalteName].steedosData = steedosData\n\tTemplate[tempalteName].helpers InstanceformTemplate.helpers\n\nInstanceReadOnlyTemplate.createInstanceSignText = (steedosData)->\n\tinstanceSignTextHtml = _getViewHtml('client/views/instance/instance_sign_text.html')\n\n\tinstanceSignTextCompiled = SpacebarsCompiler.compile(instanceSignTextHtml, {isBody: true});\n\n\tinstanceSignTextRenderFunction = eval(instanceSignTextCompiled);\n\n\tTemplate.instanceSignText = new Blaze.Template(\"instanceSignText\", instanceSignTextRenderFunction);\n\tTemplate.instanceSignText.steedosData = steedosData\n\tTemplate.instanceSignText.helpers InstanceSignText.helpers\n\nInstanceReadOnlyTemplate.createImageSign = (steedosData) ->\n\timageSignHtml = _getViewHtml('client/views/instance/image_sign.html')\n\timageSignCompiled = SpacebarsCompiler.compile(imageSignHtml, {isBody: true});\n\timageSignRenderFunction = eval(imageSignCompiled);\n\tTemplate.imageSign = new Blaze.Template(\"imageSign\", imageSignRenderFunction);\n\tTemplate.imageSign.steedosData = steedosData\n\tTemplate.imageSign.helpers ImageSign.helpers\n\nInstanceReadOnlyTemplate.createTracesHanlder = (steedosData) ->\n\ttracesHanlderHtml = _getViewHtml('client/views/instance/traces_handler.html')\n\ttracesHanlderCompiled = SpacebarsCompiler.compile(tracesHanlderHtml, {isBody: true});\n\ttracesHanlderRenderFunction = eval(tracesHanlderCompiled);\n\tTemplate.instance_traces_handler = new Blaze.Template(\"instance_traces_handler\", tracesHanlderRenderFunction);\n\tTemplate.instance_traces_handler.steedosData = steedosData\n\tTemplate.instance_traces_handler.helpers TracesHandler.helpers\n\n\nInstanceReadOnlyTemplate.init = (steedosData) ->\n\tInstanceReadOnlyTemplate.create(\"afSelectUserRead\", steedosData);\n\n\tif Meteor.isServer\n\t\tInstanceReadOnlyTemplate.create(\"afFormGroup\", steedosData);\n\n\tInstanceReadOnlyTemplate.create(\"afFormGroupRead\", steedosData);\n\tif Meteor.isServer\n\t\tInstanceReadOnlyTemplate.create(\"instance_attachment\", {absolute: steedosData.absolute});\n\t\tInstanceReadOnlyTemplate.createImageSign(steedosData)\n\t\tInstanceReadOnlyTemplate.createTracesHanlder(steedosData);\n\t\tInstanceReadOnlyTemplate.createInstanceSignText(steedosData)\n\ngetLinkText = (item, label, detail_url)->\n\tif detail_url\n\t\tdetail_url = detail_url.replace(\"{_id}\", item._id)\n\t\tif !/^http(s?):\\/\\//.test(detail_url)\n\t\t\tdetail_url = Steedos.absoluteUrl(detail_url)\n\t\treturn ''+label+'';\n\telse\n\t\treturn label\n\nInstanceReadOnlyTemplate.getValue = (value, field, locale, utcOffset) ->\n\tif !value && value != false\n\t\treturn ''\n\tif [\"select\", \"multiSelect\", \"radio\"].indexOf(field.type) > -1\n\t\tfieldOptions = field.options.split(\"\\n\").map (n)->\n\t\t\titemSplits = n.split(\":\")\n\t\t\treturn {\n\t\t\t\tlabel: itemSplits[0],\n\t\t\t\tvalue: itemSplits[1] || n\n\t\t\t}\n\tswitch field.type\n\t\twhen 'email'\n\t\t\tvalue = if value then '' + value + '' else ''\n\t\twhen 'url'\n\t\t\tif value\n\t\t\t\tif value.indexOf(\"http\") == 0\n\t\t\t\t\ttry\n\t\t\t\t\t\tvalue = \"\" + value + \"\";\n\t\t\t\t\tcatch e\n\t\t\t\t\t\tvalue = \"\" + value + \"\";\n\n\t\t\t\telse\n\t\t\t\t\tvalue = \"\" + value + \"\";\n\t\t\telse\n\t\t\t\tvalue = ''\n\t\twhen 'group'\n\t\t\tif field.is_multiselect\n\t\t\t\tvalue = value?.getProperty(\"fullname\").toString()\n\t\t\telse\n\t\t\t\tvalue = value?.fullname\n\t\twhen 'user'\n\t\t\tif field.is_multiselect\n\t\t\t\tvalue = value?.getProperty(\"name\").toString()\n\t\t\telse\n\t\t\t\tvalue = value?.name\n\t\twhen 'password'\n\t\t\tvalue = '******'\n\t\twhen 'checkbox'\n\t\t\tif value && value != 'false'\n\t\t\t\tvalue = TAPi18n.__(\"form_field_checkbox_yes\", {}, locale)\n\t\t\telse\n\t\t\t\tvalue = TAPi18n.__(\"form_field_checkbox_no\", {}, locale)\n\t\twhen 'dateTime'\n\t\t\tif value && value.length == 16\n\t\t\t\tt = value.split(\"T\")\n\t\t\t\tt0 = t[0].split(\"-\");\n\t\t\t\tt1 = t[1].split(\":\");\n\n\t\t\t\tyear = t0[0];\n\t\t\t\tmonth = t0[1];\n\t\t\t\tdate = t0[2];\n\t\t\t\thours = t1[0];\n\t\t\t\tseconds = t1[1];\n\n\t\t\t\tvalue = new Date(year, month - 1, date, hours, seconds)\n\t\t\telse\n\t\t\t\tvalue = new Date(value)\n\n\t\t\tvalue = InstanceReadOnlyTemplate.formatDate(value, utcOffset);\n\t\twhen 'time'\n\t\t\tif value && value.length == 16\n\t\t\t\tt = value.split(\"T\")\n\t\t\t\tt0 = t[0].split(\"-\");\n\t\t\t\tt1 = t[1].split(\":\");\n\n\t\t\t\tyear = t0[0];\n\t\t\t\tmonth = t0[1];\n\t\t\t\tdate = t0[2];\n\t\t\t\thours = t1[0];\n\t\t\t\tseconds = t1[1];\n\n\t\t\t\tvalue = new Date(year, month - 1, date, hours, seconds)\n\t\t\telse\n\t\t\t\tvalue = new Date(value)\n\n\t\t\tvalue = InstanceReadOnlyTemplate.formatTime(value);\n\t\twhen 'input'\n\t\t\tif field.is_textarea\n\t\t\t\tvalue = value\n\t\twhen 'select'\n\t\t\tselectedOption = fieldOptions.find((item) -> return item.value == value)\n\t\t\tif selectedOption\n\t\t\t\tvalue = selectedOption.label\n\t\twhen 'radio'\n\t\t\tselectedOption = fieldOptions.find((item) -> return item.value == value)\n\t\t\tif selectedOption\n\t\t\t\tvalue = selectedOption.label\n\t\twhen 'multiSelect'\n\t\t\tsplitedValues = value.split(\",\")\n\t\t\tselectedOptions = fieldOptions.filter((item) -> return splitedValues.indexOf(item.value) > -1)\n\t\t\tif selectedOptions.length\n\t\t\t\tvalue = selectedOptions.map((item) -> return item.label).join(\",\")\n\t\twhen 'number'\n\t\t\tif value or value == 0\n\t\t\t\tif field.is_percent\n\t\t\t\t\tvalue = Steedos.numberToPercentString value, field.digits\n\t\t\t\telse\n\t\t\t\t\tvalue = Steedos.numberToString value, field.digits\n\t\twhen 'odata'\n\t\t\tdetail_url = field.detail_url\n\t\t\tif field.is_multiselect\n\t\t\t\tvalue = _.map value, (item)->\n\t\t\t\t\treturn getLinkText(item, item['@label'], detail_url)\n\t\t\telse\n\t\t\t\tvalue = getLinkText(value, value['@label'], detail_url)\n\t\twhen 'image'\n\t\t\tif field.is_multiselect\n\t\t\t\tvalue = _.map value, (item)->\n\t\t\t\t\treturn '
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
'\n\t\t\t\tvalue = value.join(\"\");\n\t\t\telse\n\t\t\t\tvalue = '
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
'\n\t\twhen 'file'\n\t\t\tif value\n\t\t\t\tif !field.is_multiselect\n\t\t\t\t\tvalue = [value]\n\t\t\t\tif Meteor.isClient\n\t\t\t\t\tres = Steedos.authRequest('/api/v1/cfs_files_filerecord?filters=[[\"_id\",\"in\", '+JSON.stringify(value)+']]&fields=[\"_id\",\"original\"]', {async:false})\n\t\t\t\t\trecords = res.data.items\n\t\t\t\telse if Meteor.isServer\n\t\t\t\t\trecords = Steedos.objectFind(\"cfs_files_filerecord\", { filters: [[\"_id\", 'in', value]], fields: [\"_id\", \"original\"] });\n\n\t\t\t\tvalue = _.map records, (item)->\n\t\t\t\t\tfileName = item.original.name;\n\t\t\t\t\tfileUrl = Steedos.absoluteUrl('/api/files/files/'+item._id);\n\t\t\t\t\tfilePreviewHtml = '';\n\t\t\t\t\tif [\".pdf\", \".jpg\", \".jpeg\", \".png\", \".gif\"].indexOf(fileName.toLowerCase().slice(-4)) > -1\n\t\t\t\t\t\tfilePreviewHtml = \" 预览\"\n\t\t\t\t\treturn \"
#{fileName} #{filePreviewHtml ? filePreviewHtml : ''}
\"\n\n\t\t\t\tvalue = value.join(\"\");\n\t\twhen 'lookup'\n\t\t\tif value\n\t\t\t\tif !field.is_multiselect\n\t\t\t\t\tvalue = [value]\n\t\t\t\tif Meteor.isClient\n\t\t\t\t\tuiSchema = Creator.getObject(field.reference_to)\n\t\t\t\t\tnameField = uiSchema?.NAME_FIELD_KEY || 'name'\n\t\t\t\t\tres = Steedos.authRequest('/api/v1/'+field.reference_to+'?filters=[[\"'+(field.reference_to_field || '_id')+'\",\"in\", '+JSON.stringify(value)+']]&fields=[\"_id\",\"'+nameField+'\"]', {async:false})\n\t\t\t\t\trecords = res.data.items\n\t\t\t\telse if Meteor.isServer\n\t\t\t\t\tnameField = Steedos.getObjectNameFieldKey(field.reference_to);\n\t\t\t\t\trecords = Steedos.objectFind(field.reference_to, { filters: [[(field.reference_to_field || '_id'), 'in', value]], fields: [\"_id\", nameField] });\n\t\t\t\tvalue = _.map records, (item)->\n\t\t\t\t\treturn \"#{item[nameField]}\"\n\n\t\t\t\tvalue = value.join(\" , \");\t\n\t\twhen 'html'\n\t\t\tvalue = if value then \"
#{value}
\" else ''\n\n\treturn value;\n\nInstanceReadOnlyTemplate.getLabel = (fields, code) ->\n\tfield = fields.findPropertyByPK(\"code\", code)\n\tif field\n\t\tif field.name\n\t\t\treturn field.name\n\t\telse\n\t\t\treturn field.code\n\n\nInstanceReadOnlyTemplate.getInstanceFormVersion = (instance)->\n\tform = db.forms.findOne(instance.form);\n\n\tform_version = {}\n\n\tform_fields = [];\n\n\tif form.current._id == instance.form_version\n\t\tform_version = form.current\n\telse\n\t\tform_version = _.where(form.historys, {_id: instance.form_version})[0]\n\n\tform_version.fields.forEach (field)->\n\t\tif field.type == 'section'\n\t\t\tform_fields.push(field);\n\t\t\tif field.fields\n\t\t\t\tfield.fields.forEach (f) ->\n\t\t\t\t\tform_fields.push(f);\n\t\telse if field.type == 'table'\n\t\t\tfield['sfields'] = field['fields']\n\t\t\tdelete field['fields']\n\t\t\tform_fields.push(field);\n\t\telse\n\t\t\tform_fields.push(field);\n\n\tform_version.fields = form_fields;\n\n\treturn form_version;\n\nInstanceReadOnlyTemplate.getFlowVersion = (instance)->\n\tflow = db.flows.findOne(instance.flow);\n\tflow_version = {}\n\tif flow.current._id == instance.flow_version\n\t\tflow_version = flow.current\n\telse\n\t\tflow_version = _.where(flow.historys, {_id: instance.flow_version})[0]\n\n\treturn flow_version;\n\n\n_getViewHtml = (path) ->\n\tviewHtml = Assets.getText(path)\n\n\tif viewHtml\n\t\tviewHtml = viewHtml.replace(//i,\"\").replace(/<\\/template>/i,\"\")\n\n\treturn viewHtml;\n\n_getLocale = (user)->\n\tif user?.locale?.toLocaleLowerCase() == 'zh-cn'\n\t\tlocale = \"zh-CN\"\n\telse if user?.locale?.toLocaleLowerCase() == 'en-us'\n\t\tlocale = \"en\"\n\telse\n\t\tlocale = \"zh-CN\"\n\treturn locale\n\n\n_getRequiredFields = (fields, rev)->\n\tif !rev\n\t\trev = [];\n\n\tfields.forEach (field)->\n\t\tif field.type == 'section'\n\t\t\t_getRequiredFields(field.fields, rev)\n\t\telse if field.type == 'table'\n\n\t\telse\n\t\t\tif field.is_required\n\t\t\t\trev.push field.code\n\treturn rev;\n\n_getStartStepEditableFields = (fields, steps)->\n\tstartStep = steps.findPropertyByPK(\"step_type\",\"start\")\n\n\teditableCode = []\n\n\t_.keys(startStep.permissions).forEach (key)->\n\t\tif startStep.permissions[key] == 'editable'\n\t\t\teditableCode.push key\n\n\treturn editableCode\n\n_getStartStepRequiredFields = (fields, steps)->\n\trequiredFields = _getRequiredFields(fields)\n\n\teditableCode = _getStartStepEditableFields(fields, steps)\n\n\treturn _.intersection(requiredFields, editableCode)\n\n_getTemplateData = (user, space, instance, options)->\n\tif Meteor.isServer\n\t\tform_version = InstanceReadOnlyTemplate.getInstanceFormVersion(instance)\n\telse\n\t\tform_version = WorkflowManager.getInstanceFormVersion(instance)\n\n\tlocale = _getLocale(user)\n\n\tsteedosData = {}\n\n\tif Meteor.isClient\n\t\tsteedosData = _.clone(WorkflowManager_format.getAutoformSchemaValues())\n\t\tsteedosData.insname = instance.name\n\t\tsteedosData.ins_state = instance.state\n\t\tsteedosData.ins_final_decision = instance.ins_final_decision\n\t\tsteedosData.ins_code = instance.code\n\t\tsteedosData.ins_is_archived = instance.is_archived\n\t\tsteedosData.ins_is_deleted = instance.ins_is_deleted\n\t\tsteedosData.applicant_name = instance.applicant_name\n\t\tsteedosData.applicantContext = instance.applicant_name\n\n\tsteedosData.instance = instance\n\tsteedosData.form_version = form_version\n\tsteedosData.locale = locale\n\tsteedosData.utcOffset = user.utcOffset\n\tsteedosData.space = instance.space\n\tsteedosData.sessionUserId = user._id\n\n\tif Meteor.isServer\n\t\tif options?.editable\n\t\t\tform = db.forms.findOne({_id: instance.form})\n\n\t\t\tflow = db.flows.findOne({_id: instance.flow})\n\n\t\t\tsteedosData.startStepEditableFields = _getStartStepEditableFields(form.current.fields, flow.current.steps);\n\n\treturn steedosData;\n\nInstanceReadOnlyTemplate.formatDate = (date, utcOffset)->\n\tif Meteor.isServer\n\t\tpassing = false;\n\telse\n\t\tpassing = true;\n\n\tif !utcOffset && utcOffset !=0\n\t\tutcOffset = 8\n\n\treturn moment(date).utcOffset(utcOffset, passing).format(\"YYYY-MM-DD HH:mm\");\n\nInstanceReadOnlyTemplate.formatTime = (date)->\n\tutcOffset = 0\n\treturn moment(date).utcOffset(utcOffset).format(\"HH:mm\");\n\nInstanceReadOnlyTemplate.getInstanceView = (user, space, instance, options)->\n\n\tsteedosData = _getTemplateData(user, space, instance, options)\n\n\tsteedosData.absolute = false;\n\n\tif options?.absolute\n\t\tsteedosData.absolute = true;\n\n\tinstanceTemplate = TemplateManager.getTemplate(instance, options?.templateName);\n\n\tinstanceTemplate = instanceTemplate.replace(/afSelectUser/g,\"afSelectUserRead\")\n\n\tif !options?.editable\n\t\tinstanceTemplate = instanceTemplate.replace(/afFormGroup/g,\"afFormGroupRead\")\n\n\tinstanceCompiled = SpacebarsCompiler.compile(instanceTemplate, {isBody: true});\n\n\tinstanceRenderFunction = eval(instanceCompiled);\n\n\tTemplate.instance_readonly_view = new Blaze.Template(\"instance_readonly_view\", instanceRenderFunction);\n\n\tTemplate.instance_readonly_view.steedosData = steedosData\n\n\tTemplate.instance_readonly_view.helpers InstanceformTemplate.helpers\n\n\tInstanceReadOnlyTemplate.init(steedosData);\n\n\tbody = Blaze.toHTMLWithData(Template.instance_readonly_view, steedosData)\n\n\treturn \"\"\"\n\t\t
\n\t\t\t#{body}\n\t\t
\n\t\"\"\"\n\nInstanceReadOnlyTemplate.getTracesView = (user, space, instance, options)->\n\n\tsteedosData = _getTemplateData(user, space, instance)\n\n\tform = db.forms.findOne(instance.form);\n\tif form.instance_style == \"table\" || options?.templateName == \"table\"\n\t\ttracesHtml = _getViewHtml('client/views/instance/traces_table.html')\n\telse\n\t\ttracesHtml = _getViewHtml('client/views/instance/traces.html')\n\n\ttraceCompiled = SpacebarsCompiler.compile(tracesHtml, {isBody: true});\n\n\ttraceRenderFunction = eval(traceCompiled);\n\n\tTemplate.trace_readonly_view = new Blaze.Template(\"trace_readonly_view\", traceRenderFunction);\n\n\tTemplate.trace_readonly_view.steedosData = steedosData\n\n\tTemplate.trace_readonly_view.helpers TracesTemplate.helpers\n\n\tbody = Blaze.toHTMLWithData(Template.trace_readonly_view, instance.traces)\n\n\treturn body;\n\nInstanceReadOnlyTemplate.getAttachmentView = (user, space, instance)->\n\n\tsteedosData = _getTemplateData(user, space, instance)\n\n\tattachmentHtml = _getViewHtml('client/views/instance/instance_attachments.html')\n\n\tattachmentCompiled = SpacebarsCompiler.compile(attachmentHtml, {isBody: true});\n\n\tattachmentRenderFunction = eval(attachmentCompiled);\n\n\tTemplate.attachments_readonly_view = new Blaze.Template(\"attachments_readonly_view\", attachmentRenderFunction);\n\n\tTemplate.attachments_readonly_view.steedosData = steedosData\n\n\tTemplate.attachments_readonly_view.helpers InstanceAttachmentTemplate.helpers\n\n\tbody = Blaze.toHTMLWithData(Template.attachments_readonly_view)\n\n\treturn body;\n\nInstanceReadOnlyTemplate.getRelatedInstancesView = (user, space, instance, options)->\n\tsteedosData = _getTemplateData(user, space, instance)\n\n\tsteedosData.absolute = false;\n\n\tif options?.absolute\n\t\tsteedosData.absolute = true;\n\n\trelatedInstancesHtml = _getViewHtml('client/views/instance/related_instances.html')\n\n\trelatedInstancesCompiled = SpacebarsCompiler.compile(relatedInstancesHtml, {isBody: true});\n\n\trelatedInstancesRenderFunction = eval(relatedInstancesCompiled);\n\n\tTemplate.related_instances_view = new Blaze.Template(\"related_instances_view\", relatedInstancesRenderFunction);\n\n\tTemplate.related_instances_view.steedosData = steedosData\n\n\tTemplate.related_instances_view.helpers RelatedInstances.helpers\n\n\tbody = Blaze.toHTMLWithData(Template.related_instances_view, steedosData)\n\n\treturn body;\n\nInstanceReadOnlyTemplate.getRelatedRecordsView = (user, space, instance, options)->\n\tsteedosData = _getTemplateData(user, space, instance)\n\n\tsteedosData.absolute = false;\n\n\tif options?.absolute\n\t\tsteedosData.absolute = true;\n\n\trelatedRecordsHtml = _getViewHtml('client/views/instance/related_records.html')\n\n\trelatedRecordsCompiled = SpacebarsCompiler.compile(relatedRecordsHtml, {isBody: true});\n\n\trelatedRecordsRenderFunction = eval(relatedRecordsCompiled);\n\n\tTemplate.related_records_view = new Blaze.Template(\"related_records_view\", relatedRecordsRenderFunction);\n\n\tTemplate.related_records_view.steedosData = steedosData\n\n\tTemplate.related_records_view.helpers RelatedRecords.helpers\n\n\tbody = Blaze.toHTMLWithData(Template.related_records_view, steedosData)\n\n\treturn body;\n\nInstanceReadOnlyTemplate.getOnLoadScript = (instance)->\n\tform_version = WorkflowManager.getFormVersion(instance.form, instance.form_version)\n\n\tform_script = form_version.form_script;\n\n\tif form_script && form_script.replace(/\\n/g,\"\").replace(/\\s/g,\"\").length > 0\n\t\tform_script = \"CoreForm = {};CoreForm.instanceform = {};\" + form_script\n\t\tform_script += \";if(CoreForm.form_OnLoad){window.onload = CoreForm.form_OnLoad();}\"\n\telse\n\t\tform_script = \"\"\n\n\n\nInstanceReadOnlyTemplate.getInstanceHtml = (user, space, instance, options)->\n\n\tbody = InstanceReadOnlyTemplate.getInstanceView(user, space, instance, options);\n\n\tonLoadScript = InstanceReadOnlyTemplate.getOnLoadScript(instance);\n\n\tcreatorService = Meteor.settings.public.webservices?.creator?.url\n\tins_record_ids = instance.record_ids\n\tlocale = _getLocale(user);\n\topenFileScript = \"\"\"\n\t\t\tif(window.isNode && isNode()){\n\t\t\t\tattachs = document.getElementsByClassName(\"ins_attach_href\");\n\t\t\t\tfor(var i = 0; i < attachs.length; i++){\n\t\t\t\t\tattach = attachs[i];\n\t\t\t\t\tattach.addEventListener(\"click\", function(e){\n\t\t\t\t\t\tif(isImage(this.dataset.type) || isHtml(this.dataset.type)){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\topenWindow(\"/api/files/instances/\" + this.dataset.id);\n\t\t\t\t\t\t}else if(nw_core.canOpenFile(this.dataset.name)){\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tnw_core.openFile(this.href, this.dataset.name)\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar flow = \"#{instance.flow}\";\n\t\t\tvar space = \"#{instance.space}\";\n\n\t\t\tfunction getCookie(name){\n\t\t\t\tlet pattern = RegExp(name + \"=.[^;]*\")\n\t\t\t\tlet matched = document.cookie.match(pattern)\n\t\t\t\tif(matched){\n\t\t\t\t\tlet cookie = matched[0].split('=')\n\t\t\t\t\treturn cookie[1]\n\t\t\t\t}\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\tvar records = document.getElementsByClassName(\"ins-related-records\");\n\t\t\tfor(var i = 0; i < records.length; i++){\n\t\t\t\t\tvar record = records[i];\n\t\t\t\t\trecord.addEventListener(\"click\", function(e){\n\t\t\t\t\t\tvar creatorService = \"#{creatorService}\"\n\t\t\t\t\t\tvar ins_record_ids = #{JSON.stringify(ins_record_ids)}\n\t\t\t\t\t\tif(creatorService && ins_record_ids && ins_record_ids.length > 0){\n\t\t\t\t\t\t\tvar objcetName = ins_record_ids[0].o\n\t\t\t\t\t\t\tvar id = ins_record_ids[0].ids[0]\n\t\t\t\t\t\t\tvar uobj = {};\n\t\t\t\t\t\t\tuobj[\"X-User-Id\"] = getCookie(\"X-User-Id\");\n\t\t\t\t\t\t\tuobj[\"X-Auth-Token\"] = getCookie(\"X-Auth-Token\");\n\t\t\t\t\t\t\tredirectUrl = creatorService + \"app/-/\" + objcetName + \"/view/\" + id + \"?\" + $.param(uobj);\n\t\t\t\t\t\t\topenWindow(redirectUrl);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\"\"\";\n\n\n\tif !Steedos.isMobile()\n\t\tform = db.forms.findOne(instance.form);\n\t\tif form?.instance_style == 'table'\n\t\t\tinstance_style = \"instance-table\"\n\n\tif options?.templateName == 'table'\n\t\tinstance_style = \"instance-table\"\n\n\tif options?.instance_style\n\t\tinstance_style = options.instance_style\n\n\tif !options || options.showTrace == true\n\t\ttrace = InstanceReadOnlyTemplate.getTracesView(user, space, instance)\n\telse\n\t\ttrace = \"\"\n\n\tinstanceBoxStyle = \"\";\n\n\tif instance && instance.final_decision\n\t\tif instance.final_decision == \"approved\"\n\t\t\tinstanceBoxStyle = \"box-success\"\n\t\telse if (instance.final_decision == \"rejected\")\n\t\t\tinstanceBoxStyle = \"box-danger\"\n\tif !options || options.showAttachments == true\n\t\tattachment = InstanceReadOnlyTemplate.getAttachmentView(user, space, instance)\n\t\trelated_instances = InstanceReadOnlyTemplate.getRelatedInstancesView(user, space, instance, options)\n\t\trelated_records = InstanceReadOnlyTemplate.getRelatedRecordsView(user, space, instance, options)\n\telse\n\t\tattachment = \"\"\n\t\trelated_instances = \"\"\n\t\trelated_records = \"\"\n\n\n\twidth = \"960px\"\n\t#\t如果给table的parent设置width,则会导致阿里云邮箱显示table 异常\n\tif options?.width\n\t\twidth = \"\"\n\n\tcssHref = Meteor.absoluteUrl(\"steedos-css\")\n\t\n\tjqHref = Meteor.absoluteUrl(\"website/libs/jquery.min.js\")\n\n\tallCssLink = \"\"\"\"\"\"\n\n\ttraceCheck = \"\"\n\tif !_.isEmpty(trace)\n\t\ttraceCheck = \"checked\"\n\tif options?.tagger == 'email' || options?.editable\n\t\tshowTracesBtn = \"\"\n\telse\n\t\tshowTracesBtn = \"\"\"\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t\t\"\"\"\n\n\tshowTracesScript = \"\"\"\n\t\t$( document ).ready(function(){\n\t\t\tvar b = document.getElementById('cbx-print-traces');\n\t\t\tvar t = document.getElementsByClassName('instance-traces')[0];\n\t\t\tif (b && b.checked && t){\n\t\t\t\tt.style = 'display: block;'\n\t\t\t} else if(t){\n\t\t\t\tt.style = 'display: none;'\n\t\t\t}\n\t\t\tif(b){\n\t\t\t\tb.addEventListener('change', function(e){\n\t\t\t\t\tif (e.target.checked){\n\t\t\t\t\t\tt.style = 'display: block;'\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.style = 'display: none;'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\tvar attachmentsCheckbox = document.getElementById('cbx-print-attachments');\n\t\t\tvar attachmentsView = document.getElementsByClassName('attachments-section')[0];\n\t\t\tif (attachmentsCheckbox && attachmentsCheckbox.checked && attachmentsView){\n\t\t\t\tattachmentsView.style = 'display: block;'\n\t\t\t} else if(attachmentsView){\n\t\t\t\tattachmentsView.style = 'display: none;'\n\t\t\t}\n\t\t\tif(attachmentsCheckbox){\n\t\t\t\tattachmentsCheckbox.addEventListener('change', function(e){\n\t\t\t\t\tif (e.target.checked){\n\t\t\t\t\t\tattachmentsView.style = 'display: block;'\n\t\t\t\t\t} else {\n\t\t\t\t\t\tattachmentsView.style = 'display: none;'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\"\"\"\n\n\tif options?.styles\n\t\tallCssLink = \"\"\n\n\tform = db.forms.findOne({_id: instance.form});\n\tformDescriptionHtml = \"\"\n\tif form\n\t\tformDescription = form.description\n\t\tif formDescription\n\t\t\tformDescription = formDescription.replace(/\\n/g,\"
\")\n\t\t\tformDescriptionHtml = \"\"\"\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t#{formDescription}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\"\"\"\n\n\thtml = \"\"\"\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t#{allCssLink}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t#{options.plugins || \"\"}\n\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t#{showTracesBtn}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t#{formDescriptionHtml}\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t#{attachment}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t#{related_instances}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t#{related_records}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t#{body}\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t#{trace}\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\n\t\"\"\"\n\n\treturn html","var _getLocale, _getRequiredFields, _getStartStepEditableFields, _getStartStepRequiredFields, _getTemplateData, _getViewHtml, getLinkText, marked; \n\nmarked = require(\"marked\");\n\nInstanceReadOnlyTemplate = {};\n\nInstanceReadOnlyTemplate.instance_attachment = \"\\n\t\\n\t\t{{this.name}}\\n\t\\n\";\n\nInstanceReadOnlyTemplate.afSelectUserRead = \"
{{value}}
\";\n\nInstanceReadOnlyTemplate.afFormGroupRead = \"
\\n\t{{#with getField this.name}}\\n\t\t{{#if equals type 'section'}}\\n\t\t\t\t
\\n\t\t\t\t\t\\n\t\t\t\t\t

{{{description}}}

\\n\t\t\t\t
\\n\t\t{{else}}\\n\t\t\t{{#if equals type 'table'}}\\n\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t{{{description}}}\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t{{{getTableThead this}}}\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t{{{getTableBody this}}}\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t
\\n\t\t\t{{else}}\\n\t\t\t\t{{#if showLabel}}\\n\t\t\t\t\t\\n\t\t\t\t{{/if}}\\n\t\t\t\t{{#if isTextarea this}}\\n\t\t\t\t\t

{{{getValue code}}}

\\n\t\t\t\t{{else}}\\n\t\t\t\t\t
{{{getValue code}}}
\\n\t\t\t\t{{/if}}\\n\t\t\t{{/if}}\\n\t\t{{/if}}\\n\t{{/with}}\\n
\";\n\nInstanceReadOnlyTemplate.afFormGroup = \"\\n{{#with getField this.name}}\\n\t\t{{#if equals type 'section'}}\\n\t\t\t
\\n\t\t\t\t
\\n\t\t\t\t\t\\n\t\t\t\t\t

{{{description}}}

\\n\t\t\t\t
\\n \t\t\t\t
\\n\t\t{{else}}\\n\t\t\t{{#if equals type 'table'}}\\n\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t{{{description}}}\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t{{{getTableThead this}}}\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t{{{getTableBody this}}}\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t
\\n\t\t\t{{else}}\\n\t\t\t\t{{#if equals type 'input'}}\\n\t\t\t\t\t
\\n\t\t\t\t\t\t\\n\t\t\t\t\t\t{{#if is_textarea}}\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t{{#unless is_textarea}}\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t{{/unless}}\\n\t\t\t\t\t
\\n\t\t\t\t{{else}}\\n\t\t\t\t\t{{#if equals type 'number'}}\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t
\\n\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t{{#if equals type 'date'}}\\n\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t{{#if equals type 'dateTime'}}\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t{{#if equals type 'password'}}\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t{{#if equals type 'select'}}\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t\t{{#if equals type 'radio'}}\\n\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{#each options this}}\\n \t\t\t\t\t\t\t\t\t\t\t\t\\n \t\t\t\t\t\t\t\t\t\t\t\t\t{{/each}}\\n \t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'multiSelect'}}\\n\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{#each options this}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{/each}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'url'}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'email'}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{#if equals type 'checkbox'}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{else}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{{{getValue code}}}
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t\t{{/if}}\\n\t\t\t\t\t{{/if}}\\n\t\t\t\t{{/if}}\\n\t\t\t{{/if}}\\n\t\t{{/if}}\\n\t{{/with}}\";\n\nInstanceReadOnlyTemplate.create = function(tempalteName, steedosData) {\n var template, templateCompiled, templateRenderFunction;\n template = InstanceReadOnlyTemplate[tempalteName];\n templateCompiled = SpacebarsCompiler.compile(template, {\n isBody: true\n });\n templateRenderFunction = eval(templateCompiled);\n Template[tempalteName] = new Blaze.Template(tempalteName, templateRenderFunction);\n Template[tempalteName].steedosData = steedosData;\n return Template[tempalteName].helpers(InstanceformTemplate.helpers);\n};\n\nInstanceReadOnlyTemplate.createInstanceSignText = function(steedosData) {\n var instanceSignTextCompiled, instanceSignTextHtml, instanceSignTextRenderFunction;\n instanceSignTextHtml = _getViewHtml('client/views/instance/instance_sign_text.html');\n instanceSignTextCompiled = SpacebarsCompiler.compile(instanceSignTextHtml, {\n isBody: true\n });\n instanceSignTextRenderFunction = eval(instanceSignTextCompiled);\n Template.instanceSignText = new Blaze.Template(\"instanceSignText\", instanceSignTextRenderFunction);\n Template.instanceSignText.steedosData = steedosData;\n return Template.instanceSignText.helpers(InstanceSignText.helpers);\n};\n\nInstanceReadOnlyTemplate.createImageSign = function(steedosData) {\n var imageSignCompiled, imageSignHtml, imageSignRenderFunction;\n imageSignHtml = _getViewHtml('client/views/instance/image_sign.html');\n imageSignCompiled = SpacebarsCompiler.compile(imageSignHtml, {\n isBody: true\n });\n imageSignRenderFunction = eval(imageSignCompiled);\n Template.imageSign = new Blaze.Template(\"imageSign\", imageSignRenderFunction);\n Template.imageSign.steedosData = steedosData;\n return Template.imageSign.helpers(ImageSign.helpers);\n};\n\nInstanceReadOnlyTemplate.createTracesHanlder = function(steedosData) {\n var tracesHanlderCompiled, tracesHanlderHtml, tracesHanlderRenderFunction;\n tracesHanlderHtml = _getViewHtml('client/views/instance/traces_handler.html');\n tracesHanlderCompiled = SpacebarsCompiler.compile(tracesHanlderHtml, {\n isBody: true\n });\n tracesHanlderRenderFunction = eval(tracesHanlderCompiled);\n Template.instance_traces_handler = new Blaze.Template(\"instance_traces_handler\", tracesHanlderRenderFunction);\n Template.instance_traces_handler.steedosData = steedosData;\n return Template.instance_traces_handler.helpers(TracesHandler.helpers);\n};\n\nInstanceReadOnlyTemplate.init = function(steedosData) {\n InstanceReadOnlyTemplate.create(\"afSelectUserRead\", steedosData);\n if (Meteor.isServer) {\n InstanceReadOnlyTemplate.create(\"afFormGroup\", steedosData);\n }\n InstanceReadOnlyTemplate.create(\"afFormGroupRead\", steedosData);\n if (Meteor.isServer) {\n InstanceReadOnlyTemplate.create(\"instance_attachment\", {\n absolute: steedosData.absolute\n });\n InstanceReadOnlyTemplate.createImageSign(steedosData);\n InstanceReadOnlyTemplate.createTracesHanlder(steedosData);\n return InstanceReadOnlyTemplate.createInstanceSignText(steedosData);\n }\n};\n\ngetLinkText = function(item, label, detail_url) {\n if (detail_url) {\n detail_url = detail_url.replace(\"{_id}\", item._id);\n if (!/^http(s?):\\/\\//.test(detail_url)) {\n detail_url = Steedos.absoluteUrl(detail_url);\n }\n return '' + label + '';\n } else {\n return label;\n }\n};\n\nInstanceReadOnlyTemplate.getValue = function(value, field, locale, utcOffset) {\n var date, detail_url, e, fieldOptions, hours, month, nameField, records, res, seconds, selectedOption, selectedOptions, splitedValues, t, t0, t1, uiSchema, year;\n if (!value && value !== false) {\n return '';\n }\n if ([\"select\", \"multiSelect\", \"radio\"].indexOf(field.type) > -1) {\n fieldOptions = field.options.split(\"\\n\").map(function(n) {\n var itemSplits;\n itemSplits = n.split(\":\");\n return {\n label: itemSplits[0],\n value: itemSplits[1] || n\n };\n });\n }\n switch (field.type) {\n case 'email':\n value = value ? '' + value + '' : '';\n break;\n case 'url':\n if (value) {\n if (value.indexOf(\"http\") === 0) {\n try {\n value = \"\" + value + \"\";\n } catch (error) {\n e = error;\n value = \"\" + value + \"\";\n }\n } else {\n value = \"\" + value + \"\";\n }\n } else {\n value = '';\n }\n break;\n case 'group':\n if (field.is_multiselect) {\n value = value != null ? value.getProperty(\"fullname\").toString() : void 0;\n } else {\n value = value != null ? value.fullname : void 0;\n }\n break;\n case 'user':\n if (field.is_multiselect) {\n value = value != null ? value.getProperty(\"name\").toString() : void 0;\n } else {\n value = value != null ? value.name : void 0;\n }\n break;\n case 'password':\n value = '******';\n break;\n case 'checkbox':\n if (value && value !== 'false') {\n value = TAPi18n.__(\"form_field_checkbox_yes\", {}, locale);\n } else {\n value = TAPi18n.__(\"form_field_checkbox_no\", {}, locale);\n }\n break;\n case 'dateTime':\n if (value && value.length === 16) {\n t = value.split(\"T\");\n t0 = t[0].split(\"-\");\n t1 = t[1].split(\":\");\n year = t0[0];\n month = t0[1];\n date = t0[2];\n hours = t1[0];\n seconds = t1[1];\n value = new Date(year, month - 1, date, hours, seconds);\n } else {\n value = new Date(value);\n }\n value = InstanceReadOnlyTemplate.formatDate(value, utcOffset);\n break;\n case 'time':\n if (value && value.length === 16) {\n t = value.split(\"T\");\n t0 = t[0].split(\"-\");\n t1 = t[1].split(\":\");\n year = t0[0];\n month = t0[1];\n date = t0[2];\n hours = t1[0];\n seconds = t1[1];\n value = new Date(year, month - 1, date, hours, seconds);\n } else {\n value = new Date(value);\n }\n value = InstanceReadOnlyTemplate.formatTime(value);\n break;\n case 'input':\n if (field.is_textarea) {\n value = value;\n }\n break;\n case 'select':\n selectedOption = fieldOptions.find(function(item) {\n return item.value === value;\n });\n if (selectedOption) {\n value = selectedOption.label;\n }\n break;\n case 'radio':\n selectedOption = fieldOptions.find(function(item) {\n return item.value === value;\n });\n if (selectedOption) {\n value = selectedOption.label;\n }\n break;\n case 'multiSelect':\n splitedValues = value.split(\",\");\n selectedOptions = fieldOptions.filter(function(item) {\n return splitedValues.indexOf(item.value) > -1;\n });\n if (selectedOptions.length) {\n value = selectedOptions.map(function(item) {\n return item.label;\n }).join(\",\");\n }\n break;\n case 'number':\n if (value || value === 0) {\n if (field.is_percent) {\n value = Steedos.numberToPercentString(value, field.digits);\n } else {\n value = Steedos.numberToString(value, field.digits);\n }\n }\n break;\n case 'odata':\n detail_url = field.detail_url;\n if (field.is_multiselect) {\n value = _.map(value, function(item) {\n return getLinkText(item, item['@label'], detail_url);\n });\n } else {\n value = getLinkText(value, value['@label'], detail_url);\n }\n break;\n case 'image':\n if (field.is_multiselect) {\n value = _.map(value, function(item) {\n return '
';\n });\n value = value.join(\"\");\n } else {\n value = '
';\n }\n break;\n case 'file':\n if (value) {\n if (!field.is_multiselect) {\n value = [value];\n }\n if (Meteor.isClient) {\n res = Steedos.authRequest('/api/v1/cfs_files_filerecord?filters=[[\"_id\",\"in\", ' + JSON.stringify(value) + ']]&fields=[\"_id\",\"original\"]', {\n async: false\n });\n records = res.data.items;\n } else if (Meteor.isServer) {\n records = Steedos.objectFind(\"cfs_files_filerecord\", {\n filters: [[\"_id\", 'in', value]],\n fields: [\"_id\", \"original\"]\n });\n }\n value = _.map(records, function(item) {\n var fileName, filePreviewHtml, fileUrl;\n fileName = item.original.name;\n fileUrl = Steedos.absoluteUrl('/api/files/files/' + item._id);\n filePreviewHtml = '';\n if ([\".pdf\", \".jpg\", \".jpeg\", \".png\", \".gif\"].indexOf(fileName.toLowerCase().slice(-4)) > -1) {\n filePreviewHtml = \" 预览\";\n }\n return \"
\" + fileName + \" \" + (filePreviewHtml != null ? filePreviewHtml : {\n filePreviewHtml: ''\n }) + \"
\";\n });\n value = value.join(\"\");\n }\n break;\n case 'lookup':\n if (value) {\n if (!field.is_multiselect) {\n value = [value];\n }\n if (Meteor.isClient) {\n uiSchema = Creator.getObject(field.reference_to);\n nameField = (uiSchema != null ? uiSchema.NAME_FIELD_KEY : void 0) || 'name';\n res = Steedos.authRequest('/api/v1/' + field.reference_to + '?filters=[[\"' + (field.reference_to_field || '_id') + '\",\"in\", ' + JSON.stringify(value) + ']]&fields=[\"_id\",\"' + nameField + '\"]', {\n async: false\n });\n records = res.data.items;\n } else if (Meteor.isServer) {\n nameField = Steedos.getObjectNameFieldKey(field.reference_to);\n records = Steedos.objectFind(field.reference_to, {\n filters: [[field.reference_to_field || '_id', 'in', value]],\n fields: [\"_id\", nameField]\n });\n }\n value = _.map(records, function(item) {\n return \"\" + item[nameField] + \"\";\n });\n value = value.join(\" , \");\n }\n break;\n case 'html':\n value = value ? \"
\" + value + \"
\" : '';\n }\n return value;\n};\n\nInstanceReadOnlyTemplate.getLabel = function(fields, code) {\n var field;\n field = fields.findPropertyByPK(\"code\", code);\n if (field) {\n if (field.name) {\n return field.name;\n } else {\n return field.code;\n }\n }\n};\n\nInstanceReadOnlyTemplate.getInstanceFormVersion = function(instance) {\n var form, form_fields, form_version;\n form = db.forms.findOne(instance.form);\n form_version = {};\n form_fields = [];\n if (form.current._id === instance.form_version) {\n form_version = form.current;\n } else {\n form_version = _.where(form.historys, {\n _id: instance.form_version\n })[0];\n }\n form_version.fields.forEach(function(field) {\n if (field.type === 'section') {\n form_fields.push(field);\n if (field.fields) {\n return field.fields.forEach(function(f) {\n return form_fields.push(f);\n });\n }\n } else if (field.type === 'table') {\n field['sfields'] = field['fields'];\n delete field['fields'];\n return form_fields.push(field);\n } else {\n return form_fields.push(field);\n }\n });\n form_version.fields = form_fields;\n return form_version;\n};\n\nInstanceReadOnlyTemplate.getFlowVersion = function(instance) {\n var flow, flow_version;\n flow = db.flows.findOne(instance.flow);\n flow_version = {};\n if (flow.current._id === instance.flow_version) {\n flow_version = flow.current;\n } else {\n flow_version = _.where(flow.historys, {\n _id: instance.flow_version\n })[0];\n }\n return flow_version;\n};\n\n_getViewHtml = function(path) {\n var viewHtml;\n viewHtml = Assets.getText(path);\n if (viewHtml) {\n viewHtml = viewHtml.replace(//i, \"\").replace(/<\\/template>/i, \"\");\n }\n return viewHtml;\n};\n\n_getLocale = function(user) {\n var locale, ref, ref1;\n if ((user != null ? (ref = user.locale) != null ? ref.toLocaleLowerCase() : void 0 : void 0) === 'zh-cn') {\n locale = \"zh-CN\";\n } else if ((user != null ? (ref1 = user.locale) != null ? ref1.toLocaleLowerCase() : void 0 : void 0) === 'en-us') {\n locale = \"en\";\n } else {\n locale = \"zh-CN\";\n }\n return locale;\n};\n\n_getRequiredFields = function(fields, rev) {\n if (!rev) {\n rev = [];\n }\n fields.forEach(function(field) {\n if (field.type === 'section') {\n return _getRequiredFields(field.fields, rev);\n } else if (field.type === 'table') {\n\n } else {\n if (field.is_required) {\n return rev.push(field.code);\n }\n }\n });\n return rev;\n};\n\n_getStartStepEditableFields = function(fields, steps) {\n var editableCode, startStep;\n startStep = steps.findPropertyByPK(\"step_type\", \"start\");\n editableCode = [];\n _.keys(startStep.permissions).forEach(function(key) {\n if (startStep.permissions[key] === 'editable') {\n return editableCode.push(key);\n }\n });\n return editableCode;\n};\n\n_getStartStepRequiredFields = function(fields, steps) {\n var editableCode, requiredFields;\n requiredFields = _getRequiredFields(fields);\n editableCode = _getStartStepEditableFields(fields, steps);\n return _.intersection(requiredFields, editableCode);\n};\n\n_getTemplateData = function(user, space, instance, options) {\n var flow, form, form_version, locale, steedosData;\n if (Meteor.isServer) {\n form_version = InstanceReadOnlyTemplate.getInstanceFormVersion(instance);\n } else {\n form_version = WorkflowManager.getInstanceFormVersion(instance);\n }\n locale = _getLocale(user);\n steedosData = {};\n if (Meteor.isClient) {\n steedosData = _.clone(WorkflowManager_format.getAutoformSchemaValues());\n steedosData.insname = instance.name;\n steedosData.ins_state = instance.state;\n steedosData.ins_final_decision = instance.ins_final_decision;\n steedosData.ins_code = instance.code;\n steedosData.ins_is_archived = instance.is_archived;\n steedosData.ins_is_deleted = instance.ins_is_deleted;\n steedosData.applicant_name = instance.applicant_name;\n steedosData.applicantContext = instance.applicant_name;\n }\n steedosData.instance = instance;\n steedosData.form_version = form_version;\n steedosData.locale = locale;\n steedosData.utcOffset = user.utcOffset;\n steedosData.space = instance.space;\n steedosData.sessionUserId = user._id;\n if (Meteor.isServer) {\n if (options != null ? options.editable : void 0) {\n form = db.forms.findOne({\n _id: instance.form\n });\n flow = db.flows.findOne({\n _id: instance.flow\n });\n steedosData.startStepEditableFields = _getStartStepEditableFields(form.current.fields, flow.current.steps);\n }\n }\n return steedosData;\n};\n\nInstanceReadOnlyTemplate.formatDate = function(date, utcOffset) {\n var passing;\n if (Meteor.isServer) {\n passing = false;\n } else {\n passing = true;\n }\n if (!utcOffset && utcOffset !== 0) {\n utcOffset = 8;\n }\n return moment(date).utcOffset(utcOffset, passing).format(\"YYYY-MM-DD HH:mm\");\n};\n\nInstanceReadOnlyTemplate.formatTime = function(date) {\n var utcOffset;\n utcOffset = 0;\n return moment(date).utcOffset(utcOffset).format(\"HH:mm\");\n};\n\nInstanceReadOnlyTemplate.getInstanceView = function(user, space, instance, options) {\n var body, instanceCompiled, instanceRenderFunction, instanceTemplate, steedosData;\n steedosData = _getTemplateData(user, space, instance, options);\n steedosData.absolute = false;\n if (options != null ? options.absolute : void 0) {\n steedosData.absolute = true;\n }\n instanceTemplate = TemplateManager.getTemplate(instance, options != null ? options.templateName : void 0);\n instanceTemplate = instanceTemplate.replace(/afSelectUser/g, \"afSelectUserRead\");\n if (!(options != null ? options.editable : void 0)) {\n instanceTemplate = instanceTemplate.replace(/afFormGroup/g, \"afFormGroupRead\");\n }\n instanceCompiled = SpacebarsCompiler.compile(instanceTemplate, {\n isBody: true\n });\n instanceRenderFunction = eval(instanceCompiled);\n Template.instance_readonly_view = new Blaze.Template(\"instance_readonly_view\", instanceRenderFunction);\n Template.instance_readonly_view.steedosData = steedosData;\n Template.instance_readonly_view.helpers(InstanceformTemplate.helpers);\n InstanceReadOnlyTemplate.init(steedosData);\n body = Blaze.toHTMLWithData(Template.instance_readonly_view, steedosData);\n return \"
\\n\t\" + body + \"\\n
\";\n};\n\nInstanceReadOnlyTemplate.getTracesView = function(user, space, instance, options) {\n var body, form, steedosData, traceCompiled, traceRenderFunction, tracesHtml;\n steedosData = _getTemplateData(user, space, instance);\n form = db.forms.findOne(instance.form);\n if (form.instance_style === \"table\" || (options != null ? options.templateName : void 0) === \"table\") {\n tracesHtml = _getViewHtml('client/views/instance/traces_table.html');\n } else {\n tracesHtml = _getViewHtml('client/views/instance/traces.html');\n }\n traceCompiled = SpacebarsCompiler.compile(tracesHtml, {\n isBody: true\n });\n traceRenderFunction = eval(traceCompiled);\n Template.trace_readonly_view = new Blaze.Template(\"trace_readonly_view\", traceRenderFunction);\n Template.trace_readonly_view.steedosData = steedosData;\n Template.trace_readonly_view.helpers(TracesTemplate.helpers);\n body = Blaze.toHTMLWithData(Template.trace_readonly_view, instance.traces);\n return body;\n};\n\nInstanceReadOnlyTemplate.getAttachmentView = function(user, space, instance) {\n var attachmentCompiled, attachmentHtml, attachmentRenderFunction, body, steedosData;\n steedosData = _getTemplateData(user, space, instance);\n attachmentHtml = _getViewHtml('client/views/instance/instance_attachments.html');\n attachmentCompiled = SpacebarsCompiler.compile(attachmentHtml, {\n isBody: true\n });\n attachmentRenderFunction = eval(attachmentCompiled);\n Template.attachments_readonly_view = new Blaze.Template(\"attachments_readonly_view\", attachmentRenderFunction);\n Template.attachments_readonly_view.steedosData = steedosData;\n Template.attachments_readonly_view.helpers(InstanceAttachmentTemplate.helpers);\n body = Blaze.toHTMLWithData(Template.attachments_readonly_view);\n return body;\n};\n\nInstanceReadOnlyTemplate.getRelatedInstancesView = function(user, space, instance, options) {\n var body, relatedInstancesCompiled, relatedInstancesHtml, relatedInstancesRenderFunction, steedosData;\n steedosData = _getTemplateData(user, space, instance);\n steedosData.absolute = false;\n if (options != null ? options.absolute : void 0) {\n steedosData.absolute = true;\n }\n relatedInstancesHtml = _getViewHtml('client/views/instance/related_instances.html');\n relatedInstancesCompiled = SpacebarsCompiler.compile(relatedInstancesHtml, {\n isBody: true\n });\n relatedInstancesRenderFunction = eval(relatedInstancesCompiled);\n Template.related_instances_view = new Blaze.Template(\"related_instances_view\", relatedInstancesRenderFunction);\n Template.related_instances_view.steedosData = steedosData;\n Template.related_instances_view.helpers(RelatedInstances.helpers);\n body = Blaze.toHTMLWithData(Template.related_instances_view, steedosData);\n return body;\n};\n\nInstanceReadOnlyTemplate.getRelatedRecordsView = function(user, space, instance, options) {\n var body, relatedRecordsCompiled, relatedRecordsHtml, relatedRecordsRenderFunction, steedosData;\n steedosData = _getTemplateData(user, space, instance);\n steedosData.absolute = false;\n if (options != null ? options.absolute : void 0) {\n steedosData.absolute = true;\n }\n relatedRecordsHtml = _getViewHtml('client/views/instance/related_records.html');\n relatedRecordsCompiled = SpacebarsCompiler.compile(relatedRecordsHtml, {\n isBody: true\n });\n relatedRecordsRenderFunction = eval(relatedRecordsCompiled);\n Template.related_records_view = new Blaze.Template(\"related_records_view\", relatedRecordsRenderFunction);\n Template.related_records_view.steedosData = steedosData;\n Template.related_records_view.helpers(RelatedRecords.helpers);\n body = Blaze.toHTMLWithData(Template.related_records_view, steedosData);\n return body;\n};\n\nInstanceReadOnlyTemplate.getOnLoadScript = function(instance) {\n var form_script, form_version;\n form_version = WorkflowManager.getFormVersion(instance.form, instance.form_version);\n form_script = form_version.form_script;\n if (form_script && form_script.replace(/\\n/g, \"\").replace(/\\s/g, \"\").length > 0) {\n form_script = \"CoreForm = {};CoreForm.instanceform = {};\" + form_script;\n return form_script += \";if(CoreForm.form_OnLoad){window.onload = CoreForm.form_OnLoad();}\";\n } else {\n return form_script = \"\";\n }\n};\n\nInstanceReadOnlyTemplate.getInstanceHtml = function(user, space, instance, options) {\n var allCssLink, attachment, body, creatorService, cssHref, form, formDescription, formDescriptionHtml, html, ins_record_ids, instanceBoxStyle, instance_style, jqHref, locale, onLoadScript, openFileScript, ref, ref1, related_instances, related_records, showTracesBtn, showTracesScript, trace, traceCheck, width;\n body = InstanceReadOnlyTemplate.getInstanceView(user, space, instance, options);\n onLoadScript = InstanceReadOnlyTemplate.getOnLoadScript(instance);\n creatorService = (ref = Meteor.settings[\"public\"].webservices) != null ? (ref1 = ref.creator) != null ? ref1.url : void 0 : void 0;\n ins_record_ids = instance.record_ids;\n locale = _getLocale(user);\n openFileScript = \"if(window.isNode && isNode()){\\n\tattachs = document.getElementsByClassName(\\\"ins_attach_href\\\");\\n\tfor(var i = 0; i < attachs.length; i++){\\n\t\tattach = attachs[i];\\n\t\tattach.addEventListener(\\\"click\\\", function(e){\\n\t\t\tif(isImage(this.dataset.type) || isHtml(this.dataset.type)){\\n\t\t\t\te.preventDefault();\\n\t\t\t\topenWindow(\\\"/api/files/instances/\\\" + this.dataset.id);\\n\t\t\t}else if(nw_core.canOpenFile(this.dataset.name)){\\n\t\t\t\te.preventDefault();\\n\t\t\t\tnw_core.openFile(this.href, this.dataset.name)\\n\t\t\t}\\n\t\t});\\n\t}\\n}\\n\\nvar flow = \\\"\" + instance.flow + \"\\\";\\nvar space = \\\"\" + instance.space + \"\\\";\\n\\nfunction getCookie(name){\\n\tlet pattern = RegExp(name + \\\"=.[^;]*\\\")\\n\tlet matched = document.cookie.match(pattern)\\n\tif(matched){\\n\t\tlet cookie = matched[0].split('=')\\n\t\treturn cookie[1]\\n\t}\\n\treturn ''\\n}\\n\\nvar records = document.getElementsByClassName(\\\"ins-related-records\\\");\\nfor(var i = 0; i < records.length; i++){\\n\t\tvar record = records[i];\\n\t\trecord.addEventListener(\\\"click\\\", function(e){\\n\t\t\tvar creatorService = \\\"\" + creatorService + \"\\\"\\n\t\t\tvar ins_record_ids = \" + (JSON.stringify(ins_record_ids)) + \"\\n\t\t\tif(creatorService && ins_record_ids && ins_record_ids.length > 0){\\n\t\t\t\tvar objcetName = ins_record_ids[0].o\\n\t\t\t\tvar id = ins_record_ids[0].ids[0]\\n\t\t\t\tvar uobj = {};\\n\t\t\t\tuobj[\\\"X-User-Id\\\"] = getCookie(\\\"X-User-Id\\\");\\n\t\t\t\tuobj[\\\"X-Auth-Token\\\"] = getCookie(\\\"X-Auth-Token\\\");\\n\t\t\t\tredirectUrl = creatorService + \\\"app/-/\\\" + objcetName + \\\"/view/\\\" + id + \\\"?\\\" + $.param(uobj);\\n\t\t\t\topenWindow(redirectUrl);\\n\t\t\t}\\n\t\t});\\n\t}\\n\";\n if (!Steedos.isMobile()) {\n form = db.forms.findOne(instance.form);\n if ((form != null ? form.instance_style : void 0) === 'table') {\n instance_style = \"instance-table\";\n }\n }\n if ((options != null ? options.templateName : void 0) === 'table') {\n instance_style = \"instance-table\";\n }\n if (options != null ? options.instance_style : void 0) {\n instance_style = options.instance_style;\n }\n if (!options || options.showTrace === true) {\n trace = InstanceReadOnlyTemplate.getTracesView(user, space, instance);\n } else {\n trace = \"\";\n }\n instanceBoxStyle = \"\";\n if (instance && instance.final_decision) {\n if (instance.final_decision === \"approved\") {\n instanceBoxStyle = \"box-success\";\n } else if (instance.final_decision === \"rejected\") {\n instanceBoxStyle = \"box-danger\";\n }\n }\n if (!options || options.showAttachments === true) {\n attachment = InstanceReadOnlyTemplate.getAttachmentView(user, space, instance);\n related_instances = InstanceReadOnlyTemplate.getRelatedInstancesView(user, space, instance, options);\n related_records = InstanceReadOnlyTemplate.getRelatedRecordsView(user, space, instance, options);\n } else {\n attachment = \"\";\n related_instances = \"\";\n related_records = \"\";\n }\n width = \"960px\";\n if (options != null ? options.width : void 0) {\n width = \"\";\n }\n cssHref = Meteor.absoluteUrl(\"steedos-css\");\n jqHref = Meteor.absoluteUrl(\"website/libs/jquery.min.js\");\n allCssLink = \"\";\n traceCheck = \"\";\n if (!_.isEmpty(trace)) {\n traceCheck = \"checked\";\n }\n if ((options != null ? options.tagger : void 0) === 'email' || (options != null ? options.editable : void 0)) {\n showTracesBtn = \"\";\n } else {\n showTracesBtn = \"
\\n\t
\\n\t\t\\n\t\t\\n\t
\\n
\";\n }\n showTracesScript = \"$( document ).ready(function(){\\n\tvar b = document.getElementById('cbx-print-traces');\\n\tvar t = document.getElementsByClassName('instance-traces')[0];\\n\tif (b && b.checked && t){\\n\t\tt.style = 'display: block;'\\n\t} else if(t){\\n\t\tt.style = 'display: none;'\\n\t}\\n\tif(b){\\n\t\tb.addEventListener('change', function(e){\\n\t\t\tif (e.target.checked){\\n\t\t\t\tt.style = 'display: block;'\\n\t\t\t} else {\\n\t\t\t\tt.style = 'display: none;'\\n\t\t\t}\\n\t\t});\\n\t}\\n\\n\\n\tvar attachmentsCheckbox = document.getElementById('cbx-print-attachments');\\n\tvar attachmentsView = document.getElementsByClassName('attachments-section')[0];\\n\tif (attachmentsCheckbox && attachmentsCheckbox.checked && attachmentsView){\\n\t\tattachmentsView.style = 'display: block;'\\n\t} else if(attachmentsView){\\n\t\tattachmentsView.style = 'display: none;'\\n\t}\\n\tif(attachmentsCheckbox){\\n\t\tattachmentsCheckbox.addEventListener('change', function(e){\\n\t\t\tif (e.target.checked){\\n\t\t\t\tattachmentsView.style = 'display: block;'\\n\t\t\t} else {\\n\t\t\t\tattachmentsView.style = 'display: none;'\\n\t\t\t}\\n\t\t});\\n\t}\\n});\\n\";\n if (options != null ? options.styles : void 0) {\n allCssLink = \"\";\n }\n form = db.forms.findOne({\n _id: instance.form\n });\n formDescriptionHtml = \"\";\n if (form) {\n formDescription = form.description;\n if (formDescription) {\n formDescription = formDescription.replace(/\\n/g, \"
\");\n formDescriptionHtml = \"
\\n\t
\\n\t\t\" + formDescription + \"\\n\t
\\n
\";\n }\n }\n html = \"\\n\\n\t\\n\t\t\\n\t\t\" + allCssLink + \"\\n\t\t\\n\t\t\\n\t\t\" + (options.plugins || \"\") + \"\\n\\n\t\t\\n\t\\n\t\\n\t\t
\\n\t\t\t
\\n\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t\t\t\" + showTracesBtn + \"\\n\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\" + formDescriptionHtml + \"\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\" + attachment + \"\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\" + related_instances + \"\\n\t\t\t\t\t\t\t\t\t\t\t\t\t\" + related_records + \"\\n\t\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t\t\t\" + body + \"\\n\t\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t
\\n\t\t\t\t\t\t\t\t\" + trace + \"\\n\t\t\t\t\t\t\t
\\n\\n\t\t\t\t\t\t
\\n\t\t\t\t\t
\\n\t\t\t\t
\\n\t\t\t
\\n\t\t
\\n\t\\n\t\\n\";\n return html;\n};\n","TemplateManager = {};\n\nformId = 'instanceform';\n\n\nTemplateManager.instance_title = ()->\n\tpageTitle = \"\"\"\n\t\t{{instance.name}}\n\t\"\"\"\n\n\tpageTitleTrClass = \"instance-name\"\n\n\tif CoreForm?.pageTitleFieldName\n\t\tpageTitle = \"\"\"\n\t\t\t\t{{> afFormGroup name=\"#{CoreForm.pageTitleFieldName}\" label=false}}\n\t\t\"\"\"\n\t\tpageTitleTrClass = \"\"\n\n\tif CoreForm?.pageTitle\n\t\tpageTitle = \"\"\"\n\t\t\t#{CoreForm.pageTitle}\n\t\t\"\"\"\n\t\tpageTitleTrClass = \"\"\n\n\tval =\n\t\tpageTitle: pageTitle\n\t\tpageTitleTrClass: pageTitleTrClass\n\n\treturn val\n\nTemplateManager.handleTableTemplate = (instance, _export) ->\n\n\ttemplate = \"\"\"\n\t
\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t
\n\t\t\t\t\t#{this.instance_title().pageTitle}\n\t\t\t\t
\n\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\"\"\";\n\n\ttable_fields = InstanceformTemplate.helpers.table_fields(instance)\n\n\ttable_fields && table_fields.forEach (table_field)->\n\n\t\trequired = \"\"\n\t\tif !CoreForm?.pageTitleFieldName || CoreForm?.pageTitleFieldName != table_field.code\n\t\t\tif table_field.is_required\n\t\t\t\trequired = \"is-required\"\n\n\t\t\tif _export\n\t\t\t\trequired = \"\";\n\n\t\t\tpureCode = Steedos.removeSpecialCharacter(table_field.code);\n\n\t\t\tif InstanceformTemplate.helpers.isOpinionField(table_field)\n\t\t\t\ttemplate += table_field.tr_start\n\t\t\t\ttemplate += \"\"\"\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\"\"\"\n\t\t\t\ttemplate += table_field.tr_end\n\t\t\telse\n\t\t\t\tif InstanceformTemplate.helpers.includes(table_field.type, 'section,table')\n\t\t\t\t\ttemplate += table_field.tr_start\n\t\t\t\t\ttemplate += \"\"\"\n\t\t\t\t\t\t\n\t\t\t\t\t\"\"\"\n\t\t\t\t\ttemplate += table_field.tr_end\n\t\t\t\telse\n\t\t\t\t\ttemplate += table_field.tr_start\n\n\t\t\t\t\tif _export\n\t\t\t\t\t\ttitle_permission = \"\"\n\t\t\t\t\t\tfield_permission = \"\"\n\t\t\t\t\telse\n\t\t\t\t\t\ttitle_permission = \"title-\" + table_field.permission\n\t\t\t\t\t\tfield_permission = \"field-\" + table_field.permission\n\n\t\t\t\t\ttemplate += \"\"\"\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\"\"\"\n\t\t\t\t\ttemplate += table_field.tr_end\n\n\ttemplate += \"\"\"\n\t\t
\n\t\t\t\t\t\t{{afFieldLabelText name=\"#{table_field.code}\"}}\n\t\t\t\t\t\n\t\t\t\t\t\t{{> instanceSignText name=\"#{table_field.code}\"}}\n\t\t\t\t\t\n\t\t\t\t\t\t {{> afFormGroup name=\"#{table_field.code}\" label=false}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{afFieldLabelText name=\"#{table_field.code}\"}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{> afFormGroup name=\"#{table_field.code}\" label=false}}\n\t\t\t\t\t\t
\n\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t
\n\t\"\"\"\n\treturn template\n\n#此处模板公用与:instance 编辑、查看、打印、转发时生成附件、发送邮件body部分(table 模板)\n#如果有修改,请测试确认其他功能是否正常。\nTemplateManager._template =\n\tdefault: (instance)->\n\n\t\ttemplate = \"\"\"\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t

#{TemplateManager.instance_title().pageTitle}

\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t{{#each steedos_form.fields}}\n\t\t\t\t{{#if isOpinionField this}}\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t{{> instanceSignText name=this.code}}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t{{else}}\n\t\t\t\t\t{{#if includes this.type 'section,table'}}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{{> afFormGroup name=this.code label=false}}\n\t\t\t\t\t\t
\n\t\t\t\t\t{{else}}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{{> afFormGroup name=this.code}}\n\t\t\t\t\t\t
\n\t\t\t\t\t{{/if}}\n\t\t\t\t{{/if}}\n\t\t\t{{/each}}\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t {{_t \"instance_initiator\"}} :\n\t\t\t\t\t
\n\t\t\t\t\t{{>Template.dynamic template=\"afSelectUser\" data=applicantContext}}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\"\"\"\n\t\treturn template\n\n\ttable: (instance)->\n\t\treturn TemplateManager.handleTableTemplate(instance)\n#\ttable: '''\n#\t\t\n#\t\t\t\n#\t\t\t\t\n#\t\t\t\n# \n#\t\t\t\t\n#\t\t\t\n#
\n#\t\t\t\t\t

{{instance.name}}

\n#\t\t\t\t\t\n#\t\t\t\t
\n#\t\t\t\t\t\n#\t\t\t\t\t{{>Template.dynamic template=\"afSelectUser\" data=applicantContext}}\n#\t\t\t\t
\n#\t\t\n#\t\t {{#each table_fields}}\n#\t\t\t\t{{#if isOpinionField this}}\n#\t\t\t\t\t{{{tr_start}}}\n#\t\t\t\t\t\t\n#\t\t\t\t\t\t\n#\t\t\t\t\t{{{tr_end}}}\n#\t\t\t\t{{else}}\n#\t\t\t\t\t{{#if includes this.type 'section,table'}}\n#\t\t\t\t\t\t{{{tr_start}}}\n#\t\t\t\t\t\t\t\n#\t\t\t\t\t\t{{{tr_end}}}\n#\t\t\t\t\t{{else}}\n#\t\t\t\t\t\t{{{tr_start}}}\n#\t\t\t\t\t\t\t\n#\t\t\t\t\t\t\t\n#\t\t\t\t\t\t{{{tr_end}}}\n#\t\t\t\t\t{{/if}}\n#\t\t\t\t{{/if}}\n#\n#\t\t {{/each}}\n#\t\t
\n#\t\t\t\t\t\t\t{{afFieldLabelText name=this.code}}\n#\t\t\t\t\t\t\n#\t\t\t\t\t\t\t{{> instanceSignText step=(getOpinionFieldStepName this) default=''}}\n#\t\t\t\t\t\t\n#\t\t\t\t\t\t\t {{> afFormGroup name=this.code label=false}}\n#\t\t\t\t\t\t\t\n#\t\t\t\t\t\t\t\t{{afFieldLabelText name=this.code}}\n#\t\t\t\t\t\t\t\n#\t\t\t\t\t\t\t\t{{> afFormGroup name=this.code label=false}}\n#\t\t\t\t\t\t\t
\n#\t'''\n\nTemplateManager._templateHelps =\n\tapplicantContext: ->\n\t\tsteedos_instance = WorkflowManager.getInstance();\n\t\tdata = {\n\t\t\tname: 'ins_applicant',\n\t\t\tatts: {\n\t\t\t\tname: 'ins_applicant',\n\t\t\t\tid: 'ins_applicant',\n\t\t\t\tclass: 'selectUser form-control',\n\t\t\t\tstyle: 'padding:6px 12px;width:140px;display:inline'\n\t\t\t}\n\t\t}\n#\t\tif not steedos_instance || steedos_instance.state != \"draft\"\n\t\tdata.atts.disabled = true\n\t\treturn data;\n\ninstanceId: ->\n\treturn 'instanceform';#\"instance_\" + Session.get(\"instanceId\");\n\nform_types: ->\n\tif ApproveManager.isReadOnly()\n\t\treturn 'disabled';\n\telse\n\t\treturn 'method';\n\nsteedos_form: ->\n\tform_version = WorkflowManager.getInstanceFormVersion();\n\tif form_version\n\t\treturn form_version\n\ninnersubformContext: (obj)->\n\tdoc_values = WorkflowManager_format.getAutoformSchemaValues();\n\tobj[\"tableValues\"] = if doc_values then doc_values[obj.code] else []\n\tobj[\"formId\"] = formId;\n\treturn obj;\n\ninstance: ->\n\tSession.get(\"change_date\")\n\tif (Session.get(\"instanceId\"))\n\t\tsteedos_instance = WorkflowManager.getInstance();\n\t\treturn steedos_instance;\n\nequals: (a, b) ->\n\treturn (a == b)\n\nincludes: (a, b) ->\n\treturn b.split(',').includes(a);\n\nfields: ->\n\tform_version = WorkflowManager.getInstanceFormVersion();\n\tif form_version\n\t\treturn new SimpleSchema(WorkflowManager_format.getAutoformSchema(form_version));\n\ndoc_values: ->\n\tWorkflowManager_format.getAutoformSchemaValues();\n\ninstance_box_style: ->\n\tbox = Session.get(\"box\")\n\tif box == \"inbox\" || box == \"draft\"\n\t\tjudge = Session.get(\"judge\")\n\t\tif judge\n\t\t\tif (judge == \"approved\")\n\t\t\t\treturn \"box-success\"\n\t\t\telse if (judge == \"rejected\")\n\t\t\t\treturn \"box-danger\"\n\tins = WorkflowManager.getInstance();\n\tif ins && ins.final_decision\n\t\tif ins.final_decision == \"approved\"\n\t\t\treturn \"box-success\"\n\t\telse if (ins.final_decision == \"rejected\")\n\t\t\treturn \"box-danger\"\n\n\nTemplateManager.getTemplate = (instance, templateName) ->\n\tflow = db.flows.findOne(instance.flow);\n\tform = db.forms.findOne(instance.form);\n\n\tif templateName\n\t\tif templateName == 'table'\n\t\t\treturn TemplateManager._template.table(instance)\n\t\treturn TemplateManager._template.default(instance)\n\n\tif Session?.get(\"instancePrint\")\n\t\tif flow?.print_template\n\t\t\treturn \"
\" + flow.print_template + \"
\"\n\t\telse\n\t\t\tif flow?.instance_template\n\t\t\t\treturn \"
\" + flow.instance_template + \"
\"\n\t\t\telse\n\t\t\t\treturn TemplateManager._template.table(instance)\n\telse\n\t\tif Steedos.isMobile()\n\t\t\treturn TemplateManager._template.default(instance)\n\n\t\tif flow?.instance_template\n\t\t\treturn \"
\" + flow.instance_template + \"
\"\n\n\t\tif form?.instance_style\n\t\t\tif form.instance_style == 'table'\n\t\t\t\treturn TemplateManager._template.table(instance)\n\t\t\treturn TemplateManager._template.default(instance)\n\t\telse\n\t\t\treturn TemplateManager._template.default(instance)\n\n#TemplateManager.exportTemplate = (flowId) ->\n#\ttemplate = TemplateManager.getTemplate(flowId);\n#\n#\tflow = WorkflowManager.getFlow(flowId);\n#\n#\tif flow?.instance_template\n#\t\treturn template;\n#\n#\treturn template;\n\n","var formId; \n\nTemplateManager = {};\n\nformId = 'instanceform';\n\nTemplateManager.instance_title = function() {\n var pageTitle, pageTitleTrClass, val;\n pageTitle = \"{{instance.name}}\";\n pageTitleTrClass = \"instance-name\";\n if (typeof CoreForm !== \"undefined\" && CoreForm !== null ? CoreForm.pageTitleFieldName : void 0) {\n pageTitle = \"{{> afFormGroup name=\\\"\" + CoreForm.pageTitleFieldName + \"\\\" label=false}}\";\n pageTitleTrClass = \"\";\n }\n if (typeof CoreForm !== \"undefined\" && CoreForm !== null ? CoreForm.pageTitle : void 0) {\n pageTitle = \"\" + CoreForm.pageTitle;\n pageTitleTrClass = \"\";\n }\n val = {\n pageTitle: pageTitle,\n pageTitleTrClass: pageTitleTrClass\n };\n return val;\n};\n\nTemplateManager.handleTableTemplate = function(instance, _export) {\n var table_fields, template;\n template = \"
\\n\t\\n\t\t\\n\t\t\t\\n\t\t\\n\\n\t
\\n\t\t\t\t\" + (this.instance_title().pageTitle) + \"\\n\t\t\t
\\n\t\\n\t\t\t\\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t\";\n table_fields = InstanceformTemplate.helpers.table_fields(instance);\n table_fields && table_fields.forEach(function(table_field) {\n var field_permission, pureCode, required, title_permission;\n required = \"\";\n if (!(typeof CoreForm !== \"undefined\" && CoreForm !== null ? CoreForm.pageTitleFieldName : void 0) || (typeof CoreForm !== \"undefined\" && CoreForm !== null ? CoreForm.pageTitleFieldName : void 0) !== table_field.code) {\n if (table_field.is_required) {\n required = \"is-required\";\n }\n if (_export) {\n required = \"\";\n }\n pureCode = Steedos.removeSpecialCharacter(table_field.code);\n if (InstanceformTemplate.helpers.isOpinionField(table_field)) {\n template += table_field.tr_start;\n template += \"\\n\";\n return template += table_field.tr_end;\n } else {\n if (InstanceformTemplate.helpers.includes(table_field.type, 'section,table')) {\n template += table_field.tr_start;\n template += \"\";\n return template += table_field.tr_end;\n } else {\n template += table_field.tr_start;\n if (_export) {\n title_permission = \"\";\n field_permission = \"\";\n } else {\n title_permission = \"title-\" + table_field.permission;\n field_permission = \"field-\" + table_field.permission;\n }\n template += \"\\n\";\n return template += table_field.tr_end;\n }\n }\n }\n });\n template += \"\t
\\n\t{{afFieldLabelText name=\\\"\" + table_field.code + \"\\\"}}\\n\\n\t{{> instanceSignText name=\\\"\" + table_field.code + \"\\\"}}\\n\\n {{> afFormGroup name=\\\"\" + table_field.code + \"\\\" label=false}}\\n\\n\t{{afFieldLabelText name=\\\"\" + table_field.code + \"\\\"}}\\n\\n\t{{> afFormGroup name=\\\"\" + table_field.code + \"\\\" label=false}}\\n
\\n\\n\t\\n\t\t\\n\t\t\t\\n\t\t\t\\n\t\t\\n\t\\n
\";\n return template;\n};\n\nTemplateManager._template = {\n \"default\": function(instance) {\n var template;\n template = \"
\\n\t
\\n\t\t

\" + (TemplateManager.instance_title().pageTitle) + \"

\\n\t\t\\n\t
\\n\t\\n
\\n{{#each steedos_form.fields}}\\n\t{{#if isOpinionField this}}\\n\t\t
\\n\t\t\t
\\n\t\t\t\t\\n\\n\t\t\t\t{{> instanceSignText name=this.code}}\\n\t\t\t
\\n\t\t
\\n\t{{else}}\\n\t\t{{#if includes this.type 'section,table'}}\\n\t\t\t
\\n\t\t\t\t{{> afFormGroup name=this.code label=false}}\\n\t\t\t
\\n\t\t{{else}}\\n\t\t\t
\\n\t\t\t{{> afFormGroup name=this.code}}\\n\t\t\t
\\n\t\t{{/if}}\\n\t{{/if}}\\n{{/each}}\\n
\\n\t
\\n\t
\\n\t\t
\\n\t\t {{_t \\\"instance_initiator\\\"}} :\\n\t\t
\\n\t\t{{>Template.dynamic template=\\\"afSelectUser\\\" data=applicantContext}}\\n\t
\\n\t
\\n
\";\n return template;\n },\n table: function(instance) {\n return TemplateManager.handleTableTemplate(instance);\n }\n};\n\nTemplateManager._templateHelps = {\n applicantContext: function() {\n var data, steedos_instance;\n steedos_instance = WorkflowManager.getInstance();\n data = {\n name: 'ins_applicant',\n atts: {\n name: 'ins_applicant',\n id: 'ins_applicant',\n \"class\": 'selectUser form-control',\n style: 'padding:6px 12px;width:140px;display:inline'\n }\n };\n data.atts.disabled = true;\n return data;\n }\n};\n\n({\n instanceId: function() {\n return 'instanceform';\n },\n form_types: function() {\n if (ApproveManager.isReadOnly()) {\n return 'disabled';\n } else {\n return 'method';\n }\n },\n steedos_form: function() {\n var form_version;\n form_version = WorkflowManager.getInstanceFormVersion();\n if (form_version) {\n return form_version;\n }\n },\n innersubformContext: function(obj) {\n var doc_values;\n doc_values = WorkflowManager_format.getAutoformSchemaValues();\n obj[\"tableValues\"] = doc_values ? doc_values[obj.code] : [];\n obj[\"formId\"] = formId;\n return obj;\n },\n instance: function() {\n var steedos_instance;\n Session.get(\"change_date\");\n if (Session.get(\"instanceId\")) {\n steedos_instance = WorkflowManager.getInstance();\n return steedos_instance;\n }\n },\n equals: function(a, b) {\n return a === b;\n },\n includes: function(a, b) {\n return b.split(',').includes(a);\n },\n fields: function() {\n var form_version;\n form_version = WorkflowManager.getInstanceFormVersion();\n if (form_version) {\n return new SimpleSchema(WorkflowManager_format.getAutoformSchema(form_version));\n }\n },\n doc_values: function() {\n return WorkflowManager_format.getAutoformSchemaValues();\n },\n instance_box_style: function() {\n var box, ins, judge;\n box = Session.get(\"box\");\n if (box === \"inbox\" || box === \"draft\") {\n judge = Session.get(\"judge\");\n if (judge) {\n if (judge === \"approved\") {\n return \"box-success\";\n } else if (judge === \"rejected\") {\n return \"box-danger\";\n }\n }\n }\n ins = WorkflowManager.getInstance();\n if (ins && ins.final_decision) {\n if (ins.final_decision === \"approved\") {\n return \"box-success\";\n } else if (ins.final_decision === \"rejected\") {\n return \"box-danger\";\n }\n }\n }\n});\n\nTemplateManager.getTemplate = function(instance, templateName) {\n var flow, form;\n flow = db.flows.findOne(instance.flow);\n form = db.forms.findOne(instance.form);\n if (templateName) {\n if (templateName === 'table') {\n return TemplateManager._template.table(instance);\n }\n return TemplateManager._template[\"default\"](instance);\n }\n if (typeof Session !== \"undefined\" && Session !== null ? Session.get(\"instancePrint\") : void 0) {\n if (flow != null ? flow.print_template : void 0) {\n return \"
\" + flow.print_template + \"
\";\n } else {\n if (flow != null ? flow.instance_template : void 0) {\n return \"
\" + flow.instance_template + \"
\";\n } else {\n return TemplateManager._template.table(instance);\n }\n }\n } else {\n if (Steedos.isMobile()) {\n return TemplateManager._template[\"default\"](instance);\n }\n if (flow != null ? flow.instance_template : void 0) {\n return \"
\" + flow.instance_template + \"
\";\n }\n if (form != null ? form.instance_style : void 0) {\n if (form.instance_style === 'table') {\n return TemplateManager._template.table(instance);\n }\n return TemplateManager._template[\"default\"](instance);\n } else {\n return TemplateManager._template[\"default\"](instance);\n }\n }\n};\n","SteedosTable = {};\n\nSteedosTable.formId = \"instanceform\";\n\nSteedosTable.checkItem = function (field, item_index) {\n var fieldObj = SteedosTable.getField(field);\n\n var fieldVal = SteedosTable.getItemModalValue(field, item_index);\n\n var sf_name = '';\n var rev = true;\n fieldObj.sfields.forEach(function (sf) {\n if (sf.permission == 'editable') {\n sf_name = fieldObj.code + \".\" + sf.code;\n if (!InstanceManager.checkFormFieldValue($(\"[name='\" + sf_name + \"']\")[0], sf_name, fieldVal[sf.code])) {\n rev = false;\n }\n }\n });\n\n return rev;\n}\n\nSteedosTable.setTableItemValue = function (field, item_index, item_value) {\n\n var tableValue = SteedosTable.getTableValue(field);\n tableValue[item_index] = item_value;\n}\n\nSteedosTable.getTableItemValue = function (field, item_index) {\n return SteedosTable.getTableValue(field)[item_index];\n}\n\nSteedosTable.removeTableItem = function (field, item_index) {\n var item_value = SteedosTable.getTableItemValue(field, item_index);\n item_value.removed = true;\n}\n\nSteedosTable.setTableValue = function (field, value) {\n $(\"table[name='\" + field + \"']\").val({\n val: value\n });\n}\n\nSteedosTable.getTableValue = function (field) {\n return $(\"table[name='\" + field + \"']\").val().val;\n}\n\nSteedosTable.getValidValue = function (field) {\n var value = SteedosTable.getTableValue(field);\n\n if (!value) {\n return\n }\n\n var validValue = [];\n\n value.forEach(function (v) {\n if (!v.removed) {\n validValue.push(v);\n }\n });\n return validValue;\n}\n\n\nSteedosTable.handleData = function (field, values) {\n\n if (!values || !(values instanceof Array)) {\n return values;\n }\n\n var fieldObj = SteedosTable.getField(field);\n\n values.forEach(function (v) {\n fieldObj.sfields.forEach(function (f) {\n if (f.type == 'user' || f.type == 'group') {\n var value = v[f.code]\n if (f.is_multiselect) {\n if (value && value.length > 0 && typeof (value[0]) == 'object') {\n v[f.code] = v[f.code].getProperty(\"id\");\n }\n } else {\n if (value && typeof (value) == 'object') {\n v[f.code] = v[f.code].id;\n }\n }\n } else if (f.type == 'dateTime') {\n var value = v[f.code]\n if (value) {\n if (value.length == 16) {\n var t = value.split(\"T\");\n var t0 = t[0].split(\"-\");\n var t1 = t[1].split(\":\");\n\n year = t0[0];\n month = t0[1];\n date = t0[2];\n hours = t1[0];\n seconds = t1[1];\n value = new Date(year, month - 1, date, hours, seconds);\n v[f.code] = value;\n }\n\n }\n }\n });\n });\n return values;\n}\n\nSteedosTable.getField = function (field) {\n var instanceFields = WorkflowManager.getInstanceFields();\n if (!instanceFields)\n return;\n\n var fieldObj = instanceFields.findPropertyByPK(\"code\", field);\n\n return fieldObj;\n}\n\n\nSteedosTable.getModalData = function (field, index) {\n\n var data = {};\n\n var fieldObj = SteedosTable.getField(field);\n\n if (!fieldObj) {\n return;\n }\n\n data.field = fieldObj;\n\n data.field.formula = Form_formula.getFormulaFieldVariable(\"Form_formula.field_values\", fieldObj.sfields);\n\n data.value = {};\n\n data.value[field] = SteedosTable.getTableItemValue(field, index);\n\n data.index = index;\n\n return data;\n}\n\n\n\nSteedosTable.getItemModalValue = function (field, item_index) {\n\n if (!AutoForm.getFormValues(\"steedos_table_modal_\" + field + \"_\" + item_index)) {\n return {}\n }\n\n var item_value = AutoForm.getFormValues(\"steedos_table_modal_\" + field + \"_\" + item_index).insertDoc[field];\n return item_value;\n}\n\n\nSteedosTable.addItem = function (field, index, _item_value) {\n var keys = SteedosTable.getKeys(field);\n var item_value = _item_value || SteedosTable.getItemModalValue(field, index);\n $(\"tbody[name='\" + field + \"Tbody']\").append(SteedosTable.getTr(keys, item_value, index, field, true))\n\n}\n\nSteedosTable.updateItem = function (field, index, _item_value) {\n\n var item = $(\"tr[name='\" + field + \"_item_\" + index + \"']\");\n\n var item_value = _item_value || SteedosTable.getItemModalValue(field, index);\n\n if (item && item.length > 0) {\n var keys = SteedosTable.getKeys(field);\n var tds = SteedosTable.getRemoveTd(field, index);\n\n var sfields = SteedosTable.getField(field).sfields;\n\n keys.forEach(function (key) {\n var sfield = sfields.findPropertyByPK(\"code\", key);\n\n var value = item_value[key];\n\n tds = tds + SteedosTable.getTd(sfield, index, value);\n\n });\n\n item.empty();\n\n item.append(tds);\n\n } else {\n\n SteedosTable.addItem(field, index);\n }\n\n if (SteedosTable.getTableValue(field)) {\n\n SteedosTable.setTableItemValue(field, index, item_value);\n\n //SteedosTable.valueHash[field][index] = item_value;\n\n } else {\n //SteedosTable.valueHash[field] = [item_value];\n\n SteedosTable.setTableValue(field, [item_value])\n\n }\n\n //执行主表公式计算\n InstanceManager.runFormula(field);\n\n}\n\nSteedosTable.removeItem = function (field, index) {\n\n $(\"tr[name='\" + field + \"_item_\" + index + \"']\").hide();\n\n SteedosTable.removeTableItem(field, index);\n\n InstanceManager.runFormula(field);\n}\n\nSteedosTable.showModal = function (field, index, method) {\n\n\n var modalData = SteedosTable.getModalData(field, index);\n\n modalData.method = method;\n setTimeout(function(){\n Modal.show(\"steedosTableModal\", modalData);\n }, 300)\n}\n\nSteedosTable.getKeys = function (field) {\n if (!AutoForm.getCurrentDataForForm(SteedosTable.formId)) {\n return [];\n }\n\n var ss = AutoForm.getFormSchema(SteedosTable.formId);\n\n var keys = [];\n\n if (ss.schema(field + \".$\").type === Object) {\n keys = ss.objectKeys(SimpleSchema._makeGeneric(field) + '.$')\n }\n\n return keys;\n\n}\n\nSteedosTable.getThead = function (field, editable) {\n\n var fieldObj = field;\n if (!_.isObject(field))\n fieldObj = SteedosTable.getField(field);\n\n if (!fieldObj) {\n return '';\n }\n\n var thead = '',\n trs = '',\n label = '',\n width = 100;\n\n if (editable) {\n // trs = \"\"\n trs = \"\"\n }\n\n var sfields = fieldObj.sfields;\n\n if (!sfields) {\n return thead;\n }\n\n var sf_length = sfields.length;\n\n if (sf_length > 0) {\n var wide_fields = sfields.filterProperty(\"is_wide\", true);\n\n width = 100 / (sf_length + wide_fields.length);\n }\n\n sfields.forEach(function (sf, index) {\n\n label = (sf.name != null && sf.name.length > 0) ? sf.name : sf.code;\n\n trs = trs + \"\" + label + \"\"\n });\n\n thead = '' + trs + '';\n\n return thead;\n}\n\nSteedosTable.getTbody = function (keys, field, values, editable, sfieldsEditable) {\n var tbody = \"\";\n\n if (values instanceof Array) {\n values.forEach(function (value, index) {\n tbody = tbody + SteedosTable.getTr(keys, value, index, field, editable, sfieldsEditable);\n });\n }\n\n return tbody;\n}\n\nSteedosTable.getTr = function (keys, item_value, index, field, editable, sfieldsEditable) {\n\n var fieldObj = field;\n if (!_.isObject(field))\n fieldObj = SteedosTable.getField(field);\n\n var tr = \"\";\n\n var tds = \"\";\n\n if (editable) {\n tds = SteedosTable.getRemoveTd(fieldObj.code, index);\n }\n\n var sfields = fieldObj.sfields;\n\n keys.forEach(function (key) {\n var sfield = sfields.findPropertyByPK(\"code\", key);\n\n var value = item_value[key];\n\n tds = tds + SteedosTable.getTd(sfield, index, value);\n\n });\n\n tr = tr + tds + \"\";\n return tr;\n}\n\nSteedosTable.getRemoveTd = function (field, index) {\n // return \"