/// /// /// /// /// /// var Configs; (function (Configs) { Configs.pluginName = "Configs"; Configs.context = "/config"; Configs.pluginPath = 'plugins/configs/'; Configs.templatePath = Configs.pluginPath + 'html/'; Configs._module = angular.module(Configs.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'nvd3', 'ngTable', 'ngDialog']); Configs.route = PluginHelpers.createRoutingFunction(Configs.templatePath); Configs.controller = PluginHelpers.createControllerFunction(Configs._module, Configs.pluginName); Configs._module.config(['$provide', '$routeProvider', function ($provide, $routeProvider) { $routeProvider.when(UrlHelpers.join(Configs.context, 'gluster-fs/setting'), Configs.route('glusterfsSetting.html', false)) .when(UrlHelpers.join(Configs.context, 'kube-cluster/setting'), Configs.route('kubeClusterSetting.html', false)) .when(Configs.context, { redirectTo: UrlHelpers.join(Configs.context, '/kube-cluster/setting') }); }]); Configs._module.run(['viewRegistry', '$templateCache', 'HawtioExtension', '$compile', function (viewRegistry, $templateCache, ext, $compile) { ext.add('config-setting', function ($scope) { var template = $templateCache.get(UrlHelpers.join(Configs.templatePath, "configMenuItem.html")); return $compile(template)($scope); }); viewRegistry['config'] = Configs.templatePath + "shareLayout.html"; }]); Configs._module.directive('gfsConfigTable', [function () { return { restrict: 'AE', replace: true, scope: { tableTitle: '=', tableContent: '=' }, template: "\n \n \n \n \n \t\n \n
\n \t{{column.title}}\n
\n \t\t{{col.title}}\n \t
\n ", link: function (scope, element, attr) { } }; }]); hawtioPluginLoader.addModule(Configs.pluginName); })(Configs || (Configs = {})); /// /// var Configs; (function (Configs) { //字节大小转换成字符大小 function getStringSize(size) { var result = size; var suffix = ["B", "KB", "MB", "GB", "TB", "PB"]; var count = 1; while (result >= 1024) { result = result / 1024; count++; } return result.toFixed(2) + suffix[count]; } function formatVolume(volume) { volume["formatTotalSize"] = getStringSize(volume.allSize); volume["formatUsedSize"] = getStringSize(volume.usedSize); volume["editable"] = false; angular.forEach(volume.brick, function (brock) { brock["formatUsedSize"] = getStringSize(brock.usedSize); brock["formatAllSize"] = getStringSize(brock.availableSize); brock["editable"] = false; }); } function formatVolumes(volumes) { angular.forEach(volumes, function (volume) { formatVolume(volume); }); } Configs.formatVolumes = formatVolumes; function IsBrockEquals(brock1, brock2) { return brock1.ip == brock2.ip && brock1.path == brock2.path; } /** 刪除volume中指定的brock */ function deleteBrock(volume, brock) { for (var i = 0; i < volume.brick.length; i++) { var brick = volume.brick[i]; if (IsBrockEquals(brick, brock)) { volume.brick.splice(i, 1); break; } } } Configs.deleteBrock = deleteBrock; /** volume添加brock */ function addBrock(volume, brock) { if (brock != null && brock != undefined) volume.brick.push(brock); } Configs.addBrock = addBrock; var ConfigsModelService = (function () { function ConfigsModelService() { this.cluster = []; this.oracleParam = []; this.systemInfo = []; this.regionalismInfo = []; this.updateAllData(); } ConfigsModelService.prototype.updateAllData = function () { this.updateVolumeData(); this.updateOracleParam(); //this.updateCodeInfo(); }; ConfigsModelService.prototype.updateVolumeData = function () { var result = null; $.ajax({ async: false, type: "POST", url: "/java/console/api/volume/list", success: function (data) { if (data) { result = data; } } }); this.cluster = JSON.parse(result); formatVolumes(this.cluster); }; /*public updateCodeInfo(){ var result=null; $.ajax({ async: false, type : "POST", url : "/java/console/api/code/list", success : function(data) { if(data){ result = data; } } }); this.regionalismInfo = result.regionalism; this.systemInfo = result.system; }*/ ConfigsModelService.prototype.updateOracleParam = function () { var result = null; $.ajax({ async: false, type: "POST", url: "/java/console/api/oracle/list", success: function (data) { if (data) { result = data; } } }); this.oracleParam = result; }; ConfigsModelService.prototype.getFolderByVolumeName = function (name) { if (this.cluster === null) return null; for (var i = 0; i < this.cluster.length; i++) { if (this.cluster[i].name === name) return this.cluster[i].folder; } }; return ConfigsModelService; }()); Configs.ConfigsModelService = ConfigsModelService; Configs._module.factory('ConfigsModel', ['$rootScope', '$http', '$location', '$resource', function ($rootScope, $http, $location, $resource) { var $scope = new ConfigsModelService(); return $scope; }]); })(Configs || (Configs = {})); /// var Developer; (function (Developer) { var log = Logger.get('developer-navigation'); function developBreadcrumb() { return { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces"), label: "Teams", title: "View all the available teams", isActive: function (subTab, path) { return false; } }; } function operateBreadcrumb() { return { href: UrlHelpers.join(HawtioCore.documentBase(), "/namespaces"), label: "Manage", title: "Manage the projects and resources inside them" }; } function workspaceLink() { return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", Kubernetes.currentKubernetesNamespace()); } Developer.workspaceLink = workspaceLink; function projectLink(projectId) { var link = workspaceLink(); if (projectId) { return UrlHelpers.join(link, "/projects", projectId); } else { return link; } } Developer.projectLink = projectLink; function createWorkspacesBreadcrumbs(developPerspective) { return [developBreadcrumb()]; } Developer.createWorkspacesBreadcrumbs = createWorkspacesBreadcrumbs; function createWorkspacesSubNavBars(developPerspective) { return activateCurrent([ developBreadcrumb(), operateBreadcrumb() ]); } Developer.createWorkspacesSubNavBars = createWorkspacesSubNavBars; function createWorkspaceBreadcrumbs(children, workspaceName) { if (children === void 0) { children = null; } if (workspaceName === void 0) { workspaceName = null; } var answer = createWorkspacesBreadcrumbs(true); if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } if (workspaceName) { answer.push({ href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces/", workspaceName), label: workspaceName, title: "View the project: " + workspaceName, isActive: function (subTab, path) { return false; } }); return processChildren(answer, children); } return answer; } Developer.createWorkspaceBreadcrumbs = createWorkspaceBreadcrumbs; function createEnvironmentBreadcrumbs($scope, $location, $routeParams) { var ns = Kubernetes.currentKubernetesNamespace(); var namespacesLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes/namespace"); var workspaceName = $routeParams.workspace; var project = $routeParams.project; var environment = $routeParams.namespace; if (workspaceName && project) { var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", project); $scope.$projectLink = projectLink; $scope.$projectNamespaceLink = UrlHelpers.join(projectLink, "namespace", ns); namespacesLink = UrlHelpers.join(projectLink, "namespace"); var children = [ { href: UrlHelpers.join(projectLink, "environments"), label: "Environments", title: "View the environments for this project" }, { href: UrlHelpers.join(namespacesLink, ns, "apps"), label: function () { return environmentName(workspaceName, ns); }, title: "View the runtime of the workspace: " + ns } ]; return createProjectBreadcrumbs(project, children, workspaceName); } else if (workspaceName && environment && workspaceName != environment) { // find label for namespace environment var children = [ { href: environmentsLink(workspaceName), label: "Environments", title: "View the environments for this project" }, { href: environmentLink(workspaceName, environment), label: function () { return environmentName(workspaceName, environment); }, title: "View this environment" } ]; return createProjectBreadcrumbs(project, children, workspaceName); } else if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } var answer = createWorkspaceBreadcrumbs(workspaceName); answer.push({ href: UrlHelpers.join(HawtioCore.documentBase(), "workspaces", workspaceName, "namespace", ns, "apps"), label: 'Runtime', title: "View the runtime of the workspace: " + ns }); return activateCurrent(answer); } Developer.createEnvironmentBreadcrumbs = createEnvironmentBreadcrumbs; /** * Returns the name of the given environment namespace */ function environmentName(workspaceName, environment) { /*var model = Kubernetes.getKubernetesModel(); if (model) { return model.environmentName(workspaceName, environment); }*/ return environment; } function createProjectBreadcrumbs(projectName, children, workspaceName) { if (projectName === void 0) { projectName = null; } if (children === void 0) { children = null; } if (workspaceName === void 0) { workspaceName = null; } if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } var answer = createWorkspaceBreadcrumbs(null, workspaceName); if (workspaceName) { if (projectName) { answer.push({ href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects"), label: "Apps", title: "View all the apps in this project" }); answer.push({ href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName), label: projectName, title: "View the project: " + projectName }); } return processChildren(answer, children); } return answer; } Developer.createProjectBreadcrumbs = createProjectBreadcrumbs; function createProjectSettingsBreadcrumbs(projectName, workspaceName) { if (workspaceName === void 0) { workspaceName = null; } var children = []; if (!projectName) { children = [{ label: "New App", title: "Lets make a new app" }]; } return createProjectBreadcrumbs(projectName, children, workspaceName); } Developer.createProjectSettingsBreadcrumbs = createProjectSettingsBreadcrumbs; function createWorkspaceSubNavBars() { var workspaceName = Kubernetes.currentKubernetesNamespace(); return activateCurrent([ { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName), label: "Dashboard", class: "fa fa-tachometer", title: "View the dashboard for the apps, environments and pipelines in this project" }, { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "apps"), label: "Apps", class: "fa fa-rocket", title: "View the apps in this project" }, { isValid: function () { return Developer.jenkinsLink(); }, href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "jenkinsJob"), label: "Builds", class: "fa fa-code", title: "View the builds in this project" }, { href: environmentsLink(), label: "Environments", class: "fa fa-cubes", title: "View the environments for this project" }, { href: namespaceRuntimeLink(workspaceName), label: "Runtime", class: "fa fa-cube", title: "View the Runtime perspective for this project" } ]); } Developer.createWorkspaceSubNavBars = createWorkspaceSubNavBars; function namespaceRuntimeLink(workspaceName) { if (workspaceName === void 0) { workspaceName = null; } if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } return UrlHelpers.join(HawtioCore.documentBase(), "workspaces", workspaceName, "namespace", workspaceName, "apps"); } Developer.namespaceRuntimeLink = namespaceRuntimeLink; function createBuildsLink(workspaceName, projectName, jenkinsJobId) { workspaceName = workspaceName || Kubernetes.currentKubernetesNamespace(); return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "jenkinsJob", jenkinsJobId); } /** * Creates a routing function that loads a template and inject the needed directives to properly * display/update the Developer module managed tabs and bread crumbs for when the route is active. * * Example Usage: * * var route = Developer.createTabRoutingFunction("/app/somedir"); * $routeProvider.when('/profiles', route('view.html', false, [{ * label: "Profiles", * title: "Browse the profiles of this project" * }] * )); * * @param baseURL * @returns {function(string, boolean=, Array=): {template: string, reloadOnSearch: boolean, controller: string|string|(function(any, ng.route.IRouteParamsService): undefined)[]}} */ function createTabRoutingFunction(baseURL) { return function (templateName, reloadOnSearch, children) { if (reloadOnSearch === void 0) { reloadOnSearch = true; } return { template: "
", reloadOnSearch: reloadOnSearch, controller: ["$scope", "$routeParams", function ($scope, $routeParams) { if ($routeParams["namespace"] == null) { log.error("The :namespace route parameter was not defined for the route."); } if ($routeParams["projectId"] == null) { log.error("The :projectId route parameter was not defined for the route."); } $scope.namespace = $routeParams["namespace"]; $scope.projectId = $routeParams["projectId"]; $scope.contentTemplateUrl = UrlHelpers.join(baseURL, templateName); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.projectId, children); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId); }] }; }; } Developer.createTabRoutingFunction = createTabRoutingFunction; function createProjectSubNavBars(projectName, jenkinsJobId, $scope) { if (jenkinsJobId === void 0) { jenkinsJobId = null; } if ($scope === void 0) { $scope = null; } var workspaceName = Kubernetes.currentKubernetesNamespace(); var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName); var buildsLink = UrlHelpers.join(projectLink, "builds"); if (!jenkinsJobId) { jenkinsJobId = projectName; } var jenkinsBuildLink = null; var pipelinesLink = null; if (projectName && jenkinsJobId) { jenkinsBuildLink = createBuildsLink(workspaceName, projectName, jenkinsJobId); pipelinesLink = UrlHelpers.join(jenkinsBuildLink, "pipelines"); } function isJenkinsBuild() { var answer = Developer.jenkinsLink() && jenkinsBuildLink; if (answer && $scope) { var entity = Developer.projectForScope($scope); if (entity) { return answer && entity.$jenkinsJob; } } return answer; } var answer = [ /* { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName), label: "All Apps", class: 'fa fa-angle-double-left', title: "View the apps in this project" }, { template: `
` }, */ { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "environments"), isActive: function (subTab, path) { var href = normalizeHref(subTab.href); //console.log("subTab: ", subTab, " path: ", path); if (path === href) { return true; } var rootPath = href.replace(/\/environments/, ''); if (path === rootPath) { return true; } return false; }, //href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName), label: "Dashboard", class: "fa fa-tachometer", title: "View the app dashboard for the activity, environments and pipelines" }, { isValid: function () { return isJenkinsBuild() && pipelinesLink; }, id: "pipelines", href: pipelinesLink, label: "Pipelines", class: "fa fa-ellipsis-h", title: "View the pipeline builds for this app" }, { isValid: function () { return !isJenkinsBuild(); }, href: buildsLink, label: "Builds", class: "fa fa-bars", title: "View the builds for this app" }, { isValid: function () { return isJenkinsBuild(); }, isActive: function (item, path) { if (path.indexOf('/log/') > 0) { return false; } if (path.indexOf('/jenkinsJob/') > 0) { return true; } return false; }, id: "builds", href: jenkinsBuildLink, label: "Builds", class: "fa fa-bars", title: "View the Jenkins builds for this app" }, { isValid: function () { return isJenkinsBuild(); }, href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "jenkinsJob", jenkinsJobId, "metrics"), label: "Metrics", class: "fa fa-bar-chart", title: "View the metrics for this project" }, /* { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "tools"), label: "Tools", title: "View the tools for this project" }, */ { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "buildConfigEdit"), label: "Settings", class: "fa fa-cog", title: "View the app configuration", isActive: function (subTab, path) { if (_.endsWith(path, '/buildConfigEdit')) { return true; } if (_.endsWith(path, '/forge/secrets')) { return true; } if (_.endsWith(path, '/forge/command/devops-edit')) { return true; } return false; } } ]; var context = { workspaceName: workspaceName, projectName: projectName, projectLink: projectLink, jenkinsJobId: jenkinsJobId, $scope: $scope }; angular.forEach(Developer.customProjectSubTabFactories, function (fn) { if (angular.isFunction(fn)) { var subtab = fn(context); if (subtab) { if (angular.isArray(subtab)) { angular.forEach(subtab, function (t) { answer.push(t); }); } else { answer.push(subtab); } } } }); return activateCurrent(answer); } Developer.createProjectSubNavBars = createProjectSubNavBars; function createProjectSettingsSubNavBars(projectName, jenkinsJobId) { if (jenkinsJobId === void 0) { jenkinsJobId = null; } if (!projectName) { return []; } var workspaceName = Kubernetes.currentKubernetesNamespace(); var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName); if (!jenkinsJobId) { jenkinsJobId = projectName; } var answer = [ { href: UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, "buildConfigEdit"), label: "Core", title: "View the core build configuration" }, { href: projectSecretsLink(workspaceName, projectName), label: "Secrets", title: "View or change the secrets used to edit source code in the source control system" }, { href: editPipelineLink(workspaceName, projectName), label: "Pipeline", title: "View the DevOps and pipeline configuration" }, { isValid: function () { return forgeProjectHasBuilder("maven"); }, href: editMavenBuildLink(workspaceName, projectName), label: "Maven", title: "View the Maven build configuration" } ]; return activateCurrent(answer); } Developer.createProjectSettingsSubNavBars = createProjectSettingsSubNavBars; function forgeProjectHasBuilder(name) { var forgeProject = Kubernetes.inject("ForgeProject"); if (forgeProject) { return forgeProject.hasBuilder(name); } return false; } Developer.forgeProjectHasBuilder = forgeProjectHasBuilder; function forgeProjectHasPerspective(name) { var forgeProject = Kubernetes.inject("ForgeProject"); if (forgeProject) { return forgeProject.hasPerspective(name); } return false; } Developer.forgeProjectHasPerspective = forgeProjectHasPerspective; function editPipelineLinkScope($scope) { return editPipelineLink($scope.namespace, $scope.projectId || $scope.projectName || $scope.project); } Developer.editPipelineLinkScope = editPipelineLinkScope; function createProjectLink(workspaceName) { if (workspaceName === void 0) { workspaceName = null; } if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "/forge/createProject"); } Developer.createProjectLink = createProjectLink; function editPipelineLink(workspaceName, projectName) { return projectWorkspaceLink(workspaceName, projectName, "forge/command/devops-edit"); } Developer.editPipelineLink = editPipelineLink; function editMavenBuildLink(workspaceName, projectName) { return projectWorkspaceLink(workspaceName, projectName, "forge/command/fabric8-setup"); } Developer.editMavenBuildLink = editMavenBuildLink; function projectSecretsLink(workspaceName, projectName) { return projectWorkspaceLink(workspaceName, projectName, "forge/secrets", false); } Developer.projectSecretsLink = projectSecretsLink; function secretsNamespaceLink(workspaceName, projectName, secretsNamespace) { var prefix = projectWorkspaceLink(workspaceName, projectName, "") || "kubernetes"; return UrlHelpers.join(prefix, "namespace", secretsNamespace, "secrets"); } Developer.secretsNamespaceLink = secretsNamespaceLink; function projectWorkspaceLink(workspaceName, projectName, path, ignoreBlankProject) { if (ignoreBlankProject === void 0) { ignoreBlankProject = true; } if (ignoreBlankProject && !projectName) { return ""; } if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", projectName, path); } Developer.projectWorkspaceLink = projectWorkspaceLink; function environmentsLink(workspaceName) { if (workspaceName === void 0) { workspaceName = null; } if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "environments"); } Developer.environmentsLink = environmentsLink; function environmentLink(workspaceName, environmentNamespace, path, ignoreBlankProject) { if (path === void 0) { path = ""; } if (ignoreBlankProject === void 0) { ignoreBlankProject = true; } if (ignoreBlankProject && !environmentNamespace) { return ""; } if (!workspaceName) { workspaceName = Kubernetes.currentKubernetesNamespace(); } return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "namespace", environmentNamespace, path); } Developer.environmentLink = environmentLink; Developer.customProjectSubTabFactories = []; function createJenkinsBreadcrumbs(projectName, jobId, buildId) { var workspaceName = Kubernetes.currentKubernetesNamespace(); var children = [ { id: "builds", href: createBuildsLink(workspaceName, projectName, jobId), label: "Builds", title: "View the builds for this app" } ]; if (buildId) { children.push({ id: "", href: "", label: "#" + buildId, title: "Build #" + buildId }); } return createProjectBreadcrumbs(projectName, children); } Developer.createJenkinsBreadcrumbs = createJenkinsBreadcrumbs; function createJenkinsSubNavBars(projectName, jenkinsJobId, buildId, extraOption) { if (extraOption === void 0) { extraOption = null; } var answer = createProjectSubNavBars(projectName, jenkinsJobId); if (extraOption) { // extraOption.active = true; answer.push(extraOption); } return answer; } Developer.createJenkinsSubNavBars = createJenkinsSubNavBars; function createEnvironmentSubNavBars($scope, $location, $routeParams) { var ns = Kubernetes.currentKubernetesNamespace(); var workspaceName = $routeParams.workspace; var project = $routeParams.project; var environment = $routeParams.namespace; var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes"); /*console.log("=====================") console.log(projectLink); if (workspaceName && project) { projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes", workspaceName, "projects", project); } else { projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes", workspaceName || ns); }*/ var namespacesLink = UrlHelpers.join(projectLink, "namespace"); return activateCurrent([ { href: UrlHelpers.join(namespacesLink, ns, "replicationControllers"), label: "服务管理", class: "fa fa-clone", title: "View the Replicas for this project" }, ]); } Developer.createEnvironmentSubNavBars = createEnvironmentSubNavBars; function environmentInstanceLink(env, projectName) { if (projectName === void 0) { projectName = null; } if (env) { var envNamespace = env["namespace"]; if (envNamespace) { if (projectName) { return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", Kubernetes.currentKubernetesNamespace(), "projects", projectName, "namespace", envNamespace); } else { return UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", Kubernetes.currentKubernetesNamespace(), "namespace", envNamespace); } } } return ""; } Developer.environmentInstanceLink = environmentInstanceLink; function namespaceLink($scope, $routeParams, path) { if (path === void 0) { path = null; } var ns = Kubernetes.currentKubernetesNamespace(); var workspaceName = $routeParams.workspace; var project = $routeParams.project; var projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/kubernetes"); if (workspaceName && project) { projectLink = UrlHelpers.join(HawtioCore.documentBase(), "/workspaces", workspaceName, "projects", project); } return UrlHelpers.join(projectLink, "namespace", ns, path); } Developer.namespaceLink = namespaceLink; /** * Removes the URL query string if its inside the given text */ function trimQuery(text) { if (text) { var idx = text.indexOf("?"); if (idx >= 0) { return text.substring(0, idx); } } return text; } // Cater for the app running at some weird document base function normalizeHref(href) { if (!href) { return null; } var regex = new RegExp('^' + HawtioCore.documentBase().replace('/', '\\/')); return href.replace(regex, '/'); } Developer.normalizeHref = normalizeHref; function activateCurrent(navBarItems) { navBarItems = _.compact(navBarItems); var injector = HawtioCore.injector; var $location = injector ? injector.get("$location") : null; if ($location) { var path = normalizeHref(trimQuery($location.path())); var found = false; function makeActive(item) { item.active = true; found = true; } function getHref(item) { var href = item.href; var trimHref = trimQuery(href); return normalizeHref(trimHref); } angular.forEach(navBarItems, function (item) { if (!found && item) { if (angular.isFunction(item.isActive)) { if (item.isActive(item, path)) { makeActive(item); } } else { var trimHref = getHref(item); if (!trimHref) { return; } if (trimHref === path) { makeActive(item); } } } }); // Maybe it's a sub-item of a tab, let's fall back to that maybe if (!found) { angular.forEach(navBarItems, function (item) { if (!found) { if (!angular.isFunction(item.isActive)) { var trimHref = getHref(item); if (!trimHref) { return; } if (_.startsWith(path, trimHref)) { makeActive(item); } } } }); } // still not found, let's log it if (!found) { log.debug("No navigation tab found for path:", path); } } return navBarItems; } Developer.activateCurrent = activateCurrent; function processChildren(answer, children) { if (children) { if (angular.isArray(children)) { answer = answer.concat(children); } else { answer.push(children); } } activateCurrent(answer); return answer; } })(Developer || (Developer = {})); var Kubernetes; (function (Kubernetes) { var consts = (function () { function consts() { } Object.defineProperty(consts.prototype, "NAMESPACE_STORAGE_KEY", { get: function () { return "k8sSelectedNamespace"; }, enumerable: true, configurable: true }); return consts; }()); Kubernetes.consts = consts; Kubernetes.Constants = new consts(); var WatchTypes = (function () { function WatchTypes() { } Object.defineProperty(WatchTypes, "ENDPOINTS", { get: function () { return "endpoints"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "EVENTS", { get: function () { return "events"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "NAMESPACES", { get: function () { return "namespaces"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "NODES", { get: function () { return "nodes"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "PERSISTENT_VOLUMES", { get: function () { return "persistentvolumes"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "PERSISTENT_VOLUME_CLAIMS", { get: function () { return "persistentvolumeclaims"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "PODS", { get: function () { return "pods"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "REPLICATION_CONTROLLERS", { get: function () { return "replicationcontrollers"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "RESOURCE_QUOTAS", { get: function () { return "resourcequotas"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "OAUTH_CLIENTS", { get: function () { return "oauthclients"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "SECRETS", { get: function () { return "secrets"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "SERVICES", { get: function () { return "services"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "SERVICE_ACCOUNTS", { get: function () { return "serviceaccounts"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "TEMPLATES", { get: function () { return "templates"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "ROUTES", { get: function () { return "routes"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "BUILD_CONFIGS", { get: function () { return "buildconfigs"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "BUILDS", { get: function () { return "builds"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "DEPLOYMENT_CONFIGS", { get: function () { return "deploymentconfigs"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "IMAGE_STREAMS", { get: function () { return "imagestreams"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "POLICIES", { get: function () { return "policies"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "POLICY_BINDINGS", { get: function () { return "policybindings"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "PROJECTS", { get: function () { return "projects"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "ROLE_BINDINGS", { get: function () { return "rolebindings"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchTypes, "ROLES", { get: function () { return "roles"; }, enumerable: true, configurable: true }); return WatchTypes; }()); Kubernetes.WatchTypes = WatchTypes; var NamespacedTypes = (function () { function NamespacedTypes() { } Object.defineProperty(NamespacedTypes, "k8sTypes", { get: function () { return [ WatchTypes.ENDPOINTS, WatchTypes.EVENTS, WatchTypes.NODES, WatchTypes.PERSISTENT_VOLUMES, WatchTypes.PERSISTENT_VOLUME_CLAIMS, WatchTypes.PODS, WatchTypes.REPLICATION_CONTROLLERS, WatchTypes.RESOURCE_QUOTAS, WatchTypes.PERSISTENT_VOLUMES, WatchTypes.SECRETS, WatchTypes.SERVICES, WatchTypes.SERVICE_ACCOUNTS ]; }, enumerable: true, configurable: true }); Object.defineProperty(NamespacedTypes, "osTypes", { get: function () { return [ WatchTypes.TEMPLATES, WatchTypes.BUILD_CONFIGS, WatchTypes.ROUTES, WatchTypes.BUILDS, WatchTypes.BUILD_CONFIGS, WatchTypes.DEPLOYMENT_CONFIGS, WatchTypes.IMAGE_STREAMS, WatchTypes.OAUTH_CLIENTS, WatchTypes.POLICIES, WatchTypes.POLICY_BINDINGS, WatchTypes.PROJECTS, ]; }, enumerable: true, configurable: true }); return NamespacedTypes; }()); Kubernetes.NamespacedTypes = NamespacedTypes; var WatchActions = (function () { function WatchActions() { } Object.defineProperty(WatchActions, "ANY", { get: function () { return "*"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchActions, "ADDED", { get: function () { return "ADDED"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchActions, "MODIFIED", { get: function () { return "MODIFIED"; }, enumerable: true, configurable: true }); Object.defineProperty(WatchActions, "DELETED", { get: function () { return "DELETED"; }, enumerable: true, configurable: true }); return WatchActions; }()); Kubernetes.WatchActions = WatchActions; })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.hostPorts = []; /** * Sorts the the ip field * * @param ip the ip such as '10.1.2.13' * @returns {any} */ function sortByPodIp(ip) { // i guess there is maybe nicer ways of sort this without parsing and slicing var regex = /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; var groups = regex.exec(ip); if (angular.isDefined(groups)) { var g1 = ("00" + groups[1]).slice(-3); var g2 = ("00" + groups[2]).slice(-3); var g3 = ("00" + groups[3]).slice(-3); var g4 = ("00" + groups[4]).slice(-3); var answer = g1 + g2 + g3 + g4; return answer; } else { return 0; } } Kubernetes.sortByPodIp = sortByPodIp; function ramdomPort() { var hostPort = Math.floor(30000 + Math.random() * (65535 - 30000)); while (Kubernetes.hostPorts.indexOf(hostPort) === 0) { hostPort = Math.floor(30000 + Math.random() * (65535 - 30000)); } Kubernetes.hostPorts.push(hostPort); return hostPort; } Kubernetes.ramdomPort = ramdomPort; function getRandomString(len) { len = len || 32; var $chars = 'abcdefhijkmnprstwxyz'; // 默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1 var maxPos = $chars.length; var pwd = ''; for (var i = 0; i < len; i++) { pwd += $chars.charAt(Math.floor(Math.random() * maxPos)); } return pwd; } Kubernetes.getRandomString = getRandomString; var resourceRCTemplate = (function () { function resourceRCTemplate() { this.image = "oracle:utf8"; this.names = ["oradata"]; } resourceRCTemplate.prototype.createRC = function (Obj) { var labels = { "style": "oracle", "status": "0", "isExtract": Obj.isExtract + "" || "0", "isTarget": Obj.isTarget }; for (var item in Obj.labels) labels[item] = Obj.labels[item]; return { "apiVersion": Kubernetes.defaultApiVersion, "kind": "ReplicationController", "metadata": { "name": Obj.name, "labels": labels, "annotations": Obj.annotations }, "spec": { replicas: Obj.replicas || 1, "template": this.createTemplate(Obj) } }; }; resourceRCTemplate.prototype.createVolumeMounts = function () { var volumeMounts = []; for (var item in this.names) { if (this.names[item] === 'flash-recovery-area') volumeMounts.push({ "name": this.names[item], "mountPath": "/opt/oracle/app/flash_recovery_area" }); else volumeMounts.push({ "name": this.names[item], "mountPath": "/opt/oracle/app/" + this.names[item] }); } return volumeMounts; }; resourceRCTemplate.prototype.createVolumes = function (rootPath) { var volumes = []; for (var item in this.names) { if (this.names[item] === 'flash-recovery-area') volumes.push({ "name": this.names[item], "hostPath": { "path": rootPath + "flash_recovery_area" } }); else volumes.push({ "name": this.names[item], "hostPath": { "path": rootPath + this.names[item] } }); } return volumes; }; resourceRCTemplate.prototype.createContainers = function (Obj) { var containers = []; containers.push({ "name": "oracle", "image": this.image, "imagePullPolicy": "IfNotPresent", "command": ["/assets/entrypoint.sh"], "ports": [ { "containerPort": 1521, "hostPort": Obj.port || ramdomPort() }], "volumeMounts": this.createVolumeMounts() }); return containers; }; resourceRCTemplate.prototype.createTemplate = function (Obj) { return { "metadata": { //"name": Obj.name, "labels": Obj.labels }, "spec": { "terminationGracePeriodSeconds": 0, "containers": this.createContainers(Obj), "volumes": this.createVolumes(Obj.path) } }; }; return resourceRCTemplate; }()); Kubernetes.resourceRCTemplate = resourceRCTemplate; function labelToChinese(labels) { var answer = {}; angular.forEach(labels, function (value, key) { answer[key] = labelChangeToChines(value, key); }); return answer; } Kubernetes.labelToChinese = labelToChinese; function findSameNameReplicationControllers(replicationControllers, name) { var names = []; replicationControllers.forEach(function (rc) { var rcName = Kubernetes.getName(rc); if (rcName.indexof(name) !== -1) names.push(rcName); }); if (names.length === 0) { return name + "_1"; } else { var max = 0; names.forEach(function (value) { var answer = value.split("_"); var key = parseInt(answer[1]); if (max < key) max = key; }); return name + (max + 1); } } Kubernetes.findSameNameReplicationControllers = findSameNameReplicationControllers; function isFilterRC(rc) { var answer = false; angular.forEach(Core.pathGet(rc, ["metadata", "labels"]), function (value, key) { if (key === 'isTarget' && value === 'true') { answer = true; } }); return answer; } Kubernetes.isFilterRC = isFilterRC; function isInclude(rcs, rc) { for (var i in rcs) { if (Kubernetes.getName(rcs[i]) === Kubernetes.getName(rc)) return true; } return false; } Kubernetes.isInclude = isInclude; function labelChangeToChines(value, key) { var trueValue = ''; switch (key) { case 'type': if (value === '01') trueValue = '财政'; else if (value === '02') trueValue = '社保'; else trueValue = value; break; case 'batch': if (value === 'A') trueValue = '批次A'; else if (value === 'B') trueValue = '批次B'; else trueValue = value; break; case 'region': trueValue = Kubernetes.getCountyByCode(value); break; case 'system': trueValue = Kubernetes.getSystemNameById(value); break; case 'version': var reg = new RegExp('^[0-9]$').exec(value); if (reg) trueValue = '版本' + reg[0]; else trueValue = value; break; case 'isTarget': if (value === 'true') trueValue = '汇总数据库'; else trueValue = value; break; default: trueValue = value; } return trueValue; } Kubernetes.labelChangeToChines = labelChangeToChines; /* 检查迁移,是否有已启动的oracle export function checkForMigration(replicationControllers:Array, selectItem:Array){ var result = []; angular.forEach(selectItem, (item) => { if(checkForExit(replicationControllers, item)) result.push(item); }); return result; } */ function checkForExit(replicationControllers, selectItem) { for (var index in replicationControllers) { var replicas = replicationControllers[index]; if (Kubernetes.getName(replicas) == selectItem._key && getAnnotationValueBykey(replicas, "year") == selectItem["year"]) return true; } return false; } Kubernetes.checkForExit = checkForExit; function getAnnotationValueBykey(replicationController, key) { var annotations = Kubernetes.getAnnotations(replicationController); if (annotations && annotations != undefined) { return annotations[key]; } } /* 启动oracle时检查是否正在迁移 */ function checkForCreateOracle(transferTasks, selectItems) { var result = []; angular.forEach(selectItems, function (item) { if (checkForExitTask(transferTasks, item)) result.push(item); }); return result; } Kubernetes.checkForCreateOracle = checkForCreateOracle; function checkForExitTask(transferTasks, selectItem) { for (var index in transferTasks) { var task = transferTasks[index]; if (task["_key"] == selectItem["_key"] && (task["status"] == "1" || task["status"] == "0") && selectItem["year"] == task.labels.dataYear) { return true; } } return false; } /** **/ function checkForExtract(replicationControllers) { var result = []; angular.forEach(replicationControllers, function (replicas) { var labels = Kubernetes.getLabels(replicas); if (labels["isExtract"] == "1") result.push(replicas); }); return result; } Kubernetes.checkForExtract = checkForExtract; function checkIsStartSuccess(replicationControllers) { var result = []; angular.forEach(replicationControllers, function (replicas) { var labels = Kubernetes.getLabels(replicas); if (labels["status"] != "2") result.push(replicas); }); return result; } Kubernetes.checkIsStartSuccess = checkIsStartSuccess; ; /* 检查数据否已挂载使用或正在迁移。 */ function checkForMigration(replicationControllers, transferTasks, selectItem) { var message = ""; for (var index in selectItem) { var item = selectItem[index]; /* 检查迁移文件是否已挂载使用 */ for (var i in replicationControllers) { var labels = Kubernetes.getLabels(replicationControllers[i]); if (Kubernetes.getName(replicationControllers[i]) == item._key && getAnnotationValueBykey(replicationControllers[i], "year") == item["year"] && labels.version == item.labels.version) { message = "数据正在使用"; return message; } } /* 检查迁移文件是否正在迁移 */ for (i in transferTasks) { if (transferTasks[i]["_key"] == item["_key"] && (transferTasks[i]["status"] == "1" || transferTasks[i]["status"] == "0") && item["year"] == transferTasks[i].labels.dataYear && item.labels.version == transferTasks[i].labels.dataVersion) { message = "数据正在迁移"; return message; } } } return message; } Kubernetes.checkForMigration = checkForMigration; function eliminateChechBoxClick() { console.log($("#tableConfig > thead > tr input:checkbox").is(':checked')); if ($("#tableConfig > thead > tr input:checkbox").is(':checked')) { } } Kubernetes.eliminateChechBoxClick = eliminateChechBoxClick; /* 是否已存在当前 */ function alreadyExitInFolder(selectedItems, selectNode) { var childNodes = selectNode.childNodes; for (var i in selectedItems) { var itemName = selectedItems[i].regionalismCode + "_" + selectedItems[i].systemCode; for (var j in childNodes) { if (childNodes[j].name == itemName) { var childrens = childNodes[j].childNodes; for (var k in childrens) if (childrens[k].name == selectedItems[i].dataVersion) return true; } } } return false; } Kubernetes.alreadyExitInFolder = alreadyExitInFolder; })(Kubernetes || (Kubernetes = {})); /// var Configs; (function (Configs) { function customAlert(title, content, func, cancel, focus, icon) { /* 自定义 alert框 title : text : func : cancel: focus : icon : */ icon = "../../../new/images/msgbox_" + icon + ".png"; create_mask(); var temp = "
" + "
" + title + "
" + "" + "
" + content + "
" + "
"; if (null != cancel) { temp += "   "; } temp += "
"; create_msgbox(400, 200, temp); if (focus == 0 || focus == "0" || null == focus) { document.getElementById("msgconfirmb").focus(); } else if (focus == 1 || focus == "1") { document.getElementById("msgcancelb").focus(); } } Configs.customAlert = customAlert; function get_width() { return (document.body.clientWidth + document.body.scrollLeft); } function get_height() { return (document.body.clientHeight + document.body.scrollTop); } function get_left(w) { var bw = document.body.clientWidth; var bh = document.body.clientHeight; w = parseFloat(w); return (bw / 2 - w / 2 + document.body.scrollLeft); } function get_top(h) { var bw = document.body.clientWidth; var bh = document.body.clientHeight; h = parseFloat(h); return (bh / 2 - h / 2 + document.body.scrollTop); } function create_mask() { var mask = document.createElement("div"); mask.id = "mask"; mask.style.position = "absolute"; mask.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=4,opacity=25)"; mask.style.opacity = "0.4"; mask.style.background = "black"; mask.style.top = "0px"; mask.style.left = "0px"; mask.style.width = get_width() + "px"; mask.style.height = get_height() + "px"; mask.style.zIndex = "1000000000"; document.body.appendChild(mask); } Configs.create_mask = create_mask; function create_msgbox(w, h, t) { var box = document.createElement("div"); box.id = "msgbox"; box.style.position = "absolute"; box.style.width = w + "px"; box.style.height = h + "px"; box.style.overflow = "visible"; box.innerHTML = t; box.style.zIndex = "1000000001"; document.body.appendChild(box); re_pos(); } function re_mask() { var mask = document.getElementById("mask"); if (null == mask) return; mask.style.width = get_width() + "px"; mask.style.height = get_height() + "px"; } function re_pos() { var box = document.getElementById("msgbox"); if (null != box) { var w = box.style.width; var h = box.style.height; box.style.left = get_left(w) + "px"; box.style.top = get_top(h) + "px"; } } function remove() { var mask = document.getElementById("mask"); var msgbox = document.getElementById("msgbox"); if (null == mask && null == msgbox) return; document.body.removeChild(mask); document.body.removeChild(msgbox); } Configs.remove = remove; function re_show() { re_pos(); re_mask(); } function load_func() { window.onresize = re_show; window.onscroll = re_show; } })(Configs || (Configs = {})); /* read a object from jiangsu province , such as nanjing with some information 读取江苏的某个地区的信息,以及系统信息 */ var Kubernetes; (function (Kubernetes) { Kubernetes.system_arr = [{ "sys_name": "部门预算", "sys_id": "1" }, { "sys_name": "非税收入收缴管理系统", "sys_id": "2" }, { "sys_name": "预算执行系统", "sys_id": "3" }, { "sys_name": "资产管理系统", "sys_id": "4" }, { "sys_name": "用友财政综合管理信息系统", "sys_id": "5" }, { "sys_name": "用友A++", "sys_id": "6" }, { "sys_name": "浦口财政一体化", "sys_id": "7" }, { "sys_name": "栖霞区财政业务信息管理系统", "sys_id": "8" }, { "sys_name": "一体化系统", "sys_id": "9" }, { "sys_name": "财政管理一体化系统", "sys_id": "10" }, { "sys_name": "滨江开发区财政分局", "sys_id": "11" }, { "sys_name": "江宁经济技术开发区财政分局", "sys_id": "12" }, { "sys_name": "江宁科学园财政分局", "sys_id": "13" }, { "sys_name": "财政一体化系统", "sys_id": "14" }, { "sys_name": "A++财政一体化平台", "sys_id": "15" }, { "sys_name": "非税系统", "sys_id": "16" }, { "sys_name": "一体化预算执行系统", "sys_id": "17" }, { "sys_name": "一体化", "sys_id": "18" }, { "sys_name": "国库集中支付管理信息系统", "sys_id": "19" }, { "sys_name": "国库集中支付", "sys_id": "20" }, { "sys_name": "财政专户核算及非税系统", "sys_id": "21" }, { "sys_name": "集中支付系统", "sys_id": "22" }, { "sys_name": "财政专户核算系统", "sys_id": "23" }, { "sys_name": "非税收缴系统", "sys_id": "24" }, { "sys_name": "财政一体化平台", "sys_id": "25" }, { "sys_name": "富深预算执行", "sys_id": "26" }, { "sys_name": "用友非税及票据", "sys_id": "27" }, { "sys_name": "用友预算执行", "sys_id": "28" }, { "sys_name": "江苏省财政预算执行系统", "sys_id": "29" }, { "sys_name": "用友通用软件", "sys_id": "30" }, { "sys_name": "联友软件/通用财务", "sys_id": "31" }, { "sys_name": "用友GRPG-U8R10财政管理软件", "sys_id": "32" }, { "sys_name": "用友GPP-R10财政管理软件", "sys_id": "33" }, { "sys_name": "富深协通财政一体化管理信息系统", "sys_id": "34" }, { "sys_name": "财务统一核算系统", "sys_id": "35" }, { "sys_name": "公共财政管理软件", "sys_id": "36" }, { "sys_name": "A++财政一体化信息平台", "sys_id": "37" }, { "sys_name": "新中大公共财务管理软件", "sys_id": "38" }, { "sys_name": "富深财政一体化管理系统", "sys_id": "39" }, { "sys_name": "新中大公共财政管理系统", "sys_id": "40" }, { "sys_name": "富深协通财政一体化业务管理系统软件", "sys_id": "41" }, { "sys_name": "新中大公共财政管理软件Gsoft", "sys_id": "42" }, { "sys_name": "财政一体化业务系统", "sys_id": "43" }, { "sys_name": "财政一体化软件", "sys_id": "44" }, { "sys_name": "非税收入系统", "sys_id": "45" }, { "sys_name": "总预算系统", "sys_id": "46" }, { "sys_name": "国库集中支付系统", "sys_id": "47" }, { "sys_name": "用款计划系统", "sys_id": "48" }, { "sys_name": "指标管理系统", "sys_id": "49" }, { "sys_name": "财政综合业务管理平台", "sys_id": "50" }, { "sys_name": "财政一体化管理信息系统", "sys_id": "51" }, { "sys_name": "工资统发", "sys_id": "52" }, { "sys_name": "国有资产", "sys_id": "53" }, { "sys_name": "乡镇非税收入", "sys_id": "54" }, { "sys_name": "乡镇集中支付", "sys_id": "55" }, { "sys_name": "非税征缴系统", "sys_id": "56" }, { "sys_name": "预算编制与执行系统", "sys_id": "57" }, { "sys_name": "预算管理综合业务平台", "sys_id": "58" }, { "sys_name": "u8管理软件", "sys_id": "59" }, { "sys_name": "财政指标管理系统", "sys_id": "60" }, { "sys_name": "用友GRP-R9财务管理软件", "sys_id": "61" }, { "sys_name": "用友GRP-U8财政管理软件", "sys_id": "62" }, { "sys_name": "账务处理系统", "sys_id": "63" }, { "sys_name": "R9i财政管理软件", "sys_id": "64" }, { "sys_name": "u8财政管理软件", "sys_id": "65" }, { "sys_name": "相城区财政综合管理信息系统", "sys_id": "66" }, { "sys_name": "财政非税综合管理系统", "sys_id": "67" }, { "sys_name": "财政综合管理平台", "sys_id": "68" }, { "sys_name": "吴江区财政一体化", "sys_id": "69" }, { "sys_name": "用友R9", "sys_id": "70" }, { "sys_name": "财政公共应用服务平台", "sys_id": "71" }, { "sys_name": "金蝶K/3创新管理平台", "sys_id": "72" }, { "sys_name": "账务数据系统", "sys_id": "73" }, { "sys_name": "公共财政服务平台", "sys_id": "74" }, { "sys_name": "会计核算系统", "sys_id": "75" }, { "sys_name": "项目库", "sys_id": "76" }, { "sys_name": "财政总预算(外)专户管理系统", "sys_id": "77" }, { "sys_name": "城建资金专户管理系统", "sys_id": "78" }, { "sys_name": "农保专户管理系统", "sys_id": "79" }, { "sys_name": "农业发展基金专户管理系统", "sys_id": "80" }, { "sys_name": "失地农民保障资金专户", "sys_id": "81" }, { "sys_name": "非税收入征管系统", "sys_id": "82" }, { "sys_name": "工资统发人员信息", "sys_id": "83" }, { "sys_name": "预算指标-国库集中支付系统", "sys_id": "84" }, { "sys_name": "总预算会计核算系统", "sys_id": "85" }, { "sys_name": "部门预算编审系统", "sys_id": "86" }, { "sys_name": "公务消费管理系统", "sys_id": "87" }, { "sys_name": "国有资产管理系统", "sys_id": "88" }, { "sys_name": "区镇财政管理“一体化”系统", "sys_id": "89" }, { "sys_name": "县本级财政管理“一体化”系统", "sys_id": "90" }, { "sys_name": "用友政务", "sys_id": "91" }, { "sys_name": "财政专户核算(行政口专项资金)", "sys_id": "92" }, { "sys_name": "财政专户核算(经建口专项资金)", "sys_id": "93" }, { "sys_name": "财政专户核算(农业保险专账)", "sys_id": "94" }, { "sys_name": "财政专户核算(农业综合开发专账)", "sys_id": "95" }, { "sys_name": "财政专户核算(社保资金专账)", "sys_id": "96" }, { "sys_name": "财政专户核算(土地出让专账)", "sys_id": "97" }, { "sys_name": "财政专户核算(综合口专项资金)", "sys_id": "98" }, { "sys_name": "非税收入管理系统", "sys_id": "99" }, { "sys_name": "农业专向及农业发展基金专项", "sys_id": "100" }, { "sys_name": "总预算会计核算", "sys_id": "101" }, { "sys_name": "金财工程一体化支撑平台", "sys_id": "102" }, { "sys_name": "非税收缴", "sys_id": "103" }, { "sys_name": "学校预算执行", "sys_id": "104" }, { "sys_name": "预算执行", "sys_id": "105" }, { "sys_name": "专项资金", "sys_id": "106" }, { "sys_name": "总预算", "sys_id": "107" }, { "sys_name": "部门预算系统", "sys_id": "108" }, { "sys_name": "财政专户核算", "sys_id": "109" }, { "sys_name": "财政专户账务系统", "sys_id": "110" }, { "sys_name": "富深财政一体化业务管理系统", "sys_id": "111" }, { "sys_name": "国有资产系统", "sys_id": "112" }, { "sys_name": "国库专项资金管理系统", "sys_id": "113" }, { "sys_name": "非税收缴管理系统", "sys_id": "114" }, { "sys_name": "财政管理系统(新农保)", "sys_id": "115" }, { "sys_name": "财政管理系统(城市居民医疗统筹)", "sys_id": "116" }, { "sys_name": "财政管理系统(集中支付中心)", "sys_id": "117" }, { "sys_name": "财政管理系统(解困金)", "sys_id": "118" }, { "sys_name": "财政管理系统(旧城改造)", "sys_id": "119" }, { "sys_name": "财政管理系统(社保资金账户)", "sys_id": "120" }, { "sys_name": "财政管理系统(土地出让专帐)", "sys_id": "121" }, { "sys_name": "财政管理系统(预拨及非集中支付中心)", "sys_id": "122" }, { "sys_name": "财政管理系统(预算外资金)", "sys_id": "123" }, { "sys_name": "总预算会计", "sys_id": "124" }, { "sys_name": "财务核算系统", "sys_id": "125" }, { "sys_name": "工资统发系统", "sys_id": "126" }, { "sys_name": "预算编审系统", "sys_id": "127" }, { "sys_name": "预算管理系统", "sys_id": "128" }, { "sys_name": "预算外资金(从联网审计中取数)", "sys_id": "129" }, { "sys_name": "G6-E财务管理系统", "sys_id": "130" }, { "sys_name": "新中大公共财政管理软件", "sys_id": "131" }, { "sys_name": "用友GRP/R9财政管理软件", "sys_id": "132" }, { "sys_name": "用友GRP-U8R10", "sys_id": "133" }, { "sys_name": "财政一体化管理系统(基建户)", "sys_id": "134" }, { "sys_name": "财政一体化管理系统(集中支付中心)", "sys_id": "135" }, { "sys_name": "财政一体化管理系统(农业综合开发)", "sys_id": "136" }, { "sys_name": "财政一体化管理系统(预算外资金)", "sys_id": "137" }, { "sys_name": "财政一体化管理系统(支农专户)", "sys_id": "138" }, { "sys_name": "财政一体化管理系统(总预算)", "sys_id": "139" }, { "sys_name": "国资管理系统", "sys_id": "140" }, { "sys_name": "乡财县管系统", "sys_id": "141" }, { "sys_name": "预算编制管理系统", "sys_id": "142" }, { "sys_name": "盐城市_市本级_部门预算", "sys_id": "143" }, { "sys_name": "盐城市_市本级_非税收管理系统", "sys_id": "144" }, { "sys_name": "盐城市_市本级_预算执行系统", "sys_id": "145" }, { "sys_name": "盐城市_亭湖区_财政专户", "sys_id": "146" }, { "sys_name": "盐城市_亭湖区_非税收入管理", "sys_id": "147" }, { "sys_name": "盐城市_亭湖区_国库集中支付管理", "sys_id": "148" }, { "sys_name": "盐城市_亭湖区_预算指标管理", "sys_id": "149" }, { "sys_name": "盐城市_亭湖区_总预算会计核算", "sys_id": "150" }, { "sys_name": "盐城市_盐都区_财政专户核算系统", "sys_id": "151" }, { "sys_name": "盐城市_盐都区_非税收入管理系统", "sys_id": "152" }, { "sys_name": "盐城市_盐都区_国库集中支付系统", "sys_id": "153" }, { "sys_name": "盐城市_盐都区_总预算会计核算系统", "sys_id": "154" }, { "sys_name": "盐城市_响水县_部门预算管理系统", "sys_id": "155" }, { "sys_name": "盐城市_响水县_财政一体化信息系统", "sys_id": "156" }, { "sys_name": "盐城市_响水县_非税收入收缴管理系统", "sys_id": "157" }, { "sys_name": "盐城市_滨海县财政一体化", "sys_id": "158" }, { "sys_name": "盐城市_阜宁县_财政管理软件", "sys_id": "159" }, { "sys_name": "盐城市_阜宁县_财政管理软件用友U8", "sys_id": "160" }, { "sys_name": "盐城市_射阳县_财政预算执行一体化系统", "sys_id": "161" }, { "sys_name": "盐城市_建湖县_非税收缴", "sys_id": "162" }, { "sys_name": "盐城市_建湖县_财政一体化", "sys_id": "163" }, { "sys_name": "盐城市_建湖县_国库集中支付", "sys_id": "164" }, { "sys_name": "盐城市_东台市_部门预算编审系统", "sys_id": "165" }, { "sys_name": "盐城市_东台市_财政一体化信息系统", "sys_id": "166" }, { "sys_name": "盐城市_东台市_财政专户核算系统", "sys_id": "167" }, { "sys_name": "盐城市_东台市_非税收入收缴管理系统", "sys_id": "168" }, { "sys_name": "盐城市_东台市_总预算会计核算系统", "sys_id": "169" }, { "sys_name": "盐城市_大丰区_部门预算系统", "sys_id": "170" }, { "sys_name": "盐城市_大丰区_财政一体化", "sys_id": "171" }, { "sys_name": "盐城市_大丰区_总预算会计核算财务软件", "sys_id": "172" }, { "sys_name": "盐城市_经济技术开发区_部门预算软件", "sys_id": "173" }, { "sys_name": "盐城市_经济技术开发区_国库集中支付", "sys_id": "174" }, { "sys_name": "老非税收入征缴系统", "sys_id": "175" }, { "sys_name": "扬州财政一体化信息管理系统", "sys_id": "176" }, { "sys_name": "非税收入征收", "sys_id": "177" }, { "sys_name": "部门预算编制", "sys_id": "178" }, { "sys_name": "非税收入收缴", "sys_id": "179" }, { "sys_name": "行政事业性单位国有资产管理", "sys_id": "180" }, { "sys_name": "财政业务系统", "sys_id": "181" }, { "sys_name": "财政业务综合系统", "sys_id": "182" }, { "sys_name": "江都开发区预算执行系统", "sys_id": "183" }, { "sys_name": "财政一体化", "sys_id": "184" }, { "sys_name": "富深协通财政一体化业务管理系统", "sys_id": "185" }, { "sys_name": "富深协通非税收缴系统", "sys_id": "186" }, { "sys_name": "富深协通工资统发系统", "sys_id": "187" }, { "sys_name": "非税收入", "sys_id": "188" }, { "sys_name": "财政综合业务系统", "sys_id": "189" }, { "sys_name": "泰州市_市本级_部门预算系统", "sys_id": "190" }, { "sys_name": "泰州市_市本级_非税收入系统", "sys_id": "191" }, { "sys_name": "泰州市_市本级_绩效管理系统", "sys_id": "192" }, { "sys_name": "泰州市_市本级_预算执行系统", "sys_id": "193" }, { "sys_name": "泰州市_市本级_综合治税系统", "sys_id": "194" }, { "sys_name": "泰州市_海陵区_部门预算编制系统", "sys_id": "195" }, { "sys_name": "泰州市_海陵区_县区财政一体化", "sys_id": "196" }, { "sys_name": "泰州市_高港区_预算执行系统", "sys_id": "197" }, { "sys_name": "泰州市_姜堰区_部门预算系统", "sys_id": "198" }, { "sys_name": "泰州市_姜堰区_财政一体化系统", "sys_id": "199" }, { "sys_name": "泰州市_姜堰区_非税收缴系统", "sys_id": "200" }, { "sys_name": "泰州市_姜堰区_预算执行系统", "sys_id": "201" }, { "sys_name": "泰州市_医药高新区_财政一体化系统", "sys_id": "202" }, { "sys_name": "泰州市_兴化市_部门预算", "sys_id": "203" }, { "sys_name": "泰州市_兴化市_非税收缴", "sys_id": "204" }, { "sys_name": "泰州市_兴化市_国库集中支付", "sys_id": "205" }, { "sys_name": "泰州市_靖江市_预算执行系统", "sys_id": "206" }, { "sys_name": "泰州市_靖江市_非税收入收缴", "sys_id": "207" }, { "sys_name": "泰州市_靖江市_部门预算编审系统", "sys_id": "208" }, { "sys_name": "泰州市_泰兴市_部门预算系统", "sys_id": "209" }, { "sys_name": "泰州市_泰兴市_非税收入管理系统", "sys_id": "210" }, { "sys_name": "泰州市_泰兴市_预算执行系统", "sys_id": "211" }, { "sys_name": "部门预算管理系统", "sys_id": "212" }, { "sys_name": "财政一体化平台及国库集中支付系统", "sys_id": "213" }, { "sys_name": "新中大非税收入管理", "sys_id": "214" }, { "sys_name": "联友财务管理系统", "sys_id": "215" }, { "sys_name": "国库集中支付、指标管理系统", "sys_id": "216" }, { "sys_name": "开发区总预算系统", "sys_id": "217" }, { "sys_name": "国库账务系统", "sys_id": "218" }, { "sys_name": "化学工业园区非税收入管理系统", "sys_id": "219" }, { "sys_name": "非税收入账套", "sys_id": "220" }, { "sys_name": "化学工业园区预算执行系统", "sys_id": "221" }, { "sys_name": "会计核算", "sys_id": "222" }, { "sys_name": "总预算会计账", "sys_id": "223" }, { "sys_name": "预算内外收支核算系统", "sys_id": "224" }, { "sys_name": "账户核算系统", "sys_id": "225" }, { "sys_name": "总预算核算系统", "sys_id": "226" }, { "sys_name": "账务处理系统(收支分类改革升级版)", "sys_id": "227" }, { "sys_name": "财政预算外业务", "sys_id": "228" }, { "sys_name": "用友U8R10财政一体化平台", "sys_id": "229" }, { "sys_name": "开发区财政系统", "sys_id": "230" }, { "sys_name": "高新区总预算系统", "sys_id": "231" }, { "sys_name": "开发区公共财政服务平台", "sys_id": "232" }, { "sys_name": "用友GRP-U8管理软件", "sys_id": "233" }, { "sys_name": "盐城市_城南新区_国库集中支付系统", "sys_id": "234" }, { "sys_name": "盐城市_城南新区_总预算账务处理系统", "sys_id": "235" }, { "sys_name": "财政预算指标管理", "sys_id": "236" }, { "sys_name": "泰州市_市本级_行政管理系统", "sys_id": "237" }, { "sys_name": "新中大财务软件", "sys_id": "238" }, { "sys_name": "开发区新中大财务核算系统", "sys_id": "239" }, { "sys_name": "开发区账务系统", "sys_id": "240" }]; Kubernetes.origin_place_arr = [{ "city_code": "3201", "city": "南京市", "county": "市本级", "county_code": "320100", "sys_name": "部门预算", "sys_code": "BMYS" }, { "city_code": "3201", "city": "南京市", "county": "市本级", "county_code": "320100", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3201", "city": "南京市", "county": "市本级", "county_code": "320100", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3201", "city": "南京市", "county": "市本级", "county_code": "320100", "sys_name": "资产管理系统", "sys_code": "ZCGL" }, { "city_code": "3201", "city": "南京市", "county": "玄武区", "county_code": "320102", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3201", "city": "南京市", "county": "秦淮区", "county_code": "320104", "sys_name": "用友财政综合管理信息系统", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "建邺区", "county_code": "320105", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3201", "city": "南京市", "county": "鼓楼区", "county_code": "320106", "sys_name": "用友A++", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "浦口区", "county_code": "320111", "sys_name": "浦口财政一体化", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "栖霞区", "county_code": "320113", "sys_name": "栖霞区财政业务信息管理系统", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "雨花台区", "county_code": "320114", "sys_name": "一体化系统", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "江宁区", "county_code": "320115", "sys_name": "财政管理一体化系统", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "江宁区", "county_code": "320115", "sys_name": "滨江开发区财政分局", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "江宁区", "county_code": "320115", "sys_name": "江宁经济技术开发区财政分局", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "江宁区", "county_code": "320115", "sys_name": "江宁科学园财政分局", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "六合区", "county_code": "320116", "sys_name": "一体化系统", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "高淳区", "county_code": "320118", "sys_name": "财政一体化系统", "sys_code": "YTH" }, { "city_code": "3201", "city": "南京市", "county": "溧水区", "county_code": "320124", "sys_name": "A++财政一体化平台", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "市本级", "county_code": "320200", "sys_name": "财政一体化系统", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "市本级", "county_code": "320200", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "崇安区", "county_code": "320202", "sys_name": "非税系统", "sys_code": "FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "崇安区", "county_code": "320202", "sys_name": "一体化预算执行系统", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "南长区", "county_code": "320203", "sys_name": "非税系统", "sys_code": "FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "南长区", "county_code": "320203", "sys_name": "一体化", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "北塘区", "county_code": "320204", "sys_name": "国库集中支付管理信息系统", "sys_code": "GKZF" }, { "city_code": "3202", "city": "无锡市", "county": "锡山区", "county_code": "320205", "sys_name": "国库集中支付", "sys_code": "GKZF" }, { "city_code": "3202", "city": "无锡市", "county": "锡山区", "county_code": "320205", "sys_name": "财政专户核算及非税系统", "sys_code": "ZHHS_FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "惠山区", "county_code": "320206", "sys_name": "财政一体化系统", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "滨湖区", "county_code": "320211", "sys_name": "集中支付系统", "sys_code": "GKZF" }, { "city_code": "3202", "city": "无锡市", "county": "滨湖区", "county_code": "320211", "sys_name": "非税系统", "sys_code": "FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "滨湖区", "county_code": "320211", "sys_name": "财政专户核算系统", "sys_code": "ZHHS" }, { "city_code": "3202", "city": "无锡市", "county": "新区", "county_code": "320214", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3202", "city": "无锡市", "county": "新区", "county_code": "320214", "sys_name": "非税收缴系统", "sys_code": "FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "新区", "county_code": "320214", "sys_name": "财政专户核算系统", "sys_code": "ZHHS" }, { "city_code": "3202", "city": "无锡市", "county": "江阴市", "county_code": "320281", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "宜兴市", "county_code": "320282", "sys_name": "非税收缴系统", "sys_code": "FSSR" }, { "city_code": "3202", "city": "无锡市", "county": "宜兴市", "county_code": "320282", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3203", "city": "徐州市", "county": "市本级", "county_code": "320300", "sys_name": "富深预算执行", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "市本级", "county_code": "320300", "sys_name": "用友非税及票据", "sys_code": "FSSR" }, { "city_code": "3203", "city": "徐州市", "county": "市本级", "county_code": "320300", "sys_name": "用友预算执行", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "鼓楼区", "county_code": "320302", "sys_name": "江苏省财政预算执行系统", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "鼓楼区", "county_code": "320302", "sys_name": "用友通用软件", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "云龙区", "county_code": "320303", "sys_name": "江苏省财政预算执行系统", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "云龙区", "county_code": "320303", "sys_name": "联友软件/通用财务", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "云龙区", "county_code": "320303", "sys_name": "用友GRPG-U8R10财政管理软件", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "贾汪区", "county_code": "320305", "sys_name": "用友GPP-R10财政管理软件", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "泉山区", "county_code": "320311", "sys_name": "富深协通财政一体化管理信息系统", "sys_code": "YTH" }, { "city_code": "3203", "city": "徐州市", "county": "铜山区", "county_code": "320312", "sys_name": "财务统一核算系统", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "铜山区", "county_code": "320312", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3203", "city": "徐州市", "county": "铜山区", "county_code": "320312", "sys_name": "公共财政管理软件", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "丰县", "county_code": "320321", "sys_name": "A++财政一体化信息平台", "sys_code": "YTH" }, { "city_code": "3203", "city": "徐州市", "county": "丰县", "county_code": "320321", "sys_name": "新中大公共财务管理软件", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "沛县", "county_code": "320322", "sys_name": "富深财政一体化管理系统", "sys_code": "YTH" }, { "city_code": "3203", "city": "徐州市", "county": "沛县", "county_code": "320322", "sys_name": "新中大公共财政管理系统", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "睢宁县", "county_code": "320324", "sys_name": "富深协通财政一体化业务管理系统软件", "sys_code": "YTH" }, { "city_code": "3203", "city": "徐州市", "county": "睢宁县", "county_code": "320324", "sys_name": "新中大公共财政管理软件Gsoft", "sys_code": "KJHS" }, { "city_code": "3203", "city": "徐州市", "county": "新沂市", "county_code": "320381", "sys_name": "江苏省财政预算执行系统", "sys_code": "YSZX" }, { "city_code": "3203", "city": "徐州市", "county": "邳州", "county_code": "320382", "sys_name": "财政一体化系统", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "本级", "county_code": "320400", "sys_name": "财政一体化业务系统", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "天宁区", "county_code": "320402", "sys_name": "财政一体化软件", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "天宁区", "county_code": "320402", "sys_name": "非税收入系统", "sys_code": "FSSR" }, { "city_code": "3204", "city": "常州市", "county": "天宁区", "county_code": "320402", "sys_name": "总预算系统", "sys_code": "YSZX" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "非税收入系统", "sys_code": "FSSR" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "用款计划系统", "sys_code": "JHGL" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "指标管理系统", "sys_code": "ZBGL" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区", "county_code": "320404", "sys_name": "总预算系统", "sys_code": "ZYS" }, { "city_code": "3204", "city": "常州市", "county": "新北区", "county_code": "320411", "sys_name": "财政综合业务管理平台", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "武进区", "county_code": "320412", "sys_name": "财政一体化管理信息系统", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "部门预算", "sys_code": "BMYS" }, { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "工资统发", "sys_code": "GZTF" }, { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "国有资产", "sys_code": "ZCGL" }, { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "乡镇非税收入", "sys_code": "XZFS" }, { "city_code": "3204", "city": "常州市", "county": "溧阳市", "county_code": "320481", "sys_name": "乡镇集中支付", "sys_code": "XZGK" }, { "city_code": "3204", "city": "常州市", "county": "金坛区", "county_code": "320482", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3205", "city": "苏州市", "county": "市本级", "county_code": "320500", "sys_name": "非税征缴系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "市本级", "county_code": "320500", "sys_name": "预算编制与执行系统", "sys_code": "YSZX" }, { "city_code": "3205", "city": "苏州市", "county": "工业园区", "county_code": "320501", "sys_name": "预算管理综合业务平台", "sys_code": "YSGL" }, { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "u8管理软件", "sys_code": "CZGL" }, { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "财政指标管理系统", "sys_code": "ZBGL" }, { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "用友GRP-R9财务管理软件", "sys_code": "CWGL" }, { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "用友GRP-U8财政管理软件", "sys_code": "CWGL" }, { "city_code": "3205", "city": "苏州市", "county": "虎丘区", "county_code": "320505", "sys_name": "账务处理系统", "sys_code": "ZWCL" }, { "city_code": "3205", "city": "苏州市", "county": "吴中区", "county_code": "320506", "sys_name": "R9i财政管理软件", "sys_code": "CZGL" }, { "city_code": "3205", "city": "苏州市", "county": "吴中区", "county_code": "320506", "sys_name": "部门预算", "sys_code": "BMYS" }, { "city_code": "3205", "city": "苏州市", "county": "吴中区", "county_code": "320506", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "吴中区", "county_code": "320506", "sys_name": "非税系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "相城区", "county_code": "320507", "sys_name": "u8财政管理软件", "sys_code": "CZGL" }, { "city_code": "3205", "city": "苏州市", "county": "相城区", "county_code": "320507", "sys_name": "相城区财政综合管理信息系统", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "姑苏区", "county_code": "320508", "sys_name": "财政非税综合管理系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "姑苏区", "county_code": "320508", "sys_name": "财政综合管理平台", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "吴江区", "county_code": "320509", "sys_name": "吴江区财政一体化", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "常熟市", "county_code": "320581", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "常熟市", "county_code": "320581", "sys_name": "用友R9", "sys_code": "KJHS" }, { "city_code": "3205", "city": "苏州市", "county": "常熟市", "county_code": "320581", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3205", "city": "苏州市", "county": "张家港市", "county_code": "320582", "sys_name": "财政公共应用服务平台", "sys_code": "GGFW" }, { "city_code": "3205", "city": "苏州市", "county": "张家港市", "county_code": "320582", "sys_name": "金蝶K/3创新管理平台", "sys_code": "CZGL" }, { "city_code": "3205", "city": "苏州市", "county": "张家港市", "county_code": "320582", "sys_name": "账务数据系统", "sys_code": "KJHS" }, { "city_code": "3205", "city": "苏州市", "county": "昆山市", "county_code": "320583", "sys_name": "非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "昆山市", "county_code": "320583", "sys_name": "公共财政服务平台", "sys_code": "GGFW" }, { "city_code": "3205", "city": "苏州市", "county": "昆山市", "county_code": "320583", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市", "county_code": "320585", "sys_name": "非税收入系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市", "county_code": "320585", "sys_name": "会计核算系统", "sys_code": "KJHS" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市", "county_code": "320585", "sys_name": "项目库", "sys_code": "XMK" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市", "county_code": "320585", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "本级", "county_code": "320600", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "崇川区", "county_code": "320602", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "财政总预算(外)专户管理系统", "sys_code": "YSWZH" }, { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "城建资金专户管理系统", "sys_code": "CJZH" }, { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "农保专户管理系统", "sys_code": "NBZH" }, { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "农业发展基金专户管理系统", "sys_code": "NFJJ" }, { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "失地农民保障资金专户", "sys_code": "SDNM" }, { "city_code": "3206", "city": "南通市", "county": "港闸区", "county_code": "320611", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "通州区", "county_code": "320612", "sys_name": "非税收入征管系统", "sys_code": "FSSR" }, { "city_code": "3206", "city": "南通市", "county": "通州区", "county_code": "320612", "sys_name": "工资统发人员信息", "sys_code": "GZTF" }, { "city_code": "3206", "city": "南通市", "county": "通州区", "county_code": "320612", "sys_name": "预算指标-国库集中支付系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "通州区", "county_code": "320612", "sys_name": "总预算会计核算系统", "sys_code": "KJHS" }, { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "部门预算编审系统", "sys_code": "BMYS" }, { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "公务消费管理系统", "sys_code": "GWXF" }, { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "国有资产管理系统", "sys_code": "ZCGL" }, { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "区镇财政管理“一体化”系统", "sys_code": "XZYTH" }, { "city_code": "3206", "city": "南通市", "county": "海安县", "county_code": "320621", "sys_name": "县本级财政管理“一体化”系统", "sys_code": "YTH" }, { "city_code": "3206", "city": "南通市", "county": "如东县", "county_code": "320623", "sys_name": "用友政务", "sys_code": "YTH" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(行政口专项资金)", "sys_code": "ZHXZ" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(经建口专项资金)", "sys_code": "ZHJJ" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(农业保险专账)", "sys_code": "ZHNB" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(农业综合开发专账)", "sys_code": "ZHNF" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(社保资金专账)", "sys_code": "ZHSB" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(土地出让专账)", "sys_code": "ZHTD" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "财政专户核算(综合口专项资金)", "sys_code": "ZHZH" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "农业专向及农业发展基金专项", "sys_code": "NFZX" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "启东市", "county_code": "320681", "sys_name": "总预算会计核算", "sys_code": "KJHS" }, { "city_code": "3206", "city": "南通市", "county": "如皋市", "county_code": "320682", "sys_name": "金财工程一体化支撑平台", "sys_code": "YTH" }, { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "非税收缴", "sys_code": "FSSR" }, { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "学校预算执行", "sys_code": "YSZXXX" }, { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "预算执行", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "专项资金", "sys_code": "ZXZJ" }, { "city_code": "3206", "city": "南通市", "county": "海门市", "county_code": "320684", "sys_name": "总预算", "sys_code": "ZYS" }, { "city_code": "3207", "city": "连云港市", "county": "市本级", "county_code": "320700", "sys_name": "部门预算系统", "sys_code": "BMYS" }, { "city_code": "3207", "city": "连云港市", "county": "市本级", "county_code": "320700", "sys_name": "财政专户核算", "sys_code": "ZHHS" }, { "city_code": "3207", "city": "连云港市", "county": "市本级", "county_code": "320700", "sys_name": "非税收入系统", "sys_code": "FSSR" }, { "city_code": "3207", "city": "连云港市", "county": "市本级", "county_code": "320700", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3207", "city": "连云港市", "county": "连云区", "county_code": "320703", "sys_name": "财政专户账务系统", "sys_code": "ZHHS" }, { "city_code": "3207", "city": "连云港市", "county": "连云区", "county_code": "320703", "sys_name": "富深财政一体化管理系统", "sys_code": "YTH" }, { "city_code": "3207", "city": "连云港市", "county": "海州区", "county_code": "320706", "sys_name": "富深财政一体化业务管理系统", "sys_code": "" }, { "city_code": "3207", "city": "连云港市", "county": "海州区", "county_code": "320706", "sys_name": "新中大公共财政管理系统", "sys_code": "" }, { "city_code": "3207", "city": "连云港市", "county": "赣榆区", "county_code": "320721", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3207", "city": "连云港市", "county": "赣榆区", "county_code": "320721", "sys_name": "国有资产系统", "sys_code": "CZGL" }, { "city_code": "3207", "city": "连云港市", "county": "东海县", "county_code": "320722", "sys_name": "部门预算系统", "sys_code": "BMYS" }, { "city_code": "3207", "city": "连云港市", "county": "东海县", "county_code": "320722", "sys_name": "国库专项资金管理系统", "sys_code": "ZXZJ" }, { "city_code": "3207", "city": "连云港市", "county": "东海县", "county_code": "320722", "sys_name": "国有资产管理系统", "sys_code": "ZCGL" }, { "city_code": "3207", "city": "连云港市", "county": "东海县", "county_code": "320722", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3207", "city": "连云港市", "county": "灌云县", "county_code": "320723", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3207", "city": "连云港市", "county": "灌南县", "county_code": "320724", "sys_name": "非税系统", "sys_code": "FSSR" }, { "city_code": "3207", "city": "连云港市", "county": "灌南县", "county_code": "320724", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3208", "city": "淮安市", "county": "市本级", "county_code": "320800", "sys_name": "非税收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3208", "city": "淮安市", "county": "市本级", "county_code": "320800", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(新农保)", "sys_code": "ZHNB" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(城市居民医疗统筹)", "sys_code": "ZHYB" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(集中支付中心)", "sys_code": "GKZF" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(解困金)", "sys_code": "ZHJK" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(旧城改造)", "sys_code": "ZHCG" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(社保资金账户)", "sys_code": "ZHSB" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(土地出让专帐)", "sys_code": "ZHTD" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(预拨及非集中支付中心)", "sys_code": "ZHYB" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "财政管理系统(预算外资金)", "sys_code": "YSW" }, { "city_code": "3208", "city": "淮安市", "county": "清河区", "county_code": "320802", "sys_name": "总预算会计", "sys_code": "KJHS" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "财务核算系统", "sys_code": "KJHS" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "工资统发系统", "sys_code": "GZTF" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "用友政务", "sys_code": "YYZW" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算编审系统", "sys_code": "BMYS" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算管理系统", "sys_code": "YSGL" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算外资金(从联网审计中取数)", "sys_code": "YSW" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算编审系统", "sys_code": "YSBS" }, { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "G6-E财务管理系统", "sys_code": "CWGL" }, { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "江苏省财政预算执行系统", "sys_code": "YSZX" }, { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "新中大公共财政管理软件", "sys_code": "CZGL" }, { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "用友GRP/R9财政管理软件", "sys_code": "CZGL" }, { "city_code": "3208", "city": "淮安市", "county": "淮阴区", "county_code": "320804", "sys_name": "用友GRP-U8R10", "sys_code": "CWGL" }, { "city_code": "3208", "city": "淮安市", "county": "淮安区", "county_code": "320803", "sys_name": "预算编审系统", "sys_code": "YSBS" }, { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(基建户)", "sys_code": "ZHJJ" }, { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(集中支付中心)", "sys_code": "GKZF" }, { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(农业综合开发)", "sys_code": "ZHNF" }, { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(预算外资金)", "sys_code": "YSW" }, { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(支农专户)", "sys_code": "ZHZN" }, { "city_code": "3208", "city": "淮安市", "county": "清浦区", "county_code": "320811", "sys_name": "财政一体化管理系统(总预算)", "sys_code": "KJHS" }, { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "非税征缴系统", "sys_code": "FSSR" }, { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "国资管理系统", "sys_code": "ZCGL" }, { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "乡财县管系统", "sys_code": "XCXG" }, { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "乡财县管系统", "sys_code": "XCXG" }, { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "预算编制管理系统", "sys_code": "YSBS" }, { "city_code": "3208", "city": "淮安市", "county": "涟水县", "county_code": "320826", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3208", "city": "淮安市", "county": "洪泽县", "county_code": "320829", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3208", "city": "淮安市", "county": "洪泽县", "county_code": "320829", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3208", "city": "淮安市", "county": "盱眙县", "county_code": "320830", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3208", "city": "淮安市", "county": "金湖县", "county_code": "320831", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3209", "city": "盐城市", "county": "市本级", "county_code": "320900", "sys_name": "盐城市_市本级_部门预算", "sys_code": "BMYS" }, { "city_code": "3209", "city": "盐城市", "county": "市本级", "county_code": "320900", "sys_name": "盐城市_市本级_非税收管理系统", "sys_code": "FSSR" }, { "city_code": "3209", "city": "盐城市", "county": "市本级", "county_code": "320900", "sys_name": "盐城市_市本级_预算执行系统", "sys_code": "YSZX" }, { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_财政专户", "sys_code": "ZHHS" }, { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_非税收入管理", "sys_code": "FSSR" }, { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_国库集中支付管理", "sys_code": "GKZF" }, { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_预算指标管理", "sys_code": "ZBGL" }, { "city_code": "3209", "city": "盐城市", "county": "亭湖区", "county_code": "320902", "sys_name": "盐城市_亭湖区_总预算会计核算", "sys_code": "KJHS" }, { "city_code": "3209", "city": "盐城市", "county": "盐都区", "county_code": "320903", "sys_name": "盐城市_盐都区_财政专户核算系统", "sys_code": "ZHHS" }, { "city_code": "3209", "city": "盐城市", "county": "盐都区", "county_code": "320903", "sys_name": "盐城市_盐都区_非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3209", "city": "盐城市", "county": "盐都区", "county_code": "320903", "sys_name": "盐城市_盐都区_国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3209", "city": "盐城市", "county": "盐都区", "county_code": "320903", "sys_name": "盐城市_盐都区_总预算会计核算系统", "sys_code": "KJHS" }, { "city_code": "3209", "city": "盐城市", "county": "响水县", "county_code": "320921", "sys_name": "盐城市_响水县_部门预算管理系统", "sys_code": "BMYS" }, { "city_code": "3209", "city": "盐城市", "county": "响水县", "county_code": "320921", "sys_name": "盐城市_响水县_财政一体化信息系统", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "响水县", "county_code": "320921", "sys_name": "盐城市_响水县_非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3209", "city": "盐城市", "county": "滨海县", "county_code": "320922", "sys_name": "盐城市_滨海县财政一体化", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "阜宁县", "county_code": "320923", "sys_name": "盐城市_阜宁县_财政管理软件", "sys_code": "CZGL" }, { "city_code": "3209", "city": "盐城市", "county": "阜宁县", "county_code": "320923", "sys_name": "盐城市_阜宁县_财政管理软件用友U8", "sys_code": "YYZW" }, { "city_code": "3209", "city": "盐城市", "county": "射阳县", "county_code": "320924", "sys_name": "盐城市_射阳县_财政预算执行一体化系统", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "建湖县", "county_code": "320925", "sys_name": "盐城市_建湖县_非税收缴", "sys_code": "FSSR" }, { "city_code": "3209", "city": "盐城市", "county": "建湖县", "county_code": "320925", "sys_name": "盐城市_建湖县_财政一体化", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "建湖县", "county_code": "320925", "sys_name": "盐城市_建湖县_国库集中支付", "sys_code": "GKZF" }, { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_部门预算编审系统", "sys_code": "BMYS" }, { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_财政一体化信息系统", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_财政专户核算系统", "sys_code": "ZHHS" }, { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_非税收入收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3209", "city": "盐城市", "county": "东台市", "county_code": "320981", "sys_name": "盐城市_东台市_总预算会计核算系统", "sys_code": "KJHS" }, { "city_code": "3209", "city": "盐城市", "county": "大丰区", "county_code": "320982", "sys_name": "盐城市_大丰区_部门预算系统", "sys_code": "BMYS" }, { "city_code": "3209", "city": "盐城市", "county": "大丰区", "county_code": "320982", "sys_name": "盐城市_大丰区_财政一体化", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "大丰区", "county_code": "320982", "sys_name": "盐城市_大丰区_总预算会计核算财务软件", "sys_code": "KJHS" }, { "city_code": "3209", "city": "盐城市", "county": "经济技术开发区", "county_code": "320991", "sys_name": "盐城市_经济技术开发区_部门预算软件", "sys_code": "BMYS" }, { "city_code": "3209", "city": "盐城市", "county": "经济技术开发区", "county_code": "320991", "sys_name": "盐城市_经济技术开发区_国库集中支付", "sys_code": "GKZF" }, { "city_code": "3210", "city": "扬州市", "county": "市本级", "county_code": "321000", "sys_name": "财政专户核算", "sys_code": "ZHHS" }, { "city_code": "3210", "city": "扬州市", "county": "市本级", "county_code": "321000", "sys_name": "老非税收入征缴系统", "sys_code": "FSSR" }, { "city_code": "3210", "city": "扬州市", "county": "市本级", "county_code": "321000", "sys_name": "扬州财政一体化信息管理系统", "sys_code": "YTH" }, { "city_code": "3210", "city": "扬州市", "county": "广陵区", "county_code": "321002", "sys_name": "财政一体化系统", "sys_code": "YTH" }, { "city_code": "3210", "city": "扬州市", "county": "广陵区", "county_code": "321002", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3210", "city": "扬州市", "county": "邗江区", "county_code": "321003", "sys_name": "财政一体化系统", "sys_code": "YTH" }, { "city_code": "3210", "city": "扬州市", "county": "邗江区", "county_code": "321003", "sys_name": "非税系统", "sys_code": "FSSR" }, { "city_code": "3210", "city": "扬州市", "county": "邗江区", "county_code": "321003", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3210", "city": "扬州市", "county": "宝应县", "county_code": "321023", "sys_name": "非税收入征收", "sys_code": "FSSR" }, { "city_code": "3210", "city": "扬州市", "county": "宝应县", "county_code": "321023", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3210", "city": "扬州市", "county": "仪征市", "county_code": "321081", "sys_name": "部门预算编制", "sys_code": "BMYS" }, { "city_code": "3210", "city": "扬州市", "county": "仪征市", "county_code": "321081", "sys_name": "非税收入收缴", "sys_code": "FSSR" }, { "city_code": "3210", "city": "扬州市", "county": "仪征市", "county_code": "321081", "sys_name": "行政事业性单位国有资产管理", "sys_code": "ZCGL" }, { "city_code": "3210", "city": "扬州市", "county": "仪征市", "county_code": "321081", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3210", "city": "扬州市", "county": "高邮市", "county_code": "321084", "sys_name": "财政业务系统", "sys_code": "YTH" }, { "city_code": "3210", "city": "扬州市", "county": "江都区", "county_code": "321088", "sys_name": "财政业务综合系统", "sys_code": "ZHYW" }, { "city_code": "3210", "city": "扬州市", "county": "江都区", "county_code": "321088", "sys_name": "江都开发区预算执行系统", "sys_code": "YSZX" }, { "city_code": "3211", "city": "镇江市", "county": "市本级", "county_code": "321100", "sys_name": "财政一体化", "sys_code": "YTH" }, { "city_code": "3211", "city": "镇江市", "county": "京口区", "county_code": "321102", "sys_name": "富深协通财政一体化业务管理系统", "sys_code": "YTH" }, { "city_code": "3211", "city": "镇江市", "county": "京口区", "county_code": "321102", "sys_name": "富深协通非税收缴系统", "sys_code": "FSSR" }, { "city_code": "3211", "city": "镇江市", "county": "京口区", "county_code": "321102", "sys_name": "富深协通工资统发系统", "sys_code": "GZTF" }, { "city_code": "3211", "city": "镇江市", "county": "润州区", "county_code": "321111", "sys_name": "部门预算系统", "sys_code": "BMYS" }, { "city_code": "3211", "city": "镇江市", "county": "润州区", "county_code": "321111", "sys_name": "财政一体化", "sys_code": "YTH" }, { "city_code": "3211", "city": "镇江市", "county": "润州区", "county_code": "321111", "sys_name": "非税收入", "sys_code": "FSSR" }, { "city_code": "3211", "city": "镇江市", "county": "丹徒区", "county_code": "321112", "sys_name": "财政综合业务系统", "sys_code": "YTH" }, { "city_code": "3211", "city": "镇江市", "county": "丹阳市", "county_code": "321181", "sys_name": "部门预算系统", "sys_code": "BMYS" }, { "city_code": "3211", "city": "镇江市", "county": "丹阳市", "county_code": "321181", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3211", "city": "镇江市", "county": "扬中市", "county_code": "321182", "sys_name": "部门预算系统", "sys_code": "BMYS" }, { "city_code": "3211", "city": "镇江市", "county": "扬中市", "county_code": "321182", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3211", "city": "镇江市", "county": "句容市", "county_code": "321183", "sys_name": "非税收入", "sys_code": "FSSR" }, { "city_code": "3211", "city": "镇江市", "county": "句容市", "county_code": "321183", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_部门预算系统", "sys_code": "BMYS" }, { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_非税收入系统", "sys_code": "FSSR" }, { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_绩效管理系统", "sys_code": "JXGL" }, { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_预算执行系统", "sys_code": "YSZX" }, { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_综合治税系统", "sys_code": "ZHZS" }, { "city_code": "3212", "city": "泰州市", "county": "海陵区", "county_code": "321202", "sys_name": "泰州市_海陵区_部门预算编制系统", "sys_code": "BMYS" }, { "city_code": "3212", "city": "泰州市", "county": "海陵区", "county_code": "321202", "sys_name": "泰州市_海陵区_县区财政一体化", "sys_code": "YTH" }, { "city_code": "3212", "city": "泰州市", "county": "高港区", "county_code": "321203", "sys_name": "泰州市_高港区_预算执行系统", "sys_code": "YSZX" }, { "city_code": "3212", "city": "泰州市", "county": "姜堰区", "county_code": "321204", "sys_name": "泰州市_姜堰区_部门预算系统", "sys_code": "BMYS" }, { "city_code": "3212", "city": "泰州市", "county": "姜堰区", "county_code": "321204", "sys_name": "泰州市_姜堰区_财政一体化系统", "sys_code": "YTH" }, { "city_code": "3212", "city": "泰州市", "county": "姜堰区", "county_code": "321204", "sys_name": "泰州市_姜堰区_非税收缴系统", "sys_code": "FSSR" }, { "city_code": "3212", "city": "泰州市", "county": "姜堰区", "county_code": "321204", "sys_name": "泰州市_姜堰区_预算执行系统", "sys_code": "YSZX" }, { "city_code": "3212", "city": "泰州市", "county": "医药高新区", "county_code": "321205", "sys_name": "泰州市_医药高新区_财政一体化系统", "sys_code": "YTH" }, { "city_code": "3212", "city": "泰州市", "county": "兴化市", "county_code": "321281", "sys_name": "泰州市_兴化市_部门预算", "sys_code": "BMYS" }, { "city_code": "3212", "city": "泰州市", "county": "兴化市", "county_code": "321281", "sys_name": "泰州市_兴化市_非税收缴", "sys_code": "FSSR" }, { "city_code": "3212", "city": "泰州市", "county": "兴化市", "county_code": "321281", "sys_name": "泰州市_兴化市_国库集中支付", "sys_code": "GKZF" }, { "city_code": "3212", "city": "泰州市", "county": "靖江市", "county_code": "321282", "sys_name": "泰州市_靖江市_预算执行系统", "sys_code": "YSZX" }, { "city_code": "3212", "city": "泰州市", "county": "靖江市", "county_code": "321282", "sys_name": "泰州市_靖江市_非税收入收缴", "sys_code": "FSSR" }, { "city_code": "3212", "city": "泰州市", "county": "靖江市", "county_code": "321282", "sys_name": "泰州市_靖江市_部门预算编审系统", "sys_code": "BMYS" }, { "city_code": "3212", "city": "泰州市", "county": "泰兴市", "county_code": "321283", "sys_name": "泰州市_泰兴市_部门预算系统", "sys_code": "BMYS" }, { "city_code": "3212", "city": "泰州市", "county": "泰兴市", "county_code": "321283", "sys_name": "泰州市_泰兴市_非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3212", "city": "泰州市", "county": "泰兴市", "county_code": "321283", "sys_name": "泰州市_泰兴市_预算执行系统", "sys_code": "BMYS" }, { "city_code": "3213", "city": "宿迁市", "county": "市本级", "county_code": "321300", "sys_name": "部门预算管理系统", "sys_code": "BMYS" }, { "city_code": "3213", "city": "宿迁市", "county": "市本级", "county_code": "321300", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3213", "city": "宿迁市", "county": "市本级", "county_code": "321300", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3213", "city": "宿迁市", "county": "宿城区", "county_code": "321302", "sys_name": "财政一体化平台及国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3213", "city": "宿迁市", "county": "宿城区", "county_code": "321302", "sys_name": "新中大非税收入管理", "sys_code": "FSSR" }, { "city_code": "3213", "city": "宿迁市", "county": "宿城区", "county_code": "321302", "sys_name": "总预算会计核算系统", "sys_code": "KJHS" }, { "city_code": "3213", "city": "宿迁市", "county": "宿豫区", "county_code": "321311", "sys_name": "非税收缴管理系统", "sys_code": "FSSR" }, { "city_code": "3213", "city": "宿迁市", "county": "宿豫区", "county_code": "321311", "sys_name": "联友财务管理系统", "sys_code": "CWGL" }, { "city_code": "3213", "city": "宿迁市", "county": "宿豫区", "county_code": "321311", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3213", "city": "宿迁市", "county": "沭阳县", "county_code": "321322", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3213", "city": "宿迁市", "county": "沭阳县", "county_code": "321322", "sys_name": "国库集中支付、指标管理系统", "sys_code": "YSZX" }, { "city_code": "3213", "city": "宿迁市", "county": "沭阳县", "county_code": "321322", "sys_name": "开发区总预算系统", "sys_code": "BMYS" }, { "city_code": "3213", "city": "宿迁市", "county": "沭阳县", "county_code": "321322", "sys_name": "总预算会计核算", "sys_code": "KJHS" }, { "city_code": "3213", "city": "宿迁市", "county": "泗阳县", "county_code": "321323", "sys_name": "预算执行", "sys_code": "YSZX" }, { "city_code": "3213", "city": "宿迁市", "county": "泗洪县", "county_code": "321324", "sys_name": "部门预算系统", "sys_code": "BMYS" }, { "city_code": "3213", "city": "宿迁市", "county": "泗洪县", "county_code": "321324", "sys_name": "非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3213", "city": "宿迁市", "county": "泗洪县", "county_code": "321324", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3213", "city": "宿迁市", "county": "泗洪县", "county_code": "321324", "sys_name": "国库账务系统", "sys_code": "KJHS" }, { "city_code": "3201", "city": "南京市", "county": "高新区", "county_code": "320100GXQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3201", "city": "南京市", "county": "化工园区", "county_code": "320100HGY", "sys_name": "化学工业园区非税收入管理系统", "sys_code": "FSSR" }, { "city_code": "3201", "city": "南京市", "county": "经济技术开发区", "county_code": "320100JKQ", "sys_name": "非税收入账套", "sys_code": "FSZT" }, { "city_code": "3201", "city": "南京市", "county": "化工园区", "county_code": "320101HGY", "sys_name": "化学工业园区预算执行系统", "sys_code": "YSZX" }, { "city_code": "3201", "city": "南京市", "county": "经济技术开发区", "county_code": "320101JKQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3201", "city": "南京市", "county": "化工园区", "county_code": "320102HGY", "sys_name": "会计核算", "sys_code": "KYHS" }, { "city_code": "3201", "city": "南京市", "county": "经济技术开发区", "county_code": "320102JKQ", "sys_name": "总预算会计账", "sys_code": "KJHS" }, { "city_code": "3202", "city": "无锡市", "county": "锡山开发区", "county_code": "320205KFQ", "sys_name": "预算内外收支核算系统", "sys_code": "KJHS" }, { "city_code": "3202", "city": "无锡市", "county": "滨湖区马山开发区", "county_code": "320211KFQ", "sys_name": "账户核算系统", "sys_code": "ZHHS" }, { "city_code": "3202", "city": "无锡市", "county": "江阴开发区", "county_code": "320281kfq", "sys_name": "财政一体化平台", "sys_code": "YTH" }, { "city_code": "3202", "city": "无锡市", "county": "江阴开发区", "county_code": "320281kfq", "sys_name": "账户核算系统", "sys_code": "ZHHS" }, { "city_code": "3202", "city": "无锡市", "county": "宜兴环科园", "county_code": "320282KFQ", "sys_name": "财务核算系统", "sys_code": "ZHHS" }, { "city_code": "3202", "city": "无锡市", "county": "宜兴开发区", "county_code": "320282KFQ", "sys_name": "总预算核算系统", "sys_code": "ZHHS" }, { "city_code": "3203", "city": "徐州市", "county": "经济技术开发区", "county_code": "320300JKQ", "sys_name": "富深协通财政一体化业务管理系统软件", "sys_code": "YTH" }, { "city_code": "3203", "city": "徐州市", "county": "经济技术开发区", "county_code": "320300JKQ", "sys_name": "账务处理系统(收支分类改革升级版)", "sys_code": "KJHS" }, { "city_code": "3204", "city": "常州市", "county": "天宁经开区", "county_code": "320402JKQ", "sys_name": "账务处理系统", "sys_code": "KJHS" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区开发区", "county_code": "320404KFQ", "sys_name": "国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区开发区", "county_code": "320405KFQ", "sys_name": "用款计划系统", "sys_code": "JHGL" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区开发区", "county_code": "320406KFQ", "sys_name": "指标管理系统", "sys_code": "ZBGL" }, { "city_code": "3204", "city": "常州市", "county": "钟楼区开发区", "county_code": "320407KFQ", "sys_name": "总预算系统", "sys_code": "ZYS" }, { "city_code": "3204", "city": "常州市", "county": "经开区", "county_code": "320412JKQ", "sys_name": "财政预算外业务", "sys_code": "YSW" }, { "city_code": "3204", "city": "常州市", "county": "经开区", "county_code": "320412JKQ", "sys_name": "非税收缴系统", "sys_code": "FSSR" }, { "city_code": "3204", "city": "常州市", "county": "经开区", "county_code": "320412JKQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3204", "city": "常州市", "county": "武进高新区", "county_code": "320413GXQ", "sys_name": "财政一体化管理信息系统", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "溧阳中关村", "county_code": "320481ZGC", "sys_name": "用友U8R10财政一体化平台", "sys_code": "YTH" }, { "city_code": "3204", "city": "常州市", "county": "溧阳中关村开发区", "county_code": "320481ZGCKF", "sys_name": "用友U8R10财政一体化平台", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "相城区开发区", "county_code": "320507KFQ", "sys_name": "开发区财政系统", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "常熟市高新区", "county_code": "320581GXQ", "sys_name": "高新区总预算系统", "sys_code": "ZYS" }, { "city_code": "3205", "city": "苏州市", "county": "昆山市开发区", "county_code": "320583KFQ", "sys_name": "开发区公共财政服务平台", "sys_code": "YTH" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市新区", "county_code": "320585XQ", "sys_name": "非税收入系统", "sys_code": "FSSR" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市新区", "county_code": "320586XQ", "sys_name": "会计核算系统", "sys_code": "KJHS" }, { "city_code": "3205", "city": "苏州市", "county": "太仓市新区", "county_code": "320587XQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "开发区", "county_code": "320600KFQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "苏通园区", "county_code": "320600STY", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3206", "city": "南通市", "county": "通州湾示范区", "county_code": "320600TZW", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3207", "city": "连云港市", "county": "开发区", "county_code": "320701KFQ", "sys_name": "非税收入", "sys_code": "FSSR" }, { "city_code": "3208", "city": "淮安市", "county": "开发区", "county_code": "320800KFQ", "sys_name": "用友GRP-U8管理软件", "sys_code": "YTH" }, { "city_code": "3209", "city": "盐城市", "county": "城南新区", "county_code": "320900CZXQ", "sys_name": "盐城市_城南新区_国库集中支付系统", "sys_code": "GKZF" }, { "city_code": "3209", "city": "盐城市", "county": "城南新区", "county_code": "320901CZXQ", "sys_name": "盐城市_城南新区_总预算账务处理系统", "sys_code": "KJHS" }, { "city_code": "3210", "city": "扬州市", "county": "化工园区", "county_code": "321000HGY", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3210", "city": "扬州市", "county": "开发区", "county_code": "321000KFQ", "sys_name": "非税收入收缴", "sys_code": "FSSR" }, { "city_code": "3210", "city": "扬州市", "county": "科技新城", "county_code": "321000KJC", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3210", "city": "扬州市", "county": "蜀冈-瘦西湖风景名胜区", "county_code": "321000SXH", "sys_name": "财政预算指标管理", "sys_code": "ZBGL" }, { "city_code": "3210", "city": "扬州市", "county": "蜀冈-瘦西湖风景名胜区", "county_code": "321000SXH", "sys_name": "总预算会计核算", "sys_code": "KJHS" }, { "city_code": "3210", "city": "扬州市", "county": "开发区", "county_code": "321001KFQ", "sys_name": "一体化系统", "sys_code": "YTH" }, { "city_code": "3210", "city": "扬州市", "county": "开发区", "county_code": "321002KFQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3210", "city": "扬州市", "county": "高邮开发区", "county_code": "321084KFQ", "sys_name": "财政业务系统", "sys_code": "YTH" }, { "city_code": "3211", "city": "镇江市", "county": "新区", "county_code": "321100XQ", "sys_name": "财政一体化", "sys_code": "YTH" }, { "city_code": "3212", "city": "泰州市", "county": "市本级", "county_code": "321200", "sys_name": "泰州市_市本级_行政管理系统", "sys_code": "XZGL" }, { "city_code": "3213", "city": "宿迁市", "county": "湖滨新城", "county_code": "321300HBXC", "sys_name": "新中大财务软件", "sys_code": "KJHS" }, { "city_code": "3213", "city": "宿迁市", "county": "经开区", "county_code": "321300JKQ", "sys_name": "新中大公共财政管理软件", "sys_code": "YTH" }, { "city_code": "3213", "city": "宿迁市", "county": "洋河新区", "county_code": "321300YHXQ", "sys_name": "预算执行系统", "sys_code": "YSZX" }, { "city_code": "3213", "city": "宿迁市", "county": "宿豫区开发区", "county_code": "321311KFQ", "sys_name": "开发区新中大财务核算系统", "sys_code": "KJHS" }, { "city_code": "3213", "city": "宿迁市", "county": "泗洪县开发区", "county_code": "321324KFQ", "sys_name": "开发区账务系统", "sys_code": "KJHS" }]; function getCountyByCode(code) { //var jsobj = JSON.parse(origin_place_arr); var jsobj = Kubernetes.origin_place_arr; var jsonlength = jsobj.length; for (var i = 0; i < jsonlength; i++) { if (jsobj[i].county_code == code) { return jsobj[i].city + jsobj[i].county; } } return code; } Kubernetes.getCountyByCode = getCountyByCode; function getCodeByCounty(place) { place = place.replace(/\s*\t*/gim, ""); //var jsobj = JSON.parse(origin_place_arr); var jsobj = Kubernetes.origin_place_arr; var jsonlength = jsobj.length; for (var i = 0; i < jsonlength; i++) { if (jsobj[i].city === "" || jsobj[i].city == undefined) continue; if (jsobj[i].county === "" || jsobj[i].county == undefined) continue; if ((place.indexOf(jsobj[i].city) != -1) && (place.indexOf(jsobj[i].county) != -1)) { return jsobj[i].county_code; } } return place; } Kubernetes.getCodeByCounty = getCodeByCounty; function getSystemNameById(id) { var temJson = Kubernetes.system_arr; var sys_size = temJson.length; for (var i = 0; i < sys_size; i++) { if (temJson[i].sys_id == id) { return temJson[i].sys_name; } } return id; } Kubernetes.getSystemNameById = getSystemNameById; function getIdBySystemName(name) { var temJson = Kubernetes.system_arr; var sys_size = temJson.length; for (var i = 0; i < sys_size; i++) { if (temJson[i].sys_name == name) { return temJson[i].sys_id; } } return name; } Kubernetes.getIdBySystemName = getIdBySystemName; function getCodeBySystemName(name) { var jsobj = Kubernetes.origin_place_arr; var jsonlength = jsobj.length; for (var i = 0; i < jsonlength; i++) { if (jsobj[i].sys_name == name) { return jsobj[i].sys_code; } } return name; } Kubernetes.getCodeBySystemName = getCodeBySystemName; })(Kubernetes || (Kubernetes = {})); /// /// /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.context = '/kubernetes'; Kubernetes.hash = '#' + Kubernetes.context; Kubernetes.defaultRoute = Kubernetes.hash + '/apps'; Kubernetes.pluginName = 'Kubernetes'; Kubernetes.pluginPath = 'plugins/kubernetes/'; Kubernetes.templatePath = Kubernetes.pluginPath + 'html/'; Kubernetes.log = Logger.get(Kubernetes.pluginName); Kubernetes.keepPollingModel = true; Kubernetes.defaultIconUrl = Core.url("/img/kubernetes.svg"); Kubernetes.hostIconUrl = Core.url("/img/host.svg"); // this gets set as a pre-bootstrap task Kubernetes.osConfig = undefined; Kubernetes.masterUrl = ""; Kubernetes.defaultApiVersion = "v1"; Kubernetes.defaultOSApiVersion = "v1"; Kubernetes.labelFilterTextSeparator = ","; Kubernetes.defaultNamespace = "default"; Kubernetes.appSuffix = ".app"; // kubernetes service names Kubernetes.kibanaServiceName = "kibana"; Kubernetes.fabric8ForgeServiceName = "fabric8-forge"; Kubernetes.gogsServiceName = "gogs"; Kubernetes.jenkinsServiceName = "jenkins"; Kubernetes.apimanServiceName = 'apiman'; Kubernetes.isOpenShift = true; Kubernetes.sshSecretDataKeys = ["ssh-key", "ssh-key.pub"]; Kubernetes.httpsSecretDataKeys = ["username", "password"]; function kubernetesNamespacePath() { var ns = currentKubernetesNamespace(); if (ns) { return "/namespaces/" + ns; } else { return ""; } } Kubernetes.kubernetesNamespacePath = kubernetesNamespacePath; function apiPrefix() { var prefix = Core.pathGet(Kubernetes.osConfig, ['api', 'k8s', 'prefix']); if (!prefix) { prefix = 'api'; } return Core.trimLeading(prefix, '/'); } Kubernetes.apiPrefix = apiPrefix; function osApiPrefix() { var prefix = Core.pathGet(Kubernetes.osConfig, ['api', 'openshift', 'prefix']); if (!prefix) { prefix = 'oapi'; } var answer = Core.trimLeading(prefix, '/'); if (!Kubernetes.isOpenShift) { return UrlHelpers.join(apiPrefix(), Kubernetes.defaultOSApiVersion, "proxy", kubernetesNamespacePath(), "services/templates", answer); } return answer; } Kubernetes.osApiPrefix = osApiPrefix; function masterApiUrl() { return Kubernetes.masterUrl || ""; } Kubernetes.masterApiUrl = masterApiUrl; /** WARNING - this excludes the host name - you probably want to use: kubernetesApiUrl() instead!! */ function kubernetesApiPrefix() { return UrlHelpers.join(apiPrefix(), Kubernetes.defaultApiVersion); } Kubernetes.kubernetesApiPrefix = kubernetesApiPrefix; function openshiftApiPrefix() { return UrlHelpers.join(osApiPrefix(), Kubernetes.defaultOSApiVersion); } Kubernetes.openshiftApiPrefix = openshiftApiPrefix; function prefixForType(type) { if (type === Kubernetes.WatchTypes.NAMESPACES) { return kubernetesApiPrefix(); } if (_.any(Kubernetes.NamespacedTypes.k8sTypes, function (t) { return t === type; })) { return kubernetesApiPrefix(); } if (_.any(Kubernetes.NamespacedTypes.osTypes, function (t) { return t === type; })) { return openshiftApiPrefix(); } // lets assume its an OpenShift extension type return openshiftApiPrefix(); } Kubernetes.prefixForType = prefixForType; function kubernetesApiUrl() { return UrlHelpers.join(masterApiUrl(), kubernetesApiPrefix()); } Kubernetes.kubernetesApiUrl = kubernetesApiUrl; function openshiftApiUrl() { return UrlHelpers.join(masterApiUrl(), openshiftApiPrefix()); } Kubernetes.openshiftApiUrl = openshiftApiUrl; function resourcesUriForKind(type, ns) { if (ns === void 0) { ns = null; } if (!ns) { ns = currentKubernetesNamespace(); } return UrlHelpers.join(masterApiUrl(), prefixForType(type), namespacePathForKind(type, ns)); } Kubernetes.resourcesUriForKind = resourcesUriForKind; function uriTemplateForKubernetesKind(type) { var urlTemplate = ''; switch (type) { case Kubernetes.WatchTypes.NAMESPACES: case "Namespaces": urlTemplate = UrlHelpers.join('namespaces'); break; case Kubernetes.WatchTypes.OAUTH_CLIENTS: case "OAuthClients": case "OAuthClient": return UrlHelpers.join('oauthclients'); case Kubernetes.WatchTypes.PROJECTS: case "Projects": urlTemplate = UrlHelpers.join('projects'); break; default: urlTemplate = UrlHelpers.join('namespaces/:namespace', type, ':id'); } return urlTemplate; } Kubernetes.uriTemplateForKubernetesKind = uriTemplateForKubernetesKind; function namespacePathForKind(type, ns) { var urlTemplate = ''; switch (type) { case Kubernetes.WatchTypes.NAMESPACES: case "Namespaces": case "Namespace": return UrlHelpers.join('namespaces'); case Kubernetes.WatchTypes.NODES: case "Nodes": case "node": return UrlHelpers.join('nodes'); case Kubernetes.WatchTypes.PROJECTS: case "Projects": case "Project": return UrlHelpers.join('projects'); case Kubernetes.WatchTypes.OAUTH_CLIENTS: case "OAuthClients": case "OAuthClient": return UrlHelpers.join('oauthclients'); case Kubernetes.WatchTypes.PERSISTENT_VOLUMES: case "PersistentVolumes": case "PersistentVolume": return UrlHelpers.join('persistentvolumes'); default: return UrlHelpers.join('namespaces', ns, type); } } Kubernetes.namespacePathForKind = namespacePathForKind; /** * Returns thevalue from the injector if its available or null */ function inject(name) { var injector = HawtioCore.injector; return injector ? injector.get(name) : null; } Kubernetes.inject = inject; function createResource(thing, urlTemplate, $resource, KubernetesModel) { var prefix = prefixForType(thing); if (!prefix) { Kubernetes.log.debug("Invalid type given: ", thing); return null; } var params = { namespace: currentKubernetesNamespace }; switch (thing) { case Kubernetes.WatchTypes.NAMESPACES: case Kubernetes.WatchTypes.OAUTH_CLIENTS: case Kubernetes.WatchTypes.NODES: case Kubernetes.WatchTypes.PROJECTS: case Kubernetes.WatchTypes.OAUTH_CLIENTS: case Kubernetes.WatchTypes.PERSISTENT_VOLUMES: params = {}; } var url = UrlHelpers.join(masterApiUrl(), prefix, urlTemplate); Kubernetes.log.debug("Url for ", thing, ": ", url); var resource = $resource(url, null, { query: { method: 'GET', isArray: false, params: params }, create: { method: 'POST', params: params }, save: { method: 'PUT', params: params }, delete: { method: 'DELETE', params: _.extend({ id: '@id' }, params) } }); return resource; } Kubernetes.createResource = createResource; function imageRepositoriesRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/imagestreams"); } Kubernetes.imageRepositoriesRestURL = imageRepositoriesRestURL; function deploymentConfigsRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/deploymentconfigs"); } Kubernetes.deploymentConfigsRestURL = deploymentConfigsRestURL; function buildsRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/builds"); } Kubernetes.buildsRestURL = buildsRestURL; function buildConfigHooksRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/buildconfighooks"); } Kubernetes.buildConfigHooksRestURL = buildConfigHooksRestURL; function buildConfigsRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/buildconfigs"); } Kubernetes.buildConfigsRestURL = buildConfigsRestURL; function routesRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/routes"); } Kubernetes.routesRestURL = routesRestURL; function templatesRestURL() { return UrlHelpers.join(openshiftApiUrl(), kubernetesNamespacePath(), "/templates"); } Kubernetes.templatesRestURL = templatesRestURL; function getNamespace(entity) { var answer = Core.pathGet(entity, ["metadata", "namespace"]); return answer ? answer : currentKubernetesNamespace(); } Kubernetes.getNamespace = getNamespace; function getLabels(entity) { var answer = Core.pathGet(entity, ["metadata", "labels"]); return answer ? answer : {}; } Kubernetes.getLabels = getLabels; function getName(entity) { if (angular.isString(entity)) { return entity; } return Core.pathGet(entity, ["metadata", "name"]) || Core.pathGet(entity, "name") || Core.pathGet(entity, "id"); } Kubernetes.getName = getName; function getKind(entity) { return Core.pathGet(entity, ["metadata", "kind"]) || Core.pathGet(entity, "kind"); } Kubernetes.getKind = getKind; function getSelector(entity) { return Core.pathGet(entity, ["spec", "selector"]); } Kubernetes.getSelector = getSelector; function getHost(pod) { return Core.pathGet(pod, ["spec", "host"]) || Core.pathGet(pod, ["spec", "nodeName"]) || Core.pathGet(pod, ["status", "hostIP"]); } Kubernetes.getHost = getHost; function getStatus(pod) { return Core.pathGet(pod, ["status", "phase"]); } Kubernetes.getStatus = getStatus; function getPorts(service) { return Core.pathGet(service, ["spec", "ports"]); } Kubernetes.getPorts = getPorts; function getCreationTimestamp(entity) { return Core.pathGet(entity, ["metadata", "creationTimestamp"]); } Kubernetes.getCreationTimestamp = getCreationTimestamp; ; function getAnnotations(entity) { return Core.pathGet(entity, ["metadata", "annotations"]); } Kubernetes.getAnnotations = getAnnotations; //var fabricDomain = Fabric.jmxDomain; var fabricDomain = "io.fabric8"; Kubernetes.mbean = fabricDomain + ":type=Kubernetes"; Kubernetes.managerMBean = fabricDomain + ":type=KubernetesManager"; Kubernetes.appViewMBean = fabricDomain + ":type=AppView"; function isKubernetes(workspace) { // return workspace.treeContainsDomainAndProperties(fabricDomain, {type: "Kubernetes"}); return true; } Kubernetes.isKubernetes = isKubernetes; function isKubernetesTemplateManager(workspace) { // return workspace.treeContainsDomainAndProperties(fabricDomain, {type: "KubernetesTemplateManager"}); return true; } Kubernetes.isKubernetesTemplateManager = isKubernetesTemplateManager; function isAppView(workspace) { // return workspace.treeContainsDomainAndProperties(fabricDomain, {type: "AppView"}); return true; } Kubernetes.isAppView = isAppView; function getStrippedPathName() { var pathName = Core.trimLeading((this.$location.path() || '/'), "#"); pathName = pathName.replace(/^\//, ''); return pathName; } Kubernetes.getStrippedPathName = getStrippedPathName; function linkContains() { var words = []; for (var _i = 0; _i < arguments.length; _i++) { words[_i - 0] = arguments[_i]; } var pathName = this.getStrippedPathName(); return _.every(words, function (word) { return pathName.indexOf(word) !== 0; }); } Kubernetes.linkContains = linkContains; /** * Returns true if the given link is active. The link can omit the leading # or / if necessary. * The query parameters of the URL are ignored in the comparison. * @method isLinkActive * @param {String} href * @return {Boolean} true if the given link is active */ function isLinkActive(href) { // lets trim the leading slash var pathName = getStrippedPathName(); var link = Core.trimLeading(href, "#"); link = link.replace(/^\//, ''); // strip any query arguments var idx = link.indexOf('?'); if (idx >= 0) { link = link.substring(0, idx); } if (!pathName.length) { return link === pathName; } else { return _.startsWith(pathName, link); } } Kubernetes.isLinkActive = isLinkActive; function setJson($scope, id, collection) { $scope.id = id; if (!$scope.fetched) { return; } if (!id) { $scope.json = ''; return; } if (!collection) { return; } var item = collection.find(function (item) { return getName(item) === id; }); if (item) { $scope.json = angular.toJson(item, true); $scope.item = item; } else { $scope.id = undefined; $scope.json = ''; $scope.item = undefined; } } Kubernetes.setJson = setJson; /** * Returns the labels text string using the key1=value1,key2=value2,.... format */ function labelsToString(labels, seperatorText) { if (seperatorText === void 0) { seperatorText = Kubernetes.labelFilterTextSeparator; } var answer = ""; angular.forEach(labels, function (value, key) { var separator = answer ? seperatorText : ""; answer += separator + key + "=" + value; }); return answer; } Kubernetes.labelsToString = labelsToString; function labelsFormat(replicas) { var annotion = getAnnotations(replicas); var lables = getLabels(replicas); var hasChineseVersion = lables["version"].indexOf("版本") == -1 ? "版本" + lables["version"] : lables["version"]; return { isExtract: lables["isExtract"], isTarget: lables["isTarget"], status: lables["status"], style: lables["style"], cityName: annotion["cityName"], districtName: annotion["districtName"], systemName: annotion["systemName"], year: annotion["year"], version: hasChineseVersion }; } Kubernetes.labelsFormat = labelsFormat; function initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL) { $scope.baseUri = Core.trimTrailing(Core.url("/") || "", "/") || ""; var injector = HawtioCore.injector; function hasService(name) { if (injector) { var ServiceRegistry = injector.get("ServiceRegistry"); if (ServiceRegistry) { return ServiceRegistry.hasService(name); } } return false; } $scope.hasServiceKibana = function () { return hasService(Kubernetes.kibanaServiceName); }; $scope.hasServiceGogs = function () { return hasService(Kubernetes.gogsServiceName); }; $scope.hasServiceForge = function () { return hasService(Kubernetes.fabric8ForgeServiceName); }; $scope.hasServiceApiman = function () { return hasService(Kubernetes.apimanServiceName); }; $scope.viewTemplates = function () { var returnTo = $location.url(); $location.path('/kubernetes/templates').search({ 'returnTo': returnTo }); }; $scope.namespace = $routeParams.namespace || $scope.namespace || KubernetesState.selectedNamespace || Kubernetes.defaultNamespace; if ($scope.namespace != KubernetesState.selectedNamespace) { KubernetesState.selectedNamespace = $scope.namespace; // lets show page is going to reload if ($scope.model) { $scope.model.fetched = false; } } Kubernetes.setCurrentKubernetesNamespace($scope.namespace); $scope.forgeEnabled = isForgeEnabled(); $scope.projectId = $routeParams["project"] || $scope.projectId || $scope.id; var showProjectNavBars = false; if ($scope.projectId && showProjectNavBars) { $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.projectId); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId, null, $scope); } else { $scope.breadcrumbConfig = Developer.createEnvironmentBreadcrumbs($scope, $location, $routeParams); $scope.subTabConfig = Developer.createEnvironmentSubNavBars($scope, $location, $routeParams); } if ($scope.projectId) { $scope.$projectLink = Developer.projectLink($scope.projectId); } $scope.link = function (href) { if (!href) { return href; } if ($scope.$projectLink) { return Developer.namespaceLink($scope, $routeParams, href.replace(/^\/kubernetes/, '')); } else { return href; } }; $scope.codeMirrorOptions = { lineWrapping: true, lineNumbers: true, readOnly: 'nocursor', mode: { name: "javascript", json: true } }; $scope.resizeDialog = { controller: null, newReplicas: 0, dialog: new UI.Dialog(), onOk: function () { var resizeDialog = $scope.resizeDialog; resizeDialog.dialog.close(); resizeController($http, KubernetesApiURL, resizeDialog.controller, resizeDialog.newReplicas, function () { Kubernetes.log.debug("updated number of replicas"); }); }, open: function (controller) { var resizeDialog = $scope.resizeDialog; resizeDialog.controller = controller; resizeDialog.newReplicas = Core.pathGet(controller, ["status", "replicas"]); resizeDialog.dialog.open(); $timeout(function () { $('#replicas').focus(); }, 50); }, close: function () { $scope.resizeDialog.dialog.close(); } }; $scope.triggerBuild = function (buildConfig) { var url = buildConfig.$triggerUrl; console.log("triggering build at url: " + url); if (url) { //var data = {}; var data = null; var config = { headers: { 'Content-Type': "application/json" } }; var name = Core.pathGet(buildConfig, ["metadata", "name"]); Core.notification('info', "Triggering build " + name); $http.post(url, data, config). success(function (data, status, headers, config) { console.log("trigger worked! got data " + angular.toJson(data, true)); // TODO should we show some link to the build Core.notification('info', "Building " + name); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); Core.notification('error', "Failed to trigger build for " + name + ". Returned code: " + status + " " + data); }); } ; }; // update the URL if the filter is changed $scope.$watch("tableConfig.filterOptions.filterText", function (text) { //var filterText = Kubernetes.findValeOfLabels(text); $location.search("q", text); }); $scope.$on("labelFilterUpdate", function ($event, text) { var filterOptions = ($scope.tableConfig || {}).filterOptions || {}; var currentFilter = filterOptions.filterText; if (Core.isBlank(currentFilter)) { filterOptions.filterText = text; } else { var expressions = currentFilter.split(/\s+/); if (expressions.indexOf(text) !== -1) { // lets exclude this filter expression expressions = expressions.remove(text); filterOptions.filterText = expressions.join(" "); } else { filterOptions.filterText = currentFilter + " " + text; } } $scope.id = undefined; }); } Kubernetes.initShared = initShared; /** * Returns the number of pods that are ready */ function readyPodCount(service) { var count = 0; angular.forEach((service || {}).$pods, function (pod) { if (pod.$ready) { count++; } }); return count; } Kubernetes.readyPodCount = readyPodCount; /** * Returns the service link URL for either the service name or the service object */ function serviceLinkUrl(service, httpOnly) { if (httpOnly === void 0) { httpOnly = false; } if (angular.isObject(service)) { var portalIP = service.$host; // lets assume no custom port for now for external routes var port = null; var protocol = "http://"; var spec = service.spec; if (spec) { if (!portalIP) { portalIP = spec.portalIP; } var hasHttps = false; var hasHttp = false; angular.forEach(spec.ports, function (portSpec) { var p = portSpec.port; if (p) { if (p === 443) { hasHttps = true; } else if (p === 80) { hasHttp = true; } if (!port) { port = p; } } }); if (!hasHttps && !hasHttp && port) { // lets treat 8080 as http which is a common service to export if (port === 8080) { hasHttp = true; } else if (port === 8443) { hasHttps = true; } } } if (portalIP) { if (hasHttps) { return "https://" + portalIP; } else if (hasHttp) { return "http://" + portalIP; } else if (!httpOnly) { if (port) { return protocol + portalIP + ":" + port + "/"; } else { return protocol + portalIP; } } } } else if (service) { var serviceId = service.toString(); if (serviceId) { var ServiceRegistry = getServiceRegistry(); if (ServiceRegistry) { return ServiceRegistry.serviceLink(serviceId) || ""; } } } return ""; } Kubernetes.serviceLinkUrl = serviceLinkUrl; /** * Returns the total number of counters for the podCounters object */ function podCounterTotal($podCounters) { var answer = 0; if ($podCounters) { angular.forEach(["ready", "valid", "waiting", "error"], function (name) { var value = $podCounters[name] || 0; answer += value; }); } return answer; } Kubernetes.podCounterTotal = podCounterTotal; /** * Given the list of pods lets iterate through them and find all pods matching the selector * and return counters based on the status of the pod */ function createPodCounters(selector, pods, outputPods, podLinkQuery, podLinkUrl) { if (outputPods === void 0) { outputPods = []; } if (podLinkQuery === void 0) { podLinkQuery = null; } if (podLinkUrl === void 0) { podLinkUrl = null; } if (!podLinkUrl) { podLinkUrl = "/kubernetes/pods"; } var filterFn; if (angular.isFunction(selector)) { filterFn = selector; } else { filterFn = function (pod) { return selectorMatches(selector, getLabels(pod)); }; } var answer = { podsLink: "", ready: 0, valid: 0, waiting: 0, error: 0 }; if (selector) { if (!podLinkQuery) { podLinkQuery = Kubernetes.labelsToString(selector, " "); } answer.podsLink = podLinkUrl + "?q=" + encodeURIComponent(podLinkQuery); angular.forEach(pods, function (pod) { if (filterFn(pod)) { outputPods.push(pod); var status = getStatus(pod); if (status) { var lower = status.toLowerCase(); if (lower.startsWith("run")) { if (isReady(pod)) { answer.ready += 1; } else { answer.valid += 1; } } else if (lower.startsWith("wait") || lower.startsWith("pend")) { answer.waiting += 1; } else if (lower.startsWith("term") || lower.startsWith("error") || lower.startsWith("fail")) { answer.error += 1; } } else { answer.error += 1; } } }); } return answer; } Kubernetes.createPodCounters = createPodCounters; /** * Converts the given json into an array of items. If the json contains a nested set of items then that is sorted; so that services * are processed first; then turned into an array. Otherwise the json is put into an array so it can be processed polymorphically */ function convertKubernetesJsonToItems(json) { var items = json.items; if (angular.isArray(items)) { // TODO we could check for List or Config types here and warn if not // sort the services first var answer = []; items.forEach(function (item) { if (item.kind === "Service") { answer.push(item); } }); items.forEach(function (item) { if (item.kind !== "Service") { answer.push(item); } }); return answer; } else { return [json]; } } Kubernetes.convertKubernetesJsonToItems = convertKubernetesJsonToItems; function isV1beta1Or2() { return Kubernetes.defaultApiVersion === "v1beta1" || Kubernetes.defaultApiVersion === "v1beta2"; } Kubernetes.isV1beta1Or2 = isV1beta1Or2; /** * Returns a link to the detail page for the given entity */ function entityPageLink(obj) { if (obj) { function getLink(entity) { var viewLink = entity["$viewLink"]; if (viewLink) { return viewLink; } var id = getName(entity); var kind = getKind(entity); if (kind && id) { var path = kind.substring(0, 1).toLowerCase() + kind.substring(1) + "s"; var namespace = getNamespace(entity); if (namespace && !isIgnoreNamespaceKind(kind)) { return Core.url(UrlHelpers.join('/kubernetes/namespace', namespace, path, id)); } else { return Core.url(UrlHelpers.join('/kubernetes', path, id)); } } } var baseLink = getLink(obj); if (!HawtioCore.injector || !baseLink) { return baseLink; } var $routeParams = HawtioCore.injector.get('$routeParams'); var projectId = $routeParams['project'] || $routeParams['project']; if (!projectId) { return baseLink; } return UrlHelpers.join(Developer.projectLink(projectId), baseLink.replace(/^\/kubernetes\//, '')); } return null; } Kubernetes.entityPageLink = entityPageLink; function resourceKindToUriPath(kind) { var kindPath = kind.toLowerCase() + "s"; if (kindPath === "replicationControllers" && !isV1beta1Or2()) { kindPath = "replicationcontrollers"; } return kindPath; } Kubernetes.resourceKindToUriPath = resourceKindToUriPath; function isIgnoreNamespaceKind(kind) { return kind === "Host" || kind === "Minion"; } /** * Returns the root URL for the kind */ function kubernetesUrlForKind(KubernetesApiURL, kind, namespace, path) { if (namespace === void 0) { namespace = null; } if (path === void 0) { path = null; } var pathSegment = ""; if (path) { pathSegment = "/" + Core.trimLeading(path, "/"); } var kindPath = resourceKindToUriPath(kind); var ignoreNamespace = isIgnoreNamespaceKind(kind); if (isV1beta1Or2() || ignoreNamespace) { var postfix = ""; if (namespace && !ignoreNamespace) { postfix = "?namespace=" + namespace; } return UrlHelpers.join(KubernetesApiURL, kindPath, pathSegment, postfix); } else { return UrlHelpers.join(KubernetesApiURL, "/namespaces/", namespace, kindPath, pathSegment); } } Kubernetes.kubernetesUrlForKind = kubernetesUrlForKind; ; /** * Returns the base URL for the kind of kubernetes resource or null if it cannot be found */ function kubernetesUrlForItemKind(KubernetesApiURL, json) { var kind = json.kind; if (kind) { return kubernetesUrlForKind(KubernetesApiURL, kind, json.namespace); } else { Kubernetes.log.warn("Ignoring missing kind " + kind + " for kubernetes json: " + angular.toJson(json)); return null; } } Kubernetes.kubernetesUrlForItemKind = kubernetesUrlForItemKind; function kubernetesProxyUrlForService(KubernetesApiURL, service, path) { if (path === void 0) { path = null; } var pathSegment = ""; if (path) { pathSegment = "/" + Core.trimLeading(path, "/"); } else { pathSegment = "/"; } var namespace = getNamespace(service); if (isV1beta1Or2()) { var postfix = "?namespace=" + namespace; return UrlHelpers.join(KubernetesApiURL, "/proxy", kubernetesNamespacePath(), "/services/" + getName(service) + pathSegment + postfix); } else { return UrlHelpers.join(KubernetesApiURL, "/proxy/namespaces/", namespace, "/services/" + getName(service) + pathSegment); } } Kubernetes.kubernetesProxyUrlForService = kubernetesProxyUrlForService; function kubernetesProxyUrlForServiceCurrentNamespace(service, path) { if (path === void 0) { path = null; } var apiPrefix = UrlHelpers.join(kubernetesApiUrl()); return kubernetesProxyUrlForService(apiPrefix, service, path); } Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace = kubernetesProxyUrlForServiceCurrentNamespace; function buildConfigRestUrl(id) { return UrlHelpers.join(buildConfigsRestURL(), id); } Kubernetes.buildConfigRestUrl = buildConfigRestUrl; function deploymentConfigRestUrl(id) { return UrlHelpers.join(deploymentConfigsRestURL(), id); } Kubernetes.deploymentConfigRestUrl = deploymentConfigRestUrl; function imageRepositoryRestUrl(id) { return UrlHelpers.join(imageRepositoriesRestURL(), id); } Kubernetes.imageRepositoryRestUrl = imageRepositoryRestUrl; function buildRestUrl(id) { return UrlHelpers.join(buildsRestURL(), id); } Kubernetes.buildRestUrl = buildRestUrl; function buildLogsRestUrl(id) { return UrlHelpers.join(buildsRestURL(), id, "log"); } Kubernetes.buildLogsRestUrl = buildLogsRestUrl; /** * Runs the given application JSON */ function runApp($location, $scope, $http, KubernetesApiURL, json, name, onSuccessFn, namespace, onCompleteFn) { if (name === void 0) { name = "App"; } if (onSuccessFn === void 0) { onSuccessFn = null; } if (namespace === void 0) { namespace = null; } if (onCompleteFn === void 0) { onCompleteFn = null; } if (json) { if (angular.isString(json)) { json = angular.fromJson(json); } name = name || "App"; var postfix = namespace ? " in namespace " + namespace : ""; Core.notification('info', "Running " + name + postfix); var items = convertKubernetesJsonToItems(json); angular.forEach(items, function (item) { var url = kubernetesUrlForItemKind(KubernetesApiURL, item); if (url) { $http.post(url, item). success(function (data, status, headers, config) { Kubernetes.log.debug("Got status: " + status + " on url: " + url + " data: " + data + " after posting: " + angular.toJson(item)); if (angular.isFunction(onCompleteFn)) { onCompleteFn(); } Core.$apply($scope); }). error(function (data, status, headers, config) { var message = null; if (angular.isObject(data)) { message = data.message; var reason = data.reason; if (reason === "AlreadyExists") { // lets ignore duplicates Kubernetes.log.debug("entity already exists at " + url); return; } } if (!message) { message = "Failed to POST to " + url + " got status: " + status; } Kubernetes.log.warn("Failed to save " + url + " status: " + status + " response: " + angular.toJson(data, true)); Core.notification('error', message); }); } }); } } Kubernetes.runApp = runApp; /** * Returns true if the current status of the pod is running */ function isRunning(podCurrentState) { var status = (podCurrentState || {}).phase; if (status) { var lower = status.toLowerCase(); return lower.startsWith("run"); } else { return false; } } Kubernetes.isRunning = isRunning; /** * Returns true if the labels object has all of the key/value pairs from the selector */ function selectorMatches(selector, labels) { if (angular.isObject(labels)) { var answer = true; var count = 0; angular.forEach(selector, function (value, key) { count++; if (answer && labels[key] !== value) { answer = false; } }); return answer && count > 0; } else { return false; } } Kubernetes.selectorMatches = selectorMatches; /** * Returns the service registry */ function getServiceRegistry() { var injector = HawtioCore.injector; return injector ? injector.get("ServiceRegistry") : null; } Kubernetes.getServiceRegistry = getServiceRegistry; /** * Returns a link to the kibana logs web application */ function kibanaLogsLink(ServiceRegistry) { var link = ServiceRegistry.serviceLink(Kubernetes.kibanaServiceName); if (link) { if (!link.endsWith("/")) { link += "/"; } return link + "#/dashboard/Fabric8"; } else { return null; } } Kubernetes.kibanaLogsLink = kibanaLogsLink; function openLogsForPods(ServiceRegistry, $window, namespace, pods) { var link = kibanaLogsLink(ServiceRegistry); if (link) { var query = ""; var count = 0; angular.forEach(pods, function (item) { var id = getName(item); if (id) { var space = query ? " OR " : ""; count++; query += space + '"' + id + '"'; } }); if (query) { if (count > 1) { query = "(" + query + ")"; } query = 'kubernetes.namespace_name:"' + namespace + '" AND kubernetes.pod_name:' + query; link += "?_a=(query:(query_string:(query:'" + query + "')))"; var newWindow = $window.open(link, "viewLogs"); } } } Kubernetes.openLogsForPods = openLogsForPods; function resizeController($http, KubernetesApiURL, replicationController, newReplicas, onCompleteFn) { if (onCompleteFn === void 0) { onCompleteFn = null; } var id = getName(replicationController); var namespace = getNamespace(replicationController) || ""; var url = kubernetesUrlForKind(KubernetesApiURL, "ReplicationController", namespace, id); $http.get(url). success(function (data, status, headers, config) { if (data) { var desiredState = data.spec; if (!desiredState) { desiredState = {}; data.spec = desiredState; } desiredState.replicas = newReplicas; $http.put(url, data). success(function (data, status, headers, config) { Kubernetes.log.debug("updated controller " + url); if (angular.isFunction(onCompleteFn)) { onCompleteFn(); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to save " + url + " " + data + " " + status); }); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } Kubernetes.resizeController = resizeController; function statusTextToCssClass(text, ready) { if (ready === void 0) { ready = false; } if (text) { var lower = text.toLowerCase(); if (lower.startsWith("run") || lower.startsWith("ok")) { if (!ready) { return "fa fa-spinner fa-spin green"; } return 'fa fa-play-circle green'; } else if (lower.startsWith("wait") || lower.startsWith("pend")) { return 'fa fa-download'; } else if (lower.startsWith("term") || lower.startsWith("error") || lower.startsWith("fail")) { return 'fa fa-off orange'; } else if (lower.startsWith("succeeded")) { return 'fa fa-check-circle-o green'; } } return 'fa fa-question red'; } Kubernetes.statusTextToCssClass = statusTextToCssClass; function podStatus(pod) { return getStatus(pod); } Kubernetes.podStatus = podStatus; function isReady(pod) { var status = pod.status || {}; var answer = false; angular.forEach(status.conditions, function (condition) { var t = condition.type; if (t && t === "Ready") { var status = condition.status; if (status === "True") { answer = true; } } }); return answer; } Kubernetes.isReady = isReady; function createAppViewPodCounters(appView) { var array = []; var map = {}; var pods = appView.pods; var lowestDate = null; angular.forEach(pods, function (pod) { var selector = getLabels(pod); var selectorText = Kubernetes.labelsToString(selector, " "); var answer = map[selector]; if (!answer) { answer = { labelText: selectorText, podsLink: UrlHelpers.join("/kubernetes/namespace/", pod.metadata.namespace, "pods?q=" + encodeURIComponent(selectorText)), valid: 0, waiting: 0, error: 0 }; map[selector] = answer; array.push(answer); } var status = (podStatus(pod) || "Error").toLowerCase(); if (status.startsWith("run") || status.startsWith("ok")) { answer.valid += 1; } else if (status.startsWith("wait") || status.startsWith("pwnd")) { answer.waiting += 1; } else { answer.error += 1; } var creationTimestamp = getCreationTimestamp(pod); if (creationTimestamp) { var d = new Date(creationTimestamp); if (!lowestDate || d < lowestDate) { lowestDate = d; } } }); appView.$creationDate = lowestDate; return array; } Kubernetes.createAppViewPodCounters = createAppViewPodCounters; function createAppViewServiceViews(appView) { var array = []; var pods = appView.pods; angular.forEach(pods, function (pod) { var id = getName(pod); if (id) { var abbrev = id; var idx = id.indexOf("-"); if (idx > 1) { abbrev = id.substring(0, idx); } pod.idAbbrev = abbrev; } pod.statusClass = statusTextToCssClass(podStatus(pod), isReady(pod)); }); var services = appView.services || []; var replicationControllers = appView.replicationControllers || []; var size = Math.max(services.length, replicationControllers.length, 1); var appName = appView.$info.name; for (var i = 0; i < size; i++) { var service = services[i]; var replicationController = replicationControllers[i]; var controllerId = getName(replicationController); var name = getName(service) || controllerId; var address = Core.pathGet(service, ["spec", "portalIP"]); if (!name && pods.length) { name = pods[0].idAbbrev; } if (!appView.$info.name) { appView.$info.name = name; } if (!appView.id && pods.length) { appView.id = getName(pods[0]); } if (i > 0) { appName = name; } var podCount = pods.length; var podCountText = podCount + " pod" + (podCount > 1 ? "s" : ""); var view = { appName: appName || name, name: name, createdDate: appView.$creationDate, podCount: podCount, podCountText: podCountText, address: address, controllerId: controllerId, service: service, replicationController: replicationController, pods: pods }; array.push(view); } return array; } Kubernetes.createAppViewServiceViews = createAppViewServiceViews; /** * converts a git path into an accessible URL for the browser */ function gitPathToUrl(iconPath, branch) { if (branch === void 0) { branch = "master"; } return (HawtioCore.injector.get('AppLibraryURL') || '') + "/git/" + branch + iconPath; } Kubernetes.gitPathToUrl = gitPathToUrl; function asDate(value) { return value ? new Date(value) : null; } function enrichBuildConfig(buildConfig, sortedBuilds) { if (buildConfig) { var triggerUrl = null; var metadata = buildConfig.metadata || {}; var name = metadata.name; buildConfig.$name = name; var projectLink = Developer.projectLink(name); var ns = metadata.namespace || currentKubernetesNamespace(); buildConfig.$namespace = ns; buildConfig.environments = []; buildConfig.$creationDate = asDate(Kubernetes.getCreationTimestamp(buildConfig)); buildConfig.$labelsText = Kubernetes.labelsToString(getLabels(buildConfig)); if (name) { buildConfig.$viewLink = UrlHelpers.join("workspaces", ns, "projects", name, "environments"); buildConfig.$editLink = UrlHelpers.join("workspaces", ns, "projects", name, "buildConfigEdit"); angular.forEach([false, true], function (flag) { angular.forEach(buildConfig.triggers, function (trigger) { if (!triggerUrl) { var type = trigger.type; if (type === "generic" || flag) { var generic = trigger[type]; if (type && generic) { var secret = generic.secret; if (secret) { triggerUrl = UrlHelpers.join(buildConfigHooksRestURL(), name, secret, type); buildConfig.$triggerUrl = triggerUrl; } } } } }); }); // lets find the latest build... if (sortedBuilds) { buildConfig.$lastBuild = _.find(sortedBuilds, { metadata: { labels: { buildconfig: name } } }); } } var $fabric8Views = {}; function defaultPropertiesIfNotExist(name, object, autoCreate) { if (autoCreate === void 0) { autoCreate = false; } var view = $fabric8Views[name]; if (autoCreate && !view) { view = {}; $fabric8Views[name] = view; } if (view) { angular.forEach(object, function (value, property) { var current = view[property]; if (!current) { view[property] = value; } }); } } function defaultPropertiesIfNotExistStartsWith(prefix, object, autoCreate) { if (autoCreate === void 0) { autoCreate = false; } angular.forEach($fabric8Views, function (view, name) { if (view && name.startsWith(prefix)) { angular.forEach(object, function (value, property) { var current = view[property]; if (!current) { view[property] = value; } }); } }); } var labels = metadata.labels || {}; var annotations = metadata.annotations || {}; // lets default the repo and user buildConfig.$user = annotations["fabric8.jenkins/user"] || labels["user"]; buildConfig.$repo = annotations["fabric8.jenkins/repo"] || labels["repo"]; angular.forEach(annotations, function (value, key) { var parts = key.split('/', 2); if (parts.length > 1) { var linkId = parts[0]; var property = parts[1]; if (linkId && property && linkId.startsWith("fabric8.link")) { var link = $fabric8Views[linkId]; if (!link) { link = { class: linkId }; $fabric8Views[linkId] = link; } link[property] = value; } } }); if (buildConfig.$user && buildConfig.$repo) { // browse gogs repo view var gogsUrl = serviceLinkUrl(Kubernetes.gogsServiceName); if (gogsUrl) { defaultPropertiesIfNotExist("fabric8.link.browseGogs.view", { label: "Browse...", url: UrlHelpers.join(gogsUrl, buildConfig.$user, buildConfig.$repo), description: "Browse the source code of this repository", iconClass: "fa fa-external-link" }, true); } // run forge commands view defaultPropertiesIfNotExist("fabric8.link.forgeCommand.view", { label: "Command...", url: UrlHelpers.join(projectLink, "/forge/commands/user", buildConfig.$user, buildConfig.$repo), description: "Perform an action on this project", iconClass: "fa fa-play-circle" }, true); // configure devops view defaultPropertiesIfNotExist("fabric8.link.forgeCommand.devops.settings", { label: "Settings", url: UrlHelpers.join(projectLink, "/forge/command/devops-edit/user", buildConfig.$user, buildConfig.$repo), description: "Configure the DevOps settings for this project", iconClass: "fa fa-pencil-square-o" }, true); } // add some icons and descriptions defaultPropertiesIfNotExist("fabric8.link.repository.browse", { label: "Browse...", description: "Browse the source code of this repository", iconClass: "fa fa-external-link" }); defaultPropertiesIfNotExist("fabric8.link.jenkins.job", { iconClass: "fa fa-tasks", description: "View the Jenkins Job for this build" }); defaultPropertiesIfNotExist("fabric8.link.jenkins.monitor", { iconClass: "fa fa-tachometer", description: "View the Jenkins Monitor dashboard for this project" }); defaultPropertiesIfNotExist("fabric8.link.jenkins.pipeline", { iconClass: "fa fa-arrow-circle-o-right", description: "View the Jenkins Pipeline for this project" }); defaultPropertiesIfNotExist("fabric8.link.letschat.room", { iconClass: "fa fa-comment", description: "Chat room for this project" }); defaultPropertiesIfNotExist("fabric8.link.letschat.room", { iconClass: "fa fa-comment", description: "Chat room for this project" }); defaultPropertiesIfNotExist("fabric8.link.taiga", { iconClass: "fa fa-check-square-o", description: "Issue tracker for this project" }); defaultPropertiesIfNotExist("fabric8.link.issues", { iconClass: "fa fa-check-square-o", description: "Issues for this project" }); defaultPropertiesIfNotExist("fabric8.link.releases", { iconClass: "fa fa-tag", description: "Issues for this project" }); defaultPropertiesIfNotExist("fabric8.link.taiga.team", { iconClass: "fa fa-users", description: "Team members for this project" }); defaultPropertiesIfNotExist("fabric8.link.team", { iconClass: "fa fa-users", description: "Team members for this project" }); defaultPropertiesIfNotExistStartsWith("fabric8.link.environment.", { iconClass: "fa fa-cloud", description: "The kubernetes namespace for this environment" }); // lets put the views into sections... var $fabric8CodeViews = {}; var $fabric8BuildViews = {}; var $fabric8TeamViews = {}; var $fabric8EnvironmentViews = {}; angular.forEach($fabric8Views, function (value, key) { var view; if (key.indexOf("taiga") > 0 || key.indexOf(".issue") > 0 || key.indexOf("letschat") > 0 || key.indexOf(".team") > 0) { view = $fabric8TeamViews; } else if (key.indexOf("jenkins") > 0) { view = $fabric8BuildViews; } else if (key.indexOf(".environment.") > 0) { view = $fabric8EnvironmentViews; } else { view = $fabric8CodeViews; } view[key] = value; }); buildConfig.$fabric8Views = $fabric8Views; buildConfig.$fabric8CodeViews = $fabric8CodeViews; buildConfig.$fabric8BuildViews = $fabric8BuildViews; buildConfig.$fabric8EnvironmentViews = $fabric8EnvironmentViews; buildConfig.$fabric8TeamViews = $fabric8TeamViews; var $jenkinsJob = annotations["fabric8.io/jenkins-job"]; if (!$jenkinsJob && $fabric8Views["fabric8.link.jenkins.job"]) { $jenkinsJob = name; } buildConfig.$jenkinsJob = $jenkinsJob; angular.forEach($fabric8EnvironmentViews, function (env) { var c = env.class; var prefix = "fabric8.link.environment."; if (c && c.startsWith(prefix)) { var ens = c.substring(prefix.length); env.namespace = ens; env.url = UrlHelpers.join("/workspaces", ns, "projects", name, "namespace", ens); } buildConfig.environments.push(env); }); if (!buildConfig.environments.length) { // lets create a single environment var ens = ns; var env = { namespace: ens, label: "Current", description: "The environemnt that this project is built and run inside", iconClass: "fa fa-cloud", url: UrlHelpers.join("/workspaces", ns, "projects", name, "namespace", ens) }; buildConfig.environments.push(env); } buildConfig.environments = buildConfig.environments.reverse(); buildConfig.tools = []; angular.forEach($fabric8CodeViews, function (env) { buildConfig.tools.push(env); }); angular.forEach($fabric8TeamViews, function (env) { buildConfig.tools.push(env); }); } } Kubernetes.enrichBuildConfig = enrichBuildConfig; function enrichBuildConfigs(buildConfigs, sortedBuilds) { if (sortedBuilds === void 0) { sortedBuilds = null; } angular.forEach(buildConfigs, function (buildConfig) { enrichBuildConfig(buildConfig, sortedBuilds); }); return buildConfigs; } Kubernetes.enrichBuildConfigs = enrichBuildConfigs; function enrichBuilds(builds) { angular.forEach(builds, function (build) { enrichBuild(build); }); return _.sortBy(builds, "$creationDate").reverse(); } Kubernetes.enrichBuilds = enrichBuilds; function enrichBuild(build) { if (build) { var metadata = build.metadata || {}; var annotations = metadata.annotations || {}; var name = getName(build); var namespace = getNamespace(build); build.$name = name; build.$namespace = namespace; var nameArray = name.split("-"); var nameArrayLength = nameArray.length; build.$shortName = (nameArrayLength > 4) ? nameArray.slice(0, nameArrayLength - 4).join("-") : name.substring(0, 30); var labels = getLabels(build); var configId = labels.buildconfig; build.$configId = configId; if (configId) { //build.$configLink = UrlHelpers.join("kubernetes/buildConfigs", configId); build.$configLink = UrlHelpers.join("workspaces", currentKubernetesNamespace(), "projects", configId); } var creationTimestamp = getCreationTimestamp(build); if (creationTimestamp) { var d = new Date(creationTimestamp); build.$creationDate = d; } if (name) { //build.$viewLink = UrlHelpers.join("kubernetes/builds", name); var projectLink = UrlHelpers.join("workspaces", currentKubernetesNamespace(), "projects", configId); build.$viewLink = UrlHelpers.join(projectLink, "builds", name); //build.$logsLink = UrlHelpers.join("kubernetes/buildLogs", name); build.$logsLink = UrlHelpers.join(projectLink, "buildLogs", name); } build.podName = build.podName || annotations["openshift.io/build.pod-name"]; var podName = build.podName; if (podName && namespace) { var podNameArray = podName.split("-"); var podNameArrayLength = podNameArray.length; build.$podShortName = (podNameArrayLength > 5) ? podNameArray[podNameArrayLength - 5] : podName.substring(0, 30); build.$podLink = UrlHelpers.join("kubernetes/namespace", namespace, "pods", podName); } } return build; } Kubernetes.enrichBuild = enrichBuild; function enrichDeploymentConfig(deploymentConfig) { if (deploymentConfig) { var triggerUrl = null; var name = Core.pathGet(deploymentConfig, ["metadata", "name"]); deploymentConfig.$name = name; var found = false; angular.forEach(deploymentConfig.triggers, function (trigger) { var type = trigger.type; if (!deploymentConfig.$imageChangeParams && type === "ImageChange") { var imageChangeParams = trigger.imageChangeParams; if (imageChangeParams) { var containerNames = imageChangeParams.containerNames || []; imageChangeParams.$containerNames = containerNames.join(" "); deploymentConfig.$imageChangeParams = imageChangeParams; } } }); } } Kubernetes.enrichDeploymentConfig = enrichDeploymentConfig; function enrichDeploymentConfigs(deploymentConfigs) { angular.forEach(deploymentConfigs, function (deploymentConfig) { enrichDeploymentConfig(deploymentConfig); }); return deploymentConfigs; } Kubernetes.enrichDeploymentConfigs = enrichDeploymentConfigs; function enrichEvent(event) { if (event) { var metadata = event.metadata || {}; var firstTimestamp = event.firstTimestamp; if (firstTimestamp) { var d = new Date(firstTimestamp); event.$firstTimestamp = d; } var lastTimestamp = event.lastTimestamp; if (lastTimestamp) { var d = new Date(lastTimestamp); event.$lastTimestamp = d; } var labels = angular.copy(event.source || {}); var involvedObject = event.involvedObject || {}; var name = involvedObject.name; var kind = involvedObject.kind; if (name) { labels['name'] = name; } if (kind) { labels['kind'] = kind; } event.$labelsText = Kubernetes.labelsToString(labels); } } Kubernetes.enrichEvent = enrichEvent; function enrichEvents(events, model) { if (model === void 0) { model = null; } angular.forEach(events, function (event) { enrichEvent(event); }); // lets update links to the events for each pod and RC if (model) { function clearEvents(entity) { entity.$events = []; entity.$eventsLink = null; entity.$eventCount = 0; } function updateEvent(entity, event) { if (entity) { entity.$events.push(event); if (!entity.$eventsLink) { entity.$eventsLink = UrlHelpers.join("/kubernetes/namespace/", currentKubernetesNamespace(), "events") + "?q=kind%3D" + entity.kind + "%20name%3D" + entity.metadata.name; } entity.$eventCount = entity.$events.length; } } var pods = model.pods || []; var rcs = model.replicationControllers || []; angular.forEach(pods, clearEvents); angular.forEach(rcs, clearEvents); angular.forEach(events, function (event) { var involvedObject = event.involvedObject || {}; var name = involvedObject.name; var kind = involvedObject.kind; var ns = model.currentNamespace(); if (name && kind && ns) { var entity = null; if (kind === "ReplicationController") { entity = model.getReplicationController(ns, name); } else if (kind === "Pod") { entity = model.getPod(ns, name); } if (entity) { updateEvent(entity, event); } } }); } return events; } Kubernetes.enrichEvents = enrichEvents; function enrichImageRepository(imageRepository) { if (imageRepository) { var triggerUrl = null; var name = Core.pathGet(imageRepository, ["metadata", "name"]); imageRepository.$name = name; } } Kubernetes.enrichImageRepository = enrichImageRepository; function enrichImageRepositories(imageRepositories) { angular.forEach(imageRepositories, function (imageRepository) { enrichImageRepository(imageRepository); }); return imageRepositories; } Kubernetes.enrichImageRepositories = enrichImageRepositories; var labelColors = { 'region': 'k8s-badge-region', 'system': 'k8s-badge-system', 'isTarget': 'k8s-badge-target', }; function containerLabelClass(labelType) { if (!(labelType in labelColors)) { return 'mouse-pointer'; } else return labelColors[labelType] + ' mouse-pointer'; } Kubernetes.containerLabelClass = containerLabelClass; /** * Returns true if the fabric8 forge plugin is enabled */ function isForgeEnabled() { // TODO should return true if the service "fabric8-forge" is valid return true; } Kubernetes.isForgeEnabled = isForgeEnabled; /** * Returns the current kubernetes selected namespace or the default one */ function currentKubernetesNamespace() { var injector = HawtioCore.injector; if (injector) { var KubernetesState = injector.get("KubernetesState") || {}; return KubernetesState.selectedNamespace || Kubernetes.defaultNamespace; } return Kubernetes.defaultNamespace; } Kubernetes.currentKubernetesNamespace = currentKubernetesNamespace; function setCurrentKubernetesNamespace(ns) { if (ns) { var KubernetesState = inject("KubernetesState") || {}; KubernetesState.selectedNamespace = ns; } } Kubernetes.setCurrentKubernetesNamespace = setCurrentKubernetesNamespace; /** * Configures the json schema */ function configureSchema() { angular.forEach(Kubernetes.schema.definitions, function (definition, name) { var properties = definition.properties; if (properties) { var hideProperties = ["creationTimestamp", "kind", "apiVersion", "annotations", "additionalProperties", "namespace", "resourceVersion", "selfLink", "uid"]; angular.forEach(hideProperties, function (propertyName) { var property = properties[propertyName]; if (property) { property["hidden"] = true; } }); angular.forEach(properties, function (property, propertyName) { var ref = property["$ref"]; var type = property["type"]; if (ref && (!type || type === "object")) { property["type"] = ref; } if (type === "array") { var items = property["items"]; if (items) { var ref = items["$ref"]; var type = items["type"]; if (ref && (!type || type === "object")) { items["type"] = ref; } } } }); } Kubernetes.schema.definitions.os_build_WebHookTrigger.properties.secret.type = "password"; }); } Kubernetes.configureSchema = configureSchema; /** * Lets remove any enriched data to leave the original json intact */ function unenrich(item) { var o = _.cloneDeep(item); angular.forEach(o, function (value, key) { if (key.startsWith("$") || key.startsWith("_")) { delete o[key]; } }); delete o['connectTo']; return o; } Kubernetes.unenrich = unenrich; /** * Returns the unenriched JSON representation of an object */ function toRawJson(item) { var o = unenrich(item); return JSON.stringify(o, null, 2); // spacing level = 2 } Kubernetes.toRawJson = toRawJson; /** * Returns the unenriched YAML representation of an object */ function toRawYaml(item) { var o = unenrich(item); return jsyaml.dump(o, { indent: 2 }); } Kubernetes.toRawYaml = toRawYaml; function watch($scope, $element, kind, ns, fn, labelSelector) { if (labelSelector === void 0) { labelSelector = null; } var connection = KubernetesAPI.watch({ kind: kind, namespace: ns, labelSelector: labelSelector, success: function (objects) { fn(objects); Core.$apply($scope); } }); $element.on('$destroy', function () { console.log("Static controller[" + kind + ", " + ns + "] element destroyed"); $scope.$destroy(); }); $scope.$on('$destroy', function () { console.log("Static controller[" + kind + ", " + ns + "] scope destroyed"); connection.disconnect(); }); var oldDeleteScopeFn = $scope.deleteScope; $scope.deleteScope = function () { $element.remove(); if (angular.isFunction(oldDeleteScopeFn)) { oldDeleteScopeFn(); } }; } Kubernetes.watch = watch; function createKubernetesClient(kind, ns) { if (ns === void 0) { ns = null; } var K8SClientFactory = inject("K8SClientFactory"); if (!K8SClientFactory) { Kubernetes.log.warn("Could not find injected K8SClientFactory!"); return null; } if (kind === "projects" || kind === "namespaces") { ns = null; } else if (!ns) { ns = Kubernetes.currentKubernetesNamespace(); } return K8SClientFactory.create(kind, ns); } Kubernetes.createKubernetesClient = createKubernetesClient; function currentUserName() { var userDetails = HawtioOAuth.getUserProfile(); var answer = null; if (userDetails) { answer = getName(userDetails); } return answer || "admin"; } Kubernetes.currentUserName = currentUserName; function createNamespace(ns, client) { if (!client) { client = Kubernetes.isOpenShift ? Kubernetes.createKubernetesClient('projects') : Kubernetes.createKubernetesClient('namespaces'); } if (ns && ns !== currentKubernetesNamespace()) { var object = { apiVersion: Kubernetes.defaultApiVersion, kind: Kubernetes.isOpenShift ? 'Project' : 'Namespace', metadata: { name: ns, labels: {} } }; client.put(object, function (data) { Kubernetes.log.info("Created namespace: " + ns); }, function (err) { Kubernetes.log.warn("Failed to create namespace: " + ns + ": " + angular.toJson(err)); }); } } Kubernetes.createNamespace = createNamespace; function createRC(obj, onCompleteFn) { if (onCompleteFn === void 0) { onCompleteFn = null; } var client = Kubernetes.createKubernetesClient('replicationcontrollers', 'default'); var RCTemplate = new Kubernetes.resourceRCTemplate(); var rcTemplate = RCTemplate.createRC(obj); client.put(rcTemplate, function (obj) { if (angular.isFunction(onCompleteFn)) { onCompleteFn(obj); } }, function (err) { console.log(err); }); } Kubernetes.createRC = createRC; function connectOracle($http, $timeout, url, operation, replicas, delayTime) { $timeout(function () { $http({ url: url, method: 'POST', params: { oracleName: getName(replicas), operation: operation }, }).success(function (data, header, config, status) { console.log("success"); }).error(function (data, header, config, status) { //log.warn("Failed to connect " + connectParam + " " + data + " " + status); }); }, delayTime); } Kubernetes.connectOracle = connectOracle; function getOracleStatus(labels) { var answer = -1; if (typeof (labels) === 'object' && labels.hasOwnProperty("status")) { switch (labels.status) { case '0': answer = 0; break; case '1': answer = 1; break; case '2': answer = 2; break; default: answer = -1; } } return answer; } Kubernetes.getOracleStatus = getOracleStatus; function getExtractStatus(labels) { if (labels.isTarget === 'false') { return parseInt(labels.isExtract); } else { return 10; } } Kubernetes.getExtractStatus = getExtractStatus; function getOracleName(replicas) { var annotation = getAnnotations(replicas); return annotation["cityName"] + "-" + annotation["districtName"] + "-" + annotation["systemName"]; } Kubernetes.getOracleName = getOracleName; function extractDataToOracle($http, selectedReplicationControllers, targetOracle, fn) { //console.log(targetReplicationController.length); var answer = targetOracle && true; var inneedOracle = []; selectedReplicationControllers.forEach(function (rc) { var annotations = getAnnotations(rc); answer = answer && checkoutOracleIsRunning(rc); inneedOracle.push({ "name": getName(rc), "ip": getHost(rc.$pods[0]), "port": rc.$pods[0].spec.containers[0].ports[0].hostPort, "dataId": annotations["id"] }); }); if (answer) { var data = { "name": targetOracle.id, "target": targetOracle, "inneed": inneedOracle }; var spinner; $.ajax({ type: "POST", url: UrlHelpers.join("/java/console/api/oracle", targetOracle.id + "", "extract"), timeout: 8000, dataType: 'json', //async: false, data: JSON.stringify(data), contentType: "application/json; charset=utf-8", beforeSend: function () { Configs.create_mask(); //创建遮罩层 create_locadEffect("正在验证汇总库配置信息,请稍等!"); //创建数据加载效果层 var target = document.getElementById('loading'); spinner = new Spinner(loadConfigs()).spin(target); }, complete: function (XMLHttpRequest, textStatus) { if (XMLHttpRequest.status == 200) { //spinner.spin(); Kubernetes.createSuccessInfo("succes", "连接汇总库成功,即将执行汇总操作!"); setTimeout("Kubernetes.removeMask()", 1500); } else { //spinner.spin(); Kubernetes.createSuccessInfo("error", "连接汇总库失败,请检查服务集群中的汇总库配置是否正确!"); setTimeout("Kubernetes.removeMask()", 1500); } } }); } else { //alert("您选择的汇总数据库或需要汇总的数据库中存在未启动成功的数据库,导致汇总操作失败,请重新选择!"); Configs.customAlert("提示", "操作失败:需要汇总的数据库中存在未启动成功的数据库!", '', null, 0, "error"); } } Kubernetes.extractDataToOracle = extractDataToOracle; function checkoutOracleIsRunning(rc) { if (rc.$podCounters.ready && rc.$oracleStatus == 2) { return true; } else { return false; } } Kubernetes.checkoutOracleIsRunning = checkoutOracleIsRunning; function replicasIsCreated(replicationcontrollers, name) { var result = false; if (replicationcontrollers != null || replicationcontrollers.length <= 0) { for (var i = 0; i < replicationcontrollers.length; i++) { if (getName(replicationcontrollers[i]) === name) { result = true; break; } } } return result; } Kubernetes.replicasIsCreated = replicasIsCreated; function loadConfigs() { return { lines: 9, length: 0, width: 13, radius: 38, scale: 1, corners: 1, color: '#ffffff', opacity: 0, rotate: 90, direction: 1, speed: 0.5, trail: 50, zIndex: 1000000002, className: 'spinner', top: '40%', left: '50%', shadow: false, hwaccel: false, position: 'absolute' }; } Kubernetes.loadConfigs = loadConfigs; /* 创建加载效果层 */ function create_locadEffect(msg) { var tmp = "
" + "" + msg + ""; var load = document.createElement("div"); load.id = "load"; load.innerHTML = tmp; document.body.appendChild(load); $("#load").addClass("load-effect-msg"); } Kubernetes.create_locadEffect = create_locadEffect; function createSuccessInfo(icon, msg) { $("#load").remove(); Configs.customAlert("提示", msg, '', null, 0, icon); /*var tmp = "
" + "" + msg +""; var result = document.createElement("div"); result.id = "exe_result"; result.innerHTML = tmp; document.body.appendChild(result);*/ } Kubernetes.createSuccessInfo = createSuccessInfo; function removeMask() { var mask = document.getElementById("mask"); //var result = document.getElementById("exe_result"); if (null == mask) return; document.body.removeChild(mask); //document.body.removeChild(result); } Kubernetes.removeMask = removeMask; })(Kubernetes || (Kubernetes = {})); /// /// var Developer; (function (Developer) { Developer.context = '/workspaces'; Developer.hash = '#' + Developer.context; Developer.pluginName = 'Developer'; Developer.pluginPath = 'plugins/developer/'; Developer.templatePath = Developer.pluginPath + 'html/'; Developer.log = Logger.get(Developer.pluginName); Developer.jenkinsServiceName = "jenkins"; Developer.jenkinsServiceNameAndPort = Developer.jenkinsServiceName + ":http"; Developer.jenkinsHttpConfig = { headers: { Accept: "application/json, text/x-json, text/plain" } }; /** * Returns true if the value hasn't changed from the last cached JSON version of this object */ function hasObjectChanged(value, state) { var json = angular.toJson(value || ""); var oldJson = state.json; state.json = json; return !oldJson || json !== oldJson; } Developer.hasObjectChanged = hasObjectChanged; function projectForScope($scope) { if ($scope) { return $scope.buildConfig || $scope.entity || ($scope.model || {}).project; } return null; } Developer.projectForScope = projectForScope; /** * Lets load the project versions for the given namespace */ function loadProjectVersions($scope, $element, project, env, ns, answer, caches) { var projectAnnotation = "project"; var versionAnnotation = "version"; var projectNamespace = project.$namespace; var projectName = project.$name; var cache = caches[ns]; if (!cache) { cache = {}; caches[ns] = cache; } var status = { rcs: [], pods: [], routes: [], services: [] }; var imageStreamTags = []; function updateModel() { var projectInfos = {}; var model = $scope.model || {}; angular.forEach(status.rcs, function (item) { var metadata = item.metadata || {}; var name = metadata.name; var labels = metadata.labels || {}; var annotations = metadata.annotations || {}; var spec = item.spec || {}; var selector = spec.selector; var project = labels[projectAnnotation]; var version = labels[versionAnnotation]; // lets try the S2I defaults... if (!project) { project = labels["app"]; } if (!version) { version = annotations["openshift.io/deployment-config.latest-version"]; } if (project && version && project === projectName) { var projects = projectInfos[project]; if (!projects) { projects = { project: project, versions: {} }; projectInfos[project] = projects; } var versionInfo = projects.versions[version]; if (!versionInfo) { versionInfo = { replicationControllers: {} }; projects.versions[version] = versionInfo; } if (name) { versionInfo.replicationControllers[name] = item; item.$name = name; if (projectNamespace && projectName) { item.$viewLink = UrlHelpers.join("/workspaces/", projectNamespace, "projects", projectName, "namespace", ns, "replicationControllers", name); } else { Developer.log.warn("Missing project data! " + projectNamespace + " name " + projectName); } item.$services = []; var rcLink = null; status.services.forEach(function (service) { var repSelector = Kubernetes.getSelector(item); var serviceSelector = Kubernetes.getSelector(service); if (serviceSelector && repSelector && Kubernetes.selectorMatches(serviceSelector, repSelector) && Kubernetes.getNamespace(service) === Kubernetes.getNamespace(item)) { status.routes.forEach(function (route) { var serviceName = Kubernetes.getName(service); if (serviceName === Kubernetes.getName(route)) { service["$route"] = route; service["$host"] = Core.pathGet(route, ["spec", "host"]); item.$services.push(service); if (!rcLink) { var url = Kubernetes.serviceLinkUrl(service, true); if (url) { // TODO find icon etc? rcLink = { name: serviceName, href: url }; } } } }); } }); item["$serviceLink"] = rcLink; } item.$buildId = annotations["fabric8.io/build-id"] || item.$buildId; item.$buildUrl = annotations["fabric8.io/build-url"] || item.$buildUrl; item.$gitCommit = annotations["fabric8.io/git-commit"] || item.$gitCommit; item.$gitUrl = annotations["fabric8.io/git-url"] || item.$gitUrl; item.$gitBranch = annotations["fabric8.io/git-branch"] || item.$gitBranch; if (!item.$gitCommit) { var image = getImage(item); if (image) { if (!$scope.$isWatchImages) { $scope.$isWatchImages = true; Kubernetes.watch($scope, $element, "images", null, function (data) { imageStreamTags = data; checkForMissingMetadata(); }); } else { checkForMissingMetadata(); } } function getImage(item) { var image = ""; // lets see if we can find the commit id from a S2I image name // TODO needs this issue fixed to find it via an OpenShift annotation: // https://github.com/openshift/origin/issues/6241 var containers = Core.pathGet(item, ["spec", "template", "spec", "containers"]); if (containers && containers.length) { var container = containers[0]; if (container) { image = container.image; } } return image; } function checkForMissingMetadata() { angular.forEach(projects.versions, function (vi) { angular.forEach(vi.replicationControllers, function (item, name) { if (!item.$gitCommit) { var image = getImage(item); if (image) { angular.forEach(imageStreamTags, function (imageStreamTag) { var imageName = imageStreamTag.dockerImageReference; if (imageName && imageName === image) { var foundISTag = imageStreamTag; var manifestJSON = imageStreamTag.dockerImageManifest; if (manifestJSON) { var manifest = angular.fromJson(manifestJSON) || {}; var history = manifest.history; if (history && history.length) { var v1 = history[0].v1Compatibility; if (v1) { var data = angular.fromJson(v1); var env = Core.pathGet(data, ["config", "Env"]); angular.forEach(env, function (envExp) { if (envExp) { var values = envExp.split("="); if (values.length === 2 && values[0] == "OPENSHIFT_BUILD_NAME") { var buildName = values[1]; if (buildName) { item.$buildId = buildName; item.$buildUrl = Developer.projectWorkspaceLink(ns, projectName, "buildLogs/" + buildName); } } } }); var labels = Core.pathGet(data, ["config", "Labels"]); if (labels) { item.$gitCommit = labels["io.openshift.build.commit.id"] || item.$gitCommit; item.$gitCommitAuthor = labels["io.openshift.build.commit.author"] || item.$gitCommitAuthor; item.$gitCommitDate = labels["io.openshift.build.commit.date"] || item.$gitCommitDate; item.$gitCommitMessage = labels["io.openshift.build.commit.message"] || item.$gitCommitMessage; item.$gitBranch = labels["io.openshift.build.commit.ref"] || item.$gitBranch; if (!item.$gitUrl && item.$gitCommit) { item.$gitUrl = Developer.projectWorkspaceLink(ns, projectName, "wiki/commitDetail///" + item.$gitCommit); } } } } } } }); } } }); }); } } if (selector) { var selectorText = Kubernetes.labelsToString(selector, ","); var podLinkUrl = UrlHelpers.join(Developer.projectLink(projectName), "namespace", ns, "pods"); item.pods = []; item.$podCounters = Kubernetes.createPodCounters(selector, status.pods, item.pods, selectorText, podLinkUrl); } } }); // lets check for a project name if we have lots of RCs with no pods, lets remove them! angular.forEach(projectInfos, function (project, projectName) { var rcsNoPods = []; var rcsWithPods = []; angular.forEach(project.versions, function (versionInfo) { var rcs = versionInfo.replicationControllers; angular.forEach(rcs, function (item, name) { var count = Kubernetes.podCounterTotal(item.$podCounters); if (count) { rcsWithPods.push(name); } else { rcsNoPods.push(function () { delete rcs[name]; }); } }); }); if (rcsWithPods.length) { // lets remove all the empty RCs angular.forEach(rcsNoPods, function (fn) { fn(); }); } }); if (hasObjectChanged(projectInfos, cache)) { Developer.log.debug("project versions has changed!"); answer[ns] = projectInfos; } } Kubernetes.watch($scope, $element, "replicationcontrollers", ns, function (data) { if (data) { status.rcs = data; updateModel(); } }); Kubernetes.watch($scope, $element, "services", ns, function (data) { if (data) { status.services = data; updateModel(); } }); Kubernetes.watch($scope, $element, "routes", ns, function (data) { if (data) { status.routes = data; updateModel(); } }); Kubernetes.watch($scope, $element, "pods", ns, function (data) { if (data) { status.pods = data; updateModel(); } }); } Developer.loadProjectVersions = loadProjectVersions; })(Developer || (Developer = {})); /// /// /// var Developer; (function (Developer) { var log = Logger.get('developer-navigation'); function createCurrentSubNavBar($scope, $location, $routeParams) { return Developer.activateCurrent([ { href: UrlHelpers.join(Developer.context, "Overview", "cold/data-type/all"), label: "冷区数据管理", title: "数据汇总任务", items: [{ href: UrlHelpers.join(Developer.context, "Overview", "cold/data-type/all"), label: "全部", title: "全部数据" }, { href: UrlHelpers.join(Developer.context, "Overview", "cold/data-type/financial"), label: "财政", title: "财政数据" }, { href: UrlHelpers.join(Developer.context, "Overview/", "cold/data-type/social-security"), label: "社保", title: "社保数据" }] }, { href: UrlHelpers.join(Developer.context, "Overview", "hot/data-type/all"), label: "热区数据管理", title: "查看所有数据", items: [{ href: UrlHelpers.join(Developer.context, "Overview", "hot/data-type/all"), label: "全部", title: "全部数据" }, { href: UrlHelpers.join(Developer.context, "Overview", "hot/data-type/financial"), label: "财政", title: "财政数据" }, { href: UrlHelpers.join(Developer.context, "Overview/", "hot/data-type/social-security"), label: "社保", title: "社保数据" }] }, { href: UrlHelpers.join(Developer.context, "Overview/", "task"), label: "任务", title: "任务查看" }, ]); } Developer.createCurrentSubNavBar = createCurrentSubNavBar; })(Developer || (Developer = {})); /// /// /// /// /// var Configs; (function (Configs) { var OperateType = (function () { function OperateType() { } Object.defineProperty(OperateType, "DELETE", { get: function () { return "delete"; }, enumerable: true, configurable: true }); Object.defineProperty(OperateType, "UPDATE", { get: function () { return "update"; }, enumerable: true, configurable: true }); Object.defineProperty(OperateType, "PUT", { get: function () { return "put"; }, enumerable: true, configurable: true }); Object.defineProperty(OperateType, "MOVE", { get: function () { return "move"; }, enumerable: true, configurable: true }); Object.defineProperty(OperateType, "EXTRACT", { get: function () { return "extract"; }, enumerable: true, configurable: true }); return OperateType; }()); Configs.OperateType = OperateType; Configs._module.controller('Configs.MenuItemController', ['$scope', '$location', function ($scope, $location) { $scope.menuItem = [{ icon: "glyphicon glyphicon-cloud-upload", label: "数据管理配置", title: "配置数据存储信息", href: UrlHelpers.join(Configs.context, "/gluster-fs/setting") }, { icon: "glyphicon glyphicon-th-list", label: "服务集群配置", title: "配置服务集群信息", href: UrlHelpers.join(Configs.context, "/kube-cluster/setting") }]; }]); function createConfigBreadcrumbs($scope, $location, $routeParams) { var url = $location.url(); var label, title; switch (url) { case "/config/gluster-fs/setting": label = "数据管理配置"; title = "配置数据存储信息"; break; case "/config/kube-cluster/setting": label = "服务集群配置"; title = "配置服务集群信息"; break; default: break; } return Developer.activateCurrent([{ href: url, label: label, title: title //item.title }]); } function createOracleInfo(array, id) { var result = { "id": id }; angular.forEach(array, function (arr) { result[arr.field] = arr.value; }); return result; } Configs.createOracleInfo = createOracleInfo; function shareInit($scope, $location, $routeParams) { $scope.subTabConfig = Developer.createCurrentSubNavBar($scope, $location, $routeParams); $scope.mask = true; /** 创建全屏遮挡 */ $("#mask").css("position", "absolute"); $("#mask").css("background", "black"); $("#mask").css("opacity", 0.4); $("#mask").css("filter", "progid:DXImageTransform.Microsoft.Alpha(style=4,opacity=25)"); $("#mask").css("top", "0px"); $("#mask").css("left", "0px"); $("#mask").css("width", document.body.clientWidth + document.body.scrollLeft); $("#mask").css("height", document.body.clientHeight + document.body.scrollTop); $("#mask").css("zIndex", 1000); } Configs.shareInit = shareInit; function createNewObejct(array, obj) { var result = []; if (obj) { angular.forEach(array, function (arr) { result.push({ field: arr.field, name: arr.displayName, value: obj[arr.field] }); }); } else { angular.forEach(array, function (arr) { result.push({ field: arr.field, name: arr.displayName, value: null }); }); } return result; } Configs.createNewObejct = createNewObejct; function oracleInfoOperate($http, url, operate, resource, fn) { if (resource === null) throw "不能操作空资源对象"; var id = resource["id"] || resource["name"] || resource["_id"] || resource["_key"]; var RESTfulUrl = url; if (id == "undefined") { RESTfulUrl = UrlHelpers.join(url, operate); } else { RESTfulUrl = UrlHelpers.join(url, id + "", operate); } $http({ method: "POST", dataType: 'json', url: RESTfulUrl, data: JSON.stringify(resource), }).success(function (data, header, config, status) { if (angular.isFunction(fn)) fn(data, header); }).error(function (data, header, config, status) { if (angular.isFunction(fn)) fn(data, header); }); } Configs.oracleInfoOperate = oracleInfoOperate; function createConfigHelperNavBar($scope, $location, $routeParams) { return Developer.activateCurrent([ { href: UrlHelpers.join(Configs.context, "regionalism-code/searching"), label: "行政区划检索", title: "检索行政区划代码" }, { href: UrlHelpers.join(Configs.context, "system-code/searching"), label: "系统编码检索", title: "检索系统编码" } ]); } Configs.createConfigHelperNavBar = createConfigHelperNavBar; function formatVolume(volume) { var brick = []; angular.forEach(volume.brick, function (block) { brick.push({ ip: block.ip.split("."), status: block.status, path: block.path, editable: block.editable || false }); }); return { name: volume.name, path: volume.path, brick: brick, status: volume.status, editable: volume.editable || false }; } Configs.formatVolume = formatVolume; function volumesFormat(volumes) { var result = []; angular.forEach(volumes, function (volume) { result.push(formatVolume(volume)); }); return result; } Configs.volumesFormat = volumesFormat; })(Configs || (Configs = {})); /// var Configs; (function (Configs) { function removeElementByValue(array, value, key) { if (key) { for (var i = 0; i < array.length; i++) { if (array[i][key] === value) { array.splice(i, 1); break; } } } else { for (var i = 0; i < array.length; i++) { if (array[i] === value) { array.splice(i, 1); break; } } } } Configs.removeElementByValue = removeElementByValue; function removeElementsByValue(array, elements) { angular.forEach(elements, function (element) { removeElementByValue(array, element.value, element.key); }); } Configs.removeElementsByValue = removeElementsByValue; /** 对象的深拷贝 */ function deepCopy(object) { var n, i; if (object instanceof Array) { n = []; for (i = 0; i < object.length; ++i) { n[i] = deepCopy(object[i]); } return n; } else if (object instanceof Object) { n = {}; for (i in object) { n[i] = deepCopy(object[i]); } return n; } else { return object; } } Configs.deepCopy = deepCopy; })(Configs || (Configs = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes._module = angular.module(Kubernetes.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'ui.validate', 'kubernetesUI']); Kubernetes.controller = PluginHelpers.createControllerFunction(Kubernetes._module, Kubernetes.pluginName); Kubernetes.route = PluginHelpers.createRoutingFunction(Kubernetes.templatePath); Kubernetes._module.config(['$routeProvider', function ($routeProvider) { $routeProvider .when(UrlHelpers.join(Kubernetes.context, '/pods'), Kubernetes.route('pods.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'replicationControllers'), Kubernetes.route('replicationControllers.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'services'), Kubernetes.route('services.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'events'), Kubernetes.route('events.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'apps'), Kubernetes.route('apps.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'apps/:namespace'), Kubernetes.route('apps.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'templates'), Kubernetes.route('templates.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'hosts'), Kubernetes.route('hosts.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'hosts/:id'), Kubernetes.route('host.html', true)) .when(UrlHelpers.join(Kubernetes.context, 'pipelines'), Kubernetes.route('pipelines.html', false)) .when(UrlHelpers.join(Kubernetes.context, 'overview'), Kubernetes.route('overview.html', true)) .when(Kubernetes.context, { redirectTo: UrlHelpers.join(Kubernetes.context, 'replicationControllers') }); angular.forEach([Kubernetes.context, "/workspaces/:workspace/projects/:project"], function (context) { $routeProvider .when(UrlHelpers.join(context, '/namespace/:namespace/podCreate'), Kubernetes.route('podCreate.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/podEdit/:id'), Kubernetes.route('podEdit.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/pods'), Kubernetes.route('pods.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/pods/:id'), Kubernetes.route('pod.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllers'), Kubernetes.route('replicationControllers.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllers/:id'), Kubernetes.route('replicationController.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllerCreate'), Kubernetes.route('replicationControllerCreate.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/replicationControllerEdit/:id'), Kubernetes.route('replicationControllerEdit.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/secrets'), Kubernetes.route('secrets.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/secrets/:id'), Kubernetes.route('secret.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/secretCreate'), Kubernetes.route('secret.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/services'), Kubernetes.route('services.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/services/:id'), Kubernetes.route('service.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/serviceCreate'), Kubernetes.route('serviceCreate.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/serviceEdit/:id'), Kubernetes.route('serviceEdit.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/events'), Kubernetes.route('events.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/apps'), Kubernetes.route('apps.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace/overview'), Kubernetes.route('overview.html', true)) .when(UrlHelpers.join(context, '/namespace/:namespace/templates/:targetNamespace'), Kubernetes.route('templates.html', false)) .when(UrlHelpers.join(context, '/namespace/:namespace'), Kubernetes.route('apps.html', false)) .when(UrlHelpers.join(context, 'builds'), Kubernetes.route('builds.html', false)) .when(UrlHelpers.join(context, 'builds/:id'), Kubernetes.route('build.html', true)) .when(UrlHelpers.join(context, 'buildLogs/:id'), Kubernetes.route('buildLogs.html', true)) .when(UrlHelpers.join(context, 'buildConfigs'), Kubernetes.route('buildConfigs.html', false)) .when(UrlHelpers.join(context, 'buildConfigs/:id'), Kubernetes.route('buildConfig.html', true)) .when(UrlHelpers.join(context, 'buildConfigEdit/:id'), Kubernetes.route('buildConfigEdit.html', true)) .when(UrlHelpers.join(context, 'deploymentConfigs'), Kubernetes.route('deploymentConfigs.html', false)) .when(UrlHelpers.join(context, 'deploymentConfigs/:id'), Kubernetes.route('deploymentConfig.html', true)) .when(UrlHelpers.join(context, 'imageRepositories'), Kubernetes.route('imageRepositories.html', false)); }); angular.forEach([Kubernetes.context, "/workspaces/:workspace", "/workspaces/:workspace/projects/:project"], function (context) { $routeProvider .when(UrlHelpers.join(context, 'buildConfigEdit'), Kubernetes.route('buildConfigEdit.html', true)) .when(UrlHelpers.join(context, 'buildConfigEdit/:id'), Kubernetes.route('buildConfigEdit.html', true)) .when(UrlHelpers.join(context, 'importProject'), Kubernetes.route('importProject.html', true)); }); }]); Kubernetes._module.factory('AppLibraryURL', ['$rootScope', function ($rootScope) { return UrlHelpers.join(Kubernetes.kubernetesApiUrl(), "/proxy", Kubernetes.kubernetesNamespacePath(), "/services/app-library"); }]); Kubernetes._module.factory('WikiGitUrlPrefix', function () { return UrlHelpers.join(Kubernetes.kubernetesApiUrl(), "/proxy", Kubernetes.kubernetesNamespacePath(), "services/app-library"); }); Kubernetes._module.factory('wikiRepository', ["$location", "localStorage", function ($location, localStorage) { return false; }]); Kubernetes._module.factory('ConnectDialogService', ['$rootScope', function ($rootScope) { return { dialog: new UI.Dialog(), saveCredentials: false, userName: null, password: null, jolokiaUrl: null, containerName: null, view: null }; }]); Kubernetes._module.filter('kubernetesPageLink', function () { return Kubernetes.entityPageLink; }); Kubernetes._module.filter('relativeTime', function () { return function (date) { return humandate.relativeTime(date); }; }); Kubernetes._module.run(['viewRegistry', 'ServiceRegistry', 'HawtioNav', 'KubernetesModel', '$templateCache', function (viewRegistry, ServiceRegistry, HawtioNav, KubernetesModel, $templateCache) { Kubernetes.log.debug("Running"); viewRegistry['kubernetes'] = Kubernetes.templatePath + 'layoutKubernetes.html'; //viewRegistry['kubernetes'] = Configs.templatePath + 'shareLayout.html'; var builder = HawtioNav.builder(); var apps = builder.id('kube-apps') .href(function () { return UrlHelpers.join(Kubernetes.context, 'apps'); }) .title(function () { return 'Apps'; }) .build(); var services = builder.id('kube-services') .href(function () { return UrlHelpers.join(Kubernetes.context, 'services'); }) .title(function () { return 'Services'; }) .build(); var controllers = builder.id('kube-controllers') .href(function () { return UrlHelpers.join(Kubernetes.context, 'replicationControllers'); }) .title(function () { return 'oracle服务'; }) .build(); var pods = builder.id('kube-pods') .href(function () { return UrlHelpers.join(Kubernetes.context, 'pods'); }) .title(function () { return '测试页面'; }) .build(); var events = builder.id('kube-events') .href(function () { return UrlHelpers.join(Kubernetes.context, 'events'); }) .title(function () { return '服务启动日志'; }) .build(); var hosts = builder.id('kube-hosts') .href(function () { return UrlHelpers.join(Kubernetes.context, 'hosts'); }) .title(function () { return '集群节点'; }) .build(); var overview = builder.id('kube-overview') .href(function () { return UrlHelpers.join(Kubernetes.context, 'overview'); }) .title(function () { return 'Diagram'; }) .build(); var builds = builder.id('kube-builds') .href(function () { return UrlHelpers.join(Kubernetes.context, 'builds'); }) .title(function () { return 'Builds'; }) .build(); var buildConfigs = builder.id('kube-buildConfigs') .href(function () { return UrlHelpers.join(Kubernetes.context, 'buildConfigs'); }) .title(function () { return 'Build Configs'; }) .build(); var deploys = builder.id('kube-deploys') .href(function () { return UrlHelpers.join(Kubernetes.context, 'deploymentConfigs'); }) .title(function () { return 'Deploys'; }) .build(); var imageRepositories = builder.id('kube-imageRepositories') .href(function () { return UrlHelpers.join(Kubernetes.context, 'imageRepositories'); }) .title(function () { return 'Registries'; }) .build(); var pipelines = builder.id('kube-pipelines') .href(function () { return UrlHelpers.join(Kubernetes.context, 'pipelines'); }) .title(function () { return 'Pipelines'; }) .build(); var repos = builder.id('kube-repos') .href(function () { return "/forge/repos"; }) .isValid(function () { return ServiceRegistry.hasService(Kubernetes.fabric8ForgeServiceName) && ServiceRegistry.hasService(Kubernetes.gogsServiceName); }) .title(function () { return 'Repositories'; }) .build(); var mainTab = builder.id('kubernetes') .rank(100) .defaultPage({ rank: 20, isValid: function (yes, no) { yes(); } }) .href(function () { return UrlHelpers.join(Kubernetes.context, "/namespace/default/replicationControllers"); }) .title(function () { return '服务集群'; }) .tabs(controllers, pods, events) .build(); HawtioNav.add(mainTab); /* testKubernetesModel HawtioNav.add({ id: 'k8sAppSwitcher', title: () => '', // not used as 'template' below overrides this isValid: () => KubernetesModel.serviceApps.length > 0, context: true, template: () => $templateCache.get(UrlHelpers.join(templatePath, 'serviceApps.html')) }); */ var projectsTab = builder.id('openshift') .rank(100) .href(function () { return UrlHelpers.join(Kubernetes.context, 'buildConfigs') + '?sub-tab=kube-buildConfigs'; }) .title(function () { return 'Projects'; }) .tabs(repos, buildConfigs, builds, deploys, imageRepositories) .build(); //HawtioNav.add(projectsTab); }]); hawtioPluginLoader.registerPreBootstrapTask({ name: 'KubernetesInit', task: function (next) { $.getScript('osconsole/config.js') .done(function (script, textStatus) { var config = Kubernetes.osConfig = window['OPENSHIFT_CONFIG']; Kubernetes.log.debug("Fetched OAuth config: ", config); var master = config.master_uri; if (!master && config.api && config.api.k8s) { var masterUri = new URI().host(config.api.k8s.hostPort).path("").query(""); if (config.api.k8s.proto) { masterUri.protocol(config.api.k8s.proto); } master = masterUri.toString(); } OSOAuthConfig = config.openshift; GoogleOAuthConfig = config.google; KeycloakConfig = config.keycloak; if (OSOAuthConfig && !master) { // TODO auth.master_uri no longer used right? // master = OSOAuthConfig.master_uri; if (!master) { var oauth_authorize_uri = OSOAuthConfig.oauth_authorize_uri; if (oauth_authorize_uri) { var text = oauth_authorize_uri; var idx = text.indexOf("://"); if (idx > 0) { idx += 3; idx = text.indexOf("/", idx); if (idx > 0) { master = text.substring(0, ++idx); } } } } } if ((!Kubernetes.masterUrl || Kubernetes.masterUrl === "/") && (!master || master === "/")) { // lets default the master to the current protocol and host/port // in case the master url is "/" and we are // serving up static content from inside /api/v1/namespaces/default/services/fabric8 or something like that var href = location.href; if (href) { master = new URI(href).query("").path("").toString(); } } if (master) { Kubernetes.masterUrl = master; next(); return; } }) .fail(function (response) { Kubernetes.log.debug("Error fetching OAUTH config: ", response); }) .always(function () { next(); }); } }, true); hawtioPluginLoader.addModule('ngResource'); hawtioPluginLoader.addModule(Kubernetes.pluginName); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { var log = Logger.get('kubernetes-watcher'); var k8sTypes = KubernetesAPI.NamespacedTypes.k8sTypes; var osTypes = KubernetesAPI.NamespacedTypes.osTypes; var self = {}; var updateFunction = function () { log.debug("Objects changed, firing listeners"); var objects = {}; _.forEach(self.getTypes(), function (type) { objects[type] = self.getObjects(type); }); _.forEach(self.listeners, function (listener) { listener(objects); }); }; var debouncedUpdate = _.debounce(updateFunction, 75, { trailing: true }); var namespaceWatch = { selected: undefined, watch: undefined, objects: [], objectMap: {}, watches: {} }; hawtioPluginLoader.registerPreBootstrapTask({ name: 'KubernetesWatcherInit', depends: ['KubernetesApiDiscovery'], task: function (next) { var booted = false; if (Kubernetes.isOpenShift) { log.info("Backend is an Openshift instance"); } else { log.info("Backend is a vanilla Kubernetes instance"); } namespaceWatch.watch = KubernetesAPI.watch({ kind: KubernetesAPI.WatchTypes.NAMESPACES, success: function (objects) { namespaceWatch.objects = objects; if (!booted) { booted = true; self.setNamespace(localStorage[Kubernetes.Constants.NAMESPACE_STORAGE_KEY] || Kubernetes.defaultNamespace); next(); } log.debug("Got namespaces: ", namespaceWatch.objects); }, error: function (error) { log.warn("Error fetching namespaces: ", error); // TODO is this necessary? //HawtioOAuth.doLogout(); if (!booted) { booted = true; next(); } } }); } }); hawtioPluginLoader.registerPreBootstrapTask({ name: 'KubernetesApiDiscovery', depends: ['hawtio-oauth'], task: function (next) { Kubernetes.isOpenShift = false; var userProfile = HawtioOAuth.getUserProfile(); log.debug("User profile: ", userProfile); if (userProfile && userProfile.provider === "hawtio-google-oauth") { log.debug("Possibly running on GCE"); // api master is on GCE $.ajax({ url: UrlHelpers.join(Kubernetes.masterApiUrl(), 'api', 'v1', 'namespaces'), complete: function (jqXHR, textStatus) { if (textStatus === "success") { log.debug("jqXHR: ", jqXHR); userProfile.oldToken = userProfile.token; userProfile.token = undefined; $.ajaxSetup({ beforeSend: function (request) { } }); } next(); }, beforeSend: function (request) { } }); } else { log.debug("Not running on GCE"); // double-check if we're on vanilla k8s or openshift var rootUri = new URI(Kubernetes.masterApiUrl()).path("/oapi").query("").toString(); log.debug("Checking for an openshift backend"); HawtioOAuth.authenticatedHttpRequest({ url: rootUri, success: function (data) { if (data) { Kubernetes.isOpenShift = true; } next(); }, error: function (jqXHR, textStatus, errorThrown) { var error = KubernetesAPI.getErrorObject(jqXHR); if (!error) { log.debug("Failed to find root paths: ", textStatus, ": ", errorThrown); } else { log.debug("Failed to find root paths: ", error); } Kubernetes.isOpenShift = false; next(); } }); } } }); var customUrlHandlers = {}; self.setNamespace = function (namespace) { if (namespace === namespaceWatch.selected) { return; } if (namespaceWatch.selected) { log.debug("Stopping current watches"); _.forOwn(namespaceWatch.watches, function (watch, key) { if (!KubernetesAPI.namespaced(key)) { return; } log.debug("Disconnecting watch: ", key); watch.disconnect(); }); _.forEach(_.keys(namespaceWatch.watches), function (key) { if (!KubernetesAPI.namespaced(key)) { return; } log.debug("Deleting kind: ", key); delete namespaceWatch.watches[key]; }); } namespaceWatch.selected = namespace; if (namespace) { _.forEach(self.getTypes(), function (kind) { if (kind === KubernetesAPI.WatchTypes.NAMESPACES) { return; } if (!namespaceWatch.watches[kind]) { log.debug("Creating watch for kind: ", kind); var config = { kind: kind, namespace: KubernetesAPI.namespaced(kind) ? namespace : undefined, success: function (objects) { watch.objects = objects; debouncedUpdate(); } }; if (kind in customUrlHandlers) { config.urlFunction = customUrlHandlers[kind]; } var watch = KubernetesAPI.watch(config); watch.config = config; namespaceWatch.watches[kind] = watch; } }); } }; self.hasWebSocket = true; self.getNamespace = function () { return namespaceWatch.selected; }; self.registerCustomUrlFunction = function (kind, url) { customUrlHandlers[kind] = url; if (kind in namespaceWatch.watches) { var watch = namespaceWatch.watches[kind]; var config = watch.config; config.urlFunction = url; watch.disconnect(); delete namespaceWatch.watches[kind]; config.success = function (objects) { watch.objects = objects; debouncedUpdate(); }; watch = KubernetesAPI.watch(config); watch.config = config; namespaceWatch.watches[kind] = watch; } }; self.getTypes = function () { var filter = function (kind) { // filter out stuff we don't care about yet switch (kind) { case KubernetesAPI.WatchTypes.OAUTH_CLIENTS: case KubernetesAPI.WatchTypes.IMAGE_STREAMS: case KubernetesAPI.WatchTypes.POLICIES: case KubernetesAPI.WatchTypes.ROLES: case KubernetesAPI.WatchTypes.ROLE_BINDINGS: case KubernetesAPI.WatchTypes.POLICY_BINDINGS: case KubernetesAPI.WatchTypes.PERSISTENT_VOLUME_CLAIMS: case KubernetesAPI.WatchTypes.PERSISTENT_VOLUMES: case KubernetesAPI.WatchTypes.ENDPOINTS: case KubernetesAPI.WatchTypes.RESOURCE_QUOTAS: case KubernetesAPI.WatchTypes.SERVICE_ACCOUNTS: return false; default: return true; } }; var answer = k8sTypes.concat([Kubernetes.WatchTypes.NAMESPACES]); if (Kubernetes.isOpenShift) { answer = answer.concat(osTypes); } else { answer = answer.concat(KubernetesAPI.WatchTypes.TEMPLATES); answer = answer.concat(KubernetesAPI.WatchTypes.BUILD_CONFIGS); } return _.filter(answer, filter); }; self.getObjects = function (kind) { if (kind === Kubernetes.WatchTypes.NAMESPACES) { return namespaceWatch.objects; } if (kind in namespaceWatch.watches) { return namespaceWatch.watches[kind].objects; } else { return undefined; } }; self.listeners = []; // listener gets notified after a bunch of changes have occurred self.registerListener = function (fn) { self.listeners.push(fn); }; var projectsHandle = undefined; // kick off the project watcher a bit sooner also hawtioPluginLoader.registerPreBootstrapTask({ name: 'ProjectsWatcher', depends: ['KubernetesApiDiscovery'], task: function (next) { if (Kubernetes.isOpenShift) { projectsHandle = KubernetesAPI.watch({ kind: KubernetesAPI.WatchTypes.PROJECTS, namespace: undefined, success: function (objects) { if (self.listeners && self.listeners.length) { log.debug("got projects: ", objects); _.forEach(self.listeners, function (listener) { listener({ projects: objects }); }); } } }); } next(); } }); Kubernetes._module.service('WatcherService', ['userDetails', '$rootScope', '$timeout', function (userDetails, $rootScope, $timeout) { return self; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { var log = Logger.get("kubernetes-term-windows"); Kubernetes._module.config(["kubernetesContainerSocketProvider", function (kubernetesContainerSocketProvider) { kubernetesContainerSocketProvider.WebSocketFactory = "CustomWebSockets"; }]); Kubernetes._module.factory('CustomWebSockets', ["userDetails", function (userDetails) { return function CustomWebSocket(url, protocols) { var paths = url.split('?'); if (!_.startsWith(paths[0], Kubernetes.masterApiUrl())) { paths[0] = UrlHelpers.join(Kubernetes.masterApiUrl(), paths[0]); } url = KubernetesAPI.wsUrl(paths[0]); url.search(paths[1] + '&access_token=' + userDetails.token); log.debug("Using ws url: ", url.toString()); return new WebSocket(url.toString(), protocols); }; }]); Kubernetes._module.service('TerminalService', ["$rootScope", "$document", "$compile", "$interval", "$templateCache", function ($rootScope, $document, $compile, $interval, $templateCache) { var body = $document.find('body'); function positionTerminals(terminals) { var total = _.keys(terminals).length; var dist = (body.width() - 225) / total; var position = 5; angular.forEach(terminals, function (value, key) { if (!value.scope.docked) { return; } value.el.css('left', position + 'px'); position = position + dist; }); } var defaultTemplate = $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, 'termShell.html')); var self = { positionTerminals: function () { positionTerminals(self.terminals); }, terminals: {}, httpTask: {}, newTerminal: function ($interval, podLink, containerName, entity, template) { if (template === void 0) { template = defaultTemplate; } var terminalId = UrlHelpers.join(podLink, containerName); if (terminalId in self.terminals) { log.debug("Already a terminal with id: ", terminalId); self.raiseTerminal(terminalId); return terminalId; } var scope = $rootScope.$new(); getLogs(entity, scope); scope.podLink = podLink; scope.containerName = containerName; scope.id = terminalId; scope.docked = true; if (terminalId in self.httpTask) { self.raiseTerminal(terminalId); return terminalId; } else { self.httpTask[terminalId] = $interval(function () { getLogs(entity, scope); }, 2000); } var el = $($compile(template)(scope)); var term = { scope: scope, el: el }; body.append(el); self.terminals[terminalId] = term; positionTerminals(self.terminals); return terminalId; }, closeTerminal: function (id) { var term = self.terminals[id]; var timer = self.httpTask[id]; if (timer) { $interval.cancel(timer); delete self.httpTask[id]; } if (term) { term.el.remove(); delete self.terminals[id]; positionTerminals(self.terminals); } }, raiseTerminal: function (id) { angular.forEach(self.terminals, function (value, key) { if (key === id) { value.el.css('z-index', '4000'); value.el.find('.terminal').focus(); } else { value.el.css('z-index', '3000'); } }); } }; return self; }]); function addWindowActions(scope, element, TerminalService) { var moved = false; var lastX = 0; var lastY = 0; var header = element.find('.terminal-title'); var body = element.find('.terminal-body'); element.on('$destroy', function () { $('#main').css({ display: 'inherit' }); }); var HEIGHT = 348; var WIDTH = 600; var TITLE_HEIGHT = 35; var NAV_OFFSET = 46; element.css({ height: HEIGHT, width: WIDTH }); header.css({ height: TITLE_HEIGHT }); body.css({ position: 'absolute', top: 35, left: 0, right: 0, bottom: 0 }); scope.close = function () { TerminalService.closeTerminal(scope.id); }; scope.raise = function () { TerminalService.raiseTerminal(scope.id); }; scope.$watch('docked', function (docked) { if (docked) { element.width(WIDTH); if (!element.hasClass('minimized')) { element.height(HEIGHT); } } }); scope.startResize = function (e) { e.preventDefault(); log.debug("Start resize"); scope.resizing = true; element.on('mouseup', scope.stopResize); $(document).on('mousemove', scope.doResize); $(document).on('mouseleave', scope.stopResize); }; scope.doResize = function (e) { if (scope.resizing) { log.debug("Resizing, e: ", e); if (!moved) { lastX = e.clientX; lastY = e.clientY; moved = true; return; } var height = element.height(); var width = element.width(); var deltaX = e.clientX - lastX; var deltaY = e.clientY - lastY; var newHeight = height + deltaY; var newWidth = width + deltaX; if (newHeight > 35 && newWidth > 80) { element.height(height + deltaY); element.width(width + deltaX); } lastX = e.clientX; lastY = e.clientY; } }; scope.stopResize = function (e) { scope.resizing = false; moved = false; element.off('mouseup', scope.stopResize); $(document).off('mousemove', scope.doResize); $(document).off('mouseleave', scope.stopResize); }; scope.mouseDown = function (e) { e.preventDefault(); if (element.hasClass('minimized') || element.hasClass('maximized')) { return; } scope.dragging = true; element.on('mouseup', scope.mouseUp); $(document).on('mousemove', scope.mouseMove); $(document).on('mouseleave', scope.mouseUp); }; scope.mouseUp = function (e) { e.preventDefault(); scope.dragging = false; moved = false; var height = element.height(); var offset = element.offset(); var winHeight = $(window).height(); if (offset.top > (winHeight - height - 20)) { element.css({ top: "inherit", left: "inherit" }); scope.docked = true; TerminalService.positionTerminals(); } else { scope.docked = false; } element.off('mouseup', scope.mouseUp); $(document).off('mousemove', scope.mouseMove); $(document).off('mouseleave', scope.mouseUp); }; scope.mouseMove = function (e) { if (scope.dragging) { if (!moved) { lastX = e.clientX; lastY = e.clientY; moved = true; return; } var deltaX = e.clientX - lastX; var deltaY = e.clientY - lastY; var elOffset = element.offset(); element.offset({ top: elOffset.top + deltaY, left: elOffset.left + deltaX }); lastX = e.clientX; lastY = e.clientY; } }; function restoreWindow(scope, element) { if (scope.offset) { element.offset(scope.offset); scope.docked = false; } if (scope.height) { element.height(scope.height); } if (scope.width) { element.width(scope.width); } } function saveWindow(scope, element) { scope.offset = element.offset(); scope.height = element.height(); scope.width = element.width(); } scope.maximized = function () { return element.hasClass('maximized'); }; scope.maximize = function ($e) { $e.preventDefault(); if (element.hasClass('minimized')) { scope.minimize(); } if (element.hasClass('maximized')) { restoreWindow(scope, element); $('#main').css({ display: 'inherit' }); } else { saveWindow(scope, element); $('#main').css({ display: 'none' }); element.css({ height: 'inherit', bottom: 0, width: '100%', top: NAV_OFFSET, left: 0 }); } element.toggleClass('maximized'); }; scope.minimize = function ($e) { $e.preventDefault(); if (element.hasClass('maximized')) { scope.maximize(); } if (element.hasClass('minimized')) { restoreWindow(scope, element); } else { saveWindow(scope, element); scope.docked = true; element.css({ height: TITLE_HEIGHT, top: "inherit", left: "inherit" }); TerminalService.positionTerminals(); } element.toggleClass('minimized'); }; } Kubernetes.addWindowActions = addWindowActions; Kubernetes._module.directive('terminalWindow', ["$compile", "TerminalService", function ($compile, TerminalService) { return { restrict: 'A', scope: false, link: function (scope, element, attr) { addWindowActions(scope, element, TerminalService); var body = element.find('.terminal-body'); body.append($compile('')(scope)); } }; }]); function getLogs(rc, scope) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { if (xhr.responseText != "" && xhr.responseText != null) { var logObject = JSON.parse(xhr.responseText); scope.logs = logObject[Kubernetes.getName(rc)]; } else { scope.logs = "当前没有可以查看的日志信息"; } } else { } } }; xhr.open("POST", "/java/console/api/oracle/extract/log?rcName=" + Kubernetes.getName(rc), false); xhr.send(null); } })(Kubernetes || (Kubernetes = {})); /// /// /// var Configs; (function (Configs) { Configs.TableEdit = Configs.controller('TableEdit', ['$scope', function ($scope) { $scope.editRow = function (entity) { $scope.$emit('editRow', entity); }; $scope.deleteRowOne = { show: false, item: null, open: function (entity) { var deleteRowOne = $scope.deleteRowOne; deleteRowOne.show = true; deleteRowOne.item = entity; }, onOk: function () { var deleteRowOne = $scope.deleteRowOne; $scope.$emit('deleteRow', deleteRowOne.item); }, onCancel: function () { var deleteRowOne = $scope.deleteRowOne; deleteRowOne.show = false; deleteRowOne.item = null; } }; }]); Configs.VolumeController = Configs.controller('VolumeController', ['$scope', '$http', function ($scope, $http) { $scope.submitted = false; $scope.status = $scope.ngDialogData.status; $scope.cancel = function () { $scope.closeThisDialog(); $scope.submitted = false; }; $scope.deleteBrock = function (volume, brock) { if (volume.brick.length > 1) Configs.deleteBrock(volume, brock); else $scope.showMessage = true; }; $scope.addBrock = function (volume) { var block = { ip: "", path: "", status: false, editable: true }; Configs.addBrock(volume, block); $scope.showMessage = false; }; $scope.stopVolume = function (volume) { volume.status = false; }; $scope.startVolume = function (volume) { volume.status = true; }; $scope.onSubmit = function (entity) { if ($scope.volumeForm.$valid) { $scope.$emit('update', entity); $scope.closeThisDialog(); } else { $scope.submitted = true; } }; }]); Configs.SystemInfoController = Configs.controller('SystemInfoController', ['$scope', function ($scope) { }]); })(Configs || (Configs = {})); /// /// /// /// /// /// /// /// var Configs; (function (Configs) { Configs.GfsController = Configs.controller('GfsController', ["$scope", "$templateCache", "$location", "$routeParams", "$http", "$timeout", 'ConfigsModel', 'ngDialog', function ($scope, $templateCache, $location, $routeParams, $http, $timeout, ConfigsModel, ngDialog) { $scope.model = ConfigsModel; $scope.volumes = ConfigsModel.cluster; Configs.shareInit($scope, $location, $routeParams); $scope.createGfs = function () { ngDialog.open({ template: 'newDialog.html', controller: 'Configs.VolumeController', width: 1005, scope: $scope, closeByDocument: false, data: { name: '', path: '', status: true, brick: [{ ip: ["0", "0", "0", "0"], path: '', status: false, editable: true }], editable: true }, className: 'ngdialog-theme-default' }); }; $scope.editRow = function (volume) { var fVolume = Configs.formatVolume(volume); ngDialog.open({ template: 'newDialog.html', width: 1005, data: fVolume, scope: $scope, className: 'ngdialog-theme-default', controller: 'Configs.VolumeController', closeByDocument: false }); }; $scope.showDeleteVolume = { show: false, item: null, open: function (entity) { var showDeleteVolume = $scope.showDeleteVolume; showDeleteVolume.show = true; showDeleteVolume.item = entity; }, onOk: function () { var showDeleteVolume = $scope.showDeleteVolume; $timeout(function () { console.log(showDeleteVolume.item); var spinner; $.ajax({ type: "POST", url: "/java/console/api/volume/delete", timeout: 8000, dataType: 'json', //async: false, data: JSON.stringify(showDeleteVolume.item), contentType: "application/json; charset=utf-8", beforeSend: function () { Configs.create_mask(); //创建遮罩层 Kubernetes.create_locadEffect("正在更新云盘信息,请稍等!"); //创建数据加载效果层 var target = document.getElementById('loading'); spinner = new Spinner(Kubernetes.loadConfigs()).spin(target); }, complete: function (XMLHttpRequest, textStatus) { if (XMLHttpRequest.status == 200) { Kubernetes.createSuccessInfo("success", "更新成功!"); setTimeout("Kubernetes.removeMask()", 1500); } else { Kubernetes.createSuccessInfo("error", "更新失败!"); setTimeout("Kubernetes.removeMask()", 1500); } }, success: function (data) { if (data) { ConfigsModel.cluster = data; Configs.formatVolumes(ConfigsModel.cluster); $scope.$apply(function () { $scope.volumes = ConfigsModel.cluster; }); } } }); /*$http({ url: "/java/console/api/volume/delete", method: 'POST', data: showDeleteVolume.item }).success(function(data,header,config,status){ /* 更新volume信息 */ /*$scope.model.updateVolumeData(); }).error(function(data,header,config,status){ Configs.customAlert("提示", "删除Volume失败!", '',null, 0, "error"); });*/ }, 100); }, onCancel: function () { var showDeleteVolume = $scope.showDeleteVolume; showDeleteVolume.show = false; showDeleteVolume.item = null; } }; $scope.$on('update', function (event, data) { angular.forEach(data["brick"], function (brick) { var ip = []; if (brick["ip"] instanceof Object) { for (var key in brick["ip"]) ip.push(brick["ip"][key]); brick["ip"] = ip.join("\."); } }); var spinner; $.ajax({ type: "POST", url: "/java/console/api/volume/update", timeout: 5000, dataType: 'json', //async: false, data: JSON.stringify(data), contentType: "application/json; charset=utf-8", beforeSend: function () { Configs.create_mask(); //创建遮罩层 Kubernetes.create_locadEffect("正在更新云盘信息,请稍等!"); //创建数据加载效果层 var target = document.getElementById('loading'); spinner = new Spinner(Kubernetes.loadConfigs()).spin(target); }, complete: function (XMLHttpRequest, textStatus) { if (XMLHttpRequest.status == 200) { Kubernetes.createSuccessInfo("success", "更新成功!"); setTimeout("Kubernetes.removeMask()", 1500); } else { Kubernetes.createSuccessInfo("error", "更新失败!"); setTimeout("Kubernetes.removeMask()", 1500); } }, success: function (data) { if (data) { ConfigsModel.cluster = data; Configs.formatVolumes(ConfigsModel.cluster); $scope.$apply(function () { $scope.volumes = ConfigsModel.cluster; }); } } }); /*$http({ url: "/java/console/api/volume/update", method: 'POST', data: data }).success(function(data,header,config,status){ $scope.model.updateVolumeData(); }).error(function(data,header,config,status){ });*/ }); }]); })(Configs || (Configs = {})); /// /// /// /// var Configs; (function (Configs) { Configs.KubeController = Configs.controller('KubeController', ["$scope", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "ConfigsModel", function ($scope, $templateCache, $location, $routeParams, $http, $timeout, ConfigsModel) { $scope.model = ConfigsModel; $scope.model.updateOracleParam(); $scope.submitted = false; $scope.tableConfig = { data: 'model.oracleParam', selectedItems: [], columnDefs: [{ field: "name", displayName: "名称" }, { field: "ip", displayName: "IP" }, { field: "port", displayName: "端口号" }, { field: "user", displayName: "用户名" }, { field: "password", displayName: "密码" }, { field: "databaseName", displayName: "服务名" }, { field: "tableName", displayName: "表空间名" }, { field: "suffix", displayName: "表后缀" }, { field: "entity", displayName: "操作", cellTemplate: $templateCache.get("tableEdit.html") }], enableRowClickSelection: false, showSelectionCheckbox: false, multiSelect: false, sortInfo: { sortBy: "name", ascending: true } }; Configs.shareInit($scope, $location, $routeParams); $scope.create = function () { $scope.submitted = false; $scope.add = true; $scope.edit = false; $scope.tableForm = {}; $scope.tableForm["id"] = 0; }; $scope.cancel = function () { $scope.tableForm = null; $scope.add = false; $scope.edit = false; $scope.submitted = false; }; $scope.onSubmit = function (oracle) { if ($scope.validForm.$valid && $scope.validForm.$dirty) { $scope.edit = false; $scope.add = false; Configs.oracleInfoOperate($http, "/java/console/api/oracle", Configs.OperateType.UPDATE, oracle, function (result, status) { if (status === 200) { $scope.model.updateOracleParam(); } else { throw "资源请求失败"; } }); } else { $scope.submitted = true; } }; $scope.$on("editRow", function (event, data) { $scope.submitted = false; $scope.tableForm = Configs.deepCopy(data); $scope.edit = true; $scope.add = false; //$scope.rowId = data.id //createNewObejct($scope.tableConfig.columnDefs, data); //removeElementsByValue($scope.tableForm, [{key: "name", value: "序号"},{key: "name", value: "连接状态"},{key: "name", value: "操作"}]); }); $scope.$on("deleteRow", function (event, data) { Configs.oracleInfoOperate($http, "/java/console/api/oracle", Configs.OperateType.DELETE, data, function (result, status) { if (status === 200) { console.log("准备更新"); $scope.model.updateOracleParam(); } else { throw "资源请求失败"; } }); //removeElementByValue($scope.model, data._id, "_id"); }); }]); })(Configs || (Configs = {})); /// /// /// var Developer; (function (Developer) { Developer._module = angular.module(Developer.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'nvd3', 'treeControl', 'ngDialog']); Developer.controller = PluginHelpers.createControllerFunction(Developer._module, Developer.pluginName); Developer.route = PluginHelpers.createRoutingFunction(Developer.templatePath); Developer._module.config(['$routeProvider', function ($routeProvider) { $routeProvider.when(Developer.context, Developer.route('workspaces.html', false)) .when("/data-manager", Developer.route('workspaces.html', false)) .when(UrlHelpers.join(Developer.context, 'Overview/:type/data-type/all'), Developer.route('workspaces.html', false)) .when(UrlHelpers.join(Developer.context, 'Overview/:type/data-type/financial'), Developer.route('workspaces.html', false)) .when(UrlHelpers.join(Developer.context, 'Overview/:type/data-type/social-security'), Developer.route('workspaces.html', false)) .when(UrlHelpers.join(Developer.context, 'Overview/task'), Developer.route('fileMigrationTask.html', false)) .otherwise(Developer.context); }]); Developer._module.run(['viewRegistry', 'ServiceRegistry', 'HawtioNav', 'KubernetesModel', '$templateCache', function (viewRegistry, ServiceRegistry, HawtioNav, KubernetesModel, $templateCache) { Developer.log.debug("Running"); viewRegistry['workspaces'] = Kubernetes.templatePath + 'layoutKubernetes.html'; viewRegistry['namespaces'] = Kubernetes.templatePath + 'layoutKubernetes.html'; // viewRegistry['workspaces'] = Configs.templatePath + 'shareLayout.html'; var builder = HawtioNav.builder(); var dmanagerTab = builder.id('dmanager') .rank(200) .href(function () { return Developer.context; }) .title(function () { return '数据管理'; }) .build(); HawtioNav.add(dmanagerTab); }]); Developer._module.filter('asTrustedHtml', ['$sce', function ($sce) { return function (text) { return $sce.trustAsHtml(text); }; }]); hawtioPluginLoader.addModule(Developer.pluginName); // for scroll-glue directive hawtioPluginLoader.addModule('luegg.directives'); })(Developer || (Developer = {})); /// /// var Developer; (function (Developer) { var OptionsParams = (function () { function OptionsParams() { this.pagerSizeOption = [20, 50, 100]; this.dataType = null; this.currentTableSize = 20; this.dataBatch = null; this.labels = {}; this.currentPageNum = 1; this.totalSize = null; this.priorTableSize = 20; this.keyQuery = null; this.volumeType = 1; } OptionsParams.prototype.createParamData = function () { var extendValue = ["cityName", "districtName", "dataVersion", "systemName", "dataYear"]; var result = { currentPageNum: this.currentPageNum, dataType: this.dataType, submittedBatch: this.dataBatch, limit: this.currentTableSize, priorTableSize: this.priorTableSize, keyQuery: this.keyQuery, volumeType: this.volumeType }; angular.forEach(this.labels, function (value, key) { if (extendValue.indexOf(key)) result[key] = value; }); return result; }; OptionsParams.prototype.getPageSizeNum = function () { var num = Math.ceil(this.totalSize / this.currentTableSize); if (num < this.currentPageNum) num = this.currentPageNum; return num; }; return OptionsParams; }()); Developer.OptionsParams = OptionsParams; function createLabel(cityName, districtName, systemName, version, year) { return { cityName: cityName, districtName: districtName, systemName: systemName, version: "版本" + version, year: year }; } function createKey(regionalismCode, systemId, version) { return regionalismCode + "-" + systemId + "-" + version; } function populateKey(item) { var result = item; result["_key"] = createKey(item.regionalismCode, item.systemCode, item.dataVersion); return result; } function populateLabel(item) { var result = item; result["labels"] = createLabel(item.cityName, item.districtName, item.systemName, item.dataVersion, item.year); return result; } function populateLabels(items) { var result = []; angular.forEach(items, function (item) { result.push(populateLabel(item)); }); return result; } function populateKeys(items) { var result = []; angular.forEach(items, function (item) { result.push(populateKey(item)); }); return result; } function createName(cityName, districtName) { return cityName + "-" + districtName; } function populateName(item) { var result = item; result["name"] = createName(item.cityName, item.districtName); return result; } function populateNames(items) { var result = []; angular.forEach(items, function (item) { result.push(populateName(item)); }); return result; } function createParamData(options) { return options.createParamData(); } function formatTask(items) { var result = []; angular.forEach(items, function (item) { result.push({ id: item.id, _key: item.regionalismCode + "-" + item.systemCode + "-" + item.dataVersion, name: item.cityName + "-" + item.districtName, systemName: item.systemName, status: item.completeStatus, process: item.rate, from: item.dataPath, to: item.dstPath, labels: { dataType: item.dataType, batch: "批次" + item.submittedBatch, dataVersion: "版本" + item.dataVersion, dataYear: item.year } }); }); return result; } var DataModelService = (function () { function DataModelService() { this.data = []; this.paramOptions = new OptionsParams(); this.transferTasks = []; this.updateModel(); } //更新数据模型 DataModelService.prototype.getDataModel = function (paramOptions) { var result; $.ajax({ async: false, type: "POST", url: "/java/console/api/data.json", dataType: 'json', data: createParamData(paramOptions), success: function (data) { result = data.data; paramOptions.totalSize = data.length; } }); return result; }; DataModelService.prototype.initParamOptions = function () { this.paramOptions = new OptionsParams(); }; DataModelService.prototype.updateModel = function () { this.data = this.getDataModel(this.paramOptions); this.maybeFormat(); }; //格式数据模型中的每个单条记录 DataModelService.prototype.maybeFormat = function () { this.data = populateKeys(this.data); this.data = populateNames(this.data); this.data = populateLabels(this.data); }; //更新用户选择参数 DataModelService.prototype.updateParamOption = function (option, value) { this.paramOptions[option] = value; }; //根据key获取用户选择参数 DataModelService.prototype.getParamOption = function (key) { return this.paramOptions[key]; }; DataModelService.prototype.startIntervalTask = function ($interval, $http) { var _this = this; var result; var timer = $interval(function () { $.ajax({ async: false, type: "POST", url: "/java/console/api/task/transfer/list", success: function (data) { if (data) { result = data; } } }); _this.transferTasks = formatTask(result); }, 1500); timer.then(function () { console.log("Done!"); }, function () { console.log("error"); }, function () { console.log("每次都更新"); }); }; return DataModelService; }()); Developer.DataModelService = DataModelService; //创建数据模型服务 Developer._module.factory("DataModel", ['$rootScope', '$http', '$interval', '$location', '$resource', function ($rootScope, $http, $interval, $location, $resource) { var $scope = new DataModelService(); $scope.startIntervalTask($interval, $http); return $scope; }]); })(Developer || (Developer = {})); /// var Developer; (function (Developer) { function enrichWorkspaces(projects) { angular.forEach(projects, function (project) { enrichWorkspace(project); }); return projects; } Developer.enrichWorkspaces = enrichWorkspaces; function enrichWorkspace(build) { if (build) { var name = Kubernetes.getName(build); build.$name = name; build.$sortOrder = 0 - build.number; var nameArray = name.split("-"); var nameArrayLength = nameArray.length; build.$shortName = (nameArrayLength > 4) ? nameArray.slice(0, nameArrayLength - 4).join("-") : name.substring(0, 30); var labels = Kubernetes.getLabels(build); build.$creationDate = asDate(Kubernetes.getCreationTimestamp(build)); build.$labelsText = Kubernetes.labelsToString(labels); if (name) { build.$projectsLink = UrlHelpers.join("workspaces", name); build.$runtimeLink = UrlHelpers.join("kubernetes/namespace/", name, "/apps"); build.$viewLink = build.$projectsLink; } } return build; } Developer.enrichWorkspace = enrichWorkspace; function asDate(value) { return value ? new Date(value) : null; } Developer.asDate = asDate; function enrichJenkinsJobs(jobsData, projectId, jobName) { if (jobsData) { angular.forEach(jobsData.jobs, function (job) { enrichJenkinsJob(job, projectId, jobName); }); } return jobsData; } Developer.enrichJenkinsJobs = enrichJenkinsJobs; function enrichJenkinsJob(job, projectId, jobName) { if (job) { jobName = jobName || job.name || projectId; job.$jobId = jobName; job.$project = projectId || jobName; var lastBuild = job.lastBuild; var lastBuildResult = lastBuild ? lastBuild.result : "NOT_STARTED"; var $iconClass = createBuildStatusIconClass(lastBuildResult); job.$lastBuildNumber = enrichJenkinsBuild(job, lastBuild); job.$lastSuccessfulBuildNumber = enrichJenkinsBuild(job, job.lastSuccessfulBuild); job.$lastFailedlBuildNumber = enrichJenkinsBuild(job, job.lastFailedlBuild); if (lastBuild) { job.$duration = lastBuild.duration; job.$timestamp = asDate(lastBuild.timestamp); } var jobUrl = (job || {}).url; if (!jobUrl || !jobUrl.startsWith("http")) { var jenkinsUrl = jenkinsLink(); if (jenkinsUrl) { jobUrl = UrlHelpers.join(jenkinsUrl, "job", jobName); } } if (jobUrl) { job.$jobLink = jobUrl; var workspaceName = Kubernetes.currentKubernetesNamespace(); job.$pipelinesLink = UrlHelpers.join("/workspaces", workspaceName, "projects", job.$project, "jenkinsJob", jobName, "pipelines"); job.$buildsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", job.$project, "jenkinsJob", jobName); } job.$iconClass = $iconClass; angular.forEach(job.builds, function (build) { enrichJenkinsBuild(job, build); }); } return job; } Developer.enrichJenkinsJob = enrichJenkinsJob; function createBuildStatusIconClass(result) { var $iconClass = "fa fa-spinner fa-spin"; if (result) { if (result === "FAILURE" || result === "FAILED") { // TODO not available yet $iconClass = "fa fa-exclamation-circle red"; } else if (result === "ABORTED" || result === "INTERUPTED") { $iconClass = "fa fa-circle grey"; } else if (result === "SUCCESS" || result === "COMPLETE" || result === "COMPLETED") { $iconClass = "fa fa-check-circle green"; } else if (result === "NOT_STARTED") { $iconClass = "fa fa-circle-thin grey"; } } return $iconClass; } Developer.createBuildStatusIconClass = createBuildStatusIconClass; function createBuildStatusBackgroundClass(result) { var $iconClass = "build-pending"; if (result) { if (result === "FAILURE" || result === "FAILED") { $iconClass = "build-fail"; } else if (result === "ABORTED" || result === "INTERUPTED") { $iconClass = "build-aborted"; } else if (result === "SUCCESS" || result === "COMPLETE" || result === "COMPLETED") { $iconClass = "build-success"; } else if (result === "NOT_STARTED") { $iconClass = "build-not-started"; } } return $iconClass; } Developer.createBuildStatusBackgroundClass = createBuildStatusBackgroundClass; function enrichJenkinsBuild(job, build) { var number = null; if (build) { build.$duration = build.duration; build.$timestamp = asDate(build.timestamp); var projectId = job.$project; var jobName = job.$jobId || projectId; var buildId = build.id; number = build.number; var workspaceName = Kubernetes.currentKubernetesNamespace(); var $iconClass = createBuildStatusIconClass(build.result); var jobUrl = (job || {}).url; if (!jobUrl || !jobUrl.startsWith("http")) { var jenkinsUrl = jenkinsLink(); if (jenkinsUrl) { jobUrl = UrlHelpers.join(jenkinsUrl, "job", jobName); } } if (jobUrl) { build.$jobLink = jobUrl; if (buildId) { //build.$logsLink = UrlHelpers.join(build.$buildLink, "console"); build.$logsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", buildId); build.$pipelineLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "pipeline", buildId); build.$buildsLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName); //build.$buildLink = UrlHelpers.join(jobUrl, build.id); build.$buildLink = build.$logsLink; } } build.$iconClass = $iconClass; } return number; } Developer.enrichJenkinsBuild = enrichJenkinsBuild; function jenkinsLink() { var ServiceRegistry = Kubernetes.inject("ServiceRegistry"); if (ServiceRegistry) { return ServiceRegistry.serviceLink(Developer.jenkinsServiceName); } return null; } Developer.jenkinsLink = jenkinsLink; function forgeReadyLink() { var ServiceRegistry = Kubernetes.inject("ServiceRegistry"); if (ServiceRegistry) { return ServiceRegistry.serviceReadyLink(Kubernetes.fabric8ForgeServiceName); } return null; } Developer.forgeReadyLink = forgeReadyLink; function enrichJenkinsPipelineJob(job, projectId, jobId) { if (job) { job.$project = projectId; job.$jobId = jobId; angular.forEach(job.builds, function (build) { enrichJenkinsStages(build, projectId, jobId); }); } } Developer.enrichJenkinsPipelineJob = enrichJenkinsPipelineJob; function enrichJenkinsStages(build, projectId, jobName) { if (build) { build.$project = projectId; build.$jobId = jobName; build.$timestamp = asDate(build.timeInMillis); build.$iconClass = createBuildStatusIconClass(build.result || "NOT_STARTED"); var workspaceName = Kubernetes.currentKubernetesNamespace(); var parameters = build.parameters; var $parameterCount = 0; var $parameterText = "No parameters"; if (parameters) { $parameterCount = _.keys(parameters).length || 0; $parameterText = Kubernetes.labelsToString(parameters, " "); } build.$parameterCount = $parameterCount; build.$parameterText = $parameterText; var jenkinsUrl = jenkinsLink(); if (jenkinsUrl) { var url = build.url; if (url) { } } build.$logLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", build.id); build.$viewLink = build.$logLink; angular.forEach(build.stages, function (stage) { enrichJenkinsStage(stage, build); }); } return build; } Developer.enrichJenkinsStages = enrichJenkinsStages; function enrichJenkinsStage(stage, build) { if (build === void 0) { build = null; } if (stage) { if (build) { stage.$buildId = build.id; stage.$project = build.$project; } var projectId = build.$project; var jobName = build.$jobId || projectId; var buildId = build.id; var workspaceName = Kubernetes.currentKubernetesNamespace(); stage.$backgroundClass = createBuildStatusBackgroundClass(stage.status); stage.$iconClass = createBuildStatusIconClass(stage.status); stage.$startTime = asDate(stage.startTime); if (!stage.duration) { stage.duration = 0; } var jenkinsUrl = jenkinsLink(); if (jenkinsUrl) { var url = stage.url; if (url) { stage.$viewLink = UrlHelpers.join(jenkinsUrl, url); stage.$logLink = UrlHelpers.join(stage.$viewLink, "log"); if (projectId && buildId) { stage.$logLink = UrlHelpers.join("/workspaces", workspaceName, "projects", projectId, "jenkinsJob", jobName, "log", buildId); } } } } } Developer.enrichJenkinsStage = enrichJenkinsStage; })(Developer || (Developer = {})); /// var Developer; (function (Developer) { Developer._module.controller('Developer.EnvironmentPanelController', ["$scope", "$element", "$location", "$routeParams", "KubernetesModel", "$http", "$timeout", "KubernetesState", "KubernetesApiURL", function ($scope, $element, $location, $routeParams, KubernetesModel, $http, $timeout, KubernetesState, KubernetesApiURL) { $scope.envVersions = {}; $scope.model = KubernetesModel; $scope.env = $scope.$eval('env'); $scope.buildConfig = $scope.$eval('entity'); $scope.open = true; $scope.toggle = function () { return $scope.open = !$scope.open; }; var caches = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); Developer.loadProjectVersions($scope, $element, $scope.buildConfig, $scope.env, $scope.env.namespace, $scope.envVersions, caches); }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.KubeTaskController = Developer.controller("KubeTaskController", ["$scope", "$http", "$location", "$routeParams", "DataModel", "$templateCache", function ($scope, $http, $location, $routeParams, DataModel, $templateCache) { $scope.model = DataModel; $scope.subTabConfig = Developer.createCurrentSubNavBar($scope, $location, $routeParams); $scope.tableConfig = { data: 'model.transferTasks', showSelectionCheckbox: false, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [{ field: "_key", displayName: '编码', customSortField: function (field) { return field.id; } }, { field: "name", displayName: '市-区/县' }, { field: "systemName", displayName: '系统名称' }, { field: "labels", displayName: '数据标签', cellTemplate: $templateCache.get("dataLabelsTemplate.html") }, { field: "from", displayName: '源集群', }, { field: "to", displayName: '目的集群', }, { field: "status", displayName: '迁移状态', cellTemplate: $templateCache.get("taskStatus.html") }, { field: "process", displayName: '迁移进度', cellTemplate: $templateCache.get("taskProcess.html") }, { field: "entity", displayName: '操作', cellTemplate: $templateCache.get("taskEdit.html") } ] }; $scope.$on("deleteRow", function (event, data) { Configs.oracleInfoOperate($http, "/java/console/api/task/transfer", Configs.OperateType.DELETE, data, function (data, status) { if (status === 200) console.log("删除成功"); }); }); }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.HomeController = Developer.controller("HomeController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.namespace = Kubernetes.currentKubernetesNamespace(); }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.JenkinsJobController = Developer.controller("JenkinsJobController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.jobId = $routeParams["job"]; $scope.schema = KubernetesSchema; $scope.entityChangedCache = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.tableConfig = { data: 'job.builds', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$sortOrder', displayName: 'Name', cellTemplate: $templateCache.get("jenkinsBuildIdTemplate.html") }, { field: '$buildLink', displayName: 'Views', cellTemplate: $templateCache.get("jenkinsBuildButtonsTemplate.html") }, { field: '$duration', displayName: 'Duration', cellTemplate: $templateCache.get("jenkinsBuildDurationTemplate.html") }, { field: '$timestamp', displayName: 'Time Started', cellTemplate: $templateCache.get("jenkinsBuildTimestampTemplate.html") } ] }; updateData(); function updateData() { if ($scope.jobId) { var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, "api/json?depth=1")); if (url && (!$scope.job || Kubernetes.keepPollingModel)) { $http.get(url). success(function (data, status, headers, config) { if (data) { Developer.enrichJenkinsJob(data, $scope.id, $scope.jobId); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.job = data; } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); }); } } else { $scope.model.fetched = true; Core.$apply($scope); } } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.JenkinsJobsController = Developer.controller("JenkinsJobsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.jenkins = null; $scope.entityChangedCache = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs(); $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.tableConfig = { data: 'jenkins.jobs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'name', displayName: 'Name', cellTemplate: $templateCache.get("jenkinsJobNameTemplate.html") }, { field: '$buildLink', displayName: 'Views', cellTemplate: $templateCache.get("jenkinsJobButtonsTemplate.html") }, { field: '$lastSuccessfulBuildNumber', displayName: 'Last Success', cellTemplate: $templateCache.get("jenkinsLastSuccessTemplate.html") }, { field: '$lastFailedlBuildNumber', displayName: 'Last Failure', cellTemplate: $templateCache.get("jenkinsLastFailureTemplate.html") }, { field: '$duration', displayName: 'Last Duration', cellTemplate: $templateCache.get("jenkinsBuildDurationTemplate.html") }, { field: '$timestamp', displayName: 'Time Started', cellTemplate: $templateCache.get("jenkinsBuildTimestampTemplate.html") } ] }; updateData(); function updateData() { // TODO only need depth 2 to be able to fetch the lastBuild var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, "api/json?depth=2"); Developer.log.info(""); if (url && (!$scope.jenkins || Kubernetes.keepPollingModel)) { $http.get(url, Developer.jenkinsHttpConfig). success(function (data, status, headers, config) { if (data) { Developer.enrichJenkinsJobs(data, $scope.id, $scope.id); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.jenkins = data; } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); }); } } }]); })(Developer || (Developer = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.FABRIC8_PROJECT_JSON = "fabric8ProjectJson"; function byId(thing) { return thing.id; } function createKey(namespace, id, kind) { return (namespace || "") + "-" + (kind || 'undefined').toLowerCase() + '-' + (id || 'undefined').replace(/\./g, '-'); } function populateKey(item) { var result = item; result['_key'] = createKey(Kubernetes.getNamespace(item), Kubernetes.getName(item), Kubernetes.getKind(item)); return result; } function populateKeys(items) { var result = []; angular.forEach(items, function (item) { result.push(populateKey(item)); }); return result; } function selectPods(pods, namespace, labels) { return pods.filter(function (pod) { return Kubernetes.getNamespace(pod) === namespace && Kubernetes.selectorMatches(labels, Kubernetes.getLabels(pod)); }); } /** * The object which keeps track of all the pods, replication controllers, services and their associations */ var KubernetesModelService = (function () { function KubernetesModelService() { this.kubernetes = null; this.apps = []; this.services = []; this.replicationcontrollers = []; this.filterReplicationcontrollers = []; this.pods = []; this.hosts = []; //public namespaces = []; this.routes = []; this.templates = []; this.redraw = false; this.resourceVersions = {}; // various views on the data this.podsByHost = {}; this.servicesByKey = {}; this.replicationControllersByKey = {}; this.podsByKey = {}; this.appInfos = []; this.appViews = []; this.appFolders = []; this.fetched = false; this.buildconfigs = []; this.events = []; this.workspaces = []; this.projects = []; this.project = null; } Object.defineProperty(KubernetesModelService.prototype, "replicationControllers", { /*public get filterReplicationcontrollers():Array { return this.filterReplicationcontrollers; } public set filterReplicationcontrollers(filterReplicationcontrollers:Array) { this.filterReplicationcontrollers = filterReplicationcontrollers; }*/ get: function () { return this.replicationcontrollers; }, set: function (replicationControllers) { this.replicationcontrollers = replicationControllers; }, enumerable: true, configurable: true }); Object.defineProperty(KubernetesModelService.prototype, "namespaces", { get: function () { return this.kubernetes.namespaces; }, enumerable: true, configurable: true }); Object.defineProperty(KubernetesModelService.prototype, "showRunButton", { get: function () { if (Kubernetes.isOpenShift) { return true; } return _.any(this.services, function (service) { var name = Kubernetes.getName(service); if (name === "templates") { var podCounters = service.$podCounters; return podCounters && (podCounters.valid || podCounters.ready); } else { return false; } }); }, enumerable: true, configurable: true }); Object.defineProperty(KubernetesModelService.prototype, "serviceApps", { get: function () { return _.filter(this.services, function (s) { return s.$host && s.$serviceUrl && s.$podCount; }); }, enumerable: true, configurable: true }); KubernetesModelService.prototype.$keepPolling = function () { return Kubernetes.keepPollingModel; }; KubernetesModelService.prototype.orRedraw = function (flag) { this.redraw = this.redraw || flag; }; KubernetesModelService.prototype.getService = function (namespace, id) { return this.servicesByKey[createKey(namespace, id, 'service')]; }; KubernetesModelService.prototype.getReplicationController = function (namespace, id) { return this.replicationControllersByKey[createKey(namespace, id, 'replicationController')]; }; KubernetesModelService.prototype.getPod = function (namespace, id) { return this.podsByKey[createKey(namespace, id, 'pod')]; }; KubernetesModelService.prototype.podsForNamespace = function (namespace) { if (namespace === void 0) { namespace = this.currentNamespace(); } return _.filter(this.pods, { namespace: namespace }); }; KubernetesModelService.prototype.getBuildConfig = function (name) { return _.find(this.buildconfigs, { $name: name }); }; KubernetesModelService.prototype.getProject = function (name, ns) { if (ns === void 0) { ns = this.currentNamespace(); } var buildConfig = this.project; if (!buildConfig) { var text = localStorage[Kubernetes.FABRIC8_PROJECT_JSON]; if (text) { try { buildConfig = angular.fromJson(text); } catch (e) { Kubernetes.log.warn("Could not parse json for " + Kubernetes.FABRIC8_PROJECT_JSON + ". Was: " + text + ". " + e, e); } } } if (buildConfig && ns != Kubernetes.getNamespace(buildConfig) && name != buildConfig.$name) { buildConfig = this.getBuildConfig(name); } return buildConfig; }; KubernetesModelService.prototype.setProject = function (buildConfig) { this.project = buildConfig; if (buildConfig) { // lets store in local storage var localStorage = Kubernetes.inject("localStorage"); if (localStorage) { localStorage[Kubernetes.FABRIC8_PROJECT_JSON] = angular.toJson(buildConfig); } } }; /** * Returns the current selected namespace or the default namespace */ KubernetesModelService.prototype.currentNamespace = function () { var answer = null; if (this.kubernetes) { answer = this.kubernetes.selectedNamespace; } return answer || Kubernetes.defaultNamespace; }; KubernetesModelService.prototype.updateIconUrlAndAppInfo = function (entity, nameField) { var answer = null; var id = Kubernetes.getName(entity); entity.$iconUrl = Core.pathGet(entity, ['metadata', 'annotations', 'fabric8.' + id + '/iconUrl']); entity.$info = Core.pathGet(entity, ['metadata', 'annotations', 'fabric8.' + id + '/summary']); if (entity.$iconUrl) { return; } if (id && nameField) { (this.templates || []).forEach(function (template) { var metadata = template.metadata; if (metadata) { var annotations = metadata.annotations || {}; var iconUrl = annotations["fabric8." + id + "/iconUrl"] || annotations["fabric8/iconUrl"]; if (iconUrl) { (template.objects || []).forEach(function (item) { var entityName = Kubernetes.getName(item); if (id === entityName) { entity.$iconUrl = iconUrl; } }); } } }); (this.appInfos || []).forEach(function (appInfo) { var iconPath = appInfo.iconPath; if (iconPath && !answer && iconPath !== "null") { var iconUrl = Kubernetes.gitPathToUrl(iconPath); var ids = Core.pathGet(appInfo, ["names", nameField]); angular.forEach(ids, function (appId) { if (appId === id) { entity.$iconUrl = iconUrl; entity.appPath = appInfo.appPath; entity.$info = appInfo; } }); } }); } if (!entity.$iconUrl) { entity.$iconUrl = Kubernetes.defaultIconUrl; } }; KubernetesModelService.prototype.maybeInit = function () { var _this = this; this.fetched = true; this.servicesByKey = {}; this.podsByKey = {}; this.replicationControllersByKey = {}; this.pods.forEach(function (pod) { if (!pod.kind) pod.kind = "Pod"; _this.podsByKey[pod._key] = pod; var host = Kubernetes.getHost(pod); pod.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(pod)); if (host) { pod.$labelsText += Kubernetes.labelFilterTextSeparator + "host=" + host; } pod.$iconUrl = Kubernetes.defaultIconUrl; _this.discoverPodConnections(pod); pod.$containerPorts = []; var podStatus = pod.status || {}; var startTime = podStatus.startTime; pod.$startTime = null; if (startTime) { pod.$startTime = new Date(startTime); } var createdTime = Kubernetes.getCreationTimestamp(pod); pod.$createdTime = null; pod.$age = null; if (createdTime) { pod.$createdTime = new Date(createdTime); pod.$age = humandate.relativeTime(pod.$createdTime); } var ready = Kubernetes.isReady(pod); pod.$ready = ready; pod.$statusCss = Kubernetes.statusTextToCssClass(podStatus.phase, ready); var maxRestartCount = 0; angular.forEach(Core.pathGet(pod, ["status", "containerStatuses"]), function (status) { var restartCount = status.restartCount; if (restartCount) { if (restartCount > maxRestartCount) { maxRestartCount = restartCount; } } }); if (maxRestartCount) { pod.$restartCount = maxRestartCount; } var imageNames = ""; angular.forEach(Core.pathGet(pod, ["spec", "containers"]), function (container) { var image = container.image; if (image) { if (!imageNames) { imageNames = image; } else { imageNames = imageNames + " " + image; } var idx = image.lastIndexOf(":"); if (idx > 0) { image = image.substring(0, idx); } var paths = image.split("/", 3); if (paths.length) { var answer = null; if (paths.length == 3) { answer = paths[1] + "/" + paths[2]; } else if (paths.length == 2) { answer = paths[0] + "/" + paths[1]; } else { answer = paths[0] + "/" + paths[1]; } container.$imageLink = UrlHelpers.join("https://registry.hub.docker.com/u/", answer); } } angular.forEach(container.ports, function (port) { var containerPort = port.containerPort; if (containerPort) { pod.$containerPorts.push(containerPort); } }); }); pod.$imageNames = imageNames; var podStatus = podStatus; var podSpec = (pod.spec || {}); pod.$podIP = podStatus.podIP; pod.$host = podSpec.host || podSpec.nodeName || podStatus.hostIP; }); this.services.forEach(function (service) { if (!service.kind) service.kind = "Service"; _this.servicesByKey[service._key] = service; var selector = Kubernetes.getSelector(service); service.$pods = []; if (!service.$podCounters) { service.$podCounters = {}; } var podLinkUrl = UrlHelpers.join("/kubernetes/namespace", service.metadata.namespace, "pods"); _.assign(service.$podCounters, selector ? Kubernetes.createPodCounters(selector, _this.pods, service.$pods, Kubernetes.labelsToString(selector, ","), podLinkUrl) : {}); service.$podCount = service.$pods.length; var selectedPods = service.$pods; service.connectTo = selectedPods.map(function (pod) { return pod._key; }).join(','); service.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(service)); _this.updateIconUrlAndAppInfo(service, "serviceNames"); var spec = service.spec || {}; service.$portalIP = spec.portalIP; service.$selectorText = Kubernetes.labelsToString(spec.selector); var ports = _.map(spec.ports || [], "port"); service.$ports = ports; service.$portsText = ports.join(", "); var iconUrl = service.$iconUrl; if (iconUrl && selectedPods) { selectedPods.forEach(function (pod) { pod.$iconUrl = iconUrl; }); } service.$serviceUrl = Kubernetes.serviceLinkUrl(service); }); this.replicationControllers.forEach(function (replicationController) { if (!replicationController.kind) replicationController.kind = "ReplicationController"; _this.replicationControllersByKey[replicationController._key] = replicationController; var selector = Kubernetes.getSelector(replicationController); replicationController.$pods = []; if (Kubernetes.isFilterRC(replicationController) && !Kubernetes.isInclude(_this.filterReplicationcontrollers, replicationController)) _this.filterReplicationcontrollers.push(replicationController); replicationController.$podCounters = selector ? Kubernetes.createPodCounters(selector, _this.pods, replicationController.$pods) : null; replicationController.$podCount = replicationController.$pods.length; replicationController.$replicas = (replicationController.spec || {}).replicas; replicationController.$oracleName = Kubernetes.getOracleName(replicationController); //console.log(getName(replicationController)); replicationController.$oracleStatus = Kubernetes.getOracleStatus(Kubernetes.getLabels(replicationController)); replicationController.$extractStatus = Kubernetes.getExtractStatus(Kubernetes.getLabels(replicationController)); var selectedPods = replicationController.$pods; replicationController.connectTo = selectedPods.map(function (pod) { return pod._key; }).join(','); //console.log(getLabels(replicationController)); replicationController.$labelsText = Kubernetes.labelsToString(Kubernetes.getLabels(replicationController)); replicationController.metadata.labels = Kubernetes.labelsFormat(replicationController); _this.updateIconUrlAndAppInfo(replicationController, "replicationControllerNames"); var iconUrl = replicationController.$iconUrl; if (iconUrl && selectedPods) { selectedPods.forEach(function (pod) { pod.$iconUrl = iconUrl; }); } }); // services may not map to an icon but their pods may do via the RC // so lets default it... this.services.forEach(function (service) { var iconUrl = service.$iconUrl; var selectedPods = service.$pods; if (selectedPods) { if (!iconUrl || iconUrl === Kubernetes.defaultIconUrl) { iconUrl = null; selectedPods.forEach(function (pod) { if (!iconUrl) { iconUrl = pod.$iconUrl; if (iconUrl) { service.$iconUrl = iconUrl; } } }); } } }); this.updateApps(); var podsByHost = {}; this.pods.forEach(function (pod) { var host = Kubernetes.getHost(pod); var podsForHost = podsByHost[host]; if (!podsForHost) { podsForHost = []; podsByHost[host] = podsForHost; } podsForHost.push(pod); }); this.podsByHost = podsByHost; var tmpHosts = []; for (var hostKey in podsByHost) { var hostPods = []; var podCounters = Kubernetes.createPodCounters(function (pod) { return Kubernetes.getHost(pod) === hostKey; }, this.pods, hostPods, "host=" + hostKey); var hostIP = null; if (hostPods.length) { var pod = hostPods[0]; var currentState = pod.status; if (currentState) { hostIP = currentState.hostIP; } } var hostDetails = { name: hostKey, id: hostKey, elementId: hostKey.replace(/\./g, '_'), hostIP: hostIP, pods: hostPods, kind: "Host", $podCounters: podCounters, $iconUrl: Kubernetes.hostIconUrl }; tmpHosts.push(hostDetails); } this.hosts = tmpHosts; Kubernetes.enrichBuildConfigs(this.buildconfigs); Kubernetes.enrichEvents(this.events, this); }; KubernetesModelService.prototype.updateApps = function () { var _this = this; try { // lets create the app views by trying to join controllers / services / pods that are related var appViews = []; this.replicationControllers.forEach(function (replicationController) { var name = Kubernetes.getName(replicationController); var $iconUrl = replicationController.$iconUrl; appViews.push({ appPath: "/dummyPath/" + name, $name: name, $info: { $iconUrl: $iconUrl }, $iconUrl: $iconUrl, replicationControllers: [replicationController], pods: replicationController.$pods || [], services: [] }); }); var noMatches = []; this.services.forEach(function (service) { // now lets see if we can find an app with an RC of the same selector var matchesApp = null; appViews.forEach(function (appView) { appView.replicationControllers.forEach(function (replicationController) { var repSelector = Kubernetes.getSelector(replicationController); if (repSelector && Kubernetes.selectorMatches(repSelector, Kubernetes.getSelector(service)) && Kubernetes.getNamespace(service) === Kubernetes.getNamespace(replicationController)) { matchesApp = appView; } }); }); if (matchesApp) { matchesApp.services.push(service); } else { noMatches.push(service); } }); Kubernetes.log.debug("no matches: ", noMatches); noMatches.forEach(function (service) { var appView = _.find(appViews, function (appView) { return _.any(appView.replicationControllers, function (rc) { return _.startsWith(Kubernetes.getName(rc), Kubernetes.getName(service)); }); }); if (appView) { appView.services.push(service); } else { var $iconUrl = service.$iconUrl; appViews.push({ appPath: "/dummyPath/" + name, $name: name, $info: { $iconUrl: $iconUrl }, $iconUrl: $iconUrl, replicationControllers: [], pods: service.$pods || [], services: [service] }); } }); angular.forEach(this.routes, function (route) { var metadata = route.metadata || {}; var spec = route.spec || {}; var serviceName = Core.pathGet(spec, ["to", "name"]); var host = spec.host; var namespace = Kubernetes.getNamespace(route); if (serviceName && host) { var service = _this.getService(namespace, serviceName); if (service) { service.$host = host; // TODO we could use some annotations / metadata to deduce what URL we should use to open this // service in the console. For now just assume its http: if (host) { var hostUrl = host; if (hostUrl.indexOf("://") < 0) { hostUrl = "http://" + host; } service.$connectUrl = UrlHelpers.join(hostUrl, "/"); } // TODO definitely need that annotation, temp hack for apiman link if (Kubernetes.getName(service) === 'apiman' && host) { service.$connectUrl = new URI().host(service.$host) .path('apimanui/index.html') .query({}) .hash(URI.encode(angular.toJson({ backTo: new URI().toString(), token: HawtioOAuth.getOAuthToken() }))).toString(); } } else { Kubernetes.log.debug("Could not find service " + serviceName + " namespace " + namespace + " for route: " + metadata.name); } } }); appViews = _.sortBy(populateKeys(appViews), function (appView) { return appView._key; }); ArrayHelpers.sync(this.appViews, appViews, '$name'); if (this.appInfos && this.appViews) { var folderMap = {}; var folders = []; var appMap = {}; angular.forEach(this.appInfos, function (appInfo) { if (!appInfo.$iconUrl && appInfo.iconPath && appInfo.iconPath !== "null") { appInfo.$iconUrl = Kubernetes.gitPathToUrl(appInfo.iconPath); } var appPath = appInfo.appPath; if (appPath) { appMap[appPath] = appInfo; var idx = appPath.lastIndexOf("/"); var folderPath = ""; if (idx >= 0) { folderPath = appPath.substring(0, idx); } folderPath = Core.trimLeading(folderPath, "/"); var folder = folderMap[folderPath]; if (!folder) { folder = { path: folderPath, expanded: true, apps: [] }; folders.push(folder); folderMap[folderPath] = folder; } folder.apps.push(appInfo); } }); this.appFolders = _.sortBy(folders, "path"); var apps = []; var defaultInfo = { $iconUrl: Kubernetes.defaultIconUrl }; angular.forEach(this.appViews, function (appView) { try { var appPath = appView.appPath; /* TODO appView.$select = () => { Kubernetes.setJson($scope, appView.id, $scope.model.apps); }; */ var appInfo = angular.copy(defaultInfo); if (appPath) { appInfo = appMap[appPath] || appInfo; } if (!appView.$info) { appView.$info = defaultInfo; appView.$info = appInfo; } appView.id = appPath; if (!appView.$name) { appView.$name = appInfo.name || appView.$name; } if (!appView.$iconUrl) { appView.$iconUrl = appInfo.$iconUrl; } apps.push(appView); appView.$podCounters = Kubernetes.createAppViewPodCounters(appView); appView.$podCount = (appView.pods || []).length; appView.$replicationControllersText = (appView.replicationControllers || []).map(function (i) { return i["_key"]; }).join(" "); appView.$servicesText = (appView.services || []).map(function (i) { return i["_key"]; }).join(" "); appView.$serviceViews = Kubernetes.createAppViewServiceViews(appView); } catch (e) { Kubernetes.log.warn("Failed to update appViews: " + e); } }); //this.apps = apps; this.apps = this.appViews; } } catch (e) { Kubernetes.log.warn("Caught error: " + e); } }; KubernetesModelService.prototype.discoverPodConnections = function (entity) { var info = Core.pathGet(entity, ["status", "info"]); var hostPort = null; var currentState = entity.status || {}; var desiredState = entity.spec || {}; var podId = Kubernetes.getName(entity); var host = currentState["hostIP"]; var podIP = currentState["podIP"]; var hasDocker = false; var foundContainerPort = null; if (desiredState) { var containers = desiredState.containers; angular.forEach(containers, function (container) { if (!hostPort) { var ports = container.ports; angular.forEach(ports, function (port) { if (!hostPort) { var containerPort = port.containerPort; var portName = port.name; var containerHostPort = port.hostPort; if (containerPort === 8778 || "jolokia" === portName) { if (containerPort) { if (podIP) { foundContainerPort = containerPort; } if (containerHostPort) { hostPort = containerHostPort; } } } } }); } }); } if (foundContainerPort && podId && Kubernetes.isRunning(currentState)) { if (!Kubernetes.isOpenShift) { // TODO temp workaround for k8s on GKE https://github.com/kubernetes/kubernetes/issues/17172 entity.$jolokiaUrl = UrlHelpers.join(Kubernetes.masterApiUrl(), "api", Kubernetes.defaultApiVersion, "proxy", "namespaces", entity.metadata.namespace, "pods", //"https:" + podId + ":" + foundContainerPort, podId + ":" + foundContainerPort, "jolokia/"); } else { entity.$jolokiaUrl = UrlHelpers.join(Kubernetes.masterApiUrl(), "api", Kubernetes.defaultApiVersion, "namespaces", entity.metadata.namespace, "pods", "https:" + podId + ":" + foundContainerPort, "proxy/jolokia/"); } } }; return KubernetesModelService; }()); Kubernetes.KubernetesModelService = KubernetesModelService; function getTemplateService(model) { var key = createKey('default', 'templates', 'service'); var answer = model.servicesByKey[key]; Kubernetes.log.debug("found template service: ", answer); return answer; } /** * Creates a model service which keeps track of all the pods, replication controllers and services along * with their associations and status */ Kubernetes._module.factory('KubernetesModel', ['$rootScope', '$http', 'KubernetesApiURL', 'KubernetesState', 'WatcherService', '$location', '$resource', function ($rootScope, $http, AppLibraryURL, KubernetesState, watcher, $location, $resource) { var $scope = new KubernetesModelService(); $scope.kubernetes = KubernetesState; // create all of our resource classes var typeNames = watcher.getTypes(); _.forEach(typeNames, function (type) { var urlTemplate = Kubernetes.uriTemplateForKubernetesKind(type); $scope[type + 'Resource'] = Kubernetes.createResource(type, urlTemplate, $resource, $scope); }); if (!Kubernetes.isOpenShift) { // register custom URL factories for templates/projects watcher.registerCustomUrlFunction(KubernetesAPI.WatchTypes.BUILD_CONFIGS, function (options) { var templateService = getTemplateService($scope); if (templateService) { return UrlHelpers.join(templateService.proxyUrl, '/oapi/v1/namespaces/default/buildconfigs/'); } return null; }); // register custom URL factories for templates/projects watcher.registerCustomUrlFunction(KubernetesAPI.WatchTypes.TEMPLATES, function (options) { var templateService = getTemplateService($scope); if (templateService) { return UrlHelpers.join(templateService.proxyUrl, '/oapi/v1/namespaces/default/templates/'); } return null; }); } // register for all updates on objects watcher.registerListener(function (objects) { var types = watcher.getTypes(); _.forEach(types, function (type) { switch (type) { case Kubernetes.WatchTypes.SERVICES: var items = populateKeys(objects[type]); angular.forEach(items, function (item) { item.proxyUrl = Kubernetes.kubernetesProxyUrlForService(Kubernetes.kubernetesApiUrl(), item); }); $scope[type] = items; break; case Kubernetes.WatchTypes.TEMPLATES: case Kubernetes.WatchTypes.ROUTES: case Kubernetes.WatchTypes.BUILDS: case Kubernetes.WatchTypes.BUILD_CONFIGS: case Kubernetes.WatchTypes.IMAGE_STREAMS: // don't put a break here :-) default: $scope[type] = populateKeys(objects[type]); } Kubernetes.log.debug("Type: ", type, " object: ", $scope[type]); }); $scope.maybeInit(); $rootScope.$broadcast('kubernetesModelUpdated', $scope); Core.$apply($rootScope); }); // set the selected namespace if set in the location bar // otherwise use whatever previously selected namespace is // available var search = $location.search(); if ('namespace' in search) { watcher.setNamespace(search['namespace']); } function selectPods(pods, namespace, labels) { return pods.filter(function (pod) { return Kubernetes.getNamespace(pod) === namespace && Kubernetes.selectorMatches(labels, Kubernetes.getLabels(pod)); }); } return $scope; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// /// /// /// /// var Developer; (function (Developer) { function clickApprove(element, url) { var $scope = angular.element(element).scope(); if ($scope) { $scope.approve(url, element.text); } } Developer.clickApprove = clickApprove; Developer.JenkinsLogController = Developer._module.controller("Developer.JenkinsLogController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "$modal", "KubernetesApiURL", "ServiceRegistry", "$element", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, $modal, KubernetesApiURL, ServiceRegistry, $element) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.selectedBuild = $scope.$eval('build') || $scope.$eval('selectedBuild'); $scope.id = $scope.$eval('build.id') || $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.entityChangedCache = {}; $element.on('$destroy', function () { $scope.$destroy(); }); $scope.log = { html: "", start: 0, firstIdx: null }; $scope.$on('kubernetesModelUpdated', function () { updateJenkinsLink(); Core.$apply($scope); }); $scope.$on('jenkinsSelectedBuild', function (event, build) { Developer.log.info("==== jenkins build selected! " + build.id + " " + build.$jobId); $scope.selectedBuild = build; }); $scope.$watch('selectedBuild', function (selectedBuild) { Developer.log.info("Selected build updated: ", selectedBuild); $scope.fetch(); }); Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createJenkinsBreadcrumbs($scope.id, getJobId(), getBuildId()); $scope.subTabConfig = Developer.createJenkinsSubNavBars($scope.id, getJobId(), getBuildId(), { label: "Log", title: "Views the logs of this build" }); function getJobId() { // lets allow the parent scope to be used too for when this is used as a panel return $routeParams["job"] || ($scope.selectedBuild || {}).$jobId; } $scope.getJobId = getJobId; function getBuildId() { // lets allow the parent scope to be used too for when this is used as a panel return $routeParams["build"] || ($scope.selectedBuild || {}).id; } $scope.getBuildId = getBuildId; function updateJenkinsLink() { var jenkinsUrl = Developer.jenkinsLink(); if (jenkinsUrl) { $scope.$viewJenkinsBuildLink = UrlHelpers.join(jenkinsUrl, "job", getJobId(), getBuildId()); $scope.$viewJenkinsLogLink = UrlHelpers.join($scope.$viewJenkinsBuildLink, "console"); } } var querySize = 50000; $scope.approve = function (url, operation) { var modal = $modal.open({ templateUrl: UrlHelpers.join(Developer.templatePath, 'jenkinsApproveModal.html'), controller: ['$scope', '$modalInstance', function ($scope, $modalInstance) { $scope.operation = operation; $scope.header = operation + "?"; $scope.ok = function () { modal.close(); postToJenkins(url, operation); }; $scope.cancel = function () { modal.dismiss(); }; }] }); }; function postToJenkins(uri, operation) { var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, uri); if (url) { var body = null; var config = { headers: {} }; Developer.log.info("posting to jenkinsUrl: " + url); $http.post(url, body, config). success(function (data, status, headers, config) { Developer.log.info("Managed to " + operation + " at " + url); }). error(function (data, status, headers, config) { Developer.log.warn("Failed " + operation + " job at " + url + " " + data + " " + status); }); } else { Developer.log.warn("Cannot post to jenkins URI: " + uri + " as no jenkins found!"); } } $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; $scope.fetch = PollHelpers.setupPolling($scope, function (next) { if ($scope.$eval('hideLogs && !build.building')) { Developer.log.debug("Log hidden, not fetching logs"); return; } else { Developer.log.debug("Fetching logs for build: ", $scope.$eval('build')); } var buildId = getBuildId(); var jobId = getJobId(); //log.info("=== jenkins log querying job " + jobId + " build " + buildId + " selected build " + $scope.selectedBuild); if (jobId && buildId) { if ($scope.buildId !== buildId || $scope.jobId !== jobId) { // lets clear the query $scope.log = { html: "", start: 0, firstIdx: null }; } $scope.buildId = buildId; $scope.jobId = jobId; var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", jobId, buildId, "fabric8/logHtml?tail=1&start=" + $scope.log.start + "&size=" + querySize)); if ($scope.log.firstIdx !== null) { url += "&first=" + $scope.log.firstIdx; } if (url && (!$scope.log.fetched || Kubernetes.keepPollingModel)) { $http.get(url). success(function (data, status, headers, config) { if (data) { var replaceClusterIPsInHtml = replaceClusterIpFunction(); if (!$scope.log.logs) { $scope.log.logs = []; } var lines = data.lines; var returnedLength = data.returnedLength; var logLength = data.logLength; var returnedStart = data.start; var earlierLog = false; if (angular.isDefined(returnedStart)) { earlierLog = returnedStart < $scope.log.start; } var lineSplit = data.lineSplit; // log.info("start was: " + $scope.log.start + " first: " + $scope.log.firstIdx + " => returnedLength: " + returnedLength + " logLength: " + logLength + " returnedStart: " + returnedStart + " earlierLog: " + earlierLog + " lineSplit: " + lineSplit); if (lines) { var currentLogs = $scope.log.logs; // lets re-join split lines if (lineSplit && currentLogs.length) { var lastIndex; var restOfLine; if (earlierLog) { lastIndex = 0; restOfLine = lines.pop(); if (restOfLine) { currentLogs[lastIndex] = replaceClusterIPsInHtml(restOfLine + currentLogs[lastIndex]); } } else { lastIndex = currentLogs.length - 1; restOfLine = lines.shift(); if (restOfLine) { currentLogs[lastIndex] = replaceClusterIPsInHtml(currentLogs[lastIndex] + restOfLine); } } } for (var i = 0; i < lines.length; i++) { lines[i] = replaceClusterIPsInHtml(lines[i]); } if (earlierLog) { $scope.log.logs = lines.concat(currentLogs); } else { $scope.log.logs = currentLogs.concat(lines); } } var moveForward = true; if (angular.isDefined(returnedStart)) { if (returnedStart > $scope.log.start && $scope.log.start === 0) { // we've jumped to the end of the file to read the tail of it $scope.log.start = returnedStart; $scope.log.firstIdx = returnedStart; } else if ($scope.log.firstIdx === null) { // lets remember where the first request started $scope.log.firstIdx = returnedStart; } else if (returnedStart < $scope.log.firstIdx) { // we've got an earlier bit of the log // after starting at the tail // so lets move firstIdx backwards and leave start as it is (at the end of the file) $scope.log.firstIdx = returnedStart; moveForward = false; } } if (moveForward && returnedLength && !earlierLog) { $scope.log.start += returnedLength; if (logLength && $scope.log.start > logLength) { $scope.log.start = logLength; } } updateJenkinsLink(); } $scope.log.fetched = true; // Core.$apply($scope); next(); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); next(); }); } } else { $scope.log.fetched = true; Core.$apply($scope); next(); } }); if (angular.isFunction($scope.fetch)) { $scope.fetch(); } function replaceClusterIpFunction() { function createReplaceFunction(from, to) { return function (text) { return replaceText(text, from, to); }; } var replacements = []; angular.forEach($scope.model.services, function (service) { var $portalIP = service.$portalIP; var $serviceUrl = service.$serviceUrl; var $portsText = service.$portsText; if ($portalIP && $serviceUrl) { var idx = $serviceUrl.indexOf("://"); if (idx > 0) { var replaceWith = $serviceUrl.substring(idx, $serviceUrl.length); if (!replaceWith.endsWith("/")) { replaceWith += "/"; } if (replaceWith.length > 4) { replacements.push(createReplaceFunction("://" + $portalIP + "/", replaceWith)); if ($portsText) { var suffix = ":" + $portsText; var serviceWithPort = replaceWith.substring(0, replaceWith.length - 1); if (!serviceWithPort.endsWith(suffix)) { serviceWithPort += suffix; } serviceWithPort += "/"; replacements.push(createReplaceFunction("://" + $portalIP + ":" + $portsText + "/", serviceWithPort)); } } } } }); function addReplaceFn(from, to) { replacements.push(function (text) { return replaceText(text, from, to); }); } addReplaceFn("[INFO]", "[INFO]"); addReplaceFn("[WARN]", "[WARN]"); addReplaceFn("[WARNING]", "[WARNING]"); addReplaceFn("[ERROR]", "[ERROR]"); addReplaceFn("FAILURE", "FAILURE"); addReplaceFn("SUCCESS", "SUCCESS"); // lets try convert the Proceed / Abort links replacements.push(function (text) { var prefix = "= 0) { idx = text.indexOf(prefix, idx); if (idx >= 0) { var start = idx + prefix.length; var endQuote = text.indexOf("'", start + 1); if (endQuote <= 0) { break; } var endDoubleQuote = text.indexOf('"', endQuote + 1); if (endDoubleQuote <= 0) { break; } var url = text.substring(start, endQuote); // TODO using $compile is a tad complex, for now lets cheat with a little onclick ;) //text = text.substring(0, idx) + " '" + to + "'"); var idx = 0; while (true) { idx = text.indexOf(from, idx); if (idx >= 0) { text = text.substring(0, idx) + to + text.substring(idx + from.length); idx += to.length; } else { break; } } } return text; } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.JenkinsMetricsController = Developer.controller("JenkinsMetricsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.jobId = $routeParams["job"]; $scope.schema = KubernetesSchema; $scope.jenkins = null; $scope.entityChangedCache = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.options = { chart: { type: 'discreteBarChart', autorefresh: false, height: 450, margin: { top: 20, right: 20, bottom: 60, left: 45 }, clipEdge: true, staggerLabels: false, transitionDuration: 500, stacked: false, interactive: true, tooltip: { enabled: true, contentGenerator: function (args) { var data = args.data || {}; return data.tooltip; }, }, color: function (d, i) { return d.color; }, xAxis: { axisLabel: 'Builds', showMaxMin: false, tickFormat: function (d) { return "#" + d; } }, yAxis: { axisLabel: 'Build Duration (seconds)', tickFormat: function (d) { return d3.format(',.1f')(d); } } } }; $scope.data = []; updateData(); function barColourForBuildResult(result) { if (result) { if (result === "FAILURE" || result === "FAILED") { return "red"; } else if (result === "ABORTED" || result === "INTERUPTED") { return "tan"; } else if (result === "SUCCESS") { return "green"; } else if (result === "NOT_STARTED") { return "lightgrey"; } } return "darkgrey"; } function updateChartData() { var useSingleSet = true; var buildsSucceeded = []; var buildsFailed = []; var successBuildKey = "Succeeded builds"; var failedBuildKey = "Failed builds"; if (useSingleSet) { successBuildKey = "Builds"; } var count = 0; var builds = _.sortBy($scope.metrics.builds || [], "number"); angular.forEach(builds, function (build) { var x = build.number; var y = build.duration / 1000; var date = Developer.asDate(build.timeInMillis); var result = build.result || "NOT_STARTED"; var color = barColourForBuildResult(result); var iconClass = Developer.createBuildStatusIconClass(result); var tooltip = '

' + build.displayName + '

' + '

duration: ' + y + ' seconds

'; if (date) { tooltip += '

started: ' + date + '

'; } if (result) { tooltip += '

result: ' + result + '

'; } if (x) { var data = buildsSucceeded; var key = successBuildKey; if (!successBuildKey && (!result || !result.startsWith("SUCC"))) { data = buildsFailed; key = failedBuildKey; } data.push({ tooltip: tooltip, color: color, x: x, y: y }); } }); $scope.data = []; if (buildsSucceeded.length) { $scope.data.push({ key: successBuildKey, values: buildsSucceeded }); } if (buildsFailed.length) { $scope.data.push({ key: failedBuildKey, values: buildsFailed }); } $scope.api.updateWithData($scope.data); $timeout(function () { $scope.api.update(); }, 50); } function updateData() { var metricsPath = $scope.jobId ? UrlHelpers.join("job", $scope.jobId, "fabric8/metrics") : "fabric8/metrics"; var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, metricsPath); Developer.log.info(""); if (url && (!$scope.jenkins || Kubernetes.keepPollingModel)) { $http.get(url, Developer.jenkinsHttpConfig). success(function (data, status, headers, config) { if (data) { if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.metrics = data; updateChartData(); } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); }); } } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.NavBarController = Developer.controller("NavBarController", ["$scope", "$location", "$routeParams", "$timeout", "KubernetesApiURL", function ($scope, $location, $routeParams, $timeout) { $scope.isValid = function (item) { if (item) { var value = item.isValid; if (angular.isFunction(value)) { return value(item); } else { return angular.isUndefined(value) || value; } } return false; }; }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.PipelineController = Developer.controller("PipelineController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry) { $scope.kubernetes = KubernetesState; $scope.kubeModel = KubernetesModel; $scope.id = $routeParams["id"]; $scope.jobId = $routeParams["job"]; $scope.buildId = $routeParams["build"]; $scope.schema = KubernetesSchema; $scope.entityChangedCache = {}; $scope.model = { stages: null }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { if ($scope.jobId) { var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, $scope.buildId, "fabric8/stages/")); if (url && (!$scope.model.stages || Kubernetes.keepPollingModel)) { $http.get(url). success(function (data, status, headers, config) { if (data) { Developer.enrichJenkinsStages(data, $scope.id, $scope.jobId); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.build = data; $scope.model.stages = data.stages; } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); $scope.model.fetched = true; }); } } else { $scope.model.fetched = true; Core.$apply($scope); } } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer._module.directive("pipelineView", function () { return { templateUrl: Developer.templatePath + 'pipelineView.html' }; }); })(Developer || (Developer = {})); /// /// /// /// /// /// var Developer; (function (Developer) { Developer.PipelinesController = Developer._module.controller("Developer.PipelinesController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "ServiceRegistry", "$element", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, ServiceRegistry, $element) { $scope.kubernetes = KubernetesState; $scope.kubeModel = KubernetesModel; $scope.id = $routeParams["id"]; $scope.jobId = $scope.jobId || $routeParams["job"]; $scope.schema = KubernetesSchema; $scope.entityChangedCache = {}; $element.on('$destroy', function () { $scope.$destroy(); }); $scope.model = { job: null, pendingOnly: $scope.pendingPipelinesOnly }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, $scope.jobId); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.$watch('model.pendingOnly', function ($event) { updateData(); }); $scope.selectBuild = function (build) { var id = build.id; if (id) { if (id !== $scope.selectedBuildId) { $scope.selectedBuildId = id; $scope.$broadcast("jenkinsSelectedBuild", build); } } }; var updateData = _.debounce(function () { var entity = $scope.entity; if ($scope.jobId) { if ((!entity || entity.$jenkinsJob)) { var queryPath = "fabric8/stages/"; if ($scope.model.pendingOnly) { queryPath = "fabric8/pendingStages/"; } var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", $scope.jobId, queryPath)); if (url && (!$scope.model.job || Kubernetes.keepPollingModel)) { $http.get(url). success(function (data, status, headers, config) { if (data) { Developer.enrichJenkinsPipelineJob(data, $scope.id, $scope.jobId); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.model.job = data; var builds = data.builds; if (builds && builds.length) { $scope.selectBuild(builds[0]); } } } $scope.model.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); $scope.model.fetched = true; }); } } else { if ($scope.model) { Kubernetes.enrichBuilds($scope.kubeModel.builds); var builds = []; angular.forEach($scope.kubeModel.builds, function (build) { var labels = Kubernetes.getLabels(build); var app = labels["app"]; if (app === $scope.projectId) { builds.push(build); } }); builds = _.sortBy(builds, "$creationDate").reverse(); var allBuilds = builds; if (allBuilds.length > 1) { builds = _.filter(allBuilds, function (b) { return !b.$creationDate; }); if (!builds.length) { builds = [allBuilds[0]]; } } var pipelines = []; angular.forEach(builds, function (build) { var buildStatus = build.status || {}; var result = buildStatus.phase || ""; var resultUpperCase = result.toUpperCase(); var description = ""; var $viewLink = build.$viewLink; var $logLink = build.$logsLink; var $timestamp = build.$creationDate; var duration = buildStatus.duration; if (duration) { // 17s = 17,000,000,000 on openshift duration = duration / 1000000; } var displayName = Kubernetes.getName(build); var $iconClass = Developer.createBuildStatusIconClass(resultUpperCase); var $backgroundClass = Developer.createBuildStatusBackgroundClass(resultUpperCase); var stage = { stageName: "OpenShift Build", $viewLink: $viewLink, $logLink: $logLink, $startTime: $timestamp, duration: duration, status: result, $iconClass: $iconClass, $backgroundClass: $backgroundClass }; var pipeline = { description: description, displayName: displayName, $viewLink: $viewLink, $logLink: $logLink, $timestamp: $timestamp, duration: duration, stages: [stage] }; pipelines.push(pipeline); }); // lets filter the OpenShift builds and make a pipeline from that $scope.model.job = { $jobId: $scope.jobId, $project: $scope.projectId, builds: pipelines }; } $scope.model.fetched = true; Core.$apply($scope); } } else { $scope.model.fetched = true; Core.$apply($scope); } }, 50); updateData(); }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.ProjectController = Developer.controller("ProjectController", ["$scope", "$element", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, $element, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; $scope.entityChangedCache = {}; $scope.envVersionsCache = {}; $scope.envNSCaches = {}; $scope.envVersions = {}; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = []; //Developer.createProjectBreadcrumbs($scope.id); updateTabs(); // this is used for the pendingPipelines view $scope.jobId = $scope.id; $scope.pendingPipelinesOnly = true; $scope.$on('jenkinsSelectedBuild', function (event, build) { $scope.selectedBuild = build; }); // TODO this should be unnecessary but seems sometiems this watch doesn't always trigger unless you hit reload on this page if ($scope.model.buildconfigs) { onBuildConfigs($scope.model.buildconfigs); } Kubernetes.watch($scope, $element, "buildconfigs", $scope.namespace, onBuildConfigs); function onBuildConfigs(buildConfigs) { angular.forEach(buildConfigs, function (data) { var name = Kubernetes.getName(data); if (name === $scope.id) { var sortedBuilds = null; Kubernetes.enrichBuildConfig(data, sortedBuilds); if (Developer.hasObjectChanged(data, $scope.entityChangedCache)) { Developer.log.info("entity has changed!"); $scope.entity = data; $scope.entity.$build = (data.$fabric8CodeViews || {})['fabric8.link.browseGogs.view']; $scope.model.setProject($scope.entity); } updateEnvironmentWatch(); updateTabs(); } }); $scope.model.fetched = true; Core.$apply($scope); } /** * We have updated the entity so lets make sure we are watching all the environments to find * the project versions for each namespace */ function updateEnvironmentWatch() { var project = $scope.entity; if (project) { var jenkinsJob = project.$jenkinsJob; if (jenkinsJob) { var buildsTab = _.find($scope.subTabConfig, { id: "builds" }); if (buildsTab) { buildsTab["href"] = UrlHelpers.join("/workspaces", Kubernetes.currentKubernetesNamespace(), "projects", $scope.id, "jenkinsJob", jenkinsJob); } } angular.forEach(project.environments, function (env) { var ns = env.namespace; var caches = $scope.envNSCaches[ns]; if (!caches) { caches = {}; $scope.envNSCaches[ns] = caches; Developer.loadProjectVersions($scope, $element, project, env, ns, $scope.envVersions, caches); } }); } } function updateTabs() { $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, null, $scope); } }]); })(Developer || (Developer = {})); /// var Developer; (function (Developer) { Developer._module.controller('Developer.ProjectSelector', ['$scope', '$routeParams', 'KubernetesModel', function ($scope, $routeParams, KubernetesModel) { var projectId = $routeParams['projectId'] || $routeParams['project'] || $routeParams['id']; if (projectId) { $scope.projectId = projectId; $scope.model = KubernetesModel; $scope.$watch('model.buildconfigs', function (buildconfigs) { $scope.projects = buildconfigs; }); } else { Developer.log.info("no project ID in routeParams: ", $routeParams); } }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.ProjectsController = Developer.controller("ProjectsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.tableConfig = { data: 'model.buildconfigs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$name', displayName: 'Name', cellTemplate: $templateCache.get("idTemplate.html") }, /* { field: 'spec.source.type', displayName: 'Source' }, */ { field: 'spec.source.git.uri', displayName: 'Repository' }, /* { field: 'spec.strategy.type', displayName: 'Strategy' }, { field: 'spec.strategy.stiStrategy.image', displayName: 'Source Image' }, { field: 'spec.output.imageTag', displayName: 'Output Image' }, */ { field: 'metadata.description', displayName: 'Description' }, { field: '$creationDate', displayName: 'Created', cellTemplate: $templateCache.get("creationTimeTemplate.html") }, { field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs(); $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); // TODO //$scope.isLoggedIntoGogs = Forge.isLoggedIntoGogs; $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } else { } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Apps', action: 'The following Apps will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; function deleteEntity(selection, nextCallback) { var name = (selection || {}).$name; var jenkinsJob = selection.$jenkinsJob; var publicJenkinsUrl = Developer.jenkinsLink(); //var jenkinsUrl = Core.pathGet(selection, ["$fabric8Views", "fabric8.link.jenkins.job", "url"]); if (name) { console.log("About to delete build config: " + name); var url = Kubernetes.buildConfigRestUrl(name); $http.delete(url). success(function (data, status, headers, config) { nextCallback(); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to delete build config on " + url + " " + data + " " + status); nextCallback(); }); } else { console.log("warning: no name for selection: " + angular.toJson(selection)); } if (jenkinsJob && publicJenkinsUrl) { var url = Kubernetes.kubernetesProxyUrlForServiceCurrentNamespace(Developer.jenkinsServiceNameAndPort, UrlHelpers.join("job", jenkinsJob, "doDelete")); var body = ""; var config = { headers: { 'Content-Type': "text/plain" } }; Developer.log.info("posting to jenkinsUrl: " + url); $http.post(url, body, config). success(function (data, status, headers, config) { Developer.log.info("Managed to delete " + url); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to delete jenkins job at " + url + " " + data + " " + status); }); } } /* $scope.$keepPolling = () => Kubernetes.keepPollingModel; $scope.fetch = PollHelpers.setupPolling($scope, (next:() => void) => { var url = Kubernetes.buildConfigsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { //console.log("got data " + angular.toJson(data, true)); var sortedBuilds = null; $scope.buildConfigs = Kubernetes.enrichBuildConfigs(data.items, sortedBuilds); $scope.model.fetched = true; Core.$apply($scope); next(); } }). error(function (data, status, headers, config) { log.warn("Failed to load " + url + " " + data + " " + status); next(); }); }); $scope.fetch(); */ }]); })(Developer || (Developer = {})); /// /// /// /// /// var Developer; (function (Developer) { Developer.WorkspaceController = Developer.controller("WorkspaceController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["namespace"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.kubernetes_Namespace; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createWorkspaceBreadcrumbs(); $scope.subTabConfig = Developer.createWorkspaceSubNavBars(); $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; $scope.fetch = PollHelpers.setupPolling($scope, function (next) { $scope.item = null; if ($scope.id) { var url = UrlHelpers.join(Kubernetes.resourcesUriForKind("Projects"), $scope.id); Developer.log.info("Loading url: " + url); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = Developer.enrichWorkspace(data); } $scope.model.fetched = true; Core.$apply($scope); next(); }). error(function (data, status, headers, config) { Developer.log.warn("Failed to load " + url + " " + data + " " + status); next(); }); } else { $scope.model.fetched = true; Core.$apply($scope); next(); } }); $scope.fetch(); }]); })(Developer || (Developer = {})); /// /// /// /// /// /// /// /// /// /// var Developer; (function (Developer) { Developer.WorkspacesController = Developer.controller("WorkspacesController", ["$scope", "KubernetesModel", "DataModel", "ConfigsModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "$element", "ngDialog", function ($scope, KubernetesModel, DataModel, ConfigsModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, $element, ngDialog) { $scope.model = DataModel; $scope.replicasModel = KubernetesModel; init($scope, $location, $routeParams); $scope.options = DataModel.paramOptions; $scope.pageSizeChoses = DataModel.paramOptions.pagerSizeOption; var result = getDataType($location); $scope.options.dataType = result["dataType"]; $scope.options.volumeType = result["volumeType"]; $scope.treeOptions = { nodeChildren: "childNodes", dirSelectable: true, injectClasses: { ul: "a1", li: "a2", liSelected: "a7", iExpanded: "a3", iCollapsed: "a4", iLeaf: "a5", label: "a6", labelSelected: "a8" } }; //配置数据表格需要显示的内容及显示格式 $scope.tableConfig = { data: 'model.data', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: "_key", displayName: '编码' }, { field: "name", displayName: '市-区/县', customSortField: function (field) { return field.regionalismCode; } }, { field: "systemName", displayName: '系统名称', customSortField: function (field) { return field.systemCode; } }, { field: "labels", displayName: '数据标签', cellTemplate: $templateCache.get("dataLabelsTemplate.html") }, { field: "year", displayName: '年度', }, { field: "collectingTime", displayName: '采集时间' }, { field: "extractStatus", displayName: '汇总状态', cellTemplate: $templateCache.get("dataExtractTemplate.html") } ], sortInfo: { sortBy: "_key", ascending: true } }; $scope.$on("dataLabelFilterUpdate", function ($event, text, key) { $scope.keyQuery += " " + text; }); $scope.selectBatchItem = function (item) { $scope.navbarItems.forEach(function (nav) { nav.class = ""; }); item.class = "active"; $scope.model.updateParamOption("keyQuery", $scope.keyQuery); $scope.model.updateParamOption("dataBatch", item.alias); }; $scope.isEmptyOrFirst = function () { var idx = $scope.model.getParamOption("currentPageNum"); var length = $scope.options.getPageSizeNum(); return length <= 0 || idx <= 1; }; $scope.isEmptyOrLast = function () { var idx = $scope.model.getParamOption("currentPageNum"); var length = $scope.options.getPageSizeNum(); return length < 1 || idx >= length; }; $scope.first = function () { var idx = $scope.model.getParamOption("currentPageNum"); if (idx > 1) { $scope.model.updateParamOption("currentPageNum", 1); } }; $scope.last = function () { var idx = $scope.model.getParamOption("currentPageNum"); var length = $scope.options.getPageSizeNum(); if (idx < length) $scope.model.updateParamOption("currentPageNum", length); }; $scope.previous = function () { var idx = $scope.model.getParamOption("currentPageNum"); var length = $scope.options.getPageSizeNum(); if (idx > 1) $scope.model.updateParamOption("currentPageNum", idx - 1); }; $scope.next = function () { var length = $scope.options.getPageSizeNum(); var idx = $scope.model.getParamOption("currentPageNum"); if (idx < length) { Kubernetes.eliminateChechBoxClick(); $scope.model.updateParamOption("currentPageNum", idx + 1); } }; $scope.$watch('options', function (newValue, oldValue) { if (newValue) { if (newValue.currentTableSize !== oldValue.currentTableSize) $scope.options.priorTableSize = oldValue.currentTableSize; else $scope.options.priorTableSize = newValue.currentTableSize; DataModel.updateModel(); } }, true); $scope.search = function () { $scope.model.updateParamOption("keyQuery", $scope.keyQuery); }; $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } /* 判断数据是否已挂载使用和正在迁移。 */ var message = Kubernetes.checkForMigration($scope.replicasModel.replicationControllers, $scope.model.transferTasks, $scope.tableConfig.selectedItems); if (message != "") { Configs.customAlert("提示", "操作失败:" + message + ",不能删除!", '', null, 0, "error"); return; } UI.multiItemConfirmActionDialog({ collection: selected, index: 'id', onClose: function (result) { var idColl = []; if (result) { angular.forEach(selected, function (select) { idColl.push(select.id); }); $http({ method: "POST", url: "/java/console/api/delete/data", params: { "data": idColl } }).success(function (data, status, headers, config) { //成功之后做一些事情 DataModel.updateModel(); }).error(function (data, status, headers, config) { }); } }, title: '是否需要删除采集数据?', action: '以下采集数据文件将会被删除:', okText: '删除', okClass: 'btn-danger sj_btn_cir', custom: "该删除操作将会彻底删除数据文件,是否删除,请确认!", customClass: "alert alert-warning sj_alert-warning", cancelText: "取消", cancelClass: 'sj_btn_grey' }).open(); }; $scope.migrationClick = { items: null, selectedItem: { "name": "当前没有可以迁移的集群" }, dialog: new UI.Dialog(), onOk: function () { var migrationClick = $scope.migrationClick; /* 向后台发生数据迁移请求,$http:发生http异步请求;第二个参数:请求url;第三个参数:请求操作类型;第四个参数:请求携带的数据;第五个参数: 一个回调函数,请求响应后的回调函数。 */ if (Kubernetes.alreadyExitInFolder($scope.tableConfig.selectedItems, $scope.selectNode)) { migrationClick.close(); Configs.customAlert("提示", "操作失败:" + "数据已在当前目录!", '', null, 0, "error"); return; } ; Configs.oracleInfoOperate($http, "/java/console/api/volume", Configs.OperateType.MOVE, { "name": migrationClick.selectedItem.name, "selectItems": $scope.tableConfig.selectedItems, "selectNode": $scope.selectNode }, function (result, status) { if (status === 200) { } else throw "资源请求失败"; }); /* 页面跳转 */ $timeout(function () { $location.path("/workspaces/Overview/task"); }, 250); migrationClick.close(); }, open: function (selected) { var migrationClick = $scope.migrationClick; /* 判断数据是否已挂载使用和正在迁移。 */ var message = Kubernetes.checkForMigration($scope.replicasModel.replicationControllers, $scope.model.transferTasks, $scope.tableConfig.selectedItems); if (message == "") { if ($scope.volumes && $scope.volumes instanceof Array && $scope.volumes.length > 0) migrationClick.selectedItem = $scope.volumes[0]; migrationClick.dialog.open(); } else { Configs.customAlert("提示", "操作失败:" + message + ", 不能迁移!", '', null, 0, "error"); } }, close: function () { $scope.migrationClick.selectedItem = { "name": "当前没有可以迁移的集群" }; $scope.migrationClick.dialog.close(); } }; $scope.createOracleService = function (items) { var exitedItems = Kubernetes.checkForCreateOracle($scope.model.transferTasks, items); if (exitedItems.length == 0) { angular.forEach(items, function (item) { var isExited = Kubernetes.checkForExit($scope.replicasModel.replicationControllers, item); if (!isExited) { Kubernetes.createRC({ name: item._key, labels: { system: item.systemCode.toString(), version: item.dataVersion.toString(), region: item.regionalismCode.toString() }, annotations: { cityName: item.cityName, districtName: item.districtName, systemName: item.systemName, id: item.id + "", year: item.year }, path: item.dataPath + "app/", isTarget: "false", isExtract: item.extractStatus }, function (rc) { Kubernetes.connectOracle($http, $timeout, "/java/console/api/connectOracle", "create", rc, 0); }); } }); $timeout(function () { $location.path('/kubernetes/namespace/default/replicationControllers'); }, 200); } else { var name = ""; angular.forEach(exitedItems, function (item) { name += item.name + "-" + item.systemName + ","; }); Configs.customAlert("提示", "操作失败: 正在迁移的数据不能被启动!", '', null, 0, "error"); } }; function init($scope, $location, $routeParams) { //$scope.model.updateModel(); $scope.keyQuery = ""; $scope.model.updateParamOption("keyQuery", $scope.keyQuery); if (ConfigsModel.cluster != null) $scope.volumes = ConfigsModel.cluster; //创建二级菜单 $scope.subTabConfig = Developer.createCurrentSubNavBar($scope, $location, $routeParams); $scope.navbarItems = [{ herf: "", label: "全部", title: "查看全部数据", class: "active", alias: null }, { herf: "", label: "批次A", title: "查看批次A的数据", class: "", alias: "A" }, { herf: "", label: "批次B", title: "查看批次B的数据", class: "", alias: "B" }]; } function getDataType($location) { var path = $location.path(); var dataType; var volumeType; var subPath = path.split("/"); switch (subPath[subPath.length - 1]) { case "financial": dataType = "财政"; break; case "social-security": dataType = "社保"; break; default: dataType = null; break; } ; switch (subPath[3]) { case "hot": volumeType = 0; break; default: volumeType = 1; } return { "dataType": dataType, "volumeType": volumeType }; } }]); })(Developer || (Developer = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.Apps = Kubernetes.controller("Apps", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesReplicationControllers", "KubernetesPods", "KubernetesState", "KubernetesApiURL", "$templateCache", "$location", "$routeParams", "$http", "$dialog", "$timeout", function ($scope, KubernetesModel, KubernetesServices, KubernetesReplicationControllers, KubernetesPods, KubernetesState, KubernetesApiURL, $templateCache, $location, $routeParams, $http, $dialog, $timeout) { $scope.model = KubernetesModel; $scope.apps = []; $scope.allApps = []; $scope.kubernetes = KubernetesState; $scope.fetched = false; $scope.json = ''; ControllerHelpers.bindModelToSearchParam($scope, $location, 'id', '_id', undefined); ControllerHelpers.bindModelToSearchParam($scope, $location, 'appSelectorShow', 'openApp', undefined); ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'detail'); var branch = $scope.branch || "master"; var namespace = null; function appMatches(app) { var filterText = $scope.appSelector.filterText; if (filterText) { return Core.matchFilterIgnoreCase(app.groupId, filterText) || Core.matchFilterIgnoreCase(app.artifactId, filterText) || Core.matchFilterIgnoreCase(app.name, filterText) || Core.matchFilterIgnoreCase(app.description, filterText); } else { return true; } } function appRunning(app) { return $scope.model.apps.any(function (running) { return running.appPath === app.appPath; }); } $scope.tableConfig = { data: 'model.apps', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$name', displayName: 'App', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appIconTemlate.html")) }, { field: '$servicesText', displayName: 'Services', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appServicesTemplate.html")) }, { field: '$replicationControllersText', displayName: 'Controllers', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appReplicationControllerTemplate.html")) }, { field: '$podCount', displayName: 'Pods', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appPodCountsAndLinkTemplate.html")) }, { field: '$creationDate', displayName: 'Deployed', cellTemplate: $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, "appDeployedTemplate.html")) } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.expandedPods = []; $scope.$on('do-resize', function ($event, controller) { $scope.resizeDialog.open(controller); }); $scope.podExpanded = function (pod) { var id = Kubernetes.getName(pod); return id && ($scope.expandedPods || []).indexOf(id) >= 0; }; $scope.expandPod = function (pod) { var id = Kubernetes.getName(pod); if (id) { $scope.expandedPods.push(id); } }; $scope.collapsePod = function (pod) { var id = Kubernetes.getName(pod); if (id) { _.remove($scope.expandedPods, function (v) { return id === v; }); } }; $scope.$on('$routeUpdate', function ($event) { Kubernetes.setJson($scope, $location.search()['_id'], $scope.model.apps); }); function deleteApp(app, onCompleteFn) { function deleteServices(services, service, onCompletedFn) { if (!service || !services) { return onCompletedFn(); } var id = Kubernetes.getName(service); if (!id) { Kubernetes.log.warn("No ID for service " + angular.toJson(service)); } else { KubernetesServices.delete({ id: id }, undefined, function () { Kubernetes.log.debug("Deleted service: ", id); deleteServices(services, services.shift(), onCompletedFn); }, function (error) { Kubernetes.log.debug("Error deleting service: ", error); deleteServices(services, services.shift(), onCompletedFn); }); } } function deleteReplicationControllers(replicationControllers, replicationController, onCompletedFn) { if (!replicationController || !replicationControllers) { return onCompletedFn(); } var id = Kubernetes.getName(replicationController); if (!id) { Kubernetes.log.warn("No ID for replicationController " + angular.toJson(replicationController)); } else { KubernetesReplicationControllers.delete({ id: id }, undefined, function () { Kubernetes.log.debug("Deleted replicationController: ", id); deleteReplicationControllers(replicationControllers, replicationControllers.shift(), onCompletedFn); }, function (error) { Kubernetes.log.debug("Error deleting replicationController: ", error); deleteReplicationControllers(replicationControllers, replicationControllers.shift(), onCompletedFn); }); } } function deletePods(pods, pod, onCompletedFn) { if (!pod || !pods) { return onCompletedFn(); } var id = Kubernetes.getName(pod); if (!id) { Kubernetes.log.warn("No ID for pod " + angular.toJson(pod)); } else { KubernetesPods.delete({ id: id }, undefined, function () { Kubernetes.log.debug("Deleted pod: ", id); deletePods(pods, pods.shift(), onCompletedFn); }, function (error) { Kubernetes.log.debug("Error deleting pod: ", error); deletePods(pods, pods.shift(), onCompletedFn); }); } } var services = [].concat(app.services); deleteServices(services, services.shift(), function () { var replicationControllers = [].concat(app.replicationControllers); deleteReplicationControllers(replicationControllers, replicationControllers.shift(), function () { var pods = [].concat(app.pods); deletePods(pods, pods.shift(), onCompleteFn); }); }); } $scope.deleteSingleApp = function (app) { $scope.deletePrompt([app]); }; $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { var id = next.name; Kubernetes.log.debug("deleting: ", id); deleteApp(next, function () { Kubernetes.log.debug("deleted: ", id); deleteSelected(selected, selected.shift()); }); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Apps?', action: 'The following Apps will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; $scope.appSelector = { filterText: "", folders: [], selectedApps: [], isOpen: function (folder) { if ($scope.appSelector.filterText !== '' || folder.expanded) { return "opened"; } return "closed"; }, getSelectedClass: function (app) { if (app.abstract) { return "abstract"; } if (app.selected) { return "selected"; } return ""; }, showApp: function (app) { return appMatches(app) && !appRunning(app); }, showFolder: function (folder) { return !$scope.appSelector.filterText || folder.apps.some(function (app) { return appMatches(app) && !appRunning(app); }); }, clearSelected: function () { angular.forEach($scope.model.appFolders, function (folder) { angular.forEach(folder.apps, function (app) { app.selected = false; }); }); $scope.appSelector.selectedApps = []; Core.$apply($scope); }, updateSelected: function () { // lets update the selected apps var selectedApps = []; angular.forEach($scope.model.appFolders, function (folder) { var apps = folder.apps.filter(function (app) { return app.selected; }); if (apps) { selectedApps = selectedApps.concat(apps); } }); $scope.appSelector.selectedApps = _.sortBy(selectedApps, "name"); }, select: function (app, flag) { app.selected = flag; $scope.appSelector.updateSelected(); }, hasSelection: function () { return $scope.model.appFolders.any(function (folder) { return folder.apps.any(function (app) { return app.selected; }); }); }, runSelectedApps: function () { // lets run all the selected apps angular.forEach($scope.appSelector.selectedApps, function (app) { var name = app.name; var metadataPath = app.metadataPath; if (metadataPath) { // lets load the json/yaml //var url = gitPathToUrl(Wiki.gitRelativeURL(branch, metadataPath)); var url = Kubernetes.gitPathToUrl(metadataPath, branch); if (url) { $http.get(url). success(function (data, status, headers, config) { if (data) { // lets convert the json object structure into a string var json = angular.toJson(data); var fn = function () { }; Kubernetes.runApp($location, $scope, $http, KubernetesApiURL, json, name, fn, namespace); } }). error(function (data, status, headers, config) { $scope.summaryHtml = null; Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } } }); // lets go back to the apps view $scope.appSelector.clearSelected(); $scope.appSelectorShow = false; } }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes._module.directive("hawtioBreadcrumbs", ['HawtioBreadcrumbs', function (HawtioBreadcrumbs) { return { /* templateUrl: Kubernetes.templatePath + 'breadcrumbs.html' */ link: function (scope, element, attrs) { HawtioBreadcrumbs.apply(scope.$eval('breadcrumbConfig')); } }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildController = Kubernetes.controller("BuildController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_build_Build; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id, null, $scope); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.buildRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = Kubernetes.enrichBuild(data); } $scope.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildConfigController = Kubernetes.controller("BuildConfigController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.id); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.id); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.buildConfigRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = data; var sortedBuilds = null; Kubernetes.enrichBuildConfig(data, sortedBuilds); $scope.model.setProject($scope.entity); } $scope.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildConfigEditController = Kubernetes._module.controller("Kubernetes.BuildConfigEditController", ["$scope", "$element", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "K8SClientFactory", "SchemaRegistry", function ($scope, $element, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, K8SClientFactory, SchemaRegistry) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["project"] || $routeParams["id"]; $scope.schema = KubernetesSchema; var mode = $scope.$eval('mode') || 'edit'; Kubernetes.log.debug("Mode: ", mode); var specConfig = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildConfigSpec'); var gitBuildSource = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.GitBuildSource'); var buildSource = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildSource'); var buildOutput = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildOutput'); var resources = SchemaRegistry.getSchema('io.fabric8.kubernetes.api.model.ResourceRequirements'); var revision = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.SourceRevision'); var strategy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildStrategy'); var customStrategy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.CustomBuildStrategy'); var buildTriggerPolicy = SchemaRegistry.getSchema('io.fabric8.openshift.api.model.BuildTriggerPolicy'); var getSecrets = function () { return $scope.secrets; }; var secretSchemaType = "fabric8_SecretReference"; var secretSchemaRef = "#/definitions/" + secretSchemaType; var secretSchemaJavaType = "io.fabric8.console.SecretReference"; var secretNameElement = { "type": "string", "enum": getSecrets, required: true }; var secretSchema = { "type": "object", properties: { "name": secretNameElement }, javaType: secretSchemaJavaType }; SchemaRegistry.addSchema(secretSchemaType, secretSchema); // lets switch to the new secrets types: var sourceSecretProperty = Core.pathGet(buildSource, ["properties", "sourceSecret"]); angular.forEach([ Core.pathGet(customStrategy, ["properties", "pullSecret"]), sourceSecretProperty, ], function (schemaType) { if (schemaType) { schemaType["type"] = secretSchemaType; schemaType["$ref"] = secretSchemaRef; schemaType["javaType"] = secretSchemaJavaType; } }); // lets try make the buildSource's sourceSecret mandatory //schemaSetRequired(customStrategy, 'pullSecret'); Kubernetes.schemaSetRequired(buildSource, 'sourceSecret'); if (sourceSecretProperty) { Core.pathSet(sourceSecretProperty, ['properties', 'required'], true); Core.pathSet(sourceSecretProperty, ['properties', 'input-attributes', 'required'], true); } $scope.customStrategy = customStrategy; $scope.buildSource = buildSource; $scope.secrets = []; // $scope.config = KubernetesSchema.definitions.os_build_BuildConfig; //$scope.specConfig = KubernetesSchema.definitions.os_build_BuildConfigSpec; // specConfig.style = HawtioForms.FormStyle.STANDARD; specConfig.properties['triggers']['label-attributes'] = { style: 'display: none;' }; gitBuildSource.controls = ['uri', 'ref', '*']; buildSource.properties['type'].type = 'hidden'; buildSource.properties['type']['default'] = 'Git'; buildSource.controls = ['git', 'contextDir', 'sourceSecret', '*']; gitBuildSource['hideLegend'] = true; buildSource['hideLegend'] = true; buildOutput['hideLegend'] = true; resources['hideLegend'] = true; revision['hideLegend'] = true; strategy['hideLegend'] = true; strategy.controls = ['type', '*']; strategy.properties['type'] = { type: 'text', enum: [{ 'value': 'Custom', 'label': 'Custom' }, { 'value': 'Docker', 'label': 'Docker' }, { 'value': 'Source', 'label': 'Source' }] }; customStrategy['control-group-attributes'] = { 'ng-show': "entity.type == 'Custom'" }; strategy.properties['dockerStrategy']['control-group-attributes'] = { 'ng-show': "entity.type == 'Docker'" }; strategy.properties['sourceStrategy']['control-group-attributes'] = { 'ng-show': "entity.type == 'Source'" }; buildTriggerPolicy.controls = ['type', '*']; buildTriggerPolicy.properties['type'] = { type: 'string', enum: [{ 'value': 'Github', 'label': 'Github' }, { 'value': 'ImageChange', 'label': 'Image Change' }, { 'value': 'Generic', 'label': 'Generic' }] }; buildTriggerPolicy.properties['generic']['control-group-attributes'] = { 'ng-show': "entity.type == 'Generic'" }; buildTriggerPolicy.properties['github']['control-group-attributes'] = { 'ng-show': "entity.type == 'Github'" }; buildTriggerPolicy.properties['imageChange']['control-group-attributes'] = { 'ng-show': "entity.type == 'ImageChange'" }; // re-arranging the controls //specConfig.controls = ['source', '*']; // tabs specConfig.tabs = { "Source": ["source"], "Revision": ["revision"], "Output": ["output"], "Resources": ["resources"], "Strategy": ["strategy"], "Triggers": ["triggers"], "Service Account": ["serviceAccount"] }; /* * wizard, needs an 'onFinish' function in the scope specConfig.wizard = { pages: { Source: { controls: ["source"] }, Revision: { controls: ["revision"] }, Output: { controls: ["output"] }, Resources: { controls: ["resources"] }, Strategy: { controls: ["strategy"] }, Triggers: { controls: ["triggers"] }, "Service Account": { controls: ["serviceAccount"] } } }; */ $scope.entity = { "apiVersion": "v1", "kind": "BuildConfig", "metadata": { "name": "", "labels": {} }, "spec": { "source": { "type": "Git" }, "strategy": { "type": "Custom", "customStrategy": { "from": { "kind": "DockerImage", "name": "fabric8/openshift-s2i-jenkins-trigger" }, "env": [ { "name": "BASE_URI", "value": jenkinsUrl }, { "name": "JOB_NAME", "value": jobName } ] } } } }; $scope.$watch('entity.spec.source.git.uri', function (val) { if (!val) { return; } var lastBit = val.match(/[^\/]+$/)[0]; if (lastBit) { var name = lastBit.replace(/\.git$/, ''); Kubernetes.log.debug("name: ", name); if (!Core.isBlank(name) && Core.isBlank(Core.pathGet($scope.entity, ['metadata', 'name']))) { Core.pathSet($scope.entity, ['metadata', 'name'], name); } } }); Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectSettingsBreadcrumbs($scope.projectId); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId); $scope.tabs = Developer.createProjectSettingsSubNavBars($scope.projectId); Kubernetes.watch($scope, $element, "secrets", $scope.namespace, onSecrets); $scope.buildConfigClient = K8SClientFactory.create("buildconfigs", $scope.namespace); $element.on('$destroy', function () { $scope.$destroy(); }); $scope.$on('$destroy', function () { K8SClientFactory.destroy($scope.buildConfigClient); }); /* $scope.$on('kubernetesModelUpdated', function () { updateData(); }); */ $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.save = function () { Kubernetes.log.info("Saving!"); var entity = $scope.entity; var spec = (entity || {}).spec || {}; // TODO update the jenkins job name! // lets delete lots of cruft var strategy = spec.strategy || {}; delete strategy["dockerStrategy"]; delete strategy["sourceStrategy"]; delete spec["revision"]; delete spec["output"]; delete spec["resources"]; var strategyPullSecretName = Core.pathGet(spec, ["strategy", "customStrategy", "pullSecret", "name"]); var sourceSecretName = Core.pathGet(spec, ["source", "sourceSecret", "name"]); Kubernetes.log.info("sourceSecretName: " + sourceSecretName); Kubernetes.log.info("strategyPullSecretName: " + strategyPullSecretName); if (!strategyPullSecretName && sourceSecretName) { Core.pathSet(spec, ["strategy", "customStrategy", "pullSecret", "name"], sourceSecretName); } /* // TODO hack until the put deals with updates var metadata = entity.metadata; if (metadata) { delete metadata["resourceVersion"]; } */ Kubernetes.log.info(angular.toJson(entity, true)); $scope.buildConfigClient.put(entity, function (obj) { Kubernetes.log.info("build config created!"); var link = Developer.projectSecretsLink($scope.namespace, Kubernetes.getName(entity)); if (link) { Kubernetes.log.info("Navigating to: " + link); $location.path(link); } else { Kubernetes.log.warn("Could not find the edit pipeline link!"); } }); }; updateData(); var jenkinsUrl = Developer.jenkinsLink(); var jobName = ""; function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.buildConfigRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = data; var buildConfig = angular.copy(data); var sortedBuilds = null; Kubernetes.enrichBuildConfig(buildConfig, sortedBuilds); $scope.buildConfig = buildConfig; } $scope.spec = ($scope.entity || {}).spec || {}; $scope.fetched = true; // lets update the tabs $scope.subTabConfig = Developer.createProjectSubNavBars($scope.projectId, null, $scope); Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.fetched = true; $scope.spec = $scope.entity.spec; Core.$apply($scope); } } function onSecrets(secrets) { var array = []; angular.forEach(secrets, function (secret) { var name = Kubernetes.getName(secret); if (name) { array.push({ label: name, value: name, "attributes": { "title": name }, $secret: secret }); } }); $scope.secrets = _.sortBy(array, "label"); var specSourceSecretNamePath = ['spec', 'source', 'sourceSecret', 'name']; if ($scope.entity && !Core.pathGet($scope.entity, specSourceSecretNamePath)) { var defaultSecretName = findDefaultImportSecretName(secrets); Core.pathSet($scope.entity, specSourceSecretNamePath, defaultSecretName); } } function findDefaultImportSecretName(secrets) { var answer = null; angular.forEach(secrets, function (secret) { var name = Kubernetes.getName(secret); if (!answer && name && name.startsWith("jenkins-login")) { answer = name; } }); if (!answer) { angular.forEach(secrets, function (secret) { var name = Kubernetes.getName(secret); if (!answer && name && name.startsWith("jenkins-token")) { answer = name; } }); } return answer; } switch (mode) { case 'create': delete specConfig.tabs; _.forIn(buildSource.properties, function (property, name) { if (name !== 'git') { Kubernetes.log.info("Hiding property: ", name); property.hidden = true; } }); _.forIn(gitBuildSource.properties, function (property, name) { if (name !== 'uri') { Kubernetes.log.info("Hiding property: ", name); property.hidden = true; } else { property.label = "Git URL"; property['input-attributes'] = { 'required': true }; } }); _.forIn(specConfig.properties, function (property, name) { if (name !== 'source') { Kubernetes.log.info("Hiding property: ", name); property.hidden = true; } }); break; case 'edit': default: } $scope.specConfig = specConfig; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildConfigsController = Kubernetes.controller("BuildConfigsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.tableConfig = { data: 'model.buildconfigs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'metadata.name', displayName: 'Name', cellTemplate: $templateCache.get("buildConfigLinkTemplate.html") }, /* { field: 'spec.source.type', displayName: 'Source' }, */ { field: 'spec.source.git.uri', displayName: 'Repository' }, /* { field: 'spec.strategy.type', displayName: 'Strategy' }, { field: 'spec.strategy.stiStrategy.image', displayName: 'Source Image' }, { field: 'spec.output.imageTag', displayName: 'Output Image' }, */ { field: '$fabric8CodeViews', displayName: 'Code', width: "***", minWidth: 500, cellTemplate: $templateCache.get("buildConfigCodeViewsTemplate.html") }, { field: '$fabric8BuildViews', displayName: 'Builds', width: "***", minWidth: 500, cellTemplate: $templateCache.get("buildConfigBuildViewsTemplate.html") }, { field: '$fabric8EnvironmentViews', displayName: 'Environments', width: "***", minWidth: 500, cellTemplate: $templateCache.get("buildConfigEnvironmentViewsTemplate.html") }, { field: '$fabric8TeamViews', displayName: 'People', width: "***", minWidth: 500, cellTemplate: $templateCache.get("buildConfigTeamViewsTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); // TODO // $scope.isLoggedIntoGogs = Forge.isLoggedIntoGogs; $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } else { updateData(); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Build Configs?', action: 'The following Build Configs will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; function deleteEntity(selection, nextCallback) { var name = (selection || {}).$name; if (name) { console.log("About to delete build config: " + name); var url = Kubernetes.buildConfigRestUrl(name); $http.delete(url). success(function (data, status, headers, config) { nextCallback(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to delete build config on " + url + " " + data + " " + status); }); } else { console.log("warning: no name for selection: " + angular.toJson(selection)); } } function updateData() { } updateData(); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildLogsController = Kubernetes.controller("BuildLogsController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_build_Build; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.logsText = "Loading logs..."; updateData(); function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.buildRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = Kubernetes.enrichBuild(data); } $scope.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); url = Kubernetes.buildLogsRestUrl($scope.id); $http.get(url). success(function (data, status) { $scope.logsText = data; Core.$apply($scope); }). error(function (data, status) { $scope.logsText = "Failed to load logs from: " + url + " " + data + " status: " + status; Core.$apply($scope); }). catch(function (error) { $scope.logsText = "Failed to load logs: " + angular.toJson(error, true); Core.$apply($scope); }); } else { $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.BuildsController = Kubernetes.controller("BuildsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.buildConfigId = $routeParams["id"]; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.tableConfig = { data: 'model.builds', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'metadata.name', displayName: 'Name', cellTemplate: $templateCache.get("buildLinkTemplate.html") }, { field: '$creationDate', displayName: 'Time', defaultSort: true, cellTemplate: $templateCache.get("buildTimeTemplate.html") }, { field: 'status', displayName: 'Status', cellTemplate: $templateCache.get("buildStatusTemplate.html") }, { field: '$logsLink', displayName: 'Logs', cellTemplate: $templateCache.get("buildLogsTemplate.html") }, { field: '$podLink', displayName: 'Build Pod', cellTemplate: $templateCache.get("buildPodTemplate.html") }, /* { field: 'parameters.source.type', displayName: 'Source' }, */ { field: 'spec.source.git.uri', displayName: 'Repository', cellTemplate: $templateCache.get("buildRepositoryTemplate.html") }, { field: 'spec.strategy.type', displayName: 'Strategy' }, { field: 'spec.strategy.sourceStrategy.from.name', displayName: 'Source Image' }, { field: 'spec.output.to.name', displayName: 'Output Image' }] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.breadcrumbConfig = Developer.createProjectBreadcrumbs($scope.buildConfigId); $scope.subTabConfig = Developer.createProjectSubNavBars($scope.buildConfigId, null, $scope); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); function updateData() { if ($scope.model) { var builds = $scope.model.builds; var buildConfigId = $scope.buildConfigId; Kubernetes.enrichBuilds(builds); $scope.fetched = true; if (buildConfigId) { $scope.buildConfig = $scope.model.getBuildConfig(buildConfigId); } } } updateData(); /* $scope.$keepPolling = () => keepPollingModel; $scope.fetch = PollHelpers.setupPolling($scope, (next:() => void) => { var url = buildsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { //console.log("got data " + angular.toJson(data, true)); $scope.builds = enrichBuilds(data.items); $scope.fetched = true; if ($scope.model) { $scope.buildConfig = $scope.model.getBuildConfig($scope.buildConfigId); } } Core.$apply($scope); next(); }). error(function (data, status, headers, config) { log.warn("Failed to load " + url + " " + data + " " + status); Core.$apply($scope); next(); }); }); $scope.fetch(); */ }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { // controller for connecting to a remote container via jolokia Kubernetes.ConnectController = Kubernetes.controller("ConnectController", [ "$scope", "localStorage", "userDetails", "ConnectDialogService", "$browser", function ($scope, localStorage, userDetails, ConnectDialogService, $browser) { $scope.doConnect = function (entity) { var connectUrl = new URI().path(UrlHelpers.join(HawtioCore.documentBase(), '/java/index.html')); var returnTo = new URI().toString(); var title = entity.metadata.name || 'Untitled Container'; var token = userDetails.token || ''; connectUrl.hash(token).query({ jolokiaUrl: entity.$jolokiaUrl, title: title, returnTo: returnTo }); Kubernetes.log.debug("Connect URI: ", connectUrl.toString()); window.open(connectUrl.toString()); }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.DeploymentConfigController = Kubernetes.controller("DeploymentConfigController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = KubernetesSchema.definitions.os_deploy_DeploymentConfig; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { $scope.item = null; if ($scope.id) { var url = Kubernetes.deploymentConfigRestUrl($scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.entity = data; Kubernetes.enrichDeploymentConfig(data); } $scope.fetched = true; Core.$apply($scope); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.DeploymentConfigsController = Kubernetes.controller("DeploymentConfigsController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.labelClass = Kubernetes.containerLabelClass; $scope.tableConfig = { data: 'deploymentConfigs', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'metadata.name', displayName: 'Name', cellTemplate: $templateCache.get("deploymentConfigLinkTemplate.html") }, { field: 'metadata.namespace', displayName: 'Namespace' }, { field: '$imageChangeParams.automatic', displayName: 'Automatic' }, { field: '$imageChangeParams.$containerNames', displayName: 'Container Names' }, { field: '$imageChangeParams.from.name', displayName: 'From image' }, { field: '$imageChangeParams.tag', displayName: 'Tag' }, { field: 'template.controllerTemplate.podTemplate.tags', displayName: 'Labels', cellTemplate: $templateCache.get("deploymentConfigLabelTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } else { updateData(); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Deployment?', action: 'The following Deployments will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; function deleteEntity(selection, nextCallback) { var name = (selection || {}).$name; if (name) { console.log("About to delete deployment config: " + name); var url = Kubernetes.deploymentConfigRestUrl(name); $http.delete(url). success(function (data, status, headers, config) { nextCallback(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to delete deployment config on " + url + " " + data + " " + status); }); } else { console.log("warning: no name for selection: " + angular.toJson(selection)); } } function updateData() { var url = Kubernetes.deploymentConfigsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { //console.log("got data " + angular.toJson(data, true)); $scope.deploymentConfigs = Kubernetes.enrichDeploymentConfigs(data.items); $scope.fetched = true; Core.$apply($scope); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } updateData(); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.EventsController = Kubernetes.controller("EventsController", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesServices, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'list'); $scope.tableConfig = { data: 'model.events', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$firstTimestamp', displayName: 'First Seen', cellTemplate: $templateCache.get("firstTimestampTemplate.html") }, { field: '$lastTimestamp', displayName: 'Last Seen', cellTemplate: $templateCache.get("lastTimestampTemplate.html") }, { field: 'count', displayName: 'Count' }, { field: 'involvedObject.name', displayName: 'Name', cellTemplate: $templateCache.get("eventNameTemplate.html") }, { field: 'involvedObject.kind', displayName: 'Kind', cellTemplate: $templateCache.get("eventKindTemplate.html") }, { field: 'involvedObject.fieldPath', displayName: 'Subject' }, { field: 'reason', displayName: 'Reason' }, { field: 'source', displayName: 'Source', cellTemplate: $templateCache.get("eventSourceTemplate.html") }, { field: 'message', displayName: 'Message' } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.HostController = Kubernetes.controller("HostController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.rawModel = null; $scope.itemConfig = { properties: {} }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.flipRaw = function () { $scope.rawMode = !$scope.rawMode; Core.$apply($scope); }; updateData(); function updateData() { $scope.id = $routeParams["id"]; $scope.item = null; if ($scope.id) { var url = UrlHelpers.join(KubernetesApiURL, "nodes", $scope.id); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.item = data; } if ($scope.item) { $scope.rawModel = Kubernetes.toRawYaml($scope.item); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } else { $scope.rawModel = null; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.HostsController = Kubernetes.controller("HostsController", ["$scope", "KubernetesModel", "KubernetesPods", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesPods, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.tableConfig = { data: 'model.hosts', showSelectionCheckbox: false, enableRowClickSelection: false, multiSelect: false, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'id', displayName: 'Name', defaultSort: true, cellTemplate: $templateCache.get("idTemplate.html") }, { field: 'hostIP', displayName: 'IP', customSortField: function (field) { // use a custom sort to sort ip address return Kubernetes.sortByPodIp(field.hostIP); } }, { field: '$podsLink', displayName: 'Pods', cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), customSortField: function (field) { // need to concat all the pod counters var ready = field.$podCounters.ready || 0; var valid = field.$podCounters.valid || 0; var waiting = field.$podCounters.waiting || 0; var error = field.$podCounters.error || 0; return ready + valid + waiting + error; } } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ImageRepositoriesController = Kubernetes.controller("ImageRepositoriesController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.tableConfig = { data: 'imageRepositories', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: 'metadata.name', displayName: 'Name' }, { field: 'metadata.namespace', displayName: 'Namespace' }, { field: 'status.dockerImageRepository', displayName: 'Docker Registry' }, { field: 'tags', displayName: 'Tags', cellTemplate: $templateCache.get('imageRegistryLabelTemplate.html') } ] }; var labelColors = { 'prod': 'background-blue', 'valid': 'background-light-green', 'test': 'background-light-grey' }; $scope.labelClass = function (labelType) { if (!(labelType in labelColors)) { return 'mouse-pointer'; } else return labelColors[labelType] + ' mouse-pointer'; }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: '$name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { deleteEntity(next, function () { deleteSelected(selected, selected.shift()); }); } else { updateData(); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Image Repository?', action: 'The following Image Repositories will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; function deleteEntity(selection, nextCallback) { var name = (selection || {}).$name; if (name) { console.log("About to delete image repository: " + name); var url = Kubernetes.imageRepositoryRestUrl(name); $http.delete(url). success(function (data, status, headers, config) { nextCallback(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to delete image repository on " + url + " " + data + " " + status); }); } else { console.log("warning: no name for selection: " + angular.toJson(selection)); } } function updateData() { var url = Kubernetes.imageRepositoriesRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { //console.log("got data " + angular.toJson(data, true)); $scope.imageRepositories = Kubernetes.enrichImageRepositories(data.items); $scope.fetched = true; Core.$apply($scope); } }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); }); } updateData(); }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { function selectSubNavBar($scope, tabName, newSubTabLabel) { var foundTab = null; angular.forEach($scope.subTabConfig, function (tab) { if (tabName === tab.label || tabName === tab.id) { foundTab = tab; } }); var breadcrumbConfig = $scope.breadcrumbConfig; if (foundTab && breadcrumbConfig) { breadcrumbConfig.push(foundTab); $scope.subTabConfig = [ { label: newSubTabLabel } ]; } } Kubernetes.selectSubNavBar = selectSubNavBar; })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { Kubernetes.schema = { "id": "http://fabric8.io/fabric8/v2/Schema#", "$schema": "http://json-schema.org/schema#", "definitions": { "api_RootPaths": { "type": "object", "description": "", "properties": { "paths": { "type": "array", "description": "", "items": { "type": "string", "description": "" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.RootPaths" }, "kubernetes_AWSElasticBlockStoreVolumeSource": { "type": "object", "description": "", "properties": { "fsType": { "type": "string", "description": "file system type to mount" }, "partition": { "type": "integer", "description": "partition on the disk to mount (e.g." }, "readOnly": { "type": "boolean", "description": "read-only if true" }, "volumeID": { "type": "string", "description": "unique id of the PD resource in AWS; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#awselasticblockstore" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "kubernetes_Capabilities": { "type": "object", "description": "", "properties": { "add": { "type": "array", "description": "added capabilities", "items": { "type": "string", "description": "added capabilities" } }, "drop": { "type": "array", "description": "droped capabilities", "items": { "type": "string", "description": "droped capabilities" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Capabilities" }, "kubernetes_CephFSVolumeSource": { "type": "object", "description": "", "properties": { "monitors": { "type": "array", "description": "a collection of Ceph monitors", "items": { "type": "string", "description": "a collection of Ceph monitors" } }, "readOnly": { "type": "boolean", "description": "Ceph fs to be mounted with read-only permissions" }, "secretFile": { "type": "string", "description": "path to secret for rados user; default is /etc/ceph/user.secret; optional" }, "secretRef": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "user": { "type": "string", "description": "rados user name; default is admin; optional" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "kubernetes_Container": { "type": "object", "description": "", "properties": { "args": { "type": "array", "description": "command array; the docker image's cmd is used if this is not provided; arguments to the entrypoint; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved", "items": { "type": "string", "description": "command array; the docker image's cmd is used if this is not provided; arguments to the entrypoint; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved" } }, "command": { "type": "array", "description": "entrypoint array; not executed within a shell; the docker image's entrypoint is used if this is not provided; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved", "items": { "type": "string", "description": "entrypoint array; not executed within a shell; the docker image's entrypoint is used if this is not provided; cannot be updated; variable references $(VAR_NAME) are expanded using the container's environment variables; if a variable cannot be resolved" } }, "env": { "type": "array", "description": "list of environment variables to set in the container; cannot be updated", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "image": { "type": "string", "description": "Docker image name; see http://releases.k8s.io/HEAD/docs/user-guide/images.md" }, "imagePullPolicy": { "type": "string", "description": "image pull policy; one of Always" }, "lifecycle": { "$ref": "#/definitions/kubernetes_Lifecycle", "javaType": "io.fabric8.kubernetes.api.model.Lifecycle" }, "livenessProbe": { "$ref": "#/definitions/kubernetes_Probe", "javaType": "io.fabric8.kubernetes.api.model.Probe" }, "name": { "type": "string", "description": "name of the container; must be a DNS_LABEL and unique within the pod; cannot be updated", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "ports": { "type": "array", "description": "list of ports to expose from the container; cannot be updated", "items": { "$ref": "#/definitions/kubernetes_ContainerPort", "javaType": "io.fabric8.kubernetes.api.model.ContainerPort" } }, "readinessProbe": { "$ref": "#/definitions/kubernetes_Probe", "javaType": "io.fabric8.kubernetes.api.model.Probe" }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "securityContext": { "$ref": "#/definitions/kubernetes_SecurityContext", "javaType": "io.fabric8.kubernetes.api.model.SecurityContext" }, "stdin": { "type": "boolean", "description": "Whether this container should allocate a buffer for stdin in the container runtime; default is false" }, "terminationMessagePath": { "type": "string", "description": "path at which the file to which the container's termination message will be written is mounted into the container's filesystem; message written is intended to be brief final status" }, "tty": { "type": "boolean", "description": "Whether this container should allocate a TTY for itself" }, "volumeMounts": { "type": "array", "description": "pod volumes to mount into the container's filesyste; cannot be updated", "items": { "$ref": "#/definitions/kubernetes_VolumeMount", "javaType": "io.fabric8.kubernetes.api.model.VolumeMount" } }, "workingDir": { "type": "string", "description": "container's working directory; defaults to image's default; cannot be updated" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Container" }, "kubernetes_ContainerPort": { "type": "object", "description": "", "properties": { "containerPort": { "type": "integer", "description": "number of port to expose on the pod's IP address" }, "hostIP": { "type": "string", "description": "host IP to bind the port to" }, "hostPort": { "type": "integer", "description": "number of port to expose on the host; most containers do not need this" }, "name": { "type": "string", "description": "name for the port that can be referred to by services; must be an IANA_SVC_NAME and unique within the pod" }, "protocol": { "type": "string", "description": "protocol for port; must be UDP or TCP; TCP if unspecified" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerPort" }, "kubernetes_ContainerState": { "type": "object", "description": "", "properties": { "running": { "$ref": "#/definitions/kubernetes_ContainerStateRunning", "javaType": "io.fabric8.kubernetes.api.model.ContainerStateRunning" }, "terminated": { "$ref": "#/definitions/kubernetes_ContainerStateTerminated", "javaType": "io.fabric8.kubernetes.api.model.ContainerStateTerminated" }, "waiting": { "$ref": "#/definitions/kubernetes_ContainerStateWaiting", "javaType": "io.fabric8.kubernetes.api.model.ContainerStateWaiting" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerState" }, "kubernetes_ContainerStateRunning": { "type": "object", "description": "", "properties": { "startedAt": { "type": "string", "description": "time at which the container was last (re-)started" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerStateRunning" }, "kubernetes_ContainerStateTerminated": { "type": "object", "description": "", "properties": { "containerID": { "type": "string", "description": "container's ID in the format 'docker://\u003ccontainer_id\u003e'" }, "exitCode": { "type": "integer", "description": "exit status from the last termination of the container" }, "finishedAt": { "type": "string", "description": "time at which the container last terminated" }, "message": { "type": "string", "description": "message regarding the last termination of the container" }, "reason": { "type": "string", "description": "(brief) reason from the last termination of the container" }, "signal": { "type": "integer", "description": "signal from the last termination of the container" }, "startedAt": { "type": "string", "description": "time at which previous execution of the container started" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerStateTerminated" }, "kubernetes_ContainerStateWaiting": { "type": "object", "description": "", "properties": { "reason": { "type": "string", "description": "(brief) reason the container is not yet running" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerStateWaiting" }, "kubernetes_ContainerStatus": { "type": "object", "description": "", "properties": { "containerID": { "type": "string", "description": "container's ID in the format 'docker://\u003ccontainer_id\u003e'; see http://releases.k8s.io/HEAD/docs/user-guide/container-environment.md#container-information" }, "image": { "type": "string", "description": "image of the container; see http://releases.k8s.io/HEAD/docs/user-guide/images.md" }, "imageID": { "type": "string", "description": "ID of the container's image" }, "lastState": { "$ref": "#/definitions/kubernetes_ContainerState", "javaType": "io.fabric8.kubernetes.api.model.ContainerState" }, "name": { "type": "string", "description": "name of the container; must be a DNS_LABEL and unique within the pod; cannot be updated", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "ready": { "type": "boolean", "description": "specifies whether the container has passed its readiness probe" }, "restartCount": { "type": "integer", "description": "the number of times the container has been restarted" }, "state": { "$ref": "#/definitions/kubernetes_ContainerState", "javaType": "io.fabric8.kubernetes.api.model.ContainerState" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" }, "kubernetes_EmptyDirVolumeSource": { "type": "object", "description": "", "properties": { "medium": { "type": "string", "description": "type of storage used to back the volume; must be an empty string (default) or Memory; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#emptydir" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" }, "kubernetes_EndpointAddress": { "type": "object", "description": "", "properties": { "ip": { "type": "string", "description": "IP address of the endpoint" }, "targetRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EndpointAddress" }, "kubernetes_EndpointPort": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of this port", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "port": { "type": "integer", "description": "port number of the endpoint" }, "protocol": { "type": "string", "description": "protocol for this port; must be UDP or TCP; TCP if unspecified" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EndpointPort" }, "kubernetes_EndpointSubset": { "type": "object", "description": "", "properties": { "addresses": { "type": "array", "description": "IP addresses which offer the related ports", "items": { "$ref": "#/definitions/kubernetes_EndpointAddress", "javaType": "io.fabric8.kubernetes.api.model.EndpointAddress" } }, "ports": { "type": "array", "description": "port numbers available on the related IP addresses", "items": { "$ref": "#/definitions/kubernetes_EndpointPort", "javaType": "io.fabric8.kubernetes.api.model.EndpointPort" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EndpointSubset" }, "kubernetes_Endpoints": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Endpoints", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "subsets": { "type": "array", "description": "sets of addresses and ports that comprise a service", "items": { "$ref": "#/definitions/kubernetes_EndpointSubset", "javaType": "io.fabric8.kubernetes.api.model.EndpointSubset" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Endpoints", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_EndpointsList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of endpoints", "items": { "$ref": "#/definitions/kubernetes_Endpoints", "javaType": "io.fabric8.kubernetes.api.model.Endpoints" } }, "kind": { "type": "string", "description": "", "default": "EndpointsList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EndpointsList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_EnvVar": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the environment variable; must be a C_IDENTIFIER", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" }, "value": { "type": "string", "description": "value of the environment variable; defaults to empty string; variable references $(VAR_NAME) are expanded using the previously defined environment varibles in the container and any service environment variables; if a variable cannot be resolved" }, "valueFrom": { "$ref": "#/definitions/kubernetes_EnvVarSource", "javaType": "io.fabric8.kubernetes.api.model.EnvVarSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EnvVar" }, "kubernetes_EnvVarSource": { "type": "object", "description": "", "properties": { "fieldRef": { "$ref": "#/definitions/kubernetes_ObjectFieldSelector", "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EnvVarSource" }, "kubernetes_Event": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "count": { "type": "integer", "description": "the number of times this event has occurred" }, "firstTimestamp": { "type": "string", "description": "the time at which the event was first recorded" }, "involvedObject": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "kind": { "type": "string", "description": "", "default": "Event", "required": true }, "lastTimestamp": { "type": "string", "description": "the time at which the most recent occurrence of this event was recorded" }, "message": { "type": "string", "description": "human-readable description of the status of this operation" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "reason": { "type": "string", "description": "short" }, "source": { "$ref": "#/definitions/kubernetes_EventSource", "javaType": "io.fabric8.kubernetes.api.model.EventSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Event", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_EventList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of events", "items": { "$ref": "#/definitions/kubernetes_Event", "javaType": "io.fabric8.kubernetes.api.model.Event" } }, "kind": { "type": "string", "description": "", "default": "EventList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EventList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_EventSource": { "type": "object", "description": "", "properties": { "component": { "type": "string", "description": "component that generated the event" }, "host": { "type": "string", "description": "name of the host where the event is generated" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.EventSource" }, "kubernetes_ExecAction": { "type": "object", "description": "", "properties": { "command": { "type": "array", "description": "command line to execute inside the container; working directory for the command is root ('/') in the container's file system; the command is exec'd", "items": { "type": "string", "description": "command line to execute inside the container; working directory for the command is root ('/') in the container's file system; the command is exec'd" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ExecAction" }, "kubernetes_GCEPersistentDiskVolumeSource": { "type": "object", "description": "", "properties": { "fsType": { "type": "string", "description": "file system type to mount" }, "partition": { "type": "integer", "description": "partition on the disk to mount (e.g." }, "pdName": { "type": "string", "description": "unique name of the PD resource in GCE; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#gcepersistentdisk" }, "readOnly": { "type": "boolean", "description": "read-only if true" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "kubernetes_GitRepoVolumeSource": { "type": "object", "description": "", "properties": { "repository": { "type": "string", "description": "repository URL" }, "revision": { "type": "string", "description": "commit hash for the specified revision" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" }, "kubernetes_GlusterfsVolumeSource": { "type": "object", "description": "", "properties": { "endpoints": { "type": "string", "description": "gluster hosts endpoints name; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" }, "path": { "type": "string", "description": "path to gluster volume; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" }, "readOnly": { "type": "boolean", "description": "glusterfs volume to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "kubernetes_HTTPGetAction": { "type": "object", "description": "", "properties": { "host": { "type": "string", "description": "hostname to connect to; defaults to pod IP" }, "path": { "type": "string", "description": "path to access on the HTTP server" }, "port": { "$ref": "#/definitions/kubernetes_util_IntOrString", "javaType": "io.fabric8.kubernetes.api.model.IntOrString" }, "scheme": { "type": "string", "description": "scheme to connect with" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" }, "kubernetes_Handler": { "type": "object", "description": "", "properties": { "exec": { "$ref": "#/definitions/kubernetes_ExecAction", "javaType": "io.fabric8.kubernetes.api.model.ExecAction" }, "httpGet": { "$ref": "#/definitions/kubernetes_HTTPGetAction", "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" }, "tcpSocket": { "$ref": "#/definitions/kubernetes_TCPSocketAction", "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Handler" }, "kubernetes_HostPathVolumeSource": { "type": "object", "description": "", "properties": { "path": { "type": "string", "description": "path of the directory on the host; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#hostpath" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "kubernetes_ISCSIVolumeSource": { "type": "object", "description": "", "properties": { "fsType": { "type": "string", "description": "file system type to mount" }, "iqn": { "type": "string", "description": "iSCSI Qualified Name" }, "lun": { "type": "integer", "description": "iscsi target lun number" }, "readOnly": { "type": "boolean", "description": "read-only if true" }, "targetPortal": { "type": "string", "description": "iSCSI target portal" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "kubernetes_Lifecycle": { "type": "object", "description": "", "properties": { "postStart": { "$ref": "#/definitions/kubernetes_Handler", "javaType": "io.fabric8.kubernetes.api.model.Handler" }, "preStop": { "$ref": "#/definitions/kubernetes_Handler", "javaType": "io.fabric8.kubernetes.api.model.Handler" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Lifecycle" }, "kubernetes_List": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of objects", "items": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" } }, "kind": { "type": "string", "description": "", "default": "List", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.BaseKubernetesList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ListMeta": { "type": "object", "description": "", "properties": { "resourceVersion": { "type": "string", "description": "string that identifies the internal version of this object that can be used by clients to determine when objects have changed; populated by the system" }, "selfLink": { "type": "string", "description": "URL for the object; populated by the system" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ListMeta" }, "kubernetes_LoadBalancerIngress": { "type": "object", "description": "", "properties": { "hostname": { "type": "string", "description": "hostname of ingress point" }, "ip": { "type": "string", "description": "IP address of ingress point" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerIngress" }, "kubernetes_LoadBalancerStatus": { "type": "object", "description": "", "properties": { "ingress": { "type": "array", "description": "load-balancer ingress points", "items": { "$ref": "#/definitions/kubernetes_LoadBalancerIngress", "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerIngress" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerStatus" }, "kubernetes_LocalObjectReference": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "kubernetes_MetadataFile": { "type": "object", "description": "", "properties": { "fieldRef": { "$ref": "#/definitions/kubernetes_ObjectFieldSelector", "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" }, "name": { "type": "string", "description": "the name of the file to be created" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.MetadataFile" }, "kubernetes_MetadataVolumeSource": { "type": "object", "description": "", "properties": { "items": { "type": "array", "description": "list of metadata files", "items": { "$ref": "#/definitions/kubernetes_MetadataFile", "javaType": "io.fabric8.kubernetes.api.model.MetadataFile" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" }, "kubernetes_NFSVolumeSource": { "type": "object", "description": "", "properties": { "path": { "type": "string", "description": "the path that is exported by the NFS server; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" }, "readOnly": { "type": "boolean", "description": "forces the NFS export to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" }, "server": { "type": "string", "description": "the hostname or IP address of the NFS server; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "kubernetes_Namespace": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Namespace", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_NamespaceSpec", "javaType": "io.fabric8.kubernetes.api.model.NamespaceSpec" }, "status": { "$ref": "#/definitions/kubernetes_NamespaceStatus", "javaType": "io.fabric8.kubernetes.api.model.NamespaceStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Namespace", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_NamespaceList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "items is the list of Namespace objects in the list; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md", "items": { "$ref": "#/definitions/kubernetes_Namespace", "javaType": "io.fabric8.kubernetes.api.model.Namespace" } }, "kind": { "type": "string", "description": "", "default": "NamespaceList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamespaceList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_NamespaceSpec": { "type": "object", "description": "", "properties": { "finalizers": { "type": "array", "description": "an opaque list of values that must be empty to permanently remove object from storage; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#finalizers", "items": { "type": "string", "description": "an opaque list of values that must be empty to permanently remove object from storage; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#finalizers" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamespaceSpec" }, "kubernetes_NamespaceStatus": { "type": "object", "description": "", "properties": { "phase": { "type": "string", "description": "phase is the current lifecycle phase of the namespace; see http://releases.k8s.io/HEAD/docs/design/namespaces.md#phases" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamespaceStatus" }, "kubernetes_Node": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Node", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_NodeSpec", "javaType": "io.fabric8.kubernetes.api.model.NodeSpec" }, "status": { "$ref": "#/definitions/kubernetes_NodeStatus", "javaType": "io.fabric8.kubernetes.api.model.NodeStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Node", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_NodeAddress": { "type": "object", "description": "", "properties": { "address": { "type": "string", "description": "the node address" }, "type": { "type": "string", "description": "node address type" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeAddress" }, "kubernetes_NodeCondition": { "type": "object", "description": "", "properties": { "lastHeartbeatTime": { "type": "string", "description": "last time we got an update on a given condition" }, "lastTransitionTime": { "type": "string", "description": "last time the condition transit from one status to another" }, "message": { "type": "string", "description": "human readable message indicating details about last transition" }, "reason": { "type": "string", "description": "(brief) reason for the condition's last transition" }, "status": { "type": "string", "description": "status of the condition" }, "type": { "type": "string", "description": "type of node condition" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeCondition" }, "kubernetes_NodeList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of nodes", "items": { "$ref": "#/definitions/kubernetes_Node", "javaType": "io.fabric8.kubernetes.api.model.Node" } }, "kind": { "type": "string", "description": "", "default": "NodeList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_NodeSpec": { "type": "object", "description": "", "properties": { "externalID": { "type": "string", "description": "deprecated. External ID assigned to the node by some machine database (e.g. a cloud provider). Defaults to node name when empty." }, "podCIDR": { "type": "string", "description": "pod IP range assigned to the node" }, "providerID": { "type": "string", "description": "ID of the node assigned by the cloud provider in the format: \u003cProviderName\u003e://\u003cProviderSpecificNodeID\u003e" }, "unschedulable": { "type": "boolean", "description": "disable pod scheduling on the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#manual-node-administration" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeSpec" }, "kubernetes_NodeStatus": { "type": "object", "description": "", "properties": { "addresses": { "type": "array", "description": "list of addresses reachable to the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-addresses", "items": { "$ref": "#/definitions/kubernetes_NodeAddress", "javaType": "io.fabric8.kubernetes.api.model.NodeAddress" } }, "capacity": { "type": "object", "description": "compute resource capacity of the node; see http://releases.k8s.io/HEAD/docs/user-guide/compute-resources.md", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "conditions": { "type": "array", "description": "list of node conditions observed; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-condition", "items": { "$ref": "#/definitions/kubernetes_NodeCondition", "javaType": "io.fabric8.kubernetes.api.model.NodeCondition" } }, "nodeInfo": { "$ref": "#/definitions/kubernetes_NodeSystemInfo", "javaType": "io.fabric8.kubernetes.api.model.NodeSystemInfo" }, "phase": { "type": "string", "description": "most recently observed lifecycle phase of the node; see http://releases.k8s.io/HEAD/docs/admin/node.md#node-phase" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeStatus" }, "kubernetes_NodeSystemInfo": { "type": "object", "description": "", "properties": { "bootID": { "type": "string", "description": "boot id is the boot-id reported by the node" }, "containerRuntimeVersion": { "type": "string", "description": "Container runtime version reported by the node through runtime remote API (e.g. docker://1.5.0)" }, "kernelVersion": { "type": "string", "description": "Kernel version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64)" }, "kubeProxyVersion": { "type": "string", "description": "Kube-proxy version reported by the node" }, "kubeletVersion": { "type": "string", "description": "Kubelet version reported by the node" }, "machineID": { "type": "string", "description": "machine-id reported by the node" }, "osImage": { "type": "string", "description": "OS image used reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy))" }, "systemUUID": { "type": "string", "description": "system-uuid reported by the node" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NodeSystemInfo" }, "kubernetes_ObjectFieldSelector": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "version of the schema that fieldPath is written in terms of; defaults to v1" }, "fieldPath": { "type": "string", "description": "path of the field to select in the specified API version" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ObjectFieldSelector" }, "kubernetes_ObjectMeta": { "type": "object", "description": "", "properties": { "annotations": { "type": "object", "description": "map of string keys and values that can be used by external tooling to store and retrieve arbitrary metadata about objects; see http://releases.k8s.io/HEAD/docs/user-guide/annotations.md", "additionalProperties": { "type": "string", "description": "map of string keys and values that can be used by external tooling to store and retrieve arbitrary metadata about objects; see http://releases.k8s.io/HEAD/docs/user-guide/annotations.md" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "creationTimestamp": { "type": "string", "description": "RFC 3339 date and time at which the object was created; populated by the system" }, "deletionTimestamp": { "type": "string", "description": "RFC 3339 date and time at which the object will be deleted; populated by the system when a graceful deletion is requested" }, "generateName": { "type": "string", "description": "an optional prefix to use to generate a unique name; has the same validation rules as name; optional" }, "generation": { "type": "integer", "description": "a sequence number representing a specific generation of the desired state; populated by the system; read-only", "javaType": "Long" }, "labels": { "type": "object", "description": "map of string keys and values that can be used to organize and categorize objects; may match selectors of replication controllers and services; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md", "additionalProperties": { "type": "string", "description": "map of string keys and values that can be used to organize and categorize objects; may match selectors of replication controllers and services; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "name": { "type": "string", "description": "string that identifies an object. Must be unique within a namespace; cannot be updated; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "namespace": { "type": "string", "description": "namespace of the object; must be a DNS_LABEL; cannot be updated; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md", "maxLength": 253, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$" }, "resourceVersion": { "type": "string", "description": "string that identifies the internal version of this object that can be used by clients to determine when objects have changed; populated by the system" }, "selfLink": { "type": "string", "description": "URL for the object; populated by the system" }, "uid": { "type": "string", "description": "unique UUID across space and time; populated by the system; read-only; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "kubernetes_ObjectReference": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "API version of the referent" }, "fieldPath": { "type": "string", "description": "if referring to a piece of an object instead of an entire object" }, "kind": { "type": "string", "description": "kind of the referent; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" }, "name": { "type": "string", "description": "name of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names" }, "namespace": { "type": "string", "description": "namespace of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md" }, "resourceVersion": { "type": "string", "description": "specific resourceVersion to which this reference is made" }, "uid": { "type": "string", "description": "uid of the referent; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "kubernetes_PersistentVolume": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "PersistentVolume", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_PersistentVolumeSpec", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSpec" }, "status": { "$ref": "#/definitions/kubernetes_PersistentVolumeStatus", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_PersistentVolumeClaim": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "PersistentVolumeClaim", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimSpec", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec" }, "status": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimStatus", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_PersistentVolumeClaimList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "a list of persistent volume claims; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", "items": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaim", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim" } }, "kind": { "type": "string", "description": "", "default": "PersistentVolumeClaimList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_PersistentVolumeClaimSpec": { "type": "object", "description": "", "properties": { "accessModes": { "type": "array", "description": "the desired access modes the volume should have; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1", "items": { "type": "string", "description": "the desired access modes the volume should have; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1" } }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "volumeName": { "type": "string", "description": "the binding reference to the persistent volume backing this claim" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec" }, "kubernetes_PersistentVolumeClaimStatus": { "type": "object", "description": "", "properties": { "accessModes": { "type": "array", "description": "the actual access modes the volume has; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1", "items": { "type": "string", "description": "the actual access modes the volume has; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1" } }, "capacity": { "type": "object", "description": "the actual resources the volume has", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "phase": { "type": "string", "description": "the current phase of the claim" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimStatus" }, "kubernetes_PersistentVolumeClaimVolumeSource": { "type": "object", "description": "", "properties": { "claimName": { "type": "string", "description": "the name of the claim in the same namespace to be mounted as a volume; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims" }, "readOnly": { "type": "boolean", "description": "mount volume as read-only when true; default false" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" }, "kubernetes_PersistentVolumeList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of persistent volumes; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md", "items": { "$ref": "#/definitions/kubernetes_PersistentVolume", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume" } }, "kind": { "type": "string", "description": "", "default": "PersistentVolumeList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_PersistentVolumeSource": { "type": "object", "description": "", "properties": { "awsElasticBlockStore": { "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "cephfs": { "$ref": "#/definitions/kubernetes_CephFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "gcePersistentDisk": { "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "glusterfs": { "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "hostPath": { "$ref": "#/definitions/kubernetes_HostPathVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "iscsi": { "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "nfs": { "$ref": "#/definitions/kubernetes_NFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "rbd": { "$ref": "#/definitions/kubernetes_RBDVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSource" }, "kubernetes_PersistentVolumeSpec": { "type": "object", "description": "", "properties": { "accessModes": { "type": "array", "description": "all ways the volume can be mounted; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes", "items": { "type": "string", "description": "all ways the volume can be mounted; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes" } }, "awsElasticBlockStore": { "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "capacity": { "type": "object", "description": "a description of the persistent volume's resources and capacityr; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#capacity", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "cephfs": { "$ref": "#/definitions/kubernetes_CephFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "claimRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "gcePersistentDisk": { "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "glusterfs": { "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "hostPath": { "$ref": "#/definitions/kubernetes_HostPathVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "iscsi": { "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "nfs": { "$ref": "#/definitions/kubernetes_NFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "persistentVolumeReclaimPolicy": { "type": "string", "description": "what happens to a volume when released from its claim; Valid options are Retain (default) and Recycle. Recyling must be supported by the volume plugin underlying this persistent volume. See http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#recycling-policy" }, "rbd": { "$ref": "#/definitions/kubernetes_RBDVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeSpec" }, "kubernetes_PersistentVolumeStatus": { "type": "object", "description": "", "properties": { "message": { "type": "string", "description": "human-readable message indicating details about why the volume is in this state" }, "phase": { "type": "string", "description": "the current phase of a persistent volume; see http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#phase" }, "reason": { "type": "string", "description": "(brief) reason the volume is not is not available" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeStatus" }, "kubernetes_Pod": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Pod", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_PodSpec", "javaType": "io.fabric8.kubernetes.api.model.PodSpec" }, "status": { "$ref": "#/definitions/kubernetes_PodStatus", "javaType": "io.fabric8.kubernetes.api.model.PodStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Pod", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_PodCondition": { "type": "object", "description": "", "properties": { "status": { "type": "string", "description": "status of the condition" }, "type": { "type": "string", "description": "kind of the condition" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodCondition" }, "kubernetes_PodList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of pods; see http://releases.k8s.io/HEAD/docs/user-guide/pods.md", "items": { "$ref": "#/definitions/kubernetes_Pod", "javaType": "io.fabric8.kubernetes.api.model.Pod" } }, "kind": { "type": "string", "description": "", "default": "PodList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_PodSpec": { "type": "object", "description": "", "properties": { "activeDeadlineSeconds": { "type": "integer", "description": "", "javaType": "Long" }, "containers": { "type": "array", "description": "list of containers belonging to the pod; cannot be updated; containers cannot currently be added or removed; there must be at least one container in a Pod; see http://releases.k8s.io/HEAD/docs/user-guide/containers.md", "items": { "$ref": "#/definitions/kubernetes_Container", "javaType": "io.fabric8.kubernetes.api.model.Container" } }, "dnsPolicy": { "type": "string", "description": "DNS policy for containers within the pod; one of 'ClusterFirst' or 'Default'" }, "host": { "type": "string", "description": "deprecated" }, "hostNetwork": { "type": "boolean", "description": "host networking requested for this pod" }, "imagePullSecrets": { "type": "array", "description": "list of references to secrets in the same namespace available for pulling the container images; see http://releases.k8s.io/HEAD/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod", "items": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "nodeName": { "type": "string", "description": "node requested for this pod" }, "nodeSelector": { "type": "object", "description": "selector which must match a node's labels for the pod to be scheduled on that node; see http://releases.k8s.io/HEAD/docs/user-guide/node-selection/README.md", "additionalProperties": { "type": "string", "description": "selector which must match a node's labels for the pod to be scheduled on that node; see http://releases.k8s.io/HEAD/docs/user-guide/node-selection/README.md" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "restartPolicy": { "type": "string", "description": "restart policy for all containers within the pod; one of Always" }, "serviceAccount": { "type": "string", "description": "deprecated; use serviceAccountName instead" }, "serviceAccountName": { "type": "string", "description": "name of the ServiceAccount to use to run this pod; see http://releases.k8s.io/HEAD/docs/design/service_accounts.md" }, "terminationGracePeriodSeconds": { "type": "integer", "description": "optional duration in seconds the pod needs to terminate gracefully; may be decreased in delete request; value must be non-negative integer; the value zero indicates delete immediately; if this value is not set", "javaType": "Long" }, "volumes": { "type": "array", "description": "list of volumes that can be mounted by containers belonging to the pod; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md", "items": { "$ref": "#/definitions/kubernetes_Volume", "javaType": "io.fabric8.kubernetes.api.model.Volume" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodSpec" }, "kubernetes_PodStatus": { "type": "object", "description": "", "properties": { "conditions": { "type": "array", "description": "current service state of pod; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-conditions", "items": { "$ref": "#/definitions/kubernetes_PodCondition", "javaType": "io.fabric8.kubernetes.api.model.PodCondition" } }, "containerStatuses": { "type": "array", "description": "list of container statuses; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-statuses", "items": { "$ref": "#/definitions/kubernetes_ContainerStatus", "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" } }, "hostIP": { "type": "string", "description": "IP address of the host to which the pod is assigned; empty if not yet scheduled" }, "message": { "type": "string", "description": "human readable message indicating details about why the pod is in this condition" }, "phase": { "type": "string", "description": "current condition of the pod; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-phase" }, "podIP": { "type": "string", "description": "IP address allocated to the pod; routable at least within the cluster; empty if not yet allocated" }, "reason": { "type": "string", "description": "(brief-CamelCase) reason indicating details about why the pod is in this condition" }, "startTime": { "type": "string", "description": "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod." } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodStatus" }, "kubernetes_PodTemplateSpec": { "type": "object", "description": "", "properties": { "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_PodSpec", "javaType": "io.fabric8.kubernetes.api.model.PodSpec" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" }, "kubernetes_Probe": { "type": "object", "description": "", "properties": { "exec": { "$ref": "#/definitions/kubernetes_ExecAction", "javaType": "io.fabric8.kubernetes.api.model.ExecAction" }, "httpGet": { "$ref": "#/definitions/kubernetes_HTTPGetAction", "javaType": "io.fabric8.kubernetes.api.model.HTTPGetAction" }, "initialDelaySeconds": { "type": "integer", "description": "number of seconds after the container has started before liveness probes are initiated; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes", "javaType": "Long" }, "tcpSocket": { "$ref": "#/definitions/kubernetes_TCPSocketAction", "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" }, "timeoutSeconds": { "type": "integer", "description": "number of seconds after which liveness probes timeout; defaults to 1 second; see http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes", "javaType": "Long" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Probe" }, "kubernetes_RBDVolumeSource": { "type": "object", "description": "", "properties": { "fsType": { "type": "string", "description": "file system type to mount" }, "image": { "type": "string", "description": "rados image name; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, "keyring": { "type": "string", "description": "keyring is the path to key ring for rados user; default is /etc/ceph/keyring; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, "monitors": { "type": "array", "description": "a collection of Ceph monitors; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it", "items": { "type": "string", "description": "a collection of Ceph monitors; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" } }, "pool": { "type": "string", "description": "rados pool name; default is rbd; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, "readOnly": { "type": "boolean", "description": "rbd volume to be mounted with read-only permissions; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" }, "secretRef": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "user": { "type": "string", "description": "rados user name; default is admin; optional; see http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" }, "kubernetes_ReplicationController": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ReplicationController", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_ReplicationControllerSpec", "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerSpec" }, "status": { "$ref": "#/definitions/kubernetes_ReplicationControllerStatus", "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ReplicationController", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_ReplicationControllerList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of replication controllers; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md", "items": { "$ref": "#/definitions/kubernetes_ReplicationController", "javaType": "io.fabric8.kubernetes.api.model.ReplicationController" } }, "kind": { "type": "string", "description": "", "default": "ReplicationControllerList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ReplicationControllerSpec": { "type": "object", "description": "", "properties": { "replicas": { "type": "integer", "description": "number of replicas desired; defaults to 1; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#what-is-a-replication-controller" }, "selector": { "type": "object", "description": "label keys and values that must match in order to be controlled by this replication controller", "additionalProperties": { "type": "string", "description": "label keys and values that must match in order to be controlled by this replication controller" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "template": { "$ref": "#/definitions/kubernetes_PodTemplateSpec", "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerSpec" }, "kubernetes_ReplicationControllerStatus": { "type": "object", "description": "", "properties": { "observedGeneration": { "type": "integer", "description": "reflects the generation of the most recently observed replication controller", "javaType": "Long" }, "replicas": { "type": "integer", "description": "most recently oberved number of replicas; see http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#what-is-a-replication-controller" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerStatus" }, "kubernetes_ResourceQuota": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ResourceQuota", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_ResourceQuotaSpec", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaSpec" }, "status": { "$ref": "#/definitions/kubernetes_ResourceQuotaStatus", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_ResourceQuotaList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "items is a list of ResourceQuota objects; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", "items": { "$ref": "#/definitions/kubernetes_ResourceQuota", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota" } }, "kind": { "type": "string", "description": "", "default": "ResourceQuotaList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ResourceQuotaSpec": { "type": "object", "description": "", "properties": { "hard": { "type": "object", "description": "hard is the set of desired hard limits for each named resource; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaSpec" }, "kubernetes_ResourceQuotaStatus": { "type": "object", "description": "", "properties": { "hard": { "type": "object", "description": "hard is the set of enforced hard limits for each named resource; see http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "used": { "type": "object", "description": "used is the current observed total usage of the resource in the namespace", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaStatus" }, "kubernetes_ResourceRequirements": { "type": "object", "description": "", "properties": { "limits": { "type": "object", "description": "Maximum amount of compute resources allowed; see http://releases.k8s.io/HEAD/docs/design/resources.md#resource-specifications", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" }, "requests": { "type": "object", "description": "Minimum amount of resources requested; if Requests is omitted for a container", "additionalProperties": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "javaType": "java.util.Map\u003cString,io.fabric8.kubernetes.api.model.Quantity\u003e" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "kubernetes_RunAsUserStrategyOptions": { "type": "object", "description": "", "properties": { "type": { "type": "string", "description": "strategy used to generate RunAsUser" }, "uid": { "type": "integer", "description": "the uid to always run as; required for MustRunAs", "javaType": "Long" }, "uidRangeMax": { "type": "integer", "description": "max value for range based allocators", "javaType": "Long" }, "uidRangeMin": { "type": "integer", "description": "min value for range based allocators", "javaType": "Long" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.RunAsUserStrategyOptions" }, "kubernetes_SELinuxContextStrategyOptions": { "type": "object", "description": "", "properties": { "seLinuxOptions": { "$ref": "#/definitions/kubernetes_SELinuxOptions", "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" }, "type": { "type": "string", "description": "strategy used to generate the SELinux context" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SELinuxContextStrategyOptions" }, "kubernetes_SELinuxOptions": { "type": "object", "description": "", "properties": { "level": { "type": "string", "description": "the level label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, "role": { "type": "string", "description": "the role label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, "type": { "type": "string", "description": "the type label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" }, "user": { "type": "string", "description": "the user label to apply to the container; see http://releases.k8s.io/HEAD/docs/user-guide/labels.md" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" }, "kubernetes_Secret": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "data": { "type": "object", "description": "data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. Each value must be a base64 encoded string as described in https://tools.ietf.org/html/rfc4648#section-4", "additionalProperties": { "type": "string", "description": "data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. Each value must be a base64 encoded string as described in https://tools.ietf.org/html/rfc4648#section-4" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "kind": { "type": "string", "description": "", "default": "Secret", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "type": { "type": "string", "description": "type facilitates programmatic handling of secret data" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Secret", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_SecretList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "items is a list of secret objects; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md", "items": { "$ref": "#/definitions/kubernetes_Secret", "javaType": "io.fabric8.kubernetes.api.model.Secret" } }, "kind": { "type": "string", "description": "", "default": "SecretList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecretList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_SecretVolumeSource": { "type": "object", "description": "", "properties": { "secretName": { "type": "string", "description": "secretName is the name of a secret in the pod's namespace; see http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#secrets" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" }, "kubernetes_SecurityContext": { "type": "object", "description": "", "properties": { "capabilities": { "$ref": "#/definitions/kubernetes_Capabilities", "javaType": "io.fabric8.kubernetes.api.model.Capabilities" }, "privileged": { "type": "boolean", "description": "run the container in privileged mode; see http://releases.k8s.io/HEAD/docs/design/security_context.md#security-context" }, "runAsNonRoot": { "type": "boolean", "description": "indicates the container must be run as a non-root user either by specifying the runAsUser or in the image specification" }, "runAsUser": { "type": "integer", "description": "the user id that runs the first process in the container; see http://releases.k8s.io/HEAD/docs/design/security_context.md#security-context", "javaType": "Long" }, "seLinuxOptions": { "$ref": "#/definitions/kubernetes_SELinuxOptions", "javaType": "io.fabric8.kubernetes.api.model.SELinuxOptions" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecurityContext" }, "kubernetes_SecurityContextConstraints": { "type": "object", "description": "", "properties": { "allowHostDirVolumePlugin": { "type": "boolean", "description": "allow the use of the host dir volume plugin" }, "allowHostNetwork": { "type": "boolean", "description": "allow the use of the hostNetwork in the pod spec" }, "allowHostPorts": { "type": "boolean", "description": "allow the use of the host ports in the containers" }, "allowPrivilegedContainer": { "type": "boolean", "description": "allow containers to run as privileged" }, "allowedCapabilities": { "type": "array", "description": "capabilities that are allowed to be added", "items": { "type": "string", "description": "capabilities that are allowed to be added" } }, "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "groups": { "type": "array", "description": "groups allowed to use this SecurityContextConstraints", "items": { "type": "string", "description": "groups allowed to use this SecurityContextConstraints" } }, "kind": { "type": "string", "description": "", "default": "SecurityContextConstraints", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "runAsUser": { "$ref": "#/definitions/kubernetes_RunAsUserStrategyOptions", "javaType": "io.fabric8.kubernetes.api.model.RunAsUserStrategyOptions" }, "seLinuxContext": { "$ref": "#/definitions/kubernetes_SELinuxContextStrategyOptions", "javaType": "io.fabric8.kubernetes.api.model.SELinuxContextStrategyOptions" }, "users": { "type": "array", "description": "users allowed to use this SecurityContextConstraints", "items": { "type": "string", "description": "users allowed to use this SecurityContextConstraints" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_SecurityContextConstraintsList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_SecurityContextConstraints", "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints" } }, "kind": { "type": "string", "description": "", "default": "SecurityContextConstraintsList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraintsList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_Service": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Service", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/kubernetes_ServiceSpec", "javaType": "io.fabric8.kubernetes.api.model.ServiceSpec" }, "status": { "$ref": "#/definitions/kubernetes_ServiceStatus", "javaType": "io.fabric8.kubernetes.api.model.ServiceStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Service", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_ServiceAccount": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "imagePullSecrets": { "type": "array", "description": "list of references to secrets in the same namespace available for pulling container images; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret", "items": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "kind": { "type": "string", "description": "", "default": "ServiceAccount", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "secrets": { "type": "array", "description": "list of secrets that can be used by pods running as this service account; see http://releases.k8s.io/HEAD/docs/user-guide/secrets.md", "items": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "kubernetes_ServiceAccountList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of ServiceAccounts; see http://releases.k8s.io/HEAD/docs/design/service_accounts.md#service-accounts", "items": { "$ref": "#/definitions/kubernetes_ServiceAccount", "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount" } }, "kind": { "type": "string", "description": "", "default": "ServiceAccountList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceAccountList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ServiceList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of services", "items": { "$ref": "#/definitions/kubernetes_Service", "javaType": "io.fabric8.kubernetes.api.model.Service" } }, "kind": { "type": "string", "description": "", "default": "ServiceList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "kubernetes_ServicePort": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "the name of this port; optional if only one port is defined", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "nodePort": { "type": "integer", "description": "the port on each node on which this service is exposed when type=NodePort or LoadBalancer; usually assigned by the system; if specified" }, "port": { "type": "integer", "description": "the port number that is exposed" }, "protocol": { "type": "string", "description": "the protocol used by this port; must be UDP or TCP; TCP if unspecified" }, "targetPort": { "$ref": "#/definitions/kubernetes_util_IntOrString", "javaType": "io.fabric8.kubernetes.api.model.IntOrString" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServicePort" }, "kubernetes_ServiceSpec": { "type": "object", "description": "", "properties": { "clusterIP": { "type": "string", "description": "IP address of the service; usually assigned by the system; if specified" }, "deprecatedPublicIPs": { "type": "array", "description": "deprecated. externally visible IPs (e.g. load balancers) that should be proxied to this service", "items": { "type": "string", "description": "deprecated. externally visible IPs (e.g. load balancers) that should be proxied to this service" } }, "portalIP": { "type": "string", "description": "deprecated" }, "ports": { "type": "array", "description": "ports exposed by the service; see http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies", "items": { "$ref": "#/definitions/kubernetes_ServicePort", "javaType": "io.fabric8.kubernetes.api.model.ServicePort" } }, "selector": { "type": "object", "description": "label keys and values that must match in order to receive traffic for this service; if empty", "additionalProperties": { "type": "string", "description": "label keys and values that must match in order to receive traffic for this service; if empty" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "sessionAffinity": { "type": "string", "description": "enable client IP based session affinity; must be ClientIP or None; defaults to None; see http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies" }, "type": { "type": "string", "description": "type of this service; must be ClusterIP" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceSpec" }, "kubernetes_ServiceStatus": { "type": "object", "description": "", "properties": { "loadBalancer": { "$ref": "#/definitions/kubernetes_LoadBalancerStatus", "javaType": "io.fabric8.kubernetes.api.model.LoadBalancerStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.ServiceStatus" }, "kubernetes_Status": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "code": { "type": "integer", "description": "suggested HTTP return code for this status; 0 if not set" }, "details": { "$ref": "#/definitions/kubernetes_StatusDetails", "javaType": "io.fabric8.kubernetes.api.model.StatusDetails" }, "kind": { "type": "string", "description": "", "default": "Status", "required": true }, "message": { "type": "string", "description": "human-readable description of the status of this operation" }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" }, "reason": { "type": "string", "description": "machine-readable description of why this operation is in the 'Failure' status; if this value is empty there is no information available; a reason clarifies an HTTP status code but does not override it" }, "status": { "type": "string", "description": "status of the operation; either Success" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Status" }, "kubernetes_StatusCause": { "type": "object", "description": "", "properties": { "field": { "type": "string", "description": "field of the resource that has caused this error" }, "message": { "type": "string", "description": "human-readable description of the cause of the error; this field may be presented as-is to a reader" }, "reason": { "type": "string", "description": "machine-readable description of the cause of the error; if this value is empty there is no information available" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.StatusCause" }, "kubernetes_StatusDetails": { "type": "object", "description": "", "properties": { "causes": { "type": "array", "description": "the Causes array includes more details associated with the StatusReason failure; not all StatusReasons may provide detailed causes", "items": { "$ref": "#/definitions/kubernetes_StatusCause", "javaType": "io.fabric8.kubernetes.api.model.StatusCause" } }, "kind": { "type": "string", "description": "the kind attribute of the resource associated with the status StatusReason; on some operations may differ from the requested resource Kind; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" }, "name": { "type": "string", "description": "the name attribute of the resource associated with the status StatusReason (when there is a single name which can be described)" }, "retryAfterSeconds": { "type": "integer", "description": "the number of seconds before the client should attempt to retry this operation" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.StatusDetails" }, "kubernetes_TCPSocketAction": { "type": "object", "description": "", "properties": { "port": { "$ref": "#/definitions/kubernetes_util_IntOrString", "javaType": "io.fabric8.kubernetes.api.model.IntOrString" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.TCPSocketAction" }, "kubernetes_TypeMeta": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "version of the schema the object should have; see http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources" }, "kind": { "type": "string", "description": "kind of object" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.TypeMeta" }, "kubernetes_Volume": { "type": "object", "description": "", "properties": { "awsElasticBlockStore": { "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "cephfs": { "$ref": "#/definitions/kubernetes_CephFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "emptyDir": { "$ref": "#/definitions/kubernetes_EmptyDirVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" }, "gcePersistentDisk": { "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "gitRepo": { "$ref": "#/definitions/kubernetes_GitRepoVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" }, "glusterfs": { "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "hostPath": { "$ref": "#/definitions/kubernetes_HostPathVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "iscsi": { "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "metadata": { "$ref": "#/definitions/kubernetes_MetadataVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" }, "name": { "type": "string", "description": "volume name; must be a DNS_LABEL and unique within the pod; see http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names", "maxLength": 63, "pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" }, "nfs": { "$ref": "#/definitions/kubernetes_NFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "persistentVolumeClaim": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" }, "rbd": { "$ref": "#/definitions/kubernetes_RBDVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" }, "secret": { "$ref": "#/definitions/kubernetes_SecretVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Volume" }, "kubernetes_VolumeMount": { "type": "object", "description": "", "properties": { "mountPath": { "type": "string", "description": "path within the container at which the volume should be mounted" }, "name": { "type": "string", "description": "name of the volume to mount" }, "readOnly": { "type": "boolean", "description": "mounted read-only if true" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.VolumeMount" }, "kubernetes_VolumeSource": { "type": "object", "description": "", "properties": { "awsElasticBlockStore": { "$ref": "#/definitions/kubernetes_AWSElasticBlockStoreVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.AWSElasticBlockStoreVolumeSource" }, "cephfs": { "$ref": "#/definitions/kubernetes_CephFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.CephFSVolumeSource" }, "emptyDir": { "$ref": "#/definitions/kubernetes_EmptyDirVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.EmptyDirVolumeSource" }, "gcePersistentDisk": { "$ref": "#/definitions/kubernetes_GCEPersistentDiskVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GCEPersistentDiskVolumeSource" }, "gitRepo": { "$ref": "#/definitions/kubernetes_GitRepoVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GitRepoVolumeSource" }, "glusterfs": { "$ref": "#/definitions/kubernetes_GlusterfsVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.GlusterfsVolumeSource" }, "hostPath": { "$ref": "#/definitions/kubernetes_HostPathVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.HostPathVolumeSource" }, "iscsi": { "$ref": "#/definitions/kubernetes_ISCSIVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.ISCSIVolumeSource" }, "metadata": { "$ref": "#/definitions/kubernetes_MetadataVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.MetadataVolumeSource" }, "nfs": { "$ref": "#/definitions/kubernetes_NFSVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.NFSVolumeSource" }, "persistentVolumeClaim": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSource" }, "rbd": { "$ref": "#/definitions/kubernetes_RBDVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.RBDVolumeSource" }, "secret": { "$ref": "#/definitions/kubernetes_SecretVolumeSource", "javaType": "io.fabric8.kubernetes.api.model.SecretVolumeSource" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.VolumeSource" }, "kubernetes_config_AuthInfo": { "type": "object", "description": "", "properties": { "client-certificate": { "type": "string", "description": "" }, "client-certificate-data": { "type": "string", "description": "" }, "client-key": { "type": "string", "description": "" }, "client-key-data": { "type": "string", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, "password": { "type": "string", "description": "" }, "token": { "type": "string", "description": "" }, "username": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.AuthInfo" }, "kubernetes_config_Cluster": { "type": "object", "description": "", "properties": { "api-version": { "type": "string", "description": "" }, "certificate-authority": { "type": "string", "description": "" }, "certificate-authority-data": { "type": "string", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, "insecure-skip-tls-verify": { "type": "boolean", "description": "" }, "server": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Cluster" }, "kubernetes_config_Config": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "" }, "clusters": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedCluster", "javaType": "io.fabric8.kubernetes.api.model.NamedCluster" } }, "contexts": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedContext", "javaType": "io.fabric8.kubernetes.api.model.NamedContext" } }, "current-context": { "type": "string", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, "kind": { "type": "string", "description": "" }, "preferences": { "$ref": "#/definitions/kubernetes_config_Preferences", "javaType": "io.fabric8.kubernetes.api.model.Preferences" }, "users": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedAuthInfo", "javaType": "io.fabric8.kubernetes.api.model.NamedAuthInfo" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Config" }, "kubernetes_config_Context": { "type": "object", "description": "", "properties": { "cluster": { "type": "string", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } }, "namespace": { "type": "string", "description": "" }, "user": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Context" }, "kubernetes_config_NamedAuthInfo": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "" }, "user": { "$ref": "#/definitions/kubernetes_config_AuthInfo", "javaType": "io.fabric8.kubernetes.api.model.AuthInfo" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamedAuthInfo" }, "kubernetes_config_NamedCluster": { "type": "object", "description": "", "properties": { "cluster": { "$ref": "#/definitions/kubernetes_config_Cluster", "javaType": "io.fabric8.kubernetes.api.model.Cluster" }, "name": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamedCluster" }, "kubernetes_config_NamedContext": { "type": "object", "description": "", "properties": { "context": { "$ref": "#/definitions/kubernetes_config_Context", "javaType": "io.fabric8.kubernetes.api.model.Context" }, "name": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamedContext" }, "kubernetes_config_NamedExtension": { "type": "object", "description": "", "properties": { "extension": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "name": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" }, "kubernetes_config_Preferences": { "type": "object", "description": "", "properties": { "colors": { "type": "boolean", "description": "" }, "extensions": { "type": "array", "description": "", "items": { "$ref": "#/definitions/kubernetes_config_NamedExtension", "javaType": "io.fabric8.kubernetes.api.model.NamedExtension" } } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Preferences" }, "kubernetes_resource_Quantity": { "type": "object", "description": "", "properties": { "Amount": { "$ref": "#/definitions/speter_inf_Dec", "javaType": "io.fabric8.openshift.api.model.Dec" }, "Format": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "kubernetes_runtime_RawExtension": { "type": "object", "description": "", "properties": { "RawJSON": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "kubernetes_util_IntOrString": { "type": "object", "description": "", "properties": { "IntVal": { "type": "integer", "description": "" }, "Kind": { "type": "integer", "description": "" }, "StrVal": { "type": "string", "description": "" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.IntOrString" }, "kubernetes_watch_WatchEvent": { "type": "object", "description": "", "properties": { "object": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "type": { "type": "string", "description": "the type of watch event; may be ADDED" } }, "additionalProperties": true, "javaType": "io.fabric8.kubernetes.api.model.WatchEvent" }, "os_authorization_AuthorizationAttributes": { "type": "object", "description": "", "properties": { "content": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "namespace": { "type": "string", "description": "namespace of the action being requested" }, "resource": { "type": "string", "description": "one of the existing resource types" }, "resourceName": { "type": "string", "description": "name of the resource being requested for a get or delete" }, "verb": { "type": "string", "description": "one of get" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.AuthorizationAttributes" }, "os_authorization_ClusterPolicy": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ClusterPolicy", "required": true }, "lastModified": { "type": "string", "description": "last time any part of the object was created" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "roles": { "type": "array", "description": "all the roles held by this policy", "items": { "$ref": "#/definitions/os_authorization_NamedClusterRole", "javaType": "io.fabric8.openshift.api.model.NamedClusterRole" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterPolicy", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_ClusterPolicyBinding": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ClusterPolicyBinding", "required": true }, "lastModified": { "type": "string", "description": "last time any part of the object was created" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "policyRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "roleBindings": { "type": "array", "description": "all the role bindings held by this policy", "items": { "$ref": "#/definitions/os_authorization_NamedClusterRoleBinding", "javaType": "io.fabric8.openshift.api.model.NamedClusterRoleBinding" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_ClusterPolicyBindingList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of cluster policy bindings", "items": { "$ref": "#/definitions/os_authorization_ClusterPolicyBinding", "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding" } }, "kind": { "type": "string", "description": "", "default": "ClusterPolicyBindingList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_ClusterPolicyList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of cluster policies", "items": { "$ref": "#/definitions/os_authorization_ClusterPolicy", "javaType": "io.fabric8.openshift.api.model.ClusterPolicy" } }, "kind": { "type": "string", "description": "", "default": "ClusterPolicyList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterPolicyList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_ClusterRole": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ClusterRole", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "rules": { "type": "array", "description": "list of policy rules", "items": { "$ref": "#/definitions/os_authorization_PolicyRule", "javaType": "io.fabric8.openshift.api.model.PolicyRule" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterRole", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_ClusterRoleBinding": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "groupNames": { "type": "array", "description": "all the groups directly bound to the role", "items": { "type": "string", "description": "all the groups directly bound to the role" } }, "kind": { "type": "string", "description": "", "default": "ClusterRoleBinding", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "roleRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "subjects": { "type": "array", "description": "references to subjects bound to the role. Only User", "items": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "userNames": { "type": "array", "description": "all user names directly bound to the role", "items": { "type": "string", "description": "all user names directly bound to the role" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_ClusterRoleBindingList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of cluster role bindings", "items": { "$ref": "#/definitions/os_authorization_ClusterRoleBinding", "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" } }, "kind": { "type": "string", "description": "", "default": "ClusterRoleBindingList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ClusterRoleBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_LocalSubjectAccessReview": { "type": "object", "description": "", "properties": { "TypeMeta": { "$ref": "#/definitions/kubernetes_TypeMeta", "javaType": "io.fabric8.kubernetes.api.model.TypeMeta" }, "content": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "groups": { "type": "array", "description": "optional", "items": { "type": "string", "description": "optional" } }, "namespace": { "type": "string", "description": "namespace of the action being requested" }, "resource": { "type": "string", "description": "one of the existing resource types" }, "resourceName": { "type": "string", "description": "name of the resource being requested for a get or delete" }, "user": { "type": "string", "description": "optional" }, "verb": { "type": "string", "description": "one of get" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.LocalSubjectAccessReview" }, "os_authorization_NamedClusterRole": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the cluster role" }, "role": { "$ref": "#/definitions/os_authorization_ClusterRole", "javaType": "io.fabric8.openshift.api.model.ClusterRole" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedClusterRole" }, "os_authorization_NamedClusterRoleBinding": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the cluster role binding" }, "roleBinding": { "$ref": "#/definitions/os_authorization_ClusterRoleBinding", "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedClusterRoleBinding" }, "os_authorization_NamedRole": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the role" }, "role": { "$ref": "#/definitions/os_authorization_Role", "javaType": "io.fabric8.openshift.api.model.Role" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedRole" }, "os_authorization_NamedRoleBinding": { "type": "object", "description": "", "properties": { "name": { "type": "string", "description": "name of the roleBinding" }, "roleBinding": { "$ref": "#/definitions/os_authorization_RoleBinding", "javaType": "io.fabric8.openshift.api.model.RoleBinding" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedRoleBinding" }, "os_authorization_Policy": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Policy", "required": true }, "lastModified": { "type": "string", "description": "last time that any part of the policy was created" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "roles": { "type": "array", "description": "roles held by this policy", "items": { "$ref": "#/definitions/os_authorization_NamedRole", "javaType": "io.fabric8.openshift.api.model.NamedRole" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Policy", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_PolicyBinding": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "PolicyBinding", "required": true }, "lastModified": { "type": "string", "description": "last time that any part of the object was created" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "policyRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "roleBindings": { "type": "array", "description": "all roleBindings held by this policyBinding", "items": { "$ref": "#/definitions/os_authorization_NamedRoleBinding", "javaType": "io.fabric8.openshift.api.model.NamedRoleBinding" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.PolicyBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_PolicyBindingList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of policy bindings", "items": { "$ref": "#/definitions/os_authorization_PolicyBinding", "javaType": "io.fabric8.openshift.api.model.PolicyBinding" } }, "kind": { "type": "string", "description": "", "default": "PolicyBindingList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.PolicyBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_PolicyList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of policies", "items": { "$ref": "#/definitions/os_authorization_Policy", "javaType": "io.fabric8.openshift.api.model.Policy" } }, "kind": { "type": "string", "description": "", "default": "PolicyList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.PolicyList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_PolicyRule": { "type": "object", "description": "", "properties": { "attributeRestrictions": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "nonResourceURLs": { "type": "array", "description": "set of partial urls that a user should have access to. *s are allowed", "items": { "type": "string", "description": "set of partial urls that a user should have access to. *s are allowed" } }, "resourceNames": { "type": "array", "description": "optional white list of names that the rule applies to. An empty set means that everything is allowed.", "items": { "type": "string", "description": "optional white list of names that the rule applies to. An empty set means that everything is allowed." } }, "resources": { "type": "array", "description": "list of resources this rule applies to. * represents all resources.", "items": { "type": "string", "description": "list of resources this rule applies to. * represents all resources." } }, "verbs": { "type": "array", "description": "list of verbs that apply to ALL the resourceKinds and attributeRestrictions contained in this rule. The verb * represents all kinds.", "items": { "type": "string", "description": "list of verbs that apply to ALL the resourceKinds and attributeRestrictions contained in this rule. The verb * represents all kinds." } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.PolicyRule" }, "os_authorization_Role": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Role", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "rules": { "type": "array", "description": "all the rules for this role", "items": { "$ref": "#/definitions/os_authorization_PolicyRule", "javaType": "io.fabric8.openshift.api.model.PolicyRule" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Role", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_RoleBinding": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "groupNames": { "type": "array", "description": "all the groups directly bound to the role", "items": { "type": "string", "description": "all the groups directly bound to the role" } }, "kind": { "type": "string", "description": "", "default": "RoleBinding", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "roleRef": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "subjects": { "type": "array", "description": "references to subjects bound to the role. Only User", "items": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "userNames": { "type": "array", "description": "all the usernames directly bound to the role", "items": { "type": "string", "description": "all the usernames directly bound to the role" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RoleBinding", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_authorization_RoleBindingList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of role bindings", "items": { "$ref": "#/definitions/os_authorization_RoleBinding", "javaType": "io.fabric8.openshift.api.model.RoleBinding" } }, "kind": { "type": "string", "description": "", "default": "RoleBindingList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RoleBindingList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_RoleList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of roles", "items": { "$ref": "#/definitions/os_authorization_Role", "javaType": "io.fabric8.openshift.api.model.Role" } }, "kind": { "type": "string", "description": "", "default": "RoleList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RoleList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_authorization_SubjectAccessReview": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "content": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "groups": { "type": "array", "description": "optional", "items": { "type": "string", "description": "optional" } }, "kind": { "type": "string", "description": "", "default": "SubjectAccessReview", "required": true }, "namespace": { "type": "string", "description": "namespace of the action being requested" }, "resource": { "type": "string", "description": "one of the existing resource types" }, "resourceName": { "type": "string", "description": "name of the resource being requested for a get or delete" }, "user": { "type": "string", "description": "optional" }, "verb": { "type": "string", "description": "one of get" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SubjectAccessReview" }, "os_authorization_SubjectAccessReviewResponse": { "type": "object", "description": "", "properties": { "allowed": { "type": "boolean", "description": "true if the action would be allowed" }, "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "SubjectAccessReviewResponse", "required": true }, "namespace": { "type": "string", "description": "the namespace used for the access review" }, "reason": { "type": "string", "description": "reason is optional" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SubjectAccessReviewResponse" }, "os_build_Build": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Build", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_build_BuildSpec", "javaType": "io.fabric8.openshift.api.model.BuildSpec" }, "status": { "$ref": "#/definitions/os_build_BuildStatus", "javaType": "io.fabric8.openshift.api.model.BuildStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Build", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_build_BuildConfig": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "BuildConfig", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_build_BuildConfigSpec", "javaType": "io.fabric8.openshift.api.model.BuildConfigSpec" }, "status": { "$ref": "#/definitions/os_build_BuildConfigStatus", "javaType": "io.fabric8.openshift.api.model.BuildConfigStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildConfig", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_build_BuildConfigList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of build configs", "items": { "$ref": "#/definitions/os_build_BuildConfig", "javaType": "io.fabric8.openshift.api.model.BuildConfig" } }, "kind": { "type": "string", "description": "", "default": "BuildConfigList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildConfigList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_build_BuildConfigSpec": { "type": "object", "description": "", "properties": { "output": { "$ref": "#/definitions/os_build_BuildOutput", "javaType": "io.fabric8.openshift.api.model.BuildOutput" }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "revision": { "$ref": "#/definitions/os_build_SourceRevision", "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, "serviceAccount": { "type": "string", "description": "the name of the service account to use to run pods created by the build" }, "source": { "$ref": "#/definitions/os_build_BuildSource", "javaType": "io.fabric8.openshift.api.model.BuildSource" }, "strategy": { "$ref": "#/definitions/os_build_BuildStrategy", "javaType": "io.fabric8.openshift.api.model.BuildStrategy" }, "triggers": { "type": "array", "description": "determines how new builds can be launched from a build config. if no triggers are defined", "items": { "$ref": "#/definitions/os_build_BuildTriggerPolicy", "javaType": "io.fabric8.openshift.api.model.BuildTriggerPolicy" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildConfigSpec" }, "os_build_BuildConfigStatus": { "type": "object", "description": "", "properties": { "lastVersion": { "type": "integer", "description": "used to inform about number of last triggered build" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildConfigStatus" }, "os_build_BuildList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of builds", "items": { "$ref": "#/definitions/os_build_Build", "javaType": "io.fabric8.openshift.api.model.Build" } }, "kind": { "type": "string", "description": "", "default": "BuildList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_build_BuildOutput": { "type": "object", "description": "", "properties": { "pushSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "to": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildOutput" }, "os_build_BuildRequest": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "kind": { "type": "string", "description": "", "default": "BuildRequest", "required": true }, "lastVersion": { "type": "integer", "description": "LastVersion of the BuildConfig that triggered this build" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "revision": { "$ref": "#/definitions/os_build_SourceRevision", "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, "triggeredByImage": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildRequest", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_build_BuildSource": { "type": "object", "description": "", "properties": { "contextDir": { "type": "string", "description": "specifies sub-directory where the source code for the application exists" }, "git": { "$ref": "#/definitions/os_build_GitBuildSource", "javaType": "io.fabric8.openshift.api.model.GitBuildSource" }, "sourceSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "type": { "type": "string", "description": "type of source control management system" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildSource" }, "os_build_BuildSpec": { "type": "object", "description": "", "properties": { "output": { "$ref": "#/definitions/os_build_BuildOutput", "javaType": "io.fabric8.openshift.api.model.BuildOutput" }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "revision": { "$ref": "#/definitions/os_build_SourceRevision", "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, "serviceAccount": { "type": "string", "description": "the name of the service account to use to run pods created by the build" }, "source": { "$ref": "#/definitions/os_build_BuildSource", "javaType": "io.fabric8.openshift.api.model.BuildSource" }, "strategy": { "$ref": "#/definitions/os_build_BuildStrategy", "javaType": "io.fabric8.openshift.api.model.BuildStrategy" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildSpec" }, "os_build_BuildStatus": { "type": "object", "description": "", "properties": { "cancelled": { "type": "boolean", "description": "describes if a canceling event was triggered for the build" }, "completionTimestamp": { "type": "string", "description": "server time when the pod running this build stopped running" }, "config": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "duration": { "type": "integer", "description": "amount of time the build has been running", "javaType": "Long" }, "message": { "type": "string", "description": "human-readable message indicating details about why the build has this status" }, "phase": { "type": "string", "description": "observed point in the build lifecycle" }, "startTimestamp": { "type": "string", "description": "server time when this build started running in a pod" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildStatus" }, "os_build_BuildStrategy": { "type": "object", "description": "", "properties": { "customStrategy": { "$ref": "#/definitions/os_build_CustomBuildStrategy", "javaType": "io.fabric8.openshift.api.model.CustomBuildStrategy" }, "dockerStrategy": { "$ref": "#/definitions/os_build_DockerBuildStrategy", "javaType": "io.fabric8.openshift.api.model.DockerBuildStrategy" }, "sourceStrategy": { "$ref": "#/definitions/os_build_SourceBuildStrategy", "javaType": "io.fabric8.openshift.api.model.SourceBuildStrategy" }, "type": { "type": "string", "description": "identifies the type of build strategy" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildStrategy" }, "os_build_BuildTriggerPolicy": { "type": "object", "description": "", "properties": { "generic": { "$ref": "#/definitions/os_build_WebHookTrigger", "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" }, "github": { "$ref": "#/definitions/os_build_WebHookTrigger", "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" }, "imageChange": { "$ref": "#/definitions/os_build_ImageChangeTrigger", "javaType": "io.fabric8.openshift.api.model.ImageChangeTrigger" }, "type": { "type": "string", "description": "type of build trigger" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.BuildTriggerPolicy" }, "os_build_CustomBuildStrategy": { "type": "object", "description": "", "properties": { "env": { "type": "array", "description": "additional environment variables you want to pass into a builder container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "exposeDockerSocket": { "type": "boolean", "description": "allow running Docker commands (and build Docker images) from inside the container" }, "forcePull": { "type": "boolean", "description": "forces pulling of builder image from remote registry if true" }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "pullSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.CustomBuildStrategy" }, "os_build_DockerBuildStrategy": { "type": "object", "description": "", "properties": { "env": { "type": "array", "description": "additional environment variables you want to pass into a builder container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "forcePull": { "type": "boolean", "description": "forces the source build to pull the image if true" }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "noCache": { "type": "boolean", "description": "if true" }, "pullSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DockerBuildStrategy" }, "os_build_GitBuildSource": { "type": "object", "description": "", "properties": { "httpProxy": { "type": "string", "description": "specifies a http proxy to be used during git clone operations" }, "httpsProxy": { "type": "string", "description": "specifies a https proxy to be used during git clone operations" }, "ref": { "type": "string", "description": "identifies the branch/tag/ref to build" }, "uri": { "type": "string", "description": "points to the source that will be built" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.GitBuildSource" }, "os_build_GitSourceRevision": { "type": "object", "description": "", "properties": { "author": { "$ref": "#/definitions/os_build_SourceControlUser", "javaType": "io.fabric8.openshift.api.model.SourceControlUser" }, "commit": { "type": "string", "description": "hash identifying a specific commit" }, "committer": { "$ref": "#/definitions/os_build_SourceControlUser", "javaType": "io.fabric8.openshift.api.model.SourceControlUser" }, "message": { "type": "string", "description": "description of a specific commit" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.GitSourceRevision" }, "os_build_ImageChangeTrigger": { "type": "object", "description": "", "properties": { "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "lastTriggeredImageID": { "type": "string", "description": "used internally to save last used image ID for build" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageChangeTrigger" }, "os_build_SourceBuildStrategy": { "type": "object", "description": "", "properties": { "env": { "type": "array", "description": "additional environment variables you want to pass into a builder container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "forcePull": { "type": "boolean", "description": "forces the source build to pull the image if true" }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "incremental": { "type": "boolean", "description": "forces the source build to do incremental builds if true" }, "pullSecret": { "$ref": "#/definitions/kubernetes_LocalObjectReference", "javaType": "io.fabric8.kubernetes.api.model.LocalObjectReference" }, "scripts": { "type": "string", "description": "location of the source scripts" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SourceBuildStrategy" }, "os_build_SourceControlUser": { "type": "object", "description": "", "properties": { "email": { "type": "string", "description": "e-mail of the source control user" }, "name": { "type": "string", "description": "name of the source control user" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SourceControlUser" }, "os_build_SourceRevision": { "type": "object", "description": "", "properties": { "git": { "$ref": "#/definitions/os_build_GitSourceRevision", "javaType": "io.fabric8.openshift.api.model.GitSourceRevision" }, "type": { "type": "string", "description": "type of the build source" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.SourceRevision" }, "os_build_WebHookTrigger": { "type": "object", "description": "", "properties": { "secret": { "type": "string", "description": "secret used to validate requests" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.WebHookTrigger" }, "os_deploy_CustomDeploymentStrategyParams": { "type": "object", "description": "", "properties": { "command": { "type": "array", "description": "optionally overrides the container command (default is specified by the image)", "items": { "type": "string", "description": "optionally overrides the container command (default is specified by the image)" } }, "environment": { "type": "array", "description": "environment variables provided to the deployment process container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } }, "image": { "type": "string", "description": "a Docker image which can carry out a deployment" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.CustomDeploymentStrategyParams" }, "os_deploy_DeploymentCause": { "type": "object", "description": "", "properties": { "imageTrigger": { "$ref": "#/definitions/os_deploy_DeploymentCauseImageTrigger", "javaType": "io.fabric8.openshift.api.model.DeploymentCauseImageTrigger" }, "type": { "type": "string", "description": "the type of trigger that resulted in a new deployment" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentCause" }, "os_deploy_DeploymentCauseImageTrigger": { "type": "object", "description": "", "properties": { "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentCauseImageTrigger" }, "os_deploy_DeploymentConfig": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "DeploymentConfig", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_deploy_DeploymentConfigSpec", "javaType": "io.fabric8.openshift.api.model.DeploymentConfigSpec" }, "status": { "$ref": "#/definitions/os_deploy_DeploymentConfigStatus", "javaType": "io.fabric8.openshift.api.model.DeploymentConfigStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentConfig", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_deploy_DeploymentConfigList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "a list of deployment configs", "items": { "$ref": "#/definitions/os_deploy_DeploymentConfig", "javaType": "io.fabric8.openshift.api.model.DeploymentConfig" } }, "kind": { "type": "string", "description": "", "default": "DeploymentConfigList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentConfigList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_deploy_DeploymentConfigSpec": { "type": "object", "description": "", "properties": { "replicas": { "type": "integer", "description": "the desired number of replicas" }, "selector": { "type": "object", "description": "a label query over pods that should match the replicas count", "additionalProperties": { "type": "string", "description": "a label query over pods that should match the replicas count" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "strategy": { "$ref": "#/definitions/os_deploy_DeploymentStrategy", "javaType": "io.fabric8.openshift.api.model.DeploymentStrategy" }, "template": { "$ref": "#/definitions/kubernetes_PodTemplateSpec", "javaType": "io.fabric8.kubernetes.api.model.PodTemplateSpec" }, "triggers": { "type": "array", "description": "how new deployments are triggered", "items": { "$ref": "#/definitions/os_deploy_DeploymentTriggerPolicy", "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerPolicy" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentConfigSpec" }, "os_deploy_DeploymentConfigStatus": { "type": "object", "description": "", "properties": { "details": { "$ref": "#/definitions/os_deploy_DeploymentDetails", "javaType": "io.fabric8.openshift.api.model.DeploymentDetails" }, "latestVersion": { "type": "integer", "description": "used to determine whether the current deployment is out of sync" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentConfigStatus" }, "os_deploy_DeploymentDetails": { "type": "object", "description": "", "properties": { "causes": { "type": "array", "description": "extended data associated with all the causes for creating a new deployment", "items": { "$ref": "#/definitions/os_deploy_DeploymentCause", "javaType": "io.fabric8.openshift.api.model.DeploymentCause" } }, "message": { "type": "string", "description": "a user specified change message" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentDetails" }, "os_deploy_DeploymentStrategy": { "type": "object", "description": "", "properties": { "customParams": { "$ref": "#/definitions/os_deploy_CustomDeploymentStrategyParams", "javaType": "io.fabric8.openshift.api.model.CustomDeploymentStrategyParams" }, "recreateParams": { "$ref": "#/definitions/os_deploy_RecreateDeploymentStrategyParams", "javaType": "io.fabric8.openshift.api.model.RecreateDeploymentStrategyParams" }, "resources": { "$ref": "#/definitions/kubernetes_ResourceRequirements", "javaType": "io.fabric8.kubernetes.api.model.ResourceRequirements" }, "rollingParams": { "$ref": "#/definitions/os_deploy_RollingDeploymentStrategyParams", "javaType": "io.fabric8.openshift.api.model.RollingDeploymentStrategyParams" }, "type": { "type": "string", "description": "the name of a deployment strategy" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentStrategy" }, "os_deploy_DeploymentTriggerImageChangeParams": { "type": "object", "description": "", "properties": { "automatic": { "type": "boolean", "description": "whether detection of a new tag value should trigger a deployment" }, "containerNames": { "type": "array", "description": "restricts tag updates to a set of container names in the pod", "items": { "type": "string", "description": "restricts tag updates to a set of container names in the pod" } }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "lastTriggeredImage": { "type": "string", "description": "the last image to be triggered" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerImageChangeParams" }, "os_deploy_DeploymentTriggerPolicy": { "type": "object", "description": "", "properties": { "imageChangeParams": { "$ref": "#/definitions/os_deploy_DeploymentTriggerImageChangeParams", "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerImageChangeParams" }, "type": { "type": "string", "description": "the type of the trigger" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.DeploymentTriggerPolicy" }, "os_deploy_ExecNewPodHook": { "type": "object", "description": "", "properties": { "command": { "type": "array", "description": "the hook command and its arguments", "items": { "type": "string", "description": "the hook command and its arguments" } }, "containerName": { "type": "string", "description": "the name of a container from the pod template whose image will be used for the hook container" }, "env": { "type": "array", "description": "environment variables provided to the hook container", "items": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ExecNewPodHook" }, "os_deploy_LifecycleHook": { "type": "object", "description": "", "properties": { "execNewPod": { "$ref": "#/definitions/os_deploy_ExecNewPodHook", "javaType": "io.fabric8.openshift.api.model.ExecNewPodHook" }, "failurePolicy": { "type": "string", "description": "what action to take if the hook fails" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, "os_deploy_RecreateDeploymentStrategyParams": { "type": "object", "description": "", "properties": { "post": { "$ref": "#/definitions/os_deploy_LifecycleHook", "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, "pre": { "$ref": "#/definitions/os_deploy_LifecycleHook", "javaType": "io.fabric8.openshift.api.model.LifecycleHook" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RecreateDeploymentStrategyParams" }, "os_deploy_RollingDeploymentStrategyParams": { "type": "object", "description": "", "properties": { "intervalSeconds": { "type": "integer", "description": "the time to wait between polling deployment status after update", "javaType": "Long" }, "post": { "$ref": "#/definitions/os_deploy_LifecycleHook", "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, "pre": { "$ref": "#/definitions/os_deploy_LifecycleHook", "javaType": "io.fabric8.openshift.api.model.LifecycleHook" }, "timeoutSeconds": { "type": "integer", "description": "the time to wait for updates before giving up", "javaType": "Long" }, "updatePercent": { "type": "integer", "description": "the percentage of replicas to scale up or down each interval (negative value switches scale order to down/up instead of up/down)" }, "updatePeriodSeconds": { "type": "integer", "description": "the time to wait between individual pod updates", "javaType": "Long" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RollingDeploymentStrategyParams" }, "os_image_Image": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "dockerImageManifest": { "type": "string", "description": "raw JSON of the manifest" }, "dockerImageMetadata": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" }, "dockerImageMetadataVersion": { "type": "string", "description": "conveys version of the object" }, "dockerImageReference": { "type": "string", "description": "string that can be used to pull this image" }, "kind": { "type": "string", "description": "", "default": "Image", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Image", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_image_ImageList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of image objects", "items": { "$ref": "#/definitions/os_image_Image", "javaType": "io.fabric8.openshift.api.model.Image" } }, "kind": { "type": "string", "description": "", "default": "ImageList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_image_ImageStream": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "ImageStream", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_image_ImageStreamSpec", "javaType": "io.fabric8.openshift.api.model.ImageStreamSpec" }, "status": { "$ref": "#/definitions/os_image_ImageStreamStatus", "javaType": "io.fabric8.openshift.api.model.ImageStreamStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageStream", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_image_ImageStreamList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of image stream objects", "items": { "$ref": "#/definitions/os_image_ImageStream", "javaType": "io.fabric8.openshift.api.model.ImageStream" } }, "kind": { "type": "string", "description": "", "default": "ImageStreamList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageStreamList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_image_ImageStreamSpec": { "type": "object", "description": "", "properties": { "dockerImageRepository": { "type": "string", "description": "optional field if specified this stream is backed by a Docker repository on this server" }, "tags": { "type": "array", "description": "map arbitrary string values to specific image locators", "items": { "$ref": "#/definitions/os_image_NamedTagReference", "javaType": "io.fabric8.openshift.api.model.NamedTagReference" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageStreamSpec" }, "os_image_ImageStreamStatus": { "type": "object", "description": "", "properties": { "dockerImageRepository": { "type": "string", "description": "represents the effective location this stream may be accessed at" }, "tags": { "type": "array", "description": "historical record of images associated with each tag", "items": { "$ref": "#/definitions/os_image_NamedTagEventList", "javaType": "io.fabric8.openshift.api.model.NamedTagEventList" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ImageStreamStatus" }, "os_image_NamedTagEventList": { "type": "object", "description": "", "properties": { "items": { "type": "array", "description": "list of tag events related to the tag", "items": { "$ref": "#/definitions/os_image_TagEvent", "javaType": "io.fabric8.openshift.api.model.TagEvent" } }, "tag": { "type": "string", "description": "the tag" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedTagEventList" }, "os_image_NamedTagReference": { "type": "object", "description": "", "properties": { "annotations": { "type": "object", "description": "annotations associated with images using this tag", "additionalProperties": { "type": "string", "description": "annotations associated with images using this tag" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "from": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" }, "name": { "type": "string", "description": "name of tag" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.NamedTagReference" }, "os_image_TagEvent": { "type": "object", "description": "", "properties": { "created": { "type": "string", "description": "when the event was created" }, "dockerImageReference": { "type": "string", "description": "the string that can be used to pull this image" }, "image": { "type": "string", "description": "the image" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.TagEvent" }, "os_oauth_OAuthAccessToken": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "authorizeToken": { "type": "string", "description": "contains the token that authorized this token" }, "clientName": { "type": "string", "description": "references the client that created this token" }, "expiresIn": { "type": "integer", "description": "is the seconds from creation time before this token expires", "javaType": "Long" }, "kind": { "type": "string", "description": "", "default": "OAuthAccessToken", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "redirectURI": { "type": "string", "description": "redirection URI associated with the token" }, "refreshToken": { "type": "string", "description": "optional value by which this token can be renewed" }, "scopes": { "type": "array", "description": "list of requested scopes", "items": { "type": "string", "description": "list of requested scopes" } }, "userName": { "type": "string", "description": "user name associated with this token" }, "userUID": { "type": "string", "description": "unique UID associated with this token" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_oauth_OAuthAccessTokenList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of oauth access tokens", "items": { "$ref": "#/definitions/os_oauth_OAuthAccessToken", "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken" } }, "kind": { "type": "string", "description": "", "default": "OAuthAccessTokenList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthAccessTokenList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_oauth_OAuthAuthorizeToken": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "clientName": { "type": "string", "description": "references the client that created this token" }, "expiresIn": { "type": "integer", "description": "seconds from creation time before this token expires", "javaType": "Long" }, "kind": { "type": "string", "description": "", "default": "OAuthAuthorizeToken", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "redirectURI": { "type": "string", "description": "redirection URI associated with the token" }, "scopes": { "type": "array", "description": "list of requested scopes", "items": { "type": "string", "description": "list of requested scopes" } }, "state": { "type": "string", "description": "state data from request" }, "userName": { "type": "string", "description": "user name associated with this token" }, "userUID": { "type": "string", "description": "unique UID associated with this token. userUID and userName must both match for this token to be valid" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_oauth_OAuthAuthorizeTokenList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of oauth authorization tokens", "items": { "$ref": "#/definitions/os_oauth_OAuthAuthorizeToken", "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken" } }, "kind": { "type": "string", "description": "", "default": "OAuthAuthorizeTokenList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeTokenList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_oauth_OAuthClient": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "OAuthClient", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "redirectURIs": { "type": "array", "description": "valid redirection URIs associated with a client", "items": { "type": "string", "description": "valid redirection URIs associated with a client" } }, "respondWithChallenges": { "type": "boolean", "description": "indicates whether the client wants authentication needed responses made in the form of challenges instead of redirects" }, "secret": { "type": "string", "description": "unique secret associated with a client" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthClient", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_oauth_OAuthClientAuthorization": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "clientName": { "type": "string", "description": "references the client that created this authorization" }, "kind": { "type": "string", "description": "", "default": "OAuthClientAuthorization", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "scopes": { "type": "array", "description": "list of granted scopes", "items": { "type": "string", "description": "list of granted scopes" } }, "userName": { "type": "string", "description": "user name that authorized this client" }, "userUID": { "type": "string", "description": "unique UID associated with this authorization. userUID and userName must both match for this authorization to be valid" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_oauth_OAuthClientAuthorizationList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of oauth client authorizations", "items": { "$ref": "#/definitions/os_oauth_OAuthClientAuthorization", "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization" } }, "kind": { "type": "string", "description": "", "default": "OAuthClientAuthorizationList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorizationList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_oauth_OAuthClientList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of oauth clients", "items": { "$ref": "#/definitions/os_oauth_OAuthClient", "javaType": "io.fabric8.openshift.api.model.OAuthClient" } }, "kind": { "type": "string", "description": "", "default": "OAuthClientList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.OAuthClientList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_project_Project": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Project", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_project_ProjectSpec", "javaType": "io.fabric8.openshift.api.model.ProjectSpec" }, "status": { "$ref": "#/definitions/os_project_ProjectStatus", "javaType": "io.fabric8.openshift.api.model.ProjectStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Project", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_project_ProjectList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of projects", "items": { "$ref": "#/definitions/os_project_Project", "javaType": "io.fabric8.openshift.api.model.Project" } }, "kind": { "type": "string", "description": "", "default": "ProjectList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ProjectList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_project_ProjectRequest": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "description": { "type": "string", "description": "description to apply to a project" }, "displayName": { "type": "string", "description": "display name to apply to a project" }, "kind": { "type": "string", "description": "", "default": "ProjectRequest", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ProjectRequest", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_project_ProjectSpec": { "type": "object", "description": "", "properties": { "finalizers": { "type": "array", "description": "an opaque list of values that must be empty to permanently remove object from storage", "items": { "type": "string", "description": "an opaque list of values that must be empty to permanently remove object from storage" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ProjectSpec" }, "os_project_ProjectStatus": { "type": "object", "description": "", "properties": { "phase": { "type": "string", "description": "phase is the current lifecycle phase of the project" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.ProjectStatus" }, "os_route_Route": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Route", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "spec": { "$ref": "#/definitions/os_route_RouteSpec", "javaType": "io.fabric8.openshift.api.model.RouteSpec" }, "status": { "$ref": "#/definitions/os_route_RouteStatus", "javaType": "io.fabric8.openshift.api.model.RouteStatus" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Route", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_route_RouteList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of routes", "items": { "$ref": "#/definitions/os_route_Route", "javaType": "io.fabric8.openshift.api.model.Route" } }, "kind": { "type": "string", "description": "", "default": "RouteList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RouteList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_route_RouteSpec": { "type": "object", "description": "", "properties": { "host": { "type": "string", "description": "optional: alias/dns that points to the service" }, "path": { "type": "string", "description": "optional: path that the router watches to route traffic to the service" }, "tls": { "$ref": "#/definitions/os_route_TLSConfig", "javaType": "io.fabric8.openshift.api.model.TLSConfig" }, "to": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RouteSpec" }, "os_route_RouteStatus": { "type": "object", "description": "", "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.RouteStatus" }, "os_route_TLSConfig": { "type": "object", "description": "", "properties": { "caCertificate": { "type": "string", "description": "provides the cert authority certificate contents" }, "certificate": { "type": "string", "description": "provides certificate contents" }, "destinationCACertificate": { "type": "string", "description": "provides the contents of the ca certificate of the final destination. When using re-encrypt termination this file should be provided in order to have routers use it for health checks on the secure connection" }, "key": { "type": "string", "description": "provides key file contents" }, "termination": { "type": "string", "description": "indicates termination type. if not set" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.TLSConfig" }, "os_template_Parameter": { "type": "object", "description": "", "properties": { "description": { "type": "string", "description": "optional: describes the parameter" }, "from": { "type": "string", "description": "input value for the generator" }, "generate": { "type": "string", "description": "optional: generate specifies the generator to be used to generate random string from an input value specified by the from field. the result string is stored in the value field. if not specified" }, "name": { "type": "string", "description": "name of the parameter" }, "required": { "type": "boolean", "description": "indicates the parameter must have a non-empty value or be generated" }, "value": { "type": "string", "description": "optional: holds the parameter data. if specified" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Parameter" }, "os_template_Template": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Template", "required": true }, "labels": { "type": "object", "description": "optional: list of lables that are applied to every object during the template to config transformation", "additionalProperties": { "type": "string", "description": "optional: list of lables that are applied to every object during the template to config transformation" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "objects": { "type": "array", "description": "list of objects to include in the template", "items": { "$ref": "#/definitions/kubernetes_runtime_RawExtension", "javaType": "io.fabric8.kubernetes.api.model.HasMetadata" } }, "parameters": { "type": "array", "description": "optional: list of parameters used during template to config transformation", "items": { "$ref": "#/definitions/os_template_Parameter", "javaType": "io.fabric8.openshift.api.model.Parameter" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Template", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_template_TemplateList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of templates", "items": { "$ref": "#/definitions/os_template_Template", "javaType": "io.fabric8.openshift.api.model.Template" } }, "kind": { "type": "string", "description": "", "default": "TemplateList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.TemplateList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_user_Group": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "kind": { "type": "string", "description": "", "default": "Group", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "users": { "type": "array", "description": "list of users in this group", "items": { "type": "string", "description": "list of users in this group" } } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Group", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_user_GroupList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of groups", "items": { "$ref": "#/definitions/os_user_Group", "javaType": "io.fabric8.openshift.api.model.Group" } }, "kind": { "type": "string", "description": "", "default": "GroupList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.GroupList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_user_Identity": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "extra": { "type": "object", "description": "extra information for this identity", "additionalProperties": { "type": "string", "description": "extra information for this identity" }, "javaType": "java.util.Map\u003cString,String\u003e" }, "kind": { "type": "string", "description": "", "default": "Identity", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "providerName": { "type": "string", "description": "source of identity information" }, "providerUserName": { "type": "string", "description": "uniquely represents this identity in the scope of the provider" }, "user": { "$ref": "#/definitions/kubernetes_ObjectReference", "javaType": "io.fabric8.kubernetes.api.model.ObjectReference" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Identity", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_user_IdentityList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of identities", "items": { "$ref": "#/definitions/os_user_Identity", "javaType": "io.fabric8.openshift.api.model.Identity" } }, "kind": { "type": "string", "description": "", "default": "IdentityList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.IdentityList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "os_user_User": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "fullName": { "type": "string", "description": "full name of user" }, "groups": { "type": "array", "description": "list of groups", "items": { "type": "string", "description": "list of groups" } }, "identities": { "type": "array", "description": "list of identities", "items": { "type": "string", "description": "list of identities" } }, "kind": { "type": "string", "description": "", "default": "User", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.User", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.HasMetadata" ] }, "os_user_UserList": { "type": "object", "description": "", "properties": { "apiVersion": { "type": "string", "description": "", "default": "v1", "required": true, "enum": [ "v1" ] }, "items": { "type": "array", "description": "list of users", "items": { "$ref": "#/definitions/os_user_User", "javaType": "io.fabric8.openshift.api.model.User" } }, "kind": { "type": "string", "description": "", "default": "UserList", "required": true }, "metadata": { "$ref": "#/definitions/kubernetes_ListMeta", "javaType": "io.fabric8.kubernetes.api.model.ListMeta" } }, "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.UserList", "javaInterfaces": [ "io.fabric8.kubernetes.api.model.KubernetesResource", "io.fabric8.kubernetes.api.model.KubernetesResourceList" ] }, "speter_inf_Dec": { "type": "object", "description": "", "additionalProperties": true, "javaType": "io.fabric8.openshift.api.model.Dec" } }, "type": "object", "properties": { "BaseKubernetesList": { "$ref": "#/definitions/kubernetes_List", "javaType": "io.fabric8.kubernetes.api.model.BaseKubernetesList" }, "BuildConfigList": { "$ref": "#/definitions/os_build_BuildConfigList", "javaType": "io.fabric8.openshift.api.model.BuildConfigList" }, "BuildList": { "$ref": "#/definitions/os_build_BuildList", "javaType": "io.fabric8.openshift.api.model.BuildList" }, "BuildRequest": { "$ref": "#/definitions/os_build_BuildRequest", "javaType": "io.fabric8.openshift.api.model.BuildRequest" }, "ClusterPolicy": { "$ref": "#/definitions/os_authorization_ClusterPolicy", "javaType": "io.fabric8.openshift.api.model.ClusterPolicy" }, "ClusterPolicyBinding": { "$ref": "#/definitions/os_authorization_ClusterPolicyBinding", "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBinding" }, "ClusterPolicyBindingList": { "$ref": "#/definitions/os_authorization_ClusterPolicyBindingList", "javaType": "io.fabric8.openshift.api.model.ClusterPolicyBindingList" }, "ClusterPolicyList": { "$ref": "#/definitions/os_authorization_ClusterPolicyList", "javaType": "io.fabric8.openshift.api.model.ClusterPolicyList" }, "ClusterRoleBinding": { "$ref": "#/definitions/os_authorization_ClusterRoleBinding", "javaType": "io.fabric8.openshift.api.model.ClusterRoleBinding" }, "ClusterRoleBindingList": { "$ref": "#/definitions/os_authorization_ClusterRoleBindingList", "javaType": "io.fabric8.openshift.api.model.ClusterRoleBindingList" }, "Config": { "$ref": "#/definitions/kubernetes_config_Config", "javaType": "io.fabric8.kubernetes.api.model.Config" }, "ContainerStatus": { "$ref": "#/definitions/kubernetes_ContainerStatus", "javaType": "io.fabric8.kubernetes.api.model.ContainerStatus" }, "DeploymentConfigList": { "$ref": "#/definitions/os_deploy_DeploymentConfigList", "javaType": "io.fabric8.openshift.api.model.DeploymentConfigList" }, "Endpoints": { "$ref": "#/definitions/kubernetes_Endpoints", "javaType": "io.fabric8.kubernetes.api.model.Endpoints" }, "EndpointsList": { "$ref": "#/definitions/kubernetes_EndpointsList", "javaType": "io.fabric8.kubernetes.api.model.EndpointsList" }, "EnvVar": { "$ref": "#/definitions/kubernetes_EnvVar", "javaType": "io.fabric8.kubernetes.api.model.EnvVar" }, "EventList": { "$ref": "#/definitions/kubernetes_EventList", "javaType": "io.fabric8.kubernetes.api.model.EventList" }, "Group": { "$ref": "#/definitions/os_user_Group", "javaType": "io.fabric8.openshift.api.model.Group" }, "GroupList": { "$ref": "#/definitions/os_user_GroupList", "javaType": "io.fabric8.openshift.api.model.GroupList" }, "Identity": { "$ref": "#/definitions/os_user_Identity", "javaType": "io.fabric8.openshift.api.model.Identity" }, "IdentityList": { "$ref": "#/definitions/os_user_IdentityList", "javaType": "io.fabric8.openshift.api.model.IdentityList" }, "ImageList": { "$ref": "#/definitions/os_image_ImageList", "javaType": "io.fabric8.openshift.api.model.ImageList" }, "ImageStreamList": { "$ref": "#/definitions/os_image_ImageStreamList", "javaType": "io.fabric8.openshift.api.model.ImageStreamList" }, "LocalSubjectAccessReview": { "$ref": "#/definitions/os_authorization_LocalSubjectAccessReview", "javaType": "io.fabric8.openshift.api.model.LocalSubjectAccessReview" }, "Namespace": { "$ref": "#/definitions/kubernetes_Namespace", "javaType": "io.fabric8.kubernetes.api.model.Namespace" }, "NamespaceList": { "$ref": "#/definitions/kubernetes_NamespaceList", "javaType": "io.fabric8.kubernetes.api.model.NamespaceList" }, "Node": { "$ref": "#/definitions/kubernetes_Node", "javaType": "io.fabric8.kubernetes.api.model.Node" }, "NodeList": { "$ref": "#/definitions/kubernetes_NodeList", "javaType": "io.fabric8.kubernetes.api.model.NodeList" }, "OAuthAccessToken": { "$ref": "#/definitions/os_oauth_OAuthAccessToken", "javaType": "io.fabric8.openshift.api.model.OAuthAccessToken" }, "OAuthAccessTokenList": { "$ref": "#/definitions/os_oauth_OAuthAccessTokenList", "javaType": "io.fabric8.openshift.api.model.OAuthAccessTokenList" }, "OAuthAuthorizeToken": { "$ref": "#/definitions/os_oauth_OAuthAuthorizeToken", "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeToken" }, "OAuthAuthorizeTokenList": { "$ref": "#/definitions/os_oauth_OAuthAuthorizeTokenList", "javaType": "io.fabric8.openshift.api.model.OAuthAuthorizeTokenList" }, "OAuthClient": { "$ref": "#/definitions/os_oauth_OAuthClient", "javaType": "io.fabric8.openshift.api.model.OAuthClient" }, "OAuthClientAuthorization": { "$ref": "#/definitions/os_oauth_OAuthClientAuthorization", "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorization" }, "OAuthClientAuthorizationList": { "$ref": "#/definitions/os_oauth_OAuthClientAuthorizationList", "javaType": "io.fabric8.openshift.api.model.OAuthClientAuthorizationList" }, "OAuthClientList": { "$ref": "#/definitions/os_oauth_OAuthClientList", "javaType": "io.fabric8.openshift.api.model.OAuthClientList" }, "ObjectMeta": { "$ref": "#/definitions/kubernetes_ObjectMeta", "javaType": "io.fabric8.kubernetes.api.model.ObjectMeta" }, "PersistentVolume": { "$ref": "#/definitions/kubernetes_PersistentVolume", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolume" }, "PersistentVolumeClaim": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaim", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaim" }, "PersistentVolumeClaimList": { "$ref": "#/definitions/kubernetes_PersistentVolumeClaimList", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeClaimList" }, "PersistentVolumeList": { "$ref": "#/definitions/kubernetes_PersistentVolumeList", "javaType": "io.fabric8.kubernetes.api.model.PersistentVolumeList" }, "PodList": { "$ref": "#/definitions/kubernetes_PodList", "javaType": "io.fabric8.kubernetes.api.model.PodList" }, "Policy": { "$ref": "#/definitions/os_authorization_Policy", "javaType": "io.fabric8.openshift.api.model.Policy" }, "PolicyBinding": { "$ref": "#/definitions/os_authorization_PolicyBinding", "javaType": "io.fabric8.openshift.api.model.PolicyBinding" }, "PolicyBindingList": { "$ref": "#/definitions/os_authorization_PolicyBindingList", "javaType": "io.fabric8.openshift.api.model.PolicyBindingList" }, "PolicyList": { "$ref": "#/definitions/os_authorization_PolicyList", "javaType": "io.fabric8.openshift.api.model.PolicyList" }, "Project": { "$ref": "#/definitions/os_project_Project", "javaType": "io.fabric8.openshift.api.model.Project" }, "ProjectList": { "$ref": "#/definitions/os_project_ProjectList", "javaType": "io.fabric8.openshift.api.model.ProjectList" }, "ProjectRequest": { "$ref": "#/definitions/os_project_ProjectRequest", "javaType": "io.fabric8.openshift.api.model.ProjectRequest" }, "Quantity": { "$ref": "#/definitions/kubernetes_resource_Quantity", "javaType": "io.fabric8.kubernetes.api.model.Quantity" }, "ReplicationControllerList": { "$ref": "#/definitions/kubernetes_ReplicationControllerList", "javaType": "io.fabric8.kubernetes.api.model.ReplicationControllerList" }, "ResourceQuota": { "$ref": "#/definitions/kubernetes_ResourceQuota", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuota" }, "ResourceQuotaList": { "$ref": "#/definitions/kubernetes_ResourceQuotaList", "javaType": "io.fabric8.kubernetes.api.model.ResourceQuotaList" }, "Role": { "$ref": "#/definitions/os_authorization_Role", "javaType": "io.fabric8.openshift.api.model.Role" }, "RoleBinding": { "$ref": "#/definitions/os_authorization_RoleBinding", "javaType": "io.fabric8.openshift.api.model.RoleBinding" }, "RoleBindingList": { "$ref": "#/definitions/os_authorization_RoleBindingList", "javaType": "io.fabric8.openshift.api.model.RoleBindingList" }, "RoleList": { "$ref": "#/definitions/os_authorization_RoleList", "javaType": "io.fabric8.openshift.api.model.RoleList" }, "RootPaths": { "$ref": "#/definitions/api_RootPaths", "javaType": "io.fabric8.kubernetes.api.model.RootPaths" }, "RouteList": { "$ref": "#/definitions/os_route_RouteList", "javaType": "io.fabric8.openshift.api.model.RouteList" }, "Secret": { "$ref": "#/definitions/kubernetes_Secret", "javaType": "io.fabric8.kubernetes.api.model.Secret" }, "SecretList": { "$ref": "#/definitions/kubernetes_SecretList", "javaType": "io.fabric8.kubernetes.api.model.SecretList" }, "SecurityContextConstraints": { "$ref": "#/definitions/kubernetes_SecurityContextConstraints", "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraints" }, "SecurityContextConstraintsList": { "$ref": "#/definitions/kubernetes_SecurityContextConstraintsList", "javaType": "io.fabric8.kubernetes.api.model.SecurityContextConstraintsList" }, "ServiceAccount": { "$ref": "#/definitions/kubernetes_ServiceAccount", "javaType": "io.fabric8.kubernetes.api.model.ServiceAccount" }, "ServiceAccountList": { "$ref": "#/definitions/kubernetes_ServiceAccountList", "javaType": "io.fabric8.kubernetes.api.model.ServiceAccountList" }, "ServiceList": { "$ref": "#/definitions/kubernetes_ServiceList", "javaType": "io.fabric8.kubernetes.api.model.ServiceList" }, "Status": { "$ref": "#/definitions/kubernetes_Status", "javaType": "io.fabric8.kubernetes.api.model.Status" }, "SubjectAccessReview": { "$ref": "#/definitions/os_authorization_SubjectAccessReview", "javaType": "io.fabric8.openshift.api.model.SubjectAccessReview" }, "SubjectAccessReviewResponse": { "$ref": "#/definitions/os_authorization_SubjectAccessReviewResponse", "javaType": "io.fabric8.openshift.api.model.SubjectAccessReviewResponse" }, "TagEvent": { "$ref": "#/definitions/os_image_TagEvent", "javaType": "io.fabric8.openshift.api.model.TagEvent" }, "Template": { "$ref": "#/definitions/os_template_Template", "javaType": "io.fabric8.openshift.api.model.Template" }, "TemplateList": { "$ref": "#/definitions/os_template_TemplateList", "javaType": "io.fabric8.openshift.api.model.TemplateList" }, "User": { "$ref": "#/definitions/os_user_User", "javaType": "io.fabric8.openshift.api.model.User" }, "UserList": { "$ref": "#/definitions/os_user_UserList", "javaType": "io.fabric8.openshift.api.model.UserList" }, "WatchEvent": { "$ref": "#/definitions/kubernetes_watch_WatchEvent", "javaType": "io.fabric8.kubernetes.api.model.WatchEvent" } }, "additionalProperties": true }; })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { var hiddenProperties = ['status', 'deletionTimestamp']; function withProperty(schema, name, action) { if (schema.properties[name]) { action(schema.properties[name]); } } function hideProperties(schema) { _.forEach(hiddenProperties, function (property) { withProperty(schema, property, function (property) { property.hidden = true; }); }); } Kubernetes._module.factory('KubernetesSchema', ['SchemaRegistry', function (schemas) { Kubernetes.configureSchema(); schemas.addListener("k8s schema customizer", function (name, schema) { if (schema.properties) { if (schema.properties.name) { schema.controls = ['name', '*']; } withProperty(schema, 'portalIP', function (property) { property.label = "Portal IP"; }); withProperty(schema, 'publicIPs', function (property) { property.label = "Public IPs"; }); withProperty(schema, 'Spec', function (property) { property.label = 'false'; }); withProperty(schema, 'Metadata', function (property) { property.label = 'false'; }); hideProperties(schema); } if (_.endsWith(name, "ServiceSpec")) { schema.controls = ["portalIP", "createExternalLoadBalancer", "sessionAffinity", "publicIPs", "ports", "selector", "*"]; withProperty(schema, 'sessionAffinity', function (property) { Kubernetes.log.debug("Schema: ", schema); property.enum = ['None', 'ClientIP']; property.default = 'None'; }); } if (_.endsWith(name, "Service")) { schema.controls = undefined; schema.tabs = { 'Basic Information': ['metadata'], 'Details': ['*'] }; Kubernetes.log.debug("Name: ", name, " Schema: ", schema); } }); schemas.addSchema('kubernetes', Kubernetes.schema); // now lets iterate and add all the definitions too angular.forEach(Kubernetes.schema.definitions, function (definition, typeName) { //schemas.addSchema(typeName, definition); schemas.addSchema("#/definitions/" + typeName, definition); }); return Kubernetes.schema; }]); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { // facade this to the watcher service var KubernetesStateImpl = (function () { function KubernetesStateImpl(watcher) { this.watcher = watcher; } Object.defineProperty(KubernetesStateImpl.prototype, "namespaces", { get: function () { return _.map(this.watcher.getObjects(Kubernetes.WatchTypes.NAMESPACES), function (namespace) { return namespace.metadata.name; }); }, enumerable: true, configurable: true }); Object.defineProperty(KubernetesStateImpl.prototype, "selectedNamespace", { get: function () { return this.watcher.getNamespace(); }, set: function (namespace) { this.watcher.setNamespace(namespace); }, enumerable: true, configurable: true }); return KubernetesStateImpl; }()); Kubernetes._module.factory('KubernetesState', ['WatcherService', function (watcher) { return new KubernetesStateImpl(watcher); }]); // TODO this doesn't need to be a service really Kubernetes._module.factory('KubernetesApiURL', function () { return Kubernetes.kubernetesApiUrl(); }); // TODO we'll get rid of this... Kubernetes._module.factory('KubernetesVersion', [function () { return { query: function () { return null; } }; }]); // TODO let's move these into KubernetesModel so controllers don't have to inject them separately Kubernetes._module.factory('KubernetesPods', ['KubernetesModel', function (KubernetesModel) { return KubernetesModel['podsResource']; }]); Kubernetes._module.factory('KubernetesReplicationControllers', ['KubernetesModel', function (KubernetesModel) { return KubernetesModel['replicationcontrollersResource']; }]); Kubernetes._module.factory('KubernetesServices', ['KubernetesModel', function (KubernetesModel) { return KubernetesModel['servicesResource']; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.FileDropController = Kubernetes.controller("FileDropController", ["$scope", "KubernetesModel", "FileUploader", '$http', function ($scope, model, FileUploader, $http) { var log = Logger.get('kubernetes-file-uploader'); var uploader = $scope.uploader = new FileUploader({ autoUpload: false, removeAfterUpload: true, url: Kubernetes.kubernetesApiUrl() }); $scope.uploader.onAfterAddingFile = function (file) { var reader = new FileReader(); reader.onload = function () { if (reader.readyState === 2) { log.debug("File added: ", file); var data = reader.result; var obj = null; if (_.endsWith(file._file.name, '.json')) { log.debug("Parsing JSON file"); try { obj = angular.fromJson(data); } catch (err) { log.debug("Failed to read dropped file ", file._file.name, ": ", err); return; } } else if (_.endsWith(file._file.name, '.yaml')) { log.debug("Parsing YAML file"); try { obj = jsyaml.load(data); } catch (err) { log.debug("Failed to read dropped file ", file._file.name, ": ", err); return; } } else { log.debug("Unknown file type for file: ", file._file.name); return; } log.debug("Dropped object: ", obj); if (!KubernetesAPI.getNamespace(obj)) { obj.metadata.namespace = model.currentNamespace(); } KubernetesAPI.put({ object: obj, success: function (data) { Core.notification("success", "Applied " + file._file.name); }, error: function (err) { log.info("Got error applying", file._file.name, ": ", err); Core.notification("warning", "Failed to apply " + file._file.name + ", error: " + err.message); } }); } }; reader.readAsText(file._file); }; $scope.uploader.onBeforeUploadItem = function (item) { log.debug("Uploading: ", item); //Core.notification('info', 'Uploading ' + item); }; $scope.uploader.onSuccessItem = function (item) { log.debug("onSuccessItem: ", item); }; $scope.uploader.onErrorItem = function (item, response, status) { log.debug("Failed to apply, response: ", response, " status: ", status); }; }]); Kubernetes.NamespaceController = Kubernetes.controller('NamespaceController', ['$scope', 'WatcherService', function ($scope, watcher) { $scope.namespaces = watcher.getObjects('namespaces'); $scope.$watchCollection('namespaces', function (newValue, oldValue) { if (newValue !== oldValue) { $scope.namespace = watcher.getNamespace(); } }); $scope.$watch('namespace', function (newValue, oldValue) { if (newValue !== oldValue) { if (newValue !== oldValue) { watcher.setNamespace(newValue); } } }); }]); Kubernetes.TopLevel = Kubernetes.controller("TopLevel", ["$scope", "KubernetesVersion", "KubernetesState", function ($scope, KubernetesVersion, KubernetesState) { $scope.version = undefined; $scope.showAppView = Kubernetes.isAppView(); $scope.isActive = function (href) { return Kubernetes.isLinkActive(href); }; $scope.mode = 'yaml'; $scope.rawMode = true; $scope.dirty = false; $scope.readOnly = true; $scope.rawModel = null; $scope.$on('hawtioEditor_default_dirty', function ($event, dirty) { $scope.dirty = dirty; }); $scope.save = function (rawModel) { var obj = null; var str = rawModel.replace(/\t/g, " "); try { obj = jsyaml.load(str); } catch (err) { Core.notification("warning", "Failed to save object, error: \"" + err + "\""); } if (!obj) { return; } $scope.readOnly = true; KubernetesAPI.put({ object: obj, success: function (data) { $scope.dirty = false; Core.notification("success", "Saved object " + Kubernetes.getName(obj)); Core.$apply($scope); }, error: function (err) { console.log("Got error: ", err); Core.notification("warning", "Failed to save object, error: \"" + err.message + "\""); $scope.dirty = false; Core.$apply($scope); } }); }; $scope.kubernetes = KubernetesState; KubernetesVersion.query(function (response) { $scope.version = response; }); }]); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { Kubernetes.NamespaceController = Kubernetes.controller("NamespaceController", ["$scope", "WatcherService", function ($scope, watcher) { $scope.watcher = watcher; $scope.namespaceObjects = watcher.getObjects('namespaces'); $scope.namespace = watcher.getNamespace(); $scope.namespaces = []; $scope.$watch('namespace', function (newValue, oldValue) { if (newValue !== oldValue) { watcher.setNamespace(newValue); } }); $scope.$watch('watcher.getNamespace()', function (newValue, oldValue) { if (newValue !== oldValue) { $scope.namespace = newValue; } }); $scope.$watchCollection('namespaceObjects', function (namespaceObjects) { $scope.namespaces = _.map(namespaceObjects, function (namespace) { return namespace.metadata.name; }); }); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { var OverviewDirective = Kubernetes._module.directive("kubernetesOverview", ["$templateCache", "$compile", "$interpolate", "$timeout", "$window", "KubernetesState", 'KubernetesModel', function ($templateCache, $compile, $interpolate, $timeout, $window, KubernetesState, KubernetesModel) { var log = Logger.get('kubernetes-overview'); var model = KubernetesModel; var state = KubernetesState; return { restrict: 'E', replace: true, link: function (scope, element, attr) { scope.model = model; element.css({ visibility: 'hidden' }); scope.getEntity = function (type, key) { switch (type) { case 'host': return model.podsByHost[key]; case 'pod': return model.podsByKey[key]; case 'replicationController': return model.replicationControllersByKey[key]; case 'service': return model.servicesByKey[key]; default: return undefined; } }; scope.kubernetes = state; scope.customizeDefaultOptions = function (options) { options.Endpoint = ['Blank', {}]; }; scope.mouseEnter = function ($event) { if (scope.jsPlumb) { angular.element($event.currentTarget).addClass("hovered"); scope.jsPlumb.getEndpoints($event.currentTarget).forEach(function (endpoint) { endpoint.connections.forEach(function (connection) { if (!connection.isHover()) { connection.setHover(true); connection.endpoints.forEach(function (e) { scope.mouseEnter({ currentTarget: e.element }); }); } }); }); } }; scope.mouseLeave = function ($event) { if (scope.jsPlumb) { angular.element($event.currentTarget).removeClass("hovered"); scope.jsPlumb.getEndpoints($event.currentTarget).forEach(function (endpoint) { endpoint.connections.forEach(function (connection) { if (connection.isHover()) { connection.setHover(false); connection.endpoints.forEach(function (e) { scope.mouseLeave({ currentTarget: e.element }); }); } }); }); } }; /* scope.customizeEndpointOptions = (jsPlumb, node, options) => { var type = node.el.attr('data-type'); // log.debug("endpoint type: ", type); switch (type) { case 'pod': break; case 'service': break; case 'replicationController': break; } }; */ scope.customizeConnectionOptions = function (jsPlumb, edge, params, options) { var type = edge.source.el.attr('data-type'); options.connector = ["Bezier", { curviness: 50, stub: 25, alwaysRespectStubs: true }]; params.paintStyle = { lineWidth: 2, strokeStyle: '#5555cc' }; switch (type) { case 'pod': break; case 'service': params.anchors = [ ["Continuous", { faces: ["right"] }], ["Continuous", { faces: ["left"] }] ]; break; case 'replicationController': params.anchors = [ ["Perimeter", { shape: "Circle" }], ["Continuous", { faces: ["right"] }] ]; break; } //log.debug("connection source type: ", type); return options; }; function interpolate(template, config) { return $interpolate(template)(config); } function createElement(template, thingName, thing) { var config = {}; config[thingName] = thing; return interpolate(template, config); } function createElements(template, thingName, things) { return things.map(function (thing) { return createElement(template, thingName, thing); }); } function appendNewElements(parentEl, template, thingName, things) { things.forEach(function (thing) { var key = thing['_key'] || thing['elementId'] || thing['id']; var existing = parentEl.find("#" + key); if (!existing.length) { log.debug("existing: ", existing, " key: ", key); parentEl.append($compile(createElement(template, thingName, thing))(scope)); } }); } function namespaceFilter(item) { return Kubernetes.getNamespace(item) === scope.kubernetes.selectedNamespace; } function firstDraw() { log.debug("First draw"); element.empty(); var services = model.services; var replicationControllers = model.replicationControllers; var pods = model.pods; var hosts = model.hosts; // log.debug("hosts: ", model.hosts); var parentEl = angular.element($templateCache.get("overviewTemplate.html")); var servicesEl = parentEl.find(".services"); var hostsEl = parentEl.find(".hosts"); var replicationControllersEl = parentEl.find(".replicationControllers"); servicesEl.append(createElements($templateCache.get("serviceTemplate.html"), 'service', services.filter(namespaceFilter))); replicationControllersEl.append(createElements($templateCache.get("replicationControllerTemplate.html"), 'replicationController', replicationControllers.filter(namespaceFilter))); hosts.forEach(function (host) { var hostEl = angular.element(createElement($templateCache.get("overviewHostTemplate.html"), 'host', host)); var podContainer = angular.element(hostEl.find('.pod-container')); podContainer.append(createElements($templateCache.get("podTemplate.html"), "pod", host.pods)); hostsEl.append(hostEl); }); //parentEl.append(createElements($templateCache.get("podTemplate.html"), 'pod', pods)); element.append($compile(parentEl)(scope)); $timeout(function () { element.css({ visibility: 'visible' }); }, 250); } function update() { scope.$emit('jsplumbDoWhileSuspended', function () { log.debug("Update"); var services = model.services; var replicationControllers = model.replicationControllers; var pods = model.pods; var hosts = model.hosts; var parentEl = element.find('[hawtio-jsplumb]'); var children = parentEl.find('.jsplumb-node'); children.each(function (index, c) { var child = angular.element(c); var key = child.attr('id'); log.debug('key: ', key); if (Core.isBlank(key)) { return; } var type = child.attr('data-type'); switch (type) { case 'host': if (key in model.podsByHost) { return; } break; case 'service': if (key in model.servicesByKey && Kubernetes.getNamespace(model.servicesByKey[key]) == scope.kubernetes.selectedNamespace) { var service = model.servicesByKey[key]; child.attr('connect-to', service.connectTo); return; } break; case 'pod': /* if (hasId(pods, id)) { return; } */ if (key in model.podsByKey) { return; } break; case 'replicationController': if (key in model.replicationControllersByKey) { var replicationController = model.replicationControllersByKey[key]; child.attr('connect-to', replicationController.connectTo); return; } break; default: log.debug("Ignoring element with unknown type"); return; } log.debug("Removing: ", key); child.remove(); }); var servicesEl = element.find(".services"); var replicationControllersEl = element.find(".replicationControllers"); var hostsEl = element.find(".hosts"); appendNewElements(servicesEl, $templateCache.get("serviceTemplate.html"), "service", services); appendNewElements(replicationControllersEl, $templateCache.get("replicationControllerTemplate.html"), "replicationController", replicationControllers); appendNewElements(hostsEl, $templateCache.get("overviewHostTemplate.html"), "host", hosts); hosts.forEach(function (host) { var hostEl = angular.element(hostsEl.find("#" + host.elementId)); var podContainer = angular.element(hostEl.find('.pod-container')); appendNewElements(podContainer, $templateCache.get("podTemplate.html"), "pod", host.pods); }); }); } function refreshDrawing() { log.debug("Refreshing drawing"); if (element.children().length === 0) { firstDraw(); } else { update(); } Core.$apply(scope); } scope.$on('kubernetesModelUpdated', _.debounce(refreshDrawing, 500, { trailing: true })); setTimeout(refreshDrawing, 100); } }; }]); var OverviewBoxController = Kubernetes.controller("OverviewBoxController", ["$scope", "$location", function ($scope, $location) { $scope.viewDetails = function (entity, path) { if (entity) { var namespace = Kubernetes.getNamespace(entity); var id = Kubernetes.getName(entity); $location.path(UrlHelpers.join('/kubernetes/namespace', namespace, path, id)); } else { Kubernetes.log.warn("No entity for viewDetails!"); } }; }]); var scopeName = "OverviewController"; var OverviewController = Kubernetes.controller(scopeName, ["$scope", "$location", "$http", "$timeout", "$routeParams", "KubernetesModel", "KubernetesState", "KubernetesApiURL", function ($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL) { $scope.name = scopeName; $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); //$scope.subTabConfig = []; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.PipelinesController = Kubernetes.controller("PipelinesController", ["$scope", "KubernetesModel", "KubernetesState", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); /** * Lets update the various data to join them together to a pipeline model */ function updateData() { var pipelineSteps = {}; if ($scope.buildConfigs && $scope.builds && $scope.deploymentConfigs) { Kubernetes.enrichBuildConfigs($scope.buildConfigs, $scope.builds); $scope.fetched = true; angular.forEach($scope.buildConfigs, function (buildConfig) { var pipelineKey = createPipelineKey(buildConfig); if (pipelineKey) { pipelineSteps[pipelineKey] = { buildConfig: buildConfig, builds: [], triggeredBy: null, triggersSteps: [], $class: 'pipeline-build' }; } }); angular.forEach($scope.builds, function (build) { var pipelineKey = createPipelineKey(build); if (pipelineKey) { var pipeline = pipelineSteps[pipelineKey]; if (!pipeline) { //console.log("warning no pipeline generated for buildConfig for key " + pipelineKey + " for build " + angular.toJson(build, true)); console.log("warning no pipeline generated for buildConfig for key " + pipelineKey + " for build " + build.$name); } else { pipeline.builds.push(build); } } }); // TODO now we need to look at the triggers to figure out which pipelineSteps triggers each pipelineStep // now lets create an array of all pipelines, starting from the first known step with a list of the steps var pipelines = []; angular.forEach(pipelineSteps, function (pipelineStep, key) { if (!pipelineStep.triggeredBy) { // we are a root step.... pipelines.push(pipelineStep); // now lets add all the steps for this key... pipelineStep.triggersSteps.push(pipelineStep); angular.forEach(pipelineSteps, function (step) { if (step.triggeredBy === key) { pipelineStep.triggersSteps.push(step); } }); } }); angular.forEach($scope.deploymentConfigs, function (deploymentConfig) { if (!deploymentConfig.kind) { deploymentConfig.kind = "DeploymentConfig"; } angular.forEach(deploymentConfig.triggers, function (trigger) { var type = trigger.type; var imageChangeParams = trigger.imageChangeParams; if (imageChangeParams && type === "ImageChange") { var from = imageChangeParams.from; if (from) { var name = from.name; if (from.kind === "ImageRepository") { var tag = imageChangeParams.tag || "latest"; if (name) { // now lets find a pipeline step which fires from this angular.forEach(pipelineSteps, function (pipelineStep, key) { var to = Core.pathGet(pipelineStep, ["buildConfig", "parameters", "output", "to"]); if (to && (to.kind === "ImageRepository" || to.kind === "ImageStream")) { var toName = to.name; if (toName === name) { var selector = Core.pathGet(deploymentConfig, ["template", "controllerTemplate", "selector"]); var pods = []; var $podCounters = selector ? Kubernetes.createPodCounters(selector, KubernetesModel.podsForNamespace(), pods) : null; var deployPipelineStep = { buildConfig: deploymentConfig, $class: 'pipeline-deploy', $podCounters: $podCounters, $pods: pods }; pipelineStep.triggersSteps.push(deployPipelineStep); } } }); } } } } }); }); $scope.pipelines = pipelines; } } /** * Lets create a unique key for build / config we can use to do linking of builds / configs / triggers */ function createPipelineKey(buildConfig) { return Core.pathGet(buildConfig, ["parameters", "source", "git", "uri"]); } $scope.$keepPolling = function () { return Kubernetes.keepPollingModel; }; $scope.fetch = PollHelpers.setupPolling($scope, function (next) { var ready = 0; var numServices = 3; function maybeNext() { if (++ready >= numServices) { next(); } } var url = Kubernetes.buildsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.builds = Kubernetes.enrichBuilds(data.items); updateData(); } maybeNext(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); maybeNext(); }); url = Kubernetes.buildConfigsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.buildConfigs = data.items; updateData(); } maybeNext(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); maybeNext(); }); url = Kubernetes.deploymentConfigsRestURL(); $http.get(url). success(function (data, status, headers, config) { if (data) { $scope.deploymentConfigs = data.items; updateData(); } maybeNext(); }). error(function (data, status, headers, config) { Kubernetes.log.warn("Failed to load " + url + " " + data + " " + status); maybeNext(); }); }); $scope.fetch(); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.PodController = Kubernetes.controller("PodController", ["$scope", "KubernetesModel", "KubernetesState", "ServiceRegistry", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "$window", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, ServiceRegistry, $templateCache, $location, $routeParams, $http, $timeout, $window, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.rawModel = null; $scope.itemConfig = { properties: { 'containers/image$': { template: $templateCache.get('imageTemplate.html') }, 'status/phase': { template: $templateCache.get('statusTemplate.html') }, '\\/Env\\/': { template: $templateCache.get('envItemTemplate.html') }, '^\\/labels$': { template: $templateCache.get('labelTemplate.html') }, '\\/env\\/key$': { hidden: true } } }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.$watch('model.pods', function (newValue, oldValue) { updateData(); }, true); $scope.flipRaw = function () { $scope.rawMode = !$scope.rawMode; Core.$apply($scope); }; $scope.openLogs = function () { var pods = [$scope.item]; Kubernetes.openLogsForPods(ServiceRegistry, $window, KubernetesModel.currentNamespace(), pods); }; updateData(); function updateData() { $scope.id = $routeParams["id"]; $scope.item = $scope.model.getPod(KubernetesState.selectedNamespace, $scope.id); if ($scope.item) { $scope.rawModel = Kubernetes.toRawYaml($scope.item); } Core.$apply($scope); } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.PodEditController = Kubernetes.controller("PodEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.Pod"); //$scope.config = KubernetesSchema.definitions.kubernetes_v1beta2_Pod; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { if ($scope.id) { $scope.entity = $scope.model.getPod(KubernetesState.selectedNamespace, $scope.id); Core.$apply($scope); $scope.fetched = true; } else { $scope.fetched = true; } } $scope.save = function () { console.log($scope.entity); }; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { var log = Logger.get("kubernetes-pod-logs"); Kubernetes._module.service("PodLogReplacements", function () { return []; }); Kubernetes._module.run(["PodLogReplacements", function (PodLogReplacements) { var log = Logger.get("pod-log-replacers"); // Add ANSI escape character replacer // adapted from https://github.com/mmalecki/ansispan var colors = { '30': 'black', '31': 'red', '32': 'green', '33': 'yellow', '34': 'blue', '35': 'purple', '36': 'cyan', '37': 'white' }; PodLogReplacements.push(function (msg) { if (!msg) { return msg; } var end = ""; _.forOwn(colors, function (color, code) { var start = ""; msg = msg.replace(new RegExp('\033\\[' + code + 'm', 'g'), start); msg = msg.replace(new RegExp('\033\\[0;' + code + 'm', 'g'), start); }); msg = msg.replace(/\033\[1m/g, '').replace(/\033\[22m/g, ''); msg = msg.replace(/\033\[3m/g, '').replace(/\033\[23m/g, ''); msg = msg.replace(/\033\[m/g, end); msg = msg.replace(/\033\[0m/g, end); msg = msg.replace(/\033\[39m/g, end); msg = msg.replace(/\033\[2m/g, ''); msg = msg.replace(/\033\[0;39m/g, end); log.debug("Running replacement on message: ", msg); return msg; }); }]); Kubernetes._module.controller("Kubernetes.PodLogLinkController", ["$scope", "$interval", "TerminalService", "$templateCache", function ($scope, $interval, TerminalService, $templateCache) { $scope.openLogs = function (entity) { log.debug("Open logs: ", entity); TerminalService.newTerminal($interval, entity.metadata.selfLink, entity.$oracleName, entity, $templateCache.get(UrlHelpers.join(Kubernetes.templatePath, 'logShell.html'))); }; }]); Kubernetes._module.directive('podLogDisplay', ["userDetails", "PodLogReplacements", function (userDetails, PodLogReplacements) { return { restrict: 'E', template: "\n
\n ", link: function (scope, element, attr) { var link = scope.$eval('podLink'); var name = scope.$eval('containerName'); if (!link) { return; } scope.fetched = false; scope.previous = false; scope.messages = []; link = UrlHelpers.join(Kubernetes.masterApiUrl(), link, 'log'); link = KubernetesAPI.wsUrl(link); link.search({ follow: true, tailLines: 1000, access_token: userDetails.token }); var messages = []; var pullMessages = _.debounce(function () { scope.messages = scope.messages.concat(_.remove(messages, function () { return true; }).map(function (msg) { PodLogReplacements.forEach(function (replFunc) { if (angular.isFunction(replFunc)) { msg = replFunc(msg); } }); return msg; })); if (!scope.fetched) { scope.fetched = true; } Core.$apply(scope); }, 1000); function initSocket(link) { scope.fetched = false; messages.length = 0; scope.messages.length = 0; var ws = new WebSocket(link.toString(), 'base64.binary.k8s.io'); ws.onmessage = function (event) { try { var message = window.atob(event.data); messages.push(message); pullMessages(); } catch (err) { } }; return ws; } var ws = initSocket(link); scope.$watch('previous', function (value, old) { if (value !== old) { if (link.hasSearch('previous')) { link.removeSearch('previous').addSearch('previous', scope.previous); } else { link.addSearch('previous', scope.previous); } ws.close(); ws = initSocket(link); } }); element.on('$destroy', function () { if (ws) { try { ws.close(); } catch (err) { } delete ws; } }); } }; }]); Kubernetes._module.directive('podLogWindow', ["$compile", "TerminalService", function ($compile, TerminalService) { return { restrict: 'A', scope: false, link: function (scope, element, attr) { Kubernetes.addWindowActions(scope, element, TerminalService); scope.atBottom = true; scope.$watch('atBottom', function (val) { }); } }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.EnvItem = Kubernetes.controller("EnvItem", ["$scope", function ($scope) { var parts = $scope.data.split('='); $scope.key = parts.shift(); $scope.value = parts.join('='); }]); // main controller for the page Kubernetes.Pods = Kubernetes.controller("Pods", ["$scope", "KubernetesModel", "KubernetesPods", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesPods, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.itemSchema = Forms.createFormConfiguration(); $scope.tableConfig = { data: 'model.pods', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '_key', displayName: 'Name', defaultSort: true, cellTemplate: $templateCache.get("idTemplate.html") }, { field: '$statusCss', displayName: 'Status', cellTemplate: $templateCache.get("statusTemplate.html") }, { field: '$eventCount', displayName: 'Events', cellTemplate: $templateCache.get("eventSummaryTemplate.html") }, { field: '$restartCount', displayName: 'Restarts' }, { field: '$createdTime', displayName: 'Age', cellTemplate: $templateCache.get("ageTemplate.html") }, { field: '$imageNames', displayName: 'Images', cellTemplate: $templateCache.get("imageTemplate.html") }, { field: '$host', displayName: 'Host', cellTemplate: $templateCache.get("hostTemplate.html") }, { field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") }, { field: '$podIP', displayName: 'Pod IP', customSortField: function (field) { return Kubernetes.sortByPodIp(field.$podIP); } } ] }; $scope.openLogs = function () { var pods = $scope.tableConfig.selectedItems; if (!pods || !pods.length) { if ($scope.id) { var item = $scope.item; if (item) { pods = [item]; } } } Kubernetes.openLogsForPods(ServiceRegistry, $window, KubernetesModel.currentNamespace(), pods); }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } UI.multiItemConfirmActionDialog({ collection: selected, index: 'metadata.name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { Kubernetes.log.debug("deleting: ", Kubernetes.getName(next)); KubernetesPods.delete({ id: Kubernetes.getName(next) }, undefined, function () { Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); deleteSelected(selected, selected.shift()); }, function (error) { Kubernetes.log.debug("Error deleting: ", error); deleteSelected(selected, selected.shift()); }); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete pods?', action: 'The following pods will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; $scope.createPods = function () { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { var obj = JSON.parse(xhr.responseText); var object = { "name": "newpod", "labels": { "aim": "test", "app": "oracle" }, "path": '/home/', "port": 1525 }; Kubernetes.createRC(object); } else { } } }; xhr.open("POST", "/oracleAppPath", false); //与服务器连接并发送 xhr.send(null); }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ReplicationControllerController = Kubernetes.controller("ReplicationControllerController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.rawModel = null; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.itemConfig = { properties: { '^\\/labels$': { template: $templateCache.get('labelTemplate.html') } } }; $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.$watch('model.pods', function (newValue, oldValue) { updateData(); }, true); $scope.flipRaw = function () { $scope.rawMode = !$scope.rawMode; Core.$apply($scope); }; updateData(); function updateData() { if ($scope.dirty) { return; } $scope.id = $routeParams["id"]; $scope.item = $scope.model.getReplicationController(KubernetesState.selectedNamespace, $scope.id); if ($scope.item) { $scope.rawModel = Kubernetes.toRawYaml($scope.item); } Core.$apply($scope); } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ReplicationControllerEditController = Kubernetes.controller("ReplicationControllerEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; Kubernetes.log.debug("Schema: ", $scope.schema); $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.ReplicationController"); //$$scope.config = KubernetesSchema.definitions.kubernetes_v1beta3_ReplicationController; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { if ($scope.id) { $scope.entity = $scope.model.getReplicationController(KubernetesState.selectedNamespace, $scope.id); Core.$apply($scope); $scope.fetched = true; } else { $scope.fetched = true; } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ReplicationControllers = Kubernetes.controller("ReplicationControllers", ["$scope", "KubernetesModel", "KubernetesReplicationControllers", "KubernetesPods", "ConfigsModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesReplicationControllers, KubernetesPods, ConfigsModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.configs = ConfigsModel; $scope.model = KubernetesModel; $scope.tableConfig = { data: 'model.replicationControllers', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '$oracleName', displayName: '服务名称', cellTemplate: $templateCache.get("idTemplate.html"), customSortField: function (field) { return field; } }, //{ field: '$replicas', // displayName: 'Scale', // cellTemplate:$templateCache.get("desiredReplicas.html") //}, { field: '$pods.age', displayName: '启动时间', cellTemplate: $templateCache.get("ageTemplate.html") }, { field: '$labelsText', displayName: '数据标签', cellTemplate: $templateCache.get("labelTemplate.html") }, { field: '$pods', displayName: '连接参数', cellTemplate: $templateCache.get("connectParamTemplate.html") }, { field: '$podCounters', displayName: '服务状态', cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), customSortField: function (field) { console.log(field); if (field.$podCounters.ready) { return 3; } else if (field.$podCounters.valid || field.$podCounters.waiting) { return 2; } else if (field.$podCounters.error) { return 0; } else { return 1; } } }, { field: '$extractStatus', displayName: '数据汇总状态', cellTemplate: $templateCache.get("dataSummaryTemplate.html") } ], sortInfo: { sortBy: "$oracleName", ascending: false } }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } var extractItems = Kubernetes.checkForExtract(selected); if (extractItems.length == 0) { UI.multiItemConfirmActionDialog({ collection: selected, index: 'metadata.name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { Kubernetes.resizeController($http, KubernetesApiURL, next, 0, function () { KubernetesReplicationControllers.delete({ id: Kubernetes.getName(next) }, undefined, function () { if (next.metadata.labels.style === "oracle") { Kubernetes.connectOracle($http, $timeout, "/java/console/api/cancelOracleConection", "delete", next, 0); } deleteSelected(selected, selected.shift()); }, function (error) { Kubernetes.log.debug("Error deleting: ", error); deleteSelected(selected, selected.shift()); }); }); } } deleteSelected(selected, selected.shift()); } }, title: '是否需要删除oracle服务?', action: '以下的oracle服务将会被删除:', okText: '删除', okClass: 'btn-danger sj_btn_cir', custom: "该服务删除后将会清除oracle对应服务的端口等资源占用,但不删除数据文件,是否删除,请确认!", customClass: "alert alert-warning sj_alert-warning", cancelText: "取消", cancelClass: 'sj_btn_grey' }).open(); } else { var name = ""; angular.forEach(extractItems, function (item) { name += item.$oracleName + ","; }); //alert("删除服务失败:" + name + "服务正在执行汇总操作,不能被删除"); Configs.customAlert("提示", "操作失败:正在执行汇总操作的服务不能被删除!", '', null, 0, "error"); } }; $scope.createRCs = function () { $http({ url: '/java/console/api/cancelOracleConection', dataType: 'json', method: 'POST', params: { param: "data" } }).success(function (data, header, config, status) { console.log("success"); }).error(function (data, header, config, status) { //log.warn("Failed to connect " + connectParam + " " + data + " " + status); }); }; $scope.stopPrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } var extractItems = Kubernetes.checkForExtract(selected); if (extractItems.length == 0) { UI.multiItemConfirmActionDialog({ collection: selected, index: 'metadata.name', onClose: function (result) { if (result) { function stopSelected(selected, next) { if (next) { Kubernetes.resizeController($http, KubernetesApiURL, next, 0, function () { if (next.metadata.labels.style === "oracle") { Kubernetes.connectOracle($http, $timeout, "/java/console/api/cancelOracleConection", "stop", next, 0); } stopSelected(selected, selected.shift()); }); } } stopSelected(selected, selected.shift()); } }, title: '是否需要停止oracle服务?', action: '以下的oracle服务将会被停止:', okText: '停止', okClass: 'btn-danger sj_btn_cir', custom: "该服务停止后将无法继续提供连接访问服务,但可通过启动按钮重新启动该服务以进行访问。是否停止,请确认", customClass: "alert alert-warning sj_alert-warning", cancelText: "取消", cancelClass: 'sj_btn_grey' }).open(); } else { var name = ""; angular.forEach(extractItems, function (item) { name += item.$oracleName + ","; }); //alert("停止服务失败:" + name + "服务正在执行汇总操作,不能停止"); Configs.customAlert("提示", "操作失败:正在执行汇总操作的服务不能被停止!", '', null, 0, "error"); } }; $scope.reStartPrompt = function (selected) { function startSelected(selected, next) { if (next) { console.log(Kubernetes.getLabels(next).status); if (next.$replicas === 0) { Kubernetes.resizeController($http, KubernetesApiURL, next, 1, function () { Kubernetes.connectOracle($http, $timeout, "/java/console/api/connectOracle", "reStart", next, 200); startSelected(selected, selected.shift()); }); } else { if (Kubernetes.getLabels(next).status == "1") Kubernetes.connectOracle($http, $timeout, "/java/console/api/connectOracle", "reStart", next, 200); startSelected(selected, selected.shift()); } } } startSelected(selected, selected.shift()); }; $scope.extractClick = { items: null, selectedItem: { name: "当前没有可用的汇总库" }, dialog: new UI.Dialog(), onOk: function () { var extractClick = $scope.extractClick; extractClick.items = $scope.tableConfig.selectedItems; Kubernetes.extractDataToOracle($http, extractClick.items, extractClick.selectedItem); //extractClick.selectedItem = $scope.filterReplicationControllers[0] || ""; extractClick.dialog.close(); }, open: function (selected) { var extractClick = $scope.extractClick; if ($scope.configs && $scope.configs.oracleParam instanceof Array && $scope.configs.oracleParam.length > 0) extractClick.selectedItem = $scope.configs.oracleParam[0]; var result = Kubernetes.checkIsStartSuccess($scope.tableConfig.selectedItems); if (result.length > 0) { Configs.customAlert("提示", "操作失败:选择服务中存在未启动的数据,请先启动服务", '', null, 0, "error"); return; } extractClick.dialog.open(); /*extractData.selectedItem = $scope.filterReplicationControllers[0] || ""; extractData.items = selected;*/ $timeout(function () { $('#newDataName').focus(); }, 50); }, close: function () { $scope.extractClick.selectedItem = { name: "当前没有可用的汇总库" }; $scope.extractClick.dialog.close(); } }; }]); })(Kubernetes || (Kubernetes = {})); /// /// var Kubernetes; (function (Kubernetes) { function schemaSetRequired(schema, propertyName, isRequired) { if (isRequired === void 0) { isRequired = true; } if (schema && propertyName) { var required = schema.required; if (isRequired) { if (!required) { required = []; schema.required = required; } if (!_.contains(required, propertyName)) { required.push(propertyName); } } else { if (required) { var idx = required.indexOf(propertyName); if (idx >= 0) { required.splice(idx, 1); } } } } } Kubernetes.schemaSetRequired = schemaSetRequired; })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.SecretController = Kubernetes.controller("SecretController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "K8SClientFactory", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, K8SClientFactory) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); Kubernetes.selectSubNavBar($scope, "Secrets", $scope.id ? "Edit Secret: " + $scope.id : "Create Secret"); var kubeClient = Kubernetes.createKubernetesClient("secrets"); var onSaveUrl = $location.search()["savedUrl"]; var createKind = $location.search()["kind"]; $scope.sshKeys = Kubernetes.sshSecretDataKeys; $scope.httpsKeys = Kubernetes.httpsSecretDataKeys; var secretLabels = { "ssh-key": "SSH private key", "ssh-key.pub": "SSH public key", "ca.crt": "CA Certificate", ".dockercfg": "Docker config", "username": "User name" }; var secretTooltips = { "ssh-key": "SSH private key text contents", "ca.crt": "Certificate Authority (CA) Certificate", ".dockercfg": "Docker configuration token" }; $scope.$on('kubernetesModelUpdated', function () { if ($scope.id && !$scope.secret) { updateData(); } }); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.propertyKeys = function () { return _.keys(secretLabels); }; $scope.checkNameUnique = function (value) { var answer = true; angular.forEach($scope.model.secrets, function (secret) { var name = Kubernetes.getName(secret); if (value === name) { answer = false; } }); return answer; }; $scope.checkFieldUnique = function (key) { return $scope.entity.properties[key] ? false : true; }; $scope.hasAllKeys = function (keys) { var answer = keys && keys.length; angular.forEach(keys, function (key) { if (!$scope.entity.properties[key]) { answer = false; } }); return answer; }; $scope.addFieldDialog = { controller: null, newReplicas: 0, dialog: new UI.Dialog(), onOk: function () { $scope.addFieldDialog.dialog.close(); $scope.addDataField(); }, open: function (controller) { var addFieldDialog = $scope.addFieldDialog; addFieldDialog.dialog.open(); $timeout(function () { $('#newDataName').focus(); }, 50); }, close: function () { $scope.addFieldDialog.dialog.close(); } }; $scope.entityChanged = function () { $scope.changed = true; }; $scope.addFields = function (keys) { angular.forEach(keys, function (key) { return addField(key); }); Core.$apply($scope); }; function addField(key) { var property = createProperty(key, ""); $scope.entity.properties[key] = property; $scope.entity.newDataKey = ""; $scope.showAddDataFieldForm = false; $scope.entityChanged(); } $scope.addDataField = function () { var key = $scope.entity.newDataKey; if (key) { addField(key); Core.$apply($scope); } }; $scope.deleteProperty = function (key) { if (key) { delete $scope.entity.properties[key]; $scope.entityChanged(); Core.$apply($scope); } }; $scope.cancel = function () { updateData(); }; $scope.save = function () { var entity = $scope.entity || {}; var name = entity.name; if (name) { if (!$scope.secret) { $scope.secret = { apiVersion: Kubernetes.defaultApiVersion, kind: "Secret", metadata: { name: "" }, data: {} }; } var data = {}; angular.forEach(entity.properties, function (property) { var key = property.key; var value = property.value || ""; if (key) { data[key] = window.btoa(value); } }); $scope.secret.metadata.name = name; $scope.secret.data = data; Core.notification('info', "Saving secret " + name); kubeClient.put($scope.secret, function (data) { var secretsLink = onSaveUrl || Developer.namespaceLink($scope, $routeParams, "secrets"); var params = {}; if (onSaveUrl) { params['secret'] = name; } $location.path(secretsLink); $location.search(params); Kubernetes.log.info("navigating to URL: " + secretsLink + " with params " + angular.toJson($location.search())); }, function (err) { Core.notification('error', "Failed to secret " + name + "\n" + err); }); } }; updateData(); function createProperty(key, text) { var label = secretLabels[key] || Core.humanizeValue(key); var tooltip = secretTooltips[key] || "Value of the " + label; var rows = 5; var lines = text.split("\n").length + 1; if (lines > rows) { rows = lines; } var type = "textarea"; if (key === "username") { type = "text"; if (!text) { text = Kubernetes.currentUserName(); } } else if (key === "password") { type = "password"; } var property = { key: key, label: label, tooltip: tooltip, rows: rows, value: text, type: type }; return property; } function updateData() { $scope.item = null; $scope.changed = false; $scope.entity = { name: $scope.id, properties: {} }; if ($scope.id) { angular.forEach($scope.model.secrets, function (secret) { var name = Kubernetes.getName(secret); if (name === $scope.id) { $scope.secret = secret; angular.forEach(secret.data, function (value, key) { var text = ""; if (angular.isString(value) && value) { text = window.atob(value); } var property = createProperty(key, text); $scope.entity.properties[key] = property; }); $scope.fetched = true; Core.$apply($scope); } }); } else { if (createKind === "ssh") { $scope.addFields($scope.sshKeys); } else if (createKind === "https") { $scope.addFields($scope.httpsKeys); } $scope.fetched = true; Core.$apply($scope); } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.SecretsController = Kubernetes.controller("SecretsController", ["$scope", "KubernetesModel", "KubernetesState", "ServiceRegistry", "$dialog", "$window", "$templateCache", "$routeParams", "$location", "localStorage", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, ServiceRegistry, $dialog, $window, $templateCache, $routeParams, $location, localStorage, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.$on('kubernetesModelUpdated', function () { Core.$apply($scope); }); $scope.$createSecretLink = Developer.namespaceLink($scope, $routeParams, "secretCreate"); var kubeClient = Kubernetes.createKubernetesClient("secrets"); $scope.tableConfig = { data: 'model.secrets', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '_key', displayName: 'Name', defaultSort: true, cellTemplate: $templateCache.get("idTemplate.html") }, { field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") }, ] }; $scope.deletePrompt = function (selected) { UI.multiItemConfirmActionDialog({ collection: selected, index: 'metadata.name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { kubeClient.delete(next, function () { deleteSelected(selected, selected.shift()); }); } else { } } deleteSelected(selected, selected.shift()); } }, title: 'Delete Secrets', action: 'The following Secrets will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ServiceController = Kubernetes.controller("ServiceController", ["$scope", "KubernetesModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.rawModel = null; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.itemConfig = { properties: { '^\\/labels$': { template: $templateCache.get('labelTemplate.html') } } }; $scope.$on('kubernetesModelUpdated', function () { updateData(); }); $scope.$watch('model.services', function (newValue, oldValue) { updateData(); }, true); $scope.$on('$routeUpdate', function ($event) { updateData(); }); $scope.flipRaw = function () { $scope.rawMode = !$scope.rawMode; Core.$apply($scope); }; updateData(); function updateData() { $scope.id = $routeParams["id"]; $scope.namespace = $routeParams["namespace"] || KubernetesState.selectedNamespace; $scope.item = $scope.model.getService($scope.namespace, $scope.id); if ($scope.item) { $scope.rawModel = Kubernetes.toRawYaml($scope.item); } Core.$apply($scope); } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ServiceEditController = Kubernetes.controller("ServiceEditController", ["$scope", "KubernetesModel", "KubernetesState", "KubernetesSchema", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "SchemaRegistry", function ($scope, KubernetesModel, KubernetesState, KubernetesSchema, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL, schemas) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; $scope.id = $routeParams["id"]; $scope.schema = KubernetesSchema; $scope.config = schemas.cloneSchema("io.fabric8.kubernetes.api.model.Service"); //$scope.config = KubernetesSchema.definitions.kubernetes_v1beta2_Service; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$on('$routeUpdate', function ($event) { updateData(); }); updateData(); function updateData() { if ($scope.id) { $scope.entity = $scope.model.getService(KubernetesState.selectedNamespace, $scope.id); Core.$apply($scope); $scope.fetched = true; } else { $scope.fetched = true; } } }]); })(Kubernetes || (Kubernetes = {})); /// /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes._module.factory('ServiceRegistry', [function () { return new ServiceRegistryService(); }]); /** * Represents a simple interface to service discovery that can be used early on in the application lifecycle before the * underlying model has been created via dependency injection */ var ServiceRegistryService = (function () { function ServiceRegistryService() { this.model = null; } /** * Returns true if there is a service available for the given ID or false */ ServiceRegistryService.prototype.hasService = function (serviceName) { return this.findService(serviceName) ? true : false; }; /** * Returns the service for the given service name (ID) or null if it cannot be found * * @param serviceName the name of the service to look for * @return {null} */ ServiceRegistryService.prototype.findService = function (serviceName) { var answer = null; if (serviceName) { var model = this.getModel(); if (model) { var namespace = model.currentNamespace(); return model.getService(namespace, serviceName); } } return answer; }; /** * Returns the service link for the given service name * * @param serviceName the name of the service * @return {null} */ ServiceRegistryService.prototype.serviceLink = function (serviceName) { var service = this.findService(serviceName); return Kubernetes.serviceLinkUrl(service); }; /** * Returns the service link for the given service name if its ready (has at least one ready pod) * * @param serviceName the name of the service * @return {null} */ ServiceRegistryService.prototype.serviceReadyLink = function (serviceName) { var service = this.findService(serviceName); if (Kubernetes.readyPodCount(service)) { return Kubernetes.serviceLinkUrl(service); } else { return null; } }; ServiceRegistryService.prototype.getModel = function () { var answer = this.model; // lets allow lazy load so we can be invoked before the injector has been created if (!answer) { var injector = HawtioCore.injector; if (injector) { this.model = injector.get('KubernetesModel'); } } answer = this.model; return answer; }; return ServiceRegistryService; }()); Kubernetes.ServiceRegistryService = ServiceRegistryService; })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes.ServiceApps = Kubernetes._module.controller('Kubernetes.ServiceApps', ["$scope", "KubernetesModel", function ($scope, KubernetesModel) { $scope.model = KubernetesModel; }]); Kubernetes.Services = Kubernetes.controller("Services", ["$scope", "KubernetesModel", "KubernetesServices", "KubernetesPods", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", function ($scope, KubernetesModel, KubernetesServices, KubernetesPods, KubernetesState, $templateCache, $location, $routeParams, $http, $timeout, KubernetesApiURL) { $scope.kubernetes = KubernetesState; $scope.model = KubernetesModel; ControllerHelpers.bindModelToSearchParam($scope, $location, 'mode', 'mode', 'list'); $scope.tableConfig = { data: 'model.services', showSelectionCheckbox: true, enableRowClickSelection: false, multiSelect: true, selectedItems: [], filterOptions: { filterText: $location.search()["q"] || '' }, columnDefs: [ { field: '_key', displayName: 'Name', cellTemplate: $templateCache.get("idTemplate.html") }, { field: '$serviceUrl', displayName: 'Address', cellTemplate: $templateCache.get("portalAddress.html") }, { field: '$podCount', displayName: 'Pods', cellTemplate: $templateCache.get("podCountsAndLinkTemplate.html"), customSortField: function (field) { // need to concat all the pod counters var ready = field.$podCounters.ready || 0; var valid = field.$podCounters.valid || 0; var waiting = field.$podCounters.waiting || 0; var error = field.$podCounters.error || 0; return ready + valid + waiting + error; } }, { field: '$selectorText', displayName: 'Selector', cellTemplate: $templateCache.get("selectorTemplate.html") }, { field: '$labelsText', displayName: 'Labels', cellTemplate: $templateCache.get("labelTemplate.html") } ] }; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.deletePrompt = function (selected) { if (angular.isString(selected)) { selected = [{ id: selected }]; } UI.multiItemConfirmActionDialog({ collection: selected, index: 'metadata.name', onClose: function (result) { if (result) { function deleteSelected(selected, next) { if (next) { Kubernetes.log.debug("deleting: ", Kubernetes.getName(next)); KubernetesServices.delete({ id: Kubernetes.getName(next) }, undefined, function () { Kubernetes.log.debug("deleted: ", Kubernetes.getName(next)); deleteSelected(selected, selected.shift()); }, function (error) { Kubernetes.log.debug("Error deleting: ", error); deleteSelected(selected, selected.shift()); }); } } deleteSelected(selected, selected.shift()); } }, title: 'Delete services?', action: 'The following services will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { // controller for the status icon cell Kubernetes.PodStatus = Kubernetes.controller("PodStatus", ["$scope", function ($scope) { $scope.statusMapping = function (text) { return Kubernetes.statusTextToCssClass(text); }; }]); Kubernetes._module.controller("Kubernetes.TermController", ["$scope", "TerminalService", function ($scope, TerminalService) { $scope.canConnectTo = function (container) { if (container.securityContext && container.securityContext.privileged) { return false; } return true; }; $scope.openTerminal = function (selfLink, containerName) { var id = TerminalService.newTerminal(selfLink, containerName); Kubernetes.log.debug("Created terminal, id: ", id); }; }]); Kubernetes.DataLabels = Kubernetes.controller("DataLabels", ['$scope', '$location', function ($scope, $location) { $scope.labelClick = function (entity, key, value) { $scope.$emit('dataLabelFilterUpdate', value, key); }; $scope.labelClass = Kubernetes.containerLabelClass; }]); // controller that deals with the labels per pod Kubernetes.Labels = Kubernetes.controller("Labels", ["$scope", "$location", function ($scope, $location) { $scope.labels = []; var labelKeyWeights = { "cityName": 1, "districtName": 2, "systemName": 3, "year": 4, "version": 5 }; $scope.$watch('entity', function (newValue, oldValue) { if (newValue) { // log.debug("labels: ", newValue); // massage the labels a bit $scope.labels = []; angular.forEach(Core.pathGet($scope.entity, ["metadata", "labels"]), function (value, key) { if (key === 'fabric8' || key === 'style' || key === 'status' || (key === 'isTarget' && value === 'false') || key === 'isExtract' || key === 'name') { // TODO not sure what this is for, the container type? return; } $scope.labels.push({ key: key, title: value }); }); // lets sort by key but lets make sure that we weight certain labels so they are first $scope.labels = $scope.labels.sort(function (a, b) { function getWeight(key) { return labelKeyWeights[key] || 0; } var n1 = a["key"]; var n2 = b["key"]; var w1 = getWeight(n1); var w2 = getWeight(n2); var diff = w1 - w2; if (diff < 0) { return -1; } else if (diff > 0) { return 1; } if (n1 && n2) { if (n1 > n2) { return 1; } else if (n1 < n2) { return -1; } else { return 0; } } else { if (n1 === n2) { return 0; } else if (n1) { return 1; } else { return -1; } } }); } }); $scope.handleClick = function (entity, labelType, value) { // log.debug("handleClick, entity: ", entity, " key: ", labelType, " value: ", value); $scope.$emit('labelFilterUpdate', value.title); }; $scope.labelClass = Kubernetes.containerLabelClass; }]); //服务状态过滤 Kubernetes.Status = Kubernetes.controller('Status', ["$scope", "$http", "$interval", "$location", "KubernetesApiURL", function ($scope, $http, $interval, $location, KubernetesApiURL) { /*$scope.$watch('entity', (newValue, oldValue) => { if(newValue) console.log(newValue); },true);*/ }]); Kubernetes.TaskEdit = Kubernetes.controller('TaskEdit', ['$scope', function ($scope) { $scope.showDeleteOne = { show: false, item: null, open: function (entity) { if (entity.status == 1) Configs.customAlert("提示", "操作失败: 正在迁移的任务,不能迁移!", '', null, 0, "error"); else { var showDeleteOne = $scope.showDeleteOne; showDeleteOne.show = true; showDeleteOne.item = entity; } }, onOk: function () { var showDeleteOne = $scope.showDeleteOne; $scope.$emit('deleteRow', showDeleteOne.item); }, onCancel: function () { var showDeleteOne = $scope.showDeleteOne; showDeleteOne.show = false; showDeleteOne.item = null; } }; /*$scope.deleteRow = (entity) =>{ $scope.$emit('deleteRow', entity); }*/ }]); Kubernetes.LoadMask = Kubernetes.controller('LoadMask', ['$scope', function ($scope) { }]); })(Kubernetes || (Kubernetes = {})); /// /// /// var Kubernetes; (function (Kubernetes) { Kubernetes._module.directive("hawtioTabs", ['HawtioSubTabs', function (HawtioSubTabs) { return { link: function (scope, element, attrs) { HawtioSubTabs.apply(scope.$eval('subTabConfig')); } }; }]); })(Kubernetes || (Kubernetes = {})); /// var Kubernetes; (function (Kubernetes) { Kubernetes.TemplateController = Kubernetes.controller("TemplateController", [ "$scope", "$location", "$http", "$timeout", "$routeParams", "marked", "$templateCache", "$modal", "KubernetesModel", "KubernetesState", "KubernetesApiURL", function ($scope, $location, $http, $timeout, $routeParams, marked, $templateCache, $modal, KubernetesModel, KubernetesState, KubernetesApiURL) { var model = $scope.model = KubernetesModel; $scope.filterText = $location.search()["q"]; $scope.targetNamespace = $routeParams.targetNamespace; Kubernetes.initShared($scope, $location, $http, $timeout, $routeParams, KubernetesModel, KubernetesState, KubernetesApiURL); $scope.$watchCollection('model.namespaces', function () { if (!$scope.targetNamespace) { $scope.targetNamespace = model.currentNamespace(); } }); var returnTo = new URI($location.search()['returnTo'] || '/kubernetes/apps'); function goBack() { $location.path(returnTo.path()).search(returnTo.query(true)); } function getAnnotations(obj) { return Core.pathGet(obj, ['metadata', 'annotations']); } function getValueFor(obj, key) { var annotations = getAnnotations(obj); if (!annotations) { return ""; } var name = Kubernetes.getName(obj); if (name) { var fullKey = "fabric8." + name + "/" + key; var answer = annotations[fullKey]; if (answer) { return answer; } } var key = _.find(_.keys(annotations), function (k) { return _.endsWith(k, key); }); if (key) { return annotations[key]; } else { return ""; } } $scope.cancel = function () { if ($scope.formConfig) { delete $scope.formConfig; delete $scope.entity; $scope.objects = undefined; return; } goBack(); }; /* $scope.$watch('model.templates.length', (newValue) => { if (newValue === 0) { goBack(); } }); */ $scope.filterTemplates = function (template) { if (Core.isBlank($scope.filterText)) { return true; } return _.contains(angular.toJson(template), $scope.filterText.toLowerCase()); }; $scope.openFullDescription = function (template) { var text = marked(getValueFor(template, 'description') || 'No description'); var modal = $modal.open({ templateUrl: UrlHelpers.join(Kubernetes.templatePath, 'templateDescription.html'), controller: ['$scope', '$modalInstance', function ($scope, $modalInstance) { $scope.text = text, $scope.ok = function () { modal.close(); }; }] }); }; $scope.getDescription = function (template) { var answer = $(marked(getValueFor(template, 'description') || 'No description')); var textDefault = answer.html(); var maxLength = 200; if (textDefault.length > maxLength) { var truncated = $.trim(textDefault).substring(0, maxLength).split(' ').slice(0, -1).join(' '); answer.html(truncated + '...'); answer.append($templateCache.get('truncatedDescriptionTag.html')); } return answer.html(); }; $scope.getIconUrl = function (template) { return getValueFor(template, 'iconUrl') || Kubernetes.defaultIconUrl; }; $scope.deployTemplate = function (template) { Kubernetes.log.debug("Template parameters: ", template.parameters); Kubernetes.log.debug("Template objects: ", template.objects); Kubernetes.log.debug("Template annotations: ", template.metadata.annotations); var templateAnnotations = template.metadata.annotations; if (templateAnnotations) { _.forEach(template.objects, function (object) { var annotations = object.metadata.annotations || {}; var name = Kubernetes.getName(object); var matches = _.filter(_.keys(templateAnnotations), function (key) { return key.match('.' + name + '/'); }); matches.forEach(function (match) { if (!(match in annotations)) { annotations[match] = templateAnnotations[match]; } }); object.metadata.annotations = annotations; }); } var routeServiceName = undefined; var service = _.find(template.objects, function (obj) { if (Kubernetes.getKind(obj) === "Service") { var ports = Kubernetes.getPorts(obj); if (ports && ports.length === 1) { return true; } } else { return false; } }); if (service) { routeServiceName = Kubernetes.getName(service); } Kubernetes.log.debug("Service: ", service); if ((!routeServiceName || !Kubernetes.isOpenShift) && (!template.parameters || template.parameters.length === 0)) { Kubernetes.log.debug("No parameters required, deploying objects"); applyObjects(template.objects); return; } var formConfig = { style: HawtioForms.FormStyle.STANDARD, hideLegend: true, properties: {} }; var params = template.parameters; _.forEach(params, function (param) { var property = {}; property.label = _.startCase(param.name); property.description = param.description; property.default = param.value; // TODO, do parameters support types? property.type = 'string'; formConfig.properties[param.name] = property; }); if (routeServiceName && Kubernetes.isOpenShift) { formConfig.properties.createRoute = { type: 'boolean', default: true, label: "Create Route" }; /* formConfig.properties.routeName = { type: 'string', label: 'Route Name', default: routeServiceName, 'control-group-attributes': { 'ng-show': 'entity.createRoute' } }; */ formConfig.properties.routeServiceName = { type: 'hidden', default: routeServiceName }; var namespace = Kubernetes.currentKubernetesNamespace(); // TODO store this in localStorage! var domain = "vagrant.f8"; var defaultRouteHostSuffix = '.' + (namespace === "default" ? "" : namespace + ".") + domain; formConfig.properties.routeHostname = { type: 'string', default: defaultRouteHostSuffix, label: "Route host name suffix", 'control-group-attributes': { 'ng-show': 'entity.createRoute' } }; } $scope.entity = {}; $scope.formConfig = formConfig; $scope.objects = template.objects; Kubernetes.log.debug("Form config: ", formConfig); }; function substitute(str, data) { return str.replace(/\${\w*}/g, function (match) { var key = match.replace(/\${/, '').replace(/}/, '').trim(); return data[key] || match; }); } ; $scope.substituteAndDeployTemplate = function () { var objects = $scope.objects; var objectsText = angular.toJson(objects, true); // pull these out of the entity object so they're not used in substitutions var createRoute = $scope.entity.createRoute; var routeHostnameSuffix = $scope.entity.routeHostname || ""; var routeName = $scope.entity.routeName; var routeServiceName = $scope.entity.routeServiceName; delete $scope.entity.createRoute; delete $scope.entity.routeHostname; delete $scope.entity.routeName; delete $scope.entity.routeServiceName; objectsText = substitute(objectsText, $scope.entity); objects = angular.fromJson(objectsText); if (createRoute) { var routes = []; angular.forEach(objects, function (object) { var kind = object.kind; var name = Kubernetes.getName(object); if (name && "Service" === kind) { var routeHostname = name + routeHostnameSuffix; var route = { kind: "Route", apiVersion: Kubernetes.defaultOSApiVersion, metadata: { name: name, }, spec: { host: routeHostname, to: { kind: "Service", name: name } } }; routes.push(route); } }); objects = objects.concat(routes); } if ($scope.targetNamespace !== model.currentNamespace()) { $scope.$on('WatcherNamespaceChanged', function () { Kubernetes.log.debug("Namespace changed"); setTimeout(function () { applyObjects(objects); Core.$apply($scope); }, 500); }); Core.notification('info', "Switching to namespace " + $scope.targetNamespace + " and deploying template"); model.kubernetes.selectedNamespace = $scope.targetNamespace; } else { applyObjects(objects); } }; function applyObjects(objects) { var projectClient = Kubernetes.createKubernetesClient("projects"); _.forEach(objects, function (object) { Kubernetes.log.debug("Object: ", object); var kind = Kubernetes.getKind(object); var name = Kubernetes.getName(object); var ns = Kubernetes.getNamespace(object); if (kind && name) { if (ns && ns !== Kubernetes.currentKubernetesNamespace()) { var project = { apiVersion: Kubernetes.defaultApiVersion, kind: "Project", metadata: { name: ns, labels: {} } }; projectClient.put(project, function (data) { Kubernetes.log.info("Created namespace: " + ns); }, function (err) { Kubernetes.log.warn("Failed to create namespace: " + ns + ": " + angular.toJson(err)); }); } var pluralKind = kind.toLowerCase() + "s"; var kubeClient = Kubernetes.createKubernetesClient(pluralKind, ns); kubeClient.put(object, function (data) { Kubernetes.log.info("updated " + kind + " name: " + name + (ns ? " ns: " + ns : "")); }, function (err) { Kubernetes.log.warn("Failed to update " + kind + " name: " + name + (ns ? " ns: " + ns : "") + " error: " + angular.toJson(err)); }); } }); goBack(); } $scope.deleteTemplate = function (template) { UI.multiItemConfirmActionDialog({ collection: [template], index: 'metadata.name', onClose: function (result) { if (result) { KubernetesModel['templatesResource'].delete({ id: template.metadata.name }, undefined, function () { KubernetesModel['templatesResource'].query(function (data) { KubernetesModel.templates = data.items; }); }, function (error) { Kubernetes.log.debug("Error deleting template: ", error); }); } }, title: 'Delete Template?', action: 'The following template will be deleted:', okText: 'Delete', okClass: 'btn-danger', custom: "This operation is permanent once completed!", customClass: "alert alert-warning" }).open(); }; }]); })(Kubernetes || (Kubernetes = {})); /// var Navigation; (function (Navigation) { Navigation.pluginName = 'hawtio-navigation'; Navigation.log = Logger.get(Navigation.pluginName); Navigation._module = angular.module(Navigation.pluginName, []); Navigation._module.run(function () { }); Navigation._module.service('HawtioBreadcrumbs', function () { var _config = []; var self = { apply: function (config) { _config.length = 0; _.forEach(config, function (crumb) { _config.push(crumb); }); }, get: function () { return _config; } }; return self; }); Navigation._module.service('HawtioSubTabs', function () { var _config = []; var self = { apply: function (config) { _config.length = 0; _.forEach(config, function (crumb) { _config.push(crumb); }); }, get: function () { return _config; } }; return self; }); Navigation._module.directive('hawtioRelativeHref', ['$location', function ($location) { return { restrict: 'A', link: function (scope, element, attr) { var targetPath = attr['hawtioRelativeHref']; var targetHref = new URI($location.url()); targetHref.segment(targetPath); element.attr('href', targetHref.toString()); } }; }]); Navigation._module.directive('viewportHeight', ['$window', '$document', function ($window, $document) { return { restrict: 'A', link: function (scope, element, attr) { // log.debug("Window: ", $window); // log.debug("element: ", element); var win = $($window); var resizeFunc = function () { var viewportHeight = win.innerHeight(); // log.debug("Viewport height: ", viewportHeight); var elTop = element.offset().top; // log.debug("Element top: ", elTop); var height = viewportHeight - elTop; element.css('height', height); }; win.on('resize', resizeFunc); element.on('$destroy', function () { win.off('resize', resizeFunc); }); setTimeout(resizeFunc, 50); } }; }]); Navigation._module.directive('hawtioMainOutlet', ['HawtioSubTabs', function (HawtioSubTabs) { return { restrict: 'A', link: function (scope, element, attrs) { scope.tabs = HawtioSubTabs; scope.$watchCollection('tabs.get()', function (tabs) { // log.debug("subTabConfig: ", subTabConfig); if (tabs && tabs.length > 0) { element.removeClass('hidden-nav'); element.css({ 'margin-left': '' }); } else { element.addClass('hidden-nav'); element.css({ 'margin-left': 'auto' }); } }); } }; }]); Navigation._module.directive('hawtioTabsOutlet', ['HawtioSubTabs', function (HawtioSubTabs) { var initialized = false; return { restrict: 'AE', replace: true, template: "\n
\n \n ", link: function (scope, element, attrs) { if (!initialized) { try { } catch (err) { } initialized = true; } scope.HawtioSubTabs = HawtioSubTabs; var collapsed = false; scope.getClass = function () { //log.debug("My class: ", element.attr('class')); if (!scope.subTabConfig || !scope.subTabConfig.length) { return 'hidden'; } if (collapsed) { return 'collapsed'; } return ''; }; scope.$on('hawtioCollapseNav', function () { collapsed = !collapsed; }); scope.$watch('HawtioSubTabs.get()', function (subTabConfig) { scope.subTabConfig = subTabConfig; }); } }; }]); Navigation._module.directive('hawtioBreadcrumbsOutlet', ['HawtioBreadcrumbs', 'HawtioSubTabs', function (HawtioBreadcrumbs, HawtioSubTabs) { return { restrict: 'E', scope: {}, template: "\n
\n
    \n
  1. \n {{label(breadcrumb)}}\n {{label(breadcrumb)}}\n
  2. \n
  3. \n \n
  4. \n
\n
\n ", link: function (scope, element, attrs) { scope.breadcrumbs = HawtioBreadcrumbs; scope.tabs = HawtioSubTabs; scope.$watchCollection('breadcrumbs.get()', function (breadcrumbConfig) { scope.breadcrumbConfig = breadcrumbConfig; }); scope.$watchCollection('tabs.get()', function (tabs) { var active = _.find(tabs, function (tab) { return tab.active; }); if (active) { scope.pageTitle = active.label; } else { scope.pageTitle = undefined; } }); } }; }]); Navigation._module.directive('platformSubTabsOutlet', ['HawtioSubTabs', function (HawtioSubTabs) { var initialized = false; return { restrict: 'AE', replace: true, template: "\n
\n \n
\n ", link: function (scope, element, attrs) { if (!initialized) { try { } catch (err) { } initialized = true; } scope.HawtioSubTabs = HawtioSubTabs; var collapsed = false; scope.getClass = function () { //log.debug("My class: ", element.attr('class')); if (!scope.subTabConfig || !scope.subTabConfig.length) { return 'hidden'; } if (collapsed) { return 'collapsed'; } return ''; }; scope.$on('hawtioCollapseNav', function () { collapsed = !collapsed; }); scope.$watch('HawtioSubTabs.get()', function (subTabConfig) { scope.subTabConfig = subTabConfig; }); } }; }]); //hawtioPluginLoader.addModule('patternfly'); hawtioPluginLoader.addModule(Navigation.pluginName); })(Navigation || (Navigation = {})); /// /// var System; (function (System) { System.pluginName = "System"; System.context = "/system"; System.pluginPath = "plugins/system/"; System.templatePath = System.pluginPath + 'html/'; function shareInit($scope) { //创建二级子菜单 $scope.subTabConfig = Developer.activateCurrent([ { href: UrlHelpers.join(System.context, 'system-list'), label: '信息系统清单', title: '查看信息系统清单' }, { href: UrlHelpers.join(System.context, 'system-verification'), label: '信息系统校验', title: '校验信息系统' }, { href: UrlHelpers.join(System.context, 'system-help'), label: '帮助', title: '行政区划代码或系统代码检索', items: [{ href: UrlHelpers.join(System.context, 'system-help', 'regionalism-search'), title: '行政区划代码检索', label: '行政区划检索' }, { href: UrlHelpers.join(System.context, 'system-help', 'system-search'), title: '系统代码检索', label: '系统代码检索' }] }]); } System.shareInit = shareInit; })(System || (System = {})); /// /// /// var System; (function (System) { System._module = angular.module(System.pluginName, ['hawtio-core', 'hawtio-ui', 'ui.codemirror', 'ui.validate', 'kubernetesUI', 'ngFileUpload', 'ngDialog']); System.controller = PluginHelpers.createControllerFunction(System._module, System.pluginName); System.route = PluginHelpers.createRoutingFunction(System.templatePath); /* 页面路由配置 */ System._module.config(['$provide', '$routeProvider', function ($provide, $routeProvider) { $routeProvider.when(UrlHelpers.join(System.context, '/'), System.route('systemList.html', false)) .when(UrlHelpers.join(System.context, 'system-list'), System.route('systemList.html', false)) .when(UrlHelpers.join(System.context, 'system-help'), System.route('regionalismCodeSearch.html', false)) .when(UrlHelpers.join(System.context, 'system-help', 'regionalism-search'), System.route('regionalismCodeSearch.html', false)) .when(UrlHelpers.join(System.context, 'system-help', 'system-search'), System.route('systemCodeSearch.html', false)) .when(UrlHelpers.join(System.context, 'system-verification'), System.route('systemVerification.html', false)) .when(System.context, { redirectTo: UrlHelpers.join(System.context, 'system-list') }); }]); /* 模块加载后初始化配置 */ System._module.run(['viewRegistry', '$templateCache', 'HawtioNav', '$compile', function (viewRegistry, $templateCache, HawtioNav, $compile) { viewRegistry['system'] = Configs.templatePath + "shareLayout.html"; /* 信息系统一级菜单导航 */ var builder = HawtioNav.builder(); var systemTab = builder.id('systemTab') .rank(10) .href(function () { return System.context; }) .title(function () { return '信息系统'; }) .build(); HawtioNav.add(systemTab); }]); // 加载模块 hawtioPluginLoader.addModule(System.pluginName); })(System || (System = {})); /// /// /// \ /// var System; (function (System) { System.RegionalismCodeController = System.controller('RegionalismCodeController', ["$scope", "$templateCache", "$location", "$routeParams", "$http", "$timeout", 'SystemModel', 'NgTableParams', function ($scope, $templateCache, $location, $routeParams, $http, $timeout, SystemModel, NgTableParams) { System.shareInit($scope); $scope.model = SystemModel; //console.log($scope.model.regionalismInfo); $scope.tableParams = new NgTableParams({ count: 25 }, { counts: [25, 50, 100], dataset: $scope.model.regionalismInfo }); }]); })(System || (System = {})); /// /// /// var System; (function (System) { System.SystemCodeController = System.controller('SystemCodeController', ["$scope", "$templateCache", "$location", "$routeParams", "$http", "$timeout", 'SystemModel', 'NgTableParams', function ($scope, $templateCache, $location, $routeParams, $http, $timeout, SystemModel, NgTableParams) { System.shareInit($scope); $scope.model = SystemModel; $scope.tableParams = new NgTableParams({ count: 25 }, { counts: [25, 50, 100], dataset: $scope.model.systemInfo }); }]); })(System || (System = {})); /// /// /// var System; (function (System) { System.SystemListController = System.controller('SystemListController', ['$scope', '$location', '$http', '$templateCache', 'Upload', 'NgTableParams', 'ngDialog', function ($scope, $location, $http, $templateCache, Upload, NgTableParams, ngDialog) { System.shareInit($scope); // 表头显示的信息 $scope.columns = [ { field: 'id', title: '操作', show: true }, { field: "object", title: "采集对象", filter: { object: "select" }, filterData: booleanChoose(), show: true }, { field: "city", title: "市", filter: { city: 'text' }, show: true }, { field: "county", title: "区/县", filter: { county: 'text' }, show: true }, { field: "regionalismCode", title: "行政区划代码", filter: { regionalismCode: 'text' }, show: true }, { field: "level", title: "级次", filter: { level: "select" }, filterData: levelType(), show: true }, { field: "systemCode", title: "系统编码", filter: { systemCode: "text" }, show: true }, { field: "systemName", title: "信息系统名称", filter: { systemName: "text" }, show: true }, { field: "contactsPerson", title: "联系人", filter: { contactsPerson: "text" }, show: true }, { field: "contactsMethod", title: "联系方式", filter: { contactsMethod: "text" }, show: true }, { field: "databaseType", title: "数据库类型", filter: { databaseType: "select" }, filterData: databaseType(), show: true }, { field: "userSql", title: "oracle用户名表空间", filter: { userSql: "select" }, filterData: booleanChoose(), show: true }, { field: "checkSql", title: "支付信息标准表脚本", filter: { checkSql: "select" }, filterData: booleanChoose(), show: true }, { field: "execSql", title: "可执行标准表脚本", filter: { execSql: "select" }, filterData: booleanChoose(), show: true }, ]; $scope.model = [{ id: 1, object: '是', city: '南京市', county: '玄武区', regionalismCode: '321001', level: '市级', systemCode: '5', systemName: '非税系统', contactsPerson: '唐僧', contactsMethod: '15575170786', databaseType: 'oracle', userSql: '是', checkSql: '是', execSql: '是' }, { id: 2, object: '是', city: '南京市', county: '浦口区', regionalismCode: '321011', level: '市级', systemCode: '5', systemName: '预算执行', contactsPerson: '唐僧', contactsMethod: '15675170786', databaseType: 'oracle', userSql: '是', checkSql: '是', execSql: '是' }]; // 点击查看按钮事件处理函数 $scope.viewClick = function (selected) { ngDialog.open({ template: 'systemInfo.html', controller: 'Configs.SystemInfoController', width: 790, closeByDocument: false, data: selected, className: 'ngdialog-theme-default' }); }; // 表数据 $scope.tableParams = new NgTableParams({ count: 25 }, { counts: [25, 50, 100], dataset: $scope.model }); // 文件上传 $scope.upLoadExcelFile = function (files) { var r = new Resumable({ target: '/java/console/api/fileOperation/file/upload', chunkSize: 1 * 1024 * 1024, simultaneousUploads: 4, testChunks: true, throttleProgressCallbacks: 1, method: "octet" }); if (!r.support) { throw "当前浏览器不支持Resumable.js文件上传"; } else { console.log(files); angular.forEach(files, function (file) { r.addFile(file); }); r.on('fileAdded', function (file) { console.log(file); r.upload(); }); r.on('complete', function () { // Hide pause/resume when the upload has completed console.log("文件上传完毕"); }); r.on('fileProgress', function (file) { // Handle progress for both the file and the overall upload //$('.resumable-file-'+file.uniqueIdentifier+' .resumable-file-progress').html(Math.floor(file.progress()*100) + '%'); //$('.progress-bar').css({width:Math.floor(r.progress()*100) + '%'}); console.log(Math.floor(r.progress() * 100) + '%'); }); } }; //excel下载 $scope.downLoadExcelFile = function () { $http.get('/java/console/api/fileOperation/file/download', { responseType: 'arraybuffer' }) .success(function (data, status, headers) { var octetStreamMime = 'application/octet-stream'; var success = false; // Get the headers headers = headers(); // Get the filename from the x-filename header or default to "服务列表" var filename = headers['x-filename'] || '服务列表.xls'; // Determine the content type from the header or default to "application/octet-stream" var contentType = headers['content-type'] || octetStreamMime; try { // Try using msSaveBlob if supported console.log("Trying saveBlob method ..."); var blob = new Blob([data], { type: contentType }); if (navigator.msSaveBlob) navigator.msSaveBlob(blob, filename); else { // Try using other saveBlob implementations, if available var saveBlob = navigator["webkitSaveBlob"] || navigator["mozSaveBlob"] || navigator["saveBlob"]; if (saveBlob === undefined) throw "Not supported"; saveBlob(blob, filename); } console.log("saveBlob succeeded"); success = true; } catch (ex) { console.log("saveBlob method failed with the following exception:"); console.log(ex); } if (!success) { // Get the blob url creator var urlCreator = window.URL || window["webkitURL"] || window["mozURL"] || window["msURL"]; if (urlCreator) { // Try to use a download link var link = document.createElement('a'); if ('download' in link) { // Try to simulate a click try { // Prepare a blob URL console.log("Trying download link method with simulated click ..."); var blob = new Blob([data], { type: contentType }); var url = urlCreator.createObjectURL(blob); link.setAttribute('href', url); // Set the download attribute (Supported in Chrome 14+ / Firefox 20+) link.setAttribute("download", filename); // Simulate clicking the download link var event = document.createEvent('MouseEvents'); event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null); link.dispatchEvent(event); console.log("Download link method with simulated click succeeded"); success = true; } catch (ex) { console.log("Download link method with simulated click failed with the following exception:"); console.log(ex); } } if (!success) { // Fallback to window.location method try { // Prepare a blob URL // Use application/octet-stream when using window.location to force download console.log("Trying download link method with window.location ..."); var blob = new Blob([data], { type: octetStreamMime }); var url = urlCreator.createObjectURL(blob); window.location = url; console.log("Download link method with window.location succeeded"); success = true; } catch (ex) { console.log("Download link method with window.location failed with the following exception:"); console.log(ex); } } } } if (!success) { // Fallback to window.open method console.log("No methods worked for saving the arraybuffer, using last resort window.open"); window.open('_blank', ''); } }).error(function (data, status) { console.log("Request failed with status: " + status); // Optionally write the error out to scope $scope.errorDetails = "Request failed with status: " + status; }); }; //boolean选择条件:是/否 function booleanChoose() { return [{ id: '是', title: '是' }, { id: '否', title: '否' }]; } // 数据库类型选择条件:oracle/sqlServer function databaseType() { return [{ id: 'oracle', title: 'Oracle' }, { id: 'sqlServer', title: 'sqlServer' }]; } //level选择条件 function levelType() { return [{ id: '省', title: '省' }, { id: '市', title: '市' }, { id: '县', title: '县' }]; } }]); })(System || (System = {})); /// /// var System; (function (System) { function classifyCity(regionalismInfo) { var result = []; angular.forEach(regionalismInfo, function (item) { if (result.indexOf(item.cityName) == -1) result.push(item.cityName); }); return result; } System.classifyCity = classifyCity; function classifyCountry(regionalismInfo, cityName) { var result = []; angular.forEach(regionalismInfo, function (item) { if (item.cityName == cityName) result.push({ name: item.districtName, code: item.code }); }); return result; } System.classifyCountry = classifyCountry; var systemModelServices = (function () { function systemModelServices() { this.systemInfoList = []; this.systemInfo = []; this.regionalismInfo = []; //this.updateSystemInfoList(); this.updateCodeInfo(); //console.log(classifyCountry(this.regionalismInfo, '南京市')); } //执行数据更新操作 systemModelServices.prototype.updateSystemInfoList = function () { var result = []; $.ajax({ type: 'POST', url: '/java/console/api/system/infoList', success: function (data) { if (data) result = data; } }); }; systemModelServices.prototype.updateCodeInfo = function () { var result = null; $.ajax({ async: false, type: "POST", url: "/java/console/api/code/list", success: function (data) { if (data) { result = data; } } }); this.regionalismInfo = result.regionalism; this.systemInfo = result.system; }; return systemModelServices; }()); System._module.factory('SystemModel', ['$rootScope', '$http', function ($rootScope, $http) { return new systemModelServices(); }]); })(System || (System = {})); /// /// /// /// var System; (function (System) { System.SystemVerificationController = System.controller('SystemVerificationController', ['$scope', '$location', '$templateCache', 'Upload', 'NgTableParams', 'ngDialog', 'SystemModel', function ($scope, $location, $templateCache, Upload, NgTableParams, ngDialog, SystemModel) { System.shareInit($scope); $scope.cities = System.classifyCity(SystemModel.regionalismInfo); $scope.columns = [ { field: "id", title: '序号', show: false }, { field: "checkResult", title: "验证结果", show: true }, { field: "hasCollect", title: "采集", show: true }, { field: "hasCheckSql", title: "支付信息标准表", show: true }, { field: "hasExecSql", title: "可执行标准表", show: true }, { field: "city", title: "市", show: true }, { field: "county", title: "区/县", show: true }, { field: "regionalismCode", title: "行政区划代码", show: true }, { field: "systemCode", title: "信息系统代码", show: true }, { field: "contactsPerson", title: "联系人", show: true }, { field: "contactsMethod", title: "联系方式", show: true }, { field: "databaseType", title: "数据库类型", show: true } ]; $scope.model = [{ id: 1, checkResult: '是', hasCollect: '是', hasCheckSql: '是', hasExecSql: '是', city: '南京市', county: '玄武区', regionalismCode: '320105', systemCode: '2', contactsPerson: '文豆豆', contactsMethod: '15578203146', databaseType: 'oracle' }, { id: 2, checkResult: '否', hasCollect: '是', hasCheckSql: '否', hasExecSql: '是', city: '连云港市', county: '浦口区', regionalismCode: '320105', systemCode: '6', contactsPerson: '文豆豆', contactsMethod: '15578203147', databaseType: 'sqlServer' }]; console.log($scope.model); $scope.filterResult = $scope.model; // 表数据 $scope.tableParams = new NgTableParams({ count: 25 }, { counts: [25, 50, 100], dataset: $scope.filterResult }); $scope.citySelect = function (x) { if (x != 'all') { $scope.countries = System.classifyCountry(SystemModel.regionalismInfo, x); $scope.filterResult = []; angular.forEach($scope.model, function (item) { if (item.city == x) $scope.filterResult.push(item); }); $scope.tableParams.settings({ dataset: $scope.filterResult }); } else { $scope.filterResult = $scope.model; $scope.tableParams.settings({ dataset: $scope.filterResult }); } }; $scope.countrySelect = function (y) { if (y != 'all') { var result = []; angular.forEach($scope.filterResult, function (item) { if (item.county == y) result.push(item); }); $scope.tableParams.settings({ dataset: result }); } else { $scope.tableParams.settings({ dataset: $scope.filterResult }); } }; $scope.check = function () { console.log($scope.tableParams.data[0]); }; }]); })(System || (System = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzLnRzIiwiY29uZmlncy90cy9jb25maWdQbHVnaW4udHMiLCJjb25maWdzL3RzL2NvbmZpZ3NEYXRhU2VydmljZS50cyIsImRldmVsb3Blci90cy9kZXZlbG9wZXJOYXZpZ2F0aW9uLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSW50ZXJmYWNlcy50cyIsImt1YmVybmV0ZXMvdHMvdXRpbEhlbHBlcnMudHMiLCJjb25maWdzL3RzL2N1c3RvbUFsZXJ0LnRzIiwia3ViZXJuZXRlcy90cy9yZWFkUGxhY2VkaXZpc2lvbi50cyIsImt1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHMiLCJkZXZlbG9wZXIvdHMvZGV2ZWxvcGVySGVscGVycy50cyIsImRldmVsb3Blci90cy9kYXRhTWFuYWdlckhlbHBlci50cyIsImNvbmZpZ3MvdHMvQ29uZmlnc0hlbHBlci50cyIsImNvbmZpZ3MvdHMvY29uZmlnc1V0aWxzLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzUGx1Z2luLnRzIiwia3ViZXJuZXRlcy90cy93YXRjaGVyLnRzIiwia3ViZXJuZXRlcy90cy90ZXJtLnRzIiwiY29uZmlncy90cy9zaGFyZUNvbnRyb2xsZXIudHMiLCJjb25maWdzL3RzL2dsdXN0ZXJmc1NldHRpbmcudHMiLCJjb25maWdzL3RzL2t1YmVDbHVzdGVyU2V0dGluZy50cyIsImRldmVsb3Blci90cy9kZXZlbG9wZXJQbHVnaW4udHMiLCJkZXZlbG9wZXIvdHMvZGF0YU1hbmFnZXJNb2RlbC50cyIsImRldmVsb3Blci90cy9kZXZlbG9wZXJFbnJpY2hlcnMudHMiLCJkZXZlbG9wZXIvdHMvZW52aXJvbm1lbnRQYW5lbC50cyIsImRldmVsb3Blci90cy9maWxlTWlncmF0aW9uVGFzay50cyIsImRldmVsb3Blci90cy9ob21lLnRzIiwiZGV2ZWxvcGVyL3RzL2plbmtpbnNKb2IudHMiLCJkZXZlbG9wZXIvdHMvamVua2luc0pvYnMudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNNb2RlbC50cyIsImRldmVsb3Blci90cy9qZW5raW5zTG9nLnRzIiwiZGV2ZWxvcGVyL3RzL2plbmtpbnNNZXRyaWNzLnRzIiwiZGV2ZWxvcGVyL3RzL25hdmJhci50cyIsImRldmVsb3Blci90cy9waXBlbGluZS50cyIsImRldmVsb3Blci90cy9waXBlbGluZURpcmVjdGl2ZS50cyIsImRldmVsb3Blci90cy9waXBlbGluZXMudHMiLCJkZXZlbG9wZXIvdHMvcHJvamVjdC50cyIsImRldmVsb3Blci90cy9wcm9qZWN0U2VsZWN0b3IudHMiLCJkZXZlbG9wZXIvdHMvcHJvamVjdHMudHMiLCJkZXZlbG9wZXIvdHMvd29ya3NwYWNlLnRzIiwiZGV2ZWxvcGVyL3RzL3dvcmtzcGFjZXMudHMiLCJrdWJlcm5ldGVzL3RzL2FwcHMudHMiLCJrdWJlcm5ldGVzL3RzL2JyZWFkY3J1bWJzLnRzIiwia3ViZXJuZXRlcy90cy9idWlsZC50cyIsImt1YmVybmV0ZXMvdHMvYnVpbGRDb25maWcudHMiLCJrdWJlcm5ldGVzL3RzL2J1aWxkQ29uZmlnRWRpdC50cyIsImt1YmVybmV0ZXMvdHMvYnVpbGRDb25maWdzLnRzIiwia3ViZXJuZXRlcy90cy9idWlsZExvZ3MudHMiLCJrdWJlcm5ldGVzL3RzL2J1aWxkcy50cyIsImt1YmVybmV0ZXMvdHMvY29ubmVjdC50cyIsImt1YmVybmV0ZXMvdHMvZGVwbG95bWVudENvbmZpZy50cyIsImt1YmVybmV0ZXMvdHMvZGVwbG95bWVudENvbmZpZ3MudHMiLCJrdWJlcm5ldGVzL3RzL2V2ZW50cy50cyIsImt1YmVybmV0ZXMvdHMvaG9zdC50cyIsImt1YmVybmV0ZXMvdHMvaG9zdHMudHMiLCJrdWJlcm5ldGVzL3RzL2ltYWdlUmVwb3NpdG9yaWVzLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzTmF2aWdhdGlvbi50cyIsImt1YmVybmV0ZXMvdHMvc2NoZW1hLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzU2NoZW1hLnRzIiwia3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzU2VydmljZXMudHMiLCJrdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNUb3BMZXZlbC50cyIsImt1YmVybmV0ZXMvdHMvbmFtZXNwYWNlLnRzIiwia3ViZXJuZXRlcy90cy9vdmVydmlldy50cyIsImt1YmVybmV0ZXMvdHMvcGlwZWxpbmVzLnRzIiwia3ViZXJuZXRlcy90cy9wb2QudHMiLCJrdWJlcm5ldGVzL3RzL3BvZEVkaXQudHMiLCJrdWJlcm5ldGVzL3RzL3BvZExvZ3MudHMiLCJrdWJlcm5ldGVzL3RzL3BvZHMudHMiLCJrdWJlcm5ldGVzL3RzL3JlcGxpY2F0aW9uQ29udHJvbGxlci50cyIsImt1YmVybmV0ZXMvdHMvcmVwbGljYXRpb25Db250cm9sbGVyRWRpdC50cyIsImt1YmVybmV0ZXMvdHMvcmVwbGljYXRpb25Db250cm9sbGVycy50cyIsImt1YmVybmV0ZXMvdHMvc2NoZW1hSGVscGVycy50cyIsImt1YmVybmV0ZXMvdHMvc2VjcmV0LnRzIiwia3ViZXJuZXRlcy90cy9zZWNyZXRzLnRzIiwia3ViZXJuZXRlcy90cy9zZXJ2aWNlLnRzIiwia3ViZXJuZXRlcy90cy9zZXJ2aWNlRWRpdC50cyIsImt1YmVybmV0ZXMvdHMvc2VydmljZVJlZ2lzdHJ5LnRzIiwia3ViZXJuZXRlcy90cy9zZXJ2aWNlcy50cyIsImt1YmVybmV0ZXMvdHMvc2hhcmVkQ29udHJvbGxlcnMudHMiLCJrdWJlcm5ldGVzL3RzL3RhYnMudHMiLCJrdWJlcm5ldGVzL3RzL3RlbXBsYXRlcy50cyIsIm5hdmlnYXRpb24vdHMvbmF2aWdhdGlvblBsdWdpbi50cyIsInN5c3RlbS90cy9zeXN0ZW1IZWxwZXJzLnRzIiwic3lzdGVtL3RzL3N5c3RlbVBsdWdpbi50cyIsInN5c3RlbS90cy9yZWdpb25hbGlzbUNvZGVTZWFyY2gudHMiLCJzeXN0ZW0vdHMvc3lzdGVtQ29kZVNlYXJjaC50cyIsInN5c3RlbS90cy9zeXN0ZW1MaXN0LnRzIiwic3lzdGVtL3RzL3N5c3RlbVNlcnZpY2VzLnRzIiwic3lzdGVtL3RzL3N5c3RlbVZlcmlmaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzREFBc0Q7QUFDdEQsK0RBQStEO0FBQy9ELHNEQUFzRDtBQUN0RCxtREFBbUQ7QUFDbkQsMERBQTBEOztBQ0oxRCx5Q0FBeUM7QUFFekMsSUFBTyxPQUFPLENBb0RiO0FBcERELFdBQU8sT0FBTyxFQUFDLENBQUM7SUFFSixrQkFBVSxHQUFHLFNBQVMsQ0FBQztJQUN2QixlQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3BCLGtCQUFVLEdBQUcsa0JBQWtCLENBQUM7SUFDN0Isb0JBQVksR0FBRyxrQkFBVSxHQUFHLE9BQU8sQ0FBQztJQUN2QyxlQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFBVSxFQUFFLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ25ILGFBQUssR0FBRyxhQUFhLENBQUMscUJBQXFCLENBQUMsb0JBQVksQ0FBQyxDQUFDO0lBQzFELGtCQUFVLEdBQUcsYUFBYSxDQUFDLHdCQUF3QixDQUFDLGVBQU8sRUFBRSxrQkFBVSxDQUFDLENBQUM7SUFFcEYsZUFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFDLFFBQVEsRUFBRSxjQUFjO1lBQ3RFLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFPLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxhQUFLLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3BHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQU8sRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLGFBQUssQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDL0YsSUFBSSxDQUFDLGVBQU8sRUFBRSxFQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQU8sRUFBRSx1QkFBdUIsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRUgsZUFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsVUFBQyxZQUFZLEVBQUUsY0FBdUMsRUFBRSxHQUFHLEVBQUcsUUFBMkI7WUFDakssR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFDLE1BQU07Z0JBQ2hDLElBQUksUUFBUSxHQUFJLGNBQWMsQ0FBQyxHQUFHLENBQVMsVUFBVSxDQUFDLElBQUksQ0FBQyxvQkFBWSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQztnQkFDakcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztZQUVILFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFTixlQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDcEMsTUFBTSxDQUFBO2dCQUNMLFFBQVEsRUFBRSxJQUFJO2dCQUNkLE9BQU8sRUFBRyxJQUFJO2dCQUNkLEtBQUssRUFBRTtvQkFDTixVQUFVLEVBQUUsR0FBRztvQkFDZixZQUFZLEVBQUUsR0FBRztpQkFDakI7Z0JBQ0QsUUFBUSxFQUFFLHdvQkFZRDtnQkFDRCxJQUFJLEVBQUUsVUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUk7Z0JBQzNCLENBQUM7YUFDVCxDQUFBO1FBQ0YsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVMLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxrQkFBVSxDQUFDLENBQUM7QUFDMUMsQ0FBQyxFQXBETSxPQUFPLEtBQVAsT0FBTyxRQW9EYjs7QUN0REQseUNBQXlDO0FBQ3pDLHVDQUF1QztBQUN2QyxJQUFPLE9BQU8sQ0FtS2I7QUFuS0QsV0FBTyxPQUFPLEVBQUEsQ0FBQztJQWdDWCxhQUFhO0lBQ2hCLHVCQUF1QixJQUFZO1FBQ2xDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLE1BQU0sR0FBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxLQUFLLEdBQUMsQ0FBQyxDQUFDO1FBQ1osT0FBTSxNQUFNLElBQUksSUFBSSxFQUFDLENBQUM7WUFDckIsTUFBTSxHQUFHLE1BQU0sR0FBQyxJQUFJLENBQUM7WUFDckIsS0FBSyxFQUFHLENBQUM7UUFDVixDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxzQkFBc0IsTUFBYTtRQUNsQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUUzQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBQyxLQUFLO1lBQ25DLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDNUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQTtJQUNILENBQUM7SUFFRCx1QkFBOEIsT0FBcUI7UUFDbEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBQyxNQUFNO1lBQy9CLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQTtJQUNILENBQUM7SUFKZSxxQkFBYSxnQkFJNUIsQ0FBQTtJQUVELHVCQUF1QixNQUFhLEVBQUUsTUFBYTtRQUNsRCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O01BRUU7SUFDRixxQkFBNEIsTUFBYSxFQUFFLEtBQVc7UUFDckQsR0FBRyxDQUFBLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQyxDQUFDO1lBQzVDLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsRUFBRSxDQUFBLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDMUIsS0FBSyxDQUFDO1lBQ1AsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO0lBUmUsbUJBQVcsY0FRMUIsQ0FBQTtJQUVEOztNQUVFO0lBQ0Ysa0JBQXlCLE1BQWEsRUFBRSxLQUFXO1FBQ2xELEVBQUUsQ0FBQSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLFNBQVMsQ0FBQztZQUN0QyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBSGUsZ0JBQVEsV0FHdkIsQ0FBQTtJQUVEO1FBTUM7WUFMTyxZQUFPLEdBQWdCLEVBQUUsQ0FBQztZQUMxQixnQkFBVyxHQUFxQixFQUFFLENBQUM7WUFDbkMsZUFBVSxHQUFjLEVBQUUsQ0FBQztZQUMzQixvQkFBZSxHQUFlLEVBQUUsQ0FBQztZQUd2QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUVNLDJDQUFhLEdBQXBCO1lBQ0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsd0JBQXdCO1FBQ3pCLENBQUM7UUFDUyw4Q0FBZ0IsR0FBdkI7WUFDQyxJQUFJLE1BQU0sR0FBQyxJQUFJLENBQUM7WUFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDVCxLQUFLLEVBQUUsS0FBSztnQkFDWixJQUFJLEVBQUcsTUFBTTtnQkFDYixHQUFHLEVBQUcsK0JBQStCO2dCQUNyQyxPQUFPLEVBQUcsVUFBUyxJQUFJO29CQUNuQixFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsQ0FBQSxDQUFDO3dCQUNSLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ2xCLENBQUM7Z0JBQ0YsQ0FBQzthQUNELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLEdBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRDs7Ozs7Ozs7Ozs7Ozs7V0FjRztRQUVJLCtDQUFpQixHQUF4QjtZQUNDLElBQUksTUFBTSxHQUFDLElBQUksQ0FBQztZQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNOLEtBQUssRUFBRSxLQUFLO2dCQUNaLElBQUksRUFBRyxNQUFNO2dCQUNiLEdBQUcsRUFBRywrQkFBK0I7Z0JBQ3JDLE9BQU8sRUFBRyxVQUFTLElBQUk7b0JBQ25CLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUM7d0JBQ1IsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDbEIsQ0FBQztnQkFDRixDQUFDO2FBQ0QsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFDM0IsQ0FBQztRQUVNLG1EQUFxQixHQUE1QixVQUE2QixJQUFZO1lBQ3hDLEVBQUUsQ0FBQSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUcsSUFBSSxDQUFDO2dCQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2IsR0FBRyxDQUFBLENBQUMsSUFBSyxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBQyxDQUFDO2dCQUMxQyxFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7b0JBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNoQyxDQUFDO1FBQ0YsQ0FBQztRQUNGLDBCQUFDO0lBQUQsQ0F0RUEsQUFzRUMsSUFBQTtJQXRFWSwyQkFBbUIsc0JBc0UvQixDQUFBO0lBRUUsZUFBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTO1lBQ3pILElBQUksTUFBTSxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMsRUFuS00sT0FBTyxLQUFQLE9BQU8sUUFtS2I7O0FDcktELHlDQUF5QztBQUN6QyxJQUFPLFNBQVMsQ0Ewc0JmO0FBMXNCRCxXQUFPLFNBQVMsRUFBQyxDQUFDO0lBRWhCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQWM3QztRQUNFLE1BQU0sQ0FBQztZQUNMLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLENBQUM7WUFDL0QsS0FBSyxFQUFFLE9BQU87WUFDZCxLQUFLLEVBQUUsOEJBQThCO1lBQ3JDLFFBQVEsRUFBRSxVQUFDLE1BQU0sRUFBRSxJQUFJLElBQUssT0FBQSxLQUFLLEVBQUwsQ0FBSztTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVEO1FBQ0UsTUFBTSxDQUFDO1lBQ0wsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsQ0FBQztZQUMvRCxLQUFLLEVBQUUsUUFBUTtZQUNmLEtBQUssRUFBRSwrQ0FBK0M7U0FDdkQsQ0FBQztJQUNKLENBQUM7SUFFRDtRQUNFLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRmUsdUJBQWEsZ0JBRTVCLENBQUE7SUFFRCxxQkFBNEIsU0FBUztRQUNuQyxJQUFJLElBQUksR0FBRyxhQUFhLEVBQUUsQ0FBQztRQUMzQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFQZSxxQkFBVyxjQU8xQixDQUFBO0lBRUQscUNBQTRDLGtCQUFtQjtRQUM3RCxNQUFNLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUZlLHFDQUEyQiw4QkFFMUMsQ0FBQTtJQUdELG9DQUEyQyxrQkFBa0I7UUFDekQsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNyQixpQkFBaUIsRUFBRTtZQUNuQixpQkFBaUIsRUFBRTtTQUNwQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBTGUsb0NBQTBCLDZCQUt6QyxDQUFBO0lBRUQsb0NBQTJDLFFBQWUsRUFBRSxhQUFvQjtRQUFyQyx3QkFBZSxHQUFmLGVBQWU7UUFBRSw2QkFBb0IsR0FBcEIsb0JBQW9CO1FBQzlFLElBQUksTUFBTSxHQUFHLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNuQixhQUFhLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDMUQsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FDVDtnQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQztnQkFDL0UsS0FBSyxFQUFFLGFBQWE7Z0JBQ3BCLEtBQUssRUFBRSxvQkFBb0IsR0FBRyxhQUFhO2dCQUMzQyxRQUFRLEVBQUUsVUFBQyxNQUFNLEVBQUUsSUFBSSxJQUFLLE9BQUEsS0FBSyxFQUFMLENBQUs7YUFDbEMsQ0FDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQWpCZSxvQ0FBMEIsNkJBaUJ6QyxDQUFBO0lBR0Qsc0NBQTZDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWTtRQUMxRSxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3pGLElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDM0MsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQ3pDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hILE1BQU0sQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0UsY0FBYyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNELElBQUksUUFBUSxHQUE0QjtnQkFDdEM7b0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQztvQkFDbEQsS0FBSyxFQUFFLGNBQWM7b0JBQ3JCLEtBQUssRUFBRSx3Q0FBd0M7aUJBQ2hEO2dCQUNEO29CQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDO29CQUNqRCxLQUFLLEVBQUUsY0FBTyxPQUFBLGVBQWUsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLEVBQWxDLENBQWtDO29CQUNoRCxLQUFLLEVBQUUscUNBQXFDLEdBQUcsRUFBRTtpQkFDbEQ7YUFDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLElBQUksV0FBVyxJQUFJLGFBQWEsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLHVDQUF1QztZQUN2QyxJQUFJLFFBQVEsR0FBNEI7Z0JBQ3RDO29CQUNFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7b0JBQ3JDLEtBQUssRUFBRSxjQUFjO29CQUNyQixLQUFLLEVBQUUsd0NBQXdDO2lCQUNoRDtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsZUFBZSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUM7b0JBQ2pELEtBQUssRUFBRSxjQUFPLE9BQUEsZUFBZSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsRUFBM0MsQ0FBMkM7b0JBQ3pELEtBQUssRUFBRSx1QkFBdUI7aUJBQy9CO2FBQ0YsQ0FBQztZQUNGLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzFCLGFBQWEsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUcsMEJBQTBCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDO1lBQ3RHLEtBQUssRUFBRSxTQUFTO1lBQ2hCLEtBQUssRUFBRSxxQ0FBcUMsR0FBRyxFQUFFO1NBQ2xELENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQWpEZSxzQ0FBNEIsK0JBaUQzQyxDQUFBO0lBRUQ7O09BRUc7SUFDSCx5QkFBeUIsYUFBYSxFQUFFLFdBQVc7UUFDakQ7OztXQUdHO1FBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0NBQXlDLFdBQWtCLEVBQUUsUUFBd0MsRUFBRSxhQUFvQjtRQUFsRiwyQkFBa0IsR0FBbEIsa0JBQWtCO1FBQUUsd0JBQXdDLEdBQXhDLGVBQXdDO1FBQUUsNkJBQW9CLEdBQXBCLG9CQUFvQjtRQUN6SCxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDbkIsYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDN0QsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNsQixFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixNQUFNLENBQUMsSUFBSSxDQUNUO29CQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQztvQkFDMUYsS0FBSyxFQUFFLE1BQU07b0JBQ2IsS0FBSyxFQUFFLG1DQUFtQztpQkFDM0MsQ0FDRixDQUFDO2dCQUVGLE1BQU0sQ0FBQyxJQUFJLENBQ1Q7b0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQztvQkFDdkcsS0FBSyxFQUFFLFdBQVc7b0JBQ2xCLEtBQUssRUFBRSxvQkFBb0IsR0FBRyxXQUFXO2lCQUMxQyxDQUNGLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQTFCZSxrQ0FBd0IsMkJBMEJ2QyxDQUFBO0lBR0QsMENBQWlELFdBQVcsRUFBRSxhQUFvQjtRQUFwQiw2QkFBb0IsR0FBcEIsb0JBQW9CO1FBQ2hGLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNsQixFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakIsUUFBUSxHQUFHLENBQUM7b0JBQ1YsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLEtBQUssRUFBRSxxQkFBcUI7aUJBQzdCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBVGUsMENBQWdDLG1DQVMvQyxDQUFBO0lBRUQ7UUFDRSxJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUM1RCxNQUFNLENBQUMsZUFBZSxDQUFDO1lBQ3JCO2dCQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDO2dCQUM5RSxLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLGtCQUFrQjtnQkFDekIsS0FBSyxFQUFFLDZFQUE2RTthQUNyRjtZQUNEO2dCQUNFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQztnQkFDdEYsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLEtBQUssRUFBRSwrQkFBK0I7YUFDdkM7WUFDRDtnQkFDRSxPQUFPLEVBQUUsY0FBTSxPQUFBLHFCQUFXLEVBQUUsRUFBYixDQUFhO2dCQUM1QixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUM7Z0JBQzVGLEtBQUssRUFBRSxRQUFRO2dCQUNmLEtBQUssRUFBRSxZQUFZO2dCQUNuQixLQUFLLEVBQUUsaUNBQWlDO2FBQ3pDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUN4QixLQUFLLEVBQUUsY0FBYztnQkFDckIsS0FBSyxFQUFFLGFBQWE7Z0JBQ3BCLEtBQUssRUFBRSx3Q0FBd0M7YUFDaEQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsYUFBYSxDQUFDO2dCQUN6QyxLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLEtBQUssRUFBRSwrQ0FBK0M7YUFDdkQ7U0FTRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBM0NlLG1DQUF5Qiw0QkEyQ3hDLENBQUE7SUFFRCw4QkFBcUMsYUFBb0I7UUFBcEIsNkJBQW9CLEdBQXBCLG9CQUFvQjtRQUN2RCxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDbkIsYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JILENBQUM7SUFMZSw4QkFBb0IsdUJBS25DLENBQUE7SUFFRCwwQkFBMEIsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZO1FBQ2hFLGFBQWEsR0FBRyxhQUFhLElBQUksVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDekUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdkksQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILGtDQUF5QyxPQUFjO1FBQ3JELE1BQU0sQ0FBQyxVQUFDLFlBQW1CLEVBQUUsY0FBNkIsRUFBRSxRQUE0QztZQUEzRSw4QkFBNkIsR0FBN0IscUJBQTZCO1lBQ3hELE1BQU0sQ0FBQztnQkFDTCxRQUFRLEVBQUUseUdBQXlHO2dCQUNuSCxjQUFjLEVBQUUsY0FBYztnQkFDOUIsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxVQUFDLE1BQU0sRUFBRSxZQUF5Qzt3QkFDdkYsRUFBRSxDQUFBLENBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFFLElBQUssQ0FBQyxDQUFDLENBQUM7NEJBQ3JDLEdBQUcsQ0FBQyxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQzt3QkFDN0UsQ0FBQzt3QkFDRCxFQUFFLENBQUEsQ0FBRSxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSyxDQUFDLENBQUMsQ0FBQzs0QkFDdkMsR0FBRyxDQUFDLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO3dCQUM3RSxDQUFDO3dCQUNELE1BQU0sQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUM3QyxNQUFNLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDN0MsTUFBTSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO3dCQUNuRSxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQ3pGLE1BQU0sQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDNUUsQ0FBQyxDQUFDO2FBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQTtJQUNILENBQUM7SUFwQmUsa0NBQXdCLDJCQW9CdkMsQ0FBQTtJQUVELGlDQUF3QyxXQUFXLEVBQUUsWUFBbUIsRUFBRSxNQUFhO1FBQWxDLDRCQUFtQixHQUFuQixtQkFBbUI7UUFBRSxzQkFBYSxHQUFiLGFBQWE7UUFDckYsSUFBSSxhQUFhLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDNUQsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDcEgsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztRQUN6QixFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNoQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzlFLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRDtZQUNFLElBQUksTUFBTSxHQUFHLHFCQUFXLEVBQUUsSUFBSSxnQkFBZ0IsQ0FBQztZQUMvQyxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDckIsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0MsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDWCxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQsSUFBSSxNQUFNLEdBQUc7WUFDWDs7Ozs7Ozs7OztRQVVKO1lBQ0k7Z0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUM7Z0JBQ3ZILFFBQVEsRUFBRSxVQUFDLE1BQU0sRUFBRSxJQUFJO29CQUNyQixJQUFJLElBQUksR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN0QyxtREFBbUQ7b0JBQ25ELEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNkLENBQUM7b0JBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbEQsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsMEdBQTBHO2dCQUMxRyxLQUFLLEVBQUUsV0FBVztnQkFDbEIsS0FBSyxFQUFFLGtCQUFrQjtnQkFDekIsS0FBSyxFQUFFLHFFQUFxRTthQUM3RTtZQUNEO2dCQUNFLE9BQU8sRUFBRSxjQUFNLE9BQUEsY0FBYyxFQUFFLElBQUksYUFBYSxFQUFqQyxDQUFpQztnQkFDaEQsRUFBRSxFQUFFLFdBQVc7Z0JBQ2YsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLEtBQUssRUFBRSxXQUFXO2dCQUNsQixLQUFLLEVBQUUsa0JBQWtCO2dCQUN6QixLQUFLLEVBQUUsdUNBQXVDO2FBQy9DO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGNBQU0sT0FBQSxDQUFDLGNBQWMsRUFBRSxFQUFqQixDQUFpQjtnQkFDaEMsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLEtBQUssRUFBRSxRQUFRO2dCQUNmLEtBQUssRUFBRSxZQUFZO2dCQUNuQixLQUFLLEVBQUUsOEJBQThCO2FBQ3RDO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGNBQU0sT0FBQSxjQUFjLEVBQUUsRUFBaEIsQ0FBZ0I7Z0JBQy9CLFFBQVEsRUFBRSxVQUFDLElBQUksRUFBRSxJQUFJO29CQUNuQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0JBQ2YsQ0FBQztvQkFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsRUFBRSxFQUFFLFFBQVE7Z0JBQ1osSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLEtBQUssRUFBRSxzQ0FBc0M7YUFDOUM7WUFDRDtnQkFDRSxPQUFPLEVBQUUsY0FBTSxPQUFBLGNBQWMsRUFBRSxFQUFoQixDQUFnQjtnQkFDL0IsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQztnQkFDOUksS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLEtBQUssRUFBRSxpQkFBaUI7Z0JBQ3hCLEtBQUssRUFBRSxtQ0FBbUM7YUFDM0M7WUFDUDs7Ozs7O2NBTUU7WUFDSTtnQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFDO2dCQUMxSCxLQUFLLEVBQUUsVUFBVTtnQkFDakIsS0FBSyxFQUFFLFdBQVc7Z0JBQ2xCLEtBQUssRUFBRSw0QkFBNEI7Z0JBQ25DLFFBQVEsRUFBRSxVQUFDLE1BQU0sRUFBRSxJQUFJO29CQUNyQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDekMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDZCxDQUFDO29CQUNELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNkLENBQUM7b0JBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNmLENBQUM7YUFDRjtTQUNGLENBQUM7UUFFRixJQUFJLE9BQU8sR0FBRztZQUNaLGFBQWEsRUFBRSxhQUFhO1lBQzVCLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFlBQVksRUFBRSxZQUFZO1lBQzFCLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQztRQUNGLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0NBQTRCLEVBQUUsVUFBQyxFQUFFO1lBQy9DLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3pCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ1gsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFVBQUMsQ0FBQzs0QkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDakIsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDTixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFqSmUsaUNBQXVCLDBCQWlKdEMsQ0FBQTtJQUVELHlDQUFnRCxXQUFXLEVBQUUsWUFBbUI7UUFBbkIsNEJBQW1CLEdBQW5CLG1CQUFtQjtRQUM5RSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUM1RCxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwSCxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDbEIsWUFBWSxHQUFHLFdBQVcsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUc7WUFDWDtnQkFDRSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFDO2dCQUMxSCxLQUFLLEVBQUUsTUFBTTtnQkFDYixLQUFLLEVBQUUsbUNBQW1DO2FBQzNDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUM7Z0JBQ3BELEtBQUssRUFBRSxTQUFTO2dCQUNoQixLQUFLLEVBQUUsa0ZBQWtGO2FBQzFGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUM7Z0JBQ2xELEtBQUssRUFBRSxVQUFVO2dCQUNqQixLQUFLLEVBQUUsNENBQTRDO2FBQ3BEO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGNBQU0sT0FBQSxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsRUFBL0IsQ0FBK0I7Z0JBQzlDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDO2dCQUNwRCxLQUFLLEVBQUUsT0FBTztnQkFDZCxLQUFLLEVBQUUsb0NBQW9DO2FBQzVDO1NBQ0YsQ0FBQztRQUNGLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQWpDZSx5Q0FBK0Isa0NBaUM5QyxDQUFBO0lBRUQsZ0NBQXVDLElBQUk7UUFDekMsSUFBSSxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBTSxjQUFjLENBQUMsQ0FBQztRQUMxRCxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQU5lLGdDQUFzQix5QkFNckMsQ0FBQTtJQUVELG9DQUEyQyxJQUFJO1FBQzdDLElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQU0sY0FBYyxDQUFDLENBQUM7UUFDMUQsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNqQixNQUFNLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNmLENBQUM7SUFOZSxvQ0FBMEIsNkJBTXpDLENBQUE7SUFFRCwrQkFBc0MsTUFBTTtRQUMxQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFGZSwrQkFBcUIsd0JBRXBDLENBQUE7SUFFRCwyQkFBa0MsYUFBb0I7UUFBcEIsNkJBQW9CLEdBQXBCLG9CQUFvQjtRQUNwRCxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDbkIsYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFMZSwyQkFBaUIsb0JBS2hDLENBQUE7SUFFRCwwQkFBaUMsYUFBYSxFQUFFLFdBQVc7UUFDekQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRmUsMEJBQWdCLG1CQUUvQixDQUFBO0lBRUQsNEJBQW1DLGFBQWEsRUFBRSxXQUFXO1FBQzNELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLDZCQUE2QixDQUFDLENBQUM7SUFDekYsQ0FBQztJQUZlLDRCQUFrQixxQkFFakMsQ0FBQTtJQUVELDRCQUFtQyxhQUFhLEVBQUUsV0FBVztRQUMzRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUZlLDRCQUFrQixxQkFFakMsQ0FBQTtJQUVELDhCQUFxQyxhQUFhLEVBQUUsV0FBVyxFQUFFLGdCQUFnQjtRQUMvRSxJQUFJLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQztRQUNsRixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFIZSw4QkFBb0IsdUJBR25DLENBQUE7SUFFRCw4QkFBcUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsa0JBQXlCO1FBQXpCLGtDQUF5QixHQUF6Qix5QkFBeUI7UUFDOUYsRUFBRSxDQUFDLENBQUMsa0JBQWtCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ25CLGFBQWEsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBUmUsOEJBQW9CLHVCQVFuQyxDQUFBO0lBRUQsMEJBQWlDLGFBQW9CO1FBQXBCLDZCQUFvQixHQUFwQixvQkFBb0I7UUFDbkQsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ25CLGFBQWEsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDakcsQ0FBQztJQUxlLDBCQUFnQixtQkFLL0IsQ0FBQTtJQUVELHlCQUFnQyxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsSUFBUyxFQUFFLGtCQUF5QjtRQUFwQyxvQkFBUyxHQUFULFNBQVM7UUFBRSxrQ0FBeUIsR0FBekIseUJBQXlCO1FBQ3ZHLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ25CLGFBQWEsR0FBRyxVQUFVLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNILENBQUM7SUFSZSx5QkFBZSxrQkFROUIsQ0FBQTtJQUVVLHNDQUE0QixHQUFHLEVBQUUsQ0FBQztJQUU3QyxrQ0FBeUMsV0FBVyxFQUFFLEtBQUssRUFBRSxPQUFPO1FBQ2xFLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzVELElBQUksUUFBUSxHQUFHO1lBQ2I7Z0JBQ0UsRUFBRSxFQUFFLFFBQVE7Z0JBQ1osSUFBSSxFQUFFLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDO2dCQUN6RCxLQUFLLEVBQUUsUUFBUTtnQkFDZixLQUFLLEVBQUUsOEJBQThCO2FBQ3RDO1NBQ0YsQ0FBQztRQUNGLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNaLEVBQUUsRUFBRSxFQUFFO2dCQUNOLElBQUksRUFBRSxFQUFFO2dCQUNSLEtBQUssRUFBRSxHQUFHLEdBQUcsT0FBTztnQkFDcEIsS0FBSyxFQUFFLFNBQVMsR0FBRyxPQUFPO2FBQzNCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFuQmUsa0NBQXdCLDJCQW1CdkMsQ0FBQTtJQUVELGlDQUF3QyxXQUFXLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxXQUF1QjtRQUF2QiwyQkFBdUIsR0FBdkIsa0JBQXVCO1FBQ2pHLElBQUksTUFBTSxHQUFHLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNoRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLDZCQUE2QjtZQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFQZSxpQ0FBdUIsMEJBT3RDLENBQUE7SUFHRCxxQ0FBNEMsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZO1FBQ3pFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2pELElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDM0MsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUNuQyxJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQ3pDLElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzVFOzs7Ozs7V0FNRztRQUNILElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDckI7Z0JBQ0UsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSx3QkFBd0IsQ0FBQztnQkFDbkUsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsS0FBSyxFQUFFLGFBQWE7Z0JBQ3BCLEtBQUssRUFBRSxvQ0FBb0M7YUFDNUM7U0FjRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBbkNlLHFDQUEyQiw4QkFtQzFDLENBQUE7SUFFRCxpQ0FBd0MsR0FBRyxFQUFFLFdBQWtCO1FBQWxCLDJCQUFrQixHQUFsQixrQkFBa0I7UUFDN0QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNSLElBQUksWUFBWSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNqQixFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNoQixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNoSyxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLDBCQUEwQixFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUN2SSxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQVplLGlDQUF1QiwwQkFZdEMsQ0FBQTtJQUdELHVCQUE4QixNQUFNLEVBQUUsWUFBWSxFQUFFLElBQVc7UUFBWCxvQkFBVyxHQUFYLFdBQVc7UUFDN0QsSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDakQsSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUMzQyxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQ25DLElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzVFLEVBQUUsQ0FBQyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzdCLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RyxDQUFDO1FBQ0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQVRlLHVCQUFhLGdCQVM1QixDQUFBO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsSUFBSTtRQUNyQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDYixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDaEMsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCx1QkFBOEIsSUFBVztRQUN2QyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDVixNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBTmUsdUJBQWEsZ0JBTTVCLENBQUE7SUFFRCx5QkFBZ0MsV0FBVztRQUN6QyxXQUFXLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksU0FBUyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFzQixXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDakYsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNkLElBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbEIsb0JBQW9CLElBQUk7Z0JBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2YsQ0FBQztZQUNELGlCQUFpQixJQUFJO2dCQUNuQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNyQixJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFVBQUMsSUFBSTtnQkFDaEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDbkIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN0QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQzlCLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbkIsQ0FBQztvQkFDSCxDQUFDO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNOLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDOzRCQUNkLE1BQU0sQ0FBQzt3QkFDVCxDQUFDO3dCQUNELEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUN0QixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ25CLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxnRUFBZ0U7WUFDaEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFVBQUMsSUFBSTtvQkFDaEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNYLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUN2QyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQ0FDZCxNQUFNLENBQUM7NEJBQ1QsQ0FBQzs0QkFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ2pDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDbkIsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsZ0NBQWdDO1lBQ2hDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDWCxHQUFHLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBdkRlLHlCQUFlLGtCQXVEOUIsQ0FBQTtJQUVELHlCQUF5QixNQUFNLEVBQUUsUUFBUTtRQUN2QyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO1FBQ0QsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUMsRUExc0JNLFNBQVMsS0FBVCxTQUFTLFFBMHNCZjs7QUMzc0JELElBQU8sVUFBVSxDQW9KaEI7QUFwSkQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUVqQjtRQUFBO1FBRUEsQ0FBQztRQURDLHNCQUFJLHlDQUFxQjtpQkFBekIsY0FBcUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDdkUsYUFBQztJQUFELENBRkEsQUFFQyxJQUFBO0lBRlksaUJBQU0sU0FFbEIsQ0FBQTtJQUVVLG9CQUFTLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQThDckM7UUFBQTtRQTBCQSxDQUFDO1FBekJBLHNCQUFrQix1QkFBUztpQkFBM0IsY0FBdUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzVELHNCQUFrQixvQkFBTTtpQkFBeEIsY0FBb0MsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3BELHNCQUFrQix3QkFBVTtpQkFBNUIsY0FBd0MsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ2hFLHNCQUFrQixtQkFBSztpQkFBdkIsY0FBbUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3BELHNCQUFrQixnQ0FBa0I7aUJBQXBDLGNBQWdELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzdFLHNCQUFrQixzQ0FBd0I7aUJBQTFDLGNBQXNELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3hGLHNCQUFrQixrQkFBSTtpQkFBdEIsY0FBa0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ2xELHNCQUFrQixxQ0FBdUI7aUJBQXpDLGNBQXFELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3ZGLHNCQUFrQiw2QkFBZTtpQkFBakMsY0FBNkMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDdkUsc0JBQWtCLDJCQUFhO2lCQUEvQixjQUEyQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDbkUsc0JBQWtCLHFCQUFPO2lCQUF6QixjQUFxQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDeEQsc0JBQWtCLHNCQUFRO2lCQUExQixjQUFzQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDMUQsc0JBQWtCLDhCQUFnQjtpQkFBbEMsY0FBOEMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFFekUsc0JBQWtCLHVCQUFTO2lCQUEzQixjQUF1QyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDNUQsc0JBQWtCLG9CQUFNO2lCQUF4QixjQUFvQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDdEQsc0JBQWtCLDJCQUFhO2lCQUEvQixjQUEyQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDbkUsc0JBQWtCLG9CQUFNO2lCQUF4QixjQUFvQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDdEQsc0JBQWtCLGdDQUFrQjtpQkFBcEMsY0FBZ0QsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDN0Usc0JBQWtCLDJCQUFhO2lCQUEvQixjQUEyQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDbkUsc0JBQWtCLHNCQUFRO2lCQUExQixjQUFzQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzs7O1dBQUE7UUFDMUQsc0JBQWtCLDZCQUFlO2lCQUFqQyxjQUE2QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUNyRSxzQkFBa0Isc0JBQVE7aUJBQTFCLGNBQXNDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUM1RCxzQkFBa0IsMkJBQWE7aUJBQS9CLGNBQTJDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUNuRSxzQkFBa0IsbUJBQUs7aUJBQXZCLGNBQW1DLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDOzs7V0FBQTtRQUNyRCxpQkFBQztJQUFELENBMUJBLEFBMEJDLElBQUE7SUExQlkscUJBQVUsYUEwQnRCLENBQUE7SUFFQTtRQUFBO1FBa0NBLENBQUM7UUFqQ0Msc0JBQWtCLDJCQUFRO2lCQUExQjtnQkFDRSxNQUFNLENBQUM7b0JBQ0wsVUFBVSxDQUFDLFNBQVM7b0JBQ3BCLFVBQVUsQ0FBQyxNQUFNO29CQUNqQixVQUFVLENBQUMsS0FBSztvQkFDaEIsVUFBVSxDQUFDLGtCQUFrQjtvQkFDN0IsVUFBVSxDQUFDLHdCQUF3QjtvQkFDbkMsVUFBVSxDQUFDLElBQUk7b0JBQ2YsVUFBVSxDQUFDLHVCQUF1QjtvQkFDbEMsVUFBVSxDQUFDLGVBQWU7b0JBQzFCLFVBQVUsQ0FBQyxrQkFBa0I7b0JBQzdCLFVBQVUsQ0FBQyxPQUFPO29CQUNsQixVQUFVLENBQUMsUUFBUTtvQkFDbkIsVUFBVSxDQUFDLGdCQUFnQjtpQkFDNUIsQ0FBQztZQUNKLENBQUM7OztXQUFBO1FBQ0Qsc0JBQWtCLDBCQUFPO2lCQUF6QjtnQkFDRSxNQUFNLENBQUM7b0JBQ0wsVUFBVSxDQUFDLFNBQVM7b0JBQ3BCLFVBQVUsQ0FBQyxhQUFhO29CQUN4QixVQUFVLENBQUMsTUFBTTtvQkFDakIsVUFBVSxDQUFDLE1BQU07b0JBQ2pCLFVBQVUsQ0FBQyxhQUFhO29CQUN4QixVQUFVLENBQUMsa0JBQWtCO29CQUM3QixVQUFVLENBQUMsYUFBYTtvQkFDeEIsVUFBVSxDQUFDLGFBQWE7b0JBQ3hCLFVBQVUsQ0FBQyxRQUFRO29CQUNuQixVQUFVLENBQUMsZUFBZTtvQkFDMUIsVUFBVSxDQUFDLFFBQVE7aUJBR3BCLENBQUM7WUFDSixDQUFDOzs7V0FBQTtRQUNILHNCQUFDO0lBQUQsQ0FsQ0EsQUFrQ0MsSUFBQTtJQWxDWSwwQkFBZSxrQkFrQzNCLENBQUE7SUFFRjtRQUFBO1FBS0EsQ0FBQztRQUpBLHNCQUFrQixtQkFBRztpQkFBckIsY0FBaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzlDLHNCQUFrQixxQkFBSztpQkFBdkIsY0FBbUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3BELHNCQUFrQix3QkFBUTtpQkFBMUIsY0FBc0MsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQzFELHNCQUFrQix1QkFBTztpQkFBekIsY0FBcUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7OztXQUFBO1FBQ3pELG1CQUFDO0lBQUQsQ0FMQSxBQUtDLElBQUE7SUFMWSx1QkFBWSxlQUt4QixDQUFBO0FBMkJGLENBQUMsRUFwSk0sVUFBVSxLQUFWLFVBQVUsUUFvSmhCOztBQ3BKRCx5Q0FBeUM7QUFDekMsOENBQThDO0FBQzlDLElBQU8sVUFBVSxDQW1YaEI7QUFuWEQsV0FBTyxVQUFVLEVBQUMsQ0FBQztJQUNOLG9CQUFTLEdBQUUsRUFBRSxDQUFDO0lBRXpCOzs7OztPQUtHO0lBQ0gscUJBQTRCLEVBQUU7UUFDNUIsNkVBQTZFO1FBQzdFLElBQUksS0FBSyxHQUFHLDRDQUE0QyxDQUFDO1FBQ3pELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDSCxDQUFDO0lBZGUsc0JBQVcsY0FjMUIsQ0FBQTtJQUVEO1FBQ0csSUFBSSxRQUFRLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFDLENBQUMsS0FBSyxHQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0QsT0FBTSxvQkFBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQztZQUN0QyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFDLENBQUMsS0FBSyxHQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELG9CQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxRQUFRLENBQUE7SUFDbEIsQ0FBQztJQVBlLHFCQUFVLGFBT3pCLENBQUE7SUFFRCx5QkFBZ0MsR0FBWTtRQUN4QyxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUNoQixJQUFJLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLGdDQUFnQztRQUNyRSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFUZSwwQkFBZSxrQkFTOUIsQ0FBQTtJQUVEO1FBQUE7WUFFVSxVQUFLLEdBQUMsYUFBYSxDQUFDO1lBQ3BCLFVBQUssR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBaUc5QixDQUFDO1FBL0ZTLHFDQUFRLEdBQWYsVUFBZ0IsR0FBRztZQUNoQixJQUFJLE1BQU0sR0FBRztnQkFDVixPQUFPLEVBQUUsUUFBUTtnQkFDakIsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsV0FBVyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEdBQUMsRUFBRSxJQUFJLEdBQUc7Z0JBQ3BDLFVBQVUsRUFBRSxHQUFHLENBQUMsUUFBUTthQUMxQixDQUFDO1lBQ0YsR0FBRyxDQUFBLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQztnQkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbkMsTUFBTSxDQUFDO2dCQUNKLFlBQVksRUFBSSxVQUFVLENBQUMsaUJBQWlCO2dCQUM1QyxNQUFNLEVBQUcsdUJBQXVCO2dCQUNoQyxVQUFVLEVBQUc7b0JBQ1YsTUFBTSxFQUFHLEdBQUcsQ0FBQyxJQUFJO29CQUNqQixRQUFRLEVBQUcsTUFBTTtvQkFDakIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxXQUFXO2lCQUNoQztnQkFDRCxNQUFNLEVBQUc7b0JBQ04sUUFBUSxFQUFHLEdBQUcsQ0FBQyxRQUFRLElBQUksQ0FBQztvQkFDNUIsVUFBVSxFQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO2lCQUN2QzthQUNILENBQUE7UUFDSixDQUFDO1FBRU0sK0NBQWtCLEdBQXpCO1lBQ0csSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLEdBQUcsQ0FBQSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDO2dCQUN6QixFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLHFCQUFxQixDQUFDO29CQUMzQyxZQUFZLENBQUMsSUFBSSxDQUFDO3dCQUNmLE1BQU0sRUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzt3QkFDekIsV0FBVyxFQUFHLHFDQUFxQztxQkFDckQsQ0FBQyxDQUFDO2dCQUNOLElBQUk7b0JBQ0QsWUFBWSxDQUFDLElBQUksQ0FBQzt3QkFDZixNQUFNLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQ3pCLFdBQVcsRUFBRyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztxQkFDckQsQ0FBQyxDQUFDO1lBQ1QsQ0FBQztZQUNELE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDdkIsQ0FBQztRQUVNLDBDQUFhLEdBQXBCLFVBQXFCLFFBQWdCO1lBQ2xDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNqQixHQUFHLENBQUEsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQztnQkFDeEIsRUFBRSxDQUFBLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxxQkFBcUIsQ0FBQztvQkFDM0MsT0FBTyxDQUFDLElBQUksQ0FBQzt3QkFDVixNQUFNLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQ3pCLFVBQVUsRUFBRTs0QkFDUixNQUFNLEVBQUcsUUFBUSxHQUFHLHFCQUFxQjt5QkFDNUM7cUJBQ0gsQ0FBQyxDQUFDO2dCQUNOLElBQUk7b0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQzt3QkFDVixNQUFNLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQ3pCLFVBQVUsRUFBRTs0QkFDUixNQUFNLEVBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3lCQUN2QztxQkFDSCxDQUFDLENBQUM7WUFDVixDQUFDO1lBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNsQixDQUFDO1FBRU0sNkNBQWdCLEdBQXZCLFVBQXdCLEdBQUc7WUFDeEIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLFVBQVUsQ0FBQyxJQUFJLENBQ2Y7Z0JBQ0csTUFBTSxFQUFHLFFBQVE7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDbkIsaUJBQWlCLEVBQUUsY0FBYztnQkFDakMsU0FBUyxFQUFDLENBQUMsdUJBQXVCLENBQUM7Z0JBQ25DLE9BQU8sRUFBRTtvQkFDVDt3QkFDRSxlQUFlLEVBQUUsSUFBSTt3QkFDckIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksVUFBVSxFQUFFO3FCQUNyQyxDQUFDO2dCQUNGLGNBQWMsRUFBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7YUFDNUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQTtRQUNwQixDQUFDO1FBRU0sMkNBQWMsR0FBckIsVUFBc0IsR0FBRztZQUN0QixNQUFNLENBQUM7Z0JBQ0gsVUFBVSxFQUNWO29CQUNHLG1CQUFtQjtvQkFDbkIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNO2lCQUN0QjtnQkFDRCxNQUFNLEVBQUc7b0JBQ0wsK0JBQStCLEVBQUcsQ0FBQztvQkFDbkMsWUFBWSxFQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7b0JBQzFDLFNBQVMsRUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7aUJBQzVDO2FBQ0osQ0FBQTtRQUNKLENBQUM7UUFDSix5QkFBQztJQUFELENBcEdBLEFBb0dDLElBQUE7SUFwR1ksNkJBQWtCLHFCQW9HOUIsQ0FBQTtJQUVELHdCQUErQixNQUFNO1FBQ2xDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBQyxVQUFDLEtBQUssRUFBRSxHQUFHO1lBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsTUFBTSxDQUFBO0lBQ2hCLENBQUM7SUFOZSx5QkFBYyxpQkFNN0IsQ0FBQTtJQUVELDRDQUFvRCxzQkFBc0IsRUFBRSxJQUFJO1FBQzVFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxVQUFDLEVBQUU7WUFDOUIsSUFBSSxNQUFNLEdBQUcsa0JBQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixFQUFFLENBQUEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFBLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFBQSxJQUFJLENBQUEsQ0FBQztZQUNGLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNaLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLO2dCQUNqQixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLEVBQUUsQ0FBQSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7b0JBQ1YsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNMLENBQUM7SUFwQmdCLDZDQUFrQyxxQ0FvQmxELENBQUE7SUFFRCxvQkFBMkIsRUFBRTtRQUN6QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFDLFVBQUMsS0FBSyxFQUFFLEdBQUc7WUFDaEUsRUFBRSxDQUFBLENBQUMsR0FBRyxLQUFLLFVBQVUsSUFBSSxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUEsQ0FBQztnQkFDeEMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNqQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFSZSxxQkFBVSxhQVF6QixDQUFBO0lBRUQsbUJBQTBCLEdBQUcsRUFBRSxFQUFFO1FBQzlCLEdBQUcsQ0FBQSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBLENBQUM7WUFDZCxFQUFFLENBQUEsQ0FBQyxrQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLGtCQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDaEIsQ0FBQztJQU5lLG9CQUFTLFlBTXhCLENBQUE7SUFFRCw2QkFBb0MsS0FBWSxFQUFFLEdBQVU7UUFDM0QsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sQ0FBQSxDQUFDLEdBQUcsQ0FBQyxDQUFBLENBQUM7WUFDWCxLQUFLLE1BQU07Z0JBQ1IsRUFBRSxDQUFBLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztvQkFDZixTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixJQUFJLENBQUMsRUFBRSxDQUFBLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztvQkFDcEIsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDcEIsSUFBSTtvQkFDRCxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixLQUFLLENBQUM7WUFDVCxLQUFLLE9BQU87Z0JBQ04sRUFBRSxDQUFBLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQztvQkFDZCxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsRUFBRSxDQUFBLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQztvQkFDbkIsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSTtvQkFDRCxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUV4QixLQUFLLENBQUM7WUFDVCxLQUFLLFFBQVE7Z0JBQ1YsU0FBUyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlDLEtBQUssQ0FBQztZQUNULEtBQUssUUFBUTtnQkFDVixTQUFTLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxLQUFLLENBQUM7WUFDVCxLQUFLLFNBQVM7Z0JBQ1gsSUFBSSxHQUFHLEdBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxFQUFFLENBQUEsQ0FBQyxHQUFHLENBQUM7b0JBQ0gsU0FBUyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUk7b0JBQ0EsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDbkIsS0FBSyxDQUFDO1lBQ1QsS0FBSyxVQUFVO2dCQUNaLEVBQUUsQ0FBQSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUM7b0JBQ2hCLFNBQVMsR0FBRyxPQUFPLENBQUM7Z0JBQ3hCLElBQUk7b0JBQ0EsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDdEIsS0FBSyxDQUFDO1lBQ1Q7Z0JBQ0csU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDO1FBQ0QsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUNsQixDQUFDO0lBM0NlLDhCQUFtQixzQkEyQ2xDLENBQUE7SUFFRjs7Ozs7Ozs7OztVQVVNO0lBRUwsc0JBQTZCLHNCQUFxQyxFQUFFLFVBQVU7UUFDNUUsR0FBRyxDQUFBLENBQUMsSUFBSSxLQUFLLElBQUksc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksUUFBUSxHQUFHLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdDLEVBQUUsQ0FBQSxDQUFDLGtCQUFPLENBQUMsUUFBUSxDQUFDLElBQUUsVUFBVSxDQUFDLElBQUksSUFBSSx1QkFBdUIsQ0FBQyxRQUFRLEVBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQVBlLHVCQUFZLGVBTzNCLENBQUE7SUFFRCxpQ0FBaUMscUJBQXFCLEVBQUUsR0FBVTtRQUNoRSxJQUFJLFdBQVcsR0FBRyx5QkFBYyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDeEQsRUFBRSxDQUFBLENBQUMsV0FBVyxJQUFJLFdBQVcsSUFBSSxTQUFTLENBQUMsQ0FBQSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRDs7TUFFRTtJQUNGLDhCQUFxQyxhQUF3QixFQUFFLFdBQXNCO1FBQ25GLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxVQUFDLElBQUk7WUFDaEMsRUFBRSxDQUFBLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBUGUsK0JBQW9CLHVCQU9uQyxDQUFBO0lBRUQsMEJBQTBCLGFBQXdCLEVBQUUsVUFBVTtRQUM1RCxHQUFHLENBQUEsQ0FBQyxJQUFJLEtBQUssSUFBSSxhQUFhLENBQUMsQ0FBQSxDQUFDO1lBQzlCLElBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUEsQ0FBQztnQkFDdkksTUFBTSxDQUFDLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNILHlCQUFnQyxzQkFBa0M7UUFDaEUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsVUFBQyxRQUFRO1lBQy9DLElBQUksTUFBTSxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakMsRUFBRSxDQUFBLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztnQkFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQVJlLDBCQUFlLGtCQVE5QixDQUFBO0lBRUQsNkJBQW9DLHNCQUFrQztRQUNwRSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLFVBQUMsUUFBUTtZQUNoRCxJQUFJLE1BQU0sR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLEVBQUUsQ0FBQSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFSZSw4QkFBbUIsc0JBUWxDLENBQUE7SUFBQSxDQUFDO0lBRUY7O01BRUU7SUFDRiwyQkFBa0Msc0JBQXFDLEVBQUUsYUFBeUIsRUFBRSxVQUFxQjtRQUN2SCxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFN0I7O2NBRUU7WUFDRixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksTUFBTSxHQUFHLG9CQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEQsRUFBRSxDQUFBLENBQUMsa0JBQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksdUJBQXVCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEVBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQSxDQUFDO29CQUN4SyxPQUFPLEdBQUcsUUFBUSxDQUFDO29CQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNqQixDQUFDO1lBQ0gsQ0FBQztZQUVEOztjQUVFO1lBQ0YsR0FBRyxDQUFBLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFBLENBQUM7Z0JBQ3RCLEVBQUUsQ0FBQSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQSxDQUFDO29CQUN6TyxPQUFPLEdBQUcsUUFBUSxDQUFBO29CQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNqQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUEzQmUsNEJBQWlCLG9CQTJCaEMsQ0FBQTtJQUdEO1FBQ0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsMENBQTBDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUMxRSxFQUFFLENBQUEsQ0FBQyxDQUFDLENBQUMsMENBQTBDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQSxDQUFDO1FBRWpFLENBQUM7SUFDSCxDQUFDO0lBTGUsaUNBQXNCLHlCQUtyQyxDQUFBO0lBRUQ7O01BRUU7SUFDRiw2QkFBb0MsYUFBeUIsRUFBRSxVQUFVO1FBQ3ZFLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDdkMsR0FBRyxDQUFBLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLFFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLEdBQUcsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ3BGLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLEVBQUUsQ0FBQSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUEsQ0FBQztvQkFDaEMsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztvQkFDekMsR0FBRyxDQUFBLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO3dCQUNyQixFQUFFLENBQUEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7NEJBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDaEIsQ0FBQztJQWRlLDhCQUFtQixzQkFjbEMsQ0FBQTtBQUNILENBQUMsRUFuWE0sVUFBVSxLQUFWLFVBQVUsUUFtWGhCOztBQ3JYRCx5Q0FBeUM7QUFDekMsSUFBTyxPQUFPLENBd0hiO0FBeEhELFdBQU8sT0FBTyxFQUFBLENBQUM7SUFDZCxxQkFBNEIsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJO1FBQ3BFOzs7Ozs7OztVQVFRO1FBQ0YsSUFBSSxHQUFHLDZCQUE2QixHQUFHLElBQUksR0FBRyxNQUFNLENBQUM7UUFDckQsV0FBVyxFQUFFLENBQUM7UUFDZCxJQUFJLElBQUksR0FBRywrQkFBK0I7Y0FDdkMsb0NBQW9DLEdBQUcsS0FBSyxHQUFHLFFBQVE7Y0FDdkQsbUZBQW1GO2NBQ25GLElBQUksR0FBRyxxQ0FBcUM7Y0FDNUMsMkNBQTJDO2NBQzNDLE9BQU8sR0FBRywwQkFBMEI7Y0FDcEMsMERBQTBEO2NBQzFELHNGQUFzRjtjQUN0RixJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLElBQUksSUFBSSxrR0FBa0csQ0FBQztRQUMvRyxDQUFDO1FBQ0QsSUFBSSxJQUFJLGNBQWMsQ0FBQztRQUV2QixhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU5QixFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDOUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuRCxDQUFDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsRCxDQUFDO0lBQ0wsQ0FBQztJQWpDWSxtQkFBVyxjQWlDdkIsQ0FBQTtJQUVEO1FBQ0ksTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7UUFDSSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQztRQUNmLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3BDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGlCQUFpQixDQUFDO1FBQ2QsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDcEMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7UUFDSSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyw2REFBNkQsQ0FBQztRQUNsRixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7UUFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQWJlLG1CQUFXLGNBYTFCLENBQUE7SUFFRCx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzFCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFDbEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDM0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM1QixHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDL0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO1FBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sRUFBRSxDQUFDO0lBQ2IsQ0FBQztJQUVEO1FBQ0ksSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO1lBQUMsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDNUMsQ0FBQztJQUVEO1FBQ0ksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDcEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQztJQUVEO1FBQ0ksSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQztZQUFDLE1BQU0sQ0FBQztRQUMzQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBTmUsY0FBTSxTQU1yQixDQUFBO0lBRUQ7UUFDSSxNQUFNLEVBQUUsQ0FBQztRQUNULE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEO1FBQ0ksTUFBTSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDMUIsTUFBTSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDOUIsQ0FBQztBQUNMLENBQUMsRUF4SE0sT0FBTyxLQUFQLE9BQU8sUUF3SGI7O0FDekhEOzs7R0FHRztBQUNILElBQU8sVUFBVSxDQStmaEI7QUEvZkQsV0FBTyxVQUFVLEVBQUEsQ0FBQztJQUNOLHFCQUFVLEdBQUcsQ0FBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDO1FBQy9GLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLEdBQUcsRUFBQztRQUM5RyxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsUUFBUSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUM7UUFDL0csRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQy9HLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUN0SCxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDaEgsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQzlHLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUNsSCxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDNUcsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ2pILEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxvQkFBb0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQzFILEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDL0gsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3hILEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxtQkFBbUIsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ2hJLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3pILEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ2hKLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3RKLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQzdJLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3hKLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUNsSyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUM5SixFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQzVMLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdEosRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3ZILEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUNuSCxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDdkgsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3RILEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUM7UUFDMUgsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxrQkFBa0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDO1FBQ3RJLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsaUJBQWlCLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQztRQUNwSSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNqSyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUM3SSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNsSixFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDekgsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDL0gsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDakksRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxvQkFBb0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQzFJLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ3pKLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ3ZILEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQy9ILEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDdEksRUFBQyxVQUFVLEVBQUMsbUJBQW1CLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQzVJLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDN0osRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNySSxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFD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Z0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDekYsRUFBQyxVQUFVLEVBQUMsbUJBQW1CLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQzFGLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUN2RixFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUN6RixFQUFDLFVBQVUsRUFBQyxrQkFBa0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUMzRixFQUFDLFVBQVUsRUFBQyxrQkFBa0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUMzRixFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDckYsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQzFILEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDO1FBQ3hILEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNsSCxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDbEgsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxtQkFBbUIsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDM0gsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDekgsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLG1CQUFtQixFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUM7UUFDcEksRUFBQyxVQUFVLEVBQUMsb0JBQW9CLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQztRQUNwSSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUMsVUFBVSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLEVBQUMsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO0lBRTlHLDJCQUFnQixHQUFHLENBQUMsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN6SSxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzVHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDekcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUM7UUFDdkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzVHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsb0JBQW9CLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN6SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxF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LEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM1RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxXQUFXLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2hILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUN6RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxPQUFPLEVBQUM7UUFDdEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3BILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxF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QUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2pILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3pHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZUFBZSxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLEVBQUUsRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDOUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFlBQVksRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFNBQVMsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxhQUFhLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNsSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGtCQUFrQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDdkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxjQUFjLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNuSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDckgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxnQkFBZ0IsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsb0JBQW9CLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUN6SCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ25ILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxF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UUFBUSxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3RILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNySCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDbkgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3RILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMs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QUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxlQUFlLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNwSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDNUcsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGFBQWEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ2xILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3JILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDakgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNqSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxLQUFLLEVBQUM7UUFDM0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQzlHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM3RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMzRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzdHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVB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QyxNQUFNLEVBQUM7UUFDaEgsRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLGVBQWUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQ3BILEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDL0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUM5RyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQzNHLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUMvRyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFDLGFBQWEsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLFVBQVUsRUFBQyxVQUFVLEVBQUMsTUFBTSxFQUFDO1FBQy9HLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsYUFBYSxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsUUFBUSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUM7UUFDN0csRUFBQyxXQUFXLEVBQUMsTUFBTSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsUUFBUSxFQUFDLEtBQUssRUFBQyxhQUFhLEVBQUMsV0FBVyxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQztRQUNoSCxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEtBQUssRUFBQyxRQUFRLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxXQUFX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L2xpYnMvaGF3dGlvLWZvcm1zL2RlZnMuZC50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL2xpYnMvaGF3dGlvLWt1YmVybmV0ZXMtYXBpL2RlZnMuZC50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL2xpYnMvaGF3dGlvLW9hdXRoL2RlZnMuZC50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL2xpYnMvaGF3dGlvLXVpL2RlZnMuZC50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL2xpYnMvaGF3dGlvLXV0aWxpdGllcy9kZWZzLmQudHNcIi8+XHJcblxyXG5kZWNsYXJlIHZhciBodW1hbmRhdGU7XHJcbmRlY2xhcmUgdmFyIGpzeWFtbDphbnk7XHJcblxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcblxyXG5tb2R1bGUgQ29uZmlncyB7XHJcblxyXG5cdGV4cG9ydCB2YXIgcGx1Z2luTmFtZSA9IFwiQ29uZmlnc1wiO1xyXG5cdGV4cG9ydCB2YXIgY29udGV4dCA9IFwiL2NvbmZpZ1wiO1x0XHJcblx0ZXhwb3J0IHZhciBwbHVnaW5QYXRoID0gJ3BsdWdpbnMvY29uZmlncy8nO1xyXG4gICAgZXhwb3J0IHZhciB0ZW1wbGF0ZVBhdGggPSBwbHVnaW5QYXRoICsgJ2h0bWwvJztcclxuXHRleHBvcnQgdmFyIF9tb2R1bGUgPSBhbmd1bGFyLm1vZHVsZShwbHVnaW5OYW1lLCBbJ2hhd3Rpby1jb3JlJywgJ2hhd3Rpby11aScsICd1aS5jb2RlbWlycm9yJywgJ252ZDMnLCAnbmdUYWJsZScsICduZ0RpYWxvZyddKTtcclxuXHRleHBvcnQgdmFyIHJvdXRlID0gUGx1Z2luSGVscGVycy5jcmVhdGVSb3V0aW5nRnVuY3Rpb24odGVtcGxhdGVQYXRoKTtcclxuXHRleHBvcnQgdmFyIGNvbnRyb2xsZXIgPSBQbHVnaW5IZWxwZXJzLmNyZWF0ZUNvbnRyb2xsZXJGdW5jdGlvbihfbW9kdWxlLCBwbHVnaW5OYW1lKTtcclxuXHJcblx0X21vZHVsZS5jb25maWcoWyckcHJvdmlkZScsICckcm91dGVQcm92aWRlcicsICgkcHJvdmlkZSwgJHJvdXRlUHJvdmlkZXIpID0+e1xyXG5cdFx0JHJvdXRlUHJvdmlkZXIud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2dsdXN0ZXItZnMvc2V0dGluZycpLCByb3V0ZSgnZ2x1c3RlcmZzU2V0dGluZy5odG1sJywgZmFsc2UpKVxyXG5cdFx0XHRcdFx0ICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2t1YmUtY2x1c3Rlci9zZXR0aW5nJyksIHJvdXRlKCdrdWJlQ2x1c3RlclNldHRpbmcuaHRtbCcsIGZhbHNlKSlcclxuXHRcdFx0XHRcdCAgLndoZW4oY29udGV4dCwge3JlZGlyZWN0VG86IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL2t1YmUtY2x1c3Rlci9zZXR0aW5nJyl9KTtcdFx0ICAgXHRcdFx0ICBcclxuXHR9XSk7XHJcblxyXG5cdCBfbW9kdWxlLnJ1bihbJ3ZpZXdSZWdpc3RyeScsICckdGVtcGxhdGVDYWNoZScsICdIYXd0aW9FeHRlbnNpb24nLCAnJGNvbXBpbGUnLCAodmlld1JlZ2lzdHJ5LCAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsIGV4dCwgICRjb21waWxlOm5nLklDb21waWxlU2VydmljZSkgPT4ge1xyXG4gICAgICAgIGV4dC5hZGQoJ2NvbmZpZy1zZXR0aW5nJywgKCRzY29wZSkgPT4ge1xyXG4gICAgICAgIFx0dmFyIHRlbXBsYXRlICA9ICR0ZW1wbGF0ZUNhY2hlLmdldDxzdHJpbmc+KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiY29uZmlnTWVudUl0ZW0uaHRtbFwiKSk7XHJcbiAgICAgICAgXHRyZXR1cm4gJGNvbXBpbGUodGVtcGxhdGUpKCRzY29wZSk7XHJcbiAgICAgICAgfSk7IFxyXG5cclxuICAgICAgICB2aWV3UmVnaXN0cnlbJ2NvbmZpZyddID0gdGVtcGxhdGVQYXRoICsgXCJzaGFyZUxheW91dC5odG1sXCI7ICAgICAgICAgIFxyXG4gICAgfV0pO1xyXG5cclxuXHQgX21vZHVsZS5kaXJlY3RpdmUoJ2dmc0NvbmZpZ1RhYmxlJywgWygpID0+e1xyXG5cdCBcdHJldHVybntcclxuXHQgXHRcdHJlc3RyaWN0OiAnQUUnLFxyXG5cdCBcdFx0cmVwbGFjZSA6IHRydWUsIFxyXG5cdCBcdFx0c2NvcGU6IHtcclxuXHQgXHRcdFx0dGFibGVUaXRsZTogJz0nLFxyXG5cdCBcdFx0XHR0YWJsZUNvbnRlbnQ6ICc9J1xyXG5cdCBcdFx0fSxcclxuXHQgXHRcdHRlbXBsYXRlOiBgPHRhYmxlIGNsYXNzPVwidGFibGUgIHRhYmxlLWhvdmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIG5nLXJlcGVhdD1cImNvbHVtbiBpbiB0YWJsZVRpdGxlLmNvbHVtblwiIGNsYXNzPVwibm8tZmFkZSB0YWJsZS1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICBcdDxzcGFuIGNsYXNzPVwie3tjb2x1bW4uY2xhc3N9fVwiPnt7Y29sdW1uLnRpdGxlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDx0ciBuZy1yZXBlYXQgPSBcInJvdyBpbiB0YWJsZUNvbnRlbnRcIiBjbGFzcz1cInJvdy5jbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgXHQ8dGQgbmctcmVwZWF0PVwiY29sIGluIHJvd1wiIGNsYXNzPVwiY29sLmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICBcdFx0PHNwYW4gY2xhc3M9XCJjb2wuY2xhc3NcIj57e2NvbC50aXRsZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgXHQ8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvdGFibGU+ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cikgPT57ICAgICAgICAgICAgXHRcclxuICAgICAgICAgICAgfVxyXG5cdCBcdH1cdCBcdFxyXG5cdCB9XSk7XHJcblxyXG5cdGhhd3Rpb1BsdWdpbkxvYWRlci5hZGRNb2R1bGUocGx1Z2luTmFtZSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiY29uZmlnUGx1Z2luLnRzXCIvPlxyXG5tb2R1bGUgQ29uZmlnc3tcclxuXHJcblx0ZXhwb3J0IGludGVyZmFjZSBCbG9ja3tcclxuXHRcdGlwOnN0cmluZzsgLy/lrZjlgqjlnZfnmoTmnLrlmahpcOWcsOWdgFxyXG5cdFx0cGF0aDogc3RyaW5nOyAvL+WtmOWCqOWdl+i3r+W+hFxyXG5cdFx0c3RhdHVzOiBib29sZWFuOyAvL+WtmOWCqOWdl+eahOeKtuaAgVxyXG5cdFx0YXZhaWxhYmxlU2l6ZT86IG51bWJlciwgLy/lrZjlgqjlnZfnmoTlpKflsI9cclxuXHRcdHVzZWRTaXplPzogbnVtYmVyIC8v5a2Y5YKo5Z2X5bey5L2/55So56m66Ze0XHJcblx0XHRlZGl0YWJsZT86IGJvb2xlYW5cdFxyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGludGVyZmFjZSBvcmFjbGVQYXJhbXtcclxuXHRcdG5hbWU6IHN0cmluZ1xyXG5cdFx0aXA6IHN0cmluZztcclxuXHRcdHBvcnQ6IHN0cmluZztcclxuXHRcdHNlcnZpY2VOYW1lOiBzdHJpbmc7XHJcblx0XHR0YWJsZU5hbWU6IHN0cmluZztcclxuXHRcdHN0YXR1czogc3RyaW5nO1x0XHJcblx0XHRpZD86bnVtYmVyO1x0XHJcblx0fVxyXG5cclxuXHRleHBvcnQgaW50ZXJmYWNlIHZvbHVtZXtcclxuXHRcdG5hbWU6IHN0cmluZzsgLy92b2x1bWXnmoTlkI3lrZdcclxuXHRcdGFsbFNpemU6IG51bWJlcjsgLy92b2x1bWXnqbrpl7TlpKflsI9cclxuXHRcdHVzZWRTaXplOiBudW1iZXI7IC8vIHZvbHVtZeW3suS9v+eUqOepuumXtOWkp+Wwj1xyXG5cdFx0YnJpY2s6IEFycmF5PEJsb2NrPjsgLy92b2x1bWXkuK3nmoTlrZjlgqjlnZdcclxuXHRcdGZvbGRlcj86IEFycmF5PGFueT47XHQvL3ZvbHVtZeeahOaWh+S7tlx0XHJcblx0XHRzdGF0dXM6IGJvb2xlYW47XHJcblx0XHRwYXRoOiBzdHJpbmc7XHJcblx0XHRlZGl0YWJsZT86IGJvb2xlYW5cdFx0XHJcblx0fVx0XHJcblxyXG4gICAgLy/lrZfoioLlpKflsI/ovazmjaLmiJDlrZfnrKblpKflsI9cclxuXHRmdW5jdGlvbiBnZXRTdHJpbmdTaXplKHNpemU6IG51bWJlcil7XHJcblx0XHR2YXIgcmVzdWx0ID0gc2l6ZTsgXHJcblx0XHR2YXIgc3VmZml4ID1bXCJCXCIsIFwiS0JcIiAsXCJNQlwiLCBcIkdCXCIsIFwiVEJcIiwgXCJQQlwiXTtcclxuXHRcdHZhciBjb3VudD0xOyBcclxuXHRcdHdoaWxlKHJlc3VsdCA+PSAxMDI0KXtcclxuXHRcdFx0cmVzdWx0ID0gcmVzdWx0LzEwMjQ7XHJcblx0XHRcdGNvdW50ICsrO1x0XHRcdFxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdC50b0ZpeGVkKDIpICsgc3VmZml4W2NvdW50XTtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGZvcm1hdFZvbHVtZSh2b2x1bWU6dm9sdW1lKXtcclxuXHRcdHZvbHVtZVtcImZvcm1hdFRvdGFsU2l6ZVwiXSA9IGdldFN0cmluZ1NpemUodm9sdW1lLmFsbFNpemUpO1xyXG5cdFx0dm9sdW1lW1wiZm9ybWF0VXNlZFNpemVcIl0gPSBnZXRTdHJpbmdTaXplKHZvbHVtZS51c2VkU2l6ZSk7XHJcblx0XHR2b2x1bWVbXCJlZGl0YWJsZVwiXSA9IGZhbHNlO1xyXG5cdFx0XHJcblx0XHRhbmd1bGFyLmZvckVhY2godm9sdW1lLmJyaWNrLCAoYnJvY2spID0+e1xyXG5cdFx0XHRicm9ja1tcImZvcm1hdFVzZWRTaXplXCJdID0gZ2V0U3RyaW5nU2l6ZShicm9jay51c2VkU2l6ZSk7XHJcblx0XHRcdGJyb2NrW1wiZm9ybWF0QWxsU2l6ZVwiXSA9IGdldFN0cmluZ1NpemUoYnJvY2suYXZhaWxhYmxlU2l6ZSk7XHJcblx0XHRcdGJyb2NrW1wiZWRpdGFibGVcIl0gPSBmYWxzZTtcclxuXHRcdH0pXHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gZm9ybWF0Vm9sdW1lcyh2b2x1bWVzOkFycmF5PHZvbHVtZT4pe1x0XHRcclxuXHRcdGFuZ3VsYXIuZm9yRWFjaCh2b2x1bWVzLCAodm9sdW1lKSA9PiB7XHRcdFx0XHJcblx0XHRcdGZvcm1hdFZvbHVtZSh2b2x1bWUpO1xyXG5cdFx0fSlcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIElzQnJvY2tFcXVhbHMoYnJvY2sxOiBCbG9jaywgYnJvY2syOiBCbG9jayl7XHJcblx0XHRyZXR1cm4gYnJvY2sxLmlwID09IGJyb2NrMi5pcCAmJiBicm9jazEucGF0aCA9PSBicm9jazIucGF0aDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdFx05Yiq6Zmkdm9sdW1l5Lit5oyH5a6a55qEYnJvY2tcclxuXHQqL1xyXG5cdGV4cG9ydCBmdW5jdGlvbiBkZWxldGVCcm9jayh2b2x1bWU6dm9sdW1lLCBicm9jazpCbG9jayl7XHRcdFxyXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHZvbHVtZS5icmljay5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdHZhciBicmljayA9IHZvbHVtZS5icmlja1tpXTtcclxuXHRcdFx0aWYoSXNCcm9ja0VxdWFscyhicmljaywgYnJvY2spKXtcclxuXHRcdFx0XHR2b2x1bWUuYnJpY2suc3BsaWNlKGksIDEpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHRcdHZvbHVtZea3u+WKoGJyb2NrXHJcblx0Ki9cclxuXHRleHBvcnQgZnVuY3Rpb24gYWRkQnJvY2sodm9sdW1lOnZvbHVtZSwgYnJvY2s6QmxvY2spe1xyXG5cdFx0aWYoYnJvY2sgIT0gbnVsbCAmJiBicm9jayAhPSB1bmRlZmluZWQpXHJcblx0XHRcdHZvbHVtZS5icmljay5wdXNoKGJyb2NrKTtcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBjbGFzcyBDb25maWdzTW9kZWxTZXJ2aWNle1xyXG5cdFx0cHVibGljIGNsdXN0ZXI6IEFycmF5PHZvbHVtZT49W107XHJcblx0XHRwdWJsaWMgb3JhY2xlUGFyYW06IEFycmF5PG9yYWNsZVBhcmFtPj1bXTtcclxuXHRcdHB1YmxpYyBzeXN0ZW1JbmZvOiBBcnJheTxhbnk+ID1bXTtcclxuXHRcdHB1YmxpYyByZWdpb25hbGlzbUluZm86IEFycmF5PGFueT4gPSBbXTtcclxuXHJcblx0XHRwdWJsaWMgY29uc3RydWN0b3IoKXtcclxuXHRcdFx0dGhpcy51cGRhdGVBbGxEYXRhKCk7XHRcdFxyXG5cdFx0fVxyXG5cclxuXHRcdHB1YmxpYyB1cGRhdGVBbGxEYXRhKCl7XHJcblx0XHRcdHRoaXMudXBkYXRlVm9sdW1lRGF0YSgpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZU9yYWNsZVBhcmFtKCk7XHJcblx0XHRcdC8vdGhpcy51cGRhdGVDb2RlSW5mbygpO1xyXG5cdFx0fVxyXG5cdCAgICBwdWJsaWMgdXBkYXRlVm9sdW1lRGF0YSgpe1xyXG5cdCAgICBcdHZhciByZXN1bHQ9bnVsbDtcclxuXHQgICAgXHQkLmFqYXgoeyBcclxuXHRcdFx0XHRhc3luYzogZmFsc2UsIFxyXG5cdFx0XHRcdHR5cGUgOiBcIlBPU1RcIiwgXHJcblx0XHRcdFx0dXJsIDogXCIvamF2YS9jb25zb2xlL2FwaS92b2x1bWUvbGlzdFwiLFx0XHRcdFx0XHRcclxuXHRcdFx0XHRzdWNjZXNzIDogZnVuY3Rpb24oZGF0YSkgeyBcclxuXHRcdFx0XHQgICAgaWYoZGF0YSl7XHRcdFx0XHJcblx0XHRcdFx0XHQgICAgcmVzdWx0ID0gZGF0YTtcclxuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHR9IFxyXG5cdFx0XHR9KTtcdFx0XHRcclxuXHRcdFx0dGhpcy5jbHVzdGVyID1KU09OLnBhcnNlKHJlc3VsdCk7XHRcdFx0XHRcdFx0XHRcclxuXHQgICAgXHRmb3JtYXRWb2x1bWVzKHRoaXMuY2x1c3Rlcik7XHJcblx0XHR9XHJcblxyXG5cdFx0LypwdWJsaWMgdXBkYXRlQ29kZUluZm8oKXtcclxuXHRcdFx0XHR2YXIgcmVzdWx0PW51bGw7XHJcblx0ICAgIFx0JC5hamF4KHsgXHJcblx0XHRcdFx0YXN5bmM6IGZhbHNlLCBcclxuXHRcdFx0XHR0eXBlIDogXCJQT1NUXCIsIFxyXG5cdFx0XHRcdHVybCA6IFwiL2phdmEvY29uc29sZS9hcGkvY29kZS9saXN0XCIsXHRcdFx0XHRcdFxyXG5cdFx0XHRcdHN1Y2Nlc3MgOiBmdW5jdGlvbihkYXRhKSB7IFxyXG5cdFx0XHRcdCAgICBpZihkYXRhKXtcdFx0XHRcdCAgICBcdFx0XHJcblx0XHRcdFx0XHQgICAgcmVzdWx0ID0gZGF0YTtcclxuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHR9IFxyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5yZWdpb25hbGlzbUluZm8gPSByZXN1bHQucmVnaW9uYWxpc207XHJcblx0XHRcdHRoaXMuc3lzdGVtSW5mbyA9IHJlc3VsdC5zeXN0ZW07XHJcblx0XHR9Ki9cclxuXHJcblx0XHRwdWJsaWMgdXBkYXRlT3JhY2xlUGFyYW0oKXtcclxuXHRcdFx0dmFyIHJlc3VsdD1udWxsO1xyXG5cdFx0XHQkLmFqYXgoe1xyXG5cdFx0XHRcdGFzeW5jOiBmYWxzZSxcclxuXHRcdFx0XHR0eXBlIDogXCJQT1NUXCIsXHJcblx0XHRcdFx0dXJsIDogXCIvamF2YS9jb25zb2xlL2FwaS9vcmFjbGUvbGlzdFwiLFxyXG5cdFx0XHRcdHN1Y2Nlc3MgOiBmdW5jdGlvbihkYXRhKSB7IFxyXG5cdFx0XHRcdCAgICBpZihkYXRhKXtcdFx0XHRcdCAgICBcdFxyXG5cdFx0XHRcdFx0ICAgIHJlc3VsdCA9IGRhdGE7XHRcdFx0XHRcdCAgIFxyXG5cdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHR9IFx0XHJcblx0XHRcdH0pO1x0XHRcdFxyXG5cdFx0XHR0aGlzLm9yYWNsZVBhcmFtID0gcmVzdWx0O1x0XHRcdFxyXG5cdFx0fVxyXG5cclxuXHRcdHB1YmxpYyBnZXRGb2xkZXJCeVZvbHVtZU5hbWUobmFtZTogc3RyaW5nKXtcclxuXHRcdFx0aWYodGhpcy5jbHVzdGVyPT09bnVsbClcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0Zm9yKHZhciAgaT0wOyBpPCB0aGlzLmNsdXN0ZXIubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHRcdGlmKHRoaXMuY2x1c3RlcltpXS5uYW1lID09PSBuYW1lKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY2x1c3RlcltpXS5mb2xkZXI7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG4gICAgX21vZHVsZS5mYWN0b3J5KCdDb25maWdzTW9kZWwnLCBbJyRyb290U2NvcGUnLCAnJGh0dHAnLCAnJGxvY2F0aW9uJywgJyRyZXNvdXJjZScsICgkcm9vdFNjb3BlLCAkaHR0cCwgJGxvY2F0aW9uLCAkcmVzb3VyY2UpID0+eyAgICBcdFxyXG4gICAgXHR2YXIgJHNjb3BlID0gbmV3IENvbmZpZ3NNb2RlbFNlcnZpY2UoKTtcclxuICAgIFx0cmV0dXJuICRzY29wZTtcclxuICAgIH1dKTtcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIHZhciBsb2cgPSBMb2dnZXIuZ2V0KCdkZXZlbG9wZXItbmF2aWdhdGlvbicpO1xyXG5cclxuICBleHBvcnQgdHlwZSBMYWJlbFJlc29sdmVyID0gKCkgPT4gc3RyaW5nO1xyXG5cclxuICBleHBvcnQgaW50ZXJmYWNlIEJyZWFkY3J1bWJDb25maWcge1xyXG4gICAgICBocmVmPzogc3RyaW5nO1xyXG4gICAgICBsYWJlbD86IHN0cmluZyB8IExhYmVsUmVzb2x2ZXI7XHJcbiAgICAgIHRpdGxlPzogc3RyaW5nO1xyXG4gICAgICBjbGFzcz86IHN0cmluZztcclxuICAgICAgaXNWYWxpZD86ICgpID0+IGJvb2xlYW47XHJcbiAgICAgIGlzQWN0aXZlPzogKHN1YlRhYiwgcGF0aCkgPT4gYm9vbGVhbjtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBkZXZlbG9wQnJlYWRjcnVtYigpIDogQnJlYWRjcnVtYkNvbmZpZyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiKSxcclxuICAgICAgbGFiZWw6IFwiVGVhbXNcIixcclxuICAgICAgdGl0bGU6IFwiVmlldyBhbGwgdGhlIGF2YWlsYWJsZSB0ZWFtc1wiLFxyXG4gICAgICBpc0FjdGl2ZTogKHN1YlRhYiwgcGF0aCkgPT4gZmFsc2VcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBvcGVyYXRlQnJlYWRjcnVtYigpIDogQnJlYWRjcnVtYkNvbmZpZyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvbmFtZXNwYWNlc1wiKSxcclxuICAgICAgbGFiZWw6IFwiTWFuYWdlXCIsXHJcbiAgICAgIHRpdGxlOiBcIk1hbmFnZSB0aGUgcHJvamVjdHMgYW5kIHJlc291cmNlcyBpbnNpZGUgdGhlbVwiXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZUxpbmsoKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0TGluayhwcm9qZWN0SWQpIHtcclxuICAgIHZhciBsaW5rID0gd29ya3NwYWNlTGluaygpO1xyXG4gICAgaWYgKHByb2plY3RJZCkge1xyXG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGxpbmssIFwiL3Byb2plY3RzXCIsIHByb2plY3RJZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbGluaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2VzQnJlYWRjcnVtYnMoZGV2ZWxvcFBlcnNwZWN0aXZlPykge1xyXG4gICAgcmV0dXJuIFtkZXZlbG9wQnJlYWRjcnVtYigpXTtcclxuICB9XHJcblxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlc1N1Yk5hdkJhcnMoZGV2ZWxvcFBlcnNwZWN0aXZlKSB7XHJcbiAgICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoW1xyXG4gICAgICAgIGRldmVsb3BCcmVhZGNydW1iKCksXHJcbiAgICAgICAgb3BlcmF0ZUJyZWFkY3J1bWIoKVxyXG4gICAgICBdKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXb3Jrc3BhY2VCcmVhZGNydW1icyhjaGlsZHJlbiA9IG51bGwsIHdvcmtzcGFjZU5hbWUgPSBudWxsKSB7XHJcbiAgICB2YXIgYW5zd2VyID0gY3JlYXRlV29ya3NwYWNlc0JyZWFkY3J1bWJzKHRydWUpO1xyXG4gICAgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XHJcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAod29ya3NwYWNlTmFtZSkge1xyXG4gICAgICBhbnN3ZXIucHVzaChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlcy9cIiwgd29ya3NwYWNlTmFtZSksXHJcbiAgICAgICAgICBsYWJlbDogd29ya3NwYWNlTmFtZSxcclxuICAgICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIHByb2plY3Q6IFwiICsgd29ya3NwYWNlTmFtZSxcclxuICAgICAgICAgIGlzQWN0aXZlOiAoc3ViVGFiLCBwYXRoKSA9PiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZHJlbihhbnN3ZXIsIGNoaWxkcmVuKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudmlyb25tZW50QnJlYWRjcnVtYnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcykge1xyXG4gICAgdmFyIG5zID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgdmFyIG5hbWVzcGFjZXNMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL2t1YmVybmV0ZXMvbmFtZXNwYWNlXCIpO1xyXG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSAkcm91dGVQYXJhbXMud29ya3NwYWNlO1xyXG4gICAgdmFyIHByb2plY3QgPSAkcm91dGVQYXJhbXMucHJvamVjdDtcclxuICAgIHZhciBlbnZpcm9ubWVudCA9ICRyb3V0ZVBhcmFtcy5uYW1lc3BhY2U7XHJcbiAgICBpZiAod29ya3NwYWNlTmFtZSAmJiBwcm9qZWN0KSB7XHJcbiAgICAgIHZhciBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdCk7XHJcbiAgICAgICRzY29wZS4kcHJvamVjdExpbmsgPSBwcm9qZWN0TGluaztcclxuICAgICAgJHNjb3BlLiRwcm9qZWN0TmFtZXNwYWNlTGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJuYW1lc3BhY2VcIiwgbnMpO1xyXG4gICAgICBuYW1lc3BhY2VzTGluayA9IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCJuYW1lc3BhY2VcIik7XHJcbiAgICAgIHZhciBjaGlsZHJlbjogQXJyYXk8QnJlYWRjcnVtYkNvbmZpZz4gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcImVudmlyb25tZW50c1wiKSxcclxuICAgICAgICAgIGxhYmVsOiBcIkVudmlyb25tZW50c1wiLFxyXG4gICAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgZW52aXJvbm1lbnRzIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJhcHBzXCIpLFxyXG4gICAgICAgICAgbGFiZWw6ICgpID0+ICBlbnZpcm9ubWVudE5hbWUod29ya3NwYWNlTmFtZSwgbnMpLFxyXG4gICAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcnVudGltZSBvZiB0aGUgd29ya3NwYWNlOiBcIiArIG5zXHJcbiAgICAgICAgfVxyXG4gICAgICBdO1xyXG4gICAgICByZXR1cm4gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKHByb2plY3QsIGNoaWxkcmVuLCB3b3Jrc3BhY2VOYW1lKTtcclxuICAgIH0gZWxzZSBpZiAod29ya3NwYWNlTmFtZSAmJiBlbnZpcm9ubWVudCAmJiB3b3Jrc3BhY2VOYW1lICE9IGVudmlyb25tZW50KSB7XHJcbiAgICAgIC8vIGZpbmQgbGFiZWwgZm9yIG5hbWVzcGFjZSBlbnZpcm9ubWVudFxyXG4gICAgICB2YXIgY2hpbGRyZW46IEFycmF5PEJyZWFkY3J1bWJDb25maWc+ID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhyZWY6IGVudmlyb25tZW50c0xpbmsod29ya3NwYWNlTmFtZSksXHJcbiAgICAgICAgICBsYWJlbDogXCJFbnZpcm9ubWVudHNcIixcclxuICAgICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGVudmlyb25tZW50cyBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhyZWY6IGVudmlyb25tZW50TGluayh3b3Jrc3BhY2VOYW1lLCBlbnZpcm9ubWVudCksXHJcbiAgICAgICAgICBsYWJlbDogKCkgPT4gIGVudmlyb25tZW50TmFtZSh3b3Jrc3BhY2VOYW1lLCBlbnZpcm9ubWVudCksXHJcbiAgICAgICAgICB0aXRsZTogXCJWaWV3IHRoaXMgZW52aXJvbm1lbnRcIlxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgICAgcmV0dXJuIGNyZWF0ZVByb2plY3RCcmVhZGNydW1icyhwcm9qZWN0LCBjaGlsZHJlbiwgd29ya3NwYWNlTmFtZSk7XHJcbiAgICB9IGVsc2UgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XHJcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgYW5zd2VyID0gY3JlYXRlV29ya3NwYWNlQnJlYWRjcnVtYnMod29ya3NwYWNlTmFtZSk7XHJcbiAgICBhbnN3ZXIucHVzaCh7XHJcbiAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIndvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJuYW1lc3BhY2VcIiwgbnMsIFwiYXBwc1wiKSxcclxuICAgICAgbGFiZWw6ICdSdW50aW1lJyxcclxuICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcnVudGltZSBvZiB0aGUgd29ya3NwYWNlOiBcIiArIG5zXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoYW5zd2VyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGdpdmVuIGVudmlyb25tZW50IG5hbWVzcGFjZVxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGVudmlyb25tZW50TmFtZSh3b3Jrc3BhY2VOYW1lLCBlbnZpcm9ubWVudCkge1xyXG4gICAgLyp2YXIgbW9kZWwgPSBLdWJlcm5ldGVzLmdldEt1YmVybmV0ZXNNb2RlbCgpO1xyXG4gICAgaWYgKG1vZGVsKSB7XHJcbiAgICAgIHJldHVybiBtb2RlbC5lbnZpcm9ubWVudE5hbWUod29ya3NwYWNlTmFtZSwgZW52aXJvbm1lbnQpO1xyXG4gICAgfSovXHJcbiAgICByZXR1cm4gZW52aXJvbm1lbnQ7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKHByb2plY3ROYW1lID0gbnVsbCwgY2hpbGRyZW46IEFycmF5PEJyZWFkY3J1bWJDb25maWc+ID0gbnVsbCwgd29ya3NwYWNlTmFtZSA9IG51bGwpIHtcclxuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xyXG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgdmFyIGFuc3dlciA9IGNyZWF0ZVdvcmtzcGFjZUJyZWFkY3J1bWJzKG51bGwsIHdvcmtzcGFjZU5hbWUpO1xyXG4gICAgaWYgKHdvcmtzcGFjZU5hbWUpIHtcclxuICAgICAgaWYgKHByb2plY3ROYW1lKSB7XHJcbiAgICAgICAgYW5zd2VyLnB1c2goXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGhyZWY6IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiksXHJcbiAgICAgICAgICAgIGxhYmVsOiBcIkFwcHNcIixcclxuICAgICAgICAgICAgdGl0bGU6IFwiVmlldyBhbGwgdGhlIGFwcHMgaW4gdGhpcyBwcm9qZWN0XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBhbnN3ZXIucHVzaChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSksXHJcbiAgICAgICAgICAgIGxhYmVsOiBwcm9qZWN0TmFtZSxcclxuICAgICAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcHJvamVjdDogXCIgKyBwcm9qZWN0TmFtZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHByb2Nlc3NDaGlsZHJlbihhbnN3ZXIsIGNoaWxkcmVuKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2plY3RTZXR0aW5nc0JyZWFkY3J1bWJzKHByb2plY3ROYW1lLCB3b3Jrc3BhY2VOYW1lID0gbnVsbCkge1xyXG4gICAgdmFyIGNoaWxkcmVuID0gW107XHJcbiAgICBpZiAoIXByb2plY3ROYW1lKSB7XHJcbiAgICAgIGNoaWxkcmVuID0gW3tcclxuICAgICAgICBsYWJlbDogXCJOZXcgQXBwXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiTGV0cyBtYWtlIGEgbmV3IGFwcFwiXHJcbiAgICAgIH1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZVByb2plY3RCcmVhZGNydW1icyhwcm9qZWN0TmFtZSwgY2hpbGRyZW4sIHdvcmtzcGFjZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZVN1Yk5hdkJhcnMoKSB7XHJcbiAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoW1xyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSksXHJcbiAgICAgICAgbGFiZWw6IFwiRGFzaGJvYXJkXCIsXHJcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtdGFjaG9tZXRlclwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGRhc2hib2FyZCBmb3IgdGhlIGFwcHMsIGVudmlyb25tZW50cyBhbmQgcGlwZWxpbmVzIGluIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcImFwcHNcIiksXHJcbiAgICAgICAgbGFiZWw6IFwiQXBwc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLXJvY2tldFwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGFwcHMgaW4gdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IGplbmtpbnNMaW5rKCksXHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJqZW5raW5zSm9iXCIpLFxyXG4gICAgICAgIGxhYmVsOiBcIkJ1aWxkc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWNvZGVcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBidWlsZHMgaW4gdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IGVudmlyb25tZW50c0xpbmsoKSxcclxuICAgICAgICBsYWJlbDogXCJFbnZpcm9ubWVudHNcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1jdWJlc1wiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGVudmlyb25tZW50cyBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IG5hbWVzcGFjZVJ1bnRpbWVMaW5rKHdvcmtzcGFjZU5hbWUpLFxyXG4gICAgICAgIGxhYmVsOiBcIlJ1bnRpbWVcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1jdWJlXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgUnVudGltZSBwZXJzcGVjdGl2ZSBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfVxyXG4vKlxyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJkZXRhaWxcIiksXHJcbiAgICAgICAgbGFiZWw6IFwiRGV0YWlsc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWdlYXJcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBwcm9qZWN0IGRldGFpbHNcIlxyXG4gICAgICB9XHJcbiovXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2VSdW50aW1lTGluayh3b3Jrc3BhY2VOYW1lID0gbnVsbCkge1xyXG4gICAgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XHJcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwid29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcIm5hbWVzcGFjZVwiLCB3b3Jrc3BhY2VOYW1lLCBcImFwcHNcIik7XHJcbiAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIGNyZWF0ZUJ1aWxkc0xpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCkge1xyXG4gICAgd29ya3NwYWNlTmFtZSA9IHdvcmtzcGFjZU5hbWUgfHwgS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIFwiamVua2luc0pvYlwiLCBqZW5raW5zSm9iSWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIHJvdXRpbmcgZnVuY3Rpb24gdGhhdCBsb2FkcyBhIHRlbXBsYXRlIGFuZCBpbmplY3QgdGhlIG5lZWRlZCBkaXJlY3RpdmVzIHRvIHByb3Blcmx5XHJcbiAgICogZGlzcGxheS91cGRhdGUgdGhlIERldmVsb3BlciBtb2R1bGUgbWFuYWdlZCB0YWJzIGFuZCBicmVhZCBjcnVtYnMgZm9yIHdoZW4gdGhlIHJvdXRlIGlzIGFjdGl2ZS5cclxuICAgKlxyXG4gICAqIEV4YW1wbGUgVXNhZ2U6XHJcbiAgICpcclxuICAgKiB2YXIgcm91dGUgPSBEZXZlbG9wZXIuY3JlYXRlVGFiUm91dGluZ0Z1bmN0aW9uKFwiL2FwcC9zb21lZGlyXCIpO1xyXG4gICAqICRyb3V0ZVByb3ZpZGVyLndoZW4oJy9wcm9maWxlcycsIHJvdXRlKCd2aWV3Lmh0bWwnLCBmYWxzZSwgW3tcclxuICAgKiAgICAgbGFiZWw6IFwiUHJvZmlsZXNcIixcclxuICAgKiAgICAgdGl0bGU6IFwiQnJvd3NlIHRoZSBwcm9maWxlcyBvZiB0aGlzIHByb2plY3RcIlxyXG4gICAqICAgfV1cclxuICAgKiApKTtcclxuICAgKlxyXG4gICAqIEBwYXJhbSBiYXNlVVJMXHJcbiAgICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgYm9vbGVhbj0sIEFycmF5PERldmVsb3Blci5CcmVhZGNydW1iQ29uZmlnPj0pOiB7dGVtcGxhdGU6IHN0cmluZywgcmVsb2FkT25TZWFyY2g6IGJvb2xlYW4sIGNvbnRyb2xsZXI6IHN0cmluZ3xzdHJpbmd8KGZ1bmN0aW9uKGFueSwgbmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSk6IHVuZGVmaW5lZClbXX19XHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYlJvdXRpbmdGdW5jdGlvbihiYXNlVVJMOnN0cmluZykge1xyXG4gICAgcmV0dXJuICh0ZW1wbGF0ZU5hbWU6c3RyaW5nLCByZWxvYWRPblNlYXJjaDpib29sZWFuID0gdHJ1ZSwgY2hpbGRyZW4/OiBBcnJheTxEZXZlbG9wZXIuQnJlYWRjcnVtYkNvbmZpZz4pID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0ZW1wbGF0ZTogXCI8ZGl2IGhhd3Rpby1icmVhZGNydW1icz48L2Rpdj48ZGl2IGhhd3Rpby10YWJzPjwvZGl2PjxuZy1pbmNsdWRlIHNyYz0nY29udGVudFRlbXBsYXRlVXJsJz48L25nLWluY2x1ZGU+XCIsXHJcbiAgICAgICAgcmVsb2FkT25TZWFyY2g6IHJlbG9hZE9uU2VhcmNoLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IFtcIiRzY29wZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCAoJHNjb3BlLCAkcm91dGVQYXJhbXM6bmcucm91dGUuSVJvdXRlUGFyYW1zU2VydmljZSkgPT4ge1xyXG4gICAgICAgICAgaWYoICRyb3V0ZVBhcmFtc1tcIm5hbWVzcGFjZVwiXT09bnVsbCApIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKFwiVGhlIDpuYW1lc3BhY2Ugcm91dGUgcGFyYW1ldGVyIHdhcyBub3QgZGVmaW5lZCBmb3IgdGhlIHJvdXRlLlwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKCAkcm91dGVQYXJhbXNbXCJwcm9qZWN0SWRcIl0gPT0gbnVsbCApIHtcclxuICAgICAgICAgICAgbG9nLmVycm9yKFwiVGhlIDpwcm9qZWN0SWQgcm91dGUgcGFyYW1ldGVyIHdhcyBub3QgZGVmaW5lZCBmb3IgdGhlIHJvdXRlLlwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICRzY29wZS5uYW1lc3BhY2UgPSAkcm91dGVQYXJhbXNbXCJuYW1lc3BhY2VcIl07XHJcbiAgICAgICAgICAkc2NvcGUucHJvamVjdElkID0gJHJvdXRlUGFyYW1zW1wicHJvamVjdElkXCJdO1xyXG4gICAgICAgICAgJHNjb3BlLmNvbnRlbnRUZW1wbGF0ZVVybCA9IFVybEhlbHBlcnMuam9pbihiYXNlVVJMLCB0ZW1wbGF0ZU5hbWUpO1xyXG4gICAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5wcm9qZWN0SWQsIGNoaWxkcmVuKTtcclxuICAgICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLnByb2plY3RJZCk7XHJcbiAgICAgICAgfV1cclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0U3ViTmF2QmFycyhwcm9qZWN0TmFtZSwgamVua2luc0pvYklkID0gbnVsbCwgJHNjb3BlID0gbnVsbCkge1xyXG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lKTtcclxuICAgIHZhciBidWlsZHNMaW5rID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcImJ1aWxkc1wiKTtcclxuICAgIGlmICghamVua2luc0pvYklkKSB7XHJcbiAgICAgIGplbmtpbnNKb2JJZCA9IHByb2plY3ROYW1lO1xyXG4gICAgfVxyXG4gICAgdmFyIGplbmtpbnNCdWlsZExpbmsgPSBudWxsO1xyXG4gICAgdmFyIHBpcGVsaW5lc0xpbmsgPSBudWxsO1xyXG4gICAgaWYgKHByb2plY3ROYW1lICYmIGplbmtpbnNKb2JJZCkge1xyXG4gICAgICBqZW5raW5zQnVpbGRMaW5rID0gY3JlYXRlQnVpbGRzTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgamVua2luc0pvYklkKTtcclxuICAgICAgcGlwZWxpbmVzTGluayA9IFVybEhlbHBlcnMuam9pbihqZW5raW5zQnVpbGRMaW5rLCBcInBpcGVsaW5lc1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpc0plbmtpbnNCdWlsZCgpIHtcclxuICAgICAgdmFyIGFuc3dlciA9IGplbmtpbnNMaW5rKCkgJiYgamVua2luc0J1aWxkTGluaztcclxuICAgICAgaWYgKGFuc3dlciAmJiAkc2NvcGUpIHtcclxuICAgICAgICB2YXIgZW50aXR5ID0gRGV2ZWxvcGVyLnByb2plY3RGb3JTY29wZSgkc2NvcGUpO1xyXG4gICAgICAgIGlmIChlbnRpdHkpIHtcclxuICAgICAgICAgIHJldHVybiBhbnN3ZXIgJiYgZW50aXR5LiRqZW5raW5zSm9iO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBhbnN3ZXIgPSBbXHJcbiAgICAgIC8qXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lKSxcclxuICAgICAgICBsYWJlbDogXCJBbGwgQXBwc1wiLFxyXG4gICAgICAgIGNsYXNzOiAnZmEgZmEtYW5nbGUtZG91YmxlLWxlZnQnLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGFwcHMgaW4gdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRlbXBsYXRlOiBgPGRpdiBuZy1pbmNsdWRlPVwiJ3BsdWdpbnMvZGV2ZWxvcGVyL2h0bWwvcHJvamVjdFNlbGVjdG9yLmh0bWwnXCI+PC9kaXY+YFxyXG4gICAgICB9LFxyXG4qL1xyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJlbnZpcm9ubWVudHNcIiksXHJcbiAgICAgICAgaXNBY3RpdmU6IChzdWJUYWIsIHBhdGgpID0+IHtcclxuICAgICAgICAgIHZhciBocmVmID0gbm9ybWFsaXplSHJlZihzdWJUYWIuaHJlZik7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwic3ViVGFiOiBcIiwgc3ViVGFiLCBcIiBwYXRoOiBcIiwgcGF0aCk7XHJcbiAgICAgICAgICBpZiAocGF0aCA9PT0gaHJlZikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhciByb290UGF0aCA9IGhyZWYucmVwbGFjZSgvXFwvZW52aXJvbm1lbnRzLywgJycpO1xyXG4gICAgICAgICAgaWYgKHBhdGggPT09IHJvb3RQYXRoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy9ocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lKSxcclxuICAgICAgICBsYWJlbDogXCJEYXNoYm9hcmRcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS10YWNob21ldGVyXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgYXBwIGRhc2hib2FyZCBmb3IgdGhlIGFjdGl2aXR5LCBlbnZpcm9ubWVudHMgYW5kIHBpcGVsaW5lc1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpc1ZhbGlkOiAoKSA9PiBpc0plbmtpbnNCdWlsZCgpICYmIHBpcGVsaW5lc0xpbmssXHJcbiAgICAgICAgaWQ6IFwicGlwZWxpbmVzXCIsXHJcbiAgICAgICAgaHJlZjogcGlwZWxpbmVzTGluayxcclxuICAgICAgICBsYWJlbDogXCJQaXBlbGluZXNcIixcclxuICAgICAgICBjbGFzczogXCJmYSBmYS1lbGxpcHNpcy1oXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgcGlwZWxpbmUgYnVpbGRzIGZvciB0aGlzIGFwcFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpc1ZhbGlkOiAoKSA9PiAhaXNKZW5raW5zQnVpbGQoKSxcclxuICAgICAgICBocmVmOiBidWlsZHNMaW5rLFxyXG4gICAgICAgIGxhYmVsOiBcIkJ1aWxkc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWJhcnNcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBidWlsZHMgZm9yIHRoaXMgYXBwXCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IGlzSmVua2luc0J1aWxkKCksXHJcbiAgICAgICAgaXNBY3RpdmU6IChpdGVtLCBwYXRoKSA9PiB7XHJcbiAgICAgICAgICBpZiAocGF0aC5pbmRleE9mKCcvbG9nLycpID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocGF0aC5pbmRleE9mKCcvamVua2luc0pvYi8nKSA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpZDogXCJidWlsZHNcIixcclxuICAgICAgICBocmVmOiBqZW5raW5zQnVpbGRMaW5rLFxyXG4gICAgICAgIGxhYmVsOiBcIkJ1aWxkc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWJhcnNcIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBKZW5raW5zIGJ1aWxkcyBmb3IgdGhpcyBhcHBcIlxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaXNWYWxpZDogKCkgPT4gaXNKZW5raW5zQnVpbGQoKSxcclxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcImplbmtpbnNKb2JcIiwgamVua2luc0pvYklkLCBcIm1ldHJpY3NcIiksXHJcbiAgICAgICAgbGFiZWw6IFwiTWV0cmljc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWJhci1jaGFydFwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIG1ldHJpY3MgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbi8qXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcInRvb2xzXCIpLFxyXG4gICAgICAgIGxhYmVsOiBcIlRvb2xzXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgdG9vbHMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbiovXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcImJ1aWxkQ29uZmlnRWRpdFwiKSxcclxuICAgICAgICBsYWJlbDogXCJTZXR0aW5nc1wiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWNvZ1wiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGFwcCBjb25maWd1cmF0aW9uXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IChzdWJUYWIsIHBhdGgpID0+IHtcclxuICAgICAgICAgIGlmIChfLmVuZHNXaXRoKHBhdGgsICcvYnVpbGRDb25maWdFZGl0JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXy5lbmRzV2l0aChwYXRoLCAnL2ZvcmdlL3NlY3JldHMnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChfLmVuZHNXaXRoKHBhdGgsICcvZm9yZ2UvY29tbWFuZC9kZXZvcHMtZWRpdCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICB2YXIgY29udGV4dCA9IHtcclxuICAgICAgd29ya3NwYWNlTmFtZTogd29ya3NwYWNlTmFtZSxcclxuICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lLFxyXG4gICAgICBwcm9qZWN0TGluazogcHJvamVjdExpbmssXHJcbiAgICAgIGplbmtpbnNKb2JJZDogamVua2luc0pvYklkLFxyXG4gICAgICAkc2NvcGU6ICRzY29wZVxyXG4gICAgfTtcclxuICAgIGFuZ3VsYXIuZm9yRWFjaChjdXN0b21Qcm9qZWN0U3ViVGFiRmFjdG9yaWVzLCAoZm4pID0+IHtcclxuICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihmbikpIHtcclxuICAgICAgICB2YXIgc3VidGFiID0gZm4oY29udGV4dCk7XHJcbiAgICAgICAgaWYgKHN1YnRhYikge1xyXG4gICAgICAgICAgaWYgKGFuZ3VsYXIuaXNBcnJheShzdWJ0YWIpKSB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzdWJ0YWIsICh0KSA9PiB7XHJcbiAgICAgICAgICAgICAgYW5zd2VyLnB1c2godCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYW5zd2VyLnB1c2goc3VidGFiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhY3RpdmF0ZUN1cnJlbnQoYW5zd2VyKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0U2V0dGluZ3NTdWJOYXZCYXJzKHByb2plY3ROYW1lLCBqZW5raW5zSm9iSWQgPSBudWxsKSB7XHJcbiAgICBpZiAoIXByb2plY3ROYW1lKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgdmFyIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSk7XHJcbiAgICBpZiAoIWplbmtpbnNKb2JJZCkge1xyXG4gICAgICBqZW5raW5zSm9iSWQgPSBwcm9qZWN0TmFtZTtcclxuICAgIH1cclxuICAgIHZhciBhbnN3ZXIgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBocmVmOiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcImJ1aWxkQ29uZmlnRWRpdFwiKSxcclxuICAgICAgICBsYWJlbDogXCJDb3JlXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgY29yZSBidWlsZCBjb25maWd1cmF0aW9uXCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IHByb2plY3RTZWNyZXRzTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSksXHJcbiAgICAgICAgbGFiZWw6IFwiU2VjcmV0c1wiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgb3IgY2hhbmdlIHRoZSBzZWNyZXRzIHVzZWQgdG8gZWRpdCBzb3VyY2UgY29kZSBpbiB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtXCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhyZWY6IGVkaXRQaXBlbGluZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpLFxyXG4gICAgICAgIGxhYmVsOiBcIlBpcGVsaW5lXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgRGV2T3BzIGFuZCBwaXBlbGluZSBjb25maWd1cmF0aW9uXCJcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlzVmFsaWQ6ICgpID0+IGZvcmdlUHJvamVjdEhhc0J1aWxkZXIoXCJtYXZlblwiKSxcclxuICAgICAgICBocmVmOiBlZGl0TWF2ZW5CdWlsZExpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpLFxyXG4gICAgICAgIGxhYmVsOiBcIk1hdmVuXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgTWF2ZW4gYnVpbGQgY29uZmlndXJhdGlvblwiXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KGFuc3dlcik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZm9yZ2VQcm9qZWN0SGFzQnVpbGRlcihuYW1lKSB7XHJcbiAgICB2YXIgZm9yZ2VQcm9qZWN0ID0gS3ViZXJuZXRlcy5pbmplY3Q8YW55PihcIkZvcmdlUHJvamVjdFwiKTtcclxuICAgIGlmIChmb3JnZVByb2plY3QpIHtcclxuICAgICAgcmV0dXJuIGZvcmdlUHJvamVjdC5oYXNCdWlsZGVyKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGZvcmdlUHJvamVjdEhhc1BlcnNwZWN0aXZlKG5hbWUpIHtcclxuICAgIHZhciBmb3JnZVByb2plY3QgPSBLdWJlcm5ldGVzLmluamVjdDxhbnk+KFwiRm9yZ2VQcm9qZWN0XCIpO1xyXG4gICAgaWYgKGZvcmdlUHJvamVjdCkge1xyXG4gICAgICByZXR1cm4gZm9yZ2VQcm9qZWN0Lmhhc1BlcnNwZWN0aXZlKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVkaXRQaXBlbGluZUxpbmtTY29wZSgkc2NvcGUpIHtcclxuICAgIHJldHVybiBlZGl0UGlwZWxpbmVMaW5rKCRzY29wZS5uYW1lc3BhY2UsICRzY29wZS5wcm9qZWN0SWQgfHwgJHNjb3BlLnByb2plY3ROYW1lIHx8ICRzY29wZS5wcm9qZWN0KTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9qZWN0TGluayh3b3Jrc3BhY2VOYW1lID0gbnVsbCkge1xyXG4gICAgaWYgKCF3b3Jrc3BhY2VOYW1lKSB7XHJcbiAgICAgIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEhhd3Rpb0NvcmUuZG9jdW1lbnRCYXNlKCksIFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCIvZm9yZ2UvY3JlYXRlUHJvamVjdFwiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlZGl0UGlwZWxpbmVMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSB7XHJcbiAgICByZXR1cm4gcHJvamVjdFdvcmtzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIFwiZm9yZ2UvY29tbWFuZC9kZXZvcHMtZWRpdFwiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlZGl0TWF2ZW5CdWlsZExpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUpIHtcclxuICAgIHJldHVybiBwcm9qZWN0V29ya3NwYWNlTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgXCJmb3JnZS9jb21tYW5kL2ZhYnJpYzgtc2V0dXBcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gcHJvamVjdFNlY3JldHNMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lKSB7XHJcbiAgICByZXR1cm4gcHJvamVjdFdvcmtzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIFwiZm9yZ2Uvc2VjcmV0c1wiLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc2VjcmV0c05hbWVzcGFjZUxpbmsod29ya3NwYWNlTmFtZSwgcHJvamVjdE5hbWUsIHNlY3JldHNOYW1lc3BhY2UpIHtcclxuICAgIHZhciBwcmVmaXggPSBwcm9qZWN0V29ya3NwYWNlTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgXCJcIikgfHwgXCJrdWJlcm5ldGVzXCI7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKHByZWZpeCwgXCJuYW1lc3BhY2VcIiwgc2VjcmV0c05hbWVzcGFjZSwgXCJzZWNyZXRzXCIpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHByb2plY3RXb3Jrc3BhY2VMaW5rKHdvcmtzcGFjZU5hbWUsIHByb2plY3ROYW1lLCBwYXRoLCBpZ25vcmVCbGFua1Byb2plY3QgPSB0cnVlKSB7XHJcbiAgICBpZiAoaWdub3JlQmxhbmtQcm9qZWN0ICYmICFwcm9qZWN0TmFtZSkge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xyXG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdE5hbWUsIHBhdGgpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVudmlyb25tZW50c0xpbmsod29ya3NwYWNlTmFtZSA9IG51bGwpIHtcclxuICAgIGlmICghd29ya3NwYWNlTmFtZSkge1xyXG4gICAgICB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwiZW52aXJvbm1lbnRzXCIpXHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW52aXJvbm1lbnRMaW5rKHdvcmtzcGFjZU5hbWUsIGVudmlyb25tZW50TmFtZXNwYWNlLCBwYXRoID0gXCJcIiwgaWdub3JlQmxhbmtQcm9qZWN0ID0gdHJ1ZSkge1xyXG4gICAgaWYgKGlnbm9yZUJsYW5rUHJvamVjdCAmJiAhZW52aXJvbm1lbnROYW1lc3BhY2UpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAoIXdvcmtzcGFjZU5hbWUpIHtcclxuICAgICAgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcIm5hbWVzcGFjZVwiLCBlbnZpcm9ubWVudE5hbWVzcGFjZSwgcGF0aCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgdmFyIGN1c3RvbVByb2plY3RTdWJUYWJGYWN0b3JpZXMgPSBbXTtcclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUplbmtpbnNCcmVhZGNydW1icyhwcm9qZWN0TmFtZSwgam9iSWQsIGJ1aWxkSWQpIHtcclxuICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgdmFyIGNoaWxkcmVuID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IFwiYnVpbGRzXCIsXHJcbiAgICAgICAgaHJlZjogY3JlYXRlQnVpbGRzTGluayh3b3Jrc3BhY2VOYW1lLCBwcm9qZWN0TmFtZSwgam9iSWQpLFxyXG4gICAgICAgIGxhYmVsOiBcIkJ1aWxkc1wiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIGJ1aWxkcyBmb3IgdGhpcyBhcHBcIlxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gICAgaWYgKGJ1aWxkSWQpIHtcclxuICAgICAgY2hpbGRyZW4ucHVzaCh7XHJcbiAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgaHJlZjogXCJcIixcclxuICAgICAgICBsYWJlbDogXCIjXCIgKyBidWlsZElkLFxyXG4gICAgICAgIHRpdGxlOiBcIkJ1aWxkICNcIiArIGJ1aWxkSWRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKHByb2plY3ROYW1lLCBjaGlsZHJlbik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSmVua2luc1N1Yk5hdkJhcnMocHJvamVjdE5hbWUsIGplbmtpbnNKb2JJZCwgYnVpbGRJZCwgZXh0cmFPcHRpb246IGFueSA9IG51bGwpIHtcclxuICAgIHZhciBhbnN3ZXIgPSBjcmVhdGVQcm9qZWN0U3ViTmF2QmFycyhwcm9qZWN0TmFtZSwgamVua2luc0pvYklkKTtcclxuICAgIGlmIChleHRyYU9wdGlvbikge1xyXG4gICAgICAvLyBleHRyYU9wdGlvbi5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICBhbnN3ZXIucHVzaChleHRyYU9wdGlvbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYW5zd2VyO1xyXG4gIH1cclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnZpcm9ubWVudFN1Yk5hdkJhcnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcykge1xyXG4gICAgdmFyIG5zID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSAkcm91dGVQYXJhbXMud29ya3NwYWNlO1xyXG4gICAgdmFyIHByb2plY3QgPSAkcm91dGVQYXJhbXMucHJvamVjdDtcclxuICAgIHZhciBlbnZpcm9ubWVudCA9ICRyb3V0ZVBhcmFtcy5uYW1lc3BhY2U7XHJcbiAgICB2YXIgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIva3ViZXJuZXRlc1wiKTtcclxuICAgIC8qY29uc29sZS5sb2coXCI9PT09PT09PT09PT09PT09PT09PT1cIilcclxuICAgIGNvbnNvbGUubG9nKHByb2plY3RMaW5rKTtcclxuICAgIGlmICh3b3Jrc3BhY2VOYW1lICYmIHByb2plY3QpIHtcclxuICAgICAgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIva3ViZXJuZXRlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcHJvamVjdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgXCIva3ViZXJuZXRlc1wiLCB3b3Jrc3BhY2VOYW1lIHx8IG5zKTtcclxuICAgIH0qL1xyXG4gICAgdmFyIG5hbWVzcGFjZXNMaW5rID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcIm5hbWVzcGFjZVwiKTsgICAgXHJcbiAgICByZXR1cm4gYWN0aXZhdGVDdXJyZW50KFsgICAgIFxyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIpLFxyXG4gICAgICAgIGxhYmVsOiBcIuacjeWKoeeuoeeQhlwiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLWNsb25lXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiVmlldyB0aGUgUmVwbGljYXMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sICAgICBcclxuICAgICAgLyp7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKG5hbWVzcGFjZXNMaW5rLCBucywgXCJldmVudHNcIiksXHJcbiAgICAgICAgbGFiZWw6IFwi5pel5b+X5L+h5oGvXCIsXHJcbiAgICAgICAgY2xhc3M6IFwiZmEgZmEtbmV3c3BhcGVyLW9cIixcclxuICAgICAgICB0aXRsZTogXCJWaWV3IHRoZSBldmVudHMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFxyXG4gICAgICB7XHJcbiAgICAgICAgaHJlZjogVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcImhvc3RzXCIpLFxyXG4gICAgICAgIGxhYmVsOiBcIumbhue+pOiKgueCuVwiLFxyXG4gICAgICAgIGNsYXNzOiBcImZhIGZhLXNlcnZlclwiLFxyXG4gICAgICAgIHRpdGxlOiBcIlZpZXcgdGhlIG5vZGVzIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICB9ICovICAgIFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW52aXJvbm1lbnRJbnN0YW5jZUxpbmsoZW52LCBwcm9qZWN0TmFtZSA9IG51bGwpIHtcclxuICAgIGlmIChlbnYpIHtcclxuICAgICAgdmFyIGVudk5hbWVzcGFjZSA9IGVudltcIm5hbWVzcGFjZVwiXTtcclxuICAgICAgaWYgKGVudk5hbWVzcGFjZSkge1xyXG4gICAgICAgIGlmIChwcm9qZWN0TmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0TmFtZSwgXCJuYW1lc3BhY2VcIiwgZW52TmFtZXNwYWNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSwgXCJuYW1lc3BhY2VcIiwgZW52TmFtZXNwYWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2VMaW5rKCRzY29wZSwgJHJvdXRlUGFyYW1zLCBwYXRoID0gbnVsbCkge1xyXG4gICAgdmFyIG5zID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgdmFyIHdvcmtzcGFjZU5hbWUgPSAkcm91dGVQYXJhbXMud29ya3NwYWNlO1xyXG4gICAgdmFyIHByb2plY3QgPSAkcm91dGVQYXJhbXMucHJvamVjdDtcclxuICAgIHZhciBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi9rdWJlcm5ldGVzXCIpO1xyXG4gICAgaWYgKHdvcmtzcGFjZU5hbWUgJiYgcHJvamVjdCkge1xyXG4gICAgICBwcm9qZWN0TGluayA9IFVybEhlbHBlcnMuam9pbihIYXd0aW9Db3JlLmRvY3VtZW50QmFzZSgpLCBcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcIm5hbWVzcGFjZVwiLCBucywgcGF0aCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIHRoZSBVUkwgcXVlcnkgc3RyaW5nIGlmIGl0cyBpbnNpZGUgdGhlIGdpdmVuIHRleHRcclxuICAgKi9cclxuICBmdW5jdGlvbiB0cmltUXVlcnkodGV4dCkge1xyXG4gICAgaWYgKHRleHQpIHtcclxuICAgICAgdmFyIGlkeCA9IHRleHQuaW5kZXhPZihcIj9cIik7XHJcbiAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZygwLCBpZHgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcblxyXG4gIC8vIENhdGVyIGZvciB0aGUgYXBwIHJ1bm5pbmcgYXQgc29tZSB3ZWlyZCBkb2N1bWVudCBiYXNlXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUhyZWYoaHJlZjpzdHJpbmcpIHtcclxuICAgIGlmICghaHJlZikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHZhciByZWdleCA9IG5ldyBSZWdFeHAoJ14nICsgSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKS5yZXBsYWNlKCcvJywgJ1xcXFwvJykpO1xyXG4gICAgcmV0dXJuIGhyZWYucmVwbGFjZShyZWdleCwgJy8nKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBhY3RpdmF0ZUN1cnJlbnQobmF2QmFySXRlbXMpIHtcclxuICAgIG5hdkJhckl0ZW1zID0gXy5jb21wYWN0KG5hdkJhckl0ZW1zKTtcclxuICAgIHZhciBpbmplY3RvciA9IEhhd3Rpb0NvcmUuaW5qZWN0b3I7XHJcbiAgICB2YXIgJGxvY2F0aW9uID0gaW5qZWN0b3IgPyBpbmplY3Rvci5nZXQ8bmcuSUxvY2F0aW9uU2VydmljZT4oXCIkbG9jYXRpb25cIikgOiBudWxsO1xyXG4gICAgaWYgKCRsb2NhdGlvbikge1xyXG4gICAgICB2YXIgcGF0aCA9IG5vcm1hbGl6ZUhyZWYodHJpbVF1ZXJ5KCRsb2NhdGlvbi5wYXRoKCkpKTtcclxuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XHJcbiAgICAgIGZ1bmN0aW9uIG1ha2VBY3RpdmUoaXRlbSkge1xyXG4gICAgICAgIGl0ZW0uYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICBmb3VuZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgZnVuY3Rpb24gZ2V0SHJlZihpdGVtKSB7XHJcbiAgICAgICAgdmFyIGhyZWYgPSBpdGVtLmhyZWY7XHJcbiAgICAgICAgdmFyIHRyaW1IcmVmID0gdHJpbVF1ZXJ5KGhyZWYpO1xyXG4gICAgICAgIHJldHVybiBub3JtYWxpemVIcmVmKHRyaW1IcmVmKTtcclxuICAgICAgfVxyXG4gICAgICBhbmd1bGFyLmZvckVhY2gobmF2QmFySXRlbXMsIChpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKCFmb3VuZCAmJiBpdGVtKSB7XHJcbiAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKGl0ZW0uaXNBY3RpdmUpKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmlzQWN0aXZlKGl0ZW0sIHBhdGgpKSB7XHJcbiAgICAgICAgICAgICAgbWFrZUFjdGl2ZShpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIHRyaW1IcmVmID0gZ2V0SHJlZihpdGVtKTtcclxuICAgICAgICAgICAgaWYgKCF0cmltSHJlZikge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHJpbUhyZWYgPT09IHBhdGgpIHtcclxuICAgICAgICAgICAgICBtYWtlQWN0aXZlKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgLy8gTWF5YmUgaXQncyBhIHN1Yi1pdGVtIG9mIGEgdGFiLCBsZXQncyBmYWxsIGJhY2sgdG8gdGhhdCBtYXliZVxyXG4gICAgICBpZiAoIWZvdW5kKSB7XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKG5hdkJhckl0ZW1zLCAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFmb3VuZCkge1xyXG4gICAgICAgICAgICBpZiAoIWFuZ3VsYXIuaXNGdW5jdGlvbihpdGVtLmlzQWN0aXZlKSkge1xyXG4gICAgICAgICAgICAgIHZhciB0cmltSHJlZiA9IGdldEhyZWYoaXRlbSk7XHJcbiAgICAgICAgICAgICAgaWYgKCF0cmltSHJlZikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoXy5zdGFydHNXaXRoKHBhdGgsIHRyaW1IcmVmKSkge1xyXG4gICAgICAgICAgICAgICAgbWFrZUFjdGl2ZShpdGVtKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBzdGlsbCBub3QgZm91bmQsIGxldCdzIGxvZyBpdFxyXG4gICAgICBpZiAoIWZvdW5kKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiTm8gbmF2aWdhdGlvbiB0YWIgZm91bmQgZm9yIHBhdGg6XCIsIHBhdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmF2QmFySXRlbXM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwcm9jZXNzQ2hpbGRyZW4oYW5zd2VyLCBjaGlsZHJlbikge1xyXG4gICAgaWYgKGNoaWxkcmVuKSB7XHJcbiAgICAgIGlmIChhbmd1bGFyLmlzQXJyYXkoY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgYW5zd2VyID0gYW5zd2VyLmNvbmNhdChjaGlsZHJlbik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYW5zd2VyLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhY3RpdmF0ZUN1cnJlbnQoYW5zd2VyKTtcclxuICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgfVxyXG59XHJcbiIsIm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IGNsYXNzIGNvbnN0cyB7XHJcbiAgICBnZXQgTkFNRVNQQUNFX1NUT1JBR0VfS0VZKCk6c3RyaW5nIHsgcmV0dXJuIFwiazhzU2VsZWN0ZWROYW1lc3BhY2VcIjsgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IHZhciBDb25zdGFudHMgPSBuZXcgY29uc3RzKCk7XHJcblx0XHJcbiAgZXhwb3J0IGludGVyZmFjZSBBcGlMb2NhdGlvbiB7XHJcbiAgICBwcm90bz86c3RyaW5nO1xyXG4gICAgaG9zdFBvcnQ6c3RyaW5nO1xyXG4gICAgcHJlZml4OnN0cmluZztcclxuICB9XHJcbiAgXHJcbiAgZXhwb3J0IGludGVyZmFjZSBBcGlMb2NhdGlvbnMge1xyXG4gICAgb3BlbnNoaWZ0PzogQXBpTG9jYXRpb247XHJcbiAgICBrOHM/OiBBcGlMb2NhdGlvbjtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBpbnRlcmZhY2UgS3ViZXJuZXRlc0NvbmZpZyB7XHJcbiAgICBtYXN0ZXJfdXJpPzogc3RyaW5nO1xyXG4gICAgYXBpPzogQXBpTG9jYXRpb25zO1xyXG4gICAgb3BlbnNoaWZ0PzogT3BlblNoaWZ0T0F1dGhDb25maWc7XHJcbiAgICBnb29nbGU/OiBHb29nbGVPQXV0aENvbmZpZztcclxuICAgIGtleWNsb2FrPzogS2V5Q2xvYWtBdXRoQ29uZmlnO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGludGVyZmFjZSBPcGVuU2hpZnRPQXV0aENvbmZpZyB7XHJcbiAgICBvYXV0aF9hdXRob3JpemVfdXJpOnN0cmluZztcclxuICAgIG9hdXRoX2NsaWVudF9pZDpzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgaW50ZXJmYWNlIEdvb2dsZU9BdXRoQ29uZmlnIHtcclxuICAgIGF1dGhlbnRpY2F0aW9uVVJJOnN0cmluZztcclxuICAgIGF1dGhvcml6YXRpb25VUkk6c3RyaW5nO1xyXG4gICAgY2xpZW50SWQ6c3RyaW5nO1xyXG4gICAgY2xpZW50U2VjcmV0OnN0cmluZztcclxuICAgIHJlZGlyZWN0VVJJOnN0cmluZztcclxuICAgIHNjb3BlOnN0cmluZztcclxuICAgIHRva2VuVVJJPzpzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgaW50ZXJmYWNlIEtleUNsb2FrQXV0aENvbmZpZyB7XHJcbiAgICBvYXV0aF9hdXRob3JpemVfdXJpOnN0cmluZztcclxuICAgIG9hdXRoX2NsaWVudF9pZDpzdHJpbmc7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgaW50ZXJmYWNlIEt1YmVybmV0ZXNTdGF0ZSB7XHJcbiAgICBuYW1lc3BhY2VzOiBBcnJheTxzdHJpbmc+O1xyXG4gICAgc2VsZWN0ZWROYW1lc3BhY2U6IHN0cmluZztcclxuICB9XHJcblxyXG5cdGV4cG9ydCBjbGFzcyBXYXRjaFR5cGVzIHtcclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEVORFBPSU5UUygpOnN0cmluZyB7IHJldHVybiBcImVuZHBvaW50c1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBFVkVOVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJldmVudHNcIjsgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgTkFNRVNQQUNFUygpOnN0cmluZyB7IHJldHVybiBcIm5hbWVzcGFjZXNcIjsgfVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgTk9ERVMoKTpzdHJpbmcgeyByZXR1cm4gXCJub2Rlc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBQRVJTSVNURU5UX1ZPTFVNRVMoKTpzdHJpbmcgeyByZXR1cm4gXCJwZXJzaXN0ZW50dm9sdW1lc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBQRVJTSVNURU5UX1ZPTFVNRV9DTEFJTVMoKTpzdHJpbmcgeyByZXR1cm4gXCJwZXJzaXN0ZW50dm9sdW1lY2xhaW1zXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBPRFMoKTpzdHJpbmcgeyByZXR1cm4gXCJwb2RzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJFUExJQ0FUSU9OX0NPTlRST0xMRVJTKCk6c3RyaW5nIHsgcmV0dXJuIFwicmVwbGljYXRpb25jb250cm9sbGVyc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBSRVNPVVJDRV9RVU9UQVMoKTpzdHJpbmcgeyByZXR1cm4gXCJyZXNvdXJjZXF1b3Rhc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBPQVVUSF9DTElFTlRTKCk6c3RyaW5nIHsgcmV0dXJuIFwib2F1dGhjbGllbnRzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFNFQ1JFVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJzZWNyZXRzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFNFUlZJQ0VTKCk6c3RyaW5nIHsgcmV0dXJuIFwic2VydmljZXNcIjsgfVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgU0VSVklDRV9BQ0NPVU5UUygpOnN0cmluZyB7IHJldHVybiBcInNlcnZpY2VhY2NvdW50c1wiOyB9XHJcblxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgVEVNUExBVEVTKCk6c3RyaW5nIHsgcmV0dXJuIFwidGVtcGxhdGVzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJPVVRFUygpOnN0cmluZyB7IHJldHVybiBcInJvdXRlc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBCVUlMRF9DT05GSUdTKCk6c3RyaW5nIHsgcmV0dXJuIFwiYnVpbGRjb25maWdzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEJVSUxEUygpOnN0cmluZyB7IHJldHVybiBcImJ1aWxkc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBERVBMT1lNRU5UX0NPTkZJR1MoKTpzdHJpbmcgeyByZXR1cm4gXCJkZXBsb3ltZW50Y29uZmlnc1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBJTUFHRV9TVFJFQU1TKCk6c3RyaW5nIHsgcmV0dXJuIFwiaW1hZ2VzdHJlYW1zXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFBPTElDSUVTKCk6c3RyaW5nIHsgcmV0dXJuIFwicG9saWNpZXNcIjsgfVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgUE9MSUNZX0JJTkRJTkdTKCk6c3RyaW5nIHsgcmV0dXJuIFwicG9saWN5YmluZGluZ3NcIjsgfVxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgUFJPSkVDVFMoKTpzdHJpbmcgeyByZXR1cm4gXCJwcm9qZWN0c1wiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBST0xFX0JJTkRJTkdTKCk6c3RyaW5nIHsgcmV0dXJuIFwicm9sZWJpbmRpbmdzXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IFJPTEVTKCk6c3RyaW5nIHsgcmV0dXJuIFwicm9sZXNcIjsgfVxyXG5cdH1cclxuXHJcbiAgZXhwb3J0IGNsYXNzIE5hbWVzcGFjZWRUeXBlcyB7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBrOHNUeXBlcygpOkFycmF5PHN0cmluZz4ge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIFdhdGNoVHlwZXMuRU5EUE9JTlRTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuRVZFTlRTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuTk9ERVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRV9DTEFJTVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QT0RTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuUkVQTElDQVRJT05fQ09OVFJPTExFUlMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5SRVNPVVJDRV9RVU9UQVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5TRUNSRVRTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuU0VSVklDRVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5TRVJWSUNFX0FDQ09VTlRTXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBvc1R5cGVzKCk6QXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5URU1QTEFURVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuUk9VVEVTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuQlVJTERTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuQlVJTERfQ09ORklHUyxcclxuICAgICAgICBXYXRjaFR5cGVzLkRFUExPWU1FTlRfQ09ORklHUyxcclxuICAgICAgICBXYXRjaFR5cGVzLklNQUdFX1NUUkVBTVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTLFxyXG4gICAgICAgIFdhdGNoVHlwZXMuUE9MSUNJRVMsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QT0xJQ1lfQklORElOR1MsXHJcbiAgICAgICAgV2F0Y2hUeXBlcy5QUk9KRUNUUyxcclxuICAgICAgICAvL1dhdGNoVHlwZXMuUk9MRV9CSU5ESU5HUyxcclxuICAgICAgICAvL1dhdGNoVHlwZXMuUk9MRVNcclxuICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcblx0XHJcblx0ZXhwb3J0IGNsYXNzIFdhdGNoQWN0aW9ucyB7XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBBTlkoKTpzdHJpbmcgeyByZXR1cm4gXCIqXCI7IH1cclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IEFEREVEKCk6c3RyaW5nIHsgcmV0dXJuIFwiQURERURcIjsgfVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgTU9ESUZJRUQoKTpzdHJpbmcgeyByZXR1cm4gXCJNT0RJRklFRFwiOyB9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBERUxFVEVEKCk6c3RyaW5nIHsgcmV0dXJuIFwiREVMRVRFRFwiOyB9XHJcblx0fVxyXG5cdFxyXG5cdGV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0TWFwIHtcclxuXHRcdFt1aWQ6c3RyaW5nXTogYW55O1x0XHRcclxuXHR9XHJcblx0XHJcblx0ZXhwb3J0IGludGVyZmFjZSBXYXRjaGVyU2VydmljZSB7XHJcblx0XHRoYXNXZWJTb2NrZXQ6IGJvb2xlYW47XHJcblx0XHRhZGRDdXN0b21pemVyOiAodHlwZTogc3RyaW5nLCBjdXN0b21pemVyOiAob2JqOmFueSkgPT4gdm9pZCkgPT4gdm9pZDtcclxuXHRcdGdldFR5cGVzOiAoKSA9PiBBcnJheTxzdHJpbmc+O1xyXG5cdFx0Z2V0TmFtZXNwYWNlOiAoKSA9PiBzdHJpbmc7XHJcblx0XHRzZXROYW1lc3BhY2U6IChuYW1lc3BhY2U6IHN0cmluZykgPT4gdm9pZDtcclxuXHRcdGdldE9iamVjdHM6ICh0eXBlOiBzdHJpbmcpID0+IEFycmF5PGFueT47XHJcblx0XHRnZXRPYmplY3RNYXA6ICh0eXBlOiBzdHJpbmcpID0+IE9iamVjdE1hcDtcclxuXHRcdGFkZEFjdGlvbjogKHR5cGU6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcsIGZuOiAob2JqOmFueSkgPT4gdm9pZCkgPT4gdm9pZDtcclxuXHRcdHJlZ2lzdGVyTGlzdGVuZXI6IChmbjoob2JqZWN0czpPYmplY3RNYXApID0+IHZvaWQpID0+IHZvaWQ7XHJcbiAgICByZWdpc3RlckN1c3RvbVVybEZ1bmN0aW9uOiAoa2luZDpzdHJpbmcsIHVybDooa2luZDpzdHJpbmcpID0+IHN0cmluZykgPT4gdm9pZDtcclxuXHR9XHJcblxyXG4gIGV4cG9ydCBpbnRlcmZhY2UgS3ViZVBvZCB7XHJcbiAgICBpZDpzdHJpbmc7XHJcbiAgICBuYW1lc3BhY2U6c3RyaW5nO1xyXG4gICAgbWV0YWRhdGE7XHJcbiAgICAkcmVwbGljYXM6IG51bWJlcjtcclxuICB9XHJcblxyXG5cdFxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4va3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuICBleHBvcnQgdmFyIGhvc3RQb3J0cyA9W107XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnRzIHRoZSB0aGUgaXAgZmllbGRcclxuICAgKlxyXG4gICAqIEBwYXJhbSBpcCB0aGUgaXAgc3VjaCBhcyAnMTAuMS4yLjEzJ1xyXG4gICAqIEByZXR1cm5zIHthbnl9XHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeVBvZElwKGlwKSA6IGFueSB7XHJcbiAgICAvLyBpIGd1ZXNzIHRoZXJlIGlzIG1heWJlIG5pY2VyIHdheXMgb2Ygc29ydCB0aGlzIHdpdGhvdXQgcGFyc2luZyBhbmQgc2xpY2luZ1xyXG4gICAgdmFyIHJlZ2V4ID0gLyhcXGR7MSwzfSlcXC4oXFxkezEsM30pXFwuKFxcZHsxLDN9KVxcLihcXGR7MSwzfSkvO1xyXG4gICAgdmFyIGdyb3VwcyA9IHJlZ2V4LmV4ZWMoaXApO1xyXG4gICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGdyb3VwcykpIHtcclxuICAgICAgdmFyIGcxID0gKFwiMDBcIiArIGdyb3Vwc1sxXSkuc2xpY2UoLTMpO1xyXG4gICAgICB2YXIgZzIgPSAoXCIwMFwiICsgZ3JvdXBzWzJdKS5zbGljZSgtMyk7XHJcbiAgICAgIHZhciBnMyA9IChcIjAwXCIgKyBncm91cHNbM10pLnNsaWNlKC0zKTtcclxuICAgICAgdmFyIGc0ID0gKFwiMDBcIiArIGdyb3Vwc1s0XSkuc2xpY2UoLTMpO1xyXG4gICAgICB2YXIgYW5zd2VyID0gZzEgKyBnMiArIGczICsgZzQ7XHJcbiAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiByYW1kb21Qb3J0KCk6IG51bWJlcntcclxuICAgICB2YXIgaG9zdFBvcnQ9TWF0aC5mbG9vcigzMDAwMCtNYXRoLnJhbmRvbSgpKig2NTUzNS0zMDAwMCkpO1xyXG4gICAgIHdoaWxlKGhvc3RQb3J0cy5pbmRleE9mKGhvc3RQb3J0KSA9PT0gMCl7XHJcbiAgICAgICAgaG9zdFBvcnQgPSBNYXRoLmZsb29yKDMwMDAwK01hdGgucmFuZG9tKCkqKDY1NTM1LTMwMDAwKSk7XHJcbiAgICAgfVxyXG4gICAgIGhvc3RQb3J0cy5wdXNoKGhvc3RQb3J0KTtcclxuICAgICByZXR1cm4gaG9zdFBvcnRcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21TdHJpbmcobGVuIDogbnVtYmVyKSA6IHN0cmluZ3tcclxuICAgICAgbGVuID0gbGVuIHx8IDMyO1xyXG4gICAgICB2YXIgJGNoYXJzID0gJ2FiY2RlZmhpamttbnByc3R3eHl6JzsgLy8g6buY6K6k5Y675o6J5LqG5a655piT5re35reG55qE5a2X56ymb09MbCw5Z3EsVnYsVXUsSTFcclxuICAgICAgdmFyIG1heFBvcyA9ICRjaGFycy5sZW5ndGg7XHJcbiAgICAgIHZhciBwd2QgPSAnJztcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgcHdkICs9ICRjaGFycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWF4UG9zKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHB3ZDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBjbGFzcyByZXNvdXJjZVJDVGVtcGxhdGV7XHJcblxyXG4gICAgIHB1YmxpYyBpbWFnZT1cIm9yYWNsZTp1dGY4XCI7XHJcbiAgICAgcHVibGljIG5hbWVzID0gW1wib3JhZGF0YVwiXTtcclxuXHJcbiAgICAgcHVibGljIGNyZWF0ZVJDKE9iail7XHJcbiAgICAgICAgdmFyIGxhYmVscyA9IHtcclxuICAgICAgICAgICBcInN0eWxlXCI6IFwib3JhY2xlXCIsXHJcbiAgICAgICAgICAgXCJzdGF0dXNcIjogXCIwXCIsXHJcbiAgICAgICAgICAgXCJpc0V4dHJhY3RcIjogT2JqLmlzRXh0cmFjdCtcIlwiIHx8IFwiMFwiLFxyXG4gICAgICAgICAgIFwiaXNUYXJnZXRcIjogT2JqLmlzVGFyZ2V0XHJcbiAgICAgICAgfTtcclxuICAgICAgICBmb3IodmFyIGl0ZW0gaW4gT2JqLmxhYmVscylcclxuICAgICAgICAgICBsYWJlbHNbaXRlbV0gPSBPYmoubGFiZWxzW2l0ZW1dO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgIFwiYXBpVmVyc2lvblwiIDogIEt1YmVybmV0ZXMuZGVmYXVsdEFwaVZlcnNpb24sXHJcbiAgICAgICAgICAgXCJraW5kXCIgOiBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiLFxyXG4gICAgICAgICAgIFwibWV0YWRhdGFcIiA6IHtcclxuICAgICAgICAgICAgICBcIm5hbWVcIiA6IE9iai5uYW1lLFxyXG4gICAgICAgICAgICAgIFwibGFiZWxzXCIgOiBsYWJlbHMsXHJcbiAgICAgICAgICAgICAgXCJhbm5vdGF0aW9uc1wiOiBPYmouYW5ub3RhdGlvbnNcclxuICAgICAgICAgICB9LFxyXG4gICAgICAgICAgIFwic3BlY1wiIDoge1xyXG4gICAgICAgICAgICAgIHJlcGxpY2FzIDogT2JqLnJlcGxpY2FzIHx8IDEsXHJcbiAgICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiIDogdGhpcy5jcmVhdGVUZW1wbGF0ZShPYmopXHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICB9XHJcblxyXG4gICAgIHB1YmxpYyBjcmVhdGVWb2x1bWVNb3VudHMoKXtcclxuICAgICAgICB2YXIgdm9sdW1lTW91bnRzID0gW107XHJcbiAgICAgICAgZm9yKHZhciBpdGVtIGluIHRoaXMubmFtZXMpe1xyXG4gICAgICAgICAgIGlmKHRoaXMubmFtZXNbaXRlbV0gPT09ICdmbGFzaC1yZWNvdmVyeS1hcmVhJylcclxuICAgICAgICAgICAgICB2b2x1bWVNb3VudHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgXCJuYW1lXCIgOiB0aGlzLm5hbWVzW2l0ZW1dLFxyXG4gICAgICAgICAgICAgICAgIFwibW91bnRQYXRoXCIgOiBcIi9vcHQvb3JhY2xlL2FwcC9mbGFzaF9yZWNvdmVyeV9hcmVhXCJcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdm9sdW1lTW91bnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgIFwibmFtZVwiIDogdGhpcy5uYW1lc1tpdGVtXSxcclxuICAgICAgICAgICAgICAgICBcIm1vdW50UGF0aFwiIDogXCIvb3B0L29yYWNsZS9hcHAvXCIgKyB0aGlzLm5hbWVzW2l0ZW1dXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2b2x1bWVNb3VudHM7XHJcbiAgICAgfVxyXG5cclxuICAgICBwdWJsaWMgY3JlYXRlVm9sdW1lcyhyb290UGF0aCA6c3RyaW5nKXtcclxuICAgICAgICB2YXIgdm9sdW1lcyA9IFtdO1xyXG4gICAgICAgIGZvcih2YXIgaXRlbSBpbiB0aGlzLm5hbWVzKXtcclxuICAgICAgICAgICAgaWYodGhpcy5uYW1lc1tpdGVtXSA9PT0gJ2ZsYXNoLXJlY292ZXJ5LWFyZWEnKVxyXG4gICAgICAgICAgICAgICB2b2x1bWVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBcIm5hbWVcIiA6IHRoaXMubmFtZXNbaXRlbV0sXHJcbiAgICAgICAgICAgICAgICAgIFwiaG9zdFBhdGhcIiA6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgOiByb290UGF0aCArIFwiZmxhc2hfcmVjb3ZlcnlfYXJlYVwiXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgdm9sdW1lcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgOiB0aGlzLm5hbWVzW2l0ZW1dLFxyXG4gICAgICAgICAgICAgICAgICBcImhvc3RQYXRoXCIgOntcclxuICAgICAgICAgICAgICAgICAgICAgIFwicGF0aFwiIDogcm9vdFBhdGggKyB0aGlzLm5hbWVzW2l0ZW1dXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2b2x1bWVzO1xyXG4gICAgIH1cclxuXHJcbiAgICAgcHVibGljIGNyZWF0ZUNvbnRhaW5lcnMoT2JqKXtcclxuICAgICAgICB2YXIgY29udGFpbmVycyA9IFtdO1xyXG4gICAgICAgIGNvbnRhaW5lcnMucHVzaChcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgXCJuYW1lXCIgOiBcIm9yYWNsZVwiLFxyXG4gICAgICAgICAgIFwiaW1hZ2VcIjogdGhpcy5pbWFnZSxcclxuICAgICAgICAgICBcImltYWdlUHVsbFBvbGljeVwiOiBcIklmTm90UHJlc2VudFwiLFxyXG4gICAgICAgICAgIFwiY29tbWFuZFwiOltcIi9hc3NldHMvZW50cnlwb2ludC5zaFwiXSxcclxuICAgICAgICAgICBcInBvcnRzXCI6IFtcclxuICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICBcImNvbnRhaW5lclBvcnRcIjogMTUyMSxcclxuICAgICAgICAgICAgIFwiaG9zdFBvcnRcIjogT2JqLnBvcnQgfHwgcmFtZG9tUG9ydCgpXHJcbiAgICAgICAgICAgfV0sXHJcbiAgICAgICAgICAgXCJ2b2x1bWVNb3VudHNcIiA6IHRoaXMuY3JlYXRlVm9sdW1lTW91bnRzKClcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY29udGFpbmVyc1xyXG4gICAgIH1cclxuXHJcbiAgICAgcHVibGljIGNyZWF0ZVRlbXBsYXRlKE9iail7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgXCJtZXRhZGF0YVwiOlxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgIC8vXCJuYW1lXCI6IE9iai5uYW1lLFxyXG4gICAgICAgICAgICAgICBcImxhYmVsc1wiOiBPYmoubGFiZWxzXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwic3BlY1wiIDoge1xyXG4gICAgICAgICAgICAgICAgXCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kc1wiIDogMCxcclxuICAgICAgICAgICAgICAgIFwiY29udGFpbmVyc1wiIDogIHRoaXMuY3JlYXRlQ29udGFpbmVycyhPYmopLFxyXG4gICAgICAgICAgICAgICAgXCJ2b2x1bWVzXCIgOiAgdGhpcy5jcmVhdGVWb2x1bWVzKE9iai5wYXRoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBsYWJlbFRvQ2hpbmVzZShsYWJlbHMpe1xyXG4gICAgIHZhciBhbnN3ZXIgPSB7fTtcclxuICAgICBhbmd1bGFyLmZvckVhY2gobGFiZWxzLCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgYW5zd2VyW2tleV0gPSBsYWJlbENoYW5nZVRvQ2hpbmVzKHZhbHVlLCBrZXkpO1xyXG4gICAgIH0pO1xyXG4gICAgIHJldHVybiBhbnN3ZXJcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiAgZmluZFNhbWVOYW1lUmVwbGljYXRpb25Db250cm9sbGVycyhyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCBuYW1lKXtcclxuICAgICAgdmFyIG5hbWVzID0gW107XHJcbiAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmMpID0+IHtcclxuICAgICAgICAgIHZhciByY05hbWUgPSBnZXROYW1lKHJjKTtcclxuICAgICAgICAgIGlmKHJjTmFtZS5pbmRleG9mKG5hbWUpICE9PSAtMSlcclxuICAgICAgICAgICAgICBuYW1lcy5wdXNoKHJjTmFtZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYobmFtZXMubGVuZ3RoID09PSAwKXtcclxuICAgICAgICAgIHJldHVybiBuYW1lICsgXCJfMVwiO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICAgIHZhciBtYXggPSAwO1xyXG4gICAgICAgICAgbmFtZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgIHZhciBhbnN3ZXIgPSB2YWx1ZS5zcGxpdChcIl9cIik7XHJcbiAgICAgICAgICAgICB2YXIga2V5ID0gcGFyc2VJbnQoYW5zd2VyWzFdKTtcclxuICAgICAgICAgICAgIGlmKG1heCA8IGtleSlcclxuICAgICAgICAgICAgICAgIG1heCA9IGtleTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIG5hbWUgKyAobWF4KzEpO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJSQyhyYyl7XHJcbiAgICAgIHZhciBhbnN3ZXIgPSBmYWxzZTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKENvcmUucGF0aEdldChyYywgW1wibWV0YWRhdGFcIiwgXCJsYWJlbHNcIl0pLCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICBpZihrZXkgPT09ICdpc1RhcmdldCcgJiYgdmFsdWUgPT09ICd0cnVlJyl7XHJcbiAgICAgICAgICAgICBhbnN3ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0luY2x1ZGUocmNzLCByYyl7XHJcbiAgICAgZm9yKHZhciBpIGluIHJjcyl7XHJcbiAgICAgICAgIGlmKGdldE5hbWUocmNzW2ldKSA9PT0gZ2V0TmFtZShyYykpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgIH1cclxuICAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gbGFiZWxDaGFuZ2VUb0NoaW5lcyh2YWx1ZTpzdHJpbmcsIGtleTpzdHJpbmcpe1xyXG4gIFx0dmFyIHRydWVWYWx1ZSA9ICcnO1xyXG4gIFx0c3dpdGNoKGtleSl7XHJcbiAgXHRcdGNhc2UgJ3R5cGUnOlxyXG4gIFx0XHQgICBpZih2YWx1ZSA9PT0gJzAxJylcclxuICBcdFx0ICAgXHQgIHRydWVWYWx1ZSA9ICfotKLmlL8nO1xyXG4gIFx0XHQgICBlbHNlIGlmKHZhbHVlID09PSAnMDInKVxyXG4gIFx0XHQgICAgICB0cnVlVmFsdWUgPSAn56S+5L+dJztcclxuICBcdFx0ICAgZWxzZVxyXG4gIFx0XHQgICBcdCAgdHJ1ZVZhbHVlID0gdmFsdWU7XHJcbiAgXHRcdCAgIGJyZWFrO1xyXG4gIFx0XHRjYXNlICdiYXRjaCc6XHJcbiAgXHQgICAgICAgaWYodmFsdWUgPT09ICdBJylcclxuICBcdCAgICAgICBcdCAgdHJ1ZVZhbHVlID0gJ+aJueasoUEnO1xyXG4gIFx0ICAgICAgIGVsc2UgaWYodmFsdWUgPT09ICdCJylcclxuICBcdCAgICAgICBcdCAgdHJ1ZVZhbHVlID0gJ+aJueasoUInO1xyXG4gIFx0ICAgICAgIGVsc2VcclxuICBcdCAgICAgICBcdCAgdHJ1ZVZhbHVlID0gdmFsdWU7XHJcblxyXG4gIFx0XHQgICBicmVhaztcclxuICBcdFx0Y2FzZSAncmVnaW9uJzpcclxuICBcdFx0ICAgdHJ1ZVZhbHVlID0gS3ViZXJuZXRlcy5nZXRDb3VudHlCeUNvZGUodmFsdWUpO1xyXG4gIFx0XHQgICBicmVhaztcclxuICBcdFx0Y2FzZSAnc3lzdGVtJzpcclxuICBcdFx0ICAgdHJ1ZVZhbHVlID0gS3ViZXJuZXRlcy5nZXRTeXN0ZW1OYW1lQnlJZCh2YWx1ZSk7XHJcbiAgXHRcdCAgIGJyZWFrO1xyXG4gIFx0XHRjYXNlICd2ZXJzaW9uJzpcclxuICBcdFx0ICAgdmFyIHJlZz0gbmV3IFJlZ0V4cCgnXlswLTldJCcpLmV4ZWModmFsdWUpO1xyXG4gIFx0XHQgICBpZihyZWcpXHJcbiAgXHRcdCAgICAgICB0cnVlVmFsdWUgPSAn54mI5pysJyArIHJlZ1swXTtcclxuICBcdFx0ICAgZWxzZVxyXG4gIFx0XHQgICBcdCAgIHRydWVWYWx1ZSA9IHZhbHVlO1xyXG4gIFx0ICAgICAgIGJyZWFrO1xyXG4gIFx0ICAgIGNhc2UgJ2lzVGFyZ2V0JzpcclxuICBcdCAgICAgICBpZih2YWx1ZSA9PT0gJ3RydWUnKVxyXG4gIFx0ICAgICAgIFx0ICAgdHJ1ZVZhbHVlID0gJ+axh+aAu+aVsOaNruW6kyc7XHJcbiAgXHQgICAgICAgZWxzZVxyXG4gIFx0ICAgICAgICAgICB0cnVlVmFsdWUgPSB2YWx1ZTtcclxuICBcdCAgICAgICBicmVhaztcclxuICBcdCAgICBkZWZhdWx0OlxyXG4gIFx0ICAgICAgIHRydWVWYWx1ZSA9IHZhbHVlO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIHRydWVWYWx1ZTtcclxuICB9XHJcblxyXG4gLypcclxuICAg5qOA5p+l6L+B56e7LOaYr+WQpuacieW3suWQr+WKqOeahG9yYWNsZVxyXG4gXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNoZWNrRm9yTWlncmF0aW9uKHJlcGxpY2F0aW9uQ29udHJvbGxlcnM6QXJyYXk8S3ViZVBvZD4sIHNlbGVjdEl0ZW06QXJyYXk8YW55Pil7XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICBhbmd1bGFyLmZvckVhY2goc2VsZWN0SXRlbSwgKGl0ZW0pID0+IHsgICAgICBcclxuICAgICAgaWYoY2hlY2tGb3JFeGl0KHJlcGxpY2F0aW9uQ29udHJvbGxlcnMsIGl0ZW0pKVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH0gICovXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGVja0ZvckV4aXQocmVwbGljYXRpb25Db250cm9sbGVyczpBcnJheTxLdWJlUG9kPiwgc2VsZWN0SXRlbSl7XHJcbiAgICBmb3IodmFyIGluZGV4IGluIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMpIHtcclxuICAgICAgdmFyIHJlcGxpY2FzID0gcmVwbGljYXRpb25Db250cm9sbGVyc1tpbmRleF07XHJcbiAgICAgIGlmKGdldE5hbWUocmVwbGljYXMpPT1zZWxlY3RJdGVtLl9rZXkgJiYgZ2V0QW5ub3RhdGlvblZhbHVlQnlrZXkocmVwbGljYXMsXCJ5ZWFyXCIpID09IHNlbGVjdEl0ZW1bXCJ5ZWFyXCJdKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlOyBcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldEFubm90YXRpb25WYWx1ZUJ5a2V5KHJlcGxpY2F0aW9uQ29udHJvbGxlciwga2V5OnN0cmluZyl7XHJcbiAgICB2YXIgYW5ub3RhdGlvbnMgPSBnZXRBbm5vdGF0aW9ucyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpOyAgIFxyXG4gICAgaWYoYW5ub3RhdGlvbnMgJiYgYW5ub3RhdGlvbnMgIT0gdW5kZWZpbmVkKXtcclxuICAgICAgcmV0dXJuIGFubm90YXRpb25zW2tleV07XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIC8qXHJcbiAgICDlkK/liqhvcmFjbGXml7bmo4Dmn6XmmK/lkKbmraPlnKjov4Hnp7tcclxuICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGVja0ZvckNyZWF0ZU9yYWNsZSh0cmFuc2ZlclRhc2tzOkFycmF5PGFueT4sIHNlbGVjdEl0ZW1zOkFycmF5PGFueT4pe1xyXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKHNlbGVjdEl0ZW1zLCAoaXRlbSkgPT4ge1xyXG4gICAgICBpZihjaGVja0ZvckV4aXRUYXNrKHRyYW5zZmVyVGFza3MsIGl0ZW0pKVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2hlY2tGb3JFeGl0VGFzayh0cmFuc2ZlclRhc2tzOkFycmF5PGFueT4sIHNlbGVjdEl0ZW0pe1xyXG4gICAgZm9yKHZhciBpbmRleCBpbiB0cmFuc2ZlclRhc2tzKXtcclxuICAgICAgdmFyIHRhc2sgPSB0cmFuc2ZlclRhc2tzW2luZGV4XTsgICAgICBcclxuICAgICAgaWYodGFza1tcIl9rZXlcIl0gPT0gc2VsZWN0SXRlbVtcIl9rZXlcIl0gJiYgKHRhc2tbXCJzdGF0dXNcIl0gPT0gXCIxXCIgfHwgdGFza1tcInN0YXR1c1wiXSA9PSBcIjBcIikgJiYgc2VsZWN0SXRlbVtcInllYXJcIl0gPT0gdGFzay5sYWJlbHMuZGF0YVllYXIpe1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgIFxyXG4gICoqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGVja0ZvckV4dHJhY3QocmVwbGljYXRpb25Db250cm9sbGVyczogQXJyYXk8YW55Pil7XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICBhbmd1bGFyLmZvckVhY2gocmVwbGljYXRpb25Db250cm9sbGVycywgKHJlcGxpY2FzKSA9PiB7XHJcbiAgICAgIHZhciBsYWJlbHMgPSBnZXRMYWJlbHMocmVwbGljYXMpO1xyXG4gICAgICBpZihsYWJlbHNbXCJpc0V4dHJhY3RcIl0gPT0gXCIxXCIpXHJcbiAgICAgICAgcmVzdWx0LnB1c2gocmVwbGljYXMpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSXNTdGFydFN1Y2Nlc3MocmVwbGljYXRpb25Db250cm9sbGVyczogQXJyYXk8YW55Pil7XHJcbiAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgYW5ndWxhci5mb3JFYWNoKHJlcGxpY2F0aW9uQ29udHJvbGxlcnMsIChyZXBsaWNhcykgPT4ge1xyXG4gICAgICB2YXIgbGFiZWxzID0gZ2V0TGFiZWxzKHJlcGxpY2FzKTtcclxuICAgICAgaWYobGFiZWxzW1wic3RhdHVzXCJdICE9IFwiMlwiKVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKHJlcGxpY2FzKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9O1xyXG5cclxuICAvKlxyXG4gICAg5qOA5p+l5pWw5o2u5ZCm5bey5oyC6L295L2/55So5oiW5q2j5Zyo6L+B56e744CCXHJcbiAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gY2hlY2tGb3JNaWdyYXRpb24ocmVwbGljYXRpb25Db250cm9sbGVyczpBcnJheTxLdWJlUG9kPiwgdHJhbnNmZXJUYXNrczogQXJyYXk8YW55Piwgc2VsZWN0SXRlbTpBcnJheTxhbnk+KXtcclxuICAgIHZhciBtZXNzYWdlID0gXCJcIjtcclxuICAgIGZvciAodmFyIGluZGV4IGluIHNlbGVjdEl0ZW0pIHtcclxuICAgICAgdmFyIGl0ZW0gPSBzZWxlY3RJdGVtW2luZGV4XTtcclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICAg5qOA5p+l6L+B56e75paH5Lu25piv5ZCm5bey5oyC6L295L2/55SoXHJcbiAgICAgICovXHJcbiAgICAgIGZvciAodmFyIGkgaW4gcmVwbGljYXRpb25Db250cm9sbGVycykge1xyXG4gICAgICAgIHZhciBsYWJlbHMgPSBnZXRMYWJlbHMocmVwbGljYXRpb25Db250cm9sbGVyc1tpXSk7ICAgICAgIFxyXG4gICAgICAgIGlmKGdldE5hbWUocmVwbGljYXRpb25Db250cm9sbGVyc1tpXSkgPT0gaXRlbS5fa2V5ICYmIGdldEFubm90YXRpb25WYWx1ZUJ5a2V5KHJlcGxpY2F0aW9uQ29udHJvbGxlcnNbaV0sXCJ5ZWFyXCIpID09IGl0ZW1bXCJ5ZWFyXCJdICYmIGxhYmVscy52ZXJzaW9uID09IGl0ZW0ubGFiZWxzLnZlcnNpb24pe1xyXG4gICAgICAgICAgbWVzc2FnZSA9IFwi5pWw5o2u5q2j5Zyo5L2/55SoXCI7XHJcbiAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICAg5qOA5p+l6L+B56e75paH5Lu25piv5ZCm5q2j5Zyo6L+B56e7XHJcbiAgICAgICovXHJcbiAgICAgIGZvcihpIGluIHRyYW5zZmVyVGFza3MpeyAgICAgICBcclxuICAgICAgICBpZih0cmFuc2ZlclRhc2tzW2ldW1wiX2tleVwiXSA9PSBpdGVtW1wiX2tleVwiXSAmJiAodHJhbnNmZXJUYXNrc1tpXVtcInN0YXR1c1wiXSA9PSBcIjFcIiB8fCB0cmFuc2ZlclRhc2tzW2ldW1wic3RhdHVzXCJdID09IFwiMFwiKSAmJiBpdGVtW1wieWVhclwiXSA9PSB0cmFuc2ZlclRhc2tzW2ldLmxhYmVscy5kYXRhWWVhciAmJiBpdGVtLmxhYmVscy52ZXJzaW9uID09IHRyYW5zZmVyVGFza3NbaV0ubGFiZWxzLmRhdGFWZXJzaW9uKXtcclxuICAgICAgICAgIG1lc3NhZ2UgPSBcIuaVsOaNruato+WcqOi/geenu1wiXHJcbiAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtZXNzYWdlO1xyXG4gIH1cclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbGltaW5hdGVDaGVjaEJveENsaWNrKCl7XHJcbiAgICBjb25zb2xlLmxvZygkKFwiI3RhYmxlQ29uZmlnID4gdGhlYWQgPiB0ciBpbnB1dDpjaGVja2JveFwiKS5pcygnOmNoZWNrZWQnKSk7XHJcbiAgICBpZigkKFwiI3RhYmxlQ29uZmlnID4gdGhlYWQgPiB0ciBpbnB1dDpjaGVja2JveFwiKS5pcygnOmNoZWNrZWQnKSl7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIOaYr+WQpuW3suWtmOWcqOW9k+WJjVxyXG4gICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGFscmVhZHlFeGl0SW5Gb2xkZXIoc2VsZWN0ZWRJdGVtczogQXJyYXk8YW55Piwgc2VsZWN0Tm9kZSl7ICAgIFxyXG4gICAgdmFyIGNoaWxkTm9kZXMgPSBzZWxlY3ROb2RlLmNoaWxkTm9kZXM7XHJcbiAgICBmb3IodmFyIGkgaW4gc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgdmFyIGl0ZW1OYW1lID0gc2VsZWN0ZWRJdGVtc1tpXS5yZWdpb25hbGlzbUNvZGUgKyBcIl9cIiArIHNlbGVjdGVkSXRlbXNbaV0uc3lzdGVtQ29kZTtcclxuICAgICAgIGZvciAodmFyIGogaW4gY2hpbGROb2Rlcykge1xyXG4gICAgICAgICBpZihjaGlsZE5vZGVzW2pdLm5hbWUgPT0gaXRlbU5hbWUpe1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW5zID0gY2hpbGROb2Rlc1tqXS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICBmb3IodmFyIGsgaW4gY2hpbGRyZW5zKVxyXG4gICAgICAgICAgICAgIGlmKGNoaWxkcmVuc1trXS5uYW1lID09IHNlbGVjdGVkSXRlbXNbaV0uZGF0YVZlcnNpb24pXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgfVxyXG4gICAgIH0gXHJcbiAgICAgcmV0dXJuIGZhbHNlO1xyXG4gIH0gIFxyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG5tb2R1bGUgQ29uZmlnc3tcclxuXHRleHBvcnQgZnVuY3Rpb24gY3VzdG9tQWxlcnQodGl0bGUsIGNvbnRlbnQsIGZ1bmMsIGNhbmNlbCwgZm9jdXMsIGljb24pe1xyXG5cdFx0LypcdFx0XHJcblx0ICAgICAgICDoh6rlrprkuYkgYWxlcnTmoYZcclxuXHQgICAgICAgIHRpdGxlIDpcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0ICAgICAgICB0ZXh0ICA6XHJcblx0ICAgICAgICBmdW5jICA6XHJcblx0ICAgICAgICBjYW5jZWw6XHJcblx0ICAgICAgICBmb2N1cyA6XHJcblx0ICAgICAgICBpY29uICA6ICAgICBcclxuICAgICAgICAqL1xyXG4gICAgICAgIGljb24gPSBcIi4uLy4uLy4uL25ldy9pbWFnZXMvbXNnYm94X1wiICsgaWNvbiArIFwiLnBuZ1wiO1xyXG4gICAgICAgIGNyZWF0ZV9tYXNrKCk7XHJcbiAgICAgICAgdmFyIHRlbXAgPSBcIjxkaXYgY2xhc3M9XFxcImN1c3RvbS1hbGVydFxcXCIgPlwiIFxyXG4gICAgICAgIFx0KyBcIjxkaXYgY2xhc3M9XFxcImN1c3RvbS1hbGVydC10aXRsZVxcXCI+XCIgKyB0aXRsZSArIFwiPC9kaXY+XCIgXHJcbiAgICAgICAgXHQrIFwiPHRhYmxlICBjbGFzcz1cXFwiY3VzdG9tLWFsZXJ0LWJvZHlcXFwiPjx0cj48dGQgY2xhc3M9XFxcImN1c3RvbS1hbGVydC10ZFxcXCI+PGltZyBzcmM9XFxcIlwiIFxyXG4gICAgICAgIFx0KyBpY29uICsgXCJcXFwiIGNsYXNzPVxcXCJjdXN0b20tYWxlcnQtaW1nXFxcIj48L3RkPlwiIFxyXG4gICAgICAgIFx0KyBcIjx0ZCA+PGRpdiBjYWxzcz1cXFwiY3VzdG9tLWFsZXJ0LWNvbnRlbnRcXFwiPlwiIFxyXG4gICAgICAgIFx0KyBjb250ZW50ICsgXCI8L2Rpdj48L3RkPjwvdHI+PC90YWJsZT5cIiBcclxuICAgICAgICBcdCsgXCI8ZGl2IGNsYXNzPVxcXCJjdXN0b20tYWxlcnQtYm90dG9tXFxcIj48aW5wdXQgdHlwZT0nYnV0dG9uJyBcIiBcclxuICAgICAgICBcdCsgXCIgY2xhc3M9XFxcImN1c3RvbS1hbGVydC1va1xcXCIgdmFsdWU9J+ehruiupCcgaWQ9XFxcIm1zZ2NvbmZpcm1iXFxcIiBvbmNsaWNrPVxcXCJDb25maWdzLnJlbW92ZSgpO1wiIFxyXG4gICAgICAgIFx0KyBmdW5jICsgXCI7XFxcIj5cIjtcclxuICAgICAgICBpZiAobnVsbCAhPSBjYW5jZWwpIHtcclxuICAgICAgICAgICAgdGVtcCArPSBcIiZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPSdidXR0b24nIGNsYXNzPVxcXCJjdXN0b20tYWxlcnQtY2FuY2VsXFxcIiBvbkNsaWNrPSdDb25maWdzLnJlbW92ZSgpJz5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGVtcCArPSBcIjwvZGl2PjwvZGl2PlwiO1xyXG5cclxuICAgICAgICBjcmVhdGVfbXNnYm94KDQwMCwgMjAwLCB0ZW1wKTtcclxuXHJcbiAgICAgICAgaWYgKGZvY3VzID09IDAgfHwgZm9jdXMgPT0gXCIwXCIgfHwgbnVsbCA9PSBmb2N1cykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1zZ2NvbmZpcm1iXCIpLmZvY3VzKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmb2N1cyA9PSAxIHx8IGZvY3VzID09IFwiMVwiKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibXNnY2FuY2VsYlwiKS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRfd2lkdGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIChkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoICsgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRfaGVpZ2h0KCkgeyAgICAgXHJcbiAgICAgICAgcmV0dXJuIChkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRfbGVmdCh3KSB7XHJcbiAgICAgICAgdmFyIGJ3ID0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDtcclxuICAgICAgICB2YXIgYmggPSBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDtcclxuICAgICAgICB3ID0gcGFyc2VGbG9hdCh3KTtcclxuICAgICAgICByZXR1cm4gKGJ3IC8gMiAtIHcgLyAyICsgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRfdG9wKGgpIHtcclxuICAgICAgICB2YXIgYncgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO1xyXG4gICAgICAgIHZhciBiaCA9IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgIGggPSBwYXJzZUZsb2F0KGgpO1xyXG4gICAgICAgIHJldHVybiAoYmggLyAyIC0gaCAvIDIgKyBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZV9tYXNrKCkgeyBcclxuICAgICAgICB2YXIgbWFzayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgbWFzay5pZCA9IFwibWFza1wiO1xyXG4gICAgICAgIG1hc2suc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgbWFzay5zdHlsZS5maWx0ZXIgPSBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShzdHlsZT00LG9wYWNpdHk9MjUpXCI7IFxyXG4gICAgICAgIG1hc2suc3R5bGUub3BhY2l0eSA9IFwiMC40XCI7IFxyXG4gICAgICAgIG1hc2suc3R5bGUuYmFja2dyb3VuZCA9IFwiYmxhY2tcIjtcclxuICAgICAgICBtYXNrLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICAgICAgbWFzay5zdHlsZS5sZWZ0ID0gXCIwcHhcIjsgICAgICBcclxuICAgICAgICBtYXNrLnN0eWxlLndpZHRoID0gZ2V0X3dpZHRoKCkgKyBcInB4XCI7ICAgICAgIFxyXG4gICAgICAgIG1hc2suc3R5bGUuaGVpZ2h0ID0gZ2V0X2hlaWdodCgpICsgXCJweFwiO1xyXG4gICAgICAgIG1hc2suc3R5bGUuekluZGV4ID0gXCIxMDAwMDAwMDAwXCI7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtYXNrKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjcmVhdGVfbXNnYm94KHcsIGgsIHQpIHsgXHJcbiAgICAgICAgdmFyIGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgYm94LmlkID0gXCJtc2dib3hcIjtcclxuICAgICAgICBib3guc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgYm94LnN0eWxlLndpZHRoID0gdyArIFwicHhcIjtcclxuICAgICAgICBib3guc3R5bGUuaGVpZ2h0ID0gaCArIFwicHhcIjtcclxuICAgICAgICBib3guc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcclxuICAgICAgICBib3guaW5uZXJIVE1MID0gdDtcclxuICAgICAgICBib3guc3R5bGUuekluZGV4ID0gXCIxMDAwMDAwMDAxXCI7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChib3gpO1xyXG4gICAgICAgIHJlX3BvcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlX21hc2soKSB7XHJcbiAgICAgICAgdmFyIG1hc2sgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hc2tcIik7XHJcbiAgICAgICAgaWYgKG51bGwgPT0gbWFzaykgcmV0dXJuO1xyXG4gICAgICAgIG1hc2suc3R5bGUud2lkdGggPSBnZXRfd2lkdGgoKSArIFwicHhcIjtcclxuICAgICAgICBtYXNrLnN0eWxlLmhlaWdodCA9IGdldF9oZWlnaHQoKSArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZV9wb3MoKSB7XHJcbiAgICAgICAgdmFyIGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibXNnYm94XCIpO1xyXG4gICAgICAgIGlmIChudWxsICE9IGJveCkge1xyXG4gICAgICAgICAgICB2YXIgdyA9IGJveC5zdHlsZS53aWR0aDtcclxuICAgICAgICAgICAgdmFyIGggPSBib3guc3R5bGUuaGVpZ2h0O1xyXG4gICAgICAgICAgICBib3guc3R5bGUubGVmdCA9IGdldF9sZWZ0KHcpICsgXCJweFwiO1xyXG4gICAgICAgICAgICBib3guc3R5bGUudG9wID0gZ2V0X3RvcChoKSArIFwicHhcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZSgpIHtcclxuICAgICAgICB2YXIgbWFzayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFza1wiKTtcclxuICAgICAgICB2YXIgbXNnYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtc2dib3hcIik7XHJcbiAgICAgICAgaWYgKG51bGwgPT0gbWFzayAmJiBudWxsID09IG1zZ2JveCkgcmV0dXJuO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFzayk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtc2dib3gpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlX3Nob3coKSB7XHJcbiAgICAgICAgcmVfcG9zKCk7XHJcbiAgICAgICAgcmVfbWFzaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGxvYWRfZnVuYygpIHtcclxuICAgICAgICB3aW5kb3cub25yZXNpemUgPSByZV9zaG93O1xyXG4gICAgICAgIHdpbmRvdy5vbnNjcm9sbCA9IHJlX3Nob3c7XHJcbiAgICB9XHRcclxufSIsIi8qXHJcbnJlYWQgYSBvYmplY3QgZnJvbSBqaWFuZ3N1IHByb3ZpbmNlICwgc3VjaCBhcyBuYW5qaW5nIHdpdGggc29tZSBpbmZvcm1hdGlvblxyXG7or7vlj5bmsZ/oi4/nmoTmn5DkuKrlnLDljLrnmoTkv6Hmga/vvIzku6Xlj4rns7vnu5/kv6Hmga9cclxuICovXHJcbm1vZHVsZSBLdWJlcm5ldGVze1xyXG5cdGV4cG9ydCB2YXIgc3lzdGVtX2FyciA9IFt7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566XXCIsXCJzeXNfaWRcIjpcIjFcIn0se1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIzXCJ9LHtcInN5c19uYW1lXCI6XCLotYTkuqfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiNFwifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+L6LSi5pS/57u85ZCI566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfaWRcIjpcIjVcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+LQSsrXCIsXCJzeXNfaWRcIjpcIjZcIn0se1wic3lzX25hbWVcIjpcIua1puWPo+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2lkXCI6XCI3XCJ9LHtcInN5c19uYW1lXCI6XCLmoJbpnJ7ljLrotKLmlL/kuJrliqHkv6Hmga/nrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiOFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLkuIDkvZPljJbns7vnu59cIixcInN5c19pZFwiOlwiOVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG5LiA5L2T5YyW57O757ufXCIsXCJzeXNfaWRcIjpcIjEwXCJ9LHtcInN5c19uYW1lXCI6XCLmu6jmsZ/lvIDlj5HljLrotKLmlL/liIblsYBcIixcInN5c19pZFwiOlwiMTFcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rGf5a6B57uP5rWO5oqA5pyv5byA5Y+R5Yy66LSi5pS/5YiG5bGAXCIsXCJzeXNfaWRcIjpcIjEyXCJ9LHtcInN5c19uYW1lXCI6XCLmsZ/lroHnp5Hlrablm63otKLmlL/liIblsYBcIixcInN5c19pZFwiOlwiMTNcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2lkXCI6XCIxNFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCJBKyvotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19pZFwiOlwiMTVcIn0se1wic3lzX25hbWVcIjpcIumdnueojuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNlwifSx7XCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyW6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjE3XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuS4gOS9k+WMllwiLFwic3lzX2lkXCI6XCIxOFwifSx7XCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfaWRcIjpcIjE5XCJ9LHtcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19pZFwiOlwiMjBcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X5Y+K6Z2e56iO57O757ufXCIsXCJzeXNfaWRcIjpcIjIxXCJ9LHtcInN5c19uYW1lXCI6XCLpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19pZFwiOlwiMjJcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyM1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLTns7vnu59cIixcInN5c19pZFwiOlwiMjRcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2lkXCI6XCIyNVwifSx7XCJzeXNfbmFtZVwiOlwi5a+M5rex6aKE566X5omn6KGMXCIsXCJzeXNfaWRcIjpcIjI2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIueUqOWPi+mdnueojuWPiuelqOaNrlwiLFwic3lzX2lkXCI6XCIyN1wifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+L6aKE566X5omn6KGMXCIsXCJzeXNfaWRcIjpcIjI4XCJ9LHtcInN5c19uYW1lXCI6XCLmsZ/oi4/nnIHotKLmlL/pooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMjlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+L6YCa55So6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjMwXCJ9LHtcInN5c19uYW1lXCI6XCLogZTlj4vova/ku7Yv6YCa55So6LSi5YqhXCIsXCJzeXNfaWRcIjpcIjMxXCJ9LHtcInN5c19uYW1lXCI6XCLnlKjlj4tHUlBHLVU4UjEw6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjMyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIueUqOWPi0dQUC1SMTDotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMzNcIn0se1wic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2lkXCI6XCIzNFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5Yqh57uf5LiA5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjM1XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuWFrOWFsei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIzNlwifSx7XCJzeXNfbmFtZVwiOlwiQSsr6LSi5pS/5LiA5L2T5YyW5L+h5oGv5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjM3XCJ9LHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLliqHnrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiMzhcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5a+M5rex6LSi5pS/5LiA5L2T5YyW566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjM5XCJ9LHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiNDBcIn0se1wic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMluS4muWKoeeuoeeQhuezu+e7n+i9r+S7tlwiLFwic3lzX2lkXCI6XCI0MVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbova/ku7ZHc29mdFwiLFwic3lzX2lkXCI6XCI0MlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5Lia5Yqh57O757ufXCIsXCJzeXNfaWRcIjpcIjQzXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbova/ku7ZcIixcInN5c19pZFwiOlwiNDRcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfaWRcIjpcIjQ1XCJ9LHtcInN5c19uYW1lXCI6XCLmgLvpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiNDZcIn0se1wic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2lkXCI6XCI0N1wifSx7XCJzeXNfbmFtZVwiOlwi55So5qy+6K6h5YiS57O757ufXCIsXCJzeXNfaWRcIjpcIjQ4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuaMh+agh+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI0OVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI5Lia5Yqh566h55CG5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjUwXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiNTFcIn0se1wic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkVwiLFwic3lzX2lkXCI6XCI1MlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLlm73mnInotYTkuqdcIixcInN5c19pZFwiOlwiNTNcIn0se1wic3lzX25hbWVcIjpcIuS5oemVh+mdnueojuaUtuWFpVwiLFwic3lzX2lkXCI6XCI1NFwifSx7XCJzeXNfbmFtZVwiOlwi5Lmh6ZWH6ZuG5Lit5pSv5LuYXCIsXCJzeXNfaWRcIjpcIjU1XCJ9LHtcInN5c19uYW1lXCI6XCLpnZ7nqI7lvoHnvLTns7vnu59cIixcInN5c19pZFwiOlwiNTZcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6aKE566X57yW5Yi25LiO5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjU3XCJ9LHtcInN5c19uYW1lXCI6XCLpooTnrpfnrqHnkIbnu7zlkIjkuJrliqHlubPlj7BcIixcInN5c19pZFwiOlwiNThcIn0se1wic3lzX25hbWVcIjpcInU4566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjU5XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/mjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiNjBcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVI56LSi5Yqh566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjYxXCJ9LHtcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAtVTjotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19pZFwiOlwiNjJcIn0se1wic3lzX25hbWVcIjpcIui0puWKoeWkhOeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI2M1wifSx7XCJzeXNfbmFtZVwiOlwiUjlp6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjY0XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcInU46LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjY1XCJ9LHtcInN5c19uYW1lXCI6XCLnm7jln47ljLrotKLmlL/nu7zlkIjnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiNjZcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+mdnueojue7vOWQiOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI2N1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI566h55CG5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjY4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuWQtOaxn+WMuui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2lkXCI6XCI2OVwifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+LUjlcIixcInN5c19pZFwiOlwiNzBcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+WFrOWFseW6lOeUqOacjeWKoeW5s+WPsFwiLFwic3lzX2lkXCI6XCI3MVwifSx7XCJzeXNfbmFtZVwiOlwi6YeR6J22Sy8z5Yib5paw566h55CG5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjcyXCJ9LHtcInN5c19uYW1lXCI6XCLotKbliqHmlbDmja7ns7vnu59cIixcInN5c19pZFwiOlwiNzNcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5YWs5YWx6LSi5pS/5pyN5Yqh5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjc0XCJ9LHtcInN5c19uYW1lXCI6XCLkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiNzVcIn0se1wic3lzX25hbWVcIjpcIumhueebruW6k1wiLFwic3lzX2lkXCI6XCI3NlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5oC76aKE566X77yI5aSW77yJ5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjc3XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuWfjuW7uui1hOmHkeS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI3OFwifSx7XCJzeXNfbmFtZVwiOlwi5Yac5L+d5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjc5XCJ9LHtcInN5c19uYW1lXCI6XCLlhpzkuJrlj5HlsZXln7rph5HkuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiODBcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5aSx5Zyw5Yac5rCR5L+d6Zqc6LWE6YeR5LiT5oi3XCIsXCJzeXNfaWRcIjpcIjgxXCJ9LHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXlvoHnrqHns7vnu59cIixcInN5c19pZFwiOlwiODJcIn0se1wic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkeS6uuWRmOS/oeaBr1wiLFwic3lzX2lkXCI6XCI4M1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpooTnrpfmjIfmoIct5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfaWRcIjpcIjg0XCJ9LHtcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiODVcIn0se1wic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2lkXCI6XCI4NlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLlhazliqHmtojotLnnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiODdcIn0se1wic3lzX25hbWVcIjpcIuWbveaciei1hOS6p+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI4OFwifSx7XCJzeXNfbmFtZVwiOlwi5Yy66ZWH6LSi5pS/566h55CG4oCc5LiA5L2T5YyW4oCd57O757ufXCIsXCJzeXNfaWRcIjpcIjg5XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuWOv+acrOe6p+i0ouaUv+euoeeQhuKAnOS4gOS9k+WMluKAneezu+e7n1wiLFwic3lzX2lkXCI6XCI5MFwifSx7XCJzeXNfbmFtZVwiOlwi55So5Y+L5pS/5YqhXCIsXCJzeXNfaWRcIjpcIjkxXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjooYzmlL/lj6PkuJPpobnotYTph5HvvIlcIixcInN5c19pZFwiOlwiOTJcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI57uP5bu65Y+j5LiT6aG56LWE6YeR77yJXCIsXCJzeXNfaWRcIjpcIjkzXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjlhpzkuJrkv53pmankuJPotKbvvIlcIixcInN5c19pZFwiOlwiOTRcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOWGnOS4mue7vOWQiOW8gOWPkeS4k+i0pu+8iVwiLFwic3lzX2lkXCI6XCI5NVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnpL7kv53otYTph5HkuJPotKbvvIlcIixcInN5c19pZFwiOlwiOTZcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOWcn+WcsOWHuuiuqeS4k+i0pu+8iVwiLFwic3lzX2lkXCI6XCI5N1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI57u85ZCI5Y+j5LiT6aG56LWE6YeR77yJXCIsXCJzeXNfaWRcIjpcIjk4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCI5OVwifSx7XCJzeXNfbmFtZVwiOlwi5Yac5Lia5LiT5ZCR5Y+K5Yac5Lia5Y+R5bGV5Z+66YeR5LiT6aG5XCIsXCJzeXNfaWRcIjpcIjEwMFwifSx7XCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h5qC4566XXCIsXCJzeXNfaWRcIjpcIjEwMVwifSx7XCJzeXNfbmFtZVwiOlwi6YeR6LSi5bel56iL5LiA5L2T5YyW5pSv5pKR5bmz5Y+wXCIsXCJzeXNfaWRcIjpcIjEwMlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLRcIixcInN5c19pZFwiOlwiMTAzXCJ9LHtcInN5c19uYW1lXCI6XCLlrabmoKHpooTnrpfmiafooYxcIixcInN5c19pZFwiOlwiMTA0XCJ9LHtcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYxcIixcInN5c19pZFwiOlwiMTA1XCJ9LHtcInN5c19uYW1lXCI6XCLkuJPpobnotYTph5FcIixcInN5c19pZFwiOlwiMTA2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuaAu+mihOeul1wiLFwic3lzX2lkXCI6XCIxMDdcIn0se1wic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxMDhcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul1wiLFwic3lzX2lkXCI6XCIxMDlcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+i0puWKoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxMTBcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5a+M5rex6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjExMVwifSx7XCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn57O757ufXCIsXCJzeXNfaWRcIjpcIjExMlwifSx7XCJzeXNfbmFtZVwiOlwi5Zu95bqT5LiT6aG56LWE6YeR566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjExM1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTE0XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjmlrDlhpzkv53vvIlcIixcInN5c19pZFwiOlwiMTE1XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjln47luILlsYXmsJHljLvnlpfnu5/nrbnvvIlcIixcInN5c19pZFwiOlwiMTE2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOmbhuS4reaUr+S7mOS4reW/g++8iVwiLFwic3lzX2lkXCI6XCIxMTdcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOino+WbsOmHke+8iVwiLFwic3lzX2lkXCI6XCIxMThcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOaXp+WfjuaUuemAoO+8iVwiLFwic3lzX2lkXCI6XCIxMTlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI56S+5L+d6LWE6YeR6LSm5oi377yJXCIsXCJzeXNfaWRcIjpcIjEyMFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5Zyf5Zyw5Ye66K6p5LiT5biQ77yJXCIsXCJzeXNfaWRcIjpcIjEyMVwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6aKE5ouo5Y+K6Z2e6ZuG5Lit5pSv5LuY5Lit5b+D77yJXCIsXCJzeXNfaWRcIjpcIjEyMlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjpooTnrpflpJbotYTph5HvvIlcIixcInN5c19pZFwiOlwiMTIzXCJ9LHtcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqFcIixcInN5c19pZFwiOlwiMTI0XCJ9LHtcInN5c19uYW1lXCI6XCLotKLliqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTI1XCJ9LHtcInN5c19uYW1lXCI6XCLlt6XotYTnu5/lj5Hns7vnu59cIixcInN5c19pZFwiOlwiMTI2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIumihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxMjdcIn0se1wic3lzX25hbWVcIjpcIumihOeul+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxMjhcIn0se1wic3lzX25hbWVcIjpcIumihOeul+Wklui1hOmHke+8iOS7juiBlOe9keWuoeiuoeS4reWPluaVsO+8iVwiLFwic3lzX2lkXCI6XCIxMjlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwiRzYtRei0ouWKoeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxMzBcIn0se1wic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIxMzFcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi0dSUC9SOei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIxMzJcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVU4UjEwXCIsXCJzeXNfaWRcIjpcIjEzM1wifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI5Z+65bu65oi377yJXCIsXCJzeXNfaWRcIjpcIjEzNFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI6ZuG5Lit5pSv5LuY5Lit5b+D77yJXCIsXCJzeXNfaWRcIjpcIjEzNVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjlhpzkuJrnu7zlkIjlvIDlj5HvvIlcIixcInN5c19pZFwiOlwiMTM2XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjpooTnrpflpJbotYTph5HvvIlcIixcInN5c19pZFwiOlwiMTM3XCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjmlK/lhpzkuJPmiLfvvIlcIixcInN5c19pZFwiOlwiMTM4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOaAu+mihOeul++8iVwiLFwic3lzX2lkXCI6XCIxMzlcIn0se1wic3lzX25hbWVcIjpcIuWbvei1hOeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNDBcIn0se1wic3lzX25hbWVcIjpcIuS5oei0ouWOv+euoeezu+e7n1wiLFwic3lzX2lkXCI6XCIxNDFcIn0se1wic3lzX25hbWVcIjpcIumihOeul+e8luWItueuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNDJcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W4guacrOe6p1/pg6jpl6jpooTnrpdcIixcInN5c19pZFwiOlwiMTQzXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5biC5pys57qnX+mdnueojuaUtueuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNDRcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjE0NVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Lqt5rmW5Yy6X+i0ouaUv+S4k+aIt1wiLFwic3lzX2lkXCI6XCIxNDZcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6Z2e56iO5pS25YWl566h55CGXCIsXCJzeXNfaWRcIjpcIjE0N1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/lm73lupPpm4bkuK3mlK/ku5jnrqHnkIZcIixcInN5c19pZFwiOlwiMTQ4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6aKE566X5oyH5qCH566h55CGXCIsXCJzeXNfaWRcIjpcIjE0OVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S6rea5luWMul/mgLvpooTnrpfkvJrorqHmoLjnrpdcIixcInN5c19pZFwiOlwiMTUwXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf55uQ6YO95Yy6X+i0ouaUv+S4k+aIt+aguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTFcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+ebkOmDveWMul/pnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTUyXCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf55uQ6YO95Yy6X+WbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTNcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjE1NFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5ZON5rC05Y6/X+mDqOmXqOmihOeul+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNTVcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lk43msLTljr9f6LSi5pS/5LiA5L2T5YyW5L+h5oGv57O757ufXCIsXCJzeXNfaWRcIjpcIjE1NlwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WTjeawtOWOv1/pnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTU3XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/mu6jmtbfljr/otKLmlL/kuIDkvZPljJZcIixcInN5c19pZFwiOlwiMTU4XCJ9LHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf6Zic5a6B5Y6/X+i0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIxNTlcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/pmJzlroHljr9f6LSi5pS/566h55CG6L2v5Lu255So5Y+LVThcIixcInN5c19pZFwiOlwiMTYwXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lsITpmLPljr9f6LSi5pS/6aKE566X5omn6KGM5LiA5L2T5YyW57O757ufXCIsXCJzeXNfaWRcIjpcIjE2MVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W7uua5luWOv1/pnZ7nqI7mlLbnvLRcIixcInN5c19pZFwiOlwiMTYyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lu7rmuZbljr9f6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjE2M1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+W7uua5luWOv1/lm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19pZFwiOlwiMTY0XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6YOo6Zeo6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfaWRcIjpcIjE2NVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/otKLmlL/kuIDkvZPljJbkv6Hmga/ns7vnu59cIixcInN5c19pZFwiOlwiMTY2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6LSi5pS/5LiT5oi35qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjE2N1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/pnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTY4XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfaWRcIjpcIjE2OVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTcwXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lpKfkuLDljLpf6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfaWRcIjpcIjE3MVwifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/mgLvpooTnrpfkvJrorqHmoLjnrpfotKLliqHova/ku7ZcIixcInN5c19pZFwiOlwiMTcyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nu4/mtY7mioDmnK/lvIDlj5HljLpf6YOo6Zeo6aKE566X6L2v5Lu2XCIsXCJzeXNfaWRcIjpcIjE3M1wifSx7XCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+e7j+a1juaKgOacr+W8gOWPkeWMul/lm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19pZFwiOlwiMTc0XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuiAgemdnueojuaUtuWFpeW+gee8tOezu+e7n1wiLFwic3lzX2lkXCI6XCIxNzVcIn0se1wic3lzX25hbWVcIjpcIuaJrOW3nui0ouaUv+S4gOS9k+WMluS/oeaBr+euoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxNzZcIn0se1wic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeW+geaUtlwiLFwic3lzX2lkXCI6XCIxNzdcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57yW5Yi2XCIsXCJzeXNfaWRcIjpcIjE3OFwifSx7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfaWRcIjpcIjE3OVwifSx7XCJzeXNfbmFtZVwiOlwi6KGM5pS/5LqL5Lia5oCn5Y2V5L2N5Zu95pyJ6LWE5Lqn566h55CGXCIsXCJzeXNfaWRcIjpcIjE4MFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJrliqHns7vnu59cIixcInN5c19pZFwiOlwiMTgxXCJ9LHtcInN5c19uYW1lXCI6XCLotKLmlL/kuJrliqHnu7zlkIjns7vnu59cIixcInN5c19pZFwiOlwiMTgyXCJ9LHtcInN5c19uYW1lXCI6XCLmsZ/pg73lvIDlj5HljLrpooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMTgzXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2lkXCI6XCIxODRcIn0se1wic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMluS4muWKoeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIxODVcIn0se1wic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmumdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2lkXCI6XCIxODZcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa5bel6LWE57uf5Y+R57O757ufXCIsXCJzeXNfaWRcIjpcIjE4N1wifSx7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWlXCIsXCJzeXNfaWRcIjpcIjE4OFwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/57u85ZCI5Lia5Yqh57O757ufXCIsXCJzeXNfaWRcIjpcIjE4OVwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5biC5pys57qnX+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTBcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfaWRcIjpcIjE5MVwifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/nu6nmlYjnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMTkyXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjE5M1wifSx7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/nu7zlkIjmsrvnqI7ns7vnu59cIixcInN5c19pZFwiOlwiMTk0XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rW36Zm15Yy6X+mDqOmXqOmihOeul+e8luWItuezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTVcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+a1t+mZteWMul/ljr/ljLrotKLmlL/kuIDkvZPljJZcIixcInN5c19pZFwiOlwiMTk2XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6auY5riv5Yy6X+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTdcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WnnOWgsOWMul/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiMTk4XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+i0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2lkXCI6XCIxOTlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WnnOWgsOWMul/pnZ7nqI7mlLbnvLTns7vnu59cIixcInN5c19pZFwiOlwiMjAwXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIyMDFcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WMu+iNr+mrmOaWsOWMul/otKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19pZFwiOlwiMjAyXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5YW05YyW5biCX+mDqOmXqOmihOeul1wiLFwic3lzX2lkXCI6XCIyMDNcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WFtOWMluW4gl/pnZ7nqI7mlLbnvLRcIixcInN5c19pZFwiOlwiMjA0XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5YW05YyW5biCX+WbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2lkXCI6XCIyMDVcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mdluaxn+W4gl/pooTnrpfmiafooYzns7vnu59cIixcInN5c19pZFwiOlwiMjA2XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf6Z2W5rGf5biCX+mdnueojuaUtuWFpeaUtue8tFwiLFwic3lzX2lkXCI6XCIyMDdcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mdluaxn+W4gl/pg6jpl6jpooTnrpfnvJblrqHns7vnu59cIixcInN5c19pZFwiOlwiMjA4XCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rOw5YW05biCX+mDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMDlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+azsOWFtOW4gl/pnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjEwXCJ9LHtcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5rOw5YW05biCX+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2lkXCI6XCIyMTFcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjIxMlwifSx7XCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+w5Y+K5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfaWRcIjpcIjIxM1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKfpnZ7nqI7mlLblhaXnrqHnkIZcIixcInN5c19pZFwiOlwiMjE0XCJ9LHtcInN5c19uYW1lXCI6XCLogZTlj4votKLliqHnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjE1XCJ9LHtcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jjgIHmjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19pZFwiOlwiMjE2XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuW8gOWPkeWMuuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMTdcIn0se1wic3lzX25hbWVcIjpcIuWbveW6k+i0puWKoeezu+e7n1wiLFwic3lzX2lkXCI6XCIyMThcIn0se1wic3lzX25hbWVcIjpcIuWMluWtpuW3peS4muWbreWMuumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIyMTlcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl6LSm5aWXXCIsXCJzeXNfaWRcIjpcIjIyMFwifSx7XCJzeXNfbmFtZVwiOlwi5YyW5a2m5bel5Lia5Zut5Yy66aKE566X5omn6KGM57O757ufXCIsXCJzeXNfaWRcIjpcIjIyMVwifSx7XCJzeXNfbmFtZVwiOlwi5Lya6K6h5qC4566XXCIsXCJzeXNfaWRcIjpcIjIyMlwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHotKZcIixcInN5c19pZFwiOlwiMjIzXCJ9LHtcInN5c19uYW1lXCI6XCLpooTnrpflhoXlpJbmlLbmlK/moLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjI0XCJ9LHtcInN5c19uYW1lXCI6XCLotKbmiLfmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjI1XCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuaAu+mihOeul+aguOeul+ezu+e7n1wiLFwic3lzX2lkXCI6XCIyMjZcIn0se1wic3lzX25hbWVcIjpcIui0puWKoeWkhOeQhuezu+e7n++8iOaUtuaUr+WIhuexu+aUuemdqeWNh+e6p+eJiO+8iVwiLFwic3lzX2lkXCI6XCIyMjdcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+mihOeul+WkluS4muWKoVwiLFwic3lzX2lkXCI6XCIyMjhcIn0sXHJcblx0XHR7XCJzeXNfbmFtZVwiOlwi55So5Y+LVThSMTDotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19pZFwiOlwiMjI5XCJ9LHtcInN5c19uYW1lXCI6XCLlvIDlj5HljLrotKLmlL/ns7vnu59cIixcInN5c19pZFwiOlwiMjMwXCJ9LHtcInN5c19uYW1lXCI6XCLpq5jmlrDljLrmgLvpooTnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjMxXCJ9LFxyXG5cdFx0e1wic3lzX25hbWVcIjpcIuW8gOWPkeWMuuWFrOWFsei0ouaUv+acjeWKoeW5s+WPsFwiLFwic3lzX2lkXCI6XCIyMzJcIn0se1wic3lzX25hbWVcIjpcIueUqOWPi0dSUC1VOOeuoeeQhui9r+S7tlwiLFwic3lzX2lkXCI6XCIyMzNcIn0se1wic3lzX25hbWVcIjpcIuebkOWfjuW4gl/ln47ljZfmlrDljLpf5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfaWRcIjpcIjIzNFwifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Z+O5Y2X5paw5Yy6X+aAu+mihOeul+i0puWKoeWkhOeQhuezu+e7n1wiLFwic3lzX2lkXCI6XCIyMzVcIn0se1wic3lzX25hbWVcIjpcIui0ouaUv+mihOeul+aMh+agh+euoeeQhlwiLFwic3lzX2lkXCI6XCIyMzZcIn0se1wic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6KGM5pS/566h55CG57O757ufXCIsXCJzeXNfaWRcIjpcIjIzN1wifSxcclxuXHRcdHtcInN5c19uYW1lXCI6XCLmlrDkuK3lpKfotKLliqHova/ku7ZcIixcInN5c19pZFwiOlwiMjM4XCJ9LHtcInN5c19uYW1lXCI6XCLlvIDlj5HljLrmlrDkuK3lpKfotKLliqHmoLjnrpfns7vnu59cIixcInN5c19pZFwiOlwiMjM5XCJ9LHtcInN5c19uYW1lXCI6XCLlvIDlj5HljLrotKbliqHns7vnu59cIixcInN5c19pZFwiOlwiMjQwXCJ9XTtcclxuXHJcblx0ZXhwb3J0IHZhciBvcmlnaW5fcGxhY2VfYXJyID0gW3tcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMFwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDBcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAwXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMFwiLFwic3lzX25hbWVcIjpcIui1hOS6p+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpDR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLnjoTmrabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDJcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi56em5reu5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTA0XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+L6LSi5pS/57u85ZCI566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5bu66YK65Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTA1XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIum8k+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwNlwiLFwic3lzX25hbWVcIjpcIueUqOWPi0ErK1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIua1puWPo+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExMVwiLFwic3lzX25hbWVcIjpcIua1puWPo+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaglumcnuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExM1wiLFwic3lzX25hbWVcIjpcIuaglumcnuWMuui0ouaUv+S4muWKoeS/oeaBr+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIumbqOiKseWPsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNFwiLFwic3lzX25hbWVcIjpcIuS4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaxn+WugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuS4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaxn+WugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNVwiLFwic3lzX25hbWVcIjpcIua7qOaxn+W8gOWPkeWMuui0ouaUv+WIhuWxgFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaxn+WugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNVwiLFwic3lzX25hbWVcIjpcIuaxn+Wugee7j+a1juaKgOacr+W8gOWPkeWMuui0ouaUv+WIhuWxgFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuaxn+WugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNVwiLFwic3lzX25hbWVcIjpcIuaxn+WugeenkeWtpuWbrei0ouaUv+WIhuWxgFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuWFreWQiOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExNlwiLFwic3lzX25hbWVcIjpcIuS4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIumrmOa3s+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDExOFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIua6p+awtOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEyNFwiLFwic3lzX25hbWVcIjpcIkErK+i0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwMFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwMFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLltIflronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDJcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5bSH5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjAyXCIsXCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyW6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5Y2X6ZW/5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjAzXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuWNl+mVv+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwM1wiLFwic3lzX25hbWVcIjpcIuS4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuWMl+WhmOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIwNFwiLFwic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOeuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLplKHlsbHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDVcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5hcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi6ZSh5bGx5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjA1XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X5Y+K6Z2e56iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU19GU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5oOg5bGx5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjA2XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5ruo5rmW5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjExXCIsXCJzeXNfbmFtZVwiOlwi6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIua7qOa5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIxMVwiLFwic3lzX25hbWVcIjpcIumdnueojuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmu6jmuZbljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjE0XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDIxNFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMTRcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5rGf6Zi05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5a6c5YW05biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuWunOWFtOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDI4MlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMFwiLFwic3lzX25hbWVcIjpcIuWvjOa3semihOeul+aJp+ihjFwiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDBcIixcInN5c19uYW1lXCI6XCLnlKjlj4vpnZ7nqI7lj4rnpajmja5cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAwXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+L6aKE566X5omn6KGMXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIum8k+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMlwiLFwic3lzX25hbWVcIjpcIuaxn+iLj+ecgei0ouaUv+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLpvJPmpbzljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDJcIixcInN5c19uYW1lXCI6XCLnlKjlj4vpgJrnlKjova/ku7ZcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5LqR6b6Z5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAzXCIsXCJzeXNfbmFtZVwiOlwi5rGf6IuP55yB6LSi5pS/6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuS6kem+meWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwM1wiLFwic3lzX25hbWVcIjpcIuiBlOWPi+i9r+S7ti/pgJrnlKjotKLliqFcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5LqR6b6Z5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzAzXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQRy1VOFIxMOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLotL7msarljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMDVcIixcInN5c19uYW1lXCI6XCLnlKjlj4tHUFAtUjEw6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuazieWxseWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMxMVwiLFwic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIumTnOWxseWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMxMlwiLFwic3lzX25hbWVcIjpcIui0ouWKoee7n+S4gOaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLpk5zlsbHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMTJcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi6ZOc5bGx5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzEyXCIsXCJzeXNfbmFtZVwiOlwi5YWs5YWx6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuS4sOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMyMVwiLFwic3lzX25hbWVcIjpcIkErK+i0ouaUv+S4gOS9k+WMluS/oeaBr+W5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIuS4sOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMyMVwiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouWKoeeuoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLmspvljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMjJcIixcInN5c19uYW1lXCI6XCLlr4zmt7HotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDNcIixcImNpdHlcIjpcIuW+kOW3nuW4glwiLFwiY291bnR5XCI6XCLmspvljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjAzMjJcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi552i5a6B5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzI0XCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757uf6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi552i5a6B5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzI0XCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5pS/566h55CG6L2v5Lu2R3NvZnRcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAzXCIsXCJjaXR5XCI6XCLlvpDlt57luIJcIixcImNvdW50eVwiOlwi5paw5rKC5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMzgxXCIsXCJzeXNfbmFtZVwiOlwi5rGf6IuP55yB6LSi5pS/6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIumCs+W3nlwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDM4MlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwMFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluS4muWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuWkqeWugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuWkqeWugeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwMlwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLlpKnlroHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDJcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNFwiLFwic3lzX25hbWVcIjpcIuWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDRcIixcInN5c19uYW1lXCI6XCLnlKjmrL7orqHliJLns7vnu59cIixcInN5c19jb2RlXCI6XCJKSEdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0XCIsXCJzeXNfbmFtZVwiOlwi5oyH5qCH566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkJHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNFwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuaWsOWMl+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+e7vOWQiOS4muWKoeeuoeeQhuW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIuatpui/m+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQxMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuS/oeaBr+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFcIixcInN5c19uYW1lXCI6XCLlt6XotYTnu5/lj5FcIixcInN5c19jb2RlXCI6XCJHWlRGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi5rqn6Ziz5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDgxXCIsXCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5LqnXCIsXCJzeXNfY29kZVwiOlwiWkNHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVwiLFwic3lzX25hbWVcIjpcIuS5oemVh+mdnueojuaUtuWFpVwiLFwic3lzX2NvZGVcIjpcIlhaRlNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFcIixcInN5c19uYW1lXCI6XCLkuaHplYfpm4bkuK3mlK/ku5hcIixcInN5c19jb2RlXCI6XCJYWkdLXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6YeR5Z2b5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDgyXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwMFwiLFwic3lzX25hbWVcIjpcIumdnueojuW+gee8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDBcIixcInN5c19uYW1lXCI6XCLpooTnrpfnvJbliLbkuI7miafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5bel5Lia5Zut5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTAxXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X566h55CG57u85ZCI5Lia5Yqh5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVNHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuiZjuS4mOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNVwiLFwic3lzX25hbWVcIjpcInU4566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuiZjuS4mOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+aMh+agh+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpCR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLomY7kuJjljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDVcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi6JmO5LiY5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA1XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVI56LSi5Yqh566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1dHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuiZjuS4mOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNVwiLFwic3lzX25hbWVcIjpcIueUqOWPi0dSUC1VOOi0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkNXR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLomY7kuJjljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDVcIixcInN5c19uYW1lXCI6XCLotKbliqHlpITnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaV0NMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5ZC05Lit5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA2XCIsXCJzeXNfbmFtZVwiOlwiUjlp6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWQtOS4reWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwNlwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlkLTkuK3ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDZcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlkLTkuK3ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDZcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi55u45Z+O5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA3XCIsXCJzeXNfbmFtZVwiOlwidTjotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi55u45Z+O5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA3XCIsXCJzeXNfbmFtZVwiOlwi55u45Z+O5Yy66LSi5pS/57u85ZCI566h55CG5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5aeR6IuP5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTA4XCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/6Z2e56iO57u85ZCI566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWnkeiLj+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwOFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+e7vOWQiOeuoeeQhuW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWQtOaxn+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDUwOVwiLFwic3lzX25hbWVcIjpcIuWQtOaxn+WMuui0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW4uOeGn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4MVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluLjnhp/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODFcIixcInN5c19uYW1lXCI6XCLnlKjlj4tSOVwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluLjnhp/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5byg5a625riv5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5YWs5YWx5bqU55So5pyN5Yqh5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiR0dGV1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuW8oOWutua4r+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4MlwiLFwic3lzX25hbWVcIjpcIumHkeidtksvM+WIm+aWsOeuoeeQhuW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIkNaR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlvKDlrrbmuK/luIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODJcIixcInN5c19uYW1lXCI6XCLotKbliqHmlbDmja7ns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5piG5bGx5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTgzXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuaYhuWxseW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4M1wiLFwic3lzX25hbWVcIjpcIuWFrOWFsei0ouaUv+acjeWKoeW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIkdHRldcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLmmIblsbHluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODNcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA1XCIsXCJjaXR5XCI6XCLoi4/lt57luIJcIixcImNvdW50eVwiOlwi5aSq5LuT5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNTg1XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNVwiLFwiY2l0eVwiOlwi6IuP5bee5biCXCIsXCJjb3VudHlcIjpcIuWkquS7k+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDU4NVwiLFwic3lzX25hbWVcIjpcIuS8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODVcIixcInN5c19uYW1lXCI6XCLpobnnm67lupNcIixcInN5c19jb2RlXCI6XCJYTUtcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODVcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjAwXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuW0h+W3neWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYwMlwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmuK/pl7jljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/mgLvpooTnrpfvvIjlpJbvvInkuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1daSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua4r+mXuOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMVwiLFwic3lzX25hbWVcIjpcIuWfjuW7uui1hOmHkeS4k+aIt+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkNKWkhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmuK/pl7jljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTFcIixcInN5c19uYW1lXCI6XCLlhpzkv53kuJPmiLfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJOQlpIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5riv6Ze45Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjExXCIsXCJzeXNfbmFtZVwiOlwi5Yac5Lia5Y+R5bGV5Z+66YeR5LiT5oi3566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiTkZKSlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua4r+mXuOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMVwiLFwic3lzX25hbWVcIjpcIuWkseWcsOWGnOawkeS/nemanOi1hOmHkeS4k+aIt1wiLFwic3lzX2NvZGVcIjpcIlNETk1cIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmuK/pl7jljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi6YCa5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjEyXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5b6B566h57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIumAmuW3nuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMlwiLFwic3lzX25hbWVcIjpcIuW3pei1hOe7n+WPkeS6uuWRmOS/oeaBr1wiLFwic3lzX2NvZGVcIjpcIkdaVEZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLpgJrlt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MTJcIixcInN5c19uYW1lXCI6XCLpooTnrpfmjIfmoIct5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIumAmuW3nuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYxMlwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbflronljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MjFcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfnvJblrqHns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW35a6J5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjIxXCIsXCJzeXNfbmFtZVwiOlwi5YWs5Yqh5raI6LS5566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiR1dYRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+WuieWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYyMVwiLFwic3lzX25hbWVcIjpcIuWbveaciei1hOS6p+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpDR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbflronljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MjFcIixcInN5c19uYW1lXCI6XCLljLrplYfotKLmlL/nrqHnkIbigJzkuIDkvZPljJbigJ3ns7vnu59cIixcInN5c19jb2RlXCI6XCJYWllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+WuieWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYyMVwiLFwic3lzX25hbWVcIjpcIuWOv+acrOe6p+i0ouaUv+euoeeQhuKAnOS4gOS9k+WMluKAneezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWmguS4nOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYyM1wiLFwic3lzX25hbWVcIjpcIueUqOWPi+aUv+WKoVwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOihjOaUv+WPo+S4k+mhuei1hOmHke+8iVwiLFwic3lzX2NvZGVcIjpcIlpIWFpcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnu4/lu7rlj6PkuJPpobnotYTph5HvvIlcIixcInN5c19jb2RlXCI6XCJaSEpKXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI5Yac5Lia5L+d6Zmp5LiT6LSm77yJXCIsXCJzeXNfY29kZVwiOlwiWkhOQlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOWGnOS4mue7vOWQiOW8gOWPkeS4k+i0pu+8iVwiLFwic3lzX2NvZGVcIjpcIlpITkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpfvvIjnpL7kv53otYTph5HkuJPotKbvvIlcIixcInN5c19jb2RlXCI6XCJaSFNCXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiT5oi35qC4566X77yI5Zyf5Zyw5Ye66K6p5LiT6LSm77yJXCIsXCJzeXNfY29kZVwiOlwiWkhURFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4k+aIt+aguOeul++8iOe7vOWQiOWPo+S4k+mhuei1hOmHke+8iVwiLFwic3lzX2NvZGVcIjpcIlpIWkhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5ZCv5Lic5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgxXCIsXCJzeXNfbmFtZVwiOlwi5Yac5Lia5LiT5ZCR5Y+K5Yac5Lia5Y+R5bGV5Z+66YeR5LiT6aG5XCIsXCJzeXNfY29kZVwiOlwiTkZaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIuWQr+S4nOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4MVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlkK/kuJzluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODFcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHmoLjnrpdcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5aaC55qL5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjgyXCIsXCJzeXNfbmFtZVwiOlwi6YeR6LSi5bel56iL5LiA5L2T5YyW5pSv5pKR5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW36Zeo5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjg0XCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+mXqOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4NFwiLFwic3lzX25hbWVcIjpcIuWtpuagoemihOeul+aJp+ihjFwiLFwic3lzX2NvZGVcIjpcIllTWlhYWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+mXqOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4NFwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjFwiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLmtbfpl6jluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2ODRcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi5rW36Zeo5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjg0XCIsXCJzeXNfbmFtZVwiOlwi5LiT6aG56LWE6YeRXCIsXCJzeXNfY29kZVwiOlwiWlhaSlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIua1t+mXqOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDY4NFwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul1wiLFwic3lzX2NvZGVcIjpcIlpZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwMFwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDBcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpdcIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzAwXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcwMFwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLov57kupHljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDNcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfotKbliqHns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi6L+e5LqR5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzAzXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex6LSi5pS/5LiA5L2T5YyW566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5rW35bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzA2XCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5rW35bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzA2XCIsXCJzeXNfbmFtZVwiOlwi5paw5Lit5aSn5YWs5YWx6LSi5pS/566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi6LWj5qaG5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzIxXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi6LWj5qaG5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzIxXCIsXCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn57O757ufXCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuS4nOa1t+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyMlwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLkuJzmtbfljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjJcIixcInN5c19uYW1lXCI6XCLlm73lupPkuJPpobnotYTph5HnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaWFpKXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi5Lic5rW35Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzIyXCIsXCJzeXNfbmFtZVwiOlwi5Zu95pyJ6LWE5Lqn566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkNHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwN1wiLFwiY2l0eVwiOlwi6L+e5LqR5riv5biCXCIsXCJjb3VudHlcIjpcIuS4nOa1t+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDcyMlwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLngYzkupHljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjNcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLngYzljZfljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MjRcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA3XCIsXCJjaXR5XCI6XCLov57kupHmuK/luIJcIixcImNvdW50eVwiOlwi54GM5Y2X5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNzI0XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDBcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5paw5Yac5L+d77yJXCIsXCJzeXNfY29kZVwiOlwiWkhOQlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOWfjuW4guWxheawkeWMu+eWl+e7n+etue+8iVwiLFwic3lzX2NvZGVcIjpcIlpIWUJcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjpm4bkuK3mlK/ku5jkuK3lv4PvvIlcIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI6Kej5Zuw6YeR77yJXCIsXCJzeXNfY29kZVwiOlwiWkhKS1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOaXp+WfjuaUuemAoO+8iVwiLFwic3lzX2NvZGVcIjpcIlpIQ0dcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjnpL7kv53otYTph5HotKbmiLfvvIlcIixcInN5c19jb2RlXCI6XCJaSFNCXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rKz5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAyXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/566h55CG57O757uf77yI5Zyf5Zyw5Ye66K6p5LiT5biQ77yJXCIsXCJzeXNfY29kZVwiOlwiWkhURFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4heays+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+euoeeQhuezu+e7n++8iOmihOaLqOWPiumdnumbhuS4reaUr+S7mOS4reW/g++8iVwiLFwic3lzX2NvZGVcIjpcIlpIWUJcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLotKLmlL/nrqHnkIbns7vnu5/vvIjpooTnrpflpJbotYTph5HvvIlcIixcInN5c19jb2RlXCI6XCJZU1dcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmsrPljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDJcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqFcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6LSi5Yqh5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLlt6XotYTnu5/lj5Hns7vnu59cIixcInN5c19jb2RlXCI6XCJHWlRGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+L5pS/5YqhXCIsXCJzeXNfY29kZVwiOlwiWVlaV1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIumihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67lronljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDNcIixcInN5c19uYW1lXCI6XCLpooTnrpfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZU0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5aSW6LWE6YeR77yI5LuO6IGU572R5a6h6K6h5Lit5Y+W5pWw77yJXCIsXCJzeXNfY29kZVwiOlwiWVNXXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu5a6J5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNCU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3rumYtOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwNFwiLFwic3lzX25hbWVcIjpcIkc2LUXotKLliqHnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJDV0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu6Zi05Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODA0XCIsXCJzeXNfbmFtZVwiOlwi5rGf6IuP55yB6LSi5pS/6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3rumYtOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwNFwiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+WFrOWFsei0ouaUv+euoeeQhui9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkNaR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmt67pmLTljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MDRcIixcInN5c19uYW1lXCI6XCLnlKjlj4tHUlAvUjnotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJDWkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5reu6Zi05Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODA0XCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVU4UjEwXCIsXCJzeXNfY29kZVwiOlwiQ1dHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua3ruWuieWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgwM1wiLFwic3lzX25hbWVcIjpcIumihOeul+e8luWuoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTQlNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmtabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjln7rlu7rmiLfvvIlcIixcInN5c19jb2RlXCI6XCJaSEpKXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rWm5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI6ZuG5Lit5pSv5LuY5Lit5b+D77yJXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua4hea1puWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgxMVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMlueuoeeQhuezu+e7n++8iOWGnOS4mue7vOWQiOW8gOWPke+8iVwiLFwic3lzX2NvZGVcIjpcIlpITkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmtabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjpooTnrpflpJbotYTph5HvvIlcIixcInN5c19jb2RlXCI6XCJZU1dcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmuIXmtabljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MTFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbns7vnu5/vvIjmlK/lhpzkuJPmiLfvvIlcIixcInN5c19jb2RlXCI6XCJaSFpOXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5riF5rWm5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW566h55CG57O757uf77yI5oC76aKE566X77yJXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua2n+awtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyNlwiLFwic3lzX25hbWVcIjpcIumdnueojuW+gee8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtp/msLTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjZcIixcInN5c19uYW1lXCI6XCLlm73otYTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaQ0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5raf5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODI2XCIsXCJzeXNfbmFtZVwiOlwi5Lmh6LSi5Y6/566h57O757ufXCIsXCJzeXNfY29kZVwiOlwiWENYR1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua2n+awtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyNlwiLFwic3lzX25hbWVcIjpcIuS5oei0ouWOv+euoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlhDWEdcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtp/msLTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjZcIixcInN5c19uYW1lXCI6XCLpooTnrpfnvJbliLbnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZU0JTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5raf5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODI2XCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOFwiLFwiY2l0eVwiOlwi5reu5a6J5biCXCIsXCJjb3VudHlcIjpcIua0quazveWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDgyOVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDhcIixcImNpdHlcIjpcIua3ruWuieW4glwiLFwiY291bnR5XCI6XCLmtKrms73ljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA4MjlcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi55ux55yZ5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODMwXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyW5bmz5Y+wXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi6YeR5rmW5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODMxXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMFwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6YOo6Zeo6aKE566XXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMFwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6Z2e56iO5pS2566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMFwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/luILmnKznuqdf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6LSi5pS/5LiT5oi3XCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6Z2e56iO5pS25YWl566h55CGXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf5Zu95bqT6ZuG5Lit5pSv5LuY566h55CGXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf6aKE566X5oyH5qCH566h55CGXCIsXCJzeXNfY29kZVwiOlwiWkJHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS6rea5luWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMlwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuq3muZbljLpf5oC76aKE566X5Lya6K6h5qC4566XXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuebkOmDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf6LSi5pS/5LiT5oi35qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuebkOmDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuebkOmDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuebkOmDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/nm5Dpg73ljLpf5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuWTjeawtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyMVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lk43msLTljr9f6YOo6Zeo6aKE566X566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuWTjeawtOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyMVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lk43msLTljr9f6LSi5pS/5LiA5L2T5YyW5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5ZON5rC05Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTIxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WTjeawtOWOv1/pnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5ruo5rW35Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTIyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+a7qOa1t+WOv+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIumYnOWugeWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/pmJzlroHljr9f6LSi5pS/566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiQ1pHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIumYnOWugeWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyM1wiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/pmJzlroHljr9f6LSi5pS/566h55CG6L2v5Lu255So5Y+LVThcIixcInN5c19jb2RlXCI6XCJZWVpXXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5bCE6Ziz5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTI0XCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+WwhOmYs+WOv1/otKLmlL/pooTnrpfmiafooYzkuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlu7rmuZbljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjVcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bu65rmW5Y6/X+mdnueojuaUtue8tFwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlu7rmuZbljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjA5MjVcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5bu65rmW5Y6/X+i0ouaUv+S4gOS9k+WMllwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuW7uua5luWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkyNVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/lu7rmuZbljr9f5Zu95bqT6ZuG5Lit5pSv5LuYXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS4nOWPsOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk4MVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6YOo6Zeo6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuS4nOWPsOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDk4MVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/kuJzlj7DluIJf6LSi5pS/5LiA5L2T5YyW5L+h5oGv57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lic5Y+w5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/otKLmlL/kuJPmiLfmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lic5Y+w5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/pnZ7nqI7mlLblhaXmlLbnvLTnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Lic5Y+w5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgxXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+S4nOWPsOW4gl/mgLvpooTnrpfkvJrorqHmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5aSn5Liw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5aSn5Liw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTgyXCIsXCJzeXNfbmFtZVwiOlwi55uQ5Z+O5biCX+Wkp+S4sOWMul/otKLmlL/kuIDkvZPljJZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLlpKfkuLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5ODJcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5aSn5Liw5Yy6X+aAu+mihOeul+S8muiuoeaguOeul+i0ouWKoei9r+S7tlwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLnu4/mtY7mioDmnK/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5OTFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf57uP5rWO5oqA5pyv5byA5Y+R5Yy6X+mDqOmXqOmihOeul+i9r+S7tlwiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDlcIixcImNpdHlcIjpcIuebkOWfjuW4glwiLFwiY291bnR5XCI6XCLnu4/mtY7mioDmnK/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA5OTFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf57uP5rWO5oqA5pyv5byA5Y+R5Yy6X+WbveW6k+mbhuS4reaUr+S7mFwiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuJPmiLfmoLjnrpdcIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwXCIsXCJzeXNfbmFtZVwiOlwi6ICB6Z2e56iO5pS25YWl5b6B57y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMFwiLFwic3lzX25hbWVcIjpcIuaJrOW3nui0ouaUv+S4gOS9k+WMluS/oeaBr+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuW5v+mZteWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuW5v+mZteWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMlwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLpgpfmsZ/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDNcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLpgpfmsZ/ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDNcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7ns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi6YKX5rGf5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuWuneW6lOWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAyM1wiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeW+geaUtlwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLlrp3lupTljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMjNcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5Luq5b6B5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDgxXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57yW5Yi2XCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuS7quW+geW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4MVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeaUtue8tFwiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLku6rlvoHluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwODFcIixcInN5c19uYW1lXCI6XCLooYzmlL/kuovkuJrmgKfljZXkvY3lm73mnInotYTkuqfnrqHnkIZcIixcInN5c19jb2RlXCI6XCJaQ0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5Luq5b6B5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDgxXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIumrmOmCruW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4NFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuaxn+mDveWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4OFwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoee7vOWQiOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpIWVdcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLmsZ/pg73ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwODhcIixcInN5c19uYW1lXCI6XCLmsZ/pg73lvIDlj5HljLrpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTAwXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Lqs5Y+j5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTAyXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6LSi5pS/5LiA5L2T5YyW5Lia5Yqh566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Lqs5Y+j5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTAyXCIsXCJzeXNfbmFtZVwiOlwi5a+M5rex5Y2P6YCa6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuS6rOWPo+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTEwMlwiLFwic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmuW3pei1hOe7n+WPkeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdaVEZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLmtqblt57ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjExMTFcIixcInN5c19uYW1lXCI6XCLpg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5ram5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTExXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5ram5bee5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTExXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWlXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuS4ueW+kuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTExMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+e7vOWQiOS4muWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuS4uemYs+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTE4MVwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLkuLnpmLPluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjExODFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5oms5Lit5biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTgyXCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuaJrOS4reW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTE4MlwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTFcIixcImNpdHlcIjpcIumVh+axn+W4glwiLFwiY291bnR5XCI6XCLlj6XlrrnluIJcIixcImNvdW50eV9jb2RlXCI6XCIzMjExODNcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaVcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjExXCIsXCJjaXR5XCI6XCLplYfmsZ/luIJcIixcImNvdW50eVwiOlwi5Y+l5a655biCXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMTgzXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6Z2e56iO5pS25YWl57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf57up5pWI566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiSlhHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMFwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/luILmnKznuqdf57u85ZCI5rK756iO57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhaU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIua1t+mZteWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/mtbfpmbXljLpf6YOo6Zeo6aKE566X57yW5Yi257O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIua1t+mZteWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTIwMlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/mtbfpmbXljLpf5Y6/5Yy66LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi6auY5riv5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAzXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+mrmOa4r+WMul/pooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5aec5aCw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjA0XCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WnnOWgsOWMul/pg6jpl6jpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJCTVlTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5aec5aCw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjA0XCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+WnnOWgsOWMul/otKLmlL/kuIDkvZPljJbns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLlp5zloLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDRcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mdnueojuaUtue8tOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLlp5zloLDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDRcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5aec5aCw5Yy6X+mihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTJcIixcImNpdHlcIjpcIuazsOW3nuW4glwiLFwiY291bnR5XCI6XCLljLvoja/pq5jmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEyMDVcIixcInN5c19uYW1lXCI6XCLms7Dlt57luIJf5Yy76I2v6auY5paw5Yy6X+i0ouaUv+S4gOS9k+WMluezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWFtOWMluW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MVwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lhbTljJbluIJf6YOo6Zeo6aKE566XXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWFtOWMluW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MVwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lhbTljJbluIJf6Z2e56iO5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuWFtOWMluW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MVwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/lhbTljJbluIJf5Zu95bqT6ZuG5Lit5pSv5LuYXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIumdluaxn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/pnZbmsZ/luIJf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIumdluaxn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/pnZbmsZ/luIJf6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIumdluaxn+W4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4MlwiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/pnZbmsZ/luIJf6YOo6Zeo6aKE566X57yW5a6h57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuazsOWFtOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4M1wiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ms7DlhbTluIJf6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuazsOWFtOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4M1wiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ms7DlhbTluIJf6Z2e56iO5pS25YWl566h55CG57O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMlwiLFwiY2l0eVwiOlwi5rOw5bee5biCXCIsXCJjb3VudHlcIjpcIuazsOWFtOW4glwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTI4M1wiLFwic3lzX25hbWVcIjpcIuazsOW3nuW4gl/ms7DlhbTluIJf6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuW4guacrOe6p1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMFwiLFwic3lzX25hbWVcIjpcIumDqOmXqOmihOeul+euoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkJNWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLluILmnKznuqdcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDBcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAwXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+WfjuWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMwMlwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsOWPiuWbveW6k+mbhuS4reaUr+S7mOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkdLWkZcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLlrr/ln47ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDJcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKfpnZ7nqI7mlLblhaXnrqHnkIZcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5a6/5Z+O5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAyXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5Lya6K6h5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+ixq+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMxMVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtue8tOeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLlrr/osavljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMTFcIixcInN5c19uYW1lXCI6XCLogZTlj4votKLliqHnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJDV0dMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5a6/6LGr5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzExXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuayremYs+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyMlwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLmsq3pmLPljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjJcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jjgIHmjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rKt6Ziz5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzIyXCIsXCJzeXNfbmFtZVwiOlwi5byA5Y+R5Yy65oC76aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuayremYs+WOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyMlwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoeaguOeul1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLms5fpmLPljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjNcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYxcIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rOX5rSq5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzI0XCIsXCJzeXNfbmFtZVwiOlwi6YOo6Zeo6aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiQk1ZU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuazl+a0quWOv1wiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMyNFwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeeuoeeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLms5fmtKrljr9cIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjRcIixcInN5c19uYW1lXCI6XCLlm73lupPpm4bkuK3mlK/ku5jns7vnu59cIixcInN5c19jb2RlXCI6XCJHS1pGXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rOX5rSq5Y6/XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzI0XCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6LSm5Yqh57O757ufXCIsXCJzeXNfY29kZVwiOlwiS0pIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIumrmOaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMEdYUVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLljJblt6Xlm63ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDBIR1lcIixcInN5c19uYW1lXCI6XCLljJblrablt6XkuJrlm63ljLrpnZ7nqI7mlLblhaXnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi57uP5rWO5oqA5pyv5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAwSktRXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl6LSm5aWXXCIsXCJzeXNfY29kZVwiOlwiRlNaVFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIuWMluW3peWbreWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMUhHWVwiLFwic3lzX25hbWVcIjpcIuWMluWtpuW3peS4muWbreWMuumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDFcIixcImNpdHlcIjpcIuWNl+S6rOW4glwiLFwiY291bnR5XCI6XCLnu4/mtY7mioDmnK/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAxMDFKS1FcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAxXCIsXCJjaXR5XCI6XCLljZfkuqzluIJcIixcImNvdW50eVwiOlwi5YyW5bel5Zut5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMTAySEdZXCIsXCJzeXNfbmFtZVwiOlwi5Lya6K6h5qC4566XXCIsXCJzeXNfY29kZVwiOlwiS1lIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMVwiLFwiY2l0eVwiOlwi5Y2X5Lqs5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDEwMkpLUVwiLFwic3lzX25hbWVcIjpcIuaAu+mihOeul+S8muiuoei0plwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLplKHlsbHlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjAyMDVLRlFcIixcInN5c19uYW1lXCI6XCLpooTnrpflhoXlpJbmlLbmlK/moLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5ruo5rmW5Yy66ams5bGx5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjExS0ZRXCIsXCJzeXNfbmFtZVwiOlwi6LSm5oi35qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuaxn+mYtOW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDI4MWtmcVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwMlwiLFwiY2l0eVwiOlwi5peg6ZSh5biCXCIsXCJjb3VudHlcIjpcIuaxn+mYtOW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDI4MWtmcVwiLFwic3lzX25hbWVcIjpcIui0puaIt+aguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIlpISFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDJcIixcImNpdHlcIjpcIuaXoOmUoeW4glwiLFwiY291bnR5XCI6XCLlrpzlhbTnjq/np5Hlm61cIixcImNvdW50eV9jb2RlXCI6XCIzMjAyODJLRlFcIixcInN5c19uYW1lXCI6XCLotKLliqHmoLjnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaSEhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjAyXCIsXCJjaXR5XCI6XCLml6DplKHluIJcIixcImNvdW50eVwiOlwi5a6c5YW05byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwMjgyS0ZRXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X5qC4566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWkhIU1wifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMEpLUVwiLFwic3lzX25hbWVcIjpcIuWvjOa3seWNj+mAmui0ouaUv+S4gOS9k+WMluS4muWKoeeuoeeQhuezu+e7n+i9r+S7tlwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwM1wiLFwiY2l0eVwiOlwi5b6Q5bee5biCXCIsXCJjb3VudHlcIjpcIue7j+a1juaKgOacr+W8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDMwMEpLUVwiLFwic3lzX25hbWVcIjpcIui0puWKoeWkhOeQhuezu+e7n++8iOaUtuaUr+WIhuexu+aUuemdqeWNh+e6p+eJiO+8iVwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLlpKnlroHnu4/lvIDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDJKS1FcIixcInN5c19uYW1lXCI6XCLotKbliqHlpITnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy65byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA0S0ZRXCIsXCJzeXNfbmFtZVwiOlwi5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIumSn+alvOWMuuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQwNUtGUVwiLFwic3lzX25hbWVcIjpcIueUqOasvuiuoeWIkuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkpIR0xcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLpkp/mpbzljLrlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MDZLRlFcIixcInN5c19uYW1lXCI6XCLmjIfmoIfnrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJaQkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi6ZKf5qW85Yy65byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDA3S0ZRXCIsXCJzeXNfbmFtZVwiOlwi5oC76aKE566X57O757ufXCIsXCJzeXNfY29kZVwiOlwiWllTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi57uP5byA5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDEySktRXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/6aKE566X5aSW5Lia5YqhXCIsXCJzeXNfY29kZVwiOlwiWVNXXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA0XCIsXCJjaXR5XCI6XCLluLjlt57luIJcIixcImNvdW50eVwiOlwi57uP5byA5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNDEySktRXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS257y057O757ufXCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIue7j+W8gOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQxMkpLUVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmrabov5vpq5jmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0MTNHWFFcIixcInN5c19uYW1lXCI6XCLotKLmlL/kuIDkvZPljJbnrqHnkIbkv6Hmga/ns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDRcIixcImNpdHlcIjpcIuW4uOW3nuW4glwiLFwiY291bnR5XCI6XCLmuqfpmLPkuK3lhbPmnZFcIixcImNvdW50eV9jb2RlXCI6XCIzMjA0ODFaR0NcIixcInN5c19uYW1lXCI6XCLnlKjlj4tVOFIxMOi0ouaUv+S4gOS9k+WMluW5s+WPsFwiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNFwiLFwiY2l0eVwiOlwi5bi45bee5biCXCIsXCJjb3VudHlcIjpcIua6p+mYs+S4reWFs+adkeW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDQ4MVpHQ0tGXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LVThSMTDotKLmlL/kuIDkvZPljJblubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLnm7jln47ljLrlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1MDdLRlFcIixcInN5c19uYW1lXCI6XCLlvIDlj5HljLrotKLmlL/ns7vnu59cIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLluLjnhp/luILpq5jmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODFHWFFcIixcInN5c19uYW1lXCI6XCLpq5jmlrDljLrmgLvpooTnrpfns7vnu59cIixcInN5c19jb2RlXCI6XCJaWVNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLmmIblsbHluILlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODNLRlFcIixcInN5c19uYW1lXCI6XCLlvIDlj5HljLrlhazlhbHotKLmlL/mnI3liqHlubPlj7BcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluILmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODVYUVwiLFwic3lzX25hbWVcIjpcIumdnueojuaUtuWFpeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIkZTU1JcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluILmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODZYUVwiLFwic3lzX25hbWVcIjpcIuS8muiuoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDVcIixcImNpdHlcIjpcIuiLj+W3nuW4glwiLFwiY291bnR5XCI6XCLlpKrku5PluILmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA1ODdYUVwiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDZcIixcImNpdHlcIjpcIuWNl+mAmuW4glwiLFwiY291bnR5XCI6XCLlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA2MDBLRlFcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA2XCIsXCJjaXR5XCI6XCLljZfpgJrluIJcIixcImNvdW50eVwiOlwi6IuP6YCa5Zut5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwNjAwU1RZXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwNlwiLFwiY2l0eVwiOlwi5Y2X6YCa5biCXCIsXCJjb3VudHlcIjpcIumAmuW3nua5vuekuuiMg+WMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDYwMFRaV1wiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMDdcIixcImNpdHlcIjpcIui/nuS6kea4r+W4glwiLFwiY291bnR5XCI6XCLlvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjA3MDFLRlFcIixcInN5c19uYW1lXCI6XCLpnZ7nqI7mlLblhaVcIixcInN5c19jb2RlXCI6XCJGU1NSXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA4XCIsXCJjaXR5XCI6XCLmt67lronluIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwODAwS0ZRXCIsXCJzeXNfbmFtZVwiOlwi55So5Y+LR1JQLVU4566h55CG6L2v5Lu2XCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjA5XCIsXCJjaXR5XCI6XCLnm5Dln47luIJcIixcImNvdW50eVwiOlwi5Z+O5Y2X5paw5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIwOTAwQ1pYUVwiLFwic3lzX25hbWVcIjpcIuebkOWfjuW4gl/ln47ljZfmlrDljLpf5Zu95bqT6ZuG5Lit5pSv5LuY57O757ufXCIsXCJzeXNfY29kZVwiOlwiR0taRlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIwOVwiLFwiY2l0eVwiOlwi55uQ5Z+O5biCXCIsXCJjb3VudHlcIjpcIuWfjuWNl+aWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMDkwMUNaWFFcIixcInN5c19uYW1lXCI6XCLnm5Dln47luIJf5Z+O5Y2X5paw5Yy6X+aAu+mihOeul+i0puWKoeWkhOeQhuezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLljJblt6Xlm63ljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBIR1lcIixcInN5c19uYW1lXCI6XCLpooTnrpfmiafooYzns7vnu59cIixcInN5c19jb2RlXCI6XCJZU1pYXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwS0ZRXCIsXCJzeXNfbmFtZVwiOlwi6Z2e56iO5pS25YWl5pS257y0XCIsXCJzeXNfY29kZVwiOlwiRlNTUlwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuenkeaKgOaWsOWfjlwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTAwMEtKQ1wiLFwic3lzX25hbWVcIjpcIumihOeul+aJp+ihjOezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllTWlhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTBcIixcImNpdHlcIjpcIuaJrOW3nuW4glwiLFwiY291bnR5XCI6XCLonIDlhogt55im6KW/5rmW6aOO5pmv5ZCN6IOc5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAwU1hIXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/6aKE566X5oyH5qCH566h55CGXCIsXCJzeXNfY29kZVwiOlwiWkJHTFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIuicgOWGiC3nmKbopb/muZbpo47mma/lkI3og5zljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEwMDBTWEhcIixcInN5c19uYW1lXCI6XCLmgLvpooTnrpfkvJrorqHmoLjnrpdcIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAxS0ZRXCIsXCJzeXNfbmFtZVwiOlwi5LiA5L2T5YyW57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEwXCIsXCJjaXR5XCI6XCLmiazlt57luIJcIixcImNvdW50eVwiOlwi5byA5Y+R5Yy6XCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMDAyS0ZRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMFwiLFwiY2l0eVwiOlwi5oms5bee5biCXCIsXCJjb3VudHlcIjpcIumrmOmCruW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTA4NEtGUVwiLFwic3lzX25hbWVcIjpcIui0ouaUv+S4muWKoeezu+e7n1wiLFwic3lzX2NvZGVcIjpcIllUSFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxMVwiLFwiY2l0eVwiOlwi6ZWH5rGf5biCXCIsXCJjb3VudHlcIjpcIuaWsOWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTEwMFhRXCIsXCJzeXNfbmFtZVwiOlwi6LSi5pS/5LiA5L2T5YyWXCIsXCJzeXNfY29kZVwiOlwiWVRIXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEyXCIsXCJjaXR5XCI6XCLms7Dlt57luIJcIixcImNvdW50eVwiOlwi5biC5pys57qnXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMjAwXCIsXCJzeXNfbmFtZVwiOlwi5rOw5bee5biCX+W4guacrOe6p1/ooYzmlL/nrqHnkIbns7vnu59cIixcInN5c19jb2RlXCI6XCJYWkdMXCJ9LFxyXG5cdFx0e1wiY2l0eV9jb2RlXCI6XCIzMjEzXCIsXCJjaXR5XCI6XCLlrr/ov4HluIJcIixcImNvdW50eVwiOlwi5rmW5ruo5paw5Z+OXCIsXCJjb3VudHlfY29kZVwiOlwiMzIxMzAwSEJYQ1wiLFwic3lzX25hbWVcIjpcIuaWsOS4reWkp+i0ouWKoei9r+S7tlwiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLnu4/lvIDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDBKS1FcIixcInN5c19uYW1lXCI6XCLmlrDkuK3lpKflhazlhbHotKLmlL/nrqHnkIbova/ku7ZcIixcInN5c19jb2RlXCI6XCJZVEhcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLmtIvmsrPmlrDljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMDBZSFhRXCIsXCJzeXNfbmFtZVwiOlwi6aKE566X5omn6KGM57O757ufXCIsXCJzeXNfY29kZVwiOlwiWVNaWFwifSxcclxuXHRcdHtcImNpdHlfY29kZVwiOlwiMzIxM1wiLFwiY2l0eVwiOlwi5a6/6L+B5biCXCIsXCJjb3VudHlcIjpcIuWuv+ixq+WMuuW8gOWPkeWMulwiLFwiY291bnR5X2NvZGVcIjpcIjMyMTMxMUtGUVwiLFwic3lzX25hbWVcIjpcIuW8gOWPkeWMuuaWsOS4reWkp+i0ouWKoeaguOeul+ezu+e7n1wiLFwic3lzX2NvZGVcIjpcIktKSFNcIn0sXHJcblx0XHR7XCJjaXR5X2NvZGVcIjpcIjMyMTNcIixcImNpdHlcIjpcIuWuv+i/geW4glwiLFwiY291bnR5XCI6XCLms5fmtKrljr/lvIDlj5HljLpcIixcImNvdW50eV9jb2RlXCI6XCIzMjEzMjRLRlFcIixcInN5c19uYW1lXCI6XCLlvIDlj5HljLrotKbliqHns7vnu59cIixcInN5c19jb2RlXCI6XCJLSkhTXCJ9XTtcclxuXHJcblxyXG5cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGdldENvdW50eUJ5Q29kZShjb2RlKXtcclxuXHRcdC8vdmFyIGpzb2JqID0gSlNPTi5wYXJzZShvcmlnaW5fcGxhY2VfYXJyKTtcclxuXHRcdHZhciBqc29iaiA9IG9yaWdpbl9wbGFjZV9hcnI7XHJcblxyXG5cdFx0dmFyIGpzb25sZW5ndGggPSBqc29iai5sZW5ndGg7XHJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGpzb25sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZihqc29ialtpXS5jb3VudHlfY29kZSA9PSBjb2RlKXtcclxuXHRcdFx0XHRyZXR1cm4ganNvYmpbaV0uY2l0eStqc29ialtpXS5jb3VudHk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBjb2RlO1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGdldENvZGVCeUNvdW50eShwbGFjZSl7XHJcblx0XHRwbGFjZSA9IHBsYWNlLnJlcGxhY2UoL1xccypcXHQqL2dpbSxcIlwiKTtcclxuXHRcdC8vdmFyIGpzb2JqID0gSlNPTi5wYXJzZShvcmlnaW5fcGxhY2VfYXJyKTtcclxuXHRcdHZhciBqc29iaiA9IG9yaWdpbl9wbGFjZV9hcnI7XHJcblxyXG5cdFx0dmFyIGpzb25sZW5ndGggPSBqc29iai5sZW5ndGg7XHJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGpzb25sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZihqc29ialtpXS5jaXR5ID09PSBcIlwiIHx8IGpzb2JqW2ldLmNpdHkgPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRpZihqc29ialtpXS5jb3VudHkgPT09IFwiXCIgfHwganNvYmpbaV0uY291bnR5ID09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0aWYoKHBsYWNlLmluZGV4T2YoanNvYmpbaV0uY2l0eSkgIT0gLTEpICYmIChwbGFjZS5pbmRleE9mKGpzb2JqW2ldLmNvdW50eSkgIT0gLTEpKXtcclxuXHRcdFx0XHRyZXR1cm4ganNvYmpbaV0uY291bnR5X2NvZGU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwbGFjZTtcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBmdW5jdGlvbiBnZXRTeXN0ZW1OYW1lQnlJZChpZCl7XHJcblx0XHR2YXIgdGVtSnNvbiA9IHN5c3RlbV9hcnI7XHJcblx0XHR2YXIgc3lzX3NpemUgPSB0ZW1Kc29uLmxlbmd0aDtcclxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3lzX3NpemU7IGkrKykge1xyXG5cdFx0XHRpZih0ZW1Kc29uW2ldLnN5c19pZCA9PSBpZCl7XHJcblx0XHRcdFx0cmV0dXJuIHRlbUpzb25baV0uc3lzX25hbWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBpZDtcclxuXHR9XHJcblxyXG5cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGdldElkQnlTeXN0ZW1OYW1lKG5hbWUpe1xyXG5cdFx0dmFyIHRlbUpzb24gPSBzeXN0ZW1fYXJyO1xyXG5cdFx0dmFyIHN5c19zaXplID0gdGVtSnNvbi5sZW5ndGg7XHJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5c19zaXplOyBpKyspIHtcclxuXHRcdFx0aWYodGVtSnNvbltpXS5zeXNfbmFtZSA9PSBuYW1lKXtcclxuXHRcdFx0XHRyZXR1cm4gdGVtSnNvbltpXS5zeXNfaWQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuYW1lO1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGdldENvZGVCeVN5c3RlbU5hbWUobmFtZSl7XHJcblx0XHR2YXIganNvYmogPSBvcmlnaW5fcGxhY2VfYXJyO1xyXG5cclxuXHRcdHZhciBqc29ubGVuZ3RoID0ganNvYmoubGVuZ3RoO1xyXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBqc29ubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYoanNvYmpbaV0uc3lzX25hbWUgPT0gbmFtZSl7XHJcblx0XHRcdFx0cmV0dXJuIGpzb2JqW2ldLnN5c19jb2RlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmFtZTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSW50ZXJmYWNlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInV0aWxIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9jdXN0b21BbGVydC50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInJlYWRQbGFjZWRpdmlzaW9uLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9Db25maWdzSGVscGVyLnRzXCIvPlxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgY29udGV4dCA9ICcva3ViZXJuZXRlcyc7XHJcbiAgZXhwb3J0IHZhciBoYXNoID0gJyMnICsgY29udGV4dDtcclxuICBleHBvcnQgdmFyIGRlZmF1bHRSb3V0ZSA9IGhhc2ggKyAnL2FwcHMnO1xyXG4gIGV4cG9ydCB2YXIgcGx1Z2luTmFtZSA9ICdLdWJlcm5ldGVzJztcclxuICBleHBvcnQgdmFyIHBsdWdpblBhdGggPSAncGx1Z2lucy9rdWJlcm5ldGVzLyc7XHJcbiAgZXhwb3J0IHZhciB0ZW1wbGF0ZVBhdGggPSBwbHVnaW5QYXRoICsgJ2h0bWwvJztcclxuICBleHBvcnQgdmFyIGxvZzpMb2dnaW5nLkxvZ2dlciA9IExvZ2dlci5nZXQocGx1Z2luTmFtZSk7XHJcblxyXG4gIGV4cG9ydCB2YXIga2VlcFBvbGxpbmdNb2RlbCA9IHRydWU7XHJcblxyXG4gIGV4cG9ydCB2YXIgZGVmYXVsdEljb25VcmwgPSBDb3JlLnVybChcIi9pbWcva3ViZXJuZXRlcy5zdmdcIik7XHJcbiAgZXhwb3J0IHZhciBob3N0SWNvblVybCA9IENvcmUudXJsKFwiL2ltZy9ob3N0LnN2Z1wiKTtcclxuXHJcbiAgLy8gdGhpcyBnZXRzIHNldCBhcyBhIHByZS1ib290c3RyYXAgdGFza1xyXG4gIGV4cG9ydCB2YXIgb3NDb25maWc6S3ViZXJuZXRlc0NvbmZpZyA9IHVuZGVmaW5lZDtcclxuICBleHBvcnQgdmFyIG1hc3RlclVybCA9IFwiXCI7XHJcblxyXG4gIGV4cG9ydCB2YXIgZGVmYXVsdEFwaVZlcnNpb24gPSBcInYxXCI7XHJcbiAgZXhwb3J0IHZhciBkZWZhdWx0T1NBcGlWZXJzaW9uID0gXCJ2MVwiO1xyXG4gIGV4cG9ydCB2YXIgbGFiZWxGaWx0ZXJUZXh0U2VwYXJhdG9yID0gXCIsXCI7XHJcblxyXG4gIGV4cG9ydCB2YXIgZGVmYXVsdE5hbWVzcGFjZSA9IFwiZGVmYXVsdFwiO1xyXG5cclxuICBleHBvcnQgdmFyIGFwcFN1ZmZpeCA9IFwiLmFwcFwiO1xyXG5cclxuICAvLyBrdWJlcm5ldGVzIHNlcnZpY2UgbmFtZXNcclxuICBleHBvcnQgdmFyIGtpYmFuYVNlcnZpY2VOYW1lID0gXCJraWJhbmFcIjtcclxuICBleHBvcnQgdmFyIGZhYnJpYzhGb3JnZVNlcnZpY2VOYW1lID0gXCJmYWJyaWM4LWZvcmdlXCI7XHJcbiAgZXhwb3J0IHZhciBnb2dzU2VydmljZU5hbWUgPSBcImdvZ3NcIjtcclxuICBleHBvcnQgdmFyIGplbmtpbnNTZXJ2aWNlTmFtZSA9IFwiamVua2luc1wiO1xyXG4gIGV4cG9ydCB2YXIgYXBpbWFuU2VydmljZU5hbWUgPSAnYXBpbWFuJztcclxuICBleHBvcnQgdmFyIGlzT3BlblNoaWZ0ID0gdHJ1ZTtcclxuXHJcbiAgZXhwb3J0IHZhciBzc2hTZWNyZXREYXRhS2V5cyA9IFtcInNzaC1rZXlcIiwgXCJzc2gta2V5LnB1YlwiXTtcclxuICBleHBvcnQgdmFyIGh0dHBzU2VjcmV0RGF0YUtleXMgPSBbXCJ1c2VybmFtZVwiLCBcInBhc3N3b3JkXCJdO1xyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCkge1xyXG4gICAgdmFyIG5zID0gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIGlmIChucykge1xyXG4gICAgICByZXR1cm4gXCIvbmFtZXNwYWNlcy9cIiArIG5zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gYXBpUHJlZml4KCkge1xyXG4gICAgdmFyIHByZWZpeCA9IENvcmUucGF0aEdldChvc0NvbmZpZywgWydhcGknLCAnazhzJywgJ3ByZWZpeCddKTtcclxuICAgIGlmICghcHJlZml4KSB7XHJcbiAgICAgIHByZWZpeCA9ICdhcGknO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIENvcmUudHJpbUxlYWRpbmcocHJlZml4LCAnLycpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIG9zQXBpUHJlZml4KCkge1xyXG4gICAgdmFyIHByZWZpeCA9IENvcmUucGF0aEdldChvc0NvbmZpZywgWydhcGknLCAnb3BlbnNoaWZ0JywgJ3ByZWZpeCddKTtcclxuICAgIGlmICghcHJlZml4KSB7XHJcbiAgICAgIHByZWZpeCA9ICdvYXBpJztcclxuICAgIH1cclxuICAgIHZhciBhbnN3ZXIgPSBDb3JlLnRyaW1MZWFkaW5nKHByZWZpeCwgJy8nKTtcclxuICAgIGlmICghaXNPcGVuU2hpZnQpIHtcclxuICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihhcGlQcmVmaXgoKSwgZGVmYXVsdE9TQXBpVmVyc2lvbiwgXCJwcm94eVwiLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcInNlcnZpY2VzL3RlbXBsYXRlc1wiLCBhbnN3ZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFuc3dlcjtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBtYXN0ZXJBcGlVcmwoKSB7XHJcbiAgICByZXR1cm4gbWFzdGVyVXJsIHx8IFwiXCI7XHJcbiAgfVxyXG5cclxuICAvKiogV0FSTklORyAtIHRoaXMgZXhjbHVkZXMgdGhlIGhvc3QgbmFtZSAtIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZToga3ViZXJuZXRlc0FwaVVybCgpIGluc3RlYWQhISAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzQXBpUHJlZml4KCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihhcGlQcmVmaXgoKSwgZGVmYXVsdEFwaVZlcnNpb24pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIG9wZW5zaGlmdEFwaVByZWZpeCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3NBcGlQcmVmaXgoKSwgZGVmYXVsdE9TQXBpVmVyc2lvbik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gcHJlZml4Rm9yVHlwZSh0eXBlOnN0cmluZykge1xyXG4gICAgaWYgKHR5cGUgPT09IFdhdGNoVHlwZXMuTkFNRVNQQUNFUykge1xyXG4gICAgICByZXR1cm4ga3ViZXJuZXRlc0FwaVByZWZpeCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKF8uYW55KE5hbWVzcGFjZWRUeXBlcy5rOHNUeXBlcywgKHQpID0+IHQgPT09IHR5cGUpKSB7XHJcbiAgICAgIHJldHVybiBrdWJlcm5ldGVzQXBpUHJlZml4KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoXy5hbnkoTmFtZXNwYWNlZFR5cGVzLm9zVHlwZXMsICh0KSA9PiB0ID09PSB0eXBlKSkge1xyXG4gICAgICByZXR1cm4gb3BlbnNoaWZ0QXBpUHJlZml4KCk7XHJcbiAgICB9XHJcbiAgICAvLyBsZXRzIGFzc3VtZSBpdHMgYW4gT3BlblNoaWZ0IGV4dGVuc2lvbiB0eXBlXHJcbiAgICByZXR1cm4gb3BlbnNoaWZ0QXBpUHJlZml4KCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24ga3ViZXJuZXRlc0FwaVVybCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIGt1YmVybmV0ZXNBcGlQcmVmaXgoKSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gb3BlbnNoaWZ0QXBpVXJsKCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgb3BlbnNoaWZ0QXBpUHJlZml4KCkpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHJlc291cmNlc1VyaUZvcktpbmQodHlwZSwgbnMgPSBudWxsKSB7XHJcbiAgICBpZiAoIW5zKSB7XHJcbiAgICAgIG5zID0gY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIHByZWZpeEZvclR5cGUodHlwZSksIG5hbWVzcGFjZVBhdGhGb3JLaW5kKHR5cGUsIG5zKSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gdXJpVGVtcGxhdGVGb3JLdWJlcm5ldGVzS2luZCh0eXBlKSB7XHJcbiAgICB2YXIgdXJsVGVtcGxhdGUgPSAnJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuTkFNRVNQQUNFUzpcclxuICAgICAgY2FzZSBcIk5hbWVzcGFjZXNcIjpcclxuICAgICAgICB1cmxUZW1wbGF0ZSA9IFVybEhlbHBlcnMuam9pbignbmFtZXNwYWNlcycpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuT0FVVEhfQ0xJRU5UUzpcclxuICAgICAgY2FzZSBcIk9BdXRoQ2xpZW50c1wiOlxyXG4gICAgICBjYXNlIFwiT0F1dGhDbGllbnRcIjpcclxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdvYXV0aGNsaWVudHMnKTtcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBST0pFQ1RTOlxyXG4gICAgICBjYXNlIFwiUHJvamVjdHNcIjpcclxuICAgICAgICB1cmxUZW1wbGF0ZSA9IFVybEhlbHBlcnMuam9pbigncHJvamVjdHMnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB1cmxUZW1wbGF0ZSA9IFVybEhlbHBlcnMuam9pbignbmFtZXNwYWNlcy86bmFtZXNwYWNlJywgdHlwZSwgJzppZCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVybFRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZVBhdGhGb3JLaW5kKHR5cGUsIG5zKSB7XHJcbiAgICB2YXIgdXJsVGVtcGxhdGUgPSAnJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuTkFNRVNQQUNFUzpcclxuICAgICAgY2FzZSBcIk5hbWVzcGFjZXNcIjpcclxuICAgICAgY2FzZSBcIk5hbWVzcGFjZVwiOlxyXG4gICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oJ25hbWVzcGFjZXMnKTtcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLk5PREVTOlxyXG4gICAgICBjYXNlIFwiTm9kZXNcIjpcclxuICAgICAgY2FzZSBcIm5vZGVcIjpcclxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdub2RlcycpO1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuUFJPSkVDVFM6XHJcbiAgICAgIGNhc2UgXCJQcm9qZWN0c1wiOlxyXG4gICAgICBjYXNlIFwiUHJvamVjdFwiOlxyXG4gICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oJ3Byb2plY3RzJyk7XHJcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5PQVVUSF9DTElFTlRTOlxyXG4gICAgICBjYXNlIFwiT0F1dGhDbGllbnRzXCI6XHJcbiAgICAgIGNhc2UgXCJPQXV0aENsaWVudFwiOlxyXG4gICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oJ29hdXRoY2xpZW50cycpO1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVTOlxyXG4gICAgICBjYXNlIFwiUGVyc2lzdGVudFZvbHVtZXNcIjpcclxuICAgICAgY2FzZSBcIlBlcnNpc3RlbnRWb2x1bWVcIjpcclxuICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKCdwZXJzaXN0ZW50dm9sdW1lcycpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oJ25hbWVzcGFjZXMnLCBucywgdHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZXZhbHVlIGZyb20gdGhlIGluamVjdG9yIGlmIGl0cyBhdmFpbGFibGUgb3IgbnVsbFxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBpbmplY3Q8VD4obmFtZSk6VCB7XHJcbiAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xyXG4gICAgcmV0dXJuIGluamVjdG9yID8gaW5qZWN0b3IuZ2V0PFQ+KG5hbWUpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXNvdXJjZSh0aGluZzpzdHJpbmcsIHVybFRlbXBsYXRlOnN0cmluZywgJHJlc291cmNlOiBuZy5yZXNvdXJjZS5JUmVzb3VyY2VTZXJ2aWNlLCBLdWJlcm5ldGVzTW9kZWwpIHtcclxuICAgIHZhciBwcmVmaXggPSBwcmVmaXhGb3JUeXBlKHRoaW5nKTtcclxuICAgIGlmICghcHJlZml4KSB7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIkludmFsaWQgdHlwZSBnaXZlbjogXCIsIHRoaW5nKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHBhcmFtcyA9IDxhbnk+IHtcclxuICAgICAgbmFtZXNwYWNlOiBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZVxyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGluZykge1xyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuTkFNRVNQQUNFUzpcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLk9BVVRIX0NMSUVOVFM6XHJcbiAgICAgIGNhc2UgV2F0Y2hUeXBlcy5OT0RFUzpcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBST0pFQ1RTOlxyXG4gICAgICBjYXNlIFdhdGNoVHlwZXMuT0FVVEhfQ0xJRU5UUzpcclxuICAgICAgY2FzZSBXYXRjaFR5cGVzLlBFUlNJU1RFTlRfVk9MVU1FUzpcclxuICAgICAgcGFyYW1zID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHVybCA9IFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgcHJlZml4LCB1cmxUZW1wbGF0ZSk7XHJcbiAgICBsb2cuZGVidWcoXCJVcmwgZm9yIFwiLCB0aGluZywgXCI6IFwiLCB1cmwpO1xyXG4gICAgdmFyIHJlc291cmNlID0gJHJlc291cmNlKHVybCwgbnVsbCwge1xyXG4gICAgICBxdWVyeTogeyBtZXRob2Q6ICdHRVQnLCBpc0FycmF5OiBmYWxzZSwgcGFyYW1zOiBwYXJhbXN9LFxyXG4gICAgICBjcmVhdGU6IHsgbWV0aG9kOiAnUE9TVCcsIHBhcmFtczogcGFyYW1zfSxcclxuICAgICAgc2F2ZTogeyBtZXRob2Q6ICdQVVQnLCBwYXJhbXM6IHBhcmFtc30sXHJcbiAgICAgIGRlbGV0ZTogeyBtZXRob2Q6ICdERUxFVEUnLCBwYXJhbXM6IF8uZXh0ZW5kKHtcclxuICAgICAgICBpZDogJ0BpZCdcclxuICAgICAgfSwgcGFyYW1zKX1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc291cmNlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGltYWdlUmVwb3NpdG9yaWVzUmVzdFVSTCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL2ltYWdlc3RyZWFtc1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBkZXBsb3ltZW50Q29uZmlnc1Jlc3RVUkwoKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG9wZW5zaGlmdEFwaVVybCgpLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi9kZXBsb3ltZW50Y29uZmlnc1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZHNSZXN0VVJMKCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvYnVpbGRzXCIpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29uZmlnSG9va3NSZXN0VVJMKCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvYnVpbGRjb25maWdob29rc1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZENvbmZpZ3NSZXN0VVJMKCkge1xyXG4gICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbihvcGVuc2hpZnRBcGlVcmwoKSwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvYnVpbGRjb25maWdzXCIpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHJvdXRlc1Jlc3RVUkwoKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKG9wZW5zaGlmdEFwaVVybCgpLCBrdWJlcm5ldGVzTmFtZXNwYWNlUGF0aCgpLCBcIi9yb3V0ZXNcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVzUmVzdFVSTCgpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4ob3BlbnNoaWZ0QXBpVXJsKCksIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL3RlbXBsYXRlc1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXROYW1lc3BhY2UoZW50aXR5KSB7XHJcbiAgICB2YXIgYW5zd2VyID0gQ29yZS5wYXRoR2V0KGVudGl0eSwgW1wibWV0YWRhdGFcIiwgXCJuYW1lc3BhY2VcIl0pO1xyXG4gICAgcmV0dXJuIGFuc3dlciA/IGFuc3dlciA6IGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0TGFiZWxzKGVudGl0eSkge1xyXG4gICAgdmFyIGFuc3dlciA9IENvcmUucGF0aEdldChlbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwibGFiZWxzXCJdKTtcclxuICAgIHJldHVybiBhbnN3ZXIgPyBhbnN3ZXIgOiB7fTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXROYW1lKGVudGl0eSkge1xyXG4gICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoZW50aXR5KSkge1xyXG4gICAgICByZXR1cm4gZW50aXR5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIENvcmUucGF0aEdldChlbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwibmFtZVwiXSkgfHwgQ29yZS5wYXRoR2V0KGVudGl0eSwgXCJuYW1lXCIpIHx8IENvcmUucGF0aEdldChlbnRpdHksIFwiaWRcIik7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0S2luZChlbnRpdHkpIHtcclxuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJtZXRhZGF0YVwiLCBcImtpbmRcIl0pIHx8IENvcmUucGF0aEdldChlbnRpdHksIFwia2luZFwiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RvcihlbnRpdHkpIHtcclxuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJzcGVjXCIsIFwic2VsZWN0b3JcIl0pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldEhvc3QocG9kKSB7XHJcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KHBvZCwgW1wic3BlY1wiLCBcImhvc3RcIl0pIHx8IENvcmUucGF0aEdldChwb2QsIFtcInNwZWNcIiwgXCJub2RlTmFtZVwiXSkgfHwgQ29yZS5wYXRoR2V0KHBvZCwgW1wic3RhdHVzXCIsIFwiaG9zdElQXCJdKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0dXMocG9kKSB7XHJcbiAgICByZXR1cm4gQ29yZS5wYXRoR2V0KHBvZCwgW1wic3RhdHVzXCIsIFwicGhhc2VcIl0pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFBvcnRzKHNlcnZpY2UpIHtcclxuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoc2VydmljZSwgW1wic3BlY1wiLCBcInBvcnRzXCJdKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvblRpbWVzdGFtcChlbnRpdHkpIHtcclxuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LCBbXCJtZXRhZGF0YVwiLCBcImNyZWF0aW9uVGltZXN0YW1wXCJdKTtcclxuICB9O1xyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbnMoZW50aXR5KXtcclxuICAgIHJldHVybiBDb3JlLnBhdGhHZXQoZW50aXR5LFtcIm1ldGFkYXRhXCIsXCJhbm5vdGF0aW9uc1wiXSk7XHJcbiAgfVxyXG5cclxuICAvL3ZhciBmYWJyaWNEb21haW4gPSBGYWJyaWMuam14RG9tYWluO1xyXG4gIHZhciBmYWJyaWNEb21haW4gPSBcImlvLmZhYnJpYzhcIjtcclxuICBleHBvcnQgdmFyIG1iZWFuID0gZmFicmljRG9tYWluICsgXCI6dHlwZT1LdWJlcm5ldGVzXCI7XHJcbiAgZXhwb3J0IHZhciBtYW5hZ2VyTUJlYW4gPSBmYWJyaWNEb21haW4gKyBcIjp0eXBlPUt1YmVybmV0ZXNNYW5hZ2VyXCI7XHJcbiAgZXhwb3J0IHZhciBhcHBWaWV3TUJlYW4gPSBmYWJyaWNEb21haW4gKyBcIjp0eXBlPUFwcFZpZXdcIjtcclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGlzS3ViZXJuZXRlcyh3b3Jrc3BhY2U/KSB7XHJcbiAgICAvLyByZXR1cm4gd29ya3NwYWNlLnRyZWVDb250YWluc0RvbWFpbkFuZFByb3BlcnRpZXMoZmFicmljRG9tYWluLCB7dHlwZTogXCJLdWJlcm5ldGVzXCJ9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGlzS3ViZXJuZXRlc1RlbXBsYXRlTWFuYWdlcih3b3Jrc3BhY2U/KSB7XHJcbiAgICAvLyByZXR1cm4gd29ya3NwYWNlLnRyZWVDb250YWluc0RvbWFpbkFuZFByb3BlcnRpZXMoZmFicmljRG9tYWluLCB7dHlwZTogXCJLdWJlcm5ldGVzVGVtcGxhdGVNYW5hZ2VyXCJ9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQXBwVmlldyh3b3Jrc3BhY2U/KSB7XHJcbiAgICAvLyByZXR1cm4gd29ya3NwYWNlLnRyZWVDb250YWluc0RvbWFpbkFuZFByb3BlcnRpZXMoZmFicmljRG9tYWluLCB7dHlwZTogXCJBcHBWaWV3XCJ9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFN0cmlwcGVkUGF0aE5hbWUoKTpzdHJpbmcge1xyXG4gICAgdmFyIHBhdGhOYW1lID0gQ29yZS50cmltTGVhZGluZygodGhpcy4kbG9jYXRpb24ucGF0aCgpIHx8ICcvJyksIFwiI1wiKTtcclxuICAgIHBhdGhOYW1lID0gcGF0aE5hbWUucmVwbGFjZSgvXlxcLy8sICcnKTtcclxuICAgIHJldHVybiBwYXRoTmFtZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBsaW5rQ29udGFpbnMoLi4ud29yZHM6U3RyaW5nW10pOmJvb2xlYW4ge1xyXG4gICAgdmFyIHBhdGhOYW1lID0gdGhpcy5nZXRTdHJpcHBlZFBhdGhOYW1lKCk7XHJcbiAgICByZXR1cm4gXy5ldmVyeSh3b3JkcywgKHdvcmQ6c3RyaW5nKSA9PiBwYXRoTmFtZS5pbmRleE9mKHdvcmQpICE9PSAwKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGxpbmsgaXMgYWN0aXZlLiBUaGUgbGluayBjYW4gb21pdCB0aGUgbGVhZGluZyAjIG9yIC8gaWYgbmVjZXNzYXJ5LlxyXG4gICAqIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIG9mIHRoZSBVUkwgYXJlIGlnbm9yZWQgaW4gdGhlIGNvbXBhcmlzb24uXHJcbiAgICogQG1ldGhvZCBpc0xpbmtBY3RpdmVcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gaHJlZlxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIGxpbmsgaXMgYWN0aXZlXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0FjdGl2ZShocmVmOnN0cmluZyk6Ym9vbGVhbiB7XHJcbiAgICAvLyBsZXRzIHRyaW0gdGhlIGxlYWRpbmcgc2xhc2hcclxuICAgIHZhciBwYXRoTmFtZSA9IGdldFN0cmlwcGVkUGF0aE5hbWUoKTtcclxuXHJcbiAgICB2YXIgbGluayA9IENvcmUudHJpbUxlYWRpbmcoaHJlZiwgXCIjXCIpO1xyXG4gICAgbGluayA9IGxpbmsucmVwbGFjZSgvXlxcLy8sICcnKTtcclxuICAgIC8vIHN0cmlwIGFueSBxdWVyeSBhcmd1bWVudHNcclxuICAgIHZhciBpZHggPSBsaW5rLmluZGV4T2YoJz8nKTtcclxuICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICBsaW5rID0gbGluay5zdWJzdHJpbmcoMCwgaWR4KTtcclxuICAgIH1cclxuICAgIGlmICghcGF0aE5hbWUubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBsaW5rID09PSBwYXRoTmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBfLnN0YXJ0c1dpdGgocGF0aE5hbWUsIGxpbmspO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHNldEpzb24oJHNjb3BlLCBpZCwgY29sbGVjdGlvbikge1xyXG4gICAgJHNjb3BlLmlkID0gaWQ7XHJcbiAgICBpZiAoISRzY29wZS5mZXRjaGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghaWQpIHtcclxuICAgICAgJHNjb3BlLmpzb24gPSAnJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFjb2xsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBpdGVtID0gY29sbGVjdGlvbi5maW5kKChpdGVtKSA9PiB7IHJldHVybiBnZXROYW1lKGl0ZW0pID09PSBpZDsgfSk7XHJcbiAgICBpZiAoaXRlbSkge1xyXG4gICAgICAkc2NvcGUuanNvbiA9IGFuZ3VsYXIudG9Kc29uKGl0ZW0sIHRydWUpO1xyXG4gICAgICAkc2NvcGUuaXRlbSA9IGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAkc2NvcGUuaWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICRzY29wZS5qc29uID0gJyc7XHJcbiAgICAgICRzY29wZS5pdGVtID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbGFiZWxzIHRleHQgc3RyaW5nIHVzaW5nIHRoZSA8Y29kZT5rZXkxPXZhbHVlMSxrZXkyPXZhbHVlMiwuLi4uPC9jb2RlPiBmb3JtYXRcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gbGFiZWxzVG9TdHJpbmcobGFiZWxzLCBzZXBlcmF0b3JUZXh0ID0gbGFiZWxGaWx0ZXJUZXh0U2VwYXJhdG9yKSB7XHJcbiAgICB2YXIgYW5zd2VyID0gXCJcIjtcclxuICAgIGFuZ3VsYXIuZm9yRWFjaChsYWJlbHMsICh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgIHZhciBzZXBhcmF0b3IgPSBhbnN3ZXIgPyBzZXBlcmF0b3JUZXh0IDogXCJcIjtcclxuXHJcbiAgICAgIGFuc3dlciArPSBzZXBhcmF0b3IgKyBrZXkgKyBcIj1cIiArIHZhbHVlO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYW5zd2VyO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGxhYmVsc0Zvcm1hdChyZXBsaWNhcyl7ICAgXHJcbiAgICB2YXIgYW5ub3Rpb24gPSBnZXRBbm5vdGF0aW9ucyhyZXBsaWNhcyk7XHJcbiAgICB2YXIgbGFibGVzID0gZ2V0TGFiZWxzKHJlcGxpY2FzKTsgICAgXHJcbiAgICB2YXIgaGFzQ2hpbmVzZVZlcnNpb24gPSBsYWJsZXNbXCJ2ZXJzaW9uXCJdLmluZGV4T2YoXCLniYjmnKxcIikgPT0gLTEgPyBcIueJiOacrFwiICsgbGFibGVzW1widmVyc2lvblwiXSA6IGxhYmxlc1tcInZlcnNpb25cIl0gOyAgIFxyXG4gICAgcmV0dXJue1xyXG4gICAgICBpc0V4dHJhY3Q6IGxhYmxlc1tcImlzRXh0cmFjdFwiXSxcclxuICAgICAgaXNUYXJnZXQ6IGxhYmxlc1tcImlzVGFyZ2V0XCJdLFxyXG4gICAgICBzdGF0dXM6IGxhYmxlc1tcInN0YXR1c1wiXSxcclxuICAgICAgc3R5bGU6IGxhYmxlc1tcInN0eWxlXCJdLFxyXG4gICAgICBjaXR5TmFtZTogYW5ub3Rpb25bXCJjaXR5TmFtZVwiXSxcclxuICAgICAgZGlzdHJpY3ROYW1lOiBhbm5vdGlvbltcImRpc3RyaWN0TmFtZVwiXSxcclxuICAgICAgc3lzdGVtTmFtZTogYW5ub3Rpb25bXCJzeXN0ZW1OYW1lXCJdLFxyXG4gICAgICB5ZWFyOiBhbm5vdGlvbltcInllYXJcIl0sXHJcbiAgICAgIHZlcnNpb246IGhhc0NoaW5lc2VWZXJzaW9uXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCkge1xyXG4gICAgJHNjb3BlLmJhc2VVcmkgPSBDb3JlLnRyaW1UcmFpbGluZyhDb3JlLnVybChcIi9cIikgfHwgXCJcIiwgXCIvXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcclxuXHJcbiAgICBmdW5jdGlvbiBoYXNTZXJ2aWNlKG5hbWUpIHtcclxuICAgICAgaWYgKGluamVjdG9yKSB7XHJcbiAgICAgICAgdmFyIFNlcnZpY2VSZWdpc3RyeSA9IGluamVjdG9yLmdldDxhbnk+KFwiU2VydmljZVJlZ2lzdHJ5XCIpO1xyXG4gICAgICAgIGlmIChTZXJ2aWNlUmVnaXN0cnkpIHtcclxuICAgICAgICAgIHJldHVybiBTZXJ2aWNlUmVnaXN0cnkuaGFzU2VydmljZShuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5oYXNTZXJ2aWNlS2liYW5hID0gKCkgPT4gaGFzU2VydmljZShraWJhbmFTZXJ2aWNlTmFtZSk7XHJcbiAgICAkc2NvcGUuaGFzU2VydmljZUdvZ3MgPSAoKSA9PiBoYXNTZXJ2aWNlKGdvZ3NTZXJ2aWNlTmFtZSk7XHJcbiAgICAkc2NvcGUuaGFzU2VydmljZUZvcmdlID0gKCkgPT4gaGFzU2VydmljZShmYWJyaWM4Rm9yZ2VTZXJ2aWNlTmFtZSk7XHJcbiAgICAkc2NvcGUuaGFzU2VydmljZUFwaW1hbiA9ICgpID0+IGhhc1NlcnZpY2UoYXBpbWFuU2VydmljZU5hbWUpO1xyXG5cclxuICAgICRzY29wZS52aWV3VGVtcGxhdGVzID0gKCkgPT4ge1xyXG4gICAgICB2YXIgcmV0dXJuVG8gPSAkbG9jYXRpb24udXJsKCk7XHJcbiAgICAgICRsb2NhdGlvbi5wYXRoKCcva3ViZXJuZXRlcy90ZW1wbGF0ZXMnKS5zZWFyY2goeydyZXR1cm5Ubyc6IHJldHVyblRvfSk7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5uYW1lc3BhY2UgPSAkcm91dGVQYXJhbXMubmFtZXNwYWNlIHx8ICRzY29wZS5uYW1lc3BhY2UgfHwgS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlIHx8IGRlZmF1bHROYW1lc3BhY2U7XHJcbiAgICBpZiAoJHNjb3BlLm5hbWVzcGFjZSAhPSBLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UpIHtcclxuICAgICAgS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlID0gJHNjb3BlLm5hbWVzcGFjZTtcclxuXHJcbiAgICAgIC8vIGxldHMgc2hvdyBwYWdlIGlzIGdvaW5nIHRvIHJlbG9hZFxyXG4gICAgICBpZiAoJHNjb3BlLm1vZGVsKSB7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgS3ViZXJuZXRlcy5zZXRDdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgkc2NvcGUubmFtZXNwYWNlKTtcclxuXHJcbiAgICAkc2NvcGUuZm9yZ2VFbmFibGVkID0gaXNGb3JnZUVuYWJsZWQoKTtcclxuXHJcbiAgICAkc2NvcGUucHJvamVjdElkID0gJHJvdXRlUGFyYW1zW1wicHJvamVjdFwiXSB8fCAkc2NvcGUucHJvamVjdElkIHx8ICRzY29wZS5pZDtcclxuICAgIHZhciBzaG93UHJvamVjdE5hdkJhcnMgPSBmYWxzZTtcclxuICAgIGlmICgkc2NvcGUucHJvamVjdElkICYmIHNob3dQcm9qZWN0TmF2QmFycykge1xyXG4gICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLnByb2plY3RJZCk7XHJcbiAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLnByb2plY3RJZCwgbnVsbCwgJHNjb3BlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZUVudmlyb25tZW50QnJlYWRjcnVtYnMoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyk7XHJcbiAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlRW52aXJvbm1lbnRTdWJOYXZCYXJzKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgkc2NvcGUucHJvamVjdElkKSB7XHJcbiAgICAgICRzY29wZS4kcHJvamVjdExpbmsgPSBEZXZlbG9wZXIucHJvamVjdExpbmsoJHNjb3BlLnByb2plY3RJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmxpbmsgPSAoaHJlZikgPT4ge1xyXG4gICAgICBpZiAoIWhyZWYpIHtcclxuICAgICAgICByZXR1cm4gaHJlZjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJHNjb3BlLiRwcm9qZWN0TGluaykge1xyXG4gICAgICAgIHJldHVybiBEZXZlbG9wZXIubmFtZXNwYWNlTGluaygkc2NvcGUsICRyb3V0ZVBhcmFtcywgaHJlZi5yZXBsYWNlKC9eXFwva3ViZXJuZXRlcy8sICcnKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGhyZWY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuY29kZU1pcnJvck9wdGlvbnMgPSB7XHJcbiAgICAgIGxpbmVXcmFwcGluZyA6IHRydWUsXHJcbiAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxyXG4gICAgICByZWFkT25seTogJ25vY3Vyc29yJyxcclxuICAgICAgbW9kZToge25hbWU6IFwiamF2YXNjcmlwdFwiLCBqc29uOiB0cnVlfVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUucmVzaXplRGlhbG9nID0ge1xyXG4gICAgICBjb250cm9sbGVyOiBudWxsLFxyXG4gICAgICBuZXdSZXBsaWNhczogMCxcclxuICAgICAgZGlhbG9nOiBuZXcgVUkuRGlhbG9nKCksXHJcbiAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICB2YXIgcmVzaXplRGlhbG9nID0gJHNjb3BlLnJlc2l6ZURpYWxvZztcclxuICAgICAgICByZXNpemVEaWFsb2cuZGlhbG9nLmNsb3NlKCk7XHJcbiAgICAgICAgcmVzaXplQ29udHJvbGxlcigkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwgcmVzaXplRGlhbG9nLmNvbnRyb2xsZXIsIHJlc2l6ZURpYWxvZy5uZXdSZXBsaWNhcywgKCkgPT4geyBsb2cuZGVidWcoXCJ1cGRhdGVkIG51bWJlciBvZiByZXBsaWNhc1wiKTsgfSlcclxuICAgICAgfSxcclxuICAgICAgb3BlbjogKGNvbnRyb2xsZXIpID0+IHtcclxuICAgICAgICB2YXIgcmVzaXplRGlhbG9nID0gJHNjb3BlLnJlc2l6ZURpYWxvZztcclxuICAgICAgICByZXNpemVEaWFsb2cuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XHJcbiAgICAgICAgcmVzaXplRGlhbG9nLm5ld1JlcGxpY2FzID0gQ29yZS5wYXRoR2V0KGNvbnRyb2xsZXIsIFtcInN0YXR1c1wiLCBcInJlcGxpY2FzXCJdKTtcclxuICAgICAgICByZXNpemVEaWFsb2cuZGlhbG9nLm9wZW4oKTtcclxuXHJcbiAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgJCgnI3JlcGxpY2FzJykuZm9jdXMoKTtcclxuICAgICAgICB9LCA1MCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNsb3NlOiAoKSA9PiB7XHJcbiAgICAgICAgJHNjb3BlLnJlc2l6ZURpYWxvZy5kaWFsb2cuY2xvc2UoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUudHJpZ2dlckJ1aWxkID0gKGJ1aWxkQ29uZmlnKSA9PiB7XHJcbiAgICAgIHZhciB1cmwgPSBidWlsZENvbmZpZy4kdHJpZ2dlclVybDtcclxuICAgICAgY29uc29sZS5sb2coXCJ0cmlnZ2VyaW5nIGJ1aWxkIGF0IHVybDogXCIgKyB1cmwpO1xyXG4gICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgLy92YXIgZGF0YSA9IHt9O1xyXG4gICAgICAgIHZhciBkYXRhID0gbnVsbDtcclxuICAgICAgICB2YXIgY29uZmlnID0ge1xyXG4gICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogXCJhcHBsaWNhdGlvbi9qc29uXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBuYW1lID0gQ29yZS5wYXRoR2V0KGJ1aWxkQ29uZmlnLCBbXCJtZXRhZGF0YVwiLCBcIm5hbWVcIl0pO1xyXG4gICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgXCJUcmlnZ2VyaW5nIGJ1aWxkIFwiICsgbmFtZSk7XHJcbiAgICAgICAgJGh0dHAucG9zdCh1cmwsIGRhdGEsIGNvbmZpZykuXHJcbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInRyaWdnZXIgd29ya2VkISBnb3QgZGF0YSBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcclxuICAgICAgICAgICAgLy8gVE9ETyBzaG91bGQgd2Ugc2hvdyBzb21lIGxpbmsgdG8gdGhlIGJ1aWxkXHJcbiAgICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdpbmZvJywgXCJCdWlsZGluZyBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgfSkuXHJcbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2Vycm9yJywgXCJGYWlsZWQgdG8gdHJpZ2dlciBidWlsZCBmb3IgXCIgKyBuYW1lICsgXCIuIFJldHVybmVkIGNvZGU6IFwiICsgc3RhdHVzICsgXCIgXCIgKyBkYXRhKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHVwZGF0ZSB0aGUgVVJMIGlmIHRoZSBmaWx0ZXIgaXMgY2hhbmdlZFxyXG4gICAgJHNjb3BlLiR3YXRjaChcInRhYmxlQ29uZmlnLmZpbHRlck9wdGlvbnMuZmlsdGVyVGV4dFwiLCAodGV4dCkgPT4ge1xyXG4gICAgICAvL3ZhciBmaWx0ZXJUZXh0ID0gS3ViZXJuZXRlcy5maW5kVmFsZU9mTGFiZWxzKHRleHQpO1xyXG4gICAgICAkbG9jYXRpb24uc2VhcmNoKFwicVwiLCB0ZXh0KTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS4kb24oXCJsYWJlbEZpbHRlclVwZGF0ZVwiLCAoJGV2ZW50LCB0ZXh0KSA9PiB7XHJcbiAgICAgIHZhciBmaWx0ZXJPcHRpb25zID0gKCRzY29wZS50YWJsZUNvbmZpZyB8fCB7fSkuZmlsdGVyT3B0aW9ucyB8fCB7fTtcclxuICAgICAgdmFyIGN1cnJlbnRGaWx0ZXIgPSBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQ7XHJcbiAgICAgIGlmIChDb3JlLmlzQmxhbmsoY3VycmVudEZpbHRlcikpIHtcclxuICAgICAgICBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQgPSB0ZXh0O1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB2YXIgZXhwcmVzc2lvbnMgPSBjdXJyZW50RmlsdGVyLnNwbGl0KC9cXHMrLyk7XHJcbiAgICAgICAgaWYgKGV4cHJlc3Npb25zLmluZGV4T2YodGV4dCkgIT09IC0xKSB7XHJcbiAgICAgICAgICAvLyBsZXRzIGV4Y2x1ZGUgdGhpcyBmaWx0ZXIgZXhwcmVzc2lvblxyXG4gICAgICAgICAgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9ucy5yZW1vdmUodGV4dCk7XHJcbiAgICAgICAgICBmaWx0ZXJPcHRpb25zLmZpbHRlclRleHQgPSBleHByZXNzaW9ucy5qb2luKFwiIFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZmlsdGVyT3B0aW9ucy5maWx0ZXJUZXh0ID0gY3VycmVudEZpbHRlciArIFwiIFwiICsgdGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgJHNjb3BlLmlkID0gdW5kZWZpbmVkO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBvZHMgdGhhdCBhcmUgcmVhZHlcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gcmVhZHlQb2RDb3VudChzZXJ2aWNlKSB7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKChzZXJ2aWNlIHx8IHt9KS4kcG9kcywgKHBvZCk9PiB7XHJcbiAgICAgIGlmIChwb2QuJHJlYWR5KSB7XHJcbiAgICAgICAgY291bnQrKztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY291bnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBzZXJ2aWNlIGxpbmsgVVJMIGZvciBlaXRoZXIgdGhlIHNlcnZpY2UgbmFtZSBvciB0aGUgc2VydmljZSBvYmplY3RcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gc2VydmljZUxpbmtVcmwoc2VydmljZSwgaHR0cE9ubHkgPSBmYWxzZSkge1xyXG4gICAgaWYgKGFuZ3VsYXIuaXNPYmplY3Qoc2VydmljZSkpIHtcclxuICAgICAgdmFyIHBvcnRhbElQID0gc2VydmljZS4kaG9zdDtcclxuICAgICAgLy8gbGV0cyBhc3N1bWUgbm8gY3VzdG9tIHBvcnQgZm9yIG5vdyBmb3IgZXh0ZXJuYWwgcm91dGVzXHJcbiAgICAgIHZhciBwb3J0ID0gbnVsbDtcclxuICAgICAgdmFyIHByb3RvY29sID0gXCJodHRwOi8vXCI7XHJcbiAgICAgIHZhciBzcGVjID0gc2VydmljZS5zcGVjO1xyXG4gICAgICBpZiAoc3BlYykge1xyXG4gICAgICAgIGlmICghcG9ydGFsSVApIHtcclxuICAgICAgICAgIHBvcnRhbElQID0gc3BlYy5wb3J0YWxJUDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhc0h0dHBzID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGhhc0h0dHAgPSBmYWxzZTtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goc3BlYy5wb3J0cywgKHBvcnRTcGVjKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcCA9IHBvcnRTcGVjLnBvcnQ7XHJcbiAgICAgICAgICBpZiAocCkge1xyXG4gICAgICAgICAgICBpZiAocCA9PT0gNDQzKSB7XHJcbiAgICAgICAgICAgICAgaGFzSHR0cHMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAgPT09IDgwKSB7XHJcbiAgICAgICAgICAgICAgaGFzSHR0cCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwb3J0KSB7XHJcbiAgICAgICAgICAgICAgcG9ydCA9IHA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIWhhc0h0dHBzICYmICFoYXNIdHRwICYmIHBvcnQpIHtcclxuICAgICAgICAgIC8vIGxldHMgdHJlYXQgODA4MCBhcyBodHRwIHdoaWNoIGlzIGEgY29tbW9uIHNlcnZpY2UgdG8gZXhwb3J0XHJcbiAgICAgICAgICBpZiAocG9ydCA9PT0gODA4MCkge1xyXG4gICAgICAgICAgICBoYXNIdHRwID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAocG9ydCA9PT0gODQ0Mykge1xyXG4gICAgICAgICAgICBoYXNIdHRwcyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwb3J0YWxJUCkge1xyXG4gICAgICAgIGlmIChoYXNIdHRwcykge1xyXG4gICAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9cIiArIHBvcnRhbElQO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaGFzSHR0cCkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiaHR0cDovL1wiICsgcG9ydGFsSVA7XHJcbiAgICAgICAgfSBlbHNlIGlmICghaHR0cE9ubHkpIHtcclxuICAgICAgICAgIGlmIChwb3J0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm90b2NvbCArIHBvcnRhbElQICsgXCI6XCIgKyBwb3J0ICsgXCIvXCI7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvdG9jb2wgKyBwb3J0YWxJUDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoc2VydmljZSkge1xyXG4gICAgICB2YXIgc2VydmljZUlkID0gc2VydmljZS50b1N0cmluZygpO1xyXG4gICAgICBpZiAoc2VydmljZUlkKSB7XHJcbiAgICAgICAgdmFyIFNlcnZpY2VSZWdpc3RyeSA9IGdldFNlcnZpY2VSZWdpc3RyeSgpO1xyXG4gICAgICAgIGlmIChTZXJ2aWNlUmVnaXN0cnkpIHtcclxuICAgICAgICAgIHJldHVybiBTZXJ2aWNlUmVnaXN0cnkuc2VydmljZUxpbmsoc2VydmljZUlkKSB8fCBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGNvdW50ZXJzIGZvciB0aGUgcG9kQ291bnRlcnMgb2JqZWN0XHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHBvZENvdW50ZXJUb3RhbCgkcG9kQ291bnRlcnMpIHtcclxuICAgIHZhciBhbnN3ZXIgPSAwO1xyXG4gICAgaWYgKCRwb2RDb3VudGVycykge1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2goW1wicmVhZHlcIiwgXCJ2YWxpZFwiLCBcIndhaXRpbmdcIiwgXCJlcnJvclwiXSwgKG5hbWUpID0+IHtcclxuICAgICAgICB2YXIgdmFsdWUgPSAkcG9kQ291bnRlcnNbbmFtZV0gfHwgMDtcclxuICAgICAgICBhbnN3ZXIgKz0gdmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFuc3dlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdpdmVuIHRoZSBsaXN0IG9mIHBvZHMgbGV0cyBpdGVyYXRlIHRocm91Z2ggdGhlbSBhbmQgZmluZCBhbGwgcG9kcyBtYXRjaGluZyB0aGUgc2VsZWN0b3JcclxuICAgKiBhbmQgcmV0dXJuIGNvdW50ZXJzIGJhc2VkIG9uIHRoZSBzdGF0dXMgb2YgdGhlIHBvZFxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb2RDb3VudGVycyhzZWxlY3RvciwgcG9kcywgb3V0cHV0UG9kcyA9IFtdLCBwb2RMaW5rUXVlcnkgPSBudWxsLCBwb2RMaW5rVXJsID0gbnVsbCkge1xyXG4gICAgaWYgKCFwb2RMaW5rVXJsKSB7XHJcbiAgICAgIHBvZExpbmtVcmwgPSBcIi9rdWJlcm5ldGVzL3BvZHNcIjtcclxuICAgIH1cclxuICAgIHZhciBmaWx0ZXJGbjtcclxuICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24oc2VsZWN0b3IpKSB7XHJcbiAgICAgIGZpbHRlckZuID0gc2VsZWN0b3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmaWx0ZXJGbiA9IChwb2QpID0+IHNlbGVjdG9yTWF0Y2hlcyhzZWxlY3RvciwgZ2V0TGFiZWxzKHBvZCkpO1xyXG4gICAgfVxyXG4gICAgdmFyIGFuc3dlciA9IHtcclxuICAgICAgcG9kc0xpbms6IFwiXCIsXHJcbiAgICAgIHJlYWR5OiAwLFxyXG4gICAgICB2YWxpZDogMCxcclxuICAgICAgd2FpdGluZzogMCxcclxuICAgICAgZXJyb3I6IDBcclxuICAgIH07XHJcbiAgICBpZiAoc2VsZWN0b3IpIHtcclxuICAgICAgaWYgKCFwb2RMaW5rUXVlcnkpIHtcclxuICAgICAgICBwb2RMaW5rUXVlcnkgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIiBcIik7XHJcbiAgICAgIH1cclxuICAgICAgYW5zd2VyLnBvZHNMaW5rID0gcG9kTGlua1VybCArIFwiP3E9XCIgKyBlbmNvZGVVUklDb21wb25lbnQocG9kTGlua1F1ZXJ5KTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIHBvZCA9PiB7XHJcbiAgICAgICAgaWYgKGZpbHRlckZuKHBvZCkpIHtcclxuICAgICAgICAgIG91dHB1dFBvZHMucHVzaChwb2QpO1xyXG4gICAgICAgICAgdmFyIHN0YXR1cyA9IGdldFN0YXR1cyhwb2QpO1xyXG4gICAgICAgICAgaWYgKHN0YXR1cykge1xyXG4gICAgICAgICAgICB2YXIgbG93ZXIgPSBzdGF0dXMudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJydW5cIikpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNSZWFkeShwb2QpKSB7XHJcbiAgICAgICAgICAgICAgICBhbnN3ZXIucmVhZHkgKz0gMTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYW5zd2VyLnZhbGlkICs9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJ3YWl0XCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJwZW5kXCIpKSB7XHJcbiAgICAgICAgICAgICAgYW5zd2VyLndhaXRpbmcgKz0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChsb3dlci5zdGFydHNXaXRoKFwidGVybVwiKSB8fCBsb3dlci5zdGFydHNXaXRoKFwiZXJyb3JcIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcImZhaWxcIikpIHtcclxuICAgICAgICAgICAgICBhbnN3ZXIuZXJyb3IgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYW5zd2VyLmVycm9yICs9IDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4ganNvbiBpbnRvIGFuIGFycmF5IG9mIGl0ZW1zLiBJZiB0aGUganNvbiBjb250YWlucyBhIG5lc3RlZCBzZXQgb2YgaXRlbXMgdGhlbiB0aGF0IGlzIHNvcnRlZDsgc28gdGhhdCBzZXJ2aWNlc1xyXG4gICAqIGFyZSBwcm9jZXNzZWQgZmlyc3Q7IHRoZW4gdHVybmVkIGludG8gYW4gYXJyYXkuIE90aGVyd2lzZSB0aGUganNvbiBpcyBwdXQgaW50byBhbiBhcnJheSBzbyBpdCBjYW4gYmUgcHJvY2Vzc2VkIHBvbHltb3JwaGljYWxseVxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0S3ViZXJuZXRlc0pzb25Ub0l0ZW1zKGpzb24pIHtcclxuICAgIHZhciBpdGVtcyA9IGpzb24uaXRlbXM7XHJcbiAgICBpZiAoYW5ndWxhci5pc0FycmF5KGl0ZW1zKSkge1xyXG4gICAgICAvLyBUT0RPIHdlIGNvdWxkIGNoZWNrIGZvciBMaXN0IG9yIENvbmZpZyB0eXBlcyBoZXJlIGFuZCB3YXJuIGlmIG5vdFxyXG5cclxuICAgICAgLy8gc29ydCB0aGUgc2VydmljZXMgZmlyc3RcclxuICAgICAgdmFyIGFuc3dlciA9IFtdO1xyXG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ua2luZCA9PT0gXCJTZXJ2aWNlXCIpIHtcclxuICAgICAgICAgIGFuc3dlci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5raW5kICE9PSBcIlNlcnZpY2VcIikge1xyXG4gICAgICAgICAgYW5zd2VyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBbanNvbl07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gaXNWMWJldGExT3IyKCkge1xyXG4gICAgcmV0dXJuIGRlZmF1bHRBcGlWZXJzaW9uID09PSBcInYxYmV0YTFcIiB8fCBkZWZhdWx0QXBpVmVyc2lvbiA9PT0gXCJ2MWJldGEyXCI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbGluayB0byB0aGUgZGV0YWlsIHBhZ2UgZm9yIHRoZSBnaXZlbiBlbnRpdHlcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gZW50aXR5UGFnZUxpbmsob2JqKSB7XHJcbiAgICBpZiAob2JqKSB7XHJcbiAgICAgIGZ1bmN0aW9uIGdldExpbmsoZW50aXR5KSB7XHJcbiAgICAgICAgdmFyIHZpZXdMaW5rID0gZW50aXR5W1wiJHZpZXdMaW5rXCJdO1xyXG4gICAgICAgIGlmICh2aWV3TGluaykge1xyXG4gICAgICAgICAgcmV0dXJuIHZpZXdMaW5rO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaWQgPSBnZXROYW1lKGVudGl0eSk7XHJcbiAgICAgICAgdmFyIGtpbmQgPSBnZXRLaW5kKGVudGl0eSk7XHJcbiAgICAgICAgaWYgKGtpbmQgJiYgaWQpIHtcclxuICAgICAgICAgIHZhciBwYXRoID0ga2luZC5zdWJzdHJpbmcoMCwgMSkudG9Mb3dlckNhc2UoKSArIGtpbmQuc3Vic3RyaW5nKDEpICsgXCJzXCI7XHJcbiAgICAgICAgICB2YXIgbmFtZXNwYWNlID0gZ2V0TmFtZXNwYWNlKGVudGl0eSk7XHJcbiAgICAgICAgICBpZiAobmFtZXNwYWNlICYmICFpc0lnbm9yZU5hbWVzcGFjZUtpbmQoa2luZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvcmUudXJsKFVybEhlbHBlcnMuam9pbignL2t1YmVybmV0ZXMvbmFtZXNwYWNlJywgbmFtZXNwYWNlLCBwYXRoLCBpZCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvcmUudXJsKFVybEhlbHBlcnMuam9pbignL2t1YmVybmV0ZXMnLCBwYXRoLCBpZCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB2YXIgYmFzZUxpbmsgPSBnZXRMaW5rKG9iaik7XHJcbiAgICAgIGlmICghSGF3dGlvQ29yZS5pbmplY3RvciB8fCAhYmFzZUxpbmspIHtcclxuICAgICAgICByZXR1cm4gYmFzZUxpbms7XHJcbiAgICAgIH1cclxuICAgICAgdmFyICRyb3V0ZVBhcmFtcyA9IEhhd3Rpb0NvcmUuaW5qZWN0b3IuZ2V0PG5nLnJvdXRlLklSb3V0ZVBhcmFtc1NlcnZpY2U+KCckcm91dGVQYXJhbXMnKTtcclxuICAgICAgdmFyIHByb2plY3RJZCA9ICRyb3V0ZVBhcmFtc1sncHJvamVjdCddIHx8ICRyb3V0ZVBhcmFtc1sncHJvamVjdCddO1xyXG4gICAgICBpZiAoIXByb2plY3RJZCkge1xyXG4gICAgICAgIHJldHVybiBiYXNlTGluaztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKERldmVsb3Blci5wcm9qZWN0TGluayhwcm9qZWN0SWQpLCBiYXNlTGluay5yZXBsYWNlKC9eXFwva3ViZXJuZXRlc1xcLy8sICcnKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gcmVzb3VyY2VLaW5kVG9VcmlQYXRoKGtpbmQpIHtcclxuICAgIHZhciBraW5kUGF0aCA9IGtpbmQudG9Mb3dlckNhc2UoKSArIFwic1wiO1xyXG4gICAgaWYgKGtpbmRQYXRoID09PSBcInJlcGxpY2F0aW9uQ29udHJvbGxlcnNcIiAmJiAhaXNWMWJldGExT3IyKCkpIHtcclxuICAgICAga2luZFBhdGggPSBcInJlcGxpY2F0aW9uY29udHJvbGxlcnNcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBraW5kUGF0aDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGlzSWdub3JlTmFtZXNwYWNlS2luZChraW5kKSB7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJIb3N0XCIgfHwga2luZCA9PT0gXCJNaW5pb25cIjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHJvb3QgVVJMIGZvciB0aGUga2luZFxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzVXJsRm9yS2luZChLdWJlcm5ldGVzQXBpVVJMLCBraW5kLCBuYW1lc3BhY2UgPSBudWxsLCBwYXRoID0gbnVsbCkge1xyXG4gICAgdmFyIHBhdGhTZWdtZW50ID0gXCJcIjtcclxuICAgIGlmIChwYXRoKSB7XHJcbiAgICAgIHBhdGhTZWdtZW50ID0gXCIvXCIgKyBDb3JlLnRyaW1MZWFkaW5nKHBhdGgsIFwiL1wiKTtcclxuICAgIH1cclxuICAgIHZhciBraW5kUGF0aCA9IHJlc291cmNlS2luZFRvVXJpUGF0aChraW5kKTtcclxuICAgIHZhciBpZ25vcmVOYW1lc3BhY2UgPSBpc0lnbm9yZU5hbWVzcGFjZUtpbmQoa2luZCk7XHJcbiAgICBpZiAoaXNWMWJldGExT3IyKCkgfHwgaWdub3JlTmFtZXNwYWNlKSB7XHJcbiAgICAgIHZhciBwb3N0Zml4ID0gXCJcIjtcclxuICAgICAgaWYgKG5hbWVzcGFjZSAmJiAhaWdub3JlTmFtZXNwYWNlKSB7XHJcbiAgICAgICAgcG9zdGZpeCA9IFwiP25hbWVzcGFjZT1cIiArIG5hbWVzcGFjZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXNBcGlVUkwsIGtpbmRQYXRoLCBwYXRoU2VnbWVudCwgcG9zdGZpeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXNBcGlVUkwsIFwiL25hbWVzcGFjZXMvXCIsIG5hbWVzcGFjZSAsIGtpbmRQYXRoLCBwYXRoU2VnbWVudCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgYmFzZSBVUkwgZm9yIHRoZSBraW5kIG9mIGt1YmVybmV0ZXMgcmVzb3VyY2Ugb3IgbnVsbCBpZiBpdCBjYW5ub3QgYmUgZm91bmRcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24ga3ViZXJuZXRlc1VybEZvckl0ZW1LaW5kKEt1YmVybmV0ZXNBcGlVUkwsIGpzb24pIHtcclxuICAgIHZhciBraW5kID0ganNvbi5raW5kO1xyXG4gICAgaWYgKGtpbmQpIHtcclxuICAgICAgcmV0dXJuIGt1YmVybmV0ZXNVcmxGb3JLaW5kKEt1YmVybmV0ZXNBcGlVUkwsIGtpbmQsIGpzb24ubmFtZXNwYWNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxvZy53YXJuKFwiSWdub3JpbmcgbWlzc2luZyBraW5kIFwiICsga2luZCArIFwiIGZvciBrdWJlcm5ldGVzIGpzb246IFwiICsgYW5ndWxhci50b0pzb24oanNvbikpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlKEt1YmVybmV0ZXNBcGlVUkwsIHNlcnZpY2UsIHBhdGggPSBudWxsKSB7XHJcbiAgICB2YXIgcGF0aFNlZ21lbnQgPSBcIlwiO1xyXG4gICAgaWYgKHBhdGgpIHtcclxuICAgICAgcGF0aFNlZ21lbnQgPSBcIi9cIiArIENvcmUudHJpbUxlYWRpbmcocGF0aCwgXCIvXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGF0aFNlZ21lbnQgPSBcIi9cIjtcclxuICAgIH1cclxuICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2Uoc2VydmljZSk7XHJcbiAgICBpZiAoaXNWMWJldGExT3IyKCkpIHtcclxuICAgICAgdmFyIHBvc3RmaXggPSBcIj9uYW1lc3BhY2U9XCIgKyBuYW1lc3BhY2U7XHJcbiAgICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlc0FwaVVSTCwgXCIvcHJveHlcIiwgIGt1YmVybmV0ZXNOYW1lc3BhY2VQYXRoKCksIFwiL3NlcnZpY2VzL1wiICsgZ2V0TmFtZShzZXJ2aWNlKSArIHBhdGhTZWdtZW50ICsgcG9zdGZpeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXNBcGlVUkwsIFwiL3Byb3h5L25hbWVzcGFjZXMvXCIsIG5hbWVzcGFjZSwgXCIvc2VydmljZXMvXCIgKyBnZXROYW1lKHNlcnZpY2UpICsgcGF0aFNlZ21lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBrdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShzZXJ2aWNlLCBwYXRoID0gbnVsbCkge1xyXG4gICAgdmFyIGFwaVByZWZpeCA9IFVybEhlbHBlcnMuam9pbihrdWJlcm5ldGVzQXBpVXJsKCkpO1xyXG4gICAgcmV0dXJuIGt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2UoYXBpUHJlZml4LCBzZXJ2aWNlLCBwYXRoKTtcclxuXHJcbiAgfVxyXG4gIGV4cG9ydCBmdW5jdGlvbiBidWlsZENvbmZpZ1Jlc3RVcmwoaWQpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oYnVpbGRDb25maWdzUmVzdFVSTCgpLCBpZCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZGVwbG95bWVudENvbmZpZ1Jlc3RVcmwoaWQpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oZGVwbG95bWVudENvbmZpZ3NSZXN0VVJMKCksIGlkKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBpbWFnZVJlcG9zaXRvcnlSZXN0VXJsKGlkKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGltYWdlUmVwb3NpdG9yaWVzUmVzdFVSTCgpLCBpZCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gYnVpbGRSZXN0VXJsKGlkKSB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGJ1aWxkc1Jlc3RVUkwoKSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTG9nc1Jlc3RVcmwoaWQpIHtcclxuICAgIHJldHVybiBVcmxIZWxwZXJzLmpvaW4oYnVpbGRzUmVzdFVSTCgpLCBpZCwgXCJsb2dcIik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSdW5zIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiBKU09OXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHJ1bkFwcCgkbG9jYXRpb24sICRzY29wZSwgJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIGpzb24sIG5hbWUgPSBcIkFwcFwiLCBvblN1Y2Nlc3NGbiA9IG51bGwsIG5hbWVzcGFjZSA9IG51bGwsIG9uQ29tcGxldGVGbiA9IG51bGwpIHtcclxuICAgIGlmIChqc29uKSB7XHJcbiAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKGpzb24pKSB7XHJcbiAgICAgICAganNvbiA9IGFuZ3VsYXIuZnJvbUpzb24oanNvbik7XHJcbiAgICAgIH1cclxuICAgICAgbmFtZSA9IG5hbWUgfHwgXCJBcHBcIjtcclxuICAgICAgdmFyIHBvc3RmaXggPSBuYW1lc3BhY2UgPyBcIiBpbiBuYW1lc3BhY2UgXCIgKyBuYW1lc3BhY2UgOiBcIlwiO1xyXG4gICAgICBDb3JlLm5vdGlmaWNhdGlvbignaW5mbycsIFwiUnVubmluZyBcIiArIG5hbWUgKyBwb3N0Zml4KTtcclxuXHJcbiAgICAgIHZhciBpdGVtcyA9IGNvbnZlcnRLdWJlcm5ldGVzSnNvblRvSXRlbXMoanNvbik7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChpdGVtcywgKGl0ZW0pID0+IHtcclxuICAgICAgICB2YXIgdXJsID0ga3ViZXJuZXRlc1VybEZvckl0ZW1LaW5kKEt1YmVybmV0ZXNBcGlVUkwsIGl0ZW0pO1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICRodHRwLnBvc3QodXJsLCBpdGVtKS5cclxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJHb3Qgc3RhdHVzOiBcIiArIHN0YXR1cyArIFwiIG9uIHVybDogXCIgKyB1cmwgKyBcIiBkYXRhOiBcIiArIGRhdGEgKyBcIiBhZnRlciBwb3N0aW5nOiBcIiArIGFuZ3VsYXIudG9Kc29uKGl0ZW0pKTtcclxuICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9uQ29tcGxldGVGbikpIHtcclxuICAgICAgICAgICAgICAgIG9uQ29tcGxldGVGbigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICB9KS5cclxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzT2JqZWN0KGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZSA9IGRhdGEubWVzc2FnZTtcclxuICAgICAgICAgICAgICB2YXIgcmVhc29uID0gZGF0YS5yZWFzb247XHJcbiAgICAgICAgICAgICAgaWYgKHJlYXNvbiA9PT0gXCJBbHJlYWR5RXhpc3RzXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIGxldHMgaWdub3JlIGR1cGxpY2F0ZXNcclxuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImVudGl0eSBhbHJlYWR5IGV4aXN0cyBhdCBcIiArIHVybCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghbWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkZhaWxlZCB0byBQT1NUIHRvIFwiICsgdXJsICsgXCIgZ290IHN0YXR1czogXCIgKyBzdGF0dXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gc2F2ZSBcIiArIHVybCArIFwiIHN0YXR1czogXCIgKyBzdGF0dXMgKyBcIiByZXNwb25zZTogXCIgKyBhbmd1bGFyLnRvSnNvbihkYXRhLCB0cnVlKSk7XHJcbiAgICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKCdlcnJvcicsIG1lc3NhZ2UpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwb2QgaXMgcnVubmluZ1xyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1J1bm5pbmcocG9kQ3VycmVudFN0YXRlKSB7XHJcbiAgICB2YXIgc3RhdHVzID0gKHBvZEN1cnJlbnRTdGF0ZSB8fCB7fSkucGhhc2U7XHJcbiAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgIHZhciBsb3dlciA9IHN0YXR1cy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICByZXR1cm4gbG93ZXIuc3RhcnRzV2l0aChcInJ1blwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbGFiZWxzIG9iamVjdCBoYXMgYWxsIG9mIHRoZSBrZXkvdmFsdWUgcGFpcnMgZnJvbSB0aGUgc2VsZWN0b3JcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gc2VsZWN0b3JNYXRjaGVzKHNlbGVjdG9yLCBsYWJlbHMpIHtcclxuICAgIGlmIChhbmd1bGFyLmlzT2JqZWN0KGxhYmVscykpIHtcclxuICAgICAgdmFyIGFuc3dlciA9IHRydWU7XHJcbiAgICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWxlY3RvciwgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgIGlmIChhbnN3ZXIgJiYgbGFiZWxzW2tleV0gIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICBhbnN3ZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gYW5zd2VyICYmIGNvdW50ID4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHNlcnZpY2UgcmVnaXN0cnlcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZVJlZ2lzdHJ5KCkge1xyXG4gICAgdmFyIGluamVjdG9yID0gSGF3dGlvQ29yZS5pbmplY3RvcjtcclxuICAgIHJldHVybiBpbmplY3RvciA/IGluamVjdG9yLmdldDxhbnk+KFwiU2VydmljZVJlZ2lzdHJ5XCIpIDogbnVsbDtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbGluayB0byB0aGUga2liYW5hIGxvZ3Mgd2ViIGFwcGxpY2F0aW9uXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGtpYmFuYUxvZ3NMaW5rKFNlcnZpY2VSZWdpc3RyeSkge1xyXG4gICAgdmFyIGxpbmsgPSBTZXJ2aWNlUmVnaXN0cnkuc2VydmljZUxpbmsoa2liYW5hU2VydmljZU5hbWUpO1xyXG4gICAgaWYgKGxpbmspIHtcclxuICAgICAgaWYgKCFsaW5rLmVuZHNXaXRoKFwiL1wiKSkge1xyXG4gICAgICAgIGxpbmsgKz0gXCIvXCI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGxpbmsgKyBcIiMvZGFzaGJvYXJkL0ZhYnJpYzhcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIG9wZW5Mb2dzRm9yUG9kcyhTZXJ2aWNlUmVnaXN0cnksICR3aW5kb3csIG5hbWVzcGFjZSwgcG9kcykge1xyXG4gICAgdmFyIGxpbmsgPSBraWJhbmFMb2dzTGluayhTZXJ2aWNlUmVnaXN0cnkpO1xyXG4gICAgaWYgKGxpbmspIHtcclxuICAgICAgdmFyIHF1ZXJ5ID0gXCJcIjtcclxuICAgICAgdmFyIGNvdW50ID0gMDtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIChpdGVtKSA9PiB7XHJcbiAgICAgICAgdmFyIGlkID0gZ2V0TmFtZShpdGVtKTtcclxuICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgIHZhciBzcGFjZSA9IHF1ZXJ5ID8gXCIgT1IgXCIgOiBcIlwiO1xyXG4gICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgIHF1ZXJ5ICs9IHNwYWNlICsgJ1wiJyArIGlkICsgJ1wiJztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAocXVlcnkpIHtcclxuICAgICAgICBpZiAoY291bnQgPiAxKSB7XHJcbiAgICAgICAgICBxdWVyeSA9IFwiKFwiICsgcXVlcnkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcXVlcnkgPSAna3ViZXJuZXRlcy5uYW1lc3BhY2VfbmFtZTpcIicgKyBuYW1lc3BhY2UgKyAnXCIgQU5EIGt1YmVybmV0ZXMucG9kX25hbWU6JyArIHF1ZXJ5O1xyXG4gICAgICAgIGxpbmsgKz0gXCI/X2E9KHF1ZXJ5OihxdWVyeV9zdHJpbmc6KHF1ZXJ5OidcIiArIHF1ZXJ5ICsgXCInKSkpXCI7XHJcbiAgICAgICAgdmFyIG5ld1dpbmRvdyA9ICR3aW5kb3cub3BlbihsaW5rLCBcInZpZXdMb2dzXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gcmVzaXplQ29udHJvbGxlcigkaHR0cCwgS3ViZXJuZXRlc0FwaVVSTCwgcmVwbGljYXRpb25Db250cm9sbGVyLCBuZXdSZXBsaWNhcywgb25Db21wbGV0ZUZuID0gbnVsbCkge1xyXG4gICAgdmFyIGlkID0gZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xyXG4gICAgdmFyIG5hbWVzcGFjZSA9IGdldE5hbWVzcGFjZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpIHx8IFwiXCI7XHJcbiAgICB2YXIgdXJsID0ga3ViZXJuZXRlc1VybEZvcktpbmQoS3ViZXJuZXRlc0FwaVVSTCwgXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJcIiwgbmFtZXNwYWNlLCBpZCk7XHJcbiAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICBpZiAoZGF0YSkgeyAgICAgICAgICAgXHJcbiAgICAgICAgICB2YXIgZGVzaXJlZFN0YXRlID0gZGF0YS5zcGVjO1xyXG4gICAgICAgICAgaWYgKCFkZXNpcmVkU3RhdGUpIHtcclxuICAgICAgICAgICAgZGVzaXJlZFN0YXRlID0ge307XHJcbiAgICAgICAgICAgIGRhdGEuc3BlYyA9IGRlc2lyZWRTdGF0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRlc2lyZWRTdGF0ZS5yZXBsaWNhcyA9IG5ld1JlcGxpY2FzO1xyXG4gICAgICAgICAgJGh0dHAucHV0KHVybCwgZGF0YSkuXHJcbiAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwidXBkYXRlZCBjb250cm9sbGVyIFwiICsgdXJsKTtcclxuICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9uQ29tcGxldGVGbikpIHtcclxuICAgICAgICAgICAgICAgIG9uQ29tcGxldGVGbigpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gc2F2ZSBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkuXHJcbiAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHN0YXR1c1RleHRUb0Nzc0NsYXNzKHRleHQsIHJlYWR5ID0gZmFsc2UpIHtcclxuICAgIGlmICh0ZXh0KSB7XHJcbiAgICAgIHZhciBsb3dlciA9IHRleHQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJydW5cIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcIm9rXCIpKSB7XHJcbiAgICAgICAgaWYgKCFyZWFkeSkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiZmEgZmEtc3Bpbm5lciBmYS1zcGluIGdyZWVuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnZmEgZmEtcGxheS1jaXJjbGUgZ3JlZW4nO1xyXG4gICAgICB9IGVsc2UgaWYgKGxvd2VyLnN0YXJ0c1dpdGgoXCJ3YWl0XCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJwZW5kXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuICdmYSBmYS1kb3dubG9hZCc7XHJcbiAgICAgIH0gZWxzZSBpZiAobG93ZXIuc3RhcnRzV2l0aChcInRlcm1cIikgfHwgbG93ZXIuc3RhcnRzV2l0aChcImVycm9yXCIpIHx8IGxvd2VyLnN0YXJ0c1dpdGgoXCJmYWlsXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuICdmYSBmYS1vZmYgb3JhbmdlJztcclxuICAgICAgfSBlbHNlIGlmIChsb3dlci5zdGFydHNXaXRoKFwic3VjY2VlZGVkXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuICdmYSBmYS1jaGVjay1jaXJjbGUtbyBncmVlbic7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAnZmEgZmEtcXVlc3Rpb24gcmVkJztcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBwb2RTdGF0dXMocG9kKSB7XHJcbiAgICByZXR1cm4gZ2V0U3RhdHVzKHBvZCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gaXNSZWFkeShwb2QpIHtcclxuICAgIHZhciBzdGF0dXMgPSBwb2Quc3RhdHVzIHx8IHt9O1xyXG4gICAgdmFyIGFuc3dlciA9IGZhbHNlO1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKHN0YXR1cy5jb25kaXRpb25zLCAoY29uZGl0aW9uKSA9PiB7XHJcbiAgICAgIHZhciB0ID0gY29uZGl0aW9uLnR5cGU7XHJcbiAgICAgIGlmICh0ICYmIHQgPT09IFwiUmVhZHlcIikge1xyXG4gICAgICAgIHZhciBzdGF0dXMgPSBjb25kaXRpb24uc3RhdHVzO1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IFwiVHJ1ZVwiKSB7XHJcbiAgICAgICAgICBhbnN3ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYW5zd2VyO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFwcFZpZXdQb2RDb3VudGVycyhhcHBWaWV3KSB7XHJcbiAgICB2YXIgYXJyYXkgPSBbXTtcclxuICAgIHZhciBtYXAgPSB7fTtcclxuICAgIHZhciBwb2RzID0gYXBwVmlldy5wb2RzO1xyXG4gICAgdmFyIGxvd2VzdERhdGUgPSBudWxsO1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIHBvZCA9PiB7XHJcbiAgICAgIHZhciBzZWxlY3RvciA9IGdldExhYmVscyhwb2QpO1xyXG4gICAgICB2YXIgc2VsZWN0b3JUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhzZWxlY3RvciwgXCIgXCIpO1xyXG4gICAgICB2YXIgYW5zd2VyID0gbWFwW3NlbGVjdG9yXTtcclxuICAgICAgaWYgKCFhbnN3ZXIpIHtcclxuICAgICAgICBhbnN3ZXIgPSB7XHJcbiAgICAgICAgICBsYWJlbFRleHQ6IHNlbGVjdG9yVGV4dCxcclxuICAgICAgICAgIHBvZHNMaW5rOiBVcmxIZWxwZXJzLmpvaW4oXCIva3ViZXJuZXRlcy9uYW1lc3BhY2UvXCIsIHBvZC5tZXRhZGF0YS5uYW1lc3BhY2UsIFwicG9kcz9xPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHNlbGVjdG9yVGV4dCkpLFxyXG4gICAgICAgICAgdmFsaWQ6IDAsXHJcbiAgICAgICAgICB3YWl0aW5nOiAwLFxyXG4gICAgICAgICAgZXJyb3I6IDBcclxuICAgICAgICB9O1xyXG4gICAgICAgIG1hcFtzZWxlY3Rvcl0gPSBhbnN3ZXI7XHJcbiAgICAgICAgYXJyYXkucHVzaChhbnN3ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBzdGF0dXMgPSAocG9kU3RhdHVzKHBvZCkgfHwgXCJFcnJvclwiKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBpZiAoc3RhdHVzLnN0YXJ0c1dpdGgoXCJydW5cIikgfHwgc3RhdHVzLnN0YXJ0c1dpdGgoXCJva1wiKSkge1xyXG4gICAgICAgIGFuc3dlci52YWxpZCArPSAxO1xyXG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cy5zdGFydHNXaXRoKFwid2FpdFwiKSB8fCBzdGF0dXMuc3RhcnRzV2l0aChcInB3bmRcIikpIHtcclxuICAgICAgICBhbnN3ZXIud2FpdGluZyArPSAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFuc3dlci5lcnJvciArPSAxO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBjcmVhdGlvblRpbWVzdGFtcCA9IGdldENyZWF0aW9uVGltZXN0YW1wKHBvZCk7XHJcbiAgICAgIGlmIChjcmVhdGlvblRpbWVzdGFtcCkge1xyXG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoY3JlYXRpb25UaW1lc3RhbXApO1xyXG4gICAgICAgIGlmICghbG93ZXN0RGF0ZSB8fCBkIDwgbG93ZXN0RGF0ZSkge1xyXG4gICAgICAgICAgbG93ZXN0RGF0ZSA9IGQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGFwcFZpZXcuJGNyZWF0aW9uRGF0ZSA9IGxvd2VzdERhdGU7XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBwVmlld1NlcnZpY2VWaWV3cyhhcHBWaWV3KSB7XHJcbiAgICB2YXIgYXJyYXkgPSBbXTtcclxuICAgIHZhciBwb2RzID0gYXBwVmlldy5wb2RzO1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIHBvZCA9PiB7XHJcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgdmFyIGFiYnJldiA9IGlkO1xyXG4gICAgICAgIHZhciBpZHggPSBpZC5pbmRleE9mKFwiLVwiKTtcclxuICAgICAgICBpZiAoaWR4ID4gMSkge1xyXG4gICAgICAgICAgYWJicmV2ID0gaWQuc3Vic3RyaW5nKDAsIGlkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvZC5pZEFiYnJldiA9IGFiYnJldjtcclxuICAgICAgfVxyXG4gICAgICBwb2Quc3RhdHVzQ2xhc3MgPSBzdGF0dXNUZXh0VG9Dc3NDbGFzcyhwb2RTdGF0dXMocG9kKSwgaXNSZWFkeShwb2QpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHZhciBzZXJ2aWNlcyA9IGFwcFZpZXcuc2VydmljZXMgfHwgW107XHJcbiAgICB2YXIgcmVwbGljYXRpb25Db250cm9sbGVycyA9IGFwcFZpZXcucmVwbGljYXRpb25Db250cm9sbGVycyB8fCBbXTtcclxuICAgIHZhciBzaXplID0gTWF0aC5tYXgoc2VydmljZXMubGVuZ3RoLCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmxlbmd0aCwgMSk7XHJcbiAgICB2YXIgYXBwTmFtZSA9IGFwcFZpZXcuJGluZm8ubmFtZTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgIHZhciBzZXJ2aWNlID0gc2VydmljZXNbaV07XHJcbiAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXIgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXJzW2ldO1xyXG4gICAgICB2YXIgY29udHJvbGxlcklkID0gZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xyXG4gICAgICB2YXIgbmFtZSA9IGdldE5hbWUoc2VydmljZSkgfHwgY29udHJvbGxlcklkO1xyXG4gICAgICB2YXIgYWRkcmVzcyA9IENvcmUucGF0aEdldChzZXJ2aWNlLCBbXCJzcGVjXCIsIFwicG9ydGFsSVBcIl0pO1xyXG4gICAgICBpZiAoIW5hbWUgJiYgcG9kcy5sZW5ndGgpIHtcclxuICAgICAgICBuYW1lID0gcG9kc1swXS5pZEFiYnJldjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWFwcFZpZXcuJGluZm8ubmFtZSkge1xyXG4gICAgICAgIGFwcFZpZXcuJGluZm8ubmFtZSA9IG5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFhcHBWaWV3LmlkICYmIHBvZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgYXBwVmlldy5pZCA9IGdldE5hbWUocG9kc1swXSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgYXBwTmFtZSA9IG5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHBvZENvdW50ID0gcG9kcy5sZW5ndGg7XHJcbiAgICAgIHZhciBwb2RDb3VudFRleHQgPSBwb2RDb3VudCArIFwiIHBvZFwiICsgKHBvZENvdW50ID4gMSA/IFwic1wiIDogXCJcIik7XHJcbiAgICAgIHZhciB2aWV3ID0ge1xyXG4gICAgICAgIGFwcE5hbWU6IGFwcE5hbWUgfHwgbmFtZSxcclxuICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgIGNyZWF0ZWREYXRlOiBhcHBWaWV3LiRjcmVhdGlvbkRhdGUsXHJcbiAgICAgICAgcG9kQ291bnQ6IHBvZENvdW50LFxyXG4gICAgICAgIHBvZENvdW50VGV4dDogcG9kQ291bnRUZXh0LFxyXG4gICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXHJcbiAgICAgICAgY29udHJvbGxlcklkOiBjb250cm9sbGVySWQsXHJcbiAgICAgICAgc2VydmljZTogc2VydmljZSxcclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXI6IHJlcGxpY2F0aW9uQ29udHJvbGxlcixcclxuICAgICAgICBwb2RzOiBwb2RzXHJcbiAgICAgIH07XHJcbiAgICAgIGFycmF5LnB1c2godmlldyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBjb252ZXJ0cyBhIGdpdCBwYXRoIGludG8gYW4gYWNjZXNzaWJsZSBVUkwgZm9yIHRoZSBicm93c2VyXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGdpdFBhdGhUb1VybChpY29uUGF0aCwgYnJhbmNoID0gXCJtYXN0ZXJcIikge1xyXG4gICAgcmV0dXJuIChIYXd0aW9Db3JlLmluamVjdG9yLmdldDxzdHJpbmc+KCdBcHBMaWJyYXJ5VVJMJykgfHwgJycpICsgXCIvZ2l0L1wiICsgYnJhbmNoICsgaWNvblBhdGg7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhc0RhdGUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoQnVpbGRDb25maWcoYnVpbGRDb25maWcsIHNvcnRlZEJ1aWxkcykge1xyXG4gICAgaWYgKGJ1aWxkQ29uZmlnKSB7XHJcbiAgICAgIHZhciB0cmlnZ2VyVXJsOnN0cmluZyA9IG51bGw7XHJcbiAgICAgIHZhciBtZXRhZGF0YSA9IGJ1aWxkQ29uZmlnLm1ldGFkYXRhIHx8IHt9O1xyXG4gICAgICB2YXIgbmFtZSA9IG1ldGFkYXRhLm5hbWU7XHJcbiAgICAgIGJ1aWxkQ29uZmlnLiRuYW1lID0gbmFtZTtcclxuICAgICAgdmFyIHByb2plY3RMaW5rID0gRGV2ZWxvcGVyLnByb2plY3RMaW5rKG5hbWUpO1xyXG4gICAgICB2YXIgbnMgPSBtZXRhZGF0YS5uYW1lc3BhY2UgfHwgY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuICAgICAgYnVpbGRDb25maWcuJG5hbWVzcGFjZSA9IG5zO1xyXG4gICAgICBidWlsZENvbmZpZy5lbnZpcm9ubWVudHMgPSBbXTtcclxuICAgICAgYnVpbGRDb25maWcuJGNyZWF0aW9uRGF0ZSA9IGFzRGF0ZShLdWJlcm5ldGVzLmdldENyZWF0aW9uVGltZXN0YW1wKGJ1aWxkQ29uZmlnKSk7XHJcbiAgICAgIGJ1aWxkQ29uZmlnLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhnZXRMYWJlbHMoYnVpbGRDb25maWcpKTtcclxuXHJcbiAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgYnVpbGRDb25maWcuJHZpZXdMaW5rID0gVXJsSGVscGVycy5qb2luKFwid29ya3NwYWNlc1wiLCBucywgXCJwcm9qZWN0c1wiLCBuYW1lLCBcImVudmlyb25tZW50c1wiKTtcclxuICAgICAgICBidWlsZENvbmZpZy4kZWRpdExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJ3b3Jrc3BhY2VzXCIsIG5zLCBcInByb2plY3RzXCIsIG5hbWUsIFwiYnVpbGRDb25maWdFZGl0XCIpO1xyXG5cclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goW2ZhbHNlLCB0cnVlXSwgKGZsYWcpID0+IHtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZENvbmZpZy50cmlnZ2VycywgKHRyaWdnZXIpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0cmlnZ2VyVXJsKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0cmlnZ2VyLnR5cGU7XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwiZ2VuZXJpY1wiIHx8IGZsYWcpIHtcclxuICAgICAgICAgICAgICAgIHZhciBnZW5lcmljID0gdHJpZ2dlclt0eXBlXTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlICYmIGdlbmVyaWMpIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIHNlY3JldCA9IGdlbmVyaWMuc2VjcmV0O1xyXG4gICAgICAgICAgICAgICAgICBpZiAoc2VjcmV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlclVybCA9IFVybEhlbHBlcnMuam9pbihidWlsZENvbmZpZ0hvb2tzUmVzdFVSTCgpLCBuYW1lLCBzZWNyZXQsIHR5cGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29uZmlnLiR0cmlnZ2VyVXJsID0gdHJpZ2dlclVybDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIGxldHMgZmluZCB0aGUgbGF0ZXN0IGJ1aWxkLi4uXHJcbiAgICAgICAgaWYgKHNvcnRlZEJ1aWxkcykge1xyXG4gICAgICAgICAgYnVpbGRDb25maWcuJGxhc3RCdWlsZCA9IF8uZmluZChzb3J0ZWRCdWlsZHMsIHtcclxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcclxuICAgICAgICAgICAgICBsYWJlbHM6IHtcclxuICAgICAgICAgICAgICAgIGJ1aWxkY29uZmlnOiBuYW1lXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdmFyICRmYWJyaWM4Vmlld3MgPSB7fTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChuYW1lLCBvYmplY3QsIGF1dG9DcmVhdGUgPSBmYWxzZSkge1xyXG4gICAgICAgIHZhciB2aWV3ID0gJGZhYnJpYzhWaWV3c1tuYW1lXTtcclxuICAgICAgICBpZiAoYXV0b0NyZWF0ZSAmJiAhdmlldykge1xyXG4gICAgICAgICAgdmlldyA9IHt9XHJcbiAgICAgICAgICAkZmFicmljOFZpZXdzW25hbWVdID0gdmlldztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZpZXcpIHtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChvYmplY3QsICh2YWx1ZSwgcHJvcGVydHkpID0+IHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB2aWV3W3Byb3BlcnR5XTtcclxuICAgICAgICAgICAgaWYgKCFjdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgdmlld1twcm9wZXJ0eV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3RTdGFydHNXaXRoKHByZWZpeCwgb2JqZWN0LCBhdXRvQ3JlYXRlID0gZmFsc2UpIHtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhWaWV3cywgKHZpZXcsIG5hbWUpID0+IHtcclxuICAgICAgICAgIGlmICh2aWV3ICYmIG5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChvYmplY3QsICh2YWx1ZSwgcHJvcGVydHkpID0+IHtcclxuICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHZpZXdbcHJvcGVydHldO1xyXG4gICAgICAgICAgICAgIGlmICghY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmlld1twcm9wZXJ0eV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgbGFiZWxzID0gbWV0YWRhdGEubGFiZWxzIHx8IHt9O1xyXG4gICAgICB2YXIgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcclxuXHJcbiAgICAgIC8vIGxldHMgZGVmYXVsdCB0aGUgcmVwbyBhbmQgdXNlclxyXG4gICAgICBidWlsZENvbmZpZy4kdXNlciA9IGFubm90YXRpb25zW1wiZmFicmljOC5qZW5raW5zL3VzZXJcIl0gfHwgbGFiZWxzW1widXNlclwiXTtcclxuICAgICAgYnVpbGRDb25maWcuJHJlcG8gPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguamVua2lucy9yZXBvXCJdIHx8IGxhYmVsc1tcInJlcG9cIl07XHJcblxyXG4gICAgICBhbmd1bGFyLmZvckVhY2goYW5ub3RhdGlvbnMsICh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgdmFyIHBhcnRzID0ga2V5LnNwbGl0KCcvJywgMik7XHJcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIHZhciBsaW5rSWQgPSBwYXJ0c1swXTtcclxuICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHBhcnRzWzFdO1xyXG4gICAgICAgICAgaWYgKGxpbmtJZCAmJiBwcm9wZXJ0eSAmJiBsaW5rSWQuc3RhcnRzV2l0aChcImZhYnJpYzgubGlua1wiKSkge1xyXG4gICAgICAgICAgICB2YXIgbGluayA9ICRmYWJyaWM4Vmlld3NbbGlua0lkXTtcclxuICAgICAgICAgICAgaWYgKCFsaW5rKSB7XHJcbiAgICAgICAgICAgICAgbGluayA9IHtcclxuICAgICAgICAgICAgICAgIGNsYXNzOiBsaW5rSWRcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICRmYWJyaWM4Vmlld3NbbGlua0lkXSA9IGxpbms7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGlua1twcm9wZXJ0eV0gPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGJ1aWxkQ29uZmlnLiR1c2VyICYmIGJ1aWxkQ29uZmlnLiRyZXBvKSB7XHJcbiAgICAgICAgLy8gYnJvd3NlIGdvZ3MgcmVwbyB2aWV3XHJcbiAgICAgICAgdmFyIGdvZ3NVcmwgPSBzZXJ2aWNlTGlua1VybChnb2dzU2VydmljZU5hbWUpO1xyXG4gICAgICAgIGlmIChnb2dzVXJsKSB7XHJcbiAgICAgICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsuYnJvd3NlR29ncy52aWV3XCIsIHtcclxuICAgICAgICAgICAgbGFiZWw6IFwiQnJvd3NlLi4uXCIsXHJcbiAgICAgICAgICAgIHVybDogVXJsSGVscGVycy5qb2luKGdvZ3NVcmwsIGJ1aWxkQ29uZmlnLiR1c2VyLCBidWlsZENvbmZpZy4kcmVwbyksXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkJyb3dzZSB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyByZXBvc2l0b3J5XCIsXHJcbiAgICAgICAgICAgIGljb25DbGFzczogXCJmYSBmYS1leHRlcm5hbC1saW5rXCJcclxuICAgICAgICAgIH0sIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcnVuIGZvcmdlIGNvbW1hbmRzIHZpZXdcclxuICAgICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsuZm9yZ2VDb21tYW5kLnZpZXdcIiwge1xyXG4gICAgICAgICAgbGFiZWw6IFwiQ29tbWFuZC4uLlwiLFxyXG4gICAgICAgICAgdXJsOiBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiL2ZvcmdlL2NvbW1hbmRzL3VzZXJcIiwgYnVpbGRDb25maWcuJHVzZXIsIGJ1aWxkQ29uZmlnLiRyZXBvKSxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlBlcmZvcm0gYW4gYWN0aW9uIG9uIHRoaXMgcHJvamVjdFwiLFxyXG4gICAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXBsYXktY2lyY2xlXCJcclxuICAgICAgICB9LCB0cnVlKTtcclxuXHJcblxyXG4gICAgICAgIC8vIGNvbmZpZ3VyZSBkZXZvcHMgdmlld1xyXG4gICAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5mb3JnZUNvbW1hbmQuZGV2b3BzLnNldHRpbmdzXCIsIHtcclxuICAgICAgICAgIGxhYmVsOiBcIlNldHRpbmdzXCIsXHJcbiAgICAgICAgICB1cmw6IFVybEhlbHBlcnMuam9pbihwcm9qZWN0TGluaywgXCIvZm9yZ2UvY29tbWFuZC9kZXZvcHMtZWRpdC91c2VyXCIsIGJ1aWxkQ29uZmlnLiR1c2VyLCBidWlsZENvbmZpZy4kcmVwbyksXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJDb25maWd1cmUgdGhlIERldk9wcyBzZXR0aW5ncyBmb3IgdGhpcyBwcm9qZWN0XCIsXHJcbiAgICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCJcclxuICAgICAgICB9LCB0cnVlKTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGFkZCBzb21lIGljb25zIGFuZCBkZXNjcmlwdGlvbnNcclxuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLnJlcG9zaXRvcnkuYnJvd3NlXCIsIHtcclxuICAgICAgICBsYWJlbDogXCJCcm93c2UuLi5cIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJCcm93c2UgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgcmVwb3NpdG9yeVwiLFxyXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1leHRlcm5hbC1saW5rXCJcclxuICAgICAgfSk7XHJcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdChcImZhYnJpYzgubGluay5qZW5raW5zLmpvYlwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXRhc2tzXCIsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVmlldyB0aGUgSmVua2lucyBKb2IgZm9yIHRoaXMgYnVpbGRcIlxyXG4gICAgICB9KTtcclxuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmplbmtpbnMubW9uaXRvclwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXRhY2hvbWV0ZXJcIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJWaWV3IHRoZSBKZW5raW5zIE1vbml0b3IgZGFzaGJvYXJkIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICB9KTtcclxuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLmplbmtpbnMucGlwZWxpbmVcIiwge1xyXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1hcnJvdy1jaXJjbGUtby1yaWdodFwiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlZpZXcgdGhlIEplbmtpbnMgUGlwZWxpbmUgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsubGV0c2NoYXQucm9vbVwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNvbW1lbnRcIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJDaGF0IHJvb20gZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsubGV0c2NoYXQucm9vbVwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLWNvbW1lbnRcIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJDaGF0IHJvb20gZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsudGFpZ2FcIiwge1xyXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS1jaGVjay1zcXVhcmUtb1wiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIklzc3VlIHRyYWNrZXIgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsuaXNzdWVzXCIsIHtcclxuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY2hlY2stc3F1YXJlLW9cIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJJc3N1ZXMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsucmVsZWFzZXNcIiwge1xyXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS10YWdcIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJJc3N1ZXMgZm9yIHRoaXMgcHJvamVjdFwiXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllc0lmTm90RXhpc3QoXCJmYWJyaWM4LmxpbmsudGFpZ2EudGVhbVwiLCB7XHJcbiAgICAgICAgaWNvbkNsYXNzOiBcImZhIGZhLXVzZXJzXCIsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGVhbSBtZW1iZXJzIGZvciB0aGlzIHByb2plY3RcIlxyXG4gICAgICB9KTtcclxuICAgICAgZGVmYXVsdFByb3BlcnRpZXNJZk5vdEV4aXN0KFwiZmFicmljOC5saW5rLnRlYW1cIiwge1xyXG4gICAgICAgIGljb25DbGFzczogXCJmYSBmYS11c2Vyc1wiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRlYW0gbWVtYmVycyBmb3IgdGhpcyBwcm9qZWN0XCJcclxuICAgICAgfSk7XHJcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzSWZOb3RFeGlzdFN0YXJ0c1dpdGgoXCJmYWJyaWM4LmxpbmsuZW52aXJvbm1lbnQuXCIsIHtcclxuICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY2xvdWRcIixcclxuICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUga3ViZXJuZXRlcyBuYW1lc3BhY2UgZm9yIHRoaXMgZW52aXJvbm1lbnRcIlxyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgICAvLyBsZXRzIHB1dCB0aGUgdmlld3MgaW50byBzZWN0aW9ucy4uLlxyXG4gICAgICB2YXIgJGZhYnJpYzhDb2RlVmlld3MgPSB7fTtcclxuICAgICAgdmFyICRmYWJyaWM4QnVpbGRWaWV3cyA9IHt9O1xyXG4gICAgICB2YXIgJGZhYnJpYzhUZWFtVmlld3MgPSB7fTtcclxuICAgICAgdmFyICRmYWJyaWM4RW52aXJvbm1lbnRWaWV3cyA9IHt9O1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhWaWV3cywgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICB2YXIgdmlldztcclxuICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJ0YWlnYVwiKSA+IDAgfHwga2V5LmluZGV4T2YoXCIuaXNzdWVcIikgPiAwIHx8IGtleS5pbmRleE9mKFwibGV0c2NoYXRcIikgPiAwfHwga2V5LmluZGV4T2YoXCIudGVhbVwiKSA+IDApIHtcclxuICAgICAgICAgIHZpZXcgPSAkZmFicmljOFRlYW1WaWV3cztcclxuICAgICAgICB9IGVsc2UgaWYgKGtleS5pbmRleE9mKFwiamVua2luc1wiKSA+IDApIHtcclxuICAgICAgICAgIHZpZXcgPSAkZmFicmljOEJ1aWxkVmlld3M7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrZXkuaW5kZXhPZihcIi5lbnZpcm9ubWVudC5cIikgPiAwKSB7XHJcbiAgICAgICAgICB2aWV3ID0gJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2aWV3ID0gJGZhYnJpYzhDb2RlVmlld3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZpZXdba2V5XSA9IHZhbHVlO1xyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgICBidWlsZENvbmZpZy4kZmFicmljOFZpZXdzID0gJGZhYnJpYzhWaWV3cztcclxuICAgICAgYnVpbGRDb25maWcuJGZhYnJpYzhDb2RlVmlld3MgPSAkZmFicmljOENvZGVWaWV3cztcclxuICAgICAgYnVpbGRDb25maWcuJGZhYnJpYzhCdWlsZFZpZXdzID0gJGZhYnJpYzhCdWlsZFZpZXdzO1xyXG4gICAgICBidWlsZENvbmZpZy4kZmFicmljOEVudmlyb25tZW50Vmlld3MgPSAkZmFicmljOEVudmlyb25tZW50Vmlld3M7XHJcbiAgICAgIGJ1aWxkQ29uZmlnLiRmYWJyaWM4VGVhbVZpZXdzID0gJGZhYnJpYzhUZWFtVmlld3M7XHJcblxyXG4gICAgICB2YXIgJGplbmtpbnNKb2IgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguaW8vamVua2lucy1qb2JcIl07XHJcbiAgICAgIGlmICghJGplbmtpbnNKb2IgJiYgJGZhYnJpYzhWaWV3c1tcImZhYnJpYzgubGluay5qZW5raW5zLmpvYlwiXSkge1xyXG4gICAgICAgICRqZW5raW5zSm9iID0gbmFtZTtcclxuICAgICAgfVxyXG4gICAgICBidWlsZENvbmZpZy4kamVua2luc0pvYiA9ICRqZW5raW5zSm9iO1xyXG5cclxuICAgICAgYW5ndWxhci5mb3JFYWNoKCRmYWJyaWM4RW52aXJvbm1lbnRWaWV3cywgKGVudikgPT4ge1xyXG4gICAgICAgIHZhciBjID0gZW52LmNsYXNzO1xyXG4gICAgICAgIHZhciBwcmVmaXggPSBcImZhYnJpYzgubGluay5lbnZpcm9ubWVudC5cIjtcclxuICAgICAgICBpZiAoYyAmJiBjLnN0YXJ0c1dpdGgocHJlZml4KSkge1xyXG4gICAgICAgICAgdmFyIGVucyA9IGMuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpO1xyXG4gICAgICAgICAgZW52Lm5hbWVzcGFjZSA9IGVucztcclxuICAgICAgICAgIGVudi51cmwgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCBucywgXCJwcm9qZWN0c1wiLCBuYW1lLCBcIm5hbWVzcGFjZVwiLCBlbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBidWlsZENvbmZpZy5lbnZpcm9ubWVudHMucHVzaChlbnYpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCFidWlsZENvbmZpZy5lbnZpcm9ubWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gbGV0cyBjcmVhdGUgYSBzaW5nbGUgZW52aXJvbm1lbnRcclxuICAgICAgICB2YXIgZW5zID0gbnM7XHJcbiAgICAgICAgdmFyIGVudiA9IHtcclxuICAgICAgICAgIG5hbWVzcGFjZTogZW5zLFxyXG4gICAgICAgICAgbGFiZWw6IFwiQ3VycmVudFwiLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGVudmlyb25lbW50IHRoYXQgdGhpcyBwcm9qZWN0IGlzIGJ1aWx0IGFuZCBydW4gaW5zaWRlXCIsXHJcbiAgICAgICAgICBpY29uQ2xhc3M6IFwiZmEgZmEtY2xvdWRcIixcclxuICAgICAgICAgIHVybDogVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgbnMsIFwicHJvamVjdHNcIiwgbmFtZSwgXCJuYW1lc3BhY2VcIiwgZW5zKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnVpbGRDb25maWcuZW52aXJvbm1lbnRzLnB1c2goZW52KTtcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGJ1aWxkQ29uZmlnLmVudmlyb25tZW50cyA9IGJ1aWxkQ29uZmlnLmVudmlyb25tZW50cy5yZXZlcnNlKCk7XHJcblxyXG4gICAgICBidWlsZENvbmZpZy50b29scyA9IFtdO1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhDb2RlVmlld3MsIChlbnYpID0+IHtcclxuICAgICAgICBidWlsZENvbmZpZy50b29scy5wdXNoKGVudik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2goJGZhYnJpYzhUZWFtVmlld3MsIChlbnYpID0+IHtcclxuICAgICAgICBidWlsZENvbmZpZy50b29scy5wdXNoKGVudik7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hCdWlsZENvbmZpZ3MoYnVpbGRDb25maWdzLCBzb3J0ZWRCdWlsZHMgPSBudWxsKSB7XHJcbiAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRDb25maWdzLCAoYnVpbGRDb25maWcpID0+IHtcclxuICAgICAgZW5yaWNoQnVpbGRDb25maWcoYnVpbGRDb25maWcsIHNvcnRlZEJ1aWxkcyk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBidWlsZENvbmZpZ3M7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoQnVpbGRzKGJ1aWxkcykge1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKGJ1aWxkcywgKGJ1aWxkKSA9PiB7XHJcbiAgICAgIGVucmljaEJ1aWxkKGJ1aWxkKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIF8uc29ydEJ5KGJ1aWxkcywgXCIkY3JlYXRpb25EYXRlXCIpLnJldmVyc2UoKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hCdWlsZChidWlsZCkge1xyXG4gICAgaWYgKGJ1aWxkKSB7XHJcbiAgICAgIHZhciBtZXRhZGF0YSA9IGJ1aWxkLm1ldGFkYXRhIHx8IHt9O1xyXG4gICAgICB2YXIgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcclxuICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKGJ1aWxkKTtcclxuICAgICAgdmFyIG5hbWVzcGFjZSA9IGdldE5hbWVzcGFjZShidWlsZCk7XHJcbiAgICAgIGJ1aWxkLiRuYW1lID0gbmFtZTtcclxuICAgICAgYnVpbGQuJG5hbWVzcGFjZSA9IG5hbWVzcGFjZTtcclxuXHJcbiAgICAgIHZhciBuYW1lQXJyYXkgPSBuYW1lLnNwbGl0KFwiLVwiKTtcclxuICAgICAgdmFyIG5hbWVBcnJheUxlbmd0aCA9IG5hbWVBcnJheS5sZW5ndGg7XHJcbiAgICAgIGJ1aWxkLiRzaG9ydE5hbWUgPSAobmFtZUFycmF5TGVuZ3RoID4gNCkgPyBuYW1lQXJyYXkuc2xpY2UoMCwgbmFtZUFycmF5TGVuZ3RoIC0gNCkuam9pbihcIi1cIikgOiBuYW1lLnN1YnN0cmluZygwLCAzMCk7XHJcblxyXG4gICAgICB2YXIgbGFiZWxzID0gZ2V0TGFiZWxzKGJ1aWxkKTtcclxuICAgICAgdmFyIGNvbmZpZ0lkID0gbGFiZWxzLmJ1aWxkY29uZmlnO1xyXG4gICAgICBidWlsZC4kY29uZmlnSWQgPSBjb25maWdJZDtcclxuICAgICAgaWYgKGNvbmZpZ0lkKSB7XHJcbiAgICAgICAgLy9idWlsZC4kY29uZmlnTGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvYnVpbGRDb25maWdzXCIsIGNvbmZpZ0lkKTtcclxuICAgICAgICBidWlsZC4kY29uZmlnTGluayA9IFVybEhlbHBlcnMuam9pbihcIndvcmtzcGFjZXNcIiwgY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKSwgXCJwcm9qZWN0c1wiLCBjb25maWdJZCk7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGNyZWF0aW9uVGltZXN0YW1wID0gZ2V0Q3JlYXRpb25UaW1lc3RhbXAoYnVpbGQpO1xyXG4gICAgICBpZiAoY3JlYXRpb25UaW1lc3RhbXApIHtcclxuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGNyZWF0aW9uVGltZXN0YW1wKTtcclxuICAgICAgICBidWlsZC4kY3JlYXRpb25EYXRlID0gZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgIC8vYnVpbGQuJHZpZXdMaW5rID0gVXJsSGVscGVycy5qb2luKFwia3ViZXJuZXRlcy9idWlsZHNcIiwgbmFtZSk7XHJcbiAgICAgICAgdmFyIHByb2plY3RMaW5rID0gVXJsSGVscGVycy5qb2luKFwid29ya3NwYWNlc1wiLCBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpLCBcInByb2plY3RzXCIsIGNvbmZpZ0lkKTtcclxuICAgICAgICBidWlsZC4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4ocHJvamVjdExpbmssIFwiYnVpbGRzXCIsIG5hbWUpO1xyXG4gICAgICAgIC8vYnVpbGQuJGxvZ3NMaW5rID0gVXJsSGVscGVycy5qb2luKFwia3ViZXJuZXRlcy9idWlsZExvZ3NcIiwgbmFtZSk7XHJcbiAgICAgICAgYnVpbGQuJGxvZ3NMaW5rID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rLCBcImJ1aWxkTG9nc1wiLCBuYW1lKTtcclxuICAgICAgfVxyXG4gICAgICBidWlsZC5wb2ROYW1lID0gYnVpbGQucG9kTmFtZSB8fCBhbm5vdGF0aW9uc1tcIm9wZW5zaGlmdC5pby9idWlsZC5wb2QtbmFtZVwiXTtcclxuICAgICAgdmFyIHBvZE5hbWUgPSBidWlsZC5wb2ROYW1lO1xyXG4gICAgICBpZiAocG9kTmFtZSAmJiBuYW1lc3BhY2UpIHtcclxuICAgICAgICB2YXIgcG9kTmFtZUFycmF5ID0gcG9kTmFtZS5zcGxpdChcIi1cIik7XHJcbiAgICAgICAgdmFyIHBvZE5hbWVBcnJheUxlbmd0aCA9IHBvZE5hbWVBcnJheS5sZW5ndGg7XHJcbiAgICAgICAgYnVpbGQuJHBvZFNob3J0TmFtZSA9IChwb2ROYW1lQXJyYXlMZW5ndGggPiA1KSA/IHBvZE5hbWVBcnJheVtwb2ROYW1lQXJyYXlMZW5ndGggLSA1XSA6IHBvZE5hbWUuc3Vic3RyaW5nKDAsIDMwKTtcclxuICAgICAgICBidWlsZC4kcG9kTGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvbmFtZXNwYWNlXCIsIG5hbWVzcGFjZSwgXCJwb2RzXCIsIHBvZE5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnVpbGQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaERlcGxveW1lbnRDb25maWcoZGVwbG95bWVudENvbmZpZykge1xyXG4gICAgaWYgKGRlcGxveW1lbnRDb25maWcpIHtcclxuICAgICAgdmFyIHRyaWdnZXJVcmw6c3RyaW5nID0gbnVsbDtcclxuICAgICAgdmFyIG5hbWUgPSBDb3JlLnBhdGhHZXQoZGVwbG95bWVudENvbmZpZywgW1wibWV0YWRhdGFcIiwgXCJuYW1lXCJdKTtcclxuICAgICAgZGVwbG95bWVudENvbmZpZy4kbmFtZSA9IG5hbWU7XHJcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICBhbmd1bGFyLmZvckVhY2goZGVwbG95bWVudENvbmZpZy50cmlnZ2VycywgKHRyaWdnZXIpID0+IHtcclxuICAgICAgICB2YXIgdHlwZSA9IHRyaWdnZXIudHlwZTtcclxuICAgICAgICBpZiAoIWRlcGxveW1lbnRDb25maWcuJGltYWdlQ2hhbmdlUGFyYW1zICYmIHR5cGUgPT09IFwiSW1hZ2VDaGFuZ2VcIikge1xyXG4gICAgICAgICAgdmFyIGltYWdlQ2hhbmdlUGFyYW1zID0gdHJpZ2dlci5pbWFnZUNoYW5nZVBhcmFtcztcclxuICAgICAgICAgIGlmIChpbWFnZUNoYW5nZVBhcmFtcykge1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyTmFtZXMgPSBpbWFnZUNoYW5nZVBhcmFtcy5jb250YWluZXJOYW1lcyB8fCBbXTtcclxuICAgICAgICAgICAgaW1hZ2VDaGFuZ2VQYXJhbXMuJGNvbnRhaW5lck5hbWVzID0gY29udGFpbmVyTmFtZXMuam9pbihcIiBcIik7XHJcbiAgICAgICAgICAgIGRlcGxveW1lbnRDb25maWcuJGltYWdlQ2hhbmdlUGFyYW1zID0gaW1hZ2VDaGFuZ2VQYXJhbXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hEZXBsb3ltZW50Q29uZmlncyhkZXBsb3ltZW50Q29uZmlncykge1xyXG4gICAgYW5ndWxhci5mb3JFYWNoKGRlcGxveW1lbnRDb25maWdzLCAoZGVwbG95bWVudENvbmZpZykgPT4ge1xyXG4gICAgICBlbnJpY2hEZXBsb3ltZW50Q29uZmlnKGRlcGxveW1lbnRDb25maWcpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGVwbG95bWVudENvbmZpZ3M7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEV2ZW50KGV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdmFyIG1ldGFkYXRhID0gZXZlbnQubWV0YWRhdGEgfHwge307XHJcblxyXG4gICAgICB2YXIgZmlyc3RUaW1lc3RhbXAgPSBldmVudC5maXJzdFRpbWVzdGFtcDtcclxuICAgICAgaWYgKGZpcnN0VGltZXN0YW1wKSB7XHJcbiAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShmaXJzdFRpbWVzdGFtcCk7XHJcbiAgICAgICAgZXZlbnQuJGZpcnN0VGltZXN0YW1wID0gZDtcclxuICAgICAgfVxyXG4gICAgICB2YXIgbGFzdFRpbWVzdGFtcCA9IGV2ZW50Lmxhc3RUaW1lc3RhbXA7XHJcbiAgICAgIGlmIChsYXN0VGltZXN0YW1wKSB7XHJcbiAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShsYXN0VGltZXN0YW1wKTtcclxuICAgICAgICBldmVudC4kbGFzdFRpbWVzdGFtcCA9IGQ7XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGxhYmVscyA9IGFuZ3VsYXIuY29weShldmVudC5zb3VyY2UgfHwge30pO1xyXG4gICAgICB2YXIgaW52b2x2ZWRPYmplY3QgPSBldmVudC5pbnZvbHZlZE9iamVjdCB8fCB7fTtcclxuICAgICAgdmFyIG5hbWUgPSBpbnZvbHZlZE9iamVjdC5uYW1lO1xyXG4gICAgICB2YXIga2luZCA9IGludm9sdmVkT2JqZWN0LmtpbmQ7XHJcbiAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgbGFiZWxzWyduYW1lJ10gPSBuYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChraW5kKSB7XHJcbiAgICAgICAgbGFiZWxzWydraW5kJ10gPSBraW5kO1xyXG4gICAgICB9XHJcbiAgICAgIGV2ZW50LiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhsYWJlbHMpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hFdmVudHMoZXZlbnRzLCBtb2RlbCA9IG51bGwpIHtcclxuICAgIGFuZ3VsYXIuZm9yRWFjaChldmVudHMsIChldmVudCkgPT4ge1xyXG4gICAgICBlbnJpY2hFdmVudChldmVudCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBsZXRzIHVwZGF0ZSBsaW5rcyB0byB0aGUgZXZlbnRzIGZvciBlYWNoIHBvZCBhbmQgUkNcclxuICAgIGlmIChtb2RlbCkge1xyXG4gICAgICBmdW5jdGlvbiBjbGVhckV2ZW50cyhlbnRpdHkpIHtcclxuICAgICAgICBlbnRpdHkuJGV2ZW50cyA9IFtdO1xyXG4gICAgICAgIGVudGl0eS4kZXZlbnRzTGluayA9IG51bGw7XHJcbiAgICAgICAgZW50aXR5LiRldmVudENvdW50ID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gdXBkYXRlRXZlbnQoZW50aXR5LCBldmVudCkge1xyXG4gICAgICAgIGlmIChlbnRpdHkpIHtcclxuICAgICAgICAgIGVudGl0eS4kZXZlbnRzLnB1c2goZXZlbnQpO1xyXG4gICAgICAgICAgaWYgKCFlbnRpdHkuJGV2ZW50c0xpbmspIHtcclxuICAgICAgICAgICAgZW50aXR5LiRldmVudHNMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL2t1YmVybmV0ZXMvbmFtZXNwYWNlL1wiLCBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpLCBcImV2ZW50c1wiKSArIFwiP3E9a2luZCUzRFwiICsgZW50aXR5LmtpbmQgKyBcIiUyMG5hbWUlM0RcIiArIGVudGl0eS5tZXRhZGF0YS5uYW1lO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZW50aXR5LiRldmVudENvdW50ID0gZW50aXR5LiRldmVudHMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHBvZHMgPSBtb2RlbC5wb2RzIHx8IFtdO1xyXG4gICAgICB2YXIgcmNzID0gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVycyB8fCBbXTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKHBvZHMsIGNsZWFyRXZlbnRzKTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKHJjcywgY2xlYXJFdmVudHMpO1xyXG5cclxuICAgICAgYW5ndWxhci5mb3JFYWNoKGV2ZW50cywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgdmFyIGludm9sdmVkT2JqZWN0ID0gZXZlbnQuaW52b2x2ZWRPYmplY3QgfHwge307XHJcbiAgICAgICAgdmFyIG5hbWUgPSBpbnZvbHZlZE9iamVjdC5uYW1lO1xyXG4gICAgICAgIHZhciBraW5kID0gaW52b2x2ZWRPYmplY3Qua2luZDtcclxuICAgICAgICB2YXIgbnMgPSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCk7XHJcbiAgICAgICAgaWYgKG5hbWUgJiYga2luZCAmJiBucykge1xyXG4gICAgICAgICAgdmFyIGVudGl0eSA9IG51bGw7XHJcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJcIikge1xyXG4gICAgICAgICAgICBlbnRpdHkgPSBtb2RlbC5nZXRSZXBsaWNhdGlvbkNvbnRyb2xsZXIobnMsIG5hbWUpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSBcIlBvZFwiKSB7XHJcbiAgICAgICAgICAgIGVudGl0eSA9IG1vZGVsLmdldFBvZChucywgbmFtZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZW50aXR5KSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZUV2ZW50KGVudGl0eSwgZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXZlbnRzO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEltYWdlUmVwb3NpdG9yeShpbWFnZVJlcG9zaXRvcnkpIHtcclxuICAgIGlmIChpbWFnZVJlcG9zaXRvcnkpIHtcclxuICAgICAgdmFyIHRyaWdnZXJVcmw6c3RyaW5nID0gbnVsbDtcclxuICAgICAgdmFyIG5hbWUgPSBDb3JlLnBhdGhHZXQoaW1hZ2VSZXBvc2l0b3J5LCBbXCJtZXRhZGF0YVwiLCBcIm5hbWVcIl0pO1xyXG4gICAgICBpbWFnZVJlcG9zaXRvcnkuJG5hbWUgPSBuYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEltYWdlUmVwb3NpdG9yaWVzKGltYWdlUmVwb3NpdG9yaWVzKSB7XHJcbiAgICBhbmd1bGFyLmZvckVhY2goaW1hZ2VSZXBvc2l0b3JpZXMsIChpbWFnZVJlcG9zaXRvcnkpID0+IHtcclxuICAgICAgZW5yaWNoSW1hZ2VSZXBvc2l0b3J5KGltYWdlUmVwb3NpdG9yeSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpbWFnZVJlcG9zaXRvcmllcztcclxuICB9XHJcblxyXG5cclxuICB2YXIgbGFiZWxDb2xvcnMgPSB7ICAgIFxyXG4gICAgJ3JlZ2lvbic6ICdrOHMtYmFkZ2UtcmVnaW9uJywgICAgXHJcbiAgICAnc3lzdGVtJzogJ2s4cy1iYWRnZS1zeXN0ZW0nLFxyXG4gICAgJ2lzVGFyZ2V0JzogJ2s4cy1iYWRnZS10YXJnZXQnLFxyXG4gIH07XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjb250YWluZXJMYWJlbENsYXNzKGxhYmVsVHlwZTpzdHJpbmcpIHsgICAgXHJcbiAgICBpZiAoIShsYWJlbFR5cGUgaW4gbGFiZWxDb2xvcnMpKSB7XHJcbiAgICAgIHJldHVybiAnbW91c2UtcG9pbnRlcic7XHJcbiAgICB9XHJcbiAgICBlbHNlIHJldHVybiBsYWJlbENvbG9yc1tsYWJlbFR5cGVdICsgJyBtb3VzZS1wb2ludGVyJztcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZhYnJpYzggZm9yZ2UgcGx1Z2luIGlzIGVuYWJsZWRcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gaXNGb3JnZUVuYWJsZWQoKSB7XHJcbiAgICAvLyBUT0RPIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGUgc2VydmljZSBcImZhYnJpYzgtZm9yZ2VcIiBpcyB2YWxpZFxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGt1YmVybmV0ZXMgc2VsZWN0ZWQgbmFtZXNwYWNlIG9yIHRoZSBkZWZhdWx0IG9uZVxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpIHtcclxuICAgIHZhciBpbmplY3RvciA9IEhhd3Rpb0NvcmUuaW5qZWN0b3I7XHJcbiAgICBpZiAoaW5qZWN0b3IpIHtcclxuICAgICAgdmFyIEt1YmVybmV0ZXNTdGF0ZSA9IGluamVjdG9yLmdldDxhbnk+KFwiS3ViZXJuZXRlc1N0YXRlXCIpIHx8IHt9O1xyXG4gICAgICByZXR1cm4gS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlIHx8IGRlZmF1bHROYW1lc3BhY2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVmYXVsdE5hbWVzcGFjZTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBzZXRDdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZShucykge1xyXG4gICAgaWYgKG5zKSB7XHJcbiAgICAgIHZhciBLdWJlcm5ldGVzU3RhdGUgPSBpbmplY3Q8YW55PihcIkt1YmVybmV0ZXNTdGF0ZVwiKSB8fCB7fTtcclxuICAgICAgS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlID0gbnM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmVzIHRoZSBqc29uIHNjaGVtYVxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVTY2hlbWEoKSB7XHJcbiAgICBhbmd1bGFyLmZvckVhY2goc2NoZW1hLmRlZmluaXRpb25zLCAoZGVmaW5pdGlvbiwgbmFtZSkgPT4ge1xyXG4gICAgICB2YXIgcHJvcGVydGllcyA9IGRlZmluaXRpb24ucHJvcGVydGllcztcclxuICAgICAgaWYgKHByb3BlcnRpZXMpIHtcclxuICAgICAgICB2YXIgaGlkZVByb3BlcnRpZXMgPSBbXCJjcmVhdGlvblRpbWVzdGFtcFwiLCBcImtpbmRcIiwgXCJhcGlWZXJzaW9uXCIsIFwiYW5ub3RhdGlvbnNcIiwgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLCBcIm5hbWVzcGFjZVwiLCBcInJlc291cmNlVmVyc2lvblwiLCBcInNlbGZMaW5rXCIsIFwidWlkXCJdO1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChoaWRlUHJvcGVydGllcywgKHByb3BlcnR5TmFtZSkgPT4ge1xyXG4gICAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgICAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIHByb3BlcnR5W1wiaGlkZGVuXCJdICA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKHByb3BlcnRpZXMsIChwcm9wZXJ0eSwgcHJvcGVydHlOYW1lKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmVmID0gcHJvcGVydHlbXCIkcmVmXCJdO1xyXG4gICAgICAgICAgdmFyIHR5cGUgPSBwcm9wZXJ0eVtcInR5cGVcIl07XHJcbiAgICAgICAgICBpZiAocmVmICYmICghdHlwZSB8fCB0eXBlID09PSBcIm9iamVjdFwiKSkge1xyXG4gICAgICAgICAgICBwcm9wZXJ0eVtcInR5cGVcIl0gPSByZWY7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gXCJhcnJheVwiKSB7XHJcbiAgICAgICAgICAgIHZhciBpdGVtcyA9IHByb3BlcnR5W1wiaXRlbXNcIl07XHJcbiAgICAgICAgICAgIGlmIChpdGVtcykge1xyXG4gICAgICAgICAgICAgIHZhciByZWYgPSBpdGVtc1tcIiRyZWZcIl07XHJcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSBpdGVtc1tcInR5cGVcIl07XHJcbiAgICAgICAgICAgICAgaWYgKHJlZiAmJiAoIXR5cGUgfHwgdHlwZSA9PT0gXCJvYmplY3RcIikpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zW1widHlwZVwiXSA9IHJlZjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX1dlYkhvb2tUcmlnZ2VyLnByb3BlcnRpZXMuc2VjcmV0LnR5cGUgPSBcInBhc3N3b3JkXCI7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGV0cyByZW1vdmUgYW55IGVucmljaGVkIGRhdGEgdG8gbGVhdmUgdGhlIG9yaWdpbmFsIGpzb24gaW50YWN0XHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHVuZW5yaWNoKGl0ZW0pIHtcclxuICAgIHZhciBvID0gXy5jbG9uZURlZXAoaXRlbSk7XHJcbiAgICBhbmd1bGFyLmZvckVhY2gobywgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFwiJFwiKSB8fCBrZXkuc3RhcnRzV2l0aChcIl9cIikpIHtcclxuICAgICAgICBkZWxldGUgb1trZXldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGRlbGV0ZSBvWydjb25uZWN0VG8nXTtcclxuICAgIHJldHVybiBvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdW5lbnJpY2hlZCBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdFxyXG4gICAqL1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1Jhd0pzb24oaXRlbSkge1xyXG4gICAgdmFyIG8gPSB1bmVucmljaChpdGVtKTtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvLCBudWxsLCAyKTsgLy8gc3BhY2luZyBsZXZlbCA9IDJcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHVuZW5yaWNoZWQgWUFNTCByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3RcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gdG9SYXdZYW1sKGl0ZW0pIHtcclxuICAgIHZhciBvID0gdW5lbnJpY2goaXRlbSk7XHJcbiAgICByZXR1cm4ganN5YW1sLmR1bXAobywgeyBpbmRlbnQ6IDIgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHdhdGNoKCRzY29wZTogYW55LCAkZWxlbWVudDogYW55LCBraW5kLCBucywgZm4sIGxhYmVsU2VsZWN0b3IgPSBudWxsKSB7XHJcbiAgICAgdmFyIGNvbm5lY3Rpb24gPSBLdWJlcm5ldGVzQVBJLndhdGNoKHtcclxuICAgICAgICBraW5kOiBraW5kLFxyXG4gICAgICAgIG5hbWVzcGFjZTogbnMsXHJcbiAgICAgICAgbGFiZWxTZWxlY3RvcjogbGFiZWxTZWxlY3RvcixcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAob2JqZWN0cykge1xyXG4gICAgICAgICAgZm4ob2JqZWN0cyk7XHJcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgICRlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlN0YXRpYyBjb250cm9sbGVyW1wiICsga2luZCArIFwiLCBcIiArIG5zICsgXCJdIGVsZW1lbnQgZGVzdHJveWVkXCIpO1xyXG4gICAgICAgICRzY29wZS4kZGVzdHJveSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgJHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTdGF0aWMgY29udHJvbGxlcltcIiArIGtpbmQgKyBcIiwgXCIgKyBucyArIFwiXSBzY29wZSBkZXN0cm95ZWRcIik7XHJcbiAgICAgICAgY29ubmVjdGlvbi5kaXNjb25uZWN0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB2YXIgb2xkRGVsZXRlU2NvcGVGbiA9ICRzY29wZS5kZWxldGVTY29wZTtcclxuICAgICAgJHNjb3BlLmRlbGV0ZVNjb3BlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICRlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24ob2xkRGVsZXRlU2NvcGVGbikpIHtcclxuICAgICAgICAgIG9sZERlbGV0ZVNjb3BlRm4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVLdWJlcm5ldGVzQ2xpZW50KGtpbmQsIG5zID0gbnVsbCkge1xyXG4gICAgdmFyIEs4U0NsaWVudEZhY3RvcnkgPSBpbmplY3Q8YW55PihcIks4U0NsaWVudEZhY3RvcnlcIik7XHJcbiAgICBpZiAoIUs4U0NsaWVudEZhY3RvcnkpIHtcclxuICAgICAgbG9nLndhcm4oXCJDb3VsZCBub3QgZmluZCBpbmplY3RlZCBLOFNDbGllbnRGYWN0b3J5IVwiKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoa2luZCA9PT0gXCJwcm9qZWN0c1wiIHx8IGtpbmQgPT09IFwibmFtZXNwYWNlc1wiKSB7XHJcbiAgICAgIG5zID0gbnVsbDtcclxuICAgIH0gZWxzZSBpZiAoIW5zKSB7XHJcbiAgICAgIG5zID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEs4U0NsaWVudEZhY3RvcnkuY3JlYXRlKGtpbmQsIG5zKTtcclxuICB9XHJcblxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3VycmVudFVzZXJOYW1lKCkge1xyXG4gICAgdmFyIHVzZXJEZXRhaWxzID0gSGF3dGlvT0F1dGguZ2V0VXNlclByb2ZpbGUoKTtcclxuICAgIHZhciBhbnN3ZXIgPSBudWxsO1xyXG4gICAgaWYgKHVzZXJEZXRhaWxzKSB7XHJcbiAgICAgIGFuc3dlciA9IGdldE5hbWUodXNlckRldGFpbHMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFuc3dlciB8fCBcImFkbWluXCI7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlTmFtZXNwYWNlKG5zLCBjbGllbnQ/KSB7XHJcbiAgICBpZiAoIWNsaWVudCkge1xyXG4gICAgICBjbGllbnQgPSBpc09wZW5TaGlmdCA/IEt1YmVybmV0ZXMuY3JlYXRlS3ViZXJuZXRlc0NsaWVudCgncHJvamVjdHMnKSA6IEt1YmVybmV0ZXMuY3JlYXRlS3ViZXJuZXRlc0NsaWVudCgnbmFtZXNwYWNlcycpO1xyXG4gICAgfVxyXG4gICAgaWYgKG5zICYmIG5zICE9PSBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpKSB7XHJcbiAgICAgIHZhciBvYmplY3QgPSB7XHJcbiAgICAgICAgYXBpVmVyc2lvbjogS3ViZXJuZXRlcy5kZWZhdWx0QXBpVmVyc2lvbixcclxuICAgICAgICBraW5kOiBpc09wZW5TaGlmdCA/ICdQcm9qZWN0JyA6ICdOYW1lc3BhY2UnLFxyXG4gICAgICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgICAgICBuYW1lOiBucyxcclxuICAgICAgICAgIGxhYmVsczoge1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgY2xpZW50LnB1dChvYmplY3QsXHJcbiAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgIGxvZy5pbmZvKFwiQ3JlYXRlZCBuYW1lc3BhY2U6IFwiICsgbnMpXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBjcmVhdGUgbmFtZXNwYWNlOiBcIiArIG5zICsgXCI6IFwiICsgYW5ndWxhci50b0pzb24oZXJyKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlUkMob2JqLCBvbkNvbXBsZXRlRm4gPSBudWxsKXtcclxuICAgIHZhciBjbGllbnQgPSAgS3ViZXJuZXRlcy5jcmVhdGVLdWJlcm5ldGVzQ2xpZW50KCdyZXBsaWNhdGlvbmNvbnRyb2xsZXJzJywnZGVmYXVsdCcpO1xyXG4gICAgdmFyIFJDVGVtcGxhdGUgPSBuZXcgcmVzb3VyY2VSQ1RlbXBsYXRlKCk7XHJcbiAgICB2YXIgcmNUZW1wbGF0ZSA9IFJDVGVtcGxhdGUuY3JlYXRlUkMob2JqKTsgIFxyXG4gICAgY2xpZW50LnB1dChyY1RlbXBsYXRlLCBmdW5jdGlvbihvYmopIHsgICAgICAgXHJcbiAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKG9uQ29tcGxldGVGbikpIHtcclxuICAgICAgICAgICBvbkNvbXBsZXRlRm4ob2JqKTtcclxuICAgICAgIH1cclxuICAgIH0sKGVycikgPT57XHJcbiAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAgZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RPcmFjbGUoJGh0dHAsICR0aW1lb3V0LCB1cmwsIG9wZXJhdGlvbiwgcmVwbGljYXMsIGRlbGF5VGltZSl7XHJcbiAgICAgICR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgJGh0dHAoe1xyXG4gICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgICBtZXRob2Q6J1BPU1QnLFxyXG4gICAgICAgICAgICAgcGFyYW1zOntvcmFjbGVOYW1lOiBnZXROYW1lKHJlcGxpY2FzKSwgb3BlcmF0aW9uOiBvcGVyYXRpb259LCAgICAgICAgICAgIFxyXG4gICAgICAgICB9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xyXG4gICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdWNjZXNzXCIpO1xyXG4gICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuICAgICAgICAgICAgIC8vbG9nLndhcm4oXCJGYWlsZWQgdG8gY29ubmVjdCBcIiArIGNvbm5lY3RQYXJhbSArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgfSk7XHJcbiAgICB9LCBkZWxheVRpbWUpO1xyXG4gICB9XHJcblxyXG4gICBleHBvcnQgZnVuY3Rpb24gZ2V0T3JhY2xlU3RhdHVzKGxhYmVscyl7XHJcbiAgICAgICB2YXIgYW5zd2VyID0gLTE7XHJcbiAgICAgICBpZih0eXBlb2YobGFiZWxzKSA9PT0gJ29iamVjdCcgJiYgbGFiZWxzLmhhc093blByb3BlcnR5KFwic3RhdHVzXCIpKXtcclxuICAgICAgICAgICBzd2l0Y2gobGFiZWxzLnN0YXR1cyl7XHJcbiAgICAgICAgICAgICAgIGNhc2UgJzAnOlxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlciA9IDE7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyID0gMjtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlciA9IC0xO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgIH1cclxuICAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgIH1cclxuXHJcbiAgIGV4cG9ydCBmdW5jdGlvbiBnZXRFeHRyYWN0U3RhdHVzKGxhYmVscyl7XHJcbiAgICAgICBpZihsYWJlbHMuaXNUYXJnZXQgPT09ICdmYWxzZScpe1xyXG4gICAgICAgICAgIHJldHVybiBwYXJzZUludChsYWJlbHMuaXNFeHRyYWN0KTtcclxuICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgIHJldHVybiAxMDtcclxuICAgICAgIH1cclxuICAgfVxyXG5cclxuICAgZXhwb3J0IGZ1bmN0aW9uIGdldE9yYWNsZU5hbWUocmVwbGljYXMpOnN0cmluZyB7XHJcbiAgICAgIHZhciBhbm5vdGF0aW9uID0gZ2V0QW5ub3RhdGlvbnMocmVwbGljYXMpO1xyXG4gICAgICByZXR1cm4gYW5ub3RhdGlvbltcImNpdHlOYW1lXCJdICsgXCItXCIgKyBhbm5vdGF0aW9uW1wiZGlzdHJpY3ROYW1lXCJdICsgXCItXCIgKyBhbm5vdGF0aW9uW1wic3lzdGVtTmFtZVwiXTtcclxuICAgfVxyXG5cclxuICAgZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REYXRhVG9PcmFjbGUoJGh0dHAsIHNlbGVjdGVkUmVwbGljYXRpb25Db250cm9sbGVycywgdGFyZ2V0T3JhY2xlOiBDb25maWdzLm9yYWNsZVBhcmFtLCBmbj86KGRhdGEsIHN0YXR1cykgPT4gdm9pZCl7XHJcbiAgICAgICAvL2NvbnNvbGUubG9nKHRhcmdldFJlcGxpY2F0aW9uQ29udHJvbGxlci5sZW5ndGgpOyAgICAgIFxyXG4gICAgICB2YXIgYW5zd2VyID0gdGFyZ2V0T3JhY2xlICYmIHRydWU7IFxyXG4gICAgICB2YXIgaW5uZWVkT3JhY2xlID0gW107ICAgICBcclxuICAgICAgc2VsZWN0ZWRSZXBsaWNhdGlvbkNvbnRyb2xsZXJzLmZvckVhY2goKHJjKSA9PiB7IFxyXG4gICAgICAgICB2YXIgYW5ub3RhdGlvbnMgPSBnZXRBbm5vdGF0aW9ucyhyYyk7ICAgICAgICAgICAgXHJcbiAgICAgICAgIGFuc3dlciA9IGFuc3dlciAmJiBjaGVja291dE9yYWNsZUlzUnVubmluZyhyYyk7XHJcbiAgICAgICAgICAgICAgaW5uZWVkT3JhY2xlLnB1c2goe1xyXG4gICAgICAgICAgICAgIFwibmFtZVwiOiBnZXROYW1lKHJjKSxcclxuICAgICAgICAgICAgICBcImlwXCI6IGdldEhvc3QocmMuJHBvZHNbMF0pLFxyXG4gICAgICAgICAgICAgIFwicG9ydFwiOiByYy4kcG9kc1swXS5zcGVjLmNvbnRhaW5lcnNbMF0ucG9ydHNbMF0uaG9zdFBvcnQsXHJcbiAgICAgICAgICAgICAgXCJkYXRhSWRcIjogYW5ub3RhdGlvbnNbXCJpZFwiXVxyXG4gICAgICAgICAgfSk7ICAgICAgICAgIFxyXG4gICAgICB9KTtcclxuICAgICBcclxuICAgICAgaWYoYW5zd2VyKXtcclxuICAgICAgICAgIHZhciBkYXRhID17XCJuYW1lXCI6IHRhcmdldE9yYWNsZS5pZCwgXCJ0YXJnZXRcIjogdGFyZ2V0T3JhY2xlLCBcImlubmVlZFwiOiBpbm5lZWRPcmFjbGV9OyAgICBcclxuICAgICAgICAgIHZhciBzcGlubmVyO1xyXG4gICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgIHVybDogVXJsSGVscGVycy5qb2luKFwiL2phdmEvY29uc29sZS9hcGkvb3JhY2xlXCIsIHRhcmdldE9yYWNsZS5pZCtcIlwiLCBcImV4dHJhY3RcIiksXHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IDgwMDAsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgIC8vYXN5bmM6IGZhbHNlLFxyXG4gICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLFxyXG4gICAgICAgICAgICBiZWZvcmVTZW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgQ29uZmlncy5jcmVhdGVfbWFzaygpOyAgLy/liJvlu7rpga7nvanlsYJcclxuICAgICAgICAgICAgICBjcmVhdGVfbG9jYWRFZmZlY3QoXCLmraPlnKjpqozor4HmsYfmgLvlupPphY3nva7kv6Hmga8s6K+356iN562J77yBXCIpOyAvL+WIm+W7uuaVsOaNruWKoOi9veaViOaenOWxglxyXG4gICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9hZGluZycpXHJcbiAgICAgICAgICAgICAgc3Bpbm5lciA9IG5ldyBTcGlubmVyKGxvYWRDb25maWdzKCkpLnNwaW4odGFyZ2V0KTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29tcGxldGU6IChYTUxIdHRwUmVxdWVzdCwgdGV4dFN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKFhNTEh0dHBSZXF1ZXN0LnN0YXR1cyA9PSAyMDApe1xyXG4gICAgICAgICAgICAgICAgLy9zcGlubmVyLnNwaW4oKTtcclxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY3JlYXRlU3VjY2Vzc0luZm8oXCJzdWNjZXNcIiwgXCLov57mjqXmsYfmgLvlupPmiJDlip/vvIzljbPlsIbmiafooYzmsYfmgLvmk43kvZzvvIFcIik7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KFwiS3ViZXJuZXRlcy5yZW1vdmVNYXNrKClcIiwgMTUwMCk7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAvL3NwaW5uZXIuc3BpbigpOyBcclxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY3JlYXRlU3VjY2Vzc0luZm8oXCJlcnJvclwiLCBcIui/nuaOpeaxh+aAu+W6k+Wksei0pe+8jOivt+ajgOafpeacjeWKoembhue+pOS4reeahOaxh+aAu+W6k+mFjee9ruaYr+WQpuato+ehru+8gVwiKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoXCJLdWJlcm5ldGVzLnJlbW92ZU1hc2soKVwiLCAxNTAwKTsgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgIH0pOyAgICAgICAgXHJcbiAgICAgICAgICAvL0NvbmZpZ3Mub3JhY2xlSW5mb09wZXJhdGUoJGh0dHAsIFwiL2phdmEvY29uc29sZS9hcGkvb3JhY2xlXCIsIENvbmZpZ3MuT3BlcmF0ZVR5cGUuRVhUUkFDVCwgZGF0YSwgZm4pO1xyXG4gICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgLy9hbGVydChcIuaCqOmAieaLqeeahOaxh+aAu+aVsOaNruW6k+aIlumcgOimgeaxh+aAu+eahOaVsOaNruW6k+S4reWtmOWcqOacquWQr+WKqOaIkOWKn+eahOaVsOaNruW6k++8jOWvvOiHtOaxh+aAu+aTjeS9nOWksei0pe+8jOivt+mHjeaWsOmAieaLqe+8gVwiKTtcclxuICAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOumcgOimgeaxh+aAu+eahOaVsOaNruW6k+S4reWtmOWcqOacquWQr+WKqOaIkOWKn+eahOaVsOaNruW6k++8gVwiLCAnJyxudWxsLCAwLCBcImVycm9yXCIpO1xyXG4gICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBleHBvcnQgZnVuY3Rpb24gY2hlY2tvdXRPcmFjbGVJc1J1bm5pbmcocmMpe1xyXG4gICAgICBpZihyYy4kcG9kQ291bnRlcnMucmVhZHkgJiYgcmMuJG9yYWNsZVN0YXR1cyA9PSAyKXtcclxuICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBleHBvcnQgZnVuY3Rpb24gcmVwbGljYXNJc0NyZWF0ZWQgKHJlcGxpY2F0aW9uY29udHJvbGxlcnM6QXJyYXk8YW55PiwgbmFtZTpzdHJpbmcpe1xyXG4gICAgIHZhciByZXN1bHQgPSBmYWxzZTtcclxuICAgICBpZiggcmVwbGljYXRpb25jb250cm9sbGVycyAhPW51bGwgfHwgcmVwbGljYXRpb25jb250cm9sbGVycy5sZW5ndGg8PTApe1xyXG4gICAgICAgZm9yKHZhciBpPTA7IGk8cmVwbGljYXRpb25jb250cm9sbGVycy5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgaWYoZ2V0TmFtZShyZXBsaWNhdGlvbmNvbnRyb2xsZXJzW2ldKSA9PT0gbmFtZSl7XHJcbiAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb25maWdzKCl7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBsaW5lczogOSxcclxuICAgICAgICAgIGxlbmd0aDogMCxcclxuICAgICAgICAgIHdpZHRoOiAxMywgXHJcbiAgICAgICAgICByYWRpdXM6IDM4LFxyXG4gICAgICAgICAgc2NhbGU6IDEsXHJcbiAgICAgICAgICBjb3JuZXJzOiAxLCBcclxuICAgICAgICAgIGNvbG9yOiAnI2ZmZmZmZicsIFxyXG4gICAgICAgICAgb3BhY2l0eTogMCwgXHJcbiAgICAgICAgICByb3RhdGU6IDkwLCBcclxuICAgICAgICAgIGRpcmVjdGlvbjogMSwgXHJcbiAgICAgICAgICBzcGVlZDogMC41LCBcclxuICAgICAgICAgIHRyYWlsOiA1MCwgICAgICAgICAgIFxyXG4gICAgICAgICAgekluZGV4OiAxMDAwMDAwMDAyLCBcclxuICAgICAgICAgIGNsYXNzTmFtZTogJ3NwaW5uZXInLCBcclxuICAgICAgICAgIHRvcDogJzQwJScgLCBcclxuICAgICAgICAgIGxlZnQ6ICc1MCUnLCBcclxuICAgICAgICAgIHNoYWRvdzogZmFsc2UsIFxyXG4gICAgICAgICAgaHdhY2NlbDogZmFsc2UsIFxyXG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIOWIm+W7uuWKoOi9veaViOaenOWxglxyXG4gICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZV9sb2NhZEVmZmVjdChtc2cpe1xyXG4gICAgdmFyIHRtcCAgPSBcIjxkaXYgaWQ9XFxcImxvYWRpbmdcXFwiPjwvZGl2PlwiXHJcbiAgICAgICAgKyBcIjxzcGFuPlwiICsgbXNnICsgXCI8L3NwYW4+XCI7XHJcbiAgICB2YXIgbG9hZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7IFxyXG4gICAgbG9hZC5pZCA9IFwibG9hZFwiOyAgICBcclxuICAgIGxvYWQuaW5uZXJIVE1MID0gdG1wO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsb2FkKTtcclxuICAgICQoXCIjbG9hZFwiKS5hZGRDbGFzcyhcImxvYWQtZWZmZWN0LW1zZ1wiKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWNjZXNzSW5mbyhpY29uOnN0cmluZywgbXNnOnN0cmluZyl7XHJcbiAgICAkKFwiI2xvYWRcIikucmVtb3ZlKCk7XHJcbiAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBtc2csICcnLG51bGwsIDAsIGljb24pO1xyXG4gICAgLyp2YXIgdG1wID0gXCI8ZGl2IGNsYXNzPVxcXCJsb2FkLXJlc3VsdFxcXCIgPjxpbWcgc3JjPVxcXCJcIiBcclxuICAgICAgKyBpY29uICsgXCJcXFwiIGNsYXNzPVxcXCJjdXN0b20tYWxlcnQtaW1nXFxcIj48L2Rpdj5cIlxyXG4gICAgICArIFwiPHNwYW4gY2xhc3M9XFxcImxvYWQtcmVzdWx0LW1zZ1xcXCI+XCIgKyBtc2cgK1wiPC9zcGFuPlwiOyBcclxuICAgIHZhciByZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgcmVzdWx0LmlkID0gXCJleGVfcmVzdWx0XCI7IFxyXG4gICAgcmVzdWx0LmlubmVySFRNTCA9IHRtcDsgICAgICAgXHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlc3VsdCk7Ki9cclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiByZW1vdmVNYXNrKCl7XHJcbiAgICB2YXIgbWFzayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFza1wiKTtcclxuICAgIC8vdmFyIHJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhlX3Jlc3VsdFwiKTtcclxuICAgIGlmKG51bGwgPT0gbWFzaylcclxuICAgICAgcmV0dXJuOyAgICBcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFzayk7XHJcbiAgICAvL2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocmVzdWx0KTtcclxuICB9XHJcblxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIiAvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCB2YXIgY29udGV4dCA9ICcvd29ya3NwYWNlcyc7XHJcbiAgZXhwb3J0IHZhciBoYXNoID0gJyMnICsgY29udGV4dDtcclxuICBleHBvcnQgdmFyIHBsdWdpbk5hbWUgPSAnRGV2ZWxvcGVyJztcclxuICBleHBvcnQgdmFyIHBsdWdpblBhdGggPSAncGx1Z2lucy9kZXZlbG9wZXIvJztcclxuICBleHBvcnQgdmFyIHRlbXBsYXRlUGF0aCA9IHBsdWdpblBhdGggKyAnaHRtbC8nO1xyXG4gIGV4cG9ydCB2YXIgbG9nOkxvZ2dpbmcuTG9nZ2VyID0gTG9nZ2VyLmdldChwbHVnaW5OYW1lKTtcclxuXHJcbiAgZXhwb3J0IHZhciBqZW5raW5zU2VydmljZU5hbWUgPSBcImplbmtpbnNcIjtcclxuICBleHBvcnQgdmFyIGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQgPSBqZW5raW5zU2VydmljZU5hbWUgKyBcIjpodHRwXCI7XHJcblxyXG4gIGV4cG9ydCB2YXIgamVua2luc0h0dHBDb25maWcgPSB7XHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3gtanNvbiwgdGV4dC9wbGFpblwiXHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBoYXNuJ3QgY2hhbmdlZCBmcm9tIHRoZSBsYXN0IGNhY2hlZCBKU09OIHZlcnNpb24gb2YgdGhpcyBvYmplY3RcclxuICAgKi9cclxuICBleHBvcnQgZnVuY3Rpb24gaGFzT2JqZWN0Q2hhbmdlZCh2YWx1ZSwgc3RhdGUpIHtcclxuICAgIHZhciBqc29uID0gYW5ndWxhci50b0pzb24odmFsdWUgfHwgXCJcIik7XHJcbiAgICB2YXIgb2xkSnNvbiA9IHN0YXRlLmpzb247XHJcbiAgICBzdGF0ZS5qc29uID0ganNvbjtcclxuICAgIHJldHVybiAhb2xkSnNvbiB8fCBqc29uICE9PSBvbGRKc29uO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHByb2plY3RGb3JTY29wZSgkc2NvcGUpIHtcclxuICAgIGlmICgkc2NvcGUpIHtcclxuICAgICAgcmV0dXJuICRzY29wZS5idWlsZENvbmZpZyB8fCAkc2NvcGUuZW50aXR5IHx8ICgkc2NvcGUubW9kZWwgfHwge30pLnByb2plY3Q7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTGV0cyBsb2FkIHRoZSBwcm9qZWN0IHZlcnNpb25zIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXHJcbiAgICovXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGxvYWRQcm9qZWN0VmVyc2lvbnMoJHNjb3BlLCAkZWxlbWVudCwgcHJvamVjdCwgZW52LCBucywgYW5zd2VyLCBjYWNoZXMpIHtcclxuICAgIHZhciBwcm9qZWN0QW5ub3RhdGlvbiA9IFwicHJvamVjdFwiO1xyXG4gICAgdmFyIHZlcnNpb25Bbm5vdGF0aW9uID0gXCJ2ZXJzaW9uXCI7XHJcblxyXG4gICAgdmFyIHByb2plY3ROYW1lc3BhY2UgPSBwcm9qZWN0LiRuYW1lc3BhY2U7XHJcbiAgICB2YXIgcHJvamVjdE5hbWUgPSBwcm9qZWN0LiRuYW1lO1xyXG5cclxuICAgIHZhciBjYWNoZSA9IGNhY2hlc1tuc107XHJcbiAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgIGNhY2hlID0ge307XHJcbiAgICAgIGNhY2hlc1tuc10gPSBjYWNoZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc3RhdHVzID0ge1xyXG4gICAgICByY3M6IFtdLFxyXG4gICAgICBwb2RzOiBbXSxcclxuICAgICAgcm91dGVzOiBbXSxcclxuICAgICAgc2VydmljZXM6IFtdXHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBpbWFnZVN0cmVhbVRhZ3MgPSBbXTtcclxuXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVNb2RlbCgpIHtcclxuICAgICAgdmFyIHByb2plY3RJbmZvcyA9IHt9O1xyXG4gICAgICB2YXIgbW9kZWwgPSAkc2NvcGUubW9kZWwgfHwge307XHJcblxyXG4gICAgICBhbmd1bGFyLmZvckVhY2goc3RhdHVzLnJjcywgKGl0ZW0pID0+IHtcclxuICAgICAgICB2YXIgbWV0YWRhdGEgPSBpdGVtLm1ldGFkYXRhIHx8IHt9O1xyXG4gICAgICAgIHZhciBuYW1lID0gbWV0YWRhdGEubmFtZTtcclxuICAgICAgICB2YXIgbGFiZWxzID0gbWV0YWRhdGEubGFiZWxzIHx8IHt9O1xyXG4gICAgICAgIHZhciBhbm5vdGF0aW9ucyA9IG1ldGFkYXRhLmFubm90YXRpb25zIHx8IHt9O1xyXG4gICAgICAgIHZhciBzcGVjID0gaXRlbS5zcGVjIHx8IHt9O1xyXG4gICAgICAgIHZhciBzZWxlY3RvciA9IHNwZWMuc2VsZWN0b3I7XHJcblxyXG4gICAgICAgIHZhciBwcm9qZWN0ID0gbGFiZWxzW3Byb2plY3RBbm5vdGF0aW9uXTtcclxuICAgICAgICB2YXIgdmVyc2lvbiA9IGxhYmVsc1t2ZXJzaW9uQW5ub3RhdGlvbl07XHJcblxyXG4gICAgICAgIC8vIGxldHMgdHJ5IHRoZSBTMkkgZGVmYXVsdHMuLi5cclxuICAgICAgICBpZiAoIXByb2plY3QpIHtcclxuICAgICAgICAgIHByb2plY3QgPSBsYWJlbHNbXCJhcHBcIl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmVyc2lvbikge1xyXG4gICAgICAgICAgdmVyc2lvbiA9IGFubm90YXRpb25zW1wib3BlbnNoaWZ0LmlvL2RlcGxveW1lbnQtY29uZmlnLmxhdGVzdC12ZXJzaW9uXCJdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9qZWN0ICYmIHZlcnNpb24gJiYgcHJvamVjdCA9PT0gcHJvamVjdE5hbWUpIHtcclxuICAgICAgICAgIHZhciBwcm9qZWN0cyA9IHByb2plY3RJbmZvc1twcm9qZWN0XTtcclxuICAgICAgICAgIGlmICghcHJvamVjdHMpIHtcclxuICAgICAgICAgICAgcHJvamVjdHMgPSB7XHJcbiAgICAgICAgICAgICAgcHJvamVjdDogcHJvamVjdCxcclxuICAgICAgICAgICAgICB2ZXJzaW9uczoge31cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcHJvamVjdEluZm9zW3Byb2plY3RdID0gcHJvamVjdHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgdmVyc2lvbkluZm8gPSBwcm9qZWN0cy52ZXJzaW9uc1t2ZXJzaW9uXTtcclxuICAgICAgICAgIGlmICghdmVyc2lvbkluZm8pIHtcclxuICAgICAgICAgICAgdmVyc2lvbkluZm8gPSB7XHJcbiAgICAgICAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyczoge31cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcHJvamVjdHMudmVyc2lvbnNbdmVyc2lvbl0gPSB2ZXJzaW9uSW5mbztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgIHZlcnNpb25JbmZvLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNbbmFtZV0gPSBpdGVtO1xyXG4gICAgICAgICAgICBpdGVtLiRuYW1lID0gbmFtZTtcclxuICAgICAgICAgICAgaWYgKHByb2plY3ROYW1lc3BhY2UgJiYgcHJvamVjdE5hbWUpIHtcclxuICAgICAgICAgICAgICBpdGVtLiR2aWV3TGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzL1wiLCBwcm9qZWN0TmFtZXNwYWNlLCBcInByb2plY3RzXCIsIHByb2plY3ROYW1lLCBcIm5hbWVzcGFjZVwiLCBucywgXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIsIG5hbWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiTWlzc2luZyBwcm9qZWN0IGRhdGEhIFwiICsgcHJvamVjdE5hbWVzcGFjZSArIFwiIG5hbWUgXCIgKyBwcm9qZWN0TmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGl0ZW0uJHNlcnZpY2VzID0gW107XHJcbiAgICAgICAgICAgIHZhciByY0xpbmsgPSBudWxsO1xyXG4gICAgICAgICAgICBzdGF0dXMuc2VydmljZXMuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciByZXBTZWxlY3RvciA9IEt1YmVybmV0ZXMuZ2V0U2VsZWN0b3IoaXRlbSk7XHJcbiAgICAgICAgICAgICAgdmFyIHNlcnZpY2VTZWxlY3RvciA9IEt1YmVybmV0ZXMuZ2V0U2VsZWN0b3Ioc2VydmljZSk7XHJcbiAgICAgICAgICAgICAgaWYgKHNlcnZpY2VTZWxlY3RvciAmJiByZXBTZWxlY3RvciAmJlxyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5zZWxlY3Rvck1hdGNoZXMoc2VydmljZVNlbGVjdG9yLCByZXBTZWxlY3RvcikgJiZcclxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuZ2V0TmFtZXNwYWNlKHNlcnZpY2UpID09PSBLdWJlcm5ldGVzLmdldE5hbWVzcGFjZShpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzLnJvdXRlcy5mb3JFYWNoKChyb3V0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgc2VydmljZU5hbWUgPSBLdWJlcm5ldGVzLmdldE5hbWUoc2VydmljZSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlTmFtZSA9PT0gS3ViZXJuZXRlcy5nZXROYW1lKHJvdXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlcnZpY2VbXCIkcm91dGVcIl0gPSByb3V0ZTtcclxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlW1wiJGhvc3RcIl0gPSBDb3JlLnBhdGhHZXQocm91dGUsIFtcInNwZWNcIiwgXCJob3N0XCJdKTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLiRzZXJ2aWNlcy5wdXNoKHNlcnZpY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmNMaW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5zZXJ2aWNlTGlua1VybChzZXJ2aWNlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBmaW5kIGljb24gZXRjP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByY0xpbmsgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc2VydmljZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogdXJsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpdGVtW1wiJHNlcnZpY2VMaW5rXCJdID0gcmNMaW5rO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbS4kYnVpbGRJZCA9IGFubm90YXRpb25zW1wiZmFicmljOC5pby9idWlsZC1pZFwiXSB8fCBpdGVtLiRidWlsZElkO1xyXG4gICAgICAgICAgaXRlbS4kYnVpbGRVcmwgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguaW8vYnVpbGQtdXJsXCJdIHx8IGl0ZW0uJGJ1aWxkVXJsO1xyXG4gICAgICAgICAgaXRlbS4kZ2l0Q29tbWl0ID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2dpdC1jb21taXRcIl0gfHwgaXRlbS4kZ2l0Q29tbWl0O1xyXG4gICAgICAgICAgaXRlbS4kZ2l0VXJsID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2dpdC11cmxcIl0gfHwgaXRlbS4kZ2l0VXJsO1xyXG4gICAgICAgICAgaXRlbS4kZ2l0QnJhbmNoID0gYW5ub3RhdGlvbnNbXCJmYWJyaWM4LmlvL2dpdC1icmFuY2hcIl0gfHwgaXRlbS4kZ2l0QnJhbmNoO1xyXG4gICAgICAgICAgaWYgKCFpdGVtLiRnaXRDb21taXQpIHtcclxuICAgICAgICAgICAgdmFyIGltYWdlID0gZ2V0SW1hZ2UoaXRlbSk7XHJcbiAgICAgICAgICAgIGlmIChpbWFnZSkge1xyXG4gICAgICAgICAgICAgIGlmICghJHNjb3BlLiRpc1dhdGNoSW1hZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuJGlzV2F0Y2hJbWFnZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcImltYWdlc1wiLCBudWxsLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpbWFnZVN0cmVhbVRhZ3MgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICBjaGVja0Zvck1pc3NpbmdNZXRhZGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNoZWNrRm9yTWlzc2luZ01ldGFkYXRhKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRJbWFnZShpdGVtKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGltYWdlID0gXCJcIjtcclxuICAgICAgICAgICAgICAvLyBsZXRzIHNlZSBpZiB3ZSBjYW4gZmluZCB0aGUgY29tbWl0IGlkIGZyb20gYSBTMkkgaW1hZ2UgbmFtZVxyXG4gICAgICAgICAgICAgIC8vIFRPRE8gbmVlZHMgdGhpcyBpc3N1ZSBmaXhlZCB0byBmaW5kIGl0IHZpYSBhbiBPcGVuU2hpZnQgYW5ub3RhdGlvbjpcclxuICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vb3BlbnNoaWZ0L29yaWdpbi9pc3N1ZXMvNjI0MVxyXG4gICAgICAgICAgICAgIHZhciBjb250YWluZXJzID0gQ29yZS5wYXRoR2V0KGl0ZW0sIFtcInNwZWNcIiwgXCJ0ZW1wbGF0ZVwiLCBcInNwZWNcIiwgXCJjb250YWluZXJzXCJdKTtcclxuICAgICAgICAgICAgICBpZiAoY29udGFpbmVycyAmJiBjb250YWluZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNvbnRhaW5lcnNbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGltYWdlID0gY29udGFpbmVyLmltYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gaW1hZ2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrRm9yTWlzc2luZ01ldGFkYXRhKCkge1xyXG4gICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwcm9qZWN0cy52ZXJzaW9ucywgKHZpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2godmkucmVwbGljYXRpb25Db250cm9sbGVycywgKGl0ZW0sIG5hbWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLiRnaXRDb21taXQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBnZXRJbWFnZShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChpbWFnZVN0cmVhbVRhZ3MsIChpbWFnZVN0cmVhbVRhZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VOYW1lID0gaW1hZ2VTdHJlYW1UYWcuZG9ja2VySW1hZ2VSZWZlcmVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZU5hbWUgJiYgaW1hZ2VOYW1lID09PSBpbWFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZElTVGFnID0gaW1hZ2VTdHJlYW1UYWc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hbmlmZXN0SlNPTiA9IGltYWdlU3RyZWFtVGFnLmRvY2tlckltYWdlTWFuaWZlc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hbmlmZXN0SlNPTikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hbmlmZXN0ID0gYW5ndWxhci5mcm9tSnNvbihtYW5pZmVzdEpTT04pIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhpc3RvcnkgPSBtYW5pZmVzdC5oaXN0b3J5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpc3RvcnkgJiYgaGlzdG9yeS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYxID0gaGlzdG9yeVswXS52MUNvbXBhdGliaWxpdHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2MSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gYW5ndWxhci5mcm9tSnNvbih2MSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudiA9IENvcmUucGF0aEdldChkYXRhLCBbXCJjb25maWdcIiwgXCJFbnZcIl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChlbnYsIChlbnZFeHApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnZFeHApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IGVudkV4cC5zcGxpdChcIj1cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAyICYmIHZhbHVlc1swXSA9PSBcIk9QRU5TSElGVF9CVUlMRF9OQU1FXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVpbGROYW1lID0gdmFsdWVzWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWlsZE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGJ1aWxkSWQgPSBidWlsZE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRidWlsZFVybCA9IERldmVsb3Blci5wcm9qZWN0V29ya3NwYWNlTGluayhucywgcHJvamVjdE5hbWUsIFwiYnVpbGRMb2dzL1wiICsgYnVpbGROYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFiZWxzID0gQ29yZS5wYXRoR2V0KGRhdGEsIFtcImNvbmZpZ1wiLCBcIkxhYmVsc1wiXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVscykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS4kZ2l0Q29tbWl0ID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5pZFwiXSB8fCBpdGVtLiRnaXRDb21taXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRDb21taXRBdXRob3IgPSBsYWJlbHNbXCJpby5vcGVuc2hpZnQuYnVpbGQuY29tbWl0LmF1dGhvclwiXSB8fCBpdGVtLiRnaXRDb21taXRBdXRob3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRDb21taXREYXRlID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5kYXRlXCJdIHx8IGl0ZW0uJGdpdENvbW1pdERhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRDb21taXRNZXNzYWdlID0gbGFiZWxzW1wiaW8ub3BlbnNoaWZ0LmJ1aWxkLmNvbW1pdC5tZXNzYWdlXCJdIHx8IGl0ZW0uJGdpdENvbW1pdE1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLiRnaXRCcmFuY2ggPSBsYWJlbHNbXCJpby5vcGVuc2hpZnQuYnVpbGQuY29tbWl0LnJlZlwiXSB8fCBpdGVtLiRnaXRCcmFuY2g7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLiRnaXRVcmwgJiYgaXRlbS4kZ2l0Q29tbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uJGdpdFVybCA9IERldmVsb3Blci5wcm9qZWN0V29ya3NwYWNlTGluayhucywgcHJvamVjdE5hbWUsIFwid2lraS9jb21taXREZXRhaWwvLy9cIiArIGl0ZW0uJGdpdENvbW1pdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RvclRleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIixcIik7XHJcbiAgICAgICAgICAgIHZhciBwb2RMaW5rVXJsID0gVXJsSGVscGVycy5qb2luKHByb2plY3RMaW5rKHByb2plY3ROYW1lKSwgXCJuYW1lc3BhY2VcIiwgbnMsIFwicG9kc1wiKTtcclxuICAgICAgICAgICAgaXRlbS5wb2RzID0gW107XHJcbiAgICAgICAgICAgIGl0ZW0uJHBvZENvdW50ZXJzID0gS3ViZXJuZXRlcy5jcmVhdGVQb2RDb3VudGVycyhzZWxlY3Rvciwgc3RhdHVzLnBvZHMsIGl0ZW0ucG9kcywgc2VsZWN0b3JUZXh0LCBwb2RMaW5rVXJsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gbGV0cyBjaGVjayBmb3IgYSBwcm9qZWN0IG5hbWUgaWYgd2UgaGF2ZSBsb3RzIG9mIFJDcyB3aXRoIG5vIHBvZHMsIGxldHMgcmVtb3ZlIHRoZW0hXHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChwcm9qZWN0SW5mb3MsIChwcm9qZWN0LCBwcm9qZWN0TmFtZSkgPT4ge1xyXG4gICAgICAgIHZhciByY3NOb1BvZHMgPSBbXTtcclxuICAgICAgICB2YXIgcmNzV2l0aFBvZHMgPSBbXTtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdC52ZXJzaW9ucywgKHZlcnNpb25JbmZvKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmNzID0gdmVyc2lvbkluZm8ucmVwbGljYXRpb25Db250cm9sbGVycztcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChyY3MsIChpdGVtLCBuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBjb3VudCA9IEt1YmVybmV0ZXMucG9kQ291bnRlclRvdGFsKGl0ZW0uJHBvZENvdW50ZXJzKTtcclxuICAgICAgICAgICAgaWYgKGNvdW50KSB7XHJcbiAgICAgICAgICAgICAgcmNzV2l0aFBvZHMucHVzaChuYW1lKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByY3NOb1BvZHMucHVzaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgcmNzW25hbWVdO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAocmNzV2l0aFBvZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAvLyBsZXRzIHJlbW92ZSBhbGwgdGhlIGVtcHR5IFJDc1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHJjc05vUG9kcywgKGZuKSA9PiB7XHJcbiAgICAgICAgICAgIGZuKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQocHJvamVjdEluZm9zLCBjYWNoZSkpIHtcclxuICAgICAgICBsb2cuZGVidWcoXCJwcm9qZWN0IHZlcnNpb25zIGhhcyBjaGFuZ2VkIVwiKTtcclxuICAgICAgICBhbnN3ZXJbbnNdID0gcHJvamVjdEluZm9zO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgS3ViZXJuZXRlcy53YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcInJlcGxpY2F0aW9uY29udHJvbGxlcnNcIiwgbnMsIChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgc3RhdHVzLnJjcyA9IGRhdGE7XHJcbiAgICAgICAgdXBkYXRlTW9kZWwoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBLdWJlcm5ldGVzLndhdGNoKCRzY29wZSwgJGVsZW1lbnQsIFwic2VydmljZXNcIiwgbnMsIChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgc3RhdHVzLnNlcnZpY2VzID0gZGF0YTtcclxuICAgICAgICB1cGRhdGVNb2RlbCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIEt1YmVybmV0ZXMud2F0Y2goJHNjb3BlLCAkZWxlbWVudCwgXCJyb3V0ZXNcIiwgbnMsIChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgc3RhdHVzLnJvdXRlcyA9IGRhdGE7XHJcbiAgICAgICAgdXBkYXRlTW9kZWwoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBLdWJlcm5ldGVzLndhdGNoKCRzY29wZSwgJGVsZW1lbnQsIFwicG9kc1wiLCBucywgKGRhdGEpID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICBzdGF0dXMucG9kcyA9IGRhdGE7XHJcbiAgICAgICAgdXBkYXRlTW9kZWwoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxubW9kdWxlIERldmVsb3BlcntcclxuICAgIHZhciBsb2cgPSBMb2dnZXIuZ2V0KCdkZXZlbG9wZXItbmF2aWdhdGlvbicpO1xyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1cnJlbnRTdWJOYXZCYXIoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyl7ICAgIFx0XHJcblx0XHRyZXR1cm4gYWN0aXZhdGVDdXJyZW50KFtcclxuXHRcdFx0e1xyXG5cdFx0XHQgaHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsXCJPdmVydmlld1wiLFwiY29sZC9kYXRhLXR5cGUvYWxsXCIpLFxyXG5cdFx0XHQgbGFiZWw6IFwi5Ya35Yy65pWw5o2u566h55CGXCIsXHJcblx0XHRcdCB0aXRsZTogXCLmlbDmja7msYfmgLvku7vliqFcIixcclxuXHRcdFx0IGl0ZW1zOiBbe1xyXG5cdFx0XHQgXHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcIk92ZXJ2aWV3XCIsXCJjb2xkL2RhdGEtdHlwZS9hbGxcIiksXHJcblx0XHRcdCBcdGxhYmVsOiBcIuWFqOmDqFwiLFxyXG5cdFx0XHQgXHR0aXRsZTogXCLlhajpg6jmlbDmja5cIlxyXG5cdFx0XHQgfSxcclxuXHRcdFx0IHtcclxuXHRcdFx0XHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcIk92ZXJ2aWV3XCIsXCJjb2xkL2RhdGEtdHlwZS9maW5hbmNpYWxcIiksXHJcblx0XHRcdCBcdGxhYmVsOiBcIui0ouaUv1wiLFxyXG5cdFx0XHQgXHR0aXRsZTogXCLotKLmlL/mlbDmja5cIlxyXG5cdFx0XHQgfSxcclxuXHRcdFx0IHtcclxuXHRcdFx0IFx0aHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsXCJPdmVydmlldy9cIixcImNvbGQvZGF0YS10eXBlL3NvY2lhbC1zZWN1cml0eVwiKSxcclxuXHRcdFx0IFx0bGFiZWw6IFwi56S+5L+dXCIsXHJcblx0XHRcdCBcdHRpdGxlOiBcIuekvuS/neaVsOaNrlwiXHJcblx0XHRcdCB9XVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0aHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsXCJPdmVydmlld1wiLFwiaG90L2RhdGEtdHlwZS9hbGxcIiksXHJcblx0XHRcdFx0bGFiZWw6IFwi54Ot5Yy65pWw5o2u566h55CGXCIsXHJcblx0XHRcdFx0dGl0bGU6IFwi5p+l55yL5omA5pyJ5pWw5o2uXCIsXHJcblx0XHRcdFx0aXRlbXM6IFt7XHJcblx0XHRcdCBcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LFwiT3ZlcnZpZXdcIixcImhvdC9kYXRhLXR5cGUvYWxsXCIpLFxyXG5cdFx0XHQgXHRsYWJlbDogXCLlhajpg6hcIixcclxuXHRcdFx0IFx0dGl0bGU6IFwi5YWo6YOo5pWw5o2uXCJcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LFwiT3ZlcnZpZXdcIixcImhvdC9kYXRhLXR5cGUvZmluYW5jaWFsXCIpLFxyXG5cdFx0XHQgXHRsYWJlbDogXCLotKLmlL9cIixcclxuXHRcdFx0IFx0dGl0bGU6IFwi6LSi5pS/5pWw5o2uXCJcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHQgXHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcIk92ZXJ2aWV3L1wiLFwiaG90L2RhdGEtdHlwZS9zb2NpYWwtc2VjdXJpdHlcIiksXHJcblx0XHRcdCBcdGxhYmVsOiBcIuekvuS/nVwiLFxyXG5cdFx0XHQgXHR0aXRsZTogXCLnpL7kv53mlbDmja5cIlxyXG5cdFx0XHQgfV1cclxuXHRcdFx0fSxcdFx0XHRcclxuXHRcdFx0e1xyXG5cdFx0XHQgXHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcIk92ZXJ2aWV3L1wiLFwidGFza1wiKSxcclxuXHRcdFx0IFx0bGFiZWw6IFwi5Lu75YqhXCIsXHJcblx0XHRcdCBcdHRpdGxlOiBcIuS7u+WKoeafpeeci1wiXHJcblx0XHRcdH0sXHRcdFx0XHJcblx0XHRdKTtcclxuXHR9XHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdzRGF0YVNlcnZpY2UudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9kZXZlbG9wZXIvdHMvZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuLy8vICA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9kZXZlbG9wZXIvdHMvZGF0YU1hbmFnZXJIZWxwZXIudHNcIi8+XHJcbm1vZHVsZSBDb25maWdze1xyXG5cdGV4cG9ydCBjbGFzcyBPcGVyYXRlVHlwZXtcclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IERFTEVURSgpOnN0cmluZyB7cmV0dXJuIFwiZGVsZXRlXCJ9XHJcblx0XHRwdWJsaWMgc3RhdGljIGdldCBVUERBVEUoKTpzdHJpbmcge3JldHVybiBcInVwZGF0ZVwifVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgUFVUKCk6c3RyaW5ne3JldHVybiBcInB1dFwifSBcclxuXHRcdHB1YmxpYyBzdGF0aWMgZ2V0IE1PVkUoKTpzdHJpbmd7cmV0dXJuIFwibW92ZVwifVxyXG5cdFx0cHVibGljIHN0YXRpYyBnZXQgRVhUUkFDVCgpOnN0cmluZ3tyZXR1cm4gXCJleHRyYWN0XCJ9XHJcblx0fVxyXG5cclxuXHRfbW9kdWxlLmNvbnRyb2xsZXIoJ0NvbmZpZ3MuTWVudUl0ZW1Db250cm9sbGVyJyxbJyRzY29wZScsICckbG9jYXRpb24nLCAoJHNjb3BlLCAkbG9jYXRpb24pID0+IHtcdFx0XHJcblx0XHQkc2NvcGUubWVudUl0ZW09W3tcclxuXHRcdFx0aWNvbjogXCJnbHlwaGljb24gZ2x5cGhpY29uLWNsb3VkLXVwbG9hZFwiLFxyXG5cdFx0XHRsYWJlbDogXCLmlbDmja7nrqHnkIbphY3nva5cIixcclxuXHRcdFx0dGl0bGU6IFwi6YWN572u5pWw5o2u5a2Y5YKo5L+h5oGvXCIsXHRcdFx0XHJcblx0XHRcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCBcIi9nbHVzdGVyLWZzL3NldHRpbmdcIilcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGljb246IFwiZ2x5cGhpY29uIGdseXBoaWNvbi10aC1saXN0XCIsXHJcblx0XHRcdGxhYmVsOiBcIuacjeWKoembhue+pOmFjee9rlwiLFxyXG5cdFx0XHR0aXRsZTogXCLphY3nva7mnI3liqHpm4bnvqTkv6Hmga9cIixcclxuXHRcdFx0aHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsIFwiL2t1YmUtY2x1c3Rlci9zZXR0aW5nXCIpXHJcblx0XHR9XVx0XHRcclxuXHR9XSk7XHJcblxyXG5cdGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ0JyZWFkY3J1bWJzKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpe1xyXG5cdFx0dmFyIHVybCA9ICRsb2NhdGlvbi51cmwoKTtcclxuXHRcdHZhciBsYWJlbCwgdGl0bGU7XHJcblx0XHRzd2l0Y2ggKHVybCkge1xyXG5cdFx0XHRjYXNlIFwiL2NvbmZpZy9nbHVzdGVyLWZzL3NldHRpbmdcIjpcclxuXHRcdFx0XHRsYWJlbCA9IFwi5pWw5o2u566h55CG6YWN572uXCI7XHJcblx0XHRcdFx0dGl0bGU9IFwi6YWN572u5pWw5o2u5a2Y5YKo5L+h5oGvXCI7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCIvY29uZmlnL2t1YmUtY2x1c3Rlci9zZXR0aW5nXCI6XHJcblx0XHRcdCAgICBsYWJlbCA9IFwi5pyN5Yqh6ZuG576k6YWN572uXCI7XHJcblx0XHRcdFx0dGl0bGU9IFwi6YWN572u5pyN5Yqh6ZuG576k5L+h5oGvXCI7XHJcblx0XHRcdCAgICBicmVhaztcdFx0XHQgICAgXHRcdFx0XHJcblx0XHRcdGRlZmF1bHQ6XHRcdFx0XHRcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0cmV0dXJuIERldmVsb3Blci5hY3RpdmF0ZUN1cnJlbnQoW3tcclxuXHRcdFx0aHJlZjogdXJsLFxyXG5cdFx0XHRsYWJlbDogbGFiZWwsLy9pdGVtLmxhYmVsLFxyXG5cdFx0XHR0aXRsZTogdGl0bGUvL2l0ZW0udGl0bGVcclxuXHRcdH1dKTsgXHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gY3JlYXRlT3JhY2xlSW5mbyhhcnJheTpBcnJheTxhbnk+LCBpZDpudW1iZXIpe1xyXG5cdFx0dmFyIHJlc3VsdCA9e1wiaWRcIjogaWR9O1xyXG5cdFx0YW5ndWxhci5mb3JFYWNoKGFycmF5LCAoYXJyKSA9PiB7XHJcblx0XHRcdHJlc3VsdFthcnIuZmllbGRdICA9IGFyci52YWx1ZTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBmdW5jdGlvbiBzaGFyZUluaXQoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyl7XHJcblx0XHQkc2NvcGUuIHN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVDdXJyZW50U3ViTmF2QmFyKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpOyBcclxuXHRcdCRzY29wZS5tYXNrID0gdHJ1ZTtcclxuXHRcdC8qKlxyXG5cdFx0ICDliJvlu7rlhajlsY/pga7mjKFcclxuXHRcdCovXHJcblx0XHQkKFwiI21hc2tcIikuY3NzKFwicG9zaXRpb25cIiwgXCJhYnNvbHV0ZVwiKTtcclxuXHRcdCQoXCIjbWFza1wiKS5jc3MoXCJiYWNrZ3JvdW5kXCIsIFwiYmxhY2tcIik7XHJcblx0XHQkKFwiI21hc2tcIikuY3NzKFwib3BhY2l0eVwiLCAwLjQpO1xyXG5cdFx0JChcIiNtYXNrXCIpLmNzcyhcImZpbHRlclwiLCBcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShzdHlsZT00LG9wYWNpdHk9MjUpXCIpO1xyXG5cdFx0JChcIiNtYXNrXCIpLmNzcyhcInRvcFwiLCBcIjBweFwiKTtcclxuXHRcdCQoXCIjbWFza1wiKS5jc3MoXCJsZWZ0XCIsIFwiMHB4XCIpO1xyXG5cdFx0JChcIiNtYXNrXCIpLmNzcyhcIndpZHRoXCIsIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggKyBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQpO1xyXG5cdFx0JChcIiNtYXNrXCIpLmNzcyhcImhlaWdodFwiLCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKTtcclxuXHRcdCQoXCIjbWFza1wiKS5jc3MoXCJ6SW5kZXhcIiwgMTAwMCk7XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gY3JlYXRlTmV3T2JlamN0KGFycmF5OkFycmF5PGFueT4sIG9iail7XHJcblx0XHR2YXIgcmVzdWx0ID1bXTtcclxuXHRcdGlmKG9iail7XHJcblx0XHRcdGFuZ3VsYXIuZm9yRWFjaChhcnJheSwgKGFycikgPT57XHRcdFx0XHJcblx0XHRcdFx0cmVzdWx0LnB1c2goe1xyXG5cdFx0XHRcdFx0ZmllbGQ6IGFyci5maWVsZCxcclxuXHRcdFx0XHRcdG5hbWU6IGFyci5kaXNwbGF5TmFtZSxcclxuXHRcdFx0XHRcdHZhbHVlOiBvYmpbYXJyLmZpZWxkXVxyXG5cdFx0XHRcdH0pO1x0XHRcdFxyXG5cdFx0XHR9KTtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHRhbmd1bGFyLmZvckVhY2goYXJyYXksIChhcnIpID0+e1x0XHRcdFxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHtcclxuXHRcdFx0XHRcdGZpZWxkOiBhcnIuZmllbGQsXHJcblx0XHRcdFx0XHRuYW1lOiBhcnIuZGlzcGxheU5hbWUsXHJcblx0XHRcdFx0XHR2YWx1ZTogbnVsbFxyXG5cdFx0XHRcdH0pO1x0XHRcdFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cdFxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcdFx0XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gb3JhY2xlSW5mb09wZXJhdGUoJGh0dHAsIHVybDpzdHJpbmcsIG9wZXJhdGU6c3RyaW5nLCByZXNvdXJjZSwgZm4/OiAoZGF0YSwgc3RhdHVzKT0+dm9pZCApe1xyXG5cdFx0aWYocmVzb3VyY2UgPT09IG51bGwpXHJcblx0XHRcdHRocm93IFwi5LiN6IO95pON5L2c56m66LWE5rqQ5a+56LGhXCI7XHRcdFx0XHRcclxuXHRcdHZhciBpZCA9IHJlc291cmNlW1wiaWRcIl0gfHwgcmVzb3VyY2VbXCJuYW1lXCJdIHx8IHJlc291cmNlW1wiX2lkXCJdIHx8IHJlc291cmNlW1wiX2tleVwiXTtcdFx0XHJcblx0XHR2YXIgUkVTVGZ1bFVybD11cmw7XHJcblx0XHRpZihpZCA9PSBcInVuZGVmaW5lZFwiKXtcclxuXHRcdFx0UkVTVGZ1bFVybCA9ICBVcmxIZWxwZXJzLmpvaW4odXJsLCBvcGVyYXRlKTtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHRSRVNUZnVsVXJsID0gVXJsSGVscGVycy5qb2luKHVybCwgaWQrXCJcIiwgb3BlcmF0ZSk7XHJcblx0XHR9XHRcdFxyXG5cdFx0XHJcblx0XHQkaHR0cCh7ICBcclxuICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJywgXHJcbiAgICAgICAgICAgIHVybDogUkVTVGZ1bFVybCwgICAgXHJcbiAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHJlc291cmNlKSwgICAgIFxyXG4gICAgICAgIH0pLnN1Y2Nlc3MoKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpID0+IHsgICAgICAgIFx0XHJcbiAgICAgICAgXHRpZihhbmd1bGFyLmlzRnVuY3Rpb24oZm4pKVxyXG4gICAgICAgICAgICBcdGZuKGRhdGEsIGhlYWRlcik7ICBcclxuICAgICAgICB9KS5lcnJvcigoZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cykgPT4ge1xyXG5cdFx0XHRpZihhbmd1bGFyLmlzRnVuY3Rpb24oZm4pKVxyXG4gICAgICAgICAgICBcdGZuKGRhdGEsIGhlYWRlcik7ICAgXHJcbiAgICAgICAgfSk7XHJcblx0fVxyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlnSGVscGVyTmF2QmFyKCRzY29wZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMpe1xyXG5cdFx0cmV0dXJuIERldmVsb3Blci5hY3RpdmF0ZUN1cnJlbnQoW1xyXG5cdFx0XHR7XHJcblx0XHRcdCBocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgXCJyZWdpb25hbGlzbS1jb2RlL3NlYXJjaGluZ1wiKSxcclxuXHRcdFx0IGxhYmVsOiBcIuihjOaUv+WMuuWIkuajgOe0olwiLFxyXG5cdFx0XHQgdGl0bGU6IFwi5qOA57Si6KGM5pS/5Yy65YiS5Luj56CBXCJcdFx0XHRcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHQgXHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCxcInN5c3RlbS1jb2RlL3NlYXJjaGluZ1wiKSxcclxuXHRcdFx0IFx0bGFiZWw6IFwi57O757uf57yW56CB5qOA57SiXCIsXHJcblx0XHRcdCBcdHRpdGxlOiBcIuajgOe0ouezu+e7n+e8lueggVwiXHJcblx0XHRcdH1cdFx0XHRcclxuXHRcdF0pO1xyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFZvbHVtZSh2b2x1bWU6IHZvbHVtZSk6IGZvcm1hdGVkVm9sdW1le1xyXG5cdFx0dmFyIGJyaWNrOkFycmF5PEJyaWNrPiA9IFtdO1xyXG5cdFx0YW5ndWxhci5mb3JFYWNoKHZvbHVtZS5icmljaywgKGJsb2NrOkJsb2NrKSA9PiB7XHJcblx0XHRcdGJyaWNrLnB1c2goe1xyXG5cdFx0XHRcdGlwOiBibG9jay5pcC5zcGxpdChcIi5cIiksXHJcblx0XHRcdFx0c3RhdHVzOiBibG9jay5zdGF0dXMsXHJcblx0XHRcdFx0cGF0aDogYmxvY2sucGF0aCxcclxuXHRcdFx0XHRlZGl0YWJsZTogYmxvY2suZWRpdGFibGUgfHwgZmFsc2VcdFxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0bmFtZTogdm9sdW1lLm5hbWUsXHJcblx0XHRcdHBhdGg6IHZvbHVtZS5wYXRoLFxyXG5cdFx0XHRicmljazogYnJpY2ssXHJcblx0XHRcdHN0YXR1czogdm9sdW1lLnN0YXR1cyxcclxuXHRcdFx0ZWRpdGFibGU6IHZvbHVtZS5lZGl0YWJsZSB8fCBmYWxzZVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIHZvbHVtZXNGb3JtYXQodm9sdW1lczogQXJyYXk8dm9sdW1lPik6IEFycmF5PGZvcm1hdGVkVm9sdW1lPntcclxuXHRcdHZhciByZXN1bHQ6QXJyYXk8Zm9ybWF0ZWRWb2x1bWU+ID0gW107XHJcblx0XHRhbmd1bGFyLmZvckVhY2godm9sdW1lcywgKHZvbHVtZSkgPT4ge1xyXG5cdFx0XHRyZXN1bHQucHVzaChmb3JtYXRWb2x1bWUodm9sdW1lKSk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBvcnQgaW50ZXJmYWNlIGZvcm1hdGVkVm9sdW1le1xyXG5cdFx0bmFtZTogc3RyaW5nXHRcdFxyXG5cdFx0cGF0aDogc3RyaW5nXHJcblx0XHRicmljazogQXJyYXk8QnJpY2s+O1xyXG5cdFx0c3RhdHVzOiBib29sZWFuO1xyXG5cdFx0ZWRpdGFibGU6IGJvb2xlYW5cclxuXHR9XHJcblxyXG5cdGV4cG9ydCBpbnRlcmZhY2UgQnJpY2t7XHJcblx0XHRpcDogQXJyYXk8c3RyaW5nPjtcclxuXHRcdHN0YXR1czogYm9vbGVhbjtcclxuXHRcdHBhdGg6IHN0cmluZztcclxuXHRcdGVkaXRhYmxlOiBib29sZWFuXHJcblx0fVxyXG5cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcblxyXG5tb2R1bGUgQ29uZmlnc3tcclxuXHRleHBvcnQgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudEJ5VmFsdWUoYXJyYXk6QXJyYXk8YW55PiAsdmFsdWU6YW55LCBrZXk/OnN0cmluZyApe1xyXG5cdFx0aWYoa2V5KXtcclxuXHRcdFx0Zm9yKHZhciBpPTA7IGk8YXJyYXkubGVuZ3RoOyBpKyspe1xyXG5cdFx0XHRcdGlmKGFycmF5W2ldW2tleV0gPT09IHZhbHVlKXtcclxuXHRcdFx0XHRcdGFycmF5LnNwbGljZShpICwxKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fWVsc2V7XHJcblx0XHRcdGZvcih2YXIgaT0wIDsgaTxhcnJheS5sZW5ndGg7IGkrKyl7XHJcblx0XHRcdFx0aWYoYXJyYXlbaV0gPT09IHZhbHVlKXtcclxuXHRcdFx0XHRcdGFycmF5LnNwbGljZShpICwxKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnRzQnlWYWx1ZShhcnJheTogQXJyYXk8YW55PiwgZWxlbWVudHM6QXJyYXk8YW55Pil7XHJcblx0XHRhbmd1bGFyLmZvckVhY2goZWxlbWVudHMsIChlbGVtZW50KSA9PntcclxuXHRcdFx0cmVtb3ZlRWxlbWVudEJ5VmFsdWUoYXJyYXksIGVsZW1lbnQudmFsdWUsIGVsZW1lbnQua2V5KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0XHTlr7nosaHnmoTmt7Hmi7fotJ1cclxuXHQqL1xyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gZGVlcENvcHkob2JqZWN0KSB7XHJcblx0XHR2YXIgbixpO1xyXG5cdCAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuXHQgICAgICAgIG4gPSBbXTtcclxuXHQgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcclxuXHQgICAgICAgICAgICBuW2ldID0gZGVlcENvcHkob2JqZWN0W2ldKTtcclxuXHQgICAgICAgIH1cclxuXHQgICAgICAgIHJldHVybiBuO1xyXG5cclxuXHQgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuXHQgICAgICAgIG4gPSB7fVxyXG5cdCAgICAgICAgZm9yIChpIGluIG9iamVjdCkge1xyXG5cdCAgICAgICAgICAgIG5baV0gPSBkZWVwQ29weShvYmplY3RbaV0pO1xyXG5cdCAgICAgICAgfVxyXG5cdCAgICAgICAgcmV0dXJuIG47XHJcblx0ICAgIH0gZWxzZSB7XHJcblx0ICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG5cdCAgICB9XHJcblx0fVxyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcblxyXG5cclxuZGVjbGFyZSB2YXIgT1NPQXV0aENvbmZpZzphbnk7XHJcbmRlY2xhcmUgdmFyIEdvb2dsZU9BdXRoQ29uZmlnOmFueTtcclxuZGVjbGFyZSB2YXIgS2V5Y2xvYWtDb25maWc6YW55O1xyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIF9tb2R1bGUgPSBhbmd1bGFyLm1vZHVsZShwbHVnaW5OYW1lLCBbJ2hhd3Rpby1jb3JlJywgJ2hhd3Rpby11aScsICd1aS5jb2RlbWlycm9yJywgJ3VpLnZhbGlkYXRlJywna3ViZXJuZXRlc1VJJ10pO1xyXG4gIGV4cG9ydCB2YXIgY29udHJvbGxlciA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlQ29udHJvbGxlckZ1bmN0aW9uKF9tb2R1bGUsIHBsdWdpbk5hbWUpO1xyXG4gIGV4cG9ydCB2YXIgcm91dGUgPSBQbHVnaW5IZWxwZXJzLmNyZWF0ZVJvdXRpbmdGdW5jdGlvbih0ZW1wbGF0ZVBhdGgpO1xyXG5cclxuICBfbW9kdWxlLmNvbmZpZyhbJyRyb3V0ZVByb3ZpZGVyJywgKCRyb3V0ZVByb3ZpZGVyOm5nLnJvdXRlLklSb3V0ZVByb3ZpZGVyKSA9PiB7ICAgXHJcbiAgICAkcm91dGVQcm92aWRlclxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9wb2RzJyksIHJvdXRlKCdwb2RzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAncmVwbGljYXRpb25Db250cm9sbGVycycpLCByb3V0ZSgncmVwbGljYXRpb25Db250cm9sbGVycy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3NlcnZpY2VzJyksIHJvdXRlKCdzZXJ2aWNlcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2V2ZW50cycpLCByb3V0ZSgnZXZlbnRzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYXBwcycpLCByb3V0ZSgnYXBwcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2FwcHMvOm5hbWVzcGFjZScpLCByb3V0ZSgnYXBwcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3RlbXBsYXRlcycpLCByb3V0ZSgndGVtcGxhdGVzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaG9zdHMnKSwgcm91dGUoJ2hvc3RzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaG9zdHMvOmlkJyksIHJvdXRlKCdob3N0Lmh0bWwnLCB0cnVlKSlcclxuICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdwaXBlbGluZXMnKSwgcm91dGUoJ3BpcGVsaW5lcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ292ZXJ2aWV3JyksIHJvdXRlKCdvdmVydmlldy5odG1sJywgdHJ1ZSkpXHJcbiAgICAgIC53aGVuKGNvbnRleHQsIHtyZWRpcmVjdFRvOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcnMnKX0pOyAgICAgIFxyXG5cclxuICAgIGFuZ3VsYXIuZm9yRWFjaChbY29udGV4dCwgXCIvd29ya3NwYWNlcy86d29ya3NwYWNlL3Byb2plY3RzLzpwcm9qZWN0XCJdLCAoY29udGV4dCkgPT4geyAgICAgXHJcbiAgICAgICRyb3V0ZVByb3ZpZGVyXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcG9kQ3JlYXRlJyksIHJvdXRlKCdwb2RDcmVhdGUuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9wb2RFZGl0LzppZCcpLCByb3V0ZSgncG9kRWRpdC5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3BvZHMnKSwgcm91dGUoJ3BvZHMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9wb2RzLzppZCcpLCByb3V0ZSgncG9kLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvcmVwbGljYXRpb25Db250cm9sbGVycycpLCByb3V0ZSgncmVwbGljYXRpb25Db250cm9sbGVycy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3JlcGxpY2F0aW9uQ29udHJvbGxlcnMvOmlkJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXIuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9yZXBsaWNhdGlvbkNvbnRyb2xsZXJDcmVhdGUnKSwgcm91dGUoJ3JlcGxpY2F0aW9uQ29udHJvbGxlckNyZWF0ZS5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3JlcGxpY2F0aW9uQ29udHJvbGxlckVkaXQvOmlkJyksIHJvdXRlKCdyZXBsaWNhdGlvbkNvbnRyb2xsZXJFZGl0Lmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvc2VjcmV0cycpLCByb3V0ZSgnc2VjcmV0cy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlY3JldHMvOmlkJyksIHJvdXRlKCdzZWNyZXQuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZWNyZXRDcmVhdGUnKSwgcm91dGUoJ3NlY3JldC5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VzJyksIHJvdXRlKCdzZXJ2aWNlcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VzLzppZCcpLCByb3V0ZSgnc2VydmljZS5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnL25hbWVzcGFjZS86bmFtZXNwYWNlL3NlcnZpY2VDcmVhdGUnKSwgcm91dGUoJ3NlcnZpY2VDcmVhdGUuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9zZXJ2aWNlRWRpdC86aWQnKSwgcm91dGUoJ3NlcnZpY2VFZGl0Lmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UvZXZlbnRzJyksIHJvdXRlKCdldmVudHMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS9hcHBzJyksIHJvdXRlKCdhcHBzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2Uvb3ZlcnZpZXcnKSwgcm91dGUoJ292ZXJ2aWV3Lmh0bWwnLCB0cnVlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJy9uYW1lc3BhY2UvOm5hbWVzcGFjZS90ZW1wbGF0ZXMvOnRhcmdldE5hbWVzcGFjZScpLCByb3V0ZSgndGVtcGxhdGVzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICcvbmFtZXNwYWNlLzpuYW1lc3BhY2UnKSwgcm91dGUoJ2FwcHMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkcycpLCByb3V0ZSgnYnVpbGRzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZHMvOmlkJyksIHJvdXRlKCdidWlsZC5odG1sJywgdHJ1ZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZExvZ3MvOmlkJyksIHJvdXRlKCdidWlsZExvZ3MuaHRtbCcsIHRydWUpKVxyXG4gICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnYnVpbGRDb25maWdzJyksIHJvdXRlKCdidWlsZENvbmZpZ3MuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlncy86aWQnKSwgcm91dGUoJ2J1aWxkQ29uZmlnLmh0bWwnLCB0cnVlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlnRWRpdC86aWQnKSwgcm91dGUoJ2J1aWxkQ29uZmlnRWRpdC5odG1sJywgdHJ1ZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdkZXBsb3ltZW50Q29uZmlncycpLCByb3V0ZSgnZGVwbG95bWVudENvbmZpZ3MuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2RlcGxveW1lbnRDb25maWdzLzppZCcpLCByb3V0ZSgnZGVwbG95bWVudENvbmZpZy5odG1sJywgdHJ1ZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdpbWFnZVJlcG9zaXRvcmllcycpLCByb3V0ZSgnaW1hZ2VSZXBvc2l0b3JpZXMuaHRtbCcsIGZhbHNlKSlcclxuICAgIH0pO1xyXG5cclxuICAgIGFuZ3VsYXIuZm9yRWFjaChbY29udGV4dCwgXCIvd29ya3NwYWNlcy86d29ya3NwYWNlXCIsIFwiL3dvcmtzcGFjZXMvOndvcmtzcGFjZS9wcm9qZWN0cy86cHJvamVjdFwiXSwgKGNvbnRleHQpID0+IHtcclxuICAgICAgJHJvdXRlUHJvdmlkZXJcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlnRWRpdCcpLCByb3V0ZSgnYnVpbGRDb25maWdFZGl0Lmh0bWwnLCB0cnVlKSlcclxuICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlnRWRpdC86aWQnKSwgcm91dGUoJ2J1aWxkQ29uZmlnRWRpdC5odG1sJywgdHJ1ZSkpXHJcbiAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdpbXBvcnRQcm9qZWN0JyksIHJvdXRlKCdpbXBvcnRQcm9qZWN0Lmh0bWwnLCB0cnVlKSlcclxuICAgIH0pO1xyXG4gIH1dKTtcclxuXHJcblxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnQXBwTGlicmFyeVVSTCcsIFsnJHJvb3RTY29wZScsICgkcm9vdFNjb3BlOm5nLklSb290U2NvcGVTZXJ2aWNlKSA9PiB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGt1YmVybmV0ZXNBcGlVcmwoKSwgXCIvcHJveHlcIiwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCIvc2VydmljZXMvYXBwLWxpYnJhcnlcIik7XHJcbiAgfV0pO1xyXG5cclxuICBfbW9kdWxlLmZhY3RvcnkoJ1dpa2lHaXRVcmxQcmVmaXgnLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKGt1YmVybmV0ZXNBcGlVcmwoKSwgXCIvcHJveHlcIiwga3ViZXJuZXRlc05hbWVzcGFjZVBhdGgoKSwgXCJzZXJ2aWNlcy9hcHAtbGlicmFyeVwiKTtcclxuICB9KTtcclxuXHJcbiAgX21vZHVsZS5mYWN0b3J5KCd3aWtpUmVwb3NpdG9yeScsIFtcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCAoJGxvY2F0aW9uLCBsb2NhbFN0b3JhZ2UpID0+IHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnQ29ubmVjdERpYWxvZ1NlcnZpY2UnLCBbJyRyb290U2NvcGUnLCAoJHJvb3RTY29wZTpuZy5JUm9vdFNjb3BlU2VydmljZSkgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGlhbG9nOiBuZXcgVUkuRGlhbG9nKCksXHJcbiAgICAgIHNhdmVDcmVkZW50aWFsczogZmFsc2UsXHJcbiAgICAgIHVzZXJOYW1lOiBudWxsLFxyXG4gICAgICBwYXNzd29yZDogbnVsbCxcclxuICAgICAgam9sb2tpYVVybDogbnVsbCxcclxuICAgICAgY29udGFpbmVyTmFtZTogbnVsbCxcclxuICAgICAgdmlldzogbnVsbFxyXG4gICAgfTtcclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZmlsdGVyKCdrdWJlcm5ldGVzUGFnZUxpbmsnLCAoKSA9PiBlbnRpdHlQYWdlTGluayk7XHJcblxyXG4gIF9tb2R1bGUuZmlsdGVyKCdyZWxhdGl2ZVRpbWUnLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gKGRhdGUpID0+IHtcclxuICAgICAgcmV0dXJuIGh1bWFuZGF0ZS5yZWxhdGl2ZVRpbWUoZGF0ZSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUucnVuKFsndmlld1JlZ2lzdHJ5JywgJ1NlcnZpY2VSZWdpc3RyeScsICdIYXd0aW9OYXYnLCAnS3ViZXJuZXRlc01vZGVsJywgJyR0ZW1wbGF0ZUNhY2hlJywgKHZpZXdSZWdpc3RyeSwgU2VydmljZVJlZ2lzdHJ5LCBIYXd0aW9OYXYsIEt1YmVybmV0ZXNNb2RlbCwgJHRlbXBsYXRlQ2FjaGUpID0+IHtcclxuICAgIGxvZy5kZWJ1ZyhcIlJ1bm5pbmdcIik7XHJcbiAgICB2aWV3UmVnaXN0cnlbJ2t1YmVybmV0ZXMnXSA9IHRlbXBsYXRlUGF0aCArICdsYXlvdXRLdWJlcm5ldGVzLmh0bWwnO1xyXG4gICAgLy92aWV3UmVnaXN0cnlbJ2t1YmVybmV0ZXMnXSA9IENvbmZpZ3MudGVtcGxhdGVQYXRoICsgJ3NoYXJlTGF5b3V0Lmh0bWwnO1xyXG5cclxuICAgIHZhciBidWlsZGVyID0gSGF3dGlvTmF2LmJ1aWxkZXIoKTtcclxuICAgIHZhciBhcHBzID0gYnVpbGRlci5pZCgna3ViZS1hcHBzJylcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdhcHBzJykpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnQXBwcycpXHJcbiAgICAgIC5idWlsZCgpO1xyXG5cclxuICAgIHZhciBzZXJ2aWNlcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtc2VydmljZXMnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3NlcnZpY2VzJykpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnU2VydmljZXMnKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgY29udHJvbGxlcnMgPSBidWlsZGVyLmlkKCdrdWJlLWNvbnRyb2xsZXJzJylcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdyZXBsaWNhdGlvbkNvbnRyb2xsZXJzJykpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnb3JhY2xl5pyN5YqhJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIHBvZHMgPSBidWlsZGVyLmlkKCdrdWJlLXBvZHMnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3BvZHMnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICfmtYvor5XpobXpnaInKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgZXZlbnRzID0gYnVpbGRlci5pZCgna3ViZS1ldmVudHMnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2V2ZW50cycpKVxyXG4gICAgICAudGl0bGUoKCkgPT4gJ+acjeWKoeWQr+WKqOaXpeW/lycpXHJcbiAgICAgIC5idWlsZCgpO1xyXG5cclxuICAgIHZhciBob3N0cyA9IGJ1aWxkZXIuaWQoJ2t1YmUtaG9zdHMnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2hvc3RzJykpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAn6ZuG576k6IqC54K5JylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIG92ZXJ2aWV3ID0gYnVpbGRlci5pZCgna3ViZS1vdmVydmlldycpXHJcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnb3ZlcnZpZXcnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdEaWFncmFtJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIGJ1aWxkcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtYnVpbGRzJylcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZHMnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdCdWlsZHMnKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgYnVpbGRDb25maWdzID0gYnVpbGRlci5pZCgna3ViZS1idWlsZENvbmZpZ3MnKVxyXG4gICAgICAuaHJlZigoKSA9PiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ2J1aWxkQ29uZmlncycpKVxyXG4gICAgICAudGl0bGUoKCkgPT4gJ0J1aWxkIENvbmZpZ3MnKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgZGVwbG95cyA9IGJ1aWxkZXIuaWQoJ2t1YmUtZGVwbG95cycpXHJcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnZGVwbG95bWVudENvbmZpZ3MnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdEZXBsb3lzJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIGltYWdlUmVwb3NpdG9yaWVzID0gYnVpbGRlci5pZCgna3ViZS1pbWFnZVJlcG9zaXRvcmllcycpXHJcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnaW1hZ2VSZXBvc2l0b3JpZXMnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdSZWdpc3RyaWVzJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIHBpcGVsaW5lcyA9IGJ1aWxkZXIuaWQoJ2t1YmUtcGlwZWxpbmVzJylcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdwaXBlbGluZXMnKSlcclxuICAgICAgLnRpdGxlKCgpID0+ICdQaXBlbGluZXMnKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICB2YXIgcmVwb3MgPSBidWlsZGVyLmlkKCdrdWJlLXJlcG9zJylcclxuICAgICAgLmhyZWYoKCkgPT4gXCIvZm9yZ2UvcmVwb3NcIilcclxuICAgICAgLmlzVmFsaWQoKCkgPT4gU2VydmljZVJlZ2lzdHJ5Lmhhc1NlcnZpY2UoZmFicmljOEZvcmdlU2VydmljZU5hbWUpICYmIFNlcnZpY2VSZWdpc3RyeS5oYXNTZXJ2aWNlKGdvZ3NTZXJ2aWNlTmFtZSkpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnUmVwb3NpdG9yaWVzJylcclxuICAgICAgLmJ1aWxkKCk7XHJcblxyXG4gICAgdmFyIG1haW5UYWIgPSBidWlsZGVyLmlkKCdrdWJlcm5ldGVzJylcclxuICAgICAgLnJhbmsoMTAwKVxyXG4gICAgICAuZGVmYXVsdFBhZ2Uoe1xyXG4gICAgICAgIHJhbms6IDIwLFxyXG4gICAgICAgIGlzVmFsaWQ6ICh5ZXMsIG5vKSA9PiB7XHJcbiAgICAgICAgICB5ZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5ocmVmKCgpID0+IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCBcIi9uYW1lc3BhY2UvZGVmYXVsdC9yZXBsaWNhdGlvbkNvbnRyb2xsZXJzXCIpKVxyXG4gICAgICAudGl0bGUoKCkgPT4gJ+acjeWKoembhue+pCcpXHJcbiAgICAgIC50YWJzKGNvbnRyb2xsZXJzLCBwb2RzLCBldmVudHMpXHJcbiAgICAgIC5idWlsZCgpO1xyXG4gICAgSGF3dGlvTmF2LmFkZChtYWluVGFiKTtcclxuXHJcbiAgICAvKiB0ZXN0S3ViZXJuZXRlc01vZGVsXHJcbiAgICBIYXd0aW9OYXYuYWRkKHtcclxuICAgICAgaWQ6ICdrOHNBcHBTd2l0Y2hlcicsXHJcbiAgICAgIHRpdGxlOiAoKSA9PiAnJywgLy8gbm90IHVzZWQgYXMgJ3RlbXBsYXRlJyBiZWxvdyBvdmVycmlkZXMgdGhpc1xyXG4gICAgICBpc1ZhbGlkOiAoKSA9PiBLdWJlcm5ldGVzTW9kZWwuc2VydmljZUFwcHMubGVuZ3RoID4gMCxcclxuICAgICAgY29udGV4dDogdHJ1ZSxcclxuICAgICAgdGVtcGxhdGU6ICgpID0+ICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCAnc2VydmljZUFwcHMuaHRtbCcpKVxyXG4gICAgfSk7XHJcbiAgICAqL1xyXG5cclxuICAgIHZhciBwcm9qZWN0c1RhYiA9IGJ1aWxkZXIuaWQoJ29wZW5zaGlmdCcpXHJcbiAgICAgIC5yYW5rKDEwMClcclxuICAgICAgLmhyZWYoKCkgPT4gVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdidWlsZENvbmZpZ3MnKSArICc/c3ViLXRhYj1rdWJlLWJ1aWxkQ29uZmlncycpXHJcbiAgICAgIC50aXRsZSgoKSA9PiAnUHJvamVjdHMnKVxyXG4gICAgICAvLyBsZXRzIGRpc2FibGUgdGhlIHBpcGVsaW5lcyB2aWV3IGZvciBub3dcclxuICAgICAgLy8gcGlwZWxpbmVzLFxyXG4gICAgICAudGFicyhyZXBvcywgYnVpbGRDb25maWdzLCBidWlsZHMsIGRlcGxveXMsIGltYWdlUmVwb3NpdG9yaWVzKVxyXG4gICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICAvL0hhd3Rpb05hdi5hZGQocHJvamVjdHNUYWIpO1xyXG4gIH1dKTtcclxuXHJcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLnJlZ2lzdGVyUHJlQm9vdHN0cmFwVGFzayh7XHJcbiAgICBuYW1lOiAnS3ViZXJuZXRlc0luaXQnLFxyXG4gICAgdGFzazogKG5leHQpID0+IHtcclxuICAgICAgJC5nZXRTY3JpcHQoJ29zY29uc29sZS9jb25maWcuanMnKVxyXG4gICAgICAgIC5kb25lKChzY3JpcHQsIHRleHRTdGF0dXMpID0+IHtcclxuICAgICAgICAgIHZhciBjb25maWc6S3ViZXJuZXRlc0NvbmZpZyA9IEt1YmVybmV0ZXMub3NDb25maWcgPSB3aW5kb3dbJ09QRU5TSElGVF9DT05GSUcnXTtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIkZldGNoZWQgT0F1dGggY29uZmlnOiBcIiwgY29uZmlnKTtcclxuICAgICAgICAgIHZhciBtYXN0ZXI6c3RyaW5nID0gY29uZmlnLm1hc3Rlcl91cmk7XHJcbiAgICAgICAgICBpZiAoIW1hc3RlciAmJiBjb25maWcuYXBpICYmIGNvbmZpZy5hcGkuazhzKSB7XHJcbiAgICAgICAgICAgIHZhciBtYXN0ZXJVcmkgPSBuZXcgVVJJKCkuaG9zdChjb25maWcuYXBpLms4cy5ob3N0UG9ydCkucGF0aChcIlwiKS5xdWVyeShcIlwiKTtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5hcGkuazhzLnByb3RvKSB7XHJcbiAgICAgICAgICAgICAgbWFzdGVyVXJpLnByb3RvY29sKGNvbmZpZy5hcGkuazhzLnByb3RvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtYXN0ZXIgPSBtYXN0ZXJVcmkudG9TdHJpbmcoKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBPU09BdXRoQ29uZmlnID0gY29uZmlnLm9wZW5zaGlmdDtcclxuICAgICAgICAgIEdvb2dsZU9BdXRoQ29uZmlnID0gY29uZmlnLmdvb2dsZTtcclxuICAgICAgICAgIEtleWNsb2FrQ29uZmlnID0gY29uZmlnLmtleWNsb2FrO1xyXG5cclxuICAgICAgICAgIGlmIChPU09BdXRoQ29uZmlnICYmICFtYXN0ZXIpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBhdXRoLm1hc3Rlcl91cmkgbm8gbG9uZ2VyIHVzZWQgcmlnaHQ/XHJcbiAgICAgICAgICAgIC8vIG1hc3RlciA9IE9TT0F1dGhDb25maWcubWFzdGVyX3VyaTtcclxuICAgICAgICAgICAgaWYgKCFtYXN0ZXIpIHtcclxuICAgICAgICAgICAgICB2YXIgb2F1dGhfYXV0aG9yaXplX3VyaSA9IE9TT0F1dGhDb25maWcub2F1dGhfYXV0aG9yaXplX3VyaTtcclxuICAgICAgICAgICAgICBpZiAob2F1dGhfYXV0aG9yaXplX3VyaSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHQgPSBvYXV0aF9hdXRob3JpemVfdXJpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeCA9IHRleHQuaW5kZXhPZihcIjovL1wiKTtcclxuICAgICAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlkeCArPSAzO1xyXG4gICAgICAgICAgICAgICAgICBpZHggPSB0ZXh0LmluZGV4T2YoXCIvXCIsIGlkeCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFzdGVyID0gdGV4dC5zdWJzdHJpbmcoMCwgKytpZHgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoKCFLdWJlcm5ldGVzLm1hc3RlclVybCB8fCBLdWJlcm5ldGVzLm1hc3RlclVybCA9PT0gXCIvXCIpICYmICghbWFzdGVyIHx8IG1hc3RlciA9PT0gXCIvXCIpKSB7XHJcbiAgICAgICAgICAgIC8vIGxldHMgZGVmYXVsdCB0aGUgbWFzdGVyIHRvIHRoZSBjdXJyZW50IHByb3RvY29sIGFuZCBob3N0L3BvcnRcclxuICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGUgbWFzdGVyIHVybCBpcyBcIi9cIiBhbmQgd2UgYXJlXHJcbiAgICAgICAgICAgIC8vIHNlcnZpbmcgdXAgc3RhdGljIGNvbnRlbnQgZnJvbSBpbnNpZGUgL2FwaS92MS9uYW1lc3BhY2VzL2RlZmF1bHQvc2VydmljZXMvZmFicmljOCBvciBzb21ldGhpbmcgbGlrZSB0aGF0XHJcbiAgICAgICAgICAgIHZhciBocmVmID0gbG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgaWYgKGhyZWYpIHtcclxuICAgICAgICAgICAgICBtYXN0ZXIgPSBuZXcgVVJJKGhyZWYpLnF1ZXJ5KFwiXCIpLnBhdGgoXCJcIikudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG1hc3Rlcikge1xyXG4gICAgICAgICAgICBLdWJlcm5ldGVzLm1hc3RlclVybCA9IG1hc3RlcjtcclxuICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZmFpbCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGZldGNoaW5nIE9BVVRIIGNvbmZpZzogXCIsIHJlc3BvbnNlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hbHdheXMoKCkgPT4ge1xyXG4gICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0sIHRydWUpO1xyXG5cclxuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKCduZ1Jlc291cmNlJyk7XHJcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZShwbHVnaW5OYW1lKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuICB2YXIgbG9nID0gTG9nZ2VyLmdldCgna3ViZXJuZXRlcy13YXRjaGVyJyk7XHJcblxyXG4gIHZhciBrOHNUeXBlcyA9IEt1YmVybmV0ZXNBUEkuTmFtZXNwYWNlZFR5cGVzLms4c1R5cGVzO1xyXG4gIHZhciBvc1R5cGVzICA9IEt1YmVybmV0ZXNBUEkuTmFtZXNwYWNlZFR5cGVzLm9zVHlwZXM7XHJcblxyXG4gIHZhciBzZWxmID0gPGFueT4ge307XHJcblxyXG4gIHZhciB1cGRhdGVGdW5jdGlvbiA9ICgpID0+IHtcclxuICAgIFxyXG4gICAgbG9nLmRlYnVnKFwiT2JqZWN0cyBjaGFuZ2VkLCBmaXJpbmcgbGlzdGVuZXJzXCIpO1xyXG4gICAgdmFyIG9iamVjdHMgPSA8T2JqZWN0TWFwPnt9O1xyXG4gICAgXy5mb3JFYWNoKHNlbGYuZ2V0VHlwZXMoKSwgKHR5cGU6c3RyaW5nKSA9PiB7XHJcbiAgICAgIG9iamVjdHNbdHlwZV0gPSBzZWxmLmdldE9iamVjdHModHlwZSk7XHJcbiAgICB9KTtcclxuICAgIF8uZm9yRWFjaChzZWxmLmxpc3RlbmVycywgKGxpc3RlbmVyOihPYmplY3RNYXApID0+IHZvaWQpID0+IHtcclxuICAgICAgbGlzdGVuZXIob2JqZWN0cyk7XHJcbiAgICB9KTsgIFxyXG4gIH07XHJcbiAgdmFyIGRlYm91bmNlZFVwZGF0ZSA9IF8uZGVib3VuY2UodXBkYXRlRnVuY3Rpb24sIDc1LCB7IHRyYWlsaW5nOiB0cnVlIH0pO1xyXG5cclxuICB2YXIgbmFtZXNwYWNlV2F0Y2ggPSB7XHJcbiAgICBzZWxlY3RlZDogdW5kZWZpbmVkLFxyXG4gICAgd2F0Y2g6IHVuZGVmaW5lZCxcclxuICAgIG9iamVjdHM6IFtdLFxyXG4gICAgb2JqZWN0TWFwOiB7fSxcclxuICAgIHdhdGNoZXM6IHt9XHJcbiAgfTtcclxuXHJcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLnJlZ2lzdGVyUHJlQm9vdHN0cmFwVGFzayh7XHJcbiAgICBuYW1lOiAnS3ViZXJuZXRlc1dhdGNoZXJJbml0JyxcclxuICAgIGRlcGVuZHM6IFsnS3ViZXJuZXRlc0FwaURpc2NvdmVyeSddLFxyXG4gICAgdGFzazogKG5leHQpID0+IHtcclxuICAgICAgdmFyIGJvb3RlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoaXNPcGVuU2hpZnQpIHtcclxuICAgICAgICBsb2cuaW5mbyhcIkJhY2tlbmQgaXMgYW4gT3BlbnNoaWZ0IGluc3RhbmNlXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxvZy5pbmZvKFwiQmFja2VuZCBpcyBhIHZhbmlsbGEgS3ViZXJuZXRlcyBpbnN0YW5jZVwiKTtcclxuICAgICAgfVxyXG4gICAgICBuYW1lc3BhY2VXYXRjaC53YXRjaCA9IEt1YmVybmV0ZXNBUEkud2F0Y2goe1xyXG4gICAgICAgIGtpbmQ6IEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTLFxyXG4gICAgICAgIHN1Y2Nlc3M6IChvYmplY3RzKSA9PiB7XHJcbiAgICAgICAgICBuYW1lc3BhY2VXYXRjaC5vYmplY3RzID0gb2JqZWN0cztcclxuICAgICAgICAgIGlmICghYm9vdGVkKSB7XHJcbiAgICAgICAgICAgIGJvb3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0TmFtZXNwYWNlKGxvY2FsU3RvcmFnZVtDb25zdGFudHMuTkFNRVNQQUNFX1NUT1JBR0VfS0VZXSB8fCBkZWZhdWx0TmFtZXNwYWNlKTtcclxuICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbG9nLmRlYnVnKFwiR290IG5hbWVzcGFjZXM6IFwiLCBuYW1lc3BhY2VXYXRjaC5vYmplY3RzKTtcclxuICAgICAgICB9LCBlcnJvcjogKGVycm9yOmFueSkgPT4ge1xyXG4gICAgICAgICAgbG9nLndhcm4oXCJFcnJvciBmZXRjaGluZyBuYW1lc3BhY2VzOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgLy8gVE9ETyBpcyB0aGlzIG5lY2Vzc2FyeT9cclxuICAgICAgICAgIC8vSGF3dGlvT0F1dGguZG9Mb2dvdXQoKTtcclxuICAgICAgICAgIGlmICghYm9vdGVkKSB7XHJcbiAgICAgICAgICAgIGJvb3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBoYXd0aW9QbHVnaW5Mb2FkZXIucmVnaXN0ZXJQcmVCb290c3RyYXBUYXNrKHtcclxuICAgIG5hbWU6ICdLdWJlcm5ldGVzQXBpRGlzY292ZXJ5JyxcclxuICAgIGRlcGVuZHM6IFsnaGF3dGlvLW9hdXRoJ10sXHJcbiAgICB0YXNrOiAobmV4dCkgPT4ge1xyXG4gICAgICBpc09wZW5TaGlmdCA9IGZhbHNlO1xyXG5cclxuICAgICAgdmFyIHVzZXJQcm9maWxlID0gSGF3dGlvT0F1dGguZ2V0VXNlclByb2ZpbGUoKTtcclxuICAgICAgbG9nLmRlYnVnKFwiVXNlciBwcm9maWxlOiBcIiwgdXNlclByb2ZpbGUpO1xyXG4gICAgICBpZiAodXNlclByb2ZpbGUgJiYgdXNlclByb2ZpbGUucHJvdmlkZXIgPT09IFwiaGF3dGlvLWdvb2dsZS1vYXV0aFwiKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiUG9zc2libHkgcnVubmluZyBvbiBHQ0VcIik7XHJcbiAgICAgICAgLy8gYXBpIG1hc3RlciBpcyBvbiBHQ0VcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgdXJsOiBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksICdhcGknLCAndjEnLCAnbmFtZXNwYWNlcycpLFxyXG4gICAgICAgICAgY29tcGxldGU6IChqcVhIUiwgdGV4dFN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGV4dFN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJqcVhIUjogXCIsIGpxWEhSKTtcclxuICAgICAgICAgICAgICB1c2VyUHJvZmlsZS5vbGRUb2tlbiA9IHVzZXJQcm9maWxlLnRva2VuO1xyXG4gICAgICAgICAgICAgIHVzZXJQcm9maWxlLnRva2VuID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICQuYWpheFNldHVwKHtcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IChyZXF1ZXN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBiZWZvcmVTZW5kOiAocmVxdWVzdCkgPT4ge1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsb2cuZGVidWcoXCJOb3QgcnVubmluZyBvbiBHQ0VcIik7XHJcbiAgICAgICAgLy8gZG91YmxlLWNoZWNrIGlmIHdlJ3JlIG9uIHZhbmlsbGEgazhzIG9yIG9wZW5zaGlmdFxyXG4gICAgICAgIHZhciByb290VXJpID0gbmV3IFVSSShtYXN0ZXJBcGlVcmwoKSkucGF0aChcIi9vYXBpXCIpLnF1ZXJ5KFwiXCIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiQ2hlY2tpbmcgZm9yIGFuIG9wZW5zaGlmdCBiYWNrZW5kXCIpO1xyXG4gICAgICAgIEhhd3Rpb09BdXRoLmF1dGhlbnRpY2F0ZWRIdHRwUmVxdWVzdCh7XHJcbiAgICAgICAgICB1cmw6IHJvb3RVcmksXHJcbiAgICAgICAgICBzdWNjZXNzOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgIGlzT3BlblNoaWZ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pID0+IHtcclxuICAgICAgICAgICAgdmFyIGVycm9yID0gS3ViZXJuZXRlc0FQSS5nZXRFcnJvck9iamVjdChqcVhIUik7XHJcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJGYWlsZWQgdG8gZmluZCByb290IHBhdGhzOiBcIiwgdGV4dFN0YXR1cywgXCI6IFwiLCBlcnJvclRocm93bik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiRmFpbGVkIHRvIGZpbmQgcm9vdCBwYXRoczogXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpc09wZW5TaGlmdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdmFyIGN1c3RvbVVybEhhbmRsZXJzID0ge307XHJcblxyXG4gIHNlbGYuc2V0TmFtZXNwYWNlID0gKG5hbWVzcGFjZTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAobmFtZXNwYWNlID09PSBuYW1lc3BhY2VXYXRjaC5zZWxlY3RlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAobmFtZXNwYWNlV2F0Y2guc2VsZWN0ZWQpIHtcclxuICAgICAgbG9nLmRlYnVnKFwiU3RvcHBpbmcgY3VycmVudCB3YXRjaGVzXCIpO1xyXG4gICAgICBfLmZvck93bihuYW1lc3BhY2VXYXRjaC53YXRjaGVzLCAod2F0Y2gsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmICghS3ViZXJuZXRlc0FQSS5uYW1lc3BhY2VkKGtleSkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiRGlzY29ubmVjdGluZyB3YXRjaDogXCIsIGtleSk7XHJcbiAgICAgICAgd2F0Y2guZGlzY29ubmVjdCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgXy5mb3JFYWNoKF8ua2V5cyhuYW1lc3BhY2VXYXRjaC53YXRjaGVzKSwgKGtleSkgPT4ge1xyXG4gICAgICAgIGlmICghS3ViZXJuZXRlc0FQSS5uYW1lc3BhY2VkKGtleSkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiRGVsZXRpbmcga2luZDogXCIsIGtleSk7XHJcbiAgICAgICAgZGVsZXRlIG5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2V5XTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBuYW1lc3BhY2VXYXRjaC5zZWxlY3RlZCA9IG5hbWVzcGFjZTtcclxuICAgIGlmIChuYW1lc3BhY2UpIHtcclxuICAgICAgXy5mb3JFYWNoKHNlbGYuZ2V0VHlwZXMoKSwgKGtpbmQ6c3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5OQU1FU1BBQ0VTKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXSkge1xyXG4gICAgICAgICAgbG9nLmRlYnVnKFwiQ3JlYXRpbmcgd2F0Y2ggZm9yIGtpbmQ6IFwiLCBraW5kKTtcclxuICAgICAgICAgIHZhciBjb25maWcgPSA8YW55PiB7XHJcbiAgICAgICAgICAgIGtpbmQ6IGtpbmQsXHJcbiAgICAgICAgICAgIG5hbWVzcGFjZTogS3ViZXJuZXRlc0FQSS5uYW1lc3BhY2VkKGtpbmQpID8gbmFtZXNwYWNlIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiAob2JqZWN0cykgPT4ge1xyXG4gICAgICAgICAgICAgIHdhdGNoLm9iamVjdHMgPSBvYmplY3RzO1xyXG4gICAgICAgICAgICAgIGRlYm91bmNlZFVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgaWYgKGtpbmQgaW4gY3VzdG9tVXJsSGFuZGxlcnMpIHtcclxuICAgICAgICAgICAgY29uZmlnLnVybEZ1bmN0aW9uID0gY3VzdG9tVXJsSGFuZGxlcnNba2luZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgd2F0Y2ggPSA8YW55PiBLdWJlcm5ldGVzQVBJLndhdGNoKGNvbmZpZyk7XHJcbiAgICAgICAgICB3YXRjaC5jb25maWcgPSBjb25maWc7XHJcbiAgICAgICAgICBuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tpbmRdID0gd2F0Y2g7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBzZWxmLmhhc1dlYlNvY2tldCA9IHRydWU7XHJcblxyXG4gIHNlbGYuZ2V0TmFtZXNwYWNlID0gKCkgPT4gbmFtZXNwYWNlV2F0Y2guc2VsZWN0ZWQ7XHJcblxyXG4gIHNlbGYucmVnaXN0ZXJDdXN0b21VcmxGdW5jdGlvbiA9IChraW5kOnN0cmluZywgdXJsOihvcHRpb25zOkt1YmVybmV0ZXNBUEkuSzhTT3B0aW9ucykgPT4gc3RyaW5nKSA9PiB7XHJcbiAgICBjdXN0b21VcmxIYW5kbGVyc1traW5kXSA9IHVybDtcclxuICAgIGlmIChraW5kIGluIG5hbWVzcGFjZVdhdGNoLndhdGNoZXMpIHtcclxuICAgICAgdmFyIHdhdGNoID0gbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXTtcclxuICAgICAgdmFyIGNvbmZpZyA9IHdhdGNoLmNvbmZpZztcclxuICAgICAgY29uZmlnLnVybEZ1bmN0aW9uID0gdXJsO1xyXG4gICAgICB3YXRjaC5kaXNjb25uZWN0KCk7XHJcbiAgICAgIGRlbGV0ZSBuYW1lc3BhY2VXYXRjaC53YXRjaGVzW2tpbmRdO1xyXG4gICAgICBjb25maWcuc3VjY2VzcyA9IChvYmplY3RzKSA9PiB7XHJcbiAgICAgICAgd2F0Y2gub2JqZWN0cyA9IG9iamVjdHM7XHJcbiAgICAgICAgZGVib3VuY2VkVXBkYXRlKCk7XHJcbiAgICAgIH1cclxuICAgICAgd2F0Y2ggPSA8YW55PiBLdWJlcm5ldGVzQVBJLndhdGNoKGNvbmZpZyk7XHJcbiAgICAgIHdhdGNoLmNvbmZpZyA9IGNvbmZpZztcclxuICAgICAgbmFtZXNwYWNlV2F0Y2gud2F0Y2hlc1traW5kXSA9IHdhdGNoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZi5nZXRUeXBlcyA9ICgpID0+IHtcclxuICAgIHZhciBmaWx0ZXIgPSAoa2luZDpzdHJpbmcpID0+IHtcclxuICAgICAgLy8gZmlsdGVyIG91dCBzdHVmZiB3ZSBkb24ndCBjYXJlIGFib3V0IHlldFxyXG4gICAgICBzd2l0Y2goa2luZCkge1xyXG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLk9BVVRIX0NMSUVOVFM6XHJcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuSU1BR0VfU1RSRUFNUzpcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5QT0xJQ0lFUzpcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5ST0xFUzpcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5ST0xFX0JJTkRJTkdTOlxyXG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlBPTElDWV9CSU5ESU5HUzpcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5QRVJTSVNURU5UX1ZPTFVNRV9DTEFJTVM6XHJcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuUEVSU0lTVEVOVF9WT0xVTUVTOlxyXG4gICAgICAgIGNhc2UgS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLkVORFBPSU5UUzpcclxuICAgICAgICBjYXNlIEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5SRVNPVVJDRV9RVU9UQVM6XHJcbiAgICAgICAgY2FzZSBLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuU0VSVklDRV9BQ0NPVU5UUzpcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgYW5zd2VyID0gazhzVHlwZXMuY29uY2F0KFtXYXRjaFR5cGVzLk5BTUVTUEFDRVNdKTtcclxuICAgIGlmIChpc09wZW5TaGlmdCkge1xyXG4gICAgICBhbnN3ZXIgPSBhbnN3ZXIuY29uY2F0KG9zVHlwZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYW5zd2VyID0gYW5zd2VyLmNvbmNhdChLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuVEVNUExBVEVTKTtcclxuICAgICAgYW5zd2VyID0gYW5zd2VyLmNvbmNhdChLdWJlcm5ldGVzQVBJLldhdGNoVHlwZXMuQlVJTERfQ09ORklHUyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXy5maWx0ZXIoYW5zd2VyLCBmaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgc2VsZi5nZXRPYmplY3RzID0gKGtpbmQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKGtpbmQgPT09IFdhdGNoVHlwZXMuTkFNRVNQQUNFUykge1xyXG4gICAgICByZXR1cm4gbmFtZXNwYWNlV2F0Y2gub2JqZWN0cztcclxuICAgIH1cclxuICAgIGlmIChraW5kIGluIG5hbWVzcGFjZVdhdGNoLndhdGNoZXMpIHtcclxuICAgICAgcmV0dXJuIG5hbWVzcGFjZVdhdGNoLndhdGNoZXNba2luZF0ub2JqZWN0cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxmLmxpc3RlbmVycyA9IDxBcnJheTwoT2JqZWN0TWFwKSA9PiB2b2lkPj4gW107XHJcblxyXG4gIC8vIGxpc3RlbmVyIGdldHMgbm90aWZpZWQgYWZ0ZXIgYSBidW5jaCBvZiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWRcclxuICBzZWxmLnJlZ2lzdGVyTGlzdGVuZXIgPSAoZm46KG9iamVjdHM6T2JqZWN0TWFwKSA9PiB2b2lkKSA9PiB7XHJcbiAgICBzZWxmLmxpc3RlbmVycy5wdXNoKGZuKTtcclxuICB9XHJcblxyXG4gIHZhciBwcm9qZWN0c0hhbmRsZSA9IDxhbnk+IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8ga2ljayBvZmYgdGhlIHByb2plY3Qgd2F0Y2hlciBhIGJpdCBzb29uZXIgYWxzb1xyXG4gIGhhd3Rpb1BsdWdpbkxvYWRlci5yZWdpc3RlclByZUJvb3RzdHJhcFRhc2soe1xyXG4gICAgbmFtZTogJ1Byb2plY3RzV2F0Y2hlcicsXHJcbiAgICBkZXBlbmRzOiBbJ0t1YmVybmV0ZXNBcGlEaXNjb3ZlcnknXSxcclxuICAgIHRhc2s6IChuZXh0KSA9PiB7XHJcbiAgICAgIGlmIChpc09wZW5TaGlmdCkge1xyXG5cclxuICAgICAgICBwcm9qZWN0c0hhbmRsZSA9IEt1YmVybmV0ZXNBUEkud2F0Y2goe1xyXG4gICAgICAgICAga2luZDogS3ViZXJuZXRlc0FQSS5XYXRjaFR5cGVzLlBST0pFQ1RTLFxyXG4gICAgICAgICAgbmFtZXNwYWNlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBzdWNjZXNzOiAob2JqZWN0cykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5saXN0ZW5lcnMgJiYgc2VsZi5saXN0ZW5lcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZ290IHByb2plY3RzOiBcIiwgb2JqZWN0cyk7XHJcbiAgICAgICAgICAgICAgXy5mb3JFYWNoKHNlbGYubGlzdGVuZXJzLCAobGlzdGVuZXI6KG9iamVjdHM6T2JqZWN0TWFwKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcih7XHJcbiAgICAgICAgICAgICAgICAgIHByb2plY3RzOiBvYmplY3RzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIG5leHQoKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG5fbW9kdWxlLnNlcnZpY2UoJ1dhdGNoZXJTZXJ2aWNlJywgWyd1c2VyRGV0YWlscycsICckcm9vdFNjb3BlJywgJyR0aW1lb3V0JywgKHVzZXJEZXRhaWxzLCAkcm9vdFNjb3BlLCAkdGltZW91dCkgPT4ge1xyXG4gICAgcmV0dXJuIHNlbGY7XHJcbn1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIndhdGNoZXIudHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIHZhciBsb2cgPSBMb2dnZXIuZ2V0KFwia3ViZXJuZXRlcy10ZXJtLXdpbmRvd3NcIik7XHJcblxyXG4gIF9tb2R1bGUuY29uZmlnKChrdWJlcm5ldGVzQ29udGFpbmVyU29ja2V0UHJvdmlkZXIpID0+IHtcclxuICAgIGt1YmVybmV0ZXNDb250YWluZXJTb2NrZXRQcm92aWRlci5XZWJTb2NrZXRGYWN0b3J5ID0gXCJDdXN0b21XZWJTb2NrZXRzXCI7XHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnQ3VzdG9tV2ViU29ja2V0cycsICh1c2VyRGV0YWlsczphbnkpID0+IHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBDdXN0b21XZWJTb2NrZXQodXJsLCBwcm90b2NvbHMpIHtcclxuICAgICAgdmFyIHBhdGhzID0gdXJsLnNwbGl0KCc/Jyk7XHJcbiAgICAgIGlmICghXy5zdGFydHNXaXRoKHBhdGhzWzBdLCBtYXN0ZXJBcGlVcmwoKSkpIHtcclxuICAgICAgICBwYXRoc1swXSA9IFVybEhlbHBlcnMuam9pbihtYXN0ZXJBcGlVcmwoKSwgcGF0aHNbMF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHVybCA9IEt1YmVybmV0ZXNBUEkud3NVcmwocGF0aHNbMF0pO1xyXG4gICAgICB1cmwuc2VhcmNoKHBhdGhzWzFdICsgJyZhY2Nlc3NfdG9rZW49JyArIHVzZXJEZXRhaWxzLnRva2VuKTtcclxuICAgICAgbG9nLmRlYnVnKFwiVXNpbmcgd3MgdXJsOiBcIiwgdXJsLnRvU3RyaW5nKCkpO1xyXG4gICAgICByZXR1cm4gbmV3IFdlYlNvY2tldCh1cmwudG9TdHJpbmcoKSwgcHJvdG9jb2xzKTtcclxuICAgIH07XHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUuc2VydmljZSgnVGVybWluYWxTZXJ2aWNlJywgKCRyb290U2NvcGUsICRkb2N1bWVudCwgJGNvbXBpbGUsICRpbnRlcnZhbCwgJHRlbXBsYXRlQ2FjaGUpID0+IHtcclxuICAgIHZhciBib2R5ID0gJGRvY3VtZW50LmZpbmQoJ2JvZHknKTtcclxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uVGVybWluYWxzKHRlcm1pbmFscykge1xyXG4gICAgICB2YXIgdG90YWwgPSBfLmtleXModGVybWluYWxzKS5sZW5ndGg7XHJcbiAgICAgIHZhciBkaXN0ID0gKGJvZHkud2lkdGgoKSAtIDIyNSkgLyB0b3RhbDtcclxuICAgICAgdmFyIHBvc2l0aW9uID0gNTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKHRlcm1pbmFscywgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICBpZiAoIXZhbHVlLnNjb3BlLmRvY2tlZCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWx1ZS5lbC5jc3MoJ2xlZnQnLCBwb3NpdGlvbiArICdweCcpO1xyXG4gICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyBkaXN0O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHZhciBkZWZhdWx0VGVtcGxhdGUgPSAkdGVtcGxhdGVDYWNoZS5nZXQoVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgJ3Rlcm1TaGVsbC5odG1sJykpO1xyXG4gICAgdmFyIHNlbGYgPSB7XHJcbiAgICAgIHBvc2l0aW9uVGVybWluYWxzOiAoKSA9PiB7XHJcbiAgICAgICAgcG9zaXRpb25UZXJtaW5hbHMoc2VsZi50ZXJtaW5hbHMpO1xyXG4gICAgICB9LFxyXG4gICAgICB0ZXJtaW5hbHM6IHt9LFxyXG4gICAgICBodHRwVGFzazoge30sXHJcbiAgICAgIG5ld1Rlcm1pbmFsOiAoJGludGVydmFsLCBwb2RMaW5rLCBjb250YWluZXJOYW1lLCBlbnRpdHksIHRlbXBsYXRlID0gZGVmYXVsdFRlbXBsYXRlKSA9PiB7XHJcbiAgICAgICAgdmFyIHRlcm1pbmFsSWQgPSBVcmxIZWxwZXJzLmpvaW4ocG9kTGluaywgY29udGFpbmVyTmFtZSk7XHJcbiAgICAgICAgaWYgKHRlcm1pbmFsSWQgaW4gc2VsZi50ZXJtaW5hbHMpIHtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIkFscmVhZHkgYSB0ZXJtaW5hbCB3aXRoIGlkOiBcIiwgdGVybWluYWxJZCk7XHJcbiAgICAgICAgICBzZWxmLnJhaXNlVGVybWluYWwodGVybWluYWxJZCk7XHJcbiAgICAgICAgICByZXR1cm4gdGVybWluYWxJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNjb3BlID0gJHJvb3RTY29wZS4kbmV3KCk7XHJcbiAgICAgICAgZ2V0TG9ncyhlbnRpdHksIHNjb3BlKTtcclxuICAgICAgICBzY29wZS5wb2RMaW5rID0gcG9kTGluaztcclxuICAgICAgICBzY29wZS5jb250YWluZXJOYW1lID0gY29udGFpbmVyTmFtZTtcclxuICAgICAgICBzY29wZS5pZCA9IHRlcm1pbmFsSWQ7XHJcbiAgICAgICAgc2NvcGUuZG9ja2VkID0gdHJ1ZTtcclxuICAgICAgICBpZih0ZXJtaW5hbElkIGluIHNlbGYuaHR0cFRhc2spe1xyXG4gICAgICAgICAgIHNlbGYucmFpc2VUZXJtaW5hbCh0ZXJtaW5hbElkKTtcclxuICAgICAgICAgICByZXR1cm4gdGVybWluYWxJZDtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICBzZWxmLmh0dHBUYXNrW3Rlcm1pbmFsSWRdID0gJGludGVydmFsKCgpID0+e1xyXG4gICAgICAgICAgICAgIGdldExvZ3MoZW50aXR5LCBzY29wZSk7XHJcbiAgICAgICAgICAgfSwyMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGVsID0gJCgkY29tcGlsZSh0ZW1wbGF0ZSkoc2NvcGUpKTtcclxuICAgICAgICB2YXIgdGVybSA9IHtcclxuICAgICAgICAgIHNjb3BlOiBzY29wZSxcclxuICAgICAgICAgIGVsOiBlbFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYm9keS5hcHBlbmQoZWwpO1xyXG4gICAgICAgIHNlbGYudGVybWluYWxzW3Rlcm1pbmFsSWRdID0gdGVybTtcclxuICAgICAgICBwb3NpdGlvblRlcm1pbmFscyhzZWxmLnRlcm1pbmFscyk7XHJcbiAgICAgICAgcmV0dXJuIHRlcm1pbmFsSWQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNsb3NlVGVybWluYWw6IChpZCkgPT4ge1xyXG4gICAgICAgIHZhciB0ZXJtID0gc2VsZi50ZXJtaW5hbHNbaWRdO1xyXG4gICAgICAgIHZhciB0aW1lciA9IHNlbGYuaHR0cFRhc2tbaWRdO1xyXG4gICAgICAgIGlmKHRpbWVyKXtcclxuICAgICAgICAgICRpbnRlcnZhbC5jYW5jZWwodGltZXIpO1xyXG4gICAgICAgICAgZGVsZXRlIHNlbGYuaHR0cFRhc2tbaWRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGVybSkge1xyXG4gICAgICAgICAgdGVybS5lbC5yZW1vdmUoKTtcclxuICAgICAgICAgIGRlbGV0ZSBzZWxmLnRlcm1pbmFsc1tpZF07XHJcbiAgICAgICAgICBwb3NpdGlvblRlcm1pbmFscyhzZWxmLnRlcm1pbmFscyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICByYWlzZVRlcm1pbmFsOiAoaWQpID0+IHtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goc2VsZi50ZXJtaW5hbHMsICh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSBpZCkge1xyXG4gICAgICAgICAgICB2YWx1ZS5lbC5jc3MoJ3otaW5kZXgnLCAnNDAwMCcpO1xyXG4gICAgICAgICAgICB2YWx1ZS5lbC5maW5kKCcudGVybWluYWwnKS5mb2N1cygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUuZWwuY3NzKCd6LWluZGV4JywgJzMwMDAnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBzZWxmO1xyXG4gIH0pO1xyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gYWRkV2luZG93QWN0aW9ucyhzY29wZSwgZWxlbWVudCwgVGVybWluYWxTZXJ2aWNlKSB7XHJcbiAgICB2YXIgbW92ZWQgPSBmYWxzZTtcclxuICAgIHZhciBsYXN0WCA9IDA7XHJcbiAgICB2YXIgbGFzdFkgPSAwO1xyXG4gICAgdmFyIGhlYWRlciA9IGVsZW1lbnQuZmluZCgnLnRlcm1pbmFsLXRpdGxlJyk7XHJcbiAgICB2YXIgYm9keSA9IGVsZW1lbnQuZmluZCgnLnRlcm1pbmFsLWJvZHknKTtcclxuICAgIGVsZW1lbnQub24oJyRkZXN0cm95JywgKCkgPT4ge1xyXG4gICAgICAkKCcjbWFpbicpLmNzcyh7IGRpc3BsYXk6ICdpbmhlcml0JyB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHZhciBIRUlHSFQgPSAzNDg7XHJcbiAgICB2YXIgV0lEVEggPSA2MDA7XHJcbiAgICB2YXIgVElUTEVfSEVJR0hUID0gMzU7XHJcbiAgICB2YXIgTkFWX09GRlNFVCA9IDQ2O1xyXG5cclxuICAgIGVsZW1lbnQuY3NzKHtcclxuICAgICAgaGVpZ2h0OiBIRUlHSFQsXHJcbiAgICAgIHdpZHRoOiBXSURUSFxyXG4gICAgfSk7XHJcbiAgICBoZWFkZXIuY3NzKHtcclxuICAgICAgaGVpZ2h0OiBUSVRMRV9IRUlHSFRcclxuICAgIH0pO1xyXG4gICAgYm9keS5jc3Moe1xyXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuICAgICAgdG9wOiAzNSxcclxuICAgICAgbGVmdDogMCxcclxuICAgICAgcmlnaHQ6IDAsIFxyXG4gICAgICBib3R0b206IDBcclxuICAgIH0pO1xyXG4gICAgc2NvcGUuY2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgIFRlcm1pbmFsU2VydmljZS5jbG9zZVRlcm1pbmFsKHNjb3BlLmlkKTtcclxuICAgIH07XHJcbiAgICBzY29wZS5yYWlzZSA9ICgpID0+IHtcclxuICAgICAgVGVybWluYWxTZXJ2aWNlLnJhaXNlVGVybWluYWwoc2NvcGUuaWQpO1xyXG4gICAgfTtcclxuICAgIHNjb3BlLiR3YXRjaCgnZG9ja2VkJywgKGRvY2tlZCkgPT4ge1xyXG4gICAgICBpZiAoZG9ja2VkKSB7XHJcbiAgICAgICAgZWxlbWVudC53aWR0aChXSURUSCk7XHJcbiAgICAgICAgaWYgKCFlbGVtZW50Lmhhc0NsYXNzKCdtaW5pbWl6ZWQnKSkge1xyXG4gICAgICAgICAgZWxlbWVudC5oZWlnaHQoSEVJR0hUKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgc2NvcGUuc3RhcnRSZXNpemUgPSAoZSkgPT4ge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIlN0YXJ0IHJlc2l6ZVwiKTtcclxuICAgICAgc2NvcGUucmVzaXppbmcgPSB0cnVlO1xyXG4gICAgICBlbGVtZW50Lm9uKCdtb3VzZXVwJywgc2NvcGUuc3RvcFJlc2l6ZSk7XHJcbiAgICAgICQoZG9jdW1lbnQpLm9uKCdtb3VzZW1vdmUnLCBzY29wZS5kb1Jlc2l6ZSk7XHJcbiAgICAgICQoZG9jdW1lbnQpLm9uKCdtb3VzZWxlYXZlJywgc2NvcGUuc3RvcFJlc2l6ZSk7XHJcbiAgICB9O1xyXG4gICAgc2NvcGUuZG9SZXNpemUgPSAoZSkgPT4ge1xyXG4gICAgICBpZiAoc2NvcGUucmVzaXppbmcpIHtcclxuICAgICAgICBsb2cuZGVidWcoXCJSZXNpemluZywgZTogXCIsIGUpO1xyXG4gICAgICAgIGlmICghbW92ZWQpIHtcclxuICAgICAgICAgIGxhc3RYID0gZS5jbGllbnRYO1xyXG4gICAgICAgICAgbGFzdFkgPSBlLmNsaWVudFk7XHJcbiAgICAgICAgICBtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBoZWlnaHQgPSBlbGVtZW50LmhlaWdodCgpO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IGVsZW1lbnQud2lkdGgoKTtcclxuICAgICAgICB2YXIgZGVsdGFYID0gZS5jbGllbnRYIC0gbGFzdFg7XHJcbiAgICAgICAgdmFyIGRlbHRhWSA9IGUuY2xpZW50WSAtIGxhc3RZO1xyXG4gICAgICAgIHZhciBuZXdIZWlnaHQgPSBoZWlnaHQgKyBkZWx0YVk7XHJcbiAgICAgICAgdmFyIG5ld1dpZHRoID0gd2lkdGggKyBkZWx0YVg7XHJcbiAgICAgICAgaWYgKG5ld0hlaWdodCA+IDM1ICYmIG5ld1dpZHRoID4gODApIHtcclxuICAgICAgICAgIGVsZW1lbnQuaGVpZ2h0KGhlaWdodCArIGRlbHRhWSk7XHJcbiAgICAgICAgICBlbGVtZW50LndpZHRoKHdpZHRoICsgZGVsdGFYKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBzY29wZS5zdG9wUmVzaXplID0gKGUpID0+IHtcclxuICAgICAgc2NvcGUucmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgbW92ZWQgPSBmYWxzZTtcclxuICAgICAgZWxlbWVudC5vZmYoJ21vdXNldXAnLCBzY29wZS5zdG9wUmVzaXplKTtcclxuICAgICAgJChkb2N1bWVudCkub2ZmKCdtb3VzZW1vdmUnLCBzY29wZS5kb1Jlc2l6ZSk7XHJcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2VsZWF2ZScsIHNjb3BlLnN0b3BSZXNpemUpO1xyXG4gICAgfVxyXG4gICAgc2NvcGUubW91c2VEb3duID0gKGUpID0+IHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnbWluaW1pemVkJykgfHwgZWxlbWVudC5oYXNDbGFzcygnbWF4aW1pemVkJykpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgc2NvcGUuZHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICBlbGVtZW50Lm9uKCdtb3VzZXVwJywgc2NvcGUubW91c2VVcCk7XHJcbiAgICAgICQoZG9jdW1lbnQpLm9uKCdtb3VzZW1vdmUnLCBzY29wZS5tb3VzZU1vdmUpO1xyXG4gICAgICAkKGRvY3VtZW50KS5vbignbW91c2VsZWF2ZScsIHNjb3BlLm1vdXNlVXApO1xyXG4gICAgfTtcclxuICAgIHNjb3BlLm1vdXNlVXAgPSAoZSkgPT4ge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHNjb3BlLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIG1vdmVkID0gZmFsc2U7XHJcbiAgICAgIHZhciBoZWlnaHQgPSBlbGVtZW50LmhlaWdodCgpO1xyXG4gICAgICB2YXIgb2Zmc2V0ID0gZWxlbWVudC5vZmZzZXQoKTtcclxuICAgICAgdmFyIHdpbkhlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKTtcclxuICAgICAgaWYgKG9mZnNldC50b3AgPiAod2luSGVpZ2h0IC0gaGVpZ2h0IC0gMjApKSB7XHJcbiAgICAgICAgZWxlbWVudC5jc3MoeyB0b3A6IFwiaW5oZXJpdFwiLCBsZWZ0OiBcImluaGVyaXRcIiB9KTtcclxuICAgICAgICBzY29wZS5kb2NrZWQgPSB0cnVlO1xyXG4gICAgICAgIFRlcm1pbmFsU2VydmljZS5wb3NpdGlvblRlcm1pbmFscygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsZW1lbnQub2ZmKCdtb3VzZXVwJywgc2NvcGUubW91c2VVcCk7XHJcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2Vtb3ZlJywgc2NvcGUubW91c2VNb3ZlKTtcclxuICAgICAgJChkb2N1bWVudCkub2ZmKCdtb3VzZWxlYXZlJywgc2NvcGUubW91c2VVcCk7XHJcbiAgICB9O1xyXG4gICAgc2NvcGUubW91c2VNb3ZlID0gKGUpID0+IHtcclxuICAgICAgaWYgKHNjb3BlLmRyYWdnaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb3ZlZCkge1xyXG4gICAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgICBsYXN0WSA9IGUuY2xpZW50WTtcclxuICAgICAgICAgIG1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRlbHRhWCA9IGUuY2xpZW50WCAtIGxhc3RYO1xyXG4gICAgICAgIHZhciBkZWx0YVkgPSBlLmNsaWVudFkgLSBsYXN0WTtcclxuICAgICAgICB2YXIgZWxPZmZzZXQgPSBlbGVtZW50Lm9mZnNldCgpO1xyXG4gICAgICAgIGVsZW1lbnQub2Zmc2V0KHsgdG9wOiBlbE9mZnNldC50b3AgKyBkZWx0YVksIGxlZnQ6IGVsT2Zmc2V0LmxlZnQgKyBkZWx0YVggfSk7XHJcbiAgICAgICAgbGFzdFggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFkgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZXN0b3JlV2luZG93KHNjb3BlLCBlbGVtZW50KSB7XHJcbiAgICAgIGlmIChzY29wZS5vZmZzZXQpIHtcclxuICAgICAgICBlbGVtZW50Lm9mZnNldChzY29wZS5vZmZzZXQpO1xyXG4gICAgICAgIHNjb3BlLmRvY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzY29wZS5oZWlnaHQpIHtcclxuICAgICAgICBlbGVtZW50LmhlaWdodChzY29wZS5oZWlnaHQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzY29wZS53aWR0aCkge1xyXG4gICAgICAgIGVsZW1lbnQud2lkdGgoc2NvcGUud2lkdGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2F2ZVdpbmRvdyhzY29wZSwgZWxlbWVudCkge1xyXG4gICAgICBzY29wZS5vZmZzZXQgPSBlbGVtZW50Lm9mZnNldCgpO1xyXG4gICAgICBzY29wZS5oZWlnaHQgPSBlbGVtZW50LmhlaWdodCgpO1xyXG4gICAgICBzY29wZS53aWR0aCA9IGVsZW1lbnQud2lkdGgoKTtcclxuICAgIH1cclxuXHJcbiAgICBzY29wZS5tYXhpbWl6ZWQgPSAoKSA9PiB7XHJcbiAgICAgIHJldHVybiBlbGVtZW50Lmhhc0NsYXNzKCdtYXhpbWl6ZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICBzY29wZS5tYXhpbWl6ZSA9ICgkZSkgPT4ge1xyXG4gICAgICAkZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBpZiAoZWxlbWVudC5oYXNDbGFzcygnbWluaW1pemVkJykpIHtcclxuICAgICAgICBzY29wZS5taW5pbWl6ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCdtYXhpbWl6ZWQnKSkge1xyXG4gICAgICAgIHJlc3RvcmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgICAgICQoJyNtYWluJykuY3NzKHsgZGlzcGxheTogJ2luaGVyaXQnIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNhdmVXaW5kb3coc2NvcGUsIGVsZW1lbnQpO1xyXG4gICAgICAgICQoJyNtYWluJykuY3NzKHsgZGlzcGxheTogJ25vbmUnIH0pO1xyXG4gICAgICAgIGVsZW1lbnQuY3NzKHsgXHJcbiAgICAgICAgICBoZWlnaHQ6ICdpbmhlcml0JywgXHJcbiAgICAgICAgICBib3R0b206IDAsIFxyXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJywgXHJcbiAgICAgICAgICB0b3A6IE5BVl9PRkZTRVQsIFxyXG4gICAgICAgICAgbGVmdDogMCBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbGVtZW50LnRvZ2dsZUNsYXNzKCdtYXhpbWl6ZWQnKTtcclxuICAgIH1cclxuICAgIHNjb3BlLm1pbmltaXplID0gKCRlKSA9PiB7XHJcbiAgICAgICRlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGlmIChlbGVtZW50Lmhhc0NsYXNzKCdtYXhpbWl6ZWQnKSkge1xyXG4gICAgICAgIHNjb3BlLm1heGltaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsZW1lbnQuaGFzQ2xhc3MoJ21pbmltaXplZCcpKSB7XHJcbiAgICAgICAgcmVzdG9yZVdpbmRvdyhzY29wZSwgZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2F2ZVdpbmRvdyhzY29wZSwgZWxlbWVudCk7XHJcbiAgICAgICAgc2NvcGUuZG9ja2VkID0gdHJ1ZTtcclxuICAgICAgICBlbGVtZW50LmNzcyh7IGhlaWdodDogVElUTEVfSEVJR0hULCB0b3A6IFwiaW5oZXJpdFwiLCBsZWZ0OiBcImluaGVyaXRcIiB9KTtcclxuICAgICAgICBUZXJtaW5hbFNlcnZpY2UucG9zaXRpb25UZXJtaW5hbHMoKTtcclxuICAgICAgfVxyXG4gICAgICBlbGVtZW50LnRvZ2dsZUNsYXNzKCdtaW5pbWl6ZWQnKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBfbW9kdWxlLmRpcmVjdGl2ZSgndGVybWluYWxXaW5kb3cnLCAoJGNvbXBpbGUsIFRlcm1pbmFsU2VydmljZSkgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdBJyxcclxuICAgICAgc2NvcGU6IGZhbHNlLFxyXG4gICAgICBsaW5rOiAoc2NvcGU6YW55LCBlbGVtZW50LCBhdHRyKSA9PiB7XHJcbiAgICAgICAgYWRkV2luZG93QWN0aW9ucyhzY29wZSwgZWxlbWVudCwgVGVybWluYWxTZXJ2aWNlKTtcclxuICAgICAgICB2YXIgYm9keSA9IGVsZW1lbnQuZmluZCgnLnRlcm1pbmFsLWJvZHknKTtcclxuICAgICAgICBib2R5LmFwcGVuZCgkY29tcGlsZSgnPGt1YmVybmV0ZXMtY29udGFpbmVyLXRlcm1pbmFsIHBvZD1cInBvZExpbmtcIiBjb250YWluZXI9XCJjb250YWluZXJOYW1lXCIgY29tbWFuZD1cImJhc2hcIj48L2t1YmVybmV0ZXMtY29udGFpbmVyLXRlcm1pbmFsPicpKHNjb3BlKSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfSk7XHJcblxyXG4gIGZ1bmN0aW9uIGdldExvZ3MocmMsIHNjb3BlKXsgICAgXHJcbiAgICAgdmFyIHhocj0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICBpZih4aHIucmVhZHlTdGF0ZSA9PSA0KXtcclxuICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApe1xyXG4gICAgICAgICAgICAgICBpZih4aHIucmVzcG9uc2VUZXh0ICE9XCJcIiAmJiB4aHIucmVzcG9uc2VUZXh0ICE9bnVsbCl7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIHZhciBsb2dPYmplY3QgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpOyAgXHJcbiAgICAgICAgICAgICAgICAgIHNjb3BlLmxvZ3MgPSBsb2dPYmplY3RbZ2V0TmFtZShyYyldO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIHNjb3BlLmxvZ3MgPSBcIuW9k+WJjeayoeacieWPr+S7peafpeeci+eahOaXpeW/l+S/oeaBr1wiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgLy9yZXR1cm4gKHt0ZXh0OiBcImFhYWFhYVwifSk7XHJcblxyXG4gICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAvL2xvZyA9IFwi5b2T5YmN5rKh5pyJ5Y+v5Lul5p+l55yL55qE5pel5b+X77yBXCI7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICB9XHJcbiAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIFwiL2phdmEvY29uc29sZS9hcGkvb3JhY2xlL2V4dHJhY3QvbG9nP3JjTmFtZT1cIiArIGdldE5hbWUocmMpLGZhbHNlKTtcclxuICAgICB4aHIuc2VuZChudWxsKTtcclxuICB9XHJcbn1cclxuXHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImNvbmZpZ1BsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImNvbmZpZ3NEYXRhU2VydmljZS50c1wiLz5cclxubW9kdWxlIENvbmZpZ3N7XHJcblx0ZXhwb3J0IHZhciBUYWJsZUVkaXQgPSBjb250cm9sbGVyKCdUYWJsZUVkaXQnLCBbJyRzY29wZScsICgkc2NvcGUpID0+IHtcclxuXHRcdCRzY29wZS5lZGl0Um93ID0gKGVudGl0eSk9PntcdFx0XHRcclxuXHRcdFx0JHNjb3BlLiRlbWl0KCdlZGl0Um93JywgZW50aXR5KTtcclxuXHRcdH1cclxuXHJcblx0XHQkc2NvcGUuZGVsZXRlUm93T25lID17XHJcblx0XHRcdHNob3c6IGZhbHNlLFxyXG4gICAgICAgXHRcdGl0ZW06IG51bGwsXHJcbiAgICAgICBcdFx0b3BlbjogKGVudGl0eSkgPT4ge1xyXG4gXHRcdFx0XHR2YXIgZGVsZXRlUm93T25lID0gJHNjb3BlLmRlbGV0ZVJvd09uZTtcclxuICAgICAgICAgXHRcdGRlbGV0ZVJvd09uZS5zaG93ID0gdHJ1ZTtcclxuICAgICAgICAgXHRcdGRlbGV0ZVJvd09uZS5pdGVtID0gZW50aXR5O1xyXG4gICAgICAgXHRcdH0sXHJcbiAgICAgICBcdFx0b25PazogKCkgPT4ge1xyXG4gICAgICAgXHRcdFx0dmFyIGRlbGV0ZVJvd09uZSA9ICRzY29wZS5kZWxldGVSb3dPbmU7XHJcbiAgICAgICBcdFx0XHQkc2NvcGUuJGVtaXQoJ2RlbGV0ZVJvdycsIGRlbGV0ZVJvd09uZS5pdGVtKTtcclxuICAgICAgIFx0XHR9LFxyXG4gICAgICAgXHRcdG9uQ2FuY2VsOiAoKSA9PiB7XHJcbiAgICAgICBcdFx0XHR2YXIgZGVsZXRlUm93T25lID0gJHNjb3BlLmRlbGV0ZVJvd09uZTtcclxuICAgICAgICAgXHRcdGRlbGV0ZVJvd09uZS5zaG93ID0gZmFsc2U7XHJcbiAgICAgICAgIFx0XHRkZWxldGVSb3dPbmUuaXRlbSA9IG51bGw7XHJcbiAgICAgICBcdFx0fVxyXG5cdFx0fVxyXG5cdH1dKTtcclxuXHJcblx0ZXhwb3J0IHZhciBWb2x1bWVDb250cm9sbGVyID0gY29udHJvbGxlcignVm9sdW1lQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRodHRwJywgKCRzY29wZSwgJGh0dHApID0+IHtcclxuXHRcdCRzY29wZS5zdWJtaXR0ZWQgPSBmYWxzZTtcclxuXHRcdCRzY29wZS5zdGF0dXMgPSAkc2NvcGUubmdEaWFsb2dEYXRhLnN0YXR1cztcdFxyXG5cclxuXHRcdCRzY29wZS4gY2FuY2VsID0gKCkgPT57XHJcblx0XHRcdCRzY29wZS5jbG9zZVRoaXNEaWFsb2coKTtcclxuXHRcdFx0JHNjb3BlLnN1Ym1pdHRlZCA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdCRzY29wZS5kZWxldGVCcm9jayA9ICh2b2x1bWU6dm9sdW1lLCBicm9jaykgPT4ge1xyXG5cdFx0XHRpZih2b2x1bWUuYnJpY2subGVuZ3RoPjEpXHJcblx0XHRcdFx0ZGVsZXRlQnJvY2sodm9sdW1lLCBicm9jayk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHQkc2NvcGUuc2hvd01lc3NhZ2UgPSB0cnVlO1x0ICAgIFx0XHRcdFx0XHJcblx0XHR9XHJcblxyXG5cdFx0JHNjb3BlLmFkZEJyb2NrID0gKHZvbHVtZSkgPT4ge1xyXG5cdFx0XHR2YXIgIGJsb2NrID0ge1xyXG5cdFx0XHRcdGlwOiBcIlwiLCAvL+WtmOWCqOWdl+eahOacuuWZqGlw5Zyw5Z2AXHJcblx0XHRcdFx0cGF0aDogXCJcIiwgLy/lrZjlgqjlnZfot6/lvoRcclxuXHRcdFx0XHRzdGF0dXM6IGZhbHNlLCAvL+WtmOWCqOWdl+eahOeKtuaAgVxyXG5cdFx0XHRcdGVkaXRhYmxlOnRydWVcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHR9O1xyXG5cdFx0XHRhZGRCcm9jayh2b2x1bWUsIGJsb2NrKTtcclxuXHRcdFx0JHNjb3BlLnNob3dNZXNzYWdlID0gZmFsc2U7XHRcclxuXHRcdH1cclxuXHJcblx0XHQkc2NvcGUuc3RvcFZvbHVtZSA9ICh2b2x1bWUpID0+e1xyXG5cdFx0XHR2b2x1bWUuc3RhdHVzID0gZmFsc2U7XHRcdFxyXG5cdFx0fVxyXG5cclxuXHRcdCRzY29wZS5zdGFydFZvbHVtZSA9ICh2b2x1bWUpID0+e1xyXG5cdFx0XHR2b2x1bWUuc3RhdHVzID0gdHJ1ZTtcclxuXHJcblx0XHR9XHJcblxyXG5cdFx0JHNjb3BlLm9uU3VibWl0ID0gKGVudGl0eSkgPT4ge1x0XHRcdFx0XHRcclxuXHRcdFx0aWYoJHNjb3BlLnZvbHVtZUZvcm0uJHZhbGlkKXtcdFx0XHRcdFxyXG5cdFx0XHRcdCRzY29wZS4kZW1pdCgndXBkYXRlJywgZW50aXR5KTtcdFx0XHJcblx0XHRcdFx0JHNjb3BlLmNsb3NlVGhpc0RpYWxvZygpO1xyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHQkc2NvcGUuc3VibWl0dGVkID0gdHJ1ZTtcclxuXHRcdFx0fVx0XHRcclxuXHRcdH1cclxuXHR9XSk7XHJcblxyXG5cdGV4cG9ydCB2YXIgU3lzdGVtSW5mb0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKCdTeXN0ZW1JbmZvQ29udHJvbGxlcicsIFsnJHNjb3BlJywgKCRzY29wZSkgPT57XHJcblx0XHRcdFx0XHJcblx0fV0pO1xyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiY29uZmlnUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiY29uZmlnc0hlbHBlci50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImNvbmZpZ3NVdGlscy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImNvbmZpZ3NEYXRhU2VydmljZS50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMvdGVybS50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJzaGFyZUNvbnRyb2xsZXIudHNcIi8+XHJcbm1vZHVsZSBDb25maWdze1xyXG5cclxuXHRleHBvcnQgdmFyIEdmc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKCdHZnNDb250cm9sbGVyJywgW1wiJHNjb3BlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsICdDb25maWdzTW9kZWwnLCAnbmdEaWFsb2cnLFxyXG5cdFx0KCRzY29wZSwgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBDb25maWdzTW9kZWwsIG5nRGlhbG9nKSA9PntcclxuXHRcdCRzY29wZS5tb2RlbCA9IENvbmZpZ3NNb2RlbDtcclxuXHRcdCRzY29wZS52b2x1bWVzID0gQ29uZmlnc01vZGVsLmNsdXN0ZXI7XHJcblx0ICAgIHNoYXJlSW5pdCgkc2NvcGUsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zKTtcdCAgICBcdCAgIFxyXG5cclxuXHQgICAgJHNjb3BlLmNyZWF0ZUdmcyA9ICgpID0+IHtcclxuXHQgICAgXHRuZ0RpYWxvZy5vcGVuKHsgXHJcblx0ICAgIFx0XHR0ZW1wbGF0ZTogJ25ld0RpYWxvZy5odG1sJyxcclxuXHQgICAgXHRcdGNvbnRyb2xsZXI6J0NvbmZpZ3MuVm9sdW1lQ29udHJvbGxlcicsXHJcblx0ICAgIFx0XHR3aWR0aDogMTAwNSxcclxuXHQgICAgXHRcdHNjb3BlOiAkc2NvcGUsIFxyXG5cdCAgICBcdFx0Y2xvc2VCeURvY3VtZW50IDogZmFsc2UsXHJcblx0ICAgIFx0XHRkYXRhOiB7XHJcblx0ICAgIFx0XHRcdG5hbWU6ICcnLFxyXG5cdCAgICBcdFx0XHRwYXRoOiAnJyxcclxuXHQgICAgXHRcdFx0c3RhdHVzOiB0cnVlLFxyXG5cdCAgICBcdFx0XHRicmljazogW3tcclxuXHQgICAgXHRcdFx0XHRpcDogW1wiMFwiLCBcIjBcIiwgXCIwXCIsIFwiMFwiXSxcclxuXHQgICAgXHRcdFx0XHRwYXRoOiAnJyxcclxuXHQgICAgXHRcdFx0XHRzdGF0dXM6IGZhbHNlLFxyXG5cdCAgICBcdFx0XHRcdGVkaXRhYmxlOiB0cnVlXHJcblx0ICAgIFx0XHRcdH1dLFxyXG5cdCAgICBcdFx0XHRlZGl0YWJsZTogdHJ1ZVxyXG5cdCAgICBcdFx0fSxcdCAgICBcdFx0XHJcblx0ICAgIFx0XHRjbGFzc05hbWU6ICduZ2RpYWxvZy10aGVtZS1kZWZhdWx0J1xyXG5cdCAgICBcdH0pO1x0ICAgIFx0XHRcclxuXHQgICAgfVxyXG5cclxuXHQgICAgJHNjb3BlLmVkaXRSb3cgPSAodm9sdW1lKSA9PiB7XHQgICAgXHRcclxuXHQgICAgXHR2YXIgZlZvbHVtZSA9IGZvcm1hdFZvbHVtZSh2b2x1bWUpO1x0ICAgIFx0XHRcclxuXHQgICAgXHRuZ0RpYWxvZy5vcGVuKHsgXHJcblx0ICAgIFx0XHR0ZW1wbGF0ZTogJ25ld0RpYWxvZy5odG1sJyxcclxuXHQgICAgXHRcdHdpZHRoOiAxMDA1LCBcclxuXHQgICAgXHRcdGRhdGE6IGZWb2x1bWUsXHRcclxuXHQgICAgXHRcdHNjb3BlOiAkc2NvcGUsICAgIFx0XHRcclxuXHQgICAgXHRcdGNsYXNzTmFtZTogJ25nZGlhbG9nLXRoZW1lLWRlZmF1bHQnLFx0ICAgIFx0XHRcclxuXHQgICAgXHRcdGNvbnRyb2xsZXI6ICdDb25maWdzLlZvbHVtZUNvbnRyb2xsZXInLFxyXG5cdCAgICBcdFx0Y2xvc2VCeURvY3VtZW50IDogZmFsc2VcclxuXHQgICAgXHR9KTtcclxuXHQgICAgfVxyXG5cclxuXHQgICAgJHNjb3BlLnNob3dEZWxldGVWb2x1bWUgPSB7XHJcblx0ICAgIFx0c2hvdzogZmFsc2UsXHJcbiAgICAgICBcdFx0aXRlbTogbnVsbCxcclxuICAgICAgIFx0XHRvcGVuOiAoZW50aXR5KSA9PiB7XHJcbiBcdFx0XHRcdHZhciBzaG93RGVsZXRlVm9sdW1lID0gJHNjb3BlLnNob3dEZWxldGVWb2x1bWU7XHJcbiAgICAgICAgIFx0XHRzaG93RGVsZXRlVm9sdW1lLnNob3cgPSB0cnVlO1xyXG4gICAgICAgICBcdFx0c2hvd0RlbGV0ZVZvbHVtZS5pdGVtID0gZW50aXR5O1xyXG4gICAgICAgXHRcdH0sXHJcbiAgICAgICBcdFx0b25PazogKCkgPT4ge1xyXG4gICAgICAgXHRcdFx0dmFyIHNob3dEZWxldGVWb2x1bWUgPSAkc2NvcGUuc2hvd0RlbGV0ZVZvbHVtZTtcclxuICAgICAgIFx0XHRcdCR0aW1lb3V0KCgpID0+e1xyXG4gICAgICAgXHRcdFx0XHRjb25zb2xlLmxvZyhzaG93RGVsZXRlVm9sdW1lLml0ZW0pO1xyXG4gICAgICAgXHRcdFx0XHR2YXIgc3Bpbm5lcjtcclxuXHRcdFx0XHRcdCQuYWpheCh7XHJcblx0XHRcdFx0XHRcdHR5cGU6IFwiUE9TVFwiLFxyXG5cdFx0XHRcdFx0XHR1cmw6IFwiL2phdmEvY29uc29sZS9hcGkvdm9sdW1lL2RlbGV0ZVwiLFxyXG5cdFx0XHRcdFx0XHR0aW1lb3V0OiA4MDAwLFxyXG5cdFx0XHRcdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxyXG5cdFx0XHRcdFx0XHQvL2FzeW5jOiBmYWxzZSxcclxuXHRcdFx0XHRcdFx0ZGF0YTogSlNPTi5zdHJpbmdpZnkoc2hvd0RlbGV0ZVZvbHVtZS5pdGVtKSxcclxuXHRcdFx0XHRcdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLFxyXG5cdFx0XHRcdFx0XHRiZWZvcmVTZW5kOiAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0Q29uZmlncy5jcmVhdGVfbWFzaygpOyAgLy/liJvlu7rpga7nvanlsYJcclxuXHRcdFx0XHRcdFx0XHRLdWJlcm5ldGVzLmNyZWF0ZV9sb2NhZEVmZmVjdChcIuato+WcqOabtOaWsOS6keebmOS/oeaBryzor7fnqI3nrYnvvIFcIik7IC8v5Yib5bu65pWw5o2u5Yqg6L295pWI5p6c5bGCXHJcblx0XHQgICAgICAgICAgICAgIFx0dmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2FkaW5nJylcclxuXHRcdCAgICAgICAgICAgICAgXHRzcGlubmVyID0gbmV3IFNwaW5uZXIoS3ViZXJuZXRlcy5sb2FkQ29uZmlncygpKS5zcGluKHRhcmdldCk7ICAgICAgIFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0Y29tcGxldGU6IChYTUxIdHRwUmVxdWVzdCwgdGV4dFN0YXR1cykgPT4ge1x0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0aWYoWE1MSHR0cFJlcXVlc3Quc3RhdHVzID09IDIwMCl7XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdFx0S3ViZXJuZXRlcy5jcmVhdGVTdWNjZXNzSW5mbyhcInN1Y2Nlc3NcIiwgXCLmm7TmlrDmiJDlip/vvIFcIik7XHRcdFx0XHRcdCAgXHRcclxuXHRcdFx0XHRcdFx0XHRcdHNldFRpbWVvdXQoXCJLdWJlcm5ldGVzLnJlbW92ZU1hc2soKVwiLCAxNTAwKTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vJHNjb3BlLm1vZGVsLnVwZGF0ZVZvbHVtZURhdGEoKTtcclxuXHRcdFx0XHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdFx0XHRcdEt1YmVybmV0ZXMuY3JlYXRlU3VjY2Vzc0luZm8oXCJlcnJvclwiLCBcIuabtOaWsOWksei0pe+8gVwiKTtcclxuXHRcdCAgICAgICAgICAgICAgICBcdFx0c2V0VGltZW91dChcIkt1YmVybmV0ZXMucmVtb3ZlTWFzaygpXCIsIDE1MDApOyBcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHN1Y2Nlc3M6IChkYXRhKSA9PiB7XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRpZihkYXRhKXtcclxuXHRcdFx0XHRcdFx0XHRcdENvbmZpZ3NNb2RlbC5jbHVzdGVyID0gZGF0YTtcclxuXHRcdFx0XHRcdFx0XHRcdENvbmZpZ3MuZm9ybWF0Vm9sdW1lcyhDb25maWdzTW9kZWwuY2x1c3Rlcik7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdCRzY29wZS4kYXBwbHkoKCkgPT57XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0XHRcdCRzY29wZS52b2x1bWVzID0gQ29uZmlnc01vZGVsLmNsdXN0ZXI7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHRcdH0pO1x0XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0IFx0XHRcdH0pO1x0XHJcbiAgICAgICBcdFx0XHRcdC8qJGh0dHAoe1xyXG5cdFx0XHRcdFx0XHR1cmw6IFwiL2phdmEvY29uc29sZS9hcGkvdm9sdW1lL2RlbGV0ZVwiLFxyXG5cdFx0XHRcdFx0XHRtZXRob2Q6ICdQT1NUJyxcclxuXHRcdFx0XHRcdFx0ZGF0YTogc2hvd0RlbGV0ZVZvbHVtZS5pdGVtXHJcblx0XHRcdFx0XHR9KS5zdWNjZXNzKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xyXG5cdFx0XHRcdFx0XHQvKlxyXG5cdFx0XHRcdFx0XHRcdOabtOaWsHZvbHVtZeS/oeaBr1xyXG5cdFx0XHRcdFx0XHQqL1xyXG5cdFx0XHRcdFx0XHQvKiRzY29wZS5tb2RlbC51cGRhdGVWb2x1bWVEYXRhKCk7XHRcdFx0XHRcclxuICAgICAgICAgICAgXHRcdH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1xyXG4gICAgICAgICAgICBcdFx0XHRDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5Yig6ZmkVm9sdW1l5aSx6LSl77yBXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgXHRcdFx0IH0pOyovXHRcdFxyXG4gICAgICAgXHRcdFx0fSwgMTAwKTtcclxuICAgICAgIFx0XHR9LFxyXG4gICAgICAgXHRcdG9uQ2FuY2VsOiAoKSA9PntcclxuICAgICAgIFx0XHRcdHZhciBzaG93RGVsZXRlVm9sdW1lID0gJHNjb3BlLnNob3dEZWxldGVWb2x1bWU7XHJcbiAgICAgICAgIFx0XHRzaG93RGVsZXRlVm9sdW1lLnNob3cgPSBmYWxzZTtcclxuICAgICAgICAgXHRcdHNob3dEZWxldGVWb2x1bWUuaXRlbSA9IG51bGw7XHJcbiAgICAgICBcdFx0fVxyXG5cdCAgICB9XHJcblxyXG5cdCAgICAkc2NvcGUuJG9uKCd1cGRhdGUnLCAoZXZlbnQsIGRhdGEpID0+IHtcdCAgICBcdFxyXG5cdCAgICBcdGFuZ3VsYXIuZm9yRWFjaChkYXRhW1wiYnJpY2tcIl0sIChicmljaykgPT57XHJcblx0XHRcdFx0dmFyIGlwID0gW107XHJcblx0XHRcdFx0aWYoYnJpY2tbXCJpcFwiXSBpbnN0YW5jZW9mIE9iamVjdCl7XHJcblx0XHRcdFx0XHRmb3IodmFyIGtleSBpbiBicmlja1tcImlwXCJdKVxyXG5cdFx0XHRcdFx0XHRpcC5wdXNoKGJyaWNrW1wiaXBcIl1ba2V5XSk7XHJcblx0XHRcdFx0XHRicmlja1tcImlwXCJdID0gaXAuam9pbihcIlxcLlwiKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1x0XHJcblxyXG5cdFx0XHR2YXIgc3Bpbm5lcjtcclxuXHJcblx0XHRcdCQuYWpheCh7XHJcblx0XHRcdFx0dHlwZTogXCJQT1NUXCIsXHJcblx0XHRcdFx0dXJsOiBcIi9qYXZhL2NvbnNvbGUvYXBpL3ZvbHVtZS91cGRhdGVcIixcclxuXHRcdFx0XHR0aW1lb3V0OiA1MDAwLFxyXG5cdFx0XHRcdGRhdGFUeXBlOiAnanNvbicsXHJcblx0XHRcdFx0Ly9hc3luYzogZmFsc2UsXHJcblx0XHRcdFx0ZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXHJcblx0XHRcdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLFxyXG5cdFx0XHRcdGJlZm9yZVNlbmQ6ICgpID0+IHtcclxuXHRcdFx0XHRcdENvbmZpZ3MuY3JlYXRlX21hc2soKTsgIC8v5Yib5bu66YGu572p5bGCXHJcblx0XHRcdFx0XHRLdWJlcm5ldGVzLmNyZWF0ZV9sb2NhZEVmZmVjdChcIuato+WcqOabtOaWsOS6keebmOS/oeaBryzor7fnqI3nrYnvvIFcIik7IC8v5Yib5bu65pWw5o2u5Yqg6L295pWI5p6c5bGCXHJcbiAgICAgICAgICAgICAgXHR2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvYWRpbmcnKVxyXG4gICAgICAgICAgICAgIFx0c3Bpbm5lciA9IG5ldyBTcGlubmVyKEt1YmVybmV0ZXMubG9hZENvbmZpZ3MoKSkuc3Bpbih0YXJnZXQpOyAgICAgICBcdFx0XHRcdFx0XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRjb21wbGV0ZTogKFhNTEh0dHBSZXF1ZXN0LCB0ZXh0U3RhdHVzKSA9PiB7XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0aWYoWE1MSHR0cFJlcXVlc3Quc3RhdHVzID09IDIwMCl7XHJcblx0XHRcdFx0XHRcdEt1YmVybmV0ZXMuY3JlYXRlU3VjY2Vzc0luZm8oXCJzdWNjZXNzXCIsIFwi5pu05paw5oiQ5Yqf77yBXCIpO1x0XHRcdFx0XHQgIFx0XHJcblx0XHRcdFx0XHRcdHNldFRpbWVvdXQoXCJLdWJlcm5ldGVzLnJlbW92ZU1hc2soKVwiLCAxNTAwKTtcclxuXHRcdFx0XHRcdFx0Ly8kc2NvcGUubW9kZWwudXBkYXRlVm9sdW1lRGF0YSgpO1xyXG5cdFx0XHRcdFx0fWVsc2V7XHJcblx0XHRcdFx0XHRcdEt1YmVybmV0ZXMuY3JlYXRlU3VjY2Vzc0luZm8oXCJlcnJvclwiLCBcIuabtOaWsOWksei0pe+8gVwiKTtcclxuICAgICAgICAgICAgICAgIFx0XHRzZXRUaW1lb3V0KFwiS3ViZXJuZXRlcy5yZW1vdmVNYXNrKClcIiwgMTUwMCk7IFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0c3VjY2VzczogKGRhdGEpID0+IHtcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRpZihkYXRhKXtcclxuXHRcdFx0XHRcdFx0Q29uZmlnc01vZGVsLmNsdXN0ZXIgPSBkYXRhO1xyXG5cdFx0XHRcdFx0XHRDb25maWdzLmZvcm1hdFZvbHVtZXMoQ29uZmlnc01vZGVsLmNsdXN0ZXIpO1x0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHQkc2NvcGUuJGFwcGx5KCgpID0+e1x0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdCRzY29wZS52b2x1bWVzID0gQ29uZmlnc01vZGVsLmNsdXN0ZXI7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHR9KTtcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0fVx0XHRcdFx0XHRcclxuXHRcdFx0XHR9XHJcbiBcdFx0XHR9KTtcdFx0XHJcblx0XHRcdFxyXG5cdFx0XHQvKiRodHRwKHtcclxuXHRcdFx0XHR1cmw6IFwiL2phdmEvY29uc29sZS9hcGkvdm9sdW1lL3VwZGF0ZVwiLFxyXG5cdFx0XHRcdG1ldGhvZDogJ1BPU1QnLFxyXG5cdFx0XHRcdGRhdGE6IGRhdGFcclxuXHRcdFx0fSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuXHRcdFx0XHQkc2NvcGUubW9kZWwudXBkYXRlVm9sdW1lRGF0YSgpO1x0XHRcdFx0XHJcbiAgICAgICAgICAgIH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsaGVhZGVyLGNvbmZpZyxzdGF0dXMpe1x0XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KTsqL1xyXG5cdCAgICB9KTtcclxuXHR9XSk7XHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJjb25maWdzSGVscGVyLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiY29uZmlnc1V0aWxzLnRzXCIvPlxyXG5cclxubW9kdWxlIENvbmZpZ3N7XHJcblxyXG5cdGV4cG9ydCB2YXIgS3ViZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKCdLdWJlQ29udHJvbGxlcicsIFtcIiRzY29wZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLFwiQ29uZmlnc01vZGVsXCIsXHJcblx0XHQoJHNjb3BlLCAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIENvbmZpZ3NNb2RlbCkgPT4ge1xyXG5cdFx0JHNjb3BlLm1vZGVsPSBDb25maWdzTW9kZWw7IFxyXG4gICAgICAgICRzY29wZS5tb2RlbC51cGRhdGVPcmFjbGVQYXJhbSgpO1xyXG4gICAgICAgICRzY29wZS5zdWJtaXR0ZWQgPSBmYWxzZTsgICAgICAgXHJcblxyXG5cdFx0JHNjb3BlLnRhYmxlQ29uZmlnPXtcclxuICAgICAgICAgICAgZGF0YTogJ21vZGVsLm9yYWNsZVBhcmFtJyxcclxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogXCJuYW1lXCIsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogXCLlkI3np7BcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogXCJpcFwiLFxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiSVBcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFx0ZmllbGQ6IFwicG9ydFwiLFxyXG4gICAgICAgICAgICBcdGRpc3BsYXlOYW1lOiBcIuerr+WPo+WPt1wiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgXHRmaWVsZDogXCJ1c2VyXCIsXHJcbiAgICAgICAgICAgIFx0ZGlzcGxheU5hbWU6IFwi55So5oi35ZCNXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICBcdGZpZWxkOiBcInBhc3N3b3JkXCIsXHJcbiAgICAgICAgICAgIFx0ZGlzcGxheU5hbWU6IFwi5a+G56CBXCIgICAgICAgICAgICBcdFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFx0ZmllbGQ6IFwiZGF0YWJhc2VOYW1lXCIsXHJcbiAgICAgICAgICAgIFx0ZGlzcGxheU5hbWU6IFwi5pyN5Yqh5ZCNXCIgICAgICAgICAgICAgXHRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6IFwidGFibGVOYW1lXCIsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogXCLooajnqbrpl7TlkI1cIiAgXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiBcInN1ZmZpeFwiLFxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwi6KGo5ZCO57yAXCIgIFxyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgXHRmaWVsZDogXCJlbnRpdHlcIixcclxuICAgICAgICAgICAgXHRkaXNwbGF5TmFtZTogXCLmk43kvZxcIiwgIFxyXG4gICAgICAgICAgICBcdGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwidGFibGVFZGl0Lmh0bWxcIikgICAgICAgICAgIFx0XHJcbiAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogZmFsc2UsXHJcbiAgICAgICAgICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgc29ydEluZm86IHtcclxuICAgICAgICAgICAgICAgIHNvcnRCeTogXCJuYW1lXCIsXHJcbiAgICAgICAgICAgICAgICBhc2NlbmRpbmc6IHRydWVcclxuICAgICAgICAgICAgfSAgICAgICBcclxuICAgICAgICB9ICAgICAgIFxyXG5cclxuICAgICAgICBzaGFyZUluaXQoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyk7XHJcblxyXG4gICAgICAgICRzY29wZS5jcmVhdGUgPSAoKSA9PntcclxuICAgICAgICAgICAgJHNjb3BlLnN1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAkc2NvcGUuYWRkPSB0cnVlO1xyXG4gICAgICAgICAgICAkc2NvcGUuZWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAkc2NvcGUudGFibGVGb3JtID0ge307ICBcclxuICAgICAgICAgICAgJHNjb3BlLnRhYmxlRm9ybVtcImlkXCJdPTA7ICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJHNjb3BlLmNhbmNlbCAgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICRzY29wZS50YWJsZUZvcm0gPW51bGw7XHJcbiAgICAgICAgICAgICRzY29wZS5hZGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgJHNjb3BlLmVkaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgJHNjb3BlLnN1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJHNjb3BlLm9uU3VibWl0ID0gKG9yYWNsZSkgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoJHNjb3BlLnZhbGlkRm9ybS4kdmFsaWQgJiYgJHNjb3BlLnZhbGlkRm9ybS4kZGlydHkpe1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLmVkaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICRzY29wZS5hZGQgPSBmYWxzZTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBvcmFjbGVJbmZvT3BlcmF0ZSgkaHR0cCwgXCIvamF2YS9jb25zb2xlL2FwaS9vcmFjbGVcIiwgT3BlcmF0ZVR5cGUuVVBEQVRFLCBvcmFjbGUsIChyZXN1bHQsIHN0YXR1cykgPT4geyAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cz09PTIwMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC51cGRhdGVPcmFjbGVQYXJhbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIui1hOa6kOivt+axguWksei0pVwiOyAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7IFxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICRzY29wZS5zdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICBcclxuICAgICAgICB9IFxyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKFwiZWRpdFJvd1wiLCAoZXZlbnQsIGRhdGEpID0+eyBcclxuICAgICAgICAgICAgJHNjb3BlLnN1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAkc2NvcGUudGFibGVGb3JtID0gZGVlcENvcHkoZGF0YSk7ICAgICAgICAgIFxyXG4gICAgICAgICAgICAkc2NvcGUuZWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICRzY29wZS5hZGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8kc2NvcGUucm93SWQgPSBkYXRhLmlkXHJcbiAgICAgICAgICAgIC8vY3JlYXRlTmV3T2JlamN0KCRzY29wZS50YWJsZUNvbmZpZy5jb2x1bW5EZWZzLCBkYXRhKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvL3JlbW92ZUVsZW1lbnRzQnlWYWx1ZSgkc2NvcGUudGFibGVGb3JtLCBbe2tleTogXCJuYW1lXCIsIHZhbHVlOiBcIuW6j+WPt1wifSx7a2V5OiBcIm5hbWVcIiwgdmFsdWU6IFwi6L+e5o6l54q25oCBXCJ9LHtrZXk6IFwibmFtZVwiLCB2YWx1ZTogXCLmk43kvZxcIn1dKTsgICAgICAgICAgICBcclxuICAgICAgICB9KSA7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oXCJkZWxldGVSb3dcIiwgKGV2ZW50LCBkYXRhKSA9PnsgICBcclxuICAgICAgICAgICAgb3JhY2xlSW5mb09wZXJhdGUoJGh0dHAsIFwiL2phdmEvY29uc29sZS9hcGkvb3JhY2xlXCIsIE9wZXJhdGVUeXBlLkRFTEVURSwgZGF0YSwgKHJlc3VsdCwgc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihzdGF0dXM9PT0yMDApe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5YeG5aSH5pu05pawXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5tb2RlbC51cGRhdGVPcmFjbGVQYXJhbSgpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgXCLotYTmupDor7fmsYLlpLHotKVcIjsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy9yZW1vdmVFbGVtZW50QnlWYWx1ZSgkc2NvcGUubW9kZWwsIGRhdGEuX2lkLCBcIl9pZFwiKTtcclxuICAgICAgICB9KTtcclxuXHR9XSk7XHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCB2YXIgX21vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKHBsdWdpbk5hbWUsIFsnaGF3dGlvLWNvcmUnLCAnaGF3dGlvLXVpJywgJ3VpLmNvZGVtaXJyb3InLCAnbnZkMycsICd0cmVlQ29udHJvbCcsICduZ0RpYWxvZyddKTtcclxuICBleHBvcnQgdmFyIGNvbnRyb2xsZXIgPSBQbHVnaW5IZWxwZXJzLmNyZWF0ZUNvbnRyb2xsZXJGdW5jdGlvbihfbW9kdWxlLCBwbHVnaW5OYW1lKTtcclxuICBleHBvcnQgdmFyIHJvdXRlID0gUGx1Z2luSGVscGVycy5jcmVhdGVSb3V0aW5nRnVuY3Rpb24odGVtcGxhdGVQYXRoKTtcclxuXHJcbiAgX21vZHVsZS5jb25maWcoWyckcm91dGVQcm92aWRlcicsICgkcm91dGVQcm92aWRlcjpuZy5yb3V0ZS5JUm91dGVQcm92aWRlcikgPT4geyAgICAgICBcclxuICAgICRyb3V0ZVByb3ZpZGVyLndoZW4oY29udGV4dCwgcm91dGUoJ3dvcmtzcGFjZXMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAgICAgICAgICAgLndoZW4oXCIvZGF0YS1tYW5hZ2VyXCIsIHJvdXRlKCd3b3Jrc3BhY2VzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgICAgICAgICAgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnT3ZlcnZpZXcvOnR5cGUvZGF0YS10eXBlL2FsbCcpLCByb3V0ZSgnd29ya3NwYWNlcy5odG1sJywgZmFsc2UpKVxyXG4gICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ092ZXJ2aWV3Lzp0eXBlL2RhdGEtdHlwZS9maW5hbmNpYWwnKSwgcm91dGUoJ3dvcmtzcGFjZXMuaHRtbCcsIGZhbHNlKSlcclxuICAgICAgICAgICAgICAgICAgLndoZW4oVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdPdmVydmlldy86dHlwZS9kYXRhLXR5cGUvc29jaWFsLXNlY3VyaXR5JyksIHJvdXRlKCd3b3Jrc3BhY2VzLmh0bWwnLCBmYWxzZSkpXHJcbiAgICAgICAgICAgICAgICAgICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ092ZXJ2aWV3L3Rhc2snKSwgcm91dGUoJ2ZpbGVNaWdyYXRpb25UYXNrLmh0bWwnLCBmYWxzZSkpICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgLm90aGVyd2lzZShjb250ZXh0KTsgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gIH1dKTsgIFxyXG5cclxuICBfbW9kdWxlLnJ1bihbJ3ZpZXdSZWdpc3RyeScsICdTZXJ2aWNlUmVnaXN0cnknLCAnSGF3dGlvTmF2JywgJ0t1YmVybmV0ZXNNb2RlbCcsICckdGVtcGxhdGVDYWNoZScsICh2aWV3UmVnaXN0cnksIFNlcnZpY2VSZWdpc3RyeSwgSGF3dGlvTmF2LCBLdWJlcm5ldGVzTW9kZWwsICR0ZW1wbGF0ZUNhY2hlKSA9PiB7XHJcbiAgICBsb2cuZGVidWcoXCJSdW5uaW5nXCIpOyAgIFxyXG4gICAgdmlld1JlZ2lzdHJ5Wyd3b3Jrc3BhY2VzJ10gPSBLdWJlcm5ldGVzLnRlbXBsYXRlUGF0aCArICdsYXlvdXRLdWJlcm5ldGVzLmh0bWwnO1xyXG4gICAgdmlld1JlZ2lzdHJ5WyduYW1lc3BhY2VzJ10gPSBLdWJlcm5ldGVzLnRlbXBsYXRlUGF0aCArICdsYXlvdXRLdWJlcm5ldGVzLmh0bWwnO1xyXG4gICAvLyB2aWV3UmVnaXN0cnlbJ3dvcmtzcGFjZXMnXSA9IENvbmZpZ3MudGVtcGxhdGVQYXRoICsgJ3NoYXJlTGF5b3V0Lmh0bWwnO1xyXG5cclxuICAgIHZhciBidWlsZGVyID0gSGF3dGlvTmF2LmJ1aWxkZXIoKTtcclxuXHJcbiAgICB2YXIgZG1hbmFnZXJUYWIgPSBidWlsZGVyLmlkKCdkbWFuYWdlcicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAucmFuaygyMDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAuaHJlZigoKSA9PiBjb250ZXh0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLnRpdGxlKCgpID0+ICfmlbDmja7nrqHnkIYnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLy8uaXNWYWxpZCgoKSA9PiAhQ29yZS5pc1JlbW90ZUNvbm5lY3Rpb24oKSkgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcclxuXHJcbiAgICBIYXd0aW9OYXYuYWRkKGRtYW5hZ2VyVGFiKTtcclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZmlsdGVyKCdhc1RydXN0ZWRIdG1sJywgWyckc2NlJywgZnVuY3Rpb24gKCRzY2UpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGV4dCkge1xyXG4gICAgICByZXR1cm4gJHNjZS50cnVzdEFzSHRtbCh0ZXh0KTtcclxuICAgIH07XHJcbiAgfV0pO1xyXG5cclxuICBoYXd0aW9QbHVnaW5Mb2FkZXIuYWRkTW9kdWxlKHBsdWdpbk5hbWUpO1xyXG5cclxuICAvLyBmb3Igc2Nyb2xsLWdsdWUgZGlyZWN0aXZlXHJcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZSgnbHVlZ2cuZGlyZWN0aXZlcycpO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlclBsdWdpbi50c1wiLz5cclxubW9kdWxlIERldmVsb3BlcntcclxuXHRleHBvcnQgY2xhc3MgT3B0aW9uc1BhcmFtc3tcclxuXHRcdHB1YmxpYyBwYWdlclNpemVPcHRpb24gPSBbMjAsNTAsMTAwXTtcclxuXHRcdHB1YmxpYyBkYXRhVHlwZSA9bnVsbDtcclxuXHRcdHB1YmxpYyBjdXJyZW50VGFibGVTaXplID0gMjA7XHJcblx0XHRwdWJsaWMgZGF0YUJhdGNoID0gbnVsbDtcclxuXHRcdHB1YmxpYyBsYWJlbHMgPSB7fTtcclxuXHRcdHB1YmxpYyBjdXJyZW50UGFnZU51bSA9IDE7XHRcdFxyXG5cdFx0cHVibGljIHRvdGFsU2l6ZSA9IG51bGw7XHJcblx0XHRwdWJsaWMgcHJpb3JUYWJsZVNpemUgPSAyMDtcdFxyXG5cdFx0cHVibGljIGtleVF1ZXJ5ID0gbnVsbDtcclxuXHRcdHB1YmxpYyB2b2x1bWVUeXBlID0gMTtcdFxyXG5cclxuXHRcdHB1YmxpYyBjcmVhdGVQYXJhbURhdGEoKXtcclxuXHRcdFx0dmFyIGV4dGVuZFZhbHVlID1bXCJjaXR5TmFtZVwiLCBcImRpc3RyaWN0TmFtZVwiLCBcImRhdGFWZXJzaW9uXCIsIFwic3lzdGVtTmFtZVwiLCBcImRhdGFZZWFyXCJdO1xyXG5cdFx0XHR2YXIgcmVzdWx0PXtcclxuXHRcdFx0XHRjdXJyZW50UGFnZU51bTogdGhpcy5jdXJyZW50UGFnZU51bSxcclxuXHRcdFx0XHRkYXRhVHlwZTogdGhpcy5kYXRhVHlwZSxcclxuXHRcdFx0XHRzdWJtaXR0ZWRCYXRjaDogdGhpcy5kYXRhQmF0Y2gsXHJcblx0XHRcdFx0bGltaXQ6IHRoaXMuY3VycmVudFRhYmxlU2l6ZSxcclxuXHRcdFx0XHRwcmlvclRhYmxlU2l6ZTogdGhpcy5wcmlvclRhYmxlU2l6ZSxcclxuXHRcdFx0XHRrZXlRdWVyeTogdGhpcy5rZXlRdWVyeSxcclxuXHRcdFx0XHR2b2x1bWVUeXBlOiB0aGlzLnZvbHVtZVR5cGVcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0YW5ndWxhci5mb3JFYWNoKHRoaXMubGFiZWxzLCh2YWx1ZSwga2V5KSA9PntcclxuXHRcdFx0XHRpZihleHRlbmRWYWx1ZS5pbmRleE9mKGtleSkpXHJcblx0XHRcdFx0XHRyZXN1bHRba2V5XSA9IHZhbHVlO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0cHVibGljIGdldFBhZ2VTaXplTnVtKCl7XHRcdFx0XHJcblx0XHQgICAgdmFyIG51bSA9IE1hdGguY2VpbCh0aGlzLnRvdGFsU2l6ZS90aGlzLmN1cnJlbnRUYWJsZVNpemUpO1x0XHJcblx0XHQgICAgaWYobnVtIDwgdGhpcy5jdXJyZW50UGFnZU51bSlcdFx0ICAgIFx0XHJcblx0XHRcdCAgbnVtID0gIHRoaXMuY3VycmVudFBhZ2VOdW07XHRcdFx0XHJcblx0XHRcdHJldHVybiBudW07XHJcblx0XHR9XHJcblx0fVxyXG5cdGZ1bmN0aW9uIGNyZWF0ZUxhYmVsKGNpdHlOYW1lOnN0cmluZywgZGlzdHJpY3ROYW1lOnN0cmluZywgc3lzdGVtTmFtZTpzdHJpbmcsIHZlcnNpb246c3RyaW5nLCB5ZWFyOnN0cmluZyl7XHJcblx0XHRyZXR1cm57XHJcblx0XHRcdGNpdHlOYW1lOiBjaXR5TmFtZSxcclxuXHRcdFx0ZGlzdHJpY3ROYW1lOiBkaXN0cmljdE5hbWUsXHJcblx0XHRcdHN5c3RlbU5hbWU6IHN5c3RlbU5hbWUsXHJcblx0XHRcdHZlcnNpb246IFwi54mI5pysXCIrdmVyc2lvbixcclxuXHRcdFx0eWVhcjogeWVhclxyXG5cdFx0fVxyXG5cdH1cclxuXHRmdW5jdGlvbiBjcmVhdGVLZXkocmVnaW9uYWxpc21Db2RlLCBzeXN0ZW1JZCwgdmVyc2lvbil7XHJcblx0XHRyZXR1cm4gcmVnaW9uYWxpc21Db2RlICsgXCItXCIgKyBzeXN0ZW1JZCArIFwiLVwiICsgdmVyc2lvbjtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIHBvcHVsYXRlS2V5KGl0ZW0pe1xyXG5cdFx0dmFyIHJlc3VsdCA9IGl0ZW07XHJcblx0XHRyZXN1bHRbXCJfa2V5XCJdID0gY3JlYXRlS2V5KGl0ZW0ucmVnaW9uYWxpc21Db2RlLCAgaXRlbS5zeXN0ZW1Db2RlLCBpdGVtLmRhdGFWZXJzaW9uKTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBwb3B1bGF0ZUxhYmVsKGl0ZW0pe1xyXG5cdFx0dmFyIHJlc3VsdCA9IGl0ZW1cclxuXHRcdHJlc3VsdFtcImxhYmVsc1wiXSA9IGNyZWF0ZUxhYmVsKGl0ZW0uY2l0eU5hbWUsIGl0ZW0uZGlzdHJpY3ROYW1lLCBpdGVtLnN5c3RlbU5hbWUsIGl0ZW0uZGF0YVZlcnNpb24sIGl0ZW0ueWVhcik7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcG9wdWxhdGVMYWJlbHMoaXRlbXM6QXJyYXk8YW55Pil7XHJcblx0XHR2YXIgcmVzdWx0ID0gW107XHJcblx0XHRhbmd1bGFyLmZvckVhY2goaXRlbXMsIChpdGVtKSA9PiB7XHRcdFx0XHJcblx0XHRcdHJlc3VsdC5wdXNoKHBvcHVsYXRlTGFiZWwoaXRlbSkpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcG9wdWxhdGVLZXlzKGl0ZW1zOkFycmF5PGFueT4pe1xyXG5cdFx0dmFyIHJlc3VsdCA9W107XHJcblx0XHRhbmd1bGFyLmZvckVhY2goaXRlbXMsIChpdGVtKSA9PntcclxuXHRcdFx0cmVzdWx0LnB1c2gocG9wdWxhdGVLZXkoaXRlbSkpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY3JlYXRlTmFtZShjaXR5TmFtZSwgZGlzdHJpY3ROYW1lKXtcclxuXHRcdHJldHVybiBjaXR5TmFtZSArIFwiLVwiICsgZGlzdHJpY3ROYW1lO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcG9wdWxhdGVOYW1lKGl0ZW0pe1xyXG5cdFx0dmFyIHJlc3VsdCA9IGl0ZW07XHJcblx0XHRyZXN1bHRbXCJuYW1lXCJdID0gY3JlYXRlTmFtZShpdGVtLmNpdHlOYW1lLCBpdGVtLmRpc3RyaWN0TmFtZSk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcG9wdWxhdGVOYW1lcyhpdGVtczpBcnJheTxhbnk+KXtcclxuXHRcdHZhciByZXN1bHQgPSBbXTtcclxuXHRcdGFuZ3VsYXIuZm9yRWFjaChpdGVtcywgKGl0ZW0pID0+e1x0XHRcdFxyXG5cdFx0XHRyZXN1bHQucHVzaChwb3B1bGF0ZU5hbWUoaXRlbSkpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY3JlYXRlUGFyYW1EYXRhKG9wdGlvbnM6IE9wdGlvbnNQYXJhbXMpe1xyXG5cdFx0cmV0dXJuIG9wdGlvbnMuY3JlYXRlUGFyYW1EYXRhKCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBmb3JtYXRUYXNrKGl0ZW1zOkFycmF5PGFueT4pe1xyXG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xyXG5cdFx0YW5ndWxhci5mb3JFYWNoKGl0ZW1zLCAoaXRlbSkgPT4ge1xyXG5cdFx0XHRyZXN1bHQucHVzaCh7XHJcblx0XHRcdFx0aWQ6IGl0ZW0uaWQsXHJcblx0XHRcdFx0X2tleTogaXRlbS5yZWdpb25hbGlzbUNvZGUgKyBcIi1cIiArIGl0ZW0uc3lzdGVtQ29kZSArIFwiLVwiICsgaXRlbS5kYXRhVmVyc2lvbixcclxuXHRcdFx0XHRuYW1lOiBpdGVtLmNpdHlOYW1lKyBcIi1cIiArIGl0ZW0uZGlzdHJpY3ROYW1lLFxyXG5cdFx0XHRcdHN5c3RlbU5hbWU6IGl0ZW0uc3lzdGVtTmFtZSxcclxuXHRcdFx0XHRzdGF0dXM6IGl0ZW0uY29tcGxldGVTdGF0dXMsXHJcblx0XHRcdFx0cHJvY2VzczogaXRlbS5yYXRlLFxyXG5cdFx0XHRcdGZyb206IGl0ZW0uZGF0YVBhdGgsXHJcblx0XHRcdFx0dG86IGl0ZW0uZHN0UGF0aCxcclxuXHRcdFx0XHRsYWJlbHM6e1xyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IGl0ZW0uZGF0YVR5cGUsXHJcblx0XHRcdFx0XHRiYXRjaDogXCLmibnmrKFcIitpdGVtLnN1Ym1pdHRlZEJhdGNoLFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdGRhdGFWZXJzaW9uOiBcIueJiOacrFwiK2l0ZW0uZGF0YVZlcnNpb24sXHJcblx0XHRcdFx0XHRkYXRhWWVhcjogaXRlbS55ZWFyXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBjbGFzcyBEYXRhTW9kZWxTZXJ2aWNle1xyXG5cdFx0cHVibGljIGRhdGE6QXJyYXk8YW55PiA9IFtdO1xyXG5cdFx0cHVibGljIHBhcmFtT3B0aW9uczogT3B0aW9uc1BhcmFtcyA9IG5ldyBPcHRpb25zUGFyYW1zKCk7XHJcblx0XHRwdWJsaWMgdHJhbnNmZXJUYXNrczogQXJyYXk8YW55PiA9IFtdO1xyXG5cclxuXHRcdGNvbnN0cnVjdG9yKCl7XHRcdFx0XHRcclxuXHRcdFx0dGhpcy51cGRhdGVNb2RlbCgpO1x0XHRcdFx0XHRcdFx0XHJcblx0XHR9XHJcblxyXG5cdFx0Ly/mm7TmlrDmlbDmja7mqKHlnotcclxuXHRcdHByb3RlY3RlZCBnZXREYXRhTW9kZWwocGFyYW1PcHRpb25zKXtcdFx0XHRcclxuXHRcdFx0dmFyIHJlc3VsdCA7XHJcblx0XHRcdCQuYWpheCh7IFxyXG5cdFx0XHRcdGFzeW5jOiBmYWxzZSwgXHJcblx0XHRcdFx0dHlwZSA6IFwiUE9TVFwiLFxyXG5cdFx0XHRcdHVybCA6IFwiL2phdmEvY29uc29sZS9hcGkvZGF0YS5qc29uXCIsIFxyXG5cdFx0XHRcdGRhdGFUeXBlIDogJ2pzb24nLFxyXG5cdFx0XHRcdGRhdGE6IGNyZWF0ZVBhcmFtRGF0YShwYXJhbU9wdGlvbnMpLFx0XHRcclxuXHRcdFx0XHRzdWNjZXNzIDogZnVuY3Rpb24oZGF0YSkge1x0XHRcdFx0XHJcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhLmRhdGE7XHJcblx0XHRcdFx0XHRwYXJhbU9wdGlvbnMudG90YWxTaXplPWRhdGEubGVuZ3RoO1x0XHRcdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdH0gXHJcblx0XHRcdH0pO1x0XHRcdFxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1x0XHJcblx0XHR9XHJcblxyXG5cdFx0cHVibGljIGluaXRQYXJhbU9wdGlvbnMoKXtcclxuXHRcdFx0dGhpcy5wYXJhbU9wdGlvbnMgPSBuZXcgT3B0aW9uc1BhcmFtcygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHB1YmxpYyB1cGRhdGVNb2RlbCgpe1xyXG5cdFx0XHR0aGlzLmRhdGEgPSB0aGlzLmdldERhdGFNb2RlbCh0aGlzLnBhcmFtT3B0aW9ucyk7XHJcblx0XHRcdHRoaXMubWF5YmVGb3JtYXQoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvL+agvOW8j+aVsOaNruaooeWei+S4reeahOavj+S4quWNleadoeiusOW9lVxyXG5cdFx0cHVibGljIG1heWJlRm9ybWF0KCl7XHJcblx0XHRcdHRoaXMuZGF0YSA9IHBvcHVsYXRlS2V5cyh0aGlzLmRhdGEpO1xyXG5cdFx0XHR0aGlzLmRhdGEgPSBwb3B1bGF0ZU5hbWVzKHRoaXMuZGF0YSk7XHJcblx0XHRcdHRoaXMuZGF0YSAgPSBwb3B1bGF0ZUxhYmVscyh0aGlzLmRhdGEpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8v5pu05paw55So5oi36YCJ5oup5Y+C5pWwXHJcblx0XHRwdWJsaWMgdXBkYXRlUGFyYW1PcHRpb24ob3B0aW9uOnN0cmluZywgdmFsdWU6YW55KXtcclxuXHRcdFx0dGhpcy5wYXJhbU9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlO1xyXG5cdFx0fVx0XHJcblxyXG5cdFx0Ly/moLnmja5rZXnojrflj5bnlKjmiLfpgInmi6nlj4LmlbBcclxuXHRcdHB1YmxpYyBnZXRQYXJhbU9wdGlvbihrZXk6c3RyaW5nKXtcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyYW1PcHRpb25zW2tleV07XHJcblx0XHR9XHJcblxyXG5cdFx0cHVibGljIHN0YXJ0SW50ZXJ2YWxUYXNrKCRpbnRlcnZhbCwgJGh0dHApe1xyXG5cdFx0XHR2YXIgcmVzdWx0O1xyXG5cdFx0XHR2YXIgdGltZXIgPSAkaW50ZXJ2YWwoKCkgPT4ge1x0IFx0XHRcdFxyXG5cdFx0IFx0XHQkLmFqYXgoe1xyXG5cdFx0XHRcdFx0YXN5bmM6IGZhbHNlLFxyXG5cdFx0XHRcdFx0dHlwZSA6IFwiUE9TVFwiLFxyXG5cdFx0XHRcdFx0dXJsIDogXCIvamF2YS9jb25zb2xlL2FwaS90YXNrL3RyYW5zZmVyL2xpc3RcIixcclxuXHRcdFx0XHRcdHN1Y2Nlc3MgOiBmdW5jdGlvbihkYXRhKSB7IFxyXG5cdFx0XHRcdFx0ICAgIGlmKGRhdGEpe1x0XHRcdFxyXG5cdFx0XHRcdFx0XHQgICAgcmVzdWx0ID0gZGF0YTtcdFx0XHRcdFx0XHQgICBcdFx0XHRcdCAgIFxyXG5cdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHR9IFx0XHJcblx0XHRcdFx0fSk7XHRcdFx0XHRcclxuXHRcdFx0XHR0aGlzLnRyYW5zZmVyVGFza3MgPSBmb3JtYXRUYXNrKHJlc3VsdCk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxyXG4gXHRcdCAgICB9LDE1MDApO1xyXG5cclxuIFx0XHQgICAgdGltZXIudGhlbigoKSA9PntcclxuIFx0XHQgICAgXHRjb25zb2xlLmxvZyhcIkRvbmUhXCIpO1xyXG4gXHRcdCAgICB9LCAoKSA9PntcclxuIFx0XHQgICAgXHRjb25zb2xlLmxvZyhcImVycm9yXCIpO1xyXG4gXHRcdCAgICB9LCAoKSA9PnsgXHRcdCAgICBcdFxyXG4gXHRcdCAgICBcdGNvbnNvbGUubG9nKFwi5q+P5qyh6YO95pu05pawXCIpOyBcdFx0ICAgIFx0XHJcbiBcdFx0ICAgIH0pO1xyXG5cdFx0fVx0XHJcblx0fVxyXG5cclxuXHQvL+WIm+W7uuaVsOaNruaooeWei+acjeWKoVxyXG4gXHRfbW9kdWxlLmZhY3RvcnkoXCJEYXRhTW9kZWxcIiwgWyckcm9vdFNjb3BlJywgJyRodHRwJywgJyRpbnRlcnZhbCcsICckbG9jYXRpb24nLCAnJHJlc291cmNlJywgKCRyb290U2NvcGUsICRodHRwLCAkaW50ZXJ2YWwsICRsb2NhdGlvbiwgJHJlc291cmNlKSA9PiB7XHJcbiBcdFx0dmFyICRzY29wZSA9IG5ldyBEYXRhTW9kZWxTZXJ2aWNlKCk7ICBcclxuIFx0XHQkc2NvcGUuc3RhcnRJbnRlcnZhbFRhc2soJGludGVydmFsLCAkaHR0cCk7IFx0XHRcclxuIFx0ICAgIHJldHVybiAkc2NvcGU7XHJcbiBcdH1dKTtcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hXb3Jrc3BhY2VzKHByb2plY3RzKSB7XHJcbiAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdHMsIChwcm9qZWN0KSA9PiB7XHJcbiAgICAgIGVucmljaFdvcmtzcGFjZShwcm9qZWN0KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb2plY3RzO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaFdvcmtzcGFjZShidWlsZCkge1xyXG4gICAgaWYgKGJ1aWxkKSB7XHJcbiAgICAgIHZhciBuYW1lID0gS3ViZXJuZXRlcy5nZXROYW1lKGJ1aWxkKTtcclxuICAgICAgYnVpbGQuJG5hbWUgPSBuYW1lO1xyXG4gICAgICBidWlsZC4kc29ydE9yZGVyID0gMCAtIGJ1aWxkLm51bWJlcjtcclxuXHJcbiAgICAgIHZhciBuYW1lQXJyYXkgPSBuYW1lLnNwbGl0KFwiLVwiKTtcclxuICAgICAgdmFyIG5hbWVBcnJheUxlbmd0aCA9IG5hbWVBcnJheS5sZW5ndGg7XHJcbiAgICAgIGJ1aWxkLiRzaG9ydE5hbWUgPSAobmFtZUFycmF5TGVuZ3RoID4gNCkgPyBuYW1lQXJyYXkuc2xpY2UoMCwgbmFtZUFycmF5TGVuZ3RoIC0gNCkuam9pbihcIi1cIikgOiBuYW1lLnN1YnN0cmluZygwLCAzMCk7XHJcblxyXG4gICAgICB2YXIgbGFiZWxzID0gS3ViZXJuZXRlcy5nZXRMYWJlbHMoYnVpbGQpO1xyXG4gICAgICBidWlsZC4kY3JlYXRpb25EYXRlID0gYXNEYXRlKEt1YmVybmV0ZXMuZ2V0Q3JlYXRpb25UaW1lc3RhbXAoYnVpbGQpKTtcclxuICAgICAgYnVpbGQuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGxhYmVscyk7XHJcblxyXG4gICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgIGJ1aWxkLiRwcm9qZWN0c0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJ3b3Jrc3BhY2VzXCIsIG5hbWUpO1xyXG4gICAgICAgIGJ1aWxkLiRydW50aW1lTGluayA9IFVybEhlbHBlcnMuam9pbihcImt1YmVybmV0ZXMvbmFtZXNwYWNlL1wiLCBuYW1lLCBcIi9hcHBzXCIpO1xyXG4gICAgICAgIGJ1aWxkLiR2aWV3TGluayA9IGJ1aWxkLiRwcm9qZWN0c0xpbms7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBidWlsZDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBhc0RhdGUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSmVua2luc0pvYnMoam9ic0RhdGEsIHByb2plY3RJZCwgam9iTmFtZSkge1xyXG4gICAgaWYgKGpvYnNEYXRhKSB7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChqb2JzRGF0YS5qb2JzLCAoam9iKSA9PiB7XHJcbiAgICAgICAgZW5yaWNoSmVua2luc0pvYihqb2IsIHByb2plY3RJZCwgam9iTmFtZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGpvYnNEYXRhO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEplbmtpbnNKb2Ioam9iLCBwcm9qZWN0SWQsIGpvYk5hbWUpIHtcclxuICAgIGlmIChqb2IpIHtcclxuICAgICAgam9iTmFtZSA9IGpvYk5hbWUgfHwgam9iLm5hbWUgfHwgcHJvamVjdElkO1xyXG4gICAgICBqb2IuJGpvYklkID0gam9iTmFtZTtcclxuICAgICAgam9iLiRwcm9qZWN0ID0gcHJvamVjdElkIHx8IGpvYk5hbWU7XHJcbiAgICAgIHZhciBsYXN0QnVpbGQgPSBqb2IubGFzdEJ1aWxkO1xyXG4gICAgICB2YXIgbGFzdEJ1aWxkUmVzdWx0ID0gbGFzdEJ1aWxkID8gbGFzdEJ1aWxkLnJlc3VsdCA6IFwiTk9UX1NUQVJURURcIjtcclxuICAgICAgdmFyICRpY29uQ2xhc3MgPSBjcmVhdGVCdWlsZFN0YXR1c0ljb25DbGFzcyhsYXN0QnVpbGRSZXN1bHQpO1xyXG5cclxuICAgICAgam9iLiRsYXN0QnVpbGROdW1iZXIgPSBlbnJpY2hKZW5raW5zQnVpbGQoam9iLCBsYXN0QnVpbGQpO1xyXG4gICAgICBqb2IuJGxhc3RTdWNjZXNzZnVsQnVpbGROdW1iZXIgPSBlbnJpY2hKZW5raW5zQnVpbGQoam9iLCBqb2IubGFzdFN1Y2Nlc3NmdWxCdWlsZCk7XHJcbiAgICAgIGpvYi4kbGFzdEZhaWxlZGxCdWlsZE51bWJlciA9IGVucmljaEplbmtpbnNCdWlsZChqb2IsIGpvYi5sYXN0RmFpbGVkbEJ1aWxkKTtcclxuXHJcbiAgICAgIGlmIChsYXN0QnVpbGQpIHtcclxuICAgICAgICBqb2IuJGR1cmF0aW9uID0gbGFzdEJ1aWxkLmR1cmF0aW9uO1xyXG4gICAgICAgIGpvYi4kdGltZXN0YW1wID0gYXNEYXRlKGxhc3RCdWlsZC50aW1lc3RhbXApO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBqb2JVcmwgPSAoam9iIHx8IHt9KS51cmw7XHJcbiAgICAgIGlmICgham9iVXJsIHx8ICFqb2JVcmwuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcclxuICAgICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XHJcbiAgICAgICAgaWYgKGplbmtpbnNVcmwpIHtcclxuICAgICAgICAgIGpvYlVybCA9IFVybEhlbHBlcnMuam9pbihqZW5raW5zVXJsLCBcImpvYlwiLCBqb2JOYW1lKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoam9iVXJsKSB7XHJcbiAgICAgICAgam9iLiRqb2JMaW5rID0gam9iVXJsO1xyXG4gICAgICAgIHZhciB3b3Jrc3BhY2VOYW1lID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgICAgIGpvYi4kcGlwZWxpbmVzTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgam9iLiRwcm9qZWN0LCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSwgXCJwaXBlbGluZXNcIik7XHJcbiAgICAgICAgam9iLiRidWlsZHNMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBqb2IuJHByb2plY3QsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lKTtcclxuICAgICAgfVxyXG4gICAgICBqb2IuJGljb25DbGFzcyA9ICRpY29uQ2xhc3M7XHJcblxyXG4gICAgICBhbmd1bGFyLmZvckVhY2goam9iLmJ1aWxkcywgKGJ1aWxkKSA9PiB7XHJcbiAgICAgICAgZW5yaWNoSmVua2luc0J1aWxkKGpvYiwgYnVpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBqb2I7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MocmVzdWx0KSB7XHJcbiAgICB2YXIgJGljb25DbGFzcyA9IFwiZmEgZmEtc3Bpbm5lciBmYS1zcGluXCI7XHJcbiAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiRkFJTFVSRVwiIHx8IHJlc3VsdCA9PT0gXCJGQUlMRURcIikge1xyXG4gICAgICAgIC8vIFRPRE8gbm90IGF2YWlsYWJsZSB5ZXRcclxuICAgICAgICAkaWNvbkNsYXNzID0gXCJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUgcmVkXCI7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIkFCT1JURURcIiB8fCByZXN1bHQgPT09IFwiSU5URVJVUFRFRFwiKSB7XHJcbiAgICAgICAgJGljb25DbGFzcyA9IFwiZmEgZmEtY2lyY2xlIGdyZXlcIjtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiU1VDQ0VTU1wiIHx8IHJlc3VsdCA9PT0gXCJDT01QTEVURVwiIHx8IHJlc3VsdCA9PT0gXCJDT01QTEVURURcIikge1xyXG4gICAgICAgICRpY29uQ2xhc3MgPSBcImZhIGZhLWNoZWNrLWNpcmNsZSBncmVlblwiO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJOT1RfU1RBUlRFRFwiKSB7XHJcbiAgICAgICAgJGljb25DbGFzcyA9IFwiZmEgZmEtY2lyY2xlLXRoaW4gZ3JleVwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJGljb25DbGFzcztcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCdWlsZFN0YXR1c0JhY2tncm91bmRDbGFzcyhyZXN1bHQpIHtcclxuICAgIHZhciAkaWNvbkNsYXNzID0gXCJidWlsZC1wZW5kaW5nXCI7XHJcbiAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiRkFJTFVSRVwiIHx8IHJlc3VsdCA9PT0gXCJGQUlMRURcIikge1xyXG4gICAgICAgICRpY29uQ2xhc3MgPSBcImJ1aWxkLWZhaWxcIjtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiQUJPUlRFRFwiIHx8IHJlc3VsdCA9PT0gXCJJTlRFUlVQVEVEXCIpIHtcclxuICAgICAgICAkaWNvbkNsYXNzID0gXCJidWlsZC1hYm9ydGVkXCI7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIlNVQ0NFU1NcIiB8fCByZXN1bHQgPT09IFwiQ09NUExFVEVcIiB8fCByZXN1bHQgPT09IFwiQ09NUExFVEVEXCIpIHtcclxuICAgICAgICAkaWNvbkNsYXNzID0gXCJidWlsZC1zdWNjZXNzXCI7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIk5PVF9TVEFSVEVEXCIpIHtcclxuICAgICAgICAkaWNvbkNsYXNzID0gXCJidWlsZC1ub3Qtc3RhcnRlZFwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJGljb25DbGFzcztcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hKZW5raW5zQnVpbGQoam9iLCBidWlsZCkge1xyXG4gICAgdmFyIG51bWJlciA9IG51bGw7XHJcbiAgICBpZiAoYnVpbGQpIHtcclxuICAgICAgYnVpbGQuJGR1cmF0aW9uID0gYnVpbGQuZHVyYXRpb247XHJcbiAgICAgIGJ1aWxkLiR0aW1lc3RhbXAgPSBhc0RhdGUoYnVpbGQudGltZXN0YW1wKTtcclxuICAgICAgdmFyIHByb2plY3RJZCA9IGpvYi4kcHJvamVjdDtcclxuICAgICAgdmFyIGpvYk5hbWUgPSBqb2IuJGpvYklkIHx8IHByb2plY3RJZDtcclxuICAgICAgdmFyIGJ1aWxkSWQgPSBidWlsZC5pZDtcclxuICAgICAgbnVtYmVyID0gYnVpbGQubnVtYmVyO1xyXG4gICAgICB2YXIgd29ya3NwYWNlTmFtZSA9IEt1YmVybmV0ZXMuY3VycmVudEt1YmVybmV0ZXNOYW1lc3BhY2UoKTtcclxuXHJcbiAgICAgIHZhciAkaWNvbkNsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MoYnVpbGQucmVzdWx0KTtcclxuICAgICAgdmFyIGpvYlVybCA9IChqb2IgfHwge30pLnVybDtcclxuICAgICAgaWYgKCFqb2JVcmwgfHwgIWpvYlVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xyXG4gICAgICAgIHZhciBqZW5raW5zVXJsID0gamVua2luc0xpbmsoKTtcclxuICAgICAgICBpZiAoamVua2luc1VybCkge1xyXG4gICAgICAgICAgam9iVXJsID0gVXJsSGVscGVycy5qb2luKGplbmtpbnNVcmwsIFwiam9iXCIsIGpvYk5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChqb2JVcmwpIHtcclxuICAgICAgICBidWlsZC4kam9iTGluayA9IGpvYlVybDtcclxuICAgICAgICBpZiAoYnVpbGRJZCkge1xyXG4gICAgICAgICAgLy9idWlsZC4kbG9nc0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oYnVpbGQuJGJ1aWxkTGluaywgXCJjb25zb2xlXCIpO1xyXG4gICAgICAgICAgYnVpbGQuJGxvZ3NMaW5rID0gVXJsSGVscGVycy5qb2luKFwiL3dvcmtzcGFjZXNcIiwgd29ya3NwYWNlTmFtZSwgXCJwcm9qZWN0c1wiLCBwcm9qZWN0SWQsIFwiamVua2luc0pvYlwiLCBqb2JOYW1lLCBcImxvZ1wiLCBidWlsZElkKTtcclxuICAgICAgICAgIGJ1aWxkLiRwaXBlbGluZUxpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3RJZCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUsIFwicGlwZWxpbmVcIiwgYnVpbGRJZCk7XHJcbiAgICAgICAgICBidWlsZC4kYnVpbGRzTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdElkLCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSk7XHJcbiAgICAgICAgICAvL2J1aWxkLiRidWlsZExpbmsgPSBVcmxIZWxwZXJzLmpvaW4oam9iVXJsLCBidWlsZC5pZCk7XHJcbiAgICAgICAgICBidWlsZC4kYnVpbGRMaW5rID0gYnVpbGQuJGxvZ3NMaW5rO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBidWlsZC4kaWNvbkNsYXNzID0gJGljb25DbGFzcztcclxuICAgIH1cclxuICAgIHJldHVybiBudW1iZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGplbmtpbnNMaW5rKCkge1xyXG4gICAgdmFyIFNlcnZpY2VSZWdpc3RyeSA9IEt1YmVybmV0ZXMuaW5qZWN0PGFueT4oXCJTZXJ2aWNlUmVnaXN0cnlcIik7XHJcbiAgICBpZiAoU2VydmljZVJlZ2lzdHJ5KSB7XHJcbiAgICAgIHJldHVybiBTZXJ2aWNlUmVnaXN0cnkuc2VydmljZUxpbmsoamVua2luc1NlcnZpY2VOYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGZvcmdlUmVhZHlMaW5rKCkge1xyXG4gICAgdmFyIFNlcnZpY2VSZWdpc3RyeSA9IEt1YmVybmV0ZXMuaW5qZWN0PGFueT4oXCJTZXJ2aWNlUmVnaXN0cnlcIik7XHJcbiAgICBpZiAoU2VydmljZVJlZ2lzdHJ5KSB7XHJcbiAgICAgIHJldHVybiBTZXJ2aWNlUmVnaXN0cnkuc2VydmljZVJlYWR5TGluayhLdWJlcm5ldGVzLmZhYnJpYzhGb3JnZVNlcnZpY2VOYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGVucmljaEplbmtpbnNQaXBlbGluZUpvYihqb2IsIHByb2plY3RJZCwgam9iSWQpIHtcclxuICAgIGlmIChqb2IpIHtcclxuICAgICAgam9iLiRwcm9qZWN0ID0gcHJvamVjdElkO1xyXG4gICAgICBqb2IuJGpvYklkID0gam9iSWQ7XHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChqb2IuYnVpbGRzLCAoYnVpbGQpID0+IHtcclxuICAgICAgICBlbnJpY2hKZW5raW5zU3RhZ2VzKGJ1aWxkLCBwcm9qZWN0SWQsIGpvYklkKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gZW5yaWNoSmVua2luc1N0YWdlcyhidWlsZCwgcHJvamVjdElkLCBqb2JOYW1lKSB7XHJcbiAgICBpZiAoYnVpbGQpIHtcclxuICAgICAgYnVpbGQuJHByb2plY3QgPSBwcm9qZWN0SWQ7XHJcbiAgICAgIGJ1aWxkLiRqb2JJZCA9IGpvYk5hbWU7XHJcbiAgICAgIGJ1aWxkLiR0aW1lc3RhbXAgPSBhc0RhdGUoYnVpbGQudGltZUluTWlsbGlzKTtcclxuICAgICAgYnVpbGQuJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKGJ1aWxkLnJlc3VsdCB8fCBcIk5PVF9TVEFSVEVEXCIpO1xyXG5cclxuICAgICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICAgIHZhciBwYXJhbWV0ZXJzID0gYnVpbGQucGFyYW1ldGVycztcclxuICAgICAgdmFyICRwYXJhbWV0ZXJDb3VudCA9IDA7XHJcbiAgICAgIHZhciAkcGFyYW1ldGVyVGV4dCA9IFwiTm8gcGFyYW1ldGVyc1wiO1xyXG4gICAgICBpZiAocGFyYW1ldGVycykge1xyXG4gICAgICAgICRwYXJhbWV0ZXJDb3VudCA9IF8ua2V5cyhwYXJhbWV0ZXJzKS5sZW5ndGggfHwgMDtcclxuICAgICAgICAkcGFyYW1ldGVyVGV4dCA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcocGFyYW1ldGVycywgXCIgXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGJ1aWxkLiRwYXJhbWV0ZXJDb3VudCA9ICRwYXJhbWV0ZXJDb3VudDtcclxuICAgICAgYnVpbGQuJHBhcmFtZXRlclRleHQgPSAkcGFyYW1ldGVyVGV4dDtcclxuICAgICAgdmFyIGplbmtpbnNVcmwgPSBqZW5raW5zTGluaygpO1xyXG4gICAgICBpZiAoamVua2luc1VybCkge1xyXG4gICAgICAgIHZhciB1cmwgPSBidWlsZC51cmw7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4vKlxyXG4gICAgICAgICAgYnVpbGQuJHZpZXdMaW5rID0gVXJsSGVscGVycy5qb2luKGplbmtpbnNVcmwsIHVybCk7XHJcbiAgICAgICAgICBidWlsZC4kbG9nTGluayA9IFVybEhlbHBlcnMuam9pbihidWlsZC4kdmlld0xpbmssIFwibG9nXCIpO1xyXG4qL1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBidWlsZC4kbG9nTGluayA9IFVybEhlbHBlcnMuam9pbihcIi93b3Jrc3BhY2VzXCIsIHdvcmtzcGFjZU5hbWUsIFwicHJvamVjdHNcIiwgcHJvamVjdElkLCBcImplbmtpbnNKb2JcIiwgam9iTmFtZSwgXCJsb2dcIiwgYnVpbGQuaWQpO1xyXG4gICAgICBidWlsZC4kdmlld0xpbmsgPSBidWlsZC4kbG9nTGluaztcclxuXHJcbiAgICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZC5zdGFnZXMsIChzdGFnZSkgPT4ge1xyXG4gICAgICAgIGVucmljaEplbmtpbnNTdGFnZShzdGFnZSwgYnVpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBidWlsZDtcclxuICB9XHJcblxyXG4gIGV4cG9ydCBmdW5jdGlvbiBlbnJpY2hKZW5raW5zU3RhZ2Uoc3RhZ2UsIGJ1aWxkID0gbnVsbCkge1xyXG4gICAgaWYgKHN0YWdlKSB7XHJcbiAgICAgIGlmIChidWlsZCkge1xyXG4gICAgICAgIHN0YWdlLiRidWlsZElkID0gYnVpbGQuaWQ7XHJcbiAgICAgICAgc3RhZ2UuJHByb2plY3QgPSBidWlsZC4kcHJvamVjdDtcclxuICAgICAgfVxyXG4gICAgICB2YXIgcHJvamVjdElkID0gYnVpbGQuJHByb2plY3Q7XHJcbiAgICAgIHZhciBqb2JOYW1lID0gYnVpbGQuJGpvYklkIHx8IHByb2plY3RJZDtcclxuICAgICAgdmFyIGJ1aWxkSWQgPSBidWlsZC5pZDtcclxuICAgICAgdmFyIHdvcmtzcGFjZU5hbWUgPSBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCk7XHJcbiAgICAgIHN0YWdlLiRiYWNrZ3JvdW5kQ2xhc3MgPSAgY3JlYXRlQnVpbGRTdGF0dXNCYWNrZ3JvdW5kQ2xhc3Moc3RhZ2Uuc3RhdHVzKTtcclxuICAgICAgc3RhZ2UuJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKHN0YWdlLnN0YXR1cyk7XHJcbiAgICAgIHN0YWdlLiRzdGFydFRpbWUgPSBhc0RhdGUoc3RhZ2Uuc3RhcnRUaW1lKTtcclxuICAgICAgaWYgKCFzdGFnZS5kdXJhdGlvbikge1xyXG4gICAgICAgIHN0YWdlLmR1cmF0aW9uID0gMDtcclxuICAgICAgfVxyXG4gICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XHJcbiAgICAgIGlmIChqZW5raW5zVXJsKSB7XHJcbiAgICAgICAgdmFyIHVybCA9IHN0YWdlLnVybDtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICBzdGFnZS4kdmlld0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oamVua2luc1VybCwgdXJsKTtcclxuICAgICAgICAgIHN0YWdlLiRsb2dMaW5rID0gVXJsSGVscGVycy5qb2luKHN0YWdlLiR2aWV3TGluaywgXCJsb2dcIik7XHJcbiAgICAgICAgICBpZiAocHJvamVjdElkICYmIGJ1aWxkSWQpIHtcclxuICAgICAgICAgICAgc3RhZ2UuJGxvZ0xpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCB3b3Jrc3BhY2VOYW1lLCBcInByb2plY3RzXCIsIHByb2plY3RJZCwgXCJqZW5raW5zSm9iXCIsIGpvYk5hbWUsIFwibG9nXCIsIGJ1aWxkSWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcbiAgX21vZHVsZS5jb250cm9sbGVyKCdEZXZlbG9wZXIuRW52aXJvbm1lbnRQYW5lbENvbnRyb2xsZXInLCAoJHNjb3BlLCAkZWxlbWVudCwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmVudlZlcnNpb25zID0ge307XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUuZW52ID0gJHNjb3BlLiRldmFsKCdlbnYnKTtcclxuICAgICRzY29wZS5idWlsZENvbmZpZyA9ICRzY29wZS4kZXZhbCgnZW50aXR5Jyk7XHJcblxyXG4gICAgJHNjb3BlLm9wZW4gPSB0cnVlO1xyXG5cclxuICAgICRzY29wZS50b2dnbGUgPSAoKSA9PiAkc2NvcGUub3BlbiA9ICEkc2NvcGUub3BlbjtcclxuXHJcbiAgICB2YXIgY2FjaGVzID0ge307XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgIGxvYWRQcm9qZWN0VmVyc2lvbnMoJHNjb3BlLCAkZWxlbWVudCwgJHNjb3BlLmJ1aWxkQ29uZmlnLCAkc2NvcGUuZW52LCAkc2NvcGUuZW52Lm5hbWVzcGFjZSwgJHNjb3BlLmVudlZlcnNpb25zLCBjYWNoZXMpO1xyXG5cclxuICB9KTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkYXRhTWFuYWdlck1vZGVsLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGF0YU1hbmFnZXJIZWxwZXIudHNcIi8+XHJcbi8vLyAgPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9Db25maWdzSGVscGVyLnRzXCIvPlxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHRleHBvcnQgdmFyIEt1YmVUYXNrQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJLdWJlVGFza0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiJGh0dHBcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCJEYXRhTW9kZWxcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCAoJHNjb3BlLCAkaHR0cCwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMsIERhdGFNb2RlbCwgJHRlbXBsYXRlQ2FjaGUpID0+IHtcclxuXHRcdCRzY29wZS5tb2RlbCA9IERhdGFNb2RlbDtcdFxyXG4gICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlQ3VycmVudFN1Yk5hdkJhcigkc2NvcGUsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zKTsgXHRcdFxyXG5cclxuXHRcdCRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuXHRcdCAgXHRkYXRhOiAnbW9kZWwudHJhbnNmZXJUYXNrcycsICAgICBcclxuXHRcdFx0c2hvd1NlbGVjdGlvbkNoZWNrYm94OiBmYWxzZSxcclxuXHRcdFx0ZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG5cdFx0XHRtdWx0aVNlbGVjdDogdHJ1ZSwgICAgIFxyXG5cdFx0XHRzZWxlY3RlZEl0ZW1zOiBbXSwgICAgIFxyXG5cdFx0XHRmaWx0ZXJPcHRpb25zOiB7XHJcblx0XHRcdGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuXHRcdFx0fSxcclxuXHRcdCBcdGNvbHVtbkRlZnM6IFt7XHJcblx0XHQgICAgICBcdGZpZWxkOiBcIl9rZXlcIixcclxuXHRcdCAgICAgIFx0ZGlzcGxheU5hbWU6ICfnvJbnoIEnLFxyXG5cdFx0ICAgICAgXHRjdXN0b21Tb3J0RmllbGQ6IChmaWVsZCkgPT57XHJcblx0XHQgICAgICAgIFx0cmV0dXJuIGZpZWxkLmlkOyAgICAgICAgICAgXHJcblx0XHQgICAgICBcdH0gICAgICAgICBcclxuXHRcdCAgICB9LFxyXG5cdFx0ICAgIHtcclxuXHRcdCAgICAgIFx0ZmllbGQ6IFwibmFtZVwiLFxyXG5cdFx0ICAgICAgXHRkaXNwbGF5TmFtZTogJ+W4gi3ljLov5Y6/JyAgICAgICBcclxuXHRcdCAgICB9LFxyXG5cdFx0ICAgIHsgXHJcblx0XHQgICAgICBcdGZpZWxkOiBcInN5c3RlbU5hbWVcIixcclxuXHRcdCAgICAgIFx0ZGlzcGxheU5hbWU6ICfns7vnu5/lkI3np7AnICAgICAgICAgXHJcblx0XHQgICAgfSxcclxuXHRcdCAgICB7XHJcblx0XHQgICAgICBcdGZpZWxkOiBcImxhYmVsc1wiLFxyXG5cdFx0ICAgICAgXHRkaXNwbGF5TmFtZTogJ+aVsOaNruagh+etvicsXHJcblx0XHQgICAgICBcdGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZGF0YUxhYmVsc1RlbXBsYXRlLmh0bWxcIikgICAgICBcclxuXHRcdCAgICB9LCBcclxuXHRcdCAgICB7XHJcblx0XHQgICAgXHRmaWVsZDogXCJmcm9tXCIsXHJcblx0XHQgICAgICBcdGRpc3BsYXlOYW1lOiAn5rqQ6ZuG576kJyxcdFx0ICAgICAgXHRcclxuXHRcdCAgICB9LFxyXG5cdFx0ICAgIHtcclxuXHRcdCAgICBcdGZpZWxkOiBcInRvXCIsXHJcblx0XHQgICAgICBcdGRpc3BsYXlOYW1lOiAn55uu55qE6ZuG576kJyxcdFx0ICAgICAgXHRcclxuXHRcdCAgICB9LFxyXG5cdFx0ICAgIHtcclxuXHRcdCAgICBcdGZpZWxkOiBcInN0YXR1c1wiLFxyXG5cdFx0ICAgICAgXHRkaXNwbGF5TmFtZTogJ+i/geenu+eKtuaAgScsXHJcblx0XHQgICAgICBcdGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwidGFza1N0YXR1cy5odG1sXCIpICAgICBcclxuXHRcdCAgICB9LFxyXG5cdFx0ICAgIHtcclxuXHRcdCAgICBcdGZpZWxkOiBcInByb2Nlc3NcIixcclxuXHRcdCAgICAgIFx0ZGlzcGxheU5hbWU6ICfov4Hnp7vov5vluqYnLFxyXG5cdFx0ICAgICAgXHRjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInRhc2tQcm9jZXNzLmh0bWxcIikgXHRcdCAgICAgIFx0ICAgICAgXHJcblx0XHQgICAgfSxcclxuXHRcdCAgICB7XHJcblx0XHQgICAgXHRmaWVsZDogXCJlbnRpdHlcIixcclxuXHRcdCAgICAgIFx0ZGlzcGxheU5hbWU6ICfmk43kvZwnLFxyXG5cdFx0ICAgICAgXHRjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInRhc2tFZGl0Lmh0bWxcIikgIFx0XHQgICAgICBcdCAgICAgIFxyXG5cdFx0ICAgIH0gICAgICAgICAgIFxyXG5cdFx0XX07XHJcblxyXG5cclxuXHRcdCRzY29wZS4kb24oXCJkZWxldGVSb3dcIiwgKGV2ZW50LCBkYXRhKSA9PntcdFx0XHRcdFx0XHJcblx0XHRcdENvbmZpZ3Mub3JhY2xlSW5mb09wZXJhdGUoJGh0dHAsIFwiL2phdmEvY29uc29sZS9hcGkvdGFzay90cmFuc2ZlclwiLCBDb25maWdzLk9wZXJhdGVUeXBlLkRFTEVURSwgZGF0YSwgKGRhdGEsIHN0YXR1cykgPT57XHJcblx0XHRcdFx0aWYoc3RhdHVzID09PSAyMDApXHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIuWIoOmZpOaIkOWKn1wiKTtcclxuXHRcdFx0fSk7XHRcdFx0XHJcblx0XHR9KTtcdFx0XHJcblx0fV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIEhvbWVDb250cm9sbGVyID0gY29udHJvbGxlcihcIkhvbWVDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUubmFtZXNwYWNlID0gS3ViZXJuZXRlcy5jdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG5cclxuICAgICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIEplbmtpbnNKb2JDb250cm9sbGVyID0gY29udHJvbGxlcihcIkplbmtpbnNKb2JDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgU2VydmljZVJlZ2lzdHJ5KSA9PiB7XHJcblxyXG4gICAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICAgICAkc2NvcGUuam9iSWQgPSAkcm91dGVQYXJhbXNbXCJqb2JcIl07XHJcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSA9IHt9O1xyXG5cclxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XHJcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQsICRzY29wZS5qb2JJZCk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgZGF0YTogJ2pvYi5idWlsZHMnLFxyXG4gICAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpZWxkOiAnJHNvcnRPcmRlcicsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcclxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZElkVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6ICckYnVpbGRMaW5rJyxcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1ZpZXdzJyxcclxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZEJ1dHRvbnNUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZDogJyRkdXJhdGlvbicsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdEdXJhdGlvbicsXHJcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGREdXJhdGlvblRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpZWxkOiAnJHRpbWVzdGFtcCcsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUaW1lIFN0YXJ0ZWQnLFxyXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0J1aWxkVGltZXN0YW1wVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfTtcclxuICAgICAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgICAgaWYgKCRzY29wZS5qb2JJZCkge1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgJHNjb3BlLmpvYklkLCBcImFwaS9qc29uP2RlcHRoPTFcIikpO1xyXG4gICAgICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLmpvYiB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XHJcbiAgICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVucmljaEplbmtpbnNKb2IoZGF0YSwgJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhcImVudGl0eSBoYXMgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuam9iID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCB2YXIgSmVua2luc0pvYnNDb250cm9sbGVyID0gY29udHJvbGxlcihcIkplbmtpbnNKb2JzQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICAgICAgJHNjb3BlLmplbmtpbnMgPSBudWxsO1xyXG4gICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcclxuXHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCk7XHJcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVXb3Jrc3BhY2VTdWJOYXZCYXJzKCk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICAgICAgZGF0YTogJ2plbmtpbnMuam9icycsXHJcbiAgICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxyXG4gICAgICAgICAgZmlsdGVyT3B0aW9uczoge1xyXG4gICAgICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29sdW1uRGVmczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxyXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0pvYk5hbWVUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZDogJyRidWlsZExpbmsnLFxyXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVmlld3MnLFxyXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiamVua2luc0pvYkJ1dHRvbnNUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZDogJyRsYXN0U3VjY2Vzc2Z1bEJ1aWxkTnVtYmVyJyxcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhc3QgU3VjY2VzcycsXHJcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zTGFzdFN1Y2Nlc3NUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZDogJyRsYXN0RmFpbGVkbEJ1aWxkTnVtYmVyJyxcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhc3QgRmFpbHVyZScsXHJcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zTGFzdEZhaWx1cmVUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWVsZDogJyRkdXJhdGlvbicsXHJcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdMYXN0IER1cmF0aW9uJyxcclxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImplbmtpbnNCdWlsZER1cmF0aW9uVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmllbGQ6ICckdGltZXN0YW1wJyxcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RpbWUgU3RhcnRlZCcsXHJcbiAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJqZW5raW5zQnVpbGRUaW1lc3RhbXBUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgICAgICAvLyBUT0RPIG9ubHkgbmVlZCBkZXB0aCAyIHRvIGJlIGFibGUgdG8gZmV0Y2ggdGhlIGxhc3RCdWlsZFxyXG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgXCJhcGkvanNvbj9kZXB0aD0yXCIpO1xyXG4gICAgICAgICAgbG9nLmluZm8oXCJcIik7XHJcbiAgICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLmplbmtpbnMgfHwgS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsKSkge1xyXG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsLCBqZW5raW5zSHR0cENvbmZpZykuXHJcbiAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgIGVucmljaEplbmtpbnNKb2JzKGRhdGEsICRzY29wZS5pZCwgJHNjb3BlLmlkKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQoZGF0YSwgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhcImVudGl0eSBoYXMgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmplbmtpbnMgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIEZBQlJJQzhfUFJPSkVDVF9KU09OID0gXCJmYWJyaWM4UHJvamVjdEpzb25cIjtcclxuXHJcbiAgZnVuY3Rpb24gYnlJZCh0aGluZykge1xyXG4gICAgcmV0dXJuIHRoaW5nLmlkO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY3JlYXRlS2V5KG5hbWVzcGFjZSwgaWQsIGtpbmQpIHtcclxuICAgIHJldHVybiAobmFtZXNwYWNlIHx8IFwiXCIpICsgXCItXCIgKyAoa2luZCB8fCAndW5kZWZpbmVkJykudG9Mb3dlckNhc2UoKSArICctJyArIChpZCB8fCAndW5kZWZpbmVkJykucmVwbGFjZSgvXFwuL2csICctJyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBwb3B1bGF0ZUtleShpdGVtKSB7XHJcbiAgICB2YXIgcmVzdWx0ID0gaXRlbTtcclxuICAgIHJlc3VsdFsnX2tleSddID0gY3JlYXRlS2V5KGdldE5hbWVzcGFjZShpdGVtKSwgZ2V0TmFtZShpdGVtKSwgZ2V0S2luZChpdGVtKSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcG9wdWxhdGVLZXlzKGl0ZW1zOkFycmF5PGFueT4pIHtcclxuICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgIGFuZ3VsYXIuZm9yRWFjaChpdGVtcywgKGl0ZW0pID0+IHtcclxuICAgICAgcmVzdWx0LnB1c2gocG9wdWxhdGVLZXkoaXRlbSkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2VsZWN0UG9kcyhwb2RzLCBuYW1lc3BhY2UsIGxhYmVscykge1xyXG4gICAgcmV0dXJuIHBvZHMuZmlsdGVyKChwb2QpID0+IHtcclxuICAgICAgcmV0dXJuIGdldE5hbWVzcGFjZShwb2QpID09PSBuYW1lc3BhY2UgJiYgc2VsZWN0b3JNYXRjaGVzKGxhYmVscywgZ2V0TGFiZWxzKHBvZCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgb2JqZWN0IHdoaWNoIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgcG9kcywgcmVwbGljYXRpb24gY29udHJvbGxlcnMsIHNlcnZpY2VzIGFuZCB0aGVpciBhc3NvY2lhdGlvbnNcclxuICAgKi9cclxuICBleHBvcnQgY2xhc3MgS3ViZXJuZXRlc01vZGVsU2VydmljZSB7XHJcbiAgICBwdWJsaWMga3ViZXJuZXRlcyA9IDxLdWJlcm5ldGVzU3RhdGU+IG51bGw7XHJcbiAgICBwdWJsaWMgYXBwcyA9IFtdO1xyXG4gICAgcHVibGljIHNlcnZpY2VzID0gW107XHJcblxyXG4gICAgcHVibGljIHJlcGxpY2F0aW9uY29udHJvbGxlcnMgPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycyA9IFtdO1xyXG5cclxuICAgIC8qcHVibGljIGdldCBmaWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzKCk6QXJyYXk8YW55PiB7XHJcbiAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycyhmaWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzOkFycmF5PGFueT4pIHtcclxuICAgICAgICB0aGlzLmZpbHRlclJlcGxpY2F0aW9uY29udHJvbGxlcnMgPSBmaWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzO1xyXG4gICAgfSovXHJcblxyXG4gICAgcHVibGljIGdldCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzKCk6QXJyYXk8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlcGxpY2F0aW9uY29udHJvbGxlcnM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHJlcGxpY2F0aW9uQ29udHJvbGxlcnMocmVwbGljYXRpb25Db250cm9sbGVyczpBcnJheTxhbnk+KSB7XHJcbiAgICAgIHRoaXMucmVwbGljYXRpb25jb250cm9sbGVycyA9IHJlcGxpY2F0aW9uQ29udHJvbGxlcnM7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgcG9kcyA9IFtdO1xyXG4gICAgcHVibGljIGhvc3RzID0gW107XHJcbiAgICBwdWJsaWMgZ2V0IG5hbWVzcGFjZXMoKTpBcnJheTxzdHJpbmc+IHtcclxuICAgICAgcmV0dXJuIHRoaXMua3ViZXJuZXRlcy5uYW1lc3BhY2VzO1xyXG4gICAgfVxyXG4gICAgLy9wdWJsaWMgbmFtZXNwYWNlcyA9IFtdO1xyXG4gICAgcHVibGljIHJvdXRlcyA9IFtdO1xyXG4gICAgcHVibGljIHRlbXBsYXRlcyA9IFtdO1xyXG4gICAgcHVibGljIHJlZHJhdyA9IGZhbHNlO1xyXG4gICAgcHVibGljIHJlc291cmNlVmVyc2lvbnMgPSB7fTtcclxuXHJcbiAgICAvLyB2YXJpb3VzIHZpZXdzIG9uIHRoZSBkYXRhXHJcbiAgICBwdWJsaWMgcG9kc0J5SG9zdCA9IHt9O1xyXG4gICAgcHVibGljIHNlcnZpY2VzQnlLZXkgPSB7fTtcclxuICAgIHB1YmxpYyByZXBsaWNhdGlvbkNvbnRyb2xsZXJzQnlLZXkgPSB7fTtcclxuICAgIHB1YmxpYyBwb2RzQnlLZXkgPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgYXBwSW5mb3MgPSBbXTtcclxuICAgIHB1YmxpYyBhcHBWaWV3cyA9IFtdO1xyXG4gICAgcHVibGljIGFwcEZvbGRlcnMgPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgZmV0Y2hlZCA9IGZhbHNlO1xyXG4gICAgcHVibGljIGdldCBzaG93UnVuQnV0dG9uKCk6Ym9vbGVhbiB7XHJcbiAgICAgIGlmIChpc09wZW5TaGlmdCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBfLmFueSh0aGlzLnNlcnZpY2VzLCAoc2VydmljZSkgPT4ge1xyXG4gICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZXJ2aWNlKTtcclxuICAgICAgICBpZiAobmFtZSA9PT0gXCJ0ZW1wbGF0ZXNcIikge1xyXG4gICAgICAgICAgdmFyIHBvZENvdW50ZXJzID0gc2VydmljZS4kcG9kQ291bnRlcnM7XHJcbiAgICAgICAgICByZXR1cm4gcG9kQ291bnRlcnMgJiYgKHBvZENvdW50ZXJzLnZhbGlkIHx8IHBvZENvdW50ZXJzLnJlYWR5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGJ1aWxkY29uZmlncyA9IFtdO1xyXG4gICAgcHVibGljIGV2ZW50cyA9IFtdO1xyXG4gICAgcHVibGljIHdvcmtzcGFjZXMgPSBbXTtcclxuICAgIHB1YmxpYyBwcm9qZWN0cyA9IFtdO1xyXG4gICAgcHVibGljIHByb2plY3QgPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgc2VydmljZUFwcHMoKTpBcnJheTxhbnk+IHtcclxuICAgICAgcmV0dXJuIF8uZmlsdGVyKHRoaXMuc2VydmljZXMsIChzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHMuJGhvc3QgJiYgcy4kc2VydmljZVVybCAmJiBzLiRwb2RDb3VudFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgJGtlZXBQb2xsaW5nKCkge1xyXG4gICAgICByZXR1cm4ga2VlcFBvbGxpbmdNb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3JSZWRyYXcoZmxhZykge1xyXG4gICAgICB0aGlzLnJlZHJhdyA9IHRoaXMucmVkcmF3IHx8IGZsYWc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlcnZpY2UobmFtZXNwYWNlLCBpZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlc0J5S2V5W2NyZWF0ZUtleShuYW1lc3BhY2UsIGlkLCAnc2VydmljZScpXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKG5hbWVzcGFjZSwgaWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5W2NyZWF0ZUtleShuYW1lc3BhY2UsIGlkLCAncmVwbGljYXRpb25Db250cm9sbGVyJyldO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQb2QobmFtZXNwYWNlLCBpZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wb2RzQnlLZXlbY3JlYXRlS2V5KG5hbWVzcGFjZSwgaWQsICdwb2QnKV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBvZHNGb3JOYW1lc3BhY2UobmFtZXNwYWNlID0gdGhpcy5jdXJyZW50TmFtZXNwYWNlKCkpIHtcclxuICAgICAgcmV0dXJuIF8uZmlsdGVyKHRoaXMucG9kcywgeyBuYW1lc3BhY2U6IG5hbWVzcGFjZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QnVpbGRDb25maWcobmFtZSkge1xyXG4gICAgICByZXR1cm4gXy5maW5kKHRoaXMuYnVpbGRjb25maWdzLCB7ICRuYW1lOiBuYW1lIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQcm9qZWN0KG5hbWUsIG5zID0gdGhpcy5jdXJyZW50TmFtZXNwYWNlKCkpIHtcclxuICAgICAgdmFyIGJ1aWxkQ29uZmlnID0gdGhpcy5wcm9qZWN0O1xyXG4gICAgICBpZiAoIWJ1aWxkQ29uZmlnKSB7XHJcbiAgICAgICAgdmFyIHRleHQgPSBsb2NhbFN0b3JhZ2VbRkFCUklDOF9QUk9KRUNUX0pTT05dO1xyXG4gICAgICAgIGlmICh0ZXh0KSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBidWlsZENvbmZpZyA9IGFuZ3VsYXIuZnJvbUpzb24odGV4dCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy53YXJuKFwiQ291bGQgbm90IHBhcnNlIGpzb24gZm9yIFwiICsgRkFCUklDOF9QUk9KRUNUX0pTT04gKyBcIi4gV2FzOiBcIiArIHRleHQgKyBcIi4gXCIgKyBlLCBlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGJ1aWxkQ29uZmlnICYmIG5zICE9IGdldE5hbWVzcGFjZShidWlsZENvbmZpZykgJiYgbmFtZSAhPSBidWlsZENvbmZpZy4kbmFtZSkge1xyXG4gICAgICAgIGJ1aWxkQ29uZmlnID0gdGhpcy5nZXRCdWlsZENvbmZpZyhuYW1lKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYnVpbGRDb25maWc7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBzZXRQcm9qZWN0KGJ1aWxkQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMucHJvamVjdCA9IGJ1aWxkQ29uZmlnO1xyXG4gICAgICBpZiAoYnVpbGRDb25maWcpIHtcclxuICAgICAgICAvLyBsZXRzIHN0b3JlIGluIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICB2YXIgbG9jYWxTdG9yYWdlID0gaW5qZWN0KFwibG9jYWxTdG9yYWdlXCIpO1xyXG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZVtGQUJSSUM4X1BST0pFQ1RfSlNPTl0gPSBhbmd1bGFyLnRvSnNvbihidWlsZENvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGVkIG5hbWVzcGFjZSBvciB0aGUgZGVmYXVsdCBuYW1lc3BhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGN1cnJlbnROYW1lc3BhY2UoKSB7XHJcbiAgICAgIHZhciBhbnN3ZXIgPSBudWxsO1xyXG4gICAgICBpZiAodGhpcy5rdWJlcm5ldGVzKSB7XHJcbiAgICAgICAgYW5zd2VyID0gdGhpcy5rdWJlcm5ldGVzLnNlbGVjdGVkTmFtZXNwYWNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhbnN3ZXIgfHwgZGVmYXVsdE5hbWVzcGFjZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlSWNvblVybEFuZEFwcEluZm8oZW50aXR5LCBuYW1lRmllbGQ6IHN0cmluZykge1xyXG4gICAgICB2YXIgYW5zd2VyID0gbnVsbDtcclxuICAgICAgdmFyIGlkID0gZ2V0TmFtZShlbnRpdHkpO1xyXG4gICAgICBlbnRpdHkuJGljb25VcmwgPSBDb3JlLnBhdGhHZXQoZW50aXR5LCBbJ21ldGFkYXRhJywgJ2Fubm90YXRpb25zJywgJ2ZhYnJpYzguJyArIGlkICsgJy9pY29uVXJsJ10pO1xyXG4gICAgICBlbnRpdHkuJGluZm8gPSBDb3JlLnBhdGhHZXQoZW50aXR5LCBbJ21ldGFkYXRhJywgJ2Fubm90YXRpb25zJywgJ2ZhYnJpYzguJyArIGlkICsgJy9zdW1tYXJ5J10pO1xyXG4gICAgICBpZiAoZW50aXR5LiRpY29uVXJsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpZCAmJiBuYW1lRmllbGQpIHtcclxuICAgICAgICAodGhpcy50ZW1wbGF0ZXMgfHwgW10pLmZvckVhY2goKHRlbXBsYXRlKSA9PiB7XHJcbiAgICAgICAgICB2YXIgbWV0YWRhdGEgPSB0ZW1wbGF0ZS5tZXRhZGF0YTtcclxuICAgICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICB2YXIgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCB7fTtcclxuICAgICAgICAgICAgdmFyIGljb25VcmwgPSBhbm5vdGF0aW9uc1tcImZhYnJpYzguXCIgKyBpZCArIFwiL2ljb25VcmxcIl0gfHwgYW5ub3RhdGlvbnNbXCJmYWJyaWM4L2ljb25VcmxcIl07XHJcbiAgICAgICAgICAgIGlmIChpY29uVXJsKSB7XHJcbiAgICAgICAgICAgICAgKHRlbXBsYXRlLm9iamVjdHMgfHwgW10pLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBlbnRpdHlOYW1lID0gZ2V0TmFtZShpdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gZW50aXR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICBlbnRpdHkuJGljb25VcmwgPSBpY29uVXJsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgKHRoaXMuYXBwSW5mb3MgfHwgW10pLmZvckVhY2goKGFwcEluZm8pID0+IHtcclxuICAgICAgICAgIHZhciBpY29uUGF0aCA9IGFwcEluZm8uaWNvblBhdGg7XHJcbiAgICAgICAgICBpZiAoaWNvblBhdGggJiYgIWFuc3dlciAmJiBpY29uUGF0aCAhPT0gXCJudWxsXCIpIHtcclxuICAgICAgICAgICAgdmFyIGljb25VcmwgPSBnaXRQYXRoVG9VcmwoaWNvblBhdGgpO1xyXG4gICAgICAgICAgICB2YXIgaWRzID0gQ29yZS5wYXRoR2V0KGFwcEluZm8sIFtcIm5hbWVzXCIsIG5hbWVGaWVsZF0pO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goaWRzLCAoYXBwSWQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYXBwSWQgPT09IGlkKSB7XHJcbiAgICAgICAgICAgICAgICBlbnRpdHkuJGljb25VcmwgPSBpY29uVXJsO1xyXG4gICAgICAgICAgICAgICAgZW50aXR5LmFwcFBhdGggPSBhcHBJbmZvLmFwcFBhdGg7XHJcbiAgICAgICAgICAgICAgICBlbnRpdHkuJGluZm8gPSBhcHBJbmZvO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFlbnRpdHkuJGljb25VcmwpIHtcclxuICAgICAgICBlbnRpdHkuJGljb25VcmwgPSBkZWZhdWx0SWNvblVybDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXliZUluaXQoKSB7XHJcbiAgICAgIHRoaXMuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VydmljZXNCeUtleSA9IHt9O1xyXG4gICAgICB0aGlzLnBvZHNCeUtleSA9IHt9O1xyXG4gICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnNCeUtleSA9IHt9O1xyXG5cclxuICAgICAgdGhpcy5wb2RzLmZvckVhY2goKHBvZCkgPT4ge1xyXG4gICAgICAgIGlmICghcG9kLmtpbmQpIHBvZC5raW5kID0gXCJQb2RcIjtcclxuICAgICAgICB0aGlzLnBvZHNCeUtleVtwb2QuX2tleV0gPSBwb2Q7XHJcbiAgICAgICAgdmFyIGhvc3QgPSBnZXRIb3N0KHBvZCk7XHJcbiAgICAgICAgcG9kLiRsYWJlbHNUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhnZXRMYWJlbHMocG9kKSk7XHJcbiAgICAgICAgaWYgKGhvc3QpIHtcclxuICAgICAgICAgIHBvZC4kbGFiZWxzVGV4dCArPSBsYWJlbEZpbHRlclRleHRTZXBhcmF0b3IgKyBcImhvc3Q9XCIgKyBob3N0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBwb2QuJGljb25VcmwgPSBkZWZhdWx0SWNvblVybDtcclxuICAgICAgICB0aGlzLmRpc2NvdmVyUG9kQ29ubmVjdGlvbnMocG9kKTtcclxuICAgICAgICBwb2QuJGNvbnRhaW5lclBvcnRzID0gW107XHJcblxyXG4gICAgICAgIHZhciBwb2RTdGF0dXMgPSBwb2Quc3RhdHVzIHx8IHt9O1xyXG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBwb2RTdGF0dXMuc3RhcnRUaW1lO1xyXG4gICAgICAgIHBvZC4kc3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICBpZiAoc3RhcnRUaW1lKSB7XHJcbiAgICAgICAgICBwb2QuJHN0YXJ0VGltZSA9IG5ldyBEYXRlKHN0YXJ0VGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjcmVhdGVkVGltZSA9IGdldENyZWF0aW9uVGltZXN0YW1wKHBvZCk7XHJcbiAgICAgICAgcG9kLiRjcmVhdGVkVGltZSA9IG51bGw7XHJcbiAgICAgICAgcG9kLiRhZ2UgPSBudWxsO1xyXG4gICAgICAgIGlmIChjcmVhdGVkVGltZSkge1xyXG4gICAgICAgICAgcG9kLiRjcmVhdGVkVGltZSA9IG5ldyBEYXRlKGNyZWF0ZWRUaW1lKTtcclxuICAgICAgICAgIHBvZC4kYWdlID0gaHVtYW5kYXRlLnJlbGF0aXZlVGltZShwb2QuJGNyZWF0ZWRUaW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlYWR5ID0gaXNSZWFkeShwb2QpO1xyXG4gICAgICAgIHBvZC4kcmVhZHkgPSByZWFkeTtcclxuICAgICAgICBwb2QuJHN0YXR1c0NzcyA9IHN0YXR1c1RleHRUb0Nzc0NsYXNzKHBvZFN0YXR1cy5waGFzZSwgcmVhZHkpO1xyXG5cclxuICAgICAgICB2YXIgbWF4UmVzdGFydENvdW50ID0gMDtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goQ29yZS5wYXRoR2V0KHBvZCwgW1wic3RhdHVzXCIsIFwiY29udGFpbmVyU3RhdHVzZXNcIl0pLCAoc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmVzdGFydENvdW50ID0gc3RhdHVzLnJlc3RhcnRDb3VudDtcclxuICAgICAgICAgIGlmIChyZXN0YXJ0Q291bnQpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3RhcnRDb3VudCA+IG1heFJlc3RhcnRDb3VudCkge1xyXG4gICAgICAgICAgICAgIG1heFJlc3RhcnRDb3VudCA9IHJlc3RhcnRDb3VudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChtYXhSZXN0YXJ0Q291bnQgKSB7XHJcbiAgICAgICAgICBwb2QuJHJlc3RhcnRDb3VudCA9IG1heFJlc3RhcnRDb3VudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGltYWdlTmFtZXMgPSBcIlwiO1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChDb3JlLnBhdGhHZXQocG9kLCBbXCJzcGVjXCIsIFwiY29udGFpbmVyc1wiXSksIChjb250YWluZXIpID0+IHtcclxuICAgICAgICAgIHZhciBpbWFnZSA9IGNvbnRhaW5lci5pbWFnZTtcclxuICAgICAgICAgIGlmIChpbWFnZSkge1xyXG4gICAgICAgICAgICBpZiAoIWltYWdlTmFtZXMpIHtcclxuICAgICAgICAgICAgICBpbWFnZU5hbWVzID0gaW1hZ2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW1hZ2VOYW1lcyA9IGltYWdlTmFtZXMgKyBcIiBcIiArIGltYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBpbWFnZS5sYXN0SW5kZXhPZihcIjpcIik7XHJcbiAgICAgICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5zdWJzdHJpbmcoMCwgaWR4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGF0aHMgPSBpbWFnZS5zcGxpdChcIi9cIiwgMyk7XHJcbiAgICAgICAgICAgIGlmIChwYXRocy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB2YXIgYW5zd2VyID0gbnVsbDtcclxuICAgICAgICAgICAgICBpZiAocGF0aHMubGVuZ3RoID09IDMpIHtcclxuICAgICAgICAgICAgICAgIGFuc3dlciA9IHBhdGhzWzFdICsgXCIvXCIgKyBwYXRoc1syXTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhdGhzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPSBwYXRoc1swXSArIFwiL1wiICsgcGF0aHNbMV07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFuc3dlciA9IHBhdGhzWzBdICsgXCIvXCIgKyBwYXRoc1sxXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29udGFpbmVyLiRpbWFnZUxpbmsgPSBVcmxIZWxwZXJzLmpvaW4oXCJodHRwczovL3JlZ2lzdHJ5Lmh1Yi5kb2NrZXIuY29tL3UvXCIsIGFuc3dlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChjb250YWluZXIucG9ydHMsIChwb3J0KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXJQb3J0ID0gcG9ydC5jb250YWluZXJQb3J0O1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVyUG9ydCkge1xyXG4gICAgICAgICAgICAgIHBvZC4kY29udGFpbmVyUG9ydHMucHVzaChjb250YWluZXJQb3J0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcG9kLiRpbWFnZU5hbWVzID0gaW1hZ2VOYW1lcztcclxuICAgICAgICB2YXIgcG9kU3RhdHVzID0gcG9kU3RhdHVzO1xyXG4gICAgICAgIHZhciBwb2RTcGVjID0gKHBvZC5zcGVjIHx8IHt9KTtcclxuICAgICAgICBwb2QuJHBvZElQID0gcG9kU3RhdHVzLnBvZElQO1xyXG4gICAgICAgIHBvZC4kaG9zdCA9IHBvZFNwZWMuaG9zdCB8fCBwb2RTcGVjLm5vZGVOYW1lIHx8IHBvZFN0YXR1cy5ob3N0SVA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zZXJ2aWNlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzZXJ2aWNlLmtpbmQpIHNlcnZpY2Uua2luZCA9IFwiU2VydmljZVwiO1xyXG4gICAgICAgIHRoaXMuc2VydmljZXNCeUtleVtzZXJ2aWNlLl9rZXldID0gc2VydmljZTtcclxuICAgICAgICB2YXIgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihzZXJ2aWNlKTtcclxuICAgICAgICBzZXJ2aWNlLiRwb2RzID0gW107XHJcbiAgICAgICAgaWYgKCFzZXJ2aWNlLiRwb2RDb3VudGVycykge1xyXG4gICAgICAgICAgc2VydmljZS4kcG9kQ291bnRlcnMgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvZExpbmtVcmwgPSBVcmxIZWxwZXJzLmpvaW4oXCIva3ViZXJuZXRlcy9uYW1lc3BhY2VcIiwgc2VydmljZS5tZXRhZGF0YS5uYW1lc3BhY2UsIFwicG9kc1wiKTtcclxuICAgICAgICBfLmFzc2lnbihzZXJ2aWNlLiRwb2RDb3VudGVycywgc2VsZWN0b3IgPyBjcmVhdGVQb2RDb3VudGVycyhzZWxlY3RvciwgdGhpcy5wb2RzLCBzZXJ2aWNlLiRwb2RzLCBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKHNlbGVjdG9yLCBcIixcIiksIHBvZExpbmtVcmwpIDoge30pO1xyXG4gICAgICAgIHNlcnZpY2UuJHBvZENvdW50ID0gc2VydmljZS4kcG9kcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIHZhciBzZWxlY3RlZFBvZHMgPSBzZXJ2aWNlLiRwb2RzO1xyXG4gICAgICAgIHNlcnZpY2UuY29ubmVjdFRvID0gc2VsZWN0ZWRQb2RzLm1hcCgocG9kKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcG9kLl9rZXk7XHJcbiAgICAgICAgfSkuam9pbignLCcpO1xyXG4gICAgICAgIHNlcnZpY2UuJGxhYmVsc1RleHQgPSBLdWJlcm5ldGVzLmxhYmVsc1RvU3RyaW5nKGdldExhYmVscyhzZXJ2aWNlKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJY29uVXJsQW5kQXBwSW5mbyhzZXJ2aWNlLCBcInNlcnZpY2VOYW1lc1wiKTtcclxuICAgICAgICB2YXIgc3BlYyA9IHNlcnZpY2Uuc3BlYyB8fCB7fTtcclxuICAgICAgICBzZXJ2aWNlLiRwb3J0YWxJUCA9IHNwZWMucG9ydGFsSVA7XHJcbiAgICAgICAgc2VydmljZS4kc2VsZWN0b3JUZXh0ID0gS3ViZXJuZXRlcy5sYWJlbHNUb1N0cmluZyhzcGVjLnNlbGVjdG9yKTtcclxuICAgICAgICB2YXIgcG9ydHMgPSBfLm1hcChzcGVjLnBvcnRzIHx8IFtdLCBcInBvcnRcIik7XHJcbiAgICAgICAgc2VydmljZS4kcG9ydHMgPSBwb3J0cztcclxuICAgICAgICBzZXJ2aWNlLiRwb3J0c1RleHQgPSBwb3J0cy5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgdmFyIGljb25VcmwgPSBzZXJ2aWNlLiRpY29uVXJsO1xyXG4gICAgICAgIGlmIChpY29uVXJsICYmIHNlbGVjdGVkUG9kcykge1xyXG4gICAgICAgICAgc2VsZWN0ZWRQb2RzLmZvckVhY2goKHBvZCkgPT4ge1xyXG4gICAgICAgICAgICBwb2QuJGljb25VcmwgPSBpY29uVXJsO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlcnZpY2UuJHNlcnZpY2VVcmwgPSBzZXJ2aWNlTGlua1VybChzZXJ2aWNlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmVwbGljYXRpb25Db250cm9sbGVyKSA9PiB7XHJcbiAgICAgICAgaWYgKCFyZXBsaWNhdGlvbkNvbnRyb2xsZXIua2luZCkgcmVwbGljYXRpb25Db250cm9sbGVyLmtpbmQgPSBcIlJlcGxpY2F0aW9uQ29udHJvbGxlclwiO1xyXG4gICAgICAgIHRoaXMucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5W3JlcGxpY2F0aW9uQ29udHJvbGxlci5fa2V5XSA9IHJlcGxpY2F0aW9uQ29udHJvbGxlclxyXG4gICAgICAgICAgdmFyIHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IocmVwbGljYXRpb25Db250cm9sbGVyKTtcclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYoaXNGaWx0ZXJSQyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpICYmICFpc0luY2x1ZGUodGhpcy5maWx0ZXJSZXBsaWNhdGlvbmNvbnRyb2xsZXJzLCByZXBsaWNhdGlvbkNvbnRyb2xsZXIpKVxyXG4gICAgICAgICAgIHRoaXMuZmlsdGVyUmVwbGljYXRpb25jb250cm9sbGVycy5wdXNoKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XHJcblxyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kQ291bnRlcnMgPSBzZWxlY3RvciA/IGNyZWF0ZVBvZENvdW50ZXJzKHNlbGVjdG9yLCB0aGlzLnBvZHMsIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kcykgOiBudWxsO1xyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcG9kQ291bnQgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMubGVuZ3RoO1xyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kcmVwbGljYXMgPSAocmVwbGljYXRpb25Db250cm9sbGVyLnNwZWMgfHwge30pLnJlcGxpY2FzO1xyXG5cclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJG9yYWNsZU5hbWUgPSBnZXRPcmFjbGVOYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcik7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhnZXROYW1lKHJlcGxpY2F0aW9uQ29udHJvbGxlcikpO1xyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kb3JhY2xlU3RhdHVzID0gZ2V0T3JhY2xlU3RhdHVzKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcclxuICAgICAgICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJGV4dHJhY3RTdGF0dXMgPSBnZXRFeHRyYWN0U3RhdHVzKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTtcclxuXHJcblxyXG4gICAgICAgIHZhciBzZWxlY3RlZFBvZHMgPSByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHM7XHJcbiAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyLmNvbm5lY3RUbyA9IHNlbGVjdGVkUG9kcy5tYXAoKHBvZCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHBvZC5fa2V5O1xyXG4gICAgICAgIH0pLmpvaW4oJywnKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGdldExhYmVscyhyZXBsaWNhdGlvbkNvbnRyb2xsZXIpKTsgICAgICAgIFxyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci4kbGFiZWxzVGV4dCA9IEt1YmVybmV0ZXMubGFiZWxzVG9TdHJpbmcoZ2V0TGFiZWxzKHJlcGxpY2F0aW9uQ29udHJvbGxlcikpO1xyXG4gICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlci5tZXRhZGF0YS5sYWJlbHMgPSBsYWJlbHNGb3JtYXQocmVwbGljYXRpb25Db250cm9sbGVyKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUljb25VcmxBbmRBcHBJbmZvKHJlcGxpY2F0aW9uQ29udHJvbGxlciwgXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJOYW1lc1wiKTtcclxuICAgICAgICB2YXIgaWNvblVybCA9ICByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJGljb25Vcmw7XHJcbiAgICAgICAgaWYgKGljb25VcmwgJiYgc2VsZWN0ZWRQb2RzKSB7XHJcbiAgICAgICAgICBzZWxlY3RlZFBvZHMuZm9yRWFjaCgocG9kKSA9PiB7XHJcbiAgICAgICAgICAgIHBvZC4kaWNvblVybCA9IGljb25Vcmw7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gc2VydmljZXMgbWF5IG5vdCBtYXAgdG8gYW4gaWNvbiBidXQgdGhlaXIgcG9kcyBtYXkgZG8gdmlhIHRoZSBSQ1xyXG4gICAgICAvLyBzbyBsZXRzIGRlZmF1bHQgaXQuLi5cclxuICAgICAgdGhpcy5zZXJ2aWNlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XHJcbiAgICAgICAgdmFyIGljb25VcmwgPSBzZXJ2aWNlLiRpY29uVXJsO1xyXG4gICAgICAgIHZhciBzZWxlY3RlZFBvZHMgPSBzZXJ2aWNlLiRwb2RzO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZFBvZHMpIHtcclxuICAgICAgICAgIGlmICghaWNvblVybCB8fCBpY29uVXJsID09PSBkZWZhdWx0SWNvblVybCkge1xyXG4gICAgICAgICAgICBpY29uVXJsID0gbnVsbDtcclxuICAgICAgICAgICAgc2VsZWN0ZWRQb2RzLmZvckVhY2goKHBvZCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghaWNvblVybCkge1xyXG4gICAgICAgICAgICAgICAgaWNvblVybCA9IHBvZC4kaWNvblVybDtcclxuICAgICAgICAgICAgICAgIGlmIChpY29uVXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlcnZpY2UuJGljb25VcmwgPSBpY29uVXJsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMudXBkYXRlQXBwcygpO1xyXG5cclxuICAgICAgdmFyIHBvZHNCeUhvc3QgPSB7fTtcclxuICAgICAgdGhpcy5wb2RzLmZvckVhY2goKHBvZCkgPT4ge1xyXG4gICAgICAgIHZhciBob3N0ID0gZ2V0SG9zdChwb2QpO1xyXG4gICAgICAgIHZhciBwb2RzRm9ySG9zdCA9IHBvZHNCeUhvc3RbaG9zdF07XHJcbiAgICAgICAgaWYgKCFwb2RzRm9ySG9zdCkge1xyXG4gICAgICAgICAgcG9kc0Zvckhvc3QgPSBbXTtcclxuICAgICAgICAgIHBvZHNCeUhvc3RbaG9zdF0gPSBwb2RzRm9ySG9zdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9kc0Zvckhvc3QucHVzaChwb2QpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wb2RzQnlIb3N0ID0gcG9kc0J5SG9zdDtcclxuXHJcbiAgICAgIHZhciB0bXBIb3N0cyA9IFtdO1xyXG4gICAgICBmb3IgKHZhciBob3N0S2V5IGluIHBvZHNCeUhvc3QpIHtcclxuICAgICAgICB2YXIgaG9zdFBvZHMgPSBbXTtcclxuICAgICAgICB2YXIgcG9kQ291bnRlcnMgPSBjcmVhdGVQb2RDb3VudGVycygocG9kKSA9PiBnZXRIb3N0KHBvZCkgPT09IGhvc3RLZXksIHRoaXMucG9kcywgaG9zdFBvZHMsIFwiaG9zdD1cIiArIGhvc3RLZXkpO1xyXG4gICAgICAgIHZhciBob3N0SVAgPSBudWxsO1xyXG4gICAgICAgIGlmIChob3N0UG9kcy5sZW5ndGgpIHtcclxuICAgICAgICAgIHZhciBwb2QgPSBob3N0UG9kc1swXTtcclxuICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBwb2Quc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSkge1xyXG4gICAgICAgICAgICBob3N0SVAgPSBjdXJyZW50U3RhdGUuaG9zdElQO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaG9zdERldGFpbHMgPSB7XHJcbiAgICAgICAgICBuYW1lOiBob3N0S2V5LFxyXG4gICAgICAgICAgaWQ6IGhvc3RLZXksXHJcbiAgICAgICAgICBlbGVtZW50SWQ6IGhvc3RLZXkucmVwbGFjZSgvXFwuL2csICdfJyksXHJcbiAgICAgICAgICBob3N0SVA6IGhvc3RJUCxcclxuICAgICAgICAgIHBvZHM6IGhvc3RQb2RzLFxyXG4gICAgICAgICAga2luZDogXCJIb3N0XCIsXHJcbiAgICAgICAgICAgICRwb2RDb3VudGVyczogcG9kQ291bnRlcnMsXHJcbiAgICAgICAgICAgICRpY29uVXJsOiBob3N0SWNvblVybFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdG1wSG9zdHMucHVzaChob3N0RGV0YWlscyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaG9zdHMgPSB0bXBIb3N0cztcclxuXHJcbiAgICAgIGVucmljaEJ1aWxkQ29uZmlncyh0aGlzLmJ1aWxkY29uZmlncyk7XHJcbiAgICAgIGVucmljaEV2ZW50cyh0aGlzLmV2ZW50cywgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUFwcHMoKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gbGV0cyBjcmVhdGUgdGhlIGFwcCB2aWV3cyBieSB0cnlpbmcgdG8gam9pbiBjb250cm9sbGVycyAvIHNlcnZpY2VzIC8gcG9kcyB0aGF0IGFyZSByZWxhdGVkXHJcbiAgICAgICAgdmFyIGFwcFZpZXdzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucmVwbGljYXRpb25Db250cm9sbGVycy5mb3JFYWNoKChyZXBsaWNhdGlvbkNvbnRyb2xsZXIpID0+IHtcclxuICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xyXG4gICAgICAgICAgdmFyICRpY29uVXJsID0gcmVwbGljYXRpb25Db250cm9sbGVyLiRpY29uVXJsO1xyXG4gICAgICAgICAgYXBwVmlld3MucHVzaCh7XHJcbiAgICAgICAgICAgIGFwcFBhdGg6IFwiL2R1bW15UGF0aC9cIiArIG5hbWUsXHJcbiAgICAgICAgICAgICRuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAkaW5mbzoge1xyXG4gICAgICAgICAgICAgICRpY29uVXJsOiAkaWNvblVybFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAkaWNvblVybDogJGljb25VcmwsXHJcbiAgICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnM6IFtyZXBsaWNhdGlvbkNvbnRyb2xsZXJdLFxyXG4gICAgICAgICAgICBwb2RzOiByZXBsaWNhdGlvbkNvbnRyb2xsZXIuJHBvZHMgfHwgW10sXHJcbiAgICAgICAgICAgIHNlcnZpY2VzOiBbXVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHZhciBub01hdGNoZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VzLmZvckVhY2goKHNlcnZpY2UpID0+IHtcclxuICAgICAgICAgIC8vIG5vdyBsZXRzIHNlZSBpZiB3ZSBjYW4gZmluZCBhbiBhcHAgd2l0aCBhbiBSQyBvZiB0aGUgc2FtZSBzZWxlY3RvclxyXG4gICAgICAgICAgdmFyIG1hdGNoZXNBcHAgPSBudWxsO1xyXG4gICAgICAgICAgYXBwVmlld3MuZm9yRWFjaCgoYXBwVmlldykgPT4ge1xyXG4gICAgICAgICAgICBhcHBWaWV3LnJlcGxpY2F0aW9uQ29udHJvbGxlcnMuZm9yRWFjaCgocmVwbGljYXRpb25Db250cm9sbGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgdmFyIHJlcFNlbGVjdG9yID0gZ2V0U2VsZWN0b3IocmVwbGljYXRpb25Db250cm9sbGVyKTtcclxuICAgICAgICAgICAgICBpZiAocmVwU2VsZWN0b3IgJiZcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0b3JNYXRjaGVzKHJlcFNlbGVjdG9yLCBnZXRTZWxlY3RvcihzZXJ2aWNlKSkgJiZcclxuICAgICAgICAgICAgICAgICAgZ2V0TmFtZXNwYWNlKHNlcnZpY2UpID09PSBnZXROYW1lc3BhY2UocmVwbGljYXRpb25Db250cm9sbGVyKSkge1xyXG4gICAgICAgICAgICAgICAgbWF0Y2hlc0FwcCA9IGFwcFZpZXc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmIChtYXRjaGVzQXBwKSB7XHJcbiAgICAgICAgICAgIG1hdGNoZXNBcHAuc2VydmljZXMucHVzaChzZXJ2aWNlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5vTWF0Y2hlcy5wdXNoKHNlcnZpY2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIm5vIG1hdGNoZXM6IFwiLCBub01hdGNoZXMpO1xyXG4gICAgICAgIG5vTWF0Y2hlcy5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XHJcbiAgICAgICAgICB2YXIgYXBwVmlldyA9IF8uZmluZChhcHBWaWV3cywgKGFwcFZpZXcpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIF8uYW55KGFwcFZpZXcucmVwbGljYXRpb25Db250cm9sbGVycywgKHJjKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8uc3RhcnRzV2l0aChnZXROYW1lKHJjKSwgZ2V0TmFtZShzZXJ2aWNlKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAoYXBwVmlldykge1xyXG4gICAgICAgICAgICBhcHBWaWV3LnNlcnZpY2VzLnB1c2goc2VydmljZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgJGljb25VcmwgPSBzZXJ2aWNlLiRpY29uVXJsO1xyXG4gICAgICAgICAgICBhcHBWaWV3cy5wdXNoKHtcclxuICAgICAgICAgICAgICBhcHBQYXRoOiBcIi9kdW1teVBhdGgvXCIgKyBuYW1lLFxyXG4gICAgICAgICAgICAgICRuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICRpbmZvOiB7XHJcbiAgICAgICAgICAgICAgICAkaWNvblVybDogJGljb25VcmxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgJGljb25Vcmw6ICRpY29uVXJsLFxyXG4gICAgICAgICAgICAgIHJlcGxpY2F0aW9uQ29udHJvbGxlcnM6IFtdLFxyXG4gICAgICAgICAgICAgIHBvZHM6IHNlcnZpY2UuJHBvZHMgfHwgW10sXHJcbiAgICAgICAgICAgICAgc2VydmljZXM6IFtzZXJ2aWNlXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKHRoaXMucm91dGVzLCAocm91dGUpID0+IHtcclxuICAgICAgICAgIHZhciBtZXRhZGF0YSA9IHJvdXRlLm1ldGFkYXRhIHx8IHt9O1xyXG4gICAgICAgICAgdmFyIHNwZWMgPSByb3V0ZS5zcGVjIHx8IHt9O1xyXG4gICAgICAgICAgdmFyIHNlcnZpY2VOYW1lID0gQ29yZS5wYXRoR2V0KHNwZWMsIFtcInRvXCIsIFwibmFtZVwiXSk7XHJcbiAgICAgICAgICB2YXIgaG9zdCA9IHNwZWMuaG9zdDtcclxuICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2Uocm91dGUpO1xyXG4gICAgICAgICAgaWYgKHNlcnZpY2VOYW1lICYmIGhvc3QpIHtcclxuICAgICAgICAgICAgdmFyIHNlcnZpY2UgPSB0aGlzLmdldFNlcnZpY2UobmFtZXNwYWNlLCBzZXJ2aWNlTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgc2VydmljZS4kaG9zdCA9IGhvc3Q7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFRPRE8gd2UgY291bGQgdXNlIHNvbWUgYW5ub3RhdGlvbnMgLyBtZXRhZGF0YSB0byBkZWR1Y2Ugd2hhdCBVUkwgd2Ugc2hvdWxkIHVzZSB0byBvcGVuIHRoaXNcclxuICAgICAgICAgICAgICAvLyBzZXJ2aWNlIGluIHRoZSBjb25zb2xlLiBGb3Igbm93IGp1c3QgYXNzdW1lIGl0cyBodHRwOlxyXG5cclxuICAgICAgICAgICAgICBpZiAoaG9zdCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGhvc3RVcmwgPSAgaG9zdDtcclxuICAgICAgICAgICAgICAgIGlmIChob3N0VXJsLmluZGV4T2YoXCI6Ly9cIikgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGhvc3RVcmwgPSBcImh0dHA6Ly9cIiArIGhvc3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlLiRjb25uZWN0VXJsID0gVXJsSGVscGVycy5qb2luKGhvc3RVcmwsICBcIi9cIik7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyBUT0RPIGRlZmluaXRlbHkgbmVlZCB0aGF0IGFubm90YXRpb24sIHRlbXAgaGFjayBmb3IgYXBpbWFuIGxpbmtcclxuICAgICAgICAgICAgICBpZiAoZ2V0TmFtZShzZXJ2aWNlKSA9PT0gJ2FwaW1hbicgJiYgaG9zdCkge1xyXG4gICAgICAgICAgICAgICAgc2VydmljZS4kY29ubmVjdFVybCA9ICg8YW55PiBuZXcgVVJJKCkuaG9zdChzZXJ2aWNlLiRob3N0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBhdGgoJ2FwaW1hbnVpL2luZGV4Lmh0bWwnKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5xdWVyeSh7fSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5oYXNoKFVSSS5lbmNvZGUoYW5ndWxhci50b0pzb24oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrVG86IG5ldyBVUkkoKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogSGF3dGlvT0F1dGguZ2V0T0F1dGhUb2tlbigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJDb3VsZCBub3QgZmluZCBzZXJ2aWNlIFwiICsgc2VydmljZU5hbWUgKyBcIiBuYW1lc3BhY2UgXCIgKyBuYW1lc3BhY2UgKyBcIiBmb3Igcm91dGU6IFwiICsgbWV0YWRhdGEubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYXBwVmlld3MgPSBfLnNvcnRCeShwb3B1bGF0ZUtleXMoYXBwVmlld3MpLCAoYXBwVmlldykgPT4gYXBwVmlldy5fa2V5KTtcclxuXHJcbiAgICAgICAgQXJyYXlIZWxwZXJzLnN5bmModGhpcy5hcHBWaWV3cywgYXBwVmlld3MsICckbmFtZScpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hcHBJbmZvcyAmJiB0aGlzLmFwcFZpZXdzKSB7XHJcbiAgICAgICAgICB2YXIgZm9sZGVyTWFwID0ge307XHJcbiAgICAgICAgICB2YXIgZm9sZGVycyA9IFtdO1xyXG4gICAgICAgICAgdmFyIGFwcE1hcCA9IHt9O1xyXG4gICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHRoaXMuYXBwSW5mb3MsIChhcHBJbmZvKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghYXBwSW5mby4kaWNvblVybCAmJiBhcHBJbmZvLmljb25QYXRoICYmIGFwcEluZm8uaWNvblBhdGggIT09IFwibnVsbFwiKSB7XHJcbiAgICAgICAgICAgICAgYXBwSW5mby4kaWNvblVybCA9IGdpdFBhdGhUb1VybChhcHBJbmZvLmljb25QYXRoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYXBwUGF0aCA9IGFwcEluZm8uYXBwUGF0aDtcclxuICAgICAgICAgICAgaWYgKGFwcFBhdGgpIHtcclxuICAgICAgICAgICAgICBhcHBNYXBbYXBwUGF0aF0gPSBhcHBJbmZvO1xyXG4gICAgICAgICAgICAgIHZhciBpZHggPSBhcHBQYXRoLmxhc3RJbmRleE9mKFwiL1wiKTtcclxuICAgICAgICAgICAgICB2YXIgZm9sZGVyUGF0aCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb2xkZXJQYXRoID0gYXBwUGF0aC5zdWJzdHJpbmcoMCwgaWR4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9sZGVyUGF0aCA9IENvcmUudHJpbUxlYWRpbmcoZm9sZGVyUGF0aCwgXCIvXCIpO1xyXG4gICAgICAgICAgICAgIHZhciBmb2xkZXIgPSBmb2xkZXJNYXBbZm9sZGVyUGF0aF07XHJcbiAgICAgICAgICAgICAgaWYgKCFmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgIGZvbGRlciA9IHtcclxuICAgICAgICAgICAgICAgICAgcGF0aDogZm9sZGVyUGF0aCxcclxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIGFwcHM6IFtdXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgZm9sZGVycy5wdXNoKGZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICBmb2xkZXJNYXBbZm9sZGVyUGF0aF0gPSBmb2xkZXI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvbGRlci5hcHBzLnB1c2goYXBwSW5mbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5hcHBGb2xkZXJzID0gXy5zb3J0QnkoZm9sZGVycywgXCJwYXRoXCIpO1xyXG5cclxuICAgICAgICAgIHZhciBhcHBzID0gW107XHJcbiAgICAgICAgICB2YXIgZGVmYXVsdEluZm8gPSB7XHJcbiAgICAgICAgICAgICRpY29uVXJsOiBkZWZhdWx0SWNvblVybFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2godGhpcy5hcHBWaWV3cywgKGFwcFZpZXc6YW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgdmFyIGFwcFBhdGggPSBhcHBWaWV3LmFwcFBhdGg7XHJcblxyXG4gICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgIFRPRE9cclxuICAgICAgICAgICAgICAgYXBwVmlldy4kc2VsZWN0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICBLdWJlcm5ldGVzLnNldEpzb24oJHNjb3BlLCBhcHBWaWV3LmlkLCAkc2NvcGUubW9kZWwuYXBwcyk7XHJcbiAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICovXHJcblxyXG4gICAgICAgICAgICAgIHZhciBhcHBJbmZvOmFueSA9IGFuZ3VsYXIuY29weShkZWZhdWx0SW5mbyk7XHJcbiAgICAgICAgICAgICAgaWYgKGFwcFBhdGgpIHtcclxuICAgICAgICAgICAgICAgIGFwcEluZm8gPSBhcHBNYXBbYXBwUGF0aF0gfHwgYXBwSW5mbztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKCFhcHBWaWV3LiRpbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBhcHBWaWV3LiRpbmZvID0gZGVmYXVsdEluZm87XHJcbiAgICAgICAgICAgICAgICBhcHBWaWV3LiRpbmZvID0gYXBwSW5mbztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYXBwVmlldy5pZCA9IGFwcFBhdGg7XHJcbiAgICAgICAgICAgICAgaWYgKCFhcHBWaWV3LiRuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBhcHBWaWV3LiRuYW1lID0gYXBwSW5mby5uYW1lIHx8IGFwcFZpZXcuJG5hbWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghYXBwVmlldy4kaWNvblVybCkge1xyXG4gICAgICAgICAgICAgICAgYXBwVmlldy4kaWNvblVybCA9IGFwcEluZm8uJGljb25Vcmw7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGFwcHMucHVzaChhcHBWaWV3KTtcclxuICAgICAgICAgICAgICBhcHBWaWV3LiRwb2RDb3VudGVycyA9IGNyZWF0ZUFwcFZpZXdQb2RDb3VudGVycyhhcHBWaWV3KTtcclxuICAgICAgICAgICAgICBhcHBWaWV3LiRwb2RDb3VudCA9IChhcHBWaWV3LnBvZHMgfHwgW10pLmxlbmd0aDtcclxuICAgICAgICAgICAgICBhcHBWaWV3LiRyZXBsaWNhdGlvbkNvbnRyb2xsZXJzVGV4dCA9IChhcHBWaWV3LnJlcGxpY2F0aW9uQ29udHJvbGxlcnMgfHwgW10pLm1hcCgoaSkgPT4gaVtcIl9rZXlcIl0pLmpvaW4oXCIgXCIpO1xyXG4gICAgICAgICAgICAgIGFwcFZpZXcuJHNlcnZpY2VzVGV4dD0gKGFwcFZpZXcuc2VydmljZXMgfHwgW10pLm1hcCgoaSkgPT4gaVtcIl9rZXlcIl0pLmpvaW4oXCIgXCIpO1xyXG4gICAgICAgICAgICAgIGFwcFZpZXcuJHNlcnZpY2VWaWV3cyA9IGNyZWF0ZUFwcFZpZXdTZXJ2aWNlVmlld3MoYXBwVmlldyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byB1cGRhdGUgYXBwVmlld3M6IFwiICsgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy90aGlzLmFwcHMgPSBhcHBzO1xyXG4gICAgICAgICAgdGhpcy5hcHBzID0gdGhpcy5hcHBWaWV3cztcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBsb2cud2FybihcIkNhdWdodCBlcnJvcjogXCIgKyBlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBkaXNjb3ZlclBvZENvbm5lY3Rpb25zKGVudGl0eSkge1xyXG4gICAgICB2YXIgaW5mbyA9IENvcmUucGF0aEdldChlbnRpdHksIFtcInN0YXR1c1wiLCBcImluZm9cIl0pO1xyXG4gICAgICB2YXIgaG9zdFBvcnQgPSBudWxsO1xyXG4gICAgICB2YXIgY3VycmVudFN0YXRlID0gZW50aXR5LnN0YXR1cyB8fCB7fTtcclxuICAgICAgdmFyIGRlc2lyZWRTdGF0ZSA9IGVudGl0eS5zcGVjIHx8IHt9O1xyXG4gICAgICB2YXIgcG9kSWQgPSBnZXROYW1lKGVudGl0eSk7XHJcbiAgICAgIHZhciBob3N0ID0gY3VycmVudFN0YXRlW1wiaG9zdElQXCJdO1xyXG4gICAgICB2YXIgcG9kSVAgPSBjdXJyZW50U3RhdGVbXCJwb2RJUFwiXTtcclxuICAgICAgdmFyIGhhc0RvY2tlciA9IGZhbHNlO1xyXG4gICAgICB2YXIgZm91bmRDb250YWluZXJQb3J0ID0gbnVsbDtcclxuICAgICAgaWYgKGRlc2lyZWRTdGF0ZSkge1xyXG4gICAgICAgIHZhciBjb250YWluZXJzID0gZGVzaXJlZFN0YXRlLmNvbnRhaW5lcnM7XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKGNvbnRhaW5lcnMsIChjb250YWluZXIpID0+IHtcclxuICAgICAgICAgIGlmICghaG9zdFBvcnQpIHtcclxuICAgICAgICAgICAgdmFyIHBvcnRzID0gY29udGFpbmVyLnBvcnRzO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocG9ydHMsIChwb3J0KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFob3N0UG9ydCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lclBvcnQgPSBwb3J0LmNvbnRhaW5lclBvcnQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgcG9ydE5hbWUgPSBwb3J0Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVySG9zdFBvcnQgPSBwb3J0Lmhvc3RQb3J0O1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lclBvcnQgPT09IDg3NzggfHwgXCJqb2xva2lhXCIgPT09IHBvcnROYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXJQb3J0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvZElQKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3VuZENvbnRhaW5lclBvcnQgPSBjb250YWluZXJQb3J0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVySG9zdFBvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGhvc3RQb3J0ID0gY29udGFpbmVySG9zdFBvcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZm91bmRDb250YWluZXJQb3J0ICYmIHBvZElkICYmIGlzUnVubmluZyhjdXJyZW50U3RhdGUpKSB7XHJcbiAgICAgICAgaWYgKCFLdWJlcm5ldGVzLmlzT3BlblNoaWZ0KSB7XHJcbiAgICAgICAgICAvLyBUT0RPIHRlbXAgd29ya2Fyb3VuZCBmb3IgazhzIG9uIEdLRSBodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9rdWJlcm5ldGVzL2lzc3Vlcy8xNzE3MlxyXG4gICAgICAgICAgZW50aXR5LiRqb2xva2lhVXJsID0gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXMubWFzdGVyQXBpVXJsKCksXHJcbiAgICAgICAgICAgICAgXCJhcGlcIixcclxuICAgICAgICAgICAgICBLdWJlcm5ldGVzLmRlZmF1bHRBcGlWZXJzaW9uLFxyXG4gICAgICAgICAgICAgIFwicHJveHlcIixcclxuICAgICAgICAgICAgICBcIm5hbWVzcGFjZXNcIixcclxuICAgICAgICAgICAgICBlbnRpdHkubWV0YWRhdGEubmFtZXNwYWNlICxcclxuICAgICAgICAgICAgICBcInBvZHNcIixcclxuICAgICAgICAgICAgICAvL1wiaHR0cHM6XCIgKyBwb2RJZCArIFwiOlwiICsgZm91bmRDb250YWluZXJQb3J0LFxyXG4gICAgICAgICAgICAgIHBvZElkICsgXCI6XCIgKyBmb3VuZENvbnRhaW5lclBvcnQsXHJcbiAgICAgICAgICAgICAgXCJqb2xva2lhL1wiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZW50aXR5LiRqb2xva2lhVXJsID0gVXJsSGVscGVycy5qb2luKEt1YmVybmV0ZXMubWFzdGVyQXBpVXJsKCksXHJcbiAgICAgICAgICAgICAgXCJhcGlcIixcclxuICAgICAgICAgICAgICBLdWJlcm5ldGVzLmRlZmF1bHRBcGlWZXJzaW9uLFxyXG4gICAgICAgICAgICAgIFwibmFtZXNwYWNlc1wiLFxyXG4gICAgICAgICAgICAgIGVudGl0eS5tZXRhZGF0YS5uYW1lc3BhY2UgLFxyXG4gICAgICAgICAgICAgIFwicG9kc1wiLFxyXG4gICAgICAgICAgICAgIFwiaHR0cHM6XCIgKyBwb2RJZCArIFwiOlwiICsgZm91bmRDb250YWluZXJQb3J0LFxyXG4gICAgICAgICAgICAgIFwicHJveHkvam9sb2tpYS9cIik7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0VGVtcGxhdGVTZXJ2aWNlKG1vZGVsKSB7XHJcbiAgICB2YXIga2V5ID0gY3JlYXRlS2V5KCdkZWZhdWx0JywgJ3RlbXBsYXRlcycsICdzZXJ2aWNlJyk7XHJcbiAgICB2YXIgYW5zd2VyID0gbW9kZWwuc2VydmljZXNCeUtleVtrZXldO1xyXG4gICAgbG9nLmRlYnVnKFwiZm91bmQgdGVtcGxhdGUgc2VydmljZTogXCIsIGFuc3dlcik7XHJcbiAgICByZXR1cm4gYW5zd2VyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIG1vZGVsIHNlcnZpY2Ugd2hpY2gga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBwb2RzLCByZXBsaWNhdGlvbiBjb250cm9sbGVycyBhbmQgc2VydmljZXMgYWxvbmdcclxuICAgKiB3aXRoIHRoZWlyIGFzc29jaWF0aW9ucyBhbmQgc3RhdHVzXHJcbiAgICovXHJcbiAgX21vZHVsZS5mYWN0b3J5KCdLdWJlcm5ldGVzTW9kZWwnLCBbJyRyb290U2NvcGUnLCAnJGh0dHAnLCAnS3ViZXJuZXRlc0FwaVVSTCcsICdLdWJlcm5ldGVzU3RhdGUnLCAnV2F0Y2hlclNlcnZpY2UnLCAnJGxvY2F0aW9uJywgJyRyZXNvdXJjZScsICgkcm9vdFNjb3BlLCAkaHR0cCwgQXBwTGlicmFyeVVSTCwgS3ViZXJuZXRlc1N0YXRlLCB3YXRjaGVyOldhdGNoZXJTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJlc291cmNlOm5nLnJlc291cmNlLklSZXNvdXJjZVNlcnZpY2UpID0+IHtcclxuXHJcbiAgICB2YXIgJHNjb3BlID0gbmV3IEt1YmVybmV0ZXNNb2RlbFNlcnZpY2UoKTtcclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG5cclxuICAgIC8vIGNyZWF0ZSBhbGwgb2Ygb3VyIHJlc291cmNlIGNsYXNzZXNcclxuICAgIHZhciB0eXBlTmFtZXMgPSB3YXRjaGVyLmdldFR5cGVzKCk7XHJcbiAgICBfLmZvckVhY2godHlwZU5hbWVzLCAodHlwZTpzdHJpbmcpID0+IHtcclxuICAgICAgdmFyIHVybFRlbXBsYXRlID0gdXJpVGVtcGxhdGVGb3JLdWJlcm5ldGVzS2luZCh0eXBlKTtcclxuICAgICAgJHNjb3BlW3R5cGUgKyAnUmVzb3VyY2UnXSA9IGNyZWF0ZVJlc291cmNlKHR5cGUsIHVybFRlbXBsYXRlLCAkcmVzb3VyY2UsICRzY29wZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIWlzT3BlblNoaWZ0KSB7XHJcbiAgICAgIC8vIHJlZ2lzdGVyIGN1c3RvbSBVUkwgZmFjdG9yaWVzIGZvciB0ZW1wbGF0ZXMvcHJvamVjdHNcclxuICAgICAgd2F0Y2hlci5yZWdpc3RlckN1c3RvbVVybEZ1bmN0aW9uKEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5CVUlMRF9DT05GSUdTLCAob3B0aW9uczpLdWJlcm5ldGVzQVBJLks4U09wdGlvbnMpID0+IHtcclxuICAgICAgICB2YXIgdGVtcGxhdGVTZXJ2aWNlID0gZ2V0VGVtcGxhdGVTZXJ2aWNlKCRzY29wZSk7XHJcbiAgICAgICAgaWYgKHRlbXBsYXRlU2VydmljZSkge1xyXG4gICAgICAgICAgcmV0dXJuIFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVNlcnZpY2UucHJveHlVcmwsICcvb2FwaS92MS9uYW1lc3BhY2VzL2RlZmF1bHQvYnVpbGRjb25maWdzLycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIHJlZ2lzdGVyIGN1c3RvbSBVUkwgZmFjdG9yaWVzIGZvciB0ZW1wbGF0ZXMvcHJvamVjdHNcclxuICAgICAgd2F0Y2hlci5yZWdpc3RlckN1c3RvbVVybEZ1bmN0aW9uKEt1YmVybmV0ZXNBUEkuV2F0Y2hUeXBlcy5URU1QTEFURVMsIChvcHRpb25zOkt1YmVybmV0ZXNBUEkuSzhTT3B0aW9ucykgPT4ge1xyXG4gICAgICAgIHZhciB0ZW1wbGF0ZVNlcnZpY2UgPSBnZXRUZW1wbGF0ZVNlcnZpY2UoJHNjb3BlKTtcclxuICAgICAgICBpZiAodGVtcGxhdGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgICByZXR1cm4gVXJsSGVscGVycy5qb2luKHRlbXBsYXRlU2VydmljZS5wcm94eVVybCwgJy9vYXBpL3YxL25hbWVzcGFjZXMvZGVmYXVsdC90ZW1wbGF0ZXMvJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyByZWdpc3RlciBmb3IgYWxsIHVwZGF0ZXMgb24gb2JqZWN0c1xyXG5cdFx0d2F0Y2hlci5yZWdpc3Rlckxpc3RlbmVyKChvYmplY3RzOk9iamVjdE1hcCkgPT4ge1xyXG5cdFx0XHR2YXIgdHlwZXMgPSB3YXRjaGVyLmdldFR5cGVzKCk7XHJcblx0XHRcdF8uZm9yRWFjaCh0eXBlcywgKHR5cGU6c3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0XHRjYXNlIFdhdGNoVHlwZXMuU0VSVklDRVM6XHJcblx0XHRcdFx0XHRcdHZhciBpdGVtcyA9IHBvcHVsYXRlS2V5cyhvYmplY3RzW3R5cGVdKTtcclxuXHRcdFx0XHRcdFx0YW5ndWxhci5mb3JFYWNoKGl0ZW1zLCAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIGl0ZW0ucHJveHlVcmwgPSBrdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlKGt1YmVybmV0ZXNBcGlVcmwoKSwgaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cdFx0XHRcdFx0XHQkc2NvcGVbdHlwZV0gPSBpdGVtcztcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFdhdGNoVHlwZXMuVEVNUExBVEVTOlxyXG4gICAgICAgICAgY2FzZSBXYXRjaFR5cGVzLlJPVVRFUzpcclxuICAgICAgICAgIGNhc2UgV2F0Y2hUeXBlcy5CVUlMRFM6XHJcbiAgICAgICAgICBjYXNlIFdhdGNoVHlwZXMuQlVJTERfQ09ORklHUzpcclxuICAgICAgICAgIGNhc2UgV2F0Y2hUeXBlcy5JTUFHRV9TVFJFQU1TOlxyXG4gICAgICAgICAgICAvLyBkb24ndCBwdXQgYSBicmVhayBoZXJlIDotKVxyXG5cdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0JHNjb3BlW3R5cGVdID0gcG9wdWxhdGVLZXlzKG9iamVjdHNbdHlwZV0pO1xyXG5cdFx0XHRcdH1cclxuICAgICAgICBsb2cuZGVidWcoXCJUeXBlOiBcIiwgdHlwZSwgXCIgb2JqZWN0OiBcIiwgJHNjb3BlW3R5cGVdKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdCRzY29wZS5tYXliZUluaXQoKTtcclxuICAgICAgJHJvb3RTY29wZS4kYnJvYWRjYXN0KCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgJHNjb3BlKTtcclxuICAgICAgQ29yZS4kYXBwbHkoJHJvb3RTY29wZSk7XHJcblx0XHR9KTtcclxuXHJcbiAgICAvLyBzZXQgdGhlIHNlbGVjdGVkIG5hbWVzcGFjZSBpZiBzZXQgaW4gdGhlIGxvY2F0aW9uIGJhclxyXG4gICAgLy8gb3RoZXJ3aXNlIHVzZSB3aGF0ZXZlciBwcmV2aW91c2x5IHNlbGVjdGVkIG5hbWVzcGFjZSBpc1xyXG4gICAgLy8gYXZhaWxhYmxlXHJcbiAgICB2YXIgc2VhcmNoID0gJGxvY2F0aW9uLnNlYXJjaCgpO1xyXG4gICAgaWYgKCduYW1lc3BhY2UnIGluIHNlYXJjaCkge1xyXG4gICAgICB3YXRjaGVyLnNldE5hbWVzcGFjZShzZWFyY2hbJ25hbWVzcGFjZSddKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzZWxlY3RQb2RzKHBvZHMsIG5hbWVzcGFjZSwgbGFiZWxzKSB7XHJcbiAgICAgIHJldHVybiBwb2RzLmZpbHRlcigocG9kKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGdldE5hbWVzcGFjZShwb2QpID09PSBuYW1lc3BhY2UgJiYgc2VsZWN0b3JNYXRjaGVzKGxhYmVscywgZ2V0TGFiZWxzKHBvZCkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiAkc2NvcGU7XHJcbiAgfV0pO1xyXG5cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSW50ZXJmYWNlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc01vZGVsLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IGZ1bmN0aW9uIGNsaWNrQXBwcm92ZShlbGVtZW50LCB1cmwpIHtcclxuICAgIHZhciAkc2NvcGU6IGFueSA9IGFuZ3VsYXIuZWxlbWVudChlbGVtZW50KS5zY29wZSgpO1xyXG4gICAgaWYgKCRzY29wZSkge1xyXG4gICAgICAkc2NvcGUuYXBwcm92ZSh1cmwsIGVsZW1lbnQudGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleHBvcnQgdmFyIEplbmtpbnNMb2dDb250cm9sbGVyID0gX21vZHVsZS5jb250cm9sbGVyKFwiRGV2ZWxvcGVyLkplbmtpbnNMb2dDb250cm9sbGVyXCIsICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgJG1vZGFsLCBLdWJlcm5ldGVzQXBpVVJMLCBTZXJ2aWNlUmVnaXN0cnksICRlbGVtZW50KSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcblxyXG4gICAgJHNjb3BlLnNlbGVjdGVkQnVpbGQgPSAkc2NvcGUuJGV2YWwoJ2J1aWxkJykgfHwgJHNjb3BlLiRldmFsKCdzZWxlY3RlZEJ1aWxkJyk7XHJcblxyXG4gICAgJHNjb3BlLmlkID0gJHNjb3BlLiRldmFsKCdidWlsZC5pZCcpIHx8ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XHJcblxyXG4gICAgJGVsZW1lbnQub24oJyRkZXN0cm95JywgKCkgPT4ge1xyXG4gICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS5sb2cgPSB7XHJcbiAgICAgIGh0bWw6IFwiXCIsXHJcbiAgICAgIHN0YXJ0OiAwLFxyXG4gICAgICBmaXJzdElkeDogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICB1cGRhdGVKZW5raW5zTGluaygpO1xyXG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLiRvbignamVua2luc1NlbGVjdGVkQnVpbGQnLCAoZXZlbnQsIGJ1aWxkKSA9PiB7XHJcbiAgICAgIGxvZy5pbmZvKFwiPT09PSBqZW5raW5zIGJ1aWxkIHNlbGVjdGVkISBcIiArIGJ1aWxkLmlkICsgXCIgXCIgKyBidWlsZC4kam9iSWQpO1xyXG4gICAgICAkc2NvcGUuc2VsZWN0ZWRCdWlsZCA9IGJ1aWxkO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgICRzY29wZS4kd2F0Y2goJ3NlbGVjdGVkQnVpbGQnLCAoc2VsZWN0ZWRCdWlsZCkgPT4ge1xyXG4gICAgICBsb2cuaW5mbyhcIlNlbGVjdGVkIGJ1aWxkIHVwZGF0ZWQ6IFwiLCBzZWxlY3RlZEJ1aWxkKTtcclxuICAgICAgJHNjb3BlLmZldGNoKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IGNyZWF0ZUplbmtpbnNCcmVhZGNydW1icygkc2NvcGUuaWQsIGdldEpvYklkKCksIGdldEJ1aWxkSWQoKSk7XHJcbiAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gY3JlYXRlSmVua2luc1N1Yk5hdkJhcnMoJHNjb3BlLmlkLCBnZXRKb2JJZCgpLCBnZXRCdWlsZElkKCksIHtcclxuICAgICAgbGFiZWw6IFwiTG9nXCIsXHJcbiAgICAgIHRpdGxlOiBcIlZpZXdzIHRoZSBsb2dzIG9mIHRoaXMgYnVpbGRcIlxyXG4gICAgfSk7XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0Sm9iSWQoKSB7XHJcbiAgICAgIC8vIGxldHMgYWxsb3cgdGhlIHBhcmVudCBzY29wZSB0byBiZSB1c2VkIHRvbyBmb3Igd2hlbiB0aGlzIGlzIHVzZWQgYXMgYSBwYW5lbFxyXG4gICAgICByZXR1cm4gJHJvdXRlUGFyYW1zW1wiam9iXCJdIHx8ICgkc2NvcGUuc2VsZWN0ZWRCdWlsZCB8fCB7fSkuJGpvYklkO1xyXG4gICAgfVxyXG4gICAgJHNjb3BlLmdldEpvYklkID0gZ2V0Sm9iSWQ7XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0QnVpbGRJZCgpIHtcclxuICAgICAgLy8gbGV0cyBhbGxvdyB0aGUgcGFyZW50IHNjb3BlIHRvIGJlIHVzZWQgdG9vIGZvciB3aGVuIHRoaXMgaXMgdXNlZCBhcyBhIHBhbmVsXHJcbiAgICAgIHJldHVybiAkcm91dGVQYXJhbXNbXCJidWlsZFwiXSB8fCAoJHNjb3BlLnNlbGVjdGVkQnVpbGQgfHwge30pLmlkO1xyXG4gICAgfVxyXG4gICAgJHNjb3BlLmdldEJ1aWxkSWQgPSBnZXRCdWlsZElkO1xyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZUplbmtpbnNMaW5rKCkge1xyXG4gICAgICB2YXIgamVua2luc1VybCA9IGplbmtpbnNMaW5rKCk7XHJcbiAgICAgIGlmIChqZW5raW5zVXJsKSB7XHJcbiAgICAgICAgJHNjb3BlLiR2aWV3SmVua2luc0J1aWxkTGluayA9IFVybEhlbHBlcnMuam9pbihqZW5raW5zVXJsLCBcImpvYlwiLCBnZXRKb2JJZCgpLCBnZXRCdWlsZElkKCkpO1xyXG4gICAgICAgICRzY29wZS4kdmlld0plbmtpbnNMb2dMaW5rID0gVXJsSGVscGVycy5qb2luKCRzY29wZS4kdmlld0plbmtpbnNCdWlsZExpbmssIFwiY29uc29sZVwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBxdWVyeVNpemUgPSA1MDAwMDtcclxuXHJcbiAgICAkc2NvcGUuYXBwcm92ZSA9ICh1cmwsIG9wZXJhdGlvbikgPT4ge1xyXG4gICAgICB2YXIgbW9kYWwgPSAkbW9kYWwub3Blbih7XHJcbiAgICAgIHRlbXBsYXRlVXJsOiBVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCAnamVua2luc0FwcHJvdmVNb2RhbC5odG1sJyksXHJcbiAgICAgIGNvbnRyb2xsZXI6IFsnJHNjb3BlJywgJyRtb2RhbEluc3RhbmNlJywgKCRzY29wZSwgJG1vZGFsSW5zdGFuY2UpID0+IHtcclxuICAgICAgICAkc2NvcGUub3BlcmF0aW9uID0gb3BlcmF0aW9uO1xyXG4gICAgICAgICRzY29wZS5oZWFkZXIgPSBvcGVyYXRpb24gKyBcIj9cIjtcclxuICAgICAgICAkc2NvcGUub2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICBtb2RhbC5jbG9zZSgpO1xyXG4gICAgICAgICAgcG9zdFRvSmVua2lucyh1cmwsIG9wZXJhdGlvbik7XHJcbiAgICAgICAgfTtcclxuICAgICAgICAkc2NvcGUuY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgbW9kYWwuZGlzbWlzcygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1dXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBwb3N0VG9KZW5raW5zKHVyaSwgb3BlcmF0aW9uKSB7XHJcbiAgICAgIHZhciB1cmwgPSAgS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCB1cmkpO1xyXG4gICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgdmFyIGJvZHkgPSBudWxsO1xyXG4gICAgICAgIHZhciBjb25maWcgPSB7XHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGxvZy5pbmZvKFwicG9zdGluZyB0byBqZW5raW5zVXJsOiBcIiArIHVybCk7XHJcbiAgICAgICAgJGh0dHAucG9zdCh1cmwsIGJvZHksIGNvbmZpZykuXHJcbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBsb2cuaW5mbyhcIk1hbmFnZWQgdG8gXCIgKyBvcGVyYXRpb24gKyBcIiBhdCBcIiArIHVybCk7XHJcbiAgICAgICAgICB9KS5cclxuICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIFwiICsgb3BlcmF0aW9uICsgXCIgam9iIGF0IFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxvZy53YXJuKFwiQ2Fubm90IHBvc3QgdG8gamVua2lucyBVUkk6IFwiICsgdXJpICsgXCIgYXMgbm8gamVua2lucyBmb3VuZCFcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuJGtlZXBQb2xsaW5nID0gKCkgPT4gS3ViZXJuZXRlcy5rZWVwUG9sbGluZ01vZGVsO1xyXG5cclxuICAgICRzY29wZS5mZXRjaCA9IFBvbGxIZWxwZXJzLnNldHVwUG9sbGluZygkc2NvcGUsIChuZXh0OigpID0+IHZvaWQpID0+IHtcclxuICAgICAgaWYgKCRzY29wZS4kZXZhbCgnaGlkZUxvZ3MgJiYgIWJ1aWxkLmJ1aWxkaW5nJykpIHtcclxuICAgICAgICBsb2cuZGVidWcoXCJMb2cgaGlkZGVuLCBub3QgZmV0Y2hpbmcgbG9nc1wiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKFwiRmV0Y2hpbmcgbG9ncyBmb3IgYnVpbGQ6IFwiLCAkc2NvcGUuJGV2YWwoJ2J1aWxkJykpO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBidWlsZElkID0gZ2V0QnVpbGRJZCgpO1xyXG4gICAgICB2YXIgam9iSWQgPSBnZXRKb2JJZCgpO1xyXG4gICAgICAvL2xvZy5pbmZvKFwiPT09IGplbmtpbnMgbG9nIHF1ZXJ5aW5nIGpvYiBcIiArIGpvYklkICsgXCIgYnVpbGQgXCIgKyBidWlsZElkICsgXCIgc2VsZWN0ZWQgYnVpbGQgXCIgKyAgJHNjb3BlLnNlbGVjdGVkQnVpbGQpO1xyXG4gICAgICBpZiAoam9iSWQgJiYgYnVpbGRJZCkge1xyXG4gICAgICAgIGlmICgkc2NvcGUuYnVpbGRJZCAhPT0gYnVpbGRJZCB8fCAkc2NvcGUuam9iSWQgIT09IGpvYklkKSB7XHJcbiAgICAgICAgICAvLyBsZXRzIGNsZWFyIHRoZSBxdWVyeVxyXG4gICAgICAgICAgJHNjb3BlLmxvZyA9IHtcclxuICAgICAgICAgICAgaHRtbDogXCJcIixcclxuICAgICAgICAgICAgc3RhcnQ6IDAsXHJcbiAgICAgICAgICAgIGZpcnN0SWR4OiBudWxsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICAkc2NvcGUuYnVpbGRJZCA9IGJ1aWxkSWQ7XHJcbiAgICAgICAgJHNjb3BlLmpvYklkID0gam9iSWQ7XHJcblxyXG4gICAgICAgIHZhciB1cmwgPSBLdWJlcm5ldGVzLmt1YmVybmV0ZXNQcm94eVVybEZvclNlcnZpY2VDdXJyZW50TmFtZXNwYWNlKGplbmtpbnNTZXJ2aWNlTmFtZUFuZFBvcnQsIFVybEhlbHBlcnMuam9pbihcImpvYlwiLCBqb2JJZCwgYnVpbGRJZCwgXCJmYWJyaWM4L2xvZ0h0bWw/dGFpbD0xJnN0YXJ0PVwiICsgJHNjb3BlLmxvZy5zdGFydCArIFwiJnNpemU9XCIgKyBxdWVyeVNpemUpKTtcclxuICAgICAgICBpZiAoJHNjb3BlLmxvZy5maXJzdElkeCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdXJsICs9IFwiJmZpcnN0PVwiICsgJHNjb3BlLmxvZy5maXJzdElkeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVybCAmJiAoISRzY29wZS5sb2cuZmV0Y2hlZCB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XHJcbiAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlcGxhY2VDbHVzdGVySVBzSW5IdG1sID0gcmVwbGFjZUNsdXN0ZXJJcEZ1bmN0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCEkc2NvcGUubG9nLmxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5sb2dzID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBkYXRhLmxpbmVzO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJldHVybmVkTGVuZ3RoID0gZGF0YS5yZXR1cm5lZExlbmd0aDtcclxuICAgICAgICAgICAgICAgIHZhciBsb2dMZW5ndGggPSBkYXRhLmxvZ0xlbmd0aDtcclxuICAgICAgICAgICAgICAgIHZhciByZXR1cm5lZFN0YXJ0ID0gZGF0YS5zdGFydDtcclxuICAgICAgICAgICAgICAgIHZhciBlYXJsaWVyTG9nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQocmV0dXJuZWRTdGFydCkpIHtcclxuICAgICAgICAgICAgICAgICAgZWFybGllckxvZyA9IHJldHVybmVkU3RhcnQgPCAkc2NvcGUubG9nLnN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGxpbmVTcGxpdCA9IGRhdGEubGluZVNwbGl0O1xyXG4gICAgICAgICAgICAgICAgLy8gbG9nLmluZm8oXCJzdGFydCB3YXM6IFwiICsgJHNjb3BlLmxvZy5zdGFydCArIFwiIGZpcnN0OiBcIiArICRzY29wZS5sb2cuZmlyc3RJZHggKyBcIiA9PiByZXR1cm5lZExlbmd0aDogXCIgKyByZXR1cm5lZExlbmd0aCArIFwiIGxvZ0xlbmd0aDogXCIgKyBsb2dMZW5ndGggKyAgXCIgcmV0dXJuZWRTdGFydDogXCIgKyByZXR1cm5lZFN0YXJ0ICsgXCIgZWFybGllckxvZzogXCIgKyBlYXJsaWVyTG9nICsgXCIgbGluZVNwbGl0OiBcIiArIGxpbmVTcGxpdCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGluZXMpIHtcclxuICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRMb2dzID0gJHNjb3BlLmxvZy5sb2dzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gbGV0cyByZS1qb2luIHNwbGl0IGxpbmVzXHJcbiAgICAgICAgICAgICAgICAgIGlmIChsaW5lU3BsaXQgJiYgY3VycmVudExvZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdE9mTGluZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWFybGllckxvZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc3RPZkxpbmUgPSBsaW5lcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN0T2ZMaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2dzW2xhc3RJbmRleF0gPSByZXBsYWNlQ2x1c3RlcklQc0luSHRtbChyZXN0T2ZMaW5lICsgY3VycmVudExvZ3NbbGFzdEluZGV4XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGN1cnJlbnRMb2dzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXN0T2ZMaW5lID0gbGluZXMuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN0T2ZMaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2dzW2xhc3RJbmRleF0gPSByZXBsYWNlQ2x1c3RlcklQc0luSHRtbChjdXJyZW50TG9nc1tsYXN0SW5kZXhdICsgcmVzdE9mTGluZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lc1tpXSA9IHJlcGxhY2VDbHVzdGVySVBzSW5IdG1sKGxpbmVzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoZWFybGllckxvZykge1xyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cubG9ncyA9IGxpbmVzLmNvbmNhdChjdXJyZW50TG9ncyk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5sb2dzID0gY3VycmVudExvZ3MuY29uY2F0KGxpbmVzKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG1vdmVGb3J3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChyZXR1cm5lZFN0YXJ0KSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmV0dXJuZWRTdGFydCA+ICRzY29wZS5sb2cuc3RhcnQgJiYgJHNjb3BlLmxvZy5zdGFydCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlJ3ZlIGp1bXBlZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIHRvIHJlYWQgdGhlIHRhaWwgb2YgaXRcclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLnN0YXJ0ID0gcmV0dXJuZWRTdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAkc2NvcGUubG9nLmZpcnN0SWR4ID0gcmV0dXJuZWRTdGFydDtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkc2NvcGUubG9nLmZpcnN0SWR4ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyByZW1lbWJlciB3aGVyZSB0aGUgZmlyc3QgcmVxdWVzdCBzdGFydGVkXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5maXJzdElkeCA9IHJldHVybmVkU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dXJuZWRTdGFydCA8ICRzY29wZS5sb2cuZmlyc3RJZHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSd2ZSBnb3QgYW4gZWFybGllciBiaXQgb2YgdGhlIGxvZ1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHN0YXJ0aW5nIGF0IHRoZSB0YWlsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gbGV0cyBtb3ZlIGZpcnN0SWR4IGJhY2t3YXJkcyBhbmQgbGVhdmUgc3RhcnQgYXMgaXQgaXMgKGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUpXHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmxvZy5maXJzdElkeCA9IHJldHVybmVkU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbW92ZUZvcndhcmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1vdmVGb3J3YXJkICYmIHJldHVybmVkTGVuZ3RoICYmICFlYXJsaWVyTG9nKSB7XHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuc3RhcnQgKz0gcmV0dXJuZWRMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChsb2dMZW5ndGggJiYgJHNjb3BlLmxvZy5zdGFydCA+IGxvZ0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICRzY29wZS5sb2cuc3RhcnQgPSBsb2dMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHVwZGF0ZUplbmtpbnNMaW5rKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICRzY29wZS5sb2cuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgLy8gQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkc2NvcGUubG9nLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgbmV4dCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKCRzY29wZS5mZXRjaCkpIHtcclxuICAgICAgJHNjb3BlLmZldGNoKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2VDbHVzdGVySXBGdW5jdGlvbigpIHtcclxuICAgICAgZnVuY3Rpb24gY3JlYXRlUmVwbGFjZUZ1bmN0aW9uKGZyb20sIHRvKSB7XHJcbiAgICAgICAgcmV0dXJuICh0ZXh0KSA9PiByZXBsYWNlVGV4dCh0ZXh0LCBmcm9tLCB0byk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciByZXBsYWNlbWVudHMgPSBbXTtcclxuICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5tb2RlbC5zZXJ2aWNlcywgKHNlcnZpY2UpID0+IHtcclxuICAgICAgICB2YXIgJHBvcnRhbElQID0gc2VydmljZS4kcG9ydGFsSVA7XHJcbiAgICAgICAgdmFyICRzZXJ2aWNlVXJsID0gc2VydmljZS4kc2VydmljZVVybDtcclxuICAgICAgICB2YXIgJHBvcnRzVGV4dCA9IHNlcnZpY2UuJHBvcnRzVGV4dDtcclxuICAgICAgICBpZiAoJHBvcnRhbElQICYmICRzZXJ2aWNlVXJsKSB7XHJcbiAgICAgICAgICB2YXIgaWR4ID0gJHNlcnZpY2VVcmwuaW5kZXhPZihcIjovL1wiKTtcclxuICAgICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciByZXBsYWNlV2l0aCA9ICRzZXJ2aWNlVXJsLnN1YnN0cmluZyhpZHgsICRzZXJ2aWNlVXJsLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmICghcmVwbGFjZVdpdGguZW5kc1dpdGgoXCIvXCIpKSB7XHJcbiAgICAgICAgICAgICAgcmVwbGFjZVdpdGggKz0gXCIvXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlcGxhY2VXaXRoLmxlbmd0aCA+IDQpIHtcclxuICAgICAgICAgICAgICByZXBsYWNlbWVudHMucHVzaChjcmVhdGVSZXBsYWNlRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgXCI6Ly9cIiArICRwb3J0YWxJUCArIFwiL1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoXHJcbiAgICAgICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgaWYgKCRwb3J0c1RleHQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzdWZmaXggPSBcIjpcIiArICRwb3J0c1RleHQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VydmljZVdpdGhQb3J0ID0gcmVwbGFjZVdpdGguc3Vic3RyaW5nKDAsIHJlcGxhY2VXaXRoLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzZXJ2aWNlV2l0aFBvcnQuZW5kc1dpdGgoc3VmZml4KSkge1xyXG4gICAgICAgICAgICAgICAgICBzZXJ2aWNlV2l0aFBvcnQgKz0gc3VmZml4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VydmljZVdpdGhQb3J0ICs9IFwiL1wiO1xyXG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2goY3JlYXRlUmVwbGFjZUZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCI6Ly9cIiArICRwb3J0YWxJUCArIFwiOlwiICsgJHBvcnRzVGV4dCArIFwiL1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmljZVdpdGhQb3J0XHJcbiAgICAgICAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZnVuY3Rpb24gYWRkUmVwbGFjZUZuKGZyb20sIHRvKSB7XHJcbiAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2goKHRleHQpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXBsYWNlVGV4dCh0ZXh0LCBmcm9tLCB0byk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGFkZFJlcGxhY2VGbihcIltJTkZPXVwiLCBcIjxzcGFuIGNsYXNzPSdsb2ctc3VjY2Vzcyc+W0lORk9dPC9zcGFuPlwiKTtcclxuICAgICAgYWRkUmVwbGFjZUZuKFwiW1dBUk5dXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy13YXJuJz5bV0FSTl08L3NwYW4+XCIpO1xyXG4gICAgICBhZGRSZXBsYWNlRm4oXCJbV0FSTklOR11cIiwgXCI8c3BhbiBjbGFzcz0nbG9nLXdhcm4nPltXQVJOSU5HXTwvc3Bhbj5cIik7XHJcbiAgICAgIGFkZFJlcGxhY2VGbihcIltFUlJPUl1cIiwgXCI8c3BhbiBjbGFzcz0nbG9nLWVycm9yJz5bRVJST1JdPC9zcGFuPlwiKTtcclxuICAgICAgYWRkUmVwbGFjZUZuKFwiRkFJTFVSRVwiLCBcIjxzcGFuIGNsYXNzPSdsb2ctZXJyb3InPkZBSUxVUkU8L3NwYW4+XCIpO1xyXG4gICAgICBhZGRSZXBsYWNlRm4oXCJTVUNDRVNTXCIsIFwiPHNwYW4gY2xhc3M9J2xvZy1zdWNjZXNzJz5TVUNDRVNTPC9zcGFuPlwiKTtcclxuXHJcbiAgICAgIC8vIGxldHMgdHJ5IGNvbnZlcnQgdGhlIFByb2NlZWQgLyBBYm9ydCBsaW5rc1xyXG4gICAgICByZXBsYWNlbWVudHMucHVzaCgodGV4dCkgPT4ge1xyXG4gICAgICAgIHZhciBwcmVmaXggPSBcIjxhIGhyZWY9JyMnIG9uY2xpY2s9XFxcIm5ldyBBamF4LlJlcXVlc3QoJ1wiO1xyXG4gICAgICAgIHZhciBpZHggPSAwO1xyXG4gICAgICAgIHdoaWxlIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgaWR4ID0gdGV4dC5pbmRleE9mKHByZWZpeCwgaWR4KTtcclxuICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBpZHggKyBwcmVmaXgubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgZW5kUXVvdGUgPSB0ZXh0LmluZGV4T2YoXCInXCIsIHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChlbmRRdW90ZSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGVuZERvdWJsZVF1b3RlID0gdGV4dC5pbmRleE9mKCdcIicsIGVuZFF1b3RlICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChlbmREb3VibGVRdW90ZSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHVybCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmRRdW90ZSk7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gdXNpbmcgJGNvbXBpbGUgaXMgYSB0YWQgY29tcGxleCwgZm9yIG5vdyBsZXRzIGNoZWF0IHdpdGggYSBsaXR0bGUgb25jbGljayA7KVxyXG4gICAgICAgICAgICAvL3RleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBpZHgpICsgXCI8YSBjbGFzcz0nYnRuIGJ0bi1kZWZhdWx0IGJ0bi1sZycgbmctY2xpY2s9XFxcImFwcHJvdmUoJ1wiICsgdXJsICsgXCInKVxcXCJcIiArIHRleHQuc3Vic3RyaW5nKGVuZERvdWJsZVF1b3RlICsgMSk7XHJcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBpZHgpICsgXCI8YSBjbGFzcz0nYnRuIGJ0bi1kZWZhdWx0IGJ0bi1sZycgb25jbGljaz1cXFwiRGV2ZWxvcGVyLmNsaWNrQXBwcm92ZSh0aGlzLCAnXCIgKyB1cmwgKyBcIicpXFxcIlwiICsgdGV4dC5zdWJzdHJpbmcoZW5kRG91YmxlUXVvdGUgKyAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24odGV4dCkge1xyXG4gICAgICAgIHZhciBhbnN3ZXIgPSB0ZXh0O1xyXG4gICAgICAgIGFuZ3VsYXIuZm9yRWFjaChyZXBsYWNlbWVudHMsIChmbikgPT4ge1xyXG4gICAgICAgICAgYW5zd2VyID0gZm4oYW5zd2VyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVwbGFjZVRleHQodGV4dCwgZnJvbSwgdG8pIHtcclxuICAgICAgaWYgKGZyb20gJiYgdG8gJiYgdGV4dCkge1xyXG4gICAgICAgIC8vbG9nLmluZm8oXCJSZXBsYWNpbmcgJ1wiICsgZnJvbSArIFwiJyA9PiAnXCIgKyB0byArIFwiJ1wiKTtcclxuICAgICAgICB2YXIgaWR4ID0gMDtcclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgaWR4ID0gdGV4dC5pbmRleE9mKGZyb20sIGlkeCk7XHJcbiAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGlkeCkgKyB0byArIHRleHQuc3Vic3RyaW5nKGlkeCArIGZyb20ubGVuZ3RoKTtcclxuICAgICAgICAgICAgaWR4ICs9IHRvLmxlbmd0aDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGV4dDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCB2YXIgSmVua2luc01ldHJpY3NDb250cm9sbGVyID0gY29udHJvbGxlcihcIkplbmtpbnNNZXRyaWNzQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAgICAgJHNjb3BlLmpvYklkID0gJHJvdXRlUGFyYW1zW1wiam9iXCJdO1xyXG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgICAgICRzY29wZS5qZW5raW5zID0gbnVsbDtcclxuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XHJcblxyXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuICAgICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLmlkKTtcclxuICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5pZCwgJHNjb3BlLmpvYklkKTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUub3B0aW9ucyA9IHtcclxuICAgICAgICAgIGNoYXJ0OiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdkaXNjcmV0ZUJhckNoYXJ0JyxcclxuICAgICAgICAgICAgYXV0b3JlZnJlc2g6IGZhbHNlLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDQ1MCxcclxuICAgICAgICAgICAgbWFyZ2luOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAyMCxcclxuICAgICAgICAgICAgICByaWdodDogMjAsXHJcbiAgICAgICAgICAgICAgYm90dG9tOiA2MCxcclxuICAgICAgICAgICAgICBsZWZ0OiA0NVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjbGlwRWRnZTogdHJ1ZSxcclxuICAgICAgICAgICAgc3RhZ2dlckxhYmVsczogZmFsc2UsXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogNTAwLFxyXG4gICAgICAgICAgICBzdGFja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXHJcbiAgICAgICAgICAgIHRvb2x0aXA6IHtcclxuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgIGNvbnRlbnRHZW5lcmF0b3I6IChhcmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGFyZ3MuZGF0YSB8fCB7fTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnRvb2x0aXA7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29sb3I6IChkLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGQuY29sb3I7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHhBeGlzOiB7XHJcbiAgICAgICAgICAgICAgYXhpc0xhYmVsOiAnQnVpbGRzJyxcclxuICAgICAgICAgICAgICBzaG93TWF4TWluOiBmYWxzZSxcclxuICAgICAgICAgICAgICB0aWNrRm9ybWF0OiBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiI1wiICsgZDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHlBeGlzOiB7XHJcbiAgICAgICAgICAgICAgYXhpc0xhYmVsOiAnQnVpbGQgRHVyYXRpb24gKHNlY29uZHMpJyxcclxuICAgICAgICAgICAgICB0aWNrRm9ybWF0OiBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGQzLmZvcm1hdCgnLC4xZicpKGQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRzY29wZS5kYXRhID0gW107XHJcblxyXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYmFyQ29sb3VyRm9yQnVpbGRSZXN1bHQocmVzdWx0KSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IFwiRkFJTFVSRVwiIHx8IHJlc3VsdCA9PT0gXCJGQUlMRURcIikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBcInJlZFwiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJBQk9SVEVEXCIgfHwgcmVzdWx0ID09PSBcIklOVEVSVVBURURcIikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBcInRhblwiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJTVUNDRVNTXCIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXCJncmVlblwiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gXCJOT1RfU1RBUlRFRFwiKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFwibGlnaHRncmV5XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIFwiZGFya2dyZXlcIjtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVDaGFydERhdGEoKSB7XHJcbiAgICAgICAgICB2YXIgdXNlU2luZ2xlU2V0ID0gdHJ1ZTtcclxuICAgICAgICAgIHZhciBidWlsZHNTdWNjZWVkZWQgPSBbXTtcclxuICAgICAgICAgIHZhciBidWlsZHNGYWlsZWQgPSBbXTtcclxuICAgICAgICAgIHZhciBzdWNjZXNzQnVpbGRLZXkgPSBcIlN1Y2NlZWRlZCBidWlsZHNcIjtcclxuICAgICAgICAgIHZhciBmYWlsZWRCdWlsZEtleSA9IFwiRmFpbGVkIGJ1aWxkc1wiO1xyXG5cclxuICAgICAgICAgIGlmICh1c2VTaW5nbGVTZXQpIHtcclxuICAgICAgICAgICAgc3VjY2Vzc0J1aWxkS2V5ID0gXCJCdWlsZHNcIjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgICAgICAgdmFyIGJ1aWxkcyA9IF8uc29ydEJ5KCRzY29wZS5tZXRyaWNzLmJ1aWxkcyB8fCBbXSwgXCJudW1iZXJcIik7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goYnVpbGRzLCAoYnVpbGQ6YW55KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB4ID0gYnVpbGQubnVtYmVyO1xyXG4gICAgICAgICAgICB2YXIgeSA9IGJ1aWxkLmR1cmF0aW9uIC8gMTAwMDtcclxuICAgICAgICAgICAgdmFyIGRhdGUgPSBEZXZlbG9wZXIuYXNEYXRlKGJ1aWxkLnRpbWVJbk1pbGxpcyk7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBidWlsZC5yZXN1bHQgfHwgXCJOT1RfU1RBUlRFRFwiO1xyXG4gICAgICAgICAgICB2YXIgY29sb3IgPSBiYXJDb2xvdXJGb3JCdWlsZFJlc3VsdChyZXN1bHQpO1xyXG4gICAgICAgICAgICB2YXIgaWNvbkNsYXNzID0gY3JlYXRlQnVpbGRTdGF0dXNJY29uQ2xhc3MocmVzdWx0KTtcclxuICAgICAgICAgICAgdmFyIHRvb2x0aXAgPSAnPGgzPjxpIGNsYXNzPVwiJyArIGljb25DbGFzcyArICdcIj48L2k+ICcgKyBidWlsZC5kaXNwbGF5TmFtZSArICc8L2gzPicgK1xyXG4gICAgICAgICAgICAgICc8cD5kdXJhdGlvbjogPGI+JyArIHkgKyAnPC9iPiBzZWNvbmRzPC9wPic7XHJcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XHJcbiAgICAgICAgICAgICAgdG9vbHRpcCArPSAnPHA+c3RhcnRlZDogPGI+JyArIGRhdGUgKyAnPC9iPjwvcD4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICB0b29sdGlwICs9ICc8cD5yZXN1bHQ6IDxiPicgKyByZXN1bHQgKyAnPC9iPjwvcD4nO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoeCkge1xyXG4gICAgICAgICAgICAgIHZhciBkYXRhID0gYnVpbGRzU3VjY2VlZGVkO1xyXG4gICAgICAgICAgICAgIHZhciBrZXkgPSBzdWNjZXNzQnVpbGRLZXk7XHJcbiAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzQnVpbGRLZXkgJiYgKCFyZXN1bHQgfHwgIXJlc3VsdC5zdGFydHNXaXRoKFwiU1VDQ1wiKSkpIHtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSBidWlsZHNGYWlsZWQ7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBmYWlsZWRCdWlsZEtleTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRvb2x0aXA6IHRvb2x0aXAsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogY29sb3IsXHJcbiAgICAgICAgICAgICAgICB4OiB4LCB5OiB5fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgJHNjb3BlLmRhdGEgPSBbXTtcclxuICAgICAgICAgIGlmIChidWlsZHNTdWNjZWVkZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICRzY29wZS5kYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgIGtleTogc3VjY2Vzc0J1aWxkS2V5LFxyXG4gICAgICAgICAgICAgIHZhbHVlczogYnVpbGRzU3VjY2VlZGVkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGJ1aWxkc0ZhaWxlZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgJHNjb3BlLmRhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAga2V5OiBmYWlsZWRCdWlsZEtleSxcclxuICAgICAgICAgICAgICB2YWx1ZXM6IGJ1aWxkc0ZhaWxlZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICRzY29wZS5hcGkudXBkYXRlV2l0aERhdGEoJHNjb3BlLmRhdGEpO1xyXG5cclxuICAgICAgICAgICR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgJHNjb3BlLmFwaS51cGRhdGUoKTtcclxuICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgICAgICB2YXIgbWV0cmljc1BhdGggPSAkc2NvcGUuam9iSWQgPyBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgJHNjb3BlLmpvYklkLCBcImZhYnJpYzgvbWV0cmljc1wiKSA6IFwiZmFicmljOC9tZXRyaWNzXCI7XHJcbiAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBtZXRyaWNzUGF0aCk7XHJcbiAgICAgICAgICBsb2cuaW5mbyhcIlwiKTtcclxuICAgICAgICAgIGlmICh1cmwgJiYgKCEkc2NvcGUuamVua2lucyB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XHJcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwsIGplbmtpbnNIdHRwQ29uZmlnKS5cclxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQoZGF0YSwgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhcImVudGl0eSBoYXMgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1ldHJpY3MgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNoYXJ0RGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IHZhciBOYXZCYXJDb250cm9sbGVyID0gY29udHJvbGxlcihcIk5hdkJhckNvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkdGltZW91dCkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUuaXNWYWxpZCA9IChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVtLmlzVmFsaWQ7XHJcbiAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKGl0ZW0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGFuZ3VsYXIuaXNVbmRlZmluZWQodmFsdWUpIHx8IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIGV4cG9ydCB2YXIgUGlwZWxpbmVDb250cm9sbGVyID0gY29udHJvbGxlcihcIlBpcGVsaW5lQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgICAkc2NvcGUua3ViZU1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgICAgICRzY29wZS5qb2JJZCA9ICRyb3V0ZVBhcmFtc1tcImpvYlwiXTtcclxuICAgICAgICAkc2NvcGUuYnVpbGRJZCA9ICRyb3V0ZVBhcmFtc1tcImJ1aWxkXCJdO1xyXG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcclxuXHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0ge1xyXG4gICAgICAgICAgc3RhZ2VzOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XHJcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQsICRzY29wZS5qb2JJZCk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgICAgaWYgKCRzY29wZS5qb2JJZCkge1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5rdWJlcm5ldGVzUHJveHlVcmxGb3JTZXJ2aWNlQ3VycmVudE5hbWVzcGFjZShqZW5raW5zU2VydmljZU5hbWVBbmRQb3J0LCBVcmxIZWxwZXJzLmpvaW4oXCJqb2JcIiwgJHNjb3BlLmpvYklkLCAkc2NvcGUuYnVpbGRJZCwgXCJmYWJyaWM4L3N0YWdlcy9cIikpO1xyXG4gICAgICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLm1vZGVsLnN0YWdlcyB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XHJcbiAgICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVucmljaEplbmtpbnNTdGFnZXMoZGF0YSwgJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhcImVudGl0eSBoYXMgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuYnVpbGQgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLnN0YWdlcyA9IGRhdGEuc3RhZ2VzO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKFwicGlwZWxpbmVWaWV3XCIsICgpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRlbXBsYXRlVXJsOiB0ZW1wbGF0ZVBhdGggKyAncGlwZWxpbmVWaWV3Lmh0bWwnXHJcbiAgICB9O1xyXG4gIH0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIFBpcGVsaW5lc0NvbnRyb2xsZXIgPSBfbW9kdWxlLmNvbnRyb2xsZXIoXCJEZXZlbG9wZXIuUGlwZWxpbmVzQ29udHJvbGxlclwiLCAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXHJcbiAgICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIFNlcnZpY2VSZWdpc3RyeSwgJGVsZW1lbnQpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5rdWJlTW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICRzY29wZS5qb2JJZCA9ICRzY29wZS5qb2JJZCB8fCAkcm91dGVQYXJhbXNbXCJqb2JcIl07XHJcbiAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUgPSB7fTtcclxuXHJcbiAgICAkZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XHJcbiAgICAgICRzY29wZS4kZGVzdHJveSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLm1vZGVsID0ge1xyXG4gICAgICBqb2I6IG51bGwsXHJcbiAgICAgIHBlbmRpbmdPbmx5OiAkc2NvcGUucGVuZGluZ1BpcGVsaW5lc09ubHlcclxuICAgIH07XHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLmlkKTtcclxuICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xyXG5cclxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwucGVuZGluZ09ubHknLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS5zZWxlY3RCdWlsZCA9IChidWlsZCkgPT4ge1xyXG4gICAgICB2YXIgaWQgPSBidWlsZC5pZDtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgaWYgKGlkICE9PSAkc2NvcGUuc2VsZWN0ZWRCdWlsZElkKSB7XHJcbiAgICAgICAgICAkc2NvcGUuc2VsZWN0ZWRCdWlsZElkID0gaWQ7XHJcbiAgICAgICAgICAkc2NvcGUuJGJyb2FkY2FzdChcImplbmtpbnNTZWxlY3RlZEJ1aWxkXCIsIGJ1aWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIHVwZGF0ZURhdGEgPSBfLmRlYm91bmNlKCgpID0+IHtcclxuICAgICAgdmFyIGVudGl0eSA9ICRzY29wZS5lbnRpdHk7XHJcbiAgICAgIGlmICgkc2NvcGUuam9iSWQpIHtcclxuICAgICAgICBpZiAoKCFlbnRpdHkgfHwgZW50aXR5LiRqZW5raW5zSm9iKSkge1xyXG4gICAgICAgICAgdmFyIHF1ZXJ5UGF0aCA9IFwiZmFicmljOC9zdGFnZXMvXCI7XHJcbiAgICAgICAgICBpZiAoJHNjb3BlLm1vZGVsLnBlbmRpbmdPbmx5KSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGF0aCA9IFwiZmFicmljOC9wZW5kaW5nU3RhZ2VzL1wiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsICRzY29wZS5qb2JJZCwgcXVlcnlQYXRoKSk7XHJcbiAgICAgICAgICBpZiAodXJsICYmICghJHNjb3BlLm1vZGVsLmpvYiB8fCBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWwpKSB7XHJcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBlbnJpY2hKZW5raW5zUGlwZWxpbmVKb2IoZGF0YSwgJHNjb3BlLmlkLCAkc2NvcGUuam9iSWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhc09iamVjdENoYW5nZWQoZGF0YSwgJHNjb3BlLmVudGl0eUNoYW5nZWRDYWNoZSkpIHtcclxuICAgICAgICAgICAgICAgICAgbG9nLmluZm8oXCJlbnRpdHkgaGFzIGNoYW5nZWQhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuam9iID0gZGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHZhciBidWlsZHMgPSBkYXRhLmJ1aWxkcztcclxuICAgICAgICAgICAgICAgICAgaWYgKGJ1aWxkcyAmJiBidWlsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNjb3BlLnNlbGVjdEJ1aWxkKGJ1aWxkc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICgkc2NvcGUubW9kZWwpIHtcclxuICAgICAgICAgICAgS3ViZXJuZXRlcy5lbnJpY2hCdWlsZHMoJHNjb3BlLmt1YmVNb2RlbC5idWlsZHMpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJ1aWxkcyA9IFtdO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLmt1YmVNb2RlbC5idWlsZHMsIChidWlsZCkgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciBsYWJlbHMgPSBLdWJlcm5ldGVzLmdldExhYmVscyhidWlsZCk7XHJcbiAgICAgICAgICAgICAgdmFyIGFwcCA9IGxhYmVsc1tcImFwcFwiXTtcclxuICAgICAgICAgICAgICBpZiAoYXBwID09PSAkc2NvcGUucHJvamVjdElkKSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZHMucHVzaChidWlsZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnVpbGRzID0gXy5zb3J0QnkoYnVpbGRzLCBcIiRjcmVhdGlvbkRhdGVcIikucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICB2YXIgYWxsQnVpbGRzID0gYnVpbGRzO1xyXG4gICAgICAgICAgICBpZiAoYWxsQnVpbGRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICBidWlsZHMgPSBfLmZpbHRlcihhbGxCdWlsZHMsIChiKSA9PiAhYi4kY3JlYXRpb25EYXRlKTtcclxuICAgICAgICAgICAgICBpZiAoIWJ1aWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGJ1aWxkcyA9IFthbGxCdWlsZHNbMF1dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGlwZWxpbmVzID0gW107XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZHMsIChidWlsZCkgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciBidWlsZFN0YXR1cyA9IGJ1aWxkLnN0YXR1cyB8fCB7fTtcclxuICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYnVpbGRTdGF0dXMucGhhc2UgfHwgXCJcIjtcclxuICAgICAgICAgICAgICB2YXIgcmVzdWx0VXBwZXJDYXNlID0gcmVzdWx0LnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgdmFyICR2aWV3TGluayA9IGJ1aWxkLiR2aWV3TGluaztcclxuICAgICAgICAgICAgICB2YXIgJGxvZ0xpbmsgPSBidWlsZC4kbG9nc0xpbms7XHJcbiAgICAgICAgICAgICAgdmFyICR0aW1lc3RhbXAgPSBidWlsZC4kY3JlYXRpb25EYXRlO1xyXG4gICAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IGJ1aWxkU3RhdHVzLmR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgIGlmIChkdXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgLy8gMTdzID0gMTcsMDAwLDAwMCwwMDAgb24gb3BlbnNoaWZ0XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IGR1cmF0aW9uIC8gMTAwMDAwMDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdmFyIGRpc3BsYXlOYW1lID0gS3ViZXJuZXRlcy5nZXROYW1lKGJ1aWxkKTtcclxuICAgICAgICAgICAgICB2YXIgJGljb25DbGFzcyA9IGNyZWF0ZUJ1aWxkU3RhdHVzSWNvbkNsYXNzKHJlc3VsdFVwcGVyQ2FzZSk7XHJcbiAgICAgICAgICAgICAgdmFyICRiYWNrZ3JvdW5kQ2xhc3MgPSBjcmVhdGVCdWlsZFN0YXR1c0JhY2tncm91bmRDbGFzcyhyZXN1bHRVcHBlckNhc2UpO1xyXG4gICAgICAgICAgICAgIHZhciBzdGFnZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YWdlTmFtZTogXCJPcGVuU2hpZnQgQnVpbGRcIixcclxuICAgICAgICAgICAgICAgICR2aWV3TGluazogJHZpZXdMaW5rLFxyXG4gICAgICAgICAgICAgICAgJGxvZ0xpbms6ICRsb2dMaW5rLFxyXG4gICAgICAgICAgICAgICAgJHN0YXJ0VGltZTogJHRpbWVzdGFtcCxcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcclxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgJGljb25DbGFzczogJGljb25DbGFzcyxcclxuICAgICAgICAgICAgICAgICRiYWNrZ3JvdW5kQ2xhc3M6ICRiYWNrZ3JvdW5kQ2xhc3NcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHZhciBwaXBlbGluZSA9IHtcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcclxuICAgICAgICAgICAgICAgICR2aWV3TGluazogJHZpZXdMaW5rLFxyXG4gICAgICAgICAgICAgICAgJGxvZ0xpbms6ICRsb2dMaW5rLFxyXG4gICAgICAgICAgICAgICAgJHRpbWVzdGFtcDogJHRpbWVzdGFtcCxcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcclxuICAgICAgICAgICAgICAgIHN0YWdlczogW3N0YWdlXVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgcGlwZWxpbmVzLnB1c2gocGlwZWxpbmUpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGxldHMgZmlsdGVyIHRoZSBPcGVuU2hpZnQgYnVpbGRzIGFuZCBtYWtlIGEgcGlwZWxpbmUgZnJvbSB0aGF0XHJcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5qb2IgPSB7XHJcbiAgICAgICAgICAgICAgJGpvYklkOiAkc2NvcGUuam9iSWQsXHJcbiAgICAgICAgICAgICAgJHByb2plY3Q6ICRzY29wZS5wcm9qZWN0SWQsXHJcbiAgICAgICAgICAgICAgYnVpbGRzOiBwaXBlbGluZXNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICB9XHJcbiAgICB9LCA1MCk7XHJcblxyXG4gICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICB9KTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyRW5yaWNoZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVySGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3Blck5hdmlnYXRpb24udHNcIi8+XHJcblxyXG5tb2R1bGUgRGV2ZWxvcGVyIHtcclxuXHJcbiAgZXhwb3J0IHZhciBQcm9qZWN0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQcm9qZWN0Q29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiJGVsZW1lbnRcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCAkZWxlbWVudCwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG5cclxuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICAgICAkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5vc19idWlsZF9CdWlsZENvbmZpZztcclxuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZENhY2hlID0ge307XHJcbiAgICAgICAgJHNjb3BlLmVudlZlcnNpb25zQ2FjaGUgPSB7fTtcclxuICAgICAgICAkc2NvcGUuZW52TlNDYWNoZXMgPSB7fTtcclxuICAgICAgICAkc2NvcGUuZW52VmVyc2lvbnMgPSB7fTtcclxuXHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gW107IC8vRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RCcmVhZGNydW1icygkc2NvcGUuaWQpO1xyXG4gICAgICAgIHVwZGF0ZVRhYnMoKTtcclxuICAgICAgICAvLyB0aGlzIGlzIHVzZWQgZm9yIHRoZSBwZW5kaW5nUGlwZWxpbmVzIHZpZXdcclxuICAgICAgICAkc2NvcGUuam9iSWQgPSAkc2NvcGUuaWQ7XHJcbiAgICAgICAgJHNjb3BlLnBlbmRpbmdQaXBlbGluZXNPbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbignamVua2luc1NlbGVjdGVkQnVpbGQnLCAoZXZlbnQsIGJ1aWxkKSA9PiB7XHJcbiAgICAgICAgICAkc2NvcGUuc2VsZWN0ZWRCdWlsZCA9IGJ1aWxkO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBUT0RPIHRoaXMgc2hvdWxkIGJlIHVubmVjZXNzYXJ5IGJ1dCBzZWVtcyBzb21ldGllbXMgdGhpcyB3YXRjaCBkb2Vzbid0IGFsd2F5cyB0cmlnZ2VyIHVubGVzcyB5b3UgaGl0IHJlbG9hZCBvbiB0aGlzIHBhZ2VcclxuICAgICAgICBpZiAoJHNjb3BlLm1vZGVsLmJ1aWxkY29uZmlncykge1xyXG4gICAgICAgICAgb25CdWlsZENvbmZpZ3MoJHNjb3BlLm1vZGVsLmJ1aWxkY29uZmlncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEt1YmVybmV0ZXMud2F0Y2goJHNjb3BlLCAkZWxlbWVudCwgXCJidWlsZGNvbmZpZ3NcIiwgJHNjb3BlLm5hbWVzcGFjZSwgb25CdWlsZENvbmZpZ3MpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBvbkJ1aWxkQ29uZmlncyhidWlsZENvbmZpZ3MpIHtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChidWlsZENvbmZpZ3MsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gS3ViZXJuZXRlcy5nZXROYW1lKGRhdGEpO1xyXG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHNvcnRlZEJ1aWxkcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgS3ViZXJuZXRlcy5lbnJpY2hCdWlsZENvbmZpZyhkYXRhLCBzb3J0ZWRCdWlsZHMpO1xyXG4gICAgICAgICAgICAgIGlmIChoYXNPYmplY3RDaGFuZ2VkKGRhdGEsICRzY29wZS5lbnRpdHlDaGFuZ2VkQ2FjaGUpKSB7XHJcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcImVudGl0eSBoYXMgY2hhbmdlZCFcIik7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkuJGJ1aWxkID0gKGRhdGEuJGZhYnJpYzhDb2RlVmlld3MgfHwge30pWydmYWJyaWM4LmxpbmsuYnJvd3NlR29ncy52aWV3J107XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuc2V0UHJvamVjdCgkc2NvcGUuZW50aXR5KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdXBkYXRlRW52aXJvbm1lbnRXYXRjaCgpO1xyXG4gICAgICAgICAgICAgIHVwZGF0ZVRhYnMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdlIGhhdmUgdXBkYXRlZCB0aGUgZW50aXR5IHNvIGxldHMgbWFrZSBzdXJlIHdlIGFyZSB3YXRjaGluZyBhbGwgdGhlIGVudmlyb25tZW50cyB0byBmaW5kXHJcbiAgICAgICAgICogdGhlIHByb2plY3QgdmVyc2lvbnMgZm9yIGVhY2ggbmFtZXNwYWNlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRW52aXJvbm1lbnRXYXRjaCgpIHtcclxuICAgICAgICAgIHZhciBwcm9qZWN0ID0gJHNjb3BlLmVudGl0eTtcclxuICAgICAgICAgIGlmIChwcm9qZWN0KSB7XHJcbiAgICAgICAgICAgIHZhciBqZW5raW5zSm9iID0gcHJvamVjdC4kamVua2luc0pvYjtcclxuICAgICAgICAgICAgaWYgKGplbmtpbnNKb2IpIHtcclxuICAgICAgICAgICAgICB2YXIgYnVpbGRzVGFiID0gXy5maW5kKCRzY29wZS5zdWJUYWJDb25maWcsIHtpZDogXCJidWlsZHNcIn0pO1xyXG4gICAgICAgICAgICAgIGlmIChidWlsZHNUYWIpIHtcclxuICAgICAgICAgICAgICAgIGJ1aWxkc1RhYltcImhyZWZcIl0gPSBVcmxIZWxwZXJzLmpvaW4oXCIvd29ya3NwYWNlc1wiLCBLdWJlcm5ldGVzLmN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCksIFwicHJvamVjdHNcIiwgJHNjb3BlLmlkLCBcImplbmtpbnNKb2JcIiwgamVua2luc0pvYik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocHJvamVjdC5lbnZpcm9ubWVudHMsIChlbnYpID0+IHtcclxuICAgICAgICAgICAgICB2YXIgbnMgPSBlbnYubmFtZXNwYWNlO1xyXG4gICAgICAgICAgICAgIHZhciBjYWNoZXMgPSAkc2NvcGUuZW52TlNDYWNoZXNbbnNdO1xyXG4gICAgICAgICAgICAgIGlmICghY2FjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICRzY29wZS5lbnZOU0NhY2hlc1tuc10gPSBjYWNoZXM7XHJcbiAgICAgICAgICAgICAgICBsb2FkUHJvamVjdFZlcnNpb25zKCRzY29wZSwgJGVsZW1lbnQsIHByb2plY3QsIGVudiwgbnMsICRzY29wZS5lbnZWZXJzaW9ucywgY2FjaGVzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlVGFicygpIHtcclxuICAgICAgICAgICRzY29wZS5zdWJUYWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFN1Yk5hdkJhcnMoJHNjb3BlLmlkLCBudWxsLCAkc2NvcGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcblxyXG4gIF9tb2R1bGUuY29udHJvbGxlcignRGV2ZWxvcGVyLlByb2plY3RTZWxlY3RvcicsIFsnJHNjb3BlJywgJyRyb3V0ZVBhcmFtcycsICdLdWJlcm5ldGVzTW9kZWwnLCAoJHNjb3BlLCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCkgPT4ge1xyXG4gICAgdmFyIHByb2plY3RJZCA9ICRyb3V0ZVBhcmFtc1sncHJvamVjdElkJ10gfHwgJHJvdXRlUGFyYW1zWydwcm9qZWN0J10gfHwgJHJvdXRlUGFyYW1zWydpZCddO1xyXG4gICAgaWYgKHByb2plY3RJZCkge1xyXG4gICAgICAkc2NvcGUucHJvamVjdElkID0gcHJvamVjdElkO1xyXG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWxcclxuICAgICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwuYnVpbGRjb25maWdzJywgKGJ1aWxkY29uZmlncykgPT4ge1xyXG4gICAgICAgICRzY29wZS5wcm9qZWN0cyA9IGJ1aWxkY29uZmlncztcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsb2cuaW5mbyhcIm5vIHByb2plY3QgSUQgaW4gcm91dGVQYXJhbXM6IFwiLCAkcm91dGVQYXJhbXMpO1xyXG4gICAgfVxyXG4gIH1dKTtcclxuXHJcbn1cclxuXHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIFByb2plY3RzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJQcm9qZWN0c0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuXHJcbiAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgICBkYXRhOiAnbW9kZWwuYnVpbGRjb25maWdzJyxcclxuICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxyXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxyXG4gICAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICckbmFtZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXHJcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiaWRUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9LFxyXG4vKlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLnR5cGUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSdcclxuICAgICAgICAgIH0sXHJcbiovXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zb3VyY2UuZ2l0LnVyaScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUmVwb3NpdG9yeSdcclxuICAgICAgICAgIH0sXHJcbi8qXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS50eXBlJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTdHJhdGVneSdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS5zdGlTdHJhdGVneS5pbWFnZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU291cmNlIEltYWdlJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLm91dHB1dC5pbWFnZVRhZycsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnT3V0cHV0IEltYWdlJ1xyXG4gICAgICAgICAgfSxcclxuKi9cclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5kZXNjcmlwdGlvbicsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRGVzY3JpcHRpb24nXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJyRjcmVhdGlvbkRhdGUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0NyZWF0ZWQnLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImNyZWF0aW9uVGltZVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJGxhYmVsc1RleHQnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhYmVscycsXHJcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFiZWxUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBjcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoKTtcclxuICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVXb3Jrc3BhY2VTdWJOYXZCYXJzKCk7XHJcblxyXG4gICAgICAvLyBUT0RPXHJcbiAgICAgIC8vJHNjb3BlLmlzTG9nZ2VkSW50b0dvZ3MgPSBGb3JnZS5pc0xvZ2dlZEludG9Hb2dzO1xyXG5cclxuICAgICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcclxuICAgICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxyXG4gICAgICAgICAgaW5kZXg6ICckbmFtZScsXHJcbiAgICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICAgICAgICBkZWxldGVFbnRpdHkobmV4dCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRpdGxlOiAnRGVsZXRlIEFwcHMnLFxyXG4gICAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBBcHBzIHdpbGwgYmUgZGVsZXRlZDonLFxyXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcclxuICAgICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcclxuICAgICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXHJcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcclxuICAgICAgICB9KS5vcGVuKCk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBmdW5jdGlvbiBkZWxldGVFbnRpdHkoc2VsZWN0aW9uLCBuZXh0Q2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgbmFtZSA9IChzZWxlY3Rpb24gfHwge30pLiRuYW1lO1xyXG4gICAgICAgIHZhciBqZW5raW5zSm9iID0gc2VsZWN0aW9uLiRqZW5raW5zSm9iO1xyXG4gICAgICAgIHZhciBwdWJsaWNKZW5raW5zVXJsID0gamVua2luc0xpbmsoKTtcclxuICAgICAgICAvL3ZhciBqZW5raW5zVXJsID0gQ29yZS5wYXRoR2V0KHNlbGVjdGlvbiwgW1wiJGZhYnJpYzhWaWV3c1wiLCBcImZhYnJpYzgubGluay5qZW5raW5zLmpvYlwiLCBcInVybFwiXSk7XHJcbiAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJvdXQgdG8gZGVsZXRlIGJ1aWxkIGNvbmZpZzogXCIgKyBuYW1lKTtcclxuICAgICAgICAgIHZhciB1cmwgPSBLdWJlcm5ldGVzLmJ1aWxkQ29uZmlnUmVzdFVybChuYW1lKTtcclxuICAgICAgICAgICRodHRwLmRlbGV0ZSh1cmwpLlxyXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIG5leHRDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gZGVsZXRlIGJ1aWxkIGNvbmZpZyBvbiBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICBuZXh0Q2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwid2FybmluZzogbm8gbmFtZSBmb3Igc2VsZWN0aW9uOiBcIiArIGFuZ3VsYXIudG9Kc29uKHNlbGVjdGlvbikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGplbmtpbnNKb2IgJiYgcHVibGljSmVua2luc1VybCkge1xyXG4gICAgICAgICAgdmFyIHVybCA9IEt1YmVybmV0ZXMua3ViZXJuZXRlc1Byb3h5VXJsRm9yU2VydmljZUN1cnJlbnROYW1lc3BhY2UoamVua2luc1NlcnZpY2VOYW1lQW5kUG9ydCwgVXJsSGVscGVycy5qb2luKFwiam9iXCIsIGplbmtpbnNKb2IsIFwiZG9EZWxldGVcIikpO1xyXG4gICAgICAgICAgdmFyIGJvZHkgPSBcIlwiO1xyXG4gICAgICAgICAgdmFyIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBcInRleHQvcGxhaW5cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgbG9nLmluZm8oXCJwb3N0aW5nIHRvIGplbmtpbnNVcmw6IFwiICsgdXJsKTtcclxuICAgICAgICAgICRodHRwLnBvc3QodXJsLCBib2R5LCBjb25maWcpLlxyXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIGxvZy5pbmZvKFwiTWFuYWdlZCB0byBkZWxldGUgXCIgKyB1cmwpO1xyXG4gICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gZGVsZXRlIGplbmtpbnMgam9iIGF0IFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbi8qXHJcbiAgICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBLdWJlcm5ldGVzLmtlZXBQb2xsaW5nTW9kZWw7XHJcbiAgICAgICRzY29wZS5mZXRjaCA9IFBvbGxIZWxwZXJzLnNldHVwUG9sbGluZygkc2NvcGUsIChuZXh0OigpID0+IHZvaWQpID0+IHtcclxuICAgICAgICB2YXIgdXJsID0gS3ViZXJuZXRlcy5idWlsZENvbmZpZ3NSZXN0VVJMKCk7XHJcbiAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJnb3QgZGF0YSBcIiArIGFuZ3VsYXIudG9Kc29uKGRhdGEsIHRydWUpKTtcclxuICAgICAgICAgICAgICB2YXIgc29ydGVkQnVpbGRzID0gbnVsbDtcclxuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRDb25maWdzID0gS3ViZXJuZXRlcy5lbnJpY2hCdWlsZENvbmZpZ3MoZGF0YS5pdGVtcywgc29ydGVkQnVpbGRzKTtcclxuICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgICRzY29wZS5mZXRjaCgpO1xyXG4qL1xyXG4gICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2t1YmVybmV0ZXMvdHMva3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJFbnJpY2hlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkZXZlbG9wZXJIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiZGV2ZWxvcGVyTmF2aWdhdGlvbi50c1wiLz5cclxuXHJcbm1vZHVsZSBEZXZlbG9wZXIge1xyXG5cclxuICBleHBvcnQgdmFyIFdvcmtzcGFjZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiV29ya3NwYWNlQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcIm5hbWVzcGFjZVwiXTtcclxuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICAgICAkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5rdWJlcm5ldGVzX05hbWVzcGFjZTtcclxuXHJcbiAgICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAgICRzY29wZS5icmVhZGNydW1iQ29uZmlnID0gY3JlYXRlV29ya3NwYWNlQnJlYWRjcnVtYnMoKTtcclxuICAgICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVdvcmtzcGFjZVN1Yk5hdkJhcnMoKTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRrZWVwUG9sbGluZyA9ICgpID0+IEt1YmVybmV0ZXMua2VlcFBvbGxpbmdNb2RlbDtcclxuICAgICAgICAkc2NvcGUuZmV0Y2ggPSBQb2xsSGVscGVycy5zZXR1cFBvbGxpbmcoJHNjb3BlLCAobmV4dDooKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XHJcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgICAgIHZhciB1cmwgPSBVcmxIZWxwZXJzLmpvaW4oS3ViZXJuZXRlcy5yZXNvdXJjZXNVcmlGb3JLaW5kKFwiUHJvamVjdHNcIiksICRzY29wZS5pZCk7XHJcbiAgICAgICAgICAgIGxvZy5pbmZvKFwiTG9hZGluZyB1cmw6IFwiICsgdXJsKTtcclxuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS5lbnRpdHkgPSBlbnJpY2hXb3Jrc3BhY2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgbmV4dCgpO1xyXG4gICAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICRzY29wZS5tb2RlbC5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgbmV4dCgpO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmZldGNoKCk7XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9rdWJlcm5ldGVzL3RzL2t1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4va3ViZXJuZXRlcy90cy9rdWJlcm5ldGVzTW9kZWwudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9jb25maWdzL3RzL2NvbmZpZ3NEYXRhU2VydmljZS50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckVucmljaGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRldmVsb3BlckhlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJkYXRhTWFuYWdlckhlbHBlci50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImRhdGFNYW5hZ2VyTW9kZWwudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9jb25maWdzL3RzL2NvbmZpZ3NIZWxwZXIudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9jb25maWdzL3RzL2N1c3RvbUFsZXJ0LnRzXCIvPlxyXG5cclxubW9kdWxlIERldmVsb3BlciB7XHJcbiAgZXhwb3J0IHZhciBXb3Jrc3BhY2VzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJXb3Jrc3BhY2VzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJEYXRhTW9kZWxcIiwgXCJDb25maWdzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiJGVsZW1lbnRcIiwgXCJuZ0RpYWxvZ1wiLFxyXG4gICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBEYXRhTW9kZWw6RGV2ZWxvcGVyLkRhdGFNb2RlbFNlcnZpY2UsIENvbmZpZ3NNb2RlbDpDb25maWdzLkNvbmZpZ3NNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCAkZWxlbWVudCwgbmdEaWFsb2cpID0+IHsgICAgXHJcbiAgICAkc2NvcGUubW9kZWw9RGF0YU1vZGVsOyBcclxuICAgICRzY29wZS5yZXBsaWNhc01vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgaW5pdCgkc2NvcGUsICRsb2NhdGlvbiwgJHJvdXRlUGFyYW1zKTsgICBcclxuICAgICRzY29wZS5vcHRpb25zID0gRGF0YU1vZGVsLnBhcmFtT3B0aW9ucztcclxuICAgICRzY29wZS5wYWdlU2l6ZUNob3NlcyA9IERhdGFNb2RlbC5wYXJhbU9wdGlvbnMucGFnZXJTaXplT3B0aW9uO1xyXG4gICAgdmFyIHJlc3VsdCA9IGdldERhdGFUeXBlKCRsb2NhdGlvbilcclxuICAgICRzY29wZS5vcHRpb25zLmRhdGFUeXBlID0gcmVzdWx0W1wiZGF0YVR5cGVcIl07IFxyXG4gICAgJHNjb3BlLm9wdGlvbnMudm9sdW1lVHlwZSA9IHJlc3VsdFtcInZvbHVtZVR5cGVcIl07ICBcclxuXHJcbiAgICAkc2NvcGUudHJlZU9wdGlvbnMgPSB7XHJcbiAgICAgIG5vZGVDaGlsZHJlbjogXCJjaGlsZE5vZGVzXCIsXHJcbiAgICAgIGRpclNlbGVjdGFibGU6IHRydWUsXHJcbiAgICAgIGluamVjdENsYXNzZXM6IHtcclxuICAgICAgICB1bDogXCJhMVwiLFxyXG4gICAgICAgIGxpOiBcImEyXCIsXHJcbiAgICAgICAgbGlTZWxlY3RlZDogXCJhN1wiLFxyXG4gICAgICAgIGlFeHBhbmRlZDogXCJhM1wiLFxyXG4gICAgICAgIGlDb2xsYXBzZWQ6IFwiYTRcIixcclxuICAgICAgICBpTGVhZjogXCJhNVwiLFxyXG4gICAgICAgIGxhYmVsOiBcImE2XCIsXHJcbiAgICAgICAgbGFiZWxTZWxlY3RlZDogXCJhOFwiXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL+mFjee9ruaVsOaNruihqOagvOmcgOimgeaYvuekuueahOWGheWuueWPiuaYvuekuuagvOW8j1xyXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICBkYXRhOiAnbW9kZWwuZGF0YScsICAgICBcclxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLCAgICAgXHJcbiAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLCAgICAgXHJcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogXCJfa2V5XCIsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ+e8lueggScgICAgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiBcIm5hbWVcIixcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5biCLeWMui/ljr8nLFxyXG4gICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+IHsgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4gZmllbGQucmVnaW9uYWxpc21Db2RlO1xyXG4gICAgICAgICAgfSAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgXHJcbiAgICAgICAgICBmaWVsZDogXCJzeXN0ZW1OYW1lXCIsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ+ezu+e7n+WQjeensCcsXHJcbiAgICAgICAgICBjdXN0b21Tb3J0RmllbGQ6IChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZmllbGQuc3lzdGVtQ29kZTtcclxuICAgICAgICAgIH0gICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiBcImxhYmVsc1wiLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICfmlbDmja7moIfnrb4nLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJkYXRhTGFiZWxzVGVtcGxhdGUuaHRtbFwiKSAgICAgIFxyXG4gICAgICAgIH0sIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiBcInllYXJcIixcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5bm05bqmJywgICAgICAgIFxyXG4gICAgICAgIH0sICAgIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiBcImNvbGxlY3RpbmdUaW1lXCIsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ+mHh+mbhuaXtumXtCcgICAgICAgIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6IFwiZXh0cmFjdFN0YXR1c1wiLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICfmsYfmgLvnirbmgIEnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJkYXRhRXh0cmFjdFRlbXBsYXRlLmh0bWxcIikgICAgICAgXHJcbiAgICAgICAgfSAgICAgICAgIFxyXG4gICAgICBdLFxyXG4gICAgICBzb3J0SW5mbzoge1xyXG4gICAgICAgIHNvcnRCeTogXCJfa2V5XCIsXHJcbiAgICAgICAgYXNjZW5kaW5nOiB0cnVlXHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLiRvbihcImRhdGFMYWJlbEZpbHRlclVwZGF0ZVwiLCAoJGV2ZW50LCB0ZXh0LCBrZXkpID0+IHtcclxuICAgICAgJHNjb3BlLmtleVF1ZXJ5ICs9IFwiIFwiICsgdGV4dDsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgfSlcclxuXHJcbiAgICAkc2NvcGUuc2VsZWN0QmF0Y2hJdGVtID0gKGl0ZW0pPT4geyAgICAgIFxyXG4gICAgICAkc2NvcGUubmF2YmFySXRlbXMuZm9yRWFjaCgobmF2KSA9PntcclxuICAgICAgICBuYXYuY2xhc3M9XCJcIjtcclxuICAgICAgfSk7XHJcbiAgICAgIGl0ZW0uY2xhc3M9XCJhY3RpdmVcIjtcclxuICAgICAgJHNjb3BlLm1vZGVsLnVwZGF0ZVBhcmFtT3B0aW9uKFwia2V5UXVlcnlcIiwgJHNjb3BlLmtleVF1ZXJ5KTsgXHJcbiAgICAgICRzY29wZS5tb2RlbC51cGRhdGVQYXJhbU9wdGlvbihcImRhdGFCYXRjaFwiLCBpdGVtLmFsaWFzKTsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5pc0VtcHR5T3JGaXJzdCA9ICgpID0+IHtcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpO1xyXG4gICAgICB2YXIgbGVuZ3RoID0kc2NvcGUub3B0aW9ucy5nZXRQYWdlU2l6ZU51bSgpOyAgICAgIFxyXG4gICAgICByZXR1cm4gbGVuZ3RoIDw9IDAgfHwgaWR4IDw9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmlzRW1wdHlPckxhc3QgPSAoKSA9PntcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpO1xyXG4gICAgICB2YXIgbGVuZ3RoID0kc2NvcGUub3B0aW9ucy5nZXRQYWdlU2l6ZU51bSgpO1xyXG4gICAgICByZXR1cm4gbGVuZ3RoIDwgMSB8fCBpZHggPj0gbGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5maXJzdCA9ICgpID0+IHsgICAgICBcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpOyAgICAgIFxyXG4gICAgICBpZihpZHggPjEpe1xyXG4gICAgICAgICRzY29wZS5tb2RlbC51cGRhdGVQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmxhc3QgPSAoKSA9PnsgICAgICBcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpOyBcclxuICAgICAgdmFyIGxlbmd0aCA9JHNjb3BlLm9wdGlvbnMuZ2V0UGFnZVNpemVOdW0oKTtcclxuICAgICAgaWYoaWR4IDwgbGVuZ3RoKVxyXG4gICAgICAgICAkc2NvcGUubW9kZWwudXBkYXRlUGFyYW1PcHRpb24oXCJjdXJyZW50UGFnZU51bVwiLCBsZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5wcmV2aW91cyA9ICgpID0+IHsgICAgICBcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpOyBcclxuICAgICAgdmFyIGxlbmd0aCA9JHNjb3BlLm9wdGlvbnMuZ2V0UGFnZVNpemVOdW0oKTtcclxuICAgICAgaWYoaWR4ID4gMSlcclxuICAgICAgICAkc2NvcGUubW9kZWwudXBkYXRlUGFyYW1PcHRpb24oXCJjdXJyZW50UGFnZU51bVwiLCBpZHgtMSk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLm5leHQgPSAoKSA9PntcclxuICAgICAgdmFyIGxlbmd0aCA9JHNjb3BlLm9wdGlvbnMuZ2V0UGFnZVNpemVOdW0oKTtcclxuICAgICAgdmFyIGlkeCA9ICRzY29wZS5tb2RlbC5nZXRQYXJhbU9wdGlvbihcImN1cnJlbnRQYWdlTnVtXCIpO1xyXG4gICAgICBpZihpZHggPCBsZW5ndGgpe1xyXG4gICAgICAgIEt1YmVybmV0ZXMuZWxpbWluYXRlQ2hlY2hCb3hDbGljaygpOyAgICAgICBcclxuICAgICAgICAkc2NvcGUubW9kZWwudXBkYXRlUGFyYW1PcHRpb24oXCJjdXJyZW50UGFnZU51bVwiLCBpZHgrMSk7ICAgICAgXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuJHdhdGNoKCdvcHRpb25zJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4geyAgICAgICAgICAgICAgXHJcbiAgICAgIGlmKG5ld1ZhbHVlKXtcclxuICAgICAgICBpZihuZXdWYWx1ZS5jdXJyZW50VGFibGVTaXplICE9PSBvbGRWYWx1ZS5jdXJyZW50VGFibGVTaXplKVxyXG4gICAgICAgICAgJHNjb3BlLm9wdGlvbnMucHJpb3JUYWJsZVNpemUgPSBvbGRWYWx1ZS5jdXJyZW50VGFibGVTaXplOyAgICAgICAgXHJcbiAgICAgICAgZWxzZSBcclxuICAgICAgICAgICRzY29wZS5vcHRpb25zLnByaW9yVGFibGVTaXplID0gbmV3VmFsdWUuY3VycmVudFRhYmxlU2l6ZTsgICAgICAgIFxyXG4gICAgICAgIERhdGFNb2RlbC51cGRhdGVNb2RlbCgpO1xyXG4gICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgfSwgdHJ1ZSk7ICBcclxuXHJcbiAgICAkc2NvcGUuc2VhcmNoID0gKCkgPT4ge1xyXG4gICAgICAkc2NvcGUubW9kZWwudXBkYXRlUGFyYW1PcHRpb24oXCJrZXlRdWVyeVwiLCAkc2NvcGUua2V5UXVlcnkpO1xyXG4gICAgICBcclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHNlbGVjdGVkKSkge1xyXG4gICAgICAgIHNlbGVjdGVkID0gW3tcclxuICAgICAgICAgIGlkOiBzZWxlY3RlZFxyXG4gICAgICAgIH1dO1xyXG4gICAgICB9XHJcbiAgICAgIC8qXHJcbiAgICAgICAg5Yik5pat5pWw5o2u5piv5ZCm5bey5oyC6L295L2/55So5ZKM5q2j5Zyo6L+B56e744CCXHJcbiAgICAgICovXHJcbiAgICAgIHZhciBtZXNzYWdlID0gS3ViZXJuZXRlcy5jaGVja0Zvck1pZ3JhdGlvbigkc2NvcGUucmVwbGljYXNNb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCAkc2NvcGUubW9kZWwudHJhbnNmZXJUYXNrcyAsICRzY29wZS50YWJsZUNvbmZpZy5zZWxlY3RlZEl0ZW1zKTtcclxuICAgICAgaWYobWVzc2FnZSAhPSBcIlwiKXtcclxuICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOlwiICsgbWVzc2FnZSArIFwiLOS4jeiDveWIoOmZpO+8gVwiLCAnJyxudWxsLCAwLCBcImVycm9yXCIpO1xyXG4gICAgICAgIHJldHVybjsgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcclxuICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcclxuICAgICAgICBpbmRleDogJ2lkJyxcclxuICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIHZhciBpZENvbGwgPSBbXTtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHNlbGVjdGVkLCAoc2VsZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWRDb2xsLnB1c2goc2VsZWN0LmlkKTsgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAkaHR0cCh7ICBcclxuICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLCAgXHJcbiAgICAgICAgICAgICAgdXJsOiBcIi9qYXZhL2NvbnNvbGUvYXBpL2RlbGV0ZS9kYXRhXCIsICAgICAgICAgXHJcbiAgICAgICAgICAgICAgcGFyYW1zOiB7XCJkYXRhXCI6IGlkQ29sbH0gICBcclxuICAgICAgICAgICAgfSkuc3VjY2VzcyhmdW5jdGlvbihkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykgeyAgXHJcbiAgICAgICAgICAgICAgLy/miJDlip/kuYvlkI7lgZrkuIDkupvkuovmg4UgXHJcbiAgICAgICAgICAgICAgRGF0YU1vZGVsLnVwZGF0ZU1vZGVsKCk7ICAgICAgXHJcbiAgICAgICAgICAgIH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7ICBcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGl0bGU6ICfmmK/lkKbpnIDopoHliKDpmaTph4fpm4bmlbDmja7vvJ8nLFxyXG4gICAgICAgIGFjdGlvbjogJ+S7peS4i+mHh+mbhuaVsOaNruaWh+S7tuWwhuS8muiiq+WIoOmZpDonLFxyXG4gICAgICAgIG9rVGV4dDogJ+WIoOmZpCcsXHJcbiAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXIgc2pfYnRuX2NpcicsXHJcbiAgICAgICAgY3VzdG9tOiBcIuivpeWIoOmZpOaTjeS9nOWwhuS8muW9u+W6leWIoOmZpOaVsOaNruaWh+S7tizmmK/lkKbliKDpmaTvvIzor7fnoa7orqTvvIFcIixcclxuICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nIHNqX2FsZXJ0LXdhcm5pbmdcIixcclxuICAgICAgICBjYW5jZWxUZXh0OiBcIuWPlua2iFwiLFxyXG4gICAgICAgIGNhbmNlbENsYXNzOiAnc2pfYnRuX2dyZXknXHJcbiAgICAgIH0pLm9wZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUubWlncmF0aW9uQ2xpY2sgPSB7XHJcbiAgICAgIGl0ZW1zOm51bGwsXHJcbiAgICAgIHNlbGVjdGVkSXRlbToge1wibmFtZVwiOiBcIuW9k+WJjeayoeacieWPr+S7pei/geenu+eahOmbhue+pFwifSxcclxuICAgICAgZGlhbG9nOiBuZXcgVUkuRGlhbG9nKCksXHJcbiAgICAgIG9uT2s6ICgpID0+IHsgICAgICAgIFxyXG4gICAgICAgIHZhciBtaWdyYXRpb25DbGljayA9ICRzY29wZS5taWdyYXRpb25DbGljaztcclxuICAgICAgICAvKlxyXG4gICAgICAgICAg5ZCR5ZCO5Y+w5Y+R55Sf5pWw5o2u6L+B56e76K+35rGCLCRodHRwOuWPkeeUn2h0dHDlvILmraXor7fmsYLvvJvnrKzkuozkuKrlj4LmlbDvvJror7fmsYJ1cmw756ys5LiJ5Liq5Y+C5pWw77ya6K+35rGC5pON5L2c57G75Z6L77yb56ys5Zub5Liq5Y+C5pWw77ya6K+35rGC5pC65bim55qE5pWw5o2u77yb56ys5LqU5Liq5Y+C5pWw77yaXHJcbiAgICAgICAgICDkuIDkuKrlm57osIPlh73mlbDvvIzor7fmsYLlk43lupTlkI7nmoTlm57osIPlh73mlbDjgIJcclxuICAgICAgICAqLyAgXHJcbiAgICAgICAgaWYoS3ViZXJuZXRlcy5hbHJlYWR5RXhpdEluRm9sZGVyKCRzY29wZS50YWJsZUNvbmZpZy5zZWxlY3RlZEl0ZW1zLCAkc2NvcGUuc2VsZWN0Tm9kZSkpe1xyXG4gICAgICAgICAgbWlncmF0aW9uQ2xpY2suY2xvc2UoKTtcclxuICAgICAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzlpLHotKU6XCIgKyBcIuaVsOaNruW3suWcqOW9k+WJjeebruW9le+8gVwiLCAnJyxudWxsLCAwLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgICBcclxuICAgICAgICBDb25maWdzLm9yYWNsZUluZm9PcGVyYXRlKCRodHRwLCBcIi9qYXZhL2NvbnNvbGUvYXBpL3ZvbHVtZVwiLCBDb25maWdzLk9wZXJhdGVUeXBlLk1PVkUsIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwibmFtZVwiOiBtaWdyYXRpb25DbGljay5zZWxlY3RlZEl0ZW0ubmFtZSxcclxuICAgICAgICAgIFwic2VsZWN0SXRlbXNcIjogJHNjb3BlLnRhYmxlQ29uZmlnLnNlbGVjdGVkSXRlbXMsXHJcbiAgICAgICAgICBcInNlbGVjdE5vZGVcIjogJHNjb3BlLnNlbGVjdE5vZGVcclxuICAgICAgICB9LCAocmVzdWx0LCBzdGF0dXMpID0+IHtcclxuICAgICAgICAgIGlmKHN0YXR1cz09PTIwMCl7XHJcbiAgICAgICAgICAgICAgICAvLyRzY29wZS5tb2RlbC51cGRhdGVPcmFjbGVQYXJhbSgpO1xyXG4gICAgICAgICAgfWVsc2VcclxuICAgICAgICAgICAgdGhyb3cgXCLotYTmupDor7fmsYLlpLHotKVcIjsgICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgIOmhtemdoui3s+i9rFxyXG4gICAgICAgICovXHJcbiAgICAgICAgJHRpbWVvdXQoKCkgPT57XHJcbiAgICAgICAgICAgICRsb2NhdGlvbi5wYXRoKFwiL3dvcmtzcGFjZXMvT3ZlcnZpZXcvdGFza1wiKTtcclxuICAgICAgICB9LDI1MCk7XHJcbiAgICAgICAgbWlncmF0aW9uQ2xpY2suY2xvc2UoKTsgICAgIFxyXG4gICAgICB9LFxyXG4gICAgICBvcGVuOiAoc2VsZWN0ZWQpID0+e1xyXG4gICAgICAgIHZhciBtaWdyYXRpb25DbGljayA9ICRzY29wZS5taWdyYXRpb25DbGljazsgICBcclxuICAgICAgICAvKlxyXG4gICAgICAgICAg5Yik5pat5pWw5o2u5piv5ZCm5bey5oyC6L295L2/55So5ZKM5q2j5Zyo6L+B56e744CCXHJcbiAgICAgICAgKi8gICAgXHJcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBLdWJlcm5ldGVzLmNoZWNrRm9yTWlncmF0aW9uKCRzY29wZS5yZXBsaWNhc01vZGVsLnJlcGxpY2F0aW9uQ29udHJvbGxlcnMsICRzY29wZS5tb2RlbC50cmFuc2ZlclRhc2tzICwgJHNjb3BlLnRhYmxlQ29uZmlnLnNlbGVjdGVkSXRlbXMpO1xyXG5cclxuICAgICAgICBpZihtZXNzYWdlID09IFwiXCIpe1xyXG4gICAgICAgICAgaWYoJHNjb3BlLnZvbHVtZXMgJiYgJHNjb3BlLnZvbHVtZXMgaW5zdGFuY2VvZiBBcnJheSAmJiAkc2NvcGUudm9sdW1lcy5sZW5ndGggPjApXHJcbiAgICAgICAgICAgIG1pZ3JhdGlvbkNsaWNrLnNlbGVjdGVkSXRlbSA9ICRzY29wZS52b2x1bWVzWzBdOyBcclxuICAgICAgICAgIG1pZ3JhdGlvbkNsaWNrLmRpYWxvZy5vcGVuKCk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuaTjeS9nOWksei0pTpcIiArIG1lc3NhZ2UgKyBcIiwg5LiN6IO96L+B56e777yBXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBjbG9zZTogKCkgPT4ge1xyXG4gICAgICAgICRzY29wZS5taWdyYXRpb25DbGljay5zZWxlY3RlZEl0ZW0gPSB7XCJuYW1lXCI6IFwi5b2T5YmN5rKh5pyJ5Y+v5Lul6L+B56e755qE6ZuG576kXCJ9O1xyXG4gICAgICAgICRzY29wZS5taWdyYXRpb25DbGljay5kaWFsb2cuY2xvc2UoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuY3JlYXRlT3JhY2xlU2VydmljZSA9IChpdGVtcykgPT57ICAgICBcclxuICAgICAgdmFyICBleGl0ZWRJdGVtcyA9ICBLdWJlcm5ldGVzLmNoZWNrRm9yQ3JlYXRlT3JhY2xlKCRzY29wZS5tb2RlbC50cmFuc2ZlclRhc2tzLCBpdGVtcyk7ICAgICBcclxuICAgICAgaWYoZXhpdGVkSXRlbXMubGVuZ3RoID09IDApeyAgICBcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goaXRlbXMsKGl0ZW0pPT57XHJcbiAgICAgICAgICB2YXIgaXNFeGl0ZWQgPSBLdWJlcm5ldGVzLmNoZWNrRm9yRXhpdCgkc2NvcGUucmVwbGljYXNNb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCBpdGVtKTtcclxuICAgICAgICAgIGlmKCFpc0V4aXRlZCl7ICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBLdWJlcm5ldGVzLmNyZWF0ZVJDKHtcclxuICAgICAgICAgICAgICBuYW1lOiBpdGVtLl9rZXksXHJcbiAgICAgICAgICAgICAgbGFiZWxzOiB7XHJcbiAgICAgICAgICAgICAgICBzeXN0ZW06IGl0ZW0uc3lzdGVtQ29kZS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogaXRlbS5kYXRhVmVyc2lvbi50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgcmVnaW9uOiBpdGVtLnJlZ2lvbmFsaXNtQ29kZS50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgY2l0eU5hbWU6IGl0ZW0uY2l0eU5hbWUsXHJcbiAgICAgICAgICAgICAgICBkaXN0cmljdE5hbWU6IGl0ZW0uZGlzdHJpY3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgc3lzdGVtTmFtZTogaXRlbS5zeXN0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQrXCJcIixcclxuICAgICAgICAgICAgICAgIHllYXI6IGl0ZW0ueWVhclxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgcGF0aDogaXRlbS5kYXRhUGF0aCtcImFwcC9cIixcclxuICAgICAgICAgICAgICBpc1RhcmdldDogXCJmYWxzZVwiLFxyXG4gICAgICAgICAgICAgIGlzRXh0cmFjdDogaXRlbS5leHRyYWN0U3RhdHVzXHJcbiAgICAgICAgICAgIH0sIChyYykgPT57IFxyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5jb25uZWN0T3JhY2xlKCRodHRwLCAkdGltZW91dCwgXCIvamF2YS9jb25zb2xlL2FwaS9jb25uZWN0T3JhY2xlXCIsIFwiY3JlYXRlXCIsIHJjLCAwKTsgIFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICAgIH0pOyAgICBcclxuICAgICAgIFxyXG4gICAgICAgICR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICRsb2NhdGlvbi5wYXRoKCcva3ViZXJuZXRlcy9uYW1lc3BhY2UvZGVmYXVsdC9yZXBsaWNhdGlvbkNvbnRyb2xsZXJzJyk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB2YXIgbmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZXhpdGVkSXRlbXMsIChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIG5hbWUgKz0gaXRlbS5uYW1lICsgXCItXCIgKyBpdGVtLnN5c3RlbU5hbWUgKyBcIixcIjtcclxuICAgICAgICAgIH0pOyAgICBcclxuICAgICAgICAgIENvbmZpZ3MuY3VzdG9tQWxlcnQoXCLmj5DnpLpcIiwgXCLmk43kvZzlpLHotKU6IOato+WcqOi/geenu+eahOaVsOaNruS4jeiDveiiq+WQr+WKqO+8gVwiLCAnJywgbnVsbCwgMCwgXCJlcnJvclwiKTsgICAgICAgICAgXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbml0KCRzY29wZSwkbG9jYXRpb24sJHJvdXRlUGFyYW1zKXtcclxuICAgICAgLy8kc2NvcGUubW9kZWwudXBkYXRlTW9kZWwoKTtcclxuICAgICAgJHNjb3BlLmtleVF1ZXJ5ID0gXCJcIjsgXHJcbiAgICAgICRzY29wZS5tb2RlbC51cGRhdGVQYXJhbU9wdGlvbihcImtleVF1ZXJ5XCIsICRzY29wZS5rZXlRdWVyeSk7IFxyXG4gICAgICBpZihDb25maWdzTW9kZWwuY2x1c3RlciE9bnVsbClcclxuICAgICAgICAkc2NvcGUudm9sdW1lcyA9IENvbmZpZ3NNb2RlbC5jbHVzdGVyOyAgXHJcblxyXG4gICAgICAvL+WIm+W7uuS6jOe6p+iPnOWNlSAgICAgIFxyXG4gICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZUN1cnJlbnRTdWJOYXZCYXIoJHNjb3BlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcyk7XHJcbiAgICAgICRzY29wZS5uYXZiYXJJdGVtcyA9W3sgICAgICAgXHJcbiAgICAgICAgaGVyZjogXCJcIixcclxuICAgICAgICBsYWJlbDogXCLlhajpg6hcIixcclxuICAgICAgICB0aXRsZTogXCLmn6XnnIvlhajpg6jmlbDmja5cIixcclxuICAgICAgICBjbGFzczogXCJhY3RpdmVcIixcclxuICAgICAgICBhbGlhczogbnVsbFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVyZjogXCJcIixcclxuICAgICAgICBsYWJlbDogXCLmibnmrKFBXCIsXHJcbiAgICAgICAgdGl0bGU6IFwi5p+l55yL5om55qyhQeeahOaVsOaNrlwiLFxyXG4gICAgICAgIGNsYXNzOiBcIlwiLFxyXG4gICAgICAgIGFsaWFzOiBcIkFcIlxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVyZjogXCJcIixcclxuICAgICAgICBsYWJlbDogXCLmibnmrKFCXCIsXHJcbiAgICAgICAgdGl0bGU6IFwi5p+l55yL5om55qyhQueahOaVsOaNrlwiLFxyXG4gICAgICAgIGNsYXNzOiBcIlwiLFxyXG4gICAgICAgIGFsaWFzOiBcIkJcIlxyXG4gICAgICB9XVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldERhdGFUeXBlKCRsb2NhdGlvbil7XHJcbiAgICAgIHZhciBwYXRoID0gJGxvY2F0aW9uLnBhdGgoKTtcclxuICAgICAgdmFyIGRhdGFUeXBlO1xyXG4gICAgICB2YXIgdm9sdW1lVHlwZTtcclxuICAgICAgdmFyIHN1YlBhdGggPSBwYXRoLnNwbGl0KFwiL1wiKTsgICAgICBcclxuICAgICAgc3dpdGNoIChzdWJQYXRoW3N1YlBhdGgubGVuZ3RoIC0xXSkge1xyXG4gICAgICAgIGNhc2UgXCJmaW5hbmNpYWxcIjpcclxuICAgICAgICAgIGRhdGFUeXBlID0gXCLotKLmlL9cIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzb2NpYWwtc2VjdXJpdHlcIjpcclxuICAgICAgICAgIGRhdGFUeXBlID0gXCLnpL7kv51cIjtcclxuICAgICAgICAgIGJyZWFrOyAgICAgICAgICBcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgZGF0YVR5cGUgPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH07ICAgICAgXHJcbiAgICAgIHN3aXRjaCAoc3ViUGF0aFszXSkge1xyXG4gICAgICAgIGNhc2UgXCJob3RcIjpcclxuICAgICAgICAgIHZvbHVtZVR5cGUgPSAwXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdm9sdW1lVHlwZSA9IDFcclxuICAgICAgfSAgICBcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBcImRhdGFUeXBlXCI6IGRhdGFUeXBlLFxyXG4gICAgICAgIFwidm9sdW1lVHlwZVwiOiB2b2x1bWVUeXBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuICBcclxuICBleHBvcnQgdmFyIEFwcHMgPSBjb250cm9sbGVyKFwiQXBwc1wiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1NlcnZpY2VzXCIsIFwiS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnNcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJGRpYWxvZ1wiLCBcIiR0aW1lb3V0XCIsIFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1NlcnZpY2VzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNSZXBsaWNhdGlvbkNvbnRyb2xsZXJzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNQb2RzOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICRkaWFsb2csICR0aW1lb3V0KSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG5cclxuICAgICRzY29wZS5hcHBzID0gW107XHJcbiAgICAkc2NvcGUuYWxsQXBwcyA9IFtdO1xyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUuZmV0Y2hlZCA9IGZhbHNlO1xyXG4gICAgJHNjb3BlLmpzb24gPSAnJztcclxuICAgIENvbnRyb2xsZXJIZWxwZXJzLmJpbmRNb2RlbFRvU2VhcmNoUGFyYW0oJHNjb3BlLCAkbG9jYXRpb24sICdpZCcsICdfaWQnLCB1bmRlZmluZWQpO1xyXG4gICAgQ29udHJvbGxlckhlbHBlcnMuYmluZE1vZGVsVG9TZWFyY2hQYXJhbSgkc2NvcGUsICRsb2NhdGlvbiwgJ2FwcFNlbGVjdG9yU2hvdycsICdvcGVuQXBwJywgdW5kZWZpbmVkKTtcclxuICAgIENvbnRyb2xsZXJIZWxwZXJzLmJpbmRNb2RlbFRvU2VhcmNoUGFyYW0oJHNjb3BlLCAkbG9jYXRpb24sICdtb2RlJywgJ21vZGUnLCAnZGV0YWlsJyk7XHJcblxyXG4gICAgdmFyIGJyYW5jaCA9ICRzY29wZS5icmFuY2ggfHwgXCJtYXN0ZXJcIjtcclxuICAgIHZhciBuYW1lc3BhY2UgPSBudWxsO1xyXG5cclxuICAgIGZ1bmN0aW9uIGFwcE1hdGNoZXMoYXBwKSB7XHJcbiAgICAgIHZhciBmaWx0ZXJUZXh0ID0gJHNjb3BlLmFwcFNlbGVjdG9yLmZpbHRlclRleHQ7XHJcbiAgICAgIGlmIChmaWx0ZXJUZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5ncm91cElkLCBmaWx0ZXJUZXh0KSB8fFxyXG4gICAgICAgICAgQ29yZS5tYXRjaEZpbHRlcklnbm9yZUNhc2UoYXBwLmFydGlmYWN0SWQsIGZpbHRlclRleHQpIHx8XHJcbiAgICAgICAgICBDb3JlLm1hdGNoRmlsdGVySWdub3JlQ2FzZShhcHAubmFtZSwgZmlsdGVyVGV4dCkgfHxcclxuICAgICAgICAgIENvcmUubWF0Y2hGaWx0ZXJJZ25vcmVDYXNlKGFwcC5kZXNjcmlwdGlvbiwgZmlsdGVyVGV4dCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhcHBSdW5uaW5nKGFwcCkge1xyXG4gICAgICByZXR1cm4gJHNjb3BlLm1vZGVsLmFwcHMuYW55KChydW5uaW5nKSA9PiBydW5uaW5nLmFwcFBhdGggPT09IGFwcC5hcHBQYXRoKTtcclxuICAgIH1cclxuXHJcbiAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XHJcbiAgICAgIGRhdGE6ICdtb2RlbC5hcHBzJyxcclxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxyXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgZmlsdGVyT3B0aW9uczoge1xyXG4gICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgfSxcclxuICAgICAgY29sdW1uRGVmczogW1xyXG4gICAgICAgIHsgZmllbGQ6ICckbmFtZScsIGRpc3BsYXlOYW1lOiAnQXBwJywgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgXCJhcHBJY29uVGVtbGF0ZS5odG1sXCIpKSB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckc2VydmljZXNUZXh0JywgZGlzcGxheU5hbWU6ICdTZXJ2aWNlcycsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwU2VydmljZXNUZW1wbGF0ZS5odG1sXCIpKSB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckcmVwbGljYXRpb25Db250cm9sbGVyc1RleHQnLCBkaXNwbGF5TmFtZTogJ0NvbnRyb2xsZXJzJywgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgXCJhcHBSZXBsaWNhdGlvbkNvbnRyb2xsZXJUZW1wbGF0ZS5odG1sXCIpKSB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckcG9kQ291bnQnLCBkaXNwbGF5TmFtZTogJ1BvZHMnLCBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChVcmxIZWxwZXJzLmpvaW4odGVtcGxhdGVQYXRoLCBcImFwcFBvZENvdW50c0FuZExpbmtUZW1wbGF0ZS5odG1sXCIpKSB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICckY3JlYXRpb25EYXRlJywgZGlzcGxheU5hbWU6ICdEZXBsb3llZCcsIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsIFwiYXBwRGVwbG95ZWRUZW1wbGF0ZS5odG1sXCIpKSB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuXHJcbiAgICAkc2NvcGUuZXhwYW5kZWRQb2RzID0gW107XHJcblxyXG4gICAgJHNjb3BlLiRvbignZG8tcmVzaXplJywgKCRldmVudCwgY29udHJvbGxlcikgPT4ge1xyXG4gICAgICAkc2NvcGUucmVzaXplRGlhbG9nLm9wZW4oY29udHJvbGxlcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAgICAgXHJcbiAgICAkc2NvcGUucG9kRXhwYW5kZWQgPSAocG9kKSA9PiB7XHJcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKVxyXG4gICAgICByZXR1cm4gaWQgJiYgKCRzY29wZS5leHBhbmRlZFBvZHMgfHwgW10pLmluZGV4T2YoaWQpID49IDA7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5leHBhbmRQb2QgPSAocG9kKSA9PiB7XHJcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgJHNjb3BlLmV4cGFuZGVkUG9kcy5wdXNoKGlkKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuY29sbGFwc2VQb2QgPSAocG9kKSA9PiB7XHJcbiAgICAgIHZhciBpZCA9IGdldE5hbWUocG9kKTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgXy5yZW1vdmUoJHNjb3BlLmV4cGFuZGVkUG9kcywgKHYpID0+IGlkID09PSB2KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgIEt1YmVybmV0ZXMuc2V0SnNvbigkc2NvcGUsICRsb2NhdGlvbi5zZWFyY2goKVsnX2lkJ10sICRzY29wZS5tb2RlbC5hcHBzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIGRlbGV0ZUFwcChhcHAsIG9uQ29tcGxldGVGbikge1xyXG4gICAgICBmdW5jdGlvbiBkZWxldGVTZXJ2aWNlcyhzZXJ2aWNlcywgc2VydmljZSwgb25Db21wbGV0ZWRGbikge1xyXG4gICAgICAgIGlmICghc2VydmljZSB8fCAhc2VydmljZXMpIHtcclxuICAgICAgICAgIHJldHVybiBvbkNvbXBsZXRlZEZuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpZCA9IGdldE5hbWUoc2VydmljZSk7XHJcbiAgICAgICAgaWYgKCFpZCkge1xyXG4gICAgICAgICAgbG9nLndhcm4oXCJObyBJRCBmb3Igc2VydmljZSBcIiArIGFuZ3VsYXIudG9Kc29uKHNlcnZpY2UpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgS3ViZXJuZXRlc1NlcnZpY2VzLmRlbGV0ZSh7XHJcbiAgICAgICAgICAgIGlkOiBpZFxyXG4gICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkRlbGV0ZWQgc2VydmljZTogXCIsIGlkKTtcclxuICAgICAgICAgICAgZGVsZXRlU2VydmljZXMoc2VydmljZXMsIHNlcnZpY2VzLnNoaWZ0KCksIG9uQ29tcGxldGVkRm4pO1xyXG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nIHNlcnZpY2U6IFwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIGRlbGV0ZVNlcnZpY2VzKHNlcnZpY2VzLCBzZXJ2aWNlcy5zaGlmdCgpLCBvbkNvbXBsZXRlZEZuKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gZGVsZXRlUmVwbGljYXRpb25Db250cm9sbGVycyhyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCByZXBsaWNhdGlvbkNvbnRyb2xsZXIsIG9uQ29tcGxldGVkRm4pIHtcclxuICAgICAgICBpZiAoIXJlcGxpY2F0aW9uQ29udHJvbGxlciB8fCAhcmVwbGljYXRpb25Db250cm9sbGVycykge1xyXG4gICAgICAgICAgcmV0dXJuIG9uQ29tcGxldGVkRm4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGlkID0gZ2V0TmFtZShyZXBsaWNhdGlvbkNvbnRyb2xsZXIpO1xyXG4gICAgICAgIGlmICghaWQpIHtcclxuICAgICAgICAgIGxvZy53YXJuKFwiTm8gSUQgZm9yIHJlcGxpY2F0aW9uQ29udHJvbGxlciBcIiArIGFuZ3VsYXIudG9Kc29uKHJlcGxpY2F0aW9uQ29udHJvbGxlcikpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVycy5kZWxldGUoe1xyXG4gICAgICAgICAgICBpZDogaWRcclxuICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xyXG4gICAgICAgICAgICBsb2cuZGVidWcoXCJEZWxldGVkIHJlcGxpY2F0aW9uQ29udHJvbGxlcjogXCIsIGlkKTtcclxuICAgICAgICAgICAgZGVsZXRlUmVwbGljYXRpb25Db250cm9sbGVycyhyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzLnNoaWZ0KCksIG9uQ29tcGxldGVkRm4pO1xyXG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nIHJlcGxpY2F0aW9uQ29udHJvbGxlcjogXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgZGVsZXRlUmVwbGljYXRpb25Db250cm9sbGVycyhyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzLnNoaWZ0KCksIG9uQ29tcGxldGVkRm4pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBkZWxldGVQb2RzKHBvZHMsIHBvZCwgb25Db21wbGV0ZWRGbikge1xyXG4gICAgICAgIGlmICghcG9kIHx8ICFwb2RzKSB7XHJcbiAgICAgICAgICByZXR1cm4gb25Db21wbGV0ZWRGbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaWQgPSBnZXROYW1lKHBvZCk7XHJcbiAgICAgICAgaWYgKCFpZCkge1xyXG4gICAgICAgICAgbG9nLndhcm4oXCJObyBJRCBmb3IgcG9kIFwiICsgYW5ndWxhci50b0pzb24ocG9kKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIEt1YmVybmV0ZXNQb2RzLmRlbGV0ZSh7XHJcbiAgICAgICAgICAgIGlkOiBpZFxyXG4gICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkRlbGV0ZWQgcG9kOiBcIiwgaWQpO1xyXG4gICAgICAgICAgICBkZWxldGVQb2RzKHBvZHMsIHBvZHMuc2hpZnQoKSwgb25Db21wbGV0ZWRGbik7XHJcbiAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgbG9nLmRlYnVnKFwiRXJyb3IgZGVsZXRpbmcgcG9kOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICBkZWxldGVQb2RzKHBvZHMsIHBvZHMuc2hpZnQoKSwgb25Db21wbGV0ZWRGbik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBzZXJ2aWNlcyA9IFtdLmNvbmNhdChhcHAuc2VydmljZXMpO1xyXG4gICAgICBkZWxldGVTZXJ2aWNlcyhzZXJ2aWNlcywgc2VydmljZXMuc2hpZnQoKSwgKCkgPT4ge1xyXG5cclxuICAgICAgICB2YXIgcmVwbGljYXRpb25Db250cm9sbGVycyA9IFtdLmNvbmNhdChhcHAucmVwbGljYXRpb25Db250cm9sbGVycyk7XHJcbiAgICAgICAgZGVsZXRlUmVwbGljYXRpb25Db250cm9sbGVycyhyZXBsaWNhdGlvbkNvbnRyb2xsZXJzLCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzLnNoaWZ0KCksICgpID0+IHtcclxuXHJcbiAgICAgICAgICB2YXIgcG9kcyA9IFtdLmNvbmNhdChhcHAucG9kcyk7XHJcbiAgICAgICAgICBkZWxldGVQb2RzKHBvZHMsIHBvZHMuc2hpZnQoKSwgb25Db21wbGV0ZUZuKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmRlbGV0ZVNpbmdsZUFwcCA9IChhcHApID0+IHtcclxuICAgICAgJHNjb3BlLmRlbGV0ZVByb21wdChbYXBwXSk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcclxuICAgICAgICBzZWxlY3RlZCA9IFt7XHJcbiAgICAgICAgICBpZDogc2VsZWN0ZWRcclxuICAgICAgICB9XTtcclxuICAgICAgfVxyXG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXHJcbiAgICAgICAgaW5kZXg6ICckbmFtZScsXHJcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBuZXh0KSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpZCA9IG5leHQubmFtZTtcclxuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0aW5nOiBcIiwgaWQpO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlQXBwKG5leHQsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRlZDogXCIsIGlkKTtcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aXRsZTogJ0RlbGV0ZSBBcHBzPycsXHJcbiAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBBcHBzIHdpbGwgYmUgZGVsZXRlZDonLFxyXG4gICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXHJcbiAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXInLFxyXG4gICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXHJcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXHJcbiAgICAgIH0pLm9wZW4oKTtcclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLmFwcFNlbGVjdG9yID0ge1xyXG4gICAgICBmaWx0ZXJUZXh0OiBcIlwiLFxyXG4gICAgICBmb2xkZXJzOiBbXSxcclxuICAgICAgc2VsZWN0ZWRBcHBzOiBbXSxcclxuXHJcbiAgICAgIGlzT3BlbjogKGZvbGRlcikgPT4ge1xyXG4gICAgICAgIGlmICgkc2NvcGUuYXBwU2VsZWN0b3IuZmlsdGVyVGV4dCAhPT0gJycgfHwgZm9sZGVyLmV4cGFuZGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJvcGVuZWRcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiY2xvc2VkXCI7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBnZXRTZWxlY3RlZENsYXNzOiAoYXBwKSA9PiB7XHJcbiAgICAgICAgaWYgKGFwcC5hYnN0cmFjdCkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiYWJzdHJhY3RcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFwcC5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIFwic2VsZWN0ZWRcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBzaG93QXBwOiAoYXBwKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGFwcE1hdGNoZXMoYXBwKSAmJiAhYXBwUnVubmluZyhhcHApO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgc2hvd0ZvbGRlcjogKGZvbGRlcikgPT4ge1xyXG4gICAgICAgIHJldHVybiAhJHNjb3BlLmFwcFNlbGVjdG9yLmZpbHRlclRleHQgfHwgZm9sZGVyLmFwcHMuc29tZSgoYXBwKSA9PiBhcHBNYXRjaGVzKGFwcCkgJiYgIWFwcFJ1bm5pbmcoYXBwKSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjbGVhclNlbGVjdGVkOiAoKSA9PiB7XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5tb2RlbC5hcHBGb2xkZXJzLCAoZm9sZGVyKSA9PiB7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZm9sZGVyLmFwcHMsIChhcHApID0+IHtcclxuICAgICAgICAgICAgYXBwLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3Iuc2VsZWN0ZWRBcHBzID0gW107XHJcbiAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgIHVwZGF0ZVNlbGVjdGVkOiAoKSA9PiB7XHJcbiAgICAgICAgLy8gbGV0cyB1cGRhdGUgdGhlIHNlbGVjdGVkIGFwcHNcclxuICAgICAgICB2YXIgc2VsZWN0ZWRBcHBzID0gW107XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5tb2RlbC5hcHBGb2xkZXJzLCAoZm9sZGVyKSA9PiB7XHJcbiAgICAgICAgICB2YXIgYXBwcyA9IGZvbGRlci5hcHBzLmZpbHRlcigoYXBwKSA9PiBhcHAuc2VsZWN0ZWQpO1xyXG4gICAgICAgICAgaWYgKGFwcHMpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRBcHBzID0gc2VsZWN0ZWRBcHBzLmNvbmNhdChhcHBzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3Iuc2VsZWN0ZWRBcHBzID0gXy5zb3J0Qnkoc2VsZWN0ZWRBcHBzLCBcIm5hbWVcIik7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBzZWxlY3Q6IChhcHAsIGZsYWcpID0+IHtcclxuICAgICAgICBhcHAuc2VsZWN0ZWQgPSBmbGFnO1xyXG4gICAgICAgICRzY29wZS5hcHBTZWxlY3Rvci51cGRhdGVTZWxlY3RlZCgpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgaGFzU2VsZWN0aW9uOiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICRzY29wZS5tb2RlbC5hcHBGb2xkZXJzLmFueSgoZm9sZGVyKSA9PiBmb2xkZXIuYXBwcy5hbnkoKGFwcCkgPT4gYXBwLnNlbGVjdGVkKSk7XHJcbiAgICAgIH0sXHJcblxyXG5cclxuICAgICAgcnVuU2VsZWN0ZWRBcHBzOiAoKSA9PiB7XHJcbiAgICAgICAgLy8gbGV0cyBydW4gYWxsIHRoZSBzZWxlY3RlZCBhcHBzXHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5hcHBTZWxlY3Rvci5zZWxlY3RlZEFwcHMsIChhcHApID0+IHtcclxuICAgICAgICAgIHZhciBuYW1lID0gYXBwLm5hbWU7XHJcbiAgICAgICAgICB2YXIgbWV0YWRhdGFQYXRoID0gYXBwLm1ldGFkYXRhUGF0aDtcclxuICAgICAgICAgIGlmIChtZXRhZGF0YVBhdGgpIHtcclxuICAgICAgICAgICAgLy8gbGV0cyBsb2FkIHRoZSBqc29uL3lhbWxcclxuICAgICAgICAgICAgLy92YXIgdXJsID0gZ2l0UGF0aFRvVXJsKFdpa2kuZ2l0UmVsYXRpdmVVUkwoYnJhbmNoLCBtZXRhZGF0YVBhdGgpKTtcclxuICAgICAgICAgICAgdmFyIHVybCA9IGdpdFBhdGhUb1VybChtZXRhZGF0YVBhdGgsIGJyYW5jaCk7XHJcbiAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0cyBjb252ZXJ0IHRoZSBqc29uIG9iamVjdCBzdHJ1Y3R1cmUgaW50byBhIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0gYW5ndWxhci50b0pzb24oZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gKCkgPT4ge307XHJcbiAgICAgICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5ydW5BcHAoJGxvY2F0aW9uLCAkc2NvcGUsICRodHRwLCBLdWJlcm5ldGVzQXBpVVJMLCBqc29uLCBuYW1lLCBmbiwgbmFtZXNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLnN1bW1hcnlIdG1sID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gbGV0cyBnbyBiYWNrIHRvIHRoZSBhcHBzIHZpZXdcclxuICAgICAgICAkc2NvcGUuYXBwU2VsZWN0b3IuY2xlYXJTZWxlY3RlZCgpO1xyXG4gICAgICAgICRzY29wZS5hcHBTZWxlY3RvclNob3cgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgX21vZHVsZS5kaXJlY3RpdmUoXCJoYXd0aW9CcmVhZGNydW1ic1wiLCBbJ0hhd3Rpb0JyZWFkY3J1bWJzJywgKEhhd3Rpb0JyZWFkY3J1bWJzKSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAvKlxyXG4gICAgICB0ZW1wbGF0ZVVybDogS3ViZXJuZXRlcy50ZW1wbGF0ZVBhdGggKyAnYnJlYWRjcnVtYnMuaHRtbCdcclxuICAgICAgKi9cclxuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRycykgPT4ge1xyXG4gICAgICAgIEhhd3Rpb0JyZWFkY3J1bWJzLmFwcGx5KHNjb3BlLiRldmFsKCdicmVhZGNydW1iQ29uZmlnJykpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgQnVpbGRDb250cm9sbGVyID0gY29udHJvbGxlcihcIkJ1aWxkQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgICAgICRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkO1xyXG5cclxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XHJcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQsIG51bGwsICRzY29wZSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgICAgJHNjb3BlLml0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gYnVpbGRSZXN0VXJsKCRzY29wZS5pZCk7XHJcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZW5yaWNoQnVpbGQoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgQnVpbGRDb25maWdDb250cm9sbGVyID0gY29udHJvbGxlcihcIkJ1aWxkQ29uZmlnQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgICAgICRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkQ29uZmlnO1xyXG5cclxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdEJyZWFkY3J1bWJzKCRzY29wZS5pZCk7XHJcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUuaWQpO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgICAgICRzY29wZS5pdGVtID0gbnVsbDtcclxuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcclxuICAgICAgICAgICAgdmFyIHVybCA9IGJ1aWxkQ29uZmlnUmVzdFVybCgkc2NvcGUuaWQpO1xyXG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLmVudGl0eSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBzb3J0ZWRCdWlsZHMgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICBlbnJpY2hCdWlsZENvbmZpZyhkYXRhLCBzb3J0ZWRCdWlsZHMpO1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUubW9kZWwuc2V0UHJvamVjdCgkc2NvcGUuZW50aXR5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBCdWlsZENvbmZpZ0VkaXRDb250cm9sbGVyID0gX21vZHVsZS5jb250cm9sbGVyKFwiS3ViZXJuZXRlcy5CdWlsZENvbmZpZ0VkaXRDb250cm9sbGVyXCIsICgkc2NvcGUsICRlbGVtZW50LCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBLOFNDbGllbnRGYWN0b3J5LCBTY2hlbWFSZWdpc3RyeTpIYXd0aW9Gb3Jtcy5TY2hlbWFSZWdpc3RyeSkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wicHJvamVjdFwiXSB8fCAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuXHJcbiAgICAgICAgdmFyIG1vZGUgPSAkc2NvcGUuJGV2YWwoJ21vZGUnKSB8fCAnZWRpdCc7XHJcblxyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIk1vZGU6IFwiLCBtb2RlKTtcclxuXHJcblxyXG4gICAgICAgIHZhciBzcGVjQ29uZmlnID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdTcGVjJyk7XHJcbiAgICAgICAgdmFyIGdpdEJ1aWxkU291cmNlID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR2l0QnVpbGRTb3VyY2UnKTtcclxuICAgICAgICB2YXIgYnVpbGRTb3VyY2UgPSBTY2hlbWFSZWdpc3RyeS5nZXRTY2hlbWEoJ2lvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNvdXJjZScpO1xyXG4gICAgICAgIHZhciBidWlsZE91dHB1dCA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkT3V0cHV0Jyk7XHJcbiAgICAgICAgdmFyIHJlc291cmNlcyA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVJlcXVpcmVtZW50cycpO1xyXG4gICAgICAgIHZhciByZXZpc2lvbiA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZVJldmlzaW9uJyk7XHJcbiAgICAgICAgdmFyIHN0cmF0ZWd5ID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTdHJhdGVneScpO1xyXG4gICAgICAgIHZhciBjdXN0b21TdHJhdGVneSA9IFNjaGVtYVJlZ2lzdHJ5LmdldFNjaGVtYSgnaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkN1c3RvbUJ1aWxkU3RyYXRlZ3knKTtcclxuICAgICAgICB2YXIgYnVpbGRUcmlnZ2VyUG9saWN5ID0gU2NoZW1hUmVnaXN0cnkuZ2V0U2NoZW1hKCdpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRUcmlnZ2VyUG9saWN5Jyk7XHJcblxyXG4gICAgICAgIHZhciBnZXRTZWNyZXRzID0gKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuICRzY29wZS5zZWNyZXRzO1xyXG4gICAgICAgIH07XHJcblxyXG5cclxuICAgICAgICB2YXIgc2VjcmV0U2NoZW1hVHlwZSA9IFwiZmFicmljOF9TZWNyZXRSZWZlcmVuY2VcIjtcclxuICAgICAgICB2YXIgc2VjcmV0U2NoZW1hUmVmID0gXCIjL2RlZmluaXRpb25zL1wiICsgc2VjcmV0U2NoZW1hVHlwZTtcclxuICAgICAgICB2YXIgc2VjcmV0U2NoZW1hSmF2YVR5cGUgPSBcImlvLmZhYnJpYzguY29uc29sZS5TZWNyZXRSZWZlcmVuY2VcIjtcclxuXHJcbiAgICAgICAgdmFyIHNlY3JldE5hbWVFbGVtZW50ID0gPEhhd3Rpb0Zvcm1zLkZvcm1FbGVtZW50PiB7XHJcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgIFwiZW51bVwiOiBnZXRTZWNyZXRzLFxyXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgc2VjcmV0U2NoZW1hOiBIYXd0aW9Gb3Jtcy5Gb3JtQ29uZmlndXJhdGlvbiA9IDxhbnk+IHtcclxuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgICAgcHJvcGVydGllczoge1xyXG4gICAgICAgICAgICBcIm5hbWVcIjogc2VjcmV0TmFtZUVsZW1lbnRcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBqYXZhVHlwZTogc2VjcmV0U2NoZW1hSmF2YVR5cGVcclxuICAgICAgICB9O1xyXG4gICAgICAgIFNjaGVtYVJlZ2lzdHJ5LmFkZFNjaGVtYShzZWNyZXRTY2hlbWFUeXBlLCBzZWNyZXRTY2hlbWEpO1xyXG5cclxuICAgICAgICAvLyBsZXRzIHN3aXRjaCB0byB0aGUgbmV3IHNlY3JldHMgdHlwZXM6XHJcbiAgICAgICAgdmFyIHNvdXJjZVNlY3JldFByb3BlcnR5ID0gQ29yZS5wYXRoR2V0KGJ1aWxkU291cmNlLCBbXCJwcm9wZXJ0aWVzXCIsIFwic291cmNlU2VjcmV0XCJdKTtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goW1xyXG4gICAgICAgICAgQ29yZS5wYXRoR2V0KGN1c3RvbVN0cmF0ZWd5LCBbXCJwcm9wZXJ0aWVzXCIsIFwicHVsbFNlY3JldFwiXSksXHJcbiAgICAgICAgICBzb3VyY2VTZWNyZXRQcm9wZXJ0eSxcclxuICAgICAgICBdLCAoc2NoZW1hVHlwZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHNjaGVtYVR5cGUpIHtcclxuICAgICAgICAgICAgc2NoZW1hVHlwZVtcInR5cGVcIl0gPSBzZWNyZXRTY2hlbWFUeXBlO1xyXG4gICAgICAgICAgICBzY2hlbWFUeXBlW1wiJHJlZlwiXSA9IHNlY3JldFNjaGVtYVJlZjtcclxuICAgICAgICAgICAgc2NoZW1hVHlwZVtcImphdmFUeXBlXCJdID0gc2VjcmV0U2NoZW1hSmF2YVR5cGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIGxldHMgdHJ5IG1ha2UgdGhlIGJ1aWxkU291cmNlJ3Mgc291cmNlU2VjcmV0IG1hbmRhdG9yeVxyXG4gICAgICAgIC8vc2NoZW1hU2V0UmVxdWlyZWQoY3VzdG9tU3RyYXRlZ3ksICdwdWxsU2VjcmV0Jyk7XHJcbiAgICAgICAgc2NoZW1hU2V0UmVxdWlyZWQoYnVpbGRTb3VyY2UsICdzb3VyY2VTZWNyZXQnKTtcclxuICAgICAgICBpZiAoc291cmNlU2VjcmV0UHJvcGVydHkpIHtcclxuICAgICAgICAgIENvcmUucGF0aFNldChzb3VyY2VTZWNyZXRQcm9wZXJ0eSwgWydwcm9wZXJ0aWVzJywgJ3JlcXVpcmVkJ10sIHRydWUpO1xyXG4gICAgICAgICAgQ29yZS5wYXRoU2V0KHNvdXJjZVNlY3JldFByb3BlcnR5LCBbJ3Byb3BlcnRpZXMnLCAnaW5wdXQtYXR0cmlidXRlcycsICdyZXF1aXJlZCddLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRzY29wZS5jdXN0b21TdHJhdGVneSA9IGN1c3RvbVN0cmF0ZWd5O1xyXG4gICAgICAgICRzY29wZS5idWlsZFNvdXJjZSA9IGJ1aWxkU291cmNlO1xyXG5cclxuICAgICAgICAkc2NvcGUuc2VjcmV0cyA9IFtdO1xyXG5cclxuICAgICAgICAvLyAkc2NvcGUuY29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5vc19idWlsZF9CdWlsZENvbmZpZztcclxuICAgICAgICAvLyRzY29wZS5zcGVjQ29uZmlnID0gS3ViZXJuZXRlc1NjaGVtYS5kZWZpbml0aW9ucy5vc19idWlsZF9CdWlsZENvbmZpZ1NwZWM7XHJcbiAgICAgICAgLy9cclxuICAgICAgICBzcGVjQ29uZmlnLnN0eWxlID0gSGF3dGlvRm9ybXMuRm9ybVN0eWxlLlNUQU5EQVJEO1xyXG4gICAgICAgIHNwZWNDb25maWcucHJvcGVydGllc1sndHJpZ2dlcnMnXVsnbGFiZWwtYXR0cmlidXRlcyddID0ge1xyXG4gICAgICAgICAgc3R5bGU6ICdkaXNwbGF5OiBub25lOydcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBnaXRCdWlsZFNvdXJjZS5jb250cm9scyA9IFsndXJpJywgJ3JlZicsICcqJ107XHJcbiAgICAgICAgYnVpbGRTb3VyY2UucHJvcGVydGllc1sndHlwZSddLnR5cGUgPSAnaGlkZGVuJztcclxuICAgICAgICBidWlsZFNvdXJjZS5wcm9wZXJ0aWVzWyd0eXBlJ11bJ2RlZmF1bHQnXSA9ICdHaXQnO1xyXG4gICAgICAgIGJ1aWxkU291cmNlLmNvbnRyb2xzID0gWydnaXQnLCAnY29udGV4dERpcicsICdzb3VyY2VTZWNyZXQnLCAnKiddO1xyXG5cclxuICAgICAgICBnaXRCdWlsZFNvdXJjZVsnaGlkZUxlZ2VuZCddID0gdHJ1ZTtcclxuICAgICAgICBidWlsZFNvdXJjZVsnaGlkZUxlZ2VuZCddID0gdHJ1ZTtcclxuICAgICAgICBidWlsZE91dHB1dFsnaGlkZUxlZ2VuZCddID0gdHJ1ZTtcclxuICAgICAgICByZXNvdXJjZXNbJ2hpZGVMZWdlbmQnXSA9IHRydWU7XHJcbiAgICAgICAgcmV2aXNpb25bJ2hpZGVMZWdlbmQnXSA9IHRydWU7XHJcbiAgICAgICAgc3RyYXRlZ3lbJ2hpZGVMZWdlbmQnXSA9IHRydWU7XHJcblxyXG4gICAgICAgIHN0cmF0ZWd5LmNvbnRyb2xzID0gWyd0eXBlJywgJyonXTtcclxuICAgICAgICBzdHJhdGVneS5wcm9wZXJ0aWVzWyd0eXBlJ10gPSB7XHJcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICBlbnVtOiBbe1xyXG4gICAgICAgICAgICAndmFsdWUnOiAnQ3VzdG9tJyxcclxuICAgICAgICAgICAgJ2xhYmVsJzogJ0N1c3RvbSdcclxuICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgJ3ZhbHVlJzogJ0RvY2tlcicsXHJcbiAgICAgICAgICAgICdsYWJlbCc6ICdEb2NrZXInXHJcbiAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICd2YWx1ZSc6ICdTb3VyY2UnLFxyXG4gICAgICAgICAgICAnbGFiZWwnOiAnU291cmNlJ1xyXG4gICAgICAgICAgfV1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGN1c3RvbVN0cmF0ZWd5Wydjb250cm9sLWdyb3VwLWF0dHJpYnV0ZXMnXSA9IHtcclxuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnQ3VzdG9tJ1wiXHJcbiAgICAgICAgfTtcclxuICAgICAgICBzdHJhdGVneS5wcm9wZXJ0aWVzWydkb2NrZXJTdHJhdGVneSddWydjb250cm9sLWdyb3VwLWF0dHJpYnV0ZXMnXSA9IHtcclxuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnRG9ja2VyJ1wiXHJcbiAgICAgICAgfTtcclxuICAgICAgICBzdHJhdGVneS5wcm9wZXJ0aWVzWydzb3VyY2VTdHJhdGVneSddWydjb250cm9sLWdyb3VwLWF0dHJpYnV0ZXMnXSA9IHtcclxuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnU291cmNlJ1wiXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgYnVpbGRUcmlnZ2VyUG9saWN5LmNvbnRyb2xzID0gWyd0eXBlJywgJyonXTtcclxuICAgICAgICBidWlsZFRyaWdnZXJQb2xpY3kucHJvcGVydGllc1sndHlwZSddID0ge1xyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICBlbnVtOiBbe1xyXG4gICAgICAgICAgICAndmFsdWUnOiAnR2l0aHViJyxcclxuICAgICAgICAgICAgJ2xhYmVsJzogJ0dpdGh1YidcclxuICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgJ3ZhbHVlJzogJ0ltYWdlQ2hhbmdlJyxcclxuICAgICAgICAgICAgJ2xhYmVsJzogJ0ltYWdlIENoYW5nZSdcclxuICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgJ3ZhbHVlJzogJ0dlbmVyaWMnLFxyXG4gICAgICAgICAgICAnbGFiZWwnOiAnR2VuZXJpYydcclxuICAgICAgICAgIH1dXHJcbiAgICAgICAgfTtcclxuICAgICAgICBidWlsZFRyaWdnZXJQb2xpY3kucHJvcGVydGllc1snZ2VuZXJpYyddWydjb250cm9sLWdyb3VwLWF0dHJpYnV0ZXMnXSA9IHtcclxuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnR2VuZXJpYydcIlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnVpbGRUcmlnZ2VyUG9saWN5LnByb3BlcnRpZXNbJ2dpdGh1YiddWydjb250cm9sLWdyb3VwLWF0dHJpYnV0ZXMnXSA9IHtcclxuICAgICAgICAgICduZy1zaG93JzogXCJlbnRpdHkudHlwZSA9PSAnR2l0aHViJ1wiXHJcbiAgICAgICAgfTtcclxuICAgICAgICBidWlsZFRyaWdnZXJQb2xpY3kucHJvcGVydGllc1snaW1hZ2VDaGFuZ2UnXVsnY29udHJvbC1ncm91cC1hdHRyaWJ1dGVzJ10gPSB7XHJcbiAgICAgICAgICAnbmctc2hvdyc6IFwiZW50aXR5LnR5cGUgPT0gJ0ltYWdlQ2hhbmdlJ1wiXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gcmUtYXJyYW5naW5nIHRoZSBjb250cm9sc1xyXG4gICAgICAgIC8vc3BlY0NvbmZpZy5jb250cm9scyA9IFsnc291cmNlJywgJyonXTtcclxuICAgICAgICBcclxuICAgICAgICAvLyB0YWJzXHJcbiAgICAgICAgc3BlY0NvbmZpZy50YWJzID0ge1xyXG4gICAgICAgICAgXCJTb3VyY2VcIjogW1wic291cmNlXCJdLFxyXG4gICAgICAgICAgXCJSZXZpc2lvblwiOiBbXCJyZXZpc2lvblwiXSxcclxuICAgICAgICAgIFwiT3V0cHV0XCI6IFtcIm91dHB1dFwiXSxcclxuICAgICAgICAgIFwiUmVzb3VyY2VzXCI6IFtcInJlc291cmNlc1wiXSxcclxuICAgICAgICAgIFwiU3RyYXRlZ3lcIjogW1wic3RyYXRlZ3lcIl0sXHJcbiAgICAgICAgICBcIlRyaWdnZXJzXCI6IFtcInRyaWdnZXJzXCJdLFxyXG4gICAgICAgICAgXCJTZXJ2aWNlIEFjY291bnRcIjogW1wic2VydmljZUFjY291bnRcIl1cclxuICAgICAgICB9O1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogd2l6YXJkLCBuZWVkcyBhbiAnb25GaW5pc2gnIGZ1bmN0aW9uIGluIHRoZSBzY29wZVxyXG4gICAgICAgIHNwZWNDb25maWcud2l6YXJkID0gPGFueT57XHJcbiAgICAgICAgICBwYWdlczoge1xyXG4gICAgICAgICAgICBTb3VyY2U6IHtcclxuICAgICAgICAgICAgICBjb250cm9sczogW1wic291cmNlXCJdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFJldmlzaW9uOiB7XHJcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInJldmlzaW9uXCJdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIE91dHB1dDoge1xyXG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJvdXRwdXRcIl1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgUmVzb3VyY2VzOiB7XHJcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInJlc291cmNlc1wiXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBTdHJhdGVneToge1xyXG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJzdHJhdGVneVwiXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBUcmlnZ2Vyczoge1xyXG4gICAgICAgICAgICAgIGNvbnRyb2xzOiBbXCJ0cmlnZ2Vyc1wiXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIlNlcnZpY2UgQWNjb3VudFwiOiB7XHJcbiAgICAgICAgICAgICAgY29udHJvbHM6IFtcInNlcnZpY2VBY2NvdW50XCJdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgICovXHJcblxyXG4gICAgICAgICRzY29wZS5lbnRpdHkgPSB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjogXCJ2MVwiLFxyXG4gICAgICAgICAgXCJraW5kXCI6IFwiQnVpbGRDb25maWdcIixcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIm5hbWVcIjogXCJcIixcclxuICAgICAgICAgICAgXCJsYWJlbHNcIjoge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzcGVjXCI6IHtcclxuICAgICAgICAgICAgXCJzb3VyY2VcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcIkdpdFwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwic3RyYXRlZ3lcIjoge1xyXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiQ3VzdG9tXCIsXHJcbiAgICAgICAgICAgICAgICBcImN1c3RvbVN0cmF0ZWd5XCI6IHtcclxuICAgICAgICAgICAgICAgICAgICBcImZyb21cIjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJEb2NrZXJJbWFnZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJmYWJyaWM4L29wZW5zaGlmdC1zMmktamVua2lucy10cmlnZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZW52XCI6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQkFTRV9VUklcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogamVua2luc1VybFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJKT0JfTkFNRVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBqb2JOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAkc2NvcGUuJHdhdGNoKCdlbnRpdHkuc3BlYy5zb3VyY2UuZ2l0LnVyaScsICh2YWwpID0+IHtcclxuICAgICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhciBsYXN0Qml0ID0gdmFsLm1hdGNoKC9bXlxcL10rJC8pWzBdO1xyXG4gICAgICAgICAgaWYgKGxhc3RCaXQpIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBsYXN0Qml0LnJlcGxhY2UoL1xcLmdpdCQvLCAnJyk7XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIm5hbWU6IFwiLCBuYW1lKTtcclxuICAgICAgICAgICAgaWYgKCFDb3JlLmlzQmxhbmsobmFtZSkgXHJcbiAgICAgICAgICAgICAgJiYgQ29yZS5pc0JsYW5rKENvcmUucGF0aEdldCgkc2NvcGUuZW50aXR5LCBbJ21ldGFkYXRhJywgJ25hbWUnXSkpKSB7XHJcbiAgICAgICAgICAgICAgQ29yZS5wYXRoU2V0KCRzY29wZS5lbnRpdHksIFsnbWV0YWRhdGEnLCAnbmFtZSddLCBuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAgICAgJHNjb3BlLmJyZWFkY3J1bWJDb25maWcgPSBEZXZlbG9wZXIuY3JlYXRlUHJvamVjdFNldHRpbmdzQnJlYWRjcnVtYnMoJHNjb3BlLnByb2plY3RJZCk7XHJcbiAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUucHJvamVjdElkKTtcclxuICAgICAgICAkc2NvcGUudGFicyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U2V0dGluZ3NTdWJOYXZCYXJzKCRzY29wZS5wcm9qZWN0SWQpO1xyXG5cclxuICAgICAgICB3YXRjaCgkc2NvcGUsICRlbGVtZW50LCBcInNlY3JldHNcIiwgJHNjb3BlLm5hbWVzcGFjZSwgb25TZWNyZXRzKTtcclxuXHJcblxyXG4gICAgICAgICRzY29wZS5idWlsZENvbmZpZ0NsaWVudCA9IEs4U0NsaWVudEZhY3RvcnkuY3JlYXRlKFwiYnVpbGRjb25maWdzXCIsICRzY29wZS5uYW1lc3BhY2UpO1xyXG5cclxuICAgICAgICAkZWxlbWVudC5vbignJGRlc3Ryb3knLCAoKSA9PiB7XHJcbiAgICAgICAgICAkc2NvcGUuJGRlc3Ryb3koKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IHtcclxuICAgICAgICAgIEs4U0NsaWVudEZhY3RvcnkuZGVzdHJveSgkc2NvcGUuYnVpbGRDb25maWdDbGllbnQpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuLypcclxuICAgICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuKi9cclxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS5zYXZlID0gKCkgPT4ge1xyXG4gICAgICAgICAgbG9nLmluZm8oXCJTYXZpbmchXCIpO1xyXG5cclxuXHJcbiAgICAgICAgICB2YXIgZW50aXR5ID0gJHNjb3BlLmVudGl0eTtcclxuICAgICAgICAgIHZhciBzcGVjID0gKGVudGl0eSB8fCB7fSkuc3BlYyB8fCB7fTtcclxuXHJcbiAgICAgICAgICAvLyBUT0RPIHVwZGF0ZSB0aGUgamVua2lucyBqb2IgbmFtZSFcclxuXHJcbiAgICAgICAgICAvLyBsZXRzIGRlbGV0ZSBsb3RzIG9mIGNydWZ0XHJcbiAgICAgICAgICB2YXIgc3RyYXRlZ3kgPSBzcGVjLnN0cmF0ZWd5IHx8IHt9O1xyXG4gICAgICAgICAgZGVsZXRlIHN0cmF0ZWd5W1wiZG9ja2VyU3RyYXRlZ3lcIl07XHJcbiAgICAgICAgICBkZWxldGUgc3RyYXRlZ3lbXCJzb3VyY2VTdHJhdGVneVwiXTtcclxuXHJcbiAgICAgICAgICBkZWxldGUgc3BlY1tcInJldmlzaW9uXCJdO1xyXG4gICAgICAgICAgZGVsZXRlIHNwZWNbXCJvdXRwdXRcIl07XHJcbiAgICAgICAgICBkZWxldGUgc3BlY1tcInJlc291cmNlc1wiXTtcclxuXHJcbiAgICAgICAgICB2YXIgc3RyYXRlZ3lQdWxsU2VjcmV0TmFtZSA9IENvcmUucGF0aEdldChzcGVjLCBbXCJzdHJhdGVneVwiLCBcImN1c3RvbVN0cmF0ZWd5XCIsIFwicHVsbFNlY3JldFwiLCBcIm5hbWVcIl0pO1xyXG4gICAgICAgICAgdmFyIHNvdXJjZVNlY3JldE5hbWUgPSBDb3JlLnBhdGhHZXQoc3BlYywgW1wic291cmNlXCIsIFwic291cmNlU2VjcmV0XCIsIFwibmFtZVwiXSk7XHJcbiAgICAgICAgICBsb2cuaW5mbyhcInNvdXJjZVNlY3JldE5hbWU6IFwiICsgc291cmNlU2VjcmV0TmFtZSk7XHJcbiAgICAgICAgICBsb2cuaW5mbyhcInN0cmF0ZWd5UHVsbFNlY3JldE5hbWU6IFwiICsgc3RyYXRlZ3lQdWxsU2VjcmV0TmFtZSk7XHJcbiAgICAgICAgICBpZiAoIXN0cmF0ZWd5UHVsbFNlY3JldE5hbWUgJiYgc291cmNlU2VjcmV0TmFtZSkge1xyXG4gICAgICAgICAgICBDb3JlLnBhdGhTZXQoc3BlYywgW1wic3RyYXRlZ3lcIiwgXCJjdXN0b21TdHJhdGVneVwiLCBcInB1bGxTZWNyZXRcIiwgXCJuYW1lXCJdLCBzb3VyY2VTZWNyZXROYW1lKTtcclxuICAgICAgICAgIH1cclxuXHJcbi8qXHJcbiAgICAgICAgICAvLyBUT0RPIGhhY2sgdW50aWwgdGhlIHB1dCBkZWFscyB3aXRoIHVwZGF0ZXNcclxuICAgICAgICAgIHZhciBtZXRhZGF0YSA9IGVudGl0eS5tZXRhZGF0YTtcclxuICAgICAgICAgIGlmIChtZXRhZGF0YSkge1xyXG4gICAgICAgICAgICBkZWxldGUgbWV0YWRhdGFbXCJyZXNvdXJjZVZlcnNpb25cIl07XHJcbiAgICAgICAgICB9XHJcbiovXHJcblxyXG4gICAgICAgICAgbG9nLmluZm8oYW5ndWxhci50b0pzb24oZW50aXR5LCB0cnVlKSk7XHJcblxyXG4gICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlnQ2xpZW50LnB1dChlbnRpdHksIChvYmopID0+IHtcclxuICAgICAgICAgICAgbG9nLmluZm8oXCJidWlsZCBjb25maWcgY3JlYXRlZCFcIik7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGluayA9IERldmVsb3Blci5wcm9qZWN0U2VjcmV0c0xpbmsoJHNjb3BlLm5hbWVzcGFjZSwgZ2V0TmFtZShlbnRpdHkpKTtcclxuICAgICAgICAgICAgaWYgKGxpbmspIHtcclxuICAgICAgICAgICAgICBsb2cuaW5mbyhcIk5hdmlnYXRpbmcgdG86IFwiKyBsaW5rKTtcclxuICAgICAgICAgICAgICAkbG9jYXRpb24ucGF0aChsaW5rKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsb2cud2FybihcIkNvdWxkIG5vdCBmaW5kIHRoZSBlZGl0IHBpcGVsaW5lIGxpbmshXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcblxyXG4gICAgICAgIHZhciBqZW5raW5zVXJsID0gRGV2ZWxvcGVyLmplbmtpbnNMaW5rKCk7XHJcbiAgICAgICAgdmFyIGpvYk5hbWUgPSBcIlwiO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgICAgJHNjb3BlLml0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gYnVpbGRDb25maWdSZXN0VXJsKCRzY29wZS5pZCk7XHJcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHZhciBidWlsZENvbmZpZyA9IGFuZ3VsYXIuY29weShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgdmFyIHNvcnRlZEJ1aWxkcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuZW5yaWNoQnVpbGRDb25maWcoYnVpbGRDb25maWcsIHNvcnRlZEJ1aWxkcyk7XHJcbiAgICAgICAgICAgICAgICAgICRzY29wZS5idWlsZENvbmZpZyA9IGJ1aWxkQ29uZmlnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJHNjb3BlLnNwZWMgPSAoJHNjb3BlLmVudGl0eSB8fCB7fSkuc3BlYyB8fCB7fTtcclxuICAgICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBsZXRzIHVwZGF0ZSB0aGUgdGFic1xyXG4gICAgICAgICAgICAgICAgJHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0U3ViTmF2QmFycygkc2NvcGUucHJvamVjdElkLCBudWxsLCAkc2NvcGUpO1xyXG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAkc2NvcGUuc3BlYyA9ICRzY29wZS5lbnRpdHkuc3BlYztcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIG9uU2VjcmV0cyhzZWNyZXRzKSB7XHJcbiAgICAgICAgICB2YXIgYXJyYXkgPSBbXTtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWNyZXRzLCAoc2VjcmV0KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZWNyZXQpO1xyXG4gICAgICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICAgIGFycmF5LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IG5hbWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmFtZSxcclxuICAgICAgICAgICAgICAgIFwiYXR0cmlidXRlc1wiOiB7XHJcbiAgICAgICAgICAgICAgICAgIFwidGl0bGVcIjogbmFtZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICRzZWNyZXQ6IHNlY3JldFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgICRzY29wZS5zZWNyZXRzID0gXy5zb3J0QnkoYXJyYXksIFwibGFiZWxcIik7XHJcblxyXG4gICAgICAgICAgdmFyIHNwZWNTb3VyY2VTZWNyZXROYW1lUGF0aCA9IFsnc3BlYycsICdzb3VyY2UnLCAnc291cmNlU2VjcmV0JywgJ25hbWUnXTtcclxuICAgICAgICAgIGlmICgkc2NvcGUuZW50aXR5ICYmICFDb3JlLnBhdGhHZXQoJHNjb3BlLmVudGl0eSwgc3BlY1NvdXJjZVNlY3JldE5hbWVQYXRoKSkge1xyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdFNlY3JldE5hbWUgPSBmaW5kRGVmYXVsdEltcG9ydFNlY3JldE5hbWUoc2VjcmV0cyk7XHJcbiAgICAgICAgICAgIENvcmUucGF0aFNldCgkc2NvcGUuZW50aXR5LCBzcGVjU291cmNlU2VjcmV0TmFtZVBhdGgsIGRlZmF1bHRTZWNyZXROYW1lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGZpbmREZWZhdWx0SW1wb3J0U2VjcmV0TmFtZShzZWNyZXRzKSB7XHJcbiAgICAgICAgICB2YXIgYW5zd2VyID0gbnVsbDtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWNyZXRzLCAoc2VjcmV0KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZWNyZXQpO1xyXG4gICAgICAgICAgICBpZiAoIWFuc3dlciAmJiBuYW1lICYmIG5hbWUuc3RhcnRzV2l0aChcImplbmtpbnMtbG9naW5cIikpIHtcclxuICAgICAgICAgICAgICBhbnN3ZXIgPSBuYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmICghYW5zd2VyKSB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChzZWNyZXRzLCAoc2VjcmV0KSA9PiB7XHJcbiAgICAgICAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKHNlY3JldCk7XHJcbiAgICAgICAgICAgICAgaWYgKCFhbnN3ZXIgJiYgbmFtZSAmJiBuYW1lLnN0YXJ0c1dpdGgoXCJqZW5raW5zLXRva2VuXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBhbnN3ZXIgPSBuYW1lO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gYW5zd2VyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgICAgICBjYXNlICdjcmVhdGUnOlxyXG4gICAgICAgICAgICBkZWxldGUgc3BlY0NvbmZpZy50YWJzO1xyXG4gICAgICAgICAgICBfLmZvckluKGJ1aWxkU291cmNlLnByb3BlcnRpZXMsIChwcm9wZXJ0eTphbnksIG5hbWU6c3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG5hbWUgIT09ICdnaXQnKSB7XHJcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIkhpZGluZyBwcm9wZXJ0eTogXCIsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydHkuaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBfLmZvckluKGdpdEJ1aWxkU291cmNlLnByb3BlcnRpZXMsIChwcm9wZXJ0eTphbnksIG5hbWU6c3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG5hbWUgIT09ICd1cmknKSB7XHJcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIkhpZGluZyBwcm9wZXJ0eTogXCIsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydHkuaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydHkubGFiZWwgPSBcIkdpdCBVUkxcIjtcclxuICAgICAgICAgICAgICAgIHByb3BlcnR5WydpbnB1dC1hdHRyaWJ1dGVzJ10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6IHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pOyBcclxuICAgICAgICAgICAgXy5mb3JJbihzcGVjQ29uZmlnLnByb3BlcnRpZXMsIChwcm9wZXJ0eTphbnksIG5hbWU6c3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG5hbWUgIT09ICdzb3VyY2UnKSB7XHJcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIkhpZGluZyBwcm9wZXJ0eTogXCIsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydHkuaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ2VkaXQnOlxyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRzY29wZS5zcGVjQ29uZmlnID0gc3BlY0NvbmZpZztcclxuICB9KTtcclxuXHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBCdWlsZENvbmZpZ3NDb250cm9sbGVyID0gY29udHJvbGxlcihcIkJ1aWxkQ29uZmlnc0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuXHJcbiAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgICBkYXRhOiAnbW9kZWwuYnVpbGRjb25maWdzJyxcclxuICAgICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxyXG4gICAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxyXG4gICAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdtZXRhZGF0YS5uYW1lJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcclxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZENvbmZpZ0xpbmtUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9LFxyXG4vKlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3NwZWMuc291cmNlLnR5cGUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSdcclxuICAgICAgICAgIH0sXHJcbiovXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zb3VyY2UuZ2l0LnVyaScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUmVwb3NpdG9yeSdcclxuICAgICAgICAgIH0sXHJcbi8qXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS50eXBlJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTdHJhdGVneSdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zdHJhdGVneS5zdGlTdHJhdGVneS5pbWFnZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU291cmNlIEltYWdlJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLm91dHB1dC5pbWFnZVRhZycsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnT3V0cHV0IEltYWdlJ1xyXG4gICAgICAgICAgfSxcclxuKi9cclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICckZmFicmljOENvZGVWaWV3cycsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnQ29kZScsXHJcbiAgICAgICAgICAgIHdpZHRoOiBcIioqKlwiLFxyXG4gICAgICAgICAgICBtaW5XaWR0aDogNTAwLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkQ29uZmlnQ29kZVZpZXdzVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICckZmFicmljOEJ1aWxkVmlld3MnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0J1aWxkcycsXHJcbiAgICAgICAgICAgIHdpZHRoOiBcIioqKlwiLFxyXG4gICAgICAgICAgICBtaW5XaWR0aDogNTAwLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkQ29uZmlnQnVpbGRWaWV3c1RlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJGZhYnJpYzhFbnZpcm9ubWVudFZpZXdzJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdFbnZpcm9ubWVudHMnLFxyXG4gICAgICAgICAgICB3aWR0aDogXCIqKipcIixcclxuICAgICAgICAgICAgbWluV2lkdGg6IDUwMCxcclxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZENvbmZpZ0Vudmlyb25tZW50Vmlld3NUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJyRmYWJyaWM4VGVhbVZpZXdzJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdQZW9wbGUnLFxyXG4gICAgICAgICAgICB3aWR0aDogXCIqKipcIixcclxuICAgICAgICAgICAgbWluV2lkdGg6IDUwMCxcclxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJidWlsZENvbmZpZ1RlYW1WaWV3c1RlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgICAvLyBUT0RPXHJcbiAgICAgIC8vICRzY29wZS5pc0xvZ2dlZEludG9Hb2dzID0gRm9yZ2UuaXNMb2dnZWRJbnRvR29ncztcclxuXHJcbiAgICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcclxuICAgICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgICBjb2xsZWN0aW9uOiBzZWxlY3RlZCxcclxuICAgICAgICAgIGluZGV4OiAnJG5hbWUnLFxyXG4gICAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgbmV4dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlRW50aXR5KG5leHQsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGl0bGU6ICdEZWxldGUgQnVpbGQgQ29uZmlncz8nLFxyXG4gICAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBCdWlsZCBDb25maWdzIHdpbGwgYmUgZGVsZXRlZDonLFxyXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcclxuICAgICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcclxuICAgICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXHJcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcclxuICAgICAgICB9KS5vcGVuKCk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBmdW5jdGlvbiBkZWxldGVFbnRpdHkoc2VsZWN0aW9uLCBuZXh0Q2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgbmFtZSA9IChzZWxlY3Rpb24gfHwge30pLiRuYW1lO1xyXG4gICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFib3V0IHRvIGRlbGV0ZSBidWlsZCBjb25maWc6IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICB2YXIgdXJsID0gYnVpbGRDb25maWdSZXN0VXJsKG5hbWUpO1xyXG4gICAgICAgICAgJGh0dHAuZGVsZXRlKHVybCkuXHJcbiAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgbmV4dENhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBkZWxldGUgYnVpbGQgY29uZmlnIG9uIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJ3YXJuaW5nOiBubyBuYW1lIGZvciBzZWxlY3Rpb246IFwiICsgYW5ndWxhci50b0pzb24oc2VsZWN0aW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICB9XHJcblxyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIEJ1aWxkTG9nc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiQnVpbGRMb2dzQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc1NjaGVtYVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG4gICAgICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgICAgICRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLm9zX2J1aWxkX0J1aWxkO1xyXG5cclxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmxvZ3NUZXh0ID0gXCJMb2FkaW5nIGxvZ3MuLi5cIjtcclxuXHJcbiAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgICAgJHNjb3BlLml0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgaWYgKCRzY29wZS5pZCkge1xyXG4gICAgICAgICAgICB2YXIgdXJsID0gYnVpbGRSZXN0VXJsKCRzY29wZS5pZCk7XHJcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5ID0gZW5yaWNoQnVpbGQoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHVybCA9IGJ1aWxkTG9nc1Jlc3RVcmwoJHNjb3BlLmlkKTtcclxuICAgICAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUubG9nc1RleHQgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUubG9nc1RleHQgPSBcIkZhaWxlZCB0byBsb2FkIGxvZ3MgZnJvbTogXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBzdGF0dXM6IFwiICsgc3RhdHVzO1xyXG4gICAgICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgICBjYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICRzY29wZS5sb2dzVGV4dCA9IFwiRmFpbGVkIHRvIGxvYWQgbG9nczogXCIgKyBhbmd1bGFyLnRvSnNvbihlcnJvciwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgQnVpbGRzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJCdWlsZHNDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiRkaWFsb2dcIiwgXCIkd2luZG93XCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkbG9jYXRpb25cIiwgXCJsb2NhbFN0b3JhZ2VcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAgICRzY29wZS5idWlsZENvbmZpZ0lkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcblxyXG4gICAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICAgIGRhdGE6ICdtb2RlbC5idWlsZHMnLFxyXG4gICAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcclxuICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXHJcbiAgICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgICAgZmlsdGVyT3B0aW9uczoge1xyXG4gICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29sdW1uRGVmczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ21ldGFkYXRhLm5hbWUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkTGlua1RlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJGNyZWF0aW9uRGF0ZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVGltZScsXHJcbiAgICAgICAgICAgIGRlZmF1bHRTb3J0OiB0cnVlLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkVGltZVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3RhdHVzJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdTdGF0dXMnLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkU3RhdHVzVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICckbG9nc0xpbmsnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xvZ3MnLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImJ1aWxkTG9nc1RlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJHBvZExpbmsnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0J1aWxkIFBvZCcsXHJcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRQb2RUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9LFxyXG4vKlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3BhcmFtZXRlcnMuc291cmNlLnR5cGUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZSdcclxuICAgICAgICAgIH0sXHJcbiovXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3BlYy5zb3VyY2UuZ2l0LnVyaScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUmVwb3NpdG9yeScsXHJcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYnVpbGRSZXBvc2l0b3J5VGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLnN0cmF0ZWd5LnR5cGUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1N0cmF0ZWd5J1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLnN0cmF0ZWd5LnNvdXJjZVN0cmF0ZWd5LmZyb20ubmFtZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnU291cmNlIEltYWdlJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdzcGVjLm91dHB1dC50by5uYW1lJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdPdXRwdXQgSW1hZ2UnXHJcbiAgICAgICAgICB9XVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gICAgICAkc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IERldmVsb3Blci5jcmVhdGVQcm9qZWN0QnJlYWRjcnVtYnMoJHNjb3BlLmJ1aWxkQ29uZmlnSWQpO1xyXG4gICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gRGV2ZWxvcGVyLmNyZWF0ZVByb2plY3RTdWJOYXZCYXJzKCRzY29wZS5idWlsZENvbmZpZ0lkLCBudWxsLCAkc2NvcGUpO1xyXG5cclxuICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgICBpZiAoJHNjb3BlLm1vZGVsKSB7XHJcbiAgICAgICAgICB2YXIgYnVpbGRzID0gJHNjb3BlLm1vZGVsLmJ1aWxkcztcclxuICAgICAgICAgIHZhciBidWlsZENvbmZpZ0lkID0gJHNjb3BlLmJ1aWxkQ29uZmlnSWQ7XHJcblxyXG4gICAgICAgICAgZW5yaWNoQnVpbGRzKGJ1aWxkcyk7XHJcbiAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgaWYgKGJ1aWxkQ29uZmlnSWQpIHtcclxuICAgICAgICAgICAgJHNjb3BlLmJ1aWxkQ29uZmlnID0gJHNjb3BlLm1vZGVsLmdldEJ1aWxkQ29uZmlnKGJ1aWxkQ29uZmlnSWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuXHJcbiAgICAgIC8qXHJcbiAgICAgICRzY29wZS4ka2VlcFBvbGxpbmcgPSAoKSA9PiBrZWVwUG9sbGluZ01vZGVsO1xyXG4gICAgICAkc2NvcGUuZmV0Y2ggPSBQb2xsSGVscGVycy5zZXR1cFBvbGxpbmcoJHNjb3BlLCAobmV4dDooKSA9PiB2b2lkKSA9PiB7XHJcbiAgICAgICAgdmFyIHVybCA9IGJ1aWxkc1Jlc3RVUkwoKTtcclxuICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImdvdCBkYXRhIFwiICsgYW5ndWxhci50b0pzb24oZGF0YSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICRzY29wZS5idWlsZHMgPSBlbnJpY2hCdWlsZHMoZGF0YS5pdGVtcyk7XHJcbiAgICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoJHNjb3BlLm1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRDb25maWcgPSAkc2NvcGUubW9kZWwuZ2V0QnVpbGRDb25maWcoJHNjb3BlLmJ1aWxkQ29uZmlnSWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICB9KS5cclxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICBuZXh0KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAkc2NvcGUuZmV0Y2goKTtcclxuICAgICAgKi9cclxuICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIC8vIGNvbnRyb2xsZXIgZm9yIGNvbm5lY3RpbmcgdG8gYSByZW1vdGUgY29udGFpbmVyIHZpYSBqb2xva2lhXHJcbiAgZXhwb3J0IHZhciBDb25uZWN0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJDb25uZWN0Q29udHJvbGxlclwiLCBbXHJcbiAgICBcIiRzY29wZVwiLCBcImxvY2FsU3RvcmFnZVwiLCBcInVzZXJEZXRhaWxzXCIsIFwiQ29ubmVjdERpYWxvZ1NlcnZpY2VcIiwgXCIkYnJvd3NlclwiLFxyXG4gICAgKCRzY29wZSwgbG9jYWxTdG9yYWdlLCB1c2VyRGV0YWlscywgQ29ubmVjdERpYWxvZ1NlcnZpY2UsICRicm93c2VyOm5nLklCcm93c2VyU2VydmljZSkgPT4ge1xyXG5cclxuICAgICAgJHNjb3BlLmRvQ29ubmVjdCA9IChlbnRpdHkpID0+IHtcclxuICAgICAgICB2YXIgY29ubmVjdFVybDphbnkgPSBuZXcgVVJJKCkucGF0aChVcmxIZWxwZXJzLmpvaW4oSGF3dGlvQ29yZS5kb2N1bWVudEJhc2UoKSwgJy9qYXZhL2luZGV4Lmh0bWwnKSk7XHJcbiAgICAgICAgdmFyIHJldHVyblRvID0gbmV3IFVSSSgpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgdmFyIHRpdGxlID0gZW50aXR5Lm1ldGFkYXRhLm5hbWUgfHwgJ1VudGl0bGVkIENvbnRhaW5lcic7XHJcbiAgICAgICAgdmFyIHRva2VuID0gdXNlckRldGFpbHMudG9rZW4gfHwgJyc7XHJcbiAgICAgICAgY29ubmVjdFVybC5oYXNoKHRva2VuKS5xdWVyeSh7XHJcbiAgICAgICAgICBqb2xva2lhVXJsOiBlbnRpdHkuJGpvbG9raWFVcmwsXHJcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICByZXR1cm5UbzogcmV0dXJuVG9cclxuICAgICAgICB9KTtcclxuICAgICAgICBsb2cuZGVidWcoXCJDb25uZWN0IFVSSTogXCIsIGNvbm5lY3RVcmwudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgd2luZG93Lm9wZW4oY29ubmVjdFVybC50b1N0cmluZygpKTtcclxuICAgICAgfTtcclxuXHJcbiAgICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIERlcGxveW1lbnRDb25maWdDb250cm9sbGVyID0gY29udHJvbGxlcihcIkRlcGxveW1lbnRDb25maWdDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAgICAgJHNjb3BlLnNjaGVtYSA9IEt1YmVybmV0ZXNTY2hlbWE7XHJcbiAgICAgICAgJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMub3NfZGVwbG95X0RlcGxveW1lbnRDb25maWc7XHJcblxyXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgICAgICAkc2NvcGUuaXRlbSA9IG51bGw7XHJcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgICAgIHZhciB1cmwgPSBkZXBsb3ltZW50Q29uZmlnUmVzdFVybCgkc2NvcGUuaWQpO1xyXG4gICAgICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLmVudGl0eSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgIGVucmljaERlcGxveW1lbnRDb25maWcoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIERlcGxveW1lbnRDb25maWdzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJEZXBsb3ltZW50Q29uZmlnc0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICB9KTtcclxuICAgICAgJHNjb3BlLmxhYmVsQ2xhc3MgPSBjb250YWluZXJMYWJlbENsYXNzO1xyXG5cclxuICAgICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICAgIGRhdGE6ICdkZXBsb3ltZW50Q29uZmlncycsXHJcbiAgICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcclxuICAgICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgICBmaWx0ZXJPcHRpb25zOiB7XHJcbiAgICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb2x1bW5EZWZzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnbWV0YWRhdGEubmFtZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXHJcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZGVwbG95bWVudENvbmZpZ0xpbmtUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ21ldGFkYXRhLm5hbWVzcGFjZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZXNwYWNlJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICckaW1hZ2VDaGFuZ2VQYXJhbXMuYXV0b21hdGljJyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdBdXRvbWF0aWMnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJyRpbWFnZUNoYW5nZVBhcmFtcy4kY29udGFpbmVyTmFtZXMnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ0NvbnRhaW5lciBOYW1lcydcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJGltYWdlQ2hhbmdlUGFyYW1zLmZyb20ubmFtZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRnJvbSBpbWFnZSdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnJGltYWdlQ2hhbmdlUGFyYW1zLnRhZycsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnVGFnJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICd0ZW1wbGF0ZS5jb250cm9sbGVyVGVtcGxhdGUucG9kVGVtcGxhdGUudGFncycsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTGFiZWxzJyxcclxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJkZXBsb3ltZW50Q29uZmlnTGFiZWxUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcclxuICAgICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxyXG4gICAgICAgICAgaW5kZXg6ICckbmFtZScsXHJcbiAgICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICAgICAgICBkZWxldGVFbnRpdHkobmV4dCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0aXRsZTogJ0RlbGV0ZSBEZXBsb3ltZW50PycsXHJcbiAgICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIERlcGxveW1lbnRzIHdpbGwgYmUgZGVsZXRlZDonLFxyXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcclxuICAgICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcclxuICAgICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXHJcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcclxuICAgICAgICB9KS5vcGVuKCk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBmdW5jdGlvbiBkZWxldGVFbnRpdHkoc2VsZWN0aW9uLCBuZXh0Q2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgbmFtZSA9IChzZWxlY3Rpb24gfHwge30pLiRuYW1lO1xyXG4gICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFib3V0IHRvIGRlbGV0ZSBkZXBsb3ltZW50IGNvbmZpZzogXCIgKyBuYW1lKTtcclxuICAgICAgICAgIHZhciB1cmwgPSBkZXBsb3ltZW50Q29uZmlnUmVzdFVybChuYW1lKTtcclxuICAgICAgICAgICRodHRwLmRlbGV0ZSh1cmwpLlxyXG4gICAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIG5leHRDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gZGVsZXRlIGRlcGxveW1lbnQgY29uZmlnIG9uIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJ3YXJuaW5nOiBubyBuYW1lIGZvciBzZWxlY3Rpb246IFwiICsgYW5ndWxhci50b0pzb24oc2VsZWN0aW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgIHZhciB1cmwgPSBkZXBsb3ltZW50Q29uZmlnc1Jlc3RVUkwoKTtcclxuICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImdvdCBkYXRhIFwiICsgYW5ndWxhci50b0pzb24oZGF0YSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICRzY29wZS5kZXBsb3ltZW50Q29uZmlncyA9IGVucmljaERlcGxveW1lbnRDb25maWdzKGRhdGEuaXRlbXMpO1xyXG4gICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KS5cclxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgRXZlbnRzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJFdmVudHNDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU2VydmljZXNcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTZXJ2aWNlczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG5cclxuICAgIENvbnRyb2xsZXJIZWxwZXJzLmJpbmRNb2RlbFRvU2VhcmNoUGFyYW0oJHNjb3BlLCAkbG9jYXRpb24sICdtb2RlJywgJ21vZGUnLCAnbGlzdCcpO1xyXG5cclxuICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgZGF0YTogJ21vZGVsLmV2ZW50cycsXHJcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcclxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcclxuICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICB7IGZpZWxkOiAnJGZpcnN0VGltZXN0YW1wJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnRmlyc3QgU2VlbicsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImZpcnN0VGltZXN0YW1wVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJyRsYXN0VGltZXN0YW1wJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTGFzdCBTZWVuJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwibGFzdFRpbWVzdGFtcFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZmllbGQ6ICdjb3VudCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0NvdW50J1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJ2ludm9sdmVkT2JqZWN0Lm5hbWUnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZXZlbnROYW1lVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJ2ludm9sdmVkT2JqZWN0LmtpbmQnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdLaW5kJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiZXZlbnRLaW5kVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJ2ludm9sdmVkT2JqZWN0LmZpZWxkUGF0aCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1N1YmplY3QnXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGZpZWxkOiAncmVhc29uJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUmVhc29uJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJ3NvdXJjZScsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NvdXJjZScsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImV2ZW50U291cmNlVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJ21lc3NhZ2UnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdNZXNzYWdlJ1xyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNNb2RlbC50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBIb3N0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJIb3N0Q29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAgICAgJHNjb3BlLnJhd01vZGVsID0gbnVsbDtcclxuXHJcbiAgICAgICAgJHNjb3BlLml0ZW1Db25maWcgPSB7XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7fVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuZmxpcFJhdyA9ICgpID0+IHtcclxuICAgICAgICAgICRzY29wZS5yYXdNb2RlID0gISRzY29wZS5yYXdNb2RlO1xyXG4gICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICAgICAgICRzY29wZS5pdGVtID0gbnVsbDtcclxuICAgICAgICAgIGlmICgkc2NvcGUuaWQpIHtcclxuICAgICAgICAgICAgdmFyIHVybCA9IFVybEhlbHBlcnMuam9pbihLdWJlcm5ldGVzQXBpVVJMLCBcIm5vZGVzXCIsICRzY29wZS5pZCk7XHJcbiAgICAgICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUuaXRlbSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoJHNjb3BlLml0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgJHNjb3BlLnJhd01vZGVsID0gdG9SYXdZYW1sKCRzY29wZS5pdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KS5cclxuICAgICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsO1xyXG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzTW9kZWwudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ1dGlsSGVscGVycy50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBIb3N0c0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiSG9zdHNDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNQb2RzXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiU2VydmljZVJlZ2lzdHJ5XCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1BvZHM6bmcuSVByb21pc2U8bmcucmVzb3VyY2UuSVJlc291cmNlQ2xhc3M8YW55Pj4sIEt1YmVybmV0ZXNTdGF0ZSwgU2VydmljZVJlZ2lzdHJ5LCAkZGlhbG9nLCAkd2luZG93LCAkdGVtcGxhdGVDYWNoZSwgJHJvdXRlUGFyYW1zLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgbG9jYWxTdG9yYWdlLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUudGFibGVDb25maWcgPSB7XHJcbiAgICAgIGRhdGE6ICdtb2RlbC5ob3N0cycsXHJcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogZmFsc2UsXHJcbiAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgbXVsdGlTZWxlY3Q6IGZhbHNlLFxyXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgZmlsdGVyT3B0aW9uczoge1xyXG4gICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgfSxcclxuICAgICAgY29sdW1uRGVmczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiAnaWQnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcclxuICAgICAgICAgIGRlZmF1bHRTb3J0OiB0cnVlLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiAnaG9zdElQJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnSVAnLFxyXG4gICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgLy8gdXNlIGEgY3VzdG9tIHNvcnQgdG8gc29ydCBpcCBhZGRyZXNzXHJcbiAgICAgICAgICAgIHJldHVybiBLdWJlcm5ldGVzLnNvcnRCeVBvZElwKGZpZWxkLmhvc3RJUCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGZpZWxkOiAnJHBvZHNMaW5rJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUG9kcycsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInBvZENvdW50c0FuZExpbmtUZW1wbGF0ZS5odG1sXCIpLFxyXG4gICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgLy8gbmVlZCB0byBjb25jYXQgYWxsIHRoZSBwb2QgY291bnRlcnNcclxuICAgICAgICAgICAgdmFyIHJlYWR5ID0gZmllbGQuJHBvZENvdW50ZXJzLnJlYWR5IHx8IDA7XHJcbiAgICAgICAgICAgIHZhciB2YWxpZCA9IGZpZWxkLiRwb2RDb3VudGVycy52YWxpZCB8fCAwO1xyXG4gICAgICAgICAgICB2YXIgd2FpdGluZyA9IGZpZWxkLiRwb2RDb3VudGVycy53YWl0aW5nIHx8IDA7XHJcbiAgICAgICAgICAgIHZhciBlcnJvciA9IGZpZWxkLiRwb2RDb3VudGVycy5lcnJvciB8fCAwO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVhZHkgKyB2YWxpZCArIHdhaXRpbmcgKyBlcnJvcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIEltYWdlUmVwb3NpdG9yaWVzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJJbWFnZVJlcG9zaXRvcmllc0NvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJGRpYWxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRsb2NhdGlvblwiLCBcImxvY2FsU3RvcmFnZVwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6S3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsICRkaWFsb2csICR3aW5kb3csICR0ZW1wbGF0ZUNhY2hlLCAkcm91dGVQYXJhbXMsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCBsb2NhbFN0b3JhZ2UsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgICBkYXRhOiAnaW1hZ2VSZXBvc2l0b3JpZXMnLFxyXG4gICAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcclxuICAgICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXHJcbiAgICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgICAgZmlsdGVyT3B0aW9uczoge1xyXG4gICAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29sdW1uRGVmczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ21ldGFkYXRhLm5hbWUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ05hbWUnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ21ldGFkYXRhLm5hbWVzcGFjZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZXNwYWNlJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmllbGQ6ICdzdGF0dXMuZG9ja2VySW1hZ2VSZXBvc2l0b3J5JyxcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdEb2NrZXIgUmVnaXN0cnknXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWVsZDogJ3RhZ3MnLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RhZ3MnLFxyXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnaW1hZ2VSZWdpc3RyeUxhYmVsVGVtcGxhdGUuaHRtbCcpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdmFyIGxhYmVsQ29sb3JzID0ge1xyXG4gICAgICAgICdwcm9kJzogJ2JhY2tncm91bmQtYmx1ZScsXHJcbiAgICAgICAgJ3ZhbGlkJzogJ2JhY2tncm91bmQtbGlnaHQtZ3JlZW4nLFxyXG4gICAgICAgICd0ZXN0JzogJ2JhY2tncm91bmQtbGlnaHQtZ3JleSdcclxuICAgICAgfTtcclxuICAgICAgJHNjb3BlLmxhYmVsQ2xhc3MgPSAobGFiZWxUeXBlOnN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICghKGxhYmVsVHlwZSBpbiBsYWJlbENvbG9ycykpIHtcclxuICAgICAgICAgIHJldHVybiAnbW91c2UtcG9pbnRlcic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgcmV0dXJuIGxhYmVsQ29sb3JzW2xhYmVsVHlwZV0gKyAnIG1vdXNlLXBvaW50ZXInO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgICAkc2NvcGUuZGVsZXRlUHJvbXB0ID0gKHNlbGVjdGVkKSA9PiB7XHJcbiAgICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xyXG4gICAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXHJcbiAgICAgICAgICBpbmRleDogJyRuYW1lJyxcclxuICAgICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIG5leHQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZUVudGl0eShuZXh0LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRpdGxlOiAnRGVsZXRlIEltYWdlIFJlcG9zaXRvcnk/JyxcclxuICAgICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgSW1hZ2UgUmVwb3NpdG9yaWVzIHdpbGwgYmUgZGVsZXRlZDonLFxyXG4gICAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcclxuICAgICAgICAgIG9rQ2xhc3M6ICdidG4tZGFuZ2VyJyxcclxuICAgICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXHJcbiAgICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcclxuICAgICAgICB9KS5vcGVuKCk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBmdW5jdGlvbiBkZWxldGVFbnRpdHkoc2VsZWN0aW9uLCBuZXh0Q2FsbGJhY2spIHtcclxuICAgICAgICB2YXIgbmFtZSA9IChzZWxlY3Rpb24gfHwge30pLiRuYW1lO1xyXG4gICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkFib3V0IHRvIGRlbGV0ZSBpbWFnZSByZXBvc2l0b3J5OiBcIiArIG5hbWUpO1xyXG4gICAgICAgICAgdmFyIHVybCA9IGltYWdlUmVwb3NpdG9yeVJlc3RVcmwobmFtZSk7XHJcbiAgICAgICAgICAkaHR0cC5kZWxldGUodXJsKS5cclxuICAgICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICBuZXh0Q2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGRlbGV0ZSBpbWFnZSByZXBvc2l0b3J5IG9uIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJ3YXJuaW5nOiBubyBuYW1lIGZvciBzZWxlY3Rpb246IFwiICsgYW5ndWxhci50b0pzb24oc2VsZWN0aW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgIHZhciB1cmwgPSBpbWFnZVJlcG9zaXRvcmllc1Jlc3RVUkwoKTtcclxuICAgICAgICAkaHR0cC5nZXQodXJsKS5cclxuICAgICAgICAgIHN1Y2Nlc3MoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImdvdCBkYXRhIFwiICsgYW5ndWxhci50b0pzb24oZGF0YSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICRzY29wZS5pbWFnZVJlcG9zaXRvcmllcyA9IGVucmljaEltYWdlUmVwb3NpdG9yaWVzKGRhdGEuaXRlbXMpO1xyXG4gICAgICAgICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KS5cclxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc2VsZWN0U3ViTmF2QmFyKCRzY29wZSwgdGFiTmFtZSwgbmV3U3ViVGFiTGFiZWwpIHtcclxuICAgIHZhciBmb3VuZFRhYiA9IG51bGw7XHJcbiAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLnN1YlRhYkNvbmZpZywgKHRhYikgPT4ge1xyXG4gICAgICBpZiAodGFiTmFtZSA9PT0gdGFiLmxhYmVsIHx8IHRhYk5hbWUgPT09IHRhYi5pZCkge1xyXG4gICAgICAgIGZvdW5kVGFiID0gdGFiO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHZhciBicmVhZGNydW1iQ29uZmlnID0gJHNjb3BlLmJyZWFkY3J1bWJDb25maWc7XHJcbiAgICBpZiAoZm91bmRUYWIgJiYgYnJlYWRjcnVtYkNvbmZpZykge1xyXG4gICAgICBicmVhZGNydW1iQ29uZmlnLnB1c2goZm91bmRUYWIpO1xyXG4gICAgICAkc2NvcGUuc3ViVGFiQ29uZmlnID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxhYmVsOiBuZXdTdWJUYWJMYWJlbFxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcbiBcclxuICBleHBvcnQgdmFyIHNjaGVtYSA9IFxyXG4gIHtcclxuICAgIFwiaWRcIjogXCJodHRwOi8vZmFicmljOC5pby9mYWJyaWM4L3YyL1NjaGVtYSNcIixcclxuICAgIFwiJHNjaGVtYVwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvc2NoZW1hI1wiLFxyXG4gICAgXCJkZWZpbml0aW9uc1wiOiB7XHJcbiAgICAgIFwiYXBpX1Jvb3RQYXRoc1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInBhdGhzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJvb3RQYXRoc1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImZzVHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZmlsZSBzeXN0ZW0gdHlwZSB0byBtb3VudFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwYXJ0aXRpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwYXJ0aXRpb24gb24gdGhlIGRpc2sgdG8gbW91bnQgKGUuZy5cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWFkLW9ubHkgaWYgdHJ1ZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ2b2x1bWVJRFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlIGlkIG9mIHRoZSBQRCByZXNvdXJjZSBpbiBBV1M7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjYXdzZWxhc3RpY2Jsb2Nrc3RvcmVcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkFXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0NhcGFiaWxpdGllc1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFkZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhZGRlZCBjYXBhYmlsaXRpZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFkZGVkIGNhcGFiaWxpdGllc1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRyb3BcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZHJvcGVkIGNhcGFiaWxpdGllc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZHJvcGVkIGNhcGFiaWxpdGllc1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DYXBhYmlsaXRpZXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfQ2VwaEZTVm9sdW1lU291cmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibW9uaXRvcnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBjb2xsZWN0aW9uIG9mIENlcGggbW9uaXRvcnNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgY29sbGVjdGlvbiBvZiBDZXBoIG1vbml0b3JzXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDZXBoIGZzIHRvIGJlIG1vdW50ZWQgd2l0aCByZWFkLW9ubHkgcGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VjcmV0RmlsZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGF0aCB0byBzZWNyZXQgZm9yIHJhZG9zIHVzZXI7IGRlZmF1bHQgaXMgL2V0Yy9jZXBoL3VzZXIuc2VjcmV0OyBvcHRpb25hbFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZWNyZXRSZWZcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlclwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmFkb3MgdXNlciBuYW1lOyBkZWZhdWx0IGlzIGFkbWluOyBvcHRpb25hbFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2VwaEZTVm9sdW1lU291cmNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0NvbnRhaW5lclwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFyZ3NcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWFuZCBhcnJheTsgdGhlIGRvY2tlciBpbWFnZSdzIGNtZCBpcyB1c2VkIGlmIHRoaXMgaXMgbm90IHByb3ZpZGVkOyBhcmd1bWVudHMgdG8gdGhlIGVudHJ5cG9pbnQ7IGNhbm5vdCBiZSB1cGRhdGVkOyB2YXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgY29udGFpbmVyJ3MgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBpZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29tbWFuZCBhcnJheTsgdGhlIGRvY2tlciBpbWFnZSdzIGNtZCBpcyB1c2VkIGlmIHRoaXMgaXMgbm90IHByb3ZpZGVkOyBhcmd1bWVudHMgdG8gdGhlIGVudHJ5cG9pbnQ7IGNhbm5vdCBiZSB1cGRhdGVkOyB2YXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgY29udGFpbmVyJ3MgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBpZiBhIHZhcmlhYmxlIGNhbm5vdCBiZSByZXNvbHZlZFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNvbW1hbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZW50cnlwb2ludCBhcnJheTsgbm90IGV4ZWN1dGVkIHdpdGhpbiBhIHNoZWxsOyB0aGUgZG9ja2VyIGltYWdlJ3MgZW50cnlwb2ludCBpcyB1c2VkIGlmIHRoaXMgaXMgbm90IHByb3ZpZGVkOyBjYW5ub3QgYmUgdXBkYXRlZDsgdmFyaWFibGUgcmVmZXJlbmNlcyAkKFZBUl9OQU1FKSBhcmUgZXhwYW5kZWQgdXNpbmcgdGhlIGNvbnRhaW5lcidzIGVudmlyb25tZW50IHZhcmlhYmxlczsgaWYgYSB2YXJpYWJsZSBjYW5ub3QgYmUgcmVzb2x2ZWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImVudHJ5cG9pbnQgYXJyYXk7IG5vdCBleGVjdXRlZCB3aXRoaW4gYSBzaGVsbDsgdGhlIGRvY2tlciBpbWFnZSdzIGVudHJ5cG9pbnQgaXMgdXNlZCBpZiB0aGlzIGlzIG5vdCBwcm92aWRlZDsgY2Fubm90IGJlIHVwZGF0ZWQ7IHZhcmlhYmxlIHJlZmVyZW5jZXMgJChWQVJfTkFNRSkgYXJlIGV4cGFuZGVkIHVzaW5nIHRoZSBjb250YWluZXIncyBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IGlmIGEgdmFyaWFibGUgY2Fubm90IGJlIHJlc29sdmVkXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZW52XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGUgY29udGFpbmVyOyBjYW5ub3QgYmUgdXBkYXRlZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW52VmFyXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaW1hZ2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRvY2tlciBpbWFnZSBuYW1lOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pbWFnZXMubWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaW1hZ2VQdWxsUG9saWN5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbWFnZSBwdWxsIHBvbGljeTsgb25lIG9mIEFsd2F5c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJsaWZlY3ljbGVcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlmZWN5Y2xlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpZmVjeWNsZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJsaXZlbmVzc1Byb2JlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Byb2JlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlByb2JlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIGNvbnRhaW5lcjsgbXVzdCBiZSBhIEROU19MQUJFTCBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcG9kOyBjYW5ub3QgYmUgdXBkYXRlZFwiLFxyXG4gICAgICAgICAgICBcIm1heExlbmd0aFwiOiA2MyxcclxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/JFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwb3J0c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHBvcnRzIHRvIGV4cG9zZSBmcm9tIHRoZSBjb250YWluZXI7IGNhbm5vdCBiZSB1cGRhdGVkXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJQb3J0XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyUG9ydFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYWRpbmVzc1Byb2JlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Byb2JlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlByb2JlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlc291cmNlc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVJlcXVpcmVtZW50c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZWN1cml0eUNvbnRleHRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjdXJpdHlDb250ZXh0XCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3VyaXR5Q29udGV4dFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGRpblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIldoZXRoZXIgdGhpcyBjb250YWluZXIgc2hvdWxkIGFsbG9jYXRlIGEgYnVmZmVyIGZvciBzdGRpbiBpbiB0aGUgY29udGFpbmVyIHJ1bnRpbWU7IGRlZmF1bHQgaXMgZmFsc2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidGVybWluYXRpb25NZXNzYWdlUGF0aFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGF0aCBhdCB3aGljaCB0aGUgZmlsZSB0byB3aGljaCB0aGUgY29udGFpbmVyJ3MgdGVybWluYXRpb24gbWVzc2FnZSB3aWxsIGJlIHdyaXR0ZW4gaXMgbW91bnRlZCBpbnRvIHRoZSBjb250YWluZXIncyBmaWxlc3lzdGVtOyBtZXNzYWdlIHdyaXR0ZW4gaXMgaW50ZW5kZWQgdG8gYmUgYnJpZWYgZmluYWwgc3RhdHVzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR0eVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIldoZXRoZXIgdGhpcyBjb250YWluZXIgc2hvdWxkIGFsbG9jYXRlIGEgVFRZIGZvciBpdHNlbGZcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidm9sdW1lTW91bnRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBvZCB2b2x1bWVzIHRvIG1vdW50IGludG8gdGhlIGNvbnRhaW5lcidzIGZpbGVzeXN0ZTsgY2Fubm90IGJlIHVwZGF0ZWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1ZvbHVtZU1vdW50XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lTW91bnRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ3b3JraW5nRGlyXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb250YWluZXIncyB3b3JraW5nIGRpcmVjdG9yeTsgZGVmYXVsdHMgdG8gaW1hZ2UncyBkZWZhdWx0OyBjYW5ub3QgYmUgdXBkYXRlZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0NvbnRhaW5lclBvcnRcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjb250YWluZXJQb3J0XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibnVtYmVyIG9mIHBvcnQgdG8gZXhwb3NlIG9uIHRoZSBwb2QncyBJUCBhZGRyZXNzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImhvc3RJUFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaG9zdCBJUCB0byBiaW5kIHRoZSBwb3J0IHRvXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImhvc3RQb3J0XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibnVtYmVyIG9mIHBvcnQgdG8gZXhwb3NlIG9uIHRoZSBob3N0OyBtb3N0IGNvbnRhaW5lcnMgZG8gbm90IG5lZWQgdGhpc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIGZvciB0aGUgcG9ydCB0aGF0IGNhbiBiZSByZWZlcnJlZCB0byBieSBzZXJ2aWNlczsgbXVzdCBiZSBhbiBJQU5BX1NWQ19OQU1FIGFuZCB1bmlxdWUgd2l0aGluIHRoZSBwb2RcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicHJvdG9jb2xcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInByb3RvY29sIGZvciBwb3J0OyBtdXN0IGJlIFVEUCBvciBUQ1A7IFRDUCBpZiB1bnNwZWNpZmllZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyUG9ydFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInJ1bm5pbmdcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVSdW5uaW5nXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlUnVubmluZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0ZXJtaW5hdGVkXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlVGVybWluYXRlZFwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVRlcm1pbmF0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwid2FpdGluZ1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVdhaXRpbmdcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVXYWl0aW5nXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVJ1bm5pbmdcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJzdGFydGVkQXRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRpbWUgYXQgd2hpY2ggdGhlIGNvbnRhaW5lciB3YXMgbGFzdCAocmUtKXN0YXJ0ZWRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlUnVubmluZ1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Db250YWluZXJTdGF0ZVRlcm1pbmF0ZWRcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjb250YWluZXJJRFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29udGFpbmVyJ3MgSUQgaW4gdGhlIGZvcm1hdCAnZG9ja2VyOi8vXFx1MDAzY2NvbnRhaW5lcl9pZFxcdTAwM2UnXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImV4aXRDb2RlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZXhpdCBzdGF0dXMgZnJvbSB0aGUgbGFzdCB0ZXJtaW5hdGlvbiBvZiB0aGUgY29udGFpbmVyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImZpbmlzaGVkQXRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRpbWUgYXQgd2hpY2ggdGhlIGNvbnRhaW5lciBsYXN0IHRlcm1pbmF0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWVzc2FnZSByZWdhcmRpbmcgdGhlIGxhc3QgdGVybWluYXRpb24gb2YgdGhlIGNvbnRhaW5lclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWFzb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIihicmllZikgcmVhc29uIGZyb20gdGhlIGxhc3QgdGVybWluYXRpb24gb2YgdGhlIGNvbnRhaW5lclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzaWduYWxcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzaWduYWwgZnJvbSB0aGUgbGFzdCB0ZXJtaW5hdGlvbiBvZiB0aGUgY29udGFpbmVyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXJ0ZWRBdFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGltZSBhdCB3aGljaCBwcmV2aW91cyBleGVjdXRpb24gb2YgdGhlIGNvbnRhaW5lciBzdGFydGVkXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250YWluZXJTdGF0ZVRlcm1pbmF0ZWRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVXYWl0aW5nXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwicmVhc29uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCIoYnJpZWYpIHJlYXNvbiB0aGUgY29udGFpbmVyIGlzIG5vdCB5ZXQgcnVubmluZ1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVXYWl0aW5nXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0NvbnRhaW5lclN0YXR1c1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNvbnRhaW5lcklEXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb250YWluZXIncyBJRCBpbiB0aGUgZm9ybWF0ICdkb2NrZXI6Ly9cXHUwMDNjY29udGFpbmVyX2lkXFx1MDAzZSc7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2NvbnRhaW5lci1lbnZpcm9ubWVudC5tZCNjb250YWluZXItaW5mb3JtYXRpb25cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaW1hZ2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImltYWdlIG9mIHRoZSBjb250YWluZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2ltYWdlcy5tZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpbWFnZUlEXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJRCBvZiB0aGUgY29udGFpbmVyJ3MgaW1hZ2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibGFzdFN0YXRlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclN0YXRlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXRlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIGNvbnRhaW5lcjsgbXVzdCBiZSBhIEROU19MQUJFTCBhbmQgdW5pcXVlIHdpdGhpbiB0aGUgcG9kOyBjYW5ub3QgYmUgdXBkYXRlZFwiLFxyXG4gICAgICAgICAgICBcIm1heExlbmd0aFwiOiA2MyxcclxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/JFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWFkeVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNwZWNpZmllcyB3aGV0aGVyIHRoZSBjb250YWluZXIgaGFzIHBhc3NlZCBpdHMgcmVhZGluZXNzIHByb2JlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlc3RhcnRDb3VudFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNvbnRhaW5lciBoYXMgYmVlbiByZXN0YXJ0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdGVcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyU3RhdGVcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdGVcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19FbXB0eURpclZvbHVtZVNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIm1lZGl1bVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHlwZSBvZiBzdG9yYWdlIHVzZWQgdG8gYmFjayB0aGUgdm9sdW1lOyBtdXN0IGJlIGFuIGVtcHR5IHN0cmluZyAoZGVmYXVsdCkgb3IgTWVtb3J5OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI2VtcHR5ZGlyXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbXB0eURpclZvbHVtZVNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19FbmRwb2ludEFkZHJlc3NcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJpcFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSVAgYWRkcmVzcyBvZiB0aGUgZW5kcG9pbnRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidGFyZ2V0UmVmXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50QWRkcmVzc1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19FbmRwb2ludFBvcnRcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoaXMgcG9ydFwiLFxyXG4gICAgICAgICAgICBcIm1heExlbmd0aFwiOiA2MyxcclxuICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IFwiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/JFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwb3J0XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9ydCBudW1iZXIgb2YgdGhlIGVuZHBvaW50XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInByb3RvY29sXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwcm90b2NvbCBmb3IgdGhpcyBwb3J0OyBtdXN0IGJlIFVEUCBvciBUQ1A7IFRDUCBpZiB1bnNwZWNpZmllZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRQb3J0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0VuZHBvaW50U3Vic2V0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYWRkcmVzc2VzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklQIGFkZHJlc3NlcyB3aGljaCBvZmZlciB0aGUgcmVsYXRlZCBwb3J0c1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW5kcG9pbnRBZGRyZXNzXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRBZGRyZXNzXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicG9ydHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9ydCBudW1iZXJzIGF2YWlsYWJsZSBvbiB0aGUgcmVsYXRlZCBJUCBhZGRyZXNzZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VuZHBvaW50UG9ydFwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50UG9ydFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludFN1YnNldFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19FbmRwb2ludHNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiRW5kcG9pbnRzXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN1YnNldHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2V0cyBvZiBhZGRyZXNzZXMgYW5kIHBvcnRzIHRoYXQgY29tcHJpc2UgYSBzZXJ2aWNlXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbmRwb2ludFN1YnNldFwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50U3Vic2V0XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50c1wiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19FbmRwb2ludHNMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBlbmRwb2ludHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VuZHBvaW50c1wiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50c1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJFbmRwb2ludHNMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVuZHBvaW50c0xpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19FbnZWYXJcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZTsgbXVzdCBiZSBhIENfSURFTlRJRklFUlwiLFxyXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW0EtWmEtel9dW0EtWmEtejAtOV9dKiRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidmFsdWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZTsgZGVmYXVsdHMgdG8gZW1wdHkgc3RyaW5nOyB2YXJpYWJsZSByZWZlcmVuY2VzICQoVkFSX05BTUUpIGFyZSBleHBhbmRlZCB1c2luZyB0aGUgcHJldmlvdXNseSBkZWZpbmVkIGVudmlyb25tZW50IHZhcmlibGVzIGluIHRoZSBjb250YWluZXIgYW5kIGFueSBzZXJ2aWNlIGVudmlyb25tZW50IHZhcmlhYmxlczsgaWYgYSB2YXJpYWJsZSBjYW5ub3QgYmUgcmVzb2x2ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidmFsdWVGcm9tXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VudlZhclNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJTb3VyY2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19FbnZWYXJTb3VyY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJmaWVsZFJlZlwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RGaWVsZFNlbGVjdG9yXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdEZpZWxkU2VsZWN0b3JcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19FdmVudFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNvdW50XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIGV2ZW50IGhhcyBvY2N1cnJlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJmaXJzdFRpbWVzdGFtcFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHRpbWUgYXQgd2hpY2ggdGhlIGV2ZW50IHdhcyBmaXJzdCByZWNvcmRlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpbnZvbHZlZE9iamVjdFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJFdmVudFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImxhc3RUaW1lc3RhbXBcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0aW1lIGF0IHdoaWNoIHRoZSBtb3N0IHJlY2VudCBvY2N1cnJlbmNlIG9mIHRoaXMgZXZlbnQgd2FzIHJlY29yZGVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1lc3NhZ2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGF0dXMgb2YgdGhpcyBvcGVyYXRpb25cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYXNvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2hvcnRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic291cmNlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0V2ZW50U291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkV2ZW50U291cmNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FdmVudFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19FdmVudExpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGV2ZW50c1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRXZlbnRcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FdmVudFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJFdmVudExpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRXZlbnRMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfRXZlbnRTb3VyY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjb21wb25lbnRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbXBvbmVudCB0aGF0IGdlbmVyYXRlZCB0aGUgZXZlbnRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaG9zdFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgaG9zdCB3aGVyZSB0aGUgZXZlbnQgaXMgZ2VuZXJhdGVkXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FdmVudFNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19FeGVjQWN0aW9uXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY29tbWFuZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21tYW5kIGxpbmUgdG8gZXhlY3V0ZSBpbnNpZGUgdGhlIGNvbnRhaW5lcjsgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoZSBjb21tYW5kIGlzIHJvb3QgKCcvJykgaW4gdGhlIGNvbnRhaW5lcidzIGZpbGUgc3lzdGVtOyB0aGUgY29tbWFuZCBpcyBleGVjJ2RcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbW1hbmQgbGluZSB0byBleGVjdXRlIGluc2lkZSB0aGUgY29udGFpbmVyOyB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIGNvbW1hbmQgaXMgcm9vdCAoJy8nKSBpbiB0aGUgY29udGFpbmVyJ3MgZmlsZSBzeXN0ZW07IHRoZSBjb21tYW5kIGlzIGV4ZWMnZFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FeGVjQWN0aW9uXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZnNUeXBlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmaWxlIHN5c3RlbSB0eXBlIHRvIG1vdW50XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBhcnRpdGlvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhcnRpdGlvbiBvbiB0aGUgZGlzayB0byBtb3VudCAoZS5nLlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwZE5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBuYW1lIG9mIHRoZSBQRCByZXNvdXJjZSBpbiBHQ0U7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjZ2NlcGVyc2lzdGVudGRpc2tcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWFkLW9ubHkgaWYgdHJ1ZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfR2l0UmVwb1ZvbHVtZVNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInJlcG9zaXRvcnlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlcG9zaXRvcnkgVVJMXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJldmlzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21taXQgaGFzaCBmb3IgdGhlIHNwZWNpZmllZCByZXZpc2lvblwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2l0UmVwb1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJlbmRwb2ludHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImdsdXN0ZXIgaG9zdHMgZW5kcG9pbnRzIG5hbWU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvZ2x1c3RlcmZzL1JFQURNRS5tZCNjcmVhdGUtYS1wb2RcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicGF0aFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGF0aCB0byBnbHVzdGVyIHZvbHVtZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9nbHVzdGVyZnMvUkVBRE1FLm1kI2NyZWF0ZS1hLXBvZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWFkT25seVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImdsdXN0ZXJmcyB2b2x1bWUgdG8gYmUgbW91bnRlZCB3aXRoIHJlYWQtb25seSBwZXJtaXNzaW9uczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9nbHVzdGVyZnMvUkVBRE1FLm1kI2NyZWF0ZS1hLXBvZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2x1c3RlcmZzVm9sdW1lU291cmNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0hUVFBHZXRBY3Rpb25cIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJob3N0XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJob3N0bmFtZSB0byBjb25uZWN0IHRvOyBkZWZhdWx0cyB0byBwb2QgSVBcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicGF0aFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGF0aCB0byBhY2Nlc3Mgb24gdGhlIEhUVFAgc2VydmVyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBvcnRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfdXRpbF9JbnRPclN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JbnRPclN0cmluZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzY2hlbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNjaGVtZSB0byBjb25uZWN0IHdpdGhcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhUVFBHZXRBY3Rpb25cIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfSGFuZGxlclwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImV4ZWNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRXhlY0FjdGlvblwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FeGVjQWN0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImh0dHBHZXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSFRUUEdldEFjdGlvblwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IVFRQR2V0QWN0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRjcFNvY2tldFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19UQ1BTb2NrZXRBY3Rpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVENQU29ja2V0QWN0aW9uXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYW5kbGVyXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0hvc3RQYXRoVm9sdW1lU291cmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwicGF0aFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicGF0aCBvZiB0aGUgZGlyZWN0b3J5IG9uIHRoZSBob3N0OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI2hvc3RwYXRoXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19JU0NTSVZvbHVtZVNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImZzVHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZmlsZSBzeXN0ZW0gdHlwZSB0byBtb3VudFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpcW5cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlTQ1NJIFF1YWxpZmllZCBOYW1lXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImx1blwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlzY3NpIHRhcmdldCBsdW4gbnVtYmVyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVhZC1vbmx5IGlmIHRydWVcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidGFyZ2V0UG9ydGFsXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpU0NTSSB0YXJnZXQgcG9ydGFsXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JU0NTSVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19MaWZlY3ljbGVcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJwb3N0U3RhcnRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSGFuZGxlclwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYW5kbGVyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInByZVN0b3BcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSGFuZGxlclwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYW5kbGVyXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaWZlY3ljbGVcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygb2JqZWN0c1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkJhc2VLdWJlcm5ldGVzTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0xpc3RNZXRhXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwicmVzb3VyY2VWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHRoZSBpbnRlcm5hbCB2ZXJzaW9uIG9mIHRoaXMgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYnkgY2xpZW50cyB0byBkZXRlcm1pbmUgd2hlbiBvYmplY3RzIGhhdmUgY2hhbmdlZDsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW1cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VsZkxpbmtcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVSTCBmb3IgdGhlIG9iamVjdDsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW1cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0xvYWRCYWxhbmNlckluZ3Jlc3NcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJob3N0bmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaG9zdG5hbWUgb2YgaW5ncmVzcyBwb2ludFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpcFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSVAgYWRkcmVzcyBvZiBpbmdyZXNzIHBvaW50XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2FkQmFsYW5jZXJJbmdyZXNzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0xvYWRCYWxhbmNlclN0YXR1c1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImluZ3Jlc3NcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibG9hZC1iYWxhbmNlciBpbmdyZXNzIHBvaW50c1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9hZEJhbGFuY2VySW5ncmVzc1wiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxvYWRCYWxhbmNlckluZ3Jlc3NcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9hZEJhbGFuY2VyU3RhdHVzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcmVmZXJlbnQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzLm1kI25hbWVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19NZXRhZGF0YUZpbGVcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJmaWVsZFJlZlwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RGaWVsZFNlbGVjdG9yXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdEZpZWxkU2VsZWN0b3JcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgY3JlYXRlZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTWV0YWRhdGFGaWxlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX01ldGFkYXRhVm9sdW1lU291cmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBtZXRhZGF0YSBmaWxlc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTWV0YWRhdGFGaWxlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTWV0YWRhdGFGaWxlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk1ldGFkYXRhVm9sdW1lU291cmNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX05GU1ZvbHVtZVNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInBhdGhcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBwYXRoIHRoYXQgaXMgZXhwb3J0ZWQgYnkgdGhlIE5GUyBzZXJ2ZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjbmZzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZm9yY2VzIHRoZSBORlMgZXhwb3J0IHRvIGJlIG1vdW50ZWQgd2l0aCByZWFkLW9ubHkgcGVybWlzc2lvbnM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjbmZzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNlcnZlclwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgdGhlIE5GUyBzZXJ2ZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMubWQjbmZzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5ORlNWb2x1bWVTb3VyY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfTmFtZXNwYWNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk5hbWVzcGFjZVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzcGVjXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05hbWVzcGFjZVNwZWNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlU3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTmFtZXNwYWNlU3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZVN0YXR1c1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX05hbWVzcGFjZUxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpdGVtcyBpcyB0aGUgbGlzdCBvZiBOYW1lc3BhY2Ugb2JqZWN0cyBpbiB0aGUgbGlzdDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbmFtZXNwYWNlcy5tZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTmFtZXNwYWNlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk5hbWVzcGFjZUxpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX05hbWVzcGFjZVNwZWNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJmaW5hbGl6ZXJzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFuIG9wYXF1ZSBsaXN0IG9mIHZhbHVlcyB0aGF0IG11c3QgYmUgZW1wdHkgdG8gcGVybWFuZW50bHkgcmVtb3ZlIG9iamVjdCBmcm9tIHN0b3JhZ2U7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vbmFtZXNwYWNlcy5tZCNmaW5hbGl6ZXJzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbiBvcGFxdWUgbGlzdCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGVtcHR5IHRvIHBlcm1hbmVudGx5IHJlbW92ZSBvYmplY3QgZnJvbSBzdG9yYWdlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL25hbWVzcGFjZXMubWQjZmluYWxpemVyc1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VTcGVjXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX05hbWVzcGFjZVN0YXR1c1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInBoYXNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwaGFzZSBpcyB0aGUgY3VycmVudCBsaWZlY3ljbGUgcGhhc2Ugb2YgdGhlIG5hbWVzcGFjZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9uYW1lc3BhY2VzLm1kI3BoYXNlc1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZXNwYWNlU3RhdHVzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiTm9kZVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzcGVjXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05vZGVTcGVjXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVTcGVjXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlU3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVTdGF0dXNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfTm9kZUFkZHJlc3NcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhZGRyZXNzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbm9kZSBhZGRyZXNzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5vZGUgYWRkcmVzcyB0eXBlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlQWRkcmVzc1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Ob2RlQ29uZGl0aW9uXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibGFzdEhlYXJ0YmVhdFRpbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhc3QgdGltZSB3ZSBnb3QgYW4gdXBkYXRlIG9uIGEgZ2l2ZW4gY29uZGl0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImxhc3RUcmFuc2l0aW9uVGltZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFzdCB0aW1lIHRoZSBjb25kaXRpb24gdHJhbnNpdCBmcm9tIG9uZSBzdGF0dXMgdG8gYW5vdGhlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbiByZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCBsYXN0IHRyYW5zaXRpb25cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVhc29uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCIoYnJpZWYpIHJlYXNvbiBmb3IgdGhlIGNvbmRpdGlvbidzIGxhc3QgdHJhbnNpdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN0YXR1cyBvZiB0aGUgY29uZGl0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgb2Ygbm9kZSBjb25kaXRpb25cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVDb25kaXRpb25cIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfTm9kZUxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG5vZGVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJOb2RlTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVTcGVjXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZXh0ZXJuYWxJRFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZC4gRXh0ZXJuYWwgSUQgYXNzaWduZWQgdG8gdGhlIG5vZGUgYnkgc29tZSBtYWNoaW5lIGRhdGFiYXNlIChlLmcuIGEgY2xvdWQgcHJvdmlkZXIpLiBEZWZhdWx0cyB0byBub2RlIG5hbWUgd2hlbiBlbXB0eS5cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicG9kQ0lEUlwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9kIElQIHJhbmdlIGFzc2lnbmVkIHRvIHRoZSBub2RlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInByb3ZpZGVySURcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklEIG9mIHRoZSBub2RlIGFzc2lnbmVkIGJ5IHRoZSBjbG91ZCBwcm92aWRlciBpbiB0aGUgZm9ybWF0OiBcXHUwMDNjUHJvdmlkZXJOYW1lXFx1MDAzZTovL1xcdTAwM2NQcm92aWRlclNwZWNpZmljTm9kZUlEXFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1bnNjaGVkdWxhYmxlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGlzYWJsZSBwb2Qgc2NoZWR1bGluZyBvbiB0aGUgbm9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2FkbWluL25vZGUubWQjbWFudWFsLW5vZGUtYWRtaW5pc3RyYXRpb25cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVTcGVjXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX05vZGVTdGF0dXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhZGRyZXNzZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBhZGRyZXNzZXMgcmVhY2hhYmxlIHRvIHRoZSBub2RlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvYWRtaW4vbm9kZS5tZCNub2RlLWFkZHJlc3Nlc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZUFkZHJlc3NcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlQWRkcmVzc1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNhcGFjaXR5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjb21wdXRlIHJlc291cmNlIGNhcGFjaXR5IG9mIHRoZSBub2RlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9jb21wdXRlLXJlc291cmNlcy5tZFwiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjb25kaXRpb25zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygbm9kZSBjb25kaXRpb25zIG9ic2VydmVkOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvYWRtaW4vbm9kZS5tZCNub2RlLWNvbmRpdGlvblwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZUNvbmRpdGlvblwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVDb25kaXRpb25cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJub2RlSW5mb1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ob2RlU3lzdGVtSW5mb1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlU3lzdGVtSW5mb1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwaGFzZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibW9zdCByZWNlbnRseSBvYnNlcnZlZCBsaWZlY3ljbGUgcGhhc2Ugb2YgdGhlIG5vZGU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9hZG1pbi9ub2RlLm1kI25vZGUtcGhhc2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVTdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfTm9kZVN5c3RlbUluZm9cIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJib290SURcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImJvb3QgaWQgaXMgdGhlIGJvb3QtaWQgcmVwb3J0ZWQgYnkgdGhlIG5vZGVcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY29udGFpbmVyUnVudGltZVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbnRhaW5lciBydW50aW1lIHZlcnNpb24gcmVwb3J0ZWQgYnkgdGhlIG5vZGUgdGhyb3VnaCBydW50aW1lIHJlbW90ZSBBUEkgKGUuZy4gZG9ja2VyOi8vMS41LjApXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtlcm5lbFZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIktlcm5lbCB2ZXJzaW9uIHJlcG9ydGVkIGJ5IHRoZSBub2RlIGZyb20gJ3VuYW1lIC1yJyAoZS5nLiAzLjE2LjAtMC5icG8uNC1hbWQ2NClcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia3ViZVByb3h5VmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiS3ViZS1wcm94eSB2ZXJzaW9uIHJlcG9ydGVkIGJ5IHRoZSBub2RlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImt1YmVsZXRWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJLdWJlbGV0IHZlcnNpb24gcmVwb3J0ZWQgYnkgdGhlIG5vZGVcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWFjaGluZUlEXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYWNoaW5lLWlkIHJlcG9ydGVkIGJ5IHRoZSBub2RlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm9zSW1hZ2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9TIGltYWdlIHVzZWQgcmVwb3J0ZWQgYnkgdGhlIG5vZGUgZnJvbSAvZXRjL29zLXJlbGVhc2UgKGUuZy4gRGViaWFuIEdOVS9MaW51eCA3ICh3aGVlenkpKVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzeXN0ZW1VVUlEXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzeXN0ZW0tdXVpZCByZXBvcnRlZCBieSB0aGUgbm9kZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTm9kZVN5c3RlbUluZm9cIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfT2JqZWN0RmllbGRTZWxlY3RvclwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInZlcnNpb24gb2YgdGhlIHNjaGVtYSB0aGF0IGZpZWxkUGF0aCBpcyB3cml0dGVuIGluIHRlcm1zIG9mOyBkZWZhdWx0cyB0byB2MVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJmaWVsZFBhdGhcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggb2YgdGhlIGZpZWxkIHRvIHNlbGVjdCBpbiB0aGUgc3BlY2lmaWVkIEFQSSB2ZXJzaW9uXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RGaWVsZFNlbGVjdG9yXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX09iamVjdE1ldGFcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhbm5vdGF0aW9uc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFwIG9mIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCBieSBleHRlcm5hbCB0b29saW5nIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBhcmJpdHJhcnkgbWV0YWRhdGEgYWJvdXQgb2JqZWN0czsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvYW5ub3RhdGlvbnMubWRcIixcclxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1hcCBvZiBzdHJpbmcga2V5cyBhbmQgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgYnkgZXh0ZXJuYWwgdG9vbGluZyB0byBzdG9yZSBhbmQgcmV0cmlldmUgYXJiaXRyYXJ5IG1ldGFkYXRhIGFib3V0IG9iamVjdHM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2Fubm90YXRpb25zLm1kXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY3JlYXRpb25UaW1lc3RhbXBcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJGQyAzMzM5IGRhdGUgYW5kIHRpbWUgYXQgd2hpY2ggdGhlIG9iamVjdCB3YXMgY3JlYXRlZDsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW1cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZGVsZXRpb25UaW1lc3RhbXBcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJGQyAzMzM5IGRhdGUgYW5kIHRpbWUgYXQgd2hpY2ggdGhlIG9iamVjdCB3aWxsIGJlIGRlbGV0ZWQ7IHBvcHVsYXRlZCBieSB0aGUgc3lzdGVtIHdoZW4gYSBncmFjZWZ1bCBkZWxldGlvbiBpcyByZXF1ZXN0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZ2VuZXJhdGVOYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbiBvcHRpb25hbCBwcmVmaXggdG8gdXNlIHRvIGdlbmVyYXRlIGEgdW5pcXVlIG5hbWU7IGhhcyB0aGUgc2FtZSB2YWxpZGF0aW9uIHJ1bGVzIGFzIG5hbWU7IG9wdGlvbmFsXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdlbmVyYXRpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIHNlcXVlbmNlIG51bWJlciByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyBnZW5lcmF0aW9uIG9mIHRoZSBkZXNpcmVkIHN0YXRlOyBwb3B1bGF0ZWQgYnkgdGhlIHN5c3RlbTsgcmVhZC1vbmx5XCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImxhYmVsc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFwIG9mIHN0cmluZyBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSBvYmplY3RzOyBtYXkgbWF0Y2ggc2VsZWN0b3JzIG9mIHJlcGxpY2F0aW9uIGNvbnRyb2xsZXJzIGFuZCBzZXJ2aWNlczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbGFiZWxzLm1kXCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtYXAgb2Ygc3RyaW5nIGtleXMgYW5kIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIG9yZ2FuaXplIGFuZCBjYXRlZ29yaXplIG9iamVjdHM7IG1heSBtYXRjaCBzZWxlY3RvcnMgb2YgcmVwbGljYXRpb24gY29udHJvbGxlcnMgYW5kIHNlcnZpY2VzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9sYWJlbHMubWRcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGFuIG9iamVjdC4gTXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgbmFtZXNwYWNlOyBjYW5ub3QgYmUgdXBkYXRlZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvaWRlbnRpZmllcnMubWQjbmFtZXNcIixcclxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXHJcbiAgICAgICAgICAgIFwicGF0dGVyblwiOiBcIl5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZXNwYWNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lc3BhY2Ugb2YgdGhlIG9iamVjdDsgbXVzdCBiZSBhIEROU19MQUJFTDsgY2Fubm90IGJlIHVwZGF0ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL25hbWVzcGFjZXMubWRcIixcclxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogMjUzLFxyXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8oXFxcXC5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPykqJFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIGludGVybmFsIHZlcnNpb24gb2YgdGhpcyBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnRzIHRvIGRldGVybWluZSB3aGVuIG9iamVjdHMgaGF2ZSBjaGFuZ2VkOyBwb3B1bGF0ZWQgYnkgdGhlIHN5c3RlbVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZWxmTGlua1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGZvciB0aGUgb2JqZWN0OyBwb3B1bGF0ZWQgYnkgdGhlIHN5c3RlbVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1aWRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBVVUlEIGFjcm9zcyBzcGFjZSBhbmQgdGltZTsgcG9wdWxhdGVkIGJ5IHRoZSBzeXN0ZW07IHJlYWQtb25seTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvaWRlbnRpZmllcnMubWQjdWlkc1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBUEkgdmVyc2lvbiBvZiB0aGUgcmVmZXJlbnRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZmllbGRQYXRoXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpZiByZWZlcnJpbmcgdG8gYSBwaWVjZSBvZiBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBlbnRpcmUgb2JqZWN0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImtpbmQgb2YgdGhlIHJlZmVyZW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJlZmVyZW50OyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9pZGVudGlmaWVycy5tZCNuYW1lc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbnQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL25hbWVzcGFjZXMubWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVzb3VyY2VWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzcGVjaWZpYyByZXNvdXJjZVZlcnNpb24gdG8gd2hpY2ggdGhpcyByZWZlcmVuY2UgaXMgbWFkZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1aWRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVpZCBvZiB0aGUgcmVmZXJlbnQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzLm1kI3VpZHNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlBlcnNpc3RlbnRWb2x1bWVcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3BlY1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lU3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVN0YXR1c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lU3RhdHVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVDbGFpbVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3BlY1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TcGVjXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVNwZWNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVDbGFpbVN0YXR1c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TdGF0dXNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBsaXN0IG9mIHBlcnNpc3RlbnQgdm9sdW1lIGNsYWltczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI3BlcnNpc3RlbnR2b2x1bWVjbGFpbXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVDbGFpbVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbUxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TcGVjXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYWNjZXNzTW9kZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGRlc2lyZWQgYWNjZXNzIG1vZGVzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXMtMVwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGRlc2lyZWQgYWNjZXNzIG1vZGVzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNhY2Nlc3MtbW9kZXMtMVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlc291cmNlc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVJlcXVpcmVtZW50c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ2b2x1bWVOYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgYmluZGluZyByZWZlcmVuY2UgdG8gdGhlIHBlcnNpc3RlbnQgdm9sdW1lIGJhY2tpbmcgdGhpcyBjbGFpbVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltU3BlY1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1TdGF0dXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhY2Nlc3NNb2Rlc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgYWN0dWFsIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIGhhczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI2FjY2Vzcy1tb2Rlcy0xXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgYWN0dWFsIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIGhhczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI2FjY2Vzcy1tb2Rlcy0xXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY2FwYWNpdHlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBhY3R1YWwgcmVzb3VyY2VzIHRoZSB2b2x1bWUgaGFzXCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLGlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcXHUwMDNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBoYXNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgY3VycmVudCBwaGFzZSBvZiB0aGUgY2xhaW1cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjbGFpbU5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIG9mIHRoZSBjbGFpbSBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgdG8gYmUgbW91bnRlZCBhcyBhIHZvbHVtZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI3BlcnNpc3RlbnR2b2x1bWVjbGFpbXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtb3VudCB2b2x1bWUgYXMgcmVhZC1vbmx5IHdoZW4gdHJ1ZTsgZGVmYXVsdCBmYWxzZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwZXJzaXN0ZW50IHZvbHVtZXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUGVyc2lzdGVudFZvbHVtZUxpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lU291cmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXdzRWxhc3RpY0Jsb2NrU3RvcmVcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY2VwaGZzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NlcGhGU1ZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5DZXBoRlNWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZ2NlUGVyc2lzdGVudERpc2tcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR0NFUGVyc2lzdGVudERpc2tWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZ2x1c3RlcmZzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaG9zdFBhdGhcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSG9zdFBhdGhWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSG9zdFBhdGhWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXNjc2lcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSVNDU0lWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSVNDU0lWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmZzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05GU1ZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5ORlNWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmJkXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JCRFZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SQkRWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVTb3VyY2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZVNwZWNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhY2Nlc3NNb2Rlc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgd2F5cyB0aGUgdm9sdW1lIGNhbiBiZSBtb3VudGVkOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjYWNjZXNzLW1vZGVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgd2F5cyB0aGUgdm9sdW1lIGNhbiBiZSBtb3VudGVkOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjYWNjZXNzLW1vZGVzXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiYXdzRWxhc3RpY0Jsb2NrU3RvcmVcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQVdTRWxhc3RpY0Jsb2NrU3RvcmVWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY2FwYWNpdHlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgZGVzY3JpcHRpb24gb2YgdGhlIHBlcnNpc3RlbnQgdm9sdW1lJ3MgcmVzb3VyY2VzIGFuZCBjYXBhY2l0eXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BlcnNpc3RlbnQtdm9sdW1lcy5tZCNjYXBhY2l0eVwiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjZXBoZnNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ2VwaEZTVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNlcGhGU1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjbGFpbVJlZlwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdjZVBlcnNpc3RlbnREaXNrXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdsdXN0ZXJmc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2x1c3RlcmZzVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImhvc3RQYXRoXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hvc3RQYXRoVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhvc3RQYXRoVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImlzY3NpXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0lTQ1NJVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLklTQ1NJVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5mc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ORlNWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTkZTVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBlcnNpc3RlbnRWb2x1bWVSZWNsYWltUG9saWN5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ3aGF0IGhhcHBlbnMgdG8gYSB2b2x1bWUgd2hlbiByZWxlYXNlZCBmcm9tIGl0cyBjbGFpbTsgVmFsaWQgb3B0aW9ucyBhcmUgUmV0YWluIChkZWZhdWx0KSBhbmQgUmVjeWNsZS4gIFJlY3lsaW5nIG11c3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSB2b2x1bWUgcGx1Z2luIHVuZGVybHlpbmcgdGhpcyBwZXJzaXN0ZW50IHZvbHVtZS4gU2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcGVyc2lzdGVudC12b2x1bWVzLm1kI3JlY3ljbGluZy1wb2xpY3lcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmJkXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JCRFZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SQkRWb2x1bWVTb3VyY2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVTcGVjXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVTdGF0dXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCB3aHkgdGhlIHZvbHVtZSBpcyBpbiB0aGlzIHN0YXRlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBoYXNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgY3VycmVudCBwaGFzZSBvZiBhIHBlcnNpc3RlbnQgdm9sdW1lOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wZXJzaXN0ZW50LXZvbHVtZXMubWQjcGhhc2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVhc29uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCIoYnJpZWYpIHJlYXNvbiB0aGUgdm9sdW1lIGlzIG5vdCBpcyBub3QgYXZhaWxhYmxlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lU3RhdHVzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1BvZFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3BlY1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RTcGVjXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFNwZWNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BvZFN0YXR1c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RTdGF0dXNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Qb2RDb25kaXRpb25cIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN0YXR1cyBvZiB0aGUgY29uZGl0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImtpbmQgb2YgdGhlIGNvbmRpdGlvblwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kQ29uZGl0aW9uXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1BvZExpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHBvZHM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3BvZHMubWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BvZFwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2RMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZExpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Qb2RTcGVjXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYWN0aXZlRGVhZGxpbmVTZWNvbmRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNvbnRhaW5lcnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBjb250YWluZXJzIGJlbG9uZ2luZyB0byB0aGUgcG9kOyBjYW5ub3QgYmUgdXBkYXRlZDsgY29udGFpbmVycyBjYW5ub3QgY3VycmVudGx5IGJlIGFkZGVkIG9yIHJlbW92ZWQ7IHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGNvbnRhaW5lciBpbiBhIFBvZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvY29udGFpbmVycy5tZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZG5zUG9saWN5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJETlMgcG9saWN5IGZvciBjb250YWluZXJzIHdpdGhpbiB0aGUgcG9kOyBvbmUgb2YgJ0NsdXN0ZXJGaXJzdCcgb3IgJ0RlZmF1bHQnXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImhvc3RcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlcHJlY2F0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaG9zdE5ldHdvcmtcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJob3N0IG5ldHdvcmtpbmcgcmVxdWVzdGVkIGZvciB0aGlzIHBvZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpbWFnZVB1bGxTZWNyZXRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVmZXJlbmNlcyB0byBzZWNyZXRzIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhdmFpbGFibGUgZm9yIHB1bGxpbmcgdGhlIGNvbnRhaW5lciBpbWFnZXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2ltYWdlcy5tZCNzcGVjaWZ5aW5nLWltYWdlcHVsbHNlY3JldHMtb24tYS1wb2RcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvY2FsT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJub2RlTmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibm9kZSByZXF1ZXN0ZWQgZm9yIHRoaXMgcG9kXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5vZGVTZWxlY3RvclwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2VsZWN0b3Igd2hpY2ggbXVzdCBtYXRjaCBhIG5vZGUncyBsYWJlbHMgZm9yIHRoZSBwb2QgdG8gYmUgc2NoZWR1bGVkIG9uIHRoYXQgbm9kZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbm9kZS1zZWxlY3Rpb24vUkVBRE1FLm1kXCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZWxlY3RvciB3aGljaCBtdXN0IG1hdGNoIGEgbm9kZSdzIGxhYmVscyBmb3IgdGhlIHBvZCB0byBiZSBzY2hlZHVsZWQgb24gdGhhdCBub2RlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9ub2RlLXNlbGVjdGlvbi9SRUFETUUubWRcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXN0YXJ0UG9saWN5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZXN0YXJ0IHBvbGljeSBmb3IgYWxsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSBwb2Q7IG9uZSBvZiBBbHdheXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VydmljZUFjY291bnRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlcHJlY2F0ZWQ7IHVzZSBzZXJ2aWNlQWNjb3VudE5hbWUgaW5zdGVhZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZXJ2aWNlQWNjb3VudE5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIFNlcnZpY2VBY2NvdW50IHRvIHVzZSB0byBydW4gdGhpcyBwb2Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vc2VydmljZV9hY2NvdW50cy5tZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsIGR1cmF0aW9uIGluIHNlY29uZHMgdGhlIHBvZCBuZWVkcyB0byB0ZXJtaW5hdGUgZ3JhY2VmdWxseTsgbWF5IGJlIGRlY3JlYXNlZCBpbiBkZWxldGUgcmVxdWVzdDsgdmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUgaW50ZWdlcjsgdGhlIHZhbHVlIHplcm8gaW5kaWNhdGVzIGRlbGV0ZSBpbW1lZGlhdGVseTsgaWYgdGhpcyB2YWx1ZSBpcyBub3Qgc2V0XCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInZvbHVtZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiB2b2x1bWVzIHRoYXQgY2FuIGJlIG1vdW50ZWQgYnkgY29udGFpbmVycyBiZWxvbmdpbmcgdG8gdGhlIHBvZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvdm9sdW1lcy5tZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfVm9sdW1lXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFNwZWNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUG9kU3RhdHVzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY29uZGl0aW9uc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjdXJyZW50IHNlcnZpY2Ugc3RhdGUgb2YgcG9kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wb2Qtc3RhdGVzLm1kI3BvZC1jb25kaXRpb25zXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RDb25kaXRpb25cIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RDb25kaXRpb25cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjb250YWluZXJTdGF0dXNlc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGNvbnRhaW5lciBzdGF0dXNlczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNjb250YWluZXItc3RhdHVzZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0NvbnRhaW5lclN0YXR1c1wiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRhaW5lclN0YXR1c1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImhvc3RJUFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSVAgYWRkcmVzcyBvZiB0aGUgaG9zdCB0byB3aGljaCB0aGUgcG9kIGlzIGFzc2lnbmVkOyBlbXB0eSBpZiBub3QgeWV0IHNjaGVkdWxlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbiByZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCB3aHkgdGhlIHBvZCBpcyBpbiB0aGlzIGNvbmRpdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwaGFzZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY3VycmVudCBjb25kaXRpb24gb2YgdGhlIHBvZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNwb2QtcGhhc2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicG9kSVBcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklQIGFkZHJlc3MgYWxsb2NhdGVkIHRvIHRoZSBwb2Q7IHJvdXRhYmxlIGF0IGxlYXN0IHdpdGhpbiB0aGUgY2x1c3RlcjsgZW1wdHkgaWYgbm90IHlldCBhbGxvY2F0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVhc29uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCIoYnJpZWYtQ2FtZWxDYXNlKSByZWFzb24gaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IHdoeSB0aGUgcG9kIGlzIGluIHRoaXMgY29uZGl0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXJ0VGltZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUkZDIDMzMzkgZGF0ZSBhbmQgdGltZSBhdCB3aGljaCB0aGUgb2JqZWN0IHdhcyBhY2tub3dsZWRnZWQgYnkgdGhlIEt1YmVsZXQuICBUaGlzIGlzIGJlZm9yZSB0aGUgS3ViZWxldCBwdWxsZWQgdGhlIGNvbnRhaW5lciBpbWFnZShzKSBmb3IgdGhlIHBvZC5cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Qb2RUZW1wbGF0ZVNwZWNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3BlY1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RTcGVjXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFNwZWNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZFRlbXBsYXRlU3BlY1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Qcm9iZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImV4ZWNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRXhlY0FjdGlvblwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FeGVjQWN0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImh0dHBHZXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfSFRUUEdldEFjdGlvblwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IVFRQR2V0QWN0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImluaXRpYWxEZWxheVNlY29uZHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJudW1iZXIgb2Ygc2Vjb25kcyBhZnRlciB0aGUgY29udGFpbmVyIGhhcyBzdGFydGVkIGJlZm9yZSBsaXZlbmVzcyBwcm9iZXMgYXJlIGluaXRpYXRlZDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcG9kLXN0YXRlcy5tZCNjb250YWluZXItcHJvYmVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRjcFNvY2tldFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19UQ1BTb2NrZXRBY3Rpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVENQU29ja2V0QWN0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRpbWVvdXRTZWNvbmRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgd2hpY2ggbGl2ZW5lc3MgcHJvYmVzIHRpbWVvdXQ7IGRlZmF1bHRzIHRvIDEgc2Vjb25kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9wb2Qtc3RhdGVzLm1kI2NvbnRhaW5lci1wcm9iZXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlByb2JlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1JCRFZvbHVtZVNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImZzVHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZmlsZSBzeXN0ZW0gdHlwZSB0byBtb3VudFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpbWFnZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmFkb3MgaW1hZ2UgbmFtZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2V5cmluZ1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwia2V5cmluZyBpcyB0aGUgcGF0aCB0byBrZXkgcmluZyBmb3IgcmFkb3MgdXNlcjsgZGVmYXVsdCBpcyAvZXRjL2NlcGgva2V5cmluZzsgb3B0aW9uYWw7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1vbml0b3JzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgY29sbGVjdGlvbiBvZiBDZXBoIG1vbml0b3JzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBjb2xsZWN0aW9uIG9mIENlcGggbW9uaXRvcnM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicG9vbFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmFkb3MgcG9vbCBuYW1lOyBkZWZhdWx0IGlzIHJiZDsgb3B0aW9uYWw7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZXhhbXBsZXMvcmJkL1JFQURNRS5tZCNob3ctdG8tdXNlLWl0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYWRPbmx5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmJkIHZvbHVtZSB0byBiZSBtb3VudGVkIHdpdGggcmVhZC1vbmx5IHBlcm1pc3Npb25zOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2V4YW1wbGVzL3JiZC9SRUFETUUubWQjaG93LXRvLXVzZS1pdFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZWNyZXRSZWZcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlclwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmFkb3MgdXNlciBuYW1lOyBkZWZhdWx0IGlzIGFkbWluOyBvcHRpb25hbDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9leGFtcGxlcy9yYmQvUkVBRE1FLm1kI2hvdy10by11c2UtaXRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJCRFZvbHVtZVNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19SZXBsaWNhdGlvbkNvbnRyb2xsZXJcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUmVwbGljYXRpb25Db250cm9sbGVyXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNwZWNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXBsaWNhdGlvbkNvbnRyb2xsZXJTcGVjXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXBsaWNhdGlvbkNvbnRyb2xsZXJTdGF0dXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyU3RhdHVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXBsaWNhdGlvbkNvbnRyb2xsZXJcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVwbGljYXRpb24gY29udHJvbGxlcnM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3JlcGxpY2F0aW9uLWNvbnRyb2xsZXIubWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1JlcGxpY2F0aW9uQ29udHJvbGxlclwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlclwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19SZXBsaWNhdGlvbkNvbnRyb2xsZXJTcGVjXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwicmVwbGljYXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJudW1iZXIgb2YgcmVwbGljYXMgZGVzaXJlZDsgZGVmYXVsdHMgdG8gMTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvcmVwbGljYXRpb24tY29udHJvbGxlci5tZCN3aGF0LWlzLWEtcmVwbGljYXRpb24tY29udHJvbGxlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZWxlY3RvclwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFiZWwga2V5cyBhbmQgdmFsdWVzIHRoYXQgbXVzdCBtYXRjaCBpbiBvcmRlciB0byBiZSBjb250cm9sbGVkIGJ5IHRoaXMgcmVwbGljYXRpb24gY29udHJvbGxlclwiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFiZWwga2V5cyBhbmQgdmFsdWVzIHRoYXQgbXVzdCBtYXRjaCBpbiBvcmRlciB0byBiZSBjb250cm9sbGVkIGJ5IHRoaXMgcmVwbGljYXRpb24gY29udHJvbGxlclwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRlbXBsYXRlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BvZFRlbXBsYXRlU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RUZW1wbGF0ZVNwZWNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlclNwZWNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUmVwbGljYXRpb25Db250cm9sbGVyU3RhdHVzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwib2JzZXJ2ZWRHZW5lcmF0aW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVmbGVjdHMgdGhlIGdlbmVyYXRpb24gb2YgdGhlIG1vc3QgcmVjZW50bHkgb2JzZXJ2ZWQgcmVwbGljYXRpb24gY29udHJvbGxlclwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXBsaWNhc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm1vc3QgcmVjZW50bHkgb2JlcnZlZCBudW1iZXIgb2YgcmVwbGljYXM7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3JlcGxpY2F0aW9uLWNvbnRyb2xsZXIubWQjd2hhdC1pcy1hLXJlcGxpY2F0aW9uLWNvbnRyb2xsZXJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlcGxpY2F0aW9uQ29udHJvbGxlclN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJlc291cmNlUXVvdGFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3BlY1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhU3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUmVzb3VyY2VRdW90YVN0YXR1c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhU3RhdHVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaXRlbXMgaXMgYSBsaXN0IG9mIFJlc291cmNlUXVvdGEgb2JqZWN0czsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9hZG1pc3Npb25fY29udHJvbF9yZXNvdXJjZV9xdW90YS5tZCNhZG1pc3Npb25jb250cm9sLXBsdWdpbi1yZXNvdXJjZXF1b3RhXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVF1b3RhXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJSZXNvdXJjZVF1b3RhTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFTcGVjXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiaGFyZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaGFyZCBpcyB0aGUgc2V0IG9mIGRlc2lyZWQgaGFyZCBsaW1pdHMgZm9yIGVhY2ggbmFtZWQgcmVzb3VyY2U7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vYWRtaXNzaW9uX2NvbnRyb2xfcmVzb3VyY2VfcXVvdGEubWQjYWRtaXNzaW9uY29udHJvbC1wbHVnaW4tcmVzb3VyY2VxdW90YVwiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XFx1MDAzZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YVNwZWNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUmVzb3VyY2VRdW90YVN0YXR1c1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImhhcmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImhhcmQgaXMgdGhlIHNldCBvZiBlbmZvcmNlZCBoYXJkIGxpbWl0cyBmb3IgZWFjaCBuYW1lZCByZXNvdXJjZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9hZG1pc3Npb25fY29udHJvbF9yZXNvdXJjZV9xdW90YS5tZCNhZG1pc3Npb25jb250cm9sLXBsdWdpbi1yZXNvdXJjZXF1b3RhXCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLGlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcXHUwMDNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVzZWRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZWQgaXMgdGhlIGN1cnJlbnQgb2JzZXJ2ZWQgdG90YWwgdXNhZ2Ugb2YgdGhlIHJlc291cmNlIGluIHRoZSBuYW1lc3BhY2VcIixcclxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVxcdTAwM2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJlc291cmNlUXVvdGFTdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUmVzb3VyY2VSZXF1aXJlbWVudHNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJsaW1pdHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQ7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy9kZXNpZ24vcmVzb3VyY2VzLm1kI3Jlc291cmNlLXNwZWNpZmljYXRpb25zXCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19yZXNvdXJjZV9RdWFudGl0eVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLGlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcXHUwMDNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlcXVlc3RzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNaW5pbXVtIGFtb3VudCBvZiByZXNvdXJjZXMgcmVxdWVzdGVkOyBpZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lclwiLFxyXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlF1YW50aXR5XFx1MDAzZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VSZXF1aXJlbWVudHNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfUnVuQXNVc2VyU3RyYXRlZ3lPcHRpb25zXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwidHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3RyYXRlZ3kgdXNlZCB0byBnZW5lcmF0ZSBSdW5Bc1VzZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidWlkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHVpZCB0byBhbHdheXMgcnVuIGFzOyByZXF1aXJlZCBmb3IgTXVzdFJ1bkFzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVpZFJhbmdlTWF4XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWF4IHZhbHVlIGZvciByYW5nZSBiYXNlZCBhbGxvY2F0b3JzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVpZFJhbmdlTWluXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWluIHZhbHVlIGZvciByYW5nZSBiYXNlZCBhbGxvY2F0b3JzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SdW5Bc1VzZXJTdHJhdGVneU9wdGlvbnNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU0VMaW51eENvbnRleHRTdHJhdGVneU9wdGlvbnNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJzZUxpbnV4T3B0aW9uc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TRUxpbnV4T3B0aW9uc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TRUxpbnV4T3B0aW9uc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJhdGVneSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBTRUxpbnV4IGNvbnRleHRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNFTGludXhDb250ZXh0U3RyYXRlZ3lPcHRpb25zXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1NFTGludXhPcHRpb25zXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibGV2ZWxcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBsZXZlbCBsYWJlbCB0byBhcHBseSB0byB0aGUgY29udGFpbmVyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9sYWJlbHMubWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicm9sZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHJvbGUgbGFiZWwgdG8gYXBwbHkgdG8gdGhlIGNvbnRhaW5lcjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvbGFiZWxzLm1kXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0eXBlIGxhYmVsIHRvIGFwcGx5IHRvIHRoZSBjb250YWluZXI7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2xhYmVscy5tZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdXNlciBsYWJlbCB0byBhcHBseSB0byB0aGUgY29udGFpbmVyOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9sYWJlbHMubWRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNFTGludXhPcHRpb25zXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1NlY3JldFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRhdGEgY29udGFpbnMgdGhlIHNlY3JldCBkYXRhLiAgRWFjaCBrZXkgbXVzdCBiZSBhIHZhbGlkIEROU19TVUJET01BSU4gb3IgbGVhZGluZyBkb3QgZm9sbG93ZWQgYnkgdmFsaWQgRE5TX1NVQkRPTUFJTi4gIEVhY2ggdmFsdWUgbXVzdCBiZSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgjc2VjdGlvbi00XCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkYXRhIGNvbnRhaW5zIHRoZSBzZWNyZXQgZGF0YS4gIEVhY2gga2V5IG11c3QgYmUgYSB2YWxpZCBETlNfU1VCRE9NQUlOIG9yIGxlYWRpbmcgZG90IGZvbGxvd2VkIGJ5IHZhbGlkIEROU19TVUJET01BSU4uICBFYWNoIHZhbHVlIG11c3QgYmUgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4I3NlY3Rpb24tNFwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTZWNyZXRcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHlwZSBmYWNpbGl0YXRlcyBwcm9ncmFtbWF0aWMgaGFuZGxpbmcgb2Ygc2VjcmV0IGRhdGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3JldFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19TZWNyZXRMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaXRlbXMgaXMgYSBsaXN0IG9mIHNlY3JldCBvYmplY3RzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9zZWNyZXRzLm1kXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VjcmV0TGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU2VjcmV0Vm9sdW1lU291cmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwic2VjcmV0TmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2VjcmV0TmFtZSBpcyB0aGUgbmFtZSBvZiBhIHNlY3JldCBpbiB0aGUgcG9kJ3MgbmFtZXNwYWNlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS92b2x1bWVzLm1kI3NlY3JldHNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3JldFZvbHVtZVNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjYXBhYmlsaXRpZXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ2FwYWJpbGl0aWVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNhcGFiaWxpdGllc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwcml2aWxlZ2VkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicnVuIHRoZSBjb250YWluZXIgaW4gcHJpdmlsZWdlZCBtb2RlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL3NlY3VyaXR5X2NvbnRleHQubWQjc2VjdXJpdHktY29udGV4dFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJydW5Bc05vblJvb3RcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbmRpY2F0ZXMgdGhlIGNvbnRhaW5lciBtdXN0IGJlIHJ1biBhcyBhIG5vbi1yb290IHVzZXIgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIHJ1bkFzVXNlciBvciBpbiB0aGUgaW1hZ2Ugc3BlY2lmaWNhdGlvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJydW5Bc1VzZXJcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdXNlciBpZCB0aGF0IHJ1bnMgdGhlIGZpcnN0IHByb2Nlc3MgaW4gdGhlIGNvbnRhaW5lcjsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2Rlc2lnbi9zZWN1cml0eV9jb250ZXh0Lm1kI3NlY3VyaXR5LWNvbnRleHRcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VMaW51eE9wdGlvbnNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU0VMaW51eE9wdGlvbnNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU0VMaW51eE9wdGlvbnNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3VyaXR5Q29udGV4dFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFsbG93SG9zdERpclZvbHVtZVBsdWdpblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbG93IHRoZSB1c2Ugb2YgdGhlIGhvc3QgZGlyIHZvbHVtZSBwbHVnaW5cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiYWxsb3dIb3N0TmV0d29ya1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbG93IHRoZSB1c2Ugb2YgdGhlIGhvc3ROZXR3b3JrIGluIHRoZSBwb2Qgc3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJhbGxvd0hvc3RQb3J0c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbG93IHRoZSB1c2Ugb2YgdGhlIGhvc3QgcG9ydHMgaW4gdGhlIGNvbnRhaW5lcnNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiYWxsb3dQcml2aWxlZ2VkQ29udGFpbmVyXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsb3cgY29udGFpbmVycyB0byBydW4gYXMgcHJpdmlsZWdlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJhbGxvd2VkQ2FwYWJpbGl0aWVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNhcGFiaWxpdGllcyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIGFkZGVkXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJjYXBhYmlsaXRpZXMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBhZGRlZFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdyb3Vwc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJncm91cHMgYWxsb3dlZCB0byB1c2UgdGhpcyBTZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZ3JvdXBzIGFsbG93ZWQgdG8gdXNlIHRoaXMgU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicnVuQXNVc2VyXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1J1bkFzVXNlclN0cmF0ZWd5T3B0aW9uc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SdW5Bc1VzZXJTdHJhdGVneU9wdGlvbnNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VMaW51eENvbnRleHRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU0VMaW51eENvbnRleHRTdHJhdGVneU9wdGlvbnNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU0VMaW51eENvbnRleHRTdHJhdGVneU9wdGlvbnNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlcnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidXNlcnMgYWxsb3dlZCB0byB1c2UgdGhpcyBTZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidXNlcnMgYWxsb3dlZCB0byB1c2UgdGhpcyBTZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c0xpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiU2VydmljZVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzcGVjXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VTcGVjXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VTcGVjXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZXJ2aWNlU3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VTdGF0dXNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU2VydmljZUFjY291bnRcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpbWFnZVB1bGxTZWNyZXRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVmZXJlbmNlcyB0byBzZWNyZXRzIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhdmFpbGFibGUgZm9yIHB1bGxpbmcgY29udGFpbmVyIGltYWdlczsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvc2VjcmV0cy5tZCNtYW51YWxseS1zcGVjaWZ5aW5nLWFuLWltYWdlcHVsbHNlY3JldFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTZXJ2aWNlQWNjb3VudFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZWNyZXRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygc2VjcmV0cyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHBvZHMgcnVubmluZyBhcyB0aGlzIHNlcnZpY2UgYWNjb3VudDsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL3VzZXItZ3VpZGUvc2VjcmV0cy5tZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VBY2NvdW50XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VBY2NvdW50TGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgU2VydmljZUFjY291bnRzOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGVzaWduL3NlcnZpY2VfYWNjb3VudHMubWQjc2VydmljZS1hY2NvdW50c1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VydmljZUFjY291bnRcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlQWNjb3VudFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTZXJ2aWNlQWNjb3VudExpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZUFjY291bnRMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU2VydmljZUxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHNlcnZpY2VzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZXJ2aWNlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTZXJ2aWNlTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1NlcnZpY2VQb3J0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgdGhpcyBwb3J0OyBvcHRpb25hbCBpZiBvbmx5IG9uZSBwb3J0IGlzIGRlZmluZWRcIixcclxuICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogNjMsXHJcbiAgICAgICAgICAgIFwicGF0dGVyblwiOiBcIl5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibm9kZVBvcnRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgcG9ydCBvbiBlYWNoIG5vZGUgb24gd2hpY2ggdGhpcyBzZXJ2aWNlIGlzIGV4cG9zZWQgd2hlbiB0eXBlPU5vZGVQb3J0IG9yIExvYWRCYWxhbmNlcjsgdXN1YWxseSBhc3NpZ25lZCBieSB0aGUgc3lzdGVtOyBpZiBzcGVjaWZpZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicG9ydFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBwb3J0IG51bWJlciB0aGF0IGlzIGV4cG9zZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicHJvdG9jb2xcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBwcm90b2NvbCB1c2VkIGJ5IHRoaXMgcG9ydDsgbXVzdCBiZSBVRFAgb3IgVENQOyBUQ1AgaWYgdW5zcGVjaWZpZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidGFyZ2V0UG9ydFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc191dGlsX0ludE9yU3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkludE9yU3RyaW5nXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlUG9ydFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19TZXJ2aWNlU3BlY1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNsdXN0ZXJJUFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSVAgYWRkcmVzcyBvZiB0aGUgc2VydmljZTsgdXN1YWxseSBhc3NpZ25lZCBieSB0aGUgc3lzdGVtOyBpZiBzcGVjaWZpZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZGVwcmVjYXRlZFB1YmxpY0lQc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXByZWNhdGVkLiBleHRlcm5hbGx5IHZpc2libGUgSVBzIChlLmcuIGxvYWQgYmFsYW5jZXJzKSB0aGF0IHNob3VsZCBiZSBwcm94aWVkIHRvIHRoaXMgc2VydmljZVwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZC4gZXh0ZXJuYWxseSB2aXNpYmxlIElQcyAoZS5nLiBsb2FkIGJhbGFuY2VycykgdGhhdCBzaG91bGQgYmUgcHJveGllZCB0byB0aGlzIHNlcnZpY2VcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwb3J0YWxJUFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVwcmVjYXRlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwb3J0c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwb3J0cyBleHBvc2VkIGJ5IHRoZSBzZXJ2aWNlOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvdXNlci1ndWlkZS9zZXJ2aWNlcy5tZCN2aXJ0dWFsLWlwcy1hbmQtc2VydmljZS1wcm94aWVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZXJ2aWNlUG9ydFwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VQb3J0XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VsZWN0b3JcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhYmVsIGtleXMgYW5kIHZhbHVlcyB0aGF0IG11c3QgbWF0Y2ggaW4gb3JkZXIgdG8gcmVjZWl2ZSB0cmFmZmljIGZvciB0aGlzIHNlcnZpY2U7IGlmIGVtcHR5XCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYWJlbCBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBtdXN0IG1hdGNoIGluIG9yZGVyIHRvIHJlY2VpdmUgdHJhZmZpYyBmb3IgdGhpcyBzZXJ2aWNlOyBpZiBlbXB0eVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNlc3Npb25BZmZpbml0eVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZW5hYmxlIGNsaWVudCBJUCBiYXNlZCBzZXNzaW9uIGFmZmluaXR5OyBtdXN0IGJlIENsaWVudElQIG9yIE5vbmU7IGRlZmF1bHRzIHRvIE5vbmU7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL3NlcnZpY2VzLm1kI3ZpcnR1YWwtaXBzLWFuZC1zZXJ2aWNlLXByb3hpZXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHlwZSBvZiB0aGlzIHNlcnZpY2U7IG11c3QgYmUgQ2x1c3RlcklQXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlU3BlY1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19TZXJ2aWNlU3RhdHVzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibG9hZEJhbGFuY2VyXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xvYWRCYWxhbmNlclN0YXR1c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2FkQmFsYW5jZXJTdGF0dXNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VTdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU3RhdHVzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY29kZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInN1Z2dlc3RlZCBIVFRQIHJldHVybiBjb2RlIGZvciB0aGlzIHN0YXR1czsgMCBpZiBub3Qgc2V0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRldGFpbHNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU3RhdHVzRGV0YWlsc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TdGF0dXNEZXRhaWxzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJTdGF0dXNcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXNzYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhdHVzIG9mIHRoaXMgb3BlcmF0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYXNvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFjaGluZS1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB3aHkgdGhpcyBvcGVyYXRpb24gaXMgaW4gdGhlICdGYWlsdXJlJyBzdGF0dXM7IGlmIHRoaXMgdmFsdWUgaXMgZW1wdHkgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gYXZhaWxhYmxlOyBhIHJlYXNvbiBjbGFyaWZpZXMgYW4gSFRUUCBzdGF0dXMgY29kZSBidXQgZG9lcyBub3Qgb3ZlcnJpZGUgaXRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdGF0dXMgb2YgdGhlIG9wZXJhdGlvbjsgZWl0aGVyIFN1Y2Nlc3NcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19TdGF0dXNDYXVzZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImZpZWxkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmaWVsZCBvZiB0aGUgcmVzb3VyY2UgdGhhdCBoYXMgY2F1c2VkIHRoaXMgZXJyb3JcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWVzc2FnZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGNhdXNlIG9mIHRoZSBlcnJvcjsgdGhpcyBmaWVsZCBtYXkgYmUgcHJlc2VudGVkIGFzLWlzIHRvIGEgcmVhZGVyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlYXNvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFjaGluZS1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2Ugb2YgdGhlIGVycm9yOyBpZiB0aGlzIHZhbHVlIGlzIGVtcHR5IHRoZXJlIGlzIG5vIGluZm9ybWF0aW9uIGF2YWlsYWJsZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU3RhdHVzQ2F1c2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfU3RhdHVzRGV0YWlsc1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNhdXNlc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgQ2F1c2VzIGFycmF5IGluY2x1ZGVzIG1vcmUgZGV0YWlscyBhc3NvY2lhdGVkIHdpdGggdGhlIFN0YXR1c1JlYXNvbiBmYWlsdXJlOyBub3QgYWxsIFN0YXR1c1JlYXNvbnMgbWF5IHByb3ZpZGUgZGV0YWlsZWQgY2F1c2VzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TdGF0dXNDYXVzZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlN0YXR1c0NhdXNlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGtpbmQgYXR0cmlidXRlIG9mIHRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXR1cyBTdGF0dXNSZWFzb247IG9uIHNvbWUgb3BlcmF0aW9ucyBtYXkgZGlmZmVyIGZyb20gdGhlIHJlcXVlc3RlZCByZXNvdXJjZSBLaW5kOyBzZWUgaHR0cDovL3JlbGVhc2VzLms4cy5pby9IRUFEL2RvY3MvZGV2ZWwvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgU3RhdHVzUmVhc29uICh3aGVuIHRoZXJlIGlzIGEgc2luZ2xlIG5hbWUgd2hpY2ggY2FuIGJlIGRlc2NyaWJlZClcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmV0cnlBZnRlclNlY29uZHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBjbGllbnQgc2hvdWxkIGF0dGVtcHQgdG8gcmV0cnkgdGhpcyBvcGVyYXRpb25cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlN0YXR1c0RldGFpbHNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfVENQU29ja2V0QWN0aW9uXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwicG9ydFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc191dGlsX0ludE9yU3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkludE9yU3RyaW5nXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5UQ1BTb2NrZXRBY3Rpb25cIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfVHlwZU1ldGFcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2ZXJzaW9uIG9mIHRoZSBzY2hlbWEgdGhlIG9iamVjdCBzaG91bGQgaGF2ZTsgc2VlIGh0dHA6Ly9yZWxlYXNlcy5rOHMuaW8vSEVBRC9kb2NzL2RldmVsL2FwaS1jb252ZW50aW9ucy5tZCNyZXNvdXJjZXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwia2luZCBvZiBvYmplY3RcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlR5cGVNZXRhXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX1ZvbHVtZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImF3c0VsYXN0aWNCbG9ja1N0b3JlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0FXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkFXU0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNlcGhmc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19DZXBoRlNWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2VwaEZTVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImVtcHR5RGlyXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VtcHR5RGlyVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVtcHR5RGlyVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdjZVBlcnNpc3RlbnREaXNrXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdDRVBlcnNpc3RlbnREaXNrVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdpdFJlcG9cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR2l0UmVwb1ZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HaXRSZXBvVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdsdXN0ZXJmc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19HbHVzdGVyZnNWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2x1c3RlcmZzVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImhvc3RQYXRoXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0hvc3RQYXRoVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhvc3RQYXRoVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImlzY3NpXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0lTQ1NJVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLklTQ1NJVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX01ldGFkYXRhVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk1ldGFkYXRhVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInZvbHVtZSBuYW1lOyBtdXN0IGJlIGEgRE5TX0xBQkVMIGFuZCB1bmlxdWUgd2l0aGluIHRoZSBwb2Q7IHNlZSBodHRwOi8vcmVsZWFzZXMuazhzLmlvL0hFQUQvZG9jcy91c2VyLWd1aWRlL2lkZW50aWZpZXJzLm1kI25hbWVzXCIsXHJcbiAgICAgICAgICAgIFwibWF4TGVuZ3RoXCI6IDYzLFxyXG4gICAgICAgICAgICBcInBhdHRlcm5cIjogXCJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8kXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5mc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ORlNWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTkZTVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBlcnNpc3RlbnRWb2x1bWVDbGFpbVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJiZFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SQkRWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUkJEVm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNlY3JldFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRWb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0Vm9sdW1lU291cmNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Wb2x1bWVcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfVm9sdW1lTW91bnRcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJtb3VudFBhdGhcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInBhdGggd2l0aGluIHRoZSBjb250YWluZXIgYXQgd2hpY2ggdGhlIHZvbHVtZSBzaG91bGQgYmUgbW91bnRlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSB2b2x1bWUgdG8gbW91bnRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVhZE9ubHlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJtb3VudGVkIHJlYWQtb25seSBpZiB0cnVlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Wb2x1bWVNb3VudFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19Wb2x1bWVTb3VyY2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhd3NFbGFzdGljQmxvY2tTdG9yZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5BV1NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjZXBoZnNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ2VwaEZTVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNlcGhGU1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJlbXB0eURpclwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbXB0eURpclZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbXB0eURpclZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJnY2VQZXJzaXN0ZW50RGlza1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5HQ0VQZXJzaXN0ZW50RGlza1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJnaXRSZXBvXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0dpdFJlcG9Wb2x1bWVTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuR2l0UmVwb1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJnbHVzdGVyZnNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfR2x1c3RlcmZzVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkdsdXN0ZXJmc1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJob3N0UGF0aFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ib3N0UGF0aFZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpc2NzaVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19JU0NTSVZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JU0NTSVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19NZXRhZGF0YVZvbHVtZVNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5NZXRhZGF0YVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuZnNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTkZTVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5GU1ZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUGVyc2lzdGVudFZvbHVtZUNsYWltVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVDbGFpbVZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyYmRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUkJEVm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJCRFZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZWNyZXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VjcmV0Vm9sdW1lU291cmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3JldFZvbHVtZVNvdXJjZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuVm9sdW1lU291cmNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19BdXRoSW5mb1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNsaWVudC1jZXJ0aWZpY2F0ZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNsaWVudC1jZXJ0aWZpY2F0ZS1kYXRhXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY2xpZW50LWtleVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNsaWVudC1rZXktZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImV4dGVuc2lvbnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfTmFtZWRFeHRlbnNpb25cIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEV4dGVuc2lvblwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBhc3N3b3JkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidG9rZW5cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VybmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5BdXRoSW5mb1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfQ2x1c3RlclwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaS12ZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY2VydGlmaWNhdGUtYXV0aG9yaXR5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY2VydGlmaWNhdGUtYXV0aG9yaXR5LWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJleHRlbnNpb25zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkRXh0ZW5zaW9uXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRFeHRlbnNpb25cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpbnNlY3VyZS1za2lwLXRscy12ZXJpZnlcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2VydmVyXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNsdXN0ZXJcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX0NvbmZpZ1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjbHVzdGVyc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZENsdXN0ZXJcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZENsdXN0ZXJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjb250ZXh0c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX2NvbmZpZ19OYW1lZENvbnRleHRcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZENvbnRleHRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjdXJyZW50LWNvbnRleHRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJleHRlbnNpb25zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkRXh0ZW5zaW9uXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRFeHRlbnNpb25cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicHJlZmVyZW5jZXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX1ByZWZlcmVuY2VzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlByZWZlcmVuY2VzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVzZXJzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkQXV0aEluZm9cIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lZEF1dGhJbmZvXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbmZpZ1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfQ29udGV4dFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNsdXN0ZXJcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJleHRlbnNpb25zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkRXh0ZW5zaW9uXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRFeHRlbnNpb25cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VyXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbnRleHRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX05hbWVkQXV0aEluZm9cIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlclwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfQXV0aEluZm9cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQXV0aEluZm9cIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkQXV0aEluZm9cIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfY29uZmlnX05hbWVkQ2x1c3RlclwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNsdXN0ZXJcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX0NsdXN0ZXJcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ2x1c3RlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19jb25maWdfTmFtZWRDb250ZXh0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY29udGV4dFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19jb25maWdfQ29udGV4dFwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Db250ZXh0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRDb250ZXh0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19OYW1lZEV4dGVuc2lvblwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImV4dGVuc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVkRXh0ZW5zaW9uXCJcclxuICAgICAgfSxcclxuICAgICAgXCJrdWJlcm5ldGVzX2NvbmZpZ19QcmVmZXJlbmNlc1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNvbG9yc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJleHRlbnNpb25zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX05hbWVkRXh0ZW5zaW9uXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTmFtZWRFeHRlbnNpb25cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUHJlZmVyZW5jZXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfcmVzb3VyY2VfUXVhbnRpdHlcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJBbW91bnRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NwZXRlcl9pbmZfRGVjXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVjXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIkZvcm1hdFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5RdWFudGl0eVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIlJhd0pTT05cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICB9LFxyXG4gICAgICBcImt1YmVybmV0ZXNfdXRpbF9JbnRPclN0cmluZ1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcIkludFZhbFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJLaW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIlN0clZhbFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5JbnRPclN0cmluZ1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwia3ViZXJuZXRlc193YXRjaF9XYXRjaEV2ZW50XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwib2JqZWN0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0eXBlIG9mIHdhdGNoIGV2ZW50OyBtYXkgYmUgQURERURcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLldhdGNoRXZlbnRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQXV0aG9yaXphdGlvbkF0dHJpYnV0ZXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjb250ZW50XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5hbWVzcGFjZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZXNwYWNlIG9mIHRoZSBhY3Rpb24gYmVpbmcgcmVxdWVzdGVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlc291cmNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvbmUgb2YgdGhlIGV4aXN0aW5nIHJlc291cmNlIHR5cGVzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlc291cmNlTmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgcmVxdWVzdGVkIGZvciBhIGdldCBvciBkZWxldGVcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidmVyYlwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib25lIG9mIGdldFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5BdXRob3JpemF0aW9uQXR0cmlidXRlc1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJQb2xpY3lcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJsYXN0TW9kaWZpZWRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhc3QgdGltZSBhbnkgcGFydCBvZiB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyb2xlc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIHJvbGVzIGhlbGQgYnkgdGhpcyBwb2xpY3lcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX05hbWVkQ2x1c3RlclJvbGVcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclJvbGVcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0NsdXN0ZXJQb2xpY3lCaW5kaW5nXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJQb2xpY3lCaW5kaW5nXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibGFzdE1vZGlmaWVkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsYXN0IHRpbWUgYW55IHBhcnQgb2YgdGhlIG9iamVjdCB3YXMgY3JlYXRlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicG9saWN5UmVmXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicm9sZUJpbmRpbmdzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgcm9sZSBiaW5kaW5ncyBoZWxkIGJ5IHRoaXMgcG9saWN5XCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9OYW1lZENsdXN0ZXJSb2xlQmluZGluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRDbHVzdGVyUm9sZUJpbmRpbmdcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5QmluZGluZ1wiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5QmluZGluZ0xpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGNsdXN0ZXIgcG9saWN5IGJpbmRpbmdzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5QmluZGluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeUJpbmRpbmdcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQ2x1c3RlclBvbGljeUJpbmRpbmdMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeUJpbmRpbmdMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGNsdXN0ZXIgcG9saWNpZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJQb2xpY3lcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQ2x1c3RlclBvbGljeUxpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUG9saWN5TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkNsdXN0ZXJSb2xlXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJ1bGVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcG9saWN5IHJ1bGVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lSdWxlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lSdWxlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVCaW5kaW5nXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZ3JvdXBOYW1lc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbGwgdGhlIGdyb3VwcyBkaXJlY3RseSBib3VuZCB0byB0aGUgcm9sZVwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSBncm91cHMgZGlyZWN0bHkgYm91bmQgdG8gdGhlIHJvbGVcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQ2x1c3RlclJvbGVCaW5kaW5nXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJvbGVSZWZcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdWJqZWN0c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWZlcmVuY2VzIHRvIHN1YmplY3RzIGJvdW5kIHRvIHRoZSByb2xlLiAgT25seSBVc2VyXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VyTmFtZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHVzZXIgbmFtZXMgZGlyZWN0bHkgYm91bmQgdG8gdGhlIHJvbGVcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB1c2VyIG5hbWVzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVCaW5kaW5nXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGNsdXN0ZXIgcm9sZSBiaW5kaW5nc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVCaW5kaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZUJpbmRpbmdcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlQmluZGluZ0xpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Mb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJUeXBlTWV0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19UeXBlTWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5UeXBlTWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjb250ZW50XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3J1bnRpbWVfUmF3RXh0ZW5zaW9uXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdyb3Vwc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWVzcGFjZSBvZiB0aGUgYWN0aW9uIGJlaW5nIHJlcXVlc3RlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib25lIG9mIHRoZSBleGlzdGluZyByZXNvdXJjZSB0eXBlc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZU5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJlc291cmNlIGJlaW5nIHJlcXVlc3RlZCBmb3IgYSBnZXQgb3IgZGVsZXRlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVzZXJcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInZlcmJcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiBnZXRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3XCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX05hbWVkQ2x1c3RlclJvbGVcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBjbHVzdGVyIHJvbGVcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicm9sZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUm9sZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJSb2xlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkQ2x1c3RlclJvbGVcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fTmFtZWRDbHVzdGVyUm9sZUJpbmRpbmdcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBjbHVzdGVyIHJvbGUgYmluZGluZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyb2xlQmluZGluZ1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUm9sZUJpbmRpbmdcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DbHVzdGVyUm9sZUJpbmRpbmdcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRDbHVzdGVyUm9sZUJpbmRpbmdcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fTmFtZWRSb2xlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcm9sZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyb2xlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1JvbGVcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkUm9sZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9OYW1lZFJvbGVCaW5kaW5nXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcm9sZUJpbmRpbmdcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicm9sZUJpbmRpbmdcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZUJpbmRpbmdcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlQmluZGluZ1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5OYW1lZFJvbGVCaW5kaW5nXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1BvbGljeVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2xpY3lcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJsYXN0TW9kaWZpZWRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxhc3QgdGltZSB0aGF0IGFueSBwYXJ0IG9mIHRoZSBwb2xpY3kgd2FzIGNyZWF0ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJvbGVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJvbGVzIGhlbGQgYnkgdGhpcyBwb2xpY3lcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX05hbWVkUm9sZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRSb2xlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1BvbGljeUJpbmRpbmdcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUG9saWN5QmluZGluZ1wiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImxhc3RNb2RpZmllZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGFzdCB0aW1lIHRoYXQgYW55IHBhcnQgb2YgdGhlIG9iamVjdCB3YXMgY3JlYXRlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicG9saWN5UmVmXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicm9sZUJpbmRpbmdzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCByb2xlQmluZGluZ3MgaGVsZCBieSB0aGlzIHBvbGljeUJpbmRpbmdcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX05hbWVkUm9sZUJpbmRpbmdcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkUm9sZUJpbmRpbmdcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lCaW5kaW5nXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1BvbGljeUJpbmRpbmdMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBwb2xpY3kgYmluZGluZ3NcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1BvbGljeUJpbmRpbmdcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeUJpbmRpbmdcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUG9saWN5QmluZGluZ0xpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lCaW5kaW5nTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1BvbGljeUxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHBvbGljaWVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBvbGljeVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJQb2xpY3lMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19hdXRob3JpemF0aW9uX1BvbGljeVJ1bGVcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhdHRyaWJ1dGVSZXN0cmljdGlvbnNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibm9uUmVzb3VyY2VVUkxzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNldCBvZiBwYXJ0aWFsIHVybHMgdGhhdCBhIHVzZXIgc2hvdWxkIGhhdmUgYWNjZXNzIHRvLiAqcyBhcmUgYWxsb3dlZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic2V0IG9mIHBhcnRpYWwgdXJscyB0aGF0IGEgdXNlciBzaG91bGQgaGF2ZSBhY2Nlc3MgdG8uICpzIGFyZSBhbGxvd2VkXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVzb3VyY2VOYW1lc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbCB3aGl0ZSBsaXN0IG9mIG5hbWVzIHRoYXQgdGhlIHJ1bGUgYXBwbGllcyB0by4gIEFuIGVtcHR5IHNldCBtZWFucyB0aGF0IGV2ZXJ5dGhpbmcgaXMgYWxsb3dlZC5cIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsIHdoaXRlIGxpc3Qgb2YgbmFtZXMgdGhhdCB0aGUgcnVsZSBhcHBsaWVzIHRvLiAgQW4gZW1wdHkgc2V0IG1lYW5zIHRoYXQgZXZlcnl0aGluZyBpcyBhbGxvd2VkLlwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlc291cmNlc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlc291cmNlcyB0aGlzIHJ1bGUgYXBwbGllcyB0by4gICogcmVwcmVzZW50cyBhbGwgcmVzb3VyY2VzLlwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByZXNvdXJjZXMgdGhpcyBydWxlIGFwcGxpZXMgdG8uICAqIHJlcHJlc2VudHMgYWxsIHJlc291cmNlcy5cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ2ZXJic1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHZlcmJzIHRoYXQgYXBwbHkgdG8gQUxMIHRoZSByZXNvdXJjZUtpbmRzIGFuZCBhdHRyaWJ1dGVSZXN0cmljdGlvbnMgY29udGFpbmVkIGluIHRoaXMgcnVsZS4gIFRoZSB2ZXJiICogcmVwcmVzZW50cyBhbGwga2luZHMuXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHZlcmJzIHRoYXQgYXBwbHkgdG8gQUxMIHRoZSByZXNvdXJjZUtpbmRzIGFuZCBhdHRyaWJ1dGVSZXN0cmljdGlvbnMgY29udGFpbmVkIGluIHRoaXMgcnVsZS4gIFRoZSB2ZXJiICogcmVwcmVzZW50cyBhbGwga2luZHMuXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5UnVsZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Sb2xlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJvbGVcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicnVsZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSBydWxlcyBmb3IgdGhpcyByb2xlXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lSdWxlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lSdWxlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZVwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9Sb2xlQmluZGluZ1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdyb3VwTmFtZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSBncm91cHMgZGlyZWN0bHkgYm91bmQgdG8gdGhlIHJvbGVcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgZ3JvdXBzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJvbGVCaW5kaW5nXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJvbGVSZWZcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdWJqZWN0c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJyZWZlcmVuY2VzIHRvIHN1YmplY3RzIGJvdW5kIHRvIHRoZSByb2xlLiAgT25seSBVc2VyXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VyTmFtZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWxsIHRoZSB1c2VybmFtZXMgZGlyZWN0bHkgYm91bmQgdG8gdGhlIHJvbGVcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbCB0aGUgdXNlcm5hbWVzIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSByb2xlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZUJpbmRpbmdcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUm9sZUJpbmRpbmdMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByb2xlIGJpbmRpbmdzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlQmluZGluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZUJpbmRpbmdcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUm9sZUJpbmRpbmdMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZUJpbmRpbmdMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2F1dGhvcml6YXRpb25fUm9sZUxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJvbGVzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlJvbGVMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm9sZUxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9TdWJqZWN0QWNjZXNzUmV2aWV3XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY29udGVudFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19ydW50aW1lX1Jhd0V4dGVuc2lvblwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJncm91cHNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlN1YmplY3RBY2Nlc3NSZXZpZXdcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lc3BhY2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWVzcGFjZSBvZiB0aGUgYWN0aW9uIGJlaW5nIHJlcXVlc3RlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib25lIG9mIHRoZSBleGlzdGluZyByZXNvdXJjZSB0eXBlc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNvdXJjZU5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGhlIHJlc291cmNlIGJlaW5nIHJlcXVlc3RlZCBmb3IgYSBnZXQgb3IgZGVsZXRlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVzZXJcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInZlcmJcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9uZSBvZiBnZXRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU3ViamVjdEFjY2Vzc1Jldmlld1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYXV0aG9yaXphdGlvbl9TdWJqZWN0QWNjZXNzUmV2aWV3UmVzcG9uc2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhbGxvd2VkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHJ1ZSBpZiB0aGUgYWN0aW9uIHdvdWxkIGJlIGFsbG93ZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlN1YmplY3RBY2Nlc3NSZXZpZXdSZXNwb25zZVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5hbWVzcGFjZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWVzcGFjZSB1c2VkIGZvciB0aGUgYWNjZXNzIHJldmlld1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWFzb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlYXNvbiBpcyBvcHRpb25hbFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5TdWJqZWN0QWNjZXNzUmV2aWV3UmVzcG9uc2VcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkJ1aWxkXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNwZWNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkU3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTdGF0dXNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkQ29uZmlnXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkJ1aWxkQ29uZmlnXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNwZWNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkQ29uZmlnU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnU3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkQ29uZmlnU3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdTdGF0dXNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkQ29uZmlnTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgYnVpbGQgY29uZmlnc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkQ29uZmlnXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJCdWlsZENvbmZpZ0xpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ0xpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRDb25maWdTcGVjXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwib3V0cHV0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZE91dHB1dFwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkT3V0cHV0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlc291cmNlc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVJlcXVpcmVtZW50c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXZpc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlUmV2aXNpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VSZXZpc2lvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZXJ2aWNlQWNjb3VudFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgYWNjb3VudCB0byB1c2UgdG8gcnVuIHBvZHMgY3JlYXRlZCBieSB0aGUgYnVpbGRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic291cmNlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0cmF0ZWd5XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFN0cmF0ZWd5XCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTdHJhdGVneVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0cmlnZ2Vyc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXRlcm1pbmVzIGhvdyBuZXcgYnVpbGRzIGNhbiBiZSBsYXVuY2hlZCBmcm9tIGEgYnVpbGQgY29uZmlnLiAgaWYgbm8gdHJpZ2dlcnMgYXJlIGRlZmluZWRcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFRyaWdnZXJQb2xpY3lcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkVHJpZ2dlclBvbGljeVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkQ29uZmlnU3BlY1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRDb25maWdTdGF0dXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJsYXN0VmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZWQgdG8gaW5mb3JtIGFib3V0IG51bWJlciBvZiBsYXN0IHRyaWdnZXJlZCBidWlsZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZENvbmZpZ1N0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBidWlsZHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiQnVpbGRMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkT3V0cHV0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwicHVzaFNlY3JldFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0b1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkT3V0cHV0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9CdWlsZFJlcXVlc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJmcm9tXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkJ1aWxkUmVxdWVzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImxhc3RWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGFzdFZlcnNpb24gb2YgdGhlIEJ1aWxkQ29uZmlnIHRoYXQgdHJpZ2dlcmVkIHRoaXMgYnVpbGRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJldmlzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9Tb3VyY2VSZXZpc2lvblwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZVJldmlzaW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRyaWdnZXJlZEJ5SW1hZ2VcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFJlcXVlc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkU291cmNlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY29udGV4dERpclwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3BlY2lmaWVzIHN1Yi1kaXJlY3Rvcnkgd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgYXBwbGljYXRpb24gZXhpc3RzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdpdFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfR2l0QnVpbGRTb3VyY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5HaXRCdWlsZFNvdXJjZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzb3VyY2VTZWNyZXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidHlwZSBvZiBzb3VyY2UgY29udHJvbCBtYW5hZ2VtZW50IHN5c3RlbVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNvdXJjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfQnVpbGRTcGVjXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwib3V0cHV0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZE91dHB1dFwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkT3V0cHV0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlc291cmNlc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVJlcXVpcmVtZW50c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXZpc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlUmV2aXNpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VSZXZpc2lvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZXJ2aWNlQWNjb3VudFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgYWNjb3VudCB0byB1c2UgdG8gcnVuIHBvZHMgY3JlYXRlZCBieSB0aGUgYnVpbGRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic291cmNlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFNvdXJjZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU291cmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0cmF0ZWd5XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFN0cmF0ZWd5XCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRTdHJhdGVneVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFNwZWNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX0J1aWxkU3RhdHVzXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY2FuY2VsbGVkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZGVzY3JpYmVzIGlmIGEgY2FuY2VsaW5nIGV2ZW50IHdhcyB0cmlnZ2VyZWQgZm9yIHRoZSBidWlsZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjb21wbGV0aW9uVGltZXN0YW1wXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZXJ2ZXIgdGltZSB3aGVuIHRoZSBwb2QgcnVubmluZyB0aGlzIGJ1aWxkIHN0b3BwZWQgcnVubmluZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjb25maWdcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJkdXJhdGlvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFtb3VudCBvZiB0aW1lIHRoZSBidWlsZCBoYXMgYmVlbiBydW5uaW5nXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1lc3NhZ2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IHdoeSB0aGUgYnVpbGQgaGFzIHRoaXMgc3RhdHVzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBoYXNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvYnNlcnZlZCBwb2ludCBpbiB0aGUgYnVpbGQgbGlmZWN5Y2xlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXJ0VGltZXN0YW1wXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZXJ2ZXIgdGltZSB3aGVuIHRoaXMgYnVpbGQgc3RhcnRlZCBydW5uaW5nIGluIGEgcG9kXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkU3RhdHVzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9CdWlsZFN0cmF0ZWd5XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY3VzdG9tU3RyYXRlZ3lcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0N1c3RvbUJ1aWxkU3RyYXRlZ3lcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DdXN0b21CdWlsZFN0cmF0ZWd5XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRvY2tlclN0cmF0ZWd5XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9Eb2NrZXJCdWlsZFN0cmF0ZWd5XCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRG9ja2VyQnVpbGRTdHJhdGVneVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzb3VyY2VTdHJhdGVneVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlQnVpbGRTdHJhdGVneVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZUJ1aWxkU3RyYXRlZ3lcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaWRlbnRpZmllcyB0aGUgdHlwZSBvZiBidWlsZCBzdHJhdGVneVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFN0cmF0ZWd5XCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9CdWlsZFRyaWdnZXJQb2xpY3lcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJnZW5lcmljXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9XZWJIb29rVHJpZ2dlclwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLldlYkhvb2tUcmlnZ2VyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdpdGh1YlwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfV2ViSG9va1RyaWdnZXJcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5XZWJIb29rVHJpZ2dlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpbWFnZUNoYW5nZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfSW1hZ2VDaGFuZ2VUcmlnZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VDaGFuZ2VUcmlnZ2VyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInR5cGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInR5cGUgb2YgYnVpbGQgdHJpZ2dlclwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZFRyaWdnZXJQb2xpY3lcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX0N1c3RvbUJ1aWxkU3RyYXRlZ3lcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJlbnZcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgeW91IHdhbnQgdG8gcGFzcyBpbnRvIGEgYnVpbGRlciBjb250YWluZXJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VudlZhclwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImV4cG9zZURvY2tlclNvY2tldFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFsbG93IHJ1bm5pbmcgRG9ja2VyIGNvbW1hbmRzIChhbmQgYnVpbGQgRG9ja2VyIGltYWdlcykgZnJvbSBpbnNpZGUgdGhlIGNvbnRhaW5lclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJmb3JjZVB1bGxcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmb3JjZXMgcHVsbGluZyBvZiBidWlsZGVyIGltYWdlIGZyb20gcmVtb3RlIHJlZ2lzdHJ5IGlmIHRydWVcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZnJvbVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInB1bGxTZWNyZXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ3VzdG9tQnVpbGRTdHJhdGVneVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfYnVpbGRfRG9ja2VyQnVpbGRTdHJhdGVneVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImVudlwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB5b3Ugd2FudCB0byBwYXNzIGludG8gYSBidWlsZGVyIGNvbnRhaW5lclwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW52VmFyXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZm9yY2VQdWxsXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZm9yY2VzIHRoZSBzb3VyY2UgYnVpbGQgdG8gcHVsbCB0aGUgaW1hZ2UgaWYgdHJ1ZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJmcm9tXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibm9DYWNoZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlmIHRydWVcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicHVsbFNlY3JldFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Mb2NhbE9iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Mb2NhbE9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Eb2NrZXJCdWlsZFN0cmF0ZWd5XCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9HaXRCdWlsZFNvdXJjZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImh0dHBQcm94eVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic3BlY2lmaWVzIGEgaHR0cCBwcm94eSB0byBiZSB1c2VkIGR1cmluZyBnaXQgY2xvbmUgb3BlcmF0aW9uc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJodHRwc1Byb3h5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzcGVjaWZpZXMgYSBodHRwcyBwcm94eSB0byBiZSB1c2VkIGR1cmluZyBnaXQgY2xvbmUgb3BlcmF0aW9uc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWZcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImlkZW50aWZpZXMgdGhlIGJyYW5jaC90YWcvcmVmIHRvIGJ1aWxkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVyaVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicG9pbnRzIHRvIHRoZSBzb3VyY2UgdGhhdCB3aWxsIGJlIGJ1aWx0XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdpdEJ1aWxkU291cmNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9HaXRTb3VyY2VSZXZpc2lvblwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImF1dGhvclwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfU291cmNlQ29udHJvbFVzZXJcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Tb3VyY2VDb250cm9sVXNlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJjb21taXRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImhhc2ggaWRlbnRpZnlpbmcgYSBzcGVjaWZpYyBjb21taXRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY29tbWl0dGVyXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9Tb3VyY2VDb250cm9sVXNlclwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZUNvbnRyb2xVc2VyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1lc3NhZ2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRlc2NyaXB0aW9uIG9mIGEgc3BlY2lmaWMgY29tbWl0XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdpdFNvdXJjZVJldmlzaW9uXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9JbWFnZUNoYW5nZVRyaWdnZXJcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJmcm9tXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdFJlZmVyZW5jZVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibGFzdFRyaWdnZXJlZEltYWdlSURcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVzZWQgaW50ZXJuYWxseSB0byBzYXZlIGxhc3QgdXNlZCBpbWFnZSBJRCBmb3IgYnVpbGRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VDaGFuZ2VUcmlnZ2VyXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9Tb3VyY2VCdWlsZFN0cmF0ZWd5XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZW52XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHlvdSB3YW50IHRvIHBhc3MgaW50byBhIGJ1aWxkZXIgY29udGFpbmVyXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbnZWYXJcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbnZWYXJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJmb3JjZVB1bGxcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJmb3JjZXMgdGhlIHNvdXJjZSBidWlsZCB0byBwdWxsIHRoZSBpbWFnZSBpZiB0cnVlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImZyb21cIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpbmNyZW1lbnRhbFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZvcmNlcyB0aGUgc291cmNlIGJ1aWxkIHRvIGRvIGluY3JlbWVudGFsIGJ1aWxkcyBpZiB0cnVlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInB1bGxTZWNyZXRcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTG9jYWxPYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTG9jYWxPYmplY3RSZWZlcmVuY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2NyaXB0c1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibG9jYXRpb24gb2YgdGhlIHNvdXJjZSBzY3JpcHRzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZUJ1aWxkU3RyYXRlZ3lcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX1NvdXJjZUNvbnRyb2xVc2VyXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZW1haWxcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImUtbWFpbCBvZiB0aGUgc291cmNlIGNvbnRyb2wgdXNlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJuYW1lIG9mIHRoZSBzb3VyY2UgY29udHJvbCB1c2VyXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlNvdXJjZUNvbnRyb2xVc2VyXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19idWlsZF9Tb3VyY2VSZXZpc2lvblwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImdpdFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfR2l0U291cmNlUmV2aXNpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5HaXRTb3VyY2VSZXZpc2lvblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0eXBlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0eXBlIG9mIHRoZSBidWlsZCBzb3VyY2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU291cmNlUmV2aXNpb25cIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2J1aWxkX1dlYkhvb2tUcmlnZ2VyXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwic2VjcmV0XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzZWNyZXQgdXNlZCB0byB2YWxpZGF0ZSByZXF1ZXN0c1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5XZWJIb29rVHJpZ2dlclwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfZGVwbG95X0N1c3RvbURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNvbW1hbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWxseSBvdmVycmlkZXMgdGhlIGNvbnRhaW5lciBjb21tYW5kIChkZWZhdWx0IGlzIHNwZWNpZmllZCBieSB0aGUgaW1hZ2UpXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbGx5IG92ZXJyaWRlcyB0aGUgY29udGFpbmVyIGNvbW1hbmQgKGRlZmF1bHQgaXMgc3BlY2lmaWVkIGJ5IHRoZSBpbWFnZSlcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJlbnZpcm9ubWVudFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJlbnZpcm9ubWVudCB2YXJpYWJsZXMgcHJvdmlkZWQgdG8gdGhlIGRlcGxveW1lbnQgcHJvY2VzcyBjb250YWluZXJcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0VudlZhclwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkVudlZhclwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImltYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIERvY2tlciBpbWFnZSB3aGljaCBjYW4gY2Fycnkgb3V0IGEgZGVwbG95bWVudFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DdXN0b21EZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50Q2F1c2VcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJpbWFnZVRyaWdnZXJcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50Q2F1c2VJbWFnZVRyaWdnZXJcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q2F1c2VJbWFnZVRyaWdnZXJcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHR5cGUgb2YgdHJpZ2dlciB0aGF0IHJlc3VsdGVkIGluIGEgbmV3IGRlcGxveW1lbnRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENhdXNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudENhdXNlSW1hZ2VUcmlnZ2VyXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZnJvbVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDYXVzZUltYWdlVHJpZ2dlclwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiRGVwbG95bWVudENvbmZpZ1wiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzcGVjXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudENvbmZpZ1NwZWNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnU3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50Q29uZmlnU3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudENvbmZpZ1N0YXR1c1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudENvbmZpZ0xpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGxpc3Qgb2YgZGVwbG95bWVudCBjb25maWdzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDb25maWdcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiRGVwbG95bWVudENvbmZpZ0xpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19kZXBsb3lfRGVwbG95bWVudENvbmZpZ1NwZWNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJyZXBsaWNhc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBkZXNpcmVkIG51bWJlciBvZiByZXBsaWNhc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzZWxlY3RvclwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBsYWJlbCBxdWVyeSBvdmVyIHBvZHMgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHJlcGxpY2FzIGNvdW50XCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhIGxhYmVsIHF1ZXJ5IG92ZXIgcG9kcyB0aGF0IHNob3VsZCBtYXRjaCB0aGUgcmVwbGljYXMgY291bnRcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiamF2YS51dGlsLk1hcFxcdTAwM2NTdHJpbmcsU3RyaW5nXFx1MDAzZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdHJhdGVneVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0RlcGxveW1lbnRTdHJhdGVneVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRTdHJhdGVneVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0ZW1wbGF0ZVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19Qb2RUZW1wbGF0ZVNwZWNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUG9kVGVtcGxhdGVTcGVjXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRyaWdnZXJzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImhvdyBuZXcgZGVwbG95bWVudHMgYXJlIHRyaWdnZXJlZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50VHJpZ2dlclBvbGljeVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudFRyaWdnZXJQb2xpY3lcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50Q29uZmlnU3BlY1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRDb25maWdTdGF0dXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJkZXRhaWxzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudERldGFpbHNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5EZXBsb3ltZW50RGV0YWlsc1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJsYXRlc3RWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY3VycmVudCBkZXBsb3ltZW50IGlzIG91dCBvZiBzeW5jXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDb25maWdTdGF0dXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50RGV0YWlsc1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNhdXNlc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJleHRlbmRlZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhbGwgdGhlIGNhdXNlcyBmb3IgY3JlYXRpbmcgYSBuZXcgZGVwbG95bWVudFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9EZXBsb3ltZW50Q2F1c2VcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDYXVzZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1lc3NhZ2VcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImEgdXNlciBzcGVjaWZpZWQgY2hhbmdlIG1lc3NhZ2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudERldGFpbHNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50U3RyYXRlZ3lcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJjdXN0b21QYXJhbXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9DdXN0b21EZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5DdXN0b21EZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVjcmVhdGVQYXJhbXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9SZWNyZWF0ZURlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJlY3JlYXRlRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlc291cmNlc1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXNvdXJjZVJlcXVpcmVtZW50c1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVJlcXVpcmVtZW50c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyb2xsaW5nUGFyYW1zXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfUm9sbGluZ0RlcGxveW1lbnRTdHJhdGVneVBhcmFtc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGxpbmdEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIG5hbWUgb2YgYSBkZXBsb3ltZW50IHN0cmF0ZWd5XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRTdHJhdGVneVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfZGVwbG95X0RlcGxveW1lbnRUcmlnZ2VySW1hZ2VDaGFuZ2VQYXJhbXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhdXRvbWF0aWNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ3aGV0aGVyIGRldGVjdGlvbiBvZiBhIG5ldyB0YWcgdmFsdWUgc2hvdWxkIHRyaWdnZXIgYSBkZXBsb3ltZW50XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNvbnRhaW5lck5hbWVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlc3RyaWN0cyB0YWcgdXBkYXRlcyB0byBhIHNldCBvZiBjb250YWluZXIgbmFtZXMgaW4gdGhlIHBvZFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVzdHJpY3RzIHRhZyB1cGRhdGVzIHRvIGEgc2V0IG9mIGNvbnRhaW5lciBuYW1lcyBpbiB0aGUgcG9kXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZnJvbVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImxhc3RUcmlnZ2VyZWRJbWFnZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGxhc3QgaW1hZ2UgdG8gYmUgdHJpZ2dlcmVkXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRUcmlnZ2VySW1hZ2VDaGFuZ2VQYXJhbXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2RlcGxveV9EZXBsb3ltZW50VHJpZ2dlclBvbGljeVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImltYWdlQ2hhbmdlUGFyYW1zXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudFRyaWdnZXJJbWFnZUNoYW5nZVBhcmFtc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRUcmlnZ2VySW1hZ2VDaGFuZ2VQYXJhbXNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidHlwZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHR5cGUgb2YgdGhlIHRyaWdnZXJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRGVwbG95bWVudFRyaWdnZXJQb2xpY3lcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2RlcGxveV9FeGVjTmV3UG9kSG9va1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNvbW1hbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGhvb2sgY29tbWFuZCBhbmQgaXRzIGFyZ3VtZW50c1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIGhvb2sgY29tbWFuZCBhbmQgaXRzIGFyZ3VtZW50c1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNvbnRhaW5lck5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSBuYW1lIG9mIGEgY29udGFpbmVyIGZyb20gdGhlIHBvZCB0ZW1wbGF0ZSB3aG9zZSBpbWFnZSB3aWxsIGJlIHVzZWQgZm9yIHRoZSBob29rIGNvbnRhaW5lclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJlbnZcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZW52aXJvbm1lbnQgdmFyaWFibGVzIHByb3ZpZGVkIHRvIHRoZSBob29rIGNvbnRhaW5lclwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW52VmFyXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRXhlY05ld1BvZEhvb2tcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2RlcGxveV9MaWZlY3ljbGVIb29rXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZXhlY05ld1BvZFwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfZGVwbG95X0V4ZWNOZXdQb2RIb29rXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuRXhlY05ld1BvZEhvb2tcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZmFpbHVyZVBvbGljeVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwid2hhdCBhY3Rpb24gdG8gdGFrZSBpZiB0aGUgaG9vayBmYWlsc1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5MaWZlY3ljbGVIb29rXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19kZXBsb3lfUmVjcmVhdGVEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJwb3N0XCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfTGlmZWN5Y2xlSG9va1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkxpZmVjeWNsZUhvb2tcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicHJlXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfTGlmZWN5Y2xlSG9va1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkxpZmVjeWNsZUhvb2tcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUmVjcmVhdGVEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2RlcGxveV9Sb2xsaW5nRGVwbG95bWVudFN0cmF0ZWd5UGFyYW1zXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiaW50ZXJ2YWxTZWNvbmRzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHRpbWUgdG8gd2FpdCBiZXR3ZWVuIHBvbGxpbmcgZGVwbG95bWVudCBzdGF0dXMgYWZ0ZXIgdXBkYXRlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBvc3RcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9MaWZlY3ljbGVIb29rXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTGlmZWN5Y2xlSG9va1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJwcmVcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2RlcGxveV9MaWZlY3ljbGVIb29rXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTGlmZWN5Y2xlSG9va1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0aW1lb3V0U2Vjb25kc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0aW1lIHRvIHdhaXQgZm9yIHVwZGF0ZXMgYmVmb3JlIGdpdmluZyB1cFwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1cGRhdGVQZXJjZW50XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidGhlIHBlcmNlbnRhZ2Ugb2YgcmVwbGljYXMgdG8gc2NhbGUgdXAgb3IgZG93biBlYWNoIGludGVydmFsIChuZWdhdGl2ZSB2YWx1ZSBzd2l0Y2hlcyBzY2FsZSBvcmRlciB0byBkb3duL3VwIGluc3RlYWQgb2YgdXAvZG93bilcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXBkYXRlUGVyaW9kU2Vjb25kc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInRoZSB0aW1lIHRvIHdhaXQgYmV0d2VlbiBpbmRpdmlkdWFsIHBvZCB1cGRhdGVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJMb25nXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGxpbmdEZXBsb3ltZW50U3RyYXRlZ3lQYXJhbXNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2ltYWdlX0ltYWdlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZG9ja2VySW1hZ2VNYW5pZmVzdFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmF3IEpTT04gb2YgdGhlIG1hbmlmZXN0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRvY2tlckltYWdlTWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZG9ja2VySW1hZ2VNZXRhZGF0YVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImNvbnZleXMgdmVyc2lvbiBvZiB0aGUgb2JqZWN0XCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRvY2tlckltYWdlUmVmZXJlbmNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCB0byBwdWxsIHRoaXMgaW1hZ2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkltYWdlXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19pbWFnZV9JbWFnZUxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGltYWdlIG9iamVjdHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9JbWFnZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiSW1hZ2VMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2ltYWdlX0ltYWdlU3RyZWFtXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIkltYWdlU3RyZWFtXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNwZWNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX0ltYWdlU3RyZWFtU3BlY1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtU3BlY1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2ltYWdlX0ltYWdlU3RyZWFtU3RhdHVzXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VTdHJlYW1TdGF0dXNcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VTdHJlYW1cIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2ltYWdlX0ltYWdlU3RyZWFtTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgaW1hZ2Ugc3RyZWFtIG9iamVjdHNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9JbWFnZVN0cmVhbVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VTdHJlYW1cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiSW1hZ2VTdHJlYW1MaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VTdHJlYW1MaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX2ltYWdlX0ltYWdlU3RyZWFtU3BlY1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImRvY2tlckltYWdlUmVwb3NpdG9yeVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWwgZmllbGQgaWYgc3BlY2lmaWVkIHRoaXMgc3RyZWFtIGlzIGJhY2tlZCBieSBhIERvY2tlciByZXBvc2l0b3J5IG9uIHRoaXMgc2VydmVyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInRhZ3NcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibWFwIGFyYml0cmFyeSBzdHJpbmcgdmFsdWVzIHRvIHNwZWNpZmljIGltYWdlIGxvY2F0b3JzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfTmFtZWRUYWdSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkVGFnUmVmZXJlbmNlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSW1hZ2VTdHJlYW1TcGVjXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19pbWFnZV9JbWFnZVN0cmVhbVN0YXR1c1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImRvY2tlckltYWdlUmVwb3NpdG9yeVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVwcmVzZW50cyB0aGUgZWZmZWN0aXZlIGxvY2F0aW9uIHRoaXMgc3RyZWFtIG1heSBiZSBhY2Nlc3NlZCBhdFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0YWdzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImhpc3RvcmljYWwgcmVjb3JkIG9mIGltYWdlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCB0YWdcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9OYW1lZFRhZ0V2ZW50TGlzdFwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuTmFtZWRUYWdFdmVudExpc3RcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZVN0cmVhbVN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfaW1hZ2VfTmFtZWRUYWdFdmVudExpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHRhZyBldmVudHMgcmVsYXRlZCB0byB0aGUgdGFnXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfVGFnRXZlbnRcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRhZ0V2ZW50XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidGFnXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgdGFnXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkVGFnRXZlbnRMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19pbWFnZV9OYW1lZFRhZ1JlZmVyZW5jZVwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFubm90YXRpb25zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbm5vdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggaW1hZ2VzIHVzaW5nIHRoaXMgdGFnXCIsXHJcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbm5vdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggaW1hZ2VzIHVzaW5nIHRoaXMgdGFnXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZnJvbVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm5hbWUgb2YgdGFnXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk5hbWVkVGFnUmVmZXJlbmNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJvc19pbWFnZV9UYWdFdmVudFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImNyZWF0ZWRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIndoZW4gdGhlIGV2ZW50IHdhcyBjcmVhdGVkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRvY2tlckltYWdlUmVmZXJlbmNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHVsbCB0aGlzIGltYWdlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImltYWdlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ0aGUgaW1hZ2VcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGFnRXZlbnRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX29hdXRoX09BdXRoQWNjZXNzVG9rZW5cIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJhdXRob3JpemVUb2tlblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiY29udGFpbnMgdGhlIHRva2VuIHRoYXQgYXV0aG9yaXplZCB0aGlzIHRva2VuXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNsaWVudE5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmVyZW5jZXMgdGhlIGNsaWVudCB0aGF0IGNyZWF0ZWQgdGhpcyB0b2tlblwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJleHBpcmVzSW5cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpcyB0aGUgc2Vjb25kcyBmcm9tIGNyZWF0aW9uIHRpbWUgYmVmb3JlIHRoaXMgdG9rZW4gZXhwaXJlc1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiTG9uZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiT0F1dGhBY2Nlc3NUb2tlblwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZWRpcmVjdFVSSVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVkaXJlY3Rpb24gVVJJIGFzc29jaWF0ZWQgd2l0aCB0aGUgdG9rZW5cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVmcmVzaFRva2VuXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbCB2YWx1ZSBieSB3aGljaCB0aGlzIHRva2VuIGNhbiBiZSByZW5ld2VkXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNjb3Blc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlcXVlc3RlZCBzY29wZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVxdWVzdGVkIHNjb3Blc1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVzZXJOYW1lXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1c2VyIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdG9rZW5cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwidXNlclVJRFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlIFVJRCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0b2tlblwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEFjY2Vzc1Rva2VuXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19vYXV0aF9PQXV0aEFjY2Vzc1Rva2VuTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygb2F1dGggYWNjZXNzIHRva2Vuc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX29hdXRoX09BdXRoQWNjZXNzVG9rZW5cIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQWNjZXNzVG9rZW5cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiT0F1dGhBY2Nlc3NUb2tlbkxpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEFjY2Vzc1Rva2VuTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19vYXV0aF9PQXV0aEF1dGhvcml6ZVRva2VuXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiY2xpZW50TmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicmVmZXJlbmNlcyB0aGUgY2xpZW50IHRoYXQgY3JlYXRlZCB0aGlzIHRva2VuXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImV4cGlyZXNJblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInNlY29uZHMgZnJvbSBjcmVhdGlvbiB0aW1lIGJlZm9yZSB0aGlzIHRva2VuIGV4cGlyZXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcIkxvbmdcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQXV0aG9yaXplVG9rZW5cIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicmVkaXJlY3RVUklcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZGlyZWN0aW9uIFVSSSBhc3NvY2lhdGVkIHdpdGggdGhlIHRva2VuXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNjb3Blc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHJlcXVlc3RlZCBzY29wZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgcmVxdWVzdGVkIHNjb3Blc1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXRlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJzdGF0ZSBkYXRhIGZyb20gcmVxdWVzdFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VyTmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidXNlciBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRva2VuXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVzZXJVSURcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZSBVSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdG9rZW4uICB1c2VyVUlEIGFuZCB1c2VyTmFtZSBtdXN0IGJvdGggbWF0Y2ggZm9yIHRoaXMgdG9rZW4gdG8gYmUgdmFsaWRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBdXRob3JpemVUb2tlblwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhBdXRob3JpemVUb2tlbkxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIG9hdXRoIGF1dGhvcml6YXRpb24gdG9rZW5zXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhBdXRob3JpemVUb2tlblwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBdXRob3JpemVUb2tlblwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aEF1dGhvcml6ZVRva2VuTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX29hdXRoX09BdXRoQ2xpZW50XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQ2xpZW50XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlZGlyZWN0VVJJc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ2YWxpZCByZWRpcmVjdGlvbiBVUklzIGFzc29jaWF0ZWQgd2l0aCBhIGNsaWVudFwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidmFsaWQgcmVkaXJlY3Rpb24gVVJJcyBhc3NvY2lhdGVkIHdpdGggYSBjbGllbnRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJyZXNwb25kV2l0aENoYWxsZW5nZXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbmRpY2F0ZXMgd2hldGhlciB0aGUgY2xpZW50IHdhbnRzIGF1dGhlbnRpY2F0aW9uIG5lZWRlZCByZXNwb25zZXMgbWFkZSBpbiB0aGUgZm9ybSBvZiBjaGFsbGVuZ2VzIGluc3RlYWQgb2YgcmVkaXJlY3RzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInNlY3JldFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidW5pcXVlIHNlY3JldCBhc3NvY2lhdGVkIHdpdGggYSBjbGllbnRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX29hdXRoX09BdXRoQ2xpZW50QXV0aG9yaXphdGlvblwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNsaWVudE5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInJlZmVyZW5jZXMgdGhlIGNsaWVudCB0aGF0IGNyZWF0ZWQgdGhpcyBhdXRob3JpemF0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJPQXV0aENsaWVudEF1dGhvcml6YXRpb25cIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic2NvcGVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZ3JhbnRlZCBzY29wZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZ3JhbnRlZCBzY29wZXNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VyTmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwidXNlciBuYW1lIHRoYXQgYXV0aG9yaXplZCB0aGlzIGNsaWVudFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2VyVUlEXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ1bmlxdWUgVUlEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGF1dGhvcml6YXRpb24uIHVzZXJVSUQgYW5kIHVzZXJOYW1lIG11c3QgYm90aCBtYXRjaCBmb3IgdGhpcyBhdXRob3JpemF0aW9uIHRvIGJlIHZhbGlkXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvblwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhDbGllbnRBdXRob3JpemF0aW9uTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygb2F1dGggY2xpZW50IGF1dGhvcml6YXRpb25zXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhDbGllbnRBdXRob3JpemF0aW9uXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiT0F1dGhDbGllbnRBdXRob3JpemF0aW9uTGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvbkxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3Nfb2F1dGhfT0F1dGhDbGllbnRMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBvYXV0aCBjbGllbnRzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhDbGllbnRcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIk9BdXRoQ2xpZW50TGlzdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX0xpc3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkxpc3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19wcm9qZWN0X1Byb2plY3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUHJvamVjdFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJzcGVjXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19wcm9qZWN0X1Byb2plY3RTcGVjXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFNwZWNcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3RhdHVzXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19wcm9qZWN0X1Byb2plY3RTdGF0dXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qcm9qZWN0U3RhdHVzXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3Byb2plY3RfUHJvamVjdExpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHByb2plY3RzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfcHJvamVjdF9Qcm9qZWN0XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qcm9qZWN0XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlByb2plY3RMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdExpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfcHJvamVjdF9Qcm9qZWN0UmVxdWVzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJkZXNjcmlwdGlvbiB0byBhcHBseSB0byBhIHByb2plY3RcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZGlzcGxheU5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImRpc3BsYXkgbmFtZSB0byBhcHBseSB0byBhIHByb2plY3RcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlByb2plY3RSZXF1ZXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RSZXF1ZXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc19wcm9qZWN0X1Byb2plY3RTcGVjXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZmluYWxpemVyc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbiBvcGFxdWUgbGlzdCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGVtcHR5IHRvIHBlcm1hbmVudGx5IHJlbW92ZSBvYmplY3QgZnJvbSBzdG9yYWdlXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJhbiBvcGFxdWUgbGlzdCBvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIGVtcHR5IHRvIHBlcm1hbmVudGx5IHJlbW92ZSBvYmplY3QgZnJvbSBzdG9yYWdlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFNwZWNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3Byb2plY3RfUHJvamVjdFN0YXR1c1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcInBoYXNlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwaGFzZSBpcyB0aGUgY3VycmVudCBsaWZlY3ljbGUgcGhhc2Ugb2YgdGhlIHByb2plY3RcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3Nfcm91dGVfUm91dGVcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUm91dGVcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwic3BlY1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfcm91dGVfUm91dGVTcGVjXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVTcGVjXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInN0YXR1c1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfcm91dGVfUm91dGVTdGF0dXNcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb3V0ZVN0YXR1c1wiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb3V0ZVwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3Nfcm91dGVfUm91dGVMaXN0XCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiByb3V0ZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19yb3V0ZV9Sb3V0ZVwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiUm91dGVMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3JvdXRlX1JvdXRlU3BlY1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImhvc3RcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBhbGlhcy9kbnMgdGhhdCBwb2ludHMgdG8gdGhlIHNlcnZpY2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwicGF0aFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWw6IHBhdGggdGhhdCB0aGUgcm91dGVyIHdhdGNoZXMgdG8gcm91dGUgdHJhZmZpYyB0byB0aGUgc2VydmljZVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0bHNcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3JvdXRlX1RMU0NvbmZpZ1wiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRMU0NvbmZpZ1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0b1wiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RSZWZlcmVuY2VcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0UmVmZXJlbmNlXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvdXRlU3BlY1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3Nfcm91dGVfUm91dGVTdGF0dXNcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb3V0ZVN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3Nfcm91dGVfVExTQ29uZmlnXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiY2FDZXJ0aWZpY2F0ZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwicHJvdmlkZXMgdGhlIGNlcnQgYXV0aG9yaXR5IGNlcnRpZmljYXRlIGNvbnRlbnRzXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImNlcnRpZmljYXRlXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwcm92aWRlcyBjZXJ0aWZpY2F0ZSBjb250ZW50c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJkZXN0aW5hdGlvbkNBQ2VydGlmaWNhdGVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInByb3ZpZGVzIHRoZSBjb250ZW50cyBvZiB0aGUgY2EgY2VydGlmaWNhdGUgb2YgdGhlIGZpbmFsIGRlc3RpbmF0aW9uLiAgV2hlbiB1c2luZyByZS1lbmNyeXB0IHRlcm1pbmF0aW9uIHRoaXMgZmlsZSBzaG91bGQgYmUgcHJvdmlkZWQgaW4gb3JkZXIgdG8gaGF2ZSByb3V0ZXJzIHVzZSBpdCBmb3IgaGVhbHRoIGNoZWNrcyBvbiB0aGUgc2VjdXJlIGNvbm5lY3Rpb25cIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2V5XCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJwcm92aWRlcyBrZXkgZmlsZSBjb250ZW50c1wiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ0ZXJtaW5hdGlvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW5kaWNhdGVzIHRlcm1pbmF0aW9uIHR5cGUuICBpZiBub3Qgc2V0XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRMU0NvbmZpZ1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfdGVtcGxhdGVfUGFyYW1ldGVyXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBkZXNjcmliZXMgdGhlIHBhcmFtZXRlclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJmcm9tXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJpbnB1dCB2YWx1ZSBmb3IgdGhlIGdlbmVyYXRvclwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJnZW5lcmF0ZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWw6IGdlbmVyYXRlIHNwZWNpZmllcyB0aGUgZ2VuZXJhdG9yIHRvIGJlIHVzZWQgdG8gZ2VuZXJhdGUgcmFuZG9tIHN0cmluZyBmcm9tIGFuIGlucHV0IHZhbHVlIHNwZWNpZmllZCBieSB0aGUgZnJvbSBmaWVsZC4gIHRoZSByZXN1bHQgc3RyaW5nIGlzIHN0b3JlZCBpbiB0aGUgdmFsdWUgZmllbGQuIGlmIG5vdCBzcGVjaWZpZWRcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibmFtZSBvZiB0aGUgcGFyYW1ldGVyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInJlcXVpcmVkXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiaW5kaWNhdGVzIHRoZSBwYXJhbWV0ZXIgbXVzdCBoYXZlIGEgbm9uLWVtcHR5IHZhbHVlIG9yIGJlIGdlbmVyYXRlZFwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ2YWx1ZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWw6IGhvbGRzIHRoZSBwYXJhbWV0ZXIgZGF0YS4gIGlmIHNwZWNpZmllZFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5QYXJhbWV0ZXJcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3RlbXBsYXRlX1RlbXBsYXRlXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlRlbXBsYXRlXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibGFiZWxzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJvcHRpb25hbDogbGlzdCBvZiBsYWJsZXMgdGhhdCBhcmUgYXBwbGllZCB0byBldmVyeSBvYmplY3QgZHVyaW5nIHRoZSB0ZW1wbGF0ZSB0byBjb25maWcgdHJhbnNmb3JtYXRpb25cIixcclxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9wdGlvbmFsOiBsaXN0IG9mIGxhYmxlcyB0aGF0IGFyZSBhcHBsaWVkIHRvIGV2ZXJ5IG9iamVjdCBkdXJpbmcgdGhlIHRlbXBsYXRlIHRvIGNvbmZpZyB0cmFuc2Zvcm1hdGlvblwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJqYXZhLnV0aWwuTWFwXFx1MDAzY1N0cmluZyxTdHJpbmdcXHUwMDNlXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJvYmplY3RzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2Ygb2JqZWN0cyB0byBpbmNsdWRlIGluIHRoZSB0ZW1wbGF0ZVwiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfcnVudGltZV9SYXdFeHRlbnNpb25cIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5IYXNNZXRhZGF0YVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInBhcmFtZXRlcnNcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwib3B0aW9uYWw6IGxpc3Qgb2YgcGFyYW1ldGVycyB1c2VkIGR1cmluZyB0ZW1wbGF0ZSB0byBjb25maWcgdHJhbnNmb3JtYXRpb25cIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc190ZW1wbGF0ZV9QYXJhbWV0ZXJcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlBhcmFtZXRlclwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlRlbXBsYXRlXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc190ZW1wbGF0ZV9UZW1wbGF0ZUxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHRlbXBsYXRlc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3RlbXBsYXRlX1RlbXBsYXRlXCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5UZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJUZW1wbGF0ZUxpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5UZW1wbGF0ZUxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfdXNlcl9Hcm91cFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJHcm91cFwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIm1ldGFkYXRhXCI6IHtcclxuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX09iamVjdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJ1c2Vyc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIHVzZXJzIGluIHRoaXMgZ3JvdXBcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgdXNlcnMgaW4gdGhpcyBncm91cFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdyb3VwXCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuSGFzTWV0YWRhdGFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJvc191c2VyX0dyb3VwTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgZ3JvdXBzXCIsXHJcbiAgICAgICAgICAgIFwiaXRlbXNcIjoge1xyXG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdXNlcl9Hcm91cFwiLFxyXG4gICAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR3JvdXBcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiR3JvdXBMaXN0XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdE1ldGFcIixcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuTGlzdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuR3JvdXBMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhSW50ZXJmYWNlc1wiOiBbXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlXCIsXHJcbiAgICAgICAgICBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuS3ViZXJuZXRlc1Jlc291cmNlTGlzdFwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICBcIm9zX3VzZXJfSWRlbnRpdHlcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJleHRyYVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiZXh0cmEgaW5mb3JtYXRpb24gZm9yIHRoaXMgaWRlbnRpdHlcIixcclxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImV4dHJhIGluZm9ybWF0aW9uIGZvciB0aGlzIGlkZW50aXR5XCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImphdmEudXRpbC5NYXBcXHUwMDNjU3RyaW5nLFN0cmluZ1xcdTAwM2VcIlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIklkZW50aXR5XCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwibWV0YWRhdGFcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5PYmplY3RNZXRhXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInByb3ZpZGVyTmFtZVwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwic291cmNlIG9mIGlkZW50aXR5IGluZm9ybWF0aW9uXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInByb3ZpZGVyVXNlck5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcInVuaXF1ZWx5IHJlcHJlc2VudHMgdGhpcyBpZGVudGl0eSBpbiB0aGUgc2NvcGUgb2YgdGhlIHByb3ZpZGVyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcInVzZXJcIjoge1xyXG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfT2JqZWN0UmVmZXJlbmNlXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdFJlZmVyZW5jZVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JZGVudGl0eVwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfdXNlcl9JZGVudGl0eUxpc3RcIjoge1xyXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxyXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgXCJhcGlWZXJzaW9uXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwidjFcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImVudW1cIjogW1xyXG4gICAgICAgICAgICAgIFwidjFcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGlkZW50aXRpZXNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX0lkZW50aXR5XCIsXHJcbiAgICAgICAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JZGVudGl0eVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImtpbmRcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJJZGVudGl0eUxpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JZGVudGl0eUxpc3RcIixcclxuICAgICAgICBcImphdmFJbnRlcmZhY2VzXCI6IFtcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VcIixcclxuICAgICAgICAgIFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5LdWJlcm5ldGVzUmVzb3VyY2VMaXN0XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfdXNlcl9Vc2VyXCI6IHtcclxuICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcclxuICAgICAgICAgIFwiYXBpVmVyc2lvblwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcInYxXCIsXHJcbiAgICAgICAgICAgIFwicmVxdWlyZWRcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJlbnVtXCI6IFtcclxuICAgICAgICAgICAgICBcInYxXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwiZnVsbE5hbWVcIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImZ1bGwgbmFtZSBvZiB1c2VyXCJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcImdyb3Vwc1wiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJsaXN0IG9mIGdyb3Vwc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBncm91cHNcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJpZGVudGl0aWVzXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgaWRlbnRpdGllc1wiLFxyXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibGlzdCBvZiBpZGVudGl0aWVzXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFwia2luZFwiOiB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxyXG4gICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBcIlVzZXJcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk9iamVjdE1ldGFcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB0cnVlLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVXNlclwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkhhc01ldGFkYXRhXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIFwib3NfdXNlcl9Vc2VyTGlzdFwiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICBcImFwaVZlcnNpb25cIjoge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJ2MVwiLFxyXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZW51bVwiOiBbXHJcbiAgICAgICAgICAgICAgXCJ2MVwiXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcclxuICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcImxpc3Qgb2YgdXNlcnNcIixcclxuICAgICAgICAgICAgXCJpdGVtc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX1VzZXJcIixcclxuICAgICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlVzZXJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJraW5kXCI6IHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IFwiVXNlckxpc3RcIixcclxuICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgXCJtZXRhZGF0YVwiOiB7XHJcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19MaXN0TWV0YVwiLFxyXG4gICAgICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5MaXN0TWV0YVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWUsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Vc2VyTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YUludGVyZmFjZXNcIjogW1xyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZVwiLFxyXG4gICAgICAgICAgXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkt1YmVybmV0ZXNSZXNvdXJjZUxpc3RcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgXCJzcGV0ZXJfaW5mX0RlY1wiOiB7XHJcbiAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXHJcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogdHJ1ZSxcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlY1wiXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBcInR5cGVcIjogXCJvYmplY3RcIixcclxuICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgIFwiQmFzZUt1YmVybmV0ZXNMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkJhc2VLdWJlcm5ldGVzTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiQnVpbGRDb25maWdMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2J1aWxkX0J1aWxkQ29uZmlnTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQnVpbGRDb25maWdMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJCdWlsZExpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYnVpbGRfQnVpbGRMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5CdWlsZExpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkJ1aWxkUmVxdWVzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19idWlsZF9CdWlsZFJlcXVlc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkJ1aWxkUmVxdWVzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiQ2x1c3RlclBvbGljeVwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJQb2xpY3lcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkNsdXN0ZXJQb2xpY3lCaW5kaW5nXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclBvbGljeUJpbmRpbmdcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lCaW5kaW5nXCJcclxuICAgICAgfSxcclxuICAgICAgXCJDbHVzdGVyUG9saWN5QmluZGluZ0xpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5QmluZGluZ0xpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkNsdXN0ZXJQb2xpY3lCaW5kaW5nTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiQ2x1c3RlclBvbGljeUxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9DbHVzdGVyUG9saWN5TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclBvbGljeUxpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkNsdXN0ZXJSb2xlQmluZGluZ1wiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX0NsdXN0ZXJSb2xlQmluZGluZ1wiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVCaW5kaW5nXCJcclxuICAgICAgfSxcclxuICAgICAgXCJDbHVzdGVyUm9sZUJpbmRpbmdMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuQ2x1c3RlclJvbGVCaW5kaW5nTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiQ29uZmlnXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfY29uZmlnX0NvbmZpZ1wiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLkNvbmZpZ1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiQ29udGFpbmVyU3RhdHVzXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfQ29udGFpbmVyU3RhdHVzXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuQ29udGFpbmVyU3RhdHVzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJEZXBsb3ltZW50Q29uZmlnTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19kZXBsb3lfRGVwbG95bWVudENvbmZpZ0xpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkRlcGxveW1lbnRDb25maWdMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJFbmRwb2ludHNcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbmRwb2ludHNcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FbmRwb2ludHNcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkVuZHBvaW50c0xpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FbmRwb2ludHNMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW5kcG9pbnRzTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiRW52VmFyXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfRW52VmFyXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuRW52VmFyXCJcclxuICAgICAgfSxcclxuICAgICAgXCJFdmVudExpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19FdmVudExpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5FdmVudExpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkdyb3VwXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfR3JvdXBcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdyb3VwXCJcclxuICAgICAgfSxcclxuICAgICAgXCJHcm91cExpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdXNlcl9Hcm91cExpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkdyb3VwTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiSWRlbnRpdHlcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdXNlcl9JZGVudGl0eVwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIklkZW50aXR5TGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc191c2VyX0lkZW50aXR5TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuSWRlbnRpdHlMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJJbWFnZUxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfaW1hZ2VfSW1hZ2VMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5JbWFnZUxpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIkltYWdlU3RyZWFtTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9JbWFnZVN0cmVhbUxpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLkltYWdlU3RyZWFtTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fTG9jYWxTdWJqZWN0QWNjZXNzUmV2aWV3XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Mb2NhbFN1YmplY3RBY2Nlc3NSZXZpZXdcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIk5hbWVzcGFjZVwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05hbWVzcGFjZVwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5hbWVzcGFjZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiTmFtZXNwYWNlTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX05hbWVzcGFjZUxpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5OYW1lc3BhY2VMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJOb2RlXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZVwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLk5vZGVcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIk5vZGVMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfTm9kZUxpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Ob2RlTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiT0F1dGhBY2Nlc3NUb2tlblwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aEFjY2Vzc1Rva2VuXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aEFjY2Vzc1Rva2VuXCJcclxuICAgICAgfSxcclxuICAgICAgXCJPQXV0aEFjY2Vzc1Rva2VuTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aEFjY2Vzc1Rva2VuTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBY2Nlc3NUb2tlbkxpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIk9BdXRoQXV0aG9yaXplVG9rZW5cIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhBdXRob3JpemVUb2tlblwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhBdXRob3JpemVUb2tlblwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiT0F1dGhBdXRob3JpemVUb2tlbkxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhBdXRob3JpemVUb2tlbkxpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQXV0aG9yaXplVG9rZW5MaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJPQXV0aENsaWVudFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aENsaWVudFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuT0F1dGhDbGllbnRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvblwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aENsaWVudEF1dGhvcml6YXRpb25cIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLk9BdXRoQ2xpZW50QXV0aG9yaXphdGlvblwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiT0F1dGhDbGllbnRBdXRob3JpemF0aW9uTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19vYXV0aF9PQXV0aENsaWVudEF1dGhvcml6YXRpb25MaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudEF1dGhvcml6YXRpb25MaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJPQXV0aENsaWVudExpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3Nfb2F1dGhfT0F1dGhDbGllbnRMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5PQXV0aENsaWVudExpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIk9iamVjdE1ldGFcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19PYmplY3RNZXRhXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuT2JqZWN0TWV0YVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUGVyc2lzdGVudFZvbHVtZVwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1BlcnNpc3RlbnRWb2x1bWVcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lXCJcclxuICAgICAgfSxcclxuICAgICAgXCJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1cIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlBlcnNpc3RlbnRWb2x1bWVDbGFpbUxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lQ2xhaW1MaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUGVyc2lzdGVudFZvbHVtZUNsYWltTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUGVyc2lzdGVudFZvbHVtZUxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19QZXJzaXN0ZW50Vm9sdW1lTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBlcnNpc3RlbnRWb2x1bWVMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJQb2RMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfUG9kTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlBvZExpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlBvbGljeVwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1BvbGljeVwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5XCJcclxuICAgICAgfSxcclxuICAgICAgXCJQb2xpY3lCaW5kaW5nXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUG9saWN5QmluZGluZ1wiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5QmluZGluZ1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUG9saWN5QmluZGluZ0xpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lCaW5kaW5nTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUG9saWN5QmluZGluZ0xpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlBvbGljeUxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Qb2xpY3lMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Qb2xpY3lMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJQcm9qZWN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3Byb2plY3RfUHJvamVjdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUHJvamVjdExpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfcHJvamVjdF9Qcm9qZWN0TGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUHJvamVjdExpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlByb2plY3RSZXF1ZXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3Byb2plY3RfUHJvamVjdFJlcXVlc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlByb2plY3RSZXF1ZXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJRdWFudGl0eVwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX3Jlc291cmNlX1F1YW50aXR5XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUXVhbnRpdHlcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlJlcGxpY2F0aW9uQ29udHJvbGxlckxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19SZXBsaWNhdGlvbkNvbnRyb2xsZXJMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyTGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUmVzb3VyY2VRdW90YVwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5SZXNvdXJjZVF1b3RhXCJcclxuICAgICAgfSxcclxuICAgICAgXCJSZXNvdXJjZVF1b3RhTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1Jlc291cmNlUXVvdGFMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVzb3VyY2VRdW90YUxpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlJvbGVcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfYXV0aG9yaXphdGlvbl9Sb2xlXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJSb2xlQmluZGluZ1wiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1JvbGVCaW5kaW5nXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlQmluZGluZ1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUm9sZUJpbmRpbmdMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZUJpbmRpbmdMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5Sb2xlQmluZGluZ0xpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlJvbGVMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX2F1dGhvcml6YXRpb25fUm9sZUxpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlJvbGVMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJSb290UGF0aHNcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvYXBpX1Jvb3RQYXRoc1wiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlJvb3RQYXRoc1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiUm91dGVMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3JvdXRlX1JvdXRlTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuUm91dGVMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJTZWNyZXRcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWNyZXRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlNlY3JldExpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWNyZXRMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VjcmV0TGlzdFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiU2VjdXJpdHlDb250ZXh0Q29uc3RyYWludHNcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c1wiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlY3VyaXR5Q29udGV4dENvbnN0cmFpbnRzXCJcclxuICAgICAgfSxcclxuICAgICAgXCJTZWN1cml0eUNvbnRleHRDb25zdHJhaW50c0xpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc19TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c0xpc3RcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZWN1cml0eUNvbnRleHRDb25zdHJhaW50c0xpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlNlcnZpY2VBY2NvdW50XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VydmljZUFjY291bnRcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5TZXJ2aWNlQWNjb3VudFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiU2VydmljZUFjY291bnRMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL2t1YmVybmV0ZXNfU2VydmljZUFjY291bnRMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZUFjY291bnRMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJTZXJ2aWNlTGlzdFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1NlcnZpY2VMaXN0XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuU2VydmljZUxpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlN0YXR1c1wiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9rdWJlcm5ldGVzX1N0YXR1c1wiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlN0YXR1c1wiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiU3ViamVjdEFjY2Vzc1Jldmlld1wiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1N1YmplY3RBY2Nlc3NSZXZpZXdcIixcclxuICAgICAgICBcImphdmFUeXBlXCI6IFwiaW8uZmFicmljOC5vcGVuc2hpZnQuYXBpLm1vZGVsLlN1YmplY3RBY2Nlc3NSZXZpZXdcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlN1YmplY3RBY2Nlc3NSZXZpZXdSZXNwb25zZVwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19hdXRob3JpemF0aW9uX1N1YmplY3RBY2Nlc3NSZXZpZXdSZXNwb25zZVwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuU3ViamVjdEFjY2Vzc1Jldmlld1Jlc3BvbnNlXCJcclxuICAgICAgfSxcclxuICAgICAgXCJUYWdFdmVudFwiOiB7XHJcbiAgICAgICAgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9vc19pbWFnZV9UYWdFdmVudFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGFnRXZlbnRcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIlRlbXBsYXRlXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3RlbXBsYXRlX1RlbXBsYXRlXCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgub3BlbnNoaWZ0LmFwaS5tb2RlbC5UZW1wbGF0ZVwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiVGVtcGxhdGVMaXN0XCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3RlbXBsYXRlX1RlbXBsYXRlTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVGVtcGxhdGVMaXN0XCJcclxuICAgICAgfSxcclxuICAgICAgXCJVc2VyXCI6IHtcclxuICAgICAgICBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL29zX3VzZXJfVXNlclwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVXNlclwiXHJcbiAgICAgIH0sXHJcbiAgICAgIFwiVXNlckxpc3RcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvb3NfdXNlcl9Vc2VyTGlzdFwiLFxyXG4gICAgICAgIFwiamF2YVR5cGVcIjogXCJpby5mYWJyaWM4Lm9wZW5zaGlmdC5hcGkubW9kZWwuVXNlckxpc3RcIlxyXG4gICAgICB9LFxyXG4gICAgICBcIldhdGNoRXZlbnRcIjoge1xyXG4gICAgICAgIFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMva3ViZXJuZXRlc193YXRjaF9XYXRjaEV2ZW50XCIsXHJcbiAgICAgICAgXCJqYXZhVHlwZVwiOiBcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuV2F0Y2hFdmVudFwiXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWVcclxuICB9XHJcblxyXG5cclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJzY2hlbWEudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcbiAgXHJcbiAgXHJcbiAgdmFyIGhpZGRlblByb3BlcnRpZXMgPSBbJ3N0YXR1cycsICdkZWxldGlvblRpbWVzdGFtcCddO1xyXG5cclxuICBmdW5jdGlvbiB3aXRoUHJvcGVydHkoc2NoZW1hOmFueSwgbmFtZTpzdHJpbmcsIGFjdGlvbjooYW55KSA9PiB2b2lkKSB7XHJcbiAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXNbbmFtZV0pIHtcclxuICAgICAgYWN0aW9uKHNjaGVtYS5wcm9wZXJ0aWVzW25hbWVdKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gaGlkZVByb3BlcnRpZXMoc2NoZW1hKSB7XHJcbiAgICBfLmZvckVhY2goaGlkZGVuUHJvcGVydGllcywgKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgIHdpdGhQcm9wZXJ0eShzY2hlbWEsIHByb3BlcnR5LCAocHJvcGVydHkpID0+IHtcclxuICAgICAgICBwcm9wZXJ0eS5oaWRkZW4gPSB0cnVlO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc1NjaGVtYScsIFsnU2NoZW1hUmVnaXN0cnknLCAoc2NoZW1hczpIYXd0aW9Gb3Jtcy5TY2hlbWFSZWdpc3RyeSkgPT4ge1xyXG4gICAgY29uZmlndXJlU2NoZW1hKCk7XHJcbiAgICBcclxuICAgIHNjaGVtYXMuYWRkTGlzdGVuZXIoXCJrOHMgc2NoZW1hIGN1c3RvbWl6ZXJcIiwgKG5hbWUsIHNjaGVtYSkgPT4ge1xyXG4gICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMpIHtcclxuICAgICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMubmFtZSkge1xyXG4gICAgICAgICAgc2NoZW1hLmNvbnRyb2xzID0gWyduYW1lJywgJyonXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgJ3BvcnRhbElQJywgKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICBwcm9wZXJ0eS5sYWJlbCA9IFwiUG9ydGFsIElQXCJcclxuICAgICAgICB9KTtcclxuICAgICAgICB3aXRoUHJvcGVydHkoc2NoZW1hLCAncHVibGljSVBzJywgKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICBwcm9wZXJ0eS5sYWJlbCA9IFwiUHVibGljIElQc1wiXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgd2l0aFByb3BlcnR5KHNjaGVtYSwgJ1NwZWMnLCAocHJvcGVydHkpID0+IHtcclxuICAgICAgICAgIHByb3BlcnR5LmxhYmVsID0gJ2ZhbHNlJztcclxuICAgICAgICB9KTtcclxuICAgICAgICB3aXRoUHJvcGVydHkoc2NoZW1hLCAnTWV0YWRhdGEnLCAocHJvcGVydHkpID0+IHtcclxuICAgICAgICAgIHByb3BlcnR5LmxhYmVsID0gJ2ZhbHNlJztcclxuICAgICAgICB9KTtcclxuICAgICAgICBoaWRlUHJvcGVydGllcyhzY2hlbWEpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoXy5lbmRzV2l0aChuYW1lLCBcIlNlcnZpY2VTcGVjXCIpKSB7XHJcbiAgICAgICAgc2NoZW1hLmNvbnRyb2xzID0gW1wicG9ydGFsSVBcIiwgXCJjcmVhdGVFeHRlcm5hbExvYWRCYWxhbmNlclwiLCBcInNlc3Npb25BZmZpbml0eVwiLCBcInB1YmxpY0lQc1wiLCBcInBvcnRzXCIsIFwic2VsZWN0b3JcIiwgXCIqXCJdO1xyXG4gICAgICAgIHdpdGhQcm9wZXJ0eShzY2hlbWEsICdzZXNzaW9uQWZmaW5pdHknLCAocHJvcGVydHkpID0+IHtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIlNjaGVtYTogXCIsIHNjaGVtYSk7XHJcbiAgICAgICAgICBwcm9wZXJ0eS5lbnVtID0gWydOb25lJywgJ0NsaWVudElQJ107XHJcbiAgICAgICAgICBwcm9wZXJ0eS5kZWZhdWx0ID0gJ05vbmUnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAoXy5lbmRzV2l0aChuYW1lLCBcIlNlcnZpY2VcIikpIHtcclxuICAgICAgICBzY2hlbWEuY29udHJvbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgc2NoZW1hLnRhYnMgPSB7XHJcbiAgICAgICAgICAnQmFzaWMgSW5mb3JtYXRpb24nOiBbJ21ldGFkYXRhJ10sXHJcbiAgICAgICAgICAnRGV0YWlscyc6IFsnKiddXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIk5hbWU6IFwiLCBuYW1lLCBcIiBTY2hlbWE6IFwiLCBzY2hlbWEpO1xyXG4gICAgICB9XHJcbiAgICAgXHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgXHJcbiAgICBzY2hlbWFzLmFkZFNjaGVtYSgna3ViZXJuZXRlcycsIDxhbnk+IHNjaGVtYSk7XHJcbiAgICAvLyBub3cgbGV0cyBpdGVyYXRlIGFuZCBhZGQgYWxsIHRoZSBkZWZpbml0aW9ucyB0b29cclxuICAgIGFuZ3VsYXIuZm9yRWFjaChzY2hlbWEuZGVmaW5pdGlvbnMsIChkZWZpbml0aW9uLCB0eXBlTmFtZSkgPT4ge1xyXG4gICAgICAvL3NjaGVtYXMuYWRkU2NoZW1hKHR5cGVOYW1lLCBkZWZpbml0aW9uKTtcclxuICAgICAgc2NoZW1hcy5hZGRTY2hlbWEoXCIjL2RlZmluaXRpb25zL1wiICsgdHlwZU5hbWUsIGRlZmluaXRpb24pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2NoZW1hO1xyXG4gIH1dKTtcclxuXHJcblxyXG4gIFxyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIC8vIGZhY2FkZSB0aGlzIHRvIHRoZSB3YXRjaGVyIHNlcnZpY2VcclxuICBjbGFzcyBLdWJlcm5ldGVzU3RhdGVJbXBsIGltcGxlbWVudHMgS3ViZXJuZXRlc1N0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgd2F0Y2hlcjpXYXRjaGVyU2VydmljZSkge1xyXG4gICAgfVxyXG4gICAgZ2V0IG5hbWVzcGFjZXMoKTpBcnJheTxzdHJpbmc+IHtcclxuICAgICAgcmV0dXJuIF8ubWFwKHRoaXMud2F0Y2hlci5nZXRPYmplY3RzKFdhdGNoVHlwZXMuTkFNRVNQQUNFUyksIChuYW1lc3BhY2UpID0+IHtcclxuICAgICAgICByZXR1cm4gbmFtZXNwYWNlLm1ldGFkYXRhLm5hbWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNlbGVjdGVkTmFtZXNwYWNlKCk6c3RyaW5nIHtcclxuICAgICAgcmV0dXJuIHRoaXMud2F0Y2hlci5nZXROYW1lc3BhY2UoKTtcclxuICAgIH1cclxuICAgIHNldCBzZWxlY3RlZE5hbWVzcGFjZShuYW1lc3BhY2U6c3RyaW5nKSB7XHJcbiAgICAgIHRoaXMud2F0Y2hlci5zZXROYW1lc3BhY2UobmFtZXNwYWNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc1N0YXRlJywgWydXYXRjaGVyU2VydmljZScsICh3YXRjaGVyOldhdGNoZXJTZXJ2aWNlKSA9PiB7XHJcbiAgICByZXR1cm4gbmV3IEt1YmVybmV0ZXNTdGF0ZUltcGwod2F0Y2hlcik7XHJcbiAgfV0pO1xyXG5cclxuICAvLyBUT0RPIHRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGEgc2VydmljZSByZWFsbHlcclxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNBcGlVUkwnLCAoKSA9PiBrdWJlcm5ldGVzQXBpVXJsKCkpO1xyXG5cclxuICAvLyBUT0RPIHdlJ2xsIGdldCByaWQgb2YgdGhpcy4uLlxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc1ZlcnNpb24nLCBbKCkgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcXVlcnk6ICgpID0+IG51bGxcclxuICAgIH1cclxuICB9XSk7XHJcblxyXG4gIC8vIFRPRE8gbGV0J3MgbW92ZSB0aGVzZSBpbnRvIEt1YmVybmV0ZXNNb2RlbCBzbyBjb250cm9sbGVycyBkb24ndCBoYXZlIHRvIGluamVjdCB0aGVtIHNlcGFyYXRlbHlcclxuICBfbW9kdWxlLmZhY3RvcnkoJ0t1YmVybmV0ZXNQb2RzJywgWydLdWJlcm5ldGVzTW9kZWwnLCAoS3ViZXJuZXRlc01vZGVsKSA9PiB7XHJcbiAgICByZXR1cm4gS3ViZXJuZXRlc01vZGVsWydwb2RzUmVzb3VyY2UnXTtcclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZmFjdG9yeSgnS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnMnLCBbJ0t1YmVybmV0ZXNNb2RlbCcsIChLdWJlcm5ldGVzTW9kZWwpID0+IHtcclxuICAgIHJldHVybiBLdWJlcm5ldGVzTW9kZWxbJ3JlcGxpY2F0aW9uY29udHJvbGxlcnNSZXNvdXJjZSddO1xyXG4gIH1dKTtcclxuXHJcbiAgX21vZHVsZS5mYWN0b3J5KCdLdWJlcm5ldGVzU2VydmljZXMnLCBbJ0t1YmVybmV0ZXNNb2RlbCcsIChLdWJlcm5ldGVzTW9kZWwpID0+IHtcclxuICAgIHJldHVybiBLdWJlcm5ldGVzTW9kZWxbJ3NlcnZpY2VzUmVzb3VyY2UnXTtcclxuICB9XSk7XHJcblxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNNb2RlbC50c1wiLz5cclxuLy8vIFxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIEZpbGVEcm9wQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJGaWxlRHJvcENvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiRmlsZVVwbG9hZGVyXCIsICckaHR0cCcsICgkc2NvcGUsIG1vZGVsOkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEZpbGVVcGxvYWRlciwgJGh0dHA6bmcuSUh0dHBTZXJ2aWNlKSA9PiB7XHJcblxyXG4gICAgICB2YXIgbG9nID0gTG9nZ2VyLmdldCgna3ViZXJuZXRlcy1maWxlLXVwbG9hZGVyJyk7ICAgICAgXHJcblxyXG4gICAgICB2YXIgdXBsb2FkZXIgPSAkc2NvcGUudXBsb2FkZXIgPSA8RmlsZVVwbG9hZC5GaWxlVXBsb2FkZXI+IG5ldyBGaWxlVXBsb2FkZXIoPEZpbGVVcGxvYWQuSU9wdGlvbnM+e1xyXG4gICAgICAgIGF1dG9VcGxvYWQ6IGZhbHNlLFxyXG4gICAgICAgIHJlbW92ZUFmdGVyVXBsb2FkOiB0cnVlLFxyXG4gICAgICAgIHVybDoga3ViZXJuZXRlc0FwaVVybCgpXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgJHNjb3BlLnVwbG9hZGVyLm9uQWZ0ZXJBZGRpbmdGaWxlID0gKGZpbGUpID0+IHtcclxuICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlYWRlci5yZWFkeVN0YXRlID09PSAyKSB7XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkZpbGUgYWRkZWQ6IFwiLCBmaWxlKTsgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgZGF0YSA9IHJlYWRlci5yZXN1bHQ7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoXy5lbmRzV2l0aChmaWxlLl9maWxlLm5hbWUsICcuanNvbicpKSB7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiUGFyc2luZyBKU09OIGZpbGVcIik7XHJcbiAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIG9iaiA9IGFuZ3VsYXIuZnJvbUpzb24oZGF0YSk7XHJcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJGYWlsZWQgdG8gcmVhZCBkcm9wcGVkIGZpbGUgXCIsIGZpbGUuX2ZpbGUubmFtZSwgXCI6IFwiLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChfLmVuZHNXaXRoKGZpbGUuX2ZpbGUubmFtZSwgJy55YW1sJykpIHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJQYXJzaW5nIFlBTUwgZmlsZVwiKTtcclxuICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgb2JqID0ganN5YW1sLmxvYWQoZGF0YSk7XHJcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJGYWlsZWQgdG8gcmVhZCBkcm9wcGVkIGZpbGUgXCIsIGZpbGUuX2ZpbGUubmFtZSwgXCI6IFwiLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsb2cuZGVidWcoXCJVbmtub3duIGZpbGUgdHlwZSBmb3IgZmlsZTogXCIsIGZpbGUuX2ZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkRyb3BwZWQgb2JqZWN0OiBcIiwgb2JqKTtcclxuICAgICAgICAgICAgaWYgKCFLdWJlcm5ldGVzQVBJLmdldE5hbWVzcGFjZShvYmopKSB7XHJcbiAgICAgICAgICAgICAgb2JqLm1ldGFkYXRhLm5hbWVzcGFjZSA9IG1vZGVsLmN1cnJlbnROYW1lc3BhY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBLdWJlcm5ldGVzQVBJLnB1dCh7XHJcbiAgICAgICAgICAgICAgb2JqZWN0OiBvYmosXHJcbiAgICAgICAgICAgICAgc3VjY2VzczogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKFwic3VjY2Vzc1wiLCBcIkFwcGxpZWQgXCIgKyBmaWxlLl9maWxlLm5hbWUpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiR290IGVycm9yIGFwcGx5aW5nXCIsIGZpbGUuX2ZpbGUubmFtZSwgXCI6IFwiLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oXCJ3YXJuaW5nXCIsIFwiRmFpbGVkIHRvIGFwcGx5IFwiICsgZmlsZS5fZmlsZS5uYW1lICsgXCIsIGVycm9yOiBcIiArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlLl9maWxlKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgICRzY29wZS51cGxvYWRlci5vbkJlZm9yZVVwbG9hZEl0ZW0gPSAoaXRlbSkgPT4ge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIlVwbG9hZGluZzogXCIsIGl0ZW0pO1xyXG4gICAgICAgIC8vQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCAnVXBsb2FkaW5nICcgKyBpdGVtKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgICRzY29wZS51cGxvYWRlci5vblN1Y2Nlc3NJdGVtID0gKGl0ZW06RmlsZVVwbG9hZC5JRmlsZUl0ZW0pID0+IHtcclxuICAgICAgICBsb2cuZGVidWcoXCJvblN1Y2Nlc3NJdGVtOiBcIiwgaXRlbSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAkc2NvcGUudXBsb2FkZXIub25FcnJvckl0ZW0gPSAoaXRlbSwgcmVzcG9uc2UsIHN0YXR1cykgPT4ge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIkZhaWxlZCB0byBhcHBseSwgcmVzcG9uc2U6IFwiLCByZXNwb25zZSwgXCIgc3RhdHVzOiBcIiwgc3RhdHVzKTtcclxuICAgICAgfVxyXG5cclxuICB9XSk7XHJcblx0XHJcblx0ZXhwb3J0IHZhciBOYW1lc3BhY2VDb250cm9sbGVyID0gY29udHJvbGxlcignTmFtZXNwYWNlQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJ1dhdGNoZXJTZXJ2aWNlJywgKCRzY29wZSwgd2F0Y2hlcjpXYXRjaGVyU2VydmljZSkgPT4ge1xyXG5cdFx0JHNjb3BlLm5hbWVzcGFjZXMgPSB3YXRjaGVyLmdldE9iamVjdHMoJ25hbWVzcGFjZXMnKTtcclxuXHRcdCRzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCduYW1lc3BhY2VzJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG5cdFx0XHRpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XHJcblx0XHRcdFx0JHNjb3BlLm5hbWVzcGFjZSA9IHdhdGNoZXIuZ2V0TmFtZXNwYWNlKCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0JHNjb3BlLiR3YXRjaCgnbmFtZXNwYWNlJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG5cdFx0XHRpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XHJcblx0XHRcdFx0aWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xyXG5cdFx0XHRcdFx0d2F0Y2hlci5zZXROYW1lc3BhY2UobmV3VmFsdWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fV0pO1xyXG5cclxuICBleHBvcnQgdmFyIFRvcExldmVsID0gY29udHJvbGxlcihcIlRvcExldmVsXCIsIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNWZXJzaW9uXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsICgkc2NvcGUsIEt1YmVybmV0ZXNWZXJzaW9uOm5nLnJlc291cmNlLklSZXNvdXJjZUNsYXNzPGFueT4sIEt1YmVybmV0ZXNTdGF0ZSkgPT4ge1xyXG5cclxuICAgICRzY29wZS52ZXJzaW9uID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICRzY29wZS5zaG93QXBwVmlldyA9IGlzQXBwVmlldygpO1xyXG5cclxuICAgICRzY29wZS5pc0FjdGl2ZSA9IChocmVmKSA9PiB7XHJcbiAgICAgIHJldHVybiBpc0xpbmtBY3RpdmUoaHJlZik7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5tb2RlID0gJ3lhbWwnO1xyXG4gICAgJHNjb3BlLnJhd01vZGUgPSB0cnVlO1xyXG4gICAgJHNjb3BlLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAkc2NvcGUucmVhZE9ubHkgPSB0cnVlO1xyXG4gICAgJHNjb3BlLnJhd01vZGVsID0gbnVsbDtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCdoYXd0aW9FZGl0b3JfZGVmYXVsdF9kaXJ0eScsICgkZXZlbnQsIGRpcnR5KSA9PiB7XHJcbiAgICAgICRzY29wZS5kaXJ0eSA9IGRpcnR5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLnNhdmUgPSAocmF3TW9kZWwpID0+IHtcclxuICAgICAgdmFyIG9iajphbnkgPSBudWxsO1xyXG4gICAgICB2YXIgc3RyID0gcmF3TW9kZWwucmVwbGFjZSgvXFx0L2csIFwiICAgIFwiKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBvYmogPSBqc3lhbWwubG9hZChzdHIpO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBDb3JlLm5vdGlmaWNhdGlvbihcIndhcm5pbmdcIiwgXCJGYWlsZWQgdG8gc2F2ZSBvYmplY3QsIGVycm9yOiBcXFwiXCIgKyBlcnIgKyBcIlxcXCJcIik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFvYmopIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgJHNjb3BlLnJlYWRPbmx5ID0gdHJ1ZTtcclxuICAgICAgS3ViZXJuZXRlc0FQSS5wdXQoe1xyXG4gICAgICAgIG9iamVjdDogb2JqLFxyXG4gICAgICAgIHN1Y2Nlc3M6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAkc2NvcGUuZGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKFwic3VjY2Vzc1wiLCBcIlNhdmVkIG9iamVjdCBcIiArIGdldE5hbWUob2JqKSk7XHJcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiR290IGVycm9yOiBcIiwgZXJyKTtcclxuICAgICAgICAgIENvcmUubm90aWZpY2F0aW9uKFwid2FybmluZ1wiLCBcIkZhaWxlZCB0byBzYXZlIG9iamVjdCwgZXJyb3I6IFxcXCJcIiArIGVyci5tZXNzYWdlICsgXCJcXFwiXCIpO1xyXG4gICAgICAgICAgJHNjb3BlLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuXHJcbiAgICBLdWJlcm5ldGVzVmVyc2lvbi5xdWVyeSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgJHNjb3BlLnZlcnNpb24gPSByZXNwb25zZTtcclxuICAgIH0pO1xyXG5cclxuICB9XSk7XHJcblxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblx0XHJcblx0ZXhwb3J0IHZhciBOYW1lc3BhY2VDb250cm9sbGVyID0gY29udHJvbGxlcihcIk5hbWVzcGFjZUNvbnRyb2xsZXJcIiwgW1wiJHNjb3BlXCIsIFwiV2F0Y2hlclNlcnZpY2VcIiwgKCRzY29wZSwgd2F0Y2hlcjpXYXRjaGVyU2VydmljZSkgPT4ge1xyXG5cdFx0JHNjb3BlLndhdGNoZXIgPSB3YXRjaGVyO1xyXG5cdFx0JHNjb3BlLm5hbWVzcGFjZU9iamVjdHMgPSB3YXRjaGVyLmdldE9iamVjdHMoJ25hbWVzcGFjZXMnKTtcclxuXHRcdCRzY29wZS5uYW1lc3BhY2UgPSB3YXRjaGVyLmdldE5hbWVzcGFjZSgpO1xyXG5cdFx0JHNjb3BlLm5hbWVzcGFjZXMgPSBbXTtcclxuXHRcdCRzY29wZS4kd2F0Y2goJ25hbWVzcGFjZScsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuXHRcdFx0aWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xyXG5cdFx0XHRcdHdhdGNoZXIuc2V0TmFtZXNwYWNlKG5ld1ZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHQkc2NvcGUuJHdhdGNoKCd3YXRjaGVyLmdldE5hbWVzcGFjZSgpJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG5cdFx0XHRpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XHJcblx0XHRcdFx0JHNjb3BlLm5hbWVzcGFjZSA9IG5ld1ZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdCRzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCduYW1lc3BhY2VPYmplY3RzJywgKG5hbWVzcGFjZU9iamVjdHMpID0+IHtcclxuXHRcdFx0JHNjb3BlLm5hbWVzcGFjZXMgPSBfLm1hcChuYW1lc3BhY2VPYmplY3RzLCAobmFtZXNwYWNlOmFueSkgPT4gbmFtZXNwYWNlLm1ldGFkYXRhLm5hbWUpO1xyXG5cdFx0fSlcdFx0XHJcblx0fV0pO1xyXG5cdFxyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICB2YXIgT3ZlcnZpZXdEaXJlY3RpdmUgPSBfbW9kdWxlLmRpcmVjdGl2ZShcImt1YmVybmV0ZXNPdmVydmlld1wiLCBbXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRjb21waWxlXCIsIFwiJGludGVycG9sYXRlXCIsIFwiJHRpbWVvdXRcIiwgXCIkd2luZG93XCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsICdLdWJlcm5ldGVzTW9kZWwnLCAoJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkY29tcGlsZTpuZy5JQ29tcGlsZVNlcnZpY2UsICRpbnRlcnBvbGF0ZTpuZy5JSW50ZXJwb2xhdGVTZXJ2aWNlLCAkdGltZW91dDpuZy5JVGltZW91dFNlcnZpY2UsICR3aW5kb3c6bmcuSVdpbmRvd1NlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc01vZGVsKSA9PiB7XHJcblxyXG4gICAgdmFyIGxvZyA9IExvZ2dlci5nZXQoJ2t1YmVybmV0ZXMtb3ZlcnZpZXcnKTtcclxuICAgIHZhciBtb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgIHZhciBzdGF0ZSA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN0cmljdDogJ0UnLFxyXG4gICAgICByZXBsYWNlOiB0cnVlLFxyXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHIpID0+IHtcclxuICAgICAgICBzY29wZS5tb2RlbCA9IG1vZGVsO1xyXG4gICAgICAgIGVsZW1lbnQuY3NzKHt2aXNpYmlsaXR5OiAnaGlkZGVuJ30pO1xyXG4gICAgICAgIHNjb3BlLmdldEVudGl0eSA9ICh0eXBlOnN0cmluZywga2V5OnN0cmluZykgPT4ge1xyXG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hvc3QnOlxyXG4gICAgICAgICAgICAgIHJldHVybiBtb2RlbC5wb2RzQnlIb3N0W2tleV07XHJcbiAgICAgICAgICAgIGNhc2UgJ3BvZCc6XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnBvZHNCeUtleVtrZXldO1xyXG4gICAgICAgICAgICBjYXNlICdyZXBsaWNhdGlvbkNvbnRyb2xsZXInOlxyXG4gICAgICAgICAgICAgIHJldHVybiBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzQnlLZXlba2V5XTtcclxuICAgICAgICAgICAgY2FzZSAnc2VydmljZSc6XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnNlcnZpY2VzQnlLZXlba2V5XTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHNjb3BlLmt1YmVybmV0ZXMgPSBzdGF0ZTtcclxuXHJcbiAgICAgICAgc2NvcGUuY3VzdG9taXplRGVmYXVsdE9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgb3B0aW9ucy5FbmRwb2ludCA9IFsnQmxhbmsnLCB7fV07XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzY29wZS5tb3VzZUVudGVyID0gKCRldmVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHNjb3BlLmpzUGx1bWIpIHtcclxuICAgICAgICAgICAgYW5ndWxhci5lbGVtZW50KCRldmVudC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcyhcImhvdmVyZWRcIik7XHJcbiAgICAgICAgICAgIHNjb3BlLmpzUGx1bWIuZ2V0RW5kcG9pbnRzKCRldmVudC5jdXJyZW50VGFyZ2V0KS5mb3JFYWNoKChlbmRwb2ludCkgPT4ge1xyXG4gICAgICAgICAgICAgIGVuZHBvaW50LmNvbm5lY3Rpb25zLmZvckVhY2goKGNvbm5lY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGlvbi5pc0hvdmVyKCkpIHtcclxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zZXRIb3Zlcih0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5lbmRwb2ludHMuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vdXNlRW50ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldDogZS5lbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgc2NvcGUubW91c2VMZWF2ZSA9ICgkZXZlbnQpID0+IHtcclxuICAgICAgICAgIGlmIChzY29wZS5qc1BsdW1iKSB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudCgkZXZlbnQuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoXCJob3ZlcmVkXCIpO1xyXG4gICAgICAgICAgICBzY29wZS5qc1BsdW1iLmdldEVuZHBvaW50cygkZXZlbnQuY3VycmVudFRhcmdldCkuZm9yRWFjaCgoZW5kcG9pbnQpID0+IHtcclxuICAgICAgICAgICAgICBlbmRwb2ludC5jb25uZWN0aW9ucy5mb3JFYWNoKChjb25uZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvbi5pc0hvdmVyKCkpIHtcclxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zZXRIb3ZlcihmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uZW5kcG9pbnRzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzY29wZS5tb3VzZUxlYXZlKHtcclxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQ6IGUuZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgc2NvcGUuY3VzdG9taXplRW5kcG9pbnRPcHRpb25zID0gKGpzUGx1bWIsIG5vZGUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgIHZhciB0eXBlID0gbm9kZS5lbC5hdHRyKCdkYXRhLXR5cGUnKTtcclxuICAgICAgICAgIC8vIGxvZy5kZWJ1ZyhcImVuZHBvaW50IHR5cGU6IFwiLCB0eXBlKTtcclxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdwb2QnOlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdzZXJ2aWNlJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAncmVwbGljYXRpb25Db250cm9sbGVyJzpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgICovXHJcbiAgICAgICAgc2NvcGUuY3VzdG9taXplQ29ubmVjdGlvbk9wdGlvbnMgPSAoanNQbHVtYiwgZWRnZSwgcGFyYW1zLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICB2YXIgdHlwZSA9IGVkZ2Uuc291cmNlLmVsLmF0dHIoJ2RhdGEtdHlwZScpO1xyXG4gICAgICAgICAgb3B0aW9ucy5jb25uZWN0b3IgPSBbIFwiQmV6aWVyXCIsIHsgY3VydmluZXNzOiA1MCwgc3R1YjogMjUsIGFsd2F5c1Jlc3BlY3RTdHViczogdHJ1ZSB9IF07XHJcbiAgICAgICAgICBwYXJhbXMucGFpbnRTdHlsZSA9IHtcclxuICAgICAgICAgICAgbGluZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBzdHJva2VTdHlsZTogJyM1NTU1Y2MnXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3BvZCc6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3NlcnZpY2UnOlxyXG4gICAgICAgICAgICAgIHBhcmFtcy5hbmNob3JzID0gW1xyXG4gICAgICAgICAgICAgICAgWyBcIkNvbnRpbnVvdXNcIiwgeyBmYWNlczogW1wicmlnaHRcIl0gfSBdLFxyXG4gICAgICAgICAgICAgICAgWyBcIkNvbnRpbnVvdXNcIiwgeyBmYWNlczogW1wibGVmdFwiXSB9IF0gXHJcbiAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgWzEsIDAuNSwgMCwgMCwgLTEwLCAtOTBdLFxyXG4gICAgICAgICAgICAgICAgWzAsIDAuNSwgMCwgMCwgLTEwLCAtOTBdXHJcbiAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlcGxpY2F0aW9uQ29udHJvbGxlcic6XHJcbiAgICAgICAgICAgICAgcGFyYW1zLmFuY2hvcnMgPSBbXHJcbiAgICAgICAgICAgICAgICBbIFwiUGVyaW1ldGVyXCIsIHsgc2hhcGU6IFwiQ2lyY2xlXCIgfSBdLFxyXG4gICAgICAgICAgICAgICAgWyBcIkNvbnRpbnVvdXNcIiwgeyBmYWNlczogW1wicmlnaHRcIl0gfSBdXHJcbiAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgWzAsIDAuNSwgMCwgMCwgLTEwLCAtOTBdLFxyXG4gICAgICAgICAgICAgICAgWzEsIDAuNSwgMCwgMCwgLTEwLCAtOTBdXHJcbiAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvL2xvZy5kZWJ1ZyhcImNvbm5lY3Rpb24gc291cmNlIHR5cGU6IFwiLCB0eXBlKTtcclxuICAgICAgICAgIHJldHVybiBvcHRpb25zO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZnVuY3Rpb24gaW50ZXJwb2xhdGUodGVtcGxhdGUsIGNvbmZpZykge1xyXG4gICAgICAgICAgcmV0dXJuICRpbnRlcnBvbGF0ZSh0ZW1wbGF0ZSkoY29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0ZW1wbGF0ZSwgdGhpbmdOYW1lLCB0aGluZykge1xyXG4gICAgICAgICAgdmFyIGNvbmZpZyA9IHt9O1xyXG4gICAgICAgICAgY29uZmlnW3RoaW5nTmFtZV0gPSB0aGluZztcclxuICAgICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZSh0ZW1wbGF0ZSwgY29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudHModGVtcGxhdGUsIHRoaW5nTmFtZSwgdGhpbmdzKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpbmdzLm1hcCgodGhpbmcpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodGVtcGxhdGUsIHRoaW5nTmFtZSwgdGhpbmcpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIGFwcGVuZE5ld0VsZW1lbnRzKHBhcmVudEVsLCB0ZW1wbGF0ZSwgdGhpbmdOYW1lLCB0aGluZ3MpIHtcclxuICAgICAgICAgIHRoaW5ncy5mb3JFYWNoKCh0aGluZykgPT4ge1xyXG4gICAgICAgICAgICB2YXIga2V5ID0gdGhpbmdbJ19rZXknXSB8fCB0aGluZ1snZWxlbWVudElkJ10gfHwgdGhpbmdbJ2lkJ11cclxuICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gcGFyZW50RWwuZmluZChcIiNcIiArIGtleSApO1xyXG4gICAgICAgICAgICBpZiAoIWV4aXN0aW5nLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImV4aXN0aW5nOiBcIiwgZXhpc3RpbmcsIFwiIGtleTogXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgcGFyZW50RWwuYXBwZW5kKCRjb21waWxlKGNyZWF0ZUVsZW1lbnQodGVtcGxhdGUsIHRoaW5nTmFtZSwgdGhpbmcpKShzY29wZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gbmFtZXNwYWNlRmlsdGVyKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE5hbWVzcGFjZShpdGVtKSA9PT0gc2NvcGUua3ViZXJuZXRlcy5zZWxlY3RlZE5hbWVzcGFjZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnVuY3Rpb24gZmlyc3REcmF3KCkge1xyXG4gICAgICAgICAgbG9nLmRlYnVnKFwiRmlyc3QgZHJhd1wiKTtcclxuICAgICAgICAgIGVsZW1lbnQuZW1wdHkoKTtcclxuICAgICAgICAgIHZhciBzZXJ2aWNlcyA9IG1vZGVsLnNlcnZpY2VzO1xyXG4gICAgICAgICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlcnMgPSBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzO1xyXG4gICAgICAgICAgdmFyIHBvZHMgPSBtb2RlbC5wb2RzO1xyXG4gICAgICAgICAgdmFyIGhvc3RzID0gbW9kZWwuaG9zdHM7XHJcbiAgICAgICAgICAvLyBsb2cuZGVidWcoXCJob3N0czogXCIsIG1vZGVsLmhvc3RzKTtcclxuICAgICAgICAgIHZhciBwYXJlbnRFbCA9IGFuZ3VsYXIuZWxlbWVudCgkdGVtcGxhdGVDYWNoZS5nZXQoXCJvdmVydmlld1RlbXBsYXRlLmh0bWxcIikpO1xyXG4gICAgICAgICAgdmFyIHNlcnZpY2VzRWwgPSBwYXJlbnRFbC5maW5kKFwiLnNlcnZpY2VzXCIpO1xyXG4gICAgICAgICAgdmFyIGhvc3RzRWwgPSBwYXJlbnRFbC5maW5kKFwiLmhvc3RzXCIpO1xyXG4gICAgICAgICAgdmFyIHJlcGxpY2F0aW9uQ29udHJvbGxlcnNFbCA9IHBhcmVudEVsLmZpbmQoXCIucmVwbGljYXRpb25Db250cm9sbGVyc1wiKTtcclxuXHJcbiAgICAgICAgICBzZXJ2aWNlc0VsLmFwcGVuZChjcmVhdGVFbGVtZW50cygkdGVtcGxhdGVDYWNoZS5nZXQoXCJzZXJ2aWNlVGVtcGxhdGUuaHRtbFwiKSwgJ3NlcnZpY2UnLCBzZXJ2aWNlcy5maWx0ZXIobmFtZXNwYWNlRmlsdGVyKSkpO1xyXG4gICAgICAgICAgcmVwbGljYXRpb25Db250cm9sbGVyc0VsLmFwcGVuZChjcmVhdGVFbGVtZW50cygkdGVtcGxhdGVDYWNoZS5nZXQoXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJUZW1wbGF0ZS5odG1sXCIpLCAncmVwbGljYXRpb25Db250cm9sbGVyJywgcmVwbGljYXRpb25Db250cm9sbGVycy5maWx0ZXIobmFtZXNwYWNlRmlsdGVyKSkpO1xyXG5cclxuICAgICAgICAgIGhvc3RzLmZvckVhY2goKGhvc3QpID0+IHtcclxuICAgICAgICAgICAgdmFyIGhvc3RFbCA9IGFuZ3VsYXIuZWxlbWVudChjcmVhdGVFbGVtZW50KCR0ZW1wbGF0ZUNhY2hlLmdldChcIm92ZXJ2aWV3SG9zdFRlbXBsYXRlLmh0bWxcIiksICdob3N0JywgaG9zdCkpO1xyXG4gICAgICAgICAgICB2YXIgcG9kQ29udGFpbmVyID0gYW5ndWxhci5lbGVtZW50KGhvc3RFbC5maW5kKCcucG9kLWNvbnRhaW5lcicpKTtcclxuICAgICAgICAgICAgcG9kQ29udGFpbmVyLmFwcGVuZChjcmVhdGVFbGVtZW50cygkdGVtcGxhdGVDYWNoZS5nZXQoXCJwb2RUZW1wbGF0ZS5odG1sXCIpLCBcInBvZFwiLCBob3N0LnBvZHMpKTtcclxuICAgICAgICAgICAgaG9zdHNFbC5hcHBlbmQoaG9zdEVsKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy9wYXJlbnRFbC5hcHBlbmQoY3JlYXRlRWxlbWVudHMoJHRlbXBsYXRlQ2FjaGUuZ2V0KFwicG9kVGVtcGxhdGUuaHRtbFwiKSwgJ3BvZCcsIHBvZHMpKTtcclxuICAgICAgICAgIGVsZW1lbnQuYXBwZW5kKCRjb21waWxlKHBhcmVudEVsKShzY29wZSkpO1xyXG4gICAgICAgICAgJHRpbWVvdXQoKCkgPT4geyBlbGVtZW50LmNzcyh7dmlzaWJpbGl0eTogJ3Zpc2libGUnfSk7IH0sIDI1MCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XHJcbiAgICAgICAgICBzY29wZS4kZW1pdCgnanNwbHVtYkRvV2hpbGVTdXNwZW5kZWQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIlVwZGF0ZVwiKTtcclxuICAgICAgICAgICAgdmFyIHNlcnZpY2VzID0gbW9kZWwuc2VydmljZXM7XHJcbiAgICAgICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzID0gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVycztcclxuICAgICAgICAgICAgdmFyIHBvZHMgPSBtb2RlbC5wb2RzO1xyXG4gICAgICAgICAgICB2YXIgaG9zdHMgPSBtb2RlbC5ob3N0cztcclxuICAgICAgICAgICAgdmFyIHBhcmVudEVsID0gZWxlbWVudC5maW5kKCdbaGF3dGlvLWpzcGx1bWJdJyk7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHBhcmVudEVsLmZpbmQoJy5qc3BsdW1iLW5vZGUnKTtcclxuICAgICAgICAgICAgY2hpbGRyZW4uZWFjaCgoaW5kZXgsIGMpID0+IHtcclxuICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBhbmd1bGFyLmVsZW1lbnQoYyk7XHJcbiAgICAgICAgICAgICAgdmFyIGtleSA9IGNoaWxkLmF0dHIoJ2lkJyk7XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKCdrZXk6ICcsIGtleSk7XHJcbiAgICAgICAgICAgICAgaWYgKENvcmUuaXNCbGFuayhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHZhciB0eXBlID0gY2hpbGQuYXR0cignZGF0YS10eXBlJyk7XHJcbiAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdob3N0JzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBtb2RlbC5wb2RzQnlIb3N0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc2VydmljZSc6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gbW9kZWwuc2VydmljZXNCeUtleSAmJiBnZXROYW1lc3BhY2UobW9kZWwuc2VydmljZXNCeUtleVtrZXldKSA9PSBzY29wZS5rdWJlcm5ldGVzLnNlbGVjdGVkTmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlcnZpY2UgPSBtb2RlbC5zZXJ2aWNlc0J5S2V5W2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuYXR0cignY29ubmVjdC10bycsIHNlcnZpY2UuY29ubmVjdFRvKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdwb2QnOlxyXG4gICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICBpZiAoaGFzSWQocG9kcywgaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gbW9kZWwucG9kc0J5S2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncmVwbGljYXRpb25Db250cm9sbGVyJzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBtb2RlbC5yZXBsaWNhdGlvbkNvbnRyb2xsZXJzQnlLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVwbGljYXRpb25Db250cm9sbGVyID0gbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVyc0J5S2V5W2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuYXR0cignY29ubmVjdC10bycsIHJlcGxpY2F0aW9uQ29udHJvbGxlci5jb25uZWN0VG8pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIklnbm9yaW5nIGVsZW1lbnQgd2l0aCB1bmtub3duIHR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiUmVtb3Zpbmc6IFwiLCBrZXkpO1xyXG4gICAgICAgICAgICAgIGNoaWxkLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdmFyIHNlcnZpY2VzRWwgPSBlbGVtZW50LmZpbmQoXCIuc2VydmljZXNcIik7XHJcbiAgICAgICAgICAgIHZhciByZXBsaWNhdGlvbkNvbnRyb2xsZXJzRWwgPSBlbGVtZW50LmZpbmQoXCIucmVwbGljYXRpb25Db250cm9sbGVyc1wiKTtcclxuICAgICAgICAgICAgdmFyIGhvc3RzRWwgPSBlbGVtZW50LmZpbmQoXCIuaG9zdHNcIik7XHJcblxyXG4gICAgICAgICAgICBhcHBlbmROZXdFbGVtZW50cyhzZXJ2aWNlc0VsLCAkdGVtcGxhdGVDYWNoZS5nZXQoXCJzZXJ2aWNlVGVtcGxhdGUuaHRtbFwiKSwgXCJzZXJ2aWNlXCIsIHNlcnZpY2VzKTtcclxuICAgICAgICAgICAgYXBwZW5kTmV3RWxlbWVudHMocmVwbGljYXRpb25Db250cm9sbGVyc0VsLCAkdGVtcGxhdGVDYWNoZS5nZXQoXCJyZXBsaWNhdGlvbkNvbnRyb2xsZXJUZW1wbGF0ZS5odG1sXCIpLCBcInJlcGxpY2F0aW9uQ29udHJvbGxlclwiLCByZXBsaWNhdGlvbkNvbnRyb2xsZXJzKTtcclxuICAgICAgICAgICAgYXBwZW5kTmV3RWxlbWVudHMoaG9zdHNFbCwgJHRlbXBsYXRlQ2FjaGUuZ2V0KFwib3ZlcnZpZXdIb3N0VGVtcGxhdGUuaHRtbFwiKSwgXCJob3N0XCIsIGhvc3RzKTtcclxuICAgICAgICAgICAgaG9zdHMuZm9yRWFjaCgoaG9zdCkgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciBob3N0RWwgPSBhbmd1bGFyLmVsZW1lbnQoaG9zdHNFbC5maW5kKFwiI1wiICsgaG9zdC5lbGVtZW50SWQpKTtcclxuICAgICAgICAgICAgICB2YXIgcG9kQ29udGFpbmVyID0gYW5ndWxhci5lbGVtZW50KGhvc3RFbC5maW5kKCcucG9kLWNvbnRhaW5lcicpKTtcclxuICAgICAgICAgICAgICBhcHBlbmROZXdFbGVtZW50cyhwb2RDb250YWluZXIsICR0ZW1wbGF0ZUNhY2hlLmdldChcInBvZFRlbXBsYXRlLmh0bWxcIiksIFwicG9kXCIsIGhvc3QucG9kcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWZyZXNoRHJhd2luZygpIHtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIlJlZnJlc2hpbmcgZHJhd2luZ1wiKTtcclxuICAgICAgICAgIGlmIChlbGVtZW50LmNoaWxkcmVuKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGZpcnN0RHJhdygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXBkYXRlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBDb3JlLiRhcHBseShzY29wZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCBfLmRlYm91bmNlKHJlZnJlc2hEcmF3aW5nLCA1MDAsIHsgdHJhaWxpbmc6IHRydWV9KSk7XHJcbiAgICAgICAgc2V0VGltZW91dChyZWZyZXNoRHJhd2luZywgMTAwKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XSk7XHJcblxyXG4gIHZhciBPdmVydmlld0JveENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiT3ZlcnZpZXdCb3hDb250cm9sbGVyXCIsIFtcIiRzY29wZVwiLCBcIiRsb2NhdGlvblwiLCAoJHNjb3BlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSkgPT4ge1xyXG4gICAgJHNjb3BlLnZpZXdEZXRhaWxzID0gKGVudGl0eSwgcGF0aDpzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKGVudGl0eSkge1xyXG4gICAgICAgIHZhciBuYW1lc3BhY2UgPSBnZXROYW1lc3BhY2UoZW50aXR5KTtcclxuICAgICAgICB2YXIgaWQgPSBnZXROYW1lKGVudGl0eSk7XHJcbiAgICAgICAgJGxvY2F0aW9uLnBhdGgoVXJsSGVscGVycy5qb2luKCcva3ViZXJuZXRlcy9uYW1lc3BhY2UnLCBuYW1lc3BhY2UsIHBhdGgsIGlkKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbG9nLndhcm4oXCJObyBlbnRpdHkgZm9yIHZpZXdEZXRhaWxzIVwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1dKTtcclxuXHJcbiAgdmFyIHNjb3BlTmFtZSA9IFwiT3ZlcnZpZXdDb250cm9sbGVyXCI7XHJcblxyXG4gIHZhciBPdmVydmlld0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKHNjb3BlTmFtZSwgW1wiJHNjb3BlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCAoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG4gICAgJHNjb3BlLm5hbWUgPSBzY29wZU5hbWU7XHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgLy8kc2NvcGUuc3ViVGFiQ29uZmlnID0gW107XHJcbiAgfV0pO1xyXG5cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIFBpcGVsaW5lc0NvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUGlwZWxpbmVzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDpLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgJGRpYWxvZywgJHdpbmRvdywgJHRlbXBsYXRlQ2FjaGUsICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsIGxvY2FsU3RvcmFnZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG5cclxuICAgICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIExldHMgdXBkYXRlIHRoZSB2YXJpb3VzIGRhdGEgdG8gam9pbiB0aGVtIHRvZ2V0aGVyIHRvIGEgcGlwZWxpbmUgbW9kZWxcclxuICAgICAgICovXHJcbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgICAgdmFyIHBpcGVsaW5lU3RlcHMgPSB7fTtcclxuICAgICAgICBpZiAoJHNjb3BlLmJ1aWxkQ29uZmlncyAmJiAkc2NvcGUuYnVpbGRzICYmICRzY29wZS5kZXBsb3ltZW50Q29uZmlncykge1xyXG4gICAgICAgICAgZW5yaWNoQnVpbGRDb25maWdzKCRzY29wZS5idWlsZENvbmZpZ3MsICRzY29wZS5idWlsZHMpO1xyXG4gICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuYnVpbGRDb25maWdzLCAoYnVpbGRDb25maWcpID0+IHtcclxuICAgICAgICAgICAgdmFyIHBpcGVsaW5lS2V5ID0gY3JlYXRlUGlwZWxpbmVLZXkoYnVpbGRDb25maWcpO1xyXG4gICAgICAgICAgICBpZiAocGlwZWxpbmVLZXkpIHtcclxuICAgICAgICAgICAgICBwaXBlbGluZVN0ZXBzW3BpcGVsaW5lS2V5XSA9IHtcclxuICAgICAgICAgICAgICAgIGJ1aWxkQ29uZmlnOiBidWlsZENvbmZpZyxcclxuICAgICAgICAgICAgICAgIGJ1aWxkczogW10sXHJcbiAgICAgICAgICAgICAgICB0cmlnZ2VyZWRCeTogbnVsbCxcclxuICAgICAgICAgICAgICAgIHRyaWdnZXJzU3RlcHM6IFtdLFxyXG4gICAgICAgICAgICAgICAgJGNsYXNzOiAncGlwZWxpbmUtYnVpbGQnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuYnVpbGRzLCAoYnVpbGQpID0+IHtcclxuICAgICAgICAgICAgdmFyIHBpcGVsaW5lS2V5ID0gY3JlYXRlUGlwZWxpbmVLZXkoYnVpbGQpO1xyXG4gICAgICAgICAgICBpZiAocGlwZWxpbmVLZXkpIHtcclxuICAgICAgICAgICAgICB2YXIgcGlwZWxpbmUgPSBwaXBlbGluZVN0ZXBzW3BpcGVsaW5lS2V5XTtcclxuICAgICAgICAgICAgICBpZiAoIXBpcGVsaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwid2FybmluZyBubyBwaXBlbGluZSBnZW5lcmF0ZWQgZm9yIGJ1aWxkQ29uZmlnIGZvciBrZXkgXCIgKyBwaXBlbGluZUtleSArIFwiIGZvciBidWlsZCBcIiArIGFuZ3VsYXIudG9Kc29uKGJ1aWxkLCB0cnVlKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIndhcm5pbmcgbm8gcGlwZWxpbmUgZ2VuZXJhdGVkIGZvciBidWlsZENvbmZpZyBmb3Iga2V5IFwiICsgcGlwZWxpbmVLZXkgKyBcIiBmb3IgYnVpbGQgXCIgKyBidWlsZC4kbmFtZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHBpcGVsaW5lLmJ1aWxkcy5wdXNoKGJ1aWxkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIFRPRE8gbm93IHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgdHJpZ2dlcnMgdG8gZmlndXJlIG91dCB3aGljaCBwaXBlbGluZVN0ZXBzIHRyaWdnZXJzIGVhY2ggcGlwZWxpbmVTdGVwXHJcblxyXG5cclxuICAgICAgICAgIC8vIG5vdyBsZXRzIGNyZWF0ZSBhbiBhcnJheSBvZiBhbGwgcGlwZWxpbmVzLCBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBrbm93biBzdGVwIHdpdGggYSBsaXN0IG9mIHRoZSBzdGVwc1xyXG5cclxuICAgICAgICAgIHZhciBwaXBlbGluZXMgPSBbXTtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChwaXBlbGluZVN0ZXBzLCAocGlwZWxpbmVTdGVwLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFwaXBlbGluZVN0ZXAudHJpZ2dlcmVkQnkpIHtcclxuICAgICAgICAgICAgICAvLyB3ZSBhcmUgYSByb290IHN0ZXAuLi4uXHJcbiAgICAgICAgICAgICAgcGlwZWxpbmVzLnB1c2gocGlwZWxpbmVTdGVwKTtcclxuICAgICAgICAgICAgICAvLyBub3cgbGV0cyBhZGQgYWxsIHRoZSBzdGVwcyBmb3IgdGhpcyBrZXkuLi5cclxuICAgICAgICAgICAgICBwaXBlbGluZVN0ZXAudHJpZ2dlcnNTdGVwcy5wdXNoKHBpcGVsaW5lU3RlcCk7XHJcbiAgICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKHBpcGVsaW5lU3RlcHMsIChzdGVwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RlcC50cmlnZ2VyZWRCeSA9PT0ga2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgIHBpcGVsaW5lU3RlcC50cmlnZ2Vyc1N0ZXBzLnB1c2goc3RlcCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuZGVwbG95bWVudENvbmZpZ3MsIChkZXBsb3ltZW50Q29uZmlnKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZGVwbG95bWVudENvbmZpZy5raW5kKSB7XHJcbiAgICAgICAgICAgICAgZGVwbG95bWVudENvbmZpZy5raW5kID0gXCJEZXBsb3ltZW50Q29uZmlnXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKGRlcGxveW1lbnRDb25maWcudHJpZ2dlcnMsICh0cmlnZ2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0cmlnZ2VyLnR5cGU7XHJcbiAgICAgICAgICAgICAgdmFyIGltYWdlQ2hhbmdlUGFyYW1zID0gdHJpZ2dlci5pbWFnZUNoYW5nZVBhcmFtcztcclxuICAgICAgICAgICAgICBpZiAoaW1hZ2VDaGFuZ2VQYXJhbXMgJiYgdHlwZSA9PT0gXCJJbWFnZUNoYW5nZVwiKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZnJvbSA9IGltYWdlQ2hhbmdlUGFyYW1zLmZyb207XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJvbSkge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGZyb20ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGZyb20ua2luZCA9PT0gXCJJbWFnZVJlcG9zaXRvcnlcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSBpbWFnZUNoYW5nZVBhcmFtcy50YWcgfHwgXCJsYXRlc3RcIjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gbm93IGxldHMgZmluZCBhIHBpcGVsaW5lIHN0ZXAgd2hpY2ggZmlyZXMgZnJvbSB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2gocGlwZWxpbmVTdGVwcywgKHBpcGVsaW5lU3RlcCwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0byA9IENvcmUucGF0aEdldChwaXBlbGluZVN0ZXAsIFtcImJ1aWxkQ29uZmlnXCIsIFwicGFyYW1ldGVyc1wiLCBcIm91dHB1dFwiLCBcInRvXCJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvICYmICh0by5raW5kID09PSBcIkltYWdlUmVwb3NpdG9yeVwiIHx8IHRvLmtpbmQgPT09IFwiSW1hZ2VTdHJlYW1cIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9OYW1lID0gdG8ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9OYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBDb3JlLnBhdGhHZXQoZGVwbG95bWVudENvbmZpZywgW1widGVtcGxhdGVcIiwgXCJjb250cm9sbGVyVGVtcGxhdGVcIiwgXCJzZWxlY3RvclwiXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9kcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRwb2RDb3VudGVycyA9IHNlbGVjdG9yID8gY3JlYXRlUG9kQ291bnRlcnMoc2VsZWN0b3IsIEt1YmVybmV0ZXNNb2RlbC5wb2RzRm9yTmFtZXNwYWNlKCksIHBvZHMpIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXBsb3lQaXBlbGluZVN0ZXAgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ29uZmlnOiBkZXBsb3ltZW50Q29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2xhc3M6ICdwaXBlbGluZS1kZXBsb3knLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcG9kQ291bnRlcnM6ICRwb2RDb3VudGVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBvZHM6IHBvZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZVN0ZXAudHJpZ2dlcnNTdGVwcy5wdXNoKGRlcGxveVBpcGVsaW5lU3RlcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAkc2NvcGUucGlwZWxpbmVzID0gcGlwZWxpbmVzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIExldHMgY3JlYXRlIGEgdW5pcXVlIGtleSBmb3IgYnVpbGQgLyBjb25maWcgd2UgY2FuIHVzZSB0byBkbyBsaW5raW5nIG9mIGJ1aWxkcyAvIGNvbmZpZ3MgLyB0cmlnZ2Vyc1xyXG4gICAgICAgKi9cclxuICAgICAgZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmVLZXkoYnVpbGRDb25maWcpIHtcclxuICAgICAgICByZXR1cm4gQ29yZS5wYXRoR2V0KGJ1aWxkQ29uZmlnLCBbXCJwYXJhbWV0ZXJzXCIsIFwic291cmNlXCIsIFwiZ2l0XCIsIFwidXJpXCJdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJHNjb3BlLiRrZWVwUG9sbGluZyA9ICgpID0+IGtlZXBQb2xsaW5nTW9kZWw7XHJcbiAgICAgICRzY29wZS5mZXRjaCA9IFBvbGxIZWxwZXJzLnNldHVwUG9sbGluZygkc2NvcGUsIChuZXh0OigpID0+IHZvaWQpID0+IHtcclxuICAgICAgICB2YXIgcmVhZHkgPSAwO1xyXG4gICAgICAgIHZhciBudW1TZXJ2aWNlcyA9IDM7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIG1heWJlTmV4dCgpIHtcclxuICAgICAgICAgIGlmICgrK3JlYWR5ID49IG51bVNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIG5leHQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB1cmwgPSBidWlsZHNSZXN0VVJMKCk7XHJcbiAgICAgICAgJGh0dHAuZ2V0KHVybCkuXHJcbiAgICAgICAgICBzdWNjZXNzKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICRzY29wZS5idWlsZHMgPSBlbnJpY2hCdWlsZHMoZGF0YS5pdGVtcyk7XHJcbiAgICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1heWJlTmV4dCgpO1xyXG4gICAgICAgICAgfSkuXHJcbiAgICAgICAgICBlcnJvcihmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgbG9nLndhcm4oXCJGYWlsZWQgdG8gbG9hZCBcIiArIHVybCArIFwiIFwiICsgZGF0YSArIFwiIFwiICsgc3RhdHVzKTtcclxuICAgICAgICAgICAgbWF5YmVOZXh0KCk7XHJcblxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgdXJsID0gYnVpbGRDb25maWdzUmVzdFVSTCgpO1xyXG4gICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAkc2NvcGUuYnVpbGRDb25maWdzID0gZGF0YS5pdGVtcztcclxuICAgICAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWF5YmVOZXh0KCk7XHJcbiAgICAgICAgICB9KS5cclxuICAgICAgICAgIGVycm9yKGZ1bmN0aW9uIChkYXRhLCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZykge1xyXG4gICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBsb2FkIFwiICsgdXJsICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgICBtYXliZU5leHQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIHVybCA9IGRlcGxveW1lbnRDb25maWdzUmVzdFVSTCgpO1xyXG4gICAgICAgICRodHRwLmdldCh1cmwpLlxyXG4gICAgICAgICAgc3VjY2VzcyhmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAkc2NvcGUuZGVwbG95bWVudENvbmZpZ3MgPSBkYXRhLml0ZW1zO1xyXG4gICAgICAgICAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtYXliZU5leHQoKTtcclxuICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgZXJyb3IoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgaGVhZGVycywgY29uZmlnKSB7XHJcbiAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIGxvYWQgXCIgKyB1cmwgKyBcIiBcIiArIGRhdGEgKyBcIiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIG1heWJlTmV4dCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgJHNjb3BlLmZldGNoKCk7XHJcbiAgICB9XSk7XHJcblxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBQb2RDb250cm9sbGVyID0gY29udHJvbGxlcihcIlBvZENvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIlNlcnZpY2VSZWdpc3RyeVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIiR3aW5kb3dcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIFNlcnZpY2VSZWdpc3RyeSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCAkd2luZG93LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsO1xyXG5cclxuICAgICRzY29wZS5pdGVtQ29uZmlnID0ge1xyXG4gICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgJ2NvbnRhaW5lcnMvaW1hZ2UkJzoge1xyXG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnaW1hZ2VUZW1wbGF0ZS5odG1sJylcclxuICAgICAgICB9LFxyXG4gICAgICAgICdzdGF0dXMvcGhhc2UnOiB7XHJcbiAgICAgICAgICB0ZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KCdzdGF0dXNUZW1wbGF0ZS5odG1sJylcclxuICAgICAgICB9LFxyXG4gICAgICAgICdcXFxcL0VudlxcXFwvJzoge1xyXG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnZW52SXRlbVRlbXBsYXRlLmh0bWwnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ15cXFxcL2xhYmVscyQnOiB7XHJcbiAgICAgICAgICB0ZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KCdsYWJlbFRlbXBsYXRlLmh0bWwnKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ1xcXFwvZW52XFxcXC9rZXkkJzoge1xyXG4gICAgICAgICAgaGlkZGVuOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnBvZHMnLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0sIHRydWUpO1xyXG5cclxuICAgICRzY29wZS5mbGlwUmF3ID0gKCkgPT4ge1xyXG4gICAgICAkc2NvcGUucmF3TW9kZSA9ICEkc2NvcGUucmF3TW9kZTtcclxuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLm9wZW5Mb2dzID0gKCkgPT4ge1xyXG4gICAgICB2YXIgcG9kcyA9IFskc2NvcGUuaXRlbV07XHJcbiAgICAgIG9wZW5Mb2dzRm9yUG9kcyhTZXJ2aWNlUmVnaXN0cnksICR3aW5kb3csIEt1YmVybmV0ZXNNb2RlbC5jdXJyZW50TmFtZXNwYWNlKCksIHBvZHMpO1xyXG4gICAgfTtcclxuXHJcbiAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAgICRzY29wZS5pdGVtID0gJHNjb3BlLm1vZGVsLmdldFBvZChLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UsICRzY29wZS5pZCk7XHJcbiAgICAgIGlmICgkc2NvcGUuaXRlbSkge1xyXG4gICAgICAgICRzY29wZS5yYXdNb2RlbCA9IHRvUmF3WWFtbCgkc2NvcGUuaXRlbSk7XHJcbiAgICAgIH1cclxuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgIH1cclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIFBvZEVkaXRDb250cm9sbGVyID0gY29udHJvbGxlcihcIlBvZEVkaXRDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIlNjaGVtYVJlZ2lzdHJ5XCIsXHJcbiAgICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNTY2hlbWEsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCwgc2NoZW1hczpIYXd0aW9Gb3Jtcy5TY2hlbWFSZWdpc3RyeSkgPT4ge1xyXG5cclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAkc2NvcGUuc2NoZW1hID0gS3ViZXJuZXRlc1NjaGVtYTtcclxuICAgICRzY29wZS5jb25maWcgPSBzY2hlbWFzLmNsb25lU2NoZW1hKFwiaW8uZmFicmljOC5rdWJlcm5ldGVzLmFwaS5tb2RlbC5Qb2RcIik7XHJcbiAgICAvLyRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLmt1YmVybmV0ZXNfdjFiZXRhMl9Qb2Q7XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdXBkYXRlRGF0YSgpO1xyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGEoKSB7XHJcbiAgICAgIGlmICgkc2NvcGUuaWQpIHtcclxuICAgICAgICAkc2NvcGUuZW50aXR5ID0gJHNjb3BlLm1vZGVsLmdldFBvZChLdWJlcm5ldGVzU3RhdGUuc2VsZWN0ZWROYW1lc3BhY2UsICRzY29wZS5pZCk7XHJcbiAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLnNhdmUgPSAoKT0+e1xyXG4gICAgICBjb25zb2xlLmxvZygkc2NvcGUuZW50aXR5KTtcclxuICAgIH1cclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ0ZXJtLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICB2YXIgbG9nID0gTG9nZ2VyLmdldChcImt1YmVybmV0ZXMtcG9kLWxvZ3NcIik7XHJcblxyXG4gIF9tb2R1bGUuc2VydmljZShcIlBvZExvZ1JlcGxhY2VtZW50c1wiLCAoKSA9PiB7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUucnVuKChQb2RMb2dSZXBsYWNlbWVudHMpID0+IHtcclxuICAgIHZhciBsb2cgPSBMb2dnZXIuZ2V0KFwicG9kLWxvZy1yZXBsYWNlcnNcIik7XHJcbiAgICAvLyBBZGQgQU5TSSBlc2NhcGUgY2hhcmFjdGVyIHJlcGxhY2VyXHJcbiAgICAvLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21tYWxlY2tpL2Fuc2lzcGFuXHJcbiAgICB2YXIgY29sb3JzID0ge1xyXG4gICAgICAnMzAnOiAnYmxhY2snLFxyXG4gICAgICAnMzEnOiAncmVkJyxcclxuICAgICAgJzMyJzogJ2dyZWVuJyxcclxuICAgICAgJzMzJzogJ3llbGxvdycsXHJcbiAgICAgICczNCc6ICdibHVlJyxcclxuICAgICAgJzM1JzogJ3B1cnBsZScsXHJcbiAgICAgICczNic6ICdjeWFuJyxcclxuICAgICAgJzM3JzogJ3doaXRlJyBcclxuICAgIH1cclxuICAgIFBvZExvZ1JlcGxhY2VtZW50cy5wdXNoKChtc2cpID0+IHtcclxuICAgICAgaWYgKCFtc2cpIHtcclxuICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgICB9XHJcbiAgICAgIHZhciBlbmQgPSBcIjwvc3Bhbj5cIjtcclxuICAgICAgXy5mb3JPd24oY29sb3JzLCAoY29sb3IsIGNvZGUpID0+IHtcclxuICAgICAgICB2YXIgc3RhcnQgPSBgPHNwYW4gY2xhc3M9XCJgICsgY29sb3IgKyBgXCI+YDtcclxuICAgICAgICBtc2cgPSBtc2cucmVwbGFjZShuZXcgUmVnRXhwKCdcXDAzM1xcXFxbJyArIGNvZGUgKyAnbScsICdnJyksIHN0YXJ0KVxyXG4gICAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcMDMzXFxcXFswOycgKyBjb2RlICsgJ20nLCAnZycpLCBzdGFydCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvXFwwMzNcXFsxbS9nLCAnPGI+JykucmVwbGFjZSgvXFwwMzNcXFsyMm0vZywgJzwvYj4nKTtcclxuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbM20vZywgJzxpPicpLnJlcGxhY2UoL1xcMDMzXFxbMjNtL2csICc8L2k+Jyk7XHJcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcW20vZywgZW5kKTtcclxuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbMG0vZywgZW5kKTtcclxuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbMzltL2csIGVuZCk7XHJcbiAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKC9cXDAzM1xcWzJtL2csICc8c3Bhbj4nKTtcclxuICAgICAgbXNnID0gbXNnLnJlcGxhY2UoL1xcMDMzXFxbMDszOW0vZywgZW5kKTtcclxuICAgICAgbG9nLmRlYnVnKFwiUnVubmluZyByZXBsYWNlbWVudCBvbiBtZXNzYWdlOiBcIiwgbXNnKTtcclxuICAgICAgcmV0dXJuIG1zZztcclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICBfbW9kdWxlLmNvbnRyb2xsZXIoXCJLdWJlcm5ldGVzLlBvZExvZ0xpbmtDb250cm9sbGVyXCIsICgkc2NvcGUsICRpbnRlcnZhbCwgVGVybWluYWxTZXJ2aWNlLCAkdGVtcGxhdGVDYWNoZSkgPT4ge1xyXG5cclxuICAgICRzY29wZS5vcGVuTG9ncyA9IChlbnRpdHkpID0+IHtcclxuICAgICAgbG9nLmRlYnVnKFwiT3BlbiBsb2dzOiBcIiwgZW50aXR5KTtcclxuICAgICAgVGVybWluYWxTZXJ2aWNlLm5ld1Rlcm1pbmFsKCRpbnRlcnZhbCwgZW50aXR5Lm1ldGFkYXRhLnNlbGZMaW5rLCBlbnRpdHkuJG9yYWNsZU5hbWUsIGVudGl0eSwkdGVtcGxhdGVDYWNoZS5nZXQoVXJsSGVscGVycy5qb2luKHRlbXBsYXRlUGF0aCwgJ2xvZ1NoZWxsLmh0bWwnKSkpO1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgX21vZHVsZS5kaXJlY3RpdmUoJ3BvZExvZ0Rpc3BsYXknLCAodXNlckRldGFpbHMsIFBvZExvZ1JlcGxhY2VtZW50cykgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdFJyxcclxuICAgICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9kLWxvZy1saW5lc1wiPlxyXG4gICAgICAgICAgPHAgbmctaGlkZT1cImZldGNoZWRcIj5QbGVhc2Ugd2FpdCwgZmV0Y2hpbmcgbG9ncy4uLjwvcD5cclxuICAgICAgICAgIDxwIG5nLWhpZGU9XCJtZXNzYWdlcy5sZW5ndGggfHwgcHJldmlvdXNcIj5WaWV3IDxhIGhyZWY9XCJcIiBuZy1jbGljaz1cInByZXZpb3VzPSFwcmV2aW91c1wiPnByZXZpb3VzIGNvbnRhaW5lciBsb2dzPC9hPj88L3A+XHJcbiAgICAgICAgICA8cCBuZy1yZXBlYXQ9XCJtZXNzYWdlIGluIG1lc3NhZ2VzIHRyYWNrIGJ5ICRpbmRleFwiIG5nLWJpbmQtaHRtbD1cIm1lc3NhZ2VcIj48L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIGAsXHJcbiAgICAgIGxpbms6IChzY29wZTphbnksIGVsZW1lbnQsIGF0dHIpID0+IHtcclxuICAgICAgICB2YXIgbGluayA9IHNjb3BlLiRldmFsKCdwb2RMaW5rJyk7XHJcbiAgICAgICAgdmFyIG5hbWUgPSBzY29wZS4kZXZhbCgnY29udGFpbmVyTmFtZScpO1xyXG5cclxuICAgICAgICBpZiAoIWxpbmspIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNjb3BlLmZldGNoZWQgPSBmYWxzZTtcclxuICAgICAgICBzY29wZS5wcmV2aW91cyA9IGZhbHNlO1xyXG4gICAgICAgIHNjb3BlLm1lc3NhZ2VzID0gW107XHJcblxyXG4gICAgICAgIGxpbmsgPSBVcmxIZWxwZXJzLmpvaW4obWFzdGVyQXBpVXJsKCksIGxpbmssICdsb2cnKTtcclxuICAgICAgICBsaW5rID0gS3ViZXJuZXRlc0FQSS53c1VybChsaW5rKTtcclxuICAgICAgICBsaW5rLnNlYXJjaCh7XHJcbiAgICAgICAgICBmb2xsb3c6IHRydWUsXHJcbiAgICAgICAgICB0YWlsTGluZXM6IDEwMDAsXHJcbiAgICAgICAgICBhY2Nlc3NfdG9rZW46IHVzZXJEZXRhaWxzLnRva2VuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHZhciBtZXNzYWdlcyA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgcHVsbE1lc3NhZ2VzID0gXy5kZWJvdW5jZSgoKSA9PiB7XHJcbiAgICAgICAgICBzY29wZS5tZXNzYWdlcyA9IHNjb3BlLm1lc3NhZ2VzLmNvbmNhdChfLnJlbW92ZShtZXNzYWdlcywgKCkgPT4gdHJ1ZSkubWFwKChtc2cpID0+IHtcclxuICAgICAgICAgICAgUG9kTG9nUmVwbGFjZW1lbnRzLmZvckVhY2goKHJlcGxGdW5jOmFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24ocmVwbEZ1bmMpKSB7XHJcbiAgICAgICAgICAgICAgICBtc2cgPSByZXBsRnVuYyhtc2cpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBtc2c7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICBpZiAoIXNjb3BlLmZldGNoZWQpIHtcclxuICAgICAgICAgICAgc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBDb3JlLiRhcHBseShzY29wZSk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGluaXRTb2NrZXQobGluaykge1xyXG4gICAgICAgICAgc2NvcGUuZmV0Y2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgbWVzc2FnZXMubGVuZ3RoID0gMDtcclxuICAgICAgICAgIHNjb3BlLm1lc3NhZ2VzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KGxpbmsudG9TdHJpbmcoKSwgJ2Jhc2U2NC5iaW5hcnkuazhzLmlvJyk7XHJcbiAgICAgICAgICB3cy5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHdpbmRvdy5hdG9iKGV2ZW50LmRhdGEpO1xyXG4gICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgcHVsbE1lc3NhZ2VzKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgIC8vIHdlJ2xsIGp1c3QgaWdub3JlIHRoZXNlXHJcbiAgICAgICAgICAgICAgLy9sb2cuZGVidWcoXCJGYWlsZWQgdG8gZGVjb2RlIG1lc3NhZ2U6IFwiLCBldmVudC5kYXRhLCBcIiBlcnJvcjogXCIsIGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB3cztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3cyA9IGluaXRTb2NrZXQobGluayk7XHJcblxyXG4gICAgICAgIHNjb3BlLiR3YXRjaCgncHJldmlvdXMnLCAodmFsdWUsIG9sZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSBvbGQpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmsuaGFzU2VhcmNoKCdwcmV2aW91cycpKSB7XHJcbiAgICAgICAgICAgICAgbGluay5yZW1vdmVTZWFyY2goJ3ByZXZpb3VzJykuYWRkU2VhcmNoKCdwcmV2aW91cycsIHNjb3BlLnByZXZpb3VzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsaW5rLmFkZFNlYXJjaCgncHJldmlvdXMnLCBzY29wZS5wcmV2aW91cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd3MuY2xvc2UoKTtcclxuICAgICAgICAgICAgd3MgPSBpbml0U29ja2V0KGxpbmspO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcclxuICAgICAgICAgIGlmICh3cykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIHdzLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWxldGUgd3M7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgX21vZHVsZS5kaXJlY3RpdmUoJ3BvZExvZ1dpbmRvdycsICgkY29tcGlsZSwgVGVybWluYWxTZXJ2aWNlKSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgICBzY29wZTogZmFsc2UsXHJcbiAgICAgIGxpbms6IChzY29wZTphbnksIGVsZW1lbnQsIGF0dHIpID0+IHtcclxuICAgICAgICBhZGRXaW5kb3dBY3Rpb25zKHNjb3BlLCBlbGVtZW50LCBUZXJtaW5hbFNlcnZpY2UpO1xyXG4gICAgICAgIHNjb3BlLmF0Qm90dG9tID0gdHJ1ZTtcclxuICAgICAgICBzY29wZS4kd2F0Y2goJ2F0Qm90dG9tJywgKHZhbCkgPT4geyAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH0pO1xyXG5cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwidXRpbEhlbHBlcnMudHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgRW52SXRlbSA9IGNvbnRyb2xsZXIoXCJFbnZJdGVtXCIsIFtcIiRzY29wZVwiLCAoJHNjb3BlKSA9PiB7XHJcbiAgICB2YXIgcGFydHMgPSAkc2NvcGUuZGF0YS5zcGxpdCgnPScpO1xyXG4gICAgJHNjb3BlLmtleSA9IHBhcnRzLnNoaWZ0KCk7XHJcbiAgICAkc2NvcGUudmFsdWUgPSBwYXJ0cy5qb2luKCc9Jyk7XHJcbiAgfV0pO1xyXG5cclxuICAvLyBtYWluIGNvbnRyb2xsZXIgZm9yIHRoZSBwYWdlXHJcbiAgZXhwb3J0IHZhciBQb2RzID0gY29udHJvbGxlcihcIlBvZHNcIiwgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1BvZHNcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUsIFNlcnZpY2VSZWdpc3RyeSwgJGRpYWxvZywgJHdpbmRvdywgJHRlbXBsYXRlQ2FjaGUsICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsIGxvY2FsU3RvcmFnZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLml0ZW1TY2hlbWEgPSBGb3Jtcy5jcmVhdGVGb3JtQ29uZmlndXJhdGlvbigpO1xyXG5cclxuICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgZGF0YTogJ21vZGVsLnBvZHMnLFxyXG4gICAgICBzaG93U2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICAgIGVuYWJsZVJvd0NsaWNrU2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgbXVsdGlTZWxlY3Q6IHRydWUsXHJcbiAgICAgIHNlbGVjdGVkSXRlbXM6IFtdLFxyXG4gICAgICBmaWx0ZXJPcHRpb25zOiB7XHJcbiAgICAgICAgZmlsdGVyVGV4dDogJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXSB8fCAnJ1xyXG4gICAgICB9LFxyXG4gICAgICBjb2x1bW5EZWZzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6ICdfa2V5JyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXHJcbiAgICAgICAgICBkZWZhdWx0U29ydDogdHJ1ZSxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiaWRUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogJyRzdGF0dXNDc3MnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdTdGF0dXMnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJzdGF0dXNUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGZpZWxkOiAnJGV2ZW50Q291bnQnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdFdmVudHMnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJldmVudFN1bW1hcnlUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogJyRyZXN0YXJ0Q291bnQnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXN0YXJ0cydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiAnJGNyZWF0ZWRUaW1lJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnQWdlJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYWdlVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6ICckaW1hZ2VOYW1lcycsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0ltYWdlcycsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImltYWdlVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6ICckaG9zdCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0hvc3QnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJob3N0VGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6ICckbGFiZWxzVGV4dCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ0xhYmVscycsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImxhYmVsVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmllbGQ6ICckcG9kSVAnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdQb2QgSVAnLFxyXG4gICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIEt1YmVybmV0ZXMuc29ydEJ5UG9kSXAoZmllbGQuJHBvZElQKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLm9wZW5Mb2dzID0gKCkgPT4ge1xyXG4gICAgICB2YXIgcG9kcyA9ICRzY29wZS50YWJsZUNvbmZpZy5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgICBpZiAoIXBvZHMgfHwgIXBvZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKCRzY29wZS5pZCkge1xyXG4gICAgICAgICAgdmFyIGl0ZW0gPSAkc2NvcGUuaXRlbTtcclxuICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHBvZHMgPSBbaXRlbV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIG9wZW5Mb2dzRm9yUG9kcyhTZXJ2aWNlUmVnaXN0cnksICR3aW5kb3csIEt1YmVybmV0ZXNNb2RlbC5jdXJyZW50TmFtZXNwYWNlKCksIHBvZHMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgJHNjb3BlLmRlbGV0ZVByb21wdCA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgICBpZiAoYW5ndWxhci5pc1N0cmluZyhzZWxlY3RlZCkpIHtcclxuICAgICAgICBzZWxlY3RlZCA9IFt7XHJcbiAgICAgICAgICBpZDogc2VsZWN0ZWRcclxuICAgICAgICB9XTtcclxuICAgICAgfVxyXG4gICAgICBVSS5tdWx0aUl0ZW1Db25maXJtQWN0aW9uRGlhbG9nKDxVSS5NdWx0aUl0ZW1Db25maXJtQWN0aW9uT3B0aW9ucz57XHJcbiAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXHJcbiAgICAgICAgaW5kZXg6ICdtZXRhZGF0YS5uYW1lJyxcclxuICAgICAgICBvbkNsb3NlOiAocmVzdWx0OmJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQ6QXJyYXk8S3ViZVBvZD4sIG5leHQ6S3ViZVBvZCkge1xyXG4gICAgICAgICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGluZzogXCIsIGdldE5hbWUobmV4dCkpO1xyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlc1BvZHMuZGVsZXRlKHtcclxuICAgICAgICAgICAgICAgICAgaWQ6IGdldE5hbWUobmV4dClcclxuICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJkZWxldGVkOiBcIiwgZ2V0TmFtZShuZXh0KSk7XHJcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsb2cuZGVidWcoXCJFcnJvciBkZWxldGluZzogXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHRpdGxlOiAnRGVsZXRlIHBvZHM/JyxcclxuICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIHBvZHMgd2lsbCBiZSBkZWxldGVkOicsXHJcbiAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcclxuICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXHJcbiAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcclxuICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcclxuICAgICAgfSkub3BlbigpO1xyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuY3JlYXRlUG9kcz0gKCkgPT4ge1xyXG4gICAgICB2YXIgeGhyPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgey8vNOihqOekuuaVsOaNruW3sue7j+iwg+eUqOWujOaIkFxyXG4gICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7Ly9IVFRQ55qE54q25oCB56CBXHJcbiAgICAgICAgICAgIHZhciBvYmo9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgdmFyIG9iamVjdCA9IHtcclxuICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwibmV3cG9kXCIsXHJcbiAgICAgICAgICAgICAgIFwibGFiZWxzXCI6IHtcclxuICAgICAgICAgICAgICAgICBcImFpbVwiOiBcInRlc3RcIixcclxuICAgICAgICAgICAgICAgICBcImFwcFwiOiBcIm9yYWNsZVwiXHJcbiAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgIFwicGF0aFwiOiAnL2hvbWUvJyxcclxuICAgICAgICAgICAgICAgXCJwb3J0XCI6IDE1MjVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBLdWJlcm5ldGVzLmNyZWF0ZVJDKG9iamVjdCk7XHJcblxyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAvL2FsdGVyKFwic2hpYmFpXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIFwiL29yYWNsZUFwcFBhdGhcIiwgZmFsc2UpOy8v5LiO5pyN5Yqh5Zmo6L+e5o6l5bm25Y+R6YCBXHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgfTtcclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIFJlcGxpY2F0aW9uQ29udHJvbGxlckNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUmVwbGljYXRpb25Db250cm9sbGVyQ29udHJvbGxlclwiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1N0YXRlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLFxyXG4gICAgICAoJHNjb3BlLCBLdWJlcm5ldGVzTW9kZWw6IEt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuXHJcbiAgICAkc2NvcGUua3ViZXJuZXRlcyA9IEt1YmVybmV0ZXNTdGF0ZTtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICRzY29wZS5yYXdNb2RlbCA9IG51bGxcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgJHNjb3BlLml0ZW1Db25maWcgPSB7XHJcbiAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICAnXlxcXFwvbGFiZWxzJCc6IHtcclxuICAgICAgICAgIHRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoJ2xhYmVsVGVtcGxhdGUuaHRtbCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS4kb24oJ2t1YmVybmV0ZXNNb2RlbFVwZGF0ZWQnLCAoKSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwucG9kcycsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfSwgdHJ1ZSk7XHJcblxyXG4gICAgJHNjb3BlLmZsaXBSYXcgPSAoKSA9PiB7XHJcbiAgICAgICRzY29wZS5yYXdNb2RlID0gISRzY29wZS5yYXdNb2RlO1xyXG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgfTtcclxuXHJcbiAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgaWYgKCRzY29wZS5kaXJ0eSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICAgJHNjb3BlLml0ZW0gPSAkc2NvcGUubW9kZWwuZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKEt1YmVybmV0ZXNTdGF0ZS5zZWxlY3RlZE5hbWVzcGFjZSwgJHNjb3BlLmlkKTtcclxuICAgICAgaWYgKCRzY29wZS5pdGVtKSB7XHJcbiAgICAgICAgJHNjb3BlLnJhd01vZGVsID0gdG9SYXdZYW1sKCRzY29wZS5pdGVtKTtcclxuICAgICAgfVxyXG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgfVxyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgUmVwbGljYXRpb25Db250cm9sbGVyRWRpdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiUmVwbGljYXRpb25Db250cm9sbGVyRWRpdENvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiU2NoZW1hUmVnaXN0cnlcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBzY2hlbWFzOkhhd3Rpb0Zvcm1zLlNjaGVtYVJlZ2lzdHJ5KSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgbG9nLmRlYnVnKFwiU2NoZW1hOiBcIiwgJHNjb3BlLnNjaGVtYSk7XHJcbiAgICAkc2NvcGUuY29uZmlnID0gc2NoZW1hcy5jbG9uZVNjaGVtYShcImlvLmZhYnJpYzgua3ViZXJuZXRlcy5hcGkubW9kZWwuUmVwbGljYXRpb25Db250cm9sbGVyXCIpO1xyXG4gICAgLy8kJHNjb3BlLmNvbmZpZyA9IEt1YmVybmV0ZXNTY2hlbWEuZGVmaW5pdGlvbnMua3ViZXJuZXRlc192MWJldGEzX1JlcGxpY2F0aW9uQ29udHJvbGxlcjtcclxuXHJcbiAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgJHNjb3BlLiRvbignJHJvdXRlVXBkYXRlJywgKCRldmVudCkgPT4ge1xyXG4gICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgaWYgKCRzY29wZS5pZCkge1xyXG4gICAgICAgICRzY29wZS5lbnRpdHkgPSAkc2NvcGUubW9kZWwuZ2V0UmVwbGljYXRpb25Db250cm9sbGVyKEt1YmVybmV0ZXNTdGF0ZS5zZWxlY3RlZE5hbWVzcGFjZSwgJHNjb3BlLmlkKTtcclxuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc01vZGVsLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9jdXN0b21BbGVydC50c1wiLz5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIFJlcGxpY2F0aW9uQ29udHJvbGxlcnMgPSBjb250cm9sbGVyKFwiUmVwbGljYXRpb25Db250cm9sbGVyc1wiLFxyXG4gICAgW1wiJHNjb3BlXCIsIFwiS3ViZXJuZXRlc01vZGVsXCIsIFwiS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnNcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkNvbmZpZ3NNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCAgS3ViZXJuZXRlc1JlcGxpY2F0aW9uQ29udHJvbGxlcnM6bmcucmVzb3VyY2UuSVJlc291cmNlQ2xhc3M8YW55PiwgS3ViZXJuZXRlc1BvZHM6bmcucmVzb3VyY2UuSVJlc291cmNlQ2xhc3M8YW55PiwgQ29uZmlnc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUuY29uZmlncyA9IENvbmZpZ3NNb2RlbDtcclxuICAgICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDsgICAgXHJcblxyXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICBkYXRhOiAnbW9kZWwucmVwbGljYXRpb25Db250cm9sbGVycycsXHJcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcclxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcclxuICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICAgeyBmaWVsZDogJyRvcmFjbGVOYW1lJyxcclxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+acjeWKoeWQjeensCcsXHJcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIiksXHJcbiAgICAgICAgICAgY3VzdG9tU29ydEZpZWxkOiAoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgIHJldHVybiBmaWVsZDtcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgIH0sXHJcbiAgICAgICAgIC8veyBmaWVsZDogJyRyZXBsaWNhcycsXHJcbiAgICAgICAgIC8vICBkaXNwbGF5TmFtZTogJ1NjYWxlJyxcclxuICAgICAgICAgLy8gIGNlbGxUZW1wbGF0ZTokdGVtcGxhdGVDYWNoZS5nZXQoXCJkZXNpcmVkUmVwbGljYXMuaHRtbFwiKVxyXG4gICAgICAgICAvL30sXHJcbiAgICAgICAgIHsgZmllbGQ6ICckcG9kcy5hZ2UnLFxyXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5ZCv5Yqo5pe26Ze0JyxcclxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6JHRlbXBsYXRlQ2FjaGUuZ2V0KFwiYWdlVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICB9LFxyXG4gICAgICAgICB7IGZpZWxkOiAnJGxhYmVsc1RleHQnLFxyXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5pWw5o2u5qCH562+JyxcclxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImxhYmVsVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICB9LFxyXG4gICAgICAgICB7IGZpZWxkOiAnJHBvZHMnLFxyXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn6L+e5o6l5Y+C5pWwJyxcclxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImNvbm5lY3RQYXJhbVRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICAgfSwgICAgICAgIFxyXG4gICAgICAgICB7IGZpZWxkOiAnJHBvZENvdW50ZXJzJyxcclxuICAgICAgICAgICBkaXNwbGF5TmFtZTogJ+acjeWKoeeKtuaAgScsXHJcbiAgICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJwb2RDb3VudHNBbmRMaW5rVGVtcGxhdGUuaHRtbFwiKSxcclxuICAgICAgICAgICBjdXN0b21Tb3J0RmllbGQ6IChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICAgY29uc29sZS5sb2coZmllbGQpO1xyXG4gICAgICAgICAgICAgaWYoZmllbGQuJHBvZENvdW50ZXJzLnJlYWR5ICl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMztcclxuICAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkLiRwb2RDb3VudGVycy52YWxpZCB8fCBmaWVsZC4kcG9kQ291bnRlcnMud2FpdGluZyl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMjtcclxuICAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkLiRwb2RDb3VudGVycy5lcnJvcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICB9LFxyXG4gICAgICAgICB7IGZpZWxkOiAnJGV4dHJhY3RTdGF0dXMnLFxyXG4gICAgICAgICAgIGRpc3BsYXlOYW1lOiAn5pWw5o2u5rGH5oC754q25oCBJyxcclxuICAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImRhdGFTdW1tYXJ5VGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgICB9XHJcbiAgICAgIF0sXHJcbiAgICAgIHNvcnRJbmZvOiB7XHJcbiAgICAgICAgc29ydEJ5OiBcIiRvcmFjbGVOYW1lXCIsXHJcbiAgICAgICAgYXNjZW5kaW5nOiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgIFxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHsgICAgICBcclxuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoc2VsZWN0ZWQpKSB7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xyXG4gICAgICAgICAgaWQ6IHNlbGVjdGVkXHJcbiAgICAgICAgfV07XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGV4dHJhY3RJdGVtcyA9IGNoZWNrRm9yRXh0cmFjdChzZWxlY3RlZCk7XHJcbiAgICAgIGlmKGV4dHJhY3RJdGVtcy5sZW5ndGggPT0gMCl7XHJcbiAgICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xyXG4gICAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXHJcbiAgICAgICAgICBpbmRleDogJ21ldGFkYXRhLm5hbWUnLFxyXG4gICAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChzZWxlY3RlZDpBcnJheTxLdWJlUG9kPiwgbmV4dDpLdWJlUG9kKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dCkgeyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5yZXNpemVDb250cm9sbGVyKCRodHRwLCBLdWJlcm5ldGVzQXBpVVJMLCBuZXh0LCAwLCAoKSA9PiB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzUmVwbGljYXRpb25Db250cm9sbGVycy5kZWxldGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgIGlkOiBnZXROYW1lKG5leHQpXHJcbiAgICAgICAgICAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4geyAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGlmKG5leHQubWV0YWRhdGEubGFiZWxzLnN0eWxlID09PSBcIm9yYWNsZVwiKXsgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIFwiL2phdmEvY29uc29sZS9hcGkvY2FuY2VsT3JhY2xlQ29uZWN0aW9uXCIsIFwiZGVsZXRlXCIsIG5leHQsIDApOyAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpOyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0aXRsZTogJ+aYr+WQpumcgOimgeWIoOmZpG9yYWNsZeacjeWKoe+8nycsXHJcbiAgICAgICAgICBhY3Rpb246ICfku6XkuIvnmoRvcmFjbGXmnI3liqHlsIbkvJrooqvliKDpmaQ6JyxcclxuICAgICAgICAgIG9rVGV4dDogJ+WIoOmZpCcsXHJcbiAgICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlciBzal9idG5fY2lyJyxcclxuICAgICAgICAgIGN1c3RvbTogXCLor6XmnI3liqHliKDpmaTlkI7lsIbkvJrmuIXpmaRvcmFjbGXlr7nlupTmnI3liqHnmoTnq6/lj6PnrYnotYTmupDljaDnlKjvvIzkvYbkuI3liKDpmaTmlbDmja7mlofku7bvvIzmmK/lkKbliKDpmaTvvIzor7fnoa7orqTvvIFcIixcclxuICAgICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmcgc2pfYWxlcnQtd2FybmluZ1wiLFxyXG4gICAgICAgICAgY2FuY2VsVGV4dDogXCLlj5bmtohcIixcclxuICAgICAgICAgIGNhbmNlbENsYXNzOiAnc2pfYnRuX2dyZXknXHJcbiAgICAgICAgfSkub3BlbigpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICAgIHZhciBuYW1lID0gXCJcIjtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChleHRyYWN0SXRlbXMsIChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIG5hbWUgKz0gaXRlbS4kb3JhY2xlTmFtZSArIFwiLFwiO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC8vYWxlcnQoXCLliKDpmaTmnI3liqHlpLHotKU6XCIgKyBuYW1lICsgIFwi5pyN5Yqh5q2j5Zyo5omn6KGM5rGH5oC75pON5L2c77yM5LiN6IO96KKr5Yig6ZmkXCIpO1xyXG4gICAgICAgICAgQ29uZmlncy5jdXN0b21BbGVydChcIuaPkOekulwiLCBcIuaTjeS9nOWksei0pTrmraPlnKjmiafooYzmsYfmgLvmk43kvZznmoTmnI3liqHkuI3og73ooqvliKDpmaTvvIFcIiwgJycsbnVsbCwgMCwgXCJlcnJvclwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5jcmVhdGVSQ3M9ICgpID0+IHsgXHJcbiAgICAgICAkaHR0cCh7XHJcbiAgICAgICAgICAgICAgIHVybDogJy9qYXZhL2NvbnNvbGUvYXBpL2NhbmNlbE9yYWNsZUNvbmVjdGlvbicsXHJcbiAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgIG1ldGhvZDonUE9TVCcsXHJcbiAgICAgICAgICAgICAgIHBhcmFtczp7cGFyYW06IFwiZGF0YVwifVxyXG4gICAgICAgICAgIH0pLnN1Y2Nlc3MoZnVuY3Rpb24oZGF0YSxoZWFkZXIsY29uZmlnLHN0YXR1cyl7XHJcbiAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic3VjY2Vzc1wiKTtcclxuICAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbihkYXRhLGhlYWRlcixjb25maWcsc3RhdHVzKXtcclxuICAgICAgICAgICAgICAgLy9sb2cud2FybihcIkZhaWxlZCB0byBjb25uZWN0IFwiICsgY29ubmVjdFBhcmFtICsgXCIgXCIgKyBkYXRhICsgXCIgXCIgKyBzdGF0dXMpO1xyXG4gICAgICAgICAgIH0pOyAgXHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLnN0b3BQcm9tcHQgPSAoc2VsZWN0ZWQpID0+eyAgICAgICAgICBcclxuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoc2VsZWN0ZWQpKSB7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xyXG4gICAgICAgICAgaWQ6IHNlbGVjdGVkXHJcbiAgICAgICAgfV07XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGV4dHJhY3RJdGVtcyA9IGNoZWNrRm9yRXh0cmFjdChzZWxlY3RlZCk7XHJcbiAgICAgIGlmKGV4dHJhY3RJdGVtcy5sZW5ndGggPT0gMCl7XHJcbiAgICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xyXG4gICAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXHJcbiAgICAgICAgICBpbmRleDogJ21ldGFkYXRhLm5hbWUnLFxyXG4gICAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7ICAgICAgICAgIFxyXG4gICAgICAgICAgICAgZnVuY3Rpb24gc3RvcFNlbGVjdGVkKHNlbGVjdGVkOkFycmF5PEt1YmVQb2Q+LCBuZXh0Okt1YmVQb2QpIHtcclxuICAgICAgICAgICAgICAgaWYgKG5leHQpIHsgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICBLdWJlcm5ldGVzLnJlc2l6ZUNvbnRyb2xsZXIoJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIG5leHQsIDAsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgIGlmKG5leHQubWV0YWRhdGEubGFiZWxzLnN0eWxlID09PSBcIm9yYWNsZVwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIFwiL2phdmEvY29uc29sZS9hcGkvY2FuY2VsT3JhY2xlQ29uZWN0aW9uXCIsIFwic3RvcFwiLCBuZXh0LCAwKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgc3RvcFNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTtcclxuICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgc3RvcFNlbGVjdGVkKHNlbGVjdGVkLCBzZWxlY3RlZC5zaGlmdCgpKTsgICAgICAgICAgXHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGl0bGU6ICfmmK/lkKbpnIDopoHlgZzmraJvcmFjbGXmnI3liqHvvJ8nLFxyXG4gICAgICAgIGFjdGlvbjogJ+S7peS4i+eahG9yYWNsZeacjeWKoeWwhuS8muiiq+WBnOatojonLFxyXG4gICAgICAgIG9rVGV4dDogJ+WBnOatoicsXHJcbiAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXIgc2pfYnRuX2NpcicsXHJcbiAgICAgICAgY3VzdG9tOiBcIuivpeacjeWKoeWBnOatouWQjuWwhuaXoOazlee7p+e7reaPkOS+m+i/nuaOpeiuv+mXruacjeWKoe+8jOS9huWPr+mAmui/h+WQr+WKqOaMiemSrumHjeaWsOWQr+WKqOivpeacjeWKoeS7pei/m+ihjOiuv+mXruOAguaYr+WQpuWBnOatou+8jOivt+ehruiupFwiLFxyXG4gICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmcgc2pfYWxlcnQtd2FybmluZ1wiLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6IFwi5Y+W5raIXCIsXHJcbiAgICAgICAgY2FuY2VsQ2xhc3M6ICdzal9idG5fZ3JleSdcclxuICAgICAgICB9KS5vcGVuKCk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgICB2YXIgbmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZXh0cmFjdEl0ZW1zLCAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBuYW1lICs9IGl0ZW0uJG9yYWNsZU5hbWUgKyBcIixcIjtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAvL2FsZXJ0KFwi5YGc5q2i5pyN5Yqh5aSx6LSlOlwiICsgbmFtZSArICBcIuacjeWKoeato+WcqOaJp+ihjOaxh+aAu+aTjeS9nO+8jOS4jeiDveWBnOatolwiKTsgXHJcbiAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOuato+WcqOaJp+ihjOaxh+aAu+aTjeS9nOeahOacjeWKoeS4jeiDveiiq+WBnOatou+8gVwiLCAnJyxudWxsLCAwLCBcImVycm9yXCIpO1xyXG4gICAgICB9XHJcbiAgIH07XHJcblxyXG4gICAkc2NvcGUucmVTdGFydFByb21wdCA9IChzZWxlY3RlZCkgPT4geyAgICBcclxuICAgICAgZnVuY3Rpb24gc3RhcnRTZWxlY3RlZChzZWxlY3RlZDpBcnJheTxLdWJlUG9kPiwgbmV4dDpLdWJlUG9kKXtcclxuICAgICAgICAgaWYobmV4dCl7XHJcbiAgICAgICAgICAgY29uc29sZS5sb2coZ2V0TGFiZWxzKG5leHQpLnN0YXR1cyk7XHJcbiAgICAgICAgICAgIGlmKG5leHQuJHJlcGxpY2FzID09PSAwKXtcclxuICAgICAgICAgICAgICBLdWJlcm5ldGVzLnJlc2l6ZUNvbnRyb2xsZXIoJGh0dHAsIEt1YmVybmV0ZXNBcGlVUkwsIG5leHQsIDEsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXMuY29ubmVjdE9yYWNsZSgkaHR0cCwgJHRpbWVvdXQsIFwiL2phdmEvY29uc29sZS9hcGkvY29ubmVjdE9yYWNsZVwiLCBcInJlU3RhcnRcIiwgbmV4dCwgMjAwKTtcclxuICAgICAgICAgICAgICAgIHN0YXJ0U2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICBpZihnZXRMYWJlbHMobmV4dCkuc3RhdHVzID09IFwiMVwiKVxyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlcy5jb25uZWN0T3JhY2xlKCRodHRwLCAkdGltZW91dCwgXCIvamF2YS9jb25zb2xlL2FwaS9jb25uZWN0T3JhY2xlXCIsIFwicmVTdGFydFwiLCBuZXh0LCAyMDApO1xyXG4gICAgICAgICAgICAgICAgc3RhcnRTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHN0YXJ0U2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpOyAgICAgXHJcbiAgIH07XHJcblxyXG4gICAkc2NvcGUuZXh0cmFjdENsaWNrID0ge1xyXG4gICAgICBpdGVtczogbnVsbCxcclxuICAgICAgc2VsZWN0ZWRJdGVtOiAge25hbWU6IFwi5b2T5YmN5rKh5pyJ5Y+v55So55qE5rGH5oC75bqTXCJ9LFxyXG4gICAgICBkaWFsb2c6IG5ldyBVSS5EaWFsb2coKSxcclxuICAgICAgb25PazogKCkgPT4geyAgICAgICAgICAgICAgXHJcbiAgICAgICAgdmFyIGV4dHJhY3RDbGljayA9ICRzY29wZS5leHRyYWN0Q2xpY2s7ICAgIFxyXG4gICAgICAgIGV4dHJhY3RDbGljay5pdGVtcyA9ICRzY29wZS50YWJsZUNvbmZpZy5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgICAgIEt1YmVybmV0ZXMuZXh0cmFjdERhdGFUb09yYWNsZSgkaHR0cCwgZXh0cmFjdENsaWNrLml0ZW1zLCBleHRyYWN0Q2xpY2suc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICAvL2V4dHJhY3RDbGljay5zZWxlY3RlZEl0ZW0gPSAkc2NvcGUuZmlsdGVyUmVwbGljYXRpb25Db250cm9sbGVyc1swXSB8fCBcIlwiO1xyXG4gICAgICAgIGV4dHJhY3RDbGljay5kaWFsb2cuY2xvc2UoKTtcclxuICAgICAgfSxcclxuICAgICAgb3BlbjogKHNlbGVjdGVkKSA9PiB7ICAgICAgICAgICBcclxuICAgICAgICB2YXIgZXh0cmFjdENsaWNrID0gJHNjb3BlLmV4dHJhY3RDbGljazsgXHJcbiAgICAgICAgaWYoJHNjb3BlLmNvbmZpZ3MgJiYgJHNjb3BlLmNvbmZpZ3Mub3JhY2xlUGFyYW0gaW5zdGFuY2VvZiBBcnJheSAmJiAkc2NvcGUuY29uZmlncy5vcmFjbGVQYXJhbS5sZW5ndGg+MClcclxuICAgICAgICAgICBleHRyYWN0Q2xpY2suc2VsZWN0ZWRJdGVtID0gJHNjb3BlLmNvbmZpZ3Mub3JhY2xlUGFyYW1bMF07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNoZWNrSXNTdGFydFN1Y2Nlc3MoJHNjb3BlLnRhYmxlQ29uZmlnLnNlbGVjdGVkSXRlbXMpOyAgICAgICAgXHJcbiAgICAgICAgaWYocmVzdWx0Lmxlbmd0aCA+MCl7XHJcbiAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOumAieaLqeacjeWKoeS4reWtmOWcqOacquWQr+WKqOeahOaVsOaNru+8jOivt+WFiOWQr+WKqOacjeWKoVwiLCAnJyxudWxsLCAwLCBcImVycm9yXCIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgIGV4dHJhY3RDbGljay5kaWFsb2cub3BlbigpO1xyXG4gICAgICAgIC8qZXh0cmFjdERhdGEuc2VsZWN0ZWRJdGVtID0gJHNjb3BlLmZpbHRlclJlcGxpY2F0aW9uQ29udHJvbGxlcnNbMF0gfHwgXCJcIjtcclxuICAgICAgICAgIGV4dHJhY3REYXRhLml0ZW1zID0gc2VsZWN0ZWQ7Ki9cclxuICAgICAgICAgICR0aW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgJCgnI25ld0RhdGFOYW1lJykuZm9jdXMoKTtcclxuICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgIH0sXHJcbiAgICAgICBjbG9zZTogKCkgPT4ge1xyXG4gICAgICAgICAgICRzY29wZS5leHRyYWN0Q2xpY2suc2VsZWN0ZWRJdGVtID0ge25hbWU6IFwi5b2T5YmN5rKh5pyJ5Y+v55So55qE5rGH5oC75bqTXCJ9O1xyXG4gICAgICAgICAgICRzY29wZS5leHRyYWN0Q2xpY2suZGlhbG9nLmNsb3NlKCk7XHJcbiAgICAgICB9XHJcbiAgIH07XHJcblxyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSW50ZXJmYWNlcy50c1wiLz5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgZnVuY3Rpb24gc2NoZW1hU2V0UmVxdWlyZWQoc2NoZW1hLCBwcm9wZXJ0eU5hbWUsIGlzUmVxdWlyZWQgPSB0cnVlKSB7XHJcbiAgICBpZiAoc2NoZW1hICYmIHByb3BlcnR5TmFtZSkge1xyXG4gICAgICB2YXIgcmVxdWlyZWQgPSBzY2hlbWEucmVxdWlyZWQ7XHJcbiAgICAgIGlmIChpc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgaWYgKCFyZXF1aXJlZCkge1xyXG4gICAgICAgICAgcmVxdWlyZWQgPSBbXTtcclxuICAgICAgICAgIHNjaGVtYS5yZXF1aXJlZCA9IHJlcXVpcmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIV8uY29udGFpbnMocmVxdWlyZWQsIHByb3BlcnR5TmFtZSkpIHtcclxuICAgICAgICAgIHJlcXVpcmVkLnB1c2gocHJvcGVydHlOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHJlcXVpcmVkKSB7XHJcbiAgICAgICAgICB2YXIgaWR4ID0gcmVxdWlyZWQuaW5kZXhPZihwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHJlcXVpcmVkLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgU2VjcmV0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJTZWNyZXRDb250cm9sbGVyXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJLdWJlcm5ldGVzU2NoZW1hXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCIkbG9jYXRpb25cIiwgXCIkcm91dGVQYXJhbXNcIiwgXCIkaHR0cFwiLCBcIiR0aW1lb3V0XCIsIFwiS3ViZXJuZXRlc0FwaVVSTFwiLCBcIks4U0NsaWVudEZhY3RvcnlcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOkt1YmVybmV0ZXMuS3ViZXJuZXRlc01vZGVsU2VydmljZSwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzU2NoZW1hLFxyXG4gICAgICAgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb246bmcuSUxvY2F0aW9uU2VydmljZSwgJHJvdXRlUGFyYW1zLCAkaHR0cCwgJHRpbWVvdXQsIEt1YmVybmV0ZXNBcGlVUkwsIEs4U0NsaWVudEZhY3RvcnkpID0+IHtcclxuXHJcbiAgICAgICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAgICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gICAgICAgICRzY29wZS5pZCA9ICRyb3V0ZVBhcmFtc1tcImlkXCJdO1xyXG5cclxuICAgICAgICBLdWJlcm5ldGVzLmluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcbiAgICAgICAgc2VsZWN0U3ViTmF2QmFyKCRzY29wZSwgXCJTZWNyZXRzXCIsICRzY29wZS5pZCA/IFwiRWRpdCBTZWNyZXQ6IFwiICsgJHNjb3BlLmlkIDogXCJDcmVhdGUgU2VjcmV0XCIpO1xyXG5cclxuICAgICAgICB2YXIga3ViZUNsaWVudCA9IGNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoXCJzZWNyZXRzXCIpO1xyXG5cclxuICAgICAgICB2YXIgb25TYXZlVXJsID0gJGxvY2F0aW9uLnNlYXJjaCgpW1wic2F2ZWRVcmxcIl07XHJcbiAgICAgICAgdmFyIGNyZWF0ZUtpbmQgPSAkbG9jYXRpb24uc2VhcmNoKClbXCJraW5kXCJdO1xyXG5cclxuICAgICAgICAkc2NvcGUuc3NoS2V5cyA9IHNzaFNlY3JldERhdGFLZXlzO1xyXG4gICAgICAgICRzY29wZS5odHRwc0tleXMgPSBodHRwc1NlY3JldERhdGFLZXlzO1xyXG5cclxuICAgICAgICB2YXIgc2VjcmV0TGFiZWxzID0ge1xyXG4gICAgICAgICAgXCJzc2gta2V5XCI6IFwiU1NIIHByaXZhdGUga2V5XCIsXHJcbiAgICAgICAgICBcInNzaC1rZXkucHViXCI6IFwiU1NIIHB1YmxpYyBrZXlcIixcclxuICAgICAgICAgIFwiY2EuY3J0XCI6IFwiQ0EgQ2VydGlmaWNhdGVcIixcclxuICAgICAgICAgIFwiLmRvY2tlcmNmZ1wiOiBcIkRvY2tlciBjb25maWdcIixcclxuICAgICAgICAgIFwidXNlcm5hbWVcIjogXCJVc2VyIG5hbWVcIlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHNlY3JldFRvb2x0aXBzID0ge1xyXG4gICAgICAgICAgXCJzc2gta2V5XCI6IFwiU1NIIHByaXZhdGUga2V5IHRleHQgY29udGVudHNcIixcclxuICAgICAgICAgIFwiY2EuY3J0XCI6IFwiQ2VydGlmaWNhdGUgQXV0aG9yaXR5IChDQSkgQ2VydGlmaWNhdGVcIixcclxuICAgICAgICAgIFwiLmRvY2tlcmNmZ1wiOiBcIkRvY2tlciBjb25maWd1cmF0aW9uIHRva2VuXCJcclxuICAgICAgICB9O1xyXG5cclxuXHJcbiAgICAgICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGlmICgkc2NvcGUuaWQgJiYgISRzY29wZS5zZWNyZXQpIHtcclxuICAgICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICRzY29wZS5wcm9wZXJ0eUtleXMgPSAoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gXy5rZXlzKHNlY3JldExhYmVscyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmNoZWNrTmFtZVVuaXF1ZSA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdmFyIGFuc3dlciA9IHRydWU7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goJHNjb3BlLm1vZGVsLnNlY3JldHMsIChzZWNyZXQpID0+IHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKHNlY3JldCk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgIGFuc3dlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmNoZWNrRmllbGRVbmlxdWUgPSAoa2V5KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gJHNjb3BlLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmhhc0FsbEtleXMgPSAoa2V5cykgPT4ge1xyXG4gICAgICAgICAgdmFyIGFuc3dlciA9IGtleXMgJiYga2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goa2V5cywgKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoISRzY29wZS5lbnRpdHkucHJvcGVydGllc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgYW5zd2VyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAkc2NvcGUuYWRkRmllbGREaWFsb2cgPSB7XHJcbiAgICAgICAgICBjb250cm9sbGVyOiBudWxsLFxyXG4gICAgICAgICAgbmV3UmVwbGljYXM6IDAsXHJcbiAgICAgICAgICBkaWFsb2c6IG5ldyBVSS5EaWFsb2coKSxcclxuICAgICAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICAgICAgJHNjb3BlLmFkZEZpZWxkRGlhbG9nLmRpYWxvZy5jbG9zZSgpO1xyXG4gICAgICAgICAgICAkc2NvcGUuYWRkRGF0YUZpZWxkKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb3BlbjogKGNvbnRyb2xsZXIpID0+IHtcclxuICAgICAgICAgICAgdmFyIGFkZEZpZWxkRGlhbG9nID0gJHNjb3BlLmFkZEZpZWxkRGlhbG9nO1xyXG4gICAgICAgICAgICBhZGRGaWVsZERpYWxvZy5kaWFsb2cub3BlbigpO1xyXG5cclxuICAgICAgICAgICAgJHRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICQoJyNuZXdEYXRhTmFtZScpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjbG9zZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAkc2NvcGUuYWRkRmllbGREaWFsb2cuZGlhbG9nLmNsb3NlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcblxyXG5cclxuICAgICAgICAkc2NvcGUuZW50aXR5Q2hhbmdlZCA9ICgpID0+IHtcclxuICAgICAgICAgICRzY29wZS5jaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAkc2NvcGUuYWRkRmllbGRzID0gKGtleXMpID0+IHtcclxuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChrZXlzLCAoa2V5KSA9PiBhZGRGaWVsZChrZXkpKTtcclxuICAgICAgICAgIENvcmUuJGFwcGx5KCRzY29wZSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYWRkRmllbGQoa2V5KSB7XHJcbiAgICAgICAgICB2YXIgcHJvcGVydHkgPSBjcmVhdGVQcm9wZXJ0eShrZXksIFwiXCIpO1xyXG4gICAgICAgICAgJHNjb3BlLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBwcm9wZXJ0eTtcclxuICAgICAgICAgICRzY29wZS5lbnRpdHkubmV3RGF0YUtleSA9IFwiXCI7XHJcbiAgICAgICAgICAkc2NvcGUuc2hvd0FkZERhdGFGaWVsZEZvcm0gPSBmYWxzZTtcclxuICAgICAgICAgICRzY29wZS5lbnRpdHlDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkc2NvcGUuYWRkRGF0YUZpZWxkID0gKCkgPT4ge1xyXG4gICAgICAgICAgdmFyIGtleSA9ICRzY29wZS5lbnRpdHkubmV3RGF0YUtleTtcclxuICAgICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgYWRkRmllbGQoa2V5KTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAkc2NvcGUuZGVsZXRlUHJvcGVydHkgPSAoa2V5KSA9PiB7XHJcbiAgICAgICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LnByb3BlcnRpZXNba2V5XTtcclxuICAgICAgICAgICAgJHNjb3BlLmVudGl0eUNoYW5nZWQoKTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAkc2NvcGUuY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRzY29wZS5zYXZlID0gKCkgPT4ge1xyXG4gICAgICAgICAgdmFyIGVudGl0eSA9ICRzY29wZS5lbnRpdHkgfHwge307XHJcbiAgICAgICAgICB2YXIgbmFtZSA9IGVudGl0eS5uYW1lO1xyXG4gICAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKCEkc2NvcGUuc2VjcmV0KSB7XHJcbiAgICAgICAgICAgICAgJHNjb3BlLnNlY3JldCA9IHtcclxuICAgICAgICAgICAgICAgIGFwaVZlcnNpb246IEt1YmVybmV0ZXMuZGVmYXVsdEFwaVZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICBraW5kOiBcIlNlY3JldFwiLFxyXG4gICAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogXCJcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHt9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBkYXRhID0ge307XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChlbnRpdHkucHJvcGVydGllcywgKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICAgICAgdmFyIGtleSA9IHByb3BlcnR5LmtleTtcclxuICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0eS52YWx1ZSB8fCBcIlwiO1xyXG4gICAgICAgICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHdpbmRvdy5idG9hKHZhbHVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAkc2NvcGUuc2VjcmV0Lm1ldGFkYXRhLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgICAgICAkc2NvcGUuc2VjcmV0LmRhdGEgPSBkYXRhO1xyXG5cclxuICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCBcIlNhdmluZyBzZWNyZXQgXCIgKyBuYW1lKTtcclxuXHJcbiAgICAgICAgICAgIGt1YmVDbGllbnQucHV0KCRzY29wZS5zZWNyZXQsXHJcbiAgICAgICAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWNyZXRzTGluayA9IG9uU2F2ZVVybCB8fCBEZXZlbG9wZXIubmFtZXNwYWNlTGluaygkc2NvcGUsICRyb3V0ZVBhcmFtcywgXCJzZWNyZXRzXCIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgaWYgKG9uU2F2ZVVybCkge1xyXG4gICAgICAgICAgICAgICAgICBwYXJhbXNbJ3NlY3JldCddID0gbmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICRsb2NhdGlvbi5wYXRoKHNlY3JldHNMaW5rKTtcclxuICAgICAgICAgICAgICAgICRsb2NhdGlvbi5zZWFyY2gocGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwibmF2aWdhdGluZyB0byBVUkw6IFwiICsgc2VjcmV0c0xpbmsgKyBcIiB3aXRoIHBhcmFtcyBcIiArIGFuZ3VsYXIudG9Kc29uKCRsb2NhdGlvbi5zZWFyY2goKSkpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2Vycm9yJywgXCJGYWlsZWQgdG8gc2VjcmV0IFwiICsgbmFtZSArIFwiXFxuXCIgKyBlcnIpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlUHJvcGVydHkoa2V5LCB0ZXh0KSB7XHJcbiAgICAgICAgICB2YXIgbGFiZWwgPSBzZWNyZXRMYWJlbHNba2V5XSB8fCBDb3JlLmh1bWFuaXplVmFsdWUoa2V5KTtcclxuICAgICAgICAgIHZhciB0b29sdGlwID0gc2VjcmV0VG9vbHRpcHNba2V5XSB8fCBcIlZhbHVlIG9mIHRoZSBcIiArIGxhYmVsO1xyXG5cclxuICAgICAgICAgIHZhciByb3dzID0gNTtcclxuICAgICAgICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoXCJcXG5cIikubGVuZ3RoICsgMTtcclxuICAgICAgICAgIGlmIChsaW5lcyA+IHJvd3MpIHtcclxuICAgICAgICAgICAgcm93cyA9IGxpbmVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIHR5cGUgPSBcInRleHRhcmVhXCI7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSBcInVzZXJuYW1lXCIpIHtcclxuICAgICAgICAgICAgdHlwZSA9IFwidGV4dFwiO1xyXG4gICAgICAgICAgICBpZiAoIXRleHQpIHtcclxuICAgICAgICAgICAgICB0ZXh0ID0gY3VycmVudFVzZXJOYW1lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInBhc3N3b3JkXCIpIHtcclxuICAgICAgICAgICAgdHlwZSA9IFwicGFzc3dvcmRcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHtcclxuICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcclxuICAgICAgICAgICAgdG9vbHRpcDogdG9vbHRpcCxcclxuICAgICAgICAgICAgcm93czogcm93cyxcclxuICAgICAgICAgICAgdmFsdWU6IHRleHQsXHJcbiAgICAgICAgICAgIHR5cGU6IHR5cGVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm4gcHJvcGVydHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICAgICAgJHNjb3BlLml0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgJHNjb3BlLmNoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgICAgICRzY29wZS5lbnRpdHkgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6ICRzY29wZS5pZCxcclxuICAgICAgICAgICAgcHJvcGVydGllczoge31cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBpZiAoJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUubW9kZWwuc2VjcmV0cywgKHNlY3JldCkgPT4ge1xyXG4gICAgICAgICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShzZWNyZXQpO1xyXG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSAkc2NvcGUuaWQpIHtcclxuICAgICAgICAgICAgICAgICRzY29wZS5zZWNyZXQgPSBzZWNyZXQ7XHJcbiAgICAgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goc2VjcmV0LmRhdGEsICh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHdpbmRvdy5hdG9iKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBjcmVhdGVQcm9wZXJ0eShrZXksIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAkc2NvcGUuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IHByb3BlcnR5O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoY3JlYXRlS2luZCA9PT0gXCJzc2hcIikge1xyXG4gICAgICAgICAgICAgICRzY29wZS5hZGRGaWVsZHMoJHNjb3BlLnNzaEtleXMpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNyZWF0ZUtpbmQgPT09IFwiaHR0cHNcIikge1xyXG4gICAgICAgICAgICAgICRzY29wZS5hZGRGaWVsZHMoJHNjb3BlLmh0dHBzS2V5cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJHNjb3BlLmZldGNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzTW9kZWwudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ1dGlsSGVscGVycy50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBTZWNyZXRzQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJTZWNyZXRzQ29udHJvbGxlclwiLCBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU3RhdGVcIiwgXCJTZXJ2aWNlUmVnaXN0cnlcIiwgXCIkZGlhbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGxvY2F0aW9uXCIsIFwibG9jYWxTdG9yYWdlXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbDogS3ViZXJuZXRlcy5LdWJlcm5ldGVzTW9kZWxTZXJ2aWNlLCBLdWJlcm5ldGVzU3RhdGUsIFNlcnZpY2VSZWdpc3RyeSwgJGRpYWxvZywgJHdpbmRvdywgJHRlbXBsYXRlQ2FjaGUsICRyb3V0ZVBhcmFtcywgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsIGxvY2FsU3RvcmFnZSwgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUuJG9uKCdrdWJlcm5ldGVzTW9kZWxVcGRhdGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLiRjcmVhdGVTZWNyZXRMaW5rID0gRGV2ZWxvcGVyLm5hbWVzcGFjZUxpbmsoJHNjb3BlLCAkcm91dGVQYXJhbXMsIFwic2VjcmV0Q3JlYXRlXCIpO1xyXG5cclxuICAgIHZhciBrdWJlQ2xpZW50ID0gY3JlYXRlS3ViZXJuZXRlc0NsaWVudChcInNlY3JldHNcIik7XHJcblxyXG4gICAgJHNjb3BlLnRhYmxlQ29uZmlnID0ge1xyXG4gICAgICBkYXRhOiAnbW9kZWwuc2VjcmV0cycsXHJcbiAgICAgIHNob3dTZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcclxuICAgICAgZW5hYmxlUm93Q2xpY2tTZWxlY3Rpb246IGZhbHNlLFxyXG4gICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcclxuICAgICAgc2VsZWN0ZWRJdGVtczogW10sXHJcbiAgICAgIGZpbHRlck9wdGlvbnM6IHtcclxuICAgICAgICBmaWx0ZXJUZXh0OiAkbG9jYXRpb24uc2VhcmNoKClbXCJxXCJdIHx8ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbHVtbkRlZnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWVsZDogJ19rZXknLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdOYW1lJyxcclxuICAgICAgICAgIGRlZmF1bHRTb3J0OiB0cnVlLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJpZFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpZWxkOiAnJGxhYmVsc1RleHQnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdMYWJlbHMnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJsYWJlbFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9LFxyXG4gICAgICBdXHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcclxuICAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcclxuICAgICAgICAgY29sbGVjdGlvbjogc2VsZWN0ZWQsXHJcbiAgICAgICAgIGluZGV4OiAnbWV0YWRhdGEubmFtZScsXHJcbiAgICAgICAgIG9uQ2xvc2U6IChyZXN1bHQ6Ym9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkLCBuZXh0KSB7XHJcbiAgICAgICAgICAgICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAga3ViZUNsaWVudC5kZWxldGUobmV4dCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgICAvLyB1cGRhdGVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICB9LFxyXG4gICAgICAgICB0aXRsZTogJ0RlbGV0ZSBTZWNyZXRzJyxcclxuICAgICAgICAgYWN0aW9uOiAnVGhlIGZvbGxvd2luZyBTZWNyZXRzIHdpbGwgYmUgZGVsZXRlZDonLFxyXG4gICAgICAgICBva1RleHQ6ICdEZWxldGUnLFxyXG4gICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXHJcbiAgICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXHJcbiAgICAgICAgIGN1c3RvbUNsYXNzOiBcImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIlxyXG4gICAgICAgfSkub3BlbigpO1xyXG4gICAgIH07XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIGV4cG9ydCB2YXIgU2VydmljZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKFwiU2VydmljZUNvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUucmF3TW9kZWwgPSBudWxsO1xyXG5cclxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAkc2NvcGUuaXRlbUNvbmZpZyA9IHtcclxuICAgICAgcHJvcGVydGllczoge1xyXG4gICAgICAgICdeXFxcXC9sYWJlbHMkJzoge1xyXG4gICAgICAgICAgdGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldCgnbGFiZWxUZW1wbGF0ZS5odG1sJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLiRvbigna3ViZXJuZXRlc01vZGVsVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLiR3YXRjaCgnbW9kZWwuc2VydmljZXMnLCAobmV3VmFsdWUsIG9sZFZhbHVlKSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0sIHRydWUpO1xyXG5cclxuICAgICRzY29wZS4kb24oJyRyb3V0ZVVwZGF0ZScsICgkZXZlbnQpID0+IHtcclxuICAgICAgdXBkYXRlRGF0YSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLmZsaXBSYXcgPSAoKSA9PiB7XHJcbiAgICAgICRzY29wZS5yYXdNb2RlID0gISRzY29wZS5yYXdNb2RlO1xyXG4gICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgfTtcclxuXHJcbiAgICB1cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgZnVuY3Rpb24gdXBkYXRlRGF0YSgpIHtcclxuICAgICAgJHNjb3BlLmlkID0gJHJvdXRlUGFyYW1zW1wiaWRcIl07XHJcbiAgICAgICRzY29wZS5uYW1lc3BhY2UgPSAkcm91dGVQYXJhbXNbXCJuYW1lc3BhY2VcIl0gfHwgS3ViZXJuZXRlc1N0YXRlLnNlbGVjdGVkTmFtZXNwYWNlO1xyXG4gICAgICAkc2NvcGUuaXRlbSA9ICRzY29wZS5tb2RlbC5nZXRTZXJ2aWNlKCRzY29wZS5uYW1lc3BhY2UsICRzY29wZS5pZCk7XHJcbiAgICAgIGlmICgkc2NvcGUuaXRlbSkge1xyXG4gICAgICAgICRzY29wZS5yYXdNb2RlbCA9IHRvUmF3WWFtbCgkc2NvcGUuaXRlbSk7XHJcbiAgICAgIH1cclxuICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgIH1cclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBleHBvcnQgdmFyIFNlcnZpY2VFZGl0Q29udHJvbGxlciA9IGNvbnRyb2xsZXIoXCJTZXJ2aWNlRWRpdENvbnRyb2xsZXJcIixcclxuICAgIFtcIiRzY29wZVwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNTY2hlbWFcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCJLdWJlcm5ldGVzQXBpVVJMXCIsIFwiU2NoZW1hUmVnaXN0cnlcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc1NjaGVtYSxcclxuICAgICAgICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uOm5nLklMb2NhdGlvblNlcnZpY2UsICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBLdWJlcm5ldGVzQXBpVVJMLCBzY2hlbWFzOkhhd3Rpb0Zvcm1zLlNjaGVtYVJlZ2lzdHJ5KSA9PiB7XHJcblxyXG4gICAgJHNjb3BlLmt1YmVybmV0ZXMgPSBLdWJlcm5ldGVzU3RhdGU7XHJcbiAgICAkc2NvcGUubW9kZWwgPSBLdWJlcm5ldGVzTW9kZWw7XHJcbiAgICAkc2NvcGUuaWQgPSAkcm91dGVQYXJhbXNbXCJpZFwiXTtcclxuICAgICRzY29wZS5zY2hlbWEgPSBLdWJlcm5ldGVzU2NoZW1hO1xyXG4gICAgJHNjb3BlLmNvbmZpZyA9IHNjaGVtYXMuY2xvbmVTY2hlbWEoXCJpby5mYWJyaWM4Lmt1YmVybmV0ZXMuYXBpLm1vZGVsLlNlcnZpY2VcIik7XHJcbiAgICAvLyRzY29wZS5jb25maWcgPSBLdWJlcm5ldGVzU2NoZW1hLmRlZmluaXRpb25zLmt1YmVybmV0ZXNfdjFiZXRhMl9TZXJ2aWNlO1xyXG5cclxuICAgIEt1YmVybmV0ZXMuaW5pdFNoYXJlZCgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIEt1YmVybmV0ZXNNb2RlbCwgS3ViZXJuZXRlc1N0YXRlLCBLdWJlcm5ldGVzQXBpVVJMKTtcclxuXHJcbiAgICAkc2NvcGUuJG9uKCckcm91dGVVcGRhdGUnLCAoJGV2ZW50KSA9PiB7XHJcbiAgICAgIHVwZGF0ZURhdGEoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHVwZGF0ZURhdGEoKTtcclxuXHJcbiAgICBmdW5jdGlvbiB1cGRhdGVEYXRhKCkge1xyXG4gICAgICBpZiAoJHNjb3BlLmlkKSB7XHJcbiAgICAgICAgJHNjb3BlLmVudGl0eSA9ICRzY29wZS5tb2RlbC5nZXRTZXJ2aWNlKEt1YmVybmV0ZXNTdGF0ZS5zZWxlY3RlZE5hbWVzcGFjZSwgJHNjb3BlLmlkKTtcclxuICAgICAgICBDb3JlLiRhcHBseSgkc2NvcGUpO1xyXG4gICAgICAgICRzY29wZS5mZXRjaGVkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkc2NvcGUuZmV0Y2hlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc01vZGVsLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBfbW9kdWxlLmZhY3RvcnkoJ1NlcnZpY2VSZWdpc3RyeScsIFsoKSA9PiB7XHJcbiAgICByZXR1cm4gbmV3IFNlcnZpY2VSZWdpc3RyeVNlcnZpY2UoKTtcclxuICB9XSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlcHJlc2VudHMgYSBzaW1wbGUgaW50ZXJmYWNlIHRvIHNlcnZpY2UgZGlzY292ZXJ5IHRoYXQgY2FuIGJlIHVzZWQgZWFybHkgb24gaW4gdGhlIGFwcGxpY2F0aW9uIGxpZmVjeWNsZSBiZWZvcmUgdGhlXHJcbiAgICogdW5kZXJseWluZyBtb2RlbCBoYXMgYmVlbiBjcmVhdGVkIHZpYSBkZXBlbmRlbmN5IGluamVjdGlvblxyXG4gICAqL1xyXG4gIGV4cG9ydCBjbGFzcyBTZXJ2aWNlUmVnaXN0cnlTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgbW9kZWw6S3ViZXJuZXRlc01vZGVsU2VydmljZSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSBzZXJ2aWNlIGF2YWlsYWJsZSBmb3IgdGhlIGdpdmVuIElEIG9yIGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYXNTZXJ2aWNlKHNlcnZpY2VOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZmluZFNlcnZpY2Uoc2VydmljZU5hbWUpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2VydmljZSBmb3IgdGhlIGdpdmVuIHNlcnZpY2UgbmFtZSAoSUQpIG9yIG51bGwgaWYgaXQgY2Fubm90IGJlIGZvdW5kXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNlcnZpY2VOYW1lIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIGxvb2sgZm9yXHJcbiAgICAgKiBAcmV0dXJuIHtudWxsfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluZFNlcnZpY2Uoc2VydmljZU5hbWU6IHN0cmluZykge1xyXG4gICAgICB2YXIgYW5zd2VyID0gbnVsbDtcclxuICAgICAgaWYgKHNlcnZpY2VOYW1lKSB7XHJcbiAgICAgICAgdmFyIG1vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xyXG4gICAgICAgIGlmIChtb2RlbCkge1xyXG4gICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IG1vZGVsLmN1cnJlbnROYW1lc3BhY2UoKTtcclxuICAgICAgICAgIHJldHVybiBtb2RlbC5nZXRTZXJ2aWNlKG5hbWVzcGFjZSAsc2VydmljZU5hbWUpO1xyXG4vKlxyXG4gICAgICAgIFRPRE8gbGV0cyBvbmx5IGxvb2sgaW4gdGhlIGN1cnJlbnQgbmFtZXNwYWNlXHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKG1vZGVsLnNlcnZpY2VzLCAoc2VydmljZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHNlcnZpY2VOYW1lID09PSBnZXROYW1lKHNlcnZpY2UpKSB7XHJcbiAgICAgICAgICAgIGFuc3dlciA9IHNlcnZpY2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiovXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBzZXJ2aWNlIGxpbmsgZm9yIHRoZSBnaXZlbiBzZXJ2aWNlIG5hbWVcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc2VydmljZU5hbWUgdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2VcclxuICAgICAqIEByZXR1cm4ge251bGx9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXJ2aWNlTGluayhzZXJ2aWNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgdmFyIHNlcnZpY2UgPSB0aGlzLmZpbmRTZXJ2aWNlKHNlcnZpY2VOYW1lKTtcclxuICAgICAgcmV0dXJuIHNlcnZpY2VMaW5rVXJsKHNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2VydmljZSBsaW5rIGZvciB0aGUgZ2l2ZW4gc2VydmljZSBuYW1lIGlmIGl0cyByZWFkeSAoaGFzIGF0IGxlYXN0IG9uZSByZWFkeSBwb2QpXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNlcnZpY2VOYW1lIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXHJcbiAgICAgKiBAcmV0dXJuIHtudWxsfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VydmljZVJlYWR5TGluayhzZXJ2aWNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgdmFyIHNlcnZpY2UgPSB0aGlzLmZpbmRTZXJ2aWNlKHNlcnZpY2VOYW1lKTtcclxuICAgICAgaWYgKHJlYWR5UG9kQ291bnQoc2VydmljZSkpIHtcclxuICAgICAgICByZXR1cm4gc2VydmljZUxpbmtVcmwoc2VydmljZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE1vZGVsKCk6S3ViZXJuZXRlc01vZGVsU2VydmljZSB7XHJcbiAgICAgIHZhciBhbnN3ZXIgPSB0aGlzLm1vZGVsO1xyXG4gICAgICAvLyBsZXRzIGFsbG93IGxhenkgbG9hZCBzbyB3ZSBjYW4gYmUgaW52b2tlZCBiZWZvcmUgdGhlIGluamVjdG9yIGhhcyBiZWVuIGNyZWF0ZWRcclxuICAgICAgaWYgKCFhbnN3ZXIpIHtcclxuICAgICAgICB2YXIgaW5qZWN0b3IgPSBIYXd0aW9Db3JlLmluamVjdG9yO1xyXG4gICAgICAgIGlmIChpbmplY3Rvcikge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbCA9IGluamVjdG9yLmdldDxLdWJlcm5ldGVzTW9kZWxTZXJ2aWNlPignS3ViZXJuZXRlc01vZGVsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGFuc3dlciA9IHRoaXMubW9kZWw7XHJcbiAgICAgIHJldHVybiBhbnN3ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNIZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc1BsdWdpbi50c1wiLz5cclxuXHJcbm1vZHVsZSBLdWJlcm5ldGVzIHtcclxuXHJcbiAgZXhwb3J0IHZhciBTZXJ2aWNlQXBwcyA9IF9tb2R1bGUuY29udHJvbGxlcignS3ViZXJuZXRlcy5TZXJ2aWNlQXBwcycsICgkc2NvcGUsIEt1YmVybmV0ZXNNb2RlbCkgPT4ge1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG4gIH0pO1xyXG5cclxuICBleHBvcnQgdmFyIFNlcnZpY2VzID0gY29udHJvbGxlcihcIlNlcnZpY2VzXCIsXHJcbiAgICBbXCIkc2NvcGVcIiwgXCJLdWJlcm5ldGVzTW9kZWxcIiwgXCJLdWJlcm5ldGVzU2VydmljZXNcIiwgXCJLdWJlcm5ldGVzUG9kc1wiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICAgKCRzY29wZSwgS3ViZXJuZXRlc01vZGVsOiBLdWJlcm5ldGVzLkt1YmVybmV0ZXNNb2RlbFNlcnZpY2UsIEt1YmVybmV0ZXNTZXJ2aWNlczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzUG9kczpuZy5yZXNvdXJjZS5JUmVzb3VyY2VDbGFzczxhbnk+LCBLdWJlcm5ldGVzU3RhdGUsXHJcbiAgICAgICAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsICRsb2NhdGlvbjpuZy5JTG9jYXRpb25TZXJ2aWNlLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgS3ViZXJuZXRlc0FwaVVSTCkgPT4ge1xyXG5cclxuICAgICRzY29wZS5rdWJlcm5ldGVzID0gS3ViZXJuZXRlc1N0YXRlO1xyXG4gICAgJHNjb3BlLm1vZGVsID0gS3ViZXJuZXRlc01vZGVsO1xyXG5cclxuICAgIENvbnRyb2xsZXJIZWxwZXJzLmJpbmRNb2RlbFRvU2VhcmNoUGFyYW0oJHNjb3BlLCAkbG9jYXRpb24sICdtb2RlJywgJ21vZGUnLCAnbGlzdCcpO1xyXG5cclxuICAgICRzY29wZS50YWJsZUNvbmZpZyA9IHtcclxuICAgICAgZGF0YTogJ21vZGVsLnNlcnZpY2VzJyxcclxuICAgICAgc2hvd1NlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxyXG4gICAgICBlbmFibGVSb3dDbGlja1NlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgIG11bHRpU2VsZWN0OiB0cnVlLFxyXG4gICAgICBzZWxlY3RlZEl0ZW1zOiBbXSxcclxuICAgICAgZmlsdGVyT3B0aW9uczoge1xyXG4gICAgICAgIGZpbHRlclRleHQ6ICRsb2NhdGlvbi5zZWFyY2goKVtcInFcIl0gfHwgJydcclxuICAgICAgfSxcclxuICAgICAgY29sdW1uRGVmczogW1xyXG4gICAgICAgIHsgZmllbGQ6ICdfa2V5JyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTmFtZScsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcImlkVGVtcGxhdGUuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJyRzZXJ2aWNlVXJsJyxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiAnQWRkcmVzcycsXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU6ICR0ZW1wbGF0ZUNhY2hlLmdldChcInBvcnRhbEFkZHJlc3MuaHRtbFwiKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBmaWVsZDogJyRwb2RDb3VudCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1BvZHMnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJwb2RDb3VudHNBbmRMaW5rVGVtcGxhdGUuaHRtbFwiKSxcclxuICAgICAgICAgIGN1c3RvbVNvcnRGaWVsZDogKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY29uY2F0IGFsbCB0aGUgcG9kIGNvdW50ZXJzXHJcbiAgICAgICAgICAgIHZhciByZWFkeSA9IGZpZWxkLiRwb2RDb3VudGVycy5yZWFkeSB8fCAwO1xyXG4gICAgICAgICAgICB2YXIgdmFsaWQgPSBmaWVsZC4kcG9kQ291bnRlcnMudmFsaWQgfHwgMDtcclxuICAgICAgICAgICAgdmFyIHdhaXRpbmcgPSBmaWVsZC4kcG9kQ291bnRlcnMud2FpdGluZyB8fCAwO1xyXG4gICAgICAgICAgICB2YXIgZXJyb3IgPSBmaWVsZC4kcG9kQ291bnRlcnMuZXJyb3IgfHwgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHJlYWR5ICsgdmFsaWQgKyB3YWl0aW5nICsgZXJyb3I7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGZpZWxkOiAnJHNlbGVjdG9yVGV4dCcsXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogJ1NlbGVjdG9yJyxcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZTogJHRlbXBsYXRlQ2FjaGUuZ2V0KFwic2VsZWN0b3JUZW1wbGF0ZS5odG1sXCIpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IGZpZWxkOiAnJGxhYmVsc1RleHQnLFxyXG4gICAgICAgICAgZGlzcGxheU5hbWU6ICdMYWJlbHMnLFxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlOiAkdGVtcGxhdGVDYWNoZS5nZXQoXCJsYWJlbFRlbXBsYXRlLmh0bWxcIilcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcblxyXG4gICAgS3ViZXJuZXRlcy5pbml0U2hhcmVkKCRzY29wZSwgJGxvY2F0aW9uLCAkaHR0cCwgJHRpbWVvdXQsICRyb3V0ZVBhcmFtcywgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpO1xyXG5cclxuICAgICRzY29wZS5kZWxldGVQcm9tcHQgPSAoc2VsZWN0ZWQpID0+IHtcclxuICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcoc2VsZWN0ZWQpKSB7XHJcbiAgICAgICAgc2VsZWN0ZWQgPSBbe1xyXG4gICAgICAgICAgaWQ6IHNlbGVjdGVkXHJcbiAgICAgICAgfV07XHJcbiAgICAgIH1cclxuICAgICAgVUkubXVsdGlJdGVtQ29uZmlybUFjdGlvbkRpYWxvZyg8VUkuTXVsdGlJdGVtQ29uZmlybUFjdGlvbk9wdGlvbnM+e1xyXG4gICAgICAgIGNvbGxlY3Rpb246IHNlbGVjdGVkLFxyXG4gICAgICAgIGluZGV4OiAnbWV0YWRhdGEubmFtZScsXHJcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKHNlbGVjdGVkOkFycmF5PEt1YmVQb2Q+LCBuZXh0Okt1YmVQb2QpIHtcclxuICAgICAgICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICAgICAgbG9nLmRlYnVnKFwiZGVsZXRpbmc6IFwiLCBnZXROYW1lKG5leHQpKTtcclxuICAgICAgICAgICAgICAgIEt1YmVybmV0ZXNTZXJ2aWNlcy5kZWxldGUoe1xyXG4gICAgICAgICAgICAgICAgICBpZDogZ2V0TmFtZShuZXh0KVxyXG4gICAgICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcImRlbGV0ZWQ6IFwiLCBnZXROYW1lKG5leHQpKTtcclxuICAgICAgICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICBkZWxldGVTZWxlY3RlZChzZWxlY3RlZCwgc2VsZWN0ZWQuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVsZXRlU2VsZWN0ZWQoc2VsZWN0ZWQsIHNlbGVjdGVkLnNoaWZ0KCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgc2VydmljZXM/JyxcclxuICAgICAgICBhY3Rpb246ICdUaGUgZm9sbG93aW5nIHNlcnZpY2VzIHdpbGwgYmUgZGVsZXRlZDonLFxyXG4gICAgICAgIG9rVGV4dDogJ0RlbGV0ZScsXHJcbiAgICAgICAgb2tDbGFzczogJ2J0bi1kYW5nZXInLFxyXG4gICAgICAgIGN1c3RvbTogXCJUaGlzIG9wZXJhdGlvbiBpcyBwZXJtYW5lbnQgb25jZSBjb21wbGV0ZWQhXCIsXHJcbiAgICAgICAgY3VzdG9tQ2xhc3M6IFwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXHJcbiAgICAgIH0pLm9wZW4oKTtcclxuICAgIH07XHJcblxyXG4gIH1dKTtcclxufVxyXG4iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cImt1YmVybmV0ZXNQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgS3ViZXJuZXRlcyB7XHJcblxyXG4gIC8vIGNvbnRyb2xsZXIgZm9yIHRoZSBzdGF0dXMgaWNvbiBjZWxsXHJcbiAgZXhwb3J0IHZhciBQb2RTdGF0dXMgPSBjb250cm9sbGVyKFwiUG9kU3RhdHVzXCIsIFtcIiRzY29wZVwiLCAoJHNjb3BlKSA9PiB7XHJcbiAgICAkc2NvcGUuc3RhdHVzTWFwcGluZyA9ICh0ZXh0KSA9PiB7XHJcbiAgICAgIHJldHVybiBzdGF0dXNUZXh0VG9Dc3NDbGFzcyh0ZXh0KTtcclxuICAgIH1cclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuY29udHJvbGxlcihcIkt1YmVybmV0ZXMuVGVybUNvbnRyb2xsZXJcIiwgKCRzY29wZSwgVGVybWluYWxTZXJ2aWNlKSA9PiB7XHJcbiAgICAkc2NvcGUuY2FuQ29ubmVjdFRvID0gKGNvbnRhaW5lcikgPT4ge1xyXG4gICAgICBpZiAoY29udGFpbmVyLnNlY3VyaXR5Q29udGV4dCAmJiBjb250YWluZXIuc2VjdXJpdHlDb250ZXh0LnByaXZpbGVnZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAkc2NvcGUub3BlblRlcm1pbmFsID0gKHNlbGZMaW5rLCBjb250YWluZXJOYW1lKSA9PiB7XHJcbiAgICAgIHZhciBpZCA9IFRlcm1pbmFsU2VydmljZS5uZXdUZXJtaW5hbChzZWxmTGluaywgY29udGFpbmVyTmFtZSk7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIkNyZWF0ZWQgdGVybWluYWwsIGlkOiBcIiwgaWQpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBleHBvcnQgdmFyIERhdGFMYWJlbHMgPSBjb250cm9sbGVyKFwiRGF0YUxhYmVsc1wiLFsnJHNjb3BlJywnJGxvY2F0aW9uJywgKCRzY29wZSwgJGxvY2F0aW9uKSA9PntcclxuICAgIFxyXG4gICAgICAkc2NvcGUubGFiZWxDbGljayA9IChlbnRpdHksIGtleTpzdHJpbmcsIHZhbHVlOnN0cmluZykgPT4geyAgICAgICAgICAgICAgXHJcbiAgICAgICAgJHNjb3BlLiRlbWl0KCdkYXRhTGFiZWxGaWx0ZXJVcGRhdGUnLCB2YWx1ZSwga2V5KVxyXG4gICAgfVxyXG4gICAgJHNjb3BlLmxhYmVsQ2xhc3MgPSBjb250YWluZXJMYWJlbENsYXNzO1xyXG4gIH1dKTtcclxuXHJcbiAgLy8gY29udHJvbGxlciB0aGF0IGRlYWxzIHdpdGggdGhlIGxhYmVscyBwZXIgcG9kXHJcbiAgZXhwb3J0IHZhciBMYWJlbHMgPSBjb250cm9sbGVyKFwiTGFiZWxzXCIsIFtcIiRzY29wZVwiLCBcIiRsb2NhdGlvblwiLCAoJHNjb3BlLCAkbG9jYXRpb24pID0+IHsgICBcclxuICAgICRzY29wZS5sYWJlbHMgPSBbXTtcclxuICAgIHZhciBsYWJlbEtleVdlaWdodHMgPSB7XHJcbiAgICAgIFwiY2l0eU5hbWVcIjogMSxcclxuICAgICAgXCJkaXN0cmljdE5hbWVcIjogMixcclxuICAgICAgXCJzeXN0ZW1OYW1lXCI6IDMsXHJcbiAgICAgIFwieWVhclwiOiA0LFxyXG4gICAgICBcInZlcnNpb25cIjogNVxyXG4gICAgfTtcclxuICAgICRzY29wZS4kd2F0Y2goJ2VudGl0eScsIChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IHtcclxuICAgICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgICAgLy8gbG9nLmRlYnVnKFwibGFiZWxzOiBcIiwgbmV3VmFsdWUpO1xyXG4gICAgICAgIC8vIG1hc3NhZ2UgdGhlIGxhYmVscyBhIGJpdFxyXG4gICAgICAgICRzY29wZS5sYWJlbHMgPSBbXTtcclxuICAgICAgICBhbmd1bGFyLmZvckVhY2goQ29yZS5wYXRoR2V0KCRzY29wZS5lbnRpdHksIFtcIm1ldGFkYXRhXCIsIFwibGFiZWxzXCJdKSwgKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgIGlmIChrZXkgPT09ICdmYWJyaWM4JyB8fCBrZXkgPT09ICdzdHlsZScgfHwga2V5ID09PSAnc3RhdHVzJyB8fCAoa2V5ID09PSAnaXNUYXJnZXQnICYmIHZhbHVlID09PSAnZmFsc2UnKSB8fCBrZXkgPT09ICdpc0V4dHJhY3QnIHx8IGtleSA9PT0gJ25hbWUnKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gbm90IHN1cmUgd2hhdCB0aGlzIGlzIGZvciwgdGhlIGNvbnRhaW5lciB0eXBlP1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgJHNjb3BlLmxhYmVscy5wdXNoKHtcclxuICAgICAgICAgICAga2V5OiBrZXksXHJcbiAgICAgICAgICAgIHRpdGxlOiB2YWx1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vICBsZXRzIHNvcnQgYnkga2V5IGJ1dCBsZXRzIG1ha2Ugc3VyZSB0aGF0IHdlIHdlaWdodCBjZXJ0YWluIGxhYmVscyBzbyB0aGV5IGFyZSBmaXJzdFxyXG4gICAgICAgICRzY29wZS5sYWJlbHMgPSAkc2NvcGUubGFiZWxzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIGZ1bmN0aW9uIGdldFdlaWdodChrZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxhYmVsS2V5V2VpZ2h0c1trZXldIHx8IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YXIgbjEgPSBhW1wia2V5XCJdO1xyXG4gICAgICAgICAgdmFyIG4yID0gYltcImtleVwiXTtcclxuICAgICAgICAgIHZhciB3MSA9IGdldFdlaWdodChuMSk7XHJcbiAgICAgICAgICB2YXIgdzIgPSBnZXRXZWlnaHQobjIpO1xyXG4gICAgICAgICAgdmFyIGRpZmYgPSB3MSAtIHcyO1xyXG4gICAgICAgICAgaWYgKGRpZmYgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGlmZiA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAobjEgJiYgbjIpIHtcclxuICAgICAgICAgICAgaWYgKG4xID4gbjIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChuMSA8IG4yKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAobjEgPT09IG4yKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobjEpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgJHNjb3BlLmhhbmRsZUNsaWNrID0gKGVudGl0eSwgbGFiZWxUeXBlOnN0cmluZywgdmFsdWUpID0+IHtcclxuICAgICAgLy8gbG9nLmRlYnVnKFwiaGFuZGxlQ2xpY2ssIGVudGl0eTogXCIsIGVudGl0eSwgXCIga2V5OiBcIiwgbGFiZWxUeXBlLCBcIiB2YWx1ZTogXCIsIHZhbHVlKTtcclxuICAgICAgJHNjb3BlLiRlbWl0KCdsYWJlbEZpbHRlclVwZGF0ZScsIHZhbHVlLnRpdGxlKVxyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5sYWJlbENsYXNzID0gY29udGFpbmVyTGFiZWxDbGFzcztcclxuICB9XSk7XHJcblxyXG4gIC8v5pyN5Yqh54q25oCB6L+H5rukXHJcbiAgZXhwb3J0IHZhciBTdGF0dXMgPSBjb250cm9sbGVyKCdTdGF0dXMnLCBbXCIkc2NvcGVcIiwgXCIkaHR0cFwiLCBcIiRpbnRlcnZhbFwiLCBcIiRsb2NhdGlvblwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIiwgKCRzY29wZSwgJGh0dHAsICRpbnRlcnZhbCwgJGxvY2F0aW9uLCBLdWJlcm5ldGVzQXBpVVJMKSA9PiB7XHJcbiAgICAgIC8qJHNjb3BlLiR3YXRjaCgnZW50aXR5JywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgaWYobmV3VmFsdWUpXHJcbiAgICAgICAgICAgICBjb25zb2xlLmxvZyhuZXdWYWx1ZSk7XHJcbiAgICAgIH0sdHJ1ZSk7Ki9cclxuICB9XSk7XHJcblxyXG4gIGV4cG9ydCB2YXIgVGFza0VkaXQgPSBjb250cm9sbGVyKCdUYXNrRWRpdCcsIFsnJHNjb3BlJywgKCRzY29wZSkgPT4ge1xyXG5cclxuICAgICRzY29wZS5zaG93RGVsZXRlT25lID0ge1xyXG4gICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgICBpdGVtOiBudWxsLFxyXG4gICAgICAgb3BlbjogKGVudGl0eSkgPT4ge1xyXG4gICAgICAgICBpZihlbnRpdHkuc3RhdHVzID09IDEpXHJcbiAgICAgICAgICBDb25maWdzLmN1c3RvbUFsZXJ0KFwi5o+Q56S6XCIsIFwi5pON5L2c5aSx6LSlOiDmraPlnKjov4Hnp7vnmoTku7vliqEs5LiN6IO96L+B56e777yBXCIsICcnLG51bGwsIDAsIFwiZXJyb3JcIik7XHJcbiAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgdmFyIHNob3dEZWxldGVPbmUgPSAkc2NvcGUuc2hvd0RlbGV0ZU9uZTtcclxuICAgICAgICAgICBzaG93RGVsZXRlT25lLnNob3cgPSB0cnVlO1xyXG4gICAgICAgICAgIHNob3dEZWxldGVPbmUuaXRlbSA9IGVudGl0eTtcclxuICAgICAgICAgfVxyXG4gICAgICAgfSxcclxuICAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICAgdmFyIHNob3dEZWxldGVPbmUgPSAkc2NvcGUuc2hvd0RlbGV0ZU9uZTsgICAgICAgIFxyXG4gICAgICAgICAkc2NvcGUuJGVtaXQoJ2RlbGV0ZVJvdycsIHNob3dEZWxldGVPbmUuaXRlbSk7XHJcbiAgICAgICB9LFxyXG4gICAgICAgb25DYW5jZWw6ICgpPT57XHJcbiAgICAgICAgIHZhciBzaG93RGVsZXRlT25lID0gJHNjb3BlLnNob3dEZWxldGVPbmU7XHJcbiAgICAgICAgIHNob3dEZWxldGVPbmUuc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgICBzaG93RGVsZXRlT25lLml0ZW0gPSBudWxsO1xyXG4gICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8qJHNjb3BlLmRlbGV0ZVJvdyA9IChlbnRpdHkpID0+e1xyXG4gICAgICAkc2NvcGUuJGVtaXQoJ2RlbGV0ZVJvdycsIGVudGl0eSk7XHJcbiAgICB9Ki9cclxuICB9XSk7XHJcblxyXG4gIGV4cG9ydCB2YXIgTG9hZE1hc2sgPSBjb250cm9sbGVyKCdMb2FkTWFzaycsIFsnJHNjb3BlJywgKCRzY29wZSkgPT4geyAgICBcclxuICB9XSk7XHJcbn1cclxuIiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwia3ViZXJuZXRlc0hlbHBlcnMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG5cclxuICBfbW9kdWxlLmRpcmVjdGl2ZShcImhhd3Rpb1RhYnNcIiwgWydIYXd0aW9TdWJUYWJzJywgKEhhd3Rpb1N1YlRhYnMpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cnMpID0+IHtcclxuICAgICAgICBIYXd0aW9TdWJUYWJzLmFwcGx5KHNjb3BlLiRldmFsKCdzdWJUYWJDb25maWcnKSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfV0pO1xyXG59XHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJrdWJlcm5ldGVzUGx1Z2luLnRzXCIvPlxyXG5cclxubW9kdWxlIEt1YmVybmV0ZXMge1xyXG4gIGV4cG9ydCB2YXIgVGVtcGxhdGVDb250cm9sbGVyID0gY29udHJvbGxlcihcIlRlbXBsYXRlQ29udHJvbGxlclwiLCBbXHJcbiAgICBcIiRzY29wZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgXCIkcm91dGVQYXJhbXNcIiwgXCJtYXJrZWRcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRtb2RhbFwiLCBcIkt1YmVybmV0ZXNNb2RlbFwiLCBcIkt1YmVybmV0ZXNTdGF0ZVwiLCBcIkt1YmVybmV0ZXNBcGlVUkxcIixcclxuICAgICgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0aW1lb3V0LCAkcm91dGVQYXJhbXMsIG1hcmtlZCwgJHRlbXBsYXRlQ2FjaGUsICRtb2RhbCwgS3ViZXJuZXRlc01vZGVsLCBLdWJlcm5ldGVzU3RhdGUsIEt1YmVybmV0ZXNBcGlVUkwpID0+IHtcclxuICAgIHZhciBtb2RlbCA9ICRzY29wZS5tb2RlbCA9IEt1YmVybmV0ZXNNb2RlbDtcclxuICAgICRzY29wZS5maWx0ZXJUZXh0ID0gJGxvY2F0aW9uLnNlYXJjaCgpW1wicVwiXTtcclxuXHJcbiAgICAkc2NvcGUudGFyZ2V0TmFtZXNwYWNlID0gJHJvdXRlUGFyYW1zLnRhcmdldE5hbWVzcGFjZTtcclxuICAgIGluaXRTaGFyZWQoJHNjb3BlLCAkbG9jYXRpb24sICRodHRwLCAkdGltZW91dCwgJHJvdXRlUGFyYW1zLCBLdWJlcm5ldGVzTW9kZWwsIEt1YmVybmV0ZXNTdGF0ZSwgS3ViZXJuZXRlc0FwaVVSTCk7XHJcblxyXG4gICAgJHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ21vZGVsLm5hbWVzcGFjZXMnLCAoKSA9PiB7XHJcbiAgICAgIGlmICghJHNjb3BlLnRhcmdldE5hbWVzcGFjZSkge1xyXG4gICAgICAgICRzY29wZS50YXJnZXROYW1lc3BhY2UgPSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHZhciByZXR1cm5UbyA9IG5ldyBVUkkoJGxvY2F0aW9uLnNlYXJjaCgpWydyZXR1cm5UbyddIHx8ICcva3ViZXJuZXRlcy9hcHBzJyk7XHJcblxyXG4gICAgZnVuY3Rpb24gZ29CYWNrKCkge1xyXG4gICAgICAkbG9jYXRpb24ucGF0aChyZXR1cm5Uby5wYXRoKCkpLnNlYXJjaChyZXR1cm5Uby5xdWVyeSh0cnVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0QW5ub3RhdGlvbnMob2JqKSB7XHJcbiAgICAgIHJldHVybiBDb3JlLnBhdGhHZXQob2JqLCBbJ21ldGFkYXRhJywgJ2Fubm90YXRpb25zJ10pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldFZhbHVlRm9yKG9iaiwga2V5KSB7XHJcbiAgICAgIHZhciBhbm5vdGF0aW9ucyA9IGdldEFubm90YXRpb25zKG9iaik7XHJcbiAgICAgIGlmICghYW5ub3RhdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgfVxyXG4gICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqKTtcclxuICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICB2YXIgZnVsbEtleSA9IFwiZmFicmljOC5cIiArIG5hbWUgKyBcIi9cIiArIGtleTtcclxuICAgICAgICB2YXIgYW5zd2VyID0gYW5ub3RhdGlvbnNbZnVsbEtleV07XHJcbiAgICAgICAgaWYgKGFuc3dlcikge1xyXG4gICAgICAgICAgcmV0dXJuIGFuc3dlcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGtleTogYW55ID0gXy5maW5kKF8ua2V5cyhhbm5vdGF0aW9ucyksIChrOiBzdHJpbmcpID0+IF8uZW5kc1dpdGgoaywga2V5KSk7XHJcbiAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICByZXR1cm4gYW5ub3RhdGlvbnNba2V5XTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICRzY29wZS5jYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgIGlmICgkc2NvcGUuZm9ybUNvbmZpZykge1xyXG4gICAgICAgIGRlbGV0ZSAkc2NvcGUuZm9ybUNvbmZpZztcclxuICAgICAgICBkZWxldGUgJHNjb3BlLmVudGl0eTtcclxuICAgICAgICAkc2NvcGUub2JqZWN0cyA9IHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZ29CYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICRzY29wZS4kd2F0Y2goJ21vZGVsLnRlbXBsYXRlcy5sZW5ndGgnLCAobmV3VmFsdWUpID0+IHtcclxuICAgICAgaWYgKG5ld1ZhbHVlID09PSAwKSB7XHJcbiAgICAgICAgZ29CYWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgKi9cclxuXHJcbiAgICAkc2NvcGUuZmlsdGVyVGVtcGxhdGVzID0gKHRlbXBsYXRlKSA9PiB7XHJcbiAgICAgIGlmIChDb3JlLmlzQmxhbmsoJHNjb3BlLmZpbHRlclRleHQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIF8uY29udGFpbnMoYW5ndWxhci50b0pzb24odGVtcGxhdGUpLCAkc2NvcGUuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH07XHJcblxyXG4gICAgJHNjb3BlLm9wZW5GdWxsRGVzY3JpcHRpb24gPSAodGVtcGxhdGUpID0+IHtcclxuICAgICAgdmFyIHRleHQgPSBtYXJrZWQoZ2V0VmFsdWVGb3IodGVtcGxhdGUsICdkZXNjcmlwdGlvbicpIHx8ICdObyBkZXNjcmlwdGlvbicpO1xyXG4gICAgICB2YXIgbW9kYWwgPSAkbW9kYWwub3Blbih7XHJcbiAgICAgICAgdGVtcGxhdGVVcmw6IFVybEhlbHBlcnMuam9pbih0ZW1wbGF0ZVBhdGgsICd0ZW1wbGF0ZURlc2NyaXB0aW9uLmh0bWwnKSxcclxuICAgICAgICBjb250cm9sbGVyOiBbJyRzY29wZScsICckbW9kYWxJbnN0YW5jZScsICgkc2NvcGUsICRtb2RhbEluc3RhbmNlKSA9PiB7XHJcbiAgICAgICAgICAkc2NvcGUudGV4dCA9IHRleHQsXHJcbiAgICAgICAgICAkc2NvcGUub2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIG1vZGFsLmNsb3NlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfV1cclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5nZXREZXNjcmlwdGlvbiA9ICh0ZW1wbGF0ZSkgPT4ge1xyXG4gICAgICB2YXIgYW5zd2VyOmFueSA9ICQobWFya2VkKGdldFZhbHVlRm9yKHRlbXBsYXRlLCAnZGVzY3JpcHRpb24nKSB8fCAnTm8gZGVzY3JpcHRpb24nKSk7XHJcbiAgICAgIHZhciB0ZXh0RGVmYXVsdCA9IGFuc3dlci5odG1sKCk7XHJcbiAgICAgIHZhciBtYXhMZW5ndGggPSAyMDA7XHJcbiAgICAgIGlmICh0ZXh0RGVmYXVsdC5sZW5ndGggPiBtYXhMZW5ndGgpIHtcclxuICAgICAgICB2YXIgdHJ1bmNhdGVkID0gJC50cmltKHRleHREZWZhdWx0KS5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKS5zcGxpdCgnICcpLnNsaWNlKDAsIC0xKS5qb2luKCcgJyk7XHJcbiAgICAgICAgYW5zd2VyLmh0bWwodHJ1bmNhdGVkICsgJy4uLicpO1xyXG4gICAgICAgIGFuc3dlci5hcHBlbmQoJHRlbXBsYXRlQ2FjaGUuZ2V0KCd0cnVuY2F0ZWREZXNjcmlwdGlvblRhZy5odG1sJykpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhbnN3ZXIuaHRtbCgpO1xyXG4gICAgfTtcclxuXHJcbiAgICAkc2NvcGUuZ2V0SWNvblVybCA9ICh0ZW1wbGF0ZSkgPT4ge1xyXG4gICAgICByZXR1cm4gZ2V0VmFsdWVGb3IodGVtcGxhdGUsICdpY29uVXJsJykgfHwgZGVmYXVsdEljb25Vcmw7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5kZXBsb3lUZW1wbGF0ZSA9ICh0ZW1wbGF0ZSkgPT4ge1xyXG4gICAgICBsb2cuZGVidWcoXCJUZW1wbGF0ZSBwYXJhbWV0ZXJzOiBcIiwgdGVtcGxhdGUucGFyYW1ldGVycyk7XHJcbiAgICAgIGxvZy5kZWJ1ZyhcIlRlbXBsYXRlIG9iamVjdHM6IFwiLCB0ZW1wbGF0ZS5vYmplY3RzKTtcclxuICAgICAgbG9nLmRlYnVnKFwiVGVtcGxhdGUgYW5ub3RhdGlvbnM6IFwiLCB0ZW1wbGF0ZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyk7XHJcbiAgICAgIHZhciB0ZW1wbGF0ZUFubm90YXRpb25zID0gdGVtcGxhdGUubWV0YWRhdGEuYW5ub3RhdGlvbnM7XHJcbiAgICAgIGlmICh0ZW1wbGF0ZUFubm90YXRpb25zKSB7XHJcbiAgICAgICAgXy5mb3JFYWNoKHRlbXBsYXRlLm9iamVjdHMsIChvYmplY3Q6YW55KSA9PiB7XHJcbiAgICAgICAgICB2YXIgYW5ub3RhdGlvbnMgPSBvYmplY3QubWV0YWRhdGEuYW5ub3RhdGlvbnMgfHwge307XHJcbiAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqZWN0KTtcclxuICAgICAgICAgIHZhciBtYXRjaGVzID0gXy5maWx0ZXIoXy5rZXlzKHRlbXBsYXRlQW5ub3RhdGlvbnMpLCAoa2V5KSA9PiBrZXkubWF0Y2goJy4nICsgbmFtZSArICcvJykpO1xyXG4gICAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKChtYXRjaCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIShtYXRjaCBpbiBhbm5vdGF0aW9ucykpIHtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uc1ttYXRjaF0gPSB0ZW1wbGF0ZUFubm90YXRpb25zW21hdGNoXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBvYmplY3QubWV0YWRhdGEuYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucztcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgcm91dGVTZXJ2aWNlTmFtZSA9IDxzdHJpbmc+IHVuZGVmaW5lZDtcclxuICAgICAgdmFyIHNlcnZpY2UgPSBfLmZpbmQodGVtcGxhdGUub2JqZWN0cywgKG9iaikgPT4ge1xyXG4gICAgICAgIGlmIChnZXRLaW5kKG9iaikgPT09IFwiU2VydmljZVwiKSB7XHJcbiAgICAgICAgICB2YXIgcG9ydHMgPSBnZXRQb3J0cyhvYmopO1xyXG4gICAgICAgICAgaWYgKHBvcnRzICYmIHBvcnRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChzZXJ2aWNlKSB7XHJcbiAgICAgICAgcm91dGVTZXJ2aWNlTmFtZSA9IGdldE5hbWUoc2VydmljZSk7XHJcbiAgICAgIH1cclxuICAgICAgbG9nLmRlYnVnKFwiU2VydmljZTogXCIsIHNlcnZpY2UpO1xyXG4gICAgICBpZiAoKCFyb3V0ZVNlcnZpY2VOYW1lIHx8ICFpc09wZW5TaGlmdCkgJiYgKCF0ZW1wbGF0ZS5wYXJhbWV0ZXJzIHx8IHRlbXBsYXRlLnBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSkge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIk5vIHBhcmFtZXRlcnMgcmVxdWlyZWQsIGRlcGxveWluZyBvYmplY3RzXCIpO1xyXG4gICAgICAgIGFwcGx5T2JqZWN0cyh0ZW1wbGF0ZS5vYmplY3RzKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGZvcm1Db25maWcgPSB7XHJcbiAgICAgICAgc3R5bGU6IEhhd3Rpb0Zvcm1zLkZvcm1TdHlsZS5TVEFOREFSRCxcclxuICAgICAgICBoaWRlTGVnZW5kOiB0cnVlLFxyXG4gICAgICAgIHByb3BlcnRpZXM6IDxhbnk+IHt9XHJcbiAgICAgIH07XHJcbiAgICAgIHZhciBwYXJhbXMgPSB0ZW1wbGF0ZS5wYXJhbWV0ZXJzO1xyXG4gICAgICBfLmZvckVhY2gocGFyYW1zLCAocGFyYW06YW55KSA9PiB7XHJcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gPGFueT4ge307XHJcbiAgICAgICAgcHJvcGVydHkubGFiZWwgPSBfLnN0YXJ0Q2FzZShwYXJhbS5uYW1lKTtcclxuICAgICAgICBwcm9wZXJ0eS5kZXNjcmlwdGlvbiA9IHBhcmFtLmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIHByb3BlcnR5LmRlZmF1bHQgPSBwYXJhbS52YWx1ZTtcclxuICAgICAgICAvLyBUT0RPLCBkbyBwYXJhbWV0ZXJzIHN1cHBvcnQgdHlwZXM/XHJcbiAgICAgICAgcHJvcGVydHkudHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllc1twYXJhbS5uYW1lXSA9IHByb3BlcnR5O1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHJvdXRlU2VydmljZU5hbWUgJiYgaXNPcGVuU2hpZnQpIHtcclxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMuY3JlYXRlUm91dGUgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXHJcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgICAgICAgbGFiZWw6IFwiQ3JlYXRlIFJvdXRlXCJcclxuICAgICAgICB9O1xyXG4vKlxyXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5yb3V0ZU5hbWUgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgIGxhYmVsOiAnUm91dGUgTmFtZScsXHJcbiAgICAgICAgICBkZWZhdWx0OiByb3V0ZVNlcnZpY2VOYW1lLFxyXG4gICAgICAgICAgJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyc6IHtcclxuICAgICAgICAgICAgJ25nLXNob3cnOiAnZW50aXR5LmNyZWF0ZVJvdXRlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiovXHJcbiAgICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLnJvdXRlU2VydmljZU5hbWUgPSB7XHJcbiAgICAgICAgICB0eXBlOiAnaGlkZGVuJyxcclxuICAgICAgICAgIGRlZmF1bHQ6IHJvdXRlU2VydmljZU5hbWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBuYW1lc3BhY2UgPSBjdXJyZW50S3ViZXJuZXRlc05hbWVzcGFjZSgpO1xyXG4gICAgICAgIC8vIFRPRE8gc3RvcmUgdGhpcyBpbiBsb2NhbFN0b3JhZ2UhXHJcbiAgICAgICAgdmFyIGRvbWFpbiA9IFwidmFncmFudC5mOFwiO1xyXG4gICAgICAgIHZhciBkZWZhdWx0Um91dGVIb3N0U3VmZml4ID0gJy4nICsgKG5hbWVzcGFjZSA9PT0gXCJkZWZhdWx0XCIgPyBcIlwiIDogbmFtZXNwYWNlICsgXCIuXCIpICsgZG9tYWluO1xyXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5yb3V0ZUhvc3RuYW1lID0ge1xyXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgICBkZWZhdWx0OiBkZWZhdWx0Um91dGVIb3N0U3VmZml4LFxyXG4gICAgICAgICAgbGFiZWw6IFwiUm91dGUgaG9zdCBuYW1lIHN1ZmZpeFwiLFxyXG4gICAgICAgICAgJ2NvbnRyb2wtZ3JvdXAtYXR0cmlidXRlcyc6IHtcclxuICAgICAgICAgICAgJ25nLXNob3cnOiAnZW50aXR5LmNyZWF0ZVJvdXRlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgJHNjb3BlLmVudGl0eSA9IDxhbnk+IHt9O1xyXG4gICAgICAkc2NvcGUuZm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XHJcbiAgICAgICRzY29wZS5vYmplY3RzID0gdGVtcGxhdGUub2JqZWN0cztcclxuICAgICAgbG9nLmRlYnVnKFwiRm9ybSBjb25maWc6IFwiLCBmb3JtQ29uZmlnKTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZShzdHIsIGRhdGEpIHtcclxuICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXCR7XFx3Kn0vZywgKG1hdGNoKSA9PiB7XHJcbiAgICAgICAgdmFyIGtleSA9IG1hdGNoLnJlcGxhY2UoL1xcJHsvLCAnJykucmVwbGFjZSgvfS8sICcnKS50cmltKCk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFba2V5XSB8fCBtYXRjaDtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgICRzY29wZS5zdWJzdGl0dXRlQW5kRGVwbG95VGVtcGxhdGUgPSAoKSA9PiB7XHJcbiAgICAgIHZhciBvYmplY3RzID0gJHNjb3BlLm9iamVjdHM7XHJcbiAgICAgIHZhciBvYmplY3RzVGV4dCA9IGFuZ3VsYXIudG9Kc29uKG9iamVjdHMsIHRydWUpO1xyXG4gICAgICAvLyBwdWxsIHRoZXNlIG91dCBvZiB0aGUgZW50aXR5IG9iamVjdCBzbyB0aGV5J3JlIG5vdCB1c2VkIGluIHN1YnN0aXR1dGlvbnNcclxuICAgICAgdmFyIGNyZWF0ZVJvdXRlID0gJHNjb3BlLmVudGl0eS5jcmVhdGVSb3V0ZTtcclxuICAgICAgdmFyIHJvdXRlSG9zdG5hbWVTdWZmaXggPSAkc2NvcGUuZW50aXR5LnJvdXRlSG9zdG5hbWUgfHwgXCJcIjtcclxuICAgICAgdmFyIHJvdXRlTmFtZSA9ICRzY29wZS5lbnRpdHkucm91dGVOYW1lO1xyXG4gICAgICB2YXIgcm91dGVTZXJ2aWNlTmFtZSA9ICRzY29wZS5lbnRpdHkucm91dGVTZXJ2aWNlTmFtZTtcclxuICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHkuY3JlYXRlUm91dGU7XHJcbiAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LnJvdXRlSG9zdG5hbWU7XHJcbiAgICAgIGRlbGV0ZSAkc2NvcGUuZW50aXR5LnJvdXRlTmFtZTtcclxuICAgICAgZGVsZXRlICRzY29wZS5lbnRpdHkucm91dGVTZXJ2aWNlTmFtZTtcclxuICAgICAgb2JqZWN0c1RleHQgPSBzdWJzdGl0dXRlKG9iamVjdHNUZXh0LCAkc2NvcGUuZW50aXR5KTtcclxuICAgICAgb2JqZWN0cyA9IGFuZ3VsYXIuZnJvbUpzb24ob2JqZWN0c1RleHQpO1xyXG4gICAgICBpZiAoY3JlYXRlUm91dGUpIHtcclxuICAgICAgICB2YXIgcm91dGVzID0gW107XHJcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKG9iamVjdHMsIChvYmplY3QpID0+IHtcclxuICAgICAgICAgIHZhciBraW5kID0gb2JqZWN0LmtpbmQ7XHJcbiAgICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUob2JqZWN0KTtcclxuICAgICAgICAgIGlmIChuYW1lICYmIFwiU2VydmljZVwiID09PSBraW5kKSB7XHJcbiAgICAgICAgICAgIHZhciByb3V0ZUhvc3RuYW1lID0gbmFtZSArIHJvdXRlSG9zdG5hbWVTdWZmaXg7XHJcbiAgICAgICAgICAgIHZhciByb3V0ZSA9IHtcclxuICAgICAgICAgICAgICBraW5kOiBcIlJvdXRlXCIsXHJcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogZGVmYXVsdE9TQXBpVmVyc2lvbixcclxuICAgICAgICAgICAgICBtZXRhZGF0YToge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHNwZWM6IHtcclxuICAgICAgICAgICAgICAgIGhvc3Q6IHJvdXRlSG9zdG5hbWUsXHJcbiAgICAgICAgICAgICAgICB0bzoge1xyXG4gICAgICAgICAgICAgICAgICBraW5kOiBcIlNlcnZpY2VcIixcclxuICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcm91dGVzLnB1c2gocm91dGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG9iamVjdHMgPSBvYmplY3RzLmNvbmNhdChyb3V0ZXMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgkc2NvcGUudGFyZ2V0TmFtZXNwYWNlICE9PSBtb2RlbC5jdXJyZW50TmFtZXNwYWNlKCkpIHtcclxuICAgICAgICAkc2NvcGUuJG9uKCdXYXRjaGVyTmFtZXNwYWNlQ2hhbmdlZCcsICgpID0+IHtcclxuICAgICAgICAgIGxvZy5kZWJ1ZyhcIk5hbWVzcGFjZSBjaGFuZ2VkXCIpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGFwcGx5T2JqZWN0cyhvYmplY3RzKTtcclxuICAgICAgICAgICAgQ29yZS4kYXBwbHkoJHNjb3BlKTtcclxuICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgQ29yZS5ub3RpZmljYXRpb24oJ2luZm8nLCBcIlN3aXRjaGluZyB0byBuYW1lc3BhY2UgXCIgKyAkc2NvcGUudGFyZ2V0TmFtZXNwYWNlICsgXCIgYW5kIGRlcGxveWluZyB0ZW1wbGF0ZVwiKTtcclxuICAgICAgICBtb2RlbC5rdWJlcm5ldGVzLnNlbGVjdGVkTmFtZXNwYWNlID0gJHNjb3BlLnRhcmdldE5hbWVzcGFjZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhcHBseU9iamVjdHMob2JqZWN0cyk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gYXBwbHlPYmplY3RzKG9iamVjdHMpIHtcclxuICAgICAgdmFyIHByb2plY3RDbGllbnQgPSBLdWJlcm5ldGVzLmNyZWF0ZUt1YmVybmV0ZXNDbGllbnQoXCJwcm9qZWN0c1wiKTtcclxuXHJcbiAgICAgIF8uZm9yRWFjaChvYmplY3RzLCAob2JqZWN0OmFueSkgPT4ge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhcIk9iamVjdDogXCIsIG9iamVjdCk7XHJcblxyXG4gICAgICAgIHZhciBraW5kID0gZ2V0S2luZChvYmplY3QpO1xyXG4gICAgICAgIHZhciBuYW1lID0gZ2V0TmFtZShvYmplY3QpO1xyXG4gICAgICAgIHZhciBucyA9IGdldE5hbWVzcGFjZShvYmplY3QpO1xyXG5cclxuICAgICAgICBpZiAoa2luZCAmJiBuYW1lKSB7XHJcbiAgICAgICAgICBpZiAobnMgJiYgbnMgIT09IGN1cnJlbnRLdWJlcm5ldGVzTmFtZXNwYWNlKCkpIHtcclxuICAgICAgICAgICAgdmFyIHByb2plY3QgPSB7XHJcbiAgICAgICAgICAgICAgYXBpVmVyc2lvbjogS3ViZXJuZXRlcy5kZWZhdWx0QXBpVmVyc2lvbixcclxuICAgICAgICAgICAgICBraW5kOiBcIlByb2plY3RcIixcclxuICAgICAgICAgICAgICBtZXRhZGF0YToge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbnMsXHJcbiAgICAgICAgICAgICAgICBsYWJlbHM6IHtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHByb2plY3RDbGllbnQucHV0KHByb2plY3QsXHJcbiAgICAgICAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGxvZy5pbmZvKFwiQ3JlYXRlZCBuYW1lc3BhY2U6IFwiICsgbnMpXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsb2cud2FybihcIkZhaWxlZCB0byBjcmVhdGUgbmFtZXNwYWNlOiBcIiArIG5zICsgXCI6IFwiICsgYW5ndWxhci50b0pzb24oZXJyKSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdmFyIHBsdXJhbEtpbmQgPSBraW5kLnRvTG93ZXJDYXNlKCkgKyBcInNcIjtcclxuICAgICAgICAgIHZhciBrdWJlQ2xpZW50ID0gS3ViZXJuZXRlcy5jcmVhdGVLdWJlcm5ldGVzQ2xpZW50KHBsdXJhbEtpbmQsIG5zKTtcclxuICAgICAgICAgIGt1YmVDbGllbnQucHV0KG9iamVjdCxcclxuICAgICAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICBsb2cuaW5mbyhcInVwZGF0ZWQgXCIgKyBraW5kICsgXCIgbmFtZTogXCIgKyBuYW1lICsgKG5zID8gXCIgbnM6IFwiICsgbnM6IFwiXCIpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGxvZy53YXJuKFwiRmFpbGVkIHRvIHVwZGF0ZSBcIiArIGtpbmQgKyBcIiBuYW1lOiBcIiArIG5hbWUgKyAobnMgPyBcIiBuczogXCIgKyBuczogXCJcIikgKyBcIiBlcnJvcjogXCIgKyBhbmd1bGFyLnRvSnNvbihlcnIpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgZ29CYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgJHNjb3BlLmRlbGV0ZVRlbXBsYXRlID0gKHRlbXBsYXRlKSA9PiB7XHJcbiAgICAgIFVJLm11bHRpSXRlbUNvbmZpcm1BY3Rpb25EaWFsb2coPFVJLk11bHRpSXRlbUNvbmZpcm1BY3Rpb25PcHRpb25zPntcclxuICAgICAgICBjb2xsZWN0aW9uOiBbdGVtcGxhdGVdLFxyXG4gICAgICAgIGluZGV4OiAnbWV0YWRhdGEubmFtZScsXHJcbiAgICAgICAgb25DbG9zZTogKHJlc3VsdDpib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIEt1YmVybmV0ZXNNb2RlbFsndGVtcGxhdGVzUmVzb3VyY2UnXS5kZWxldGUoe1xyXG4gICAgICAgICAgICAgIGlkOiB0ZW1wbGF0ZS5tZXRhZGF0YS5uYW1lXHJcbiAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgIEt1YmVybmV0ZXNNb2RlbFsndGVtcGxhdGVzUmVzb3VyY2UnXS5xdWVyeSgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgS3ViZXJuZXRlc01vZGVsLnRlbXBsYXRlcyA9IGRhdGEuaXRlbXM7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhcIkVycm9yIGRlbGV0aW5nIHRlbXBsYXRlOiBcIiwgZXJyb3IpOyBcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aXRsZTogJ0RlbGV0ZSBUZW1wbGF0ZT8nLFxyXG4gICAgICAgIGFjdGlvbjogJ1RoZSBmb2xsb3dpbmcgdGVtcGxhdGUgd2lsbCBiZSBkZWxldGVkOicsXHJcbiAgICAgICAgb2tUZXh0OiAnRGVsZXRlJyxcclxuICAgICAgICBva0NsYXNzOiAnYnRuLWRhbmdlcicsXHJcbiAgICAgICAgY3VzdG9tOiBcIlRoaXMgb3BlcmF0aW9uIGlzIHBlcm1hbmVudCBvbmNlIGNvbXBsZXRlZCFcIixcclxuICAgICAgICBjdXN0b21DbGFzczogXCJhbGVydCBhbGVydC13YXJuaW5nXCJcclxuICAgICAgfSkub3BlbigpO1xyXG4gICAgfTtcclxuICB9XSk7XHJcbn1cclxuXHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxubW9kdWxlIE5hdmlnYXRpb24ge1xyXG5cclxuICBleHBvcnQgdmFyIHBsdWdpbk5hbWUgPSAnaGF3dGlvLW5hdmlnYXRpb24nO1xyXG4gIGV4cG9ydCB2YXIgbG9nID0gTG9nZ2VyLmdldChwbHVnaW5OYW1lKTtcclxuICBleHBvcnQgdmFyIF9tb2R1bGUgPSBhbmd1bGFyLm1vZHVsZShwbHVnaW5OYW1lLCBbXSk7XHJcblxyXG4gIF9tb2R1bGUucnVuKCgpID0+eyAgICBcclxuICB9KTtcclxuXHJcbiAgX21vZHVsZS5zZXJ2aWNlKCdIYXd0aW9CcmVhZGNydW1icycsICgpID0+IHtcclxuICAgIHZhciBfY29uZmlnID0gW107XHJcbiAgICB2YXIgc2VsZiA9IHtcclxuICAgICAgYXBwbHk6IChjb25maWcpID0+IHtcclxuICAgICAgICBfY29uZmlnLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgXy5mb3JFYWNoKGNvbmZpZywgKGNydW1iKSA9PiB7XHJcbiAgICAgICAgICBfY29uZmlnLnB1c2goY3J1bWIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBnZXQ6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gX2NvbmZpZztcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBzZWxmO1xyXG4gIH0pO1xyXG5cclxuICBfbW9kdWxlLnNlcnZpY2UoJ0hhd3Rpb1N1YlRhYnMnLCAoKSA9PiB7XHJcbiAgICB2YXIgX2NvbmZpZyA9IFtdO1xyXG4gICAgdmFyIHNlbGYgPSB7XHJcbiAgICAgIGFwcGx5OiAoY29uZmlnKSA9PiB7XHJcbiAgICAgICAgX2NvbmZpZy5sZW5ndGggPSAwO1xyXG4gICAgICAgIF8uZm9yRWFjaChjb25maWcsIChjcnVtYikgPT4ge1xyXG4gICAgICAgICAgX2NvbmZpZy5wdXNoKGNydW1iKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIF9jb25maWc7XHJcbiAgICAgIH0gXHJcbiAgICB9IFxyXG4gICAgcmV0dXJuIHNlbGY7XHJcbiAgfSk7XHJcblxyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdoYXd0aW9SZWxhdGl2ZUhyZWYnLCBbJyRsb2NhdGlvbicsICgkbG9jYXRpb24pID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlc3RyaWN0OiAnQScsXHJcbiAgICAgIGxpbms6IChzY29wZSwgZWxlbWVudCwgYXR0cikgPT4ge1xyXG4gICAgICAgIHZhciB0YXJnZXRQYXRoID0gYXR0clsnaGF3dGlvUmVsYXRpdmVIcmVmJ107XHJcbiAgICAgICAgdmFyIHRhcmdldEhyZWYgPSBuZXcgVVJJKCRsb2NhdGlvbi51cmwoKSk7XHJcbiAgICAgICAgdGFyZ2V0SHJlZi5zZWdtZW50KHRhcmdldFBhdGgpO1xyXG4gICAgICAgIGVsZW1lbnQuYXR0cignaHJlZicsIHRhcmdldEhyZWYudG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCd2aWV3cG9ydEhlaWdodCcsIFsnJHdpbmRvdycsICckZG9jdW1lbnQnLCAoJHdpbmRvdywgJGRvY3VtZW50KSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHIpID0+IHtcclxuICAgICAgICAvLyBsb2cuZGVidWcoXCJXaW5kb3c6IFwiLCAkd2luZG93KTtcclxuICAgICAgICAvLyBsb2cuZGVidWcoXCJlbGVtZW50OiBcIiwgZWxlbWVudCk7XHJcbiAgICAgICAgdmFyIHdpbiA9ICQoJHdpbmRvdyk7XHJcbiAgICAgICAgdmFyIHJlc2l6ZUZ1bmMgPSAoKSA9PiB7XHJcbiAgICAgICAgICB2YXIgdmlld3BvcnRIZWlnaHQgPSB3aW4uaW5uZXJIZWlnaHQoKTtcclxuICAgICAgICAgIC8vIGxvZy5kZWJ1ZyhcIlZpZXdwb3J0IGhlaWdodDogXCIsIHZpZXdwb3J0SGVpZ2h0KTtcclxuICAgICAgICAgIHZhciBlbFRvcCA9IGVsZW1lbnQub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgICAgLy8gbG9nLmRlYnVnKFwiRWxlbWVudCB0b3A6IFwiLCBlbFRvcCk7XHJcbiAgICAgICAgICB2YXIgaGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgLSBlbFRvcDtcclxuICAgICAgICAgIGVsZW1lbnQuY3NzKCdoZWlnaHQnLCBoZWlnaHQpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2luLm9uKCdyZXNpemUnLCByZXNpemVGdW5jKTtcclxuICAgICAgICBlbGVtZW50Lm9uKCckZGVzdHJveScsICgpID0+IHtcclxuICAgICAgICAgIHdpbi5vZmYoJ3Jlc2l6ZScsIHJlc2l6ZUZ1bmMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNldFRpbWVvdXQocmVzaXplRnVuYywgNTApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfV0pO1xyXG5cclxuICBfbW9kdWxlLmRpcmVjdGl2ZSgnaGF3dGlvTWFpbk91dGxldCcsIFsnSGF3dGlvU3ViVGFicycsIChIYXd0aW9TdWJUYWJzKSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN0cmljdDogJ0EnLFxyXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSA9PiB7XHJcbiAgICAgICAgc2NvcGUudGFicyA9IEhhd3Rpb1N1YlRhYnM7XHJcbiAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbigndGFicy5nZXQoKScsICh0YWJzKSA9PiB7XHJcbiAgICAgICAgICAvLyBsb2cuZGVidWcoXCJzdWJUYWJDb25maWc6IFwiLCBzdWJUYWJDb25maWcpO1xyXG4gICAgICAgICAgaWYgKHRhYnMgJiYgdGFicy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2hpZGRlbi1uYXYnKTtcclxuICAgICAgICAgICAgZWxlbWVudC5jc3MoeyAnbWFyZ2luLWxlZnQnOiAnJyB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2hpZGRlbi1uYXYnKTtcclxuICAgICAgICAgICAgZWxlbWVudC5jc3MoeyAnbWFyZ2luLWxlZnQnOiAnYXV0bycgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gIH1dKTtcclxuXHJcbiAgX21vZHVsZS5kaXJlY3RpdmUoJ2hhd3Rpb1RhYnNPdXRsZXQnLCBbJ0hhd3Rpb1N1YlRhYnMnLCAoSGF3dGlvU3ViVGFicykgPT4ge1xyXG4gICAgdmFyIGluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXN0cmljdDogJ0FFJyxcclxuICAgICAgcmVwbGFjZTogdHJ1ZSxcclxuICAgICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LXBmLXZlcnRpY2FsIG5hdi1wZi12ZXJ0aWNhbC13aXRoLXNlY29uZGFyeS1uYXZcIiBuZy1jb250cm9sbGVyPVwiRGV2ZWxvcGVyLk5hdkJhckNvbnRyb2xsZXJcIiBuZy1jbGFzcz1cImdldENsYXNzKClcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgbmctcmVwZWF0PVwic3ViVGFiIGluIHN1YlRhYkNvbmZpZ1wiIG5nLXNob3c9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIHt7c3ViVGFiLmFjdGl2ZSA/ICdhY3RpdmUnIDogJyd9fVwiID5cclxuICAgICAgICAgICAgICAgIDxhIG5nLWhpZGU9XCJzdWJUYWIudGVtcGxhdGVcIiBocmVmPVwie3tzdWJUYWIuaHJlZn19XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIG5nLXNob3c9XCJzdWJUYWIuY2xhc3NcIiBuZy1jbGFzcz1cInN1YlRhYi5jbGFzc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBuZy1zaG93PVwic3ViVGFiLmljb25cIiBuZy1zcmM9XCJ7e3N1YlRhYi5pY29ufX1cIj5cclxuICAgICAgICAgICAgICAgICAge3tzdWJUYWIubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZy1zaG93PVwic3ViVGFiLnRlbXBsYXRlXCIgY29tcGlsZT1cInN1YlRhYi50ZW1wbGF0ZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICBgLFxyXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSA9PiB7XHJcbiAgICAgICAgaWYgKCFpbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8oPGFueT4kKSgpLnNldHVwVmVydGljYWxOYXZpZ2F0aW9uKGZhbHNlKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgaWYgd2UgaGF2ZW4ndCBsb2FkZWQgcGF0dGVybmZseVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY29wZS5IYXd0aW9TdWJUYWJzID0gSGF3dGlvU3ViVGFicztcclxuXHJcbiAgICAgICAgdmFyIGNvbGxhcHNlZCA9IGZhbHNlO1xyXG4gICAgICAgIHNjb3BlLmdldENsYXNzID0gKCkgPT4ge1xyXG4gICAgICAgICAgLy9sb2cuZGVidWcoXCJNeSBjbGFzczogXCIsIGVsZW1lbnQuYXR0cignY2xhc3MnKSk7XHJcbiAgICAgICAgICBpZiAoIXNjb3BlLnN1YlRhYkNvbmZpZyB8fCAhc2NvcGUuc3ViVGFiQ29uZmlnLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2hpZGRlbic7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sbGFwc2VkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnY29sbGFwc2VkJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NvcGUuJG9uKCdoYXd0aW9Db2xsYXBzZU5hdicsICgpID0+IHtcclxuICAgICAgICAgIGNvbGxhcHNlZCA9ICFjb2xsYXBzZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2NvcGUuJHdhdGNoKCdIYXd0aW9TdWJUYWJzLmdldCgpJywgKHN1YlRhYkNvbmZpZykgPT4ge1xyXG4gICAgICAgICAgc2NvcGUuc3ViVGFiQ29uZmlnID0gc3ViVGFiQ29uZmlnO1xyXG5cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XSk7XHJcblxyXG4gIF9tb2R1bGUuZGlyZWN0aXZlKCdoYXd0aW9CcmVhZGNydW1ic091dGxldCcsIFsnSGF3dGlvQnJlYWRjcnVtYnMnLCAnSGF3dGlvU3ViVGFicycsIChIYXd0aW9CcmVhZGNydW1icywgSGF3dGlvU3ViVGFicykgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdHJpY3Q6ICdFJyxcclxuICAgICAgc2NvcGU6IHt9LFxyXG4gICAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXYgbmF2YmFyLW5hdiBuYXYtYnJlYWRjcnVtYiBuYXYtYnJlYWRjcnVtYnNcIiBuZy1zaG93PVwiYnJlYWRjcnVtYkNvbmZpZ1wiIG5nLWNvbnRyb2xsZXI9XCJEZXZlbG9wZXIuTmF2QmFyQ29udHJvbGxlclwiPlxyXG4gICAgICAgICAgPG9sIGNsYXNzPVwiYnJlYWRjcnVtYlwiPlxyXG4gICAgICAgICAgICA8bGkgbmctcmVwZWF0PVwiYnJlYWRjcnVtYiBpbiBicmVhZGNydW1iQ29uZmlnXCIgbmctc2hvdz1cImlzVmFsaWQoYnJlYWRjcnVtYikgJiYgbGFiZWwoYnJlYWRjcnVtYilcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2JyZWFkY3J1bWIuYWN0aXZlID8gJ2FjdGl2ZScgOiAnJ319XCJcclxuICAgICAgICAgICAgICAgIG5nLWNsYXNzPVwiJGxhc3QgPyAnZHJvcGRvd24nIDogJydcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxhIG5nLXNob3c9XCJicmVhZGNydW1iLmhyZWZcIiBocmVmPVwie3ticmVhZGNydW1iLmhyZWZ9fVwiPnt7bGFiZWwoYnJlYWRjcnVtYil9fTwvYT5cclxuICAgICAgICAgICAgICA8c3BhbiBuZy1oaWRlPVwiYnJlYWRjcnVtYi5ocmVmXCI+e3tsYWJlbChicmVhZGNydW1iKX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgbmctc2hvdz1cInBhZ2VUaXRsZVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIG5nLWJpbmQ9XCJwYWdlVGl0bGVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L29sPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICBgLFxyXG4gICAgICBsaW5rOiAoc2NvcGUsIGVsZW1lbnQsIGF0dHJzKSA9PiAge1xyXG4gICAgICAgIHNjb3BlLmJyZWFkY3J1bWJzID0gSGF3dGlvQnJlYWRjcnVtYnM7XHJcbiAgICAgICAgc2NvcGUudGFicyA9IEhhd3Rpb1N1YlRhYnM7XHJcbiAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignYnJlYWRjcnVtYnMuZ2V0KCknLCAoYnJlYWRjcnVtYkNvbmZpZykgPT4ge1xyXG4gICAgICAgICAgc2NvcGUuYnJlYWRjcnVtYkNvbmZpZyA9IGJyZWFkY3J1bWJDb25maWc7ICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ3RhYnMuZ2V0KCknLCAodGFicykgPT4geyAgICAgICAgXHJcbiAgICAgICAgICB2YXIgYWN0aXZlID0gXy5maW5kKHRhYnMsICh0YWI6YW55KSA9PiB0YWIuYWN0aXZlKTtcclxuICAgICAgICAgIGlmIChhY3RpdmUpIHtcclxuICAgICAgICAgICAgc2NvcGUucGFnZVRpdGxlID0gYWN0aXZlLmxhYmVsO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2NvcGUucGFnZVRpdGxlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1dKTtcclxuXHJcbiAgX21vZHVsZS5kaXJlY3RpdmUoJ3BsYXRmb3JtU3ViVGFic091dGxldCcsIFsnSGF3dGlvU3ViVGFicycsIChIYXd0aW9TdWJUYWJzKSA9PiB7XHJcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlc3RyaWN0OiAnQUUnLFxyXG4gICAgICByZXBsYWNlOiB0cnVlLFxyXG4gICAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtcGYtdmVydGljYWwgbmF2LXBmLXZlcnRpY2FsLXdpdGgtc2Vjb25kYXJ5LW5hdiBzal9tZW51XCIgIG5nLWNvbnRyb2xsZXI9XCJEZXZlbG9wZXIuTmF2QmFyQ29udHJvbGxlclwiIG5nLWNsYXNzPVwiZ2V0Q2xhc3MoKVwiPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLWxmLW1lbnUgXCIgID5cclxuICAgICAgICAgICAgPGxpIG5nLXJlcGVhdD1cInN1YlRhYiBpbiBzdWJUYWJDb25maWcgXCIgPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHBhbmRhYmxlIGNsb3NlZCBcIiAgbmctc2hvdz1cInN1YlRhYi5pdGVtcy5sZW5ndGhcIiBzdHlsZT1cIiBwYWRkaW5nOjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUgc2pfbWVudV9uYXZcIiA+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIHNqX21lbnVfMDFcIiA+e3tzdWJUYWIubGFiZWx9fTwvaT4gXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImV4cGFuZGFibGUtYm9keSAgc2pfbWVudV91bFwiID5cclxuICAgICAgICAgICAgICAgICAgPGxpIG5nLXJlcGVhdD1cIml0ZW0gaW4gc3ViVGFiLml0ZW1zXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2l0ZW0uaHJlZn19XCIgPnt7aXRlbS5sYWJlbH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IG5nLWhpZGU9XCJzdWJUYWIuaXRlbXMubGVuZ3RoXCIgY2xhc3M9XCJzal9tZW51X25hdlwiID5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIHNqX21lbnVfMDJcIiA+PC9pPjxhIGhyZWY9XCJ7e3N1YlRhYi5ocmVmfX1cIj57e3N1YlRhYi5sYWJlbH19PC9hPiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xpPiAgXHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PiBcclxuICAgICAgYCxcclxuICAgICAgbGluazogKHNjb3BlLCBlbGVtZW50LCBhdHRycykgPT4ge1xyXG4gICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vKDxhbnk+JCkoKS5zZXR1cFZlcnRpY2FsTmF2aWdhdGlvbihmYWxzZSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGlmIHdlIGhhdmVuJ3QgbG9hZGVkIHBhdHRlcm5mbHlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NvcGUuSGF3dGlvU3ViVGFicyA9IEhhd3Rpb1N1YlRhYnM7XHJcblxyXG4gICAgICAgIHZhciBjb2xsYXBzZWQgPSBmYWxzZTtcclxuICAgICAgICBzY29wZS5nZXRDbGFzcyA9ICgpID0+IHtcclxuICAgICAgICAgIC8vbG9nLmRlYnVnKFwiTXkgY2xhc3M6IFwiLCBlbGVtZW50LmF0dHIoJ2NsYXNzJykpO1xyXG4gICAgICAgICAgaWYgKCFzY29wZS5zdWJUYWJDb25maWcgfHwgIXNjb3BlLnN1YlRhYkNvbmZpZy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdoaWRkZW4nO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2NvbGxhcHNlZCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjb3BlLiRvbignaGF3dGlvQ29sbGFwc2VOYXYnLCAoKSA9PiB7XHJcbiAgICAgICAgICBjb2xsYXBzZWQgPSAhY29sbGFwc2VkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNjb3BlLiR3YXRjaCgnSGF3dGlvU3ViVGFicy5nZXQoKScsIChzdWJUYWJDb25maWcpID0+IHtcclxuICAgICAgICAgIHNjb3BlLnN1YlRhYkNvbmZpZyA9IHN1YlRhYkNvbmZpZztcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfV0pO1xyXG5cclxuICAvL2hhd3Rpb1BsdWdpbkxvYWRlci5hZGRNb2R1bGUoJ3BhdHRlcm5mbHknKTtcclxuXHJcbiAgaGF3dGlvUGx1Z2luTG9hZGVyLmFkZE1vZHVsZShwbHVnaW5OYW1lKTtcclxuXHJcbn1cclxuXHJcbiIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2RldmVsb3Blci90cy9kZXZlbG9wZXJOYXZpZ2F0aW9uLnRzXCIvPlxyXG5cclxubW9kdWxlIFN5c3RlbXtcclxuXHRleHBvcnQgdmFyICBwbHVnaW5OYW1lID0gXCJTeXN0ZW1cIjtcclxuXHRleHBvcnQgdmFyIGNvbnRleHQgPSBcIi9zeXN0ZW1cIjtcdFxyXG5cdGV4cG9ydCB2YXIgcGx1Z2luUGF0aCA9IFwicGx1Z2lucy9zeXN0ZW0vXCJcclxuXHRleHBvcnQgdmFyIHRlbXBsYXRlUGF0aCA9IHBsdWdpblBhdGggKyAnaHRtbC8nO1xyXG5cclxuXHRleHBvcnQgZnVuY3Rpb24gc2hhcmVJbml0KCRzY29wZSl7XHJcblx0XHQvL+WIm+W7uuS6jOe6p+WtkOiPnOWNlVxyXG5cdFx0JHNjb3BlLnN1YlRhYkNvbmZpZyA9IERldmVsb3Blci5hY3RpdmF0ZUN1cnJlbnQoW1xyXG5cdFx0e1xyXG5cdFx0XHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3N5c3RlbS1saXN0JyksXHJcblx0XHRcdGxhYmVsOiAn5L+h5oGv57O757uf5riF5Y2VJyxcclxuXHRcdFx0dGl0bGU6ICfmn6XnnIvkv6Hmga/ns7vnu5/muIXljZUnXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRocmVmOiBVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3N5c3RlbS12ZXJpZmljYXRpb24nKSxcclxuXHRcdFx0bGFiZWw6ICfkv6Hmga/ns7vnu5/moKHpqownLFxyXG5cdFx0XHR0aXRsZTogJ+agoemqjOS/oeaBr+ezu+e7nydcdFx0XHRcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc3lzdGVtLWhlbHAnKSxcclxuXHRcdFx0bGFiZWw6ICfluK7liqknLFxyXG5cdFx0XHR0aXRsZTogJ+ihjOaUv+WMuuWIkuS7o+eggeaIluezu+e7n+S7o+eggeajgOe0oicsXHJcblx0XHRcdGl0ZW1zOiBbe1xyXG5cdFx0XHRcdGhyZWY6IFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc3lzdGVtLWhlbHAnLCAncmVnaW9uYWxpc20tc2VhcmNoJyksXHJcblx0XHRcdFx0dGl0bGU6ICfooYzmlL/ljLrliJLku6PnoIHmo4DntKInLFxyXG5cdFx0XHRcdGxhYmVsOiAn6KGM5pS/5Yy65YiS5qOA57SiJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0aHJlZjogVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdzeXN0ZW0taGVscCcsICdzeXN0ZW0tc2VhcmNoJyksXHJcblx0XHRcdFx0dGl0bGU6ICfns7vnu5/ku6PnoIHmo4DntKInLFxyXG5cdFx0XHRcdGxhYmVsOiAn57O757uf5Luj56CB5qOA57SiJ1xyXG5cdFx0XHR9XVx0XHRcclxuXHRcdH1dKTtcclxuXHR9XHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJzeXN0ZW1IZWxwZXJzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9jb25maWdQbHVnaW4udHNcIi8+XHJcblxyXG5tb2R1bGUgU3lzdGVte1xyXG5cdGV4cG9ydCB2YXIgX21vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKHBsdWdpbk5hbWUsIFsnaGF3dGlvLWNvcmUnLCAnaGF3dGlvLXVpJywgJ3VpLmNvZGVtaXJyb3InLCAndWkudmFsaWRhdGUnLCAna3ViZXJuZXRlc1VJJywgJ25nRmlsZVVwbG9hZCcsICduZ0RpYWxvZyddKTtcclxuICBcdGV4cG9ydCB2YXIgY29udHJvbGxlciA9IFBsdWdpbkhlbHBlcnMuY3JlYXRlQ29udHJvbGxlckZ1bmN0aW9uKF9tb2R1bGUsIHBsdWdpbk5hbWUpO1xyXG5cdGV4cG9ydCB2YXIgcm91dGUgPSBQbHVnaW5IZWxwZXJzLmNyZWF0ZVJvdXRpbmdGdW5jdGlvbih0ZW1wbGF0ZVBhdGgpO1xyXG5cclxuXHQvKlxyXG5cdFx06aG16Z2i6Lev55Sx6YWN572uXHJcblx0Ki9cclxuXHRfbW9kdWxlLmNvbmZpZyhbJyRwcm92aWRlJywgJyRyb3V0ZVByb3ZpZGVyJywgKCRwcm92aWRlLCAkcm91dGVQcm92aWRlcikgPT57XHJcblx0XHQkcm91dGVQcm92aWRlci53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnLycpLCByb3V0ZSgnc3lzdGVtTGlzdC5odG1sJywgZmFsc2UpKVxyXG5cdFx0XHRcdFx0ICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3N5c3RlbS1saXN0JyksIHJvdXRlKCdzeXN0ZW1MaXN0Lmh0bWwnLCBmYWxzZSkpXHJcblx0XHRcdFx0XHQgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc3lzdGVtLWhlbHAnKSwgcm91dGUoJ3JlZ2lvbmFsaXNtQ29kZVNlYXJjaC5odG1sJywgZmFsc2UpKVxyXG5cdFx0XHRcdFx0ICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3N5c3RlbS1oZWxwJywgJ3JlZ2lvbmFsaXNtLXNlYXJjaCcpLCByb3V0ZSgncmVnaW9uYWxpc21Db2RlU2VhcmNoLmh0bWwnLCBmYWxzZSkpXHJcblx0XHRcdFx0XHQgIC53aGVuKFVybEhlbHBlcnMuam9pbihjb250ZXh0LCAnc3lzdGVtLWhlbHAnLCAnc3lzdGVtLXNlYXJjaCcpLCByb3V0ZSgnc3lzdGVtQ29kZVNlYXJjaC5odG1sJywgZmFsc2UpKVxyXG5cdFx0XHRcdFx0ICAud2hlbihVcmxIZWxwZXJzLmpvaW4oY29udGV4dCwgJ3N5c3RlbS12ZXJpZmljYXRpb24nKSwgcm91dGUoJ3N5c3RlbVZlcmlmaWNhdGlvbi5odG1sJywgZmFsc2UpKVxyXG5cdFx0XHRcdFx0ICAud2hlbihjb250ZXh0LCB7cmVkaXJlY3RUbzogVXJsSGVscGVycy5qb2luKGNvbnRleHQsICdzeXN0ZW0tbGlzdCcpfSk7XHRcdCAgIFx0XHRcdCAgXHJcblx0fV0pO1xyXG5cclxuXHQvKlxyXG5cdFx05qih5Z2X5Yqg6L295ZCO5Yid5aeL5YyW6YWN572uXHJcblx0Ki9cclxuXHRfbW9kdWxlLnJ1bihbJ3ZpZXdSZWdpc3RyeScsICckdGVtcGxhdGVDYWNoZScsICdIYXd0aW9OYXYnLCAnJGNvbXBpbGUnLCAodmlld1JlZ2lzdHJ5LCAkdGVtcGxhdGVDYWNoZTpuZy5JVGVtcGxhdGVDYWNoZVNlcnZpY2UsIEhhd3Rpb05hdiwgICRjb21waWxlOm5nLklDb21waWxlU2VydmljZSkgPT4ge1xyXG4gICAgICAgIHZpZXdSZWdpc3RyeVsnc3lzdGVtJ10gPSBDb25maWdzLnRlbXBsYXRlUGF0aCArIFwic2hhcmVMYXlvdXQuaHRtbFwiOyBcclxuICAgICAgICAvKlxyXG4gICAgICAgIFx05L+h5oGv57O757uf5LiA57qn6I+c5Y2V5a+86IiqXHJcbiAgICAgICAgKi9cclxuICAgICAgICB2YXIgYnVpbGRlciA9IEhhd3Rpb05hdi5idWlsZGVyKCk7IFxyXG4gICAgICAgIHZhciBzeXN0ZW1UYWIgPSBidWlsZGVyLmlkKCdzeXN0ZW1UYWInKVxyXG4gICAgICAgICAgICAgICAgICAgICAucmFuaygxMClcclxuICAgICAgICAgICAgICAgICAgICAgLmhyZWYoKCkgPT4gY29udGV4dClcclxuICAgICAgICAgICAgICAgICAgICAgLnRpdGxlKCgpID0+ICfkv6Hmga/ns7vnu58nKVxyXG4gICAgICAgICAgICAgICAgICAgICAvLy5pc1ZhbGlkKCgpID0+ICFDb3JlLmlzUmVtb3RlQ29ubmVjdGlvbigpKSAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7ICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgIEhhd3Rpb05hdi5hZGQoc3lzdGVtVGFiKTtcclxuICAgIH1dKTtcclxuXHJcblx0Ly8g5Yqg6L295qih5Z2XIFxyXG5cdGhhd3Rpb1BsdWdpbkxvYWRlci5hZGRNb2R1bGUocGx1Z2luTmFtZSk7IFxyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwic3lzdGVtUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwic3lzdGVtSGVscGVycy50c1wiLz5cXFxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vY29uZmlncy90cy9jb25maWdzRGF0YVNlcnZpY2UudHNcIi8+XHJcbm1vZHVsZSBTeXN0ZW17XHJcblxyXG5cdGV4cG9ydCB2YXIgUmVnaW9uYWxpc21Db2RlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIoJ1JlZ2lvbmFsaXNtQ29kZUNvbnRyb2xsZXInLCBbXCIkc2NvcGVcIiwgXCIkdGVtcGxhdGVDYWNoZVwiLCBcIiRsb2NhdGlvblwiLCBcIiRyb3V0ZVBhcmFtc1wiLCBcIiRodHRwXCIsIFwiJHRpbWVvdXRcIiwgJ1N5c3RlbU1vZGVsJywgJ05nVGFibGVQYXJhbXMnLCBcclxuXHRcdCgkc2NvcGUsICR0ZW1wbGF0ZUNhY2hlOm5nLklUZW1wbGF0ZUNhY2hlU2VydmljZSwgJGxvY2F0aW9uLCAkcm91dGVQYXJhbXMsICRodHRwLCAkdGltZW91dCwgU3lzdGVtTW9kZWwsIE5nVGFibGVQYXJhbXMpID0+e1x0XHRcclxuXHQgICAgXHJcblx0ICAgIHNoYXJlSW5pdCgkc2NvcGUpO1xyXG5cdCAgICAgICAgXHJcblx0ICAgICRzY29wZS5tb2RlbCA9IFN5c3RlbU1vZGVsO1x0ICAgXHJcblxyXG5cdCAgICAvL2NvbnNvbGUubG9nKCRzY29wZS5tb2RlbC5yZWdpb25hbGlzbUluZm8pOyBcclxuXHJcblx0ICAgICRzY29wZS50YWJsZVBhcmFtcyA9IG5ldyBOZ1RhYmxlUGFyYW1zKHtjb3VudDogMjV9LCB7XHJcblx0ICAgIFx0Y291bnRzOiBbMjUsIDUwLCAxMDBdLFxyXG4gICAgICBcdFx0ZGF0YXNldDogJHNjb3BlLm1vZGVsLnJlZ2lvbmFsaXNtSW5mb1xyXG4gICBcdFx0IH0pO1x0ICBcclxuXHR9XSk7XHJcbn0iLCIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vaW5jbHVkZXMudHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJzeXN0ZW1QbHVnaW4udHNcIi8+XHJcbi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJzeXN0ZW1IZWxwZXJzLnRzXCIvPlxyXG5tb2R1bGUgU3lzdGVte1xyXG5cclxuICAgIGV4cG9ydCB2YXIgU3lzdGVtQ29kZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyKCdTeXN0ZW1Db2RlQ29udHJvbGxlcicsIFtcIiRzY29wZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJGxvY2F0aW9uXCIsIFwiJHJvdXRlUGFyYW1zXCIsIFwiJGh0dHBcIiwgXCIkdGltZW91dFwiLCAnU3lzdGVtTW9kZWwnLCAnTmdUYWJsZVBhcmFtcycsXHJcbiAgICAgICAgKCRzY29wZSwgJHRlbXBsYXRlQ2FjaGU6bmcuSVRlbXBsYXRlQ2FjaGVTZXJ2aWNlLCAkbG9jYXRpb24sICRyb3V0ZVBhcmFtcywgJGh0dHAsICR0aW1lb3V0LCBTeXN0ZW1Nb2RlbCwgTmdUYWJsZVBhcmFtcykgPT57ICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgc2hhcmVJbml0KCRzY29wZSk7XHJcblxyXG4gICAgICAgICRzY29wZS5tb2RlbCA9IFN5c3RlbU1vZGVsO1xyXG5cclxuICAgICAgICAkc2NvcGUudGFibGVQYXJhbXMgPSBuZXcgTmdUYWJsZVBhcmFtcyh7Y291bnQ6IDI1fSwge1xyXG5cdCAgICBcdGNvdW50czogWzI1LCA1MCwgMTAwXSxcclxuICAgICAgXHRcdGRhdGFzZXQ6ICRzY29wZS5tb2RlbC5zeXN0ZW1JbmZvXHJcbiAgIFx0XHR9KTtcclxuICAgIH1dKTtcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInN5c3RlbVBsdWdpbi50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInN5c3RlbUhlbHBlcnMudHNcIi8+XHJcblxyXG5tb2R1bGUgU3lzdGVte1xyXG5cdGV4cG9ydCB2YXIgU3lzdGVtTGlzdENvbnRyb2xsZXIgPSBjb250cm9sbGVyKCdTeXN0ZW1MaXN0Q29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRsb2NhdGlvbicsICckaHR0cCcsICckdGVtcGxhdGVDYWNoZScsICdVcGxvYWQnLCAnTmdUYWJsZVBhcmFtcycsICduZ0RpYWxvZycsICgkc2NvcGUsICRsb2NhdGlvbiwgJGh0dHAsICR0ZW1wbGF0ZUNhY2hlLCBVcGxvYWQsIE5nVGFibGVQYXJhbXMsIG5nRGlhbG9nKSA9PiB7XHJcblx0XHRzaGFyZUluaXQoJHNjb3BlKTtcclxuXHJcblx0XHQvLyDooajlpLTmmL7npLrnmoTkv6Hmga9cclxuXHRcdCRzY29wZS5jb2x1bW5zPSBbXHJcbiAgICAgICAgICB7IGZpZWxkOiAnaWQnLCB0aXRsZTogJ+aTjeS9nCcsIHNob3c6IHRydWV9LFx0XHRcdFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJvYmplY3RcIiwgdGl0bGU6IFwi6YeH6ZuG5a+56LGhXCIsIGZpbHRlcjogeyBvYmplY3Q6IFwic2VsZWN0XCIgfSwgZmlsdGVyRGF0YTogYm9vbGVhbkNob29zZSgpLCBzaG93OiB0cnVlIH0sXHJcbiAgICAgIFx0XHR7IGZpZWxkOiBcImNpdHlcIiwgdGl0bGU6IFwi5biCXCIsIGZpbHRlcjogeyBjaXR5OiAndGV4dCcgfSwgc2hvdzogdHJ1ZSB9LFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJjb3VudHlcIiwgdGl0bGU6IFwi5Yy6L+WOv1wiLCBmaWx0ZXI6IHsgY291bnR5OiAndGV4dCcgfSwgc2hvdzogdHJ1ZSB9LFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJyZWdpb25hbGlzbUNvZGVcIiwgdGl0bGU6IFwi6KGM5pS/5Yy65YiS5Luj56CBXCIsIGZpbHRlcjoge3JlZ2lvbmFsaXNtQ29kZTogJ3RleHQnfSwgc2hvdzogdHJ1ZSB9LFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJsZXZlbFwiLCB0aXRsZTogXCLnuqfmrKFcIiwgZmlsdGVyOiB7IGxldmVsOiBcInNlbGVjdFwiIH0sIGZpbHRlckRhdGE6IGxldmVsVHlwZSgpLCBzaG93OiB0cnVlIH0sXHJcbiAgICAgIFx0XHR7IGZpZWxkOiBcInN5c3RlbUNvZGVcIiwgdGl0bGU6IFwi57O757uf57yW56CBXCIsIGZpbHRlcjogeyBzeXN0ZW1Db2RlOiBcInRleHRcIiB9LCBzaG93OiB0cnVlIH0sXHJcbiAgICAgIFx0XHR7IGZpZWxkOiBcInN5c3RlbU5hbWVcIiwgdGl0bGU6IFwi5L+h5oGv57O757uf5ZCN56ewXCIsIGZpbHRlcjogeyBzeXN0ZW1OYW1lOiBcInRleHRcIiB9LCBzaG93OiB0cnVlIH0sXHJcbiAgICAgIFx0XHR7IGZpZWxkOiBcImNvbnRhY3RzUGVyc29uXCIsIHRpdGxlOiBcIuiBlOezu+S6ulwiLCBmaWx0ZXI6IHsgY29udGFjdHNQZXJzb246IFwidGV4dFwiIH0sIHNob3c6IHRydWUgfSxcclxuICAgICAgXHRcdHsgZmllbGQ6IFwiY29udGFjdHNNZXRob2RcIiwgdGl0bGU6IFwi6IGU57O75pa55byPXCIsIGZpbHRlcjogeyBjb250YWN0c01ldGhvZDogXCJ0ZXh0XCIgfSwgc2hvdzogdHJ1ZSB9LFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJkYXRhYmFzZVR5cGVcIiwgdGl0bGU6IFwi5pWw5o2u5bqT57G75Z6LXCIsIGZpbHRlcjogeyBkYXRhYmFzZVR5cGU6IFwic2VsZWN0XCIgfSwgZmlsdGVyRGF0YTogZGF0YWJhc2VUeXBlKCksIHNob3c6IHRydWV9LFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJ1c2VyU3FsXCIsIHRpdGxlOiBcIm9yYWNsZeeUqOaIt+WQjeihqOepuumXtFwiLCBmaWx0ZXI6IHsgdXNlclNxbDogXCJzZWxlY3RcIiB9LCBmaWx0ZXJEYXRhOiBib29sZWFuQ2hvb3NlKCksIHNob3c6IHRydWV9LFxyXG4gICAgICBcdFx0eyBmaWVsZDogXCJjaGVja1NxbFwiLCB0aXRsZTogXCLmlK/ku5jkv6Hmga/moIflh4booajohJrmnKxcIiwgZmlsdGVyOiB7IGNoZWNrU3FsOiBcInNlbGVjdFwiIH0sIGZpbHRlckRhdGE6IGJvb2xlYW5DaG9vc2UoKSwgc2hvdzogdHJ1ZX0sXHJcbiAgICAgIFx0XHR7IGZpZWxkOiBcImV4ZWNTcWxcIiwgdGl0bGU6IFwi5Y+v5omn6KGM5qCH5YeG6KGo6ISa5pysXCIsIGZpbHRlcjogeyBleGVjU3FsOiBcInNlbGVjdFwiIH0sIGZpbHRlckRhdGE6IGJvb2xlYW5DaG9vc2UoKSwgc2hvdzogdHJ1ZX0sXHJcbiAgICBcdF07XHJcblxyXG4gICAgXHQkc2NvcGUubW9kZWwgPSBbe1xyXG4gICAgXHRcdGlkOiAxLFxyXG4gICAgXHRcdG9iamVjdDogJ+aYrycsXHJcbiAgICBcdFx0Y2l0eTogJ+WNl+S6rOW4gicsXHJcbiAgICBcdFx0Y291bnR5OiAn546E5q2m5Yy6JyxcclxuICAgIFx0XHRyZWdpb25hbGlzbUNvZGU6ICczMjEwMDEnLFxyXG4gICAgXHRcdGxldmVsOiAn5biC57qnJyxcclxuICAgIFx0XHRzeXN0ZW1Db2RlOiAnNScsXHJcbiAgICBcdFx0c3lzdGVtTmFtZTogJ+mdnueojuezu+e7nycsXHJcblx0XHRcdCAgY29udGFjdHNQZXJzb246ICfllJDlg6cnLFxyXG5cdFx0XHQgIGNvbnRhY3RzTWV0aG9kOiAnMTU1NzUxNzA3ODYnLFxyXG5cdFx0XHQgIGRhdGFiYXNlVHlwZTogJ29yYWNsZScsXHJcblx0XHRcdCAgdXNlclNxbDogJ+aYrycsXHJcblx0XHRcdCAgY2hlY2tTcWw6ICfmmK8nLFxyXG5cdFx0XHQgIGV4ZWNTcWw6ICfmmK8nXHJcbiAgICBcdH0sXHJcbiAgICBcdHsgICBcclxuICAgIFx0XHRpZDogMiwgXHRcdFxyXG4gICAgXHRcdG9iamVjdDogJ+aYrycsXHJcbiAgICBcdFx0Y2l0eTogJ+WNl+S6rOW4gicsXHJcbiAgICBcdFx0Y291bnR5OiAn5rWm5Y+j5Yy6JyxcclxuICAgIFx0XHRyZWdpb25hbGlzbUNvZGU6ICczMjEwMTEnLFxyXG4gICAgXHRcdGxldmVsOiAn5biC57qnJyxcclxuICAgIFx0XHRzeXN0ZW1Db2RlOiAnNScsXHJcbiAgICBcdFx0c3lzdGVtTmFtZTogJ+mihOeul+aJp+ihjCcsXHJcblx0XHRcdGNvbnRhY3RzUGVyc29uOiAn5ZSQ5YOnJyxcclxuXHRcdFx0Y29udGFjdHNNZXRob2Q6ICcxNTY3NTE3MDc4NicsXHJcblx0XHRcdGRhdGFiYXNlVHlwZTogJ29yYWNsZScsXHJcblx0XHRcdHVzZXJTcWw6ICfmmK8nLFxyXG5cdFx0XHRjaGVja1NxbDogJ+aYrycsXHJcblx0XHRcdGV4ZWNTcWw6ICfmmK8nICAgIFx0XHJcbiAgICBcdH1dXHJcblxyXG4gICAgXHQvLyDngrnlh7vmn6XnnIvmjInpkq7kuovku7blpITnkIblh73mlbBcclxuICAgIFx0JHNjb3BlLnZpZXdDbGljayA9IChzZWxlY3RlZCkgPT4ge1xyXG4gICAgXHRcdG5nRGlhbG9nLm9wZW4oe1xyXG4gICAgXHRcdFx0dGVtcGxhdGU6ICdzeXN0ZW1JbmZvLmh0bWwnLFxyXG4gICAgXHRcdFx0Y29udHJvbGxlcjogJ0NvbmZpZ3MuU3lzdGVtSW5mb0NvbnRyb2xsZXInLFxyXG4gICAgXHRcdFx0d2lkdGg6IDc5MCwgICAgXHRcdFx0XHJcbiAgICBcdFx0XHRjbG9zZUJ5RG9jdW1lbnQ6IGZhbHNlLFxyXG4gICAgXHRcdFx0ZGF0YTogc2VsZWN0ZWQsXHJcbiAgICBcdFx0XHRjbGFzc05hbWU6ICduZ2RpYWxvZy10aGVtZS1kZWZhdWx0J1xyXG4gICAgXHRcdH0pOyAgICBcdCAgICBcdFx0XHJcbiAgICBcdH1cclxuXHJcbiAgICBcdC8vIOihqOaVsOaNrlxyXG5cdFx0JHNjb3BlLnRhYmxlUGFyYW1zID0gbmV3IE5nVGFibGVQYXJhbXMoe2NvdW50OiAyNX0sIHtcclxuXHQgICAgXHRjb3VudHM6IFsyNSwgNTAsIDEwMF0sXHJcbiAgICAgIFx0XHRkYXRhc2V0OiAkc2NvcGUubW9kZWxcclxuICAgXHR9KTtcclxuXHRcdFxyXG4gICAgLy8g5paH5Lu25LiK5LygXHJcblx0XHQkc2NvcGUudXBMb2FkRXhjZWxGaWxlID0gKGZpbGVzKSA9PntcclxuICAgICAgICB2YXIgciA9IG5ldyBSZXN1bWFibGUoe1xyXG4gICAgICAgICAgICB0YXJnZXQ6Jy9qYXZhL2NvbnNvbGUvYXBpL2ZpbGVPcGVyYXRpb24vZmlsZS91cGxvYWQnLFxyXG4gICAgICAgICAgICBjaHVua1NpemU6MSoxMDI0KjEwMjQsXHJcbiAgICAgICAgICAgIHNpbXVsdGFuZW91c1VwbG9hZHM6NCxcclxuICAgICAgICAgICAgdGVzdENodW5rczogdHJ1ZSxcclxuICAgICAgICAgICAgdGhyb3R0bGVQcm9ncmVzc0NhbGxiYWNrczoxLFxyXG4gICAgICAgICAgICBtZXRob2Q6IFwib2N0ZXRcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmKCFyLnN1cHBvcnQpe1xyXG4gICAgICAgICAgICB0aHJvdyBcIuW9k+WJjea1j+iniOWZqOS4jeaUr+aMgVJlc3VtYWJsZS5qc+aWh+S7tuS4iuS8oFwiOyAgICAgICAgICBcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZXMpO1xyXG4gICAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZmlsZXMsIChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgIHIuYWRkRmlsZShmaWxlKTtcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIHIub24oJ2ZpbGVBZGRlZCcsIGZ1bmN0aW9uKGZpbGUpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZSk7XHJcbiAgICAgICAgICAgICAgICByLnVwbG9hZCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHIub24oJ2NvbXBsZXRlJywgZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIC8vIEhpZGUgcGF1c2UvcmVzdW1lIHdoZW4gdGhlIHVwbG9hZCBoYXMgY29tcGxldGVkXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuaWh+S7tuS4iuS8oOWujOavlVwiKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByLm9uKCdmaWxlUHJvZ3Jlc3MnLCBmdW5jdGlvbihmaWxlKXtcclxuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBmb3IgYm90aCB0aGUgZmlsZSBhbmQgdGhlIG92ZXJhbGwgdXBsb2FkXHJcbiAgICAgICAgICAgICAgICAvLyQoJy5yZXN1bWFibGUtZmlsZS0nK2ZpbGUudW5pcXVlSWRlbnRpZmllcisnIC5yZXN1bWFibGUtZmlsZS1wcm9ncmVzcycpLmh0bWwoTWF0aC5mbG9vcihmaWxlLnByb2dyZXNzKCkqMTAwKSArICclJyk7XHJcbiAgICAgICAgICAgICAgICAvLyQoJy5wcm9ncmVzcy1iYXInKS5jc3Moe3dpZHRoOk1hdGguZmxvb3Ioci5wcm9ncmVzcygpKjEwMCkgKyAnJSd9KTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKE1hdGguZmxvb3Ioci5wcm9ncmVzcygpKjEwMCkgKyAnJScpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9ICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vZXhjZWzkuIvovb1cclxuICAgICRzY29wZS5kb3duTG9hZEV4Y2VsRmlsZSA9ICgpID0+eyAgICAgICAgXHJcbiAgICAgICAgJGh0dHAuZ2V0KCcvamF2YS9jb25zb2xlL2FwaS9maWxlT3BlcmF0aW9uL2ZpbGUvZG93bmxvYWQnLCB7IHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB9KVxyXG4gICAgICAgICAgLnN1Y2Nlc3MoIGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgaGVhZGVycykge1xyXG4gICAgICAgICAgICAgIHZhciBvY3RldFN0cmVhbU1pbWUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcclxuICAgICAgICAgICAgICB2YXIgc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgaGVhZGVyc1xyXG4gICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzKCk7XHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBmaWxlbmFtZSBmcm9tIHRoZSB4LWZpbGVuYW1lIGhlYWRlciBvciBkZWZhdWx0IHRvIFwi5pyN5Yqh5YiX6KGoXCJcclxuICAgICAgICAgICAgICB2YXIgZmlsZW5hbWUgPSBoZWFkZXJzWyd4LWZpbGVuYW1lJ10gfHwgJ+acjeWKoeWIl+ihqC54bHMnO1xyXG4gICAgICAgICAgICAgIC8vIERldGVybWluZSB0aGUgY29udGVudCB0eXBlIGZyb20gdGhlIGhlYWRlciBvciBkZWZhdWx0IHRvIFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCJcclxuICAgICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPSBoZWFkZXJzWydjb250ZW50LXR5cGUnXSB8fCBvY3RldFN0cmVhbU1pbWU7XHJcbiAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHVzaW5nIG1zU2F2ZUJsb2IgaWYgc3VwcG9ydGVkXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRyeWluZyBzYXZlQmxvYiBtZXRob2QgLi4uXCIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHsgdHlwZTogY29udGVudFR5cGUgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmKG5hdmlnYXRvci5tc1NhdmVCbG9iKVxyXG4gICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1zU2F2ZUJsb2IoYmxvYiwgZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB1c2luZyBvdGhlciBzYXZlQmxvYiBpbXBsZW1lbnRhdGlvbnMsIGlmIGF2YWlsYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHNhdmVCbG9iID0gbmF2aWdhdG9yW1wid2Via2l0U2F2ZUJsb2JcIl0gfHwgbmF2aWdhdG9yW1wibW96U2F2ZUJsb2JcIl0gfHwgbmF2aWdhdG9yW1wic2F2ZUJsb2JcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZihzYXZlQmxvYiA9PT0gdW5kZWZpbmVkKSB0aHJvdyBcIk5vdCBzdXBwb3J0ZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgIHNhdmVCbG9iKGJsb2IsIGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic2F2ZUJsb2Igc3VjY2VlZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH0gY2F0Y2goZXgpe1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInNhdmVCbG9iIG1ldGhvZCBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcIik7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYoIXN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBibG9iIHVybCBjcmVhdG9yXHJcbiAgICAgICAgICAgICAgICB2YXIgdXJsQ3JlYXRvciA9IHdpbmRvdy5VUkwgfHwgd2luZG93W1wid2Via2l0VVJMXCJdIHx8IHdpbmRvd1tcIm1velVSTFwiXSB8fCB3aW5kb3dbXCJtc1VSTFwiXTtcclxuICAgICAgICAgICAgICBpZih1cmxDcmVhdG9yKXtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSB0byB1c2UgYSBkb3dubG9hZCBsaW5rXHJcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgICAgICAgIGlmKCdkb3dubG9hZCcgaW4gbGluayl7XHJcbiAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byBzaW11bGF0ZSBhIGNsaWNrXHJcbiAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAvLyBQcmVwYXJlIGEgYmxvYiBVUkxcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRyeWluZyBkb3dubG9hZCBsaW5rIG1ldGhvZCB3aXRoIHNpbXVsYXRlZCBjbGljayAuLi5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHsgdHlwZTogY29udGVudFR5cGUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHVybENyZWF0b3IuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGRvd25sb2FkIGF0dHJpYnV0ZSAoU3VwcG9ydGVkIGluIENocm9tZSAxNCsgLyBGaXJlZm94IDIwKylcclxuICAgICAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTaW11bGF0ZSBjbGlja2luZyB0aGUgZG93bmxvYWQgbGlua1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmluaXRNb3VzZUV2ZW50KCdjbGljaycsIHRydWUsIHRydWUsIHdpbmRvdywgMSwgMCwgMCwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmsuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJEb3dubG9hZCBsaW5rIG1ldGhvZCB3aXRoIHNpbXVsYXRlZCBjbGljayBzdWNjZWVkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIH1jYXRjaChleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJEb3dubG9hZCBsaW5rIG1ldGhvZCB3aXRoIHNpbXVsYXRlZCBjbGljayBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoIXN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byB3aW5kb3cubG9jYXRpb24gbWV0aG9kXHJcbiAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAvLyBQcmVwYXJlIGEgYmxvYiBVUkxcclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIHdoZW4gdXNpbmcgd2luZG93LmxvY2F0aW9uIHRvIGZvcmNlIGRvd25sb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUcnlpbmcgZG93bmxvYWQgbGluayBtZXRob2Qgd2l0aCB3aW5kb3cubG9jYXRpb24gLi4uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7IHR5cGU6IG9jdGV0U3RyZWFtTWltZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gdXJsQ3JlYXRvci5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRG93bmxvYWQgbGluayBtZXRob2Qgd2l0aCB3aW5kb3cubG9jYXRpb24gc3VjY2VlZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB9Y2F0Y2goZXgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJEb3dubG9hZCBsaW5rIG1ldGhvZCB3aXRoIHdpbmRvdy5sb2NhdGlvbiBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIXN1Y2Nlc3Mpe1xyXG4gICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHdpbmRvdy5vcGVuIG1ldGhvZFxyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTm8gbWV0aG9kcyB3b3JrZWQgZm9yIHNhdmluZyB0aGUgYXJyYXlidWZmZXIsIHVzaW5nIGxhc3QgcmVzb3J0IHdpbmRvdy5vcGVuXCIpO1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5vcGVuKCdfYmxhbmsnLCAnJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLmVycm9yKGZ1bmN0aW9uKGRhdGEsIHN0YXR1cykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzOiBcIiArIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIC8vIE9wdGlvbmFsbHkgd3JpdGUgdGhlIGVycm9yIG91dCB0byBzY29wZVxyXG4gICAgICAgICAgICAkc2NvcGUuZXJyb3JEZXRhaWxzID0gXCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1czogXCIgKyBzdGF0dXM7XHJcbiAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblx0XHQvL2Jvb2xlYW7pgInmi6nmnaHku7bvvJrmmK8v5ZCmXHJcblx0XHRmdW5jdGlvbiBib29sZWFuQ2hvb3NlKCl7XHJcblx0XHRcdHJldHVybiBbe2lkOiAn5pivJywgdGl0bGU6ICfmmK8nfSwge2lkOiAn5ZCmJywgdGl0bGU6ICflkKYnfV07XHJcblx0XHR9XHJcblx0XHQvLyDmlbDmja7lupPnsbvlnovpgInmi6nmnaHku7bvvJpvcmFjbGUvc3FsU2VydmVyXHJcblx0XHRmdW5jdGlvbiBkYXRhYmFzZVR5cGUoKXtcclxuXHRcdFx0cmV0dXJuIFt7aWQ6ICdvcmFjbGUnLCB0aXRsZTogJ09yYWNsZSd9LCB7aWQ6ICdzcWxTZXJ2ZXInLCB0aXRsZTogJ3NxbFNlcnZlcid9XTtcclxuXHRcdH1cclxuXHJcblx0XHQvL2xldmVs6YCJ5oup5p2h5Lu2XHJcblx0XHRmdW5jdGlvbiBsZXZlbFR5cGUoKXtcclxuXHRcdFx0cmV0dXJuIFt7aWQ6ICfnnIEnLCB0aXRsZTogJ+ecgSd9LCB7aWQ6ICfluIInLCB0aXRsZTogJ+W4gid9LCB7aWQ6ICfljr8nLCB0aXRsZTogJ+WOvyd9XTtcclxuXHRcdH1cclxuXHR9XSlcclxufSIsIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi9pbmNsdWRlcy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInN5c3RlbVBsdWdpbi50c1wiLz5cclxubW9kdWxlIFN5c3RlbXtcclxuXHJcblx0ZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5Q2l0eShyZWdpb25hbGlzbUluZm86IEFycmF5PGFueT4pe1xyXG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xyXG5cdFx0YW5ndWxhci5mb3JFYWNoKHJlZ2lvbmFsaXNtSW5mbywgKGl0ZW0pID0+e1xyXG5cdFx0XHRpZihyZXN1bHQuaW5kZXhPZihpdGVtLmNpdHlOYW1lKSA9PSAtMSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtLmNpdHlOYW1lKTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUNvdW50cnkocmVnaW9uYWxpc21JbmZvOiBBcnJheTxhbnk+LCBjaXR5TmFtZTogc3RyaW5nKXtcclxuXHRcdHZhciByZXN1bHQgPSBbXTtcclxuXHRcdGFuZ3VsYXIuZm9yRWFjaChyZWdpb25hbGlzbUluZm8sIChpdGVtKSA9PntcclxuXHRcdFx0aWYoaXRlbS5jaXR5TmFtZSA9PSBjaXR5TmFtZSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaCh7XHJcblx0XHRcdFx0XHRuYW1lOiBpdGVtLmRpc3RyaWN0TmFtZSwgXHJcblx0XHRcdFx0XHRjb2RlOiBpdGVtLmNvZGVcclxuXHRcdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNsYXNzIHN5c3RlbU1vZGVsU2VydmljZXN7XHJcblx0XHRwdWJsaWMgc3lzdGVtSW5mb0xpc3Q6IEFycmF5PGFueT4gPSBbXTtcclxuXHRcdHB1YmxpYyBzeXN0ZW1JbmZvOiBBcnJheTxhbnk+ID0gW107XHJcblx0XHRwdWJsaWMgcmVnaW9uYWxpc21JbmZvOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG5cdFx0cHVibGljIGNvbnN0cnVjdG9yKCl7XHJcblx0XHRcdC8vdGhpcy51cGRhdGVTeXN0ZW1JbmZvTGlzdCgpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZUNvZGVJbmZvKCk7XHJcblx0XHRcdC8vY29uc29sZS5sb2coY2xhc3NpZnlDb3VudHJ5KHRoaXMucmVnaW9uYWxpc21JbmZvLCAn5Y2X5Lqs5biCJykpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8v5omn6KGM5pWw5o2u5pu05paw5pON5L2cXHJcblx0XHRwdWJsaWMgdXBkYXRlU3lzdGVtSW5mb0xpc3QoKXtcclxuXHRcdFx0dmFyIHJlc3VsdCA9IFtdO1xyXG5cdFx0XHQkLmFqYXgoe1xyXG5cdFx0XHRcdHR5cGU6ICdQT1NUJyxcclxuXHRcdFx0XHR1cmw6ICcvamF2YS9jb25zb2xlL2FwaS9zeXN0ZW0vaW5mb0xpc3QnLFxyXG5cdFx0XHRcdHN1Y2Nlc3M6IChkYXRhKSA9PntcclxuXHRcdFx0XHRcdGlmKGRhdGEpXHJcblx0XHRcdFx0XHRcdHJlc3VsdCA9IGRhdGE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRwdWJsaWMgdXBkYXRlQ29kZUluZm8oKXtcclxuXHRcdFx0dmFyIHJlc3VsdD1udWxsO1xyXG5cdCAgICBcdCQuYWpheCh7IFxyXG5cdFx0XHRcdGFzeW5jOiBmYWxzZSwgXHJcblx0XHRcdFx0dHlwZSA6IFwiUE9TVFwiLCBcclxuXHRcdFx0XHR1cmwgOiBcIi9qYXZhL2NvbnNvbGUvYXBpL2NvZGUvbGlzdFwiLFx0XHRcdFx0XHRcclxuXHRcdFx0XHRzdWNjZXNzIDogZnVuY3Rpb24oZGF0YSkgeyBcclxuXHRcdFx0XHQgICAgaWYoZGF0YSl7XHRcdFx0XHQgICAgXHRcdFxyXG5cdFx0XHRcdFx0ICAgIHJlc3VsdCA9IGRhdGE7XHJcblx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0fSBcclxuXHRcdFx0fSk7XHJcblx0XHRcdHRoaXMucmVnaW9uYWxpc21JbmZvID0gcmVzdWx0LnJlZ2lvbmFsaXNtO1xyXG5cdFx0XHR0aGlzLnN5c3RlbUluZm8gPSByZXN1bHQuc3lzdGVtO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0X21vZHVsZS5mYWN0b3J5KCdTeXN0ZW1Nb2RlbCcsIFsnJHJvb3RTY29wZScsICckaHR0cCcsICgkcm9vdFNjb3BlLCAkaHR0cCkgPT4ge1xyXG5cdFx0cmV0dXJuIG5ldyBzeXN0ZW1Nb2RlbFNlcnZpY2VzKCk7XHJcblx0fV0pO1xyXG59IiwiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL2luY2x1ZGVzLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwic3lzdGVtUGx1Z2luLnRzXCIvPlxyXG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwic3lzdGVtSGVscGVycy50c1wiLz5cclxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cInN5c3RlbVNlcnZpY2VzLnRzXCIvPlxyXG5tb2R1bGUgU3lzdGVte1xyXG4gICAgZXhwb3J0IHZhciBTeXN0ZW1WZXJpZmljYXRpb25Db250cm9sbGVyID0gY29udHJvbGxlcignU3lzdGVtVmVyaWZpY2F0aW9uQ29udHJvbGxlcicsIFsnJHNjb3BlJywgJyRsb2NhdGlvbicsICckdGVtcGxhdGVDYWNoZScsICdVcGxvYWQnLCAnTmdUYWJsZVBhcmFtcycsICduZ0RpYWxvZycsICdTeXN0ZW1Nb2RlbCcsICgkc2NvcGUsICRsb2NhdGlvbiwgJHRlbXBsYXRlQ2FjaGUsIFVwbG9hZCwgTmdUYWJsZVBhcmFtcywgbmdEaWFsb2csIFN5c3RlbU1vZGVsKSA9PiB7XHJcblx0XHQgICAgc2hhcmVJbml0KCRzY29wZSk7XHJcbiAgICAgICAgJHNjb3BlLmNpdGllcyA9ICBjbGFzc2lmeUNpdHkoU3lzdGVtTW9kZWwucmVnaW9uYWxpc21JbmZvKTtcclxuICAgICAgIFxyXG5cdFx0ICAgICRzY29wZS5jb2x1bW5zID0gW1xyXG4gICAgICAgICAgICB7IGZpZWxkOiBcImlkXCIsIHRpdGxlOiAn5bqP5Y+3Jywgc2hvdzogZmFsc2V9LFxyXG4gICAgICAgICAgICB7IGZpZWxkOiBcImNoZWNrUmVzdWx0XCIsIHRpdGxlOiBcIumqjOivgee7k+aenFwiLCBzaG93OiB0cnVlfSxcdFx0XHRcclxuICAgICAgICAgICAgeyBmaWVsZDogXCJoYXNDb2xsZWN0XCIsIHRpdGxlOiBcIumHh+mbhlwiLCBzaG93OiB0cnVlIH0sXHJcbiAgICAgIFx0XHQgIHsgZmllbGQ6IFwiaGFzQ2hlY2tTcWxcIiwgdGl0bGU6IFwi5pSv5LuY5L+h5oGv5qCH5YeG6KGoXCIsIHNob3c6IHRydWUgfSxcclxuICAgICAgXHRcdCAgeyBmaWVsZDogXCJoYXNFeGVjU3FsXCIsIHRpdGxlOiBcIuWPr+aJp+ihjOagh+WHhuihqFwiLCAgc2hvdzogdHJ1ZSB9LFxyXG4gICAgICBcdFx0ICB7IGZpZWxkOiBcImNpdHlcIiwgdGl0bGU6IFwi5biCXCIsICBzaG93OiB0cnVlIH0sXHJcbiAgICAgIFx0XHQgIHsgZmllbGQ6IFwiY291bnR5XCIsIHRpdGxlOiBcIuWMui/ljr9cIiwgc2hvdzogdHJ1ZSB9LFxyXG4gICAgICBcdFx0ICB7IGZpZWxkOiBcInJlZ2lvbmFsaXNtQ29kZVwiLCB0aXRsZTogXCLooYzmlL/ljLrliJLku6PnoIFcIiwgc2hvdzogdHJ1ZSB9LFxyXG4gICAgICBcdFx0ICB7IGZpZWxkOiBcInN5c3RlbUNvZGVcIiwgdGl0bGU6IFwi5L+h5oGv57O757uf5Luj56CBXCIsICBzaG93OiB0cnVlIH0sXHJcbiAgICAgIFx0XHQgIHsgZmllbGQ6IFwiY29udGFjdHNQZXJzb25cIiwgdGl0bGU6IFwi6IGU57O75Lq6XCIsICBzaG93OiB0cnVlIH0sXHJcbiAgICAgIFx0XHQgIHsgZmllbGQ6IFwiY29udGFjdHNNZXRob2RcIiwgdGl0bGU6IFwi6IGU57O75pa55byPXCIsICBzaG93OiB0cnVlIH0sXHJcbiAgICAgIFx0XHQgIHsgZmllbGQ6IFwiZGF0YWJhc2VUeXBlXCIsIHRpdGxlOiBcIuaVsOaNruW6k+exu+Wei1wiLCAgc2hvdzogdHJ1ZX1cclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICAkc2NvcGUubW9kZWwgPSBbe1xyXG4gICAgICAgICAgICBpZDogMSxcclxuICAgICAgICAgICAgY2hlY2tSZXN1bHQ6ICfmmK8nLFxyXG4gICAgICAgICAgICBoYXNDb2xsZWN0OiAn5pivJyxcclxuICAgICAgICAgICAgaGFzQ2hlY2tTcWw6ICfmmK8nLFxyXG4gICAgICAgICAgICBoYXNFeGVjU3FsOiAn5pivJyxcclxuICAgICAgICAgICAgY2l0eTogJ+WNl+S6rOW4gicsXHJcbiAgICAgICAgICAgIGNvdW50eTogJ+eOhOatpuWMuicsXHJcbiAgICAgICAgICAgIHJlZ2lvbmFsaXNtQ29kZTogJzMyMDEwNScsXHJcbiAgICAgICAgICAgIHN5c3RlbUNvZGU6ICcyJyxcclxuICAgICAgICAgICAgY29udGFjdHNQZXJzb246ICfmlofosYbosYYnLFxyXG4gICAgICAgICAgICBjb250YWN0c01ldGhvZDogJzE1NTc4MjAzMTQ2JyxcclxuICAgICAgICAgICAgZGF0YWJhc2VUeXBlOiAnb3JhY2xlJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZDogMixcclxuICAgICAgICAgICAgY2hlY2tSZXN1bHQ6ICflkKYnLFxyXG4gICAgICAgICAgICBoYXNDb2xsZWN0OiAn5pivJyxcclxuICAgICAgICAgICAgaGFzQ2hlY2tTcWw6ICflkKYnLFxyXG4gICAgICAgICAgICBoYXNFeGVjU3FsOiAn5pivJyxcclxuICAgICAgICAgICAgY2l0eTogJ+i/nuS6kea4r+W4gicsXHJcbiAgICAgICAgICAgIGNvdW50eTogJ+a1puWPo+WMuicsXHJcbiAgICAgICAgICAgIHJlZ2lvbmFsaXNtQ29kZTogJzMyMDEwNScsXHJcbiAgICAgICAgICAgIHN5c3RlbUNvZGU6ICc2JyxcclxuICAgICAgICAgICAgY29udGFjdHNQZXJzb246ICfmlofosYbosYYnLFxyXG4gICAgICAgICAgICBjb250YWN0c01ldGhvZDogJzE1NTc4MjAzMTQ3JyxcclxuICAgICAgICAgICAgZGF0YWJhc2VUeXBlOiAnc3FsU2VydmVyJyAgICAgICAgICBcclxuICAgICAgICB9XTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJHNjb3BlLm1vZGVsKTtcclxuXHJcbiAgICAgICAgJHNjb3BlLmZpbHRlclJlc3VsdCA9ICRzY29wZS5tb2RlbDtcclxuXHJcbiAgICAgICAgICAvLyDooajmlbDmja5cclxuICAgICAgICAkc2NvcGUudGFibGVQYXJhbXMgPSBuZXcgTmdUYWJsZVBhcmFtcyh7Y291bnQ6IDI1fSwge1xyXG4gICAgICAgICAgIGNvdW50czogWzI1LCA1MCwgMTAwXSxcclxuICAgICAgICAgICBkYXRhc2V0OiAkc2NvcGUuZmlsdGVyUmVzdWx0XHJcbiAgICAgICAgfSk7ICBcclxuXHJcbiAgICAgICAgJHNjb3BlLmNpdHlTZWxlY3QgPSAoeCkgPT57ICAgICAgICAgICBcclxuICAgICAgICAgIGlmKHggIT0gJ2FsbCcpe1xyXG4gICAgICAgICAgICAkc2NvcGUuY291bnRyaWVzID0gY2xhc3NpZnlDb3VudHJ5KFN5c3RlbU1vZGVsLnJlZ2lvbmFsaXNtSW5mbywgeCk7XHJcbiAgICAgICAgICAgICRzY29wZS5maWx0ZXJSZXN1bHQgPSBbXTtcclxuICAgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5tb2RlbCwgKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICBpZihpdGVtLmNpdHkgPT0geClcclxuICAgICAgICAgICAgICAgICRzY29wZS5maWx0ZXJSZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICRzY29wZS50YWJsZVBhcmFtcy5zZXR0aW5ncyh7XHJcbiAgICAgICAgICAgICAgZGF0YXNldDogJHNjb3BlLmZpbHRlclJlc3VsdFxyXG4gICAgICAgICAgICB9KTsgICAgICAgIFxyXG4gICAgICAgICAgfWVsc2V7ICAgICAgICAgIFxyXG4gICAgICAgICAgICAkc2NvcGUuZmlsdGVyUmVzdWx0ID0gJHNjb3BlLm1vZGVsO1xyXG4gICAgICAgICAgICAkc2NvcGUudGFibGVQYXJhbXMuc2V0dGluZ3Moe1xyXG4gICAgICAgICAgICAgIGRhdGFzZXQ6ICRzY29wZS5maWx0ZXJSZXN1bHRcclxuICAgICAgICAgICAgfSk7IFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gXHJcblxyXG4gICAgICAgICRzY29wZS5jb3VudHJ5U2VsZWN0ID0gKHkpID0+IHsgICAgICAgICBcclxuICAgICAgICAgIGlmKHkgIT0gJ2FsbCcpe1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuZmlsdGVyUmVzdWx0LCAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKGl0ZW0uY291bnR5ID09IHkpXHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICRzY29wZS50YWJsZVBhcmFtcy5zZXR0aW5ncyh7XHJcbiAgICAgICAgICAgICAgZGF0YXNldDogcmVzdWx0XHJcbiAgICAgICAgICAgIH0pOyBcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAkc2NvcGUudGFibGVQYXJhbXMuc2V0dGluZ3Moe1xyXG4gICAgICAgICAgICAgIGRhdGFzZXQ6ICRzY29wZS5maWx0ZXJSZXN1bHRcclxuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkc2NvcGUuY2hlY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygkc2NvcGUudGFibGVQYXJhbXMuZGF0YVswXSk7XHJcbiAgICAgICAgfVxyXG5cdCAgfV0pO1x0XHJcbn0iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= angular.module("hawtio-kubernetes-templates", []).run(["$templateCache", function($templateCache) {$templateCache.put("plugins/developer/html/addDataFile.html","
\r\n
\r\n

江苏省审计厅数据汇总平台

\r\n
\r\n
\r\n
\r\n

本地文件列表

\r\n
    \r\n
  • 文件名
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
\r\n
    \r\n
  • 文件属性
  • \r\n
  • \r\n
  • \r\n
\r\n
\r\n
\r\n \r\n
\r\n

服务器文件列表

\r\n
\r\n
\r\n employee: {{node.name}} age {{node.age}}\r\n
\r\n \r\n
\r\n
\r\n
    \r\n
  • 文件名
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
  • \r\n
\r\n
    \r\n
  • 文件属性
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n
"); $templateCache.put("plugins/developer/html/code.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no tools currently available.

\r\n
\r\n
\r\n
\r\n

There are no tools currently available.

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/environment.html","environment!!!!"); $templateCache.put("plugins/developer/html/environmentPanel.html","
\r\n
\r\n
\r\n
\r\n

\r\n \r\n \r\n {{env.label}}\r\n \r\n

\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {{rc.$name}}\r\n : {{version}}\r\n \r\n \r\n \r\n {{rc.$name}}\r\n : {{version}}\r\n \r\n \r\n  \r\n  \r\n  \r\n \r\n \r\n \r\n \r\n  \r\n  \r\n  \r\n \r\n \r\n {{rc.$podCounters.ready}}\r\n {{rc.$podCounters.valid}}\r\n {{rc.$podCounters.waiting}}\r\n {{rc.$podCounters.error}}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Build #{{rc.$buildId}}\r\n \r\n  \r\n  \r\n  \r\n \r\n \r\n Commit {{rc.$gitCommit | limitTo:7}}\r\n \r\n \r\n \r\n Commit {{rc.$gitCommit | limitTo:7}}\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/environments.html","
\r\n\r\n
\r\n
\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n

Environments Overview

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

No Environment Available

\r\n

Environment is a logical place where deployments happen which maps to a kubernetes / openshift namespace. You will see environments here after you add a build.

\r\n New Build\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n

Active Pipelines

\r\n View All Pipelines >>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n

Commits

\r\n View All Commits >>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n"); $templateCache.put("plugins/developer/html/fileMigrationTask.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

当前没有可以查看的任务列表!

\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n"); $templateCache.put("plugins/developer/html/home.html","
\r\n
\r\n

Perspectives

\r\n\r\n

\r\n Please choose the perspective you would like to use:\r\n

\r\n
\r\n
\r\n\r\n
\r\n

\r\n \r\n \r\n  Develop »\r\n \r\n

\r\n\r\n

\r\n Work on projects and source code\r\n

\r\n
\r\n
\r\n

\r\n \r\n \r\n  Operate »\r\n \r\n

\r\n\r\n

\r\n Manage and run Pods and Services\r\n

\r\n
\r\n
\r\n
"); $templateCache.put("plugins/developer/html/jenkinsApproveModal.html","
\r\n

{{operation}}?

\r\n
\r\n
\r\n Are you sure you wish to {{operation}}?\r\n
\r\n
\r\n \r\n \r\n
\r\n"); $templateCache.put("plugins/developer/html/jenkinsJob.html","
\r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n Trigger\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no builds in this job.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/jenkinsJobs.html","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Trigger\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no jobs in this jenkins.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/jenkinsLog.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Log in Jenkins\r\n \r\n  \r\n \r\n Build in Jenkins\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/jenkinsMetrics.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no completed builds in this job.

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/logPanel.html","
\r\n
\r\n

\r\n
\r\n
\r\n\r\n\r\n"); $templateCache.put("plugins/developer/html/overview.html",""); $templateCache.put("plugins/developer/html/pipeline.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no pipeline stages in this build.

\r\n
\r\n
\r\n\r\n

Pipeline for {{jobId}}

\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/pipelineView.html","
\r\n
\r\n
\r\n

\r\n \r\n Build {{build.displayName}}\r\n \r\n \r\n started {{build.$timestamp.relative()}}\r\n \r\n

\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n View Full Log\r\n
\r\n
\r\n
\r\n
\r\n

Logs

\r\n View Full Log\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/pipelines.html","
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no pipelines for this job.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/projectDetail.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/projectSelector.html","\r\n"); $templateCache.put("plugins/developer/html/projects.html","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n  \r\n \r\n\r\n \r\n\r\n  \r\n\r\n \r\n Create App\r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no projects in this workspace.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/tools.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no tools currently available.

\r\n
\r\n
\r\n
\r\n

There are no tools currently available.

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/workspace.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n  \r\n \r\n Configuration\r\n \r\n  \r\n \r\n Pod\r\n \r\n  \r\n \r\n View Log\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/developer/html/workspaces.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n

当前没有可以查看的数据.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n  \r\n \r\n  \r\n \r\n  \r\n \r\n
\r\n
    \r\n
  • 当前显示1~{{model.data.length}}行,共{{model.data.length}}行。
  • \r\n
  • 每页显示\r\n 行\r\n
  • \r\n
  • 当前页码
  • \r\n
  • \r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

数据迁移

\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/configs/html/configMenuItem.html","\r\n"); $templateCache.put("plugins/configs/html/glusterfsSetting.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
已启用已停止\r\n {{volume.name}}\r\n \r\n 云路径:{{volume.path}}\r\n \r\n \r\n \r\n 已用 {{volume.formatUsedSize}}  /  共 {{volume.formatTotalSize}}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n 服务器{{$index+1}}\r\n \r\n {{row.ip}}\r\n \r\n 存储路径:{{row.path}}\r\n \r\n 已用 {{row.formatUsedSize}}  /  共 {{row.formatAllSize}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n 是否删除:{{showDeleteVolume.item.name}} 云盘?\r\n

\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/configs/html/kubeClusterSetting.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

当前没有配置汇总库信息,请配置,否则汇总操作将不可用!

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

编辑汇总库连接信息:

\r\n

添加汇总库信息:

\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 名称不能为空 请输入输入2-20个字符的数据名称 \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n IP不能为空\r\n 请输入正确的IP地址\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 端口号不能为空\r\n 端口号必须为1~65535的数字\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 用户名不能为空\r\n 用户名必须为2-15个字母、数字或下划线\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 密码不能为空\r\n 密码必须为2-15个字母、数字或下划线\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 服务名不能为空\r\n 服务名必须为1-10个字母\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 表空间名不能为空\r\n 表空间名必须为1-15个字母、数字或下划线\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n 表后缀名不能为空\r\n 表后缀名必须为1-10个字母、数字或下划线\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n"); $templateCache.put("plugins/configs/html/shareLayout.html","\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/appDeployedTemplate.html","
\r\n {{row.entity.$creationDate ? (row.entity.$creationDate | relativeTime) : \'\'}}\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/appDetailTemplate.html","
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{view.appName}}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {{view.service.$host}}\r\n \r\n {{view.service.$host}}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n deployed:\r\n {{view.createdDate | relativeTime}}\r\n
\r\n
\r\n not deployed\r\n
\r\n
\r\n
\r\n
\r\n pod template:\r\n {{view.controllerId}}\r\n
\r\n
\r\n no pod template\r\n
\r\n
\r\n
\r\n \r\n pods:\r\n \r\n {{view.podCount}}\r\n \r\n \r\n {{view.podCount}}\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Pod {{pod.idAbbrev}}\r\n
\r\n
\r\n IP:\r\n {{pod.status.podIP}}\r\n
\r\n
\r\n
\r\n ports: {{pod.$containerPorts.join(\", \")}}\r\n
\r\n
\r\n minion:\r\n \r\n {{pod.$host}}\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Pod {{pod.idAbbrev}}\r\n
\r\n
\r\n IP:\r\n {{pod.status.podIP}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/appIconTemplate.html","\r\n"); $templateCache.put("plugins/kubernetes/html/appPodCountsAndLinkTemplate.html","\r\n"); $templateCache.put("plugins/kubernetes/html/appReplicationControllerTemplate.html","\r\n"); $templateCache.put("plugins/kubernetes/html/appServicesTemplate.html","\r\n"); $templateCache.put("plugins/kubernetes/html/apps.html","
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n  \r\n \r\n  \r\n\r\n  \r\n \r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no apps currently available.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
    \r\n
  • \r\n
    \r\n
    \r\n {{folder.path.capitalize(true)}}Uncategorized\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n  \r\n \r\n  \r\n \r\n
\r\n
\r\n \r\n\r\n
\r\n\r\n
    \r\n
  • \r\n \r\n {{app.name}}\r\n  \r\n \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/breadcrumbs.html","
\r\n
    \r\n
  1. \r\n {{breadcrumb.label}}\r\n {{breadcrumb.label}}\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/build.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n  \r\n \r\n Configuration\r\n \r\n  \r\n \r\n Pod\r\n \r\n  \r\n \r\n View Log\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/buildConfig.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n  \r\n \r\n Edit\r\n \r\n \r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/buildConfigEdit.html","
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n

\r\n Project name must be a lower case DNS name with letters, numbers and dots or dashes such as `example.com`\r\n

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/buildConfigs.html","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n  \r\n Add Build\r\n  \r\n\r\n \r\n Create Project\r\n \r\n  \r\n\r\n \r\n Sign In\r\n \r\n  \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no build configurations available.

\r\n Add Build Configuration\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/buildLogs.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

logs for {{entity.$configId}}

\r\n\r\n

\r\n

\r\n            \r\n              {{logsText}}\r\n            \r\n          
\r\n

\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/builds.html","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no builds currently running.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/deploymentConfig.html","
\r\n
\r\n
\r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/deploymentConfigs.html","
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n  \r\n Create\r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no deployment configurations available.

\r\n Create Deployment Configuration\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/events.html","
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no events currently available.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/host.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n  \r\n \r\n {{rawMode ? \'Form\' : \'Raw\'}}\r\n Edit\r\n  \r\n\r\n Save\r\n  \r\n\r\n  \r\n \r\n Pods\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/hosts.html","
\r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no hosts currently running.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/imageRepositories.html","
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n  \r\n Create\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no image repositories available.

\r\n Create Image Repository\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/importProject.html","
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n

\r\n Create a project by entering or copy/pasting the Git URL for a repository, and give the project a name. By default the name will be based on the repository name.\r\n

\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n

\r\n Project name must be a lower case DNS name with letters, numbers and dots or dashes such as `example.com`\r\n

\r\n

Name of this project

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/kubernetesJsonDirective.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n  \r\n
\r\n
\r\n
\r\n

 {{displayName || appTitle}}

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/layoutKubernetes.html","\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/logShell.html","
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{{containerName}}的汇总日志
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/overview.html","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/pendingPipelines.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

No Pipeline Available

\r\n

Pipeline is a kind of build which uses Jenkins Workflow internally which has multiple Stages. You will see the active pipelines here after you add a build to this project

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/pipelines.html","
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n Create Project\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no build pipelines available.

\r\n Create Build Configuration\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n {{step.buildConfig.metadata.name}}\r\n \r\n \r\n    \r\n \r\n \r\n \r\n build\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n new: {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n \r\n \r\n pending: {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n \r\n \r\n running {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n \r\n \r\n completed {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n \r\n \r\n failed {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n \r\n \r\n {{step.buildConfig.$lastBuild.status}}: {{step.buildConfig.$lastBuild.$creationDate.relative()}}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/pod.html","
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n  {{item.metadata.name}}\r\n \r\n\r\n \r\n  \r\n\r\n \r\n  \r\n \r\n\r\n {{rawMode ? \'Form\' : \'Raw\'}}\r\n  \r\n\r\n Edit\r\n  \r\n\r\n Save\r\n  \r\n\r\n \r\n Events\r\n \r\n  \r\n\r\n
\r\n  \r\n \r\n Connect\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/podCreate.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/podEdit.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/pods.html","
\r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n  \r\n \r\n  \r\n \r\n  \r\n 创建新服务\r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no pods currently running.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/replicationController.html","
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n  {{item.metadata.name}}\r\n \r\n\r\n \r\n  \r\n\r\n \r\n  \r\n\r\n {{rawMode ? \'Form\' : \'Raw\'}}\r\n  \r\n\r\n Edit\r\n  \r\n\r\n Save\r\n  \r\n\r\n \r\n Events\r\n \r\n\r\n    \r\n\r\n \r\n Scale\r\n \r\n\r\n Pods:\r\n \r\n {{item.$podCounters.ready}}\r\n {{item.$podCounters.valid}}\r\n {{item.$podCounters.waiting}}\r\n {{item.$podCounters.error}}\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/replicationControllerCreate.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/replicationControllerEdit.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/replicationControllers.html","
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n  \r\n\r\n \r\n  \r\n\r\n \r\n  \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

当前没有正在运行的oracle服务.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n

数据汇总

\r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n 0 && extractClick.selectedItem\">\r\n
\r\n 您所选择的数据库数据将会被抽取到汇总数据库:\r\n {{extractClick.selectedItem.name}} 中,是否继续请确认!\r\n
\r\n \r\n 当前没有汇总数据库可以选择,请先创建,可以点击创建汇总数据库按钮进行创建或从汇总页面中的服务器数据列表中启动已创建的汇总数据库!\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/secret.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n  \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n
\r\n \r\n \r\n There is already a secret with that name!\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n

Add New Data Field

\r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n \r\n\r\n \r\n That field name is already in use!\r\n \r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n Enter the name of the new data field to add to the secret\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/secrets.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n  \r\n \r\n Create\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no secrets currently available.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/service.html","
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n  {{item.metadata.name}}\r\n \r\n\r\n \r\n  \r\n\r\n \r\n\r\n {{rawMode ? \'Form\' : \'Raw\'}}\r\n  \r\n\r\n Edit\r\n  \r\n\r\n Save\r\n  \r\n\r\n \r\n Connect\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/serviceApps.html","
\r\n \r\n \r\n \r\n \r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/serviceCreate.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/serviceEdit.html","
\r\n
\r\n
\r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/services.html","
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n  \r\n \r\n  \r\n \r\n  \r\n Create\r\n  \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

There are no services currently available.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/tabs.html","
\r\n \r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/templateDescription.html","
\r\n

Description

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/templates.html","
\r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n  \r\n \r\n  \r\n \r\n Target namespace: \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n There are no templates currently available. Add templates by dragging and dropping template files into this area.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n"); $templateCache.put("plugins/kubernetes/html/termShell.html","
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/system/html/regionalismCodeSearch.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

当前没有可以查看的数据.

\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{row.code}}\r\n {{row.cityName}}\r\n {{row.districtName}}
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/system/html/systemCodeSearch.html","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

当前没有可以查看的数据.

\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{row.code}}\r\n {{row.systemName}}
\r\n
\r\n
\r\n
\r\n
\r\n"); $templateCache.put("plugins/system/html/systemList.html","
\r\n
\r\n
\r\n
\r\n
\r\n \r\n  \r\n \r\n  \r\n \r\n  \r\n \r\n  \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n {{row[col.field]}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
"); $templateCache.put("plugins/system/html/systemVerification.html","
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n {{row}}\r\n \r\n
{{row[col.field]}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n");}]); hawtioPluginLoader.addModule("hawtio-kubernetes-templates");